.color--neutral-black--has-hover {
  color: #14171A;
  transition: opacity 0.3s ease-in-out; }
  .color--neutral-black--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .color--neutral-black--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.bg-color--neutral-black--has-hover {
  background-color: #14171A;
  transition: opacity 0.3s ease-in-out; }
  .bg-color--neutral-black--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .bg-color--neutral-black--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.fill-color--neutral-black--has-hover {
  fill: #14171A;
  transition: opacity 0.3s ease-in-out; }
  .fill-color--neutral-black--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .fill-color--neutral-black--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.border-color--neutral-black--has-hover {
  border-color: #14171A;
  transition: opacity 0.3s ease-in-out; }
  .border-color--neutral-black--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .border-color--neutral-black--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.color--neutral-dark-gray--has-hover {
  color: #657786;
  transition: color 0.3s ease-in-out; }
  .color--neutral-dark-gray--has-hover:hover {
    color: color(neutral, black);
    cursor: pointer; }
  .color--neutral-dark-gray--has-hover:active {
    color: color(neutral, black);
    cursor: pointer; }

.bg-color--neutral-dark-gray--has-hover {
  background-color: #657786;
  transition: color 0.3s ease-in-out; }
  .bg-color--neutral-dark-gray--has-hover:hover {
    color: color(neutral, black);
    cursor: pointer; }
  .bg-color--neutral-dark-gray--has-hover:active {
    color: color(neutral, black);
    cursor: pointer; }

.fill-color--neutral-dark-gray--has-hover {
  fill: #657786;
  transition: color 0.3s ease-in-out; }
  .fill-color--neutral-dark-gray--has-hover:hover {
    color: color(neutral, black);
    cursor: pointer; }
  .fill-color--neutral-dark-gray--has-hover:active {
    color: color(neutral, black);
    cursor: pointer; }

.border-color--neutral-dark-gray--has-hover {
  border-color: #657786;
  transition: color 0.3s ease-in-out; }
  .border-color--neutral-dark-gray--has-hover:hover {
    color: color(neutral, black);
    cursor: pointer; }
  .border-color--neutral-dark-gray--has-hover:active {
    color: color(neutral, black);
    cursor: pointer; }

.color--neutral-light-gray--has-hover {
  color: #AAB8C2;
  transition: opacity 0.3s ease-in-out; }
  .color--neutral-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .color--neutral-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.bg-color--neutral-light-gray--has-hover {
  background-color: #AAB8C2;
  transition: opacity 0.3s ease-in-out; }
  .bg-color--neutral-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .bg-color--neutral-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.fill-color--neutral-light-gray--has-hover {
  fill: #AAB8C2;
  transition: opacity 0.3s ease-in-out; }
  .fill-color--neutral-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .fill-color--neutral-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.border-color--neutral-light-gray--has-hover {
  border-color: #AAB8C2;
  transition: opacity 0.3s ease-in-out; }
  .border-color--neutral-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .border-color--neutral-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.color--neutral-extra-light-gray--has-hover {
  color: #CCD6DD;
  transition: opacity 0.3s ease-in-out; }
  .color--neutral-extra-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .color--neutral-extra-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.bg-color--neutral-extra-light-gray--has-hover {
  background-color: #CCD6DD;
  transition: opacity 0.3s ease-in-out; }
  .bg-color--neutral-extra-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .bg-color--neutral-extra-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.fill-color--neutral-extra-light-gray--has-hover {
  fill: #CCD6DD;
  transition: opacity 0.3s ease-in-out; }
  .fill-color--neutral-extra-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .fill-color--neutral-extra-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.border-color--neutral-extra-light-gray--has-hover {
  border-color: #CCD6DD;
  transition: opacity 0.3s ease-in-out; }
  .border-color--neutral-extra-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .border-color--neutral-extra-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.color--neutral-extra-extra-light-gray--has-hover {
  color: #F5F8FA;
  transition: opacity 0.3s ease-in-out; }
  .color--neutral-extra-extra-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .color--neutral-extra-extra-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.bg-color--neutral-extra-extra-light-gray--has-hover {
  background-color: #F5F8FA;
  transition: opacity 0.3s ease-in-out; }
  .bg-color--neutral-extra-extra-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .bg-color--neutral-extra-extra-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.fill-color--neutral-extra-extra-light-gray--has-hover {
  fill: #F5F8FA;
  transition: opacity 0.3s ease-in-out; }
  .fill-color--neutral-extra-extra-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .fill-color--neutral-extra-extra-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.border-color--neutral-extra-extra-light-gray--has-hover {
  border-color: #F5F8FA;
  transition: opacity 0.3s ease-in-out; }
  .border-color--neutral-extra-extra-light-gray--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .border-color--neutral-extra-extra-light-gray--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.color--neutral-white--has-hover {
  color: #FFFFFF;
  transition: opacity 0.3s ease-in-out; }
  .color--neutral-white--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .color--neutral-white--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.bg-color--neutral-white--has-hover {
  background-color: #FFFFFF;
  transition: opacity 0.3s ease-in-out; }
  .bg-color--neutral-white--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .bg-color--neutral-white--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.fill-color--neutral-white--has-hover {
  fill: #FFFFFF;
  transition: opacity 0.3s ease-in-out; }
  .fill-color--neutral-white--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .fill-color--neutral-white--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

.border-color--neutral-white--has-hover {
  border-color: #FFFFFF;
  transition: opacity 0.3s ease-in-out; }
  .border-color--neutral-white--has-hover:hover {
    opacity: 0.6;
    cursor: pointer; }
  .border-color--neutral-white--has-hover:active {
    opacity: 0.6;
    cursor: pointer; }

/*
  Color Hover Utility Classes:
  Creates a class for each category and color combination based on the interaction
  logic of the system (hover goes to one shade darker, active and hover are the same).

  .bg-color--dark-blue--hover {
    transition: background-color $transitionTiming $transitionEasing;
    &:hover {
      background-color: #005FD1;
    }
    &:active {
      background-color: #005FD1;
    }
  }


  Properties: color, background-color (bg-color), fill (fill-color), border-color
  Categories: extra-dark, dark, light, extra-light, neutral
  Colors: orange, yellow, green, blue, purple, pink

  .{property}--{category}-{color}--hover {
    transition: {property} $transitionTiming $transitionEasing;
    &:hover {
      {property}: {hoverColor};
    }
    &:active {
      {property}: {activeColor};
    }
  }

  Note: the background-color property uses bg-color in the classname.
  All others use the same class name as the CSS property they set.

*/
.color--extra-light-orange--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-light-orange--hover:hover {
    color: #FF8D57;
    cursor: pointer; }
  .color--extra-light-orange--hover:active {
    color: #FF8D57;
    cursor: pointer; }

.bg-color--extra-light-orange--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-light-orange--hover:hover {
    background-color: #FF8D57;
    cursor: pointer; }
  .bg-color--extra-light-orange--hover:active {
    background-color: #FF8D57;
    cursor: pointer; }

.fill-color--extra-light-orange--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-light-orange--hover:hover {
    fill: #FF8D57;
    cursor: pointer; }
  .fill-color--extra-light-orange--hover:active {
    fill: #FF8D57;
    cursor: pointer; }

.border-color--extra-light-orange--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-light-orange--hover:hover {
    border-color: #FF8D57;
    cursor: pointer; }
  .border-color--extra-light-orange--hover:active {
    border-color: #FF8D57;
    cursor: pointer; }

.color--extra-light-yellow--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-light-yellow--hover:hover {
    color: #FFD03F;
    cursor: pointer; }
  .color--extra-light-yellow--hover:active {
    color: #FFD03F;
    cursor: pointer; }

.bg-color--extra-light-yellow--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-light-yellow--hover:hover {
    background-color: #FFD03F;
    cursor: pointer; }
  .bg-color--extra-light-yellow--hover:active {
    background-color: #FFD03F;
    cursor: pointer; }

.fill-color--extra-light-yellow--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-light-yellow--hover:hover {
    fill: #FFD03F;
    cursor: pointer; }
  .fill-color--extra-light-yellow--hover:active {
    fill: #FFD03F;
    cursor: pointer; }

.border-color--extra-light-yellow--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-light-yellow--hover:hover {
    border-color: #FFD03F;
    cursor: pointer; }
  .border-color--extra-light-yellow--hover:active {
    border-color: #FFD03F;
    cursor: pointer; }

.color--extra-light-green--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-light-green--hover:hover {
    color: #68E090;
    cursor: pointer; }
  .color--extra-light-green--hover:active {
    color: #68E090;
    cursor: pointer; }

.bg-color--extra-light-green--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-light-green--hover:hover {
    background-color: #68E090;
    cursor: pointer; }
  .bg-color--extra-light-green--hover:active {
    background-color: #68E090;
    cursor: pointer; }

.fill-color--extra-light-green--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-light-green--hover:hover {
    fill: #68E090;
    cursor: pointer; }
  .fill-color--extra-light-green--hover:active {
    fill: #68E090;
    cursor: pointer; }

.border-color--extra-light-green--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-light-green--hover:hover {
    border-color: #68E090;
    cursor: pointer; }
  .border-color--extra-light-green--hover:active {
    border-color: #68E090;
    cursor: pointer; }

.color--extra-light-blue--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-light-blue--hover:hover {
    color: #71C9F8;
    cursor: pointer; }
  .color--extra-light-blue--hover:active {
    color: #71C9F8;
    cursor: pointer; }

.bg-color--extra-light-blue--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-light-blue--hover:hover {
    background-color: #71C9F8;
    cursor: pointer; }
  .bg-color--extra-light-blue--hover:active {
    background-color: #71C9F8;
    cursor: pointer; }

.fill-color--extra-light-blue--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-light-blue--hover:hover {
    fill: #71C9F8;
    cursor: pointer; }
  .fill-color--extra-light-blue--hover:active {
    fill: #71C9F8;
    cursor: pointer; }

.border-color--extra-light-blue--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-light-blue--hover:hover {
    border-color: #71C9F8;
    cursor: pointer; }
  .border-color--extra-light-blue--hover:active {
    border-color: #71C9F8;
    cursor: pointer; }

.color--extra-light-purple--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-light-purple--hover:hover {
    color: #A37CED;
    cursor: pointer; }
  .color--extra-light-purple--hover:active {
    color: #A37CED;
    cursor: pointer; }

.bg-color--extra-light-purple--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-light-purple--hover:hover {
    background-color: #A37CED;
    cursor: pointer; }
  .bg-color--extra-light-purple--hover:active {
    background-color: #A37CED;
    cursor: pointer; }

.fill-color--extra-light-purple--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-light-purple--hover:hover {
    fill: #A37CED;
    cursor: pointer; }
  .fill-color--extra-light-purple--hover:active {
    fill: #A37CED;
    cursor: pointer; }

.border-color--extra-light-purple--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-light-purple--hover:hover {
    border-color: #A37CED;
    cursor: pointer; }
  .border-color--extra-light-purple--hover:active {
    border-color: #A37CED;
    cursor: pointer; }

.color--extra-light-pink--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-light-pink--hover:hover {
    color: #F6809A;
    cursor: pointer; }
  .color--extra-light-pink--hover:active {
    color: #F6809A;
    cursor: pointer; }

.bg-color--extra-light-pink--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-light-pink--hover:hover {
    background-color: #F6809A;
    cursor: pointer; }
  .bg-color--extra-light-pink--hover:active {
    background-color: #F6809A;
    cursor: pointer; }

.fill-color--extra-light-pink--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-light-pink--hover:hover {
    fill: #F6809A;
    cursor: pointer; }
  .fill-color--extra-light-pink--hover:active {
    fill: #F6809A;
    cursor: pointer; }

.border-color--extra-light-pink--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-light-pink--hover:hover {
    border-color: #F6809A;
    cursor: pointer; }
  .border-color--extra-light-pink--hover:active {
    border-color: #F6809A;
    cursor: pointer; }

.color--light-orange--hover {
  transition: color 0.3s ease-in-out; }
  .color--light-orange--hover:hover {
    color: #F45D22;
    cursor: pointer; }
  .color--light-orange--hover:active {
    color: #F45D22;
    cursor: pointer; }

.bg-color--light-orange--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--light-orange--hover:hover {
    background-color: #F45D22;
    cursor: pointer; }
  .bg-color--light-orange--hover:active {
    background-color: #F45D22;
    cursor: pointer; }

.fill-color--light-orange--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--light-orange--hover:hover {
    fill: #F45D22;
    cursor: pointer; }
  .fill-color--light-orange--hover:active {
    fill: #F45D22;
    cursor: pointer; }

.border-color--light-orange--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--light-orange--hover:hover {
    border-color: #F45D22;
    cursor: pointer; }
  .border-color--light-orange--hover:active {
    border-color: #F45D22;
    cursor: pointer; }

.color--light-yellow--hover {
  transition: color 0.3s ease-in-out; }
  .color--light-yellow--hover:hover {
    color: #FFAD1F;
    cursor: pointer; }
  .color--light-yellow--hover:active {
    color: #FFAD1F;
    cursor: pointer; }

.bg-color--light-yellow--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--light-yellow--hover:hover {
    background-color: #FFAD1F;
    cursor: pointer; }
  .bg-color--light-yellow--hover:active {
    background-color: #FFAD1F;
    cursor: pointer; }

.fill-color--light-yellow--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--light-yellow--hover:hover {
    fill: #FFAD1F;
    cursor: pointer; }
  .fill-color--light-yellow--hover:active {
    fill: #FFAD1F;
    cursor: pointer; }

.border-color--light-yellow--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--light-yellow--hover:hover {
    border-color: #FFAD1F;
    cursor: pointer; }
  .border-color--light-yellow--hover:active {
    border-color: #FFAD1F;
    cursor: pointer; }

.color--light-green--hover {
  transition: color 0.3s ease-in-out; }
  .color--light-green--hover:hover {
    color: #1FB650;
    cursor: pointer; }
  .color--light-green--hover:active {
    color: #1FB650;
    cursor: pointer; }

.bg-color--light-green--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--light-green--hover:hover {
    background-color: #1FB650;
    cursor: pointer; }
  .bg-color--light-green--hover:active {
    background-color: #1FB650;
    cursor: pointer; }

.fill-color--light-green--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--light-green--hover:hover {
    fill: #1FB650;
    cursor: pointer; }
  .fill-color--light-green--hover:active {
    fill: #1FB650;
    cursor: pointer; }

.border-color--light-green--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--light-green--hover:hover {
    border-color: #1FB650;
    cursor: pointer; }
  .border-color--light-green--hover:active {
    border-color: #1FB650;
    cursor: pointer; }

.color--light-blue--hover {
  transition: color 0.3s ease-in-out; }
  .color--light-blue--hover:hover {
    color: #1DA1F2;
    cursor: pointer; }
  .color--light-blue--hover:active {
    color: #1DA1F2;
    cursor: pointer; }

.bg-color--light-blue--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--light-blue--hover:hover {
    background-color: #1DA1F2;
    cursor: pointer; }
  .bg-color--light-blue--hover:active {
    background-color: #1DA1F2;
    cursor: pointer; }

.fill-color--light-blue--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--light-blue--hover:hover {
    fill: #1DA1F2;
    cursor: pointer; }
  .fill-color--light-blue--hover:active {
    fill: #1DA1F2;
    cursor: pointer; }

.border-color--light-blue--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--light-blue--hover:hover {
    border-color: #1DA1F2;
    cursor: pointer; }
  .border-color--light-blue--hover:active {
    border-color: #1DA1F2;
    cursor: pointer; }

.color--light-purple--hover {
  transition: color 0.3s ease-in-out; }
  .color--light-purple--hover:hover {
    color: #794BC4;
    cursor: pointer; }
  .color--light-purple--hover:active {
    color: #794BC4;
    cursor: pointer; }

.bg-color--light-purple--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--light-purple--hover:hover {
    background-color: #794BC4;
    cursor: pointer; }
  .bg-color--light-purple--hover:active {
    background-color: #794BC4;
    cursor: pointer; }

.fill-color--light-purple--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--light-purple--hover:hover {
    fill: #794BC4;
    cursor: pointer; }
  .fill-color--light-purple--hover:active {
    fill: #794BC4;
    cursor: pointer; }

.border-color--light-purple--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--light-purple--hover:hover {
    border-color: #794BC4;
    cursor: pointer; }
  .border-color--light-purple--hover:active {
    border-color: #794BC4;
    cursor: pointer; }

.color--light-pink--hover {
  transition: color 0.3s ease-in-out; }
  .color--light-pink--hover:hover {
    color: #E0245E;
    cursor: pointer; }
  .color--light-pink--hover:active {
    color: #E0245E;
    cursor: pointer; }

.bg-color--light-pink--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--light-pink--hover:hover {
    background-color: #E0245E;
    cursor: pointer; }
  .bg-color--light-pink--hover:active {
    background-color: #E0245E;
    cursor: pointer; }

.fill-color--light-pink--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--light-pink--hover:hover {
    fill: #E0245E;
    cursor: pointer; }
  .fill-color--light-pink--hover:active {
    fill: #E0245E;
    cursor: pointer; }

.border-color--light-pink--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--light-pink--hover:hover {
    border-color: #E0245E;
    cursor: pointer; }
  .border-color--light-pink--hover:active {
    border-color: #E0245E;
    cursor: pointer; }

.color--dark-orange--hover {
  transition: color 0.3s ease-in-out; }
  .color--dark-orange--hover:hover {
    color: #D82E18;
    cursor: pointer; }
  .color--dark-orange--hover:active {
    color: #D82E18;
    cursor: pointer; }

.bg-color--dark-orange--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--dark-orange--hover:hover {
    background-color: #D82E18;
    cursor: pointer; }
  .bg-color--dark-orange--hover:active {
    background-color: #D82E18;
    cursor: pointer; }

.fill-color--dark-orange--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--dark-orange--hover:hover {
    fill: #D82E18;
    cursor: pointer; }
  .fill-color--dark-orange--hover:active {
    fill: #D82E18;
    cursor: pointer; }

.border-color--dark-orange--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--dark-orange--hover:hover {
    border-color: #D82E18;
    cursor: pointer; }
  .border-color--dark-orange--hover:active {
    border-color: #D82E18;
    cursor: pointer; }

.color--dark-yellow--hover {
  transition: color 0.3s ease-in-out; }
  .color--dark-yellow--hover:hover {
    color: #F98E00;
    cursor: pointer; }
  .color--dark-yellow--hover:active {
    color: #F98E00;
    cursor: pointer; }

.bg-color--dark-yellow--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--dark-yellow--hover:hover {
    background-color: #F98E00;
    cursor: pointer; }
  .bg-color--dark-yellow--hover:active {
    background-color: #F98E00;
    cursor: pointer; }

.fill-color--dark-yellow--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--dark-yellow--hover:hover {
    fill: #F98E00;
    cursor: pointer; }
  .fill-color--dark-yellow--hover:active {
    fill: #F98E00;
    cursor: pointer; }

.border-color--dark-yellow--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--dark-yellow--hover:hover {
    border-color: #F98E00;
    cursor: pointer; }
  .border-color--dark-yellow--hover:active {
    border-color: #F98E00;
    cursor: pointer; }

.color--dark-green--hover {
  transition: color 0.3s ease-in-out; }
  .color--dark-green--hover:hover {
    color: #008951;
    cursor: pointer; }
  .color--dark-green--hover:active {
    color: #008951;
    cursor: pointer; }

.bg-color--dark-green--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--dark-green--hover:hover {
    background-color: #008951;
    cursor: pointer; }
  .bg-color--dark-green--hover:active {
    background-color: #008951;
    cursor: pointer; }

.fill-color--dark-green--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--dark-green--hover:hover {
    fill: #008951;
    cursor: pointer; }
  .fill-color--dark-green--hover:active {
    fill: #008951;
    cursor: pointer; }

.border-color--dark-green--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--dark-green--hover:hover {
    border-color: #008951;
    cursor: pointer; }
  .border-color--dark-green--hover:active {
    border-color: #008951;
    cursor: pointer; }

.color--dark-blue--hover {
  transition: color 0.3s ease-in-out; }
  .color--dark-blue--hover:hover {
    color: #005FD1;
    cursor: pointer; }
  .color--dark-blue--hover:active {
    color: #005FD1;
    cursor: pointer; }

.bg-color--dark-blue--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--dark-blue--hover:hover {
    background-color: #005FD1;
    cursor: pointer; }
  .bg-color--dark-blue--hover:active {
    background-color: #005FD1;
    cursor: pointer; }

.fill-color--dark-blue--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--dark-blue--hover:hover {
    fill: #005FD1;
    cursor: pointer; }
  .fill-color--dark-blue--hover:active {
    fill: #005FD1;
    cursor: pointer; }

.border-color--dark-blue--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--dark-blue--hover:hover {
    border-color: #005FD1;
    cursor: pointer; }
  .border-color--dark-blue--hover:active {
    border-color: #005FD1;
    cursor: pointer; }

.color--dark-purple--hover {
  transition: color 0.3s ease-in-out; }
  .color--dark-purple--hover:hover {
    color: #4F0299;
    cursor: pointer; }
  .color--dark-purple--hover:active {
    color: #4F0299;
    cursor: pointer; }

.bg-color--dark-purple--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--dark-purple--hover:hover {
    background-color: #4F0299;
    cursor: pointer; }
  .bg-color--dark-purple--hover:active {
    background-color: #4F0299;
    cursor: pointer; }

.fill-color--dark-purple--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--dark-purple--hover:hover {
    fill: #4F0299;
    cursor: pointer; }
  .fill-color--dark-purple--hover:active {
    fill: #4F0299;
    cursor: pointer; }

.border-color--dark-purple--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--dark-purple--hover:hover {
    border-color: #4F0299;
    cursor: pointer; }
  .border-color--dark-purple--hover:active {
    border-color: #4F0299;
    cursor: pointer; }

.color--dark-pink--hover {
  transition: color 0.3s ease-in-out; }
  .color--dark-pink--hover:hover {
    color: #A01744;
    cursor: pointer; }
  .color--dark-pink--hover:active {
    color: #A01744;
    cursor: pointer; }

.bg-color--dark-pink--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--dark-pink--hover:hover {
    background-color: #A01744;
    cursor: pointer; }
  .bg-color--dark-pink--hover:active {
    background-color: #A01744;
    cursor: pointer; }

.fill-color--dark-pink--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--dark-pink--hover:hover {
    fill: #A01744;
    cursor: pointer; }
  .fill-color--dark-pink--hover:active {
    fill: #A01744;
    cursor: pointer; }

.border-color--dark-pink--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--dark-pink--hover:hover {
    border-color: #A01744;
    cursor: pointer; }
  .border-color--dark-pink--hover:active {
    border-color: #A01744;
    cursor: pointer; }

.color--extra-dark-orange--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-dark-orange--hover:hover {
    color: #F45D22;
    cursor: pointer; }
  .color--extra-dark-orange--hover:active {
    color: #F45D22;
    cursor: pointer; }

.bg-color--extra-dark-orange--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-dark-orange--hover:hover {
    background-color: #F45D22;
    cursor: pointer; }
  .bg-color--extra-dark-orange--hover:active {
    background-color: #F45D22;
    cursor: pointer; }

.fill-color--extra-dark-orange--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-dark-orange--hover:hover {
    fill: #F45D22;
    cursor: pointer; }
  .fill-color--extra-dark-orange--hover:active {
    fill: #F45D22;
    cursor: pointer; }

.border-color--extra-dark-orange--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-dark-orange--hover:hover {
    border-color: #F45D22;
    cursor: pointer; }
  .border-color--extra-dark-orange--hover:active {
    border-color: #F45D22;
    cursor: pointer; }

.color--extra-dark-yellow--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-dark-yellow--hover:hover {
    color: #FFAD1F;
    cursor: pointer; }
  .color--extra-dark-yellow--hover:active {
    color: #FFAD1F;
    cursor: pointer; }

.bg-color--extra-dark-yellow--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-dark-yellow--hover:hover {
    background-color: #FFAD1F;
    cursor: pointer; }
  .bg-color--extra-dark-yellow--hover:active {
    background-color: #FFAD1F;
    cursor: pointer; }

.fill-color--extra-dark-yellow--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-dark-yellow--hover:hover {
    fill: #FFAD1F;
    cursor: pointer; }
  .fill-color--extra-dark-yellow--hover:active {
    fill: #FFAD1F;
    cursor: pointer; }

.border-color--extra-dark-yellow--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-dark-yellow--hover:hover {
    border-color: #FFAD1F;
    cursor: pointer; }
  .border-color--extra-dark-yellow--hover:active {
    border-color: #FFAD1F;
    cursor: pointer; }

.color--extra-dark-green--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-dark-green--hover:hover {
    color: #1FB650;
    cursor: pointer; }
  .color--extra-dark-green--hover:active {
    color: #1FB650;
    cursor: pointer; }

.bg-color--extra-dark-green--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-dark-green--hover:hover {
    background-color: #1FB650;
    cursor: pointer; }
  .bg-color--extra-dark-green--hover:active {
    background-color: #1FB650;
    cursor: pointer; }

.fill-color--extra-dark-green--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-dark-green--hover:hover {
    fill: #1FB650;
    cursor: pointer; }
  .fill-color--extra-dark-green--hover:active {
    fill: #1FB650;
    cursor: pointer; }

.border-color--extra-dark-green--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-dark-green--hover:hover {
    border-color: #1FB650;
    cursor: pointer; }
  .border-color--extra-dark-green--hover:active {
    border-color: #1FB650;
    cursor: pointer; }

.color--extra-dark-blue--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-dark-blue--hover:hover {
    color: #1DA1F2;
    cursor: pointer; }
  .color--extra-dark-blue--hover:active {
    color: #1DA1F2;
    cursor: pointer; }

.bg-color--extra-dark-blue--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-dark-blue--hover:hover {
    background-color: #1DA1F2;
    cursor: pointer; }
  .bg-color--extra-dark-blue--hover:active {
    background-color: #1DA1F2;
    cursor: pointer; }

.fill-color--extra-dark-blue--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-dark-blue--hover:hover {
    fill: #1DA1F2;
    cursor: pointer; }
  .fill-color--extra-dark-blue--hover:active {
    fill: #1DA1F2;
    cursor: pointer; }

.border-color--extra-dark-blue--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-dark-blue--hover:hover {
    border-color: #1DA1F2;
    cursor: pointer; }
  .border-color--extra-dark-blue--hover:active {
    border-color: #1DA1F2;
    cursor: pointer; }

.color--extra-dark-purple--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-dark-purple--hover:hover {
    color: #794BC4;
    cursor: pointer; }
  .color--extra-dark-purple--hover:active {
    color: #794BC4;
    cursor: pointer; }

.bg-color--extra-dark-purple--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-dark-purple--hover:hover {
    background-color: #794BC4;
    cursor: pointer; }
  .bg-color--extra-dark-purple--hover:active {
    background-color: #794BC4;
    cursor: pointer; }

.fill-color--extra-dark-purple--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-dark-purple--hover:hover {
    fill: #794BC4;
    cursor: pointer; }
  .fill-color--extra-dark-purple--hover:active {
    fill: #794BC4;
    cursor: pointer; }

.border-color--extra-dark-purple--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-dark-purple--hover:hover {
    border-color: #794BC4;
    cursor: pointer; }
  .border-color--extra-dark-purple--hover:active {
    border-color: #794BC4;
    cursor: pointer; }

.color--extra-dark-pink--hover {
  transition: color 0.3s ease-in-out; }
  .color--extra-dark-pink--hover:hover {
    color: #E0245E;
    cursor: pointer; }
  .color--extra-dark-pink--hover:active {
    color: #E0245E;
    cursor: pointer; }

.bg-color--extra-dark-pink--hover {
  transition: background-color 0.3s ease-in-out; }
  .bg-color--extra-dark-pink--hover:hover {
    background-color: #E0245E;
    cursor: pointer; }
  .bg-color--extra-dark-pink--hover:active {
    background-color: #E0245E;
    cursor: pointer; }

.fill-color--extra-dark-pink--hover {
  transition: fill 0.3s ease-in-out; }
  .fill-color--extra-dark-pink--hover:hover {
    fill: #E0245E;
    cursor: pointer; }
  .fill-color--extra-dark-pink--hover:active {
    fill: #E0245E;
    cursor: pointer; }

.border-color--extra-dark-pink--hover {
  transition: border-color 0.3s ease-in-out; }
  .border-color--extra-dark-pink--hover:hover {
    border-color: #E0245E;
    cursor: pointer; }
  .border-color--extra-dark-pink--hover:active {
    border-color: #E0245E;
    cursor: pointer; }

/*
  Theme Color Utility Classes:
  Creates a class for each category and color combination.

  .theme--blue .theme-bg-color--dark--hover {
    &:hover {
      background-color: #005FD1;
    }
    &:active {
      background-color: #005FD1;
    }
  }
}

  Properties: color, background-color (bg-color), (fill) fill-color, border-color
  Categories: extra-dark, dark, light, extra-light, neutral
  Colors: orange, yellow, green, blue, purple, pink

  .theme--{color} .theme-{property}--{category}--hover {
    &:hover {
      {property}: {hoverColor}
    }
    &:active {
      {property}: {activeColor}
    }
  }

  Note: the background-color property uses bg-color in the classname.
  All others use the same class name as the CSS property they set.

*/
.theme--orange .theme-color--extra-light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--orange .theme-color--extra-light--hover:hover {
    color: #FF8D57;
    cursor: pointer; }
  .theme--orange .theme-color--extra-light--hover:active {
    color: #FF8D57;
    cursor: pointer; }

.theme--orange .theme-bg-color--extra-light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--orange .theme-bg-color--extra-light--hover:hover {
    background-color: #FF8D57;
    cursor: pointer; }
  .theme--orange .theme-bg-color--extra-light--hover:active {
    background-color: #FF8D57;
    cursor: pointer; }

.theme--orange .theme-fill-color--extra-light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--orange .theme-fill-color--extra-light--hover:hover {
    fill: #FF8D57;
    cursor: pointer; }
  .theme--orange .theme-fill-color--extra-light--hover:active {
    fill: #FF8D57;
    cursor: pointer; }

.theme--orange .theme-border-color--extra-light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--orange .theme-border-color--extra-light--hover:hover {
    border-color: #FF8D57;
    cursor: pointer; }
  .theme--orange .theme-border-color--extra-light--hover:active {
    border-color: #FF8D57;
    cursor: pointer; }

.theme--yellow .theme-color--extra-light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--yellow .theme-color--extra-light--hover:hover {
    color: #FFD03F;
    cursor: pointer; }
  .theme--yellow .theme-color--extra-light--hover:active {
    color: #FFD03F;
    cursor: pointer; }

.theme--yellow .theme-bg-color--extra-light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--yellow .theme-bg-color--extra-light--hover:hover {
    background-color: #FFD03F;
    cursor: pointer; }
  .theme--yellow .theme-bg-color--extra-light--hover:active {
    background-color: #FFD03F;
    cursor: pointer; }

.theme--yellow .theme-fill-color--extra-light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--yellow .theme-fill-color--extra-light--hover:hover {
    fill: #FFD03F;
    cursor: pointer; }
  .theme--yellow .theme-fill-color--extra-light--hover:active {
    fill: #FFD03F;
    cursor: pointer; }

.theme--yellow .theme-border-color--extra-light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--yellow .theme-border-color--extra-light--hover:hover {
    border-color: #FFD03F;
    cursor: pointer; }
  .theme--yellow .theme-border-color--extra-light--hover:active {
    border-color: #FFD03F;
    cursor: pointer; }

.theme--green .theme-color--extra-light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--green .theme-color--extra-light--hover:hover {
    color: #68E090;
    cursor: pointer; }
  .theme--green .theme-color--extra-light--hover:active {
    color: #68E090;
    cursor: pointer; }

.theme--green .theme-bg-color--extra-light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--green .theme-bg-color--extra-light--hover:hover {
    background-color: #68E090;
    cursor: pointer; }
  .theme--green .theme-bg-color--extra-light--hover:active {
    background-color: #68E090;
    cursor: pointer; }

.theme--green .theme-fill-color--extra-light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--green .theme-fill-color--extra-light--hover:hover {
    fill: #68E090;
    cursor: pointer; }
  .theme--green .theme-fill-color--extra-light--hover:active {
    fill: #68E090;
    cursor: pointer; }

.theme--green .theme-border-color--extra-light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--green .theme-border-color--extra-light--hover:hover {
    border-color: #68E090;
    cursor: pointer; }
  .theme--green .theme-border-color--extra-light--hover:active {
    border-color: #68E090;
    cursor: pointer; }

.theme--blue .theme-color--extra-light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--blue .theme-color--extra-light--hover:hover {
    color: #71C9F8;
    cursor: pointer; }
  .theme--blue .theme-color--extra-light--hover:active {
    color: #71C9F8;
    cursor: pointer; }

.theme--blue .theme-bg-color--extra-light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--blue .theme-bg-color--extra-light--hover:hover {
    background-color: #71C9F8;
    cursor: pointer; }
  .theme--blue .theme-bg-color--extra-light--hover:active {
    background-color: #71C9F8;
    cursor: pointer; }

.theme--blue .theme-fill-color--extra-light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--blue .theme-fill-color--extra-light--hover:hover {
    fill: #71C9F8;
    cursor: pointer; }
  .theme--blue .theme-fill-color--extra-light--hover:active {
    fill: #71C9F8;
    cursor: pointer; }

.theme--blue .theme-border-color--extra-light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--blue .theme-border-color--extra-light--hover:hover {
    border-color: #71C9F8;
    cursor: pointer; }
  .theme--blue .theme-border-color--extra-light--hover:active {
    border-color: #71C9F8;
    cursor: pointer; }

.theme--purple .theme-color--extra-light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--purple .theme-color--extra-light--hover:hover {
    color: #A37CED;
    cursor: pointer; }
  .theme--purple .theme-color--extra-light--hover:active {
    color: #A37CED;
    cursor: pointer; }

.theme--purple .theme-bg-color--extra-light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--purple .theme-bg-color--extra-light--hover:hover {
    background-color: #A37CED;
    cursor: pointer; }
  .theme--purple .theme-bg-color--extra-light--hover:active {
    background-color: #A37CED;
    cursor: pointer; }

.theme--purple .theme-fill-color--extra-light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--purple .theme-fill-color--extra-light--hover:hover {
    fill: #A37CED;
    cursor: pointer; }
  .theme--purple .theme-fill-color--extra-light--hover:active {
    fill: #A37CED;
    cursor: pointer; }

.theme--purple .theme-border-color--extra-light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--purple .theme-border-color--extra-light--hover:hover {
    border-color: #A37CED;
    cursor: pointer; }
  .theme--purple .theme-border-color--extra-light--hover:active {
    border-color: #A37CED;
    cursor: pointer; }

.theme--pink .theme-color--extra-light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--pink .theme-color--extra-light--hover:hover {
    color: #F6809A;
    cursor: pointer; }
  .theme--pink .theme-color--extra-light--hover:active {
    color: #F6809A;
    cursor: pointer; }

.theme--pink .theme-bg-color--extra-light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--pink .theme-bg-color--extra-light--hover:hover {
    background-color: #F6809A;
    cursor: pointer; }
  .theme--pink .theme-bg-color--extra-light--hover:active {
    background-color: #F6809A;
    cursor: pointer; }

.theme--pink .theme-fill-color--extra-light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--pink .theme-fill-color--extra-light--hover:hover {
    fill: #F6809A;
    cursor: pointer; }
  .theme--pink .theme-fill-color--extra-light--hover:active {
    fill: #F6809A;
    cursor: pointer; }

.theme--pink .theme-border-color--extra-light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--pink .theme-border-color--extra-light--hover:hover {
    border-color: #F6809A;
    cursor: pointer; }
  .theme--pink .theme-border-color--extra-light--hover:active {
    border-color: #F6809A;
    cursor: pointer; }

.theme--orange .theme-color--light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--orange .theme-color--light--hover:hover {
    color: #F45D22;
    cursor: pointer; }
  .theme--orange .theme-color--light--hover:active {
    color: #F45D22;
    cursor: pointer; }

.theme--orange .theme-bg-color--light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--orange .theme-bg-color--light--hover:hover {
    background-color: #F45D22;
    cursor: pointer; }
  .theme--orange .theme-bg-color--light--hover:active {
    background-color: #F45D22;
    cursor: pointer; }

.theme--orange .theme-fill-color--light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--orange .theme-fill-color--light--hover:hover {
    fill: #F45D22;
    cursor: pointer; }
  .theme--orange .theme-fill-color--light--hover:active {
    fill: #F45D22;
    cursor: pointer; }

.theme--orange .theme-border-color--light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--orange .theme-border-color--light--hover:hover {
    border-color: #F45D22;
    cursor: pointer; }
  .theme--orange .theme-border-color--light--hover:active {
    border-color: #F45D22;
    cursor: pointer; }

.theme--yellow .theme-color--light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--yellow .theme-color--light--hover:hover {
    color: #FFAD1F;
    cursor: pointer; }
  .theme--yellow .theme-color--light--hover:active {
    color: #FFAD1F;
    cursor: pointer; }

.theme--yellow .theme-bg-color--light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--yellow .theme-bg-color--light--hover:hover {
    background-color: #FFAD1F;
    cursor: pointer; }
  .theme--yellow .theme-bg-color--light--hover:active {
    background-color: #FFAD1F;
    cursor: pointer; }

.theme--yellow .theme-fill-color--light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--yellow .theme-fill-color--light--hover:hover {
    fill: #FFAD1F;
    cursor: pointer; }
  .theme--yellow .theme-fill-color--light--hover:active {
    fill: #FFAD1F;
    cursor: pointer; }

.theme--yellow .theme-border-color--light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--yellow .theme-border-color--light--hover:hover {
    border-color: #FFAD1F;
    cursor: pointer; }
  .theme--yellow .theme-border-color--light--hover:active {
    border-color: #FFAD1F;
    cursor: pointer; }

.theme--green .theme-color--light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--green .theme-color--light--hover:hover {
    color: #1FB650;
    cursor: pointer; }
  .theme--green .theme-color--light--hover:active {
    color: #1FB650;
    cursor: pointer; }

.theme--green .theme-bg-color--light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--green .theme-bg-color--light--hover:hover {
    background-color: #1FB650;
    cursor: pointer; }
  .theme--green .theme-bg-color--light--hover:active {
    background-color: #1FB650;
    cursor: pointer; }

.theme--green .theme-fill-color--light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--green .theme-fill-color--light--hover:hover {
    fill: #1FB650;
    cursor: pointer; }
  .theme--green .theme-fill-color--light--hover:active {
    fill: #1FB650;
    cursor: pointer; }

.theme--green .theme-border-color--light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--green .theme-border-color--light--hover:hover {
    border-color: #1FB650;
    cursor: pointer; }
  .theme--green .theme-border-color--light--hover:active {
    border-color: #1FB650;
    cursor: pointer; }

.theme--blue .theme-color--light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--blue .theme-color--light--hover:hover {
    color: #1DA1F2;
    cursor: pointer; }
  .theme--blue .theme-color--light--hover:active {
    color: #1DA1F2;
    cursor: pointer; }

.theme--blue .theme-bg-color--light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--blue .theme-bg-color--light--hover:hover {
    background-color: #1DA1F2;
    cursor: pointer; }
  .theme--blue .theme-bg-color--light--hover:active {
    background-color: #1DA1F2;
    cursor: pointer; }

.theme--blue .theme-fill-color--light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--blue .theme-fill-color--light--hover:hover {
    fill: #1DA1F2;
    cursor: pointer; }
  .theme--blue .theme-fill-color--light--hover:active {
    fill: #1DA1F2;
    cursor: pointer; }

.theme--blue .theme-border-color--light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--blue .theme-border-color--light--hover:hover {
    border-color: #1DA1F2;
    cursor: pointer; }
  .theme--blue .theme-border-color--light--hover:active {
    border-color: #1DA1F2;
    cursor: pointer; }

.theme--purple .theme-color--light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--purple .theme-color--light--hover:hover {
    color: #794BC4;
    cursor: pointer; }
  .theme--purple .theme-color--light--hover:active {
    color: #794BC4;
    cursor: pointer; }

.theme--purple .theme-bg-color--light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--purple .theme-bg-color--light--hover:hover {
    background-color: #794BC4;
    cursor: pointer; }
  .theme--purple .theme-bg-color--light--hover:active {
    background-color: #794BC4;
    cursor: pointer; }

.theme--purple .theme-fill-color--light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--purple .theme-fill-color--light--hover:hover {
    fill: #794BC4;
    cursor: pointer; }
  .theme--purple .theme-fill-color--light--hover:active {
    fill: #794BC4;
    cursor: pointer; }

.theme--purple .theme-border-color--light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--purple .theme-border-color--light--hover:hover {
    border-color: #794BC4;
    cursor: pointer; }
  .theme--purple .theme-border-color--light--hover:active {
    border-color: #794BC4;
    cursor: pointer; }

.theme--pink .theme-color--light--hover {
  transition: color 0.3s ease-in-out; }
  .theme--pink .theme-color--light--hover:hover {
    color: #E0245E;
    cursor: pointer; }
  .theme--pink .theme-color--light--hover:active {
    color: #E0245E;
    cursor: pointer; }

.theme--pink .theme-bg-color--light--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--pink .theme-bg-color--light--hover:hover {
    background-color: #E0245E;
    cursor: pointer; }
  .theme--pink .theme-bg-color--light--hover:active {
    background-color: #E0245E;
    cursor: pointer; }

.theme--pink .theme-fill-color--light--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--pink .theme-fill-color--light--hover:hover {
    fill: #E0245E;
    cursor: pointer; }
  .theme--pink .theme-fill-color--light--hover:active {
    fill: #E0245E;
    cursor: pointer; }

.theme--pink .theme-border-color--light--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--pink .theme-border-color--light--hover:hover {
    border-color: #E0245E;
    cursor: pointer; }
  .theme--pink .theme-border-color--light--hover:active {
    border-color: #E0245E;
    cursor: pointer; }

.theme--orange .theme-color--dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--orange .theme-color--dark--hover:hover {
    color: #D82E18;
    cursor: pointer; }
  .theme--orange .theme-color--dark--hover:active {
    color: #D82E18;
    cursor: pointer; }

.theme--orange .theme-bg-color--dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--orange .theme-bg-color--dark--hover:hover {
    background-color: #D82E18;
    cursor: pointer; }
  .theme--orange .theme-bg-color--dark--hover:active {
    background-color: #D82E18;
    cursor: pointer; }

.theme--orange .theme-fill-color--dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--orange .theme-fill-color--dark--hover:hover {
    fill: #D82E18;
    cursor: pointer; }
  .theme--orange .theme-fill-color--dark--hover:active {
    fill: #D82E18;
    cursor: pointer; }

.theme--orange .theme-border-color--dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--orange .theme-border-color--dark--hover:hover {
    border-color: #D82E18;
    cursor: pointer; }
  .theme--orange .theme-border-color--dark--hover:active {
    border-color: #D82E18;
    cursor: pointer; }

.theme--yellow .theme-color--dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--yellow .theme-color--dark--hover:hover {
    color: #F98E00;
    cursor: pointer; }
  .theme--yellow .theme-color--dark--hover:active {
    color: #F98E00;
    cursor: pointer; }

.theme--yellow .theme-bg-color--dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--yellow .theme-bg-color--dark--hover:hover {
    background-color: #F98E00;
    cursor: pointer; }
  .theme--yellow .theme-bg-color--dark--hover:active {
    background-color: #F98E00;
    cursor: pointer; }

.theme--yellow .theme-fill-color--dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--yellow .theme-fill-color--dark--hover:hover {
    fill: #F98E00;
    cursor: pointer; }
  .theme--yellow .theme-fill-color--dark--hover:active {
    fill: #F98E00;
    cursor: pointer; }

.theme--yellow .theme-border-color--dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--yellow .theme-border-color--dark--hover:hover {
    border-color: #F98E00;
    cursor: pointer; }
  .theme--yellow .theme-border-color--dark--hover:active {
    border-color: #F98E00;
    cursor: pointer; }

.theme--green .theme-color--dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--green .theme-color--dark--hover:hover {
    color: #008951;
    cursor: pointer; }
  .theme--green .theme-color--dark--hover:active {
    color: #008951;
    cursor: pointer; }

.theme--green .theme-bg-color--dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--green .theme-bg-color--dark--hover:hover {
    background-color: #008951;
    cursor: pointer; }
  .theme--green .theme-bg-color--dark--hover:active {
    background-color: #008951;
    cursor: pointer; }

.theme--green .theme-fill-color--dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--green .theme-fill-color--dark--hover:hover {
    fill: #008951;
    cursor: pointer; }
  .theme--green .theme-fill-color--dark--hover:active {
    fill: #008951;
    cursor: pointer; }

.theme--green .theme-border-color--dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--green .theme-border-color--dark--hover:hover {
    border-color: #008951;
    cursor: pointer; }
  .theme--green .theme-border-color--dark--hover:active {
    border-color: #008951;
    cursor: pointer; }

.theme--blue .theme-color--dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--blue .theme-color--dark--hover:hover {
    color: #005FD1;
    cursor: pointer; }
  .theme--blue .theme-color--dark--hover:active {
    color: #005FD1;
    cursor: pointer; }

.theme--blue .theme-bg-color--dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--blue .theme-bg-color--dark--hover:hover {
    background-color: #005FD1;
    cursor: pointer; }
  .theme--blue .theme-bg-color--dark--hover:active {
    background-color: #005FD1;
    cursor: pointer; }

.theme--blue .theme-fill-color--dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--blue .theme-fill-color--dark--hover:hover {
    fill: #005FD1;
    cursor: pointer; }
  .theme--blue .theme-fill-color--dark--hover:active {
    fill: #005FD1;
    cursor: pointer; }

.theme--blue .theme-border-color--dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--blue .theme-border-color--dark--hover:hover {
    border-color: #005FD1;
    cursor: pointer; }
  .theme--blue .theme-border-color--dark--hover:active {
    border-color: #005FD1;
    cursor: pointer; }

.theme--purple .theme-color--dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--purple .theme-color--dark--hover:hover {
    color: #4F0299;
    cursor: pointer; }
  .theme--purple .theme-color--dark--hover:active {
    color: #4F0299;
    cursor: pointer; }

.theme--purple .theme-bg-color--dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--purple .theme-bg-color--dark--hover:hover {
    background-color: #4F0299;
    cursor: pointer; }
  .theme--purple .theme-bg-color--dark--hover:active {
    background-color: #4F0299;
    cursor: pointer; }

.theme--purple .theme-fill-color--dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--purple .theme-fill-color--dark--hover:hover {
    fill: #4F0299;
    cursor: pointer; }
  .theme--purple .theme-fill-color--dark--hover:active {
    fill: #4F0299;
    cursor: pointer; }

.theme--purple .theme-border-color--dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--purple .theme-border-color--dark--hover:hover {
    border-color: #4F0299;
    cursor: pointer; }
  .theme--purple .theme-border-color--dark--hover:active {
    border-color: #4F0299;
    cursor: pointer; }

.theme--pink .theme-color--dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--pink .theme-color--dark--hover:hover {
    color: #A01744;
    cursor: pointer; }
  .theme--pink .theme-color--dark--hover:active {
    color: #A01744;
    cursor: pointer; }

.theme--pink .theme-bg-color--dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--pink .theme-bg-color--dark--hover:hover {
    background-color: #A01744;
    cursor: pointer; }
  .theme--pink .theme-bg-color--dark--hover:active {
    background-color: #A01744;
    cursor: pointer; }

.theme--pink .theme-fill-color--dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--pink .theme-fill-color--dark--hover:hover {
    fill: #A01744;
    cursor: pointer; }
  .theme--pink .theme-fill-color--dark--hover:active {
    fill: #A01744;
    cursor: pointer; }

.theme--pink .theme-border-color--dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--pink .theme-border-color--dark--hover:hover {
    border-color: #A01744;
    cursor: pointer; }
  .theme--pink .theme-border-color--dark--hover:active {
    border-color: #A01744;
    cursor: pointer; }

.theme--orange .theme-color--extra-dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--orange .theme-color--extra-dark--hover:hover {
    color: #F45D22;
    cursor: pointer; }
  .theme--orange .theme-color--extra-dark--hover:active {
    color: #F45D22;
    cursor: pointer; }

.theme--orange .theme-bg-color--extra-dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--orange .theme-bg-color--extra-dark--hover:hover {
    background-color: #F45D22;
    cursor: pointer; }
  .theme--orange .theme-bg-color--extra-dark--hover:active {
    background-color: #F45D22;
    cursor: pointer; }

.theme--orange .theme-fill-color--extra-dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--orange .theme-fill-color--extra-dark--hover:hover {
    fill: #F45D22;
    cursor: pointer; }
  .theme--orange .theme-fill-color--extra-dark--hover:active {
    fill: #F45D22;
    cursor: pointer; }

.theme--orange .theme-border-color--extra-dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--orange .theme-border-color--extra-dark--hover:hover {
    border-color: #F45D22;
    cursor: pointer; }
  .theme--orange .theme-border-color--extra-dark--hover:active {
    border-color: #F45D22;
    cursor: pointer; }

.theme--yellow .theme-color--extra-dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--yellow .theme-color--extra-dark--hover:hover {
    color: #FFAD1F;
    cursor: pointer; }
  .theme--yellow .theme-color--extra-dark--hover:active {
    color: #FFAD1F;
    cursor: pointer; }

.theme--yellow .theme-bg-color--extra-dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--yellow .theme-bg-color--extra-dark--hover:hover {
    background-color: #FFAD1F;
    cursor: pointer; }
  .theme--yellow .theme-bg-color--extra-dark--hover:active {
    background-color: #FFAD1F;
    cursor: pointer; }

.theme--yellow .theme-fill-color--extra-dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--yellow .theme-fill-color--extra-dark--hover:hover {
    fill: #FFAD1F;
    cursor: pointer; }
  .theme--yellow .theme-fill-color--extra-dark--hover:active {
    fill: #FFAD1F;
    cursor: pointer; }

.theme--yellow .theme-border-color--extra-dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--yellow .theme-border-color--extra-dark--hover:hover {
    border-color: #FFAD1F;
    cursor: pointer; }
  .theme--yellow .theme-border-color--extra-dark--hover:active {
    border-color: #FFAD1F;
    cursor: pointer; }

.theme--green .theme-color--extra-dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--green .theme-color--extra-dark--hover:hover {
    color: #1FB650;
    cursor: pointer; }
  .theme--green .theme-color--extra-dark--hover:active {
    color: #1FB650;
    cursor: pointer; }

.theme--green .theme-bg-color--extra-dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--green .theme-bg-color--extra-dark--hover:hover {
    background-color: #1FB650;
    cursor: pointer; }
  .theme--green .theme-bg-color--extra-dark--hover:active {
    background-color: #1FB650;
    cursor: pointer; }

.theme--green .theme-fill-color--extra-dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--green .theme-fill-color--extra-dark--hover:hover {
    fill: #1FB650;
    cursor: pointer; }
  .theme--green .theme-fill-color--extra-dark--hover:active {
    fill: #1FB650;
    cursor: pointer; }

.theme--green .theme-border-color--extra-dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--green .theme-border-color--extra-dark--hover:hover {
    border-color: #1FB650;
    cursor: pointer; }
  .theme--green .theme-border-color--extra-dark--hover:active {
    border-color: #1FB650;
    cursor: pointer; }

.theme--blue .theme-color--extra-dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--blue .theme-color--extra-dark--hover:hover {
    color: #1DA1F2;
    cursor: pointer; }
  .theme--blue .theme-color--extra-dark--hover:active {
    color: #1DA1F2;
    cursor: pointer; }

.theme--blue .theme-bg-color--extra-dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--blue .theme-bg-color--extra-dark--hover:hover {
    background-color: #1DA1F2;
    cursor: pointer; }
  .theme--blue .theme-bg-color--extra-dark--hover:active {
    background-color: #1DA1F2;
    cursor: pointer; }

.theme--blue .theme-fill-color--extra-dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--blue .theme-fill-color--extra-dark--hover:hover {
    fill: #1DA1F2;
    cursor: pointer; }
  .theme--blue .theme-fill-color--extra-dark--hover:active {
    fill: #1DA1F2;
    cursor: pointer; }

.theme--blue .theme-border-color--extra-dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--blue .theme-border-color--extra-dark--hover:hover {
    border-color: #1DA1F2;
    cursor: pointer; }
  .theme--blue .theme-border-color--extra-dark--hover:active {
    border-color: #1DA1F2;
    cursor: pointer; }

.theme--purple .theme-color--extra-dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--purple .theme-color--extra-dark--hover:hover {
    color: #794BC4;
    cursor: pointer; }
  .theme--purple .theme-color--extra-dark--hover:active {
    color: #794BC4;
    cursor: pointer; }

.theme--purple .theme-bg-color--extra-dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--purple .theme-bg-color--extra-dark--hover:hover {
    background-color: #794BC4;
    cursor: pointer; }
  .theme--purple .theme-bg-color--extra-dark--hover:active {
    background-color: #794BC4;
    cursor: pointer; }

.theme--purple .theme-fill-color--extra-dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--purple .theme-fill-color--extra-dark--hover:hover {
    fill: #794BC4;
    cursor: pointer; }
  .theme--purple .theme-fill-color--extra-dark--hover:active {
    fill: #794BC4;
    cursor: pointer; }

.theme--purple .theme-border-color--extra-dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--purple .theme-border-color--extra-dark--hover:hover {
    border-color: #794BC4;
    cursor: pointer; }
  .theme--purple .theme-border-color--extra-dark--hover:active {
    border-color: #794BC4;
    cursor: pointer; }

.theme--pink .theme-color--extra-dark--hover {
  transition: color 0.3s ease-in-out; }
  .theme--pink .theme-color--extra-dark--hover:hover {
    color: #E0245E;
    cursor: pointer; }
  .theme--pink .theme-color--extra-dark--hover:active {
    color: #E0245E;
    cursor: pointer; }

.theme--pink .theme-bg-color--extra-dark--hover {
  transition: background-color 0.3s ease-in-out; }
  .theme--pink .theme-bg-color--extra-dark--hover:hover {
    background-color: #E0245E;
    cursor: pointer; }
  .theme--pink .theme-bg-color--extra-dark--hover:active {
    background-color: #E0245E;
    cursor: pointer; }

.theme--pink .theme-fill-color--extra-dark--hover {
  transition: fill 0.3s ease-in-out; }
  .theme--pink .theme-fill-color--extra-dark--hover:hover {
    fill: #E0245E;
    cursor: pointer; }
  .theme--pink .theme-fill-color--extra-dark--hover:active {
    fill: #E0245E;
    cursor: pointer; }

.theme--pink .theme-border-color--extra-dark--hover {
  transition: border-color 0.3s ease-in-out; }
  .theme--pink .theme-border-color--extra-dark--hover:hover {
    border-color: #E0245E;
    cursor: pointer; }
  .theme--pink .theme-border-color--extra-dark--hover:active {
    border-color: #E0245E;
    cursor: pointer; }

/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
@media (min-width: 768px) {
  .topic-page .nav .active-link {
    pointer-events: none;
    display: inline-block; } }

.nav {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  margin: auto;
  max-width: 1600px;
  width: 100%;
  height: 3rem;
  z-index: 11;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex; }
  .nav.sticky {
    position: fixed; }
  .nav--wrapper {
    padding: 0.75rem 1.5rem;
    width: 100%; }
    @media (min-width: 768px) {
      .nav--wrapper {
        padding: 0.75rem 1.25rem;
        overflow: hidden; } }
  @media (min-width: 768px) {
    .nav {
      overflow: hidden; } }
  .nav.transparent {
    background-color: transparent; }
  .nav.active {
    height: 100%;
    min-height: 100vh;
    overflow-y: scroll; }
    @media (min-width: 768px) {
      .nav.active {
        height: 3rem; } }
    @media (min-width: 768px) {
      .nav.active.transparent {
        background-color: transparent; } }
    .nav.active .nav--menu {
      top: 3.75rem;
      width: 100%;
      opacity: 1;
      visibility: visible;
      clear: both;
      height: calc(100vh - 14rem);
      overflow-y: scroll; }
      @media (min-width: 768px) {
        .nav.active .nav--menu {
          top: 0;
          width: auto;
          opacity: 1;
          visibility: visible;
          clear: none;
          height: auto;
          overflow: auto; } }
    .nav.active .region-selector-mobile {
      display: block; }
      .nav.active .region-selector-mobile .region-selector .current-region {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 0.87rem;
        line-height: 1.5rem;
        letter-spacing: 0.03rem;
        margin: 0;
        padding: 0 0 0rem 0;
        color: #FFFFFF !important; }
        @media (min-width: 768px) {
          .nav.active .region-selector-mobile .region-selector .current-region {
            font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
            font-weight: 400;
            font-size: 0.9975rem;
            line-height: 1.5rem;
            letter-spacing: 0.025rem;
            margin: 0;
            padding: 0 0 0rem 0; } }
    .nav.active .nav--header-left .nav--header-title .nav-icon {
      margin-top: -2px;
      -webkit-transform: rotate(-180deg);
              transform: rotate(-180deg); }
  .nav--header-left .nav--header-title {
    float: left; }
    .nav--header-left .nav--header-title .logo-title {
      display: block;
      float: left;
      text-decoration: none; }
      .nav--header-left .nav--header-title .logo-title .logo {
        -webkit-box-align: center;
            -ms-flex-align: center;
                align-items: center;
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        float: left;
        margin-right: 0.75rem; }
        @media (min-width: 768px) {
          .nav--header-left .nav--header-title .logo-title .logo {
            margin-right: 1rem; } }
        .nav--header-left .nav--header-title .logo-title .logo > svg {
          width: 1.5rem;
          height: 1.5rem;
          fill: #FFFFFF; }
    .nav--header-left .nav--header-title .nav-icon {
      display: block;
      float: left;
      margin-top: 4px;
      margin-left: 0.5rem;
      transition: all 0.5s cubic-bezier(0.165, 0.84, 0.44, 1);
      -webkit-transform: rotate(0deg);
              transform: rotate(0deg); }
      .nav--header-left .nav--header-title .nav-icon:hover > svg {
        opacity: 0.6; }
      .nav--header-left .nav--header-title .nav-icon:active > svg {
        opacity: 0.6; }
      .nav--header-left .nav--header-title .nav-icon > svg {
        fill: #FFFFFF;
        height: 0.75rem;
        transition: opacity 0.3s ease-in-out;
        width: 0.75rem; }
      @media (min-width: 768px) {
        .nav--header-left .nav--header-title .nav-icon {
          display: none; } }
  .nav--menu {
    position: relative;
    float: left;
    padding: 0;
    margin: 0;
    list-style: none;
    width: 100%;
    opacity: 0;
    visibility: hidden;
    clear: both; }
    @media (min-width: 768px) {
      .nav--menu {
        width: auto;
        opacity: 1;
        visibility: visible;
        clear: none;
        margin-left: 2.5rem; } }
    .nav--menu .nav--mobile-item {
      display: block; }
      @media (min-width: 768px) {
        .nav--menu .nav--mobile-item {
          display: none; } }
    .nav--menu__list-item {
      padding: 1.5rem 0;
      border-bottom: 1px solid rgba(255, 255, 255, 0.4);
      display: block;
      width: 100%; }
      @media (min-width: 768px) {
        .nav--menu__list-item {
          display: block;
          float: left;
          width: auto;
          padding: 0 1.5rem 0 0;
          border-bottom: none; } }
      .nav--menu__list-item:last-child {
        padding-right: 0;
        border-bottom: none; }
      .nav--menu__list-item > a,
      .nav--menu__list-item > span {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 1.5rem;
        line-height: 1.5rem;
        letter-spacing: 0rem;
        margin: 0;
        padding: 0 0 0rem 0;
        text-decoration: none; }
        @media (min-width: 768px) {
          .nav--menu__list-item > a,
          .nav--menu__list-item > span {
            font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
            font-weight: 400;
            font-size: 0.9975rem;
            line-height: 1.5rem;
            letter-spacing: 0.025rem;
            margin: 0;
            padding: 0 0 0rem 0; } }
      .nav--menu__list-item > a.active-link {
        color: rgba(255, 255, 255, 0.6); }
    .nav--menu .nav--menu__list-item--region-selector {
      display: block; }
      @media (min-width: 768px) {
        .nav--menu .nav--menu__list-item--region-selector {
          display: none; } }
  .nav--header-right {
    position: absolute;
    right: 1.5rem; }
    .nav--header-right .region-selector {
      display: none;
      float: left; }
      .nav--header-right .region-selector .current-region {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 0.87rem;
        line-height: 1.5rem;
        letter-spacing: 0.03rem;
        margin: 0;
        padding: 0 0 0rem 0;
        color: #FFFFFF !important; }
        @media (min-width: 768px) {
          .nav--header-right .region-selector .current-region {
            display: block;
            font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
            font-weight: 400;
            font-size: 0.9975rem;
            line-height: 1.5rem;
            letter-spacing: 0.025rem;
            margin: 0;
            padding: 0 0 0rem 0; } }
      @media (min-width: 768px) {
        .nav--header-right .region-selector {
          display: block;
          float: left;
          position: static; } }
    .nav--header-right .search {
      padding-left: 1.5rem;
      float: left; }
      .nav--header-right .search .search-icon {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-align: center;
            -ms-flex-align: center;
                align-items: center; }
        .nav--header-right .search .search-icon:hover svg {
          opacity: 0.6; }
        .nav--header-right .search .search-icon:active svg {
          opacity: 0.6; }
        .nav--header-right .search .search-icon svg {
          width: 24px;
          height: 24px;
          fill: #FFFFFF;
          transition: opacity 0.3s ease-in-out; }
    .nav--header-right.hidden .region-selector,
    .nav--header-right.hidden .search {
      display: none; }
    .nav--header-right.hidden > svg {
      display: block;
      cursor: pointer;
      position: absolute;
      -webkit-transform: scale(0.6);
              transform: scale(0.6);
      height: 24px;
      width: 24px;
      top: 0;
      right: 0;
      fill: #FFFFFF; }
      @media (min-width: 768px) {
        .nav--header-right.hidden > svg {
          height: auto;
          width: auto;
          top: -8px;
          -webkit-transform: scale(0.6);
                  transform: scale(0.6); } }
    .nav--header-right > svg {
      display: none; }
    @media (min-width: 768px) {
      .nav--header-right {
        right: 1.25rem; } }
  .nav .region-selector-mobile {
    display: none;
    position: absolute;
    left: 1.5rem;
    bottom: 5.25rem; }

.transparent-masthead {
  padding-bottom: 3rem; }

.search-page .nav--header-right .search {
  display: none; }
  @media (min-width: 768px) {
    .search-page .nav--header-right .search {
      display: block; } }

.search-page .nav--header-right.hidden .search {
  display: none; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.search-bar {
  margin: auto;
  padding-bottom: 0.75rem;
  border-bottom: 1px solid;
  transition: fill 0.3s ease-in-out, border-color 0.3s ease-in-out; }
  .search-bar svg {
    overflow: visible;
    cursor: pointer;
    position: absolute;
    right: -10px;
    top: -14px;
    -webkit-transform: scale(0.48);
            transform: scale(0.48); }
    @media (min-width: 768px) {
      .search-bar svg {
        top: 0;
        right: 0;
        -webkit-transform: scale(0.75);
                transform: scale(0.75); } }
  .search-bar .close-svg-container {
    display: none; }
  .search-bar__input {
    font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-weight: 700;
    font-size: 1.5rem;
    line-height: 1.5rem;
    letter-spacing: 0rem;
    margin: 0;
    padding: 0 0 0rem 0;
    width: 95%;
    color: #FFFFFF; }
    .search-bar__input:focus {
      outline: none; }
    @media (min-width: 768px) {
      .search-bar__input {
        font-family: "Helvetica Neue LT", "Helvetica Neue", Helvetica, Arial, sans-serif;
        font-weight: 700;
        font-size: 3rem;
        line-height: 3rem;
        letter-spacing: -0.025rem;
        margin: 0;
        padding: 0 0 0rem 0; } }
  @media (min-width: 768px) {
    .search-bar {
      width: 83.05085%;
      float: left;
      margin-right: 1.69492%;
      float: none;
      margin: auto; } }

.nav__search-modal {
  z-index: 10;
  position: fixed;
  top: -100vh;
  height: 100vh;
  width: 100vw; }
  .nav__search-modal .search-bar {
    position: absolute;
    top: 25vh;
    left: 0;
    right: 0;
    -webkit-transform: translateY(-50%);
            transform: translateY(-50%);
    margin: 0 6.6%; }
    @media (min-width: 768px) {
      .nav__search-modal .search-bar {
        margin: auto;
        top: 50vh; } }
  .nav__search-modal.shown {
    top: 0; }

.page .nav__search-modal {
  transition: top .2s ease-in-out; }

html.no-scroll {
  overflow: hidden; }

.theme--orange .search-bar__input::-webkit-input-placeholder {
  color: #FFBE78;
  opacity: 1; }

.theme--orange .search-bar__input::-moz-placeholder {
  color: #FFBE78;
  opacity: 1; }

.theme--orange .search-bar__input:-ms-input-placeholder {
  color: #FFBE78;
  opacity: 1; }

.theme--orange .search-bar__input::placeholder {
  color: #FFBE78;
  opacity: 1; }

.theme--orange .search-bar__input::-moz-selection {
  background-color: rgba(255, 190, 120, 0.3);
  color: #FFFFFF; }

.theme--orange .search-bar__input::selection {
  background-color: rgba(255, 190, 120, 0.3);
  color: #FFFFFF; }

.theme--yellow .search-bar__input::-webkit-input-placeholder {
  color: #FFE76E;
  opacity: 1; }

.theme--yellow .search-bar__input::-moz-placeholder {
  color: #FFE76E;
  opacity: 1; }

.theme--yellow .search-bar__input:-ms-input-placeholder {
  color: #FFE76E;
  opacity: 1; }

.theme--yellow .search-bar__input::placeholder {
  color: #FFE76E;
  opacity: 1; }

.theme--yellow .search-bar__input::-moz-selection {
  background-color: rgba(255, 231, 110, 0.3);
  color: #FFFFFF; }

.theme--yellow .search-bar__input::selection {
  background-color: rgba(255, 231, 110, 0.3);
  color: #FFFFFF; }

.theme--green .search-bar__input::-webkit-input-placeholder {
  color: #A5F2AA;
  opacity: 1; }

.theme--green .search-bar__input::-moz-placeholder {
  color: #A5F2AA;
  opacity: 1; }

.theme--green .search-bar__input:-ms-input-placeholder {
  color: #A5F2AA;
  opacity: 1; }

.theme--green .search-bar__input::placeholder {
  color: #A5F2AA;
  opacity: 1; }

.theme--green .search-bar__input::-moz-selection {
  background-color: rgba(165, 242, 170, 0.3);
  color: #FFFFFF; }

.theme--green .search-bar__input::selection {
  background-color: rgba(165, 242, 170, 0.3);
  color: #FFFFFF; }

.theme--blue .search-bar__input::-webkit-input-placeholder {
  color: #97E3FF;
  opacity: 1; }

.theme--blue .search-bar__input::-moz-placeholder {
  color: #97E3FF;
  opacity: 1; }

.theme--blue .search-bar__input:-ms-input-placeholder {
  color: #97E3FF;
  opacity: 1; }

.theme--blue .search-bar__input::placeholder {
  color: #97E3FF;
  opacity: 1; }

.theme--blue .search-bar__input::-moz-selection {
  background-color: rgba(151, 227, 255, 0.3);
  color: #FFFFFF; }

.theme--blue .search-bar__input::selection {
  background-color: rgba(151, 227, 255, 0.3);
  color: #FFFFFF; }

.theme--purple .search-bar__input::-webkit-input-placeholder {
  color: #C7B4FA;
  opacity: 1; }

.theme--purple .search-bar__input::-moz-placeholder {
  color: #C7B4FA;
  opacity: 1; }

.theme--purple .search-bar__input:-ms-input-placeholder {
  color: #C7B4FA;
  opacity: 1; }

.theme--purple .search-bar__input::placeholder {
  color: #C7B4FA;
  opacity: 1; }

.theme--purple .search-bar__input::-moz-selection {
  background-color: rgba(199, 180, 250, 0.3);
  color: #FFFFFF; }

.theme--purple .search-bar__input::selection {
  background-color: rgba(199, 180, 250, 0.3);
  color: #FFFFFF; }

.theme--pink .search-bar__input::-webkit-input-placeholder {
  color: #FFB8C2;
  opacity: 1; }

.theme--pink .search-bar__input::-moz-placeholder {
  color: #FFB8C2;
  opacity: 1; }

.theme--pink .search-bar__input:-ms-input-placeholder {
  color: #FFB8C2;
  opacity: 1; }

.theme--pink .search-bar__input::placeholder {
  color: #FFB8C2;
  opacity: 1; }

.theme--pink .search-bar__input::-moz-selection {
  background-color: rgba(255, 184, 194, 0.3);
  color: #FFFFFF; }

.theme--pink .search-bar__input::selection {
  background-color: rgba(255, 184, 194, 0.3);
  color: #FFFFFF; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.footer {
  margin-top: 1.5rem; }
  .footer__row {
    float: clear;
    padding-bottom: 2.25rem; }
    .footer__row:first-child {
      padding-top: 2.25rem; }
  .footer-col {
    float: left;
    width: 100%; }
    .footer-col__list {
      overflow: hidden;
      list-style: none;
      transition-property: all;
      transition-duration: .3s;
      transition-timing-function: linear;
      max-height: 0px; }
      @media (min-width: 768px) {
        .footer-col__list {
          padding-top: 1.5rem;
          max-height: none; } }
    .footer-col__parent {
      position: relative;
      text-decoration: none;
      display: block;
      margin: 0.75rem 0; }
      .footer-col__parent .icon-container {
        width: 50%;
        position: absolute;
        right: 0;
        text-align: right; }
        .footer-col__parent .icon-container svg {
          height: 0.75rem;
          width: 0.75rem;
          transition-property: all;
          transition-duration: .3s;
          transition-timing-function: linear; }
          @media (min-width: 768px) {
            .footer-col__parent .icon-container svg {
              display: none; } }
      @media (min-width: 768px) {
        .footer-col__parent {
          color: #FFFFFF;
          margin: 0; } }
    .footer-col__link, .footer-col__footnote {
      display: block;
      text-decoration: none; }
      @media (min-width: 768px) {
        .footer-col__link, .footer-col__footnote {
          display: inline; } }
    .footer-col__link {
      margin-bottom: 1.5rem; }
      @media (min-width: 768px) {
        .footer-col__link {
          margin-bottom: none; } }
    .footer-col__footnote {
      height: 0.75rem;
      margin-bottom: 1.5rem; }
      @media (min-width: 768px) {
        .footer-col__footnote {
          margin-bottom: none;
          font-weight: normal; } }
    @media (min-width: 768px) {
      .footer-col {
        width: 20%; } }
  @media (min-width: 768px) {
    .footer {
      margin-top: 2.25rem; } }

.open-accordion .footer-col__parent {
  color: #FFFFFF !important; }
  .open-accordion .footer-col__parent .icon-container svg {
    fill: #FFFFFF !important;
    -webkit-transform: rotate(180deg);
            transform: rotate(180deg); }

.open-accordion .footer-col__link {
  color: #FFFFFF !important; }

.open-accordion .footer-col__list {
  max-height: 350px;
  padding-left: 30px; }
/*

font mixin
$key: type style key (ex. bold-24 or roman-24). See typography.json for options.
$breakpoint: (optional) breakpoint key (ex. full or tablet). See breakpoints.json for options.

@include font(bold-24);

When used without a breakpoint specified this mixin will produce font properties
wrapped in media queries. It's a simple way to apply fully responsive type styles
to a class or element.

@include font(bold-24, full);

If a breakpoint is specified there will be only a single set of font properties
that are NOT wrapped in any media queries.

*/
/*

  color(yellow) single argument defaults to dark colors
  color(light, yellow) returns light yellow

*/
/* rounded corners
  usage: border-radius( baseline( n ) )
*/
/*

https://css-tricks.com/snippets/sass/maintain-aspect-ratio-mixin/

The mixin assumes you'll be nesting an element with the class of content inside your initial block

<div class="sixteen-nine">
  <div class="content">
    insert content here
    this will maintain a 16:9 aspect ratio
  </div>
</div>

*/
.HolyGrail {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  min-height: 100vh; }
  .HolyGrail .footer {
    margin-top: 0; }

.HolyGrail-body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center; }

.error {
  margin-top: 2.25rem;
  padding-bottom: 3.75rem;
  padding-top: 4.5rem; }
  @media (min-width: 768px) {
    .error {
      margin-left: 25.42373%;
      width: 57.62712%;
      float: left;
      margin-right: 1.69492%; } }
  .error + div {
    clear: left; }

.error__description {
  margin-bottom: 3rem; }

.error__message {
  margin-bottom: 0.75rem; }

.error__type {
  margin-bottom: 0.75rem; }

.error__link {
  display: block;
  text-decoration: none; }
  @media (min-width: 1000px) {
    .error__link {
      display: inline; } }

.error__link:not(:last-child) {
  margin-bottom: 2.25rem;
  position: relative; }
  @media (min-width: 1000px) {
    .error__link:not(:last-child) {
      margin-bottom: 0;
      margin-right: 1.125rem;
      padding-right: 1.125rem; }
      .error__link:not(:last-child)::after {
        background-color: #CCD6DD;
        content: ' ';
        display: block;
        height: calc(100% - -4px);
        left: 100%;
        position: absolute;
        top: -2px;
        width: 1px; } }

.page--error .nav--header-right .search {
  padding-left: 0.75rem; }

.page--error .nav--header-right.hidden .search {
  display: block;
  opacity: 0; }

.nav__item {
  display: block;
  float: left;
  padding-right: 1.5rem; }
  .nav__item a {
    text-decoration: none; }

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvc3R5bGUvdXRpbGl0eS9faG92ZXIuc2Nzcz9mYjRiIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvcmUvdmFyaWFibGVzL2NvbG9ycy5qc29uP2IwZDYiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29yZS92YXJpYWJsZXMvbW90aW9uLmpzb24/OWMxZCoqIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svY29yZS9zdHlsZS9fbWl4aW4uc2Nzcz9kMjg0KioiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JyZWFrcG9pbnQtcGx1Z2luLnNjc3M/M2Y0OCoqIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy91bml2ZXJzYWwvdTAxLW5hdmlnYXRpb24vd2VicGFjay9pbmRleC5zY3NzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy92YXJpYWJsZXMvdHlwb2dyYXBoeS5qc29uPzBmNjcqKiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvdmFyaWFibGVzL2NvbG9ycy5qc29uP2JkZWIqKiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvdW5pdmVyc2FsL3UwNC1zZWFyY2gtYmFyL3dlYnBhY2svaW5kZXguc2NzcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX3JlbS5zY3NzP2NmNzEqKiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc3Bhbi5zY3NzP2IyMGUqKiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fZGlyZWN0aW9uLnNjc3M/MThlYyoqIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ndXR0ZXJzLnNjc3M/Mjg1YyoqIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy91bml2ZXJzYWwvdTAyLWZvb3Rlci93ZWJwYWNrL2luZGV4LnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svY29yZS9zdHlsZS9fbWl4aW4uc2Nzcz8wZDU3KiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9lcnJvci5zY3NzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYnJlYWtwb2ludC1wbHVnaW4uc2Nzcz9kYTZjKiIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19yZW0uc2Nzcz9jMTgwIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc3Bhbi5zY3NzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fZGlyZWN0aW9uLnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ndXR0ZXJzLnNjc3MiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy92YXJpYWJsZXMvY29sb3JzLmpzb24/ZDU3NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwRkk7RUFDRSxlQzNGc2I7RUQ0RnRiLHFDRTVGcUQsRUZzR3REO0VBWkQ7SUFyRkEsYUF1Q2M7SUFvRFYsZ0JBQWdCLEVBQ2pCO0VBUEg7SUFyRkEsYUEyRGM7SUFvQ1YsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMEJDM0ZzYjtFRDRGdGIscUNFNUZxRCxFRnNHdEQ7RUFaRDtJQXJGQSxhQXVDYztJQW9EVixnQkFBZ0IsRUFDakI7RUFQSDtJQXJGQSxhQTJEYztJQW9DVixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxjQzNGc2I7RUQ0RnRiLHFDRTVGcUQsRUZzR3REO0VBWkQ7SUFyRkEsYUF1Q2M7SUFvRFYsZ0JBQWdCLEVBQ2pCO0VBUEg7SUFyRkEsYUEyRGM7SUFvQ1YsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usc0JDM0ZzYjtFRDRGdGIscUNFNUZxRCxFRnNHdEQ7RUFaRDtJQXJGQSxhQXVDYztJQW9EVixnQkFBZ0IsRUFDakI7RUFQSDtJQXJGQSxhQTJEYztJQW9DVixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxlQzNGeWM7RUQ0RnpjLG1DRTVGcUQsRUZzR3REO0VBWkQ7SUFyRkEsNkJBMENjO0lBaURWLGdCQUFnQixFQUNqQjtFQVBIO0lB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RUFOSDtJQVNJLGVDMUptUDtJRDJKblAsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLDBCQ3JKbVA7SURzSm5QLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDMUptUDtJRDJKblAsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGNDckptUDtJRHNKblAsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQzFKbVA7SUQySm5QLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxzQkNySm1QO0lEc0puUCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQzFKbVA7SUQySm5QLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxlQ3JKa1E7SURzSmxRLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUMxSmtRO0lEMkpsUSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksMEJDckprUTtJRHNKbFEsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkMxSmtRO0lEMkpsUSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksY0NySmtRO0lEc0psUSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDMUprUTtJRDJKbFEsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLHNCQ3JKa1E7SURzSmxRLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDMUprUTtJRDJKbFEsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGVDckpnUjtJRHNKaFIsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQzFKZ1I7SUQySmhSLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSwwQkNySmdSO0lEc0poUixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQzFKZ1I7SUQySmhSLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxjQ3JKZ1I7SURzSmhSLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0MxSmdSO0lEMkpoUixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksc0JDckpnUjtJRHNKaFIsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkMxSmdSO0lEMkpoUixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksZUNySmdTO0lEc0poUyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDMUpnUztJRDJKaFMsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLDBCQ3JKZ1M7SURzSmhTLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDMUpnUztJRDJKaFMsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGNDckpnUztJRHNKaFMsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQzFKZ1M7SUQySmhTLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxzQkNySmdTO0lEc0poUyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQzFKZ1M7SUQySmhTLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxlQ3JKOFM7SURzSjlTLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUMxSjhTO0lEMko5UyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksMEJDcko4UztJRHNKOVMsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkMxSjhTO0lEMko5UyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksY0NySjhTO0lEc0o5UyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDMUo4UztJRDJKOVMsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLHNCQ3JKOFM7SURzSjlTLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDMUo4UztJRDJKOVMsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGVDckorSDtJRHNKL0gsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQzFKK0g7SUQySi9ILGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSwwQkNySitIO0lEc0ovSCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQzFKK0g7SUQySi9ILGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxjQ3JKK0g7SURzSi9ILGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0MxSitIO0lEMkovSCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksc0JDckorSDtJRHNKL0gsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkMxSitIO0lEMkovSCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksZUNySitJO0lEc0ovSSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDMUorSTtJRDJKL0ksZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLDBCQ3JKK0k7SURzSi9JLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDMUorSTtJRDJKL0ksZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGNDckorSTtJRHNKL0ksZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQzFKK0k7SUQySi9JLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxzQkNySitJO0lEc0ovSSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQzFKK0k7SUQySi9JLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxlQ3JKOEo7SURzSjlKLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUMxSjhKO0lEMko5SixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksMEJDcko4SjtJRHNKOUosZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkMxSjhKO0lEMko5SixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksY0NySjhKO0lEc0o5SixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDMUo4SjtJRDJKOUosZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLHNCQ3JKOEo7SURzSjlKLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDMUo4SjtJRDJKOUosZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGVDcko0SztJRHNKNUssZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQzFKNEs7SUQySjVLLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSwwQkNySjRLO0lEc0o1SyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQzFKNEs7SUQySjVLLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxjQ3JKNEs7SURzSjVLLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0MxSjRLO0lEMko1SyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksc0JDcko0SztJRHNKNUssZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkMxSjRLO0lEMko1SyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksZUNySjRMO0lEc0o1TCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDMUo0TDtJRDJKNUwsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLDBCQ3JKNEw7SURzSjVMLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDMUo0TDtJRDJKNUwsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGNDcko0TDtJRHNKNUwsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQzFKNEw7SUQySjVMLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxzQkNySjRMO0lEc0o1TCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQzFKNEw7SUQySjVMLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxlQ3JKME07SURzSjFNLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUMxSjBNO0lEMkoxTSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksMEJDckowTTtJRHNKMU0sZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkMxSjBNO0lEMkoxTSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksY0NySjBNO0lEc0oxTSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDMUowTTtJRDJKMU0sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLHNCQ3JKME07SURzSjFNLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDMUowTTtJRDJKMU0sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGVDcko0QjtJRHNKNUIsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQzFKNEI7SUQySjVCLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSwwQkNySjRCO0lEc0o1QixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQzFKNEI7SUQySjVCLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxjQ3JKNEI7SURzSjVCLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0MxSjRCO0lEMko1QixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksc0JDcko0QjtJRHNKNUIsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkMxSjRCO0lEMko1QixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksZUNySjRDO0lEc0o1QyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDMUo0QztJRDJKNUMsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLDBCQ3JKNEM7SURzSjVDLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDMUo0QztJRDJKNUMsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGNDcko0QztJRHNKNUMsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQzFKNEM7SUQySjVDLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxzQkNySjRDO0lEc0o1QyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQzFKNEM7SUQySjVDLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxlQ3JKMkQ7SURzSjNELGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUMxSjJEO0lEMkozRCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksMEJDckoyRDtJRHNKM0QsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkMxSjJEO0lEMkozRCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksY0NySjJEO0lEc0ozRCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDMUoyRDtJRDJKM0QsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLHNCQ3JKMkQ7SURzSjNELGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDMUoyRDtJRDJKM0QsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGVDckp5RTtJRHNKekUsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQzFKeUU7SUQySnpFLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSwwQkNySnlFO0lEc0p6RSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQzFKeUU7SUQySnpFLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxjQ3JKeUU7SURzSnpFLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0MxSnlFO0lEMkp6RSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksc0JDckp5RTtJRHNKekUsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkMxSnlFO0lEMkp6RSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksZUNySnlGO0lEc0p6RixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDMUp5RjtJRDJKekYsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLDBCQ3JKeUY7SURzSnpGLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDMUp5RjtJRDJKekYsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGNDckp5RjtJRHNKekYsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQzFKeUY7SUQySnpGLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxzQkNySnlGO0lEc0p6RixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQzFKeUY7SUQySnpGLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxlQ3JKdUc7SURzSnZHLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUMxSnVHO0lEMkp2RyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksMEJDckp1RztJRHNKdkcsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkMxSnVHO0lEMkp2RyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksY0NySnVHO0lEc0p2RyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDMUp1RztJRDJKdkcsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLHNCQ3JKdUc7SURzSnZHLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDMUp1RztJRDJKdkcsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGVDckorSDtJRHNKL0gsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQzFKK0g7SUQySi9ILGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSwwQkNySitIO0lEc0ovSCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQzFKK0g7SUQySi9ILGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxjQ3JKK0g7SURzSi9ILGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0MxSitIO0lEMkovSCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksc0JDckorSDtJRHNKL0gsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkMxSitIO0lEMkovSCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksZUNySitJO0lEc0ovSSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDMUorSTtJRDJKL0ksZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLDBCQ3JKK0k7SURzSi9JLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDMUorSTtJRDJKL0ksZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGNDckorSTtJRHNKL0ksZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQzFKK0k7SUQySi9JLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxzQkNySitJO0lEc0ovSSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQzFKK0k7SUQySi9JLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxlQ3JKOEo7SURzSjlKLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUMxSjhKO0lEMko5SixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksMEJDcko4SjtJRHNKOUosZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkMxSjhKO0lEMko5SixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksY0NySjhKO0lEc0o5SixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDMUo4SjtJRDJKOUosZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLHNCQ3JKOEo7SURzSjlKLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDMUo4SjtJRDJKOUosZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGVDcko0SztJRHNKNUssZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQzFKNEs7SUQySjVLLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSwwQkNySjRLO0lEc0o1SyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQzFKNEs7SUQySjVLLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxjQ3JKNEs7SURzSjVLLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0MxSjRLO0lEMko1SyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksc0JDcko0SztJRHNKNUssZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkMxSjRLO0lEMko1SyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksZUNySjRMO0lEc0o1TCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDMUo0TDtJRDJKNUwsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLDBCQ3JKNEw7SURzSjVMLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDMUo0TDtJRDJKNUwsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLGNDcko0TDtJRHNKNUwsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQzFKNEw7SUQySjVMLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxzQkNySjRMO0lEc0o1TCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQzFKNEw7SUQySjVMLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRWxKbUQsRUY2SnBEO0VBWkQ7SUFJSSxlQ3JKME07SURzSjFNLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUMxSjBNO0lEMkoxTSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksMEJDckowTTtJRHNKMU0sZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkMxSjBNO0lEMkoxTSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0VsSm1ELEVGNkpwRDtFQVpEO0lBSUksY0NySjBNO0lEc0oxTSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDMUowTTtJRDJKMU0sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFbEptRCxFRjZKcEQ7RUFaRDtJQUlJLHNCQ3JKME07SURzSjFNLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDMUowTTtJRDJKMU0sZ0JBQWdCLEVBQ2pCOztBQU9UOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE4QkU7QUFNSTtFQUNFLG1DRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxlQzNNbU87SUQ0TW5PLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUNoTm1PO0lEaU5uTyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksMEJDM01tTztJRDRNbk8sZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkNoTm1PO0lEaU5uTyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksY0MzTW1PO0lENE1uTyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDaE5tTztJRGlObk8sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLHNCQzNNbU87SUQ0TW5PLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDaE5tTztJRGlObk8sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGVDM01tUDtJRDRNblAsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQ2hObVA7SURpTm5QLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSwwQkMzTW1QO0lENE1uUCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQ2hObVA7SURpTm5QLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxjQzNNbVA7SUQ0TW5QLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0NoTm1QO0lEaU5uUCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksc0JDM01tUDtJRDRNblAsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkNoTm1QO0lEaU5uUCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksZUMzTWtRO0lENE1sUSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDaE5rUTtJRGlObFEsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLDBCQzNNa1E7SUQ0TWxRLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDaE5rUTtJRGlObFEsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGNDM01rUTtJRDRNbFEsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQ2hOa1E7SURpTmxRLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxzQkMzTWtRO0lENE1sUSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQ2hOa1E7SURpTmxRLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxlQzNNZ1I7SUQ0TWhSLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUNoTmdSO0lEaU5oUixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksMEJDM01nUjtJRDRNaFIsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkNoTmdSO0lEaU5oUixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksY0MzTWdSO0lENE1oUixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDaE5nUjtJRGlOaFIsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLHNCQzNNZ1I7SUQ0TWhSLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDaE5nUjtJRGlOaFIsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGVDM01nUztJRDRNaFMsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQ2hOZ1M7SURpTmhTLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSwwQkMzTWdTO0lENE1oUyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQ2hOZ1M7SURpTmhTLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxjQzNNZ1M7SUQ0TWhTLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0NoTmdTO0lEaU5oUyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksc0JDM01nUztJRDRNaFMsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkNoTmdTO0lEaU5oUyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksZUMzTThTO0lENE05UyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDaE44UztJRGlOOVMsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLDBCQzNNOFM7SUQ0TTlTLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDaE44UztJRGlOOVMsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGNDM004UztJRDRNOVMsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQ2hOOFM7SURpTjlTLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxzQkMzTThTO0lENE05UyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQ2hOOFM7SURpTjlTLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxlQzNNK0g7SUQ0TS9ILGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUNoTitIO0lEaU4vSCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksMEJDM00rSDtJRDRNL0gsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkNoTitIO0lEaU4vSCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksY0MzTStIO0lENE0vSCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDaE4rSDtJRGlOL0gsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLHNCQzNNK0g7SUQ0TS9ILGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDaE4rSDtJRGlOL0gsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGVDM00rSTtJRDRNL0ksZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQ2hOK0k7SURpTi9JLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSwwQkMzTStJO0lENE0vSSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQ2hOK0k7SURpTi9JLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxjQzNNK0k7SUQ0TS9JLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0NoTitJO0lEaU4vSSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksc0JDM00rSTtJRDRNL0ksZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkNoTitJO0lEaU4vSSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksZUMzTThKO0lENE05SixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDaE44SjtJRGlOOUosZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLDBCQzNNOEo7SUQ0TTlKLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDaE44SjtJRGlOOUosZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGNDM004SjtJRDRNOUosZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQ2hOOEo7SURpTjlKLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxzQkMzTThKO0lENE05SixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQ2hOOEo7SURpTjlKLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxlQzNNNEs7SUQ0TTVLLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUNoTjRLO0lEaU41SyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksMEJDM000SztJRDRNNUssZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkNoTjRLO0lEaU41SyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksY0MzTTRLO0lENE01SyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDaE40SztJRGlONUssZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLHNCQzNNNEs7SUQ0TTVLLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDaE40SztJRGlONUssZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGVDM000TDtJRDRNNUwsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQ2hONEw7SURpTjVMLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSwwQkMzTTRMO0lENE01TCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQ2hONEw7SURpTjVMLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxjQzNNNEw7SUQ0TTVMLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0NoTjRMO0lEaU41TCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksc0JDM000TDtJRDRNNUwsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkNoTjRMO0lEaU41TCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksZUMzTTBNO0lENE0xTSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDaE4wTTtJRGlOMU0sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLDBCQzNNME07SUQ0TTFNLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDaE4wTTtJRGlOMU0sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGNDM00wTTtJRDRNMU0sZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQ2hOME07SURpTjFNLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxzQkMzTTBNO0lENE0xTSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQ2hOME07SURpTjFNLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxlQzNNNEI7SUQ0TTVCLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUNoTjRCO0lEaU41QixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksMEJDM000QjtJRDRNNUIsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkNoTjRCO0lEaU41QixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksY0MzTTRCO0lENE01QixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDaE40QjtJRGlONUIsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLHNCQzNNNEI7SUQ0TTVCLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDaE40QjtJRGlONUIsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGVDM000QztJRDRNNUMsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQ2hONEM7SURpTjVDLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSwwQkMzTTRDO0lENE01QyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQ2hONEM7SURpTjVDLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxjQzNNNEM7SUQ0TTVDLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0NoTjRDO0lEaU41QyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksc0JDM000QztJRDRNNUMsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkNoTjRDO0lEaU41QyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksZUMzTTJEO0lENE0zRCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDaE4yRDtJRGlOM0QsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLDBCQzNNMkQ7SUQ0TTNELGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDaE4yRDtJRGlOM0QsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGNDM00yRDtJRDRNM0QsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQ2hOMkQ7SURpTjNELGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxzQkMzTTJEO0lENE0zRCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQ2hOMkQ7SURpTjNELGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxlQzNNeUU7SUQ0TXpFLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUNoTnlFO0lEaU56RSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksMEJDM015RTtJRDRNekUsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkNoTnlFO0lEaU56RSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksY0MzTXlFO0lENE16RSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDaE55RTtJRGlOekUsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLHNCQzNNeUU7SUQ0TXpFLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDaE55RTtJRGlOekUsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGVDM015RjtJRDRNekYsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQ2hOeUY7SURpTnpGLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSwwQkMzTXlGO0lENE16RixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQ2hOeUY7SURpTnpGLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxjQzNNeUY7SUQ0TXpGLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0NoTnlGO0lEaU56RixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksc0JDM015RjtJRDRNekYsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkNoTnlGO0lEaU56RixnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksZUMzTXVHO0lENE12RyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDaE51RztJRGlOdkcsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLDBCQzNNdUc7SUQ0TXZHLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDaE51RztJRGlOdkcsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGNDM011RztJRDRNdkcsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQ2hOdUc7SURpTnZHLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxzQkMzTXVHO0lENE12RyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQ2hOdUc7SURpTnZHLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxlQzNNK0g7SUQ0TS9ILGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUNoTitIO0lEaU4vSCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksMEJDM00rSDtJRDRNL0gsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkNoTitIO0lEaU4vSCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksY0MzTStIO0lENE0vSCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDaE4rSDtJRGlOL0gsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLHNCQzNNK0g7SUQ0TS9ILGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDaE4rSDtJRGlOL0gsZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGVDM00rSTtJRDRNL0ksZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQ2hOK0k7SURpTi9JLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSwwQkMzTStJO0lENE0vSSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQ2hOK0k7SURpTi9JLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxjQzNNK0k7SUQ0TS9JLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0NoTitJO0lEaU4vSSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksc0JDM00rSTtJRDRNL0ksZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkNoTitJO0lEaU4vSSxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksZUMzTThKO0lENE05SixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDaE44SjtJRGlOOUosZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLDBCQzNNOEo7SUQ0TTlKLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDaE44SjtJRGlOOUosZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGNDM004SjtJRDRNOUosZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQ2hOOEo7SURpTjlKLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxzQkMzTThKO0lENE05SixnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQ2hOOEo7SURpTjlKLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLG1DRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxlQzNNNEs7SUQ0TTVLLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksZUNoTjRLO0lEaU41SyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSw4Q0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksMEJDM000SztJRDRNNUssZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSwwQkNoTjRLO0lEaU41SyxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxrQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksY0MzTTRLO0lENE01SyxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGNDaE40SztJRGlONUssZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsMENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLHNCQzNNNEs7SUQ0TTVLLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksc0JDaE40SztJRGlONUssZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsbUNFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGVDM000TDtJRDRNNUwsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxlQ2hONEw7SURpTjVMLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDhDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSwwQkMzTTRMO0lENE01TCxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLDBCQ2hONEw7SURpTjVMLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLGtDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxjQzNNNEw7SUQ0TTVMLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksY0NoTjRMO0lEaU41TCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSwwQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksc0JDM000TDtJRDRNNUwsZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxzQkNoTjRMO0lEaU41TCxnQkFBZ0IsRUFDakI7O0FBWEg7RUFDRSxtQ0V4TW1ELEVGbU5wRDtFQVpEO0lBSUksZUMzTTBNO0lENE0xTSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLGVDaE4wTTtJRGlOMU0sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0UsOENFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLDBCQzNNME07SUQ0TTFNLGdCQUFnQixFQUNqQjtFQU5IO0lBU0ksMEJDaE4wTTtJRGlOMU0sZ0JBQWdCLEVBQ2pCOztBQVhIO0VBQ0Usa0NFeE1tRCxFRm1OcEQ7RUFaRDtJQUlJLGNDM00wTTtJRDRNMU0sZ0JBQWdCLEVBQ2pCO0VBTkg7SUFTSSxjQ2hOME07SURpTjFNLGdCQUFnQixFQUNqQjs7QUFYSDtFQUNFLDBDRXhNbUQsRUZtTnBEO0VBWkQ7SUFJSSxzQkMzTTBNO0lENE0xTSxnQkFBZ0IsRUFDakI7RUFOSDtJQVNJLHNCQ2hOME07SURpTjFNLGdCQUFnQixFQUNqQjs7QUcvS1Q7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBeUJGOzs7OztFQUtFO0FBYUY7O0VBRUU7QUFPRjs7Ozs7Ozs7Ozs7OztFQWFFO0FDbkVFO0VDekNKO0lBSU0scUJBQXFCO0lBRXJCLHNCQUFzQixFQUV6Qjs7QUFHSDtFQUNFLG1CQUFtQjtFQUNuQixPQUFPO0VBQ1AsUUFBUTtFQUNSLFNBQVM7RUFDVCxhQUFhO0VBQ2Isa0JBQWtCO0VBQ2xCLFlBQVk7RUFDWixhRk5xQjtFRU9yQixZQUFZO0VBQ1oscUJBQWM7RUFBZCxxQkFBYztFQUFkLGNBQWMsRUE2UWY7RUF2UkQ7SUFZSSxnQkFBZ0IsRUFDakI7RUFiSDtJQWVJLHdCRmJtQjtJRWNuQixZQUFZLEVBS2I7SURTQztNQzlCSjtRQWtCTSx5QkZoQmlCO1FFaUJqQixpQkFBaUIsRUFFcEI7RURTQztJQzlCSjtNQXVCSSxpQkFBaUIsRUFnUXBCO0VBdlJEO0lBMEJJLDhCQUE4QixFQUMvQjtFQTNCSDtJQTZCSSxhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLG1CQUFtQixFQStDcEI7SURoREM7TUM5Qko7UUFpQ00sYUYvQmlCLEVFNEVwQjtJRGhEQztNQzlCSjtRQXFDUSw4QkFBOEIsRUFFakM7SUF2Q0w7TUF5Q00sYUZ2Q2lCO01Fd0NqQixZQUFZO01BQ1osV0FBVztNQUNYLG9CQUFvQjtNQUNwQixZQUFZO01BQ1osNEJBQVk7TUFDWixtQkFBbUIsRUFVcEI7TUQzQkQ7UUM5Qko7VUFpRFEsT0FBTztVQUNQLFlBQVk7VUFDWixXQUFXO1VBQ1gsb0JBQW9CO1VBQ3BCLFlBQVk7VUFDWixhQUFhO1VBQ2IsZUFBZSxFQUVsQjtJQXpETDtNQW9FTSxlQUFlLEVBQ2hCO01BckVMO1FGTUUsaUZBQWlGO1FBQ2pGLGlCRzNCODhCO1FINEI5OEIsbUJBTnFCO1FBT3JCLG9CQVBxQjtRQVFyQix3QkFBZ0I7UUFDaEIsVUFBVTtRQUNWLG9CQUEwRDtRRWtEbEQsMEJBQXVDLEVBSXhDO1FEcENMO1VDOUJKO1lGTUUsaUZBQWlGO1lBQ2pGLGlCRzNCKzNCO1lINEIvM0IscUJBTnFCO1lBT3JCLG9CQVBxQjtZQVFyQix5QkFBZ0I7WUFDaEIsVUFBVTtZQUNWLG9CQUEwRCxFRXNEbkQ7SUFsRVQ7TUF5RVUsaUJBQWlCO01BQ2pCLG1DQUFpQjtjQUFqQiwyQkFBaUIsRUFDbEI7RUEzRVQ7SUFpRk0sWUFBWSxFQXVEYjtJQXhJTDtNQXFGUSxlQUFlO01BQ2YsWUFBWTtNQUNaLHNCQUFzQixFQWtCdkI7TUF6R1A7UUEwRlUsMEJBQW9CO1lBQXBCLHVCQUFvQjtnQkFBcEIsb0JBQW9CO1FBQ3BCLHFCQUFjO1FBQWQscUJBQWM7UUFBZCxjQUFjO1FBQ2QsWUFBWTtRQUNaLHNCRjNGYSxFRXNHZDtRRDFFTDtVQzlCSjtZQWdHWSxtQkY5RlcsRUVzR2Q7UUF4R1Q7VUFvR1ksY0ZsR1c7VUVtR1gsZUZuR1c7VUVvR1gsY0UxSGdpQixFRjJIamlCO0lBdkdYO01BNkdRLGVBQWU7TUFDZixZQUFZO01BQ1osZ0JBQWdCO01BQ2hCLG9CRjlHZTtNRStHZix3REFBaUM7TUFDakMsZ0NBQWlCO2NBQWpCLHdCQUFpQixFQXFCbEI7TUF2SVA7UUFzSFUsYUwvRVEsRUtnRlQ7TUF2SFQ7UUEySFUsYUxoRVEsRUtpRVQ7TUE1SFQ7UUErSFUsY0VuSmtpQjtRRm9KbGlCLGdCRjlIYTtRRStIYixxQ0hySmlEO1FHc0pqRCxlRmhJYSxFRWlJZDtNRHJHTDtRQzlCSjtVQXFJVSxjQUFjLEVBRWpCO0VBdklQO0lBMklJLG1CQUFtQjtJQUNuQixZQUFZO0lBQ1osV0FBVztJQUNYLFVBQVU7SUFDVixpQkFBaUI7SUFDakIsWUFBWTtJQUNaLFdBQVc7SUFDWCxtQkFBbUI7SUFDbkIsWUFBWSxFQWdEYjtJRHJLQztNQzlCSjtRQXFKTSxZQUFZO1FBQ1osV0FBVztRQUNYLG9CQUFvQjtRQUNwQixZQUFZO1FBQ1osb0JGdkppQixFRWlNcEI7SUFuTUg7TUE0Sk0sZUFBZSxFQUloQjtNRGxJRDtRQzlCSjtVQThKUSxjQUFjLEVBRWpCO0lBaEtMO01Ba0tNLGtCQUFzQjtNQUN0QixrREFBNkI7TUFDN0IsZUFBZTtNQUNmLFlBQVksRUF1QmI7TUQ5SkQ7UUM5Qko7VUF1S1EsZUFBZTtVQUNmLFlBQVk7VUFDWixZQUFZO1VBQ1osc0JBQTBCO1VBQzFCLG9CQUFvQixFQWlCdkI7TUE1TEw7UUE4S1EsaUJBQWlCO1FBQ2pCLG9CQUFvQixFQUNyQjtNQWhMUDs7UUZNRSxpRkFBaUY7UUFDakYsaUJHM0J1cEI7UUg0QnZwQixrQkFOcUI7UUFPckIsb0JBUHFCO1FBUXJCLHFCQUFnQjtRQUNoQixVQUFVO1FBQ1Ysb0JBQTBEO1FFd0twRCxzQkFBc0IsRUFJdkI7UUQxSkg7VUM5Qko7O1lGTUUsaUZBQWlGO1lBQ2pGLGlCRzNCKzNCO1lINEIvM0IscUJBTnFCO1lBT3JCLG9CQVBxQjtZQVFyQix5QkFBZ0I7WUFDaEIsVUFBVTtZQUNWLG9CQUEwRCxFRTRLckQ7TUF4TFA7UUEwTFEsZ0NBQVcsRUFDWjtJQTNMUDtNQThMTSxlQUFlLEVBSWhCO01EcEtEO1FDOUJKO1VBZ01RLGNBQWMsRUFFakI7RUFsTUw7SUFxTUksbUJBQW1CO0lBQ25CLGNGcE1tQixFRThRcEI7SUFoUkg7TUF3TU0sY0FBYztNQUNkLFlBQVksRUFjYjtNQXZOTDtRRk1FLGlGQUFpRjtRQUNqRixpQkczQjg4QjtRSDRCOThCLG1CQU5xQjtRQU9yQixvQkFQcUI7UUFRckIsd0JBQWdCO1FBQ2hCLFVBQVU7UUFDVixvQkFBMEQ7UUVnTXBELDBCQUF1QyxFQUt4QztRRG5MSDtVQzlCSjtZQThNVSxlQUFlO1lGeE12QixpRkFBaUY7WUFDakYsaUJHM0IrM0I7WUg0Qi8zQixxQkFOcUI7WUFPckIsb0JBUHFCO1lBUXJCLHlCQUFnQjtZQUNoQixVQUFVO1lBQ1Ysb0JBQTBELEVFcU1yRDtNRG5MSDtRQzlCSjtVQW1OUSxlQUFlO1VBQ2YsWUFBWTtVQUNaLGlCQUFpQixFQUVwQjtJQXZOTDtNQXlOTSxxQkZ2TmlCO01Fd05qQixZQUFZLEVBc0JiO01BaFBMO1FBOE5RLHFCQUFjO1FBQWQscUJBQWM7UUFBZCxjQUFjO1FBQ2QsMEJBQW9CO1lBQXBCLHVCQUFvQjtnQkFBcEIsb0JBQW9CLEVBZ0JyQjtRQS9PUDtVQW1PVSxhTDVMUSxFSzZMVDtRQXBPVDtVQXVPVSxhTDVLUSxFSzZLVDtRQXhPVDtVQTBPVSxZQUFZO1VBQ1osYUFBYTtVQUNiLGNFaFFraUI7VUZpUWxpQixxQ0hqUWlELEVHa1FsRDtJQTlPVDs7TUFxUFEsY0FBYyxFQUNmO0lBdFBQO01Bd1BRLGVBQWU7TUFDZixnQkFBZ0I7TUFDaEIsbUJBQW1CO01BQ25CLDhCQUFnQjtjQUFoQixzQkFBZ0I7TUFDaEIsYUFBYTtNQUNiLFlBQVk7TUFDWixPQUFPO01BQ1AsU0FBUztNQUNULGNFcFJvaUIsRUY0UnJpQjtNRDFPSDtRQzlCSjtVQW1RVSxhQUFhO1VBQ2IsWUFBWTtVQUNaLFVBQVU7VUFDViw4QkFBZ0I7a0JBQWhCLHNCQUFnQixFQUVuQjtJQXhRUDtNQTJRTSxjQUFjLEVBQ2Y7SUQ5T0Q7TUM5Qko7UUE4UU0sZUY1UWlCLEVFOFFwQjtFQWhSSDtJQWtSSSxjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixnQkZuUm1CLEVFb1JwQjs7QUFHSDtFQUNFLHFCRnhScUIsRUV5UnRCOztBQUVEO0VBSVEsY0FBYyxFQUtmO0VEeFFIO0lDK1BKO01BT1UsZUFBZSxFQUVsQjs7QUFUUDtFQWFVLGNBQWMsRUFDZjtBRjVSVDs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkU7QUF5QkY7Ozs7O0VBS0U7QUFhRjs7RUFFRTtBQU9GOzs7Ozs7Ozs7Ozs7O0VBYUU7QUs1R0Y7RUFDRSxhQUFhO0VBQ2Isd0JMV3FCO0VLVnJCLHlCQUF5QjtFQUN6QixpRU5ieUQsRU1xRDFEO0VBNUNEO0lBUUksa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLFdBQVc7SUFDWCwrQkFBZ0I7WUFBaEIsdUJBQWdCLEVBTWpCO0lKc0JDO01JekNKO1FBZU0sT0FBTztRQUNQLFNBQVM7UUFDVCwrQkFBZ0I7Z0JBQWhCLHVCQUFnQixFQUVuQjtFQW5CSDtJQXNCSSxjQUFjLEVBQ2Y7RUF2Qkg7SUxpQkUsaUZBQWlGO0lBQ2pGLGlCRzNCaXZEO0lINEJqdkQsa0JBTnFCO0lBT3JCLG9CQVBxQjtJQVFyQixxQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLG9CQUEwRDtJS0l4RCxXQUFXO0lBQ1gsZURyQ3dpQixFQzhDemlCO0lBckNIO01BK0JNLGNBQWMsRUFDZjtJSlNEO01JekNKO1FMaUJFLGlGQUFpRjtRQUNqRixpQkczQjI3QztRSDRCMzdDLGdCQU5xQjtRQU9yQixrQkFQcUI7UUFRckIsMEJBQWdCO1FBQ2hCLFVBQVU7UUFDVixvQkFBMEQsRUtjekQ7RUpJQztJSXpDSjtNQ1VJLGlCQ3dJb0I7TUR4SXBCLFlFQTREO01GQTVELHVCRzREd0I7TUo3QnhCLFlBQVk7TUFDWixhQUFhLEVBRWhCOztBQUVEO0VBQ0UsWUFBWTtFQUNaLGdCQUFnQjtFQUNoQixZQUFZO0VBQ1osY0FBYztFQUNkLGFBQWEsRUFtQmQ7RUF4QkQ7SUFRSSxtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLFFBQVE7SUFDUixTQUFTO0lBQ1Qsb0NBQXFCO1lBQXJCLDRCQUFxQjtJQUNyQixlQUFlLEVBTWhCO0lKeEJDO01JS0o7UUFnQk0sYUFBYTtRQUNiLFVBQVUsRUFFYjtFQW5CSDtJQXNCSSxPQUFPLEVBQ1I7O0FBR0g7RUFDRSxnQ0FBZ0MsRUFDakM7O0FBRUQ7RUFDRSxpQkFBaUIsRUFDbEI7O0FBSUM7RUFDRSxlQUFPO0VBQ1AsV0FBVyxFQUNaOztBQUhEO0VBQ0UsZUFBTztFQUNQLFdBQVcsRUFDWjs7QUFIRDtFQUNFLGVBQU87RUFDUCxXQUFXLEVBQ1o7O0FBSEQ7RUFDRSxlQUFPO0VBQ1AsV0FBVyxFQUNaOztBQUVEO0VBQ0UsMkNEakdtVjtFQ2tHblYsZURsR3dpQixFQ21HemlCOztBQUhEO0VBQ0UsMkNEakdtVjtFQ2tHblYsZURsR3dpQixFQ21HemlCOztBQVJEO0VBQ0UsZUFBTztFQUNQLFdBQVcsRUFDWjs7QUFIRDtFQUNFLGVBQU87RUFDUCxXQUFXLEVBQ1o7O0FBSEQ7RUFDRSxlQUFPO0VBQ1AsV0FBVyxFQUNaOztBQUhEO0VBQ0UsZUFBTztFQUNQLFdBQVcsRUFDWjs7QUFFRDtFQUNFLDJDRGpHbVc7RUNrR25XLGVEbEd3aUIsRUNtR3ppQjs7QUFIRDtFQUNFLDJDRGpHbVc7RUNrR25XLGVEbEd3aUIsRUNtR3ppQjs7QUFSRDtFQUNFLGVBQU87RUFDUCxXQUFXLEVBQ1o7O0FBSEQ7RUFDRSxlQUFPO0VBQ1AsV0FBVyxFQUNaOztBQUhEO0VBQ0UsZUFBTztFQUNQLFdBQVcsRUFDWjs7QUFIRDtFQUNFLGVBQU87RUFDUCxXQUFXLEVBQ1o7O0FBRUQ7RUFDRSwyQ0RqR2tYO0VDa0dsWCxlRGxHd2lCLEVDbUd6aUI7O0FBSEQ7RUFDRSwyQ0RqR2tYO0VDa0dsWCxlRGxHd2lCLEVDbUd6aUI7O0FBUkQ7RUFDRSxlQUFPO0VBQ1AsV0FBVyxFQUNaOztBQUhEO0VBQ0UsZUFBTztFQUNQLFdBQVcsRUFDWjs7QUFIRDtFQUNFLGVBQU87RUFDUCxXQUFXLEVBQ1o7O0FBSEQ7RUFDRSxlQUFPO0VBQ1AsV0FBVyxFQUNaOztBQUVEO0VBQ0UsMkNEakdnWTtFQ2tHaFksZURsR3dpQixFQ21HemlCOztBQUhEO0VBQ0UsMkNEakdnWTtFQ2tHaFksZURsR3dpQixFQ21HemlCOztBQVJEO0VBQ0UsZUFBTztFQUNQLFdBQVcsRUFDWjs7QUFIRDtFQUNFLGVBQU87RUFDUCxXQUFXLEVBQ1o7O0FBSEQ7RUFDRSxlQUFPO0VBQ1AsV0FBVyxFQUNaOztBQUhEO0VBQ0UsZUFBTztFQUNQLFdBQVcsRUFDWjs7QUFFRDtFQUNFLDJDRGpHZ1o7RUNrR2haLGVEbEd3aUIsRUNtR3ppQjs7QUFIRDtFQUNFLDJDRGpHZ1o7RUNrR2haLGVEbEd3aUIsRUNtR3ppQjs7QUFSRDtFQUNFLGVBQU87RUFDUCxXQUFXLEVBQ1o7O0FBSEQ7RUFDRSxlQUFPO0VBQ1AsV0FBVyxFQUNaOztBQUhEO0VBQ0UsZUFBTztFQUNQLFdBQVcsRUFDWjs7QUFIRDtFQUNF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U0o7TUFJSSxpQkFBaUI7TUFDakIsdUJEMUNtQjtNQzJDbkIsd0JEM0NtQixFQ3dEdEI7TUFuQkQ7UUFTTSwwQk1wRXVmO1FOcUV2ZixhQUFhO1FBQ2IsZUFBZTtRQUNmLDBCQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1YsV0FBVyxFQUNaOztBQUlMO0VBRUksc0JENURtQixFQzZEcEI7O0FBSEg7RUFNSSxlQUFlO0VBQ2YsV0FBVyxFQUNaOztBQUdIO0VBQ0UsZUFBZTtFQUNmLFlBQVk7RUFDWixzQkR4RXFCLEVDNkV0QjtFQVJEO0lBTUksc0JBQXNCLEVBQ3ZCIiwiZmlsZSI6ImNzcy9lcnJvci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9tb3Rpb24uanNvbic7XG5AaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9jb2xvcnMuanNvbic7XG5cbkBtaXhpbiBwcmludCgkZGVjbGFyYXRpb25zKSB7XG4gIEBlYWNoICRwcm9wZXJ0eSwgJHZhbHVlIGluICRkZWNsYXJhdGlvbnMge1xuICAgICN7JHByb3BlcnR5fTogJHZhbHVlXG4gIH1cbn1cblxuJHRyYW5zaXRpb25UaW1pbmc6IG1hcC1nZXQoJHRyYW5zaXRpb25zLCBob3Zlci10aW1pbmcpO1xuJHRyYW5zaXRpb25FYXNpbmc6IG1hcC1nZXQoJHRyYW5zaXRpb25zLCBob3Zlci1lYXNpbmcpO1xuXG4kY29sb3JDYXRlZ29yaWVzOiAoXG4gIGV4dHJhLWxpZ2h0LFxuICBsaWdodCxcbiAgZGFyayxcbiAgZXh0cmEtZGFya1xuKTtcblxuJHByb3BlcnRpZXM6IChcbiAgY29sb3I6IGNvbG9yLFxuICBiZy1jb2xvcjogYmFja2dyb3VuZC1jb2xvcixcbiAgZmlsbC1jb2xvcjogZmlsbCxcbiAgYm9yZGVyLWNvbG9yOiBib3JkZXItY29sb3Jcbik7XG5cbiRpbnRlcmFjdGlvbjogKFxuICBob3ZlcjogKFxuICAgIGV4dHJhLWxpZ2h0OiBsaWdodCxcbiAgICBsaWdodDogZGFyayxcbiAgICBkYXJrOiBleHRyYS1kYXJrLFxuICAgIGV4dHJhLWRhcms6IGRhcmtcbiAgKSxcbiAgYWN0aXZlOiAoXG4gICAgZXh0cmEtbGlnaHQ6IGxpZ2h0LFxuICAgIGxpZ2h0OiBkYXJrLFxuICAgIGRhcms6IGV4dHJhLWRhcmssXG4gICAgZXh0cmEtZGFyazogZGFya1xuICApXG4pO1xuXG4kbmV1dHJhbENvbG9ySW50ZXJhY3Rpb246IChcbiAgaG92ZXI6IChcbiAgICBibGFjazogKFxuICAgICAgb3BhY2l0eTogMC42XG4gICAgKSxcbiAgICBkYXJrLWdyYXk6IChcbiAgICAgIGNvbG9yOiBjb2xvcihuZXV0cmFsLCBibGFjaylcbiAgICApLFxuICAgIGxpZ2h0LWdyYXk6IChcbiAgICAgIG9wYWNpdHk6IDAuNlxuICAgICksXG4gICAgZXh0cmEtbGlnaHQtZ3JheTogKFxuICAgICAgb3BhY2l0eTogMC42XG4gICAgKSxcbiAgICBleHRyYS1leHRyYS1saWdodC1ncmF5OiAoXG4gICAgICBvcGFjaXR5OiAwLjZcbiAgICApLFxuICAgIHdoaXRlOiAoXG4gICAgICBvcGFjaXR5OiAwLjZcbiAgICApXG4gICksXG4gIGFjdGl2ZTogKFxuICAgIGJsYWNrOiAoXG4gICAgICBvcGFjaXR5OiAwLjZcbiAgICApLFxuICAgIGRhcmstZ3JheTogKFxuICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIGJsYWNrKVxuICAgICksXG4gICAgbGlnaHQtZ3JheTogKFxuICAgICAgb3BhY2l0eTogMC42XG4gICAgKSxcbiAgICBleHRyYS1saWdodC1ncmF5OiAoXG4gICAgICBvcGFjaXR5OiAwLjZcbiAgICApLFxuICAgIGV4dHJhLWV4dHJhLWxpZ2h0LWdyYXk6IChcbiAgICAgIG9wYWNpdHk6IDAuNlxuICAgICksXG4gICAgd2hpdGU6IChcbiAgICAgIG9wYWNpdHk6IDAuNlxuICAgIClcbiAgKVxuKTtcblxuQGVhY2ggJGNvbG9yS2V5LCAkY29sb3IgaW4gbWFwLWdldCgkY29sb3JzLCBuZXV0cmFsKSB7XG4gIEBlYWNoICRwcm9wS2V5LCAkcHJvcCBpbiAkcHJvcGVydGllcyB7XG4gICAgJGhvdmVySW50ZXJhY3RpdmVQcm9wczogbWFwLWdldChtYXAtZ2V0KCRuZXV0cmFsQ29sb3JJbnRlcmFjdGlvbiwgaG92ZXIpLCAkY29sb3JLZXkpO1xuICAgICRob3ZlckludGVyYWN0aXZlUHJvcE5hbWU6IG50aChtYXAta2V5cygkaG92ZXJJbnRlcmFjdGl2ZVByb3BzKSwgMSk7XG4gICAgJGFjdGl2ZUludGVyYWN0aXZlUHJvcHM6IG1hcC1nZXQobWFwLWdldCgkbmV1dHJhbENvbG9ySW50ZXJhY3Rpb24sIGFjdGl2ZSksICRjb2xvcktleSk7XG5cbiAgICAuI3skcHJvcEtleX0tLW5ldXRyYWwtI3skY29sb3JLZXl9LS1oYXMtaG92ZXIge1xuICAgICAgI3skcHJvcH06ICRjb2xvcjtcbiAgICAgIHRyYW5zaXRpb246ICRob3ZlckludGVyYWN0aXZlUHJvcE5hbWUgJHRyYW5zaXRpb25UaW1pbmcgJHRyYW5zaXRpb25FYXNpbmc7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBwcmludCgkaG92ZXJJbnRlcmFjdGl2ZVByb3BzKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSBwcmludCgkYWN0aXZlSW50ZXJhY3RpdmVQcm9wcyk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLypcbiAgQ29sb3IgSG92ZXIgVXRpbGl0eSBDbGFzc2VzOlxuICBDcmVhdGVzIGEgY2xhc3MgZm9yIGVhY2ggY2F0ZWdvcnkgYW5kIGNvbG9yIGNvbWJpbmF0aW9uIGJhc2VkIG9uIHRoZSBpbnRlcmFjdGlvblxuICBsb2dpYyBvZiB0aGUgc3lzdGVtIChob3ZlciBnb2VzIHRvIG9uZSBzaGFkZSBkYXJrZXIsIGFjdGl2ZSBhbmQgaG92ZXIgYXJlIHRoZSBzYW1lKS5cblxuICAuYmctY29sb3ItLWRhcmstYmx1ZS0taG92ZXIge1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgJHRyYW5zaXRpb25UaW1pbmcgJHRyYW5zaXRpb25FYXNpbmc7XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA1RkQxO1xuICAgIH1cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA1RkQxO1xuICAgIH1cbiAgfVxuXG5cbiAgUHJvcGVydGllczogY29sb3IsIGJhY2tncm91bmQtY29sb3IgKGJnLWNvbG9yKSwgZmlsbCAoZmlsbC1jb2xvciksIGJvcmRlci1jb2xvclxuICBDYXRlZ29yaWVzOiBleHRyYS1kYXJrLCBkYXJrLCBsaWdodCwgZXh0cmEtbGlnaHQsIG5ldXRyYWxcbiAgQ29sb3JzOiBvcmFuZ2UsIHllbGxvdywgZ3JlZW4sIGJsdWUsIHB1cnBsZSwgcGlua1xuXG4gIC57cHJvcGVydHl9LS17Y2F0ZWdvcnl9LXtjb2xvcn0tLWhvdmVyIHtcbiAgICB0cmFuc2l0aW9uOiB7cHJvcGVydHl9ICR0cmFuc2l0aW9uVGltaW5nICR0cmFuc2l0aW9uRWFzaW5nO1xuICAgICY6aG92ZXIge1xuICAgICAge3Byb3BlcnR5fToge2hvdmVyQ29sb3J9O1xuICAgIH1cbiAgICAmOmFjdGl2ZSB7XG4gICAgICB7cHJvcGVydHl9OiB7YWN0aXZlQ29sb3J9O1xuICAgIH1cbiAgfVxuXG4gIE5vdGU6IHRoZSBiYWNrZ3JvdW5kLWNvbG9yIHByb3BlcnR5IHVzZXMgYmctY29sb3IgaW4gdGhlIGNsYXNzbmFtZS5cbiAgQWxsIG90aGVycyB1c2UgdGhlIHNhbWUgY2xhc3MgbmFtZSBhcyB0aGUgQ1NTIHByb3BlcnR5IHRoZXkgc2V0LlxuXG4qL1xuXG5AZWFjaCAkY2F0ZWdvcnlLZXkgaW4gJGNvbG9yQ2F0ZWdvcmllcyB7XG4gICRjYXRlZ29yeTogbWFwLWdldCgkY29sb3JzLCAkY2F0ZWdvcnlLZXkpO1xuICBAZWFjaCAkY29sb3JLZXksICRjb2xvciBpbiAkY2F0ZWdvcnkge1xuICAgIEBlYWNoICRwcm9wS2V5LCAkcHJvcCBpbiAkcHJvcGVydGllcyB7XG4gICAgICAuI3skcHJvcEtleX0tLSN7JGNhdGVnb3J5S2V5fS0jeyRjb2xvcktleX0tLWhvdmVyIHtcbiAgICAgICAgdHJhbnNpdGlvbjogI3skcHJvcH0gJHRyYW5zaXRpb25UaW1pbmcgJHRyYW5zaXRpb25FYXNpbmc7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICRob3ZlckNhdGVnb3J5OiBtYXAtZ2V0KG1hcC1nZXQoJGludGVyYWN0aW9uLCBob3ZlciksICRjYXRlZ29yeUtleSk7XG4gICAgICAgICAgI3skcHJvcH06IG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkaG92ZXJDYXRlZ29yeSksICRjb2xvcktleSk7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB9XG4gICAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgICAkYWN0aXZlQ2F0ZWdvcnk6IG1hcC1nZXQobWFwLWdldCgkaW50ZXJhY3Rpb24sIGFjdGl2ZSksICRjYXRlZ29yeUtleSk7XG4gICAgICAgICAgI3skcHJvcH06IG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkYWN0aXZlQ2F0ZWdvcnkpLCAkY29sb3JLZXkpO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuICB9XG59XG5cbi8qXG4gIFRoZW1lIENvbG9yIFV0aWxpdHkgQ2xhc3NlczpcbiAgQ3JlYXRlcyBhIGNsYXNzIGZvciBlYWNoIGNhdGVnb3J5IGFuZCBjb2xvciBjb21iaW5hdGlvbi5cblxuICAudGhlbWUtLWJsdWUgLnRoZW1lLWJnLWNvbG9yLS1kYXJrLS1ob3ZlciB7XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA1RkQxO1xuICAgIH1cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA1RkQxO1xuICAgIH1cbiAgfVxufVxuXG4gIFByb3BlcnRpZXM6IGNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yIChiZy1jb2xvciksIChmaWxsKSBmaWxsLWNvbG9yLCBib3JkZXItY29sb3JcbiAgQ2F0ZWdvcmllczogZXh0cmEtZGFyaywgZGFyaywgbGlnaHQsIGV4dHJhLWxpZ2h0LCBuZXV0cmFsXG4gIENvbG9yczogb3JhbmdlLCB5ZWxsb3csIGdyZWVuLCBibHVlLCBwdXJwbGUsIHBpbmtcblxuICAudGhlbWUtLXtjb2xvcn0gLnRoZW1lLXtwcm9wZXJ0eX0tLXtjYXRlZ29yeX0tLWhvdmVyIHtcbiAgICAmOmhvdmVyIHtcbiAgICAgIHtwcm9wZXJ0eX06IHtob3ZlckNvbG9yfVxuICAgIH1cbiAgICAmOmFjdGl2ZSB7XG4gICAgICB7cHJvcGVydHl9OiB7YWN0aXZlQ29sb3J9XG4gICAgfVxuICB9XG5cbiAgTm90ZTogdGhlIGJhY2tncm91bmQtY29sb3IgcHJvcGVydHkgdXNlcyBiZy1jb2xvciBpbiB0aGUgY2xhc3NuYW1lLlxuICBBbGwgb3RoZXJzIHVzZSB0aGUgc2FtZSBjbGFzcyBuYW1lIGFzIHRoZSBDU1MgcHJvcGVydHkgdGhleSBzZXQuXG5cbiovXG5cbkBlYWNoICRjYXRlZ29yeUtleSBpbiAkY29sb3JDYXRlZ29yaWVzIHtcbiAgJGNhdGVnb3J5OiBtYXAtZ2V0KCRjb2xvcnMsICRjYXRlZ29yeUtleSk7XG4gIEBlYWNoICRjb2xvcktleSwgJGNvbG9yIGluICRjYXRlZ29yeSB7XG4gICAgQGVhY2ggJHByb3BLZXksICRwcm9wIGluICRwcm9wZXJ0aWVzIHtcbiAgICAgIC50aGVtZS0tI3skY29sb3JLZXl9IC50aGVtZS0jeyRwcm9wS2V5fS0tI3skY2F0ZWdvcnlLZXl9LS1ob3ZlciB7XG4gICAgICAgIHRyYW5zaXRpb246ICN7JHByb3B9ICR0cmFuc2l0aW9uVGltaW5nICR0cmFuc2l0aW9uRWFzaW5nO1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAkaG92ZXJDYXRlZ29yeTogbWFwLWdldChtYXAtZ2V0KCRpbnRlcmFjdGlvbiwgaG92ZXIpLCAkY2F0ZWdvcnlLZXkpO1xuICAgICAgICAgICN7JHByb3B9OiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJGhvdmVyQ2F0ZWdvcnkpLCAkY29sb3JLZXkpO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuICAgICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICAgJGFjdGl2ZUNhdGVnb3J5OiBtYXAtZ2V0KG1hcC1nZXQoJGludGVyYWN0aW9uLCBhY3RpdmUpLCAkY2F0ZWdvcnlLZXkpO1xuICAgICAgICAgICN7JHByb3B9OiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJGFjdGl2ZUNhdGVnb3J5KSwgJGNvbG9yS2V5KTtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvc3R5bGUvdXRpbGl0eS9faG92ZXIuc2Nzc1xuICoqLyIsIiRjb2xvcnM6IChleHRyYS1kYXJrOiAob3JhbmdlOiAjRDgyRTE4LHllbGxvdzogI0Y5OEUwMCxncmVlbjogIzAwODk1MSxibHVlOiAjMDA1RkQxLHB1cnBsZTogIzRGMDI5OSxwaW5rOiAjQTAxNzQ0KSxkYXJrOiAob3JhbmdlOiAjRjQ1RDIyLHllbGxvdzogI0ZGQUQxRixncmVlbjogIzFGQjY1MCxibHVlOiAjMURBMUYyLHB1cnBsZTogIzc5NEJDNCxwaW5rOiAjRTAyNDVFKSxsaWdodDogKG9yYW5nZTogI0ZGOEQ1Nyx5ZWxsb3c6ICNGRkQwM0YsZ3JlZW46ICM2OEUwOTAsYmx1ZTogIzcxQzlGOCxwdXJwbGU6ICNBMzdDRUQscGluazogI0Y2ODA5QSksZXh0cmEtbGlnaHQ6IChvcmFuZ2U6ICNGRkJFNzgseWVsbG93OiAjRkZFNzZFLGdyZWVuOiAjQTVGMkFBLGJsdWU6ICM5N0UzRkYscHVycGxlOiAjQzdCNEZBLHBpbms6ICNGRkI4QzIpLG5ldXRyYWw6IChibGFjazogIzE0MTcxQSxkYXJrLWdyYXk6ICM2NTc3ODYsbGlnaHQtZ3JheTogI0FBQjhDMixleHRyYS1saWdodC1ncmF5OiAjQ0NENkRELGV4dHJhLWV4dHJhLWxpZ2h0LWdyYXk6ICNGNUY4RkEsd2hpdGU6ICNGRkZGRkYpKTtcblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvcmUvdmFyaWFibGVzL2NvbG9ycy5qc29uXG4gKiovIiwiJHRyYW5zaXRpb25zOiAoaG92ZXItdGltaW5nOiAwLjNzLGhvdmVyLWVhc2luZzogZWFzZS1pbi1vdXQsY29sb3ItY2hhbmdlLXRpbWluZzogMXMsY29sb3ItY2hhbmdlLWVhc2luZzogZWFzZS1pbi1vdXQsbG9hZGVyLWJpcmQtdGltaW5nOiAwLjNzLGxvYWRlci1iaXJkLWVhc2luZzogZWFzZS1pbik7XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb3JlL3ZhcmlhYmxlcy9tb3Rpb24uanNvblxuICoqLyIsIkBpbXBvcnQgJy4uL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJy4uL3ZhcmlhYmxlcy90eXBvZ3JhcGh5Lmpzb24nO1xuQGltcG9ydCAnLi4vdmFyaWFibGVzL2NvbG9ycy5qc29uJztcblxuQGltcG9ydCAnLi9ncmlkJztcblxuLy8kYmFzZWxpbmVVbml0OiBtYXAtZ2V0KG1hcC1nZXQoJGdyaWQsIGRlc2t0b3ApLCBiYXNlbGluZSk7XG4kYmFzZWxpbmVVbml0OiAwLjc1cmVtOyAvLyAxMnB4XG5cbkBtaXhpbiByZXNwb25kLXRvKCRzaXplKSB7XG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgJHNpemUpKSB7XG4gICAgQGNvbnRlbnRcbiAgfVxufVxuXG5AbWl4aW4gdmVydGljYWwtYWxpZ24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbkBmdW5jdGlvbiBiYXNlbGluZSgkbXVsdGlwbGllcjogMSkge1xuICBAcmV0dXJuICRiYXNlbGluZVVuaXQgKiAkbXVsdGlwbGllcjtcbn1cblxuQG1peGluIHR5cGVTdHlsZXMoJHR5cGVmYWNlKSB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlIExUXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IG1hcC1nZXQoJHR5cGVmYWNlLCB3ZWlnaHQpO1xuICBmb250LXNpemU6IGJhc2VsaW5lKG1hcC1nZXQoJHR5cGVmYWNlLCBzaXplKSk7XG4gIGxpbmUtaGVpZ2h0OiBiYXNlbGluZShtYXAtZ2V0KCR0eXBlZmFjZSwgbGluZS1oZWlnaHQpKTtcbiAgbGV0dGVyLXNwYWNpbmc6ICN7bWFwLWdldCgkdHlwZWZhY2UsIHRyYWNraW5nKSAvIDEwMDB9cmVtO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAgMCBiYXNlbGluZShtYXAtZ2V0KCR0eXBlZmFjZSwgbWFyZ2luLWJvdHRvbSkpIDA7XG59XG5cbi8qXG5cbmZvbnQgbWl4aW5cbiRrZXk6IHR5cGUgc3R5bGUga2V5IChleC4gYm9sZC0yNCBvciByb21hbi0yNCkuIFNlZSB0eXBvZ3JhcGh5Lmpzb24gZm9yIG9wdGlvbnMuXG4kYnJlYWtwb2ludDogKG9wdGlvbmFsKSBicmVha3BvaW50IGtleSAoZXguIGZ1bGwgb3IgdGFibGV0KS4gU2VlIGJyZWFrcG9pbnRzLmpzb24gZm9yIG9wdGlvbnMuXG5cbkBpbmNsdWRlIGZvbnQoYm9sZC0yNCk7XG5cbldoZW4gdXNlZCB3aXRob3V0IGEgYnJlYWtwb2ludCBzcGVjaWZpZWQgdGhpcyBtaXhpbiB3aWxsIHByb2R1Y2UgZm9udCBwcm9wZXJ0aWVzXG53cmFwcGVkIGluIG1lZGlhIHF1ZXJpZXMuIEl0J3MgYSBzaW1wbGUgd2F5IHRvIGFwcGx5IGZ1bGx5IHJlc3BvbnNpdmUgdHlwZSBzdHlsZXNcbnRvIGEgY2xhc3Mgb3IgZWxlbWVudC5cblxuQGluY2x1ZGUgZm9udChib2xkLTI0LCBmdWxsKTtcblxuSWYgYSBicmVha3BvaW50IGlzIHNwZWNpZmllZCB0aGVyZSB3aWxsIGJlIG9ubHkgYSBzaW5nbGUgc2V0IG9mIGZvbnQgcHJvcGVydGllc1xudGhhdCBhcmUgTk9UIHdyYXBwZWQgaW4gYW55IG1lZGlhIHF1ZXJpZXMuXG5cbiovXG5cbkBtaXhpbiBmb250KCRrZXksICRicmVha3BvaW50OiBudWxsKSB7XG4gIEBpZiAkYnJlYWtwb2ludCB7XG4gICAgQGlmIG1hcC1oYXMta2V5KG1hcC1nZXQoJHR5cG9ncmFwaHksIHJlc3BvbnNpdmUpLCAkYnJlYWtwb2ludCkge1xuICAgICAgJHJlc3BvbnNpdmVUeXBlOiBtYXAtZ2V0KG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgcmVzcG9uc2l2ZSksICRicmVha3BvaW50KSwgJGtleSk7XG4gICAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKCRyZXNwb25zaXZlVHlwZSk7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICAkdHlwZWZhY2U6IG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgZGVmYXVsdCksICRrZXkpO1xuICAgIEBpbmNsdWRlIHR5cGVTdHlsZXMoJHR5cGVmYWNlKTtcbiAgICBAZWFjaCAkYnJlYWtwb2ludEtleSwgJGJyZWFrcG9pbnRWYWwgaW4gJGJyZWFrcG9pbnRzIHtcbiAgICAgIEBpZiBtYXAtaGFzLWtleShtYXAtZ2V0KCR0eXBvZ3JhcGh5LCByZXNwb25zaXZlKSwgJGJyZWFrcG9pbnRLZXkpIHtcblxuICAgICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQoJGJyZWFrcG9pbnRWYWwpIHtcbiAgICAgICAgICAkcmVzcG9uc2l2ZVR5cGU6IG1hcC1nZXQobWFwLWdldChtYXAtZ2V0KCR0eXBvZ3JhcGh5LCByZXNwb25zaXZlKSwgJGJyZWFrcG9pbnRLZXkpLCAka2V5KTtcbiAgICAgICAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKCRyZXNwb25zaXZlVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKlxuXG4gIGNvbG9yKHllbGxvdykgc2luZ2xlIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGRhcmsgY29sb3JzXG4gIGNvbG9yKGxpZ2h0LCB5ZWxsb3cpIHJldHVybnMgbGlnaHQgeWVsbG93XG5cbiovXG5AZnVuY3Rpb24gY29sb3IoJGNvbG9yLWNhdGVnb3J5LCAkY29sb3ItbmFtZTpudWxsKSB7XG4gIC8vIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbnVsbCB0aGVyZSBzaG91bGQgYmUgYSBjb2xvciBhcyB0aGUgZmlyc3QgYXJndW1lbnRcbiAgQGlmICgkY29sb3ItbmFtZSAhPSBudWxsKSB7XG4gICAgLy8gbWFwIGluY2VwdGlvblxuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRjb2xvci1jYXRlZ29yeSksICRjb2xvci1uYW1lKTtcbiAgfSBAZWxzZSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgZGFyayksICRjb2xvci1uYW1lKTtcbiAgfVxuXG4gIEB3YXJuIFwiQ29sb3IgJyN7JGNvbG9yLWNhdGVnb3J5fScgJyN7JGNvbG9yLW5hbWV9JyBub3QgZm91bmQgaW4gJGNvbG9yc1wiO1xufVxuXG4vKiByb3VuZGVkIGNvcm5lcnNcbiAgdXNhZ2U6IGJvcmRlci1yYWRpdXMoIGJhc2VsaW5lKCBuICkgKVxuKi9cbkBtaXhpbiBib3JkZXItcmFkaXVzKCRyYWRpdXMpIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAkcmFkaXVzO1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OyAgLyogc3RvcHMgYmcgY29sb3IgZnJvbSBsZWFraW5nIG91dHNpZGUgdGhlIGJvcmRlcjogKi9cbn1cblxuLypcblxuaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9zYXNzL21haW50YWluLWFzcGVjdC1yYXRpby1taXhpbi9cblxuVGhlIG1peGluIGFzc3VtZXMgeW91J2xsIGJlIG5lc3RpbmcgYW4gZWxlbWVudCB3aXRoIHRoZSBjbGFzcyBvZiBjb250ZW50IGluc2lkZSB5b3VyIGluaXRpYWwgYmxvY2tcblxuPGRpdiBjbGFzcz1cInNpeHRlZW4tbmluZVwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgIGluc2VydCBjb250ZW50IGhlcmVcbiAgICB0aGlzIHdpbGwgbWFpbnRhaW4gYSAxNjo5IGFzcGVjdCByYXRpb1xuICA8L2Rpdj5cbjwvZGl2PlxuXG4qL1xuXG5AbWl4aW4gYXNwZWN0LXJhdGlvKCR3aWR0aCwgJGhlaWdodCkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICY6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmctdG9wOiAoJGhlaWdodCAvICR3aWR0aCkgKiAxMDAlO1xuICB9XG4gID4gLmNvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9jb3JlL3N0eWxlL19taXhpbi5zY3NzXG4gKiovIiwiLy8gQnJlYWtwb2ludCBJbnRlZ3JhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4kc3VzeS1tZWRpYTogKCkgIWRlZmF1bHQ7XG4kc3VzeS1tZWRpYS1mYWxsYmFjazogZmFsc2UgIWRlZmF1bHQ7XG5cbiRfc3VzeS1tZWRpYS1jb250ZXh0OiAoKTtcblxuXG4vLyBTdXN5IEJyZWFrcG9pbnRcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hhbmdlIGdyaWRzIGF0IGRpZmZlcmVudCBtZWRpYSBxdWVyeSBicmVha3BvaW50cy5cbi8vIC0gJHF1ZXJ5ICAgICA6IDxtaW4td2lkdGg+IFs8bWF4LXdpZHRoPl0gfCA8cHJvcGVydHk+IDx2YWx1ZT4gfCA8bWFwPlxuLy8gLSAkbGF5b3V0ICAgIDogPHNldHRpbmdzPlxuLy8gLSAkbm8tcXVlcnkgIDogPGJvb2xlYW4+IHwgPHNlbGVjdG9yPlxuQG1peGluIHN1c3ktYnJlYWtwb2ludChcbiAgJHF1ZXJ5LFxuICAkbGF5b3V0OiBmYWxzZSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtcm91dGVyKCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgQGlmICRsYXlvdXQge1xuICAgICAgQGluY2x1ZGUgd2l0aC1sYXlvdXQoJGxheW91dCkge1xuICAgICAgICBAY29udGVudDtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFN1c3kgTWVkaWFcbi8vIC0tLS0tLS0tLS1cbi8vIC0gJHF1ZXJ5OiA8bWluLXdpZHRoPiBbPG1heC13aWR0aD5dIHwgPHByb3BlcnR5PiA8dmFsdWU+XG4vLyAtICRuby1xdWVyeTogPGJvb2xlYW4+IHwgPHNlbGVjdG9yPlxuQG1peGluIHN1c3ktbWVkaWEoXG4gICRxdWVyeSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gICRvbGQtY29udGV4dDogJF9zdXN5LW1lZGlhLWNvbnRleHQ7XG4gICRuYW1lOiBpZihtYXAtaGFzLWtleSgkc3VzeS1tZWRpYSwgJHF1ZXJ5KSwgJHF1ZXJ5LCBudWxsKTtcbiAgJHF1ZXJ5OiBzdXN5LWdldC1tZWRpYSgkcXVlcnkpO1xuICAkcXVlcnk6IHN1c3ktcGFyc2UtbWVkaWEoJHF1ZXJ5KTtcblxuICBAaW5jbHVkZSBzdXN5LW1lZGlhLWNvbnRleHQoJHF1ZXJ5LCAkbmFtZSk7XG5cbiAgQGlmICRuby1xdWVyeSBhbmQgdHlwZS1vZigkbm8tcXVlcnkpICE9IHN0cmluZyB7XG4gICAgQGNvbnRlbnQ7XG4gIH0gQGVsc2Uge1xuICAgIEBtZWRpYSAje3N1c3ktcmVuZGVyLW1lZGlhKCRxdWVyeSl9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgIEBpZiB0eXBlLW9mKCRuby1xdWVyeSkgPT0gc3RyaW5nIHtcbiAgICAgICN7JG5vLXF1ZXJ5fSAmIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1jb250ZXh0KCRvbGQtY29udGV4dCwgJGNsZWFuOiB0cnVlKTtcbn1cblxuXG4vLyBNZWRpYSBSb3V0ZXJcbi8vIC0tLS0tLS0tLS0tLVxuLy8gUm91dCBtZWRpYSBhcmd1bWVudHMgdG8gdGhlIGNvcnJlY3QgbWl4aW4uXG5AbWl4aW4gc3VzeS1tZWRpYS1yb3V0ZXIoXG4gICRxdWVyeSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYnJlYWtwb2ludCwgKG1peGluOiBicmVha3BvaW50KSwgJHdhcm46IGZhbHNlKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkcXVlcnksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBzdXN5LW1lZGlhKCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBVcGRhdGUgQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gU2V0IHRoZSBuZXcgbWVkaWEgY29udGV4dFxuQG1peGluIHN1c3ktbWVkaWEtY29udGV4dChcbiAgJHF1ZXJ5LFxuICAkbmFtZTogbnVsbCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRxdWVyeTogbWFwLW1lcmdlKChuYW1lOiAkbmFtZSksICRxdWVyeSk7XG5cbiAgQGlmICRjbGVhbiB7XG4gICAgJF9zdXN5LW1lZGlhLWNvbnRleHQ6ICRxdWVyeSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkX3N1c3ktbWVkaWEtY29udGV4dDogbWFwLW1lcmdlKCRfc3VzeS1tZWRpYS1jb250ZXh0LCAkcXVlcnkpICFnbG9iYWw7XG4gIH1cbn1cblxuXG4vLyBNZWRpYSBDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIGZ1bGwgbWVkaWEgY29udGV4dCwgb3IgYSBzaW5nbGUgbWVkaWEgcHJvcGVydHkgKGUuZy4gbWluLXdpZHRoKVxuQGZ1bmN0aW9uIHN1c3ktbWVkaWEtY29udGV4dChcbiAgJHByb3BlcnR5OiBmYWxzZVxuKSB7XG4gIEBpZiAkcHJvcGVydHkge1xuICAgIEByZXR1cm4gbWFwLWdldCgkX3N1c3ktbWVkaWEtY29udGV4dCwgJHByb3BlcnR5KTtcbiAgfSBAZWxzZSB7XG4gICAgQHJldHVybiAkX3N1c3ktbWVkaWEtY29udGV4dDtcbiAgfVxufVxuXG5cbi8vIEdldCBNZWRpYVxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBuYW1lZCBtZWRpYS1xdWVyeSBmcm9tICRzdXN5LW1lZGlhLlxuLy8gLSAkbmFtZTogPGtleT5cbkBmdW5jdGlvbiBzdXN5LWdldC1tZWRpYShcbiAgJG5hbWVcbikge1xuICBAaWYgbWFwLWhhcy1rZXkoJHN1c3ktbWVkaWEsICRuYW1lKSB7XG4gICAgJG1hcC12YWx1ZTogbWFwLWdldCgkc3VzeS1tZWRpYSwgJG5hbWUpO1xuICAgIEBpZiAoJG5hbWUgPT0gJG1hcC12YWx1ZSkge1xuICAgICAgJG5hbWU6ICRtYXAtdmFsdWU7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbmFtZTogc3VzeS1nZXQtbWVkaWEoJG1hcC12YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmFtZTtcbn1cblxuXG4vLyBSZW5kZXIgTWVkaWFcbi8vIC0tLS0tLS0tLS0tLVxuLy8gQnVpbGQgYSBtZWRpYS1xdWVyeSBzdHJpbmcgZnJvbSB2YXJpb3VzIG1lZGlhIHNldHRpbmdzXG5AZnVuY3Rpb24gc3VzeS1yZW5kZXItbWVkaWEoXG4gICRxdWVyeVxuKSB7XG4gICRvdXRwdXQ6IG51bGw7XG4gIEBlYWNoICRwcm9wZXJ0eSwgJHZhbHVlIGluICRxdWVyeSB7XG4gICAgJHN0cmluZzogbnVsbDtcblxuICAgIEBpZiAkcHJvcGVydHkgPT0gbWVkaWEge1xuICAgICAgJHN0cmluZzogJHZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHN0cmluZzogJygjeyRwcm9wZXJ0eX06ICN7JHZhbHVlfSknO1xuICAgIH1cblxuICAgICRvdXRwdXQ6IGlmKCRvdXRwdXQsICcjeyRvdXRwdXR9IGFuZCAjeyRzdHJpbmd9JywgJHN0cmluZyk7XG4gIH1cblxuICBAcmV0dXJuICRvdXRwdXQ7XG59XG5cblxuLy8gUGFyc2UgTWVkaWFcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gcGFyc2VkIG1lZGlhLXF1ZXJ5IHNldHRpbmdzIGJhc2VkIG9uIHNob3J0aGFuZFxuQGZ1bmN0aW9uIHN1c3ktcGFyc2UtbWVkaWEoXG4gICRxdWVyeVxuKSB7XG4gICRtcTogbnVsbDtcbiAgQGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBtYXAge1xuICAgICRtcTogJHF1ZXJ5O1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBudW1iZXIge1xuICAgICRtcTogKG1pbi13aWR0aDogJHF1ZXJ5KTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbGlzdCBhbmQgbGVuZ3RoKCRxdWVyeSkgPT0gMiB7XG4gICAgQGlmIHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09IG51bWJlciB7XG4gICAgICAkbXE6IChcbiAgICAgICAgbWluLXdpZHRoOiBtaW4oJHF1ZXJ5Li4uKSxcbiAgICAgICAgbWF4LXdpZHRoOiBtYXgoJHF1ZXJ5Li4uKSxcbiAgICAgICk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbXE6IChudGgoJHF1ZXJ5LCAxKTogbnRoKCRxdWVyeSwgMikpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgJG1xOiAobWVkaWE6ICcjeyRxdWVyeX0nKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1xO1xufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYnJlYWtwb2ludC1wbHVnaW4uc2Nzc1xuICoqLyIsIkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2JyZWFrcG9pbnRzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvbW90aW9uLmpzb24nO1xuQGltcG9ydCAnY29yZS9zdHlsZS91dGlsaXR5L19ob3Zlcic7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL2dyaWQnO1xuQGltcG9ydCAnY29yZS9zdHlsZS9taXhpbic7XG5cbiR0cmFuc2l0aW9uVGltaW5nOiBtYXAtZ2V0KCR0cmFuc2l0aW9ucywgaG92ZXItdGltaW5nKTtcbiR0cmFuc2l0aW9uRWFzaW5nOiBtYXAtZ2V0KCR0cmFuc2l0aW9ucywgaG92ZXItZWFzaW5nKTtcblxuLnRvcGljLXBhZ2UgLm5hdiB7XG4gIC5hY3RpdmUtbGluayB7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgLy8gT24gZGVza3RvcCwgd2UgZG9uJ3Qgd2FudCB0aGUgYWN0aXZlIGxpbmsgdG8gYmUgY2xpY2thYmxlXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIC8vIElFMTEgbmVlZHMgbGlua3MgdG8gYmUgYmxvY2svaW5saW5lLWJsb2NrIHRvIHVzZSBwb2ludGVyIGV2ZW50c1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgfVxufVxuXG4ubmF2IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBtYXJnaW46IGF1dG87XG4gIG1heC13aWR0aDogMTYwMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBiYXNlbGluZSg0KTtcbiAgei1pbmRleDogMTE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gICYuc3RpY2t5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gIH1cbiAgJi0td3JhcHBlciB7XG4gICAgcGFkZGluZzogYmFzZWxpbmUoMSkgYmFzZWxpbmUoMik7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgcGFkZGluZzogYmFzZWxpbmUoMSkgYmFzZWxpbmUoNS8zKTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICB9XG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG4gICYudHJhbnNwYXJlbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gICYuYWN0aXZlIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIGhlaWdodDogYmFzZWxpbmUoNCk7XG4gICAgfVxuICAgICYudHJhbnNwYXJlbnQge1xuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgLm5hdi0tbWVudSB7XG4gICAgICB0b3A6IGJhc2VsaW5lKDUpO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTRyZW0pO1xuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICBjbGVhcjogbm9uZTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIH1cbiAgICB9XG4gICAgLnJlZ2lvbi1zZWxlY3Rvci1tb2JpbGUge1xuICAgICAgLnJlZ2lvbi1zZWxlY3RvciB7XG4gICAgICAgIC5jdXJyZW50LXJlZ2lvbiB7XG4gICAgICAgICAgQGluY2x1ZGUgdHlwZVN0eWxlcyhtYXAtZ2V0KG1hcC1nZXQoJHR5cG9ncmFwaHksIGRlZmF1bHQpLCBib2xkLTE0KSk7XG4gICAgICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKSAhaW1wb3J0YW50O1xuICAgICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHR5cGVTdHlsZXMobWFwLWdldChtYXAtZ2V0KCR0eXBvZ3JhcGh5LCBkZWZhdWx0KSwgcm9tYW4tMTYpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAubmF2LS1oZWFkZXItbGVmdCB7XG4gICAgICAubmF2LS1oZWFkZXItdGl0bGUge1xuICAgICAgICAubmF2LWljb24ge1xuICAgICAgICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4MGRlZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgJi0taGVhZGVyLWxlZnQge1xuICAgIC5uYXYtLWhlYWRlci10aXRsZSB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIC5sb2dvLXRpdGxlIHtcbiAgICAgICAgJGNvbG9yUHJvcGVydHk6IHdoaXRlO1xuXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgICAgIC5sb2dvIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiBiYXNlbGluZSgxKTtcblxuICAgICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogYmFzZWxpbmUoNC8zKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICA+IHN2ZyB7XG4gICAgICAgICAgICB3aWR0aDogYmFzZWxpbmUoMik7XG4gICAgICAgICAgICBoZWlnaHQ6IGJhc2VsaW5lKDIpO1xuICAgICAgICAgICAgZmlsbDogY29sb3IobmV1dHJhbCwgJGNvbG9yUHJvcGVydHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLm5hdi1pY29uIHtcbiAgICAgICAgJGNvbG9yUHJvcGVydHk6IHdoaXRlO1xuXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogYmFzZWxpbmUoMi8zKTtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNXMgY3ViaWMtYmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG5cbiAgICAgICAgJjpob3ZlciA+IHN2ZyB7XG4gICAgICAgICAgJGhvdmVySW50ZXJhY3RpdmVQcm9wczogbWFwLWdldChtYXAtZ2V0KG1hcC1nZXQoJG5ldXRyYWxDb2xvckludGVyYWN0aW9uLCBob3ZlciksICRjb2xvclByb3BlcnR5KSwgb3BhY2l0eSk7XG4gICAgICAgICAgb3BhY2l0eTogJGhvdmVySW50ZXJhY3RpdmVQcm9wcztcbiAgICAgICAgfVxuXG4gICAgICAgICY6YWN0aXZlID4gc3ZnIHtcbiAgICAgICAgICAkYWN0aXZlSW50ZXJhY3RpdmVQcm9wczogbWFwLWdldChtYXAtZ2V0KG1hcC1nZXQoJG5ldXRyYWxDb2xvckludGVyYWN0aW9uLCBhY3RpdmUpLCAkY29sb3JQcm9wZXJ0eSksIG9wYWNpdHkpO1xuICAgICAgICAgIG9wYWNpdHk6ICRhY3RpdmVJbnRlcmFjdGl2ZVByb3BzO1xuICAgICAgICB9XG5cbiAgICAgICAgPiBzdmcge1xuICAgICAgICAgIGZpbGw6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKTtcbiAgICAgICAgICBoZWlnaHQ6IGJhc2VsaW5lKDEpO1xuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgJHRyYW5zaXRpb25UaW1pbmcgJHRyYW5zaXRpb25FYXNpbmc7XG4gICAgICAgICAgd2lkdGg6IGJhc2VsaW5lKDEpO1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gICYtLW1lbnUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGNsZWFyOiBib3RoO1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICBjbGVhcjogbm9uZTtcbiAgICAgIG1hcmdpbi1sZWZ0OiBiYXNlbGluZSgxMC8zKTtcbiAgICB9XG4gICAgLm5hdi0tbW9iaWxlLWl0ZW0ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICAgICZfX2xpc3QtaXRlbSB7XG4gICAgICBwYWRkaW5nOiBiYXNlbGluZSgyKSAwO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgIHBhZGRpbmc6IDAgYmFzZWxpbmUoMikgMCAwO1xuICAgICAgICBib3JkZXItYm90dG9tOiBub25lO1xuICAgICAgfVxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICAgIH1cbiAgICAgID4gYSxcbiAgICAgID4gc3BhbiB7XG4gICAgICAgIEBpbmNsdWRlIHR5cGVTdHlsZXMobWFwLWdldChtYXAtZ2V0KCR0eXBvZ3JhcGh5LCBkZWZhdWx0KSwgYm9sZC0yNCkpO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgZGVmYXVsdCksIHJvbWFuLTE2KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgID4gYS5hY3RpdmUtbGluayB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gICAgICB9XG4gICAgfVxuICAgIC5uYXYtLW1lbnVfX2xpc3QtaXRlbS0tcmVnaW9uLXNlbGVjdG9yIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAmLS1oZWFkZXItcmlnaHQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogYmFzZWxpbmUoMik7XG4gICAgLnJlZ2lvbi1zZWxlY3RvciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAuY3VycmVudC1yZWdpb24ge1xuICAgICAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgZGVmYXVsdCksIGJvbGQtMTQpKTtcbiAgICAgICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKSAhaW1wb3J0YW50O1xuICAgICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgQGluY2x1ZGUgdHlwZVN0eWxlcyhtYXAtZ2V0KG1hcC1nZXQoJHR5cG9ncmFwaHksIGRlZmF1bHQpLCByb21hbi0xNikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIH1cbiAgICB9XG4gICAgLnNlYXJjaCB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IGJhc2VsaW5lKDIpO1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAuc2VhcmNoLWljb24ge1xuICAgICAgICAkY29sb3JQcm9wZXJ0eTogd2hpdGU7XG5cbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICAgICAmOmhvdmVyIHN2ZyB7XG4gICAgICAgICAgJGhvdmVySW50ZXJhY3RpdmVQcm9wczogbWFwLWdldChtYXAtZ2V0KG1hcC1nZXQoJG5ldXRyYWxDb2xvckludGVyYWN0aW9uLCBob3ZlciksICRjb2xvclByb3BlcnR5KSwgb3BhY2l0eSk7XG4gICAgICAgICAgb3BhY2l0eTogJGhvdmVySW50ZXJhY3RpdmVQcm9wcztcbiAgICAgICAgfVxuICAgICAgICAmOmFjdGl2ZSBzdmcge1xuICAgICAgICAgICRhY3RpdmVJbnRlcmFjdGl2ZVByb3BzOiBtYXAtZ2V0KG1hcC1nZXQobWFwLWdldCgkbmV1dHJhbENvbG9ySW50ZXJhY3Rpb24sIGFjdGl2ZSksICRjb2xvclByb3BlcnR5KSwgb3BhY2l0eSk7XG4gICAgICAgICAgb3BhY2l0eTogJGFjdGl2ZUludGVyYWN0aXZlUHJvcHM7XG4gICAgICAgIH1cbiAgICAgICAgc3ZnIHtcbiAgICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgZmlsbDogY29sb3IobmV1dHJhbCwgJGNvbG9yUHJvcGVydHkpO1xuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgJHRyYW5zaXRpb25UaW1pbmcgJHRyYW5zaXRpb25FYXNpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmhpZGRlbiB7XG4gICAgICAucmVnaW9uLXNlbGVjdG9yLFxuICAgICAgLnNlYXJjaCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgICA+IHN2ZyB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSguNik7XG4gICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGZpbGw6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKTtcblxuICAgICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIHRvcDogLThweDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC42KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICA+IHN2ZyB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICByaWdodDogYmFzZWxpbmUoNS8zKTtcbiAgICB9XG4gIH1cbiAgLnJlZ2lvbi1zZWxlY3Rvci1tb2JpbGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDEuNXJlbTtcbiAgICBib3R0b206IGJhc2VsaW5lKDcpO1xuICB9XG59XG5cbi50cmFuc3BhcmVudC1tYXN0aGVhZCB7XG4gIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSg0KTtcbn1cblxuLnNlYXJjaC1wYWdlIHtcbiAgLm5hdiB7XG4gICAgJi0taGVhZGVyLXJpZ2h0IHtcbiAgICAgIC5zZWFyY2gge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLmhpZGRlbiB7XG4gICAgICAgIC5zZWFyY2gge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9jb21wb25lbnRzL3VuaXZlcnNhbC91MDEtbmF2aWdhdGlvbi93ZWJwYWNrL2luZGV4LnNjc3NcbiAqKi8iLCIkdHlwb2dyYXBoeTogKGRlZmF1bHQ6IChib2xkLTE0NDogKHdlaWdodDogNzAwLHNpemU6IDgsbGluZS1oZWlnaHQ6IDgsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTk2OiAod2VpZ2h0OiA3MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtNzI6ICh3ZWlnaHQ6IDcwMCxzaXplOiA1LGxpbmUtaGVpZ2h0OiA1LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tNzI6ICh3ZWlnaHQ6IDQwMCxzaXplOiA1LGxpbmUtaGVpZ2h0OiA1LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC00ODogKHdlaWdodDogNzAwLHNpemU6IDQsbGluZS1oZWlnaHQ6IDQsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi00ODogKHdlaWdodDogNDAwLHNpemU6IDQsbGluZS1oZWlnaHQ6IDQsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTM2OiAod2VpZ2h0OiA3MDAsc2l6ZTogMyxsaW5lLWhlaWdodDogMyx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTM2OiAod2VpZ2h0OiA0MDAsc2l6ZTogMyxsaW5lLWhlaWdodDogMyx0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMjQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAyLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAwLG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTI0OiAod2VpZ2h0OiA0MDAsc2l6ZTogMixsaW5lLWhlaWdodDogMix0cmFja2luZzogMTUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0xNjogKHdlaWdodDogNzAwLHNpemU6IDEuMzMsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTE2OiAod2VpZ2h0OiA0MDAsc2l6ZTogMS4zMyxsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0xNDogKHdlaWdodDogNzAwLHNpemU6IDEuMTYsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDMwLG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTE0OiAod2VpZ2h0OiA0MDAsc2l6ZTogMS4xNixsaW5lLWhlaWdodDogMix0cmFja2luZzogMjUsbWFyZ2luLWJvdHRvbTogMCkpLHJlc3BvbnNpdmU6IChmdWxsOiAoYm9sZC0xNDQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxMixsaW5lLWhlaWdodDogMTIsdHJhY2tpbmc6IC0yMDAsbWFyZ2luLWJvdHRvbTogMCksYm9sZC05NjogKHdlaWdodDogNzAwLHNpemU6IDgsbGluZS1oZWlnaHQ6IDgsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTcyOiAod2VpZ2h0OiA3MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLHJvbWFuLTcyOiAod2VpZ2h0OiA0MDAsc2l6ZTogNixsaW5lLWhlaWdodDogNix0cmFja2luZzogLTI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtNDg6ICh3ZWlnaHQ6IDcwMCxzaXplOiA0LGxpbmUtaGVpZ2h0OiA0LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCkscm9tYW4tNDg6ICh3ZWlnaHQ6IDQwMCxzaXplOiA0LGxpbmUtaGVpZ2h0OiA0LHRyYWNraW5nOiAtMjUsbWFyZ2luLWJvdHRvbTogMCksYm9sZC0zNjogKHdlaWdodDogNzAwLHNpemU6IDMsbGluZS1oZWlnaHQ6IDMsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0zNjogKHdlaWdodDogNDAwLHNpemU6IDMsbGluZS1oZWlnaHQ6IDMsdHJhY2tpbmc6IC0yNSxtYXJnaW4tYm90dG9tOiAwKSxib2xkLTI0OiAod2VpZ2h0OiA3MDAsc2l6ZTogMixsaW5lLWhlaWdodDogMix0cmFja2luZzogMCxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0yNDogKHdlaWdodDogNDAwLHNpemU6IDIsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDE1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMTY6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxLjMzLGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAyNSxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0xNjogKHdlaWdodDogNDAwLHNpemU6IDEuMzMsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApLGJvbGQtMTQ6ICh3ZWlnaHQ6IDcwMCxzaXplOiAxLjE2LGxpbmUtaGVpZ2h0OiAyLHRyYWNraW5nOiAzMCxtYXJnaW4tYm90dG9tOiAwKSxyb21hbi0xNDogKHdlaWdodDogNDAwLHNpemU6IDEuMTYsbGluZS1oZWlnaHQ6IDIsdHJhY2tpbmc6IDI1LG1hcmdpbi1ib3R0b206IDApKSkpO1xuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3ZhcmlhYmxlcy90eXBvZ3JhcGh5Lmpzb25cbiAqKi8iLCIkY29sb3JzOiAoZXh0cmEtZGFyazogKG9yYW5nZTogI0Q4MkUxOCx5ZWxsb3c6ICNGOThFMDAsZ3JlZW46ICMwMDg5NTEsYmx1ZTogIzAwNUZEMSxwdXJwbGU6ICM0RjAyOTkscGluazogI0EwMTc0NCksZGFyazogKG9yYW5nZTogI0Y0NUQyMix5ZWxsb3c6ICNGRkFEMUYsZ3JlZW46ICMxRkI2NTAsYmx1ZTogIzFEQTFGMixwdXJwbGU6ICM3OTRCQzQscGluazogI0UwMjQ1RSksbGlnaHQ6IChvcmFuZ2U6ICNGRjhENTcseWVsbG93OiAjRkZEMDNGLGdyZWVuOiAjNjhFMDkwLGJsdWU6ICM3MUM5RjgscHVycGxlOiAjQTM3Q0VELHBpbms6ICNGNjgwOUEpLGV4dHJhLWxpZ2h0OiAob3JhbmdlOiAjRkZCRTc4LHllbGxvdzogI0ZGRTc2RSxncmVlbjogI0E1RjJBQSxibHVlOiAjOTdFM0ZGLHB1cnBsZTogI0M3QjRGQSxwaW5rOiAjRkZCOEMyKSxuZXV0cmFsOiAoYmxhY2s6ICMxNDE3MUEsZGFyay1ncmF5OiAjNjU3Nzg2LGxpZ2h0LWdyYXk6ICNBQUI4QzIsZXh0cmEtbGlnaHQtZ3JheTogI0NDRDZERCxleHRyYS1leHRyYS1saWdodC1ncmF5OiAjRjVGOEZBLHdoaXRlOiAjRkZGRkZGKSk7XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvdmFyaWFibGVzL2NvbG9ycy5qc29uXG4gKiovIiwiQGltcG9ydCAnY29yZS92YXJpYWJsZXMvY29sb3JzLmpzb24nO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvYnJlYWtwb2ludHMuanNvbic7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL2dyaWQnO1xuQGltcG9ydCAnY29yZS92YXJpYWJsZXMvbW90aW9uLmpzb24nO1xuQGltcG9ydCAnY29yZS9zdHlsZS9taXhpbic7XG5cbiR0cmFuc2l0aW9uRWFzaW5nOiBtYXAtZ2V0KCR0cmFuc2l0aW9ucywgaG92ZXItZWFzaW5nKTtcbiR0cmFuc2l0aW9uVGltaW5nOiBtYXAtZ2V0KCR0cmFuc2l0aW9ucywgaG92ZXItdGltaW5nKTtcblxuLnNlYXJjaC1iYXIge1xuICBtYXJnaW46IGF1dG87XG4gIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSgxKTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkO1xuICB0cmFuc2l0aW9uOiBmaWxsICR0cmFuc2l0aW9uVGltaW5nICR0cmFuc2l0aW9uRWFzaW5nLFxuICAgICAgICAgICAgICBib3JkZXItY29sb3IgJHRyYW5zaXRpb25UaW1pbmcgJHRyYW5zaXRpb25FYXNpbmc7XG5cbiAgc3ZnIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAtMTBweDtcbiAgICB0b3A6IC0xNHB4O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoLjQ4KTtcbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGUoLjc1KTtcbiAgICB9XG4gIH1cblxuICAuY2xvc2Utc3ZnLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICZfX2lucHV0IHtcbiAgICBAaW5jbHVkZSBmb250KGJvbGQtMjQsIGZ1bGwpO1xuICAgIHdpZHRoOiA5NSU7XG4gICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICBAaW5jbHVkZSBmb250KGJvbGQtNDgsIGZ1bGwpO1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICBAaW5jbHVkZSBzcGFuKDEwKTtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBtYXJnaW46IGF1dG87XG4gIH1cbn1cblxuLm5hdl9fc2VhcmNoLW1vZGFsIHtcbiAgei1pbmRleDogMTA7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAtMTAwdmg7XG4gIGhlaWdodDogMTAwdmg7XG4gIHdpZHRoOiAxMDB2dztcblxuICAuc2VhcmNoLWJhciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMjV2aDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICBtYXJnaW46IDAgNi42JTtcblxuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIHRvcDogNTB2aDtcbiAgICB9XG4gIH1cblxuICAmLnNob3duIHtcbiAgICB0b3A6IDA7XG4gIH1cbn1cblxuLnBhZ2UgLm5hdl9fc2VhcmNoLW1vZGFsIHtcbiAgdHJhbnNpdGlvbjogdG9wIC4ycyBlYXNlLWluLW91dDtcbn1cblxuaHRtbC5uby1zY3JvbGwge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4kY2F0ZWdvcnk6IG1hcC1nZXQoJGNvbG9ycywgZXh0cmEtbGlnaHQpO1xuQGVhY2ggJGNvbG9yS2V5LCAkY29sb3IgaW4gJGNhdGVnb3J5IHtcbiAgLnRoZW1lLS0jeyRjb2xvcktleX0gLnNlYXJjaC1iYXJfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICN7JGNvbG9yfTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgLnRoZW1lLS0jeyRjb2xvcktleX0gLnNlYXJjaC1iYXJfX2lucHV0OjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoJGNvbG9yLCAwLjMpO1xuICAgIGNvbG9yOiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgbmV1dHJhbCksIHdoaXRlKTtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay9jb250ZW50L2pjcl9yb290L2FwcHMvY29yZS10d2l0dGVyL2NvbXBvbmVudHMvdW5pdmVyc2FsL3UwNC1zZWFyY2gtYmFyL3dlYnBhY2svaW5kZXguc2Nzc1xuICoqLyIsIi8vIHJlbSBTdXBwb3J0XG4vLyA9PT09PT09PT09PVxuXG4vLyByZW1cbi8vIC0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIG91dHB1dCBkaXJlY3RseS5cbi8vIC0gJHByb3AgIDogPGNzcyBwcm9wZXJ0eT5cbi8vIC0gJHZhbCAgIDogPGNzcyB2YWx1ZT5cbkBtaXhpbiBzdXN5LXJlbShcbiAgJHByb3AsXG4gICR2YWxcbikge1xuICAkX3JlcXM6IChcbiAgICB2YXJpYWJsZTogcmh5dGhtLXVuaXQgcmVtLXdpdGgtcHgtZmFsbGJhY2ssXG4gICAgbWl4aW46IHJlbSxcbiAgKTtcbiAgQGlmIHN1c3ktc3VwcG9ydChyZW0sICRfcmVxcywgJHdhcm46IGZhbHNlKSBhbmQgJHJoeXRobS11bml0ID09IHJlbSB7XG4gICAgQGluY2x1ZGUgcmVtKCRwcm9wLCAkdmFsKTtcbiAgfSBAZWxzZSB7XG4gICAgI3skcHJvcH06ICR2YWw7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19yZW0uc2Nzc1xuICoqLyIsIi8vIFNwYW4gU3ludGF4XG4vLyA9PT09PT09PT09PVxuXG4vLyBTcGFuIFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLVxuLy8gU2V0IGEgc3Bhbm5pbmcgZWxlbWVudCB1c2luZyBzaG9ydGhhbmQgc3ludGF4LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBzcGFuKFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0OiAkc3BhbjtcbiAgJHNwYW46IHBhcnNlLXNwYW4oJHNwYW4pO1xuICAkb3V0cHV0OiBzcGFuLW1hdGgoJHNwYW4pO1xuICAkbmVzdGluZzogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkY2xlYXI6IHN1c3ktZ2V0KGNsZWFyLCAkc3Bhbik7XG5cbiAgJGJveDogc3VzeS1nZXQoYm94LXNpemluZywgJHNwYW4pO1xuICAkY29udGVudC1ib3g6IGlmKHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSAhPSAnYm9yZGVyLWJveCcsIHRydWUsIGZhbHNlKTtcbiAgJGJveDogJGJveCBvciBpZihpcy1pbnNpZGUoJHNwYW4pIGFuZCAkY29udGVudC1ib3gsIGJvcmRlci1ib3gsIG51bGwpO1xuXG4gIEBpZiAkY2xlYXIgPT0gYnJlYWsge1xuICAgIEBpbmNsdWRlIGJyZWFrO1xuICB9IEBlbHNlIGlmICRjbGVhciA9PSBub2JyZWFrIHtcbiAgICBAaW5jbHVkZSBub2JyZWFrO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHNwYW4sICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkYm94KSk7XG4gIEBpbmNsdWRlIGZsb2F0LXNwYW4tb3V0cHV0KCRvdXRwdXQuLi4pO1xuXG4gIEBpZiB2YWxpZC1jb2x1bW5zKCRuZXN0aW5nLCBzaWxlbnQpIHtcbiAgICBAaW5jbHVkZSBuZXN0ZWQoJHNwYW4pIHsgQGNvbnRlbnQ7IH1cbiAgfSBAZWxzZSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8gU3BhbiBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgd2lkdGggb2YgYSBzcGFuLlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBmdW5jdGlvbiBzcGFuKFxuICAkc3BhblxuKSB7XG4gIEByZXR1cm4gZ2V0LXNwYW4td2lkdGgoJHNwYW4pO1xufVxuXG4vLyBTcGFuIE1hdGhcbi8vIC0tLS0tLS0tLVxuLy8gR2V0IGFsbCB0aGUgc3BhbiByZXN1bHRzLlxuLy8gLSAkc3BhbjogPG1hcD5cbkBmdW5jdGlvbiBzcGFuLW1hdGgoXG4gICRzcGFuXG4pIHtcbiAgJG5lc3QgICAgICAgICAgICAgOiBpZihzdXN5LWdldChyb2xlLCAkc3BhbikgPT0gbmVzdCwgdHJ1ZSwgZmFsc2UpO1xuICAkc3BsaXQtbmVzdCAgICAgICA6IGlmKGlzLXNwbGl0KCRzcGFuKSBhbmQgJG5lc3QsIHRydWUsIGZhbHNlKTtcbiAgJGVkZ2UgICAgICAgICAgICAgOiBnZXQtZWRnZSgkc3Bhbik7XG4gICRsb2NhdGlvbiAgICAgICAgIDogZ2V0LWxvY2F0aW9uKCRzcGFuKTtcblxuICAkZmxvYXQgICAgICAgICAgICA6IGZyb207XG4gICRwYWRkaW5nLWJlZm9yZSAgIDogbnVsbDtcbiAgJHBhZGRpbmctYWZ0ZXIgICAgOiBudWxsO1xuICAkbWFyZ2luLWJlZm9yZSAgICA6IG51bGw7XG4gICRtYXJnaW4tYWZ0ZXIgICAgIDogbnVsbDtcblxuICAvLyBjYWxjdWxhdGUgd2lkdGhzXG4gICRzcHJlYWQ6IGluZGV4KG1hcC12YWx1ZXMoJHNwYW4pLCBzcHJlYWQpO1xuICAkc3BhbjogaWYoJHNwbGl0LW5lc3QgYW5kIG5vdCgkc3ByZWFkKSwgbWFwLW1lcmdlKCRzcGFuLCAoc3ByZWFkOiB3aWRlKSksICRzcGFuKTtcbiAgJHdpZHRoOiBnZXQtc3Bhbi13aWR0aCgkc3Bhbik7XG4gICRndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG5cbiAgLy8gYXBwbHkgZ3V0dGVyc1xuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgQGlmIG5vdChzdXN5LWdldChyb2xlLCAkc3BhbikpIHtcbiAgICAgICRwYWRkaW5nLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKTtcbiAgICAgICRwYWRkaW5nLWFmdGVyOiBtYXAtZ2V0KCRndXR0ZXJzLCBhZnRlcik7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAaWYgbm90KCRzcGxpdC1uZXN0KSB7XG4gICAgICAkbWFyZ2luLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKTtcbiAgICAgICRtYXJnaW4tYWZ0ZXI6IG1hcC1nZXQoJGd1dHRlcnMsIGFmdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBzcGVjaWFsIG1hcmdpbiBoYW5kbGluZ1xuICBAaWYgc3VzeS1nZXQob3V0cHV0LCAkc3BhbikgPT0gaXNvbGF0ZSBhbmQgJGxvY2F0aW9uIHtcbiAgICAkbWFyZ2luLWJlZm9yZTogZ2V0LWlzb2xhdGlvbigkc3Bhbik7XG4gICAgJG1hcmdpbi1hZnRlcjogLTEwMCU7XG4gIH0gQGVsc2UgaWYgJGVkZ2Uge1xuICAgICRpcy1zcGxpdDogaXMtc3BsaXQoJHNwYW4pO1xuICAgICRwb3M6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pO1xuXG4gICAgQGlmICRlZGdlID09IGxhc3Qge1xuICAgICAgJGZsb2F0OiBzdXN5LWdldChsYXN0LWZsb3csICRzcGFuKTtcbiAgICB9XG5cbiAgICBAaWYgbm90KCRpcy1zcGxpdCkge1xuICAgICAgQGlmICRlZGdlID09IGZ1bGwgb3IgKCRlZGdlID09IGZpcnN0IGFuZCAkcG9zID09IGJlZm9yZSkge1xuICAgICAgICAkbWFyZ2luLWJlZm9yZTogMDtcbiAgICAgIH1cbiAgICAgIEBpZiAkZWRnZSA9PSBmdWxsIG9yICgkZWRnZSA9PSBsYXN0IGFuZCAkcG9zID09IGFmdGVyKSB7XG4gICAgICAgICRtYXJnaW4tYWZ0ZXI6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBAcmV0dXJuIChcbiAgICB3aWR0aCAgICAgICAgICAgOiAkd2lkdGgsXG4gICAgZmxvYXQgICAgICAgICAgIDogJGZsb2F0LFxuICAgIG1hcmdpbi1iZWZvcmUgICA6ICRtYXJnaW4tYmVmb3JlLFxuICAgIG1hcmdpbi1hZnRlciAgICA6ICRtYXJnaW4tYWZ0ZXIsXG4gICAgcGFkZGluZy1iZWZvcmUgIDogJHBhZGRpbmctYmVmb3JlLFxuICAgIHBhZGRpbmctYWZ0ZXIgICA6ICRwYWRkaW5nLWFmdGVyLFxuICAgIGZsb3cgICAgICAgICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKSxcbiAgKTtcbn1cblxuLy8gR2V0IFNwYW4gV2lkdGhcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gc3BhbiB3aWR0aC5cbi8vIC0gJHNwYW46IDxtYXA+XG5AZnVuY3Rpb24gZ2V0LXNwYW4td2lkdGgoXG4gICRzcGFuXG4pIHtcbiAgJHNwYW4gICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG5cbiAgJG4gICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkbG9jYXRpb24gOiBnZXQtbG9jYXRpb24oJHNwYW4pO1xuICAkY29sdW1ucyAgOiBzdXN5LWdldChjb2x1bW5zLCAkc3Bhbik7XG4gICRndXR0ZXJzICA6IHN1c3ktZ2V0KGd1dHRlcnMsICRzcGFuKTtcbiAgJHNwcmVhZCAgIDogc3VzeS1nZXQoc3ByZWFkLCAkc3Bhbik7XG5cbiAgJGNvbnRleHQgIDogbnVsbDtcbiAgJHNwYW4tc3VtIDogbnVsbDtcbiAgJHdpZHRoICAgIDogbnVsbDtcblxuICBAaWYgJG4gPT0gJ2Z1bGwnIHtcbiAgICAkcG9zOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKTtcbiAgICAkcm9sZTogc3VzeS1nZXQocm9sZSwgJHNwYW4pO1xuICAgICRuOiBpZigkcG9zID09IHNwbGl0IGFuZCAkcm9sZSAhPSBuZXN0LCBzdXN5LWNvdW50KCRjb2x1bW5zKSwgMTAwJSk7XG4gIH1cblxuICBAaWYgdHlwZS1vZigkbikgIT0gbnVtYmVyIHtcbiAgICBAd2FybiBcIigje3R5cGUtb2YoJG4pfSkgI3skbn0gaXMgbm90IGEgdmFsaWQgc3Bhbi5cIjtcbiAgfSBAZWxzZSBpZiB1bml0bGVzcygkbikge1xuICAgICRjb250ZXh0OiBzdXN5LXN1bSgkY29sdW1ucywgJGd1dHRlcnMsIGlmKGlzLXNwbGl0KCRzcGFuKSwgd2lkZSwgbmFycm93KSk7XG4gICAgJHNwcmVhZDogaWYoaXMtaW5zaWRlKCRzcGFuKSwgJHNwcmVhZCBvciB3aWRlLCAkc3ByZWFkKTtcbiAgICAkc3Bhbi1zdW06IHN1c3koJG4sICRsb2NhdGlvbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkKTtcblxuICAgICRfbWF0aDogc3VzeS1nZXQobWF0aCwgJHNwYW4pO1xuICAgICRfY29sdW1uLXdpZHRoOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRzcGFuKTtcbiAgICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgICAkd2lkdGg6ICRzcGFuLXN1bSAqIHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHdpZHRoOiBwZXJjZW50YWdlKCRzcGFuLXN1bSAvICRjb250ZXh0KTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICR3aWR0aDogJG47XG4gIH1cblxuICBAcmV0dXJuICR3aWR0aDtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3NwYW4uc2Nzc1xuICoqLyIsIi8vIERpcmVjdGlvbiBIZWxwZXJzXG4vLyA9PT09PT09PT09PT09PT09PVxuXG4vLyBTdXN5IEZsb3cgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBQUklWQVRFXG5AaW5jbHVkZSBzdXN5LWRlZmF1bHRzKChcbiAgZmxvdzogbHRyLFxuKSk7XG5cbi8vIEdldCBEaXJlY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgJ2Zyb20nIG9yICd0bycgZGlyZWN0aW9uIG9mIGEgbHRyIG9yIHJ0bCBmbG93LlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuLy8gLSBbJGtleV0gICA6IGZyb20gfCB0b1xuQGZ1bmN0aW9uIGdldC1kaXJlY3Rpb24oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KSxcbiAgJGtleTogZnJvbVxuKSB7XG4gICRyZXR1cm46IGlmKCRmbG93ID09IHJ0bCwgKGZyb206IHJpZ2h0LCB0bzogbGVmdCksIChmcm9tOiBsZWZ0LCB0bzogcmlnaHQpKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyZXR1cm4sICRrZXkpO1xufVxuXG4vLyBUb1xuLy8gLS1cbi8vIFJldHVybiB0aGUgJ3RvJyBkaXJlY3Rpb24gb2YgYSBmbG93XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AZnVuY3Rpb24gdG8oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gIEByZXR1cm4gZ2V0LWRpcmVjdGlvbigkZmxvdywgdG8pO1xufVxuXG4vLyBGcm9tXG4vLyAtLS0tXG4vLyBSZXR1cm4gdGhlICdmcm9tJyBkaXJlY3Rpb24gb2YgYSBmbG93XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AZnVuY3Rpb24gZnJvbShcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgQHJldHVybiBnZXQtZGlyZWN0aW9uKCRmbG93LCBmcm9tKTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vY29udGVudC9qY3Jfcm9vdC9hcHBzL2NvcmUtdHdpdHRlci9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2RpcmVjdGlvbi5zY3NzXG4gKiovIiwiLy8gR3V0dGVyIFN5bnRheFxuLy8gPT09PT09PT09PT09PVxuXG5cbi8vIEd1dHRlcnNcbi8vIC0tLS0tLS1cbi8vIFNldCBndXR0ZXJzIG9uIGFuIGVsZW1lbnQuXG4vLyAtIFskc3Bhbl0gICA6IDxzZXR0aW5ncz5cbkBtaXhpbiBndXR0ZXJzKFxuICAkc3BhbjogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogcGFyc2UtZ3V0dGVycygkc3Bhbik7XG4gICRfZ3V0dGVycyA6IGdldC1ndXR0ZXJzKCRzcGFuKTtcblxuICAkX291dHB1dDogKFxuICAgIGJlZm9yZTogbWFwLWdldCgkX2d1dHRlcnMsIGJlZm9yZSksXG4gICAgYWZ0ZXI6IG1hcC1nZXQoJF9ndXR0ZXJzLCBhZnRlciksXG4gICAgZmxvdzogc3VzeS1nZXQoZmxvdywgJHNwYW4pLFxuICApO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChndXR0ZXJzLCAkaW5zcGVjdCk7XG5cbiAgQGlmIGlzLWluc2lkZSgkc3Bhbikge1xuICAgIEBpbmNsdWRlIHBhZGRpbmctb3V0cHV0KCRfb3V0cHV0Li4uKTtcbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgbWFyZ2luLW91dHB1dCgkX291dHB1dC4uLik7XG4gIH1cbn1cblxuQG1peGluIGd1dHRlcihcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgQGluY2x1ZGUgZ3V0dGVycygkc3Bhbik7XG59XG5cblxuLy8gR3V0dGVyXG4vLyAtLS0tLS1cbi8vIFJldHVybiB0aGUgd2lkdGggb2YgYSBndXR0ZXIuXG4vLyAtIFskc3Bhbl0gICA6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBndXR0ZXIoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gICRzcGFuOiBwYXJzZS1ndXR0ZXJzKCRzcGFuKTtcblxuICAkX2d1dHRlcnM6IGdldC1ndXR0ZXJzKCRzcGFuKTtcbiAgJF9ndXR0ZXJzOiBtYXAtZ2V0KCRfZ3V0dGVycywgYmVmb3JlKSBvciBtYXAtZ2V0KCRfZ3V0dGVycywgYWZ0ZXIpO1xuXG4gIEByZXR1cm4gJF9ndXR0ZXJzO1xufVxuXG5AZnVuY3Rpb24gZ3V0dGVycyhcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgQHJldHVybiBndXR0ZXIoJHNwYW4pO1xufVxuXG5cbi8vIEdldCBHdXR0ZXIgV2lkdGhcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBndXR0ZXIgd2lkdGguXG4vLyAtIFskY29udGV4dF06IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGdldC1ndXR0ZXItd2lkdGgoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRjb250ZXh0ICA6IHBhcnNlLWd1dHRlcnMoJGNvbnRleHQpO1xuXG4gICRfZ3V0dGVycyA6IHN1c3ktZ2V0KGd1dHRlcnMsICRjb250ZXh0KTtcbiAgJF9ndXR0ZXIgIDogc3VzeS1nZXQoZ3V0dGVyLW92ZXJyaWRlLCAkY29udGV4dCk7XG5cbiAgQGlmICRfZ3V0dGVycyBhbmQgKCRfZ3V0dGVycyA+IDApIGFuZCBub3QoJF9ndXR0ZXIpIHtcbiAgICAkX2NvbHVtbi13aWR0aDogc3VzeS1nZXQoY29sdW1uLXdpZHRoLCAkY29udGV4dCk7XG4gICAgJF9tYXRoOiBndXR0ZXItbWF0aCgkY29udGV4dCk7XG4gICAgQGlmICRfbWF0aCA9PSBzdGF0aWMge1xuICAgICAgJF9ndXR0ZXI6ICRfZ3V0dGVycyAqIHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJF9jb2x1bW5zIDogc3VzeS1nZXQoY29sdW1ucywgJGNvbnRleHQpO1xuICAgICAgJF9zcHJlYWQgIDogaWYoaXMtc3BsaXQoJGNvbnRleHQpLCB3aWRlLCBzdXN5LWdldChzcHJlYWQsICRjb250ZXh0KSk7XG4gICAgICAkX2d1dHRlciAgOiBwZXJjZW50YWdlKCRfZ3V0dGVycyAvIHN1c3ktc3VtKCRfY29sdW1ucywgJF9ndXR0ZXJzLCAkX3NwcmVhZCkpO1xuICAgIH1cbiAgfVxuXG4gICRfZ3V0dGVyOiBpZigkX2d1dHRlciA9PSAnbm8tZ3V0dGVycycgb3IgJF9ndXR0ZXIgPT0gJ25vLWd1dHRlcicsIG51bGwsICRfZ3V0dGVyKTtcblxuICBAcmV0dXJuICRfZ3V0dGVyO1xufVxuXG5cbi8vIEdldCBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGJlZm9yZSBhbmQgYWZ0ZXIgZ3V0dGVyIHZhbHVlcy5cbi8vIC0gWyRjb250ZXh0XTogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ2V0LWd1dHRlcnMoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRjb250ZXh0ICAgICAgICAgICAgOiBwYXJzZS1ndXR0ZXJzKCRjb250ZXh0KTtcblxuICAkX2d1dHRlci1wb3NpdGlvbiAgIDogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCk7XG4gICRfZ3V0dGVyICAgICAgICAgICAgOiBnZXQtZ3V0dGVyLXdpZHRoKCRjb250ZXh0KTtcblxuICAkX3JldHVybiAgICAgICAgICAgIDogKGJlZm9yZTogbnVsbCwgYWZ0ZXI6IG51bGwpO1xuXG4gIEBpZiBpcy1zcGxpdCgkY29udGV4dCkgYW5kICRfZ3V0dGVyIHtcbiAgICAkX2d1dHRlcjogJF9ndXR0ZXIgLyAyO1xuICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChiZWZvcmU6ICRfZ3V0dGVyLCBhZnRlcjogJF9ndXR0ZXIpKTtcbiAgfSBAZWxzZSB7XG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKCRfZ3V0dGVyLXBvc2l0aW9uOiAkX2d1dHRlcikpO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBJcyBJbnNpZGVcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJucyB0cnVlIGlmIGd1dHRlcnMgYXJlIGluc2lkZS5cbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBpcy1pbnNpZGUoXG4gICRjb250ZXh0XG4pIHtcbiAgJF9pbnNpZGU6IGluc2lkZSBpbnNpZGUtc3RhdGljO1xuICAkX2d1dHRlci1wb3NpdGlvbjogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCk7XG5cbiAgQHJldHVybiBpZihpbmRleCgkX2luc2lkZSwgJF9ndXR0ZXItcG9zaXRpb24pLCB0cnVlLCBmYWxzZSk7XG59XG5cblxuLy8gSXMgU3BsaXRcbi8vIC0tLS0tLS0tXG4vLyBSZXR1cm5zIHRydWUgaWYgZ3V0dGVycyBhcmUgc3BsaXQuXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gaXMtc3BsaXQoXG4gICRjb250ZXh0XG4pIHtcbiAgJF9zcGxpdDogc3BsaXQgaW5zaWRlIGluc2lkZS1zdGF0aWM7XG4gICRfZ3V0dGVyLXBvc2l0aW9uOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcblxuICBAcmV0dXJuIGlmKGluZGV4KCRfc3BsaXQsICRfZ3V0dGVyLXBvc2l0aW9uKSwgdHJ1ZSwgZmFsc2UpO1xufVxuXG5cbi8vIEd1dHRlciBNYXRoXG4vLyAtLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSBtYXRoIHRvIHVzZSBmb3IgZ3V0dGVyIGNhbGN1bGF0aW9uc1xuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGd1dHRlci1tYXRoKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkX3JldHVybiAgOiBzdXN5LWdldChtYXRoLCAkY29udGV4dCk7XG4gICRfcmV0dXJuICA6IGlmKHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpID09IGluc2lkZS1zdGF0aWMsIHN0YXRpYywgJF9yZXR1cm4pO1xuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ndXR0ZXJzLnNjc3NcbiAqKi8iLCJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9jb2xvcnMuanNvbic7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL2dyaWQnO1xuXG5AaW1wb3J0ICdjb3JlL3N0eWxlL21peGluJztcblxuLmZvb3RlciB7XG4gIG1hcmdpbi10b3A6IGJhc2VsaW5lKDIpO1xuXG4gICZfX3JvdyB7XG4gICAgZmxvYXQ6IGNsZWFyO1xuICAgIHBhZGRpbmctYm90dG9tOiBiYXNlbGluZSgzKTtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgcGFkZGluZy10b3A6IGJhc2VsaW5lKDMpO1xuICAgIH1cbiAgfVxuXG4gICYtY29sIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICZfX2xpc3Qge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBhbGw7XG4gICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAuM3M7XG4gICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuICAgICAgbWF4LWhlaWdodDogMHB4O1xuXG4gICAgICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsIGZ1bGwpKSB7XG4gICAgICAgIHBhZGRpbmctdG9wOiBiYXNlbGluZSgyKTtcbiAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19wYXJlbnQge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBtYXJnaW46IGJhc2VsaW5lKDEpIDA7XG5cbiAgICAgIC5pY29uLWNvbnRhaW5lciB7XG4gICAgICAgIHdpZHRoOiA1MCU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgaGVpZ2h0OiBiYXNlbGluZSgxKTtcbiAgICAgICAgICB3aWR0aDogYmFzZWxpbmUoMSk7XG4gICAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYWxsO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IC4zcztcbiAgICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyO1xuXG4gICAgICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgIGNvbG9yOiBjb2xvcihuZXV0cmFsLCB3aGl0ZSk7XG4gICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fbGluayxcbiAgICAmX19mb290bm90ZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX2xpbmsge1xuICAgICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMik7XG5cbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19mb290bm90ZSB7XG4gICAgICBoZWlnaHQ6IGJhc2VsaW5lKDEpO1xuICAgICAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMik7XG5cbiAgICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICAgIG1hcmdpbi1ib3R0b206IG5vbmU7XG4gICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgICB3aWR0aDogMjAlO1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludChtYXAtZ2V0KCRicmVha3BvaW50cywgZnVsbCkpIHtcbiAgICAgbWFyZ2luLXRvcDogYmFzZWxpbmUoMyk7XG4gIH1cbn1cblxuLm9wZW4tYWNjb3JkaW9uIHtcbiAgLmZvb3Rlci1jb2xfX3BhcmVudCB7XG4gICAgY29sb3I6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKSAhaW1wb3J0YW50O1xuXG4gICAgLmljb24tY29udGFpbmVyIHtcbiAgICAgIHN2ZyB7XG4gICAgICAgIGZpbGw6IGNvbG9yKG5ldXRyYWwsIHdoaXRlKSAhaW1wb3J0YW50O1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5mb290ZXItY29sX19saW5rIHtcbiAgICBjb2xvcjogY29sb3IobmV1dHJhbCwgd2hpdGUpICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuZm9vdGVyLWNvbF9fbGlzdCB7XG4gICAgbWF4LWhlaWdodDogMzUwcHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL2NvbnRlbnQvamNyX3Jvb3QvYXBwcy9jb3JlLXR3aXR0ZXIvY29tcG9uZW50cy91bml2ZXJzYWwvdTAyLWZvb3Rlci93ZWJwYWNrL2luZGV4LnNjc3NcbiAqKi8iLCJAaW1wb3J0ICcuLi92YXJpYWJsZXMvYnJlYWtwb2ludHMuanNvbic7XG5AaW1wb3J0ICcuLi92YXJpYWJsZXMvdHlwb2dyYXBoeS5qc29uJztcbkBpbXBvcnQgJy4uL3ZhcmlhYmxlcy9jb2xvcnMuanNvbic7XG5cbkBpbXBvcnQgJy4vZ3JpZCc7XG5cbi8vJGJhc2VsaW5lVW5pdDogbWFwLWdldChtYXAtZ2V0KCRncmlkLCBkZXNrdG9wKSwgYmFzZWxpbmUpO1xuJGJhc2VsaW5lVW5pdDogMC43NXJlbTsgLy8gMTJweFxuXG5AbWl4aW4gcmVzcG9uZC10bygkc2l6ZSkge1xuICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQobWFwLWdldCgkYnJlYWtwb2ludHMsICRzaXplKSkge1xuICAgIEBjb250ZW50XG4gIH1cbn1cblxuQG1peGluIHZlcnRpY2FsLWFsaWduIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG5AZnVuY3Rpb24gYmFzZWxpbmUoJG11bHRpcGxpZXI6IDEpIHtcbiAgQHJldHVybiAkYmFzZWxpbmVVbml0ICogJG11bHRpcGxpZXI7XG59XG5cbkBtaXhpbiB0eXBlU3R5bGVzKCR0eXBlZmFjZSkge1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSBMVFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiBtYXAtZ2V0KCR0eXBlZmFjZSwgd2VpZ2h0KTtcbiAgZm9udC1zaXplOiBiYXNlbGluZShtYXAtZ2V0KCR0eXBlZmFjZSwgc2l6ZSkpO1xuICBsaW5lLWhlaWdodDogYmFzZWxpbmUobWFwLWdldCgkdHlwZWZhY2UsIGxpbmUtaGVpZ2h0KSk7XG4gIGxldHRlci1zcGFjaW5nOiAje21hcC1nZXQoJHR5cGVmYWNlLCB0cmFja2luZykgLyAxMDAwfXJlbTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwIDAgYmFzZWxpbmUobWFwLWdldCgkdHlwZWZhY2UsIG1hcmdpbi1ib3R0b20pKSAwO1xufVxuXG4vKlxuXG5mb250IG1peGluXG4ka2V5OiB0eXBlIHN0eWxlIGtleSAoZXguIGJvbGQtMjQgb3Igcm9tYW4tMjQpLiBTZWUgdHlwb2dyYXBoeS5qc29uIGZvciBvcHRpb25zLlxuJGJyZWFrcG9pbnQ6IChvcHRpb25hbCkgYnJlYWtwb2ludCBrZXkgKGV4LiBmdWxsIG9yIHRhYmxldCkuIFNlZSBicmVha3BvaW50cy5qc29uIGZvciBvcHRpb25zLlxuXG5AaW5jbHVkZSBmb250KGJvbGQtMjQpO1xuXG5XaGVuIHVzZWQgd2l0aG91dCBhIGJyZWFrcG9pbnQgc3BlY2lmaWVkIHRoaXMgbWl4aW4gd2lsbCBwcm9kdWNlIGZvbnQgcHJvcGVydGllc1xud3JhcHBlZCBpbiBtZWRpYSBxdWVyaWVzLiBJdCdzIGEgc2ltcGxlIHdheSB0byBhcHBseSBmdWxseSByZXNwb25zaXZlIHR5cGUgc3R5bGVzXG50byBhIGNsYXNzIG9yIGVsZW1lbnQuXG5cbkBpbmNsdWRlIGZvbnQoYm9sZC0yNCwgZnVsbCk7XG5cbklmIGEgYnJlYWtwb2ludCBpcyBzcGVjaWZpZWQgdGhlcmUgd2lsbCBiZSBvbmx5IGEgc2luZ2xlIHNldCBvZiBmb250IHByb3BlcnRpZXNcbnRoYXQgYXJlIE5PVCB3cmFwcGVkIGluIGFueSBtZWRpYSBxdWVyaWVzLlxuXG4qL1xuXG5AbWl4aW4gZm9udCgka2V5LCAkYnJlYWtwb2ludDogbnVsbCkge1xuICBAaWYgJGJyZWFrcG9pbnQge1xuICAgIEBpZiBtYXAtaGFzLWtleShtYXAtZ2V0KCR0eXBvZ3JhcGh5LCByZXNwb25zaXZlKSwgJGJyZWFrcG9pbnQpIHtcbiAgICAgICRyZXNwb25zaXZlVHlwZTogbWFwLWdldChtYXAtZ2V0KG1hcC1nZXQoJHR5cG9ncmFwaHksIHJlc3BvbnNpdmUpLCAkYnJlYWtwb2ludCksICRrZXkpO1xuICAgICAgQGluY2x1ZGUgdHlwZVN0eWxlcygkcmVzcG9uc2l2ZVR5cGUpO1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgJHR5cGVmYWNlOiBtYXAtZ2V0KG1hcC1nZXQoJHR5cG9ncmFwaHksIGRlZmF1bHQpLCAka2V5KTtcbiAgICBAaW5jbHVkZSB0eXBlU3R5bGVzKCR0eXBlZmFjZSk7XG4gICAgQGVhY2ggJGJyZWFrcG9pbnRLZXksICRicmVha3BvaW50VmFsIGluICRicmVha3BvaW50cyB7XG4gICAgICBAaWYgbWFwLWhhcy1rZXkobWFwLWdldCgkdHlwb2dyYXBoeSwgcmVzcG9uc2l2ZSksICRicmVha3BvaW50S2V5KSB7XG5cbiAgICAgICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KCRicmVha3BvaW50VmFsKSB7XG4gICAgICAgICAgJHJlc3BvbnNpdmVUeXBlOiBtYXAtZ2V0KG1hcC1nZXQobWFwLWdldCgkdHlwb2dyYXBoeSwgcmVzcG9uc2l2ZSksICRicmVha3BvaW50S2V5KSwgJGtleSk7XG4gICAgICAgICAgQGluY2x1ZGUgdHlwZVN0eWxlcygkcmVzcG9uc2l2ZVR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLypcblxuICBjb2xvcih5ZWxsb3cpIHNpbmdsZSBhcmd1bWVudCBkZWZhdWx0cyB0byBkYXJrIGNvbG9yc1xuICBjb2xvcihsaWdodCwgeWVsbG93KSByZXR1cm5zIGxpZ2h0IHllbGxvd1xuXG4qL1xuQGZ1bmN0aW9uIGNvbG9yKCRjb2xvci1jYXRlZ29yeSwgJGNvbG9yLW5hbWU6bnVsbCkge1xuICAvLyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG51bGwgdGhlcmUgc2hvdWxkIGJlIGEgY29sb3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50XG4gIEBpZiAoJGNvbG9yLW5hbWUgIT0gbnVsbCkge1xuICAgIC8vIG1hcCBpbmNlcHRpb25cbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkY29sb3ItY2F0ZWdvcnkpLCAkY29sb3ItbmFtZSk7XG4gIH0gQGVsc2Uge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsIGRhcmspLCAkY29sb3ItbmFtZSk7XG4gIH1cblxuICBAd2FybiBcIkNvbG9yICcjeyRjb2xvci1jYXRlZ29yeX0nICcjeyRjb2xvci1uYW1lfScgbm90IGZvdW5kIGluICRjb2xvcnNcIjtcbn1cblxuLyogcm91bmRlZCBjb3JuZXJzXG4gIHVzYWdlOiBib3JkZXItcmFkaXVzKCBiYXNlbGluZSggbiApIClcbiovXG5AbWl4aW4gYm9yZGVyLXJhZGl1cygkcmFkaXVzKSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsgIC8qIHN0b3BzIGJnIGNvbG9yIGZyb20gbGVha2luZyBvdXRzaWRlIHRoZSBib3JkZXI6ICovXG59XG5cbi8qXG5cbmh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvc2Fzcy9tYWludGFpbi1hc3BlY3QtcmF0aW8tbWl4aW4vXG5cblRoZSBtaXhpbiBhc3N1bWVzIHlvdSdsbCBiZSBuZXN0aW5nIGFuIGVsZW1lbnQgd2l0aCB0aGUgY2xhc3Mgb2YgY29udGVudCBpbnNpZGUgeW91ciBpbml0aWFsIGJsb2NrXG5cbjxkaXYgY2xhc3M9XCJzaXh0ZWVuLW5pbmVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICBpbnNlcnQgY29udGVudCBoZXJlXG4gICAgdGhpcyB3aWxsIG1haW50YWluIGEgMTY6OSBhc3BlY3QgcmF0aW9cbiAgPC9kaXY+XG48L2Rpdj5cblxuKi9cblxuQG1peGluIGFzcGVjdC1yYXRpbygkd2lkdGgsICRoZWlnaHQpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAmOmJlZm9yZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29udGVudDogXCJcIjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nLXRvcDogKCRoZWlnaHQgLyAkd2lkdGgpICogMTAwJTtcbiAgfVxuICA+IC5jb250ZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICB9XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL2NvcmUvc3R5bGUvX21peGluLnNjc3NcbiAqKi8iLCJAaW1wb3J0ICdjb3JlL3ZhcmlhYmxlcy9icmVha3BvaW50cy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2NvbG9ycy5qc29uJztcbkBpbXBvcnQgJ2NvcmUvdmFyaWFibGVzL2dyaWQuanNvbic7XG5AaW1wb3J0ICdjb3JlL3N0eWxlL2dyaWQnO1xuQGltcG9ydCAnY29yZS9zdHlsZS9taXhpbic7XG5cbi5Ib2x5R3JhaWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcblxuICAuZm9vdGVyIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICB9XG59XG5cbi5Ib2x5R3JhaWwtYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uZXJyb3Ige1xuICBtYXJnaW4tdG9wOiBiYXNlbGluZSgzKTtcbiAgLy8gTWFyZ2luIGVuc3VyZXMgdGhpcyBzZWN0aW9uIGlzbid0IG92ZXJsYXBwZWQgYnkgdG9wIG5hdlxuICBwYWRkaW5nLWJvdHRvbTogYmFzZWxpbmUoNSk7XG4gIHBhZGRpbmctdG9wOiBiYXNlbGluZSg2KTtcbiAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KG1hcC1nZXQoJGJyZWFrcG9pbnRzLCBmdWxsKSkge1xuICAgICBAaW5jbHVkZSBwdXNoKDMpO1xuICAgIEBpbmNsdWRlIHNwYW4oNyk7XG4gIH1cblxuICArIGRpdiB7XG4gICAgY2xlYXI6IGxlZnQ7XG4gIH1cbn1cblxuLmVycm9yX19kZXNjcmlwdGlvbiB7XG4gIG1hcmdpbi1ib3R0b206IGJhc2VsaW5lKDQpO1xufVxuXG4uZXJyb3JfX21lc3NhZ2Uge1xuICBtYXJnaW4tYm90dG9tOiBiYXNlbGluZSgxKTtcbn1cblxuLmVycm9yX190eXBlIHtcbiAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMSk7XG59XG5cbi5lcnJvcl9fbGluayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIC8vIE5PVEU6IEhhcmQtY29kaW5nICcxMDAwcHgnIGhlcmUgb24gcHVycG9zZSAtIGluc3RlYWQgb2YgdXNpbmcgYW4gZXhpc3RpbmcgYnJlYWtwb2ludFxuICBAaW5jbHVkZSBzdXN5LWJyZWFrcG9pbnQoMTAwMHB4KSB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICB9XG59XG5cbi5lcnJvcl9fbGluazpub3QoOmxhc3QtY2hpbGQpIHtcbiAgbWFyZ2luLWJvdHRvbTogYmFzZWxpbmUoMyk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KDEwMDBweCkge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiBiYXNlbGluZSgxLjUpO1xuICAgIHBhZGRpbmctcmlnaHQ6IGJhc2VsaW5lKDEuNSk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJ25ldXRyYWwnKSwgJ2V4dHJhLWxpZ2h0LWdyYXknKTtcbiAgICAgIGNvbnRlbnQ6ICcgJztcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAtNHB4KTtcbiAgICAgIGxlZnQ6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0ycHg7XG4gICAgICB3aWR0aDogMXB4O1xuICAgIH1cbiAgfVxufVxuXG4ucGFnZS0tZXJyb3Ige1xuICAubmF2LS1oZWFkZXItcmlnaHQgLnNlYXJjaCB7XG4gICAgcGFkZGluZy1sZWZ0OiBiYXNlbGluZSgxKTtcbiAgfVxuXG4gIC5uYXYtLWhlYWRlci1yaWdodC5oaWRkZW4gLnNlYXJjaCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG4ubmF2X19pdGVtIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nLXJpZ2h0OiBiYXNlbGluZSgyKTtcblxuICBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svZXJyb3Iuc2Nzc1xuICoqLyIsIi8vIEJyZWFrcG9pbnQgSW50ZWdyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT1cblxuJHN1c3ktbWVkaWE6ICgpICFkZWZhdWx0O1xuJHN1c3ktbWVkaWEtZmFsbGJhY2s6IGZhbHNlICFkZWZhdWx0O1xuXG4kX3N1c3ktbWVkaWEtY29udGV4dDogKCk7XG5cblxuLy8gU3VzeSBCcmVha3BvaW50XG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIENoYW5nZSBncmlkcyBhdCBkaWZmZXJlbnQgbWVkaWEgcXVlcnkgYnJlYWtwb2ludHMuXG4vLyAtICRxdWVyeSAgICAgOiA8bWluLXdpZHRoPiBbPG1heC13aWR0aD5dIHwgPHByb3BlcnR5PiA8dmFsdWU+IHwgPG1hcD5cbi8vIC0gJGxheW91dCAgICA6IDxzZXR0aW5ncz5cbi8vIC0gJG5vLXF1ZXJ5ICA6IDxib29sZWFuPiB8IDxzZWxlY3Rvcj5cbkBtaXhpbiBzdXN5LWJyZWFrcG9pbnQoXG4gICRxdWVyeSxcbiAgJGxheW91dDogZmFsc2UsXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICBAaW5jbHVkZSBzdXN5LW1lZGlhLXJvdXRlcigkcXVlcnksICRuby1xdWVyeSkge1xuICAgIEBpZiAkbGF5b3V0IHtcbiAgICAgIEBpbmNsdWRlIHdpdGgtbGF5b3V0KCRsYXlvdXQpIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBTdXN5IE1lZGlhXG4vLyAtLS0tLS0tLS0tXG4vLyAtICRxdWVyeTogPG1pbi13aWR0aD4gWzxtYXgtd2lkdGg+XSB8IDxwcm9wZXJ0eT4gPHZhbHVlPlxuLy8gLSAkbm8tcXVlcnk6IDxib29sZWFuPiB8IDxzZWxlY3Rvcj5cbkBtaXhpbiBzdXN5LW1lZGlhKFxuICAkcXVlcnksXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICAkb2xkLWNvbnRleHQ6ICRfc3VzeS1tZWRpYS1jb250ZXh0O1xuICAkbmFtZTogaWYobWFwLWhhcy1rZXkoJHN1c3ktbWVkaWEsICRxdWVyeSksICRxdWVyeSwgbnVsbCk7XG4gICRxdWVyeTogc3VzeS1nZXQtbWVkaWEoJHF1ZXJ5KTtcbiAgJHF1ZXJ5OiBzdXN5LXBhcnNlLW1lZGlhKCRxdWVyeSk7XG5cbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1jb250ZXh0KCRxdWVyeSwgJG5hbWUpO1xuXG4gIEBpZiAkbm8tcXVlcnkgYW5kIHR5cGUtb2YoJG5vLXF1ZXJ5KSAhPSBzdHJpbmcge1xuICAgIEBjb250ZW50O1xuICB9IEBlbHNlIHtcbiAgICBAbWVkaWEgI3tzdXN5LXJlbmRlci1tZWRpYSgkcXVlcnkpfSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICBAaWYgdHlwZS1vZigkbm8tcXVlcnkpID09IHN0cmluZyB7XG4gICAgICAjeyRuby1xdWVyeX0gJiB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtY29udGV4dCgkb2xkLWNvbnRleHQsICRjbGVhbjogdHJ1ZSk7XG59XG5cblxuLy8gTWVkaWEgUm91dGVyXG4vLyAtLS0tLS0tLS0tLS1cbi8vIFJvdXQgbWVkaWEgYXJndW1lbnRzIHRvIHRoZSBjb3JyZWN0IG1peGluLlxuQG1peGluIHN1c3ktbWVkaWEtcm91dGVyKFxuICAkcXVlcnksXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJyZWFrcG9pbnQsIChtaXhpbjogYnJlYWtwb2ludCksICR3YXJuOiBmYWxzZSkge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkbm8tcXVlcnkpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1tZWRpYSgkcXVlcnksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gVXBkYXRlIENvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFNldCB0aGUgbmV3IG1lZGlhIGNvbnRleHRcbkBtaXhpbiBzdXN5LW1lZGlhLWNvbnRleHQoXG4gICRxdWVyeSxcbiAgJG5hbWU6IG51bGwsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkcXVlcnk6IG1hcC1tZXJnZSgobmFtZTogJG5hbWUpLCAkcXVlcnkpO1xuXG4gIEBpZiAkY2xlYW4ge1xuICAgICRfc3VzeS1tZWRpYS1jb250ZXh0OiAkcXVlcnkgIWdsb2JhbDtcbiAgfSBAZWxzZSB7XG4gICAgJF9zdXN5LW1lZGlhLWNvbnRleHQ6IG1hcC1tZXJnZSgkX3N1c3ktbWVkaWEtY29udGV4dCwgJHF1ZXJ5KSAhZ2xvYmFsO1xuICB9XG59XG5cblxuLy8gTWVkaWEgQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSBmdWxsIG1lZGlhIGNvbnRleHQsIG9yIGEgc2luZ2xlIG1lZGlhIHByb3BlcnR5IChlLmcuIG1pbi13aWR0aClcbkBmdW5jdGlvbiBzdXN5LW1lZGlhLWNvbnRleHQoXG4gICRwcm9wZXJ0eTogZmFsc2Vcbikge1xuICBAaWYgJHByb3BlcnR5IHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJF9zdXN5LW1lZGlhLWNvbnRleHQsICRwcm9wZXJ0eSk7XG4gIH0gQGVsc2Uge1xuICAgIEByZXR1cm4gJF9zdXN5LW1lZGlhLWNvbnRleHQ7XG4gIH1cbn1cblxuXG4vLyBHZXQgTWVkaWFcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgbmFtZWQgbWVkaWEtcXVlcnkgZnJvbSAkc3VzeS1tZWRpYS5cbi8vIC0gJG5hbWU6IDxrZXk+XG5AZnVuY3Rpb24gc3VzeS1nZXQtbWVkaWEoXG4gICRuYW1lXG4pIHtcbiAgQGlmIG1hcC1oYXMta2V5KCRzdXN5LW1lZGlhLCAkbmFtZSkge1xuICAgICRtYXAtdmFsdWU6IG1hcC1nZXQoJHN1c3ktbWVkaWEsICRuYW1lKTtcbiAgICBAaWYgKCRuYW1lID09ICRtYXAtdmFsdWUpIHtcbiAgICAgICRuYW1lOiAkbWFwLXZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJG5hbWU6IHN1c3ktZ2V0LW1lZGlhKCRtYXAtdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJG5hbWU7XG59XG5cblxuLy8gUmVuZGVyIE1lZGlhXG4vLyAtLS0tLS0tLS0tLS1cbi8vIEJ1aWxkIGEgbWVkaWEtcXVlcnkgc3RyaW5nIGZyb20gdmFyaW91cyBtZWRpYSBzZXR0aW5nc1xuQGZ1bmN0aW9uIHN1c3ktcmVuZGVyLW1lZGlhKFxuICAkcXVlcnlcbikge1xuICAkb3V0cHV0OiBudWxsO1xuICBAZWFjaCAkcHJvcGVydHksICR2YWx1ZSBpbiAkcXVlcnkge1xuICAgICRzdHJpbmc6IG51bGw7XG5cbiAgICBAaWYgJHByb3BlcnR5ID09IG1lZGlhIHtcbiAgICAgICRzdHJpbmc6ICR2YWx1ZTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzdHJpbmc6ICcoI3skcHJvcGVydHl9OiAjeyR2YWx1ZX0pJztcbiAgICB9XG5cbiAgICAkb3V0cHV0OiBpZigkb3V0cHV0LCAnI3skb3V0cHV0fSBhbmQgI3skc3RyaW5nfScsICRzdHJpbmcpO1xuICB9XG5cbiAgQHJldHVybiAkb3V0cHV0O1xufVxuXG5cbi8vIFBhcnNlIE1lZGlhXG4vLyAtLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHBhcnNlZCBtZWRpYS1xdWVyeSBzZXR0aW5ncyBiYXNlZCBvbiBzaG9ydGhhbmRcbkBmdW5jdGlvbiBzdXN5LXBhcnNlLW1lZGlhKFxuICAkcXVlcnlcbikge1xuICAkbXE6IG51bGw7XG4gIEBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbWFwIHtcbiAgICAkbXE6ICRxdWVyeTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbnVtYmVyIHtcbiAgICAkbXE6IChtaW4td2lkdGg6ICRxdWVyeSk7XG4gIH0gQGVsc2UgaWYgdHlwZS1vZigkcXVlcnkpID09IGxpc3QgYW5kIGxlbmd0aCgkcXVlcnkpID09IDIge1xuICAgIEBpZiB0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSBudW1iZXIge1xuICAgICAgJG1xOiAoXG4gICAgICAgIG1pbi13aWR0aDogbWluKCRxdWVyeS4uLiksXG4gICAgICAgIG1heC13aWR0aDogbWF4KCRxdWVyeS4uLiksXG4gICAgICApO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJG1xOiAobnRoKCRxdWVyeSwgMSk6IG50aCgkcXVlcnksIDIpKTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICRtcTogKG1lZGlhOiAnI3skcXVlcnl9Jyk7XG4gIH1cblxuICBAcmV0dXJuICRtcTtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19icmVha3BvaW50LXBsdWdpbi5zY3NzXG4gKiovIiwiLy8gcmVtIFN1cHBvcnRcbi8vID09PT09PT09PT09XG5cbi8vIHJlbVxuLy8gLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3Igb3V0cHV0IGRpcmVjdGx5LlxuLy8gLSAkcHJvcCAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgOiA8Y3NzIHZhbHVlPlxuQG1peGluIHN1c3ktcmVtKFxuICAkcHJvcCxcbiAgJHZhbFxuKSB7XG4gICRfcmVxczogKFxuICAgIHZhcmlhYmxlOiByaHl0aG0tdW5pdCByZW0td2l0aC1weC1mYWxsYmFjayxcbiAgICBtaXhpbjogcmVtLFxuICApO1xuICBAaWYgc3VzeS1zdXBwb3J0KHJlbSwgJF9yZXFzLCAkd2FybjogZmFsc2UpIGFuZCAkcmh5dGhtLXVuaXQgPT0gcmVtIHtcbiAgICBAaW5jbHVkZSByZW0oJHByb3AsICR2YWwpO1xuICB9IEBlbHNlIHtcbiAgICAjeyRwcm9wfTogJHZhbDtcbiAgfVxufVxuXG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3dlYnBhY2svd2VicGFjay9+L3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19yZW0uc2Nzc1xuICoqLyIsIi8vIFNwYW4gU3ludGF4XG4vLyA9PT09PT09PT09PVxuXG4vLyBTcGFuIFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLVxuLy8gU2V0IGEgc3Bhbm5pbmcgZWxlbWVudCB1c2luZyBzaG9ydGhhbmQgc3ludGF4LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBzcGFuKFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0OiAkc3BhbjtcbiAgJHNwYW46IHBhcnNlLXNwYW4oJHNwYW4pO1xuICAkb3V0cHV0OiBzcGFuLW1hdGgoJHNwYW4pO1xuICAkbmVzdGluZzogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkY2xlYXI6IHN1c3ktZ2V0KGNsZWFyLCAkc3Bhbik7XG5cbiAgJGJveDogc3VzeS1nZXQoYm94LXNpemluZywgJHNwYW4pO1xuICAkY29udGVudC1ib3g6IGlmKHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSAhPSAnYm9yZGVyLWJveCcsIHRydWUsIGZhbHNlKTtcbiAgJGJveDogJGJveCBvciBpZihpcy1pbnNpZGUoJHNwYW4pIGFuZCAkY29udGVudC1ib3gsIGJvcmRlci1ib3gsIG51bGwpO1xuXG4gIEBpZiAkY2xlYXIgPT0gYnJlYWsge1xuICAgIEBpbmNsdWRlIGJyZWFrO1xuICB9IEBlbHNlIGlmICRjbGVhciA9PSBub2JyZWFrIHtcbiAgICBAaW5jbHVkZSBub2JyZWFrO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHNwYW4sICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkYm94KSk7XG4gIEBpbmNsdWRlIGZsb2F0LXNwYW4tb3V0cHV0KCRvdXRwdXQuLi4pO1xuXG4gIEBpZiB2YWxpZC1jb2x1bW5zKCRuZXN0aW5nLCBzaWxlbnQpIHtcbiAgICBAaW5jbHVkZSBuZXN0ZWQoJHNwYW4pIHsgQGNvbnRlbnQ7IH1cbiAgfSBAZWxzZSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8gU3BhbiBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgd2lkdGggb2YgYSBzcGFuLlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBmdW5jdGlvbiBzcGFuKFxuICAkc3BhblxuKSB7XG4gIEByZXR1cm4gZ2V0LXNwYW4td2lkdGgoJHNwYW4pO1xufVxuXG4vLyBTcGFuIE1hdGhcbi8vIC0tLS0tLS0tLVxuLy8gR2V0IGFsbCB0aGUgc3BhbiByZXN1bHRzLlxuLy8gLSAkc3BhbjogPG1hcD5cbkBmdW5jdGlvbiBzcGFuLW1hdGgoXG4gICRzcGFuXG4pIHtcbiAgJG5lc3QgICAgICAgICAgICAgOiBpZihzdXN5LWdldChyb2xlLCAkc3BhbikgPT0gbmVzdCwgdHJ1ZSwgZmFsc2UpO1xuICAkc3BsaXQtbmVzdCAgICAgICA6IGlmKGlzLXNwbGl0KCRzcGFuKSBhbmQgJG5lc3QsIHRydWUsIGZhbHNlKTtcbiAgJGVkZ2UgICAgICAgICAgICAgOiBnZXQtZWRnZSgkc3Bhbik7XG4gICRsb2NhdGlvbiAgICAgICAgIDogZ2V0LWxvY2F0aW9uKCRzcGFuKTtcblxuICAkZmxvYXQgICAgICAgICAgICA6IGZyb207XG4gICRwYWRkaW5nLWJlZm9yZSAgIDogbnVsbDtcbiAgJHBhZGRpbmctYWZ0ZXIgICAgOiBudWxsO1xuICAkbWFyZ2luLWJlZm9yZSAgICA6IG51bGw7XG4gICRtYXJnaW4tYWZ0ZXIgICAgIDogbnVsbDtcblxuICAvLyBjYWxjdWxhdGUgd2lkdGhzXG4gICRzcHJlYWQ6IGluZGV4KG1hcC12YWx1ZXMoJHNwYW4pLCBzcHJlYWQpO1xuICAkc3BhbjogaWYoJHNwbGl0LW5lc3QgYW5kIG5vdCgkc3ByZWFkKSwgbWFwLW1lcmdlKCRzcGFuLCAoc3ByZWFkOiB3aWRlKSksICRzcGFuKTtcbiAgJHdpZHRoOiBnZXQtc3Bhbi13aWR0aCgkc3Bhbik7XG4gICRndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG5cbiAgLy8gYXBwbHkgZ3V0dGVyc1xuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgQGlmIG5vdChzdXN5LWdldChyb2xlLCAkc3BhbikpIHtcbiAgICAgICRwYWRkaW5nLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKTtcbiAgICAgICRwYWRkaW5nLWFmdGVyOiBtYXAtZ2V0KCRndXR0ZXJzLCBhZnRlcik7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAaWYgbm90KCRzcGxpdC1uZXN0KSB7XG4gICAgICAkbWFyZ2luLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKTtcbiAgICAgICRtYXJnaW4tYWZ0ZXI6IG1hcC1nZXQoJGd1dHRlcnMsIGFmdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBzcGVjaWFsIG1hcmdpbiBoYW5kbGluZ1xuICBAaWYgc3VzeS1nZXQob3V0cHV0LCAkc3BhbikgPT0gaXNvbGF0ZSBhbmQgJGxvY2F0aW9uIHtcbiAgICAkbWFyZ2luLWJlZm9yZTogZ2V0LWlzb2xhdGlvbigkc3Bhbik7XG4gICAgJG1hcmdpbi1hZnRlcjogLTEwMCU7XG4gIH0gQGVsc2UgaWYgJGVkZ2Uge1xuICAgICRpcy1zcGxpdDogaXMtc3BsaXQoJHNwYW4pO1xuICAgICRwb3M6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pO1xuXG4gICAgQGlmICRlZGdlID09IGxhc3Qge1xuICAgICAgJGZsb2F0OiBzdXN5LWdldChsYXN0LWZsb3csICRzcGFuKTtcbiAgICB9XG5cbiAgICBAaWYgbm90KCRpcy1zcGxpdCkge1xuICAgICAgQGlmICRlZGdlID09IGZ1bGwgb3IgKCRlZGdlID09IGZpcnN0IGFuZCAkcG9zID09IGJlZm9yZSkge1xuICAgICAgICAkbWFyZ2luLWJlZm9yZTogMDtcbiAgICAgIH1cbiAgICAgIEBpZiAkZWRnZSA9PSBmdWxsIG9yICgkZWRnZSA9PSBsYXN0IGFuZCAkcG9zID09IGFmdGVyKSB7XG4gICAgICAgICRtYXJnaW4tYWZ0ZXI6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBAcmV0dXJuIChcbiAgICB3aWR0aCAgICAgICAgICAgOiAkd2lkdGgsXG4gICAgZmxvYXQgICAgICAgICAgIDogJGZsb2F0LFxuICAgIG1hcmdpbi1iZWZvcmUgICA6ICRtYXJnaW4tYmVmb3JlLFxuICAgIG1hcmdpbi1hZnRlciAgICA6ICRtYXJnaW4tYWZ0ZXIsXG4gICAgcGFkZGluZy1iZWZvcmUgIDogJHBhZGRpbmctYmVmb3JlLFxuICAgIHBhZGRpbmctYWZ0ZXIgICA6ICRwYWRkaW5nLWFmdGVyLFxuICAgIGZsb3cgICAgICAgICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKSxcbiAgKTtcbn1cblxuLy8gR2V0IFNwYW4gV2lkdGhcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gc3BhbiB3aWR0aC5cbi8vIC0gJHNwYW46IDxtYXA+XG5AZnVuY3Rpb24gZ2V0LXNwYW4td2lkdGgoXG4gICRzcGFuXG4pIHtcbiAgJHNwYW4gICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG5cbiAgJG4gICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkbG9jYXRpb24gOiBnZXQtbG9jYXRpb24oJHNwYW4pO1xuICAkY29sdW1ucyAgOiBzdXN5LWdldChjb2x1bW5zLCAkc3Bhbik7XG4gICRndXR0ZXJzICA6IHN1c3ktZ2V0KGd1dHRlcnMsICRzcGFuKTtcbiAgJHNwcmVhZCAgIDogc3VzeS1nZXQoc3ByZWFkLCAkc3Bhbik7XG5cbiAgJGNvbnRleHQgIDogbnVsbDtcbiAgJHNwYW4tc3VtIDogbnVsbDtcbiAgJHdpZHRoICAgIDogbnVsbDtcblxuICBAaWYgJG4gPT0gJ2Z1bGwnIHtcbiAgICAkcG9zOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKTtcbiAgICAkcm9sZTogc3VzeS1nZXQocm9sZSwgJHNwYW4pO1xuICAgICRuOiBpZigkcG9zID09IHNwbGl0IGFuZCAkcm9sZSAhPSBuZXN0LCBzdXN5LWNvdW50KCRjb2x1bW5zKSwgMTAwJSk7XG4gIH1cblxuICBAaWYgdHlwZS1vZigkbikgIT0gbnVtYmVyIHtcbiAgICBAd2FybiBcIigje3R5cGUtb2YoJG4pfSkgI3skbn0gaXMgbm90IGEgdmFsaWQgc3Bhbi5cIjtcbiAgfSBAZWxzZSBpZiB1bml0bGVzcygkbikge1xuICAgICRjb250ZXh0OiBzdXN5LXN1bSgkY29sdW1ucywgJGd1dHRlcnMsIGlmKGlzLXNwbGl0KCRzcGFuKSwgd2lkZSwgbmFycm93KSk7XG4gICAgJHNwcmVhZDogaWYoaXMtaW5zaWRlKCRzcGFuKSwgJHNwcmVhZCBvciB3aWRlLCAkc3ByZWFkKTtcbiAgICAkc3Bhbi1zdW06IHN1c3koJG4sICRsb2NhdGlvbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkKTtcblxuICAgICRfbWF0aDogc3VzeS1nZXQobWF0aCwgJHNwYW4pO1xuICAgICRfY29sdW1uLXdpZHRoOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRzcGFuKTtcbiAgICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgICAkd2lkdGg6ICRzcGFuLXN1bSAqIHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHdpZHRoOiBwZXJjZW50YWdlKCRzcGFuLXN1bSAvICRjb250ZXh0KTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICR3aWR0aDogJG47XG4gIH1cblxuICBAcmV0dXJuICR3aWR0aDtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19zcGFuLnNjc3NcbiAqKi8iLCIvLyBEaXJlY3Rpb24gSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT1cblxuLy8gU3VzeSBGbG93IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIGZsb3c6IGx0cixcbikpO1xuXG4vLyBHZXQgRGlyZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlICdmcm9tJyBvciAndG8nIGRpcmVjdGlvbiBvZiBhIGx0ciBvciBydGwgZmxvdy5cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbi8vIC0gWyRrZXldICAgOiBmcm9tIHwgdG9cbkBmdW5jdGlvbiBnZXQtZGlyZWN0aW9uKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdyksXG4gICRrZXk6IGZyb21cbikge1xuICAkcmV0dXJuOiBpZigkZmxvdyA9PSBydGwsIChmcm9tOiByaWdodCwgdG86IGxlZnQpLCAoZnJvbTogbGVmdCwgdG86IHJpZ2h0KSk7XG4gIEByZXR1cm4gbWFwLWdldCgkcmV0dXJuLCAka2V5KTtcbn1cblxuLy8gVG9cbi8vIC0tXG4vLyBSZXR1cm4gdGhlICd0bycgZGlyZWN0aW9uIG9mIGEgZmxvd1xuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQGZ1bmN0aW9uIHRvKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICBAcmV0dXJuIGdldC1kaXJlY3Rpb24oJGZsb3csIHRvKTtcbn1cblxuLy8gRnJvbVxuLy8gLS0tLVxuLy8gUmV0dXJuIHRoZSAnZnJvbScgZGlyZWN0aW9uIG9mIGEgZmxvd1xuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQGZ1bmN0aW9uIGZyb20oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gIEByZXR1cm4gZ2V0LWRpcmVjdGlvbigkZmxvdywgZnJvbSk7XG59XG5cblxuXG4vKiogV0VCUEFDSyBGT09URVIgKipcbiAqKiB3ZWJwYWNrOi8vL2Jsb2ctdHdpdHRlci1wcm9qZWN0L2Jsb2ctdHdpdHRlci1qY3ItbW9kdWxlcy9ibG9nLXR3aXR0ZXItdmlldy9zcmMvd2VicGFjay93ZWJwYWNrL34vc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fZGlyZWN0aW9uLnNjc3NcbiAqKi8iLCIvLyBHdXR0ZXIgU3ludGF4XG4vLyA9PT09PT09PT09PT09XG5cblxuLy8gR3V0dGVyc1xuLy8gLS0tLS0tLVxuLy8gU2V0IGd1dHRlcnMgb24gYW4gZWxlbWVudC5cbi8vIC0gWyRzcGFuXSAgIDogPHNldHRpbmdzPlxuQG1peGluIGd1dHRlcnMoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICA6ICRzcGFuO1xuICAkc3BhbiAgICAgOiBwYXJzZS1ndXR0ZXJzKCRzcGFuKTtcbiAgJF9ndXR0ZXJzIDogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuXG4gICRfb3V0cHV0OiAoXG4gICAgYmVmb3JlOiBtYXAtZ2V0KCRfZ3V0dGVycywgYmVmb3JlKSxcbiAgICBhZnRlcjogbWFwLWdldCgkX2d1dHRlcnMsIGFmdGVyKSxcbiAgICBmbG93OiBzdXN5LWdldChmbG93LCAkc3BhbiksXG4gICk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGd1dHRlcnMsICRpbnNwZWN0KTtcblxuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgQGluY2x1ZGUgcGFkZGluZy1vdXRwdXQoJF9vdXRwdXQuLi4pO1xuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBtYXJnaW4tb3V0cHV0KCRfb3V0cHV0Li4uKTtcbiAgfVxufVxuXG5AbWl4aW4gZ3V0dGVyKFxuICAkc3BhbjogJHN1c3lcbikge1xuICBAaW5jbHVkZSBndXR0ZXJzKCRzcGFuKTtcbn1cblxuXG4vLyBHdXR0ZXJcbi8vIC0tLS0tLVxuLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiBhIGd1dHRlci5cbi8vIC0gWyRzcGFuXSAgIDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGd1dHRlcihcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgJHNwYW46IHBhcnNlLWd1dHRlcnMoJHNwYW4pO1xuXG4gICRfZ3V0dGVyczogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuICAkX2d1dHRlcnM6IG1hcC1nZXQoJF9ndXR0ZXJzLCBiZWZvcmUpIG9yIG1hcC1nZXQoJF9ndXR0ZXJzLCBhZnRlcik7XG5cbiAgQHJldHVybiAkX2d1dHRlcnM7XG59XG5cbkBmdW5jdGlvbiBndXR0ZXJzKFxuICAkc3BhbjogJHN1c3lcbikge1xuICBAcmV0dXJuIGd1dHRlcigkc3Bhbik7XG59XG5cblxuLy8gR2V0IEd1dHRlciBXaWR0aFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGd1dHRlciB3aWR0aC5cbi8vIC0gWyRjb250ZXh0XTogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ2V0LWd1dHRlci13aWR0aChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGNvbnRleHQgIDogcGFyc2UtZ3V0dGVycygkY29udGV4dCk7XG5cbiAgJF9ndXR0ZXJzIDogc3VzeS1nZXQoZ3V0dGVycywgJGNvbnRleHQpO1xuICAkX2d1dHRlciAgOiBzdXN5LWdldChndXR0ZXItb3ZlcnJpZGUsICRjb250ZXh0KTtcblxuICBAaWYgJF9ndXR0ZXJzIGFuZCAoJF9ndXR0ZXJzID4gMCkgYW5kIG5vdCgkX2d1dHRlcikge1xuICAgICRfY29sdW1uLXdpZHRoOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRjb250ZXh0KTtcbiAgICAkX21hdGg6IGd1dHRlci1tYXRoKCRjb250ZXh0KTtcbiAgICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgICAkX2d1dHRlcjogJF9ndXR0ZXJzICogdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkY29udGV4dCk7XG4gICAgICAkX3NwcmVhZCAgOiBpZihpcy1zcGxpdCgkY29udGV4dCksIHdpZGUsIHN1c3ktZ2V0KHNwcmVhZCwgJGNvbnRleHQpKTtcbiAgICAgICRfZ3V0dGVyICA6IHBlcmNlbnRhZ2UoJF9ndXR0ZXJzIC8gc3VzeS1zdW0oJF9jb2x1bW5zLCAkX2d1dHRlcnMsICRfc3ByZWFkKSk7XG4gICAgfVxuICB9XG5cbiAgJF9ndXR0ZXI6IGlmKCRfZ3V0dGVyID09ICduby1ndXR0ZXJzJyBvciAkX2d1dHRlciA9PSAnbm8tZ3V0dGVyJywgbnVsbCwgJF9ndXR0ZXIpO1xuXG4gIEByZXR1cm4gJF9ndXR0ZXI7XG59XG5cblxuLy8gR2V0IEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gYmVmb3JlIGFuZCBhZnRlciBndXR0ZXIgdmFsdWVzLlxuLy8gLSBbJGNvbnRleHRdOiA8Y29udGV4dD5cbkBmdW5jdGlvbiBnZXQtZ3V0dGVycyhcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGNvbnRleHQgICAgICAgICAgICA6IHBhcnNlLWd1dHRlcnMoJGNvbnRleHQpO1xuXG4gICRfZ3V0dGVyLXBvc2l0aW9uICAgOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcbiAgJF9ndXR0ZXIgICAgICAgICAgICA6IGdldC1ndXR0ZXItd2lkdGgoJGNvbnRleHQpO1xuXG4gICRfcmV0dXJuICAgICAgICAgICAgOiAoYmVmb3JlOiBudWxsLCBhZnRlcjogbnVsbCk7XG5cbiAgQGlmIGlzLXNwbGl0KCRjb250ZXh0KSBhbmQgJF9ndXR0ZXIge1xuICAgICRfZ3V0dGVyOiAkX2d1dHRlciAvIDI7XG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGJlZm9yZTogJF9ndXR0ZXIsIGFmdGVyOiAkX2d1dHRlcikpO1xuICB9IEBlbHNlIHtcbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoJF9ndXR0ZXItcG9zaXRpb246ICRfZ3V0dGVyKSk7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIElzIEluc2lkZVxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm5zIHRydWUgaWYgZ3V0dGVycyBhcmUgaW5zaWRlLlxuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGlzLWluc2lkZShcbiAgJGNvbnRleHRcbikge1xuICAkX2luc2lkZTogaW5zaWRlIGluc2lkZS1zdGF0aWM7XG4gICRfZ3V0dGVyLXBvc2l0aW9uOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcblxuICBAcmV0dXJuIGlmKGluZGV4KCRfaW5zaWRlLCAkX2d1dHRlci1wb3NpdGlvbiksIHRydWUsIGZhbHNlKTtcbn1cblxuXG4vLyBJcyBTcGxpdFxuLy8gLS0tLS0tLS1cbi8vIFJldHVybnMgdHJ1ZSBpZiBndXR0ZXJzIGFyZSBzcGxpdC5cbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBpcy1zcGxpdChcbiAgJGNvbnRleHRcbikge1xuICAkX3NwbGl0OiBzcGxpdCBpbnNpZGUgaW5zaWRlLXN0YXRpYztcbiAgJF9ndXR0ZXItcG9zaXRpb246IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gaWYoaW5kZXgoJF9zcGxpdCwgJF9ndXR0ZXItcG9zaXRpb24pLCB0cnVlLCBmYWxzZSk7XG59XG5cblxuLy8gR3V0dGVyIE1hdGhcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIG1hdGggdG8gdXNlIGZvciBndXR0ZXIgY2FsY3VsYXRpb25zXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ3V0dGVyLW1hdGgoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRfcmV0dXJuICA6IHN1c3ktZ2V0KG1hdGgsICRjb250ZXh0KTtcbiAgJF9yZXR1cm4gIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCkgPT0gaW5zaWRlLXN0YXRpYywgc3RhdGljLCAkX3JldHVybik7XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG5cbi8qKiBXRUJQQUNLIEZPT1RFUiAqKlxuICoqIHdlYnBhY2s6Ly8vYmxvZy10d2l0dGVyLXByb2plY3QvYmxvZy10d2l0dGVyLWpjci1tb2R1bGVzL2Jsb2ctdHdpdHRlci12aWV3L3NyYy93ZWJwYWNrL3dlYnBhY2svfi9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ndXR0ZXJzLnNjc3NcbiAqKi8iLCIkY29sb3JzOiAoZXh0cmEtZGFyazogKG9yYW5nZTogI0Q4MkUxOCx5ZWxsb3c6ICNGOThFMDAsZ3JlZW46ICMwMDg5NTEsYmx1ZTogIzAwNUZEMSxwdXJwbGU6ICM0RjAyOTkscGluazogI0EwMTc0NCksZGFyazogKG9yYW5nZTogI0Y0NUQyMix5ZWxsb3c6ICNGRkFEMUYsZ3JlZW46ICMxRkI2NTAsYmx1ZTogIzFEQTFGMixwdXJwbGU6ICM3OTRCQzQscGluazogI0UwMjQ1RSksbGlnaHQ6IChvcmFuZ2U6ICNGRjhENTcseWVsbG93OiAjRkZEMDNGLGdyZWVuOiAjNjhFMDkwLGJsdWU6ICM3MUM5RjgscHVycGxlOiAjQTM3Q0VELHBpbms6ICNGNjgwOUEpLGV4dHJhLWxpZ2h0OiAob3JhbmdlOiAjRkZCRTc4LHllbGxvdzogI0ZGRTc2RSxncmVlbjogI0E1RjJBQSxibHVlOiAjOTdFM0ZGLHB1cnBsZTogI0M3QjRGQSxwaW5rOiAjRkZCOEMyKSxuZXV0cmFsOiAoYmxhY2s6ICMxNDE3MUEsZGFyay1ncmF5OiAjNjU3Nzg2LGxpZ2h0LWdyYXk6ICNBQUI4QzIsZXh0cmEtbGlnaHQtZ3JheTogI0NDRDZERCxleHRyYS1leHRyYS1saWdodC1ncmF5OiAjRjVGOEZBLHdoaXRlOiAjRkZGRkZGKSk7XG5cblxuLyoqIFdFQlBBQ0sgRk9PVEVSICoqXG4gKiogd2VicGFjazovLy9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItcHJvamVjdC9ibG9nLXR3aXR0ZXItamNyLW1vZHVsZXMvYmxvZy10d2l0dGVyLXZpZXcvc3JjL3ZhcmlhYmxlcy9jb2xvcnMuanNvblxuICoqLyJdLCJzb3VyY2VSb290IjoiIn0=*/