~evanj/cms

eae46a23d1bdca0810cde2d80931df2e7685e530 — Evan M Jones 5 months ago 21a6aab
Fix(space copy): Space copying with content that contains deleted
references fix.
M internal/m/contenttype/contenttype.go => internal/m/contenttype/contenttype.go +1 -0
@@ 8,4 8,5 @@ type ContentType interface {
	ID() string
	Name() string
	Fields() []valuetype.ValueType
	FieldsWithRefCount() int
}

M internal/s/db/content.go => internal/s/db/content.go +7 -1
@@ 501,9 501,15 @@ func (db *DB) contentNew(t *sql.Tx, space space.Space, ct contenttype.ContentTyp
	for _, item := range params {
		// Special data type. Life is hard.
		if item.Type == valuetype.ReferenceList {
			if item.Value == "" {
				// Usually a full space copy after referenced content has been deleted.
				continue
			}

			if err := db.valueReferenceListNew(space, ct, &content, t, item.Name, strings.Split(item.Value, "-"), depth); err != nil {
				return nil, err
			}

			continue
		}



@@ 544,7 550,7 @@ func (db *DB) contentNew(t *sql.Tx, space space.Space, ct contenttype.ContentTyp
		content.ContentValues = append(content.ContentValues, value)
	}

	if len(ct.Fields()) != len(content.ContentValues) {
	if (len(ct.Fields()) - ct.FieldsWithRefCount()) > len(content.ContentValues) {
		return nil, fmt.Errorf("failed to create all values")
	}


M internal/s/db/contenttype.go => internal/s/db/contenttype.go +12 -0
@@ 280,6 280,18 @@ func (ct *ContentType) Name() string {
	return ct.ContentTypeName
}

func (ct *ContentType) FieldsWithRefCount() (count int) {
	for _, item := range ct.ContentTypeFields {
		switch item.Type() {
		case valuetype.Reference:
			fallthrough
		case valuetype.ReferenceList:
			count++
		}
	}
	return
}

func (ct *ContentType) Fields() []valuetype.ValueType {
	var ret []valuetype.ValueType
	for _, item := range ct.ContentTypeFields {

M internal/s/db/space.go => internal/s/db/space.go +5 -0
@@ 226,6 226,11 @@ func (db *DB) spaceCopyContent(t *sql.Tx, next space.Space, ct contenttype.Conte
	for _, prevF := range ct.Fields() {
		prevV, ok := prevC.ValueByName(prevF.Name())
		if !ok {
			if prevF.Type() == valuetype.Reference {
				// Referenced content was deleted.
				continue
			}

			return false, fmt.Errorf("item %s could not be copied: failed to find field %s", prevC.MustValueByName("name").Value(), prevF.Name())
		}


M internal/s/tmpl/html/content.html => internal/s/tmpl/html/content.html +1 -0
@@ 160,6 160,7 @@
                </dialog>
              {{ end }}
              <br>
              <br>
            {{ end }}
          {{ end}}


M internal/s/tmpl/tmpls_embed.go => internal/s/tmpl/tmpls_embed.go +2 -2
@@ 24,7 24,7 @@ func init() {

	tmpls["html/_header.html"] = tostring("PGhlYWRlcj4KICA8bmF2PgogICAgPGEgaHJlZj0iLyI+Q01TPC9hPgogICAgPHVsPgogICAgICB7eyBpZiAuU3BhY2UgfX0KICAgICAgPGxpPjxhIGhyZWY9Ii8iPkhvbWU8L2E+PC9saT4KICAgICAge3sgZW5kIH19CiAgICAgIHt7IGlmIC5Db250ZW50VHlwZSB9fQogICAgICA8bGk+PGEgaHJlZj0iL3NwYWNlL3t7IC5TcGFjZS5JRCB9fSI+e3sgLlNwYWNlLk5hbWUgfX08L2E+PC9saT4KICAgICAge3sgZW5kIH19CiAgICAgIHt7IGlmIC5Ib29rIH19CiAgICAgIDxsaT48YSBocmVmPSIvc3BhY2Uve3sgLlNwYWNlLklEIH19Ij57eyAuU3BhY2UuTmFtZSB9fTwvYT48L2xpPgogICAgICB7eyBlbmQgfX0KICAgICAge3sgaWYgLkNvbnRlbnQgfX0KICAgICAgPGxpPjxhIGhyZWY9Ii9jb250ZW50dHlwZS97eyAuU3BhY2UuSUR9fS97eyAuQ29udGVudFR5cGUuSUQgfX0iPnt7IC5Db250ZW50VHlwZS5OYW1lIH19PC9hPjwvbGk+CiAgICAgIHt7IGVuZCB9fQogICAgICA8bGk+PGEgaHJlZj0iLy9naXQuc3IuaHQvfmV2YW5qL2NtcyI+U291cmNlPC9hPjwvbGk+CiAgICA8L3VsPgogIDwvbmF2PgogIDwhLS0KICA8aDE+QSA8dT5taW5pbWFsaXN0PC91PiBjb250ZW50IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUgZm9yIDxtYXJrPm1vc3Q8L21hcms+LjwvaDE+CiAgLS0+CjwvaGVhZGVyPgo=")

	tmpls["html/content.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUyB8IHt7IC5TcGFjZS5OYW1lIH19IHwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0gfCB7eyAoLkNvbnRlbnQuTXVzdFZhbHVlQnlOYW1lICJuYW1lIikuVmFsdWUgfX08L3RpdGxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPWNvbnRlbnQgc3R5bGU9J21heC13aWR0aDogODAwcHg7Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8aHIvPgogICAgPGFydGljbGU+CiAgICAgIDxoMT57eyAuU3BhY2UuTmFtZSB9fSwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0sIHt7ICguQ29udGVudC5NdXN0VmFsdWVCeU5hbWUgIm5hbWUiKS5WYWx1ZSB9fTwvaDE+CiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PlVwZGF0ZSBDb250ZW50PC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnQvdXBkYXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9Y29udGVudCB2YWx1ZT0ie3sgLkNvbnRlbnQuSUQgfX0iIC8+CgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAge3sgcmFuZ2UgJGluZGV4LCAkaXRlbSA6PSAuQ29udGVudFR5cGUuRmllbGRzIH19CiAgICAgICAgICAgIHt7ICR2YWwgOj0gJC5Db250ZW50Lk11c3RWYWx1ZUJ5TmFtZSAoICRpdGVtLk5hbWUgKSB9fQoKICAgICAgICAgICAge3sgaWYgJHZhbCB9fSAKICAgICAgICAgICAgICB7eyBpZiBlcSAkaW5kZXggMCB9fQogICAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSI+e3sgJHZhbC5OYW1lIH19PC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CgogICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiU3RyaW5nU21hbGwiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgcGxhY2Vob2xkZXI9Int7ICR2YWwuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJTdHJpbmdCaWciIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJJbnB1dEhUTUwiIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0naW5wdXQtaHRtbCcgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHBsYWNlaG9sZGVyPSJ7eyAkdmFsLk5hbWUgfX0iPnt7ICR2YWwuVmFsdWUgfX08L3RleHRhcmVhPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0naW5wdXQtbWFya2Rvd24nIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJGaWxlIiB9fQogICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHR5cGU9ZmlsZSBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIG11bHRpcGxlPWZhbHNlIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiRGF0ZSIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPWRhdGUgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19IiAvPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZSIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9Int7IGlmICAkdmFsLlJlZk5hbWUgfX17eyAkdmFsLlJlZk5hbWUgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICA8ZGlhbG9nPgogICAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgLz4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0naW5wdXQtcmVmJyB0eXBlPWJ1dHRvbiB2YWx1ZT0ie3sgaWYgICR2YWwuUmVmTGlzdE5hbWVzIH19e3sgJHZhbC5SZWZMaXN0TmFtZXMgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICA8ZGlhbG9nPgogICAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9bGVmdCB0eXBlPWJ1dHRvbiB2YWx1ZT1DbGVhciAvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9cmlnaHQgdHlwZT1idXR0b24gdmFsdWU9RG9uZSAvPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgIHt7IGlmIGVxICRpbmRleCAwIH19CiAgICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPnt7IC5OYW1lIH19PC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdTbWFsbCIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiU3RyaW5nQmlnIiB9fQogICAgICAgICAgICAgICAgPHRleHRhcmVhIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiSW5wdXRIVE1MIiB9fQogICAgICAgICAgICAgICAgPHRleHRhcmVhIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgY2xhc3M9J2lucHV0LWh0bWwnIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0naW5wdXQtbWFya2Rvd24nIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPWZpbGUgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIG11bHRpcGxlPWZhbHNlIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJEYXRlIiB9fQogICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT1kYXRlIG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2UiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgPGRpYWxvZz4KICAgICAgICAgICAgICAgICAgPG1lbnU+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlYXJjaCBmb3IgY29udGVudCB0byB1c2UgYXMgcmVmZXJlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cyBjbGFzcz0naW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IGNvbnRlbnQgdHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0naW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCBuYW1lJyAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L21lbnU+CiAgICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgPGRpYWxvZz4KICAgICAgICAgICAgICAgICAgPG1lbnU+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlYXJjaCBmb3IgY29udGVudCB0byB1c2UgYXMgcmVmZXJlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cyBjbGFzcz0naW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IGNvbnRlbnQgdHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0naW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCBuYW1lJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPWxlZnQgdHlwZT1idXR0b24gdmFsdWU9Q2xlYXIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPXJpZ2h0IHR5cGU9YnV0dG9uIHZhbHVlPURvbmUgLz4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L21lbnU+CiAgICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAge3sgZW5kfX0KCiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9VXBkYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGRldGFpbHM+CiAgICAgICAgPHN1bW1hcnk+RGVsZXRlIENvbnRlbnQ8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudC9kZWxldGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPWNvbnRlbnR0eXBlIHZhbHVlPSJ7eyAuQ29udGVudFR5cGUuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50IHZhbHVlPSJ7eyAuQ29udGVudC5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPURlbGV0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICA8L2FydGljbGU+CiAgICA8aHIvPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICA8c2NyaXB0IHNyYz0iLy91bnBrZy5jb20vdGlueW1jZUA1LjIuMC90aW55bWNlLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Jy8vdW5wa2cuY29tL2F1dG9jb21wbGV0ZS5qc0AwLjM3LjEvZGlzdC9hdXRvY29tcGxldGUubWluLmpzJz48L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9jb250ZW50LmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")
	tmpls["html/content.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUyB8IHt7IC5TcGFjZS5OYW1lIH19IHwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0gfCB7eyAoLkNvbnRlbnQuTXVzdFZhbHVlQnlOYW1lICJuYW1lIikuVmFsdWUgfX08L3RpdGxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPWNvbnRlbnQgc3R5bGU9J21heC13aWR0aDogODAwcHg7Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8aHIvPgogICAgPGFydGljbGU+CiAgICAgIDxoMT57eyAuU3BhY2UuTmFtZSB9fSwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0sIHt7ICguQ29udGVudC5NdXN0VmFsdWVCeU5hbWUgIm5hbWUiKS5WYWx1ZSB9fTwvaDE+CiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PlVwZGF0ZSBDb250ZW50PC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnQvdXBkYXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9Y29udGVudCB2YWx1ZT0ie3sgLkNvbnRlbnQuSUQgfX0iIC8+CgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAge3sgcmFuZ2UgJGluZGV4LCAkaXRlbSA6PSAuQ29udGVudFR5cGUuRmllbGRzIH19CiAgICAgICAgICAgIHt7ICR2YWwgOj0gJC5Db250ZW50Lk11c3RWYWx1ZUJ5TmFtZSAoICRpdGVtLk5hbWUgKSB9fQoKICAgICAgICAgICAge3sgaWYgJHZhbCB9fSAKICAgICAgICAgICAgICB7eyBpZiBlcSAkaW5kZXggMCB9fQogICAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSI+e3sgJHZhbC5OYW1lIH19PC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CgogICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiU3RyaW5nU21hbGwiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgcGxhY2Vob2xkZXI9Int7ICR2YWwuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJTdHJpbmdCaWciIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJJbnB1dEhUTUwiIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0naW5wdXQtaHRtbCcgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHBsYWNlaG9sZGVyPSJ7eyAkdmFsLk5hbWUgfX0iPnt7ICR2YWwuVmFsdWUgfX08L3RleHRhcmVhPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0naW5wdXQtbWFya2Rvd24nIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJGaWxlIiB9fQogICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHR5cGU9ZmlsZSBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIG11bHRpcGxlPWZhbHNlIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiRGF0ZSIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPWRhdGUgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19IiAvPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZSIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9Int7IGlmICAkdmFsLlJlZk5hbWUgfX17eyAkdmFsLlJlZk5hbWUgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICA8ZGlhbG9nPgogICAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgLz4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0naW5wdXQtcmVmJyB0eXBlPWJ1dHRvbiB2YWx1ZT0ie3sgaWYgICR2YWwuUmVmTGlzdE5hbWVzIH19e3sgJHZhbC5SZWZMaXN0TmFtZXMgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICA8ZGlhbG9nPgogICAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9bGVmdCB0eXBlPWJ1dHRvbiB2YWx1ZT1DbGVhciAvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9cmlnaHQgdHlwZT1idXR0b24gdmFsdWU9RG9uZSAvPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgIHt7IGlmIGVxICRpbmRleCAwIH19CiAgICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPnt7IC5OYW1lIH19PC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdTbWFsbCIgfX0KICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiU3RyaW5nQmlnIiB9fQogICAgICAgICAgICAgICAgPHRleHRhcmVhIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiSW5wdXRIVE1MIiB9fQogICAgICAgICAgICAgICAgPHRleHRhcmVhIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgY2xhc3M9J2lucHV0LWh0bWwnIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0naW5wdXQtbWFya2Rvd24nIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPWZpbGUgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIG11bHRpcGxlPWZhbHNlIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJEYXRlIiB9fQogICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT1kYXRlIG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2UiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgPGRpYWxvZz4KICAgICAgICAgICAgICAgICAgPG1lbnU+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlYXJjaCBmb3IgY29udGVudCB0byB1c2UgYXMgcmVmZXJlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cyBjbGFzcz0naW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IGNvbnRlbnQgdHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0naW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCBuYW1lJyAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L21lbnU+CiAgICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgPGRpYWxvZz4KICAgICAgICAgICAgICAgICAgPG1lbnU+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxjZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlYXJjaCBmb3IgY29udGVudCB0byB1c2UgYXMgcmVmZXJlbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cyBjbGFzcz0naW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IGNvbnRlbnQgdHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0naW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCBuYW1lJyAvPgogICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPWxlZnQgdHlwZT1idXR0b24gdmFsdWU9Q2xlYXIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPXJpZ2h0IHR5cGU9YnV0dG9uIHZhbHVlPURvbmUgLz4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L21lbnU+CiAgICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgIHt7IGVuZH19CgogICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVVwZGF0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkRlbGV0ZSBDb250ZW50PC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnQvZGVsZXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9Y29udGVudCB2YWx1ZT0ie3sgLkNvbnRlbnQuSUQgfX0iIC8+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1EZWxldGUgLz4KICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9mb3JtPgogICAgICA8L2RldGFpbHM+CgogICAgPC9hcnRpY2xlPgogICAgPGhyLz4KICAgIHt7IHRlbXBsYXRlICJodG1sL19mb290ZXIuaHRtbCIgfX0KICA8L21haW4+CiAgPHNjcmlwdCBzcmM9Ii8vdW5wa2cuY29tL3RpbnltY2VANS4yLjAvdGlueW1jZS5taW4uanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPScvL3VucGtnLmNvbS9hdXRvY29tcGxldGUuanNAMC4zNy4xL2Rpc3QvYXV0b2NvbXBsZXRlLm1pbi5qcyc+PC9zY3JpcHQ+CiAgPHNjcmlwdD57eyB0ZW1wbGF0ZSAianMvY29udGVudC5qcyIgJCB9fTwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+Cg==")

	tmpls["html/contenttype.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+Cgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVMgfCB7eyAuU3BhY2UuTmFtZSB9fSB8IHt7IC5Db250ZW50VHlwZS5OYW1lIH19PC90aXRsZT4KPC9oZWFkPgoKPGJvZHkgY2xhc3M9Y29udGVudHR5cGUgc3R5bGU9J21heC13aWR0aDogODAwcHg7Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8aHIvPgogICAgPGFydGljbGU+CiAgICAgIDxoMT57eyAuU3BhY2UuTmFtZSB9fSwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX08L2gxPgogICAgICA8ZGV0YWlscz4KICAgICAgICA8c3VtbWFyeT5DcmVhdGUgYSB7eyAuQ29udGVudFR5cGUuTmFtZSB9fSBDb250ZW50PC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnQvbmV3JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgoKICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgIHt7IHJhbmdlIC5Db250ZW50VHlwZS5GaWVsZHMgfX0KCiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSI+e3sgLk5hbWUgfX08L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdTbWFsbCIgfX0KICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiU3RyaW5nQmlnIiB9fQogICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHBsYWNlaG9sZGVyPSJ7eyAuTmFtZSB9fSIgPjwvdGV4dGFyZWE+CiAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiSW5wdXRIVE1MIiB9fQogICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0naW5wdXQtaHRtbCcgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSdpbnB1dC1tYXJrZG93bicgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9ZmlsZSBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgbXVsdGlwbGU9ZmFsc2UgLz4KICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJEYXRlIiB9fQogICAgICAgICAgICAgIDxpbnB1dCBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPWRhdGUgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHBsYWNlaG9sZGVyPSJ7eyAuTmFtZSB9fSIgLz4KICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2UiIH19CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgIDxkaWFsb2c+CiAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8cD5TZWFyY2ggZm9yIGNvbnRlbnQgdG8gdXNlIGFzIHJlZmVyZW5jZS48L3A+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2VhcmNoLWN0Jz5Db250ZW50IHR5cGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3NlYXJjaC1jdCcgYXV0b2ZvY3VzIGNsYXNzPSdpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgY29udGVudCB0eXBlJyAvPgogICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2VhcmNoLWMnPkNvbnRlbnQgbmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0nc2VhcmNoLWMnIGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9tZW51PgogICAgICAgICAgICAgIDwvZGlhbG9nPgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2lucHV0LXJlZicgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgIDxkaWFsb2c+CiAgICAgICAgICAgICAgICA8bWVudT4KICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8Y2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgPHA+U2VhcmNoIGZvciBjb250ZW50IHRvIHVzZSBhcyByZWZlcmVuY2UuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvZm9jdXMgY2xhc3M9J2lucHV0LWNvbnRlbnR0eXBlJyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IHR5cGUnIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBjb250ZW50IG5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1sZWZ0IHR5cGU9YnV0dG9uIHZhbHVlPUNsZWFyIC8+CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9cmlnaHQgdHlwZT1idXR0b24gdmFsdWU9RG9uZSAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvbWVudT4KICAgICAgICAgICAgICA8L2RpYWxvZz4KICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Q3JlYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGRldGFpbHM+CiAgICAgICAgPHN1bW1hcnk+VXBkYXRlIHt7IC5Db250ZW50VHlwZS5OYW1lIH19IENvbnRlbnQgVHlwZTwvc3VtbWFyeT4KICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy9jb250ZW50dHlwZS91cGRhdGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPWNvbnRlbnR0eXBlIHZhbHVlPSJ7eyAuQ29udGVudFR5cGUuSUQgfX0iIC8+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgIDxsZWdlbmQ+Q29udGVudCB0eXBlIG5hbWU8L2xlZ2VuZD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0ndXBkYXRlLW5hbWUnPk5hbWU8L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCBpZD0ndXBkYXRlLW5hbWUnIGF1dG9mb2N1cyByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT1uYW1lIHBsYWNlaG9sZGVyPSJuYW1lIiB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0iIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgPGxlZ2VuZD5GaWVsZHM8L2xlZ2VuZD4KICAgICAgICAgIHt7IHJhbmdlICRpbmRleCwgJGl0ZW0gOj0gLkNvbnRlbnRUeXBlLkZpZWxkcyB9fQoKICAgICAgICAgICAge3sgaWYgZXEgJGluZGV4IDAgfX0KICAgICAgICAgICAgICA8ZGl2IGlkPSdmaXJzdC1maWVsZHNldCc+CiAgICAgICAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0iZmllbGRfdXBkYXRlX2lkX3t7IGluYyAkaW5kZXggfX0iIHZhbHVlPSJ7eyAuSUQgfX0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgcmVhZG9ubHk9InJlYWRvbmx5IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0iZmllbGRfdXBkYXRlX25hbWVfe3sgaW5jICRpbmRleCB9fSIgdmFsdWU9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAgPHNlbGVjdCB2YWx1ZT0ie3sgLlR5cGUgfX0iIHJlYWRvbmx5PSJyZWFkb25seSIgcmVxdWlyZWQgbmFtZT0iZmllbGRfdXBkYXRlX3R5cGVfe3sgaW5jICRpbmRleCB9fSI+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU+RmllbGQgVHlwZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlN0cmluZ0JpZyI+U3RyaW5nIEJpZzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJJbnB1dEhUTUwiPkhUTUw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iRmlsZSI+RmlsZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJEYXRlIj5EYXRlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZUxpc3QiPlJlZmVyZW5jZUxpc3Q8L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHR5cGU9YnV0dG9uIHZhbHVlPSdSZW1vdmUgRmllbGQnIC8+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9ImZpZWxkX3VwZGF0ZV9pZF97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLklEIH19IiAvPgogICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF91cGRhdGVfbmFtZV97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICA8c2VsZWN0IHZhbHVlPSJ7eyAuVHlwZSB9fSIgcmVhZG9ubHk9InJlYWRvbmx5IiByZXF1aXJlZCBuYW1lPSJmaWVsZF91cGRhdGVfdHlwZV97eyBpbmMgJGluZGV4IH19Ij4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT5GaWVsZCBUeXBlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIlN0cmluZ1NtYWxsIiB9fSAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIlN0cmluZ0JpZyIgfX0gICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJTdHJpbmdCaWciPlN0cmluZyBCaWc8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiSW5wdXRIVE1MIiB9fSAgICAgc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IklucHV0SFRNTCI+SFRNTDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8b3B0aW9uIHt7IGlmIGVxIC5UeXBlICJJbnB1dE1hcmtkb3duIiB9fSBzZWxlY3RlZCB7eyBlbHNlIH19IGRpc2FibGVkIHt7IGVuZCB9fSB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiRmlsZSIgfX0gICAgICAgICAgc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IkZpbGUiPkZpbGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiRGF0ZSIgfX0gICAgICAgICAgc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IkRhdGUiPkRhdGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiUmVmZXJlbmNlIiB9fSAgICAgc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19IHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJSZWZlcmVuY2VMaXN0Ij5SZWZlcmVuY2VMaXN0PC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0nUmVtb3ZlIEZpZWxkJyAvPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgPGJyPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICA8aW5wdXQgdHlwZT1idXR0b24gaWQ9J2FkZC1maWVsZGJ0bicgdmFsdWU9J0FkZCBBbm90aGVyIEZpZWxkJyAvPgogICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVVwZGF0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkRlbGV0ZSB7eyAuQ29udGVudFR5cGUuTmFtZSB9fSBDb250ZW50IFR5cGU8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvZGVsZXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RGVsZXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGgyPkJyb3dzZSB7eyAuQ29udGVudFR5cGUuTmFtZSB9fSBDb250ZW50PC9oMj4KICAgICAge3sgaWYgLkNvbnRlbnRMaXN0IH19CiAgICAgICAgPHVsPgogICAgICAgICAge3sgcmFuZ2UgLkNvbnRlbnRMaXN0IH19CiAgICAgICAgICAgIDxsaT4gCiAgICAgICAgICAgICAgPGEgaHJlZj0nL2NvbnRlbnQve3sgJC5TcGFjZS5JRCB9fS97eyAkLkNvbnRlbnRUeXBlLklEIH19L3t7IC5JRCB9fSc+CiAgICAgICAgICAgICAgICB7eyAoLk11c3RWYWx1ZUJ5TmFtZSAibmFtZSIpLlZhbHVlIH19CiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgPC91bD4KICAgICAge3sgZWxzZSB9fQogICAgICAgIDxwPk5vIGNvbnRlbnQgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIGEgY29udGVudCB0eXBlIG9mIHt7IC5Db250ZW50VHlwZS5OYW1lIH19PC9wPgogICAgICB7eyBlbmQgfX0KCiAgICA8L2FydGljbGU+CiAgICA8aHIvPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICA8c2NyaXB0IHNyYz0nLy91bnBrZy5jb20vdGlueW1jZUA1LjIuMC90aW55bWNlLm1pbi5qcyc+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Jy8vdW5wa2cuY29tL2F1dG9jb21wbGV0ZS5qc0AwLjM3LjEvZGlzdC9hdXRvY29tcGxldGUubWluLmpzJz48L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9zcGFjZS5qcyIgfX08L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9jb250ZW50LmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")



@@ 32,7 32,7 @@ func init() {

	tmpls["html/index.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjwhRE9DVFlQRSBodG1sPgo8aHRtbCBsYW5nPWVuPgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVM8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPWluZGV4IHN0eWxlPSdtYXgtd2lkdGg6IDYwMHB4Oyc+CiAgPHN0eWxlPnt7IHRlbXBsYXRlICJjc3MvbWFpbi5jc3MiIH19PC9zdHlsZT4KICA8bWFpbj4KICAgIHt7IHRlbXBsYXRlICJodG1sL19oZWFkZXIuaHRtbCIgJCB9fQogICAgPGhyLz4KICAgIDxhcnRpY2xlPgogICAgICB7eyBpZiAuVXNlciB9fQogICAgICAgIDxoMT5BY3Rpb25zPC9oMT4KICAgICAgICA8ZGV0YWlscz4KICAgICAgICAgIDxzdW1tYXJ5PkNyZWF0ZSBhIE5ldyBTcGFjZTwvc3VtbWFyeT4KICAgICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3NwYWNlL25ldycgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgIDxsYWJlbCBmb3I9J2NyZWF0ZS1uYW1lJz5OYW1lPC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSdjcmVhdGUtbmFtZScgYXV0b2ZvY3VzIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPW5hbWUgcGxhY2Vob2xkZXI9bmFtZSAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nY3JlYXRlLWRlc2MnPkRlc2NyaXB0aW9uPC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSdjcmVhdGUtZGVzYycgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9ZGVzYyBwbGFjZWhvbGRlcj1kZXNjcmlwdGlvbiAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUNyZWF0ZSAvPgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8YnI+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kZXRhaWxzPgogICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgPHN1bW1hcnk+TG9nb3V0PC9zdW1tYXJ5PgogICAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvdXNlci9sb2dvdXQnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICA8aW5wdXQgYXV0b2ZvY3VzIHR5cGU9c3VibWl0IHZhbHVlPUxvZ291dCAvPgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8YnI+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kZXRhaWxzPgogICAgICAgIDxicj4KICAgICAgICA8aDI+WW91ciBTcGFjZXM8L2gyPgogICAgICAgIHt7IGlmIC5TcGFjZXMgfX0KICAgICAgICAgIDx1bD4KICAgICAgICAgICAge3sgcmFuZ2UgLlNwYWNlcyB9fQogICAgICAgICAgICA8bGk+PGEgaHJlZj0iL3NwYWNlL3t7IC5JRCB9fSI+e3sgLk5hbWUgfX08L2E+PC9saT4KICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICA8L3VsPgogICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgIDxwPllvdSBoYXZlbid0IGNyZWF0ZWQgYW55IHNwYWNlcyB5ZXQuPC9wPgogICAgICAgIHt7IGVuZCB9fQogICAgICB7eyBlbHNlIH19CiAgICAgICAgPGgxPkFjY291bnQ8L2gxPgogICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgPHN1bW1hcnk+TG9naW48L3N1bW1hcnk+CiAgICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy91c2VyL2xvZ2luJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nbG9naW4tdXNlcm5hbWUnPlVzZXJuYW1lPC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSdsb2dpbi11c2VybmFtZScgYXV0b2NvbXBsZXRlPW9uIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPXVzZXJuYW1lIHBsYWNlaG9sZGVyPXVzZXJuYW1lIGF1dG9mb2N1cyAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nbG9naW4tcGFzc3dvcmQnPlBhc3N3b3JkPC9sYWJlbD4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSdsb2dpbi1wYXNzd29yZCcgYXV0b2NvbXBsZXRlPW9uIHJlcXVpcmVkIHR5cGU9cGFzc3dvcmQgbmFtZT1wYXNzd29yZCBwbGFjZWhvbGRlcj1wYXNzd29yZCAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUxvZ2luIC8+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgPGRldGFpbHM+CiAgICAgICAgICA8c3VtbWFyeT5TaWdudXA8L3N1bW1hcnk+CiAgICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy91c2VyL3NpZ251cCcgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICAgIDxsYWJlbCBmb3I9J3NpZ251cC11c2VybmFtZSc+VXNlcm5hbWU8L2xhYmVsPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3NpZ251cC11c2VybmFtZScgYXV0b2NvbXBsZXRlPW9uIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPXVzZXJuYW1lIHBsYWNlaG9sZGVyPXVzZXJuYW1lIGF1dG9mb2N1cyAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2lnbnVwLXBhc3N3b3JkJz5QYXNzd29yZDwvbGFiZWw+CiAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIDxpbnB1dCBpZD0nc2lnbnVwLXBhc3N3b3JkJyBhdXRvY29tcGxldGU9b24gcmVxdWlyZWQgdHlwZT1wYXNzd29yZCBuYW1lPXBhc3N3b3JkIHBsYWNlaG9sZGVyPXBhc3N3b3JkIC8+CiAgICAgICAgICAgICAgPGJyPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdzaWdudXAtdmVyaWZ5Jz5WZXJpZnk8L2xhYmVsPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3NpZ251cC12ZXJpZnknIGF1dG9jb21wbGV0ZT1vbiByZXF1aXJlZCB0eXBlPXBhc3N3b3JkIG5hbWU9dmVyaWZ5IHBsYWNlaG9sZGVyPXZlcmlmeSAvPgogICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICA8YnI+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVNpZ251cCAvPgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8YnI+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kZXRhaWxzPgogICAgICB7eyBlbmQgfX0KICAgIDwvYXJ0aWNsZT4KICAgIDxoci8+CiAgICB7eyB0ZW1wbGF0ZSAiaHRtbC9fZm9vdGVyLmh0bWwiIH19CiAgPC9tYWluPgo8L2JvZHk+Cgo8L2h0bWw+Cg==")

	tmpls["html/space.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+Cgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVMgfCB7eyAuU3BhY2UuTmFtZSB9fTwvdGl0bGU+CjwvaGVhZD4KCjxib2R5IGNsYXNzPXNwYWNlIHN0eWxlPSdtYXgtd2lkdGg6IDYwMHB4Oyc+CiAgPHN0eWxlPnt7IHRlbXBsYXRlICJjc3MvbWFpbi5jc3MiIH19PC9zdHlsZT4KICA8bWFpbj4KICAgIHt7IHRlbXBsYXRlICJodG1sL19oZWFkZXIuaHRtbCIgJCB9fQogICAgPGhyLz4KICAgIDxhcnRpY2xlPgoKICAgICAgPGgxPnt7IC5TcGFjZS5OYW1lIH19PC9oMT4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkNyZWF0ZSBDb250ZW50IFR5cGU8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvbmV3JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgIDxsZWdlbmQ+Q29udGVudCB0eXBlIG5hbWU8L2xlZ2VuZD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nY3JlYXRlLW5hbWUnPk5hbWU8L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCBpZD0nY3JlYXRlLW5hbWUnIGF1dG9mb2N1cyByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT1uYW1lIHBsYWNlaG9sZGVyPSJuYW1lIiAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgIDxsZWdlbmQ+RmllbGRzPC9sZWdlbmQ+CiAgICAgICAgICA8ZGl2IGlkPSdmaXJzdC1maWVsZHNldCc+CiAgICAgICAgICAgIDxpbnB1dCByZWFkb25seT0icmVhZG9ubHkiIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF9uYW1lXzEiIHZhbHVlPSJuYW1lIiAvPgogICAgICAgICAgICA8c2VsZWN0IHJlYWRvbmx5PSJyZWFkb25seSIgcmVxdWlyZWQgbmFtZT0iZmllbGRfdHlwZV8xIj4KICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPkZpZWxkIFR5cGU8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iU3RyaW5nQmlnIj5TdHJpbmcgQmlnPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRIVE1MIj5IVE1MPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJGaWxlIj5GaWxlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iRGF0ZSI+RGF0ZTwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iUmVmZXJlbmNlTGlzdCI+UmVmZXJlbmNlTGlzdDwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHR5cGU9YnV0dG9uIHZhbHVlPSdSZW1vdmUgRmllbGQnIC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxpbnB1dCB0eXBlPWJ1dHRvbiBpZD0nYWRkLWZpZWxkYnRuJyB2YWx1ZT0nQWRkIEFub3RoZXIgRmllbGQnIC8+CiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Q3JlYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGRldGFpbHM+CiAgICAgICAgPHN1bW1hcnk+Q3JlYXRlIFdlYmhvb2s8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvaG9vay9uZXcnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nd2ViaG9vay11cmwnPlVSTDwvbGFiZWw+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGlucHV0IGlkPSd3ZWJob29rLXVybCcgYXV0b2ZvY3VzIHJlcXVpcmVkIHR5cGU9dXJsIG5hbWU9dXJsIHBsYWNlaG9sZGVyPSdNdXN0IGVudGVyIGZ1bGwgVVJMIG9mIHRhcmdldCcgLz4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1DcmVhdGUgLz4KICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9mb3JtPgogICAgICA8L2RldGFpbHM+CgogICAgICA8ZGV0YWlscz4KICAgICAgICA8c3VtbWFyeT5EZWxldGUge3sgLlNwYWNlLk5hbWUgfX0gU3BhY2U8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvc3BhY2UvZGVsZXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPURlbGV0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkNvcHkgU3BhY2U8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvc3BhY2UvY29weScgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICA8bGFiZWwgZm9yPSdjcmVhdGUtbmFtZSc+TmFtZTwvbGFiZWw+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGlucHV0IGlkPSdjcmVhdGUtbmFtZScgYXV0b2ZvY3VzIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPW5hbWUgcGxhY2Vob2xkZXI9bmFtZSAvPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nY3JlYXRlLWRlc2MnPkRlc2NyaXB0aW9uPC9sYWJlbD4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8aW5wdXQgaWQ9J2NyZWF0ZS1kZXNjJyByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT1kZXNjIHBsYWNlaG9sZGVyPWRlc2NyaXB0aW9uIC8+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Q3JlYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGgyPkJyb3dzZSBDb250ZW50IEJ5IFR5cGU8L2gyPgogICAgICB7eyBpZiAuQ29udGVudFR5cGVzIH19CiAgICAgICAgPHVsPgogICAgICAgICAge3sgcmFuZ2UgLkNvbnRlbnRUeXBlcyB9fQogICAgICAgICAgICA8bGk+PGEgaHJlZj0nL2NvbnRlbnR0eXBlL3t7ICQuU3BhY2UuSUQgfX0ve3sgLklEIH19Jz57eyAuTmFtZSB9fTwvYT48L2xpPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgPC91bD4KICAgICAge3sgZWxzZSB9fQogICAgICAgIDxwPllvdSBoYXZlbid0IGNyZWF0ZWQgYW55IGNvbnRlbnQgdHlwZXMgeWV0LjwvcD4KICAgICAge3sgZW5kIH19CgogICAgICA8aDI+QnJvd3NlIFdlYmhvb2tzPC9oMj4KICAgICAge3sgaWYgLkhvb2tzfX0KICAgICAgICA8dWw+CiAgICAgICAgICB7eyByYW5nZSAuSG9va3N9fQogICAgICAgICAgICA8bGk+PGEgaHJlZj0nL2hvb2sve3sgJC5TcGFjZS5JRCB9fS97eyAuSUQgfX0nPnt7IC5VUkwgfX08L2E+PC9saT4KICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgIDwvdWw+CiAgICAgIHt7IGVsc2UgfX0KICAgICAgICA8cD5Zb3UgaGF2ZW4ndCBjcmVhdGVkIGFueSB3ZWJob29rcyB5ZXQuPC9wPgogICAgICB7eyBlbmQgfX0KCiAgICA8L2FydGljbGU+CiAgICA8aHIvPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9zcGFjZS5qcyIgfX08L3NjcmlwdD4KPC9ib2R5PgoKPC9odG1sPgo=")
	tmpls["html/space.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+Cgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVMgfCB7eyAuU3BhY2UuTmFtZSB9fTwvdGl0bGU+CjwvaGVhZD4KCjxib2R5IGNsYXNzPXNwYWNlIHN0eWxlPSdtYXgtd2lkdGg6IDYwMHB4Oyc+CiAgPHN0eWxlPnt7IHRlbXBsYXRlICJjc3MvbWFpbi5jc3MiIH19PC9zdHlsZT4KICA8bWFpbj4KICAgIHt7IHRlbXBsYXRlICJodG1sL19oZWFkZXIuaHRtbCIgJCB9fQogICAgPGhyLz4KICAgIDxhcnRpY2xlPgoKICAgICAgPGgxPnt7IC5TcGFjZS5OYW1lIH19PC9oMT4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkNyZWF0ZSBDb250ZW50IFR5cGU8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvbmV3JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgICA8YnI+CiAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgIDxsZWdlbmQ+Q29udGVudCB0eXBlIG5hbWU8L2xlZ2VuZD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nY3JlYXRlLW5hbWUnPk5hbWU8L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCBpZD0nY3JlYXRlLW5hbWUnIGF1dG9mb2N1cyByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT1uYW1lIHBsYWNlaG9sZGVyPSJuYW1lIiAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgIDxsZWdlbmQ+RmllbGRzPC9sZWdlbmQ+CiAgICAgICAgICA8ZGl2IGlkPSdmaXJzdC1maWVsZHNldCc+CiAgICAgICAgICAgIDxpbnB1dCByZWFkb25seT0icmVhZG9ubHkiIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF9uYW1lXzEiIHZhbHVlPSJuYW1lIiAvPgogICAgICAgICAgICA8c2VsZWN0IHJlYWRvbmx5PSJyZWFkb25seSIgcmVxdWlyZWQgbmFtZT0iZmllbGRfdHlwZV8xIj4KICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPkZpZWxkIFR5cGU8L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSJTdHJpbmdTbWFsbCI+U3RyaW5nIFNtYWxsPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iU3RyaW5nQmlnIj5TdHJpbmcgQmlnPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRIVE1MIj5IVE1MPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRNYXJrZG93biI+TWFya2Rvd248L29wdGlvbj4KICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJGaWxlIj5GaWxlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iRGF0ZSI+RGF0ZTwvb3B0aW9uPgogICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IlJlZmVyZW5jZSI+UmVmZXJlbmNlPC9vcHRpb24+CiAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iUmVmZXJlbmNlTGlzdCI+UmVmZXJlbmNlTGlzdDwvb3B0aW9uPgogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIHR5cGU9YnV0dG9uIHZhbHVlPSdSZW1vdmUgRmllbGQnIC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxpbnB1dCB0eXBlPWJ1dHRvbiBpZD0nYWRkLWZpZWxkYnRuJyB2YWx1ZT0nQWRkIEFub3RoZXIgRmllbGQnIC8+CiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Q3JlYXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGRldGFpbHM+CiAgICAgICAgPHN1bW1hcnk+Q3JlYXRlIFdlYmhvb2s8L3N1bW1hcnk+CiAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvaG9vay9uZXcnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nd2ViaG9vay11cmwnPlVSTDwvbGFiZWw+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGlucHV0IGlkPSd3ZWJob29rLXVybCcgYXV0b2ZvY3VzIHJlcXVpcmVkIHR5cGU9dXJsIG5hbWU9dXJsIHBsYWNlaG9sZGVyPSdNdXN0IGVudGVyIGZ1bGwgVVJMIG9mIHRhcmdldCcgLz4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1DcmVhdGUgLz4KICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICA8YnI+CiAgICAgICAgPC9mb3JtPgogICAgICA8L2RldGFpbHM+CgogICAgICA8ZGV0YWlscz4KICAgICAgICA8c3VtbWFyeT5Db3B5IFNwYWNlPC9zdW1tYXJ5PgogICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3NwYWNlL2NvcHknIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgIDxicj4KICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgPGxhYmVsIGZvcj0nY3JlYXRlLW5hbWUnPk5hbWU8L2xhYmVsPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxpbnB1dCBpZD0nY3JlYXRlLW5hbWUnIGF1dG9mb2N1cyByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT1uYW1lIHBsYWNlaG9sZGVyPW5hbWUgLz4KICAgICAgICAgICAgPGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9J2NyZWF0ZS1kZXNjJz5EZXNjcmlwdGlvbjwvbGFiZWw+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGlucHV0IGlkPSdjcmVhdGUtZGVzYycgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9ZGVzYyBwbGFjZWhvbGRlcj1kZXNjcmlwdGlvbiAvPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUNyZWF0ZSAvPgogICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgIDxicj4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGV0YWlscz4KCiAgICAgIDxkZXRhaWxzPgogICAgICAgIDxzdW1tYXJ5PkRlbGV0ZSB7eyAuU3BhY2UuTmFtZSB9fSBTcGFjZTwvc3VtbWFyeT4KICAgICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy9zcGFjZS9kZWxldGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgPGJyPgogICAgICAgICAgPGZpZWxkc2V0PgogICAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RGVsZXRlIC8+CiAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgPGJyPgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kZXRhaWxzPgoKICAgICAgPGgyPkJyb3dzZSBDb250ZW50IEJ5IFR5cGU8L2gyPgogICAgICB7eyBpZiAuQ29udGVudFR5cGVzIH19CiAgICAgICAgPHVsPgogICAgICAgICAge3sgcmFuZ2UgLkNvbnRlbnRUeXBlcyB9fQogICAgICAgICAgICA8bGk+PGEgaHJlZj0nL2NvbnRlbnR0eXBlL3t7ICQuU3BhY2UuSUQgfX0ve3sgLklEIH19Jz57eyAuTmFtZSB9fTwvYT48L2xpPgogICAgICAgICAge3sgZW5kIH19CiAgICAgICAgPC91bD4KICAgICAge3sgZWxzZSB9fQogICAgICAgIDxwPllvdSBoYXZlbid0IGNyZWF0ZWQgYW55IGNvbnRlbnQgdHlwZXMgeWV0LjwvcD4KICAgICAge3sgZW5kIH19CgogICAgICA8aDI+QnJvd3NlIFdlYmhvb2tzPC9oMj4KICAgICAge3sgaWYgLkhvb2tzfX0KICAgICAgICA8dWw+CiAgICAgICAgICB7eyByYW5nZSAuSG9va3N9fQogICAgICAgICAgICA8bGk+PGEgaHJlZj0nL2hvb2sve3sgJC5TcGFjZS5JRCB9fS97eyAuSUQgfX0nPnt7IC5VUkwgfX08L2E+PC9saT4KICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgIDwvdWw+CiAgICAgIHt7IGVsc2UgfX0KICAgICAgICA8cD5Zb3UgaGF2ZW4ndCBjcmVhdGVkIGFueSB3ZWJob29rcyB5ZXQuPC9wPgogICAgICB7eyBlbmQgfX0KCiAgICA8L2FydGljbGU+CiAgICA8aHIvPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9zcGFjZS5qcyIgfX08L3NjcmlwdD4KPC9ib2R5PgoKPC9odG1sPgo=")

	tmpls["js/content.js"] = tostring("Ly8gU2V0dXAgaW5wdXRzIGZvciBjb250ZW50IGNyZWF0ZS91cGRhdGUuCihmdW5jdGlvbigpIHsgCgogIC8vIEhUTUwKICB0aW55bWNlLmluaXQoeyAKICAgIHNlbGVjdG9yOiAndGV4dGFyZWEuaW5wdXQtaHRtbCcsCiAgICBwbHVnaW5zOiAiY29kZSIsCiAgICBmb3JjZWRfcm9vdF9ibG9jayA6ICIiLCAvKiBObyB3cmFwcGluZyBwYXJhZ3JhcGggdGFnLiAqLwogICAgLy8gc3RhdHVzYmFyOiBmYWxzZSwKICAgIHNldHVwOiBmdW5jdGlvbihpdGVtKSB7IAogICAgICBpdGVtLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsgCiAgICAgICAgaXRlbS50YXJnZXRFbG0udmFsdWUgPSBpdGVtLmdldENvbnRlbnQoKQogICAgICB9KQogICAgfQogIH0pCgogIC8vIE1BUktET1dOCiAgdGlueW1jZS5pbml0KHsKICAgIHNlbGVjdG9yOiAidGV4dGFyZWEuaW5wdXQtbWFya2Rvd24iLAogICAgcGx1Z2luOiAndGV4dHBhdHRlcm4nLAogICAgZXh0ZXJuYWxfcGx1Z2luczogeyAKICAgICAgdGV4dHBhdHRlcm46ICcvL3VucGtnLmNvbS90aW55bWNlQDUuMi4wL3BsdWdpbnMvdGV4dHBhdHRlcm4vcGx1Z2luLm1pbi5qcycKICAgIH0sCiAgICBtZW51YmFyOiBmYWxzZSwKICAgIHRvb2xiYXI6ICd1bmRvIHJlZG8nLAogICAgLy8gc3RhdHVzYmFyOiBmYWxzZSwKICAgIHRleHRwYXR0ZXJuX3BhdHRlcm5zOiBbCiAgICAgIHtzdGFydDogJyonLCBlbmQ6ICcqJywgZm9ybWF0OiAnaXRhbGljJ30sCiAgICAgIHtzdGFydDogJyoqJywgZW5kOiAnKionLCBmb3JtYXQ6ICdib2xkJ30sCiAgICAgIHtzdGFydDogJ18nLCBlbmQ6ICdfJywgZm9ybWF0OiAnYm9sZCd9LAogICAgICB7c3RhcnQ6ICcjJywgZm9ybWF0OiAnaDEnfSwKICAgICAge3N0YXJ0OiAnIyMnLCBmb3JtYXQ6ICdoMid9LAogICAgICB7c3RhcnQ6ICcjIyMnLCBmb3JtYXQ6ICdoMyd9LAogICAgICB7c3RhcnQ6ICcjIyMjJywgZm9ybWF0OiAnaDQnfSwKICAgICAge3N0YXJ0OiAnIyMjIyMnLCBmb3JtYXQ6ICdoNSd9LAogICAgICB7c3RhcnQ6ICcjIyMjIyMnLCBmb3JtYXQ6ICdoNid9LAogICAgICB7c3RhcnQ6ICcxLiAnLCBjbWQ6ICdJbnNlcnRPcmRlcmVkTGlzdCd9LAogICAgICB7c3RhcnQ6ICcqICcsIGNtZDogJ0luc2VydFVub3JkZXJlZExpc3QnfSwKICAgICAge3N0YXJ0OiAnLSAnLCBjbWQ6ICdJbnNlcnRVbm9yZGVyZWRMaXN0J30KICAgIF0sCiAgICBzZXR1cDogZnVuY3Rpb24oaXRlbSkgeyAKICAgICAgaXRlbS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7IAogICAgICAgIGl0ZW0udGFyZ2V0RWxtLnZhbHVlID0gaXRlbS5nZXRDb250ZW50KCkKICAgICAgfSkKICAgIH0KICB9KTsKCiAgLy8gUkVGRVJFTkNFCiAgdmFyIHJlZnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJmb3JtIGRpYWxvZyIpCiAgdmFyIG1lbnVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZm9ybSBkaWFsb2cgbWVudSIpCiAgdmFyIHJlZmJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuaW5wdXQtcmVmIikKICB2YXIgdG9idG5zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm91dHB1dC1yZWYiKQogIGZvciAoaSA9IDA7IGkgPCByZWZzLmxlbmd0aDsgaSsrKSB7IAogICAgKGZ1bmN0aW9uKGJ0biwgbWVudSwgZGlhbG9nLCBvdXRwdXQpIHsgCiAgICAgIHZhciBpc0xpc3QgPSBvdXRwdXQuZ2V0QXR0cmlidXRlKCJuYW1lIikuaW5kZXhPZigiUmVmZXJlbmNlTGlzdCIpICE9IC0xCiAgICAgIHZhciBjbGVhckJ0biA9IGRpYWxvZy5xdWVyeVNlbGVjdG9yKCIubGVmdCIpCiAgICAgIHZhciBkb25lQnRuID0gZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoIi5yaWdodCIpCgogICAgICB2YXIgY2hvc2VuQ29udGVudFR5cGVJRCAvLyB1c2VkIGJ5IGJvdGgKICAgICAgdmFyIGNob3NlbkNvbnRlbnRJRHMgPSBbXSAvLyBvbmx5IHVzZWQgYmUgcmVmbGlzdAogICAgICB2YXIgY2hvc2VuQ29udGVudE5hbWVzID0gW10gLy8gb25seSB1c2VkIGJlIHJlZmxpc3QKCiAgICAgIC8vIE9QRU4KICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgeyAKICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICAgICAgZGlhbG9nLnNob3dNb2RhbCgpCiAgICAgIH0pCgogICAgICAvLyBDTE9TRQogICAgICBkaWFsb2cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7IAogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgICBpZiAoaXNMaXN0KSB7IAogICAgICAgICAgLy8gRG9uJ3QgbGV0IHJlZmxpc3QgaW5wdXQgY2xvc2UgYnkgb2ZmIGNsaWNrLCB1c2VyIG11c3QgY2hvb3NlIHRvCiAgICAgICAgICAvLyBjbGVhciBpbnB1dCB0byBjbG9zZSwgb3IgYmUgZG9uZSB0byBjbG9zZS4KICAgICAgICAgIHJldHVybiAKICAgICAgICB9CiAgICAgICAgZGlhbG9nLmNsb3NlKCkKICAgICAgfSkKCiAgICAgIC8vIFNUT1AKICAgICAgbWVudS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsgCiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICAgIGUucHJldmVudERlZmF1bHQoKQogICAgICB9KQoKICAgICAgaWYgKGlzTGlzdCkgewogICAgICAgIC8vIENMRUFSCiAgICAgICAgY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbGVhckJ0bkhhbmRsZSkKICAgICAgICBmdW5jdGlvbiBjbGVhckJ0bkhhbmRsZShlKSB7IAogICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCiAgICAgICAgICBvdXRwdXQudmFsdWUgPSAnJwogICAgICAgICAgYnRuLnZhbHVlID0gJ09wZW4nCiAgICAgICAgICBjaG9zZW5Db250ZW50SURzID0gW10KICAgICAgICAgIGNob3NlbkNvbnRlbnROYW1lcyA9IFtdCiAgICAgICAgICBkaWFsb2cuY2xvc2UoKQogICAgICAgIH0KCiAgICAgICAgLy8gRE9ORQogICAgICAgIGRvbmVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7IAogICAgICAgICAgaWYgKGNob3NlbkNvbnRlbnRJRHMubGVuZ3RoIDwgMSkgewogICAgICAgICAgICByZXR1cm4gY2xlYXJCdG5IYW5kbGUoZSkKICAgICAgICAgIH0KICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKQogICAgICAgICAgb3V0cHV0LnZhbHVlID0gY2hvc2VuQ29udGVudElEcy5qb2luKCctJykKICAgICAgICAgIGJ0bi52YWx1ZSA9IGNob3NlbkNvbnRlbnROYW1lcy5qb2luKCcsICcpCiAgICAgICAgICBjaG9zZW5Db250ZW50SURzID0gW10KICAgICAgICAgIGNob3NlbkNvbnRlbnROYW1lcyA9IFtdCiAgICAgICAgICBkaWFsb2cuY2xvc2UoKQogICAgICAgIH0pCiAgICAgIH0KCiAgICAgIC8vIElOUFVUUyBFVkVOVFMgQU5EIFJFU1VMVFMKICAgICAgdmFyIGlucHV0cyA9IGRpYWxvZy5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpCiAgICAgIHZhciBjb250ZW50dHlwZSA9IGlucHV0c1swXQogICAgICB2YXIgY29udGVudCA9IGlucHV0c1sxXQoKICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgYXV0b3NlbGVjdDogdHJ1ZSwKICAgICAgICBhdXRvc2VsZWN0T25CbHVyOiB0cnVlLCAKICAgICAgICB0YWJBdXRvY29tcGxldGU6IHRydWUsCiAgICAgICAgLy8gY2xlYXJPblNlbGVjdGVkOiB0cnVlLAogICAgICAgIGhpbnQ6IGZhbHNlCiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGdldG9wdHModXJsLCB0cmFuc2Zvcm0sIGRpc3BsYXlLZXkpIHsgCiAgICAgICAgdmFyIGNvbnRlbnR0eXBlQWJvcnQgPSBmdW5jdGlvbigpIHt9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRpc3BsYXlLZXk6IGRpc3BsYXlLZXksCiAgICAgICAgICBzb3VyY2U6IGZ1bmN0aW9uKHF1ZXJ5LCBjYikgeyAKICAgICAgICAgICAgY2IoW10pCiAgICAgICAgICAgIGNvbnRlbnR0eXBlQWJvcnQoKQogICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCkKICAgICAgICAgICAgY29udGVudHR5cGVBYm9ydCA9IGZ1bmN0aW9uKCkgeyByZXEuYWJvcnQoKSB9IAogICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPSA0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyAhPSAyMDApIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlVGV4dCAhPSAiIikgewogICAgICAgICAgICAgICAgICBhbGVydCh0aGlzLnJlc3BvbnNlVGV4dCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNiKFtdKQogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICB0cnkgeyAKICAgICAgICAgICAgICAgIGNiKHRyYW5zZm9ybShKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KSkpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoKGUpIHsgCiAgICAgICAgICAgICAgICB2YXIgbXNnID0gZS50b1N0cmluZygpCiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh7ZSxtc2d9KQogICAgICAgICAgICAgICAgaWYgKG1zZyAhPSAiIikgeyAvLyBDYW5jZWxsZWQgcmVxdWVzdHMgaGl0IHRoaXMuCiAgICAgICAgICAgICAgICAgIGFsZXJ0KG1zZykKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCgpICsgcXVlcnksIHRydWUpCiAgICAgICAgICAgIHJlcS5zZW5kKCkKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBjb250ZW50dHlwZU9wdHMgPSBnZXRvcHRzKAogICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gJy9jb250ZW50dHlwZS9zZWFyY2g/c3BhY2U9e3sgLlNwYWNlLklEIH19JnF1ZXJ5PSc7IH0sIAogICAgICAgIGZ1bmN0aW9uKGRhdGEpIHsgcmV0dXJuIGRhdGEgfSwKICAgICAgICAnQ29udGVudFR5cGVOYW1lJwogICAgICApCgogICAgICB3aW5kb3cuYXV0b2NvbXBsZXRlKGNvbnRlbnR0eXBlLCBvcHRzLCBbY29udGVudHR5cGVPcHRzXSkub24oJ2F1dG9jb21wbGV0ZTpzZWxlY3RlZCcsIG9uQ29udGVudFR5cGVTZWxlY3RlZCkKICAgICAgZnVuY3Rpb24gb25Db250ZW50VHlwZVNlbGVjdGVkKGUsIGl0ZW0sIGRhdGFzZXQsIGN0eCkgewogICAgICAgIGNob3NlbkNvbnRlbnRUeXBlSUQgPSBpdGVtLkNvbnRlbnRUeXBlSUQKICAgICAgICBjb250ZW50LmRpc2FibGVkID0gZmFsc2UKICAgICAgfQoKICAgICAgdmFyIGNvbnRlbnRPcHRzID0gZ2V0b3B0cygKICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuICcvY29udGVudC9zZWFyY2g/c3BhY2U9e3sgLlNwYWNlLklEIH19JmNvbnRlbnR0eXBlPScgKyBjaG9zZW5Db250ZW50VHlwZUlEICsgJyZxdWVyeT0nOyB9LCAKICAgICAgICBmdW5jdGlvbihkYXRhKSB7IAogICAgICAgICAgLy8gQmlnIGhhY2suCiAgICAgICAgICBkYXRhID0gZGF0YSA/IGRhdGEgOiBbXQogICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsgLy8gVGhpcyByZXNwb25zZSBpcyBwYWdlZCwgZG9uJ3Qgd29ycnkgYWJvdXQgT14yLiBNYXggb2YgMjAgaXRlbXMuCiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBkYXRhW2ldLkNvbnRlbnRWYWx1ZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICBpZiAoZGF0YVtpXS5Db250ZW50VmFsdWVzW2pdLkZpZWxkTmFtZSA9PSAibmFtZSIpIHsgLy8gV2UncmUgZ3VhcmFudGVlZCB0byBoYXZlIHRoaXMuCiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFbaV0sIGRhdGFbaV0uQ29udGVudFZhbHVlc1tqXSkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgfSwKICAgICAgICAnRmllbGRWYWx1ZScKICAgICAgKQoKICAgICAgLy8gVE9ETzogV2VpcmQgYmVoYXZpb3IgaGVyZSwgd2h5IGRvIEkgaGF2ZSB0byBpbmxpbmUgdGhpcyBjbGVhciBvbgogICAgICAvLyBzZWxlY3RlZD8gV2h5IGNhbid0IGl0IGV4aXN0cyBpbiBjb250ZW50T3B0cz8KICAgICAgd2luZG93LmF1dG9jb21wbGV0ZShjb250ZW50LCBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7Y2xlYXJPblNlbGVjdGVkOnRydWV9KSwgW2NvbnRlbnRPcHRzXSkub24oJ2F1dG9jb21wbGV0ZTpzZWxlY3RlZCcsIG9uQ29udGVudFNlbGVjdGVkKQogICAgICBmdW5jdGlvbiBvbkNvbnRlbnRTZWxlY3RlZChlLCBpdGVtLCBkYXRhc2V0LCBjdHgpIHsKICAgICAgICBpZiAoaXNMaXN0KSB7CiAgICAgICAgICBjaG9zZW5Db250ZW50SURzLnB1c2goaXRlbS5Db250ZW50SUQpCiAgICAgICAgICBjaG9zZW5Db250ZW50TmFtZXMucHVzaChpdGVtLkZpZWxkVmFsdWUpCiAgICAgICAgICBidG4udmFsdWUgPSBjaG9zZW5Db250ZW50TmFtZXMuam9pbignLCAnKQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIG91dHB1dC52YWx1ZSA9IGl0ZW0uQ29udGVudElECiAgICAgICAgICBidG4udmFsdWUgPSBpdGVtLkZpZWxkVmFsdWUKICAgICAgICAgIGRpYWxvZy5jbG9zZSgpCiAgICAgICAgfQogICAgICB9CgogICAgfSkocmVmYnRuc1tpXSwgbWVudXNbaV0sIHJlZnNbaV0sIHRvYnRuc1tpXSkKICB9Cgp9KSgpOwo=")