45931 lines
3.3 MiB
45931 lines
3.3 MiB
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<title>Tarifs de location du linge — SCI Dubuval — Été 2020</title>
|
||
<meta charset="UTF-8"/>
|
||
<style type="text/css">
|
||
|
||
/* <![CDATA[ */
|
||
body,div,table,thead,tbody,tfoot,tr,th,td,p {color: darkslategrey; font-family:Arial; font-size:medium;}
|
||
table.montablo {border:0; border-collapse: collapse}
|
||
table.montablo tr td {border: 1px solid; text-align: center; padding: 5px}
|
||
table.montablo tr.gras td {font-weight: bold; background-color: darkslategrey; color: mediumturquoise}
|
||
td.gras {font-weight: bold; background-color: darkslategrey; color: mediumturquoise}
|
||
|
||
/* ]]> */
|
||
|
||
</style>
|
||
</head>
|
||
<body onpageshow="compute()">
|
||
<script>
|
||
|
||
//<![CDATA[
|
||
//# 1 "mechanic.bc.runtime.js"
|
||
// Generated by js_of_ocaml 3.6.0
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
function caml_int64_is_zero(x){return + x.isZero()}
|
||
function caml_str_repeat(n,s)
|
||
{if(n == 0)return "";
|
||
if(s.repeat)return s.repeat(n);
|
||
var r="",l=0;
|
||
for(;;)
|
||
{if(n & 1)r += s;
|
||
n >>= 1;
|
||
if(n == 0)return r;
|
||
s += s;
|
||
l++;
|
||
if(l == 9)s.slice(0,1)}}
|
||
var caml_int64_offset=Math.pow(2,- 24);
|
||
function caml_raise_constant(tag){throw tag}
|
||
var caml_global_data=[0];
|
||
function caml_raise_zero_divide()
|
||
{caml_raise_constant(caml_global_data.Division_by_zero)}
|
||
function MlInt64(lo,mi,hi)
|
||
{this.lo = lo & 0xffffff;this.mi = mi & 0xffffff;this.hi = hi & 0xffff}
|
||
MlInt64.prototype.caml_custom = "_j";
|
||
MlInt64.prototype.copy
|
||
=
|
||
function(){return new MlInt64(this.lo,this.mi,this.hi)};
|
||
MlInt64.prototype.ucompare
|
||
=
|
||
function(x)
|
||
{if(this.hi > x.hi)return 1;
|
||
if(this.hi < x.hi)return - 1;
|
||
if(this.mi > x.mi)return 1;
|
||
if(this.mi < x.mi)return - 1;
|
||
if(this.lo > x.lo)return 1;
|
||
if(this.lo < x.lo)return - 1;
|
||
return 0};
|
||
MlInt64.prototype.compare
|
||
=
|
||
function(x)
|
||
{var hi=this.hi << 16,xhi=x.hi << 16;
|
||
if(hi > xhi)return 1;
|
||
if(hi < xhi)return - 1;
|
||
if(this.mi > x.mi)return 1;
|
||
if(this.mi < x.mi)return - 1;
|
||
if(this.lo > x.lo)return 1;
|
||
if(this.lo < x.lo)return - 1;
|
||
return 0};
|
||
MlInt64.prototype.neg
|
||
=
|
||
function()
|
||
{var lo=- this.lo,mi=- this.mi + (lo >> 24),hi=- this.hi + (mi >> 24);
|
||
return new MlInt64(lo,mi,hi)};
|
||
MlInt64.prototype.add
|
||
=
|
||
function(x)
|
||
{var
|
||
lo=this.lo + x.lo,
|
||
mi=this.mi + x.mi + (lo >> 24),
|
||
hi=this.hi + x.hi + (mi >> 24);
|
||
return new MlInt64(lo,mi,hi)};
|
||
MlInt64.prototype.sub
|
||
=
|
||
function(x)
|
||
{var
|
||
lo=this.lo - x.lo,
|
||
mi=this.mi - x.mi + (lo >> 24),
|
||
hi=this.hi - x.hi + (mi >> 24);
|
||
return new MlInt64(lo,mi,hi)};
|
||
MlInt64.prototype.mul
|
||
=
|
||
function(x)
|
||
{var
|
||
lo=this.lo * x.lo,
|
||
mi=(lo * caml_int64_offset | 0) + this.mi * x.lo + this.lo * x.mi,
|
||
hi=
|
||
(mi * caml_int64_offset | 0)
|
||
+
|
||
this.hi
|
||
*
|
||
x.lo
|
||
+
|
||
this.mi
|
||
*
|
||
x.mi
|
||
+
|
||
this.lo
|
||
*
|
||
x.hi;
|
||
return new MlInt64(lo,mi,hi)};
|
||
MlInt64.prototype.isZero
|
||
=
|
||
function(){return (this.lo | this.mi | this.hi) == 0};
|
||
MlInt64.prototype.isNeg = function(){return this.hi << 16 < 0};
|
||
MlInt64.prototype.and
|
||
=
|
||
function(x)
|
||
{return new MlInt64(this.lo & x.lo,this.mi & x.mi,this.hi & x.hi)};
|
||
MlInt64.prototype.or
|
||
=
|
||
function(x)
|
||
{return new MlInt64(this.lo | x.lo,this.mi | x.mi,this.hi | x.hi)};
|
||
MlInt64.prototype.xor
|
||
=
|
||
function(x)
|
||
{return new MlInt64(this.lo ^ x.lo,this.mi ^ x.mi,this.hi ^ x.hi)};
|
||
MlInt64.prototype.shift_left
|
||
=
|
||
function(s)
|
||
{s = s & 63;
|
||
if(s == 0)return this;
|
||
if(s < 24)
|
||
return new
|
||
MlInt64
|
||
(this.lo << s,
|
||
this.mi << s | this.lo >> 24 - s,
|
||
this.hi << s | this.mi >> 24 - s);
|
||
if(s < 48)
|
||
return new
|
||
MlInt64
|
||
(0,this.lo << s - 24,this.mi << s - 24 | this.lo >> 48 - s);
|
||
return new MlInt64(0,0,this.lo << s - 48)};
|
||
MlInt64.prototype.shift_right_unsigned
|
||
=
|
||
function(s)
|
||
{s = s & 63;
|
||
if(s == 0)return this;
|
||
if(s < 24)
|
||
return new
|
||
MlInt64
|
||
(this.lo >> s | this.mi << 24 - s,
|
||
this.mi >> s | this.hi << 24 - s,
|
||
this.hi >> s);
|
||
if(s < 48)
|
||
return new
|
||
MlInt64
|
||
(this.mi >> s - 24 | this.hi << 48 - s,this.hi >> s - 24,0);
|
||
return new MlInt64(this.hi >> s - 48,0,0)};
|
||
MlInt64.prototype.shift_right
|
||
=
|
||
function(s)
|
||
{s = s & 63;
|
||
if(s == 0)return this;
|
||
var h=this.hi << 16 >> 16;
|
||
if(s < 24)
|
||
return new
|
||
MlInt64
|
||
(this.lo >> s | this.mi << 24 - s,
|
||
this.mi >> s | h << 24 - s,
|
||
this.hi << 16 >> s >>> 16);
|
||
var sign=this.hi << 16 >> 31;
|
||
if(s < 48)
|
||
return new
|
||
MlInt64
|
||
(this.mi >> s - 24 | this.hi << 48 - s,
|
||
this.hi << 16 >> s - 24 >> 16,
|
||
sign & 0xffff);
|
||
return new MlInt64(this.hi << 16 >> s - 32,sign,sign)};
|
||
MlInt64.prototype.lsl1
|
||
=
|
||
function()
|
||
{this.hi = this.hi << 1 | this.mi >> 23;
|
||
this.mi = (this.mi << 1 | this.lo >> 23) & 0xffffff;
|
||
this.lo = this.lo << 1 & 0xffffff};
|
||
MlInt64.prototype.lsr1
|
||
=
|
||
function()
|
||
{this.lo = (this.lo >>> 1 | this.mi << 23) & 0xffffff;
|
||
this.mi = (this.mi >>> 1 | this.hi << 23) & 0xffffff;
|
||
this.hi = this.hi >>> 1};
|
||
MlInt64.prototype.udivmod
|
||
=
|
||
function(x)
|
||
{var
|
||
offset=0,
|
||
modulus=this.copy(),
|
||
divisor=x.copy(),
|
||
quotient=new MlInt64(0,0,0);
|
||
while(modulus.ucompare(divisor) > 0){offset++;divisor.lsl1()}
|
||
while(offset >= 0)
|
||
{offset--;
|
||
quotient.lsl1();
|
||
if(modulus.ucompare(divisor) >= 0)
|
||
{quotient.lo++;modulus = modulus.sub(divisor)}
|
||
divisor.lsr1()}
|
||
return {quotient:quotient,modulus:modulus}};
|
||
MlInt64.prototype.div
|
||
=
|
||
function(y)
|
||
{var x=this;
|
||
if(y.isZero())caml_raise_zero_divide();
|
||
var sign=x.hi ^ y.hi;
|
||
if(x.hi & 0x8000)x = x.neg();
|
||
if(y.hi & 0x8000)y = y.neg();
|
||
var q=x.udivmod(y).quotient;
|
||
if(sign & 0x8000)q = q.neg();
|
||
return q};
|
||
MlInt64.prototype.mod
|
||
=
|
||
function(y)
|
||
{var x=this;
|
||
if(y.isZero())caml_raise_zero_divide();
|
||
var sign=x.hi;
|
||
if(x.hi & 0x8000)x = x.neg();
|
||
if(y.hi & 0x8000)y = y.neg();
|
||
var r=x.udivmod(y).modulus;
|
||
if(sign & 0x8000)r = r.neg();
|
||
return r};
|
||
MlInt64.prototype.toInt = function(){return this.lo | this.mi << 24};
|
||
MlInt64.prototype.toFloat
|
||
=
|
||
function()
|
||
{return (this.hi << 16)
|
||
*
|
||
Math.pow(2,32)
|
||
+
|
||
this.mi
|
||
*
|
||
Math.pow(2,24)
|
||
+
|
||
this.lo};
|
||
MlInt64.prototype.toArray
|
||
=
|
||
function()
|
||
{return [this.hi >> 8,
|
||
this.hi & 0xff,
|
||
this.mi >> 16,
|
||
this.mi >> 8 & 0xff,
|
||
this.mi & 0xff,
|
||
this.lo >> 16,
|
||
this.lo >> 8 & 0xff,
|
||
this.lo & 0xff]};
|
||
MlInt64.prototype.lo32
|
||
=
|
||
function(){return this.lo | (this.mi & 0xff) << 24};
|
||
MlInt64.prototype.hi32
|
||
=
|
||
function(){return this.mi >>> 8 & 0xffff | this.hi << 16};
|
||
function caml_int64_of_int32(x)
|
||
{return new MlInt64(x & 0xffffff,x >> 24 & 0xffffff,x >> 31 & 0xffff)}
|
||
function caml_int64_to_int32(x){return x.toInt()}
|
||
function caml_int64_is_negative(x){return + x.isNeg()}
|
||
function caml_int64_neg(x){return x.neg()}
|
||
function caml_subarray_to_jsbytes(a,i,len)
|
||
{var f=String.fromCharCode;
|
||
if(i == 0 && len <= 4096 && len == a.length)return f.apply(null,a);
|
||
var s="";
|
||
for(;0 < len;i += 1024,len -= 1024)
|
||
s += f.apply(null,a.slice(i,i + Math.min(len,1024)));
|
||
return s}
|
||
function caml_convert_string_to_bytes(s)
|
||
{if(s.t == 2)
|
||
s.c += caml_str_repeat(s.l - s.c.length,"\0");
|
||
else
|
||
s.c = caml_subarray_to_jsbytes(s.c,0,s.c.length);
|
||
s.t = 0}
|
||
function caml_jsbytes_of_string(s)
|
||
{if((s.t & 6) != 0)caml_convert_string_to_bytes(s);return s.c}
|
||
function caml_raise_with_arg(tag,arg){throw [0,tag,arg]}
|
||
function jsoo_is_ascii(s)
|
||
{if(s.length < 24)
|
||
{for(var i=0;i < s.length;i++)if(s.charCodeAt(i) > 127)return false;
|
||
return true}
|
||
else
|
||
return ! /[^\x00-\x7f]/.test(s)}
|
||
function caml_utf16_of_utf8(s)
|
||
{for(var b="",t="",c,c1,c2,v,i=0,l=s.length;i < l;i++)
|
||
{c1 = s.charCodeAt(i);
|
||
if(c1 < 0x80)
|
||
{for(var j=i + 1;j < l && (c1 = s.charCodeAt(j)) < 0x80;j++);
|
||
if(j - i > 512)
|
||
{t.substr(0,1);b += t;t = "";b += s.slice(i,j)}
|
||
else
|
||
t += s.slice(i,j);
|
||
if(j == l)break;
|
||
i = j}
|
||
v = 1;
|
||
if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128)
|
||
{c = c2 + (c1 << 6);
|
||
if(c1 < 0xe0)
|
||
{v = c - 0x3080;if(v < 0x80)v = 1}
|
||
else
|
||
{v = 2;
|
||
if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128)
|
||
{c = c2 + (c << 6);
|
||
if(c1 < 0xf0)
|
||
{v = c - 0xe2080;
|
||
if(v < 0x800 || v >= 0xd7ff && v < 0xe000)v = 2}
|
||
else
|
||
{v = 3;
|
||
if
|
||
(++i
|
||
<
|
||
l
|
||
&&
|
||
((c2 = s.charCodeAt(i)) & - 64)
|
||
==
|
||
128
|
||
&&
|
||
c1
|
||
<
|
||
0xf5)
|
||
{v = c2 - 0x3c82080 + (c << 6);
|
||
if(v < 0x10000 || v > 0x10ffff)v = 3}}}}}
|
||
if(v < 4)
|
||
{i -= v;t += "\ufffd"}
|
||
else
|
||
if(v > 0xffff)
|
||
t += String.fromCharCode(0xd7c0 + (v >> 10),0xdc00 + (v & 0x3FF));
|
||
else
|
||
t += String.fromCharCode(v);
|
||
if(t.length > 1024){t.substr(0,1);b += t;t = ""}}
|
||
return b + t}
|
||
function MlBytes(tag,contents,length)
|
||
{this.t = tag;this.c = contents;this.l = length}
|
||
MlBytes.prototype.toString
|
||
=
|
||
function()
|
||
{switch(this.t)
|
||
{case 9:return this.c;
|
||
default:caml_convert_string_to_bytes(this);case 0:
|
||
if(jsoo_is_ascii(this.c)){this.t = 9;return this.c}this.t = 8;
|
||
case 8:return caml_utf16_of_utf8(this.c)
|
||
}};
|
||
MlBytes.prototype.slice
|
||
=
|
||
function()
|
||
{var content=this.t == 4?this.c.slice():this.c;
|
||
return new MlBytes(this.t,content,this.l)};
|
||
function caml_bytes_of_jsbytes(s){return new MlBytes(0,s,s.length)}
|
||
function caml_string_of_jsbytes(s){return caml_bytes_of_jsbytes(s)}
|
||
function caml_raise_with_string(tag,msg)
|
||
{caml_raise_with_arg(tag,caml_string_of_jsbytes(msg))}
|
||
function caml_invalid_argument(msg)
|
||
{caml_raise_with_string(caml_global_data.Invalid_argument,msg)}
|
||
function caml_parse_format(fmt)
|
||
{fmt = caml_jsbytes_of_string(fmt);
|
||
var len=fmt.length;
|
||
if(len > 31)caml_invalid_argument("format_int: format too long");
|
||
var
|
||
f=
|
||
{justify:"+",
|
||
signstyle:"-",
|
||
filler:" ",
|
||
alternate:false,
|
||
base:0,
|
||
signedconv:false,
|
||
width:0,
|
||
uppercase:false,
|
||
sign:1,
|
||
prec:- 1,
|
||
conv:"f"};
|
||
for(var i=0;i < len;i++)
|
||
{var c=fmt.charAt(i);
|
||
switch(c)
|
||
{case "-":f.justify = "-";break;
|
||
case "+":
|
||
case " ":f.signstyle = c;break;
|
||
case "0":f.filler = "0";break;
|
||
case "#":f.alternate = true;break;
|
||
case "1":
|
||
case "2":
|
||
case "3":
|
||
case "4":
|
||
case "5":
|
||
case "6":
|
||
case "7":
|
||
case "8":
|
||
case "9":
|
||
f.width = 0;
|
||
while(c = fmt.charCodeAt(i) - 48,c >= 0 && c <= 9)
|
||
{f.width = f.width * 10 + c;i++}
|
||
i--;
|
||
break;
|
||
case ".":
|
||
f.prec = 0;
|
||
i++;
|
||
while(c = fmt.charCodeAt(i) - 48,c >= 0 && c <= 9)
|
||
{f.prec = f.prec * 10 + c;i++}
|
||
i--;
|
||
case "d":
|
||
case "i":f.signedconv = true;
|
||
case "u":f.base = 10;break;
|
||
case "x":f.base = 16;break;
|
||
case "X":f.base = 16;f.uppercase = true;break;
|
||
case "o":f.base = 8;break;
|
||
case "e":
|
||
case "f":
|
||
case "g":f.signedconv = true;f.conv = c;break;
|
||
case "E":
|
||
case "F":
|
||
case "G":
|
||
f.signedconv = true;
|
||
f.uppercase = true;
|
||
f.conv = c.toLowerCase();
|
||
break
|
||
}}
|
||
return f}
|
||
function caml_finish_formatting(f,rawbuffer)
|
||
{if(f.uppercase)rawbuffer = rawbuffer.toUpperCase();
|
||
var len=rawbuffer.length;
|
||
if(f.signedconv && (f.sign < 0 || f.signstyle != "-"))len++;
|
||
if(f.alternate){if(f.base == 8)len += 1;if(f.base == 16)len += 2}
|
||
var buffer="";
|
||
if(f.justify == "+" && f.filler == " ")
|
||
for(var i=len;i < f.width;i++)buffer += " ";
|
||
if(f.signedconv)
|
||
if(f.sign < 0)
|
||
buffer += "-";
|
||
else
|
||
if(f.signstyle != "-")buffer += f.signstyle;
|
||
if(f.alternate && f.base == 8)buffer += "0";
|
||
if(f.alternate && f.base == 16)buffer += "0x";
|
||
if(f.justify == "+" && f.filler == "0")
|
||
for(var i=len;i < f.width;i++)buffer += "0";
|
||
buffer += rawbuffer;
|
||
if(f.justify == "-")for(var i=len;i < f.width;i++)buffer += " ";
|
||
return caml_string_of_jsbytes(buffer)}
|
||
function caml_int64_format(fmt,x)
|
||
{var f=caml_parse_format(fmt);
|
||
if(f.signedconv && caml_int64_is_negative(x))
|
||
{f.sign = - 1;x = caml_int64_neg(x)}
|
||
var
|
||
buffer="",
|
||
wbase=caml_int64_of_int32(f.base),
|
||
cvtbl="0123456789abcdef";
|
||
do
|
||
{var p=x.udivmod(wbase);
|
||
x = p.quotient;
|
||
buffer = cvtbl.charAt(caml_int64_to_int32(p.modulus)) + buffer}
|
||
while
|
||
(! caml_int64_is_zero(x));
|
||
if(f.prec >= 0)
|
||
{f.filler = " ";
|
||
var n=f.prec - buffer.length;
|
||
if(n > 0)buffer = caml_str_repeat(n,"0") + buffer}
|
||
return caml_finish_formatting(f,buffer)}
|
||
function caml_expm1_float(x)
|
||
{var y=Math.exp(x),z=y - 1;
|
||
return Math.abs(x) > 1?z:z == 0?x:x * z / Math.log(y)}
|
||
function caml_jsstring_of_string(s){return s.toString()}
|
||
if(joo_global_object.process && joo_global_object.process.cwd)
|
||
var caml_current_dir=joo_global_object.process.cwd().replace(/\\/g,"/");
|
||
else
|
||
var caml_current_dir="/static";
|
||
if(caml_current_dir.slice(- 1) !== "/")caml_current_dir += "/";
|
||
function caml_make_path(name)
|
||
{name = caml_jsstring_of_string(name);
|
||
if(name.charCodeAt(0) != 47)name = caml_current_dir + name;
|
||
var comp=name.split("/"),ncomp=[];
|
||
for(var i=0;i < comp.length;i++)
|
||
switch(comp[i])
|
||
{case "..":if(ncomp.length > 1)ncomp.pop();break;
|
||
case ".":break;
|
||
case "":if(ncomp.length == 0)ncomp.push("");break;
|
||
default:ncomp.push(comp[i]);break}
|
||
ncomp.orig = name;
|
||
return ncomp}
|
||
function caml_is_ml_bytes(s){return s instanceof MlBytes}
|
||
function caml_is_ml_string(s){return caml_is_ml_bytes(s)}
|
||
function caml_bytes_of_array(a){return new MlBytes(4,a,a.length)}
|
||
function caml_bytes_of_string(s){return s}
|
||
function caml_utf8_of_utf16(s)
|
||
{for(var b="",t=b,c,d,i=0,l=s.length;i < l;i++)
|
||
{c = s.charCodeAt(i);
|
||
if(c < 0x80)
|
||
{for(var j=i + 1;j < l && (c = s.charCodeAt(j)) < 0x80;j++);
|
||
if(j - i > 512)
|
||
{t.substr(0,1);b += t;t = "";b += s.slice(i,j)}
|
||
else
|
||
t += s.slice(i,j);
|
||
if(j == l)break;
|
||
i = j}
|
||
if(c < 0x800)
|
||
{t += String.fromCharCode(0xc0 | c >> 6);
|
||
t += String.fromCharCode(0x80 | c & 0x3f)}
|
||
else
|
||
if(c < 0xd800 || c >= 0xdfff)
|
||
t
|
||
+=
|
||
String.fromCharCode
|
||
(0xe0 | c >> 12,0x80 | c >> 6 & 0x3f,0x80 | c & 0x3f);
|
||
else
|
||
if
|
||
(c
|
||
>=
|
||
0xdbff
|
||
||
|
||
i
|
||
+
|
||
1
|
||
==
|
||
l
|
||
||
|
||
(d = s.charCodeAt(i + 1))
|
||
<
|
||
0xdc00
|
||
||
|
||
d
|
||
>
|
||
0xdfff)
|
||
t += "\xef\xbf\xbd";
|
||
else
|
||
{i++;
|
||
c = (c << 10) + d - 0x35fdc00;
|
||
t
|
||
+=
|
||
String.fromCharCode
|
||
(0xf0 | c >> 18,
|
||
0x80 | c >> 12 & 0x3f,
|
||
0x80 | c >> 6 & 0x3f,
|
||
0x80 | c & 0x3f)}
|
||
if(t.length > 1024){t.substr(0,1);b += t;t = ""}}
|
||
return b + t}
|
||
function caml_bytes_of_utf16_jsstring(s)
|
||
{var tag=9;
|
||
if(! jsoo_is_ascii(s))tag = 8,s = caml_utf8_of_utf16(s);
|
||
return new MlBytes(tag,s,s.length)}
|
||
function caml_string_of_jsstring(s)
|
||
{return caml_bytes_of_utf16_jsstring(s)}
|
||
function caml_raise_sys_error(msg)
|
||
{caml_raise_with_string(caml_global_data.Sys_error,msg)}
|
||
function caml_raise_no_such_file(name)
|
||
{name = caml_jsbytes_of_string(name);
|
||
caml_raise_sys_error(name + ": No such file or directory")}
|
||
function caml_bytes_bound_error()
|
||
{caml_invalid_argument("index out of bounds")}
|
||
function caml_bytes_unsafe_get(s,i)
|
||
{switch(s.t & 6)
|
||
{default:if(i >= s.c.length)return 0;case 0:return s.c.charCodeAt(i);
|
||
case 4:return s.c[i]
|
||
}}
|
||
function caml_bytes_get(s,i)
|
||
{if(i >>> 0 >= s.l)caml_bytes_bound_error();
|
||
return caml_bytes_unsafe_get(s,i)}
|
||
function caml_create_bytes(len)
|
||
{if(len < 0)caml_invalid_argument("Bytes.create");
|
||
return new MlBytes(len?2:9,"",len)}
|
||
function caml_ml_bytes_length(s){return s.l}
|
||
function caml_convert_bytes_to_array(s)
|
||
{if(joo_global_object.Uint8Array)
|
||
var a=new (joo_global_object.Uint8Array)(s.l);
|
||
else
|
||
var a=new Array(s.l);
|
||
var b=s.c,l=b.length,i=0;
|
||
for(;i < l;i++)a[i] = b.charCodeAt(i);
|
||
for(l = s.l;i < l;i++)a[i] = 0;
|
||
s.c = a;
|
||
s.t = 4;
|
||
return a}
|
||
function caml_blit_bytes(s1,i1,s2,i2,len)
|
||
{if(len == 0)return 0;
|
||
if(i2 == 0 && (len >= s2.l || s2.t == 2 && len >= s2.c.length))
|
||
{s2.c
|
||
=
|
||
s1.t == 4
|
||
?caml_subarray_to_jsbytes(s1.c,i1,len)
|
||
:i1 == 0 && s1.c.length == len?s1.c:s1.c.substr(i1,len);
|
||
s2.t = s2.c.length == s2.l?0:2}
|
||
else
|
||
if(s2.t == 2 && i2 == s2.c.length)
|
||
{s2.c
|
||
+=
|
||
s1.t == 4
|
||
?caml_subarray_to_jsbytes(s1.c,i1,len)
|
||
:i1 == 0 && s1.c.length == len?s1.c:s1.c.substr(i1,len);
|
||
s2.t = s2.c.length == s2.l?0:2}
|
||
else
|
||
{if(s2.t != 4)caml_convert_bytes_to_array(s2);
|
||
var c1=s1.c,c2=s2.c;
|
||
if(s1.t == 4)
|
||
if(i2 <= i1)
|
||
for(var i=0;i < len;i++)c2[i2 + i] = c1[i1 + i];
|
||
else
|
||
for(var i=len - 1;i >= 0;i--)c2[i2 + i] = c1[i1 + i];
|
||
else
|
||
{var l=Math.min(len,c1.length - i1);
|
||
for(var i=0;i < l;i++)c2[i2 + i] = c1.charCodeAt(i1 + i);
|
||
for(;i < len;i++)c2[i2 + i] = 0}}
|
||
return 0}
|
||
function caml_blit_string(a,b,c,d,e)
|
||
{caml_blit_bytes(caml_bytes_of_string(a),b,c,d,e);return 0}
|
||
function MlFile(){}
|
||
function MlFakeFile(content){this.data = content}
|
||
MlFakeFile.prototype = new MlFile();
|
||
MlFakeFile.prototype.truncate
|
||
=
|
||
function(len)
|
||
{var old=this.data;
|
||
this.data = caml_create_bytes(len | 0);
|
||
caml_blit_bytes(old,0,this.data,0,len)};
|
||
MlFakeFile.prototype.length
|
||
=
|
||
function(){return caml_ml_bytes_length(this.data)};
|
||
MlFakeFile.prototype.write
|
||
=
|
||
function(offset,buf,pos,len)
|
||
{var clen=this.length();
|
||
if(offset + len >= clen)
|
||
{var new_str=caml_create_bytes(offset + len),old_data=this.data;
|
||
this.data = new_str;
|
||
caml_blit_bytes(old_data,0,this.data,0,clen)}
|
||
caml_blit_string(buf,pos,this.data,offset,len);
|
||
return 0};
|
||
MlFakeFile.prototype.read
|
||
=
|
||
function(offset,buf,pos,len)
|
||
{var clen=this.length();
|
||
caml_blit_bytes(this.data,offset,buf,pos,len);
|
||
return 0};
|
||
MlFakeFile.prototype.read_one
|
||
=
|
||
function(offset){return caml_bytes_get(this.data,offset)};
|
||
MlFakeFile.prototype.close = function(){};
|
||
MlFakeFile.prototype.constructor = MlFakeFile;
|
||
function MlFakeDevice(root,f)
|
||
{this.content = {};this.root = root;this.lookupFun = f}
|
||
MlFakeDevice.prototype.nm = function(name){return this.root + name};
|
||
MlFakeDevice.prototype.lookup
|
||
=
|
||
function(name)
|
||
{if(! this.content[name] && this.lookupFun)
|
||
{var
|
||
res=
|
||
this.lookupFun
|
||
(caml_string_of_jsbytes(this.root),caml_string_of_jsbytes(name));
|
||
if(res !== 0)
|
||
this.content[name] = new MlFakeFile(caml_bytes_of_string(res[1]))}};
|
||
MlFakeDevice.prototype.exists
|
||
=
|
||
function(name)
|
||
{if(name == "")return 1;
|
||
var name_slash=name + "/",r=new RegExp("^" + name_slash);
|
||
for(var n in this.content)if(n.match(r))return 1;
|
||
this.lookup(name);
|
||
return this.content[name]?1:0};
|
||
MlFakeDevice.prototype.readdir
|
||
=
|
||
function(name)
|
||
{var
|
||
name_slash=name == ""?"":name + "/",
|
||
r=new RegExp("^" + name_slash + "([^/]*)"),
|
||
seen={},
|
||
a=[];
|
||
for(var n in this.content)
|
||
{var m=n.match(r);
|
||
if(m && ! seen[m[1]]){seen[m[1]] = true;a.push(m[1])}}
|
||
return a};
|
||
MlFakeDevice.prototype.is_dir
|
||
=
|
||
function(name)
|
||
{var
|
||
name_slash=name == ""?"":name + "/",
|
||
r=new RegExp("^" + name_slash + "([^/]*)"),
|
||
a=[];
|
||
for(var n in this.content){var m=n.match(r);if(m)return 1}
|
||
return 0};
|
||
MlFakeDevice.prototype.unlink
|
||
=
|
||
function(name)
|
||
{var ok=this.content[name]?true:false;
|
||
delete this.content[name];
|
||
return ok};
|
||
MlFakeDevice.prototype.open
|
||
=
|
||
function(name,f)
|
||
{if(f.rdonly && f.wronly)
|
||
caml_raise_sys_error
|
||
(this.nm(name)
|
||
+
|
||
" : flags Open_rdonly and Open_wronly are not compatible");
|
||
if(f.text && f.binary)
|
||
caml_raise_sys_error
|
||
(this.nm(name)
|
||
+
|
||
" : flags Open_text and Open_binary are not compatible");
|
||
this.lookup(name);
|
||
if(this.content[name])
|
||
{if(this.is_dir(name))
|
||
caml_raise_sys_error(this.nm(name) + " : is a directory");
|
||
if(f.create && f.excl)
|
||
caml_raise_sys_error(this.nm(name) + " : file already exists");
|
||
var file=this.content[name];
|
||
if(f.truncate)file.truncate();
|
||
return file}
|
||
else
|
||
if(f.create)
|
||
{this.content[name] = new MlFakeFile(caml_create_bytes(0));
|
||
return this.content[name]}
|
||
else
|
||
caml_raise_no_such_file(this.nm(name))};
|
||
MlFakeDevice.prototype.register
|
||
=
|
||
function(name,content)
|
||
{if(this.content[name])
|
||
caml_raise_sys_error(this.nm(name) + " : file already exists");
|
||
if(caml_is_ml_bytes(content))
|
||
this.content[name] = new MlFakeFile(content);
|
||
if(caml_is_ml_string(content))
|
||
this.content[name] = new MlFakeFile(caml_bytes_of_string(content));
|
||
else
|
||
if(content instanceof Array)
|
||
this.content[name] = new MlFakeFile(caml_bytes_of_array(content));
|
||
else
|
||
if(typeof content === "string")
|
||
this.content[name] = new MlFakeFile(caml_bytes_of_jsbytes(content));
|
||
else
|
||
if(content.toString)
|
||
{var
|
||
bytes=
|
||
caml_bytes_of_string(caml_string_of_jsstring(content.toString()));
|
||
this.content[name] = new MlFakeFile(bytes)}
|
||
else
|
||
caml_raise_sys_error
|
||
(this.nm(name) + " : registering file with invalid content type")};
|
||
MlFakeDevice.prototype.constructor = MlFakeDevice;
|
||
function caml_ml_string_length(s){return caml_ml_bytes_length(s)}
|
||
function caml_string_unsafe_get(s,i){return caml_bytes_unsafe_get(s,i)}
|
||
function caml_array_of_string(s)
|
||
{var l=caml_ml_string_length(s),a=new Array(l),i=0;
|
||
for(;i < l;i++)a[i] = caml_string_unsafe_get(s,i);
|
||
return a}
|
||
function caml_array_of_bytes(s)
|
||
{if(s.t != 4)caml_convert_bytes_to_array(s);return s.c}
|
||
function caml_bytes_unsafe_set(s,i,c)
|
||
{c &= 0xff;
|
||
if(s.t != 4)
|
||
{if(i == s.c.length)
|
||
{s.c += String.fromCharCode(c);if(i + 1 == s.l)s.t = 0;return 0}
|
||
caml_convert_bytes_to_array(s)}
|
||
s.c[i] = c;
|
||
return 0}
|
||
function caml_bytes_set(s,i,c)
|
||
{if(i >>> 0 >= s.l)caml_bytes_bound_error();
|
||
return caml_bytes_unsafe_set(s,i,c)}
|
||
function MlNodeFile(fd){this.fs = require("fs");this.fd = fd}
|
||
MlNodeFile.prototype = new MlFile();
|
||
MlNodeFile.prototype.truncate
|
||
=
|
||
function(len)
|
||
{try
|
||
{this.fs.ftruncateSync(this.fd,len | 0)}
|
||
catch(err){caml_raise_sys_error(err.toString())}};
|
||
MlNodeFile.prototype.length
|
||
=
|
||
function()
|
||
{try
|
||
{return this.fs.fstatSync(this.fd).size}
|
||
catch(err){caml_raise_sys_error(err.toString())}};
|
||
MlNodeFile.prototype.write
|
||
=
|
||
function(offset,buf,buf_offset,len)
|
||
{var a=caml_array_of_string(buf);
|
||
if(! (a instanceof joo_global_object.Uint8Array))
|
||
a = new (joo_global_object.Uint8Array)(a);
|
||
var buffer=joo_global_object.Buffer.from(a);
|
||
try
|
||
{this.fs.writeSync(this.fd,buffer,buf_offset,len,offset)}
|
||
catch(err){caml_raise_sys_error(err.toString())}
|
||
return 0};
|
||
MlNodeFile.prototype.read
|
||
=
|
||
function(offset,buf,buf_offset,len)
|
||
{var a=caml_array_of_bytes(buf);
|
||
if(! (a instanceof joo_global_object.Uint8Array))
|
||
a = new (joo_global_object.Uint8Array)(a);
|
||
var buffer=joo_global_object.Buffer.from(a);
|
||
try
|
||
{this.fs.readSync(this.fd,buffer,buf_offset,len,offset)}
|
||
catch(err){caml_raise_sys_error(err.toString())}
|
||
for(var i=0;i < len;i++)
|
||
caml_bytes_set(buf,buf_offset + i,buffer[buf_offset + i]);
|
||
return 0};
|
||
MlNodeFile.prototype.read_one
|
||
=
|
||
function(offset)
|
||
{var
|
||
a=new (joo_global_object.Uint8Array)(1),
|
||
buffer=joo_global_object.Buffer.from(a);
|
||
try
|
||
{this.fs.readSync(this.fd,buffer,0,1,offset)}
|
||
catch(err){caml_raise_sys_error(err.toString())}
|
||
return buffer[0]};
|
||
MlNodeFile.prototype.close
|
||
=
|
||
function()
|
||
{try
|
||
{this.fs.closeSync(this.fd)}
|
||
catch(err){caml_raise_sys_error(err.toString())}};
|
||
MlNodeFile.prototype.constructor = MlNodeFile;
|
||
function MlNodeDevice(root){this.fs = require("fs");this.root = root}
|
||
MlNodeDevice.prototype.nm = function(name){return this.root + name};
|
||
MlNodeDevice.prototype.exists
|
||
=
|
||
function(name)
|
||
{try
|
||
{return this.fs.existsSync(this.nm(name))?1:0}
|
||
catch(err){caml_raise_sys_error(err.toString())}};
|
||
MlNodeDevice.prototype.readdir
|
||
=
|
||
function(name)
|
||
{try
|
||
{return this.fs.readdirSync(this.nm(name))}
|
||
catch(err){caml_raise_sys_error(err.toString())}};
|
||
MlNodeDevice.prototype.is_dir
|
||
=
|
||
function(name)
|
||
{try
|
||
{return this.fs.statSync(this.nm(name)).isDirectory()?1:0}
|
||
catch(err){caml_raise_sys_error(err.toString())}};
|
||
MlNodeDevice.prototype.unlink
|
||
=
|
||
function(name)
|
||
{try
|
||
{var b=this.fs.existsSync(this.nm(name))?1:0;
|
||
this.fs.unlinkSync(this.nm(name))}
|
||
catch(err){caml_raise_sys_error(err.toString())}
|
||
return b};
|
||
MlNodeDevice.prototype.open
|
||
=
|
||
function(name,f)
|
||
{var consts=require("constants"),res=0;
|
||
for(var key in f)
|
||
switch(key)
|
||
{case "rdonly":res |= consts.O_RDONLY;break;
|
||
case "wronly":res |= consts.O_WRONLY;break;
|
||
case "append":res |= consts.O_WRONLY | consts.O_APPEND;break;
|
||
case "create":res |= consts.O_CREAT;break;
|
||
case "truncate":res |= consts.O_TRUNC;break;
|
||
case "excl":res |= consts.O_EXCL;break;
|
||
case "binary":res |= consts.O_BINARY;break;
|
||
case "text":res |= consts.O_TEXT;break;
|
||
case "nonblock":res |= consts.O_NONBLOCK;break
|
||
}
|
||
try
|
||
{var fd=this.fs.openSync(this.nm(name),res);return new MlNodeFile(fd)}
|
||
catch(err){caml_raise_sys_error(err.toString())}};
|
||
MlNodeDevice.prototype.rename
|
||
=
|
||
function(o,n)
|
||
{try
|
||
{this.fs.renameSync(this.nm(o),this.nm(n))}
|
||
catch(err){caml_raise_sys_error(err.toString())}};
|
||
MlNodeDevice.prototype.constructor = MlNodeDevice;
|
||
var caml_root=caml_current_dir.match(/[^\/]*\//)[0];
|
||
function fs_node_supported()
|
||
{return typeof joo_global_object.process
|
||
!==
|
||
"undefined"
|
||
&&
|
||
typeof joo_global_object.process.versions
|
||
!==
|
||
"undefined"
|
||
&&
|
||
typeof joo_global_object.process.versions.node
|
||
!==
|
||
"undefined"
|
||
&&
|
||
joo_global_object.process.platform
|
||
!==
|
||
"browser"}
|
||
var jsoo_mount_point=[];
|
||
if(fs_node_supported())
|
||
jsoo_mount_point.push
|
||
({path:caml_root,device:new MlNodeDevice(caml_root)});
|
||
else
|
||
jsoo_mount_point.push
|
||
({path:caml_root,device:new MlFakeDevice(caml_root)});
|
||
jsoo_mount_point.push
|
||
({path:caml_root + "static/",
|
||
device:new MlFakeDevice(caml_root + "static/")});
|
||
function resolve_fs_device(name)
|
||
{var
|
||
path=caml_make_path(name),
|
||
name=path.join("/"),
|
||
name_slash=name + "/",
|
||
res;
|
||
for(var i=0;i < jsoo_mount_point.length;i++)
|
||
{var m=jsoo_mount_point[i];
|
||
if
|
||
(name_slash.search(m.path)
|
||
==
|
||
0
|
||
&&
|
||
(! res || res.path.length < m.path.length))
|
||
res
|
||
=
|
||
{path:m.path,
|
||
device:m.device,
|
||
rest:name.substring(m.path.length,name.length)}}
|
||
return res}
|
||
function caml_sys_is_directory(name)
|
||
{var root=resolve_fs_device(name),a=root.device.is_dir(root.rest);
|
||
return a?1:0}
|
||
function caml_raise_not_found()
|
||
{caml_raise_constant(caml_global_data.Not_found)}
|
||
function caml_sys_getenv(name)
|
||
{var g=joo_global_object,n=caml_jsstring_of_string(name);
|
||
if(g.process && g.process.env && g.process.env[n] != undefined)
|
||
return caml_string_of_jsstring(g.process.env[n]);
|
||
if
|
||
(joo_global_object.jsoo_static_env
|
||
&&
|
||
joo_global_object.jsoo_static_env[n])
|
||
return caml_string_of_jsstring(joo_global_object.jsoo_static_env[n]);
|
||
caml_raise_not_found()}
|
||
function shift_right_nat(nat1,ofs1,len1,nat2,ofs2,nbits)
|
||
{if(nbits == 0){nat2.data[ofs2] = 0;return 0}
|
||
var wrap=0;
|
||
for(var i=len1 - 1;i >= 0;i--)
|
||
{var a=nat1.data[ofs1 + i] >>> 0;
|
||
nat1.data[ofs1 + i] = a >>> nbits | wrap;
|
||
wrap = a << 32 - nbits}
|
||
nat2.data[ofs2] = wrap;
|
||
return 0}
|
||
var caml_named_values={};
|
||
function caml_named_value(nm){return caml_named_values[nm]}
|
||
var caml_gr_state;
|
||
function caml_gr_state_get()
|
||
{if(caml_gr_state)return caml_gr_state;
|
||
throw [0,
|
||
caml_named_value("Graphics.Graphic_failure"),
|
||
caml_string_of_jsbytes("Not initialized")]}
|
||
function caml_gr_point_color(x,y)
|
||
{var
|
||
s=caml_gr_state_get(),
|
||
im=s.context.getImageData(x,s.height - y,1,1),
|
||
d=im.data;
|
||
return (d[0] << 16) + (d[1] << 8) + d[2]}
|
||
var MlObjectTable;
|
||
if(typeof joo_global_object.WeakMap === "undefined")
|
||
MlObjectTable
|
||
=
|
||
function()
|
||
{function NaiveLookup(objs){this.objs = objs}
|
||
NaiveLookup.prototype.get
|
||
=
|
||
function(v)
|
||
{for(var i=0;i < this.objs.length;i++)if(this.objs[i] === v)return i};
|
||
NaiveLookup.prototype.set = function(){};
|
||
return function()
|
||
{this.objs = [];this.lookup = new NaiveLookup(this.objs)}}
|
||
();
|
||
else
|
||
MlObjectTable
|
||
=
|
||
function()
|
||
{this.objs = [];this.lookup = new (joo_global_object.WeakMap)()};
|
||
MlObjectTable.prototype.store
|
||
=
|
||
function(v){this.lookup.set(v,this.objs.length);this.objs.push(v)};
|
||
MlObjectTable.prototype.recall
|
||
=
|
||
function(v)
|
||
{var i=this.lookup.get(v);
|
||
return i === undefined?undefined:this.objs.length - i};
|
||
function caml_failwith(msg)
|
||
{caml_raise_with_string(caml_global_data.Failure,msg)}
|
||
function caml_sys_rename(o,n)
|
||
{var o_root=resolve_fs_device(o),n_root=resolve_fs_device(n);
|
||
if(o_root.device != n_root.device)
|
||
caml_failwith
|
||
("caml_sys_rename: cannot move file between two filesystem");
|
||
if(! o_root.device.rename)
|
||
caml_failwith("caml_sys_rename: no implemented");
|
||
o_root.device.rename(o_root.rest,n_root.rest)}
|
||
function caml_log10_float(x){return Math.LOG10E * Math.log(x)}
|
||
var caml_runtime_warnings=0;
|
||
function caml_ml_enable_runtime_warnings(bool)
|
||
{caml_runtime_warnings = bool;return 0}
|
||
function caml_classify_float(x)
|
||
{if(isFinite(x))
|
||
{if(Math.abs(x) >= 2.2250738585072014e-308)return 0;
|
||
if(x != 0)return 1;
|
||
return 2}
|
||
return isNaN(x)?4:3}
|
||
function caml_ml_refill_input(chan)
|
||
{var str=chan.refill(),str_len=caml_ml_string_length(str);
|
||
if(str_len == 0)chan.refill = null;
|
||
chan.file.write(chan.file.length(),str,0,str_len);
|
||
return str_len}
|
||
var caml_ml_channels=new Array();
|
||
function caml_ml_may_refill_input(chanid)
|
||
{var chan=caml_ml_channels[chanid];
|
||
if(chan.refill == null)return;
|
||
if(chan.file.length() != chan.offset)return;
|
||
caml_ml_refill_input(chan)}
|
||
function caml_array_bound_error()
|
||
{caml_invalid_argument("index out of bounds")}
|
||
function caml_ml_input_scan_line(chanid)
|
||
{var chan=caml_ml_channels[chanid];
|
||
caml_ml_may_refill_input(chanid);
|
||
var p=chan.offset,len=chan.file.length();
|
||
if(p >= len)return 0;
|
||
while(true)
|
||
{if(p >= len)return - (p - chan.offset);
|
||
if(chan.file.read_one(p) == 10)return p - chan.offset + 1;
|
||
p++}}
|
||
function caml_gc_minor(){return 0}
|
||
function caml_int64_of_bytes(a)
|
||
{return new
|
||
MlInt64
|
||
(a[7] << 0 | a[6] << 8 | a[5] << 16,
|
||
a[4] << 0 | a[3] << 8 | a[2] << 16,
|
||
a[1] << 0 | a[0] << 8)}
|
||
function caml_ba_uint8_get64(ba,i0)
|
||
{var ofs=ba.offset(i0);
|
||
if(ofs + 7 >= ba.data.length)caml_array_bound_error();
|
||
var
|
||
b1=ba.get(ofs + 0),
|
||
b2=ba.get(ofs + 1),
|
||
b3=ba.get(ofs + 2),
|
||
b4=ba.get(ofs + 3),
|
||
b5=ba.get(ofs + 4),
|
||
b6=ba.get(ofs + 5),
|
||
b7=ba.get(ofs + 6),
|
||
b8=ba.get(ofs + 7);
|
||
return caml_int64_of_bytes([b8,b7,b6,b5,b4,b3,b2,b1])}
|
||
function caml_int64_to_bytes(x){return x.toArray()}
|
||
function caml_int64_marshal(writer,v,sizes)
|
||
{var b=caml_int64_to_bytes(v);
|
||
for(var i=0;i < 8;i++)writer.write(8,b[i]);
|
||
sizes[0] = 8;
|
||
sizes[1] = 8}
|
||
function caml_ba_num_dims(ba){return ba.dims.length}
|
||
function caml_return_exn_constant(tag){return tag}
|
||
function caml_wrap_exception(e)
|
||
{if(e instanceof Array)return e;
|
||
if
|
||
(joo_global_object.RangeError
|
||
&&
|
||
e instanceof joo_global_object.RangeError
|
||
&&
|
||
e.message
|
||
&&
|
||
e.message.match(/maximum call stack/i))
|
||
return caml_return_exn_constant(caml_global_data.Stack_overflow);
|
||
if
|
||
(joo_global_object.InternalError
|
||
&&
|
||
e instanceof joo_global_object.InternalError
|
||
&&
|
||
e.message
|
||
&&
|
||
e.message.match(/too much recursion/i))
|
||
return caml_return_exn_constant(caml_global_data.Stack_overflow);
|
||
if(e instanceof joo_global_object.Error && caml_named_value("jsError"))
|
||
return [0,caml_named_value("jsError"),e];
|
||
return [0,caml_global_data.Failure,caml_string_of_jsstring(String(e))]}
|
||
function caml_create_file(name,content)
|
||
{var root=resolve_fs_device(name);
|
||
if(! root.device.register)caml_failwith("cannot register file");
|
||
root.device.register(root.rest,content);
|
||
return 0}
|
||
function caml_fs_init()
|
||
{var tmp=joo_global_object.caml_fs_tmp;
|
||
if(tmp)
|
||
for(var i=0;i < tmp.length;i++)
|
||
caml_create_file(tmp[i].name,tmp[i].content);
|
||
joo_global_object.caml_create_file = caml_create_file;
|
||
joo_global_object.caml_fs_tmp = [];
|
||
return 0}
|
||
function caml_set_parser_trace(){return 0}
|
||
function caml_list_of_js_array(a)
|
||
{var l=0;
|
||
for(var i=a.length - 1;i >= 0;i--){var e=a[i];l = [0,e,l]}
|
||
return l}
|
||
function unix_gettimeofday(){return new Date().getTime() / 1000}
|
||
function caml_mul(a,b){return Math.imul(a,b)}
|
||
function caml_hash_mix_int(h,d)
|
||
{d = caml_mul(d,0xcc9e2d51 | 0);
|
||
d = d << 15 | d >>> 32 - 15;
|
||
d = caml_mul(d,0x1b873593);
|
||
h ^= d;
|
||
h = h << 13 | h >>> 32 - 13;
|
||
return (h + (h << 2) | 0) + (0xe6546b64 | 0) | 0}
|
||
function num_digits_nat(nat,ofs,len)
|
||
{for(var i=len - 1;i >= 0;i--)if(nat.data[ofs + i] != 0)return i + 1;
|
||
return 1}
|
||
function caml_hash_nat(x)
|
||
{var len=num_digits_nat(x,0,x.data.length),h=0;
|
||
for(var i=0;i < len;i++)h = caml_hash_mix_int(h,x.data[i]);
|
||
return h}
|
||
function caml_call_gen(f,args)
|
||
{if(f.fun)return caml_call_gen(f.fun,args);
|
||
if(typeof f !== "function")return f;
|
||
var n=f.length | 0;
|
||
if(n === 0)return f.apply(null,args);
|
||
var argsLen=args.length | 0,d=n - argsLen | 0;
|
||
if(d == 0)
|
||
return f.apply(null,args);
|
||
else
|
||
if(d < 0)
|
||
return caml_call_gen(f.apply(null,args.slice(0,n)),args.slice(n));
|
||
else
|
||
return function()
|
||
{var
|
||
extra_args=arguments.length == 0?1:arguments.length,
|
||
nargs=new Array(args.length + extra_args);
|
||
for(var i=0;i < args.length;i++)nargs[i] = args[i];
|
||
for(var i=0;i < arguments.length;i++)
|
||
nargs[args.length + i] = arguments[i];
|
||
return caml_call_gen(f,nargs)}}
|
||
function caml_js_wrap_callback_arguments(f)
|
||
{return function()
|
||
{var len=arguments.length,args=new Array(len);
|
||
for(var i=0;i < len;i++)args[i] = arguments[i];
|
||
return caml_call_gen(f,[args])}}
|
||
function caml_sys_chdir(dir)
|
||
{var root=resolve_fs_device(dir);
|
||
if(root.device.exists(root.rest))
|
||
{if(root.rest)
|
||
caml_current_dir = root.path + root.rest + "/";
|
||
else
|
||
caml_current_dir = root.path;
|
||
return 0}
|
||
else
|
||
caml_raise_no_such_file(dir)}
|
||
function caml_gc_counters(){return [254,0,0,0]}
|
||
function caml_gr_synchronize()
|
||
{caml_failwith("caml_gr_synchronize not Implemented")}
|
||
var log2_ok=Math.log2 && Math.log2(1.1235582092889474E+307) == 1020;
|
||
function jsoo_floor_log2(x)
|
||
{if(log2_ok)return Math.floor(Math.log2(x));
|
||
var i=0;
|
||
if(x == 0)return - Infinity;
|
||
if(x >= 1)while(x >= 2){x /= 2;i++}else while(x < 1){x *= 2;i--}
|
||
return i}
|
||
function caml_int32_bits_of_float(x)
|
||
{var float32a=new (joo_global_object.Float32Array)(1);
|
||
float32a[0] = x;
|
||
var int32a=new (joo_global_object.Int32Array)(float32a.buffer);
|
||
return int32a[0] | 0}
|
||
function caml_int64_create_lo_mi_hi(lo,mi,hi)
|
||
{return new MlInt64(lo,mi,hi)}
|
||
function caml_int64_bits_of_float(x)
|
||
{if(! isFinite(x))
|
||
{if(isNaN(x))return caml_int64_create_lo_mi_hi(1,0,0x7ff0);
|
||
return x > 0
|
||
?caml_int64_create_lo_mi_hi(0,0,0x7ff0)
|
||
:caml_int64_create_lo_mi_hi(0,0,0xfff0)}
|
||
var sign=x == 0 && 1 / x == - Infinity?0x8000:x >= 0?0:0x8000;
|
||
if(sign)x = - x;
|
||
var exp=jsoo_floor_log2(x) + 1023;
|
||
if(exp <= 0)
|
||
{exp = 0;x /= Math.pow(2,- 1026)}
|
||
else
|
||
{x /= Math.pow(2,exp - 1027);
|
||
if(x < 16){x *= 2;exp -= 1}
|
||
if(exp == 0)x /= 2}
|
||
var k=Math.pow(2,24),r3=x | 0;
|
||
x = (x - r3) * k;
|
||
var r2=x | 0;
|
||
x = (x - r2) * k;
|
||
var r1=x | 0;
|
||
r3 = r3 & 0xf | sign | exp << 4;
|
||
return caml_int64_create_lo_mi_hi(r1,r2,r3)}
|
||
function caml_ba_serialize(writer,ba,sz)
|
||
{writer.write(32,ba.dims.length);
|
||
writer.write(32,ba.kind | ba.layout << 8);
|
||
for(var i=0;i < ba.dims.length;i++)writer.write(32,ba.dims[i]);
|
||
switch(ba.kind)
|
||
{case 2:
|
||
case 3:
|
||
case 12:
|
||
for(var i=0;i < ba.data.length;i++)writer.write(8,ba.data[i]);break;
|
||
case 4:
|
||
case 5:
|
||
for(var i=0;i < ba.data.length;i++)writer.write(16,ba.data[i]);break;
|
||
case 6:
|
||
for(var i=0;i < ba.data.length;i++)writer.write(32,ba.data[i]);break;
|
||
case 8:
|
||
case 9:
|
||
writer.write(8,0);
|
||
for(var i=0;i < ba.data.length;i++)writer.write(32,ba.data[i]);
|
||
break;
|
||
case 7:
|
||
for(var i=0;i < ba.data.length / 2;i++)
|
||
{var b=caml_int64_to_bytes(ba.get(i));
|
||
for(var j=0;j < 8;j++)writer.write(8,b[j])}
|
||
break;
|
||
case 1:
|
||
for(var i=0;i < ba.data.length;i++)
|
||
{var b=caml_int64_to_bytes(caml_int64_bits_of_float(ba.get(i)));
|
||
for(var j=0;j < 8;j++)writer.write(8,b[j])}
|
||
break;
|
||
case 0:
|
||
for(var i=0;i < ba.data.length;i++)
|
||
{var b=caml_int32_bits_of_float(ba.get(i));writer.write(32,b)}
|
||
break;
|
||
case 10:
|
||
for(var i=0;i < ba.data.length / 2;i++)
|
||
{var j=ba.get(i);
|
||
writer.write(32,caml_int32_bits_of_float(j[1]));
|
||
writer.write(32,caml_int32_bits_of_float(j[2]))}
|
||
break;
|
||
case 11:
|
||
for(var i=0;i < ba.data.length / 2;i++)
|
||
{var
|
||
complex=ba.get(i),
|
||
b=caml_int64_to_bytes(caml_int64_bits_of_float(complex[1]));
|
||
for(var j=0;j < 8;j++)writer.write(8,b[j]);
|
||
var b=caml_int64_to_bytes(caml_int64_bits_of_float(complex[2]));
|
||
for(var j=0;j < 8;j++)writer.write(8,b[j])}
|
||
break
|
||
}
|
||
sz[0] = (4 + ba.dims.length) * 4;
|
||
sz[1] = (4 + ba.dims.length) * 8}
|
||
function caml_ba_get_size_per_element(kind)
|
||
{switch(kind){case 7:case 10:case 11:return 2;default:return 1}}
|
||
function caml_ba_create_buffer(kind,size)
|
||
{var g=joo_global_object,view;
|
||
switch(kind)
|
||
{case 0:view = g.Float32Array;break;
|
||
case 1:view = g.Float64Array;break;
|
||
case 2:view = g.Int8Array;break;
|
||
case 3:view = g.Uint8Array;break;
|
||
case 4:view = g.Int16Array;break;
|
||
case 5:view = g.Uint16Array;break;
|
||
case 6:view = g.Int32Array;break;
|
||
case 7:view = g.Int32Array;break;
|
||
case 8:view = g.Int32Array;break;
|
||
case 9:view = g.Int32Array;break;
|
||
case 10:view = g.Float32Array;break;
|
||
case 11:view = g.Float64Array;break;
|
||
case 12:view = g.Uint8Array;break
|
||
}
|
||
if(! view)caml_invalid_argument("Bigarray.create: unsupported kind");
|
||
var data=new view(size * caml_ba_get_size_per_element(kind));
|
||
return data}
|
||
function caml_int32_float_of_bits(x)
|
||
{var int32a=new (joo_global_object.Int32Array)(1);
|
||
int32a[0] = x;
|
||
var float32a=new (joo_global_object.Float32Array)(int32a.buffer);
|
||
return float32a[0]}
|
||
function caml_int64_float_of_bits(x)
|
||
{var lo=x.lo,mi=x.mi,hi=x.hi,exp=(hi & 0x7fff) >> 4;
|
||
if(exp == 2047)
|
||
return (lo | mi | hi & 0xf) == 0?hi & 0x8000?- Infinity:Infinity:NaN;
|
||
var k=Math.pow(2,- 24),res=(lo * k + mi) * k + (hi & 0xf);
|
||
if(exp > 0)
|
||
{res += 16;res *= Math.pow(2,exp - 1027)}
|
||
else
|
||
res *= Math.pow(2,- 1026);
|
||
if(hi & 0x8000)res = - res;
|
||
return res}
|
||
function caml_ba_get_size(dims)
|
||
{var n_dims=dims.length,size=1;
|
||
for(var i=0;i < n_dims;i++)
|
||
{if(dims[i] < 0)
|
||
caml_invalid_argument("Bigarray.create: negative dimension");
|
||
size = size * dims[i]}
|
||
return size}
|
||
function caml_int64_create_lo_hi(lo,hi)
|
||
{return new
|
||
MlInt64
|
||
(lo & 0xffffff,
|
||
lo >>> 24 & 0xff | (hi & 0xffff) << 8,
|
||
hi >>> 16 & 0xffff)}
|
||
function caml_int64_hi32(v){return v.hi32()}
|
||
function caml_int64_lo32(v){return v.lo32()}
|
||
function Ml_Bigarray(kind,layout,dims,buffer)
|
||
{this.kind = kind;
|
||
this.layout = layout;
|
||
this.dims = dims;
|
||
this.data = buffer}
|
||
Ml_Bigarray.prototype.caml_custom = "_bigarray";
|
||
Ml_Bigarray.prototype.offset
|
||
=
|
||
function(arg)
|
||
{var ofs=0;
|
||
if(typeof arg === "number")arg = [arg];
|
||
if(! (arg instanceof Array))
|
||
caml_invalid_argument("bigarray.js: invalid offset");
|
||
if(this.dims.length != arg.length)
|
||
caml_invalid_argument("Bigarray.get/set: bad number of dimensions");
|
||
if(this.layout == 0)
|
||
for(var i=0;i < this.dims.length;i++)
|
||
{if(arg[i] < 0 || arg[i] >= this.dims[i])caml_array_bound_error();
|
||
ofs = ofs * this.dims[i] + arg[i]}
|
||
else
|
||
for(var i=this.dims.length - 1;i >= 0;i--)
|
||
{if(arg[i] < 1 || arg[i] > this.dims[i])caml_array_bound_error();
|
||
ofs = ofs * this.dims[i] + (arg[i] - 1)}
|
||
return ofs};
|
||
Ml_Bigarray.prototype.get
|
||
=
|
||
function(ofs)
|
||
{switch(this.kind)
|
||
{case 7:
|
||
var l=this.data[ofs * 2 + 0],h=this.data[ofs * 2 + 1];
|
||
return caml_int64_create_lo_hi(l,h);
|
||
case 10:
|
||
case 11:
|
||
var r=this.data[ofs * 2 + 0],i=this.data[ofs * 2 + 1];
|
||
return [254,r,i];
|
||
default:return this.data[ofs]}};
|
||
Ml_Bigarray.prototype.set
|
||
=
|
||
function(ofs,v)
|
||
{switch(this.kind)
|
||
{case 7:
|
||
this.data[ofs * 2 + 0] = caml_int64_lo32(v);
|
||
this.data[ofs * 2 + 1] = caml_int64_hi32(v);
|
||
break;
|
||
case 10:
|
||
case 11:
|
||
this.data[ofs * 2 + 0] = v[1];this.data[ofs * 2 + 1] = v[2];break;
|
||
default:this.data[ofs] = v;break}
|
||
return 0};
|
||
Ml_Bigarray.prototype.fill
|
||
=
|
||
function(v)
|
||
{switch(this.kind)
|
||
{case 7:
|
||
var a=caml_int64_lo32(v),b=caml_int64_hi32(v);
|
||
if(a == b)
|
||
this.data.fill(a);
|
||
else
|
||
for(var i=0;i < this.data.length;i++)this.data[i] = i % 2 == 0?a:b;
|
||
break;
|
||
case 10:
|
||
case 11:
|
||
var im=v[1],re=v[2];
|
||
if(im == re)
|
||
this.data.fill(im);
|
||
else
|
||
for(var i=0;i < this.data.length;i++)
|
||
this.data[i] = i % 2 == 0?im:re;
|
||
break;
|
||
default:this.data.fill(v);break}};
|
||
Ml_Bigarray.prototype.compare
|
||
=
|
||
function(b,total)
|
||
{if(this.layout != b.layout || this.kind != b.kind)
|
||
{var k1=this.kind | this.layout << 8,k2=b.kind | b.layout << 8;
|
||
return k2 - k1}
|
||
if(this.dims.length != b.dims.length)
|
||
return b.dims.length - this.dims.length;
|
||
for(var i=0;i < this.dims.length;i++)
|
||
if(this.dims[i] != b.dims[i])return this.dims[i] < b.dims[i]?- 1:1;
|
||
switch(this.kind)
|
||
{case 0:
|
||
case 1:
|
||
case 10:
|
||
case 11:
|
||
var x,y;
|
||
for(var i=0;i < this.data.length;i++)
|
||
{x = this.data[i];
|
||
y = b.data[i];
|
||
if(x < y)return - 1;
|
||
if(x > y)return 1;
|
||
if(x != y)
|
||
{if(! total)return NaN;if(x == x)return 1;if(y == y)return - 1}}
|
||
break;
|
||
case 7:
|
||
for(var i=0;i < this.data.length;i += 2)
|
||
{if(this.data[i + 1] < b.data[i + 1])return - 1;
|
||
if(this.data[i + 1] > b.data[i + 1])return 1;
|
||
if(this.data[i] >>> 0 < b.data[i] >>> 0)return - 1;
|
||
if(this.data[i] >>> 0 > b.data[i] >>> 0)return 1}
|
||
break;
|
||
case 2:
|
||
case 3:
|
||
case 4:
|
||
case 5:
|
||
case 6:
|
||
case 8:
|
||
case 9:
|
||
case 12:
|
||
for(var i=0;i < this.data.length;i++)
|
||
{if(this.data[i] < b.data[i])return - 1;
|
||
if(this.data[i] > b.data[i])return 1}
|
||
break
|
||
}
|
||
return 0};
|
||
function Ml_Bigarray_c_1_1(kind,layout,dims,buffer)
|
||
{this.kind = kind;
|
||
this.layout = layout;
|
||
this.dims = dims;
|
||
this.data = buffer}
|
||
Ml_Bigarray_c_1_1.prototype = new Ml_Bigarray();
|
||
Ml_Bigarray_c_1_1.prototype.offset
|
||
=
|
||
function(arg)
|
||
{if(typeof arg !== "number")
|
||
if(arg instanceof Array && arg.length == 1)
|
||
arg = arg[0];
|
||
else
|
||
caml_invalid_argument("Ml_Bigarray_c_1_1.offset");
|
||
if(arg < 0 || arg >= this.dims[0])caml_array_bound_error();
|
||
return arg};
|
||
Ml_Bigarray_c_1_1.prototype.get = function(ofs){return this.data[ofs]};
|
||
Ml_Bigarray_c_1_1.prototype.set
|
||
=
|
||
function(ofs,v){this.data[ofs] = v;return 0};
|
||
Ml_Bigarray_c_1_1.prototype.fill
|
||
=
|
||
function(v){this.data.fill(v);return 0};
|
||
function caml_ba_create_unsafe(kind,layout,dims,data)
|
||
{var size_per_element=caml_ba_get_size_per_element(kind);
|
||
if(caml_ba_get_size(dims) * size_per_element != data.length)
|
||
caml_invalid_argument("length doesn't match dims");
|
||
if(layout == 0 && dims.length == 1 && size_per_element == 1)
|
||
return new Ml_Bigarray_c_1_1(kind,layout,dims,data);
|
||
return new Ml_Bigarray(kind,layout,dims,data)}
|
||
function caml_ba_deserialize(reader,sz)
|
||
{var num_dims=reader.read32s();
|
||
if(num_dims < 0 || num_dims > 16)
|
||
caml_failwith("input_value: wrong number of bigarray dimensions");
|
||
var tag=reader.read32s(),kind=tag & 0xff,layout=tag >> 8 & 1,dims=[];
|
||
for(var i=0;i < num_dims;i++)dims.push(reader.read32u());
|
||
var
|
||
size=caml_ba_get_size(dims),
|
||
data=caml_ba_create_buffer(kind,size),
|
||
ba=caml_ba_create_unsafe(kind,layout,dims,data);
|
||
switch(kind)
|
||
{case 2:for(var i=0;i < size;i++)data[i] = reader.read8s();break;
|
||
case 3:
|
||
case 12:for(var i=0;i < size;i++)data[i] = reader.read8u();break;
|
||
case 4:for(var i=0;i < size;i++)data[i] = reader.read16s();break;
|
||
case 5:for(var i=0;i < size;i++)data[i] = reader.read16u();break;
|
||
case 6:for(var i=0;i < size;i++)data[i] = reader.read32s();break;
|
||
case 8:
|
||
case 9:
|
||
var sixty=reader.read8u();
|
||
if(sixty)
|
||
caml_failwith
|
||
("input_value: cannot read bigarray with 64-bit OCaml ints");
|
||
for(var i=0;i < size;i++)data[i] = reader.read32s();
|
||
break;
|
||
case 7:
|
||
var t=new Array(8);
|
||
for(var i=0;i < size;i++)
|
||
{for(var j=0;j < 8;j++)t[j] = reader.read8u();
|
||
var int64=caml_int64_of_bytes(t);
|
||
ba.set(i,int64)}
|
||
break;
|
||
case 1:
|
||
var t=new Array(8);
|
||
for(var i=0;i < size;i++)
|
||
{for(var j=0;j < 8;j++)t[j] = reader.read8u();
|
||
var f=caml_int64_float_of_bits(caml_int64_of_bytes(t));
|
||
ba.set(i,f)}
|
||
break;
|
||
case 0:
|
||
for(var i=0;i < size;i++)
|
||
{var f=caml_int32_float_of_bits(reader.read32s());ba.set(i,f)}
|
||
break;
|
||
case 10:
|
||
for(var i=0;i < size;i++)
|
||
{var
|
||
re=caml_int32_float_of_bits(reader.read32s()),
|
||
im=caml_int32_float_of_bits(reader.read32s());
|
||
ba.set(i,[254,re,im])}
|
||
break;
|
||
case 11:
|
||
var t=new Array(8);
|
||
for(var i=0;i < size;i++)
|
||
{for(var j=0;j < 8;j++)t[j] = reader.read8u();
|
||
var re=caml_int64_float_of_bits(caml_int64_of_bytes(t));
|
||
for(var j=0;j < 8;j++)t[j] = reader.read8u();
|
||
var im=caml_int64_float_of_bits(caml_int64_of_bytes(t));
|
||
ba.set(i,[254,re,im])}
|
||
break
|
||
}
|
||
sz[0] = (4 + num_dims) * 4;
|
||
return caml_ba_create_unsafe(kind,layout,dims,data)}
|
||
function caml_ba_compare(a,b,total){return a.compare(b,total)}
|
||
function caml_hash_mix_int64(h,v)
|
||
{h = caml_hash_mix_int(h,caml_int64_lo32(v));
|
||
h = caml_hash_mix_int(h,caml_int64_hi32(v));
|
||
return h}
|
||
function caml_hash_mix_float(h,v0)
|
||
{return caml_hash_mix_int64(h,caml_int64_bits_of_float(v0))}
|
||
function caml_ba_hash(ba)
|
||
{var num_elts=caml_ba_get_size(ba.dims),h=0;
|
||
switch(ba.kind)
|
||
{case 2:
|
||
case 3:
|
||
case 12:
|
||
if(num_elts > 256)num_elts = 256;
|
||
var w=0,i=0;
|
||
for(i = 0;i + 4 <= ba.data.length;i += 4)
|
||
{w
|
||
=
|
||
ba.data[i + 0]
|
||
|
|
||
ba.data[i + 1]
|
||
<<
|
||
8
|
||
|
|
||
ba.data[i + 2]
|
||
<<
|
||
16
|
||
|
|
||
ba.data[i + 3]
|
||
<<
|
||
24;
|
||
h = caml_hash_mix_int(h,w)}
|
||
w = 0;
|
||
switch(num_elts & 3)
|
||
{case 3:w = ba.data[i + 2] << 16;
|
||
case 2:w |= ba.data[i + 1] << 8;
|
||
case 1:w |= ba.data[i + 0];h = caml_hash_mix_int(h,w)
|
||
}
|
||
break;
|
||
case 4:
|
||
case 5:
|
||
if(num_elts > 128)num_elts = 128;
|
||
var w=0,i=0;
|
||
for(i = 0;i + 2 <= ba.data.length;i += 2)
|
||
{w = ba.data[i + 0] | ba.data[i + 1] << 16;
|
||
h = caml_hash_mix_int(h,w)}
|
||
if((num_elts & 1) != 0)h = caml_hash_mix_int(h,ba.data[i]);
|
||
break;
|
||
case 6:
|
||
if(num_elts > 64)num_elts = 64;
|
||
for(var i=0;i < num_elts;i++)h = caml_hash_mix_int(h,ba.data[i]);
|
||
break;
|
||
case 8:
|
||
case 9:
|
||
if(num_elts > 64)num_elts = 64;
|
||
for(var i=0;i < num_elts;i++)h = caml_hash_mix_int(h,ba.data[i]);
|
||
break;
|
||
case 7:
|
||
if(num_elts > 32)num_elts = 32;
|
||
num_elts *= 2;
|
||
for(var i=0;i < num_elts;i++)h = caml_hash_mix_int(h,ba.data[i]);
|
||
break;
|
||
case 10:num_elts *= 2;
|
||
case 0:
|
||
if(num_elts > 64)num_elts = 64;
|
||
for(var i=0;i < num_elts;i++)h = caml_hash_mix_float(h,ba.data[i]);
|
||
break;
|
||
case 11:num_elts *= 2;
|
||
case 1:
|
||
if(num_elts > 32)num_elts = 32;
|
||
for(var i=0;i < num_elts;i++)h = caml_hash_mix_float(h,ba.data[i]);
|
||
break
|
||
}
|
||
return h}
|
||
function caml_int32_unmarshal(reader,size)
|
||
{size[0] = 4;return reader.read32s()}
|
||
function caml_nativeint_unmarshal(reader,size)
|
||
{switch(reader.read8u())
|
||
{case 1:size[0] = 4;return reader.read32s();
|
||
case 2:caml_failwith("input_value: native integer value too large");
|
||
default:caml_failwith("input_value: ill-formed native integer")}}
|
||
function caml_int64_unmarshal(reader,size)
|
||
{var t=new Array(8);
|
||
for(var j=0;j < 8;j++)t[j] = reader.read8u();
|
||
size[0] = 8;
|
||
return caml_int64_of_bytes(t)}
|
||
function caml_int64_compare(x,y,total){return x.compare(y)}
|
||
function caml_int64_hash(v){return v.lo32() ^ v.hi32()}
|
||
var
|
||
caml_custom_ops=
|
||
{"_j":
|
||
{deserialize:caml_int64_unmarshal,
|
||
serialize:caml_int64_marshal,
|
||
fixed_length:8,
|
||
compare:caml_int64_compare,
|
||
hash:caml_int64_hash},
|
||
"_i":{deserialize:caml_int32_unmarshal,fixed_length:4},
|
||
"_n":{deserialize:caml_nativeint_unmarshal,fixed_length:4},
|
||
"_bigarray":
|
||
{deserialize:caml_ba_deserialize,
|
||
serialize:caml_ba_serialize,
|
||
compare:caml_ba_compare,
|
||
hash:caml_ba_hash}};
|
||
function caml_compare_val_get_custom(a)
|
||
{return caml_custom_ops[a.caml_custom]
|
||
&&
|
||
caml_custom_ops[a.caml_custom].compare}
|
||
function caml_compare_val_number_custom(num,custom,swap,total)
|
||
{var comp=caml_compare_val_get_custom(custom);
|
||
if(comp)
|
||
{var x=swap > 0?comp(custom,num,total):comp(num,custom,total);
|
||
if(total && x != x)return swap;
|
||
if(+ x != + x)return + x;
|
||
if((x | 0) != 0)return x | 0}
|
||
return swap}
|
||
function caml_compare_val_tag(a)
|
||
{if(typeof a === "number")
|
||
return 1000;
|
||
else
|
||
if(caml_is_ml_bytes(a))
|
||
return 252;
|
||
else
|
||
if(caml_is_ml_string(a))
|
||
return 1252;
|
||
else
|
||
if(a instanceof Array && a[0] === a[0] >>> 0 && a[0] <= 255)
|
||
{var tag=a[0] | 0;return tag == 254?0:tag}
|
||
else
|
||
if(a instanceof String)
|
||
return 12520;
|
||
else
|
||
if(typeof a == "string")
|
||
return 12520;
|
||
else
|
||
if(a instanceof Number)
|
||
return 1000;
|
||
else
|
||
if(a && a.caml_custom)
|
||
return 1255;
|
||
else
|
||
if(a && a.compare)
|
||
return 1256;
|
||
else
|
||
if(typeof a == "function")
|
||
return 1247;
|
||
else
|
||
if(typeof a == "symbol")return 1251;
|
||
return 1001}
|
||
function caml_int_compare(a,b)
|
||
{if(a < b)return - 1;if(a == b)return 0;return 1}
|
||
function caml_bytes_compare(s1,s2)
|
||
{s1.t & 6 && caml_convert_string_to_bytes(s1);
|
||
s2.t & 6 && caml_convert_string_to_bytes(s2);
|
||
return s1.c < s2.c?- 1:s1.c > s2.c?1:0}
|
||
function caml_string_compare(s1,s2){return caml_bytes_compare(s1,s2)}
|
||
function caml_compare_val(a,b,total)
|
||
{var stack=[];
|
||
for(;;)
|
||
{if(! (total && a === b))
|
||
{var tag_a=caml_compare_val_tag(a);
|
||
if(tag_a == 250){a = a[1];continue}
|
||
var tag_b=caml_compare_val_tag(b);
|
||
if(tag_b == 250){b = b[1];continue}
|
||
if(tag_a !== tag_b)
|
||
{if(tag_a == 1000)
|
||
{if(tag_b == 1255)
|
||
return caml_compare_val_number_custom(a,b,- 1,total);
|
||
return - 1}
|
||
if(tag_b == 1000)
|
||
{if(tag_a == 1255)
|
||
return caml_compare_val_number_custom(b,a,1,total);
|
||
return 1}
|
||
return tag_a < tag_b?- 1:1}
|
||
switch(tag_a)
|
||
{case 247:caml_invalid_argument("compare: functional value");break;
|
||
case 248:
|
||
var x=caml_int_compare(a[2],b[2]);if(x != 0)return x | 0;break;
|
||
case 249:caml_invalid_argument("compare: functional value");break;
|
||
case 250:
|
||
caml_invalid_argument
|
||
("equal: got Forward_tag, should not happen");
|
||
break;
|
||
case 251:caml_invalid_argument("equal: abstract value");break;
|
||
case 252:
|
||
if(a !== b){var x=caml_bytes_compare(a,b);if(x != 0)return x | 0}
|
||
break;
|
||
case 253:
|
||
caml_invalid_argument("equal: got Double_tag, should not happen");
|
||
break;
|
||
case 254:
|
||
caml_invalid_argument
|
||
("equal: got Double_array_tag, should not happen");
|
||
break;
|
||
case 255:
|
||
caml_invalid_argument("equal: got Custom_tag, should not happen");
|
||
break;
|
||
case 1247:
|
||
caml_invalid_argument("compare: functional value");break;
|
||
case 1255:
|
||
var comp=caml_compare_val_get_custom(a);
|
||
if(comp != caml_compare_val_get_custom(b))
|
||
return a.caml_custom < b.caml_custom?- 1:1;
|
||
if(! comp)caml_invalid_argument("compare: abstract value");
|
||
var x=comp(a,b,total);
|
||
if(x != x)return total?- 1:x;
|
||
if(x !== (x | 0))return - 1;
|
||
if(x != 0)return x | 0;
|
||
break;
|
||
case 1256:
|
||
var x=a.compare(b,total);
|
||
if(x != x)return total?- 1:x;
|
||
if(x !== (x | 0))return - 1;
|
||
if(x != 0)return x | 0;
|
||
break;
|
||
case 1000:
|
||
a = + a;
|
||
b = + b;
|
||
if(a < b)return - 1;
|
||
if(a > b)return 1;
|
||
if(a != b)
|
||
{if(! total)return NaN;if(a == a)return 1;if(b == b)return - 1}
|
||
break;
|
||
case 1001:
|
||
if(a < b)return - 1;
|
||
if(a > b)return 1;
|
||
if(a != b)
|
||
{if(! total)return NaN;if(a == a)return 1;if(b == b)return - 1}
|
||
break;
|
||
case 1251:if(a !== b){if(! total)return NaN;return 1}break;
|
||
case 1252:
|
||
var a=caml_jsbytes_of_string(a),b=caml_jsbytes_of_string(b);
|
||
if(a !== b){if(a < b)return - 1;if(a > b)return 1}
|
||
break;
|
||
case 12520:
|
||
var a=a.toString(),b=b.toString();
|
||
if(a !== b){if(a < b)return - 1;if(a > b)return 1}
|
||
break;
|
||
case 246:
|
||
case 254:
|
||
default:
|
||
if(a.length != b.length)return a.length < b.length?- 1:1;
|
||
if(a.length > 1)stack.push(a,b,1);
|
||
break}}
|
||
if(stack.length == 0)return 0;
|
||
var i=stack.pop();
|
||
b = stack.pop();
|
||
a = stack.pop();
|
||
if(i + 1 < a.length)stack.push(a,b,i + 1);
|
||
a = a[i];
|
||
b = b[i]}}
|
||
function caml_greaterthan(x,y){return + (caml_compare_val(x,y,false) > 0)}
|
||
function div_helper(a,b,c)
|
||
{var
|
||
x=a * 65536 + (b >>> 16),
|
||
y=Math.floor(x / c) * 65536,
|
||
z=x % c * 65536,
|
||
w=z + (b & 0x0000FFFF);
|
||
return [y + Math.floor(w / c),w % c]}
|
||
function div_digit_nat(natq,ofsq,natr,ofsr,nat1,ofs1,len,nat2,ofs2)
|
||
{var rem=nat1.data[ofs1 + len - 1] >>> 0;
|
||
for(var i=len - 2;i >= 0;i--)
|
||
{var x=div_helper(rem,nat1.data[ofs1 + i] >>> 0,nat2.data[ofs2] >>> 0);
|
||
natq.data[ofsq + i] = x[0];
|
||
rem = x[1]}
|
||
natr.data[ofsr] = rem;
|
||
return 0}
|
||
function num_leading_zero_bits_in_digit(nat,ofs)
|
||
{var a=nat.data[ofs],b=0;
|
||
if(a & 0xFFFF0000){b += 16;a >>>= 16}
|
||
if(a & 0xFF00){b += 8;a >>>= 8}
|
||
if(a & 0xF0){b += 4;a >>>= 4}
|
||
if(a & 12){b += 2;a >>>= 2}
|
||
if(a & 2){b += 1;a >>>= 1}
|
||
if(a & 1)b += 1;
|
||
return 32 - b}
|
||
function shift_left_nat(nat1,ofs1,len1,nat2,ofs2,nbits)
|
||
{if(nbits == 0){nat2.data[ofs2] = 0;return 0}
|
||
var wrap=0;
|
||
for(var i=0;i < len1;i++)
|
||
{var a=nat1.data[ofs1 + i] >>> 0;
|
||
nat1.data[ofs1 + i] = a << nbits | wrap;
|
||
wrap = a >>> 32 - nbits}
|
||
nat2.data[ofs2] = wrap;
|
||
return 0}
|
||
function MlNat(x)
|
||
{this.data = new (joo_global_object.Int32Array)(x);
|
||
this.length = this.data.length + 2}
|
||
MlNat.prototype.caml_custom = "_nat";
|
||
function create_nat(size)
|
||
{var arr=new MlNat(size);
|
||
for(var i=0;i < size;i++)arr.data[i] = - 1;
|
||
return arr}
|
||
function set_to_zero_nat(nat,ofs,len)
|
||
{for(var i=0;i < len;i++)nat.data[ofs + i] = 0;return 0}
|
||
function incr_nat(nat,ofs,len,carry_in)
|
||
{var carry=carry_in;
|
||
for(var i=0;i < len;i++)
|
||
{var x=(nat.data[ofs + i] >>> 0) + carry;
|
||
nat.data[ofs + i] = x | 0;
|
||
if(x == x >>> 0){carry = 0;break}else carry = 1}
|
||
return carry}
|
||
function add_nat(nat1,ofs1,len1,nat2,ofs2,len2,carry_in)
|
||
{var carry=carry_in;
|
||
for(var i=0;i < len2;i++)
|
||
{var
|
||
x=
|
||
(nat1.data[ofs1 + i] >>> 0) + (nat2.data[ofs2 + i] >>> 0) + carry;
|
||
nat1.data[ofs1 + i] = x;
|
||
if(x == x >>> 0)carry = 0;else carry = 1}
|
||
return incr_nat(nat1,ofs1 + len2,len1 - len2,carry)}
|
||
function nat_of_array(l){return new MlNat(l)}
|
||
function mult_digit_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat3,ofs3)
|
||
{var carry=0,a=nat3.data[ofs3] >>> 0;
|
||
for(var i=0;i < len2;i++)
|
||
{var
|
||
x1=
|
||
(nat1.data[ofs1 + i] >>> 0)
|
||
+
|
||
(nat2.data[ofs2 + i] >>> 0)
|
||
*
|
||
(a & 0x0000FFFF)
|
||
+
|
||
carry,
|
||
x2=(nat2.data[ofs2 + i] >>> 0) * (a >>> 16);
|
||
carry = Math.floor(x2 / 65536);
|
||
var x3=x1 + x2 % 65536 * 65536;
|
||
nat1.data[ofs1 + i] = x3;
|
||
carry += Math.floor(x3 / 4294967296)}
|
||
return len2 < len1 && carry
|
||
?add_nat
|
||
(nat1,ofs1 + len2,len1 - len2,nat_of_array([carry]),0,1,0)
|
||
:carry}
|
||
function decr_nat(nat,ofs,len,carry_in)
|
||
{var borrow=carry_in == 1?0:1;
|
||
for(var i=0;i < len;i++)
|
||
{var x=(nat.data[ofs + i] >>> 0) - borrow;
|
||
nat.data[ofs + i] = x;
|
||
if(x >= 0){borrow = 0;break}else borrow = 1}
|
||
return borrow == 1?0:1}
|
||
function sub_nat(nat1,ofs1,len1,nat2,ofs2,len2,carry_in)
|
||
{var borrow=carry_in == 1?0:1;
|
||
for(var i=0;i < len2;i++)
|
||
{var
|
||
x=
|
||
(nat1.data[ofs1 + i] >>> 0) - (nat2.data[ofs2 + i] >>> 0) - borrow;
|
||
nat1.data[ofs1 + i] = x;
|
||
if(x >= 0)borrow = 0;else borrow = 1}
|
||
return decr_nat(nat1,ofs1 + len2,len1 - len2,borrow == 1?0:1)}
|
||
function compare_nat(nat1,ofs1,len1,nat2,ofs2,len2)
|
||
{var a=num_digits_nat(nat1,ofs1,len1),b=num_digits_nat(nat2,ofs2,len2);
|
||
if(a > b)return 1;
|
||
if(a < b)return - 1;
|
||
for(var i=len1 - 1;i >= 0;i--)
|
||
{if(nat1.data[ofs1 + i] >>> 0 > nat2.data[ofs2 + i] >>> 0)return 1;
|
||
if(nat1.data[ofs1 + i] >>> 0 < nat2.data[ofs2 + i] >>> 0)return - 1}
|
||
return 0}
|
||
function div_nat(nat1,ofs1,len1,nat2,ofs2,len2)
|
||
{if(len2 == 1)
|
||
{div_digit_nat(nat1,ofs1 + 1,nat1,ofs1,nat1,ofs1,len1,nat2,ofs2);
|
||
return 0}
|
||
var s=num_leading_zero_bits_in_digit(nat2,ofs2 + len2 - 1);
|
||
shift_left_nat(nat2,ofs2,len2,nat_of_array([0]),0,s);
|
||
shift_left_nat(nat1,ofs1,len1,nat_of_array([0]),0,s);
|
||
var d=(nat2.data[ofs2 + len2 - 1] >>> 0) + 1,a=create_nat(len2 + 1);
|
||
for(var i=len1 - 1;i >= len2;i--)
|
||
{var
|
||
quo=
|
||
d == 4294967296
|
||
?nat1.data[ofs1 + i] >>> 0
|
||
:div_helper
|
||
(nat1.data[ofs1 + i] >>> 0,nat1.data[ofs1 + i - 1] >>> 0,d)
|
||
[0];
|
||
set_to_zero_nat(a,0,len2 + 1);
|
||
mult_digit_nat(a,0,len2 + 1,nat2,ofs2,len2,nat_of_array([quo]),0);
|
||
sub_nat(nat1,ofs1 + i - len2,len2 + 1,a,0,len2 + 1,1);
|
||
while
|
||
(nat1.data[ofs1 + i]
|
||
!=
|
||
0
|
||
||
|
||
compare_nat(nat1,ofs1 + i - len2,len2,nat2,ofs2,len2)
|
||
>=
|
||
0)
|
||
{quo = quo + 1;
|
||
sub_nat(nat1,ofs1 + i - len2,len2 + 1,nat2,ofs2,len2,1)}
|
||
nat1.data[ofs1 + i] = quo}
|
||
shift_right_nat(nat1,ofs1,len2,nat_of_array([0]),0,s);
|
||
shift_right_nat(nat2,ofs2,len2,nat_of_array([0]),0,s);
|
||
return 0}
|
||
function caml_ba_blit(src,dst)
|
||
{if(dst.dims.length != src.dims.length)
|
||
caml_invalid_argument("Bigarray.blit: dimension mismatch");
|
||
for(var i=0;i < dst.dims.length;i++)
|
||
if(dst.dims[i] != src.dims[i])
|
||
caml_invalid_argument("Bigarray.blit: dimension mismatch");
|
||
dst.data.set(src.data);
|
||
return 0}
|
||
function is_digit_int(nat,ofs){if(nat.data[ofs] >= 0)return 1;return 0}
|
||
function caml_int64_div(x,y){return x.div(y)}
|
||
function caml_js_html_entities(s)
|
||
{var entity=/^&#?[0-9a-zA-Z]+;$/;
|
||
if(s.match(entity))
|
||
{var str,temp=document.createElement("p");
|
||
temp.innerHTML = s;
|
||
str = temp.textContent || temp.innerText;
|
||
temp = null;
|
||
return str}
|
||
else
|
||
caml_failwith("Invalid entity " + s)}
|
||
function caml_string_unsafe_set(s,i,c)
|
||
{return caml_bytes_unsafe_set(s,i,c)}
|
||
function caml_int64_of_float(x)
|
||
{if(x < 0)x = Math.ceil(x);
|
||
return new
|
||
MlInt64
|
||
(x & 0xffffff,
|
||
Math.floor(x * caml_int64_offset) & 0xffffff,
|
||
Math.floor(x * caml_int64_offset * caml_int64_offset) & 0xffff)}
|
||
function caml_ml_channel_size_64(chanid)
|
||
{var chan=caml_ml_channels[chanid];
|
||
return caml_int64_of_float(chan.file.length())}
|
||
function caml_ba_set_2(ba,i0,i1,v){ba.set(ba.offset([i0,i1]),v);return 0}
|
||
var
|
||
caml_argv=
|
||
function()
|
||
{var g=joo_global_object,main="a.out",args=[];
|
||
if(g.process && g.process.argv && g.process.argv.length > 1)
|
||
{var argv=g.process.argv;main = argv[1];args = argv.slice(2)}
|
||
var p=caml_string_of_jsstring(main),args2=[0,p];
|
||
for(var i=0;i < args.length;i++)
|
||
args2.push(caml_string_of_jsstring(args[i]));
|
||
return args2}
|
||
(),
|
||
caml_executable_name=caml_argv[1];
|
||
function caml_js_eval_string(s){return eval(caml_jsstring_of_string(s))}
|
||
function caml_CamlinternalMod_init_mod(loc,shape)
|
||
{function undef_module(_x)
|
||
{caml_raise_with_arg(caml_global_data.Undefined_recursive_module,loc)}
|
||
function loop(shape,struct,idx)
|
||
{if(typeof shape === "number")
|
||
switch(shape)
|
||
{case 0:struct[idx] = {fun:undef_module};break;
|
||
case 1:struct[idx] = [246,undef_module];break;
|
||
default:struct[idx] = []}
|
||
else
|
||
switch(shape[0])
|
||
{case 0:
|
||
struct[idx] = [0];
|
||
for(var i=1;i < shape[1].length;i++)
|
||
loop(shape[1][i],struct[idx],i);
|
||
break;
|
||
default:struct[idx] = shape[1]}}
|
||
var res=[];
|
||
loop(shape,res,0);
|
||
return res[0]}
|
||
function serialize_nat(writer,nat,sz)
|
||
{var len=nat.data.length;
|
||
writer.write(32,len);
|
||
for(var i=0;i < len;i++)writer.write(32,nat.data[i]);
|
||
sz[0] = len * 4;
|
||
sz[1] = len * 8}
|
||
function caml_memprof_set(_control){return 0}
|
||
function caml_sys_exit(code)
|
||
{var g=joo_global_object;
|
||
if(g.quit)g.quit(code);
|
||
if(g.process && g.process.exit)g.process.exit(code);
|
||
caml_invalid_argument("Function 'exit' not implemented")}
|
||
function caml_js_from_array(a){return a.slice(1)}
|
||
function caml_ba_reshape(ba,vind)
|
||
{vind = caml_js_from_array(vind);
|
||
var new_dim=[],num_dims=vind.length;
|
||
if(num_dims < 0 || num_dims > 16)
|
||
caml_invalid_argument("Bigarray.reshape: bad number of dimensions");
|
||
var num_elts=1;
|
||
for(var i=0;i < num_dims;i++)
|
||
{new_dim[i] = vind[i];
|
||
if(new_dim[i] < 0)
|
||
caml_invalid_argument("Bigarray.reshape: negative dimension");
|
||
num_elts = num_elts * new_dim[i]}
|
||
var size=caml_ba_get_size(ba.dims);
|
||
if(num_elts != size)
|
||
caml_invalid_argument("Bigarray.reshape: size mismatch");
|
||
return caml_ba_create_unsafe(ba.kind,ba.layout,new_dim,ba.data)}
|
||
var caml_oo_last_id=0;
|
||
function caml_set_oo_id(b){b[2] = caml_oo_last_id++;return b}
|
||
function caml_gr_fill_rect(x,y,w,h)
|
||
{var s=caml_gr_state_get();
|
||
s.context.fillRect(x,s.height - y,w,- h);
|
||
return 0}
|
||
function caml_bigstring_blit_string_to_ba(str1,pos1,ba2,pos2,len)
|
||
{if(12 != ba2.kind)
|
||
caml_invalid_argument
|
||
("caml_bigstring_blit_string_to_ba: kind mismatch");
|
||
if(len == 0)return 0;
|
||
var ofs2=ba2.offset(pos2);
|
||
if(pos1 + len > caml_ml_string_length(str1))caml_array_bound_error();
|
||
if(ofs2 + len > ba2.data.length)caml_array_bound_error();
|
||
var slice=caml_array_of_string(str1).slice(pos1,pos1 + len);
|
||
ba2.data.set(slice,ofs2);
|
||
return 0}
|
||
function caml_gr_set_window_title(name)
|
||
{var s=caml_gr_state_get();
|
||
s.title = name;
|
||
var jsname=caml_jsstring_of_string(name);
|
||
if(s.set_title)s.set_title(jsname);
|
||
return 0}
|
||
function caml_get_global_data(){return caml_global_data}
|
||
function caml_int64_shift_right_unsigned(x,s)
|
||
{return x.shift_right_unsigned(s)}
|
||
function caml_ba_uint8_get16(ba,i0)
|
||
{var ofs=ba.offset(i0);
|
||
if(ofs + 1 >= ba.data.length)caml_array_bound_error();
|
||
var b1=ba.get(ofs),b2=ba.get(ofs + 1);
|
||
return b1 | b2 << 8}
|
||
function caml_compare(a,b){return caml_compare_val(a,b,true)}
|
||
function caml_fresh_oo_id(){return caml_oo_last_id++}
|
||
function caml_int64_to_float(x){return x.toFloat()}
|
||
function caml_ba_get_1(ba,i0){return ba.get(ba.offset(i0))}
|
||
function caml_bigstring_memcmp(s1,pos1,s2,pos2,len)
|
||
{for(var i=0;i < len;i++)
|
||
{var a=caml_ba_get_1(s1,pos1 + i),b=caml_ba_get_1(s2,pos2 + i);
|
||
if(a < b)return - 1;
|
||
if(a > b)return 1}
|
||
return 0}
|
||
function caml_new_string(s){return caml_string_of_jsbytes(s)}
|
||
function caml_ba_uint8_get32(ba,i0)
|
||
{var ofs=ba.offset(i0);
|
||
if(ofs + 3 >= ba.data.length)caml_array_bound_error();
|
||
var
|
||
b1=ba.get(ofs + 0),
|
||
b2=ba.get(ofs + 1),
|
||
b3=ba.get(ofs + 2),
|
||
b4=ba.get(ofs + 3);
|
||
return b1 << 0 | b2 << 8 | b3 << 16 | b4 << 24}
|
||
function caml_raw_backtrace_length(){return 0}
|
||
function caml_obj_block(tag,size)
|
||
{var o=new Array(size + 1);
|
||
o[0] = tag;
|
||
for(var i=1;i <= size;i++)o[i] = 0;
|
||
return o}
|
||
function caml_gr_clear_graph()
|
||
{var s=caml_gr_state_get();
|
||
s.canvas.width = s.width;
|
||
s.canvas.height = s.height;
|
||
return 0}
|
||
function bigstring_to_array_buffer(bs){return bs.data.buffer}
|
||
function lxor_digit_nat(nat1,ofs1,nat2,ofs2)
|
||
{nat1.data[ofs1] ^= nat2.data[ofs2];return 0}
|
||
function caml_final_release(){return 0}
|
||
function caml_js_to_array(a)
|
||
{var len=a.length,b=new Array(len + 1);
|
||
b[0] = 0;
|
||
for(var i=0;i < len;i++)b[i + 1] = a[i];
|
||
return b}
|
||
function caml_gr_plot(x,y)
|
||
{var
|
||
s=caml_gr_state_get(),
|
||
im=s.context.createImageData(1,1),
|
||
d=im.data,
|
||
color=s.color;
|
||
d[0] = color >> 16 & 0xff;
|
||
d[1] = color >> 8 & 0xff,d[2] = color >> 0 & 0xff;
|
||
d[3] = 0xFF;
|
||
s.x = x;
|
||
s.y = y;
|
||
s.context.putImageData(im,x,s.height - y);
|
||
return 0}
|
||
function caml_bytes_set64(s,i,i64)
|
||
{if(i >>> 0 >= s.l - 7)caml_bytes_bound_error();
|
||
var a=caml_int64_to_bytes(i64);
|
||
for(var j=0;j < 8;j++)caml_bytes_unsafe_set(s,i + 7 - j,a[j]);
|
||
return 0}
|
||
function caml_bytes_set16(s,i,i16)
|
||
{if(i >>> 0 >= s.l - 1)caml_bytes_bound_error();
|
||
var b2=0xFF & i16 >> 8,b1=0xFF & i16;
|
||
caml_bytes_unsafe_set(s,i + 0,b1);
|
||
caml_bytes_unsafe_set(s,i + 1,b2);
|
||
return 0}
|
||
function caml_string_set16(s,i,i16){return caml_bytes_set16(s,i,i16)}
|
||
function caml_int64_bswap(x)
|
||
{var y=caml_int64_to_bytes(x);
|
||
return caml_int64_of_bytes([y[7],y[6],y[5],y[4],y[3],y[2],y[1],y[0]])}
|
||
function caml_fill_bytes(s,i,l,c)
|
||
{if(l > 0)
|
||
if(i == 0 && (l >= s.l || s.t == 2 && l >= s.c.length))
|
||
if(c == 0)
|
||
{s.c = "";s.t = 2}
|
||
else
|
||
{s.c = caml_str_repeat(l,String.fromCharCode(c));s.t = l == s.l?0:2}
|
||
else
|
||
{if(s.t != 4)caml_convert_bytes_to_array(s);
|
||
for(l += i;i < l;i++)s.c[i] = c}
|
||
return 0}
|
||
var caml_fill_string=caml_fill_bytes;
|
||
function caml_gc_major(){return 0}
|
||
function caml_lex_array(s)
|
||
{s = caml_jsbytes_of_string(s);
|
||
var l=s.length / 2,a=new Array(l);
|
||
for(var i=0;i < l;i++)
|
||
a[i]
|
||
=
|
||
(s.charCodeAt(2 * i) | s.charCodeAt(2 * i + 1) << 8)
|
||
<<
|
||
16
|
||
>>
|
||
16;
|
||
return a}
|
||
function caml_lex_engine(tbl,start_state,lexbuf)
|
||
{var
|
||
lex_buffer=2,
|
||
lex_buffer_len=3,
|
||
lex_start_pos=5,
|
||
lex_curr_pos=6,
|
||
lex_last_pos=7,
|
||
lex_last_action=8,
|
||
lex_eof_reached=9,
|
||
lex_base=1,
|
||
lex_backtrk=2,
|
||
lex_default=3,
|
||
lex_trans=4,
|
||
lex_check=5;
|
||
if(! tbl.lex_default)
|
||
{tbl.lex_base = caml_lex_array(tbl[lex_base]);
|
||
tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]);
|
||
tbl.lex_check = caml_lex_array(tbl[lex_check]);
|
||
tbl.lex_trans = caml_lex_array(tbl[lex_trans]);
|
||
tbl.lex_default = caml_lex_array(tbl[lex_default])}
|
||
var c,state=start_state,buffer=caml_array_of_bytes(lexbuf[lex_buffer]);
|
||
if(state >= 0)
|
||
{lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos];
|
||
lexbuf[lex_last_action] = - 1}
|
||
else
|
||
state = - state - 1;
|
||
for(;;)
|
||
{var base=tbl.lex_base[state];
|
||
if(base < 0)return - base - 1;
|
||
var backtrk=tbl.lex_backtrk[state];
|
||
if(backtrk >= 0)
|
||
{lexbuf[lex_last_pos] = lexbuf[lex_curr_pos];
|
||
lexbuf[lex_last_action] = backtrk}
|
||
if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len])
|
||
if(lexbuf[lex_eof_reached] == 0)return - state - 1;else c = 256;
|
||
else
|
||
{c = buffer[lexbuf[lex_curr_pos]];lexbuf[lex_curr_pos]++}
|
||
if(tbl.lex_check[base + c] == state)
|
||
state = tbl.lex_trans[base + c];
|
||
else
|
||
state = tbl.lex_default[state];
|
||
if(state < 0)
|
||
{lexbuf[lex_curr_pos] = lexbuf[lex_last_pos];
|
||
if(lexbuf[lex_last_action] == - 1)
|
||
caml_failwith("lexing: empty token");
|
||
else
|
||
return lexbuf[lex_last_action]}
|
||
else
|
||
if(c == 256)lexbuf[lex_eof_reached] = 0}}
|
||
function caml_sys_file_exists(name)
|
||
{var root=resolve_fs_device(name);return root.device.exists(root.rest)}
|
||
function caml_convert_raw_backtrace_slot()
|
||
{caml_failwith("caml_convert_raw_backtrace_slot")}
|
||
function caml_array_sub(a,i,len)
|
||
{var a2=new Array(len + 1);
|
||
a2[0] = 0;
|
||
for(var i2=1,i1=i + 1;i2 <= len;i2++,i1++)a2[i2] = a[i1];
|
||
return a2}
|
||
function caml_bytes_equal(s1,s2)
|
||
{if(s1 === s2)return 1;
|
||
s1.t & 6 && caml_convert_string_to_bytes(s1);
|
||
s2.t & 6 && caml_convert_string_to_bytes(s2);
|
||
return s1.c == s2.c?1:0}
|
||
function caml_gr_size_x(){var s=caml_gr_state_get();return s.width}
|
||
function caml_sys_const_ostype_cygwin(){return 0}
|
||
function caml_cosh_float(x){return (Math.exp(x) + Math.exp(- x)) / 2}
|
||
var caml_ephe_key_offset=3;
|
||
function caml_weak_check(x,i)
|
||
{return x[caml_ephe_key_offset + i]
|
||
!==
|
||
undefined
|
||
&&
|
||
x[caml_ephe_key_offset + i]
|
||
!==
|
||
0
|
||
?1
|
||
:0}
|
||
var caml_ephe_check_key=caml_weak_check;
|
||
function caml_hash_mix_final(h)
|
||
{h ^= h >>> 16;
|
||
h = caml_mul(h,0x85ebca6b | 0);
|
||
h ^= h >>> 13;
|
||
h = caml_mul(h,0xc2b2ae35 | 0);
|
||
h ^= h >>> 16;
|
||
return h}
|
||
function caml_gr_text_size(txt)
|
||
{var
|
||
s=caml_gr_state_get(),
|
||
w=s.context.measureText(caml_jsstring_of_string(txt)).width;
|
||
return [0,w,s.text_size]}
|
||
function caml_lex_run_mem(s,i,mem,curr_pos)
|
||
{for(;;)
|
||
{var dst=s.charCodeAt(i);
|
||
i++;
|
||
if(dst == 0xff)return;
|
||
var src=s.charCodeAt(i);
|
||
i++;
|
||
if(src == 0xff)
|
||
mem[dst + 1] = curr_pos;
|
||
else
|
||
mem[dst + 1] = mem[src + 1]}}
|
||
function caml_lex_run_tag(s,i,mem)
|
||
{for(;;)
|
||
{var dst=s.charCodeAt(i);
|
||
i++;
|
||
if(dst == 0xff)return;
|
||
var src=s.charCodeAt(i);
|
||
i++;
|
||
if(src == 0xff)mem[dst + 1] = - 1;else mem[dst + 1] = mem[src + 1]}}
|
||
function caml_new_lex_engine(tbl,start_state,lexbuf)
|
||
{var
|
||
lex_buffer=2,
|
||
lex_buffer_len=3,
|
||
lex_start_pos=5,
|
||
lex_curr_pos=6,
|
||
lex_last_pos=7,
|
||
lex_last_action=8,
|
||
lex_eof_reached=9,
|
||
lex_mem=10,
|
||
lex_base=1,
|
||
lex_backtrk=2,
|
||
lex_default=3,
|
||
lex_trans=4,
|
||
lex_check=5,
|
||
lex_base_code=6,
|
||
lex_backtrk_code=7,
|
||
lex_default_code=8,
|
||
lex_trans_code=9,
|
||
lex_check_code=10,
|
||
lex_code=11;
|
||
if(! tbl.lex_default)
|
||
{tbl.lex_base = caml_lex_array(tbl[lex_base]);
|
||
tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]);
|
||
tbl.lex_check = caml_lex_array(tbl[lex_check]);
|
||
tbl.lex_trans = caml_lex_array(tbl[lex_trans]);
|
||
tbl.lex_default = caml_lex_array(tbl[lex_default])}
|
||
if(! tbl.lex_default_code)
|
||
{tbl.lex_base_code = caml_lex_array(tbl[lex_base_code]);
|
||
tbl.lex_backtrk_code = caml_lex_array(tbl[lex_backtrk_code]);
|
||
tbl.lex_check_code = caml_lex_array(tbl[lex_check_code]);
|
||
tbl.lex_trans_code = caml_lex_array(tbl[lex_trans_code]);
|
||
tbl.lex_default_code = caml_lex_array(tbl[lex_default_code])}
|
||
if(tbl.lex_code == null)
|
||
tbl.lex_code = caml_jsbytes_of_string(tbl[lex_code]);
|
||
var c,state=start_state,buffer=caml_array_of_bytes(lexbuf[lex_buffer]);
|
||
if(state >= 0)
|
||
{lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos];
|
||
lexbuf[lex_last_action] = - 1}
|
||
else
|
||
state = - state - 1;
|
||
for(;;)
|
||
{var base=tbl.lex_base[state];
|
||
if(base < 0)
|
||
{var pc_off=tbl.lex_base_code[state];
|
||
caml_lex_run_tag(tbl.lex_code,pc_off,lexbuf[lex_mem]);
|
||
return - base - 1}
|
||
var backtrk=tbl.lex_backtrk[state];
|
||
if(backtrk >= 0)
|
||
{var pc_off=tbl.lex_backtrk_code[state];
|
||
caml_lex_run_tag(tbl.lex_code,pc_off,lexbuf[lex_mem]);
|
||
lexbuf[lex_last_pos] = lexbuf[lex_curr_pos];
|
||
lexbuf[lex_last_action] = backtrk}
|
||
if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len])
|
||
if(lexbuf[lex_eof_reached] == 0)return - state - 1;else c = 256;
|
||
else
|
||
{c = buffer[lexbuf[lex_curr_pos]];lexbuf[lex_curr_pos]++}
|
||
var pstate=state;
|
||
if(tbl.lex_check[base + c] == state)
|
||
state = tbl.lex_trans[base + c];
|
||
else
|
||
state = tbl.lex_default[state];
|
||
if(state < 0)
|
||
{lexbuf[lex_curr_pos] = lexbuf[lex_last_pos];
|
||
if(lexbuf[lex_last_action] == - 1)
|
||
caml_failwith("lexing: empty token");
|
||
else
|
||
return lexbuf[lex_last_action]}
|
||
else
|
||
{var base_code=tbl.lex_base_code[pstate],pc_off;
|
||
if(tbl.lex_check_code[base_code + c] == pstate)
|
||
pc_off = tbl.lex_trans_code[base_code + c];
|
||
else
|
||
pc_off = tbl.lex_default_code[pstate];
|
||
if(pc_off > 0)
|
||
caml_lex_run_mem
|
||
(tbl.lex_code,pc_off,lexbuf[lex_mem],lexbuf[lex_curr_pos]);
|
||
if(c == 256)lexbuf[lex_eof_reached] = 0}}}
|
||
function caml_ba_uint8_set64(ba,i0,v)
|
||
{var ofs=ba.offset(i0);
|
||
if(ofs + 7 >= ba.data.length)caml_array_bound_error();
|
||
var v=caml_int64_to_bytes(v);
|
||
for(var i=0;i < 8;i++)ba.set(ofs + i,v[7 - i]);
|
||
return 0}
|
||
function caml_sys_executable_name(a){return caml_executable_name}
|
||
function caml_lessequal(x,y){return + (caml_compare_val(x,y,false) <= 0)}
|
||
function caml_ml_flush(chanid)
|
||
{var chan=caml_ml_channels[chanid];
|
||
if(! chan.opened)caml_raise_sys_error("Cannot flush a closed channel");
|
||
if(! chan.buffer || chan.buffer == "")return 0;
|
||
if
|
||
(chan.fd
|
||
&&
|
||
caml_global_data.fds[chan.fd]
|
||
&&
|
||
caml_global_data.fds[chan.fd].output)
|
||
{var output=caml_global_data.fds[chan.fd].output;
|
||
switch(output.length)
|
||
{case 2:output(chanid,chan.buffer);break;default:output(chan.buffer)}}
|
||
chan.buffer = "";
|
||
return 0}
|
||
function caml_ml_seek_out_64(chanid,pos)
|
||
{caml_ml_flush(chanid);
|
||
caml_ml_channels[chanid].offset = caml_int64_to_float(pos);
|
||
return 0}
|
||
function compare_nat_real(nat1,nat2)
|
||
{return compare_nat(nat1,0,nat1.data.length,nat2,0,nat2.data.length)}
|
||
function caml_gc_set(_control){return 0}
|
||
function caml_js_get(o,f){return o[f]}
|
||
function caml_gc_compaction(){return 0}
|
||
function caml_weak_get(x,i)
|
||
{if(i < 0 || caml_ephe_key_offset + i >= x.length)
|
||
caml_invalid_argument("Weak.get_key");
|
||
return x[caml_ephe_key_offset + i] === undefined
|
||
?0
|
||
:x[caml_ephe_key_offset + i]}
|
||
var caml_ephe_get_key=caml_weak_get;
|
||
function caml_bigstring_blit_bytes_to_ba(str1,pos1,ba2,pos2,len)
|
||
{if(12 != ba2.kind)
|
||
caml_invalid_argument
|
||
("caml_bigstring_blit_string_to_ba: kind mismatch");
|
||
if(len == 0)return 0;
|
||
var ofs2=ba2.offset(pos2);
|
||
if(pos1 + len > caml_ml_bytes_length(str1))caml_array_bound_error();
|
||
if(ofs2 + len > ba2.data.length)caml_array_bound_error();
|
||
var slice=caml_array_of_bytes(str1).slice(pos1,pos1 + len);
|
||
ba2.data.set(slice,ofs2);
|
||
return 0}
|
||
function win_cleanup(){}
|
||
function caml_sys_close(fd){delete caml_global_data.fds[fd];return 0}
|
||
function caml_ml_close_channel(chanid)
|
||
{var chan=caml_ml_channels[chanid];
|
||
caml_ml_flush(chanid);
|
||
chan.opened = false;
|
||
chan.file.close();
|
||
caml_sys_close(chan.fd);
|
||
return 0}
|
||
function caml_exn_with_js_backtrace(exn,force)
|
||
{if(! exn.js_error || force || exn[0] == 248)
|
||
exn.js_error
|
||
=
|
||
new (joo_global_object.Error)("Js exception containing backtrace");
|
||
return exn}
|
||
function caml_sys_isatty(_chan){return 0}
|
||
function is_digit_zero(nat,ofs){if(nat.data[ofs] == 0)return 1;return 0}
|
||
function unix_inet_addr_of_string(){return 0}
|
||
function caml_js_set(o,f,v){o[f] = v;return 0}
|
||
function caml_array_get(array,index)
|
||
{if(index < 0 || index >= array.length - 1)caml_array_bound_error();
|
||
return array[index + 1]}
|
||
function caml_spacetime_only_works_for_native_code()
|
||
{caml_failwith("Spacetime profiling only works for native code")}
|
||
function caml_int64_sub(x,y){return x.sub(y)}
|
||
function caml_ml_seek_in_64(chanid,pos)
|
||
{var chan=caml_ml_channels[chanid];
|
||
if(chan.refill != null)caml_raise_sys_error("Illegal seek");
|
||
chan.offset = caml_int64_to_float(pos);
|
||
return 0}
|
||
function caml_int64_shift_left(x,s){return x.shift_left(s)}
|
||
function caml_notequal(x,y){return + (caml_compare_val(x,y,false) != 0)}
|
||
function caml_sys_const_int_size(){return 32}
|
||
function caml_js_wrap_meth_callback(f)
|
||
{return function()
|
||
{var len=arguments.length,args=new Array(len + 1);
|
||
args[0] = this;
|
||
for(var i=0;i < len;i++)args[i + 1] = arguments[i];
|
||
return caml_call_gen(f,args)}}
|
||
function caml_is_js(){return 1}
|
||
function caml_ba_dim(ba,i)
|
||
{if(i < 0 || i >= ba.dims.length)caml_invalid_argument("Bigarray.dim");
|
||
return ba.dims[i]}
|
||
function caml_ba_dim_1(ba){return caml_ba_dim(ba,0)}
|
||
function unix_localtime(t)
|
||
{var
|
||
d=new Date(t * 1000),
|
||
d_num=d.getTime(),
|
||
januaryfirst=new Date(d.getFullYear(),0,1).getTime(),
|
||
doy=Math.floor((d_num - januaryfirst) / 86400000),
|
||
jan=new Date(d.getFullYear(),0,1),
|
||
jul=new Date(d.getFullYear(),6,1),
|
||
stdTimezoneOffset=
|
||
Math.max(jan.getTimezoneOffset(),jul.getTimezoneOffset());
|
||
return [0,
|
||
d.getSeconds(),
|
||
d.getMinutes(),
|
||
d.getHours(),
|
||
d.getDate(),
|
||
d.getMonth(),
|
||
d.getFullYear() - 1900,
|
||
d.getDay(),
|
||
doy,
|
||
d.getTimezoneOffset() < stdTimezoneOffset | 0]}
|
||
function caml_js_meth_call(o,f,args)
|
||
{return o[caml_jsstring_of_string(f)].apply(o,caml_js_from_array(args))}
|
||
function caml_weak_create(n)
|
||
{if(n < 0)caml_invalid_argument("Weak.create");
|
||
var x=[251,"caml_ephe_list_head"];
|
||
x.length = caml_ephe_key_offset + n;
|
||
return x}
|
||
var caml_ephe_create=caml_weak_create;
|
||
function caml_js_to_byte_string(s){return caml_string_of_jsbytes(s)}
|
||
function unix_mktime(tm)
|
||
{var
|
||
d=new Date(tm[6] + 1900,tm[5],tm[4],tm[3],tm[2],tm[1]).getTime(),
|
||
t=Math.floor(d / 1000),
|
||
tm2=unix_localtime(t);
|
||
return [0,t,tm2]}
|
||
function caml_trampoline(res)
|
||
{var c=1;
|
||
while(res && res.joo_tramp)
|
||
{res = res.joo_tramp.apply(null,res.joo_args);c++}
|
||
return res}
|
||
function caml_bytes_get64(s,i)
|
||
{if(i >>> 0 >= s.l - 7)caml_bytes_bound_error();
|
||
var a=new Array(8);
|
||
for(var j=0;j < 8;j++)a[7 - j] = caml_bytes_unsafe_get(s,i + j);
|
||
return caml_int64_of_bytes(a)}
|
||
function caml_weak_set(x,i,v)
|
||
{if(i < 0 || caml_ephe_key_offset + i >= x.length)
|
||
caml_invalid_argument("Weak.set");
|
||
x[caml_ephe_key_offset + i] = v;
|
||
return 0}
|
||
function caml_sys_remove(name)
|
||
{var root=resolve_fs_device(name),ok=root.device.unlink(root.rest);
|
||
if(ok == 0)caml_raise_no_such_file(name);
|
||
return 0}
|
||
function caml_string_bound_error()
|
||
{caml_invalid_argument("index out of bounds")}
|
||
function caml_string_get32(s,i)
|
||
{if(i >>> 0 >= caml_ml_string_length(s) - 3)caml_string_bound_error();
|
||
var
|
||
b1=caml_string_unsafe_get(s,i),
|
||
b2=caml_string_unsafe_get(s,i + 1),
|
||
b3=caml_string_unsafe_get(s,i + 2),
|
||
b4=caml_string_unsafe_get(s,i + 3);
|
||
return b4 << 24 | b3 << 16 | b2 << 8 | b1}
|
||
function caml_hypot_float(x,y)
|
||
{var
|
||
x=Math.abs(x),
|
||
y=Math.abs(y),
|
||
a=Math.max(x,y),
|
||
b=Math.min(x,y) / (a?a:1);
|
||
return a * Math.sqrt(1 + b * b)}
|
||
function caml_js_call(f,o,args)
|
||
{return f.apply(o,caml_js_from_array(args))}
|
||
function caml_sys_const_max_wosize(){return 0x7FFFFFFF / 4 | 0}
|
||
function caml_ephe_unset_key(x,i){return caml_weak_set(x,i,0)}
|
||
function caml_hash_mix_bytes_arr(h,s)
|
||
{var len=s.length,i,w;
|
||
for(i = 0;i + 4 <= len;i += 4)
|
||
{w = s[i] | s[i + 1] << 8 | s[i + 2] << 16 | s[i + 3] << 24;
|
||
h = caml_hash_mix_int(h,w)}
|
||
w = 0;
|
||
switch(len & 3)
|
||
{case 3:w = s[i + 2] << 16;
|
||
case 2:w |= s[i + 1] << 8;
|
||
case 1:w |= s[i];h = caml_hash_mix_int(h,w)
|
||
}
|
||
h ^= len;
|
||
return h}
|
||
function caml_hash_mix_jsbytes(h,s)
|
||
{var len=s.length,i,w;
|
||
for(i = 0;i + 4 <= len;i += 4)
|
||
{w
|
||
=
|
||
s.charCodeAt(i)
|
||
|
|
||
s.charCodeAt(i + 1)
|
||
<<
|
||
8
|
||
|
|
||
s.charCodeAt(i + 2)
|
||
<<
|
||
16
|
||
|
|
||
s.charCodeAt(i + 3)
|
||
<<
|
||
24;
|
||
h = caml_hash_mix_int(h,w)}
|
||
w = 0;
|
||
switch(len & 3)
|
||
{case 3:w = s.charCodeAt(i + 2) << 16;
|
||
case 2:w |= s.charCodeAt(i + 1) << 8;
|
||
case 1:w |= s.charCodeAt(i);h = caml_hash_mix_int(h,w)
|
||
}
|
||
h ^= len;
|
||
return h}
|
||
function caml_hash_mix_bytes(h,v)
|
||
{switch(v.t & 6)
|
||
{default:caml_convert_string_to_bytes(v);case 0:
|
||
h = caml_hash_mix_jsbytes(h,v.c);break;
|
||
case 2:h = caml_hash_mix_bytes_arr(h,v.c)
|
||
}
|
||
return h}
|
||
function caml_bytes_lessthan(s1,s2)
|
||
{s1.t & 6 && caml_convert_string_to_bytes(s1);
|
||
s2.t & 6 && caml_convert_string_to_bytes(s2);
|
||
return s1.c < s2.c?1:0}
|
||
function caml_gr_fill_poly(ar)
|
||
{var s=caml_gr_state_get();
|
||
s.context.beginPath();
|
||
s.context.moveTo(ar[1][1],s.height - ar[1][2]);
|
||
for(var i=2;i < ar.length;i++)
|
||
s.context.lineTo(ar[i][1],s.height - ar[i][2]);
|
||
s.context.lineTo(ar[1][1],s.height - ar[1][2]);
|
||
s.context.fill();
|
||
return 0}
|
||
function caml_gc_quick_stat(){return [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}
|
||
function caml_raise_end_of_file()
|
||
{caml_raise_constant(caml_global_data.End_of_file)}
|
||
function caml_ml_input_int(chanid)
|
||
{var chan=caml_ml_channels[chanid],file=chan.file;
|
||
while(chan.offset + 3 >= file.length())
|
||
{var l=caml_ml_refill_input(chan);if(l == 0)caml_raise_end_of_file()}
|
||
var
|
||
o=chan.offset,
|
||
r=
|
||
file.read_one(o)
|
||
<<
|
||
24
|
||
|
|
||
file.read_one(o + 1)
|
||
<<
|
||
16
|
||
|
|
||
file.read_one(o + 2)
|
||
<<
|
||
8
|
||
|
|
||
file.read_one(o + 3);
|
||
chan.offset += 4;
|
||
return r}
|
||
function caml_gr_display_mode()
|
||
{caml_failwith("caml_gr_display_mode not Implemented")}
|
||
function nth_digit_nat(nat,ofs){return nat.data[ofs]}
|
||
function caml_array_blit(a1,i1,a2,i2,len)
|
||
{if(i2 <= i1)
|
||
for(var j=1;j <= len;j++)a2[i2 + j] = a1[i1 + j];
|
||
else
|
||
for(var j=len;j >= 1;j--)a2[i2 + j] = a1[i1 + j];
|
||
return 0}
|
||
function caml_float_of_string(s)
|
||
{var res;
|
||
s = caml_jsbytes_of_string(s);
|
||
res = + s;
|
||
if(s.length > 0 && res === res)return res;
|
||
s = s.replace(/_/g,"");
|
||
res = + s;
|
||
if(s.length > 0 && res === res || /^[+-]?nan$/i.test(s))return res;
|
||
var m=/^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)p([+-]?[0-9]+)/i.exec(s);
|
||
if(m)
|
||
{var
|
||
m3=m[3].replace(/0+$/,""),
|
||
mantissa=parseInt(m[1] + m[2] + m3,16),
|
||
exponent=(m[4] | 0) - 4 * m3.length;
|
||
res = mantissa * Math.pow(2,exponent);
|
||
return res}
|
||
if(/^\+?inf(inity)?$/i.test(s))return Infinity;
|
||
if(/^-inf(inity)?$/i.test(s))return - Infinity;
|
||
caml_failwith("float_of_string")}
|
||
function caml_sys_getcwd()
|
||
{return caml_string_of_jsbytes(caml_current_dir)}
|
||
function caml_sys_const_big_endian(){return 0}
|
||
function caml_list_to_js_array(l)
|
||
{var a=[];for(;l !== 0;l = l[2])a.push(l[1]);return a}
|
||
var
|
||
caml_legacy_custom_code=false,
|
||
caml_output_val=
|
||
function()
|
||
{function Writer(){this.chunk = []}
|
||
Writer.prototype
|
||
=
|
||
{chunk_idx:20,
|
||
block_len:0,
|
||
obj_counter:0,
|
||
size_32:0,
|
||
size_64:0,
|
||
write:
|
||
function(size,value)
|
||
{for(var i=size - 8;i >= 0;i -= 8)
|
||
this.chunk[this.chunk_idx++] = value >> i & 0xFF},
|
||
write_at:
|
||
function(pos,size,value)
|
||
{var pos=pos;
|
||
for(var i=size - 8;i >= 0;i -= 8)
|
||
this.chunk[pos++] = value >> i & 0xFF},
|
||
write_code:
|
||
function(size,code,value)
|
||
{this.chunk[this.chunk_idx++] = code;
|
||
for(var i=size - 8;i >= 0;i -= 8)
|
||
this.chunk[this.chunk_idx++] = value >> i & 0xFF},
|
||
write_shared:
|
||
function(offset)
|
||
{if(offset < 1 << 8)
|
||
this.write_code(8,0x04,offset);
|
||
else
|
||
if(offset < 1 << 16)
|
||
this.write_code(16,0x05,offset);
|
||
else
|
||
this.write_code(32,0x06,offset)},
|
||
pos:function(){return this.chunk_idx},
|
||
finalize:
|
||
function()
|
||
{this.block_len = this.chunk_idx - 20;
|
||
this.chunk_idx = 0;
|
||
this.write(32,0x8495A6BE);
|
||
this.write(32,this.block_len);
|
||
this.write(32,this.obj_counter);
|
||
this.write(32,this.size_32);
|
||
this.write(32,this.size_64);
|
||
return this.chunk}};
|
||
return function(v,flags)
|
||
{flags = caml_list_to_js_array(flags);
|
||
var
|
||
no_sharing=flags.indexOf(0) !== - 1,
|
||
closures=flags.indexOf(1) !== - 1;
|
||
if(closures)
|
||
joo_global_object.console.warn
|
||
("in caml_output_val: flag Marshal.Closures is not supported.");
|
||
var
|
||
writer=new Writer(),
|
||
stack=[],
|
||
intern_obj_table=no_sharing?null:new MlObjectTable();
|
||
function memo(v)
|
||
{if(no_sharing)return false;
|
||
var existing_offset=intern_obj_table.recall(v);
|
||
if(existing_offset)
|
||
{writer.write_shared(existing_offset);return true}
|
||
else
|
||
{intern_obj_table.store(v);return false}}
|
||
function extern_rec(v)
|
||
{if(v.caml_custom)
|
||
{if(memo(v))return;
|
||
var
|
||
name=v.caml_custom,
|
||
ops=caml_custom_ops[name],
|
||
sz_32_64=[0,0];
|
||
if(! ops.serialize)
|
||
caml_invalid_argument("output_value: abstract value (Custom)");
|
||
if(caml_legacy_custom_code)
|
||
{writer.write(8,0x12);
|
||
for(var i=0;i < name.length;i++)
|
||
writer.write(8,name.charCodeAt(i));
|
||
writer.write(8,0);
|
||
ops.serialize(writer,v,sz_32_64)}
|
||
else
|
||
if(ops.fixed_length == undefined)
|
||
{writer.write(8,0x18);
|
||
for(var i=0;i < name.length;i++)
|
||
writer.write(8,name.charCodeAt(i));
|
||
writer.write(8,0);
|
||
var header_pos=writer.pos();
|
||
for(var i=0;i < 12;i++)writer.write(8,0);
|
||
ops.serialize(writer,v,sz_32_64);
|
||
writer.write_at(header_pos,32,sz_32_64[0]);
|
||
writer.write_at(header_pos + 4,32,0);
|
||
writer.write_at(header_pos + 8,32,sz_32_64[1])}
|
||
else
|
||
{writer.write(8,0x19);
|
||
for(var i=0;i < name.length;i++)
|
||
writer.write(8,name.charCodeAt(i));
|
||
writer.write(8,0);
|
||
var old_pos=writer.pos();
|
||
ops.serialize(writer,v,sz_32_64);
|
||
if(ops.fixed_length != writer.pos() - old_pos)
|
||
caml_failwith
|
||
("output_value: incorrect fixed sizes specified by " + name)}
|
||
writer.size_32 += 2 + (sz_32_64[0] + 3 >> 2);
|
||
writer.size_64 += 2 + (sz_32_64[1] + 7 >> 3)}
|
||
else
|
||
if(v instanceof Array && v[0] === (v[0] | 0))
|
||
{if(v[0] == 251)
|
||
caml_failwith("output_value: abstract value (Abstract)");
|
||
if(v.length > 1 && memo(v))return;
|
||
if(v[0] < 16 && v.length - 1 < 8)
|
||
writer.write(8,0x80 + v[0] + (v.length - 1 << 4));
|
||
else
|
||
writer.write_code(32,0x08,v.length - 1 << 10 | v[0]);
|
||
writer.size_32 += v.length;
|
||
writer.size_64 += v.length;
|
||
if(v.length > 1)stack.push(v,1)}
|
||
else
|
||
if(caml_is_ml_bytes(v))
|
||
{if(! caml_is_ml_bytes(caml_string_of_jsbytes("")))
|
||
caml_failwith
|
||
("output_value: [Bytes.t] cannot safely be marshaled with [--enable use-js-string]");
|
||
if(memo(v))return;
|
||
var len=caml_ml_bytes_length(v);
|
||
if(len < 0x20)
|
||
writer.write(8,0x20 + len);
|
||
else
|
||
if(len < 0x100)
|
||
writer.write_code(8,0x09,len);
|
||
else
|
||
writer.write_code(32,0x0A,len);
|
||
for(var i=0;i < len;i++)
|
||
writer.write(8,caml_bytes_unsafe_get(v,i));
|
||
writer.size_32 += 1 + ((len + 4) / 4 | 0);
|
||
writer.size_64 += 1 + ((len + 8) / 8 | 0)}
|
||
else
|
||
if(caml_is_ml_string(v))
|
||
{var len=caml_ml_string_length(v);
|
||
if(len < 0x20)
|
||
writer.write(8,0x20 + len);
|
||
else
|
||
if(len < 0x100)
|
||
writer.write_code(8,0x09,len);
|
||
else
|
||
writer.write_code(32,0x0A,len);
|
||
for(var i=0;i < len;i++)
|
||
writer.write(8,caml_string_unsafe_get(v,i));
|
||
writer.size_32 += 1 + ((len + 4) / 4 | 0);
|
||
writer.size_64 += 1 + ((len + 8) / 8 | 0)}
|
||
else
|
||
if(v != (v | 0))
|
||
{var type_of_v=typeof v;
|
||
caml_failwith
|
||
("output_value: abstract value (" + type_of_v + ")")}
|
||
else
|
||
if(v >= 0 && v < 0x40)
|
||
writer.write(8,0X40 + v);
|
||
else
|
||
if(v >= - (1 << 7) && v < 1 << 7)
|
||
writer.write_code(8,0x00,v);
|
||
else
|
||
if(v >= - (1 << 15) && v < 1 << 15)
|
||
writer.write_code(16,0x01,v);
|
||
else
|
||
writer.write_code(32,0x02,v)}
|
||
extern_rec(v);
|
||
while(stack.length > 0)
|
||
{var i=stack.pop(),v=stack.pop();
|
||
if(i + 1 < v.length)stack.push(v,i + 1);
|
||
extern_rec(v[i])}
|
||
if(intern_obj_table)
|
||
writer.obj_counter = intern_obj_table.objs.length;
|
||
writer.finalize();
|
||
return writer.chunk}}
|
||
();
|
||
function caml_string_of_array(a)
|
||
{return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a,0,a.length))}
|
||
function caml_output_value_to_string(v,flags)
|
||
{return caml_string_of_array(caml_output_val(v,flags))}
|
||
function caml_raise_not_a_dir(name)
|
||
{name = caml_jsbytes_of_string(name);
|
||
caml_raise_sys_error(name + ": Not a directory")}
|
||
function caml_sys_system_command(cmd)
|
||
{var cmd=caml_jsstring_of_string(cmd);
|
||
if
|
||
(typeof require
|
||
!=
|
||
"undefined"
|
||
&&
|
||
require("child_process")
|
||
&&
|
||
require("child_process").execSync)
|
||
try
|
||
{require("child_process").execSync(cmd,{stdio:"inherit"});return 0}
|
||
catch(e){return 1}
|
||
else
|
||
return 127}
|
||
function unix_isatty(fileDescriptor)
|
||
{if(fs_node_supported())
|
||
{var tty=require("tty");return tty.isatty(fileDescriptor)}
|
||
else
|
||
return false}
|
||
function caml_js_error_of_exception(exn)
|
||
{if(exn.js_error)return exn.js_error;return null}
|
||
function deserialize_nat(reader,sz)
|
||
{var len=reader.read32s(),nat=new MlNat(len);
|
||
for(var i=0;i < len;i++)nat.data[i] = reader.read32s();
|
||
sz[0] = len * 4;
|
||
return nat}
|
||
function initialize_nat()
|
||
{caml_custom_ops["_nat"]
|
||
=
|
||
{deserialize:deserialize_nat,serialize:serialize_nat,hash:caml_hash_nat}}
|
||
function caml_gr_open_subwindow(a,b,c,d)
|
||
{caml_failwith("caml_gr_open_subwindow not Implemented")}
|
||
function js_print_stdout(s)
|
||
{var s=caml_utf16_of_utf8(s),g=joo_global_object;
|
||
if(g.process && g.process.stdout && g.process.stdout.write)
|
||
g.process.stdout.write(s);
|
||
else
|
||
{if(s.charCodeAt(s.length - 1) == 10)s = s.substr(0,s.length - 1);
|
||
var v=g.console;
|
||
v && v.log && v.log(s)}}
|
||
function caml_copysign_float(x,y)
|
||
{if(y == 0)y = 1 / y;x = Math.abs(x);return y < 0?- x:x}
|
||
function caml_gr_set_text_size(size)
|
||
{var s=caml_gr_state_get();
|
||
s.text_size = size;
|
||
s.context.font = s.text_size + "px " + caml_jsstring_of_string(s.font);
|
||
return 0}
|
||
var
|
||
caml_md5_bytes=
|
||
function()
|
||
{function add(x,y){return x + y | 0}
|
||
function xx(q,a,b,x,s,t)
|
||
{a = add(add(a,q),add(x,t));return add(a << s | a >>> 32 - s,b)}
|
||
function ff(a,b,c,d,x,s,t){return xx(b & c | ~ b & d,a,b,x,s,t)}
|
||
function gg(a,b,c,d,x,s,t){return xx(b & d | c & ~ d,a,b,x,s,t)}
|
||
function hh(a,b,c,d,x,s,t){return xx(b ^ c ^ d,a,b,x,s,t)}
|
||
function ii(a,b,c,d,x,s,t){return xx(c ^ (b | ~ d),a,b,x,s,t)}
|
||
function md5(buffer,length)
|
||
{var i=length;
|
||
buffer[i >> 2] |= 0x80 << 8 * (i & 3);
|
||
for(i = (i & ~ 0x3) + 8;(i & 0x3F) < 60;i += 4)
|
||
buffer[(i >> 2) - 1] = 0;
|
||
buffer[(i >> 2) - 1] = length << 3;
|
||
buffer[i >> 2] = length >> 29 & 0x1FFFFFFF;
|
||
var w=[0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476];
|
||
for(i = 0;i < buffer.length;i += 16)
|
||
{var a=w[0],b=w[1],c=w[2],d=w[3];
|
||
a = ff(a,b,c,d,buffer[i + 0],7,0xD76AA478);
|
||
d = ff(d,a,b,c,buffer[i + 1],12,0xE8C7B756);
|
||
c = ff(c,d,a,b,buffer[i + 2],17,0x242070DB);
|
||
b = ff(b,c,d,a,buffer[i + 3],22,0xC1BDCEEE);
|
||
a = ff(a,b,c,d,buffer[i + 4],7,0xF57C0FAF);
|
||
d = ff(d,a,b,c,buffer[i + 5],12,0x4787C62A);
|
||
c = ff(c,d,a,b,buffer[i + 6],17,0xA8304613);
|
||
b = ff(b,c,d,a,buffer[i + 7],22,0xFD469501);
|
||
a = ff(a,b,c,d,buffer[i + 8],7,0x698098D8);
|
||
d = ff(d,a,b,c,buffer[i + 9],12,0x8B44F7AF);
|
||
c = ff(c,d,a,b,buffer[i + 10],17,0xFFFF5BB1);
|
||
b = ff(b,c,d,a,buffer[i + 11],22,0x895CD7BE);
|
||
a = ff(a,b,c,d,buffer[i + 12],7,0x6B901122);
|
||
d = ff(d,a,b,c,buffer[i + 13],12,0xFD987193);
|
||
c = ff(c,d,a,b,buffer[i + 14],17,0xA679438E);
|
||
b = ff(b,c,d,a,buffer[i + 15],22,0x49B40821);
|
||
a = gg(a,b,c,d,buffer[i + 1],5,0xF61E2562);
|
||
d = gg(d,a,b,c,buffer[i + 6],9,0xC040B340);
|
||
c = gg(c,d,a,b,buffer[i + 11],14,0x265E5A51);
|
||
b = gg(b,c,d,a,buffer[i + 0],20,0xE9B6C7AA);
|
||
a = gg(a,b,c,d,buffer[i + 5],5,0xD62F105D);
|
||
d = gg(d,a,b,c,buffer[i + 10],9,0x02441453);
|
||
c = gg(c,d,a,b,buffer[i + 15],14,0xD8A1E681);
|
||
b = gg(b,c,d,a,buffer[i + 4],20,0xE7D3FBC8);
|
||
a = gg(a,b,c,d,buffer[i + 9],5,0x21E1CDE6);
|
||
d = gg(d,a,b,c,buffer[i + 14],9,0xC33707D6);
|
||
c = gg(c,d,a,b,buffer[i + 3],14,0xF4D50D87);
|
||
b = gg(b,c,d,a,buffer[i + 8],20,0x455A14ED);
|
||
a = gg(a,b,c,d,buffer[i + 13],5,0xA9E3E905);
|
||
d = gg(d,a,b,c,buffer[i + 2],9,0xFCEFA3F8);
|
||
c = gg(c,d,a,b,buffer[i + 7],14,0x676F02D9);
|
||
b = gg(b,c,d,a,buffer[i + 12],20,0x8D2A4C8A);
|
||
a = hh(a,b,c,d,buffer[i + 5],4,0xFFFA3942);
|
||
d = hh(d,a,b,c,buffer[i + 8],11,0x8771F681);
|
||
c = hh(c,d,a,b,buffer[i + 11],16,0x6D9D6122);
|
||
b = hh(b,c,d,a,buffer[i + 14],23,0xFDE5380C);
|
||
a = hh(a,b,c,d,buffer[i + 1],4,0xA4BEEA44);
|
||
d = hh(d,a,b,c,buffer[i + 4],11,0x4BDECFA9);
|
||
c = hh(c,d,a,b,buffer[i + 7],16,0xF6BB4B60);
|
||
b = hh(b,c,d,a,buffer[i + 10],23,0xBEBFBC70);
|
||
a = hh(a,b,c,d,buffer[i + 13],4,0x289B7EC6);
|
||
d = hh(d,a,b,c,buffer[i + 0],11,0xEAA127FA);
|
||
c = hh(c,d,a,b,buffer[i + 3],16,0xD4EF3085);
|
||
b = hh(b,c,d,a,buffer[i + 6],23,0x04881D05);
|
||
a = hh(a,b,c,d,buffer[i + 9],4,0xD9D4D039);
|
||
d = hh(d,a,b,c,buffer[i + 12],11,0xE6DB99E5);
|
||
c = hh(c,d,a,b,buffer[i + 15],16,0x1FA27CF8);
|
||
b = hh(b,c,d,a,buffer[i + 2],23,0xC4AC5665);
|
||
a = ii(a,b,c,d,buffer[i + 0],6,0xF4292244);
|
||
d = ii(d,a,b,c,buffer[i + 7],10,0x432AFF97);
|
||
c = ii(c,d,a,b,buffer[i + 14],15,0xAB9423A7);
|
||
b = ii(b,c,d,a,buffer[i + 5],21,0xFC93A039);
|
||
a = ii(a,b,c,d,buffer[i + 12],6,0x655B59C3);
|
||
d = ii(d,a,b,c,buffer[i + 3],10,0x8F0CCC92);
|
||
c = ii(c,d,a,b,buffer[i + 10],15,0xFFEFF47D);
|
||
b = ii(b,c,d,a,buffer[i + 1],21,0x85845DD1);
|
||
a = ii(a,b,c,d,buffer[i + 8],6,0x6FA87E4F);
|
||
d = ii(d,a,b,c,buffer[i + 15],10,0xFE2CE6E0);
|
||
c = ii(c,d,a,b,buffer[i + 6],15,0xA3014314);
|
||
b = ii(b,c,d,a,buffer[i + 13],21,0x4E0811A1);
|
||
a = ii(a,b,c,d,buffer[i + 4],6,0xF7537E82);
|
||
d = ii(d,a,b,c,buffer[i + 11],10,0xBD3AF235);
|
||
c = ii(c,d,a,b,buffer[i + 2],15,0x2AD7D2BB);
|
||
b = ii(b,c,d,a,buffer[i + 9],21,0xEB86D391);
|
||
w[0] = add(a,w[0]);
|
||
w[1] = add(b,w[1]);
|
||
w[2] = add(c,w[2]);
|
||
w[3] = add(d,w[3])}
|
||
var t=new Array(16);
|
||
for(var i=0;i < 4;i++)
|
||
for(var j=0;j < 4;j++)t[i * 4 + j] = w[i] >> 8 * j & 0xFF;
|
||
return t}
|
||
return function(s,ofs,len)
|
||
{var buf=[];
|
||
switch(s.t & 6)
|
||
{default:caml_convert_string_to_bytes(s);case 0:
|
||
var b=s.c;
|
||
for(var i=0;i < len;i += 4)
|
||
{var j=i + ofs;
|
||
buf[i >> 2]
|
||
=
|
||
b.charCodeAt(j)
|
||
|
|
||
b.charCodeAt(j + 1)
|
||
<<
|
||
8
|
||
|
|
||
b.charCodeAt(j + 2)
|
||
<<
|
||
16
|
||
|
|
||
b.charCodeAt(j + 3)
|
||
<<
|
||
24}
|
||
for(;i < len;i++)
|
||
buf[i >> 2] |= b.charCodeAt(i + ofs) << 8 * (i & 3);
|
||
break;
|
||
case 4:
|
||
var a=s.c;
|
||
for(var i=0;i < len;i += 4)
|
||
{var j=i + ofs;
|
||
buf[i >> 2]
|
||
=
|
||
a[j]
|
||
|
|
||
a[j + 1]
|
||
<<
|
||
8
|
||
|
|
||
a[j + 2]
|
||
<<
|
||
16
|
||
|
|
||
a[j + 3]
|
||
<<
|
||
24}
|
||
for(;i < len;i++)buf[i >> 2] |= a[i + ofs] << 8 * (i & 3)
|
||
}
|
||
return caml_string_of_array(md5(buf,len))}}
|
||
();
|
||
function caml_ba_set_generic(ba,i,v)
|
||
{ba.set(ba.offset(caml_js_from_array(i)),v);return 0}
|
||
function caml_ephe_set_key(x,i,v){return caml_weak_set(x,i,[0,v])}
|
||
function caml_bytes_lessequal(s1,s2)
|
||
{s1.t & 6 && caml_convert_string_to_bytes(s1);
|
||
s2.t & 6 && caml_convert_string_to_bytes(s2);
|
||
return s1.c <= s2.c?1:0}
|
||
function caml_string_lessequal(s1,s2){return caml_bytes_lessequal(s1,s2)}
|
||
function caml_string_greaterequal(s1,s2)
|
||
{return caml_string_lessequal(s2,s1)}
|
||
function caml_int64_add(x,y){return x.add(y)}
|
||
function caml_nextafter_float(x,y)
|
||
{if(isNaN(x) || isNaN(y))return NaN;
|
||
if(x == y)return y;
|
||
if(x == 0)return y < 0?- Math.pow(2,- 1074):Math.pow(2,- 1074);
|
||
var bits=caml_int64_bits_of_float(x),one=caml_int64_of_int32(1);
|
||
if(x < y == x > 0)
|
||
bits = caml_int64_add(bits,one);
|
||
else
|
||
bits = caml_int64_sub(bits,one);
|
||
return caml_int64_float_of_bits(bits)}
|
||
function caml_gr_size_y(){var s=caml_gr_state_get();return s.height}
|
||
function caml_ml_pos_in(chanid){return caml_ml_channels[chanid].offset}
|
||
function caml_int64_and(x,y){return x.and(y)}
|
||
function caml_sys_const_word_size(){return 32}
|
||
function caml_std_output(chanid,s)
|
||
{var
|
||
chan=caml_ml_channels[chanid],
|
||
str=caml_string_of_jsbytes(s),
|
||
slen=caml_ml_string_length(str);
|
||
chan.file.write(chan.offset,str,0,slen);
|
||
chan.offset += slen;
|
||
return 0}
|
||
function js_print_stderr(s)
|
||
{var s=caml_utf16_of_utf8(s),g=joo_global_object;
|
||
if(g.process && g.process.stdout && g.process.stdout.write)
|
||
g.process.stderr.write(s);
|
||
else
|
||
{if(s.charCodeAt(s.length - 1) == 10)s = s.substr(0,s.length - 1);
|
||
var v=g.console;
|
||
v && v.error && v.error(s)}}
|
||
function caml_sys_open_internal(idx,output,file,flags)
|
||
{if(caml_global_data.fds === undefined)
|
||
caml_global_data.fds = new Array();
|
||
flags = flags?flags:{};
|
||
var info={};
|
||
info.file = file;
|
||
info.offset = flags.append?file.length():0;
|
||
info.flags = flags;
|
||
info.output = output;
|
||
caml_global_data.fds[idx] = info;
|
||
if(! caml_global_data.fd_last_idx || idx > caml_global_data.fd_last_idx)
|
||
caml_global_data.fd_last_idx = idx;
|
||
return idx}
|
||
function caml_sys_open(name,flags,_perms)
|
||
{var f={};
|
||
while(flags)
|
||
{switch(flags[1])
|
||
{case 0:f.rdonly = 1;break;
|
||
case 1:f.wronly = 1;break;
|
||
case 2:f.append = 1;break;
|
||
case 3:f.create = 1;break;
|
||
case 4:f.truncate = 1;break;
|
||
case 5:f.excl = 1;break;
|
||
case 6:f.binary = 1;break;
|
||
case 7:f.text = 1;break;
|
||
case 8:f.nonblock = 1;break
|
||
}
|
||
flags = flags[2]}
|
||
if(f.rdonly && f.wronly)
|
||
caml_raise_sys_error
|
||
(caml_jsbytes_of_string(name)
|
||
+
|
||
" : flags Open_rdonly and Open_wronly are not compatible");
|
||
if(f.text && f.binary)
|
||
caml_raise_sys_error
|
||
(caml_jsbytes_of_string(name)
|
||
+
|
||
" : flags Open_text and Open_binary are not compatible");
|
||
var
|
||
root=resolve_fs_device(name),
|
||
file=root.device.open(root.rest,f),
|
||
idx=caml_global_data.fd_last_idx?caml_global_data.fd_last_idx:0;
|
||
return caml_sys_open_internal(idx + 1,caml_std_output,file,f)}
|
||
caml_sys_open_internal
|
||
(0,caml_std_output,new MlFakeFile(caml_create_bytes(0)));
|
||
caml_sys_open_internal
|
||
(1,js_print_stdout,new MlFakeFile(caml_create_bytes(0)));
|
||
caml_sys_open_internal
|
||
(2,js_print_stderr,new MlFakeFile(caml_create_bytes(0)));
|
||
function MlStringReader(s,i)
|
||
{this.s = caml_jsbytes_of_string(s);this.i = i}
|
||
MlStringReader.prototype
|
||
=
|
||
{read8u:function(){return this.s.charCodeAt(this.i++)},
|
||
read8s:function(){return this.s.charCodeAt(this.i++) << 24 >> 24},
|
||
read16u:
|
||
function()
|
||
{var s=this.s,i=this.i;
|
||
this.i = i + 2;
|
||
return s.charCodeAt(i) << 8 | s.charCodeAt(i + 1)},
|
||
read16s:
|
||
function()
|
||
{var s=this.s,i=this.i;
|
||
this.i = i + 2;
|
||
return s.charCodeAt(i) << 24 >> 16 | s.charCodeAt(i + 1)},
|
||
read32u:
|
||
function()
|
||
{var s=this.s,i=this.i;
|
||
this.i = i + 4;
|
||
return (s.charCodeAt(i)
|
||
<<
|
||
24
|
||
|
|
||
s.charCodeAt(i + 1)
|
||
<<
|
||
16
|
||
|
|
||
s.charCodeAt(i + 2)
|
||
<<
|
||
8
|
||
|
|
||
s.charCodeAt(i + 3))
|
||
>>>
|
||
0},
|
||
read32s:
|
||
function()
|
||
{var s=this.s,i=this.i;
|
||
this.i = i + 4;
|
||
return s.charCodeAt(i)
|
||
<<
|
||
24
|
||
|
|
||
s.charCodeAt(i + 1)
|
||
<<
|
||
16
|
||
|
|
||
s.charCodeAt(i + 2)
|
||
<<
|
||
8
|
||
|
|
||
s.charCodeAt(i + 3)},
|
||
readstr:
|
||
function(len)
|
||
{var i=this.i;
|
||
this.i = i + len;
|
||
return caml_string_of_jsbytes(this.s.substring(i,i + len))}};
|
||
function caml_float_of_bytes(a)
|
||
{return caml_int64_float_of_bits(caml_int64_of_bytes(a))}
|
||
function caml_input_value_from_reader(reader,ofs)
|
||
{var
|
||
_magic=reader.read32u(),
|
||
_block_len=reader.read32u(),
|
||
num_objects=reader.read32u(),
|
||
_size_32=reader.read32u(),
|
||
_size_64=reader.read32u(),
|
||
stack=[],
|
||
intern_obj_table=num_objects > 0?[]:null,
|
||
obj_counter=0;
|
||
function intern_rec()
|
||
{var code=reader.read8u();
|
||
if(code >= 0x40)
|
||
if(code >= 0x80)
|
||
{var tag=code & 0xF,size=code >> 4 & 0x7,v=[tag];
|
||
if(size == 0)return v;
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
stack.push(v,size);
|
||
return v}
|
||
else
|
||
return code & 0x3F;
|
||
else
|
||
if(code >= 0x20)
|
||
{var len=code & 0x1F,v=reader.readstr(len);
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
return v}
|
||
else
|
||
switch(code)
|
||
{case 0x00:return reader.read8s();
|
||
case 0x01:return reader.read16s();
|
||
case 0x02:return reader.read32s();
|
||
case 0x03:caml_failwith("input_value: integer too large");break;
|
||
case 0x04:
|
||
var offset=reader.read8u();
|
||
return intern_obj_table[obj_counter - offset];
|
||
case 0x05:
|
||
var offset=reader.read16u();
|
||
return intern_obj_table[obj_counter - offset];
|
||
case 0x06:
|
||
var offset=reader.read32u();
|
||
return intern_obj_table[obj_counter - offset];
|
||
case 0x08:
|
||
var
|
||
header=reader.read32u(),
|
||
tag=header & 0xFF,
|
||
size=header >> 10,
|
||
v=[tag];
|
||
if(size == 0)return v;
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
stack.push(v,size);
|
||
return v;
|
||
case 0x13:
|
||
caml_failwith("input_value: data block too large");break;
|
||
case 0x09:
|
||
var len=reader.read8u(),v=reader.readstr(len);
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
return v;
|
||
case 0x0A:
|
||
var len=reader.read32u(),v=reader.readstr(len);
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
return v;
|
||
case 0x0C:
|
||
var t=new Array(8);
|
||
for(var i=0;i < 8;i++)t[7 - i] = reader.read8u();
|
||
var v=caml_float_of_bytes(t);
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
return v;
|
||
case 0x0B:
|
||
var t=new Array(8);
|
||
for(var i=0;i < 8;i++)t[i] = reader.read8u();
|
||
var v=caml_float_of_bytes(t);
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
return v;
|
||
case 0x0E:
|
||
var len=reader.read8u(),v=new Array(len + 1);
|
||
v[0] = 254;
|
||
var t=new Array(8);
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
for(var i=1;i <= len;i++)
|
||
{for(var j=0;j < 8;j++)t[7 - j] = reader.read8u();
|
||
v[i] = caml_float_of_bytes(t)}
|
||
return v;
|
||
case 0x0D:
|
||
var len=reader.read8u(),v=new Array(len + 1);
|
||
v[0] = 254;
|
||
var t=new Array(8);
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
for(var i=1;i <= len;i++)
|
||
{for(var j=0;j < 8;j++)t[j] = reader.read8u();
|
||
v[i] = caml_float_of_bytes(t)}
|
||
return v;
|
||
case 0x07:
|
||
var len=reader.read32u(),v=new Array(len + 1);
|
||
v[0] = 254;
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
var t=new Array(8);
|
||
for(var i=1;i <= len;i++)
|
||
{for(var j=0;j < 8;j++)t[7 - j] = reader.read8u();
|
||
v[i] = caml_float_of_bytes(t)}
|
||
return v;
|
||
case 0x0F:
|
||
var len=reader.read32u(),v=new Array(len + 1);
|
||
v[0] = 254;
|
||
var t=new Array(8);
|
||
for(var i=1;i <= len;i++)
|
||
{for(var j=0;j < 8;j++)t[j] = reader.read8u();
|
||
v[i] = caml_float_of_bytes(t)}
|
||
return v;
|
||
case 0x10:
|
||
case 0x11:caml_failwith("input_value: code pointer");break;
|
||
case 0x12:
|
||
case 0x18:
|
||
case 0x19:
|
||
var c,s="";
|
||
while((c = reader.read8u()) != 0)s += String.fromCharCode(c);
|
||
var ops=caml_custom_ops[s],expected_size;
|
||
if(! ops)
|
||
caml_failwith("input_value: unknown custom block identifier");
|
||
switch(code)
|
||
{case 0x12:break;
|
||
case 0x19:
|
||
if(! ops.fixed_length)
|
||
caml_failwith
|
||
("input_value: expected a fixed-size custom block");
|
||
expected_size = ops.fixed_length;
|
||
break;
|
||
case 0x18:
|
||
expected_size = reader.read32u();
|
||
reader.read32s();
|
||
reader.read32s();
|
||
break
|
||
}
|
||
var old_pos=reader.i,size=[0],v=ops.deserialize(reader,size);
|
||
if(expected_size != undefined)
|
||
if(expected_size != size[0])
|
||
caml_failwith
|
||
("input_value: incorrect length of serialized custom block");
|
||
if(intern_obj_table)intern_obj_table[obj_counter++] = v;
|
||
return v;
|
||
default:caml_failwith("input_value: ill-formed message")}}
|
||
var res=intern_rec();
|
||
while(stack.length > 0)
|
||
{var size=stack.pop(),v=stack.pop(),d=v.length;
|
||
if(d < size)stack.push(v,size);
|
||
v[d] = intern_rec()}
|
||
if(typeof ofs != "number")ofs[0] = reader.i;
|
||
return res}
|
||
function caml_string_of_bytes(s){return s}
|
||
function caml_input_value_from_bytes(s,ofs)
|
||
{var
|
||
reader=
|
||
new
|
||
MlStringReader
|
||
(caml_string_of_bytes(s),typeof ofs == "number"?ofs:ofs[0]);
|
||
return caml_input_value_from_reader(reader,ofs)}
|
||
function caml_string_get(s,i)
|
||
{if(i >>> 0 >= caml_ml_string_length(s))caml_string_bound_error();
|
||
return caml_string_unsafe_get(s,i)}
|
||
var
|
||
re_match=
|
||
function()
|
||
{var
|
||
re_word_letters=
|
||
[0x00,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0xFF,
|
||
0x03,
|
||
0xFE,
|
||
0xFF,
|
||
0xFF,
|
||
0x87,
|
||
0xFE,
|
||
0xFF,
|
||
0xFF,
|
||
0x07,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0x00,
|
||
0xFF,
|
||
0xFF,
|
||
0x7F,
|
||
0xFF,
|
||
0xFF,
|
||
0xFF,
|
||
0x7F,
|
||
0xFF],
|
||
opcodes=
|
||
{CHAR:0,
|
||
CHARNORM:1,
|
||
STRING:2,
|
||
STRINGNORM:3,
|
||
CHARCLASS:4,
|
||
BOL:5,
|
||
EOL:6,
|
||
WORDBOUNDARY:7,
|
||
BEGGROUP:8,
|
||
ENDGROUP:9,
|
||
REFGROUP:10,
|
||
ACCEPT:11,
|
||
SIMPLEOPT:12,
|
||
SIMPLESTAR:13,
|
||
SIMPLEPLUS:14,
|
||
GOTO:15,
|
||
PUSHBACK:16,
|
||
SETMARK:17,
|
||
CHECKPROGRESS:18};
|
||
function is_word_letter(c)
|
||
{return re_word_letters[c >> 3] >> (c & 7) & 1}
|
||
function in_bitset(s,i)
|
||
{return caml_string_get(s,i >> 3) >> (i & 7) & 1}
|
||
function re_match_impl(re,s,pos,partial)
|
||
{var
|
||
prog=caml_js_from_array(re[1]),
|
||
cpool=caml_js_from_array(re[2]),
|
||
normtable=caml_jsbytes_of_string(re[3]),
|
||
numgroups=re[4] | 0,
|
||
numregisters=re[5] | 0,
|
||
startchars=re[6] | 0,
|
||
s=caml_array_of_string(s),
|
||
pc=0,
|
||
quit=false,
|
||
stack=[],
|
||
groups=new Array(numgroups),
|
||
re_register=new Array(numregisters);
|
||
for(var i=0;i < groups.length;i++)groups[i] = {start:- 1,end:- 1};
|
||
groups[0].start = pos;
|
||
function backtrack()
|
||
{while(stack.length)
|
||
{var item=stack.pop();
|
||
if(item.undo)
|
||
item.undo.obj[item.undo.prop] = item.undo.value;
|
||
else
|
||
if(item.pos){pc = item.pos.pc;pos = item.pos.txt;return}}
|
||
quit = true}
|
||
function push(item){stack.push(item)}
|
||
function accept()
|
||
{groups[0].end = pos;
|
||
var result=new Array(1 + groups.length * 2);
|
||
result[0] = 0;
|
||
for(var i=0;i < groups.length;i++)
|
||
{var g=groups[i];
|
||
if(g.start < 0 || g.end < 0)g.start = g.end = - 1;
|
||
result[2 * i + 1] = g.start;
|
||
result[2 * i + 1 + 1] = g.end}
|
||
return result}
|
||
function prefix_match()
|
||
{if(partial)return accept();else backtrack()}
|
||
while(! quit)
|
||
{var
|
||
op=prog[pc] & 0xff,
|
||
sarg=prog[pc] >> 8,
|
||
uarg=sarg & 0xff,
|
||
c=s[pos],
|
||
group;
|
||
pc++;
|
||
switch(op)
|
||
{case opcodes.CHAR:
|
||
if(pos === s.length){prefix_match();break}
|
||
if(c === uarg)pos++;else backtrack();
|
||
break;
|
||
case opcodes.CHARNORM:
|
||
if(pos === s.length){prefix_match();break}
|
||
if(normtable.charCodeAt(c) === uarg)pos++;else backtrack();
|
||
break;
|
||
case opcodes.STRING:
|
||
for
|
||
(var arg=caml_jsbytes_of_string(cpool[uarg]),i=0;
|
||
i
|
||
<
|
||
arg.length;
|
||
i++)
|
||
{if(pos === s.length){prefix_match();break}
|
||
if(c === arg.charCodeAt(i))
|
||
c = s[++pos];
|
||
else
|
||
{backtrack();break}}
|
||
break;
|
||
case opcodes.STRINGNORM:
|
||
for
|
||
(var arg=caml_jsbytes_of_string(cpool[uarg]),i=0;
|
||
i
|
||
<
|
||
arg.length;
|
||
i++)
|
||
{if(pos === s.length){prefix_match();break}
|
||
if(normtable.charCodeAt(c) === arg.charCodeAt(i))
|
||
c = s[++pos];
|
||
else
|
||
{backtrack();break}}
|
||
break;
|
||
case opcodes.CHARCLASS:
|
||
if(pos === s.length){prefix_match();break}
|
||
if(in_bitset(cpool[uarg],c))pos++;else backtrack();
|
||
break;
|
||
case opcodes.BOL:
|
||
if(pos > 0 && s[pos - 1] != 10)backtrack();break;
|
||
case opcodes.EOL:
|
||
if(pos < s.length && s[pos] != 10)backtrack();break;
|
||
case opcodes.WORDBOUNDARY:
|
||
if(pos == 0)
|
||
{if(pos === s.length){prefix_match();break}
|
||
if(is_word_letter(s[0]))break;
|
||
backtrack()}
|
||
else
|
||
if(pos === s.length)
|
||
{if(is_word_letter(s[pos - 1]))break;backtrack()}
|
||
else
|
||
{if(is_word_letter(s[pos - 1]) != is_word_letter(s[pos]))
|
||
break;
|
||
backtrack()}
|
||
break;
|
||
case opcodes.BEGGROUP:
|
||
group = groups[uarg];
|
||
push({undo:{obj:group,prop:"start",value:group.start}});
|
||
group.start = pos;
|
||
break;
|
||
case opcodes.ENDGROUP:
|
||
group = groups[uarg];
|
||
push({undo:{obj:group,prop:"end",value:group.end}});
|
||
group.end = pos;
|
||
break;
|
||
case opcodes.REFGROUP:
|
||
group = groups[uarg];
|
||
if(group.start < 0 || group.end < 0){backtrack();break}
|
||
for(var i=group.start;i < group.end;i++)
|
||
{if(pos === s.length){prefix_match();break}
|
||
if(s[i] != s[pos]){backtrack();break}
|
||
pos++}
|
||
break;
|
||
case opcodes.SIMPLEOPT:if(in_bitset(cpool[uarg],c))pos++;break;
|
||
case opcodes.SIMPLESTAR:
|
||
while(in_bitset(cpool[uarg],c))c = s[++pos];break;
|
||
case opcodes.SIMPLEPLUS:
|
||
if(pos === s.length){prefix_match();break}
|
||
if(in_bitset(cpool[uarg],c))
|
||
do c = s[++pos];while(in_bitset(cpool[uarg],c));
|
||
else
|
||
backtrack();
|
||
break;
|
||
case opcodes.ACCEPT:return accept();
|
||
case opcodes.GOTO:pc = pc + sarg;break;
|
||
case opcodes.PUSHBACK:push({pos:{pc:pc + sarg,txt:pos}});break;
|
||
case opcodes.SETMARK:
|
||
push
|
||
({undo:{obj:re_register,prop:uarg,value:re_register[uarg]}});
|
||
re_register[uarg] = pos;
|
||
break;
|
||
case opcodes.CHECKPROGRESS:
|
||
if(re_register[uarg] === pos)backtrack();break;
|
||
default:throw new Error("Invalid bytecode")}}
|
||
return 0}
|
||
return re_match_impl}
|
||
();
|
||
function re_search_backward(re,s,pos)
|
||
{if(pos < 0 || pos > caml_ml_string_length(s))
|
||
caml_invalid_argument("Str.search_backward");
|
||
while(pos >= 0){var res=re_match(re,s,pos,0);if(res)return res;pos--}
|
||
return [0]}
|
||
function caml_js_from_string(s){return caml_jsstring_of_string(s)}
|
||
function caml_ba_sub(ba,ofs,len)
|
||
{var changed_dim,mul=1;
|
||
if(ba.layout == 0)
|
||
{for(var i=1;i < ba.dims.length;i++)mul = mul * ba.dims[i];
|
||
changed_dim = 0}
|
||
else
|
||
{for(var i=0;i < ba.dims.length - 1;i++)mul = mul * ba.dims[i];
|
||
changed_dim = ba.dims.length - 1;
|
||
ofs = ofs - 1}
|
||
if(ofs < 0 || len < 0 || ofs + len > ba.dims[changed_dim])
|
||
caml_invalid_argument("Bigarray.sub: bad sub-array");
|
||
var new_dims=[];
|
||
for(var i=0;i < ba.dims.length;i++)new_dims[i] = ba.dims[i];
|
||
new_dims[changed_dim] = len;
|
||
mul *= caml_ba_get_size_per_element(ba.kind);
|
||
var new_data=ba.data.subarray(ofs * mul,(ofs + len) * mul);
|
||
return caml_ba_create_unsafe(ba.kind,ba.layout,new_dims,new_data)}
|
||
function caml_gc_full_major(){return 0}
|
||
function caml_bytes_set32(s,i,i32)
|
||
{if(i >>> 0 >= s.l - 3)caml_bytes_bound_error();
|
||
var
|
||
b4=0xFF & i32 >> 24,
|
||
b3=0xFF & i32 >> 16,
|
||
b2=0xFF & i32 >> 8,
|
||
b1=0xFF & i32;
|
||
caml_bytes_unsafe_set(s,i + 0,b1);
|
||
caml_bytes_unsafe_set(s,i + 1,b2);
|
||
caml_bytes_unsafe_set(s,i + 2,b3);
|
||
caml_bytes_unsafe_set(s,i + 3,b4);
|
||
return 0}
|
||
function caml_gr_sigio_signal(){return 0}
|
||
function caml_ba_uint8_set32(ba,i0,v)
|
||
{var ofs=ba.offset(i0);
|
||
if(ofs + 3 >= ba.data.length)caml_array_bound_error();
|
||
ba.set(ofs + 0,v & 0xff);
|
||
ba.set(ofs + 1,v >>> 8 & 0xff);
|
||
ba.set(ofs + 2,v >>> 16 & 0xff);
|
||
ba.set(ofs + 3,v >>> 24 & 0xff);
|
||
return 0}
|
||
function caml_sys_const_ostype_unix(){return 1}
|
||
function caml_signbit_float(x){if(x == 0)x = 1 / x;return x < 0?1:0}
|
||
function caml_gr_current_x(){var s=caml_gr_state_get();return s.x}
|
||
function caml_gr_set_line_width(w)
|
||
{var s=caml_gr_state_get();
|
||
s.line_width = w;
|
||
s.context.lineWidth = w;
|
||
return 0}
|
||
function caml_gr_set_font(f)
|
||
{var s=caml_gr_state_get();
|
||
s.font = f;
|
||
s.context.font = s.text_size + "px " + caml_jsstring_of_string(s.font);
|
||
return 0}
|
||
function caml_gr_set_color(color)
|
||
{var s=caml_gr_state_get();
|
||
function convert(number)
|
||
{var str="" + number.toString(16);
|
||
while(str.length < 2)str = "0" + str;
|
||
return str}
|
||
var r=color >> 16 & 0xff,g=color >> 8 & 0xff,b=color >> 0 & 0xff;
|
||
s.color = color;
|
||
var c_str="#" + convert(r) + convert(g) + convert(b);
|
||
s.context.fillStyle = c_str;
|
||
s.context.strokeStyle = c_str;
|
||
return 0}
|
||
function caml_gr_moveto(x,y)
|
||
{var s=caml_gr_state_get();s.x = x;s.y = y;return 0}
|
||
function caml_gr_resize_window(w,h)
|
||
{var s=caml_gr_state_get();
|
||
s.width = w;
|
||
s.height = h;
|
||
s.canvas.width = w;
|
||
s.canvas.height = h;
|
||
return 0}
|
||
function caml_gr_state_init()
|
||
{caml_gr_moveto(caml_gr_state.x,caml_gr_state.y);
|
||
caml_gr_resize_window(caml_gr_state.width,caml_gr_state.height);
|
||
caml_gr_set_line_width(caml_gr_state.line_width);
|
||
caml_gr_set_text_size(caml_gr_state.text_size);
|
||
caml_gr_set_font(caml_gr_state.font);
|
||
caml_gr_set_color(caml_gr_state.color);
|
||
caml_gr_set_window_title(caml_gr_state.title);
|
||
caml_gr_state.context.textBaseline = "bottom"}
|
||
function caml_ba_kind_of_typed_array(ta)
|
||
{var g=joo_global_object,kind;
|
||
if(ta instanceof g.Float32Array)
|
||
kind = 0;
|
||
else
|
||
if(ta instanceof g.Float64Array)
|
||
kind = 1;
|
||
else
|
||
if(ta instanceof g.Int8Array)
|
||
kind = 2;
|
||
else
|
||
if(ta instanceof g.Uint8Array)
|
||
kind = 3;
|
||
else
|
||
if(ta instanceof g.Int16Array)
|
||
kind = 4;
|
||
else
|
||
if(ta instanceof g.Uint16Array)
|
||
kind = 5;
|
||
else
|
||
if(ta instanceof g.Int32Array)
|
||
kind = 6;
|
||
else
|
||
if(ta instanceof g.Uint32Array)
|
||
kind = 6;
|
||
else
|
||
caml_invalid_argument
|
||
("caml_ba_kind_of_typed_array: unsupported kind");
|
||
return kind}
|
||
function caml_ba_from_typed_array(ta)
|
||
{var kind=caml_ba_kind_of_typed_array(ta);
|
||
return caml_ba_create_unsafe(kind,0,[ta.length],ta)}
|
||
function caml_ml_seek_out(chanid,pos)
|
||
{caml_ml_flush(chanid);caml_ml_channels[chanid].offset = pos;return 0}
|
||
function caml_js_typeof(o){return typeof o}
|
||
function caml_restore_raw_backtrace(exn,bt){return 0}
|
||
function caml_gr_lineto(x,y)
|
||
{var s=caml_gr_state_get();
|
||
s.context.beginPath();
|
||
s.context.moveTo(s.x,s.height - s.y);
|
||
s.context.lineTo(x,s.height - y);
|
||
s.context.stroke();
|
||
s.x = x;
|
||
s.y = y;
|
||
return 0}
|
||
function caml_js_wrap_meth_callback_unsafe(f)
|
||
{return function()
|
||
{var len=arguments.length,args=new Array(len + 1);
|
||
args[0] = this;
|
||
for(var i=0;i < len;i++)args[i + 1] = arguments[i];
|
||
return f.apply(null,args)}}
|
||
function caml_ba_dim_3(ba){return caml_ba_dim(ba,2)}
|
||
var caml_ephe_data_offset=2;
|
||
function caml_ephe_check_data(x)
|
||
{return x[caml_ephe_data_offset] === undefined?0:1}
|
||
function caml_bytes_get16(s,i)
|
||
{if(i >>> 0 >= s.l - 1)caml_bytes_bound_error();
|
||
var b1=caml_bytes_unsafe_get(s,i),b2=caml_bytes_unsafe_get(s,i + 1);
|
||
return b2 << 8 | b1}
|
||
function caml_obj_make_forward(b,v){b[0] = 250;b[1] = v;return 0}
|
||
function caml_js_from_bool(x){return ! ! x}
|
||
function caml_ml_set_channel_name(){return 0}
|
||
function caml_gr_close_graph()
|
||
{var s=caml_gr_state_get();
|
||
s.canvas.width = 0;
|
||
s.canvas.height = 0;
|
||
return 0}
|
||
function caml_create_string(len)
|
||
{if(len < 0)caml_invalid_argument("String.create");
|
||
return new MlBytes(len?2:9,"",len)}
|
||
function caml_md5_string(s,ofs,len)
|
||
{return caml_md5_bytes(caml_bytes_of_string(s),ofs,len)}
|
||
function caml_md5_chan(chanid,len)
|
||
{var chan=caml_ml_channels[chanid],chan_len=chan.file.length();
|
||
if(len < 0)len = chan_len - chan.offset;
|
||
if(chan.offset + len > chan_len)caml_raise_end_of_file();
|
||
var buf=caml_create_bytes(len);
|
||
chan.file.read(chan.offset,buf,0,len);
|
||
return caml_md5_string(caml_string_of_bytes(buf),0,len)}
|
||
function caml_obj_dup(x)
|
||
{var l=x.length,a=new Array(l);
|
||
for(var i=0;i < l;i++)a[i] = x[i];
|
||
return a}
|
||
function caml_weak_get_copy(x,i)
|
||
{if(i < 0 || caml_ephe_key_offset + i >= x.length)
|
||
caml_invalid_argument("Weak.get_copy");
|
||
var y=caml_weak_get(x,i);
|
||
if(y === 0)return y;
|
||
var z=y[1];
|
||
if(z instanceof Array)return [0,caml_obj_dup(z)];
|
||
return y}
|
||
function caml_ml_output_bytes(chanid,buffer,offset,len)
|
||
{var chan=caml_ml_channels[chanid];
|
||
if(! chan.opened)
|
||
caml_raise_sys_error("Cannot output to a closed channel");
|
||
var bytes;
|
||
if(offset == 0 && caml_ml_bytes_length(buffer) == len)
|
||
bytes = buffer;
|
||
else
|
||
{bytes = caml_create_bytes(len);
|
||
caml_blit_bytes(buffer,offset,bytes,0,len)}
|
||
var
|
||
string=caml_string_of_bytes(bytes),
|
||
jsstring=caml_jsbytes_of_string(string),
|
||
id=jsstring.lastIndexOf("\n");
|
||
if(id < 0)
|
||
chan.buffer += jsstring;
|
||
else
|
||
{chan.buffer += jsstring.substr(0,id + 1);
|
||
caml_ml_flush(chanid);
|
||
chan.buffer += jsstring.substr(id + 1)}
|
||
return 0}
|
||
function caml_ml_output(chanid,buffer,offset,len)
|
||
{return caml_ml_output_bytes
|
||
(chanid,caml_bytes_of_string(buffer),offset,len)}
|
||
function caml_ephe_get_data(x)
|
||
{return x[caml_ephe_data_offset] === undefined
|
||
?0
|
||
:[0,x[caml_ephe_data_offset]]}
|
||
function caml_trampoline_return(f,args)
|
||
{return {joo_tramp:f,joo_args:args}}
|
||
function caml_array_append(a1,a2)
|
||
{var l1=a1.length,l2=a2.length,l=l1 + l2 - 1,a=new Array(l);
|
||
a[0] = 0;
|
||
var i=1,j=1;
|
||
for(;i < l1;i++)a[i] = a1[i];
|
||
for(;i < l;i++,j++)a[i] = a2[j];
|
||
return a}
|
||
function caml_ml_set_channel_refill(chanid,f)
|
||
{caml_ml_channels[chanid].refill = f;return 0}
|
||
function caml_js_expr(s)
|
||
{js_print_stderr("caml_js_expr: fallback to runtime evaluation\n");
|
||
return eval(caml_jsstring_of_string(s))}
|
||
function caml_int64_mul(x,y){return x.mul(y)}
|
||
function caml_ml_runtime_warnings_enabled(_unit)
|
||
{return caml_runtime_warnings}
|
||
function caml_output_value_to_bytes(v,flags)
|
||
{return caml_bytes_of_array(caml_output_val(v,flags))}
|
||
function caml_hash_univ_param(count,limit,obj)
|
||
{var hash_accu=0;
|
||
function hash_aux(obj)
|
||
{limit--;
|
||
if(count < 0 || limit < 0)return;
|
||
if(obj instanceof Array && obj[0] === (obj[0] | 0))
|
||
switch(obj[0])
|
||
{case 248:count--;hash_accu = hash_accu * 65599 + obj[2] | 0;break;
|
||
case 250:limit++;hash_aux(obj);break;
|
||
default:
|
||
count--;
|
||
hash_accu = hash_accu * 19 + obj[0] | 0;
|
||
for(var i=obj.length - 1;i > 0;i--)hash_aux(obj[i])}
|
||
else
|
||
if(caml_is_ml_bytes(obj))
|
||
{count--;
|
||
switch(obj.t & 6)
|
||
{default:caml_convert_string_to_bytes(obj);case 0:
|
||
for(var b=obj.c,l=caml_ml_bytes_length(obj),i=0;i < l;i++)
|
||
hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0;
|
||
break;
|
||
case 2:
|
||
for(var a=obj.c,l=caml_ml_bytes_length(obj),i=0;i < l;i++)
|
||
hash_accu = hash_accu * 19 + a[i] | 0
|
||
}}
|
||
else
|
||
if(caml_is_ml_string(obj))
|
||
{var jsbytes=caml_jsbytes_of_string(obj);
|
||
for(var b=jsbytes,l=jsbytes.length,i=0;i < l;i++)
|
||
hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0}
|
||
else
|
||
if(typeof obj === "string")
|
||
for(var b=obj,l=obj.length,i=0;i < l;i++)
|
||
hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0;
|
||
else
|
||
if(obj === (obj | 0))
|
||
{count--;hash_accu = hash_accu * 65599 + obj | 0}
|
||
else
|
||
if(obj === + obj)
|
||
{count--;
|
||
var p=caml_int64_to_bytes(caml_int64_bits_of_float(obj));
|
||
for(var i=7;i >= 0;i--)hash_accu = hash_accu * 19 + p[i] | 0}
|
||
else
|
||
if(obj && obj.caml_custom)
|
||
if
|
||
(caml_custom_ops[obj.caml_custom]
|
||
&&
|
||
caml_custom_ops[obj.caml_custom].hash)
|
||
{var h=caml_custom_ops[obj.caml_custom].hash(obj) | 0;
|
||
hash_accu = hash_accu * 65599 + h | 0}}
|
||
hash_aux(obj);
|
||
return hash_accu & 0x3FFFFFFF}
|
||
function caml_string_equal(s1,s2){return caml_bytes_equal(s1,s2)}
|
||
function caml_output_value_to_buffer(s,ofs,len,v,flags)
|
||
{var t=caml_output_val(v,flags);
|
||
if(t.length > len)caml_failwith("Marshal.to_buffer: buffer overflow");
|
||
caml_blit_bytes(t,0,s,ofs,t.length);
|
||
return 0}
|
||
function re_replacement_text(repl,groups,orig)
|
||
{var
|
||
repl=caml_jsbytes_of_string(repl),
|
||
len=repl.length,
|
||
orig=caml_jsbytes_of_string(orig),
|
||
res="",
|
||
n=0,
|
||
cur,
|
||
start,
|
||
end,
|
||
c;
|
||
while(n < len)
|
||
{cur = repl.charAt(n++);
|
||
if(cur != "\\")
|
||
res += cur;
|
||
else
|
||
{if(n == len)
|
||
caml_failwith("Str.replace: illegal backslash sequence");
|
||
cur = repl.charAt(n++);
|
||
switch(cur)
|
||
{case "\\":res += cur;break;
|
||
case "0":
|
||
case "1":
|
||
case "2":
|
||
case "3":
|
||
case "4":
|
||
case "5":
|
||
case "6":
|
||
case "7":
|
||
case "8":
|
||
case "9":
|
||
c = + cur;
|
||
if(c * 2 >= groups.length - 1)
|
||
caml_failwith("Str.replace: reference to unmatched group");
|
||
start = caml_array_get(groups,c * 2);
|
||
end = caml_array_get(groups,c * 2 + 1);
|
||
if(start == - 1)
|
||
caml_failwith("Str.replace: reference to unmatched group");
|
||
res += orig.slice(start,end);
|
||
break;
|
||
default:res += "\\" + cur}}}
|
||
return caml_string_of_jsbytes(res)}
|
||
function caml_pure_js_expr(s)
|
||
{js_print_stderr("caml_pure_js_expr: fallback to runtime evaluation\n");
|
||
return eval(caml_jsstring_of_string(s))}
|
||
function blit_nat(nat1,ofs1,nat2,ofs2,len)
|
||
{for(var i=0;i < len;i++)nat1.data[ofs1 + i] = nat2.data[ofs2 + i];
|
||
return 0}
|
||
function caml_int64_ult(x,y){return x.ucompare(y) < 0}
|
||
function caml_int64_xor(x,y){return x.xor(y)}
|
||
function caml_bigstring_blit_ba_to_bytes(ba1,pos1,bytes2,pos2,len)
|
||
{if(12 != ba1.kind)
|
||
caml_invalid_argument
|
||
("caml_bigstring_blit_string_to_ba: kind mismatch");
|
||
if(len == 0)return 0;
|
||
var ofs1=ba1.offset(pos1);
|
||
if(ofs1 + len > ba1.data.length)caml_array_bound_error();
|
||
if(pos2 + len > caml_ml_bytes_length(bytes2))caml_array_bound_error();
|
||
var slice=ba1.data.slice(ofs1,ofs1 + len);
|
||
caml_blit_bytes(caml_bytes_of_array(slice),0,bytes2,pos2,len);
|
||
return 0}
|
||
function caml_register_named_value(nm,v)
|
||
{caml_named_values[caml_jsbytes_of_string(nm)] = v;return 0}
|
||
function caml_to_js_string(s){return caml_jsstring_of_string(s)}
|
||
function caml_parse_sign_and_base(s)
|
||
{var i=0,len=caml_ml_string_length(s),base=10,sign=1;
|
||
if(len > 0)
|
||
switch(caml_string_unsafe_get(s,i))
|
||
{case 45:i++;sign = - 1;break;case 43:i++;sign = 1;break}
|
||
if(i + 1 < len && caml_string_unsafe_get(s,i) == 48)
|
||
switch(caml_string_unsafe_get(s,i + 1))
|
||
{case 120:
|
||
case 88:base = 16;i += 2;break;
|
||
case 111:
|
||
case 79:base = 8;i += 2;break;
|
||
case 98:
|
||
case 66:base = 2;i += 2;break;
|
||
case 117:
|
||
case 85:i += 2;break
|
||
}
|
||
return [i,sign,base]}
|
||
function caml_parse_digit(c)
|
||
{if(c >= 48 && c <= 57)return c - 48;
|
||
if(c >= 65 && c <= 90)return c - 55;
|
||
if(c >= 97 && c <= 122)return c - 87;
|
||
return - 1}
|
||
function caml_int64_of_string(s)
|
||
{var
|
||
r=caml_parse_sign_and_base(s),
|
||
i=r[0],
|
||
sign=r[1],
|
||
base=r[2],
|
||
base64=caml_int64_of_int32(base),
|
||
threshold=
|
||
new MlInt64(0xffffff,0xfffffff,0xffff).udivmod(base64).quotient,
|
||
c=caml_string_unsafe_get(s,i),
|
||
d=caml_parse_digit(c);
|
||
if(d < 0 || d >= base)caml_failwith("int_of_string");
|
||
var res=caml_int64_of_int32(d);
|
||
for(;;)
|
||
{i++;
|
||
c = caml_string_unsafe_get(s,i);
|
||
if(c == 95)continue;
|
||
d = caml_parse_digit(c);
|
||
if(d < 0 || d >= base)break;
|
||
if(caml_int64_ult(threshold,res))caml_failwith("int_of_string");
|
||
d = caml_int64_of_int32(d);
|
||
res = caml_int64_add(caml_int64_mul(base64,res),d);
|
||
if(caml_int64_ult(res,d))caml_failwith("int_of_string")}
|
||
if(i != caml_ml_string_length(s))caml_failwith("int_of_string");
|
||
if(base == 10 && caml_int64_ult(new MlInt64(0,0,0x8000),res))
|
||
caml_failwith("int_of_string");
|
||
if(sign < 0)res = caml_int64_neg(res);
|
||
return res}
|
||
function re_search_forward(re,s,pos)
|
||
{if(pos < 0 || pos > caml_ml_string_length(s))
|
||
caml_invalid_argument("Str.search_forward");
|
||
while(pos <= caml_ml_string_length(s))
|
||
{var res=re_match(re,s,pos,0);if(res)return res;pos++}
|
||
return [0]}
|
||
var caml_blit_string_to_bigstring=caml_bigstring_blit_string_to_ba;
|
||
function caml_make_vect(len,init)
|
||
{if(len < 0)caml_array_bound_error();
|
||
var len=len + 1 | 0,b=new Array(len);
|
||
b[0] = 0;
|
||
for(var i=1;i < len;i++)b[i] = init;
|
||
return b}
|
||
function caml_ml_seek_in(chanid,pos)
|
||
{var chan=caml_ml_channels[chanid];
|
||
if(chan.refill != null)caml_raise_sys_error("Illegal seek");
|
||
chan.offset = pos;
|
||
return 0}
|
||
function caml_sys_read_directory(name)
|
||
{var
|
||
root=resolve_fs_device(name),
|
||
a=root.device.readdir(root.rest),
|
||
l=new Array(a.length + 1);
|
||
l[0] = 0;
|
||
for(var i=0;i < a.length;i++)l[i + 1] = caml_string_of_jsbytes(a[i]);
|
||
return l}
|
||
function caml_ml_output_char(chanid,c)
|
||
{var s=caml_string_of_jsbytes(String.fromCharCode(c));
|
||
caml_ml_output(chanid,s,0,1);
|
||
return 0}
|
||
function caml_sys_const_ostype_win32(){return 0}
|
||
function caml_obj_is_block(x){return + (x instanceof Array)}
|
||
function caml_ml_input_char(chanid)
|
||
{var chan=caml_ml_channels[chanid];
|
||
caml_ml_may_refill_input(chanid);
|
||
if(chan.offset >= chan.file.length())caml_raise_end_of_file();
|
||
var res=chan.file.read_one(chan.offset);
|
||
chan.offset++;
|
||
return res}
|
||
function caml_js_var(x)
|
||
{var x=caml_jsstring_of_string(x);
|
||
if(! x.match(/^[a-zA-Z_$][a-zA-Z_$0-9]*(\.[a-zA-Z_$][a-zA-Z_$0-9]*)*$/))
|
||
js_print_stderr
|
||
('caml_js_var: "'
|
||
+
|
||
x
|
||
+
|
||
'" is not a valid JavaScript variable. continuing ..');
|
||
return eval(x)}
|
||
function caml_trunc_float(x){return Math.trunc(x)}
|
||
function caml_ephe_blit_data(src,dst)
|
||
{dst[caml_ephe_data_offset] = src[caml_ephe_data_offset];return 0}
|
||
function caml_is_printable(c){return + (c > 31 && c < 127)}
|
||
function caml_equal(x,y){return + (caml_compare_val(x,y,false) == 0)}
|
||
function re_partial_match(re,s,pos)
|
||
{if(pos < 0 || pos > caml_ml_string_length(s))
|
||
caml_invalid_argument("Str.partial_match");
|
||
var res=re_match(re,s,pos,1);
|
||
return res?res:[0]}
|
||
function caml_sys_random_seed()
|
||
{var now=new Date().getTime(),x=now ^ 0xffffffff * Math.random();
|
||
return [0,x]}
|
||
function caml_final_register_called_without_value(){return 0}
|
||
function caml_ba_get_2(ba,i0,i1){return ba.get(ba.offset([i0,i1]))}
|
||
function win_handle_fd(x){return x}
|
||
function caml_ba_uint8_set16(ba,i0,v)
|
||
{var ofs=ba.offset(i0);
|
||
if(ofs + 1 >= ba.data.length)caml_array_bound_error();
|
||
ba.set(ofs + 0,v & 0xff);
|
||
ba.set(ofs + 1,v >>> 8 & 0xff);
|
||
return 0}
|
||
function caml_js_delete(o,f){delete o[f];return 0}
|
||
function caml_int_of_string(s)
|
||
{var
|
||
r=caml_parse_sign_and_base(s),
|
||
i=r[0],
|
||
sign=r[1],
|
||
base=r[2],
|
||
len=caml_ml_string_length(s),
|
||
threshold=- 1 >>> 0,
|
||
c=i < len?caml_string_unsafe_get(s,i):0,
|
||
d=caml_parse_digit(c);
|
||
if(d < 0 || d >= base)caml_failwith("int_of_string");
|
||
var res=d;
|
||
for(i++;i < len;i++)
|
||
{c = caml_string_unsafe_get(s,i);
|
||
if(c == 95)continue;
|
||
d = caml_parse_digit(c);
|
||
if(d < 0 || d >= base)break;
|
||
res = base * res + d;
|
||
if(res > threshold)caml_failwith("int_of_string")}
|
||
if(i != len)caml_failwith("int_of_string");
|
||
res = sign * res;
|
||
if(base == 10 && (res | 0) != res)caml_failwith("int_of_string");
|
||
return res | 0}
|
||
function caml_list_mount_point()
|
||
{var prev=0;
|
||
for(var i=0;i < jsoo_mount_point.length;i++)
|
||
{var old=prev;
|
||
prev = [0,caml_string_of_jsbytes(jsoo_mount_point[i].path),old]}
|
||
return prev}
|
||
var
|
||
caml_marshal_constants=
|
||
{PREFIX_SMALL_BLOCK:0x80,
|
||
PREFIX_SMALL_INT:0x40,
|
||
PREFIX_SMALL_STRING:0x20,
|
||
CODE_INT8:0x00,
|
||
CODE_INT16:0x01,
|
||
CODE_INT32:0x02,
|
||
CODE_INT64:0x03,
|
||
CODE_SHARED8:0x04,
|
||
CODE_SHARED16:0x05,
|
||
CODE_SHARED32:0x06,
|
||
CODE_BLOCK32:0x08,
|
||
CODE_BLOCK64:0x13,
|
||
CODE_STRING8:0x09,
|
||
CODE_STRING32:0x0A,
|
||
CODE_DOUBLE_BIG:0x0B,
|
||
CODE_DOUBLE_LITTLE:0x0C,
|
||
CODE_DOUBLE_ARRAY8_BIG:0x0D,
|
||
CODE_DOUBLE_ARRAY8_LITTLE:0x0E,
|
||
CODE_DOUBLE_ARRAY32_BIG:0x0F,
|
||
CODE_DOUBLE_ARRAY32_LITTLE:0x07,
|
||
CODE_CODEPOINTER:0x10,
|
||
CODE_INFIXPOINTER:0x11,
|
||
CODE_CUSTOM:0x12,
|
||
CODE_CUSTOM_LEN:0x18,
|
||
CODE_CUSTOM_FIXED:0x19};
|
||
function caml_js_equals(x,y){return + (x == y)}
|
||
function bigstring_to_typed_array(bs){return bs.data}
|
||
function caml_gr_arc_aux(ctx,cx,cy,ry,rx,a1,a2)
|
||
{while(a1 > a2)a2 += 360;
|
||
a1 /= 180;
|
||
a2 /= 180;
|
||
var
|
||
rot=0,
|
||
xPos,
|
||
yPos,
|
||
xPos_prev,
|
||
yPos_prev,
|
||
space=2,
|
||
num=(a2 - a1) * Math.PI * ((rx + ry) / 2) / space | 0,
|
||
delta=(a2 - a1) * Math.PI / num,
|
||
i=a1 * Math.PI;
|
||
for(var j=0;j <= num;j++)
|
||
{xPos
|
||
=
|
||
cx
|
||
-
|
||
rx
|
||
*
|
||
Math.sin(i)
|
||
*
|
||
Math.sin(rot * Math.PI)
|
||
+
|
||
ry
|
||
*
|
||
Math.cos(i)
|
||
*
|
||
Math.cos(rot * Math.PI);
|
||
xPos = xPos.toFixed(2);
|
||
yPos
|
||
=
|
||
cy
|
||
+
|
||
ry
|
||
*
|
||
Math.cos(i)
|
||
*
|
||
Math.sin(rot * Math.PI)
|
||
+
|
||
rx
|
||
*
|
||
Math.sin(i)
|
||
*
|
||
Math.cos(rot * Math.PI);
|
||
yPos = yPos.toFixed(2);
|
||
if(j == 0)
|
||
ctx.moveTo(xPos,yPos);
|
||
else
|
||
if(xPos_prev != xPos || yPos_prev != yPos)ctx.lineTo(xPos,yPos);
|
||
xPos_prev = xPos;
|
||
yPos_prev = yPos;
|
||
i -= delta}
|
||
return 0}
|
||
function caml_gr_fill_arc(x,y,rx,ry,a1,a2)
|
||
{var s=caml_gr_state_get();
|
||
s.context.beginPath();
|
||
caml_gr_arc_aux(s.context,x,s.height - y,rx,ry,a1,a2);
|
||
s.context.fill();
|
||
return 0}
|
||
function caml_ba_slice(ba,vind)
|
||
{vind = caml_js_from_array(vind);
|
||
var num_inds=vind.length,index=[],sub_dims=[],ofs;
|
||
if(num_inds > ba.dims.length)
|
||
caml_invalid_argument("Bigarray.slice: too many indices");
|
||
if(ba.layout == 0)
|
||
{for(var i=0;i < num_inds;i++)index[i] = vind[i];
|
||
for(;i < ba.dims.length;i++)index[i] = 0;
|
||
sub_dims = ba.dims.slice(num_inds)}
|
||
else
|
||
{for(var i=0;i < num_inds;i++)
|
||
index[ba.dims.length - num_inds + i] = vind[i];
|
||
for(var i=0;i < ba.dims.length - num_inds;i++)index[i] = 1;
|
||
sub_dims = ba.dims.slice(0,ba.dims.length - num_inds)}
|
||
ofs = ba.offset(index);
|
||
var
|
||
size=caml_ba_get_size(sub_dims),
|
||
size_per_element=caml_ba_get_size_per_element(ba.kind),
|
||
new_data=
|
||
ba.data.subarray
|
||
(ofs * size_per_element,(ofs + size) * size_per_element);
|
||
return caml_ba_create_unsafe(ba.kind,ba.layout,sub_dims,new_data)}
|
||
function caml_marshal_data_size(s,ofs)
|
||
{function get32(s,i)
|
||
{return caml_bytes_unsafe_get(s,i)
|
||
<<
|
||
24
|
||
|
|
||
caml_bytes_unsafe_get(s,i + 1)
|
||
<<
|
||
16
|
||
|
|
||
caml_bytes_unsafe_get(s,i + 2)
|
||
<<
|
||
8
|
||
|
|
||
caml_bytes_unsafe_get(s,i + 3)}
|
||
if(get32(s,ofs) != (0x8495A6BE | 0))
|
||
caml_failwith("Marshal.data_size: bad object");
|
||
return get32(s,ofs + 4)}
|
||
function caml_input_value(chanid)
|
||
{var chan=caml_ml_channels[chanid],buf=caml_create_bytes(8);
|
||
chan.file.read(chan.offset,buf,0,8);
|
||
var len=caml_marshal_data_size(buf,0) + 20,buf=caml_create_bytes(len);
|
||
chan.file.read(chan.offset,buf,0,len);
|
||
var offset=[0],res=caml_input_value_from_bytes(buf,offset);
|
||
chan.offset = chan.offset + offset[0];
|
||
return res}
|
||
function caml_ba_kind(ba){return ba.kind}
|
||
function caml_js_fun_call(f,a)
|
||
{switch(a.length)
|
||
{case 1:return f();
|
||
case 2:return f(a[1]);
|
||
case 3:return f(a[1],a[2]);
|
||
case 4:return f(a[1],a[2],a[3]);
|
||
case 5:return f(a[1],a[2],a[3],a[4]);
|
||
case 6:return f(a[1],a[2],a[3],a[4],a[5]);
|
||
case 7:return f(a[1],a[2],a[3],a[4],a[5],a[6]);
|
||
case 8:return f(a[1],a[2],a[3],a[4],a[5],a[6],a[7])
|
||
}
|
||
return f.apply(null,caml_js_from_array(a))}
|
||
function caml_js_pure_expr(f){return f()}
|
||
function compare_digits_nat(nat1,ofs1,nat2,ofs2)
|
||
{if(nat1.data[ofs1] > nat2.data[ofs2])return 1;
|
||
if(nat1.data[ofs1] < nat2.data[ofs2])return - 1;
|
||
return 0}
|
||
function caml_ml_input(chanid,s,i,l)
|
||
{var chan=caml_ml_channels[chanid],l2=chan.file.length() - chan.offset;
|
||
if(l2 == 0 && chan.refill != null)l2 = caml_ml_refill_input(chan);
|
||
if(l2 < l)l = l2;
|
||
chan.file.read(chan.offset,s,i,l);
|
||
chan.offset += l;
|
||
return l}
|
||
function caml_gr_wait_event(_evl)
|
||
{caml_failwith
|
||
("caml_gr_wait_event not Implemented: use Graphics_js instead")}
|
||
function caml_gr_sigio_handler(){return 0}
|
||
function caml_hash_mix_bigstring(h,bs)
|
||
{return caml_hash_mix_bytes_arr(h,bs.data)}
|
||
function caml_record_backtrace(){return 0}
|
||
function unix_gmtime(t)
|
||
{var
|
||
d=new Date(t * 1000),
|
||
d_num=d.getTime(),
|
||
januaryfirst=new Date(Date.UTC(d.getUTCFullYear(),0,1)).getTime(),
|
||
doy=Math.floor((d_num - januaryfirst) / 86400000);
|
||
return [0,
|
||
d.getUTCSeconds(),
|
||
d.getUTCMinutes(),
|
||
d.getUTCHours(),
|
||
d.getUTCDate(),
|
||
d.getUTCMonth(),
|
||
d.getUTCFullYear() - 1900,
|
||
d.getUTCDay(),
|
||
doy,
|
||
false | 0]}
|
||
function caml_sys_get_config()
|
||
{return [0,caml_string_of_jsbytes("Unix"),32,0]}
|
||
function caml_sys_const_backend_type()
|
||
{return [0,caml_string_of_jsbytes("js_of_ocaml")]}
|
||
function unix_time(){return Math.floor(unix_gettimeofday())}
|
||
function caml_ml_out_channels_list()
|
||
{var l=0;
|
||
for(var c=0;c < caml_ml_channels.length;c++)
|
||
if
|
||
(caml_ml_channels[c]
|
||
&&
|
||
caml_ml_channels[c].opened
|
||
&&
|
||
caml_ml_channels[c].out)
|
||
l = [0,caml_ml_channels[c].fd,l];
|
||
return l}
|
||
function bigstring_of_array_buffer(ab)
|
||
{var ta=new (joo_global_object.Uint8Array)(ab);
|
||
return caml_ba_create_unsafe(12,0,[ta.length],ta)}
|
||
function caml_mod(x,y){if(y == 0)caml_raise_zero_divide();return x % y}
|
||
function caml_ba_init(){return 0}
|
||
function re_string_match(re,s,pos)
|
||
{if(pos < 0 || pos > caml_ml_string_length(s))
|
||
caml_invalid_argument("Str.string_match");
|
||
var res=re_match(re,s,pos,0);
|
||
return res?res:[0]}
|
||
function BigStringReader(bs,i){this.s = bs;this.i = i}
|
||
BigStringReader.prototype
|
||
=
|
||
{read8u:function(){return caml_ba_get_1(this.s,this.i++)},
|
||
read8s:function(){return caml_ba_get_1(this.s,this.i++) << 24 >> 24},
|
||
read16u:
|
||
function()
|
||
{var s=this.s,i=this.i;
|
||
this.i = i + 2;
|
||
return caml_ba_get_1(s,i) << 8 | caml_ba_get_1(s,i + 1)},
|
||
read16s:
|
||
function()
|
||
{var s=this.s,i=this.i;
|
||
this.i = i + 2;
|
||
return caml_ba_get_1(s,i) << 24 >> 16 | caml_ba_get_1(s,i + 1)},
|
||
read32u:
|
||
function()
|
||
{var s=this.s,i=this.i;
|
||
this.i = i + 4;
|
||
return (caml_ba_get_1(s,i)
|
||
<<
|
||
24
|
||
|
|
||
caml_ba_get_1(s,i + 1)
|
||
<<
|
||
16
|
||
|
|
||
caml_ba_get_1(s,i + 2)
|
||
<<
|
||
8
|
||
|
|
||
caml_ba_get_1(s,i + 3))
|
||
>>>
|
||
0},
|
||
read32s:
|
||
function()
|
||
{var s=this.s,i=this.i;
|
||
this.i = i + 4;
|
||
return caml_ba_get_1(s,i)
|
||
<<
|
||
24
|
||
|
|
||
caml_ba_get_1(s,i + 1)
|
||
<<
|
||
16
|
||
|
|
||
caml_ba_get_1(s,i + 2)
|
||
<<
|
||
8
|
||
|
|
||
caml_ba_get_1(s,i + 3)},
|
||
readstr:
|
||
function(len)
|
||
{var i=this.i,arr=new Array(len);
|
||
for(var j=0;j < len;j++)arr[j] = caml_ba_get_1(this.s,i + j);
|
||
this.i = i + len;
|
||
return caml_string_of_array(arr)}};
|
||
function caml_gr_dump_image(im)
|
||
{var data=[0];
|
||
for(var i=0;i < im.height;i++)
|
||
{data[i + 1] = [0];
|
||
for(var j=0;j < im.width;j++)
|
||
{var
|
||
o=i * (im.width * 4) + j * 4,
|
||
r=im.data[o + 0],
|
||
g=im.data[o + 1],
|
||
b=im.data[o + 2];
|
||
data[i + 1][j + 1] = (r << 16) + (g << 8) + b}}
|
||
return data}
|
||
function caml_ba_get_generic(ba,i)
|
||
{var ofs=ba.offset(caml_js_from_array(i));return ba.get(ofs)}
|
||
function caml_get_exception_backtrace(){return 0}
|
||
function caml_format_float(fmt,x)
|
||
{function toFixed(x,dp)
|
||
{if(Math.abs(x) < 1.0)
|
||
return x.toFixed(dp);
|
||
else
|
||
{var e=parseInt(x.toString().split("+")[1]);
|
||
if(e > 20)
|
||
{e -= 20;
|
||
x /= Math.pow(10,e);
|
||
x += new Array(e + 1).join("0");
|
||
if(dp > 0)x = x + "." + new Array(dp + 1).join("0");
|
||
return x}
|
||
else
|
||
return x.toFixed(dp)}}
|
||
var s,f=caml_parse_format(fmt),prec=f.prec < 0?6:f.prec;
|
||
if(x < 0 || x == 0 && 1 / x == - Infinity){f.sign = - 1;x = - x}
|
||
if(isNaN(x))
|
||
{s = "nan";f.filler = " "}
|
||
else
|
||
if(! isFinite(x))
|
||
{s = "inf";f.filler = " "}
|
||
else
|
||
switch(f.conv)
|
||
{case "e":
|
||
var s=x.toExponential(prec),i=s.length;
|
||
if(s.charAt(i - 3) == "e")
|
||
s = s.slice(0,i - 1) + "0" + s.slice(i - 1);
|
||
break;
|
||
case "f":s = toFixed(x,prec);break;
|
||
case "g":
|
||
prec = prec?prec:1;
|
||
s = x.toExponential(prec - 1);
|
||
var j=s.indexOf("e"),exp=+ s.slice(j + 1);
|
||
if(exp < - 4 || x >= 1e21 || x.toFixed(0).length > prec)
|
||
{var i=j - 1;
|
||
while(s.charAt(i) == "0")i--;
|
||
if(s.charAt(i) == ".")i--;
|
||
s = s.slice(0,i + 1) + s.slice(j);
|
||
i = s.length;
|
||
if(s.charAt(i - 3) == "e")
|
||
s = s.slice(0,i - 1) + "0" + s.slice(i - 1);
|
||
break}
|
||
else
|
||
{var p=prec;
|
||
if(exp < 0)
|
||
{p -= exp + 1;s = x.toFixed(p)}
|
||
else
|
||
while(s = x.toFixed(p),s.length > prec + 1)p--;
|
||
if(p)
|
||
{var i=s.length - 1;
|
||
while(s.charAt(i) == "0")i--;
|
||
if(s.charAt(i) == ".")i--;
|
||
s = s.slice(0,i + 1)}}
|
||
break
|
||
}
|
||
return caml_finish_formatting(f,s)}
|
||
function caml_mount_autoload(name,f)
|
||
{var path=caml_make_path(name),name=path.join("/") + "/";
|
||
jsoo_mount_point.push({path:name,device:new MlFakeDevice(name,f)});
|
||
return 0}
|
||
function caml_bigstring_blit_ba_to_ba(ba1,pos1,ba2,pos2,len)
|
||
{if(12 != ba1.kind)
|
||
caml_invalid_argument("caml_bigstring_blit_ba_to_ba: kind mismatch");
|
||
if(12 != ba2.kind)
|
||
caml_invalid_argument("caml_bigstring_blit_ba_to_ba: kind mismatch");
|
||
if(len == 0)return 0;
|
||
var ofs1=ba1.offset(pos1),ofs2=ba2.offset(pos2);
|
||
if(ofs1 + len > ba1.data.length)caml_array_bound_error();
|
||
if(ofs2 + len > ba2.data.length)caml_array_bound_error();
|
||
var slice=ba1.data.subarray(ofs1,ofs1 + len);
|
||
ba2.data.set(slice,pos2);
|
||
return 0}
|
||
var caml_blit_bigstring_to_bigstring=caml_bigstring_blit_ba_to_ba;
|
||
function caml_string_lessthan(s1,s2){return caml_bytes_lessthan(s1,s2)}
|
||
function caml_string_greaterthan(s1,s2)
|
||
{return caml_string_lessthan(s2,s1)}
|
||
function caml_div(x,y)
|
||
{if(y == 0)caml_raise_zero_divide();return x / y | 0}
|
||
function caml_ephe_get_data_copy(x)
|
||
{return x[caml_ephe_data_offset] === undefined
|
||
?0
|
||
:[0,caml_obj_dup(x[caml_ephe_data_offset])]}
|
||
function caml_sys_get_argv(a){return [0,caml_argv[1],caml_argv]}
|
||
function caml_js_to_bool(x){return + x}
|
||
function caml_gr_create_image(x,y)
|
||
{var s=caml_gr_state_get();return s.context.createImageData(x,y)}
|
||
var caml_ephe_get_key_copy=caml_weak_get_copy;
|
||
function caml_lessthan(x,y){return + (caml_compare_val(x,y,false) < 0)}
|
||
function caml_raw_backtrace_next_slot(){return 0}
|
||
function caml_register_global(n,v,name_opt)
|
||
{if(name_opt && joo_global_object.toplevelReloc)
|
||
n = joo_global_object.toplevelReloc(name_opt);
|
||
caml_global_data[n + 1] = v;
|
||
if(name_opt)caml_global_data[name_opt] = v}
|
||
function mult_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat3,ofs3,len3)
|
||
{var carry=0;
|
||
for(var i=0;i < len3;i++)
|
||
carry
|
||
+=
|
||
mult_digit_nat(nat1,ofs1 + i,len1 - i,nat2,ofs2,len2,nat3,ofs3 + i);
|
||
return carry}
|
||
function square_nat(nat1,ofs1,len1,nat2,ofs2,len2)
|
||
{var carry=0;
|
||
carry += add_nat(nat1,ofs1,len1,nat1,ofs1,len1,0);
|
||
carry += mult_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat2,ofs2,len2);
|
||
return carry}
|
||
function caml_js_from_float(x){return x}
|
||
function caml_floatarray_create(len)
|
||
{if(len < 0)caml_array_bound_error();
|
||
var len=len + 1 | 0,b=new Array(len);
|
||
b[0] = 254;
|
||
for(var i=1;i < len;i++)b[i] = 0;
|
||
return b}
|
||
function caml_gc_stat(){return [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}
|
||
function caml_sys_modify_argv(arg){caml_argv = arg;return 0}
|
||
var caml_method_cache=[];
|
||
function caml_get_public_method(obj,tag,cacheid)
|
||
{var meths=obj[1],ofs=caml_method_cache[cacheid];
|
||
if(ofs === null)
|
||
for(var i=caml_method_cache.length;i < cacheid;i++)
|
||
caml_method_cache[i] = 0;
|
||
else
|
||
if(meths[ofs] === tag)return meths[ofs - 1];
|
||
var li=3,hi=meths[1] * 2 + 1,mi;
|
||
while(li < hi)
|
||
{mi = li + hi >> 1 | 1;if(tag < meths[mi + 1])hi = mi - 2;else li = mi}
|
||
caml_method_cache[cacheid] = li + 1;
|
||
return tag == meths[li + 1]?meths[li]:0}
|
||
function caml_js_get_console()
|
||
{var
|
||
c=joo_global_object.console?joo_global_object.console:{},
|
||
m=
|
||
["log",
|
||
"debug",
|
||
"info",
|
||
"warn",
|
||
"error",
|
||
"assert",
|
||
"dir",
|
||
"dirxml",
|
||
"trace",
|
||
"group",
|
||
"groupCollapsed",
|
||
"groupEnd",
|
||
"time",
|
||
"timeEnd"];
|
||
function f(){}
|
||
for(var i=0;i < m.length;i++)if(! c[m[i]])c[m[i]] = f;
|
||
return c}
|
||
function caml_ml_open_descriptor_in(fd)
|
||
{var data=caml_global_data.fds[fd];
|
||
if(data.flags.wronly)caml_raise_sys_error("fd " + fd + " is writeonly");
|
||
var
|
||
channel=
|
||
{file:data.file,
|
||
offset:data.offset,
|
||
fd:fd,
|
||
opened:true,
|
||
out:false,
|
||
refill:null};
|
||
caml_ml_channels[channel.fd] = channel;
|
||
return channel.fd}
|
||
function bigstring_of_typed_array(ba)
|
||
{var
|
||
ta=
|
||
new
|
||
(joo_global_object.Uint8Array)
|
||
(ba.buffer,ba.byteOffset,ba.length * ba.BYTES_PER_ELEMENT);
|
||
return caml_ba_create_unsafe(12,0,[ta.length],ta)}
|
||
function caml_round_float(x){return Math.round(x)}
|
||
function caml_ojs_new_arr(c,a)
|
||
{switch(a.length)
|
||
{case 0:return new c();
|
||
case 1:return new c(a[0]);
|
||
case 2:return new c(a[0],a[1]);
|
||
case 3:return new c(a[0],a[1],a[2]);
|
||
case 4:return new c(a[0],a[1],a[2],a[3]);
|
||
case 5:return new c(a[0],a[1],a[2],a[3],a[4]);
|
||
case 6:return new c(a[0],a[1],a[2],a[3],a[4],a[5]);
|
||
case 7:return new c(a[0],a[1],a[2],a[3],a[4],a[5],a[6])
|
||
}
|
||
function F(){return c.apply(this,a)}
|
||
F.prototype = c.prototype;
|
||
return new F()}
|
||
function complement_nat(nat,ofs,len)
|
||
{for(var i=0;i < len;i++)
|
||
nat.data[ofs + i] = (- 1 >>> 0) - (nat.data[ofs + i] >>> 0)}
|
||
var caml_js_regexps={amp:/&/g,lt:/</g,quot:/\"/g,all:/[&<\"]/};
|
||
function caml_js_html_escape(s)
|
||
{if(! caml_js_regexps.all.test(s))return s;
|
||
return s.replace(caml_js_regexps.amp,"&").replace
|
||
(caml_js_regexps.lt,"<").replace
|
||
(caml_js_regexps.quot,""")}
|
||
function caml_ba_dim_2(ba){return caml_ba_dim(ba,1)}
|
||
function caml_js_wrap_meth_callback_arguments(f)
|
||
{return function()
|
||
{var len=arguments.length,args=new Array(len);
|
||
for(var i=0;i < len;i++)args[i] = arguments[i];
|
||
return caml_call_gen(f,[this,args])}}
|
||
function caml_sinh_float(x){return (Math.exp(x) - Math.exp(- x)) / 2}
|
||
function caml_ldexp_float(x,exp)
|
||
{exp |= 0;
|
||
if(exp > 1023)
|
||
{exp -= 1023;
|
||
x *= Math.pow(2,1023);
|
||
if(exp > 1023){exp -= 1023;x *= Math.pow(2,1023)}}
|
||
if(exp < - 1023){exp += 1023;x *= Math.pow(2,- 1023)}
|
||
x *= Math.pow(2,exp);
|
||
return x}
|
||
function caml_gr_state_set(ctx)
|
||
{caml_gr_state = ctx;caml_gr_state_init();return 0}
|
||
function caml_js_wrap_callback_strict(arity,f)
|
||
{return function()
|
||
{var n=arguments.length;
|
||
if(n == arity && f.length == arity)return f.apply(null,arguments);
|
||
var args=new Array(arity),len=Math.min(arguments.length,arity);
|
||
for(var i=0;i < len;i++)args[i] = arguments[i];
|
||
return caml_call_gen(f,args)}}
|
||
function caml_ba_set_1(ba,i0,v){ba.set(ba.offset(i0),v);return 0}
|
||
function caml_get_current_callstack(){return [0]}
|
||
function land_digit_nat(nat1,ofs1,nat2,ofs2)
|
||
{nat1.data[ofs1] &= nat2.data[ofs2];return 0}
|
||
function caml_int64_mod(x,y){return x.mod(y)}
|
||
function caml_obj_set_tag(x,tag){x[0] = tag;return 0}
|
||
function caml_create_file_extern(name,content)
|
||
{if(joo_global_object.caml_create_file)
|
||
joo_global_object.caml_create_file(name,content);
|
||
else
|
||
{if(! joo_global_object.caml_fs_tmp)joo_global_object.caml_fs_tmp = [];
|
||
joo_global_object.caml_fs_tmp.push({name:name,content:content})}
|
||
return 0}
|
||
function caml_int32_bswap(x)
|
||
{return (x & 0x000000FF)
|
||
<<
|
||
24
|
||
|
|
||
(x & 0x0000FF00)
|
||
<<
|
||
8
|
||
|
|
||
(x & 0x00FF0000)
|
||
>>>
|
||
8
|
||
|
|
||
(x & 0xFF000000)
|
||
>>>
|
||
24}
|
||
function win_startup(){}
|
||
function caml_ba_set_3(ba,i0,i1,i2,v)
|
||
{ba.set(ba.offset([i0,i1,i2]),v);return 0}
|
||
function caml_js_instanceof(o,c){return o instanceof c}
|
||
var caml_blit_bigstring_to_string=caml_bigstring_blit_ba_to_bytes;
|
||
function nth_digit_nat_native(nat,ofs){return nat.data[ofs]}
|
||
function set_digit_nat_native(nat,ofs,digit)
|
||
{nat.data[ofs] = digit;return 0}
|
||
function caml_string_set64(s,i,i64){return caml_bytes_set64(s,i,i64)}
|
||
function caml_gr_state_create(canvas,w,h)
|
||
{var context=canvas.getContext("2d");
|
||
return {context:context,
|
||
canvas:canvas,
|
||
x:0,
|
||
y:0,
|
||
width:w,
|
||
height:h,
|
||
line_width:1,
|
||
font:caml_string_of_jsbytes("fixed"),
|
||
text_size:26,
|
||
color:0x000000,
|
||
title:caml_string_of_jsbytes("")}}
|
||
function caml_js_wrap_callback(f)
|
||
{return function()
|
||
{var len=arguments.length;
|
||
if(len > 0)
|
||
{var args=new Array(len);
|
||
for(var i=0;i < len;i++)args[i] = arguments[i];
|
||
return caml_call_gen(f,args)}
|
||
else
|
||
return caml_call_gen(f,[undefined])}}
|
||
function caml_gr_draw_arc(x,y,rx,ry,a1,a2)
|
||
{var s=caml_gr_state_get();
|
||
s.context.beginPath();
|
||
caml_gr_arc_aux(s.context,x,s.height - y,rx,ry,a1,a2);
|
||
s.context.stroke();
|
||
return 0}
|
||
function caml_ba_map_file(vfd,kind,layout,shared,dims,pos)
|
||
{caml_failwith("caml_ba_map_file not implemented")}
|
||
function caml_ba_map_file_bytecode(argv,argn)
|
||
{return caml_ba_map_file(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5])}
|
||
function caml_ba_create_from(data1,data2,jstyp,kind,layout,dims)
|
||
{if(data2 || caml_ba_get_size_per_element(kind) == 2)
|
||
caml_invalid_argument
|
||
("caml_ba_create_from: use return caml_ba_create_unsafe");
|
||
return caml_ba_create_unsafe(kind,layout,dims,data1)}
|
||
function caml_tanh_float(x)
|
||
{var y=Math.exp(x),z=Math.exp(- x);return (y - z) / (y + z)}
|
||
function caml_gr_draw_str(str)
|
||
{var s=caml_gr_state_get(),m=s.context.measureText(str),dx=m.width;
|
||
s.context.fillText(str,s.x,s.height - s.y);
|
||
s.x += dx | 0;
|
||
return 0}
|
||
function caml_gr_draw_string(str)
|
||
{caml_gr_draw_str(caml_jsstring_of_string(str));return 0}
|
||
function caml_gr_draw_char(c)
|
||
{caml_gr_draw_str(String.fromCharCode(c));return 0}
|
||
function caml_unmount(name)
|
||
{var path=caml_make_path(name),name=path.join("/") + "/",idx=- 1;
|
||
for(var i=0;i < jsoo_mount_point.length;i++)
|
||
if(jsoo_mount_point[i].path == name)idx = i;
|
||
if(idx > - 1)jsoo_mount_point.splice(idx,1);
|
||
return 0}
|
||
function caml_input_value_from_string(s,ofs)
|
||
{var reader=new MlStringReader(s,typeof ofs == "number"?ofs:ofs[0]);
|
||
return caml_input_value_from_reader(reader,ofs)}
|
||
function caml_ml_pos_in_64(chanid)
|
||
{return caml_int64_of_float(caml_ml_channels[chanid].offset)}
|
||
function caml_gr_draw_image(im,x,y)
|
||
{var s=caml_gr_state_get();
|
||
if(! im.image)
|
||
{var canvas=document.createElement("canvas");
|
||
canvas.width = s.width;
|
||
canvas.height = s.height;
|
||
canvas.getContext("2d").putImageData(im,0,0);
|
||
var image=new (joo_global_object.Image)();
|
||
image.onload
|
||
=
|
||
function()
|
||
{s.context.drawImage(image,x,s.height - im.height - y);
|
||
im.image = image};
|
||
image.src = canvas.toDataURL("image/png")}
|
||
else
|
||
s.context.drawImage(im.image,x,s.height - im.height - y);
|
||
return 0}
|
||
function caml_register_channel_for_spacetime(_channel){return 0}
|
||
function caml_string_set(s,i,c)
|
||
{if(i >>> 0 >= s.l)caml_string_bound_error();
|
||
return caml_string_unsafe_set(s,i,c)}
|
||
function caml_ml_pos_out(chanid)
|
||
{caml_ml_flush(chanid);return caml_ml_channels[chanid].offset}
|
||
function caml_spacetime_enabled(_unit){return 0}
|
||
function caml_bytes_notequal(s1,s2){return 1 - caml_string_equal(s1,s2)}
|
||
function caml_runtime_parameters(_unit){return caml_string_of_jsbytes("")}
|
||
function caml_js_object(a)
|
||
{var o={};
|
||
for(var i=1;i < a.length;i++)
|
||
{var p=a[i];o[caml_jsstring_of_string(p[1])] = p[2]}
|
||
return o}
|
||
function caml_ba_create(kind,layout,dims_ml)
|
||
{var
|
||
dims=caml_js_from_array(dims_ml),
|
||
data=caml_ba_create_buffer(kind,caml_ba_get_size(dims));
|
||
return caml_ba_create_unsafe(kind,layout,dims,data)}
|
||
function caml_weak_blit(a1,i1,a2,i2,len)
|
||
{caml_array_blit
|
||
(a1,caml_ephe_key_offset + i1 - 1,a2,caml_ephe_key_offset + i2 - 1,len);
|
||
return 0}
|
||
function caml_gr_remember_mode()
|
||
{caml_failwith("caml_gr_remember_mode not Implemented")}
|
||
function caml_bswap16(x){return (x & 0x00FF) << 8 | (x & 0xFF00) >> 8}
|
||
function caml_ml_set_binary_mode(chanid,mode)
|
||
{var chan=caml_ml_channels[chanid],data=caml_global_data.fds[chan.fd];
|
||
data.flags.text = ! mode;
|
||
data.flags.binary = mode;
|
||
return 0}
|
||
function caml_final_register(){return 0}
|
||
function caml_gr_draw_rect(x,y,w,h)
|
||
{var s=caml_gr_state_get();
|
||
s.context.strokeRect(x,s.height - y,w,- h);
|
||
return 0}
|
||
function caml_string_get16(s,i)
|
||
{if(i >>> 0 >= caml_ml_string_length(s) - 1)caml_string_bound_error();
|
||
var b1=caml_string_unsafe_get(s,i),b2=caml_string_unsafe_get(s,i + 1);
|
||
return b2 << 8 | b1}
|
||
function caml_ephe_unset_data(x,data)
|
||
{x[caml_ephe_data_offset] = undefined;return 0}
|
||
function caml_output_value(chanid,v,flags)
|
||
{var s=caml_output_value_to_string(v,flags);
|
||
caml_ml_output(chanid,s,0,caml_ml_string_length(s));
|
||
return 0}
|
||
function caml_ba_get_3(ba,i0,i1,i2){return ba.get(ba.offset([i0,i1,i2]))}
|
||
var caml_ephe_blit_key=caml_weak_blit;
|
||
function caml_check_bound(array,index)
|
||
{if(index >>> 0 >= array.length - 1)caml_array_bound_error();
|
||
return array}
|
||
function caml_hash_mix_string(h,v)
|
||
{return caml_hash_mix_jsbytes(h,caml_jsbytes_of_string(v))}
|
||
function caml_hash(count,limit,seed,obj)
|
||
{var queue,rd,wr,sz,num,h,v,i,len;
|
||
sz = limit;
|
||
if(sz < 0 || sz > 256)sz = 256;
|
||
num = count;
|
||
h = seed;
|
||
queue = [obj];
|
||
rd = 0;
|
||
wr = 1;
|
||
while(rd < wr && num > 0)
|
||
{v = queue[rd++];
|
||
if(v && v.caml_custom)
|
||
{if
|
||
(caml_custom_ops[v.caml_custom]
|
||
&&
|
||
caml_custom_ops[v.caml_custom].hash)
|
||
{var hh=caml_custom_ops[v.caml_custom].hash(v);
|
||
h = caml_hash_mix_int(h,hh);
|
||
num--}}
|
||
else
|
||
if(v instanceof Array && v[0] === (v[0] | 0))
|
||
switch(v[0])
|
||
{case 248:h = caml_hash_mix_int(h,v[2]);num--;break;
|
||
case 250:queue[--rd] = v[1];break;
|
||
default:
|
||
var tag=v.length - 1 << 10 | v[0];
|
||
h = caml_hash_mix_int(h,tag);
|
||
for(i = 1,len = v.length;i < len;i++)
|
||
{if(wr >= sz)break;queue[wr++] = v[i]}
|
||
break}
|
||
else
|
||
if(caml_is_ml_bytes(v))
|
||
{h = caml_hash_mix_bytes(h,v);num--}
|
||
else
|
||
if(caml_is_ml_string(v))
|
||
{h = caml_hash_mix_string(h,v);num--}
|
||
else
|
||
if(typeof v === "string")
|
||
{h = caml_hash_mix_jsbytes(h,v);num--}
|
||
else
|
||
if(v === (v | 0))
|
||
{h = caml_hash_mix_int(h,v + v + 1);num--}
|
||
else
|
||
if(v === + v){h = caml_hash_mix_float(h,v);num--}}
|
||
h = caml_hash_mix_final(h);
|
||
return h & 0x3FFFFFFF}
|
||
function caml_obj_tag(x)
|
||
{if(x instanceof Array && x[0] == x[0] >>> 0)
|
||
return x[0];
|
||
else
|
||
if(caml_is_ml_bytes(x))
|
||
return 252;
|
||
else
|
||
if(caml_is_ml_string(x))
|
||
return 252;
|
||
else
|
||
if(x instanceof Function || typeof x == "function")
|
||
return 247;
|
||
else
|
||
if(x && x.caml_custom)return 255;else return 1000}
|
||
function caml_ba_to_typed_array(ba){return ba.data}
|
||
function caml_js_export_var()
|
||
{return typeof module !== "undefined" && module && module.exports
|
||
?module.exports
|
||
:joo_global_object}
|
||
function caml_bytes_get32(s,i)
|
||
{if(i >>> 0 >= s.l - 3)caml_bytes_bound_error();
|
||
var
|
||
b1=caml_bytes_unsafe_get(s,i),
|
||
b2=caml_bytes_unsafe_get(s,i + 1),
|
||
b3=caml_bytes_unsafe_get(s,i + 2),
|
||
b4=caml_bytes_unsafe_get(s,i + 3);
|
||
return b4 << 24 | b3 << 16 | b2 << 8 | b1}
|
||
function caml_frexp_float(x)
|
||
{if(x == 0 || ! isFinite(x))return [0,x,0];
|
||
var neg=x < 0;
|
||
if(neg)x = - x;
|
||
var exp=Math.max(- 1023,jsoo_floor_log2(x) + 1);
|
||
x *= Math.pow(2,- exp);
|
||
while(x < 0.5){x *= 2;exp--}
|
||
while(x >= 1){x *= 0.5;exp++}
|
||
if(neg)x = - x;
|
||
return [0,x,exp]}
|
||
function caml_string_get64(s,i)
|
||
{if(i >>> 0 >= caml_ml_string_length(s) - 7)caml_string_bound_error();
|
||
var a=new Array(8);
|
||
for(var j=0;j < 8;j++)a[7 - j] = caml_string_unsafe_get(s,i + j);
|
||
return caml_int64_of_bytes(a)}
|
||
function caml_ml_pos_out_64(chanid)
|
||
{caml_ml_flush(chanid);
|
||
return caml_int64_of_float(caml_ml_channels[chanid].offset)}
|
||
function caml_gr_close_subwindow(a)
|
||
{caml_failwith("caml_gr_close_subwindow not Implemented")}
|
||
function caml_set_static_env(k,v)
|
||
{if(! joo_global_object.jsoo_static_env)
|
||
joo_global_object.jsoo_static_env = {};
|
||
joo_global_object.jsoo_static_env[k] = v;
|
||
return 0}
|
||
function caml_ba_change_layout(ba,layout)
|
||
{if(ba.layout == layout)return ba;
|
||
var new_dims=[];
|
||
for(var i=0;i < ba.dims.length;i++)
|
||
new_dims[i] = ba.dims[ba.dims.length - i - 1];
|
||
return caml_ba_create_unsafe(ba.kind,layout,new_dims,ba.data)}
|
||
function caml_js_new(c,a)
|
||
{switch(a.length)
|
||
{case 1:return new c();
|
||
case 2:return new c(a[1]);
|
||
case 3:return new c(a[1],a[2]);
|
||
case 4:return new c(a[1],a[2],a[3]);
|
||
case 5:return new c(a[1],a[2],a[3],a[4]);
|
||
case 6:return new c(a[1],a[2],a[3],a[4],a[5]);
|
||
case 7:return new c(a[1],a[2],a[3],a[4],a[5],a[6]);
|
||
case 8:return new c(a[1],a[2],a[3],a[4],a[5],a[6],a[7])
|
||
}
|
||
function F(){return c.apply(this,caml_js_from_array(a))}
|
||
F.prototype = c.prototype;
|
||
return new F()}
|
||
function caml_gr_current_y(){var s=caml_gr_state_get();return s.y}
|
||
function caml_format_int(fmt,i)
|
||
{if(caml_jsbytes_of_string(fmt) == "%d")
|
||
return caml_string_of_jsbytes("" + i);
|
||
var f=caml_parse_format(fmt);
|
||
if(i < 0)if(f.signedconv){f.sign = - 1;i = - i}else i >>>= 0;
|
||
var s=i.toString(f.base);
|
||
if(f.prec >= 0)
|
||
{f.filler = " ";
|
||
var n=f.prec - s.length;
|
||
if(n > 0)s = caml_str_repeat(n,"0") + s}
|
||
return caml_finish_formatting(f,s)}
|
||
function caml_obj_truncate(x,s)
|
||
{if(s <= 0 || s + 1 > x.length)caml_invalid_argument("Obj.truncate");
|
||
if(x.length != s + 1)x.length = s + 1;
|
||
return 0}
|
||
function caml_js_to_string(s){return caml_string_of_jsstring(s)}
|
||
function is_digit_odd(nat,ofs){if(nat.data[ofs] & 1)return 1;return 0}
|
||
function caml_runtime_variant(_unit){return caml_string_of_jsbytes("")}
|
||
function caml_ml_open_descriptor_out(fd)
|
||
{var data=caml_global_data.fds[fd];
|
||
if(data.flags.rdonly)caml_raise_sys_error("fd " + fd + " is readonly");
|
||
var
|
||
channel=
|
||
{file:data.file,
|
||
offset:data.offset,
|
||
fd:fd,
|
||
opened:true,
|
||
out:true,
|
||
buffer:""};
|
||
caml_ml_channels[channel.fd] = channel;
|
||
return channel.fd}
|
||
function caml_array_concat(l)
|
||
{var a=[0];
|
||
while(l !== 0)
|
||
{var b=l[1];for(var i=1;i < b.length;i++)a.push(b[i]);l = l[2]}
|
||
return a}
|
||
function caml_gr_open_graph(info)
|
||
{var g=joo_global_object,info=caml_jsstring_of_string(info);
|
||
function get(name)
|
||
{var res=info.match("(^|,) *" + name + " *= *([a-zA-Z0-9_]+) *(,|$)");
|
||
if(res)return res[2]}
|
||
var specs=[];
|
||
if(! (info == ""))specs.push(info);
|
||
var target=get("target");
|
||
if(! target)target = "";
|
||
var status=get("status");
|
||
if(! status)specs.push("status=1");
|
||
var w=get("width");
|
||
w = w?parseInt(w):200;
|
||
specs.push("width=" + w);
|
||
var h=get("height");
|
||
h = h?parseInt(h):200;
|
||
specs.push("height=" + h);
|
||
var win=g.open("about:blank",target,specs.join(","));
|
||
if(! win)caml_failwith("Graphics.open_graph: cannot open the window");
|
||
var doc=win.document,canvas=doc.createElement("canvas");
|
||
canvas.width = w;
|
||
canvas.height = h;
|
||
var ctx=caml_gr_state_create(canvas,w,h);
|
||
ctx.set_title = function(title){doc.title = title};
|
||
caml_gr_state_set(ctx);
|
||
var body=doc.body;
|
||
body.style.margin = "0px";
|
||
body.appendChild(canvas);
|
||
return 0}
|
||
function caml_ephe_set_data(x,data)
|
||
{x[caml_ephe_data_offset] = data;return 0}
|
||
function caml_make_float_vect(len)
|
||
{if(len < 0)caml_array_bound_error();
|
||
var len=len + 1 | 0,b=new Array(len);
|
||
b[0] = 254;
|
||
for(var i=1;i < len;i++)b[i] = 0;
|
||
return b}
|
||
function caml_greaterequal(x,y)
|
||
{return + (caml_compare_val(x,y,false) >= 0)}
|
||
function caml_get_exception_raw_backtrace(){return [0]}
|
||
function caml_log1p_float(x)
|
||
{var y=1 + x,z=y - 1;return z == 0?x:x * Math.log(y) / z}
|
||
function caml_int64_or(x,y){return x.or(y)}
|
||
function caml_lazy_make_forward(v){return [250,v]}
|
||
function lor_digit_nat(nat1,ofs1,nat2,ofs2)
|
||
{nat1.data[ofs1] |= nat2.data[ofs2];return 0}
|
||
function caml_gr_blit_image(im,x,y)
|
||
{var
|
||
s=caml_gr_state_get(),
|
||
im2=
|
||
s.context.getImageData(x,s.height - im.height - y,im.width,im.height);
|
||
for(var i=0;i < im2.data.length;i += 4)
|
||
{im.data[i] = im2.data[i];
|
||
im.data[i + 1] = im2.data[i + 1];
|
||
im.data[i + 2] = im2.data[i + 2];
|
||
im.data[i + 3] = im2.data[i + 3]}
|
||
return 0}
|
||
function caml_gr_window_id(a)
|
||
{caml_failwith("caml_gr_window_id not Implemented")}
|
||
function caml_js_on_ie()
|
||
{var
|
||
ua=
|
||
joo_global_object.navigator?joo_global_object.navigator.userAgent:"";
|
||
return ua.indexOf("MSIE") != - 1 && ua.indexOf("Opera") != 0}
|
||
function caml_int64_shift_right(x,s){return x.shift_right(s)}
|
||
function caml_ba_layout(ba){return ba.layout}
|
||
function caml_convert_raw_backtrace(){return [0]}
|
||
function caml_array_set(array,index,newval)
|
||
{if(index < 0 || index >= array.length - 1)caml_array_bound_error();
|
||
array[index + 1] = newval;
|
||
return 0}
|
||
function caml_bytes_greaterequal(s1,s2)
|
||
{return caml_bytes_lessequal(s2,s1)}
|
||
function set_digit_nat(nat,ofs,digit){nat.data[ofs] = digit;return 0}
|
||
function caml_update_dummy(x,y)
|
||
{if(typeof y === "function"){x.fun = y;return 0}
|
||
if(y.fun){x.fun = y.fun;return 0}
|
||
var i=y.length;
|
||
while(i--)x[i] = y[i];
|
||
return 0}
|
||
function caml_CamlinternalMod_update_mod(shape,real,x)
|
||
{if(typeof shape === "number")
|
||
switch(shape){case 0:case 1:case 2:default:caml_update_dummy(real,x)}
|
||
else
|
||
switch(shape[0])
|
||
{case 0:
|
||
for(var i=1;i < shape[1].length;i++)
|
||
caml_CamlinternalMod_update_mod(shape[1][i],real[i],x[i]);
|
||
break
|
||
}
|
||
return 0}
|
||
function caml_gr_doc_of_state(state)
|
||
{if(state.canvas.ownerDocument)return state.canvas.ownerDocument}
|
||
function caml_ml_output_int(chanid,i)
|
||
{var
|
||
arr=[i >> 24 & 0xFF,i >> 16 & 0xFF,i >> 8 & 0xFF,i & 0xFF],
|
||
s=caml_string_of_array(arr);
|
||
caml_ml_output(chanid,s,0,4);
|
||
return 0}
|
||
function caml_obj_with_tag(tag,x)
|
||
{var l=x.length,a=new Array(l);
|
||
a[0] = tag;
|
||
for(var i=1;i < l;i++)a[i] = x[i];
|
||
return a}
|
||
var caml_initial_time=new Date().getTime() * 0.001;
|
||
function caml_sys_time()
|
||
{var now=new Date().getTime();return now * 0.001 - caml_initial_time}
|
||
function caml_ml_channel_size(chanid)
|
||
{var chan=caml_ml_channels[chanid];return chan.file.length()}
|
||
function caml_raw_backtrace_slot()
|
||
{caml_invalid_argument
|
||
("Printexc.get_raw_backtrace_slot: index out of bounds")}
|
||
function caml_hexstring_of_float(x,prec,style)
|
||
{if(! isFinite(x))
|
||
{if(isNaN(x))return caml_string_of_jsstring("nan");
|
||
return caml_string_of_jsstring(x > 0?"infinity":"-infinity")}
|
||
var sign=x == 0 && 1 / x == - Infinity?1:x >= 0?0:1;
|
||
if(sign)x = - x;
|
||
var exp=0;
|
||
if(x == 0)
|
||
;
|
||
else
|
||
if(x < 1)
|
||
while(x < 1 && exp > - 1022){x *= 2;exp--}
|
||
else
|
||
while(x >= 2){x /= 2;exp++}
|
||
var exp_sign=exp < 0?"":"+",sign_str="";
|
||
if(sign)
|
||
sign_str = "-";
|
||
else
|
||
switch(style)
|
||
{case 43:sign_str = "+";break;
|
||
case 32:sign_str = " ";break;
|
||
default:break}
|
||
if(prec >= 0 && prec < 13)
|
||
{var cst=Math.pow(2,prec * 4);x = Math.round(x * cst) / cst}
|
||
var x_str=x.toString(16);
|
||
if(prec >= 0)
|
||
{var idx=x_str.indexOf(".");
|
||
if(idx < 0)
|
||
x_str += "." + caml_str_repeat(prec,"0");
|
||
else
|
||
{var size=idx + 1 + prec;
|
||
if(x_str.length < size)
|
||
x_str += caml_str_repeat(size - x_str.length,"0");
|
||
else
|
||
x_str = x_str.substr(0,size)}}
|
||
return caml_string_of_jsstring
|
||
(sign_str + "0x" + x_str + "p" + exp_sign + exp.toString(10))}
|
||
function caml_js_wrap_meth_callback_strict(arity,f)
|
||
{return function()
|
||
{var args=new Array(arity + 1),len=Math.min(arguments.length,arity);
|
||
args[0] = this;
|
||
for(var i=0;i < len;i++)args[i + 1] = arguments[i];
|
||
return caml_call_gen(f,args)}}
|
||
function caml_backtrace_status(){return 0}
|
||
function caml_install_signal_handler(){return 0}
|
||
function caml_sys_argv(a){return caml_argv}
|
||
function caml_ba_fill(ba,v){ba.fill(v);return 0}
|
||
function caml_modf_float(x)
|
||
{if(isFinite(x))
|
||
{var neg=1 / x < 0;
|
||
x = Math.abs(x);
|
||
var i=Math.floor(x),f=x - i;
|
||
if(neg){i = - i;f = - f}
|
||
return [0,f,i]}
|
||
if(isNaN(x))return [0,NaN,NaN];
|
||
return [0,1 / x,x]}
|
||
function caml_gc_get(){return [0,0,0,0,0,0,0,0,0]}
|
||
function caml_float_compare(x,y)
|
||
{if(x === y)return 0;
|
||
if(x < y)return - 1;
|
||
if(x > y)return 1;
|
||
if(x === x)return 1;
|
||
if(y === y)return - 1;
|
||
return 0}
|
||
function caml_string_set32(s,i,i32){return caml_bytes_set32(s,i,i32)}
|
||
function caml_parse_engine(tables,env,cmd,arg)
|
||
{var
|
||
ERRCODE=256,
|
||
loop=6,
|
||
testshift=7,
|
||
shift=8,
|
||
shift_recover=9,
|
||
reduce=10,
|
||
READ_TOKEN=0,
|
||
RAISE_PARSE_ERROR=1,
|
||
GROW_STACKS_1=2,
|
||
GROW_STACKS_2=3,
|
||
COMPUTE_SEMANTIC_ACTION=4,
|
||
CALL_ERROR_FUNCTION=5,
|
||
env_s_stack=1,
|
||
env_v_stack=2,
|
||
env_symb_start_stack=3,
|
||
env_symb_end_stack=4,
|
||
env_stacksize=5,
|
||
env_stackbase=6,
|
||
env_curr_char=7,
|
||
env_lval=8,
|
||
env_symb_start=9,
|
||
env_symb_end=10,
|
||
env_asp=11,
|
||
env_rule_len=12,
|
||
env_rule_number=13,
|
||
env_sp=14,
|
||
env_state=15,
|
||
env_errflag=16,
|
||
tbl_transl_const=2,
|
||
tbl_transl_block=3,
|
||
tbl_lhs=4,
|
||
tbl_len=5,
|
||
tbl_defred=6,
|
||
tbl_dgoto=7,
|
||
tbl_sindex=8,
|
||
tbl_rindex=9,
|
||
tbl_gindex=10,
|
||
tbl_tablesize=11,
|
||
tbl_table=12,
|
||
tbl_check=13;
|
||
if(! tables.dgoto)
|
||
{tables.defred = caml_lex_array(tables[tbl_defred]);
|
||
tables.sindex = caml_lex_array(tables[tbl_sindex]);
|
||
tables.check = caml_lex_array(tables[tbl_check]);
|
||
tables.rindex = caml_lex_array(tables[tbl_rindex]);
|
||
tables.table = caml_lex_array(tables[tbl_table]);
|
||
tables.len = caml_lex_array(tables[tbl_len]);
|
||
tables.lhs = caml_lex_array(tables[tbl_lhs]);
|
||
tables.gindex = caml_lex_array(tables[tbl_gindex]);
|
||
tables.dgoto = caml_lex_array(tables[tbl_dgoto])}
|
||
var
|
||
res=0,
|
||
n,
|
||
n1,
|
||
n2,
|
||
state1,
|
||
sp=env[env_sp],
|
||
state=env[env_state],
|
||
errflag=env[env_errflag];
|
||
exit:
|
||
for(;;)
|
||
switch(cmd)
|
||
{case 0:state = 0;errflag = 0;
|
||
case 6:
|
||
n = tables.defred[state];
|
||
if(n != 0){cmd = reduce;break}
|
||
if(env[env_curr_char] >= 0){cmd = testshift;break}
|
||
res = READ_TOKEN;
|
||
break exit;
|
||
case 1:
|
||
if(arg instanceof Array)
|
||
{env[env_curr_char] = tables[tbl_transl_block][arg[0] + 1];
|
||
env[env_lval] = arg[1]}
|
||
else
|
||
{env[env_curr_char] = tables[tbl_transl_const][arg + 1];
|
||
env[env_lval] = 0}
|
||
case 7:
|
||
n1 = tables.sindex[state];
|
||
n2 = n1 + env[env_curr_char];
|
||
if
|
||
(n1
|
||
!=
|
||
0
|
||
&&
|
||
n2
|
||
>=
|
||
0
|
||
&&
|
||
n2
|
||
<=
|
||
tables[tbl_tablesize]
|
||
&&
|
||
tables.check[n2]
|
||
==
|
||
env[env_curr_char])
|
||
{cmd = shift;break}
|
||
n1 = tables.rindex[state];
|
||
n2 = n1 + env[env_curr_char];
|
||
if
|
||
(n1
|
||
!=
|
||
0
|
||
&&
|
||
n2
|
||
>=
|
||
0
|
||
&&
|
||
n2
|
||
<=
|
||
tables[tbl_tablesize]
|
||
&&
|
||
tables.check[n2]
|
||
==
|
||
env[env_curr_char])
|
||
{n = tables.table[n2];cmd = reduce;break}
|
||
if(errflag <= 0){res = CALL_ERROR_FUNCTION;break exit}
|
||
case 5:
|
||
if(errflag < 3)
|
||
{errflag = 3;
|
||
for(;;)
|
||
{state1 = env[env_s_stack][sp + 1];
|
||
n1 = tables.sindex[state1];
|
||
n2 = n1 + ERRCODE;
|
||
if
|
||
(n1
|
||
!=
|
||
0
|
||
&&
|
||
n2
|
||
>=
|
||
0
|
||
&&
|
||
n2
|
||
<=
|
||
tables[tbl_tablesize]
|
||
&&
|
||
tables.check[n2]
|
||
==
|
||
ERRCODE)
|
||
{cmd = shift_recover;break}
|
||
else
|
||
{if(sp <= env[env_stackbase])return RAISE_PARSE_ERROR;sp--}}}
|
||
else
|
||
{if(env[env_curr_char] == 0)return RAISE_PARSE_ERROR;
|
||
env[env_curr_char] = - 1;
|
||
cmd = loop;
|
||
break}
|
||
case 8:env[env_curr_char] = - 1;if(errflag > 0)errflag--;
|
||
case 9:
|
||
state = tables.table[n2];
|
||
sp++;
|
||
if(sp >= env[env_stacksize]){res = GROW_STACKS_1;break exit}
|
||
case 2:
|
||
env[env_s_stack][sp + 1] = state;
|
||
env[env_v_stack][sp + 1] = env[env_lval];
|
||
env[env_symb_start_stack][sp + 1] = env[env_symb_start];
|
||
env[env_symb_end_stack][sp + 1] = env[env_symb_end];
|
||
cmd = loop;
|
||
break;
|
||
case 10:
|
||
var m=tables.len[n];
|
||
env[env_asp] = sp;
|
||
env[env_rule_number] = n;
|
||
env[env_rule_len] = m;
|
||
sp = sp - m + 1;
|
||
m = tables.lhs[n];
|
||
state1 = env[env_s_stack][sp];
|
||
n1 = tables.gindex[m];
|
||
n2 = n1 + state1;
|
||
if
|
||
(n1
|
||
!=
|
||
0
|
||
&&
|
||
n2
|
||
>=
|
||
0
|
||
&&
|
||
n2
|
||
<=
|
||
tables[tbl_tablesize]
|
||
&&
|
||
tables.check[n2]
|
||
==
|
||
state1)
|
||
state = tables.table[n2];
|
||
else
|
||
state = tables.dgoto[m];
|
||
if(sp >= env[env_stacksize]){res = GROW_STACKS_2;break exit}
|
||
case 3:res = COMPUTE_SEMANTIC_ACTION;break exit;
|
||
case 4:
|
||
env[env_s_stack][sp + 1] = state;
|
||
env[env_v_stack][sp + 1] = arg;
|
||
var asp=env[env_asp];
|
||
env[env_symb_end_stack][sp + 1] = env[env_symb_end_stack][asp + 1];
|
||
if(sp > asp)
|
||
env[env_symb_start_stack][sp + 1]
|
||
=
|
||
env[env_symb_end_stack][asp + 1];
|
||
cmd = loop;
|
||
break;
|
||
default:return RAISE_PARSE_ERROR}
|
||
env[env_sp] = sp;
|
||
env[env_state] = state;
|
||
env[env_errflag] = errflag;
|
||
return res}
|
||
function caml_array_fill(array,ofs,len,v)
|
||
{for(var i=0;i < len;i++)array[ofs + i + 1] = v;return 0}
|
||
function caml_string_notequal(s1,s2){return 1 - caml_string_equal(s1,s2)}
|
||
function caml_bytes_greaterthan(s1,s2){return caml_bytes_lessthan(s2,s1)}
|
||
function caml_gr_make_image(arr)
|
||
{var
|
||
s=caml_gr_state_get(),
|
||
h=arr.length - 1,
|
||
w=arr[1].length - 1,
|
||
im=s.context.createImageData(w,h);
|
||
for(var i=0;i < h;i++)
|
||
for(var j=0;j < w;j++)
|
||
{var c=arr[i + 1][j + 1],o=i * (w * 4) + j * 4;
|
||
if(c == - 1)
|
||
{im.data[o + 0] = 0;
|
||
im.data[o + 1] = 0;
|
||
im.data[o + 2] = 0;
|
||
im.data[o + 3] = 0}
|
||
else
|
||
{im.data[o + 0] = c >> 16 & 0xff;
|
||
im.data[o + 1] = c >> 8 & 0xff;
|
||
im.data[o + 2] = c >> 0 & 0Xff;
|
||
im.data[o + 3] = 0xff}}
|
||
return im}
|
||
function caml_ml_set_channel_output(chanid,f)
|
||
{var chan=caml_ml_channels[chanid];
|
||
caml_global_data.fds[chan.fd].output = f;
|
||
return 0}
|
||
function caml_read_file_content(name)
|
||
{var root=resolve_fs_device(name);
|
||
if(root.device.exists(root.rest))
|
||
{var
|
||
file=root.device.open(root.rest,{rdonly:1}),
|
||
len=file.length(),
|
||
buf=caml_create_bytes(len);
|
||
file.read(0,buf,0,len);
|
||
return caml_string_of_bytes(buf)}
|
||
caml_raise_no_such_file(name)}
|
||
function caml_js_to_float(x){return x}
|
||
joo_global_object.jsoo_runtime
|
||
=
|
||
{caml_ephe_check_data:caml_ephe_check_data,
|
||
caml_ephe_unset_data:caml_ephe_unset_data,
|
||
caml_ephe_set_data:caml_ephe_set_data,
|
||
caml_ephe_get_data_copy:caml_ephe_get_data_copy,
|
||
caml_ephe_get_data:caml_ephe_get_data,
|
||
caml_ephe_blit_data:caml_ephe_blit_data,
|
||
caml_ephe_unset_key:caml_ephe_unset_key,
|
||
caml_ephe_set_key:caml_ephe_set_key,
|
||
caml_ephe_check_key:caml_ephe_check_key,
|
||
caml_ephe_get_key_copy:caml_ephe_get_key_copy,
|
||
caml_ephe_get_key:caml_ephe_get_key,
|
||
caml_ephe_blit_key:caml_ephe_blit_key,
|
||
caml_ephe_create:caml_ephe_create,
|
||
caml_weak_blit:caml_weak_blit,
|
||
caml_weak_check:caml_weak_check,
|
||
caml_weak_get_copy:caml_weak_get_copy,
|
||
caml_weak_get:caml_weak_get,
|
||
caml_weak_set:caml_weak_set,
|
||
caml_weak_create:caml_weak_create,
|
||
caml_ephe_data_offset:caml_ephe_data_offset,
|
||
caml_ephe_key_offset:caml_ephe_key_offset,
|
||
unix_isatty:unix_isatty,
|
||
win_handle_fd:win_handle_fd,
|
||
win_cleanup:win_cleanup,
|
||
win_startup:win_startup,
|
||
unix_mktime:unix_mktime,
|
||
unix_localtime:unix_localtime,
|
||
unix_gmtime:unix_gmtime,
|
||
unix_time:unix_time,
|
||
unix_gettimeofday:unix_gettimeofday,
|
||
re_replacement_text:re_replacement_text,
|
||
re_partial_match:re_partial_match,
|
||
re_string_match:re_string_match,
|
||
re_search_backward:re_search_backward,
|
||
re_search_forward:re_search_forward,
|
||
re_match:re_match,
|
||
caml_spacetime_only_works_for_native_code:
|
||
caml_spacetime_only_works_for_native_code,
|
||
caml_register_channel_for_spacetime:caml_register_channel_for_spacetime,
|
||
caml_spacetime_enabled:caml_spacetime_enabled,
|
||
caml_ml_runtime_warnings_enabled:caml_ml_runtime_warnings_enabled,
|
||
caml_ml_enable_runtime_warnings:caml_ml_enable_runtime_warnings,
|
||
caml_runtime_warnings:caml_runtime_warnings,
|
||
unix_inet_addr_of_string:unix_inet_addr_of_string,
|
||
caml_install_signal_handler:caml_install_signal_handler,
|
||
caml_runtime_parameters:caml_runtime_parameters,
|
||
caml_runtime_variant:caml_runtime_variant,
|
||
caml_sys_isatty:caml_sys_isatty,
|
||
caml_sys_get_config:caml_sys_get_config,
|
||
caml_sys_const_backend_type:caml_sys_const_backend_type,
|
||
caml_sys_const_ostype_cygwin:caml_sys_const_ostype_cygwin,
|
||
caml_sys_const_ostype_win32:caml_sys_const_ostype_win32,
|
||
caml_sys_const_ostype_unix:caml_sys_const_ostype_unix,
|
||
caml_sys_const_max_wosize:caml_sys_const_max_wosize,
|
||
caml_sys_const_int_size:caml_sys_const_int_size,
|
||
caml_sys_const_word_size:caml_sys_const_word_size,
|
||
caml_sys_const_big_endian:caml_sys_const_big_endian,
|
||
caml_sys_random_seed:caml_sys_random_seed,
|
||
caml_sys_time:caml_sys_time,
|
||
caml_sys_system_command:caml_sys_system_command,
|
||
caml_sys_executable_name:caml_sys_executable_name,
|
||
caml_sys_modify_argv:caml_sys_modify_argv,
|
||
caml_sys_argv:caml_sys_argv,
|
||
caml_sys_get_argv:caml_sys_get_argv,
|
||
caml_executable_name:caml_executable_name,
|
||
caml_argv:caml_argv,
|
||
caml_sys_getenv:caml_sys_getenv,
|
||
caml_set_static_env:caml_set_static_env,
|
||
caml_sys_exit:caml_sys_exit,
|
||
caml_raise_sys_error:caml_raise_sys_error,
|
||
caml_is_printable:caml_is_printable,
|
||
caml_get_global_data:caml_get_global_data,
|
||
caml_register_global:caml_register_global,
|
||
caml_global_data:caml_global_data,
|
||
caml_named_value:caml_named_value,
|
||
caml_register_named_value:caml_register_named_value,
|
||
caml_named_values:caml_named_values,
|
||
caml_call_gen:caml_call_gen,
|
||
caml_set_parser_trace:caml_set_parser_trace,
|
||
caml_parse_engine:caml_parse_engine,
|
||
caml_fresh_oo_id:caml_fresh_oo_id,
|
||
caml_set_oo_id:caml_set_oo_id,
|
||
caml_oo_last_id:caml_oo_last_id,
|
||
caml_get_public_method:caml_get_public_method,
|
||
caml_lazy_make_forward:caml_lazy_make_forward,
|
||
caml_obj_make_forward:caml_obj_make_forward,
|
||
caml_obj_truncate:caml_obj_truncate,
|
||
caml_obj_dup:caml_obj_dup,
|
||
caml_obj_with_tag:caml_obj_with_tag,
|
||
caml_obj_block:caml_obj_block,
|
||
caml_obj_set_tag:caml_obj_set_tag,
|
||
caml_obj_tag:caml_obj_tag,
|
||
caml_obj_is_block:caml_obj_is_block,
|
||
caml_update_dummy:caml_update_dummy,
|
||
deserialize_nat:deserialize_nat,
|
||
serialize_nat:serialize_nat,
|
||
lxor_digit_nat:lxor_digit_nat,
|
||
lor_digit_nat:lor_digit_nat,
|
||
land_digit_nat:land_digit_nat,
|
||
compare_nat_real:compare_nat_real,
|
||
compare_nat:compare_nat,
|
||
compare_digits_nat:compare_digits_nat,
|
||
shift_right_nat:shift_right_nat,
|
||
div_nat:div_nat,
|
||
div_digit_nat:div_digit_nat,
|
||
div_helper:div_helper,
|
||
shift_left_nat:shift_left_nat,
|
||
square_nat:square_nat,
|
||
mult_nat:mult_nat,
|
||
mult_digit_nat:mult_digit_nat,
|
||
sub_nat:sub_nat,
|
||
decr_nat:decr_nat,
|
||
complement_nat:complement_nat,
|
||
add_nat:add_nat,
|
||
incr_nat:incr_nat,
|
||
is_digit_odd:is_digit_odd,
|
||
is_digit_zero:is_digit_zero,
|
||
is_digit_int:is_digit_int,
|
||
num_leading_zero_bits_in_digit:num_leading_zero_bits_in_digit,
|
||
num_digits_nat:num_digits_nat,
|
||
nth_digit_nat_native:nth_digit_nat_native,
|
||
set_digit_nat_native:set_digit_nat_native,
|
||
nth_digit_nat:nth_digit_nat,
|
||
set_digit_nat:set_digit_nat,
|
||
blit_nat:blit_nat,
|
||
set_to_zero_nat:set_to_zero_nat,
|
||
create_nat:create_nat,
|
||
nat_of_array:nat_of_array,
|
||
caml_hash_nat:caml_hash_nat,
|
||
MlNat:MlNat,
|
||
initialize_nat:initialize_nat,
|
||
caml_js_to_string:caml_js_to_string,
|
||
caml_to_js_string:caml_to_js_string,
|
||
caml_js_from_string:caml_js_from_string,
|
||
caml_new_string:caml_new_string,
|
||
caml_js_to_byte_string:caml_js_to_byte_string,
|
||
caml_is_ml_string:caml_is_ml_string,
|
||
caml_is_ml_bytes:caml_is_ml_bytes,
|
||
caml_string_of_jsstring:caml_string_of_jsstring,
|
||
caml_jsstring_of_string:caml_jsstring_of_string,
|
||
caml_jsbytes_of_string:caml_jsbytes_of_string,
|
||
caml_string_of_jsbytes:caml_string_of_jsbytes,
|
||
caml_bytes_of_string:caml_bytes_of_string,
|
||
caml_string_of_bytes:caml_string_of_bytes,
|
||
caml_string_lessthan:caml_string_lessthan,
|
||
caml_string_lessequal:caml_string_lessequal,
|
||
caml_string_equal:caml_string_equal,
|
||
caml_string_compare:caml_string_compare,
|
||
caml_ml_string_length:caml_ml_string_length,
|
||
caml_string_unsafe_set:caml_string_unsafe_set,
|
||
caml_string_unsafe_get:caml_string_unsafe_get,
|
||
caml_bytes_of_jsbytes:caml_bytes_of_jsbytes,
|
||
caml_ml_bytes_length:caml_ml_bytes_length,
|
||
caml_blit_string:caml_blit_string,
|
||
caml_blit_bytes:caml_blit_bytes,
|
||
caml_fill_string:caml_fill_string,
|
||
caml_fill_bytes:caml_fill_bytes,
|
||
caml_bytes_greaterthan:caml_bytes_greaterthan,
|
||
caml_string_greaterthan:caml_string_greaterthan,
|
||
caml_bytes_greaterequal:caml_bytes_greaterequal,
|
||
caml_string_greaterequal:caml_string_greaterequal,
|
||
caml_bytes_lessthan:caml_bytes_lessthan,
|
||
caml_bytes_lessequal:caml_bytes_lessequal,
|
||
caml_bytes_notequal:caml_bytes_notequal,
|
||
caml_string_notequal:caml_string_notequal,
|
||
caml_bytes_equal:caml_bytes_equal,
|
||
caml_bytes_compare:caml_bytes_compare,
|
||
caml_bytes_of_array:caml_bytes_of_array,
|
||
caml_string_of_array:caml_string_of_array,
|
||
caml_create_bytes:caml_create_bytes,
|
||
caml_create_string:caml_create_string,
|
||
caml_array_of_string:caml_array_of_string,
|
||
caml_array_of_bytes:caml_array_of_bytes,
|
||
caml_convert_bytes_to_array:caml_convert_bytes_to_array,
|
||
caml_convert_string_to_bytes:caml_convert_string_to_bytes,
|
||
MlBytes:MlBytes,
|
||
caml_bytes_of_utf16_jsstring:caml_bytes_of_utf16_jsstring,
|
||
caml_bytes_set:caml_bytes_set,
|
||
caml_string_set64:caml_string_set64,
|
||
caml_bytes_set64:caml_bytes_set64,
|
||
caml_string_set32:caml_string_set32,
|
||
caml_bytes_set32:caml_bytes_set32,
|
||
caml_string_set16:caml_string_set16,
|
||
caml_bytes_set16:caml_bytes_set16,
|
||
caml_string_set:caml_string_set,
|
||
caml_bytes_get:caml_bytes_get,
|
||
caml_bytes_get64:caml_bytes_get64,
|
||
caml_string_get64:caml_string_get64,
|
||
caml_bytes_get32:caml_bytes_get32,
|
||
caml_string_get32:caml_string_get32,
|
||
caml_bytes_get16:caml_bytes_get16,
|
||
caml_string_get16:caml_string_get16,
|
||
caml_string_get:caml_string_get,
|
||
caml_bytes_bound_error:caml_bytes_bound_error,
|
||
caml_string_bound_error:caml_string_bound_error,
|
||
caml_bytes_unsafe_set:caml_bytes_unsafe_set,
|
||
caml_bytes_unsafe_get:caml_bytes_unsafe_get,
|
||
jsoo_is_ascii:jsoo_is_ascii,
|
||
caml_utf16_of_utf8:caml_utf16_of_utf8,
|
||
caml_utf8_of_utf16:caml_utf8_of_utf16,
|
||
caml_subarray_to_jsbytes:caml_subarray_to_jsbytes,
|
||
caml_str_repeat:caml_str_repeat,
|
||
caml_md5_bytes:caml_md5_bytes,
|
||
caml_md5_string:caml_md5_string,
|
||
caml_md5_chan:caml_md5_chan,
|
||
caml_output_value_to_buffer:caml_output_value_to_buffer,
|
||
caml_output_value_to_bytes:caml_output_value_to_bytes,
|
||
caml_output_value_to_string:caml_output_value_to_string,
|
||
caml_output_val:caml_output_val,
|
||
caml_legacy_custom_code:caml_legacy_custom_code,
|
||
MlObjectTable:MlObjectTable,
|
||
caml_marshal_data_size:caml_marshal_data_size,
|
||
caml_input_value_from_reader:caml_input_value_from_reader,
|
||
caml_custom_ops:caml_custom_ops,
|
||
caml_nativeint_unmarshal:caml_nativeint_unmarshal,
|
||
caml_int32_unmarshal:caml_int32_unmarshal,
|
||
caml_int64_marshal:caml_int64_marshal,
|
||
caml_int64_unmarshal:caml_int64_unmarshal,
|
||
caml_input_value_from_bytes:caml_input_value_from_bytes,
|
||
caml_input_value_from_string:caml_input_value_from_string,
|
||
caml_float_of_bytes:caml_float_of_bytes,
|
||
BigStringReader:BigStringReader,
|
||
MlStringReader:MlStringReader,
|
||
caml_marshal_constants:caml_marshal_constants,
|
||
caml_new_lex_engine:caml_new_lex_engine,
|
||
caml_lex_engine:caml_lex_engine,
|
||
caml_lex_array:caml_lex_array,
|
||
caml_js_export_var:caml_js_export_var,
|
||
caml_js_object:caml_js_object,
|
||
caml_pure_js_expr:caml_pure_js_expr,
|
||
caml_js_expr:caml_js_expr,
|
||
caml_js_eval_string:caml_js_eval_string,
|
||
caml_js_equals:caml_js_equals,
|
||
caml_js_wrap_meth_callback_unsafe:caml_js_wrap_meth_callback_unsafe,
|
||
caml_js_wrap_meth_callback_strict:caml_js_wrap_meth_callback_strict,
|
||
caml_js_wrap_meth_callback_arguments:caml_js_wrap_meth_callback_arguments,
|
||
caml_js_wrap_meth_callback:caml_js_wrap_meth_callback,
|
||
caml_js_wrap_callback_strict:caml_js_wrap_callback_strict,
|
||
caml_js_wrap_callback_arguments:caml_js_wrap_callback_arguments,
|
||
caml_js_wrap_callback:caml_js_wrap_callback,
|
||
caml_ojs_new_arr:caml_ojs_new_arr,
|
||
caml_js_new:caml_js_new,
|
||
caml_js_meth_call:caml_js_meth_call,
|
||
caml_js_fun_call:caml_js_fun_call,
|
||
caml_js_call:caml_js_call,
|
||
caml_js_var:caml_js_var,
|
||
caml_list_to_js_array:caml_list_to_js_array,
|
||
caml_list_of_js_array:caml_list_of_js_array,
|
||
caml_js_to_array:caml_js_to_array,
|
||
caml_js_from_array:caml_js_from_array,
|
||
caml_js_to_float:caml_js_to_float,
|
||
caml_js_from_float:caml_js_from_float,
|
||
caml_js_to_bool:caml_js_to_bool,
|
||
caml_js_from_bool:caml_js_from_bool,
|
||
caml_js_error_of_exception:caml_js_error_of_exception,
|
||
caml_exn_with_js_backtrace:caml_exn_with_js_backtrace,
|
||
caml_wrap_exception:caml_wrap_exception,
|
||
caml_is_js:caml_is_js,
|
||
js_print_stderr:js_print_stderr,
|
||
js_print_stdout:js_print_stdout,
|
||
caml_trampoline_return:caml_trampoline_return,
|
||
caml_trampoline:caml_trampoline,
|
||
caml_js_get_console:caml_js_get_console,
|
||
caml_js_html_entities:caml_js_html_entities,
|
||
caml_js_html_escape:caml_js_html_escape,
|
||
caml_js_on_ie:caml_js_on_ie,
|
||
caml_js_typeof:caml_js_typeof,
|
||
caml_js_instanceof:caml_js_instanceof,
|
||
caml_js_delete:caml_js_delete,
|
||
caml_js_get:caml_js_get,
|
||
caml_js_set:caml_js_set,
|
||
caml_js_pure_expr:caml_js_pure_expr,
|
||
caml_ml_output_int:caml_ml_output_int,
|
||
caml_ml_pos_out_64:caml_ml_pos_out_64,
|
||
caml_ml_pos_out:caml_ml_pos_out,
|
||
caml_ml_seek_out_64:caml_ml_seek_out_64,
|
||
caml_ml_seek_out:caml_ml_seek_out,
|
||
caml_output_value:caml_output_value,
|
||
caml_ml_output_char:caml_ml_output_char,
|
||
caml_ml_output:caml_ml_output,
|
||
caml_ml_output_bytes:caml_ml_output_bytes,
|
||
caml_ml_flush:caml_ml_flush,
|
||
caml_ml_input_scan_line:caml_ml_input_scan_line,
|
||
caml_ml_pos_in_64:caml_ml_pos_in_64,
|
||
caml_ml_pos_in:caml_ml_pos_in,
|
||
caml_ml_seek_in_64:caml_ml_seek_in_64,
|
||
caml_ml_seek_in:caml_ml_seek_in,
|
||
caml_ml_input_int:caml_ml_input_int,
|
||
caml_ml_input_char:caml_ml_input_char,
|
||
caml_input_value:caml_input_value,
|
||
caml_ml_input:caml_ml_input,
|
||
caml_ml_may_refill_input:caml_ml_may_refill_input,
|
||
caml_ml_refill_input:caml_ml_refill_input,
|
||
caml_ml_set_channel_refill:caml_ml_set_channel_refill,
|
||
caml_ml_set_channel_output:caml_ml_set_channel_output,
|
||
caml_ml_channel_size_64:caml_ml_channel_size_64,
|
||
caml_ml_channel_size:caml_ml_channel_size,
|
||
caml_ml_close_channel:caml_ml_close_channel,
|
||
caml_ml_set_binary_mode:caml_ml_set_binary_mode,
|
||
caml_ml_open_descriptor_in:caml_ml_open_descriptor_in,
|
||
caml_ml_open_descriptor_out:caml_ml_open_descriptor_out,
|
||
caml_ml_out_channels_list:caml_ml_out_channels_list,
|
||
caml_ml_channels:caml_ml_channels,
|
||
caml_ml_set_channel_name:caml_ml_set_channel_name,
|
||
caml_sys_open:caml_sys_open,
|
||
caml_std_output:caml_std_output,
|
||
caml_sys_close:caml_sys_close,
|
||
caml_int64_bswap:caml_int64_bswap,
|
||
caml_int32_bswap:caml_int32_bswap,
|
||
caml_bswap16:caml_bswap16,
|
||
caml_mod:caml_mod,
|
||
caml_div:caml_div,
|
||
caml_mul:caml_mul,
|
||
caml_int_of_string:caml_int_of_string,
|
||
caml_parse_digit:caml_parse_digit,
|
||
caml_parse_sign_and_base:caml_parse_sign_and_base,
|
||
caml_format_int:caml_format_int,
|
||
caml_CamlinternalMod_update_mod:caml_CamlinternalMod_update_mod,
|
||
caml_CamlinternalMod_init_mod:caml_CamlinternalMod_init_mod,
|
||
caml_int64_hash:caml_int64_hash,
|
||
caml_int64_to_bytes:caml_int64_to_bytes,
|
||
caml_int64_of_bytes:caml_int64_of_bytes,
|
||
caml_int64_hi32:caml_int64_hi32,
|
||
caml_int64_lo32:caml_int64_lo32,
|
||
caml_int64_create_lo_hi:caml_int64_create_lo_hi,
|
||
caml_int64_create_lo_mi_hi:caml_int64_create_lo_mi_hi,
|
||
caml_int64_of_string:caml_int64_of_string,
|
||
caml_int64_format:caml_int64_format,
|
||
caml_int64_of_float:caml_int64_of_float,
|
||
caml_int64_to_float:caml_int64_to_float,
|
||
caml_int64_to_int32:caml_int64_to_int32,
|
||
caml_int64_of_int32:caml_int64_of_int32,
|
||
caml_int64_mod:caml_int64_mod,
|
||
caml_int64_div:caml_int64_div,
|
||
caml_int64_shift_right:caml_int64_shift_right,
|
||
caml_int64_shift_right_unsigned:caml_int64_shift_right_unsigned,
|
||
caml_int64_shift_left:caml_int64_shift_left,
|
||
caml_int64_xor:caml_int64_xor,
|
||
caml_int64_or:caml_int64_or,
|
||
caml_int64_and:caml_int64_and,
|
||
caml_int64_is_negative:caml_int64_is_negative,
|
||
caml_int64_is_zero:caml_int64_is_zero,
|
||
caml_int64_mul:caml_int64_mul,
|
||
caml_int64_sub:caml_int64_sub,
|
||
caml_int64_add:caml_int64_add,
|
||
caml_int64_neg:caml_int64_neg,
|
||
caml_int64_compare:caml_int64_compare,
|
||
caml_int64_ult:caml_int64_ult,
|
||
MlInt64:MlInt64,
|
||
caml_int64_offset:caml_int64_offset,
|
||
caml_float_of_string:caml_float_of_string,
|
||
caml_format_float:caml_format_float,
|
||
caml_round_float:caml_round_float,
|
||
caml_tanh_float:caml_tanh_float,
|
||
caml_sinh_float:caml_sinh_float,
|
||
caml_cosh_float:caml_cosh_float,
|
||
caml_log10_float:caml_log10_float,
|
||
caml_hypot_float:caml_hypot_float,
|
||
caml_log1p_float:caml_log1p_float,
|
||
caml_expm1_float:caml_expm1_float,
|
||
caml_signbit_float:caml_signbit_float,
|
||
caml_copysign_float:caml_copysign_float,
|
||
caml_float_compare:caml_float_compare,
|
||
caml_frexp_float:caml_frexp_float,
|
||
caml_ldexp_float:caml_ldexp_float,
|
||
caml_modf_float:caml_modf_float,
|
||
caml_classify_float:caml_classify_float,
|
||
caml_int32_float_of_bits:caml_int32_float_of_bits,
|
||
caml_trunc_float:caml_trunc_float,
|
||
caml_nextafter_float:caml_nextafter_float,
|
||
caml_int64_float_of_bits:caml_int64_float_of_bits,
|
||
caml_hexstring_of_float:caml_hexstring_of_float,
|
||
caml_int32_bits_of_float:caml_int32_bits_of_float,
|
||
caml_int64_bits_of_float:caml_int64_bits_of_float,
|
||
jsoo_floor_log2:jsoo_floor_log2,
|
||
caml_hash:caml_hash,
|
||
caml_hash_mix_string:caml_hash_mix_string,
|
||
caml_hash_mix_bytes:caml_hash_mix_bytes,
|
||
caml_hash_mix_bytes_arr:caml_hash_mix_bytes_arr,
|
||
caml_hash_mix_jsbytes:caml_hash_mix_jsbytes,
|
||
caml_hash_mix_int64:caml_hash_mix_int64,
|
||
caml_hash_mix_float:caml_hash_mix_float,
|
||
caml_hash_mix_final:caml_hash_mix_final,
|
||
caml_hash_mix_int:caml_hash_mix_int,
|
||
caml_hash_univ_param:caml_hash_univ_param,
|
||
caml_gr_close_subwindow:caml_gr_close_subwindow,
|
||
caml_gr_open_subwindow:caml_gr_open_subwindow,
|
||
caml_gr_window_id:caml_gr_window_id,
|
||
caml_gr_display_mode:caml_gr_display_mode,
|
||
caml_gr_remember_mode:caml_gr_remember_mode,
|
||
caml_gr_synchronize:caml_gr_synchronize,
|
||
caml_gr_wait_event:caml_gr_wait_event,
|
||
caml_gr_sigio_signal:caml_gr_sigio_signal,
|
||
caml_gr_sigio_handler:caml_gr_sigio_handler,
|
||
caml_gr_blit_image:caml_gr_blit_image,
|
||
caml_gr_create_image:caml_gr_create_image,
|
||
caml_gr_draw_image:caml_gr_draw_image,
|
||
caml_gr_dump_image:caml_gr_dump_image,
|
||
caml_gr_make_image:caml_gr_make_image,
|
||
caml_gr_text_size:caml_gr_text_size,
|
||
caml_gr_set_text_size:caml_gr_set_text_size,
|
||
caml_gr_set_font:caml_gr_set_font,
|
||
caml_gr_draw_string:caml_gr_draw_string,
|
||
caml_gr_draw_char:caml_gr_draw_char,
|
||
caml_gr_draw_str:caml_gr_draw_str,
|
||
caml_gr_fill_arc:caml_gr_fill_arc,
|
||
caml_gr_fill_poly:caml_gr_fill_poly,
|
||
caml_gr_fill_rect:caml_gr_fill_rect,
|
||
caml_gr_set_line_width:caml_gr_set_line_width,
|
||
caml_gr_draw_arc:caml_gr_draw_arc,
|
||
caml_gr_arc_aux:caml_gr_arc_aux,
|
||
caml_gr_draw_rect:caml_gr_draw_rect,
|
||
caml_gr_lineto:caml_gr_lineto,
|
||
caml_gr_current_y:caml_gr_current_y,
|
||
caml_gr_current_x:caml_gr_current_x,
|
||
caml_gr_moveto:caml_gr_moveto,
|
||
caml_gr_point_color:caml_gr_point_color,
|
||
caml_gr_plot:caml_gr_plot,
|
||
caml_gr_set_color:caml_gr_set_color,
|
||
caml_gr_size_y:caml_gr_size_y,
|
||
caml_gr_size_x:caml_gr_size_x,
|
||
caml_gr_clear_graph:caml_gr_clear_graph,
|
||
caml_gr_resize_window:caml_gr_resize_window,
|
||
caml_gr_set_window_title:caml_gr_set_window_title,
|
||
caml_gr_close_graph:caml_gr_close_graph,
|
||
caml_gr_doc_of_state:caml_gr_doc_of_state,
|
||
caml_gr_state_create:caml_gr_state_create,
|
||
caml_gr_state_init:caml_gr_state_init,
|
||
caml_gr_open_graph:caml_gr_open_graph,
|
||
caml_gr_state_set:caml_gr_state_set,
|
||
caml_gr_state_get:caml_gr_state_get,
|
||
caml_gr_state:caml_gr_state,
|
||
caml_final_release:caml_final_release,
|
||
caml_final_register_called_without_value:
|
||
caml_final_register_called_without_value,
|
||
caml_final_register:caml_final_register,
|
||
caml_memprof_set:caml_memprof_set,
|
||
caml_gc_get:caml_gc_get,
|
||
caml_gc_set:caml_gc_set,
|
||
caml_gc_stat:caml_gc_stat,
|
||
caml_gc_quick_stat:caml_gc_quick_stat,
|
||
caml_gc_counters:caml_gc_counters,
|
||
caml_gc_compaction:caml_gc_compaction,
|
||
caml_gc_full_major:caml_gc_full_major,
|
||
caml_gc_major:caml_gc_major,
|
||
caml_gc_minor:caml_gc_minor,
|
||
MlNodeFile:MlNodeFile,
|
||
MlNodeDevice:MlNodeDevice,
|
||
fs_node_supported:fs_node_supported,
|
||
MlFakeFile:MlFakeFile,
|
||
MlFakeDevice:MlFakeDevice,
|
||
caml_read_file_content:caml_read_file_content,
|
||
caml_create_file:caml_create_file,
|
||
caml_fs_init:caml_fs_init,
|
||
caml_create_file_extern:caml_create_file_extern,
|
||
caml_ba_map_file_bytecode:caml_ba_map_file_bytecode,
|
||
caml_ba_map_file:caml_ba_map_file,
|
||
caml_sys_rename:caml_sys_rename,
|
||
caml_sys_is_directory:caml_sys_is_directory,
|
||
caml_sys_remove:caml_sys_remove,
|
||
caml_sys_read_directory:caml_sys_read_directory,
|
||
caml_sys_file_exists:caml_sys_file_exists,
|
||
caml_raise_not_a_dir:caml_raise_not_a_dir,
|
||
caml_raise_no_such_file:caml_raise_no_such_file,
|
||
caml_sys_chdir:caml_sys_chdir,
|
||
caml_sys_getcwd:caml_sys_getcwd,
|
||
caml_unmount:caml_unmount,
|
||
caml_mount_autoload:caml_mount_autoload,
|
||
resolve_fs_device:resolve_fs_device,
|
||
caml_list_mount_point:caml_list_mount_point,
|
||
jsoo_mount_point:jsoo_mount_point,
|
||
caml_make_path:caml_make_path,
|
||
MlFile:MlFile,
|
||
caml_root:caml_root,
|
||
caml_current_dir:caml_current_dir,
|
||
caml_finish_formatting:caml_finish_formatting,
|
||
caml_parse_format:caml_parse_format,
|
||
caml_array_bound_error:caml_array_bound_error,
|
||
caml_raise_not_found:caml_raise_not_found,
|
||
caml_raise_zero_divide:caml_raise_zero_divide,
|
||
caml_raise_end_of_file:caml_raise_end_of_file,
|
||
caml_invalid_argument:caml_invalid_argument,
|
||
caml_failwith:caml_failwith,
|
||
caml_raise_with_string:caml_raise_with_string,
|
||
caml_raise_with_arg:caml_raise_with_arg,
|
||
caml_return_exn_constant:caml_return_exn_constant,
|
||
caml_raise_constant:caml_raise_constant,
|
||
caml_lessthan:caml_lessthan,
|
||
caml_lessequal:caml_lessequal,
|
||
caml_greaterthan:caml_greaterthan,
|
||
caml_greaterequal:caml_greaterequal,
|
||
caml_notequal:caml_notequal,
|
||
caml_equal:caml_equal,
|
||
caml_int_compare:caml_int_compare,
|
||
caml_compare:caml_compare,
|
||
caml_compare_val:caml_compare_val,
|
||
caml_compare_val_number_custom:caml_compare_val_number_custom,
|
||
caml_compare_val_get_custom:caml_compare_val_get_custom,
|
||
caml_compare_val_tag:caml_compare_val_tag,
|
||
caml_blit_string_to_bigstring:caml_blit_string_to_bigstring,
|
||
caml_blit_bigstring_to_string:caml_blit_bigstring_to_string,
|
||
caml_blit_bigstring_to_bigstring:caml_blit_bigstring_to_bigstring,
|
||
caml_bigstring_blit_ba_to_bytes:caml_bigstring_blit_ba_to_bytes,
|
||
caml_bigstring_blit_bytes_to_ba:caml_bigstring_blit_bytes_to_ba,
|
||
caml_bigstring_blit_string_to_ba:caml_bigstring_blit_string_to_ba,
|
||
caml_bigstring_blit_ba_to_ba:caml_bigstring_blit_ba_to_ba,
|
||
caml_bigstring_memcmp:caml_bigstring_memcmp,
|
||
bigstring_of_typed_array:bigstring_of_typed_array,
|
||
bigstring_of_array_buffer:bigstring_of_array_buffer,
|
||
bigstring_to_typed_array:bigstring_to_typed_array,
|
||
bigstring_to_array_buffer:bigstring_to_array_buffer,
|
||
caml_hash_mix_bigstring:caml_hash_mix_bigstring,
|
||
caml_ba_from_typed_array:caml_ba_from_typed_array,
|
||
caml_ba_kind_of_typed_array:caml_ba_kind_of_typed_array,
|
||
caml_ba_to_typed_array:caml_ba_to_typed_array,
|
||
caml_ba_hash:caml_ba_hash,
|
||
caml_ba_create_from:caml_ba_create_from,
|
||
caml_ba_deserialize:caml_ba_deserialize,
|
||
caml_ba_serialize:caml_ba_serialize,
|
||
caml_ba_reshape:caml_ba_reshape,
|
||
caml_ba_slice:caml_ba_slice,
|
||
caml_ba_sub:caml_ba_sub,
|
||
caml_ba_blit:caml_ba_blit,
|
||
caml_ba_fill:caml_ba_fill,
|
||
caml_ba_set_3:caml_ba_set_3,
|
||
caml_ba_set_2:caml_ba_set_2,
|
||
caml_ba_set_1:caml_ba_set_1,
|
||
caml_ba_uint8_set64:caml_ba_uint8_set64,
|
||
caml_ba_uint8_set32:caml_ba_uint8_set32,
|
||
caml_ba_uint8_set16:caml_ba_uint8_set16,
|
||
caml_ba_set_generic:caml_ba_set_generic,
|
||
caml_ba_get_3:caml_ba_get_3,
|
||
caml_ba_get_2:caml_ba_get_2,
|
||
caml_ba_get_1:caml_ba_get_1,
|
||
caml_ba_uint8_get64:caml_ba_uint8_get64,
|
||
caml_ba_uint8_get32:caml_ba_uint8_get32,
|
||
caml_ba_uint8_get16:caml_ba_uint8_get16,
|
||
caml_ba_get_generic:caml_ba_get_generic,
|
||
caml_ba_dim_3:caml_ba_dim_3,
|
||
caml_ba_dim_2:caml_ba_dim_2,
|
||
caml_ba_dim_1:caml_ba_dim_1,
|
||
caml_ba_dim:caml_ba_dim,
|
||
caml_ba_num_dims:caml_ba_num_dims,
|
||
caml_ba_layout:caml_ba_layout,
|
||
caml_ba_kind:caml_ba_kind,
|
||
caml_ba_change_layout:caml_ba_change_layout,
|
||
caml_ba_create:caml_ba_create,
|
||
caml_ba_create_unsafe:caml_ba_create_unsafe,
|
||
caml_ba_compare:caml_ba_compare,
|
||
Ml_Bigarray_c_1_1:Ml_Bigarray_c_1_1,
|
||
Ml_Bigarray:Ml_Bigarray,
|
||
caml_ba_create_buffer:caml_ba_create_buffer,
|
||
caml_ba_get_size_per_element:caml_ba_get_size_per_element,
|
||
caml_ba_get_size:caml_ba_get_size,
|
||
caml_ba_init:caml_ba_init,
|
||
caml_convert_raw_backtrace_slot:caml_convert_raw_backtrace_slot,
|
||
caml_get_current_callstack:caml_get_current_callstack,
|
||
caml_restore_raw_backtrace:caml_restore_raw_backtrace,
|
||
caml_raw_backtrace_slot:caml_raw_backtrace_slot,
|
||
caml_raw_backtrace_next_slot:caml_raw_backtrace_next_slot,
|
||
caml_raw_backtrace_length:caml_raw_backtrace_length,
|
||
caml_convert_raw_backtrace:caml_convert_raw_backtrace,
|
||
caml_record_backtrace:caml_record_backtrace,
|
||
caml_get_exception_raw_backtrace:caml_get_exception_raw_backtrace,
|
||
caml_get_exception_backtrace:caml_get_exception_backtrace,
|
||
caml_backtrace_status:caml_backtrace_status,
|
||
caml_floatarray_create:caml_floatarray_create,
|
||
caml_make_float_vect:caml_make_float_vect,
|
||
caml_make_vect:caml_make_vect,
|
||
caml_check_bound:caml_check_bound,
|
||
caml_array_fill:caml_array_fill,
|
||
caml_array_get:caml_array_get,
|
||
caml_array_set:caml_array_set,
|
||
caml_array_blit:caml_array_blit,
|
||
caml_array_concat:caml_array_concat,
|
||
caml_array_append:caml_array_append,
|
||
caml_array_sub:caml_array_sub};
|
||
caml_fs_init();
|
||
caml_register_global
|
||
(0,[248,caml_string_of_jsbytes("Out_of_memory"),0],"Out_of_memory");
|
||
caml_register_global
|
||
(1,[248,caml_string_of_jsbytes("Sys_error"),-1],"Sys_error");
|
||
caml_register_global
|
||
(2,[248,caml_string_of_jsbytes("Failure"),-2],"Failure");
|
||
caml_register_global
|
||
(3,
|
||
[248,caml_string_of_jsbytes("Invalid_argument"),-3],
|
||
"Invalid_argument");
|
||
caml_register_global
|
||
(4,[248,caml_string_of_jsbytes("End_of_file"),-4],"End_of_file");
|
||
caml_register_global
|
||
(5,
|
||
[248,caml_string_of_jsbytes("Division_by_zero"),-5],
|
||
"Division_by_zero");
|
||
caml_register_global
|
||
(6,[248,caml_string_of_jsbytes("Not_found"),-6],"Not_found");
|
||
caml_register_global
|
||
(7,[248,caml_string_of_jsbytes("Match_failure"),-7],"Match_failure");
|
||
caml_register_global
|
||
(8,[248,caml_string_of_jsbytes("Stack_overflow"),-8],"Stack_overflow");
|
||
caml_register_global
|
||
(9,[248,caml_string_of_jsbytes("Sys_blocked_io"),-9],"Sys_blocked_io");
|
||
caml_register_global
|
||
(10,[248,caml_string_of_jsbytes("Assert_failure"),-10],"Assert_failure");
|
||
caml_register_global
|
||
(11,
|
||
[248,caml_string_of_jsbytes("Undefined_recursive_module"),-11],
|
||
"Undefined_recursive_module");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# 1 "../.js/stdlib/stdlib.cma.js"
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
var
|
||
runtime=joo_global_object.jsoo_runtime,
|
||
caml_array_concat=runtime.caml_array_concat,
|
||
caml_array_get=runtime.caml_array_get,
|
||
caml_array_set=runtime.caml_array_set,
|
||
caml_array_sub=runtime.caml_array_sub,
|
||
caml_ba_change_layout=runtime.caml_ba_change_layout,
|
||
caml_ba_create=runtime.caml_ba_create,
|
||
caml_ba_dim_1=runtime.caml_ba_dim_1,
|
||
caml_ba_dim_2=runtime.caml_ba_dim_2,
|
||
caml_ba_kind=runtime.caml_ba_kind,
|
||
caml_ba_num_dims=runtime.caml_ba_num_dims,
|
||
caml_ba_reshape=runtime.caml_ba_reshape,
|
||
caml_ba_slice=runtime.caml_ba_slice,
|
||
caml_blit_bytes=runtime.caml_blit_bytes,
|
||
caml_blit_string=runtime.caml_blit_string,
|
||
caml_bswap16=runtime.caml_bswap16,
|
||
caml_bytes_get=runtime.caml_bytes_get,
|
||
caml_bytes_get16=runtime.caml_bytes_get16,
|
||
caml_bytes_get32=runtime.caml_bytes_get32,
|
||
caml_bytes_get64=runtime.caml_bytes_get64,
|
||
caml_bytes_of_string=runtime.caml_bytes_of_string,
|
||
caml_bytes_set=runtime.caml_bytes_set,
|
||
caml_bytes_set16=runtime.caml_bytes_set16,
|
||
caml_bytes_set32=runtime.caml_bytes_set32,
|
||
caml_bytes_set64=runtime.caml_bytes_set64,
|
||
caml_bytes_unsafe_get=runtime.caml_bytes_unsafe_get,
|
||
caml_bytes_unsafe_set=runtime.caml_bytes_unsafe_set,
|
||
caml_check_bound=runtime.caml_check_bound,
|
||
caml_compare=runtime.caml_compare,
|
||
caml_create_bytes=runtime.caml_create_bytes,
|
||
caml_div=runtime.caml_div,
|
||
caml_ephe_set_key=runtime.caml_ephe_set_key,
|
||
caml_ephe_unset_key=runtime.caml_ephe_unset_key,
|
||
caml_equal=runtime.caml_equal,
|
||
caml_fill_bytes=runtime.caml_fill_bytes,
|
||
caml_float_compare=runtime.caml_float_compare,
|
||
caml_float_of_string=runtime.caml_float_of_string,
|
||
caml_floatarray_create=runtime.caml_floatarray_create,
|
||
caml_format_float=runtime.caml_format_float,
|
||
caml_format_int=runtime.caml_format_int,
|
||
caml_fresh_oo_id=runtime.caml_fresh_oo_id,
|
||
caml_get_exception_raw_backtra=runtime.caml_get_exception_raw_backtrace,
|
||
caml_get_public_method=runtime.caml_get_public_method,
|
||
caml_greaterequal=runtime.caml_greaterequal,
|
||
caml_greaterthan=runtime.caml_greaterthan,
|
||
caml_hash=runtime.caml_hash,
|
||
caml_input_value=runtime.caml_input_value,
|
||
caml_int32_bswap=runtime.caml_int32_bswap,
|
||
caml_int64_add=runtime.caml_int64_add,
|
||
caml_int64_bswap=runtime.caml_int64_bswap,
|
||
caml_int64_compare=runtime.caml_int64_compare,
|
||
caml_int64_float_of_bits=runtime.caml_int64_float_of_bits,
|
||
caml_int64_format=runtime.caml_int64_format,
|
||
caml_int64_mul=runtime.caml_int64_mul,
|
||
caml_int64_of_int32=runtime.caml_int64_of_int32,
|
||
caml_int64_of_string=runtime.caml_int64_of_string,
|
||
caml_int64_or=runtime.caml_int64_or,
|
||
caml_int64_shift_left=runtime.caml_int64_shift_left,
|
||
caml_int64_sub=runtime.caml_int64_sub,
|
||
caml_int_compare=runtime.caml_int_compare,
|
||
caml_int_of_string=runtime.caml_int_of_string,
|
||
caml_lessequal=runtime.caml_lessequal,
|
||
caml_lessthan=runtime.caml_lessthan,
|
||
caml_make_vect=runtime.caml_make_vect,
|
||
caml_marshal_data_size=runtime.caml_marshal_data_size,
|
||
caml_md5_string=runtime.caml_md5_string,
|
||
caml_ml_bytes_length=runtime.caml_ml_bytes_length,
|
||
caml_ml_channel_size=runtime.caml_ml_channel_size,
|
||
caml_ml_channel_size_64=runtime.caml_ml_channel_size_64,
|
||
caml_ml_close_channel=runtime.caml_ml_close_channel,
|
||
caml_ml_flush=runtime.caml_ml_flush,
|
||
caml_ml_input=runtime.caml_ml_input,
|
||
caml_ml_input_char=runtime.caml_ml_input_char,
|
||
caml_ml_open_descriptor_in=runtime.caml_ml_open_descriptor_in,
|
||
caml_ml_open_descriptor_out=runtime.caml_ml_open_descriptor_out,
|
||
caml_ml_output=runtime.caml_ml_output,
|
||
caml_ml_output_bytes=runtime.caml_ml_output_bytes,
|
||
caml_ml_output_char=runtime.caml_ml_output_char,
|
||
caml_ml_set_binary_mode=runtime.caml_ml_set_binary_mode,
|
||
caml_ml_set_channel_name=runtime.caml_ml_set_channel_name,
|
||
caml_ml_string_length=runtime.caml_ml_string_length,
|
||
caml_mod=runtime.caml_mod,
|
||
caml_mul=runtime.caml_mul,
|
||
caml_nextafter_float=runtime.caml_nextafter_float,
|
||
caml_notequal=runtime.caml_notequal,
|
||
caml_obj_block=runtime.caml_obj_block,
|
||
caml_obj_make_forward=runtime.caml_obj_make_forward,
|
||
caml_obj_tag=runtime.caml_obj_tag,
|
||
caml_output_value=runtime.caml_output_value,
|
||
caml_register_global=runtime.caml_register_global,
|
||
caml_register_named_value=runtime.caml_register_named_value,
|
||
caml_restore_raw_backtrace=runtime.caml_restore_raw_backtrace,
|
||
caml_set_oo_id=runtime.caml_set_oo_id,
|
||
caml_signbit_float=runtime.caml_signbit_float,
|
||
caml_spacetime_enabled=runtime.caml_spacetime_enabled,
|
||
caml_spacetime_only_works_for_=
|
||
runtime.caml_spacetime_only_works_for_native_code,
|
||
caml_string_compare=runtime.caml_string_compare,
|
||
caml_string_equal=runtime.caml_string_equal,
|
||
caml_string_get=runtime.caml_string_get,
|
||
caml_string_notequal=runtime.caml_string_notequal,
|
||
caml_string_of_bytes=runtime.caml_string_of_bytes,
|
||
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
|
||
caml_string_unsafe_get=runtime.caml_string_unsafe_get,
|
||
caml_sys_argv=runtime.caml_sys_argv,
|
||
caml_sys_getenv=runtime.caml_sys_getenv,
|
||
caml_sys_open=runtime.caml_sys_open,
|
||
caml_sys_random_seed=runtime.caml_sys_random_seed,
|
||
caml_trampoline=runtime.caml_trampoline,
|
||
caml_trampoline_return=runtime.caml_trampoline_return,
|
||
caml_wrap_exception=runtime.caml_wrap_exception;
|
||
function caml_call1(f,a0)
|
||
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
|
||
function caml_call2(f,a0,a1)
|
||
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
|
||
function caml_call3(f,a0,a1,a2)
|
||
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
|
||
function caml_call4(f,a0,a1,a2,a3)
|
||
{return f.length == 4
|
||
?f(a0,a1,a2,a3)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
|
||
function caml_call5(f,a0,a1,a2,a3,a4)
|
||
{return f.length == 5
|
||
?f(a0,a1,a2,a3,a4)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
|
||
function caml_call6(f,a0,a1,a2,a3,a4,a5)
|
||
{return f.length == 6
|
||
?f(a0,a1,a2,a3,a4,a5)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5])}
|
||
var
|
||
global_data=runtime.caml_get_global_data(),
|
||
cst$0=caml_string_of_jsbytes("%,"),
|
||
cst_really_input=caml_string_of_jsbytes("really_input"),
|
||
cst_input=caml_string_of_jsbytes("input"),
|
||
cst_output_substring=caml_string_of_jsbytes("output_substring"),
|
||
cst_output=caml_string_of_jsbytes("output"),
|
||
cst_12g=caml_string_of_jsbytes("%.12g"),
|
||
cst=caml_string_of_jsbytes("."),
|
||
cst_false$1=caml_string_of_jsbytes("false"),
|
||
cst_true$1=caml_string_of_jsbytes("true"),
|
||
cst_false$0=caml_string_of_jsbytes("false"),
|
||
cst_true$0=caml_string_of_jsbytes("true"),
|
||
cst_bool_of_string=caml_string_of_jsbytes("bool_of_string"),
|
||
cst_true=caml_string_of_jsbytes("true"),
|
||
cst_false=caml_string_of_jsbytes("false"),
|
||
cst_char_of_int=caml_string_of_jsbytes("char_of_int"),
|
||
cst_Stdlib_Exit=caml_string_of_jsbytes("Stdlib.Exit"),
|
||
cst_Stdlib_Pervasives_Exit=
|
||
caml_string_of_jsbytes("Stdlib.Pervasives.Exit"),
|
||
cst_option_is_None=caml_string_of_jsbytes("option is None"),
|
||
cst_result_is_Ok=caml_string_of_jsbytes("result is Ok _"),
|
||
cst_result_is_Error=caml_string_of_jsbytes("result is Error _"),
|
||
cst_true$2=caml_string_of_jsbytes("true"),
|
||
cst_false$2=caml_string_of_jsbytes("false"),
|
||
cst$1=caml_string_of_jsbytes("\\\\"),
|
||
cst$2=caml_string_of_jsbytes("\\'"),
|
||
cst_b=caml_string_of_jsbytes("\\b"),
|
||
cst_t=caml_string_of_jsbytes("\\t"),
|
||
cst_n=caml_string_of_jsbytes("\\n"),
|
||
cst_r=caml_string_of_jsbytes("\\r"),
|
||
cst_Char_chr=caml_string_of_jsbytes("Char.chr"),
|
||
cst_is_not_a_latin1_character=
|
||
caml_string_of_jsbytes(" is not a latin1 character"),
|
||
cst_04X=caml_string_of_jsbytes("%04X"),
|
||
cst_U=caml_string_of_jsbytes("U+"),
|
||
cst_is_not_an_Unicode_scalar_v=
|
||
caml_string_of_jsbytes(" is not an Unicode scalar value"),
|
||
cst_X=caml_string_of_jsbytes("%X"),
|
||
err_no_pred=caml_string_of_jsbytes("U+0000 has no predecessor"),
|
||
err_no_succ=caml_string_of_jsbytes("U+10FFFF has no successor"),
|
||
cst_Stdlib_Sys_Break=caml_string_of_jsbytes("Stdlib.Sys.Break"),
|
||
ocaml_version=caml_string_of_jsbytes("4.10.0"),
|
||
cst_List_map2=caml_string_of_jsbytes("List.map2"),
|
||
cst_List_iter2=caml_string_of_jsbytes("List.iter2"),
|
||
cst_List_fold_left2=caml_string_of_jsbytes("List.fold_left2"),
|
||
cst_List_fold_right2=caml_string_of_jsbytes("List.fold_right2"),
|
||
cst_List_for_all2=caml_string_of_jsbytes("List.for_all2"),
|
||
cst_List_exists2=caml_string_of_jsbytes("List.exists2"),
|
||
cst_List_combine=caml_string_of_jsbytes("List.combine"),
|
||
cst_List_rev_map2=caml_string_of_jsbytes("List.rev_map2"),
|
||
cst_List_init=caml_string_of_jsbytes("List.init"),
|
||
cst_List_nth$0=caml_string_of_jsbytes("List.nth"),
|
||
cst_nth=caml_string_of_jsbytes("nth"),
|
||
cst_List_nth=caml_string_of_jsbytes("List.nth"),
|
||
cst_tl=caml_string_of_jsbytes("tl"),
|
||
cst_hd=caml_string_of_jsbytes("hd"),
|
||
cst_Bytes_of_seq_cannot_grow_b=
|
||
caml_string_of_jsbytes("Bytes.of_seq: cannot grow bytes"),
|
||
cst_String_rcontains_from_Byte=
|
||
caml_string_of_jsbytes("String.rcontains_from / Bytes.rcontains_from"),
|
||
cst_String_contains_from_Bytes=
|
||
caml_string_of_jsbytes("String.contains_from / Bytes.contains_from"),
|
||
cst_String_rindex_from_opt_Byt=
|
||
caml_string_of_jsbytes("String.rindex_from_opt / Bytes.rindex_from_opt"),
|
||
cst_String_rindex_from_Bytes_r=
|
||
caml_string_of_jsbytes("String.rindex_from / Bytes.rindex_from"),
|
||
cst_String_index_from_opt_Byte=
|
||
caml_string_of_jsbytes("String.index_from_opt / Bytes.index_from_opt"),
|
||
cst_String_index_from_Bytes_in=
|
||
caml_string_of_jsbytes("String.index_from / Bytes.index_from"),
|
||
cst_Bytes_concat=caml_string_of_jsbytes("Bytes.concat"),
|
||
cst_String_blit_Bytes_blit_str=
|
||
caml_string_of_jsbytes("String.blit / Bytes.blit_string"),
|
||
cst_Bytes_blit=caml_string_of_jsbytes("Bytes.blit"),
|
||
cst_String_fill_Bytes_fill=
|
||
caml_string_of_jsbytes("String.fill / Bytes.fill"),
|
||
cst_Bytes_extend=caml_string_of_jsbytes("Bytes.extend"),
|
||
cst_String_sub_Bytes_sub=caml_string_of_jsbytes("String.sub / Bytes.sub"),
|
||
cst_String_rcontains_from_Byte$0=
|
||
caml_string_of_jsbytes("String.rcontains_from / Bytes.rcontains_from"),
|
||
cst_String_contains_from_Bytes$0=
|
||
caml_string_of_jsbytes("String.contains_from / Bytes.contains_from"),
|
||
cst_String_rindex_from_opt_Byt$0=
|
||
caml_string_of_jsbytes("String.rindex_from_opt / Bytes.rindex_from_opt"),
|
||
cst_String_rindex_from_Bytes_r$0=
|
||
caml_string_of_jsbytes("String.rindex_from / Bytes.rindex_from"),
|
||
cst_String_index_from_opt_Byte$0=
|
||
caml_string_of_jsbytes("String.index_from_opt / Bytes.index_from_opt"),
|
||
cst_String_index_from_Bytes_in$0=
|
||
caml_string_of_jsbytes("String.index_from / Bytes.index_from"),
|
||
cst$4=caml_string_of_jsbytes(""),
|
||
cst$3=caml_string_of_jsbytes(""),
|
||
cst_String_concat=caml_string_of_jsbytes("String.concat"),
|
||
cst$5=caml_string_of_jsbytes("()"),
|
||
cst_Marshal_from_bytes=caml_string_of_jsbytes("Marshal.from_bytes"),
|
||
cst_Marshal_from_bytes$0=caml_string_of_jsbytes("Marshal.from_bytes"),
|
||
cst_Marshal_data_size=caml_string_of_jsbytes("Marshal.data_size"),
|
||
cst_Marshal_to_buffer_substrin=
|
||
caml_string_of_jsbytes("Marshal.to_buffer: substring out of bounds"),
|
||
cst_Obj_Ephemeron_blit_key=
|
||
caml_string_of_jsbytes("Obj.Ephemeron.blit_key"),
|
||
cst_Obj_Ephemeron_check_key=
|
||
caml_string_of_jsbytes("Obj.Ephemeron.check_key"),
|
||
cst_Obj_Ephemeron_unset_key=
|
||
caml_string_of_jsbytes("Obj.Ephemeron.unset_key"),
|
||
cst_Obj_Ephemeron_set_key=caml_string_of_jsbytes("Obj.Ephemeron.set_key"),
|
||
cst_Obj_Ephemeron_get_key_copy=
|
||
caml_string_of_jsbytes("Obj.Ephemeron.get_key_copy"),
|
||
cst_Obj_Ephemeron_get_key=caml_string_of_jsbytes("Obj.Ephemeron.get_key"),
|
||
cst_Obj_Ephemeron_create=caml_string_of_jsbytes("Obj.Ephemeron.create"),
|
||
cst_Obj_extension_constructor$0=
|
||
caml_string_of_jsbytes("Obj.extension_constructor"),
|
||
cst_Obj_extension_constructor=
|
||
caml_string_of_jsbytes("Obj.extension_constructor"),
|
||
cst_Array_map2_arrays_must_hav=
|
||
caml_string_of_jsbytes("Array.map2: arrays must have the same length"),
|
||
cst_Array_iter2_arrays_must_ha=
|
||
caml_string_of_jsbytes("Array.iter2: arrays must have the same length"),
|
||
cst_Array_blit=caml_string_of_jsbytes("Array.blit"),
|
||
cst_Array_fill=caml_string_of_jsbytes("Array.fill"),
|
||
cst_Array_sub=caml_string_of_jsbytes("Array.sub"),
|
||
cst_Array_init=caml_string_of_jsbytes("Array.init"),
|
||
cst_Stdlib_Array_Bottom=caml_string_of_jsbytes("Stdlib.Array.Bottom"),
|
||
cst_Float_Array_map2_arrays_mu=
|
||
caml_string_of_jsbytes
|
||
("Float.Array.map2: arrays must have the same length"),
|
||
cst_Float_Array_iter2_arrays_m=
|
||
caml_string_of_jsbytes
|
||
("Float.Array.iter2: arrays must have the same length"),
|
||
cst_Float_array_blit=caml_string_of_jsbytes("Float.array.blit"),
|
||
cst_Float_array_blit$0=caml_string_of_jsbytes("Float.array.blit"),
|
||
cst_Float_Array_fill=caml_string_of_jsbytes("Float.Array.fill"),
|
||
cst_Float_Array_sub=caml_string_of_jsbytes("Float.Array.sub"),
|
||
cst_Float_Array_concat=caml_string_of_jsbytes("Float.Array.concat"),
|
||
cst_Float_Array_init=caml_string_of_jsbytes("Float.Array.init"),
|
||
cst_Stdlib_Float_Array_Bottom=
|
||
caml_string_of_jsbytes("Stdlib.Float.Array.Bottom"),
|
||
cst_d=caml_string_of_jsbytes("%d"),
|
||
cst_d$0=caml_string_of_jsbytes("%d"),
|
||
zero$2=runtime.caml_int64_create_lo_mi_hi(0,0,0),
|
||
one$2=runtime.caml_int64_create_lo_mi_hi(1,0,0),
|
||
minus_one$2=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,65535),
|
||
min_int$2=runtime.caml_int64_create_lo_mi_hi(0,0,32768),
|
||
max_int$2=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,32767),
|
||
cst_d$1=caml_string_of_jsbytes("%d"),
|
||
cst_Lexing_lex_refill_cannot_g=
|
||
caml_string_of_jsbytes("Lexing.lex_refill: cannot grow buffer"),
|
||
dummy_pos=[0,caml_string_of_jsbytes(""),0,0,-1],
|
||
zero_pos=[0,caml_string_of_jsbytes(""),1,0,0],
|
||
cst_syntax_error=caml_string_of_jsbytes("syntax error"),
|
||
cst_Stdlib_Parsing_YYexit=caml_string_of_jsbytes("Stdlib.Parsing.YYexit"),
|
||
cst_Stdlib_Parsing_Parse_error=
|
||
caml_string_of_jsbytes("Stdlib.Parsing.Parse_error"),
|
||
cst_Set_remove_min_elt=caml_string_of_jsbytes("Set.remove_min_elt"),
|
||
cst_Set_bal=caml_string_of_jsbytes("Set.bal"),
|
||
cst_Set_bal$0=caml_string_of_jsbytes("Set.bal"),
|
||
cst_Set_bal$1=caml_string_of_jsbytes("Set.bal"),
|
||
cst_Set_bal$2=caml_string_of_jsbytes("Set.bal"),
|
||
cst_Map_remove_min_elt=caml_string_of_jsbytes("Map.remove_min_elt"),
|
||
cst_Map_bal=caml_string_of_jsbytes("Map.bal"),
|
||
cst_Map_bal$0=caml_string_of_jsbytes("Map.bal"),
|
||
cst_Map_bal$1=caml_string_of_jsbytes("Map.bal"),
|
||
cst_Map_bal$2=caml_string_of_jsbytes("Map.bal"),
|
||
cst_Stdlib_Stack_Empty=caml_string_of_jsbytes("Stdlib.Stack.Empty"),
|
||
cst_Stdlib_Queue_Empty=caml_string_of_jsbytes("Stdlib.Queue.Empty"),
|
||
cst_CamlinternalLazy_Undefined=
|
||
caml_string_of_jsbytes("CamlinternalLazy.Undefined"),
|
||
cst_count=caml_string_of_jsbytes("{count = "),
|
||
cst_data=caml_string_of_jsbytes("; data = "),
|
||
cst$6=caml_string_of_jsbytes("}"),
|
||
cst_Sempty=caml_string_of_jsbytes("Sempty"),
|
||
cst_Scons=caml_string_of_jsbytes("Scons ("),
|
||
cst$7=caml_string_of_jsbytes(", "),
|
||
cst$8=caml_string_of_jsbytes(")"),
|
||
cst_Sapp=caml_string_of_jsbytes("Sapp ("),
|
||
cst$9=caml_string_of_jsbytes(", "),
|
||
cst$10=caml_string_of_jsbytes(")"),
|
||
cst_Slazy=caml_string_of_jsbytes("Slazy"),
|
||
cst_Sgen=caml_string_of_jsbytes("Sgen"),
|
||
cst_Sbuffio=caml_string_of_jsbytes("Sbuffio"),
|
||
cst_Stdlib_Stream_Failure=caml_string_of_jsbytes("Stdlib.Stream.Failure"),
|
||
cst_Stdlib_Stream_Error=caml_string_of_jsbytes("Stdlib.Stream.Error"),
|
||
cst_Buffer_truncate=caml_string_of_jsbytes("Buffer.truncate"),
|
||
cst_Buffer_add_channel=caml_string_of_jsbytes("Buffer.add_channel"),
|
||
cst_Buffer_add_substring_add_s=
|
||
caml_string_of_jsbytes("Buffer.add_substring/add_subbytes"),
|
||
cst_Buffer_add_cannot_grow_buf=
|
||
caml_string_of_jsbytes("Buffer.add: cannot grow buffer"),
|
||
cst_Buffer_nth=caml_string_of_jsbytes("Buffer.nth"),
|
||
cst_Buffer_blit=caml_string_of_jsbytes("Buffer.blit"),
|
||
cst_Buffer_sub=caml_string_of_jsbytes("Buffer.sub"),
|
||
cst_c=caml_string_of_jsbytes("%c"),
|
||
cst_s=caml_string_of_jsbytes("%s"),
|
||
cst_i=caml_string_of_jsbytes("%i"),
|
||
cst_li=caml_string_of_jsbytes("%li"),
|
||
cst_ni=caml_string_of_jsbytes("%ni"),
|
||
cst_Li=caml_string_of_jsbytes("%Li"),
|
||
cst_f=caml_string_of_jsbytes("%f"),
|
||
cst_B=caml_string_of_jsbytes("%B"),
|
||
cst$21=caml_string_of_jsbytes("%{"),
|
||
cst$22=caml_string_of_jsbytes("%}"),
|
||
cst$23=caml_string_of_jsbytes("%("),
|
||
cst$24=caml_string_of_jsbytes("%)"),
|
||
cst_a=caml_string_of_jsbytes("%a"),
|
||
cst_t$0=caml_string_of_jsbytes("%t"),
|
||
cst$25=caml_string_of_jsbytes("%?"),
|
||
cst_r$0=caml_string_of_jsbytes("%r"),
|
||
cst_r$1=caml_string_of_jsbytes("%_r"),
|
||
cst_u$0=caml_string_of_jsbytes("%u"),
|
||
cst_Printf_bad_conversion=
|
||
caml_string_of_jsbytes("Printf: bad conversion %["),
|
||
cst_Printf_bad_conversion$0=
|
||
caml_string_of_jsbytes("Printf: bad conversion %_"),
|
||
cst$30=caml_string_of_jsbytes("@{"),
|
||
cst$31=caml_string_of_jsbytes("@["),
|
||
cst$32=caml_string_of_jsbytes("@{"),
|
||
cst$33=caml_string_of_jsbytes("@["),
|
||
cst$34=caml_string_of_jsbytes("@{"),
|
||
cst$35=caml_string_of_jsbytes("@["),
|
||
cst_0=caml_string_of_jsbytes("0"),
|
||
cst_padding=caml_string_of_jsbytes("padding"),
|
||
cst_precision=caml_string_of_jsbytes("precision"),
|
||
cst$40=caml_string_of_jsbytes("'*'"),
|
||
cst$38=caml_string_of_jsbytes("'-'"),
|
||
cst_0$2=caml_string_of_jsbytes("'0'"),
|
||
cst$39=caml_string_of_jsbytes("'*'"),
|
||
cst_0$0=caml_string_of_jsbytes("0"),
|
||
cst_0$1=caml_string_of_jsbytes("0"),
|
||
cst_precision$0=caml_string_of_jsbytes("precision"),
|
||
cst_precision$1=caml_string_of_jsbytes("precision"),
|
||
cst$41=caml_string_of_jsbytes("'+'"),
|
||
cst$42=caml_string_of_jsbytes("'#'"),
|
||
cst$43=caml_string_of_jsbytes("' '"),
|
||
cst_padding$0=caml_string_of_jsbytes("`padding'"),
|
||
cst_precision$2=caml_string_of_jsbytes("`precision'"),
|
||
cst$44=caml_string_of_jsbytes("'+'"),
|
||
cst$45=caml_string_of_jsbytes("'_'"),
|
||
sub_format=[0,0,caml_string_of_jsbytes("")],
|
||
formatting_lit=[0,caml_string_of_jsbytes("@;"),1,0],
|
||
cst_digit=caml_string_of_jsbytes("digit"),
|
||
cst_character=caml_string_of_jsbytes("character ')'"),
|
||
cst_character$0=caml_string_of_jsbytes("character '}'"),
|
||
cst$49=caml_string_of_jsbytes("'#'"),
|
||
cst$46=caml_string_of_jsbytes("'+'"),
|
||
cst$47=caml_string_of_jsbytes("'+'"),
|
||
cst$48=caml_string_of_jsbytes("' '"),
|
||
cst$50=caml_string_of_jsbytes("'+'"),
|
||
cst_non_zero_widths_are_unsupp=
|
||
caml_string_of_jsbytes
|
||
("non-zero widths are unsupported for %c conversions"),
|
||
cst_unexpected_end_of_format=
|
||
caml_string_of_jsbytes("unexpected end of format"),
|
||
cst$36=caml_string_of_jsbytes(""),
|
||
cst$37=caml_string_of_jsbytes(""),
|
||
cst_b$0=caml_string_of_jsbytes("b"),
|
||
cst_h=caml_string_of_jsbytes("h"),
|
||
cst_hov=caml_string_of_jsbytes("hov"),
|
||
cst_hv=caml_string_of_jsbytes("hv"),
|
||
cst_v=caml_string_of_jsbytes("v"),
|
||
cst_nan=caml_string_of_jsbytes("nan"),
|
||
cst_neg_infinity=caml_string_of_jsbytes("neg_infinity"),
|
||
cst_infinity=caml_string_of_jsbytes("infinity"),
|
||
cst$29=caml_string_of_jsbytes("."),
|
||
cst_nd$0=caml_string_of_jsbytes("%+nd"),
|
||
cst_nd$1=caml_string_of_jsbytes("% nd"),
|
||
cst_ni$1=caml_string_of_jsbytes("%+ni"),
|
||
cst_ni$2=caml_string_of_jsbytes("% ni"),
|
||
cst_nx=caml_string_of_jsbytes("%nx"),
|
||
cst_nx$0=caml_string_of_jsbytes("%#nx"),
|
||
cst_nX=caml_string_of_jsbytes("%nX"),
|
||
cst_nX$0=caml_string_of_jsbytes("%#nX"),
|
||
cst_no=caml_string_of_jsbytes("%no"),
|
||
cst_no$0=caml_string_of_jsbytes("%#no"),
|
||
cst_nd=caml_string_of_jsbytes("%nd"),
|
||
cst_ni$0=caml_string_of_jsbytes("%ni"),
|
||
cst_nu=caml_string_of_jsbytes("%nu"),
|
||
cst_ld$0=caml_string_of_jsbytes("%+ld"),
|
||
cst_ld$1=caml_string_of_jsbytes("% ld"),
|
||
cst_li$1=caml_string_of_jsbytes("%+li"),
|
||
cst_li$2=caml_string_of_jsbytes("% li"),
|
||
cst_lx=caml_string_of_jsbytes("%lx"),
|
||
cst_lx$0=caml_string_of_jsbytes("%#lx"),
|
||
cst_lX=caml_string_of_jsbytes("%lX"),
|
||
cst_lX$0=caml_string_of_jsbytes("%#lX"),
|
||
cst_lo=caml_string_of_jsbytes("%lo"),
|
||
cst_lo$0=caml_string_of_jsbytes("%#lo"),
|
||
cst_ld=caml_string_of_jsbytes("%ld"),
|
||
cst_li$0=caml_string_of_jsbytes("%li"),
|
||
cst_lu=caml_string_of_jsbytes("%lu"),
|
||
cst_Ld$0=caml_string_of_jsbytes("%+Ld"),
|
||
cst_Ld$1=caml_string_of_jsbytes("% Ld"),
|
||
cst_Li$1=caml_string_of_jsbytes("%+Li"),
|
||
cst_Li$2=caml_string_of_jsbytes("% Li"),
|
||
cst_Lx=caml_string_of_jsbytes("%Lx"),
|
||
cst_Lx$0=caml_string_of_jsbytes("%#Lx"),
|
||
cst_LX=caml_string_of_jsbytes("%LX"),
|
||
cst_LX$0=caml_string_of_jsbytes("%#LX"),
|
||
cst_Lo=caml_string_of_jsbytes("%Lo"),
|
||
cst_Lo$0=caml_string_of_jsbytes("%#Lo"),
|
||
cst_Ld=caml_string_of_jsbytes("%Ld"),
|
||
cst_Li$0=caml_string_of_jsbytes("%Li"),
|
||
cst_Lu=caml_string_of_jsbytes("%Lu"),
|
||
cst_d$3=caml_string_of_jsbytes("%+d"),
|
||
cst_d$4=caml_string_of_jsbytes("% d"),
|
||
cst_i$1=caml_string_of_jsbytes("%+i"),
|
||
cst_i$2=caml_string_of_jsbytes("% i"),
|
||
cst_x=caml_string_of_jsbytes("%x"),
|
||
cst_x$0=caml_string_of_jsbytes("%#x"),
|
||
cst_X$0=caml_string_of_jsbytes("%X"),
|
||
cst_X$1=caml_string_of_jsbytes("%#X"),
|
||
cst_o=caml_string_of_jsbytes("%o"),
|
||
cst_o$0=caml_string_of_jsbytes("%#o"),
|
||
cst_d$2=caml_string_of_jsbytes("%d"),
|
||
cst_i$0=caml_string_of_jsbytes("%i"),
|
||
cst_u=caml_string_of_jsbytes("%u"),
|
||
cst$26=caml_string_of_jsbytes("%!"),
|
||
cst$27=caml_string_of_jsbytes("@{"),
|
||
cst$28=caml_string_of_jsbytes("@["),
|
||
cst_0c=caml_string_of_jsbytes("0c"),
|
||
cst$20=caml_string_of_jsbytes("%%"),
|
||
cst$12=caml_string_of_jsbytes("@]"),
|
||
cst$13=caml_string_of_jsbytes("@}"),
|
||
cst$14=caml_string_of_jsbytes("@?"),
|
||
cst$15=caml_string_of_jsbytes("@\n"),
|
||
cst$16=caml_string_of_jsbytes("@."),
|
||
cst$17=caml_string_of_jsbytes("@@"),
|
||
cst$18=caml_string_of_jsbytes("@%"),
|
||
cst$19=caml_string_of_jsbytes("@"),
|
||
cst$11=caml_string_of_jsbytes(".*"),
|
||
cst_CamlinternalFormat_Type_mi=
|
||
caml_string_of_jsbytes("CamlinternalFormat.Type_mismatch"),
|
||
cst$58=caml_string_of_jsbytes(""),
|
||
cst$59=caml_string_of_jsbytes("\n"),
|
||
cst_a_boolean=caml_string_of_jsbytes("a boolean"),
|
||
cst_an_integer=caml_string_of_jsbytes("an integer"),
|
||
cst_an_integer$0=caml_string_of_jsbytes("an integer"),
|
||
cst_a_float=caml_string_of_jsbytes("a float"),
|
||
cst_a_float$0=caml_string_of_jsbytes("a float"),
|
||
cst$55=caml_string_of_jsbytes(""),
|
||
cst$56=caml_string_of_jsbytes(" "),
|
||
cst$57=caml_string_of_jsbytes(""),
|
||
cst_one_of=caml_string_of_jsbytes("one of: "),
|
||
cst_Arg_Expand_is_is_only_allo=
|
||
caml_string_of_jsbytes
|
||
("Arg.Expand is is only allowed with Arg.parse_and_expand_argv_dynamic"),
|
||
cst_no_argument=caml_string_of_jsbytes("no argument"),
|
||
cst$54=caml_string_of_jsbytes("(?)"),
|
||
cst_help$3=caml_string_of_jsbytes("--help"),
|
||
cst_help$4=caml_string_of_jsbytes("-help"),
|
||
cst_help$2=caml_string_of_jsbytes("-help"),
|
||
cst_Display_this_list_of_optio=
|
||
caml_string_of_jsbytes(" Display this list of options"),
|
||
cst_help=caml_string_of_jsbytes("-help"),
|
||
cst_help$1=caml_string_of_jsbytes("--help"),
|
||
cst_Display_this_list_of_optio$0=
|
||
caml_string_of_jsbytes(" Display this list of options"),
|
||
cst_help$0=caml_string_of_jsbytes("--help"),
|
||
cst$51=caml_string_of_jsbytes("}"),
|
||
cst$52=caml_string_of_jsbytes("|"),
|
||
cst$53=caml_string_of_jsbytes("{"),
|
||
cst_none=caml_string_of_jsbytes("<none>"),
|
||
cst_Stdlib_Arg_Bad=caml_string_of_jsbytes("Stdlib.Arg.Bad"),
|
||
cst_Stdlib_Arg_Help=caml_string_of_jsbytes("Stdlib.Arg.Help"),
|
||
cst_Stdlib_Arg_Stop=caml_string_of_jsbytes("Stdlib.Arg.Stop"),
|
||
cst$61=caml_string_of_jsbytes(""),
|
||
cst_Program_not_linked_with_g_=
|
||
caml_string_of_jsbytes
|
||
("(Program not linked with -g, cannot print stack backtrace)\n"),
|
||
cst_Raised_at=caml_string_of_jsbytes("Raised at"),
|
||
cst_Re_raised_at=caml_string_of_jsbytes("Re-raised at"),
|
||
cst_Raised_by_primitive_operat=
|
||
caml_string_of_jsbytes("Raised by primitive operation at"),
|
||
cst_Called_from=caml_string_of_jsbytes("Called from"),
|
||
cst_inlined=caml_string_of_jsbytes(" (inlined)"),
|
||
cst$64=caml_string_of_jsbytes(""),
|
||
partial=[4,0,0,0,0],
|
||
cst_Out_of_memory=caml_string_of_jsbytes("Out of memory"),
|
||
cst_Stack_overflow=caml_string_of_jsbytes("Stack overflow"),
|
||
cst_Pattern_matching_failed=
|
||
caml_string_of_jsbytes("Pattern matching failed"),
|
||
cst_Assertion_failed=caml_string_of_jsbytes("Assertion failed"),
|
||
cst_Undefined_recursive_module=
|
||
caml_string_of_jsbytes("Undefined recursive module"),
|
||
cst$62=caml_string_of_jsbytes(""),
|
||
cst$63=caml_string_of_jsbytes(""),
|
||
cst$60=caml_string_of_jsbytes("_"),
|
||
locfmt=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes('File "'),
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes('", line '),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(", characters "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,45,[4,0,0,0,[11,caml_string_of_jsbytes(": "),[2,0,0]]]]]]]]]],
|
||
caml_string_of_jsbytes('File "%s", line %d, characters %d-%d: %s')],
|
||
cst_Stdlib_Fun_Finally_raised=
|
||
caml_string_of_jsbytes("Stdlib.Fun.Finally_raised"),
|
||
cst_Digest_from_hex$0=caml_string_of_jsbytes("Digest.from_hex"),
|
||
cst_Digest_from_hex=caml_string_of_jsbytes("Digest.from_hex"),
|
||
cst_Digest_to_hex=caml_string_of_jsbytes("Digest.to_hex"),
|
||
cst_Digest_substring=caml_string_of_jsbytes("Digest.substring"),
|
||
cst_Random_int64=caml_string_of_jsbytes("Random.int64"),
|
||
cst_Random_int32=caml_string_of_jsbytes("Random.int32"),
|
||
cst_Random_int=caml_string_of_jsbytes("Random.int"),
|
||
cst_x$1=caml_string_of_jsbytes("x"),
|
||
cst_OCAMLRUNPARAM=caml_string_of_jsbytes("OCAMLRUNPARAM"),
|
||
cst_CAMLRUNPARAM=caml_string_of_jsbytes("CAMLRUNPARAM"),
|
||
cst$65=caml_string_of_jsbytes(""),
|
||
cst_Weak_Make_hash_bucket_cann=
|
||
caml_string_of_jsbytes("Weak.Make: hash bucket cannot grow more"),
|
||
cst_Weak_fill=caml_string_of_jsbytes("Weak.fill"),
|
||
cst_Weak_blit=caml_string_of_jsbytes("Weak.blit"),
|
||
cst_Weak_check=caml_string_of_jsbytes("Weak.check"),
|
||
cst_Weak_get_copy=caml_string_of_jsbytes("Weak.get_copy"),
|
||
cst_Weak_get=caml_string_of_jsbytes("Weak.get"),
|
||
cst_Weak_set=caml_string_of_jsbytes("Weak.set"),
|
||
cst_Weak_create=caml_string_of_jsbytes("Weak.create"),
|
||
cst$83=caml_string_of_jsbytes(""),
|
||
cst$84=caml_string_of_jsbytes(""),
|
||
cst$82=caml_string_of_jsbytes("."),
|
||
cst$79=caml_string_of_jsbytes(">"),
|
||
cst$80=caml_string_of_jsbytes("<\/"),
|
||
cst$81=caml_string_of_jsbytes(""),
|
||
cst$76=caml_string_of_jsbytes(">"),
|
||
cst$77=caml_string_of_jsbytes("<"),
|
||
cst$78=caml_string_of_jsbytes(""),
|
||
cst$75=caml_string_of_jsbytes("\n"),
|
||
cst_Format_pp_set_geometry_max=
|
||
caml_string_of_jsbytes("Format.pp_set_geometry: max_indent < 2"),
|
||
cst_Format_pp_set_geometry_mar=
|
||
caml_string_of_jsbytes("Format.pp_set_geometry: margin <= max_indent"),
|
||
cst$71=caml_string_of_jsbytes(""),
|
||
cst$72=caml_string_of_jsbytes(""),
|
||
cst$73=caml_string_of_jsbytes(""),
|
||
cst$74=caml_string_of_jsbytes(""),
|
||
cst$67=caml_string_of_jsbytes(""),
|
||
cst$68=caml_string_of_jsbytes(""),
|
||
cst$69=caml_string_of_jsbytes(""),
|
||
cst$70=caml_string_of_jsbytes(""),
|
||
cst$66=caml_string_of_jsbytes(""),
|
||
cst_Stdlib_Format_String_tag=
|
||
caml_string_of_jsbytes("Stdlib.Format.String_tag"),
|
||
cst_end_of_input_not_found=
|
||
caml_string_of_jsbytes("end of input not found"),
|
||
cst_scanf_bad_conversion_a=
|
||
caml_string_of_jsbytes('scanf: bad conversion "%a"'),
|
||
cst_scanf_bad_conversion_t=
|
||
caml_string_of_jsbytes('scanf: bad conversion "%t"'),
|
||
cst_scanf_missing_reader=caml_string_of_jsbytes("scanf: missing reader"),
|
||
cst_scanf_bad_conversion_custo=
|
||
caml_string_of_jsbytes('scanf: bad conversion "%?" (custom converter)'),
|
||
cst_scanf_bad_conversion=
|
||
caml_string_of_jsbytes('scanf: bad conversion "%*"'),
|
||
cst_scanf_bad_conversion$0=
|
||
caml_string_of_jsbytes('scanf: bad conversion "%*"'),
|
||
cst_scanf_bad_conversion$1=
|
||
caml_string_of_jsbytes('scanf: bad conversion "%-"'),
|
||
cst_scanf_bad_conversion$2=
|
||
caml_string_of_jsbytes('scanf: bad conversion "%*"'),
|
||
cst$90=caml_string_of_jsbytes('"'),
|
||
cst$91=caml_string_of_jsbytes('"'),
|
||
cst$88=caml_string_of_jsbytes('"'),
|
||
cst$89=caml_string_of_jsbytes('"'),
|
||
cst$87=caml_string_of_jsbytes('"'),
|
||
cst_in_format=caml_string_of_jsbytes(' in format "'),
|
||
cst_an=caml_string_of_jsbytes("an"),
|
||
cst_x$2=caml_string_of_jsbytes("x"),
|
||
cst_nfinity=caml_string_of_jsbytes("nfinity"),
|
||
cst_digits=caml_string_of_jsbytes("digits"),
|
||
cst_decimal_digits=caml_string_of_jsbytes("decimal digits"),
|
||
cst_0b=caml_string_of_jsbytes("0b"),
|
||
cst_0o=caml_string_of_jsbytes("0o"),
|
||
cst_0u=caml_string_of_jsbytes("0u"),
|
||
cst_0x=caml_string_of_jsbytes("0x"),
|
||
cst_false$3=caml_string_of_jsbytes("false"),
|
||
cst_true$3=caml_string_of_jsbytes("true"),
|
||
cst_not_a_valid_float_in_hexad=
|
||
caml_string_of_jsbytes("not a valid float in hexadecimal notation"),
|
||
cst_no_dot_or_exponent_part_fo=
|
||
caml_string_of_jsbytes("no dot or exponent part found in float token"),
|
||
cst$86=caml_string_of_jsbytes("-"),
|
||
cst_unnamed_function=caml_string_of_jsbytes("unnamed function"),
|
||
cst_unnamed_character_string=
|
||
caml_string_of_jsbytes("unnamed character string"),
|
||
cst_unnamed_Stdlib_input_chann=
|
||
caml_string_of_jsbytes("unnamed Stdlib input channel"),
|
||
cst$85=caml_string_of_jsbytes("-"),
|
||
cst_Stdlib_Scanf_Scan_failure=
|
||
caml_string_of_jsbytes("Stdlib.Scanf.Scan_failure"),
|
||
cst_binary=caml_string_of_jsbytes("binary"),
|
||
cst_octal=caml_string_of_jsbytes("octal"),
|
||
cst_hexadecimal=caml_string_of_jsbytes("hexadecimal"),
|
||
cst_a_Char=caml_string_of_jsbytes("a Char"),
|
||
cst_a_String=caml_string_of_jsbytes("a String"),
|
||
cst$92=caml_string_of_jsbytes(""),
|
||
cst$93=caml_string_of_jsbytes(""),
|
||
cst$94=caml_string_of_jsbytes(""),
|
||
cst$95=caml_string_of_jsbytes(""),
|
||
cst$96=caml_string_of_jsbytes(""),
|
||
cst$98=caml_string_of_jsbytes(""),
|
||
cst$97=caml_string_of_jsbytes(""),
|
||
cst_Illegal_character=caml_string_of_jsbytes("Illegal character "),
|
||
cst_Filename_chop_extension=
|
||
caml_string_of_jsbytes("Filename.chop_extension"),
|
||
cst$126=caml_string_of_jsbytes(""),
|
||
cst_Filename_chop_suffix=caml_string_of_jsbytes("Filename.chop_suffix"),
|
||
cst$125=caml_string_of_jsbytes(""),
|
||
cst_2_1$0=caml_string_of_jsbytes(" 2>&1"),
|
||
cst_2$0=caml_string_of_jsbytes(" 2>"),
|
||
cst$124=caml_string_of_jsbytes(""),
|
||
cst$116=caml_string_of_jsbytes(" >"),
|
||
cst$123=caml_string_of_jsbytes(""),
|
||
cst$117=caml_string_of_jsbytes(" <"),
|
||
cst$122=caml_string_of_jsbytes(""),
|
||
cst$118=caml_string_of_jsbytes(" "),
|
||
cst$119=caml_string_of_jsbytes(" "),
|
||
cst$120=caml_string_of_jsbytes('"'),
|
||
cst$121=caml_string_of_jsbytes(""),
|
||
cst_Filename_quote_command_bad=
|
||
caml_string_of_jsbytes("Filename.quote_command: bad file name "),
|
||
cst$114=caml_string_of_jsbytes('"'),
|
||
cst$115=caml_string_of_jsbytes('"'),
|
||
cst$112=caml_string_of_jsbytes("./"),
|
||
cst$111=caml_string_of_jsbytes(".\\"),
|
||
cst$110=caml_string_of_jsbytes("../"),
|
||
cst$109=caml_string_of_jsbytes("..\\"),
|
||
cst_2_1=caml_string_of_jsbytes(" 2>&1"),
|
||
cst_2=caml_string_of_jsbytes(" 2>"),
|
||
cst$108=caml_string_of_jsbytes(""),
|
||
cst$103=caml_string_of_jsbytes(" >"),
|
||
cst$107=caml_string_of_jsbytes(""),
|
||
cst$104=caml_string_of_jsbytes(" <"),
|
||
cst$106=caml_string_of_jsbytes(""),
|
||
cst$105=caml_string_of_jsbytes(" "),
|
||
cst$102=caml_string_of_jsbytes("./"),
|
||
cst$101=caml_string_of_jsbytes("../"),
|
||
cst$100=caml_string_of_jsbytes(""),
|
||
cst$99=caml_string_of_jsbytes(""),
|
||
null$0=caml_string_of_jsbytes("/dev/null"),
|
||
current_dir_name=caml_string_of_jsbytes("."),
|
||
parent_dir_name=caml_string_of_jsbytes(".."),
|
||
dir_sep=caml_string_of_jsbytes("/"),
|
||
cst_TMPDIR=caml_string_of_jsbytes("TMPDIR"),
|
||
cst_tmp=caml_string_of_jsbytes("/tmp"),
|
||
quotequote=caml_string_of_jsbytes("'\\''"),
|
||
null$1=caml_string_of_jsbytes("NUL"),
|
||
current_dir_name$0=caml_string_of_jsbytes("."),
|
||
parent_dir_name$0=caml_string_of_jsbytes(".."),
|
||
dir_sep$0=caml_string_of_jsbytes("\\"),
|
||
cst_TEMP=caml_string_of_jsbytes("TEMP"),
|
||
cst$113=caml_string_of_jsbytes("."),
|
||
null$2=caml_string_of_jsbytes("/dev/null"),
|
||
current_dir_name$1=caml_string_of_jsbytes("."),
|
||
parent_dir_name$1=caml_string_of_jsbytes(".."),
|
||
dir_sep$1=caml_string_of_jsbytes("/"),
|
||
cst_Cygwin=caml_string_of_jsbytes("Cygwin"),
|
||
cst_Win32=caml_string_of_jsbytes("Win32"),
|
||
zero$4=[254,0.,0.],
|
||
one$4=[254,1.,0.],
|
||
i=[254,0.,1.],
|
||
cst_Series_is_closed$0=caml_string_of_jsbytes("Series is closed"),
|
||
cst_Series_is_closed=caml_string_of_jsbytes("Series is closed"),
|
||
cst_Bigarray_array3_of_genarra=
|
||
caml_string_of_jsbytes("Bigarray.array3_of_genarray"),
|
||
cst_Bigarray_array2_of_genarra=
|
||
caml_string_of_jsbytes("Bigarray.array2_of_genarray"),
|
||
cst_Bigarray_array1_of_genarra=
|
||
caml_string_of_jsbytes("Bigarray.array1_of_genarray"),
|
||
cst_Bigarray_array0_of_genarra=
|
||
caml_string_of_jsbytes("Bigarray.array0_of_genarray"),
|
||
cst_Bigarray_Array3_of_array_n=
|
||
caml_string_of_jsbytes("Bigarray.Array3.of_array: non-cubic data"),
|
||
cst_Bigarray_Array3_of_array_n$0=
|
||
caml_string_of_jsbytes("Bigarray.Array3.of_array: non-cubic data"),
|
||
cst_Bigarray_Array2_of_array_n=
|
||
caml_string_of_jsbytes("Bigarray.Array2.of_array: non-rectangular data"),
|
||
Invalid_argument=global_data.Invalid_argument,
|
||
Failure=global_data.Failure,
|
||
Match_failure=global_data.Match_failure,
|
||
Assert_failure=global_data.Assert_failure,
|
||
Not_found=global_data.Not_found,
|
||
Out_of_memory=global_data.Out_of_memory,
|
||
Stack_overflow=global_data.Stack_overflow,
|
||
Sys_error=global_data.Sys_error,
|
||
End_of_file=global_data.End_of_file,
|
||
Division_by_zero=global_data.Division_by_zero,
|
||
Sys_blocked_io=global_data.Sys_blocked_io,
|
||
Undefined_recursive_module=global_data.Undefined_recursive_module,
|
||
_l_=[0,0,[0,6,0]],
|
||
_k_=[0,0,[0,7,0]],
|
||
_j_=[0,1,[0,3,[0,4,[0,6,0]]]],
|
||
_i_=[0,1,[0,3,[0,4,[0,7,0]]]],
|
||
_g_=[0,1],
|
||
_h_=[0,0],
|
||
_a_=runtime.caml_int64_create_lo_mi_hi(0,0,32752),
|
||
_b_=runtime.caml_int64_create_lo_mi_hi(0,0,65520),
|
||
_c_=runtime.caml_int64_create_lo_mi_hi(1,0,32752),
|
||
_d_=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,32751),
|
||
_e_=runtime.caml_int64_create_lo_mi_hi(0,0,16),
|
||
_f_=runtime.caml_int64_create_lo_mi_hi(0,0,15536),
|
||
_o_=[0,0,0],
|
||
_s_=[0,caml_string_of_jsbytes("array.ml"),238,4],
|
||
_u_=[0,caml_string_of_jsbytes("float.ml"),381,6],
|
||
_t_=[0,caml_string_of_jsbytes("float.ml"),208,14],
|
||
_F_=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,65535),
|
||
_E_=runtime.caml_int64_create_lo_mi_hi(0,0,0),
|
||
_D_=runtime.caml_int64_create_lo_mi_hi(1,0,0),
|
||
_C_=runtime.caml_int64_create_lo_mi_hi(1,0,0),
|
||
_G_=[0,0,0,0],
|
||
_H_=[0,0,0],
|
||
_I_=[0,caml_string_of_jsbytes("set.ml"),547,18],
|
||
_J_=[0,0,0,0],
|
||
_K_=[0,caml_string_of_jsbytes("map.ml"),398,10],
|
||
_L_=[0,0,0],
|
||
_M_=[0,caml_string_of_jsbytes("stream.ml"),53,12],
|
||
_N_=[0,0],
|
||
_O_=[0,caml_string_of_jsbytes("stream.ml"),82,12],
|
||
_Y_=[0,caml_string_of_jsbytes("buffer.ml"),282,9],
|
||
_X_=[0,caml_string_of_jsbytes("buffer.ml"),263,2],
|
||
_W_=[0,caml_string_of_jsbytes("buffer.ml"),195,19],
|
||
_V_=[0,caml_string_of_jsbytes("buffer.ml"),213,8],
|
||
_U_=[0,caml_string_of_jsbytes("buffer.ml"),174,19],
|
||
_T_=[0,caml_string_of_jsbytes("buffer.ml"),192,8],
|
||
_S_=[0,caml_string_of_jsbytes("buffer.ml"),138,19],
|
||
_R_=[0,caml_string_of_jsbytes("buffer.ml"),171,8],
|
||
_Q_=[0,caml_string_of_jsbytes("buffer.ml"),93,2],
|
||
_P_=[0,caml_string_of_jsbytes("buffer.ml"),94,2],
|
||
___=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),850,23],
|
||
_aj_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),814,21],
|
||
_ab_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),815,21],
|
||
_ak_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),818,21],
|
||
_ac_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),819,21],
|
||
_al_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),822,19],
|
||
_ad_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),823,19],
|
||
_am_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),826,22],
|
||
_ae_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),827,22],
|
||
_an_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),831,30],
|
||
_af_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),832,30],
|
||
_ah_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),836,26],
|
||
_$_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),837,26],
|
||
_ai_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),846,28],
|
||
_aa_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),847,28],
|
||
_ag_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),851,23],
|
||
_ap_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1558,4],
|
||
_aq_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1626,39],
|
||
_ar_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1649,31],
|
||
_as_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1650,31],
|
||
_at_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1830,8],
|
||
_aX_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("bad input: format type mismatch between "),
|
||
[3,0,[11,caml_string_of_jsbytes(" and "),[3,0,0]]]],
|
||
caml_string_of_jsbytes
|
||
("bad input: format type mismatch between %S and %S")],
|
||
_aW_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("bad input: format type mismatch between "),
|
||
[3,0,[11,caml_string_of_jsbytes(" and "),[3,0,0]]]],
|
||
caml_string_of_jsbytes
|
||
("bad input: format type mismatch between %S and %S")],
|
||
_az_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": at character number "),
|
||
[4,0,0,0,[11,caml_string_of_jsbytes(", duplicate flag "),[1,0]]]]]],
|
||
caml_string_of_jsbytes
|
||
("invalid format %S: at character number %d, duplicate flag %C")],
|
||
_aA_=[0,1,0],
|
||
_aB_=[0,0],
|
||
_aC_=[1,0],
|
||
_aD_=[1,1],
|
||
_aF_=[1,1],
|
||
_aE_=[1,1],
|
||
_aJ_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": at character number "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(", flag "),
|
||
[1,
|
||
[11,
|
||
caml_string_of_jsbytes(" is only allowed after the '"),
|
||
[12,
|
||
37,
|
||
[11,
|
||
caml_string_of_jsbytes("', before padding and precision"),
|
||
0]]]]]]]]],
|
||
caml_string_of_jsbytes
|
||
("invalid format %S: at character number %d, flag %C is only allowed after the '%%', before padding and precision")],
|
||
_aG_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": at character number "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(', invalid conversion "'),
|
||
[12,37,[0,[12,34,0]]]]]]]],
|
||
caml_string_of_jsbytes
|
||
('invalid format %S: at character number %d, invalid conversion "%%%c"')],
|
||
_aH_=[0,0],
|
||
_aI_=[0,0],
|
||
_aK_=[0,[12,64,0]],
|
||
_aL_=[0,caml_string_of_jsbytes("@ "),1,0],
|
||
_aM_=[0,caml_string_of_jsbytes("@,"),0,0],
|
||
_aN_=[2,60],
|
||
_aO_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": '"),
|
||
[12,
|
||
37,
|
||
[11,
|
||
caml_string_of_jsbytes
|
||
("' alone is not accepted in character sets, use "),
|
||
[12,
|
||
37,
|
||
[12,
|
||
37,
|
||
[11,
|
||
caml_string_of_jsbytes(" instead at position "),
|
||
[4,0,0,0,[12,46,0]]]]]]]]]],
|
||
caml_string_of_jsbytes
|
||
("invalid format %S: '%%' alone is not accepted in character sets, use %%%% instead at position %d.")],
|
||
_aP_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": integer "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(" is greater than the limit "),
|
||
[4,0,0,0,0]]]]]],
|
||
caml_string_of_jsbytes
|
||
("invalid format %S: integer %d is greater than the limit %d")],
|
||
_aQ_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2837,11],
|
||
_aR_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(': unclosed sub-format, expected "'),
|
||
[12,
|
||
37,
|
||
[0,
|
||
[11,caml_string_of_jsbytes('" at character number '),[4,0,0,0,0]]]]]]],
|
||
caml_string_of_jsbytes
|
||
('invalid format %S: unclosed sub-format, expected "%%%c" at character number %d')],
|
||
_aS_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2899,34],
|
||
_aT_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2935,28],
|
||
_aU_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2957,11],
|
||
_aV_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": at character number "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(", "),
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(" is incompatible with '"),
|
||
[0,[11,caml_string_of_jsbytes("' in sub-format "),[3,0,0]]]]]]]]]],
|
||
caml_string_of_jsbytes
|
||
("invalid format %S: at character number %d, %s is incompatible with '%c' in sub-format %S")],
|
||
_ay_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": at character number "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(", "),
|
||
[2,0,[11,caml_string_of_jsbytes(" expected, read "),[1,0]]]]]]]],
|
||
caml_string_of_jsbytes
|
||
("invalid format %S: at character number %d, %s expected, read %C")],
|
||
_ax_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": at character number "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(", '"),
|
||
[0,[11,caml_string_of_jsbytes("' without "),[2,0,0]]]]]]]],
|
||
caml_string_of_jsbytes
|
||
("invalid format %S: at character number %d, '%c' without %s")],
|
||
_aw_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid format "),
|
||
[3,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": at character number "),
|
||
[4,0,0,0,[11,caml_string_of_jsbytes(", "),[2,0,0]]]]]],
|
||
caml_string_of_jsbytes("invalid format %S: at character number %d, %s")],
|
||
_av_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("invalid box description "),[3,0,0]],
|
||
caml_string_of_jsbytes("invalid box description %S")],
|
||
_au_=[0,0,4],
|
||
_ao_=[0,103],
|
||
_Z_=[0,0,0],
|
||
_bh_=[0,[2,0,[0,0]],caml_string_of_jsbytes("%s%c")],
|
||
_bb_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
|
||
_bc_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
|
||
_a$_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
|
||
_ba_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
|
||
_a9_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
|
||
_a__=[0,[2,0,0],caml_string_of_jsbytes("%s")],
|
||
_a3_=
|
||
[0,
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": unknown option '"),
|
||
[2,0,[11,caml_string_of_jsbytes("'.\n"),0]]]],
|
||
caml_string_of_jsbytes("%s: unknown option '%s'.\n")],
|
||
_a6_=
|
||
[0,
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": wrong argument '"),
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes("'; option '"),
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes("' expects "),
|
||
[2,0,[11,caml_string_of_jsbytes(".\n"),0]]]]]]]],
|
||
caml_string_of_jsbytes
|
||
("%s: wrong argument '%s'; option '%s' expects %s.\n")],
|
||
_a7_=
|
||
[0,
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": option '"),
|
||
[2,0,[11,caml_string_of_jsbytes("' needs an argument.\n"),0]]]],
|
||
caml_string_of_jsbytes("%s: option '%s' needs an argument.\n")],
|
||
_a8_=
|
||
[0,
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(": "),
|
||
[2,0,[11,caml_string_of_jsbytes(".\n"),0]]]],
|
||
caml_string_of_jsbytes("%s: %s.\n")],
|
||
_a4_=[0,caml_string_of_jsbytes("-help")],
|
||
_a5_=[0,caml_string_of_jsbytes("--help")],
|
||
_a2_=[0,[2,0,0],caml_string_of_jsbytes("%s")],
|
||
_a1_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")],
|
||
_a0_=[0,caml_string_of_jsbytes("-help")],
|
||
_aY_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes(" "),[2,0,[12,32,[2,0,[12,10,0]]]]],
|
||
caml_string_of_jsbytes(" %s %s\n")],
|
||
_aZ_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes(" "),[2,0,[12,32,[2,0,[2,0,[12,10,0]]]]]],
|
||
caml_string_of_jsbytes(" %s %s%s\n")],
|
||
_bm_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes(", "),[2,0,[2,0,0]]],
|
||
caml_string_of_jsbytes(", %s%s")],
|
||
_bv_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")],
|
||
_bt_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")],
|
||
_bu_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes
|
||
("(Program not linked with -g, cannot print stack backtrace)\n"),
|
||
0],
|
||
caml_string_of_jsbytes
|
||
("(Program not linked with -g, cannot print stack backtrace)\n")],
|
||
_br_=
|
||
[0,
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(' file "'),
|
||
[2,
|
||
0,
|
||
[12,
|
||
34,
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(", line "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(", characters "),
|
||
[4,0,0,0,[12,45,partial]]]]]]]]]],
|
||
caml_string_of_jsbytes('%s file "%s"%s, line %d, characters %d-%d')],
|
||
_bs_=
|
||
[0,
|
||
[2,0,[11,caml_string_of_jsbytes(" unknown location"),0]],
|
||
caml_string_of_jsbytes("%s unknown location")],
|
||
_bq_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("Uncaught exception: "),[2,0,[12,10,0]]],
|
||
caml_string_of_jsbytes("Uncaught exception: %s\n")],
|
||
_bp_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("Uncaught exception: "),[2,0,[12,10,0]]],
|
||
caml_string_of_jsbytes("Uncaught exception: %s\n")],
|
||
_bn_=[0,[12,40,[2,0,[2,0,[12,41,0]]]],caml_string_of_jsbytes("(%s%s)")],
|
||
_bo_=[0,[12,40,[2,0,[12,41,0]]],caml_string_of_jsbytes("(%s)")],
|
||
_bl_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")],
|
||
_bk_=[0,[3,0,0],caml_string_of_jsbytes("%S")],
|
||
_bD_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("minor_collections: "),[4,0,0,0,[12,10,0]]],
|
||
caml_string_of_jsbytes("minor_collections: %d\n")],
|
||
_bE_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("major_collections: "),[4,0,0,0,[12,10,0]]],
|
||
caml_string_of_jsbytes("major_collections: %d\n")],
|
||
_bF_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("compactions: "),[4,0,0,0,[12,10,0]]],
|
||
caml_string_of_jsbytes("compactions: %d\n")],
|
||
_bG_=[0,[12,10,0],caml_string_of_jsbytes("\n")],
|
||
_bH_=[0,[8,[0,0,0],0,[0,0],0],caml_string_of_jsbytes("%.0f")],
|
||
_bI_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("minor_words: "),
|
||
[8,[0,0,0],[1,1],[0,0],[12,10,0]]],
|
||
caml_string_of_jsbytes("minor_words: %*.0f\n")],
|
||
_bJ_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("promoted_words: "),
|
||
[8,[0,0,0],[1,1],[0,0],[12,10,0]]],
|
||
caml_string_of_jsbytes("promoted_words: %*.0f\n")],
|
||
_bK_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("major_words: "),
|
||
[8,[0,0,0],[1,1],[0,0],[12,10,0]]],
|
||
caml_string_of_jsbytes("major_words: %*.0f\n")],
|
||
_bL_=[0,[12,10,0],caml_string_of_jsbytes("\n")],
|
||
_bM_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")],
|
||
_bN_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("top_heap_words: "),[4,0,[1,1],0,[12,10,0]]],
|
||
caml_string_of_jsbytes("top_heap_words: %*d\n")],
|
||
_bO_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("heap_words: "),[4,0,[1,1],0,[12,10,0]]],
|
||
caml_string_of_jsbytes("heap_words: %*d\n")],
|
||
_bP_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("live_words: "),[4,0,[1,1],0,[12,10,0]]],
|
||
caml_string_of_jsbytes("live_words: %*d\n")],
|
||
_bQ_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("free_words: "),[4,0,[1,1],0,[12,10,0]]],
|
||
caml_string_of_jsbytes("free_words: %*d\n")],
|
||
_bR_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("largest_free: "),[4,0,[1,1],0,[12,10,0]]],
|
||
caml_string_of_jsbytes("largest_free: %*d\n")],
|
||
_bS_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("fragments: "),[4,0,[1,1],0,[12,10,0]]],
|
||
caml_string_of_jsbytes("fragments: %*d\n")],
|
||
_bT_=[0,[12,10,0],caml_string_of_jsbytes("\n")],
|
||
_bU_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("live_blocks: "),[4,0,0,0,[12,10,0]]],
|
||
caml_string_of_jsbytes("live_blocks: %d\n")],
|
||
_bV_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("free_blocks: "),[4,0,0,0,[12,10,0]]],
|
||
caml_string_of_jsbytes("free_blocks: %d\n")],
|
||
_bW_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("heap_chunks: "),[4,0,0,0,[12,10,0]]],
|
||
caml_string_of_jsbytes("heap_chunks: %d\n")],
|
||
_bZ_=runtime.caml_int64_create_lo_mi_hi(1,0,0),
|
||
_b0_=runtime.caml_int64_create_lo_mi_hi(0,0,0),
|
||
_b1_=
|
||
[0,
|
||
987910699,
|
||
495797812,
|
||
364182224,
|
||
414272206,
|
||
318284740,
|
||
990407751,
|
||
383018966,
|
||
270373319,
|
||
840823159,
|
||
24560019,
|
||
536292337,
|
||
512266505,
|
||
189156120,
|
||
730249596,
|
||
143776328,
|
||
51606627,
|
||
140166561,
|
||
366354223,
|
||
1003410265,
|
||
700563762,
|
||
981890670,
|
||
913149062,
|
||
526082594,
|
||
1021425055,
|
||
784300257,
|
||
667753350,
|
||
630144451,
|
||
949649812,
|
||
48546892,
|
||
415514493,
|
||
258888527,
|
||
511570777,
|
||
89983870,
|
||
283659902,
|
||
308386020,
|
||
242688715,
|
||
482270760,
|
||
865188196,
|
||
1027664170,
|
||
207196989,
|
||
193777847,
|
||
619708188,
|
||
671350186,
|
||
149669678,
|
||
257044018,
|
||
87658204,
|
||
558145612,
|
||
183450813,
|
||
28133145,
|
||
901332182,
|
||
710253903,
|
||
510646120,
|
||
652377910,
|
||
409934019,
|
||
801085050],
|
||
_b5_=[0,0],
|
||
_b4_=[0,caml_string_of_jsbytes("hashtbl.ml"),102,23],
|
||
_b8_=[3,0,3],
|
||
_b7_=[0,caml_string_of_jsbytes("")],
|
||
_b6_=[0,caml_string_of_jsbytes(""),0,caml_string_of_jsbytes("")],
|
||
_cm_=[0,91],
|
||
_cl_=[0,123],
|
||
_cn_=[0,caml_string_of_jsbytes("scanf.ml"),1453,13],
|
||
_co_=[0,[3,0,[10,0]],caml_string_of_jsbytes("%S%!")],
|
||
_ck_=[0,37,caml_string_of_jsbytes("")],
|
||
_cj_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("scanf: bad input at char number "),
|
||
[4,3,0,0,[11,caml_string_of_jsbytes(": "),[2,0,0]]]],
|
||
caml_string_of_jsbytes("scanf: bad input at char number %i: %s")],
|
||
_ci_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("the character "),
|
||
[1,[11,caml_string_of_jsbytes(" cannot start a boolean"),0]]],
|
||
caml_string_of_jsbytes("the character %C cannot start a boolean")],
|
||
_ch_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("bad character hexadecimal encoding \\"),
|
||
[0,[0,0]]],
|
||
caml_string_of_jsbytes("bad character hexadecimal encoding \\%c%c")],
|
||
_cg_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("bad character decimal encoding \\"),
|
||
[0,[0,[0,0]]]],
|
||
caml_string_of_jsbytes("bad character decimal encoding \\%c%c%c")],
|
||
_cf_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("character "),
|
||
[1,
|
||
[11,
|
||
caml_string_of_jsbytes(" is not a valid "),
|
||
[2,0,[11,caml_string_of_jsbytes(" digit"),0]]]]],
|
||
caml_string_of_jsbytes("character %C is not a valid %s digit")],
|
||
_ce_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("character "),
|
||
[1,[11,caml_string_of_jsbytes(" is not a decimal digit"),0]]],
|
||
caml_string_of_jsbytes("character %C is not a decimal digit")],
|
||
_cd_=[0,caml_string_of_jsbytes("scanf.ml"),555,9],
|
||
_cc_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("invalid boolean '"),[2,0,[12,39,0]]],
|
||
caml_string_of_jsbytes("invalid boolean '%s'")],
|
||
_cb_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("looking for "),
|
||
[1,[11,caml_string_of_jsbytes(", found "),[1,0]]]],
|
||
caml_string_of_jsbytes("looking for %C, found %C")],
|
||
_ca_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("scanning of "),
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes
|
||
(" failed: premature end of file occurred before end of token"),
|
||
0]]],
|
||
caml_string_of_jsbytes
|
||
("scanning of %s failed: premature end of file occurred before end of token")],
|
||
_b$_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("scanning of "),
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes
|
||
(" failed: the specified length was too short for token"),
|
||
0]]],
|
||
caml_string_of_jsbytes
|
||
("scanning of %s failed: the specified length was too short for token")],
|
||
_b__=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("illegal escape character "),[1,0]],
|
||
caml_string_of_jsbytes("illegal escape character %C")],
|
||
_cv_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),438,17],
|
||
_cu_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),420,13],
|
||
_ct_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),417,13],
|
||
_cs_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),414,13],
|
||
_cr_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),411,13],
|
||
_cq_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),408,13],
|
||
_cp_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),281,50],
|
||
_cy_=[0,0],
|
||
_cx_=[0,0],
|
||
_cw_=[0,0],
|
||
_cD_=[0,7,0],
|
||
_cC_=[0,1,[0,3,[0,5,0]]],
|
||
_cB_=[0,[2,0,[4,6,[0,2,6],0,[2,0,0]]],caml_string_of_jsbytes("%s%06x%s")],
|
||
_cA_=[0,caml_string_of_jsbytes('"'),0],
|
||
_cE_=[254,0.,0.];
|
||
function erase_rel(param)
|
||
{if(typeof param === "number")
|
||
return 0;
|
||
else
|
||
switch(param[0])
|
||
{case 0:var rest=param[1];return [0,erase_rel(rest)];
|
||
case 1:var rest$0=param[1];return [1,erase_rel(rest$0)];
|
||
case 2:var rest$1=param[1];return [2,erase_rel(rest$1)];
|
||
case 3:var rest$2=param[1];return [3,erase_rel(rest$2)];
|
||
case 4:var rest$3=param[1];return [4,erase_rel(rest$3)];
|
||
case 5:var rest$4=param[1];return [5,erase_rel(rest$4)];
|
||
case 6:var rest$5=param[1];return [6,erase_rel(rest$5)];
|
||
case 7:var rest$6=param[1];return [7,erase_rel(rest$6)];
|
||
case 8:
|
||
var rest$7=param[2],ty=param[1];return [8,ty,erase_rel(rest$7)];
|
||
case 9:
|
||
var rest$8=param[3],ty1=param[1];
|
||
return [9,ty1,ty1,erase_rel(rest$8)];
|
||
case 10:var rest$9=param[1];return [10,erase_rel(rest$9)];
|
||
case 11:var rest$10=param[1];return [11,erase_rel(rest$10)];
|
||
case 12:var rest$11=param[1];return [12,erase_rel(rest$11)];
|
||
case 13:var rest$12=param[1];return [13,erase_rel(rest$12)];
|
||
default:var rest$13=param[1];return [14,erase_rel(rest$13)]}}
|
||
function concat_fmtty(fmtty1,fmtty2)
|
||
{if(typeof fmtty1 === "number")
|
||
return fmtty2;
|
||
else
|
||
switch(fmtty1[0])
|
||
{case 0:var rest=fmtty1[1];return [0,concat_fmtty(rest,fmtty2)];
|
||
case 1:var rest$0=fmtty1[1];return [1,concat_fmtty(rest$0,fmtty2)];
|
||
case 2:var rest$1=fmtty1[1];return [2,concat_fmtty(rest$1,fmtty2)];
|
||
case 3:var rest$2=fmtty1[1];return [3,concat_fmtty(rest$2,fmtty2)];
|
||
case 4:var rest$3=fmtty1[1];return [4,concat_fmtty(rest$3,fmtty2)];
|
||
case 5:var rest$4=fmtty1[1];return [5,concat_fmtty(rest$4,fmtty2)];
|
||
case 6:var rest$5=fmtty1[1];return [6,concat_fmtty(rest$5,fmtty2)];
|
||
case 7:var rest$6=fmtty1[1];return [7,concat_fmtty(rest$6,fmtty2)];
|
||
case 8:
|
||
var rest$7=fmtty1[2],ty=fmtty1[1];
|
||
return [8,ty,concat_fmtty(rest$7,fmtty2)];
|
||
case 9:
|
||
var rest$8=fmtty1[3],ty2=fmtty1[2],ty1=fmtty1[1];
|
||
return [9,ty1,ty2,concat_fmtty(rest$8,fmtty2)];
|
||
case 10:var rest$9=fmtty1[1];return [10,concat_fmtty(rest$9,fmtty2)];
|
||
case 11:
|
||
var rest$10=fmtty1[1];return [11,concat_fmtty(rest$10,fmtty2)];
|
||
case 12:
|
||
var rest$11=fmtty1[1];return [12,concat_fmtty(rest$11,fmtty2)];
|
||
case 13:
|
||
var rest$12=fmtty1[1];return [13,concat_fmtty(rest$12,fmtty2)];
|
||
default:
|
||
var rest$13=fmtty1[1];return [14,concat_fmtty(rest$13,fmtty2)]}}
|
||
function concat_fmt(fmt1,fmt2)
|
||
{if(typeof fmt1 === "number")
|
||
return fmt2;
|
||
else
|
||
switch(fmt1[0])
|
||
{case 0:var rest=fmt1[1];return [0,concat_fmt(rest,fmt2)];
|
||
case 1:var rest$0=fmt1[1];return [1,concat_fmt(rest$0,fmt2)];
|
||
case 2:
|
||
var rest$1=fmt1[2],pad=fmt1[1];
|
||
return [2,pad,concat_fmt(rest$1,fmt2)];
|
||
case 3:
|
||
var rest$2=fmt1[2],pad$0=fmt1[1];
|
||
return [3,pad$0,concat_fmt(rest$2,fmt2)];
|
||
case 4:
|
||
var rest$3=fmt1[4],prec=fmt1[3],pad$1=fmt1[2],iconv=fmt1[1];
|
||
return [4,iconv,pad$1,prec,concat_fmt(rest$3,fmt2)];
|
||
case 5:
|
||
var rest$4=fmt1[4],prec$0=fmt1[3],pad$2=fmt1[2],iconv$0=fmt1[1];
|
||
return [5,iconv$0,pad$2,prec$0,concat_fmt(rest$4,fmt2)];
|
||
case 6:
|
||
var rest$5=fmt1[4],prec$1=fmt1[3],pad$3=fmt1[2],iconv$1=fmt1[1];
|
||
return [6,iconv$1,pad$3,prec$1,concat_fmt(rest$5,fmt2)];
|
||
case 7:
|
||
var rest$6=fmt1[4],prec$2=fmt1[3],pad$4=fmt1[2],iconv$2=fmt1[1];
|
||
return [7,iconv$2,pad$4,prec$2,concat_fmt(rest$6,fmt2)];
|
||
case 8:
|
||
var rest$7=fmt1[4],prec$3=fmt1[3],pad$5=fmt1[2],fconv=fmt1[1];
|
||
return [8,fconv,pad$5,prec$3,concat_fmt(rest$7,fmt2)];
|
||
case 9:
|
||
var rest$8=fmt1[2],pad$6=fmt1[1];
|
||
return [9,pad$6,concat_fmt(rest$8,fmt2)];
|
||
case 10:var rest$9=fmt1[1];return [10,concat_fmt(rest$9,fmt2)];
|
||
case 11:
|
||
var rest$10=fmt1[2],str=fmt1[1];
|
||
return [11,str,concat_fmt(rest$10,fmt2)];
|
||
case 12:
|
||
var rest$11=fmt1[2],chr=fmt1[1];
|
||
return [12,chr,concat_fmt(rest$11,fmt2)];
|
||
case 13:
|
||
var rest$12=fmt1[3],fmtty=fmt1[2],pad$7=fmt1[1];
|
||
return [13,pad$7,fmtty,concat_fmt(rest$12,fmt2)];
|
||
case 14:
|
||
var rest$13=fmt1[3],fmtty$0=fmt1[2],pad$8=fmt1[1];
|
||
return [14,pad$8,fmtty$0,concat_fmt(rest$13,fmt2)];
|
||
case 15:var rest$14=fmt1[1];return [15,concat_fmt(rest$14,fmt2)];
|
||
case 16:var rest$15=fmt1[1];return [16,concat_fmt(rest$15,fmt2)];
|
||
case 17:
|
||
var rest$16=fmt1[2],fmting_lit=fmt1[1];
|
||
return [17,fmting_lit,concat_fmt(rest$16,fmt2)];
|
||
case 18:
|
||
var rest$17=fmt1[2],fmting_gen=fmt1[1];
|
||
return [18,fmting_gen,concat_fmt(rest$17,fmt2)];
|
||
case 19:var rest$18=fmt1[1];return [19,concat_fmt(rest$18,fmt2)];
|
||
case 20:
|
||
var rest$19=fmt1[3],char_set=fmt1[2],width_opt=fmt1[1];
|
||
return [20,width_opt,char_set,concat_fmt(rest$19,fmt2)];
|
||
case 21:
|
||
var rest$20=fmt1[2],counter=fmt1[1];
|
||
return [21,counter,concat_fmt(rest$20,fmt2)];
|
||
case 22:var rest$21=fmt1[1];return [22,concat_fmt(rest$21,fmt2)];
|
||
case 23:
|
||
var rest$22=fmt1[2],ign=fmt1[1];
|
||
return [23,ign,concat_fmt(rest$22,fmt2)];
|
||
default:
|
||
var rest$23=fmt1[3],f=fmt1[2],arity=fmt1[1];
|
||
return [24,arity,f,concat_fmt(rest$23,fmt2)]}}
|
||
var CamlinternalFormatBasics=[0,concat_fmtty,erase_rel,concat_fmt];
|
||
caml_register_global
|
||
(734,CamlinternalFormatBasics,"CamlinternalFormatBasics");
|
||
function failwith(s){throw [0,Failure,s]}
|
||
function invalid_arg(s){throw [0,Invalid_argument,s]}
|
||
var Exit=[248,cst_Stdlib_Exit,caml_fresh_oo_id(0)];
|
||
function min(x,y){return caml_lessequal(x,y)?x:y}
|
||
function max(x,y){return caml_greaterequal(x,y)?x:y}
|
||
function abs(x){return 0 <= x?x:- x | 0}
|
||
function lnot(x){return x ^ -1}
|
||
var
|
||
infinity=caml_int64_float_of_bits(_a_),
|
||
neg_infinity=caml_int64_float_of_bits(_b_),
|
||
nan=caml_int64_float_of_bits(_c_),
|
||
max_float=caml_int64_float_of_bits(_d_),
|
||
min_float=caml_int64_float_of_bits(_e_),
|
||
epsilon=caml_int64_float_of_bits(_f_),
|
||
max_int=2147483647,
|
||
min_int=-2147483648;
|
||
function symbol(s1,s2)
|
||
{var
|
||
l1=caml_ml_string_length(s1),
|
||
l2=caml_ml_string_length(s2),
|
||
s=caml_create_bytes(l1 + l2 | 0);
|
||
caml_blit_string(s1,0,s,0,l1);
|
||
caml_blit_string(s2,0,s,l1,l2);
|
||
return caml_string_of_bytes(s)}
|
||
function char_of_int(n)
|
||
{if(0 <= n && ! (255 < n))return n;return invalid_arg(cst_char_of_int)}
|
||
function string_of_bool(b){return b?cst_true:cst_false}
|
||
function bool_of_string(param)
|
||
{return caml_string_notequal(param,cst_false$0)
|
||
?caml_string_notequal(param,cst_true$0)
|
||
?invalid_arg(cst_bool_of_string)
|
||
:1
|
||
:0}
|
||
function bool_of_string_opt(param)
|
||
{return caml_string_notequal(param,cst_false$1)
|
||
?caml_string_notequal(param,cst_true$1)?0:_g_
|
||
:_h_}
|
||
function string_of_int(n){return caml_string_of_jsbytes("" + n)}
|
||
function int_of_string_opt(s)
|
||
{try
|
||
{var _As_=[0,caml_int_of_string(s)];return _As_}
|
||
catch(_At_)
|
||
{_At_ = caml_wrap_exception(_At_);
|
||
if(_At_[1] === Failure)return 0;
|
||
throw _At_}}
|
||
function valid_float_lexem(s)
|
||
{var l=caml_ml_string_length(s),i=0;
|
||
for(;;)
|
||
{if(l <= i)return symbol(s,cst);
|
||
var match=caml_string_get(s,i),switch$0=0;
|
||
if(48 <= match)
|
||
{if(! (58 <= match))switch$0 = 1}
|
||
else
|
||
if(45 === match)switch$0 = 1;
|
||
if(switch$0){var i$0=i + 1 | 0,i=i$0;continue}
|
||
return s}}
|
||
function to_string(f)
|
||
{return valid_float_lexem(caml_format_float(cst_12g,f))}
|
||
function of_string_opt(s)
|
||
{try
|
||
{var _Aq_=[0,caml_float_of_string(s)];return _Aq_}
|
||
catch(_Ar_)
|
||
{_Ar_ = caml_wrap_exception(_Ar_);
|
||
if(_Ar_[1] === Failure)return 0;
|
||
throw _Ar_}}
|
||
function append(l1,l2)
|
||
{if(l1){var tl=l1[2],hd=l1[1];return [0,hd,append(tl,l2)]}return l2}
|
||
var
|
||
stdin=caml_ml_open_descriptor_in(0),
|
||
stdout=caml_ml_open_descriptor_out(1),
|
||
stderr=caml_ml_open_descriptor_out(2);
|
||
function open_out_gen(mode,perm,name)
|
||
{var c=caml_ml_open_descriptor_out(caml_sys_open(name,mode,perm));
|
||
caml_ml_set_channel_name(c,name);
|
||
return c}
|
||
function open_out(name){return open_out_gen(_i_,438,name)}
|
||
function open_out_bin(name){return open_out_gen(_j_,438,name)}
|
||
function flush_all(param)
|
||
{function iter(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],a=param$0[1];
|
||
try
|
||
{caml_ml_flush(a)}
|
||
catch(_Ap_)
|
||
{_Ap_ = caml_wrap_exception(_Ap_);
|
||
if(_Ap_[1] !== Sys_error)throw _Ap_;
|
||
var _Ao_=_Ap_}
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
return iter(runtime.caml_ml_out_channels_list(0))}
|
||
function output_bytes(oc,s)
|
||
{return caml_ml_output_bytes(oc,s,0,caml_ml_bytes_length(s))}
|
||
function output_string(oc,s)
|
||
{return caml_ml_output(oc,s,0,caml_ml_string_length(s))}
|
||
function output(oc,s,ofs,len)
|
||
{if
|
||
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
|
||
return caml_ml_output_bytes(oc,s,ofs,len);
|
||
return invalid_arg(cst_output)}
|
||
function output_substring(oc,s,ofs,len)
|
||
{if
|
||
(0
|
||
<=
|
||
ofs
|
||
&&
|
||
0
|
||
<=
|
||
len
|
||
&&
|
||
!
|
||
((caml_ml_string_length(s) - len | 0) < ofs))
|
||
return caml_ml_output(oc,s,ofs,len);
|
||
return invalid_arg(cst_output_substring)}
|
||
function output_value(chan,v){return caml_output_value(chan,v,0)}
|
||
function close_out(oc){caml_ml_flush(oc);return caml_ml_close_channel(oc)}
|
||
function close_out_noerr(oc)
|
||
{try {caml_ml_flush(oc)}catch(_An_){}
|
||
try
|
||
{var _Al_=caml_ml_close_channel(oc);return _Al_}
|
||
catch(_Am_){return 0}}
|
||
function open_in_gen(mode,perm,name)
|
||
{var c=caml_ml_open_descriptor_in(caml_sys_open(name,mode,perm));
|
||
caml_ml_set_channel_name(c,name);
|
||
return c}
|
||
function open_in(name){return open_in_gen(_k_,0,name)}
|
||
function open_in_bin(name){return open_in_gen(_l_,0,name)}
|
||
function input(ic,s,ofs,len)
|
||
{if
|
||
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
|
||
return caml_ml_input(ic,s,ofs,len);
|
||
return invalid_arg(cst_input)}
|
||
function unsafe_really_input(ic,s,ofs,len)
|
||
{var ofs$0=ofs,len$0=len;
|
||
for(;;)
|
||
{if(0 < len$0)
|
||
{var r=caml_ml_input(ic,s,ofs$0,len$0);
|
||
if(0 === r)throw End_of_file;
|
||
var len$1=len$0 - r | 0,ofs$1=ofs$0 + r | 0,ofs$0=ofs$1,len$0=len$1;
|
||
continue}
|
||
return 0}}
|
||
function really_input(ic,s,ofs,len)
|
||
{if
|
||
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
|
||
return unsafe_really_input(ic,s,ofs,len);
|
||
return invalid_arg(cst_really_input)}
|
||
function really_input_string(ic,len)
|
||
{var s=caml_create_bytes(len);
|
||
really_input(ic,s,0,len);
|
||
return caml_string_of_bytes(s)}
|
||
function input_line(chan)
|
||
{function build_result(buf,pos,param)
|
||
{var pos$0=pos,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var tl=param$0[2],hd=param$0[1],len=caml_ml_bytes_length(hd);
|
||
caml_blit_bytes(hd,0,buf,pos$0 - len | 0,len);
|
||
var pos$1=pos$0 - len | 0,pos$0=pos$1,param$0=tl;
|
||
continue}
|
||
return buf}}
|
||
var accu=0,len=0;
|
||
for(;;)
|
||
{var n=runtime.caml_ml_input_scan_line(chan);
|
||
if(0 === n)
|
||
{if(! accu)throw End_of_file;
|
||
var _Ak_=build_result(caml_create_bytes(len),len,accu)}
|
||
else
|
||
{if(! (0 < n))
|
||
{var beg=caml_create_bytes(- n | 0);
|
||
caml_ml_input(chan,beg,0,- n | 0);
|
||
var len$1=len - n | 0,accu$0=[0,beg,accu],accu=accu$0,len=len$1;
|
||
continue}
|
||
var res=caml_create_bytes(n - 1 | 0);
|
||
caml_ml_input(chan,res,0,n - 1 | 0);
|
||
caml_ml_input_char(chan);
|
||
if(accu)
|
||
var
|
||
len$0=(len + n | 0) - 1 | 0,
|
||
_Ak_=build_result(caml_create_bytes(len$0),len$0,[0,res,accu]);
|
||
else
|
||
var _Ak_=res}
|
||
return caml_string_of_bytes(_Ak_)}}
|
||
function close_in_noerr(ic)
|
||
{try
|
||
{var _Ai_=caml_ml_close_channel(ic);return _Ai_}
|
||
catch(_Aj_){return 0}}
|
||
function print_char(c){return caml_ml_output_char(stdout,c)}
|
||
function print_string(s){return output_string(stdout,s)}
|
||
function print_bytes(s){return output_bytes(stdout,s)}
|
||
function print_int(i)
|
||
{return output_string(stdout,caml_string_of_jsbytes("" + i))}
|
||
function print_float(f){return output_string(stdout,to_string(f))}
|
||
function print_endline(s)
|
||
{output_string(stdout,s);
|
||
caml_ml_output_char(stdout,10);
|
||
return caml_ml_flush(stdout)}
|
||
function print_newline(param)
|
||
{caml_ml_output_char(stdout,10);return caml_ml_flush(stdout)}
|
||
function prerr_char(c){return caml_ml_output_char(stderr,c)}
|
||
function prerr_string(s){return output_string(stderr,s)}
|
||
function prerr_bytes(s){return output_bytes(stderr,s)}
|
||
function prerr_int(i)
|
||
{return output_string(stderr,caml_string_of_jsbytes("" + i))}
|
||
function prerr_float(f){return output_string(stderr,to_string(f))}
|
||
function prerr_endline(s)
|
||
{output_string(stderr,s);
|
||
caml_ml_output_char(stderr,10);
|
||
return caml_ml_flush(stderr)}
|
||
function prerr_newline(param)
|
||
{caml_ml_output_char(stderr,10);return caml_ml_flush(stderr)}
|
||
function read_line(param){caml_ml_flush(stdout);return input_line(stdin)}
|
||
function read_int(param){return caml_int_of_string(read_line(0))}
|
||
function read_int_opt(param){return int_of_string_opt(read_line(0))}
|
||
function read_float(param){return caml_float_of_string(read_line(0))}
|
||
function read_float_opt(param){return of_string_opt(read_line(0))}
|
||
function string_of_format(param){var str=param[2];return str}
|
||
function symbol$0(param,_Ag_)
|
||
{var
|
||
str2=_Ag_[2],
|
||
fmt2=_Ag_[1],
|
||
str1=param[2],
|
||
fmt1=param[1],
|
||
_Ah_=symbol(str1,symbol(cst$0,str2));
|
||
return [0,concat_fmt(fmt1,fmt2),_Ah_]}
|
||
var exit_function=[0,flush_all];
|
||
function at_exit(f)
|
||
{var g=exit_function[1],f_already_ran=[0,0];
|
||
exit_function[1]
|
||
=
|
||
function(param)
|
||
{if(1 - f_already_ran[1]){f_already_ran[1] = 1;caml_call1(f,0)}
|
||
return caml_call1(g,0)};
|
||
return 0}
|
||
function do_at_exit(param){return caml_call1(exit_function[1],0)}
|
||
function exit(retcode)
|
||
{do_at_exit(0);return runtime.caml_sys_exit(retcode)}
|
||
var
|
||
set_binary_mode_in=caml_ml_set_binary_mode,
|
||
close_in=caml_ml_close_channel,
|
||
in_channel_length=caml_ml_channel_size,
|
||
pos_in=runtime.caml_ml_pos_in,
|
||
seek_in=runtime.caml_ml_seek_in,
|
||
input_value=caml_input_value,
|
||
input_binary_int=runtime.caml_ml_input_int,
|
||
input_byte=caml_ml_input_char,
|
||
input_char=caml_ml_input_char,
|
||
set_binary_mode_out=caml_ml_set_binary_mode,
|
||
out_channel_length=caml_ml_channel_size,
|
||
pos_out=runtime.caml_ml_pos_out,
|
||
seek_out=runtime.caml_ml_seek_out,
|
||
output_binary_int=runtime.caml_ml_output_int,
|
||
output_byte=caml_ml_output_char,
|
||
output_char=caml_ml_output_char,
|
||
flush=caml_ml_flush,
|
||
Stdlib=
|
||
[0,
|
||
invalid_arg,
|
||
failwith,
|
||
Exit,
|
||
Match_failure,
|
||
Assert_failure,
|
||
Invalid_argument,
|
||
Failure,
|
||
Not_found,
|
||
Out_of_memory,
|
||
Stack_overflow,
|
||
Sys_error,
|
||
End_of_file,
|
||
Division_by_zero,
|
||
Sys_blocked_io,
|
||
Undefined_recursive_module,
|
||
min,
|
||
max,
|
||
abs,
|
||
max_int,
|
||
min_int,
|
||
lnot,
|
||
infinity,
|
||
neg_infinity,
|
||
nan,
|
||
max_float,
|
||
min_float,
|
||
epsilon,
|
||
symbol,
|
||
char_of_int,
|
||
string_of_bool,
|
||
bool_of_string_opt,
|
||
bool_of_string,
|
||
string_of_int,
|
||
int_of_string_opt,
|
||
to_string,
|
||
of_string_opt,
|
||
append,
|
||
stdin,
|
||
stdout,
|
||
stderr,
|
||
print_char,
|
||
print_string,
|
||
print_bytes,
|
||
print_int,
|
||
print_float,
|
||
print_endline,
|
||
print_newline,
|
||
prerr_char,
|
||
prerr_string,
|
||
prerr_bytes,
|
||
prerr_int,
|
||
prerr_float,
|
||
prerr_endline,
|
||
prerr_newline,
|
||
read_line,
|
||
read_int_opt,
|
||
read_int,
|
||
read_float_opt,
|
||
read_float,
|
||
open_out,
|
||
open_out_bin,
|
||
open_out_gen,
|
||
flush,
|
||
flush_all,
|
||
output_char,
|
||
output_string,
|
||
output_bytes,
|
||
output,
|
||
output_substring,
|
||
output_byte,
|
||
output_binary_int,
|
||
output_value,
|
||
seek_out,
|
||
pos_out,
|
||
out_channel_length,
|
||
close_out,
|
||
close_out_noerr,
|
||
set_binary_mode_out,
|
||
open_in,
|
||
open_in_bin,
|
||
open_in_gen,
|
||
input_char,
|
||
input_line,
|
||
input,
|
||
really_input,
|
||
really_input_string,
|
||
input_byte,
|
||
input_binary_int,
|
||
input_value,
|
||
seek_in,
|
||
pos_in,
|
||
in_channel_length,
|
||
close_in,
|
||
close_in_noerr,
|
||
set_binary_mode_in,
|
||
[0,
|
||
runtime.caml_ml_seek_out_64,
|
||
runtime.caml_ml_pos_out_64,
|
||
caml_ml_channel_size_64,
|
||
runtime.caml_ml_seek_in_64,
|
||
runtime.caml_ml_pos_in_64,
|
||
caml_ml_channel_size_64],
|
||
string_of_format,
|
||
symbol$0,
|
||
exit,
|
||
at_exit,
|
||
valid_float_lexem,
|
||
unsafe_really_input,
|
||
do_at_exit];
|
||
caml_register_global(747,Stdlib,"Stdlib");
|
||
var
|
||
Exit$0=[248,cst_Stdlib_Pervasives_Exit,caml_fresh_oo_id(0)],
|
||
Stdlib_pervasives=
|
||
[0,
|
||
invalid_arg,
|
||
failwith,
|
||
Exit$0,
|
||
min,
|
||
max,
|
||
abs,
|
||
max_int,
|
||
min_int,
|
||
lnot,
|
||
infinity,
|
||
neg_infinity,
|
||
nan,
|
||
max_float,
|
||
min_float,
|
||
epsilon,
|
||
symbol,
|
||
char_of_int,
|
||
string_of_bool,
|
||
bool_of_string,
|
||
bool_of_string_opt,
|
||
string_of_int,
|
||
int_of_string_opt,
|
||
to_string,
|
||
of_string_opt,
|
||
append,
|
||
stdin,
|
||
stdout,
|
||
stderr,
|
||
print_char,
|
||
print_string,
|
||
print_bytes,
|
||
print_int,
|
||
print_float,
|
||
print_endline,
|
||
print_newline,
|
||
prerr_char,
|
||
prerr_string,
|
||
prerr_bytes,
|
||
prerr_int,
|
||
prerr_float,
|
||
prerr_endline,
|
||
prerr_newline,
|
||
read_line,
|
||
read_int,
|
||
read_int_opt,
|
||
read_float,
|
||
read_float_opt,
|
||
open_out,
|
||
open_out_bin,
|
||
open_out_gen,
|
||
flush,
|
||
flush_all,
|
||
output_char,
|
||
output_string,
|
||
output_bytes,
|
||
output,
|
||
output_substring,
|
||
output_byte,
|
||
output_binary_int,
|
||
output_value,
|
||
seek_out,
|
||
pos_out,
|
||
out_channel_length,
|
||
close_out,
|
||
close_out_noerr,
|
||
set_binary_mode_out,
|
||
open_in,
|
||
open_in_bin,
|
||
open_in_gen,
|
||
input_char,
|
||
input_line,
|
||
input,
|
||
really_input,
|
||
really_input_string,
|
||
input_byte,
|
||
input_binary_int,
|
||
input_value,
|
||
seek_in,
|
||
pos_in,
|
||
in_channel_length,
|
||
close_in,
|
||
close_in_noerr,
|
||
set_binary_mode_in,
|
||
string_of_format,
|
||
symbol$0,
|
||
exit,
|
||
at_exit,
|
||
valid_float_lexem,
|
||
do_at_exit];
|
||
caml_register_global(748,Stdlib_pervasives,"Stdlib__pervasives");
|
||
function empty(param){return 0}
|
||
function return$0(x,param){return [0,x,empty]}
|
||
function map(f,seq,param)
|
||
{var match=caml_call1(seq,0);
|
||
if(match)
|
||
{var
|
||
next=match[2],
|
||
x=match[1],
|
||
_Ae_=function(_Af_){return map(f,next,_Af_)};
|
||
return [0,caml_call1(f,x),_Ae_]}
|
||
return 0}
|
||
function filter_map(f,seq,param)
|
||
{var seq$0=seq;
|
||
for(;;)
|
||
{var match=caml_call1(seq$0,0);
|
||
if(match)
|
||
{var next=match[2],x=match[1],match$0=caml_call1(f,x);
|
||
if(match$0)
|
||
{var y=match$0[1];
|
||
return [0,y,function(_Ad_){return filter_map(f,next,_Ad_)}]}
|
||
var seq$0=next;
|
||
continue}
|
||
return 0}}
|
||
function filter(f,seq,param)
|
||
{var seq$0=seq;
|
||
for(;;)
|
||
{var match=caml_call1(seq$0,0);
|
||
if(match)
|
||
{var next=match[2],x=match[1];
|
||
if(caml_call1(f,x))
|
||
return [0,x,function(_Ac_){return filter(f,next,_Ac_)}];
|
||
var seq$0=next;
|
||
continue}
|
||
return 0}}
|
||
function flat_map$0(counter,f,seq,param)
|
||
{var match=caml_call1(seq,0);
|
||
if(match)
|
||
{var next=match[2],x=match[1],_Ab_=caml_call1(f,x),_Aa_=0;
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return flat_map_app$0(counter$0,f,_Ab_,next,_Aa_)}
|
||
return caml_trampoline_return(flat_map_app$0,[0,f,_Ab_,next,_Aa_])}
|
||
return 0}
|
||
function flat_map_app$0(counter,f,seq,tail,param)
|
||
{var match=caml_call1(seq,0);
|
||
if(match)
|
||
{var next=match[2],x=match[1];
|
||
return [0,x,function(_z$_){return flat_map_app(f,next,tail,_z$_)}]}
|
||
var _z__=0;
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return flat_map$0(counter$0,f,tail,_z__)}
|
||
return caml_trampoline_return(flat_map$0,[0,f,tail,_z__])}
|
||
function flat_map(f,seq,param)
|
||
{return caml_trampoline(flat_map$0(0,f,seq,param))}
|
||
function flat_map_app(f,seq,tail,param)
|
||
{return caml_trampoline(flat_map_app$0(0,f,seq,tail,param))}
|
||
function fold_left(f,acc,seq)
|
||
{var acc$0=acc,seq$0=seq;
|
||
for(;;)
|
||
{var match=caml_call1(seq$0,0);
|
||
if(match)
|
||
{var
|
||
next=match[2],
|
||
x=match[1],
|
||
acc$1=caml_call2(f,acc$0,x),
|
||
acc$0=acc$1,
|
||
seq$0=next;
|
||
continue}
|
||
return acc$0}}
|
||
function iter(f,seq)
|
||
{var seq$0=seq;
|
||
for(;;)
|
||
{var match=caml_call1(seq$0,0);
|
||
if(match)
|
||
{var next=match[2],x=match[1];
|
||
caml_call1(f,x);
|
||
var seq$0=next;
|
||
continue}
|
||
return 0}}
|
||
var
|
||
Stdlib_seq=
|
||
[0,empty,return$0,map,filter,filter_map,flat_map,fold_left,iter];
|
||
caml_register_global(749,Stdlib_seq,"Stdlib__seq");
|
||
var none=0;
|
||
function some(v){return [0,v]}
|
||
function value(o,default$0){if(o){var v=o[1];return v}return default$0}
|
||
function get(param)
|
||
{if(param){var v=param[1];return v}
|
||
return invalid_arg(cst_option_is_None)}
|
||
function bind(o,f){if(o){var v=o[1];return caml_call1(f,v)}return 0}
|
||
function join(param){if(param){var o=param[1];return o}return 0}
|
||
function map$0(f,o){if(o){var v=o[1];return [0,caml_call1(f,v)]}return 0}
|
||
function fold(none,some,param)
|
||
{if(param){var v=param[1];return caml_call1(some,v)}return none}
|
||
function iter$0(f,param)
|
||
{if(param){var v=param[1];return caml_call1(f,v)}return 0}
|
||
function is_none(param){return param?0:1}
|
||
function is_some(param){return param?1:0}
|
||
function equal(eq,o0,o1)
|
||
{if(o0)
|
||
{if(o1){var v1=o1[1],v0=o0[1];return caml_call2(eq,v0,v1)}}
|
||
else
|
||
if(! o1)return 1;
|
||
return 0}
|
||
function compare(cmp,o0,o1)
|
||
{if(o0)
|
||
{var _z9_=o0[1];
|
||
if(o1){var v1=o1[1];return caml_call2(cmp,_z9_,v1)}
|
||
return 1}
|
||
return o1?-1:0}
|
||
function to_result(none,param)
|
||
{if(param){var v=param[1];return [0,v]}return [1,none]}
|
||
function to_list(param){if(param){var v=param[1];return [0,v,0]}return 0}
|
||
function to_seq(param)
|
||
{if(param){var v=param[1];return function(_z8_){return return$0(v,_z8_)}}
|
||
return empty}
|
||
var
|
||
Stdlib_option=
|
||
[0,
|
||
none,
|
||
some,
|
||
value,
|
||
get,
|
||
bind,
|
||
join,
|
||
map$0,
|
||
fold,
|
||
iter$0,
|
||
is_none,
|
||
is_some,
|
||
equal,
|
||
compare,
|
||
to_result,
|
||
to_list,
|
||
to_seq];
|
||
caml_register_global(750,Stdlib_option,"Stdlib__option");
|
||
function ok(v){return [0,v]}
|
||
function error(e){return [1,e]}
|
||
function value$0(r,default$0)
|
||
{if(0 === r[0]){var v=r[1];return v}return default$0}
|
||
function get_ok(param)
|
||
{if(0 === param[0]){var v=param[1];return v}
|
||
return invalid_arg(cst_result_is_Error)}
|
||
function get_error(param)
|
||
{if(0 === param[0])return invalid_arg(cst_result_is_Ok);
|
||
var e=param[1];
|
||
return e}
|
||
function bind$0(r,f)
|
||
{if(0 === r[0]){var v=r[1];return caml_call1(f,v)}return r}
|
||
function join$0(e){if(0 === e[0]){var r=e[1];return r}return e}
|
||
function map$1(f,e)
|
||
{if(0 === e[0]){var v=e[1];return [0,caml_call1(f,v)]}return e}
|
||
function map_error(f,v)
|
||
{if(0 === v[0])return v;var e=v[1];return [1,caml_call1(f,e)]}
|
||
function fold$0(ok,error,param)
|
||
{if(0 === param[0]){var v=param[1];return caml_call1(ok,v)}
|
||
var e=param[1];
|
||
return caml_call1(error,e)}
|
||
function iter$1(f,param)
|
||
{if(0 === param[0]){var v=param[1];return caml_call1(f,v)}return 0}
|
||
function iter_error(f,param)
|
||
{if(0 === param[0])return 0;var e=param[1];return caml_call1(f,e)}
|
||
function is_ok(param){return 0 === param[0]?1:0}
|
||
function is_error(param){return 0 === param[0]?0:1}
|
||
function equal$0(ok,error,r0,match)
|
||
{if(0 === r0[0])
|
||
{var _z6_=r0[1];
|
||
if(0 === match[0]){var v1=match[1];return caml_call2(ok,_z6_,v1)}}
|
||
else
|
||
{var _z7_=r0[1];
|
||
if(0 !== match[0]){var e1=match[1];return caml_call2(error,_z7_,e1)}}
|
||
return 0}
|
||
function compare$0(ok,error,r0,match)
|
||
{if(0 === r0[0])
|
||
{var _z4_=r0[1];
|
||
if(0 === match[0]){var v1=match[1];return caml_call2(ok,_z4_,v1)}
|
||
return -1}
|
||
var _z5_=r0[1];
|
||
if(0 === match[0])return 1;
|
||
var e1=match[1];
|
||
return caml_call2(error,_z5_,e1)}
|
||
function to_option(param)
|
||
{if(0 === param[0]){var v=param[1];return [0,v]}return 0}
|
||
function to_list$0(param)
|
||
{if(0 === param[0]){var v=param[1];return [0,v,0]}return 0}
|
||
function to_seq$0(param)
|
||
{if(0 === param[0])
|
||
{var v=param[1];return function(_z3_){return return$0(v,_z3_)}}
|
||
return empty}
|
||
var
|
||
Stdlib_result=
|
||
[0,
|
||
ok,
|
||
error,
|
||
value$0,
|
||
get_ok,
|
||
get_error,
|
||
bind$0,
|
||
join$0,
|
||
map$1,
|
||
map_error,
|
||
fold$0,
|
||
iter$1,
|
||
iter_error,
|
||
is_ok,
|
||
is_error,
|
||
equal$0,
|
||
compare$0,
|
||
to_option,
|
||
to_list$0,
|
||
to_seq$0];
|
||
caml_register_global(751,Stdlib_result,"Stdlib__result");
|
||
function equal$1(_z2_,_z1_){return _z2_ === _z1_?1:0}
|
||
var compare$1=caml_int_compare;
|
||
function to_int(param){return param?1:0}
|
||
function to_float(param){return param?1.:0.}
|
||
function to_string$0(param){return param?cst_true$2:cst_false$2}
|
||
var
|
||
Stdlib_bool=
|
||
[0,
|
||
function(_z0_){return 1 - _z0_},
|
||
equal$1,
|
||
compare$1,
|
||
to_int,
|
||
to_float,
|
||
to_string$0];
|
||
caml_register_global(752,Stdlib_bool,"Stdlib__bool");
|
||
function chr(n)
|
||
{if(0 <= n && ! (255 < n))return n;return invalid_arg(cst_Char_chr)}
|
||
function escaped(c)
|
||
{var switch$0=0;
|
||
if(40 <= c)
|
||
{if(92 === c)return cst$1;if(! (127 <= c))switch$0 = 1}
|
||
else
|
||
if(32 <= c)
|
||
{if(39 <= c)return cst$2;switch$0 = 1}
|
||
else
|
||
if(! (14 <= c))
|
||
switch(c)
|
||
{case 8:return cst_b;
|
||
case 9:return cst_t;
|
||
case 10:return cst_n;
|
||
case 13:return cst_r
|
||
}
|
||
if(switch$0)
|
||
{var s$0=caml_create_bytes(1);
|
||
caml_bytes_unsafe_set(s$0,0,c);
|
||
return caml_string_of_bytes(s$0)}
|
||
var s=caml_create_bytes(4);
|
||
caml_bytes_unsafe_set(s,0,92);
|
||
caml_bytes_unsafe_set(s,1,48 + (c / 100 | 0) | 0);
|
||
caml_bytes_unsafe_set(s,2,48 + ((c / 10 | 0) % 10 | 0) | 0);
|
||
caml_bytes_unsafe_set(s,3,48 + (c % 10 | 0) | 0);
|
||
return caml_string_of_bytes(s)}
|
||
function lowercase(c)
|
||
{var switch$0=0;
|
||
if(! (65 <= c) || 90 < c)switch$0 = 1;
|
||
if(switch$0)
|
||
{var switch$1=0;
|
||
if(! (192 <= c) || 214 < c)switch$1 = 1;
|
||
if(switch$1)
|
||
{var switch$2=0;
|
||
if(! (216 <= c) || 222 < c)switch$2 = 1;
|
||
if(switch$2)return c}}
|
||
return c + 32 | 0}
|
||
function uppercase(c)
|
||
{var switch$0=0;
|
||
if(! (97 <= c) || 122 < c)switch$0 = 1;
|
||
if(switch$0)
|
||
{var switch$1=0;
|
||
if(! (224 <= c) || 246 < c)switch$1 = 1;
|
||
if(switch$1)
|
||
{var switch$2=0;
|
||
if(! (248 <= c) || 254 < c)switch$2 = 1;
|
||
if(switch$2)return c}}
|
||
return c - 32 | 0}
|
||
function lowercase_ascii(c)
|
||
{if(65 <= c && ! (90 < c))return c + 32 | 0;return c}
|
||
function uppercase_ascii(c)
|
||
{if(97 <= c && ! (122 < c))return c - 32 | 0;return c}
|
||
function compare$2(c1,c2){return c1 - c2 | 0}
|
||
function equal$2(c1,c2){return 0 === (c1 - c2 | 0)?1:0}
|
||
var
|
||
Stdlib_char=
|
||
[0,
|
||
chr,
|
||
escaped,
|
||
lowercase,
|
||
uppercase,
|
||
lowercase_ascii,
|
||
uppercase_ascii,
|
||
compare$2,
|
||
equal$2];
|
||
caml_register_global(753,Stdlib_char,"Stdlib__char");
|
||
var
|
||
min$0=0,
|
||
max$0=1114111,
|
||
lo_bound=55295,
|
||
hi_bound=57344,
|
||
bom=65279,
|
||
rep=65533;
|
||
function succ(u)
|
||
{return u === 55295
|
||
?hi_bound
|
||
:u === 1114111?invalid_arg(err_no_succ):u + 1 | 0}
|
||
function pred(u)
|
||
{return u === 57344?lo_bound:u === 0?invalid_arg(err_no_pred):u - 1 | 0}
|
||
function is_valid(i)
|
||
{var _zW_=0 <= i?1:0,_zX_=_zW_?i <= 55295?1:0:_zW_;
|
||
if(_zX_)
|
||
var _zY_=_zX_;
|
||
else
|
||
var _zZ_=57344 <= i?1:0,_zY_=_zZ_?i <= 1114111?1:0:_zZ_;
|
||
return _zY_}
|
||
function of_int(i)
|
||
{return is_valid(i)
|
||
?i
|
||
:invalid_arg
|
||
(symbol
|
||
(caml_format_int(cst_X,i),cst_is_not_an_Unicode_scalar_v))}
|
||
function is_char(u){return u < 256?1:0}
|
||
function of_char(c){return c}
|
||
function to_char(u)
|
||
{return 255 < u
|
||
?invalid_arg
|
||
(symbol
|
||
(cst_U,
|
||
symbol
|
||
(caml_format_int(cst_04X,u),cst_is_not_a_latin1_character)))
|
||
:u}
|
||
function unsafe_to_char(_zV_){return _zV_}
|
||
function equal$3(_zU_,_zT_){return _zU_ === _zT_?1:0}
|
||
var compare$3=caml_int_compare;
|
||
function hash(_zS_){return _zS_}
|
||
function _m_(_zR_){return _zR_}
|
||
var
|
||
Stdlib_uchar=
|
||
[0,
|
||
min$0,
|
||
max$0,
|
||
bom,
|
||
rep,
|
||
succ,
|
||
pred,
|
||
is_valid,
|
||
of_int,
|
||
function(_zQ_){return _zQ_},
|
||
_m_,
|
||
is_char,
|
||
of_char,
|
||
to_char,
|
||
unsafe_to_char,
|
||
equal$3,
|
||
compare$3,
|
||
hash];
|
||
caml_register_global(754,Stdlib_uchar,"Stdlib__uchar");
|
||
var
|
||
executable_name=runtime.caml_sys_executable_name(0),
|
||
match=runtime.caml_sys_get_config(0),
|
||
os_type=match[1],
|
||
match$0=runtime.caml_sys_const_backend_type(0),
|
||
unix=runtime.caml_sys_const_ostype_unix(0),
|
||
win32=runtime.caml_sys_const_ostype_win32(0),
|
||
cygwin=runtime.caml_sys_const_ostype_cygwin(0),
|
||
max_array_length=runtime.caml_sys_const_max_wosize(0),
|
||
max_floatarray_length=max_array_length / 2 | 0,
|
||
max_string_length=(4 * max_array_length | 0) - 1 | 0,
|
||
big_endian=0,
|
||
match$1=32,
|
||
int_size=32;
|
||
function getenv_opt(s)
|
||
{try
|
||
{var _zO_=[0,caml_sys_getenv(s)];return _zO_}
|
||
catch(_zP_)
|
||
{_zP_ = caml_wrap_exception(_zP_);
|
||
if(_zP_ === Not_found)return 0;
|
||
throw _zP_}}
|
||
var interactive=[0,0];
|
||
function set_signal(sig_num,sig_beh){return 0}
|
||
var
|
||
Break=[248,cst_Stdlib_Sys_Break,caml_fresh_oo_id(0)],
|
||
sigabrt=-1,
|
||
sigalrm=-2,
|
||
sigfpe=-3,
|
||
sighup=-4,
|
||
sigill=-5,
|
||
sigint=-6,
|
||
sigkill=-7,
|
||
sigpipe=-8,
|
||
sigquit=-9,
|
||
sigsegv=-10,
|
||
sigterm=-11,
|
||
sigusr1=-12,
|
||
sigusr2=-13,
|
||
sigchld=-14,
|
||
sigcont=-15,
|
||
sigstop=-16,
|
||
sigtstp=-17,
|
||
sigttin=-18,
|
||
sigttou=-19,
|
||
sigvtalrm=-20,
|
||
sigprof=-21,
|
||
sigbus=-22,
|
||
sigpoll=-23,
|
||
sigsys=-24,
|
||
sigtrap=-25,
|
||
sigurg=-26,
|
||
sigxcpu=-27,
|
||
sigxfsz=-28;
|
||
function catch_break(on){return on?0:0}
|
||
function Make(_zN_,_zM_){return [0,1]}
|
||
var
|
||
Immediate64=[0,Make],
|
||
Stdlib_sys=
|
||
[0,
|
||
executable_name,
|
||
getenv_opt,
|
||
interactive,
|
||
os_type,
|
||
match$0,
|
||
unix,
|
||
win32,
|
||
cygwin,
|
||
match$1,
|
||
int_size,
|
||
big_endian,
|
||
max_string_length,
|
||
max_array_length,
|
||
max_floatarray_length,
|
||
set_signal,
|
||
sigabrt,
|
||
sigalrm,
|
||
sigfpe,
|
||
sighup,
|
||
sigill,
|
||
sigint,
|
||
sigkill,
|
||
sigpipe,
|
||
sigquit,
|
||
sigsegv,
|
||
sigterm,
|
||
sigusr1,
|
||
sigusr2,
|
||
sigchld,
|
||
sigcont,
|
||
sigstop,
|
||
sigtstp,
|
||
sigttin,
|
||
sigttou,
|
||
sigvtalrm,
|
||
sigprof,
|
||
sigbus,
|
||
sigpoll,
|
||
sigsys,
|
||
sigtrap,
|
||
sigurg,
|
||
sigxcpu,
|
||
sigxfsz,
|
||
Break,
|
||
catch_break,
|
||
ocaml_version,
|
||
runtime.caml_ml_enable_runtime_warnings,
|
||
runtime.caml_ml_runtime_warnings_enabled,
|
||
Immediate64];
|
||
caml_register_global(755,Stdlib_sys,"Stdlib__sys");
|
||
function length(l)
|
||
{var len=0,param=l;
|
||
for(;;)
|
||
{if(param)
|
||
{var param$0=param[2],len$0=len + 1 | 0,len=len$0,param=param$0;
|
||
continue}
|
||
return len}}
|
||
function cons(a,l){return [0,a,l]}
|
||
function hd(param)
|
||
{if(param){var a=param[1];return a}return failwith(cst_hd)}
|
||
function tl(param)
|
||
{if(param){var l=param[2];return l}return failwith(cst_tl)}
|
||
function nth(l,n)
|
||
{if(0 <= n)
|
||
{var l$0=l,n$0=n;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var l$1=l$0[2],a=l$0[1];
|
||
if(0 === n$0)return a;
|
||
var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1;
|
||
continue}
|
||
return failwith(cst_nth)}}
|
||
return invalid_arg(cst_List_nth)}
|
||
function nth_opt(l,n)
|
||
{if(0 <= n)
|
||
{var l$0=l,n$0=n;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var l$1=l$0[2],a=l$0[1];
|
||
if(0 === n$0)return [0,a];
|
||
var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1;
|
||
continue}
|
||
return 0}}
|
||
return invalid_arg(cst_List_nth$0)}
|
||
function rev_append(l1,l2)
|
||
{var l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{var l1$1=l1$0[2],a=l1$0[1],l2$1=[0,a,l2$0],l1$0=l1$1,l2$0=l2$1;
|
||
continue}
|
||
return l2$0}}
|
||
function rev(l){return rev_append(l,0)}
|
||
function init_aux(i,n,f)
|
||
{if(n <= i)return 0;
|
||
var r=caml_call1(f,i);
|
||
return [0,r,init_aux(i + 1 | 0,n,f)]}
|
||
var rev_init_threshold=typeof match$0 === "number"?10000:50;
|
||
function init(len,f)
|
||
{if(0 <= len)
|
||
{if(rev_init_threshold < len)
|
||
{var acc=0,i=0;
|
||
for(;;)
|
||
{if(len <= i)return rev(acc);
|
||
var i$0=i + 1 | 0,acc$0=[0,caml_call1(f,i),acc],acc=acc$0,i=i$0;
|
||
continue}}
|
||
return init_aux(0,len,f)}
|
||
return invalid_arg(cst_List_init)}
|
||
function flatten(param)
|
||
{if(param){var r=param[2],l=param[1];return append(l,flatten(r))}
|
||
return 0}
|
||
function map$2(f,param)
|
||
{if(param)
|
||
{var l=param[2],a=param[1],r=caml_call1(f,a);return [0,r,map$2(f,l)]}
|
||
return 0}
|
||
function _n_(i,f,param)
|
||
{if(param)
|
||
{var l=param[2],a=param[1],r=caml_call2(f,i,a);
|
||
return [0,r,_n_(i + 1 | 0,f,l)]}
|
||
return 0}
|
||
function mapi(f,l){return _n_(0,f,l)}
|
||
function rev_map(f,param)
|
||
{var accu=0,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
l=param$0[2],
|
||
a=param$0[1],
|
||
accu$0=[0,caml_call1(f,a),accu],
|
||
accu=accu$0,
|
||
param$0=l;
|
||
continue}
|
||
return accu}}
|
||
function iter$2(f,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],a=param$0[1];
|
||
caml_call1(f,a);
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function iteri(f,l$0)
|
||
{var i=0,param=l$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var l=param[2],a=param[1];
|
||
caml_call2(f,i,a);
|
||
var i$0=i + 1 | 0,i=i$0,param=l;
|
||
continue}
|
||
return 0}}
|
||
function fold_left$0(f,accu,l)
|
||
{var accu$0=accu,l$0=l;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var
|
||
l$1=l$0[2],
|
||
a=l$0[1],
|
||
accu$1=caml_call2(f,accu$0,a),
|
||
accu$0=accu$1,
|
||
l$0=l$1;
|
||
continue}
|
||
return accu$0}}
|
||
function fold_right(f,l,accu)
|
||
{if(l){var l$0=l[2],a=l[1];return caml_call2(f,a,fold_right(f,l$0,accu))}
|
||
return accu}
|
||
function map2(f,l1,l2)
|
||
{if(l1)
|
||
{if(l2)
|
||
{var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1],r=caml_call2(f,a1,a2);
|
||
return [0,r,map2(f,l1$0,l2$0)]}}
|
||
else
|
||
if(! l2)return 0;
|
||
return invalid_arg(cst_List_map2)}
|
||
function rev_map2(f,l1,l2)
|
||
{var accu=0,l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{if(l2$0)
|
||
{var
|
||
l2$1=l2$0[2],
|
||
a2=l2$0[1],
|
||
l1$1=l1$0[2],
|
||
a1=l1$0[1],
|
||
accu$0=[0,caml_call2(f,a1,a2),accu],
|
||
accu=accu$0,
|
||
l1$0=l1$1,
|
||
l2$0=l2$1;
|
||
continue}}
|
||
else
|
||
if(! l2$0)return accu;
|
||
return invalid_arg(cst_List_rev_map2)}}
|
||
function iter2(f,l1,l2)
|
||
{var l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{if(l2$0)
|
||
{var l2$1=l2$0[2],a2=l2$0[1],l1$1=l1$0[2],a1=l1$0[1];
|
||
caml_call2(f,a1,a2);
|
||
var l1$0=l1$1,l2$0=l2$1;
|
||
continue}}
|
||
else
|
||
if(! l2$0)return 0;
|
||
return invalid_arg(cst_List_iter2)}}
|
||
function fold_left2(f,accu,l1,l2)
|
||
{var accu$0=accu,l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{if(l2$0)
|
||
{var
|
||
l2$1=l2$0[2],
|
||
a2=l2$0[1],
|
||
l1$1=l1$0[2],
|
||
a1=l1$0[1],
|
||
accu$1=caml_call3(f,accu$0,a1,a2),
|
||
accu$0=accu$1,
|
||
l1$0=l1$1,
|
||
l2$0=l2$1;
|
||
continue}}
|
||
else
|
||
if(! l2$0)return accu$0;
|
||
return invalid_arg(cst_List_fold_left2)}}
|
||
function fold_right2(f,l1,l2,accu)
|
||
{if(l1)
|
||
{if(l2)
|
||
{var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1];
|
||
return caml_call3(f,a1,a2,fold_right2(f,l1$0,l2$0,accu))}}
|
||
else
|
||
if(! l2)return accu;
|
||
return invalid_arg(cst_List_fold_right2)}
|
||
function for_all(p,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],a=param$0[1],_zL_=caml_call1(p,a);
|
||
if(_zL_){var param$0=l;continue}
|
||
return _zL_}
|
||
return 1}}
|
||
function exists(p,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],a=param$0[1],_zK_=caml_call1(p,a);
|
||
if(_zK_)return _zK_;
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function for_all2(p,l1,l2)
|
||
{var l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{if(l2$0)
|
||
{var
|
||
l2$1=l2$0[2],
|
||
a2=l2$0[1],
|
||
l1$1=l1$0[2],
|
||
a1=l1$0[1],
|
||
_zJ_=caml_call2(p,a1,a2);
|
||
if(_zJ_){var l1$0=l1$1,l2$0=l2$1;continue}
|
||
return _zJ_}}
|
||
else
|
||
if(! l2$0)return 1;
|
||
return invalid_arg(cst_List_for_all2)}}
|
||
function exists2(p,l1,l2)
|
||
{var l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{if(l2$0)
|
||
{var
|
||
l2$1=l2$0[2],
|
||
a2=l2$0[1],
|
||
l1$1=l1$0[2],
|
||
a1=l1$0[1],
|
||
_zI_=caml_call2(p,a1,a2);
|
||
if(_zI_)return _zI_;
|
||
var l1$0=l1$1,l2$0=l2$1;
|
||
continue}}
|
||
else
|
||
if(! l2$0)return 0;
|
||
return invalid_arg(cst_List_exists2)}}
|
||
function mem(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],a=param$0[1],_zH_=0 === caml_compare(a,x)?1:0;
|
||
if(_zH_)return _zH_;
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function memq(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],a=param$0[1],_zG_=a === x?1:0;
|
||
if(_zG_)return _zG_;
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function assoc(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],match=param$0[1],b=match[2],a=match[1];
|
||
if(0 === caml_compare(a,x))return b;
|
||
var param$0=l;
|
||
continue}
|
||
throw Not_found}}
|
||
function assoc_opt(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],match=param$0[1],b=match[2],a=match[1];
|
||
if(0 === caml_compare(a,x))return [0,b];
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function assq(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],match=param$0[1],b=match[2],a=match[1];
|
||
if(a === x)return b;
|
||
var param$0=l;
|
||
continue}
|
||
throw Not_found}}
|
||
function assq_opt(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],match=param$0[1],b=match[2],a=match[1];
|
||
if(a === x)return [0,b];
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function mem_assoc(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
l=param$0[2],
|
||
match=param$0[1],
|
||
a=match[1],
|
||
_zF_=0 === caml_compare(a,x)?1:0;
|
||
if(_zF_)return _zF_;
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function mem_assq(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],match=param$0[1],a=match[1],_zE_=a === x?1:0;
|
||
if(_zE_)return _zE_;
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function remove_assoc(x,param)
|
||
{if(param)
|
||
{var l=param[2],pair=param[1],a=pair[1];
|
||
return 0 === caml_compare(a,x)?l:[0,pair,remove_assoc(x,l)]}
|
||
return 0}
|
||
function remove_assq(x,param)
|
||
{if(param)
|
||
{var l=param[2],pair=param[1],a=pair[1];
|
||
return a === x?l:[0,pair,remove_assq(x,l)]}
|
||
return 0}
|
||
function find(p,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],x=param$0[1];
|
||
if(caml_call1(p,x))return x;
|
||
var param$0=l;
|
||
continue}
|
||
throw Not_found}}
|
||
function find_opt(p,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],x=param$0[1];
|
||
if(caml_call1(p,x))return [0,x];
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function find_map(f,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],x=param$0[1],result=caml_call1(f,x);
|
||
if(result)return result;
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function find_all(p)
|
||
{var accu=0;
|
||
return function(param$0)
|
||
{var accu$0=accu,param=param$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var l=param[2],x=param[1];
|
||
if(caml_call1(p,x))
|
||
{var accu$1=[0,x,accu$0],accu$0=accu$1,param=l;continue}
|
||
var param=l;
|
||
continue}
|
||
return rev(accu$0)}}}
|
||
function filter_map$0(f)
|
||
{var accu=0;
|
||
return function(param$0)
|
||
{var accu$0=accu,param=param$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var l=param[2],x=param[1],match=caml_call1(f,x);
|
||
if(match)
|
||
{var v=match[1],accu$1=[0,v,accu$0],accu$0=accu$1,param=l;
|
||
continue}
|
||
var param=l;
|
||
continue}
|
||
return rev(accu$0)}}}
|
||
function concat_map(f,param)
|
||
{var acc=0,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
l=param$0[2],
|
||
x=param$0[1],
|
||
xs=caml_call1(f,x),
|
||
acc$0=rev_append(xs,acc),
|
||
acc=acc$0,
|
||
param$0=l;
|
||
continue}
|
||
return rev(acc)}}
|
||
function partition(p,param)
|
||
{var yes=0,no=0,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],x=param$0[1];
|
||
if(caml_call1(p,x))
|
||
{var yes$0=[0,x,yes],yes=yes$0,param$0=l;continue}
|
||
var no$0=[0,x,no],no=no$0,param$0=l;
|
||
continue}
|
||
var _zD_=rev(no);
|
||
return [0,rev(yes),_zD_]}}
|
||
function split(param)
|
||
{if(param)
|
||
{var
|
||
l=param[2],
|
||
match=param[1],
|
||
y=match[2],
|
||
x=match[1],
|
||
match$0=split(l),
|
||
ry=match$0[2],
|
||
rx=match$0[1];
|
||
return [0,[0,x,rx],[0,y,ry]]}
|
||
return _o_}
|
||
function combine(l1,l2)
|
||
{if(l1)
|
||
{if(l2)
|
||
{var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1];
|
||
return [0,[0,a1,a2],combine(l1$0,l2$0)]}}
|
||
else
|
||
if(! l2)return 0;
|
||
return invalid_arg(cst_List_combine)}
|
||
function merge(cmp,l1,match)
|
||
{if(l1)
|
||
{if(match)
|
||
{var t2=match[2],h2=match[1],t1=l1[2],h1=l1[1];
|
||
return 0 < caml_call2(cmp,h1,h2)
|
||
?[0,h2,merge(cmp,l1,t2)]
|
||
:[0,h1,merge(cmp,t1,match)]}
|
||
return l1}
|
||
return match}
|
||
function fast_sort(cmp,l)
|
||
{function sort(n,l)
|
||
{if(2 === n)
|
||
{if(l)
|
||
{var _zz_=l[2];
|
||
if(_zz_)
|
||
{var
|
||
tl=_zz_[2],
|
||
x2=_zz_[1],
|
||
x1=l[1],
|
||
s=0 < caml_call2(cmp,x1,x2)?[0,x2,[0,x1,0]]:[0,x1,[0,x2,0]];
|
||
return [0,s,tl]}}}
|
||
else
|
||
if(3 === n && l)
|
||
{var _zB_=l[2];
|
||
if(_zB_)
|
||
{var _zC_=_zB_[2];
|
||
if(_zC_)
|
||
{var
|
||
tl$1=_zC_[2],
|
||
x3=_zC_[1],
|
||
x2$0=_zB_[1],
|
||
x1$0=l[1],
|
||
s$0=
|
||
0 < caml_call2(cmp,x1$0,x2$0)
|
||
?0 < caml_call2(cmp,x1$0,x3)
|
||
?0 < caml_call2(cmp,x2$0,x3)
|
||
?[0,x3,[0,x2$0,[0,x1$0,0]]]
|
||
:[0,x2$0,[0,x3,[0,x1$0,0]]]
|
||
:[0,x2$0,[0,x1$0,[0,x3,0]]]
|
||
:0 < caml_call2(cmp,x2$0,x3)
|
||
?0 < caml_call2(cmp,x1$0,x3)
|
||
?[0,x3,[0,x1$0,[0,x2$0,0]]]
|
||
:[0,x1$0,[0,x3,[0,x2$0,0]]]
|
||
:[0,x1$0,[0,x2$0,[0,x3,0]]];
|
||
return [0,s$0,tl$1]}}}
|
||
var
|
||
n1=n >> 1,
|
||
n2=n - n1 | 0,
|
||
match=rev_sort(n1,l),
|
||
l2$0=match[2],
|
||
s1=match[1],
|
||
match$0=rev_sort(n2,l2$0),
|
||
tl$0=match$0[2],
|
||
s2=match$0[1],
|
||
l1=s1,
|
||
l2=s2,
|
||
accu=0;
|
||
for(;;)
|
||
{if(l1)
|
||
{if(l2)
|
||
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1];
|
||
if(0 < caml_call2(cmp,h1,h2))
|
||
{var accu$0=[0,h1,accu],l1=t1,accu=accu$0;continue}
|
||
var accu$1=[0,h2,accu],l2=t2,accu=accu$1;
|
||
continue}
|
||
var _zA_=rev_append(l1,accu)}
|
||
else
|
||
var _zA_=rev_append(l2,accu);
|
||
return [0,_zA_,tl$0]}}
|
||
function rev_sort(n,l)
|
||
{if(2 === n)
|
||
{if(l)
|
||
{var _zv_=l[2];
|
||
if(_zv_)
|
||
{var
|
||
tl=_zv_[2],
|
||
x2=_zv_[1],
|
||
x1=l[1],
|
||
s=0 < caml_call2(cmp,x1,x2)?[0,x1,[0,x2,0]]:[0,x2,[0,x1,0]];
|
||
return [0,s,tl]}}}
|
||
else
|
||
if(3 === n && l)
|
||
{var _zx_=l[2];
|
||
if(_zx_)
|
||
{var _zy_=_zx_[2];
|
||
if(_zy_)
|
||
{var
|
||
tl$1=_zy_[2],
|
||
x3=_zy_[1],
|
||
x2$0=_zx_[1],
|
||
x1$0=l[1],
|
||
s$0=
|
||
0 < caml_call2(cmp,x1$0,x2$0)
|
||
?0 < caml_call2(cmp,x2$0,x3)
|
||
?[0,x1$0,[0,x2$0,[0,x3,0]]]
|
||
:0 < caml_call2(cmp,x1$0,x3)
|
||
?[0,x1$0,[0,x3,[0,x2$0,0]]]
|
||
:[0,x3,[0,x1$0,[0,x2$0,0]]]
|
||
:0 < caml_call2(cmp,x1$0,x3)
|
||
?[0,x2$0,[0,x1$0,[0,x3,0]]]
|
||
:0 < caml_call2(cmp,x2$0,x3)
|
||
?[0,x2$0,[0,x3,[0,x1$0,0]]]
|
||
:[0,x3,[0,x2$0,[0,x1$0,0]]];
|
||
return [0,s$0,tl$1]}}}
|
||
var
|
||
n1=n >> 1,
|
||
n2=n - n1 | 0,
|
||
match=sort(n1,l),
|
||
l2$0=match[2],
|
||
s1=match[1],
|
||
match$0=sort(n2,l2$0),
|
||
tl$0=match$0[2],
|
||
s2=match$0[1],
|
||
l1=s1,
|
||
l2=s2,
|
||
accu=0;
|
||
for(;;)
|
||
{if(l1)
|
||
{if(l2)
|
||
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1];
|
||
if(0 < caml_call2(cmp,h1,h2))
|
||
{var accu$0=[0,h2,accu],l2=t2,accu=accu$0;continue}
|
||
var accu$1=[0,h1,accu],l1=t1,accu=accu$1;
|
||
continue}
|
||
var _zw_=rev_append(l1,accu)}
|
||
else
|
||
var _zw_=rev_append(l2,accu);
|
||
return [0,_zw_,tl$0]}}
|
||
var len=length(l);
|
||
return 2 <= len?sort(len,l)[1]:l}
|
||
function sort_uniq(cmp,l)
|
||
{function sort(n,l)
|
||
{if(2 === n)
|
||
{if(l)
|
||
{var _zm_=l[2];
|
||
if(_zm_)
|
||
{var
|
||
tl=_zm_[2],
|
||
x2=_zm_[1],
|
||
x1=l[1],
|
||
c$0=caml_call2(cmp,x1,x2),
|
||
s=0 === c$0?[0,x1,0]:0 <= c$0?[0,x2,[0,x1,0]]:[0,x1,[0,x2,0]];
|
||
return [0,s,tl]}}}
|
||
else
|
||
if(3 === n && l)
|
||
{var _zo_=l[2];
|
||
if(_zo_)
|
||
{var _zp_=_zo_[2];
|
||
if(_zp_)
|
||
{var
|
||
tl$1=_zp_[2],
|
||
x3=_zp_[1],
|
||
x2$0=_zo_[1],
|
||
x1$0=l[1],
|
||
c$1=caml_call2(cmp,x1$0,x2$0);
|
||
if(0 === c$1)
|
||
var
|
||
c$2=caml_call2(cmp,x2$0,x3),
|
||
_zq_=
|
||
0 === c$2
|
||
?[0,x2$0,0]
|
||
:0 <= c$2?[0,x3,[0,x2$0,0]]:[0,x2$0,[0,x3,0]],
|
||
s$0=_zq_;
|
||
else
|
||
if(0 <= c$1)
|
||
{var c$3=caml_call2(cmp,x1$0,x3);
|
||
if(0 === c$3)
|
||
var _zr_=[0,x2$0,[0,x1$0,0]];
|
||
else
|
||
if(0 <= c$3)
|
||
var
|
||
c$4=caml_call2(cmp,x2$0,x3),
|
||
_zs_=
|
||
0 === c$4
|
||
?[0,x2$0,[0,x1$0,0]]
|
||
:0 <= c$4
|
||
?[0,x3,[0,x2$0,[0,x1$0,0]]]
|
||
:[0,x2$0,[0,x3,[0,x1$0,0]]],
|
||
_zr_=_zs_;
|
||
else
|
||
var _zr_=[0,x2$0,[0,x1$0,[0,x3,0]]];
|
||
var s$0=_zr_}
|
||
else
|
||
{var c$5=caml_call2(cmp,x2$0,x3);
|
||
if(0 === c$5)
|
||
var _zt_=[0,x1$0,[0,x2$0,0]];
|
||
else
|
||
if(0 <= c$5)
|
||
var
|
||
c$6=caml_call2(cmp,x1$0,x3),
|
||
_zu_=
|
||
0 === c$6
|
||
?[0,x1$0,[0,x2$0,0]]
|
||
:0 <= c$6
|
||
?[0,x3,[0,x1$0,[0,x2$0,0]]]
|
||
:[0,x1$0,[0,x3,[0,x2$0,0]]],
|
||
_zt_=_zu_;
|
||
else
|
||
var _zt_=[0,x1$0,[0,x2$0,[0,x3,0]]];
|
||
var s$0=_zt_}
|
||
return [0,s$0,tl$1]}}}
|
||
var
|
||
n1=n >> 1,
|
||
n2=n - n1 | 0,
|
||
match=rev_sort(n1,l),
|
||
l2$0=match[2],
|
||
s1=match[1],
|
||
match$0=rev_sort(n2,l2$0),
|
||
tl$0=match$0[2],
|
||
s2=match$0[1],
|
||
l1=s1,
|
||
l2=s2,
|
||
accu=0;
|
||
for(;;)
|
||
{if(l1)
|
||
{if(l2)
|
||
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1],c=caml_call2(cmp,h1,h2);
|
||
if(0 === c)
|
||
{var accu$0=[0,h1,accu],l1=t1,l2=t2,accu=accu$0;continue}
|
||
if(0 < c){var accu$1=[0,h1,accu],l1=t1,accu=accu$1;continue}
|
||
var accu$2=[0,h2,accu],l2=t2,accu=accu$2;
|
||
continue}
|
||
var _zn_=rev_append(l1,accu)}
|
||
else
|
||
var _zn_=rev_append(l2,accu);
|
||
return [0,_zn_,tl$0]}}
|
||
function rev_sort(n,l)
|
||
{if(2 === n)
|
||
{if(l)
|
||
{var _zd_=l[2];
|
||
if(_zd_)
|
||
{var
|
||
tl=_zd_[2],
|
||
x2=_zd_[1],
|
||
x1=l[1],
|
||
c$0=caml_call2(cmp,x1,x2),
|
||
s=0 === c$0?[0,x1,0]:0 < c$0?[0,x1,[0,x2,0]]:[0,x2,[0,x1,0]];
|
||
return [0,s,tl]}}}
|
||
else
|
||
if(3 === n && l)
|
||
{var _zf_=l[2];
|
||
if(_zf_)
|
||
{var _zg_=_zf_[2];
|
||
if(_zg_)
|
||
{var
|
||
tl$1=_zg_[2],
|
||
x3=_zg_[1],
|
||
x2$0=_zf_[1],
|
||
x1$0=l[1],
|
||
c$1=caml_call2(cmp,x1$0,x2$0);
|
||
if(0 === c$1)
|
||
var
|
||
c$2=caml_call2(cmp,x2$0,x3),
|
||
_zh_=
|
||
0 === c$2
|
||
?[0,x2$0,0]
|
||
:0 < c$2?[0,x2$0,[0,x3,0]]:[0,x3,[0,x2$0,0]],
|
||
s$0=_zh_;
|
||
else
|
||
if(0 < c$1)
|
||
{var c$3=caml_call2(cmp,x2$0,x3);
|
||
if(0 === c$3)
|
||
var _zi_=[0,x1$0,[0,x2$0,0]];
|
||
else
|
||
if(0 < c$3)
|
||
var _zi_=[0,x1$0,[0,x2$0,[0,x3,0]]];
|
||
else
|
||
var
|
||
c$4=caml_call2(cmp,x1$0,x3),
|
||
_zj_=
|
||
0 === c$4
|
||
?[0,x1$0,[0,x2$0,0]]
|
||
:0 < c$4
|
||
?[0,x1$0,[0,x3,[0,x2$0,0]]]
|
||
:[0,x3,[0,x1$0,[0,x2$0,0]]],
|
||
_zi_=_zj_;
|
||
var s$0=_zi_}
|
||
else
|
||
{var c$5=caml_call2(cmp,x1$0,x3);
|
||
if(0 === c$5)
|
||
var _zk_=[0,x2$0,[0,x1$0,0]];
|
||
else
|
||
if(0 < c$5)
|
||
var _zk_=[0,x2$0,[0,x1$0,[0,x3,0]]];
|
||
else
|
||
var
|
||
c$6=caml_call2(cmp,x2$0,x3),
|
||
_zl_=
|
||
0 === c$6
|
||
?[0,x2$0,[0,x1$0,0]]
|
||
:0 < c$6
|
||
?[0,x2$0,[0,x3,[0,x1$0,0]]]
|
||
:[0,x3,[0,x2$0,[0,x1$0,0]]],
|
||
_zk_=_zl_;
|
||
var s$0=_zk_}
|
||
return [0,s$0,tl$1]}}}
|
||
var
|
||
n1=n >> 1,
|
||
n2=n - n1 | 0,
|
||
match=sort(n1,l),
|
||
l2$0=match[2],
|
||
s1=match[1],
|
||
match$0=sort(n2,l2$0),
|
||
tl$0=match$0[2],
|
||
s2=match$0[1],
|
||
l1=s1,
|
||
l2=s2,
|
||
accu=0;
|
||
for(;;)
|
||
{if(l1)
|
||
{if(l2)
|
||
{var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1],c=caml_call2(cmp,h1,h2);
|
||
if(0 === c)
|
||
{var accu$0=[0,h1,accu],l1=t1,l2=t2,accu=accu$0;continue}
|
||
if(0 <= c){var accu$1=[0,h2,accu],l2=t2,accu=accu$1;continue}
|
||
var accu$2=[0,h1,accu],l1=t1,accu=accu$2;
|
||
continue}
|
||
var _ze_=rev_append(l1,accu)}
|
||
else
|
||
var _ze_=rev_append(l2,accu);
|
||
return [0,_ze_,tl$0]}}
|
||
var len=length(l);
|
||
return 2 <= len?sort(len,l)[1]:l}
|
||
function compare_lengths(l1,l2)
|
||
{var l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{if(l2$0){var l2$1=l2$0[2],l1$1=l1$0[2],l1$0=l1$1,l2$0=l2$1;continue}
|
||
return 1}
|
||
return l2$0?-1:0}}
|
||
function compare_length_with(l,n)
|
||
{var l$0=l,n$0=n;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var l$1=l$0[2];
|
||
if(0 < n$0){var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1;continue}
|
||
return 1}
|
||
return 0 === n$0?0:0 < n$0?-1:1}}
|
||
function to_seq$1(l)
|
||
{function aux(l,param)
|
||
{if(l)
|
||
{var tail=l[2],x=l[1];
|
||
return [0,x,function(_zc_){return aux(tail,_zc_)}]}
|
||
return 0}
|
||
return function(_zb_){return aux(l,_zb_)}}
|
||
function of_seq(seq)
|
||
{function direct(depth,seq)
|
||
{if(0 === depth)
|
||
{var _za_=0;
|
||
return rev(fold_left(function(acc,x){return [0,x,acc]},_za_,seq))}
|
||
var match=caml_call1(seq,0);
|
||
if(match)
|
||
{var next=match[2],x=match[1];
|
||
return [0,x,direct(depth - 1 | 0,next)]}
|
||
return 0}
|
||
return direct(500,seq)}
|
||
var
|
||
include=
|
||
[0,
|
||
length,
|
||
compare_lengths,
|
||
compare_length_with,
|
||
cons,
|
||
hd,
|
||
tl,
|
||
nth,
|
||
nth_opt,
|
||
rev,
|
||
init,
|
||
append,
|
||
rev_append,
|
||
flatten,
|
||
flatten,
|
||
iter$2,
|
||
iteri,
|
||
map$2,
|
||
mapi,
|
||
rev_map,
|
||
filter_map$0,
|
||
concat_map,
|
||
fold_left$0,
|
||
fold_right,
|
||
iter2,
|
||
map2,
|
||
rev_map2,
|
||
fold_left2,
|
||
fold_right2,
|
||
for_all,
|
||
exists,
|
||
for_all2,
|
||
exists2,
|
||
mem,
|
||
memq,
|
||
find,
|
||
find_opt,
|
||
find_map,
|
||
find_all,
|
||
find_all,
|
||
partition,
|
||
assoc,
|
||
assoc_opt,
|
||
assq,
|
||
assq_opt,
|
||
mem_assoc,
|
||
mem_assq,
|
||
remove_assoc,
|
||
remove_assq,
|
||
split,
|
||
combine,
|
||
fast_sort,
|
||
fast_sort,
|
||
fast_sort,
|
||
sort_uniq,
|
||
merge,
|
||
to_seq$1,
|
||
of_seq];
|
||
caml_register_global(756,include,"Stdlib__list");
|
||
function make(n,c)
|
||
{var s=caml_create_bytes(n);caml_fill_bytes(s,0,n,c);return s}
|
||
function init$0(n,f)
|
||
{var s=caml_create_bytes(n),_y__=n - 1 | 0,_y9_=0;
|
||
if(! (_y__ < 0))
|
||
{var i=_y9_;
|
||
for(;;)
|
||
{caml_bytes_unsafe_set(s,i,caml_call1(f,i));
|
||
var _y$_=i + 1 | 0;
|
||
if(_y__ !== i){var i=_y$_;continue}
|
||
break}}
|
||
return s}
|
||
var empty$0=caml_create_bytes(0);
|
||
function copy(s)
|
||
{var len=caml_ml_bytes_length(s),r=caml_create_bytes(len);
|
||
caml_blit_bytes(s,0,r,0,len);
|
||
return r}
|
||
function to_string$1(b){return caml_string_of_bytes(copy(b))}
|
||
function of_string(s){return copy(caml_bytes_of_string(s))}
|
||
function sub(s,ofs,len)
|
||
{if
|
||
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
|
||
{var r=caml_create_bytes(len);caml_blit_bytes(s,ofs,r,0,len);return r}
|
||
return invalid_arg(cst_String_sub_Bytes_sub)}
|
||
function sub_string(b,ofs,len)
|
||
{return caml_string_of_bytes(sub(b,ofs,len))}
|
||
function symbol$1(a,b)
|
||
{var c=a + b | 0,_y8_=b < 0?1:0,match=c < 0?1:0,switch$0=0;
|
||
if(a < 0)
|
||
{if(_y8_ && ! match)switch$0 = 1}
|
||
else
|
||
if(! _y8_ && match)switch$0 = 1;
|
||
return switch$0?invalid_arg(cst_Bytes_extend):c}
|
||
function extend(s,left,right)
|
||
{var
|
||
len=symbol$1(symbol$1(caml_ml_bytes_length(s),left),right),
|
||
r=caml_create_bytes(len);
|
||
if(0 <= left)
|
||
var dstoff=left,srcoff=0;
|
||
else
|
||
var dstoff=0,srcoff=- left | 0;
|
||
var cpylen=min(caml_ml_bytes_length(s) - srcoff | 0,len - dstoff | 0);
|
||
if(0 < cpylen)caml_blit_bytes(s,srcoff,r,dstoff,cpylen);
|
||
return r}
|
||
function fill(s,ofs,len,c)
|
||
{if
|
||
(0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs))
|
||
return caml_fill_bytes(s,ofs,len,c);
|
||
return invalid_arg(cst_String_fill_Bytes_fill)}
|
||
function blit(s1,ofs1,s2,ofs2,len)
|
||
{if
|
||
(0
|
||
<=
|
||
len
|
||
&&
|
||
0
|
||
<=
|
||
ofs1
|
||
&&
|
||
!
|
||
((caml_ml_bytes_length(s1) - len | 0) < ofs1)
|
||
&&
|
||
0
|
||
<=
|
||
ofs2
|
||
&&
|
||
!
|
||
((caml_ml_bytes_length(s2) - len | 0) < ofs2))
|
||
return caml_blit_bytes(s1,ofs1,s2,ofs2,len);
|
||
return invalid_arg(cst_Bytes_blit)}
|
||
function blit$0(s1,ofs1,s2,ofs2,len)
|
||
{if
|
||
(0
|
||
<=
|
||
len
|
||
&&
|
||
0
|
||
<=
|
||
ofs1
|
||
&&
|
||
!
|
||
((caml_ml_string_length(s1) - len | 0) < ofs1)
|
||
&&
|
||
0
|
||
<=
|
||
ofs2
|
||
&&
|
||
!
|
||
((caml_ml_bytes_length(s2) - len | 0) < ofs2))
|
||
return caml_blit_string(s1,ofs1,s2,ofs2,len);
|
||
return invalid_arg(cst_String_blit_Bytes_blit_str)}
|
||
function iter$3(f,a)
|
||
{var _y6_=caml_ml_bytes_length(a) - 1 | 0,_y5_=0;
|
||
if(! (_y6_ < 0))
|
||
{var i=_y5_;
|
||
for(;;)
|
||
{caml_call1(f,caml_bytes_unsafe_get(a,i));
|
||
var _y7_=i + 1 | 0;
|
||
if(_y6_ !== i){var i=_y7_;continue}
|
||
break}}
|
||
return 0}
|
||
function iteri$0(f,a)
|
||
{var _y3_=caml_ml_bytes_length(a) - 1 | 0,_y2_=0;
|
||
if(! (_y3_ < 0))
|
||
{var i=_y2_;
|
||
for(;;)
|
||
{caml_call2(f,i,caml_bytes_unsafe_get(a,i));
|
||
var _y4_=i + 1 | 0;
|
||
if(_y3_ !== i){var i=_y4_;continue}
|
||
break}}
|
||
return 0}
|
||
function concat(sep,l)
|
||
{if(l)
|
||
{var seplen=caml_ml_bytes_length(sep),acc=0,param=l,pos$1=0;
|
||
for(;;)
|
||
{if(param)
|
||
{var _yZ_=param[1];
|
||
if(param[2])
|
||
{var
|
||
tl=param[2],
|
||
x=(caml_ml_bytes_length(_yZ_) + seplen | 0) + acc | 0,
|
||
acc$0=acc <= x?x:invalid_arg(cst_Bytes_concat),
|
||
acc=acc$0,
|
||
param=tl;
|
||
continue}
|
||
var _y1_=caml_ml_bytes_length(_yZ_) + acc | 0}
|
||
else
|
||
var _y1_=acc;
|
||
var dst=caml_create_bytes(_y1_),pos=pos$1,param$0=l;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var _y0_=param$0[1];
|
||
if(param$0[2])
|
||
{var tl$0=param$0[2];
|
||
caml_blit_bytes(_y0_,0,dst,pos,caml_ml_bytes_length(_y0_));
|
||
caml_blit_bytes
|
||
(sep,0,dst,pos + caml_ml_bytes_length(_y0_) | 0,seplen);
|
||
var
|
||
pos$0=(pos + caml_ml_bytes_length(_y0_) | 0) + seplen | 0,
|
||
pos=pos$0,
|
||
param$0=tl$0;
|
||
continue}
|
||
caml_blit_bytes(_y0_,0,dst,pos,caml_ml_bytes_length(_y0_));
|
||
return dst}
|
||
return dst}}}
|
||
return empty$0}
|
||
function cat(s1,s2)
|
||
{var
|
||
l1=caml_ml_bytes_length(s1),
|
||
l2=caml_ml_bytes_length(s2),
|
||
r=caml_create_bytes(l1 + l2 | 0);
|
||
caml_blit_bytes(s1,0,r,0,l1);
|
||
caml_blit_bytes(s2,0,r,l1,l2);
|
||
return r}
|
||
function is_space(param)
|
||
{var _yY_=param - 9 | 0,switch$0=0;
|
||
if(4 < _yY_ >>> 0)
|
||
{if(23 === _yY_)switch$0 = 1}
|
||
else
|
||
if(2 !== _yY_)switch$0 = 1;
|
||
return switch$0?1:0}
|
||
function trim(s)
|
||
{var len=caml_ml_bytes_length(s),i=[0,0];
|
||
for(;;)
|
||
{if(i[1] < len && is_space(caml_bytes_unsafe_get(s,i[1])))
|
||
{i[1]++;continue}
|
||
var j=[0,len - 1 | 0];
|
||
for(;;)
|
||
{if(i[1] <= j[1] && is_space(caml_bytes_unsafe_get(s,j[1])))
|
||
{j[1] += -1;continue}
|
||
return i[1] <= j[1]?sub(s,i[1],(j[1] - i[1] | 0) + 1 | 0):empty$0}}}
|
||
function escaped$0(s)
|
||
{var n=[0,0],_yR_=caml_ml_bytes_length(s) - 1 | 0,_yQ_=0;
|
||
if(! (_yR_ < 0))
|
||
{var i$0=_yQ_;
|
||
for(;;)
|
||
{var match=caml_bytes_unsafe_get(s,i$0),switch$0=0;
|
||
if(32 <= match)
|
||
{var _yV_=match - 34 | 0,switch$1=0;
|
||
if(58 < _yV_ >>> 0)
|
||
{if(93 <= _yV_)switch$1 = 1}
|
||
else
|
||
if(56 < (_yV_ - 1 | 0) >>> 0){switch$0 = 1;switch$1 = 1}
|
||
if(! switch$1){var _yW_=1;switch$0 = 2}}
|
||
else
|
||
if(11 <= match)
|
||
{if(13 === match)switch$0 = 1}
|
||
else
|
||
if(8 <= match)switch$0 = 1;
|
||
switch(switch$0){case 0:var _yW_=4;break;case 1:var _yW_=2;break}
|
||
n[1] = n[1] + _yW_ | 0;
|
||
var _yX_=i$0 + 1 | 0;
|
||
if(_yR_ !== i$0){var i$0=_yX_;continue}
|
||
break}}
|
||
if(n[1] === caml_ml_bytes_length(s))return copy(s);
|
||
var s$0=caml_create_bytes(n[1]);
|
||
n[1] = 0;
|
||
var _yT_=caml_ml_bytes_length(s) - 1 | 0,_yS_=0;
|
||
if(! (_yT_ < 0))
|
||
{var i=_yS_;
|
||
for(;;)
|
||
{var c=caml_bytes_unsafe_get(s,i),switch$2=0;
|
||
if(35 <= c)
|
||
if(92 === c)
|
||
switch$2 = 2;
|
||
else
|
||
if(127 <= c)switch$2 = 1;else switch$2 = 3;
|
||
else
|
||
if(32 <= c)
|
||
if(34 <= c)switch$2 = 2;else switch$2 = 3;
|
||
else
|
||
if(14 <= c)
|
||
switch$2 = 1;
|
||
else
|
||
switch(c)
|
||
{case 8:
|
||
caml_bytes_unsafe_set(s$0,n[1],92);
|
||
n[1]++;
|
||
caml_bytes_unsafe_set(s$0,n[1],98);
|
||
break;
|
||
case 9:
|
||
caml_bytes_unsafe_set(s$0,n[1],92);
|
||
n[1]++;
|
||
caml_bytes_unsafe_set(s$0,n[1],116);
|
||
break;
|
||
case 10:
|
||
caml_bytes_unsafe_set(s$0,n[1],92);
|
||
n[1]++;
|
||
caml_bytes_unsafe_set(s$0,n[1],110);
|
||
break;
|
||
case 13:
|
||
caml_bytes_unsafe_set(s$0,n[1],92);
|
||
n[1]++;
|
||
caml_bytes_unsafe_set(s$0,n[1],114);
|
||
break;
|
||
default:switch$2 = 1}
|
||
switch(switch$2)
|
||
{case 1:
|
||
caml_bytes_unsafe_set(s$0,n[1],92);
|
||
n[1]++;
|
||
caml_bytes_unsafe_set(s$0,n[1],48 + (c / 100 | 0) | 0);
|
||
n[1]++;
|
||
caml_bytes_unsafe_set(s$0,n[1],48 + ((c / 10 | 0) % 10 | 0) | 0);
|
||
n[1]++;
|
||
caml_bytes_unsafe_set(s$0,n[1],48 + (c % 10 | 0) | 0);
|
||
break;
|
||
case 2:
|
||
caml_bytes_unsafe_set(s$0,n[1],92);
|
||
n[1]++;
|
||
caml_bytes_unsafe_set(s$0,n[1],c);
|
||
break;
|
||
case 3:caml_bytes_unsafe_set(s$0,n[1],c);break
|
||
}
|
||
n[1]++;
|
||
var _yU_=i + 1 | 0;
|
||
if(_yT_ !== i){var i=_yU_;continue}
|
||
break}}
|
||
return s$0}
|
||
function map$3(f,s)
|
||
{var l=caml_ml_bytes_length(s);
|
||
if(0 === l)return s;
|
||
var r=caml_create_bytes(l),_yO_=l - 1 | 0,_yN_=0;
|
||
if(! (_yO_ < 0))
|
||
{var i=_yN_;
|
||
for(;;)
|
||
{caml_bytes_unsafe_set(r,i,caml_call1(f,caml_bytes_unsafe_get(s,i)));
|
||
var _yP_=i + 1 | 0;
|
||
if(_yO_ !== i){var i=_yP_;continue}
|
||
break}}
|
||
return r}
|
||
function mapi$0(f,s)
|
||
{var l=caml_ml_bytes_length(s);
|
||
if(0 === l)return s;
|
||
var r=caml_create_bytes(l),_yL_=l - 1 | 0,_yK_=0;
|
||
if(! (_yL_ < 0))
|
||
{var i=_yK_;
|
||
for(;;)
|
||
{caml_bytes_unsafe_set
|
||
(r,i,caml_call2(f,i,caml_bytes_unsafe_get(s,i)));
|
||
var _yM_=i + 1 | 0;
|
||
if(_yL_ !== i){var i=_yM_;continue}
|
||
break}}
|
||
return r}
|
||
function uppercase_ascii$0(s){return map$3(uppercase_ascii,s)}
|
||
function lowercase_ascii$0(s){return map$3(lowercase_ascii,s)}
|
||
function apply1(f,s)
|
||
{if(0 === caml_ml_bytes_length(s))return s;
|
||
var r=copy(s);
|
||
caml_bytes_unsafe_set(r,0,caml_call1(f,caml_bytes_unsafe_get(s,0)));
|
||
return r}
|
||
function capitalize_ascii(s){return apply1(uppercase_ascii,s)}
|
||
function uncapitalize_ascii(s){return apply1(lowercase_ascii,s)}
|
||
function index_rec(s,lim,i,c)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(lim <= i$0)throw Not_found;
|
||
if(caml_bytes_unsafe_get(s,i$0) === c)return i$0;
|
||
var i$1=i$0 + 1 | 0,i$0=i$1;
|
||
continue}}
|
||
function index(s,c){return index_rec(s,caml_ml_bytes_length(s),0,c)}
|
||
function index_rec_opt(s,lim,i,c)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(lim <= i$0)return 0;
|
||
if(caml_bytes_unsafe_get(s,i$0) === c)return [0,i$0];
|
||
var i$1=i$0 + 1 | 0,i$0=i$1;
|
||
continue}}
|
||
function index_opt(s,c)
|
||
{return index_rec_opt(s,caml_ml_bytes_length(s),0,c)}
|
||
function index_from(s,i,c)
|
||
{var l=caml_ml_bytes_length(s);
|
||
if(0 <= i && ! (l < i))return index_rec(s,l,i,c);
|
||
return invalid_arg(cst_String_index_from_Bytes_in)}
|
||
function index_from_opt(s,i,c)
|
||
{var l=caml_ml_bytes_length(s);
|
||
if(0 <= i && ! (l < i))return index_rec_opt(s,l,i,c);
|
||
return invalid_arg(cst_String_index_from_opt_Byte)}
|
||
function rindex_rec(s,i,c)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(0 <= i$0)
|
||
{if(caml_bytes_unsafe_get(s,i$0) === c)return i$0;
|
||
var i$1=i$0 - 1 | 0,i$0=i$1;
|
||
continue}
|
||
throw Not_found}}
|
||
function rindex(s,c)
|
||
{return rindex_rec(s,caml_ml_bytes_length(s) - 1 | 0,c)}
|
||
function rindex_from(s,i,c)
|
||
{if(-1 <= i && ! (caml_ml_bytes_length(s) <= i))return rindex_rec(s,i,c);
|
||
return invalid_arg(cst_String_rindex_from_Bytes_r)}
|
||
function rindex_rec_opt(s,i,c)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(0 <= i$0)
|
||
{if(caml_bytes_unsafe_get(s,i$0) === c)return [0,i$0];
|
||
var i$1=i$0 - 1 | 0,i$0=i$1;
|
||
continue}
|
||
return 0}}
|
||
function rindex_opt(s,c)
|
||
{return rindex_rec_opt(s,caml_ml_bytes_length(s) - 1 | 0,c)}
|
||
function rindex_from_opt(s,i,c)
|
||
{if(-1 <= i && ! (caml_ml_bytes_length(s) <= i))
|
||
return rindex_rec_opt(s,i,c);
|
||
return invalid_arg(cst_String_rindex_from_opt_Byt)}
|
||
function contains_from(s,i,c)
|
||
{var l=caml_ml_bytes_length(s);
|
||
if(0 <= i && ! (l < i))
|
||
try
|
||
{index_rec(s,l,i,c);var _yI_=1;return _yI_}
|
||
catch(_yJ_)
|
||
{_yJ_ = caml_wrap_exception(_yJ_);
|
||
if(_yJ_ === Not_found)return 0;
|
||
throw _yJ_}
|
||
return invalid_arg(cst_String_contains_from_Bytes)}
|
||
function contains(s,c){return contains_from(s,0,c)}
|
||
function rcontains_from(s,i,c)
|
||
{if(0 <= i && ! (caml_ml_bytes_length(s) <= i))
|
||
try
|
||
{rindex_rec(s,i,c);var _yG_=1;return _yG_}
|
||
catch(_yH_)
|
||
{_yH_ = caml_wrap_exception(_yH_);
|
||
if(_yH_ === Not_found)return 0;
|
||
throw _yH_}
|
||
return invalid_arg(cst_String_rcontains_from_Byte)}
|
||
var compare$4=runtime.caml_bytes_compare;
|
||
function uppercase$0(s){return map$3(uppercase,s)}
|
||
function lowercase$0(s){return map$3(lowercase,s)}
|
||
function capitalize(s){return apply1(uppercase,s)}
|
||
function uncapitalize(s){return apply1(lowercase,s)}
|
||
function to_seq$2(s)
|
||
{function aux(i,param)
|
||
{if(i === caml_ml_bytes_length(s))return 0;
|
||
var x=caml_bytes_get(s,i),_yE_=i + 1 | 0;
|
||
return [0,x,function(_yF_){return aux(_yE_,_yF_)}]}
|
||
var _yC_=0;
|
||
return function(_yD_){return aux(_yC_,_yD_)}}
|
||
function to_seqi(s)
|
||
{function aux(i,param)
|
||
{if(i === caml_ml_bytes_length(s))return 0;
|
||
var x=caml_bytes_get(s,i),_yA_=i + 1 | 0;
|
||
return [0,[0,i,x],function(_yB_){return aux(_yA_,_yB_)}]}
|
||
var _yy_=0;
|
||
return function(_yz_){return aux(_yy_,_yz_)}}
|
||
function of_seq$0(i)
|
||
{var n=[0,0],buf=[0,make(256,0)];
|
||
iter
|
||
(function(c)
|
||
{if(n[1] === caml_ml_bytes_length(buf[1]))
|
||
{var
|
||
new_len=
|
||
min(2 * caml_ml_bytes_length(buf[1]) | 0,max_string_length);
|
||
if(caml_ml_bytes_length(buf[1]) === new_len)
|
||
failwith(cst_Bytes_of_seq_cannot_grow_b);
|
||
var new_buf=make(new_len,0);
|
||
blit(buf[1],0,new_buf,0,n[1]);
|
||
buf[1] = new_buf}
|
||
caml_bytes_set(buf[1],n[1],c);
|
||
n[1]++;
|
||
return 0},
|
||
i);
|
||
return sub(buf[1],0,n[1])}
|
||
function get_int8(b,i){return caml_bytes_get(b,i) << 24 >> 24}
|
||
function get_uint16_le(b,i){return caml_bytes_get16(b,i)}
|
||
function get_uint16_be(b,i){return caml_bswap16(caml_bytes_get16(b,i))}
|
||
function get_int16_ne(b,i){return caml_bytes_get16(b,i) << 16 >> 16}
|
||
function get_int16_le(b,i){return caml_bytes_get16(b,i) << 16 >> 16}
|
||
function get_int16_be(b,i){return get_uint16_be(b,i) << 16 >> 16}
|
||
function get_int32_le(b,i){return caml_bytes_get32(b,i)}
|
||
function get_int32_be(b,i){return caml_int32_bswap(caml_bytes_get32(b,i))}
|
||
function get_int64_le(b,i){return caml_bytes_get64(b,i)}
|
||
function get_int64_be(b,i){return caml_int64_bswap(caml_bytes_get64(b,i))}
|
||
function set_int16_le(b,i,x){return caml_bytes_set16(b,i,x)}
|
||
function set_int16_be(b,i,x){return caml_bytes_set16(b,i,caml_bswap16(x))}
|
||
function set_int32_le(b,i,x){return caml_bytes_set32(b,i,x)}
|
||
function set_int32_be(b,i,x)
|
||
{return caml_bytes_set32(b,i,caml_int32_bswap(x))}
|
||
function set_int64_le(b,i,x){return caml_bytes_set64(b,i,x)}
|
||
function set_int64_be(b,i,x)
|
||
{return caml_bytes_set64(b,i,caml_int64_bswap(x))}
|
||
var
|
||
set_uint8=caml_bytes_set,
|
||
set_uint16_ne=caml_bytes_set16,
|
||
set_int64_ne=caml_bytes_set64,
|
||
set_int32_ne=caml_bytes_set32,
|
||
set_int16_ne=caml_bytes_set16,
|
||
set_int8=caml_bytes_set,
|
||
get_int64_ne=caml_bytes_get64,
|
||
get_int32_ne=caml_bytes_get32,
|
||
get_uint16_ne=caml_bytes_get16,
|
||
get_uint8=caml_bytes_get,
|
||
unsafe_of_string=caml_bytes_of_string,
|
||
unsafe_to_string=caml_string_of_bytes,
|
||
equal$4=runtime.caml_bytes_equal,
|
||
include$0=
|
||
[0,
|
||
make,
|
||
init$0,
|
||
empty$0,
|
||
copy,
|
||
of_string,
|
||
to_string$1,
|
||
sub,
|
||
sub_string,
|
||
extend,
|
||
fill,
|
||
blit,
|
||
blit$0,
|
||
concat,
|
||
cat,
|
||
iter$3,
|
||
iteri$0,
|
||
map$3,
|
||
mapi$0,
|
||
trim,
|
||
escaped$0,
|
||
index,
|
||
index_opt,
|
||
rindex,
|
||
rindex_opt,
|
||
index_from,
|
||
index_from_opt,
|
||
rindex_from,
|
||
rindex_from_opt,
|
||
contains,
|
||
contains_from,
|
||
rcontains_from,
|
||
uppercase$0,
|
||
lowercase$0,
|
||
capitalize,
|
||
uncapitalize,
|
||
uppercase_ascii$0,
|
||
lowercase_ascii$0,
|
||
capitalize_ascii,
|
||
uncapitalize_ascii,
|
||
compare$4,
|
||
equal$4,
|
||
unsafe_to_string,
|
||
unsafe_of_string,
|
||
to_seq$2,
|
||
to_seqi,
|
||
of_seq$0,
|
||
get_uint8,
|
||
get_int8,
|
||
get_uint16_ne,
|
||
get_uint16_be,
|
||
get_uint16_le,
|
||
get_int16_ne,
|
||
get_int16_be,
|
||
get_int16_le,
|
||
get_int32_ne,
|
||
get_int32_be,
|
||
get_int32_le,
|
||
get_int64_ne,
|
||
get_int64_be,
|
||
get_int64_le,
|
||
set_uint8,
|
||
set_int8,
|
||
set_uint16_ne,
|
||
set_int16_be,
|
||
set_int16_le,
|
||
set_int16_ne,
|
||
set_int16_be,
|
||
set_int16_le,
|
||
set_int32_ne,
|
||
set_int32_be,
|
||
set_int32_le,
|
||
set_int64_ne,
|
||
set_int64_be,
|
||
set_int64_le];
|
||
caml_register_global(757,include$0,"Stdlib__bytes");
|
||
function make$0(n,c){return caml_string_of_bytes(make(n,c))}
|
||
function init$1(n,f){return caml_string_of_bytes(init$0(n,f))}
|
||
function copy$0(s)
|
||
{return caml_string_of_bytes(copy(caml_bytes_of_string(s)))}
|
||
function sub$0(s,ofs,len)
|
||
{return caml_string_of_bytes(sub(caml_bytes_of_string(s),ofs,len))}
|
||
function concat$0(sep,l)
|
||
{if(l)
|
||
{var seplen=caml_ml_string_length(sep),acc=0,param=l,pos$1=0;
|
||
for(;;)
|
||
{if(param)
|
||
{var _yv_=param[1];
|
||
if(param[2])
|
||
{var
|
||
tl=param[2],
|
||
x=(caml_ml_string_length(_yv_) + seplen | 0) + acc | 0,
|
||
acc$0=acc <= x?x:invalid_arg(cst_String_concat),
|
||
acc=acc$0,
|
||
param=tl;
|
||
continue}
|
||
var _yx_=caml_ml_string_length(_yv_) + acc | 0}
|
||
else
|
||
var _yx_=acc;
|
||
var dst=caml_create_bytes(_yx_),pos=pos$1,param$0=l;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var _yw_=param$0[1];
|
||
if(param$0[2])
|
||
{var tl$0=param$0[2];
|
||
caml_blit_string(_yw_,0,dst,pos,caml_ml_string_length(_yw_));
|
||
caml_blit_string
|
||
(sep,0,dst,pos + caml_ml_string_length(_yw_) | 0,seplen);
|
||
var
|
||
pos$0=(pos + caml_ml_string_length(_yw_) | 0) + seplen | 0,
|
||
pos=pos$0,
|
||
param$0=tl$0;
|
||
continue}
|
||
caml_blit_string(_yw_,0,dst,pos,caml_ml_string_length(_yw_))}
|
||
return caml_string_of_bytes(dst)}}}
|
||
return cst$3}
|
||
function iter$4(f,s)
|
||
{var _yt_=caml_ml_string_length(s) - 1 | 0,_ys_=0;
|
||
if(! (_yt_ < 0))
|
||
{var i=_ys_;
|
||
for(;;)
|
||
{caml_call1(f,caml_string_unsafe_get(s,i));
|
||
var _yu_=i + 1 | 0;
|
||
if(_yt_ !== i){var i=_yu_;continue}
|
||
break}}
|
||
return 0}
|
||
function iteri$1(f,s)
|
||
{var _yq_=caml_ml_string_length(s) - 1 | 0,_yp_=0;
|
||
if(! (_yq_ < 0))
|
||
{var i=_yp_;
|
||
for(;;)
|
||
{caml_call2(f,i,caml_string_unsafe_get(s,i));
|
||
var _yr_=i + 1 | 0;
|
||
if(_yq_ !== i){var i=_yr_;continue}
|
||
break}}
|
||
return 0}
|
||
function map$4(f,s)
|
||
{return caml_string_of_bytes(map$3(f,caml_bytes_of_string(s)))}
|
||
function mapi$1(f,s)
|
||
{return caml_string_of_bytes(mapi$0(f,caml_bytes_of_string(s)))}
|
||
function is_space$0(param)
|
||
{var _yo_=param - 9 | 0,switch$0=0;
|
||
if(4 < _yo_ >>> 0)
|
||
{if(23 === _yo_)switch$0 = 1}
|
||
else
|
||
if(2 !== _yo_)switch$0 = 1;
|
||
return switch$0?1:0}
|
||
function trim$0(s)
|
||
{if(caml_string_equal(s,cst$4))return s;
|
||
if
|
||
(!
|
||
is_space$0(caml_string_unsafe_get(s,0))
|
||
&&
|
||
!
|
||
is_space$0(caml_string_unsafe_get(s,caml_ml_string_length(s) - 1 | 0)))
|
||
return s;
|
||
return caml_string_of_bytes(trim(caml_bytes_of_string(s)))}
|
||
function escaped$1(s)
|
||
{var n=caml_ml_string_length(s),i=0;
|
||
for(;;)
|
||
{if(n <= i)return s;
|
||
var match=caml_string_unsafe_get(s,i),_yn_=match - 32 | 0,switch$0=0;
|
||
if(59 < _yn_ >>> 0)
|
||
{if(33 < (_yn_ - 61 | 0) >>> 0)switch$0 = 1}
|
||
else
|
||
if(2 === _yn_)switch$0 = 1;
|
||
if(switch$0)
|
||
return caml_string_of_bytes(escaped$0(caml_bytes_of_string(s)));
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
function index_rec$0(s,lim,i,c)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(lim <= i$0)throw Not_found;
|
||
if(caml_string_unsafe_get(s,i$0) === c)return i$0;
|
||
var i$1=i$0 + 1 | 0,i$0=i$1;
|
||
continue}}
|
||
function index$0(s,c){return index_rec$0(s,caml_ml_string_length(s),0,c)}
|
||
function index_rec_opt$0(s,lim,i,c)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(lim <= i$0)return 0;
|
||
if(caml_string_unsafe_get(s,i$0) === c)return [0,i$0];
|
||
var i$1=i$0 + 1 | 0,i$0=i$1;
|
||
continue}}
|
||
function index_opt$0(s,c)
|
||
{return index_rec_opt$0(s,caml_ml_string_length(s),0,c)}
|
||
function index_from$0(s,i,c)
|
||
{var l=caml_ml_string_length(s);
|
||
if(0 <= i && ! (l < i))return index_rec$0(s,l,i,c);
|
||
return invalid_arg(cst_String_index_from_Bytes_in$0)}
|
||
function index_from_opt$0(s,i,c)
|
||
{var l=caml_ml_string_length(s);
|
||
if(0 <= i && ! (l < i))return index_rec_opt$0(s,l,i,c);
|
||
return invalid_arg(cst_String_index_from_opt_Byte$0)}
|
||
function rindex_rec$0(s,i,c)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(0 <= i$0)
|
||
{if(caml_string_unsafe_get(s,i$0) === c)return i$0;
|
||
var i$1=i$0 - 1 | 0,i$0=i$1;
|
||
continue}
|
||
throw Not_found}}
|
||
function rindex$0(s,c)
|
||
{return rindex_rec$0(s,caml_ml_string_length(s) - 1 | 0,c)}
|
||
function rindex_from$0(s,i,c)
|
||
{if(-1 <= i && ! (caml_ml_string_length(s) <= i))
|
||
return rindex_rec$0(s,i,c);
|
||
return invalid_arg(cst_String_rindex_from_Bytes_r$0)}
|
||
function rindex_rec_opt$0(s,i,c)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(0 <= i$0)
|
||
{if(caml_string_unsafe_get(s,i$0) === c)return [0,i$0];
|
||
var i$1=i$0 - 1 | 0,i$0=i$1;
|
||
continue}
|
||
return 0}}
|
||
function rindex_opt$0(s,c)
|
||
{return rindex_rec_opt$0(s,caml_ml_string_length(s) - 1 | 0,c)}
|
||
function rindex_from_opt$0(s,i,c)
|
||
{if(-1 <= i && ! (caml_ml_string_length(s) <= i))
|
||
return rindex_rec_opt$0(s,i,c);
|
||
return invalid_arg(cst_String_rindex_from_opt_Byt$0)}
|
||
function contains_from$0(s,i,c)
|
||
{var l=caml_ml_string_length(s);
|
||
if(0 <= i && ! (l < i))
|
||
try
|
||
{index_rec$0(s,l,i,c);var _yl_=1;return _yl_}
|
||
catch(_ym_)
|
||
{_ym_ = caml_wrap_exception(_ym_);
|
||
if(_ym_ === Not_found)return 0;
|
||
throw _ym_}
|
||
return invalid_arg(cst_String_contains_from_Bytes$0)}
|
||
function contains$0(s,c){return contains_from$0(s,0,c)}
|
||
function rcontains_from$0(s,i,c)
|
||
{if(0 <= i && ! (caml_ml_string_length(s) <= i))
|
||
try
|
||
{rindex_rec$0(s,i,c);var _yj_=1;return _yj_}
|
||
catch(_yk_)
|
||
{_yk_ = caml_wrap_exception(_yk_);
|
||
if(_yk_ === Not_found)return 0;
|
||
throw _yk_}
|
||
return invalid_arg(cst_String_rcontains_from_Byte$0)}
|
||
function uppercase_ascii$1(s)
|
||
{return caml_string_of_bytes(uppercase_ascii$0(caml_bytes_of_string(s)))}
|
||
function lowercase_ascii$1(s)
|
||
{return caml_string_of_bytes(lowercase_ascii$0(caml_bytes_of_string(s)))}
|
||
function capitalize_ascii$0(s)
|
||
{return caml_string_of_bytes(capitalize_ascii(caml_bytes_of_string(s)))}
|
||
function uncapitalize_ascii$0(s)
|
||
{return caml_string_of_bytes(uncapitalize_ascii(caml_bytes_of_string(s)))}
|
||
var compare$5=caml_string_compare;
|
||
function split_on_char(sep,s)
|
||
{var
|
||
r=[0,0],
|
||
j=[0,caml_ml_string_length(s)],
|
||
_yf_=caml_ml_string_length(s) - 1 | 0;
|
||
if(! (_yf_ < 0))
|
||
{var i=_yf_;
|
||
for(;;)
|
||
{if(caml_string_unsafe_get(s,i) === sep)
|
||
{var _yh_=r[1];
|
||
r[1] = [0,sub$0(s,i + 1 | 0,(j[1] - i | 0) - 1 | 0),_yh_];
|
||
j[1] = i}
|
||
var _yi_=i - 1 | 0;
|
||
if(0 !== i){var i=_yi_;continue}
|
||
break}}
|
||
var _yg_=r[1];
|
||
return [0,sub$0(s,0,j[1]),_yg_]}
|
||
function uppercase$1(s)
|
||
{return caml_string_of_bytes(uppercase$0(caml_bytes_of_string(s)))}
|
||
function lowercase$1(s)
|
||
{return caml_string_of_bytes(lowercase$0(caml_bytes_of_string(s)))}
|
||
function capitalize$0(s)
|
||
{return caml_string_of_bytes(capitalize(caml_bytes_of_string(s)))}
|
||
function uncapitalize$0(s)
|
||
{return caml_string_of_bytes(uncapitalize(caml_bytes_of_string(s)))}
|
||
function to_seq$3(s){return to_seq$2(caml_bytes_of_string(s))}
|
||
function to_seqi$0(s){return to_seqi(caml_bytes_of_string(s))}
|
||
function of_seq$1(g){return caml_string_of_bytes(of_seq$0(g))}
|
||
var
|
||
equal$5=caml_string_equal,
|
||
include$1=
|
||
[0,
|
||
make$0,
|
||
init$1,
|
||
copy$0,
|
||
sub$0,
|
||
fill,
|
||
blit$0,
|
||
concat$0,
|
||
iter$4,
|
||
iteri$1,
|
||
map$4,
|
||
mapi$1,
|
||
trim$0,
|
||
escaped$1,
|
||
index$0,
|
||
index_opt$0,
|
||
rindex$0,
|
||
rindex_opt$0,
|
||
index_from$0,
|
||
index_from_opt$0,
|
||
rindex_from$0,
|
||
rindex_from_opt$0,
|
||
contains$0,
|
||
contains_from$0,
|
||
rcontains_from$0,
|
||
uppercase$1,
|
||
lowercase$1,
|
||
capitalize$0,
|
||
uncapitalize$0,
|
||
uppercase_ascii$1,
|
||
lowercase_ascii$1,
|
||
capitalize_ascii$0,
|
||
uncapitalize_ascii$0,
|
||
compare$5,
|
||
equal$5,
|
||
split_on_char,
|
||
to_seq$3,
|
||
to_seqi$0,
|
||
of_seq$1];
|
||
caml_register_global(758,include$1,"Stdlib__string");
|
||
function equal$6(param,_ye_){return 1}
|
||
function compare$6(param,_yd_){return 0}
|
||
function to_string$2(param){return cst$5}
|
||
var Stdlib_unit=[0,equal$6,compare$6,to_string$2];
|
||
caml_register_global(759,Stdlib_unit,"Stdlib__unit");
|
||
function to_buffer(buff,ofs,len,v,flags)
|
||
{if
|
||
(0
|
||
<=
|
||
ofs
|
||
&&
|
||
0
|
||
<=
|
||
len
|
||
&&
|
||
!
|
||
((caml_ml_bytes_length(buff) - len | 0) < ofs))
|
||
return runtime.caml_output_value_to_buffer(buff,ofs,len,v,flags);
|
||
return invalid_arg(cst_Marshal_to_buffer_substrin)}
|
||
var header_size=20;
|
||
function data_size(buff,ofs)
|
||
{if(0 <= ofs && ! ((caml_ml_bytes_length(buff) - 20 | 0) < ofs))
|
||
return caml_marshal_data_size(buff,ofs);
|
||
return invalid_arg(cst_Marshal_data_size)}
|
||
function total_size(buff,ofs){return 20 + data_size(buff,ofs) | 0}
|
||
function from_bytes(buff,ofs)
|
||
{if(0 <= ofs && ! ((caml_ml_bytes_length(buff) - 20 | 0) < ofs))
|
||
{var len=caml_marshal_data_size(buff,ofs);
|
||
return (caml_ml_bytes_length(buff) - (20 + len | 0) | 0) < ofs
|
||
?invalid_arg(cst_Marshal_from_bytes$0)
|
||
:runtime.caml_input_value_from_bytes(buff,ofs)}
|
||
return invalid_arg(cst_Marshal_from_bytes)}
|
||
function from_string(buff,ofs)
|
||
{return from_bytes(caml_bytes_of_string(buff),ofs)}
|
||
var
|
||
Stdlib_marshal=
|
||
[0,
|
||
caml_output_value,
|
||
to_buffer,
|
||
caml_input_value,
|
||
from_bytes,
|
||
from_string,
|
||
header_size,
|
||
data_size,
|
||
total_size];
|
||
caml_register_global(760,Stdlib_marshal,"Stdlib__marshal");
|
||
function is_block(a){return 1 - (typeof a === "number"?1:0)}
|
||
var double_field=caml_array_get,set_double_field=caml_array_set;
|
||
function marshal(obj){return runtime.caml_output_value_to_bytes(obj,0)}
|
||
function unmarshal(str,pos)
|
||
{var _yc_=pos + total_size(str,pos) | 0;
|
||
return [0,from_bytes(str,pos),_yc_]}
|
||
var
|
||
first_non_constant_constructor=0,
|
||
last_non_constant_constructor_=245,
|
||
lazy_tag=246,
|
||
closure_tag=247,
|
||
object_tag=248,
|
||
infix_tag=249,
|
||
forward_tag=250,
|
||
no_scan_tag=251,
|
||
abstract_tag=251,
|
||
string_tag=252,
|
||
double_tag=253,
|
||
double_array_tag=254,
|
||
custom_tag=255,
|
||
int_tag=1000,
|
||
out_of_heap_tag=1001,
|
||
unaligned_tag=1002;
|
||
function of_val(x)
|
||
{var switch$0=0;
|
||
if(is_block(x) && caml_obj_tag(x) !== 248 && 1 <= x.length - 1)
|
||
{var slot=x[1];switch$0 = 1}
|
||
if(! switch$0)var slot=x;
|
||
var switch$1=0;
|
||
if(is_block(slot) && caml_obj_tag(slot) === 248)
|
||
{var name=slot[1];switch$1 = 1}
|
||
if(! switch$1)var name=invalid_arg(cst_Obj_extension_constructor$0);
|
||
return caml_obj_tag(name) === 252
|
||
?slot
|
||
:invalid_arg(cst_Obj_extension_constructor)}
|
||
function name(slot){return slot[1]}
|
||
function id(slot){return slot[2]}
|
||
var
|
||
Extension_constructor=[0,of_val,name,id],
|
||
extension_constructor=Extension_constructor[1],
|
||
extension_name=Extension_constructor[2],
|
||
extension_id=Extension_constructor[3],
|
||
max_ephe_length=max_array_length - 2 | 0;
|
||
function create(l)
|
||
{var _ya_=0 <= l?1:0,_yb_=_ya_?l <= max_ephe_length?1:0:_ya_;
|
||
if(1 - _yb_)invalid_arg(cst_Obj_Ephemeron_create);
|
||
return runtime.caml_ephe_create(l)}
|
||
function length$0(x){return x.length - 1 - 2 | 0}
|
||
function raise_if_invalid_offset(e,o,msg)
|
||
{var _x9_=0 <= o?1:0,_x__=_x9_?o < length$0(e)?1:0:_x9_,_x$_=1 - _x__;
|
||
return _x$_?invalid_arg(msg):_x$_}
|
||
function get_key(e,o)
|
||
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_get_key);
|
||
return runtime.caml_ephe_get_key(e,o)}
|
||
function get_key_copy(e,o)
|
||
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_get_key_copy);
|
||
return runtime.caml_ephe_get_key_copy(e,o)}
|
||
function set_key(e,o,x)
|
||
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_set_key);
|
||
return caml_ephe_set_key(e,o,x)}
|
||
function unset_key(e,o)
|
||
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_unset_key);
|
||
return caml_ephe_unset_key(e,o)}
|
||
function check_key(e,o)
|
||
{raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_check_key);
|
||
return runtime.caml_ephe_check_key(e,o)}
|
||
function blit_key(e1,o1,e2,o2,l)
|
||
{if
|
||
(0
|
||
<=
|
||
l
|
||
&&
|
||
0
|
||
<=
|
||
o1
|
||
&&
|
||
!
|
||
((length$0(e1) - l | 0) < o1)
|
||
&&
|
||
0
|
||
<=
|
||
o2
|
||
&&
|
||
!
|
||
((length$0(e2) - l | 0) < o2))
|
||
{var
|
||
_x7_=0 !== l?1:0,
|
||
_x8_=_x7_?runtime.caml_ephe_blit_key(e1,o1,e2,o2,l):_x7_;
|
||
return _x8_}
|
||
return invalid_arg(cst_Obj_Ephemeron_blit_key)}
|
||
var
|
||
_p_=runtime.caml_ephe_blit_data,
|
||
_q_=runtime.caml_ephe_check_data,
|
||
_r_=
|
||
[0,
|
||
create,
|
||
length$0,
|
||
get_key,
|
||
get_key_copy,
|
||
set_key,
|
||
unset_key,
|
||
check_key,
|
||
blit_key,
|
||
runtime.caml_ephe_get_data,
|
||
runtime.caml_ephe_get_data_copy,
|
||
runtime.caml_ephe_set_data,
|
||
function(_x6_){return runtime.caml_ephe_unset_data(_x6_)},
|
||
_q_,
|
||
_p_,
|
||
max_ephe_length],
|
||
Stdlib_obj=
|
||
[0,
|
||
is_block,
|
||
double_field,
|
||
set_double_field,
|
||
first_non_constant_constructor,
|
||
last_non_constant_constructor_,
|
||
lazy_tag,
|
||
closure_tag,
|
||
object_tag,
|
||
infix_tag,
|
||
forward_tag,
|
||
no_scan_tag,
|
||
abstract_tag,
|
||
string_tag,
|
||
double_tag,
|
||
double_array_tag,
|
||
custom_tag,
|
||
custom_tag,
|
||
int_tag,
|
||
out_of_heap_tag,
|
||
unaligned_tag,
|
||
Extension_constructor,
|
||
extension_constructor,
|
||
extension_name,
|
||
extension_id,
|
||
marshal,
|
||
unmarshal,
|
||
_r_];
|
||
caml_register_global(761,Stdlib_obj,"Stdlib__obj");
|
||
var make_float=runtime.caml_make_float_vect,Floatarray=[0];
|
||
function init$2(l,f)
|
||
{if(0 === l)return [0];
|
||
if(0 <= l)
|
||
{var res=caml_make_vect(l,caml_call1(f,0)),_x4_=l - 1 | 0,_x3_=1;
|
||
if(! (_x4_ < 1))
|
||
{var i=_x3_;
|
||
for(;;)
|
||
{res[1 + i] = caml_call1(f,i);
|
||
var _x5_=i + 1 | 0;
|
||
if(_x4_ !== i){var i=_x5_;continue}
|
||
break}}
|
||
return res}
|
||
return invalid_arg(cst_Array_init)}
|
||
function create_matrix(sx,sy,init)
|
||
{var res=caml_make_vect(sx,[0]),_x1_=sx - 1 | 0,_x0_=0;
|
||
if(! (_x1_ < 0))
|
||
{var x=_x0_;
|
||
for(;;)
|
||
{res[1 + x] = caml_make_vect(sy,init);
|
||
var _x2_=x + 1 | 0;
|
||
if(_x1_ !== x){var x=_x2_;continue}
|
||
break}}
|
||
return res}
|
||
function copy$1(a)
|
||
{var l=a.length - 1;return 0 === l?[0]:caml_array_sub(a,0,l)}
|
||
function append$0(a1,a2)
|
||
{var l1=a1.length - 1;
|
||
return 0 === l1
|
||
?copy$1(a2)
|
||
:0 === a2.length - 1
|
||
?caml_array_sub(a1,0,l1)
|
||
:runtime.caml_array_append(a1,a2)}
|
||
function sub$1(a,ofs,len)
|
||
{if(0 <= ofs && 0 <= len && ! ((a.length - 1 - len | 0) < ofs))
|
||
return caml_array_sub(a,ofs,len);
|
||
return invalid_arg(cst_Array_sub)}
|
||
function fill$0(a,ofs,len,v)
|
||
{if(0 <= ofs && 0 <= len && ! ((a.length - 1 - len | 0) < ofs))
|
||
return runtime.caml_array_fill(a,ofs,len,v);
|
||
return invalid_arg(cst_Array_fill)}
|
||
function blit$1(a1,ofs1,a2,ofs2,len)
|
||
{if
|
||
(0
|
||
<=
|
||
len
|
||
&&
|
||
0
|
||
<=
|
||
ofs1
|
||
&&
|
||
!
|
||
((a1.length - 1 - len | 0) < ofs1)
|
||
&&
|
||
0
|
||
<=
|
||
ofs2
|
||
&&
|
||
!
|
||
((a2.length - 1 - len | 0) < ofs2))
|
||
return runtime.caml_array_blit(a1,ofs1,a2,ofs2,len);
|
||
return invalid_arg(cst_Array_blit)}
|
||
function iter$5(f,a)
|
||
{var _xY_=a.length - 1 - 1 | 0,_xX_=0;
|
||
if(! (_xY_ < 0))
|
||
{var i=_xX_;
|
||
for(;;)
|
||
{caml_call1(f,a[1 + i]);
|
||
var _xZ_=i + 1 | 0;
|
||
if(_xY_ !== i){var i=_xZ_;continue}
|
||
break}}
|
||
return 0}
|
||
function iter2$0(f,a,b)
|
||
{if(a.length - 1 !== b.length - 1)
|
||
return invalid_arg(cst_Array_iter2_arrays_must_ha);
|
||
var _xV_=a.length - 1 - 1 | 0,_xU_=0;
|
||
if(! (_xV_ < 0))
|
||
{var i=_xU_;
|
||
for(;;)
|
||
{caml_call2(f,a[1 + i],b[1 + i]);
|
||
var _xW_=i + 1 | 0;
|
||
if(_xV_ !== i){var i=_xW_;continue}
|
||
break}}
|
||
return 0}
|
||
function map$5(f,a)
|
||
{var l=a.length - 1;
|
||
if(0 === l)return [0];
|
||
var r=caml_make_vect(l,caml_call1(f,a[1])),_xS_=l - 1 | 0,_xR_=1;
|
||
if(! (_xS_ < 1))
|
||
{var i=_xR_;
|
||
for(;;)
|
||
{r[1 + i] = caml_call1(f,a[1 + i]);
|
||
var _xT_=i + 1 | 0;
|
||
if(_xS_ !== i){var i=_xT_;continue}
|
||
break}}
|
||
return r}
|
||
function map2$0(f,a,b)
|
||
{var la=a.length - 1,lb=b.length - 1;
|
||
if(la !== lb)return invalid_arg(cst_Array_map2_arrays_must_hav);
|
||
if(0 === la)return [0];
|
||
var r=caml_make_vect(la,caml_call2(f,a[1],b[1])),_xP_=la - 1 | 0,_xO_=1;
|
||
if(! (_xP_ < 1))
|
||
{var i=_xO_;
|
||
for(;;)
|
||
{r[1 + i] = caml_call2(f,a[1 + i],b[1 + i]);
|
||
var _xQ_=i + 1 | 0;
|
||
if(_xP_ !== i){var i=_xQ_;continue}
|
||
break}}
|
||
return r}
|
||
function iteri$2(f,a)
|
||
{var _xM_=a.length - 1 - 1 | 0,_xL_=0;
|
||
if(! (_xM_ < 0))
|
||
{var i=_xL_;
|
||
for(;;)
|
||
{caml_call2(f,i,a[1 + i]);
|
||
var _xN_=i + 1 | 0;
|
||
if(_xM_ !== i){var i=_xN_;continue}
|
||
break}}
|
||
return 0}
|
||
function mapi$2(f,a)
|
||
{var l=a.length - 1;
|
||
if(0 === l)return [0];
|
||
var r=caml_make_vect(l,caml_call2(f,0,a[1])),_xJ_=l - 1 | 0,_xI_=1;
|
||
if(! (_xJ_ < 1))
|
||
{var i=_xI_;
|
||
for(;;)
|
||
{r[1 + i] = caml_call2(f,i,a[1 + i]);
|
||
var _xK_=i + 1 | 0;
|
||
if(_xJ_ !== i){var i=_xK_;continue}
|
||
break}}
|
||
return r}
|
||
function to_list$1(a)
|
||
{var i$1=a.length - 1 - 1 | 0,i=i$1,res=0;
|
||
for(;;)
|
||
{if(0 <= i)
|
||
{var res$0=[0,a[1 + i],res],i$0=i - 1 | 0,i=i$0,res=res$0;continue}
|
||
return res}}
|
||
function list_length(accu,param)
|
||
{var accu$0=accu,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
param$1=param$0[2],
|
||
accu$1=accu$0 + 1 | 0,
|
||
accu$0=accu$1,
|
||
param$0=param$1;
|
||
continue}
|
||
return accu$0}}
|
||
function of_list(l)
|
||
{if(l)
|
||
{var
|
||
tl=l[2],
|
||
hd=l[1],
|
||
a=caml_make_vect(list_length(0,l),hd),
|
||
i=1,
|
||
param=tl;
|
||
for(;;)
|
||
{if(param)
|
||
{var tl$0=param[2],hd$0=param[1];
|
||
a[1 + i] = hd$0;
|
||
var i$0=i + 1 | 0,i=i$0,param=tl$0;
|
||
continue}
|
||
return a}}
|
||
return [0]}
|
||
function fold_left$1(f,x,a)
|
||
{var r=[0,x],_xG_=a.length - 1 - 1 | 0,_xF_=0;
|
||
if(! (_xG_ < 0))
|
||
{var i=_xF_;
|
||
for(;;)
|
||
{r[1] = caml_call2(f,r[1],a[1 + i]);
|
||
var _xH_=i + 1 | 0;
|
||
if(_xG_ !== i){var i=_xH_;continue}
|
||
break}}
|
||
return r[1]}
|
||
function fold_right$0(f,a,x)
|
||
{var r=[0,x],_xD_=a.length - 1 - 1 | 0;
|
||
if(! (_xD_ < 0))
|
||
{var i=_xD_;
|
||
for(;;)
|
||
{r[1] = caml_call2(f,a[1 + i],r[1]);
|
||
var _xE_=i - 1 | 0;
|
||
if(0 !== i){var i=_xE_;continue}
|
||
break}}
|
||
return r[1]}
|
||
function exists$0(p,a)
|
||
{var n=a.length - 1,i=0;
|
||
for(;;)
|
||
{if(i === n)return 0;
|
||
if(caml_call1(p,a[1 + i]))return 1;
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
function for_all$0(p,a)
|
||
{var n=a.length - 1,i=0;
|
||
for(;;)
|
||
{if(i === n)return 1;
|
||
if(caml_call1(p,a[1 + i])){var i$0=i + 1 | 0,i=i$0;continue}
|
||
return 0}}
|
||
function mem$0(x,a)
|
||
{var n=a.length - 1,i=0;
|
||
for(;;)
|
||
{if(i === n)return 0;
|
||
if(0 === caml_compare(a[1 + i],x))return 1;
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
function memq$0(x,a)
|
||
{var n=a.length - 1,i=0;
|
||
for(;;)
|
||
{if(i === n)return 0;
|
||
if(x === a[1 + i])return 1;
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
var Bottom=[248,cst_Stdlib_Array_Bottom,caml_fresh_oo_id(0)];
|
||
function sort(cmp,a)
|
||
{function maxson(l,i)
|
||
{var i31=((i + i | 0) + i | 0) + 1 | 0,x=[0,i31];
|
||
if((i31 + 2 | 0) < l)
|
||
{var _xw_=i31 + 1 | 0,_xx_=caml_check_bound(a,_xw_)[1 + _xw_];
|
||
if(caml_call2(cmp,caml_check_bound(a,i31)[1 + i31],_xx_) < 0)
|
||
x[1] = i31 + 1 | 0;
|
||
var
|
||
_xy_=i31 + 2 | 0,
|
||
_xz_=caml_check_bound(a,_xy_)[1 + _xy_],
|
||
_xA_=x[1];
|
||
if(caml_call2(cmp,caml_check_bound(a,_xA_)[1 + _xA_],_xz_) < 0)
|
||
x[1] = i31 + 2 | 0;
|
||
return x[1]}
|
||
if((i31 + 1 | 0) < l)
|
||
{var _xB_=i31 + 1 | 0,_xC_=caml_check_bound(a,_xB_)[1 + _xB_];
|
||
if(! (0 <= caml_call2(cmp,caml_check_bound(a,i31)[1 + i31],_xC_)))
|
||
return i31 + 1 | 0}
|
||
if(i31 < l)return i31;
|
||
throw [0,Bottom,i]}
|
||
function trickledown(l,i,e)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{var j=maxson(l,i$0);
|
||
if(0 < caml_call2(cmp,caml_check_bound(a,j)[1 + j],e))
|
||
{var _xv_=caml_check_bound(a,j)[1 + j];
|
||
caml_check_bound(a,i$0)[1 + i$0] = _xv_;
|
||
var i$0=j;
|
||
continue}
|
||
caml_check_bound(a,i$0)[1 + i$0] = e;
|
||
return 0}}
|
||
function trickle(l,i,e)
|
||
{try
|
||
{var _xu_=trickledown(l,i,e);return _xu_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Bottom)
|
||
{var i$0=exn[2];caml_check_bound(a,i$0)[1 + i$0] = e;return 0}
|
||
throw exn}}
|
||
function bubbledown(l,i)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{var i$1=maxson(l,i$0),_xt_=caml_check_bound(a,i$1)[1 + i$1];
|
||
caml_check_bound(a,i$0)[1 + i$0] = _xt_;
|
||
var i$0=i$1;
|
||
continue}}
|
||
function bubble(l,i)
|
||
{try
|
||
{var _xs_=bubbledown(l,i);return _xs_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Bottom){var i$0=exn[2];return i$0}
|
||
throw exn}}
|
||
var l=a.length - 1,_xk_=((l + 1 | 0) / 3 | 0) - 1 | 0;
|
||
if(! (_xk_ < 0))
|
||
{var i$2=_xk_;
|
||
for(;;)
|
||
{trickle(l,i$2,caml_check_bound(a,i$2)[1 + i$2]);
|
||
var _xr_=i$2 - 1 | 0;
|
||
if(0 !== i$2){var i$2=_xr_;continue}
|
||
break}}
|
||
var _xl_=l - 1 | 0;
|
||
if(! (_xl_ < 2))
|
||
{var i$0=_xl_;
|
||
a:
|
||
for(;;)
|
||
{var
|
||
e$0=caml_check_bound(a,i$0)[1 + i$0],
|
||
_xp_=caml_check_bound(a,0)[1];
|
||
caml_check_bound(a,i$0)[1 + i$0] = _xp_;
|
||
var i$1=bubble(i$0,0),i=i$1;
|
||
for(;;)
|
||
{var father=(i - 1 | 0) / 3 | 0;
|
||
if(i === father)throw [0,Assert_failure,_s_];
|
||
if
|
||
(0 <= caml_call2(cmp,caml_check_bound(a,father)[1 + father],e$0))
|
||
caml_check_bound(a,i)[1 + i] = e$0;
|
||
else
|
||
{var _xj_=caml_check_bound(a,father)[1 + father];
|
||
caml_check_bound(a,i)[1 + i] = _xj_;
|
||
if(0 < father){var i=father;continue}
|
||
caml_check_bound(a,0)[1] = e$0}
|
||
var _xq_=i$0 - 1 | 0;
|
||
if(2 !== i$0){var i$0=_xq_;continue a}
|
||
break}
|
||
break}}
|
||
var _xm_=1 < l?1:0;
|
||
if(_xm_)
|
||
{var e=caml_check_bound(a,1)[2],_xn_=caml_check_bound(a,0)[1];
|
||
caml_check_bound(a,1)[2] = _xn_;
|
||
caml_check_bound(a,0)[1] = e;
|
||
var _xo_=0}
|
||
else
|
||
var _xo_=_xm_;
|
||
return _xo_}
|
||
function fast_sort$0(cmp,a)
|
||
{function merge(src1ofs,src1len,src2,src2ofs,src2len,dst,dstofs)
|
||
{var
|
||
src1r=src1ofs + src1len | 0,
|
||
src2r=src2ofs + src2len | 0,
|
||
s2$1=caml_check_bound(src2,src2ofs)[1 + src2ofs],
|
||
s1$1=caml_check_bound(a,src1ofs)[1 + src1ofs],
|
||
i1=src1ofs,
|
||
s1=s1$1,
|
||
i2=src2ofs,
|
||
s2=s2$1,
|
||
d=dstofs;
|
||
for(;;)
|
||
{if(0 < caml_call2(cmp,s1,s2))
|
||
{caml_check_bound(dst,d)[1 + d] = s2;
|
||
var i2$0=i2 + 1 | 0;
|
||
if(i2$0 < src2r)
|
||
{var
|
||
d$0=d + 1 | 0,
|
||
s2$0=caml_check_bound(src2,i2$0)[1 + i2$0],
|
||
i2=i2$0,
|
||
s2=s2$0,
|
||
d=d$0;
|
||
continue}
|
||
return blit$1(a,i1,dst,d + 1 | 0,src1r - i1 | 0)}
|
||
caml_check_bound(dst,d)[1 + d] = s1;
|
||
var i1$0=i1 + 1 | 0;
|
||
if(i1$0 < src1r)
|
||
{var
|
||
d$1=d + 1 | 0,
|
||
s1$0=caml_check_bound(a,i1$0)[1 + i1$0],
|
||
i1=i1$0,
|
||
s1=s1$0,
|
||
d=d$1;
|
||
continue}
|
||
return blit$1(src2,i2,dst,d + 1 | 0,src2r - i2 | 0)}}
|
||
function isortto(srcofs,dst,dstofs,len)
|
||
{var _xb_=len - 1 | 0,_xa_=0;
|
||
if(! (_xb_ < 0))
|
||
{var i=_xa_;
|
||
a:
|
||
for(;;)
|
||
{var
|
||
_xc_=srcofs + i | 0,
|
||
e=caml_check_bound(a,_xc_)[1 + _xc_],
|
||
j=[0,(dstofs + i | 0) - 1 | 0];
|
||
for(;;)
|
||
{if(dstofs <= j[1])
|
||
{var _xd_=j[1];
|
||
if(0 < caml_call2(cmp,caml_check_bound(dst,_xd_)[1 + _xd_],e))
|
||
{var
|
||
_xe_=j[1],
|
||
_xf_=caml_check_bound(dst,_xe_)[1 + _xe_],
|
||
_xg_=j[1] + 1 | 0;
|
||
caml_check_bound(dst,_xg_)[1 + _xg_] = _xf_;
|
||
j[1] += -1;
|
||
continue}}
|
||
var _xh_=j[1] + 1 | 0;
|
||
caml_check_bound(dst,_xh_)[1 + _xh_] = e;
|
||
var _xi_=i + 1 | 0;
|
||
if(_xb_ !== i){var i=_xi_;continue a}
|
||
break}
|
||
break}}
|
||
return 0}
|
||
function sortto(srcofs,dst,dstofs,len)
|
||
{if(len <= 5)return isortto(srcofs,dst,dstofs,len);
|
||
var l1=len / 2 | 0,l2=len - l1 | 0;
|
||
sortto(srcofs + l1 | 0,dst,dstofs + l1 | 0,l2);
|
||
sortto(srcofs,a,srcofs + l2 | 0,l1);
|
||
return merge(srcofs + l2 | 0,l1,dst,dstofs + l1 | 0,l2,dst,dstofs)}
|
||
var l=a.length - 1;
|
||
if(l <= 5)return isortto(0,a,0,l);
|
||
var
|
||
l1=l / 2 | 0,
|
||
l2=l - l1 | 0,
|
||
t=caml_make_vect(l2,caml_check_bound(a,0)[1]);
|
||
sortto(l1,t,0,l2);
|
||
sortto(0,a,l2,l1);
|
||
return merge(l2,l1,t,0,l2,a,0)}
|
||
function to_seq$4(a)
|
||
{function aux(i,param)
|
||
{if(i < a.length - 1)
|
||
{var x=a[1 + i],_w__=i + 1 | 0;
|
||
return [0,x,function(_w$_){return aux(_w__,_w$_)}]}
|
||
return 0}
|
||
var _w8_=0;
|
||
return function(_w9_){return aux(_w8_,_w9_)}}
|
||
function to_seqi$1(a)
|
||
{function aux(i,param)
|
||
{if(i < a.length - 1)
|
||
{var x=a[1 + i],_w6_=i + 1 | 0;
|
||
return [0,[0,i,x],function(_w7_){return aux(_w6_,_w7_)}]}
|
||
return 0}
|
||
var _w4_=0;
|
||
return function(_w5_){return aux(_w4_,_w5_)}}
|
||
function of_seq$2(i$2)
|
||
{var _w3_=0,l=fold_left(function(acc,x){return [0,x,acc]},_w3_,i$2);
|
||
if(l)
|
||
{var
|
||
tl=l[2],
|
||
hd=l[1],
|
||
len=list_length(0,l),
|
||
a=caml_make_vect(len,hd),
|
||
i$1=len - 2 | 0,
|
||
i=i$1,
|
||
param=tl;
|
||
for(;;)
|
||
{if(param)
|
||
{var tl$0=param[2],hd$0=param[1];
|
||
a[1 + i] = hd$0;
|
||
var i$0=i - 1 | 0,i=i$0,param=tl$0;
|
||
continue}
|
||
return a}}
|
||
return [0]}
|
||
var
|
||
concat$1=caml_array_concat,
|
||
include$2=
|
||
[0,
|
||
make_float,
|
||
init$2,
|
||
create_matrix,
|
||
create_matrix,
|
||
append$0,
|
||
concat$1,
|
||
sub$1,
|
||
copy$1,
|
||
fill$0,
|
||
blit$1,
|
||
to_list$1,
|
||
of_list,
|
||
iter$5,
|
||
iteri$2,
|
||
map$5,
|
||
mapi$2,
|
||
fold_left$1,
|
||
fold_right$0,
|
||
iter2$0,
|
||
map2$0,
|
||
for_all$0,
|
||
exists$0,
|
||
mem$0,
|
||
memq$0,
|
||
sort,
|
||
fast_sort$0,
|
||
fast_sort$0,
|
||
to_seq$4,
|
||
to_seqi$1,
|
||
of_seq$2,
|
||
Floatarray];
|
||
caml_register_global(762,include$2,"Stdlib__array");
|
||
var zero=0.,one=1.,minus_one=-1.;
|
||
function is_finite(x){return x - x == 0.?1:0}
|
||
function is_infinite(x){return 1. / x == 0.?1:0}
|
||
function is_nan(x){return x != x?1:0}
|
||
var pi=3.14159265358979312;
|
||
function is_integer(x)
|
||
{var _w2_=x == runtime.caml_trunc_float(x)?1:0;
|
||
return _w2_?is_finite(x):_w2_}
|
||
function succ$0(x){return caml_nextafter_float(x,infinity)}
|
||
function pred$0(x){return caml_nextafter_float(x,neg_infinity)}
|
||
function equal$7(x,y){return 0 === caml_float_compare(x,y)?1:0}
|
||
function min$1(x,y)
|
||
{if(! (x < y))
|
||
{var switch$0=0;
|
||
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
|
||
if(switch$0)return x != x?x:y}
|
||
return y != y?y:x}
|
||
function max$1(x,y)
|
||
{if(! (x < y))
|
||
{var switch$0=0;
|
||
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
|
||
if(switch$0)return y != y?y:x}
|
||
return x != x?x:y}
|
||
function min_max(x,y)
|
||
{if(x == x && y == y)
|
||
{if(! (x < y))
|
||
{var switch$0=0;
|
||
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
|
||
if(switch$0)return [0,y,x]}
|
||
return [0,x,y]}
|
||
return [0,nan,nan]}
|
||
function min_num(x,y)
|
||
{if(! (x < y))
|
||
{var switch$0=0;
|
||
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
|
||
if(switch$0)return y != y?x:y}
|
||
return x != x?y:x}
|
||
function max_num(x,y)
|
||
{if(! (x < y))
|
||
{var switch$0=0;
|
||
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
|
||
if(switch$0)return x != x?y:x}
|
||
return y != y?x:y}
|
||
function min_max_num(x,y)
|
||
{if(x != x)return [0,y,y];
|
||
if(y != y)return [0,x,x];
|
||
if(! (x < y))
|
||
{var switch$0=0;
|
||
if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1;
|
||
if(switch$0)return [0,y,x]}
|
||
return [0,x,y]}
|
||
function hash$0(x){return caml_hash(10,100,0,x)}
|
||
function unsafe_fill(a,ofs,len,v)
|
||
{var _w0_=(ofs + len | 0) - 1 | 0;
|
||
if(! (_w0_ < ofs))
|
||
{var i=ofs;
|
||
for(;;)
|
||
{a[1 + i] = v;
|
||
var _w1_=i + 1 | 0;
|
||
if(_w0_ !== i){var i=_w1_;continue}
|
||
break}}
|
||
return 0}
|
||
function unsafe_blit(src,sofs,dst,dofs,len)
|
||
{var _wY_=len - 1 | 0,_wX_=0;
|
||
if(! (_wY_ < 0))
|
||
{var i=_wX_;
|
||
for(;;)
|
||
{dst[1 + (dofs + i | 0)] = src[1 + (sofs + i | 0)];
|
||
var _wZ_=i + 1 | 0;
|
||
if(_wY_ !== i){var i=_wZ_;continue}
|
||
break}}
|
||
return 0}
|
||
function check(a,ofs,len,msg)
|
||
{var _wT_=ofs < 0?1:0;
|
||
if(_wT_)
|
||
var _wU_=_wT_;
|
||
else
|
||
{var _wV_=len < 0?1:0;
|
||
if(_wV_)
|
||
var _wU_=_wV_;
|
||
else
|
||
var
|
||
_wW_=(ofs + len | 0) < 0?1:0,
|
||
_wU_=_wW_ || (a.length - 1 < (ofs + len | 0)?1:0)}
|
||
return _wU_?invalid_arg(msg):_wU_}
|
||
function make$1(n,v)
|
||
{var result=caml_floatarray_create(n);
|
||
unsafe_fill(result,0,n,v);
|
||
return result}
|
||
function init$3(l,f)
|
||
{if(0 <= l)
|
||
{var res=caml_floatarray_create(l),_wR_=l - 1 | 0,_wQ_=0;
|
||
if(! (_wR_ < 0))
|
||
{var i=_wQ_;
|
||
for(;;)
|
||
{res[1 + i] = caml_call1(f,i);
|
||
var _wS_=i + 1 | 0;
|
||
if(_wR_ !== i){var i=_wS_;continue}
|
||
break}}
|
||
return res}
|
||
return invalid_arg(cst_Float_Array_init)}
|
||
function append$1(a1,a2)
|
||
{var
|
||
l1=a1.length - 1,
|
||
l2=a2.length - 1,
|
||
result=caml_floatarray_create(l1 + l2 | 0);
|
||
unsafe_blit(a1,0,result,0,l1);
|
||
unsafe_blit(a2,0,result,l1,l2);
|
||
return result}
|
||
function concat$2(l)
|
||
{var acc=0,param=l;
|
||
for(;;)
|
||
{if(param)
|
||
{var
|
||
tl=param[2],
|
||
hd=param[1],
|
||
x=hd.length - 1 + acc | 0,
|
||
acc$0=acc <= x?x:invalid_arg(cst_Float_Array_concat),
|
||
acc=acc$0,
|
||
param=tl;
|
||
continue}
|
||
var result=caml_floatarray_create(acc),l$0=l,i=0;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var tl$0=l$0[2],hd$0=l$0[1],hlen=hd$0.length - 1;
|
||
unsafe_blit(hd$0,0,result,i,hlen);
|
||
var i$0=i + hlen | 0,l$0=tl$0,i=i$0;
|
||
continue}
|
||
if(i === acc)return result;
|
||
throw [0,Assert_failure,_t_]}}}
|
||
function sub$2(a,ofs,len)
|
||
{check(a,ofs,len,cst_Float_Array_sub);
|
||
var result=caml_floatarray_create(len);
|
||
unsafe_blit(a,ofs,result,0,len);
|
||
return result}
|
||
function copy$2(a)
|
||
{var l=a.length - 1,result=caml_floatarray_create(l);
|
||
unsafe_blit(a,0,result,0,l);
|
||
return result}
|
||
function fill$1(a,ofs,len,v)
|
||
{check(a,ofs,len,cst_Float_Array_fill);return unsafe_fill(a,ofs,len,v)}
|
||
function blit$2(src,sofs,dst,dofs,len)
|
||
{check(src,sofs,len,cst_Float_array_blit);
|
||
check(dst,dofs,len,cst_Float_array_blit$0);
|
||
return unsafe_blit(src,sofs,dst,dofs,len)}
|
||
function to_list$2(a)
|
||
{return init(a.length - 1,function(_wP_){return a[1 + _wP_]})}
|
||
function of_list$0(l)
|
||
{var result=caml_floatarray_create(length(l)),i=0,l$0=l;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var t=l$0[2],h=l$0[1];
|
||
result[1 + i] = h;
|
||
var i$0=i + 1 | 0,i=i$0,l$0=t;
|
||
continue}
|
||
return result}}
|
||
function iter$6(f,a)
|
||
{var _wN_=a.length - 1 - 1 | 0,_wM_=0;
|
||
if(! (_wN_ < 0))
|
||
{var i=_wM_;
|
||
for(;;)
|
||
{caml_call1(f,a[1 + i]);
|
||
var _wO_=i + 1 | 0;
|
||
if(_wN_ !== i){var i=_wO_;continue}
|
||
break}}
|
||
return 0}
|
||
function iter2$1(f,a,b)
|
||
{if(a.length - 1 !== b.length - 1)
|
||
return invalid_arg(cst_Float_Array_iter2_arrays_m);
|
||
var _wK_=a.length - 1 - 1 | 0,_wJ_=0;
|
||
if(! (_wK_ < 0))
|
||
{var i=_wJ_;
|
||
for(;;)
|
||
{caml_call2(f,a[1 + i],b[1 + i]);
|
||
var _wL_=i + 1 | 0;
|
||
if(_wK_ !== i){var i=_wL_;continue}
|
||
break}}
|
||
return 0}
|
||
function map$6(f,a)
|
||
{var l=a.length - 1,r=caml_floatarray_create(l),_wH_=l - 1 | 0,_wG_=0;
|
||
if(! (_wH_ < 0))
|
||
{var i=_wG_;
|
||
for(;;)
|
||
{r[1 + i] = caml_call1(f,a[1 + i]);
|
||
var _wI_=i + 1 | 0;
|
||
if(_wH_ !== i){var i=_wI_;continue}
|
||
break}}
|
||
return r}
|
||
function map2$1(f,a,b)
|
||
{var la=a.length - 1,lb=b.length - 1;
|
||
if(la !== lb)return invalid_arg(cst_Float_Array_map2_arrays_mu);
|
||
var r=caml_floatarray_create(la),_wE_=la - 1 | 0,_wD_=0;
|
||
if(! (_wE_ < 0))
|
||
{var i=_wD_;
|
||
for(;;)
|
||
{r[1 + i] = caml_call2(f,a[1 + i],b[1 + i]);
|
||
var _wF_=i + 1 | 0;
|
||
if(_wE_ !== i){var i=_wF_;continue}
|
||
break}}
|
||
return r}
|
||
function iteri$3(f,a)
|
||
{var _wB_=a.length - 1 - 1 | 0,_wA_=0;
|
||
if(! (_wB_ < 0))
|
||
{var i=_wA_;
|
||
for(;;)
|
||
{caml_call2(f,i,a[1 + i]);
|
||
var _wC_=i + 1 | 0;
|
||
if(_wB_ !== i){var i=_wC_;continue}
|
||
break}}
|
||
return 0}
|
||
function mapi$3(f,a)
|
||
{var l=a.length - 1,r=caml_floatarray_create(l),_wy_=l - 1 | 0,_wx_=0;
|
||
if(! (_wy_ < 0))
|
||
{var i=_wx_;
|
||
for(;;)
|
||
{r[1 + i] = caml_call2(f,i,a[1 + i]);
|
||
var _wz_=i + 1 | 0;
|
||
if(_wy_ !== i){var i=_wz_;continue}
|
||
break}}
|
||
return r}
|
||
function fold_left$2(f,x,a)
|
||
{var r=[0,x],_wv_=a.length - 1 - 1 | 0,_wu_=0;
|
||
if(! (_wv_ < 0))
|
||
{var i=_wu_;
|
||
for(;;)
|
||
{r[1] = caml_call2(f,r[1],a[1 + i]);
|
||
var _ww_=i + 1 | 0;
|
||
if(_wv_ !== i){var i=_ww_;continue}
|
||
break}}
|
||
return r[1]}
|
||
function fold_right$1(f,a,x)
|
||
{var r=[0,x],_ws_=a.length - 1 - 1 | 0;
|
||
if(! (_ws_ < 0))
|
||
{var i=_ws_;
|
||
for(;;)
|
||
{r[1] = caml_call2(f,a[1 + i],r[1]);
|
||
var _wt_=i - 1 | 0;
|
||
if(0 !== i){var i=_wt_;continue}
|
||
break}}
|
||
return r[1]}
|
||
function exists$1(p,a)
|
||
{var n=a.length - 1,i=0;
|
||
for(;;)
|
||
{if(i === n)return 0;
|
||
if(caml_call1(p,a[1 + i]))return 1;
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
function for_all$1(p,a)
|
||
{var n=a.length - 1,i=0;
|
||
for(;;)
|
||
{if(i === n)return 1;
|
||
if(caml_call1(p,a[1 + i])){var i$0=i + 1 | 0,i=i$0;continue}
|
||
return 0}}
|
||
function mem$1(x,a)
|
||
{var n=a.length - 1,i=0;
|
||
for(;;)
|
||
{if(i === n)return 0;
|
||
if(0 === caml_float_compare(a[1 + i],x))return 1;
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
function mem_ieee(x,a)
|
||
{var n=a.length - 1,i=0;
|
||
for(;;)
|
||
{if(i === n)return 0;
|
||
if(x == a[1 + i])return 1;
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
var Bottom$0=[248,cst_Stdlib_Float_Array_Bottom,caml_fresh_oo_id(0)];
|
||
function sort$0(cmp,a)
|
||
{function maxson(l,i)
|
||
{var i31=((i + i | 0) + i | 0) + 1 | 0,x=[0,i31];
|
||
if((i31 + 2 | 0) < l)
|
||
{if
|
||
(caml_call2
|
||
(cmp,caml_array_get(a,i31),caml_array_get(a,i31 + 1 | 0))
|
||
<
|
||
0)
|
||
x[1] = i31 + 1 | 0;
|
||
if
|
||
(caml_call2
|
||
(cmp,caml_array_get(a,x[1]),caml_array_get(a,i31 + 2 | 0))
|
||
<
|
||
0)
|
||
x[1] = i31 + 2 | 0;
|
||
return x[1]}
|
||
if
|
||
((i31 + 1 | 0)
|
||
<
|
||
l
|
||
&&
|
||
!
|
||
(0
|
||
<=
|
||
caml_call2(cmp,caml_array_get(a,i31),caml_array_get(a,i31 + 1 | 0))))
|
||
return i31 + 1 | 0;
|
||
if(i31 < l)return i31;
|
||
throw [0,Bottom$0,i]}
|
||
function trickledown(l,i,e)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{var j=maxson(l,i$0);
|
||
if(0 < caml_call2(cmp,caml_array_get(a,j),e))
|
||
{caml_array_set(a,i$0,caml_array_get(a,j));var i$0=j;continue}
|
||
return caml_array_set(a,i$0,e)}}
|
||
function trickle(l,i,e)
|
||
{try
|
||
{var _wr_=trickledown(l,i,e);return _wr_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Bottom$0)
|
||
{var i$0=exn[2];return caml_array_set(a,i$0,e)}
|
||
throw exn}}
|
||
function bubbledown(l,i)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{var i$1=maxson(l,i$0);
|
||
caml_array_set(a,i$0,caml_array_get(a,i$1));
|
||
var i$0=i$1;
|
||
continue}}
|
||
function bubble(l,i)
|
||
{try
|
||
{var _wq_=bubbledown(l,i);return _wq_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Bottom$0){var i$0=exn[2];return i$0}
|
||
throw exn}}
|
||
var l=a.length - 1,_wk_=((l + 1 | 0) / 3 | 0) - 1 | 0;
|
||
if(! (_wk_ < 0))
|
||
{var i$2=_wk_;
|
||
for(;;)
|
||
{trickle(l,i$2,caml_array_get(a,i$2));
|
||
var _wp_=i$2 - 1 | 0;
|
||
if(0 !== i$2){var i$2=_wp_;continue}
|
||
break}}
|
||
var _wl_=l - 1 | 0;
|
||
if(! (_wl_ < 2))
|
||
{var i$0=_wl_;
|
||
a:
|
||
for(;;)
|
||
{var e$0=caml_array_get(a,i$0);
|
||
caml_array_set(a,i$0,caml_array_get(a,0));
|
||
var i$1=bubble(i$0,0),i=i$1;
|
||
for(;;)
|
||
{var father=(i - 1 | 0) / 3 | 0;
|
||
if(i === father)throw [0,Assert_failure,_u_];
|
||
if(0 <= caml_call2(cmp,caml_array_get(a,father),e$0))
|
||
caml_array_set(a,i,e$0);
|
||
else
|
||
{caml_array_set(a,i,caml_array_get(a,father));
|
||
if(0 < father){var i=father;continue}
|
||
caml_array_set(a,0,e$0)}
|
||
var _wo_=i$0 - 1 | 0;
|
||
if(2 !== i$0){var i$0=_wo_;continue a}
|
||
break}
|
||
break}}
|
||
var _wm_=1 < l?1:0;
|
||
if(_wm_)
|
||
{var e=caml_array_get(a,1);
|
||
caml_array_set(a,1,caml_array_get(a,0));
|
||
var _wn_=caml_array_set(a,0,e)}
|
||
else
|
||
var _wn_=_wm_;
|
||
return _wn_}
|
||
function stable_sort(cmp,a)
|
||
{function merge(src1ofs,src1len,src2,src2ofs,src2len,dst,dstofs)
|
||
{var
|
||
src1r=src1ofs + src1len | 0,
|
||
src2r=src2ofs + src2len | 0,
|
||
s2$1=caml_array_get(src2,src2ofs),
|
||
s1$1=caml_array_get(a,src1ofs),
|
||
i1=src1ofs,
|
||
s1=s1$1,
|
||
i2=src2ofs,
|
||
s2=s2$1,
|
||
d=dstofs;
|
||
for(;;)
|
||
{if(0 < caml_call2(cmp,s1,s2))
|
||
{caml_array_set(dst,d,s2);
|
||
var i2$0=i2 + 1 | 0;
|
||
if(i2$0 < src2r)
|
||
{var
|
||
d$0=d + 1 | 0,
|
||
s2$0=caml_array_get(src2,i2$0),
|
||
i2=i2$0,
|
||
s2=s2$0,
|
||
d=d$0;
|
||
continue}
|
||
return blit$2(a,i1,dst,d + 1 | 0,src1r - i1 | 0)}
|
||
caml_array_set(dst,d,s1);
|
||
var i1$0=i1 + 1 | 0;
|
||
if(i1$0 < src1r)
|
||
{var
|
||
d$1=d + 1 | 0,
|
||
s1$0=caml_array_get(a,i1$0),
|
||
i1=i1$0,
|
||
s1=s1$0,
|
||
d=d$1;
|
||
continue}
|
||
return blit$2(src2,i2,dst,d + 1 | 0,src2r - i2 | 0)}}
|
||
function isortto(srcofs,dst,dstofs,len)
|
||
{var _wi_=len - 1 | 0,_wh_=0;
|
||
if(! (_wi_ < 0))
|
||
{var i=_wh_;
|
||
a:
|
||
for(;;)
|
||
{var
|
||
e=caml_array_get(a,srcofs + i | 0),
|
||
j=[0,(dstofs + i | 0) - 1 | 0];
|
||
for(;;)
|
||
{if
|
||
(dstofs
|
||
<=
|
||
j[1]
|
||
&&
|
||
0
|
||
<
|
||
caml_call2(cmp,caml_array_get(dst,j[1]),e))
|
||
{caml_array_set(dst,j[1] + 1 | 0,caml_array_get(dst,j[1]));
|
||
j[1] += -1;
|
||
continue}
|
||
caml_array_set(dst,j[1] + 1 | 0,e);
|
||
var _wj_=i + 1 | 0;
|
||
if(_wi_ !== i){var i=_wj_;continue a}
|
||
break}
|
||
break}}
|
||
return 0}
|
||
function sortto(srcofs,dst,dstofs,len)
|
||
{if(len <= 5)return isortto(srcofs,dst,dstofs,len);
|
||
var l1=len / 2 | 0,l2=len - l1 | 0;
|
||
sortto(srcofs + l1 | 0,dst,dstofs + l1 | 0,l2);
|
||
sortto(srcofs,a,srcofs + l2 | 0,l1);
|
||
return merge(srcofs + l2 | 0,l1,dst,dstofs + l1 | 0,l2,dst,dstofs)}
|
||
var l=a.length - 1;
|
||
if(l <= 5)return isortto(0,a,0,l);
|
||
var l1=l / 2 | 0,l2=l - l1 | 0,t=caml_floatarray_create(l2);
|
||
sortto(l1,t,0,l2);
|
||
sortto(0,a,l2,l1);
|
||
return merge(l2,l1,t,0,l2,a,0)}
|
||
function to_seq$5(a)
|
||
{function aux(i,param)
|
||
{if(i < a.length - 1)
|
||
{var x=a[1 + i],_wf_=i + 1 | 0;
|
||
return [0,x,function(_wg_){return aux(_wf_,_wg_)}]}
|
||
return 0}
|
||
var _wd_=0;
|
||
return function(_we_){return aux(_wd_,_we_)}}
|
||
function to_seqi$2(a)
|
||
{function aux(i,param)
|
||
{if(i < a.length - 1)
|
||
{var x=a[1 + i],_wb_=i + 1 | 0;
|
||
return [0,[0,i,x],function(_wc_){return aux(_wb_,_wc_)}]}
|
||
return 0}
|
||
var _v$_=0;
|
||
return function(_wa_){return aux(_v$_,_wa_)}}
|
||
function of_seq$3(i$2)
|
||
{var
|
||
_v__=0,
|
||
param$0=fold_left(function(acc,x){return [0,x,acc]},_v__,i$2),
|
||
len=length(param$0),
|
||
a=caml_floatarray_create(len),
|
||
i$1=len - 1 | 0,
|
||
i=i$1,
|
||
param=param$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var tl=param[2],hd=param[1];
|
||
a[1 + i] = hd;
|
||
var i$0=i - 1 | 0,i=i$0,param=tl;
|
||
continue}
|
||
return a}}
|
||
function map_to_array(f,a)
|
||
{var l=a.length - 1;
|
||
if(0 === l)return [0];
|
||
var r=caml_make_vect(l,caml_call1(f,a[1])),_v8_=l - 1 | 0,_v7_=1;
|
||
if(! (_v8_ < 1))
|
||
{var i=_v7_;
|
||
for(;;)
|
||
{r[1 + i] = caml_call1(f,a[1 + i]);
|
||
var _v9_=i + 1 | 0;
|
||
if(_v8_ !== i){var i=_v9_;continue}
|
||
break}}
|
||
return r}
|
||
function map_from_array(f,a)
|
||
{var l=a.length - 1,r=caml_floatarray_create(l),_v5_=l - 1 | 0,_v4_=0;
|
||
if(! (_v5_ < 0))
|
||
{var i=_v4_;
|
||
for(;;)
|
||
{r[1 + i] = caml_call1(f,a[1 + i]);
|
||
var _v6_=i + 1 | 0;
|
||
if(_v5_ !== i){var i=_v6_;continue}
|
||
break}}
|
||
return r}
|
||
var
|
||
_v_=caml_floatarray_create,
|
||
_w_=caml_array_set,
|
||
_x_=caml_array_get,
|
||
_y_=
|
||
[0,
|
||
function(_v3_){return _v3_.length - 1},
|
||
_x_,
|
||
_w_,
|
||
make$1,
|
||
_v_,
|
||
init$3,
|
||
append$1,
|
||
concat$2,
|
||
sub$2,
|
||
copy$2,
|
||
fill$1,
|
||
blit$2,
|
||
to_list$2,
|
||
of_list$0,
|
||
iter$6,
|
||
iteri$3,
|
||
map$6,
|
||
mapi$3,
|
||
fold_left$2,
|
||
fold_right$1,
|
||
iter2$1,
|
||
map2$1,
|
||
for_all$1,
|
||
exists$1,
|
||
mem$1,
|
||
mem_ieee,
|
||
sort$0,
|
||
stable_sort,
|
||
stable_sort,
|
||
to_seq$5,
|
||
to_seqi$2,
|
||
of_seq$3,
|
||
map_to_array,
|
||
map_from_array],
|
||
_z_=caml_floatarray_create,
|
||
_A_=caml_array_set,
|
||
_B_=caml_array_get,
|
||
Stdlib_float=
|
||
[0,
|
||
zero,
|
||
one,
|
||
minus_one,
|
||
succ$0,
|
||
pred$0,
|
||
infinity,
|
||
neg_infinity,
|
||
nan,
|
||
pi,
|
||
max_float,
|
||
min_float,
|
||
epsilon,
|
||
is_finite,
|
||
is_infinite,
|
||
is_nan,
|
||
is_integer,
|
||
of_string_opt,
|
||
to_string,
|
||
caml_float_compare,
|
||
equal$7,
|
||
min$1,
|
||
max$1,
|
||
min_max,
|
||
min_num,
|
||
max_num,
|
||
min_max_num,
|
||
hash$0,
|
||
[0,
|
||
function(_v2_){return _v2_.length - 1},
|
||
_B_,
|
||
_A_,
|
||
make$1,
|
||
_z_,
|
||
init$3,
|
||
append$1,
|
||
concat$2,
|
||
sub$2,
|
||
copy$2,
|
||
fill$1,
|
||
blit$2,
|
||
to_list$2,
|
||
of_list$0,
|
||
iter$6,
|
||
iteri$3,
|
||
map$6,
|
||
mapi$3,
|
||
fold_left$2,
|
||
fold_right$1,
|
||
iter2$1,
|
||
map2$1,
|
||
for_all$1,
|
||
exists$1,
|
||
mem$1,
|
||
mem_ieee,
|
||
sort$0,
|
||
stable_sort,
|
||
stable_sort,
|
||
to_seq$5,
|
||
to_seqi$2,
|
||
of_seq$3,
|
||
map_to_array,
|
||
map_from_array],
|
||
_y_];
|
||
caml_register_global(763,Stdlib_float,"Stdlib__float");
|
||
var zero$0=0,one$0=1,minus_one$0=-1;
|
||
function abs$0(x){return 0 <= x?x:- x | 0}
|
||
var max_int$0=2147483647,min_int$0=-2147483648;
|
||
function lognot(x){return x ^ -1}
|
||
function equal$8(_v1_,_v0_){return _v1_ === _v0_?1:0}
|
||
var compare$7=caml_int_compare;
|
||
function to_string$3(x){return caml_string_of_jsbytes("" + x)}
|
||
var
|
||
Stdlib_int=
|
||
[0,
|
||
zero$0,
|
||
one$0,
|
||
minus_one$0,
|
||
abs$0,
|
||
max_int$0,
|
||
min_int$0,
|
||
lognot,
|
||
equal$8,
|
||
compare$7,
|
||
to_string$3];
|
||
caml_register_global(764,Stdlib_int,"Stdlib__int");
|
||
var zero$1=0,one$1=1,minus_one$1=-1;
|
||
function succ$1(n){return n + 1 | 0}
|
||
function pred$1(n){return n - 1 | 0}
|
||
function abs$1(n){return caml_greaterequal(n,0)?n:- n | 0}
|
||
var min_int$1=-2147483648,max_int$1=2147483647;
|
||
function lognot$0(n){return n ^ -1}
|
||
function unsigned_to_int(n)
|
||
{if
|
||
(!
|
||
(0 < caml_int_compare(0,n))
|
||
&&
|
||
!
|
||
(0 < caml_int_compare(n,2147483647)))
|
||
return [0,n];
|
||
return 0}
|
||
function to_string$4(n){return caml_format_int(cst_d,n)}
|
||
function of_string_opt$0(s)
|
||
{try
|
||
{var _vY_=[0,caml_int_of_string(s)];return _vY_}
|
||
catch(_vZ_)
|
||
{_vZ_ = caml_wrap_exception(_vZ_);
|
||
if(_vZ_[1] === Failure)return 0;
|
||
throw _vZ_}}
|
||
var compare$8=caml_int_compare;
|
||
function equal$9(x,y){return 0 === caml_int_compare(x,y)?1:0}
|
||
function unsigned_compare(n,m)
|
||
{return caml_int_compare(n + 2147483648 | 0,m + 2147483648 | 0)}
|
||
function unsigned_div(n,d)
|
||
{if(caml_lessthan(d,0))return 0 <= unsigned_compare(n,d)?one$1:zero$1;
|
||
var q=caml_div(n >>> 1 | 0,d) << 1,r=n - caml_mul(q,d) | 0;
|
||
return 0 <= unsigned_compare(r,d)?q + 1 | 0:q}
|
||
function unsigned_rem(n,d){return n - caml_mul(unsigned_div(n,d),d) | 0}
|
||
var
|
||
Stdlib_int32=
|
||
[0,
|
||
zero$1,
|
||
one$1,
|
||
minus_one$1,
|
||
unsigned_div,
|
||
unsigned_rem,
|
||
succ$1,
|
||
pred$1,
|
||
abs$1,
|
||
max_int$1,
|
||
min_int$1,
|
||
lognot$0,
|
||
unsigned_to_int,
|
||
of_string_opt$0,
|
||
to_string$4,
|
||
compare$8,
|
||
unsigned_compare,
|
||
equal$9];
|
||
caml_register_global(765,Stdlib_int32,"Stdlib__int32");
|
||
function succ$2(n){return caml_int64_add(n,_C_)}
|
||
function pred$2(n){return caml_int64_sub(n,_D_)}
|
||
function abs$2(n)
|
||
{return caml_greaterequal(n,_E_)?n:runtime.caml_int64_neg(n)}
|
||
function lognot$1(n){return runtime.caml_int64_xor(n,_F_)}
|
||
var max_int$3=caml_int64_of_int32(2147483647);
|
||
function unsigned_to_int$0(n)
|
||
{if
|
||
(!
|
||
(0 < caml_int64_compare(zero$2,n))
|
||
&&
|
||
!
|
||
(0 < caml_int64_compare(n,max_int$3)))
|
||
return [0,runtime.caml_int64_to_int32(n)];
|
||
return 0}
|
||
function to_string$5(n){return caml_int64_format(cst_d$0,n)}
|
||
function of_string_opt$1(s)
|
||
{try
|
||
{var _vW_=[0,caml_int64_of_string(s)];return _vW_}
|
||
catch(_vX_)
|
||
{_vX_ = caml_wrap_exception(_vX_);
|
||
if(_vX_[1] === Failure)return 0;
|
||
throw _vX_}}
|
||
function compare$9(x,y){return caml_int64_compare(x,y)}
|
||
function equal$10(x,y){return 0 === caml_int64_compare(x,y)?1:0}
|
||
function unsigned_compare$0(n,m)
|
||
{return caml_int64_compare
|
||
(caml_int64_sub(n,min_int$2),caml_int64_sub(m,min_int$2))}
|
||
function unsigned_div$0(n,d)
|
||
{if(caml_lessthan(d,zero$2))
|
||
return 0 <= unsigned_compare$0(n,d)?one$2:zero$2;
|
||
var
|
||
q=
|
||
caml_int64_shift_left
|
||
(runtime.caml_int64_div
|
||
(runtime.caml_int64_shift_right_unsigned(n,1),d),
|
||
1),
|
||
r=caml_int64_sub(n,caml_int64_mul(q,d));
|
||
return 0 <= unsigned_compare$0(r,d)?succ$2(q):q}
|
||
function unsigned_rem$0(n,d)
|
||
{return caml_int64_sub(n,caml_int64_mul(unsigned_div$0(n,d),d))}
|
||
var
|
||
Stdlib_int64=
|
||
[0,
|
||
zero$2,
|
||
one$2,
|
||
minus_one$2,
|
||
unsigned_div$0,
|
||
unsigned_rem$0,
|
||
succ$2,
|
||
pred$2,
|
||
abs$2,
|
||
max_int$2,
|
||
min_int$2,
|
||
lognot$1,
|
||
unsigned_to_int$0,
|
||
of_string_opt$1,
|
||
to_string$5,
|
||
compare$9,
|
||
unsigned_compare$0,
|
||
equal$10];
|
||
caml_register_global(766,Stdlib_int64,"Stdlib__int64");
|
||
var zero$3=0,one$3=1,minus_one$3=-1;
|
||
function succ$3(n){return n + 1 | 0}
|
||
function pred$3(n){return n - 1 | 0}
|
||
function abs$3(n){return caml_greaterequal(n,0)?n:- n | 0}
|
||
var min_int$3=-2147483648,max_int$4=2147483647;
|
||
function lognot$2(n){return n ^ -1}
|
||
function unsigned_to_int$1(n)
|
||
{if
|
||
(!
|
||
(0 < caml_int_compare(0,n))
|
||
&&
|
||
!
|
||
(0 < caml_int_compare(n,2147483647)))
|
||
return [0,n];
|
||
return 0}
|
||
function to_string$6(n){return caml_format_int(cst_d$1,n)}
|
||
function of_string_opt$2(s)
|
||
{try
|
||
{var _vU_=[0,caml_int_of_string(s)];return _vU_}
|
||
catch(_vV_)
|
||
{_vV_ = caml_wrap_exception(_vV_);
|
||
if(_vV_[1] === Failure)return 0;
|
||
throw _vV_}}
|
||
var compare$10=caml_int_compare;
|
||
function equal$11(x,y){return 0 === caml_int_compare(x,y)?1:0}
|
||
function unsigned_compare$1(n,m)
|
||
{return caml_int_compare(n + 2147483648 | 0,m + 2147483648 | 0)}
|
||
function unsigned_div$1(n,d)
|
||
{if(caml_lessthan(d,0))return 0 <= unsigned_compare$1(n,d)?one$3:zero$3;
|
||
var q=caml_div(n >>> 1 | 0,d) << 1,r=n - caml_mul(q,d) | 0;
|
||
return 0 <= unsigned_compare$1(r,d)?q + 1 | 0:q}
|
||
function unsigned_rem$1(n,d)
|
||
{return n - caml_mul(unsigned_div$1(n,d),d) | 0}
|
||
var
|
||
Stdlib_nativeint=
|
||
[0,
|
||
zero$3,
|
||
one$3,
|
||
minus_one$3,
|
||
unsigned_div$1,
|
||
unsigned_rem$1,
|
||
succ$3,
|
||
pred$3,
|
||
abs$3,
|
||
match$1,
|
||
max_int$4,
|
||
min_int$3,
|
||
lognot$2,
|
||
unsigned_to_int$1,
|
||
of_string_opt$2,
|
||
to_string$6,
|
||
compare$10,
|
||
unsigned_compare$1,
|
||
equal$11];
|
||
caml_register_global(767,Stdlib_nativeint,"Stdlib__nativeint");
|
||
function engine(tbl,state,buf)
|
||
{var
|
||
result=runtime.caml_lex_engine(tbl,state,buf),
|
||
_vR_=0 <= result?1:0,
|
||
_vS_=_vR_?buf[12] !== dummy_pos?1:0:_vR_;
|
||
if(_vS_)
|
||
{buf[11] = buf[12];
|
||
var _vT_=buf[12];
|
||
buf[12] = [0,_vT_[1],_vT_[2],_vT_[3],buf[4] + buf[6] | 0]}
|
||
return result}
|
||
function new_engine(tbl,state,buf)
|
||
{var
|
||
result=runtime.caml_new_lex_engine(tbl,state,buf),
|
||
_vO_=0 <= result?1:0,
|
||
_vP_=_vO_?buf[12] !== dummy_pos?1:0:_vO_;
|
||
if(_vP_)
|
||
{buf[11] = buf[12];
|
||
var _vQ_=buf[12];
|
||
buf[12] = [0,_vQ_[1],_vQ_[2],_vQ_[3],buf[4] + buf[6] | 0]}
|
||
return result}
|
||
function from_function(opt,f)
|
||
{if(opt)var sth=opt[1],with_positions=sth;else var with_positions=1;
|
||
var
|
||
_vA_=with_positions?zero_pos:dummy_pos,
|
||
_vB_=with_positions?zero_pos:dummy_pos,
|
||
aux_buffer=caml_create_bytes(512),
|
||
_vC_=[0],
|
||
_vD_=0,
|
||
_vE_=0,
|
||
_vF_=0,
|
||
_vG_=0,
|
||
_vH_=0,
|
||
_vI_=0,
|
||
_vJ_=0,
|
||
_vK_=caml_create_bytes(1024);
|
||
return [0,
|
||
function(lexbuf)
|
||
{var
|
||
read=
|
||
caml_call2(f,aux_buffer,caml_ml_bytes_length(aux_buffer)),
|
||
n=0 < read?read:(lexbuf[9] = 1,0);
|
||
if(caml_ml_bytes_length(lexbuf[2]) < (lexbuf[3] + n | 0))
|
||
{if
|
||
(((lexbuf[3] - lexbuf[5] | 0) + n | 0)
|
||
<=
|
||
caml_ml_bytes_length(lexbuf[2]))
|
||
blit
|
||
(lexbuf[2],lexbuf[5],lexbuf[2],0,lexbuf[3] - lexbuf[5] | 0);
|
||
else
|
||
{var
|
||
newlen=
|
||
min
|
||
(2 * caml_ml_bytes_length(lexbuf[2]) | 0,max_string_length);
|
||
if(newlen < ((lexbuf[3] - lexbuf[5] | 0) + n | 0))
|
||
failwith(cst_Lexing_lex_refill_cannot_g);
|
||
var newbuf=caml_create_bytes(newlen);
|
||
blit(lexbuf[2],lexbuf[5],newbuf,0,lexbuf[3] - lexbuf[5] | 0);
|
||
lexbuf[2] = newbuf}
|
||
var s=lexbuf[5];
|
||
lexbuf[4] = lexbuf[4] + s | 0;
|
||
lexbuf[6] = lexbuf[6] - s | 0;
|
||
lexbuf[5] = 0;
|
||
lexbuf[7] = lexbuf[7] - s | 0;
|
||
lexbuf[3] = lexbuf[3] - s | 0;
|
||
var t=lexbuf[10],_vM_=t.length - 1 - 1 | 0,_vL_=0;
|
||
if(! (_vM_ < 0))
|
||
{var i=_vL_;
|
||
for(;;)
|
||
{var v=caml_check_bound(t,i)[1 + i];
|
||
if(0 <= v)caml_check_bound(t,i)[1 + i] = v - s | 0;
|
||
var _vN_=i + 1 | 0;
|
||
if(_vM_ !== i){var i=_vN_;continue}
|
||
break}}}
|
||
blit(aux_buffer,0,lexbuf[2],lexbuf[3],n);
|
||
lexbuf[3] = lexbuf[3] + n | 0;
|
||
return 0},
|
||
_vK_,
|
||
_vJ_,
|
||
_vI_,
|
||
_vH_,
|
||
_vG_,
|
||
_vF_,
|
||
_vE_,
|
||
_vD_,
|
||
_vC_,
|
||
_vB_,
|
||
_vA_]}
|
||
function from_channel(with_positions,ic)
|
||
{return from_function
|
||
(with_positions,function(buf,n){return input(ic,buf,0,n)})}
|
||
function from_string$0(opt,s)
|
||
{if(opt)var sth=opt[1],with_positions=sth;else var with_positions=1;
|
||
var
|
||
_vp_=with_positions?zero_pos:dummy_pos,
|
||
_vq_=with_positions?zero_pos:dummy_pos,
|
||
_vr_=[0],
|
||
_vs_=1,
|
||
_vt_=0,
|
||
_vu_=0,
|
||
_vv_=0,
|
||
_vw_=0,
|
||
_vx_=0,
|
||
_vy_=caml_ml_string_length(s),
|
||
_vz_=of_string(s);
|
||
return [0,
|
||
function(lexbuf){lexbuf[9] = 1;return 0},
|
||
_vz_,
|
||
_vy_,
|
||
_vx_,
|
||
_vw_,
|
||
_vv_,
|
||
_vu_,
|
||
_vt_,
|
||
_vs_,
|
||
_vr_,
|
||
_vq_,
|
||
_vp_]}
|
||
function with_positions(lexbuf){return lexbuf[12] !== dummy_pos?1:0}
|
||
function lexeme(lexbuf)
|
||
{var len=lexbuf[6] - lexbuf[5] | 0;
|
||
return sub_string(lexbuf[2],lexbuf[5],len)}
|
||
function sub_lexeme(lexbuf,i1,i2)
|
||
{var len=i2 - i1 | 0;return sub_string(lexbuf[2],i1,len)}
|
||
function sub_lexeme_opt(lexbuf,i1,i2)
|
||
{if(0 <= i1){var len=i2 - i1 | 0;return [0,sub_string(lexbuf[2],i1,len)]}
|
||
return 0}
|
||
function sub_lexeme_char(lexbuf,i){return caml_bytes_get(lexbuf[2],i)}
|
||
function sub_lexeme_char_opt(lexbuf,i)
|
||
{return 0 <= i?[0,caml_bytes_get(lexbuf[2],i)]:0}
|
||
function lexeme_char(lexbuf,i)
|
||
{return caml_bytes_get(lexbuf[2],lexbuf[5] + i | 0)}
|
||
function lexeme_start(lexbuf){return lexbuf[11][4]}
|
||
function lexeme_end(lexbuf){return lexbuf[12][4]}
|
||
function lexeme_start_p(lexbuf){return lexbuf[11]}
|
||
function lexeme_end_p(lexbuf){return lexbuf[12]}
|
||
function new_line(lexbuf)
|
||
{var
|
||
lcp=lexbuf[12],
|
||
_vn_=lcp !== dummy_pos?1:0,
|
||
_vo_=_vn_?(lexbuf[12] = [0,lcp[1],lcp[2] + 1 | 0,lcp[4],lcp[4]],0):_vn_;
|
||
return _vo_}
|
||
function flush_input(lb)
|
||
{lb[6] = 0;
|
||
lb[4] = 0;
|
||
var lcp=lb[12];
|
||
if(lcp !== dummy_pos)
|
||
lb[12] = [0,lcp[1],zero_pos[2],zero_pos[3],zero_pos[4]];
|
||
lb[3] = 0;
|
||
return 0}
|
||
var
|
||
Stdlib_lexing=
|
||
[0,
|
||
dummy_pos,
|
||
from_channel,
|
||
from_string$0,
|
||
from_function,
|
||
with_positions,
|
||
lexeme,
|
||
lexeme_char,
|
||
lexeme_start,
|
||
lexeme_end,
|
||
lexeme_start_p,
|
||
lexeme_end_p,
|
||
new_line,
|
||
flush_input,
|
||
sub_lexeme,
|
||
sub_lexeme_opt,
|
||
sub_lexeme_char,
|
||
sub_lexeme_char_opt,
|
||
engine,
|
||
new_engine];
|
||
caml_register_global(768,Stdlib_lexing,"Stdlib__lexing");
|
||
var
|
||
YYexit=[248,cst_Stdlib_Parsing_YYexit,caml_fresh_oo_id(0)],
|
||
Parse_error=[248,cst_Stdlib_Parsing_Parse_error,caml_fresh_oo_id(0)],
|
||
env=
|
||
[0,
|
||
caml_make_vect(100,0),
|
||
caml_make_vect(100,0),
|
||
caml_make_vect(100,dummy_pos),
|
||
caml_make_vect(100,dummy_pos),
|
||
100,
|
||
0,
|
||
0,
|
||
0,
|
||
dummy_pos,
|
||
dummy_pos,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0];
|
||
function grow_stacks(param)
|
||
{var
|
||
oldsize=env[5],
|
||
newsize=oldsize * 2 | 0,
|
||
new_s=caml_make_vect(newsize,0),
|
||
new_v=caml_make_vect(newsize,0),
|
||
new_start=caml_make_vect(newsize,dummy_pos),
|
||
new_end=caml_make_vect(newsize,dummy_pos);
|
||
blit$1(env[1],0,new_s,0,oldsize);
|
||
env[1] = new_s;
|
||
blit$1(env[2],0,new_v,0,oldsize);
|
||
env[2] = new_v;
|
||
blit$1(env[3],0,new_start,0,oldsize);
|
||
env[3] = new_start;
|
||
blit$1(env[4],0,new_end,0,oldsize);
|
||
env[4] = new_end;
|
||
env[5] = newsize;
|
||
return 0}
|
||
function clear_parser(param)
|
||
{fill$0(env[2],0,env[5],0);env[8] = 0;return 0}
|
||
var current_lookahead_fun=[0,function(param){return 0}];
|
||
function yyparse(tables,start,lexer,lexbuf)
|
||
{var
|
||
init_asp=env[11],
|
||
init_sp=env[14],
|
||
init_stackbase=env[6],
|
||
init_state=env[15],
|
||
init_curr_char=env[7],
|
||
init_lval=env[8],
|
||
init_errflag=env[16];
|
||
env[6] = env[14] + 1 | 0;
|
||
env[7] = start;
|
||
env[10] = lexbuf[12];
|
||
try
|
||
{var cmd=0,arg=0;
|
||
for(;;)
|
||
{var match=runtime.caml_parse_engine(tables,env,cmd,arg);
|
||
switch(match)
|
||
{case 0:
|
||
var arg$0=caml_call1(lexer,lexbuf);
|
||
env[9] = lexbuf[11];
|
||
env[10] = lexbuf[12];
|
||
var cmd=1,arg=arg$0;
|
||
continue;
|
||
case 1:throw Parse_error;
|
||
case 2:grow_stacks(0);var cmd=2,arg=0;continue;
|
||
case 3:grow_stacks(0);var cmd=3,arg=0;continue;
|
||
case 4:
|
||
try
|
||
{var
|
||
_vh_=env[13],
|
||
_vi_=
|
||
caml_call1(caml_check_bound(tables[1],_vh_)[1 + _vh_],env),
|
||
_vj_=4,
|
||
arg$1=_vi_,
|
||
cmd$0=_vj_}
|
||
catch(_vm_)
|
||
{_vm_ = caml_wrap_exception(_vm_);
|
||
if(_vm_ !== Parse_error)throw _vm_;
|
||
var arg$1=0,cmd$0=5,_vk_=_vm_}
|
||
var cmd=cmd$0,arg=arg$1;
|
||
continue;
|
||
default:
|
||
caml_call1(tables[14],cst_syntax_error);var cmd=5,arg=0;continue}}}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
var curr_char=env[7];
|
||
env[11] = init_asp;
|
||
env[14] = init_sp;
|
||
env[6] = init_stackbase;
|
||
env[15] = init_state;
|
||
env[7] = init_curr_char;
|
||
env[8] = init_lval;
|
||
env[16] = init_errflag;
|
||
if(exn[1] === YYexit){var v=exn[2];return v}
|
||
current_lookahead_fun[1]
|
||
=
|
||
function(tok)
|
||
{if(is_block(tok))
|
||
{var _vl_=caml_obj_tag(tok);
|
||
return caml_check_bound(tables[3],_vl_)[1 + _vl_] === curr_char
|
||
?1
|
||
:0}
|
||
return caml_check_bound(tables[2],tok)[1 + tok] === curr_char?1:0};
|
||
throw exn}}
|
||
function peek_val(env,n)
|
||
{var _vg_=env[11] - n | 0;return caml_check_bound(env[2],_vg_)[1 + _vg_]}
|
||
function symbol_start_pos(param)
|
||
{var i=env[12];
|
||
for(;;)
|
||
{if(0 < i)
|
||
{var
|
||
_vd_=(env[11] - i | 0) + 1 | 0,
|
||
st=caml_check_bound(env[3],_vd_)[1 + _vd_],
|
||
_ve_=(env[11] - i | 0) + 1 | 0,
|
||
en=caml_check_bound(env[4],_ve_)[1 + _ve_];
|
||
if(caml_notequal(st,en))return st;
|
||
var i$0=i - 1 | 0,i=i$0;
|
||
continue}
|
||
var _vf_=env[11];
|
||
return caml_check_bound(env[4],_vf_)[1 + _vf_]}}
|
||
function symbol_end_pos(param)
|
||
{var _vc_=env[11];return caml_check_bound(env[4],_vc_)[1 + _vc_]}
|
||
function rhs_start_pos(n)
|
||
{var _vb_=env[11] - (env[12] - n | 0) | 0;
|
||
return caml_check_bound(env[3],_vb_)[1 + _vb_]}
|
||
function rhs_end_pos(n)
|
||
{var _va_=env[11] - (env[12] - n | 0) | 0;
|
||
return caml_check_bound(env[4],_va_)[1 + _va_]}
|
||
function symbol_start(param){return symbol_start_pos(0)[4]}
|
||
function symbol_end(param){return symbol_end_pos(0)[4]}
|
||
function rhs_start(n){return rhs_start_pos(n)[4]}
|
||
function rhs_end(n){return rhs_end_pos(n)[4]}
|
||
function is_current_lookahead(tok)
|
||
{return caml_call1(current_lookahead_fun[1],tok)}
|
||
function parse_error(param){return 0}
|
||
var
|
||
Stdlib_parsing=
|
||
[0,
|
||
symbol_start,
|
||
symbol_end,
|
||
rhs_start,
|
||
rhs_end,
|
||
symbol_start_pos,
|
||
symbol_end_pos,
|
||
rhs_start_pos,
|
||
rhs_end_pos,
|
||
clear_parser,
|
||
Parse_error,
|
||
function(_u$_){return runtime.caml_set_parser_trace(_u$_)},
|
||
YYexit,
|
||
yyparse,
|
||
peek_val,
|
||
is_current_lookahead,
|
||
parse_error];
|
||
caml_register_global(769,Stdlib_parsing,"Stdlib__parsing");
|
||
var
|
||
Stdlib_set=
|
||
[0,
|
||
function(Ord)
|
||
{function height(param){if(param){var h=param[4];return h}return 0}
|
||
function create(l,v,r)
|
||
{if(l)var h=l[4],hl=h;else var hl=0;
|
||
if(r)var h$0=r[4],hr=h$0;else var hr=0;
|
||
var _u__=hr <= hl?hl + 1 | 0:hr + 1 | 0;
|
||
return [0,l,v,r,_u__]}
|
||
function bal(l,v,r)
|
||
{if(l)var h=l[4],hl=h;else var hl=0;
|
||
if(r)var h$0=r[4],hr=h$0;else var hr=0;
|
||
if((hr + 2 | 0) < hl)
|
||
{if(l)
|
||
{var lr=l[3],lv=l[2],ll=l[1],_u5_=height(lr);
|
||
if(_u5_ <= height(ll))return create(ll,lv,create(lr,v,r));
|
||
if(lr)
|
||
{var lrr=lr[3],lrv=lr[2],lrl=lr[1],_u6_=create(lrr,v,r);
|
||
return create(create(ll,lv,lrl),lrv,_u6_)}
|
||
return invalid_arg(cst_Set_bal)}
|
||
return invalid_arg(cst_Set_bal$0)}
|
||
if((hl + 2 | 0) < hr)
|
||
{if(r)
|
||
{var rr=r[3],rv=r[2],rl=r[1],_u7_=height(rl);
|
||
if(_u7_ <= height(rr))return create(create(l,v,rl),rv,rr);
|
||
if(rl)
|
||
{var rlr=rl[3],rlv=rl[2],rll=rl[1],_u8_=create(rlr,rv,rr);
|
||
return create(create(l,v,rll),rlv,_u8_)}
|
||
return invalid_arg(cst_Set_bal$1)}
|
||
return invalid_arg(cst_Set_bal$2)}
|
||
var _u9_=hr <= hl?hl + 1 | 0:hr + 1 | 0;
|
||
return [0,l,v,r,_u9_]}
|
||
function add(x,t)
|
||
{if(t)
|
||
{var r=t[3],v=t[2],l=t[1],c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return t;
|
||
if(0 <= c){var rr=add(x,r);return r === rr?t:bal(l,v,rr)}
|
||
var ll=add(x,l);
|
||
return l === ll?t:bal(ll,v,r)}
|
||
return [0,0,x,0,1]}
|
||
function singleton(x){return [0,0,x,0,1]}
|
||
function add_min_element(x,param)
|
||
{if(param)
|
||
{var r=param[3],v=param[2],l=param[1];
|
||
return bal(add_min_element(x,l),v,r)}
|
||
return singleton(x)}
|
||
function add_max_element(x,param)
|
||
{if(param)
|
||
{var r=param[3],v=param[2],l=param[1];
|
||
return bal(l,v,add_max_element(x,r))}
|
||
return singleton(x)}
|
||
function join(l,v,r)
|
||
{if(l)
|
||
{if(r)
|
||
{var
|
||
rh=r[4],
|
||
rr=r[3],
|
||
rv=r[2],
|
||
rl=r[1],
|
||
lh=l[4],
|
||
lr=l[3],
|
||
lv=l[2],
|
||
ll=l[1];
|
||
return (rh + 2 | 0) < lh
|
||
?bal(ll,lv,join(lr,v,r))
|
||
:(lh + 2 | 0) < rh?bal(join(l,v,rl),rv,rr):create(l,v,r)}
|
||
return add_max_element(v,l)}
|
||
return add_min_element(v,r)}
|
||
function min_elt(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var _u4_=param$0[1];
|
||
if(_u4_){var param$0=_u4_;continue}
|
||
var v=param$0[2];
|
||
return v}
|
||
throw Not_found}}
|
||
function min_elt_opt(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var _u3_=param$0[1];
|
||
if(_u3_){var param$0=_u3_;continue}
|
||
var v=param$0[2];
|
||
return [0,v]}
|
||
return 0}}
|
||
function max_elt(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{if(param$0[3]){var param$1=param$0[3],param$0=param$1;continue}
|
||
var v=param$0[2];
|
||
return v}
|
||
throw Not_found}}
|
||
function max_elt_opt(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{if(param$0[3]){var param$1=param$0[3],param$0=param$1;continue}
|
||
var v=param$0[2];
|
||
return [0,v]}
|
||
return 0}}
|
||
function remove_min_elt(param)
|
||
{if(param)
|
||
{var _u2_=param[1];
|
||
if(_u2_)
|
||
{var r=param[3],v=param[2];return bal(remove_min_elt(_u2_),v,r)}
|
||
var r$0=param[3];
|
||
return r$0}
|
||
return invalid_arg(cst_Set_remove_min_elt)}
|
||
function concat(t,match)
|
||
{if(t)
|
||
{if(match)
|
||
{var _u1_=remove_min_elt(match);
|
||
return join(t,min_elt(match),_u1_)}
|
||
return t}
|
||
return match}
|
||
function split(x,param)
|
||
{if(param)
|
||
{var r=param[3],v=param[2],l=param[1],c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return [0,l,1,r];
|
||
if(0 <= c)
|
||
{var match=split(x,r),rr=match[3],pres=match[2],lr=match[1];
|
||
return [0,join(l,v,lr),pres,rr]}
|
||
var
|
||
match$0=split(x,l),
|
||
rl=match$0[3],
|
||
pres$0=match$0[2],
|
||
ll=match$0[1];
|
||
return [0,ll,pres$0,join(rl,v,r)]}
|
||
return _G_}
|
||
var empty=0;
|
||
function is_empty(param){return param?0:1}
|
||
function mem(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
c=caml_call2(Ord[1],x,v),
|
||
_u0_=0 === c?1:0;
|
||
if(_u0_)return _u0_;
|
||
var param$1=0 <= c?r:l,param$0=param$1;
|
||
continue}
|
||
return 0}}
|
||
function remove(x,t)
|
||
{if(t)
|
||
{var r=t[3],v=t[2],l=t[1],c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)
|
||
{if(l)
|
||
{if(r)
|
||
{var _uZ_=remove_min_elt(r);return bal(l,min_elt(r),_uZ_)}
|
||
return l}
|
||
return r}
|
||
if(0 <= c){var rr=remove(x,r);return r === rr?t:bal(l,v,rr)}
|
||
var ll=remove(x,l);
|
||
return l === ll?t:bal(ll,v,r)}
|
||
return 0}
|
||
function union(t1,match)
|
||
{if(t1)
|
||
{if(match)
|
||
{var
|
||
h2=match[4],
|
||
r2=match[3],
|
||
v2=match[2],
|
||
l2=match[1],
|
||
h1=t1[4],
|
||
r1=t1[3],
|
||
v1=t1[2],
|
||
l1=t1[1];
|
||
if(h2 <= h1)
|
||
{if(1 === h2)return add(v2,t1);
|
||
var
|
||
match$0=split(v1,match),
|
||
r2$0=match$0[3],
|
||
l2$0=match$0[1],
|
||
_uX_=union(r1,r2$0);
|
||
return join(union(l1,l2$0),v1,_uX_)}
|
||
if(1 === h1)return add(v1,match);
|
||
var
|
||
match$1=split(v2,t1),
|
||
r1$0=match$1[3],
|
||
l1$0=match$1[1],
|
||
_uY_=union(r1$0,r2);
|
||
return join(union(l1$0,l2),v2,_uY_)}
|
||
return t1}
|
||
return match}
|
||
function inter(s1,match)
|
||
{if(s1)
|
||
{if(match)
|
||
{var
|
||
r1=s1[3],
|
||
v1=s1[2],
|
||
l1=s1[1],
|
||
_uT_=split(v1,match),
|
||
_uU_=_uT_[1];
|
||
if(_uT_[2])
|
||
{var r2=_uT_[3],_uV_=inter(r1,r2);
|
||
return join(inter(l1,_uU_),v1,_uV_)}
|
||
var r2$0=_uT_[3],_uW_=inter(r1,r2$0);
|
||
return concat(inter(l1,_uU_),_uW_)}
|
||
return 0}
|
||
return 0}
|
||
function split_bis(x,param)
|
||
{if(param)
|
||
{var r=param[3],v=param[2],l=param[1],c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return 0;
|
||
if(0 <= c)
|
||
{var match=split_bis(x,r);
|
||
if(match)
|
||
{var rr=match[2],lr=match[1];return [0,join(l,v,lr),rr]}
|
||
return 0}
|
||
var match$0=split_bis(x,l);
|
||
if(match$0)
|
||
{var rl=match$0[2],ll=match$0[1];
|
||
return [0,
|
||
ll,
|
||
function(param){return join(caml_call1(rl,0),v,r)}]}
|
||
return 0}
|
||
return [0,0,function(param){return 0}]}
|
||
function disjoint(s1,s2)
|
||
{var s1$0=s1,s2$0=s2;
|
||
for(;;)
|
||
{if(s1$0 && s2$0)
|
||
{var r1=s1$0[3],v1=s1$0[2],l1=s1$0[1];
|
||
if(s1$0 === s2$0)return 0;
|
||
var match=split_bis(v1,s2$0);
|
||
if(match)
|
||
{var r2=match[2],l2=match[1],_uS_=disjoint(l1,l2);
|
||
if(_uS_)
|
||
{var s2$1=caml_call1(r2,0),s1$0=r1,s2$0=s2$1;continue}
|
||
return _uS_}
|
||
return 0}
|
||
return 1}}
|
||
function diff(t1,match)
|
||
{if(t1)
|
||
{if(match)
|
||
{var
|
||
r1=t1[3],
|
||
v1=t1[2],
|
||
l1=t1[1],
|
||
_uO_=split(v1,match),
|
||
_uP_=_uO_[1];
|
||
if(_uO_[2])
|
||
{var r2=_uO_[3],_uQ_=diff(r1,r2);
|
||
return concat(diff(l1,_uP_),_uQ_)}
|
||
var r2$0=_uO_[3],_uR_=diff(r1,r2$0);
|
||
return join(diff(l1,_uP_),v1,_uR_)}
|
||
return t1}
|
||
return 0}
|
||
function cons_enum(s,e)
|
||
{var s$0=s,e$0=e;
|
||
for(;;)
|
||
{if(s$0)
|
||
{var
|
||
r=s$0[3],
|
||
v=s$0[2],
|
||
s$1=s$0[1],
|
||
e$1=[0,v,r,e$0],
|
||
s$0=s$1,
|
||
e$0=e$1;
|
||
continue}
|
||
return e$0}}
|
||
function compare(s1,s2)
|
||
{var e2$2=cons_enum(s2,0),e1$2=cons_enum(s1,0),e1=e1$2,e2=e2$2;
|
||
for(;;)
|
||
{if(e1)
|
||
{if(e2)
|
||
{var
|
||
e2$0=e2[3],
|
||
r2=e2[2],
|
||
v2=e2[1],
|
||
e1$0=e1[3],
|
||
r1=e1[2],
|
||
v1=e1[1],
|
||
c=caml_call2(Ord[1],v1,v2);
|
||
if(0 === c)
|
||
{var
|
||
e2$1=cons_enum(r2,e2$0),
|
||
e1$1=cons_enum(r1,e1$0),
|
||
e1=e1$1,
|
||
e2=e2$1;
|
||
continue}
|
||
return c}
|
||
return 1}
|
||
return e2?-1:0}}
|
||
function equal(s1,s2){return 0 === compare(s1,s2)?1:0}
|
||
function subset(s1,s2)
|
||
{var s1$0=s1,s2$0=s2;
|
||
for(;;)
|
||
{if(s1$0)
|
||
{if(s2$0)
|
||
{var
|
||
r2=s2$0[3],
|
||
v2=s2$0[2],
|
||
l2=s2$0[1],
|
||
r1=s1$0[3],
|
||
v1=s1$0[2],
|
||
l1=s1$0[1],
|
||
c=caml_call2(Ord[1],v1,v2);
|
||
if(0 === c)
|
||
{var _uL_=subset(l1,l2);
|
||
if(_uL_){var s1$0=r1,s2$0=r2;continue}
|
||
return _uL_}
|
||
if(0 <= c)
|
||
{var _uM_=subset([0,0,v1,r1,0],r2);
|
||
if(_uM_){var s1$0=l1;continue}
|
||
return _uM_}
|
||
var _uN_=subset([0,l1,v1,0,0],l2);
|
||
if(_uN_){var s1$0=r1;continue}
|
||
return _uN_}
|
||
return 0}
|
||
return 1}}
|
||
function iter(f,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var r=param$0[3],v=param$0[2],l=param$0[1];
|
||
iter(f,l);
|
||
caml_call1(f,v);
|
||
var param$0=r;
|
||
continue}
|
||
return 0}}
|
||
function fold(f,s,accu)
|
||
{var s$0=s,accu$0=accu;
|
||
for(;;)
|
||
{if(s$0)
|
||
{var
|
||
r=s$0[3],
|
||
v=s$0[2],
|
||
l=s$0[1],
|
||
accu$1=caml_call2(f,v,fold(f,l,accu$0)),
|
||
s$0=r,
|
||
accu$0=accu$1;
|
||
continue}
|
||
return accu$0}}
|
||
function for_all(p,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
_uI_=caml_call1(p,v);
|
||
if(_uI_)
|
||
{var _uJ_=for_all(p,l);
|
||
if(_uJ_){var param$0=r;continue}
|
||
var _uK_=_uJ_}
|
||
else
|
||
var _uK_=_uI_;
|
||
return _uK_}
|
||
return 1}}
|
||
function exists(p,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
_uF_=caml_call1(p,v);
|
||
if(_uF_)
|
||
var _uG_=_uF_;
|
||
else
|
||
{var _uH_=exists(p,l);
|
||
if(! _uH_){var param$0=r;continue}
|
||
var _uG_=_uH_}
|
||
return _uG_}
|
||
return 0}}
|
||
function filter(p,t)
|
||
{if(t)
|
||
{var
|
||
r=t[3],
|
||
v=t[2],
|
||
l=t[1],
|
||
l$0=filter(p,l),
|
||
pv=caml_call1(p,v),
|
||
r$0=filter(p,r);
|
||
if(pv){if(l === l$0 && r === r$0)return t;return join(l$0,v,r$0)}
|
||
return concat(l$0,r$0)}
|
||
return 0}
|
||
function partition(p,param)
|
||
{if(param)
|
||
{var
|
||
r=param[3],
|
||
v=param[2],
|
||
l=param[1],
|
||
match=partition(p,l),
|
||
lf=match[2],
|
||
lt=match[1],
|
||
pv=caml_call1(p,v),
|
||
match$0=partition(p,r),
|
||
rf=match$0[2],
|
||
rt=match$0[1];
|
||
if(pv){var _uD_=concat(lf,rf);return [0,join(lt,v,rt),_uD_]}
|
||
var _uE_=join(lf,v,rf);
|
||
return [0,concat(lt,rt),_uE_]}
|
||
return _H_}
|
||
function cardinal(param)
|
||
{if(param)
|
||
{var r=param[3],l=param[1],_uC_=cardinal(r);
|
||
return (cardinal(l) + 1 | 0) + _uC_ | 0}
|
||
return 0}
|
||
function elements_aux(accu,param)
|
||
{var accu$0=accu,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
accu$1=[0,v,elements_aux(accu$0,r)],
|
||
accu$0=accu$1,
|
||
param$0=l;
|
||
continue}
|
||
return accu$0}}
|
||
function elements(s){return elements_aux(0,s)}
|
||
function find(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return v;
|
||
var param$1=0 <= c?r:l,param$0=param$1;
|
||
continue}
|
||
throw Not_found}}
|
||
function find_first(f,param$0)
|
||
{var param$1=param$0;
|
||
for(;;)
|
||
{if(param$1)
|
||
{var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1];
|
||
if(caml_call1(f,v$0))
|
||
{var v0=v$0,param=l$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var r=param[3],v=param[2],l=param[1];
|
||
if(caml_call1(f,v)){var v0=v,param=l;continue}
|
||
var param=r;
|
||
continue}
|
||
return v0}}
|
||
var param$1=r$0;
|
||
continue}
|
||
throw Not_found}}
|
||
function find_first_opt(f,param$0)
|
||
{var param$1=param$0;
|
||
for(;;)
|
||
{if(param$1)
|
||
{var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1];
|
||
if(caml_call1(f,v$0))
|
||
{var v0=v$0,param=l$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var r=param[3],v=param[2],l=param[1];
|
||
if(caml_call1(f,v)){var v0=v,param=l;continue}
|
||
var param=r;
|
||
continue}
|
||
return [0,v0]}}
|
||
var param$1=r$0;
|
||
continue}
|
||
return 0}}
|
||
function find_last(f,param$0)
|
||
{var param$1=param$0;
|
||
for(;;)
|
||
{if(param$1)
|
||
{var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1];
|
||
if(caml_call1(f,v$0))
|
||
{var v0=v$0,param=r$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var r=param[3],v=param[2],l=param[1];
|
||
if(caml_call1(f,v)){var v0=v,param=r;continue}
|
||
var param=l;
|
||
continue}
|
||
return v0}}
|
||
var param$1=l$0;
|
||
continue}
|
||
throw Not_found}}
|
||
function find_last_opt(f,param$0)
|
||
{var param$1=param$0;
|
||
for(;;)
|
||
{if(param$1)
|
||
{var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1];
|
||
if(caml_call1(f,v$0))
|
||
{var v0=v$0,param=r$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var r=param[3],v=param[2],l=param[1];
|
||
if(caml_call1(f,v)){var v0=v,param=r;continue}
|
||
var param=l;
|
||
continue}
|
||
return [0,v0]}}
|
||
var param$1=l$0;
|
||
continue}
|
||
return 0}}
|
||
function find_opt(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return [0,v];
|
||
var param$1=0 <= c?r:l,param$0=param$1;
|
||
continue}
|
||
return 0}}
|
||
function map(f,t)
|
||
{if(t)
|
||
{var
|
||
r=t[3],
|
||
v=t[2],
|
||
l=t[1],
|
||
l$0=map(f,l),
|
||
v$0=caml_call1(f,v),
|
||
r$0=map(f,r);
|
||
if(l === l$0 && v === v$0 && r === r$0)return t;
|
||
var switch$0=0;
|
||
if(0 !== l$0)
|
||
{var _uB_=max_elt(l$0);
|
||
if(0 <= caml_call2(Ord[1],_uB_,v$0))switch$0 = 1}
|
||
if(! switch$0)
|
||
{var switch$1=0;
|
||
if(0 !== r$0)
|
||
{var _uA_=min_elt(r$0);
|
||
if(0 <= caml_call2(Ord[1],v$0,_uA_))switch$1 = 1}
|
||
if(! switch$1)return join(l$0,v$0,r$0)}
|
||
return union(l$0,add(v$0,r$0))}
|
||
return 0}
|
||
function of_list(l)
|
||
{if(l)
|
||
{var _up_=l[2],_uq_=l[1];
|
||
if(_up_)
|
||
{var _ur_=_up_[2],_us_=_up_[1];
|
||
if(_ur_)
|
||
{var _ut_=_ur_[2],_uu_=_ur_[1];
|
||
if(_ut_)
|
||
{var _uv_=_ut_[2],_uw_=_ut_[1];
|
||
if(_uv_)
|
||
{if(_uv_[2])
|
||
{var
|
||
l$0=sort_uniq(Ord[1],l),
|
||
sub=
|
||
function(n,l)
|
||
{if(! (3 < n >>> 0))
|
||
switch(n)
|
||
{case 0:return [0,0,l];
|
||
case 1:
|
||
if(l){var l$3=l[2],x0=l[1];return [0,[0,0,x0,0,1],l$3]}
|
||
break;
|
||
case 2:
|
||
if(l)
|
||
{var _ux_=l[2];
|
||
if(_ux_)
|
||
{var l$4=_ux_[2],x1=_ux_[1],x0$0=l[1];
|
||
return [0,[0,[0,0,x0$0,0,1],x1,0,2],l$4]}}
|
||
break;
|
||
default:
|
||
if(l)
|
||
{var _uy_=l[2];
|
||
if(_uy_)
|
||
{var _uz_=_uy_[2];
|
||
if(_uz_)
|
||
{var l$5=_uz_[2],x2=_uz_[1],x1$0=_uy_[1],x0$1=l[1];
|
||
return [0,[0,[0,0,x0$1,0,1],x1$0,[0,0,x2,0,1],2],l$5]}}}}
|
||
var nl=n / 2 | 0,match=sub(nl,l),l$0=match[2],left=match[1];
|
||
if(l$0)
|
||
{var
|
||
l$1=l$0[2],
|
||
mid=l$0[1],
|
||
match$0=sub((n - nl | 0) - 1 | 0,l$1),
|
||
l$2=match$0[2],
|
||
right=match$0[1];
|
||
return [0,create(left,mid,right),l$2]}
|
||
throw [0,Assert_failure,_I_]};
|
||
return sub(length(l$0),l$0)[1]}
|
||
var x4=_uv_[1];
|
||
return add(x4,add(_uw_,add(_uu_,add(_us_,singleton(_uq_)))))}
|
||
return add(_uw_,add(_uu_,add(_us_,singleton(_uq_))))}
|
||
return add(_uu_,add(_us_,singleton(_uq_)))}
|
||
return add(_us_,singleton(_uq_))}
|
||
return singleton(_uq_)}
|
||
return empty}
|
||
function add_seq(i,m)
|
||
{return fold_left(function(s,x){return add(x,s)},m,i)}
|
||
function of_seq(i){return add_seq(i,empty)}
|
||
function seq_of_enum(c,param)
|
||
{if(c)
|
||
{var rest=c[3],t=c[2],x=c[1],_un_=cons_enum(t,rest);
|
||
return [0,x,function(_uo_){return seq_of_enum(_un_,_uo_)}]}
|
||
return 0}
|
||
function to_seq(c)
|
||
{var _ul_=cons_enum(c,0);
|
||
return function(_um_){return seq_of_enum(_ul_,_um_)}}
|
||
function to_seq_from(low,s)
|
||
{var s$0=s,c=0;
|
||
for(;;)
|
||
{if(s$0)
|
||
{var r=s$0[3],v=s$0[2],l=s$0[1],n=caml_call2(Ord[1],v,low);
|
||
if(0 !== n)
|
||
{if(0 <= n){var c$0=[0,v,r,c],s$0=l,c=c$0;continue}
|
||
var s$0=r;
|
||
continue}
|
||
var _uj_=[0,v,r,c]}
|
||
else
|
||
var _uj_=c;
|
||
return function(_uk_){return seq_of_enum(_uj_,_uk_)}}}
|
||
return [0,
|
||
empty,
|
||
is_empty,
|
||
mem,
|
||
add,
|
||
singleton,
|
||
remove,
|
||
union,
|
||
inter,
|
||
disjoint,
|
||
diff,
|
||
compare,
|
||
equal,
|
||
subset,
|
||
iter,
|
||
map,
|
||
fold,
|
||
for_all,
|
||
exists,
|
||
filter,
|
||
partition,
|
||
cardinal,
|
||
elements,
|
||
min_elt,
|
||
min_elt_opt,
|
||
max_elt,
|
||
max_elt_opt,
|
||
min_elt,
|
||
min_elt_opt,
|
||
split,
|
||
find,
|
||
find_opt,
|
||
find_first,
|
||
find_first_opt,
|
||
find_last,
|
||
find_last_opt,
|
||
of_list,
|
||
to_seq_from,
|
||
to_seq,
|
||
add_seq,
|
||
of_seq]}];
|
||
caml_register_global(770,Stdlib_set,"Stdlib__set");
|
||
var
|
||
Stdlib_map=
|
||
[0,
|
||
function(Ord)
|
||
{function height(param){if(param){var h=param[5];return h}return 0}
|
||
function create(l,x,d,r)
|
||
{var hl=height(l),hr=height(r),_ui_=hr <= hl?hl + 1 | 0:hr + 1 | 0;
|
||
return [0,l,x,d,r,_ui_]}
|
||
function singleton(x,d){return [0,0,x,d,0,1]}
|
||
function bal(l,x,d,r)
|
||
{if(l)var h=l[5],hl=h;else var hl=0;
|
||
if(r)var h$0=r[5],hr=h$0;else var hr=0;
|
||
if((hr + 2 | 0) < hl)
|
||
{if(l)
|
||
{var lr=l[4],ld=l[3],lv=l[2],ll=l[1],_ud_=height(lr);
|
||
if(_ud_ <= height(ll))return create(ll,lv,ld,create(lr,x,d,r));
|
||
if(lr)
|
||
{var
|
||
lrr=lr[4],
|
||
lrd=lr[3],
|
||
lrv=lr[2],
|
||
lrl=lr[1],
|
||
_ue_=create(lrr,x,d,r);
|
||
return create(create(ll,lv,ld,lrl),lrv,lrd,_ue_)}
|
||
return invalid_arg(cst_Map_bal)}
|
||
return invalid_arg(cst_Map_bal$0)}
|
||
if((hl + 2 | 0) < hr)
|
||
{if(r)
|
||
{var rr=r[4],rd=r[3],rv=r[2],rl=r[1],_uf_=height(rl);
|
||
if(_uf_ <= height(rr))return create(create(l,x,d,rl),rv,rd,rr);
|
||
if(rl)
|
||
{var
|
||
rlr=rl[4],
|
||
rld=rl[3],
|
||
rlv=rl[2],
|
||
rll=rl[1],
|
||
_ug_=create(rlr,rv,rd,rr);
|
||
return create(create(l,x,d,rll),rlv,rld,_ug_)}
|
||
return invalid_arg(cst_Map_bal$1)}
|
||
return invalid_arg(cst_Map_bal$2)}
|
||
var _uh_=hr <= hl?hl + 1 | 0:hr + 1 | 0;
|
||
return [0,l,x,d,r,_uh_]}
|
||
var empty=0;
|
||
function is_empty(param){return param?0:1}
|
||
function add(x,data,m)
|
||
{if(m)
|
||
{var h=m[5],r=m[4],d=m[3],v=m[2],l=m[1],c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return d === data?m:[0,l,x,data,r,h];
|
||
if(0 <= c){var rr=add(x,data,r);return r === rr?m:bal(l,v,d,rr)}
|
||
var ll=add(x,data,l);
|
||
return l === ll?m:bal(ll,v,d,r)}
|
||
return [0,0,x,data,0,1]}
|
||
function find(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[4],
|
||
d=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return d;
|
||
var param$1=0 <= c?r:l,param$0=param$1;
|
||
continue}
|
||
throw Not_found}}
|
||
function find_first(f,param$0)
|
||
{var param$1=param$0;
|
||
for(;;)
|
||
{if(param$1)
|
||
{var
|
||
r$0=param$1[4],
|
||
d$0=param$1[3],
|
||
v$0=param$1[2],
|
||
l$0=param$1[1];
|
||
if(caml_call1(f,v$0))
|
||
{var v0=v$0,d0=d$0,param=l$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var r=param[4],d=param[3],v=param[2],l=param[1];
|
||
if(caml_call1(f,v)){var v0=v,d0=d,param=l;continue}
|
||
var param=r;
|
||
continue}
|
||
return [0,v0,d0]}}
|
||
var param$1=r$0;
|
||
continue}
|
||
throw Not_found}}
|
||
function find_first_opt(f,param$0)
|
||
{var param$1=param$0;
|
||
for(;;)
|
||
{if(param$1)
|
||
{var
|
||
r$0=param$1[4],
|
||
d$0=param$1[3],
|
||
v$0=param$1[2],
|
||
l$0=param$1[1];
|
||
if(caml_call1(f,v$0))
|
||
{var v0=v$0,d0=d$0,param=l$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var r=param[4],d=param[3],v=param[2],l=param[1];
|
||
if(caml_call1(f,v)){var v0=v,d0=d,param=l;continue}
|
||
var param=r;
|
||
continue}
|
||
return [0,[0,v0,d0]]}}
|
||
var param$1=r$0;
|
||
continue}
|
||
return 0}}
|
||
function find_last(f,param$0)
|
||
{var param$1=param$0;
|
||
for(;;)
|
||
{if(param$1)
|
||
{var
|
||
r$0=param$1[4],
|
||
d$0=param$1[3],
|
||
v$0=param$1[2],
|
||
l$0=param$1[1];
|
||
if(caml_call1(f,v$0))
|
||
{var v0=v$0,d0=d$0,param=r$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var r=param[4],d=param[3],v=param[2],l=param[1];
|
||
if(caml_call1(f,v)){var v0=v,d0=d,param=r;continue}
|
||
var param=l;
|
||
continue}
|
||
return [0,v0,d0]}}
|
||
var param$1=l$0;
|
||
continue}
|
||
throw Not_found}}
|
||
function find_last_opt(f,param$0)
|
||
{var param$1=param$0;
|
||
for(;;)
|
||
{if(param$1)
|
||
{var
|
||
r$0=param$1[4],
|
||
d$0=param$1[3],
|
||
v$0=param$1[2],
|
||
l$0=param$1[1];
|
||
if(caml_call1(f,v$0))
|
||
{var v0=v$0,d0=d$0,param=r$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var r=param[4],d=param[3],v=param[2],l=param[1];
|
||
if(caml_call1(f,v)){var v0=v,d0=d,param=r;continue}
|
||
var param=l;
|
||
continue}
|
||
return [0,[0,v0,d0]]}}
|
||
var param$1=l$0;
|
||
continue}
|
||
return 0}}
|
||
function find_opt(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[4],
|
||
d=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return [0,d];
|
||
var param$1=0 <= c?r:l,param$0=param$1;
|
||
continue}
|
||
return 0}}
|
||
function mem(x,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[4],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
c=caml_call2(Ord[1],x,v),
|
||
_uc_=0 === c?1:0;
|
||
if(_uc_)return _uc_;
|
||
var param$1=0 <= c?r:l,param$0=param$1;
|
||
continue}
|
||
return 0}}
|
||
function min_binding(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var _ub_=param$0[1];
|
||
if(_ub_){var param$0=_ub_;continue}
|
||
var d=param$0[3],v=param$0[2];
|
||
return [0,v,d]}
|
||
throw Not_found}}
|
||
function min_binding_opt(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var _ua_=param$0[1];
|
||
if(_ua_){var param$0=_ua_;continue}
|
||
var d=param$0[3],v=param$0[2];
|
||
return [0,[0,v,d]]}
|
||
return 0}}
|
||
function max_binding(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{if(param$0[4]){var param$1=param$0[4],param$0=param$1;continue}
|
||
var d=param$0[3],v=param$0[2];
|
||
return [0,v,d]}
|
||
throw Not_found}}
|
||
function max_binding_opt(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{if(param$0[4]){var param$1=param$0[4],param$0=param$1;continue}
|
||
var d=param$0[3],v=param$0[2];
|
||
return [0,[0,v,d]]}
|
||
return 0}}
|
||
function remove_min_binding(param)
|
||
{if(param)
|
||
{var _t$_=param[1];
|
||
if(_t$_)
|
||
{var r=param[4],d=param[3],v=param[2];
|
||
return bal(remove_min_binding(_t$_),v,d,r)}
|
||
var r$0=param[4];
|
||
return r$0}
|
||
return invalid_arg(cst_Map_remove_min_elt)}
|
||
function _tO_(t,match)
|
||
{if(t)
|
||
{if(match)
|
||
{var match$0=min_binding(match),d=match$0[2],x=match$0[1];
|
||
return bal(t,x,d,remove_min_binding(match))}
|
||
return t}
|
||
return match}
|
||
function remove(x,m)
|
||
{if(m)
|
||
{var r=m[4],d=m[3],v=m[2],l=m[1],c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return _tO_(l,r);
|
||
if(0 <= c){var rr=remove(x,r);return r === rr?m:bal(l,v,d,rr)}
|
||
var ll=remove(x,l);
|
||
return l === ll?m:bal(ll,v,d,r)}
|
||
return 0}
|
||
function update(x,f,m)
|
||
{if(m)
|
||
{var h=m[5],r=m[4],d=m[3],v=m[2],l=m[1],c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)
|
||
{var match=caml_call1(f,[0,d]);
|
||
if(match)
|
||
{var data=match[1];return d === data?m:[0,l,x,data,r,h]}
|
||
return _tO_(l,r)}
|
||
if(0 <= c){var rr=update(x,f,r);return r === rr?m:bal(l,v,d,rr)}
|
||
var ll=update(x,f,l);
|
||
return l === ll?m:bal(ll,v,d,r)}
|
||
var match$0=caml_call1(f,0);
|
||
if(match$0){var data$0=match$0[1];return [0,0,x,data$0,0,1]}
|
||
return 0}
|
||
function iter(f,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var r=param$0[4],d=param$0[3],v=param$0[2],l=param$0[1];
|
||
iter(f,l);
|
||
caml_call2(f,v,d);
|
||
var param$0=r;
|
||
continue}
|
||
return 0}}
|
||
function map(f,param)
|
||
{if(param)
|
||
{var
|
||
h=param[5],
|
||
r=param[4],
|
||
d=param[3],
|
||
v=param[2],
|
||
l=param[1],
|
||
l$0=map(f,l),
|
||
d$0=caml_call1(f,d),
|
||
r$0=map(f,r);
|
||
return [0,l$0,v,d$0,r$0,h]}
|
||
return 0}
|
||
function mapi(f,param)
|
||
{if(param)
|
||
{var
|
||
h=param[5],
|
||
r=param[4],
|
||
d=param[3],
|
||
v=param[2],
|
||
l=param[1],
|
||
l$0=mapi(f,l),
|
||
d$0=caml_call2(f,v,d),
|
||
r$0=mapi(f,r);
|
||
return [0,l$0,v,d$0,r$0,h]}
|
||
return 0}
|
||
function fold(f,m,accu)
|
||
{var m$0=m,accu$0=accu;
|
||
for(;;)
|
||
{if(m$0)
|
||
{var
|
||
r=m$0[4],
|
||
d=m$0[3],
|
||
v=m$0[2],
|
||
l=m$0[1],
|
||
accu$1=caml_call3(f,v,d,fold(f,l,accu$0)),
|
||
m$0=r,
|
||
accu$0=accu$1;
|
||
continue}
|
||
return accu$0}}
|
||
function for_all(p,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[4],
|
||
d=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
_t8_=caml_call2(p,v,d);
|
||
if(_t8_)
|
||
{var _t9_=for_all(p,l);
|
||
if(_t9_){var param$0=r;continue}
|
||
var _t__=_t9_}
|
||
else
|
||
var _t__=_t8_;
|
||
return _t__}
|
||
return 1}}
|
||
function exists(p,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[4],
|
||
d=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
_t5_=caml_call2(p,v,d);
|
||
if(_t5_)
|
||
var _t6_=_t5_;
|
||
else
|
||
{var _t7_=exists(p,l);
|
||
if(! _t7_){var param$0=r;continue}
|
||
var _t6_=_t7_}
|
||
return _t6_}
|
||
return 0}}
|
||
function add_min_binding(k,x,param)
|
||
{if(param)
|
||
{var r=param[4],d=param[3],v=param[2],l=param[1];
|
||
return bal(add_min_binding(k,x,l),v,d,r)}
|
||
return singleton(k,x)}
|
||
function add_max_binding(k,x,param)
|
||
{if(param)
|
||
{var r=param[4],d=param[3],v=param[2],l=param[1];
|
||
return bal(l,v,d,add_max_binding(k,x,r))}
|
||
return singleton(k,x)}
|
||
function join(l,v,d,r)
|
||
{if(l)
|
||
{if(r)
|
||
{var
|
||
rh=r[5],
|
||
rr=r[4],
|
||
rd=r[3],
|
||
rv=r[2],
|
||
rl=r[1],
|
||
lh=l[5],
|
||
lr=l[4],
|
||
ld=l[3],
|
||
lv=l[2],
|
||
ll=l[1];
|
||
return (rh + 2 | 0) < lh
|
||
?bal(ll,lv,ld,join(lr,v,d,r))
|
||
:(lh + 2 | 0) < rh
|
||
?bal(join(l,v,d,rl),rv,rd,rr)
|
||
:create(l,v,d,r)}
|
||
return add_max_binding(v,d,l)}
|
||
return add_min_binding(v,d,r)}
|
||
function concat(t,match)
|
||
{if(t)
|
||
{if(match)
|
||
{var match$0=min_binding(match),d=match$0[2],x=match$0[1];
|
||
return join(t,x,d,remove_min_binding(match))}
|
||
return t}
|
||
return match}
|
||
function concat_or_join(t1,v,d,t2)
|
||
{if(d){var d$0=d[1];return join(t1,v,d$0,t2)}return concat(t1,t2)}
|
||
function split(x,param)
|
||
{if(param)
|
||
{var
|
||
r=param[4],
|
||
d=param[3],
|
||
v=param[2],
|
||
l=param[1],
|
||
c=caml_call2(Ord[1],x,v);
|
||
if(0 === c)return [0,l,[0,d],r];
|
||
if(0 <= c)
|
||
{var match=split(x,r),rr=match[3],pres=match[2],lr=match[1];
|
||
return [0,join(l,v,d,lr),pres,rr]}
|
||
var
|
||
match$0=split(x,l),
|
||
rl=match$0[3],
|
||
pres$0=match$0[2],
|
||
ll=match$0[1];
|
||
return [0,ll,pres$0,join(rl,v,d,r)]}
|
||
return _J_}
|
||
function merge(f,s1,s2)
|
||
{if(s1)
|
||
{var h1=s1[5],r1=s1[4],d1=s1[3],v1=s1[2],l1=s1[1];
|
||
if(height(s2) <= h1)
|
||
{var
|
||
match=split(v1,s2),
|
||
r2=match[3],
|
||
d2=match[2],
|
||
l2=match[1],
|
||
_t1_=merge(f,r1,r2),
|
||
_t2_=caml_call3(f,v1,[0,d1],d2);
|
||
return concat_or_join(merge(f,l1,l2),v1,_t2_,_t1_)}}
|
||
else
|
||
if(! s2)return 0;
|
||
if(s2)
|
||
{var
|
||
r2$0=s2[4],
|
||
d2$0=s2[3],
|
||
v2=s2[2],
|
||
l2$0=s2[1],
|
||
match$0=split(v2,s1),
|
||
r1$0=match$0[3],
|
||
d1$0=match$0[2],
|
||
l1$0=match$0[1],
|
||
_t3_=merge(f,r1$0,r2$0),
|
||
_t4_=caml_call3(f,v2,d1$0,[0,d2$0]);
|
||
return concat_or_join(merge(f,l1$0,l2$0),v2,_t4_,_t3_)}
|
||
throw [0,Assert_failure,_K_]}
|
||
function union(f,s1,s2)
|
||
{if(s1)
|
||
{if(s2)
|
||
{var
|
||
h2=s2[5],
|
||
r2=s2[4],
|
||
d2=s2[3],
|
||
v2=s2[2],
|
||
l2=s2[1],
|
||
h1=s1[5],
|
||
r1=s1[4],
|
||
d1=s1[3],
|
||
v1=s1[2],
|
||
l1=s1[1];
|
||
if(h2 <= h1)
|
||
{var
|
||
match=split(v1,s2),
|
||
r2$0=match[3],
|
||
d2$0=match[2],
|
||
l2$0=match[1],
|
||
l=union(f,l1,l2$0),
|
||
r=union(f,r1,r2$0);
|
||
if(d2$0)
|
||
{var d2$1=d2$0[1];
|
||
return concat_or_join(l,v1,caml_call3(f,v1,d1,d2$1),r)}
|
||
return join(l,v1,d1,r)}
|
||
var
|
||
match$0=split(v2,s1),
|
||
r1$0=match$0[3],
|
||
d1$0=match$0[2],
|
||
l1$0=match$0[1],
|
||
l$0=union(f,l1$0,l2),
|
||
r$0=union(f,r1$0,r2);
|
||
if(d1$0)
|
||
{var d1$1=d1$0[1];
|
||
return concat_or_join(l$0,v2,caml_call3(f,v2,d1$1,d2),r$0)}
|
||
return join(l$0,v2,d2,r$0)}
|
||
var s=s1}
|
||
else
|
||
var s=s2;
|
||
return s}
|
||
function filter(p,m)
|
||
{if(m)
|
||
{var
|
||
r=m[4],
|
||
d=m[3],
|
||
v=m[2],
|
||
l=m[1],
|
||
l$0=filter(p,l),
|
||
pvd=caml_call2(p,v,d),
|
||
r$0=filter(p,r);
|
||
if(pvd)
|
||
{if(l === l$0 && r === r$0)return m;return join(l$0,v,d,r$0)}
|
||
return concat(l$0,r$0)}
|
||
return 0}
|
||
function partition(p,param)
|
||
{if(param)
|
||
{var
|
||
r=param[4],
|
||
d=param[3],
|
||
v=param[2],
|
||
l=param[1],
|
||
match=partition(p,l),
|
||
lf=match[2],
|
||
lt=match[1],
|
||
pvd=caml_call2(p,v,d),
|
||
match$0=partition(p,r),
|
||
rf=match$0[2],
|
||
rt=match$0[1];
|
||
if(pvd){var _tZ_=concat(lf,rf);return [0,join(lt,v,d,rt),_tZ_]}
|
||
var _t0_=join(lf,v,d,rf);
|
||
return [0,concat(lt,rt),_t0_]}
|
||
return _L_}
|
||
function cons_enum(m,e)
|
||
{var m$0=m,e$0=e;
|
||
for(;;)
|
||
{if(m$0)
|
||
{var
|
||
r=m$0[4],
|
||
d=m$0[3],
|
||
v=m$0[2],
|
||
m$1=m$0[1],
|
||
e$1=[0,v,d,r,e$0],
|
||
m$0=m$1,
|
||
e$0=e$1;
|
||
continue}
|
||
return e$0}}
|
||
function compare(cmp,m1,m2)
|
||
{var e2$2=cons_enum(m2,0),e1$2=cons_enum(m1,0),e1=e1$2,e2=e2$2;
|
||
for(;;)
|
||
{if(e1)
|
||
{if(e2)
|
||
{var
|
||
e2$0=e2[4],
|
||
r2=e2[3],
|
||
d2=e2[2],
|
||
v2=e2[1],
|
||
e1$0=e1[4],
|
||
r1=e1[3],
|
||
d1=e1[2],
|
||
v1=e1[1],
|
||
c=caml_call2(Ord[1],v1,v2);
|
||
if(0 === c)
|
||
{var c$0=caml_call2(cmp,d1,d2);
|
||
if(0 === c$0)
|
||
{var
|
||
e2$1=cons_enum(r2,e2$0),
|
||
e1$1=cons_enum(r1,e1$0),
|
||
e1=e1$1,
|
||
e2=e2$1;
|
||
continue}
|
||
return c$0}
|
||
return c}
|
||
return 1}
|
||
return e2?-1:0}}
|
||
function equal(cmp,m1,m2)
|
||
{var e2$2=cons_enum(m2,0),e1$2=cons_enum(m1,0),e1=e1$2,e2=e2$2;
|
||
for(;;)
|
||
{if(e1)
|
||
{if(e2)
|
||
{var
|
||
e2$0=e2[4],
|
||
r2=e2[3],
|
||
d2=e2[2],
|
||
v2=e2[1],
|
||
e1$0=e1[4],
|
||
r1=e1[3],
|
||
d1=e1[2],
|
||
v1=e1[1],
|
||
_tW_=0 === caml_call2(Ord[1],v1,v2)?1:0;
|
||
if(_tW_)
|
||
{var _tX_=caml_call2(cmp,d1,d2);
|
||
if(_tX_)
|
||
{var
|
||
e2$1=cons_enum(r2,e2$0),
|
||
e1$1=cons_enum(r1,e1$0),
|
||
e1=e1$1,
|
||
e2=e2$1;
|
||
continue}
|
||
var _tY_=_tX_}
|
||
else
|
||
var _tY_=_tW_;
|
||
return _tY_}
|
||
return 0}
|
||
return e2?0:1}}
|
||
function cardinal(param)
|
||
{if(param)
|
||
{var r=param[4],l=param[1],_tV_=cardinal(r);
|
||
return (cardinal(l) + 1 | 0) + _tV_ | 0}
|
||
return 0}
|
||
function bindings_aux(accu,param)
|
||
{var accu$0=accu,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
r=param$0[4],
|
||
d=param$0[3],
|
||
v=param$0[2],
|
||
l=param$0[1],
|
||
accu$1=[0,[0,v,d],bindings_aux(accu$0,r)],
|
||
accu$0=accu$1,
|
||
param$0=l;
|
||
continue}
|
||
return accu$0}}
|
||
function bindings(s){return bindings_aux(0,s)}
|
||
function add_seq(i,m)
|
||
{return fold_left
|
||
(function(m,param)
|
||
{var v=param[2],k=param[1];return add(k,v,m)},
|
||
m,
|
||
i)}
|
||
function of_seq(i){return add_seq(i,empty)}
|
||
function seq_of_enum(c,param)
|
||
{if(c)
|
||
{var rest=c[4],t=c[3],v=c[2],k=c[1],_tT_=cons_enum(t,rest);
|
||
return [0,[0,k,v],function(_tU_){return seq_of_enum(_tT_,_tU_)}]}
|
||
return 0}
|
||
function to_seq(m)
|
||
{var _tR_=cons_enum(m,0);
|
||
return function(_tS_){return seq_of_enum(_tR_,_tS_)}}
|
||
function to_seq_from(low,m)
|
||
{var m$0=m,c=0;
|
||
for(;;)
|
||
{if(m$0)
|
||
{var
|
||
r=m$0[4],
|
||
d=m$0[3],
|
||
v=m$0[2],
|
||
l=m$0[1],
|
||
n=caml_call2(Ord[1],v,low);
|
||
if(0 !== n)
|
||
{if(0 <= n){var c$0=[0,v,d,r,c],m$0=l,c=c$0;continue}
|
||
var m$0=r;
|
||
continue}
|
||
var _tP_=[0,v,d,r,c]}
|
||
else
|
||
var _tP_=c;
|
||
return function(_tQ_){return seq_of_enum(_tP_,_tQ_)}}}
|
||
return [0,
|
||
empty,
|
||
is_empty,
|
||
mem,
|
||
add,
|
||
update,
|
||
singleton,
|
||
remove,
|
||
merge,
|
||
union,
|
||
compare,
|
||
equal,
|
||
iter,
|
||
fold,
|
||
for_all,
|
||
exists,
|
||
filter,
|
||
partition,
|
||
cardinal,
|
||
bindings,
|
||
min_binding,
|
||
min_binding_opt,
|
||
max_binding,
|
||
max_binding_opt,
|
||
min_binding,
|
||
min_binding_opt,
|
||
split,
|
||
find,
|
||
find_opt,
|
||
find_first,
|
||
find_first_opt,
|
||
find_last,
|
||
find_last_opt,
|
||
map,
|
||
mapi,
|
||
to_seq,
|
||
to_seq_from,
|
||
add_seq,
|
||
of_seq]}];
|
||
caml_register_global(771,Stdlib_map,"Stdlib__map");
|
||
var Empty=[248,cst_Stdlib_Stack_Empty,caml_fresh_oo_id(0)];
|
||
function create$0(param){return [0,0,0]}
|
||
function clear(s){s[1] = 0;s[2] = 0;return 0}
|
||
function copy$3(s){return [0,s[1],s[2]]}
|
||
function push(x,s){s[1] = [0,x,s[1]];s[2] = s[2] + 1 | 0;return 0}
|
||
function pop(s)
|
||
{var _tN_=s[1];
|
||
if(_tN_)
|
||
{var tl=_tN_[2],hd=_tN_[1];s[1] = tl;s[2] = s[2] - 1 | 0;return hd}
|
||
throw Empty}
|
||
function pop_opt(s)
|
||
{var _tM_=s[1];
|
||
if(_tM_)
|
||
{var tl=_tM_[2],hd=_tM_[1];s[1] = tl;s[2] = s[2] - 1 | 0;return [0,hd]}
|
||
return 0}
|
||
function top(s)
|
||
{var _tL_=s[1];if(_tL_){var hd=_tL_[1];return hd}throw Empty}
|
||
function top_opt(s)
|
||
{var _tK_=s[1];if(_tK_){var hd=_tK_[1];return [0,hd]}return 0}
|
||
function is_empty(s){return 0 === s[1]?1:0}
|
||
function length$1(s){return s[2]}
|
||
function iter$7(f,s){return iter$2(f,s[1])}
|
||
function fold$1(f,acc,s){return fold_left$0(f,acc,s[1])}
|
||
function to_seq$6(s){return to_seq$1(s[1])}
|
||
function add_seq(q,i){return iter(function(x){return push(x,q)},i)}
|
||
function of_seq$4(g){var s=create$0(0);add_seq(s,g);return s}
|
||
var
|
||
Stdlib_stack=
|
||
[0,
|
||
Empty,
|
||
create$0,
|
||
push,
|
||
pop,
|
||
pop_opt,
|
||
top,
|
||
top_opt,
|
||
clear,
|
||
copy$3,
|
||
is_empty,
|
||
length$1,
|
||
iter$7,
|
||
fold$1,
|
||
to_seq$6,
|
||
add_seq,
|
||
of_seq$4];
|
||
caml_register_global(772,Stdlib_stack,"Stdlib__stack");
|
||
var Empty$0=[248,cst_Stdlib_Queue_Empty,caml_fresh_oo_id(0)];
|
||
function create$1(param){return [0,0,0,0]}
|
||
function clear$0(q){q[1] = 0;q[2] = 0;q[3] = 0;return 0}
|
||
function add(x,q)
|
||
{var cell=[0,x,0],_tJ_=q[3];
|
||
return _tJ_
|
||
?(q[1] = q[1] + 1 | 0,_tJ_[2] = cell,q[3] = cell,0)
|
||
:(q[1] = 1,q[2] = cell,q[3] = cell,0)}
|
||
function peek(q)
|
||
{var _tI_=q[2];if(_tI_){var content=_tI_[1];return content}throw Empty$0}
|
||
function peek_opt(q)
|
||
{var _tH_=q[2];if(_tH_){var content=_tH_[1];return [0,content]}return 0}
|
||
function take(q)
|
||
{var _tF_=q[2];
|
||
if(_tF_)
|
||
{var _tG_=_tF_[1];
|
||
if(_tF_[2])
|
||
{var next=_tF_[2];q[1] = q[1] - 1 | 0;q[2] = next;return _tG_}
|
||
clear$0(q);
|
||
return _tG_}
|
||
throw Empty$0}
|
||
function take_opt(q)
|
||
{var _tD_=q[2];
|
||
if(_tD_)
|
||
{var _tE_=_tD_[1];
|
||
if(_tD_[2])
|
||
{var next=_tD_[2];q[1] = q[1] - 1 | 0;q[2] = next;return [0,_tE_]}
|
||
clear$0(q);
|
||
return [0,_tE_]}
|
||
return 0}
|
||
function copy$4(q)
|
||
{var q_res=[0,q[1],0,0],prev=0,cell=q[2];
|
||
for(;;)
|
||
{if(cell)
|
||
{var content=cell[1],next=cell[2],res=[0,content,0];
|
||
if(prev)prev[2] = res;else q_res[2] = res;
|
||
var prev=res,cell=next;
|
||
continue}
|
||
q_res[3] = prev;
|
||
return q_res}}
|
||
function is_empty$0(q){return 0 === q[1]?1:0}
|
||
function length$2(q){return q[1]}
|
||
function iter$8(f,q)
|
||
{var cell=q[2];
|
||
for(;;)
|
||
{if(cell)
|
||
{var content=cell[1],next=cell[2];
|
||
caml_call1(f,content);
|
||
var cell=next;
|
||
continue}
|
||
return 0}}
|
||
function fold$2(f,accu$1,q)
|
||
{var accu=accu$1,cell=q[2];
|
||
for(;;)
|
||
{if(cell)
|
||
{var
|
||
content=cell[1],
|
||
next=cell[2],
|
||
accu$0=caml_call2(f,accu,content),
|
||
accu=accu$0,
|
||
cell=next;
|
||
continue}
|
||
return accu}}
|
||
function transfer(q1,q2)
|
||
{var _tB_=0 < q1[1]?1:0;
|
||
if(_tB_)
|
||
{var _tC_=q2[3];
|
||
return _tC_
|
||
?(q2[1]
|
||
=
|
||
q2[1]
|
||
+
|
||
q1[1]
|
||
|
|
||
0,
|
||
_tC_[2]
|
||
=
|
||
q1[2],
|
||
q2[3]
|
||
=
|
||
q1[3],
|
||
clear$0(q1))
|
||
:(q2[1] = q1[1],q2[2] = q1[2],q2[3] = q1[3],clear$0(q1))}
|
||
return _tB_}
|
||
function to_seq$7(q)
|
||
{function aux(c,param)
|
||
{if(c)
|
||
{var x=c[1],next=c[2];
|
||
return [0,x,function(_tA_){return aux(next,_tA_)}]}
|
||
return 0}
|
||
var _ty_=q[2];
|
||
return function(_tz_){return aux(_ty_,_tz_)}}
|
||
function add_seq$0(q,i){return iter(function(x){return add(x,q)},i)}
|
||
function of_seq$5(g){var q=create$1(0);add_seq$0(q,g);return q}
|
||
var
|
||
Stdlib_queue=
|
||
[0,
|
||
Empty$0,
|
||
create$1,
|
||
add,
|
||
add,
|
||
take,
|
||
take_opt,
|
||
take,
|
||
peek,
|
||
peek_opt,
|
||
peek,
|
||
clear$0,
|
||
copy$4,
|
||
is_empty$0,
|
||
length$2,
|
||
iter$8,
|
||
fold$2,
|
||
transfer,
|
||
to_seq$7,
|
||
add_seq$0,
|
||
of_seq$5];
|
||
caml_register_global(773,Stdlib_queue,"Stdlib__queue");
|
||
var Undefined=[248,cst_CamlinternalLazy_Undefined,caml_fresh_oo_id(0)];
|
||
function raise_undefined(param){throw Undefined}
|
||
function force_lazy_block(blk)
|
||
{var closure=blk[1];
|
||
blk[1] = raise_undefined;
|
||
try
|
||
{var result=caml_call1(closure,0);
|
||
caml_obj_make_forward(blk,result);
|
||
return result}
|
||
catch(e)
|
||
{e = caml_wrap_exception(e);blk[1] = function(param){throw e};throw e}}
|
||
function force_val_lazy_block(blk)
|
||
{var closure=blk[1];
|
||
blk[1] = raise_undefined;
|
||
var result=caml_call1(closure,0);
|
||
caml_obj_make_forward(blk,result);
|
||
return result}
|
||
function force(lzv)
|
||
{var t=caml_obj_tag(lzv);
|
||
return t === 250?lzv[1]:t !== 246?lzv:force_lazy_block(lzv)}
|
||
function force_val(lzv)
|
||
{var t=caml_obj_tag(lzv);
|
||
return t === 250?lzv[1]:t !== 246?lzv:force_val_lazy_block(lzv)}
|
||
var
|
||
CamlinternalLazy=
|
||
[0,Undefined,force_lazy_block,force_val_lazy_block,force,force_val];
|
||
caml_register_global(774,CamlinternalLazy,"CamlinternalLazy");
|
||
function from_fun(f){var x=caml_obj_block(246,1);x[1] = f;return x}
|
||
function from_val(v)
|
||
{var t=caml_obj_tag(v);
|
||
if(t !== 250 && t !== 246 && t !== 253)return v;
|
||
return runtime.caml_lazy_make_forward(v)}
|
||
function is_val(l){return caml_obj_tag(l) !== 246?1:0}
|
||
var
|
||
Stdlib_lazy=
|
||
[0,
|
||
Undefined,
|
||
force_val,
|
||
from_fun,
|
||
from_val,
|
||
is_val,
|
||
from_fun,
|
||
from_val,
|
||
is_val];
|
||
caml_register_global(775,Stdlib_lazy,"Stdlib__lazy");
|
||
var
|
||
Failure$0=[248,cst_Stdlib_Stream_Failure,caml_fresh_oo_id(0)],
|
||
Error=[248,cst_Stdlib_Stream_Error,caml_fresh_oo_id(0)];
|
||
function count(param)
|
||
{if(param){var match=param[1],count=match[1];return count}return 0}
|
||
function data(param)
|
||
{if(param){var match=param[1],data=match[2];return data}return 0}
|
||
function fill_buff(b)
|
||
{b[3] = input(b[1],b[2],0,caml_ml_bytes_length(b[2]));b[4] = 0;return 0}
|
||
function get_data(count,d)
|
||
{var d$0=d;
|
||
for(;;)
|
||
{if(typeof d$0 !== "number")
|
||
switch(d$0[0])
|
||
{case 1:
|
||
var d2=d$0[2],d1=d$0[1],match=get_data(count,d1);
|
||
if(typeof match === "number")
|
||
{var d$0=d2;continue}
|
||
else
|
||
{if(0 === match[0])
|
||
{var d11=match[2],a=match[1];return [0,a,[1,d11,d2]]}
|
||
throw [0,Assert_failure,_M_]}
|
||
case 2:
|
||
var
|
||
f=d$0[1],
|
||
_tu_=caml_obj_tag(f),
|
||
d$1=250 === _tu_?f[1]:246 === _tu_?force_lazy_block(f):f,
|
||
d$0=d$1;
|
||
continue;
|
||
case 3:
|
||
var _tv_=d$0[1],_tw_=_tv_[1];
|
||
if(_tw_)
|
||
{var _tx_=_tw_[1];
|
||
if(_tx_){var a$0=_tx_[1];_tv_[1] = 0;return [0,a$0,d$0]}
|
||
return 0}
|
||
var match$0=caml_call1(_tv_[2],count);
|
||
if(match$0){var a$1=match$0[1];return [0,a$1,d$0]}
|
||
_tv_[1] = _N_;
|
||
return 0;
|
||
case 4:
|
||
var b=d$0[1];
|
||
if(b[3] <= b[4])fill_buff(b);
|
||
if(0 === b[3])return 0;
|
||
var r=caml_bytes_unsafe_get(b[2],b[4]);
|
||
b[4] = b[4] + 1 | 0;
|
||
return [0,r,d$0]
|
||
}
|
||
return d$0}}
|
||
function peek_data(s)
|
||
{for(;;)
|
||
{var _tp_=s[2];
|
||
if(typeof _tp_ === "number")
|
||
return 0;
|
||
else
|
||
switch(_tp_[0])
|
||
{case 0:var a=_tp_[1];return [0,a];
|
||
case 1:
|
||
var d=get_data(s[1],s[2]);
|
||
if(typeof d === "number")
|
||
return 0;
|
||
else
|
||
{if(0 === d[0]){var a$0=d[1];s[2] = d;return [0,a$0]}
|
||
throw [0,Assert_failure,_O_]}
|
||
case 2:
|
||
var
|
||
f=_tp_[1],
|
||
_tq_=caml_obj_tag(f),
|
||
_tr_=250 === _tq_?f[1]:246 === _tq_?force_lazy_block(f):f;
|
||
s[2] = _tr_;
|
||
continue;
|
||
case 3:
|
||
var _ts_=_tp_[1],_tt_=_ts_[1];
|
||
if(_tt_){var a$1=_tt_[1];return a$1}
|
||
var x=caml_call1(_ts_[2],s[1]);
|
||
_ts_[1] = [0,x];
|
||
return x;
|
||
default:
|
||
var b=_tp_[1];
|
||
if(b[3] <= b[4])fill_buff(b);
|
||
return 0 === b[3]
|
||
?(s[2] = 0,0)
|
||
:[0,caml_bytes_unsafe_get(b[2],b[4])]}}}
|
||
function peek$0(param)
|
||
{if(param){var s=param[1];return peek_data(s)}return 0}
|
||
function junk_data(s)
|
||
{for(;;)
|
||
{var _tn_=s[2];
|
||
if(typeof _tn_ !== "number")
|
||
switch(_tn_[0])
|
||
{case 0:var d=_tn_[2];s[1] = s[1] + 1 | 0;s[2] = d;return 0;
|
||
case 3:
|
||
var _to_=_tn_[1];
|
||
if(_to_[1]){s[1] = s[1] + 1 | 0;_to_[1] = 0;return 0}
|
||
break;
|
||
case 4:
|
||
var b=_tn_[1];
|
||
if(b[3] <= b[4])fill_buff(b);
|
||
return 0 === b[3]
|
||
?(s[2] = 0,0)
|
||
:(s[1] = s[1] + 1 | 0,b[4] = b[4] + 1 | 0,0)
|
||
}
|
||
var match=peek_data(s);
|
||
if(match)continue;
|
||
return 0}}
|
||
function junk(param)
|
||
{if(param){var data=param[1];return junk_data(data)}return 0}
|
||
function nget_data(n,s)
|
||
{if(0 < n)
|
||
{var match=peek_data(s);
|
||
if(match)
|
||
{var a=match[1];
|
||
junk_data(s);
|
||
var
|
||
match$0=nget_data(n - 1 | 0,s),
|
||
k=match$0[3],
|
||
d=match$0[2],
|
||
al=match$0[1];
|
||
return [0,[0,a,al],[0,a,d],k + 1 | 0]}
|
||
return [0,0,s[2],0]}
|
||
return [0,0,s[2],0]}
|
||
function npeek(n,param)
|
||
{if(param)
|
||
{var
|
||
d$0=param[1],
|
||
match=nget_data(n,d$0),
|
||
len=match[3],
|
||
d=match[2],
|
||
al=match[1];
|
||
d$0[1] = d$0[1] - len | 0;
|
||
d$0[2] = d;
|
||
return al}
|
||
return 0}
|
||
function next(s)
|
||
{var match=peek$0(s);
|
||
if(match){var a=match[1];junk(s);return a}
|
||
throw Failure$0}
|
||
function empty$1(s){var match=peek$0(s);if(match)throw Failure$0;return 0}
|
||
function iter$9(f,strm)
|
||
{for(;;)
|
||
{var match=peek$0(strm);
|
||
if(match){var a=match[1];junk(strm);caml_call1(f,a);continue}
|
||
return 0}}
|
||
function from(f){return [0,[0,0,[3,[0,0,f]]]]}
|
||
function of_list$1(l)
|
||
{var _tm_=0;
|
||
return [0,[0,0,fold_right(function(x,l){return [0,x,l]},l,_tm_)]]}
|
||
function of_string$0(s)
|
||
{var count=[0,0];
|
||
return from
|
||
(function(param)
|
||
{var c=count[1];
|
||
return c < caml_ml_string_length(s)
|
||
?(count[1]++,[0,caml_string_get(s,c)])
|
||
:0})}
|
||
function of_bytes(s)
|
||
{var count=[0,0];
|
||
return from
|
||
(function(param)
|
||
{var c=count[1];
|
||
return c < caml_ml_bytes_length(s)
|
||
?(count[1]++,[0,caml_bytes_get(s,c)])
|
||
:0})}
|
||
function of_channel(ic)
|
||
{return [0,[0,0,[4,[0,ic,caml_create_bytes(4096),0,0]]]]}
|
||
function iapp(i,s){var _tl_=data(s);return [0,[0,0,[1,data(i),_tl_]]]}
|
||
function icons(i,s){return [0,[0,0,[0,i,data(s)]]]}
|
||
function ising(i){return [0,[0,0,[0,i,0]]]}
|
||
function lapp(f,s)
|
||
{return [0,
|
||
[0,
|
||
0,
|
||
[2,
|
||
[246,
|
||
function(_tj_)
|
||
{var _tk_=data(s);return [1,data(caml_call1(f,0)),_tk_]}]]]]}
|
||
function lcons(f,s)
|
||
{return [0,
|
||
[0,
|
||
0,
|
||
[2,
|
||
[246,
|
||
function(_th_)
|
||
{var _ti_=data(s);return [0,caml_call1(f,0),_ti_]}]]]]}
|
||
function lsing(f)
|
||
{return [0,[0,0,[2,[246,function(_tg_){return [0,caml_call1(f,0),0]}]]]]}
|
||
var sempty=0;
|
||
function slazy(f)
|
||
{return [0,[0,0,[2,[246,function(_tf_){return data(caml_call1(f,0))}]]]]}
|
||
function dump(f,s)
|
||
{print_string(cst_count);
|
||
print_int(count(s));
|
||
print_string(cst_data);
|
||
dump_data(f,data(s));
|
||
print_string(cst$6);
|
||
return print_newline(0)}
|
||
function dump_data(f,param)
|
||
{if(typeof param === "number")
|
||
return print_string(cst_Sempty);
|
||
else
|
||
switch(param[0])
|
||
{case 0:
|
||
var d=param[2],a=param[1];
|
||
print_string(cst_Scons);
|
||
caml_call1(f,a);
|
||
print_string(cst$7);
|
||
dump_data(f,d);
|
||
return print_string(cst$8);
|
||
case 1:
|
||
var d2=param[2],d1=param[1];
|
||
print_string(cst_Sapp);
|
||
dump_data(f,d1);
|
||
print_string(cst$9);
|
||
dump_data(f,d2);
|
||
return print_string(cst$10);
|
||
case 2:return print_string(cst_Slazy);
|
||
case 3:return print_string(cst_Sgen);
|
||
default:return print_string(cst_Sbuffio)}}
|
||
var
|
||
Stdlib_stream=
|
||
[0,
|
||
Failure$0,
|
||
Error,
|
||
from,
|
||
of_list$1,
|
||
of_string$0,
|
||
of_bytes,
|
||
of_channel,
|
||
iter$9,
|
||
next,
|
||
empty$1,
|
||
peek$0,
|
||
junk,
|
||
count,
|
||
npeek,
|
||
iapp,
|
||
icons,
|
||
ising,
|
||
lapp,
|
||
lcons,
|
||
lsing,
|
||
sempty,
|
||
slazy,
|
||
dump];
|
||
caml_register_global(776,Stdlib_stream,"Stdlib__stream");
|
||
function create$2(n)
|
||
{var
|
||
n$0=1 <= n?n:1,
|
||
n$1=max_string_length < n$0?max_string_length:n$0,
|
||
s=caml_create_bytes(n$1);
|
||
return [0,s,0,n$1,s]}
|
||
function contents(b){return sub_string(b[1],0,b[2])}
|
||
function to_bytes(b){return sub(b[1],0,b[2])}
|
||
function sub$3(b,ofs,len)
|
||
{if(0 <= ofs && 0 <= len && ! ((b[2] - len | 0) < ofs))
|
||
return sub_string(b[1],ofs,len);
|
||
return invalid_arg(cst_Buffer_sub)}
|
||
function blit$3(src,srcoff,dst,dstoff,len)
|
||
{if
|
||
(0
|
||
<=
|
||
len
|
||
&&
|
||
0
|
||
<=
|
||
srcoff
|
||
&&
|
||
!
|
||
((src[2] - len | 0) < srcoff)
|
||
&&
|
||
0
|
||
<=
|
||
dstoff
|
||
&&
|
||
!
|
||
((caml_ml_bytes_length(dst) - len | 0) < dstoff))
|
||
return caml_blit_bytes(src[1],srcoff,dst,dstoff,len);
|
||
return invalid_arg(cst_Buffer_blit)}
|
||
function nth$0(b,ofs)
|
||
{if(0 <= ofs && ! (b[2] <= ofs))return caml_bytes_unsafe_get(b[1],ofs);
|
||
return invalid_arg(cst_Buffer_nth)}
|
||
function length$3(b){return b[2]}
|
||
function clear$1(b){b[2] = 0;return 0}
|
||
function reset(b)
|
||
{b[2] = 0;b[1] = b[4];b[3] = caml_ml_bytes_length(b[1]);return 0}
|
||
function resize(b,more)
|
||
{var old_pos=b[2],old_len=b[3],new_len=[0,old_len];
|
||
for(;;)
|
||
{if(new_len[1] < (old_pos + more | 0))
|
||
{new_len[1] = 2 * new_len[1] | 0;continue}
|
||
if(max_string_length < new_len[1])
|
||
if((old_pos + more | 0) <= max_string_length)
|
||
new_len[1] = max_string_length;
|
||
else
|
||
failwith(cst_Buffer_add_cannot_grow_buf);
|
||
var new_buffer=caml_create_bytes(new_len[1]);
|
||
blit(b[1],0,new_buffer,0,b[2]);
|
||
b[1] = new_buffer;
|
||
b[3] = new_len[1];
|
||
if((b[2] + more | 0) <= b[3])
|
||
{if((old_pos + more | 0) <= b[3])return 0;
|
||
throw [0,Assert_failure,_P_]}
|
||
throw [0,Assert_failure,_Q_]}}
|
||
function add_char(b,c)
|
||
{var pos=b[2];
|
||
if(b[3] <= pos)resize(b,1);
|
||
caml_bytes_unsafe_set(b[1],pos,c);
|
||
b[2] = pos + 1 | 0;
|
||
return 0}
|
||
function add_utf_8_uchar(b,u)
|
||
{if(0 <= u)
|
||
{if(127 < u)
|
||
{if(2047 < u)
|
||
{if(65535 < u)
|
||
{if(1114111 < u)throw [0,Assert_failure,_R_];
|
||
var pos=b[2];
|
||
if(b[3] < (pos + 4 | 0))resize(b,4);
|
||
caml_bytes_unsafe_set(b[1],pos,240 | u >>> 18 | 0);
|
||
caml_bytes_unsafe_set
|
||
(b[1],pos + 1 | 0,128 | (u >>> 12 | 0) & 63);
|
||
caml_bytes_unsafe_set(b[1],pos + 2 | 0,128 | (u >>> 6 | 0) & 63);
|
||
caml_bytes_unsafe_set(b[1],pos + 3 | 0,128 | u & 63);
|
||
b[2] = pos + 4 | 0;
|
||
return 0}
|
||
var pos$0=b[2];
|
||
if(b[3] < (pos$0 + 3 | 0))resize(b,3);
|
||
caml_bytes_unsafe_set(b[1],pos$0,224 | u >>> 12 | 0);
|
||
caml_bytes_unsafe_set(b[1],pos$0 + 1 | 0,128 | (u >>> 6 | 0) & 63);
|
||
caml_bytes_unsafe_set(b[1],pos$0 + 2 | 0,128 | u & 63);
|
||
b[2] = pos$0 + 3 | 0;
|
||
return 0}
|
||
var pos$1=b[2];
|
||
if(b[3] < (pos$1 + 2 | 0))resize(b,2);
|
||
caml_bytes_unsafe_set(b[1],pos$1,192 | u >>> 6 | 0);
|
||
caml_bytes_unsafe_set(b[1],pos$1 + 1 | 0,128 | u & 63);
|
||
b[2] = pos$1 + 2 | 0;
|
||
return 0}
|
||
return add_char(b,u)}
|
||
throw [0,Assert_failure,_S_]}
|
||
function add_utf_16be_uchar(b,u)
|
||
{if(0 <= u)
|
||
{if(65535 < u)
|
||
{if(1114111 < u)throw [0,Assert_failure,_T_];
|
||
var
|
||
u$0=u - 65536 | 0,
|
||
hi=55296 | u$0 >>> 10 | 0,
|
||
lo=56320 | u$0 & 1023,
|
||
pos=b[2];
|
||
if(b[3] < (pos + 4 | 0))resize(b,4);
|
||
caml_bytes_unsafe_set(b[1],pos,hi >>> 8 | 0);
|
||
caml_bytes_unsafe_set(b[1],pos + 1 | 0,hi & 255);
|
||
caml_bytes_unsafe_set(b[1],pos + 2 | 0,lo >>> 8 | 0);
|
||
caml_bytes_unsafe_set(b[1],pos + 3 | 0,lo & 255);
|
||
b[2] = pos + 4 | 0;
|
||
return 0}
|
||
var pos$0=b[2];
|
||
if(b[3] < (pos$0 + 2 | 0))resize(b,2);
|
||
caml_bytes_unsafe_set(b[1],pos$0,u >>> 8 | 0);
|
||
caml_bytes_unsafe_set(b[1],pos$0 + 1 | 0,u & 255);
|
||
b[2] = pos$0 + 2 | 0;
|
||
return 0}
|
||
throw [0,Assert_failure,_U_]}
|
||
function add_utf_16le_uchar(b,u)
|
||
{if(0 <= u)
|
||
{if(65535 < u)
|
||
{if(1114111 < u)throw [0,Assert_failure,_V_];
|
||
var
|
||
u$0=u - 65536 | 0,
|
||
hi=55296 | u$0 >>> 10 | 0,
|
||
lo=56320 | u$0 & 1023,
|
||
pos=b[2];
|
||
if(b[3] < (pos + 4 | 0))resize(b,4);
|
||
caml_bytes_unsafe_set(b[1],pos,hi & 255);
|
||
caml_bytes_unsafe_set(b[1],pos + 1 | 0,hi >>> 8 | 0);
|
||
caml_bytes_unsafe_set(b[1],pos + 2 | 0,lo & 255);
|
||
caml_bytes_unsafe_set(b[1],pos + 3 | 0,lo >>> 8 | 0);
|
||
b[2] = pos + 4 | 0;
|
||
return 0}
|
||
var pos$0=b[2];
|
||
if(b[3] < (pos$0 + 2 | 0))resize(b,2);
|
||
caml_bytes_unsafe_set(b[1],pos$0,u & 255);
|
||
caml_bytes_unsafe_set(b[1],pos$0 + 1 | 0,u >>> 8 | 0);
|
||
b[2] = pos$0 + 2 | 0;
|
||
return 0}
|
||
throw [0,Assert_failure,_W_]}
|
||
function add_substring(b,s,offset,len)
|
||
{var _tc_=offset < 0?1:0;
|
||
if(_tc_)
|
||
var _td_=_tc_;
|
||
else
|
||
var
|
||
_te_=len < 0?1:0,
|
||
_td_=_te_ || ((caml_ml_string_length(s) - len | 0) < offset?1:0);
|
||
if(_td_)invalid_arg(cst_Buffer_add_substring_add_s);
|
||
var new_position=b[2] + len | 0;
|
||
if(b[3] < new_position)resize(b,len);
|
||
caml_blit_string(s,offset,b[1],b[2],len);
|
||
b[2] = new_position;
|
||
return 0}
|
||
function add_subbytes(b,s,offset,len)
|
||
{return add_substring(b,caml_string_of_bytes(s),offset,len)}
|
||
function add_string(b,s)
|
||
{var len=caml_ml_string_length(s),new_position=b[2] + len | 0;
|
||
if(b[3] < new_position)resize(b,len);
|
||
caml_blit_string(s,0,b[1],b[2],len);
|
||
b[2] = new_position;
|
||
return 0}
|
||
function add_bytes(b,s){return add_string(b,caml_string_of_bytes(s))}
|
||
function add_buffer(b,bs){return add_subbytes(b,bs[1],0,bs[2])}
|
||
function add_channel(b,ic,len)
|
||
{var _ta_=len < 0?1:0,_tb_=_ta_ || (max_string_length < len?1:0);
|
||
if(_tb_)invalid_arg(cst_Buffer_add_channel);
|
||
if(b[3] < (b[2] + len | 0))resize(b,len);
|
||
var already_read=0,ofs=b[2],to_read=len,_s$_=b[1];
|
||
for(;;)
|
||
{if(0 !== to_read)
|
||
{var r=input(ic,_s$_,ofs,to_read);
|
||
if(0 !== r)
|
||
{var
|
||
already_read$0=already_read + r | 0,
|
||
ofs$0=ofs + r | 0,
|
||
to_read$0=to_read - r | 0,
|
||
already_read=already_read$0,
|
||
ofs=ofs$0,
|
||
to_read=to_read$0;
|
||
continue}}
|
||
if((b[2] + already_read | 0) <= b[3])
|
||
{b[2] = b[2] + already_read | 0;
|
||
if(already_read < len)throw End_of_file;
|
||
return 0}
|
||
throw [0,Assert_failure,_X_]}}
|
||
function output_buffer(oc,b){return output(oc,b[1],0,b[2])}
|
||
function add_substitute(b,f,s)
|
||
{var lim$1=caml_ml_string_length(s),previous=32,i$7=0;
|
||
for(;;)
|
||
{if(i$7 < lim$1)
|
||
{var current=caml_string_get(s,i$7);
|
||
if(36 === current)
|
||
{if(92 === previous)
|
||
{add_char(b,current);
|
||
var i$8=i$7 + 1 | 0,previous=32,i$7=i$8;
|
||
continue}
|
||
var start=i$7 + 1 | 0;
|
||
if(lim$1 <= start)throw Not_found;
|
||
var opening=caml_string_get(s,start),switch$0=0;
|
||
if(40 !== opening && 123 !== opening)
|
||
{var i$6=start + 1 | 0,lim$0=caml_ml_string_length(s),i$3=i$6;
|
||
for(;;)
|
||
{if(lim$0 <= i$3)
|
||
var stop=lim$0;
|
||
else
|
||
{var match=caml_string_get(s,i$3),switch$1=0;
|
||
if(91 <= match)
|
||
{if(97 <= match)
|
||
{if(! (123 <= match))switch$1 = 1}
|
||
else
|
||
if(95 === match)switch$1 = 1}
|
||
else
|
||
if(58 <= match)
|
||
{if(65 <= match)switch$1 = 1}
|
||
else
|
||
if(48 <= match)switch$1 = 1;
|
||
if(switch$1){var i$4=i$3 + 1 | 0,i$3=i$4;continue}
|
||
var stop=i$3}
|
||
var match$0=[0,sub$0(s,start,stop - start | 0),stop];
|
||
switch$0 = 1;
|
||
break}}
|
||
if(! switch$0)
|
||
{var i$5=start + 1 | 0,k$2=0;
|
||
if(40 === opening)
|
||
var _s9_=41;
|
||
else
|
||
{if(123 !== opening)throw [0,Assert_failure,_Y_];var _s9_=125}
|
||
var lim=caml_ml_string_length(s),k=k$2,i=i$5;
|
||
for(;;)
|
||
{if(lim <= i)throw Not_found;
|
||
if(caml_string_get(s,i) === opening)
|
||
{var i$0=i + 1 | 0,k$0=k + 1 | 0,k=k$0,i=i$0;continue}
|
||
if(caml_string_get(s,i) !== _s9_)
|
||
{var i$2=i + 1 | 0,i=i$2;continue}
|
||
if(0 !== k)
|
||
{var i$1=i + 1 | 0,k$1=k - 1 | 0,k=k$1,i=i$1;continue}
|
||
var
|
||
match$0=
|
||
[0,sub$0(s,i$5,(i - start | 0) - 1 | 0),i + 1 | 0];
|
||
break}}
|
||
var next_i=match$0[2],ident=match$0[1];
|
||
add_string(b,caml_call1(f,ident));
|
||
var previous=32,i$7=next_i;
|
||
continue}
|
||
if(92 === previous)
|
||
{add_char(b,92);
|
||
add_char(b,current);
|
||
var i$9=i$7 + 1 | 0,previous=32,i$7=i$9;
|
||
continue}
|
||
if(92 === current)
|
||
{var i$10=i$7 + 1 | 0,previous=current,i$7=i$10;continue}
|
||
add_char(b,current);
|
||
var i$11=i$7 + 1 | 0,previous=current,i$7=i$11;
|
||
continue}
|
||
var _s__=92 === previous?1:0;
|
||
return _s__?add_char(b,previous):_s__}}
|
||
function truncate(b,len)
|
||
{if(0 <= len && ! (b[2] < len)){b[2] = len;return 0}
|
||
return invalid_arg(cst_Buffer_truncate)}
|
||
function to_seq$8(b)
|
||
{function aux(i,param)
|
||
{if(b[2] <= i)return 0;
|
||
var x=caml_bytes_unsafe_get(b[1],i),_s7_=i + 1 | 0;
|
||
return [0,x,function(_s8_){return aux(_s7_,_s8_)}]}
|
||
var _s5_=0;
|
||
return function(_s6_){return aux(_s5_,_s6_)}}
|
||
function to_seqi$3(b)
|
||
{function aux(i,param)
|
||
{if(b[2] <= i)return 0;
|
||
var x=caml_bytes_unsafe_get(b[1],i),_s3_=i + 1 | 0;
|
||
return [0,[0,i,x],function(_s4_){return aux(_s3_,_s4_)}]}
|
||
var _s1_=0;
|
||
return function(_s2_){return aux(_s1_,_s2_)}}
|
||
function add_seq$1(b,seq)
|
||
{return iter(function(_s0_){return add_char(b,_s0_)},seq)}
|
||
function of_seq$6(i){var b=create$2(32);add_seq$1(b,i);return b}
|
||
function add_int8(b,x)
|
||
{var new_position=b[2] + 1 | 0;
|
||
if(b[3] < new_position)resize(b,1);
|
||
caml_bytes_unsafe_set(b[1],b[2],x);
|
||
b[2] = new_position;
|
||
return 0}
|
||
function add_int16_ne(b,x)
|
||
{var new_position=b[2] + 2 | 0;
|
||
if(b[3] < new_position)resize(b,2);
|
||
caml_bytes_set16(b[1],b[2],x);
|
||
b[2] = new_position;
|
||
return 0}
|
||
function add_int32_ne(b,x)
|
||
{var new_position=b[2] + 4 | 0;
|
||
if(b[3] < new_position)resize(b,4);
|
||
caml_bytes_set32(b[1],b[2],x);
|
||
b[2] = new_position;
|
||
return 0}
|
||
function add_int64_ne(b,x)
|
||
{var new_position=b[2] + 8 | 0;
|
||
if(b[3] < new_position)resize(b,8);
|
||
caml_bytes_set64(b[1],b[2],x);
|
||
b[2] = new_position;
|
||
return 0}
|
||
function add_int16_le(b,x){return add_int16_ne(b,x)}
|
||
function add_int16_be(b,x)
|
||
{var x$0=caml_bswap16(x);return add_int16_ne(b,x$0)}
|
||
function add_int32_le(b,x){return add_int32_ne(b,x)}
|
||
function add_int32_be(b,x)
|
||
{var x$0=caml_int32_bswap(x);return add_int32_ne(b,x$0)}
|
||
function add_int64_le(b,x){return add_int64_ne(b,x)}
|
||
function add_int64_be(b,x)
|
||
{var x$0=caml_int64_bswap(x);return add_int64_ne(b,x$0)}
|
||
var
|
||
Stdlib_buffer=
|
||
[0,
|
||
create$2,
|
||
contents,
|
||
to_bytes,
|
||
sub$3,
|
||
blit$3,
|
||
nth$0,
|
||
length$3,
|
||
clear$1,
|
||
reset,
|
||
add_char,
|
||
add_utf_8_uchar,
|
||
add_utf_16le_uchar,
|
||
add_utf_16be_uchar,
|
||
add_string,
|
||
add_bytes,
|
||
add_substring,
|
||
add_subbytes,
|
||
add_substitute,
|
||
add_buffer,
|
||
add_channel,
|
||
output_buffer,
|
||
truncate,
|
||
to_seq$8,
|
||
to_seqi$3,
|
||
add_seq$1,
|
||
of_seq$6,
|
||
add_int8,
|
||
add_int8,
|
||
add_int16_ne,
|
||
add_int16_be,
|
||
add_int16_le,
|
||
add_int16_ne,
|
||
add_int16_be,
|
||
add_int16_le,
|
||
add_int32_ne,
|
||
add_int32_be,
|
||
add_int32_le,
|
||
add_int64_ne,
|
||
add_int64_be,
|
||
add_int64_le];
|
||
caml_register_global(777,Stdlib_buffer,"Stdlib__buffer");
|
||
function create_char_set(param){return make(32,0)}
|
||
function add_in_char_set(char_set,c)
|
||
{var str_ind=c >>> 3 | 0,mask=1 << (c & 7);
|
||
return caml_bytes_set
|
||
(char_set,
|
||
str_ind,
|
||
char_of_int(caml_bytes_get(char_set,str_ind) | mask))}
|
||
function freeze_char_set(char_set){return to_string$1(char_set)}
|
||
function rev_char_set(char_set)
|
||
{var char_set$0=create_char_set(0),i=0;
|
||
for(;;)
|
||
{caml_bytes_set
|
||
(char_set$0,i,char_of_int(caml_string_get(char_set,i) ^ 255));
|
||
var _sZ_=i + 1 | 0;
|
||
if(31 !== i){var i=_sZ_;continue}
|
||
return caml_string_of_bytes(char_set$0)}}
|
||
function is_in_char_set(char_set,c)
|
||
{var str_ind=c >>> 3 | 0,mask=1 << (c & 7);
|
||
return 0 !== (caml_string_get(char_set,str_ind) & mask)?1:0}
|
||
function pad_of_pad_opt(pad_opt)
|
||
{if(pad_opt){var width=pad_opt[1];return [0,1,width]}return 0}
|
||
function param_format_of_ignored_format(ign,fmt)
|
||
{if(typeof ign === "number")
|
||
switch(ign)
|
||
{case 0:return [0,[0,fmt]];
|
||
case 1:return [0,[1,fmt]];
|
||
case 2:return [0,[19,fmt]];
|
||
default:return [0,[22,fmt]]}
|
||
else
|
||
switch(ign[0])
|
||
{case 0:var pad_opt=ign[1];return [0,[2,pad_of_pad_opt(pad_opt),fmt]];
|
||
case 1:
|
||
var pad_opt$0=ign[1];return [0,[3,pad_of_pad_opt(pad_opt$0),fmt]];
|
||
case 2:
|
||
var pad_opt$1=ign[2],iconv=ign[1];
|
||
return [0,[4,iconv,pad_of_pad_opt(pad_opt$1),0,fmt]];
|
||
case 3:
|
||
var pad_opt$2=ign[2],iconv$0=ign[1];
|
||
return [0,[5,iconv$0,pad_of_pad_opt(pad_opt$2),0,fmt]];
|
||
case 4:
|
||
var pad_opt$3=ign[2],iconv$1=ign[1];
|
||
return [0,[6,iconv$1,pad_of_pad_opt(pad_opt$3),0,fmt]];
|
||
case 5:
|
||
var pad_opt$4=ign[2],iconv$2=ign[1];
|
||
return [0,[7,iconv$2,pad_of_pad_opt(pad_opt$4),0,fmt]];
|
||
case 6:
|
||
var prec_opt=ign[2],pad_opt$5=ign[1];
|
||
if(prec_opt)var ndec=prec_opt[1],_sY_=[0,ndec];else var _sY_=0;
|
||
return [0,[8,_Z_,pad_of_pad_opt(pad_opt$5),_sY_,fmt]];
|
||
case 7:
|
||
var pad_opt$6=ign[1];return [0,[9,pad_of_pad_opt(pad_opt$6),fmt]];
|
||
case 8:
|
||
var fmtty=ign[2],pad_opt$7=ign[1];
|
||
return [0,[13,pad_opt$7,fmtty,fmt]];
|
||
case 9:
|
||
var fmtty$0=ign[2],pad_opt$8=ign[1];
|
||
return [0,[14,pad_opt$8,fmtty$0,fmt]];
|
||
case 10:
|
||
var char_set=ign[2],width_opt=ign[1];
|
||
return [0,[20,width_opt,char_set,fmt]];
|
||
default:var counter=ign[1];return [0,[21,counter,fmt]]}}
|
||
function default_float_precision(fconv){return 5 === fconv[2]?12:-6}
|
||
function buffer_create(init_size)
|
||
{return [0,0,caml_create_bytes(init_size)]}
|
||
function buffer_check_size(buf,overhead)
|
||
{var
|
||
len=caml_ml_bytes_length(buf[2]),
|
||
min_len=buf[1] + overhead | 0,
|
||
_sW_=len < min_len?1:0;
|
||
if(_sW_)
|
||
{var
|
||
new_len=max(len * 2 | 0,min_len),
|
||
new_str=caml_create_bytes(new_len);
|
||
blit(buf[2],0,new_str,0,len);
|
||
buf[2] = new_str;
|
||
var _sX_=0}
|
||
else
|
||
var _sX_=_sW_;
|
||
return _sX_}
|
||
function buffer_add_char(buf,c)
|
||
{buffer_check_size(buf,1);
|
||
caml_bytes_set(buf[2],buf[1],c);
|
||
buf[1] = buf[1] + 1 | 0;
|
||
return 0}
|
||
function buffer_add_string(buf,s)
|
||
{var str_len=caml_ml_string_length(s);
|
||
buffer_check_size(buf,str_len);
|
||
blit$0(s,0,buf[2],buf[1],str_len);
|
||
buf[1] = buf[1] + str_len | 0;
|
||
return 0}
|
||
function buffer_contents(buf){return sub_string(buf[2],0,buf[1])}
|
||
function char_of_iconv(iconv)
|
||
{switch(iconv)
|
||
{case 6:
|
||
case 7:return 120;
|
||
case 8:
|
||
case 9:return 88;
|
||
case 10:
|
||
case 11:return 111;
|
||
case 12:
|
||
case 15:return 117;
|
||
case 0:
|
||
case 1:
|
||
case 2:
|
||
case 13:return 100;
|
||
default:return 105}}
|
||
function char_of_fconv(opt,fconv)
|
||
{if(opt)var sth=opt[1],cF=sth;else var cF=70;
|
||
switch(fconv[2])
|
||
{case 0:return 102;
|
||
case 1:return 101;
|
||
case 2:return 69;
|
||
case 3:return 103;
|
||
case 4:return 71;
|
||
case 5:return cF;
|
||
case 6:return 104;
|
||
case 7:return 72;
|
||
default:return 70}}
|
||
function bprint_padty(buf,padty)
|
||
{switch(padty)
|
||
{case 0:return buffer_add_char(buf,45);
|
||
case 1:return 0;
|
||
default:return buffer_add_char(buf,48)}}
|
||
function bprint_ignored_flag(buf,ign_flag)
|
||
{return ign_flag?buffer_add_char(buf,95):ign_flag}
|
||
function bprint_pad_opt(buf,pad_opt)
|
||
{if(pad_opt)
|
||
{var width=pad_opt[1];
|
||
return buffer_add_string(buf,caml_string_of_jsbytes("" + width))}
|
||
return 0}
|
||
function bprint_padding(buf,pad)
|
||
{if(typeof pad === "number")
|
||
return 0;
|
||
else
|
||
{if(0 === pad[0])
|
||
{var n=pad[2],padty=pad[1];
|
||
bprint_padty(buf,padty);
|
||
return buffer_add_string(buf,caml_string_of_jsbytes("" + n))}
|
||
var padty$0=pad[1];
|
||
bprint_padty(buf,padty$0);
|
||
return buffer_add_char(buf,42)}}
|
||
function bprint_precision(buf,prec)
|
||
{if(typeof prec === "number")return prec?buffer_add_string(buf,cst$11):0;
|
||
var n=prec[1];
|
||
buffer_add_char(buf,46);
|
||
return buffer_add_string(buf,caml_string_of_jsbytes("" + n))}
|
||
function bprint_iconv_flag(buf,iconv)
|
||
{switch(iconv)
|
||
{case 1:
|
||
case 4:return buffer_add_char(buf,43);
|
||
case 2:
|
||
case 5:return buffer_add_char(buf,32);
|
||
case 7:
|
||
case 9:
|
||
case 11:
|
||
case 13:
|
||
case 14:
|
||
case 15:return buffer_add_char(buf,35);
|
||
default:return 0}}
|
||
function bprint_altint_fmt(buf,ign_flag,iconv,pad,prec,c)
|
||
{buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_iconv_flag(buf,iconv);
|
||
bprint_padding(buf,pad);
|
||
bprint_precision(buf,prec);
|
||
buffer_add_char(buf,c);
|
||
return buffer_add_char(buf,char_of_iconv(iconv))}
|
||
function bprint_fconv_flag(buf,fconv)
|
||
{switch(fconv[1])
|
||
{case 0:break;
|
||
case 1:buffer_add_char(buf,43);break;
|
||
default:buffer_add_char(buf,32)}
|
||
return 8 <= fconv[2]?buffer_add_char(buf,35):0}
|
||
function string_of_formatting_lit(formatting_lit)
|
||
{if(typeof formatting_lit === "number")
|
||
switch(formatting_lit)
|
||
{case 0:return cst$12;
|
||
case 1:return cst$13;
|
||
case 2:return cst$14;
|
||
case 3:return cst$15;
|
||
case 4:return cst$16;
|
||
case 5:return cst$17;
|
||
default:return cst$18}
|
||
else
|
||
switch(formatting_lit[0])
|
||
{case 0:var str=formatting_lit[1];return str;
|
||
case 1:var str$0=formatting_lit[1];return str$0;
|
||
default:var c=formatting_lit[1];return symbol(cst$19,make$0(1,c))}}
|
||
function bprint_char_literal(buf,chr)
|
||
{return 37 === chr?buffer_add_string(buf,cst$20):buffer_add_char(buf,chr)}
|
||
function bprint_string_literal(buf,str)
|
||
{var _sU_=caml_ml_string_length(str) - 1 | 0,_sT_=0;
|
||
if(! (_sU_ < 0))
|
||
{var i=_sT_;
|
||
for(;;)
|
||
{bprint_char_literal(buf,caml_string_get(str,i));
|
||
var _sV_=i + 1 | 0;
|
||
if(_sU_ !== i){var i=_sV_;continue}
|
||
break}}
|
||
return 0}
|
||
function bprint_fmtty(buf,fmtty)
|
||
{var fmtty$0=fmtty;
|
||
for(;;)
|
||
if(typeof fmtty$0 === "number")
|
||
return 0;
|
||
else
|
||
switch(fmtty$0[0])
|
||
{case 0:
|
||
var rest=fmtty$0[1];
|
||
buffer_add_string(buf,cst_c);
|
||
var fmtty$0=rest;
|
||
continue;
|
||
case 1:
|
||
var rest$0=fmtty$0[1];
|
||
buffer_add_string(buf,cst_s);
|
||
var fmtty$0=rest$0;
|
||
continue;
|
||
case 2:
|
||
var rest$1=fmtty$0[1];
|
||
buffer_add_string(buf,cst_i);
|
||
var fmtty$0=rest$1;
|
||
continue;
|
||
case 3:
|
||
var rest$2=fmtty$0[1];
|
||
buffer_add_string(buf,cst_li);
|
||
var fmtty$0=rest$2;
|
||
continue;
|
||
case 4:
|
||
var rest$3=fmtty$0[1];
|
||
buffer_add_string(buf,cst_ni);
|
||
var fmtty$0=rest$3;
|
||
continue;
|
||
case 5:
|
||
var rest$4=fmtty$0[1];
|
||
buffer_add_string(buf,cst_Li);
|
||
var fmtty$0=rest$4;
|
||
continue;
|
||
case 6:
|
||
var rest$5=fmtty$0[1];
|
||
buffer_add_string(buf,cst_f);
|
||
var fmtty$0=rest$5;
|
||
continue;
|
||
case 7:
|
||
var rest$6=fmtty$0[1];
|
||
buffer_add_string(buf,cst_B);
|
||
var fmtty$0=rest$6;
|
||
continue;
|
||
case 8:
|
||
var rest$7=fmtty$0[2],sub_fmtty=fmtty$0[1];
|
||
buffer_add_string(buf,cst$21);
|
||
bprint_fmtty(buf,sub_fmtty);
|
||
buffer_add_string(buf,cst$22);
|
||
var fmtty$0=rest$7;
|
||
continue;
|
||
case 9:
|
||
var rest$8=fmtty$0[3],sub_fmtty$0=fmtty$0[1];
|
||
buffer_add_string(buf,cst$23);
|
||
bprint_fmtty(buf,sub_fmtty$0);
|
||
buffer_add_string(buf,cst$24);
|
||
var fmtty$0=rest$8;
|
||
continue;
|
||
case 10:
|
||
var rest$9=fmtty$0[1];
|
||
buffer_add_string(buf,cst_a);
|
||
var fmtty$0=rest$9;
|
||
continue;
|
||
case 11:
|
||
var rest$10=fmtty$0[1];
|
||
buffer_add_string(buf,cst_t$0);
|
||
var fmtty$0=rest$10;
|
||
continue;
|
||
case 12:
|
||
var rest$11=fmtty$0[1];
|
||
buffer_add_string(buf,cst$25);
|
||
var fmtty$0=rest$11;
|
||
continue;
|
||
case 13:
|
||
var rest$12=fmtty$0[1];
|
||
buffer_add_string(buf,cst_r$0);
|
||
var fmtty$0=rest$12;
|
||
continue;
|
||
default:
|
||
var rest$13=fmtty$0[1];
|
||
buffer_add_string(buf,cst_r$1);
|
||
var fmtty$0=rest$13;
|
||
continue}}
|
||
function int_of_custom_arity(param)
|
||
{if(param){var x=param[1];return 1 + int_of_custom_arity(x) | 0}return 0}
|
||
function string_of_fmt(fmt$1)
|
||
{var buf=buffer_create(16),fmt=fmt$1,ign_flag=0;
|
||
a:
|
||
for(;;)
|
||
if(typeof fmt === "number")
|
||
return buffer_contents(buf);
|
||
else
|
||
switch(fmt[0])
|
||
{case 0:
|
||
var rest=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
buffer_add_char(buf,99);
|
||
var fmt=rest,ign_flag=0;
|
||
continue;
|
||
case 1:
|
||
var rest$0=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
buffer_add_char(buf,67);
|
||
var fmt=rest$0,ign_flag=0;
|
||
continue;
|
||
case 2:
|
||
var rest$1=fmt[2],pad=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_padding(buf,pad);
|
||
buffer_add_char(buf,115);
|
||
var fmt=rest$1,ign_flag=0;
|
||
continue;
|
||
case 3:
|
||
var rest$2=fmt[2],pad$0=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_padding(buf,pad$0);
|
||
buffer_add_char(buf,83);
|
||
var fmt=rest$2,ign_flag=0;
|
||
continue;
|
||
case 4:
|
||
var rest$3=fmt[4],prec=fmt[3],pad$1=fmt[2],iconv=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_iconv_flag(buf,iconv);
|
||
bprint_padding(buf,pad$1);
|
||
bprint_precision(buf,prec);
|
||
buffer_add_char(buf,char_of_iconv(iconv));
|
||
var fmt=rest$3,ign_flag=0;
|
||
continue;
|
||
case 5:
|
||
var rest$4=fmt[4],prec$0=fmt[3],pad$2=fmt[2],iconv$0=fmt[1];
|
||
bprint_altint_fmt(buf,ign_flag,iconv$0,pad$2,prec$0,108);
|
||
var fmt=rest$4,ign_flag=0;
|
||
continue;
|
||
case 6:
|
||
var rest$5=fmt[4],prec$1=fmt[3],pad$3=fmt[2],iconv$1=fmt[1];
|
||
bprint_altint_fmt(buf,ign_flag,iconv$1,pad$3,prec$1,110);
|
||
var fmt=rest$5,ign_flag=0;
|
||
continue;
|
||
case 7:
|
||
var rest$6=fmt[4],prec$2=fmt[3],pad$4=fmt[2],iconv$2=fmt[1];
|
||
bprint_altint_fmt(buf,ign_flag,iconv$2,pad$4,prec$2,76);
|
||
var fmt=rest$6,ign_flag=0;
|
||
continue;
|
||
case 8:
|
||
var rest$7=fmt[4],prec$3=fmt[3],pad$5=fmt[2],fconv=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_fconv_flag(buf,fconv);
|
||
bprint_padding(buf,pad$5);
|
||
bprint_precision(buf,prec$3);
|
||
buffer_add_char(buf,char_of_fconv(0,fconv));
|
||
var fmt=rest$7,ign_flag=0;
|
||
continue;
|
||
case 9:
|
||
var rest$8=fmt[2],pad$6=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_padding(buf,pad$6);
|
||
buffer_add_char(buf,66);
|
||
var fmt=rest$8,ign_flag=0;
|
||
continue;
|
||
case 10:
|
||
var rest$9=fmt[1];
|
||
buffer_add_string(buf,cst$26);
|
||
var fmt=rest$9;
|
||
continue;
|
||
case 11:
|
||
var rest$10=fmt[2],str=fmt[1];
|
||
bprint_string_literal(buf,str);
|
||
var fmt=rest$10;
|
||
continue;
|
||
case 12:
|
||
var rest$11=fmt[2],chr$0=fmt[1];
|
||
bprint_char_literal(buf,chr$0);
|
||
var fmt=rest$11;
|
||
continue;
|
||
case 13:
|
||
var rest$12=fmt[3],fmtty=fmt[2],pad_opt=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_pad_opt(buf,pad_opt);
|
||
buffer_add_char(buf,123);
|
||
bprint_fmtty(buf,fmtty);
|
||
buffer_add_char(buf,37);
|
||
buffer_add_char(buf,125);
|
||
var fmt=rest$12,ign_flag=0;
|
||
continue;
|
||
case 14:
|
||
var rest$13=fmt[3],fmtty$0=fmt[2],pad_opt$0=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_pad_opt(buf,pad_opt$0);
|
||
buffer_add_char(buf,40);
|
||
bprint_fmtty(buf,fmtty$0);
|
||
buffer_add_char(buf,37);
|
||
buffer_add_char(buf,41);
|
||
var fmt=rest$13,ign_flag=0;
|
||
continue;
|
||
case 15:
|
||
var rest$14=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
buffer_add_char(buf,97);
|
||
var fmt=rest$14,ign_flag=0;
|
||
continue;
|
||
case 16:
|
||
var rest$15=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
buffer_add_char(buf,116);
|
||
var fmt=rest$15,ign_flag=0;
|
||
continue;
|
||
case 17:
|
||
var rest$16=fmt[2],fmting_lit=fmt[1];
|
||
bprint_string_literal(buf,string_of_formatting_lit(fmting_lit));
|
||
var fmt=rest$16;
|
||
continue;
|
||
case 18:
|
||
var rest$17=fmt[2],fmting_gen=fmt[1];
|
||
if(0 === fmting_gen[0])
|
||
{var match$1=fmting_gen[1],str$0=match$1[2];
|
||
buffer_add_string(buf,cst$27);
|
||
buffer_add_string(buf,str$0)}
|
||
else
|
||
{var match$2=fmting_gen[1],str$1=match$2[2];
|
||
buffer_add_string(buf,cst$28);
|
||
buffer_add_string(buf,str$1)}
|
||
var fmt=rest$17;
|
||
continue;
|
||
case 19:
|
||
var rest$18=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
buffer_add_char(buf,114);
|
||
var fmt=rest$18,ign_flag=0;
|
||
continue;
|
||
case 20:
|
||
var rest$19=fmt[3],char_set=fmt[2],width_opt=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_pad_opt(buf,width_opt);
|
||
var
|
||
print_char=
|
||
function(buf,i)
|
||
{var c=char_of_int(i);
|
||
return 37 === c
|
||
?(buffer_add_char(buf,37),buffer_add_char(buf,37))
|
||
:64 === c
|
||
?(buffer_add_char(buf,37),buffer_add_char(buf,64))
|
||
:buffer_add_char(buf,c)};
|
||
buffer_add_char(buf,91);
|
||
var
|
||
_sJ_=
|
||
is_in_char_set(char_set,0)
|
||
?(buffer_add_char(buf,94),rev_char_set(char_set))
|
||
:char_set,
|
||
is_alone$0=
|
||
function(_sO_)
|
||
{function is_alone(c)
|
||
{var
|
||
after=chr(c + 1 | 0),
|
||
before=chr(c - 1 | 0),
|
||
_sP_=is_in_char_set(_sO_,c);
|
||
if(_sP_)
|
||
var
|
||
_sQ_=is_in_char_set(_sO_,before),
|
||
_sR_=_sQ_?is_in_char_set(_sO_,after):_sQ_,
|
||
_sS_=1 - _sR_;
|
||
else
|
||
var _sS_=_sP_;
|
||
return _sS_}
|
||
return is_alone},
|
||
is_alone=is_alone$0(_sJ_);
|
||
if(is_alone(93))buffer_add_char(buf,93);
|
||
var i=1;
|
||
b:
|
||
for(;;)
|
||
{if(i < 256)
|
||
{if(! is_in_char_set(_sJ_,char_of_int(i)))
|
||
{var i$0=i + 1 | 0,i=i$0;continue}
|
||
var match=char_of_int(i),switcher=match - 45 | 0,switch$0=0;
|
||
if(48 < switcher >>> 0)
|
||
if(210 <= switcher)print_char(buf,255);else switch$0 = 1;
|
||
else
|
||
{var switcher$0=switcher - 1 | 0;
|
||
if(46 < switcher$0 >>> 0){var i$2=i + 1 | 0,i=i$2;continue}
|
||
switch$0 = 1}
|
||
if(switch$0)
|
||
{var i$1=i + 1 | 0;
|
||
if(! is_in_char_set(_sJ_,char_of_int(i$1)))
|
||
{print_char(buf,i$1 - 1 | 0);
|
||
var i$6=i$1 + 1 | 0,i=i$6;
|
||
continue}
|
||
var
|
||
match$0=char_of_int(i$1),
|
||
switcher$1=match$0 - 45 | 0,
|
||
switch$1=0;
|
||
if(48 < switcher$1 >>> 0)
|
||
if(210 <= switcher$1)
|
||
{print_char(buf,254);print_char(buf,255)}
|
||
else
|
||
switch$1 = 1;
|
||
else
|
||
{var switcher$2=switcher$1 - 1 | 0;
|
||
if(46 < switcher$2 >>> 0)
|
||
{if(! is_in_char_set(_sJ_,char_of_int(i$1 + 1 | 0)))
|
||
{print_char(buf,i$1 - 1 | 0);
|
||
var i$5=i$1 + 1 | 0,i=i$5;
|
||
continue}
|
||
switch$1 = 1}
|
||
else
|
||
switch$1 = 1}
|
||
if(switch$1)
|
||
{if(! is_in_char_set(_sJ_,char_of_int(i$1 + 1 | 0)))
|
||
{print_char(buf,i$1 - 1 | 0);
|
||
print_char(buf,i$1);
|
||
var i$4=i$1 + 2 | 0,i=i$4;
|
||
continue}
|
||
var j=i$1 + 2 | 0,i$3=i$1 - 1 | 0,j$0=j;
|
||
for(;;)
|
||
{if(256 !== j$0 && is_in_char_set(_sJ_,char_of_int(j$0)))
|
||
{var j$1=j$0 + 1 | 0,j$0=j$1;continue}
|
||
print_char(buf,i$3);
|
||
print_char(buf,45);
|
||
print_char(buf,j$0 - 1 | 0);
|
||
if(j$0 < 256){var i$7=j$0 + 1 | 0,i=i$7;continue b}
|
||
break}}}}
|
||
if(is_alone(45))buffer_add_char(buf,45);
|
||
buffer_add_char(buf,93);
|
||
var fmt=rest$19,ign_flag=0;
|
||
continue a}
|
||
case 21:
|
||
var rest$20=fmt[2],counter=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
switch(counter)
|
||
{case 0:var _sK_=108;break;
|
||
case 1:var _sK_=110;break;
|
||
default:var _sK_=78}
|
||
buffer_add_char(buf,_sK_);
|
||
var fmt=rest$20,ign_flag=0;
|
||
continue;
|
||
case 22:
|
||
var rest$21=fmt[1];
|
||
buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
bprint_string_literal(buf,cst_0c);
|
||
var fmt=rest$21,ign_flag=0;
|
||
continue;
|
||
case 23:
|
||
var
|
||
rest$22=fmt[2],
|
||
ign=fmt[1],
|
||
match$3=param_format_of_ignored_format(ign,rest$22),
|
||
fmt$0=match$3[1],
|
||
fmt=fmt$0,
|
||
ign_flag=1;
|
||
continue;
|
||
default:
|
||
var
|
||
rest$23=fmt[3],
|
||
arity=fmt[1],
|
||
_sM_=int_of_custom_arity(arity),
|
||
_sL_=1;
|
||
if(! (_sM_ < 1))
|
||
{var i$8=_sL_;
|
||
for(;;)
|
||
{buffer_add_char(buf,37);
|
||
bprint_ignored_flag(buf,ign_flag);
|
||
buffer_add_char(buf,63);
|
||
var _sN_=i$8 + 1 | 0;
|
||
if(_sM_ !== i$8){var i$8=_sN_;continue}
|
||
break}}
|
||
var fmt=rest$23,ign_flag=0;
|
||
continue}}
|
||
function symm(param)
|
||
{if(typeof param === "number")
|
||
return 0;
|
||
else
|
||
switch(param[0])
|
||
{case 0:var rest=param[1];return [0,symm(rest)];
|
||
case 1:var rest$0=param[1];return [1,symm(rest$0)];
|
||
case 2:var rest$1=param[1];return [2,symm(rest$1)];
|
||
case 3:var rest$2=param[1];return [3,symm(rest$2)];
|
||
case 4:var rest$3=param[1];return [4,symm(rest$3)];
|
||
case 5:var rest$4=param[1];return [5,symm(rest$4)];
|
||
case 6:var rest$5=param[1];return [6,symm(rest$5)];
|
||
case 7:var rest$6=param[1];return [7,symm(rest$6)];
|
||
case 8:var rest$7=param[2],ty=param[1];return [8,ty,symm(rest$7)];
|
||
case 9:
|
||
var rest$8=param[3],ty2=param[2],ty1=param[1];
|
||
return [9,ty2,ty1,symm(rest$8)];
|
||
case 10:var rest$9=param[1];return [10,symm(rest$9)];
|
||
case 11:var rest$10=param[1];return [11,symm(rest$10)];
|
||
case 12:var rest$11=param[1];return [12,symm(rest$11)];
|
||
case 13:var rest$12=param[1];return [13,symm(rest$12)];
|
||
default:var rest$13=param[1];return [14,symm(rest$13)]}}
|
||
function fmtty_rel_det(param)
|
||
{if(typeof param === "number")
|
||
{var
|
||
_sl_=function(param){return 0},
|
||
_sm_=function(param){return 0},
|
||
_sn_=function(param){return 0};
|
||
return [0,function(param){return 0},_sn_,_sm_,_sl_]}
|
||
else
|
||
switch(param[0])
|
||
{case 0:
|
||
var
|
||
rest=param[1],
|
||
match=fmtty_rel_det(rest),
|
||
de=match[4],
|
||
ed=match[3],
|
||
af=match[2],
|
||
fa=match[1],
|
||
_so_=function(param){caml_call1(af,0);return 0};
|
||
return [0,function(param){caml_call1(fa,0);return 0},_so_,ed,de];
|
||
case 1:
|
||
var
|
||
rest$0=param[1],
|
||
match$0=fmtty_rel_det(rest$0),
|
||
de$0=match$0[4],
|
||
ed$0=match$0[3],
|
||
af$0=match$0[2],
|
||
fa$0=match$0[1],
|
||
_sp_=function(param){caml_call1(af$0,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$0,0);return 0},
|
||
_sp_,
|
||
ed$0,
|
||
de$0];
|
||
case 2:
|
||
var
|
||
rest$1=param[1],
|
||
match$1=fmtty_rel_det(rest$1),
|
||
de$1=match$1[4],
|
||
ed$1=match$1[3],
|
||
af$1=match$1[2],
|
||
fa$1=match$1[1],
|
||
_sq_=function(param){caml_call1(af$1,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$1,0);return 0},
|
||
_sq_,
|
||
ed$1,
|
||
de$1];
|
||
case 3:
|
||
var
|
||
rest$2=param[1],
|
||
match$2=fmtty_rel_det(rest$2),
|
||
de$2=match$2[4],
|
||
ed$2=match$2[3],
|
||
af$2=match$2[2],
|
||
fa$2=match$2[1],
|
||
_sr_=function(param){caml_call1(af$2,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$2,0);return 0},
|
||
_sr_,
|
||
ed$2,
|
||
de$2];
|
||
case 4:
|
||
var
|
||
rest$3=param[1],
|
||
match$3=fmtty_rel_det(rest$3),
|
||
de$3=match$3[4],
|
||
ed$3=match$3[3],
|
||
af$3=match$3[2],
|
||
fa$3=match$3[1],
|
||
_ss_=function(param){caml_call1(af$3,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$3,0);return 0},
|
||
_ss_,
|
||
ed$3,
|
||
de$3];
|
||
case 5:
|
||
var
|
||
rest$4=param[1],
|
||
match$4=fmtty_rel_det(rest$4),
|
||
de$4=match$4[4],
|
||
ed$4=match$4[3],
|
||
af$4=match$4[2],
|
||
fa$4=match$4[1],
|
||
_st_=function(param){caml_call1(af$4,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$4,0);return 0},
|
||
_st_,
|
||
ed$4,
|
||
de$4];
|
||
case 6:
|
||
var
|
||
rest$5=param[1],
|
||
match$5=fmtty_rel_det(rest$5),
|
||
de$5=match$5[4],
|
||
ed$5=match$5[3],
|
||
af$5=match$5[2],
|
||
fa$5=match$5[1],
|
||
_su_=function(param){caml_call1(af$5,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$5,0);return 0},
|
||
_su_,
|
||
ed$5,
|
||
de$5];
|
||
case 7:
|
||
var
|
||
rest$6=param[1],
|
||
match$6=fmtty_rel_det(rest$6),
|
||
de$6=match$6[4],
|
||
ed$6=match$6[3],
|
||
af$6=match$6[2],
|
||
fa$6=match$6[1],
|
||
_sv_=function(param){caml_call1(af$6,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$6,0);return 0},
|
||
_sv_,
|
||
ed$6,
|
||
de$6];
|
||
case 8:
|
||
var
|
||
rest$7=param[2],
|
||
match$7=fmtty_rel_det(rest$7),
|
||
de$7=match$7[4],
|
||
ed$7=match$7[3],
|
||
af$7=match$7[2],
|
||
fa$7=match$7[1],
|
||
_sw_=function(param){caml_call1(af$7,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$7,0);return 0},
|
||
_sw_,
|
||
ed$7,
|
||
de$7];
|
||
case 9:
|
||
var
|
||
rest$8=param[3],
|
||
ty2=param[2],
|
||
ty1=param[1],
|
||
match$8=fmtty_rel_det(rest$8),
|
||
de$8=match$8[4],
|
||
ed$8=match$8[3],
|
||
af$8=match$8[2],
|
||
fa$8=match$8[1],
|
||
ty=trans(symm(ty1),ty2),
|
||
match$9=fmtty_rel_det(ty),
|
||
jd=match$9[4],
|
||
dj=match$9[3],
|
||
ga=match$9[2],
|
||
ag=match$9[1],
|
||
_sx_=function(param){caml_call1(jd,0);caml_call1(de$8,0);return 0},
|
||
_sy_=function(param){caml_call1(ed$8,0);caml_call1(dj,0);return 0},
|
||
_sz_=function(param){caml_call1(ga,0);caml_call1(af$8,0);return 0};
|
||
return [0,
|
||
function(param)
|
||
{caml_call1(fa$8,0);caml_call1(ag,0);return 0},
|
||
_sz_,
|
||
_sy_,
|
||
_sx_];
|
||
case 10:
|
||
var
|
||
rest$9=param[1],
|
||
match$10=fmtty_rel_det(rest$9),
|
||
de$9=match$10[4],
|
||
ed$9=match$10[3],
|
||
af$9=match$10[2],
|
||
fa$9=match$10[1],
|
||
_sA_=function(param){caml_call1(af$9,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$9,0);return 0},
|
||
_sA_,
|
||
ed$9,
|
||
de$9];
|
||
case 11:
|
||
var
|
||
rest$10=param[1],
|
||
match$11=fmtty_rel_det(rest$10),
|
||
de$10=match$11[4],
|
||
ed$10=match$11[3],
|
||
af$10=match$11[2],
|
||
fa$10=match$11[1],
|
||
_sB_=function(param){caml_call1(af$10,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$10,0);return 0},
|
||
_sB_,
|
||
ed$10,
|
||
de$10];
|
||
case 12:
|
||
var
|
||
rest$11=param[1],
|
||
match$12=fmtty_rel_det(rest$11),
|
||
de$11=match$12[4],
|
||
ed$11=match$12[3],
|
||
af$11=match$12[2],
|
||
fa$11=match$12[1],
|
||
_sC_=function(param){caml_call1(af$11,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$11,0);return 0},
|
||
_sC_,
|
||
ed$11,
|
||
de$11];
|
||
case 13:
|
||
var
|
||
rest$12=param[1],
|
||
match$13=fmtty_rel_det(rest$12),
|
||
de$12=match$13[4],
|
||
ed$12=match$13[3],
|
||
af$12=match$13[2],
|
||
fa$12=match$13[1],
|
||
_sD_=function(param){caml_call1(de$12,0);return 0},
|
||
_sE_=function(param){caml_call1(ed$12,0);return 0},
|
||
_sF_=function(param){caml_call1(af$12,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$12,0);return 0},
|
||
_sF_,
|
||
_sE_,
|
||
_sD_];
|
||
default:
|
||
var
|
||
rest$13=param[1],
|
||
match$14=fmtty_rel_det(rest$13),
|
||
de$13=match$14[4],
|
||
ed$13=match$14[3],
|
||
af$13=match$14[2],
|
||
fa$13=match$14[1],
|
||
_sG_=function(param){caml_call1(de$13,0);return 0},
|
||
_sH_=function(param){caml_call1(ed$13,0);return 0},
|
||
_sI_=function(param){caml_call1(af$13,0);return 0};
|
||
return [0,
|
||
function(param){caml_call1(fa$13,0);return 0},
|
||
_sI_,
|
||
_sH_,
|
||
_sG_]}}
|
||
function trans(ty1,match)
|
||
{var switch$0=0;
|
||
if(typeof ty1 === "number")
|
||
if(typeof match === "number")
|
||
return 0;
|
||
else
|
||
switch(match[0])
|
||
{case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
case 8:switch$0 = 5;break;
|
||
case 9:switch$0 = 6;break;
|
||
default:throw [0,Assert_failure,___]}
|
||
else
|
||
switch(ty1[0])
|
||
{case 0:
|
||
var switch$1=0,_r4_=ty1[1];
|
||
if(typeof match !== "number")
|
||
switch(match[0])
|
||
{case 0:var rest2=match[1];return [0,trans(_r4_,rest2)];
|
||
case 8:switch$0 = 5;switch$1 = 1;break;
|
||
case 9:switch$0 = 6;switch$1 = 1;break;
|
||
case 10:switch$1 = 1;break;
|
||
case 11:switch$0 = 1;switch$1 = 1;break;
|
||
case 12:switch$0 = 2;switch$1 = 1;break;
|
||
case 13:switch$0 = 3;switch$1 = 1;break;
|
||
case 14:switch$0 = 4;switch$1 = 1;break
|
||
}
|
||
if(! switch$1)switch$0 = 7;
|
||
break;
|
||
case 1:
|
||
var switch$2=0,_r5_=ty1[1];
|
||
if(typeof match !== "number")
|
||
switch(match[0])
|
||
{case 1:var rest2$0=match[1];return [1,trans(_r5_,rest2$0)];
|
||
case 8:switch$0 = 5;switch$2 = 1;break;
|
||
case 9:switch$0 = 6;switch$2 = 1;break;
|
||
case 10:switch$2 = 1;break;
|
||
case 11:switch$0 = 1;switch$2 = 1;break;
|
||
case 12:switch$0 = 2;switch$2 = 1;break;
|
||
case 13:switch$0 = 3;switch$2 = 1;break;
|
||
case 14:switch$0 = 4;switch$2 = 1;break
|
||
}
|
||
if(! switch$2)switch$0 = 7;
|
||
break;
|
||
case 2:
|
||
var switch$3=0,_r6_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$3 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 2:var rest2$1=match[1];return [2,trans(_r6_,rest2$1)];
|
||
case 8:switch$0 = 5;break;
|
||
case 9:switch$0 = 6;break;
|
||
case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
default:switch$3 = 1}
|
||
if(switch$3)switch$0 = 7;
|
||
break;
|
||
case 3:
|
||
var switch$4=0,_r7_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$4 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 3:var rest2$2=match[1];return [3,trans(_r7_,rest2$2)];
|
||
case 8:switch$0 = 5;break;
|
||
case 9:switch$0 = 6;break;
|
||
case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
default:switch$4 = 1}
|
||
if(switch$4)switch$0 = 7;
|
||
break;
|
||
case 4:
|
||
var switch$5=0,_r8_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$5 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 4:var rest2$3=match[1];return [4,trans(_r8_,rest2$3)];
|
||
case 8:switch$0 = 5;break;
|
||
case 9:switch$0 = 6;break;
|
||
case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
default:switch$5 = 1}
|
||
if(switch$5)switch$0 = 7;
|
||
break;
|
||
case 5:
|
||
var switch$6=0,_r9_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$6 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 5:var rest2$4=match[1];return [5,trans(_r9_,rest2$4)];
|
||
case 8:switch$0 = 5;break;
|
||
case 9:switch$0 = 6;break;
|
||
case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
default:switch$6 = 1}
|
||
if(switch$6)switch$0 = 7;
|
||
break;
|
||
case 6:
|
||
var switch$7=0,_r__=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$7 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 6:var rest2$5=match[1];return [6,trans(_r__,rest2$5)];
|
||
case 8:switch$0 = 5;break;
|
||
case 9:switch$0 = 6;break;
|
||
case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
default:switch$7 = 1}
|
||
if(switch$7)switch$0 = 7;
|
||
break;
|
||
case 7:
|
||
var switch$8=0,_r$_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$8 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 7:var rest2$6=match[1];return [7,trans(_r$_,rest2$6)];
|
||
case 8:switch$0 = 5;break;
|
||
case 9:switch$0 = 6;break;
|
||
case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
default:switch$8 = 1}
|
||
if(switch$8)switch$0 = 7;
|
||
break;
|
||
case 8:
|
||
var switch$9=0,_sa_=ty1[2],_sb_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$9 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 8:
|
||
var rest2$7=match[2],ty2=match[1],_sc_=trans(_sa_,rest2$7);
|
||
return [8,trans(_sb_,ty2),_sc_];
|
||
case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
default:switch$9 = 1}
|
||
if(switch$9)throw [0,Assert_failure,_ah_];
|
||
break;
|
||
case 9:
|
||
var switch$10=0,_sd_=ty1[3],_se_=ty1[2],_sf_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$10 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 8:switch$0 = 5;break;
|
||
case 9:
|
||
var
|
||
rest2$8=match[3],
|
||
ty22=match[2],
|
||
ty21=match[1],
|
||
ty=trans(symm(_se_),ty21),
|
||
match$0=fmtty_rel_det(ty),
|
||
f4=match$0[4],
|
||
f2=match$0[2];
|
||
caml_call1(f2,0);
|
||
caml_call1(f4,0);
|
||
return [9,_sf_,ty22,trans(_sd_,rest2$8)];
|
||
case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:switch$0 = 4;break;
|
||
default:switch$10 = 1}
|
||
if(switch$10)throw [0,Assert_failure,_ai_];
|
||
break;
|
||
case 10:
|
||
var _sg_=ty1[1];
|
||
if(typeof match !== "number" && 10 === match[0])
|
||
{var rest2$9=match[1];return [10,trans(_sg_,rest2$9)]}
|
||
throw [0,Assert_failure,_aj_];
|
||
case 11:
|
||
var switch$11=0,_sh_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$11 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 10:break;
|
||
case 11:var rest2$10=match[1];return [11,trans(_sh_,rest2$10)];
|
||
default:switch$11 = 1}
|
||
if(switch$11)throw [0,Assert_failure,_ak_];
|
||
break;
|
||
case 12:
|
||
var switch$12=0,_si_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$12 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:var rest2$11=match[1];return [12,trans(_si_,rest2$11)];
|
||
default:switch$12 = 1}
|
||
if(switch$12)throw [0,Assert_failure,_al_];
|
||
break;
|
||
case 13:
|
||
var switch$13=0,_sj_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$13 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:var rest2$12=match[1];return [13,trans(_sj_,rest2$12)];
|
||
default:switch$13 = 1}
|
||
if(switch$13)throw [0,Assert_failure,_am_];
|
||
break;
|
||
default:
|
||
var switch$14=0,_sk_=ty1[1];
|
||
if(typeof match === "number")
|
||
switch$14 = 1;
|
||
else
|
||
switch(match[0])
|
||
{case 10:break;
|
||
case 11:switch$0 = 1;break;
|
||
case 12:switch$0 = 2;break;
|
||
case 13:switch$0 = 3;break;
|
||
case 14:var rest2$13=match[1];return [14,trans(_sk_,rest2$13)];
|
||
default:switch$14 = 1}
|
||
if(switch$14)throw [0,Assert_failure,_an_]}
|
||
switch(switch$0)
|
||
{case 0:throw [0,Assert_failure,_ab_];
|
||
case 1:throw [0,Assert_failure,_ac_];
|
||
case 2:throw [0,Assert_failure,_ad_];
|
||
case 3:throw [0,Assert_failure,_ae_];
|
||
case 4:throw [0,Assert_failure,_af_];
|
||
case 5:throw [0,Assert_failure,_$_];
|
||
case 6:throw [0,Assert_failure,_aa_];
|
||
default:throw [0,Assert_failure,_ag_]}}
|
||
function fmtty_of_padding_fmtty(pad,fmtty)
|
||
{return typeof pad === "number"?fmtty:0 === pad[0]?fmtty:[2,fmtty]}
|
||
function fmtty_of_custom(arity,fmtty)
|
||
{if(arity)
|
||
{var arity$0=arity[1];return [12,fmtty_of_custom(arity$0,fmtty)]}
|
||
return fmtty}
|
||
function fmtty_of_fmt(fmtty)
|
||
{var fmtty$0=fmtty;
|
||
for(;;)
|
||
if(typeof fmtty$0 === "number")
|
||
return 0;
|
||
else
|
||
switch(fmtty$0[0])
|
||
{case 0:var rest=fmtty$0[1];return [0,fmtty_of_fmt(rest)];
|
||
case 1:var rest$0=fmtty$0[1];return [0,fmtty_of_fmt(rest$0)];
|
||
case 2:
|
||
var rest$1=fmtty$0[2],pad=fmtty$0[1];
|
||
return fmtty_of_padding_fmtty(pad,[1,fmtty_of_fmt(rest$1)]);
|
||
case 3:
|
||
var rest$2=fmtty$0[2],pad$0=fmtty$0[1];
|
||
return fmtty_of_padding_fmtty(pad$0,[1,fmtty_of_fmt(rest$2)]);
|
||
case 4:
|
||
var
|
||
rest$3=fmtty$0[4],
|
||
prec=fmtty$0[3],
|
||
pad$1=fmtty$0[2],
|
||
ty_rest=fmtty_of_fmt(rest$3),
|
||
prec_ty=fmtty_of_precision_fmtty(prec,[2,ty_rest]);
|
||
return fmtty_of_padding_fmtty(pad$1,prec_ty);
|
||
case 5:
|
||
var
|
||
rest$4=fmtty$0[4],
|
||
prec$0=fmtty$0[3],
|
||
pad$2=fmtty$0[2],
|
||
ty_rest$0=fmtty_of_fmt(rest$4),
|
||
prec_ty$0=fmtty_of_precision_fmtty(prec$0,[3,ty_rest$0]);
|
||
return fmtty_of_padding_fmtty(pad$2,prec_ty$0);
|
||
case 6:
|
||
var
|
||
rest$5=fmtty$0[4],
|
||
prec$1=fmtty$0[3],
|
||
pad$3=fmtty$0[2],
|
||
ty_rest$1=fmtty_of_fmt(rest$5),
|
||
prec_ty$1=fmtty_of_precision_fmtty(prec$1,[4,ty_rest$1]);
|
||
return fmtty_of_padding_fmtty(pad$3,prec_ty$1);
|
||
case 7:
|
||
var
|
||
rest$6=fmtty$0[4],
|
||
prec$2=fmtty$0[3],
|
||
pad$4=fmtty$0[2],
|
||
ty_rest$2=fmtty_of_fmt(rest$6),
|
||
prec_ty$2=fmtty_of_precision_fmtty(prec$2,[5,ty_rest$2]);
|
||
return fmtty_of_padding_fmtty(pad$4,prec_ty$2);
|
||
case 8:
|
||
var
|
||
rest$7=fmtty$0[4],
|
||
prec$3=fmtty$0[3],
|
||
pad$5=fmtty$0[2],
|
||
ty_rest$3=fmtty_of_fmt(rest$7),
|
||
prec_ty$3=fmtty_of_precision_fmtty(prec$3,[6,ty_rest$3]);
|
||
return fmtty_of_padding_fmtty(pad$5,prec_ty$3);
|
||
case 9:
|
||
var rest$8=fmtty$0[2],pad$6=fmtty$0[1];
|
||
return fmtty_of_padding_fmtty(pad$6,[7,fmtty_of_fmt(rest$8)]);
|
||
case 10:var fmtty$1=fmtty$0[1],fmtty$0=fmtty$1;continue;
|
||
case 11:var fmtty$2=fmtty$0[2],fmtty$0=fmtty$2;continue;
|
||
case 12:var fmtty$3=fmtty$0[2],fmtty$0=fmtty$3;continue;
|
||
case 13:
|
||
var rest$9=fmtty$0[3],ty=fmtty$0[2];
|
||
return [8,ty,fmtty_of_fmt(rest$9)];
|
||
case 14:
|
||
var rest$10=fmtty$0[3],ty$0=fmtty$0[2];
|
||
return [9,ty$0,ty$0,fmtty_of_fmt(rest$10)];
|
||
case 15:var rest$11=fmtty$0[1];return [10,fmtty_of_fmt(rest$11)];
|
||
case 16:var rest$12=fmtty$0[1];return [11,fmtty_of_fmt(rest$12)];
|
||
case 17:var fmtty$4=fmtty$0[2],fmtty$0=fmtty$4;continue;
|
||
case 18:
|
||
var
|
||
rest$13=fmtty$0[2],
|
||
fmting_gen=fmtty$0[1],
|
||
_r2_=fmtty_of_fmt(rest$13);
|
||
if(0 === fmting_gen[0])
|
||
var match=fmting_gen[1],fmt=match[1],_r3_=fmtty_of_fmt(fmt);
|
||
else
|
||
var
|
||
match$0=fmting_gen[1],
|
||
fmt$0=match$0[1],
|
||
_r3_=fmtty_of_fmt(fmt$0);
|
||
return concat_fmtty(_r3_,_r2_);
|
||
case 19:var rest$14=fmtty$0[1];return [13,fmtty_of_fmt(rest$14)];
|
||
case 20:var rest$15=fmtty$0[3];return [1,fmtty_of_fmt(rest$15)];
|
||
case 21:var rest$16=fmtty$0[2];return [2,fmtty_of_fmt(rest$16)];
|
||
case 22:var rest$17=fmtty$0[1];return [0,fmtty_of_fmt(rest$17)];
|
||
case 23:
|
||
var rest$18=fmtty$0[2],ign=fmtty$0[1];
|
||
if(typeof ign === "number")
|
||
switch(ign)
|
||
{case 0:var fmtty$0=rest$18;continue;
|
||
case 1:var fmtty$0=rest$18;continue;
|
||
case 2:return [14,fmtty_of_fmt(rest$18)];
|
||
default:var fmtty$0=rest$18;continue}
|
||
else
|
||
switch(ign[0])
|
||
{case 0:var fmtty$0=rest$18;continue;
|
||
case 1:var fmtty$0=rest$18;continue;
|
||
case 2:var fmtty$0=rest$18;continue;
|
||
case 3:var fmtty$0=rest$18;continue;
|
||
case 4:var fmtty$0=rest$18;continue;
|
||
case 5:var fmtty$0=rest$18;continue;
|
||
case 6:var fmtty$0=rest$18;continue;
|
||
case 7:var fmtty$0=rest$18;continue;
|
||
case 8:var fmtty$0=rest$18;continue;
|
||
case 9:
|
||
var fmtty$5=ign[2];
|
||
return concat_fmtty(fmtty$5,fmtty_of_fmt(rest$18));
|
||
case 10:var fmtty$0=rest$18;continue;
|
||
default:var fmtty$0=rest$18;continue}
|
||
default:
|
||
var rest$19=fmtty$0[3],arity=fmtty$0[1];
|
||
return fmtty_of_custom(arity,fmtty_of_fmt(rest$19))}}
|
||
function fmtty_of_precision_fmtty(prec,fmtty)
|
||
{return typeof prec === "number"?prec?[2,fmtty]:fmtty:fmtty}
|
||
var
|
||
Type_mismatch=
|
||
[248,cst_CamlinternalFormat_Type_mi,caml_fresh_oo_id(0)];
|
||
function type_padding(pad,match)
|
||
{if(typeof pad === "number")
|
||
return [0,0,match];
|
||
else
|
||
{if(0 === pad[0])
|
||
{var w=pad[2],padty=pad[1];return [0,[0,padty,w],match]}
|
||
if(typeof match !== "number" && 2 === match[0])
|
||
{var rest=match[1],padty$0=pad[1];return [0,[1,padty$0],rest]}
|
||
throw Type_mismatch}}
|
||
function type_padprec(pad,prec,fmtty)
|
||
{var match=type_padding(pad,fmtty);
|
||
if(typeof prec === "number")
|
||
{if(prec)
|
||
{var _r1_=match[2];
|
||
if(typeof _r1_ !== "number" && 2 === _r1_[0])
|
||
{var rest=_r1_[1],pad$0=match[1];return [0,pad$0,1,rest]}
|
||
throw Type_mismatch}
|
||
var rest$0=match[2],pad$1=match[1];
|
||
return [0,pad$1,0,rest$0]}
|
||
var rest$1=match[2],pad$2=match[1],p=prec[1];
|
||
return [0,pad$2,[0,p],rest$1]}
|
||
function type_format(fmt,fmtty)
|
||
{var _r0_=type_format_gen(fmt,fmtty);
|
||
if(typeof _r0_[2] === "number"){var fmt$0=_r0_[1];return fmt$0}
|
||
throw Type_mismatch}
|
||
function type_ignored_param_one(ign,fmt,fmtty)
|
||
{var match=type_format_gen(fmt,fmtty),fmtty$0=match[2],fmt$0=match[1];
|
||
return [0,[23,ign,fmt$0],fmtty$0]}
|
||
function type_format_gen(fmt,fmtty)
|
||
{if(typeof fmt === "number")
|
||
return [0,0,fmtty];
|
||
else
|
||
switch(fmt[0])
|
||
{case 0:
|
||
if(typeof fmtty !== "number" && 0 === fmtty[0])
|
||
{var
|
||
fmtty_rest=fmtty[1],
|
||
fmt_rest=fmt[1],
|
||
match=type_format_gen(fmt_rest,fmtty_rest),
|
||
fmtty$0=match[2],
|
||
fmt$0=match[1];
|
||
return [0,[0,fmt$0],fmtty$0]}
|
||
break;
|
||
case 1:
|
||
if(typeof fmtty !== "number" && 0 === fmtty[0])
|
||
{var
|
||
fmtty_rest$0=fmtty[1],
|
||
fmt_rest$0=fmt[1],
|
||
match$0=type_format_gen(fmt_rest$0,fmtty_rest$0),
|
||
fmtty$1=match$0[2],
|
||
fmt$1=match$0[1];
|
||
return [0,[1,fmt$1],fmtty$1]}
|
||
break;
|
||
case 2:
|
||
var
|
||
fmt_rest$1=fmt[2],
|
||
pad=fmt[1],
|
||
match$1=type_padding(pad,fmtty),
|
||
_rJ_=match$1[2],
|
||
_rI_=match$1[1];
|
||
if(typeof _rJ_ !== "number" && 1 === _rJ_[0])
|
||
{var
|
||
fmtty_rest$1=_rJ_[1],
|
||
match$2=type_format_gen(fmt_rest$1,fmtty_rest$1),
|
||
fmtty$2=match$2[2],
|
||
fmt$2=match$2[1];
|
||
return [0,[2,_rI_,fmt$2],fmtty$2]}
|
||
throw Type_mismatch;
|
||
case 3:
|
||
var
|
||
fmt_rest$2=fmt[2],
|
||
pad$0=fmt[1],
|
||
match$3=type_padding(pad$0,fmtty),
|
||
_rL_=match$3[2],
|
||
_rK_=match$3[1];
|
||
if(typeof _rL_ !== "number" && 1 === _rL_[0])
|
||
{var
|
||
fmtty_rest$2=_rL_[1],
|
||
match$4=type_format_gen(fmt_rest$2,fmtty_rest$2),
|
||
fmtty$3=match$4[2],
|
||
fmt$3=match$4[1];
|
||
return [0,[3,_rK_,fmt$3],fmtty$3]}
|
||
throw Type_mismatch;
|
||
case 4:
|
||
var
|
||
fmt_rest$3=fmt[4],
|
||
prec=fmt[3],
|
||
pad$1=fmt[2],
|
||
iconv=fmt[1],
|
||
match$5=type_padprec(pad$1,prec,fmtty),
|
||
_rN_=match$5[3],
|
||
_rM_=match$5[1];
|
||
if(typeof _rN_ !== "number" && 2 === _rN_[0])
|
||
{var
|
||
fmtty_rest$3=_rN_[1],
|
||
prec$0=match$5[2],
|
||
match$6=type_format_gen(fmt_rest$3,fmtty_rest$3),
|
||
fmtty$4=match$6[2],
|
||
fmt$4=match$6[1];
|
||
return [0,[4,iconv,_rM_,prec$0,fmt$4],fmtty$4]}
|
||
throw Type_mismatch;
|
||
case 5:
|
||
var
|
||
fmt_rest$4=fmt[4],
|
||
prec$1=fmt[3],
|
||
pad$2=fmt[2],
|
||
iconv$0=fmt[1],
|
||
match$7=type_padprec(pad$2,prec$1,fmtty),
|
||
_rP_=match$7[3],
|
||
_rO_=match$7[1];
|
||
if(typeof _rP_ !== "number" && 3 === _rP_[0])
|
||
{var
|
||
fmtty_rest$4=_rP_[1],
|
||
prec$2=match$7[2],
|
||
match$8=type_format_gen(fmt_rest$4,fmtty_rest$4),
|
||
fmtty$5=match$8[2],
|
||
fmt$5=match$8[1];
|
||
return [0,[5,iconv$0,_rO_,prec$2,fmt$5],fmtty$5]}
|
||
throw Type_mismatch;
|
||
case 6:
|
||
var
|
||
fmt_rest$5=fmt[4],
|
||
prec$3=fmt[3],
|
||
pad$3=fmt[2],
|
||
iconv$1=fmt[1],
|
||
match$9=type_padprec(pad$3,prec$3,fmtty),
|
||
_rR_=match$9[3],
|
||
_rQ_=match$9[1];
|
||
if(typeof _rR_ !== "number" && 4 === _rR_[0])
|
||
{var
|
||
fmtty_rest$5=_rR_[1],
|
||
prec$4=match$9[2],
|
||
match$10=type_format_gen(fmt_rest$5,fmtty_rest$5),
|
||
fmtty$6=match$10[2],
|
||
fmt$6=match$10[1];
|
||
return [0,[6,iconv$1,_rQ_,prec$4,fmt$6],fmtty$6]}
|
||
throw Type_mismatch;
|
||
case 7:
|
||
var
|
||
fmt_rest$6=fmt[4],
|
||
prec$5=fmt[3],
|
||
pad$4=fmt[2],
|
||
iconv$2=fmt[1],
|
||
match$11=type_padprec(pad$4,prec$5,fmtty),
|
||
_rT_=match$11[3],
|
||
_rS_=match$11[1];
|
||
if(typeof _rT_ !== "number" && 5 === _rT_[0])
|
||
{var
|
||
fmtty_rest$6=_rT_[1],
|
||
prec$6=match$11[2],
|
||
match$12=type_format_gen(fmt_rest$6,fmtty_rest$6),
|
||
fmtty$7=match$12[2],
|
||
fmt$7=match$12[1];
|
||
return [0,[7,iconv$2,_rS_,prec$6,fmt$7],fmtty$7]}
|
||
throw Type_mismatch;
|
||
case 8:
|
||
var
|
||
fmt_rest$7=fmt[4],
|
||
prec$7=fmt[3],
|
||
pad$5=fmt[2],
|
||
fconv=fmt[1],
|
||
match$13=type_padprec(pad$5,prec$7,fmtty),
|
||
_rV_=match$13[3],
|
||
_rU_=match$13[1];
|
||
if(typeof _rV_ !== "number" && 6 === _rV_[0])
|
||
{var
|
||
fmtty_rest$7=_rV_[1],
|
||
prec$8=match$13[2],
|
||
match$14=type_format_gen(fmt_rest$7,fmtty_rest$7),
|
||
fmtty$8=match$14[2],
|
||
fmt$8=match$14[1];
|
||
return [0,[8,fconv,_rU_,prec$8,fmt$8],fmtty$8]}
|
||
throw Type_mismatch;
|
||
case 9:
|
||
var
|
||
fmt_rest$8=fmt[2],
|
||
pad$6=fmt[1],
|
||
match$15=type_padding(pad$6,fmtty),
|
||
_rX_=match$15[2],
|
||
_rW_=match$15[1];
|
||
if(typeof _rX_ !== "number" && 7 === _rX_[0])
|
||
{var
|
||
fmtty_rest$8=_rX_[1],
|
||
match$16=type_format_gen(fmt_rest$8,fmtty_rest$8),
|
||
fmtty$9=match$16[2],
|
||
fmt$9=match$16[1];
|
||
return [0,[9,_rW_,fmt$9],fmtty$9]}
|
||
throw Type_mismatch;
|
||
case 10:
|
||
var
|
||
fmt_rest$9=fmt[1],
|
||
match$17=type_format_gen(fmt_rest$9,fmtty),
|
||
fmtty$10=match$17[2],
|
||
fmt$10=match$17[1];
|
||
return [0,[10,fmt$10],fmtty$10];
|
||
case 11:
|
||
var
|
||
fmt_rest$10=fmt[2],
|
||
str=fmt[1],
|
||
match$18=type_format_gen(fmt_rest$10,fmtty),
|
||
fmtty$11=match$18[2],
|
||
fmt$11=match$18[1];
|
||
return [0,[11,str,fmt$11],fmtty$11];
|
||
case 12:
|
||
var
|
||
fmt_rest$11=fmt[2],
|
||
chr=fmt[1],
|
||
match$19=type_format_gen(fmt_rest$11,fmtty),
|
||
fmtty$12=match$19[2],
|
||
fmt$12=match$19[1];
|
||
return [0,[12,chr,fmt$12],fmtty$12];
|
||
case 13:
|
||
if(typeof fmtty !== "number" && 8 === fmtty[0])
|
||
{var
|
||
fmtty_rest$9=fmtty[2],
|
||
sub_fmtty=fmtty[1],
|
||
fmt_rest$12=fmt[3],
|
||
sub_fmtty$0=fmt[2],
|
||
pad_opt=fmt[1];
|
||
if(caml_notequal([0,sub_fmtty$0],[0,sub_fmtty]))
|
||
throw Type_mismatch;
|
||
var
|
||
match$20=type_format_gen(fmt_rest$12,fmtty_rest$9),
|
||
fmtty$13=match$20[2],
|
||
fmt$13=match$20[1];
|
||
return [0,[13,pad_opt,sub_fmtty,fmt$13],fmtty$13]}
|
||
break;
|
||
case 14:
|
||
if(typeof fmtty !== "number" && 9 === fmtty[0])
|
||
{var
|
||
fmtty_rest$10=fmtty[3],
|
||
sub_fmtty1=fmtty[1],
|
||
fmt_rest$13=fmt[3],
|
||
sub_fmtty$1=fmt[2],
|
||
pad_opt$0=fmt[1],
|
||
_rY_=[0,erase_rel(sub_fmtty1)];
|
||
if(caml_notequal([0,erase_rel(sub_fmtty$1)],_rY_))
|
||
throw Type_mismatch;
|
||
var
|
||
match$21=type_format_gen(fmt_rest$13,erase_rel(fmtty_rest$10)),
|
||
fmtty$14=match$21[2],
|
||
fmt$14=match$21[1];
|
||
return [0,[14,pad_opt$0,sub_fmtty1,fmt$14],fmtty$14]}
|
||
break;
|
||
case 15:
|
||
if(typeof fmtty !== "number" && 10 === fmtty[0])
|
||
{var
|
||
fmtty_rest$11=fmtty[1],
|
||
fmt_rest$14=fmt[1],
|
||
match$22=type_format_gen(fmt_rest$14,fmtty_rest$11),
|
||
fmtty$15=match$22[2],
|
||
fmt$15=match$22[1];
|
||
return [0,[15,fmt$15],fmtty$15]}
|
||
break;
|
||
case 16:
|
||
if(typeof fmtty !== "number" && 11 === fmtty[0])
|
||
{var
|
||
fmtty_rest$12=fmtty[1],
|
||
fmt_rest$15=fmt[1],
|
||
match$23=type_format_gen(fmt_rest$15,fmtty_rest$12),
|
||
fmtty$16=match$23[2],
|
||
fmt$16=match$23[1];
|
||
return [0,[16,fmt$16],fmtty$16]}
|
||
break;
|
||
case 17:
|
||
var
|
||
fmt_rest$16=fmt[2],
|
||
formatting_lit=fmt[1],
|
||
match$24=type_format_gen(fmt_rest$16,fmtty),
|
||
fmtty$17=match$24[2],
|
||
fmt$17=match$24[1];
|
||
return [0,[17,formatting_lit,fmt$17],fmtty$17];
|
||
case 18:
|
||
var fmt_rest$17=fmt[2],formatting_gen=fmt[1];
|
||
if(0 === formatting_gen[0])
|
||
{var
|
||
match$28=formatting_gen[1],
|
||
str$0=match$28[2],
|
||
fmt1=match$28[1],
|
||
match$29=type_format_gen(fmt1,fmtty),
|
||
fmtty2=match$29[2],
|
||
fmt2=match$29[1],
|
||
match$30=type_format_gen(fmt_rest$17,fmtty2),
|
||
fmtty3=match$30[2],
|
||
fmt3=match$30[1];
|
||
return [0,[18,[0,[0,fmt2,str$0]],fmt3],fmtty3]}
|
||
var
|
||
match$31=formatting_gen[1],
|
||
str$1=match$31[2],
|
||
fmt1$0=match$31[1],
|
||
match$32=type_format_gen(fmt1$0,fmtty),
|
||
fmtty2$0=match$32[2],
|
||
fmt2$0=match$32[1],
|
||
match$33=type_format_gen(fmt_rest$17,fmtty2$0),
|
||
fmtty3$0=match$33[2],
|
||
fmt3$0=match$33[1];
|
||
return [0,[18,[1,[0,fmt2$0,str$1]],fmt3$0],fmtty3$0];
|
||
case 19:
|
||
if(typeof fmtty !== "number" && 13 === fmtty[0])
|
||
{var
|
||
fmtty_rest$13=fmtty[1],
|
||
fmt_rest$18=fmt[1],
|
||
match$25=type_format_gen(fmt_rest$18,fmtty_rest$13),
|
||
fmtty$18=match$25[2],
|
||
fmt$18=match$25[1];
|
||
return [0,[19,fmt$18],fmtty$18]}
|
||
break;
|
||
case 20:
|
||
if(typeof fmtty !== "number" && 1 === fmtty[0])
|
||
{var
|
||
fmtty_rest$14=fmtty[1],
|
||
fmt_rest$19=fmt[3],
|
||
char_set=fmt[2],
|
||
width_opt=fmt[1],
|
||
match$26=type_format_gen(fmt_rest$19,fmtty_rest$14),
|
||
fmtty$19=match$26[2],
|
||
fmt$19=match$26[1];
|
||
return [0,[20,width_opt,char_set,fmt$19],fmtty$19]}
|
||
break;
|
||
case 21:
|
||
if(typeof fmtty !== "number" && 2 === fmtty[0])
|
||
{var
|
||
fmtty_rest$15=fmtty[1],
|
||
fmt_rest$20=fmt[2],
|
||
counter=fmt[1],
|
||
match$27=type_format_gen(fmt_rest$20,fmtty_rest$15),
|
||
fmtty$20=match$27[2],
|
||
fmt$20=match$27[1];
|
||
return [0,[21,counter,fmt$20],fmtty$20]}
|
||
break;
|
||
case 23:
|
||
var rest=fmt[2],ign=fmt[1];
|
||
if(typeof ign === "number")
|
||
switch(ign)
|
||
{case 0:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 1:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 2:
|
||
if(typeof fmtty !== "number" && 14 === fmtty[0])
|
||
{var
|
||
fmtty_rest$16=fmtty[1],
|
||
match$34=type_format_gen(rest,fmtty_rest$16),
|
||
fmtty$21=match$34[2],
|
||
fmt$21=match$34[1];
|
||
return [0,[23,2,fmt$21],fmtty$21]}
|
||
throw Type_mismatch;
|
||
default:return type_ignored_param_one(ign,rest,fmtty)}
|
||
else
|
||
switch(ign[0])
|
||
{case 0:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 1:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 2:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 3:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 4:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 5:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 6:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 7:return type_ignored_param_one(ign,rest,fmtty);
|
||
case 8:
|
||
var sub_fmtty$2=ign[2],pad_opt$1=ign[1];
|
||
return type_ignored_param_one
|
||
([8,pad_opt$1,sub_fmtty$2],rest,fmtty);
|
||
case 9:
|
||
var
|
||
sub_fmtty$3=ign[2],
|
||
pad_opt$2=ign[1],
|
||
_rZ_=type_ignored_format_substituti(sub_fmtty$3,rest,fmtty),
|
||
match$35=_rZ_[2],
|
||
fmtty$22=match$35[2],
|
||
fmt$22=match$35[1],
|
||
sub_fmtty$4=_rZ_[1];
|
||
return [0,[23,[9,pad_opt$2,sub_fmtty$4],fmt$22],fmtty$22];
|
||
case 10:return type_ignored_param_one(ign,rest,fmtty);
|
||
default:return type_ignored_param_one(ign,rest,fmtty)}
|
||
}
|
||
throw Type_mismatch}
|
||
function type_ignored_format_substituti(sub_fmtty,fmt,match)
|
||
{if(typeof sub_fmtty === "number")
|
||
return [0,0,type_format_gen(fmt,match)];
|
||
else
|
||
switch(sub_fmtty[0])
|
||
{case 0:
|
||
if(typeof match !== "number" && 0 === match[0])
|
||
{var
|
||
fmtty_rest=match[1],
|
||
sub_fmtty_rest=sub_fmtty[1],
|
||
match$0=
|
||
type_ignored_format_substituti(sub_fmtty_rest,fmt,fmtty_rest),
|
||
fmt$0=match$0[2],
|
||
sub_fmtty_rest$0=match$0[1];
|
||
return [0,[0,sub_fmtty_rest$0],fmt$0]}
|
||
break;
|
||
case 1:
|
||
if(typeof match !== "number" && 1 === match[0])
|
||
{var
|
||
fmtty_rest$0=match[1],
|
||
sub_fmtty_rest$1=sub_fmtty[1],
|
||
match$1=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$1,fmt,fmtty_rest$0),
|
||
fmt$1=match$1[2],
|
||
sub_fmtty_rest$2=match$1[1];
|
||
return [0,[1,sub_fmtty_rest$2],fmt$1]}
|
||
break;
|
||
case 2:
|
||
if(typeof match !== "number" && 2 === match[0])
|
||
{var
|
||
fmtty_rest$1=match[1],
|
||
sub_fmtty_rest$3=sub_fmtty[1],
|
||
match$2=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$3,fmt,fmtty_rest$1),
|
||
fmt$2=match$2[2],
|
||
sub_fmtty_rest$4=match$2[1];
|
||
return [0,[2,sub_fmtty_rest$4],fmt$2]}
|
||
break;
|
||
case 3:
|
||
if(typeof match !== "number" && 3 === match[0])
|
||
{var
|
||
fmtty_rest$2=match[1],
|
||
sub_fmtty_rest$5=sub_fmtty[1],
|
||
match$3=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$5,fmt,fmtty_rest$2),
|
||
fmt$3=match$3[2],
|
||
sub_fmtty_rest$6=match$3[1];
|
||
return [0,[3,sub_fmtty_rest$6],fmt$3]}
|
||
break;
|
||
case 4:
|
||
if(typeof match !== "number" && 4 === match[0])
|
||
{var
|
||
fmtty_rest$3=match[1],
|
||
sub_fmtty_rest$7=sub_fmtty[1],
|
||
match$4=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$7,fmt,fmtty_rest$3),
|
||
fmt$4=match$4[2],
|
||
sub_fmtty_rest$8=match$4[1];
|
||
return [0,[4,sub_fmtty_rest$8],fmt$4]}
|
||
break;
|
||
case 5:
|
||
if(typeof match !== "number" && 5 === match[0])
|
||
{var
|
||
fmtty_rest$4=match[1],
|
||
sub_fmtty_rest$9=sub_fmtty[1],
|
||
match$5=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$9,fmt,fmtty_rest$4),
|
||
fmt$5=match$5[2],
|
||
sub_fmtty_rest$10=match$5[1];
|
||
return [0,[5,sub_fmtty_rest$10],fmt$5]}
|
||
break;
|
||
case 6:
|
||
if(typeof match !== "number" && 6 === match[0])
|
||
{var
|
||
fmtty_rest$5=match[1],
|
||
sub_fmtty_rest$11=sub_fmtty[1],
|
||
match$6=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$11,fmt,fmtty_rest$5),
|
||
fmt$6=match$6[2],
|
||
sub_fmtty_rest$12=match$6[1];
|
||
return [0,[6,sub_fmtty_rest$12],fmt$6]}
|
||
break;
|
||
case 7:
|
||
if(typeof match !== "number" && 7 === match[0])
|
||
{var
|
||
fmtty_rest$6=match[1],
|
||
sub_fmtty_rest$13=sub_fmtty[1],
|
||
match$7=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$13,fmt,fmtty_rest$6),
|
||
fmt$7=match$7[2],
|
||
sub_fmtty_rest$14=match$7[1];
|
||
return [0,[7,sub_fmtty_rest$14],fmt$7]}
|
||
break;
|
||
case 8:
|
||
if(typeof match !== "number" && 8 === match[0])
|
||
{var
|
||
fmtty_rest$7=match[2],
|
||
sub2_fmtty=match[1],
|
||
sub_fmtty_rest$15=sub_fmtty[2],
|
||
sub2_fmtty$0=sub_fmtty[1];
|
||
if(caml_notequal([0,sub2_fmtty$0],[0,sub2_fmtty]))
|
||
throw Type_mismatch;
|
||
var
|
||
match$8=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$15,fmt,fmtty_rest$7),
|
||
fmt$8=match$8[2],
|
||
sub_fmtty_rest$16=match$8[1];
|
||
return [0,[8,sub2_fmtty,sub_fmtty_rest$16],fmt$8]}
|
||
break;
|
||
case 9:
|
||
if(typeof match !== "number" && 9 === match[0])
|
||
{var
|
||
fmtty_rest$8=match[3],
|
||
sub2_fmtty$1=match[2],
|
||
sub1_fmtty=match[1],
|
||
sub_fmtty_rest$17=sub_fmtty[3],
|
||
sub2_fmtty$2=sub_fmtty[2],
|
||
sub1_fmtty$0=sub_fmtty[1],
|
||
_rG_=[0,erase_rel(sub1_fmtty)];
|
||
if(caml_notequal([0,erase_rel(sub1_fmtty$0)],_rG_))
|
||
throw Type_mismatch;
|
||
var _rH_=[0,erase_rel(sub2_fmtty$1)];
|
||
if(caml_notequal([0,erase_rel(sub2_fmtty$2)],_rH_))
|
||
throw Type_mismatch;
|
||
var
|
||
sub_fmtty$0=trans(symm(sub1_fmtty),sub2_fmtty$1),
|
||
match$9=fmtty_rel_det(sub_fmtty$0),
|
||
f4=match$9[4],
|
||
f2=match$9[2];
|
||
caml_call1(f2,0);
|
||
caml_call1(f4,0);
|
||
var
|
||
match$10=
|
||
type_ignored_format_substituti
|
||
(erase_rel(sub_fmtty_rest$17),fmt,fmtty_rest$8),
|
||
fmt$9=match$10[2],
|
||
sub_fmtty_rest$18=match$10[1];
|
||
return [0,
|
||
[9,sub1_fmtty,sub2_fmtty$1,symm(sub_fmtty_rest$18)],
|
||
fmt$9]}
|
||
break;
|
||
case 10:
|
||
if(typeof match !== "number" && 10 === match[0])
|
||
{var
|
||
fmtty_rest$9=match[1],
|
||
sub_fmtty_rest$19=sub_fmtty[1],
|
||
match$11=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$19,fmt,fmtty_rest$9),
|
||
fmt$10=match$11[2],
|
||
sub_fmtty_rest$20=match$11[1];
|
||
return [0,[10,sub_fmtty_rest$20],fmt$10]}
|
||
break;
|
||
case 11:
|
||
if(typeof match !== "number" && 11 === match[0])
|
||
{var
|
||
fmtty_rest$10=match[1],
|
||
sub_fmtty_rest$21=sub_fmtty[1],
|
||
match$12=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$21,fmt,fmtty_rest$10),
|
||
fmt$11=match$12[2],
|
||
sub_fmtty_rest$22=match$12[1];
|
||
return [0,[11,sub_fmtty_rest$22],fmt$11]}
|
||
break;
|
||
case 13:
|
||
if(typeof match !== "number" && 13 === match[0])
|
||
{var
|
||
fmtty_rest$11=match[1],
|
||
sub_fmtty_rest$23=sub_fmtty[1],
|
||
match$13=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$23,fmt,fmtty_rest$11),
|
||
fmt$12=match$13[2],
|
||
sub_fmtty_rest$24=match$13[1];
|
||
return [0,[13,sub_fmtty_rest$24],fmt$12]}
|
||
break;
|
||
case 14:
|
||
if(typeof match !== "number" && 14 === match[0])
|
||
{var
|
||
fmtty_rest$12=match[1],
|
||
sub_fmtty_rest$25=sub_fmtty[1],
|
||
match$14=
|
||
type_ignored_format_substituti
|
||
(sub_fmtty_rest$25,fmt,fmtty_rest$12),
|
||
fmt$13=match$14[2],
|
||
sub_fmtty_rest$26=match$14[1];
|
||
return [0,[14,sub_fmtty_rest$26],fmt$13]}
|
||
break
|
||
}
|
||
throw Type_mismatch}
|
||
function recast(fmt,fmtty){return type_format(fmt,erase_rel(symm(fmtty)))}
|
||
function fix_padding(padty,width,str)
|
||
{var
|
||
len=caml_ml_string_length(str),
|
||
padty$0=0 <= width?padty:0,
|
||
width$0=abs(width);
|
||
if(width$0 <= len)return str;
|
||
var _rF_=2 === padty$0?48:32,res=make(width$0,_rF_);
|
||
switch(padty$0)
|
||
{case 0:blit$0(str,0,res,0,len);break;
|
||
case 1:blit$0(str,0,res,width$0 - len | 0,len);break;
|
||
default:
|
||
var switch$0=0;
|
||
if(0 < len)
|
||
{var switch$1=0;
|
||
if
|
||
(43
|
||
!==
|
||
caml_string_get(str,0)
|
||
&&
|
||
45
|
||
!==
|
||
caml_string_get(str,0)
|
||
&&
|
||
32
|
||
!==
|
||
caml_string_get(str,0))
|
||
{switch$0 = 1;switch$1 = 1}
|
||
if(! switch$1)
|
||
{caml_bytes_set(res,0,caml_string_get(str,0));
|
||
blit$0(str,1,res,(width$0 - len | 0) + 1 | 0,len - 1 | 0)}}
|
||
else
|
||
switch$0 = 1;
|
||
if(switch$0)
|
||
{var switch$2=0;
|
||
if(1 < len && 48 === caml_string_get(str,0))
|
||
{var switch$3=0;
|
||
if
|
||
(120
|
||
!==
|
||
caml_string_get(str,1)
|
||
&&
|
||
88
|
||
!==
|
||
caml_string_get(str,1))
|
||
{switch$2 = 1;switch$3 = 1}
|
||
if(! switch$3)
|
||
{caml_bytes_set(res,1,caml_string_get(str,1));
|
||
blit$0(str,2,res,(width$0 - len | 0) + 2 | 0,len - 2 | 0)}}
|
||
else
|
||
switch$2 = 1;
|
||
if(switch$2)blit$0(str,0,res,width$0 - len | 0,len)}}
|
||
return caml_string_of_bytes(res)}
|
||
function fix_int_precision(prec,str)
|
||
{var
|
||
prec$0=abs(prec),
|
||
len=caml_ml_string_length(str),
|
||
c=caml_string_get(str,0),
|
||
switch$0=0;
|
||
if(58 <= c)
|
||
{if(71 <= c)
|
||
{if(! (5 < (c - 97 | 0) >>> 0))switch$0 = 1}
|
||
else
|
||
if(65 <= c)switch$0 = 1}
|
||
else
|
||
{var switch$1=0;
|
||
if(32 !== c)
|
||
if(43 <= c)
|
||
{var switcher=c - 43 | 0;
|
||
switch(switcher)
|
||
{case 5:
|
||
if(len < (prec$0 + 2 | 0) && 1 < len)
|
||
{var switch$2=0;
|
||
if
|
||
(120
|
||
===
|
||
caml_string_get(str,1)
|
||
||
|
||
88
|
||
===
|
||
caml_string_get(str,1))
|
||
switch$2 = 1;
|
||
if(switch$2)
|
||
{var res$1=make(prec$0 + 2 | 0,48);
|
||
caml_bytes_set(res$1,1,caml_string_get(str,1));
|
||
blit$0(str,2,res$1,(prec$0 - len | 0) + 4 | 0,len - 2 | 0);
|
||
return caml_string_of_bytes(res$1)}}
|
||
switch$0 = 1;
|
||
switch$1 = 1;
|
||
break;
|
||
case 0:
|
||
case 2:break;
|
||
case 1:
|
||
case 3:
|
||
case 4:switch$1 = 1;break;
|
||
default:switch$0 = 1;switch$1 = 1}}
|
||
else
|
||
switch$1 = 1;
|
||
if(! switch$1 && len < (prec$0 + 1 | 0))
|
||
{var res$0=make(prec$0 + 1 | 0,48);
|
||
caml_bytes_set(res$0,0,c);
|
||
blit$0(str,1,res$0,(prec$0 - len | 0) + 2 | 0,len - 1 | 0);
|
||
return caml_string_of_bytes(res$0)}}
|
||
if(switch$0 && len < prec$0)
|
||
{var res=make(prec$0,48);
|
||
blit$0(str,0,res,prec$0 - len | 0,len);
|
||
return caml_string_of_bytes(res)}
|
||
return str}
|
||
function string_to_caml_string(str)
|
||
{var
|
||
str$0=escaped$1(str),
|
||
l=caml_ml_string_length(str$0),
|
||
res=make(l + 2 | 0,34);
|
||
caml_blit_string(str$0,0,res,1,l);
|
||
return caml_string_of_bytes(res)}
|
||
function format_of_fconv(fconv,prec)
|
||
{var
|
||
prec$0=abs(prec),
|
||
symb=char_of_fconv(_ao_,fconv),
|
||
buf=buffer_create(16);
|
||
buffer_add_char(buf,37);
|
||
bprint_fconv_flag(buf,fconv);
|
||
buffer_add_char(buf,46);
|
||
buffer_add_string(buf,caml_string_of_jsbytes("" + prec$0));
|
||
buffer_add_char(buf,symb);
|
||
return buffer_contents(buf)}
|
||
function transform_int_alt(iconv,s)
|
||
{if(13 <= iconv)
|
||
{var n=[0,0],_rA_=caml_ml_string_length(s) - 1 | 0,_rz_=0;
|
||
if(! (_rA_ < 0))
|
||
{var i$0=_rz_;
|
||
for(;;)
|
||
{var match=caml_string_unsafe_get(s,i$0),switcher$0=match - 48 | 0;
|
||
if(! (9 < switcher$0 >>> 0))n[1]++;
|
||
var _rE_=i$0 + 1 | 0;
|
||
if(_rA_ !== i$0){var i$0=_rE_;continue}
|
||
break}}
|
||
var
|
||
digits=n[1],
|
||
buf=
|
||
caml_create_bytes
|
||
(caml_ml_string_length(s) + ((digits - 1 | 0) / 3 | 0) | 0),
|
||
pos=[0,0],
|
||
put=function(c){caml_bytes_set(buf,pos[1],c);pos[1]++;return 0},
|
||
left=[0,((digits - 1 | 0) % 3 | 0) + 1 | 0],
|
||
_rC_=caml_ml_string_length(s) - 1 | 0,
|
||
_rB_=0;
|
||
if(! (_rC_ < 0))
|
||
{var i=_rB_;
|
||
for(;;)
|
||
{var c=caml_string_unsafe_get(s,i),switcher=c - 48 | 0;
|
||
if(9 < switcher >>> 0)
|
||
put(c);
|
||
else
|
||
{if(0 === left[1]){put(95);left[1] = 3}left[1] += -1;put(c)}
|
||
var _rD_=i + 1 | 0;
|
||
if(_rC_ !== i){var i=_rD_;continue}
|
||
break}}
|
||
return caml_string_of_bytes(buf)}
|
||
return s}
|
||
function convert_int(iconv,n)
|
||
{switch(iconv)
|
||
{case 1:var _ry_=cst_d$3;break;
|
||
case 2:var _ry_=cst_d$4;break;
|
||
case 4:var _ry_=cst_i$1;break;
|
||
case 5:var _ry_=cst_i$2;break;
|
||
case 6:var _ry_=cst_x;break;
|
||
case 7:var _ry_=cst_x$0;break;
|
||
case 8:var _ry_=cst_X$0;break;
|
||
case 9:var _ry_=cst_X$1;break;
|
||
case 10:var _ry_=cst_o;break;
|
||
case 11:var _ry_=cst_o$0;break;
|
||
case 0:
|
||
case 13:var _ry_=cst_d$2;break;
|
||
case 3:
|
||
case 14:var _ry_=cst_i$0;break;
|
||
default:var _ry_=cst_u}
|
||
return transform_int_alt(iconv,caml_format_int(_ry_,n))}
|
||
function convert_int32(iconv,n)
|
||
{switch(iconv)
|
||
{case 1:var _rx_=cst_ld$0;break;
|
||
case 2:var _rx_=cst_ld$1;break;
|
||
case 4:var _rx_=cst_li$1;break;
|
||
case 5:var _rx_=cst_li$2;break;
|
||
case 6:var _rx_=cst_lx;break;
|
||
case 7:var _rx_=cst_lx$0;break;
|
||
case 8:var _rx_=cst_lX;break;
|
||
case 9:var _rx_=cst_lX$0;break;
|
||
case 10:var _rx_=cst_lo;break;
|
||
case 11:var _rx_=cst_lo$0;break;
|
||
case 0:
|
||
case 13:var _rx_=cst_ld;break;
|
||
case 3:
|
||
case 14:var _rx_=cst_li$0;break;
|
||
default:var _rx_=cst_lu}
|
||
return transform_int_alt(iconv,caml_format_int(_rx_,n))}
|
||
function convert_nativeint(iconv,n)
|
||
{switch(iconv)
|
||
{case 1:var _rw_=cst_nd$0;break;
|
||
case 2:var _rw_=cst_nd$1;break;
|
||
case 4:var _rw_=cst_ni$1;break;
|
||
case 5:var _rw_=cst_ni$2;break;
|
||
case 6:var _rw_=cst_nx;break;
|
||
case 7:var _rw_=cst_nx$0;break;
|
||
case 8:var _rw_=cst_nX;break;
|
||
case 9:var _rw_=cst_nX$0;break;
|
||
case 10:var _rw_=cst_no;break;
|
||
case 11:var _rw_=cst_no$0;break;
|
||
case 0:
|
||
case 13:var _rw_=cst_nd;break;
|
||
case 3:
|
||
case 14:var _rw_=cst_ni$0;break;
|
||
default:var _rw_=cst_nu}
|
||
return transform_int_alt(iconv,caml_format_int(_rw_,n))}
|
||
function convert_int64(iconv,n)
|
||
{switch(iconv)
|
||
{case 1:var _rv_=cst_Ld$0;break;
|
||
case 2:var _rv_=cst_Ld$1;break;
|
||
case 4:var _rv_=cst_Li$1;break;
|
||
case 5:var _rv_=cst_Li$2;break;
|
||
case 6:var _rv_=cst_Lx;break;
|
||
case 7:var _rv_=cst_Lx$0;break;
|
||
case 8:var _rv_=cst_LX;break;
|
||
case 9:var _rv_=cst_LX$0;break;
|
||
case 10:var _rv_=cst_Lo;break;
|
||
case 11:var _rv_=cst_Lo$0;break;
|
||
case 0:
|
||
case 13:var _rv_=cst_Ld;break;
|
||
case 3:
|
||
case 14:var _rv_=cst_Li$0;break;
|
||
default:var _rv_=cst_Lu}
|
||
return transform_int_alt(iconv,caml_int64_format(_rv_,n))}
|
||
function convert_float(fconv,prec,x)
|
||
{function hex(param)
|
||
{switch(fconv[1])
|
||
{case 0:var sign=45;break;
|
||
case 1:var sign=43;break;
|
||
default:var sign=32}
|
||
return runtime.caml_hexstring_of_float(x,prec,sign)}
|
||
function caml_special_val(str)
|
||
{var match=runtime.caml_classify_float(x);
|
||
return 3 === match
|
||
?x < 0.?cst_neg_infinity:cst_infinity
|
||
:4 <= match?cst_nan:str}
|
||
switch(fconv[2])
|
||
{case 5:
|
||
var
|
||
str=caml_format_float(format_of_fconv(fconv,prec),x),
|
||
len=caml_ml_string_length(str),
|
||
i=0;
|
||
for(;;)
|
||
{if(i === len)
|
||
var _rt_=0;
|
||
else
|
||
{var match=caml_string_get(str,i),_rs_=match - 46 | 0,switch$0=0;
|
||
if(23 < _rs_ >>> 0)
|
||
{if(55 === _rs_)switch$0 = 1}
|
||
else
|
||
if(21 < (_rs_ - 1 | 0) >>> 0)switch$0 = 1;
|
||
if(! switch$0){var i$0=i + 1 | 0,i=i$0;continue}
|
||
var _rt_=1}
|
||
var _ru_=_rt_?str:symbol(str,cst$29);
|
||
return caml_special_val(_ru_)}
|
||
case 6:return hex(0);
|
||
case 7:return uppercase_ascii$1(hex(0));
|
||
case 8:return caml_special_val(hex(0));
|
||
default:return caml_format_float(format_of_fconv(fconv,prec),x)}}
|
||
function string_of_fmtty(fmtty)
|
||
{var buf=buffer_create(16);
|
||
bprint_fmtty(buf,fmtty);
|
||
return buffer_contents(buf)}
|
||
function make_int_padding_precision(k,acc,fmt,pad,match,trans,iconv)
|
||
{if(typeof pad === "number")
|
||
{if(typeof match === "number")
|
||
return match
|
||
?function(p,x)
|
||
{var str=fix_int_precision(p,caml_call2(trans,iconv,x));
|
||
return make_printf(k,[4,acc,str],fmt)}
|
||
:function(x)
|
||
{var str=caml_call2(trans,iconv,x);
|
||
return make_printf(k,[4,acc,str],fmt)};
|
||
var p=match[1];
|
||
return function(x)
|
||
{var str=fix_int_precision(p,caml_call2(trans,iconv,x));
|
||
return make_printf(k,[4,acc,str],fmt)}}
|
||
else
|
||
{if(0 === pad[0])
|
||
{var _rp_=pad[2],_rq_=pad[1];
|
||
if(typeof match === "number")
|
||
return match
|
||
?function(p,x)
|
||
{var
|
||
str=
|
||
fix_padding
|
||
(_rq_,_rp_,fix_int_precision(p,caml_call2(trans,iconv,x)));
|
||
return make_printf(k,[4,acc,str],fmt)}
|
||
:function(x)
|
||
{var str=fix_padding(_rq_,_rp_,caml_call2(trans,iconv,x));
|
||
return make_printf(k,[4,acc,str],fmt)};
|
||
var p$0=match[1];
|
||
return function(x)
|
||
{var
|
||
str=
|
||
fix_padding
|
||
(_rq_,_rp_,fix_int_precision(p$0,caml_call2(trans,iconv,x)));
|
||
return make_printf(k,[4,acc,str],fmt)}}
|
||
var _rr_=pad[1];
|
||
if(typeof match === "number")
|
||
return match
|
||
?function(w,p,x)
|
||
{var
|
||
str=
|
||
fix_padding
|
||
(_rr_,w,fix_int_precision(p,caml_call2(trans,iconv,x)));
|
||
return make_printf(k,[4,acc,str],fmt)}
|
||
:function(w,x)
|
||
{var str=fix_padding(_rr_,w,caml_call2(trans,iconv,x));
|
||
return make_printf(k,[4,acc,str],fmt)};
|
||
var p$1=match[1];
|
||
return function(w,x)
|
||
{var
|
||
str=
|
||
fix_padding
|
||
(_rr_,w,fix_int_precision(p$1,caml_call2(trans,iconv,x)));
|
||
return make_printf(k,[4,acc,str],fmt)}}}
|
||
function make_padding(k,acc,fmt,pad,trans)
|
||
{if(typeof pad === "number")
|
||
return function(x)
|
||
{var new_acc=[4,acc,caml_call1(trans,x)];
|
||
return make_printf(k,new_acc,fmt)};
|
||
else
|
||
{if(0 === pad[0])
|
||
{var width=pad[2],padty=pad[1];
|
||
return function(x)
|
||
{var new_acc=[4,acc,fix_padding(padty,width,caml_call1(trans,x))];
|
||
return make_printf(k,new_acc,fmt)}}
|
||
var padty$0=pad[1];
|
||
return function(w,x)
|
||
{var new_acc=[4,acc,fix_padding(padty$0,w,caml_call1(trans,x))];
|
||
return make_printf(k,new_acc,fmt)}}}
|
||
function make_printf$0(counter,k,acc,fmt)
|
||
{var k$0=k,acc$0=acc,fmt$0=fmt;
|
||
for(;;)
|
||
if(typeof fmt$0 === "number")
|
||
return caml_call1(k$0,acc$0);
|
||
else
|
||
switch(fmt$0[0])
|
||
{case 0:
|
||
var rest=fmt$0[1];
|
||
return function(c)
|
||
{var new_acc=[5,acc$0,c];return make_printf(k$0,new_acc,rest)};
|
||
case 1:
|
||
var rest$0=fmt$0[1];
|
||
return function(c)
|
||
{var
|
||
str=escaped(c),
|
||
l=caml_ml_string_length(str),
|
||
res=make(l + 2 | 0,39);
|
||
caml_blit_string(str,0,res,1,l);
|
||
var new_acc=[4,acc$0,caml_string_of_bytes(res)];
|
||
return make_printf(k$0,new_acc,rest$0)};
|
||
case 2:
|
||
var rest$1=fmt$0[2],pad=fmt$0[1];
|
||
return make_padding(k$0,acc$0,rest$1,pad,function(str){return str});
|
||
case 3:
|
||
var rest$2=fmt$0[2],pad$0=fmt$0[1];
|
||
return make_padding(k$0,acc$0,rest$2,pad$0,string_to_caml_string);
|
||
case 4:
|
||
var rest$3=fmt$0[4],prec=fmt$0[3],pad$1=fmt$0[2],iconv=fmt$0[1];
|
||
return make_int_padding_precision
|
||
(k$0,acc$0,rest$3,pad$1,prec,convert_int,iconv);
|
||
case 5:
|
||
var
|
||
rest$4=fmt$0[4],
|
||
prec$0=fmt$0[3],
|
||
pad$2=fmt$0[2],
|
||
iconv$0=fmt$0[1];
|
||
return make_int_padding_precision
|
||
(k$0,acc$0,rest$4,pad$2,prec$0,convert_int32,iconv$0);
|
||
case 6:
|
||
var
|
||
rest$5=fmt$0[4],
|
||
prec$1=fmt$0[3],
|
||
pad$3=fmt$0[2],
|
||
iconv$1=fmt$0[1];
|
||
return make_int_padding_precision
|
||
(k$0,acc$0,rest$5,pad$3,prec$1,convert_nativeint,iconv$1);
|
||
case 7:
|
||
var
|
||
rest$6=fmt$0[4],
|
||
prec$2=fmt$0[3],
|
||
pad$4=fmt$0[2],
|
||
iconv$2=fmt$0[1];
|
||
return make_int_padding_precision
|
||
(k$0,acc$0,rest$6,pad$4,prec$2,convert_int64,iconv$2);
|
||
case 8:
|
||
var rest$7=fmt$0[4],prec$3=fmt$0[3],pad$5=fmt$0[2],fconv=fmt$0[1];
|
||
if(typeof pad$5 === "number")
|
||
{if(typeof prec$3 === "number")
|
||
return prec$3
|
||
?function(p,x)
|
||
{var str=convert_float(fconv,p,x);
|
||
return make_printf(k$0,[4,acc$0,str],rest$7)}
|
||
:function(x)
|
||
{var
|
||
str=
|
||
convert_float(fconv,default_float_precision(fconv),x);
|
||
return make_printf(k$0,[4,acc$0,str],rest$7)};
|
||
var p=prec$3[1];
|
||
return function(x)
|
||
{var str=convert_float(fconv,p,x);
|
||
return make_printf(k$0,[4,acc$0,str],rest$7)}}
|
||
else
|
||
{if(0 === pad$5[0])
|
||
{var _rm_=pad$5[2],_rn_=pad$5[1];
|
||
if(typeof prec$3 === "number")
|
||
return prec$3
|
||
?function(p,x)
|
||
{var str=fix_padding(_rn_,_rm_,convert_float(fconv,p,x));
|
||
return make_printf(k$0,[4,acc$0,str],rest$7)}
|
||
:function(x)
|
||
{var
|
||
str=convert_float(fconv,default_float_precision(fconv),x),
|
||
str$0=fix_padding(_rn_,_rm_,str);
|
||
return make_printf(k$0,[4,acc$0,str$0],rest$7)};
|
||
var p$0=prec$3[1];
|
||
return function(x)
|
||
{var str=fix_padding(_rn_,_rm_,convert_float(fconv,p$0,x));
|
||
return make_printf(k$0,[4,acc$0,str],rest$7)}}
|
||
var _ro_=pad$5[1];
|
||
if(typeof prec$3 === "number")
|
||
return prec$3
|
||
?function(w,p,x)
|
||
{var str=fix_padding(_ro_,w,convert_float(fconv,p,x));
|
||
return make_printf(k$0,[4,acc$0,str],rest$7)}
|
||
:function(w,x)
|
||
{var
|
||
str=convert_float(fconv,default_float_precision(fconv),x),
|
||
str$0=fix_padding(_ro_,w,str);
|
||
return make_printf(k$0,[4,acc$0,str$0],rest$7)};
|
||
var p$1=prec$3[1];
|
||
return function(w,x)
|
||
{var str=fix_padding(_ro_,w,convert_float(fconv,p$1,x));
|
||
return make_printf(k$0,[4,acc$0,str],rest$7)}}
|
||
case 9:
|
||
var rest$8=fmt$0[2],pad$6=fmt$0[1];
|
||
return make_padding(k$0,acc$0,rest$8,pad$6,string_of_bool);
|
||
case 10:
|
||
var fmt$1=fmt$0[1],acc$1=[7,acc$0],acc$0=acc$1,fmt$0=fmt$1;
|
||
continue;
|
||
case 11:
|
||
var
|
||
fmt$2=fmt$0[2],
|
||
str=fmt$0[1],
|
||
acc$2=[2,acc$0,str],
|
||
acc$0=acc$2,
|
||
fmt$0=fmt$2;
|
||
continue;
|
||
case 12:
|
||
var
|
||
fmt$3=fmt$0[2],
|
||
chr=fmt$0[1],
|
||
acc$3=[3,acc$0,chr],
|
||
acc$0=acc$3,
|
||
fmt$0=fmt$3;
|
||
continue;
|
||
case 13:
|
||
var
|
||
rest$9=fmt$0[3],
|
||
sub_fmtty=fmt$0[2],
|
||
ty=string_of_fmtty(sub_fmtty);
|
||
return function(str){return make_printf(k$0,[4,acc$0,ty],rest$9)};
|
||
case 14:
|
||
var rest$10=fmt$0[3],fmtty=fmt$0[2];
|
||
return function(param)
|
||
{var fmt=param[1];
|
||
return make_printf
|
||
(k$0,acc$0,concat_fmt(recast(fmt,fmtty),rest$10))};
|
||
case 15:
|
||
var rest$11=fmt$0[1];
|
||
return function(f,x)
|
||
{return make_printf
|
||
(k$0,
|
||
[6,acc$0,function(o){return caml_call2(f,o,x)}],
|
||
rest$11)};
|
||
case 16:
|
||
var rest$12=fmt$0[1];
|
||
return function(f){return make_printf(k$0,[6,acc$0,f],rest$12)};
|
||
case 17:
|
||
var
|
||
fmt$4=fmt$0[2],
|
||
fmting_lit=fmt$0[1],
|
||
acc$4=[0,acc$0,fmting_lit],
|
||
acc$0=acc$4,
|
||
fmt$0=fmt$4;
|
||
continue;
|
||
case 18:
|
||
var _rk_=fmt$0[1];
|
||
if(0 === _rk_[0])
|
||
{var
|
||
rest$13=fmt$0[2],
|
||
match=_rk_[1],
|
||
fmt$5=match[1],
|
||
k$3=
|
||
function(acc,k,rest)
|
||
{function k$0(kacc)
|
||
{return make_printf(k,[1,acc,[0,kacc]],rest)}
|
||
return k$0},
|
||
k$1=k$3(acc$0,k$0,rest$13),
|
||
k$0=k$1,
|
||
acc$0=0,
|
||
fmt$0=fmt$5;
|
||
continue}
|
||
var
|
||
rest$14=fmt$0[2],
|
||
match$0=_rk_[1],
|
||
fmt$6=match$0[1],
|
||
k$4=
|
||
function(acc,k,rest)
|
||
{function k$0(kacc){return make_printf(k,[1,acc,[1,kacc]],rest)}
|
||
return k$0},
|
||
k$2=k$4(acc$0,k$0,rest$14),
|
||
k$0=k$2,
|
||
acc$0=0,
|
||
fmt$0=fmt$6;
|
||
continue;
|
||
case 19:throw [0,Assert_failure,_ap_];
|
||
case 20:
|
||
var rest$15=fmt$0[3],new_acc=[8,acc$0,cst_Printf_bad_conversion];
|
||
return function(param){return make_printf(k$0,new_acc,rest$15)};
|
||
case 21:
|
||
var rest$16=fmt$0[2];
|
||
return function(n)
|
||
{var new_acc=[4,acc$0,caml_format_int(cst_u$0,n)];
|
||
return make_printf(k$0,new_acc,rest$16)};
|
||
case 22:
|
||
var rest$17=fmt$0[1];
|
||
return function(c)
|
||
{var new_acc=[5,acc$0,c];return make_printf(k$0,new_acc,rest$17)};
|
||
case 23:
|
||
var rest$18=fmt$0[2],ign=fmt$0[1];
|
||
if(counter < 50)
|
||
{var counter$1=counter + 1 | 0;
|
||
return make_ignored_param$0(counter$1,k$0,acc$0,ign,rest$18)}
|
||
return caml_trampoline_return
|
||
(make_ignored_param$0,[0,k$0,acc$0,ign,rest$18]);
|
||
default:
|
||
var
|
||
rest$19=fmt$0[3],
|
||
f=fmt$0[2],
|
||
arity=fmt$0[1],
|
||
_rl_=caml_call1(f,0);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return make_custom$0(counter$0,k$0,acc$0,rest$19,arity,_rl_)}
|
||
return caml_trampoline_return
|
||
(make_custom$0,[0,k$0,acc$0,rest$19,arity,_rl_])}}
|
||
function make_ignored_param$0(counter,k,acc,ign,fmt)
|
||
{if(typeof ign === "number")
|
||
switch(ign)
|
||
{case 0:
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return make_invalid_arg(counter$0,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 1:
|
||
if(counter < 50)
|
||
{var counter$1=counter + 1 | 0;
|
||
return make_invalid_arg(counter$1,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 2:throw [0,Assert_failure,_aq_];
|
||
default:
|
||
if(counter < 50)
|
||
{var counter$2=counter + 1 | 0;
|
||
return make_invalid_arg(counter$2,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])}
|
||
else
|
||
switch(ign[0])
|
||
{case 0:
|
||
if(counter < 50)
|
||
{var counter$3=counter + 1 | 0;
|
||
return make_invalid_arg(counter$3,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 1:
|
||
if(counter < 50)
|
||
{var counter$4=counter + 1 | 0;
|
||
return make_invalid_arg(counter$4,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 2:
|
||
if(counter < 50)
|
||
{var counter$5=counter + 1 | 0;
|
||
return make_invalid_arg(counter$5,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 3:
|
||
if(counter < 50)
|
||
{var counter$6=counter + 1 | 0;
|
||
return make_invalid_arg(counter$6,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 4:
|
||
if(counter < 50)
|
||
{var counter$7=counter + 1 | 0;
|
||
return make_invalid_arg(counter$7,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 5:
|
||
if(counter < 50)
|
||
{var counter$8=counter + 1 | 0;
|
||
return make_invalid_arg(counter$8,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 6:
|
||
if(counter < 50)
|
||
{var counter$9=counter + 1 | 0;
|
||
return make_invalid_arg(counter$9,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 7:
|
||
if(counter < 50)
|
||
{var counter$10=counter + 1 | 0;
|
||
return make_invalid_arg(counter$10,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 8:
|
||
if(counter < 50)
|
||
{var counter$11=counter + 1 | 0;
|
||
return make_invalid_arg(counter$11,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
case 9:
|
||
var fmtty=ign[2];
|
||
if(counter < 50)
|
||
{var counter$14=counter + 1 | 0;
|
||
return make_from_fmtty$0(counter$14,k,acc,fmtty,fmt)}
|
||
return caml_trampoline_return(make_from_fmtty$0,[0,k,acc,fmtty,fmt]);
|
||
case 10:
|
||
if(counter < 50)
|
||
{var counter$12=counter + 1 | 0;
|
||
return make_invalid_arg(counter$12,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]);
|
||
default:
|
||
if(counter < 50)
|
||
{var counter$13=counter + 1 | 0;
|
||
return make_invalid_arg(counter$13,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])}}
|
||
function make_from_fmtty$0(counter,k,acc,fmtty,fmt)
|
||
{if(typeof fmtty === "number")
|
||
{if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return make_invalid_arg(counter$0,k,acc,fmt)}
|
||
return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])}
|
||
else
|
||
switch(fmtty[0])
|
||
{case 0:
|
||
var rest=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest,fmt)};
|
||
case 1:
|
||
var rest$0=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$0,fmt)};
|
||
case 2:
|
||
var rest$1=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$1,fmt)};
|
||
case 3:
|
||
var rest$2=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$2,fmt)};
|
||
case 4:
|
||
var rest$3=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$3,fmt)};
|
||
case 5:
|
||
var rest$4=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$4,fmt)};
|
||
case 6:
|
||
var rest$5=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$5,fmt)};
|
||
case 7:
|
||
var rest$6=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$6,fmt)};
|
||
case 8:
|
||
var rest$7=fmtty[2];
|
||
return function(param){return make_from_fmtty(k,acc,rest$7,fmt)};
|
||
case 9:
|
||
var
|
||
rest$8=fmtty[3],
|
||
ty2=fmtty[2],
|
||
ty1=fmtty[1],
|
||
ty=trans(symm(ty1),ty2);
|
||
return function(param)
|
||
{return make_from_fmtty(k,acc,concat_fmtty(ty,rest$8),fmt)};
|
||
case 10:
|
||
var rest$9=fmtty[1];
|
||
return function(param,_rj_)
|
||
{return make_from_fmtty(k,acc,rest$9,fmt)};
|
||
case 11:
|
||
var rest$10=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$10,fmt)};
|
||
case 12:
|
||
var rest$11=fmtty[1];
|
||
return function(param){return make_from_fmtty(k,acc,rest$11,fmt)};
|
||
case 13:throw [0,Assert_failure,_ar_];
|
||
default:throw [0,Assert_failure,_as_]}}
|
||
function make_invalid_arg(counter,k,acc,fmt)
|
||
{var _ri_=[8,acc,cst_Printf_bad_conversion$0];
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return make_printf$0(counter$0,k,_ri_,fmt)}
|
||
return caml_trampoline_return(make_printf$0,[0,k,_ri_,fmt])}
|
||
function make_custom$0(counter,k,acc,rest,arity,f)
|
||
{if(arity)
|
||
{var arity$0=arity[1];
|
||
return function(x)
|
||
{return make_custom(k,acc,rest,arity$0,caml_call1(f,x))}}
|
||
var _rh_=[4,acc,f];
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return make_printf$0(counter$0,k,_rh_,rest)}
|
||
return caml_trampoline_return(make_printf$0,[0,k,_rh_,rest])}
|
||
function make_printf(k,acc,fmt)
|
||
{return caml_trampoline(make_printf$0(0,k,acc,fmt))}
|
||
function make_ignored_param(k,acc,ign,fmt)
|
||
{return caml_trampoline(make_ignored_param$0(0,k,acc,ign,fmt))}
|
||
function make_from_fmtty(k,acc,fmtty,fmt)
|
||
{return caml_trampoline(make_from_fmtty$0(0,k,acc,fmtty,fmt))}
|
||
function make_custom(k,acc,rest,arity,f)
|
||
{return caml_trampoline(make_custom$0(0,k,acc,rest,arity,f))}
|
||
function fn_of_padding_precision(k,o,fmt,pad,prec)
|
||
{if(typeof pad === "number")
|
||
{if(typeof prec === "number")
|
||
{if(prec)
|
||
{var _qP_=make_iprintf(k,o,fmt),_qQ_=function(_q7_){return _qP_};
|
||
return function(_q6_){return _qQ_}}
|
||
var _qR_=make_iprintf(k,o,fmt);
|
||
return function(_q5_){return _qR_}}
|
||
var _qS_=make_iprintf(k,o,fmt);
|
||
return function(_q4_){return _qS_}}
|
||
else
|
||
{if(0 === pad[0])
|
||
{if(typeof prec === "number")
|
||
{if(prec)
|
||
{var _qT_=make_iprintf(k,o,fmt),_qU_=function(_rg_){return _qT_};
|
||
return function(_rf_){return _qU_}}
|
||
var _qV_=make_iprintf(k,o,fmt);
|
||
return function(_re_){return _qV_}}
|
||
var _qW_=make_iprintf(k,o,fmt);
|
||
return function(_rd_){return _qW_}}
|
||
if(typeof prec === "number")
|
||
{if(prec)
|
||
{var
|
||
_qX_=make_iprintf(k,o,fmt),
|
||
_qY_=function(_rc_){return _qX_},
|
||
_qZ_=function(_rb_){return _qY_};
|
||
return function(_ra_){return _qZ_}}
|
||
var _q0_=make_iprintf(k,o,fmt),_q1_=function(_q$_){return _q0_};
|
||
return function(_q__){return _q1_}}
|
||
var _q2_=make_iprintf(k,o,fmt),_q3_=function(_q9_){return _q2_};
|
||
return function(_q8_){return _q3_}}}
|
||
function make_iprintf$0(counter,k,o,fmt)
|
||
{var k$0=k,fmt$0=fmt;
|
||
for(;;)
|
||
if(typeof fmt$0 === "number")
|
||
return caml_call1(k$0,o);
|
||
else
|
||
switch(fmt$0[0])
|
||
{case 0:
|
||
var rest=fmt$0[1],_p6_=make_iprintf(k$0,o,rest);
|
||
return function(_qO_){return _p6_};
|
||
case 1:
|
||
var rest$0=fmt$0[1],_p7_=make_iprintf(k$0,o,rest$0);
|
||
return function(_qN_){return _p7_};
|
||
case 2:
|
||
var _p8_=fmt$0[1];
|
||
if(typeof _p8_ === "number")
|
||
{var rest$1=fmt$0[2],_p9_=make_iprintf(k$0,o,rest$1);
|
||
return function(_qJ_){return _p9_}}
|
||
else
|
||
{if(0 === _p8_[0])
|
||
{var rest$2=fmt$0[2],_p__=make_iprintf(k$0,o,rest$2);
|
||
return function(_qM_){return _p__}}
|
||
var
|
||
rest$3=fmt$0[2],
|
||
_p$_=make_iprintf(k$0,o,rest$3),
|
||
_qa_=function(_qL_){return _p$_};
|
||
return function(_qK_){return _qa_}}
|
||
case 3:
|
||
var _qb_=fmt$0[1];
|
||
if(typeof _qb_ === "number")
|
||
{var rest$4=fmt$0[2],_qc_=make_iprintf(k$0,o,rest$4);
|
||
return function(_qF_){return _qc_}}
|
||
else
|
||
{if(0 === _qb_[0])
|
||
{var rest$5=fmt$0[2],_qd_=make_iprintf(k$0,o,rest$5);
|
||
return function(_qI_){return _qd_}}
|
||
var
|
||
rest$6=fmt$0[2],
|
||
_qe_=make_iprintf(k$0,o,rest$6),
|
||
_qf_=function(_qH_){return _qe_};
|
||
return function(_qG_){return _qf_}}
|
||
case 4:
|
||
var rest$7=fmt$0[4],prec=fmt$0[3],pad=fmt$0[2];
|
||
return fn_of_padding_precision(k$0,o,rest$7,pad,prec);
|
||
case 5:
|
||
var rest$8=fmt$0[4],prec$0=fmt$0[3],pad$0=fmt$0[2];
|
||
return fn_of_padding_precision(k$0,o,rest$8,pad$0,prec$0);
|
||
case 6:
|
||
var rest$9=fmt$0[4],prec$1=fmt$0[3],pad$1=fmt$0[2];
|
||
return fn_of_padding_precision(k$0,o,rest$9,pad$1,prec$1);
|
||
case 7:
|
||
var rest$10=fmt$0[4],prec$2=fmt$0[3],pad$2=fmt$0[2];
|
||
return fn_of_padding_precision(k$0,o,rest$10,pad$2,prec$2);
|
||
case 8:
|
||
var rest$11=fmt$0[4],prec$3=fmt$0[3],pad$3=fmt$0[2];
|
||
return fn_of_padding_precision(k$0,o,rest$11,pad$3,prec$3);
|
||
case 9:
|
||
var _qg_=fmt$0[1];
|
||
if(typeof _qg_ === "number")
|
||
{var rest$12=fmt$0[2],_qh_=make_iprintf(k$0,o,rest$12);
|
||
return function(_qB_){return _qh_}}
|
||
else
|
||
{if(0 === _qg_[0])
|
||
{var rest$13=fmt$0[2],_qi_=make_iprintf(k$0,o,rest$13);
|
||
return function(_qE_){return _qi_}}
|
||
var
|
||
rest$14=fmt$0[2],
|
||
_qj_=make_iprintf(k$0,o,rest$14),
|
||
_qk_=function(_qD_){return _qj_};
|
||
return function(_qC_){return _qk_}}
|
||
case 10:var fmt$1=fmt$0[1],fmt$0=fmt$1;continue;
|
||
case 11:var fmt$2=fmt$0[2],fmt$0=fmt$2;continue;
|
||
case 12:var fmt$3=fmt$0[2],fmt$0=fmt$3;continue;
|
||
case 13:
|
||
var rest$15=fmt$0[3],_ql_=make_iprintf(k$0,o,rest$15);
|
||
return function(_qA_){return _ql_};
|
||
case 14:
|
||
var rest$16=fmt$0[3],fmtty=fmt$0[2];
|
||
return function(param)
|
||
{var fmt=param[1];
|
||
return make_iprintf(k$0,o,concat_fmt(recast(fmt,fmtty),rest$16))};
|
||
case 15:
|
||
var
|
||
rest$17=fmt$0[1],
|
||
_qm_=make_iprintf(k$0,o,rest$17),
|
||
_qn_=function(_qz_){return _qm_};
|
||
return function(_qy_){return _qn_};
|
||
case 16:
|
||
var rest$18=fmt$0[1],_qo_=make_iprintf(k$0,o,rest$18);
|
||
return function(_qx_){return _qo_};
|
||
case 17:var fmt$4=fmt$0[2],fmt$0=fmt$4;continue;
|
||
case 18:
|
||
var _qp_=fmt$0[1];
|
||
if(0 === _qp_[0])
|
||
{var
|
||
rest$19=fmt$0[2],
|
||
match=_qp_[1],
|
||
fmt$5=match[1],
|
||
k$3=
|
||
function(k,rest)
|
||
{function k$0(koc){return make_iprintf(k,koc,rest)}return k$0},
|
||
k$1=k$3(k$0,rest$19),
|
||
k$0=k$1,
|
||
fmt$0=fmt$5;
|
||
continue}
|
||
var
|
||
rest$20=fmt$0[2],
|
||
match$0=_qp_[1],
|
||
fmt$6=match$0[1],
|
||
k$4=
|
||
function(k,rest)
|
||
{function k$0(koc){return make_iprintf(k,koc,rest)}return k$0},
|
||
k$2=k$4(k$0,rest$20),
|
||
k$0=k$2,
|
||
fmt$0=fmt$6;
|
||
continue;
|
||
case 19:throw [0,Assert_failure,_at_];
|
||
case 20:
|
||
var rest$21=fmt$0[3],_qq_=make_iprintf(k$0,o,rest$21);
|
||
return function(_qw_){return _qq_};
|
||
case 21:
|
||
var rest$22=fmt$0[2],_qr_=make_iprintf(k$0,o,rest$22);
|
||
return function(_qv_){return _qr_};
|
||
case 22:
|
||
var rest$23=fmt$0[1],_qs_=make_iprintf(k$0,o,rest$23);
|
||
return function(_qu_){return _qs_};
|
||
case 23:
|
||
var rest$24=fmt$0[2],ign=fmt$0[1],_qt_=0;
|
||
return make_ignored_param
|
||
(function(param){return caml_call1(k$0,o)},_qt_,ign,rest$24);
|
||
default:
|
||
var rest$25=fmt$0[3],arity=fmt$0[1];
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return fn_of_custom_arity$0(counter$0,k$0,o,rest$25,arity)}
|
||
return caml_trampoline_return
|
||
(fn_of_custom_arity$0,[0,k$0,o,rest$25,arity])}}
|
||
function fn_of_custom_arity$0(counter,k,o,fmt,param)
|
||
{if(param)
|
||
{var arity=param[1],_p4_=fn_of_custom_arity(k,o,fmt,arity);
|
||
return function(_p5_){return _p4_}}
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return make_iprintf$0(counter$0,k,o,fmt)}
|
||
return caml_trampoline_return(make_iprintf$0,[0,k,o,fmt])}
|
||
function make_iprintf(k,o,fmt)
|
||
{return caml_trampoline(make_iprintf$0(0,k,o,fmt))}
|
||
function fn_of_custom_arity(k,o,fmt,param)
|
||
{return caml_trampoline(fn_of_custom_arity$0(0,k,o,fmt,param))}
|
||
function output_acc(o,acc)
|
||
{var acc$0=acc;
|
||
for(;;)
|
||
if(typeof acc$0 === "number")
|
||
return 0;
|
||
else
|
||
switch(acc$0[0])
|
||
{case 0:
|
||
var
|
||
fmting_lit=acc$0[2],
|
||
p=acc$0[1],
|
||
s=string_of_formatting_lit(fmting_lit);
|
||
output_acc(o,p);
|
||
return output_string(o,s);
|
||
case 1:
|
||
var _p2_=acc$0[2],_p3_=acc$0[1];
|
||
if(0 === _p2_[0])
|
||
{var acc$1=_p2_[1];
|
||
output_acc(o,_p3_);
|
||
output_string(o,cst$30);
|
||
var acc$0=acc$1;
|
||
continue}
|
||
var acc$2=_p2_[1];
|
||
output_acc(o,_p3_);
|
||
output_string(o,cst$31);
|
||
var acc$0=acc$2;
|
||
continue;
|
||
case 6:
|
||
var f=acc$0[2],p$2=acc$0[1];
|
||
output_acc(o,p$2);
|
||
return caml_call1(f,o);
|
||
case 7:var p$3=acc$0[1];output_acc(o,p$3);return caml_ml_flush(o);
|
||
case 8:
|
||
var msg=acc$0[2],p$4=acc$0[1];
|
||
output_acc(o,p$4);
|
||
return invalid_arg(msg);
|
||
case 2:
|
||
case 4:
|
||
var s$0=acc$0[2],p$0=acc$0[1];
|
||
output_acc(o,p$0);
|
||
return output_string(o,s$0);
|
||
default:
|
||
var c=acc$0[2],p$1=acc$0[1];
|
||
output_acc(o,p$1);
|
||
return caml_ml_output_char(o,c)}}
|
||
function bufput_acc(b,acc)
|
||
{var acc$0=acc;
|
||
for(;;)
|
||
if(typeof acc$0 === "number")
|
||
return 0;
|
||
else
|
||
switch(acc$0[0])
|
||
{case 0:
|
||
var
|
||
fmting_lit=acc$0[2],
|
||
p=acc$0[1],
|
||
s=string_of_formatting_lit(fmting_lit);
|
||
bufput_acc(b,p);
|
||
return add_string(b,s);
|
||
case 1:
|
||
var _p0_=acc$0[2],_p1_=acc$0[1];
|
||
if(0 === _p0_[0])
|
||
{var acc$1=_p0_[1];
|
||
bufput_acc(b,_p1_);
|
||
add_string(b,cst$32);
|
||
var acc$0=acc$1;
|
||
continue}
|
||
var acc$2=_p0_[1];
|
||
bufput_acc(b,_p1_);
|
||
add_string(b,cst$33);
|
||
var acc$0=acc$2;
|
||
continue;
|
||
case 6:
|
||
var f=acc$0[2],p$2=acc$0[1];
|
||
bufput_acc(b,p$2);
|
||
return caml_call1(f,b);
|
||
case 7:var acc$3=acc$0[1],acc$0=acc$3;continue;
|
||
case 8:
|
||
var msg=acc$0[2],p$3=acc$0[1];
|
||
bufput_acc(b,p$3);
|
||
return invalid_arg(msg);
|
||
case 2:
|
||
case 4:
|
||
var s$0=acc$0[2],p$0=acc$0[1];
|
||
bufput_acc(b,p$0);
|
||
return add_string(b,s$0);
|
||
default:
|
||
var c=acc$0[2],p$1=acc$0[1];bufput_acc(b,p$1);return add_char(b,c)}}
|
||
function strput_acc(b,acc)
|
||
{var acc$0=acc;
|
||
for(;;)
|
||
if(typeof acc$0 === "number")
|
||
return 0;
|
||
else
|
||
switch(acc$0[0])
|
||
{case 0:
|
||
var
|
||
fmting_lit=acc$0[2],
|
||
p=acc$0[1],
|
||
s=string_of_formatting_lit(fmting_lit);
|
||
strput_acc(b,p);
|
||
return add_string(b,s);
|
||
case 1:
|
||
var _pY_=acc$0[2],_pZ_=acc$0[1];
|
||
if(0 === _pY_[0])
|
||
{var acc$1=_pY_[1];
|
||
strput_acc(b,_pZ_);
|
||
add_string(b,cst$34);
|
||
var acc$0=acc$1;
|
||
continue}
|
||
var acc$2=_pY_[1];
|
||
strput_acc(b,_pZ_);
|
||
add_string(b,cst$35);
|
||
var acc$0=acc$2;
|
||
continue;
|
||
case 6:
|
||
var f=acc$0[2],p$2=acc$0[1];
|
||
strput_acc(b,p$2);
|
||
return add_string(b,caml_call1(f,0));
|
||
case 7:var acc$3=acc$0[1],acc$0=acc$3;continue;
|
||
case 8:
|
||
var msg=acc$0[2],p$3=acc$0[1];
|
||
strput_acc(b,p$3);
|
||
return invalid_arg(msg);
|
||
case 2:
|
||
case 4:
|
||
var s$0=acc$0[2],p$0=acc$0[1];
|
||
strput_acc(b,p$0);
|
||
return add_string(b,s$0);
|
||
default:
|
||
var c=acc$0[2],p$1=acc$0[1];strput_acc(b,p$1);return add_char(b,c)}}
|
||
function failwith_message(param)
|
||
{var fmt=param[1],buf=create$2(256);
|
||
function k(acc){strput_acc(buf,acc);return failwith(contents(buf))}
|
||
return make_printf(k,0,fmt)}
|
||
function open_box_of_string(str)
|
||
{if(caml_string_equal(str,cst$36))return _au_;
|
||
var len=caml_ml_string_length(str);
|
||
function invalid_box(param)
|
||
{return caml_call1(failwith_message(_av_),str)}
|
||
function parse_spaces(i)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(i$0 === len)return i$0;
|
||
var match=caml_string_get(str,i$0);
|
||
if(9 !== match && 32 !== match)return i$0;
|
||
var i$1=i$0 + 1 | 0,i$0=i$1;
|
||
continue}}
|
||
function parse_lword(i,j)
|
||
{var j$0=j;
|
||
for(;;)
|
||
{if(j$0 === len)return j$0;
|
||
var match=caml_string_get(str,j$0),switcher=match - 97 | 0;
|
||
if(25 < switcher >>> 0)return j$0;
|
||
var j$1=j$0 + 1 | 0,j$0=j$1;
|
||
continue}}
|
||
function parse_int(i,j)
|
||
{var j$0=j;
|
||
for(;;)
|
||
{if(j$0 === len)return j$0;
|
||
var match=caml_string_get(str,j$0),switch$0=0;
|
||
if(48 <= match)
|
||
{if(! (58 <= match))switch$0 = 1}
|
||
else
|
||
if(45 === match)switch$0 = 1;
|
||
if(switch$0){var j$1=j$0 + 1 | 0,j$0=j$1;continue}
|
||
return j$0}}
|
||
var
|
||
wstart=parse_spaces(0),
|
||
wend=parse_lword(wstart,wstart),
|
||
box_name=sub$0(str,wstart,wend - wstart | 0),
|
||
nstart=parse_spaces(wend),
|
||
nend=parse_int(nstart,nstart);
|
||
if(nstart === nend)
|
||
var indent=0;
|
||
else
|
||
try
|
||
{var
|
||
_pW_=caml_int_of_string(sub$0(str,nstart,nend - nstart | 0)),
|
||
indent=_pW_}
|
||
catch(_pX_)
|
||
{_pX_ = caml_wrap_exception(_pX_);
|
||
if(_pX_[1] !== Failure)throw _pX_;
|
||
var indent=invalid_box(0)}
|
||
var exp_end=parse_spaces(nend);
|
||
if(exp_end !== len)invalid_box(0);
|
||
var switch$0=0;
|
||
if
|
||
(caml_string_notequal(box_name,cst$37)
|
||
&&
|
||
caml_string_notequal(box_name,cst_b$0))
|
||
var
|
||
box_type=
|
||
caml_string_notequal(box_name,cst_h)
|
||
?caml_string_notequal(box_name,cst_hov)
|
||
?caml_string_notequal(box_name,cst_hv)
|
||
?caml_string_notequal(box_name,cst_v)?invalid_box(0):1
|
||
:2
|
||
:3
|
||
:0;
|
||
else
|
||
switch$0 = 1;
|
||
if(switch$0)var box_type=4;
|
||
return [0,indent,box_type]}
|
||
function make_padding_fmt_ebb(pad,fmt)
|
||
{if(typeof pad === "number")
|
||
return [0,0,fmt];
|
||
else
|
||
{if(0 === pad[0]){var w=pad[2],s=pad[1];return [0,[0,s,w],fmt]}
|
||
var s$0=pad[1];
|
||
return [0,[1,s$0],fmt]}}
|
||
function make_padprec_fmt_ebb(pad,prec,fmt)
|
||
{if(typeof prec === "number")
|
||
var match=prec?[0,1,fmt]:[0,0,fmt];
|
||
else
|
||
var p=prec[1],match=[0,[0,p],fmt];
|
||
var prec$0=match[1];
|
||
if(typeof pad === "number")
|
||
return [0,0,prec$0,fmt];
|
||
else
|
||
{if(0 === pad[0]){var w=pad[2],s=pad[1];return [0,[0,s,w],prec$0,fmt]}
|
||
var s$0=pad[1];
|
||
return [0,[1,s$0],prec$0,fmt]}}
|
||
function fmt_ebb_of_string(legacy_behavior,str)
|
||
{if(legacy_behavior)
|
||
var flag=legacy_behavior[1],legacy_behavior$0=flag;
|
||
else
|
||
var legacy_behavior$0=1;
|
||
function invalid_format_message(str_ind,msg)
|
||
{return caml_call3(failwith_message(_aw_),str,str_ind,msg)}
|
||
function unexpected_end_of_format(end_ind)
|
||
{return invalid_format_message(end_ind,cst_unexpected_end_of_format)}
|
||
function invalid_format_without(str_ind,c,s)
|
||
{return caml_call4(failwith_message(_ax_),str,str_ind,c,s)}
|
||
function expected_character(str_ind,expected,read)
|
||
{return caml_call4(failwith_message(_ay_),str,str_ind,expected,read)}
|
||
function add_literal(lit_start,str_ind,fmt)
|
||
{var size=str_ind - lit_start | 0;
|
||
return 0 === size
|
||
?[0,fmt]
|
||
:1 === size
|
||
?[0,[12,caml_string_get(str,lit_start),fmt]]
|
||
:[0,[11,sub$0(str,lit_start,size),fmt]]}
|
||
function parse(lit_start,end_ind)
|
||
{var str_ind=lit_start;
|
||
for(;;)
|
||
{if(str_ind === end_ind)return add_literal(lit_start,str_ind,0);
|
||
var match=caml_string_get(str,str_ind);
|
||
if(37 === match)
|
||
{var str_ind$2=str_ind + 1 | 0;
|
||
if(str_ind$2 === end_ind)unexpected_end_of_format(end_ind);
|
||
var
|
||
match$1=caml_string_get(str,str_ind$2),
|
||
_pV_=
|
||
95 === match$1
|
||
?parse_flags(str_ind,str_ind$2 + 1 | 0,end_ind,1)
|
||
:parse_flags(str_ind,str_ind$2,end_ind,0),
|
||
fmt_rest=_pV_[1];
|
||
return add_literal(lit_start,str_ind,fmt_rest)}
|
||
if(64 === match)
|
||
{var str_ind$0=str_ind + 1 | 0;
|
||
if(str_ind$0 === end_ind)
|
||
var match$0=_aK_;
|
||
else
|
||
{var c=caml_string_get(str,str_ind$0),switch$0=0;
|
||
if(65 <= c)
|
||
if(94 <= c)
|
||
{var switcher=c - 123 | 0;
|
||
if(2 < switcher >>> 0)
|
||
switch$0 = 1;
|
||
else
|
||
switch(switcher)
|
||
{case 0:
|
||
var match$0=parse_tag(1,str_ind$0 + 1 | 0,end_ind);break;
|
||
case 1:switch$0 = 1;break;
|
||
default:
|
||
var
|
||
match$3=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$2=match$3[1],
|
||
match$0=[0,[17,1,fmt_rest$2]]}}
|
||
else
|
||
if(91 <= c)
|
||
{var switcher$0=c - 91 | 0;
|
||
switch(switcher$0)
|
||
{case 0:
|
||
var match$0=parse_tag(0,str_ind$0 + 1 | 0,end_ind);break;
|
||
case 1:switch$0 = 1;break;
|
||
default:
|
||
var
|
||
match$4=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$3=match$4[1],
|
||
match$0=[0,[17,0,fmt_rest$3]]}}
|
||
else
|
||
switch$0 = 1;
|
||
else
|
||
if(10 === c)
|
||
var
|
||
match$5=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$4=match$5[1],
|
||
match$0=[0,[17,3,fmt_rest$4]];
|
||
else
|
||
if(32 <= c)
|
||
{var switcher$1=c - 32 | 0;
|
||
switch(switcher$1)
|
||
{case 0:
|
||
var
|
||
match$6=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$5=match$6[1],
|
||
match$0=[0,[17,_aL_,fmt_rest$5]];
|
||
break;
|
||
case 5:
|
||
var switch$1=0;
|
||
if
|
||
((str_ind$0 + 1 | 0)
|
||
<
|
||
end_ind
|
||
&&
|
||
37
|
||
===
|
||
caml_string_get(str,str_ind$0 + 1 | 0))
|
||
{var
|
||
match$7=parse(str_ind$0 + 2 | 0,end_ind),
|
||
fmt_rest$6=match$7[1],
|
||
match$0=[0,[17,6,fmt_rest$6]];
|
||
switch$1 = 1}
|
||
if(! switch$1)
|
||
var
|
||
match$8=parse(str_ind$0,end_ind),
|
||
fmt_rest$7=match$8[1],
|
||
match$0=[0,[12,64,fmt_rest$7]];
|
||
break;
|
||
case 12:
|
||
var
|
||
match$9=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$8=match$9[1],
|
||
match$0=[0,[17,_aM_,fmt_rest$8]];
|
||
break;
|
||
case 14:
|
||
var
|
||
match$10=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$9=match$10[1],
|
||
match$0=[0,[17,4,fmt_rest$9]];
|
||
break;
|
||
case 27:
|
||
var match$0=parse_good_break(str_ind$0 + 1 | 0,end_ind);
|
||
break;
|
||
case 28:
|
||
var match$0=parse_magic_size(str_ind$0 + 1 | 0,end_ind);
|
||
break;
|
||
case 31:
|
||
var
|
||
match$11=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$10=match$11[1],
|
||
match$0=[0,[17,2,fmt_rest$10]];
|
||
break;
|
||
case 32:
|
||
var
|
||
match$12=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$11=match$12[1],
|
||
match$0=[0,[17,5,fmt_rest$11]];
|
||
break;
|
||
default:switch$0 = 1}}
|
||
else
|
||
switch$0 = 1;
|
||
if(switch$0)
|
||
var
|
||
match$2=parse(str_ind$0 + 1 | 0,end_ind),
|
||
fmt_rest$1=match$2[1],
|
||
match$0=[0,[17,[2,c],fmt_rest$1]]}
|
||
var fmt_rest$0=match$0[1];
|
||
return add_literal(lit_start,str_ind,fmt_rest$0)}
|
||
var str_ind$1=str_ind + 1 | 0,str_ind=str_ind$1;
|
||
continue}}
|
||
function parse_conversion
|
||
(pct_ind,str_ind,end_ind,plus,hash,space,ign,pad,prec,padprec,symb)
|
||
{var
|
||
plus_used=[0,0],
|
||
hash_used=[0,0],
|
||
space_used=[0,0],
|
||
ign_used=[0,0],
|
||
pad_used=[0,0],
|
||
prec_used=[0,0];
|
||
function get_plus(param){plus_used[1] = 1;return plus}
|
||
function get_hash(param){hash_used[1] = 1;return hash}
|
||
function get_space(param){space_used[1] = 1;return space}
|
||
function get_ign(param){ign_used[1] = 1;return ign}
|
||
function get_pad(param){pad_used[1] = 1;return pad}
|
||
function get_prec(param){prec_used[1] = 1;return prec}
|
||
function get_padprec(param){pad_used[1] = 1;return padprec}
|
||
function get_int_pad(param)
|
||
{var pad=get_pad(0),match=get_prec(0);
|
||
if(typeof match === "number" && ! match)return pad;
|
||
if(typeof pad === "number")
|
||
return 0;
|
||
else
|
||
{if(0 === pad[0])
|
||
{if(2 <= pad[1])
|
||
{var n=pad[2];
|
||
return legacy_behavior$0
|
||
?[0,1,n]
|
||
:incompatible_flag(pct_ind,str_ind,48,cst_precision$0)}
|
||
return pad}
|
||
return 2 <= pad[1]
|
||
?legacy_behavior$0
|
||
?_aE_
|
||
:incompatible_flag(pct_ind,str_ind,48,cst_precision$1)
|
||
:pad}}
|
||
function check_no_0(symb,pad)
|
||
{if(typeof pad === "number")
|
||
return pad;
|
||
else
|
||
{if(0 === pad[0])
|
||
{if(2 <= pad[1])
|
||
{var width=pad[2];
|
||
return legacy_behavior$0
|
||
?[0,1,width]
|
||
:incompatible_flag(pct_ind,str_ind,symb,cst_0$0)}
|
||
return pad}
|
||
return 2 <= pad[1]
|
||
?legacy_behavior$0
|
||
?_aF_
|
||
:incompatible_flag(pct_ind,str_ind,symb,cst_0$1)
|
||
:pad}}
|
||
function opt_of_pad(c,pad)
|
||
{if(typeof pad === "number")
|
||
return 0;
|
||
else
|
||
{if(0 === pad[0])
|
||
switch(pad[1])
|
||
{case 0:
|
||
var width=pad[2];
|
||
return legacy_behavior$0
|
||
?[0,width]
|
||
:incompatible_flag(pct_ind,str_ind,c,cst$38);
|
||
case 1:var width$0=pad[2];return [0,width$0];
|
||
default:
|
||
var width$1=pad[2];
|
||
return legacy_behavior$0
|
||
?[0,width$1]
|
||
:incompatible_flag(pct_ind,str_ind,c,cst_0$2)}
|
||
return incompatible_flag(pct_ind,str_ind,c,cst$39)}}
|
||
function get_pad_opt(c){return opt_of_pad(c,get_pad(0))}
|
||
function get_padprec_opt(c){return opt_of_pad(c,get_padprec(0))}
|
||
var switch$0=0;
|
||
if(124 <= symb)
|
||
switch$0 = 1;
|
||
else
|
||
switch(symb)
|
||
{case 33:
|
||
var
|
||
match$6=parse(str_ind,end_ind),
|
||
fmt_rest$5=match$6[1],
|
||
fmt_result=[0,[10,fmt_rest$5]];
|
||
break;
|
||
case 40:
|
||
var
|
||
sub_end=search_subformat_end(str_ind,end_ind,41),
|
||
match$8=parse(sub_end + 2 | 0,end_ind),
|
||
fmt_rest$7=match$8[1],
|
||
match$9=parse(str_ind,sub_end),
|
||
sub_fmt=match$9[1],
|
||
sub_fmtty=fmtty_of_fmt(sub_fmt);
|
||
if(get_ign(0))
|
||
var
|
||
ignored$2=[9,get_pad_opt(95),sub_fmtty],
|
||
_ps_=[0,[23,ignored$2,fmt_rest$7]];
|
||
else
|
||
var _ps_=[0,[14,get_pad_opt(40),sub_fmtty,fmt_rest$7]];
|
||
var fmt_result=_ps_;
|
||
break;
|
||
case 44:var fmt_result=parse(str_ind,end_ind);break;
|
||
case 67:
|
||
var
|
||
match$12=parse(str_ind,end_ind),
|
||
fmt_rest$10=match$12[1],
|
||
_pu_=get_ign(0)?[0,[23,1,fmt_rest$10]]:[0,[1,fmt_rest$10]],
|
||
fmt_result=_pu_;
|
||
break;
|
||
case 78:
|
||
var
|
||
match$16=parse(str_ind,end_ind),
|
||
fmt_rest$14=match$16[1],
|
||
counter$0=2;
|
||
if(get_ign(0))
|
||
var ignored$6=[11,counter$0],_pA_=[0,[23,ignored$6,fmt_rest$14]];
|
||
else
|
||
var _pA_=[0,[21,counter$0,fmt_rest$14]];
|
||
var fmt_result=_pA_;
|
||
break;
|
||
case 83:
|
||
var
|
||
pad$6=check_no_0(symb,get_padprec(0)),
|
||
match$17=parse(str_ind,end_ind),
|
||
fmt_rest$15=match$17[1];
|
||
if(get_ign(0))
|
||
var
|
||
ignored$7=[1,get_padprec_opt(95)],
|
||
_pB_=[0,[23,ignored$7,fmt_rest$15]];
|
||
else
|
||
var
|
||
match$18=make_padding_fmt_ebb(pad$6,fmt_rest$15),
|
||
fmt_rest$16=match$18[2],
|
||
pad$7=match$18[1],
|
||
_pB_=[0,[3,pad$7,fmt_rest$16]];
|
||
var fmt_result=_pB_;
|
||
break;
|
||
case 91:
|
||
if(str_ind === end_ind)unexpected_end_of_format(end_ind);
|
||
var
|
||
char_set=create_char_set(0),
|
||
add_char=function(c){return add_in_char_set(char_set,c)},
|
||
add_range=
|
||
function(c$0,c)
|
||
{if(! (c < c$0))
|
||
{var i=c$0;
|
||
for(;;)
|
||
{add_in_char_set(char_set,char_of_int(i));
|
||
var _pU_=i + 1 | 0;
|
||
if(c !== i){var i=_pU_;continue}
|
||
break}}
|
||
return 0},
|
||
fail_single_percent=
|
||
function(str_ind)
|
||
{return caml_call2(failwith_message(_aO_),str,str_ind)},
|
||
parse_char_set_content=
|
||
function(counter,str_ind,end_ind)
|
||
{var str_ind$0=str_ind;
|
||
for(;;)
|
||
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
|
||
var c=caml_string_get(str,str_ind$0);
|
||
if(45 === c)
|
||
{add_char(45);
|
||
var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1;
|
||
continue}
|
||
if(93 === c)return str_ind$0 + 1 | 0;
|
||
var _pT_=str_ind$0 + 1 | 0;
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return parse_char_set_after_char$0(counter$0,_pT_,end_ind,c)}
|
||
return caml_trampoline_return
|
||
(parse_char_set_after_char$0,[0,_pT_,end_ind,c])}},
|
||
parse_char_set_after_char$0=
|
||
function(counter,str_ind,end_ind,c)
|
||
{var str_ind$0=str_ind,c$0=c;
|
||
for(;;)
|
||
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
|
||
var c$1=caml_string_get(str,str_ind$0),switch$0=0;
|
||
if(46 <= c$1)
|
||
{if(64 === c$1)
|
||
switch$0 = 1;
|
||
else
|
||
if(93 === c$1){add_char(c$0);return str_ind$0 + 1 | 0}}
|
||
else
|
||
if(37 === c$1)
|
||
switch$0 = 1;
|
||
else
|
||
if(45 <= c$1)
|
||
{var str_ind$2=str_ind$0 + 1 | 0;
|
||
if(str_ind$2 === end_ind)unexpected_end_of_format(end_ind);
|
||
var c$2=caml_string_get(str,str_ind$2);
|
||
if(37 === c$2)
|
||
{if((str_ind$2 + 1 | 0) === end_ind)
|
||
unexpected_end_of_format(end_ind);
|
||
var c$3=caml_string_get(str,str_ind$2 + 1 | 0);
|
||
if(37 !== c$3 && 64 !== c$3)
|
||
return fail_single_percent(str_ind$2);
|
||
add_range(c$0,c$3);
|
||
var _pR_=str_ind$2 + 2 | 0;
|
||
if(counter < 50)
|
||
{var counter$2=counter + 1 | 0;
|
||
return parse_char_set_content(counter$2,_pR_,end_ind)}
|
||
return caml_trampoline_return
|
||
(parse_char_set_content,[0,_pR_,end_ind])}
|
||
if(93 === c$2)
|
||
{add_char(c$0);add_char(45);return str_ind$2 + 1 | 0}
|
||
add_range(c$0,c$2);
|
||
var _pS_=str_ind$2 + 1 | 0;
|
||
if(counter < 50)
|
||
{var counter$1=counter + 1 | 0;
|
||
return parse_char_set_content(counter$1,_pS_,end_ind)}
|
||
return caml_trampoline_return
|
||
(parse_char_set_content,[0,_pS_,end_ind])}
|
||
if(switch$0 && 37 === c$0)
|
||
{add_char(c$1);
|
||
var _pQ_=str_ind$0 + 1 | 0;
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return parse_char_set_content(counter$0,_pQ_,end_ind)}
|
||
return caml_trampoline_return
|
||
(parse_char_set_content,[0,_pQ_,end_ind])}
|
||
if(37 === c$0)fail_single_percent(str_ind$0);
|
||
add_char(c$0);
|
||
var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1,c$0=c$1;
|
||
continue}},
|
||
parse_char_set_after_char=
|
||
function(str_ind,end_ind,c)
|
||
{return caml_trampoline
|
||
(parse_char_set_after_char$0(0,str_ind,end_ind,c))};
|
||
if(str_ind === end_ind)unexpected_end_of_format(end_ind);
|
||
var match$31=caml_string_get(str,str_ind);
|
||
if(94 === match$31)
|
||
var str_ind$0=str_ind + 1 | 0,reverse=1,str_ind$1=str_ind$0;
|
||
else
|
||
var reverse=0,str_ind$1=str_ind;
|
||
if(str_ind$1 === end_ind)unexpected_end_of_format(end_ind);
|
||
var
|
||
c=caml_string_get(str,str_ind$1),
|
||
next_ind=parse_char_set_after_char(str_ind$1 + 1 | 0,end_ind,c),
|
||
char_set$0=freeze_char_set(char_set),
|
||
char_set$1=reverse?rev_char_set(char_set$0):char_set$0,
|
||
match$21=parse(next_ind,end_ind),
|
||
fmt_rest$19=match$21[1];
|
||
if(get_ign(0))
|
||
var
|
||
ignored$9=[10,get_pad_opt(95),char_set$1],
|
||
_pG_=[0,[23,ignored$9,fmt_rest$19]];
|
||
else
|
||
var _pG_=[0,[20,get_pad_opt(91),char_set$1,fmt_rest$19]];
|
||
var fmt_result=_pG_;
|
||
break;
|
||
case 97:
|
||
var
|
||
match$22=parse(str_ind,end_ind),
|
||
fmt_rest$20=match$22[1],
|
||
fmt_result=[0,[15,fmt_rest$20]];
|
||
break;
|
||
case 99:
|
||
var
|
||
char_format=
|
||
function(fmt_rest)
|
||
{return get_ign(0)?[0,[23,0,fmt_rest]]:[0,[0,fmt_rest]]},
|
||
match$23=parse(str_ind,end_ind),
|
||
fmt_rest$21=match$23[1],
|
||
match$24=get_pad_opt(99);
|
||
if(match$24)
|
||
{if(0 === match$24[1])
|
||
var
|
||
_pH_=get_ign(0)?[0,[23,3,fmt_rest$21]]:[0,[22,fmt_rest$21]],
|
||
_pI_=_pH_;
|
||
else
|
||
var
|
||
_pI_=
|
||
legacy_behavior$0
|
||
?char_format(fmt_rest$21)
|
||
:invalid_format_message
|
||
(str_ind,cst_non_zero_widths_are_unsupp);
|
||
var _pJ_=_pI_}
|
||
else
|
||
var _pJ_=char_format(fmt_rest$21);
|
||
var fmt_result=_pJ_;
|
||
break;
|
||
case 114:
|
||
var
|
||
match$25=parse(str_ind,end_ind),
|
||
fmt_rest$22=match$25[1],
|
||
_pK_=get_ign(0)?[0,[23,2,fmt_rest$22]]:[0,[19,fmt_rest$22]],
|
||
fmt_result=_pK_;
|
||
break;
|
||
case 115:
|
||
var
|
||
pad$9=check_no_0(symb,get_padprec(0)),
|
||
match$26=parse(str_ind,end_ind),
|
||
fmt_rest$23=match$26[1];
|
||
if(get_ign(0))
|
||
var
|
||
ignored$10=[0,get_padprec_opt(95)],
|
||
_pL_=[0,[23,ignored$10,fmt_rest$23]];
|
||
else
|
||
var
|
||
match$27=make_padding_fmt_ebb(pad$9,fmt_rest$23),
|
||
fmt_rest$24=match$27[2],
|
||
pad$10=match$27[1],
|
||
_pL_=[0,[2,pad$10,fmt_rest$24]];
|
||
var fmt_result=_pL_;
|
||
break;
|
||
case 116:
|
||
var
|
||
match$28=parse(str_ind,end_ind),
|
||
fmt_rest$25=match$28[1],
|
||
fmt_result=[0,[16,fmt_rest$25]];
|
||
break;
|
||
case 123:
|
||
var
|
||
sub_end$0=search_subformat_end(str_ind,end_ind,125),
|
||
match$29=parse(str_ind,sub_end$0),
|
||
sub_fmt$0=match$29[1],
|
||
match$30=parse(sub_end$0 + 2 | 0,end_ind),
|
||
fmt_rest$26=match$30[1],
|
||
sub_fmtty$0=fmtty_of_fmt(sub_fmt$0);
|
||
if(get_ign(0))
|
||
var
|
||
ignored$11=[8,get_pad_opt(95),sub_fmtty$0],
|
||
_pM_=[0,[23,ignored$11,fmt_rest$26]];
|
||
else
|
||
var _pM_=[0,[13,get_pad_opt(123),sub_fmtty$0,fmt_rest$26]];
|
||
var fmt_result=_pM_;
|
||
break;
|
||
case 66:
|
||
case 98:
|
||
var
|
||
pad$3=check_no_0(symb,get_padprec(0)),
|
||
match$10=parse(str_ind,end_ind),
|
||
fmt_rest$8=match$10[1];
|
||
if(get_ign(0))
|
||
var
|
||
ignored$3=[7,get_padprec_opt(95)],
|
||
_pt_=[0,[23,ignored$3,fmt_rest$8]];
|
||
else
|
||
var
|
||
match$11=make_padding_fmt_ebb(pad$3,fmt_rest$8),
|
||
fmt_rest$9=match$11[2],
|
||
pad$4=match$11[1],
|
||
_pt_=[0,[9,pad$4,fmt_rest$9]];
|
||
var fmt_result=_pt_;
|
||
break;
|
||
case 37:
|
||
case 64:
|
||
var
|
||
match$7=parse(str_ind,end_ind),
|
||
fmt_rest$6=match$7[1],
|
||
fmt_result=[0,[12,symb,fmt_rest$6]];
|
||
break;
|
||
case 76:
|
||
case 108:
|
||
case 110:
|
||
var switch$1=0;
|
||
if(str_ind !== end_ind)
|
||
{var
|
||
symb$0=caml_string_get(str,str_ind),
|
||
_pN_=symb$0 - 88 | 0,
|
||
switch$2=0;
|
||
if(! (32 < _pN_ >>> 0))
|
||
switch(_pN_)
|
||
{case 0:
|
||
case 12:
|
||
case 17:
|
||
case 23:
|
||
case 29:
|
||
case 32:var _pz_=1;switch$2 = 1;break
|
||
}
|
||
if(! switch$2)var _pz_=0;
|
||
if(_pz_){switch$0 = 1;switch$1 = 1}}
|
||
if(! switch$1)
|
||
{var
|
||
match$15=parse(str_ind,end_ind),
|
||
fmt_rest$13=match$15[1],
|
||
switch$3=0;
|
||
if(108 <= symb)
|
||
{if(! (111 <= symb))
|
||
{var switcher$0=symb - 108 | 0;
|
||
switch(switcher$0)
|
||
{case 0:var counter=0;switch$3 = 1;break;
|
||
case 1:break;
|
||
default:var counter=1;switch$3 = 1}}}
|
||
else
|
||
if(76 === symb){var counter=2;switch$3 = 1}
|
||
if(! switch$3)throw [0,Assert_failure,_aS_];
|
||
if(get_ign(0))
|
||
var ignored$5=[11,counter],_py_=[0,[23,ignored$5,fmt_rest$13]];
|
||
else
|
||
var _py_=[0,[21,counter,fmt_rest$13]];
|
||
var fmt_result=_py_}
|
||
break;
|
||
case 32:
|
||
case 35:
|
||
case 43:
|
||
case 45:
|
||
case 95:
|
||
var
|
||
fmt_result=
|
||
caml_call3(failwith_message(_aJ_),str,pct_ind,symb);
|
||
break;
|
||
case 88:
|
||
case 100:
|
||
case 105:
|
||
case 111:
|
||
case 117:
|
||
case 120:
|
||
var
|
||
_pC_=get_space(0),
|
||
_pD_=get_hash(0),
|
||
iconv$2=
|
||
compute_int_conv(pct_ind,str_ind,get_plus(0),_pD_,_pC_,symb),
|
||
match$19=parse(str_ind,end_ind),
|
||
fmt_rest$17=match$19[1];
|
||
if(get_ign(0))
|
||
var
|
||
ignored$8=[2,iconv$2,get_pad_opt(95)],
|
||
_pE_=[0,[23,ignored$8,fmt_rest$17]];
|
||
else
|
||
var
|
||
_pF_=get_prec(0),
|
||
match$20=make_padprec_fmt_ebb(get_int_pad(0),_pF_,fmt_rest$17),
|
||
fmt_rest$18=match$20[3],
|
||
prec$4=match$20[2],
|
||
pad$8=match$20[1],
|
||
_pE_=[0,[4,iconv$2,pad$8,prec$4,fmt_rest$18]];
|
||
var fmt_result=_pE_;
|
||
break;
|
||
case 69:
|
||
case 70:
|
||
case 71:
|
||
case 72:
|
||
case 101:
|
||
case 102:
|
||
case 103:
|
||
case 104:
|
||
var
|
||
space$1=get_space(0),
|
||
hash$1=get_hash(0),
|
||
plus$2=get_plus(0),
|
||
flag=
|
||
plus$2
|
||
?space$1
|
||
?legacy_behavior$0
|
||
?1
|
||
:incompatible_flag(pct_ind,str_ind,32,cst$50)
|
||
:1
|
||
:space$1?2:0,
|
||
switch$4=0;
|
||
if(73 <= symb)
|
||
{var switcher$1=symb - 101 | 0;
|
||
if(3 < switcher$1 >>> 0)
|
||
switch$4 = 1;
|
||
else
|
||
{switch(switcher$1)
|
||
{case 0:var _pO_=1;break;
|
||
case 1:var _pO_=0;break;
|
||
case 2:var _pO_=3;break;
|
||
default:var _pO_=6}
|
||
var kind=_pO_}}
|
||
else
|
||
if(69 <= symb)
|
||
{var switcher$2=symb - 69 | 0,switch$5=0;
|
||
switch(switcher$2)
|
||
{case 0:var _pP_=2;break;
|
||
case 1:switch$4 = 1;switch$5 = 1;break;
|
||
case 2:var _pP_=4;break;
|
||
default:var _pP_=7}
|
||
if(! switch$5)var kind=_pP_}
|
||
else
|
||
switch$4 = 1;
|
||
if(switch$4)
|
||
{var switch$6=0;
|
||
if(hash$1)
|
||
if(70 === symb)var kind=8;else switch$6 = 1;
|
||
else
|
||
if(70 === symb)var kind=5;else switch$6 = 1;
|
||
if(switch$6)throw [0,Assert_failure,_aU_]}
|
||
var
|
||
fconv=[0,flag,kind],
|
||
match$13=parse(str_ind,end_ind),
|
||
fmt_rest$11=match$13[1];
|
||
if(get_ign(0))
|
||
{var match=get_prec(0);
|
||
if(typeof match === "number")
|
||
var _pv_=match?incompatible_flag(pct_ind,str_ind,95,cst$40):0;
|
||
else
|
||
var ndec=match[1],_pv_=[0,ndec];
|
||
var
|
||
ignored$4=[6,get_pad_opt(95),_pv_],
|
||
_pw_=[0,[23,ignored$4,fmt_rest$11]]}
|
||
else
|
||
var
|
||
_px_=get_prec(0),
|
||
match$14=make_padprec_fmt_ebb(get_pad(0),_px_,fmt_rest$11),
|
||
fmt_rest$12=match$14[3],
|
||
prec$3=match$14[2],
|
||
pad$5=match$14[1],
|
||
_pw_=[0,[8,fconv,pad$5,prec$3,fmt_rest$12]];
|
||
var fmt_result=_pw_;
|
||
break;
|
||
default:switch$0 = 1}
|
||
if(switch$0)
|
||
{var switch$7=0;
|
||
if(108 <= symb)
|
||
if(111 <= symb)
|
||
switch$7 = 1;
|
||
else
|
||
{var switcher=symb - 108 | 0,switch$8=0;
|
||
switch(switcher)
|
||
{case 0:
|
||
var
|
||
_pc_=caml_string_get(str,str_ind),
|
||
_pd_=get_space(0),
|
||
_pe_=get_hash(0),
|
||
iconv=
|
||
compute_int_conv
|
||
(pct_ind,str_ind + 1 | 0,get_plus(0),_pe_,_pd_,_pc_),
|
||
match$0=parse(str_ind + 1 | 0,end_ind),
|
||
fmt_rest=match$0[1];
|
||
if(get_ign(0))
|
||
var
|
||
ignored=[3,iconv,get_pad_opt(95)],
|
||
_pf_=[0,[23,ignored,fmt_rest]];
|
||
else
|
||
var
|
||
_ph_=get_prec(0),
|
||
match$1=make_padprec_fmt_ebb(get_int_pad(0),_ph_,fmt_rest),
|
||
fmt_rest$0=match$1[3],
|
||
prec$0=match$1[2],
|
||
pad$0=match$1[1],
|
||
_pf_=[0,[5,iconv,pad$0,prec$0,fmt_rest$0]];
|
||
var _pg_=_pf_;
|
||
break;
|
||
case 1:switch$7 = 1;switch$8 = 1;break;
|
||
default:
|
||
var
|
||
_pi_=caml_string_get(str,str_ind),
|
||
_pj_=get_space(0),
|
||
_pk_=get_hash(0),
|
||
iconv$0=
|
||
compute_int_conv
|
||
(pct_ind,str_ind + 1 | 0,get_plus(0),_pk_,_pj_,_pi_),
|
||
match$2=parse(str_ind + 1 | 0,end_ind),
|
||
fmt_rest$1=match$2[1];
|
||
if(get_ign(0))
|
||
var
|
||
ignored$0=[4,iconv$0,get_pad_opt(95)],
|
||
_pl_=[0,[23,ignored$0,fmt_rest$1]];
|
||
else
|
||
var
|
||
_pm_=get_prec(0),
|
||
match$3=make_padprec_fmt_ebb(get_int_pad(0),_pm_,fmt_rest$1),
|
||
fmt_rest$2=match$3[3],
|
||
prec$1=match$3[2],
|
||
pad$1=match$3[1],
|
||
_pl_=[0,[6,iconv$0,pad$1,prec$1,fmt_rest$2]];
|
||
var _pg_=_pl_}
|
||
if(! switch$8)var fmt_result=_pg_}
|
||
else
|
||
if(76 === symb)
|
||
{var
|
||
_pn_=caml_string_get(str,str_ind),
|
||
_po_=get_space(0),
|
||
_pp_=get_hash(0),
|
||
iconv$1=
|
||
compute_int_conv
|
||
(pct_ind,str_ind + 1 | 0,get_plus(0),_pp_,_po_,_pn_),
|
||
match$4=parse(str_ind + 1 | 0,end_ind),
|
||
fmt_rest$3=match$4[1];
|
||
if(get_ign(0))
|
||
var
|
||
ignored$1=[5,iconv$1,get_pad_opt(95)],
|
||
_pq_=[0,[23,ignored$1,fmt_rest$3]];
|
||
else
|
||
var
|
||
_pr_=get_prec(0),
|
||
match$5=make_padprec_fmt_ebb(get_int_pad(0),_pr_,fmt_rest$3),
|
||
fmt_rest$4=match$5[3],
|
||
prec$2=match$5[2],
|
||
pad$2=match$5[1],
|
||
_pq_=[0,[7,iconv$1,pad$2,prec$2,fmt_rest$4]];
|
||
var fmt_result=_pq_}
|
||
else
|
||
switch$7 = 1;
|
||
if(switch$7)
|
||
var
|
||
fmt_result=
|
||
caml_call3(failwith_message(_aG_),str,str_ind - 1 | 0,symb)}
|
||
if(1 - legacy_behavior$0)
|
||
{var _o5_=1 - plus_used[1],plus$0=_o5_?plus:_o5_;
|
||
if(plus$0)incompatible_flag(pct_ind,str_ind,symb,cst$41);
|
||
var _o6_=1 - hash_used[1],hash$0=_o6_?hash:_o6_;
|
||
if(hash$0)incompatible_flag(pct_ind,str_ind,symb,cst$42);
|
||
var _o7_=1 - space_used[1],space$0=_o7_?space:_o7_;
|
||
if(space$0)incompatible_flag(pct_ind,str_ind,symb,cst$43);
|
||
var _o8_=1 - pad_used[1],_o9_=_o8_?caml_notequal([0,pad],_aH_):_o8_;
|
||
if(_o9_)incompatible_flag(pct_ind,str_ind,symb,cst_padding$0);
|
||
var
|
||
_o__=1 - prec_used[1],
|
||
_o$_=_o__?caml_notequal([0,prec],_aI_):_o__;
|
||
if(_o$_)
|
||
{var _pa_=ign?95:symb;
|
||
incompatible_flag(pct_ind,str_ind,_pa_,cst_precision$2)}
|
||
var plus$1=ign?plus:ign;
|
||
if(plus$1)incompatible_flag(pct_ind,str_ind,95,cst$44)}
|
||
var _pb_=1 - ign_used[1],ign$0=_pb_?ign:_pb_;
|
||
if(ign$0)
|
||
{var switch$9=0;
|
||
if(38 <= symb)
|
||
{if(44 !== symb && 64 !== symb)switch$9 = 1}
|
||
else
|
||
if(33 !== symb && ! (37 <= symb))switch$9 = 1;
|
||
var switch$10=0;
|
||
if(switch$9 || ! legacy_behavior$0)switch$10 = 1;
|
||
if(switch$10)incompatible_flag(pct_ind,str_ind,symb,cst$45)}
|
||
return fmt_result}
|
||
function parse_after_precision
|
||
(pct_ind,str_ind,end_ind,minus,plus,hash,space,ign,pad,match)
|
||
{if(str_ind === end_ind)unexpected_end_of_format(end_ind);
|
||
function parse_conv(padprec)
|
||
{return parse_conversion
|
||
(pct_ind,
|
||
str_ind + 1 | 0,
|
||
end_ind,
|
||
plus,
|
||
hash,
|
||
space,
|
||
ign,
|
||
pad,
|
||
match,
|
||
padprec,
|
||
caml_string_get(str,str_ind))}
|
||
if(typeof pad === "number")
|
||
{if(typeof match === "number" && ! match)return parse_conv(0);
|
||
if(minus)
|
||
{if(typeof match === "number")return parse_conv(_aC_);
|
||
var n=match[1];
|
||
return parse_conv([0,0,n])}
|
||
if(typeof match === "number")return parse_conv(_aD_);
|
||
var n$0=match[1];
|
||
return parse_conv([0,1,n$0])}
|
||
return parse_conv(pad)}
|
||
function parse_after_padding
|
||
(pct_ind,str_ind,end_ind,minus,plus,hash,space,ign,pad)
|
||
{if(str_ind === end_ind)unexpected_end_of_format(end_ind);
|
||
var symb=caml_string_get(str,str_ind);
|
||
if(46 === symb)
|
||
{var str_ind$0=str_ind + 1 | 0;
|
||
if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
|
||
var
|
||
parse_literal=
|
||
function(minus,str_ind)
|
||
{var
|
||
match=parse_positive(str_ind,end_ind,0),
|
||
prec=match[2],
|
||
new_ind=match[1];
|
||
return parse_after_precision
|
||
(pct_ind,
|
||
new_ind,
|
||
end_ind,
|
||
minus,
|
||
plus,
|
||
hash,
|
||
space,
|
||
ign,
|
||
pad,
|
||
[0,prec])},
|
||
symb$0=caml_string_get(str,str_ind$0);
|
||
if(48 <= symb$0)
|
||
{if(! (58 <= symb$0))return parse_literal(minus,str_ind$0)}
|
||
else
|
||
if(42 <= symb$0)
|
||
{var switcher=symb$0 - 42 | 0;
|
||
switch(switcher)
|
||
{case 0:
|
||
return parse_after_precision
|
||
(pct_ind,
|
||
str_ind$0 + 1 | 0,
|
||
end_ind,
|
||
minus,
|
||
plus,
|
||
hash,
|
||
space,
|
||
ign,
|
||
pad,
|
||
1);
|
||
case 1:
|
||
case 3:
|
||
if(legacy_behavior$0)
|
||
{var
|
||
_o4_=str_ind$0 + 1 | 0,
|
||
minus$0=minus || (45 === symb$0?1:0);
|
||
return parse_literal(minus$0,_o4_)}
|
||
break
|
||
}}
|
||
return legacy_behavior$0
|
||
?parse_after_precision
|
||
(pct_ind,
|
||
str_ind$0,
|
||
end_ind,
|
||
minus,
|
||
plus,
|
||
hash,
|
||
space,
|
||
ign,
|
||
pad,
|
||
_aB_)
|
||
:invalid_format_without(str_ind$0 - 1 | 0,46,cst_precision)}
|
||
return parse_conversion
|
||
(pct_ind,
|
||
str_ind + 1 | 0,
|
||
end_ind,
|
||
plus,
|
||
hash,
|
||
space,
|
||
ign,
|
||
pad,
|
||
0,
|
||
pad,
|
||
symb)}
|
||
function parse_flags(pct_ind,str_ind,end_ind,ign)
|
||
{var zero=[0,0],minus=[0,0],plus=[0,0],space=[0,0],hash=[0,0];
|
||
function set_flag(str_ind,flag)
|
||
{var _o1_=flag[1],_o2_=_o1_?1 - legacy_behavior$0:_o1_;
|
||
if(_o2_)
|
||
{var _o3_=caml_string_get(str,str_ind);
|
||
caml_call3(failwith_message(_az_),str,str_ind,_o3_)}
|
||
flag[1] = 1;
|
||
return 0}
|
||
var str_ind$0=str_ind;
|
||
for(;;)
|
||
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
|
||
var match=caml_string_get(str,str_ind$0),switcher=match - 32 | 0;
|
||
if(! (16 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:
|
||
set_flag(str_ind$0,space);
|
||
var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1;
|
||
continue;
|
||
case 3:
|
||
set_flag(str_ind$0,hash);
|
||
var str_ind$2=str_ind$0 + 1 | 0,str_ind$0=str_ind$2;
|
||
continue;
|
||
case 11:
|
||
set_flag(str_ind$0,plus);
|
||
var str_ind$3=str_ind$0 + 1 | 0,str_ind$0=str_ind$3;
|
||
continue;
|
||
case 13:
|
||
set_flag(str_ind$0,minus);
|
||
var str_ind$4=str_ind$0 + 1 | 0,str_ind$0=str_ind$4;
|
||
continue;
|
||
case 16:
|
||
set_flag(str_ind$0,zero);
|
||
var str_ind$5=str_ind$0 + 1 | 0,str_ind$0=str_ind$5;
|
||
continue
|
||
}
|
||
var
|
||
_oW_=space[1],
|
||
_oX_=hash[1],
|
||
_oY_=plus[1],
|
||
_oZ_=minus[1],
|
||
_o0_=zero[1];
|
||
if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
|
||
var
|
||
padty=
|
||
_o0_
|
||
?_oZ_
|
||
?legacy_behavior$0
|
||
?0
|
||
:incompatible_flag(pct_ind,str_ind$0,45,cst_0)
|
||
:2
|
||
:_oZ_?0:1,
|
||
match$0=caml_string_get(str,str_ind$0);
|
||
if(48 <= match$0)
|
||
{if(! (58 <= match$0))
|
||
{var
|
||
match$1=parse_positive(str_ind$0,end_ind,0),
|
||
width=match$1[2],
|
||
new_ind=match$1[1];
|
||
return parse_after_padding
|
||
(pct_ind,
|
||
new_ind,
|
||
end_ind,
|
||
_oZ_,
|
||
_oY_,
|
||
_oX_,
|
||
_oW_,
|
||
ign,
|
||
[0,padty,width])}}
|
||
else
|
||
if(42 === match$0)
|
||
return parse_after_padding
|
||
(pct_ind,
|
||
str_ind$0 + 1 | 0,
|
||
end_ind,
|
||
_oZ_,
|
||
_oY_,
|
||
_oX_,
|
||
_oW_,
|
||
ign,
|
||
[1,padty]);
|
||
switch(padty)
|
||
{case 0:
|
||
if(1 - legacy_behavior$0)
|
||
invalid_format_without(str_ind$0 - 1 | 0,45,cst_padding);
|
||
return parse_after_padding
|
||
(pct_ind,str_ind$0,end_ind,_oZ_,_oY_,_oX_,_oW_,ign,0);
|
||
case 1:
|
||
return parse_after_padding
|
||
(pct_ind,str_ind$0,end_ind,_oZ_,_oY_,_oX_,_oW_,ign,0);
|
||
default:
|
||
return parse_after_padding
|
||
(pct_ind,str_ind$0,end_ind,_oZ_,_oY_,_oX_,_oW_,ign,_aA_)}}}
|
||
function parse_tag(is_open_tag,str_ind,end_ind)
|
||
{try
|
||
{if(str_ind === end_ind)throw Not_found;
|
||
var match$0=caml_string_get(str,str_ind);
|
||
if(60 === match$0)
|
||
{var ind=index_from$0(str,str_ind + 1 | 0,62);
|
||
if(end_ind <= ind)throw Not_found;
|
||
var
|
||
sub_str=sub$0(str,str_ind,(ind - str_ind | 0) + 1 | 0),
|
||
match$1=parse(ind + 1 | 0,end_ind),
|
||
fmt_rest$0=match$1[1],
|
||
match$2=parse(str_ind,ind + 1 | 0),
|
||
sub_fmt=match$2[1],
|
||
sub_format$0=[0,sub_fmt,sub_str],
|
||
formatting$0=is_open_tag?[0,sub_format$0]:[1,sub_format$0],
|
||
_oU_=[0,[18,formatting$0,fmt_rest$0]];
|
||
return _oU_}
|
||
throw Not_found}
|
||
catch(_oV_)
|
||
{_oV_ = caml_wrap_exception(_oV_);
|
||
if(_oV_ === Not_found)
|
||
{var
|
||
match=parse(str_ind,end_ind),
|
||
fmt_rest=match[1],
|
||
formatting=is_open_tag?[0,sub_format]:[1,sub_format];
|
||
return [0,[18,formatting,fmt_rest]]}
|
||
throw _oV_}}
|
||
function parse_good_break(str_ind,end_ind)
|
||
{try
|
||
{var
|
||
_oN_=str_ind === end_ind?1:0,
|
||
_oO_=_oN_ || (60 !== caml_string_get(str,str_ind)?1:0);
|
||
if(_oO_)throw Not_found;
|
||
var
|
||
str_ind_1=parse_spaces(str_ind + 1 | 0,end_ind),
|
||
match$0=caml_string_get(str,str_ind_1),
|
||
switch$0=0;
|
||
if(48 <= match$0)
|
||
{if(! (58 <= match$0))switch$0 = 1}
|
||
else
|
||
if(45 === match$0)switch$0 = 1;
|
||
if(! switch$0)throw Not_found;
|
||
var
|
||
match$1=parse_integer(str_ind_1,end_ind),
|
||
width=match$1[2],
|
||
str_ind_2=match$1[1],
|
||
str_ind_3=parse_spaces(str_ind_2,end_ind),
|
||
match$2=caml_string_get(str,str_ind_3),
|
||
switcher=match$2 - 45 | 0,
|
||
switch$1=0;
|
||
if(12 < switcher >>> 0)
|
||
if(17 === switcher)
|
||
var
|
||
s=sub$0(str,str_ind - 2 | 0,(str_ind_3 - str_ind | 0) + 3 | 0),
|
||
_oP_=[0,s,width,0],
|
||
_oQ_=str_ind_3 + 1 | 0,
|
||
formatting_lit$0=_oP_,
|
||
next_ind=_oQ_;
|
||
else
|
||
switch$1 = 1;
|
||
else
|
||
{var switcher$0=switcher - 1 | 0;
|
||
if(1 < switcher$0 >>> 0)
|
||
{var
|
||
match$3=parse_integer(str_ind_3,end_ind),
|
||
offset=match$3[2],
|
||
str_ind_4=match$3[1],
|
||
str_ind_5=parse_spaces(str_ind_4,end_ind);
|
||
if(62 !== caml_string_get(str,str_ind_5))throw Not_found;
|
||
var
|
||
s$0=
|
||
sub$0(str,str_ind - 2 | 0,(str_ind_5 - str_ind | 0) + 3 | 0),
|
||
_oR_=[0,s$0,width,offset],
|
||
_oS_=str_ind_5 + 1 | 0,
|
||
formatting_lit$0=_oR_,
|
||
next_ind=_oS_}
|
||
else
|
||
switch$1 = 1}
|
||
if(switch$1)throw Not_found}
|
||
catch(_oT_)
|
||
{_oT_ = caml_wrap_exception(_oT_);
|
||
if(_oT_ !== Not_found && _oT_[1] !== Failure)throw _oT_;
|
||
var formatting_lit$0=formatting_lit,next_ind=str_ind}
|
||
var match=parse(next_ind,end_ind),fmt_rest=match[1];
|
||
return [0,[17,formatting_lit$0,fmt_rest]]}
|
||
function parse_magic_size(str_ind,end_ind)
|
||
{try
|
||
{var
|
||
str_ind_1=parse_spaces(str_ind,end_ind),
|
||
match$2=caml_string_get(str,str_ind_1),
|
||
switch$0=0;
|
||
if(48 <= match$2)
|
||
{if(! (58 <= match$2))switch$0 = 1}
|
||
else
|
||
if(45 === match$2)switch$0 = 1;
|
||
if(switch$0)
|
||
{var
|
||
match$3=parse_integer(str_ind_1,end_ind),
|
||
size=match$3[2],
|
||
str_ind_2=match$3[1],
|
||
str_ind_3=parse_spaces(str_ind_2,end_ind);
|
||
if(62 !== caml_string_get(str,str_ind_3))throw Not_found;
|
||
var
|
||
s=sub$0(str,str_ind - 2 | 0,(str_ind_3 - str_ind | 0) + 3 | 0),
|
||
_oL_=[0,[0,str_ind_3 + 1 | 0,[1,s,size]]]}
|
||
else
|
||
var _oL_=0;
|
||
var _oK_=_oL_}
|
||
catch(_oM_)
|
||
{_oM_ = caml_wrap_exception(_oM_);
|
||
if(_oM_ !== Not_found && _oM_[1] !== Failure)throw _oM_;
|
||
var _oK_=0}
|
||
if(_oK_)
|
||
{var
|
||
match=_oK_[1],
|
||
formatting_lit=match[2],
|
||
next_ind=match[1],
|
||
match$0=parse(next_ind,end_ind),
|
||
fmt_rest=match$0[1];
|
||
return [0,[17,formatting_lit,fmt_rest]]}
|
||
var match$1=parse(str_ind,end_ind),fmt_rest$0=match$1[1];
|
||
return [0,[17,_aN_,fmt_rest$0]]}
|
||
function parse_spaces(str_ind,end_ind)
|
||
{var str_ind$0=str_ind;
|
||
for(;;)
|
||
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
|
||
if(32 === caml_string_get(str,str_ind$0))
|
||
{var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1;continue}
|
||
return str_ind$0}}
|
||
function parse_positive(str_ind,end_ind,acc)
|
||
{var str_ind$0=str_ind,acc$0=acc;
|
||
for(;;)
|
||
{if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind);
|
||
var c=caml_string_get(str,str_ind$0),switcher=c - 48 | 0;
|
||
if(9 < switcher >>> 0)return [0,str_ind$0,acc$0];
|
||
var acc$1=(acc$0 * 10 | 0) + (c - 48 | 0) | 0;
|
||
if(max_string_length < acc$1)
|
||
return caml_call3
|
||
(failwith_message(_aP_),str,acc$1,max_string_length);
|
||
var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1,acc$0=acc$1;
|
||
continue}}
|
||
function parse_integer(str_ind,end_ind)
|
||
{if(str_ind === end_ind)unexpected_end_of_format(end_ind);
|
||
var match=caml_string_get(str,str_ind);
|
||
if(48 <= match)
|
||
{if(! (58 <= match))return parse_positive(str_ind,end_ind,0)}
|
||
else
|
||
if(45 === match)
|
||
{if((str_ind + 1 | 0) === end_ind)unexpected_end_of_format(end_ind);
|
||
var c=caml_string_get(str,str_ind + 1 | 0),switcher=c - 48 | 0;
|
||
if(9 < switcher >>> 0)
|
||
return expected_character(str_ind + 1 | 0,cst_digit,c);
|
||
var
|
||
match$0=parse_positive(str_ind + 1 | 0,end_ind,0),
|
||
n=match$0[2],
|
||
next_ind=match$0[1];
|
||
return [0,next_ind,- n | 0]}
|
||
throw [0,Assert_failure,_aQ_]}
|
||
function search_subformat_end(str_ind,end_ind,c)
|
||
{var str_ind$0=str_ind;
|
||
for(;;)
|
||
{if(str_ind$0 === end_ind)
|
||
caml_call3(failwith_message(_aR_),str,c,end_ind);
|
||
var match=caml_string_get(str,str_ind$0);
|
||
if(37 === match)
|
||
{if((str_ind$0 + 1 | 0) === end_ind)
|
||
unexpected_end_of_format(end_ind);
|
||
if(caml_string_get(str,str_ind$0 + 1 | 0) === c)return str_ind$0;
|
||
var match$0=caml_string_get(str,str_ind$0 + 1 | 0);
|
||
if(95 <= match$0)
|
||
{if(123 <= match$0)
|
||
{if(! (126 <= match$0))
|
||
{var switcher=match$0 - 123 | 0;
|
||
switch(switcher)
|
||
{case 0:
|
||
var
|
||
sub_end=search_subformat_end(str_ind$0 + 2 | 0,end_ind,125),
|
||
str_ind$2=sub_end + 2 | 0,
|
||
str_ind$0=str_ind$2;
|
||
continue;
|
||
case 1:break;
|
||
default:
|
||
return expected_character
|
||
(str_ind$0 + 1 | 0,cst_character,125)}}}
|
||
else
|
||
if(! (96 <= match$0))
|
||
{if((str_ind$0 + 2 | 0) === end_ind)
|
||
unexpected_end_of_format(end_ind);
|
||
var match$1=caml_string_get(str,str_ind$0 + 2 | 0);
|
||
if(40 === match$1)
|
||
{var
|
||
sub_end$0=search_subformat_end(str_ind$0 + 3 | 0,end_ind,41),
|
||
str_ind$3=sub_end$0 + 2 | 0,
|
||
str_ind$0=str_ind$3;
|
||
continue}
|
||
if(123 === match$1)
|
||
{var
|
||
sub_end$1=
|
||
search_subformat_end(str_ind$0 + 3 | 0,end_ind,125),
|
||
str_ind$4=sub_end$1 + 2 | 0,
|
||
str_ind$0=str_ind$4;
|
||
continue}
|
||
var str_ind$5=str_ind$0 + 3 | 0,str_ind$0=str_ind$5;
|
||
continue}}
|
||
else
|
||
{if(40 === match$0)
|
||
{var
|
||
sub_end$2=search_subformat_end(str_ind$0 + 2 | 0,end_ind,41),
|
||
str_ind$6=sub_end$2 + 2 | 0,
|
||
str_ind$0=str_ind$6;
|
||
continue}
|
||
if(41 === match$0)
|
||
return expected_character(str_ind$0 + 1 | 0,cst_character$0,41)}
|
||
var str_ind$1=str_ind$0 + 2 | 0,str_ind$0=str_ind$1;
|
||
continue}
|
||
var str_ind$7=str_ind$0 + 1 | 0,str_ind$0=str_ind$7;
|
||
continue}}
|
||
function incompatible_flag(pct_ind,str_ind,symb,option)
|
||
{var subfmt=sub$0(str,pct_ind,str_ind - pct_ind | 0);
|
||
return caml_call5
|
||
(failwith_message(_aV_),str,pct_ind,option,symb,subfmt)}
|
||
function compute_int_conv(pct_ind,str_ind,plus,hash,space,symb)
|
||
{var plus$0=plus,hash$0=hash,space$0=space;
|
||
for(;;)
|
||
{var switch$0=0;
|
||
if(plus$0)
|
||
{if(hash$0)
|
||
switch$0 = 1;
|
||
else
|
||
if(! space$0){if(100 === symb)return 1;if(105 === symb)return 4}}
|
||
else
|
||
if(hash$0)
|
||
if(space$0)
|
||
switch$0 = 1;
|
||
else
|
||
{var switcher$0=symb - 88 | 0;
|
||
if(32 < switcher$0 >>> 0)
|
||
switch$0 = 1;
|
||
else
|
||
switch(switcher$0)
|
||
{case 0:return 9;
|
||
case 12:return 13;
|
||
case 17:return 14;
|
||
case 23:return 11;
|
||
case 29:return 15;
|
||
case 32:return 7;
|
||
default:switch$0 = 1}}
|
||
else
|
||
if(space$0)
|
||
{if(100 === symb)return 2;if(105 === symb)return 5}
|
||
else
|
||
{var switcher$1=symb - 88 | 0;
|
||
if(! (32 < switcher$1 >>> 0))
|
||
switch(switcher$1)
|
||
{case 0:return 8;
|
||
case 12:return 0;
|
||
case 17:return 3;
|
||
case 23:return 10;
|
||
case 29:return 12;
|
||
case 32:return 6
|
||
}}
|
||
if(switch$0)
|
||
{var switcher=symb - 88 | 0;
|
||
if(! (32 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:if(legacy_behavior$0)return 9;break;
|
||
case 23:if(legacy_behavior$0)return 11;break;
|
||
case 32:if(legacy_behavior$0)return 7;break;
|
||
case 12:
|
||
case 17:
|
||
case 29:
|
||
if(legacy_behavior$0){var hash$0=0;continue}
|
||
return incompatible_flag(pct_ind,str_ind,symb,cst$49)
|
||
}}
|
||
if(plus$0)
|
||
{if(space$0)
|
||
{if(legacy_behavior$0){var space$0=0;continue}
|
||
return incompatible_flag(pct_ind,str_ind,32,cst$46)}
|
||
if(legacy_behavior$0){var plus$0=0;continue}
|
||
return incompatible_flag(pct_ind,str_ind,symb,cst$47)}
|
||
if(space$0)
|
||
{if(legacy_behavior$0){var space$0=0;continue}
|
||
return incompatible_flag(pct_ind,str_ind,symb,cst$48)}
|
||
throw [0,Assert_failure,_aT_]}}
|
||
return parse(0,caml_ml_string_length(str))}
|
||
function format_of_string_fmtty(str,fmtty)
|
||
{var match=fmt_ebb_of_string(0,str),fmt=match[1];
|
||
try
|
||
{var _oI_=[0,type_format(fmt,fmtty),str];return _oI_}
|
||
catch(_oJ_)
|
||
{_oJ_ = caml_wrap_exception(_oJ_);
|
||
if(_oJ_ === Type_mismatch)
|
||
{var _oH_=string_of_fmtty(fmtty);
|
||
return caml_call2(failwith_message(_aW_),str,_oH_)}
|
||
throw _oJ_}}
|
||
function format_of_string_format(str,param)
|
||
{var
|
||
str$0=param[2],
|
||
fmt=param[1],
|
||
match=fmt_ebb_of_string(0,str),
|
||
fmt$0=match[1];
|
||
try
|
||
{var _oF_=[0,type_format(fmt$0,fmtty_of_fmt(fmt)),str];return _oF_}
|
||
catch(_oG_)
|
||
{_oG_ = caml_wrap_exception(_oG_);
|
||
if(_oG_ === Type_mismatch)
|
||
return caml_call2(failwith_message(_aX_),str,str$0);
|
||
throw _oG_}}
|
||
var
|
||
CamlinternalFormat=
|
||
[0,
|
||
is_in_char_set,
|
||
rev_char_set,
|
||
create_char_set,
|
||
add_in_char_set,
|
||
freeze_char_set,
|
||
param_format_of_ignored_format,
|
||
make_printf,
|
||
make_iprintf,
|
||
output_acc,
|
||
bufput_acc,
|
||
strput_acc,
|
||
type_format,
|
||
fmt_ebb_of_string,
|
||
format_of_string_fmtty,
|
||
format_of_string_format,
|
||
char_of_iconv,
|
||
string_of_formatting_lit,
|
||
string_of_fmtty,
|
||
string_of_fmt,
|
||
open_box_of_string,
|
||
symm,
|
||
trans,
|
||
recast];
|
||
caml_register_global(778,CamlinternalFormat,"CamlinternalFormat");
|
||
function kfprintf(k,o,param)
|
||
{var fmt=param[1],_oE_=0;
|
||
return make_printf
|
||
(function(acc){output_acc(o,acc);return caml_call1(k,o)},
|
||
_oE_,
|
||
fmt)}
|
||
function kbprintf(k,b,param)
|
||
{var fmt=param[1],_oD_=0;
|
||
return make_printf
|
||
(function(acc){bufput_acc(b,acc);return caml_call1(k,b)},
|
||
_oD_,
|
||
fmt)}
|
||
function ikfprintf(k,oc,param)
|
||
{var fmt=param[1];return make_iprintf(k,oc,fmt)}
|
||
function fprintf(oc,fmt){return kfprintf(function(_oC_){return 0},oc,fmt)}
|
||
function bprintf(b,fmt){return kbprintf(function(_oB_){return 0},b,fmt)}
|
||
function ifprintf(oc,fmt)
|
||
{return ikfprintf(function(_oA_){return 0},oc,fmt)}
|
||
function printf(fmt){return fprintf(stdout,fmt)}
|
||
function eprintf(fmt){return fprintf(stderr,fmt)}
|
||
function ksprintf(k,param)
|
||
{var fmt=param[1];
|
||
function k$0(acc)
|
||
{var buf=create$2(64);
|
||
strput_acc(buf,acc);
|
||
return caml_call1(k,contents(buf))}
|
||
return make_printf(k$0,0,fmt)}
|
||
function sprintf(fmt){return ksprintf(function(s){return s},fmt)}
|
||
var
|
||
Stdlib_printf=
|
||
[0,
|
||
fprintf,
|
||
printf,
|
||
eprintf,
|
||
sprintf,
|
||
bprintf,
|
||
ifprintf,
|
||
kfprintf,
|
||
ikfprintf,
|
||
ksprintf,
|
||
kbprintf,
|
||
ksprintf];
|
||
caml_register_global(779,Stdlib_printf,"Stdlib__printf");
|
||
var
|
||
Bad=[248,cst_Stdlib_Arg_Bad,caml_fresh_oo_id(0)],
|
||
Help=[248,cst_Stdlib_Arg_Help,caml_fresh_oo_id(0)],
|
||
Stop=[248,cst_Stdlib_Arg_Stop,caml_fresh_oo_id(0)];
|
||
function assoc3(x,l)
|
||
{var l$0=l;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var match=l$0[1],y2=match[2],y1=match[1];
|
||
if(caml_equal(y1,x))return y2;
|
||
var l$1=l$0[2],l$0=l$1;
|
||
continue}
|
||
throw Not_found}}
|
||
function split$0(s)
|
||
{var
|
||
i=index$0(s,61),
|
||
len=caml_ml_string_length(s),
|
||
_oz_=sub$0(s,i + 1 | 0,len - (i + 1 | 0) | 0);
|
||
return [0,sub$0(s,0,i),_oz_]}
|
||
function make_symlist(prefix,sep,suffix,l)
|
||
{if(l)
|
||
{var t=l[2],h=l[1],_oy_=symbol(prefix,h);
|
||
return symbol
|
||
(fold_left$0
|
||
(function(x,y){return symbol(x,symbol(sep,y))},_oy_,t),
|
||
suffix)}
|
||
return cst_none}
|
||
function help_action(param){throw [0,Stop,_a0_]}
|
||
function add_help(speclist)
|
||
{try
|
||
{assoc3(cst_help$2,speclist);var _ov_=0,_ot_=_ov_}
|
||
catch(_ox_)
|
||
{_ox_ = caml_wrap_exception(_ox_);
|
||
if(_ox_ !== Not_found)throw _ox_;
|
||
var
|
||
_ot_=
|
||
[0,[0,cst_help,[0,help_action],cst_Display_this_list_of_optio],0]}
|
||
try
|
||
{assoc3(cst_help$1,speclist);var _ou_=0,add2=_ou_}
|
||
catch(_ow_)
|
||
{_ow_ = caml_wrap_exception(_ow_);
|
||
if(_ow_ !== Not_found)throw _ow_;
|
||
var
|
||
add2=
|
||
[0,
|
||
[0,cst_help$0,[0,help_action],cst_Display_this_list_of_optio$0],
|
||
0]}
|
||
return append(speclist,append(_ot_,add2))}
|
||
function usage_b(buf,speclist,errmsg)
|
||
{caml_call1(bprintf(buf,_a1_),errmsg);
|
||
var _oq_=add_help(speclist);
|
||
return iter$2
|
||
(function(param)
|
||
{var
|
||
doc=param[3],
|
||
spec=param[2],
|
||
key=param[1],
|
||
_or_=0 < caml_ml_string_length(doc)?1:0;
|
||
if(_or_)
|
||
{if(11 === spec[0])
|
||
{var l=spec[1],_os_=make_symlist(cst$53,cst$52,cst$51,l);
|
||
return caml_call3(bprintf(buf,_aZ_),key,_os_,doc)}
|
||
return caml_call2(bprintf(buf,_aY_),key,doc)}
|
||
return _or_},
|
||
_oq_)}
|
||
function usage_string(speclist,errmsg)
|
||
{var b=create$2(200);usage_b(b,speclist,errmsg);return contents(b)}
|
||
function usage(speclist,errmsg)
|
||
{var _op_=usage_string(speclist,errmsg);
|
||
return caml_call1(eprintf(_a2_),_op_)}
|
||
var current=[0,0];
|
||
function bool_of_string_opt$0(x)
|
||
{try
|
||
{var _on_=[0,bool_of_string(x)];return _on_}
|
||
catch(_oo_)
|
||
{_oo_ = caml_wrap_exception(_oo_);
|
||
if(_oo_[1] === Invalid_argument)return 0;
|
||
throw _oo_}}
|
||
function int_of_string_opt$0(x)
|
||
{try
|
||
{var _ol_=[0,caml_int_of_string(x)];return _ol_}
|
||
catch(_om_)
|
||
{_om_ = caml_wrap_exception(_om_);
|
||
if(_om_[1] === Failure)return 0;
|
||
throw _om_}}
|
||
function float_of_string_opt(x)
|
||
{try
|
||
{var _oj_=[0,caml_float_of_string(x)];return _oj_}
|
||
catch(_ok_)
|
||
{_ok_ = caml_wrap_exception(_ok_);
|
||
if(_ok_[1] === Failure)return 0;
|
||
throw _ok_}}
|
||
function parse_and_expand_argv_dynamic_
|
||
(allow_expand,current,argv,speclist,anonfun,errmsg)
|
||
{var initpos=current[1];
|
||
function convert_error(error)
|
||
{var
|
||
b=create$2(200),
|
||
progname=
|
||
initpos < argv[1].length - 1
|
||
?caml_check_bound(argv[1],initpos)[1 + initpos]
|
||
:cst$54;
|
||
switch(error[0])
|
||
{case 0:
|
||
var _oi_=error[1];
|
||
if
|
||
(caml_string_notequal(_oi_,cst_help$3)
|
||
&&
|
||
caml_string_notequal(_oi_,cst_help$4))
|
||
caml_call2(bprintf(b,_a3_),progname,_oi_);
|
||
break;
|
||
case 1:
|
||
var expected=error[3],arg=error[2],opt=error[1];
|
||
caml_call4(bprintf(b,_a6_),progname,arg,opt,expected);
|
||
break;
|
||
case 2:var s=error[1];caml_call2(bprintf(b,_a7_),progname,s);break;
|
||
default:var s$0=error[1];caml_call2(bprintf(b,_a8_),progname,s$0)}
|
||
usage_b(b,speclist[1],errmsg);
|
||
if(! caml_equal(error,_a4_) && ! caml_equal(error,_a5_))
|
||
return [0,Bad,contents(b)];
|
||
return [0,Help,contents(b)]}
|
||
current[1]++;
|
||
for(;;)
|
||
{if(current[1] < argv[1].length - 1)
|
||
{try
|
||
{var
|
||
_n$_=current[1],
|
||
s=caml_check_bound(argv[1],_n$_)[1 + _n$_],
|
||
switch$0=0;
|
||
if(1 <= caml_ml_string_length(s) && 45 === caml_string_get(s,0))
|
||
{try
|
||
{var
|
||
follow$1=0,
|
||
_ob_=assoc3(s,speclist[1]),
|
||
follow$0=follow$1,
|
||
action=_ob_}
|
||
catch(_og_)
|
||
{_og_ = caml_wrap_exception(_og_);
|
||
if(_og_ !== Not_found)throw _og_;
|
||
try
|
||
{var
|
||
match=split$0(s),
|
||
arg=match[2],
|
||
keyword=match[1],
|
||
follow=[0,arg],
|
||
_oa_=assoc3(keyword,speclist[1])}
|
||
catch(_oh_)
|
||
{_oh_ = caml_wrap_exception(_oh_);
|
||
if(_oh_ === Not_found)throw [0,Stop,[0,s]];
|
||
throw _oh_;
|
||
var _oc_=_oh_}
|
||
var follow$0=follow,action=_oa_,_od_=_og_}
|
||
var
|
||
no_arg$0=
|
||
function(s,follow)
|
||
{function no_arg(param)
|
||
{if(follow)
|
||
{var arg=follow[1];throw [0,Stop,[1,s,arg,cst_no_argument]]}
|
||
return 0}
|
||
return no_arg},
|
||
no_arg=no_arg$0(s,follow$0),
|
||
get_arg$0=
|
||
function(s,follow)
|
||
{function get_arg(param)
|
||
{if(follow){var arg=follow[1];return arg}
|
||
if((current[1] + 1 | 0) < argv[1].length - 1)
|
||
{var _of_=current[1] + 1 | 0;
|
||
return caml_check_bound(argv[1],_of_)[1 + _of_]}
|
||
throw [0,Stop,[2,s]]}
|
||
return get_arg},
|
||
get_arg=get_arg$0(s,follow$0),
|
||
consume_arg$0=
|
||
function(follow)
|
||
{function consume_arg(param)
|
||
{return follow?0:(current[1]++,0)}
|
||
return consume_arg},
|
||
consume_arg=consume_arg$0(follow$0),
|
||
treat_action$0=
|
||
function(s,no_arg,get_arg,consume_arg)
|
||
{function treat_action(param)
|
||
{switch(param[0])
|
||
{case 0:var f=param[1];no_arg(0);return caml_call1(f,0);
|
||
case 1:
|
||
var
|
||
f$0=param[1],
|
||
arg=get_arg(0),
|
||
match=bool_of_string_opt$0(arg);
|
||
if(match)
|
||
{var s$0=match[1];caml_call1(f$0,s$0);return consume_arg(0)}
|
||
throw [0,Stop,[1,s,arg,cst_a_boolean]];
|
||
case 2:var r=param[1];no_arg(0);r[1] = 1;return 0;
|
||
case 3:var r$0=param[1];no_arg(0);r$0[1] = 0;return 0;
|
||
case 4:
|
||
var f$1=param[1],arg$0=get_arg(0);
|
||
caml_call1(f$1,arg$0);
|
||
return consume_arg(0);
|
||
case 5:
|
||
var r$1=param[1];r$1[1] = get_arg(0);return consume_arg(0);
|
||
case 6:
|
||
var
|
||
f$2=param[1],
|
||
arg$1=get_arg(0),
|
||
match$0=int_of_string_opt$0(arg$1);
|
||
if(match$0)
|
||
{var x=match$0[1];caml_call1(f$2,x);return consume_arg(0)}
|
||
throw [0,Stop,[1,s,arg$1,cst_an_integer]];
|
||
case 7:
|
||
var
|
||
r$2=param[1],
|
||
arg$2=get_arg(0),
|
||
match$1=int_of_string_opt$0(arg$2);
|
||
if(match$1)
|
||
{var x$0=match$1[1];r$2[1] = x$0;return consume_arg(0)}
|
||
throw [0,Stop,[1,s,arg$2,cst_an_integer$0]];
|
||
case 8:
|
||
var
|
||
f$3=param[1],
|
||
arg$3=get_arg(0),
|
||
match$2=float_of_string_opt(arg$3);
|
||
if(match$2)
|
||
{var x$1=match$2[1];
|
||
caml_call1(f$3,x$1);
|
||
return consume_arg(0)}
|
||
throw [0,Stop,[1,s,arg$3,cst_a_float]];
|
||
case 9:
|
||
var
|
||
r$3=param[1],
|
||
arg$4=get_arg(0),
|
||
match$3=float_of_string_opt(arg$4);
|
||
if(match$3)
|
||
{var x$2=match$3[1];r$3[1] = x$2;return consume_arg(0)}
|
||
throw [0,Stop,[1,s,arg$4,cst_a_float$0]];
|
||
case 10:
|
||
var specs=param[1];
|
||
no_arg(0);
|
||
return iter$2(treat_action,specs);
|
||
case 11:
|
||
var f$4=param[2],symb=param[1],arg$5=get_arg(0);
|
||
if(mem(arg$5,symb))
|
||
{caml_call1(f$4,arg$5);return consume_arg(0)}
|
||
throw [0,
|
||
Stop,
|
||
[1,
|
||
s,
|
||
arg$5,
|
||
symbol(cst_one_of,make_symlist(cst$57,cst$56,cst$55,symb))]];
|
||
case 12:
|
||
var f$5=param[1];
|
||
no_arg(0);
|
||
for(;;)
|
||
{if(current[1] < (argv[1].length - 1 - 1 | 0))
|
||
{var _oe_=current[1] + 1 | 0;
|
||
caml_call1(f$5,caml_check_bound(argv[1],_oe_)[1 + _oe_]);
|
||
consume_arg(0);
|
||
continue}
|
||
return 0}
|
||
default:
|
||
var f$6=param[1];
|
||
if(1 - allow_expand)
|
||
throw [0,Invalid_argument,cst_Arg_Expand_is_is_only_allo];
|
||
var arg$6=get_arg(0),newarg=caml_call1(f$6,arg$6);
|
||
consume_arg(0);
|
||
var
|
||
before=sub$1(argv[1],0,current[1] + 1 | 0),
|
||
after=
|
||
sub$1
|
||
(argv[1],
|
||
current[1] + 1 | 0,
|
||
(argv[1].length - 1 - current[1] | 0) - 1 | 0);
|
||
argv[1]
|
||
=
|
||
caml_array_concat([0,before,[0,newarg,[0,after,0]]]);
|
||
return 0}}
|
||
return treat_action},
|
||
treat_action=treat_action$0(s,no_arg,get_arg,consume_arg);
|
||
treat_action(action);
|
||
switch$0 = 1}
|
||
if(! switch$0)caml_call1(anonfun,s)}
|
||
catch(exn$0)
|
||
{exn$0 = caml_wrap_exception(exn$0);
|
||
if(exn$0[1] === Bad){var m=exn$0[2];throw convert_error([3,m])}
|
||
if(exn$0[1] === Stop){var e=exn$0[2];throw convert_error(e)}
|
||
throw exn$0;
|
||
var exn=exn$0}
|
||
current[1]++;
|
||
continue}
|
||
return 0}}
|
||
function parse_and_expand_argv_dynamic
|
||
(current,argv,speclist,anonfun,errmsg)
|
||
{return parse_and_expand_argv_dynamic_
|
||
(1,current,argv,speclist,anonfun,errmsg)}
|
||
function parse_argv_dynamic(opt,argv,speclist,anonfun,errmsg)
|
||
{if(opt)var sth=opt[1],current$0=sth;else var current$0=current;
|
||
return parse_and_expand_argv_dynamic_
|
||
(0,current$0,[0,argv],speclist,anonfun,errmsg)}
|
||
function parse_argv(opt,argv,speclist,anonfun,errmsg)
|
||
{if(opt)var sth=opt[1],current$0=sth;else var current$0=current;
|
||
return parse_argv_dynamic
|
||
([0,current$0],argv,[0,speclist],anonfun,errmsg)}
|
||
function parse(l,f,msg)
|
||
{try
|
||
{var _n__=parse_argv(0,caml_sys_argv(0),l,f,msg);return _n__}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Bad)
|
||
{var msg$0=exn[2];caml_call1(eprintf(_a9_),msg$0);return exit(2)}
|
||
if(exn[1] === Help)
|
||
{var msg$1=exn[2];caml_call1(printf(_a__),msg$1);return exit(0)}
|
||
throw exn}}
|
||
function parse_dynamic(l,f,msg)
|
||
{try
|
||
{var _n9_=parse_argv_dynamic(0,caml_sys_argv(0),l,f,msg);return _n9_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Bad)
|
||
{var msg$0=exn[2];caml_call1(eprintf(_a$_),msg$0);return exit(2)}
|
||
if(exn[1] === Help)
|
||
{var msg$1=exn[2];caml_call1(printf(_ba_),msg$1);return exit(0)}
|
||
throw exn}}
|
||
function parse_expand(l,f,msg)
|
||
{try
|
||
{var
|
||
argv=[0,caml_sys_argv(0)],
|
||
spec=[0,l],
|
||
current$0=[0,current[1]],
|
||
_n8_=parse_and_expand_argv_dynamic(current$0,argv,spec,f,msg);
|
||
return _n8_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Bad)
|
||
{var msg$0=exn[2];caml_call1(eprintf(_bb_),msg$0);return exit(2)}
|
||
if(exn[1] === Help)
|
||
{var msg$1=exn[2];caml_call1(printf(_bc_),msg$1);return exit(0)}
|
||
throw exn}}
|
||
function second_word(s)
|
||
{var len=caml_ml_string_length(s);
|
||
function loop(n)
|
||
{var n$0=n;
|
||
for(;;)
|
||
{if(len <= n$0)return len;
|
||
if(32 === caml_string_get(s,n$0))
|
||
{var n$1=n$0 + 1 | 0,n$0=n$1;continue}
|
||
return n$0}}
|
||
try
|
||
{var n$0=index$0(s,9)}
|
||
catch(_n6_)
|
||
{_n6_ = caml_wrap_exception(_n6_);
|
||
if(_n6_ === Not_found)
|
||
{try
|
||
{var n=index$0(s,32)}
|
||
catch(_n7_)
|
||
{_n7_ = caml_wrap_exception(_n7_);
|
||
if(_n7_ === Not_found)return len;
|
||
throw _n7_}
|
||
return loop(n + 1 | 0)}
|
||
throw _n6_}
|
||
return loop(n$0 + 1 | 0)}
|
||
function max_arg_len(cur,param)
|
||
{var doc=param[3],spec=param[2],kwd=param[1];
|
||
return 11 === spec[0]
|
||
?max(cur,caml_ml_string_length(kwd))
|
||
:max(cur,caml_ml_string_length(kwd) + second_word(doc) | 0)}
|
||
function replace_leading_tab(s)
|
||
{var seen=[0,0];
|
||
return map$4
|
||
(function(c)
|
||
{if(9 === c && ! seen[1]){seen[1] = 1;return 32}return c},
|
||
s)}
|
||
function align(opt,speclist)
|
||
{if(opt)var sth=opt[1],limit=sth;else var limit=max_int;
|
||
var
|
||
completed=add_help(speclist),
|
||
len=fold_left$0(max_arg_len,0,completed),
|
||
len$0=min(len,limit);
|
||
return map$2
|
||
(function(ksd)
|
||
{var _n4_=ksd[1],_n5_=ksd[2];
|
||
if(caml_string_notequal(ksd[3],cst$58))
|
||
{if(11 === _n5_[0])
|
||
{var
|
||
msg$0=ksd[3],
|
||
cutcol$0=second_word(msg$0),
|
||
spaces$0=make$0(max(0,len$0 - cutcol$0 | 0) + 3 | 0,32);
|
||
return [0,
|
||
_n4_,
|
||
_n5_,
|
||
symbol(cst$59,symbol(spaces$0,replace_leading_tab(msg$0)))]}
|
||
var
|
||
msg=ksd[3],
|
||
spec=ksd[2],
|
||
cutcol=second_word(msg),
|
||
kwd_len=caml_ml_string_length(_n4_),
|
||
diff=(len$0 - kwd_len | 0) - cutcol | 0;
|
||
if(0 < diff)
|
||
{var
|
||
spaces=make$0(diff,32),
|
||
prefix=sub$0(replace_leading_tab(msg),0,cutcol),
|
||
suffix=
|
||
sub$0(msg,cutcol,caml_ml_string_length(msg) - cutcol | 0);
|
||
return [0,_n4_,spec,symbol(prefix,symbol(spaces,suffix))]}
|
||
return [0,_n4_,spec,replace_leading_tab(msg)]}
|
||
return ksd},
|
||
completed)}
|
||
function read_aux(trim,sep,file)
|
||
{var ic=open_in_bin(file),buf=create$2(200),words=[0,0];
|
||
function stash(param)
|
||
{var s=contents(buf);
|
||
if(trim)
|
||
{var len=caml_ml_string_length(s),switch$0=0;
|
||
if(0 < len && 13 === caml_string_get(s,len - 1 | 0))
|
||
{var _n3_=sub$0(s,0,len - 1 | 0);switch$0 = 1}
|
||
if(! switch$0)var _n3_=s;
|
||
var word=_n3_}
|
||
else
|
||
var word=s;
|
||
words[1] = [0,word,words[1]];
|
||
return clear$1(buf)}
|
||
try
|
||
{for(;;)
|
||
{var c=caml_ml_input_char(ic);
|
||
if(c === sep)stash(0);else add_char(buf,c);
|
||
continue}}
|
||
catch(_n2_)
|
||
{_n2_ = caml_wrap_exception(_n2_);
|
||
if(_n2_ === End_of_file)
|
||
{if(0 < buf[2])stash(0);
|
||
caml_ml_close_channel(ic);
|
||
return of_list(rev(words[1]))}
|
||
throw _n2_}}
|
||
var _bd_=10,_be_=1;
|
||
function read_arg(_n1_){return read_aux(_be_,_bd_,_n1_)}
|
||
var _bf_=0,_bg_=0;
|
||
function read_arg0(_n0_){return read_aux(_bg_,_bf_,_n0_)}
|
||
function write_aux(sep,file,args)
|
||
{var oc=open_out_bin(file);
|
||
iter$5(function(s){return caml_call2(fprintf(oc,_bh_),s,sep)},args);
|
||
return close_out(oc)}
|
||
var _bi_=10;
|
||
function write_arg(_nY_,_nZ_){return write_aux(_bi_,_nY_,_nZ_)}
|
||
var _bj_=0;
|
||
function write_arg0(_nW_,_nX_){return write_aux(_bj_,_nW_,_nX_)}
|
||
var
|
||
Stdlib_arg=
|
||
[0,
|
||
parse,
|
||
parse_dynamic,
|
||
parse_argv,
|
||
parse_argv_dynamic,
|
||
parse_and_expand_argv_dynamic,
|
||
parse_expand,
|
||
Help,
|
||
Bad,
|
||
usage,
|
||
usage_string,
|
||
align,
|
||
current,
|
||
read_arg,
|
||
read_arg0,
|
||
write_arg,
|
||
write_arg0];
|
||
caml_register_global(780,Stdlib_arg,"Stdlib__arg");
|
||
var printers=[0,0];
|
||
function field(x,i)
|
||
{var f=x[1 + i];
|
||
return is_block(f)
|
||
?caml_obj_tag(f) === 252
|
||
?caml_call1(sprintf(_bk_),f)
|
||
:caml_obj_tag(f) === 253?to_string(f):cst$60
|
||
:caml_call1(sprintf(_bl_),f)}
|
||
function other_fields(x,i)
|
||
{if(x.length - 1 <= i)return cst$61;
|
||
var _nU_=other_fields(x,i + 1 | 0),_nV_=field(x,i);
|
||
return caml_call2(sprintf(_bm_),_nV_,_nU_)}
|
||
function use_printers(x)
|
||
{function conv(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var tl=param$0[2],hd=param$0[1];
|
||
try
|
||
{var switch$0=0,val=caml_call1(hd,x);switch$0 = 1}
|
||
catch(_nT_){}
|
||
if(switch$0 && val){var s=val[1];return [0,s]}
|
||
var param$0=tl;
|
||
continue}
|
||
return 0}}
|
||
return conv(printers[1])}
|
||
function to_string_default(x)
|
||
{if(x === Out_of_memory)return cst_Out_of_memory;
|
||
if(x === Stack_overflow)return cst_Stack_overflow;
|
||
if(x[1] === Match_failure)
|
||
{var match$0=x[2],char$0=match$0[3],line=match$0[2],file=match$0[1];
|
||
return caml_call5
|
||
(sprintf(locfmt),
|
||
file,
|
||
line,
|
||
char$0,
|
||
char$0 + 5 | 0,
|
||
cst_Pattern_matching_failed)}
|
||
if(x[1] === Assert_failure)
|
||
{var
|
||
match$1=x[2],
|
||
char$1=match$1[3],
|
||
line$0=match$1[2],
|
||
file$0=match$1[1];
|
||
return caml_call5
|
||
(sprintf(locfmt),
|
||
file$0,
|
||
line$0,
|
||
char$1,
|
||
char$1 + 6 | 0,
|
||
cst_Assertion_failed)}
|
||
if(x[1] === Undefined_recursive_module)
|
||
{var
|
||
match$2=x[2],
|
||
char$2=match$2[3],
|
||
line$1=match$2[2],
|
||
file$1=match$2[1];
|
||
return caml_call5
|
||
(sprintf(locfmt),
|
||
file$1,
|
||
line$1,
|
||
char$2,
|
||
char$2 + 6 | 0,
|
||
cst_Undefined_recursive_module)}
|
||
if(0 === caml_obj_tag(x))
|
||
{var constructor=x[1][1],match=x.length - 1;
|
||
if(2 < match >>> 0)
|
||
var
|
||
_nP_=other_fields(x,2),
|
||
_nQ_=field(x,1),
|
||
_nS_=caml_call2(sprintf(_bn_),_nQ_,_nP_);
|
||
else
|
||
switch(match)
|
||
{case 0:var _nS_=cst$62;break;
|
||
case 1:var _nS_=cst$63;break;
|
||
default:var _nR_=field(x,1),_nS_=caml_call1(sprintf(_bo_),_nR_)}
|
||
return symbol(constructor,_nS_)}
|
||
return x[1]}
|
||
function to_string$7(e)
|
||
{var match=use_printers(e);
|
||
if(match){var s=match[1];return s}
|
||
return to_string_default(e)}
|
||
function print(fct,arg)
|
||
{try
|
||
{var _nO_=caml_call1(fct,arg);return _nO_}
|
||
catch(x)
|
||
{x = caml_wrap_exception(x);
|
||
var _nN_=to_string$7(x);
|
||
caml_call1(eprintf(_bp_),_nN_);
|
||
caml_ml_flush(stderr);
|
||
throw x}}
|
||
function catch$0(fct,arg)
|
||
{try
|
||
{var _nM_=caml_call1(fct,arg);return _nM_}
|
||
catch(x)
|
||
{x = caml_wrap_exception(x);
|
||
caml_ml_flush(stdout);
|
||
var _nL_=to_string$7(x);
|
||
caml_call1(eprintf(_bq_),_nL_);
|
||
return exit(2)}}
|
||
function convert_raw_backtrace(bt)
|
||
{return [0,runtime.caml_convert_raw_backtrace(bt)]}
|
||
function format_backtrace_slot(pos,slot)
|
||
{function info(is_raise)
|
||
{return is_raise
|
||
?0 === pos?cst_Raised_at:cst_Re_raised_at
|
||
:0 === pos?cst_Raised_by_primitive_operat:cst_Called_from}
|
||
if(0 === slot[0])
|
||
{var
|
||
_nE_=slot[5],
|
||
_nF_=slot[4],
|
||
_nG_=slot[3],
|
||
_nH_=slot[6]?cst_inlined:cst$64,
|
||
_nI_=slot[2],
|
||
_nJ_=info(slot[1]);
|
||
return [0,caml_call6(sprintf(_br_),_nJ_,_nI_,_nH_,_nG_,_nF_,_nE_)]}
|
||
if(slot[1])return 0;
|
||
var _nK_=info(0);
|
||
return [0,caml_call1(sprintf(_bs_),_nK_)]}
|
||
function print_raw_backtrace(outchan,raw_backtrace)
|
||
{var backtrace=convert_raw_backtrace(raw_backtrace);
|
||
if(backtrace)
|
||
{var a=backtrace[1],_nC_=a.length - 1 - 1 | 0,_nB_=0;
|
||
if(! (_nC_ < 0))
|
||
{var i=_nB_;
|
||
for(;;)
|
||
{var match=format_backtrace_slot(i,caml_check_bound(a,i)[1 + i]);
|
||
if(match){var str=match[1];caml_call1(fprintf(outchan,_bt_),str)}
|
||
var _nD_=i + 1 | 0;
|
||
if(_nC_ !== i){var i=_nD_;continue}
|
||
break}}
|
||
return 0}
|
||
return fprintf(outchan,_bu_)}
|
||
function print_backtrace(outchan)
|
||
{return print_raw_backtrace(outchan,caml_get_exception_raw_backtra(0))}
|
||
function raw_backtrace_to_string(raw_backtrace)
|
||
{var backtrace=convert_raw_backtrace(raw_backtrace);
|
||
if(backtrace)
|
||
{var a=backtrace[1],b=create$2(1024),_nz_=a.length - 1 - 1 | 0,_ny_=0;
|
||
if(! (_nz_ < 0))
|
||
{var i=_ny_;
|
||
for(;;)
|
||
{var match=format_backtrace_slot(i,caml_check_bound(a,i)[1 + i]);
|
||
if(match){var str=match[1];caml_call1(bprintf(b,_bv_),str)}
|
||
var _nA_=i + 1 | 0;
|
||
if(_nz_ !== i){var i=_nA_;continue}
|
||
break}}
|
||
return contents(b)}
|
||
return cst_Program_not_linked_with_g_}
|
||
function backtrace_slot_is_raise(param)
|
||
{return 0 === param[0]?param[1]:param[1]}
|
||
function backtrace_slot_is_inline(param){return 0 === param[0]?param[6]:0}
|
||
function backtrace_slot_location(param)
|
||
{return 0 === param[0]?[0,[0,param[2],param[3],param[4],param[5]]]:0}
|
||
function backtrace_slots(raw_backtrace)
|
||
{var match=convert_raw_backtrace(raw_backtrace);
|
||
if(match)
|
||
{var backtrace=match[1],i$1=backtrace.length - 1 - 1 | 0,i=i$1;
|
||
for(;;)
|
||
{if(-1 === i)
|
||
var _nx_=0;
|
||
else
|
||
{var
|
||
param=caml_check_bound(backtrace,i)[1 + i],
|
||
_nw_=0 === param[0]?1:0;
|
||
if(! _nw_){var i$0=i - 1 | 0,i=i$0;continue}
|
||
var _nx_=_nw_}
|
||
return _nx_?[0,backtrace]:0}}
|
||
return 0}
|
||
function get_backtrace(param)
|
||
{return raw_backtrace_to_string(caml_get_exception_raw_backtra(0))}
|
||
function register_printer(fn){printers[1] = [0,fn,printers[1]];return 0}
|
||
function exn_slot(x){return 0 === caml_obj_tag(x)?x[1]:x}
|
||
function exn_slot_id(x){var slot=exn_slot(x);return slot[2]}
|
||
function exn_slot_name(x){var slot=exn_slot(x);return slot[1]}
|
||
var uncaught_exception_handler=[0,0];
|
||
function set_uncaught_exception_handler(fn)
|
||
{uncaught_exception_handler[1] = [0,fn];return 0}
|
||
function _bw_(_nv_){return runtime.caml_raw_backtrace_next_slot(_nv_)}
|
||
function _bx_(_nu_){return runtime.caml_convert_raw_backtrace_slot(_nu_)}
|
||
function _by_(_nt_,_ns_)
|
||
{return runtime.caml_raw_backtrace_slot(_nt_,_ns_)}
|
||
function _bz_(_nr_){return runtime.caml_raw_backtrace_length(_nr_)}
|
||
var
|
||
_bA_=
|
||
[0,
|
||
backtrace_slot_is_raise,
|
||
backtrace_slot_is_inline,
|
||
backtrace_slot_location,
|
||
format_backtrace_slot];
|
||
function _bB_(_nq_){return caml_get_exception_raw_backtra(_nq_)}
|
||
function _bC_(_np_){return runtime.caml_backtrace_status(_np_)}
|
||
var
|
||
Stdlib_printexc=
|
||
[0,
|
||
to_string$7,
|
||
to_string_default,
|
||
print,
|
||
catch$0,
|
||
print_backtrace,
|
||
get_backtrace,
|
||
function(_no_){return runtime.caml_record_backtrace(_no_)},
|
||
_bC_,
|
||
register_printer,
|
||
use_printers,
|
||
_bB_,
|
||
print_raw_backtrace,
|
||
raw_backtrace_to_string,
|
||
set_uncaught_exception_handler,
|
||
backtrace_slots,
|
||
_bA_,
|
||
_bz_,
|
||
_by_,
|
||
_bx_,
|
||
_bw_,
|
||
exn_slot_id,
|
||
exn_slot_name];
|
||
caml_register_global(781,Stdlib_printexc,"Stdlib__printexc");
|
||
function const$0(c,param){return c}
|
||
function flip(f,x,y){return caml_call2(f,y,x)}
|
||
function negate(p,v){return 1 - caml_call1(p,v)}
|
||
var
|
||
Finally_raised=
|
||
[248,cst_Stdlib_Fun_Finally_raised,caml_fresh_oo_id(0)];
|
||
function protect(finally$0,work)
|
||
{function finally_no_exn(param)
|
||
{try
|
||
{var _nn_=caml_call1(finally$0,0);return _nn_}
|
||
catch(e)
|
||
{e = caml_wrap_exception(e);
|
||
var bt=caml_get_exception_raw_backtra(0),exn=[0,Finally_raised,e];
|
||
caml_restore_raw_backtrace(exn,bt);
|
||
throw exn}}
|
||
try
|
||
{var result=caml_call1(work,0)}
|
||
catch(work_exn)
|
||
{work_exn = caml_wrap_exception(work_exn);
|
||
var work_bt=caml_get_exception_raw_backtra(0);
|
||
finally_no_exn(0);
|
||
caml_restore_raw_backtrace(work_exn,work_bt);
|
||
throw work_exn}
|
||
finally_no_exn(0);
|
||
return result}
|
||
var Stdlib_fun=[0,const$0,flip,negate,protect,Finally_raised];
|
||
caml_register_global(782,Stdlib_fun,"Stdlib__fun");
|
||
function print_stat(c)
|
||
{var st=runtime.caml_gc_stat(0),_m8_=st[4];
|
||
caml_call1(fprintf(c,_bD_),_m8_);
|
||
var _m9_=st[5];
|
||
caml_call1(fprintf(c,_bE_),_m9_);
|
||
var _m__=st[14];
|
||
caml_call1(fprintf(c,_bF_),_m__);
|
||
fprintf(c,_bG_);
|
||
var
|
||
_m$_=st[1],
|
||
l1=caml_ml_string_length(caml_call1(sprintf(_bH_),_m$_)),
|
||
_na_=st[1];
|
||
caml_call2(fprintf(c,_bI_),l1,_na_);
|
||
var _nb_=st[2];
|
||
caml_call2(fprintf(c,_bJ_),l1,_nb_);
|
||
var _nc_=st[3];
|
||
caml_call2(fprintf(c,_bK_),l1,_nc_);
|
||
fprintf(c,_bL_);
|
||
var
|
||
_nd_=st[15],
|
||
l2=caml_ml_string_length(caml_call1(sprintf(_bM_),_nd_)),
|
||
_ne_=st[15];
|
||
caml_call2(fprintf(c,_bN_),l2,_ne_);
|
||
var _nf_=st[6];
|
||
caml_call2(fprintf(c,_bO_),l2,_nf_);
|
||
var _ng_=st[8];
|
||
caml_call2(fprintf(c,_bP_),l2,_ng_);
|
||
var _nh_=st[10];
|
||
caml_call2(fprintf(c,_bQ_),l2,_nh_);
|
||
var _ni_=st[12];
|
||
caml_call2(fprintf(c,_bR_),l2,_ni_);
|
||
var _nj_=st[13];
|
||
caml_call2(fprintf(c,_bS_),l2,_nj_);
|
||
fprintf(c,_bT_);
|
||
var _nk_=st[9];
|
||
caml_call1(fprintf(c,_bU_),_nk_);
|
||
var _nl_=st[11];
|
||
caml_call1(fprintf(c,_bV_),_nl_);
|
||
var _nm_=st[7];
|
||
return caml_call1(fprintf(c,_bW_),_nm_)}
|
||
function allocated_bytes(param)
|
||
{var
|
||
match=runtime.caml_gc_counters(0),
|
||
ma=match[3],
|
||
pro=match[2],
|
||
mi=match[1];
|
||
return (mi + ma - pro) * 4}
|
||
function create_alarm(f){return [0,1]}
|
||
function delete_alarm(a){a[1] = 0;return 0}
|
||
function _bX_(_m7_){return runtime.caml_final_release(_m7_)}
|
||
function _bY_(_m6_,_m5_)
|
||
{return runtime.caml_final_register_called_without_value(_m6_,_m5_)}
|
||
var
|
||
Stdlib_gc=
|
||
[0,
|
||
print_stat,
|
||
allocated_bytes,
|
||
function(_m4_,_m3_){return runtime.caml_final_register(_m4_,_m3_)},
|
||
_bY_,
|
||
_bX_,
|
||
create_alarm,
|
||
delete_alarm];
|
||
caml_register_global(783,Stdlib_gc,"Stdlib__gc");
|
||
function string(str)
|
||
{return caml_md5_string(str,0,caml_ml_string_length(str))}
|
||
function bytes(b){return string(caml_string_of_bytes(b))}
|
||
function substring(str,ofs,len)
|
||
{if
|
||
(0
|
||
<=
|
||
ofs
|
||
&&
|
||
0
|
||
<=
|
||
len
|
||
&&
|
||
!
|
||
((caml_ml_string_length(str) - len | 0) < ofs))
|
||
return caml_md5_string(str,ofs,len);
|
||
return invalid_arg(cst_Digest_substring)}
|
||
function subbytes(b,ofs,len)
|
||
{return substring(caml_string_of_bytes(b),ofs,len)}
|
||
function file(filename)
|
||
{var ic=open_in_bin(filename);
|
||
try
|
||
{var d=runtime.caml_md5_chan(ic,-1)}
|
||
catch(e){e = caml_wrap_exception(e);caml_ml_close_channel(ic);throw e}
|
||
caml_ml_close_channel(ic);
|
||
return d}
|
||
function output$0(chan,digest){return output_string(chan,digest)}
|
||
function input$0(chan){return really_input_string(chan,16)}
|
||
function char_hex(n){var _m2_=10 <= n?87:48;return n + _m2_ | 0}
|
||
function to_hex(d)
|
||
{if(16 !== caml_ml_string_length(d))invalid_arg(cst_Digest_to_hex);
|
||
var result=caml_create_bytes(32),i=0;
|
||
for(;;)
|
||
{var x=caml_string_get(d,i);
|
||
caml_bytes_unsafe_set(result,i * 2 | 0,char_hex(x >>> 4 | 0));
|
||
caml_bytes_unsafe_set(result,(i * 2 | 0) + 1 | 0,char_hex(x & 15));
|
||
var _m1_=i + 1 | 0;
|
||
if(15 !== i){var i=_m1_;continue}
|
||
return caml_string_of_bytes(result)}}
|
||
function from_hex(s)
|
||
{if(32 !== caml_ml_string_length(s))invalid_arg(cst_Digest_from_hex);
|
||
function digit(c)
|
||
{if(65 <= c)
|
||
{if(97 <= c)
|
||
{if(! (103 <= c))return (c - 97 | 0) + 10 | 0}
|
||
else
|
||
if(! (71 <= c))return (c - 65 | 0) + 10 | 0}
|
||
else
|
||
{var switcher=c - 48 | 0;if(! (9 < switcher >>> 0))return c - 48 | 0}
|
||
throw [0,Invalid_argument,cst_Digest_from_hex$0]}
|
||
var result=caml_create_bytes(16),i=0;
|
||
for(;;)
|
||
{var i$0=2 * i | 0,_mZ_=digit(caml_string_get(s,i$0 + 1 | 0));
|
||
caml_bytes_set
|
||
(result,i,chr((digit(caml_string_get(s,i$0)) << 4) + _mZ_ | 0));
|
||
var _m0_=i + 1 | 0;
|
||
if(15 !== i){var i=_m0_;continue}
|
||
return caml_string_of_bytes(result)}}
|
||
var
|
||
Stdlib_digest=
|
||
[0,
|
||
compare$5,
|
||
equal$5,
|
||
string,
|
||
bytes,
|
||
substring,
|
||
subbytes,
|
||
file,
|
||
output$0,
|
||
input$0,
|
||
to_hex,
|
||
from_hex];
|
||
caml_register_global(784,Stdlib_digest,"Stdlib__digest");
|
||
function new_state(param){return [0,caml_make_vect(55,0),0]}
|
||
function assign(st1,st2)
|
||
{blit$1(st2[1],0,st1[1],0,55);st1[2] = st2[2];return 0}
|
||
function full_init(s,seed)
|
||
{var seed$0=0 === seed.length - 1?[0,0]:seed,l=seed$0.length - 1,i$0=0;
|
||
for(;;)
|
||
{caml_check_bound(s[1],i$0)[1 + i$0] = i$0;
|
||
var _mY_=i$0 + 1 | 0;
|
||
if(54 !== i$0){var i$0=_mY_;continue}
|
||
var accu=[0,cst_x$1],_mU_=54 + max(55,l) | 0,_mT_=0;
|
||
if(! (_mU_ < 0))
|
||
{var i=_mT_;
|
||
for(;;)
|
||
{var
|
||
j=i % 55 | 0,
|
||
k=caml_mod(i,l),
|
||
x=caml_check_bound(seed$0,k)[1 + k];
|
||
accu[1] = string(symbol(accu[1],caml_string_of_jsbytes("" + x)));
|
||
var
|
||
_mV_=accu[1],
|
||
_mP_=caml_string_get(_mV_,3) << 24,
|
||
_mQ_=caml_string_get(_mV_,2) << 16,
|
||
_mR_=caml_string_get(_mV_,1) << 8,
|
||
_mS_=((caml_string_get(_mV_,0) + _mR_ | 0) + _mQ_ | 0) + _mP_ | 0,
|
||
_mW_=(caml_check_bound(s[1],j)[1 + j] ^ _mS_) & 1073741823;
|
||
caml_check_bound(s[1],j)[1 + j] = _mW_;
|
||
var _mX_=i + 1 | 0;
|
||
if(_mU_ !== i){var i=_mX_;continue}
|
||
break}}
|
||
s[2] = 0;
|
||
return 0}}
|
||
function make$2(seed)
|
||
{var result=new_state(0);full_init(result,seed);return result}
|
||
function make_self_init(param){return make$2(caml_sys_random_seed(0))}
|
||
function copy$5(s){var result=new_state(0);assign(result,s);return result}
|
||
function bits(s)
|
||
{s[2] = (s[2] + 1 | 0) % 55 | 0;
|
||
var
|
||
_mM_=s[2],
|
||
curval=caml_check_bound(s[1],_mM_)[1 + _mM_],
|
||
_mN_=(s[2] + 24 | 0) % 55 | 0,
|
||
newval=
|
||
caml_check_bound(s[1],_mN_)[1 + _mN_]
|
||
+
|
||
(curval ^ (curval >>> 25 | 0) & 31)
|
||
|
|
||
0,
|
||
newval30=newval & 1073741823,
|
||
_mO_=s[2];
|
||
caml_check_bound(s[1],_mO_)[1 + _mO_] = newval30;
|
||
return newval30}
|
||
function int$0(s,bound)
|
||
{if(! (1073741823 < bound) && 0 < bound)
|
||
for(;;)
|
||
{var r=bits(s),v=caml_mod(r,bound);
|
||
if(((1073741823 - bound | 0) + 1 | 0) < (r - v | 0))continue;
|
||
return v}
|
||
return invalid_arg(cst_Random_int)}
|
||
function int32(s,bound)
|
||
{if(caml_lessequal(bound,0))return invalid_arg(cst_Random_int32);
|
||
for(;;)
|
||
{var b1=bits(s),b2=(bits(s) & 1) << 30,r=b1 | b2,v=caml_mod(r,bound);
|
||
if(caml_greaterthan(r - v | 0,(2147483647 - bound | 0) + 1 | 0))
|
||
continue;
|
||
return v}}
|
||
function int64(s,bound)
|
||
{if(caml_lessequal(bound,_b0_))return invalid_arg(cst_Random_int64);
|
||
for(;;)
|
||
{var
|
||
b1=caml_int64_of_int32(bits(s)),
|
||
b2=caml_int64_shift_left(caml_int64_of_int32(bits(s)),30),
|
||
b3=caml_int64_shift_left(caml_int64_of_int32(bits(s) & 7),60),
|
||
r=caml_int64_or(b1,caml_int64_or(b2,b3)),
|
||
v=runtime.caml_int64_mod(r,bound);
|
||
if
|
||
(caml_greaterthan
|
||
(caml_int64_sub(r,v),
|
||
caml_int64_add(caml_int64_sub(max_int$2,bound),_bZ_)))
|
||
continue;
|
||
return v}}
|
||
function nativeint(s,bound){return int32(s,bound)}
|
||
function float$0(s,bound)
|
||
{var r1=bits(s),r2=bits(s);
|
||
return (r1 / 1073741824. + r2) / 1073741824. * bound}
|
||
function bool(s){return 0 === (bits(s) & 1)?1:0}
|
||
var default$0=[0,_b1_.slice(),0];
|
||
function bits$0(param){return bits(default$0)}
|
||
function int$1(bound){return int$0(default$0,bound)}
|
||
function int32$0(bound){return int32(default$0,bound)}
|
||
function nativeint$0(bound){return nativeint(default$0,bound)}
|
||
function int64$0(bound){return int64(default$0,bound)}
|
||
function float$1(scale){return float$0(default$0,scale)}
|
||
function bool$0(param){return bool(default$0)}
|
||
function full_init$0(seed){return full_init(default$0,seed)}
|
||
function init$4(seed){return full_init(default$0,[0,seed])}
|
||
function self_init(param){return full_init$0(caml_sys_random_seed(0))}
|
||
function get_state(param){return copy$5(default$0)}
|
||
function set_state(s){return assign(default$0,s)}
|
||
var
|
||
_b2_=
|
||
[0,
|
||
make$2,
|
||
make_self_init,
|
||
copy$5,
|
||
bits,
|
||
int$0,
|
||
int32,
|
||
nativeint,
|
||
int64,
|
||
float$0,
|
||
bool],
|
||
Stdlib_random=
|
||
[0,
|
||
init$4,
|
||
full_init$0,
|
||
self_init,
|
||
bits$0,
|
||
int$1,
|
||
int32$0,
|
||
nativeint$0,
|
||
int64$0,
|
||
float$1,
|
||
bool$0,
|
||
_b2_,
|
||
get_state,
|
||
set_state];
|
||
caml_register_global(785,Stdlib_random,"Stdlib__random");
|
||
function ongoing_traversal(h)
|
||
{var _mK_=h.length - 1 < 4?1:0,_mL_=_mK_ || (h[4] < 0?1:0);return _mL_}
|
||
function flip_ongoing_traversal(h){h[4] = - h[4] | 0;return 0}
|
||
try
|
||
{var _cI_=caml_sys_getenv(cst_OCAMLRUNPARAM),params=_cI_}
|
||
catch(_mI_)
|
||
{_mI_ = caml_wrap_exception(_mI_);
|
||
if(_mI_ !== Not_found)throw _mI_;
|
||
try
|
||
{var _cH_=caml_sys_getenv(cst_CAMLRUNPARAM),_b3_=_cH_}
|
||
catch(_mJ_)
|
||
{_mJ_ = caml_wrap_exception(_mJ_);
|
||
if(_mJ_ !== Not_found)throw _mJ_;
|
||
var _b3_=cst$65}
|
||
var params=_b3_}
|
||
var
|
||
randomized_default=contains$0(params,82),
|
||
randomized=[0,randomized_default];
|
||
function randomize(param){randomized[1] = 1;return 0}
|
||
function is_randomized(param){return randomized[1]}
|
||
var prng=[246,function(_mH_){return caml_call1(_b2_[2],0)}];
|
||
function create$3(opt,initial_size)
|
||
{if(opt)var sth=opt[1],random=sth;else var random=randomized[1];
|
||
var x=16;
|
||
for(;;)
|
||
{if(! (initial_size <= x) && ! (max_array_length < (x * 2 | 0)))
|
||
{var x$0=x * 2 | 0,x=x$0;continue}
|
||
if(random)
|
||
var
|
||
_mF_=caml_obj_tag(prng),
|
||
_mG_=250 === _mF_?prng[1]:246 === _mF_?force_lazy_block(prng):prng,
|
||
seed=caml_call1(_b2_[4],_mG_);
|
||
else
|
||
var seed=0;
|
||
return [0,0,caml_make_vect(x,0),seed,x]}}
|
||
function clear$2(h)
|
||
{var _mE_=0 < h[1]?1:0;
|
||
return _mE_?(h[1] = 0,fill$0(h[2],0,h[2].length - 1,0)):_mE_}
|
||
function reset$0(h)
|
||
{var len=h[2].length - 1;
|
||
if(4 <= h.length - 1 && len !== abs(h[4]))
|
||
{h[1] = 0;h[2] = caml_make_vect(abs(h[4]),0);return 0}
|
||
return clear$2(h)}
|
||
function copy_bucketlist(param)
|
||
{if(param)
|
||
{var
|
||
key=param[1],
|
||
data=param[2],
|
||
next=param[3],
|
||
prec$0=[0,key,data,next],
|
||
prec=prec$0,
|
||
param$0=next;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
key$0=param$0[1],
|
||
data$0=param$0[2],
|
||
next$0=param$0[3],
|
||
r=[0,key$0,data$0,next$0];
|
||
if(prec){prec[3] = r;var prec=r,param$0=next$0;continue}
|
||
throw [0,Assert_failure,_b4_]}
|
||
return prec$0}}
|
||
return 0}
|
||
function copy$6(init)
|
||
{var _mB_=init[4],_mC_=init[3],_mD_=map$5(copy_bucketlist,init[2]);
|
||
return [0,init[1],_mD_,_mC_,_mB_]}
|
||
function length$4(h){return h[1]}
|
||
function resize$0(indexfun,h)
|
||
{var
|
||
odata=h[2],
|
||
osize=odata.length - 1,
|
||
nsize=osize * 2 | 0,
|
||
_ms_=nsize < max_array_length?1:0;
|
||
if(_ms_)
|
||
{var
|
||
ndata=caml_make_vect(nsize,0),
|
||
ndata_tail=caml_make_vect(nsize,0),
|
||
inplace=1 - ongoing_traversal(h);
|
||
h[2] = ndata;
|
||
var _mu_=osize - 1 | 0,_mt_=0;
|
||
if(! (_mu_ < 0))
|
||
{var i$0=_mt_;
|
||
a:
|
||
for(;;)
|
||
{var cell$1=caml_check_bound(odata,i$0)[1 + i$0],cell=cell$1;
|
||
for(;;)
|
||
{if(cell)
|
||
{var
|
||
key=cell[1],
|
||
data=cell[2],
|
||
next=cell[3],
|
||
cell$0=inplace?cell:[0,key,data,0],
|
||
nidx=caml_call2(indexfun,h,key),
|
||
match=caml_check_bound(ndata_tail,nidx)[1 + nidx];
|
||
if(match)
|
||
match[3] = cell$0;
|
||
else
|
||
caml_check_bound(ndata,nidx)[1 + nidx] = cell$0;
|
||
caml_check_bound(ndata_tail,nidx)[1 + nidx] = cell$0;
|
||
var cell=next;
|
||
continue}
|
||
var _mA_=i$0 + 1 | 0;
|
||
if(_mu_ !== i$0){var i$0=_mA_;continue a}
|
||
break}
|
||
break}}
|
||
if(inplace)
|
||
{var _mw_=nsize - 1 | 0,_mv_=0;
|
||
if(! (_mw_ < 0))
|
||
{var i=_mv_;
|
||
for(;;)
|
||
{var match$0=caml_check_bound(ndata_tail,i)[1 + i];
|
||
if(match$0)match$0[3] = 0;
|
||
var _mz_=i + 1 | 0;
|
||
if(_mw_ !== i){var i=_mz_;continue}
|
||
break}}
|
||
var _mx_=0}
|
||
else
|
||
var _mx_=inplace;
|
||
var _my_=_mx_}
|
||
else
|
||
var _my_=_ms_;
|
||
return _my_}
|
||
function iter$10(f,h)
|
||
{function do_bucket(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var key=param$0[1],data=param$0[2],next=param$0[3];
|
||
caml_call2(f,key,data);
|
||
var param$0=next;
|
||
continue}
|
||
return 0}}
|
||
var old_trav=ongoing_traversal(h);
|
||
if(1 - old_trav)flip_ongoing_traversal(h);
|
||
try
|
||
{var d=h[2],_mo_=d.length - 1 - 1 | 0,_mn_=0;
|
||
if(! (_mo_ < 0))
|
||
{var i=_mn_;
|
||
for(;;)
|
||
{do_bucket(caml_check_bound(d,i)[1 + i]);
|
||
var _mr_=i + 1 | 0;
|
||
if(_mo_ !== i){var i=_mr_;continue}
|
||
break}}
|
||
var _mp_=1 - old_trav,_mq_=_mp_?flip_ongoing_traversal(h):_mp_;
|
||
return _mq_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(old_trav)throw exn;
|
||
flip_ongoing_traversal(h);
|
||
throw exn}}
|
||
function filter_map_inplace_bucket(f,h,i,prec,slot)
|
||
{var prec$0=prec,slot$0=slot;
|
||
for(;;)
|
||
{if(slot$0)
|
||
{var
|
||
key=slot$0[1],
|
||
data=slot$0[2],
|
||
next=slot$0[3],
|
||
match=caml_call2(f,key,data);
|
||
if(match)
|
||
{var data$0=match[1];
|
||
if(prec$0)
|
||
prec$0[3] = slot$0;
|
||
else
|
||
caml_check_bound(h[2],i)[1 + i] = slot$0;
|
||
slot$0[2] = data$0;
|
||
var prec$0=slot$0,slot$0=next;
|
||
continue}
|
||
h[1] = h[1] - 1 | 0;
|
||
var slot$0=next;
|
||
continue}
|
||
return prec$0
|
||
?(prec$0[3] = 0,0)
|
||
:(caml_check_bound(h[2],i)[1 + i] = 0,0)}}
|
||
function filter_map_inplace(f,h)
|
||
{var d=h[2],old_trav=ongoing_traversal(h);
|
||
if(1 - old_trav)flip_ongoing_traversal(h);
|
||
try
|
||
{var _mk_=d.length - 1 - 1 | 0,_mj_=0;
|
||
if(! (_mk_ < 0))
|
||
{var i=_mj_;
|
||
for(;;)
|
||
{filter_map_inplace_bucket(f,h,i,0,caml_check_bound(h[2],i)[1 + i]);
|
||
var _mm_=i + 1 | 0;
|
||
if(_mk_ !== i){var i=_mm_;continue}
|
||
break}}
|
||
var _ml_=0;
|
||
return _ml_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(old_trav)throw exn;
|
||
flip_ongoing_traversal(h);
|
||
throw exn}}
|
||
function fold$3(f,h,init)
|
||
{function do_bucket(b,accu)
|
||
{var b$0=b,accu$0=accu;
|
||
for(;;)
|
||
{if(b$0)
|
||
{var
|
||
key=b$0[1],
|
||
data=b$0[2],
|
||
next=b$0[3],
|
||
accu$1=caml_call3(f,key,data,accu$0),
|
||
b$0=next,
|
||
accu$0=accu$1;
|
||
continue}
|
||
return accu$0}}
|
||
var old_trav=ongoing_traversal(h);
|
||
if(1 - old_trav)flip_ongoing_traversal(h);
|
||
try
|
||
{var d=h[2],accu=[0,init],_mf_=d.length - 1 - 1 | 0,_me_=0;
|
||
if(! (_mf_ < 0))
|
||
{var i=_me_;
|
||
for(;;)
|
||
{var _mh_=accu[1];
|
||
accu[1] = do_bucket(caml_check_bound(d,i)[1 + i],_mh_);
|
||
var _mi_=i + 1 | 0;
|
||
if(_mf_ !== i){var i=_mi_;continue}
|
||
break}}
|
||
if(1 - old_trav)flip_ongoing_traversal(h);
|
||
var _mg_=accu[1];
|
||
return _mg_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(old_trav)throw exn;
|
||
flip_ongoing_traversal(h);
|
||
throw exn}}
|
||
function bucket_length(accu,param)
|
||
{var accu$0=accu,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
param$1=param$0[3],
|
||
accu$1=accu$0 + 1 | 0,
|
||
accu$0=accu$1,
|
||
param$0=param$1;
|
||
continue}
|
||
return accu$0}}
|
||
function stats(h)
|
||
{var
|
||
_mb_=h[2],
|
||
_mc_=0,
|
||
mbl=
|
||
fold_left$1(function(m,b){return max(m,bucket_length(0,b))},_mc_,_mb_),
|
||
histo=caml_make_vect(mbl + 1 | 0,0),
|
||
_md_=h[2];
|
||
iter$5
|
||
(function(b)
|
||
{var l=bucket_length(0,b);
|
||
histo[1 + l] = caml_check_bound(histo,l)[1 + l] + 1 | 0;
|
||
return 0},
|
||
_md_);
|
||
return [0,h[1],h[2].length - 1,mbl,histo]}
|
||
function to_seq$9(tbl)
|
||
{var tbl_data=tbl[2];
|
||
function aux(i,buck,param)
|
||
{var i$0=i,buck$0=buck;
|
||
for(;;)
|
||
{if(buck$0)
|
||
{var key=buck$0[1],data=buck$0[2],next=buck$0[3];
|
||
return [0,[0,key,data],function(_ma_){return aux(i$0,next,_ma_)}]}
|
||
if(i$0 === tbl_data.length - 1)return 0;
|
||
var
|
||
buck$1=caml_check_bound(tbl_data,i$0)[1 + i$0],
|
||
i$1=i$0 + 1 | 0,
|
||
i$0=i$1,
|
||
buck$0=buck$1;
|
||
continue}}
|
||
var _l9_=0,_l__=0;
|
||
return function(_l$_){return aux(_l__,_l9_,_l$_)}}
|
||
function to_seq_keys(m)
|
||
{var _l5_=to_seq$9(m);
|
||
function _l6_(_l8_){return _l8_[1]}
|
||
return function(_l7_){return map(_l6_,_l5_,_l7_)}}
|
||
function to_seq_values(m)
|
||
{var _l1_=to_seq$9(m);
|
||
function _l2_(_l4_){return _l4_[2]}
|
||
return function(_l3_){return map(_l2_,_l1_,_l3_)}}
|
||
function MakeSeeded(H)
|
||
{function key_index(h,key)
|
||
{var _l0_=h[2].length - 1 - 1 | 0;
|
||
return caml_call2(H[2],h[3],key) & _l0_}
|
||
function add(h,key,data)
|
||
{var
|
||
i=key_index(h,key),
|
||
bucket=[0,key,data,caml_check_bound(h[2],i)[1 + i]];
|
||
caml_check_bound(h[2],i)[1 + i] = bucket;
|
||
h[1] = h[1] + 1 | 0;
|
||
var _lZ_=h[2].length - 1 << 1 < h[1]?1:0;
|
||
return _lZ_?resize$0(key_index,h):_lZ_}
|
||
function remove(h,key)
|
||
{var
|
||
i=key_index(h,key),
|
||
c$0=caml_check_bound(h[2],i)[1 + i],
|
||
prec=0,
|
||
c=c$0;
|
||
for(;;)
|
||
{if(c)
|
||
{var k=c[1],next=c[3];
|
||
if(caml_call2(H[1],k,key))
|
||
{h[1] = h[1] - 1 | 0;
|
||
return prec
|
||
?(prec[3] = next,0)
|
||
:(caml_check_bound(h[2],i)[1 + i] = next,0)}
|
||
var prec=c,c=next;
|
||
continue}
|
||
return 0}}
|
||
function find(h,key)
|
||
{var _lY_=key_index(h,key),match=caml_check_bound(h[2],_lY_)[1 + _lY_];
|
||
if(match)
|
||
{var k1=match[1],d1=match[2],next1=match[3];
|
||
if(caml_call2(H[1],key,k1))return d1;
|
||
if(next1)
|
||
{var k2=next1[1],d2=next1[2],next2=next1[3];
|
||
if(caml_call2(H[1],key,k2))return d2;
|
||
if(next2)
|
||
{var k3=next2[1],d3=next2[2],next3=next2[3];
|
||
if(caml_call2(H[1],key,k3))return d3;
|
||
var param=next3;
|
||
for(;;)
|
||
{if(param)
|
||
{var k=param[1],data=param[2],next=param[3];
|
||
if(caml_call2(H[1],key,k))return data;
|
||
var param=next;
|
||
continue}
|
||
throw Not_found}}
|
||
throw Not_found}
|
||
throw Not_found}
|
||
throw Not_found}
|
||
function find_opt(h,key)
|
||
{var _lX_=key_index(h,key),match=caml_check_bound(h[2],_lX_)[1 + _lX_];
|
||
if(match)
|
||
{var k1=match[1],d1=match[2],next1=match[3];
|
||
if(caml_call2(H[1],key,k1))return [0,d1];
|
||
if(next1)
|
||
{var k2=next1[1],d2=next1[2],next2=next1[3];
|
||
if(caml_call2(H[1],key,k2))return [0,d2];
|
||
if(next2)
|
||
{var k3=next2[1],d3=next2[2],next3=next2[3];
|
||
if(caml_call2(H[1],key,k3))return [0,d3];
|
||
var param=next3;
|
||
for(;;)
|
||
{if(param)
|
||
{var k=param[1],data=param[2],next=param[3];
|
||
if(caml_call2(H[1],key,k))return [0,data];
|
||
var param=next;
|
||
continue}
|
||
return 0}}
|
||
return 0}
|
||
return 0}
|
||
return 0}
|
||
function find_all(h,key)
|
||
{function find_in_bucket(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var k=param$0[1],d=param$0[2],next=param$0[3];
|
||
if(caml_call2(H[1],k,key))return [0,d,find_in_bucket(next)];
|
||
var param$0=next;
|
||
continue}
|
||
return 0}}
|
||
var _lW_=key_index(h,key);
|
||
return find_in_bucket(caml_check_bound(h[2],_lW_)[1 + _lW_])}
|
||
function replace(h,key,data)
|
||
{var
|
||
i=key_index(h,key),
|
||
param$0=caml_check_bound(h[2],i)[1 + i],
|
||
param=param$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var k=param[1],next=param[3];
|
||
if(! caml_call2(H[1],k,key)){var param=next;continue}
|
||
param[1] = key;
|
||
param[2] = data;
|
||
var _lT_=0}
|
||
else
|
||
var _lT_=1;
|
||
if(_lT_)
|
||
{caml_check_bound(h[2],i)[1 + i] = [0,key,data,param$0];
|
||
h[1] = h[1] + 1 | 0;
|
||
var _lU_=h[2].length - 1 << 1 < h[1]?1:0;
|
||
if(_lU_)return resize$0(key_index,h);
|
||
var _lV_=_lU_}
|
||
else
|
||
var _lV_=_lT_;
|
||
return _lV_}}
|
||
function mem(h,key)
|
||
{var
|
||
_lS_=key_index(h,key),
|
||
param$0=caml_check_bound(h[2],_lS_)[1 + _lS_],
|
||
param=param$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var k=param[1],next=param[3],_lR_=caml_call2(H[1],k,key);
|
||
if(_lR_)return _lR_;
|
||
var param=next;
|
||
continue}
|
||
return 0}}
|
||
function add_seq(tbl,i)
|
||
{return iter
|
||
(function(param)
|
||
{var v=param[2],k=param[1];return add(tbl,k,v)},
|
||
i)}
|
||
function replace_seq(tbl,i)
|
||
{return iter
|
||
(function(param)
|
||
{var v=param[2],k=param[1];return replace(tbl,k,v)},
|
||
i)}
|
||
function of_seq(i){var tbl=create$3(0,16);replace_seq(tbl,i);return tbl}
|
||
return [0,
|
||
create$3,
|
||
clear$2,
|
||
reset$0,
|
||
copy$6,
|
||
add,
|
||
remove,
|
||
find,
|
||
find_opt,
|
||
find_all,
|
||
replace,
|
||
mem,
|
||
iter$10,
|
||
filter_map_inplace,
|
||
fold$3,
|
||
length$4,
|
||
stats,
|
||
to_seq$9,
|
||
to_seq_keys,
|
||
to_seq_values,
|
||
add_seq,
|
||
replace_seq,
|
||
of_seq]}
|
||
function Make$0(H)
|
||
{var equal=H[1];
|
||
function hash(seed,x){return caml_call1(H[2],x)}
|
||
var
|
||
include=MakeSeeded([0,equal,hash]),
|
||
clear=include[2],
|
||
reset=include[3],
|
||
copy=include[4],
|
||
add=include[5],
|
||
remove=include[6],
|
||
find=include[7],
|
||
find_opt=include[8],
|
||
find_all=include[9],
|
||
replace=include[10],
|
||
mem=include[11],
|
||
iter=include[12],
|
||
filter_map_inplace=include[13],
|
||
fold=include[14],
|
||
length=include[15],
|
||
stats=include[16],
|
||
to_seq=include[17],
|
||
to_seq_keys=include[18],
|
||
to_seq_values=include[19],
|
||
add_seq=include[20],
|
||
replace_seq=include[21],
|
||
_lQ_=include[1];
|
||
function create(sz){return caml_call2(_lQ_,_b5_,sz)}
|
||
function of_seq(i)
|
||
{var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl}
|
||
return [0,
|
||
create,
|
||
clear,
|
||
reset,
|
||
copy,
|
||
add,
|
||
remove,
|
||
find,
|
||
find_opt,
|
||
find_all,
|
||
replace,
|
||
mem,
|
||
iter,
|
||
filter_map_inplace,
|
||
fold,
|
||
length,
|
||
stats,
|
||
to_seq,
|
||
to_seq_keys,
|
||
to_seq_values,
|
||
add_seq,
|
||
replace_seq,
|
||
of_seq]}
|
||
function hash$1(x){return caml_hash(10,100,0,x)}
|
||
function hash_param(n1,n2,x){return caml_hash(n1,n2,0,x)}
|
||
function seeded_hash(seed,x){return caml_hash(10,100,seed,x)}
|
||
function key_index(h,key)
|
||
{return 3 <= h.length - 1
|
||
?caml_hash(10,100,h[3],key) & (h[2].length - 1 - 1 | 0)
|
||
:caml_mod
|
||
(runtime.caml_hash_univ_param(10,100,key),h[2].length - 1)}
|
||
function add$0(h,key,data)
|
||
{var
|
||
i=key_index(h,key),
|
||
bucket=[0,key,data,caml_check_bound(h[2],i)[1 + i]];
|
||
caml_check_bound(h[2],i)[1 + i] = bucket;
|
||
h[1] = h[1] + 1 | 0;
|
||
var _lP_=h[2].length - 1 << 1 < h[1]?1:0;
|
||
return _lP_?resize$0(key_index,h):_lP_}
|
||
function remove(h,key)
|
||
{var i=key_index(h,key),c$0=caml_check_bound(h[2],i)[1 + i],prec=0,c=c$0;
|
||
for(;;)
|
||
{if(c)
|
||
{var k=c[1],next=c[3];
|
||
if(0 === caml_compare(k,key))
|
||
{h[1] = h[1] - 1 | 0;
|
||
return prec
|
||
?(prec[3] = next,0)
|
||
:(caml_check_bound(h[2],i)[1 + i] = next,0)}
|
||
var prec=c,c=next;
|
||
continue}
|
||
return 0}}
|
||
function find$0(h,key)
|
||
{var _lO_=key_index(h,key),match=caml_check_bound(h[2],_lO_)[1 + _lO_];
|
||
if(match)
|
||
{var k1=match[1],d1=match[2],next1=match[3];
|
||
if(0 === caml_compare(key,k1))return d1;
|
||
if(next1)
|
||
{var k2=next1[1],d2=next1[2],next2=next1[3];
|
||
if(0 === caml_compare(key,k2))return d2;
|
||
if(next2)
|
||
{var k3=next2[1],d3=next2[2],next3=next2[3];
|
||
if(0 === caml_compare(key,k3))return d3;
|
||
var param=next3;
|
||
for(;;)
|
||
{if(param)
|
||
{var k=param[1],data=param[2],next=param[3];
|
||
if(0 === caml_compare(key,k))return data;
|
||
var param=next;
|
||
continue}
|
||
throw Not_found}}
|
||
throw Not_found}
|
||
throw Not_found}
|
||
throw Not_found}
|
||
function find_opt$0(h,key)
|
||
{var _lN_=key_index(h,key),match=caml_check_bound(h[2],_lN_)[1 + _lN_];
|
||
if(match)
|
||
{var k1=match[1],d1=match[2],next1=match[3];
|
||
if(0 === caml_compare(key,k1))return [0,d1];
|
||
if(next1)
|
||
{var k2=next1[1],d2=next1[2],next2=next1[3];
|
||
if(0 === caml_compare(key,k2))return [0,d2];
|
||
if(next2)
|
||
{var k3=next2[1],d3=next2[2],next3=next2[3];
|
||
if(0 === caml_compare(key,k3))return [0,d3];
|
||
var param=next3;
|
||
for(;;)
|
||
{if(param)
|
||
{var k=param[1],data=param[2],next=param[3];
|
||
if(0 === caml_compare(key,k))return [0,data];
|
||
var param=next;
|
||
continue}
|
||
return 0}}
|
||
return 0}
|
||
return 0}
|
||
return 0}
|
||
function find_all$0(h,key)
|
||
{function find_in_bucket(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var k=param$0[1],data=param$0[2],next=param$0[3];
|
||
if(0 === caml_compare(k,key))return [0,data,find_in_bucket(next)];
|
||
var param$0=next;
|
||
continue}
|
||
return 0}}
|
||
var _lM_=key_index(h,key);
|
||
return find_in_bucket(caml_check_bound(h[2],_lM_)[1 + _lM_])}
|
||
function replace(h,key,data)
|
||
{var
|
||
i=key_index(h,key),
|
||
param$0=caml_check_bound(h[2],i)[1 + i],
|
||
param=param$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var k=param[1],next=param[3];
|
||
if(0 !== caml_compare(k,key)){var param=next;continue}
|
||
param[1] = key;
|
||
param[2] = data;
|
||
var _lJ_=0}
|
||
else
|
||
var _lJ_=1;
|
||
if(_lJ_)
|
||
{caml_check_bound(h[2],i)[1 + i] = [0,key,data,param$0];
|
||
h[1] = h[1] + 1 | 0;
|
||
var _lK_=h[2].length - 1 << 1 < h[1]?1:0;
|
||
if(_lK_)return resize$0(key_index,h);
|
||
var _lL_=_lK_}
|
||
else
|
||
var _lL_=_lJ_;
|
||
return _lL_}}
|
||
function mem$2(h,key)
|
||
{var
|
||
_lI_=key_index(h,key),
|
||
param$0=caml_check_bound(h[2],_lI_)[1 + _lI_],
|
||
param=param$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var k=param[1],next=param[3],_lH_=0 === caml_compare(k,key)?1:0;
|
||
if(_lH_)return _lH_;
|
||
var param=next;
|
||
continue}
|
||
return 0}}
|
||
function add_seq$2(tbl,i)
|
||
{return iter
|
||
(function(param)
|
||
{var v=param[2],k=param[1];return add$0(tbl,k,v)},
|
||
i)}
|
||
function replace_seq(tbl,i)
|
||
{return iter
|
||
(function(param)
|
||
{var v=param[2],k=param[1];return replace(tbl,k,v)},
|
||
i)}
|
||
function of_seq$7(i){var tbl=create$3(0,16);replace_seq(tbl,i);return tbl}
|
||
var
|
||
Stdlib_hashtbl=
|
||
[0,
|
||
create$3,
|
||
clear$2,
|
||
reset$0,
|
||
copy$6,
|
||
add$0,
|
||
find$0,
|
||
find_opt$0,
|
||
find_all$0,
|
||
mem$2,
|
||
remove,
|
||
replace,
|
||
iter$10,
|
||
filter_map_inplace,
|
||
fold$3,
|
||
length$4,
|
||
randomize,
|
||
is_randomized,
|
||
stats,
|
||
to_seq$9,
|
||
to_seq_keys,
|
||
to_seq_values,
|
||
add_seq$2,
|
||
replace_seq,
|
||
of_seq$7,
|
||
Make$0,
|
||
MakeSeeded,
|
||
hash$1,
|
||
seeded_hash,
|
||
hash_param,
|
||
caml_hash];
|
||
caml_register_global(786,Stdlib_hashtbl,"Stdlib__hashtbl");
|
||
function weak_create(l)
|
||
{var _lF_=0 <= l?1:0,_lG_=_lF_?l <= _r_[15]?1:0:_lF_;
|
||
if(1 - _lG_)invalid_arg(cst_Weak_create);
|
||
return runtime.caml_weak_create(l)}
|
||
function length$5(x){return x.length - 1 - 2 | 0}
|
||
function raise_if_invalid_offset$0(e,o,msg)
|
||
{var _lC_=0 <= o?1:0,_lD_=_lC_?o < length$5(e)?1:0:_lC_,_lE_=1 - _lD_;
|
||
return _lE_?invalid_arg(msg):_lE_}
|
||
function set(e,o,x)
|
||
{raise_if_invalid_offset$0(e,o,cst_Weak_set);
|
||
if(x){var x$0=x[1];return caml_ephe_set_key(e,o,x$0)}
|
||
return caml_ephe_unset_key(e,o)}
|
||
function get$0(e,o)
|
||
{raise_if_invalid_offset$0(e,o,cst_Weak_get);
|
||
return runtime.caml_weak_get(e,o)}
|
||
function get_copy(e,o)
|
||
{raise_if_invalid_offset$0(e,o,cst_Weak_get_copy);
|
||
return runtime.caml_weak_get_copy(e,o)}
|
||
function check$0(e,o)
|
||
{raise_if_invalid_offset$0(e,o,cst_Weak_check);
|
||
return runtime.caml_weak_check(e,o)}
|
||
function blit$4(e1,o1,e2,o2,l)
|
||
{if
|
||
(0
|
||
<=
|
||
l
|
||
&&
|
||
0
|
||
<=
|
||
o1
|
||
&&
|
||
!
|
||
((length$5(e1) - l | 0) < o1)
|
||
&&
|
||
0
|
||
<=
|
||
o2
|
||
&&
|
||
!
|
||
((length$5(e2) - l | 0) < o2))
|
||
{var
|
||
_lA_=0 !== l?1:0,
|
||
_lB_=_lA_?runtime.caml_weak_blit(e1,o1,e2,o2,l):_lA_;
|
||
return _lB_}
|
||
return invalid_arg(cst_Weak_blit)}
|
||
function fill$2(ar,ofs,len,x)
|
||
{if(0 <= ofs && 0 <= len && ! ((length$5(ar) - len | 0) < ofs))
|
||
{var _ly_=(ofs + len | 0) - 1 | 0;
|
||
if(! (_ly_ < ofs))
|
||
{var i=ofs;
|
||
for(;;)
|
||
{set(ar,i,x);
|
||
var _lz_=i + 1 | 0;
|
||
if(_ly_ !== i){var i=_lz_;continue}
|
||
break}}
|
||
return 0}
|
||
throw [0,Invalid_argument,cst_Weak_fill]}
|
||
function Make$1(H)
|
||
{var emptybucket=weak_create(0);
|
||
function get_index(t,h){return caml_mod(h & 2147483647,t[1].length - 1)}
|
||
var limit=7;
|
||
function create(sz)
|
||
{var
|
||
sz$0=7 <= sz?sz:7,
|
||
sz$1=max_array_length < sz$0?max_array_length:sz$0;
|
||
return [0,
|
||
caml_make_vect(sz$1,emptybucket),
|
||
caml_make_vect(sz$1,[0]),
|
||
limit,
|
||
0,
|
||
0]}
|
||
function clear(t)
|
||
{var _lw_=t[1].length - 1 - 1 | 0,_lv_=0;
|
||
if(! (_lw_ < 0))
|
||
{var i=_lv_;
|
||
for(;;)
|
||
{caml_check_bound(t[1],i)[1 + i] = emptybucket;
|
||
caml_check_bound(t[2],i)[1 + i] = [0];
|
||
var _lx_=i + 1 | 0;
|
||
if(_lw_ !== i){var i=_lx_;continue}
|
||
break}}
|
||
t[3] = limit;
|
||
t[4] = 0;
|
||
return 0}
|
||
function fold(f,t,init)
|
||
{var _lu_=t[1],i=0;
|
||
return fold_right$0
|
||
(function(b,accu$1)
|
||
{var i$0=i,accu=accu$1;
|
||
for(;;)
|
||
{if(length$5(b) <= i$0)return accu;
|
||
var match=get$0(b,i$0);
|
||
if(match)
|
||
{var
|
||
v=match[1],
|
||
accu$0=caml_call2(f,v,accu),
|
||
i$1=i$0 + 1 | 0,
|
||
i$0=i$1,
|
||
accu=accu$0;
|
||
continue}
|
||
var i$2=i$0 + 1 | 0,i$0=i$2;
|
||
continue}},
|
||
_lu_,
|
||
init)}
|
||
function iter(f,t)
|
||
{var _lt_=t[1],i=0;
|
||
return iter$5
|
||
(function(b)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(length$5(b) <= i$0)return 0;
|
||
var match=get$0(b,i$0);
|
||
if(match)
|
||
{var v=match[1];
|
||
caml_call1(f,v);
|
||
var i$1=i$0 + 1 | 0,i$0=i$1;
|
||
continue}
|
||
var i$2=i$0 + 1 | 0,i$0=i$2;
|
||
continue}},
|
||
_lt_)}
|
||
function count_bucket(i,b,accu)
|
||
{var i$0=i,accu$0=accu;
|
||
for(;;)
|
||
{if(length$5(b) <= i$0)return accu$0;
|
||
var
|
||
_ls_=check$0(b,i$0)?1:0,
|
||
accu$1=accu$0 + _ls_ | 0,
|
||
i$1=i$0 + 1 | 0,
|
||
i$0=i$1,
|
||
accu$0=accu$1;
|
||
continue}}
|
||
function count(t)
|
||
{var _ln_=0,_lo_=t[1],_lp_=0;
|
||
return fold_right$0
|
||
(function(_lq_,_lr_){return count_bucket(_lp_,_lq_,_lr_)},
|
||
_lo_,
|
||
_ln_)}
|
||
function add_aux(t,setter,d,h,index)
|
||
{var
|
||
bucket$0=caml_check_bound(t[1],index)[1 + index],
|
||
hashes=caml_check_bound(t[2],index)[1 + index],
|
||
sz=length$5(bucket$0),
|
||
i$3=0;
|
||
for(;;)
|
||
{if(sz <= i$3)
|
||
{var
|
||
newsz=
|
||
min(((3 * sz | 0) / 2 | 0) + 3 | 0,max_array_length - 2 | 0);
|
||
if(newsz <= sz)failwith(cst_Weak_Make_hash_bucket_cann);
|
||
var
|
||
newbucket$0=weak_create(newsz),
|
||
newhashes=caml_make_vect(newsz,0);
|
||
blit$4(bucket$0,0,newbucket$0,0,sz);
|
||
blit$1(hashes,0,newhashes,0,sz);
|
||
caml_call3(setter,newbucket$0,sz,d);
|
||
caml_check_bound(newhashes,sz)[1 + sz] = h;
|
||
caml_check_bound(t[1],index)[1 + index] = newbucket$0;
|
||
caml_check_bound(t[2],index)[1 + index] = newhashes;
|
||
var _lj_=sz <= t[3]?1:0,_lk_=_lj_?t[3] < newsz?1:0:_lj_;
|
||
if(_lk_)
|
||
{t[4] = t[4] + 1 | 0;
|
||
var i$4=0;
|
||
for(;;)
|
||
{var
|
||
_k$_=t[5],
|
||
bucket=caml_check_bound(t[1],_k$_)[1 + _k$_],
|
||
_la_=t[5],
|
||
hbucket=caml_check_bound(t[2],_la_)[1 + _la_],
|
||
n=length$5(bucket),
|
||
prev_len=(((n - 3 | 0) * 2 | 0) + 2 | 0) / 3 | 0,
|
||
live=count_bucket(0,bucket,0);
|
||
if(live <= prev_len)
|
||
{var j$2=length$5(bucket) - 1 | 0,i$0=0,j=j$2;
|
||
for(;;)
|
||
{if(prev_len <= j)
|
||
{if(check$0(bucket,i$0))
|
||
{var i$1=i$0 + 1 | 0,i$0=i$1;continue}
|
||
if(check$0(bucket,j))
|
||
{blit$4(bucket,j,bucket,i$0,1);
|
||
var _lb_=caml_check_bound(hbucket,j)[1 + j];
|
||
caml_check_bound(hbucket,i$0)[1 + i$0] = _lb_;
|
||
var j$0=j - 1 | 0,i$2=i$0 + 1 | 0,i$0=i$2,j=j$0;
|
||
continue}
|
||
var j$1=j - 1 | 0,j=j$1;
|
||
continue}
|
||
if(0 === prev_len)
|
||
{var _lc_=t[5];
|
||
caml_check_bound(t[1],_lc_)[1 + _lc_] = emptybucket;
|
||
var _ld_=t[5];
|
||
caml_check_bound(t[2],_ld_)[1 + _ld_] = [0]}
|
||
else
|
||
{var newbucket=weak_create(prev_len);
|
||
blit$4(bucket,0,newbucket,0,prev_len);
|
||
var _lg_=t[5];
|
||
caml_check_bound(t[1],_lg_)[1 + _lg_] = newbucket;
|
||
var _lh_=sub$1(hbucket,0,prev_len),_li_=t[5];
|
||
caml_check_bound(t[2],_li_)[1 + _li_] = _lh_}
|
||
var _le_=t[3] < n?1:0,_lf_=_le_?prev_len <= t[3]?1:0:_le_;
|
||
if(_lf_)t[4] = t[4] - 1 | 0;
|
||
break}}
|
||
t[5] = caml_mod(t[5] + 1 | 0,t[1].length - 1);
|
||
var _lm_=i$4 + 1 | 0;
|
||
if(2 !== i$4){var i$4=_lm_;continue}
|
||
break}}
|
||
var _ll_=((t[1].length - 1) / 2 | 0) < t[4]?1:0;
|
||
if(_ll_)
|
||
{var
|
||
n$0=t[1].length - 1,
|
||
newlen=min(((3 * n$0 | 0) / 2 | 0) + 3 | 0,max_array_length);
|
||
if(n$0 < newlen)
|
||
{var newt=create(newlen),_k__=t[1],i=0;
|
||
iteri$2
|
||
(function(j,ob)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(length$5(ob) <= i$0)return 0;
|
||
var match=check$0(ob,i$0);
|
||
if(match)
|
||
{var
|
||
oh=caml_check_bound(t[2],j)[1 + j],
|
||
setter$0=
|
||
function(i)
|
||
{function setter(nb,ni,param){return blit$4(ob,i,nb,ni,1)}
|
||
return setter},
|
||
setter=setter$0(i$0),
|
||
h=caml_check_bound(oh,i$0)[1 + i$0];
|
||
add_aux(newt,setter,0,h,get_index(newt,h));
|
||
var i$1=i$0 + 1 | 0,i$0=i$1;
|
||
continue}
|
||
var i$2=i$0 + 1 | 0,i$0=i$2;
|
||
continue}},
|
||
_k__);
|
||
t[1] = newt[1];
|
||
t[2] = newt[2];
|
||
t[3] = newt[3];
|
||
t[4] = newt[4];
|
||
t[5] = caml_mod(t[5],newt[1].length - 1);
|
||
return 0}
|
||
t[3] = max_int;
|
||
t[4] = 0;
|
||
return 0}
|
||
return _ll_}
|
||
if(check$0(bucket$0,i$3)){var i$5=i$3 + 1 | 0,i$3=i$5;continue}
|
||
caml_call3(setter,bucket$0,i$3,d);
|
||
caml_check_bound(hashes,i$3)[1 + i$3] = h;
|
||
return 0}}
|
||
function add(t,d)
|
||
{var h=caml_call1(H[2],d);return add_aux(t,set,[0,d],h,get_index(t,h))}
|
||
function find_or(t,d,ifnotfound)
|
||
{var
|
||
h=caml_call1(H[2],d),
|
||
index=get_index(t,h),
|
||
bucket=caml_check_bound(t[1],index)[1 + index],
|
||
hashes=caml_check_bound(t[2],index)[1 + index],
|
||
sz=length$5(bucket),
|
||
i=0;
|
||
for(;;)
|
||
{if(sz <= i)return caml_call2(ifnotfound,h,index);
|
||
if(h === caml_check_bound(hashes,i)[1 + i])
|
||
{var match=get_copy(bucket,i);
|
||
if(match)
|
||
{var v=match[1];
|
||
if(caml_call2(H[1],v,d))
|
||
{var match$0=get$0(bucket,i);
|
||
if(match$0){var v$0=match$0[1];return v$0}
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
var i$1=i + 1 | 0,i=i$1;
|
||
continue}
|
||
var i$2=i + 1 | 0,i=i$2;
|
||
continue}}
|
||
function merge(t,d)
|
||
{return find_or
|
||
(t,d,function(h,index){add_aux(t,set,[0,d],h,index);return d})}
|
||
function find(t,d)
|
||
{return find_or(t,d,function(h,index){throw Not_found})}
|
||
function find_opt(t,d)
|
||
{var
|
||
h=caml_call1(H[2],d),
|
||
index=get_index(t,h),
|
||
bucket=caml_check_bound(t[1],index)[1 + index],
|
||
hashes=caml_check_bound(t[2],index)[1 + index],
|
||
sz=length$5(bucket),
|
||
i=0;
|
||
for(;;)
|
||
{if(sz <= i)return 0;
|
||
if(h === caml_check_bound(hashes,i)[1 + i])
|
||
{var match=get_copy(bucket,i);
|
||
if(match)
|
||
{var v=match[1];
|
||
if(caml_call2(H[1],v,d))
|
||
{var v$0=get$0(bucket,i);
|
||
if(v$0)return v$0;
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}}
|
||
var i$1=i + 1 | 0,i=i$1;
|
||
continue}
|
||
var i$2=i + 1 | 0,i=i$2;
|
||
continue}}
|
||
function find_shadow(t,d,iffound,ifnotfound)
|
||
{var
|
||
h=caml_call1(H[2],d),
|
||
index=get_index(t,h),
|
||
bucket=caml_check_bound(t[1],index)[1 + index],
|
||
hashes=caml_check_bound(t[2],index)[1 + index],
|
||
sz=length$5(bucket),
|
||
i=0;
|
||
for(;;)
|
||
{if(sz <= i)return ifnotfound;
|
||
if(h === caml_check_bound(hashes,i)[1 + i])
|
||
{var match=get_copy(bucket,i);
|
||
if(match)
|
||
{var v=match[1];
|
||
if(caml_call2(H[1],v,d))return caml_call2(iffound,bucket,i)}
|
||
var i$0=i + 1 | 0,i=i$0;
|
||
continue}
|
||
var i$1=i + 1 | 0,i=i$1;
|
||
continue}}
|
||
function remove(t,d)
|
||
{var _k9_=0;
|
||
return find_shadow(t,d,function(w,i){return set(w,i,0)},_k9_)}
|
||
function mem(t,d)
|
||
{var _k8_=0;return find_shadow(t,d,function(w,i){return 1},_k8_)}
|
||
function find_all(t,d)
|
||
{var
|
||
h=caml_call1(H[2],d),
|
||
index=get_index(t,h),
|
||
bucket=caml_check_bound(t[1],index)[1 + index],
|
||
hashes=caml_check_bound(t[2],index)[1 + index],
|
||
sz=length$5(bucket),
|
||
i=0,
|
||
accu=0;
|
||
for(;;)
|
||
{if(sz <= i)return accu;
|
||
if(h === caml_check_bound(hashes,i)[1 + i])
|
||
{var match=get_copy(bucket,i);
|
||
if(match)
|
||
{var v=match[1];
|
||
if(caml_call2(H[1],v,d))
|
||
{var match$0=get$0(bucket,i);
|
||
if(match$0)
|
||
{var
|
||
v$0=match$0[1],
|
||
accu$0=[0,v$0,accu],
|
||
i$0=i + 1 | 0,
|
||
i=i$0,
|
||
accu=accu$0;
|
||
continue}
|
||
var i$1=i + 1 | 0,i=i$1;
|
||
continue}}
|
||
var i$2=i + 1 | 0,i=i$2;
|
||
continue}
|
||
var i$3=i + 1 | 0,i=i$3;
|
||
continue}}
|
||
function stats(t)
|
||
{var len=t[1].length - 1,lens=map$5(length$5,t[1]);
|
||
sort(caml_int_compare,lens);
|
||
var
|
||
_k0_=0,
|
||
totlen=
|
||
fold_left$1(function(_k7_,_k6_){return _k7_ + _k6_ | 0},_k0_,lens),
|
||
_k1_=len - 1 | 0,
|
||
_k3_=len / 2 | 0,
|
||
_k2_=caml_check_bound(lens,_k1_)[1 + _k1_],
|
||
_k4_=caml_check_bound(lens,_k3_)[1 + _k3_],
|
||
_k5_=caml_check_bound(lens,0)[1];
|
||
return [0,len,count(t),totlen,_k5_,_k4_,_k2_]}
|
||
return [0,
|
||
create,
|
||
clear,
|
||
merge,
|
||
add,
|
||
remove,
|
||
find,
|
||
find_opt,
|
||
find_all,
|
||
mem,
|
||
iter,
|
||
fold,
|
||
count,
|
||
stats]}
|
||
var
|
||
Stdlib_weak=
|
||
[0,weak_create,length$5,set,get$0,get_copy,check$0,fill$2,blit$4,Make$1];
|
||
caml_register_global(787,Stdlib_weak,"Stdlib__weak");
|
||
function id$0(x){return x}
|
||
var
|
||
String_tag=[248,cst_Stdlib_Format_String_tag,caml_fresh_oo_id(0)],
|
||
size=0,
|
||
unknown=-1;
|
||
function pp_enqueue(state,token)
|
||
{state[13] = state[13] + token[3] | 0;return add(token,state[28])}
|
||
var pp_infinity=1000000010;
|
||
function pp_output_string(state,s)
|
||
{return caml_call3(state[17],s,0,caml_ml_string_length(s))}
|
||
function pp_output_newline(state){return caml_call1(state[19],0)}
|
||
function format_pp_text(state,size,text)
|
||
{state[9] = state[9] - size | 0;
|
||
pp_output_string(state,text);
|
||
state[11] = 0;
|
||
return 0}
|
||
function format_string(state,s)
|
||
{var _kZ_=caml_string_notequal(s,cst$66);
|
||
return _kZ_?format_pp_text(state,caml_ml_string_length(s),s):_kZ_}
|
||
function break_new_line(state,param,width)
|
||
{var after=param[3],offset=param[2],before=param[1];
|
||
format_string(state,before);
|
||
pp_output_newline(state);
|
||
state[11] = 1;
|
||
var
|
||
indent=(state[6] - width | 0) + offset | 0,
|
||
real_indent=min(state[8],indent);
|
||
state[10] = real_indent;
|
||
state[9] = state[6] - state[10] | 0;
|
||
caml_call1(state[21],state[10]);
|
||
return format_string(state,after)}
|
||
function break_line(state,width){return break_new_line(state,_b6_,width)}
|
||
function break_same_line(state,param)
|
||
{var after=param[3],width=param[2],before=param[1];
|
||
format_string(state,before);
|
||
state[9] = state[9] - width | 0;
|
||
caml_call1(state[20],width);
|
||
return format_string(state,after)}
|
||
function advance_left(state)
|
||
{for(;;)
|
||
{var match$12=peek_opt(state[28]);
|
||
if(match$12)
|
||
{var
|
||
match$13=match$12[1],
|
||
size$0=match$13[1],
|
||
length$0=match$13[3],
|
||
token=match$13[2],
|
||
pending_count=state[13] - state[12] | 0,
|
||
_kX_=0 <= size$0?1:0,
|
||
_kY_=_kX_ || (state[9] <= pending_count?1:0);
|
||
if(_kY_)
|
||
{take(state[28]);
|
||
var size$1=0 <= size$0?size$0:pp_infinity;
|
||
if(typeof token === "number")
|
||
switch(token)
|
||
{case 0:
|
||
var match$3=top_opt(state[3]);
|
||
if(match$3)
|
||
{var
|
||
match$4=match$3[1],
|
||
tabs=match$4[1],
|
||
add_tab=
|
||
function(n,ls)
|
||
{if(ls)
|
||
{var l=ls[2],x=ls[1];
|
||
return caml_lessthan(n,x)?[0,n,ls]:[0,x,add_tab(n,l)]}
|
||
return [0,n,0]};
|
||
tabs[1] = add_tab(state[6] - state[9] | 0,tabs[1])}
|
||
break;
|
||
case 1:pop_opt(state[2]);break;
|
||
case 2:pop_opt(state[3]);break;
|
||
case 3:
|
||
var match$5=top_opt(state[2]);
|
||
if(match$5)
|
||
{var match$6=match$5[1],width$0=match$6[2];
|
||
break_line(state,width$0)}
|
||
else
|
||
pp_output_newline(state);
|
||
break;
|
||
case 4:
|
||
if(state[10] !== (state[6] - state[9] | 0))
|
||
{var match$1=take_opt(state[28]);
|
||
if(match$1)
|
||
{var match$2=match$1[1],size=match$2[1],length=match$2[3];
|
||
state[12] = state[12] - length | 0;
|
||
state[9] = state[9] + size | 0}}
|
||
break;
|
||
default:
|
||
var match$7=pop_opt(state[5]);
|
||
if(match$7)
|
||
{var
|
||
tag_name=match$7[1],
|
||
marker=caml_call1(state[25],tag_name);
|
||
pp_output_string(state,marker)}}
|
||
else
|
||
switch(token[0])
|
||
{case 0:var s=token[1];format_pp_text(state,size$1,s);break;
|
||
case 1:
|
||
var
|
||
breaks=token[2],
|
||
fits=token[1],
|
||
off=breaks[2],
|
||
before=breaks[1],
|
||
match$8=top_opt(state[2]);
|
||
if(match$8)
|
||
{var
|
||
match$9=match$8[1],
|
||
width$1=match$9[2],
|
||
box_type$0=match$9[1];
|
||
switch(box_type$0)
|
||
{case 0:break_same_line(state,fits);break;
|
||
case 1:break_new_line(state,breaks,width$1);break;
|
||
case 2:break_new_line(state,breaks,width$1);break;
|
||
case 3:
|
||
if(state[9] < (size$1 + caml_ml_string_length(before) | 0))
|
||
break_new_line(state,breaks,width$1);
|
||
else
|
||
break_same_line(state,fits);
|
||
break;
|
||
case 4:
|
||
if(state[11])
|
||
break_same_line(state,fits);
|
||
else
|
||
if(state[9] < (size$1 + caml_ml_string_length(before) | 0))
|
||
break_new_line(state,breaks,width$1);
|
||
else
|
||
if(((state[6] - width$1 | 0) + off | 0) < state[10])
|
||
break_new_line(state,breaks,width$1);
|
||
else
|
||
break_same_line(state,fits);
|
||
break;
|
||
default:break_same_line(state,fits)}}
|
||
break;
|
||
case 2:
|
||
var
|
||
off$0=token[2],
|
||
n=token[1],
|
||
insertion_point=state[6] - state[9] | 0,
|
||
match$10=top_opt(state[3]);
|
||
if(match$10)
|
||
{var match$11=match$10[1],tabs$0=match$11[1],_kV_=tabs$0[1];
|
||
if(_kV_)
|
||
{var first=_kV_[1],param=tabs$0[1];
|
||
for(;;)
|
||
{if(param)
|
||
{var tail=param[2],head=param[1];
|
||
if(! (insertion_point <= head)){var param=tail;continue}
|
||
var _kW_=head}
|
||
else
|
||
var _kW_=first;
|
||
var tab=_kW_;
|
||
break}}
|
||
else
|
||
var tab=insertion_point;
|
||
var offset=tab - insertion_point | 0;
|
||
if(0 <= offset)
|
||
break_same_line(state,[0,cst$68,offset + n | 0,cst$67]);
|
||
else
|
||
break_new_line
|
||
(state,[0,cst$70,tab + off$0 | 0,cst$69],state[6])}
|
||
break;
|
||
case 3:
|
||
var
|
||
ty=token[2],
|
||
off$1=token[1],
|
||
insertion_point$0=state[6] - state[9] | 0;
|
||
if(state[8] < insertion_point$0)
|
||
{var match=top_opt(state[2]);
|
||
if(match)
|
||
{var match$0=match[1],width=match$0[2],box_type=match$0[1];
|
||
if(state[9] < width)
|
||
{var switcher=box_type - 1 | 0;
|
||
if(! (3 < switcher >>> 0))break_line(state,width)}}
|
||
else
|
||
pp_output_newline(state)}
|
||
var
|
||
width$2=state[9] - off$1 | 0,
|
||
box_type$1=1 === ty?1:state[9] < size$1?ty:5;
|
||
push([0,box_type$1,width$2],state[2]);
|
||
break;
|
||
case 4:var tbox=token[1];push(tbox,state[3]);break;
|
||
default:
|
||
var
|
||
tag_name$0=token[1],
|
||
marker$0=caml_call1(state[24],tag_name$0);
|
||
pp_output_string(state,marker$0);
|
||
push(tag_name$0,state[5])}
|
||
state[12] = length$0 + state[12] | 0;
|
||
continue}
|
||
return _kY_}
|
||
return 0}}
|
||
function enqueue_advance(state,tok)
|
||
{pp_enqueue(state,tok);return advance_left(state)}
|
||
function enqueue_string_as(state,size,s)
|
||
{return enqueue_advance(state,[0,size,[0,s],size])}
|
||
function initialize_scan_stack(stack)
|
||
{clear(stack);
|
||
var queue_elem=[0,unknown,_b7_,0];
|
||
return push([0,-1,queue_elem],stack)}
|
||
function set_size(state,ty)
|
||
{var match=top_opt(state[1]);
|
||
if(match)
|
||
{var
|
||
match$0=match[1],
|
||
queue_elem=match$0[2],
|
||
left_total=match$0[1],
|
||
_kS_=queue_elem[1];
|
||
if(left_total < state[12])return initialize_scan_stack(state[1]);
|
||
var _kT_=queue_elem[2];
|
||
if(typeof _kT_ !== "number")
|
||
switch(_kT_[0])
|
||
{case 3:
|
||
var _kU_=1 - ty;
|
||
return _kU_
|
||
?(queue_elem[1] = state[13] + _kS_ | 0,pop_opt(state[1]),0)
|
||
:_kU_;
|
||
case 1:
|
||
case 2:
|
||
return ty
|
||
?(queue_elem[1] = state[13] + _kS_ | 0,pop_opt(state[1]),0)
|
||
:ty
|
||
}
|
||
return 0}
|
||
return 0}
|
||
function scan_push(state,b,token)
|
||
{pp_enqueue(state,token);
|
||
if(b)set_size(state,1);
|
||
var elem=[0,state[13],token];
|
||
return push(elem,state[1])}
|
||
function pp_open_box_gen(state,indent,br_ty)
|
||
{state[14] = state[14] + 1 | 0;
|
||
if(state[14] < state[15])
|
||
{var size=- state[13] | 0,elem=[0,size,[3,indent,br_ty],0];
|
||
return scan_push(state,0,elem)}
|
||
var _kQ_=state[14] === state[15]?1:0;
|
||
if(_kQ_)
|
||
{var _kR_=state[16];
|
||
return enqueue_string_as(state,caml_ml_string_length(_kR_),_kR_)}
|
||
return _kQ_}
|
||
function pp_close_box(state,param)
|
||
{var _kO_=1 < state[14]?1:0;
|
||
if(_kO_)
|
||
{if(state[14] < state[15])
|
||
{pp_enqueue(state,[0,size,1,0]);set_size(state,1);set_size(state,0)}
|
||
state[14] = state[14] - 1 | 0;
|
||
var _kP_=0}
|
||
else
|
||
var _kP_=_kO_;
|
||
return _kP_}
|
||
function pp_open_stag(state,tag_name)
|
||
{if(state[22]){push(tag_name,state[4]);caml_call1(state[26],tag_name)}
|
||
var _kN_=state[23];
|
||
if(_kN_)
|
||
{var token=[5,tag_name];return pp_enqueue(state,[0,size,token,0])}
|
||
return _kN_}
|
||
function pp_close_stag(state,param)
|
||
{if(state[23])pp_enqueue(state,[0,size,5,0]);
|
||
var _kL_=state[22];
|
||
if(_kL_)
|
||
{var match=pop_opt(state[4]);
|
||
if(match){var tag_name=match[1];return caml_call1(state[27],tag_name)}
|
||
var _kM_=0}
|
||
else
|
||
var _kM_=_kL_;
|
||
return _kM_}
|
||
function pp_open_tag(state,s){return pp_open_stag(state,[0,String_tag,s])}
|
||
function pp_close_tag(state,param){return pp_close_stag(state,0)}
|
||
function pp_set_print_tags(state,b){state[22] = b;return 0}
|
||
function pp_set_mark_tags(state,b){state[23] = b;return 0}
|
||
function pp_get_print_tags(state,param){return state[22]}
|
||
function pp_get_mark_tags(state,param){return state[23]}
|
||
function pp_set_tags(state,b)
|
||
{pp_set_print_tags(state,b);return pp_set_mark_tags(state,b)}
|
||
function pp_get_formatter_stag_function(state,param)
|
||
{return [0,state[24],state[25],state[26],state[27]]}
|
||
function pp_set_formatter_stag_function(state,param)
|
||
{var pct=param[4],pot=param[3],mct=param[2],mot=param[1];
|
||
state[24] = mot;
|
||
state[25] = mct;
|
||
state[26] = pot;
|
||
state[27] = pct;
|
||
return 0}
|
||
function pp_rinit(state)
|
||
{state[12] = 1;
|
||
state[13] = 1;
|
||
clear$0(state[28]);
|
||
initialize_scan_stack(state[1]);
|
||
clear(state[2]);
|
||
clear(state[3]);
|
||
clear(state[4]);
|
||
clear(state[5]);
|
||
state[10] = 0;
|
||
state[14] = 0;
|
||
state[9] = state[6];
|
||
return pp_open_box_gen(state,0,3)}
|
||
function pp_flush_queue(state,b)
|
||
{var _kK_=state[4];
|
||
iter$7(function(param){return pp_close_tag(state,0)},_kK_);
|
||
for(;;)
|
||
{if(1 < state[14]){pp_close_box(state,0);continue}
|
||
state[13] = pp_infinity;
|
||
advance_left(state);
|
||
if(b)pp_output_newline(state);
|
||
return pp_rinit(state)}}
|
||
function pp_print_as_size(state,size,s)
|
||
{var _kJ_=state[14] < state[15]?1:0;
|
||
return _kJ_?enqueue_string_as(state,size,s):_kJ_}
|
||
function pp_print_as(state,isize,s)
|
||
{return pp_print_as_size(state,isize,s)}
|
||
function pp_print_string(state,s)
|
||
{return pp_print_as(state,caml_ml_string_length(s),s)}
|
||
function pp_print_int(state,i)
|
||
{return pp_print_string(state,caml_string_of_jsbytes("" + i))}
|
||
function pp_print_float(state,f)
|
||
{return pp_print_string(state,to_string(f))}
|
||
function pp_print_bool(state,b)
|
||
{return pp_print_string(state,string_of_bool(b))}
|
||
function pp_print_char(state,c){return pp_print_as(state,1,make$0(1,c))}
|
||
function pp_open_hbox(state,param){return pp_open_box_gen(state,0,0)}
|
||
function pp_open_vbox(state,indent)
|
||
{return pp_open_box_gen(state,indent,1)}
|
||
function pp_open_hvbox(state,indent)
|
||
{return pp_open_box_gen(state,indent,2)}
|
||
function pp_open_hovbox(state,indent)
|
||
{return pp_open_box_gen(state,indent,3)}
|
||
function pp_open_box(state,indent){return pp_open_box_gen(state,indent,4)}
|
||
function pp_print_newline(state,param)
|
||
{pp_flush_queue(state,1);return caml_call1(state[18],0)}
|
||
function pp_print_flush(state,param)
|
||
{pp_flush_queue(state,0);return caml_call1(state[18],0)}
|
||
function pp_force_newline(state,param)
|
||
{var _kI_=state[14] < state[15]?1:0;
|
||
return _kI_?enqueue_advance(state,[0,size,3,0]):_kI_}
|
||
function pp_print_if_newline(state,param)
|
||
{var _kH_=state[14] < state[15]?1:0;
|
||
return _kH_?enqueue_advance(state,[0,size,4,0]):_kH_}
|
||
function pp_print_custom_break(state,fits,breaks)
|
||
{var
|
||
after=fits[3],
|
||
width=fits[2],
|
||
before=fits[1],
|
||
_kG_=state[14] < state[15]?1:0;
|
||
if(_kG_)
|
||
{var
|
||
size=- state[13] | 0,
|
||
token=[1,fits,breaks],
|
||
length=
|
||
(caml_ml_string_length(before) + width | 0)
|
||
+
|
||
caml_ml_string_length(after)
|
||
|
|
||
0,
|
||
elem=[0,size,token,length];
|
||
return scan_push(state,1,elem)}
|
||
return _kG_}
|
||
function pp_print_break(state,width,offset)
|
||
{return pp_print_custom_break
|
||
(state,[0,cst$74,width,cst$73],[0,cst$72,offset,cst$71])}
|
||
function pp_print_space(state,param){return pp_print_break(state,1,0)}
|
||
function pp_print_cut(state,param){return pp_print_break(state,0,0)}
|
||
function pp_open_tbox(state,param)
|
||
{state[14] = state[14] + 1 | 0;
|
||
var _kF_=state[14] < state[15]?1:0;
|
||
if(_kF_)
|
||
{var elem=[0,size,[4,[0,[0,0]]],0];return enqueue_advance(state,elem)}
|
||
return _kF_}
|
||
function pp_close_tbox(state,param)
|
||
{var _kC_=1 < state[14]?1:0;
|
||
if(_kC_)
|
||
{var _kD_=state[14] < state[15]?1:0;
|
||
if(_kD_)
|
||
{var elem=[0,size,2,0];
|
||
enqueue_advance(state,elem);
|
||
state[14] = state[14] - 1 | 0;
|
||
var _kE_=0}
|
||
else
|
||
var _kE_=_kD_}
|
||
else
|
||
var _kE_=_kC_;
|
||
return _kE_}
|
||
function pp_print_tbreak(state,width,offset)
|
||
{var _kB_=state[14] < state[15]?1:0;
|
||
if(_kB_)
|
||
{var size=- state[13] | 0,elem=[0,size,[2,width,offset],width];
|
||
return scan_push(state,1,elem)}
|
||
return _kB_}
|
||
function pp_print_tab(state,param){return pp_print_tbreak(state,0,0)}
|
||
function pp_set_tab(state,param)
|
||
{var _kA_=state[14] < state[15]?1:0;
|
||
if(_kA_){var elem=[0,size,0,0];return enqueue_advance(state,elem)}
|
||
return _kA_}
|
||
function pp_set_max_boxes(state,n)
|
||
{var _ky_=1 < n?1:0,_kz_=_ky_?(state[15] = n,0):_ky_;return _kz_}
|
||
function pp_get_max_boxes(state,param){return state[15]}
|
||
function pp_over_max_boxes(state,param)
|
||
{return state[14] === state[15]?1:0}
|
||
function pp_set_ellipsis_text(state,s){state[16] = s;return 0}
|
||
function pp_get_ellipsis_text(state,param){return state[16]}
|
||
function pp_limit(n){return n < 1000000010?n:1000000009}
|
||
function pp_set_max_indent(state,n$0)
|
||
{var _kx_=1 < n$0?1:0;
|
||
if(_kx_)
|
||
{var n$1=state[6] - n$0 | 0,_kw_=1 <= n$1?1:0;
|
||
if(_kw_)
|
||
{var n=pp_limit(n$1);
|
||
state[7] = n;
|
||
state[8] = state[6] - state[7] | 0;
|
||
return pp_rinit(state)}
|
||
return _kw_}
|
||
return _kx_}
|
||
function pp_get_max_indent(state,param){return state[8]}
|
||
function pp_set_margin(state,n)
|
||
{var _kv_=1 <= n?1:0;
|
||
if(_kv_)
|
||
{var n$0=pp_limit(n);
|
||
state[6] = n$0;
|
||
var
|
||
new_max_indent=
|
||
state[8] <= state[6]
|
||
?state[8]
|
||
:max(max(state[6] - state[7] | 0,state[6] / 2 | 0),1);
|
||
return pp_set_max_indent(state,new_max_indent)}
|
||
return _kv_}
|
||
function check_geometry(geometry)
|
||
{var
|
||
_kt_=1 < geometry[1]?1:0,
|
||
_ku_=_kt_?geometry[1] < geometry[2]?1:0:_kt_;
|
||
return _ku_}
|
||
function pp_get_margin(state,param){return state[6]}
|
||
function pp_set_geometry(state,max_indent,margin)
|
||
{if(2 <= max_indent)
|
||
{if(margin <= max_indent)
|
||
throw [0,Invalid_argument,cst_Format_pp_set_geometry_mar];
|
||
pp_set_margin(state,margin);
|
||
return pp_set_max_indent(state,max_indent)}
|
||
throw [0,Invalid_argument,cst_Format_pp_set_geometry_max]}
|
||
function pp_safe_set_geometry(state,max_indent,margin)
|
||
{return check_geometry([0,max_indent,margin])
|
||
?pp_set_geometry(state,max_indent,margin)
|
||
:0}
|
||
function pp_get_geometry(state,param){return [0,state[8],state[6]]}
|
||
function pp_set_formatter_out_functions(state,param)
|
||
{var j=param[5],i=param[4],h=param[3],g=param[2],f=param[1];
|
||
state[17] = f;
|
||
state[18] = g;
|
||
state[19] = h;
|
||
state[20] = i;
|
||
state[21] = j;
|
||
return 0}
|
||
function pp_get_formatter_out_functions(state,param)
|
||
{return [0,state[17],state[18],state[19],state[20],state[21]]}
|
||
function pp_set_formatter_output_functi(state,f,g)
|
||
{state[17] = f;state[18] = g;return 0}
|
||
function pp_get_formatter_output_functi(state,param)
|
||
{return [0,state[17],state[18]]}
|
||
function display_newline(state,param)
|
||
{return caml_call3(state[17],cst$75,0,1)}
|
||
var blank_line=make$0(80,32);
|
||
function display_indent(state,n)
|
||
{var n$0=n;
|
||
for(;;)
|
||
{var _ks_=0 < n$0?1:0;
|
||
if(_ks_)
|
||
{if(80 < n$0)
|
||
{caml_call3(state[17],blank_line,0,80);
|
||
var n$1=n$0 - 80 | 0,n$0=n$1;
|
||
continue}
|
||
return caml_call3(state[17],blank_line,0,n$0)}
|
||
return _ks_}}
|
||
function pp_set_formatter_out_channel(state,oc)
|
||
{state[17]
|
||
=
|
||
function(_kp_,_kq_,_kr_){return output_substring(oc,_kp_,_kq_,_kr_)};
|
||
state[18] = function(param){return caml_ml_flush(oc)};
|
||
state[19] = function(_ko_){return display_newline(state,_ko_)};
|
||
state[20] = function(_kn_){return display_indent(state,_kn_)};
|
||
state[21] = function(_km_){return display_indent(state,_km_)};
|
||
return 0}
|
||
function default_pp_mark_open_tag(param)
|
||
{if(param[1] === String_tag)
|
||
{var s=param[2];return symbol(cst$77,symbol(s,cst$76))}
|
||
return cst$78}
|
||
function default_pp_mark_close_tag(param)
|
||
{if(param[1] === String_tag)
|
||
{var s=param[2];return symbol(cst$80,symbol(s,cst$79))}
|
||
return cst$81}
|
||
function default_pp_print_open_tag(_kl_){return 0}
|
||
function default_pp_print_close_tag(_kk_){return 0}
|
||
function pp_make_formatter(f,g,h,i,j)
|
||
{var pp_queue=create$1(0),sys_tok=[0,unknown,_b8_,0];
|
||
add(sys_tok,pp_queue);
|
||
var scan_stack=create$0(0);
|
||
initialize_scan_stack(scan_stack);
|
||
push([0,1,sys_tok],scan_stack);
|
||
var _kh_=create$0(0),_ki_=create$0(0),_kj_=create$0(0);
|
||
return [0,
|
||
scan_stack,
|
||
create$0(0),
|
||
_kj_,
|
||
_ki_,
|
||
_kh_,
|
||
78,
|
||
10,
|
||
68,
|
||
78,
|
||
0,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
max_int,
|
||
cst$82,
|
||
f,
|
||
g,
|
||
h,
|
||
i,
|
||
j,
|
||
0,
|
||
0,
|
||
default_pp_mark_open_tag,
|
||
default_pp_mark_close_tag,
|
||
default_pp_print_open_tag,
|
||
default_pp_print_close_tag,
|
||
pp_queue]}
|
||
function formatter_of_out_functions(out_funs)
|
||
{return pp_make_formatter
|
||
(out_funs[1],out_funs[2],out_funs[3],out_funs[4],out_funs[5])}
|
||
function make_formatter(output,flush)
|
||
{function _j$_(_kg_){return 0}
|
||
function _ka_(_kf_){return 0}
|
||
var
|
||
ppf=
|
||
pp_make_formatter(output,flush,function(_ke_){return 0},_ka_,_j$_);
|
||
ppf[19] = function(_kd_){return display_newline(ppf,_kd_)};
|
||
ppf[20] = function(_kc_){return display_indent(ppf,_kc_)};
|
||
ppf[21] = function(_kb_){return display_indent(ppf,_kb_)};
|
||
return ppf}
|
||
function formatter_of_out_channel(oc)
|
||
{function _j7_(param){return caml_ml_flush(oc)}
|
||
return make_formatter
|
||
(function(_j8_,_j9_,_j__)
|
||
{return output_substring(oc,_j8_,_j9_,_j__)},
|
||
_j7_)}
|
||
function formatter_of_buffer(b)
|
||
{function _j2_(_j6_){return 0}
|
||
return make_formatter
|
||
(function(_j3_,_j4_,_j5_)
|
||
{return add_substring(b,_j3_,_j4_,_j5_)},
|
||
_j2_)}
|
||
var pp_buffer_size=512;
|
||
function pp_make_buffer(param){return create$2(pp_buffer_size)}
|
||
var
|
||
stdbuf=pp_make_buffer(0),
|
||
std_formatter=formatter_of_out_channel(stdout),
|
||
err_formatter=formatter_of_out_channel(stderr),
|
||
str_formatter=formatter_of_buffer(stdbuf);
|
||
function flush_buffer_formatter(buf,ppf)
|
||
{pp_flush_queue(ppf,0);var s=contents(buf);reset(buf);return s}
|
||
function flush_str_formatter(param)
|
||
{return flush_buffer_formatter(stdbuf,str_formatter)}
|
||
function make_symbolic_output_buffer(param){return [0,0]}
|
||
function clear_symbolic_output_buffer(sob){sob[1] = 0;return 0}
|
||
function get_symbolic_output_buffer(sob){return rev(sob[1])}
|
||
function flush_symbolic_output_buffer(sob)
|
||
{var items=get_symbolic_output_buffer(sob);
|
||
clear_symbolic_output_buffer(sob);
|
||
return items}
|
||
function add_symbolic_output_item(sob,item)
|
||
{sob[1] = [0,item,sob[1]];return 0}
|
||
function formatter_of_symbolic_output_b(sob)
|
||
{function f(s,i,n){return add_symbolic_output_item(sob,[0,sub$0(s,i,n)])}
|
||
function g(_j1_){return add_symbolic_output_item(sob,0)}
|
||
function h(_j0_){return add_symbolic_output_item(sob,1)}
|
||
function i(n){return add_symbolic_output_item(sob,[1,n])}
|
||
function j(n){return add_symbolic_output_item(sob,[2,n])}
|
||
return pp_make_formatter(f,g,h,i,j)}
|
||
function open_hbox(_jZ_){return pp_open_hbox(std_formatter,_jZ_)}
|
||
function open_vbox(_jY_){return pp_open_vbox(std_formatter,_jY_)}
|
||
function open_hvbox(_jX_){return pp_open_hvbox(std_formatter,_jX_)}
|
||
function open_hovbox(_jW_){return pp_open_hovbox(std_formatter,_jW_)}
|
||
function open_box(_jV_){return pp_open_box(std_formatter,_jV_)}
|
||
function close_box(_jU_){return pp_close_box(std_formatter,_jU_)}
|
||
function open_tag(_jT_){return pp_open_tag(std_formatter,_jT_)}
|
||
function close_tag(_jS_){return pp_close_tag(std_formatter,_jS_)}
|
||
function open_stag(_jR_){return pp_open_stag(std_formatter,_jR_)}
|
||
function close_stag(_jQ_){return pp_close_stag(std_formatter,_jQ_)}
|
||
function print_as(_jO_,_jP_){return pp_print_as(std_formatter,_jO_,_jP_)}
|
||
function print_string$0(_jN_){return pp_print_string(std_formatter,_jN_)}
|
||
function print_int$0(_jM_){return pp_print_int(std_formatter,_jM_)}
|
||
function print_float$0(_jL_){return pp_print_float(std_formatter,_jL_)}
|
||
function print_char$0(_jK_){return pp_print_char(std_formatter,_jK_)}
|
||
function print_bool(_jJ_){return pp_print_bool(std_formatter,_jJ_)}
|
||
function print_break(_jH_,_jI_)
|
||
{return pp_print_break(std_formatter,_jH_,_jI_)}
|
||
function print_cut(_jG_){return pp_print_cut(std_formatter,_jG_)}
|
||
function print_space(_jF_){return pp_print_space(std_formatter,_jF_)}
|
||
function force_newline(_jE_){return pp_force_newline(std_formatter,_jE_)}
|
||
function print_flush(_jD_){return pp_print_flush(std_formatter,_jD_)}
|
||
function print_newline$0(_jC_)
|
||
{return pp_print_newline(std_formatter,_jC_)}
|
||
function print_if_newline(_jB_)
|
||
{return pp_print_if_newline(std_formatter,_jB_)}
|
||
function open_tbox(_jA_){return pp_open_tbox(std_formatter,_jA_)}
|
||
function close_tbox(_jz_){return pp_close_tbox(std_formatter,_jz_)}
|
||
function print_tbreak(_jx_,_jy_)
|
||
{return pp_print_tbreak(std_formatter,_jx_,_jy_)}
|
||
function set_tab(_jw_){return pp_set_tab(std_formatter,_jw_)}
|
||
function print_tab(_jv_){return pp_print_tab(std_formatter,_jv_)}
|
||
function set_margin(_ju_){return pp_set_margin(std_formatter,_ju_)}
|
||
function get_margin(_jt_){return std_formatter[6]}
|
||
function set_max_indent(_js_)
|
||
{return pp_set_max_indent(std_formatter,_js_)}
|
||
function get_max_indent(_jr_){return std_formatter[8]}
|
||
function set_geometry(_jp_,_jq_)
|
||
{return pp_set_geometry(std_formatter,_jp_,_jq_)}
|
||
function safe_set_geometry(_jn_,_jo_)
|
||
{return pp_safe_set_geometry(std_formatter,_jn_,_jo_)}
|
||
function get_geometry(_jm_){return pp_get_geometry(std_formatter,_jm_)}
|
||
function set_max_boxes(_jl_){return pp_set_max_boxes(std_formatter,_jl_)}
|
||
function get_max_boxes(_jk_){return std_formatter[15]}
|
||
function over_max_boxes(_jj_)
|
||
{return pp_over_max_boxes(std_formatter,_jj_)}
|
||
function set_ellipsis_text(_ji_)
|
||
{return pp_set_ellipsis_text(std_formatter,_ji_)}
|
||
function get_ellipsis_text(_jh_){return std_formatter[16]}
|
||
function set_formatter_out_channel(_jg_)
|
||
{return pp_set_formatter_out_channel(std_formatter,_jg_)}
|
||
function set_formatter_out_functions(_jf_)
|
||
{return pp_set_formatter_out_functions(std_formatter,_jf_)}
|
||
function get_formatter_out_functions(_je_)
|
||
{return pp_get_formatter_out_functions(std_formatter,_je_)}
|
||
function set_formatter_output_functions(_jc_,_jd_)
|
||
{return pp_set_formatter_output_functi(std_formatter,_jc_,_jd_)}
|
||
function get_formatter_output_functions(_jb_)
|
||
{return pp_get_formatter_output_functi(std_formatter,_jb_)}
|
||
function set_formatter_stag_functions(_ja_)
|
||
{return pp_set_formatter_stag_function(std_formatter,_ja_)}
|
||
function get_formatter_stag_functions(_i$_)
|
||
{return pp_get_formatter_stag_function(std_formatter,_i$_)}
|
||
function set_print_tags(_i__)
|
||
{return pp_set_print_tags(std_formatter,_i__)}
|
||
function get_print_tags(_i9_){return std_formatter[22]}
|
||
function set_mark_tags(_i8_){return pp_set_mark_tags(std_formatter,_i8_)}
|
||
function get_mark_tags(_i7_){return std_formatter[23]}
|
||
function set_tags(_i6_){return pp_set_tags(std_formatter,_i6_)}
|
||
function pp_print_list(opt,pp_v,ppf,param)
|
||
{var opt$0=opt,param$0=param;
|
||
for(;;)
|
||
{if(opt$0)var sth=opt$0[1],pp_sep=sth;else var pp_sep=pp_print_cut;
|
||
if(param$0)
|
||
{var _i5_=param$0[1];
|
||
if(param$0[2])
|
||
{var vs=param$0[2];
|
||
caml_call2(pp_v,ppf,_i5_);
|
||
caml_call2(pp_sep,ppf,0);
|
||
var opt$1=[0,pp_sep],opt$0=opt$1,param$0=vs;
|
||
continue}
|
||
return caml_call2(pp_v,ppf,_i5_)}
|
||
return 0}}
|
||
function pp_print_text(ppf,s)
|
||
{var len=caml_ml_string_length(s),left=[0,0],right=[0,0];
|
||
function flush(param)
|
||
{pp_print_string(ppf,sub$0(s,left[1],right[1] - left[1] | 0));
|
||
right[1]++;
|
||
left[1] = right[1];
|
||
return 0}
|
||
for(;;)
|
||
{if(right[1] !== len)
|
||
{var match=caml_string_get(s,right[1]);
|
||
if(10 === match)
|
||
{flush(0);pp_force_newline(ppf,0)}
|
||
else
|
||
if(32 === match){flush(0);pp_print_space(ppf,0)}else right[1]++;
|
||
continue}
|
||
var _i4_=left[1] !== len?1:0;
|
||
return _i4_?flush(0):_i4_}}
|
||
function pp_print_option(opt,pp_v,ppf,param)
|
||
{if(opt)
|
||
var sth=opt[1],none=sth;
|
||
else
|
||
var none=function(param,_i3_){return 0};
|
||
if(param){var v=param[1];return caml_call2(pp_v,ppf,v)}
|
||
return caml_call2(none,ppf,0)}
|
||
function pp_print_result(ok,error,ppf,param)
|
||
{if(0 === param[0]){var v=param[1];return caml_call2(ok,ppf,v)}
|
||
var e=param[1];
|
||
return caml_call2(error,ppf,e)}
|
||
function compute_tag(output,tag_acc)
|
||
{var buf=create$2(16),ppf=formatter_of_buffer(buf);
|
||
caml_call2(output,ppf,tag_acc);
|
||
pp_print_flush(ppf,0);
|
||
var len=buf[2];
|
||
return 2 <= len?sub$3(buf,1,len - 2 | 0):contents(buf)}
|
||
function output_formatting_lit(ppf,fmting_lit)
|
||
{if(typeof fmting_lit === "number")
|
||
switch(fmting_lit)
|
||
{case 0:return pp_close_box(ppf,0);
|
||
case 1:return pp_close_tag(ppf,0);
|
||
case 2:return pp_print_flush(ppf,0);
|
||
case 3:return pp_force_newline(ppf,0);
|
||
case 4:return pp_print_newline(ppf,0);
|
||
case 5:return pp_print_char(ppf,64);
|
||
default:return pp_print_char(ppf,37)}
|
||
else
|
||
switch(fmting_lit[0])
|
||
{case 0:
|
||
var offset=fmting_lit[3],width=fmting_lit[2];
|
||
return pp_print_break(ppf,width,offset);
|
||
case 1:return 0;
|
||
default:
|
||
var c=fmting_lit[1];
|
||
pp_print_char(ppf,64);
|
||
return pp_print_char(ppf,c)}}
|
||
function output_acc$0(ppf,acc)
|
||
{var switch$0=0;
|
||
if(typeof acc === "number")
|
||
return 0;
|
||
else
|
||
switch(acc[0])
|
||
{case 0:
|
||
var f=acc[2],p=acc[1];
|
||
output_acc$0(ppf,p);
|
||
return output_formatting_lit(ppf,f);
|
||
case 1:
|
||
var _iT_=acc[2],_iU_=acc[1];
|
||
if(0 === _iT_[0])
|
||
{var acc$0=_iT_[1];
|
||
output_acc$0(ppf,_iU_);
|
||
return pp_open_stag
|
||
(ppf,[0,String_tag,compute_tag(output_acc$0,acc$0)])}
|
||
var acc$1=_iT_[1];
|
||
output_acc$0(ppf,_iU_);
|
||
var
|
||
match=open_box_of_string(compute_tag(output_acc$0,acc$1)),
|
||
bty=match[2],
|
||
indent=match[1];
|
||
return pp_open_box_gen(ppf,indent,bty);
|
||
case 2:
|
||
var _iV_=acc[1],switch$1=0;
|
||
if(typeof _iV_ !== "number" && 0 === _iV_[0])
|
||
{var _iW_=_iV_[2],switch$2=0;
|
||
if(typeof _iW_ !== "number" && 1 === _iW_[0])
|
||
{var s$0=acc[2],size=_iW_[2],p$1=_iV_[1];
|
||
switch$1 = 1;
|
||
switch$2 = 1}}
|
||
if(! switch$1){var s=acc[2],p$0=_iV_;switch$0 = 2}
|
||
break;
|
||
case 3:
|
||
var _iX_=acc[1],switch$3=0;
|
||
if(typeof _iX_ !== "number" && 0 === _iX_[0])
|
||
{var _iY_=_iX_[2],switch$4=0;
|
||
if(typeof _iY_ !== "number" && 1 === _iY_[0])
|
||
{var c$0=acc[2],size$0=_iY_[2],p$3=_iX_[1];
|
||
switch$0 = 1;
|
||
switch$3 = 1;
|
||
switch$4 = 1}}
|
||
if(! switch$3){var c=acc[2],p$2=_iX_;switch$0 = 3}
|
||
break;
|
||
case 4:
|
||
var _iZ_=acc[1],switch$5=0;
|
||
if(typeof _iZ_ !== "number" && 0 === _iZ_[0])
|
||
{var _i0_=_iZ_[2],switch$6=0;
|
||
if(typeof _i0_ !== "number" && 1 === _i0_[0])
|
||
{var s$0=acc[2],size=_i0_[2],p$1=_iZ_[1];
|
||
switch$5 = 1;
|
||
switch$6 = 1}}
|
||
if(! switch$5){var s=acc[2],p$0=_iZ_;switch$0 = 2}
|
||
break;
|
||
case 5:
|
||
var _i1_=acc[1],switch$7=0;
|
||
if(typeof _i1_ === "number" || ! (0 === _i1_[0]))
|
||
switch$7 = 1;
|
||
else
|
||
{var _i2_=_i1_[2],switch$8=0;
|
||
if(typeof _i2_ !== "number" && 1 === _i2_[0])
|
||
{var c$0=acc[2],size$0=_i2_[2],p$3=_i1_[1];
|
||
switch$0 = 1;
|
||
switch$8 = 1}
|
||
if(! switch$8)switch$7 = 1}
|
||
if(switch$7){var c=acc[2],p$2=_i1_;switch$0 = 3}
|
||
break;
|
||
case 6:
|
||
var f$0=acc[2],p$4=acc[1];
|
||
output_acc$0(ppf,p$4);
|
||
return caml_call1(f$0,ppf);
|
||
case 7:
|
||
var p$5=acc[1];output_acc$0(ppf,p$5);return pp_print_flush(ppf,0);
|
||
default:
|
||
var msg=acc[2],p$6=acc[1];
|
||
output_acc$0(ppf,p$6);
|
||
return invalid_arg(msg)}
|
||
switch(switch$0)
|
||
{case 0:output_acc$0(ppf,p$1);return pp_print_as_size(ppf,size,s$0);
|
||
case 1:
|
||
output_acc$0(ppf,p$3);
|
||
return pp_print_as_size(ppf,size$0,make$0(1,c$0));
|
||
case 2:output_acc$0(ppf,p$0);return pp_print_string(ppf,s);
|
||
default:output_acc$0(ppf,p$2);return pp_print_char(ppf,c)}}
|
||
function strput_acc$0(ppf,acc)
|
||
{var switch$0=0;
|
||
if(typeof acc === "number")
|
||
return 0;
|
||
else
|
||
switch(acc[0])
|
||
{case 0:
|
||
var f=acc[2],p=acc[1];
|
||
strput_acc$0(ppf,p);
|
||
return output_formatting_lit(ppf,f);
|
||
case 1:
|
||
var _iH_=acc[2],_iI_=acc[1];
|
||
if(0 === _iH_[0])
|
||
{var acc$0=_iH_[1];
|
||
strput_acc$0(ppf,_iI_);
|
||
return pp_open_stag
|
||
(ppf,[0,String_tag,compute_tag(strput_acc$0,acc$0)])}
|
||
var acc$1=_iH_[1];
|
||
strput_acc$0(ppf,_iI_);
|
||
var
|
||
match=open_box_of_string(compute_tag(strput_acc$0,acc$1)),
|
||
bty=match[2],
|
||
indent=match[1];
|
||
return pp_open_box_gen(ppf,indent,bty);
|
||
case 2:
|
||
var _iJ_=acc[1],switch$1=0;
|
||
if(typeof _iJ_ !== "number" && 0 === _iJ_[0])
|
||
{var _iK_=_iJ_[2],switch$2=0;
|
||
if(typeof _iK_ !== "number" && 1 === _iK_[0])
|
||
{var s$0=acc[2],size=_iK_[2],p$1=_iJ_[1];
|
||
switch$1 = 1;
|
||
switch$2 = 1}}
|
||
if(! switch$1){var s=acc[2],p$0=_iJ_;switch$0 = 2}
|
||
break;
|
||
case 3:
|
||
var _iL_=acc[1],switch$3=0;
|
||
if(typeof _iL_ !== "number" && 0 === _iL_[0])
|
||
{var _iM_=_iL_[2],switch$4=0;
|
||
if(typeof _iM_ !== "number" && 1 === _iM_[0])
|
||
{var c$0=acc[2],size$0=_iM_[2],p$3=_iL_[1];
|
||
switch$0 = 1;
|
||
switch$3 = 1;
|
||
switch$4 = 1}}
|
||
if(! switch$3){var c=acc[2],p$2=_iL_;switch$0 = 3}
|
||
break;
|
||
case 4:
|
||
var _iN_=acc[1],switch$5=0;
|
||
if(typeof _iN_ !== "number" && 0 === _iN_[0])
|
||
{var _iO_=_iN_[2],switch$6=0;
|
||
if(typeof _iO_ !== "number" && 1 === _iO_[0])
|
||
{var s$0=acc[2],size=_iO_[2],p$1=_iN_[1];
|
||
switch$5 = 1;
|
||
switch$6 = 1}}
|
||
if(! switch$5){var s=acc[2],p$0=_iN_;switch$0 = 2}
|
||
break;
|
||
case 5:
|
||
var _iP_=acc[1],switch$7=0;
|
||
if(typeof _iP_ === "number" || ! (0 === _iP_[0]))
|
||
switch$7 = 1;
|
||
else
|
||
{var _iQ_=_iP_[2],switch$8=0;
|
||
if(typeof _iQ_ !== "number" && 1 === _iQ_[0])
|
||
{var c$0=acc[2],size$0=_iQ_[2],p$3=_iP_[1];
|
||
switch$0 = 1;
|
||
switch$8 = 1}
|
||
if(! switch$8)switch$7 = 1}
|
||
if(switch$7){var c=acc[2],p$2=_iP_;switch$0 = 3}
|
||
break;
|
||
case 6:
|
||
var _iR_=acc[1];
|
||
if(typeof _iR_ !== "number" && 0 === _iR_[0])
|
||
{var _iS_=_iR_[2];
|
||
if(typeof _iS_ !== "number" && 1 === _iS_[0])
|
||
{var f$1=acc[2],size$1=_iS_[2],p$4=_iR_[1];
|
||
strput_acc$0(ppf,p$4);
|
||
return pp_print_as_size(ppf,size$1,caml_call1(f$1,0))}}
|
||
var f$0=acc[2];
|
||
strput_acc$0(ppf,_iR_);
|
||
return pp_print_string(ppf,caml_call1(f$0,0));
|
||
case 7:
|
||
var p$5=acc[1];strput_acc$0(ppf,p$5);return pp_print_flush(ppf,0);
|
||
default:
|
||
var msg=acc[2],p$6=acc[1];
|
||
strput_acc$0(ppf,p$6);
|
||
return invalid_arg(msg)}
|
||
switch(switch$0)
|
||
{case 0:strput_acc$0(ppf,p$1);return pp_print_as_size(ppf,size,s$0);
|
||
case 1:
|
||
strput_acc$0(ppf,p$3);
|
||
return pp_print_as_size(ppf,size$0,make$0(1,c$0));
|
||
case 2:strput_acc$0(ppf,p$0);return pp_print_string(ppf,s);
|
||
default:strput_acc$0(ppf,p$2);return pp_print_char(ppf,c)}}
|
||
function kfprintf$0(k,ppf,param)
|
||
{var fmt=param[1],_iG_=0;
|
||
return make_printf
|
||
(function(acc){output_acc$0(ppf,acc);return caml_call1(k,ppf)},
|
||
_iG_,
|
||
fmt)}
|
||
function ikfprintf$0(k,ppf,param)
|
||
{var fmt=param[1];return make_iprintf(k,ppf,fmt)}
|
||
function ifprintf$0(ppf,param)
|
||
{var fmt=param[1],_iE_=0;
|
||
return make_iprintf(function(_iF_){return 0},_iE_,fmt)}
|
||
function fprintf$0(ppf)
|
||
{function _iB_(_iD_){return 0}
|
||
return function(_iC_){return kfprintf$0(_iB_,ppf,_iC_)}}
|
||
function printf$0(fmt){return caml_call1(fprintf$0(std_formatter),fmt)}
|
||
function eprintf$0(fmt){return caml_call1(fprintf$0(err_formatter),fmt)}
|
||
function kdprintf(k,param)
|
||
{var fmt=param[1],_iA_=0;
|
||
return make_printf
|
||
(function(acc)
|
||
{return caml_call1
|
||
(k,function(ppf){return output_acc$0(ppf,acc)})},
|
||
_iA_,
|
||
fmt)}
|
||
function dprintf(fmt){return kdprintf(function(i){return i},fmt)}
|
||
function kprintf(k,param)
|
||
{var fmt=param[1],b=pp_make_buffer(0),ppf=formatter_of_buffer(b);
|
||
function k$0(acc)
|
||
{strput_acc$0(ppf,acc);
|
||
return caml_call1(k,flush_buffer_formatter(b,ppf))}
|
||
return make_printf(k$0,0,fmt)}
|
||
function sprintf$0(fmt){return kprintf(id$0,fmt)}
|
||
function kasprintf(k,param)
|
||
{var fmt=param[1],b=pp_make_buffer(0),ppf=formatter_of_buffer(b);
|
||
function k$0(acc)
|
||
{output_acc$0(ppf,acc);
|
||
return caml_call1(k,flush_buffer_formatter(b,ppf))}
|
||
return make_printf(k$0,0,fmt)}
|
||
function asprintf(fmt){return kasprintf(id$0,fmt)}
|
||
function flush_standard_formatters(param)
|
||
{pp_print_flush(std_formatter,0);return pp_print_flush(err_formatter,0)}
|
||
at_exit(flush_standard_formatters);
|
||
function pp_set_all_formatter_output_fu(state,f,g,h,i)
|
||
{pp_set_formatter_output_functi(state,f,g);
|
||
state[19] = h;
|
||
state[20] = i;
|
||
return 0}
|
||
function pp_get_all_formatter_output_fu(state,param)
|
||
{return [0,state[17],state[18],state[19],state[20]]}
|
||
function set_all_formatter_output_funct(_iw_,_ix_,_iy_,_iz_)
|
||
{return pp_set_all_formatter_output_fu(std_formatter,_iw_,_ix_,_iy_,_iz_)}
|
||
function get_all_formatter_output_funct(_iv_)
|
||
{return pp_get_all_formatter_output_fu(std_formatter,_iv_)}
|
||
function bprintf$0(b,param)
|
||
{var fmt=param[1],ppf=formatter_of_buffer(b);
|
||
function k(acc){output_acc$0(ppf,acc);return pp_flush_queue(ppf,0)}
|
||
return make_printf(k,0,fmt)}
|
||
function pp_set_formatter_tag_functions(state,param)
|
||
{var pct=param[4],pot=param[3],mct=param[2],mot=param[1];
|
||
function stringify(f,e,param)
|
||
{if(param[1] === String_tag){var s=param[2];return caml_call1(f,s)}
|
||
return e}
|
||
state[24] = function(_iu_){return stringify(mot,cst$83,_iu_)};
|
||
state[25] = function(_it_){return stringify(mct,cst$84,_it_)};
|
||
var _ip_=0;
|
||
state[26] = function(_is_){return stringify(pot,_ip_,_is_)};
|
||
var _iq_=0;
|
||
state[27] = function(_ir_){return stringify(pct,_iq_,_ir_)};
|
||
return 0}
|
||
function pp_get_formatter_tag_functions(fmt,param)
|
||
{var funs=pp_get_formatter_stag_function(fmt,0);
|
||
function mark_open_tag(s){return caml_call1(funs[1],[0,String_tag,s])}
|
||
function mark_close_tag(s){return caml_call1(funs[2],[0,String_tag,s])}
|
||
function print_open_tag(s){return caml_call1(funs[3],[0,String_tag,s])}
|
||
function print_close_tag(s){return caml_call1(funs[4],[0,String_tag,s])}
|
||
return [0,mark_open_tag,mark_close_tag,print_open_tag,print_close_tag]}
|
||
function set_formatter_tag_functions(_io_)
|
||
{return pp_set_formatter_tag_functions(std_formatter,_io_)}
|
||
function get_formatter_tag_functions(_in_)
|
||
{return pp_get_formatter_tag_functions(std_formatter,_in_)}
|
||
var
|
||
Stdlib_format=
|
||
[0,
|
||
pp_open_box,
|
||
open_box,
|
||
pp_close_box,
|
||
close_box,
|
||
pp_open_hbox,
|
||
open_hbox,
|
||
pp_open_vbox,
|
||
open_vbox,
|
||
pp_open_hvbox,
|
||
open_hvbox,
|
||
pp_open_hovbox,
|
||
open_hovbox,
|
||
pp_print_string,
|
||
print_string$0,
|
||
pp_print_as,
|
||
print_as,
|
||
pp_print_int,
|
||
print_int$0,
|
||
pp_print_float,
|
||
print_float$0,
|
||
pp_print_char,
|
||
print_char$0,
|
||
pp_print_bool,
|
||
print_bool,
|
||
pp_print_space,
|
||
print_space,
|
||
pp_print_cut,
|
||
print_cut,
|
||
pp_print_break,
|
||
print_break,
|
||
pp_print_custom_break,
|
||
pp_force_newline,
|
||
force_newline,
|
||
pp_print_if_newline,
|
||
print_if_newline,
|
||
pp_print_flush,
|
||
print_flush,
|
||
pp_print_newline,
|
||
print_newline$0,
|
||
pp_set_margin,
|
||
set_margin,
|
||
pp_get_margin,
|
||
get_margin,
|
||
pp_set_max_indent,
|
||
set_max_indent,
|
||
pp_get_max_indent,
|
||
get_max_indent,
|
||
check_geometry,
|
||
pp_set_geometry,
|
||
set_geometry,
|
||
pp_safe_set_geometry,
|
||
safe_set_geometry,
|
||
pp_get_geometry,
|
||
get_geometry,
|
||
pp_set_max_boxes,
|
||
set_max_boxes,
|
||
pp_get_max_boxes,
|
||
get_max_boxes,
|
||
pp_over_max_boxes,
|
||
over_max_boxes,
|
||
pp_open_tbox,
|
||
open_tbox,
|
||
pp_close_tbox,
|
||
close_tbox,
|
||
pp_set_tab,
|
||
set_tab,
|
||
pp_print_tab,
|
||
print_tab,
|
||
pp_print_tbreak,
|
||
print_tbreak,
|
||
pp_set_ellipsis_text,
|
||
set_ellipsis_text,
|
||
pp_get_ellipsis_text,
|
||
get_ellipsis_text,
|
||
String_tag,
|
||
pp_open_stag,
|
||
open_stag,
|
||
pp_close_stag,
|
||
close_stag,
|
||
pp_set_tags,
|
||
set_tags,
|
||
pp_set_print_tags,
|
||
set_print_tags,
|
||
pp_set_mark_tags,
|
||
set_mark_tags,
|
||
pp_get_print_tags,
|
||
get_print_tags,
|
||
pp_get_mark_tags,
|
||
get_mark_tags,
|
||
pp_set_formatter_out_channel,
|
||
set_formatter_out_channel,
|
||
pp_set_formatter_output_functi,
|
||
set_formatter_output_functions,
|
||
pp_get_formatter_output_functi,
|
||
get_formatter_output_functions,
|
||
pp_set_formatter_out_functions,
|
||
set_formatter_out_functions,
|
||
pp_get_formatter_out_functions,
|
||
get_formatter_out_functions,
|
||
pp_set_formatter_stag_function,
|
||
set_formatter_stag_functions,
|
||
pp_get_formatter_stag_function,
|
||
get_formatter_stag_functions,
|
||
formatter_of_out_channel,
|
||
std_formatter,
|
||
err_formatter,
|
||
formatter_of_buffer,
|
||
stdbuf,
|
||
str_formatter,
|
||
flush_str_formatter,
|
||
make_formatter,
|
||
formatter_of_out_functions,
|
||
make_symbolic_output_buffer,
|
||
clear_symbolic_output_buffer,
|
||
get_symbolic_output_buffer,
|
||
flush_symbolic_output_buffer,
|
||
add_symbolic_output_item,
|
||
formatter_of_symbolic_output_b,
|
||
pp_print_list,
|
||
pp_print_text,
|
||
pp_print_option,
|
||
pp_print_result,
|
||
fprintf$0,
|
||
printf$0,
|
||
eprintf$0,
|
||
sprintf$0,
|
||
asprintf,
|
||
dprintf,
|
||
ifprintf$0,
|
||
kfprintf$0,
|
||
kdprintf,
|
||
ikfprintf$0,
|
||
kprintf,
|
||
kasprintf,
|
||
bprintf$0,
|
||
kprintf,
|
||
set_all_formatter_output_funct,
|
||
get_all_formatter_output_funct,
|
||
pp_set_all_formatter_output_fu,
|
||
pp_get_all_formatter_output_fu,
|
||
pp_open_tag,
|
||
open_tag,
|
||
pp_close_tag,
|
||
close_tag,
|
||
pp_set_formatter_tag_functions,
|
||
set_formatter_tag_functions,
|
||
pp_get_formatter_tag_functions,
|
||
get_formatter_tag_functions];
|
||
caml_register_global(788,Stdlib_format,"Stdlib__format");
|
||
var null_char=0;
|
||
function next_char(ib)
|
||
{try
|
||
{var c=caml_call1(ib[7],0);
|
||
ib[2] = c;
|
||
ib[3] = 1;
|
||
ib[4] = ib[4] + 1 | 0;
|
||
if(10 === c)ib[5] = ib[5] + 1 | 0;
|
||
return c}
|
||
catch(_im_)
|
||
{_im_ = caml_wrap_exception(_im_);
|
||
if(_im_ === End_of_file)
|
||
{ib[2] = null_char;ib[3] = 0;ib[1] = 1;return null_char}
|
||
throw _im_}}
|
||
function peek_char(ib){return ib[3]?ib[2]:next_char(ib)}
|
||
function checked_peek_char(ib)
|
||
{var c=peek_char(ib);if(ib[1])throw End_of_file;return c}
|
||
function end_of_input(ib){peek_char(ib);return ib[1]}
|
||
function beginning_of_input(ib){return 0 === ib[4]?1:0}
|
||
function name_of_input(ib)
|
||
{var _il_=ib[9];
|
||
if(typeof _il_ === "number")
|
||
return 0 === _il_?cst_unnamed_function:cst_unnamed_character_string;
|
||
else
|
||
{if(0 === _il_[0])return cst_unnamed_Stdlib_input_chann;
|
||
var fname=_il_[1];
|
||
return fname}}
|
||
function char_count(ib){return ib[3]?ib[4] - 1 | 0:ib[4]}
|
||
function reset_token(ib){return reset(ib[8])}
|
||
function invalidate_current_char(ib){ib[3] = 0;return 0}
|
||
function token_string(ib)
|
||
{var token_buffer=ib[8],tok=contents(token_buffer);
|
||
clear$1(token_buffer);
|
||
ib[6] = ib[6] + 1 | 0;
|
||
return tok}
|
||
function skip_char(width,ib){invalidate_current_char(ib);return width}
|
||
function ignore_char(width,ib){return skip_char(width - 1 | 0,ib)}
|
||
function store_char(width,ib,c)
|
||
{add_char(ib[8],c);return ignore_char(width,ib)}
|
||
var default_token_buffer_size=1024;
|
||
function create$4(iname,next)
|
||
{return [0,
|
||
0,
|
||
null_char,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
next,
|
||
create$2(default_token_buffer_size),
|
||
iname]}
|
||
function from_string$1(s)
|
||
{var i=[0,0],len=caml_ml_string_length(s);
|
||
function next(param)
|
||
{if(len <= i[1])throw End_of_file;
|
||
var c=caml_string_get(s,i[1]);
|
||
i[1]++;
|
||
return c}
|
||
return create$4(1,next)}
|
||
var _b9_=0;
|
||
function from_function$0(_ik_){return create$4(_b9_,_ik_)}
|
||
var len=1024;
|
||
function scan_close_at_end(ic)
|
||
{caml_ml_close_channel(ic);throw End_of_file}
|
||
function scan_raise_at_end(ic){throw End_of_file}
|
||
function from_ic(scan_close_ic,iname,ic)
|
||
{var buf=caml_create_bytes(1024),i=[0,0],lim=[0,0],eof=[0,0];
|
||
function next(param)
|
||
{if(i[1] < lim[1]){var c=caml_bytes_get(buf,i[1]);i[1]++;return c}
|
||
if(eof[1])throw End_of_file;
|
||
lim[1] = input(ic,buf,0,len);
|
||
return 0 === lim[1]
|
||
?(eof[1] = 1,caml_call1(scan_close_ic,ic))
|
||
:(i[1] = 1,caml_bytes_get(buf,0))}
|
||
return create$4(iname,next)}
|
||
var stdib=from_ic(scan_raise_at_end,[1,cst$85,stdin],stdin);
|
||
function open_in_file(open_in,fname)
|
||
{if(caml_string_notequal(fname,cst$86))
|
||
{var ic=caml_call1(open_in,fname);
|
||
return from_ic(scan_close_at_end,[1,fname,ic],ic)}
|
||
return stdib}
|
||
function from_file(_ij_){return open_in_file(open_in,_ij_)}
|
||
function from_file_bin(_ii_){return open_in_file(open_in_bin,_ii_)}
|
||
function from_channel$0(ic){return from_ic(scan_raise_at_end,[0,ic],ic)}
|
||
function close_in$0(ib)
|
||
{var _ih_=ib[9];
|
||
if(typeof _ih_ === "number")
|
||
return 0;
|
||
else
|
||
{if(0 === _ih_[0]){var ic=_ih_[1];return caml_ml_close_channel(ic)}
|
||
var ic$0=_ih_[2];
|
||
return caml_ml_close_channel(ic$0)}}
|
||
var memo=[0,0];
|
||
function memo_from_ic(scan_close_ic,ic)
|
||
{try
|
||
{var _if_=assq(ic,memo[1]);return _if_}
|
||
catch(_ig_)
|
||
{_ig_ = caml_wrap_exception(_ig_);
|
||
if(_ig_ === Not_found)
|
||
{var ib=from_ic(scan_close_ic,[0,ic],ic);
|
||
memo[1] = [0,[0,ic,ib],memo[1]];
|
||
return ib}
|
||
throw _ig_}}
|
||
function memo_from_channel(_ie_)
|
||
{return memo_from_ic(scan_raise_at_end,_ie_)}
|
||
var Scan_failure=[248,cst_Stdlib_Scanf_Scan_failure,caml_fresh_oo_id(0)];
|
||
function bad_input(s){throw [0,Scan_failure,s]}
|
||
function bad_input_escape(c)
|
||
{return bad_input(caml_call1(sprintf(_b__),c))}
|
||
function bad_token_length(message)
|
||
{return bad_input(caml_call1(sprintf(_b$_),message))}
|
||
function bad_float(param)
|
||
{return bad_input(cst_no_dot_or_exponent_part_fo)}
|
||
function bad_hex_float(param)
|
||
{return bad_input(cst_not_a_valid_float_in_hexad)}
|
||
function character_mismatch(c,ci)
|
||
{return bad_input(caml_call2(sprintf(_cb_),c,ci))}
|
||
function check_this_char(ib,c)
|
||
{var ci=checked_peek_char(ib);
|
||
return ci === c?invalidate_current_char(ib):character_mismatch(c,ci)}
|
||
function check_char(ib,c$0)
|
||
{if(10 === c$0)
|
||
{var ci=checked_peek_char(ib);
|
||
return 10 === ci
|
||
?invalidate_current_char(ib)
|
||
:13 === ci
|
||
?(invalidate_current_char(ib),check_this_char(ib,10))
|
||
:character_mismatch(10,ci)}
|
||
if(32 === c$0)
|
||
for(;;)
|
||
{var c=peek_char(ib),_ic_=1 - ib[1];
|
||
if(_ic_)
|
||
{var _id_=c - 9 | 0,switch$0=0;
|
||
if(4 < _id_ >>> 0)
|
||
{if(23 === _id_)switch$0 = 1}
|
||
else
|
||
if(1 < (_id_ - 2 | 0) >>> 0)switch$0 = 1;
|
||
if(switch$0){invalidate_current_char(ib);continue}
|
||
return 0}
|
||
return _ic_}
|
||
return check_this_char(ib,c$0)}
|
||
function token_char(ib){return caml_string_get(token_string(ib),0)}
|
||
function token_bool(ib)
|
||
{var s=token_string(ib);
|
||
return caml_string_notequal(s,cst_false$3)
|
||
?caml_string_notequal(s,cst_true$3)
|
||
?bad_input(caml_call1(sprintf(_cc_),s))
|
||
:1
|
||
:0}
|
||
function integer_conversion_of_char(param)
|
||
{var switcher=param - 88 | 0;
|
||
if(! (32 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 10:return 0;
|
||
case 12:return 1;
|
||
case 17:return 2;
|
||
case 23:return 3;
|
||
case 29:return 4;
|
||
case 0:
|
||
case 32:return 5
|
||
}
|
||
throw [0,Assert_failure,_cd_]}
|
||
function token_int_literal(conv,ib)
|
||
{switch(conv)
|
||
{case 0:var tok=symbol(cst_0b,token_string(ib));break;
|
||
case 3:var tok=symbol(cst_0o,token_string(ib));break;
|
||
case 4:var tok=symbol(cst_0u,token_string(ib));break;
|
||
case 5:var tok=symbol(cst_0x,token_string(ib));break;
|
||
default:var tok=token_string(ib)}
|
||
var l=caml_ml_string_length(tok);
|
||
if(0 !== l && 43 === caml_string_get(tok,0))
|
||
return sub$0(tok,1,l - 1 | 0);
|
||
return tok}
|
||
function token_float(ib){return caml_float_of_string(token_string(ib))}
|
||
function scan_decimal_digit_star(width,ib)
|
||
{var width$0=width;
|
||
for(;;)
|
||
{if(0 === width$0)return width$0;
|
||
var c=peek_char(ib);
|
||
if(ib[1])return width$0;
|
||
if(58 <= c)
|
||
{if(95 === c)
|
||
{var width$1=ignore_char(width$0,ib),width$0=width$1;continue}}
|
||
else
|
||
if(48 <= c)
|
||
{var width$2=store_char(width$0,ib,c),width$0=width$2;continue}
|
||
return width$0}}
|
||
function scan_unsigned_decimal_int(width,ib)
|
||
{if(0 === width)return bad_token_length(cst_decimal_digits);
|
||
var c=checked_peek_char(ib),switcher=c - 48 | 0;
|
||
if(9 < switcher >>> 0)return bad_input(caml_call1(sprintf(_ce_),c));
|
||
var width$0=store_char(width,ib,c);
|
||
return scan_decimal_digit_star(width$0,ib)}
|
||
function scan_digit_plus(basis,digitp,width$2,ib)
|
||
{if(0 === width$2)return bad_token_length(cst_digits);
|
||
var c$0=checked_peek_char(ib);
|
||
if(caml_call1(digitp,c$0))
|
||
{var width$3=store_char(width$2,ib,c$0),width=width$3;
|
||
for(;;)
|
||
{if(0 === width)return width;
|
||
var c=peek_char(ib);
|
||
if(ib[1])return width;
|
||
if(caml_call1(digitp,c))
|
||
{var width$0=store_char(width,ib,c),width=width$0;continue}
|
||
if(95 === c)
|
||
{var width$1=ignore_char(width,ib),width=width$1;continue}
|
||
return width}}
|
||
return bad_input(caml_call2(sprintf(_cf_),c$0,basis))}
|
||
function is_binary_digit(param)
|
||
{var switcher=param - 48 | 0;return 1 < switcher >>> 0?0:1}
|
||
function scan_binary_int(_ia_,_ib_)
|
||
{return scan_digit_plus(cst_binary,is_binary_digit,_ia_,_ib_)}
|
||
function is_octal_digit(param)
|
||
{var switcher=param - 48 | 0;return 7 < switcher >>> 0?0:1}
|
||
function scan_octal_int(_h__,_h$_)
|
||
{return scan_digit_plus(cst_octal,is_octal_digit,_h__,_h$_)}
|
||
function is_hexa_digit(param)
|
||
{var _h9_=param - 48 | 0,switch$0=0;
|
||
if(22 < _h9_ >>> 0)
|
||
{if(! (5 < (_h9_ - 49 | 0) >>> 0))switch$0 = 1}
|
||
else
|
||
if(6 < (_h9_ - 10 | 0) >>> 0)switch$0 = 1;
|
||
return switch$0?1:0}
|
||
function scan_hexadecimal_int(_h7_,_h8_)
|
||
{return scan_digit_plus(cst_hexadecimal,is_hexa_digit,_h7_,_h8_)}
|
||
function scan_sign(width,ib)
|
||
{var c=checked_peek_char(ib),switcher=c - 43 | 0;
|
||
if(! (2 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:return store_char(width,ib,c);
|
||
case 1:break;
|
||
default:return store_char(width,ib,c)}
|
||
return width}
|
||
function scan_optionally_signed_decimal(width,ib)
|
||
{var width$0=scan_sign(width,ib);
|
||
return scan_unsigned_decimal_int(width$0,ib)}
|
||
function scan_int_conversion(conv,width$1,ib)
|
||
{switch(conv)
|
||
{case 0:return scan_binary_int(width$1,ib);
|
||
case 1:return scan_optionally_signed_decimal(width$1,ib);
|
||
case 2:
|
||
var width$0=scan_sign(width$1,ib),c=checked_peek_char(ib);
|
||
if(48 === c)
|
||
{var width=store_char(width$0,ib,c);
|
||
if(0 === width)return width;
|
||
var c$0=peek_char(ib);
|
||
if(ib[1])return width;
|
||
var switch$0=0;
|
||
if(99 <= c$0)
|
||
{if(111 === c$0)
|
||
return scan_octal_int(store_char(width,ib,c$0),ib);
|
||
if(120 === c$0)switch$0 = 1}
|
||
else
|
||
if(88 === c$0)
|
||
switch$0 = 1;
|
||
else
|
||
if(98 <= c$0)return scan_binary_int(store_char(width,ib,c$0),ib);
|
||
return switch$0
|
||
?scan_hexadecimal_int(store_char(width,ib,c$0),ib)
|
||
:scan_decimal_digit_star(width,ib)}
|
||
return scan_unsigned_decimal_int(width$0,ib);
|
||
case 3:return scan_octal_int(width$1,ib);
|
||
case 4:return scan_unsigned_decimal_int(width$1,ib);
|
||
default:return scan_hexadecimal_int(width$1,ib)}}
|
||
function scan_fractional_part(width,ib)
|
||
{if(0 === width)return width;
|
||
var c=peek_char(ib);
|
||
if(ib[1])return width;
|
||
var switcher=c - 48 | 0;
|
||
return 9 < switcher >>> 0
|
||
?width
|
||
:scan_decimal_digit_star(store_char(width,ib,c),ib)}
|
||
function scan_exponent_part(width,ib)
|
||
{if(0 === width)return width;
|
||
var c=peek_char(ib);
|
||
if(ib[1])return width;
|
||
if(69 !== c && 101 !== c)return width;
|
||
return scan_optionally_signed_decimal(store_char(width,ib,c),ib)}
|
||
function scan_float(width$1,precision,ib)
|
||
{var
|
||
width=scan_sign(width$1,ib),
|
||
width$0=scan_decimal_digit_star(width,ib);
|
||
if(0 === width$0)return [0,width$0,precision];
|
||
var c=peek_char(ib);
|
||
if(ib[1])return [0,width$0,precision];
|
||
if(46 === c)
|
||
{var
|
||
width$2=store_char(width$0,ib,c),
|
||
precision$0=min(width$2,precision),
|
||
width$3=
|
||
width$2
|
||
-
|
||
(precision$0 - scan_fractional_part(precision$0,ib) | 0)
|
||
|
|
||
0;
|
||
return [0,scan_exponent_part(width$3,ib),precision$0]}
|
||
return [0,scan_exponent_part(width$0,ib),precision]}
|
||
function check_case_insensitive_string(width,ib,error,str)
|
||
{function lowercase(c)
|
||
{var switcher=c - 65 | 0;
|
||
return 25 < switcher >>> 0?c:char_of_int((c - 65 | 0) + 97 | 0)}
|
||
var
|
||
len=caml_ml_string_length(str),
|
||
width$0=[0,width],
|
||
_h4_=len - 1 | 0,
|
||
_h3_=0;
|
||
if(! (_h4_ < 0))
|
||
{var i=_h3_;
|
||
for(;;)
|
||
{var c=peek_char(ib),_h5_=lowercase(caml_string_get(str,i));
|
||
if(lowercase(c) !== _h5_)caml_call1(error,0);
|
||
if(0 === width$0[1])caml_call1(error,0);
|
||
width$0[1] = store_char(width$0[1],ib,c);
|
||
var _h6_=i + 1 | 0;
|
||
if(_h4_ !== i){var i=_h6_;continue}
|
||
break}}
|
||
return width$0[1]}
|
||
function scan_hex_float(width,precision,ib)
|
||
{var _hQ_=0 === width?1:0,_hR_=_hQ_ || end_of_input(ib);
|
||
if(_hR_)bad_hex_float(0);
|
||
var
|
||
width$0=scan_sign(width,ib),
|
||
_hS_=0 === width$0?1:0,
|
||
_hT_=_hS_ || end_of_input(ib);
|
||
if(_hT_)bad_hex_float(0);
|
||
var c=peek_char(ib),switch$0=0;
|
||
if(78 <= c)
|
||
{var switcher=c - 79 | 0;
|
||
if(30 < switcher >>> 0)
|
||
{if(! (32 <= switcher))
|
||
{var
|
||
width$1=store_char(width$0,ib,c),
|
||
_hU_=0 === width$1?1:0,
|
||
_hV_=_hU_ || end_of_input(ib);
|
||
if(_hV_)bad_hex_float(0);
|
||
return check_case_insensitive_string
|
||
(width$1,ib,bad_hex_float,cst_an)}}
|
||
else
|
||
if(26 === switcher)switch$0 = 1}
|
||
else
|
||
{if(48 === c)
|
||
{var
|
||
width$3=store_char(width$0,ib,c),
|
||
_hY_=0 === width$3?1:0,
|
||
_hZ_=_hY_ || end_of_input(ib);
|
||
if(_hZ_)bad_hex_float(0);
|
||
var
|
||
width$4=
|
||
check_case_insensitive_string(width$3,ib,bad_hex_float,cst_x$2);
|
||
if(0 !== width$4 && ! end_of_input(ib))
|
||
{var match=peek_char(ib),_h0_=match - 46 | 0,switch$1=0;
|
||
if(34 < _h0_ >>> 0)
|
||
{if(66 === _h0_)switch$1 = 1}
|
||
else
|
||
if(32 < (_h0_ - 1 | 0) >>> 0)switch$1 = 1;
|
||
var width$5=switch$1?width$4:scan_hexadecimal_int(width$4,ib);
|
||
if(0 !== width$5 && ! end_of_input(ib))
|
||
{var c$0=peek_char(ib);
|
||
if(46 === c$0)
|
||
{var width$6=store_char(width$5,ib,c$0),switch$2=0;
|
||
if(0 !== width$6 && ! end_of_input(ib))
|
||
{var match$0=peek_char(ib),switch$3=0;
|
||
if(80 !== match$0 && 112 !== match$0)
|
||
{var
|
||
precision$0=min(width$6,precision),
|
||
width$10=
|
||
width$6
|
||
-
|
||
(precision$0 - scan_hexadecimal_int(precision$0,ib) | 0)
|
||
|
|
||
0;
|
||
switch$3 = 1}
|
||
if(! switch$3)var width$10=width$6;
|
||
var width$7=width$10;
|
||
switch$2 = 1}
|
||
if(! switch$2)var width$7=width$6;
|
||
var width$8=width$7}
|
||
else
|
||
var width$8=width$5;
|
||
if(0 !== width$8 && ! end_of_input(ib))
|
||
{var c$1=peek_char(ib);
|
||
if(80 !== c$1 && 112 !== c$1)return width$8;
|
||
var
|
||
width$9=store_char(width$8,ib,c$1),
|
||
_h1_=0 === width$9?1:0,
|
||
_h2_=_h1_ || end_of_input(ib);
|
||
if(_h2_)bad_hex_float(0);
|
||
return scan_optionally_signed_decimal(width$9,ib)}
|
||
return width$8}
|
||
return width$5}
|
||
return width$4}
|
||
if(73 === c)switch$0 = 1}
|
||
if(switch$0)
|
||
{var
|
||
width$2=store_char(width$0,ib,c),
|
||
_hW_=0 === width$2?1:0,
|
||
_hX_=_hW_ || end_of_input(ib);
|
||
if(_hX_)bad_hex_float(0);
|
||
return check_case_insensitive_string
|
||
(width$2,ib,bad_hex_float,cst_nfinity)}
|
||
return bad_hex_float(0)}
|
||
function scan_caml_float_rest(width,precision,ib)
|
||
{var _hM_=0 === width?1:0,_hN_=_hM_ || end_of_input(ib);
|
||
if(_hN_)bad_float(0);
|
||
var
|
||
width$0=scan_decimal_digit_star(width,ib),
|
||
_hO_=0 === width$0?1:0,
|
||
_hP_=_hO_ || end_of_input(ib);
|
||
if(_hP_)bad_float(0);
|
||
var c=peek_char(ib),switcher=c - 69 | 0;
|
||
if(32 < switcher >>> 0)
|
||
{if(-23 === switcher)
|
||
{var
|
||
width$1=store_char(width$0,ib,c),
|
||
precision$0=min(width$1,precision),
|
||
width_precision=scan_fractional_part(precision$0,ib),
|
||
frac_width=precision$0 - width_precision | 0,
|
||
width$2=width$1 - frac_width | 0;
|
||
return scan_exponent_part(width$2,ib)}}
|
||
else
|
||
{var switcher$0=switcher - 1 | 0;
|
||
if(30 < switcher$0 >>> 0)return scan_exponent_part(width$0,ib)}
|
||
return bad_float(0)}
|
||
function scan_caml_float(width,precision,ib)
|
||
{var _hy_=0 === width?1:0,_hz_=_hy_ || end_of_input(ib);
|
||
if(_hz_)bad_float(0);
|
||
var
|
||
width$0=scan_sign(width,ib),
|
||
_hA_=0 === width$0?1:0,
|
||
_hB_=_hA_ || end_of_input(ib);
|
||
if(_hB_)bad_float(0);
|
||
var c=peek_char(ib);
|
||
if(49 <= c)
|
||
{if(! (58 <= c))
|
||
{var
|
||
width$1=store_char(width$0,ib,c),
|
||
_hC_=0 === width$1?1:0,
|
||
_hD_=_hC_ || end_of_input(ib);
|
||
if(_hD_)bad_float(0);
|
||
return scan_caml_float_rest(width$1,precision,ib)}}
|
||
else
|
||
if(48 <= c)
|
||
{var
|
||
width$2=store_char(width$0,ib,c),
|
||
_hE_=0 === width$2?1:0,
|
||
_hF_=_hE_ || end_of_input(ib);
|
||
if(_hF_)bad_float(0);
|
||
var c$0=peek_char(ib);
|
||
if(88 !== c$0 && 120 !== c$0)
|
||
return scan_caml_float_rest(width$2,precision,ib);
|
||
var
|
||
width$3=store_char(width$2,ib,c$0),
|
||
_hG_=0 === width$3?1:0,
|
||
_hH_=_hG_ || end_of_input(ib);
|
||
if(_hH_)bad_float(0);
|
||
var
|
||
width$4=scan_hexadecimal_int(width$3,ib),
|
||
_hI_=0 === width$4?1:0,
|
||
_hJ_=_hI_ || end_of_input(ib);
|
||
if(_hJ_)bad_float(0);
|
||
var c$1=peek_char(ib),switcher=c$1 - 80 | 0,switch$0=0;
|
||
if(32 < switcher >>> 0)
|
||
if(-34 === switcher)
|
||
{var width$5=store_char(width$4,ib,c$1),switch$1=0;
|
||
if(0 !== width$5 && ! end_of_input(ib))
|
||
{var match=peek_char(ib),switch$2=0;
|
||
if(80 !== match && 112 !== match)
|
||
{var
|
||
precision$0=min(width$5,precision),
|
||
width$10=
|
||
width$5
|
||
-
|
||
(precision$0 - scan_hexadecimal_int(precision$0,ib) | 0)
|
||
|
|
||
0;
|
||
switch$2 = 1}
|
||
if(! switch$2)var width$10=width$5;
|
||
var width$6=width$10;
|
||
switch$1 = 1}
|
||
if(! switch$1)var width$6=width$5;
|
||
var width$7=width$6}
|
||
else
|
||
switch$0 = 1;
|
||
else
|
||
{var switcher$0=switcher - 1 | 0;
|
||
if(30 < switcher$0 >>> 0)var width$7=width$4;else switch$0 = 1}
|
||
var width$8=switch$0?bad_float(0):width$7;
|
||
if(0 !== width$8 && ! end_of_input(ib))
|
||
{var c$2=peek_char(ib);
|
||
if(80 !== c$2 && 112 !== c$2)return width$8;
|
||
var
|
||
width$9=store_char(width$8,ib,c$2),
|
||
_hK_=0 === width$9?1:0,
|
||
_hL_=_hK_ || end_of_input(ib);
|
||
if(_hL_)bad_hex_float(0);
|
||
return scan_optionally_signed_decimal(width$9,ib)}
|
||
return width$8}
|
||
return bad_float(0)}
|
||
function scan_string(stp,width,ib)
|
||
{var width$0=width;
|
||
for(;;)
|
||
{if(0 === width$0)return width$0;
|
||
var c=peek_char(ib);
|
||
if(ib[1])return width$0;
|
||
if(stp)
|
||
{var c$0=stp[1];
|
||
if(c === c$0)return skip_char(width$0,ib);
|
||
var width$1=store_char(width$0,ib,c),width$0=width$1;
|
||
continue}
|
||
var _hx_=c - 9 | 0,switch$0=0;
|
||
if(4 < _hx_ >>> 0)
|
||
{if(23 === _hx_)switch$0 = 1}
|
||
else
|
||
if(1 < (_hx_ - 2 | 0) >>> 0)switch$0 = 1;
|
||
if(switch$0)return width$0;
|
||
var width$2=store_char(width$0,ib,c),width$0=width$2;
|
||
continue}}
|
||
function scan_char(width,ib)
|
||
{return store_char(width,ib,checked_peek_char(ib))}
|
||
function hexadecimal_value_of_char(d)
|
||
{return 97 <= d?d - 87 | 0:65 <= d?d - 55 | 0:d - 48 | 0}
|
||
function check_next_char(message,width,ib)
|
||
{if(0 === width)return bad_token_length(message);
|
||
var c=peek_char(ib);
|
||
return ib[1]?bad_input(caml_call1(sprintf(_ca_),message)):c}
|
||
function check_next_char_for_char(_hv_,_hw_)
|
||
{return check_next_char(cst_a_Char,_hv_,_hw_)}
|
||
function check_next_char_for_string(_ht_,_hu_)
|
||
{return check_next_char(cst_a_String,_ht_,_hu_)}
|
||
function scan_backslash_char(width,ib)
|
||
{var c0=check_next_char_for_char(width,ib),switch$0=0;
|
||
if(40 <= c0)
|
||
{if(58 <= c0)
|
||
{var switcher$0=c0 - 92 | 0;
|
||
if(! (28 < switcher$0 >>> 0))
|
||
switch(switcher$0)
|
||
{case 28:
|
||
var
|
||
get_digit=
|
||
function(param)
|
||
{var c=next_char(ib),_hs_=c - 48 | 0,switch$0=0;
|
||
if(22 < _hs_ >>> 0)
|
||
{if(! (5 < (_hs_ - 49 | 0) >>> 0))switch$0 = 1}
|
||
else
|
||
if(6 < (_hs_ - 10 | 0) >>> 0)switch$0 = 1;
|
||
return switch$0?c:bad_input_escape(c)},
|
||
c1=get_digit(0),
|
||
c2=get_digit(0),
|
||
_ho_=hexadecimal_value_of_char(c2),
|
||
c$0=(16 * hexadecimal_value_of_char(c1) | 0) + _ho_ | 0,
|
||
switch$1=0;
|
||
if(0 <= c$0 && ! (255 < c$0))
|
||
{var _hq_=char_of_int(c$0);switch$1 = 1}
|
||
if(! switch$1)
|
||
var _hq_=bad_input(caml_call2(sprintf(_ch_),c1,c2));
|
||
return store_char(width - 2 | 0,ib,_hq_);
|
||
case 0:
|
||
case 6:
|
||
case 18:
|
||
case 22:
|
||
case 24:switch$0 = 1;break
|
||
}}
|
||
else
|
||
if(48 <= c0)
|
||
{var
|
||
get_digit$0=
|
||
function(param)
|
||
{var c=next_char(ib),switcher=c - 48 | 0;
|
||
return 9 < switcher >>> 0?bad_input_escape(c):c},
|
||
c1$0=get_digit$0(0),
|
||
c2$0=get_digit$0(0),
|
||
c=
|
||
((100 * (c0 - 48 | 0) | 0) + (10 * (c1$0 - 48 | 0) | 0) | 0)
|
||
+
|
||
(c2$0 - 48 | 0)
|
||
|
|
||
0,
|
||
switch$2=0;
|
||
if(0 <= c && ! (255 < c)){var _hr_=char_of_int(c);switch$2 = 1}
|
||
if(! switch$2)
|
||
var _hr_=bad_input(caml_call3(sprintf(_cg_),c0,c1$0,c2$0));
|
||
return store_char(width - 2 | 0,ib,_hr_)}}
|
||
else
|
||
if(34 === c0 || 39 <= c0)switch$0 = 1;
|
||
if(switch$0)
|
||
{var switch$3=0;
|
||
if(110 <= c0)
|
||
if(117 <= c0)
|
||
switch$3 = 1;
|
||
else
|
||
{var switcher=c0 - 110 | 0;
|
||
switch(switcher)
|
||
{case 0:var _hp_=10;break;
|
||
case 4:var _hp_=13;break;
|
||
case 6:var _hp_=9;break;
|
||
default:switch$3 = 1}}
|
||
else
|
||
if(98 === c0)var _hp_=8;else switch$3 = 1;
|
||
if(switch$3)var _hp_=c0;
|
||
return store_char(width,ib,_hp_)}
|
||
return bad_input_escape(c0)}
|
||
function scan_caml_char(width,ib)
|
||
{function find_stop(width)
|
||
{var c=check_next_char_for_char(width,ib);
|
||
return 39 === c?ignore_char(width,ib):character_mismatch(39,c)}
|
||
var c=checked_peek_char(ib);
|
||
if(39 === c)
|
||
{var
|
||
width$0=ignore_char(width,ib),
|
||
c$0=check_next_char_for_char(width$0,ib);
|
||
return 92 === c$0
|
||
?find_stop(scan_backslash_char(ignore_char(width$0,ib),ib))
|
||
:find_stop(store_char(width$0,ib,c$0))}
|
||
return character_mismatch(39,c)}
|
||
function scan_caml_string(width,ib)
|
||
{function find_stop$0(counter,width)
|
||
{var width$0=width;
|
||
for(;;)
|
||
{var c=check_next_char_for_string(width$0,ib);
|
||
if(34 === c)return ignore_char(width$0,ib);
|
||
if(92 === c)
|
||
{var
|
||
width$1=ignore_char(width$0,ib),
|
||
match=check_next_char_for_string(width$1,ib);
|
||
if(10 === match)
|
||
{var _hm_=ignore_char(width$1,ib);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return skip_spaces(counter$0,_hm_)}
|
||
return caml_trampoline_return(skip_spaces,[0,_hm_])}
|
||
if(13 === match)
|
||
{var
|
||
width$3=ignore_char(width$1,ib),
|
||
match$0=check_next_char_for_string(width$3,ib);
|
||
if(10 === match$0)
|
||
{var _hn_=ignore_char(width$3,ib);
|
||
if(counter < 50)
|
||
{var counter$1=counter + 1 | 0;
|
||
return skip_spaces(counter$1,_hn_)}
|
||
return caml_trampoline_return(skip_spaces,[0,_hn_])}
|
||
var width$5=store_char(width$3,ib,13),width$0=width$5;
|
||
continue}
|
||
var width$4=scan_backslash_char(width$1,ib),width$0=width$4;
|
||
continue}
|
||
var width$2=store_char(width$0,ib,c),width$0=width$2;
|
||
continue}}
|
||
function skip_spaces(counter,width)
|
||
{var width$0=width;
|
||
for(;;)
|
||
{var match=check_next_char_for_string(width$0,ib);
|
||
if(32 === match)
|
||
{var width$1=ignore_char(width$0,ib),width$0=width$1;continue}
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return find_stop$0(counter$0,width$0)}
|
||
return caml_trampoline_return(find_stop$0,[0,width$0])}}
|
||
function find_stop(width){return caml_trampoline(find_stop$0(0,width))}
|
||
var c=checked_peek_char(ib);
|
||
return 34 === c
|
||
?find_stop(ignore_char(width,ib))
|
||
:character_mismatch(34,c)}
|
||
function scan_chars_in_char_set(char_set,scan_indic,width,ib)
|
||
{function scan_chars(i,stp)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{var c=peek_char(ib),_hi_=0 < i$0?1:0;
|
||
if(_hi_)
|
||
{var _hj_=1 - ib[1];
|
||
if(_hj_)
|
||
var _hk_=is_in_char_set(char_set,c),_hl_=_hk_?c !== stp?1:0:_hk_;
|
||
else
|
||
var _hl_=_hj_}
|
||
else
|
||
var _hl_=_hi_;
|
||
if(_hl_)
|
||
{store_char(max_int,ib,c);var i$1=i$0 - 1 | 0,i$0=i$1;continue}
|
||
return _hl_}}
|
||
if(scan_indic)
|
||
{var c=scan_indic[1];
|
||
scan_chars(width,c);
|
||
var _hh_=1 - ib[1];
|
||
if(_hh_)
|
||
{var ci=peek_char(ib);
|
||
return c === ci?invalidate_current_char(ib):character_mismatch(c,ci)}
|
||
return _hh_}
|
||
return scan_chars(width,-1)}
|
||
function scanf_bad_input(ib,x)
|
||
{if(x[1] === Scan_failure)
|
||
var s=x[2];
|
||
else
|
||
{if(x[1] !== Failure)throw x;var s=x[2]}
|
||
var i=char_count(ib);
|
||
return bad_input(caml_call2(sprintf(_cj_),i,s))}
|
||
function get_counter(ib,counter)
|
||
{switch(counter)
|
||
{case 0:return ib[5];case 1:return char_count(ib);default:return ib[6]}}
|
||
function width_of_pad_opt(pad_opt)
|
||
{if(pad_opt){var width=pad_opt[1];return width}return max_int}
|
||
function stopper_of_formatting_lit(fmting)
|
||
{if(6 === fmting)return _ck_;
|
||
var
|
||
str=string_of_formatting_lit(fmting),
|
||
stp=caml_string_get(str,1),
|
||
sub_str=sub$0(str,2,caml_ml_string_length(str) - 2 | 0);
|
||
return [0,stp,sub_str]}
|
||
function take_format_readers$0(counter,k,fmt)
|
||
{var fmt$0=fmt;
|
||
for(;;)
|
||
if(typeof fmt$0 === "number")
|
||
return caml_call1(k,0);
|
||
else
|
||
switch(fmt$0[0])
|
||
{case 0:var fmt$1=fmt$0[1],fmt$0=fmt$1;continue;
|
||
case 1:var fmt$2=fmt$0[1],fmt$0=fmt$2;continue;
|
||
case 2:var fmt$3=fmt$0[2],fmt$0=fmt$3;continue;
|
||
case 3:var fmt$4=fmt$0[2],fmt$0=fmt$4;continue;
|
||
case 4:var fmt$5=fmt$0[4],fmt$0=fmt$5;continue;
|
||
case 5:var fmt$6=fmt$0[4],fmt$0=fmt$6;continue;
|
||
case 6:var fmt$7=fmt$0[4],fmt$0=fmt$7;continue;
|
||
case 7:var fmt$8=fmt$0[4],fmt$0=fmt$8;continue;
|
||
case 8:var fmt$9=fmt$0[4],fmt$0=fmt$9;continue;
|
||
case 9:var fmt$10=fmt$0[2],fmt$0=fmt$10;continue;
|
||
case 10:var fmt$11=fmt$0[1],fmt$0=fmt$11;continue;
|
||
case 11:var fmt$12=fmt$0[2],fmt$0=fmt$12;continue;
|
||
case 12:var fmt$13=fmt$0[2],fmt$0=fmt$13;continue;
|
||
case 13:var fmt$14=fmt$0[3],fmt$0=fmt$14;continue;
|
||
case 14:
|
||
var rest=fmt$0[3],fmtty=fmt$0[2],_hf_=erase_rel(symm(fmtty));
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return take_fmtty_format_readers$0(counter$0,k,_hf_,rest)}
|
||
return caml_trampoline_return
|
||
(take_fmtty_format_readers$0,[0,k,_hf_,rest]);
|
||
case 15:var fmt$15=fmt$0[1],fmt$0=fmt$15;continue;
|
||
case 16:var fmt$16=fmt$0[1],fmt$0=fmt$16;continue;
|
||
case 17:var fmt$17=fmt$0[2],fmt$0=fmt$17;continue;
|
||
case 18:
|
||
var _hg_=fmt$0[1];
|
||
if(0 === _hg_[0])
|
||
{var
|
||
rest$0=fmt$0[2],
|
||
match=_hg_[1],
|
||
fmt$18=match[1],
|
||
fmt$19=concat_fmt(fmt$18,rest$0),
|
||
fmt$0=fmt$19;
|
||
continue}
|
||
var
|
||
rest$1=fmt$0[2],
|
||
match$0=_hg_[1],
|
||
fmt$20=match$0[1],
|
||
fmt$21=concat_fmt(fmt$20,rest$1),
|
||
fmt$0=fmt$21;
|
||
continue;
|
||
case 19:
|
||
var fmt_rest=fmt$0[1];
|
||
return function(reader)
|
||
{function new_k(readers_rest)
|
||
{return caml_call1(k,[0,reader,readers_rest])}
|
||
return take_format_readers(new_k,fmt_rest)};
|
||
case 20:var fmt$22=fmt$0[3],fmt$0=fmt$22;continue;
|
||
case 21:var fmt$23=fmt$0[2],fmt$0=fmt$23;continue;
|
||
case 22:var fmt$24=fmt$0[1],fmt$0=fmt$24;continue;
|
||
case 23:
|
||
var rest$2=fmt$0[2],ign=fmt$0[1];
|
||
if(typeof ign === "number")
|
||
switch(ign)
|
||
{case 0:var fmt$0=rest$2;continue;
|
||
case 1:var fmt$0=rest$2;continue;
|
||
case 2:
|
||
return function(reader)
|
||
{function new_k(readers_rest)
|
||
{return caml_call1(k,[0,reader,readers_rest])}
|
||
return take_format_readers(new_k,rest$2)};
|
||
default:var fmt$0=rest$2;continue}
|
||
else
|
||
switch(ign[0])
|
||
{case 0:var fmt$0=rest$2;continue;
|
||
case 1:var fmt$0=rest$2;continue;
|
||
case 2:var fmt$0=rest$2;continue;
|
||
case 3:var fmt$0=rest$2;continue;
|
||
case 4:var fmt$0=rest$2;continue;
|
||
case 5:var fmt$0=rest$2;continue;
|
||
case 6:var fmt$0=rest$2;continue;
|
||
case 7:var fmt$0=rest$2;continue;
|
||
case 8:var fmt$0=rest$2;continue;
|
||
case 9:
|
||
var fmtty$0=ign[2];
|
||
if(counter < 50)
|
||
{var counter$1=counter + 1 | 0;
|
||
return take_fmtty_format_readers$0
|
||
(counter$1,k,fmtty$0,rest$2)}
|
||
return caml_trampoline_return
|
||
(take_fmtty_format_readers$0,[0,k,fmtty$0,rest$2]);
|
||
case 10:var fmt$0=rest$2;continue;
|
||
default:var fmt$0=rest$2;continue}
|
||
default:var fmt$25=fmt$0[3],fmt$0=fmt$25;continue}}
|
||
function take_fmtty_format_readers$0(counter,k,fmtty,fmt)
|
||
{var fmtty$0=fmtty;
|
||
for(;;)
|
||
if(typeof fmtty$0 === "number")
|
||
{if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return take_format_readers$0(counter$0,k,fmt)}
|
||
return caml_trampoline_return(take_format_readers$0,[0,k,fmt])}
|
||
else
|
||
switch(fmtty$0[0])
|
||
{case 0:var fmtty$1=fmtty$0[1],fmtty$0=fmtty$1;continue;
|
||
case 1:var fmtty$2=fmtty$0[1],fmtty$0=fmtty$2;continue;
|
||
case 2:var fmtty$3=fmtty$0[1],fmtty$0=fmtty$3;continue;
|
||
case 3:var fmtty$4=fmtty$0[1],fmtty$0=fmtty$4;continue;
|
||
case 4:var fmtty$5=fmtty$0[1],fmtty$0=fmtty$5;continue;
|
||
case 5:var fmtty$6=fmtty$0[1],fmtty$0=fmtty$6;continue;
|
||
case 6:var fmtty$7=fmtty$0[1],fmtty$0=fmtty$7;continue;
|
||
case 7:var fmtty$8=fmtty$0[1],fmtty$0=fmtty$8;continue;
|
||
case 8:var fmtty$9=fmtty$0[2],fmtty$0=fmtty$9;continue;
|
||
case 9:
|
||
var
|
||
rest=fmtty$0[3],
|
||
ty2=fmtty$0[2],
|
||
ty1=fmtty$0[1],
|
||
ty=trans(symm(ty1),ty2),
|
||
fmtty$10=concat_fmtty(ty,rest),
|
||
fmtty$0=fmtty$10;
|
||
continue;
|
||
case 10:var fmtty$11=fmtty$0[1],fmtty$0=fmtty$11;continue;
|
||
case 11:var fmtty$12=fmtty$0[1],fmtty$0=fmtty$12;continue;
|
||
case 12:var fmtty$13=fmtty$0[1],fmtty$0=fmtty$13;continue;
|
||
case 13:
|
||
var fmt_rest=fmtty$0[1];
|
||
return function(reader)
|
||
{function new_k(readers_rest)
|
||
{return caml_call1(k,[0,reader,readers_rest])}
|
||
return take_fmtty_format_readers(new_k,fmt_rest,fmt)};
|
||
default:
|
||
var fmt_rest$0=fmtty$0[1];
|
||
return function(reader)
|
||
{function new_k(readers_rest)
|
||
{return caml_call1(k,[0,reader,readers_rest])}
|
||
return take_fmtty_format_readers(new_k,fmt_rest$0,fmt)}}}
|
||
function take_format_readers(k,fmt)
|
||
{return caml_trampoline(take_format_readers$0(0,k,fmt))}
|
||
function take_fmtty_format_readers(k,fmtty,fmt)
|
||
{return caml_trampoline(take_fmtty_format_readers$0(0,k,fmtty,fmt))}
|
||
function pad_prec_scanf(ib,fmt,readers,pad,prec,scan,token)
|
||
{if(typeof pad === "number")
|
||
{if(typeof prec === "number")
|
||
{if(prec)return invalid_arg(cst_scanf_bad_conversion);
|
||
caml_call3(scan,max_int,max_int,ib);
|
||
var x=caml_call1(token,ib);
|
||
return [0,x,make_scanf(ib,fmt,readers)]}
|
||
var p=prec[1];
|
||
caml_call3(scan,max_int,p,ib);
|
||
var x$0=caml_call1(token,ib);
|
||
return [0,x$0,make_scanf(ib,fmt,readers)]}
|
||
else
|
||
{if(0 === pad[0])
|
||
{if(pad[1])
|
||
{var _he_=pad[2];
|
||
if(typeof prec === "number")
|
||
{if(prec)return invalid_arg(cst_scanf_bad_conversion$0);
|
||
caml_call3(scan,_he_,max_int,ib);
|
||
var x$1=caml_call1(token,ib);
|
||
return [0,x$1,make_scanf(ib,fmt,readers)]}
|
||
var p$0=prec[1];
|
||
caml_call3(scan,_he_,p$0,ib);
|
||
var x$2=caml_call1(token,ib);
|
||
return [0,x$2,make_scanf(ib,fmt,readers)]}
|
||
return invalid_arg(cst_scanf_bad_conversion$1)}
|
||
return invalid_arg(cst_scanf_bad_conversion$2)}}
|
||
function make_scanf(ib,fmt,readers)
|
||
{var fmt$0=fmt;
|
||
for(;;)
|
||
if(typeof fmt$0 === "number")
|
||
return 0;
|
||
else
|
||
switch(fmt$0[0])
|
||
{case 0:
|
||
var rest=fmt$0[1];
|
||
scan_char(0,ib);
|
||
var c=token_char(ib);
|
||
return [0,c,make_scanf(ib,rest,readers)];
|
||
case 1:
|
||
var rest$0=fmt$0[1];
|
||
scan_caml_char(0,ib);
|
||
var c$0=token_char(ib);
|
||
return [0,c$0,make_scanf(ib,rest$0,readers)];
|
||
case 2:
|
||
var _g3_=fmt$0[1],_g4_=fmt$0[2];
|
||
if(typeof _g4_ !== "number")
|
||
switch(_g4_[0])
|
||
{case 17:
|
||
var
|
||
rest$2=_g4_[2],
|
||
fmting_lit=_g4_[1],
|
||
match=stopper_of_formatting_lit(fmting_lit),
|
||
str=match[2],
|
||
stp=match[1],
|
||
scan$0=
|
||
function(width,param,ib)
|
||
{return scan_string([0,stp],width,ib)},
|
||
str_rest=[11,str,rest$2];
|
||
return pad_prec_scanf
|
||
(ib,str_rest,readers,_g3_,0,scan$0,token_string);
|
||
case 18:
|
||
var _g5_=_g4_[1];
|
||
if(0 === _g5_[0])
|
||
{var
|
||
rest$3=_g4_[2],
|
||
match$0=_g5_[1],
|
||
fmt$1=match$0[1],
|
||
scan$1=
|
||
function(width,param,ib){return scan_string(_cl_,width,ib)};
|
||
return pad_prec_scanf
|
||
(ib,
|
||
concat_fmt(fmt$1,rest$3),
|
||
readers,
|
||
_g3_,
|
||
0,
|
||
scan$1,
|
||
token_string)}
|
||
var
|
||
rest$4=_g4_[2],
|
||
match$1=_g5_[1],
|
||
fmt$2=match$1[1],
|
||
scan$2=
|
||
function(width,param,ib){return scan_string(_cm_,width,ib)};
|
||
return pad_prec_scanf
|
||
(ib,
|
||
concat_fmt(fmt$2,rest$4),
|
||
readers,
|
||
_g3_,
|
||
0,
|
||
scan$2,
|
||
token_string)
|
||
}
|
||
var
|
||
rest$1=fmt$0[2],
|
||
scan=function(width,param,ib){return scan_string(0,width,ib)};
|
||
return pad_prec_scanf(ib,rest$1,readers,_g3_,0,scan,token_string);
|
||
case 3:
|
||
var
|
||
rest$5=fmt$0[2],
|
||
pad=fmt$0[1],
|
||
scan$3=function(width,param,ib){return scan_caml_string(width,ib)};
|
||
return pad_prec_scanf(ib,rest$5,readers,pad,0,scan$3,token_string);
|
||
case 4:
|
||
var
|
||
rest$6=fmt$0[4],
|
||
prec=fmt$0[3],
|
||
pad$0=fmt$0[2],
|
||
iconv=fmt$0[1],
|
||
conv=integer_conversion_of_char(char_of_iconv(iconv)),
|
||
scan$4=
|
||
function(width,param,ib)
|
||
{return scan_int_conversion(conv,width,ib)};
|
||
return pad_prec_scanf
|
||
(ib,
|
||
rest$6,
|
||
readers,
|
||
pad$0,
|
||
prec,
|
||
scan$4,
|
||
function(ib)
|
||
{return caml_int_of_string(token_int_literal(conv,ib))});
|
||
case 5:
|
||
var
|
||
rest$7=fmt$0[4],
|
||
prec$0=fmt$0[3],
|
||
pad$1=fmt$0[2],
|
||
iconv$0=fmt$0[1],
|
||
conv$0=integer_conversion_of_char(char_of_iconv(iconv$0)),
|
||
scan$5=
|
||
function(width,param,ib)
|
||
{return scan_int_conversion(conv$0,width,ib)};
|
||
return pad_prec_scanf
|
||
(ib,
|
||
rest$7,
|
||
readers,
|
||
pad$1,
|
||
prec$0,
|
||
scan$5,
|
||
function(ib)
|
||
{return caml_int_of_string(token_int_literal(conv$0,ib))});
|
||
case 6:
|
||
var
|
||
rest$8=fmt$0[4],
|
||
prec$1=fmt$0[3],
|
||
pad$2=fmt$0[2],
|
||
iconv$1=fmt$0[1],
|
||
conv$1=integer_conversion_of_char(char_of_iconv(iconv$1)),
|
||
scan$6=
|
||
function(width,param,ib)
|
||
{return scan_int_conversion(conv$1,width,ib)};
|
||
return pad_prec_scanf
|
||
(ib,
|
||
rest$8,
|
||
readers,
|
||
pad$2,
|
||
prec$1,
|
||
scan$6,
|
||
function(ib)
|
||
{return caml_int_of_string(token_int_literal(conv$1,ib))});
|
||
case 7:
|
||
var
|
||
rest$9=fmt$0[4],
|
||
prec$2=fmt$0[3],
|
||
pad$3=fmt$0[2],
|
||
iconv$2=fmt$0[1],
|
||
conv$2=integer_conversion_of_char(char_of_iconv(iconv$2)),
|
||
scan$7=
|
||
function(width,param,ib)
|
||
{return scan_int_conversion(conv$2,width,ib)};
|
||
return pad_prec_scanf
|
||
(ib,
|
||
rest$9,
|
||
readers,
|
||
pad$3,
|
||
prec$2,
|
||
scan$7,
|
||
function(ib)
|
||
{return caml_int64_of_string(token_int_literal(conv$2,ib))});
|
||
case 8:
|
||
switch(fmt$0[1][2])
|
||
{case 5:
|
||
case 8:
|
||
var rest$11=fmt$0[4],prec$4=fmt$0[3],pad$5=fmt$0[2];
|
||
return pad_prec_scanf
|
||
(ib,
|
||
rest$11,
|
||
readers,
|
||
pad$5,
|
||
prec$4,
|
||
scan_caml_float,
|
||
token_float);
|
||
case 6:
|
||
case 7:
|
||
var rest$12=fmt$0[4],prec$5=fmt$0[3],pad$6=fmt$0[2];
|
||
return pad_prec_scanf
|
||
(ib,rest$12,readers,pad$6,prec$5,scan_hex_float,token_float);
|
||
default:
|
||
var rest$10=fmt$0[4],prec$3=fmt$0[3],pad$4=fmt$0[2];
|
||
return pad_prec_scanf
|
||
(ib,rest$10,readers,pad$4,prec$3,scan_float,token_float)}
|
||
case 9:
|
||
var
|
||
rest$13=fmt$0[2],
|
||
pad$7=fmt$0[1],
|
||
scan$8=
|
||
function(param,_hd_,ib)
|
||
{var
|
||
c=checked_peek_char(ib),
|
||
m=
|
||
102 === c
|
||
?5
|
||
:116 === c?4:bad_input(caml_call1(sprintf(_ci_),c));
|
||
return scan_string(0,m,ib)};
|
||
return pad_prec_scanf(ib,rest$13,readers,pad$7,0,scan$8,token_bool);
|
||
case 10:
|
||
var rest$14=fmt$0[1];
|
||
if(end_of_input(ib)){var fmt$0=rest$14;continue}
|
||
return bad_input(cst_end_of_input_not_found);
|
||
case 11:
|
||
var rest$15=fmt$0[2],str$0=fmt$0[1];
|
||
iter$4(function(_hc_){return check_char(ib,_hc_)},str$0);
|
||
var fmt$0=rest$15;
|
||
continue;
|
||
case 12:
|
||
var rest$16=fmt$0[2],chr=fmt$0[1];
|
||
check_char(ib,chr);
|
||
var fmt$0=rest$16;
|
||
continue;
|
||
case 13:
|
||
var rest$17=fmt$0[3],fmtty=fmt$0[2],pad_opt=fmt$0[1];
|
||
scan_caml_string(width_of_pad_opt(pad_opt),ib);
|
||
var s=token_string(ib);
|
||
try
|
||
{var _g6_=format_of_string_fmtty(s,fmtty),fmt$3=_g6_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] !== Failure)throw exn;
|
||
var msg=exn[2],fmt$3=bad_input(msg)}
|
||
return [0,fmt$3,make_scanf(ib,rest$17,readers)];
|
||
case 14:
|
||
var rest$18=fmt$0[3],fmtty$0=fmt$0[2],pad_opt$0=fmt$0[1];
|
||
scan_caml_string(width_of_pad_opt(pad_opt$0),ib);
|
||
var s$0=token_string(ib);
|
||
try
|
||
{var
|
||
match$2=fmt_ebb_of_string(0,s$0),
|
||
fmt$6=match$2[1],
|
||
match$3=fmt_ebb_of_string(0,s$0),
|
||
fmt$7=match$3[1],
|
||
fmt$8=type_format(fmt$7,erase_rel(symm(fmtty$0))),
|
||
_g8_=type_format(fmt$6,erase_rel(fmtty$0)),
|
||
fmt$5=fmt$8,
|
||
fmt$4=_g8_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] !== Failure)throw exn;
|
||
var
|
||
msg$0=exn[2],
|
||
_g7_=bad_input(msg$0),
|
||
fmt$5=_g7_[2],
|
||
fmt$4=_g7_[1]}
|
||
return [0,
|
||
[0,fmt$4,s$0],
|
||
make_scanf(ib,concat_fmt(fmt$5,rest$18),readers)];
|
||
case 15:return invalid_arg(cst_scanf_bad_conversion_a);
|
||
case 16:return invalid_arg(cst_scanf_bad_conversion_t);
|
||
case 17:
|
||
var
|
||
rest$19=fmt$0[2],
|
||
formatting_lit=fmt$0[1],
|
||
_g9_=string_of_formatting_lit(formatting_lit);
|
||
iter$4(function(_hb_){return check_char(ib,_hb_)},_g9_);
|
||
var fmt$0=rest$19;
|
||
continue;
|
||
case 18:
|
||
var _g__=fmt$0[1];
|
||
if(0 === _g__[0])
|
||
{var rest$20=fmt$0[2],match$4=_g__[1],fmt$9=match$4[1];
|
||
check_char(ib,64);
|
||
check_char(ib,123);
|
||
var fmt$10=concat_fmt(fmt$9,rest$20),fmt$0=fmt$10;
|
||
continue}
|
||
var rest$21=fmt$0[2],match$5=_g__[1],fmt$11=match$5[1];
|
||
check_char(ib,64);
|
||
check_char(ib,91);
|
||
var fmt$12=concat_fmt(fmt$11,rest$21),fmt$0=fmt$12;
|
||
continue;
|
||
case 19:
|
||
var fmt_rest=fmt$0[1];
|
||
if(readers)
|
||
{var
|
||
readers_rest=readers[2],
|
||
reader=readers[1],
|
||
x=caml_call1(reader,ib);
|
||
return [0,x,make_scanf(ib,fmt_rest,readers_rest)]}
|
||
return invalid_arg(cst_scanf_missing_reader);
|
||
case 20:
|
||
var _g$_=fmt$0[1],_ha_=fmt$0[3];
|
||
if(typeof _ha_ !== "number" && 17 === _ha_[0])
|
||
{var
|
||
rest$23=_ha_[2],
|
||
fmting_lit$0=_ha_[1],
|
||
char_set$0=fmt$0[2],
|
||
match$6=stopper_of_formatting_lit(fmting_lit$0),
|
||
str$1=match$6[2],
|
||
stp$0=match$6[1],
|
||
width$0=width_of_pad_opt(_g$_);
|
||
scan_chars_in_char_set(char_set$0,[0,stp$0],width$0,ib);
|
||
var s$2=token_string(ib),str_rest$0=[11,str$1,rest$23];
|
||
return [0,s$2,make_scanf(ib,str_rest$0,readers)]}
|
||
var
|
||
rest$22=fmt$0[3],
|
||
char_set=fmt$0[2],
|
||
width=width_of_pad_opt(_g$_);
|
||
scan_chars_in_char_set(char_set,0,width,ib);
|
||
var s$1=token_string(ib);
|
||
return [0,s$1,make_scanf(ib,rest$22,readers)];
|
||
case 21:
|
||
var
|
||
rest$24=fmt$0[2],
|
||
counter=fmt$0[1],
|
||
count=get_counter(ib,counter);
|
||
return [0,count,make_scanf(ib,rest$24,readers)];
|
||
case 22:
|
||
var rest$25=fmt$0[1],c$1=checked_peek_char(ib);
|
||
return [0,c$1,make_scanf(ib,rest$25,readers)];
|
||
case 23:
|
||
var
|
||
rest$26=fmt$0[2],
|
||
ign=fmt$0[1],
|
||
match$7=param_format_of_ignored_format(ign,rest$26),
|
||
fmt$13=match$7[1],
|
||
match$8=make_scanf(ib,fmt$13,readers);
|
||
if(match$8){var arg_rest=match$8[2];return arg_rest}
|
||
throw [0,Assert_failure,_cn_];
|
||
default:return invalid_arg(cst_scanf_bad_conversion_custo)}}
|
||
function kscanf(ib,ef,param)
|
||
{var str=param[2],fmt=param[1];
|
||
function apply(f,args)
|
||
{var f$0=f,args$0=args;
|
||
for(;;)
|
||
{if(args$0)
|
||
{var
|
||
r=args$0[2],
|
||
x=args$0[1],
|
||
f$1=caml_call1(f$0,x),
|
||
f$0=f$1,
|
||
args$0=r;
|
||
continue}
|
||
return f$0}}
|
||
function k(readers,f)
|
||
{reset_token(ib);
|
||
try
|
||
{var _g2_=[0,make_scanf(ib,fmt,readers)],_g1_=_g2_}
|
||
catch(exc)
|
||
{exc = caml_wrap_exception(exc);
|
||
var switch$0=0;
|
||
if
|
||
(exc[1]
|
||
!==
|
||
Scan_failure
|
||
&&
|
||
exc[1]
|
||
!==
|
||
Failure
|
||
&&
|
||
exc
|
||
!==
|
||
End_of_file)
|
||
{if(exc[1] !== Invalid_argument)throw exc;
|
||
var
|
||
msg=exc[2],
|
||
_g0_=
|
||
invalid_arg
|
||
(symbol
|
||
(msg,symbol(cst_in_format,symbol(escaped$1(str),cst$87))));
|
||
switch$0 = 1}
|
||
if(! switch$0)var _g0_=[1,exc];
|
||
var _g1_=_g0_}
|
||
if(0 === _g1_[0]){var args=_g1_[1];return apply(f,args)}
|
||
var exc=_g1_[1];
|
||
return caml_call2(ef,ib,exc)}
|
||
return take_format_readers(k,fmt)}
|
||
function bscanf(ib,fmt){return kscanf(ib,scanf_bad_input,fmt)}
|
||
function ksscanf(s,ef,fmt){return kscanf(from_string$1(s),ef,fmt)}
|
||
function sscanf(s,fmt)
|
||
{return kscanf(from_string$1(s),scanf_bad_input,fmt)}
|
||
function scanf(fmt){return kscanf(stdib,scanf_bad_input,fmt)}
|
||
function bscanf_format(ib,format,f)
|
||
{scan_caml_string(max_int,ib);
|
||
var str=token_string(ib);
|
||
try
|
||
{var _gZ_=format_of_string_format(str,format),fmt=_gZ_}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] !== Failure)throw exn;
|
||
var msg=exn[2],fmt=bad_input(msg)}
|
||
return caml_call1(f,fmt)}
|
||
function sscanf_format(s,format,f)
|
||
{return bscanf_format(from_string$1(s),format,f)}
|
||
function format_from_string(s,fmt)
|
||
{function _gY_(x){return x}
|
||
return sscanf_format
|
||
(symbol(cst$89,symbol(escaped$1(s),cst$88)),fmt,_gY_)}
|
||
function unescaped(s)
|
||
{function _gX_(x){return x}
|
||
return caml_call1(sscanf(symbol(cst$91,symbol(s,cst$90)),_co_),_gX_)}
|
||
function kfscanf(ic,ef,fmt){return kscanf(memo_from_channel(ic),ef,fmt)}
|
||
function fscanf(ic,fmt)
|
||
{return kscanf(memo_from_channel(ic),scanf_bad_input,fmt)}
|
||
var
|
||
Stdlib_scanf=
|
||
[0,
|
||
[0,
|
||
stdib,
|
||
from_file,
|
||
from_file_bin,
|
||
close_in$0,
|
||
from_file,
|
||
from_file_bin,
|
||
from_string$1,
|
||
from_function$0,
|
||
from_channel$0,
|
||
end_of_input,
|
||
beginning_of_input,
|
||
name_of_input,
|
||
stdib],
|
||
Scan_failure,
|
||
bscanf,
|
||
sscanf,
|
||
scanf,
|
||
kscanf,
|
||
ksscanf,
|
||
bscanf_format,
|
||
sscanf_format,
|
||
format_from_string,
|
||
unescaped,
|
||
fscanf,
|
||
kfscanf];
|
||
caml_register_global(789,Stdlib_scanf,"Stdlib__scanf");
|
||
var register=caml_register_named_value;
|
||
function register_exception(name,exn)
|
||
{var slot=caml_obj_tag(exn) === 248?exn:exn[1];
|
||
return caml_register_named_value(name,slot)}
|
||
var Stdlib_callback=[0,register,register_exception];
|
||
caml_register_global(790,Stdlib_callback,"Stdlib__callback");
|
||
function copy$7(o){var o$0=o.slice();return caml_set_oo_id(o$0)}
|
||
var params$0=[0,1,1,1,3,16],initial_object_size=2,dummy_item=0;
|
||
function public_method_label(s)
|
||
{var accu=[0,0],_gU_=caml_ml_string_length(s) - 1 | 0,_gT_=0;
|
||
if(! (_gU_ < 0))
|
||
{var i=_gT_;
|
||
for(;;)
|
||
{var _gV_=caml_string_get(s,i);
|
||
accu[1] = (223 * accu[1] | 0) + _gV_ | 0;
|
||
var _gW_=i + 1 | 0;
|
||
if(_gU_ !== i){var i=_gW_;continue}
|
||
break}}
|
||
accu[1] = accu[1] & 2147483647;
|
||
var tag=1073741823 < accu[1]?accu[1] + 2147483648 | 0:accu[1];
|
||
return tag}
|
||
var
|
||
compare$11=caml_string_compare,
|
||
Vars=caml_call1(Stdlib_map[1],[0,compare$11]),
|
||
compare$12=caml_string_compare,
|
||
Meths=caml_call1(Stdlib_map[1],[0,compare$12]),
|
||
compare$13=caml_int_compare,
|
||
Labs=caml_call1(Stdlib_map[1],[0,compare$13]),
|
||
dummy_table=[0,0,[0,dummy_item],Meths[1],Labs[1],0,0,Vars[1],0],
|
||
table_count=[0,0],
|
||
dummy_met=caml_obj_block(0,0);
|
||
function fit_size(n){return 2 < n?fit_size((n + 1 | 0) / 2 | 0) * 2 | 0:n}
|
||
function new_table(pub_labels)
|
||
{table_count[1]++;
|
||
var
|
||
len=pub_labels.length - 1,
|
||
methods=caml_make_vect((len * 2 | 0) + 2 | 0,dummy_met);
|
||
caml_check_bound(methods,0)[1] = len;
|
||
var _gN_=((fit_size(len) * 32 | 0) / 8 | 0) - 1 | 0;
|
||
caml_check_bound(methods,1)[2] = _gN_;
|
||
var _gP_=len - 1 | 0,_gO_=0;
|
||
if(! (_gP_ < 0))
|
||
{var i=_gO_;
|
||
for(;;)
|
||
{var
|
||
_gR_=(i * 2 | 0) + 3 | 0,
|
||
_gQ_=caml_check_bound(pub_labels,i)[1 + i];
|
||
caml_check_bound(methods,_gR_)[1 + _gR_] = _gQ_;
|
||
var _gS_=i + 1 | 0;
|
||
if(_gP_ !== i){var i=_gS_;continue}
|
||
break}}
|
||
return [0,initial_object_size,methods,Meths[1],Labs[1],0,0,Vars[1],0]}
|
||
function resize$1(array,new_size)
|
||
{var old_size=array[2].length - 1,_gL_=old_size < new_size?1:0;
|
||
if(_gL_)
|
||
{var new_buck=caml_make_vect(new_size,dummy_met);
|
||
blit$1(array[2],0,new_buck,0,old_size);
|
||
array[2] = new_buck;
|
||
var _gM_=0}
|
||
else
|
||
var _gM_=_gL_;
|
||
return _gM_}
|
||
var method_count=[0,0],inst_var_count=[0,0];
|
||
function new_method(table)
|
||
{var index=table[2].length - 1;
|
||
resize$1(table,index + 1 | 0);
|
||
return index}
|
||
function get_method_label(table,name)
|
||
{try
|
||
{var _gJ_=caml_call2(Meths[27],name,table[3]);return _gJ_}
|
||
catch(_gK_)
|
||
{_gK_ = caml_wrap_exception(_gK_);
|
||
if(_gK_ === Not_found)
|
||
{var label=new_method(table);
|
||
table[3] = caml_call3(Meths[4],name,label,table[3]);
|
||
table[4] = caml_call3(Labs[4],label,1,table[4]);
|
||
return label}
|
||
throw _gK_}}
|
||
function get_method_labels(table,names)
|
||
{return map$5(function(_gI_){return get_method_label(table,_gI_)},names)}
|
||
function set_method(table,label,element)
|
||
{method_count[1]++;
|
||
return caml_call2(Labs[27],label,table[4])
|
||
?(resize$1(table,label + 1 | 0),
|
||
caml_check_bound(table[2],label)[1 + label]
|
||
=
|
||
element,
|
||
0)
|
||
:(table[6] = [0,[0,label,element],table[6]],0)}
|
||
function get_method(table,label)
|
||
{try
|
||
{var _gG_=assoc(label,table[6]);return _gG_}
|
||
catch(_gH_)
|
||
{_gH_ = caml_wrap_exception(_gH_);
|
||
if(_gH_ === Not_found)
|
||
return caml_check_bound(table[2],label)[1 + label];
|
||
throw _gH_}}
|
||
function to_list$3(arr){return 0 === arr?0:to_list$1(arr)}
|
||
function narrow(table,vars,virt_meths,concr_meths)
|
||
{var
|
||
vars$0=to_list$3(vars),
|
||
virt_meths$0=to_list$3(virt_meths),
|
||
concr_meths$0=to_list$3(concr_meths),
|
||
virt_meth_labs=
|
||
map$2
|
||
(function(_gF_){return get_method_label(table,_gF_)},virt_meths$0),
|
||
concr_meth_labs=
|
||
map$2
|
||
(function(_gE_){return get_method_label(table,_gE_)},concr_meths$0);
|
||
table[5]
|
||
=
|
||
[0,
|
||
[0,table[3],table[4],table[6],table[7],virt_meth_labs,vars$0],
|
||
table[5]];
|
||
var _gv_=Vars[1],_gw_=table[7];
|
||
function _gx_(lab,info,tvars)
|
||
{return mem(lab,vars$0)?caml_call3(Vars[4],lab,info,tvars):tvars}
|
||
table[7] = caml_call3(Vars[13],_gx_,_gw_,_gv_);
|
||
var by_name=[0,Meths[1]],by_label=[0,Labs[1]];
|
||
iter2
|
||
(function(met,label)
|
||
{by_name[1] = caml_call3(Meths[4],met,label,by_name[1]);
|
||
var _gA_=by_label[1];
|
||
try
|
||
{var _gC_=caml_call2(Labs[27],label,table[4]),_gB_=_gC_}
|
||
catch(_gD_)
|
||
{_gD_ = caml_wrap_exception(_gD_);
|
||
if(_gD_ !== Not_found)throw _gD_;
|
||
var _gB_=1}
|
||
by_label[1] = caml_call3(Labs[4],label,_gB_,_gA_);
|
||
return 0},
|
||
concr_meths$0,
|
||
concr_meth_labs);
|
||
iter2
|
||
(function(met,label)
|
||
{by_name[1] = caml_call3(Meths[4],met,label,by_name[1]);
|
||
by_label[1] = caml_call3(Labs[4],label,0,by_label[1]);
|
||
return 0},
|
||
virt_meths$0,
|
||
virt_meth_labs);
|
||
table[3] = by_name[1];
|
||
table[4] = by_label[1];
|
||
var _gy_=0,_gz_=table[6];
|
||
table[6]
|
||
=
|
||
fold_right
|
||
(function(met,hm)
|
||
{var lab=met[1];return mem(lab,virt_meth_labs)?hm:[0,met,hm]},
|
||
_gz_,
|
||
_gy_);
|
||
return 0}
|
||
function widen(table)
|
||
{var
|
||
match=hd(table[5]),
|
||
vars=match[6],
|
||
virt_meths=match[5],
|
||
saved_vars=match[4],
|
||
saved_hidden_meths=match[3],
|
||
by_label=match[2],
|
||
by_name=match[1];
|
||
table[5] = tl(table[5]);
|
||
table[7]
|
||
=
|
||
fold_left$0
|
||
(function(s,v)
|
||
{var _gu_=caml_call2(Vars[27],v,table[7]);
|
||
return caml_call3(Vars[4],v,_gu_,s)},
|
||
saved_vars,
|
||
vars);
|
||
table[3] = by_name;
|
||
table[4] = by_label;
|
||
var _gt_=table[6];
|
||
table[6]
|
||
=
|
||
fold_right
|
||
(function(met,hm)
|
||
{var lab=met[1];return mem(lab,virt_meths)?hm:[0,met,hm]},
|
||
_gt_,
|
||
saved_hidden_meths);
|
||
return 0}
|
||
function new_slot(table)
|
||
{var index=table[1];table[1] = index + 1 | 0;return index}
|
||
function new_variable(table,name)
|
||
{try
|
||
{var _gr_=caml_call2(Vars[27],name,table[7]);return _gr_}
|
||
catch(_gs_)
|
||
{_gs_ = caml_wrap_exception(_gs_);
|
||
if(_gs_ === Not_found)
|
||
{var index=new_slot(table);
|
||
if(caml_string_notequal(name,cst$92))
|
||
table[7] = caml_call3(Vars[4],name,index,table[7]);
|
||
return index}
|
||
throw _gs_}}
|
||
function to_array(arr){return caml_equal(arr,0)?[0]:arr}
|
||
function new_methods_variables(table,meths,vals)
|
||
{var
|
||
meths$0=to_array(meths),
|
||
nmeths=meths$0.length - 1,
|
||
nvals=vals.length - 1,
|
||
res=caml_make_vect(nmeths + nvals | 0,0),
|
||
_gj_=nmeths - 1 | 0,
|
||
_gi_=0;
|
||
if(! (_gj_ < 0))
|
||
{var i$0=_gi_;
|
||
for(;;)
|
||
{var
|
||
_gp_=
|
||
get_method_label(table,caml_check_bound(meths$0,i$0)[1 + i$0]);
|
||
caml_check_bound(res,i$0)[1 + i$0] = _gp_;
|
||
var _gq_=i$0 + 1 | 0;
|
||
if(_gj_ !== i$0){var i$0=_gq_;continue}
|
||
break}}
|
||
var _gl_=nvals - 1 | 0,_gk_=0;
|
||
if(! (_gl_ < 0))
|
||
{var i=_gk_;
|
||
for(;;)
|
||
{var
|
||
_gn_=i + nmeths | 0,
|
||
_gm_=new_variable(table,caml_check_bound(vals,i)[1 + i]);
|
||
caml_check_bound(res,_gn_)[1 + _gn_] = _gm_;
|
||
var _go_=i + 1 | 0;
|
||
if(_gl_ !== i){var i=_go_;continue}
|
||
break}}
|
||
return res}
|
||
function get_variable(table,name)
|
||
{try
|
||
{var _gg_=caml_call2(Vars[27],name,table[7]);return _gg_}
|
||
catch(_gh_)
|
||
{_gh_ = caml_wrap_exception(_gh_);
|
||
if(_gh_ === Not_found)throw [0,Assert_failure,_cp_];
|
||
throw _gh_}}
|
||
function get_variables(table,names)
|
||
{return map$5(function(_gf_){return get_variable(table,_gf_)},names)}
|
||
function add_initializer(table,f){table[8] = [0,f,table[8]];return 0}
|
||
function create_table(public_methods)
|
||
{if(0 === public_methods)return new_table([0]);
|
||
var
|
||
tags=map$5(public_method_label,public_methods),
|
||
table=new_table(tags);
|
||
iteri$2
|
||
(function(i,met)
|
||
{var lab=(i * 2 | 0) + 2 | 0;
|
||
table[3] = caml_call3(Meths[4],met,lab,table[3]);
|
||
table[4] = caml_call3(Labs[4],lab,1,table[4]);
|
||
return 0},
|
||
public_methods);
|
||
return table}
|
||
function init_class(table)
|
||
{inst_var_count[1] = (inst_var_count[1] + table[1] | 0) - 1 | 0;
|
||
table[8] = rev(table[8]);
|
||
return resize$1
|
||
(table,
|
||
3 + ((caml_check_bound(table[2],1)[2] * 16 | 0) / 32 | 0) | 0)}
|
||
function inherits(cla,vals,virt_meths,concr_meths,param,top)
|
||
{var env=param[4],super$0=param[2];
|
||
narrow(cla,vals,virt_meths,concr_meths);
|
||
var init=top?caml_call2(super$0,cla,env):caml_call1(super$0,cla);
|
||
widen(cla);
|
||
var
|
||
_ga_=0,
|
||
_gb_=to_array(concr_meths),
|
||
_gc_=
|
||
[0,
|
||
map$5
|
||
(function(nm){return get_method(cla,get_method_label(cla,nm))},_gb_),
|
||
_ga_],
|
||
_gd_=to_array(vals);
|
||
return caml_array_concat
|
||
([0,
|
||
[0,init],
|
||
[0,
|
||
map$5(function(_ge_){return get_variable(cla,_ge_)},_gd_),
|
||
_gc_]])}
|
||
function make_class(pub_meths,class_init)
|
||
{var table=create_table(pub_meths),env_init=caml_call1(class_init,table);
|
||
init_class(table);
|
||
return [0,caml_call1(env_init,0),class_init,env_init,0]}
|
||
function make_class_store(pub_meths,class_init,init_table)
|
||
{var table=create_table(pub_meths),env_init=caml_call1(class_init,table);
|
||
init_class(table);
|
||
init_table[2] = class_init;
|
||
init_table[1] = env_init;
|
||
return 0}
|
||
function dummy_class(loc)
|
||
{function undef(param){throw [0,Undefined_recursive_module,loc]}
|
||
return [0,undef,undef,undef,0]}
|
||
function create_object(table)
|
||
{var obj=caml_obj_block(248,table[1]);
|
||
obj[1] = table[2];
|
||
return caml_set_oo_id(obj)}
|
||
function create_object_opt(obj_0,table)
|
||
{if(obj_0)return obj_0;
|
||
var obj=caml_obj_block(248,table[1]);
|
||
obj[1] = table[2];
|
||
return caml_set_oo_id(obj)}
|
||
function iter_f(obj,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var l=param$0[2],f=param$0[1];
|
||
caml_call1(f,obj);
|
||
var param$0=l;
|
||
continue}
|
||
return 0}}
|
||
function run_initializers(obj,table)
|
||
{var inits=table[8],_f$_=0 !== inits?1:0;
|
||
return _f$_?iter_f(obj,inits):_f$_}
|
||
function run_initializers_opt(obj_0,obj,table)
|
||
{if(obj_0)return obj;
|
||
var inits=table[8];
|
||
if(0 !== inits)iter_f(obj,inits);
|
||
return obj}
|
||
function create_object_and_run_initiali(obj_0,table)
|
||
{if(obj_0)return obj_0;
|
||
var obj=create_object(table);
|
||
run_initializers(obj,table);
|
||
return obj}
|
||
function get_data$0(param)
|
||
{if(param)return param[2];throw [0,Assert_failure,_ct_]}
|
||
function build_path(n,keys,tables)
|
||
{var res=[0,0,0,0],r=[0,res],_f7_=0;
|
||
if(! (n < 0))
|
||
{var i=_f7_;
|
||
for(;;)
|
||
{var _f9_=r[1];
|
||
r[1] = [0,caml_check_bound(keys,i)[1 + i],_f9_,0];
|
||
var _f__=i + 1 | 0;
|
||
if(n !== i){var i=_f__;continue}
|
||
break}}
|
||
var _f8_=r[1];
|
||
if(tables){tables[2] = _f8_;return res}
|
||
throw [0,Assert_failure,_cq_]}
|
||
function lookup_tables(root,keys)
|
||
{var tables$2=get_data$0(root);
|
||
if(tables$2)
|
||
{var i$1=keys.length - 1 - 1 | 0,i=i$1,tables=tables$2;
|
||
a:
|
||
for(;;)
|
||
{if(0 <= i)
|
||
{var key=caml_check_bound(keys,i)[1 + i],tables$0=tables;
|
||
for(;;)
|
||
{if(tables$0)
|
||
{if(tables$0[1] === key)
|
||
{var tables$1=get_data$0(tables$0);
|
||
if(tables$1)
|
||
{var i$0=i - 1 | 0,i=i$0,tables=tables$1;continue a}
|
||
throw [0,Assert_failure,_cv_]}
|
||
if(tables$0)
|
||
{var _f6_=tables$0[3];
|
||
if(_f6_){var tables$0=_f6_;continue}
|
||
var v=[0,key,0,0];
|
||
if(tables$0)
|
||
{tables$0[3] = v;return build_path(i - 1 | 0,keys,v)}
|
||
throw [0,Assert_failure,_cr_]}
|
||
throw [0,Assert_failure,_cu_]}
|
||
throw [0,Assert_failure,_cs_]}}
|
||
return tables}}
|
||
return build_path(keys.length - 1 - 1 | 0,keys,root)}
|
||
function new_cache(table)
|
||
{var n=new_method(table),switch$0=0;
|
||
if
|
||
(0
|
||
!==
|
||
(n % 2 | 0)
|
||
&&
|
||
!
|
||
((2 + ((caml_check_bound(table[2],1)[2] * 16 | 0) / 32 | 0) | 0) < n))
|
||
{var n$0=new_method(table);switch$0 = 1}
|
||
if(! switch$0)var n$0=n;
|
||
caml_check_bound(table[2],n$0)[1 + n$0] = 0;
|
||
return n$0}
|
||
function set_methods(table,methods)
|
||
{var len=methods.length - 1,i=[0,0];
|
||
for(;;)
|
||
{if(i[1] < len)
|
||
{var
|
||
_f0_=i[1],
|
||
label=caml_check_bound(methods,_f0_)[1 + _f0_],
|
||
next=
|
||
function(param)
|
||
{i[1]++;
|
||
var _f5_=i[1];
|
||
return caml_check_bound(methods,_f5_)[1 + _f5_]},
|
||
clo=next(0);
|
||
if(typeof clo === "number")
|
||
switch(clo)
|
||
{case 0:
|
||
var
|
||
x=next(0),
|
||
clo$0=function(x){return function(obj){return x}}(x);
|
||
break;
|
||
case 1:
|
||
var
|
||
n=next(0),
|
||
clo$0=function(n){return function(obj){return obj[1 + n]}}(n);
|
||
break;
|
||
case 2:
|
||
var
|
||
e=next(0),
|
||
n$0=next(0),
|
||
clo$0=
|
||
function(e,n){return function(obj){return obj[1 + e][1 + n]}}
|
||
(e,n$0);
|
||
break;
|
||
case 3:
|
||
var
|
||
n$1=next(0),
|
||
clo$0=
|
||
function(n)
|
||
{return function(obj){return caml_call1(obj[1][1 + n],obj)}}
|
||
(n$1);
|
||
break;
|
||
case 4:
|
||
var
|
||
n$2=next(0),
|
||
clo$0=
|
||
function(n){return function(obj,x){obj[1 + n] = x;return 0}}
|
||
(n$2);
|
||
break;
|
||
case 5:
|
||
var
|
||
f=next(0),
|
||
x$0=next(0),
|
||
clo$0=
|
||
function(f,x){return function(obj){return caml_call1(f,x)}}
|
||
(f,x$0);
|
||
break;
|
||
case 6:
|
||
var
|
||
f$0=next(0),
|
||
n$3=next(0),
|
||
clo$0=
|
||
function(f,n)
|
||
{return function(obj){return caml_call1(f,obj[1 + n])}}
|
||
(f$0,n$3);
|
||
break;
|
||
case 7:
|
||
var
|
||
f$1=next(0),
|
||
e$0=next(0),
|
||
n$4=next(0),
|
||
clo$0=
|
||
function(f,e,n)
|
||
{return function(obj)
|
||
{return caml_call1(f,obj[1 + e][1 + n])}}
|
||
(f$1,e$0,n$4);
|
||
break;
|
||
case 8:
|
||
var
|
||
f$2=next(0),
|
||
n$5=next(0),
|
||
clo$0=
|
||
function(f,n)
|
||
{return function(obj)
|
||
{return caml_call1(f,caml_call1(obj[1][1 + n],obj))}}
|
||
(f$2,n$5);
|
||
break;
|
||
case 9:
|
||
var
|
||
f$3=next(0),
|
||
x$1=next(0),
|
||
y=next(0),
|
||
clo$0=
|
||
function(f,x,y)
|
||
{return function(obj){return caml_call2(f,x,y)}}
|
||
(f$3,x$1,y);
|
||
break;
|
||
case 10:
|
||
var
|
||
f$4=next(0),
|
||
x$2=next(0),
|
||
n$6=next(0),
|
||
clo$0=
|
||
function(f,x,n)
|
||
{return function(obj){return caml_call2(f,x,obj[1 + n])}}
|
||
(f$4,x$2,n$6);
|
||
break;
|
||
case 11:
|
||
var
|
||
f$5=next(0),
|
||
x$3=next(0),
|
||
e$1=next(0),
|
||
n$7=next(0),
|
||
clo$0=
|
||
function(f,x,e,n)
|
||
{return function(obj)
|
||
{return caml_call2(f,x,obj[1 + e][1 + n])}}
|
||
(f$5,x$3,e$1,n$7);
|
||
break;
|
||
case 12:
|
||
var
|
||
f$6=next(0),
|
||
x$4=next(0),
|
||
n$8=next(0),
|
||
clo$0=
|
||
function(f,x,n)
|
||
{return function(obj)
|
||
{return caml_call2(f,x,caml_call1(obj[1][1 + n],obj))}}
|
||
(f$6,x$4,n$8);
|
||
break;
|
||
case 13:
|
||
var
|
||
f$7=next(0),
|
||
n$9=next(0),
|
||
x$5=next(0),
|
||
clo$0=
|
||
function(f,n,x)
|
||
{return function(obj){return caml_call2(f,obj[1 + n],x)}}
|
||
(f$7,n$9,x$5);
|
||
break;
|
||
case 14:
|
||
var
|
||
f$8=next(0),
|
||
e$2=next(0),
|
||
n$10=next(0),
|
||
x$6=next(0),
|
||
clo$0=
|
||
function(f,e,n,x)
|
||
{return function(obj)
|
||
{return caml_call2(f,obj[1 + e][1 + n],x)}}
|
||
(f$8,e$2,n$10,x$6);
|
||
break;
|
||
case 15:
|
||
var
|
||
f$9=next(0),
|
||
n$11=next(0),
|
||
x$7=next(0),
|
||
clo$0=
|
||
function(f,n,x)
|
||
{return function(obj)
|
||
{return caml_call2(f,caml_call1(obj[1][1 + n],obj),x)}}
|
||
(f$9,n$11,x$7);
|
||
break;
|
||
case 16:
|
||
var
|
||
n$12=next(0),
|
||
x$8=next(0),
|
||
clo$0=
|
||
function(n,x)
|
||
{return function(obj)
|
||
{return caml_call2(obj[1][1 + n],obj,x)}}
|
||
(n$12,x$8);
|
||
break;
|
||
case 17:
|
||
var
|
||
n$13=next(0),
|
||
m=next(0),
|
||
clo$0=
|
||
function(n,m)
|
||
{return function(obj)
|
||
{return caml_call2(obj[1][1 + n],obj,obj[1 + m])}}
|
||
(n$13,m);
|
||
break;
|
||
case 18:
|
||
var
|
||
n$14=next(0),
|
||
e$3=next(0),
|
||
m$0=next(0),
|
||
clo$0=
|
||
function(n,e,m)
|
||
{return function(obj)
|
||
{return caml_call2(obj[1][1 + n],obj,obj[1 + e][1 + m])}}
|
||
(n$14,e$3,m$0);
|
||
break;
|
||
case 19:
|
||
var
|
||
n$15=next(0),
|
||
m$1=next(0),
|
||
clo$0=
|
||
function(n,m)
|
||
{return function(obj)
|
||
{var _f3_=caml_call1(obj[1][1 + m],obj);
|
||
return caml_call2(obj[1][1 + n],obj,_f3_)}}
|
||
(n$15,m$1);
|
||
break;
|
||
case 20:
|
||
var
|
||
m$2=next(0),
|
||
x$9=next(0),
|
||
c=new_cache(table),
|
||
clo$0=
|
||
function(m,x,c)
|
||
{return function(obj)
|
||
{return caml_call2(caml_get_public_method(x,m,0),x,c)}}
|
||
(m$2,x$9,c);
|
||
break;
|
||
case 21:
|
||
var
|
||
m$3=next(0),
|
||
n$16=next(0),
|
||
c$0=new_cache(table),
|
||
clo$0=
|
||
function(m,n,c)
|
||
{return function(obj)
|
||
{var _f2_=obj[1 + n];
|
||
return caml_call2(caml_get_public_method(_f2_,m,0),_f2_,c)}}
|
||
(m$3,n$16,c$0);
|
||
break;
|
||
case 22:
|
||
var
|
||
m$4=next(0),
|
||
e$4=next(0),
|
||
n$17=next(0),
|
||
c$1=new_cache(table),
|
||
clo$0=
|
||
function(m,e,n,c)
|
||
{return function(obj)
|
||
{var _f1_=obj[1 + e][1 + n];
|
||
return caml_call2(caml_get_public_method(_f1_,m,0),_f1_,c)}}
|
||
(m$4,e$4,n$17,c$1);
|
||
break;
|
||
default:
|
||
var
|
||
m$5=next(0),
|
||
n$18=next(0),
|
||
c$2=new_cache(table),
|
||
clo$0=
|
||
function(m,n,c)
|
||
{return function(obj)
|
||
{var _f4_=caml_call1(obj[1][1 + n],obj);
|
||
return caml_call2(caml_get_public_method(_f4_,m,0),_f4_,c)}}
|
||
(m$5,n$18,c$2)}
|
||
else
|
||
var clo$0=clo;
|
||
set_method(table,label,clo$0);
|
||
i[1]++;
|
||
continue}
|
||
return 0}}
|
||
function stats$0(param)
|
||
{return [0,table_count[1],method_count[1],inst_var_count[1]]}
|
||
var
|
||
CamlinternalOO=
|
||
[0,
|
||
public_method_label,
|
||
new_method,
|
||
new_variable,
|
||
new_methods_variables,
|
||
get_variable,
|
||
get_variables,
|
||
get_method_label,
|
||
get_method_labels,
|
||
get_method,
|
||
set_method,
|
||
set_methods,
|
||
narrow,
|
||
widen,
|
||
add_initializer,
|
||
dummy_table,
|
||
create_table,
|
||
init_class,
|
||
inherits,
|
||
make_class,
|
||
make_class_store,
|
||
dummy_class,
|
||
copy$7,
|
||
create_object,
|
||
create_object_opt,
|
||
run_initializers,
|
||
run_initializers_opt,
|
||
create_object_and_run_initiali,
|
||
lookup_tables,
|
||
params$0,
|
||
stats$0];
|
||
caml_register_global(791,CamlinternalOO,"CamlinternalOO");
|
||
var Stdlib_oo=[0,copy$7,public_method_label,public_method_label];
|
||
caml_register_global(792,Stdlib_oo,"Stdlib__oo");
|
||
var
|
||
update_mod=runtime.caml_CamlinternalMod_update_mod,
|
||
init_mod=runtime.caml_CamlinternalMod_init_mod,
|
||
CamlinternalMod=[0,init_mod,update_mod];
|
||
caml_register_global(793,CamlinternalMod,"CamlinternalMod");
|
||
var
|
||
initial_buffer=caml_create_bytes(32),
|
||
buffer=[0,initial_buffer],
|
||
bufpos=[0,0];
|
||
function reset_buffer(param)
|
||
{buffer[1] = initial_buffer;bufpos[1] = 0;return 0}
|
||
function store(c)
|
||
{if(caml_ml_bytes_length(buffer[1]) <= bufpos[1])
|
||
{var newbuffer=caml_create_bytes(2 * bufpos[1] | 0);
|
||
blit(buffer[1],0,newbuffer,0,bufpos[1]);
|
||
buffer[1] = newbuffer}
|
||
caml_bytes_set(buffer[1],bufpos[1],c);
|
||
bufpos[1]++;
|
||
return 0}
|
||
function get_string(param)
|
||
{var s=sub_string(buffer[1],0,bufpos[1]);
|
||
buffer[1] = initial_buffer;
|
||
return s}
|
||
function make_lexer(keywords)
|
||
{var kwd_table=caml_call2(Stdlib_hashtbl[1],0,17);
|
||
iter$2
|
||
(function(s){return caml_call3(Stdlib_hashtbl[5],kwd_table,s,[0,s])},
|
||
keywords);
|
||
function ident_or_keyword(id)
|
||
{try
|
||
{var _fY_=caml_call2(Stdlib_hashtbl[6],kwd_table,id);return _fY_}
|
||
catch(_fZ_)
|
||
{_fZ_ = caml_wrap_exception(_fZ_);
|
||
if(_fZ_ === Not_found)return [1,id];
|
||
throw _fZ_}}
|
||
function keyword_or_error(c)
|
||
{var s=make$0(1,c);
|
||
try
|
||
{var _fW_=caml_call2(Stdlib_hashtbl[6],kwd_table,s);return _fW_}
|
||
catch(_fX_)
|
||
{_fX_ = caml_wrap_exception(_fX_);
|
||
if(_fX_ === Not_found)
|
||
throw [0,Error,symbol(cst_Illegal_character,s)];
|
||
throw _fX_}}
|
||
function end_exponent_part(strm)
|
||
{for(;;)
|
||
{var match=peek$0(strm);
|
||
if(match)
|
||
{var _fV_=match[1],switcher=_fV_ - 48 | 0;
|
||
if(! (9 < switcher >>> 0)){junk(strm);store(_fV_);continue}}
|
||
return [0,[3,caml_float_of_string(get_string(0))]]}}
|
||
function exponent_part(strm)
|
||
{var match=peek$0(strm);
|
||
if(match)
|
||
{var _fU_=match[1],switch$0=0;
|
||
if(43 !== _fU_ && 45 !== _fU_)switch$0 = 1;
|
||
if(! switch$0)
|
||
{junk(strm);store(_fU_);return end_exponent_part(strm)}}
|
||
return end_exponent_part(strm)}
|
||
function number(s)
|
||
{for(;;)
|
||
{var match=peek$0(s);
|
||
if(match)
|
||
{var _fR_=match[1];
|
||
if(58 <= _fR_)
|
||
{var switch$0=0;
|
||
if(69 === _fR_ || 101 === _fR_)switch$0 = 1;
|
||
if(switch$0){junk(s);store(69);return exponent_part(s)}}
|
||
else
|
||
{if(46 === _fR_)
|
||
{junk(s);
|
||
store(46);
|
||
for(;;)
|
||
{var match$0=peek$0(s);
|
||
if(match$0)
|
||
{var _fS_=match$0[1],_fT_=_fS_ - 69 | 0;
|
||
if(32 < _fT_ >>> 0)
|
||
{var switcher=_fT_ + 21 | 0;
|
||
if(! (9 < switcher >>> 0)){junk(s);store(_fS_);continue}}
|
||
else
|
||
{var switcher$0=_fT_ - 1 | 0;
|
||
if(30 < switcher$0 >>> 0)
|
||
{junk(s);store(69);return exponent_part(s)}}}
|
||
return [0,[3,caml_float_of_string(get_string(0))]]}}
|
||
if(48 <= _fR_){junk(s);store(_fR_);continue}}}
|
||
return [0,[2,caml_int_of_string(get_string(0))]]}}
|
||
function ident2(strm)
|
||
{for(;;)
|
||
{var match=peek$0(strm);
|
||
if(match)
|
||
{var _fP_=match[1],switch$0=0;
|
||
if(94 <= _fP_)
|
||
{var _fQ_=_fP_ - 95 | 0;
|
||
if(30 < _fQ_ >>> 0)
|
||
{if(! (32 <= _fQ_))switch$0 = 1}
|
||
else
|
||
if(29 === _fQ_)switch$0 = 1}
|
||
else
|
||
if(65 <= _fP_)
|
||
{if(92 === _fP_)switch$0 = 1}
|
||
else
|
||
if(33 <= _fP_)
|
||
switch(_fP_ - 33 | 0)
|
||
{case 0:
|
||
case 2:
|
||
case 3:
|
||
case 4:
|
||
case 5:
|
||
case 9:
|
||
case 10:
|
||
case 12:
|
||
case 14:
|
||
case 25:
|
||
case 27:
|
||
case 28:
|
||
case 29:
|
||
case 30:
|
||
case 31:switch$0 = 1;break
|
||
}
|
||
if(switch$0){junk(strm);store(_fP_);continue}}
|
||
return [0,ident_or_keyword(get_string(0))]}}
|
||
function neg_number(s)
|
||
{var match=peek$0(s);
|
||
if(match)
|
||
{var _fO_=match[1],switcher=_fO_ - 48 | 0;
|
||
if(! (9 < switcher >>> 0))
|
||
{junk(s);reset_buffer(0);store(45);store(_fO_);return number(s)}}
|
||
reset_buffer(0);
|
||
store(45);
|
||
return ident2(s)}
|
||
function ident(strm)
|
||
{for(;;)
|
||
{var match=peek$0(strm);
|
||
if(match)
|
||
{var _fM_=match[1],switch$0=0;
|
||
if(91 <= _fM_)
|
||
{var _fN_=_fM_ - 95 | 0;
|
||
if(27 < _fN_ >>> 0)
|
||
{if(97 <= _fN_)switch$0 = 1}
|
||
else
|
||
if(1 !== _fN_)switch$0 = 1}
|
||
else
|
||
if(48 <= _fM_)
|
||
{if(6 < (_fM_ - 58 | 0) >>> 0)switch$0 = 1}
|
||
else
|
||
if(39 === _fM_)switch$0 = 1;
|
||
if(switch$0){junk(strm);store(_fM_);continue}}
|
||
return [0,ident_or_keyword(get_string(0))]}}
|
||
function next_token$0(counter,strm)
|
||
{for(;;)
|
||
{var match=peek$0(strm);
|
||
if(match)
|
||
{var _fC_=match[1],switch$0=0;
|
||
if(124 <= _fC_)
|
||
{if(127 <= _fC_)
|
||
{if(192 <= _fC_)switch$0 = 1}
|
||
else
|
||
if(125 !== _fC_)switch$0 = 2}
|
||
else
|
||
{var _fD_=_fC_ - 65 | 0;
|
||
if(57 < _fD_ >>> 0)
|
||
{if(! (58 <= _fD_))
|
||
{var switcher=_fD_ + 65 | 0;
|
||
switch(switcher)
|
||
{case 34:
|
||
junk(strm);
|
||
reset_buffer(0);
|
||
for(;;)
|
||
{var match$1=peek$0(strm);
|
||
if(match$1)
|
||
{var _fF_=match$1[1];
|
||
if(34 === _fF_){junk(strm);return [0,[4,get_string(0)]]}
|
||
if(92 === _fF_)
|
||
{junk(strm);
|
||
try
|
||
{var c$0=escape(strm)}
|
||
catch(_fL_)
|
||
{_fL_ = caml_wrap_exception(_fL_);
|
||
if(_fL_ === Failure$0)throw [0,Error,cst$95];
|
||
throw _fL_;
|
||
var _fI_=_fL_}
|
||
store(c$0);
|
||
continue}
|
||
junk(strm);
|
||
store(_fF_);
|
||
continue}
|
||
throw Failure$0}
|
||
case 39:
|
||
junk(strm);
|
||
try
|
||
{var match$2=peek$0(strm);
|
||
if(! match$2)throw Failure$0;
|
||
var _fG_=match$2[1];
|
||
if(92 === _fG_)
|
||
{junk(strm);
|
||
try
|
||
{var _fH_=escape(strm)}
|
||
catch(_fK_)
|
||
{_fK_ = caml_wrap_exception(_fK_);
|
||
if(_fK_ === Failure$0)throw [0,Error,cst$96];
|
||
throw _fK_}
|
||
var c=_fH_}
|
||
else
|
||
{junk(strm);var c=_fG_}}
|
||
catch(_fJ_)
|
||
{_fJ_ = caml_wrap_exception(_fJ_);
|
||
if(_fJ_ === Failure$0)throw [0,Error,cst$93];
|
||
throw _fJ_}
|
||
var match$0=peek$0(strm);
|
||
if(match$0 && 39 === match$0[1])
|
||
{junk(strm);return [0,[5,c]]}
|
||
throw [0,Error,cst$94];
|
||
case 40:
|
||
junk(strm);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return maybe_comment(counter$0,strm)}
|
||
return caml_trampoline_return(maybe_comment,[0,strm]);
|
||
case 45:junk(strm);return neg_number(strm);
|
||
case 9:
|
||
case 10:
|
||
case 12:
|
||
case 13:
|
||
case 26:
|
||
case 32:junk(strm);continue;
|
||
case 48:
|
||
case 49:
|
||
case 50:
|
||
case 51:
|
||
case 52:
|
||
case 53:
|
||
case 54:
|
||
case 55:
|
||
case 56:
|
||
case 57:
|
||
junk(strm);reset_buffer(0);store(_fC_);return number(strm);
|
||
case 33:
|
||
case 35:
|
||
case 36:
|
||
case 37:
|
||
case 38:
|
||
case 42:
|
||
case 43:
|
||
case 47:
|
||
case 58:
|
||
case 60:
|
||
case 61:
|
||
case 62:
|
||
case 63:
|
||
case 64:switch$0 = 2;break
|
||
}}}
|
||
else
|
||
{var _fE_=_fD_ - 26 | 0;
|
||
if(5 < _fE_ >>> 0)
|
||
switch$0 = 1;
|
||
else
|
||
switch(_fE_)
|
||
{case 4:switch$0 = 1;break;case 1:case 3:switch$0 = 2;break}}}
|
||
switch(switch$0)
|
||
{case 0:junk(strm);return [0,keyword_or_error(_fC_)];
|
||
case 1:
|
||
junk(strm);reset_buffer(0);store(_fC_);return ident(strm);
|
||
default:
|
||
junk(strm);reset_buffer(0);store(_fC_);return ident2(strm)}}
|
||
return 0}}
|
||
function maybe_comment(counter,strm)
|
||
{var match=peek$0(strm);
|
||
if(match && 42 === match[1])
|
||
{junk(strm);
|
||
comment(strm);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;return next_token$0(counter$0,strm)}
|
||
return caml_trampoline_return(next_token$0,[0,strm])}
|
||
return [0,keyword_or_error(40)]}
|
||
function next_token(strm){return caml_trampoline(next_token$0(0,strm))}
|
||
function escape(strm)
|
||
{var match=peek$0(strm);
|
||
if(match)
|
||
{var _fz_=match[1];
|
||
if(58 <= _fz_)
|
||
{var switcher=_fz_ - 110 | 0;
|
||
if(! (6 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:junk(strm);return 10;
|
||
case 4:junk(strm);return 13;
|
||
case 6:junk(strm);return 9
|
||
}}
|
||
else
|
||
if(48 <= _fz_)
|
||
{junk(strm);
|
||
var match$0=peek$0(strm);
|
||
if(match$0)
|
||
{var _fA_=match$0[1],switcher$0=_fA_ - 48 | 0;
|
||
if(! (9 < switcher$0 >>> 0))
|
||
{junk(strm);
|
||
var match$1=peek$0(strm);
|
||
if(match$1)
|
||
{var _fB_=match$1[1],switcher$1=_fB_ - 48 | 0;
|
||
if(! (9 < switcher$1 >>> 0))
|
||
{junk(strm);
|
||
return chr
|
||
((((_fz_ - 48 | 0) * 100 | 0)
|
||
+
|
||
((_fA_ - 48 | 0) * 10 | 0)
|
||
|
|
||
0)
|
||
+
|
||
(_fB_ - 48 | 0)
|
||
|
|
||
0)}}
|
||
throw [0,Error,cst$98]}}
|
||
throw [0,Error,cst$97]}
|
||
junk(strm);
|
||
return _fz_}
|
||
throw Failure$0}
|
||
function comment(strm)
|
||
{a:
|
||
for(;;)
|
||
{var match=peek$0(strm);
|
||
if(match)
|
||
{var switcher=match[1] - 40 | 0;
|
||
if(! (2 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:
|
||
junk(strm);
|
||
var match$0=peek$0(strm);
|
||
if(match$0)
|
||
{if(42 === match$0[1]){junk(strm);comment(strm);continue}
|
||
junk(strm);
|
||
continue}
|
||
throw Failure$0;
|
||
case 1:break;
|
||
default:
|
||
junk(strm);
|
||
for(;;)
|
||
{var match$1=peek$0(strm);
|
||
if(match$1)
|
||
{var _fy_=match$1[1];
|
||
if(41 === _fy_){junk(strm);return 0}
|
||
if(42 === _fy_){junk(strm);continue}
|
||
junk(strm);
|
||
continue a}
|
||
throw Failure$0}}
|
||
junk(strm);
|
||
continue}
|
||
throw Failure$0}}
|
||
return function(input)
|
||
{return from(function(count){return next_token(input)})}}
|
||
var Stdlib_genlex=[0,make_lexer];
|
||
caml_register_global(794,Stdlib_genlex,"Stdlib__genlex");
|
||
function MakeSeeded$0(H)
|
||
{var prng=[246,function(_fx_){return caml_call1(_b2_[2],0)}];
|
||
function create(opt,initial_size)
|
||
{if(opt)
|
||
var sth=opt[1],random=sth;
|
||
else
|
||
var random=caml_call1(Stdlib_hashtbl[17],0);
|
||
var x=16;
|
||
for(;;)
|
||
{if(! (initial_size <= x) && ! (max_array_length < (x * 2 | 0)))
|
||
{var x$0=x * 2 | 0,x=x$0;continue}
|
||
if(random)
|
||
var
|
||
_fv_=caml_obj_tag(prng),
|
||
_fw_=250 === _fv_?prng[1]:246 === _fv_?force_lazy_block(prng):prng,
|
||
seed=caml_call1(_b2_[4],_fw_);
|
||
else
|
||
var seed=0;
|
||
return [0,0,caml_make_vect(x,0),seed,x]}}
|
||
function clear(h)
|
||
{h[1] = 0;
|
||
var len=h[2].length - 1,_ft_=len - 1 | 0,_fs_=0;
|
||
if(! (_ft_ < 0))
|
||
{var i=_fs_;
|
||
for(;;)
|
||
{caml_check_bound(h[2],i)[1 + i] = 0;
|
||
var _fu_=i + 1 | 0;
|
||
if(_ft_ !== i){var i=_fu_;continue}
|
||
break}}
|
||
return 0}
|
||
function reset(h)
|
||
{var len=h[2].length - 1;
|
||
return len === h[4]
|
||
?clear(h)
|
||
:(h[1] = 0,h[2] = caml_make_vect(h[4],0),0)}
|
||
function copy(init)
|
||
{var _fp_=init[4],_fq_=init[3],_fr_=copy$1(init[2]);
|
||
return [0,init[1],_fr_,_fq_,_fp_]}
|
||
function key_index(h,hkey){return hkey & (h[2].length - 1 - 1 | 0)}
|
||
function clean(h)
|
||
{function do_bucket(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var hkey=param$0[1],rest=param$0[3],c=param$0[2];
|
||
if(caml_call1(H[7],c))
|
||
{var rest$0=param$0[3],c$0=param$0[2];
|
||
return [0,hkey,c$0,do_bucket(rest$0)]}
|
||
h[1] = h[1] - 1 | 0;
|
||
var param$0=rest;
|
||
continue}
|
||
return 0}}
|
||
var d=h[2],_fm_=d.length - 1 - 1 | 0,_fl_=0;
|
||
if(! (_fm_ < 0))
|
||
{var i=_fl_;
|
||
for(;;)
|
||
{var _fn_=do_bucket(caml_check_bound(d,i)[1 + i]);
|
||
caml_check_bound(d,i)[1 + i] = _fn_;
|
||
var _fo_=i + 1 | 0;
|
||
if(_fm_ !== i){var i=_fo_;continue}
|
||
break}}
|
||
return 0}
|
||
function resize(h)
|
||
{var odata=h[2],osize=odata.length - 1,nsize=osize * 2 | 0;
|
||
clean(h);
|
||
var
|
||
_ff_=nsize < max_array_length?1:0,
|
||
_fg_=_ff_?(osize >>> 1 | 0) <= h[1]?1:0:_ff_;
|
||
if(_fg_)
|
||
{var ndata=caml_make_vect(nsize,0);
|
||
h[2] = ndata;
|
||
var
|
||
insert_bucket=
|
||
function(param)
|
||
{if(param)
|
||
{var rest=param[3],data=param[2],hkey=param[1];
|
||
insert_bucket(rest);
|
||
var nidx=key_index(h,hkey);
|
||
ndata[1 + nidx]
|
||
=
|
||
[0,hkey,data,caml_check_bound(ndata,nidx)[1 + nidx]];
|
||
return 0}
|
||
return 0},
|
||
_fi_=osize - 1 | 0,
|
||
_fh_=0;
|
||
if(! (_fi_ < 0))
|
||
{var i=_fh_;
|
||
for(;;)
|
||
{insert_bucket(caml_check_bound(odata,i)[1 + i]);
|
||
var _fk_=i + 1 | 0;
|
||
if(_fi_ !== i){var i=_fk_;continue}
|
||
break}}
|
||
var _fj_=0}
|
||
else
|
||
var _fj_=_fg_;
|
||
return _fj_}
|
||
function add(h,key,info)
|
||
{var
|
||
hkey=caml_call2(H[2],h[3],key),
|
||
i=key_index(h,hkey),
|
||
container=caml_call2(H[1],key,info),
|
||
bucket=[0,hkey,container,caml_check_bound(h[2],i)[1 + i]];
|
||
caml_check_bound(h[2],i)[1 + i] = bucket;
|
||
h[1] = h[1] + 1 | 0;
|
||
var _fe_=h[2].length - 1 << 1 < h[1]?1:0;
|
||
return _fe_?resize(h):_fe_}
|
||
function remove(h,key)
|
||
{var hkey=caml_call2(H[2],h[3],key);
|
||
function remove_bucket(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var hk=param$0[1],next=param$0[3],c=param$0[2];
|
||
if(hkey === hk)
|
||
{var match=caml_call2(H[3],c,key);
|
||
switch(match)
|
||
{case 0:h[1] = h[1] - 1 | 0;return next;
|
||
case 1:return [0,hk,c,remove_bucket(next)];
|
||
default:h[1] = h[1] - 1 | 0;var param$0=next;continue}}
|
||
var next$0=param$0[3],c$0=param$0[2];
|
||
return [0,hk,c$0,remove_bucket(next$0)]}
|
||
return 0}}
|
||
var
|
||
i=key_index(h,hkey),
|
||
_fd_=remove_bucket(caml_check_bound(h[2],i)[1 + i]);
|
||
caml_check_bound(h[2],i)[1 + i] = _fd_;
|
||
return 0}
|
||
function find(h,key)
|
||
{var
|
||
hkey=caml_call2(H[2],h[3],key),
|
||
_fc_=key_index(h,hkey),
|
||
param$1=caml_check_bound(h[2],_fc_)[1 + _fc_],
|
||
param=param$1;
|
||
for(;;)
|
||
{if(param)
|
||
{var hk=param[1],rest=param[3],c=param[2];
|
||
if(hkey === hk)
|
||
{var match=caml_call2(H[3],c,key);
|
||
switch(match)
|
||
{case 0:
|
||
var match$0=caml_call1(H[4],c);
|
||
if(match$0){var d=match$0[1];return d}
|
||
var param=rest;
|
||
continue;
|
||
case 1:var param=rest;continue;
|
||
default:var param=rest;continue}}
|
||
var param$0=param[3],param=param$0;
|
||
continue}
|
||
throw Not_found}}
|
||
function find_opt(h,key)
|
||
{var
|
||
hkey=caml_call2(H[2],h[3],key),
|
||
_fb_=key_index(h,hkey),
|
||
param$1=caml_check_bound(h[2],_fb_)[1 + _fb_],
|
||
param=param$1;
|
||
for(;;)
|
||
{if(param)
|
||
{var hk=param[1],rest=param[3],c=param[2];
|
||
if(hkey === hk)
|
||
{var match=caml_call2(H[3],c,key);
|
||
switch(match)
|
||
{case 0:
|
||
var d=caml_call1(H[4],c);
|
||
if(d)return d;
|
||
var param=rest;
|
||
continue;
|
||
case 1:var param=rest;continue;
|
||
default:var param=rest;continue}}
|
||
var param$0=param[3],param=param$0;
|
||
continue}
|
||
return 0}}
|
||
function find_all(h,key)
|
||
{var hkey=caml_call2(H[2],h[3],key);
|
||
function find_in_bucket(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var hk=param$0[1],rest=param$0[3],c=param$0[2];
|
||
if(hkey === hk)
|
||
{var match=caml_call2(H[3],c,key);
|
||
switch(match)
|
||
{case 0:
|
||
var match$0=caml_call1(H[4],c);
|
||
if(match$0)
|
||
{var d=match$0[1];return [0,d,find_in_bucket(rest)]}
|
||
var param$0=rest;
|
||
continue;
|
||
case 1:var param$0=rest;continue;
|
||
default:var param$0=rest;continue}}
|
||
var param$1=param$0[3],param$0=param$1;
|
||
continue}
|
||
return 0}}
|
||
var _fa_=key_index(h,hkey);
|
||
return find_in_bucket(caml_check_bound(h[2],_fa_)[1 + _fa_])}
|
||
function replace(h,key,info)
|
||
{var hkey=caml_call2(H[2],h[3],key);
|
||
function replace_bucket(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var hk=param$0[1],next=param$0[3],c=param$0[2];
|
||
if(hkey === hk)
|
||
{var match=caml_call2(H[3],c,key);
|
||
if(match){var param$0=next;continue}
|
||
return caml_call3(H[6],c,key,info)}
|
||
var param$1=param$0[3],param$0=param$1;
|
||
continue}
|
||
throw Not_found}}
|
||
var i=key_index(h,hkey),l=caml_check_bound(h[2],i)[1 + i];
|
||
try
|
||
{var _e__=replace_bucket(l);return _e__}
|
||
catch(_e$_)
|
||
{_e$_ = caml_wrap_exception(_e$_);
|
||
if(_e$_ === Not_found)
|
||
{var container=caml_call2(H[1],key,info);
|
||
caml_check_bound(h[2],i)[1 + i] = [0,hkey,container,l];
|
||
h[1] = h[1] + 1 | 0;
|
||
var _e9_=h[2].length - 1 << 1 < h[1]?1:0;
|
||
return _e9_?resize(h):_e9_}
|
||
throw _e$_}}
|
||
function mem(h,key)
|
||
{var
|
||
hkey=caml_call2(H[2],h[3],key),
|
||
_e8_=key_index(h,hkey),
|
||
param$1=caml_check_bound(h[2],_e8_)[1 + _e8_],
|
||
param=param$1;
|
||
for(;;)
|
||
{if(param)
|
||
{var hk=param[1],rest=param[3],c=param[2];
|
||
if(hk === hkey)
|
||
{var match=caml_call2(H[3],c,key);
|
||
if(match){var param=rest;continue}
|
||
return 1}
|
||
var param$0=param[3],param=param$0;
|
||
continue}
|
||
return 0}}
|
||
function iter$0(f,h)
|
||
{var d$0=h[2],_e6_=d$0.length - 1 - 1 | 0,_e5_=0;
|
||
if(! (_e6_ < 0))
|
||
{var i=_e5_;
|
||
a:
|
||
for(;;)
|
||
{var param$0=caml_check_bound(d$0,i)[1 + i],param=param$0;
|
||
for(;;)
|
||
{if(param)
|
||
{var
|
||
rest=param[3],
|
||
c=param[2],
|
||
match=caml_call1(H[5],c),
|
||
match$0=caml_call1(H[4],c),
|
||
switch$0=0;
|
||
if(match && match$0)
|
||
{var d=match$0[1],k=match[1];caml_call2(f,k,d);switch$0 = 1}
|
||
var param=rest;
|
||
continue}
|
||
var _e7_=i + 1 | 0;
|
||
if(_e6_ !== i){var i=_e7_;continue a}
|
||
break}
|
||
break}}
|
||
return 0}
|
||
function fold(f,h,init)
|
||
{var d$0=h[2],accu$1=[0,init],_e2_=d$0.length - 1 - 1 | 0,_e1_=0;
|
||
if(! (_e2_ < 0))
|
||
{var i=_e1_;
|
||
a:
|
||
for(;;)
|
||
{var
|
||
_e3_=accu$1[1],
|
||
b$0=caml_check_bound(d$0,i)[1 + i],
|
||
b=b$0,
|
||
accu=_e3_;
|
||
for(;;)
|
||
{if(b)
|
||
{var
|
||
rest=b[3],
|
||
c=b[2],
|
||
match=caml_call1(H[5],c),
|
||
match$0=caml_call1(H[4],c),
|
||
switch$0=0;
|
||
if(match && match$0)
|
||
{var d=match$0[1],k=match[1],accu$0=caml_call3(f,k,d,accu);
|
||
switch$0 = 1}
|
||
if(! switch$0)var accu$0=accu;
|
||
var b=rest,accu=accu$0;
|
||
continue}
|
||
accu$1[1] = accu;
|
||
var _e4_=i + 1 | 0;
|
||
if(_e2_ !== i){var i=_e4_;continue a}
|
||
break}
|
||
break}}
|
||
return accu$1[1]}
|
||
function filter_map_inplace(f,h)
|
||
{function do_bucket(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
rest=param$0[3],
|
||
c=param$0[2],
|
||
hk=param$0[1],
|
||
match=caml_call1(H[5],c),
|
||
match$0=caml_call1(H[4],c);
|
||
if(match && match$0)
|
||
{var d=match$0[1],k=match[1],match$1=caml_call2(f,k,d);
|
||
if(match$1)
|
||
{var new_d=match$1[1];
|
||
caml_call3(H[6],c,k,new_d);
|
||
return [0,hk,c,do_bucket(rest)]}
|
||
var param$0=rest;
|
||
continue}
|
||
var param$0=rest;
|
||
continue}
|
||
return 0}}
|
||
var d=h[2],_eY_=d.length - 1 - 1 | 0,_eX_=0;
|
||
if(! (_eY_ < 0))
|
||
{var i=_eX_;
|
||
for(;;)
|
||
{var _eZ_=do_bucket(caml_check_bound(d,i)[1 + i]);
|
||
caml_check_bound(d,i)[1 + i] = _eZ_;
|
||
var _e0_=i + 1 | 0;
|
||
if(_eY_ !== i){var i=_e0_;continue}
|
||
break}}
|
||
return 0}
|
||
function length(h){return h[1]}
|
||
function bucket_length(accu,param)
|
||
{var accu$0=accu,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
param$1=param$0[3],
|
||
accu$1=accu$0 + 1 | 0,
|
||
accu$0=accu$1,
|
||
param$0=param$1;
|
||
continue}
|
||
return accu$0}}
|
||
function stats(h)
|
||
{var
|
||
_eU_=h[2],
|
||
_eV_=0,
|
||
mbl=
|
||
fold_left$1
|
||
(function(m,b){return max(m,bucket_length(0,b))},_eV_,_eU_),
|
||
histo=caml_make_vect(mbl + 1 | 0,0),
|
||
_eW_=h[2];
|
||
iter$5
|
||
(function(b)
|
||
{var l=bucket_length(0,b);
|
||
histo[1 + l] = caml_check_bound(histo,l)[1 + l] + 1 | 0;
|
||
return 0},
|
||
_eW_);
|
||
return [0,h[1],h[2].length - 1,mbl,histo]}
|
||
function bucket_length_alive(accu,param)
|
||
{var accu$0=accu,param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var rest=param$0[3],c=param$0[2];
|
||
if(caml_call1(H[7],c))
|
||
{var accu$1=accu$0 + 1 | 0,accu$0=accu$1,param$0=rest;continue}
|
||
var param$1=param$0[3],param$0=param$1;
|
||
continue}
|
||
return accu$0}}
|
||
function stats_alive(h)
|
||
{var
|
||
size=[0,0],
|
||
_eR_=h[2],
|
||
_eS_=0,
|
||
mbl=
|
||
fold_left$1
|
||
(function(m,b){return max(m,bucket_length_alive(0,b))},_eS_,_eR_),
|
||
histo=caml_make_vect(mbl + 1 | 0,0),
|
||
_eT_=h[2];
|
||
iter$5
|
||
(function(b)
|
||
{var l=bucket_length_alive(0,b);
|
||
size[1] = size[1] + l | 0;
|
||
histo[1 + l] = caml_check_bound(histo,l)[1 + l] + 1 | 0;
|
||
return 0},
|
||
_eT_);
|
||
return [0,size[1],h[2].length - 1,mbl,histo]}
|
||
function to_seq(tbl)
|
||
{var tbl_data=tbl[2];
|
||
function aux(i,buck,param)
|
||
{var i$0=i,buck$0=buck;
|
||
for(;;)
|
||
{if(buck$0)
|
||
{var
|
||
next=buck$0[3],
|
||
c=buck$0[2],
|
||
match=caml_call1(H[5],c),
|
||
match$0=caml_call1(H[4],c);
|
||
if(match && match$0)
|
||
{var data=match$0[1],key=match[1];
|
||
return [0,
|
||
[0,key,data],
|
||
function(_eQ_){return aux(i$0,next,_eQ_)}]}
|
||
var buck$0=next;
|
||
continue}
|
||
if(i$0 === tbl_data.length - 1)return 0;
|
||
var
|
||
buck$1=caml_check_bound(tbl_data,i$0)[1 + i$0],
|
||
i$1=i$0 + 1 | 0,
|
||
i$0=i$1,
|
||
buck$0=buck$1;
|
||
continue}}
|
||
var _eN_=0,_eO_=0;
|
||
return function(_eP_){return aux(_eO_,_eN_,_eP_)}}
|
||
function to_seq_keys(m)
|
||
{var _eJ_=to_seq(m);
|
||
function _eK_(_eM_){return _eM_[1]}
|
||
return function(_eL_){return map(_eK_,_eJ_,_eL_)}}
|
||
function to_seq_values(m)
|
||
{var _eF_=to_seq(m);
|
||
function _eG_(_eI_){return _eI_[2]}
|
||
return function(_eH_){return map(_eG_,_eF_,_eH_)}}
|
||
function add_seq(tbl,i)
|
||
{return iter
|
||
(function(param)
|
||
{var v=param[2],k=param[1];return add(tbl,k,v)},
|
||
i)}
|
||
function replace_seq(tbl,i)
|
||
{return iter
|
||
(function(param)
|
||
{var v=param[2],k=param[1];return replace(tbl,k,v)},
|
||
i)}
|
||
function of_seq(i){var tbl=create(0,16);replace_seq(tbl,i);return tbl}
|
||
return [0,
|
||
create,
|
||
clear,
|
||
reset,
|
||
copy,
|
||
add,
|
||
remove,
|
||
find,
|
||
find_opt,
|
||
find_all,
|
||
replace,
|
||
mem,
|
||
iter$0,
|
||
filter_map_inplace,
|
||
fold,
|
||
length,
|
||
stats,
|
||
to_seq,
|
||
to_seq_keys,
|
||
to_seq_values,
|
||
add_seq,
|
||
replace_seq,
|
||
of_seq,
|
||
clean,
|
||
stats_alive]}
|
||
function create$5(param){return caml_call1(_r_[1],1)}
|
||
function get_key$0(t){return caml_call2(_r_[3],t,0)}
|
||
function get_key_copy$0(t){return caml_call2(_r_[4],t,0)}
|
||
function set_key$0(t,k){return caml_call3(_r_[5],t,0,k)}
|
||
function unset_key$0(t){return caml_call2(_r_[6],t,0)}
|
||
function check_key$0(t){return caml_call2(_r_[7],t,0)}
|
||
function blit_key$0(t1,t2){return caml_call5(_r_[8],t1,0,t2,0,1)}
|
||
function get_data$1(t){return caml_call1(_r_[9],t)}
|
||
function get_data_copy(t){return caml_call1(_r_[10],t)}
|
||
function set_data(t,d){return caml_call2(_r_[11],t,d)}
|
||
function unset_data(t){return caml_call1(_r_[12],t)}
|
||
function check_data(t){return caml_call1(_r_[13],t)}
|
||
function blit_data(t1,t2){return caml_call2(_r_[14],t1,t2)}
|
||
function MakeSeeded$1(H)
|
||
{function create(k,d)
|
||
{var c=create$5(0);set_data(c,d);set_key$0(c,k);return c}
|
||
var hash=H[2];
|
||
function equal(c,k)
|
||
{var match=get_key$0(c);
|
||
if(match){var k$0=match[1];return caml_call2(H[1],k,k$0)?0:1}
|
||
return 2}
|
||
function set_key_data(c,k,d)
|
||
{unset_data(c);set_key$0(c,k);return set_data(c,d)}
|
||
return MakeSeeded$0
|
||
([0,
|
||
create,
|
||
hash,
|
||
equal,
|
||
get_data$1,
|
||
get_key$0,
|
||
set_key_data,
|
||
check_key$0])}
|
||
function Make$2(H)
|
||
{var equal=H[1];
|
||
function hash(seed,x){return caml_call1(H[2],x)}
|
||
var
|
||
include=MakeSeeded$1([0,equal,hash]),
|
||
clear=include[2],
|
||
reset=include[3],
|
||
copy=include[4],
|
||
add=include[5],
|
||
remove=include[6],
|
||
find=include[7],
|
||
find_opt=include[8],
|
||
find_all=include[9],
|
||
replace=include[10],
|
||
mem=include[11],
|
||
iter=include[12],
|
||
filter_map_inplace=include[13],
|
||
fold=include[14],
|
||
length=include[15],
|
||
stats=include[16],
|
||
to_seq=include[17],
|
||
to_seq_keys=include[18],
|
||
to_seq_values=include[19],
|
||
add_seq=include[20],
|
||
replace_seq=include[21],
|
||
clean=include[23],
|
||
stats_alive=include[24],
|
||
_eE_=include[1];
|
||
function create(sz){return caml_call2(_eE_,_cw_,sz)}
|
||
function of_seq(i)
|
||
{var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl}
|
||
return [0,
|
||
create,
|
||
clear,
|
||
reset,
|
||
copy,
|
||
add,
|
||
remove,
|
||
find,
|
||
find_opt,
|
||
find_all,
|
||
replace,
|
||
mem,
|
||
iter,
|
||
filter_map_inplace,
|
||
fold,
|
||
length,
|
||
stats,
|
||
to_seq,
|
||
to_seq_keys,
|
||
to_seq_values,
|
||
add_seq,
|
||
replace_seq,
|
||
of_seq,
|
||
clean,
|
||
stats_alive]}
|
||
function create$6(param){return caml_call1(_r_[1],2)}
|
||
function get_key1(t){return caml_call2(_r_[3],t,0)}
|
||
function get_key1_copy(t){return caml_call2(_r_[4],t,0)}
|
||
function set_key1(t,k){return caml_call3(_r_[5],t,0,k)}
|
||
function unset_key1(t){return caml_call2(_r_[6],t,0)}
|
||
function check_key1(t){return caml_call2(_r_[7],t,0)}
|
||
function get_key2(t){return caml_call2(_r_[3],t,1)}
|
||
function get_key2_copy(t){return caml_call2(_r_[4],t,1)}
|
||
function set_key2(t,k){return caml_call3(_r_[5],t,1,k)}
|
||
function unset_key2(t){return caml_call2(_r_[6],t,1)}
|
||
function check_key2(t){return caml_call2(_r_[7],t,1)}
|
||
function blit_key1(t1,t2){return caml_call5(_r_[8],t1,0,t2,0,1)}
|
||
function blit_key2(t1,t2){return caml_call5(_r_[8],t1,1,t2,1,1)}
|
||
function blit_key12(t1,t2){return caml_call5(_r_[8],t1,0,t2,0,2)}
|
||
function get_data$2(t){return caml_call1(_r_[9],t)}
|
||
function get_data_copy$0(t){return caml_call1(_r_[10],t)}
|
||
function set_data$0(t,d){return caml_call2(_r_[11],t,d)}
|
||
function unset_data$0(t){return caml_call1(_r_[12],t)}
|
||
function check_data$0(t){return caml_call1(_r_[13],t)}
|
||
function blit_data$0(t1,t2){return caml_call2(_r_[14],t1,t2)}
|
||
function MakeSeeded$2(H1,H2)
|
||
{function create(param,d)
|
||
{var k2=param[2],k1=param[1],c=create$6(0);
|
||
set_data$0(c,d);
|
||
set_key1(c,k1);
|
||
set_key2(c,k2);
|
||
return c}
|
||
function hash(seed,param)
|
||
{var
|
||
k2=param[2],
|
||
k1=param[1],
|
||
_eD_=caml_call2(H2[2],seed,k2) * 65599 | 0;
|
||
return caml_call2(H1[2],seed,k1) + _eD_ | 0}
|
||
function equal(c,param)
|
||
{var k2=param[2],k1=param[1],match=get_key1(c),match$0=get_key2(c);
|
||
if(match && match$0)
|
||
{var k2$0=match$0[1],k1$0=match[1];
|
||
if(caml_call2(H1[1],k1,k1$0) && caml_call2(H2[1],k2,k2$0))return 0;
|
||
return 1}
|
||
return 2}
|
||
function get_key(c)
|
||
{var match=get_key1(c),match$0=get_key2(c);
|
||
if(match && match$0)
|
||
{var k2=match$0[1],k1=match[1];return [0,[0,k1,k2]]}
|
||
return 0}
|
||
function set_key_data(c,param,d)
|
||
{var k2=param[2],k1=param[1];
|
||
unset_data$0(c);
|
||
set_key1(c,k1);
|
||
set_key2(c,k2);
|
||
return set_data$0(c,d)}
|
||
function check_key(c)
|
||
{var _eC_=check_key1(c);return _eC_?check_key2(c):_eC_}
|
||
return MakeSeeded$0
|
||
([0,create,hash,equal,get_data$2,get_key,set_key_data,check_key])}
|
||
function Make$3(H1,H2)
|
||
{var equal=H2[1];
|
||
function hash(seed,x){return caml_call1(H2[2],x)}
|
||
var equal$0=H1[1],_eA_=[0,equal,hash];
|
||
function hash$0(seed,x){return caml_call1(H1[2],x)}
|
||
var
|
||
include=MakeSeeded$2([0,equal$0,hash$0],_eA_),
|
||
clear=include[2],
|
||
reset=include[3],
|
||
copy=include[4],
|
||
add=include[5],
|
||
remove=include[6],
|
||
find=include[7],
|
||
find_opt=include[8],
|
||
find_all=include[9],
|
||
replace=include[10],
|
||
mem=include[11],
|
||
iter=include[12],
|
||
filter_map_inplace=include[13],
|
||
fold=include[14],
|
||
length=include[15],
|
||
stats=include[16],
|
||
to_seq=include[17],
|
||
to_seq_keys=include[18],
|
||
to_seq_values=include[19],
|
||
add_seq=include[20],
|
||
replace_seq=include[21],
|
||
clean=include[23],
|
||
stats_alive=include[24],
|
||
_eB_=include[1];
|
||
function create(sz){return caml_call2(_eB_,_cx_,sz)}
|
||
function of_seq(i)
|
||
{var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl}
|
||
return [0,
|
||
create,
|
||
clear,
|
||
reset,
|
||
copy,
|
||
add,
|
||
remove,
|
||
find,
|
||
find_opt,
|
||
find_all,
|
||
replace,
|
||
mem,
|
||
iter,
|
||
filter_map_inplace,
|
||
fold,
|
||
length,
|
||
stats,
|
||
to_seq,
|
||
to_seq_keys,
|
||
to_seq_values,
|
||
add_seq,
|
||
replace_seq,
|
||
of_seq,
|
||
clean,
|
||
stats_alive]}
|
||
function create$7(n){return caml_call1(_r_[1],n)}
|
||
function length$6(k){return caml_call1(_r_[2],k)}
|
||
function get_key$1(t,n){return caml_call2(_r_[3],t,n)}
|
||
function get_key_copy$1(t,n){return caml_call2(_r_[4],t,n)}
|
||
function set_key$1(t,n,k){return caml_call3(_r_[5],t,n,k)}
|
||
function unset_key$1(t,n){return caml_call2(_r_[6],t,n)}
|
||
function check_key$1(t,n){return caml_call2(_r_[7],t,n)}
|
||
function blit_key$1(t1,o1,t2,o2,l)
|
||
{return caml_call5(_r_[8],t1,o1,t2,o2,l)}
|
||
function get_data$3(t){return caml_call1(_r_[9],t)}
|
||
function get_data_copy$1(t){return caml_call1(_r_[10],t)}
|
||
function set_data$1(t,d){return caml_call2(_r_[11],t,d)}
|
||
function unset_data$1(t){return caml_call1(_r_[12],t)}
|
||
function check_data$1(t){return caml_call1(_r_[13],t)}
|
||
function blit_data$1(t1,t2){return caml_call2(_r_[14],t1,t2)}
|
||
function MakeSeeded$3(H)
|
||
{function create(k,d)
|
||
{var c=create$7(k.length - 1);
|
||
set_data$1(c,d);
|
||
var _ey_=k.length - 1 - 1 | 0,_ex_=0;
|
||
if(! (_ey_ < 0))
|
||
{var i=_ex_;
|
||
for(;;)
|
||
{set_key$1(c,i,caml_check_bound(k,i)[1 + i]);
|
||
var _ez_=i + 1 | 0;
|
||
if(_ey_ !== i){var i=_ez_;continue}
|
||
break}}
|
||
return c}
|
||
function hash(seed,k)
|
||
{var h=[0,0],_et_=k.length - 1 - 1 | 0,_es_=0;
|
||
if(! (_et_ < 0))
|
||
{var i=_es_;
|
||
for(;;)
|
||
{var _eu_=h[1],_ev_=caml_check_bound(k,i)[1 + i];
|
||
h[1] = (caml_call2(H[2],seed,_ev_) * 65599 | 0) + _eu_ | 0;
|
||
var _ew_=i + 1 | 0;
|
||
if(_et_ !== i){var i=_ew_;continue}
|
||
break}}
|
||
return h[1]}
|
||
function equal(c,k)
|
||
{var len=k.length - 1,len$0=length$6(c);
|
||
if(len !== len$0)return 1;
|
||
var i$1=len - 1 | 0,i=i$1;
|
||
for(;;)
|
||
{if(0 <= i)
|
||
{var match=get_key$1(c,i);
|
||
if(match)
|
||
{var ki=match[1],_er_=caml_check_bound(k,i)[1 + i];
|
||
if(caml_call2(H[1],_er_,ki)){var i$0=i - 1 | 0,i=i$0;continue}
|
||
return 1}
|
||
return 2}
|
||
return 0}}
|
||
function get_key(c)
|
||
{var len=length$6(c);
|
||
if(0 === len)return [0,[0]];
|
||
var match=get_key$1(c,0);
|
||
if(match)
|
||
{var k0=match[1],a=caml_make_vect(len,k0),i$1=len - 1 | 0,i=i$1;
|
||
for(;;)
|
||
{if(1 <= i)
|
||
{var match$0=get_key$1(c,i);
|
||
if(match$0)
|
||
{var ki=match$0[1];
|
||
caml_check_bound(a,i)[1 + i] = ki;
|
||
var i$0=i - 1 | 0,i=i$0;
|
||
continue}
|
||
return 0}
|
||
return [0,a]}}
|
||
return 0}
|
||
function set_key_data(c,k,d)
|
||
{unset_data$1(c);
|
||
var _ep_=k.length - 1 - 1 | 0,_eo_=0;
|
||
if(! (_ep_ < 0))
|
||
{var i=_eo_;
|
||
for(;;)
|
||
{set_key$1(c,i,caml_check_bound(k,i)[1 + i]);
|
||
var _eq_=i + 1 | 0;
|
||
if(_ep_ !== i){var i=_eq_;continue}
|
||
break}}
|
||
return set_data$1(c,d)}
|
||
function check_key(c)
|
||
{var i$1=length$6(c) - 1 | 0,i=i$1;
|
||
for(;;)
|
||
{var _el_=i < 0?1:0;
|
||
if(_el_)
|
||
var _em_=_el_;
|
||
else
|
||
{var _en_=check_key$1(c,i);
|
||
if(_en_){var i$0=i - 1 | 0,i=i$0;continue}
|
||
var _em_=_en_}
|
||
return _em_}}
|
||
return MakeSeeded$0
|
||
([0,create,hash,equal,get_data$3,get_key,set_key_data,check_key])}
|
||
function Make$4(H)
|
||
{var equal=H[1];
|
||
function hash(seed,x){return caml_call1(H[2],x)}
|
||
var
|
||
include=MakeSeeded$3([0,equal,hash]),
|
||
clear=include[2],
|
||
reset=include[3],
|
||
copy=include[4],
|
||
add=include[5],
|
||
remove=include[6],
|
||
find=include[7],
|
||
find_opt=include[8],
|
||
find_all=include[9],
|
||
replace=include[10],
|
||
mem=include[11],
|
||
iter=include[12],
|
||
filter_map_inplace=include[13],
|
||
fold=include[14],
|
||
length=include[15],
|
||
stats=include[16],
|
||
to_seq=include[17],
|
||
to_seq_keys=include[18],
|
||
to_seq_values=include[19],
|
||
add_seq=include[20],
|
||
replace_seq=include[21],
|
||
clean=include[23],
|
||
stats_alive=include[24],
|
||
_ek_=include[1];
|
||
function create(sz){return caml_call2(_ek_,_cy_,sz)}
|
||
function of_seq(i)
|
||
{var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl}
|
||
return [0,
|
||
create,
|
||
clear,
|
||
reset,
|
||
copy,
|
||
add,
|
||
remove,
|
||
find,
|
||
find_opt,
|
||
find_all,
|
||
replace,
|
||
mem,
|
||
iter,
|
||
filter_map_inplace,
|
||
fold,
|
||
length,
|
||
stats,
|
||
to_seq,
|
||
to_seq_keys,
|
||
to_seq_values,
|
||
add_seq,
|
||
replace_seq,
|
||
of_seq,
|
||
clean,
|
||
stats_alive]}
|
||
var
|
||
Stdlib_ephemeron=
|
||
[0,
|
||
[0,
|
||
create$5,
|
||
get_key$0,
|
||
get_key_copy$0,
|
||
set_key$0,
|
||
unset_key$0,
|
||
check_key$0,
|
||
blit_key$0,
|
||
get_data$1,
|
||
get_data_copy,
|
||
set_data,
|
||
unset_data,
|
||
check_data,
|
||
blit_data,
|
||
Make$2,
|
||
MakeSeeded$1],
|
||
[0,
|
||
create$6,
|
||
get_key1,
|
||
get_key1_copy,
|
||
set_key1,
|
||
unset_key1,
|
||
check_key1,
|
||
get_key2,
|
||
get_key2_copy,
|
||
set_key2,
|
||
unset_key2,
|
||
check_key2,
|
||
blit_key1,
|
||
blit_key2,
|
||
blit_key12,
|
||
get_data$2,
|
||
get_data_copy$0,
|
||
set_data$0,
|
||
unset_data$0,
|
||
check_data$0,
|
||
blit_data$0,
|
||
Make$3,
|
||
MakeSeeded$2],
|
||
[0,
|
||
create$7,
|
||
get_key$1,
|
||
get_key_copy$1,
|
||
set_key$1,
|
||
unset_key$1,
|
||
check_key$1,
|
||
blit_key$1,
|
||
get_data$3,
|
||
get_data_copy$1,
|
||
set_data$1,
|
||
unset_data$1,
|
||
check_data$1,
|
||
blit_data$1,
|
||
Make$4,
|
||
MakeSeeded$3],
|
||
[0,
|
||
function(_ej_)
|
||
{return MakeSeeded$0
|
||
([0,_ej_[3],_ej_[1],_ej_[2],_ej_[5],_ej_[4],_ej_[6],_ej_[7]])}]];
|
||
caml_register_global(795,Stdlib_ephemeron,"Stdlib__ephemeron");
|
||
function generic_basename(is_dir_sep,current_dir_name,name)
|
||
{if(caml_string_equal(name,cst$99))return current_dir_name;
|
||
var n$3=caml_ml_string_length(name) - 1 | 0,n=n$3;
|
||
for(;;)
|
||
{if(0 <= n)
|
||
{if(caml_call2(is_dir_sep,name,n)){var n$0=n - 1 | 0,n=n$0;continue}
|
||
var p=n + 1 | 0,n$1=n;
|
||
for(;;)
|
||
{if(0 <= n$1)
|
||
{if(caml_call2(is_dir_sep,name,n$1))
|
||
return sub$0(name,n$1 + 1 | 0,(p - n$1 | 0) - 1 | 0);
|
||
var n$2=n$1 - 1 | 0,n$1=n$2;
|
||
continue}
|
||
return sub$0(name,0,p)}}
|
||
return sub$0(name,0,1)}}
|
||
function generic_dirname(is_dir_sep,current_dir_name,name)
|
||
{if(caml_string_equal(name,cst$100))return current_dir_name;
|
||
var n$5=caml_ml_string_length(name) - 1 | 0,n=n$5;
|
||
for(;;)
|
||
{if(0 <= n)
|
||
{if(caml_call2(is_dir_sep,name,n)){var n$0=n - 1 | 0,n=n$0;continue}
|
||
var n$1=n;
|
||
for(;;)
|
||
{if(0 <= n$1)
|
||
{if(caml_call2(is_dir_sep,name,n$1))
|
||
{var n$3=n$1;
|
||
for(;;)
|
||
{if(0 <= n$3)
|
||
{if(caml_call2(is_dir_sep,name,n$3))
|
||
{var n$4=n$3 - 1 | 0,n$3=n$4;continue}
|
||
return sub$0(name,0,n$3 + 1 | 0)}
|
||
return sub$0(name,0,1)}}
|
||
var n$2=n$1 - 1 | 0,n$1=n$2;
|
||
continue}
|
||
return current_dir_name}}
|
||
return sub$0(name,0,1)}}
|
||
function is_dir_sep(s,i){return 47 === caml_string_get(s,i)?1:0}
|
||
function is_relative(n)
|
||
{var
|
||
_eh_=caml_ml_string_length(n) < 1?1:0,
|
||
_ei_=_eh_ || (47 !== caml_string_get(n,0)?1:0);
|
||
return _ei_}
|
||
function is_implicit(n)
|
||
{var _ec_=is_relative(n);
|
||
if(_ec_)
|
||
{var
|
||
_ed_=caml_ml_string_length(n) < 2?1:0,
|
||
_ee_=_ed_ || caml_string_notequal(sub$0(n,0,2),cst$102);
|
||
if(_ee_)
|
||
var
|
||
_ef_=caml_ml_string_length(n) < 3?1:0,
|
||
_eg_=_ef_ || caml_string_notequal(sub$0(n,0,3),cst$101);
|
||
else
|
||
var _eg_=_ee_}
|
||
else
|
||
var _eg_=_ec_;
|
||
return _eg_}
|
||
function check_suffix(name,suff)
|
||
{var
|
||
_ea_=caml_ml_string_length(suff) <= caml_ml_string_length(name)?1:0,
|
||
_eb_=
|
||
_ea_
|
||
?caml_string_equal
|
||
(sub$0
|
||
(name,
|
||
caml_ml_string_length(name) - caml_ml_string_length(suff) | 0,
|
||
caml_ml_string_length(suff)),
|
||
suff)
|
||
:_ea_;
|
||
return _eb_}
|
||
function chop_suffix_opt(suffix,filename)
|
||
{var
|
||
len_s=caml_ml_string_length(suffix),
|
||
len_f=caml_ml_string_length(filename);
|
||
if(len_s <= len_f)
|
||
{var r=sub$0(filename,len_f - len_s | 0,len_s);
|
||
return caml_string_equal(r,suffix)
|
||
?[0,sub$0(filename,0,len_f - len_s | 0)]
|
||
:0}
|
||
return 0}
|
||
try
|
||
{var _cG_=caml_sys_getenv(cst_TMPDIR),_cz_=_cG_}
|
||
catch(_d$_)
|
||
{_d$_ = caml_wrap_exception(_d$_);
|
||
if(_d$_ !== Not_found)throw _d$_;
|
||
var _cz_=cst_tmp}
|
||
function quote(s)
|
||
{var l=caml_ml_string_length(s),b=create$2(l + 20 | 0);
|
||
add_char(b,39);
|
||
var _d9_=l - 1 | 0,_d8_=0;
|
||
if(! (_d9_ < 0))
|
||
{var i=_d8_;
|
||
for(;;)
|
||
{if(39 === caml_string_get(s,i))
|
||
add_string(b,quotequote);
|
||
else
|
||
add_char(b,caml_string_get(s,i));
|
||
var _d__=i + 1 | 0;
|
||
if(_d9_ !== i){var i=_d__;continue}
|
||
break}}
|
||
add_char(b,39);
|
||
return contents(b)}
|
||
function quote_command(cmd,stdin,stdout,stderr,args)
|
||
{if(stderr)
|
||
var
|
||
f=stderr[1],
|
||
_d2_=caml_equal(stderr,stdout)?cst_2_1:symbol(cst_2,quote(f)),
|
||
_d3_=_d2_;
|
||
else
|
||
var _d3_=cst$108;
|
||
if(stdout)
|
||
var f$0=stdout[1],_d4_=symbol(cst$103,quote(f$0));
|
||
else
|
||
var _d4_=cst$107;
|
||
var _d5_=symbol(_d4_,_d3_);
|
||
if(stdin)
|
||
var f$1=stdin[1],_d6_=symbol(cst$104,quote(f$1));
|
||
else
|
||
var _d6_=cst$106;
|
||
var _d7_=symbol(_d6_,_d5_);
|
||
return symbol(concat$0(cst$105,map$2(quote,[0,cmd,args])),_d7_)}
|
||
function basename(_d1_)
|
||
{return generic_basename(is_dir_sep,current_dir_name,_d1_)}
|
||
function dirname(_d0_)
|
||
{return generic_dirname(is_dir_sep,current_dir_name,_d0_)}
|
||
var
|
||
Unix=
|
||
[0,
|
||
null$0,
|
||
current_dir_name,
|
||
parent_dir_name,
|
||
dir_sep,
|
||
is_dir_sep,
|
||
is_relative,
|
||
is_implicit,
|
||
check_suffix,
|
||
chop_suffix_opt,
|
||
_cz_,
|
||
quote,
|
||
quote_command,
|
||
basename,
|
||
dirname];
|
||
function is_dir_sep$0(s,i)
|
||
{var c=caml_string_get(s,i),_dX_=47 === c?1:0;
|
||
if(_dX_)
|
||
var _dY_=_dX_;
|
||
else
|
||
var _dZ_=92 === c?1:0,_dY_=_dZ_ || (58 === c?1:0);
|
||
return _dY_}
|
||
function is_relative$0(n)
|
||
{var
|
||
_dR_=caml_ml_string_length(n) < 1?1:0,
|
||
_dS_=_dR_ || (47 !== caml_string_get(n,0)?1:0);
|
||
if(_dS_)
|
||
{var
|
||
_dT_=caml_ml_string_length(n) < 1?1:0,
|
||
_dU_=_dT_ || (92 !== caml_string_get(n,0)?1:0);
|
||
if(_dU_)
|
||
var
|
||
_dV_=caml_ml_string_length(n) < 2?1:0,
|
||
_dW_=_dV_ || (58 !== caml_string_get(n,1)?1:0);
|
||
else
|
||
var _dW_=_dU_}
|
||
else
|
||
var _dW_=_dS_;
|
||
return _dW_}
|
||
function is_implicit$0(n)
|
||
{var _dI_=is_relative$0(n);
|
||
if(_dI_)
|
||
{var
|
||
_dJ_=caml_ml_string_length(n) < 2?1:0,
|
||
_dK_=_dJ_ || caml_string_notequal(sub$0(n,0,2),cst$112);
|
||
if(_dK_)
|
||
{var
|
||
_dL_=caml_ml_string_length(n) < 2?1:0,
|
||
_dM_=_dL_ || caml_string_notequal(sub$0(n,0,2),cst$111);
|
||
if(_dM_)
|
||
{var
|
||
_dN_=caml_ml_string_length(n) < 3?1:0,
|
||
_dO_=_dN_ || caml_string_notequal(sub$0(n,0,3),cst$110);
|
||
if(_dO_)
|
||
var
|
||
_dP_=caml_ml_string_length(n) < 3?1:0,
|
||
_dQ_=_dP_ || caml_string_notequal(sub$0(n,0,3),cst$109);
|
||
else
|
||
var _dQ_=_dO_}
|
||
else
|
||
var _dQ_=_dM_}
|
||
else
|
||
var _dQ_=_dK_}
|
||
else
|
||
var _dQ_=_dI_;
|
||
return _dQ_}
|
||
function check_suffix$0(name,suff)
|
||
{var _dF_=caml_ml_string_length(suff) <= caml_ml_string_length(name)?1:0;
|
||
if(_dF_)
|
||
var
|
||
s=
|
||
sub$0
|
||
(name,
|
||
caml_ml_string_length(name) - caml_ml_string_length(suff) | 0,
|
||
caml_ml_string_length(suff)),
|
||
_dG_=lowercase_ascii$1(suff),
|
||
_dH_=caml_string_equal(lowercase_ascii$1(s),_dG_);
|
||
else
|
||
var _dH_=_dF_;
|
||
return _dH_}
|
||
function chop_suffix_opt$0(suffix,filename)
|
||
{var
|
||
len_s=caml_ml_string_length(suffix),
|
||
len_f=caml_ml_string_length(filename);
|
||
if(len_s <= len_f)
|
||
{var
|
||
r=sub$0(filename,len_f - len_s | 0,len_s),
|
||
_dE_=lowercase_ascii$1(suffix);
|
||
return caml_string_equal(lowercase_ascii$1(r),_dE_)
|
||
?[0,sub$0(filename,0,len_f - len_s | 0)]
|
||
:0}
|
||
return 0}
|
||
try
|
||
{var _cF_=caml_sys_getenv(cst_TEMP),temp_dir_name=_cF_}
|
||
catch(_dD_)
|
||
{_dD_ = caml_wrap_exception(_dD_);
|
||
if(_dD_ !== Not_found)throw _dD_;
|
||
var temp_dir_name=cst$113}
|
||
function quote$0(s)
|
||
{var l=caml_ml_string_length(s),b=create$2(l + 20 | 0);
|
||
add_char(b,34);
|
||
function add_bs(n)
|
||
{var _dB_=1;
|
||
if(! (n < 1))
|
||
{var j=_dB_;
|
||
for(;;)
|
||
{add_char(b,92);
|
||
var _dC_=j + 1 | 0;
|
||
if(n !== j){var j=_dC_;continue}
|
||
break}}
|
||
return 0}
|
||
function loop$0(counter,i)
|
||
{var i$0=i;
|
||
for(;;)
|
||
{if(i$0 === l)return add_char(b,34);
|
||
var c=caml_string_get(s,i$0);
|
||
if(34 === c)
|
||
{var _dz_=0;
|
||
if(counter < 50)
|
||
{var counter$1=counter + 1 | 0;
|
||
return loop_bs(counter$1,_dz_,i$0)}
|
||
return caml_trampoline_return(loop_bs,[0,_dz_,i$0])}
|
||
if(92 === c)
|
||
{var _dA_=0;
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return loop_bs(counter$0,_dA_,i$0)}
|
||
return caml_trampoline_return(loop_bs,[0,_dA_,i$0])}
|
||
add_char(b,c);
|
||
var i$1=i$0 + 1 | 0,i$0=i$1;
|
||
continue}}
|
||
function loop_bs(counter,n,i)
|
||
{var n$0=n,i$0=i;
|
||
for(;;)
|
||
{if(i$0 === l){add_char(b,34);return add_bs(n$0)}
|
||
var match=caml_string_get(s,i$0);
|
||
if(34 === match)
|
||
{add_bs((2 * n$0 | 0) + 1 | 0);
|
||
add_char(b,34);
|
||
var _dy_=i$0 + 1 | 0;
|
||
if(counter < 50)
|
||
{var counter$1=counter + 1 | 0;return loop$0(counter$1,_dy_)}
|
||
return caml_trampoline_return(loop$0,[0,_dy_])}
|
||
if(92 === match)
|
||
{var i$1=i$0 + 1 | 0,n$1=n$0 + 1 | 0,n$0=n$1,i$0=i$1;continue}
|
||
add_bs(n$0);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;return loop$0(counter$0,i$0)}
|
||
return caml_trampoline_return(loop$0,[0,i$0])}}
|
||
function loop(i){return caml_trampoline(loop$0(0,i))}
|
||
loop(0);
|
||
return contents(b)}
|
||
function quote_cmd_filename(f)
|
||
{if(! contains$0(f,34) && ! contains$0(f,37))
|
||
return contains$0(f,32)?symbol(cst$115,symbol(f,cst$114)):f;
|
||
return failwith(symbol(cst_Filename_quote_command_bad,f))}
|
||
function quote_command$0(cmd,stdin,stdout,stderr,args)
|
||
{if(stderr)
|
||
var
|
||
f=stderr[1],
|
||
_dp_=
|
||
caml_equal(stderr,stdout)
|
||
?cst_2_1$0
|
||
:symbol(cst_2$0,quote_cmd_filename(f)),
|
||
_dq_=_dp_;
|
||
else
|
||
var _dq_=cst$124;
|
||
var _dr_=[0,_dq_,_cA_];
|
||
if(stdout)
|
||
var f$0=stdout[1],_ds_=symbol(cst$116,quote_cmd_filename(f$0));
|
||
else
|
||
var _ds_=cst$123;
|
||
var _dt_=[0,_ds_,_dr_];
|
||
if(stdin)
|
||
var f$1=stdin[1],_du_=symbol(cst$117,quote_cmd_filename(f$1));
|
||
else
|
||
var _du_=cst$122;
|
||
var
|
||
s=concat$0(cst$118,map$2(quote$0,args)),
|
||
b=create$2(caml_ml_string_length(s) + 20 | 0),
|
||
_dv_=[0,_du_,_dt_];
|
||
iter$4
|
||
(function(c)
|
||
{var switch$0=0;
|
||
if(62 <= c)
|
||
{var _dx_=c - 63 | 0;
|
||
if(60 < _dx_ >>> 0)
|
||
{if(! (62 <= _dx_))switch$0 = 1}
|
||
else
|
||
if(31 === _dx_)switch$0 = 1}
|
||
else
|
||
if(42 <= c)
|
||
{if(60 === c)switch$0 = 1}
|
||
else
|
||
if(33 <= c)
|
||
switch(c - 33 | 0)
|
||
{case 2:case 3:case 6:break;default:switch$0 = 1}
|
||
return switch$0?(add_char(b,94),add_char(b,c)):add_char(b,c)},
|
||
s);
|
||
var _dw_=[0,cst$119,[0,contents(b),_dv_]];
|
||
return concat$0(cst$121,[0,cst$120,[0,quote_cmd_filename(cmd),_dw_]])}
|
||
function drive_and_path(s)
|
||
{var _dl_=2 <= caml_ml_string_length(s)?1:0;
|
||
if(_dl_)
|
||
{var param=caml_string_get(s,0),switch$0=0;
|
||
if(91 <= param)
|
||
{if(! (25 < (param - 97 | 0) >>> 0))switch$0 = 1}
|
||
else
|
||
if(65 <= param)switch$0 = 1;
|
||
var _dm_=switch$0?1:0,_dn_=_dm_?58 === caml_string_get(s,1)?1:0:_dm_}
|
||
else
|
||
var _dn_=_dl_;
|
||
if(_dn_)
|
||
{var _do_=sub$0(s,2,caml_ml_string_length(s) - 2 | 0);
|
||
return [0,sub$0(s,0,2),_do_]}
|
||
return [0,cst$125,s]}
|
||
function dirname$0(s)
|
||
{var
|
||
match=drive_and_path(s),
|
||
path=match[2],
|
||
drive=match[1],
|
||
dir=generic_dirname(is_dir_sep$0,current_dir_name$0,path);
|
||
return symbol(drive,dir)}
|
||
function basename$0(s)
|
||
{var match=drive_and_path(s),path=match[2];
|
||
return generic_basename(is_dir_sep$0,current_dir_name$0,path)}
|
||
var
|
||
Win32=
|
||
[0,
|
||
null$1,
|
||
current_dir_name$0,
|
||
parent_dir_name$0,
|
||
dir_sep$0,
|
||
is_dir_sep$0,
|
||
is_relative$0,
|
||
is_implicit$0,
|
||
check_suffix$0,
|
||
chop_suffix_opt$0,
|
||
temp_dir_name,
|
||
quote$0,
|
||
quote_command$0,
|
||
basename$0,
|
||
dirname$0];
|
||
function basename$1(_dk_)
|
||
{return generic_basename(is_dir_sep$0,current_dir_name$1,_dk_)}
|
||
function dirname$1(_dj_)
|
||
{return generic_dirname(is_dir_sep$0,current_dir_name$1,_dj_)}
|
||
var
|
||
Cygwin=
|
||
[0,
|
||
null$2,
|
||
current_dir_name$1,
|
||
parent_dir_name$1,
|
||
dir_sep$1,
|
||
is_dir_sep$0,
|
||
is_relative$0,
|
||
is_implicit$0,
|
||
check_suffix$0,
|
||
chop_suffix_opt$0,
|
||
_cz_,
|
||
quote,
|
||
quote_command,
|
||
basename$1,
|
||
dirname$1],
|
||
Sysdeps=
|
||
caml_string_notequal(os_type,cst_Cygwin)
|
||
?caml_string_notequal(os_type,cst_Win32)?Unix:Win32
|
||
:Cygwin,
|
||
null$3=Sysdeps[1],
|
||
current_dir_name$2=Sysdeps[2],
|
||
parent_dir_name$2=Sysdeps[3],
|
||
dir_sep$2=Sysdeps[4],
|
||
is_dir_sep$1=Sysdeps[5],
|
||
is_relative$1=Sysdeps[6],
|
||
is_implicit$1=Sysdeps[7],
|
||
check_suffix$1=Sysdeps[8],
|
||
chop_suffix_opt$1=Sysdeps[9],
|
||
temp_dir_name$0=Sysdeps[10],
|
||
quote$1=Sysdeps[11],
|
||
quote_command$1=Sysdeps[12],
|
||
basename$2=Sysdeps[13],
|
||
dirname$2=Sysdeps[14];
|
||
function concat$3(dirname,filename)
|
||
{var l=caml_ml_string_length(dirname);
|
||
if(0 !== l && ! is_dir_sep$1(dirname,l - 1 | 0))
|
||
return symbol(dirname,symbol(dir_sep$2,filename));
|
||
return symbol(dirname,filename)}
|
||
function chop_suffix(name,suff)
|
||
{var n=caml_ml_string_length(name) - caml_ml_string_length(suff) | 0;
|
||
return 0 <= n?sub$0(name,0,n):invalid_arg(cst_Filename_chop_suffix)}
|
||
function extension_len(name)
|
||
{var i$4=caml_ml_string_length(name) - 1 | 0,i$1=i$4;
|
||
for(;;)
|
||
{if(0 <= i$1 && ! is_dir_sep$1(name,i$1))
|
||
{if(46 === caml_string_get(name,i$1))
|
||
{var i$2=i$1 - 1 | 0,i=i$2;
|
||
for(;;)
|
||
{if(0 <= i && ! is_dir_sep$1(name,i))
|
||
{if(46 === caml_string_get(name,i))
|
||
{var i$0=i - 1 | 0,i=i$0;continue}
|
||
return caml_ml_string_length(name) - i$1 | 0}
|
||
return 0}}
|
||
var i$3=i$1 - 1 | 0,i$1=i$3;
|
||
continue}
|
||
return 0}}
|
||
function extension(name)
|
||
{var l=extension_len(name);
|
||
return 0 === l?cst$126:sub$0(name,caml_ml_string_length(name) - l | 0,l)}
|
||
function chop_extension(name)
|
||
{var l=extension_len(name);
|
||
return 0 === l
|
||
?invalid_arg(cst_Filename_chop_extension)
|
||
:sub$0(name,0,caml_ml_string_length(name) - l | 0)}
|
||
function remove_extension(name)
|
||
{var l=extension_len(name);
|
||
return 0 === l?name:sub$0(name,0,caml_ml_string_length(name) - l | 0)}
|
||
var prng$0=[246,function(_di_){return caml_call1(_b2_[2],0)}];
|
||
function temp_file_name(temp_dir,prefix,suffix)
|
||
{var
|
||
_dg_=caml_obj_tag(prng$0),
|
||
_dh_=
|
||
250 === _dg_?prng$0[1]:246 === _dg_?force_lazy_block(prng$0):prng$0,
|
||
rnd=caml_call1(_b2_[4],_dh_) & 16777215;
|
||
return concat$3(temp_dir,caml_call3(sprintf(_cB_),prefix,rnd,suffix))}
|
||
var current_temp_dir_name=[0,temp_dir_name$0];
|
||
function set_temp_dir_name(s){current_temp_dir_name[1] = s;return 0}
|
||
function get_temp_dir_name(param){return current_temp_dir_name[1]}
|
||
function temp_file(opt,prefix,suffix)
|
||
{if(opt)
|
||
var sth=opt[1],temp_dir=sth;
|
||
else
|
||
var temp_dir=current_temp_dir_name[1];
|
||
function try_name(counter)
|
||
{var counter$0=counter;
|
||
for(;;)
|
||
{var name=temp_file_name(temp_dir,prefix,suffix);
|
||
try
|
||
{runtime.caml_sys_close(caml_sys_open(name,_cC_,384));return name}
|
||
catch(e)
|
||
{e = caml_wrap_exception(e);
|
||
if(e[1] === Sys_error)
|
||
{if(1000 <= counter$0)throw e;
|
||
var counter$1=counter$0 + 1 | 0,counter$0=counter$1;
|
||
continue}
|
||
throw e}}}
|
||
return try_name(0)}
|
||
function open_temp_file(opt,_de_,_dd_,prefix,suffix)
|
||
{if(opt)var sth=opt[1],mode=sth;else var mode=_cD_;
|
||
if(_de_)var sth$0=_de_[1],perms=sth$0;else var perms=384;
|
||
if(_dd_)
|
||
var sth$1=_dd_[1],temp_dir=sth$1;
|
||
else
|
||
var temp_dir=current_temp_dir_name[1];
|
||
function try_name(counter)
|
||
{var counter$0=counter;
|
||
for(;;)
|
||
{var name=temp_file_name(temp_dir,prefix,suffix);
|
||
try
|
||
{var _df_=[0,name,open_out_gen([0,1,[0,3,[0,5,mode]]],perms,name)];
|
||
return _df_}
|
||
catch(e)
|
||
{e = caml_wrap_exception(e);
|
||
if(e[1] === Sys_error)
|
||
{if(1000 <= counter$0)throw e;
|
||
var counter$1=counter$0 + 1 | 0,counter$0=counter$1;
|
||
continue}
|
||
throw e}}}
|
||
return try_name(0)}
|
||
var
|
||
Stdlib_filename=
|
||
[0,
|
||
current_dir_name$2,
|
||
parent_dir_name$2,
|
||
dir_sep$2,
|
||
concat$3,
|
||
is_relative$1,
|
||
is_implicit$1,
|
||
check_suffix$1,
|
||
chop_suffix,
|
||
chop_suffix_opt$1,
|
||
extension,
|
||
remove_extension,
|
||
chop_extension,
|
||
basename$2,
|
||
dirname$2,
|
||
null$3,
|
||
temp_file,
|
||
open_temp_file,
|
||
get_temp_dir_name,
|
||
set_temp_dir_name,
|
||
temp_dir_name$0,
|
||
quote$1,
|
||
quote_command$1];
|
||
caml_register_global(796,Stdlib_filename,"Stdlib__filename");
|
||
function add$1(x,y){return [254,x[1] + y[1],x[2] + y[2]]}
|
||
function sub$4(x,y){return [254,x[1] - y[1],x[2] - y[2]]}
|
||
function neg(x){return [254,- x[1],- x[2]]}
|
||
function conj(x){return [254,x[1],- x[2]]}
|
||
function mul(x,y)
|
||
{return [254,x[1] * y[1] - x[2] * y[2],x[1] * y[2] + x[2] * y[1]]}
|
||
function div(x,y)
|
||
{if(Math.abs(y[2]) <= Math.abs(y[1]))
|
||
{var r=y[2] / y[1],d=y[1] + r * y[2];
|
||
return [254,(x[1] + r * x[2]) / d,(x[2] - r * x[1]) / d]}
|
||
var r$0=y[1] / y[2],d$0=y[2] + r$0 * y[1];
|
||
return [254,(r$0 * x[1] + x[2]) / d$0,(r$0 * x[2] - x[1]) / d$0]}
|
||
function inv(x){return div(one$4,x)}
|
||
function norm2(x){return x[1] * x[1] + x[2] * x[2]}
|
||
function norm(x)
|
||
{var r=Math.abs(x[1]),i=Math.abs(x[2]);
|
||
if(r == 0.)return i;
|
||
if(i == 0.)return r;
|
||
if(i <= r){var q=i / r;return r * Math.sqrt(1. + q * q)}
|
||
var q$0=r / i;
|
||
return i * Math.sqrt(1. + q$0 * q$0)}
|
||
function arg(x){return Math.atan2(x[2],x[1])}
|
||
function polar(n,a){return [254,Math.cos(a) * n,Math.sin(a) * n]}
|
||
function sqrt(x)
|
||
{if(x[1] == 0. && x[2] == 0.)return _cE_;
|
||
var r=Math.abs(x[1]),i=Math.abs(x[2]);
|
||
if(i <= r)
|
||
var
|
||
q=i / r,
|
||
w=Math.sqrt(r) * Math.sqrt(0.5 * (1. + Math.sqrt(1. + q * q)));
|
||
else
|
||
var
|
||
q$0=r / i,
|
||
w=Math.sqrt(i) * Math.sqrt(0.5 * (q$0 + Math.sqrt(1. + q$0 * q$0)));
|
||
if(0. <= x[1])return [254,w,0.5 * x[2] / w];
|
||
var w$0=0. <= x[2]?w:- w;
|
||
return [254,0.5 * i / w,w$0]}
|
||
function exp(x)
|
||
{var e=Math.exp(x[1]);return [254,e * Math.cos(x[2]),e * Math.sin(x[2])]}
|
||
function log(x)
|
||
{var _dc_=Math.atan2(x[2],x[1]);return [254,Math.log(norm(x)),_dc_]}
|
||
function pow(x,y){return exp(mul(y,log(x)))}
|
||
var
|
||
Stdlib_complex=
|
||
[0,
|
||
zero$4,
|
||
one$4,
|
||
i,
|
||
neg,
|
||
conj,
|
||
add$1,
|
||
sub$4,
|
||
mul,
|
||
inv,
|
||
div,
|
||
sqrt,
|
||
norm2,
|
||
norm,
|
||
arg,
|
||
polar,
|
||
exp,
|
||
log,
|
||
pow];
|
||
caml_register_global(797,Stdlib_complex,"Stdlib__complex");
|
||
var
|
||
Stdlib_arrayLabels=
|
||
[0,
|
||
init$2,
|
||
create_matrix,
|
||
create_matrix,
|
||
append$0,
|
||
concat$1,
|
||
sub$1,
|
||
copy$1,
|
||
fill$0,
|
||
blit$1,
|
||
to_list$1,
|
||
of_list,
|
||
iter$5,
|
||
map$5,
|
||
iteri$2,
|
||
mapi$2,
|
||
fold_left$1,
|
||
fold_right$0,
|
||
iter2$0,
|
||
map2$0,
|
||
exists$0,
|
||
for_all$0,
|
||
mem$0,
|
||
memq$0,
|
||
make_float,
|
||
sort,
|
||
fast_sort$0,
|
||
fast_sort$0,
|
||
to_seq$4,
|
||
to_seqi$1,
|
||
of_seq$2,
|
||
Floatarray];
|
||
caml_register_global(798,Stdlib_arrayLabels,"Stdlib__arrayLabels");
|
||
var
|
||
Stdlib_listLabels=
|
||
[0,
|
||
length,
|
||
hd,
|
||
compare_lengths,
|
||
compare_length_with,
|
||
cons,
|
||
tl,
|
||
nth,
|
||
nth_opt,
|
||
rev,
|
||
init,
|
||
append,
|
||
rev_append,
|
||
flatten,
|
||
flatten,
|
||
iter$2,
|
||
iteri,
|
||
map$2,
|
||
mapi,
|
||
rev_map,
|
||
filter_map$0,
|
||
concat_map,
|
||
fold_left$0,
|
||
fold_right,
|
||
iter2,
|
||
map2,
|
||
rev_map2,
|
||
fold_left2,
|
||
fold_right2,
|
||
for_all,
|
||
exists,
|
||
for_all2,
|
||
exists2,
|
||
mem,
|
||
memq,
|
||
find,
|
||
find_opt,
|
||
find_map,
|
||
find_all,
|
||
find_all,
|
||
partition,
|
||
assoc,
|
||
assoc_opt,
|
||
assq,
|
||
assq_opt,
|
||
mem_assoc,
|
||
mem_assq,
|
||
remove_assoc,
|
||
remove_assq,
|
||
split,
|
||
combine,
|
||
fast_sort,
|
||
fast_sort,
|
||
fast_sort,
|
||
sort_uniq,
|
||
merge,
|
||
to_seq$1,
|
||
of_seq];
|
||
caml_register_global(799,Stdlib_listLabels,"Stdlib__listLabels");
|
||
var
|
||
Stdlib_bytesLabels=
|
||
[0,
|
||
make,
|
||
init$0,
|
||
empty$0,
|
||
copy,
|
||
of_string,
|
||
to_string$1,
|
||
sub,
|
||
sub_string,
|
||
extend,
|
||
fill,
|
||
blit,
|
||
blit$0,
|
||
concat,
|
||
cat,
|
||
iter$3,
|
||
iteri$0,
|
||
map$3,
|
||
mapi$0,
|
||
trim,
|
||
escaped$0,
|
||
index,
|
||
index_opt,
|
||
rindex,
|
||
rindex_opt,
|
||
index_from,
|
||
index_from_opt,
|
||
rindex_from,
|
||
rindex_from_opt,
|
||
contains,
|
||
contains_from,
|
||
rcontains_from,
|
||
uppercase$0,
|
||
lowercase$0,
|
||
capitalize,
|
||
uncapitalize,
|
||
uppercase_ascii$0,
|
||
lowercase_ascii$0,
|
||
capitalize_ascii,
|
||
uncapitalize_ascii,
|
||
compare$4,
|
||
equal$4,
|
||
to_seq$2,
|
||
to_seqi,
|
||
of_seq$0,
|
||
get_uint8,
|
||
get_int8,
|
||
get_uint16_ne,
|
||
get_uint16_be,
|
||
get_uint16_le,
|
||
get_int16_ne,
|
||
get_int16_be,
|
||
get_int16_le,
|
||
get_int32_ne,
|
||
get_int32_be,
|
||
get_int32_le,
|
||
get_int64_ne,
|
||
get_int64_be,
|
||
get_int64_le,
|
||
set_uint8,
|
||
set_int8,
|
||
set_uint16_ne,
|
||
set_int16_be,
|
||
set_int16_le,
|
||
set_int16_ne,
|
||
set_int16_be,
|
||
set_int16_le,
|
||
set_int32_ne,
|
||
set_int32_be,
|
||
set_int32_le,
|
||
set_int64_ne,
|
||
set_int64_be,
|
||
set_int64_le,
|
||
unsafe_to_string,
|
||
unsafe_of_string];
|
||
caml_register_global(800,Stdlib_bytesLabels,"Stdlib__bytesLabels");
|
||
var
|
||
Stdlib_stringLabels=
|
||
[0,
|
||
make$0,
|
||
init$1,
|
||
copy$0,
|
||
sub$0,
|
||
fill,
|
||
blit$0,
|
||
concat$0,
|
||
iter$4,
|
||
iteri$1,
|
||
map$4,
|
||
mapi$1,
|
||
trim$0,
|
||
escaped$1,
|
||
index$0,
|
||
index_opt$0,
|
||
rindex$0,
|
||
rindex_opt$0,
|
||
index_from$0,
|
||
index_from_opt$0,
|
||
rindex_from$0,
|
||
rindex_from_opt$0,
|
||
contains$0,
|
||
contains_from$0,
|
||
rcontains_from$0,
|
||
uppercase$1,
|
||
lowercase$1,
|
||
capitalize$0,
|
||
uncapitalize$0,
|
||
uppercase_ascii$1,
|
||
lowercase_ascii$1,
|
||
capitalize_ascii$0,
|
||
uncapitalize_ascii$0,
|
||
compare$5,
|
||
equal$5,
|
||
split_on_char,
|
||
to_seq$3,
|
||
to_seqi$0,
|
||
of_seq$1];
|
||
caml_register_global(801,Stdlib_stringLabels,"Stdlib__stringLabels");
|
||
var Stdlib_moreLabels=[0,Stdlib_hashtbl,Stdlib_map,Stdlib_set];
|
||
caml_register_global(802,Stdlib_moreLabels,"Stdlib__moreLabels");
|
||
var Stdlib_stdLabels=[0];
|
||
caml_register_global(803,Stdlib_stdLabels,"Stdlib__stdLabels");
|
||
var enabled=caml_spacetime_enabled(0);
|
||
function if_spacetime_enabled(f){return enabled?caml_call1(f,0):0}
|
||
function create$8(path)
|
||
{if(caml_spacetime_enabled(0))
|
||
{var channel=open_out(path),t=[0,channel,0];
|
||
caml_spacetime_only_works_for_(t[1]);
|
||
return t}
|
||
return [0,stdout,1]}
|
||
function save_event(time,t,event_name)
|
||
{return if_spacetime_enabled
|
||
(function(param)
|
||
{return caml_spacetime_only_works_for_(time,t[1],event_name)})}
|
||
function save_and_close(time,t)
|
||
{return if_spacetime_enabled
|
||
(function(param)
|
||
{if(t[2])failwith(cst_Series_is_closed);
|
||
caml_spacetime_only_works_for_(time,t[1]);
|
||
close_out(t[1]);
|
||
t[2] = 1;
|
||
return 0})}
|
||
var Series=[0,create$8,save_event,save_and_close];
|
||
function take$0(time,param)
|
||
{var channel=param[1],closed=param[2];
|
||
return if_spacetime_enabled
|
||
(function(param)
|
||
{if(closed)failwith(cst_Series_is_closed$0);
|
||
runtime.caml_gc_minor(0);
|
||
return caml_spacetime_only_works_for_(time,channel)})}
|
||
var Snapshot=[0,take$0];
|
||
function save_event_for_automatic_snaps(event_name)
|
||
{return if_spacetime_enabled
|
||
(function(param)
|
||
{return caml_spacetime_only_works_for_(event_name)})}
|
||
var
|
||
Stdlib_spacetime=
|
||
[0,enabled,Series,Snapshot,save_event_for_automatic_snaps];
|
||
caml_register_global(804,Stdlib_spacetime,"Stdlib__spacetime");
|
||
var
|
||
float32=0,
|
||
float64=1,
|
||
int8_signed=2,
|
||
int8_unsigned=3,
|
||
int16_signed=4,
|
||
int16_unsigned=5,
|
||
int32$1=6,
|
||
int64$1=7,
|
||
int$2=8,
|
||
nativeint$1=9,
|
||
complex32=10,
|
||
complex64=11,
|
||
char$0=12;
|
||
function kind_size_in_bytes(param)
|
||
{switch(param)
|
||
{case 0:return 4;
|
||
case 1:return 8;
|
||
case 2:return 1;
|
||
case 3:return 1;
|
||
case 4:return 2;
|
||
case 5:return 2;
|
||
case 6:return 4;
|
||
case 7:return 8;
|
||
case 8:return 4;
|
||
case 9:return 4;
|
||
case 10:return 8;
|
||
case 11:return 16;
|
||
default:return 1}}
|
||
var c_layout=0,fortran_layout=1;
|
||
function dims(a)
|
||
{var n=caml_ba_num_dims(a),d=caml_make_vect(n,0),_c$_=n - 1 | 0,_c__=0;
|
||
if(! (_c$_ < 0))
|
||
{var i=_c__;
|
||
for(;;)
|
||
{var _da_=runtime.caml_ba_dim(a,i);
|
||
caml_check_bound(d,i)[1 + i] = _da_;
|
||
var _db_=i + 1 | 0;
|
||
if(_c$_ !== i){var i=_db_;continue}
|
||
break}}
|
||
return d}
|
||
function size_in_bytes(arr)
|
||
{var _c9_=fold_left$1(caml_mul,1,dims(arr));
|
||
return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_c9_)}
|
||
var Genarray=[0,dims,size_in_bytes];
|
||
function create$9(kind,layout){return caml_ba_create(kind,layout,[0])}
|
||
function get$1(arr){return runtime.caml_ba_get_generic(arr,[0])}
|
||
function set$0(arr)
|
||
{var _c7_=[0];
|
||
return function(_c8_){return runtime.caml_ba_set_generic(arr,_c7_,_c8_)}}
|
||
function size_in_bytes$0(arr)
|
||
{return kind_size_in_bytes(caml_ba_kind(arr))}
|
||
function of_value(kind,layout,v)
|
||
{var a=create$9(kind,layout);caml_call1(set$0(a),v);return a}
|
||
function create$10(kind,layout,dim)
|
||
{return caml_ba_create(kind,layout,[0,dim])}
|
||
function size_in_bytes$1(arr)
|
||
{var _c6_=caml_ba_dim_1(arr);
|
||
return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_c6_)}
|
||
function slice(a,n)
|
||
{var match=runtime.caml_ba_layout(a);
|
||
return match?caml_ba_slice(a,[0,n]):caml_ba_slice(a,[0,n])}
|
||
function of_array(kind,layout,data)
|
||
{var
|
||
ba=create$10(kind,layout,data.length - 1),
|
||
ofs=layout?1:0,
|
||
_c4_=data.length - 1 - 1 | 0,
|
||
_c3_=0;
|
||
if(! (_c4_ < 0))
|
||
{var i=_c3_;
|
||
for(;;)
|
||
{runtime.caml_ba_set_1
|
||
(ba,i + ofs | 0,caml_check_bound(data,i)[1 + i]);
|
||
var _c5_=i + 1 | 0;
|
||
if(_c4_ !== i){var i=_c5_;continue}
|
||
break}}
|
||
return ba}
|
||
function create$11(kind,layout,dim1,dim2)
|
||
{return caml_ba_create(kind,layout,[0,dim1,dim2])}
|
||
function size_in_bytes$2(arr)
|
||
{var _c1_=caml_ba_dim_2(arr),_c2_=caml_ba_dim_1(arr);
|
||
return caml_mul
|
||
(caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_c2_),_c1_)}
|
||
function slice_left(a,n){return caml_ba_slice(a,[0,n])}
|
||
function slice_right(a,n){return caml_ba_slice(a,[0,n])}
|
||
function of_array$0(kind,layout,data)
|
||
{var
|
||
dim1=data.length - 1,
|
||
dim2=0 === dim1?0:caml_check_bound(data,0)[1].length - 1,
|
||
ba=create$11(kind,layout,dim1,dim2),
|
||
ofs=layout?1:0,
|
||
_cW_=dim1 - 1 | 0,
|
||
_cV_=0;
|
||
if(! (_cW_ < 0))
|
||
{var i=_cV_;
|
||
for(;;)
|
||
{var row=caml_check_bound(data,i)[1 + i];
|
||
if(row.length - 1 !== dim2)
|
||
invalid_arg(cst_Bigarray_Array2_of_array_n);
|
||
var _cY_=dim2 - 1 | 0,_cX_=0;
|
||
if(! (_cY_ < 0))
|
||
{var j=_cX_;
|
||
for(;;)
|
||
{runtime.caml_ba_set_2
|
||
(ba,i + ofs | 0,j + ofs | 0,caml_check_bound(row,j)[1 + j]);
|
||
var _c0_=j + 1 | 0;
|
||
if(_cY_ !== j){var j=_c0_;continue}
|
||
break}}
|
||
var _cZ_=i + 1 | 0;
|
||
if(_cW_ !== i){var i=_cZ_;continue}
|
||
break}}
|
||
return ba}
|
||
function create$12(kind,layout,dim1,dim2,dim3)
|
||
{return caml_ba_create(kind,layout,[0,dim1,dim2,dim3])}
|
||
function size_in_bytes$3(arr)
|
||
{var
|
||
_cS_=runtime.caml_ba_dim_3(arr),
|
||
_cT_=caml_ba_dim_2(arr),
|
||
_cU_=caml_ba_dim_1(arr);
|
||
return caml_mul
|
||
(caml_mul
|
||
(caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_cU_),_cT_),
|
||
_cS_)}
|
||
function slice_left_1(a,n,m){return caml_ba_slice(a,[0,n,m])}
|
||
function slice_right_1(a,n,m){return caml_ba_slice(a,[0,n,m])}
|
||
function slice_left_2(a,n){return caml_ba_slice(a,[0,n])}
|
||
function slice_right_2(a,n){return caml_ba_slice(a,[0,n])}
|
||
function of_array$1(kind,layout,data)
|
||
{var
|
||
dim1=data.length - 1,
|
||
dim2=0 === dim1?0:caml_check_bound(data,0)[1].length - 1,
|
||
dim3=
|
||
0 === dim2
|
||
?0
|
||
:caml_check_bound(caml_check_bound(data,0)[1],0)[1].length - 1,
|
||
ba=create$12(kind,layout,dim1,dim2,dim3),
|
||
ofs=layout?1:0,
|
||
_cK_=dim1 - 1 | 0,
|
||
_cJ_=0;
|
||
if(! (_cK_ < 0))
|
||
{var i=_cJ_;
|
||
for(;;)
|
||
{var row=caml_check_bound(data,i)[1 + i];
|
||
if(row.length - 1 !== dim2)
|
||
invalid_arg(cst_Bigarray_Array3_of_array_n);
|
||
var _cM_=dim2 - 1 | 0,_cL_=0;
|
||
if(! (_cM_ < 0))
|
||
{var j=_cL_;
|
||
for(;;)
|
||
{var col=caml_check_bound(row,j)[1 + j];
|
||
if(col.length - 1 !== dim3)
|
||
invalid_arg(cst_Bigarray_Array3_of_array_n$0);
|
||
var _cP_=dim3 - 1 | 0,_cO_=0;
|
||
if(! (_cP_ < 0))
|
||
{var k=_cO_;
|
||
for(;;)
|
||
{runtime.caml_ba_set_3
|
||
(ba,
|
||
i + ofs | 0,
|
||
j + ofs | 0,
|
||
k + ofs | 0,
|
||
caml_check_bound(col,k)[1 + k]);
|
||
var _cR_=k + 1 | 0;
|
||
if(_cP_ !== k){var k=_cR_;continue}
|
||
break}}
|
||
var _cQ_=j + 1 | 0;
|
||
if(_cM_ !== j){var j=_cQ_;continue}
|
||
break}}
|
||
var _cN_=i + 1 | 0;
|
||
if(_cK_ !== i){var i=_cN_;continue}
|
||
break}}
|
||
return ba}
|
||
function array0_of_genarray(a)
|
||
{return 0 === caml_ba_num_dims(a)
|
||
?a
|
||
:invalid_arg(cst_Bigarray_array0_of_genarra)}
|
||
function array1_of_genarray(a)
|
||
{return 1 === caml_ba_num_dims(a)
|
||
?a
|
||
:invalid_arg(cst_Bigarray_array1_of_genarra)}
|
||
function array2_of_genarray(a)
|
||
{return 2 === caml_ba_num_dims(a)
|
||
?a
|
||
:invalid_arg(cst_Bigarray_array2_of_genarra)}
|
||
function array3_of_genarray(a)
|
||
{return 3 === caml_ba_num_dims(a)
|
||
?a
|
||
:invalid_arg(cst_Bigarray_array3_of_genarra)}
|
||
function reshape_0(a){return caml_ba_reshape(a,[0])}
|
||
function reshape_1(a,dim1){return caml_ba_reshape(a,[0,dim1])}
|
||
function reshape_2(a,dim1,dim2){return caml_ba_reshape(a,[0,dim1,dim2])}
|
||
function reshape_3(a,dim1,dim2,dim3)
|
||
{return caml_ba_reshape(a,[0,dim1,dim2,dim3])}
|
||
var
|
||
Stdlib_bigarray=
|
||
[0,
|
||
float32,
|
||
float64,
|
||
complex32,
|
||
complex64,
|
||
int8_signed,
|
||
int8_unsigned,
|
||
int16_signed,
|
||
int16_unsigned,
|
||
int$2,
|
||
int32$1,
|
||
int64$1,
|
||
nativeint$1,
|
||
char$0,
|
||
kind_size_in_bytes,
|
||
c_layout,
|
||
fortran_layout,
|
||
Genarray,
|
||
[0,create$9,caml_ba_change_layout,size_in_bytes$0,get$1,set$0,of_value],
|
||
[0,create$10,caml_ba_change_layout,size_in_bytes$1,slice,of_array],
|
||
[0,
|
||
create$11,
|
||
caml_ba_change_layout,
|
||
size_in_bytes$2,
|
||
slice_left,
|
||
slice_right,
|
||
of_array$0],
|
||
[0,
|
||
create$12,
|
||
caml_ba_change_layout,
|
||
size_in_bytes$3,
|
||
slice_left_1,
|
||
slice_right_1,
|
||
slice_left_2,
|
||
slice_right_2,
|
||
of_array$1],
|
||
array0_of_genarray,
|
||
array1_of_genarray,
|
||
array2_of_genarray,
|
||
array3_of_genarray,
|
||
caml_ba_reshape,
|
||
reshape_0,
|
||
reshape_1,
|
||
reshape_2,
|
||
reshape_3];
|
||
caml_register_global(805,Stdlib_bigarray,"Stdlib__bigarray");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# 1 "../inventaire_linge/.inventaire_linge.objs/inventaire_linge.cma.js"
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
var
|
||
runtime=joo_global_object.jsoo_runtime,
|
||
caml_list_of_js_array=runtime.caml_list_of_js_array,
|
||
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
|
||
cst_Chambre_1=caml_string_of_jsbytes("Chambre 1"),
|
||
cst_Chambre_2=caml_string_of_jsbytes("Chambre 2"),
|
||
cst_Chambre_3=caml_string_of_jsbytes("Chambre 3"),
|
||
cst_S_jour=caml_string_of_jsbytes("S\xc3\xa9jour"),
|
||
cst_Salle_de_bains_1=caml_string_of_jsbytes("Salle de bains 1"),
|
||
cst_Salle_de_bains_2=caml_string_of_jsbytes("Salle de bains 2"),
|
||
cst_ch1=caml_string_of_jsbytes("ch1"),
|
||
cst_ch2=caml_string_of_jsbytes("ch2"),
|
||
cst_ch3=caml_string_of_jsbytes("ch3"),
|
||
cst_sj=caml_string_of_jsbytes("sj"),
|
||
cst_sdb1=caml_string_of_jsbytes("sdb1"),
|
||
cst_sdb2=caml_string_of_jsbytes("sdb2"),
|
||
tarif=caml_string_of_jsbytes("\xc3\x89t\xc3\xa9 2020"),
|
||
destinataires=
|
||
caml_string_of_jsbytes("dubuval@gmail.com,guy.grange@wanadoo.fr"),
|
||
pieces=[0,0,[0,1,[0,2,[0,3,[0,4,[0,5,0]]]]]],
|
||
fournitures=
|
||
caml_list_of_js_array
|
||
([[0,
|
||
caml_string_of_jsbytes("dh80"),
|
||
caml_string_of_jsbytes("Drap housse 80 cm"),
|
||
7,
|
||
[0,[0,0,2],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("dh90"),
|
||
caml_string_of_jsbytes("Drap housse 90 cm"),
|
||
7,
|
||
[0,[0,2,4],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("dh140"),
|
||
caml_string_of_jsbytes("Drap housse 140 cm"),
|
||
15,
|
||
[0,[0,1,1],[0,[0,3,1],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("dhbb"),
|
||
caml_string_of_jsbytes("Drap housse b\xc3\xa9b\xc3\xa9"),
|
||
3,
|
||
[0,[0,0,1],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("hc1p"),
|
||
caml_string_of_jsbytes("Housse de couette 1 place"),
|
||
10,
|
||
[0,[0,0,2],[0,[0,2,4],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("hc2p"),
|
||
caml_string_of_jsbytes("Housse de couette 2 places"),
|
||
16,
|
||
[0,[0,1,1],[0,[0,3,1],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("hcbb"),
|
||
caml_string_of_jsbytes("Housse de couette b\xc3\xa9b\xc3\xa9"),
|
||
4,
|
||
[0,[0,0,1],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("litbb"),
|
||
caml_string_of_jsbytes("Lit b\xc3\xa9b\xc3\xa9"),
|
||
10,
|
||
[0,[0,0,1],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("pm80"),
|
||
caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 80 cm"),
|
||
0,
|
||
[0,[0,0,2],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("pm90"),
|
||
caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 90 cm"),
|
||
0,
|
||
[0,[0,2,4],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("pm140"),
|
||
caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 140 cm"),
|
||
0,
|
||
[0,[0,1,1],[0,[0,3,1],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("pmbb"),
|
||
caml_string_of_jsbytes("Prot\xc3\xa8ge matelas b\xc3\xa9b\xc3\xa9"),
|
||
0,
|
||
[0,[0,0,1],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("taie"),
|
||
caml_string_of_jsbytes("Taie d\xe2\x80\x99oreiller"),
|
||
3,
|
||
[0,[0,0,4],[0,[0,1,4],[0,[0,2,8],[0,[0,3,4],0]]]]],
|
||
[0,
|
||
caml_string_of_jsbytes("douche"),
|
||
caml_string_of_jsbytes("Drap de douche"),
|
||
4,
|
||
[0,[0,4,3],[0,[0,5,3],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("gant"),
|
||
caml_string_of_jsbytes("Gant de toilette"),
|
||
1,
|
||
[0,[0,4,4],[0,[0,5,6],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("serv"),
|
||
caml_string_of_jsbytes("Serviette de toilette"),
|
||
3,
|
||
[0,[0,4,4],[0,[0,5,6],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("inv"),
|
||
caml_string_of_jsbytes("Serviette invit\xc3\xa9s"),
|
||
3,
|
||
[0,[0,4,1],[0,[0,5,1],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("tapis"),
|
||
caml_string_of_jsbytes("Tapis de douche"),
|
||
3,
|
||
[0,[0,4,2],[0,[0,5,2],0]]],
|
||
[0,
|
||
caml_string_of_jsbytes("mains"),
|
||
caml_string_of_jsbytes("Essuie-mains"),
|
||
2,
|
||
[0,[0,3,2],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("table"),
|
||
caml_string_of_jsbytes("Serviettes de table"),
|
||
2,
|
||
[0,[0,3,10],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("torchon"),
|
||
caml_string_of_jsbytes("Torchons \xc3\xa0 vaisselle"),
|
||
2,
|
||
[0,[0,3,2],0]],
|
||
[0,
|
||
caml_string_of_jsbytes("microfibre"),
|
||
caml_string_of_jsbytes("Torchons microfibre"),
|
||
0,
|
||
[0,[0,4,2],[0,[0,5,2],[0,[0,3,2],0]]]]]);
|
||
function short_string_of_piece(param)
|
||
{switch(param)
|
||
{case 0:return cst_ch1;
|
||
case 1:return cst_ch2;
|
||
case 2:return cst_ch3;
|
||
case 3:return cst_sj;
|
||
case 4:return cst_sdb1;
|
||
default:return cst_sdb2}}
|
||
function long_string_of_piece(param)
|
||
{switch(param)
|
||
{case 0:return cst_Chambre_1;
|
||
case 1:return cst_Chambre_2;
|
||
case 2:return cst_Chambre_3;
|
||
case 3:return cst_S_jour;
|
||
case 4:return cst_Salle_de_bains_1;
|
||
default:return cst_Salle_de_bains_2}}
|
||
var
|
||
Inventaire_linge=
|
||
[0,
|
||
tarif,
|
||
destinataires,
|
||
pieces,
|
||
short_string_of_piece,
|
||
long_string_of_piece,
|
||
fournitures];
|
||
runtime.caml_register_global(16,Inventaire_linge,"Inventaire_linge");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# 1 "../.js/js_of_ocaml/js_of_ocaml.cma.js"
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
var
|
||
runtime=joo_global_object.jsoo_runtime,
|
||
caml_float_of_string=runtime.caml_float_of_string,
|
||
caml_fresh_oo_id=runtime.caml_fresh_oo_id,
|
||
caml_int_of_string=runtime.caml_int_of_string,
|
||
caml_js_from_array=runtime.caml_js_from_array,
|
||
caml_js_get=runtime.caml_js_get,
|
||
caml_js_html_escape=runtime.caml_js_html_escape,
|
||
caml_js_set=runtime.caml_js_set,
|
||
caml_js_wrap_callback=runtime.caml_js_wrap_callback,
|
||
caml_js_wrap_meth_callback=runtime.caml_js_wrap_meth_callback,
|
||
caml_jsbytes_of_string=runtime.caml_jsbytes_of_string,
|
||
caml_jsstring_of_string=runtime.caml_jsstring_of_string,
|
||
caml_list_of_js_array=runtime.caml_list_of_js_array,
|
||
caml_ml_string_length=runtime.caml_ml_string_length,
|
||
caml_register_global=runtime.caml_register_global,
|
||
caml_string_compare=runtime.caml_string_compare,
|
||
caml_string_notequal=runtime.caml_string_notequal,
|
||
caml_string_of_array=runtime.caml_string_of_array,
|
||
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
|
||
caml_string_of_jsstring=runtime.caml_string_of_jsstring,
|
||
caml_wrap_exception=runtime.caml_wrap_exception;
|
||
function caml_call1(f,a0)
|
||
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
|
||
function caml_call2(f,a0,a1)
|
||
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
|
||
function caml_call3(f,a0,a1,a2)
|
||
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
|
||
function caml_call4(f,a0,a1,a2,a3)
|
||
{return f.length == 4
|
||
?f(a0,a1,a2,a3)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
|
||
function caml_call5(f,a0,a1,a2,a3,a4)
|
||
{return f.length == 5
|
||
?f(a0,a1,a2,a3,a4)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
|
||
var
|
||
global_data=runtime.caml_get_global_data(),
|
||
cst_parseFloat=caml_string_of_jsbytes("parseFloat"),
|
||
cst_parseInt=caml_string_of_jsbytes("parseInt"),
|
||
cst_Js_of_ocaml_Js_Error=caml_string_of_jsbytes("Js_of_ocaml__Js.Error"),
|
||
cst_jsError=caml_string_of_jsbytes("jsError"),
|
||
cst_can_t_retrieve_file_name_n=
|
||
caml_string_of_jsbytes("can't retrieve file name: not implemented"),
|
||
cst_endings=caml_string_of_jsbytes("endings"),
|
||
cst_type=caml_string_of_jsbytes("type"),
|
||
cst_loadstart=caml_string_of_jsbytes("loadstart"),
|
||
cst_progress=caml_string_of_jsbytes("progress"),
|
||
cst_abort=caml_string_of_jsbytes("abort"),
|
||
cst_error=caml_string_of_jsbytes("error"),
|
||
cst_load=caml_string_of_jsbytes("load"),
|
||
cst_loadend=caml_string_of_jsbytes("loadend"),
|
||
cst_a$1=caml_string_of_jsbytes("a"),
|
||
cst_area$1=caml_string_of_jsbytes("area"),
|
||
cst_audio$1=caml_string_of_jsbytes("audio"),
|
||
cst_base$1=caml_string_of_jsbytes("base"),
|
||
cst_blockquote$1=caml_string_of_jsbytes("blockquote"),
|
||
cst_body$1=caml_string_of_jsbytes("body"),
|
||
cst_br$1=caml_string_of_jsbytes("br"),
|
||
cst_button$1=caml_string_of_jsbytes("button"),
|
||
cst_canvas$1=caml_string_of_jsbytes("canvas"),
|
||
cst_caption$1=caml_string_of_jsbytes("caption"),
|
||
cst_col$1=caml_string_of_jsbytes("col"),
|
||
cst_colgroup$1=caml_string_of_jsbytes("colgroup"),
|
||
cst_del$1=caml_string_of_jsbytes("del"),
|
||
cst_div$1=caml_string_of_jsbytes("div"),
|
||
cst_dl$1=caml_string_of_jsbytes("dl"),
|
||
cst_embed$1=caml_string_of_jsbytes("embed"),
|
||
cst_fieldset$1=caml_string_of_jsbytes("fieldset"),
|
||
cst_form$1=caml_string_of_jsbytes("form"),
|
||
cst_frame$1=caml_string_of_jsbytes("frame"),
|
||
cst_frameset$1=caml_string_of_jsbytes("frameset"),
|
||
cst_h1$1=caml_string_of_jsbytes("h1"),
|
||
cst_h2$1=caml_string_of_jsbytes("h2"),
|
||
cst_h3$1=caml_string_of_jsbytes("h3"),
|
||
cst_h4$1=caml_string_of_jsbytes("h4"),
|
||
cst_h5$1=caml_string_of_jsbytes("h5"),
|
||
cst_h6$1=caml_string_of_jsbytes("h6"),
|
||
cst_head$1=caml_string_of_jsbytes("head"),
|
||
cst_hr$1=caml_string_of_jsbytes("hr"),
|
||
cst_html$1=caml_string_of_jsbytes("html"),
|
||
cst_iframe$1=caml_string_of_jsbytes("iframe"),
|
||
cst_img$1=caml_string_of_jsbytes("img"),
|
||
cst_input$2=caml_string_of_jsbytes("input"),
|
||
cst_ins$1=caml_string_of_jsbytes("ins"),
|
||
cst_label$1=caml_string_of_jsbytes("label"),
|
||
cst_legend$1=caml_string_of_jsbytes("legend"),
|
||
cst_li$1=caml_string_of_jsbytes("li"),
|
||
cst_link$1=caml_string_of_jsbytes("link"),
|
||
cst_map$1=caml_string_of_jsbytes("map"),
|
||
cst_meta$1=caml_string_of_jsbytes("meta"),
|
||
cst_object$1=caml_string_of_jsbytes("object"),
|
||
cst_ol$1=caml_string_of_jsbytes("ol"),
|
||
cst_optgroup$1=caml_string_of_jsbytes("optgroup"),
|
||
cst_option$1=caml_string_of_jsbytes("option"),
|
||
cst_p$1=caml_string_of_jsbytes("p"),
|
||
cst_param$1=caml_string_of_jsbytes("param"),
|
||
cst_pre$1=caml_string_of_jsbytes("pre"),
|
||
cst_q$1=caml_string_of_jsbytes("q"),
|
||
cst_script$1=caml_string_of_jsbytes("script"),
|
||
cst_select$2=caml_string_of_jsbytes("select"),
|
||
cst_style$1=caml_string_of_jsbytes("style"),
|
||
cst_table$1=caml_string_of_jsbytes("table"),
|
||
cst_tbody$1=caml_string_of_jsbytes("tbody"),
|
||
cst_td$1=caml_string_of_jsbytes("td"),
|
||
cst_textarea$1=caml_string_of_jsbytes("textarea"),
|
||
cst_tfoot$1=caml_string_of_jsbytes("tfoot"),
|
||
cst_th$1=caml_string_of_jsbytes("th"),
|
||
cst_thead$1=caml_string_of_jsbytes("thead"),
|
||
cst_title$1=caml_string_of_jsbytes("title"),
|
||
cst_tr$1=caml_string_of_jsbytes("tr"),
|
||
cst_ul$1=caml_string_of_jsbytes("ul"),
|
||
cst_video$1=caml_string_of_jsbytes("video"),
|
||
cst_KeyH=caml_string_of_jsbytes("KeyH"),
|
||
cst_Digit6=caml_string_of_jsbytes("Digit6"),
|
||
cst_BrowserRefresh=caml_string_of_jsbytes("BrowserRefresh"),
|
||
cst_Backslash=caml_string_of_jsbytes("Backslash"),
|
||
cst_AltLeft=caml_string_of_jsbytes("AltLeft"),
|
||
cst_AltRight=caml_string_of_jsbytes("AltRight"),
|
||
cst_ArrowDown=caml_string_of_jsbytes("ArrowDown"),
|
||
cst_ArrowLeft=caml_string_of_jsbytes("ArrowLeft"),
|
||
cst_ArrowRight=caml_string_of_jsbytes("ArrowRight"),
|
||
cst_ArrowUp=caml_string_of_jsbytes("ArrowUp"),
|
||
cst_Backquote=caml_string_of_jsbytes("Backquote"),
|
||
cst_Backspace=caml_string_of_jsbytes("Backspace"),
|
||
cst_BracketLeft=caml_string_of_jsbytes("BracketLeft"),
|
||
cst_BracketRight=caml_string_of_jsbytes("BracketRight"),
|
||
cst_BrowserBack=caml_string_of_jsbytes("BrowserBack"),
|
||
cst_BrowserFavorites=caml_string_of_jsbytes("BrowserFavorites"),
|
||
cst_BrowserForward=caml_string_of_jsbytes("BrowserForward"),
|
||
cst_BrowserHome=caml_string_of_jsbytes("BrowserHome"),
|
||
cst_Delete=caml_string_of_jsbytes("Delete"),
|
||
cst_BrowserSearch=caml_string_of_jsbytes("BrowserSearch"),
|
||
cst_BrowserStop=caml_string_of_jsbytes("BrowserStop"),
|
||
cst_CapsLock=caml_string_of_jsbytes("CapsLock"),
|
||
cst_Comma=caml_string_of_jsbytes("Comma"),
|
||
cst_ContextMenu=caml_string_of_jsbytes("ContextMenu"),
|
||
cst_ControlLeft=caml_string_of_jsbytes("ControlLeft"),
|
||
cst_ControlRight=caml_string_of_jsbytes("ControlRight"),
|
||
cst_Digit0=caml_string_of_jsbytes("Digit0"),
|
||
cst_Digit1=caml_string_of_jsbytes("Digit1"),
|
||
cst_Digit2=caml_string_of_jsbytes("Digit2"),
|
||
cst_Digit3=caml_string_of_jsbytes("Digit3"),
|
||
cst_Digit4=caml_string_of_jsbytes("Digit4"),
|
||
cst_Digit5=caml_string_of_jsbytes("Digit5"),
|
||
cst_F6=caml_string_of_jsbytes("F6"),
|
||
cst_F1=caml_string_of_jsbytes("F1"),
|
||
cst_Digit7=caml_string_of_jsbytes("Digit7"),
|
||
cst_Digit8=caml_string_of_jsbytes("Digit8"),
|
||
cst_Digit9=caml_string_of_jsbytes("Digit9"),
|
||
cst_End=caml_string_of_jsbytes("End"),
|
||
cst_Enter=caml_string_of_jsbytes("Enter"),
|
||
cst_Equal=caml_string_of_jsbytes("Equal"),
|
||
cst_Escape=caml_string_of_jsbytes("Escape"),
|
||
cst_F10=caml_string_of_jsbytes("F10"),
|
||
cst_F11=caml_string_of_jsbytes("F11"),
|
||
cst_F12=caml_string_of_jsbytes("F12"),
|
||
cst_F2=caml_string_of_jsbytes("F2"),
|
||
cst_F3=caml_string_of_jsbytes("F3"),
|
||
cst_F4=caml_string_of_jsbytes("F4"),
|
||
cst_F5=caml_string_of_jsbytes("F5"),
|
||
cst_KeyA=caml_string_of_jsbytes("KeyA"),
|
||
cst_F7=caml_string_of_jsbytes("F7"),
|
||
cst_F8=caml_string_of_jsbytes("F8"),
|
||
cst_F9=caml_string_of_jsbytes("F9"),
|
||
cst_Home=caml_string_of_jsbytes("Home"),
|
||
cst_Insert=caml_string_of_jsbytes("Insert"),
|
||
cst_IntlBackslash=caml_string_of_jsbytes("IntlBackslash"),
|
||
cst_IntlYen=caml_string_of_jsbytes("IntlYen"),
|
||
cst_KeyB=caml_string_of_jsbytes("KeyB"),
|
||
cst_KeyC=caml_string_of_jsbytes("KeyC"),
|
||
cst_KeyD=caml_string_of_jsbytes("KeyD"),
|
||
cst_KeyE=caml_string_of_jsbytes("KeyE"),
|
||
cst_KeyF=caml_string_of_jsbytes("KeyF"),
|
||
cst_KeyG=caml_string_of_jsbytes("KeyG"),
|
||
cst_Numpad4=caml_string_of_jsbytes("Numpad4"),
|
||
cst_KeyX=caml_string_of_jsbytes("KeyX"),
|
||
cst_KeyP=caml_string_of_jsbytes("KeyP"),
|
||
cst_KeyI=caml_string_of_jsbytes("KeyI"),
|
||
cst_KeyJ=caml_string_of_jsbytes("KeyJ"),
|
||
cst_KeyK=caml_string_of_jsbytes("KeyK"),
|
||
cst_KeyL=caml_string_of_jsbytes("KeyL"),
|
||
cst_KeyM=caml_string_of_jsbytes("KeyM"),
|
||
cst_KeyN=caml_string_of_jsbytes("KeyN"),
|
||
cst_KeyO=caml_string_of_jsbytes("KeyO"),
|
||
cst_KeyQ=caml_string_of_jsbytes("KeyQ"),
|
||
cst_KeyR=caml_string_of_jsbytes("KeyR"),
|
||
cst_KeyS=caml_string_of_jsbytes("KeyS"),
|
||
cst_KeyT=caml_string_of_jsbytes("KeyT"),
|
||
cst_KeyU=caml_string_of_jsbytes("KeyU"),
|
||
cst_KeyV=caml_string_of_jsbytes("KeyV"),
|
||
cst_KeyW=caml_string_of_jsbytes("KeyW"),
|
||
cst_MetaRight=caml_string_of_jsbytes("MetaRight"),
|
||
cst_KeyY=caml_string_of_jsbytes("KeyY"),
|
||
cst_KeyZ=caml_string_of_jsbytes("KeyZ"),
|
||
cst_MediaPlayPause=caml_string_of_jsbytes("MediaPlayPause"),
|
||
cst_MediaStop=caml_string_of_jsbytes("MediaStop"),
|
||
cst_MediaTrackNext=caml_string_of_jsbytes("MediaTrackNext"),
|
||
cst_MediaTrackPrevious=caml_string_of_jsbytes("MediaTrackPrevious"),
|
||
cst_MetaLeft=caml_string_of_jsbytes("MetaLeft"),
|
||
cst_Minus=caml_string_of_jsbytes("Minus"),
|
||
cst_NumLock=caml_string_of_jsbytes("NumLock"),
|
||
cst_Numpad0=caml_string_of_jsbytes("Numpad0"),
|
||
cst_Numpad1=caml_string_of_jsbytes("Numpad1"),
|
||
cst_Numpad2=caml_string_of_jsbytes("Numpad2"),
|
||
cst_Numpad3=caml_string_of_jsbytes("Numpad3"),
|
||
cst_PageUp=caml_string_of_jsbytes("PageUp"),
|
||
cst_NumpadDivide=caml_string_of_jsbytes("NumpadDivide"),
|
||
cst_Numpad5=caml_string_of_jsbytes("Numpad5"),
|
||
cst_Numpad6=caml_string_of_jsbytes("Numpad6"),
|
||
cst_Numpad7=caml_string_of_jsbytes("Numpad7"),
|
||
cst_Numpad8=caml_string_of_jsbytes("Numpad8"),
|
||
cst_Numpad9=caml_string_of_jsbytes("Numpad9"),
|
||
cst_NumpadAdd=caml_string_of_jsbytes("NumpadAdd"),
|
||
cst_NumpadDecimal=caml_string_of_jsbytes("NumpadDecimal"),
|
||
cst_NumpadEnter=caml_string_of_jsbytes("NumpadEnter"),
|
||
cst_NumpadEqual=caml_string_of_jsbytes("NumpadEqual"),
|
||
cst_NumpadMultiply=caml_string_of_jsbytes("NumpadMultiply"),
|
||
cst_NumpadSubtract=caml_string_of_jsbytes("NumpadSubtract"),
|
||
cst_OSLeft=caml_string_of_jsbytes("OSLeft"),
|
||
cst_OSRight=caml_string_of_jsbytes("OSRight"),
|
||
cst_PageDown=caml_string_of_jsbytes("PageDown"),
|
||
cst_ShiftRight=caml_string_of_jsbytes("ShiftRight"),
|
||
cst_Pause=caml_string_of_jsbytes("Pause"),
|
||
cst_Period=caml_string_of_jsbytes("Period"),
|
||
cst_PrintScreen=caml_string_of_jsbytes("PrintScreen"),
|
||
cst_Quote=caml_string_of_jsbytes("Quote"),
|
||
cst_ScrollLock=caml_string_of_jsbytes("ScrollLock"),
|
||
cst_Semicolon=caml_string_of_jsbytes("Semicolon"),
|
||
cst_ShiftLeft=caml_string_of_jsbytes("ShiftLeft"),
|
||
cst_Slash=caml_string_of_jsbytes("Slash"),
|
||
cst_Space=caml_string_of_jsbytes("Space"),
|
||
cst_Tab=caml_string_of_jsbytes("Tab"),
|
||
cst_VolumeDown=caml_string_of_jsbytes("VolumeDown"),
|
||
cst_VolumeMute=caml_string_of_jsbytes("VolumeMute"),
|
||
cst_VolumeUp=caml_string_of_jsbytes("VolumeUp"),
|
||
cst_mouseout$0=caml_string_of_jsbytes("mouseout"),
|
||
cst_mouseover$0=caml_string_of_jsbytes("mouseover"),
|
||
cst_video$0=caml_string_of_jsbytes("video"),
|
||
cst_audio$0=caml_string_of_jsbytes("audio"),
|
||
cst_ul$0=caml_string_of_jsbytes("ul"),
|
||
cst_tr$0=caml_string_of_jsbytes("tr"),
|
||
cst_title$0=caml_string_of_jsbytes("title"),
|
||
cst_thead$0=caml_string_of_jsbytes("thead"),
|
||
cst_th$0=caml_string_of_jsbytes("th"),
|
||
cst_tfoot$0=caml_string_of_jsbytes("tfoot"),
|
||
cst_textarea$0=caml_string_of_jsbytes("textarea"),
|
||
cst_td$0=caml_string_of_jsbytes("td"),
|
||
cst_tbody$0=caml_string_of_jsbytes("tbody"),
|
||
cst_table$0=caml_string_of_jsbytes("table"),
|
||
cst_style$0=caml_string_of_jsbytes("style"),
|
||
cst_select$1=caml_string_of_jsbytes("select"),
|
||
cst_script$0=caml_string_of_jsbytes("script"),
|
||
cst_q$0=caml_string_of_jsbytes("q"),
|
||
cst_pre$0=caml_string_of_jsbytes("pre"),
|
||
cst_param$0=caml_string_of_jsbytes("param"),
|
||
cst_p$0=caml_string_of_jsbytes("p"),
|
||
cst_option$0=caml_string_of_jsbytes("option"),
|
||
cst_optgroup$0=caml_string_of_jsbytes("optgroup"),
|
||
cst_ol$0=caml_string_of_jsbytes("ol"),
|
||
cst_object$0=caml_string_of_jsbytes("object"),
|
||
cst_meta$0=caml_string_of_jsbytes("meta"),
|
||
cst_map$0=caml_string_of_jsbytes("map"),
|
||
cst_link$0=caml_string_of_jsbytes("link"),
|
||
cst_li$0=caml_string_of_jsbytes("li"),
|
||
cst_legend$0=caml_string_of_jsbytes("legend"),
|
||
cst_label$0=caml_string_of_jsbytes("label"),
|
||
cst_ins$0=caml_string_of_jsbytes("ins"),
|
||
cst_input$1=caml_string_of_jsbytes("input"),
|
||
cst_img$0=caml_string_of_jsbytes("img"),
|
||
cst_iframe$0=caml_string_of_jsbytes("iframe"),
|
||
cst_html$0=caml_string_of_jsbytes("html"),
|
||
cst_hr$0=caml_string_of_jsbytes("hr"),
|
||
cst_head$0=caml_string_of_jsbytes("head"),
|
||
cst_h6$0=caml_string_of_jsbytes("h6"),
|
||
cst_h5$0=caml_string_of_jsbytes("h5"),
|
||
cst_h4$0=caml_string_of_jsbytes("h4"),
|
||
cst_h3$0=caml_string_of_jsbytes("h3"),
|
||
cst_h2$0=caml_string_of_jsbytes("h2"),
|
||
cst_h1$0=caml_string_of_jsbytes("h1"),
|
||
cst_frame$0=caml_string_of_jsbytes("frame"),
|
||
cst_frameset$0=caml_string_of_jsbytes("frameset"),
|
||
cst_form$0=caml_string_of_jsbytes("form"),
|
||
cst_embed$0=caml_string_of_jsbytes("embed"),
|
||
cst_fieldset$0=caml_string_of_jsbytes("fieldset"),
|
||
cst_dl$0=caml_string_of_jsbytes("dl"),
|
||
cst_div$0=caml_string_of_jsbytes("div"),
|
||
cst_del$0=caml_string_of_jsbytes("del"),
|
||
cst_colgroup$0=caml_string_of_jsbytes("colgroup"),
|
||
cst_col$0=caml_string_of_jsbytes("col"),
|
||
cst_caption$0=caml_string_of_jsbytes("caption"),
|
||
cst_canvas$0=caml_string_of_jsbytes("canvas"),
|
||
cst_button$0=caml_string_of_jsbytes("button"),
|
||
cst_br$0=caml_string_of_jsbytes("br"),
|
||
cst_body$0=caml_string_of_jsbytes("body"),
|
||
cst_blockquote$0=caml_string_of_jsbytes("blockquote"),
|
||
cst_base$0=caml_string_of_jsbytes("base"),
|
||
cst_area$0=caml_string_of_jsbytes("area"),
|
||
cst_a$0=caml_string_of_jsbytes("a"),
|
||
cst_canvas=caml_string_of_jsbytes("canvas"),
|
||
cst_video=caml_string_of_jsbytes("video"),
|
||
cst_audio=caml_string_of_jsbytes("audio"),
|
||
cst_iframe=caml_string_of_jsbytes("iframe"),
|
||
cst_frame=caml_string_of_jsbytes("frame"),
|
||
cst_frameset=caml_string_of_jsbytes("frameset"),
|
||
cst_address=caml_string_of_jsbytes("address"),
|
||
cst_noscript=caml_string_of_jsbytes("noscript"),
|
||
cst_dt=caml_string_of_jsbytes("dt"),
|
||
cst_dd=caml_string_of_jsbytes("dd"),
|
||
cst_abbr=caml_string_of_jsbytes("abbr"),
|
||
cst_var=caml_string_of_jsbytes("var"),
|
||
cst_kbd=caml_string_of_jsbytes("kbd"),
|
||
cst_samp=caml_string_of_jsbytes("samp"),
|
||
cst_code=caml_string_of_jsbytes("code"),
|
||
cst_dfn=caml_string_of_jsbytes("dfn"),
|
||
cst_cite=caml_string_of_jsbytes("cite"),
|
||
cst_strong=caml_string_of_jsbytes("strong"),
|
||
cst_em=caml_string_of_jsbytes("em"),
|
||
cst_small=caml_string_of_jsbytes("small"),
|
||
cst_big=caml_string_of_jsbytes("big"),
|
||
cst_b=caml_string_of_jsbytes("b"),
|
||
cst_i=caml_string_of_jsbytes("i"),
|
||
cst_tt=caml_string_of_jsbytes("tt"),
|
||
cst_span=caml_string_of_jsbytes("span"),
|
||
cst_sup=caml_string_of_jsbytes("sup"),
|
||
cst_sub=caml_string_of_jsbytes("sub"),
|
||
cst_td=caml_string_of_jsbytes("td"),
|
||
cst_th=caml_string_of_jsbytes("th"),
|
||
cst_tr=caml_string_of_jsbytes("tr"),
|
||
cst_tbody=caml_string_of_jsbytes("tbody"),
|
||
cst_tfoot=caml_string_of_jsbytes("tfoot"),
|
||
cst_thead=caml_string_of_jsbytes("thead"),
|
||
cst_colgroup=caml_string_of_jsbytes("colgroup"),
|
||
cst_col=caml_string_of_jsbytes("col"),
|
||
cst_caption=caml_string_of_jsbytes("caption"),
|
||
cst_table=caml_string_of_jsbytes("table"),
|
||
cst_script=caml_string_of_jsbytes("script"),
|
||
cst_area=caml_string_of_jsbytes("area"),
|
||
cst_map=caml_string_of_jsbytes("map"),
|
||
cst_param=caml_string_of_jsbytes("param"),
|
||
cst_object=caml_string_of_jsbytes("object"),
|
||
cst_img=caml_string_of_jsbytes("img"),
|
||
cst_a=caml_string_of_jsbytes("a"),
|
||
cst_del=caml_string_of_jsbytes("del"),
|
||
cst_ins=caml_string_of_jsbytes("ins"),
|
||
cst_hr=caml_string_of_jsbytes("hr"),
|
||
cst_br=caml_string_of_jsbytes("br"),
|
||
cst_pre=caml_string_of_jsbytes("pre"),
|
||
cst_blockquote=caml_string_of_jsbytes("blockquote"),
|
||
cst_q=caml_string_of_jsbytes("q"),
|
||
cst_h6=caml_string_of_jsbytes("h6"),
|
||
cst_h5=caml_string_of_jsbytes("h5"),
|
||
cst_h4=caml_string_of_jsbytes("h4"),
|
||
cst_h3=caml_string_of_jsbytes("h3"),
|
||
cst_h2=caml_string_of_jsbytes("h2"),
|
||
cst_h1=caml_string_of_jsbytes("h1"),
|
||
cst_p=caml_string_of_jsbytes("p"),
|
||
cst_embed=caml_string_of_jsbytes("embed"),
|
||
cst_div=caml_string_of_jsbytes("div"),
|
||
cst_li=caml_string_of_jsbytes("li"),
|
||
cst_dl=caml_string_of_jsbytes("dl"),
|
||
cst_ol=caml_string_of_jsbytes("ol"),
|
||
cst_ul=caml_string_of_jsbytes("ul"),
|
||
cst_legend=caml_string_of_jsbytes("legend"),
|
||
cst_fieldset=caml_string_of_jsbytes("fieldset"),
|
||
cst_label=caml_string_of_jsbytes("label"),
|
||
cst_button=caml_string_of_jsbytes("button"),
|
||
cst_textarea=caml_string_of_jsbytes("textarea"),
|
||
cst_input$0=caml_string_of_jsbytes("input"),
|
||
cst_select$0=caml_string_of_jsbytes("select"),
|
||
cst_option=caml_string_of_jsbytes("option"),
|
||
cst_optgroup=caml_string_of_jsbytes("optgroup"),
|
||
cst_form=caml_string_of_jsbytes("form"),
|
||
cst_body=caml_string_of_jsbytes("body"),
|
||
cst_style=caml_string_of_jsbytes("style"),
|
||
cst_base=caml_string_of_jsbytes("base"),
|
||
cst_meta=caml_string_of_jsbytes("meta"),
|
||
cst_title=caml_string_of_jsbytes("title"),
|
||
cst_link=caml_string_of_jsbytes("link"),
|
||
cst_head=caml_string_of_jsbytes("head"),
|
||
cst_html=caml_string_of_jsbytes("html"),
|
||
cst_click=caml_string_of_jsbytes("click"),
|
||
cst_dblclick=caml_string_of_jsbytes("dblclick"),
|
||
cst_mousedown=caml_string_of_jsbytes("mousedown"),
|
||
cst_mouseup=caml_string_of_jsbytes("mouseup"),
|
||
cst_mouseover=caml_string_of_jsbytes("mouseover"),
|
||
cst_mousemove=caml_string_of_jsbytes("mousemove"),
|
||
cst_mouseout=caml_string_of_jsbytes("mouseout"),
|
||
cst_keypress=caml_string_of_jsbytes("keypress"),
|
||
cst_keydown=caml_string_of_jsbytes("keydown"),
|
||
cst_keyup=caml_string_of_jsbytes("keyup"),
|
||
cst_mousewheel=caml_string_of_jsbytes("mousewheel"),
|
||
cst_DOMMouseScroll=caml_string_of_jsbytes("DOMMouseScroll"),
|
||
cst_touchstart=caml_string_of_jsbytes("touchstart"),
|
||
cst_touchmove=caml_string_of_jsbytes("touchmove"),
|
||
cst_touchend=caml_string_of_jsbytes("touchend"),
|
||
cst_touchcancel=caml_string_of_jsbytes("touchcancel"),
|
||
cst_dragstart=caml_string_of_jsbytes("dragstart"),
|
||
cst_dragend=caml_string_of_jsbytes("dragend"),
|
||
cst_dragenter=caml_string_of_jsbytes("dragenter"),
|
||
cst_dragover=caml_string_of_jsbytes("dragover"),
|
||
cst_dragleave=caml_string_of_jsbytes("dragleave"),
|
||
cst_drag=caml_string_of_jsbytes("drag"),
|
||
cst_drop=caml_string_of_jsbytes("drop"),
|
||
cst_hashchange=caml_string_of_jsbytes("hashchange"),
|
||
cst_change=caml_string_of_jsbytes("change"),
|
||
cst_input=caml_string_of_jsbytes("input"),
|
||
cst_timeupdate=caml_string_of_jsbytes("timeupdate"),
|
||
cst_submit=caml_string_of_jsbytes("submit"),
|
||
cst_scroll=caml_string_of_jsbytes("scroll"),
|
||
cst_focus=caml_string_of_jsbytes("focus"),
|
||
cst_blur=caml_string_of_jsbytes("blur"),
|
||
cst_load$0=caml_string_of_jsbytes("load"),
|
||
cst_unload=caml_string_of_jsbytes("unload"),
|
||
cst_beforeunload=caml_string_of_jsbytes("beforeunload"),
|
||
cst_resize=caml_string_of_jsbytes("resize"),
|
||
cst_orientationchange=caml_string_of_jsbytes("orientationchange"),
|
||
cst_popstate=caml_string_of_jsbytes("popstate"),
|
||
cst_error$0=caml_string_of_jsbytes("error"),
|
||
cst_abort$0=caml_string_of_jsbytes("abort"),
|
||
cst_select=caml_string_of_jsbytes("select"),
|
||
cst_online=caml_string_of_jsbytes("online"),
|
||
cst_offline=caml_string_of_jsbytes("offline"),
|
||
cst_checking=caml_string_of_jsbytes("checking"),
|
||
cst_noupdate=caml_string_of_jsbytes("noupdate"),
|
||
cst_downloading=caml_string_of_jsbytes("downloading"),
|
||
cst_progress$0=caml_string_of_jsbytes("progress"),
|
||
cst_updateready=caml_string_of_jsbytes("updateready"),
|
||
cst_cached=caml_string_of_jsbytes("cached"),
|
||
cst_obsolete=caml_string_of_jsbytes("obsolete"),
|
||
cst_DOMContentLoaded=caml_string_of_jsbytes("DOMContentLoaded"),
|
||
cst_animationstart=caml_string_of_jsbytes("animationstart"),
|
||
cst_animationend=caml_string_of_jsbytes("animationend"),
|
||
cst_animationiteration=caml_string_of_jsbytes("animationiteration"),
|
||
cst_animationcancel=caml_string_of_jsbytes("animationcancel"),
|
||
cst_canplay=caml_string_of_jsbytes("canplay"),
|
||
cst_canplaythrough=caml_string_of_jsbytes("canplaythrough"),
|
||
cst_durationchange=caml_string_of_jsbytes("durationchange"),
|
||
cst_emptied=caml_string_of_jsbytes("emptied"),
|
||
cst_ended=caml_string_of_jsbytes("ended"),
|
||
cst_gotpointercapture=caml_string_of_jsbytes("gotpointercapture"),
|
||
cst_loadeddata=caml_string_of_jsbytes("loadeddata"),
|
||
cst_loadedmetadata=caml_string_of_jsbytes("loadedmetadata"),
|
||
cst_loadstart$0=caml_string_of_jsbytes("loadstart"),
|
||
cst_lostpointercapture=caml_string_of_jsbytes("lostpointercapture"),
|
||
cst_pause=caml_string_of_jsbytes("pause"),
|
||
cst_play=caml_string_of_jsbytes("play"),
|
||
cst_playing=caml_string_of_jsbytes("playing"),
|
||
cst_pointerenter=caml_string_of_jsbytes("pointerenter"),
|
||
cst_pointercancel=caml_string_of_jsbytes("pointercancel"),
|
||
cst_pointerdown=caml_string_of_jsbytes("pointerdown"),
|
||
cst_pointerleave=caml_string_of_jsbytes("pointerleave"),
|
||
cst_pointermove=caml_string_of_jsbytes("pointermove"),
|
||
cst_pointerout=caml_string_of_jsbytes("pointerout"),
|
||
cst_pointerover=caml_string_of_jsbytes("pointerover"),
|
||
cst_pointerup=caml_string_of_jsbytes("pointerup"),
|
||
cst_ratechange=caml_string_of_jsbytes("ratechange"),
|
||
cst_seeked=caml_string_of_jsbytes("seeked"),
|
||
cst_seeking=caml_string_of_jsbytes("seeking"),
|
||
cst_stalled=caml_string_of_jsbytes("stalled"),
|
||
cst_suspend=caml_string_of_jsbytes("suspend"),
|
||
cst_volumechange=caml_string_of_jsbytes("volumechange"),
|
||
cst_waiting=caml_string_of_jsbytes("waiting"),
|
||
cst_Js_of_ocaml_Dom_html_Canva=
|
||
caml_string_of_jsbytes("Js_of_ocaml__Dom_html.Canvas_not_available"),
|
||
cst_checkbox=caml_string_of_jsbytes("checkbox"),
|
||
cst_file=caml_string_of_jsbytes("file"),
|
||
cst_password=caml_string_of_jsbytes("password"),
|
||
cst_radio=caml_string_of_jsbytes("radio"),
|
||
cst_reset=caml_string_of_jsbytes("reset"),
|
||
cst_submit$0=caml_string_of_jsbytes("submit"),
|
||
cst_text=caml_string_of_jsbytes("text"),
|
||
cst_readystatechange=caml_string_of_jsbytes("readystatechange"),
|
||
cst_loadstart$1=caml_string_of_jsbytes("loadstart"),
|
||
cst_progress$1=caml_string_of_jsbytes("progress"),
|
||
cst_abort$1=caml_string_of_jsbytes("abort"),
|
||
cst_error$1=caml_string_of_jsbytes("error"),
|
||
cst_load$1=caml_string_of_jsbytes("load"),
|
||
cst_timeout=caml_string_of_jsbytes("timeout"),
|
||
cst_loadend$0=caml_string_of_jsbytes("loadend"),
|
||
cst_Worker_onmessage_is_undefi$0=
|
||
caml_string_of_jsbytes("Worker.onmessage is undefined"),
|
||
cst_Worker_onmessage_is_undefi=
|
||
caml_string_of_jsbytes("Worker.onmessage is undefined"),
|
||
cst_Worker_import_scripts_is_u=
|
||
caml_string_of_jsbytes("Worker.import_scripts is undefined"),
|
||
cst_webglcontextlost=caml_string_of_jsbytes("webglcontextlost"),
|
||
cst_webglcontextrestored=caml_string_of_jsbytes("webglcontextrestored"),
|
||
cst_webglcontextcreationerror=
|
||
caml_string_of_jsbytes("webglcontextcreationerror"),
|
||
cst_g=caml_string_of_jsbytes("g"),
|
||
cst=caml_string_of_jsbytes("[\\][()\\\\|+*.?{}^$]"),
|
||
cst$37=caml_string_of_jsbytes(""),
|
||
cst$13=caml_string_of_jsbytes(""),
|
||
cst$21=caml_string_of_jsbytes(""),
|
||
cst$14=caml_string_of_jsbytes("#"),
|
||
cst$15=caml_string_of_jsbytes("?"),
|
||
cst$20=caml_string_of_jsbytes(""),
|
||
cst$16=caml_string_of_jsbytes("/"),
|
||
cst$17=caml_string_of_jsbytes("/"),
|
||
cst$19=caml_string_of_jsbytes(":"),
|
||
cst$18=caml_string_of_jsbytes(""),
|
||
cst_http$1=caml_string_of_jsbytes("http://"),
|
||
cst$22=caml_string_of_jsbytes(""),
|
||
cst$30=caml_string_of_jsbytes(""),
|
||
cst$23=caml_string_of_jsbytes("#"),
|
||
cst$24=caml_string_of_jsbytes("?"),
|
||
cst$29=caml_string_of_jsbytes(""),
|
||
cst$25=caml_string_of_jsbytes("/"),
|
||
cst$26=caml_string_of_jsbytes("/"),
|
||
cst$28=caml_string_of_jsbytes(":"),
|
||
cst$27=caml_string_of_jsbytes(""),
|
||
cst_https$1=caml_string_of_jsbytes("https://"),
|
||
cst$31=caml_string_of_jsbytes(""),
|
||
cst$36=caml_string_of_jsbytes(""),
|
||
cst$32=caml_string_of_jsbytes("#"),
|
||
cst$33=caml_string_of_jsbytes("?"),
|
||
cst$35=caml_string_of_jsbytes(""),
|
||
cst$34=caml_string_of_jsbytes("/"),
|
||
cst_file$2=caml_string_of_jsbytes("file://"),
|
||
cst$12=caml_string_of_jsbytes(""),
|
||
cst$11=caml_string_of_jsbytes(""),
|
||
cst$10=caml_string_of_jsbytes(""),
|
||
cst$9=caml_string_of_jsbytes(""),
|
||
cst$8=caml_string_of_jsbytes(""),
|
||
cst$7=caml_string_of_jsbytes(""),
|
||
cst$6=caml_string_of_jsbytes(""),
|
||
cst$4=caml_string_of_jsbytes("="),
|
||
cst$5=caml_string_of_jsbytes("&"),
|
||
cst$2=caml_string_of_jsbytes(""),
|
||
cst$3=caml_string_of_jsbytes(""),
|
||
cst_file$0=caml_string_of_jsbytes("file"),
|
||
cst_file$1=caml_string_of_jsbytes("file:"),
|
||
cst_http=caml_string_of_jsbytes("http"),
|
||
cst_http$0=caml_string_of_jsbytes("http:"),
|
||
cst_https=caml_string_of_jsbytes("https"),
|
||
cst_https$0=caml_string_of_jsbytes("https:"),
|
||
cst$1=caml_string_of_jsbytes(" "),
|
||
cst_2B=caml_string_of_jsbytes("%2B"),
|
||
cst_Js_of_ocaml_Url_Local_exn=
|
||
caml_string_of_jsbytes("Js_of_ocaml__Url.Local_exn"),
|
||
cst$0=caml_string_of_jsbytes("+"),
|
||
cst_Js_of_ocaml_Url_Not_an_htt=
|
||
caml_string_of_jsbytes("Js_of_ocaml__Url.Not_an_http_protocol"),
|
||
cst_Hh_Tt_Tt_Pp_Ss_0_9a_zA_Z_0=
|
||
caml_string_of_jsbytes
|
||
("^([Hh][Tt][Tt][Pp][Ss]?)://([0-9a-zA-Z.-]+|\\[[0-9a-zA-Z.-]+\\]|\\[[0-9A-Fa-f:.]+\\])?(:([0-9]+))?(/([^\\?#]*)(\\?([^#]*))?(#(.*))?)?$"),
|
||
cst_Ff_Ii_Ll_Ee=
|
||
caml_string_of_jsbytes
|
||
("^([Ff][Ii][Ll][Ee])://([^\\?#]*)(\\?([^#]*))?(#(.*))?$"),
|
||
s=caml_string_of_jsbytes("3.6.0"),
|
||
git_version=caml_string_of_jsbytes(""),
|
||
cst$38=caml_string_of_jsbytes(""),
|
||
cst$41=caml_string_of_jsbytes("+"),
|
||
cst_Jstable_keys=caml_string_of_jsbytes("Jstable.keys"),
|
||
dummy_string=caml_string_of_jsbytes(""),
|
||
dummy_int64=runtime.caml_int64_create_lo_mi_hi(1,0,0),
|
||
cst_is_not_a_valid_length$0=
|
||
caml_string_of_jsbytes(" is not a valid length"),
|
||
cst_d_d_deg_grad_rad_turns=
|
||
caml_string_of_jsbytes("^(\\d*(?:\\.\\d*))(deg|grad|rad|turns)$"),
|
||
cst_length_conversion_error$0=
|
||
caml_string_of_jsbytes("length conversion error: "),
|
||
cst_deg$0=caml_string_of_jsbytes("deg"),
|
||
cst_grad$0=caml_string_of_jsbytes("grad"),
|
||
cst_rad$0=caml_string_of_jsbytes("rad"),
|
||
cst_turns$0=caml_string_of_jsbytes("turns"),
|
||
cst_deg=caml_string_of_jsbytes("deg"),
|
||
cst_grad=caml_string_of_jsbytes("grad"),
|
||
cst_rad=caml_string_of_jsbytes("rad"),
|
||
cst_turns=caml_string_of_jsbytes("turns"),
|
||
cst_is_not_a_valid_length=
|
||
caml_string_of_jsbytes(" is not a valid length"),
|
||
cst_0$0=caml_string_of_jsbytes("0"),
|
||
cst_d_d_s_S=caml_string_of_jsbytes("^(\\d*(?:\\.\\d*)?)\\s*(\\S*)$"),
|
||
cst_length_conversion_error=
|
||
caml_string_of_jsbytes("length conversion error: "),
|
||
cst_pc$0=caml_string_of_jsbytes("pc"),
|
||
cst_ch$0=caml_string_of_jsbytes("ch"),
|
||
cst_cm$0=caml_string_of_jsbytes("cm"),
|
||
cst_em$1=caml_string_of_jsbytes("em"),
|
||
cst_ex$0=caml_string_of_jsbytes("ex"),
|
||
cst_gd$0=caml_string_of_jsbytes("gd"),
|
||
cst_in$0=caml_string_of_jsbytes("in"),
|
||
cst_mm$0=caml_string_of_jsbytes("mm"),
|
||
cst_pt$0=caml_string_of_jsbytes("pt"),
|
||
cst_px$0=caml_string_of_jsbytes("px"),
|
||
cst_rem$0=caml_string_of_jsbytes("rem"),
|
||
cst_vh$0=caml_string_of_jsbytes("vh"),
|
||
cst_vm$0=caml_string_of_jsbytes("vm"),
|
||
cst_vw$0=caml_string_of_jsbytes("vw"),
|
||
cst_0=caml_string_of_jsbytes("0"),
|
||
cst_em$0=caml_string_of_jsbytes("em"),
|
||
cst_ex=caml_string_of_jsbytes("ex"),
|
||
cst_px=caml_string_of_jsbytes("px"),
|
||
cst_gd=caml_string_of_jsbytes("gd"),
|
||
cst_rem=caml_string_of_jsbytes("rem"),
|
||
cst_vw=caml_string_of_jsbytes("vw"),
|
||
cst_vh=caml_string_of_jsbytes("vh"),
|
||
cst_vm=caml_string_of_jsbytes("vm"),
|
||
cst_ch=caml_string_of_jsbytes("ch"),
|
||
cst_mm=caml_string_of_jsbytes("mm"),
|
||
cst_cm=caml_string_of_jsbytes("cm"),
|
||
cst_in=caml_string_of_jsbytes("in"),
|
||
cst_pt=caml_string_of_jsbytes("pt"),
|
||
cst_pc=caml_string_of_jsbytes("pc"),
|
||
cst$40=caml_string_of_jsbytes("): "),
|
||
cst_color_conversion_error$0=
|
||
caml_string_of_jsbytes("color conversion error ("),
|
||
cst$39=caml_string_of_jsbytes("): "),
|
||
cst_color_conversion_error=
|
||
caml_string_of_jsbytes("color conversion error ("),
|
||
cst_is_not_a_valid_color$0=
|
||
caml_string_of_jsbytes(" is not a valid color"),
|
||
cst_rgba_d_d_d_d_d=
|
||
caml_string_of_jsbytes
|
||
("(rgba?)\\((?:(\\d*),(\\d*),(\\d*)(?:,(\\d*(?:\\.\\d*)?))?)\\)"),
|
||
cst_rgba_d_d_d_d_d$0=
|
||
caml_string_of_jsbytes
|
||
("(rgba?)\\((?:(\\d*)%,(\\d*)%,(\\d*)%(?:,(\\d*(?:\\.\\d*)?))?)\\)"),
|
||
cst_hsla_d_d_d_d_d=
|
||
caml_string_of_jsbytes
|
||
("(hsla?)\\((?:(\\d*),(\\d*)%,(\\d*)%(?:,(\\d*(?:\\.\\d*)?))?)\\)"),
|
||
cst_rgb=caml_string_of_jsbytes("rgb"),
|
||
cst_rgba=caml_string_of_jsbytes("rgba"),
|
||
cst_rgb$0=caml_string_of_jsbytes("rgb"),
|
||
cst_rgba$0=caml_string_of_jsbytes("rgba"),
|
||
cst_hsl=caml_string_of_jsbytes("hsl"),
|
||
cst_hsla=caml_string_of_jsbytes("hsla"),
|
||
cst_rgb_s_d_s_d_s_d=
|
||
caml_string_of_jsbytes("^rgb\\(\\s*\\d*,\\s*\\d*,\\s*\\d*\\)$"),
|
||
cst_rgb_s_d_s_d_s_d$0=
|
||
caml_string_of_jsbytes("^rgb\\(\\s*\\d*%,\\s*\\d*%,\\s*\\d*%\\)$"),
|
||
cst_rgba_s_d_s_d_s_d_d_d=
|
||
caml_string_of_jsbytes
|
||
("^rgba\\(\\s*\\d*,\\s*\\d*,\\s*\\d*,\\d*\\.?\\d*\\)$"),
|
||
cst_rgba_s_d_s_d_s_d_d_d$0=
|
||
caml_string_of_jsbytes
|
||
("^rgba\\(\\s*\\d*%,\\s*\\d*%,\\s*\\d*%,\\d*\\.?\\d*\\)$"),
|
||
cst_hsl_s_d_s_d_s_d=
|
||
caml_string_of_jsbytes("^hsl\\(\\s*\\d*,\\s*\\d*%,\\s*\\d*%\\)$"),
|
||
cst_hsla_s_d_s_d_s_d_d_d=
|
||
caml_string_of_jsbytes
|
||
("^hsla\\(\\s*\\d*,\\s*\\d*%,\\s*\\d*%,\\d*\\.?\\d*\\)$"),
|
||
cst_is_not_a_valid_color=caml_string_of_jsbytes(" is not a valid color"),
|
||
cst_is_out_of_valid_range=
|
||
caml_string_of_jsbytes(" is out of valid range"),
|
||
partial=[8,[0,0,0],0,0,[12,41,0]],
|
||
partial$0=[12,41,0],
|
||
partial$1=[0,0,0],
|
||
cst_lightgrey$0=caml_string_of_jsbytes("lightgrey"),
|
||
cst_darkslategray$0=caml_string_of_jsbytes("darkslategray"),
|
||
cst_cornsilk$0=caml_string_of_jsbytes("cornsilk"),
|
||
cst_blue$0=caml_string_of_jsbytes("blue"),
|
||
cst_aliceblue$0=caml_string_of_jsbytes("aliceblue"),
|
||
cst_antiquewhite$0=caml_string_of_jsbytes("antiquewhite"),
|
||
cst_aqua$0=caml_string_of_jsbytes("aqua"),
|
||
cst_aquamarine$0=caml_string_of_jsbytes("aquamarine"),
|
||
cst_azure$0=caml_string_of_jsbytes("azure"),
|
||
cst_beige$0=caml_string_of_jsbytes("beige"),
|
||
cst_bisque$0=caml_string_of_jsbytes("bisque"),
|
||
cst_black$0=caml_string_of_jsbytes("black"),
|
||
cst_blanchedalmond$0=caml_string_of_jsbytes("blanchedalmond"),
|
||
cst_blueviolet$0=caml_string_of_jsbytes("blueviolet"),
|
||
cst_brown$0=caml_string_of_jsbytes("brown"),
|
||
cst_burlywood$0=caml_string_of_jsbytes("burlywood"),
|
||
cst_cadetblue$0=caml_string_of_jsbytes("cadetblue"),
|
||
cst_chartreuse$0=caml_string_of_jsbytes("chartreuse"),
|
||
cst_chocolate$0=caml_string_of_jsbytes("chocolate"),
|
||
cst_coral$0=caml_string_of_jsbytes("coral"),
|
||
cst_cornflowerblue$0=caml_string_of_jsbytes("cornflowerblue"),
|
||
cst_darkkhaki$0=caml_string_of_jsbytes("darkkhaki"),
|
||
cst_crimson$0=caml_string_of_jsbytes("crimson"),
|
||
cst_cyan$0=caml_string_of_jsbytes("cyan"),
|
||
cst_darkblue$0=caml_string_of_jsbytes("darkblue"),
|
||
cst_darkcyan$0=caml_string_of_jsbytes("darkcyan"),
|
||
cst_darkgoldenrod$0=caml_string_of_jsbytes("darkgoldenrod"),
|
||
cst_darkgray$0=caml_string_of_jsbytes("darkgray"),
|
||
cst_darkgreen$0=caml_string_of_jsbytes("darkgreen"),
|
||
cst_darkgrey$0=caml_string_of_jsbytes("darkgrey"),
|
||
cst_darkmagenta$0=caml_string_of_jsbytes("darkmagenta"),
|
||
cst_darkolivegreen$0=caml_string_of_jsbytes("darkolivegreen"),
|
||
cst_darkorange$0=caml_string_of_jsbytes("darkorange"),
|
||
cst_darkorchid$0=caml_string_of_jsbytes("darkorchid"),
|
||
cst_darkred$0=caml_string_of_jsbytes("darkred"),
|
||
cst_darksalmon$0=caml_string_of_jsbytes("darksalmon"),
|
||
cst_darkseagreen$0=caml_string_of_jsbytes("darkseagreen"),
|
||
cst_darkslateblue$0=caml_string_of_jsbytes("darkslateblue"),
|
||
cst_greenyellow$0=caml_string_of_jsbytes("greenyellow"),
|
||
cst_floralwhite$0=caml_string_of_jsbytes("floralwhite"),
|
||
cst_darkslategrey$0=caml_string_of_jsbytes("darkslategrey"),
|
||
cst_darkturquoise$0=caml_string_of_jsbytes("darkturquoise"),
|
||
cst_darkviolet$0=caml_string_of_jsbytes("darkviolet"),
|
||
cst_deeppink$0=caml_string_of_jsbytes("deeppink"),
|
||
cst_deepskyblue$0=caml_string_of_jsbytes("deepskyblue"),
|
||
cst_dimgray$0=caml_string_of_jsbytes("dimgray"),
|
||
cst_dimgrey$0=caml_string_of_jsbytes("dimgrey"),
|
||
cst_dodgerblue$0=caml_string_of_jsbytes("dodgerblue"),
|
||
cst_firebrick$0=caml_string_of_jsbytes("firebrick"),
|
||
cst_forestgreen$0=caml_string_of_jsbytes("forestgreen"),
|
||
cst_fuchsia$0=caml_string_of_jsbytes("fuchsia"),
|
||
cst_gainsboro$0=caml_string_of_jsbytes("gainsboro"),
|
||
cst_ghostwhite$0=caml_string_of_jsbytes("ghostwhite"),
|
||
cst_gold$0=caml_string_of_jsbytes("gold"),
|
||
cst_goldenrod$0=caml_string_of_jsbytes("goldenrod"),
|
||
cst_gray$0=caml_string_of_jsbytes("gray"),
|
||
cst_green$0=caml_string_of_jsbytes("green"),
|
||
cst_lavenderblush$0=caml_string_of_jsbytes("lavenderblush"),
|
||
cst_grey$0=caml_string_of_jsbytes("grey"),
|
||
cst_honeydew$0=caml_string_of_jsbytes("honeydew"),
|
||
cst_hotpink$0=caml_string_of_jsbytes("hotpink"),
|
||
cst_indianred$0=caml_string_of_jsbytes("indianred"),
|
||
cst_indigo$0=caml_string_of_jsbytes("indigo"),
|
||
cst_ivory$0=caml_string_of_jsbytes("ivory"),
|
||
cst_khaki$0=caml_string_of_jsbytes("khaki"),
|
||
cst_lavender$0=caml_string_of_jsbytes("lavender"),
|
||
cst_lawngreen$0=caml_string_of_jsbytes("lawngreen"),
|
||
cst_lemonchiffon$0=caml_string_of_jsbytes("lemonchiffon"),
|
||
cst_lightblue$0=caml_string_of_jsbytes("lightblue"),
|
||
cst_lightcoral$0=caml_string_of_jsbytes("lightcoral"),
|
||
cst_lightcyan$0=caml_string_of_jsbytes("lightcyan"),
|
||
cst_lightgoldenrodyellow$0=caml_string_of_jsbytes("lightgoldenrodyellow"),
|
||
cst_lightgray$0=caml_string_of_jsbytes("lightgray"),
|
||
cst_lightgreen$0=caml_string_of_jsbytes("lightgreen"),
|
||
cst_paleturquoise$0=caml_string_of_jsbytes("paleturquoise"),
|
||
cst_mediumslateblue$0=caml_string_of_jsbytes("mediumslateblue"),
|
||
cst_limegreen$0=caml_string_of_jsbytes("limegreen"),
|
||
cst_lightpink$0=caml_string_of_jsbytes("lightpink"),
|
||
cst_lightsalmon$0=caml_string_of_jsbytes("lightsalmon"),
|
||
cst_lightseagreen$0=caml_string_of_jsbytes("lightseagreen"),
|
||
cst_lightskyblue$0=caml_string_of_jsbytes("lightskyblue"),
|
||
cst_lightslategray$0=caml_string_of_jsbytes("lightslategray"),
|
||
cst_lightslategrey$0=caml_string_of_jsbytes("lightslategrey"),
|
||
cst_lightsteelblue$0=caml_string_of_jsbytes("lightsteelblue"),
|
||
cst_lightyellow$0=caml_string_of_jsbytes("lightyellow"),
|
||
cst_lime$0=caml_string_of_jsbytes("lime"),
|
||
cst_linen$0=caml_string_of_jsbytes("linen"),
|
||
cst_magenta$0=caml_string_of_jsbytes("magenta"),
|
||
cst_maroon$0=caml_string_of_jsbytes("maroon"),
|
||
cst_mediumaquamarine$0=caml_string_of_jsbytes("mediumaquamarine"),
|
||
cst_mediumblue$0=caml_string_of_jsbytes("mediumblue"),
|
||
cst_mediumorchid$0=caml_string_of_jsbytes("mediumorchid"),
|
||
cst_mediumpurple$0=caml_string_of_jsbytes("mediumpurple"),
|
||
cst_mediumseagreen$0=caml_string_of_jsbytes("mediumseagreen"),
|
||
cst_navy$0=caml_string_of_jsbytes("navy"),
|
||
cst_mediumspringgreen$0=caml_string_of_jsbytes("mediumspringgreen"),
|
||
cst_mediumturquoise$0=caml_string_of_jsbytes("mediumturquoise"),
|
||
cst_mediumvioletred$0=caml_string_of_jsbytes("mediumvioletred"),
|
||
cst_midnightblue$0=caml_string_of_jsbytes("midnightblue"),
|
||
cst_mintcream$0=caml_string_of_jsbytes("mintcream"),
|
||
cst_mistyrose$0=caml_string_of_jsbytes("mistyrose"),
|
||
cst_moccasin$0=caml_string_of_jsbytes("moccasin"),
|
||
cst_navajowhite$0=caml_string_of_jsbytes("navajowhite"),
|
||
cst_oldlace$0=caml_string_of_jsbytes("oldlace"),
|
||
cst_olive$0=caml_string_of_jsbytes("olive"),
|
||
cst_olivedrab$0=caml_string_of_jsbytes("olivedrab"),
|
||
cst_orange$0=caml_string_of_jsbytes("orange"),
|
||
cst_orangered$0=caml_string_of_jsbytes("orangered"),
|
||
cst_orchid$0=caml_string_of_jsbytes("orchid"),
|
||
cst_palegoldenrod$0=caml_string_of_jsbytes("palegoldenrod"),
|
||
cst_palegreen$0=caml_string_of_jsbytes("palegreen"),
|
||
cst_skyblue$0=caml_string_of_jsbytes("skyblue"),
|
||
cst_rosybrown$0=caml_string_of_jsbytes("rosybrown"),
|
||
cst_palevioletred$0=caml_string_of_jsbytes("palevioletred"),
|
||
cst_papayawhip$0=caml_string_of_jsbytes("papayawhip"),
|
||
cst_peachpuff$0=caml_string_of_jsbytes("peachpuff"),
|
||
cst_peru$0=caml_string_of_jsbytes("peru"),
|
||
cst_pink$0=caml_string_of_jsbytes("pink"),
|
||
cst_plum$0=caml_string_of_jsbytes("plum"),
|
||
cst_powderblue$0=caml_string_of_jsbytes("powderblue"),
|
||
cst_purple$0=caml_string_of_jsbytes("purple"),
|
||
cst_red$0=caml_string_of_jsbytes("red"),
|
||
cst_royalblue$0=caml_string_of_jsbytes("royalblue"),
|
||
cst_saddlebrown$0=caml_string_of_jsbytes("saddlebrown"),
|
||
cst_salmon$0=caml_string_of_jsbytes("salmon"),
|
||
cst_sandybrown$0=caml_string_of_jsbytes("sandybrown"),
|
||
cst_seagreen$0=caml_string_of_jsbytes("seagreen"),
|
||
cst_seashell$0=caml_string_of_jsbytes("seashell"),
|
||
cst_sienna$0=caml_string_of_jsbytes("sienna"),
|
||
cst_silver$0=caml_string_of_jsbytes("silver"),
|
||
cst_thistle$0=caml_string_of_jsbytes("thistle"),
|
||
cst_slateblue$0=caml_string_of_jsbytes("slateblue"),
|
||
cst_slategray$0=caml_string_of_jsbytes("slategray"),
|
||
cst_slategrey$0=caml_string_of_jsbytes("slategrey"),
|
||
cst_snow$0=caml_string_of_jsbytes("snow"),
|
||
cst_springgreen$0=caml_string_of_jsbytes("springgreen"),
|
||
cst_steelblue$0=caml_string_of_jsbytes("steelblue"),
|
||
cst_tan$0=caml_string_of_jsbytes("tan"),
|
||
cst_teal$0=caml_string_of_jsbytes("teal"),
|
||
cst_tomato$0=caml_string_of_jsbytes("tomato"),
|
||
cst_turquoise$0=caml_string_of_jsbytes("turquoise"),
|
||
cst_violet$0=caml_string_of_jsbytes("violet"),
|
||
cst_wheat$0=caml_string_of_jsbytes("wheat"),
|
||
cst_white$0=caml_string_of_jsbytes("white"),
|
||
cst_whitesmoke$0=caml_string_of_jsbytes("whitesmoke"),
|
||
cst_yellow$0=caml_string_of_jsbytes("yellow"),
|
||
cst_yellowgreen$0=caml_string_of_jsbytes("yellowgreen"),
|
||
cst_is_not_a_valid_color_name=
|
||
caml_string_of_jsbytes(" is not a valid color name"),
|
||
cst_aliceblue=caml_string_of_jsbytes("aliceblue"),
|
||
cst_antiquewhite=caml_string_of_jsbytes("antiquewhite"),
|
||
cst_aqua=caml_string_of_jsbytes("aqua"),
|
||
cst_aquamarine=caml_string_of_jsbytes("aquamarine"),
|
||
cst_azure=caml_string_of_jsbytes("azure"),
|
||
cst_beige=caml_string_of_jsbytes("beige"),
|
||
cst_bisque=caml_string_of_jsbytes("bisque"),
|
||
cst_black=caml_string_of_jsbytes("black"),
|
||
cst_blanchedalmond=caml_string_of_jsbytes("blanchedalmond"),
|
||
cst_blue=caml_string_of_jsbytes("blue"),
|
||
cst_blueviolet=caml_string_of_jsbytes("blueviolet"),
|
||
cst_brown=caml_string_of_jsbytes("brown"),
|
||
cst_burlywood=caml_string_of_jsbytes("burlywood"),
|
||
cst_cadetblue=caml_string_of_jsbytes("cadetblue"),
|
||
cst_chartreuse=caml_string_of_jsbytes("chartreuse"),
|
||
cst_chocolate=caml_string_of_jsbytes("chocolate"),
|
||
cst_coral=caml_string_of_jsbytes("coral"),
|
||
cst_cornflowerblue=caml_string_of_jsbytes("cornflowerblue"),
|
||
cst_cornsilk=caml_string_of_jsbytes("cornsilk"),
|
||
cst_crimson=caml_string_of_jsbytes("crimson"),
|
||
cst_cyan=caml_string_of_jsbytes("cyan"),
|
||
cst_darkblue=caml_string_of_jsbytes("darkblue"),
|
||
cst_darkcyan=caml_string_of_jsbytes("darkcyan"),
|
||
cst_darkgoldenrod=caml_string_of_jsbytes("darkgoldenrod"),
|
||
cst_darkgray=caml_string_of_jsbytes("darkgray"),
|
||
cst_darkgreen=caml_string_of_jsbytes("darkgreen"),
|
||
cst_darkgrey=caml_string_of_jsbytes("darkgrey"),
|
||
cst_darkkhaki=caml_string_of_jsbytes("darkkhaki"),
|
||
cst_darkmagenta=caml_string_of_jsbytes("darkmagenta"),
|
||
cst_darkolivegreen=caml_string_of_jsbytes("darkolivegreen"),
|
||
cst_darkorange=caml_string_of_jsbytes("darkorange"),
|
||
cst_darkorchid=caml_string_of_jsbytes("darkorchid"),
|
||
cst_darkred=caml_string_of_jsbytes("darkred"),
|
||
cst_darksalmon=caml_string_of_jsbytes("darksalmon"),
|
||
cst_darkseagreen=caml_string_of_jsbytes("darkseagreen"),
|
||
cst_darkslateblue=caml_string_of_jsbytes("darkslateblue"),
|
||
cst_darkslategray=caml_string_of_jsbytes("darkslategray"),
|
||
cst_darkslategrey=caml_string_of_jsbytes("darkslategrey"),
|
||
cst_darkturquoise=caml_string_of_jsbytes("darkturquoise"),
|
||
cst_darkviolet=caml_string_of_jsbytes("darkviolet"),
|
||
cst_deeppink=caml_string_of_jsbytes("deeppink"),
|
||
cst_deepskyblue=caml_string_of_jsbytes("deepskyblue"),
|
||
cst_dimgray=caml_string_of_jsbytes("dimgray"),
|
||
cst_dimgrey=caml_string_of_jsbytes("dimgrey"),
|
||
cst_dodgerblue=caml_string_of_jsbytes("dodgerblue"),
|
||
cst_firebrick=caml_string_of_jsbytes("firebrick"),
|
||
cst_floralwhite=caml_string_of_jsbytes("floralwhite"),
|
||
cst_forestgreen=caml_string_of_jsbytes("forestgreen"),
|
||
cst_fuchsia=caml_string_of_jsbytes("fuchsia"),
|
||
cst_gainsboro=caml_string_of_jsbytes("gainsboro"),
|
||
cst_ghostwhite=caml_string_of_jsbytes("ghostwhite"),
|
||
cst_gold=caml_string_of_jsbytes("gold"),
|
||
cst_goldenrod=caml_string_of_jsbytes("goldenrod"),
|
||
cst_gray=caml_string_of_jsbytes("gray"),
|
||
cst_grey=caml_string_of_jsbytes("grey"),
|
||
cst_green=caml_string_of_jsbytes("green"),
|
||
cst_greenyellow=caml_string_of_jsbytes("greenyellow"),
|
||
cst_honeydew=caml_string_of_jsbytes("honeydew"),
|
||
cst_hotpink=caml_string_of_jsbytes("hotpink"),
|
||
cst_indianred=caml_string_of_jsbytes("indianred"),
|
||
cst_indigo=caml_string_of_jsbytes("indigo"),
|
||
cst_ivory=caml_string_of_jsbytes("ivory"),
|
||
cst_khaki=caml_string_of_jsbytes("khaki"),
|
||
cst_lavender=caml_string_of_jsbytes("lavender"),
|
||
cst_lavenderblush=caml_string_of_jsbytes("lavenderblush"),
|
||
cst_lawngreen=caml_string_of_jsbytes("lawngreen"),
|
||
cst_lemonchiffon=caml_string_of_jsbytes("lemonchiffon"),
|
||
cst_lightblue=caml_string_of_jsbytes("lightblue"),
|
||
cst_lightcoral=caml_string_of_jsbytes("lightcoral"),
|
||
cst_lightcyan=caml_string_of_jsbytes("lightcyan"),
|
||
cst_lightgoldenrodyellow=caml_string_of_jsbytes("lightgoldenrodyellow"),
|
||
cst_lightgray=caml_string_of_jsbytes("lightgray"),
|
||
cst_lightgreen=caml_string_of_jsbytes("lightgreen"),
|
||
cst_lightgrey=caml_string_of_jsbytes("lightgrey"),
|
||
cst_lightpink=caml_string_of_jsbytes("lightpink"),
|
||
cst_lightsalmon=caml_string_of_jsbytes("lightsalmon"),
|
||
cst_lightseagreen=caml_string_of_jsbytes("lightseagreen"),
|
||
cst_lightskyblue=caml_string_of_jsbytes("lightskyblue"),
|
||
cst_lightslategray=caml_string_of_jsbytes("lightslategray"),
|
||
cst_lightslategrey=caml_string_of_jsbytes("lightslategrey"),
|
||
cst_lightsteelblue=caml_string_of_jsbytes("lightsteelblue"),
|
||
cst_lightyellow=caml_string_of_jsbytes("lightyellow"),
|
||
cst_lime=caml_string_of_jsbytes("lime"),
|
||
cst_limegreen=caml_string_of_jsbytes("limegreen"),
|
||
cst_linen=caml_string_of_jsbytes("linen"),
|
||
cst_magenta=caml_string_of_jsbytes("magenta"),
|
||
cst_maroon=caml_string_of_jsbytes("maroon"),
|
||
cst_mediumaquamarine=caml_string_of_jsbytes("mediumaquamarine"),
|
||
cst_mediumblue=caml_string_of_jsbytes("mediumblue"),
|
||
cst_mediumorchid=caml_string_of_jsbytes("mediumorchid"),
|
||
cst_mediumpurple=caml_string_of_jsbytes("mediumpurple"),
|
||
cst_mediumseagreen=caml_string_of_jsbytes("mediumseagreen"),
|
||
cst_mediumslateblue=caml_string_of_jsbytes("mediumslateblue"),
|
||
cst_mediumspringgreen=caml_string_of_jsbytes("mediumspringgreen"),
|
||
cst_mediumturquoise=caml_string_of_jsbytes("mediumturquoise"),
|
||
cst_mediumvioletred=caml_string_of_jsbytes("mediumvioletred"),
|
||
cst_midnightblue=caml_string_of_jsbytes("midnightblue"),
|
||
cst_mintcream=caml_string_of_jsbytes("mintcream"),
|
||
cst_mistyrose=caml_string_of_jsbytes("mistyrose"),
|
||
cst_moccasin=caml_string_of_jsbytes("moccasin"),
|
||
cst_navajowhite=caml_string_of_jsbytes("navajowhite"),
|
||
cst_navy=caml_string_of_jsbytes("navy"),
|
||
cst_oldlace=caml_string_of_jsbytes("oldlace"),
|
||
cst_olive=caml_string_of_jsbytes("olive"),
|
||
cst_olivedrab=caml_string_of_jsbytes("olivedrab"),
|
||
cst_orange=caml_string_of_jsbytes("orange"),
|
||
cst_orangered=caml_string_of_jsbytes("orangered"),
|
||
cst_orchid=caml_string_of_jsbytes("orchid"),
|
||
cst_palegoldenrod=caml_string_of_jsbytes("palegoldenrod"),
|
||
cst_palegreen=caml_string_of_jsbytes("palegreen"),
|
||
cst_paleturquoise=caml_string_of_jsbytes("paleturquoise"),
|
||
cst_palevioletred=caml_string_of_jsbytes("palevioletred"),
|
||
cst_papayawhip=caml_string_of_jsbytes("papayawhip"),
|
||
cst_peachpuff=caml_string_of_jsbytes("peachpuff"),
|
||
cst_peru=caml_string_of_jsbytes("peru"),
|
||
cst_pink=caml_string_of_jsbytes("pink"),
|
||
cst_plum=caml_string_of_jsbytes("plum"),
|
||
cst_powderblue=caml_string_of_jsbytes("powderblue"),
|
||
cst_purple=caml_string_of_jsbytes("purple"),
|
||
cst_red=caml_string_of_jsbytes("red"),
|
||
cst_rosybrown=caml_string_of_jsbytes("rosybrown"),
|
||
cst_royalblue=caml_string_of_jsbytes("royalblue"),
|
||
cst_saddlebrown=caml_string_of_jsbytes("saddlebrown"),
|
||
cst_salmon=caml_string_of_jsbytes("salmon"),
|
||
cst_sandybrown=caml_string_of_jsbytes("sandybrown"),
|
||
cst_seagreen=caml_string_of_jsbytes("seagreen"),
|
||
cst_seashell=caml_string_of_jsbytes("seashell"),
|
||
cst_sienna=caml_string_of_jsbytes("sienna"),
|
||
cst_silver=caml_string_of_jsbytes("silver"),
|
||
cst_skyblue=caml_string_of_jsbytes("skyblue"),
|
||
cst_slateblue=caml_string_of_jsbytes("slateblue"),
|
||
cst_slategray=caml_string_of_jsbytes("slategray"),
|
||
cst_slategrey=caml_string_of_jsbytes("slategrey"),
|
||
cst_snow=caml_string_of_jsbytes("snow"),
|
||
cst_springgreen=caml_string_of_jsbytes("springgreen"),
|
||
cst_steelblue=caml_string_of_jsbytes("steelblue"),
|
||
cst_tan=caml_string_of_jsbytes("tan"),
|
||
cst_teal=caml_string_of_jsbytes("teal"),
|
||
cst_thistle=caml_string_of_jsbytes("thistle"),
|
||
cst_tomato=caml_string_of_jsbytes("tomato"),
|
||
cst_turquoise=caml_string_of_jsbytes("turquoise"),
|
||
cst_violet=caml_string_of_jsbytes("violet"),
|
||
cst_wheat=caml_string_of_jsbytes("wheat"),
|
||
cst_white=caml_string_of_jsbytes("white"),
|
||
cst_whitesmoke=caml_string_of_jsbytes("whitesmoke"),
|
||
cst_yellow=caml_string_of_jsbytes("yellow"),
|
||
cst_yellowgreen=caml_string_of_jsbytes("yellowgreen"),
|
||
cst_vkern$0=caml_string_of_jsbytes("vkern"),
|
||
cst_view$0=caml_string_of_jsbytes("view"),
|
||
cst_use$0=caml_string_of_jsbytes("use"),
|
||
cst_tspan$0=caml_string_of_jsbytes("tspan"),
|
||
cst_tref$0=caml_string_of_jsbytes("tref"),
|
||
cst_title$3=caml_string_of_jsbytes("title"),
|
||
cst_textpath$0=caml_string_of_jsbytes("textpath"),
|
||
cst_text$1=caml_string_of_jsbytes("text"),
|
||
cst_symbol$0=caml_string_of_jsbytes("symbol"),
|
||
cst_switch$0=caml_string_of_jsbytes("switch"),
|
||
cst_svg$0=caml_string_of_jsbytes("svg"),
|
||
cst_style$3=caml_string_of_jsbytes("style"),
|
||
cst_stop$0=caml_string_of_jsbytes("stop"),
|
||
cst_set$0=caml_string_of_jsbytes("set"),
|
||
cst_script$3=caml_string_of_jsbytes("script"),
|
||
cst_rect$0=caml_string_of_jsbytes("rect"),
|
||
cst_radialgradient$0=caml_string_of_jsbytes("radialgradient"),
|
||
cst_polyline$0=caml_string_of_jsbytes("polyline"),
|
||
cst_polygon$0=caml_string_of_jsbytes("polygon"),
|
||
cst_pattern$0=caml_string_of_jsbytes("pattern"),
|
||
cst_path$0=caml_string_of_jsbytes("path"),
|
||
cst_mpath$0=caml_string_of_jsbytes("mpath"),
|
||
cst_missing_glyph$0=caml_string_of_jsbytes("missing-glyph"),
|
||
cst_metadata$0=caml_string_of_jsbytes("metadata"),
|
||
cst_mask$0=caml_string_of_jsbytes("mask"),
|
||
cst_lineargradient$0=caml_string_of_jsbytes("lineargradient"),
|
||
cst_line$0=caml_string_of_jsbytes("line"),
|
||
cst_image$0=caml_string_of_jsbytes("image"),
|
||
cst_hkern$0=caml_string_of_jsbytes("hkern"),
|
||
cst_glyphref$0=caml_string_of_jsbytes("glyphref"),
|
||
cst_glyph$0=caml_string_of_jsbytes("glyph"),
|
||
cst_g$1=caml_string_of_jsbytes("g"),
|
||
cst_foreignobject=caml_string_of_jsbytes("foreignobject"),
|
||
cst_font_face_uri$0=caml_string_of_jsbytes("font-face-uri"),
|
||
cst_font_face_src$0=caml_string_of_jsbytes("font-face-src"),
|
||
cst_font_face_name$0=caml_string_of_jsbytes("font-face-name"),
|
||
cst_font_face_format$0=caml_string_of_jsbytes("font-face-format"),
|
||
cst_font_face$0=caml_string_of_jsbytes("font-face"),
|
||
cst_font$0=caml_string_of_jsbytes("font"),
|
||
cst_filter$0=caml_string_of_jsbytes("filter"),
|
||
cst_ellipse$0=caml_string_of_jsbytes("ellipse"),
|
||
cst_desc$0=caml_string_of_jsbytes("desc"),
|
||
cst_defs$0=caml_string_of_jsbytes("defs"),
|
||
cst_cursor$0=caml_string_of_jsbytes("cursor"),
|
||
cst_clippath$0=caml_string_of_jsbytes("clippath"),
|
||
cst_circle$0=caml_string_of_jsbytes("circle"),
|
||
cst_animatetransform$0=caml_string_of_jsbytes("animatetransform"),
|
||
cst_animatemotion$0=caml_string_of_jsbytes("animatemotion"),
|
||
cst_animatecolor$0=caml_string_of_jsbytes("animatecolor"),
|
||
cst_animate$0=caml_string_of_jsbytes("animate"),
|
||
cst_altglyphitem$0=caml_string_of_jsbytes("altglyphitem"),
|
||
cst_altglyphdef$0=caml_string_of_jsbytes("altglyphdef"),
|
||
cst_altglyph$0=caml_string_of_jsbytes("altglyph"),
|
||
cst_a$3=caml_string_of_jsbytes("a"),
|
||
cst_vkern=caml_string_of_jsbytes("vkern"),
|
||
cst_view=caml_string_of_jsbytes("view"),
|
||
cst_use=caml_string_of_jsbytes("use"),
|
||
cst_tspan=caml_string_of_jsbytes("tspan"),
|
||
cst_tref=caml_string_of_jsbytes("tref"),
|
||
cst_title$2=caml_string_of_jsbytes("title"),
|
||
cst_textpath=caml_string_of_jsbytes("textpath"),
|
||
cst_text$0=caml_string_of_jsbytes("text"),
|
||
cst_symbol=caml_string_of_jsbytes("symbol"),
|
||
cst_switch=caml_string_of_jsbytes("switch"),
|
||
cst_svg=caml_string_of_jsbytes("svg"),
|
||
cst_style$2=caml_string_of_jsbytes("style"),
|
||
cst_stop=caml_string_of_jsbytes("stop"),
|
||
cst_set=caml_string_of_jsbytes("set"),
|
||
cst_script$2=caml_string_of_jsbytes("script"),
|
||
cst_rect=caml_string_of_jsbytes("rect"),
|
||
cst_radialgradient=caml_string_of_jsbytes("radialgradient"),
|
||
cst_polyline=caml_string_of_jsbytes("polyline"),
|
||
cst_polygon=caml_string_of_jsbytes("polygon"),
|
||
cst_pattern=caml_string_of_jsbytes("pattern"),
|
||
cst_path=caml_string_of_jsbytes("path"),
|
||
cst_mpath=caml_string_of_jsbytes("mpath"),
|
||
cst_missing_glyph=caml_string_of_jsbytes("missing-glyph"),
|
||
cst_metadata=caml_string_of_jsbytes("metadata"),
|
||
cst_mask=caml_string_of_jsbytes("mask"),
|
||
cst_lineargradient=caml_string_of_jsbytes("lineargradient"),
|
||
cst_line=caml_string_of_jsbytes("line"),
|
||
cst_image=caml_string_of_jsbytes("image"),
|
||
cst_hkern=caml_string_of_jsbytes("hkern"),
|
||
cst_glyphref=caml_string_of_jsbytes("glyphref"),
|
||
cst_glyph=caml_string_of_jsbytes("glyph"),
|
||
cst_g$0=caml_string_of_jsbytes("g"),
|
||
cst_foreignObject=caml_string_of_jsbytes("foreignObject"),
|
||
cst_font_face_uri=caml_string_of_jsbytes("font-face-uri"),
|
||
cst_font_face_src=caml_string_of_jsbytes("font-face-src"),
|
||
cst_font_face_name=caml_string_of_jsbytes("font-face-name"),
|
||
cst_font_face_format=caml_string_of_jsbytes("font-face-format"),
|
||
cst_font_face=caml_string_of_jsbytes("font-face"),
|
||
cst_font=caml_string_of_jsbytes("font"),
|
||
cst_filter=caml_string_of_jsbytes("filter"),
|
||
cst_ellipse=caml_string_of_jsbytes("ellipse"),
|
||
cst_desc=caml_string_of_jsbytes("desc"),
|
||
cst_defs=caml_string_of_jsbytes("defs"),
|
||
cst_cursor=caml_string_of_jsbytes("cursor"),
|
||
cst_clippath=caml_string_of_jsbytes("clippath"),
|
||
cst_circle=caml_string_of_jsbytes("circle"),
|
||
cst_animatetransform=caml_string_of_jsbytes("animatetransform"),
|
||
cst_animatemotion=caml_string_of_jsbytes("animatemotion"),
|
||
cst_animatecolor=caml_string_of_jsbytes("animatecolor"),
|
||
cst_animate=caml_string_of_jsbytes("animate"),
|
||
cst_altglyphitem=caml_string_of_jsbytes("altglyphitem"),
|
||
cst_altglyphdef=caml_string_of_jsbytes("altglyphdef"),
|
||
cst_altglyph=caml_string_of_jsbytes("altglyph"),
|
||
cst_a$2=caml_string_of_jsbytes("a"),
|
||
cst_Js_of_ocaml_Dom_svg_SVGErr=
|
||
caml_string_of_jsbytes("Js_of_ocaml__Dom_svg.SVGError"),
|
||
Stdlib_string=global_data.Stdlib__string,
|
||
Stdlib_char=global_data.Stdlib__char,
|
||
Stdlib=global_data.Stdlib,
|
||
Stdlib_callback=global_data.Stdlib__callback,
|
||
Stdlib_printexc=global_data.Stdlib__printexc,
|
||
Assert_failure=global_data.Assert_failure,
|
||
Stdlib_list=global_data.Stdlib__list,
|
||
Stdlib_array=global_data.Stdlib__array,
|
||
Stdlib_uchar=global_data.Stdlib__uchar,
|
||
Stdlib_printf=global_data.Stdlib__printf,
|
||
Js_of_ocaml=[0];
|
||
caml_register_global(1634,Js_of_ocaml,"Js_of_ocaml__");
|
||
var
|
||
Poly=[0],
|
||
_d_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom.ml"),351,67],
|
||
_e_=[0,caml_string_of_jsbytes("transparent")],
|
||
_f_=[0,caml_string_of_jsbytes("native")],
|
||
_j_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom_html.ml"),2792,58],
|
||
_i_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom_html.ml"),2791,61],
|
||
_h_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("getElementById_exn: "),
|
||
[3,0,[11,caml_string_of_jsbytes(" not found"),0]]],
|
||
caml_string_of_jsbytes("getElementById_exn: %S not found")],
|
||
_l_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/form.ml"),177,13],
|
||
_k_=[0,1],
|
||
_m_=
|
||
[0,caml_string_of_jsbytes("lib/js_of_ocaml/xmlHttpRequest.ml"),129,75],
|
||
_n_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/regexp.ml"),34,64],
|
||
_o_=[0,caml_string_of_jsbytes(""),0],
|
||
_ci_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_cj_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_ck_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_cl_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_b6_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_b7_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_b8_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_b9_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_b__=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_b$_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_ca_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_cb_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_cc_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_cd_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_ce_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_cf_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_cg_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_ch_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")],
|
||
_b5_=
|
||
caml_list_of_js_array
|
||
([caml_string_of_jsbytes("aliceblue"),
|
||
caml_string_of_jsbytes("antiquewhite"),
|
||
caml_string_of_jsbytes("aqua"),
|
||
caml_string_of_jsbytes("aquamarine"),
|
||
caml_string_of_jsbytes("azure"),
|
||
caml_string_of_jsbytes("beige"),
|
||
caml_string_of_jsbytes("bisque"),
|
||
caml_string_of_jsbytes("black"),
|
||
caml_string_of_jsbytes("blanchedalmond"),
|
||
caml_string_of_jsbytes("blue"),
|
||
caml_string_of_jsbytes("blueviolet"),
|
||
caml_string_of_jsbytes("brown"),
|
||
caml_string_of_jsbytes("burlywood"),
|
||
caml_string_of_jsbytes("cadetblue"),
|
||
caml_string_of_jsbytes("chartreuse"),
|
||
caml_string_of_jsbytes("chocolate"),
|
||
caml_string_of_jsbytes("coral"),
|
||
caml_string_of_jsbytes("cornflowerblue"),
|
||
caml_string_of_jsbytes("cornsilk"),
|
||
caml_string_of_jsbytes("crimson"),
|
||
caml_string_of_jsbytes("cyan"),
|
||
caml_string_of_jsbytes("darkblue"),
|
||
caml_string_of_jsbytes("darkcyan"),
|
||
caml_string_of_jsbytes("darkgoldenrod"),
|
||
caml_string_of_jsbytes("darkgray"),
|
||
caml_string_of_jsbytes("darkgreen"),
|
||
caml_string_of_jsbytes("darkgrey"),
|
||
caml_string_of_jsbytes("darkkhaki"),
|
||
caml_string_of_jsbytes("darkmagenta"),
|
||
caml_string_of_jsbytes("darkolivegreen"),
|
||
caml_string_of_jsbytes("darkorange"),
|
||
caml_string_of_jsbytes("darkorchid"),
|
||
caml_string_of_jsbytes("darkred"),
|
||
caml_string_of_jsbytes("darksalmon"),
|
||
caml_string_of_jsbytes("darkseagreen"),
|
||
caml_string_of_jsbytes("darkslateblue"),
|
||
caml_string_of_jsbytes("darkslategray"),
|
||
caml_string_of_jsbytes("darkslategrey"),
|
||
caml_string_of_jsbytes("darkturquoise"),
|
||
caml_string_of_jsbytes("darkviolet"),
|
||
caml_string_of_jsbytes("deeppink"),
|
||
caml_string_of_jsbytes("deepskyblue"),
|
||
caml_string_of_jsbytes("dimgray"),
|
||
caml_string_of_jsbytes("dimgrey"),
|
||
caml_string_of_jsbytes("dodgerblue"),
|
||
caml_string_of_jsbytes("firebrick"),
|
||
caml_string_of_jsbytes("floralwhite"),
|
||
caml_string_of_jsbytes("forestgreen"),
|
||
caml_string_of_jsbytes("fuchsia"),
|
||
caml_string_of_jsbytes("gainsboro"),
|
||
caml_string_of_jsbytes("ghostwhite"),
|
||
caml_string_of_jsbytes("gold"),
|
||
caml_string_of_jsbytes("goldenrod"),
|
||
caml_string_of_jsbytes("gray"),
|
||
caml_string_of_jsbytes("green"),
|
||
caml_string_of_jsbytes("greenyellow"),
|
||
caml_string_of_jsbytes("grey"),
|
||
caml_string_of_jsbytes("honeydew"),
|
||
caml_string_of_jsbytes("hotpink"),
|
||
caml_string_of_jsbytes("indianred"),
|
||
caml_string_of_jsbytes("indigo"),
|
||
caml_string_of_jsbytes("ivory"),
|
||
caml_string_of_jsbytes("khaki"),
|
||
caml_string_of_jsbytes("lavender"),
|
||
caml_string_of_jsbytes("lavenderblush"),
|
||
caml_string_of_jsbytes("lawngreen"),
|
||
caml_string_of_jsbytes("lemonchiffon"),
|
||
caml_string_of_jsbytes("lightblue"),
|
||
caml_string_of_jsbytes("lightcoral"),
|
||
caml_string_of_jsbytes("lightcyan"),
|
||
caml_string_of_jsbytes("lightgoldenrodyellow"),
|
||
caml_string_of_jsbytes("lightgray"),
|
||
caml_string_of_jsbytes("lightgreen"),
|
||
caml_string_of_jsbytes("lightgrey"),
|
||
caml_string_of_jsbytes("lightpink"),
|
||
caml_string_of_jsbytes("lightsalmon"),
|
||
caml_string_of_jsbytes("lightseagreen"),
|
||
caml_string_of_jsbytes("lightskyblue"),
|
||
caml_string_of_jsbytes("lightslategray"),
|
||
caml_string_of_jsbytes("lightslategrey"),
|
||
caml_string_of_jsbytes("lightsteelblue"),
|
||
caml_string_of_jsbytes("lightyellow"),
|
||
caml_string_of_jsbytes("lime"),
|
||
caml_string_of_jsbytes("limegreen"),
|
||
caml_string_of_jsbytes("linen"),
|
||
caml_string_of_jsbytes("magenta"),
|
||
caml_string_of_jsbytes("maroon"),
|
||
caml_string_of_jsbytes("mediumaquamarine"),
|
||
caml_string_of_jsbytes("mediumblue"),
|
||
caml_string_of_jsbytes("mediumorchid"),
|
||
caml_string_of_jsbytes("mediumpurple"),
|
||
caml_string_of_jsbytes("mediumseagreen"),
|
||
caml_string_of_jsbytes("mediumslateblue"),
|
||
caml_string_of_jsbytes("mediumspringgreen"),
|
||
caml_string_of_jsbytes("mediumturquoise"),
|
||
caml_string_of_jsbytes("mediumvioletred"),
|
||
caml_string_of_jsbytes("midnightblue"),
|
||
caml_string_of_jsbytes("mintcream"),
|
||
caml_string_of_jsbytes("mistyrose"),
|
||
caml_string_of_jsbytes("moccasin"),
|
||
caml_string_of_jsbytes("navajowhite"),
|
||
caml_string_of_jsbytes("navy"),
|
||
caml_string_of_jsbytes("oldlace"),
|
||
caml_string_of_jsbytes("olive"),
|
||
caml_string_of_jsbytes("olivedrab"),
|
||
caml_string_of_jsbytes("orange"),
|
||
caml_string_of_jsbytes("orangered"),
|
||
caml_string_of_jsbytes("orchid"),
|
||
caml_string_of_jsbytes("palegoldenrod"),
|
||
caml_string_of_jsbytes("palegreen"),
|
||
caml_string_of_jsbytes("paleturquoise"),
|
||
caml_string_of_jsbytes("palevioletred"),
|
||
caml_string_of_jsbytes("papayawhip"),
|
||
caml_string_of_jsbytes("peachpuff"),
|
||
caml_string_of_jsbytes("peru"),
|
||
caml_string_of_jsbytes("pink"),
|
||
caml_string_of_jsbytes("plum"),
|
||
caml_string_of_jsbytes("powderblue"),
|
||
caml_string_of_jsbytes("purple"),
|
||
caml_string_of_jsbytes("red"),
|
||
caml_string_of_jsbytes("rosybrown"),
|
||
caml_string_of_jsbytes("royalblue"),
|
||
caml_string_of_jsbytes("saddlebrown"),
|
||
caml_string_of_jsbytes("salmon"),
|
||
caml_string_of_jsbytes("sandybrown"),
|
||
caml_string_of_jsbytes("seagreen"),
|
||
caml_string_of_jsbytes("seashell"),
|
||
caml_string_of_jsbytes("sienna"),
|
||
caml_string_of_jsbytes("silver"),
|
||
caml_string_of_jsbytes("skyblue"),
|
||
caml_string_of_jsbytes("slateblue"),
|
||
caml_string_of_jsbytes("slategray"),
|
||
caml_string_of_jsbytes("slategrey"),
|
||
caml_string_of_jsbytes("snow"),
|
||
caml_string_of_jsbytes("springgreen"),
|
||
caml_string_of_jsbytes("steelblue"),
|
||
caml_string_of_jsbytes("tan"),
|
||
caml_string_of_jsbytes("teal"),
|
||
caml_string_of_jsbytes("thistle"),
|
||
caml_string_of_jsbytes("tomato"),
|
||
caml_string_of_jsbytes("turquoise"),
|
||
caml_string_of_jsbytes("violet"),
|
||
caml_string_of_jsbytes("wheat"),
|
||
caml_string_of_jsbytes("white"),
|
||
caml_string_of_jsbytes("whitesmoke"),
|
||
caml_string_of_jsbytes("yellow"),
|
||
caml_string_of_jsbytes("yellowgreen")]),
|
||
_b4_=
|
||
[0,
|
||
[12,35,[4,8,[0,2,2],0,[4,8,[0,2,2],0,[4,8,[0,2,2],0,0]]]],
|
||
caml_string_of_jsbytes("#%02X%02X%02X")],
|
||
_bY_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("rgb("),
|
||
[4,0,0,0,[12,44,[4,0,0,0,[12,44,[4,0,0,0,[12,41,0]]]]]]],
|
||
caml_string_of_jsbytes("rgb(%d,%d,%d)")],
|
||
_bZ_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("rgb("),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,37,[12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,41,0]]]]]]]]]],
|
||
caml_string_of_jsbytes("rgb(%d%%,%d%%,%d%%)")],
|
||
_b0_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("rgba("),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,44,[4,0,0,0,[12,44,[4,0,0,0,[12,44,[8,[0,0,0],0,0,[12,41,0]]]]]]]]],
|
||
caml_string_of_jsbytes("rgba(%d,%d,%d,%f)")],
|
||
_b1_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("rgba("),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,
|
||
37,
|
||
[12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,44,partial]]]]]]]]]],
|
||
caml_string_of_jsbytes("rgba(%d%%,%d%%,%d%%,%f)")],
|
||
_b2_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("hsl("),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,41,0]]]]]]]]],
|
||
caml_string_of_jsbytes("hsl(%d,%d%%,%d%%)")],
|
||
_b3_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("hsla("),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,
|
||
44,
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,
|
||
37,
|
||
[12,44,[4,0,0,0,[12,37,[12,44,[8,partial$1,0,0,partial$0]]]]]]]]]],
|
||
caml_string_of_jsbytes("hsla(%d,%d%%,%d%%,%f)")],
|
||
_v_=[0,240,248,255],
|
||
_w_=[0,250,235,215],
|
||
_x_=[0,0,255,255],
|
||
_y_=[0,127,255,212],
|
||
_z_=[0,240,255,255],
|
||
_A_=[0,245,245,220],
|
||
_B_=[0,255,228,196],
|
||
_C_=[0,0,0,0],
|
||
_D_=[0,255,235,205],
|
||
_E_=[0,0,0,255],
|
||
_F_=[0,138,43,226],
|
||
_G_=[0,165,42,42],
|
||
_H_=[0,222,184,135],
|
||
_I_=[0,95,158,160],
|
||
_J_=[0,127,255,0],
|
||
_K_=[0,210,105,30],
|
||
_L_=[0,255,127,80],
|
||
_M_=[0,100,149,237],
|
||
_N_=[0,255,248,220],
|
||
_O_=[0,220,20,60],
|
||
_P_=[0,0,255,255],
|
||
_Q_=[0,0,0,139],
|
||
_R_=[0,0,139,139],
|
||
_S_=[0,184,134,11],
|
||
_T_=[0,169,169,169],
|
||
_U_=[0,0,100,0],
|
||
_V_=[0,169,169,169],
|
||
_W_=[0,189,183,107],
|
||
_X_=[0,139,0,139],
|
||
_Y_=[0,85,107,47],
|
||
_Z_=[0,255,140,0],
|
||
___=[0,153,50,204],
|
||
_$_=[0,139,0,0],
|
||
_aa_=[0,233,150,122],
|
||
_ab_=[0,143,188,143],
|
||
_ac_=[0,72,61,139],
|
||
_ad_=[0,47,79,79],
|
||
_ae_=[0,47,79,79],
|
||
_af_=[0,0,206,209],
|
||
_ag_=[0,148,0,211],
|
||
_ah_=[0,255,20,147],
|
||
_ai_=[0,0,191,255],
|
||
_aj_=[0,105,105,105],
|
||
_ak_=[0,105,105,105],
|
||
_al_=[0,30,144,255],
|
||
_am_=[0,178,34,34],
|
||
_an_=[0,255,250,240],
|
||
_ao_=[0,34,139,34],
|
||
_ap_=[0,255,0,255],
|
||
_aq_=[0,220,220,220],
|
||
_ar_=[0,248,248,255],
|
||
_as_=[0,255,215,0],
|
||
_at_=[0,218,165,32],
|
||
_au_=[0,128,128,128],
|
||
_av_=[0,128,128,128],
|
||
_aw_=[0,0,128,0],
|
||
_ax_=[0,173,255,47],
|
||
_ay_=[0,240,255,240],
|
||
_az_=[0,255,105,180],
|
||
_aA_=[0,205,92,92],
|
||
_aB_=[0,75,0,130],
|
||
_aC_=[0,255,255,240],
|
||
_aD_=[0,240,230,140],
|
||
_aE_=[0,230,230,250],
|
||
_aF_=[0,255,240,245],
|
||
_aG_=[0,124,252,0],
|
||
_aH_=[0,255,250,205],
|
||
_aI_=[0,173,216,230],
|
||
_aJ_=[0,240,128,128],
|
||
_aK_=[0,224,255,255],
|
||
_aL_=[0,250,250,210],
|
||
_aM_=[0,211,211,211],
|
||
_aN_=[0,144,238,144],
|
||
_aO_=[0,211,211,211],
|
||
_aP_=[0,255,182,193],
|
||
_aQ_=[0,255,160,122],
|
||
_aR_=[0,32,178,170],
|
||
_aS_=[0,135,206,250],
|
||
_aT_=[0,119,136,153],
|
||
_aU_=[0,119,136,153],
|
||
_aV_=[0,176,196,222],
|
||
_aW_=[0,255,255,224],
|
||
_aX_=[0,0,255,0],
|
||
_aY_=[0,50,205,50],
|
||
_aZ_=[0,250,240,230],
|
||
_a0_=[0,255,0,255],
|
||
_a1_=[0,128,0,0],
|
||
_a2_=[0,102,205,170],
|
||
_a3_=[0,0,0,205],
|
||
_a4_=[0,186,85,211],
|
||
_a5_=[0,147,112,219],
|
||
_a6_=[0,60,179,113],
|
||
_a7_=[0,123,104,238],
|
||
_a8_=[0,0,250,154],
|
||
_a9_=[0,72,209,204],
|
||
_a__=[0,199,21,133],
|
||
_a$_=[0,25,25,112],
|
||
_ba_=[0,245,255,250],
|
||
_bb_=[0,255,228,225],
|
||
_bc_=[0,255,228,181],
|
||
_bd_=[0,255,222,173],
|
||
_be_=[0,0,0,128],
|
||
_bf_=[0,253,245,230],
|
||
_bg_=[0,128,128,0],
|
||
_bh_=[0,107,142,35],
|
||
_bi_=[0,255,165,0],
|
||
_bj_=[0,255,69,0],
|
||
_bk_=[0,218,112,214],
|
||
_bl_=[0,238,232,170],
|
||
_bm_=[0,152,251,152],
|
||
_bn_=[0,175,238,238],
|
||
_bo_=[0,219,112,147],
|
||
_bp_=[0,255,239,213],
|
||
_bq_=[0,255,218,185],
|
||
_br_=[0,205,133,63],
|
||
_bs_=[0,255,192,203],
|
||
_bt_=[0,221,160,221],
|
||
_bu_=[0,176,224,230],
|
||
_bv_=[0,128,0,128],
|
||
_bw_=[0,255,0,0],
|
||
_bx_=[0,188,143,143],
|
||
_by_=[0,65,105,225],
|
||
_bz_=[0,139,69,19],
|
||
_bA_=[0,250,128,114],
|
||
_bB_=[0,244,164,96],
|
||
_bC_=[0,46,139,87],
|
||
_bD_=[0,255,245,238],
|
||
_bE_=[0,160,82,45],
|
||
_bF_=[0,192,192,192],
|
||
_bG_=[0,135,206,235],
|
||
_bH_=[0,106,90,205],
|
||
_bI_=[0,112,128,144],
|
||
_bJ_=[0,112,128,144],
|
||
_bK_=[0,255,250,250],
|
||
_bL_=[0,0,255,127],
|
||
_bM_=[0,70,130,180],
|
||
_bN_=[0,210,180,140],
|
||
_bO_=[0,0,128,128],
|
||
_bP_=[0,216,191,216],
|
||
_bQ_=[0,255,99,71],
|
||
_bR_=[0,64,224,208],
|
||
_bS_=[0,238,130,238],
|
||
_bT_=[0,245,222,179],
|
||
_bU_=[0,255,255,255],
|
||
_bV_=[0,245,245,245],
|
||
_bW_=[0,255,255,0],
|
||
_bX_=[0,154,205,50];
|
||
function symbol(x,y){return x < y?1:0}
|
||
function symbol$0(x,y){return x <= y?1:0}
|
||
function symbol$1(x,y){return x !== y?1:0}
|
||
function symbol$2(x,y){return x === y?1:0}
|
||
function symbol$3(x,y){return y < x?1:0}
|
||
function symbol$4(x,y){return y <= x?1:0}
|
||
var compare=runtime.caml_int_compare;
|
||
function equal(x,y){return x === y?1:0}
|
||
function max(x,y){return y <= x?x:y}
|
||
function min(x,y){return x <= y?x:y}
|
||
var
|
||
Int_replace_polymorphic_compar=
|
||
[0,
|
||
symbol,
|
||
symbol$0,
|
||
symbol$1,
|
||
symbol$2,
|
||
symbol$3,
|
||
symbol$4,
|
||
compare,
|
||
equal,
|
||
max,
|
||
min],
|
||
make=Stdlib_string[1],
|
||
init=Stdlib_string[2],
|
||
copy=Stdlib_string[3],
|
||
sub=Stdlib_string[4],
|
||
fill=Stdlib_string[5],
|
||
blit=Stdlib_string[6],
|
||
concat=Stdlib_string[7],
|
||
iter=Stdlib_string[8],
|
||
iteri=Stdlib_string[9],
|
||
map=Stdlib_string[10],
|
||
mapi=Stdlib_string[11],
|
||
trim=Stdlib_string[12],
|
||
escaped=Stdlib_string[13],
|
||
index=Stdlib_string[14],
|
||
index_opt=Stdlib_string[15],
|
||
rindex=Stdlib_string[16],
|
||
rindex_opt=Stdlib_string[17],
|
||
index_from=Stdlib_string[18],
|
||
index_from_opt=Stdlib_string[19],
|
||
rindex_from=Stdlib_string[20],
|
||
rindex_from_opt=Stdlib_string[21],
|
||
contains=Stdlib_string[22],
|
||
contains_from=Stdlib_string[23],
|
||
rcontains_from=Stdlib_string[24],
|
||
uppercase=Stdlib_string[25],
|
||
lowercase=Stdlib_string[26],
|
||
capitalize=Stdlib_string[27],
|
||
uncapitalize=Stdlib_string[28],
|
||
uppercase_ascii=Stdlib_string[29],
|
||
lowercase_ascii=Stdlib_string[30],
|
||
capitalize_ascii=Stdlib_string[31],
|
||
uncapitalize_ascii=Stdlib_string[32],
|
||
compare$0=Stdlib_string[33],
|
||
split_on_char=Stdlib_string[35],
|
||
to_seq=Stdlib_string[36],
|
||
to_seqi=Stdlib_string[37],
|
||
of_seq=Stdlib_string[38],
|
||
equal$0=runtime.caml_string_equal,
|
||
String=
|
||
[0,
|
||
make,
|
||
init,
|
||
copy,
|
||
sub,
|
||
fill,
|
||
blit,
|
||
concat,
|
||
iter,
|
||
iteri,
|
||
map,
|
||
mapi,
|
||
trim,
|
||
escaped,
|
||
index,
|
||
index_opt,
|
||
rindex,
|
||
rindex_opt,
|
||
index_from,
|
||
index_from_opt,
|
||
rindex_from,
|
||
rindex_from_opt,
|
||
contains,
|
||
contains_from,
|
||
rcontains_from,
|
||
uppercase,
|
||
lowercase,
|
||
capitalize,
|
||
uncapitalize,
|
||
uppercase_ascii,
|
||
lowercase_ascii,
|
||
capitalize_ascii,
|
||
uncapitalize_ascii,
|
||
compare$0,
|
||
split_on_char,
|
||
to_seq,
|
||
to_seqi,
|
||
of_seq,
|
||
equal$0],
|
||
chr=Stdlib_char[1],
|
||
escaped$0=Stdlib_char[2],
|
||
lowercase$0=Stdlib_char[3],
|
||
uppercase$0=Stdlib_char[4],
|
||
lowercase_ascii$0=Stdlib_char[5],
|
||
uppercase_ascii$0=Stdlib_char[6],
|
||
compare$1=Stdlib_char[7];
|
||
function equal$1(x,y){return x === y?1:0}
|
||
var
|
||
Char=
|
||
[0,
|
||
chr,
|
||
escaped$0,
|
||
lowercase$0,
|
||
uppercase$0,
|
||
lowercase_ascii$0,
|
||
uppercase_ascii$0,
|
||
compare$1,
|
||
equal$1],
|
||
symbol$5=Int_replace_polymorphic_compar[1],
|
||
symbol$6=Int_replace_polymorphic_compar[2],
|
||
symbol$7=Int_replace_polymorphic_compar[3],
|
||
symbol$8=Int_replace_polymorphic_compar[4],
|
||
symbol$9=Int_replace_polymorphic_compar[5],
|
||
symbol$10=Int_replace_polymorphic_compar[6],
|
||
compare$2=Int_replace_polymorphic_compar[7],
|
||
equal$2=Int_replace_polymorphic_compar[8],
|
||
max$0=Int_replace_polymorphic_compar[9],
|
||
min$0=Int_replace_polymorphic_compar[10],
|
||
Js_of_ocaml_Import=
|
||
[0,
|
||
Poly,
|
||
Int_replace_polymorphic_compar,
|
||
String,
|
||
Char,
|
||
symbol$5,
|
||
symbol$6,
|
||
symbol$7,
|
||
symbol$8,
|
||
symbol$9,
|
||
symbol$10,
|
||
compare$2,
|
||
equal$2,
|
||
max$0,
|
||
min$0];
|
||
caml_register_global(1637,Js_of_ocaml_Import,"Js_of_ocaml__Import");
|
||
var
|
||
global=joo_global_object,
|
||
Unsafe=[0,global],
|
||
no_handler=null,
|
||
t37=undefined;
|
||
function return$0(_gO_){return _gO_}
|
||
function map$0(x,f){return x == no_handler?no_handler:caml_call1(f,x)}
|
||
function bind(x,f){return x == no_handler?no_handler:caml_call1(f,x)}
|
||
function test(x){return 1 - (x == no_handler?1:0)}
|
||
function iter$0(x,f)
|
||
{var _gN_=1 - (x == no_handler?1:0);return _gN_?caml_call1(f,x):_gN_}
|
||
function case$0(x,f,g)
|
||
{return x == no_handler?caml_call1(f,0):caml_call1(g,x)}
|
||
function get(x,f){return x == no_handler?caml_call1(f,0):x}
|
||
function option(x){if(x){var x$0=x[1];return x$0}return no_handler}
|
||
function to_option(x)
|
||
{function _gM_(x){return [0,x]}
|
||
return case$0(x,function(param){return 0},_gM_)}
|
||
var
|
||
Opt=
|
||
[0,
|
||
no_handler,
|
||
return$0,
|
||
map$0,
|
||
bind,
|
||
test,
|
||
iter$0,
|
||
case$0,
|
||
get,
|
||
option,
|
||
to_option];
|
||
function return$1(_gL_){return _gL_}
|
||
function map$1(x,f){return x === t37?t37:caml_call1(f,x)}
|
||
function bind$0(x,f){return x === t37?t37:caml_call1(f,x)}
|
||
function test$0(x){return x !== t37?1:0}
|
||
function iter$1(x,f)
|
||
{var _gK_=x !== t37?1:0;return _gK_?caml_call1(f,x):_gK_}
|
||
function case$1(x,f,g){return x === t37?caml_call1(f,0):caml_call1(g,x)}
|
||
function get$0(x,f){return x === t37?caml_call1(f,0):x}
|
||
function option$0(x){if(x){var x$0=x[1];return x$0}return t37}
|
||
function to_option$0(x)
|
||
{function _gJ_(x){return [0,x]}
|
||
return case$1(x,function(param){return 0},_gJ_)}
|
||
var
|
||
Optdef=
|
||
[0,
|
||
t37,
|
||
return$1,
|
||
map$1,
|
||
bind$0,
|
||
test$0,
|
||
iter$1,
|
||
case$1,
|
||
get$0,
|
||
option$0,
|
||
to_option$0];
|
||
function coerce(x,f,g)
|
||
{function _gH_(param){return caml_call1(g,x)}
|
||
var _gI_=caml_call1(f,x);
|
||
return caml_call2(Opt[8],_gI_,_gH_)}
|
||
function coerce_opt(x,f,g)
|
||
{function _gF_(param){return caml_call1(g,x)}
|
||
var _gG_=caml_call2(Opt[4],x,f);
|
||
return caml_call2(Opt[8],_gG_,_gF_)}
|
||
var
|
||
true$0=true,
|
||
false$0=false,
|
||
string_constr=Unsafe[1].String,
|
||
regExp_withFlags=Unsafe[1].RegExp,
|
||
object_constructor=Unsafe[1].Object;
|
||
function object_keys(o){return object_constructor.keys(o)}
|
||
var
|
||
array_length=Unsafe[1].Array,
|
||
array_get=caml_js_get,
|
||
array_set=caml_js_set;
|
||
function array_map(f,a)
|
||
{return a.map
|
||
(caml_js_wrap_callback
|
||
(function(x,idx,param){return caml_call1(f,x)}))}
|
||
function array_mapi(f,a)
|
||
{return a.map
|
||
(caml_js_wrap_callback
|
||
(function(x,idx,param){return caml_call2(f,idx,x)}))}
|
||
function str_array(_gE_){return _gE_}
|
||
function match_result(_gD_){return _gD_}
|
||
var
|
||
date_ms=Unsafe[1].Date,
|
||
math=Unsafe[1].Math,
|
||
Error=[248,cst_Js_of_ocaml_Js_Error,caml_fresh_oo_id(0)],
|
||
error_constr=Unsafe[1].Error;
|
||
caml_call2(Stdlib_callback[2],cst_jsError,[0,Error,{}]);
|
||
function raise_js_error(exn){throw exn}
|
||
var JSON=Unsafe[1].JSON;
|
||
function decodeURI(s){return Unsafe[1].decodeURI(s)}
|
||
function decodeURIComponent(s){return Unsafe[1].decodeURIComponent(s)}
|
||
function encodeURI(s){return Unsafe[1].encodeURI(s)}
|
||
function encodeURIComponent(s){return Unsafe[1].encodeURIComponent(s)}
|
||
function escape(s){return Unsafe[1].escape(s)}
|
||
function unescape(s){return Unsafe[1].unescape(s)}
|
||
function isNaN(i){return Unsafe[1].isNaN(i) | 0}
|
||
function parseInt(s)
|
||
{var s$0=Unsafe[1].parseInt(s);
|
||
return isNaN(s$0)?caml_call1(Stdlib[2],cst_parseInt):s$0}
|
||
function parseFloat(s)
|
||
{var s$0=Unsafe[1].parseFloat(s);
|
||
return isNaN(s$0)?caml_call1(Stdlib[2],cst_parseFloat):s$0}
|
||
function _a_(param)
|
||
{if(param[1] === Error)
|
||
{var e=param[2];return [0,caml_string_of_jsstring(e.toString())]}
|
||
return 0}
|
||
caml_call1(Stdlib_printexc[9],_a_);
|
||
function _b_(e)
|
||
{return e instanceof array_length
|
||
?0
|
||
:[0,caml_string_of_jsstring(e.toString())]}
|
||
caml_call1(Stdlib_printexc[9],_b_);
|
||
function string_of_error(e){return caml_string_of_jsstring(e.toString())}
|
||
function export_js(field,x)
|
||
{return runtime.caml_js_export_var(0)[field] = x}
|
||
function export$0(field,x)
|
||
{return export_js(caml_jsstring_of_string(field),x)}
|
||
function export_all(obj)
|
||
{var keys=object_keys(obj);
|
||
return keys.forEach
|
||
(caml_js_wrap_callback
|
||
(function(key,param,_gC_){return export_js(key,obj[key])}))}
|
||
function _c_(_gB_){return _gB_}
|
||
var
|
||
Js_of_ocaml_Js=
|
||
[0,
|
||
no_handler,
|
||
function(_gA_){return _gA_},
|
||
t37,
|
||
_c_,
|
||
Opt,
|
||
Optdef,
|
||
true$0,
|
||
false$0,
|
||
string_constr,
|
||
regExp_withFlags,
|
||
regExp_withFlags,
|
||
regExp_withFlags,
|
||
object_keys,
|
||
array_length,
|
||
array_length,
|
||
array_get,
|
||
array_set,
|
||
array_map,
|
||
array_mapi,
|
||
str_array,
|
||
match_result,
|
||
date_ms,
|
||
date_ms,
|
||
date_ms,
|
||
date_ms,
|
||
date_ms,
|
||
date_ms,
|
||
date_ms,
|
||
date_ms,
|
||
date_ms,
|
||
math,
|
||
error_constr,
|
||
string_of_error,
|
||
raise_js_error,
|
||
Error,
|
||
JSON,
|
||
decodeURI,
|
||
decodeURIComponent,
|
||
encodeURI,
|
||
encodeURIComponent,
|
||
escape,
|
||
unescape,
|
||
isNaN,
|
||
parseInt,
|
||
parseFloat,
|
||
coerce,
|
||
coerce_opt,
|
||
export$0,
|
||
export_all,
|
||
Unsafe];
|
||
caml_register_global(1641,Js_of_ocaml_Js,"Js_of_ocaml__Js");
|
||
function list_of_nodeList(nodeList)
|
||
{var length=nodeList.length,acc=0,i=0;
|
||
for(;;)
|
||
{if(caml_call2(symbol$5,i,length))
|
||
{var _gz_=nodeList.item(i),match=caml_call1(Opt[10],_gz_);
|
||
if(match)
|
||
{var e=match[1],i$0=i + 1 | 0,acc$0=[0,e,acc],acc=acc$0,i=i$0;
|
||
continue}
|
||
var i$1=i + 1 | 0,i=i$1;
|
||
continue}
|
||
return caml_call1(Stdlib_list[9],acc)}}
|
||
var
|
||
disconnected=1,
|
||
preceding=2,
|
||
following=4,
|
||
contains$0=8,
|
||
contained_by=16,
|
||
implementation_specific=32;
|
||
function has(t,mask){return caml_call2(symbol$8,t & mask,mask)}
|
||
function add(x,y){return x | y}
|
||
var
|
||
DocumentPosition=
|
||
[0,
|
||
disconnected,
|
||
preceding,
|
||
following,
|
||
contains$0,
|
||
contained_by,
|
||
implementation_specific,
|
||
has,
|
||
add,
|
||
add];
|
||
function appendChild(p,n){p.appendChild(n);return 0}
|
||
function removeChild(p,n){p.removeChild(n);return 0}
|
||
function replaceChild(p,n,o){p.replaceChild(n,o);return 0}
|
||
function insertBefore(p,n,o){p.insertBefore(n,o);return 0}
|
||
function nodeType(e)
|
||
{var match=e.nodeType;
|
||
if(match)
|
||
{var switcher=match - 1 | 0;
|
||
switch(switcher)
|
||
{case 0:return [0,e];case 1:return [1,e];case 2:case 3:return [2,e]}}
|
||
return [3,e]}
|
||
function cast(e,t){return e.nodeType === t?e:no_handler}
|
||
function element(e){return cast(e,1)}
|
||
function text(e)
|
||
{if(3 !== e.nodeType && 4 !== e.nodeType)return no_handler;return e}
|
||
function attr(e){return cast(e,2)}
|
||
function handler(f)
|
||
{return function(e)
|
||
{if(caml_call1(Opt[5],e))
|
||
{var res=caml_call1(f,e);
|
||
if(1 - (res | 0))e.preventDefault();
|
||
return res}
|
||
var e$0=event,res$0=caml_call1(f,e$0);
|
||
if(1 - (res$0 | 0))e$0.returnValue = res$0;
|
||
return res$0}}
|
||
function full_handler(f)
|
||
{return runtime.caml_js_wrap_meth_callback_unsafe
|
||
(function(this$0,e)
|
||
{if(caml_call1(Opt[5],e))
|
||
{var res=caml_call2(f,this$0,e);
|
||
if(1 - (res | 0))e.preventDefault();
|
||
return res}
|
||
var e$0=event,res$0=caml_call2(f,this$0,e$0);
|
||
if(1 - (res$0 | 0))e$0.returnValue = res$0;
|
||
return res$0})}
|
||
function invoke_handler(f,this$0,event){return f.call(this$0,event)}
|
||
function eventTarget(e)
|
||
{function _gw_(param)
|
||
{function _gy_(param){throw Stdlib[8]}
|
||
return caml_call2(Opt[8],e.srcElement,_gy_)}
|
||
var target=caml_call2(Opt[8],e.target,_gw_);
|
||
if(target instanceof Unsafe[1].Node)
|
||
{if(3 === target.nodeType)
|
||
{var _gx_=function(param){throw [0,Assert_failure,_d_]};
|
||
return caml_call2(Opt[8],target.parentNode,_gx_)}
|
||
return target}
|
||
return target}
|
||
var make$0=caml_jsstring_of_string,Event=[0,make$0];
|
||
function addEventListenerWithOptions(e,typ,capture,once,passive,h)
|
||
{if(e.addEventListener === t37)
|
||
{var
|
||
ev="on".concat(typ),
|
||
callback=
|
||
function(e)
|
||
{var _gt_=[0,h,e,[0]];
|
||
return function(_gu_,_gv_)
|
||
{return runtime.caml_js_call(_gt_,_gu_,_gv_)}};
|
||
e.attachEvent(ev,callback);
|
||
return function(param){return e.detachEvent(ev,callback)}}
|
||
var opts={};
|
||
function iter(t,f){if(t){var b=t[1];return caml_call1(f,b)}return 0}
|
||
iter(capture,function(b){return opts.capture = b});
|
||
iter(once,function(b){return opts.once = b});
|
||
iter(passive,function(b){return opts.passive = b});
|
||
e.addEventListener(typ,h,opts);
|
||
return function(param){return e.removeEventListener(typ,h,opts)}}
|
||
function addEventListener(e,typ,h,capt)
|
||
{return addEventListenerWithOptions(e,typ,[0,capt],0,0,h)}
|
||
function removeEventListener(id){return caml_call1(id,0)}
|
||
function preventDefault(ev)
|
||
{return caml_call1(Optdef[5],ev.preventDefault)
|
||
?ev.preventDefault()
|
||
:ev.returnValue = ! ! 0}
|
||
function createCustomEvent(bubbles,cancelable,detail,typ)
|
||
{function opt_iter(f,param)
|
||
{if(param){var x=param[1];return caml_call1(f,x)}return 0}
|
||
var opts={};
|
||
opt_iter(function(x){return opts.bubbles = ! ! x},bubbles);
|
||
opt_iter(function(x){return opts.cancelable = ! ! x},cancelable);
|
||
opt_iter(function(x){return opts.detail = x},detail);
|
||
var constr=Unsafe[1].CustomEvent;
|
||
return new constr(typ,opts)}
|
||
var
|
||
Js_of_ocaml_Dom=
|
||
[0,
|
||
DocumentPosition,
|
||
insertBefore,
|
||
replaceChild,
|
||
removeChild,
|
||
appendChild,
|
||
list_of_nodeList,
|
||
nodeType,
|
||
[0,element,text,attr],
|
||
no_handler,
|
||
handler,
|
||
full_handler,
|
||
invoke_handler,
|
||
eventTarget,
|
||
Event,
|
||
addEventListenerWithOptions,
|
||
addEventListener,
|
||
removeEventListener,
|
||
preventDefault,
|
||
createCustomEvent];
|
||
caml_register_global(1644,Js_of_ocaml_Dom,"Js_of_ocaml__Dom");
|
||
var
|
||
arrayBuffer=Unsafe[1].ArrayBuffer,
|
||
int8Array_inBuffer=Unsafe[1].Int8Array,
|
||
uint8Array_fromBuffer=Unsafe[1].Uint8Array,
|
||
int16Array_inBuffer=Unsafe[1].Int16Array,
|
||
uint16Array_inBuffer=Unsafe[1].Uint16Array,
|
||
int32Array_inBuffer=Unsafe[1].Int32Array,
|
||
uint32Array_inBuffer=Unsafe[1].Uint32Array,
|
||
float32Array_inBuffer=Unsafe[1].Float32Array,
|
||
float64Array_inBuffer=Unsafe[1].Float64Array,
|
||
set=caml_js_set,
|
||
get$1=caml_js_get,
|
||
unsafe_get=caml_js_get,
|
||
dataView=Unsafe[1].DataView;
|
||
function of_arrayBuffer(ab)
|
||
{var uint8=new uint8Array_fromBuffer(ab);
|
||
return caml_string_of_array(uint8)}
|
||
var
|
||
Js_of_ocaml_Typed_array=
|
||
[0,
|
||
arrayBuffer,
|
||
runtime.caml_ba_kind_of_typed_array,
|
||
runtime.caml_ba_to_typed_array,
|
||
runtime.caml_ba_from_typed_array,
|
||
int8Array_inBuffer,
|
||
int8Array_inBuffer,
|
||
int8Array_inBuffer,
|
||
int8Array_inBuffer,
|
||
int8Array_inBuffer,
|
||
uint8Array_fromBuffer,
|
||
uint8Array_fromBuffer,
|
||
uint8Array_fromBuffer,
|
||
uint8Array_fromBuffer,
|
||
uint8Array_fromBuffer,
|
||
int16Array_inBuffer,
|
||
int16Array_inBuffer,
|
||
int16Array_inBuffer,
|
||
int16Array_inBuffer,
|
||
int16Array_inBuffer,
|
||
uint16Array_inBuffer,
|
||
uint16Array_inBuffer,
|
||
uint16Array_inBuffer,
|
||
uint16Array_inBuffer,
|
||
uint16Array_inBuffer,
|
||
int32Array_inBuffer,
|
||
int32Array_inBuffer,
|
||
int32Array_inBuffer,
|
||
int32Array_inBuffer,
|
||
int32Array_inBuffer,
|
||
uint32Array_inBuffer,
|
||
uint32Array_inBuffer,
|
||
uint32Array_inBuffer,
|
||
uint32Array_inBuffer,
|
||
uint32Array_inBuffer,
|
||
float32Array_inBuffer,
|
||
float32Array_inBuffer,
|
||
float32Array_inBuffer,
|
||
float32Array_inBuffer,
|
||
float32Array_inBuffer,
|
||
float64Array_inBuffer,
|
||
float64Array_inBuffer,
|
||
float64Array_inBuffer,
|
||
float64Array_inBuffer,
|
||
float64Array_inBuffer,
|
||
set,
|
||
get$1,
|
||
unsafe_get,
|
||
dataView,
|
||
dataView,
|
||
[0,
|
||
runtime.bigstring_to_array_buffer,
|
||
runtime.bigstring_to_typed_array,
|
||
runtime.bigstring_of_array_buffer,
|
||
runtime.bigstring_of_typed_array],
|
||
[0,of_arrayBuffer,caml_string_of_array]];
|
||
caml_register_global
|
||
(1645,Js_of_ocaml_Typed_array,"Js_of_ocaml__Typed_array");
|
||
var blob_constr=Unsafe[1].Blob;
|
||
function filter_map(f,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var q=param$0[2],v=param$0[1],match=caml_call1(f,v);
|
||
if(match){var v$0=match[1];return [0,v$0,filter_map(f,q)]}
|
||
var param$0=q;
|
||
continue}
|
||
return 0}}
|
||
function blob_raw(contentType,endings,a)
|
||
{var _gp_=0;
|
||
if(endings)
|
||
var _gq_=116179762 <= endings[1]?_e_:_f_,_gr_=_gq_;
|
||
else
|
||
var _gr_=0;
|
||
var
|
||
_gs_=[0,[0,cst_type,contentType],[0,[0,cst_endings,_gr_],_gp_]],
|
||
options=
|
||
filter_map
|
||
(function(param)
|
||
{var v=param[2],name=param[1];
|
||
if(v)
|
||
{var v$0=v[1];return [0,[0,name,caml_jsstring_of_string(v$0)]]}
|
||
return 0},
|
||
_gs_),
|
||
options$0=
|
||
options
|
||
?runtime.caml_js_object(caml_call1(Stdlib_array[12],options))
|
||
:t37;
|
||
return new blob_constr(caml_js_from_array(a),options$0)}
|
||
function blob_from_string(contentType,endings,s)
|
||
{return blob_raw(contentType,endings,[0,caml_jsstring_of_string(s)])}
|
||
function blob_from_any(contentType,endings,l)
|
||
{function _gn_(param)
|
||
{var _go_=param[1];
|
||
if(155580615 === _go_){var s=param[2];return s}
|
||
if(486041214 <= _go_)
|
||
{if(1037850489 <= _go_){var a=param[2];return a}
|
||
var a$0=param[2];
|
||
return a$0}
|
||
if(288368849 <= _go_)
|
||
{var s$0=param[2];return caml_jsstring_of_string(s$0)}
|
||
var b=param[2];
|
||
return b}
|
||
var l$0=caml_call2(Stdlib_list[17],_gn_,l);
|
||
return blob_raw(contentType,endings,caml_call1(Stdlib_array[12],l$0))}
|
||
function filename(file)
|
||
{var match=caml_call1(Optdef[10],file.name);
|
||
if(match){var name=match[1];return name}
|
||
var match$0=caml_call1(Optdef[10],file.fileName);
|
||
if(match$0){var name$0=match$0[1];return name$0}
|
||
return caml_call1(Stdlib[2],cst_can_t_retrieve_file_name_n)}
|
||
var doc_constr=Unsafe[1].Document;
|
||
function document(e){return e instanceof doc_constr?e:no_handler}
|
||
function blob(e){return e instanceof blob_constr?e:no_handler}
|
||
function string(e){return typeof e === "string"?e:no_handler}
|
||
function arrayBuffer$0(e){return e instanceof arrayBuffer?e:no_handler}
|
||
var
|
||
loadstart=caml_call1(Event[1],cst_loadstart),
|
||
progress=caml_call1(Event[1],cst_progress),
|
||
abort=caml_call1(Event[1],cst_abort),
|
||
error=caml_call1(Event[1],cst_error),
|
||
load=caml_call1(Event[1],cst_load),
|
||
loadend=caml_call1(Event[1],cst_loadend),
|
||
ReaderEvent=[0,loadstart,progress,abort,error,load,loadend],
|
||
fileReader=Unsafe[1].FileReader,
|
||
Js_of_ocaml_File=
|
||
[0,
|
||
blob_from_string,
|
||
blob_from_any,
|
||
[0,document,blob,function(_gm_){return _gm_},string,arrayBuffer$0],
|
||
ReaderEvent,
|
||
filename,
|
||
fileReader,
|
||
addEventListener];
|
||
caml_register_global(1647,Js_of_ocaml_File,"Js_of_ocaml__File");
|
||
var
|
||
onIE=runtime.caml_js_on_ie(0) | 0,
|
||
click=caml_call1(Event[1],cst_click),
|
||
dblclick=caml_call1(Event[1],cst_dblclick),
|
||
mousedown=caml_call1(Event[1],cst_mousedown),
|
||
mouseup=caml_call1(Event[1],cst_mouseup),
|
||
mouseover=caml_call1(Event[1],cst_mouseover),
|
||
mousemove=caml_call1(Event[1],cst_mousemove),
|
||
mouseout=caml_call1(Event[1],cst_mouseout),
|
||
keypress=caml_call1(Event[1],cst_keypress),
|
||
keydown=caml_call1(Event[1],cst_keydown),
|
||
keyup=caml_call1(Event[1],cst_keyup),
|
||
mousewheel=caml_call1(Event[1],cst_mousewheel),
|
||
DOMMouseScroll=caml_call1(Event[1],cst_DOMMouseScroll),
|
||
touchstart=caml_call1(Event[1],cst_touchstart),
|
||
touchmove=caml_call1(Event[1],cst_touchmove),
|
||
touchend=caml_call1(Event[1],cst_touchend),
|
||
touchcancel=caml_call1(Event[1],cst_touchcancel),
|
||
dragstart=caml_call1(Event[1],cst_dragstart),
|
||
dragend=caml_call1(Event[1],cst_dragend),
|
||
dragenter=caml_call1(Event[1],cst_dragenter),
|
||
dragover=caml_call1(Event[1],cst_dragover),
|
||
dragleave=caml_call1(Event[1],cst_dragleave),
|
||
drag=caml_call1(Event[1],cst_drag),
|
||
drop=caml_call1(Event[1],cst_drop),
|
||
hashchange=caml_call1(Event[1],cst_hashchange),
|
||
change=caml_call1(Event[1],cst_change),
|
||
input=caml_call1(Event[1],cst_input),
|
||
timeupdate=caml_call1(Event[1],cst_timeupdate),
|
||
submit=caml_call1(Event[1],cst_submit),
|
||
scroll=caml_call1(Event[1],cst_scroll),
|
||
focus=caml_call1(Event[1],cst_focus),
|
||
blur=caml_call1(Event[1],cst_blur),
|
||
load$0=caml_call1(Event[1],cst_load$0),
|
||
unload=caml_call1(Event[1],cst_unload),
|
||
beforeunload=caml_call1(Event[1],cst_beforeunload),
|
||
resize=caml_call1(Event[1],cst_resize),
|
||
orientationchange=caml_call1(Event[1],cst_orientationchange),
|
||
popstate=caml_call1(Event[1],cst_popstate),
|
||
error$0=caml_call1(Event[1],cst_error$0),
|
||
abort$0=caml_call1(Event[1],cst_abort$0),
|
||
select=caml_call1(Event[1],cst_select),
|
||
online=caml_call1(Event[1],cst_online),
|
||
offline=caml_call1(Event[1],cst_offline),
|
||
checking=caml_call1(Event[1],cst_checking),
|
||
noupdate=caml_call1(Event[1],cst_noupdate),
|
||
downloading=caml_call1(Event[1],cst_downloading),
|
||
progress$0=caml_call1(Event[1],cst_progress$0),
|
||
updateready=caml_call1(Event[1],cst_updateready),
|
||
cached=caml_call1(Event[1],cst_cached),
|
||
obsolete=caml_call1(Event[1],cst_obsolete),
|
||
domContentLoaded=caml_call1(Event[1],cst_DOMContentLoaded),
|
||
animationstart=caml_call1(Event[1],cst_animationstart),
|
||
animationend=caml_call1(Event[1],cst_animationend),
|
||
animationiteration=caml_call1(Event[1],cst_animationiteration),
|
||
animationcancel=caml_call1(Event[1],cst_animationcancel),
|
||
canplay=caml_call1(Event[1],cst_canplay),
|
||
canplaythrough=caml_call1(Event[1],cst_canplaythrough),
|
||
durationchange=caml_call1(Event[1],cst_durationchange),
|
||
emptied=caml_call1(Event[1],cst_emptied),
|
||
ended=caml_call1(Event[1],cst_ended),
|
||
gotpointercapture=caml_call1(Event[1],cst_gotpointercapture),
|
||
loadeddata=caml_call1(Event[1],cst_loadeddata),
|
||
loadedmetadata=caml_call1(Event[1],cst_loadedmetadata),
|
||
loadstart$0=caml_call1(Event[1],cst_loadstart$0),
|
||
lostpointercapture=caml_call1(Event[1],cst_lostpointercapture),
|
||
pause=caml_call1(Event[1],cst_pause),
|
||
play=caml_call1(Event[1],cst_play),
|
||
playing=caml_call1(Event[1],cst_playing),
|
||
pointerenter=caml_call1(Event[1],cst_pointerenter),
|
||
pointercancel=caml_call1(Event[1],cst_pointercancel),
|
||
pointerdown=caml_call1(Event[1],cst_pointerdown),
|
||
pointerleave=caml_call1(Event[1],cst_pointerleave),
|
||
pointermove=caml_call1(Event[1],cst_pointermove),
|
||
pointerout=caml_call1(Event[1],cst_pointerout),
|
||
pointerover=caml_call1(Event[1],cst_pointerover),
|
||
pointerup=caml_call1(Event[1],cst_pointerup),
|
||
ratechange=caml_call1(Event[1],cst_ratechange),
|
||
seeked=caml_call1(Event[1],cst_seeked),
|
||
seeking=caml_call1(Event[1],cst_seeking),
|
||
stalled=caml_call1(Event[1],cst_stalled),
|
||
suspend=caml_call1(Event[1],cst_suspend),
|
||
volumechange=caml_call1(Event[1],cst_volumechange),
|
||
waiting=caml_call1(Event[1],cst_waiting),
|
||
make$1=Event[1],
|
||
Event$0=
|
||
[0,
|
||
click,
|
||
dblclick,
|
||
mousedown,
|
||
mouseup,
|
||
mouseover,
|
||
mousemove,
|
||
mouseout,
|
||
keypress,
|
||
keydown,
|
||
keyup,
|
||
mousewheel,
|
||
DOMMouseScroll,
|
||
touchstart,
|
||
touchmove,
|
||
touchend,
|
||
touchcancel,
|
||
dragstart,
|
||
dragend,
|
||
dragenter,
|
||
dragover,
|
||
dragleave,
|
||
drag,
|
||
drop,
|
||
hashchange,
|
||
change,
|
||
input,
|
||
timeupdate,
|
||
submit,
|
||
scroll,
|
||
focus,
|
||
blur,
|
||
load$0,
|
||
unload,
|
||
beforeunload,
|
||
resize,
|
||
orientationchange,
|
||
popstate,
|
||
error$0,
|
||
abort$0,
|
||
select,
|
||
online,
|
||
offline,
|
||
checking,
|
||
noupdate,
|
||
downloading,
|
||
progress$0,
|
||
updateready,
|
||
cached,
|
||
obsolete,
|
||
domContentLoaded,
|
||
animationstart,
|
||
animationend,
|
||
animationiteration,
|
||
animationcancel,
|
||
canplay,
|
||
canplaythrough,
|
||
durationchange,
|
||
emptied,
|
||
ended,
|
||
gotpointercapture,
|
||
loadeddata,
|
||
loadedmetadata,
|
||
loadstart$0,
|
||
lostpointercapture,
|
||
pause,
|
||
play,
|
||
playing,
|
||
pointerenter,
|
||
pointercancel,
|
||
pointerdown,
|
||
pointerleave,
|
||
pointermove,
|
||
pointerout,
|
||
pointerover,
|
||
pointerup,
|
||
ratechange,
|
||
seeked,
|
||
seeking,
|
||
stalled,
|
||
suspend,
|
||
volumechange,
|
||
waiting,
|
||
make$1],
|
||
d="2d";
|
||
function location_origin(loc)
|
||
{function _gk_(o){return o}
|
||
function _gl_(param)
|
||
{var protocol=loc.protocol,hostname=loc.hostname,port=loc.port;
|
||
if
|
||
(caml_call2(symbol$8,protocol.length,0)
|
||
&&
|
||
caml_call2(symbol$8,hostname.length,0))
|
||
return "";
|
||
var origin=protocol.concat("//",hostname);
|
||
return caml_call2(symbol$9,port.length,0)
|
||
?origin.concat(":",loc.port)
|
||
:origin}
|
||
return caml_call3(Optdef[7],loc.origin,_gl_,_gk_)}
|
||
var _g_=Unsafe[1],document$0=_g_.document;
|
||
function getElementById(id)
|
||
{function _gh_(pnode){return pnode}
|
||
function _gi_(param){throw Stdlib[8]}
|
||
var _gj_=document$0.getElementById(caml_jsstring_of_string(id));
|
||
return caml_call3(Opt[7],_gj_,_gi_,_gh_)}
|
||
function getElementById_exn(id)
|
||
{function _gd_(pnode){return pnode}
|
||
function _ge_(param)
|
||
{var _gg_=caml_call2(Stdlib_printf[4],_h_,id);
|
||
return caml_call1(Stdlib[2],_gg_)}
|
||
var _gf_=document$0.getElementById(caml_jsstring_of_string(id));
|
||
return caml_call3(Opt[7],_gf_,_ge_,_gd_)}
|
||
function getElementById_opt(id)
|
||
{var _gc_=document$0.getElementById(caml_jsstring_of_string(id));
|
||
return caml_call1(Opt[10],_gc_)}
|
||
function getElementById_coerce(id,coerce)
|
||
{function _f__(e)
|
||
{var _gb_=caml_call1(coerce,e);return caml_call1(Opt[10],_gb_)}
|
||
function _f$_(param){return 0}
|
||
var _ga_=document$0.getElementById(caml_jsstring_of_string(id));
|
||
return caml_call3(Opt[7],_ga_,_f$_,_f__)}
|
||
function opt_iter(x,f){if(x){var v=x[1];return caml_call1(f,v)}return 0}
|
||
function createElement(doc,name)
|
||
{return doc.createElement(caml_jsstring_of_string(name))}
|
||
function unsafeCreateElement(doc,name){return createElement(doc,name)}
|
||
var createElementSyntax=[0,785140586];
|
||
function unsafeCreateElementEx(type,name,doc,elt)
|
||
{for(;;)
|
||
{if(0 === type && 0 === name)return createElement(doc,elt);
|
||
var _f4_=createElementSyntax[1];
|
||
if(785140586 === _f4_)
|
||
{try
|
||
{var
|
||
el=document$0.createElement('<input name="x">'),
|
||
_f7_=el.tagName.toLowerCase() === "input"?1:0,
|
||
_f8_=_f7_?el.name === "x"?1:0:_f7_,
|
||
_f5_=_f8_}
|
||
catch(_f9_){var _f5_=0}
|
||
var _f6_=_f5_?982028505:-1003883683;
|
||
createElementSyntax[1] = _f6_;
|
||
continue}
|
||
if(982028505 <= _f4_)
|
||
{var a=new array_length();
|
||
a.push("<",caml_jsstring_of_string(elt));
|
||
opt_iter
|
||
(type,
|
||
function(t){a.push(' type="',caml_js_html_escape(t),'"');return 0});
|
||
opt_iter
|
||
(name,
|
||
function(n){a.push(' name="',caml_js_html_escape(n),'"');return 0});
|
||
a.push(">");
|
||
return doc.createElement(a.join(""))}
|
||
var res=createElement(doc,elt);
|
||
opt_iter(type,function(t){return res.type = t});
|
||
opt_iter(name,function(n){return res.name = n});
|
||
return res}}
|
||
function createHtml(doc){return unsafeCreateElement(doc,cst_html)}
|
||
function createHead(doc){return unsafeCreateElement(doc,cst_head)}
|
||
function createLink(doc){return unsafeCreateElement(doc,cst_link)}
|
||
function createTitle(doc){return unsafeCreateElement(doc,cst_title)}
|
||
function createMeta(doc){return unsafeCreateElement(doc,cst_meta)}
|
||
function createBase(doc){return unsafeCreateElement(doc,cst_base)}
|
||
function createStyle(doc){return unsafeCreateElement(doc,cst_style)}
|
||
function createBody(doc){return unsafeCreateElement(doc,cst_body)}
|
||
function createForm(doc){return unsafeCreateElement(doc,cst_form)}
|
||
function createOptgroup(doc){return unsafeCreateElement(doc,cst_optgroup)}
|
||
function createOption(doc){return unsafeCreateElement(doc,cst_option)}
|
||
function createSelect(type,name,doc)
|
||
{return unsafeCreateElementEx(type,name,doc,cst_select$0)}
|
||
function createInput(type,name,doc)
|
||
{return unsafeCreateElementEx(type,name,doc,cst_input$0)}
|
||
function createTextarea(type,name,doc)
|
||
{return unsafeCreateElementEx(type,name,doc,cst_textarea)}
|
||
function createButton(type,name,doc)
|
||
{return unsafeCreateElementEx(type,name,doc,cst_button)}
|
||
function createLabel(doc){return unsafeCreateElement(doc,cst_label)}
|
||
function createFieldset(doc){return unsafeCreateElement(doc,cst_fieldset)}
|
||
function createLegend(doc){return unsafeCreateElement(doc,cst_legend)}
|
||
function createUl(doc){return unsafeCreateElement(doc,cst_ul)}
|
||
function createOl(doc){return unsafeCreateElement(doc,cst_ol)}
|
||
function createDl(doc){return unsafeCreateElement(doc,cst_dl)}
|
||
function createLi(doc){return unsafeCreateElement(doc,cst_li)}
|
||
function createDiv(doc){return unsafeCreateElement(doc,cst_div)}
|
||
function createEmbed(doc){return unsafeCreateElement(doc,cst_embed)}
|
||
function createP(doc){return unsafeCreateElement(doc,cst_p)}
|
||
function createH1(doc){return unsafeCreateElement(doc,cst_h1)}
|
||
function createH2(doc){return unsafeCreateElement(doc,cst_h2)}
|
||
function createH3(doc){return unsafeCreateElement(doc,cst_h3)}
|
||
function createH4(doc){return unsafeCreateElement(doc,cst_h4)}
|
||
function createH5(doc){return unsafeCreateElement(doc,cst_h5)}
|
||
function createH6(doc){return unsafeCreateElement(doc,cst_h6)}
|
||
function createQ(doc){return unsafeCreateElement(doc,cst_q)}
|
||
function createBlockquote(doc)
|
||
{return unsafeCreateElement(doc,cst_blockquote)}
|
||
function createPre(doc){return unsafeCreateElement(doc,cst_pre)}
|
||
function createBr(doc){return unsafeCreateElement(doc,cst_br)}
|
||
function createHr(doc){return unsafeCreateElement(doc,cst_hr)}
|
||
function createIns(doc){return unsafeCreateElement(doc,cst_ins)}
|
||
function createDel(doc){return unsafeCreateElement(doc,cst_del)}
|
||
function createA(doc){return unsafeCreateElement(doc,cst_a)}
|
||
function createImg(doc){return unsafeCreateElement(doc,cst_img)}
|
||
function createObject(doc){return unsafeCreateElement(doc,cst_object)}
|
||
function createParam(doc){return unsafeCreateElement(doc,cst_param)}
|
||
function createMap(doc){return unsafeCreateElement(doc,cst_map)}
|
||
function createArea(doc){return unsafeCreateElement(doc,cst_area)}
|
||
function createScript(doc){return unsafeCreateElement(doc,cst_script)}
|
||
function createTable(doc){return unsafeCreateElement(doc,cst_table)}
|
||
function createCaption(doc){return unsafeCreateElement(doc,cst_caption)}
|
||
function createCol(doc){return unsafeCreateElement(doc,cst_col)}
|
||
function createColgroup(doc){return unsafeCreateElement(doc,cst_colgroup)}
|
||
function createThead(doc){return unsafeCreateElement(doc,cst_thead)}
|
||
function createTfoot(doc){return unsafeCreateElement(doc,cst_tfoot)}
|
||
function createTbody(doc){return unsafeCreateElement(doc,cst_tbody)}
|
||
function createTr(doc){return unsafeCreateElement(doc,cst_tr)}
|
||
function createTh(doc){return unsafeCreateElement(doc,cst_th)}
|
||
function createTd(doc){return unsafeCreateElement(doc,cst_td)}
|
||
function createSub(doc){return createElement(doc,cst_sub)}
|
||
function createSup(doc){return createElement(doc,cst_sup)}
|
||
function createSpan(doc){return createElement(doc,cst_span)}
|
||
function createTt(doc){return createElement(doc,cst_tt)}
|
||
function createI(doc){return createElement(doc,cst_i)}
|
||
function createB(doc){return createElement(doc,cst_b)}
|
||
function createBig(doc){return createElement(doc,cst_big)}
|
||
function createSmall(doc){return createElement(doc,cst_small)}
|
||
function createEm(doc){return createElement(doc,cst_em)}
|
||
function createStrong(doc){return createElement(doc,cst_strong)}
|
||
function createCite(doc){return createElement(doc,cst_cite)}
|
||
function createDfn(doc){return createElement(doc,cst_dfn)}
|
||
function createCode(doc){return createElement(doc,cst_code)}
|
||
function createSamp(doc){return createElement(doc,cst_samp)}
|
||
function createKbd(doc){return createElement(doc,cst_kbd)}
|
||
function createVar(doc){return createElement(doc,cst_var)}
|
||
function createAbbr(doc){return createElement(doc,cst_abbr)}
|
||
function createDd(doc){return createElement(doc,cst_dd)}
|
||
function createDt(doc){return createElement(doc,cst_dt)}
|
||
function createNoscript(doc){return createElement(doc,cst_noscript)}
|
||
function createAddress(doc){return createElement(doc,cst_address)}
|
||
function createFrameset(doc){return unsafeCreateElement(doc,cst_frameset)}
|
||
function createFrame(doc){return unsafeCreateElement(doc,cst_frame)}
|
||
function createIframe(doc){return unsafeCreateElement(doc,cst_iframe)}
|
||
function createAudio(doc){return unsafeCreateElement(doc,cst_audio)}
|
||
function createVideo(doc){return unsafeCreateElement(doc,cst_video)}
|
||
var
|
||
Canvas_not_available=
|
||
[248,cst_Js_of_ocaml_Dom_html_Canva,caml_fresh_oo_id(0)];
|
||
function createCanvas(doc)
|
||
{var c=unsafeCreateElement(doc,cst_canvas);
|
||
if(1 - caml_call1(Opt[5],c.getContext))throw Canvas_not_available;
|
||
return c}
|
||
var
|
||
html_element=Unsafe[1].HTMLElement,
|
||
element$0=
|
||
html_element === t37
|
||
?function(e){return e.innerHTML === t37?no_handler:e}
|
||
:function(e){return e instanceof html_element?e:no_handler};
|
||
function unsafeCoerce(tag,e)
|
||
{var _f3_=caml_jsstring_of_string(tag);
|
||
return e.tagName.toLowerCase() === _f3_?e:no_handler}
|
||
function a(e){return unsafeCoerce(cst_a$0,e)}
|
||
function area(e){return unsafeCoerce(cst_area$0,e)}
|
||
function base(e){return unsafeCoerce(cst_base$0,e)}
|
||
function blockquote(e){return unsafeCoerce(cst_blockquote$0,e)}
|
||
function body(e){return unsafeCoerce(cst_body$0,e)}
|
||
function br(e){return unsafeCoerce(cst_br$0,e)}
|
||
function button(e){return unsafeCoerce(cst_button$0,e)}
|
||
function canvas(e){return unsafeCoerce(cst_canvas$0,e)}
|
||
function caption(e){return unsafeCoerce(cst_caption$0,e)}
|
||
function col(e){return unsafeCoerce(cst_col$0,e)}
|
||
function colgroup(e){return unsafeCoerce(cst_colgroup$0,e)}
|
||
function del(e){return unsafeCoerce(cst_del$0,e)}
|
||
function div(e){return unsafeCoerce(cst_div$0,e)}
|
||
function dl(e){return unsafeCoerce(cst_dl$0,e)}
|
||
function fieldset(e){return unsafeCoerce(cst_fieldset$0,e)}
|
||
function embed(e){return unsafeCoerce(cst_embed$0,e)}
|
||
function form(e){return unsafeCoerce(cst_form$0,e)}
|
||
function frameset(e){return unsafeCoerce(cst_frameset$0,e)}
|
||
function frame(e){return unsafeCoerce(cst_frame$0,e)}
|
||
function h1(e){return unsafeCoerce(cst_h1$0,e)}
|
||
function h2(e){return unsafeCoerce(cst_h2$0,e)}
|
||
function h3(e){return unsafeCoerce(cst_h3$0,e)}
|
||
function h4(e){return unsafeCoerce(cst_h4$0,e)}
|
||
function h5(e){return unsafeCoerce(cst_h5$0,e)}
|
||
function h6(e){return unsafeCoerce(cst_h6$0,e)}
|
||
function head(e){return unsafeCoerce(cst_head$0,e)}
|
||
function hr(e){return unsafeCoerce(cst_hr$0,e)}
|
||
function html(e){return unsafeCoerce(cst_html$0,e)}
|
||
function iframe(e){return unsafeCoerce(cst_iframe$0,e)}
|
||
function img(e){return unsafeCoerce(cst_img$0,e)}
|
||
function input$0(e){return unsafeCoerce(cst_input$1,e)}
|
||
function ins(e){return unsafeCoerce(cst_ins$0,e)}
|
||
function label(e){return unsafeCoerce(cst_label$0,e)}
|
||
function legend(e){return unsafeCoerce(cst_legend$0,e)}
|
||
function li(e){return unsafeCoerce(cst_li$0,e)}
|
||
function link(e){return unsafeCoerce(cst_link$0,e)}
|
||
function map$2(e){return unsafeCoerce(cst_map$0,e)}
|
||
function meta(e){return unsafeCoerce(cst_meta$0,e)}
|
||
function object(e){return unsafeCoerce(cst_object$0,e)}
|
||
function ol(e){return unsafeCoerce(cst_ol$0,e)}
|
||
function optgroup(e){return unsafeCoerce(cst_optgroup$0,e)}
|
||
function option$1(e){return unsafeCoerce(cst_option$0,e)}
|
||
function p(e){return unsafeCoerce(cst_p$0,e)}
|
||
function param(e){return unsafeCoerce(cst_param$0,e)}
|
||
function pre(e){return unsafeCoerce(cst_pre$0,e)}
|
||
function q(e){return unsafeCoerce(cst_q$0,e)}
|
||
function script(e){return unsafeCoerce(cst_script$0,e)}
|
||
function select$0(e){return unsafeCoerce(cst_select$1,e)}
|
||
function style(e){return unsafeCoerce(cst_style$0,e)}
|
||
function table(e){return unsafeCoerce(cst_table$0,e)}
|
||
function tbody(e){return unsafeCoerce(cst_tbody$0,e)}
|
||
function td(e){return unsafeCoerce(cst_td$0,e)}
|
||
function textarea(e){return unsafeCoerce(cst_textarea$0,e)}
|
||
function tfoot(e){return unsafeCoerce(cst_tfoot$0,e)}
|
||
function th(e){return unsafeCoerce(cst_th$0,e)}
|
||
function thead(e){return unsafeCoerce(cst_thead$0,e)}
|
||
function title(e){return unsafeCoerce(cst_title$0,e)}
|
||
function tr(e){return unsafeCoerce(cst_tr$0,e)}
|
||
function ul(e){return unsafeCoerce(cst_ul$0,e)}
|
||
function audio(e){return unsafeCoerce(cst_audio$0,e)}
|
||
function video(e){return unsafeCoerce(cst_video$0,e)}
|
||
function unsafeCoerceEvent(constr,ev)
|
||
{if(constr !== t37 && ev instanceof constr)return ev;return no_handler}
|
||
function mouseEvent(ev){return unsafeCoerceEvent(Unsafe[1].MouseEvent,ev)}
|
||
function keyboardEvent(ev)
|
||
{return unsafeCoerceEvent(Unsafe[1].KeyboardEvent,ev)}
|
||
function wheelEvent(ev){return unsafeCoerceEvent(Unsafe[1].WheelEvent,ev)}
|
||
function mouseScrollEvent(ev)
|
||
{return unsafeCoerceEvent(Unsafe[1].MouseScrollEvent,ev)}
|
||
function popStateEvent(ev)
|
||
{return unsafeCoerceEvent(Unsafe[1].PopStateEvent,ev)}
|
||
function eventRelatedTarget(e)
|
||
{function _f0_(param)
|
||
{var match=caml_string_of_jsstring(e.type);
|
||
if(caml_string_notequal(match,cst_mouseout$0))
|
||
{if(caml_string_notequal(match,cst_mouseover$0))return no_handler;
|
||
var _f1_=function(param){throw [0,Assert_failure,_i_]};
|
||
return caml_call2(Optdef[8],e.fromElement,_f1_)}
|
||
function _f2_(param){throw [0,Assert_failure,_j_]}
|
||
return caml_call2(Optdef[8],e.toElement,_f2_)}
|
||
return caml_call2(Optdef[8],e.relatedTarget,_f0_)}
|
||
function eventAbsolutePosition(e)
|
||
{var body=document$0.body,html=document$0.documentElement;
|
||
return [0,
|
||
(e.clientX + body.scrollLeft | 0) + html.scrollLeft | 0,
|
||
(e.clientY + body.scrollTop | 0) + html.scrollTop | 0]}
|
||
function eventAbsolutePosition$0(e)
|
||
{function _fW_(x)
|
||
{function _fY_(y){return [0,x,y]}
|
||
function _fZ_(param){return eventAbsolutePosition(e)}
|
||
return caml_call3(Optdef[7],e.pageY,_fZ_,_fY_)}
|
||
function _fX_(param){return eventAbsolutePosition(e)}
|
||
return caml_call3(Optdef[7],e.pageX,_fX_,_fW_)}
|
||
function elementClientPosition(e)
|
||
{var
|
||
r=e.getBoundingClientRect(),
|
||
body=document$0.body,
|
||
html=document$0.documentElement;
|
||
return [0,
|
||
((r.left | 0) - body.clientLeft | 0) - html.clientLeft | 0,
|
||
((r.top | 0) - body.clientTop | 0) - html.clientTop | 0]}
|
||
function getDocumentScroll(param)
|
||
{var body=document$0.body,html=document$0.documentElement;
|
||
return [0,
|
||
body.scrollLeft + html.scrollLeft | 0,
|
||
body.scrollTop + html.scrollTop | 0]}
|
||
function buttonPressed(ev)
|
||
{function _fU_(x){return x}
|
||
function _fV_(param)
|
||
{var match=ev.button,switcher=match - 1 | 0;
|
||
if(! (3 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:return 1;case 1:return 3;case 2:break;default:return 2}
|
||
return 0}
|
||
return caml_call3(Optdef[7],ev.which,_fV_,_fU_)}
|
||
function addMousewheelEventListenerWith(e,capture,once,passive,h)
|
||
{var d=createDiv(document$0);
|
||
d.setAttribute("onmousewheel","return;");
|
||
if(typeof d.onmousewheel === "function")
|
||
{var
|
||
_fQ_=
|
||
handler
|
||
(function(e)
|
||
{function _fS_(param){return 0}
|
||
var
|
||
dx=
|
||
(- caml_call2(Optdef[8],e.wheelDeltaX,_fS_) | 0) / 40 | 0;
|
||
function _fT_(param){return e.wheelDelta}
|
||
var
|
||
dy=
|
||
(- caml_call2(Optdef[8],e.wheelDeltaY,_fT_) | 0) / 40 | 0;
|
||
return caml_call3(h,e,dx,dy)});
|
||
return addEventListenerWithOptions
|
||
(e,Event$0[11],capture,once,passive,_fQ_)}
|
||
var
|
||
_fR_=
|
||
handler
|
||
(function(e)
|
||
{var d=e.detail;
|
||
return e.axis === e.HORIZONTAL
|
||
?caml_call3(h,e,d,0)
|
||
:caml_call3(h,e,0,d)});
|
||
return addEventListenerWithOptions
|
||
(e,Event$0[12],capture,once,passive,_fR_)}
|
||
function addMousewheelEventListener(e,h,capt)
|
||
{return addMousewheelEventListenerWith(e,[0,capt],0,0,h)}
|
||
function f(v)
|
||
{var
|
||
match=caml_string_of_jsstring(v),
|
||
switch$0=caml_string_compare(match,cst_KeyH);
|
||
if(0 <= switch$0)
|
||
{if(! (0 < switch$0))return 8;
|
||
var switch$1=caml_string_compare(match,cst_Numpad4);
|
||
if(0 <= switch$1)
|
||
{if(! (0 < switch$1))return 72;
|
||
var switch$2=caml_string_compare(match,cst_PageUp);
|
||
if(0 <= switch$2)
|
||
{if(! (0 < switch$2))return 98;
|
||
var switch$3=caml_string_compare(match,cst_ShiftRight);
|
||
if(0 <= switch$3)
|
||
{if(! (0 < switch$3))return 91;
|
||
if(! caml_string_notequal(match,cst_Slash))return 55;
|
||
if(! caml_string_notequal(match,cst_Space))return 41;
|
||
if(! caml_string_notequal(match,cst_Tab))return 39;
|
||
if(! caml_string_notequal(match,cst_VolumeDown))return 103;
|
||
if(! caml_string_notequal(match,cst_VolumeMute))return 102;
|
||
if(! caml_string_notequal(match,cst_VolumeUp))return 104}
|
||
else
|
||
{if(! caml_string_notequal(match,cst_Pause))return 123;
|
||
if(! caml_string_notequal(match,cst_Period))return 54;
|
||
if(! caml_string_notequal(match,cst_PrintScreen))return 120;
|
||
if(! caml_string_notequal(match,cst_Quote))return 50;
|
||
if(! caml_string_notequal(match,cst_ScrollLock))return 119;
|
||
if(! caml_string_notequal(match,cst_Semicolon))return 49;
|
||
if(! caml_string_notequal(match,cst_ShiftLeft))return 90}}
|
||
else
|
||
{var switch$4=caml_string_compare(match,cst_NumpadDivide);
|
||
if(0 <= switch$4)
|
||
{if(! (0 < switch$4))return 84;
|
||
if(! caml_string_notequal(match,cst_NumpadEnter))return 83;
|
||
if(! caml_string_notequal(match,cst_NumpadEqual))return 82;
|
||
if(! caml_string_notequal(match,cst_NumpadMultiply))return 78;
|
||
if(! caml_string_notequal(match,cst_NumpadSubtract))return 79;
|
||
if(! caml_string_notequal(match,cst_OSLeft))return 117;
|
||
if(! caml_string_notequal(match,cst_OSRight))return 118;
|
||
if(! caml_string_notequal(match,cst_PageDown))return 99}
|
||
else
|
||
{if(! caml_string_notequal(match,cst_Numpad5))return 73;
|
||
if(! caml_string_notequal(match,cst_Numpad6))return 74;
|
||
if(! caml_string_notequal(match,cst_Numpad7))return 75;
|
||
if(! caml_string_notequal(match,cst_Numpad8))return 76;
|
||
if(! caml_string_notequal(match,cst_Numpad9))return 77;
|
||
if(! caml_string_notequal(match,cst_NumpadAdd))return 80;
|
||
if(! caml_string_notequal(match,cst_NumpadDecimal))return 81}}}
|
||
else
|
||
{var switch$5=caml_string_compare(match,cst_KeyX);
|
||
if(0 <= switch$5)
|
||
{if(! (0 < switch$5))return 24;
|
||
var switch$6=caml_string_compare(match,cst_MetaRight);
|
||
if(0 <= switch$6)
|
||
{if(! (0 < switch$6))return 89;
|
||
if(! caml_string_notequal(match,cst_Minus))return 37;
|
||
if(! caml_string_notequal(match,cst_NumLock))return 85;
|
||
if(! caml_string_notequal(match,cst_Numpad0))return 68;
|
||
if(! caml_string_notequal(match,cst_Numpad1))return 69;
|
||
if(! caml_string_notequal(match,cst_Numpad2))return 70;
|
||
if(! caml_string_notequal(match,cst_Numpad3))return 71}
|
||
else
|
||
{if(! caml_string_notequal(match,cst_KeyY))return 25;
|
||
if(! caml_string_notequal(match,cst_KeyZ))return 26;
|
||
if(! caml_string_notequal(match,cst_MediaPlayPause))return 107;
|
||
if(! caml_string_notequal(match,cst_MediaStop))return 108;
|
||
if(! caml_string_notequal(match,cst_MediaTrackNext))return 106;
|
||
if(! caml_string_notequal(match,cst_MediaTrackPrevious))
|
||
return 105;
|
||
if(! caml_string_notequal(match,cst_MetaLeft))return 88}}
|
||
else
|
||
{var switch$7=caml_string_compare(match,cst_KeyP);
|
||
if(0 <= switch$7)
|
||
{if(! (0 < switch$7))return 16;
|
||
if(! caml_string_notequal(match,cst_KeyQ))return 17;
|
||
if(! caml_string_notequal(match,cst_KeyR))return 18;
|
||
if(! caml_string_notequal(match,cst_KeyS))return 19;
|
||
if(! caml_string_notequal(match,cst_KeyT))return 20;
|
||
if(! caml_string_notequal(match,cst_KeyU))return 21;
|
||
if(! caml_string_notequal(match,cst_KeyV))return 22;
|
||
if(! caml_string_notequal(match,cst_KeyW))return 23}
|
||
else
|
||
{if(! caml_string_notequal(match,cst_KeyI))return 9;
|
||
if(! caml_string_notequal(match,cst_KeyJ))return 10;
|
||
if(! caml_string_notequal(match,cst_KeyK))return 11;
|
||
if(! caml_string_notequal(match,cst_KeyL))return 12;
|
||
if(! caml_string_notequal(match,cst_KeyM))return 13;
|
||
if(! caml_string_notequal(match,cst_KeyN))return 14;
|
||
if(! caml_string_notequal(match,cst_KeyO))return 15}}}}
|
||
else
|
||
{var switch$8=caml_string_compare(match,cst_Digit6);
|
||
if(0 <= switch$8)
|
||
{if(! (0 < switch$8))return 33;
|
||
var switch$9=caml_string_compare(match,cst_F6);
|
||
if(0 <= switch$9)
|
||
{if(! (0 < switch$9))return 61;
|
||
var switch$10=caml_string_compare(match,cst_KeyA);
|
||
if(0 <= switch$10)
|
||
{if(! (0 < switch$10))return 1;
|
||
if(! caml_string_notequal(match,cst_KeyB))return 2;
|
||
if(! caml_string_notequal(match,cst_KeyC))return 3;
|
||
if(! caml_string_notequal(match,cst_KeyD))return 4;
|
||
if(! caml_string_notequal(match,cst_KeyE))return 5;
|
||
if(! caml_string_notequal(match,cst_KeyF))return 6;
|
||
if(! caml_string_notequal(match,cst_KeyG))return 7}
|
||
else
|
||
{if(! caml_string_notequal(match,cst_F7))return 62;
|
||
if(! caml_string_notequal(match,cst_F8))return 63;
|
||
if(! caml_string_notequal(match,cst_F9))return 64;
|
||
if(! caml_string_notequal(match,cst_Home))return 100;
|
||
if(! caml_string_notequal(match,cst_Insert))return 44;
|
||
if(! caml_string_notequal(match,cst_IntlBackslash))return 121;
|
||
if(! caml_string_notequal(match,cst_IntlYen))return 122}}
|
||
else
|
||
{var switch$11=caml_string_compare(match,cst_F1);
|
||
if(0 <= switch$11)
|
||
{if(! (0 < switch$11))return 56;
|
||
if(! caml_string_notequal(match,cst_F10))return 65;
|
||
if(! caml_string_notequal(match,cst_F11))return 66;
|
||
if(! caml_string_notequal(match,cst_F12))return 67;
|
||
if(! caml_string_notequal(match,cst_F2))return 57;
|
||
if(! caml_string_notequal(match,cst_F3))return 58;
|
||
if(! caml_string_notequal(match,cst_F4))return 59;
|
||
if(! caml_string_notequal(match,cst_F5))return 60}
|
||
else
|
||
{if(! caml_string_notequal(match,cst_Digit7))return 34;
|
||
if(! caml_string_notequal(match,cst_Digit8))return 35;
|
||
if(! caml_string_notequal(match,cst_Digit9))return 36;
|
||
if(! caml_string_notequal(match,cst_End))return 101;
|
||
if(! caml_string_notequal(match,cst_Enter))return 40;
|
||
if(! caml_string_notequal(match,cst_Equal))return 38;
|
||
if(! caml_string_notequal(match,cst_Escape))return 42}}}
|
||
else
|
||
{var switch$12=caml_string_compare(match,cst_BrowserRefresh);
|
||
if(0 <= switch$12)
|
||
{if(! (0 < switch$12))return 113;
|
||
var switch$13=caml_string_compare(match,cst_Delete);
|
||
if(0 <= switch$13)
|
||
{if(! (0 < switch$13))return 45;
|
||
if(! caml_string_notequal(match,cst_Digit0))return 27;
|
||
if(! caml_string_notequal(match,cst_Digit1))return 28;
|
||
if(! caml_string_notequal(match,cst_Digit2))return 29;
|
||
if(! caml_string_notequal(match,cst_Digit3))return 30;
|
||
if(! caml_string_notequal(match,cst_Digit4))return 31;
|
||
if(! caml_string_notequal(match,cst_Digit5))return 32}
|
||
else
|
||
{if(! caml_string_notequal(match,cst_BrowserSearch))return 110;
|
||
if(! caml_string_notequal(match,cst_BrowserStop))return 114;
|
||
if(! caml_string_notequal(match,cst_CapsLock))return 46;
|
||
if(! caml_string_notequal(match,cst_Comma))return 53;
|
||
if(! caml_string_notequal(match,cst_ContextMenu))return 109;
|
||
if(! caml_string_notequal(match,cst_ControlLeft))return 86;
|
||
if(! caml_string_notequal(match,cst_ControlRight))return 87}}
|
||
else
|
||
{var switch$14=caml_string_compare(match,cst_Backslash);
|
||
if(0 <= switch$14)
|
||
{if(! (0 < switch$14))return 52;
|
||
if(! caml_string_notequal(match,cst_Backspace))return 43;
|
||
if(! caml_string_notequal(match,cst_BracketLeft))return 47;
|
||
if(! caml_string_notequal(match,cst_BracketRight))return 48;
|
||
if(! caml_string_notequal(match,cst_BrowserBack))return 116;
|
||
if(! caml_string_notequal(match,cst_BrowserFavorites))
|
||
return 112;
|
||
if(! caml_string_notequal(match,cst_BrowserForward))return 115;
|
||
if(! caml_string_notequal(match,cst_BrowserHome))return 111}
|
||
else
|
||
{if(! caml_string_notequal(match,cst_AltLeft))return 92;
|
||
if(! caml_string_notequal(match,cst_AltRight))return 93;
|
||
if(! caml_string_notequal(match,cst_ArrowDown))return 97;
|
||
if(! caml_string_notequal(match,cst_ArrowLeft))return 94;
|
||
if(! caml_string_notequal(match,cst_ArrowRight))return 95;
|
||
if(! caml_string_notequal(match,cst_ArrowUp))return 96;
|
||
if(! caml_string_notequal(match,cst_Backquote))return 51}}}}
|
||
return 0}
|
||
function try_key_code_left(param)
|
||
{if(19 <= param)
|
||
{if(91 === param)return 88}
|
||
else
|
||
if(16 <= param)
|
||
{var switcher=param - 16 | 0;
|
||
switch(switcher){case 0:return 90;case 1:return 86;default:return 92}}
|
||
return 0}
|
||
function try_key_code_right(param)
|
||
{if(19 <= param)
|
||
{if(91 === param)return 89}
|
||
else
|
||
if(16 <= param)
|
||
{var switcher=param - 16 | 0;
|
||
switch(switcher){case 0:return 91;case 1:return 87;default:return 93}}
|
||
return 0}
|
||
function try_key_code_numpad(param)
|
||
{if(47 <= param)
|
||
{var switcher=param - 96 | 0;
|
||
if(! (15 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:return 68;
|
||
case 1:return 69;
|
||
case 2:return 70;
|
||
case 3:return 71;
|
||
case 4:return 72;
|
||
case 5:return 73;
|
||
case 6:return 74;
|
||
case 7:return 75;
|
||
case 8:return 76;
|
||
case 9:return 77;
|
||
case 10:return 78;
|
||
case 11:return 80;
|
||
case 12:break;
|
||
case 13:return 79;
|
||
case 14:return 81;
|
||
default:return 84}}
|
||
else
|
||
if(12 <= param)
|
||
{var switcher$0=param - 12 | 0;
|
||
switch(switcher$0)
|
||
{case 0:return 73;
|
||
case 1:return 83;
|
||
case 21:return 77;
|
||
case 22:return 71;
|
||
case 23:return 69;
|
||
case 24:return 75;
|
||
case 25:return 72;
|
||
case 26:return 76;
|
||
case 27:return 74;
|
||
case 28:return 70;
|
||
case 33:return 68;
|
||
case 34:return 81
|
||
}}
|
||
return 0}
|
||
function try_key_code_normal(param)
|
||
{var switcher=param - 8 | 0;
|
||
if(! (214 < switcher >>> 0))
|
||
{var _fP_=switcher;
|
||
if(67 <= _fP_)
|
||
switch(_fP_)
|
||
{case 67:return 11;
|
||
case 68:return 12;
|
||
case 69:return 13;
|
||
case 70:return 14;
|
||
case 71:return 15;
|
||
case 72:return 16;
|
||
case 73:return 17;
|
||
case 74:return 18;
|
||
case 75:return 19;
|
||
case 76:return 20;
|
||
case 77:return 21;
|
||
case 78:return 22;
|
||
case 79:return 23;
|
||
case 80:return 24;
|
||
case 81:return 25;
|
||
case 82:return 26;
|
||
case 85:return 109;
|
||
case 104:return 56;
|
||
case 105:return 57;
|
||
case 106:return 58;
|
||
case 107:return 59;
|
||
case 108:return 60;
|
||
case 109:return 61;
|
||
case 110:return 62;
|
||
case 111:return 63;
|
||
case 112:return 64;
|
||
case 113:return 65;
|
||
case 114:return 66;
|
||
case 115:return 67;
|
||
case 137:return 119;
|
||
case 178:return 49;
|
||
case 179:return 38;
|
||
case 180:return 53;
|
||
case 181:return 37;
|
||
case 182:return 54;
|
||
case 183:return 55;
|
||
case 184:return 51;
|
||
case 211:return 47;
|
||
case 212:return 52;
|
||
case 213:return 48;
|
||
case 214:return 50
|
||
}
|
||
else
|
||
switch(_fP_)
|
||
{case 0:return 43;
|
||
case 1:return 39;
|
||
case 5:return 40;
|
||
case 11:return 123;
|
||
case 12:return 46;
|
||
case 19:return 42;
|
||
case 24:return 41;
|
||
case 25:return 98;
|
||
case 26:return 99;
|
||
case 27:return 101;
|
||
case 28:return 100;
|
||
case 29:return 94;
|
||
case 30:return 96;
|
||
case 31:return 95;
|
||
case 32:return 97;
|
||
case 34:return 120;
|
||
case 37:return 44;
|
||
case 38:return 45;
|
||
case 40:return 27;
|
||
case 41:return 28;
|
||
case 42:return 29;
|
||
case 43:return 30;
|
||
case 44:return 31;
|
||
case 45:return 32;
|
||
case 46:return 33;
|
||
case 47:return 34;
|
||
case 48:return 35;
|
||
case 49:return 36;
|
||
case 57:return 1;
|
||
case 58:return 2;
|
||
case 59:return 3;
|
||
case 60:return 4;
|
||
case 61:return 5;
|
||
case 62:return 6;
|
||
case 63:return 7;
|
||
case 64:return 8;
|
||
case 65:return 9;
|
||
case 66:return 10
|
||
}}
|
||
return 0}
|
||
function make_unidentified(param){return 0}
|
||
function run_next(value,f,v){return v?v:caml_call1(f,value)}
|
||
function symbol$11(x,f){return caml_call1(f,x)}
|
||
function of_event(evt)
|
||
{var _fI_=evt.keyCode;
|
||
function _fJ_(_fO_){return run_next(_fI_,try_key_code_normal,_fO_)}
|
||
var match=evt.location,switcher=match - 1 | 0;
|
||
if(2 < switcher >>> 0)
|
||
var _fK_=make_unidentified;
|
||
else
|
||
switch(switcher)
|
||
{case 0:
|
||
var
|
||
_fF_=evt.keyCode,
|
||
_fK_=function(_fM_){return run_next(_fF_,try_key_code_left,_fM_)};
|
||
break;
|
||
case 1:
|
||
var
|
||
_fG_=evt.keyCode,
|
||
_fK_=function(_fL_){return run_next(_fG_,try_key_code_right,_fL_)};
|
||
break;
|
||
default:
|
||
var
|
||
_fH_=evt.keyCode,
|
||
_fK_=function(_fN_){return run_next(_fH_,try_key_code_numpad,_fN_)}}
|
||
var value=evt.code;
|
||
return symbol$11
|
||
(symbol$11
|
||
(symbol$11
|
||
(0,
|
||
function(v)
|
||
{return v?v:caml_call3(Optdef[7],value,make_unidentified,f)}),
|
||
_fK_),
|
||
_fJ_)}
|
||
function char_of_int(value)
|
||
{if(caml_call2(symbol$5,0,value))
|
||
try
|
||
{var _fD_=[0,caml_call1(Stdlib_uchar[8],value)];return _fD_}
|
||
catch(_fE_){return 0}
|
||
return 0}
|
||
function empty_string(param){return ""}
|
||
function none(param){return 0}
|
||
function of_event$0(evt)
|
||
{var key=caml_call2(Optdef[8],evt.key,empty_string),match=key.length;
|
||
return 0 === match
|
||
?caml_call3(Optdef[7],evt.charCode,none,char_of_int)
|
||
:1 === match?char_of_int(key.charCodeAt(0) | 0):0}
|
||
function element$1(_fC_){return _fC_}
|
||
function tagged(e)
|
||
{var tag=caml_string_of_jsbytes(e.tagName.toLowerCase());
|
||
if(caml_call2(symbol$8,caml_ml_string_length(tag),0))return [61,e];
|
||
var match=runtime.caml_string_unsafe_get(tag,0),switcher=match - 97 | 0;
|
||
if(! (21 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:
|
||
return caml_string_notequal(tag,cst_a$1)
|
||
?caml_string_notequal(tag,cst_area$1)
|
||
?caml_string_notequal(tag,cst_audio$1)?[61,e]:[2,e]
|
||
:[1,e]
|
||
:[0,e];
|
||
case 1:
|
||
return caml_string_notequal(tag,cst_base$1)
|
||
?caml_string_notequal(tag,cst_blockquote$1)
|
||
?caml_string_notequal(tag,cst_body$1)
|
||
?caml_string_notequal(tag,cst_br$1)
|
||
?caml_string_notequal(tag,cst_button$1)?[61,e]:[7,e]
|
||
:[6,e]
|
||
:[5,e]
|
||
:[4,e]
|
||
:[3,e];
|
||
case 2:
|
||
return caml_string_notequal(tag,cst_canvas$1)
|
||
?caml_string_notequal(tag,cst_caption$1)
|
||
?caml_string_notequal(tag,cst_col$1)
|
||
?caml_string_notequal(tag,cst_colgroup$1)?[61,e]:[11,e]
|
||
:[10,e]
|
||
:[9,e]
|
||
:[8,e];
|
||
case 3:
|
||
return caml_string_notequal(tag,cst_del$1)
|
||
?caml_string_notequal(tag,cst_div$1)
|
||
?caml_string_notequal(tag,cst_dl$1)?[61,e]:[14,e]
|
||
:[13,e]
|
||
:[12,e];
|
||
case 4:return caml_string_notequal(tag,cst_embed$1)?[61,e]:[15,e];
|
||
case 5:
|
||
return caml_string_notequal(tag,cst_fieldset$1)
|
||
?caml_string_notequal(tag,cst_form$1)
|
||
?caml_string_notequal(tag,cst_frame$1)
|
||
?caml_string_notequal(tag,cst_frameset$1)?[61,e]:[18,e]
|
||
:[19,e]
|
||
:[17,e]
|
||
:[16,e];
|
||
case 7:
|
||
return caml_string_notequal(tag,cst_h1$1)
|
||
?caml_string_notequal(tag,cst_h2$1)
|
||
?caml_string_notequal(tag,cst_h3$1)
|
||
?caml_string_notequal(tag,cst_h4$1)
|
||
?caml_string_notequal(tag,cst_h5$1)
|
||
?caml_string_notequal(tag,cst_h6$1)
|
||
?caml_string_notequal(tag,cst_head$1)
|
||
?caml_string_notequal(tag,cst_hr$1)
|
||
?caml_string_notequal(tag,cst_html$1)?[61,e]:[28,e]
|
||
:[27,e]
|
||
:[26,e]
|
||
:[25,e]
|
||
:[24,e]
|
||
:[23,e]
|
||
:[22,e]
|
||
:[21,e]
|
||
:[20,e];
|
||
case 8:
|
||
return caml_string_notequal(tag,cst_iframe$1)
|
||
?caml_string_notequal(tag,cst_img$1)
|
||
?caml_string_notequal(tag,cst_input$2)
|
||
?caml_string_notequal(tag,cst_ins$1)?[61,e]:[32,e]
|
||
:[31,e]
|
||
:[30,e]
|
||
:[29,e];
|
||
case 11:
|
||
return caml_string_notequal(tag,cst_label$1)
|
||
?caml_string_notequal(tag,cst_legend$1)
|
||
?caml_string_notequal(tag,cst_li$1)
|
||
?caml_string_notequal(tag,cst_link$1)?[61,e]:[36,e]
|
||
:[35,e]
|
||
:[34,e]
|
||
:[33,e];
|
||
case 12:
|
||
return caml_string_notequal(tag,cst_map$1)
|
||
?caml_string_notequal(tag,cst_meta$1)?[61,e]:[38,e]
|
||
:[37,e];
|
||
case 14:
|
||
return caml_string_notequal(tag,cst_object$1)
|
||
?caml_string_notequal(tag,cst_ol$1)
|
||
?caml_string_notequal(tag,cst_optgroup$1)
|
||
?caml_string_notequal(tag,cst_option$1)?[61,e]:[42,e]
|
||
:[41,e]
|
||
:[40,e]
|
||
:[39,e];
|
||
case 15:
|
||
return caml_string_notequal(tag,cst_p$1)
|
||
?caml_string_notequal(tag,cst_param$1)
|
||
?caml_string_notequal(tag,cst_pre$1)?[61,e]:[45,e]
|
||
:[44,e]
|
||
:[43,e];
|
||
case 16:return caml_string_notequal(tag,cst_q$1)?[61,e]:[46,e];
|
||
case 18:
|
||
return caml_string_notequal(tag,cst_script$1)
|
||
?caml_string_notequal(tag,cst_select$2)
|
||
?caml_string_notequal(tag,cst_style$1)?[61,e]:[49,e]
|
||
:[48,e]
|
||
:[47,e];
|
||
case 19:
|
||
return caml_string_notequal(tag,cst_table$1)
|
||
?caml_string_notequal(tag,cst_tbody$1)
|
||
?caml_string_notequal(tag,cst_td$1)
|
||
?caml_string_notequal(tag,cst_textarea$1)
|
||
?caml_string_notequal(tag,cst_tfoot$1)
|
||
?caml_string_notequal(tag,cst_th$1)
|
||
?caml_string_notequal(tag,cst_thead$1)
|
||
?caml_string_notequal(tag,cst_title$1)
|
||
?caml_string_notequal(tag,cst_tr$1)?[61,e]:[58,e]
|
||
:[57,e]
|
||
:[56,e]
|
||
:[55,e]
|
||
:[54,e]
|
||
:[53,e]
|
||
:[52,e]
|
||
:[51,e]
|
||
:[50,e];
|
||
case 20:return caml_string_notequal(tag,cst_ul$1)?[61,e]:[59,e];
|
||
case 21:return caml_string_notequal(tag,cst_video$1)?[61,e]:[60,e]
|
||
}
|
||
return [61,e]}
|
||
function opt_tagged(e)
|
||
{function _fA_(e){return [0,tagged(e)]}
|
||
function _fB_(param){return 0}
|
||
return caml_call3(Opt[7],e,_fB_,_fA_)}
|
||
function taggedEvent(ev)
|
||
{function _fl_(ev){return [0,ev]}
|
||
function _fm_(param)
|
||
{function _fo_(ev){return [1,ev]}
|
||
function _fp_(param)
|
||
{function _fr_(ev){return [2,ev]}
|
||
function _fs_(param)
|
||
{function _fu_(ev){return [3,ev]}
|
||
function _fv_(param)
|
||
{function _fx_(ev){return [4,ev]}
|
||
function _fy_(param){return [5,ev]}
|
||
var _fz_=popStateEvent(ev);
|
||
return caml_call3(Opt[7],_fz_,_fy_,_fx_)}
|
||
var _fw_=mouseScrollEvent(ev);
|
||
return caml_call3(Opt[7],_fw_,_fv_,_fu_)}
|
||
var _ft_=wheelEvent(ev);
|
||
return caml_call3(Opt[7],_ft_,_fs_,_fr_)}
|
||
var _fq_=keyboardEvent(ev);
|
||
return caml_call3(Opt[7],_fq_,_fp_,_fo_)}
|
||
var _fn_=mouseEvent(ev);
|
||
return caml_call3(Opt[7],_fn_,_fm_,_fl_)}
|
||
function opt_taggedEvent(ev)
|
||
{function _fj_(ev){return [0,taggedEvent(ev)]}
|
||
function _fk_(param){return 0}
|
||
return caml_call3(Opt[7],ev,_fk_,_fj_)}
|
||
function stopPropagation(ev)
|
||
{function _fh_(param){return ev.stopPropagation()}
|
||
function _fi_(param){return ev.cancelBubble = true$0}
|
||
return caml_call3(Optdef[7],ev.stopPropagation,_fi_,_fh_)}
|
||
var
|
||
requestAnimationFrame=
|
||
runtime.caml_js_pure_expr
|
||
(function(param)
|
||
{var
|
||
l=
|
||
[0,
|
||
_g_.requestAnimationFrame,
|
||
[0,
|
||
_g_.mozRequestAnimationFrame,
|
||
[0,
|
||
_g_.webkitRequestAnimationFrame,
|
||
[0,
|
||
_g_.oRequestAnimationFrame,
|
||
[0,_g_.msRequestAnimationFrame,0]]]]];
|
||
try
|
||
{var
|
||
_fe_=function(c){return caml_call1(Optdef[5],c)},
|
||
req=caml_call2(Stdlib_list[35],_fe_,l),
|
||
_ff_=function(callback){return req(callback)};
|
||
return _ff_}
|
||
catch(_fg_)
|
||
{_fg_ = caml_wrap_exception(_fg_);
|
||
if(_fg_ === Stdlib[8])
|
||
{var
|
||
now=function(param){return new date_ms().getTime()},
|
||
last=[0,now(0)];
|
||
return function(callback)
|
||
{var
|
||
t=now(0),
|
||
dt=last[1] + 16.6666666666666679 - t,
|
||
dt$0=dt < 0.?0.:dt;
|
||
last[1] = t;
|
||
_g_.setTimeout(callback,dt$0);
|
||
return 0}}
|
||
throw _fg_}});
|
||
function hasPushState(param)
|
||
{return caml_call1(Optdef[5],_g_.history.pushState)}
|
||
function hasPlaceholder(param)
|
||
{var i=createInput(0,0,document$0);
|
||
return caml_call1(Optdef[5],i.placeholder)}
|
||
function hasRequired(param)
|
||
{var i=createInput(0,0,document$0);
|
||
return caml_call1(Optdef[5],i.required)}
|
||
var overflow_limit=2147483000.;
|
||
function setTimeout(callback,d)
|
||
{var id=[0,0];
|
||
function loop(step,param)
|
||
{if(2147483000. < step)
|
||
var remain=step - 2147483000.,step$0=overflow_limit;
|
||
else
|
||
var remain=0.,step$0=step;
|
||
var cb=remain == 0.?callback:function(_fd_){return loop(remain,_fd_)};
|
||
id[1] = [0,_g_.setTimeout(caml_js_wrap_callback(cb),step$0)];
|
||
return 0}
|
||
loop(d,0);
|
||
return id}
|
||
function clearTimeout(id)
|
||
{var _fc_=id[1];
|
||
if(_fc_){var x=_fc_[1];id[1] = 0;return _g_.clearTimeout(x)}
|
||
return 0}
|
||
function js_array_of_collection(c){return [].slice.call(c)}
|
||
var
|
||
Js_of_ocaml_Dom_html=
|
||
[0,
|
||
d,
|
||
document$0,
|
||
getElementById_opt,
|
||
getElementById_exn,
|
||
getElementById_coerce,
|
||
getElementById,
|
||
location_origin,
|
||
_g_,
|
||
no_handler,
|
||
handler,
|
||
full_handler,
|
||
invoke_handler,
|
||
eventTarget,
|
||
eventRelatedTarget,
|
||
Event$0,
|
||
addEventListenerWithOptions,
|
||
addEventListener,
|
||
removeEventListener,
|
||
addMousewheelEventListenerWith,
|
||
addMousewheelEventListener,
|
||
createCustomEvent,
|
||
buttonPressed,
|
||
eventAbsolutePosition$0,
|
||
elementClientPosition,
|
||
getDocumentScroll,
|
||
[0,of_event,try_key_code_normal],
|
||
[0,of_event$0],
|
||
createHtml,
|
||
createHead,
|
||
createLink,
|
||
createTitle,
|
||
createMeta,
|
||
createBase,
|
||
createStyle,
|
||
createBody,
|
||
createForm,
|
||
createOptgroup,
|
||
createOption,
|
||
createSelect,
|
||
createInput,
|
||
createTextarea,
|
||
createButton,
|
||
createLabel,
|
||
createFieldset,
|
||
createLegend,
|
||
createUl,
|
||
createOl,
|
||
createDl,
|
||
createLi,
|
||
createDiv,
|
||
createEmbed,
|
||
createP,
|
||
createH1,
|
||
createH2,
|
||
createH3,
|
||
createH4,
|
||
createH5,
|
||
createH6,
|
||
createQ,
|
||
createBlockquote,
|
||
createPre,
|
||
createBr,
|
||
createHr,
|
||
createIns,
|
||
createDel,
|
||
createA,
|
||
createImg,
|
||
createObject,
|
||
createParam,
|
||
createMap,
|
||
createArea,
|
||
createScript,
|
||
createTable,
|
||
createCaption,
|
||
createCol,
|
||
createColgroup,
|
||
createThead,
|
||
createTfoot,
|
||
createTbody,
|
||
createTr,
|
||
createTh,
|
||
createTd,
|
||
createSub,
|
||
createSup,
|
||
createSpan,
|
||
createTt,
|
||
createI,
|
||
createB,
|
||
createBig,
|
||
createSmall,
|
||
createEm,
|
||
createStrong,
|
||
createCite,
|
||
createDfn,
|
||
createCode,
|
||
createSamp,
|
||
createKbd,
|
||
createVar,
|
||
createAbbr,
|
||
createDd,
|
||
createDt,
|
||
createNoscript,
|
||
createAddress,
|
||
createFrameset,
|
||
createFrame,
|
||
createIframe,
|
||
createAudio,
|
||
createVideo,
|
||
Canvas_not_available,
|
||
createCanvas,
|
||
element$1,
|
||
tagged,
|
||
opt_tagged,
|
||
taggedEvent,
|
||
opt_taggedEvent,
|
||
stopPropagation,
|
||
[0,
|
||
element$0,
|
||
a,
|
||
area,
|
||
audio,
|
||
base,
|
||
blockquote,
|
||
body,
|
||
br,
|
||
button,
|
||
canvas,
|
||
caption,
|
||
col,
|
||
colgroup,
|
||
del,
|
||
div,
|
||
embed,
|
||
dl,
|
||
fieldset,
|
||
form,
|
||
frameset,
|
||
frame,
|
||
h1,
|
||
h2,
|
||
h3,
|
||
h4,
|
||
h5,
|
||
h6,
|
||
head,
|
||
hr,
|
||
html,
|
||
iframe,
|
||
img,
|
||
input$0,
|
||
ins,
|
||
label,
|
||
legend,
|
||
li,
|
||
link,
|
||
map$2,
|
||
meta,
|
||
object,
|
||
ol,
|
||
optgroup,
|
||
option$1,
|
||
p,
|
||
param,
|
||
pre,
|
||
q,
|
||
script,
|
||
select$0,
|
||
style,
|
||
table,
|
||
tbody,
|
||
td,
|
||
textarea,
|
||
tfoot,
|
||
th,
|
||
thead,
|
||
title,
|
||
tr,
|
||
ul,
|
||
video,
|
||
mouseEvent,
|
||
keyboardEvent,
|
||
wheelEvent,
|
||
mouseScrollEvent,
|
||
popStateEvent],
|
||
setTimeout,
|
||
clearTimeout,
|
||
js_array_of_collection,
|
||
requestAnimationFrame,
|
||
runtime.caml_js_html_entities,
|
||
onIE,
|
||
hasPushState,
|
||
hasPlaceholder,
|
||
hasRequired];
|
||
caml_register_global(1650,Js_of_ocaml_Dom_html,"Js_of_ocaml__Dom_html");
|
||
var formData=Unsafe[1].FormData,formData_form=Unsafe[1].FormData;
|
||
function filter_map$0(f,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var q=param$0[2],v=param$0[1],match=caml_call1(f,v);
|
||
if(match){var v$0=match[1];return [0,v$0,filter_map$0(f,q)]}
|
||
var param$0=q;
|
||
continue}
|
||
return 0}}
|
||
function have_content(elt)
|
||
{var
|
||
_fa_=caml_call2(symbol$9,elt.name.length,0),
|
||
_fb_=_fa_?1 - (elt.disabled | 0):_fa_;
|
||
return _fb_}
|
||
function form_elements(get,form)
|
||
{var length=form.elements.length;
|
||
function _e0_(i)
|
||
{var _e$_=form.elements.item(i);return caml_call1(Opt[10],_e$_)}
|
||
var
|
||
_e1_=caml_call2(Stdlib_array[2],length,_e0_),
|
||
elements=caml_call1(Stdlib_array[11],_e1_);
|
||
function _e2_(param)
|
||
{if(param)
|
||
{var v=param[1],match$3=tagged(v);
|
||
switch(match$3[0])
|
||
{case 31:
|
||
var v$0=match$3[1];
|
||
if(get)var sth=get[1],get$0=sth;else var get$0=0;
|
||
if(have_content(v$0))
|
||
{var
|
||
name$1=caml_string_of_jsstring(v$0.name),
|
||
value=v$0.value,
|
||
match=caml_string_of_jsbytes(v$0.type.toLowerCase());
|
||
if(caml_string_notequal(match,cst_checkbox))
|
||
{if(! caml_string_notequal(match,cst_file))
|
||
{if(get$0)return [0,[0,name$1,[0,-976970511,value]],0];
|
||
var match$0=caml_call1(Optdef[10],v$0.files);
|
||
if(match$0)
|
||
{var list=match$0[1];
|
||
if(caml_call2(symbol$8,list.length,0))
|
||
return [0,[0,name$1,[0,-976970511,""]],0];
|
||
var match$1=caml_call1(Optdef[10],v$0.multiple);
|
||
if(match$1 && match$1[1])
|
||
{var
|
||
_e6_=function(i){return list.item(i)},
|
||
_e7_=caml_call2(Stdlib_array[2],list.length,_e6_),
|
||
_e8_=caml_call1(Stdlib_array[11],_e7_);
|
||
return filter_map$0
|
||
(function(f)
|
||
{var match=caml_call1(Opt[10],f);
|
||
if(match)
|
||
{var file=match[1];return [0,[0,name$1,[0,781515420,file]]]}
|
||
return 0},
|
||
_e8_)}
|
||
var _e9_=list.item(0),match$2=caml_call1(Opt[10],_e9_);
|
||
if(match$2)
|
||
{var file=match$2[1];
|
||
return [0,[0,name$1,[0,781515420,file]],0]}
|
||
return 0}
|
||
return 0}
|
||
var switch$0=0;
|
||
if(caml_string_notequal(match,cst_password))
|
||
{if(caml_string_notequal(match,cst_radio))
|
||
{var switch$1=0;
|
||
if
|
||
(caml_string_notequal(match,cst_reset)
|
||
&&
|
||
caml_string_notequal(match,cst_submit$0))
|
||
{if(caml_string_notequal(match,cst_text))
|
||
return [0,[0,name$1,[0,-976970511,value]],0];
|
||
switch$0 = 1;
|
||
switch$1 = 1}
|
||
if(! switch$1)return 0}}
|
||
else
|
||
switch$0 = 1;
|
||
if(switch$0)return [0,[0,name$1,[0,-976970511,value]],0]}
|
||
return v$0.checked | 0?[0,[0,name$1,[0,-976970511,value]],0]:0}
|
||
return 0;
|
||
case 48:
|
||
var v$1=match$3[1];
|
||
if(have_content(v$1))
|
||
{var name$0=caml_string_of_jsstring(v$1.name);
|
||
if(v$1.multiple | 0)
|
||
{var
|
||
_e4_=
|
||
function(i)
|
||
{var _e__=v$1.options.item(i);
|
||
return caml_call1(Opt[10],_e__)},
|
||
options=caml_call2(Stdlib_array[2],v$1.options.length,_e4_),
|
||
_e5_=caml_call1(Stdlib_array[11],options);
|
||
return filter_map$0
|
||
(function(param)
|
||
{if(param)
|
||
{var e=param[1];
|
||
return e.selected | 0
|
||
?[0,[0,name$0,[0,-976970511,e.value]]]
|
||
:0}
|
||
return 0},
|
||
_e5_)}
|
||
return [0,[0,name$0,[0,-976970511,v$1.value]],0]}
|
||
return 0;
|
||
case 53:
|
||
var v$2=match$3[1];
|
||
if(have_content(v$2))
|
||
{var name=caml_string_of_jsstring(v$2.name);
|
||
return [0,[0,name,[0,-976970511,v$2.value]],0]}
|
||
return 0;
|
||
default:return 0}}
|
||
return 0}
|
||
var
|
||
_e3_=caml_call2(Stdlib_list[17],_e2_,elements),
|
||
contents=caml_call1(Stdlib_list[14],_e3_);
|
||
return contents}
|
||
function append(form_contents,form_elt)
|
||
{if(891486873 <= form_contents[1])
|
||
{var list=form_contents[2];list[1] = [0,form_elt,list[1]];return 0}
|
||
var f=form_contents[2],_eY_=form_elt[2],_eZ_=form_elt[1];
|
||
if(781515420 <= _eY_[1])
|
||
{var file=_eY_[2];return f.append(caml_jsstring_of_string(_eZ_),file)}
|
||
var s=_eY_[2];
|
||
return f.append(caml_jsstring_of_string(_eZ_),s)}
|
||
function empty_form_contents(param)
|
||
{var match=caml_call1(Optdef[10],formData);
|
||
if(match){var constr=match[1];return [0,808620462,new constr()]}
|
||
return [0,891486873,[0,0]]}
|
||
function post_form_contents(form)
|
||
{var contents=empty_form_contents(0),_eV_=form_elements(0,form);
|
||
function _eW_(_eX_){return append(contents,_eX_)}
|
||
caml_call2(Stdlib_list[15],_eW_,_eV_);
|
||
return contents}
|
||
function get_form_contents(form)
|
||
{var _eS_=form_elements(_k_,form);
|
||
function _eT_(param)
|
||
{var _eU_=param[2];
|
||
if(typeof _eU_ !== "number" && -976970511 === _eU_[1])
|
||
{var s=_eU_[2],name=param[1];
|
||
return [0,name,caml_string_of_jsstring(s)]}
|
||
throw [0,Assert_failure,_l_]}
|
||
return caml_call2(Stdlib_list[17],_eT_,_eS_)}
|
||
var
|
||
Js_of_ocaml_Form=
|
||
[0,
|
||
formData,
|
||
formData_form,
|
||
append,
|
||
post_form_contents,
|
||
get_form_contents,
|
||
empty_form_contents,
|
||
form_elements];
|
||
caml_register_global(1651,Js_of_ocaml_Form,"Js_of_ocaml__Form");
|
||
var
|
||
readystatechange=caml_call1(Event[1],cst_readystatechange),
|
||
loadstart$1=caml_call1(Event[1],cst_loadstart$1),
|
||
progress$1=caml_call1(Event[1],cst_progress$1),
|
||
abort$1=caml_call1(Event[1],cst_abort$1),
|
||
error$1=caml_call1(Event[1],cst_error$1),
|
||
load$1=caml_call1(Event[1],cst_load$1),
|
||
timeout=caml_call1(Event[1],cst_timeout),
|
||
loadend$0=caml_call1(Event[1],cst_loadend$0),
|
||
Event$1=
|
||
[0,
|
||
readystatechange,
|
||
loadstart$1,
|
||
progress$1,
|
||
abort$1,
|
||
error$1,
|
||
load$1,
|
||
timeout,
|
||
loadend$0];
|
||
function create(param)
|
||
{var
|
||
xmlHttpRequest=Unsafe[1].XMLHttpRequest,
|
||
activeXObject=Unsafe[1].activeXObject;
|
||
try
|
||
{var _eN_=new xmlHttpRequest();return _eN_}
|
||
catch(_eO_)
|
||
{try
|
||
{var _eM_=new activeXObject("Msxml2.XMLHTTP");return _eM_}
|
||
catch(_eP_)
|
||
{try
|
||
{var _eL_=new activeXObject("Msxml3.XMLHTTP");return _eL_}
|
||
catch(_eQ_)
|
||
{try
|
||
{var _eK_=new activeXObject("Microsoft.XMLHTTP");return _eK_}
|
||
catch(_eR_){throw [0,Assert_failure,_m_]}}}}}
|
||
var Js_of_ocaml_XmlHttpRequest=[0,create,Event$1];
|
||
caml_register_global
|
||
(1652,Js_of_ocaml_XmlHttpRequest,"Js_of_ocaml__XmlHttpRequest");
|
||
var worker=Unsafe[1].Worker;
|
||
function create$0(script)
|
||
{return new worker(caml_jsstring_of_string(script))}
|
||
function import_scripts(scripts)
|
||
{if(Unsafe[1].importScripts === t37)
|
||
caml_call1(Stdlib[1],cst_Worker_import_scripts_is_u);
|
||
var
|
||
_eI_=caml_call1(Stdlib_array[12],scripts),
|
||
_eJ_=caml_call2(Stdlib_array[15],caml_jsstring_of_string,_eI_);
|
||
return runtime.caml_js_fun_call(Unsafe[1].importScripts,_eJ_)}
|
||
function set_onmessage(handler)
|
||
{if(Unsafe[1].onmessage === t37)
|
||
caml_call1(Stdlib[1],cst_Worker_onmessage_is_undefi);
|
||
function js_handler(ev){return caml_call1(handler,ev.data)}
|
||
return Unsafe[1].onmessage = caml_js_wrap_callback(js_handler)}
|
||
function post_message(msg)
|
||
{if(Unsafe[1].postMessage === t37)
|
||
caml_call1(Stdlib[1],cst_Worker_onmessage_is_undefi$0);
|
||
return Unsafe[1].postMessage(msg)}
|
||
var
|
||
Js_of_ocaml_Worker=
|
||
[0,create$0,import_scripts,set_onmessage,post_message];
|
||
caml_register_global(1653,Js_of_ocaml_Worker,"Js_of_ocaml__Worker");
|
||
var webSocket=Unsafe[1].WebSocket;
|
||
function is_supported(param){return caml_call1(Optdef[5],webSocket)}
|
||
var Js_of_ocaml_WebSockets=[0,webSocket,webSocket,webSocket,is_supported];
|
||
caml_register_global
|
||
(1654,Js_of_ocaml_WebSockets,"Js_of_ocaml__WebSockets");
|
||
var
|
||
defaultContextAttributes=
|
||
{"alpha":true$0,
|
||
"depth":true$0,
|
||
"stencil":false$0,
|
||
"antialias":true$0,
|
||
"premultipliedAlpha":false$0,
|
||
"preserveDrawingBuffer":false$0,
|
||
"preferLowPowerToHighPerformance":false$0,
|
||
"failIfMajorPerformanceCaveat":false$0},
|
||
webglcontextlost=caml_call1(Event$0[83],cst_webglcontextlost),
|
||
webglcontextrestored=caml_call1(Event$0[83],cst_webglcontextrestored),
|
||
webglcontextcreationerror=
|
||
caml_call1(Event$0[83],cst_webglcontextcreationerror),
|
||
Event$2=
|
||
[0,webglcontextlost,webglcontextrestored,webglcontextcreationerror];
|
||
function getContext(c)
|
||
{var ctx=c.getContext("webgl");
|
||
return caml_call1(Opt[5],ctx)?ctx:c.getContext("experimental-webgl")}
|
||
function getContextWithAttributes(c,attribs)
|
||
{var ctx=c.getContext("webgl",attribs);
|
||
return caml_call1(Opt[5],ctx)
|
||
?ctx
|
||
:c.getContext("experimental-webgl",attribs)}
|
||
var
|
||
Js_of_ocaml_WebGL=
|
||
[0,defaultContextAttributes,Event$2,getContext,getContextWithAttributes];
|
||
caml_register_global(1655,Js_of_ocaml_WebGL,"Js_of_ocaml__WebGL");
|
||
function regexp(s)
|
||
{return new regExp_withFlags(caml_jsbytes_of_string(s),"g")}
|
||
function regexp_case_fold(s)
|
||
{return new regExp_withFlags(caml_jsbytes_of_string(s),"gi")}
|
||
function regexp_with_flag(s,f)
|
||
{return new
|
||
regExp_withFlags
|
||
(caml_jsbytes_of_string(s),
|
||
caml_jsstring_of_string(caml_call2(Stdlib[28],cst_g,f)))}
|
||
function blunt_str_array_get(a,i)
|
||
{function _eH_(param){throw [0,Assert_failure,_n_]}
|
||
return caml_string_of_jsbytes(caml_call2(Optdef[8],a[i],_eH_))}
|
||
function string_match(r,s,i)
|
||
{r.lastIndex = i;
|
||
var
|
||
_eF_=r.exec(caml_jsbytes_of_string(s)),
|
||
_eG_=caml_call2(Opt[3],_eF_,match_result);
|
||
return caml_call1(Opt[10],_eG_)}
|
||
function search_forward(r,s,i)
|
||
{r.lastIndex = i;
|
||
function _eC_(res){return [0,res.index,res]}
|
||
var
|
||
_eD_=r.exec(caml_jsbytes_of_string(s)),
|
||
_eE_=caml_call2(Opt[3],_eD_,_eC_);
|
||
return caml_call1(Opt[10],_eE_)}
|
||
function matched_string(r){return blunt_str_array_get(r,0)}
|
||
function matched_group(r,i)
|
||
{var _eB_=caml_call2(Optdef[3],r[i],caml_string_of_jsbytes);
|
||
return caml_call1(Optdef[10],_eB_)}
|
||
var quote_repl_re=new regExp_withFlags("[$]","g");
|
||
function quote_repl(s)
|
||
{return caml_jsbytes_of_string(s).replace(quote_repl_re,"$$$$")}
|
||
function global_replace(r,s,s_by)
|
||
{r.lastIndex = 0;
|
||
return caml_string_of_jsbytes
|
||
(caml_jsbytes_of_string(s).replace(r,quote_repl(s_by)))}
|
||
function replace_first(r,s,s_by)
|
||
{var
|
||
match=r.ignoreCase | 0,
|
||
match$0=r.multiline | 0,
|
||
flags=match?match$0?"mi":"i":match$0?"m":"",
|
||
r$0=new regExp_withFlags(r.source,flags);
|
||
return caml_string_of_jsbytes
|
||
(caml_jsbytes_of_string(s).replace(r$0,quote_repl(s_by)))}
|
||
function list_of_js_array(a)
|
||
{var idx$1=a.length - 1 | 0,accu=0,idx=idx$1;
|
||
for(;;)
|
||
{if(caml_call2(symbol$5,idx,0))return accu;
|
||
var
|
||
idx$0=idx - 1 | 0,
|
||
accu$0=[0,blunt_str_array_get(a,idx),accu],
|
||
accu=accu$0,
|
||
idx=idx$0;
|
||
continue}}
|
||
function split(r,s)
|
||
{r.lastIndex = 0;
|
||
return list_of_js_array(caml_jsbytes_of_string(s).split(r))}
|
||
function bounded_split(r,s,i)
|
||
{r.lastIndex = 0;
|
||
return list_of_js_array(caml_jsbytes_of_string(s).split(r,i))}
|
||
var quote_re=regexp(cst);
|
||
function quote(s)
|
||
{return caml_string_of_jsbytes
|
||
(caml_jsbytes_of_string(s).replace(quote_re,"\\$&"))}
|
||
function regexp_string(s){return regexp(quote(s))}
|
||
function regexp_string_case_fold(s){return regexp_case_fold(quote(s))}
|
||
var
|
||
Js_of_ocaml_Regexp=
|
||
[0,
|
||
regexp,
|
||
regexp_case_fold,
|
||
regexp_with_flag,
|
||
quote,
|
||
regexp_string,
|
||
regexp_string_case_fold,
|
||
string_match,
|
||
search_forward,
|
||
search_forward,
|
||
matched_string,
|
||
matched_group,
|
||
global_replace,
|
||
replace_first,
|
||
split,
|
||
bounded_split];
|
||
caml_register_global(1656,Js_of_ocaml_Regexp,"Js_of_ocaml__Regexp");
|
||
var Local_exn=[248,cst_Js_of_ocaml_Url_Local_exn,caml_fresh_oo_id(0)];
|
||
function interrupt(param){throw Local_exn}
|
||
var
|
||
plus_re=regexp_string(cst$0),
|
||
plus_re_js_string=new regExp_withFlags("\\+","g");
|
||
function urldecode_js_string_string(s)
|
||
{plus_re_js_string.lastIndex = 0;
|
||
return caml_string_of_jsbytes
|
||
(unescape(s.replace(plus_re_js_string," ")))}
|
||
function urldecode(s)
|
||
{return caml_string_of_jsbytes
|
||
(unescape
|
||
(caml_jsbytes_of_string(global_replace(plus_re,s,cst$1))))}
|
||
function urlencode(opt,s)
|
||
{if(opt)var sth=opt[1],with_plus=sth;else var with_plus=1;
|
||
if(with_plus)
|
||
{var s$0=caml_string_of_jsbytes(escape(caml_jsbytes_of_string(s)));
|
||
return global_replace(plus_re,s$0,cst_2B)}
|
||
return caml_string_of_jsbytes(escape(caml_jsbytes_of_string(s)))}
|
||
var
|
||
Not_an_http_protocol=
|
||
[248,cst_Js_of_ocaml_Url_Not_an_htt,caml_fresh_oo_id(0)],
|
||
default_http_port=80,
|
||
default_https_port=443;
|
||
function path_of_path_string(s)
|
||
{var l=caml_ml_string_length(s);
|
||
function aux(i)
|
||
{try
|
||
{var _ez_=caml_call3(String[18],s,i,47),j=_ez_}
|
||
catch(_eA_)
|
||
{_eA_ = caml_wrap_exception(_eA_);
|
||
if(_eA_ !== Stdlib[8])throw _eA_;
|
||
var j=l}
|
||
var word=caml_call3(String[4],s,i,j - i | 0);
|
||
return caml_call2(symbol$10,j,l)?[0,word,0]:[0,word,aux(j + 1 | 0)]}
|
||
var a=aux(0);
|
||
if(a && ! caml_string_notequal(a[1],cst$2))
|
||
{var _ey_=a[2];
|
||
if(! _ey_)return 0;
|
||
if(! caml_string_notequal(_ey_[1],cst$3) && ! _ey_[2])return _o_}
|
||
return a}
|
||
function encode_arguments(l)
|
||
{function _et_(param)
|
||
{var
|
||
v=param[2],
|
||
n=param[1],
|
||
_ev_=urlencode(0,v),
|
||
_ew_=caml_call2(Stdlib[28],cst$4,_ev_),
|
||
_ex_=urlencode(0,n);
|
||
return caml_call2(Stdlib[28],_ex_,_ew_)}
|
||
var _eu_=caml_call2(Stdlib_list[17],_et_,l);
|
||
return caml_call2(String[7],cst$5,_eu_)}
|
||
function decode_arguments_js_string(s)
|
||
{var
|
||
arr=s.split(caml_jsstring_of_string(caml_call2(String[1],1,38))),
|
||
len=arr.length;
|
||
function aux(acc,idx)
|
||
{var idx$0=idx;
|
||
for(;;)
|
||
{if(caml_call2(symbol$5,idx$0,0))return acc;
|
||
try
|
||
{var
|
||
_el_=idx$0 - 1 | 0,
|
||
_em_=
|
||
function(s)
|
||
{function _er_(param)
|
||
{var
|
||
y=param[2],
|
||
x=param[1],
|
||
_es_=urldecode_js_string_string(y);
|
||
return [0,urldecode_js_string_string(x),_es_]}
|
||
var
|
||
index=
|
||
s.indexOf
|
||
(caml_jsstring_of_string(caml_call2(String[1],1,61)));
|
||
if(caml_call2(symbol$5,index,0))
|
||
var _eq_=t37;
|
||
else
|
||
var
|
||
_ep_=s.slice(index + 1 | 0),
|
||
_eq_=[0,s.slice(0,index),_ep_];
|
||
return caml_call3(Optdef[7],_eq_,interrupt,_er_)},
|
||
_en_=
|
||
aux
|
||
([0,caml_call3(Optdef[7],arr[idx$0],interrupt,_em_),acc],_el_);
|
||
return _en_}
|
||
catch(_eo_)
|
||
{_eo_ = caml_wrap_exception(_eo_);
|
||
if(_eo_ === Local_exn)
|
||
{var idx$1=idx$0 - 1 | 0,idx$0=idx$1;continue}
|
||
throw _eo_}}}
|
||
return aux(0,len - 1 | 0)}
|
||
function decode_arguments(s)
|
||
{return decode_arguments_js_string(caml_jsbytes_of_string(s))}
|
||
var
|
||
url_re=
|
||
new
|
||
regExp_withFlags
|
||
(caml_jsbytes_of_string(cst_Hh_Tt_Tt_Pp_Ss_0_9a_zA_Z_0)),
|
||
file_re=new regExp_withFlags(caml_jsbytes_of_string(cst_Ff_Ii_Ll_Ee));
|
||
function url_of_js_string(s)
|
||
{function _d4_(res)
|
||
{var
|
||
prot_string=caml_call2(Optdef[8],res[1],interrupt),
|
||
match=caml_string_of_jsbytes(prot_string.toLowerCase());
|
||
if
|
||
(caml_string_notequal(match,cst_file$0)
|
||
&&
|
||
caml_string_notequal(match,cst_file$1))
|
||
{var switch$0=0;
|
||
if
|
||
(caml_string_notequal(match,cst_http)
|
||
&&
|
||
caml_string_notequal(match,cst_http$0))
|
||
{var switch$1=0;
|
||
if
|
||
(caml_string_notequal(match,cst_https)
|
||
&&
|
||
caml_string_notequal(match,cst_https$0))
|
||
switch$1 = 1;
|
||
if(! switch$1){var ssl=1;switch$0 = 2}}
|
||
else
|
||
switch$0 = 1;
|
||
var switch$2=0;
|
||
switch(switch$0)
|
||
{case 1:var ssl=0;switch$2 = 1;break;
|
||
case 0:break;
|
||
default:switch$2 = 1}
|
||
if(switch$2)
|
||
{var
|
||
_ec_=function(param){return caml_jsbytes_of_string(cst$7)},
|
||
path_str=
|
||
urldecode_js_string_string(caml_call2(Optdef[8],res[6],_ec_)),
|
||
_ed_=function(param){return caml_jsbytes_of_string(cst$8)},
|
||
_ee_=
|
||
urldecode_js_string_string(caml_call2(Optdef[8],res[10],_ed_)),
|
||
_ef_=function(param){return caml_jsbytes_of_string(cst$9)},
|
||
_eg_=
|
||
decode_arguments_js_string(caml_call2(Optdef[8],res[8],_ef_)),
|
||
_eh_=path_of_path_string(path_str),
|
||
_ei_=function(param){return caml_jsbytes_of_string(cst$10)},
|
||
s=caml_string_of_jsbytes(caml_call2(Optdef[8],res[4],_ei_)),
|
||
_ej_=
|
||
caml_string_notequal(s,cst$6)?caml_int_of_string(s):ssl?443:80,
|
||
url=
|
||
[0,
|
||
urldecode_js_string_string
|
||
(caml_call2(Optdef[8],res[2],interrupt)),
|
||
_ej_,
|
||
_eh_,
|
||
path_str,
|
||
_eg_,
|
||
_ee_],
|
||
_ek_=ssl?[1,url]:[0,url];
|
||
return [0,_ek_]}}
|
||
throw Not_an_http_protocol}
|
||
function _d5_(param)
|
||
{function _d7_(res)
|
||
{var
|
||
path_str=
|
||
urldecode_js_string_string(caml_call2(Optdef[8],res[2],interrupt));
|
||
function _d__(param){return caml_jsbytes_of_string(cst$11)}
|
||
var _d$_=caml_string_of_jsbytes(caml_call2(Optdef[8],res[6],_d__));
|
||
function _ea_(param){return caml_jsbytes_of_string(cst$12)}
|
||
var
|
||
_eb_=
|
||
decode_arguments_js_string(caml_call2(Optdef[8],res[4],_ea_));
|
||
return [0,[2,[0,path_of_path_string(path_str),path_str,_eb_,_d$_]]]}
|
||
function _d8_(param){return 0}
|
||
var _d9_=file_re.exec(s);
|
||
return caml_call3(Opt[7],_d9_,_d8_,_d7_)}
|
||
var _d6_=url_re.exec(s);
|
||
return caml_call3(Opt[7],_d6_,_d5_,_d4_)}
|
||
function url_of_string(s)
|
||
{return url_of_js_string(caml_jsbytes_of_string(s))}
|
||
function string_of_url(param)
|
||
{switch(param[0])
|
||
{case 0:
|
||
var
|
||
match=param[1],
|
||
frag=match[6],
|
||
args=match[5],
|
||
path=match[3],
|
||
port=match[2],
|
||
host=match[1];
|
||
if(caml_string_notequal(frag,cst$13))
|
||
var _dr_=urlencode(0,frag),_ds_=caml_call2(Stdlib[28],cst$14,_dr_);
|
||
else
|
||
var _ds_=cst$21;
|
||
if(args)
|
||
var
|
||
_dt_=encode_arguments(args),
|
||
_du_=caml_call2(Stdlib[28],cst$15,_dt_);
|
||
else
|
||
var _du_=cst$20;
|
||
var
|
||
_dv_=caml_call2(Stdlib[28],_du_,_ds_),
|
||
_dw_=function(x){return urlencode(0,x)},
|
||
_dx_=caml_call2(Stdlib_list[17],_dw_,path),
|
||
_dy_=caml_call2(String[7],cst$16,_dx_),
|
||
_dz_=caml_call2(Stdlib[28],_dy_,_dv_),
|
||
_dA_=caml_call2(Stdlib[28],cst$17,_dz_);
|
||
if(80 === port)
|
||
var _dB_=cst$18;
|
||
else
|
||
var
|
||
_dF_=caml_call1(Stdlib[33],port),
|
||
_dB_=caml_call2(Stdlib[28],cst$19,_dF_);
|
||
var
|
||
_dC_=caml_call2(Stdlib[28],_dB_,_dA_),
|
||
_dD_=urlencode(0,host),
|
||
_dE_=caml_call2(Stdlib[28],_dD_,_dC_);
|
||
return caml_call2(Stdlib[28],cst_http$1,_dE_);
|
||
case 1:
|
||
var
|
||
match$0=param[1],
|
||
frag$0=match$0[6],
|
||
args$0=match$0[5],
|
||
path$0=match$0[3],
|
||
port$0=match$0[2],
|
||
host$0=match$0[1];
|
||
if(caml_string_notequal(frag$0,cst$22))
|
||
var
|
||
_dG_=urlencode(0,frag$0),
|
||
_dH_=caml_call2(Stdlib[28],cst$23,_dG_);
|
||
else
|
||
var _dH_=cst$30;
|
||
if(args$0)
|
||
var
|
||
_dI_=encode_arguments(args$0),
|
||
_dJ_=caml_call2(Stdlib[28],cst$24,_dI_);
|
||
else
|
||
var _dJ_=cst$29;
|
||
var
|
||
_dK_=caml_call2(Stdlib[28],_dJ_,_dH_),
|
||
_dL_=function(x){return urlencode(0,x)},
|
||
_dM_=caml_call2(Stdlib_list[17],_dL_,path$0),
|
||
_dN_=caml_call2(String[7],cst$25,_dM_),
|
||
_dO_=caml_call2(Stdlib[28],_dN_,_dK_),
|
||
_dP_=caml_call2(Stdlib[28],cst$26,_dO_);
|
||
if(443 === port$0)
|
||
var _dQ_=cst$27;
|
||
else
|
||
var
|
||
_dU_=caml_call1(Stdlib[33],port$0),
|
||
_dQ_=caml_call2(Stdlib[28],cst$28,_dU_);
|
||
var
|
||
_dR_=caml_call2(Stdlib[28],_dQ_,_dP_),
|
||
_dS_=urlencode(0,host$0),
|
||
_dT_=caml_call2(Stdlib[28],_dS_,_dR_);
|
||
return caml_call2(Stdlib[28],cst_https$1,_dT_);
|
||
default:
|
||
var
|
||
match$1=param[1],
|
||
frag$1=match$1[4],
|
||
args$1=match$1[3],
|
||
path$1=match$1[1];
|
||
if(caml_string_notequal(frag$1,cst$31))
|
||
var
|
||
_dV_=urlencode(0,frag$1),
|
||
_dW_=caml_call2(Stdlib[28],cst$32,_dV_);
|
||
else
|
||
var _dW_=cst$36;
|
||
if(args$1)
|
||
var
|
||
_dX_=encode_arguments(args$1),
|
||
_dY_=caml_call2(Stdlib[28],cst$33,_dX_);
|
||
else
|
||
var _dY_=cst$35;
|
||
var
|
||
_dZ_=caml_call2(Stdlib[28],_dY_,_dW_),
|
||
_d0_=function(x){return urlencode(0,x)},
|
||
_d1_=caml_call2(Stdlib_list[17],_d0_,path$1),
|
||
_d2_=caml_call2(String[7],cst$34,_d1_),
|
||
_d3_=caml_call2(Stdlib[28],_d2_,_dZ_);
|
||
return caml_call2(Stdlib[28],cst_file$2,_d3_)}}
|
||
var _p_=caml_call1(Optdef[2],_g_.location);
|
||
if(caml_call1(Optdef[5],_p_))
|
||
var _q_=_g_.location;
|
||
else
|
||
var
|
||
t40=function(param,_dq_){return 0},
|
||
t39=function(param,_dp_){return 0},
|
||
t38=function(param){return 0},
|
||
_q_=
|
||
{"href":"",
|
||
"protocol":"",
|
||
"host":"",
|
||
"hostname":"",
|
||
"port":"",
|
||
"pathname":"",
|
||
"search":"",
|
||
"hash":"",
|
||
"origin":t37,
|
||
"reload":caml_js_wrap_meth_callback(t38),
|
||
"replace":caml_js_wrap_meth_callback(t39),
|
||
"assign":caml_js_wrap_meth_callback(t40)};
|
||
var
|
||
host=urldecode_js_string_string(_q_.hostname),
|
||
protocol=urldecode_js_string_string(_q_.protocol),
|
||
_r_=0,
|
||
port=
|
||
function(param)
|
||
{try
|
||
{var _dn_=[0,caml_int_of_string(caml_string_of_jsbytes(_q_.port))];
|
||
return _dn_}
|
||
catch(_do_)
|
||
{_do_ = caml_wrap_exception(_do_);
|
||
if(_do_[1] === Stdlib[7])return 0;
|
||
throw _do_}}
|
||
(_r_),
|
||
path_string=urldecode_js_string_string(_q_.pathname),
|
||
path=path_of_path_string(path_string),
|
||
_s_=_q_.search.charAt(0) === "?"?_q_.search.slice(1):_q_.search,
|
||
arguments$0=decode_arguments_js_string(_s_);
|
||
function get_fragment(param)
|
||
{function _dj_(res){return caml_string_of_jsstring(res[1])}
|
||
function _dk_(param){return cst$37}
|
||
var _dl_=new regExp_withFlags("#(.*)"),_dm_=_q_.href.match(_dl_);
|
||
return caml_call3(Opt[7],_dm_,_dk_,_dj_)}
|
||
function set_fragment(s)
|
||
{return _q_.hash = caml_jsbytes_of_string(urlencode(0,s))}
|
||
function get$2(param){return url_of_js_string(_q_.href)}
|
||
function set$0(u)
|
||
{return _q_.href = caml_jsbytes_of_string(string_of_url(u))}
|
||
var
|
||
as_string=urldecode_js_string_string(_q_.href),
|
||
Js_of_ocaml_Url=
|
||
[0,
|
||
urldecode,
|
||
urlencode,
|
||
default_http_port,
|
||
default_https_port,
|
||
path_of_path_string,
|
||
encode_arguments,
|
||
decode_arguments,
|
||
url_of_string,
|
||
string_of_url,
|
||
[0,
|
||
host,
|
||
port,
|
||
protocol,
|
||
path_string,
|
||
path,
|
||
arguments$0,
|
||
get_fragment,
|
||
set_fragment,
|
||
get$2,
|
||
set$0,
|
||
as_string]];
|
||
caml_register_global(1658,Js_of_ocaml_Url,"Js_of_ocaml__Url");
|
||
var Js_of_ocaml_Lib_version=[0,s,git_version];
|
||
caml_register_global
|
||
(1659,Js_of_ocaml_Lib_version,"Js_of_ocaml__Lib_version");
|
||
function update_file(name,content)
|
||
{var oc=caml_call1(Stdlib[60],name);
|
||
caml_call2(Stdlib[66],oc,content);
|
||
return caml_call1(Stdlib[76],oc)}
|
||
function set_channel_flusher(out_channel,f)
|
||
{var
|
||
f$0=
|
||
caml_js_wrap_callback
|
||
(function(s){return caml_call1(f,caml_string_of_jsbytes(s))});
|
||
return runtime.caml_ml_set_channel_output(out_channel,f$0)}
|
||
function set_channel_filler(in_channel,f)
|
||
{var f$0=caml_js_wrap_callback(f);
|
||
return runtime.caml_ml_set_channel_refill(in_channel,f$0)}
|
||
function mount(path,f)
|
||
{return runtime.caml_mount_autoload
|
||
(path,
|
||
caml_js_wrap_callback
|
||
(function(prefix,path){return caml_call2(f,prefix,path)}))}
|
||
var unmount=runtime.caml_unmount;
|
||
if(caml_call2(String[38],git_version,cst$38))
|
||
var js_of_ocaml_version=s;
|
||
else
|
||
var
|
||
_cm_=caml_call2(Stdlib[28],cst$41,git_version),
|
||
js_of_ocaml_version=caml_call2(Stdlib[28],s,_cm_);
|
||
var
|
||
_t_=runtime.caml_create_file,
|
||
_u_=runtime.caml_read_file_content,
|
||
Js_of_ocaml_Sys_js=
|
||
[0,
|
||
set_channel_flusher,
|
||
set_channel_filler,
|
||
function(_di_){return runtime.caml_list_mount_point(_di_)},
|
||
unmount,
|
||
mount,
|
||
_u_,
|
||
_t_,
|
||
update_file,
|
||
js_of_ocaml_version];
|
||
caml_register_global(1660,Js_of_ocaml_Sys_js,"Js_of_ocaml__Sys_js");
|
||
function empty_resize_observer_options(param){return {}}
|
||
var resizeObserver=Unsafe[1].ResizeObserver;
|
||
function is_supported$0(param)
|
||
{return caml_call1(Optdef[5],resizeObserver)}
|
||
function observe(node,f,box,param)
|
||
{var obs=new resizeObserver(caml_js_wrap_callback(f));
|
||
if(box)
|
||
{var box$0=box[1],opts={};opts.box = box$0;obs.observe(node,opts)}
|
||
else
|
||
obs.observe(node);
|
||
return obs}
|
||
var
|
||
Js_of_ocaml_ResizeObserver=
|
||
[0,empty_resize_observer_options,resizeObserver,is_supported$0,observe];
|
||
caml_register_global
|
||
(1661,Js_of_ocaml_ResizeObserver,"Js_of_ocaml__ResizeObserver");
|
||
function empty_mutation_observer_init(param){return {}}
|
||
var mutationObserver=Unsafe[1].MutationObserver;
|
||
function is_supported$1(param)
|
||
{return caml_call1(Optdef[5],mutationObserver)}
|
||
function observe$0
|
||
(node,
|
||
f,
|
||
child_list,
|
||
attributes,
|
||
character_data,
|
||
subtree,
|
||
attribute_old_value,
|
||
character_data_old_value,
|
||
attribute_filter,
|
||
param)
|
||
{function opt_iter(x,f)
|
||
{if(x){var x$0=x[1];return caml_call1(f,x$0)}return 0}
|
||
var obs=new mutationObserver(caml_js_wrap_callback(f)),cfg={};
|
||
opt_iter(child_list,function(v){return cfg.childList = v});
|
||
opt_iter(attributes,function(v){return cfg.attributes = v});
|
||
opt_iter(character_data,function(v){return cfg.characterData = v});
|
||
opt_iter(subtree,function(v){return cfg.subtree = v});
|
||
opt_iter
|
||
(attribute_old_value,function(v){return cfg.attributeOldValue = v});
|
||
opt_iter
|
||
(character_data_old_value,
|
||
function(v){return cfg.characterDataOldValue = v});
|
||
opt_iter
|
||
(attribute_filter,
|
||
function(l)
|
||
{return cfg.attributeFilter
|
||
=
|
||
caml_js_from_array(caml_call1(Stdlib_array[12],l))});
|
||
obs.observe(node,cfg);
|
||
return obs}
|
||
var
|
||
Js_of_ocaml_MutationObserver=
|
||
[0,
|
||
empty_mutation_observer_init,
|
||
mutationObserver,
|
||
is_supported$1,
|
||
observe$0];
|
||
caml_register_global
|
||
(1662,Js_of_ocaml_MutationObserver,"Js_of_ocaml__MutationObserver");
|
||
var obj=Unsafe[1].Object;
|
||
function create$1(param){return new obj()}
|
||
function add$0(t,k,v){return t[k.concat("_")] = v}
|
||
function remove(t,k){return delete t[k.concat("_")]}
|
||
function find(t,k){return t[k.concat("_")]}
|
||
function keys(t)
|
||
{var
|
||
key_array=Unsafe[1].Object.keys(t),
|
||
res=[0,0],
|
||
_de_=key_array.length - 1 | 0,
|
||
_dd_=0;
|
||
if(! (_de_ < 0))
|
||
{var i=_dd_;
|
||
for(;;)
|
||
{var
|
||
_df_=function(param){return caml_call1(Stdlib[2],cst_Jstable_keys)},
|
||
key=caml_call2(Optdef[8],key_array[i],_df_),
|
||
_dg_=res[1];
|
||
res[1] = [0,key.substring(0,key.length - 1 | 0),_dg_];
|
||
var _dh_=i + 1 | 0;
|
||
if(_de_ !== i){var i=_dh_;continue}
|
||
break}}
|
||
return caml_call1(Stdlib_list[9],res[1])}
|
||
var Js_of_ocaml_Jstable=[0,create$1,add$0,remove,find,keys];
|
||
caml_register_global(1663,Js_of_ocaml_Jstable,"Js_of_ocaml__Jstable");
|
||
var json=Unsafe[1].JSON;
|
||
function reviver(this$0,key,value)
|
||
{if(typeof value == typeof "foo")return caml_string_of_jsbytes(value);
|
||
if
|
||
(value instanceof array_length
|
||
&&
|
||
4
|
||
===
|
||
value.length
|
||
&&
|
||
255
|
||
===
|
||
value[0])
|
||
return runtime.caml_int64_create_lo_mi_hi(value[1],value[2],value[3]);
|
||
return value}
|
||
var input_reviver=caml_js_wrap_meth_callback(reviver);
|
||
function unsafe_input(s){return json.parse(s,input_reviver)}
|
||
var
|
||
mlString_constr=dummy_string.constructor,
|
||
mlInt64_constr=dummy_int64.constructor;
|
||
function output_reviver(key,value)
|
||
{return value instanceof mlString_constr
|
||
?caml_jsbytes_of_string(value)
|
||
:value instanceof mlInt64_constr
|
||
?caml_js_from_array([0,255,value.lo,value.mi,value.hi])
|
||
:value}
|
||
function output(obj){return json.stringify(obj,output_reviver)}
|
||
var Js_of_ocaml_Json=[0,output,unsafe_input];
|
||
caml_register_global(1664,Js_of_ocaml_Json,"Js_of_ocaml__Json");
|
||
function string_of_name(param)
|
||
{var _dc_=param;
|
||
if(74 <= _dc_)
|
||
{if(111 <= _dc_)
|
||
switch(_dc_)
|
||
{case 111:return cst_palevioletred;
|
||
case 112:return cst_papayawhip;
|
||
case 113:return cst_peachpuff;
|
||
case 114:return cst_peru;
|
||
case 115:return cst_pink;
|
||
case 116:return cst_plum;
|
||
case 117:return cst_powderblue;
|
||
case 118:return cst_purple;
|
||
case 119:return cst_red;
|
||
case 120:return cst_rosybrown;
|
||
case 121:return cst_royalblue;
|
||
case 122:return cst_saddlebrown;
|
||
case 123:return cst_salmon;
|
||
case 124:return cst_sandybrown;
|
||
case 125:return cst_seagreen;
|
||
case 126:return cst_seashell;
|
||
case 127:return cst_sienna;
|
||
case 128:return cst_silver;
|
||
case 129:return cst_skyblue;
|
||
case 130:return cst_slateblue;
|
||
case 131:return cst_slategray;
|
||
case 132:return cst_slategrey;
|
||
case 133:return cst_snow;
|
||
case 134:return cst_springgreen;
|
||
case 135:return cst_steelblue;
|
||
case 136:return cst_tan;
|
||
case 137:return cst_teal;
|
||
case 138:return cst_thistle;
|
||
case 139:return cst_tomato;
|
||
case 140:return cst_turquoise;
|
||
case 141:return cst_violet;
|
||
case 142:return cst_wheat;
|
||
case 143:return cst_white;
|
||
case 144:return cst_whitesmoke;
|
||
case 145:return cst_yellow;
|
||
default:return cst_yellowgreen}
|
||
switch(_dc_)
|
||
{case 74:return cst_lightpink;
|
||
case 75:return cst_lightsalmon;
|
||
case 76:return cst_lightseagreen;
|
||
case 77:return cst_lightskyblue;
|
||
case 78:return cst_lightslategray;
|
||
case 79:return cst_lightslategrey;
|
||
case 80:return cst_lightsteelblue;
|
||
case 81:return cst_lightyellow;
|
||
case 82:return cst_lime;
|
||
case 83:return cst_limegreen;
|
||
case 84:return cst_linen;
|
||
case 85:return cst_magenta;
|
||
case 86:return cst_maroon;
|
||
case 87:return cst_mediumaquamarine;
|
||
case 88:return cst_mediumblue;
|
||
case 89:return cst_mediumorchid;
|
||
case 90:return cst_mediumpurple;
|
||
case 91:return cst_mediumseagreen;
|
||
case 92:return cst_mediumslateblue;
|
||
case 93:return cst_mediumspringgreen;
|
||
case 94:return cst_mediumturquoise;
|
||
case 95:return cst_mediumvioletred;
|
||
case 96:return cst_midnightblue;
|
||
case 97:return cst_mintcream;
|
||
case 98:return cst_mistyrose;
|
||
case 99:return cst_moccasin;
|
||
case 100:return cst_navajowhite;
|
||
case 101:return cst_navy;
|
||
case 102:return cst_oldlace;
|
||
case 103:return cst_olive;
|
||
case 104:return cst_olivedrab;
|
||
case 105:return cst_orange;
|
||
case 106:return cst_orangered;
|
||
case 107:return cst_orchid;
|
||
case 108:return cst_palegoldenrod;
|
||
case 109:return cst_palegreen;
|
||
default:return cst_paleturquoise}}
|
||
if(37 <= _dc_)
|
||
switch(_dc_)
|
||
{case 37:return cst_darkslategrey;
|
||
case 38:return cst_darkturquoise;
|
||
case 39:return cst_darkviolet;
|
||
case 40:return cst_deeppink;
|
||
case 41:return cst_deepskyblue;
|
||
case 42:return cst_dimgray;
|
||
case 43:return cst_dimgrey;
|
||
case 44:return cst_dodgerblue;
|
||
case 45:return cst_firebrick;
|
||
case 46:return cst_floralwhite;
|
||
case 47:return cst_forestgreen;
|
||
case 48:return cst_fuchsia;
|
||
case 49:return cst_gainsboro;
|
||
case 50:return cst_ghostwhite;
|
||
case 51:return cst_gold;
|
||
case 52:return cst_goldenrod;
|
||
case 53:return cst_gray;
|
||
case 54:return cst_grey;
|
||
case 55:return cst_green;
|
||
case 56:return cst_greenyellow;
|
||
case 57:return cst_honeydew;
|
||
case 58:return cst_hotpink;
|
||
case 59:return cst_indianred;
|
||
case 60:return cst_indigo;
|
||
case 61:return cst_ivory;
|
||
case 62:return cst_khaki;
|
||
case 63:return cst_lavender;
|
||
case 64:return cst_lavenderblush;
|
||
case 65:return cst_lawngreen;
|
||
case 66:return cst_lemonchiffon;
|
||
case 67:return cst_lightblue;
|
||
case 68:return cst_lightcoral;
|
||
case 69:return cst_lightcyan;
|
||
case 70:return cst_lightgoldenrodyellow;
|
||
case 71:return cst_lightgray;
|
||
case 72:return cst_lightgreen;
|
||
default:return cst_lightgrey}
|
||
switch(_dc_)
|
||
{case 0:return cst_aliceblue;
|
||
case 1:return cst_antiquewhite;
|
||
case 2:return cst_aqua;
|
||
case 3:return cst_aquamarine;
|
||
case 4:return cst_azure;
|
||
case 5:return cst_beige;
|
||
case 6:return cst_bisque;
|
||
case 7:return cst_black;
|
||
case 8:return cst_blanchedalmond;
|
||
case 9:return cst_blue;
|
||
case 10:return cst_blueviolet;
|
||
case 11:return cst_brown;
|
||
case 12:return cst_burlywood;
|
||
case 13:return cst_cadetblue;
|
||
case 14:return cst_chartreuse;
|
||
case 15:return cst_chocolate;
|
||
case 16:return cst_coral;
|
||
case 17:return cst_cornflowerblue;
|
||
case 18:return cst_cornsilk;
|
||
case 19:return cst_crimson;
|
||
case 20:return cst_cyan;
|
||
case 21:return cst_darkblue;
|
||
case 22:return cst_darkcyan;
|
||
case 23:return cst_darkgoldenrod;
|
||
case 24:return cst_darkgray;
|
||
case 25:return cst_darkgreen;
|
||
case 26:return cst_darkgrey;
|
||
case 27:return cst_darkkhaki;
|
||
case 28:return cst_darkmagenta;
|
||
case 29:return cst_darkolivegreen;
|
||
case 30:return cst_darkorange;
|
||
case 31:return cst_darkorchid;
|
||
case 32:return cst_darkred;
|
||
case 33:return cst_darksalmon;
|
||
case 34:return cst_darkseagreen;
|
||
case 35:return cst_darkslateblue;
|
||
default:return cst_darkslategray}}
|
||
function name_of_string(s)
|
||
{var switch$0=caml_string_compare(s,cst_lightgrey$0);
|
||
if(0 <= switch$0)
|
||
{if(! (0 < switch$0))return 73;
|
||
var switch$1=caml_string_compare(s,cst_paleturquoise$0);
|
||
if(0 <= switch$1)
|
||
{if(! (0 < switch$1))return 110;
|
||
var switch$2=caml_string_compare(s,cst_skyblue$0);
|
||
if(0 <= switch$2)
|
||
{if(! (0 < switch$2))return 129;
|
||
var switch$3=caml_string_compare(s,cst_thistle$0);
|
||
if(0 <= switch$3)
|
||
{if(! (0 < switch$3))return 138;
|
||
if(! caml_string_notequal(s,cst_tomato$0))return 139;
|
||
if(! caml_string_notequal(s,cst_turquoise$0))return 140;
|
||
if(! caml_string_notequal(s,cst_violet$0))return 141;
|
||
if(! caml_string_notequal(s,cst_wheat$0))return 142;
|
||
if(! caml_string_notequal(s,cst_white$0))return 143;
|
||
if(! caml_string_notequal(s,cst_whitesmoke$0))return 144;
|
||
if(! caml_string_notequal(s,cst_yellow$0))return 145;
|
||
if(! caml_string_notequal(s,cst_yellowgreen$0))return 146}
|
||
else
|
||
{if(! caml_string_notequal(s,cst_slateblue$0))return 130;
|
||
if(! caml_string_notequal(s,cst_slategray$0))return 131;
|
||
if(! caml_string_notequal(s,cst_slategrey$0))return 132;
|
||
if(! caml_string_notequal(s,cst_snow$0))return 133;
|
||
if(! caml_string_notequal(s,cst_springgreen$0))return 134;
|
||
if(! caml_string_notequal(s,cst_steelblue$0))return 135;
|
||
if(! caml_string_notequal(s,cst_tan$0))return 136;
|
||
if(! caml_string_notequal(s,cst_teal$0))return 137}}
|
||
else
|
||
{var switch$4=caml_string_compare(s,cst_rosybrown$0);
|
||
if(0 <= switch$4)
|
||
{if(! (0 < switch$4))return 120;
|
||
if(! caml_string_notequal(s,cst_royalblue$0))return 121;
|
||
if(! caml_string_notequal(s,cst_saddlebrown$0))return 122;
|
||
if(! caml_string_notequal(s,cst_salmon$0))return 123;
|
||
if(! caml_string_notequal(s,cst_sandybrown$0))return 124;
|
||
if(! caml_string_notequal(s,cst_seagreen$0))return 125;
|
||
if(! caml_string_notequal(s,cst_seashell$0))return 126;
|
||
if(! caml_string_notequal(s,cst_sienna$0))return 127;
|
||
if(! caml_string_notequal(s,cst_silver$0))return 128}
|
||
else
|
||
{if(! caml_string_notequal(s,cst_palevioletred$0))return 111;
|
||
if(! caml_string_notequal(s,cst_papayawhip$0))return 112;
|
||
if(! caml_string_notequal(s,cst_peachpuff$0))return 113;
|
||
if(! caml_string_notequal(s,cst_peru$0))return 114;
|
||
if(! caml_string_notequal(s,cst_pink$0))return 115;
|
||
if(! caml_string_notequal(s,cst_plum$0))return 116;
|
||
if(! caml_string_notequal(s,cst_powderblue$0))return 117;
|
||
if(! caml_string_notequal(s,cst_purple$0))return 118;
|
||
if(! caml_string_notequal(s,cst_red$0))return 119}}}
|
||
else
|
||
{var switch$5=caml_string_compare(s,cst_mediumslateblue$0);
|
||
if(0 <= switch$5)
|
||
{if(! (0 < switch$5))return 92;
|
||
var switch$6=caml_string_compare(s,cst_navy$0);
|
||
if(0 <= switch$6)
|
||
{if(! (0 < switch$6))return 101;
|
||
if(! caml_string_notequal(s,cst_oldlace$0))return 102;
|
||
if(! caml_string_notequal(s,cst_olive$0))return 103;
|
||
if(! caml_string_notequal(s,cst_olivedrab$0))return 104;
|
||
if(! caml_string_notequal(s,cst_orange$0))return 105;
|
||
if(! caml_string_notequal(s,cst_orangered$0))return 106;
|
||
if(! caml_string_notequal(s,cst_orchid$0))return 107;
|
||
if(! caml_string_notequal(s,cst_palegoldenrod$0))return 108;
|
||
if(! caml_string_notequal(s,cst_palegreen$0))return 109}
|
||
else
|
||
{if(! caml_string_notequal(s,cst_mediumspringgreen$0))return 93;
|
||
if(! caml_string_notequal(s,cst_mediumturquoise$0))return 94;
|
||
if(! caml_string_notequal(s,cst_mediumvioletred$0))return 95;
|
||
if(! caml_string_notequal(s,cst_midnightblue$0))return 96;
|
||
if(! caml_string_notequal(s,cst_mintcream$0))return 97;
|
||
if(! caml_string_notequal(s,cst_mistyrose$0))return 98;
|
||
if(! caml_string_notequal(s,cst_moccasin$0))return 99;
|
||
if(! caml_string_notequal(s,cst_navajowhite$0))return 100}}
|
||
else
|
||
{var switch$7=caml_string_compare(s,cst_limegreen$0);
|
||
if(0 <= switch$7)
|
||
{if(! (0 < switch$7))return 83;
|
||
if(! caml_string_notequal(s,cst_linen$0))return 84;
|
||
if(! caml_string_notequal(s,cst_magenta$0))return 85;
|
||
if(! caml_string_notequal(s,cst_maroon$0))return 86;
|
||
if(! caml_string_notequal(s,cst_mediumaquamarine$0))return 87;
|
||
if(! caml_string_notequal(s,cst_mediumblue$0))return 88;
|
||
if(! caml_string_notequal(s,cst_mediumorchid$0))return 89;
|
||
if(! caml_string_notequal(s,cst_mediumpurple$0))return 90;
|
||
if(! caml_string_notequal(s,cst_mediumseagreen$0))return 91}
|
||
else
|
||
{if(! caml_string_notequal(s,cst_lightpink$0))return 74;
|
||
if(! caml_string_notequal(s,cst_lightsalmon$0))return 75;
|
||
if(! caml_string_notequal(s,cst_lightseagreen$0))return 76;
|
||
if(! caml_string_notequal(s,cst_lightskyblue$0))return 77;
|
||
if(! caml_string_notequal(s,cst_lightslategray$0))return 78;
|
||
if(! caml_string_notequal(s,cst_lightslategrey$0))return 79;
|
||
if(! caml_string_notequal(s,cst_lightsteelblue$0))return 80;
|
||
if(! caml_string_notequal(s,cst_lightyellow$0))return 81;
|
||
if(! caml_string_notequal(s,cst_lime$0))return 82}}}}
|
||
else
|
||
{var switch$8=caml_string_compare(s,cst_darkslategray$0);
|
||
if(0 <= switch$8)
|
||
{if(! (0 < switch$8))return 36;
|
||
var switch$9=caml_string_compare(s,cst_greenyellow$0);
|
||
if(0 <= switch$9)
|
||
{if(! (0 < switch$9))return 56;
|
||
var switch$10=caml_string_compare(s,cst_lavenderblush$0);
|
||
if(0 <= switch$10)
|
||
{if(! (0 < switch$10))return 64;
|
||
if(! caml_string_notequal(s,cst_lawngreen$0))return 65;
|
||
if(! caml_string_notequal(s,cst_lemonchiffon$0))return 66;
|
||
if(! caml_string_notequal(s,cst_lightblue$0))return 67;
|
||
if(! caml_string_notequal(s,cst_lightcoral$0))return 68;
|
||
if(! caml_string_notequal(s,cst_lightcyan$0))return 69;
|
||
if(! caml_string_notequal(s,cst_lightgoldenrodyellow$0))
|
||
return 70;
|
||
if(! caml_string_notequal(s,cst_lightgray$0))return 71;
|
||
if(! caml_string_notequal(s,cst_lightgreen$0))return 72}
|
||
else
|
||
{if(! caml_string_notequal(s,cst_grey$0))return 54;
|
||
if(! caml_string_notequal(s,cst_honeydew$0))return 57;
|
||
if(! caml_string_notequal(s,cst_hotpink$0))return 58;
|
||
if(! caml_string_notequal(s,cst_indianred$0))return 59;
|
||
if(! caml_string_notequal(s,cst_indigo$0))return 60;
|
||
if(! caml_string_notequal(s,cst_ivory$0))return 61;
|
||
if(! caml_string_notequal(s,cst_khaki$0))return 62;
|
||
if(! caml_string_notequal(s,cst_lavender$0))return 63}}
|
||
else
|
||
{var switch$11=caml_string_compare(s,cst_floralwhite$0);
|
||
if(0 <= switch$11)
|
||
{if(! (0 < switch$11))return 46;
|
||
if(! caml_string_notequal(s,cst_forestgreen$0))return 47;
|
||
if(! caml_string_notequal(s,cst_fuchsia$0))return 48;
|
||
if(! caml_string_notequal(s,cst_gainsboro$0))return 49;
|
||
if(! caml_string_notequal(s,cst_ghostwhite$0))return 50;
|
||
if(! caml_string_notequal(s,cst_gold$0))return 51;
|
||
if(! caml_string_notequal(s,cst_goldenrod$0))return 52;
|
||
if(! caml_string_notequal(s,cst_gray$0))return 53;
|
||
if(! caml_string_notequal(s,cst_green$0))return 55}
|
||
else
|
||
{if(! caml_string_notequal(s,cst_darkslategrey$0))return 37;
|
||
if(! caml_string_notequal(s,cst_darkturquoise$0))return 38;
|
||
if(! caml_string_notequal(s,cst_darkviolet$0))return 39;
|
||
if(! caml_string_notequal(s,cst_deeppink$0))return 40;
|
||
if(! caml_string_notequal(s,cst_deepskyblue$0))return 41;
|
||
if(! caml_string_notequal(s,cst_dimgray$0))return 42;
|
||
if(! caml_string_notequal(s,cst_dimgrey$0))return 43;
|
||
if(! caml_string_notequal(s,cst_dodgerblue$0))return 44;
|
||
if(! caml_string_notequal(s,cst_firebrick$0))return 45}}}
|
||
else
|
||
{var switch$12=caml_string_compare(s,cst_cornsilk$0);
|
||
if(0 <= switch$12)
|
||
{if(! (0 < switch$12))return 18;
|
||
var switch$13=caml_string_compare(s,cst_darkkhaki$0);
|
||
if(0 <= switch$13)
|
||
{if(! (0 < switch$13))return 27;
|
||
if(! caml_string_notequal(s,cst_darkmagenta$0))return 28;
|
||
if(! caml_string_notequal(s,cst_darkolivegreen$0))return 29;
|
||
if(! caml_string_notequal(s,cst_darkorange$0))return 30;
|
||
if(! caml_string_notequal(s,cst_darkorchid$0))return 31;
|
||
if(! caml_string_notequal(s,cst_darkred$0))return 32;
|
||
if(! caml_string_notequal(s,cst_darksalmon$0))return 33;
|
||
if(! caml_string_notequal(s,cst_darkseagreen$0))return 34;
|
||
if(! caml_string_notequal(s,cst_darkslateblue$0))return 35}
|
||
else
|
||
{if(! caml_string_notequal(s,cst_crimson$0))return 19;
|
||
if(! caml_string_notequal(s,cst_cyan$0))return 20;
|
||
if(! caml_string_notequal(s,cst_darkblue$0))return 21;
|
||
if(! caml_string_notequal(s,cst_darkcyan$0))return 22;
|
||
if(! caml_string_notequal(s,cst_darkgoldenrod$0))return 23;
|
||
if(! caml_string_notequal(s,cst_darkgray$0))return 24;
|
||
if(! caml_string_notequal(s,cst_darkgreen$0))return 25;
|
||
if(! caml_string_notequal(s,cst_darkgrey$0))return 26}}
|
||
else
|
||
{var switch$14=caml_string_compare(s,cst_blue$0);
|
||
if(0 <= switch$14)
|
||
{if(! (0 < switch$14))return 9;
|
||
if(! caml_string_notequal(s,cst_blueviolet$0))return 10;
|
||
if(! caml_string_notequal(s,cst_brown$0))return 11;
|
||
if(! caml_string_notequal(s,cst_burlywood$0))return 12;
|
||
if(! caml_string_notequal(s,cst_cadetblue$0))return 13;
|
||
if(! caml_string_notequal(s,cst_chartreuse$0))return 14;
|
||
if(! caml_string_notequal(s,cst_chocolate$0))return 15;
|
||
if(! caml_string_notequal(s,cst_coral$0))return 16;
|
||
if(! caml_string_notequal(s,cst_cornflowerblue$0))return 17}
|
||
else
|
||
{if(! caml_string_notequal(s,cst_aliceblue$0))return 0;
|
||
if(! caml_string_notequal(s,cst_antiquewhite$0))return 1;
|
||
if(! caml_string_notequal(s,cst_aqua$0))return 2;
|
||
if(! caml_string_notequal(s,cst_aquamarine$0))return 3;
|
||
if(! caml_string_notequal(s,cst_azure$0))return 4;
|
||
if(! caml_string_notequal(s,cst_beige$0))return 5;
|
||
if(! caml_string_notequal(s,cst_bisque$0))return 6;
|
||
if(! caml_string_notequal(s,cst_black$0))return 7;
|
||
if(! caml_string_notequal(s,cst_blanchedalmond$0))return 8}}}}
|
||
var _db_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_color_name);
|
||
throw [0,Stdlib[6],_db_]}
|
||
function rgb_of_name(param)
|
||
{var _da_=param;
|
||
if(74 <= _da_)
|
||
{if(111 <= _da_)
|
||
switch(_da_)
|
||
{case 111:return _bo_;
|
||
case 112:return _bp_;
|
||
case 113:return _bq_;
|
||
case 114:return _br_;
|
||
case 115:return _bs_;
|
||
case 116:return _bt_;
|
||
case 117:return _bu_;
|
||
case 118:return _bv_;
|
||
case 119:return _bw_;
|
||
case 120:return _bx_;
|
||
case 121:return _by_;
|
||
case 122:return _bz_;
|
||
case 123:return _bA_;
|
||
case 124:return _bB_;
|
||
case 125:return _bC_;
|
||
case 126:return _bD_;
|
||
case 127:return _bE_;
|
||
case 128:return _bF_;
|
||
case 129:return _bG_;
|
||
case 130:return _bH_;
|
||
case 131:return _bI_;
|
||
case 132:return _bJ_;
|
||
case 133:return _bK_;
|
||
case 134:return _bL_;
|
||
case 135:return _bM_;
|
||
case 136:return _bN_;
|
||
case 137:return _bO_;
|
||
case 138:return _bP_;
|
||
case 139:return _bQ_;
|
||
case 140:return _bR_;
|
||
case 141:return _bS_;
|
||
case 142:return _bT_;
|
||
case 143:return _bU_;
|
||
case 144:return _bV_;
|
||
case 145:return _bW_;
|
||
default:return _bX_}
|
||
switch(_da_)
|
||
{case 74:return _aP_;
|
||
case 75:return _aQ_;
|
||
case 76:return _aR_;
|
||
case 77:return _aS_;
|
||
case 78:return _aT_;
|
||
case 79:return _aU_;
|
||
case 80:return _aV_;
|
||
case 81:return _aW_;
|
||
case 82:return _aX_;
|
||
case 83:return _aY_;
|
||
case 84:return _aZ_;
|
||
case 85:return _a0_;
|
||
case 86:return _a1_;
|
||
case 87:return _a2_;
|
||
case 88:return _a3_;
|
||
case 89:return _a4_;
|
||
case 90:return _a5_;
|
||
case 91:return _a6_;
|
||
case 92:return _a7_;
|
||
case 93:return _a8_;
|
||
case 94:return _a9_;
|
||
case 95:return _a__;
|
||
case 96:return _a$_;
|
||
case 97:return _ba_;
|
||
case 98:return _bb_;
|
||
case 99:return _bc_;
|
||
case 100:return _bd_;
|
||
case 101:return _be_;
|
||
case 102:return _bf_;
|
||
case 103:return _bg_;
|
||
case 104:return _bh_;
|
||
case 105:return _bi_;
|
||
case 106:return _bj_;
|
||
case 107:return _bk_;
|
||
case 108:return _bl_;
|
||
case 109:return _bm_;
|
||
default:return _bn_}}
|
||
if(37 <= _da_)
|
||
switch(_da_)
|
||
{case 37:return _ae_;
|
||
case 38:return _af_;
|
||
case 39:return _ag_;
|
||
case 40:return _ah_;
|
||
case 41:return _ai_;
|
||
case 42:return _aj_;
|
||
case 43:return _ak_;
|
||
case 44:return _al_;
|
||
case 45:return _am_;
|
||
case 46:return _an_;
|
||
case 47:return _ao_;
|
||
case 48:return _ap_;
|
||
case 49:return _aq_;
|
||
case 50:return _ar_;
|
||
case 51:return _as_;
|
||
case 52:return _at_;
|
||
case 53:return _au_;
|
||
case 54:return _av_;
|
||
case 55:return _aw_;
|
||
case 56:return _ax_;
|
||
case 57:return _ay_;
|
||
case 58:return _az_;
|
||
case 59:return _aA_;
|
||
case 60:return _aB_;
|
||
case 61:return _aC_;
|
||
case 62:return _aD_;
|
||
case 63:return _aE_;
|
||
case 64:return _aF_;
|
||
case 65:return _aG_;
|
||
case 66:return _aH_;
|
||
case 67:return _aI_;
|
||
case 68:return _aJ_;
|
||
case 69:return _aK_;
|
||
case 70:return _aL_;
|
||
case 71:return _aM_;
|
||
case 72:return _aN_;
|
||
default:return _aO_}
|
||
switch(_da_)
|
||
{case 0:return _v_;
|
||
case 1:return _w_;
|
||
case 2:return _x_;
|
||
case 3:return _y_;
|
||
case 4:return _z_;
|
||
case 5:return _A_;
|
||
case 6:return _B_;
|
||
case 7:return _C_;
|
||
case 8:return _D_;
|
||
case 9:return _E_;
|
||
case 10:return _F_;
|
||
case 11:return _G_;
|
||
case 12:return _H_;
|
||
case 13:return _I_;
|
||
case 14:return _J_;
|
||
case 15:return _K_;
|
||
case 16:return _L_;
|
||
case 17:return _M_;
|
||
case 18:return _N_;
|
||
case 19:return _O_;
|
||
case 20:return _P_;
|
||
case 21:return _Q_;
|
||
case 22:return _R_;
|
||
case 23:return _S_;
|
||
case 24:return _T_;
|
||
case 25:return _U_;
|
||
case 26:return _V_;
|
||
case 27:return _W_;
|
||
case 28:return _X_;
|
||
case 29:return _Y_;
|
||
case 30:return _Z_;
|
||
case 31:return ___;
|
||
case 32:return _$_;
|
||
case 33:return _aa_;
|
||
case 34:return _ab_;
|
||
case 35:return _ac_;
|
||
default:return _ad_}}
|
||
function rgb(a,r,g,b)
|
||
{if(a){var a$0=a[1];return [3,[0,r,g,b,a$0]]}return [1,[0,r,g,b]]}
|
||
function hsl(a,h,s,l)
|
||
{if(a){var a$0=a[1];return [6,[0,h,s,l,a$0]]}return [5,[0,h,s,l]]}
|
||
function string_of_t(param)
|
||
{switch(param[0])
|
||
{case 0:var n=param[1];return string_of_name(n);
|
||
case 1:
|
||
var match=param[1],b=match[3],g=match[2],r=match[1];
|
||
return caml_call4(Stdlib_printf[4],_bY_,r,g,b);
|
||
case 2:
|
||
var match$0=param[1],b$0=match$0[3],g$0=match$0[2],r$0=match$0[1];
|
||
return caml_call4(Stdlib_printf[4],_bZ_,r$0,g$0,b$0);
|
||
case 3:
|
||
var
|
||
match$1=param[1],
|
||
a=match$1[4],
|
||
b$1=match$1[3],
|
||
g$1=match$1[2],
|
||
r$1=match$1[1];
|
||
return caml_call5(Stdlib_printf[4],_b0_,r$1,g$1,b$1,a);
|
||
case 4:
|
||
var
|
||
match$2=param[1],
|
||
a$0=match$2[4],
|
||
b$2=match$2[3],
|
||
g$2=match$2[2],
|
||
r$2=match$2[1];
|
||
return caml_call5(Stdlib_printf[4],_b1_,r$2,g$2,b$2,a$0);
|
||
case 5:
|
||
var match$3=param[1],l=match$3[3],s=match$3[2],h=match$3[1];
|
||
return caml_call4(Stdlib_printf[4],_b2_,h,s,l);
|
||
default:
|
||
var
|
||
match$4=param[1],
|
||
a$1=match$4[4],
|
||
l$0=match$4[3],
|
||
s$0=match$4[2],
|
||
h$0=match$4[1];
|
||
return caml_call5(Stdlib_printf[4],_b3_,h$0,s$0,l$0,a$1)}}
|
||
function hex_of_rgb(param)
|
||
{var blue=param[3],green=param[2],red=param[1];
|
||
function in_range(i)
|
||
{var
|
||
_c8_=caml_call2(symbol$5,i,0),
|
||
_c9_=_c8_ || caml_call2(symbol$9,i,255);
|
||
if(_c9_)
|
||
{var
|
||
_c__=caml_call1(Stdlib[33],i),
|
||
_c$_=caml_call2(Stdlib[28],_c__,cst_is_out_of_valid_range);
|
||
throw [0,Stdlib[6],_c$_]}
|
||
return _c9_}
|
||
in_range(red);
|
||
in_range(green);
|
||
in_range(blue);
|
||
return caml_call4(Stdlib_printf[4],_b4_,red,green,blue)}
|
||
function js_t_of_js_string(s)
|
||
{var
|
||
rgb_re=
|
||
new regExp_withFlags(caml_jsbytes_of_string(cst_rgb_s_d_s_d_s_d)),
|
||
rgb_pct_re=
|
||
new regExp_withFlags(caml_jsbytes_of_string(cst_rgb_s_d_s_d_s_d$0)),
|
||
rgba_re=
|
||
new regExp_withFlags(caml_jsbytes_of_string(cst_rgba_s_d_s_d_s_d_d_d)),
|
||
rgba_pct_re=
|
||
new
|
||
regExp_withFlags
|
||
(caml_jsbytes_of_string(cst_rgba_s_d_s_d_s_d_d_d$0)),
|
||
hsl_re=
|
||
new regExp_withFlags(caml_jsbytes_of_string(cst_hsl_s_d_s_d_s_d)),
|
||
hsla_re=
|
||
new regExp_withFlags(caml_jsbytes_of_string(cst_hsla_s_d_s_d_s_d_d_d));
|
||
if
|
||
(!
|
||
(rgb_re.test(s) | 0)
|
||
&&
|
||
!
|
||
(rgba_re.test(s) | 0)
|
||
&&
|
||
!
|
||
(rgb_pct_re.test(s) | 0)
|
||
&&
|
||
!
|
||
(rgba_pct_re.test(s) | 0)
|
||
&&
|
||
!
|
||
(hsl_re.test(s) | 0)
|
||
&&
|
||
!
|
||
(hsla_re.test(s) | 0))
|
||
{var _c5_=caml_string_of_jsstring(s);
|
||
if(caml_call2(Stdlib_list[33],_c5_,_b5_))return s;
|
||
var
|
||
_c6_=caml_string_of_jsstring(s),
|
||
_c7_=caml_call2(Stdlib[28],_c6_,cst_is_not_a_valid_color);
|
||
throw [0,Stdlib[6],_c7_]}
|
||
return s}
|
||
function js(c)
|
||
{if(0 === c[0])
|
||
{var n=c[1];return caml_jsstring_of_string(string_of_name(n))}
|
||
return caml_jsstring_of_string(string_of_t(c))}
|
||
function ml(c)
|
||
{var s=caml_string_of_jsstring(c);
|
||
try
|
||
{var _cS_=[0,name_of_string(s)];return _cS_}
|
||
catch(_cT_)
|
||
{_cT_ = caml_wrap_exception(_cT_);
|
||
if(_cT_[1] === Stdlib[6])
|
||
{var
|
||
fail=
|
||
function(param)
|
||
{var _c4_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_color$0);
|
||
throw [0,Stdlib[6],_c4_]},
|
||
re_rgb=regexp(cst_rgba_d_d_d_d_d),
|
||
re_rgb_pct=regexp(cst_rgba_d_d_d_d_d$0),
|
||
re_hsl=regexp(cst_hsla_d_d_d_d_d),
|
||
i_of_s_o=
|
||
function(param)
|
||
{if(param)
|
||
{var i=param[1];
|
||
try
|
||
{var _c2_=caml_int_of_string(i);return _c2_}
|
||
catch(_c3_)
|
||
{_c3_ = caml_wrap_exception(_c3_);
|
||
if(_c3_[1] === Stdlib[6])
|
||
var s=_c3_[2];
|
||
else
|
||
{if(_c3_[1] !== Stdlib[7])throw _c3_;var s=_c3_[2]}
|
||
var
|
||
_cZ_=caml_call2(Stdlib[28],cst$39,s),
|
||
_c0_=caml_call2(Stdlib[28],i,_cZ_),
|
||
_c1_=caml_call2(Stdlib[28],cst_color_conversion_error,_c0_);
|
||
throw [0,Stdlib[6],_c1_]}}
|
||
return fail(0)},
|
||
f_of_s=
|
||
function(f)
|
||
{try
|
||
{var _cX_=caml_float_of_string(f);return _cX_}
|
||
catch(_cY_)
|
||
{_cY_ = caml_wrap_exception(_cY_);
|
||
if(_cY_[1] === Stdlib[6])
|
||
var s=_cY_[2];
|
||
else
|
||
{if(_cY_[1] !== Stdlib[7])throw _cY_;var s=_cY_[2]}
|
||
var
|
||
_cU_=caml_call2(Stdlib[28],cst$40,s),
|
||
_cV_=caml_call2(Stdlib[28],f,_cU_),
|
||
_cW_=caml_call2(Stdlib[28],cst_color_conversion_error$0,_cV_);
|
||
throw [0,Stdlib[6],_cW_]}},
|
||
match=string_match(re_rgb,s,0);
|
||
if(match)
|
||
{var
|
||
r=match[1],
|
||
red=matched_group(r,2),
|
||
green=matched_group(r,3),
|
||
blue=matched_group(r,4),
|
||
alpha=matched_group(r,5),
|
||
match$0=matched_group(r,1);
|
||
if(match$0)
|
||
{var _cA_=match$0[1];
|
||
if(! caml_string_notequal(_cA_,cst_rgb))
|
||
{if(alpha)return fail(0);
|
||
var _cE_=i_of_s_o(blue),_cF_=i_of_s_o(green);
|
||
return [1,[0,i_of_s_o(red),_cF_,_cE_]]}
|
||
if(! caml_string_notequal(_cA_,cst_rgba))
|
||
{if(alpha)
|
||
{var
|
||
a=alpha[1],
|
||
_cB_=f_of_s(a),
|
||
_cC_=i_of_s_o(blue),
|
||
_cD_=i_of_s_o(green);
|
||
return [3,[0,i_of_s_o(red),_cD_,_cC_,_cB_]]}
|
||
return fail(0)}}
|
||
return fail(0)}
|
||
var match$1=string_match(re_rgb_pct,s,0);
|
||
if(match$1)
|
||
{var
|
||
r$0=match$1[1],
|
||
red$0=matched_group(r$0,2),
|
||
green$0=matched_group(r$0,3),
|
||
blue$0=matched_group(r$0,4),
|
||
alpha$0=matched_group(r$0,5),
|
||
match$2=matched_group(r$0,1);
|
||
if(match$2)
|
||
{var _cG_=match$2[1];
|
||
if(! caml_string_notequal(_cG_,cst_rgb$0))
|
||
{if(alpha$0)return fail(0);
|
||
var _cK_=i_of_s_o(blue$0),_cL_=i_of_s_o(green$0);
|
||
return [2,[0,i_of_s_o(red$0),_cL_,_cK_]]}
|
||
if(! caml_string_notequal(_cG_,cst_rgba$0))
|
||
{if(alpha$0)
|
||
{var
|
||
a$0=alpha$0[1],
|
||
_cH_=f_of_s(a$0),
|
||
_cI_=i_of_s_o(blue$0),
|
||
_cJ_=i_of_s_o(green$0);
|
||
return [4,[0,i_of_s_o(red$0),_cJ_,_cI_,_cH_]]}
|
||
return fail(0)}}
|
||
return fail(0)}
|
||
var match$3=string_match(re_hsl,s,0);
|
||
if(match$3)
|
||
{var
|
||
r$1=match$3[1],
|
||
red$1=matched_group(r$1,2),
|
||
green$1=matched_group(r$1,3),
|
||
blue$1=matched_group(r$1,4),
|
||
alpha$1=matched_group(r$1,5),
|
||
match$4=matched_group(r$1,1);
|
||
if(match$4)
|
||
{var _cM_=match$4[1];
|
||
if(! caml_string_notequal(_cM_,cst_hsl))
|
||
{if(alpha$1)return fail(0);
|
||
var _cQ_=i_of_s_o(blue$1),_cR_=i_of_s_o(green$1);
|
||
return [5,[0,i_of_s_o(red$1),_cR_,_cQ_]]}
|
||
if(! caml_string_notequal(_cM_,cst_hsla))
|
||
{if(alpha$1)
|
||
{var
|
||
a$1=alpha$1[1],
|
||
_cN_=f_of_s(a$1),
|
||
_cO_=i_of_s_o(blue$1),
|
||
_cP_=i_of_s_o(green$1);
|
||
return [6,[0,i_of_s_o(red$1),_cP_,_cO_,_cN_]]}
|
||
return fail(0)}}
|
||
return fail(0)}
|
||
return fail(0)}
|
||
throw _cT_}}
|
||
function string_of_t$0(param)
|
||
{if(typeof param === "number")
|
||
return cst_0;
|
||
else
|
||
switch(param[0])
|
||
{case 0:
|
||
var f=param[1];return caml_call3(Stdlib_printf[4],_b6_,f,cst_em$0);
|
||
case 1:
|
||
var f$0=param[1];
|
||
return caml_call3(Stdlib_printf[4],_b7_,f$0,cst_ex);
|
||
case 2:
|
||
var f$1=param[1];
|
||
return caml_call3(Stdlib_printf[4],_b8_,f$1,cst_px);
|
||
case 3:
|
||
var f$2=param[1];
|
||
return caml_call3(Stdlib_printf[4],_b9_,f$2,cst_gd);
|
||
case 4:
|
||
var f$3=param[1];
|
||
return caml_call3(Stdlib_printf[4],_b__,f$3,cst_rem);
|
||
case 5:
|
||
var f$4=param[1];
|
||
return caml_call3(Stdlib_printf[4],_b$_,f$4,cst_vw);
|
||
case 6:
|
||
var f$5=param[1];
|
||
return caml_call3(Stdlib_printf[4],_ca_,f$5,cst_vh);
|
||
case 7:
|
||
var f$6=param[1];
|
||
return caml_call3(Stdlib_printf[4],_cb_,f$6,cst_vm);
|
||
case 8:
|
||
var f$7=param[1];
|
||
return caml_call3(Stdlib_printf[4],_cc_,f$7,cst_ch);
|
||
case 9:
|
||
var f$8=param[1];
|
||
return caml_call3(Stdlib_printf[4],_cd_,f$8,cst_mm);
|
||
case 10:
|
||
var f$9=param[1];
|
||
return caml_call3(Stdlib_printf[4],_ce_,f$9,cst_cm);
|
||
case 11:
|
||
var f$10=param[1];
|
||
return caml_call3(Stdlib_printf[4],_cf_,f$10,cst_in);
|
||
case 12:
|
||
var f$11=param[1];
|
||
return caml_call3(Stdlib_printf[4],_cg_,f$11,cst_pt);
|
||
default:
|
||
var f$12=param[1];
|
||
return caml_call3(Stdlib_printf[4],_ch_,f$12,cst_pc)}}
|
||
function js$0(t){return caml_jsstring_of_string(string_of_t$0(t))}
|
||
function ml$0(t)
|
||
{var s=caml_string_of_jsstring(t);
|
||
if(caml_call2(String[38],s,cst_0$0))return 0;
|
||
function fail(param)
|
||
{var _cz_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_length);
|
||
throw [0,Stdlib[6],_cz_]}
|
||
var re=regexp(cst_d_d_s_S),match=string_match(re,s,0);
|
||
if(match)
|
||
{var r=match[1],match$0=matched_group(r,1);
|
||
if(match$0)
|
||
{var f=match$0[1];
|
||
try
|
||
{var _cx_=caml_float_of_string(f)}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Stdlib[6])
|
||
{var
|
||
s$0=exn[2],
|
||
_cw_=caml_call2(Stdlib[28],cst_length_conversion_error,s$0);
|
||
throw [0,Stdlib[6],_cw_]}
|
||
throw exn}
|
||
var f$0=_cx_}
|
||
else
|
||
var f$0=fail(0);
|
||
var match$1=matched_group(r,2);
|
||
if(match$1)
|
||
{var _cy_=match$1[1],switch$0=caml_string_compare(_cy_,cst_pc$0);
|
||
if(0 <= switch$0)
|
||
{if(! (0 < switch$0))return [13,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_pt$0))return [12,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_px$0))return [2,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_rem$0))return [4,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_vh$0))return [6,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_vm$0))return [7,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_vw$0))return [5,f$0]}
|
||
else
|
||
{if(! caml_string_notequal(_cy_,cst_ch$0))return [8,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_cm$0))return [10,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_em$1))return [0,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_ex$0))return [1,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_gd$0))return [3,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_in$0))return [11,f$0];
|
||
if(! caml_string_notequal(_cy_,cst_mm$0))return [9,f$0]}
|
||
return fail(0)}
|
||
return fail(0)}
|
||
return fail(0)}
|
||
var Length=[0,string_of_t$0,js$0,ml$0];
|
||
function string_of_t$1(param)
|
||
{switch(param[0])
|
||
{case 0:
|
||
var f=param[1];return caml_call3(Stdlib_printf[4],_ci_,f,cst_deg);
|
||
case 1:
|
||
var f$0=param[1];
|
||
return caml_call3(Stdlib_printf[4],_cj_,f$0,cst_grad);
|
||
case 2:
|
||
var f$1=param[1];
|
||
return caml_call3(Stdlib_printf[4],_ck_,f$1,cst_rad);
|
||
default:
|
||
var f$2=param[1];
|
||
return caml_call3(Stdlib_printf[4],_cl_,f$2,cst_turns)}}
|
||
function js$1(t){return caml_jsstring_of_string(string_of_t$1(t))}
|
||
function ml$1(j)
|
||
{var s=caml_string_of_jsstring(j),re=regexp(cst_d_d_deg_grad_rad_turns);
|
||
function fail(param)
|
||
{var _cv_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_length$0);
|
||
throw [0,Stdlib[6],_cv_]}
|
||
var match=string_match(re,s,0);
|
||
if(match)
|
||
{var r=match[1],match$0=matched_group(r,1);
|
||
if(match$0)
|
||
{var f=match$0[1];
|
||
try
|
||
{var _ct_=caml_float_of_string(f)}
|
||
catch(exn)
|
||
{exn = caml_wrap_exception(exn);
|
||
if(exn[1] === Stdlib[6])
|
||
{var
|
||
s$0=exn[2],
|
||
_cs_=caml_call2(Stdlib[28],cst_length_conversion_error$0,s$0);
|
||
throw [0,Stdlib[6],_cs_]}
|
||
throw exn}
|
||
var f$0=_ct_}
|
||
else
|
||
var f$0=fail(0);
|
||
var match$1=matched_group(r,2);
|
||
if(match$1)
|
||
{var _cu_=match$1[1];
|
||
if(! caml_string_notequal(_cu_,cst_deg$0))return [0,f$0];
|
||
if(! caml_string_notequal(_cu_,cst_grad$0))return [1,f$0];
|
||
if(! caml_string_notequal(_cu_,cst_rad$0))return [2,f$0];
|
||
if(! caml_string_notequal(_cu_,cst_turns$0))return [3,f$0]}
|
||
return fail(0)}
|
||
return fail(0)}
|
||
var
|
||
Angle=[0,string_of_t$1,js$1,ml$1],
|
||
Js_of_ocaml_CSS=
|
||
[0,
|
||
[0,
|
||
string_of_name,
|
||
rgb_of_name,
|
||
hex_of_rgb,
|
||
rgb,
|
||
hsl,
|
||
string_of_t,
|
||
js,
|
||
ml,
|
||
js_t_of_js_string],
|
||
Length,
|
||
Angle];
|
||
caml_register_global(1665,Js_of_ocaml_CSS,"Js_of_ocaml__CSS");
|
||
function listen(opt,target,typ,cb)
|
||
{if(opt)var sth=opt[1],capture=sth;else var capture=0;
|
||
var _cr_=! ! capture;
|
||
return addEventListener
|
||
(target,
|
||
typ,
|
||
full_handler(function(n,e){return ! ! caml_call2(cb,n,e)}),
|
||
_cr_)}
|
||
var Js_of_ocaml_Dom_events=[0,Event$0,listen,removeEventListener];
|
||
caml_register_global
|
||
(1666,Js_of_ocaml_Dom_events,"Js_of_ocaml__Dom_events");
|
||
var
|
||
xmlns="http://www.w3.org/2000/svg",
|
||
SVGError=[248,cst_Js_of_ocaml_Dom_svg_SVGErr,caml_fresh_oo_id(0)];
|
||
function createElement$0(doc,name)
|
||
{return doc.createElementNS
|
||
("http://www.w3.org/2000/svg",caml_jsstring_of_string(name))}
|
||
function unsafeCreateElement$0(doc,name){return createElement$0(doc,name)}
|
||
function createA$0(doc){return unsafeCreateElement$0(doc,cst_a$2)}
|
||
function createAltGlyph(doc)
|
||
{return unsafeCreateElement$0(doc,cst_altglyph)}
|
||
function createAltGlyphDef(doc)
|
||
{return unsafeCreateElement$0(doc,cst_altglyphdef)}
|
||
function createAltGlyphItem(doc)
|
||
{return unsafeCreateElement$0(doc,cst_altglyphitem)}
|
||
function createAnimate(doc){return unsafeCreateElement$0(doc,cst_animate)}
|
||
function createAnimateColor(doc)
|
||
{return unsafeCreateElement$0(doc,cst_animatecolor)}
|
||
function createAnimateMotion(doc)
|
||
{return unsafeCreateElement$0(doc,cst_animatemotion)}
|
||
function createAnimateTransform(doc)
|
||
{return unsafeCreateElement$0(doc,cst_animatetransform)}
|
||
function createCircle(doc){return unsafeCreateElement$0(doc,cst_circle)}
|
||
function createClipPath(doc)
|
||
{return unsafeCreateElement$0(doc,cst_clippath)}
|
||
function createCursor(doc){return unsafeCreateElement$0(doc,cst_cursor)}
|
||
function createDefs(doc){return unsafeCreateElement$0(doc,cst_defs)}
|
||
function createDesc(doc){return unsafeCreateElement$0(doc,cst_desc)}
|
||
function createEllipse(doc){return unsafeCreateElement$0(doc,cst_ellipse)}
|
||
function createFilter(doc){return unsafeCreateElement$0(doc,cst_filter)}
|
||
function createFont(doc){return unsafeCreateElement$0(doc,cst_font)}
|
||
function createFontFace(doc)
|
||
{return unsafeCreateElement$0(doc,cst_font_face)}
|
||
function createFontFaceFormat(doc)
|
||
{return unsafeCreateElement$0(doc,cst_font_face_format)}
|
||
function createFontFaceName(doc)
|
||
{return unsafeCreateElement$0(doc,cst_font_face_name)}
|
||
function createFontFaceSrc(doc)
|
||
{return unsafeCreateElement$0(doc,cst_font_face_src)}
|
||
function createFontFaceUri(doc)
|
||
{return unsafeCreateElement$0(doc,cst_font_face_uri)}
|
||
function createForeignObject(doc)
|
||
{return unsafeCreateElement$0(doc,cst_foreignObject)}
|
||
function createG(doc){return unsafeCreateElement$0(doc,cst_g$0)}
|
||
function createGlyph(doc){return unsafeCreateElement$0(doc,cst_glyph)}
|
||
function createGlyphRef(doc)
|
||
{return unsafeCreateElement$0(doc,cst_glyphref)}
|
||
function createhkern(doc){return unsafeCreateElement$0(doc,cst_hkern)}
|
||
function createImage(doc){return unsafeCreateElement$0(doc,cst_image)}
|
||
function createLineElement(doc)
|
||
{return unsafeCreateElement$0(doc,cst_line)}
|
||
function createLinearElement(doc)
|
||
{return unsafeCreateElement$0(doc,cst_lineargradient)}
|
||
function createMask(doc){return unsafeCreateElement$0(doc,cst_mask)}
|
||
function createMetaData(doc)
|
||
{return unsafeCreateElement$0(doc,cst_metadata)}
|
||
function createMissingGlyph(doc)
|
||
{return unsafeCreateElement$0(doc,cst_missing_glyph)}
|
||
function createMPath(doc){return unsafeCreateElement$0(doc,cst_mpath)}
|
||
function createPath(doc){return unsafeCreateElement$0(doc,cst_path)}
|
||
function createPattern(doc){return unsafeCreateElement$0(doc,cst_pattern)}
|
||
function createPolygon(doc){return unsafeCreateElement$0(doc,cst_polygon)}
|
||
function createPolyline(doc)
|
||
{return unsafeCreateElement$0(doc,cst_polyline)}
|
||
function createRadialgradient(doc)
|
||
{return unsafeCreateElement$0(doc,cst_radialgradient)}
|
||
function createRect(doc){return unsafeCreateElement$0(doc,cst_rect)}
|
||
function createScript$0(doc)
|
||
{return unsafeCreateElement$0(doc,cst_script$2)}
|
||
function createSet(doc){return unsafeCreateElement$0(doc,cst_set)}
|
||
function createStop(doc){return unsafeCreateElement$0(doc,cst_stop)}
|
||
function createStyle$0(doc){return unsafeCreateElement$0(doc,cst_style$2)}
|
||
function createSvg(doc){return unsafeCreateElement$0(doc,cst_svg)}
|
||
function createSwitch(doc){return unsafeCreateElement$0(doc,cst_switch)}
|
||
function createSymbol(doc){return unsafeCreateElement$0(doc,cst_symbol)}
|
||
function createTextElement(doc)
|
||
{return unsafeCreateElement$0(doc,cst_text$0)}
|
||
function createTextpath(doc)
|
||
{return unsafeCreateElement$0(doc,cst_textpath)}
|
||
function createTitle$0(doc){return unsafeCreateElement$0(doc,cst_title$2)}
|
||
function createTref(doc){return unsafeCreateElement$0(doc,cst_tref)}
|
||
function createTspan(doc){return unsafeCreateElement$0(doc,cst_tspan)}
|
||
function createUse(doc){return unsafeCreateElement$0(doc,cst_use)}
|
||
function createView(doc){return unsafeCreateElement$0(doc,cst_view)}
|
||
function createvkern(doc){return unsafeCreateElement$0(doc,cst_vkern)}
|
||
var svg_element=Unsafe[1].SVGElement,document$1=Unsafe[1].document;
|
||
function getElementById$0(id)
|
||
{function _co_(e){if(e instanceof svg_element)return e;throw Stdlib[8]}
|
||
function _cp_(param){throw Stdlib[8]}
|
||
var _cq_=Unsafe[1].document.getElementById(caml_jsstring_of_string(id));
|
||
return caml_call3(Opt[7],_cq_,_cp_,_co_)}
|
||
function element$2(e){return e instanceof svg_element?e:no_handler}
|
||
function unsafeCoerce$0(e,tag)
|
||
{var _cn_=caml_jsstring_of_string(tag);
|
||
return e.tagName.toLowerCase() === _cn_?e:no_handler}
|
||
function a$0(e){return unsafeCoerce$0(e,cst_a$3)}
|
||
function altGlyph(e){return unsafeCoerce$0(e,cst_altglyph$0)}
|
||
function altGlyphDef(e){return unsafeCoerce$0(e,cst_altglyphdef$0)}
|
||
function altGlyphItem(e){return unsafeCoerce$0(e,cst_altglyphitem$0)}
|
||
function animate(e){return unsafeCoerce$0(e,cst_animate$0)}
|
||
function animateColor(e){return unsafeCoerce$0(e,cst_animatecolor$0)}
|
||
function animateMotion(e){return unsafeCoerce$0(e,cst_animatemotion$0)}
|
||
function animateTransform(e)
|
||
{return unsafeCoerce$0(e,cst_animatetransform$0)}
|
||
function circle(e){return unsafeCoerce$0(e,cst_circle$0)}
|
||
function clipPath(e){return unsafeCoerce$0(e,cst_clippath$0)}
|
||
function cursor(e){return unsafeCoerce$0(e,cst_cursor$0)}
|
||
function defs(e){return unsafeCoerce$0(e,cst_defs$0)}
|
||
function desc(e){return unsafeCoerce$0(e,cst_desc$0)}
|
||
function ellipse(e){return unsafeCoerce$0(e,cst_ellipse$0)}
|
||
function filter(e){return unsafeCoerce$0(e,cst_filter$0)}
|
||
function font(e){return unsafeCoerce$0(e,cst_font$0)}
|
||
function fontFace(e){return unsafeCoerce$0(e,cst_font_face$0)}
|
||
function fontFaceFormat(e)
|
||
{return unsafeCoerce$0(e,cst_font_face_format$0)}
|
||
function fontFaceName(e){return unsafeCoerce$0(e,cst_font_face_name$0)}
|
||
function fontFaceSrc(e){return unsafeCoerce$0(e,cst_font_face_src$0)}
|
||
function fontFaceUri(e){return unsafeCoerce$0(e,cst_font_face_uri$0)}
|
||
function foreignObject(e){return unsafeCoerce$0(e,cst_foreignobject)}
|
||
function g(e){return unsafeCoerce$0(e,cst_g$1)}
|
||
function glyph(e){return unsafeCoerce$0(e,cst_glyph$0)}
|
||
function glyphRef(e){return unsafeCoerce$0(e,cst_glyphref$0)}
|
||
function hkern(e){return unsafeCoerce$0(e,cst_hkern$0)}
|
||
function image(e){return unsafeCoerce$0(e,cst_image$0)}
|
||
function lineElement(e){return unsafeCoerce$0(e,cst_line$0)}
|
||
function linearElement(e){return unsafeCoerce$0(e,cst_lineargradient$0)}
|
||
function mask(e){return unsafeCoerce$0(e,cst_mask$0)}
|
||
function metaData(e){return unsafeCoerce$0(e,cst_metadata$0)}
|
||
function missingGlyph(e){return unsafeCoerce$0(e,cst_missing_glyph$0)}
|
||
function mPath(e){return unsafeCoerce$0(e,cst_mpath$0)}
|
||
function path$0(e){return unsafeCoerce$0(e,cst_path$0)}
|
||
function pattern(e){return unsafeCoerce$0(e,cst_pattern$0)}
|
||
function polygon(e){return unsafeCoerce$0(e,cst_polygon$0)}
|
||
function polyline(e){return unsafeCoerce$0(e,cst_polyline$0)}
|
||
function radialgradient(e){return unsafeCoerce$0(e,cst_radialgradient$0)}
|
||
function rect(e){return unsafeCoerce$0(e,cst_rect$0)}
|
||
function script$0(e){return unsafeCoerce$0(e,cst_script$3)}
|
||
function set$1(e){return unsafeCoerce$0(e,cst_set$0)}
|
||
function stop(e){return unsafeCoerce$0(e,cst_stop$0)}
|
||
function style$0(e){return unsafeCoerce$0(e,cst_style$3)}
|
||
function svg(e){return unsafeCoerce$0(e,cst_svg$0)}
|
||
function switch$0(e){return unsafeCoerce$0(e,cst_switch$0)}
|
||
function symbol$12(e){return unsafeCoerce$0(e,cst_symbol$0)}
|
||
function textElement(e){return unsafeCoerce$0(e,cst_text$1)}
|
||
function textpath(e){return unsafeCoerce$0(e,cst_textpath$0)}
|
||
function title$0(e){return unsafeCoerce$0(e,cst_title$3)}
|
||
function tref(e){return unsafeCoerce$0(e,cst_tref$0)}
|
||
function tspan(e){return unsafeCoerce$0(e,cst_tspan$0)}
|
||
function use(e){return unsafeCoerce$0(e,cst_use$0)}
|
||
function view(e){return unsafeCoerce$0(e,cst_view$0)}
|
||
function vkern(e){return unsafeCoerce$0(e,cst_vkern$0)}
|
||
var
|
||
Js_of_ocaml_Dom_svg=
|
||
[0,
|
||
xmlns,
|
||
SVGError,
|
||
createElement$0,
|
||
createA$0,
|
||
createAltGlyph,
|
||
createAltGlyphDef,
|
||
createAltGlyphItem,
|
||
createAnimate,
|
||
createAnimateColor,
|
||
createAnimateMotion,
|
||
createAnimateTransform,
|
||
createCircle,
|
||
createClipPath,
|
||
createCursor,
|
||
createDefs,
|
||
createDesc,
|
||
createEllipse,
|
||
createFilter,
|
||
createFont,
|
||
createFontFace,
|
||
createFontFaceFormat,
|
||
createFontFaceName,
|
||
createFontFaceSrc,
|
||
createFontFaceUri,
|
||
createForeignObject,
|
||
createG,
|
||
createGlyph,
|
||
createGlyphRef,
|
||
createhkern,
|
||
createImage,
|
||
createLineElement,
|
||
createLinearElement,
|
||
createMask,
|
||
createMetaData,
|
||
createMissingGlyph,
|
||
createMPath,
|
||
createPath,
|
||
createPattern,
|
||
createPolygon,
|
||
createPolyline,
|
||
createRadialgradient,
|
||
createRect,
|
||
createScript$0,
|
||
createSet,
|
||
createStop,
|
||
createStyle$0,
|
||
createSvg,
|
||
createSwitch,
|
||
createSymbol,
|
||
createTextElement,
|
||
createTextpath,
|
||
createTitle$0,
|
||
createTref,
|
||
createTspan,
|
||
createUse,
|
||
createView,
|
||
createvkern,
|
||
svg_element,
|
||
document$1,
|
||
getElementById$0,
|
||
[0,
|
||
element$2,
|
||
a$0,
|
||
altGlyph,
|
||
altGlyphDef,
|
||
altGlyphItem,
|
||
animate,
|
||
animateColor,
|
||
animateMotion,
|
||
animateTransform,
|
||
circle,
|
||
clipPath,
|
||
cursor,
|
||
defs,
|
||
desc,
|
||
ellipse,
|
||
filter,
|
||
font,
|
||
fontFace,
|
||
fontFaceFormat,
|
||
fontFaceName,
|
||
fontFaceSrc,
|
||
fontFaceUri,
|
||
foreignObject,
|
||
g,
|
||
glyph,
|
||
glyphRef,
|
||
hkern,
|
||
image,
|
||
lineElement,
|
||
linearElement,
|
||
mask,
|
||
metaData,
|
||
missingGlyph,
|
||
mPath,
|
||
path$0,
|
||
pattern,
|
||
polygon,
|
||
polyline,
|
||
radialgradient,
|
||
rect,
|
||
script$0,
|
||
set$1,
|
||
stop,
|
||
style$0,
|
||
svg,
|
||
switch$0,
|
||
symbol$12,
|
||
textElement,
|
||
textpath,
|
||
title$0,
|
||
tref,
|
||
tspan,
|
||
use,
|
||
view,
|
||
vkern]];
|
||
caml_register_global(1667,Js_of_ocaml_Dom_svg,"Js_of_ocaml__Dom_svg");
|
||
function withCredentials(b)
|
||
{var init={};init.withCredentials = ! ! b;return init}
|
||
var
|
||
eventSource=Unsafe[1].EventSource,
|
||
eventSource_options=Unsafe[1].EventSource,
|
||
Js_of_ocaml_EventSource=
|
||
[0,withCredentials,eventSource,eventSource_options,addEventListener];
|
||
caml_register_global
|
||
(1668,Js_of_ocaml_EventSource,"Js_of_ocaml__EventSource");
|
||
var
|
||
console=runtime.caml_js_get_console(0),
|
||
Js_of_ocaml_Firebug=[0,console];
|
||
caml_register_global(1669,Js_of_ocaml_Firebug,"Js_of_ocaml__Firebug");
|
||
function empty_position_options(param){return {}}
|
||
var
|
||
x=Unsafe[1].navigator,
|
||
geolocation=caml_call1(Optdef[5],x)?x.geolocation:x;
|
||
function is_supported$2(param){return caml_call1(Optdef[5],geolocation)}
|
||
var
|
||
Js_of_ocaml_Geolocation=
|
||
[0,empty_position_options,geolocation,is_supported$2];
|
||
caml_register_global
|
||
(1670,Js_of_ocaml_Geolocation,"Js_of_ocaml__Geolocation");
|
||
function object_options(param){return {"localeMatcher":"best fit"}}
|
||
function options(param)
|
||
{return {"localeMatcher":"best fit",
|
||
"usage":"sort",
|
||
"sensitivity":"variant",
|
||
"ignorePunctuation":false$0,
|
||
"numeric":false$0,
|
||
"caseFirst":"false"}}
|
||
var Collator=[0,object_options,options];
|
||
function options$0(param)
|
||
{return {"localeMatcher":"best fit",
|
||
"timeZone":t37,
|
||
"hour12":t37,
|
||
"hourCycle":t37,
|
||
"formatMatcher":"best fit",
|
||
"weekday":t37,
|
||
"era":t37,
|
||
"year":t37,
|
||
"month":t37,
|
||
"day":t37,
|
||
"hour":t37,
|
||
"minute":t37,
|
||
"second":t37,
|
||
"timeZoneName":t37}}
|
||
var DateTimeFormat=[0,object_options,options$0];
|
||
function options$1(param)
|
||
{return {"localeMatcher":"best fit",
|
||
"style":"decimal",
|
||
"currency":t37,
|
||
"currencyDisplay":t37,
|
||
"useGrouping":true$0,
|
||
"minimumIntegerDigits":t37,
|
||
"minimumFractionDigits":t37,
|
||
"maximumFractionDigits":t37,
|
||
"minimumSignificantDigits":t37,
|
||
"maximumSignificantDigits":t37}}
|
||
var NumberFormat=[0,object_options,options$1];
|
||
function options$2(param)
|
||
{return {"localeMatcher":"best fit","type":"cardinal"}}
|
||
var
|
||
PluralRules=[0,object_options,options$2],
|
||
intl=Unsafe[1].Intl,
|
||
collator_constr=Unsafe[1].Intl.Collator,
|
||
dateTimeFormat_constr=Unsafe[1].Intl.DateTimeFormat,
|
||
numberFormat_constr=Unsafe[1].Intl.NumberFormat,
|
||
pluralRules_constr=Unsafe[1].Intl.PluralRules;
|
||
function is_supported$3(param){return caml_call1(Optdef[5],intl)}
|
||
var
|
||
Js_of_ocaml_Intl=
|
||
[0,
|
||
Collator,
|
||
DateTimeFormat,
|
||
NumberFormat,
|
||
PluralRules,
|
||
intl,
|
||
collator_constr,
|
||
dateTimeFormat_constr,
|
||
numberFormat_constr,
|
||
pluralRules_constr,
|
||
is_supported$3];
|
||
caml_register_global(1671,Js_of_ocaml_Intl,"Js_of_ocaml__Intl");
|
||
var Js_of_ocaml$0=[0];
|
||
caml_register_global(1672,Js_of_ocaml$0,"Js_of_ocaml");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# 1 "../.js/uutf/uutf.cma.js"
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
var
|
||
runtime=joo_global_object.jsoo_runtime,
|
||
caml_blit_bytes=runtime.caml_blit_bytes,
|
||
caml_bytes_unsafe_get=runtime.caml_bytes_unsafe_get,
|
||
caml_check_bound=runtime.caml_check_bound,
|
||
caml_create_bytes=runtime.caml_create_bytes,
|
||
caml_ml_bytes_length=runtime.caml_ml_bytes_length,
|
||
caml_ml_string_length=runtime.caml_ml_string_length,
|
||
caml_string_compare=runtime.caml_string_compare,
|
||
caml_string_get=runtime.caml_string_get,
|
||
caml_string_notequal=runtime.caml_string_notequal,
|
||
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes;
|
||
function caml_call1(f,a0)
|
||
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
|
||
function caml_call2(f,a0,a1)
|
||
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
|
||
function caml_call3(f,a0,a1,a2)
|
||
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
|
||
function caml_call4(f,a0,a1,a2,a3)
|
||
{return f.length == 4
|
||
?f(a0,a1,a2,a3)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
|
||
var
|
||
global_data=runtime.caml_get_global_data(),
|
||
cst_UTF_8$0=caml_string_of_jsbytes("UTF-8"),
|
||
cst_US_ASCII$0=caml_string_of_jsbytes("US-ASCII"),
|
||
cst_ISO_8859_1$1=caml_string_of_jsbytes("ISO-8859-1"),
|
||
cst_UTF_16$0=caml_string_of_jsbytes("UTF-16"),
|
||
cst_UTF_16LE$0=caml_string_of_jsbytes("UTF-16LE"),
|
||
cst_UTF_16BE$0=caml_string_of_jsbytes("UTF-16BE"),
|
||
cst_ISO646_US=caml_string_of_jsbytes("ISO646-US"),
|
||
cst_CSISOLATIN1=caml_string_of_jsbytes("CSISOLATIN1"),
|
||
cst_ANSI_X3_4_1968=caml_string_of_jsbytes("ANSI_X3.4-1968"),
|
||
cst_ANSI_X3_4_1986=caml_string_of_jsbytes("ANSI_X3.4-1986"),
|
||
cst_ASCII=caml_string_of_jsbytes("ASCII"),
|
||
cst_CP367=caml_string_of_jsbytes("CP367"),
|
||
cst_CP819=caml_string_of_jsbytes("CP819"),
|
||
cst_CSASCII=caml_string_of_jsbytes("CSASCII"),
|
||
cst_IBM367=caml_string_of_jsbytes("IBM367"),
|
||
cst_IBM819=caml_string_of_jsbytes("IBM819"),
|
||
cst_ISO_8859_1$0=caml_string_of_jsbytes("ISO-8859-1"),
|
||
cst_ISO_IR_100=caml_string_of_jsbytes("ISO-IR-100"),
|
||
cst_ISO_IR_6=caml_string_of_jsbytes("ISO-IR-6"),
|
||
cst_US=caml_string_of_jsbytes("US"),
|
||
cst_ISO_646_IRV_1991=caml_string_of_jsbytes("ISO_646.IRV:1991"),
|
||
cst_ISO_8859_1=caml_string_of_jsbytes("ISO_8859-1"),
|
||
cst_ISO_8859_1_1987=caml_string_of_jsbytes("ISO_8859-1:1987"),
|
||
cst_L1=caml_string_of_jsbytes("L1"),
|
||
cst_LATIN1=caml_string_of_jsbytes("LATIN1"),
|
||
cst_US_ASCII=caml_string_of_jsbytes("US-ASCII"),
|
||
cst_UTF_16=caml_string_of_jsbytes("UTF-16"),
|
||
cst_UTF_16BE=caml_string_of_jsbytes("UTF-16BE"),
|
||
cst_UTF_16LE=caml_string_of_jsbytes("UTF-16LE"),
|
||
cst_UTF_8=caml_string_of_jsbytes("UTF-8"),
|
||
cst_expected_Await_encode=
|
||
caml_string_of_jsbytes("expected `Await encode"),
|
||
Stdlib_uchar=global_data.Stdlib__uchar,
|
||
Stdlib_buffer=global_data.Stdlib__buffer,
|
||
Stdlib_bytes=global_data.Stdlib__bytes,
|
||
Stdlib=global_data.Stdlib,
|
||
Assert_failure=global_data.Assert_failure,
|
||
Stdlib_string=global_data.Stdlib__string,
|
||
Stdlib_printf=global_data.Stdlib__printf,
|
||
Stdlib_format=global_data.Stdlib__format,
|
||
_a_=Stdlib_format[123],
|
||
_B_=[0,caml_string_of_jsbytes("src/uutf.ml"),364,9],
|
||
_u_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("`Await"),0],
|
||
caml_string_of_jsbytes("`Await")],
|
||
_v_=
|
||
[0,[11,caml_string_of_jsbytes("`End"),0],caml_string_of_jsbytes("`End")],
|
||
_w_=
|
||
[0,
|
||
[18,
|
||
[1,[0,0,caml_string_of_jsbytes("")]],
|
||
[11,caml_string_of_jsbytes("`Uchar U+"),[4,8,[0,2,4],0,[17,0,0]]]],
|
||
caml_string_of_jsbytes("@[`Uchar U+%04X@]")],
|
||
_x_=
|
||
[0,
|
||
[18,
|
||
[1,[0,0,caml_string_of_jsbytes("")]],
|
||
[11,caml_string_of_jsbytes("`Malformed ("),0]],
|
||
caml_string_of_jsbytes("@[`Malformed (")],
|
||
_y_=[0,[4,8,[0,2,2],0,0],caml_string_of_jsbytes("%02X")],
|
||
_A_=[0,[12,32,[4,8,[0,2,2],0,0]],caml_string_of_jsbytes(" %02X")],
|
||
_z_=[0,[12,41,[17,0,0]],caml_string_of_jsbytes(")@]")],
|
||
_p_=[0,-211555818,3299808],
|
||
_k_=[0,-211558048,3299808],
|
||
_q_=[0,684370880,3299808],
|
||
_o_=[0,684370880,427938126],
|
||
_l_=[0,-211558048,427938126],
|
||
_m_=[0,caml_string_of_jsbytes("src/uutf.ml"),154,55],
|
||
_n_=[0,684370880,427938126],
|
||
_r_=[0,caml_string_of_jsbytes("src/uutf.ml"),153,55],
|
||
_s_=[0,caml_string_of_jsbytes("src/uutf.ml"),155,55],
|
||
_t_=[0,684370880,3455931],
|
||
_j_=[0,caml_string_of_jsbytes("src/uutf.ml"),121,9],
|
||
_c_=[0,684370880],
|
||
_d_=[0,-211555818],
|
||
_e_=[0,-211558048],
|
||
_f_=[0,143365725],
|
||
_g_=[0,423112016],
|
||
_h_=[0,338302576],
|
||
_b_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("invalid bounds (index "),
|
||
[4,0,0,0,[11,caml_string_of_jsbytes(", length "),[4,0,0,0,[12,41,0]]]]],
|
||
caml_string_of_jsbytes("invalid bounds (index %d, length %d)")],
|
||
_i_=
|
||
[0,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
1,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
2,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
3,
|
||
4,
|
||
4,
|
||
4,
|
||
4,
|
||
4,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
0];
|
||
function invalid_bounds(j,l)
|
||
{var _aF_=caml_call3(Stdlib_printf[4],_b_,j,l);
|
||
return caml_call1(Stdlib[1],_aF_)}
|
||
function unsafe_set_byte(s,j,byte$0)
|
||
{runtime.caml_bytes_unsafe_set(s,j,byte$0);return 0}
|
||
var
|
||
u_bom=caml_call1(Stdlib_uchar[9],65279),
|
||
u_rep=caml_call1(Stdlib_uchar[9],65533);
|
||
function encoding_of_string(s)
|
||
{var
|
||
match=caml_call1(Stdlib_string[25],s),
|
||
_aD_=caml_string_compare(match,cst_ISO646_US),
|
||
switch$1=0;
|
||
if(0 <= _aD_)
|
||
{if(0 < _aD_)
|
||
{var switch$0=caml_string_compare(match,cst_US);
|
||
if(0 <= switch$0)
|
||
{if(0 < switch$0 && caml_string_notequal(match,cst_US_ASCII))
|
||
{if(! caml_string_notequal(match,cst_UTF_16))return _f_;
|
||
if(! caml_string_notequal(match,cst_UTF_16BE))return _e_;
|
||
if(! caml_string_notequal(match,cst_UTF_16LE))return _d_;
|
||
if(! caml_string_notequal(match,cst_UTF_8))return _c_;
|
||
switch$1 = 2}}
|
||
else
|
||
if(caml_string_notequal(match,cst_ISO_646_IRV_1991))
|
||
if
|
||
(caml_string_notequal(match,cst_ISO_8859_1)
|
||
&&
|
||
caml_string_notequal(match,cst_ISO_8859_1_1987)
|
||
&&
|
||
caml_string_notequal(match,cst_L1)
|
||
&&
|
||
caml_string_notequal(match,cst_LATIN1))
|
||
switch$1 = 2;
|
||
else
|
||
switch$1 = 1}}
|
||
else
|
||
{var _aE_=caml_string_compare(match,cst_CSISOLATIN1);
|
||
if(0 <= _aE_)
|
||
if(0 < _aE_)
|
||
{if(caml_string_notequal(match,cst_IBM367))
|
||
if
|
||
(caml_string_notequal(match,cst_IBM819)
|
||
&&
|
||
caml_string_notequal(match,cst_ISO_8859_1$0)
|
||
&&
|
||
caml_string_notequal(match,cst_ISO_IR_100))
|
||
{if(caml_string_notequal(match,cst_ISO_IR_6))switch$1 = 2}
|
||
else
|
||
switch$1 = 1}
|
||
else
|
||
switch$1 = 1;
|
||
else
|
||
if
|
||
(caml_string_notequal(match,cst_ANSI_X3_4_1968)
|
||
&&
|
||
caml_string_notequal(match,cst_ANSI_X3_4_1986)
|
||
&&
|
||
caml_string_notequal(match,cst_ASCII)
|
||
&&
|
||
caml_string_notequal(match,cst_CP367))
|
||
if(caml_string_notequal(match,cst_CP819))
|
||
{if(caml_string_notequal(match,cst_CSASCII))switch$1 = 2}
|
||
else
|
||
switch$1 = 1}
|
||
switch(switch$1){case 2:return 0;case 0:return _g_;default:return _h_}}
|
||
function encoding_to_string(param)
|
||
{return 143365725 <= param
|
||
?423112016 <= param
|
||
?684370880 <= param?cst_UTF_8$0:cst_US_ASCII$0
|
||
:338302576 <= param?cst_ISO_8859_1$1:cst_UTF_16$0
|
||
:-211555818 <= param?cst_UTF_16LE$0:cst_UTF_16BE$0}
|
||
function malformed(s,j,l)
|
||
{return [0,659980059,caml_call3(Stdlib_bytes[8],s,j,l)]}
|
||
function malformed_pair(be,hi,s,j,l)
|
||
{var bs1=caml_call3(Stdlib_bytes[7],s,j,l),bs0=caml_create_bytes(2);
|
||
if(be)var j1=1,j0=0;else var j1=0,j0=1;
|
||
unsafe_set_byte(bs0,j0,hi >>> 8 | 0);
|
||
unsafe_set_byte(bs0,j1,hi & 255);
|
||
var _aC_=caml_call2(Stdlib_bytes[14],bs0,bs1);
|
||
return [0,659980059,caml_call1(Stdlib_bytes[42],_aC_)]}
|
||
var utf_8_len=_i_.slice();
|
||
function r_utf_8(s,j,l)
|
||
{function uchar(c){return [0,852405675,caml_call1(Stdlib_uchar[9],c)]}
|
||
var switcher=l - 1 | 0;
|
||
if(3 < switcher >>> 0)throw [0,Assert_failure,_j_];
|
||
switch(switcher)
|
||
{case 0:return uchar(caml_bytes_unsafe_get(s,j));
|
||
case 1:
|
||
var
|
||
b0=caml_bytes_unsafe_get(s,j),
|
||
b1=caml_bytes_unsafe_get(s,j + 1 | 0);
|
||
return 2 === (b1 >>> 6 | 0)
|
||
?uchar((b0 & 31) << 6 | b1 & 63)
|
||
:malformed(s,j,l);
|
||
case 2:
|
||
var
|
||
b0$0=caml_bytes_unsafe_get(s,j),
|
||
b1$0=caml_bytes_unsafe_get(s,j + 1 | 0),
|
||
b2=caml_bytes_unsafe_get(s,j + 2 | 0),
|
||
c=(b0$0 & 15) << 12 | (b1$0 & 63) << 6 | b2 & 63;
|
||
if(2 === (b2 >>> 6 | 0))
|
||
{if(224 === b0$0)
|
||
{if(160 <= b1$0 && ! (191 < b1$0))return uchar(c);
|
||
return malformed(s,j,l)}
|
||
if(237 === b0$0)
|
||
{if(128 <= b1$0 && ! (159 < b1$0))return uchar(c);
|
||
return malformed(s,j,l)}
|
||
return 2 === (b1$0 >>> 6 | 0)?uchar(c):malformed(s,j,l)}
|
||
return malformed(s,j,l);
|
||
default:
|
||
var
|
||
b0$1=caml_bytes_unsafe_get(s,j),
|
||
b1$1=caml_bytes_unsafe_get(s,j + 1 | 0),
|
||
b2$0=caml_bytes_unsafe_get(s,j + 2 | 0),
|
||
b3=caml_bytes_unsafe_get(s,j + 3 | 0),
|
||
c$0=
|
||
(b0$1 & 7)
|
||
<<
|
||
18
|
||
|
|
||
(b1$1 & 63)
|
||
<<
|
||
12
|
||
|
|
||
(b2$0 & 63)
|
||
<<
|
||
6
|
||
|
|
||
b3
|
||
&
|
||
63;
|
||
if(2 === (b3 >>> 6 | 0) && 2 === (b2$0 >>> 6 | 0))
|
||
{if(240 === b0$1)
|
||
{if(144 <= b1$1 && ! (191 < b1$1))return uchar(c$0);
|
||
return malformed(s,j,l)}
|
||
if(244 === b0$1)
|
||
{if(128 <= b1$1 && ! (143 < b1$1))return uchar(c$0);
|
||
return malformed(s,j,l)}
|
||
return 2 === (b1$1 >>> 6 | 0)?uchar(c$0):malformed(s,j,l)}
|
||
return malformed(s,j,l)}}
|
||
function r_utf_16(s,j0,j1)
|
||
{var
|
||
b0=caml_bytes_unsafe_get(s,j0),
|
||
b1=caml_bytes_unsafe_get(s,j1),
|
||
u=b0 << 8 | b1;
|
||
if(55296 <= u && ! (57343 < u))
|
||
return 56319 < u
|
||
?malformed(s,caml_call2(Stdlib[16],j0,j1),2)
|
||
:[0,16161,u];
|
||
return [0,852405675,caml_call1(Stdlib_uchar[9],u)]}
|
||
function r_utf_16_lo(hi,s,j0,j1)
|
||
{var
|
||
b0=caml_bytes_unsafe_get(s,j0),
|
||
b1=caml_bytes_unsafe_get(s,j1),
|
||
lo=b0 << 8 | b1;
|
||
if(56320 <= lo && ! (57343 < lo))
|
||
return [0,
|
||
852405675,
|
||
caml_call1
|
||
(Stdlib_uchar[9],((hi & 1023) << 10 | lo & 1023) + 65536 | 0)];
|
||
return malformed_pair(j0 < j1?1:0,hi,s,caml_call2(Stdlib[16],j0,j1),2)}
|
||
function r_encoding(s,j,l)
|
||
{function some(i){return i < l?[0,caml_bytes_unsafe_get(s,j + i | 0)]:0}
|
||
var match=some(0),match$0=some(1),match$1=some(2);
|
||
if(match)
|
||
{var _aB_=match[1],switch$0=0;
|
||
if(240 <= _aB_)
|
||
if(254 === _aB_)
|
||
{if(match$0){if(255 === match$0[1])return _k_;switch$0 = 1}}
|
||
else
|
||
if(255 === _aB_)
|
||
{if(match$0){if(254 === match$0[1])return _p_;switch$0 = 1}}
|
||
else
|
||
switch$0 = 1;
|
||
else
|
||
if(0 === _aB_)
|
||
{if(match$0)
|
||
{var p=match$0[1];
|
||
if(0 < p)return [0,-211558048,[0,605782321,p]];
|
||
switch$0 = 1}}
|
||
else
|
||
if(239 <= _aB_)
|
||
{if(match$0)
|
||
if(187 === match$0[1])
|
||
{if(match$1 && 191 === match$1[1])return _q_}
|
||
else
|
||
switch$0 = 1}
|
||
else
|
||
switch$0 = 1;
|
||
if(switch$0 && match$0 && 0 === match$0[1] && 0 < _aB_)
|
||
return [0,-211555818,[0,605782321,_aB_]];
|
||
if(0 === caml_check_bound(utf_8_len,_aB_)[1 + _aB_])
|
||
{if(match$0)return _l_;
|
||
if(match$1)throw [0,Assert_failure,_m_];
|
||
return _n_}
|
||
return _o_}
|
||
if(match$0)throw [0,Assert_failure,_r_];
|
||
if(match$1)throw [0,Assert_failure,_s_];
|
||
return _t_}
|
||
function pp_decode(ppf,param)
|
||
{if(typeof param === "number")
|
||
return 1006505782 <= param
|
||
?caml_call2(_a_,ppf,_u_)
|
||
:caml_call2(_a_,ppf,_v_);
|
||
if(852405675 <= param[1])
|
||
{var u=param[2];
|
||
return caml_call3(_a_,ppf,_w_,caml_call1(Stdlib_uchar[10],u))}
|
||
var bs=param[2],l=caml_ml_string_length(bs);
|
||
caml_call2(_a_,ppf,_x_);
|
||
if(0 < l)caml_call3(_a_,ppf,_y_,caml_string_get(bs,0));
|
||
var _az_=l - 1 | 0,_ay_=1;
|
||
if(! (_az_ < 1))
|
||
{var i=_ay_;
|
||
for(;;)
|
||
{caml_call3(_a_,ppf,_A_,caml_string_get(bs,i));
|
||
var _aA_=i + 1 | 0;
|
||
if(_az_ !== i){var i=_aA_;continue}
|
||
break}}
|
||
return caml_call2(_a_,ppf,_z_)}
|
||
function i_rem(d){return (d[7] - d[6] | 0) + 1 | 0}
|
||
function eoi(d)
|
||
{d[5] = Stdlib_bytes[3];d[6] = 0;d[7] = Stdlib[20];return 0}
|
||
function src(d,s,j,l)
|
||
{if(0 <= j && 0 <= l && ! (caml_ml_bytes_length(s) < (j + l | 0)))
|
||
return 0 === l?eoi(d):(d[5] = s,d[6] = j,d[7] = (j + l | 0) - 1 | 0,0);
|
||
return invalid_bounds(j,l)}
|
||
function refill(k,d)
|
||
{var _ax_=d[1];
|
||
if(typeof _ax_ === "number"){d[18] = k;return 1006505782}
|
||
if(438511779 <= _ax_[1])
|
||
{var
|
||
ic=_ax_[2],
|
||
rc=caml_call4(Stdlib[84],ic,d[5],0,caml_ml_bytes_length(d[5]));
|
||
src(d,d[5],0,rc);
|
||
return caml_call1(k,d)}
|
||
eoi(d);
|
||
return caml_call1(k,d)}
|
||
function t_need(d,need){d[9] = 0;d[10] = need;return 0}
|
||
function t_fill(k,d)
|
||
{function blit(d,l)
|
||
{caml_blit_bytes(d[5],d[6],d[8],d[9],l);
|
||
d[6] = d[6] + l | 0;
|
||
d[9] = d[9] + l | 0;
|
||
return 0}
|
||
var rem=i_rem(d);
|
||
if(0 <= rem)
|
||
{var need=d[10] - d[9] | 0;
|
||
return rem < need
|
||
?(blit(d,rem),refill(function(_aw_){return t_fill(k,_aw_)},d))
|
||
:(blit(d,need),caml_call1(k,d))}
|
||
return caml_call1(k,d)}
|
||
function ret(k,v,byte_count,d)
|
||
{d[18] = k;d[15] = d[15] + byte_count | 0;return caml_call2(d[17],d,v)}
|
||
function decode_us_ascii(d)
|
||
{var rem=i_rem(d);
|
||
if(0 < rem)
|
||
{var j=d[6];
|
||
d[6] = d[6] + 1 | 0;
|
||
var
|
||
_au_=d[5],
|
||
b0=caml_bytes_unsafe_get(_au_,j),
|
||
_at_=1,
|
||
_av_=
|
||
127 < b0
|
||
?malformed(_au_,j,1)
|
||
:[0,852405675,caml_call1(Stdlib_uchar[9],b0)];
|
||
return ret(decode_us_ascii,_av_,_at_,d)}
|
||
return 0 <= rem?refill(decode_us_ascii,d):3455931}
|
||
function decode_iso_8859_1(d)
|
||
{var rem=i_rem(d);
|
||
if(0 < rem)
|
||
{var j=d[6];
|
||
d[6] = d[6] + 1 | 0;
|
||
return ret
|
||
(decode_iso_8859_1,
|
||
[0,
|
||
852405675,
|
||
caml_call1(Stdlib_uchar[9],caml_bytes_unsafe_get(d[5],j))],
|
||
1,
|
||
d)}
|
||
return 0 <= rem?refill(decode_iso_8859_1,d):3455931}
|
||
function t_decode_utf_8(d)
|
||
{if(d[9] < d[10])
|
||
{var _ar_=d[9];return ret(decode_utf_8,malformed(d[8],0,d[9]),_ar_,d)}
|
||
var _as_=d[9];
|
||
return ret(decode_utf_8,r_utf_8(d[8],0,d[9]),_as_,d)}
|
||
function decode_utf_8(d)
|
||
{var rem=i_rem(d);
|
||
if(0 < rem)
|
||
{var need=utf_8_len[1 + caml_bytes_unsafe_get(d[5],d[6])];
|
||
if(rem < need){t_need(d,need);return t_fill(t_decode_utf_8,d)}
|
||
var j=d[6];
|
||
return 0 === need
|
||
?(d[6]
|
||
=
|
||
d[6]
|
||
+
|
||
1
|
||
|
|
||
0,
|
||
ret(decode_utf_8,malformed(d[5],j,1),1,d))
|
||
:(d[6]
|
||
=
|
||
d[6]
|
||
+
|
||
need
|
||
|
|
||
0,
|
||
ret(decode_utf_8,r_utf_8(d[5],j,need),need,d))}
|
||
return 0 <= rem?refill(decode_utf_8,d):3455931}
|
||
function t_decode_utf_16be_lo(hi,d)
|
||
{var bcount=d[9] + 2 | 0;
|
||
return d[9] < d[10]
|
||
?ret(decode_utf_16be,malformed_pair(1,hi,d[8],0,d[9]),bcount,d)
|
||
:ret(decode_utf_16be,r_utf_16_lo(hi,d[8],0,1),bcount,d)}
|
||
function decode_utf_16be_lo(v,d)
|
||
{if(659980059 <= v[1])return ret(decode_utf_16be,v,2,d);
|
||
var hi=v[2],rem=i_rem(d);
|
||
if(2 <= rem)
|
||
{var j=d[6];
|
||
d[6] = d[6] + 2 | 0;
|
||
return ret(decode_utf_16be,r_utf_16_lo(hi,d[5],j,j + 1 | 0),4,d)}
|
||
t_need(d,2);
|
||
return t_fill(function(_aq_){return t_decode_utf_16be_lo(hi,_aq_)},d)}
|
||
function t_decode_utf_16be(d)
|
||
{if(d[9] < d[10])
|
||
{var _ap_=d[9];
|
||
return ret(decode_utf_16be,malformed(d[8],0,d[9]),_ap_,d)}
|
||
return decode_utf_16be_lo(r_utf_16(d[8],0,1),d)}
|
||
function decode_utf_16be(d)
|
||
{var rem=i_rem(d);
|
||
if(0 < rem)
|
||
{if(2 <= rem)
|
||
{var j=d[6];
|
||
d[6] = d[6] + 2 | 0;
|
||
return decode_utf_16be_lo(r_utf_16(d[5],j,j + 1 | 0),d)}
|
||
t_need(d,2);
|
||
return t_fill(t_decode_utf_16be,d)}
|
||
return 0 <= rem?refill(decode_utf_16be,d):3455931}
|
||
function t_decode_utf_16_lo(hi,d)
|
||
{var bcount=d[9] + 2 | 0;
|
||
return d[9] < d[10]
|
||
?ret(decode_utf_16,malformed_pair(0,hi,d[8],0,d[9]),bcount,d)
|
||
:ret(decode_utf_16,r_utf_16_lo(hi,d[8],1,0),bcount,d)}
|
||
function decode_utf_16le_lo(v,d)
|
||
{if(659980059 <= v[1])return ret(decode_utf_16,v,2,d);
|
||
var hi=v[2],rem=i_rem(d);
|
||
if(2 <= rem)
|
||
{var j=d[6];
|
||
d[6] = d[6] + 2 | 0;
|
||
return ret(decode_utf_16,r_utf_16_lo(hi,d[5],j + 1 | 0,j),4,d)}
|
||
t_need(d,2);
|
||
return t_fill(function(_ao_){return t_decode_utf_16_lo(hi,_ao_)},d)}
|
||
function t_decode_utf_16(d)
|
||
{if(d[9] < d[10])
|
||
{var _an_=d[9];return ret(decode_utf_16,malformed(d[8],0,d[9]),_an_,d)}
|
||
return decode_utf_16le_lo(r_utf_16(d[8],1,0),d)}
|
||
function decode_utf_16(d)
|
||
{var rem=i_rem(d);
|
||
if(0 < rem)
|
||
{if(2 <= rem)
|
||
{var j=d[6];
|
||
d[6] = d[6] + 2 | 0;
|
||
return decode_utf_16le_lo(r_utf_16(d[5],j + 1 | 0,j),d)}
|
||
t_need(d,2);
|
||
return t_fill(t_decode_utf_16,d)}
|
||
return 0 <= rem?refill(decode_utf_16,d):3455931}
|
||
function guessed_utf_16(d,be,v)
|
||
{if(be)
|
||
var
|
||
j1=1,
|
||
j0=0,
|
||
t_decode_utf_16_lo$0=t_decode_utf_16be_lo,
|
||
t_decode_utf_16$0=t_decode_utf_16be,
|
||
decode_utf_16$0=decode_utf_16be;
|
||
else
|
||
var
|
||
j1=0,
|
||
j0=1,
|
||
t_decode_utf_16_lo$0=t_decode_utf_16_lo,
|
||
t_decode_utf_16$0=t_decode_utf_16,
|
||
decode_utf_16$0=decode_utf_16;
|
||
function b3(k,d)
|
||
{return 3 <= d[9]
|
||
?(d[10]
|
||
=
|
||
2,
|
||
d[9]
|
||
=
|
||
1,
|
||
unsafe_set_byte(d[8],0,caml_bytes_unsafe_get(d[8],2)),
|
||
t_fill(k,d))
|
||
:decode_utf_16$0(d)}
|
||
if(typeof v === "number")
|
||
{if(427938126 <= v)
|
||
{var v$0=r_utf_16(d[8],j0,j1);
|
||
if(659980059 <= v$0[1])
|
||
{var _ad_=2;
|
||
return ret
|
||
(function(_am_){return b3(t_decode_utf_16$0,_am_)},
|
||
v$0,
|
||
_ad_,
|
||
d)}
|
||
var hi=v$0[2];
|
||
if(3 <= d[9])
|
||
return b3(function(_al_){return t_decode_utf_16_lo$0(hi,_al_)},d);
|
||
var _ae_=d[9];
|
||
return ret
|
||
(decode_utf_16$0,
|
||
malformed_pair(be,hi,Stdlib_bytes[3],0,0),
|
||
_ae_,
|
||
d)}
|
||
var _af_=2,_ag_=[0,852405675,u_bom];
|
||
return ret
|
||
(function(_ak_){return b3(t_decode_utf_16$0,_ak_)},
|
||
_ag_,
|
||
_af_,
|
||
d)}
|
||
var u=v[2],_ah_=2,_ai_=[0,852405675,caml_call1(Stdlib_uchar[9],u)];
|
||
return ret
|
||
(function(_aj_){return b3(t_decode_utf_16$0,_aj_)},_ai_,_ah_,d)}
|
||
function k(d)
|
||
{function setup(d)
|
||
{var match=r_encoding(d[8],0,d[9]),_ac_=match[1];
|
||
if(-211555818 === _ac_)
|
||
{var r=match[2];
|
||
d[2] = -211555818;
|
||
d[18] = decode_utf_16;
|
||
return guessed_utf_16(d,0,r)}
|
||
if(684370880 <= _ac_)
|
||
{var r$0=match[2];
|
||
d[2] = 684370880;
|
||
d[18] = decode_utf_8;
|
||
if(3455931 === r$0)return 3455931;
|
||
if(427938126 <= r$0)
|
||
{var
|
||
b3=
|
||
function(d)
|
||
{var
|
||
b3=caml_bytes_unsafe_get(d[8],2),
|
||
n=caml_check_bound(utf_8_len,b3)[1 + b3];
|
||
return 0 === n
|
||
?ret(decode_utf_8,malformed(d[8],2,1),1,d)
|
||
:(d[10]
|
||
=
|
||
n,
|
||
d[9]
|
||
=
|
||
1,
|
||
unsafe_set_byte(d[8],0,b3),
|
||
t_fill(t_decode_utf_8,d))},
|
||
b2=
|
||
function(d)
|
||
{var
|
||
b2=caml_bytes_unsafe_get(d[8],1),
|
||
b3$0=2 < d[9]?b3:decode_utf_8,
|
||
n=caml_check_bound(utf_8_len,b2)[1 + b2];
|
||
if(0 === n)return ret(b3$0,malformed(d[8],1,1),1,d);
|
||
if(1 === n)return ret(b3$0,r_utf_8(d[8],1,1),1,d);
|
||
d[10] = n;
|
||
unsafe_set_byte(d[8],0,b2);
|
||
if(3 <= d[9])
|
||
{d[9] = 2;
|
||
unsafe_set_byte(d[8],1,caml_bytes_unsafe_get(d[8],2))}
|
||
else
|
||
d[9] = 1;
|
||
return t_fill(t_decode_utf_8,d)},
|
||
b1=caml_bytes_unsafe_get(d[8],0),
|
||
b2$0=1 < d[9]?b2:decode_utf_8,
|
||
n=caml_check_bound(utf_8_len,b1)[1 + b1];
|
||
if(4 < n >>> 0)throw [0,Assert_failure,_B_];
|
||
switch(n)
|
||
{case 0:return ret(b2$0,malformed(d[8],0,1),1,d);
|
||
case 1:return ret(b2$0,r_utf_8(d[8],0,1),1,d);
|
||
case 2:
|
||
return 2 <= d[9]
|
||
?3 <= d[9]
|
||
?ret(b3,r_utf_8(d[8],0,2),2,d)
|
||
:ret(decode_utf_8,r_utf_8(d[8],0,2),2,d)
|
||
:ret(decode_utf_8,malformed(d[8],0,1),1,d);
|
||
case 3:
|
||
if(3 <= d[9])return ret(decode_utf_8,r_utf_8(d[8],0,3),3,d);
|
||
var _aa_=d[9];
|
||
return ret(decode_utf_8,malformed(d[8],0,d[9]),_aa_,d);
|
||
default:
|
||
if(3 <= d[9]){d[10] = 4;return t_fill(t_decode_utf_8,d)}
|
||
var _ab_=d[9];
|
||
return ret(decode_utf_8,malformed(d[8],0,d[9]),_ab_,d)}}
|
||
return ret(decode_utf_8,[0,852405675,u_bom],3,d)}
|
||
var r$1=match[2];
|
||
d[2] = -211558048;
|
||
d[18] = decode_utf_16be;
|
||
return guessed_utf_16(d,1,r$1)}
|
||
t_need(d,3);
|
||
return t_fill(setup,d)}
|
||
function nline(d){d[14] = 0;d[13] = d[13] + 1 | 0;return 0}
|
||
function ncol(d){d[14] = d[14] + 1 | 0;return 0}
|
||
function ncount(d){d[16] = d[16] + 1 | 0;return 0}
|
||
function cr(d,b){d[12] = b;return 0}
|
||
function pp(d,v)
|
||
{if(852405675 <= v[1])
|
||
{var
|
||
u=v[2],
|
||
match=caml_call1(Stdlib_uchar[10],u),
|
||
_$_=match - 133 | 0,
|
||
switch$0=0;
|
||
if(8100 < _$_ >>> 0)
|
||
{var switcher=_$_ + 123 | 0;
|
||
if(! (3 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:
|
||
var last_cr=d[12];
|
||
cr(d,0);
|
||
ncount(d);
|
||
return last_cr?v:(nline(d),v);
|
||
case 1:break;
|
||
case 2:switch$0 = 1;break;
|
||
default:cr(d,1);ncount(d);nline(d);return v}}
|
||
else
|
||
if(8097 < (_$_ - 1 | 0) >>> 0)switch$0 = 1;
|
||
return switch$0
|
||
?(cr(d,0),ncount(d),nline(d),v)
|
||
:(cr(d,0),ncount(d),ncol(d),v)}
|
||
cr(d,0);
|
||
ncount(d);
|
||
ncol(d);
|
||
return v}
|
||
function pp_nln_readline(d,v)
|
||
{if(852405675 <= v[1])
|
||
{var
|
||
u=v[2],
|
||
match=caml_call1(Stdlib_uchar[10],u),
|
||
___=match - 133 | 0,
|
||
switch$0=0;
|
||
if(8100 < ___ >>> 0)
|
||
{var switcher=___ + 123 | 0;
|
||
if(! (3 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:
|
||
var last_cr=d[12];
|
||
cr(d,0);
|
||
return last_cr
|
||
?caml_call1(d[18],d)
|
||
:(ncount(d),nline(d),[0,852405675,d[4]]);
|
||
case 1:break;
|
||
case 2:switch$0 = 1;break;
|
||
default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]}}
|
||
else
|
||
if(8097 < (___ - 1 | 0) >>> 0)switch$0 = 1;
|
||
return switch$0
|
||
?(cr(d,0),ncount(d),nline(d),[0,852405675,d[4]])
|
||
:(cr(d,0),ncount(d),ncol(d),v)}
|
||
cr(d,0);
|
||
ncount(d);
|
||
ncol(d);
|
||
return v}
|
||
function pp_nln_nlf(d,v)
|
||
{if(852405675 <= v[1])
|
||
{var u=v[2],match=caml_call1(Stdlib_uchar[10],u),switch$0=0;
|
||
if(14 <= match)
|
||
{if(8232 <= match)
|
||
{if(! (8234 <= match))switch$0 = 1}
|
||
else
|
||
if(133 === match)
|
||
{cr(d,0);ncount(d);nline(d);return [0,852405675,d[4]]}}
|
||
else
|
||
if(10 <= match)
|
||
{var switcher=match - 10 | 0;
|
||
switch(switcher)
|
||
{case 0:
|
||
var last_cr=d[12];
|
||
cr(d,0);
|
||
return last_cr
|
||
?caml_call1(d[18],d)
|
||
:(ncount(d),nline(d),[0,852405675,d[4]]);
|
||
case 1:break;
|
||
case 2:switch$0 = 1;break;
|
||
default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]}}
|
||
return switch$0
|
||
?(cr(d,0),ncount(d),nline(d),v)
|
||
:(cr(d,0),ncount(d),ncol(d),v)}
|
||
cr(d,0);
|
||
ncount(d);
|
||
ncol(d);
|
||
return v}
|
||
function pp_nln_ascii(d,v)
|
||
{if(852405675 <= v[1])
|
||
{var
|
||
u=v[2],
|
||
match=caml_call1(Stdlib_uchar[10],u),
|
||
_Z_=match - 133 | 0,
|
||
switch$0=0;
|
||
if(8100 < _Z_ >>> 0)
|
||
{var switcher=_Z_ + 123 | 0;
|
||
if(! (3 < switcher >>> 0))
|
||
switch(switcher)
|
||
{case 0:
|
||
var last_cr=d[12];
|
||
cr(d,0);
|
||
return last_cr
|
||
?caml_call1(d[18],d)
|
||
:(ncount(d),nline(d),[0,852405675,d[4]]);
|
||
case 1:break;
|
||
case 2:switch$0 = 1;break;
|
||
default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]}}
|
||
else
|
||
if(8097 < (_Z_ - 1 | 0) >>> 0)switch$0 = 1;
|
||
return switch$0
|
||
?(cr(d,0),ncount(d),nline(d),v)
|
||
:(cr(d,0),ncount(d),ncol(d),v)}
|
||
cr(d,0);
|
||
ncount(d);
|
||
ncol(d);
|
||
return v}
|
||
function decode_fun(param)
|
||
{return 143365725 <= param
|
||
?423112016 <= param
|
||
?684370880 <= param?decode_utf_8:decode_us_ascii
|
||
:338302576 <= param?decode_iso_8859_1:decode_utf_16be
|
||
:-211555818 <= param?decode_utf_16:decode_utf_16be}
|
||
function decoder(nln,encoding,src)
|
||
{if(nln)
|
||
{var _X_=nln[1],_Y_=_X_[1];
|
||
if(3895880 === _Y_)
|
||
var nl=_X_[2],nl$0=nl,pp$0=pp_nln_nlf;
|
||
else
|
||
if(605782321 <= _Y_)
|
||
var nl$1=_X_[2],nl$0=nl$1,pp$0=pp_nln_ascii;
|
||
else
|
||
var nl$2=_X_[2],nl$0=nl$2,pp$0=pp_nln_readline}
|
||
else
|
||
var nl$3=caml_call1(Stdlib_uchar[9],10),nl$0=nl$3,pp$0=pp;
|
||
if(encoding)
|
||
var e=encoding[1],k$0=decode_fun(e),encoding$0=e;
|
||
else
|
||
var k$0=k,encoding$0=684370880;
|
||
if(typeof src === "number")
|
||
var i_max=0,i_pos=1,i=Stdlib_bytes[3];
|
||
else
|
||
if(438511779 <= src[1])
|
||
var i_max=0,i_pos=1,i=caml_create_bytes(65536);
|
||
else
|
||
var
|
||
s=src[2],
|
||
i_max$0=caml_ml_string_length(s) - 1 | 0,
|
||
i$0=caml_call1(Stdlib_bytes[43],s),
|
||
i_max=i_max$0,
|
||
i_pos=0,
|
||
i=i$0;
|
||
var utf16=143365725 === encoding$0?1:0;
|
||
return [0,
|
||
src,
|
||
encoding$0,
|
||
nln,
|
||
nl$0,
|
||
i,
|
||
i_pos,
|
||
i_max,
|
||
caml_create_bytes(4),
|
||
0,
|
||
0,
|
||
0,
|
||
0,
|
||
1,
|
||
0,
|
||
0,
|
||
0,
|
||
function(d,v)
|
||
{if(852405675 <= v[1])
|
||
{var u=v[2],match=caml_call1(Stdlib_uchar[10],u);
|
||
if(65279 === match)
|
||
{if(utf16){d[2] = -211558048;d[18] = decode_utf_16be}
|
||
d[11] = 1;
|
||
d[17] = pp$0;
|
||
return caml_call1(d[18],d)}
|
||
if(65534 === match && utf16)
|
||
{d[2] = -211555818;
|
||
d[18] = decode_utf_16;
|
||
d[11] = 1;
|
||
d[17] = pp$0;
|
||
return caml_call1(d[18],d)}
|
||
d[11] = 0;
|
||
d[17] = pp$0;
|
||
return caml_call2(d[17],d,v)}
|
||
d[11] = 0;
|
||
d[17] = pp$0;
|
||
return caml_call2(d[17],d,v)},
|
||
k$0]}
|
||
function decode(d){return caml_call1(d[18],d)}
|
||
function decoder_line(d){return d[13]}
|
||
function decoder_col(d){return d[14]}
|
||
function decoder_byte_count(d){return d[15]}
|
||
function decoder_count(d){return d[16]}
|
||
function decoder_removed_bom(d){return d[11]}
|
||
function decoder_src(d){return d[1]}
|
||
function decoder_nln(d){return d[3]}
|
||
function decoder_encoding(d){return d[2]}
|
||
function set_decoder_encoding(d,e)
|
||
{d[2] = e;d[18] = decode_fun(e);return 0}
|
||
function o_rem(e){return (e[5] - e[4] | 0) + 1 | 0}
|
||
function dst(e,s,j,l)
|
||
{var _U_=j < 0?1:0;
|
||
if(_U_)
|
||
var _V_=_U_;
|
||
else
|
||
var
|
||
_W_=l < 0?1:0,
|
||
_V_=_W_ || (caml_ml_bytes_length(s) < (j + l | 0)?1:0);
|
||
if(_V_)invalid_bounds(j,l);
|
||
e[3] = s;
|
||
e[4] = j;
|
||
e[5] = (j + l | 0) - 1 | 0;
|
||
return 0}
|
||
function flush(k,e)
|
||
{var _T_=e[1];
|
||
if(typeof _T_ === "number")
|
||
{e[9]
|
||
=
|
||
function(e,param)
|
||
{if(typeof param === "number" && 1006505782 <= param)
|
||
return caml_call1(k,e);
|
||
return caml_call1(Stdlib[1],cst_expected_Await_encode)};
|
||
return 939392865}
|
||
if(438511779 <= _T_[1])
|
||
{var oc=_T_[2];
|
||
caml_call4(Stdlib[68],oc,e[3],0,e[4]);
|
||
e[4] = 0;
|
||
return caml_call1(k,e)}
|
||
var b=_T_[2],o=caml_call1(Stdlib_bytes[42],e[3]);
|
||
caml_call4(Stdlib_buffer[16],b,o,0,e[4]);
|
||
e[4] = 0;
|
||
return caml_call1(k,e)}
|
||
function t_range(e,max){e[7] = 0;e[8] = max;return 0}
|
||
function t_flush(k,e)
|
||
{function blit(e,l)
|
||
{caml_blit_bytes(e[6],e[7],e[3],e[4],l);
|
||
e[4] = e[4] + l | 0;
|
||
e[7] = e[7] + l | 0;
|
||
return 0}
|
||
var rem=o_rem(e),len=(e[8] - e[7] | 0) + 1 | 0;
|
||
return rem < len
|
||
?(blit(e,rem),flush(function(_S_){return t_flush(k,_S_)},e))
|
||
:(blit(e,len),caml_call1(k,e))}
|
||
function encode_utf_8(e,v)
|
||
{function k(e){e[9] = encode_utf_8;return 17724}
|
||
if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e);
|
||
var u=v[2],u$0=caml_call1(Stdlib_uchar[10],u),rem=o_rem(e);
|
||
if(127 < u$0)
|
||
{if(2047 < u$0)
|
||
{if(65535 < u$0)
|
||
{if(4 <= rem)
|
||
{var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]}
|
||
else
|
||
{t_range(e,3);
|
||
var
|
||
_M_=function(_R_){return t_flush(k,_R_)},
|
||
k$0=_M_,
|
||
j$0=0,
|
||
s=e[6]}
|
||
unsafe_set_byte(s,j$0,240 | u$0 >>> 18 | 0);
|
||
unsafe_set_byte(s,j$0 + 1 | 0,128 | (u$0 >>> 12 | 0) & 63);
|
||
unsafe_set_byte(s,j$0 + 2 | 0,128 | (u$0 >>> 6 | 0) & 63);
|
||
unsafe_set_byte(s,j$0 + 3 | 0,128 | u$0 & 63);
|
||
return k$0(e)}
|
||
if(3 <= rem)
|
||
{var j$1=e[4];e[4] = e[4] + 3 | 0;var k$1=k,j$2=j$1,s$0=e[3]}
|
||
else
|
||
{t_range(e,2);
|
||
var
|
||
_N_=function(_Q_){return t_flush(k,_Q_)},
|
||
k$1=_N_,
|
||
j$2=0,
|
||
s$0=e[6]}
|
||
unsafe_set_byte(s$0,j$2,224 | u$0 >>> 12 | 0);
|
||
unsafe_set_byte(s$0,j$2 + 1 | 0,128 | (u$0 >>> 6 | 0) & 63);
|
||
unsafe_set_byte(s$0,j$2 + 2 | 0,128 | u$0 & 63);
|
||
return k$1(e)}
|
||
if(2 <= rem)
|
||
{var j$3=e[4];e[4] = e[4] + 2 | 0;var k$2=k,j$4=j$3,s$1=e[3]}
|
||
else
|
||
{t_range(e,1);
|
||
var _O_=function(_P_){return t_flush(k,_P_)},k$2=_O_,j$4=0,s$1=e[6]}
|
||
unsafe_set_byte(s$1,j$4,192 | u$0 >>> 6 | 0);
|
||
unsafe_set_byte(s$1,j$4 + 1 | 0,128 | u$0 & 63);
|
||
return k$2(e)}
|
||
return 1 <= rem
|
||
?(unsafe_set_byte(e[3],e[4],u$0),e[4] = e[4] + 1 | 0,k(e))
|
||
:flush(function(e){return encode_utf_8(e,v)},e)}
|
||
function encode_utf_16be(e,v)
|
||
{function k(e){e[9] = encode_utf_16be;return 17724}
|
||
if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e);
|
||
var u=v[2],u$0=caml_call1(Stdlib_uchar[10],u),rem=o_rem(e);
|
||
if(65536 <= u$0)
|
||
{if(4 <= rem)
|
||
{var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]}
|
||
else
|
||
{t_range(e,3);
|
||
var _I_=function(_L_){return t_flush(k,_L_)},k$0=_I_,j$0=0,s=e[6]}
|
||
var
|
||
u$1=u$0 - 65536 | 0,
|
||
hi=55296 | u$1 >>> 10 | 0,
|
||
lo=56320 | u$1 & 1023;
|
||
unsafe_set_byte(s,j$0,hi >>> 8 | 0);
|
||
unsafe_set_byte(s,j$0 + 1 | 0,hi & 255);
|
||
unsafe_set_byte(s,j$0 + 2 | 0,lo >>> 8 | 0);
|
||
unsafe_set_byte(s,j$0 + 3 | 0,lo & 255);
|
||
return k$0(e)}
|
||
if(2 <= rem)
|
||
{var j$1=e[4];e[4] = e[4] + 2 | 0;var k$1=k,j$2=j$1,s$0=e[3]}
|
||
else
|
||
{t_range(e,1);
|
||
var _J_=function(_K_){return t_flush(k,_K_)},k$1=_J_,j$2=0,s$0=e[6]}
|
||
unsafe_set_byte(s$0,j$2,u$0 >>> 8 | 0);
|
||
unsafe_set_byte(s$0,j$2 + 1 | 0,u$0 & 255);
|
||
return k$1(e)}
|
||
function encode_utf_16le(e,v)
|
||
{function k(e){e[9] = encode_utf_16le;return 17724}
|
||
if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e);
|
||
var u=v[2],u$0=caml_call1(Stdlib_uchar[10],u),rem=o_rem(e);
|
||
if(65536 <= u$0)
|
||
{if(4 <= rem)
|
||
{var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]}
|
||
else
|
||
{t_range(e,3);
|
||
var _E_=function(_H_){return t_flush(k,_H_)},k$0=_E_,j$0=0,s=e[6]}
|
||
var
|
||
u$1=u$0 - 65536 | 0,
|
||
hi=55296 | u$1 >>> 10 | 0,
|
||
lo=56320 | u$1 & 1023;
|
||
unsafe_set_byte(s,j$0,hi & 255);
|
||
unsafe_set_byte(s,j$0 + 1 | 0,hi >>> 8 | 0);
|
||
unsafe_set_byte(s,j$0 + 2 | 0,lo & 255);
|
||
unsafe_set_byte(s,j$0 + 3 | 0,lo >>> 8 | 0);
|
||
return k$0(e)}
|
||
if(2 <= rem)
|
||
{var j$1=e[4];e[4] = e[4] + 2 | 0;var k$1=k,j$2=j$1,s$0=e[3]}
|
||
else
|
||
{t_range(e,1);
|
||
var _F_=function(_G_){return t_flush(k,_G_)},k$1=_F_,j$2=0,s$0=e[6]}
|
||
unsafe_set_byte(s$0,j$2,u$0 & 255);
|
||
unsafe_set_byte(s$0,j$2 + 1 | 0,u$0 >>> 8 | 0);
|
||
return k$1(e)}
|
||
function encoder(encoding,dst)
|
||
{if(typeof dst === "number")
|
||
var o_max=0,o_pos=1,o=Stdlib_bytes[3];
|
||
else
|
||
var o$0=caml_create_bytes(65536),o_max=65535,o_pos=0,o=o$0;
|
||
var
|
||
_D_=
|
||
143365725 <= encoding
|
||
?684370880 <= encoding?encode_utf_8:encode_utf_16be
|
||
:-211555818 <= encoding?encode_utf_16le:encode_utf_16be;
|
||
return [0,dst,encoding,o,o_pos,o_max,caml_create_bytes(4),1,0,_D_]}
|
||
function encode(e,v){return caml_call2(e[9],e,v)}
|
||
function encoder_encoding(e){return e[2]}
|
||
function encoder_dst(e){return e[1]}
|
||
var Manual=[0,src,dst,o_rem];
|
||
function encoding_guess(s)
|
||
{var
|
||
s$0=caml_call1(Stdlib_bytes[43],s),
|
||
match=
|
||
r_encoding(s$0,0,caml_call2(Stdlib[17],caml_ml_bytes_length(s$0),3)),
|
||
_C_=match[1];
|
||
if(-211555818 === _C_)
|
||
{var d=match[2];return [0,-211555818,3299808 === d?1:0]}
|
||
if(684370880 <= _C_)
|
||
{var d$0=match[2];return [0,684370880,3299808 === d$0?1:0]}
|
||
var d$1=match[2];
|
||
return [0,-211558048,3299808 === d$1?1:0]}
|
||
function fold_utf_8(opt,len,f,acc,s)
|
||
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
|
||
if(len)
|
||
var l=len[1],len$0=l;
|
||
else
|
||
var len$0=caml_ml_string_length(s) - pos | 0;
|
||
var
|
||
last=(pos + len$0 | 0) - 1 | 0,
|
||
s$0=caml_call1(Stdlib_bytes[43],s),
|
||
acc$0=acc,
|
||
i=pos;
|
||
for(;;)
|
||
{if(last < i)return acc$0;
|
||
var need=utf_8_len[1 + caml_bytes_unsafe_get(s$0,i)];
|
||
if(0 === need)
|
||
{var
|
||
i$0=i + 1 | 0,
|
||
acc$1=caml_call3(f,acc$0,i,malformed(s$0,i,1)),
|
||
acc$0=acc$1,
|
||
i=i$0;
|
||
continue}
|
||
var rem=(last - i | 0) + 1 | 0;
|
||
if(rem < need)return caml_call3(f,acc$0,i,malformed(s$0,i,rem));
|
||
var
|
||
i$1=i + need | 0,
|
||
acc$2=caml_call3(f,acc$0,i,r_utf_8(s$0,i,need)),
|
||
acc$0=acc$2,
|
||
i=i$1;
|
||
continue}}
|
||
function fold_utf_16be(opt,len,f,acc,s)
|
||
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
|
||
if(len)
|
||
var l=len[1],len$0=l;
|
||
else
|
||
var len$0=caml_ml_string_length(s) - pos | 0;
|
||
var
|
||
last=(pos + len$0 | 0) - 1 | 0,
|
||
s$0=caml_call1(Stdlib_bytes[43],s),
|
||
acc$0=acc,
|
||
i=pos;
|
||
for(;;)
|
||
{if(last < i)return acc$0;
|
||
var rem=(last - i | 0) + 1 | 0;
|
||
if(2 <= rem)
|
||
{var v=r_utf_16(s$0,i,i + 1 | 0);
|
||
if(659980059 <= v[1])
|
||
{var i$0=i + 2 | 0,acc$1=caml_call3(f,acc$0,i,v),acc$0=acc$1,i=i$0;
|
||
continue}
|
||
var hi=v[2];
|
||
if(4 <= rem)
|
||
{var
|
||
i$1=i + 4 | 0,
|
||
acc$2=
|
||
caml_call3(f,acc$0,i,r_utf_16_lo(hi,s$0,i + 2 | 0,i + 3 | 0)),
|
||
acc$0=acc$2,
|
||
i=i$1;
|
||
continue}
|
||
return caml_call3(f,acc$0,i,malformed(s$0,i,rem))}
|
||
return caml_call3(f,acc$0,i,malformed(s$0,i,1))}}
|
||
function fold_utf_16le(opt,len,f,acc,s)
|
||
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
|
||
if(len)
|
||
var l=len[1],len$0=l;
|
||
else
|
||
var len$0=caml_ml_string_length(s) - pos | 0;
|
||
var
|
||
last=(pos + len$0 | 0) - 1 | 0,
|
||
s$0=caml_call1(Stdlib_bytes[43],s),
|
||
acc$0=acc,
|
||
i=pos;
|
||
for(;;)
|
||
{if(last < i)return acc$0;
|
||
var rem=(last - i | 0) + 1 | 0;
|
||
if(2 <= rem)
|
||
{var v=r_utf_16(s$0,i + 1 | 0,i);
|
||
if(659980059 <= v[1])
|
||
{var i$0=i + 2 | 0,acc$1=caml_call3(f,acc$0,i,v),acc$0=acc$1,i=i$0;
|
||
continue}
|
||
var hi=v[2];
|
||
if(4 <= rem)
|
||
{var
|
||
i$1=i + 4 | 0,
|
||
acc$2=
|
||
caml_call3(f,acc$0,i,r_utf_16_lo(hi,s$0,i + 3 | 0,i + 2 | 0)),
|
||
acc$0=acc$2,
|
||
i=i$1;
|
||
continue}
|
||
return caml_call3(f,acc$0,i,malformed(s$0,i,rem))}
|
||
return caml_call3(f,acc$0,i,malformed(s$0,i,1))}}
|
||
var String=[0,encoding_guess,fold_utf_8,fold_utf_16be,fold_utf_16le];
|
||
function add_utf_8(b,u)
|
||
{var u$0=caml_call1(Stdlib_uchar[10],u);
|
||
function w(byte$0){return caml_call2(Stdlib_buffer[10],b,byte$0)}
|
||
return 127 < u$0
|
||
?2047 < u$0
|
||
?65535 < u$0
|
||
?(w(240 | u$0 >>> 18 | 0),
|
||
w(128 | (u$0 >>> 12 | 0) & 63),
|
||
w(128 | (u$0 >>> 6 | 0) & 63),
|
||
w(128 | u$0 & 63))
|
||
:(w(224 | u$0 >>> 12 | 0),
|
||
w(128 | (u$0 >>> 6 | 0) & 63),
|
||
w(128 | u$0 & 63))
|
||
:(w(192 | u$0 >>> 6 | 0),w(128 | u$0 & 63))
|
||
:w(u$0)}
|
||
function add_utf_16be(b,u)
|
||
{var u$0=caml_call1(Stdlib_uchar[10],u);
|
||
function w(byte$0){return caml_call2(Stdlib_buffer[10],b,byte$0)}
|
||
if(65536 <= u$0)
|
||
{var
|
||
u$1=u$0 - 65536 | 0,
|
||
hi=55296 | u$1 >>> 10 | 0,
|
||
lo=56320 | u$1 & 1023;
|
||
w(hi >>> 8 | 0);
|
||
w(hi & 255);
|
||
w(lo >>> 8 | 0);
|
||
return w(lo & 255)}
|
||
w(u$0 >>> 8 | 0);
|
||
return w(u$0 & 255)}
|
||
function add_utf_16le(b,u)
|
||
{var u$0=caml_call1(Stdlib_uchar[10],u);
|
||
function w(byte$0){return caml_call2(Stdlib_buffer[10],b,byte$0)}
|
||
if(65536 <= u$0)
|
||
{var
|
||
u$1=u$0 - 65536 | 0,
|
||
hi=55296 | u$1 >>> 10 | 0,
|
||
lo=56320 | u$1 & 1023;
|
||
w(hi & 255);
|
||
w(hi >>> 8 | 0);
|
||
w(lo & 255);
|
||
return w(lo >>> 8 | 0)}
|
||
w(u$0 & 255);
|
||
return w(u$0 >>> 8 | 0)}
|
||
var
|
||
Buffer=[0,add_utf_8,add_utf_16be,add_utf_16le],
|
||
Uutf=
|
||
[0,
|
||
u_bom,
|
||
u_rep,
|
||
encoding_of_string,
|
||
encoding_to_string,
|
||
decoder,
|
||
decode,
|
||
decoder_encoding,
|
||
set_decoder_encoding,
|
||
decoder_line,
|
||
decoder_col,
|
||
decoder_byte_count,
|
||
decoder_count,
|
||
decoder_removed_bom,
|
||
decoder_src,
|
||
decoder_nln,
|
||
pp_decode,
|
||
encoder,
|
||
encode,
|
||
encoder_encoding,
|
||
encoder_dst,
|
||
Manual,
|
||
String,
|
||
Buffer];
|
||
runtime.caml_register_global(66,Uutf,"Uutf");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# 1 "../.js/re/re.cma.js"
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
var
|
||
runtime=joo_global_object.jsoo_runtime,
|
||
caml_bytes_get=runtime.caml_bytes_get,
|
||
caml_bytes_set=runtime.caml_bytes_set,
|
||
caml_bytes_unsafe_set=runtime.caml_bytes_unsafe_set,
|
||
caml_check_bound=runtime.caml_check_bound,
|
||
caml_compare=runtime.caml_compare,
|
||
caml_create_bytes=runtime.caml_create_bytes,
|
||
caml_equal=runtime.caml_equal,
|
||
caml_fresh_oo_id=runtime.caml_fresh_oo_id,
|
||
caml_int_compare=runtime.caml_int_compare,
|
||
caml_lessthan=runtime.caml_lessthan,
|
||
caml_list_of_js_array=runtime.caml_list_of_js_array,
|
||
caml_make_vect=runtime.caml_make_vect,
|
||
caml_ml_string_length=runtime.caml_ml_string_length,
|
||
caml_obj_tag=runtime.caml_obj_tag,
|
||
caml_register_global=runtime.caml_register_global,
|
||
caml_string_get=runtime.caml_string_get,
|
||
caml_string_notequal=runtime.caml_string_notequal,
|
||
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
|
||
caml_trampoline=runtime.caml_trampoline,
|
||
caml_trampoline_return=runtime.caml_trampoline_return,
|
||
caml_wrap_exception=runtime.caml_wrap_exception;
|
||
function caml_call1(f,a0)
|
||
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
|
||
function caml_call2(f,a0,a1)
|
||
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
|
||
function caml_call3(f,a0,a1,a2)
|
||
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
|
||
function caml_call4(f,a0,a1,a2,a3)
|
||
{return f.length == 4
|
||
?f(a0,a1,a2,a3)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
|
||
function caml_call5(f,a0,a1,a2,a3,a4)
|
||
{return f.length == 5
|
||
?f(a0,a1,a2,a3,a4)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
|
||
function caml_call7(f,a0,a1,a2,a3,a4,a5,a6)
|
||
{return f.length == 7
|
||
?f(a0,a1,a2,a3,a4,a5,a6)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])}
|
||
var
|
||
global_data=runtime.caml_get_global_data(),
|
||
cst_Re_cset_pick=caml_string_of_jsbytes("Re_cset.pick"),
|
||
cany=[0,[0,0,255],0],
|
||
cst_eps=caml_string_of_jsbytes("eps"),
|
||
cst_cst=caml_string_of_jsbytes("cst"),
|
||
cst_alt=caml_string_of_jsbytes("alt"),
|
||
cst_seq=caml_string_of_jsbytes("seq"),
|
||
cst_rep=caml_string_of_jsbytes("rep"),
|
||
cst_mark=caml_string_of_jsbytes("mark"),
|
||
cst_erase=caml_string_of_jsbytes("erase"),
|
||
cst_before=caml_string_of_jsbytes("before"),
|
||
cst_after=caml_string_of_jsbytes("after"),
|
||
cst_pmark=caml_string_of_jsbytes("pmark"),
|
||
cst_Non_greedy=caml_string_of_jsbytes("Non_greedy"),
|
||
cst_Greedy=caml_string_of_jsbytes("Greedy"),
|
||
cst_first=caml_string_of_jsbytes("first"),
|
||
cst_short=caml_string_of_jsbytes("short"),
|
||
cst_long=caml_string_of_jsbytes("long"),
|
||
eps_expr=[0,0,0],
|
||
cst_Group=caml_string_of_jsbytes("Group"),
|
||
dummy_offset=[0,-1,-1],
|
||
dummy_string=caml_string_of_jsbytes(""),
|
||
cst_Beg_of_line=caml_string_of_jsbytes("Beg_of_line"),
|
||
cst_End_of_line=caml_string_of_jsbytes("End_of_line"),
|
||
cst_Beg_of_word=caml_string_of_jsbytes("Beg_of_word"),
|
||
cst_End_of_word=caml_string_of_jsbytes("End_of_word"),
|
||
cst_Not_bound=caml_string_of_jsbytes("Not_bound"),
|
||
cst_Beg_of_str=caml_string_of_jsbytes("Beg_of_str"),
|
||
cst_End_of_str=caml_string_of_jsbytes("End_of_str"),
|
||
cst_Last_end_of_line=caml_string_of_jsbytes("Last_end_of_line"),
|
||
cst_Start=caml_string_of_jsbytes("Start"),
|
||
cst_Stop=caml_string_of_jsbytes("Stop"),
|
||
cst_Set=caml_string_of_jsbytes("Set"),
|
||
cst_Sequence=caml_string_of_jsbytes("Sequence"),
|
||
cst_Alternative=caml_string_of_jsbytes("Alternative"),
|
||
cst_Repeat=caml_string_of_jsbytes("Repeat"),
|
||
cst_Sem=caml_string_of_jsbytes("Sem"),
|
||
cst_Sem_greedy=caml_string_of_jsbytes("Sem_greedy"),
|
||
cst_Group$0=caml_string_of_jsbytes("Group"),
|
||
cst_No_group=caml_string_of_jsbytes("No_group"),
|
||
cst_Nest=caml_string_of_jsbytes("Nest"),
|
||
cst_Case=caml_string_of_jsbytes("Case"),
|
||
cst_No_case=caml_string_of_jsbytes("No_case"),
|
||
cst_Intersection=caml_string_of_jsbytes("Intersection"),
|
||
cst_Complement=caml_string_of_jsbytes("Complement"),
|
||
cst_Difference=caml_string_of_jsbytes("Difference"),
|
||
cst_Pmark=caml_string_of_jsbytes("Pmark"),
|
||
cst$1=caml_string_of_jsbytes(""),
|
||
cst$2=caml_string_of_jsbytes(""),
|
||
cst_Re_replace=caml_string_of_jsbytes("Re.replace"),
|
||
cst_Re_replace$0=caml_string_of_jsbytes("Re.replace"),
|
||
cst_Re_split=caml_string_of_jsbytes("Re.split"),
|
||
cst_Re_split$0=caml_string_of_jsbytes("Re.split"),
|
||
cst_Re_all=caml_string_of_jsbytes("Re.all"),
|
||
cst_Re_all$0=caml_string_of_jsbytes("Re.all"),
|
||
cst_Re_exec_partial=caml_string_of_jsbytes("Re.exec_partial"),
|
||
cst_Re_execp=caml_string_of_jsbytes("Re.execp"),
|
||
cst_Re_exec_opt=caml_string_of_jsbytes("Re.exec_opt"),
|
||
cst_Re_exec=caml_string_of_jsbytes("Re.exec"),
|
||
cst_Re_diff=caml_string_of_jsbytes("Re.diff"),
|
||
cst_Re_compl=caml_string_of_jsbytes("Re.compl"),
|
||
cst_Re_inter=caml_string_of_jsbytes("Re.inter"),
|
||
cst_Re_repn=caml_string_of_jsbytes("Re.repn"),
|
||
cst_Re_repn$0=caml_string_of_jsbytes("Re.repn"),
|
||
cst$0=caml_string_of_jsbytes("\t "),
|
||
cst_Re_Emacs_Parse_error=caml_string_of_jsbytes("Re__Emacs.Parse_error"),
|
||
cst_Re_Emacs_Not_supported=
|
||
caml_string_of_jsbytes("Re__Emacs.Not_supported"),
|
||
cst_Str_replace_illegal_backsl=
|
||
caml_string_of_jsbytes("Str.replace: illegal backslash sequence"),
|
||
cst$5=caml_string_of_jsbytes(""),
|
||
cst$4=caml_string_of_jsbytes(""),
|
||
cst$3=caml_string_of_jsbytes(""),
|
||
cst_Str_group_end=caml_string_of_jsbytes("Str.group_end"),
|
||
cst_Str_group_beginning=caml_string_of_jsbytes("Str.group_beginning"),
|
||
beg=[0,caml_string_of_jsbytes(""),0],
|
||
cst_Re_Glob_Parse_error=caml_string_of_jsbytes("Re__Glob.Parse_error"),
|
||
cst$6=caml_string_of_jsbytes(":]"),
|
||
cst_lower=caml_string_of_jsbytes("lower"),
|
||
cst_alnum=caml_string_of_jsbytes("alnum"),
|
||
cst_ascii=caml_string_of_jsbytes("ascii"),
|
||
cst_blank=caml_string_of_jsbytes("blank"),
|
||
cst_cntrl=caml_string_of_jsbytes("cntrl"),
|
||
cst_digit=caml_string_of_jsbytes("digit"),
|
||
cst_graph=caml_string_of_jsbytes("graph"),
|
||
cst_print=caml_string_of_jsbytes("print"),
|
||
cst_punct=caml_string_of_jsbytes("punct"),
|
||
cst_space=caml_string_of_jsbytes("space"),
|
||
cst_upper=caml_string_of_jsbytes("upper"),
|
||
cst_word=caml_string_of_jsbytes("word"),
|
||
cst_xdigit=caml_string_of_jsbytes("xdigit"),
|
||
cst_Invalid_pcre_class=caml_string_of_jsbytes("Invalid pcre class: "),
|
||
cst_Re_Perl_Parse_error=caml_string_of_jsbytes("Re__Perl.Parse_error"),
|
||
cst_Re_Perl_Not_supported=
|
||
caml_string_of_jsbytes("Re__Perl.Not_supported"),
|
||
posix_class_strings=
|
||
caml_list_of_js_array
|
||
([caml_string_of_jsbytes("alnum"),
|
||
caml_string_of_jsbytes("ascii"),
|
||
caml_string_of_jsbytes("blank"),
|
||
caml_string_of_jsbytes("cntrl"),
|
||
caml_string_of_jsbytes("digit"),
|
||
caml_string_of_jsbytes("lower"),
|
||
caml_string_of_jsbytes("print"),
|
||
caml_string_of_jsbytes("space"),
|
||
caml_string_of_jsbytes("upper"),
|
||
caml_string_of_jsbytes("word"),
|
||
caml_string_of_jsbytes("punct"),
|
||
caml_string_of_jsbytes("graph"),
|
||
caml_string_of_jsbytes("xdigit")]),
|
||
cst_Re_Posix_Parse_error=caml_string_of_jsbytes("Re__Posix.Parse_error"),
|
||
cst_Re_Posix_Not_supported=
|
||
caml_string_of_jsbytes("Re__Posix.Not_supported"),
|
||
include=global_data.Stdlib__format,
|
||
Stdlib_buffer=global_data.Stdlib__buffer,
|
||
Stdlib=global_data.Stdlib,
|
||
Assert_failure=global_data.Assert_failure,
|
||
Stdlib_list=global_data.Stdlib__list,
|
||
Stdlib_map=global_data.Stdlib__map,
|
||
Stdlib_set=global_data.Stdlib__set,
|
||
Stdlib_array=global_data.Stdlib__array,
|
||
Stdlib_hashtbl=global_data.Stdlib__hashtbl,
|
||
Stdlib_char=global_data.Stdlib__char,
|
||
Stdlib_bytes=global_data.Stdlib__bytes,
|
||
Stdlib_string=global_data.Stdlib__string,
|
||
Stdlib_seq=global_data.Stdlib__seq,
|
||
CamlinternalLazy=global_data.CamlinternalLazy,
|
||
Re=[0];
|
||
caml_register_global(134,Re,"Re__");
|
||
var
|
||
_bG_=
|
||
[0,
|
||
[12,59,[17,[0,caml_string_of_jsbytes("@ "),1,0],0]],
|
||
caml_string_of_jsbytes(";@ ")],
|
||
_bH_=
|
||
[0,
|
||
[18,
|
||
[1,
|
||
[0,
|
||
[11,caml_string_of_jsbytes("<3>"),0],
|
||
caml_string_of_jsbytes("<3>")]],
|
||
[12,
|
||
91,
|
||
[17,
|
||
[0,caml_string_of_jsbytes("@ "),1,0],
|
||
[15,[17,[0,caml_string_of_jsbytes("@ "),1,0],[12,93,[17,0,0]]]]]]],
|
||
caml_string_of_jsbytes("@[<3>[@ %a@ ]@]")],
|
||
_bF_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
|
||
_bE_=
|
||
[0,
|
||
[17,[0,caml_string_of_jsbytes("@ "),1,0],[4,0,0,0,0]],
|
||
caml_string_of_jsbytes("@ %d")],
|
||
_bD_=
|
||
[0,
|
||
[18,
|
||
[1,
|
||
[0,
|
||
[11,caml_string_of_jsbytes("<3>"),0],
|
||
caml_string_of_jsbytes("<3>")]],
|
||
[12,
|
||
40,
|
||
[2,0,[17,[0,caml_string_of_jsbytes("@ "),1,0],[15,[12,41,[17,0,0]]]]]]],
|
||
caml_string_of_jsbytes("@[<3>(%s@ %a)@]")],
|
||
_bL_=[0,caml_string_of_jsbytes("lib/cset.ml"),153,9],
|
||
_bI_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")],
|
||
_bJ_=[0,[4,0,0,0,[12,45,[4,0,0,0,0]]],caml_string_of_jsbytes("%d-%d")],
|
||
_bZ_=[0,caml_string_of_jsbytes("lib/automata.ml"),360,21],
|
||
_bQ_=
|
||
[0,
|
||
[18,
|
||
[1,
|
||
[0,
|
||
[11,caml_string_of_jsbytes("<2>"),0],
|
||
caml_string_of_jsbytes("<2>")]],
|
||
[11,
|
||
caml_string_of_jsbytes("(Seq"),
|
||
[17,[0,caml_string_of_jsbytes("@ "),1,0],0]]],
|
||
caml_string_of_jsbytes("@[<2>(Seq@ ")],
|
||
_bR_=[0,[12,32,[15,[12,41,[17,0,0]]]],caml_string_of_jsbytes(" %a)@]")],
|
||
_bS_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("(Exp "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(" ("),
|
||
[15,[11,caml_string_of_jsbytes(") (eps))"),0]]]]],
|
||
caml_string_of_jsbytes("(Exp %d (%a) (eps))")],
|
||
_bT_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("(Exp "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(" ("),
|
||
[15,[11,caml_string_of_jsbytes(") "),[15,[12,41,0]]]]]]],
|
||
caml_string_of_jsbytes("(Exp %d (%a) %a)")],
|
||
_bU_=
|
||
[0,
|
||
[18,
|
||
[1,
|
||
[0,
|
||
[11,caml_string_of_jsbytes("<2>"),0],
|
||
caml_string_of_jsbytes("<2>")]],
|
||
[11,
|
||
caml_string_of_jsbytes("(Match"),
|
||
[17,[0,caml_string_of_jsbytes("@ "),1,0],[15,[12,41,[17,0,0]]]]]],
|
||
caml_string_of_jsbytes("@[<2>(Match@ %a)@]")],
|
||
_bV_=
|
||
[0,[11,caml_string_of_jsbytes(" | "),0],caml_string_of_jsbytes(" | ")],
|
||
_bW_=[0,[11,caml_string_of_jsbytes("()"),0],caml_string_of_jsbytes("()")],
|
||
_bX_=[0,0,0],
|
||
_bP_=[1,0],
|
||
_bO_=
|
||
[0,
|
||
[12,32,[4,0,0,0,[12,45,[4,0,0,0,0]]]],
|
||
caml_string_of_jsbytes(" %d-%d")],
|
||
_bN_=[0,[4,0,0,0,[12,45,[4,0,0,0,0]]],caml_string_of_jsbytes("%d-%d")],
|
||
_b2_=
|
||
[0,
|
||
[18,
|
||
[1,[0,0,caml_string_of_jsbytes("")]],
|
||
[12,
|
||
40,
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(" ("),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,32,[4,0,0,0,[11,caml_string_of_jsbytes("))"),[17,0,0]]]]]]]]],
|
||
caml_string_of_jsbytes("@[(%s (%d %d))@]")],
|
||
_b4_=
|
||
[0,
|
||
[15,[17,[0,caml_string_of_jsbytes("@ "),1,0],[4,0,0,0,[15,0]]]],
|
||
caml_string_of_jsbytes("%a@ %d%a")],
|
||
_b__=[0,caml_string_of_jsbytes("lib/core.ml"),690,4],
|
||
_cv_=[0,caml_string_of_jsbytes("lib/core.ml"),1149,24],
|
||
_cw_=[0,caml_string_of_jsbytes("lib/core.ml"),1160,27],
|
||
_ca_=[0,1],
|
||
_b$_=[0,caml_string_of_jsbytes("lib/core.ml"),723,13],
|
||
_b9_=[0,caml_string_of_jsbytes("lib/core.ml"),493,35],
|
||
_b3_=[0,0,0,0,0,0,0,0,0,0,0],
|
||
_b8_=[0,170,[0,181,[0,186,[0,223,[0,255,0]]]]],
|
||
_cB_=[0,1],
|
||
_cA_=[0,1],
|
||
_cy_=[0,caml_string_of_jsbytes(""),0],
|
||
_cz_=[0,caml_string_of_jsbytes(""),0],
|
||
_cx_=[0,45],
|
||
_cC_=[0,748194550,8],
|
||
_cD_=[0,748194550,10],
|
||
_cE_=[0,748194550,13],
|
||
_cF_=[0,748194550,9],
|
||
_cG_=[0,-1,-1];
|
||
function equal(x,y){return x === y?1:0}
|
||
var compare=caml_int_compare;
|
||
function to_int(x){return x}
|
||
var pp=include[17];
|
||
function intersect(x,y){return 0 !== (x & y)?1:0}
|
||
function symbol(x,y){return x | y}
|
||
var
|
||
dummy=-1,
|
||
inexistant=1,
|
||
letter=2,
|
||
not_letter=4,
|
||
newline=8,
|
||
lastnewline=16,
|
||
search_boundary=32;
|
||
function from_char(param)
|
||
{var switch$0=0;
|
||
if(170 <= param)
|
||
if(187 <= param)
|
||
{var _i$_=param - 192 | 0;
|
||
if(54 < _i$_ >>> 0)
|
||
{if(56 <= _i$_)switch$0 = 1}
|
||
else
|
||
if(23 !== _i$_)switch$0 = 1}
|
||
else
|
||
{var _ja_=param - 171 | 0;
|
||
if(14 < _ja_ >>> 0 || 10 === _ja_)switch$0 = 1}
|
||
else
|
||
if(65 <= param)
|
||
{var _jb_=param - 91 | 0;
|
||
if(5 < _jb_ >>> 0)
|
||
{if(! (32 <= _jb_))switch$0 = 1}
|
||
else
|
||
if(4 === _jb_)switch$0 = 1}
|
||
else
|
||
if(48 <= param)
|
||
{if(! (58 <= param))switch$0 = 1}
|
||
else
|
||
if(10 === param)return 12;
|
||
return switch$0?letter:not_letter}
|
||
var
|
||
Re_Category=
|
||
[0,
|
||
symbol,
|
||
from_char,
|
||
dummy,
|
||
inexistant,
|
||
letter,
|
||
not_letter,
|
||
newline,
|
||
lastnewline,
|
||
search_boundary,
|
||
to_int,
|
||
equal,
|
||
compare,
|
||
intersect,
|
||
pp];
|
||
caml_register_global(136,Re_Category,"Re__Category");
|
||
var
|
||
_m_=include[13],
|
||
_q_=include[17],
|
||
_y_=include[25],
|
||
_A_=include[27],
|
||
_bd_=include[123],
|
||
_a_=include[1],
|
||
_b_=include[2],
|
||
_c_=include[3],
|
||
_d_=include[4],
|
||
_e_=include[5],
|
||
_f_=include[6],
|
||
_g_=include[7],
|
||
_h_=include[8],
|
||
_i_=include[9],
|
||
_j_=include[10],
|
||
_k_=include[11],
|
||
_l_=include[12],
|
||
_n_=include[14],
|
||
_o_=include[15],
|
||
_p_=include[16],
|
||
_r_=include[18],
|
||
_s_=include[19],
|
||
_t_=include[20],
|
||
_u_=include[21],
|
||
_v_=include[22],
|
||
_w_=include[23],
|
||
_x_=include[24],
|
||
_z_=include[26],
|
||
_B_=include[28],
|
||
_C_=include[29],
|
||
_D_=include[30],
|
||
_E_=include[31],
|
||
_F_=include[32],
|
||
_G_=include[33],
|
||
_H_=include[34],
|
||
_I_=include[35],
|
||
_J_=include[36],
|
||
_K_=include[37],
|
||
_L_=include[38],
|
||
_M_=include[39],
|
||
_N_=include[40],
|
||
_O_=include[41],
|
||
_P_=include[42],
|
||
_Q_=include[43],
|
||
_R_=include[44],
|
||
_S_=include[45],
|
||
_T_=include[46],
|
||
_U_=include[47],
|
||
_V_=include[48],
|
||
_W_=include[49],
|
||
_X_=include[50],
|
||
_Y_=include[51],
|
||
_Z_=include[52],
|
||
___=include[53],
|
||
_$_=include[54],
|
||
_aa_=include[55],
|
||
_ab_=include[56],
|
||
_ac_=include[57],
|
||
_ad_=include[58],
|
||
_ae_=include[59],
|
||
_af_=include[60],
|
||
_ag_=include[61],
|
||
_ah_=include[62],
|
||
_ai_=include[63],
|
||
_aj_=include[64],
|
||
_ak_=include[65],
|
||
_al_=include[66],
|
||
_am_=include[67],
|
||
_an_=include[68],
|
||
_ao_=include[69],
|
||
_ap_=include[70],
|
||
_aq_=include[71],
|
||
_ar_=include[72],
|
||
_as_=include[73],
|
||
_at_=include[74],
|
||
_au_=include[75],
|
||
_av_=include[76],
|
||
_aw_=include[77],
|
||
_ax_=include[78],
|
||
_ay_=include[79],
|
||
_az_=include[80],
|
||
_aA_=include[81],
|
||
_aB_=include[82],
|
||
_aC_=include[83],
|
||
_aD_=include[84],
|
||
_aE_=include[85],
|
||
_aF_=include[86],
|
||
_aG_=include[87],
|
||
_aH_=include[88],
|
||
_aI_=include[89],
|
||
_aJ_=include[90],
|
||
_aK_=include[91],
|
||
_aL_=include[92],
|
||
_aM_=include[93],
|
||
_aN_=include[94],
|
||
_aO_=include[95],
|
||
_aP_=include[96],
|
||
_aQ_=include[97],
|
||
_aR_=include[98],
|
||
_aS_=include[99],
|
||
_aT_=include[100],
|
||
_aU_=include[101],
|
||
_aV_=include[102],
|
||
_aW_=include[103],
|
||
_aX_=include[104],
|
||
_aY_=include[105],
|
||
_aZ_=include[106],
|
||
_a0_=include[107],
|
||
_a1_=include[108],
|
||
_a2_=include[109],
|
||
_a3_=include[110],
|
||
_a4_=include[111],
|
||
_a5_=include[112],
|
||
_a6_=include[113],
|
||
_a7_=include[114],
|
||
_a8_=include[115],
|
||
_a9_=include[116],
|
||
_a__=include[117],
|
||
_a$_=include[118],
|
||
_ba_=include[120],
|
||
_bb_=include[121],
|
||
_bc_=include[122],
|
||
_be_=include[124],
|
||
_bf_=include[125],
|
||
_bg_=include[126],
|
||
_bh_=include[127],
|
||
_bi_=include[128],
|
||
_bj_=include[129],
|
||
_bk_=include[130],
|
||
_bl_=include[131],
|
||
_bm_=include[132],
|
||
_bn_=include[133],
|
||
_bo_=include[134],
|
||
_bp_=include[135],
|
||
_bq_=include[136],
|
||
_br_=include[137],
|
||
_bs_=include[138],
|
||
_bt_=include[139],
|
||
_bu_=include[140],
|
||
_bv_=include[141],
|
||
_bw_=include[142],
|
||
_bx_=include[143],
|
||
_by_=include[144],
|
||
_bz_=include[145],
|
||
_bA_=include[146],
|
||
_bB_=include[147],
|
||
_bC_=include[148];
|
||
function pp_print_list(opt,pp,ppf,param)
|
||
{var opt$0=opt,param$0=param;
|
||
for(;;)
|
||
{if(opt$0)var sth=opt$0[1],pp_sep=sth;else var pp_sep=_A_;
|
||
if(param$0)
|
||
{var _i__=param$0[1];
|
||
if(param$0[2])
|
||
{var vs=param$0[2];
|
||
caml_call2(pp,ppf,_i__);
|
||
caml_call2(pp_sep,ppf,0);
|
||
var opt$1=[0,pp_sep],opt$0=opt$1,param$0=vs;
|
||
continue}
|
||
return caml_call2(pp,ppf,_i__)}
|
||
return 0}}
|
||
function sexp(fmt,s,pp,x){return caml_call5(_bd_,fmt,_bD_,s,pp,x)}
|
||
function pair(pp1,pp2,fmt,param)
|
||
{var v2=param[2],v1=param[1];
|
||
caml_call2(pp1,fmt,v1);
|
||
caml_call2(_y_,fmt,0);
|
||
return caml_call2(pp2,fmt,v2)}
|
||
function triple(pp1,pp2,pp3,fmt,param)
|
||
{var v3=param[3],v2=param[2],v1=param[1];
|
||
caml_call2(pp1,fmt,v1);
|
||
caml_call2(_y_,fmt,0);
|
||
caml_call2(pp2,fmt,v2);
|
||
caml_call2(_y_,fmt,0);
|
||
return caml_call2(pp3,fmt,v3)}
|
||
function optint(fmt,param)
|
||
{if(param){var i=param[1];return caml_call3(_bd_,fmt,_bE_,i)}return 0}
|
||
function quote(fmt,s){return caml_call3(include[123],fmt,_bF_,s)}
|
||
function pp_olist(pp_elem,fmt)
|
||
{var _i6_=[0,function(fmt,param){return caml_call2(_bd_,fmt,_bG_)}];
|
||
function _i7_(_i8_,_i9_){return pp_print_list(_i6_,pp_elem,_i8_,_i9_)}
|
||
return caml_call3(include[123],fmt,_bH_,_i7_)}
|
||
function pp_str_list(_i5_){return pp_olist(quote,_i5_)}
|
||
function to_to_string(pp,x)
|
||
{var b=caml_call1(Stdlib_buffer[1],16),fmt=caml_call1(include[107],b);
|
||
caml_call2(pp,fmt,x);
|
||
return caml_call1(Stdlib_buffer[2],b)}
|
||
var
|
||
Re_Fmt=
|
||
[0,
|
||
_a_,
|
||
_b_,
|
||
_c_,
|
||
_d_,
|
||
_e_,
|
||
_f_,
|
||
_g_,
|
||
_h_,
|
||
_i_,
|
||
_j_,
|
||
_k_,
|
||
_l_,
|
||
_m_,
|
||
_n_,
|
||
_o_,
|
||
_p_,
|
||
_q_,
|
||
_r_,
|
||
_s_,
|
||
_t_,
|
||
_u_,
|
||
_v_,
|
||
_w_,
|
||
_x_,
|
||
_y_,
|
||
_z_,
|
||
_A_,
|
||
_B_,
|
||
_C_,
|
||
_D_,
|
||
_E_,
|
||
_F_,
|
||
_G_,
|
||
_H_,
|
||
_I_,
|
||
_J_,
|
||
_K_,
|
||
_L_,
|
||
_M_,
|
||
_N_,
|
||
_O_,
|
||
_P_,
|
||
_Q_,
|
||
_R_,
|
||
_S_,
|
||
_T_,
|
||
_U_,
|
||
_V_,
|
||
_W_,
|
||
_X_,
|
||
_Y_,
|
||
_Z_,
|
||
___,
|
||
_$_,
|
||
_aa_,
|
||
_ab_,
|
||
_ac_,
|
||
_ad_,
|
||
_ae_,
|
||
_af_,
|
||
_ag_,
|
||
_ah_,
|
||
_ai_,
|
||
_aj_,
|
||
_ak_,
|
||
_al_,
|
||
_am_,
|
||
_an_,
|
||
_ao_,
|
||
_ap_,
|
||
_aq_,
|
||
_ar_,
|
||
_as_,
|
||
_at_,
|
||
_au_,
|
||
_av_,
|
||
_aw_,
|
||
_ax_,
|
||
_ay_,
|
||
_az_,
|
||
_aA_,
|
||
_aB_,
|
||
_aC_,
|
||
_aD_,
|
||
_aE_,
|
||
_aF_,
|
||
_aG_,
|
||
_aH_,
|
||
_aI_,
|
||
_aJ_,
|
||
_aK_,
|
||
_aL_,
|
||
_aM_,
|
||
_aN_,
|
||
_aO_,
|
||
_aP_,
|
||
_aQ_,
|
||
_aR_,
|
||
_aS_,
|
||
_aT_,
|
||
_aU_,
|
||
_aV_,
|
||
_aW_,
|
||
_aX_,
|
||
_aY_,
|
||
_aZ_,
|
||
_a0_,
|
||
_a1_,
|
||
_a2_,
|
||
_a3_,
|
||
_a4_,
|
||
_a5_,
|
||
_a6_,
|
||
_a7_,
|
||
_a8_,
|
||
_a9_,
|
||
_a__,
|
||
_a$_,
|
||
_ba_,
|
||
_bb_,
|
||
_bc_,
|
||
_bd_,
|
||
_be_,
|
||
_bf_,
|
||
_bg_,
|
||
_bh_,
|
||
_bi_,
|
||
_bj_,
|
||
_bk_,
|
||
_bl_,
|
||
_bm_,
|
||
_bn_,
|
||
_bo_,
|
||
_bp_,
|
||
_bq_,
|
||
_br_,
|
||
_bs_,
|
||
_bt_,
|
||
_bu_,
|
||
_bv_,
|
||
_bw_,
|
||
_bx_,
|
||
_by_,
|
||
_bz_,
|
||
_bA_,
|
||
_bB_,
|
||
_bC_,
|
||
pp_print_list,
|
||
pp_print_list,
|
||
_m_,
|
||
sexp,
|
||
pair,
|
||
triple,
|
||
_q_,
|
||
optint,
|
||
quote,
|
||
pp_olist,
|
||
pp_str_list,
|
||
to_to_string];
|
||
caml_register_global(138,Re_Fmt,"Re__Fmt");
|
||
function union(l$0,l)
|
||
{var l$2=l$0,l$1=l;
|
||
for(;;)
|
||
{if(l$1)
|
||
{if(l$2)
|
||
{var
|
||
r=l$1[2],
|
||
_i4_=l$1[1],
|
||
c2=_i4_[2],
|
||
c1=_i4_[1],
|
||
r$0=l$2[2],
|
||
match=l$2[1],
|
||
c2$0=match[2],
|
||
c1$0=match[1];
|
||
if((c2$0 + 1 | 0) < c1)return [0,[0,c1$0,c2$0],union(r$0,l$1)];
|
||
if((c2 + 1 | 0) < c1$0)return [0,[0,c1,c2],union(l$2,r)];
|
||
if(c2$0 < c2)
|
||
{var
|
||
l$3=[0,[0,caml_call2(Stdlib[16],c1$0,c1),c2],r],
|
||
l$2=r$0,
|
||
l$1=l$3;
|
||
continue}
|
||
var
|
||
l$4=[0,[0,caml_call2(Stdlib[16],c1$0,c1),c2$0],r$0],
|
||
l$2=l$4,
|
||
l$1=r;
|
||
continue}
|
||
return l$1}
|
||
return l$2}}
|
||
function inter(l$0,l)
|
||
{var l$2=l$0,l$1=l;
|
||
for(;;)
|
||
{if(l$1)
|
||
{if(l$2)
|
||
{var
|
||
r=l$1[2],
|
||
_i1_=l$1[1],
|
||
c2=_i1_[2],
|
||
c1=_i1_[1],
|
||
r$0=l$2[2],
|
||
match=l$2[1],
|
||
c2$0=match[2],
|
||
c1$0=match[1];
|
||
if(caml_lessthan(c2$0,c1)){var l$2=r$0;continue}
|
||
if(caml_lessthan(c2,c1$0)){var l$1=r;continue}
|
||
if(caml_lessthan(c2$0,c2))
|
||
{var _i2_=inter(r$0,l$1);
|
||
return [0,[0,caml_call2(Stdlib[17],c1$0,c1),c2$0],_i2_]}
|
||
var _i3_=inter(l$2,r);
|
||
return [0,[0,caml_call2(Stdlib[17],c1$0,c1),c2],_i3_]}
|
||
return 0}
|
||
return 0}}
|
||
function diff(l$0,l)
|
||
{var l$2=l$0,l$1=l;
|
||
for(;;)
|
||
{if(l$1)
|
||
{if(l$2)
|
||
{var
|
||
r=l$1[2],
|
||
_i0_=l$1[1],
|
||
c2=_i0_[2],
|
||
c1=_i0_[1],
|
||
r$0=l$2[2],
|
||
match=l$2[1],
|
||
c2$0=match[2],
|
||
c1$0=match[1];
|
||
if(c2$0 < c1)return [0,[0,c1$0,c2$0],diff(r$0,l$1)];
|
||
if(c2 < c1$0){var l$1=r;continue}
|
||
var r$1=c2 < c2$0?[0,[0,c2 + 1 | 0,c2$0],r$0]:r$0;
|
||
if(c1$0 < c1)return [0,[0,c1$0,c1 - 1 | 0],diff(r$1,r)];
|
||
var l$2=r$1,l$1=r;
|
||
continue}
|
||
return 0}
|
||
return l$2}}
|
||
function single(c){return [0,[0,c,c],0]}
|
||
function add(c,l){return union(single(c),l)}
|
||
function seq(c$0,c)
|
||
{return runtime.caml_lessequal(c$0,c)?[0,[0,c$0,c],0]:[0,[0,c,c$0],0]}
|
||
function offset(o,l)
|
||
{if(l)
|
||
{var r=l[2],match=l[1],c2=match[2],c1=match[1];
|
||
return [0,[0,c1 + o | 0,c2 + o | 0],offset(o,r)]}
|
||
return 0}
|
||
var empty=0;
|
||
function mem(c,s)
|
||
{var s$0=s;
|
||
for(;;)
|
||
{if(s$0)
|
||
{var rem=s$0[2],match=s$0[1],c2=match[2],c1=match[1];
|
||
if(c <= c2)return c1 <= c?1:0;
|
||
var s$0=rem;
|
||
continue}
|
||
return 0}}
|
||
function hash_rec(param)
|
||
{if(param)
|
||
{var r=param[2],match=param[1],j=match[2],i=match[1];
|
||
return (i + (13 * j | 0) | 0) + (257 * hash_rec(r) | 0) | 0}
|
||
return 0}
|
||
function hash(l){return hash_rec(l) & 1073741823}
|
||
function print_one(ch,param)
|
||
{var c2=param[2],c1=param[1];
|
||
return c1 === c2
|
||
?caml_call3(include[123],ch,_bI_,c1)
|
||
:caml_call4(include[123],ch,_bJ_,c1,c2)}
|
||
var _bK_=0;
|
||
function pp$0(_iY_,_iZ_){return pp_print_list(_bK_,print_one,_iY_,_iZ_)}
|
||
function iter(t,f)
|
||
{var t$0=t;
|
||
for(;;)
|
||
{if(t$0)
|
||
{var xs=t$0[2],match=t$0[1],y=match[2],x=match[1];
|
||
caml_call2(f,x,y);
|
||
var t$0=xs;
|
||
continue}
|
||
return 0}}
|
||
function one_char(param)
|
||
{if(param && ! param[2])
|
||
{var match=param[1],j=match[2],i=match[1];
|
||
if(caml_equal(i,j))return [0,i]}
|
||
return 0}
|
||
function compare$0(param,_iX_)
|
||
{var v=_iX_[2],j=_iX_[1],u=param[2],i=param[1],c=caml_compare(i,j);
|
||
return 0 === c?caml_compare(u,v):c}
|
||
var CSetMap=caml_call1(Stdlib_map[1],[0,compare$0]);
|
||
function fold_right(t,init,f){return caml_call3(Stdlib_list[23],f,t,init)}
|
||
function csingle(c){return single(c)}
|
||
function is_empty(param){return param?0:1}
|
||
function prepend(s,x,l)
|
||
{var s$0=s;
|
||
for(;;)
|
||
{if(s$0)
|
||
{if(l)
|
||
{var _iS_=l[1],_iT_=_iS_[1];
|
||
if(_iT_ && ! _iT_[2])
|
||
{var
|
||
x$0=_iS_[2],
|
||
_iU_=_iT_[1],
|
||
d=_iU_[2],
|
||
d$0=_iU_[1],
|
||
r=s$0[2],
|
||
match=s$0[1],
|
||
c=match[2],
|
||
c$0=match[1];
|
||
if(c < d$0){var s$0=r;continue}
|
||
var r$0=l[2];
|
||
if(c$0 <= d$0)
|
||
{if(c < d)
|
||
{var _iV_=prepend(r,x,[0,[0,[0,[0,c + 1 | 0,d],0],x$0],r$0]);
|
||
return [0,
|
||
[0,[0,[0,d$0,c],0],caml_call2(Stdlib[37],x,x$0)],
|
||
_iV_]}
|
||
var _iW_=prepend(s$0,x,r$0);
|
||
return [0,
|
||
[0,[0,[0,d$0,d],0],caml_call2(Stdlib[37],x,x$0)],
|
||
_iW_]}
|
||
return d < c$0
|
||
?[0,[0,[0,[0,d$0,d],0],x$0],prepend(s$0,x,r$0)]
|
||
:[0,
|
||
[0,[0,[0,d$0,c$0 - 1 | 0],0],x$0],
|
||
prepend(s$0,x,[0,[0,[0,[0,c$0,d],0],x$0],r$0])]}
|
||
throw [0,Assert_failure,_bL_]}
|
||
return 0}
|
||
return l}}
|
||
function pick(param)
|
||
{if(param){var match=param[1],x=match[1];return x}
|
||
return caml_call1(Stdlib[1],cst_Re_cset_pick)}
|
||
var
|
||
Re_Cset=
|
||
[0,
|
||
iter,
|
||
union,
|
||
inter,
|
||
diff,
|
||
offset,
|
||
empty,
|
||
single,
|
||
seq,
|
||
add,
|
||
mem,
|
||
hash,
|
||
pp$0,
|
||
one_char,
|
||
fold_right,
|
||
hash_rec,
|
||
CSetMap,
|
||
cany,
|
||
csingle,
|
||
is_empty,
|
||
prepend,
|
||
pick];
|
||
caml_register_global(143,Re_Cset,"Re__Cset");
|
||
function equal$0(x,y){return x === y?1:0}
|
||
var compare$1=caml_int_compare,r=[0,0];
|
||
function gen(param){r[1]++;return r[1]}
|
||
var
|
||
pp$1=include[17],
|
||
Set=caml_call1(Stdlib_set[1],[0,compare$1]),
|
||
Re_Pmark=[0,equal$0,compare$1,gen,pp$1,Set];
|
||
caml_register_global(145,Re_Pmark,"Re__Pmark");
|
||
function hash_combine(h,accu){return (accu * 65599 | 0) + h | 0}
|
||
var empty$0=[0,0,Set[1]];
|
||
function merge_marks_offset(old,param)
|
||
{if(param)
|
||
{var
|
||
rem=param[2],
|
||
match=param[1],
|
||
v=match[2],
|
||
i=match[1],
|
||
nw=merge_marks_offset(caml_call2(Stdlib_list[48],i,old),rem);
|
||
return -2 === v?nw:[0,[0,i,v],nw]}
|
||
return old}
|
||
function merge(old,nw)
|
||
{var _iR_=caml_call2(Set[7],old[2],nw[2]);
|
||
return [0,merge_marks_offset(old[1],nw[1]),_iR_]}
|
||
function hash$0(m,accu$1)
|
||
{var
|
||
accu$2=hash_combine(caml_call1(Stdlib_hashtbl[27],m[2]),accu$1),
|
||
l=m[1],
|
||
accu=accu$2;
|
||
for(;;)
|
||
{if(l)
|
||
{var
|
||
r=l[2],
|
||
match=l[1],
|
||
i=match[2],
|
||
a=match[1],
|
||
accu$0=hash_combine(a,hash_combine(i,accu)),
|
||
l=r,
|
||
accu=accu$0;
|
||
continue}
|
||
return accu}}
|
||
function _bM_(idx,marks)
|
||
{if(marks)
|
||
{var _iQ_=marks[1];
|
||
if(-1 === _iQ_[2])
|
||
{var rem=marks[2],a=_iQ_[1];return [0,[0,a,idx],_bM_(idx,rem)]}}
|
||
return marks}
|
||
function marks_set_idx(marks,idx)
|
||
{var _iP_=marks[2];return [0,_bM_(idx,marks[1]),_iP_]}
|
||
function pp_marks(ch,t)
|
||
{var _iN_=t[1];
|
||
if(_iN_)
|
||
{var r=_iN_[2],match=_iN_[1],i=match[2],a=match[1];
|
||
caml_call4(include[123],ch,_bN_,a,i);
|
||
var
|
||
_iO_=
|
||
function(param)
|
||
{var i=param[2],a=param[1];
|
||
return caml_call4(include[123],ch,_bO_,a,i)};
|
||
return caml_call2(Stdlib_list[15],_iO_,r)}
|
||
return 0}
|
||
function pp_sem(ch,k)
|
||
{var _iM_=-730718166 === k?cst_long:332064784 <= k?cst_first:cst_short;
|
||
return caml_call2(include[13],ch,_iM_)}
|
||
function pp_rep_kind(fmt,param)
|
||
{return 620821490 <= param
|
||
?caml_call2(include[13],fmt,cst_Non_greedy)
|
||
:caml_call2(include[13],fmt,cst_Greedy)}
|
||
function pp$2(ch,e)
|
||
{var _iz_=e[2];
|
||
if(typeof _iz_ === "number")
|
||
return caml_call2(_m_,ch,cst_eps);
|
||
else
|
||
switch(_iz_[0])
|
||
{case 0:var l=_iz_[1];return sexp(ch,cst_cst,pp$0,l);
|
||
case 1:
|
||
var l$0=_iz_[1],_iA_=0;
|
||
return sexp
|
||
(ch,
|
||
cst_alt,
|
||
function(_iK_,_iL_)
|
||
{return pp_print_list(_iA_,pp$2,_iK_,_iL_)},
|
||
l$0);
|
||
case 2:
|
||
var e$0=_iz_[3],e$1=_iz_[2],k=_iz_[1],_iB_=[0,k,e$1,e$0];
|
||
return sexp
|
||
(ch,
|
||
cst_seq,
|
||
function(_iI_,_iJ_)
|
||
{return triple(pp_sem,pp$2,pp$2,_iI_,_iJ_)},
|
||
_iB_);
|
||
case 3:
|
||
var e$2=_iz_[3],k$0=_iz_[2],_iC_=[0,k$0,e$2];
|
||
return sexp
|
||
(ch,
|
||
cst_rep,
|
||
function(_iG_,_iH_){return pair(pp_sem,pp$2,_iG_,_iH_)},
|
||
_iC_);
|
||
case 4:var i=_iz_[1];return sexp(ch,cst_mark,_q_,i);
|
||
case 5:
|
||
var e$3=_iz_[2],b=_iz_[1],_iD_=[0,b,e$3];
|
||
return sexp
|
||
(ch,
|
||
cst_erase,
|
||
function(_iE_,_iF_){return pair(_q_,_q_,_iE_,_iF_)},
|
||
_iD_);
|
||
case 6:var c=_iz_[1];return sexp(ch,cst_before,pp,c);
|
||
case 7:var c$0=_iz_[1];return sexp(ch,cst_after,pp,c$0);
|
||
default:var i$0=_iz_[1];return sexp(ch,cst_pmark,_q_,i$0)}}
|
||
function first(f,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var r=param$0[2],x=param$0[1],res=caml_call1(f,x);
|
||
if(res)return res;
|
||
var param$0=r;
|
||
continue}
|
||
return 0}}
|
||
function create_ids(param){return [0,0]}
|
||
function mk_expr(ids,def){ids[1]++;return [0,ids[1],def]}
|
||
function empty$1(ids){return mk_expr(ids,_bP_)}
|
||
function cst(ids,s){return is_empty(s)?empty$1(ids):mk_expr(ids,[0,s])}
|
||
function alt(ids,l)
|
||
{if(l){if(l[2])return mk_expr(ids,[1,l]);var c=l[1];return c}
|
||
return empty$1(ids)}
|
||
function seq$0(ids,kind,x,y)
|
||
{var _ix_=x[2],_iy_=y[2];
|
||
if(typeof _ix_ !== "number" && 1 === _ix_[0] && ! _ix_[1])return x;
|
||
if(typeof _iy_ !== "number" && 1 === _iy_[0] && ! _iy_[1])return y;
|
||
if(typeof _ix_ === "number")return y;
|
||
if(typeof _iy_ === "number" && 332064784 === kind)return x;
|
||
return mk_expr(ids,[2,kind,x,y])}
|
||
function is_eps(expr){return typeof expr[2] === "number"?1:0}
|
||
function eps(ids){return mk_expr(ids,0)}
|
||
function rep(ids,kind,sem,x){return mk_expr(ids,[3,kind,sem,x])}
|
||
function mark(ids,m){return mk_expr(ids,[4,m])}
|
||
function pmark(ids,i){return mk_expr(ids,[8,i])}
|
||
function erase(ids,m$0,m){return mk_expr(ids,[5,m$0,m])}
|
||
function before(ids,c){return mk_expr(ids,[6,c])}
|
||
function after(ids,c){return mk_expr(ids,[7,c])}
|
||
function rename(ids,x)
|
||
{var _it_=x[2];
|
||
if(typeof _it_ !== "number")
|
||
switch(_it_[0])
|
||
{case 1:
|
||
var l=_it_[1],_iu_=function(_iw_){return rename(ids,_iw_)};
|
||
return mk_expr(ids,[1,caml_call2(Stdlib_list[17],_iu_,l)]);
|
||
case 2:
|
||
var z=_it_[3],y=_it_[2],k=_it_[1],_iv_=rename(ids,z);
|
||
return mk_expr(ids,[2,k,rename(ids,y),_iv_]);
|
||
case 3:
|
||
var y$0=_it_[3],k$0=_it_[2],g=_it_[1];
|
||
return mk_expr(ids,[3,g,k$0,rename(ids,y$0)])
|
||
}
|
||
return mk_expr(ids,x[2])}
|
||
function equal$1(l1,l2)
|
||
{var l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{var _ia_=l1$0[1];
|
||
switch(_ia_[0])
|
||
{case 0:
|
||
if(l2$0)
|
||
{var _ib_=l2$0[1],_ic_=l1$0[2],_id_=_ia_[2],_ie_=_ia_[1];
|
||
if(0 === _ib_[0])
|
||
{var
|
||
r2=l2$0[2],
|
||
e2=_ib_[2],
|
||
l2$1=_ib_[1],
|
||
_if_=_id_[1] === e2[1]?1:0;
|
||
if(_if_)
|
||
{var _ig_=equal$1(_ie_,l2$1);
|
||
if(_ig_){var l1$0=_ic_,l2$0=r2;continue}
|
||
var _ih_=_ig_}
|
||
else
|
||
var _ih_=_if_;
|
||
return _ih_}}
|
||
break;
|
||
case 1:
|
||
if(l2$0)
|
||
{var _ii_=l2$0[1],_ij_=l1$0[2],_ik_=_ia_[2],_il_=_ia_[1];
|
||
if(1 === _ii_[0])
|
||
{var
|
||
r2$0=l2$0[2],
|
||
e2$0=_ii_[2],
|
||
marks2=_ii_[1],
|
||
_im_=_ik_[1] === e2$0[1]?1:0;
|
||
if(_im_)
|
||
{var _in_=caml_equal(_il_,marks2);
|
||
if(_in_){var l1$0=_ij_,l2$0=r2$0;continue}
|
||
var _io_=_in_}
|
||
else
|
||
var _io_=_im_;
|
||
return _io_}}
|
||
break;
|
||
default:
|
||
if(l2$0)
|
||
{var _ip_=l2$0[1],_iq_=l1$0[2],_ir_=_ia_[1];
|
||
if(2 === _ip_[0])
|
||
{var
|
||
r2$1=l2$0[2],
|
||
marks2$0=_ip_[1],
|
||
_is_=caml_equal(_ir_,marks2$0);
|
||
if(_is_){var l1$0=_iq_,l2$0=r2$1;continue}
|
||
return _is_}}}}
|
||
else
|
||
if(! l2$0)return 1;
|
||
return 0}}
|
||
function hash$1(l,accu)
|
||
{var l$0=l,accu$0=accu;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var _h9_=l$0[1];
|
||
switch(_h9_[0])
|
||
{case 0:
|
||
var
|
||
r=l$0[2],
|
||
e=_h9_[2],
|
||
l$1=_h9_[1],
|
||
_h__=hash$1(l$1,accu$0),
|
||
accu$1=hash_combine(388635598,hash_combine(e[1],_h__)),
|
||
l$0=r,
|
||
accu$0=accu$1;
|
||
continue;
|
||
case 1:
|
||
var
|
||
r$0=l$0[2],
|
||
e$0=_h9_[2],
|
||
marks=_h9_[1],
|
||
_h$_=hash$0(marks,accu$0),
|
||
accu$2=hash_combine(726404471,hash_combine(e$0[1],_h$_)),
|
||
l$0=r$0,
|
||
accu$0=accu$2;
|
||
continue;
|
||
default:
|
||
var
|
||
r$1=l$0[2],
|
||
marks$0=_h9_[1],
|
||
accu$3=hash_combine(471882453,hash$0(marks$0,accu$0)),
|
||
l$0=r$1,
|
||
accu$0=accu$3;
|
||
continue}}
|
||
return accu$0}}
|
||
function tseq(kind,x,y,rem)
|
||
{if(x)
|
||
{var _h8_=x[1];
|
||
if(1 === _h8_[0] && typeof _h8_[2][2] === "number" && ! x[2])
|
||
{var marks=_h8_[1];return [0,[1,marks,y],rem]}
|
||
return [0,[0,x,y,kind],rem]}
|
||
return rem}
|
||
function print_state_rec(ch,e,y)
|
||
{switch(e[0])
|
||
{case 0:
|
||
var x=e[2],l=e[1];
|
||
caml_call2(include[123],ch,_bQ_);
|
||
print_state_lst(ch,l,x);
|
||
return caml_call4(include[123],ch,_bR_,pp$2,x);
|
||
case 1:
|
||
var _h7_=e[1];
|
||
if(typeof e[2][2] === "number")
|
||
return caml_call5(include[123],ch,_bS_,y[1],pp_marks,_h7_);
|
||
var x$0=e[2];
|
||
return caml_call7(include[123],ch,_bT_,x$0[1],pp_marks,_h7_,pp$2,x$0);
|
||
default:
|
||
var marks=e[1];return caml_call4(include[123],ch,_bU_,pp_marks,marks)}}
|
||
function print_state_lst(ch,l,y)
|
||
{if(l)
|
||
{var rem=l[2],e=l[1];
|
||
print_state_rec(ch,e,y);
|
||
var
|
||
_h6_=
|
||
function(e)
|
||
{caml_call2(include[123],ch,_bV_);return print_state_rec(ch,e,y)};
|
||
return caml_call2(Stdlib_list[15],_h6_,rem)}
|
||
return caml_call2(include[123],ch,_bW_)}
|
||
function pp$3(ch,t){return print_state_lst(ch,[0,t,0],_bX_)}
|
||
var dummy$0=[0,-1,dummy,0,0,-1];
|
||
function mk(idx,cat,desc)
|
||
{return [0,
|
||
idx,
|
||
cat,
|
||
desc,
|
||
0,
|
||
hash$1(desc,hash_combine(idx,hash_combine(cat,0))) & 1073741823]}
|
||
function create(cat,e){return mk(0,cat,[0,[1,empty$0,e],0])}
|
||
function equal$2(x,y)
|
||
{var _h2_=x[5] === y[5]?1:0;
|
||
if(_h2_)
|
||
{var _h3_=x[1] === y[1]?1:0;
|
||
if(_h3_)
|
||
{var _h4_=x[2] === y[2]?1:0;
|
||
if(_h4_)return equal$1(x[3],y[3]);
|
||
var _h5_=_h4_}
|
||
else
|
||
var _h5_=_h3_}
|
||
else
|
||
var _h5_=_h2_;
|
||
return _h5_}
|
||
function hash$2(t){return t[5]}
|
||
var Table=caml_call1(Stdlib_hashtbl[25],[0,equal$2,hash$2]);
|
||
function create_working_area(param){return [0,[0,0]]}
|
||
function index_count(w){return w[1].length - 1}
|
||
function mark_used_indices(tbl)
|
||
{function _hX_(param)
|
||
{if(0 === param[0])
|
||
{var l=param[1];return caml_call1(mark_used_indices(tbl),l)}
|
||
var marks=param[1],_hY_=marks[1];
|
||
function _hZ_(param)
|
||
{var
|
||
i=param[2],
|
||
_h0_=0 <= i?1:0,
|
||
_h1_=_h0_?(caml_check_bound(tbl,i)[1 + i] = 1,0):_h0_;
|
||
return _h1_}
|
||
return caml_call2(Stdlib_list[15],_hZ_,_hY_)}
|
||
return caml_call1(Stdlib_list[15],_hX_)}
|
||
function free_index(tbl_ref,l)
|
||
{var tbl=tbl_ref[1];
|
||
caml_call4(Stdlib_array[9],tbl,0,tbl.length - 1,0);
|
||
caml_call1(mark_used_indices(tbl),l);
|
||
var len=tbl.length - 1,idx=0;
|
||
for(;;)
|
||
{if(idx !== len && caml_check_bound(tbl,idx)[1 + idx])
|
||
{var idx$0=idx + 1 | 0,idx=idx$0;continue}
|
||
if(idx === len)tbl_ref[1] = caml_make_vect(2 * len | 0,0);
|
||
return idx}}
|
||
function _bY_(param){return 2 === param[0]?0:1}
|
||
var remove_matches=caml_call1(Stdlib_list[38],_bY_);
|
||
function split_at_match(l$1)
|
||
{var l=0,param=l$1;
|
||
for(;;)
|
||
{if(param)
|
||
{var _hV_=param[1];
|
||
if(2 === _hV_[0])
|
||
{var r=param[2],_hW_=caml_call1(remove_matches,r);
|
||
return [0,caml_call1(Stdlib_list[9],l),_hW_]}
|
||
var param$0=param[2],l$0=[0,_hV_,l],l=l$0,param=param$0;
|
||
continue}
|
||
throw [0,Assert_failure,_bZ_]}}
|
||
function remove_duplicates(prev,l,y)
|
||
{var l$0=l;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var _hU_=l$0[1];
|
||
switch(_hU_[0])
|
||
{case 0:
|
||
var
|
||
r=l$0[2],
|
||
kind=_hU_[3],
|
||
x=_hU_[2],
|
||
l$1=_hU_[1],
|
||
match=remove_duplicates(prev,l$1,x),
|
||
prev$0=match[2],
|
||
l$2=match[1],
|
||
match$0=remove_duplicates(prev$0,r,y),
|
||
prev$1=match$0[2],
|
||
r$0=match$0[1];
|
||
return [0,tseq(kind,l$2,x,r$0),prev$1];
|
||
case 1:
|
||
if(typeof _hU_[2][2] === "number")
|
||
{var r$1=l$0[2];
|
||
if(caml_call2(Stdlib_list[34],y[1],prev)){var l$0=r$1;continue}
|
||
var
|
||
match$1=remove_duplicates([0,y[1],prev],r$1,y),
|
||
prev$2=match$1[2],
|
||
r$2=match$1[1];
|
||
return [0,[0,_hU_,r$2],prev$2]}
|
||
var r$3=l$0[2],x$0=_hU_[2];
|
||
if(caml_call2(Stdlib_list[34],x$0[1],prev)){var l$0=r$3;continue}
|
||
var
|
||
match$2=remove_duplicates([0,x$0[1],prev],r$3,y),
|
||
prev$3=match$2[2],
|
||
r$4=match$2[1];
|
||
return [0,[0,_hU_,r$4],prev$3];
|
||
default:return [0,[0,_hU_,0],prev]}}
|
||
return [0,0,prev]}}
|
||
function set_idx(idx,param)
|
||
{if(param)
|
||
{var _hQ_=param[1];
|
||
switch(_hQ_[0])
|
||
{case 0:
|
||
var
|
||
r=param[2],
|
||
kind=_hQ_[3],
|
||
x=_hQ_[2],
|
||
l=_hQ_[1],
|
||
_hR_=set_idx(idx,r);
|
||
return [0,[0,set_idx(idx,l),x,kind],_hR_];
|
||
case 1:
|
||
var r$0=param[2],x$0=_hQ_[2],marks=_hQ_[1],_hS_=set_idx(idx,r$0);
|
||
return [0,[1,marks_set_idx(marks,idx),x$0],_hS_];
|
||
default:
|
||
var r$1=param[2],marks$0=_hQ_[1],_hT_=set_idx(idx,r$1);
|
||
return [0,[2,marks_set_idx(marks$0,idx)],_hT_]}}
|
||
return 0}
|
||
function filter_marks(b,e,marks)
|
||
{var _hL_=marks[2],_hM_=marks[1];
|
||
function _hN_(param)
|
||
{var i=param[1],_hO_=i < b?1:0,_hP_=_hO_ || (e < i?1:0);return _hP_}
|
||
return [0,caml_call2(Stdlib_list[38],_hN_,_hM_),_hL_]}
|
||
function delta_1$0(counter,init,c,next_cat,prev_cat,x,rem)
|
||
{var _hI_=x[2];
|
||
if(typeof _hI_ === "number")
|
||
return [0,[2,init],rem];
|
||
else
|
||
switch(_hI_[0])
|
||
{case 0:var s=_hI_[1];return mem(c,s)?[0,[1,init,eps_expr],rem]:rem;
|
||
case 1:
|
||
var l=_hI_[1];
|
||
if(counter < 50)
|
||
{var counter$1=counter + 1 | 0;
|
||
return delta_2$0(counter$1,init,c,next_cat,prev_cat,l,rem)}
|
||
return caml_trampoline_return
|
||
(delta_2$0,[0,init,c,next_cat,prev_cat,l,rem]);
|
||
case 2:
|
||
var
|
||
z=_hI_[3],
|
||
y=_hI_[2],
|
||
kind=_hI_[1],
|
||
y$0=delta_1(init,c,next_cat,prev_cat,y,0);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return delta_seq$0(counter$0,c,next_cat,prev_cat,kind,y$0,z,rem)}
|
||
return caml_trampoline_return
|
||
(delta_seq$0,[0,c,next_cat,prev_cat,kind,y$0,z,rem]);
|
||
case 3:
|
||
var
|
||
y$1=_hI_[3],
|
||
kind$0=_hI_[2],
|
||
rep_kind=_hI_[1],
|
||
y$2=delta_1(init,c,next_cat,prev_cat,y$1,0),
|
||
match=
|
||
first
|
||
(function(param)
|
||
{if(2 === param[0]){var marks=param[1];return [0,marks]}
|
||
return 0},
|
||
y$2);
|
||
if(match)
|
||
var
|
||
marks=match[1],
|
||
marks$0=marks,
|
||
y$3=caml_call1(remove_matches,y$2);
|
||
else
|
||
var marks$0=init,y$3=y$2;
|
||
return 620821490 <= rep_kind
|
||
?[0,[2,init],tseq(kind$0,y$3,x,rem)]
|
||
:tseq(kind$0,y$3,x,[0,[2,marks$0],rem]);
|
||
case 4:
|
||
var
|
||
i=_hI_[1],
|
||
_hJ_=init[2],
|
||
marks$1=[0,[0,[0,i,-1],caml_call2(Stdlib_list[48],i,init[1])],_hJ_];
|
||
return [0,[2,marks$1],rem];
|
||
case 5:
|
||
var e=_hI_[2],b=_hI_[1];return [0,[2,filter_marks(b,e,init)],rem];
|
||
case 6:
|
||
var cat=_hI_[1];return intersect(next_cat,cat)?[0,[2,init],rem]:rem;
|
||
case 7:
|
||
var cat$0=_hI_[1];
|
||
return intersect(prev_cat,cat$0)?[0,[2,init],rem]:rem;
|
||
default:
|
||
var
|
||
i$0=_hI_[1],
|
||
_hK_=caml_call2(Set[4],i$0,init[2]),
|
||
marks$2=[0,init[1],_hK_];
|
||
return [0,[2,marks$2],rem]}}
|
||
function delta_2$0(counter,marks,c,next_cat,prev_cat,l,rem)
|
||
{if(l)
|
||
{var r=l[2],y=l[1],_hH_=delta_2(marks,c,next_cat,prev_cat,r,rem);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return delta_1$0(counter$0,marks,c,next_cat,prev_cat,y,_hH_)}
|
||
return caml_trampoline_return
|
||
(delta_1$0,[0,marks,c,next_cat,prev_cat,y,_hH_])}
|
||
return rem}
|
||
function delta_seq$0(counter,c,next_cat,prev_cat,kind,y,z,rem)
|
||
{var
|
||
match=
|
||
first
|
||
(function(param)
|
||
{if(2 === param[0]){var marks=param[1];return [0,marks]}return 0},
|
||
y);
|
||
if(match)
|
||
{var marks=match[1];
|
||
if(-730718166 === kind)
|
||
{var _hF_=delta_1(marks,c,next_cat,prev_cat,z,rem);
|
||
return tseq(kind,caml_call1(remove_matches,y),z,_hF_)}
|
||
if(332064784 <= kind)
|
||
{var match$0=split_at_match(y),y$0=match$0[2],y$1=match$0[1];
|
||
return tseq
|
||
(kind,
|
||
y$1,
|
||
z,
|
||
delta_1(marks,c,next_cat,prev_cat,z,tseq(kind,y$0,z,rem)))}
|
||
var _hG_=tseq(kind,caml_call1(remove_matches,y),z,rem);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return delta_1$0(counter$0,marks,c,next_cat,prev_cat,z,_hG_)}
|
||
return caml_trampoline_return
|
||
(delta_1$0,[0,marks,c,next_cat,prev_cat,z,_hG_])}
|
||
return tseq(kind,y,z,rem)}
|
||
function delta_1(init,c,next_cat,prev_cat,x,rem)
|
||
{return caml_trampoline(delta_1$0(0,init,c,next_cat,prev_cat,x,rem))}
|
||
function delta_2(marks,c,next_cat,prev_cat,l,rem)
|
||
{return caml_trampoline(delta_2$0(0,marks,c,next_cat,prev_cat,l,rem))}
|
||
function delta_seq(c,next_cat,prev_cat,kind,y,z,rem)
|
||
{return caml_trampoline(delta_seq$0(0,c,next_cat,prev_cat,kind,y,z,rem))}
|
||
function delta_4(c,next_cat,prev_cat,l,rem)
|
||
{if(l)
|
||
{var r=l[2],y$1=l[1],rem$0=delta_4(c,next_cat,prev_cat,r,rem);
|
||
switch(y$1[0])
|
||
{case 0:
|
||
var
|
||
kind=y$1[3],
|
||
z=y$1[2],
|
||
y=y$1[1],
|
||
y$0=delta_4(c,next_cat,prev_cat,y,0);
|
||
return delta_seq(c,next_cat,prev_cat,kind,y$0,z,rem$0);
|
||
case 1:
|
||
var e=y$1[2],marks=y$1[1];
|
||
return delta_1(marks,c,next_cat,prev_cat,e,rem$0);
|
||
default:return [0,y$1,rem$0]}}
|
||
return rem}
|
||
function delta(tbl_ref,next_cat,char$0,st)
|
||
{var
|
||
prev_cat=st[2],
|
||
match=
|
||
remove_duplicates
|
||
(0,delta_4(char$0,next_cat,prev_cat,st[3],0),eps_expr),
|
||
expr=match[1],
|
||
idx=free_index(tbl_ref,expr),
|
||
expr$0=set_idx(idx,expr);
|
||
return mk(idx,next_cat,expr$0)}
|
||
function red_tr(l)
|
||
{var l$0=l;
|
||
for(;;)
|
||
{if(l$0)
|
||
{var _hE_=l$0[2];
|
||
if(_hE_)
|
||
{var
|
||
rem=_hE_[2],
|
||
tr2=_hE_[1],
|
||
st2=tr2[2],
|
||
s2=tr2[1],
|
||
tr1=l$0[1],
|
||
st1=tr1[2],
|
||
s1=tr1[1];
|
||
if(equal$2(st1,st2))
|
||
{var l$1=[0,[0,union(s1,s2),st1],rem],l$0=l$1;continue}
|
||
return [0,tr1,red_tr([0,tr2,rem])]}}
|
||
return l$0}}
|
||
function _b0_(param,l){var x=param[2],s=param[1];return prepend(s,x,l)}
|
||
var prepend_deriv=caml_call1(Stdlib_list[23],_b0_);
|
||
function restrict(s,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var
|
||
rem=param$0[2],
|
||
match=param$0[1],
|
||
x=match[2],
|
||
s$0=match[1],
|
||
s$1=inter(s,s$0);
|
||
if(is_empty(s$1)){var param$0=rem;continue}
|
||
return [0,[0,s$1,x],restrict(s,rem)]}
|
||
return 0}}
|
||
function prepend_marks_expr_lst(m,l)
|
||
{function _hD_(param)
|
||
{switch(param[0])
|
||
{case 0:
|
||
var s=param[3],e=param[2],l=param[1];
|
||
return [0,prepend_marks_expr_lst(m,l),e,s];
|
||
case 1:var e$0=param[2],m$0=param[1];return [1,merge(m,m$0),e$0];
|
||
default:var m$1=param[1];return [2,merge(m,m$1)]}}
|
||
return caml_call2(Stdlib_list[17],_hD_,l)}
|
||
function deriv_seq(all_chars,categories,cat,kind,y,z,rem)
|
||
{function _hu_(param)
|
||
{var xl=param[2];
|
||
function _hC_(param){return 2 === param[0]?1:0}
|
||
return caml_call2(Stdlib_list[30],_hC_,xl)}
|
||
if(caml_call2(Stdlib_list[30],_hu_,y))
|
||
{var
|
||
z$0=deriv_1(all_chars,categories,empty$0,cat,z,[0,[0,all_chars,0],0]),
|
||
_hv_=
|
||
function(param,rem)
|
||
{var
|
||
y=param[2],
|
||
s=param[1],
|
||
match=
|
||
first
|
||
(function(param)
|
||
{if(2 === param[0]){var marks=param[1];return [0,marks]}
|
||
return 0},
|
||
y);
|
||
if(match)
|
||
{var
|
||
marks=match[1],
|
||
_hx_=
|
||
function(param)
|
||
{var x=param[2],s=param[1];
|
||
return [0,s,prepend_marks_expr_lst(marks,x)]},
|
||
z$1=caml_call1(caml_call1(Stdlib_list[17],_hx_),z$0);
|
||
if(-730718166 === kind)
|
||
{var _hy_=caml_call2(prepend_deriv,restrict(s,z$1),rem);
|
||
return prepend
|
||
(s,tseq(kind,caml_call1(remove_matches,y),z,0),_hy_)}
|
||
if(332064784 <= kind)
|
||
{var
|
||
match$0=split_at_match(y),
|
||
y$0=match$0[2],
|
||
y$1=match$0[1],
|
||
_hz_=prepend(s,tseq(kind,y$0,z,0),rem),
|
||
_hA_=caml_call2(prepend_deriv,restrict(s,z$1),_hz_);
|
||
return prepend(s,tseq(kind,y$1,z,0),_hA_)}
|
||
var
|
||
_hB_=
|
||
prepend(s,tseq(kind,caml_call1(remove_matches,y),z,0),rem);
|
||
return caml_call2(prepend_deriv,restrict(s,z$1),_hB_)}
|
||
return prepend(s,tseq(kind,y,z,0),rem)};
|
||
return caml_call3(Stdlib_list[23],_hv_,y,rem)}
|
||
function _hw_(param,rem)
|
||
{var xl=param[2],s=param[1];return prepend(s,tseq(kind,xl,z,0),rem)}
|
||
return caml_call3(Stdlib_list[23],_hw_,y,rem)}
|
||
function deriv_1$0(counter,all_chars,categories,marks,cat,x,rem$1)
|
||
{var _ho_=x[2];
|
||
if(typeof _ho_ === "number")
|
||
return prepend(all_chars,[0,[2,marks],0],rem$1);
|
||
else
|
||
switch(_ho_[0])
|
||
{case 0:
|
||
var s=_ho_[1];return prepend(s,[0,[1,marks,eps_expr],0],rem$1);
|
||
case 1:
|
||
var l=_ho_[1];
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return deriv_2$0(counter$0,all_chars,categories,marks,cat,l,rem$1)}
|
||
return caml_trampoline_return
|
||
(deriv_2$0,[0,all_chars,categories,marks,cat,l,rem$1]);
|
||
case 2:
|
||
var
|
||
z=_ho_[3],
|
||
y=_ho_[2],
|
||
kind=_ho_[1],
|
||
y$0=deriv_1(all_chars,categories,marks,cat,y,[0,[0,all_chars,0],0]);
|
||
return deriv_seq(all_chars,categories,cat,kind,y$0,z,rem$1);
|
||
case 3:
|
||
var
|
||
y$1=_ho_[3],
|
||
kind$0=_ho_[2],
|
||
rep_kind=_ho_[1],
|
||
y$2=
|
||
deriv_1(all_chars,categories,marks,cat,y$1,[0,[0,all_chars,0],0]),
|
||
_hp_=
|
||
function(param,rem)
|
||
{var
|
||
z=param[2],
|
||
s=param[1],
|
||
match=
|
||
first
|
||
(function(param)
|
||
{if(2 === param[0]){var marks=param[1];return [0,marks]}
|
||
return 0},
|
||
z);
|
||
if(match)
|
||
var
|
||
marks$0=match[1],
|
||
marks$1=marks$0,
|
||
z$0=caml_call1(remove_matches,z);
|
||
else
|
||
var marks$1=marks,z$0=z;
|
||
var
|
||
_ht_=
|
||
620821490 <= rep_kind
|
||
?[0,[2,marks],tseq(kind$0,z$0,x,0)]
|
||
:tseq(kind$0,z$0,x,[0,[2,marks$1],0]);
|
||
return prepend(s,_ht_,rem)};
|
||
return caml_call3(Stdlib_list[23],_hp_,y$2,rem$1);
|
||
case 4:
|
||
var i=_ho_[1],_hq_=marks[2];
|
||
return prepend
|
||
(all_chars,
|
||
[0,
|
||
[2,
|
||
[0,[0,[0,i,-1],caml_call2(Stdlib_list[48],i,marks[1])],_hq_]],
|
||
0],
|
||
rem$1);
|
||
case 5:
|
||
var
|
||
e$1=_ho_[2],
|
||
b=_ho_[1],
|
||
_hs_=marks[2],
|
||
e=e$1,
|
||
rem=filter_marks(b,e$1,marks)[1],
|
||
_hr_=0;
|
||
for(;;)
|
||
{if(e < b)
|
||
return prepend(all_chars,[0,[2,[0,rem,_hs_]],_hr_],rem$1);
|
||
var rem$0=[0,[0,e,-2],rem],e$0=e - 1 | 0,e=e$0,rem=rem$0;
|
||
continue}
|
||
case 6:
|
||
var cat$0=_ho_[1];
|
||
return prepend
|
||
(caml_call2(Stdlib_list[43],cat$0,categories),
|
||
[0,[2,marks],0],
|
||
rem$1);
|
||
case 7:
|
||
var cat$1=_ho_[1];
|
||
return intersect(cat,cat$1)
|
||
?prepend(all_chars,[0,[2,marks],0],rem$1)
|
||
:rem$1;
|
||
default:return prepend(all_chars,[0,[2,marks],0],rem$1)}}
|
||
function deriv_2$0(counter,all_chars,categories,marks,cat,l,rem)
|
||
{if(l)
|
||
{var r=l[2],y=l[1],_hn_=deriv_2(all_chars,categories,marks,cat,r,rem);
|
||
if(counter < 50)
|
||
{var counter$0=counter + 1 | 0;
|
||
return deriv_1$0(counter$0,all_chars,categories,marks,cat,y,_hn_)}
|
||
return caml_trampoline_return
|
||
(deriv_1$0,[0,all_chars,categories,marks,cat,y,_hn_])}
|
||
return rem}
|
||
function deriv_1(all_chars,categories,marks,cat,x,rem)
|
||
{return caml_trampoline
|
||
(deriv_1$0(0,all_chars,categories,marks,cat,x,rem))}
|
||
function deriv_2(all_chars,categories,marks,cat,l,rem)
|
||
{return caml_trampoline
|
||
(deriv_2$0(0,all_chars,categories,marks,cat,l,rem))}
|
||
function deriv_4(all_chars,categories,cat,l,rem)
|
||
{if(l)
|
||
{var r=l[2],y$1=l[1],rem$0=deriv_4(all_chars,categories,cat,r,rem);
|
||
switch(y$1[0])
|
||
{case 0:
|
||
var
|
||
kind=y$1[3],
|
||
z=y$1[2],
|
||
y=y$1[1],
|
||
y$0=deriv_4(all_chars,categories,cat,y,[0,[0,all_chars,0],0]);
|
||
return deriv_seq(all_chars,categories,cat,kind,y$0,z,rem$0);
|
||
case 1:
|
||
var e=y$1[2],marks=y$1[1];
|
||
return deriv_1(all_chars,categories,marks,cat,e,rem$0);
|
||
default:return prepend(all_chars,[0,y$1,0],rem$0)}}
|
||
return rem}
|
||
function deriv(tbl_ref,all_chars,categories,st)
|
||
{var
|
||
der=deriv_4(all_chars,categories,st[2],st[3],[0,[0,all_chars,0],0]),
|
||
_hi_=0;
|
||
function _hj_(param,rem)
|
||
{var
|
||
expr=param[2],
|
||
s=param[1],
|
||
match=remove_duplicates(0,expr,eps_expr),
|
||
expr$0=match[1],
|
||
idx=free_index(tbl_ref,expr$0),
|
||
expr$1=set_idx(idx,expr$0);
|
||
function _hm_(param,rem)
|
||
{var s$0=param[2],cat=param[1],s$1=inter(s,s$0);
|
||
return is_empty(s$1)?rem:[0,[0,s$1,mk(idx,cat,expr$1)],rem]}
|
||
return caml_call3(Stdlib_list[23],_hm_,categories,rem)}
|
||
var l=caml_call3(Stdlib_list[23],_hj_,der,_hi_);
|
||
function _hf_(param,_hl_)
|
||
{var st2=_hl_[2],st1=param[2],c=caml_int_compare(st1[5],st2[5]);
|
||
if(0 === c)
|
||
{var c$0=caml_int_compare(st1[2],st2[2]);
|
||
return 0 === c$0?caml_compare(st1[3],st2[3]):c$0}
|
||
return c}
|
||
var _hg_=red_tr(caml_call2(Stdlib_list[51],_hf_,l));
|
||
function _hh_(param,_hk_)
|
||
{var s2=_hk_[1],s1=param[1];return caml_compare(s1,s2)}
|
||
return caml_call2(Stdlib_list[51],_hh_,_hg_)}
|
||
function status(s)
|
||
{var _ha_=s[4];
|
||
if(_ha_){var st=_ha_[1];return st}
|
||
var _hb_=s[3];
|
||
if(_hb_)
|
||
{var _hc_=_hb_[1];
|
||
if(2 === _hc_[0])
|
||
{var
|
||
m=_hc_[1],
|
||
_he_=m[1],
|
||
_hd_=m[2],
|
||
_g9_=-1,
|
||
_g__=
|
||
function(ma,param)
|
||
{var i=param[1];return caml_call2(Stdlib[17],ma,i)},
|
||
ma=caml_call3(Stdlib_list[22],_g__,_g9_,_he_),
|
||
res=caml_make_vect(ma + 1 | 0,-1),
|
||
_g$_=
|
||
function(param)
|
||
{var v=param[2],i=param[1];
|
||
caml_check_bound(res,i)[1 + i] = v;
|
||
return 0};
|
||
caml_call2(Stdlib_list[15],_g$_,_he_);
|
||
var st$0=[0,res,_hd_]}
|
||
else
|
||
var st$0=1}
|
||
else
|
||
var st$0=0;
|
||
s[4] = [0,st$0];
|
||
return st$0}
|
||
var
|
||
_b1_=[0,dummy$0,create,Table],
|
||
Re_Automata=
|
||
[0,
|
||
pp_sem,
|
||
pp_rep_kind,
|
||
is_eps,
|
||
pp$2,
|
||
create_ids,
|
||
cst,
|
||
empty$1,
|
||
alt,
|
||
seq$0,
|
||
eps,
|
||
rep,
|
||
mark,
|
||
pmark,
|
||
erase,
|
||
before,
|
||
after,
|
||
rename,
|
||
[0],
|
||
[0,pp$3],
|
||
_b1_,
|
||
create_working_area,
|
||
index_count,
|
||
delta,
|
||
deriv,
|
||
status];
|
||
caml_register_global(148,Re_Automata,"Re__Automata");
|
||
function make(param){return caml_call2(Stdlib_bytes[1],257,0)}
|
||
function flatten(cm)
|
||
{var c=caml_create_bytes(256),color_repr=caml_create_bytes(256),v=[0,0];
|
||
caml_bytes_set(c,0,0);
|
||
caml_bytes_set(color_repr,0,0);
|
||
var i=1;
|
||
for(;;)
|
||
{if(0 !== caml_bytes_get(cm,i))v[1]++;
|
||
caml_bytes_set(c,i,caml_call1(Stdlib_char[1],v[1]));
|
||
var _g7_=caml_call1(Stdlib_char[1],i);
|
||
caml_bytes_set(color_repr,v[1],_g7_);
|
||
var _g8_=i + 1 | 0;
|
||
if(255 !== i){var i=_g8_;continue}
|
||
var _g6_=v[1] + 1 | 0;
|
||
return [0,
|
||
c,
|
||
caml_call3(Stdlib_bytes[7],color_repr,0,v[1] + 1 | 0),
|
||
_g6_]}}
|
||
function split(s,cm)
|
||
{return iter
|
||
(s,
|
||
function(i,j)
|
||
{caml_bytes_set(cm,i,1);return caml_bytes_set(cm,j + 1 | 0,1)})}
|
||
var Re_Color_map=[0,make,flatten,split];
|
||
caml_register_global(151,Re_Color_map,"Re__Color_map");
|
||
function offset$0(t,i)
|
||
{if(t[2].length - 1 <= ((2 * i | 0) + 1 | 0))throw Stdlib[8];
|
||
var _g3_=2 * i | 0,m1=caml_check_bound(t[2],_g3_)[1 + _g3_];
|
||
if(-1 === m1)throw Stdlib[8];
|
||
var
|
||
p1=caml_check_bound(t[4],m1)[1 + m1] - 1 | 0,
|
||
_g4_=(2 * i | 0) + 1 | 0,
|
||
_g5_=caml_check_bound(t[2],_g4_)[1 + _g4_],
|
||
p2=caml_check_bound(t[4],_g5_)[1 + _g5_] - 1 | 0;
|
||
return [0,p1,p2]}
|
||
function get(t,i)
|
||
{var match=offset$0(t,i),p2=match[2],p1=match[1];
|
||
return caml_call3(Stdlib_string[4],t[1],p1,p2 - p1 | 0)}
|
||
function start(subs,i){return offset$0(subs,i)[1]}
|
||
function stop(subs,i){return offset$0(subs,i)[2]}
|
||
function test(t,i)
|
||
{if(t[2].length - 1 <= (2 * i | 0))return 0;
|
||
var _g2_=2 * i | 0,idx=caml_check_bound(t[2],_g2_)[1 + _g2_];
|
||
return -1 !== idx?1:0}
|
||
function all_offset(t)
|
||
{var
|
||
res=caml_make_vect(t[5],dummy_offset),
|
||
_gX_=((t[2].length - 1) / 2 | 0) - 1 | 0,
|
||
_gW_=0;
|
||
if(! (_gX_ < 0))
|
||
{var i=_gW_;
|
||
for(;;)
|
||
{var _gY_=2 * i | 0,m1=caml_check_bound(t[2],_gY_)[1 + _gY_];
|
||
if(-1 !== m1)
|
||
{var
|
||
p1=caml_check_bound(t[4],m1)[1 + m1],
|
||
_gZ_=(2 * i | 0) + 1 | 0,
|
||
_g0_=caml_check_bound(t[2],_gZ_)[1 + _gZ_],
|
||
p2=caml_check_bound(t[4],_g0_)[1 + _g0_];
|
||
caml_check_bound(res,i)[1 + i] = [0,p1 - 1 | 0,p2 - 1 | 0]}
|
||
var _g1_=i + 1 | 0;
|
||
if(_gX_ !== i){var i=_g1_;continue}
|
||
break}}
|
||
return res}
|
||
function all(t)
|
||
{var
|
||
res=caml_make_vect(t[5],dummy_string),
|
||
_gQ_=((t[2].length - 1) / 2 | 0) - 1 | 0,
|
||
_gP_=0;
|
||
if(! (_gQ_ < 0))
|
||
{var i=_gP_;
|
||
for(;;)
|
||
{var _gR_=2 * i | 0,m1=caml_check_bound(t[2],_gR_)[1 + _gR_];
|
||
if(-1 !== m1)
|
||
{var
|
||
p1=caml_check_bound(t[4],m1)[1 + m1],
|
||
_gS_=(2 * i | 0) + 1 | 0,
|
||
_gT_=caml_check_bound(t[2],_gS_)[1 + _gS_],
|
||
p2=caml_check_bound(t[4],_gT_)[1 + _gT_],
|
||
_gU_=caml_call3(Stdlib_string[4],t[1],p1 - 1 | 0,p2 - p1 | 0);
|
||
caml_check_bound(res,i)[1 + i] = _gU_}
|
||
var _gV_=i + 1 | 0;
|
||
if(_gQ_ !== i){var i=_gV_;continue}
|
||
break}}
|
||
return res}
|
||
function pp$4(fmt,t)
|
||
{var offsets=all_offset(t),strs=all(t);
|
||
function _gJ_(i)
|
||
{var _gO_=caml_check_bound(offsets,i)[1 + i];
|
||
return [0,caml_check_bound(strs,i)[1 + i],_gO_]}
|
||
var
|
||
_gK_=caml_call2(Stdlib_array[2],strs.length - 1,_gJ_),
|
||
matches=caml_call1(Stdlib_array[11],_gK_);
|
||
function pp_match(fmt,param)
|
||
{var match=param[2],stop=match[2],start=match[1],str=param[1];
|
||
return caml_call5(_bd_,fmt,_b2_,str,start,stop)}
|
||
var _gL_=0;
|
||
return sexp
|
||
(fmt,
|
||
cst_Group,
|
||
function(_gM_,_gN_)
|
||
{return pp_print_list(_gL_,pp_match,_gM_,_gN_)},
|
||
matches)}
|
||
function nb_groups(t){return t[5]}
|
||
var Group=[0,get,offset$0,start,stop,all,all_offset,test,nb_groups,pp$4];
|
||
caml_register_global(153,Group,"Re__Group");
|
||
function iter$0(n,f,v)
|
||
{var n$0=n,v$0=v;
|
||
for(;;)
|
||
{if(0 === n$0)return v$0;
|
||
var v$1=caml_call1(f,v$0),n$1=n$0 - 1 | 0,n$0=n$1,v$0=v$1;
|
||
continue}}
|
||
var unknown=-2,break$0=-3;
|
||
function print_re(ch,re){return pp$2(ch,re[1])}
|
||
function category(re,color)
|
||
{return -1 === color
|
||
?inexistant
|
||
:color === re[6]?28:from_char(caml_bytes_get(re[4],color))}
|
||
var dummy_next=[0],unknown_state=[0,unknown,0,dummy_next,0,_b1_[1]];
|
||
function mk_state(ncol,desc)
|
||
{var match=status(desc),switch$0=0;
|
||
if(typeof match === "number" && match){var break_state=0;switch$0 = 1}
|
||
if(! switch$0)var break_state=1;
|
||
var
|
||
_gF_=0,
|
||
_gG_=break_state?dummy_next:caml_make_vect(ncol,unknown_state),
|
||
_gH_=desc[1],
|
||
_gI_=break_state?break$0:desc[1];
|
||
return [0,_gI_,_gH_,_gG_,_gF_,desc]}
|
||
function find_state(re,desc)
|
||
{try
|
||
{var _gD_=caml_call2(_b1_[3][7],re[8],desc);return _gD_}
|
||
catch(_gE_)
|
||
{_gE_ = caml_wrap_exception(_gE_);
|
||
if(_gE_ === Stdlib[8])
|
||
{var st=mk_state(re[5],desc);
|
||
caml_call3(_b1_[3][5],re[8],desc,st);
|
||
return st}
|
||
throw _gE_}}
|
||
function delta$0(info,cat,color,st)
|
||
{var
|
||
desc=delta(info[1][7],cat,color,st[5]),
|
||
len=info[3].length - 1,
|
||
_gB_=desc[1] === len?1:0,
|
||
_gC_=_gB_?0 < len?1:0:_gB_;
|
||
if(_gC_)
|
||
{var pos=info[3];
|
||
info[3] = caml_make_vect(2 * len | 0,0);
|
||
caml_call5(Stdlib_array[10],pos,0,info[3],0,len)}
|
||
return desc}
|
||
function validate(info,s,pos,st)
|
||
{var
|
||
_gA_=caml_string_get(s,pos),
|
||
color=caml_bytes_get(info[2],_gA_),
|
||
cat=category(info[1],color),
|
||
desc=delta$0(info,cat,color,st),
|
||
st$0=find_state(info[1],desc);
|
||
caml_check_bound(st[3],color)[1 + color] = st$0;
|
||
return 0}
|
||
function final$0(info,st,cat)
|
||
{try
|
||
{var _gy_=caml_call2(Stdlib_list[43],cat,st[4]);return _gy_}
|
||
catch(_gz_)
|
||
{_gz_ = caml_wrap_exception(_gz_);
|
||
if(_gz_ === Stdlib[8])
|
||
{var
|
||
st$0=delta$0(info,cat,-1,st),
|
||
_gx_=status(st$0),
|
||
res=[0,st$0[1],_gx_];
|
||
st[4] = [0,[0,cat,res],st[4]];
|
||
return res}
|
||
throw _gz_}}
|
||
function find_initial_state(re,cat)
|
||
{try
|
||
{var _gv_=caml_call2(Stdlib_list[43],cat,re[2]);return _gv_}
|
||
catch(_gw_)
|
||
{_gw_ = caml_wrap_exception(_gw_);
|
||
if(_gw_ === Stdlib[8])
|
||
{var st=find_state(re,caml_call2(_b1_[2],cat,re[1]));
|
||
re[2] = [0,[0,cat,st],re[2]];
|
||
return st}
|
||
throw _gw_}}
|
||
function get_color(re,s,pos)
|
||
{if(0 <= pos)
|
||
{var slen=caml_ml_string_length(s);
|
||
if(slen <= pos)return -1;
|
||
if
|
||
(pos
|
||
===
|
||
(slen - 1 | 0)
|
||
&&
|
||
-1
|
||
!==
|
||
re[6]
|
||
&&
|
||
10
|
||
===
|
||
caml_string_get(s,pos))
|
||
return re[6];
|
||
var _gu_=caml_string_get(s,pos);
|
||
return caml_bytes_get(re[3],_gu_)}
|
||
return -1}
|
||
function scan_str(info,s,st$8,groups)
|
||
{var pos$4=info[4],last=info[5];
|
||
if
|
||
(last
|
||
===
|
||
caml_ml_string_length(s)
|
||
&&
|
||
-1
|
||
!==
|
||
info[1][6]
|
||
&&
|
||
pos$4
|
||
<
|
||
last
|
||
&&
|
||
10
|
||
===
|
||
caml_string_get(s,last - 1 | 0))
|
||
{var
|
||
info$0=[0,info[1],info[2],info[3],info[4],last - 1 | 0],
|
||
st$9=scan_str(info$0,s,st$8,groups);
|
||
if(st$9[1] === -3)return st$9;
|
||
var pos$5=last - 1 | 0;
|
||
for(;;)
|
||
{var _gr_=info$0[1][6],st$6=caml_check_bound(st$9[3],_gr_)[1 + _gr_];
|
||
if(0 <= st$6[1])
|
||
{if(groups)
|
||
{var _gs_=st$6[1];
|
||
caml_check_bound(info$0[3],_gs_)[1 + _gs_] = pos$5 + 1 | 0}
|
||
return st$6}
|
||
if(st$6[1] === -3)
|
||
{if(groups)
|
||
{var _gt_=st$6[2];
|
||
caml_check_bound(info$0[3],_gt_)[1 + _gt_] = pos$5 + 1 | 0}
|
||
return st$6}
|
||
var
|
||
color=info$0[1][6],
|
||
real_c=caml_bytes_get(info$0[2],10),
|
||
cat=category(info$0[1],color),
|
||
desc=delta$0(info$0,cat,real_c,st$9),
|
||
st$7=find_state(info$0[1],desc);
|
||
caml_check_bound(st$9[3],color)[1 + color] = st$7;
|
||
continue}}
|
||
if(groups)
|
||
{var pos=pos$4,st=st$8;
|
||
a:
|
||
for(;;)
|
||
{if(pos < info[5])
|
||
{var
|
||
_gi_=caml_string_get(s,pos),
|
||
_gj_=caml_bytes_get(info[2],_gi_),
|
||
st$0=caml_check_bound(st[3],_gj_)[1 + _gj_],
|
||
pos$0=pos,
|
||
st$2=st,
|
||
st$1=st$0;
|
||
for(;;)
|
||
{if(0 <= st$1[1])
|
||
{var pos$1=pos$0 + 1 | 0;
|
||
if(pos$1 < info[5])
|
||
{var
|
||
_gk_=caml_string_get(s,pos$1),
|
||
_gl_=caml_bytes_get(info[2],_gk_),
|
||
st$3=caml_check_bound(st$1[3],_gl_)[1 + _gl_],
|
||
_gm_=st$1[1];
|
||
caml_check_bound(info[3],_gm_)[1 + _gm_] = pos$1;
|
||
var pos$0=pos$1,st$2=st$1,st$1=st$3;
|
||
continue}
|
||
var _gn_=st$1[1];
|
||
caml_check_bound(info[3],_gn_)[1 + _gn_] = pos$1;
|
||
return st$1}
|
||
if(st$1[1] === -3)
|
||
{var _go_=st$1[2];
|
||
caml_check_bound(info[3],_go_)[1 + _go_] = pos$0 + 1 | 0;
|
||
return st$1}
|
||
validate(info,s,pos$0,st$2);
|
||
var pos=pos$0,st=st$2;
|
||
continue a}}
|
||
return st}}
|
||
var pos$2=pos$4,st$4=st$8;
|
||
for(;;)
|
||
{if(pos$2 < last)
|
||
{var
|
||
_gp_=caml_string_get(s,pos$2),
|
||
_gq_=caml_bytes_get(info[2],_gp_),
|
||
st$5=caml_check_bound(st$4[3],_gq_)[1 + _gq_];
|
||
if(0 <= st$5[1])
|
||
{var pos$3=pos$2 + 1 | 0,pos$2=pos$3,st$4=st$5;continue}
|
||
if(st$5[1] === -3)return st$5;
|
||
validate(info,s,pos$2,st$4);
|
||
continue}
|
||
return st$4}}
|
||
function match_str(groups,partial,re,s,pos,len)
|
||
{var slen=caml_ml_string_length(s),last=-1 === len?slen:pos + len | 0;
|
||
if(groups)
|
||
var
|
||
n=index_count(re[7]) + 1 | 0,
|
||
_gg_=10 < n?caml_make_vect(n,0):_b3_.slice(),
|
||
_gh_=_gg_;
|
||
else
|
||
var _gh_=[0];
|
||
var
|
||
info=[0,re,re[3],_gh_,pos,last],
|
||
initial_cat=0 === pos?33:32 | category(re,get_color(re,s,pos - 1 | 0)),
|
||
initial_state=find_initial_state(re,initial_cat),
|
||
st=scan_str(info,s,initial_state,groups),
|
||
switch$0=0;
|
||
if(st[1] !== -3 && ! partial)
|
||
{var
|
||
final_cat=last === slen?33:32 | category(re,get_color(re,s,last)),
|
||
match=final$0(info,st,final_cat),
|
||
res$0=match[2],
|
||
idx=match[1];
|
||
if(groups)caml_check_bound(info[3],idx)[1 + idx] = last + 1 | 0;
|
||
var res=res$0;
|
||
switch$0 = 1}
|
||
if(! switch$0)var res=status(st[5]);
|
||
if(typeof res === "number")return res?1:0;
|
||
var pmarks=res[2],marks=res[1];
|
||
return [0,[0,s,marks,pmarks,info[3],re[9]]]}
|
||
function cseq(c$0,c){return seq(c$0,c)}
|
||
function cadd(c,s){return add(c,s)}
|
||
function trans_set(cache,cm,s)
|
||
{var match=one_char(s);
|
||
if(match){var i=match[1];return csingle(caml_bytes_get(cm,i))}
|
||
var v=[0,hash_rec(s),s];
|
||
try
|
||
{var _gd_=caml_call2(CSetMap[27],v,cache[1]);return _gd_}
|
||
catch(_ge_)
|
||
{_ge_ = caml_wrap_exception(_ge_);
|
||
if(_ge_ === Stdlib[8])
|
||
{var
|
||
l=
|
||
fold_right
|
||
(s,
|
||
empty,
|
||
function(param,l)
|
||
{var j=param[2],i=param[1],_gf_=caml_bytes_get(cm,j);
|
||
return union(cseq(caml_bytes_get(cm,i),_gf_),l)});
|
||
cache[1] = caml_call3(CSetMap[4],v,l,cache[1]);
|
||
return l}
|
||
throw _ge_}}
|
||
function view(t){return t}
|
||
var View=[0,view];
|
||
function pp$5(fmt,t)
|
||
{function var$0(s,re){return sexp(fmt,s,pp$5,re)}
|
||
function seq(s,rel)
|
||
{var _ga_=0;
|
||
return sexp
|
||
(fmt,
|
||
s,
|
||
function(_gb_,_gc_)
|
||
{return pp_print_list(_ga_,pp$5,_gb_,_gc_)},
|
||
rel)}
|
||
if(typeof t === "number")
|
||
switch(t)
|
||
{case 0:return caml_call2(_m_,fmt,cst_Beg_of_line);
|
||
case 1:return caml_call2(_m_,fmt,cst_End_of_line);
|
||
case 2:return caml_call2(_m_,fmt,cst_Beg_of_word);
|
||
case 3:return caml_call2(_m_,fmt,cst_End_of_word);
|
||
case 4:return caml_call2(_m_,fmt,cst_Not_bound);
|
||
case 5:return caml_call2(_m_,fmt,cst_Beg_of_str);
|
||
case 6:return caml_call2(_m_,fmt,cst_End_of_str);
|
||
case 7:return caml_call2(_m_,fmt,cst_Last_end_of_line);
|
||
case 8:return caml_call2(_m_,fmt,cst_Start);
|
||
default:return caml_call2(_m_,fmt,cst_Stop)}
|
||
else
|
||
switch(t[0])
|
||
{case 0:var s=t[1];return sexp(fmt,cst_Set,pp$0,s);
|
||
case 1:var sq=t[1];return seq(cst_Sequence,sq);
|
||
case 2:var alt=t[1];return seq(cst_Alternative,alt);
|
||
case 3:
|
||
var
|
||
stop=t[3],
|
||
start=t[2],
|
||
re=t[1],
|
||
pp=
|
||
function(fmt,param)
|
||
{return caml_call7(_bd_,fmt,_b4_,pp$5,re,start,optint,stop)};
|
||
return sexp(fmt,cst_Repeat,pp,0);
|
||
case 4:
|
||
var re$0=t[2],sem=t[1],_f0_=[0,sem,re$0];
|
||
return sexp
|
||
(fmt,
|
||
cst_Sem,
|
||
function(_f8_,_f9_){return pair(pp_sem,pp$5,_f8_,_f9_)},
|
||
_f0_);
|
||
case 5:
|
||
var re$1=t[2],k=t[1],_f1_=[0,k,re$1];
|
||
return sexp
|
||
(fmt,
|
||
cst_Sem_greedy,
|
||
function(_f6_,_f7_){return pair(pp_rep_kind,pp$5,_f6_,_f7_)},
|
||
_f1_);
|
||
case 6:var c=t[1];return var$0(cst_Group$0,c);
|
||
case 7:var c$0=t[1];return var$0(cst_No_group,c$0);
|
||
case 8:var c$1=t[1];return var$0(cst_Nest,c$1);
|
||
case 9:var c$2=t[1];return var$0(cst_Case,c$2);
|
||
case 10:var c$3=t[1];return var$0(cst_No_case,c$3);
|
||
case 11:var c$4=t[1];return seq(cst_Intersection,c$4);
|
||
case 12:var c$5=t[1];return seq(cst_Complement,c$5);
|
||
case 13:
|
||
var b=t[2],a=t[1],_f2_=[0,a,b];
|
||
return sexp
|
||
(fmt,
|
||
cst_Difference,
|
||
function(_f4_,_f5_){return pair(pp$5,pp$5,_f4_,_f5_)},
|
||
_f2_);
|
||
default:
|
||
var r=t[2],m=t[1],_f3_=[0,m,r];
|
||
return sexp
|
||
(fmt,
|
||
cst_Pmark,
|
||
function(_f__,_f$_){return pair(pp$1,pp$5,_f__,_f$_)},
|
||
_f3_)}}
|
||
function is_charset(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{var switch$0=0;
|
||
if(typeof param$0 === "number")
|
||
switch$0 = 1;
|
||
else
|
||
switch(param$0[0])
|
||
{case 0:return 1;
|
||
case 13:
|
||
var r=param$0[2],r$0=param$0[1],_fZ_=is_charset(r$0);
|
||
if(_fZ_){var param$0=r;continue}
|
||
return _fZ_;
|
||
case 4:
|
||
case 5:var param$1=param$0[2];break;
|
||
case 2:
|
||
case 11:
|
||
case 12:
|
||
var l=param$0[1];return caml_call2(Stdlib_list[29],is_charset,l);
|
||
case 7:
|
||
case 9:
|
||
case 10:var param$1=param$0[1];break;
|
||
default:switch$0 = 1}
|
||
if(switch$0)return 0;
|
||
var param$0=param$1;
|
||
continue}}
|
||
var
|
||
_b5_=cseq(216,222),
|
||
_b6_=union(cseq(192,214),_b5_),
|
||
cupper=union(cseq(65,90),_b6_),
|
||
clower=offset(32,cupper),
|
||
_b7_=union(clower,cupper),
|
||
calpha=caml_call3(Stdlib_list[23],cadd,_b8_,_b7_),
|
||
cdigit=cseq(48,57),
|
||
calnum=union(calpha,cdigit),
|
||
cword=cadd(95,calnum);
|
||
function eq_list(l1,l2)
|
||
{var l1$0=l1,l2$0=l2;
|
||
for(;;)
|
||
{if(l1$0)
|
||
{if(l2$0)
|
||
{var
|
||
r2=l2$0[2],
|
||
x2=l2$0[1],
|
||
r1=l1$0[2],
|
||
x1=l1$0[1],
|
||
_fY_=equal$3(x1,x2);
|
||
if(_fY_){var l1$0=r1,l2$0=r2;continue}
|
||
return _fY_}}
|
||
else
|
||
if(! l2$0)return 1;
|
||
return 0}}
|
||
function equal$3(x1,x2)
|
||
{var x1$0=x1,x2$0=x2;
|
||
for(;;)
|
||
{var switch$0=0;
|
||
if(typeof x1$0 === "number")
|
||
switch(x1$0)
|
||
{case 0:if(typeof x2$0 === "number" && ! x2$0)switch$0 = 1;break;
|
||
case 1:
|
||
if(typeof x2$0 === "number" && 1 === x2$0)switch$0 = 1;break;
|
||
case 2:
|
||
if(typeof x2$0 === "number" && 2 === x2$0)switch$0 = 1;break;
|
||
case 3:
|
||
if(typeof x2$0 === "number" && 3 === x2$0)switch$0 = 1;break;
|
||
case 4:
|
||
if(typeof x2$0 === "number" && 4 === x2$0)switch$0 = 1;break;
|
||
case 5:
|
||
if(typeof x2$0 === "number" && 5 === x2$0)switch$0 = 1;break;
|
||
case 6:
|
||
if(typeof x2$0 === "number" && 6 === x2$0)switch$0 = 1;break;
|
||
case 7:
|
||
if(typeof x2$0 === "number" && 7 === x2$0)switch$0 = 1;break;
|
||
case 8:
|
||
if(typeof x2$0 === "number" && 8 === x2$0)switch$0 = 1;break;
|
||
default:if(typeof x2$0 === "number" && 9 <= x2$0)switch$0 = 1}
|
||
else
|
||
switch(x1$0[0])
|
||
{case 0:
|
||
if(typeof x2$0 !== "number" && 0 === x2$0[0])
|
||
{var s2=x2$0[1],s1=x1$0[1];return caml_equal(s1,s2)}
|
||
break;
|
||
case 1:
|
||
if(typeof x2$0 !== "number" && 1 === x2$0[0])
|
||
{var l2=x2$0[1],l1=x1$0[1];return eq_list(l1,l2)}
|
||
break;
|
||
case 2:
|
||
if(typeof x2$0 !== "number" && 2 === x2$0[0])
|
||
{var l2$0=x2$0[1],l1$0=x1$0[1];return eq_list(l1$0,l2$0)}
|
||
break;
|
||
case 3:
|
||
if(typeof x2$0 !== "number" && 3 === x2$0[0])
|
||
{var
|
||
j2=x2$0[3],
|
||
i2=x2$0[2],
|
||
x2$1=x2$0[1],
|
||
j1=x1$0[3],
|
||
i1=x1$0[2],
|
||
x1$1=x1$0[1],
|
||
_fR_=i1 === i2?1:0;
|
||
if(_fR_)
|
||
{var _fS_=caml_equal(j1,j2);
|
||
if(_fS_){var x1$0=x1$1,x2$0=x2$1;continue}
|
||
var _fT_=_fS_}
|
||
else
|
||
var _fT_=_fR_;
|
||
return _fT_}
|
||
break;
|
||
case 4:
|
||
if(typeof x2$0 !== "number" && 4 === x2$0[0])
|
||
{var
|
||
x2$2=x2$0[2],
|
||
sem2=x2$0[1],
|
||
x1$2=x1$0[2],
|
||
sem1=x1$0[1],
|
||
_fU_=sem1 === sem2?1:0;
|
||
if(_fU_){var x1$0=x1$2,x2$0=x2$2;continue}
|
||
return _fU_}
|
||
break;
|
||
case 5:
|
||
if(typeof x2$0 !== "number" && 5 === x2$0[0])
|
||
{var
|
||
x2$3=x2$0[2],
|
||
k2=x2$0[1],
|
||
x1$3=x1$0[2],
|
||
k1=x1$0[1],
|
||
_fV_=k1 === k2?1:0;
|
||
if(_fV_){var x1$0=x1$3,x2$0=x2$3;continue}
|
||
return _fV_}
|
||
break;
|
||
case 6:if(typeof x2$0 !== "number" && 6 === x2$0[0])return 0;break;
|
||
case 7:
|
||
if(typeof x2$0 !== "number" && 7 === x2$0[0])
|
||
{var x2$4=x2$0[1],x1$4=x1$0[1],x1$0=x1$4,x2$0=x2$4;continue}
|
||
break;
|
||
case 8:
|
||
if(typeof x2$0 !== "number" && 8 === x2$0[0])
|
||
{var x2$5=x2$0[1],x1$5=x1$0[1],x1$0=x1$5,x2$0=x2$5;continue}
|
||
break;
|
||
case 9:
|
||
if(typeof x2$0 !== "number" && 9 === x2$0[0])
|
||
{var x2$6=x2$0[1],x1$6=x1$0[1],x1$0=x1$6,x2$0=x2$6;continue}
|
||
break;
|
||
case 10:
|
||
if(typeof x2$0 !== "number" && 10 === x2$0[0])
|
||
{var x2$7=x2$0[1],x1$7=x1$0[1],x1$0=x1$7,x2$0=x2$7;continue}
|
||
break;
|
||
case 11:
|
||
if(typeof x2$0 !== "number" && 11 === x2$0[0])
|
||
{var l2$1=x2$0[1],l1$1=x1$0[1];return eq_list(l1$1,l2$1)}
|
||
break;
|
||
case 12:
|
||
if(typeof x2$0 !== "number" && 12 === x2$0[0])
|
||
{var l2$2=x2$0[1],l1$2=x1$0[1];return eq_list(l1$2,l2$2)}
|
||
break;
|
||
case 13:
|
||
if(typeof x2$0 !== "number" && 13 === x2$0[0])
|
||
{var
|
||
x2$8=x2$0[2],
|
||
x2$9=x2$0[1],
|
||
x1$8=x1$0[2],
|
||
x1$9=x1$0[1],
|
||
_fW_=equal$3(x1$9,x2$9);
|
||
if(_fW_){var x1$0=x1$8,x2$0=x2$8;continue}
|
||
return _fW_}
|
||
break;
|
||
default:
|
||
if(typeof x2$0 !== "number" && 14 === x2$0[0])
|
||
{var
|
||
r2=x2$0[2],
|
||
m2=x2$0[1],
|
||
r1=x1$0[2],
|
||
m1=x1$0[1],
|
||
_fX_=m1 === m2?1:0;
|
||
if(_fX_){var x1$0=r1,x2$0=r2;continue}
|
||
return _fX_}}
|
||
return switch$0?1:0}}
|
||
function sequence(l){if(l && ! l[2]){var x=l[1];return x}return [1,l]}
|
||
function merge_sequences(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var _fM_=param$0[1];
|
||
if(typeof _fM_ !== "number")
|
||
switch(_fM_[0])
|
||
{case 1:
|
||
var _fN_=_fM_[1];
|
||
if(_fN_)
|
||
{var
|
||
r$0=param$0[2],
|
||
y=_fN_[2],
|
||
x=_fN_[1],
|
||
r$1=merge_sequences(r$0);
|
||
if(r$1)
|
||
{var _fO_=r$1[1],switch$0=0;
|
||
if(typeof _fO_ === "number" || ! (1 === _fO_[0]))
|
||
switch$0 = 1;
|
||
else
|
||
{var _fP_=_fO_[1];
|
||
if(_fP_)
|
||
{var r$2=r$1[2],y$0=_fP_[2],x$0=_fP_[1];
|
||
if(equal$3(x,x$0))
|
||
{var _fQ_=[0,sequence(y$0),0];
|
||
return [0,[1,[0,x,[0,[2,[0,sequence(y),_fQ_]],0]]],r$2]}}}}
|
||
return [0,[1,[0,x,y]],r$1]}
|
||
break;
|
||
case 2:
|
||
var
|
||
r$3=param$0[2],
|
||
l=_fM_[1],
|
||
param$1=caml_call2(Stdlib[37],l,r$3),
|
||
param$0=param$1;
|
||
continue
|
||
}
|
||
var r=param$0[2];
|
||
return [0,_fM_,merge_sequences(r)]}
|
||
return 0}}
|
||
function enforce_kind(ids,kind,k,cr)
|
||
{return 332064784 === kind?332064784 === k?cr:seq$0(ids,k,cr,eps(ids)):cr}
|
||
function translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,param)
|
||
{var ign_group$0=ign_group,greedy$0=greedy,param$0=param;
|
||
for(;;)
|
||
if(typeof param$0 === "number")
|
||
switch(param$0)
|
||
{case 0:return [0,after(ids,9),kind];
|
||
case 1:return [0,before(ids,9),kind];
|
||
case 2:
|
||
var _fD_=before(ids,3);
|
||
return [0,seq$0(ids,332064784,after(ids,5),_fD_),kind];
|
||
case 3:
|
||
var _fE_=before(ids,5);
|
||
return [0,seq$0(ids,332064784,after(ids,3),_fE_),kind];
|
||
case 4:
|
||
var
|
||
_fF_=before(ids,letter),
|
||
_fG_=[0,seq$0(ids,332064784,after(ids,letter),_fF_),0],
|
||
_fH_=before(ids,letter);
|
||
return [0,
|
||
alt
|
||
(ids,[0,seq$0(ids,332064784,after(ids,letter),_fH_),_fG_]),
|
||
kind];
|
||
case 5:return [0,after(ids,inexistant),kind];
|
||
case 6:return [0,before(ids,inexistant),kind];
|
||
case 7:return [0,before(ids,17),kind];
|
||
case 8:return [0,after(ids,search_boundary),kind];
|
||
default:return [0,before(ids,search_boundary),kind]}
|
||
else
|
||
switch(param$0[0])
|
||
{case 0:
|
||
var s=param$0[1];return [0,cst(ids,trans_set(cache,c,s)),kind];
|
||
case 1:
|
||
var l=param$0[1];
|
||
return [0,
|
||
trans_seq
|
||
(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,l),
|
||
kind];
|
||
case 2:
|
||
var l$0=param$0[1],merged_sequences=merge_sequences(l$0);
|
||
if(merged_sequences && ! merged_sequences[2])
|
||
{var
|
||
r=merged_sequences[1],
|
||
match=
|
||
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r),
|
||
kind$0=match[2],
|
||
cr=match[1];
|
||
return [0,enforce_kind(ids,kind,kind$0,cr),kind]}
|
||
var
|
||
_fI_=
|
||
function(r)
|
||
{var
|
||
match=
|
||
translate
|
||
(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r),
|
||
kind$0=match[2],
|
||
cr=match[1];
|
||
return enforce_kind(ids,kind,kind$0,cr)};
|
||
return [0,
|
||
alt(ids,caml_call2(Stdlib_list[17],_fI_,merged_sequences)),
|
||
kind];
|
||
case 3:
|
||
var
|
||
j=param$0[3],
|
||
i=param$0[2],
|
||
r$0=param$0[1],
|
||
match$0=
|
||
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$0),
|
||
kind$1=match$0[2],
|
||
cr$0=match$0[1];
|
||
if(j)
|
||
var
|
||
j$0=j[1],
|
||
f=
|
||
620821490 <= greedy$0
|
||
?function(rem)
|
||
{var _fK_=[0,seq$0(ids,kind$1,rename(ids,cr$0),rem),0];
|
||
return alt(ids,[0,eps(ids),_fK_])}
|
||
:function(rem)
|
||
{var _fL_=[0,eps(ids),0];
|
||
return alt
|
||
(ids,[0,seq$0(ids,kind$1,rename(ids,cr$0),rem),_fL_])},
|
||
rem=iter$0(j$0 - i | 0,f,eps(ids));
|
||
else
|
||
var rem=rep(ids,greedy$0,kind$1,cr$0);
|
||
return [0,
|
||
iter$0
|
||
(i,
|
||
function(rem){return seq$0(ids,kind$1,rename(ids,cr$0),rem)},
|
||
rem),
|
||
kind];
|
||
case 4:
|
||
var
|
||
r$1=param$0[2],
|
||
kind$2=param$0[1],
|
||
match$1=
|
||
translate
|
||
(ids,kind$2,ign_group$0,ign_case,greedy$0,pos,cache,c,r$1),
|
||
kind$3=match$1[2],
|
||
cr$1=match$1[1];
|
||
return [0,enforce_kind(ids,kind$2,kind$3,cr$1),kind$2];
|
||
case 5:
|
||
var
|
||
param$1=param$0[2],
|
||
greedy$1=param$0[1],
|
||
greedy$0=greedy$1,
|
||
param$0=param$1;
|
||
continue;
|
||
case 6:
|
||
var r$2=param$0[1];
|
||
if(ign_group$0){var param$0=r$2;continue}
|
||
var p=pos[1];
|
||
pos[1] = pos[1] + 2 | 0;
|
||
var
|
||
match$2=
|
||
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$2),
|
||
kind$4=match$2[2],
|
||
cr$2=match$2[1],
|
||
_fJ_=seq$0(ids,332064784,cr$2,mark(ids,p + 1 | 0));
|
||
return [0,seq$0(ids,332064784,mark(ids,p),_fJ_),kind$4];
|
||
case 7:
|
||
var param$2=param$0[1],ign_group$0=1,param$0=param$2;continue;
|
||
case 8:
|
||
var
|
||
r$3=param$0[1],
|
||
b=pos[1],
|
||
match$3=
|
||
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$3),
|
||
kind$5=match$3[2],
|
||
cr$3=match$3[1],
|
||
e=pos[1] - 1 | 0;
|
||
return e < b
|
||
?[0,cr$3,kind$5]
|
||
:[0,seq$0(ids,332064784,erase(ids,b,e),cr$3),kind$5];
|
||
case 14:
|
||
var
|
||
r$4=param$0[2],
|
||
i$0=param$0[1],
|
||
match$4=
|
||
translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$4),
|
||
kind$6=match$4[2],
|
||
cr$4=match$4[1];
|
||
return [0,seq$0(ids,332064784,pmark(ids,i$0),cr$4),kind$6];
|
||
default:throw [0,Assert_failure,_b__]}}
|
||
function trans_seq(ids,kind,ign_group,ign_case,greedy,pos,cache,c,param)
|
||
{if(param)
|
||
{var _fC_=param[1];
|
||
if(param[2])
|
||
{var
|
||
rem=param[2],
|
||
match=
|
||
translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,_fC_),
|
||
kind$0=match[2],
|
||
cr=match[1],
|
||
cr$0=trans_seq(ids,kind,ign_group,ign_case,greedy,pos,cache,c,rem);
|
||
return is_eps(cr$0)?cr:is_eps(cr)?cr$0:seq$0(ids,kind$0,cr,cr$0)}
|
||
var
|
||
match$0=
|
||
translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,_fC_),
|
||
kind$1=match$0[2],
|
||
cr$1=match$0[1];
|
||
return enforce_kind(ids,kind,kind$1,cr$1)}
|
||
return eps(ids)}
|
||
function as_set(param)
|
||
{if(typeof param !== "number" && 0 === param[0]){var s=param[1];return s}
|
||
throw [0,Assert_failure,_b$_]}
|
||
function handle_case(ign_case,r)
|
||
{var ign_case$0=ign_case,r$0=r;
|
||
for(;;)
|
||
if(typeof r$0 === "number")
|
||
return r$0;
|
||
else
|
||
switch(r$0[0])
|
||
{case 0:
|
||
var s=r$0[1];
|
||
if(ign_case$0)
|
||
var
|
||
_fq_=offset(-32,inter(s,clower)),
|
||
_fr_=union(s,union(offset(32,inter(s,cupper)),_fq_));
|
||
else
|
||
var _fr_=s;
|
||
return [0,_fr_];
|
||
case 1:
|
||
var
|
||
l=r$0[1],
|
||
_fs_=function(_fB_){return handle_case(ign_case$0,_fB_)};
|
||
return [1,caml_call2(Stdlib_list[17],_fs_,l)];
|
||
case 2:
|
||
var
|
||
l$0=r$0[1],
|
||
_ft_=function(_fA_){return handle_case(ign_case$0,_fA_)},
|
||
l$1=caml_call2(Stdlib_list[17],_ft_,l$0);
|
||
if(is_charset([2,l$1]))
|
||
{var _fu_=function(s,r){return union(s,as_set(r))};
|
||
return [0,caml_call3(Stdlib_list[22],_fu_,empty,l$1)]}
|
||
return [2,l$1];
|
||
case 3:
|
||
var j=r$0[3],i=r$0[2],r$1=r$0[1];
|
||
return [3,handle_case(ign_case$0,r$1),i,j];
|
||
case 4:
|
||
var r$2=r$0[2],k=r$0[1],r$3=handle_case(ign_case$0,r$2);
|
||
return is_charset(r$3)?r$3:[4,k,r$3];
|
||
case 5:
|
||
var r$4=r$0[2],k$0=r$0[1],r$5=handle_case(ign_case$0,r$4);
|
||
return is_charset(r$5)?r$5:[5,k$0,r$5];
|
||
case 6:var r$6=r$0[1];return [6,handle_case(ign_case$0,r$6)];
|
||
case 7:
|
||
var r$7=r$0[1],r$8=handle_case(ign_case$0,r$7);
|
||
return is_charset(r$8)?r$8:[7,r$8];
|
||
case 8:
|
||
var r$9=r$0[1],r$10=handle_case(ign_case$0,r$9);
|
||
return is_charset(r$10)?r$10:[8,r$10];
|
||
case 9:var r$11=r$0[1],ign_case$0=0,r$0=r$11;continue;
|
||
case 10:var r$12=r$0[1],ign_case$0=1,r$0=r$12;continue;
|
||
case 11:
|
||
var
|
||
l$2=r$0[1],
|
||
_fv_=function(r){return handle_case(ign_case$0,r)},
|
||
l$3=caml_call2(Stdlib_list[17],_fv_,l$2),
|
||
_fw_=function(s,r){return inter(s,as_set(r))};
|
||
return [0,caml_call3(Stdlib_list[22],_fw_,cany,l$3)];
|
||
case 12:
|
||
var
|
||
l$4=r$0[1],
|
||
_fx_=function(r){return handle_case(ign_case$0,r)},
|
||
l$5=caml_call2(Stdlib_list[17],_fx_,l$4),
|
||
_fy_=function(s,r){return union(s,as_set(r))};
|
||
return [0,diff(cany,caml_call3(Stdlib_list[22],_fy_,empty,l$5))];
|
||
case 13:
|
||
var
|
||
r$13=r$0[2],
|
||
r$14=r$0[1],
|
||
_fz_=diff(cany,as_set(handle_case(ign_case$0,r$13)));
|
||
return [0,inter(as_set(handle_case(ign_case$0,r$14)),_fz_)];
|
||
default:
|
||
var r$15=r$0[2],i$0=r$0[1];
|
||
return [14,i$0,handle_case(ign_case$0,r$15)]}}
|
||
function anchored(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{var switch$0=0;
|
||
if(typeof param$0 === "number")
|
||
switch(param$0){case 5:case 8:return 1}
|
||
else
|
||
switch(param$0[0])
|
||
{case 1:
|
||
var l=param$0[1];return caml_call2(Stdlib_list[30],anchored,l);
|
||
case 2:
|
||
var l$0=param$0[1];
|
||
return caml_call2(Stdlib_list[29],anchored,l$0);
|
||
case 3:
|
||
var i=param$0[2],r=param$0[1],_fp_=0 < i?1:0;
|
||
if(_fp_){var param$0=r;continue}
|
||
return _fp_;
|
||
case 4:
|
||
case 5:
|
||
case 14:var param$1=param$0[2];switch$0 = 1;break;
|
||
case 0:
|
||
case 11:
|
||
case 12:
|
||
case 13:break;
|
||
default:var param$1=param$0[1];switch$0 = 1}
|
||
if(switch$0){var param$0=param$1;continue}
|
||
return 0}}
|
||
function str(s)
|
||
{var l=[0,0],_fm_=caml_ml_string_length(s) - 1 | 0;
|
||
if(! (_fm_ < 0))
|
||
{var i=_fm_;
|
||
for(;;)
|
||
{var _fn_=l[1];
|
||
l[1] = [0,[0,csingle(caml_string_get(s,i))],_fn_];
|
||
var _fo_=i - 1 | 0;
|
||
if(0 !== i){var i=_fo_;continue}
|
||
break}}
|
||
return [1,l[1]]}
|
||
function char$0(c){return [0,csingle(c)]}
|
||
function alt$0(l){if(l && ! l[2]){var r=l[1];return r}return [2,l]}
|
||
function seq$1(l){if(l && ! l[2]){var r=l[1];return r}return [1,l]}
|
||
var empty$2=alt$0(0),epsilon=seq$1(0);
|
||
function repn(r,i,j)
|
||
{if(i < 0)caml_call1(Stdlib[1],cst_Re_repn);
|
||
var switch$0=0;
|
||
if(j)
|
||
{var j$0=j[1];
|
||
if(j$0 < i){caml_call1(Stdlib[1],cst_Re_repn$0);switch$0 = 1}}
|
||
return [3,r,i,j]}
|
||
function rep$0(r){return repn(r,0,0)}
|
||
function rep1(r){return repn(r,1,0)}
|
||
function opt(r){return repn(r,0,_ca_)}
|
||
var bol=0,eol=1,bow=2,eow=3;
|
||
function word(r){return seq$1([0,bow,[0,r,[0,eow,0]]])}
|
||
var not_boundary=4,bos=5,eos=6;
|
||
function whole_string(r){return seq$1([0,bos,[0,r,[0,eos,0]]])}
|
||
var leol=7,start$0=8,stop$0=9;
|
||
function longest(r){return [4,-730718166,r]}
|
||
function shortest(r){return [4,-1034406550,r]}
|
||
function first$0(r){return [4,332064784,r]}
|
||
function greedy(r){return [5,-904640576,r]}
|
||
function non_greedy(r){return [5,620821490,r]}
|
||
function group(r){return [6,r]}
|
||
function no_group(r){return [7,r]}
|
||
function nest(r){return [8,r]}
|
||
function mark$0(r){var i=gen(0);return [0,i,[14,i,r]]}
|
||
function set(str)
|
||
{var s=[0,empty],_fj_=caml_ml_string_length(str) - 1 | 0,_fi_=0;
|
||
if(! (_fj_ < 0))
|
||
{var i=_fi_;
|
||
for(;;)
|
||
{var _fk_=s[1];
|
||
s[1] = union(csingle(caml_string_get(str,i)),_fk_);
|
||
var _fl_=i + 1 | 0;
|
||
if(_fj_ !== i){var i=_fl_;continue}
|
||
break}}
|
||
return [0,s[1]]}
|
||
function rg(c$0,c){return [0,cseq(c$0,c)]}
|
||
function inter$0(l)
|
||
{var r=[11,l];return is_charset(r)?r:caml_call1(Stdlib[1],cst_Re_inter)}
|
||
function compl(l)
|
||
{var r=[12,l];return is_charset(r)?r:caml_call1(Stdlib[1],cst_Re_compl)}
|
||
function diff$0(r$0,r)
|
||
{var r$1=[13,r$0,r];
|
||
return is_charset(r$1)?r$1:caml_call1(Stdlib[1],cst_Re_diff)}
|
||
var
|
||
any=[0,cany],
|
||
notnl=[0,diff(cany,csingle(10))],
|
||
_cb_=[0,rg(248,255),0],
|
||
_cc_=[0,rg(223,246),_cb_],
|
||
_cd_=[0,char$0(181),_cc_],
|
||
lower=alt$0([0,rg(97,122),_cd_]),
|
||
_ce_=[0,rg(216,222),0],
|
||
_cf_=[0,rg(192,214),_ce_],
|
||
upper=alt$0([0,rg(65,90),_cf_]),
|
||
_cg_=[0,char$0(186),0],
|
||
alpha=alt$0([0,lower,[0,upper,[0,char$0(170),_cg_]]]),
|
||
digit=rg(48,57),
|
||
alnum=alt$0([0,alpha,[0,digit,0]]),
|
||
wordc=alt$0([0,alnum,[0,char$0(95),0]]),
|
||
ascii=rg(0,127),
|
||
blank=set(cst$0),
|
||
_ch_=[0,rg(127,159),0],
|
||
cntrl=alt$0([0,rg(0,31),_ch_]),
|
||
_ci_=[0,rg(160,255),0],
|
||
graph=alt$0([0,rg(33,126),_ci_]),
|
||
_cj_=[0,rg(160,255),0],
|
||
print=alt$0([0,rg(32,126),_cj_]),
|
||
_ck_=[0,char$0(247),0],
|
||
_cl_=[0,char$0(215),_ck_],
|
||
_cm_=[0,rg(187,191),_cl_],
|
||
_cn_=[0,rg(182,185),_cm_],
|
||
_co_=[0,rg(171,180),_cn_],
|
||
_cp_=[0,rg(160,169),_co_],
|
||
_cq_=[0,rg(123,126),_cp_],
|
||
_cr_=[0,rg(91,96),_cq_],
|
||
_cs_=[0,rg(58,64),_cr_],
|
||
punct=alt$0([0,rg(33,47),_cs_]),
|
||
_ct_=[0,rg(9,13),0],
|
||
space=alt$0([0,char$0(32),_ct_]),
|
||
_cu_=[0,rg(65,70),0],
|
||
xdigit=alt$0([0,digit,[0,rg(97,102),_cu_]]);
|
||
function case$0(r){return [9,r]}
|
||
function no_case(r){return [10,r]}
|
||
function compile(r$0)
|
||
{var
|
||
_fh_=
|
||
anchored(r$0)?[6,r$0]:seq$1([0,shortest(rep$0(any)),[0,[6,r$0],0]]),
|
||
regexp=handle_case(0,_fh_),
|
||
c=make(0),
|
||
lnl=[0,0];
|
||
function colorize(regexp)
|
||
{var regexp$0=regexp;
|
||
for(;;)
|
||
{if(typeof regexp$0 === "number")
|
||
switch(regexp$0)
|
||
{case 7:lnl[1] = 1;return 0;
|
||
case 0:
|
||
case 1:return split(csingle(10),c);
|
||
case 2:
|
||
case 3:
|
||
case 4:return split(cword,c);
|
||
default:return 0}
|
||
else
|
||
switch(regexp$0[0])
|
||
{case 0:var s=regexp$0[1];return split(s,c);
|
||
case 1:
|
||
var l=regexp$0[1];return caml_call2(Stdlib_list[15],colorize,l);
|
||
case 2:
|
||
var l$0=regexp$0[1];
|
||
return caml_call2(Stdlib_list[15],colorize,l$0);
|
||
case 3:var regexp$1=regexp$0[1],regexp$0=regexp$1;continue;
|
||
case 4:
|
||
case 5:
|
||
case 14:var regexp$2=regexp$0[2];break;
|
||
case 6:
|
||
case 7:
|
||
case 8:var regexp$2=regexp$0[1];break;
|
||
default:throw [0,Assert_failure,_b9_]}
|
||
var regexp$0=regexp$2;
|
||
continue}}
|
||
colorize(regexp);
|
||
var
|
||
_fg_=lnl[1],
|
||
match=flatten(c),
|
||
ncolor=match[3],
|
||
color_repr=match[2],
|
||
colors=match[1],
|
||
lnl$0=_fg_?ncolor:-1,
|
||
ncolor$0=_fg_?ncolor + 1 | 0:ncolor,
|
||
ids=create_ids(0),
|
||
pos=[0,0],
|
||
match$0=
|
||
translate
|
||
(ids,332064784,0,0,-904640576,pos,[0,CSetMap[1]],colors,regexp),
|
||
kind=match$0[2],
|
||
r=match$0[1],
|
||
initial=enforce_kind(ids,332064784,kind,r),
|
||
group_count=pos[1] / 2 | 0,
|
||
_ff_=caml_call1(_b1_[3][1],97);
|
||
return [0,
|
||
initial,
|
||
0,
|
||
colors,
|
||
color_repr,
|
||
ncolor$0,
|
||
lnl$0,
|
||
create_working_area(0),
|
||
_ff_,
|
||
group_count]}
|
||
function exec_internal(name,opt,_fb_,partial,groups,re,s)
|
||
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
|
||
if(_fb_)var sth$0=_fb_[1],len=sth$0;else var len=-1;
|
||
var _fc_=pos < 0?1:0;
|
||
if(_fc_)
|
||
var _fd_=_fc_;
|
||
else
|
||
var
|
||
_fe_=len < -1?1:0,
|
||
_fd_=_fe_ || (caml_ml_string_length(s) < (pos + len | 0)?1:0);
|
||
if(_fd_)caml_call1(Stdlib[1],name);
|
||
return match_str(groups,partial,re,s,pos,len)}
|
||
function exec(pos,len,re,s)
|
||
{var match=exec_internal(cst_Re_exec,pos,len,0,1,re,s);
|
||
if(typeof match === "number")throw Stdlib[8];
|
||
var substr=match[1];
|
||
return substr}
|
||
function exec_opt(pos,len,re,s)
|
||
{var match=exec_internal(cst_Re_exec_opt,pos,len,0,1,re,s);
|
||
if(typeof match === "number")return 0;
|
||
var substr=match[1];
|
||
return [0,substr]}
|
||
function execp(pos,len,re,s)
|
||
{var match=exec_internal(cst_Re_execp,pos,len,0,0,re,s);
|
||
return typeof match === "number"?0:1}
|
||
function exec_partial(pos,len,re,s)
|
||
{var match=exec_internal(cst_Re_exec_partial,pos,len,1,0,re,s);
|
||
return typeof match === "number"?match?939392865:-1062743954:782112175}
|
||
function marked(g,p){return caml_call2(Set[3],p,g[3])}
|
||
function mark_set(g){return g[3]}
|
||
function all_seq(opt,len,re,s)
|
||
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
|
||
if(pos < 0)caml_call1(Stdlib[1],cst_Re_all);
|
||
if(len)
|
||
{var
|
||
l=len[1],
|
||
_e9_=l < 0?1:0,
|
||
_e__=_e9_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0);
|
||
if(_e__)caml_call1(Stdlib[1],cst_Re_all$0);
|
||
var limit=pos + l | 0}
|
||
else
|
||
var limit=caml_ml_string_length(s);
|
||
function aux(pos,param)
|
||
{if(limit <= pos)return 0;
|
||
var match=match_str(1,0,re,s,pos,limit - pos | 0);
|
||
if(typeof match === "number")return 0;
|
||
var
|
||
substr=match[1],
|
||
match$0=caml_call2(Group[2],substr,0),
|
||
p2=match$0[2],
|
||
p1=match$0[1],
|
||
pos$0=p1 === p2?p2 + 1 | 0:p2;
|
||
return [0,substr,function(_fa_){return aux(pos$0,_fa_)}]}
|
||
return function(_e$_){return aux(pos,_e$_)}}
|
||
function matches_seq(pos,len,re,s)
|
||
{var _e7_=all_seq(pos,len,re,s);
|
||
function _e8_(sub){return caml_call2(Group[1],sub,0)}
|
||
return caml_call2(Stdlib_seq[3],_e8_,_e7_)}
|
||
function split_full_seq(opt,len,re,s)
|
||
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
|
||
if(pos < 0)caml_call1(Stdlib[1],cst_Re_split);
|
||
if(len)
|
||
{var
|
||
l=len[1],
|
||
_eW_=l < 0?1:0,
|
||
_eX_=_eW_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0);
|
||
if(_eX_)caml_call1(Stdlib[1],cst_Re_split$0);
|
||
var limit=pos + l | 0}
|
||
else
|
||
var limit=caml_ml_string_length(s);
|
||
function aux(state,i,pos$0,param)
|
||
{if(typeof state === "number")
|
||
{if(limit <= pos$0)
|
||
{if(i < limit)
|
||
{var
|
||
sub=caml_call3(Stdlib_string[4],s,i,limit - i | 0),
|
||
_e0_=i + 1 | 0;
|
||
return [0,
|
||
[0,936573133,sub],
|
||
function(_e6_){return aux(state,_e0_,pos$0,_e6_)}]}
|
||
return 0}
|
||
var match=match_str(1,0,re,s,pos$0,limit - pos$0 | 0);
|
||
if(typeof match === "number")
|
||
{if(match)return 0;
|
||
if(i < limit)
|
||
{var text=caml_call3(Stdlib_string[4],s,i,limit - i | 0);
|
||
return [0,
|
||
[0,936573133,text],
|
||
function(_e5_){return aux(state,limit,pos$0,_e5_)}]}
|
||
return 0}
|
||
var
|
||
substr=match[1],
|
||
match$0=caml_call2(Group[2],substr,0),
|
||
p2=match$0[2],
|
||
p1=match$0[1],
|
||
pos$1=p1 === p2?p2 + 1 | 0:p2;
|
||
if(pos < p1)
|
||
{var
|
||
text$0=caml_call3(Stdlib_string[4],s,i,p1 - i | 0),
|
||
state$0=[0,73271853,[0,-363573681,substr]];
|
||
return [0,
|
||
[0,936573133,text$0],
|
||
function(_e4_){return aux(state$0,p2,pos$1,_e4_)}]}
|
||
return [0,
|
||
[0,-363573681,substr],
|
||
function(_e3_){return aux(state,p2,pos$1,_e3_)}]}
|
||
var x=state[2],_e1_=814535476;
|
||
return [0,x,function(_e2_){return aux(_e1_,i,pos$0,_e2_)}]}
|
||
var _eY_=814535476;
|
||
return function(_eZ_){return aux(_eY_,pos,pos,_eZ_)}}
|
||
function split_seq(pos,len,re,s)
|
||
{var seq=split_full_seq(pos,len,re,s);
|
||
function filter(seq,param)
|
||
{var seq$0=seq;
|
||
for(;;)
|
||
{var match=caml_call1(seq$0,0);
|
||
if(match)
|
||
{var _eU_=match[1];
|
||
if(936573133 <= _eU_[1])
|
||
{var tl=match[2],s=_eU_[2];
|
||
return [0,s,function(_eV_){return filter(tl,_eV_)}]}
|
||
var seq$1=match[2],seq$0=seq$1;
|
||
continue}
|
||
return 0}}
|
||
return function(_eT_){return filter(seq,_eT_)}}
|
||
function list_of_seq(s)
|
||
{var _eQ_=0;
|
||
function _eR_(l,x){return [0,x,l]}
|
||
var _eS_=caml_call3(Stdlib_seq[7],_eR_,_eQ_,s);
|
||
return caml_call1(Stdlib_list[9],_eS_)}
|
||
function all$0(pos,len,re,s){return list_of_seq(all_seq(pos,len,re,s))}
|
||
function matches(pos,len,re,s)
|
||
{return list_of_seq(matches_seq(pos,len,re,s))}
|
||
function split_full(pos,len,re,s)
|
||
{return list_of_seq(split_full_seq(pos,len,re,s))}
|
||
function split$0(pos,len,re,s)
|
||
{return list_of_seq(split_seq(pos,len,re,s))}
|
||
function gen_of_seq(s)
|
||
{var r=[0,s];
|
||
return function(param)
|
||
{var match=caml_call1(r[1],0);
|
||
if(match){var tl=match[2],x=match[1];r[1] = tl;return [0,x]}
|
||
return 0}}
|
||
function split_gen(pos,len,re,s)
|
||
{return gen_of_seq(split_seq(pos,len,re,s))}
|
||
function split_full_gen(pos,len,re,s)
|
||
{return gen_of_seq(split_full_seq(pos,len,re,s))}
|
||
function all_gen(pos,len,re,s){return gen_of_seq(all_seq(pos,len,re,s))}
|
||
function matches_gen(pos,len,re,s)
|
||
{return gen_of_seq(matches_seq(pos,len,re,s))}
|
||
function replace(opt,len,_eM_,re,f,s)
|
||
{if(opt)var sth=opt[1],pos=sth;else var pos=0;
|
||
if(_eM_)var sth$0=_eM_[1],all=sth$0;else var all=1;
|
||
if(pos < 0)caml_call1(Stdlib[1],cst_Re_replace);
|
||
if(len)
|
||
{var
|
||
l=len[1],
|
||
_eN_=l < 0?1:0,
|
||
_eO_=_eN_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0);
|
||
if(_eO_)caml_call1(Stdlib[1],cst_Re_replace$0);
|
||
var limit=pos + l | 0}
|
||
else
|
||
var limit=caml_ml_string_length(s);
|
||
var buf=caml_call1(Stdlib_buffer[1],caml_ml_string_length(s)),pos$0=pos;
|
||
for(;;)
|
||
{if(pos$0 < limit)
|
||
{var match=match_str(1,0,re,s,pos$0,limit - pos$0 | 0);
|
||
if(typeof match === "number")
|
||
{if(! match)
|
||
caml_call4(Stdlib_buffer[16],buf,s,pos$0,limit - pos$0 | 0)}
|
||
else
|
||
{var
|
||
substr=match[1],
|
||
match$0=caml_call2(Group[2],substr,0),
|
||
p2=match$0[2],
|
||
p1=match$0[1];
|
||
caml_call4(Stdlib_buffer[16],buf,s,pos$0,p1 - pos$0 | 0);
|
||
var replacing=caml_call1(f,substr);
|
||
caml_call2(Stdlib_buffer[14],buf,replacing);
|
||
if(all)
|
||
{if(p1 === p2)
|
||
{if(p2 < limit)
|
||
{var _eP_=caml_string_get(s,p2);
|
||
caml_call2(Stdlib_buffer[10],buf,_eP_)}
|
||
var pos$1=p2 + 1 | 0}
|
||
else
|
||
var pos$1=p2;
|
||
var pos$0=pos$1;
|
||
continue}
|
||
caml_call4(Stdlib_buffer[16],buf,s,p2,limit - p2 | 0)}}
|
||
return caml_call1(Stdlib_buffer[2],buf)}}
|
||
function replace_string(pos,len,all,re,by,s)
|
||
{return replace(pos,len,all,re,function(param){return by},s)}
|
||
function witness(t)
|
||
{function witness(param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(typeof param$0 === "number")
|
||
return cst$1;
|
||
else
|
||
switch(param$0[0])
|
||
{case 0:
|
||
var
|
||
c=param$0[1],
|
||
_eG_=pick(c),
|
||
_eH_=caml_call1(Stdlib_char[1],_eG_);
|
||
return caml_call2(Stdlib_string[1],1,_eH_);
|
||
case 1:
|
||
var xs=param$0[1],_eI_=caml_call2(Stdlib_list[17],witness,xs);
|
||
return caml_call2(Stdlib_string[7],cst$2,_eI_);
|
||
case 2:
|
||
var _eJ_=param$0[1];
|
||
if(_eJ_){var param$1=_eJ_[1],param$0=param$1;continue}
|
||
throw [0,Assert_failure,_cv_];
|
||
case 3:
|
||
var
|
||
from=param$0[2],
|
||
r=param$0[1],
|
||
w=witness(r),
|
||
b=
|
||
caml_call1
|
||
(Stdlib_buffer[1],
|
||
runtime.caml_mul(caml_ml_string_length(w),from)),
|
||
_eK_=1;
|
||
if(! (from < 1))
|
||
{var i=_eK_;
|
||
for(;;)
|
||
{caml_call2(Stdlib_buffer[14],b,w);
|
||
var _eL_=i + 1 | 0;
|
||
if(from !== i){var i=_eL_;continue}
|
||
break}}
|
||
return caml_call1(Stdlib_buffer[2],b);
|
||
case 10:var param$3=param$0[1],param$0=param$3;continue;
|
||
case 4:
|
||
case 5:
|
||
case 14:var param$2=param$0[2];break;
|
||
case 11:
|
||
case 12:
|
||
case 13:throw [0,Assert_failure,_cw_];
|
||
default:var param$2=param$0[1]}
|
||
var param$0=param$2;
|
||
continue}}
|
||
return witness(handle_case(0,t))}
|
||
var
|
||
get$0=Group[1],
|
||
get_ofs=Group[2],
|
||
get_all=Group[5],
|
||
get_all_ofs=Group[6],
|
||
test$0=Group[7],
|
||
Seq=[0,all_seq,matches_seq,split_seq,split_full_seq],
|
||
Mark=[0,marked,Set,mark_set,equal$0,compare$1],
|
||
include$0=
|
||
[0,
|
||
Group,
|
||
compile,
|
||
exec,
|
||
exec_opt,
|
||
execp,
|
||
exec_partial,
|
||
Mark,
|
||
Seq,
|
||
all$0,
|
||
all_gen,
|
||
all_seq,
|
||
matches,
|
||
matches_gen,
|
||
matches_seq,
|
||
split$0,
|
||
split_gen,
|
||
split_seq,
|
||
split_full,
|
||
split_full_gen,
|
||
split_full_seq,
|
||
replace,
|
||
replace_string,
|
||
str,
|
||
char$0,
|
||
alt$0,
|
||
seq$1,
|
||
empty$2,
|
||
epsilon,
|
||
rep$0,
|
||
rep1,
|
||
repn,
|
||
opt,
|
||
bol,
|
||
eol,
|
||
bow,
|
||
eow,
|
||
bos,
|
||
eos,
|
||
leol,
|
||
start$0,
|
||
stop$0,
|
||
word,
|
||
not_boundary,
|
||
whole_string,
|
||
longest,
|
||
shortest,
|
||
first$0,
|
||
greedy,
|
||
non_greedy,
|
||
group,
|
||
no_group,
|
||
nest,
|
||
mark$0,
|
||
set,
|
||
rg,
|
||
inter$0,
|
||
diff$0,
|
||
compl,
|
||
any,
|
||
notnl,
|
||
alnum,
|
||
wordc,
|
||
alpha,
|
||
ascii,
|
||
blank,
|
||
cntrl,
|
||
digit,
|
||
graph,
|
||
lower,
|
||
print,
|
||
punct,
|
||
space,
|
||
upper,
|
||
xdigit,
|
||
case$0,
|
||
no_case,
|
||
pp$5,
|
||
print_re,
|
||
print_re,
|
||
View,
|
||
witness,
|
||
get$0,
|
||
get_ofs,
|
||
get_all,
|
||
get_all_ofs,
|
||
test$0,
|
||
marked,
|
||
mark_set];
|
||
caml_register_global(155,include$0,"Re__Core");
|
||
var
|
||
Parse_error=[248,cst_Re_Emacs_Parse_error,caml_fresh_oo_id(0)],
|
||
Not_supported=[248,cst_Re_Emacs_Not_supported,caml_fresh_oo_id(0)];
|
||
function re(opt$0,s)
|
||
{if(opt$0)var sth=opt$0[1],case$0=sth;else var case$0=1;
|
||
var i=[0,0],l=caml_ml_string_length(s);
|
||
function eos$0(param){return i[1] === l?1:0}
|
||
function test2(c$0,c)
|
||
{var _eD_=(i[1] + 1 | 0) < l?1:0;
|
||
if(_eD_)
|
||
var
|
||
_eE_=caml_string_get(s,i[1]) === c$0?1:0,
|
||
_eF_=_eE_?caml_string_get(s,i[1] + 1 | 0) === c?1:0:_eE_;
|
||
else
|
||
var _eF_=_eD_;
|
||
return _eF_}
|
||
function accept(c)
|
||
{var
|
||
_eB_=1 - eos$0(0),
|
||
_eC_=_eB_?caml_string_get(s,i[1]) === c?1:0:_eB_;
|
||
if(_eC_)i[1]++;
|
||
return _eC_}
|
||
function accept2(c$0,c)
|
||
{var r=test2(c$0,c);if(r)i[1] = i[1] + 2 | 0;return r}
|
||
function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r}
|
||
function regexp(param)
|
||
{var left=branch(0),left$0=left;
|
||
for(;;)
|
||
{if(accept2(92,124))
|
||
{var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1;
|
||
continue}
|
||
return left$0}}
|
||
function branch(param)
|
||
{var left=0;
|
||
for(;;)
|
||
{if(! eos$0(0) && ! test2(92,124) && ! test2(92,41))
|
||
{if(accept(46))
|
||
var r=notnl;
|
||
else
|
||
if(accept(94))
|
||
var r=bol;
|
||
else
|
||
if(accept(36))
|
||
var r=eol;
|
||
else
|
||
if(accept(91))
|
||
var r=accept(94)?compl(bracket(0)):alt$0(bracket(0));
|
||
else
|
||
if(accept(92))
|
||
if(accept(40))
|
||
{var r$0=regexp(0);
|
||
if(1 - accept2(92,41))throw Parse_error;
|
||
var r=[6,r$0]}
|
||
else
|
||
if(accept(96))
|
||
var r=bos;
|
||
else
|
||
if(accept(39))
|
||
var r=eos;
|
||
else
|
||
if(accept(61))
|
||
var r=start$0;
|
||
else
|
||
if(accept(98))
|
||
var r=alt$0([0,bow,[0,eow,0]]);
|
||
else
|
||
if(accept(66))
|
||
var r=not_boundary;
|
||
else
|
||
if(accept(60))
|
||
var r=bow;
|
||
else
|
||
if(accept(62))
|
||
var r=eow;
|
||
else
|
||
if(accept(119))
|
||
var r=alt$0([0,alnum,[0,char$0(95),0]]);
|
||
else
|
||
if(accept(87))
|
||
var r=compl([0,alnum,[0,char$0(95),0]]);
|
||
else
|
||
{if(eos$0(0))throw Parse_error;
|
||
var c=get(0),switch$0=0;
|
||
if(63 <= c)
|
||
{if(91 <= c)
|
||
{if(! (95 <= c))switch$0 = 1}
|
||
else
|
||
if(! (64 <= c))switch$0 = 1}
|
||
else
|
||
if(48 <= c)
|
||
{if(! (58 <= c))throw Not_supported}
|
||
else
|
||
if(36 <= c)
|
||
switch(c - 36 | 0)
|
||
{case 0:case 6:case 7:case 10:switch$0 = 1;break}
|
||
if(! switch$0)throw Parse_error;
|
||
var r=char$0(c)}
|
||
else
|
||
{if(eos$0(0))throw Parse_error;
|
||
var c$0=get(0),switch$1=0;
|
||
if(44 <= c$0)
|
||
{if(63 === c$0)switch$1 = 1}
|
||
else
|
||
if(42 <= c$0)switch$1 = 1;
|
||
if(switch$1)throw Parse_error;
|
||
var r=char$0(c$0)}
|
||
var
|
||
_eA_=accept(42)?rep$0(r):accept(43)?rep1(r):accept(63)?opt(r):r,
|
||
left$0=[0,_eA_,left],
|
||
left=left$0;
|
||
continue}
|
||
return seq$1(caml_call1(Stdlib_list[9],left))}}
|
||
function bracket(s)
|
||
{var s$0=s;
|
||
for(;;)
|
||
{if(0 !== s$0 && accept(93))return s$0;
|
||
var c=char$1(0);
|
||
if(accept(45))
|
||
{if(accept(93))
|
||
{var _ez_=[0,char$0(45),s$0];return [0,char$0(c),_ez_]}
|
||
var c$0=char$1(0),s$1=[0,rg(c,c$0),s$0],s$0=s$1;
|
||
continue}
|
||
var s$2=[0,char$0(c),s$0],s$0=s$2;
|
||
continue}}
|
||
function char$1(param){if(eos$0(0))throw Parse_error;return get(0)}
|
||
var r=regexp(0);
|
||
if(1 - eos$0(0))throw Parse_error;
|
||
return case$0?r:[10,r]}
|
||
function compile_pat(opt,s)
|
||
{if(opt)var sth=opt[1],case$0=sth;else var case$0=1;
|
||
return compile(re([0,case$0],s))}
|
||
var Re_Emacs=[0,Parse_error,Not_supported,re,compile,compile_pat];
|
||
caml_register_global(156,Re_Emacs,"Re__Emacs");
|
||
function compile_regexp(s,c)
|
||
{var
|
||
re$0=re([0,1 - c],s),
|
||
_ew_=[246,function(_ey_){return compile(re$0)}];
|
||
return [0,
|
||
re$0,
|
||
[246,
|
||
function(_ex_){return compile(seq$1([0,start$0,[0,re$0,0]]))}],
|
||
_ew_]}
|
||
var state=[0,0];
|
||
function string_match(re,s,p)
|
||
{try
|
||
{var
|
||
_er_=re[2],
|
||
_es_=caml_obj_tag(_er_),
|
||
_et_=
|
||
250 === _es_
|
||
?_er_[1]
|
||
:246 === _es_?caml_call1(CamlinternalLazy[2],_er_):_er_;
|
||
state[1] = [0,exec([0,p],0,_et_,s)];
|
||
var _eu_=1;
|
||
return _eu_}
|
||
catch(_ev_)
|
||
{_ev_ = caml_wrap_exception(_ev_);
|
||
if(_ev_ === Stdlib[8]){state[1] = 0;return 0}
|
||
throw _ev_}}
|
||
function string_partial_match(re,s,p)
|
||
{var
|
||
_eo_=re[2],
|
||
_ep_=caml_obj_tag(_eo_),
|
||
_eq_=
|
||
250 === _ep_
|
||
?_eo_[1]
|
||
:246 === _ep_?caml_call1(CamlinternalLazy[2],_eo_):_eo_,
|
||
match=exec_partial([0,p],0,_eq_,s);
|
||
return 782112175 === match?string_match(re,s,p):939392865 <= match?1:0}
|
||
function search_forward(re,s,p)
|
||
{try
|
||
{var
|
||
_ej_=re[3],
|
||
_ek_=caml_obj_tag(_ej_),
|
||
_el_=
|
||
250 === _ek_
|
||
?_ej_[1]
|
||
:246 === _ek_?caml_call1(CamlinternalLazy[2],_ej_):_ej_,
|
||
res=exec([0,p],0,_el_,s);
|
||
state[1] = [0,res];
|
||
var _em_=caml_call2(Group[2],res,0)[1];
|
||
return _em_}
|
||
catch(_en_)
|
||
{_en_ = caml_wrap_exception(_en_);
|
||
if(_en_ === Stdlib[8]){state[1] = 0;throw Stdlib[8]}
|
||
throw _en_}}
|
||
function search_backward(re,s,p)
|
||
{var p$0=p;
|
||
for(;;)
|
||
try
|
||
{var
|
||
_ef_=re[2],
|
||
_eg_=caml_obj_tag(_ef_),
|
||
_eh_=
|
||
250 === _eg_
|
||
?_ef_[1]
|
||
:246 === _eg_?caml_call1(CamlinternalLazy[2],_ef_):_ef_,
|
||
res=exec([0,p$0],0,_eh_,s);
|
||
state[1] = [0,res];
|
||
return p$0}
|
||
catch(_ei_)
|
||
{_ei_ = caml_wrap_exception(_ei_);
|
||
if(_ei_ === Stdlib[8])
|
||
{state[1] = 0;
|
||
if(0 === p$0)throw Stdlib[8];
|
||
var p$1=p$0 - 1 | 0,p$0=p$1;
|
||
continue}
|
||
throw _ei_}}
|
||
function valid_group(n)
|
||
{var _eb_=0 <= n?1:0;
|
||
if(_eb_)
|
||
{var _ec_=n < 10?1:0;
|
||
if(_ec_)
|
||
{var _ed_=state[1];
|
||
if(_ed_){var m=_ed_[1];return n < caml_call1(Group[8],m)?1:0}
|
||
var _ee_=0}
|
||
else
|
||
var _ee_=_ec_}
|
||
else
|
||
var _ee_=_eb_;
|
||
return _ee_}
|
||
function offset_group(i)
|
||
{var _ea_=state[1];
|
||
if(_ea_){var m=_ea_[1];return caml_call2(Group[2],m,i)}
|
||
throw Stdlib[8]}
|
||
function group_len(i)
|
||
{try
|
||
{var match=offset_group(i),e=match[2],b=match[1],_d__=e - b | 0;
|
||
return _d__}
|
||
catch(_d$_)
|
||
{_d$_ = caml_wrap_exception(_d$_);
|
||
if(_d$_ === Stdlib[8])return 0;
|
||
throw _d$_}}
|
||
function replace$0(orig,repl,p,res,q,len)
|
||
{var p$0=p,q$0=q;
|
||
for(;;)
|
||
{var _d7_=p$0 < len?1:0;
|
||
if(_d7_)
|
||
{var c=caml_string_get(repl,p$0);
|
||
if(92 === c)
|
||
{var c$0=caml_string_get(repl,p$0 + 1 | 0);
|
||
if(58 <= c$0)
|
||
{if(92 === c$0)
|
||
{caml_bytes_set(res,q$0,92);
|
||
var q$1=q$0 + 1 | 0,p$1=p$0 + 2 | 0,p$0=p$1,q$0=q$1;
|
||
continue}}
|
||
else
|
||
if(48 <= c$0)
|
||
{try
|
||
{var
|
||
match=offset_group(c$0 - 48 | 0),
|
||
e=match[2],
|
||
b=match[1],
|
||
d$0=e - b | 0;
|
||
if(0 < d$0)caml_call5(Stdlib_string[6],orig,b,res,q$0,d$0);
|
||
var d=d$0}
|
||
catch(_d9_)
|
||
{_d9_ = caml_wrap_exception(_d9_);
|
||
if(_d9_ !== Stdlib[8])throw _d9_;
|
||
var d=0,_d8_=_d9_}
|
||
var q$3=q$0 + d | 0,p$3=p$0 + 2 | 0,p$0=p$3,q$0=q$3;
|
||
continue}
|
||
caml_bytes_set(res,q$0,92);
|
||
caml_bytes_set(res,q$0 + 1 | 0,c$0);
|
||
var q$2=q$0 + 2 | 0,p$2=p$0 + 2 | 0,p$0=p$2,q$0=q$2;
|
||
continue}
|
||
caml_bytes_set(res,q$0,c);
|
||
var q$4=q$0 + 1 | 0,p$4=p$0 + 1 | 0,p$0=p$4,q$0=q$4;
|
||
continue}
|
||
return _d7_}}
|
||
function replacement_text(repl,orig)
|
||
{var len=caml_ml_string_length(repl),p=0,q=0;
|
||
for(;;)
|
||
{if(p < len)
|
||
{if(92 === caml_string_get(repl,p))
|
||
{var p$0=p + 1 | 0;
|
||
if(p$0 === len)
|
||
caml_call1(Stdlib[2],cst_Str_replace_illegal_backsl);
|
||
var c=caml_string_get(repl,p$0),switch$0=0;
|
||
if(58 <= c)
|
||
if(92 === c)var q$0=q + 1 | 0;else switch$0 = 1;
|
||
else
|
||
if(48 <= c)
|
||
var q$0=q + group_len(c - 48 | 0) | 0;
|
||
else
|
||
switch$0 = 1;
|
||
if(switch$0)var q$0=q + 2 | 0;
|
||
var p$1=p$0 + 1 | 0,p=p$1,q=q$0;
|
||
continue}
|
||
var q$1=q + 1 | 0,p$2=p + 1 | 0,p=p$2,q=q$1;
|
||
continue}
|
||
var res=caml_create_bytes(q);
|
||
replace$0(orig,repl,0,res,0,caml_ml_string_length(repl));
|
||
return caml_call1(Stdlib_bytes[42],res)}}
|
||
function quote$0(s)
|
||
{var
|
||
len=caml_ml_string_length(s),
|
||
buf=caml_call1(Stdlib_buffer[1],2 * len | 0),
|
||
_d3_=len - 1 | 0,
|
||
_d2_=0;
|
||
if(! (_d3_ < 0))
|
||
{var i=_d2_;
|
||
for(;;)
|
||
{var c=caml_string_get(s,i),_d4_=c - 63 | 0,switch$0=0;
|
||
if(31 < _d4_ >>> 0)
|
||
{var _d5_=_d4_ + 27 | 0;
|
||
if(! (10 < _d5_ >>> 0))
|
||
switch(_d5_){case 0:case 6:case 7:case 10:switch$0 = 1;break}}
|
||
else
|
||
if(26 < (_d4_ - 1 | 0) >>> 0)switch$0 = 1;
|
||
if(switch$0)
|
||
{caml_call2(Stdlib_buffer[10],buf,92);
|
||
caml_call2(Stdlib_buffer[10],buf,c)}
|
||
else
|
||
caml_call2(Stdlib_buffer[10],buf,c);
|
||
var _d6_=i + 1 | 0;
|
||
if(_d3_ !== i){var i=_d6_;continue}
|
||
break}}
|
||
return caml_call1(Stdlib_buffer[2],buf)}
|
||
function string_before(s,n){return caml_call3(Stdlib_string[4],s,0,n)}
|
||
function string_after(s,n)
|
||
{return caml_call3(Stdlib_string[4],s,n,caml_ml_string_length(s) - n | 0)}
|
||
function first_chars(s,n){return caml_call3(Stdlib_string[4],s,0,n)}
|
||
function last_chars(s,n)
|
||
{return caml_call3(Stdlib_string[4],s,caml_ml_string_length(s) - n | 0,n)}
|
||
function regexp(e){return compile_regexp(e,0)}
|
||
function regexp_case_fold(e){return compile_regexp(e,1)}
|
||
function regexp_string(s){return compile_regexp(quote$0(s),0)}
|
||
function regexp_string_case_fold(s){return compile_regexp(quote$0(s),1)}
|
||
function group_beginning(n)
|
||
{if(1 - valid_group(n))caml_call1(Stdlib[1],cst_Str_group_beginning);
|
||
var pos=offset_group(n)[1];
|
||
if(-1 === pos)throw Stdlib[8];
|
||
return pos}
|
||
function group_end(n)
|
||
{if(1 - valid_group(n))caml_call1(Stdlib[1],cst_Str_group_end);
|
||
var pos=offset_group(n)[2];
|
||
if(-1 === pos)throw Stdlib[8];
|
||
return pos}
|
||
function matched_group(n,txt)
|
||
{var match=offset_group(n),e=match[2],b=match[1];
|
||
return caml_call3(Stdlib_string[4],txt,b,e - b | 0)}
|
||
function replace_matched(repl,matched)
|
||
{return replacement_text(repl,matched)}
|
||
function match_beginning(param){return group_beginning(0)}
|
||
function match_end(param){return group_end(0)}
|
||
function matched_string(txt){return matched_group(0,txt)}
|
||
function substitute_first(expr,repl_fun,text)
|
||
{try
|
||
{var
|
||
pos=search_forward(expr,text,0),
|
||
_dX_=[0,string_after(text,match_end(0)),0],
|
||
_dY_=[0,caml_call1(repl_fun,text),_dX_],
|
||
_dZ_=[0,string_before(text,pos),_dY_],
|
||
_d0_=caml_call2(Stdlib_string[7],cst$3,_dZ_);
|
||
return _d0_}
|
||
catch(_d1_)
|
||
{_d1_ = caml_wrap_exception(_d1_);
|
||
if(_d1_ === Stdlib[8])return text;
|
||
throw _d1_}}
|
||
function global_substitute(expr,repl_fun,text)
|
||
{function replace(accu,start,last_was_empty)
|
||
{try
|
||
{var startpos=last_was_empty?start + 1 | 0:start;
|
||
if(caml_ml_string_length(text) < startpos)throw Stdlib[8];
|
||
var
|
||
pos=search_forward(expr,text,startpos),
|
||
end_pos=match_end(0),
|
||
repl_text=caml_call1(repl_fun,text),
|
||
_dV_=
|
||
replace
|
||
([0,
|
||
repl_text,
|
||
[0,
|
||
caml_call3(Stdlib_string[4],text,start,pos - start | 0),
|
||
accu]],
|
||
end_pos,
|
||
end_pos === pos?1:0);
|
||
return _dV_}
|
||
catch(_dW_)
|
||
{_dW_ = caml_wrap_exception(_dW_);
|
||
if(_dW_ === Stdlib[8])return [0,string_after(text,start),accu];
|
||
throw _dW_}}
|
||
var _dT_=replace(0,0,0),_dU_=caml_call1(Stdlib_list[9],_dT_);
|
||
return caml_call2(Stdlib_string[7],cst$4,_dU_)}
|
||
function global_replace(expr,repl,text)
|
||
{return global_substitute
|
||
(expr,function(_dS_){return replacement_text(repl,_dS_)},text)}
|
||
function replace_first(expr,repl,text)
|
||
{return substitute_first
|
||
(expr,function(_dR_){return replacement_text(repl,_dR_)},text)}
|
||
function search_forward_progress(re,s,p)
|
||
{var pos=search_forward(re,s,p);
|
||
if(p < match_end(0))return pos;
|
||
if(p < caml_ml_string_length(s))return search_forward(re,s,p + 1 | 0);
|
||
throw Stdlib[8]}
|
||
function bounded_split(expr,text,num)
|
||
{var start=string_match(expr,text,0)?match_end(0):0;
|
||
function split(accu,start,n)
|
||
{if(caml_ml_string_length(text) <= start)return accu;
|
||
if(1 === n)return [0,string_after(text,start),accu];
|
||
try
|
||
{var
|
||
pos=search_forward_progress(expr,text,start),
|
||
_dO_=match_end(0),
|
||
_dP_=
|
||
split
|
||
([0,caml_call3(Stdlib_string[4],text,start,pos - start | 0),accu],
|
||
_dO_,
|
||
n - 1 | 0);
|
||
return _dP_}
|
||
catch(_dQ_)
|
||
{_dQ_ = caml_wrap_exception(_dQ_);
|
||
if(_dQ_ === Stdlib[8])return [0,string_after(text,start),accu];
|
||
throw _dQ_}}
|
||
var _dN_=split(0,start,num);
|
||
return caml_call1(Stdlib_list[9],_dN_)}
|
||
function split$1(expr,text){return bounded_split(expr,text,0)}
|
||
function bounded_split_delim(expr,text,num)
|
||
{function split(accu,start,n)
|
||
{if(caml_ml_string_length(text) < start)return accu;
|
||
if(1 === n)return [0,string_after(text,start),accu];
|
||
try
|
||
{var
|
||
pos=search_forward_progress(expr,text,start),
|
||
_dK_=match_end(0),
|
||
_dL_=
|
||
split
|
||
([0,caml_call3(Stdlib_string[4],text,start,pos - start | 0),accu],
|
||
_dK_,
|
||
n - 1 | 0);
|
||
return _dL_}
|
||
catch(_dM_)
|
||
{_dM_ = caml_wrap_exception(_dM_);
|
||
if(_dM_ === Stdlib[8])return [0,string_after(text,start),accu];
|
||
throw _dM_}}
|
||
if(runtime.caml_string_equal(text,cst$5))return 0;
|
||
var _dJ_=split(0,0,num);
|
||
return caml_call1(Stdlib_list[9],_dJ_)}
|
||
function split_delim(expr,text){return bounded_split_delim(expr,text,0)}
|
||
function bounded_full_split(expr,text,num)
|
||
{function split(accu,start,n)
|
||
{if(caml_ml_string_length(text) <= start)return accu;
|
||
if(1 === n)return [0,[0,string_after(text,start)],accu];
|
||
try
|
||
{var
|
||
pos=search_forward_progress(expr,text,start),
|
||
s=matched_string(text);
|
||
if(start < pos)
|
||
var
|
||
_dG_=match_end(0),
|
||
_dH_=
|
||
split
|
||
([0,
|
||
[1,s],
|
||
[0,
|
||
[0,caml_call3(Stdlib_string[4],text,start,pos - start | 0)],
|
||
accu]],
|
||
_dG_,
|
||
n - 1 | 0);
|
||
else
|
||
var _dH_=split([0,[1,s],accu],match_end(0),n - 1 | 0);
|
||
return _dH_}
|
||
catch(_dI_)
|
||
{_dI_ = caml_wrap_exception(_dI_);
|
||
if(_dI_ === Stdlib[8])return [0,[0,string_after(text,start)],accu];
|
||
throw _dI_}}
|
||
var _dF_=split(0,0,num);
|
||
return caml_call1(Stdlib_list[9],_dF_)}
|
||
function full_split(expr,text){return bounded_full_split(expr,text,0)}
|
||
var
|
||
Re_Str=
|
||
[0,
|
||
regexp,
|
||
regexp_case_fold,
|
||
quote$0,
|
||
regexp_string,
|
||
regexp_string_case_fold,
|
||
string_match,
|
||
search_forward,
|
||
search_backward,
|
||
string_partial_match,
|
||
matched_string,
|
||
match_beginning,
|
||
match_end,
|
||
matched_group,
|
||
group_beginning,
|
||
group_end,
|
||
global_replace,
|
||
replace_first,
|
||
global_substitute,
|
||
substitute_first,
|
||
replace_matched,
|
||
split$1,
|
||
bounded_split,
|
||
split_delim,
|
||
bounded_split_delim,
|
||
full_split,
|
||
bounded_full_split,
|
||
string_before,
|
||
string_after,
|
||
first_chars,
|
||
last_chars];
|
||
caml_register_global(158,Re_Str,"Re__Str");
|
||
var Parse_error$0=[248,cst_Re_Glob_Parse_error,caml_fresh_oo_id(0)];
|
||
function mul(l$0,l)
|
||
{function _dC_(s)
|
||
{function _dE_(s$0){return caml_call2(Stdlib[28],s,s$0)}
|
||
return caml_call2(Stdlib_list[17],_dE_,l)}
|
||
var _dD_=caml_call2(Stdlib_list[17],_dC_,l$0);
|
||
return caml_call1(Stdlib_list[14],_dD_)}
|
||
function explicit_period(t)
|
||
{var _dy_=t[6];
|
||
if(_dy_)
|
||
{var _dz_=t[3];
|
||
if(_dz_)var _dA_=_dz_;else var _dB_=t[4],_dA_=_dB_?t[5]:_dB_}
|
||
else
|
||
var _dA_=_dy_;
|
||
return _dA_}
|
||
function append(opt,t,piece)
|
||
{if(opt)
|
||
var sth=opt[1],am_at_start_of_component=sth;
|
||
else
|
||
var am_at_start_of_component=0;
|
||
return [0,[0,piece,t[1]],t[2],0,am_at_start_of_component,t[5],t[6]]}
|
||
function next(t)
|
||
{var _dx_=t[2];
|
||
if(_dx_)
|
||
{var remaining=_dx_[2],piece=_dx_[1];
|
||
return [0,[0,piece,[0,t[1],remaining,t[3],t[4],t[5],t[6]]]]}
|
||
return 0}
|
||
function one(explicit_slash,explicit_period)
|
||
{var
|
||
_dt_=0,
|
||
_du_=explicit_period?[0,char$0(46),0]:0,
|
||
_dv_=[0,_du_,_dt_],
|
||
_dw_=explicit_slash?[0,char$0(47),0]:0;
|
||
return compl(caml_call1(Stdlib_list[13],[0,_dw_,_dv_]))}
|
||
function enclosed(enclosed)
|
||
{if(0 === enclosed[0]){var c=enclosed[1];return char$0(c)}
|
||
var high=enclosed[2],low=enclosed[1];
|
||
return rg(low,high)}
|
||
function enclosed_set(explicit_slash,explicit_period,kind,set)
|
||
{var
|
||
set$0=caml_call2(Stdlib_list[17],enclosed,set),
|
||
enclosure=596216810 <= kind?alt$0(set$0):compl(set$0);
|
||
return inter$0([0,enclosure,[0,one(explicit_slash,explicit_period),0]])}
|
||
function exactly(state,c){return append([0,47 === c?1:0],state,char$0(c))}
|
||
function glob(opt$0,_dh_,_dg_,_df_,s)
|
||
{if(opt$0)var sth=opt$0[1],anchored=sth;else var anchored=0;
|
||
if(_dh_)var sth$0=_dh_[1],pathname=sth$0;else var pathname=1;
|
||
if(_dg_)var sth$1=_dg_[1],period=sth$1;else var period=1;
|
||
if(_df_)var sth$2=_df_[1],expand_braces=sth$2;else var expand_braces=0;
|
||
function to_re(s)
|
||
{var i=[0,0],l=caml_ml_string_length(s);
|
||
function eos(param){return i[1] === l?1:0}
|
||
function read(c)
|
||
{var _ds_=1 - eos(0),r=_ds_?caml_string_get(s,i[1]) === c?1:0:_ds_;
|
||
if(r)i[1]++;
|
||
return r}
|
||
function char$0(param)
|
||
{read(92);
|
||
if(eos(0))throw Parse_error$0;
|
||
var r=caml_string_get(s,i[1]);
|
||
i[1]++;
|
||
return r}
|
||
function enclosed(param)
|
||
{var s=0;
|
||
for(;;)
|
||
{if(0 !== s && read(93))return s;
|
||
var c=char$0(0);
|
||
if(read(45))
|
||
{if(read(93))return [0,[0,c],[0,_cx_,s]];
|
||
var c$0=char$0(0),s$0=[0,[1,c,c$0],s],s=s$0;
|
||
continue}
|
||
var s$1=[0,[0,c],s],s=s$1;
|
||
continue}}
|
||
var pieces=0;
|
||
for(;;)
|
||
{if(eos(0))
|
||
{var
|
||
glob=caml_call1(Stdlib_list[9],pieces),
|
||
state=[0,0,glob,1,1,pathname,period],
|
||
state$7=state;
|
||
for(;;)
|
||
{var match$0=next(state$7);
|
||
if(match$0)
|
||
{var
|
||
match$1=match$0[1],
|
||
state$8=match$1[2],
|
||
p=match$1[1],
|
||
explicit_slash$0=state$8[5],
|
||
explicit_period$1=explicit_period(state$8);
|
||
if(typeof p === "number")
|
||
if(0 === p)
|
||
var
|
||
state$9=
|
||
append(0,state$8,one(explicit_slash$0,explicit_period$1));
|
||
else
|
||
{var
|
||
explicit_slash=state$8[5],
|
||
explicit_period$0=explicit_period(state$8);
|
||
if(explicit_period$0)
|
||
if(explicit_slash)
|
||
{var
|
||
_dl_=[0,rep$0(one(1,0)),0],
|
||
not_empty=seq$1([0,one(1,1),_dl_]),
|
||
maybe_empty=opt(not_empty),
|
||
enclosed_set$1=
|
||
function(not_empty)
|
||
{function enclosed_set$0(state,kind,set)
|
||
{var
|
||
_dr_=
|
||
[0,seq$1([0,not_empty,[0,enclosed_set(1,0,kind,set),0]]),0];
|
||
return append
|
||
(0,state,alt$0([0,enclosed_set(1,1,kind,set),_dr_]))}
|
||
return enclosed_set$0},
|
||
enclosed_set$0=enclosed_set$1(not_empty),
|
||
state$0=state$8;
|
||
for(;;)
|
||
{var match=next(state$0);
|
||
if(match)
|
||
{var _dm_=match[1],_dn_=_dm_[1];
|
||
if(typeof _dn_ === "number")
|
||
{if(0 !== _dn_)
|
||
{var state$2=_dm_[2],state$0=state$2;continue}
|
||
var state$1=_dm_[2],_do_=append(0,state$1,not_empty)}
|
||
else
|
||
switch(_dn_[0])
|
||
{case 0:
|
||
var
|
||
state$3=_dm_[2],
|
||
c=_dn_[1],
|
||
not_empty$0=46 === c?not_empty:maybe_empty,
|
||
state$4=append(0,state$3,not_empty$0),
|
||
_do_=exactly(state$4,c);
|
||
break;
|
||
case 1:
|
||
var
|
||
state$5=_dm_[2],
|
||
enclosed$0=_dn_[1],
|
||
_do_=enclosed_set$0(state$5,596216810,enclosed$0);
|
||
break;
|
||
default:
|
||
var
|
||
state$6=_dm_[2],
|
||
enclosed$1=_dn_[1],
|
||
_do_=enclosed_set$0(state$6,-188280562,enclosed$1)}}
|
||
else
|
||
var _do_=append(0,state$0,maybe_empty);
|
||
var _dq_=_do_;
|
||
break}}
|
||
else
|
||
var
|
||
_dp_=[0,rep$0(one(0,0)),0],
|
||
_dq_=
|
||
append
|
||
(0,state$8,opt(seq$1([0,one(0,explicit_period$0),_dp_])));
|
||
else
|
||
var
|
||
_dq_=
|
||
append
|
||
(0,state$8,rep$0(one(explicit_slash,explicit_period$0)));
|
||
var state$9=_dq_}
|
||
else
|
||
switch(p[0])
|
||
{case 0:var c$0=p[1],state$9=exactly(state$8,c$0);break;
|
||
case 1:
|
||
var
|
||
enclosed$2=p[1],
|
||
state$9=
|
||
append
|
||
(0,
|
||
state$8,
|
||
enclosed_set
|
||
(explicit_slash$0,explicit_period$1,596216810,enclosed$2));
|
||
break;
|
||
default:
|
||
var
|
||
enclosed$3=p[1],
|
||
state$9=
|
||
append
|
||
(0,
|
||
state$8,
|
||
enclosed_set
|
||
(explicit_slash$0,explicit_period$1,-188280562,enclosed$3))}
|
||
var state$7=state$9;
|
||
continue}
|
||
var re=seq$1(caml_call1(Stdlib_list[9],state$7[1]));
|
||
return anchored?whole_string(re):re}}
|
||
if(read(42))
|
||
var _dk_=1;
|
||
else
|
||
if(read(63))
|
||
var _dk_=0;
|
||
else
|
||
if(read(91))
|
||
{var switch$0=0;
|
||
if(read(94) || read(33))
|
||
switch$0 = 1;
|
||
else
|
||
var _dk_=[1,enclosed(0)];
|
||
if(switch$0)var _dk_=[2,enclosed(0)]}
|
||
else
|
||
var _dk_=[0,char$0(0)];
|
||
var pieces$0=[0,_dk_,pieces],pieces=pieces$0;
|
||
continue}}
|
||
if(expand_braces)
|
||
{var
|
||
l=caml_ml_string_length(s),
|
||
expl=
|
||
function(inner,s$0,i,acc,beg$0)
|
||
{var s$1=s$0,i$0=i,acc$0=acc,beg$1=beg$0;
|
||
for(;;)
|
||
{if(l <= i$0)
|
||
{if(inner)throw Parse_error$0;
|
||
return [0,
|
||
mul
|
||
(beg$1,
|
||
[0,caml_call3(Stdlib_string[4],s,s$1,i$0 - s$1 | 0),0]),
|
||
i$0]}
|
||
var match=caml_string_get(s,i$0);
|
||
if(44 === match)
|
||
{if(inner)
|
||
{var
|
||
_di_=
|
||
mul
|
||
(beg$1,
|
||
[0,caml_call3(Stdlib_string[4],s,s$1,i$0 - s$1 | 0),0]),
|
||
acc$1=caml_call2(Stdlib[37],_di_,acc$0),
|
||
i$1=i$0 + 1 | 0,
|
||
s$2=i$0 + 1 | 0,
|
||
s$1=s$2,
|
||
i$0=i$1,
|
||
acc$0=acc$1,
|
||
beg$1=beg;
|
||
continue}}
|
||
else
|
||
if(123 <= match)
|
||
{if(! (126 <= match))
|
||
{var switcher=match - 123 | 0;
|
||
switch(switcher)
|
||
{case 0:
|
||
var
|
||
match$0=expl(1,i$0 + 1 | 0,i$0 + 1 | 0,0,_cy_),
|
||
i$3=match$0[2],
|
||
t=match$0[1],
|
||
beg$2=
|
||
mul
|
||
(beg$1,
|
||
mul
|
||
([0,caml_call3(Stdlib_string[4],s,s$1,i$0 - s$1 | 0),0],t)),
|
||
s$1=i$3,
|
||
i$0=i$3,
|
||
beg$1=beg$2;
|
||
continue;
|
||
case 1:break;
|
||
default:
|
||
if(inner)
|
||
{var
|
||
_dj_=
|
||
mul
|
||
(beg$1,
|
||
[0,caml_call3(Stdlib_string[4],s,s$1,i$0 - s$1 | 0),0]);
|
||
return [0,caml_call2(Stdlib[37],_dj_,acc$0),i$0 + 1 | 0]}}}}
|
||
else
|
||
if(92 === match){var i$4=i$0 + 2 | 0,i$0=i$4;continue}
|
||
var i$2=i$0 + 1 | 0,i$0=i$2;
|
||
continue}},
|
||
_dd_=expl(0,0,0,0,_cz_)[1],
|
||
_de_=caml_call1(Stdlib_list[9],_dd_);
|
||
return alt$0(caml_call2(Stdlib_list[17],to_re,_de_))}
|
||
return to_re(s)}
|
||
function glob$0(anchored,period,s){return glob(anchored,0,[0,period],0,s)}
|
||
function globx(anchored,s){return glob(anchored,0,0,_cA_,s)}
|
||
function globx$0(anchored,period,s)
|
||
{return glob(anchored,0,[0,period],_cB_,s)}
|
||
var Re_Glob=[0,Parse_error$0,glob,glob$0,globx,globx$0];
|
||
caml_register_global(159,Re_Glob,"Re__Glob");
|
||
var
|
||
Parse_error$1=[248,cst_Re_Perl_Parse_error,caml_fresh_oo_id(0)],
|
||
Not_supported$0=[248,cst_Re_Perl_Not_supported,caml_fresh_oo_id(0)];
|
||
function posix_class_of_string(class$0)
|
||
{var switch$0=runtime.caml_string_compare(class$0,cst_lower);
|
||
if(0 <= switch$0)
|
||
{if(! (0 < switch$0))return lower;
|
||
if(! caml_string_notequal(class$0,cst_print))return print;
|
||
if(! caml_string_notequal(class$0,cst_punct))return punct;
|
||
if(! caml_string_notequal(class$0,cst_space))return space;
|
||
if(! caml_string_notequal(class$0,cst_upper))return upper;
|
||
if(! caml_string_notequal(class$0,cst_word))return wordc;
|
||
if(! caml_string_notequal(class$0,cst_xdigit))return xdigit}
|
||
else
|
||
{if(! caml_string_notequal(class$0,cst_alnum))return alnum;
|
||
if(! caml_string_notequal(class$0,cst_ascii))return ascii;
|
||
if(! caml_string_notequal(class$0,cst_blank))return blank;
|
||
if(! caml_string_notequal(class$0,cst_cntrl))return cntrl;
|
||
if(! caml_string_notequal(class$0,cst_digit))return digit;
|
||
if(! caml_string_notequal(class$0,cst_graph))return graph}
|
||
var _dc_=caml_call2(Stdlib[28],cst_Invalid_pcre_class,class$0);
|
||
return caml_call1(Stdlib[1],_dc_)}
|
||
function re$0(opt$0,s)
|
||
{if(opt$0)var sth=opt$0[1],opts=sth;else var opts=0;
|
||
var
|
||
ungreedy=caml_call2(Stdlib_list[34],-243745063,opts),
|
||
dotall=caml_call2(Stdlib_list[34],-424303016,opts),
|
||
dollar_endonly=caml_call2(Stdlib_list[34],-712595228,opts),
|
||
multiline=caml_call2(Stdlib_list[34],1071952589,opts),
|
||
i=[0,0],
|
||
l=caml_ml_string_length(s);
|
||
function eos$0(param){return i[1] === l?1:0}
|
||
function test(c)
|
||
{var
|
||
_da_=1 - eos$0(0),
|
||
_db_=_da_?caml_string_get(s,i[1]) === c?1:0:_da_;
|
||
return _db_}
|
||
function accept(c){var r=test(c);if(r)i[1]++;return r}
|
||
function accept_s(s$0)
|
||
{var len=caml_ml_string_length(s$0);
|
||
try
|
||
{var _c6_=len - 1 | 0,_c5_=0;
|
||
if(! (_c6_ < 0))
|
||
{var j=_c5_;
|
||
for(;;)
|
||
{try
|
||
{var _c8_=caml_string_get(s,i[1] + j | 0);
|
||
if(caml_string_get(s$0,j) !== _c8_)throw Stdlib[3]}
|
||
catch(_c$_){throw Stdlib[3]}
|
||
var _c9_=j + 1 | 0;
|
||
if(_c6_ !== j){var j=_c9_;continue}
|
||
break}}
|
||
i[1] = i[1] + len | 0;
|
||
var _c7_=1;
|
||
return _c7_}
|
||
catch(_c__)
|
||
{_c__ = caml_wrap_exception(_c__);
|
||
if(_c__ === Stdlib[3])return 0;
|
||
throw _c__}}
|
||
function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r}
|
||
function unget(param){i[1] += -1;return 0}
|
||
function greedy_mod(r)
|
||
{var gr=accept(63),gr$0=ungreedy?1 - gr:gr;
|
||
return gr$0?non_greedy(r):greedy(r)}
|
||
function regexp(param)
|
||
{var left=branch(0),left$0=left;
|
||
for(;;)
|
||
{if(accept(124))
|
||
{var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1;
|
||
continue}
|
||
return left$0}}
|
||
function branch(param)
|
||
{var left=0;
|
||
for(;;)
|
||
{if(! eos$0(0) && ! test(124) && ! test(41))
|
||
{if(accept(46))
|
||
var r=dotall?any:notnl;
|
||
else
|
||
if(accept(40))
|
||
if(accept(63))
|
||
if(accept(58))
|
||
{var r$0=regexp(0);
|
||
if(1 - accept(41))throw Parse_error$1;
|
||
var r=r$0}
|
||
else
|
||
{if(! accept(35))throw Parse_error$1;
|
||
for(;;)
|
||
{if(eos$0(0))throw Parse_error$1;
|
||
if(! accept(41)){i[1]++;continue}
|
||
var r=epsilon;
|
||
break}}
|
||
else
|
||
{var r$1=regexp(0);
|
||
if(1 - accept(41))throw Parse_error$1;
|
||
var r=[6,r$1]}
|
||
else
|
||
if(accept(94))
|
||
var r=multiline?bol:bos;
|
||
else
|
||
if(accept(36))
|
||
var r=multiline?eol:dollar_endonly?leol:eos;
|
||
else
|
||
if(accept(91))
|
||
var r=accept(94)?compl(bracket(0)):alt$0(bracket(0));
|
||
else
|
||
if(accept(92))
|
||
{if(eos$0(0))throw Parse_error$1;
|
||
var c=get(0),switcher=c - 48 | 0,switch$0=0;
|
||
if(74 < switcher >>> 0)
|
||
switch$0 = 1;
|
||
else
|
||
switch(switcher)
|
||
{case 17:var r=bos;break;
|
||
case 18:var r=not_boundary;break;
|
||
case 20:var r=compl([0,digit,0]);break;
|
||
case 23:var r=start$0;break;
|
||
case 35:var r=compl([0,space,0]);break;
|
||
case 39:var r=compl([0,alnum,[0,char$0(95),0]]);break;
|
||
case 42:var r=leol;break;
|
||
case 50:var r=alt$0([0,bow,[0,eow,0]]);break;
|
||
case 52:var r=digit;break;
|
||
case 67:var r=space;break;
|
||
case 71:var r=alt$0([0,alnum,[0,char$0(95),0]]);break;
|
||
case 74:var r=eos;break;
|
||
case 0:
|
||
case 1:
|
||
case 2:
|
||
case 3:
|
||
case 4:
|
||
case 5:
|
||
case 6:
|
||
case 7:
|
||
case 8:
|
||
case 9:throw Not_supported$0;
|
||
case 10:
|
||
case 11:
|
||
case 12:
|
||
case 13:
|
||
case 14:
|
||
case 15:
|
||
case 16:
|
||
case 43:
|
||
case 44:
|
||
case 45:
|
||
case 46:
|
||
case 47:
|
||
case 48:switch$0 = 1;break;
|
||
default:throw Parse_error$1}
|
||
if(switch$0)var r=char$0(c)}
|
||
else
|
||
{if(eos$0(0))throw Parse_error$1;
|
||
var c$0=get(0),switch$1=0;
|
||
if(64 <= c$0)
|
||
{if(92 !== c$0 && 123 !== c$0)switch$1 = 1}
|
||
else
|
||
if(44 <= c$0)
|
||
{if(! (63 <= c$0))switch$1 = 1}
|
||
else
|
||
if(! (42 <= c$0))switch$1 = 1;
|
||
if(! switch$1)throw Parse_error$1;
|
||
var r=char$0(c$0)}
|
||
if(accept(42))
|
||
var _c4_=greedy_mod(rep$0(r));
|
||
else
|
||
if(accept(43))
|
||
var _c4_=greedy_mod(rep1(r));
|
||
else
|
||
if(accept(63))
|
||
var _c4_=greedy_mod(opt(r));
|
||
else
|
||
if(accept(123))
|
||
{var match=integer(0);
|
||
if(match)
|
||
{var i$0=match[1],j=accept(44)?integer(0):[0,i$0];
|
||
if(1 - accept(125))throw Parse_error$1;
|
||
if(j){var j$0=j[1];if(j$0 < i$0)throw Parse_error$1}
|
||
var _c4_=greedy_mod(repn(r,i$0,j))}
|
||
else
|
||
{unget(0);var _c4_=r}}
|
||
else
|
||
var _c4_=r;
|
||
var left$0=[0,_c4_,left],left=left$0;
|
||
continue}
|
||
return seq$1(caml_call1(Stdlib_list[9],left))}}
|
||
function integer(param)
|
||
{if(eos$0(0))return 0;
|
||
var d=get(0),switcher=d - 48 | 0;
|
||
if(9 < switcher >>> 0){unget(0);return 0}
|
||
var i=d - 48 | 0,i$0=i;
|
||
for(;;)
|
||
{if(eos$0(0))return [0,i$0];
|
||
var d$0=get(0),switcher$0=d$0 - 48 | 0;
|
||
if(9 < switcher$0 >>> 0){unget(0);return [0,i$0]}
|
||
var i$1=(10 * i$0 | 0) + (d$0 - 48 | 0) | 0;
|
||
if(i$1 < i$0)throw Parse_error$1;
|
||
var i$0=i$1;
|
||
continue}}
|
||
function bracket(s)
|
||
{var s$0=s;
|
||
for(;;)
|
||
{if(0 !== s$0 && accept(93))return s$0;
|
||
var match=char$1(0);
|
||
if(748194550 <= match[1])
|
||
{var c=match[2];
|
||
if(accept(45))
|
||
{if(accept(93))
|
||
{var _c2_=[0,char$0(45),s$0];return [0,char$0(c),_c2_]}
|
||
var match$0=char$1(0);
|
||
if(748194550 <= match$0[1])
|
||
{var c$0=match$0[2],s$1=[0,rg(c,c$0),s$0],s$0=s$1;continue}
|
||
var
|
||
st=match$0[2],
|
||
_c3_=[0,char$0(45),[0,st,s$0]],
|
||
s$2=[0,char$0(c),_c3_],
|
||
s$0=s$2;
|
||
continue}
|
||
var s$3=[0,char$0(c),s$0],s$0=s$3;
|
||
continue}
|
||
var st$0=match[2],s$4=[0,st$0,s$0],s$0=s$4;
|
||
continue}}
|
||
function char$1(param)
|
||
{if(eos$0(0))throw Parse_error$1;
|
||
var c=get(0);
|
||
if(91 === c)
|
||
{if(accept(61))throw Not_supported$0;
|
||
if(accept(58))
|
||
{var compl$0=accept(94);
|
||
try
|
||
{var cls=caml_call2(Stdlib_list[35],accept_s,posix_class_strings)}
|
||
catch(_c1_)
|
||
{_c1_ = caml_wrap_exception(_c1_);
|
||
if(_c1_ === Stdlib[8])throw Parse_error$1;
|
||
throw _c1_}
|
||
if(1 - accept_s(cst$6))throw Parse_error$1;
|
||
var
|
||
posix_class=posix_class_of_string(cls),
|
||
re=compl$0?compl([0,posix_class,0]):posix_class;
|
||
return [0,4150146,re]}
|
||
if(accept(46))
|
||
{if(eos$0(0))throw Parse_error$1;
|
||
var c$0=get(0);
|
||
if(1 - accept(46))throw Not_supported$0;
|
||
if(1 - accept(93))throw Parse_error$1;
|
||
return [0,748194550,c$0]}
|
||
return [0,748194550,c]}
|
||
if(92 === c)
|
||
{if(eos$0(0))throw Parse_error$1;
|
||
var c$1=get(0);
|
||
if(58 <= c$1)
|
||
{if(! (123 <= c$1))
|
||
{var switcher=c$1 - 58 | 0;
|
||
switch(switcher)
|
||
{case 10:return [0,4150146,compl([0,digit,0])];
|
||
case 25:return [0,4150146,compl([0,space,0])];
|
||
case 29:return [0,4150146,compl([0,alnum,[0,char$0(95),0]])];
|
||
case 40:return _cC_;
|
||
case 42:return [0,4150146,digit];
|
||
case 52:return _cD_;
|
||
case 56:return _cE_;
|
||
case 57:return [0,4150146,space];
|
||
case 58:return _cF_;
|
||
case 61:return [0,4150146,alt$0([0,alnum,[0,char$0(95),0]])];
|
||
case 0:
|
||
case 1:
|
||
case 2:
|
||
case 3:
|
||
case 4:
|
||
case 5:
|
||
case 6:
|
||
case 33:
|
||
case 34:
|
||
case 35:
|
||
case 36:
|
||
case 37:
|
||
case 38:break;
|
||
default:throw Parse_error$1}}}
|
||
else
|
||
if(48 <= c$1)throw Not_supported$0;
|
||
return [0,748194550,c$1]}
|
||
return [0,748194550,c]}
|
||
var r=regexp(0);
|
||
if(1 - eos$0(0))throw Parse_error$1;
|
||
var
|
||
r$0=
|
||
caml_call2(Stdlib_list[34],616470068,opts)
|
||
?seq$1([0,start$0,[0,r,0]])
|
||
:r,
|
||
r$1=caml_call2(Stdlib_list[34],604571177,opts)?[10,r$0]:r$0;
|
||
return r$1}
|
||
function compile_pat$0(opt,s)
|
||
{if(opt)var sth=opt[1],opts=sth;else var opts=0;
|
||
return compile(re$0([0,opts],s))}
|
||
var Re_Perl=[0,Parse_error$1,Not_supported$0,re$0,compile,compile_pat$0];
|
||
caml_register_global(160,Re_Perl,"Re__Perl");
|
||
function re$1(opt,pat)
|
||
{if(opt)var sth=opt[1],flags=sth;else var flags=0;
|
||
function _c0_(param)
|
||
{return 601676297 === param
|
||
?604571177
|
||
:613575188 <= param?616470068:1071952589}
|
||
var opts=caml_call2(Stdlib_list[17],_c0_,flags);
|
||
return re$0([0,opts],pat)}
|
||
function regexp$0(flags,pat){return compile(re$1(flags,pat))}
|
||
function extract(rex,s)
|
||
{var _cZ_=exec(0,0,rex,s);return caml_call1(Group[5],_cZ_)}
|
||
function exec$0(rex,pos,s){return exec(pos,0,rex,s)}
|
||
function get_substring(s,i){return caml_call2(Group[1],s,i)}
|
||
function get_substring_ofs(s,i){return caml_call2(Group[2],s,i)}
|
||
function pmatch(rex,s){return execp(0,0,rex,s)}
|
||
function substitute(rex,subst,str)
|
||
{var b=caml_call1(Stdlib_buffer[1],1024),pos=0;
|
||
for(;;)
|
||
{if(caml_ml_string_length(str) <= pos)
|
||
return caml_call1(Stdlib_buffer[2],b);
|
||
if(execp([0,pos],0,rex,str))
|
||
{var
|
||
ss=exec([0,pos],0,rex,str),
|
||
match=caml_call2(Group[2],ss,0),
|
||
fin=match[2],
|
||
start=match[1],
|
||
pat=caml_call2(Group[1],ss,0);
|
||
caml_call4(Stdlib_buffer[16],b,str,pos,start - pos | 0);
|
||
var _cY_=caml_call1(subst,pat);
|
||
caml_call2(Stdlib_buffer[14],b,_cY_);
|
||
var pos=fin;
|
||
continue}
|
||
caml_call4
|
||
(Stdlib_buffer[16],b,str,pos,caml_ml_string_length(str) - pos | 0);
|
||
var pos$0=caml_ml_string_length(str),pos=pos$0;
|
||
continue}}
|
||
function split$2(rex,str)
|
||
{var accu=0,pos=0;
|
||
for(;;)
|
||
{if(caml_ml_string_length(str) <= pos)
|
||
return caml_call1(Stdlib_list[9],accu);
|
||
if(execp([0,pos],0,rex,str))
|
||
{var
|
||
ss=exec([0,pos],0,rex,str),
|
||
match=caml_call2(Group[2],ss,0),
|
||
fin=match[2],
|
||
start=match[1],
|
||
s=caml_call3(Stdlib_string[4],str,pos,start - pos | 0),
|
||
accu$0=[0,s,accu],
|
||
accu=accu$0,
|
||
pos=fin;
|
||
continue}
|
||
var
|
||
s$0=
|
||
caml_call3
|
||
(Stdlib_string[4],str,pos,caml_ml_string_length(str) - pos | 0),
|
||
pos$0=caml_ml_string_length(str),
|
||
accu$1=[0,s$0,accu],
|
||
accu=accu$1,
|
||
pos=pos$0;
|
||
continue}}
|
||
function quote$1(s)
|
||
{var
|
||
len=caml_ml_string_length(s),
|
||
s$0=caml_create_bytes(len << 1),
|
||
pos=[0,0],
|
||
_cU_=len - 1 | 0,
|
||
_cT_=0;
|
||
if(! (_cU_ < 0))
|
||
{var i=_cT_;
|
||
for(;;)
|
||
{var c=runtime.caml_string_unsafe_get(s,i),switch$0=0;
|
||
if(91 <= c)
|
||
{var _cW_=c - 93 | 0;
|
||
if(29 < _cW_ >>> 0)
|
||
{if(! (32 <= _cW_))switch$0 = 1}
|
||
else
|
||
if(1 === _cW_)switch$0 = 1}
|
||
else
|
||
if(47 <= c)
|
||
{if(63 === c)switch$0 = 1}
|
||
else
|
||
if(36 <= c)
|
||
switch(c - 36 | 0)
|
||
{case 1:case 2:case 3:case 8:case 9:break;default:switch$0 = 1}
|
||
if(switch$0)
|
||
{caml_bytes_unsafe_set(s$0,pos[1],92);
|
||
pos[1]++;
|
||
caml_bytes_unsafe_set(s$0,pos[1],c);
|
||
pos[1]++}
|
||
else
|
||
{caml_bytes_unsafe_set(s$0,pos[1],c);pos[1]++}
|
||
var _cX_=i + 1 | 0;
|
||
if(_cU_ !== i){var i=_cX_;continue}
|
||
break}}
|
||
var _cV_=pos[1],r=caml_create_bytes(_cV_);
|
||
runtime.caml_blit_bytes(s$0,0,r,0,_cV_);
|
||
return caml_call1(Stdlib_bytes[42],r)}
|
||
function full_split$0(opt,rex,s)
|
||
{if(opt)var sth=opt[1],max=sth;else var max=0;
|
||
if(0 === caml_ml_string_length(s))return 0;
|
||
if(1 === max)return [0,[0,s],0];
|
||
var results=split_full(0,0,rex,s);
|
||
function _cN_(param)
|
||
{if(936573133 <= param[1]){var s=param[2];return [0,[0,s],0]}
|
||
var
|
||
d=param[2],
|
||
matches=caml_call1(Group[6],d),
|
||
delim=caml_call2(Group[1],d,0),
|
||
l=[0,0],
|
||
_cP_=matches.length - 1 - 1 | 0,
|
||
_cO_=1;
|
||
if(! (_cP_ < 1))
|
||
{var i=_cO_;
|
||
for(;;)
|
||
{var
|
||
_cQ_=l[1],
|
||
_cR_=
|
||
caml_equal(caml_check_bound(matches,i)[1 + i],_cG_)
|
||
?0
|
||
:[2,i,caml_call2(Group[1],d,i)];
|
||
l[1] = [0,_cR_,_cQ_];
|
||
var _cS_=i + 1 | 0;
|
||
if(_cP_ !== i){var i=_cS_;continue}
|
||
break}}
|
||
return [0,[1,delim],caml_call1(Stdlib_list[9],l[1])]}
|
||
var matches=caml_call2(Stdlib_list[17],_cN_,results);
|
||
return caml_call1(Stdlib_list[13],matches)}
|
||
var
|
||
Re_Pcre=
|
||
[0,
|
||
re$1,
|
||
regexp$0,
|
||
extract,
|
||
exec$0,
|
||
get_substring,
|
||
get_substring_ofs,
|
||
pmatch,
|
||
substitute,
|
||
full_split$0,
|
||
split$2,
|
||
quote$1];
|
||
caml_register_global(161,Re_Pcre,"Re__Pcre");
|
||
var
|
||
Parse_error$2=[248,cst_Re_Posix_Parse_error,caml_fresh_oo_id(0)],
|
||
Not_supported$1=[248,cst_Re_Posix_Not_supported,caml_fresh_oo_id(0)];
|
||
function re$2(opt$0,s)
|
||
{if(opt$0)var sth=opt$0[1],opts=sth;else var opts=0;
|
||
var
|
||
newline=caml_call2(Stdlib_list[34],-638074828,opts),
|
||
i=[0,0],
|
||
l=caml_ml_string_length(s);
|
||
function eos$0(param){return i[1] === l?1:0}
|
||
function test(c)
|
||
{var
|
||
_cL_=1 - eos$0(0),
|
||
_cM_=_cL_?caml_string_get(s,i[1]) === c?1:0:_cL_;
|
||
return _cM_}
|
||
function accept(c){var r=test(c);if(r)i[1]++;return r}
|
||
function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r}
|
||
function unget(param){i[1] += -1;return 0}
|
||
function regexp(param)
|
||
{var left=branch(0),left$0=left;
|
||
for(;;)
|
||
{if(accept(124))
|
||
{var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1;
|
||
continue}
|
||
return left$0}}
|
||
function branch(param)
|
||
{var left=0;
|
||
for(;;)
|
||
{if(! eos$0(0) && ! test(124) && ! test(41))
|
||
{if(accept(46))
|
||
var r=newline?notnl:any;
|
||
else
|
||
if(accept(40))
|
||
{var r$0=regexp(0);
|
||
if(1 - accept(41))throw Parse_error$2;
|
||
var r=[6,r$0]}
|
||
else
|
||
if(accept(94))
|
||
var r=newline?bol:bos;
|
||
else
|
||
if(accept(36))
|
||
var r=newline?eol:eos;
|
||
else
|
||
if(accept(91))
|
||
if(accept(94))
|
||
var _cJ_=char$0(10),r=diff$0(compl(bracket(0)),_cJ_);
|
||
else
|
||
var r=alt$0(bracket(0));
|
||
else
|
||
if(accept(92))
|
||
{if(eos$0(0))throw Parse_error$2;
|
||
var c=get(0),switch$0=0;
|
||
if(91 <= c)
|
||
{var _cK_=c - 93 | 0;
|
||
if(29 < _cK_ >>> 0)
|
||
{if(! (32 <= _cK_))switch$0 = 1}
|
||
else
|
||
if(1 === _cK_)switch$0 = 1}
|
||
else
|
||
if(47 <= c)
|
||
{if(63 === c)switch$0 = 1}
|
||
else
|
||
if(36 <= c)
|
||
switch(c - 36 | 0)
|
||
{case 1:
|
||
case 2:
|
||
case 3:
|
||
case 8:
|
||
case 9:break;
|
||
default:switch$0 = 1}
|
||
if(! switch$0)throw Parse_error$2;
|
||
var r=char$0(c)}
|
||
else
|
||
{if(eos$0(0))throw Parse_error$2;
|
||
var c$0=get(0),switch$1=0;
|
||
if(64 <= c$0)
|
||
{if(92 !== c$0 && 123 !== c$0)switch$1 = 1}
|
||
else
|
||
if(44 <= c$0)
|
||
{if(! (63 <= c$0))switch$1 = 1}
|
||
else
|
||
if(! (42 <= c$0))switch$1 = 1;
|
||
if(! switch$1)throw Parse_error$2;
|
||
var r=char$0(c$0)}
|
||
if(accept(42))
|
||
var _cI_=rep$0([8,r]);
|
||
else
|
||
if(accept(43))
|
||
var _cI_=rep1([8,r]);
|
||
else
|
||
if(accept(63))
|
||
var _cI_=opt(r);
|
||
else
|
||
if(accept(123))
|
||
{var match=integer(0);
|
||
if(match)
|
||
{var i=match[1],j=accept(44)?integer(0):[0,i];
|
||
if(1 - accept(125))throw Parse_error$2;
|
||
if(j){var j$0=j[1];if(j$0 < i)throw Parse_error$2}
|
||
var _cI_=repn([8,r],i,j)}
|
||
else
|
||
{unget(0);var _cI_=r}}
|
||
else
|
||
var _cI_=r;
|
||
var left$0=[0,_cI_,left],left=left$0;
|
||
continue}
|
||
return seq$1(caml_call1(Stdlib_list[9],left))}}
|
||
function integer(param)
|
||
{if(eos$0(0))return 0;
|
||
var d=get(0),switcher=d - 48 | 0;
|
||
if(9 < switcher >>> 0){unget(0);return 0}
|
||
var i=d - 48 | 0,i$0=i;
|
||
for(;;)
|
||
{if(eos$0(0))return [0,i$0];
|
||
var d$0=get(0),switcher$0=d$0 - 48 | 0;
|
||
if(9 < switcher$0 >>> 0){unget(0);return [0,i$0]}
|
||
var i$1=(10 * i$0 | 0) + (d$0 - 48 | 0) | 0;
|
||
if(i$1 < i$0)throw Parse_error$2;
|
||
var i$0=i$1;
|
||
continue}}
|
||
function bracket(s)
|
||
{var s$0=s;
|
||
for(;;)
|
||
{if(0 !== s$0 && accept(93))return s$0;
|
||
var c=char$1(0);
|
||
if(accept(45))
|
||
{if(accept(93))
|
||
{var _cH_=[0,char$0(45),s$0];return [0,char$0(c),_cH_]}
|
||
var c$0=char$1(0),s$1=[0,rg(c,c$0),s$0],s$0=s$1;
|
||
continue}
|
||
var s$2=[0,char$0(c),s$0],s$0=s$2;
|
||
continue}}
|
||
function char$1(param)
|
||
{if(eos$0(0))throw Parse_error$2;
|
||
var c=get(0);
|
||
if(91 === c)
|
||
{if(accept(61))throw Not_supported$1;
|
||
if(accept(58))throw Not_supported$1;
|
||
if(accept(46))
|
||
{if(eos$0(0))throw Parse_error$2;
|
||
var c$0=get(0);
|
||
if(1 - accept(46))throw Not_supported$1;
|
||
if(1 - accept(93))throw Parse_error$2;
|
||
return c$0}
|
||
return c}
|
||
return c}
|
||
var r=regexp(0);
|
||
if(1 - eos$0(0))throw Parse_error$2;
|
||
var
|
||
r$0=caml_call2(Stdlib_list[34],886285209,opts)?[10,r]:r,
|
||
r$1=caml_call2(Stdlib_list[34],853495711,opts)?[7,r$0]:r$0;
|
||
return r$1}
|
||
function compile$0(re){return compile(longest(re))}
|
||
function compile_pat$1(opt,s)
|
||
{if(opt)var sth=opt[1],opts=sth;else var opts=0;
|
||
return compile$0(re$2([0,opts],s))}
|
||
var
|
||
Re_Posix=
|
||
[0,Parse_error$2,Not_supported$1,re$2,compile$0,compile_pat$1];
|
||
caml_register_global(162,Re_Posix,"Re__Posix");
|
||
var
|
||
Re$0=
|
||
[0,
|
||
Group,
|
||
compile,
|
||
exec,
|
||
exec_opt,
|
||
execp,
|
||
exec_partial,
|
||
Mark,
|
||
Seq,
|
||
all$0,
|
||
all_gen,
|
||
all_seq,
|
||
matches,
|
||
matches_gen,
|
||
matches_seq,
|
||
split$0,
|
||
split_gen,
|
||
split_seq,
|
||
split_full,
|
||
split_full_gen,
|
||
split_full_seq,
|
||
replace,
|
||
replace_string,
|
||
str,
|
||
char$0,
|
||
alt$0,
|
||
seq$1,
|
||
empty$2,
|
||
epsilon,
|
||
rep$0,
|
||
rep1,
|
||
repn,
|
||
opt,
|
||
bol,
|
||
eol,
|
||
bow,
|
||
eow,
|
||
bos,
|
||
eos,
|
||
leol,
|
||
start$0,
|
||
stop$0,
|
||
word,
|
||
not_boundary,
|
||
whole_string,
|
||
longest,
|
||
shortest,
|
||
first$0,
|
||
greedy,
|
||
non_greedy,
|
||
group,
|
||
no_group,
|
||
nest,
|
||
mark$0,
|
||
set,
|
||
rg,
|
||
inter$0,
|
||
diff$0,
|
||
compl,
|
||
any,
|
||
notnl,
|
||
alnum,
|
||
wordc,
|
||
alpha,
|
||
ascii,
|
||
blank,
|
||
cntrl,
|
||
digit,
|
||
graph,
|
||
lower,
|
||
print,
|
||
punct,
|
||
space,
|
||
upper,
|
||
xdigit,
|
||
case$0,
|
||
no_case,
|
||
pp$5,
|
||
print_re,
|
||
print_re,
|
||
View,
|
||
witness,
|
||
get$0,
|
||
get_ofs,
|
||
get_all,
|
||
get_all_ofs,
|
||
test$0,
|
||
marked,
|
||
mark_set];
|
||
caml_register_global(163,Re$0,"Re");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# 1 "../.js/tyxml.functor/tyxml_f.cma.js"
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
var
|
||
runtime=joo_global_object.jsoo_runtime,
|
||
caml_float_of_string=runtime.caml_float_of_string,
|
||
caml_list_of_js_array=runtime.caml_list_of_js_array,
|
||
caml_ml_string_length=runtime.caml_ml_string_length,
|
||
caml_register_global=runtime.caml_register_global,
|
||
caml_string_equal=runtime.caml_string_equal,
|
||
caml_string_notequal=runtime.caml_string_notequal,
|
||
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes;
|
||
function caml_call1(f,a0)
|
||
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
|
||
function caml_call2(f,a0,a1)
|
||
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
|
||
function caml_call3(f,a0,a1,a2)
|
||
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
|
||
function caml_call4(f,a0,a1,a2,a3)
|
||
{return f.length == 4
|
||
?f(a0,a1,a2,a3)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
|
||
function caml_call5(f,a0,a1,a2,a3,a4)
|
||
{return f.length == 5
|
||
?f(a0,a1,a2,a3,a4)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
|
||
function caml_call6(f,a0,a1,a2,a3,a4,a5)
|
||
{return f.length == 6
|
||
?f(a0,a1,a2,a3,a4,a5)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5])}
|
||
function caml_call7(f,a0,a1,a2,a3,a4,a5,a6)
|
||
{return f.length == 7
|
||
?f(a0,a1,a2,a3,a4,a5,a6)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])}
|
||
function caml_call11(f,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
|
||
{return f.length == 11
|
||
?f(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10])}
|
||
var
|
||
global_data=runtime.caml_get_global_data(),
|
||
cst_Xml_stream_Malformed_strea=
|
||
caml_string_of_jsbytes("Xml_stream.Malformed_stream"),
|
||
cst_xmlns$1=caml_string_of_jsbytes("xmlns"),
|
||
cst$30=caml_string_of_jsbytes(""),
|
||
cst_xmlns$2=caml_string_of_jsbytes("xmlns"),
|
||
cst$26=caml_string_of_jsbytes(""),
|
||
cst$27=caml_string_of_jsbytes(" -->\n"),
|
||
cst$28=caml_string_of_jsbytes("<!-- "),
|
||
cst$29=caml_string_of_jsbytes("\n"),
|
||
cst$12=caml_string_of_jsbytes(" "),
|
||
cst$13=caml_string_of_jsbytes(" />"),
|
||
cst$14=caml_string_of_jsbytes("<"),
|
||
cst$15=caml_string_of_jsbytes(">"),
|
||
cst$16=caml_string_of_jsbytes("><\/"),
|
||
cst$17=caml_string_of_jsbytes("<"),
|
||
cst$18=caml_string_of_jsbytes(">"),
|
||
cst$19=caml_string_of_jsbytes("<\/"),
|
||
cst$20=caml_string_of_jsbytes(">"),
|
||
cst$21=caml_string_of_jsbytes("<"),
|
||
cst$22=caml_string_of_jsbytes("-->"),
|
||
cst$23=caml_string_of_jsbytes("<!--"),
|
||
cst$24=caml_string_of_jsbytes(";"),
|
||
cst$25=caml_string_of_jsbytes("&"),
|
||
cst$10=caml_string_of_jsbytes(", "),
|
||
cst$11=caml_string_of_jsbytes(" "),
|
||
cst_xmlns=caml_string_of_jsbytes("xmlns"),
|
||
cst_xmlns$0=caml_string_of_jsbytes("xmlns"),
|
||
partial=[12,62,0],
|
||
cst$9=caml_string_of_jsbytes(" "),
|
||
cst_lt$0=caml_string_of_jsbytes("<"),
|
||
cst_gt$4=caml_string_of_jsbytes(">"),
|
||
cst_amp$0=caml_string_of_jsbytes("&"),
|
||
cst_quot$0=caml_string_of_jsbytes("""),
|
||
cst_Infinity=caml_string_of_jsbytes("Infinity"),
|
||
cst_Infinity$0=caml_string_of_jsbytes("-Infinity"),
|
||
cst_NaN=caml_string_of_jsbytes("NaN"),
|
||
cst$5=caml_string_of_jsbytes("--!>"),
|
||
cst$6=caml_string_of_jsbytes("-->"),
|
||
cst$7=caml_string_of_jsbytes("->"),
|
||
cst$8=caml_string_of_jsbytes(">"),
|
||
cst_gt$0=caml_string_of_jsbytes(">"),
|
||
cst_gt$1=caml_string_of_jsbytes("->"),
|
||
cst_gt$2=caml_string_of_jsbytes("-->"),
|
||
cst_gt$3=caml_string_of_jsbytes("--!>"),
|
||
cst_1_0=caml_string_of_jsbytes("1.0"),
|
||
cst_UTF_8=caml_string_of_jsbytes("UTF-8"),
|
||
cst_64=caml_string_of_jsbytes("@"),
|
||
cst_lt=caml_string_of_jsbytes("<"),
|
||
cst_gt=caml_string_of_jsbytes(">"),
|
||
cst_amp=caml_string_of_jsbytes("&"),
|
||
cst_quot=caml_string_of_jsbytes("""),
|
||
cst=caml_string_of_jsbytes("&#"),
|
||
cst$0=caml_string_of_jsbytes(";"),
|
||
cst$1=caml_string_of_jsbytes("--!>"),
|
||
cst$2=caml_string_of_jsbytes("-->"),
|
||
cst$3=caml_string_of_jsbytes("->"),
|
||
cst$4=caml_string_of_jsbytes(">"),
|
||
cst$38=caml_string_of_jsbytes(" "),
|
||
cst$37=caml_string_of_jsbytes(""),
|
||
partial$0=[12,32,[8,[0,0,3],0,0,[12,41,0]]],
|
||
partial$1=[0,0,3],
|
||
cst_none$1=caml_string_of_jsbytes("none"),
|
||
cst_auto$2=caml_string_of_jsbytes("auto"),
|
||
cst$36=caml_string_of_jsbytes("%"),
|
||
cst_strokePaint=caml_string_of_jsbytes("strokePaint"),
|
||
cst_sourceAlpha=caml_string_of_jsbytes("sourceAlpha"),
|
||
cst_fillPaint=caml_string_of_jsbytes("fillPaint"),
|
||
cst_sourceGraphic=caml_string_of_jsbytes("sourceGraphic"),
|
||
cst_backgroundImage=caml_string_of_jsbytes("backgroundImage"),
|
||
cst_backgroundAlpha=caml_string_of_jsbytes("backgroundAlpha"),
|
||
cst_nochange=caml_string_of_jsbytes("nochange"),
|
||
cst_alphabetic$1=caml_string_of_jsbytes("alphabetic"),
|
||
cst_auto$1=caml_string_of_jsbytes("auto"),
|
||
cst_hanging$1=caml_string_of_jsbytes("hanging"),
|
||
cst_mathematical$1=caml_string_of_jsbytes("mathematical"),
|
||
cst_inherit$1=caml_string_of_jsbytes("inherit"),
|
||
cst_middle$1=caml_string_of_jsbytes("middle"),
|
||
cst_central$0=caml_string_of_jsbytes("central"),
|
||
cst_usescript=caml_string_of_jsbytes("usescript"),
|
||
cst_ideographic$1=caml_string_of_jsbytes("ideographic"),
|
||
cst_textbeforeedge=caml_string_of_jsbytes("textbeforeedge"),
|
||
cst_resetsize=caml_string_of_jsbytes("resetsize"),
|
||
cst_textafteredge=caml_string_of_jsbytes("textafteredge"),
|
||
cst_stitch=caml_string_of_jsbytes("stitch"),
|
||
cst_onRequest=caml_string_of_jsbytes("onRequest"),
|
||
cst_repeat=caml_string_of_jsbytes("repeat"),
|
||
cst_wrap=caml_string_of_jsbytes("wrap"),
|
||
cst_remove=caml_string_of_jsbytes("remove"),
|
||
cst_reflect=caml_string_of_jsbytes("reflect"),
|
||
cst_noStitch=caml_string_of_jsbytes("noStitch"),
|
||
cst$35=caml_string_of_jsbytes(""),
|
||
cst_over=caml_string_of_jsbytes("over"),
|
||
cst_none$0=caml_string_of_jsbytes("none"),
|
||
cst_medial=caml_string_of_jsbytes("medial"),
|
||
cst_never=caml_string_of_jsbytes("never"),
|
||
cst_butt=caml_string_of_jsbytes("butt"),
|
||
cst_auto$0=caml_string_of_jsbytes("auto"),
|
||
cst_atop=caml_string_of_jsbytes("atop"),
|
||
cst_arithmetic=caml_string_of_jsbytes("arithmetic"),
|
||
cst_underline=caml_string_of_jsbytes("underline"),
|
||
cst_gamma=caml_string_of_jsbytes("gamma"),
|
||
cst_linear=caml_string_of_jsbytes("linear"),
|
||
cst_overline=caml_string_of_jsbytes("overline"),
|
||
cst_onLoad=caml_string_of_jsbytes("onLoad"),
|
||
cst_turbulence=caml_string_of_jsbytes("turbulence"),
|
||
cst_table=caml_string_of_jsbytes("table"),
|
||
cst_geometricPrecision=caml_string_of_jsbytes("geometricPrecision"),
|
||
cst_optimizeSpeed=caml_string_of_jsbytes("optimizeSpeed"),
|
||
cst_miter=caml_string_of_jsbytes("miter"),
|
||
cst_initial=caml_string_of_jsbytes("initial"),
|
||
cst_start=caml_string_of_jsbytes("start"),
|
||
cst_whenNotActive=caml_string_of_jsbytes("whenNotActive"),
|
||
cst_identity=caml_string_of_jsbytes("identity"),
|
||
cst_skewY=caml_string_of_jsbytes("skewY"),
|
||
cst_skewX=caml_string_of_jsbytes("skewX"),
|
||
cst_square=caml_string_of_jsbytes("square"),
|
||
cst_scale$0=caml_string_of_jsbytes("scale"),
|
||
cst_exact=caml_string_of_jsbytes("exact"),
|
||
cst_perceptual=caml_string_of_jsbytes("perceptual"),
|
||
cst_discrete=caml_string_of_jsbytes("discrete"),
|
||
cst_erode=caml_string_of_jsbytes("erode"),
|
||
cst_middle$0=caml_string_of_jsbytes("middle"),
|
||
cst_round=caml_string_of_jsbytes("round"),
|
||
cst_xor=caml_string_of_jsbytes("xor"),
|
||
cst_XML=caml_string_of_jsbytes("XML"),
|
||
cst_sum=caml_string_of_jsbytes("sum"),
|
||
cst_pad=caml_string_of_jsbytes("pad"),
|
||
cst_out=caml_string_of_jsbytes("out"),
|
||
cst_new=caml_string_of_jsbytes("new"),
|
||
cst_end=caml_string_of_jsbytes("end"),
|
||
cst_CSS=caml_string_of_jsbytes("CSS"),
|
||
cst_in$1=caml_string_of_jsbytes("in"),
|
||
cst_v=caml_string_of_jsbytes("v"),
|
||
cst_r$0=caml_string_of_jsbytes("r"),
|
||
cst_h=caml_string_of_jsbytes("h"),
|
||
cst_g$0=caml_string_of_jsbytes("g"),
|
||
cst_b=caml_string_of_jsbytes("b"),
|
||
cst_a$0=caml_string_of_jsbytes("a"),
|
||
cst_rotate$0=caml_string_of_jsbytes("rotate"),
|
||
cst_disable=caml_string_of_jsbytes("disable"),
|
||
cst_screen=caml_string_of_jsbytes("screen"),
|
||
cst_absolute_colorimetric=caml_string_of_jsbytes("absolute_colorimetric"),
|
||
cst_inherit$0=caml_string_of_jsbytes("inherit"),
|
||
cst_always=caml_string_of_jsbytes("always"),
|
||
cst_spacingAndGlyphs=caml_string_of_jsbytes("spacingAndGlyphs"),
|
||
cst_replace=caml_string_of_jsbytes("replace"),
|
||
cst_multiply=caml_string_of_jsbytes("multiply"),
|
||
cst_spline=caml_string_of_jsbytes("spline"),
|
||
cst_matrix=caml_string_of_jsbytes("matrix"),
|
||
cst_saturation=caml_string_of_jsbytes("saturation"),
|
||
cst_dilate=caml_string_of_jsbytes("dilate"),
|
||
cst_translate=caml_string_of_jsbytes("translate"),
|
||
cst_default=caml_string_of_jsbytes("default"),
|
||
cst_lighten=caml_string_of_jsbytes("lighten"),
|
||
cst_normal=caml_string_of_jsbytes("normal"),
|
||
cst_freeze=caml_string_of_jsbytes("freeze"),
|
||
cst_magnify=caml_string_of_jsbytes("magnify"),
|
||
cst_hueRotate=caml_string_of_jsbytes("hueRotate"),
|
||
cst_spacing$0=caml_string_of_jsbytes("spacing"),
|
||
cst_fractalNoise=caml_string_of_jsbytes("fractalNoise"),
|
||
cst_saturate=caml_string_of_jsbytes("saturate"),
|
||
cst_userSpaceOnUse=caml_string_of_jsbytes("userSpaceOnUse"),
|
||
cst_objectBoundingBox=caml_string_of_jsbytes("objectBoundingBox"),
|
||
cst_darken=caml_string_of_jsbytes("darken"),
|
||
cst_paced=caml_string_of_jsbytes("paced"),
|
||
cst_isolated=caml_string_of_jsbytes("isolated"),
|
||
cst_optimizeLegibility=caml_string_of_jsbytes("optimizeLegibility"),
|
||
cst_luminanceToAlpha=caml_string_of_jsbytes("luminanceToAlpha"),
|
||
cst_line_through=caml_string_of_jsbytes("line-through"),
|
||
cst_other=caml_string_of_jsbytes("other"),
|
||
cst_terminal=caml_string_of_jsbytes("terminal"),
|
||
cst_blink=caml_string_of_jsbytes("blink"),
|
||
cst_stroke_width$0=caml_string_of_jsbytes("stroke-width"),
|
||
cst_stretch=caml_string_of_jsbytes("stretch"),
|
||
cst_bevel=caml_string_of_jsbytes("bevel"),
|
||
cst_duplicate=caml_string_of_jsbytes("duplicate"),
|
||
cst_preserve=caml_string_of_jsbytes("preserve"),
|
||
cst_relative_colorimetric=caml_string_of_jsbytes("relative_colorimetric"),
|
||
cst_after_edge=caml_string_of_jsbytes("after-edge"),
|
||
cst_alphabetic$0=caml_string_of_jsbytes("alphabetic"),
|
||
cst_auto=caml_string_of_jsbytes("auto"),
|
||
cst_hanging$0=caml_string_of_jsbytes("hanging"),
|
||
cst_mathematical$0=caml_string_of_jsbytes("mathematical"),
|
||
cst_inherit=caml_string_of_jsbytes("inherit"),
|
||
cst_middle=caml_string_of_jsbytes("middle"),
|
||
cst_baseline=caml_string_of_jsbytes("baseline"),
|
||
cst_central=caml_string_of_jsbytes("central"),
|
||
cst_ideographic$0=caml_string_of_jsbytes("ideographic"),
|
||
cst_text_before_edge=caml_string_of_jsbytes("text-before-edge"),
|
||
cst_before_edge=caml_string_of_jsbytes("before-edge"),
|
||
cst_text_after_edge=caml_string_of_jsbytes("text-after-edge"),
|
||
cst_http_www_w3_org_1999_xlink=
|
||
caml_string_of_jsbytes("http://www.w3.org/1999/xlink"),
|
||
cst_xmlns_xlink=caml_string_of_jsbytes("xmlns:xlink"),
|
||
cst_http_www_w3_org_2000_svg=
|
||
caml_string_of_jsbytes("http://www.w3.org/2000/svg"),
|
||
cst_xmlns$3=caml_string_of_jsbytes("xmlns"),
|
||
cst_svg$0=caml_string_of_jsbytes("svg"),
|
||
cst_stroke_dasharray=caml_string_of_jsbytes("stroke-dasharray"),
|
||
cst_stroke_linejoin=caml_string_of_jsbytes("stroke-linejoin"),
|
||
cst_stroke_linecap=caml_string_of_jsbytes("stroke-linecap"),
|
||
cst_dominant_baseline=caml_string_of_jsbytes("dominant-baseline"),
|
||
cst_alignment_baseline=caml_string_of_jsbytes("alignment-baseline"),
|
||
cst_arabic_form=caml_string_of_jsbytes("arabic-form"),
|
||
cst_orientation=caml_string_of_jsbytes("orientation"),
|
||
cst_accumulate=caml_string_of_jsbytes("accumulate"),
|
||
cst_additive=caml_string_of_jsbytes("additive"),
|
||
cst_calcMode=caml_string_of_jsbytes("calcMode"),
|
||
cst_fill$0=caml_string_of_jsbytes("fill"),
|
||
cst_restart=caml_string_of_jsbytes("restart"),
|
||
cst_attributeType=caml_string_of_jsbytes("attributeType"),
|
||
cst_xlink_actuate=caml_string_of_jsbytes("xlink:actuate"),
|
||
cst_xlink_show=caml_string_of_jsbytes("xlink:show"),
|
||
cst_type$2=caml_string_of_jsbytes("type"),
|
||
cst_stitchTiles=caml_string_of_jsbytes("stitchTiles"),
|
||
cst_operator$0=caml_string_of_jsbytes("operator"),
|
||
cst_yChannelSelector=caml_string_of_jsbytes("yChannelSelector"),
|
||
cst_xChannelSelector=caml_string_of_jsbytes("xChannelSelector"),
|
||
cst_targetY$0=caml_string_of_jsbytes("targetY"),
|
||
cst_operator=caml_string_of_jsbytes("operator"),
|
||
cst_type$1=caml_string_of_jsbytes("type"),
|
||
cst_type$0=caml_string_of_jsbytes("type"),
|
||
cst_mode=caml_string_of_jsbytes("mode"),
|
||
cst_in2=caml_string_of_jsbytes("in2"),
|
||
cst_in$0=caml_string_of_jsbytes("in"),
|
||
cst_primitiveUnits=caml_string_of_jsbytes("primitiveUnits"),
|
||
cst_maskContentUnits=caml_string_of_jsbytes("maskContentUnits"),
|
||
cst_maskUnits=caml_string_of_jsbytes("maskUnits"),
|
||
cst_clipPathUnits=caml_string_of_jsbytes("clipPathUnits"),
|
||
cst_patternTransform=caml_string_of_jsbytes("patternTransform"),
|
||
cst_patternContentUnits=caml_string_of_jsbytes("patternContentUnits"),
|
||
cst_patternUnits=caml_string_of_jsbytes("patternUnits"),
|
||
cst_offset=caml_string_of_jsbytes("offset"),
|
||
cst_spreadMethod=caml_string_of_jsbytes("spreadMethod"),
|
||
cst_gradientUnits=caml_string_of_jsbytes("gradientUnits"),
|
||
cst_rendering_intent=caml_string_of_jsbytes("rendering-intent"),
|
||
cst_orient=caml_string_of_jsbytes("orient"),
|
||
cst_markerUnits=caml_string_of_jsbytes("markerUnits"),
|
||
cst_spacing=caml_string_of_jsbytes("spacing"),
|
||
cst_method=caml_string_of_jsbytes("method"),
|
||
cst_text_rendering=caml_string_of_jsbytes("text-rendering"),
|
||
cst_text_decoration=caml_string_of_jsbytes("text-decoration"),
|
||
cst_text_anchor=caml_string_of_jsbytes("text-anchor"),
|
||
cst_lengthAdjust=caml_string_of_jsbytes("lengthAdjust"),
|
||
cst_xml_space=caml_string_of_jsbytes("xml:space"),
|
||
cst_data=caml_string_of_jsbytes("data-"),
|
||
cst_zoomAndSpan=caml_string_of_jsbytes("zoomAndSpan"),
|
||
cst_foreignObject=caml_string_of_jsbytes("foreignObject"),
|
||
cst_metadata=caml_string_of_jsbytes("metadata"),
|
||
content_type=caml_string_of_jsbytes("image/svg+xml"),
|
||
version=caml_string_of_jsbytes("SVG 1.1"),
|
||
standard=caml_string_of_jsbytes("http://www.w3.org/TR/svg11/"),
|
||
namespace=caml_string_of_jsbytes("http://www.w3.org/2000/svg"),
|
||
cst_svg=caml_string_of_jsbytes("svg"),
|
||
cst_version=caml_string_of_jsbytes("version"),
|
||
cst_baseProfile=caml_string_of_jsbytes("baseProfile"),
|
||
cst_x=caml_string_of_jsbytes("x"),
|
||
cst_y=caml_string_of_jsbytes("y"),
|
||
cst_width=caml_string_of_jsbytes("width"),
|
||
cst_height=caml_string_of_jsbytes("height"),
|
||
cst_preserveAspectRatio=caml_string_of_jsbytes("preserveAspectRatio"),
|
||
cst_contentScriptType=caml_string_of_jsbytes("contentScriptType"),
|
||
cst_contentStyleType=caml_string_of_jsbytes("contentStyleType"),
|
||
cst_href=caml_string_of_jsbytes("href"),
|
||
cst_xlink_href=caml_string_of_jsbytes("xlink:href"),
|
||
cst_requiredFeatures=caml_string_of_jsbytes("requiredFeatures"),
|
||
cst_requiredExtension=caml_string_of_jsbytes("requiredExtension"),
|
||
cst_systemLanguage=caml_string_of_jsbytes("systemLanguage"),
|
||
cst_externalRessourcesRequired=
|
||
caml_string_of_jsbytes("externalRessourcesRequired"),
|
||
cst_id=caml_string_of_jsbytes("id"),
|
||
cst_xml_base=caml_string_of_jsbytes("xml:base"),
|
||
cst_xml_lang=caml_string_of_jsbytes("xml:lang"),
|
||
cst_type=caml_string_of_jsbytes("type"),
|
||
cst_media=caml_string_of_jsbytes("media"),
|
||
cst_xlink_title=caml_string_of_jsbytes("xlink:title"),
|
||
cst_class=caml_string_of_jsbytes("class"),
|
||
cst_style=caml_string_of_jsbytes("style"),
|
||
cst_transform=caml_string_of_jsbytes("transform"),
|
||
cst_viewBox=caml_string_of_jsbytes("viewBox"),
|
||
cst_d=caml_string_of_jsbytes("d"),
|
||
cst_pathLength=caml_string_of_jsbytes("pathLength"),
|
||
cst_rx=caml_string_of_jsbytes("rx"),
|
||
cst_ry=caml_string_of_jsbytes("ry"),
|
||
cst_cx=caml_string_of_jsbytes("cx"),
|
||
cst_cy=caml_string_of_jsbytes("cy"),
|
||
cst_r=caml_string_of_jsbytes("r"),
|
||
cst_x1=caml_string_of_jsbytes("x1"),
|
||
cst_y1=caml_string_of_jsbytes("y1"),
|
||
cst_x2=caml_string_of_jsbytes("x2"),
|
||
cst_y2=caml_string_of_jsbytes("y2"),
|
||
cst_points=caml_string_of_jsbytes("points"),
|
||
cst_x$0=caml_string_of_jsbytes("x"),
|
||
cst_y$0=caml_string_of_jsbytes("y"),
|
||
cst_dx=caml_string_of_jsbytes("dx"),
|
||
cst_dy=caml_string_of_jsbytes("dy"),
|
||
cst_dx$0=caml_string_of_jsbytes("dx"),
|
||
cst_dy$0=caml_string_of_jsbytes("dy"),
|
||
cst_textLength=caml_string_of_jsbytes("textLength"),
|
||
cst_rotate=caml_string_of_jsbytes("rotate"),
|
||
cst_startOffset=caml_string_of_jsbytes("startOffset"),
|
||
cst_glyphRef=caml_string_of_jsbytes("glyphRef"),
|
||
cst_format=caml_string_of_jsbytes("format"),
|
||
cst_refX=caml_string_of_jsbytes("refX"),
|
||
cst_refY=caml_string_of_jsbytes("refY"),
|
||
cst_markerWidth=caml_string_of_jsbytes("markerWidth"),
|
||
cst_markerHeight=caml_string_of_jsbytes("markerHeight"),
|
||
cst_local=caml_string_of_jsbytes("local"),
|
||
cst_gradientTransform=caml_string_of_jsbytes("gradientTransform"),
|
||
cst_fx=caml_string_of_jsbytes("fx"),
|
||
cst_fy=caml_string_of_jsbytes("fy"),
|
||
cst_filterResUnits=caml_string_of_jsbytes("filterResUnits"),
|
||
cst_result=caml_string_of_jsbytes("result"),
|
||
cst_azimuth=caml_string_of_jsbytes("azimuth"),
|
||
cst_elevation=caml_string_of_jsbytes("elevation"),
|
||
cst_pointsAtX=caml_string_of_jsbytes("pointsAtX"),
|
||
cst_pointsAtY=caml_string_of_jsbytes("pointsAtY"),
|
||
cst_pointsAtZ=caml_string_of_jsbytes("pointsAtZ"),
|
||
cst_specularExponent=caml_string_of_jsbytes("specularExponent"),
|
||
cst_specularConstant=caml_string_of_jsbytes("specularConstant"),
|
||
cst_limitingConeAngle=caml_string_of_jsbytes("limitingConeAngle"),
|
||
cst_values=caml_string_of_jsbytes("values"),
|
||
cst_tableValues=caml_string_of_jsbytes("tableValues"),
|
||
cst_intercept=caml_string_of_jsbytes("intercept"),
|
||
cst_amplitude=caml_string_of_jsbytes("amplitude"),
|
||
cst_exponent=caml_string_of_jsbytes("exponent"),
|
||
cst_offset$0=caml_string_of_jsbytes("offset"),
|
||
cst_k1=caml_string_of_jsbytes("k1"),
|
||
cst_k2=caml_string_of_jsbytes("k2"),
|
||
cst_k3=caml_string_of_jsbytes("k3"),
|
||
cst_k4=caml_string_of_jsbytes("k4"),
|
||
cst_order=caml_string_of_jsbytes("order"),
|
||
cst_kernelMatrix=caml_string_of_jsbytes("kernelMatrix"),
|
||
cst_divisor=caml_string_of_jsbytes("divisor"),
|
||
cst_bias=caml_string_of_jsbytes("bias"),
|
||
cst_kernelUnitLength=caml_string_of_jsbytes("kernelUnitLength"),
|
||
cst_targetX=caml_string_of_jsbytes("targetX"),
|
||
cst_targetY=caml_string_of_jsbytes("targetY"),
|
||
cst_preserveAlpha=caml_string_of_jsbytes("preserveAlpha"),
|
||
cst_surfaceScale=caml_string_of_jsbytes("surfaceScale"),
|
||
cst_diffuseConstant=caml_string_of_jsbytes("diffuseConstant"),
|
||
cst_scale=caml_string_of_jsbytes("scale"),
|
||
cst_stdDeviation=caml_string_of_jsbytes("stdDeviation"),
|
||
cst_radius=caml_string_of_jsbytes("radius"),
|
||
cst_baseFrequency=caml_string_of_jsbytes("baseFrequency"),
|
||
cst_numOctaves=caml_string_of_jsbytes("numOctaves"),
|
||
cst_seed=caml_string_of_jsbytes("seed"),
|
||
cst_xlink_target=caml_string_of_jsbytes("xlink:target"),
|
||
cst_viewTarget=caml_string_of_jsbytes("viewTarget"),
|
||
cst_attributeName=caml_string_of_jsbytes("attributeName"),
|
||
cst_begin=caml_string_of_jsbytes("begin"),
|
||
cst_dur=caml_string_of_jsbytes("dur"),
|
||
cst_min=caml_string_of_jsbytes("min"),
|
||
cst_max=caml_string_of_jsbytes("max"),
|
||
cst_repeatCount=caml_string_of_jsbytes("repeatCount"),
|
||
cst_repeatDur=caml_string_of_jsbytes("repeatDur"),
|
||
cst_fill=caml_string_of_jsbytes("fill"),
|
||
cst_values$0=caml_string_of_jsbytes("values"),
|
||
cst_keyTimes=caml_string_of_jsbytes("keyTimes"),
|
||
cst_keySplines=caml_string_of_jsbytes("keySplines"),
|
||
cst_from=caml_string_of_jsbytes("from"),
|
||
cst_to=caml_string_of_jsbytes("to"),
|
||
cst_by=caml_string_of_jsbytes("by"),
|
||
cst_keyPoints=caml_string_of_jsbytes("keyPoints"),
|
||
cst_path=caml_string_of_jsbytes("path"),
|
||
cst_type$3=caml_string_of_jsbytes("type"),
|
||
cst_horiz_origin_x=caml_string_of_jsbytes("horiz-origin-x"),
|
||
cst_horiz_origin_y=caml_string_of_jsbytes("horiz-origin-y"),
|
||
cst_horiz_adv_x=caml_string_of_jsbytes("horiz-adv-x"),
|
||
cst_vert_origin_x=caml_string_of_jsbytes("vert-origin-x"),
|
||
cst_vert_origin_y=caml_string_of_jsbytes("vert-origin-y"),
|
||
cst_vert_adv_y=caml_string_of_jsbytes("vert-adv-y"),
|
||
cst_unicode=caml_string_of_jsbytes("unicode"),
|
||
cst_glyphname=caml_string_of_jsbytes("glyphname"),
|
||
cst_lang=caml_string_of_jsbytes("lang"),
|
||
cst_u1=caml_string_of_jsbytes("u1"),
|
||
cst_u2=caml_string_of_jsbytes("u2"),
|
||
cst_g1=caml_string_of_jsbytes("g1"),
|
||
cst_g2=caml_string_of_jsbytes("g2"),
|
||
cst_k=caml_string_of_jsbytes("k"),
|
||
cst_font_family=caml_string_of_jsbytes("font-family"),
|
||
cst_font_style=caml_string_of_jsbytes("font-style"),
|
||
cst_font_variant=caml_string_of_jsbytes("font-variant"),
|
||
cst_font_weight=caml_string_of_jsbytes("font-weight"),
|
||
cst_font_stretch=caml_string_of_jsbytes("font-stretch"),
|
||
cst_font_size=caml_string_of_jsbytes("font-size"),
|
||
cst_unicode_range=caml_string_of_jsbytes("unicode-range"),
|
||
cst_units_per_em=caml_string_of_jsbytes("units-per-em"),
|
||
cst_stemv=caml_string_of_jsbytes("stemv"),
|
||
cst_stemh=caml_string_of_jsbytes("stemh"),
|
||
cst_slope=caml_string_of_jsbytes("slope"),
|
||
cst_cap_height=caml_string_of_jsbytes("cap-height"),
|
||
cst_x_height=caml_string_of_jsbytes("x-height"),
|
||
cst_accent_height=caml_string_of_jsbytes("accent-height"),
|
||
cst_ascent=caml_string_of_jsbytes("ascent"),
|
||
cst_widths=caml_string_of_jsbytes("widths"),
|
||
cst_bbox=caml_string_of_jsbytes("bbox"),
|
||
cst_ideographic=caml_string_of_jsbytes("ideographic"),
|
||
cst_alphabetic=caml_string_of_jsbytes("alphabetic"),
|
||
cst_mathematical=caml_string_of_jsbytes("mathematical"),
|
||
cst_hanging=caml_string_of_jsbytes("hanging"),
|
||
cst_v_ideographic=caml_string_of_jsbytes("v-ideographic"),
|
||
cst_v_alphabetic=caml_string_of_jsbytes("v-alphabetic"),
|
||
cst_v_mathematical=caml_string_of_jsbytes("v-mathematical"),
|
||
cst_v_hanging=caml_string_of_jsbytes("v-hanging"),
|
||
cst_underline_position=caml_string_of_jsbytes("underline-position"),
|
||
cst_underline_thickness=caml_string_of_jsbytes("underline-thickness"),
|
||
cst_strikethrough_position=
|
||
caml_string_of_jsbytes("strikethrough-position"),
|
||
cst_strikethrough_thickness=
|
||
caml_string_of_jsbytes("strikethrough-thickness"),
|
||
cst_overline_position=caml_string_of_jsbytes("overline-position"),
|
||
cst_overline_thickness=caml_string_of_jsbytes("overline-thickness"),
|
||
cst_string=caml_string_of_jsbytes("string"),
|
||
cst_name=caml_string_of_jsbytes("name"),
|
||
cst_onabort=caml_string_of_jsbytes("onabort"),
|
||
cst_onactivate=caml_string_of_jsbytes("onactivate"),
|
||
cst_onbegin=caml_string_of_jsbytes("onbegin"),
|
||
cst_onend=caml_string_of_jsbytes("onend"),
|
||
cst_onerror=caml_string_of_jsbytes("onerror"),
|
||
cst_onfocusin=caml_string_of_jsbytes("onfocusin"),
|
||
cst_onfocusout=caml_string_of_jsbytes("onfocusout"),
|
||
cst_onload=caml_string_of_jsbytes("onload"),
|
||
cst_onrepeat=caml_string_of_jsbytes("onrepeat"),
|
||
cst_onresize=caml_string_of_jsbytes("onresize"),
|
||
cst_onscroll=caml_string_of_jsbytes("onscroll"),
|
||
cst_onunload=caml_string_of_jsbytes("onunload"),
|
||
cst_onzoom=caml_string_of_jsbytes("onzoom"),
|
||
cst_onclick=caml_string_of_jsbytes("onclick"),
|
||
cst_onmousedown=caml_string_of_jsbytes("onmousedown"),
|
||
cst_onmouseup=caml_string_of_jsbytes("onmouseup"),
|
||
cst_onmouseover=caml_string_of_jsbytes("onmouseover"),
|
||
cst_onmouseout=caml_string_of_jsbytes("onmouseout"),
|
||
cst_onmousemove=caml_string_of_jsbytes("onmousemove"),
|
||
cst_ontouchstart=caml_string_of_jsbytes("ontouchstart"),
|
||
cst_ontouchend=caml_string_of_jsbytes("ontouchend"),
|
||
cst_ontouchmove=caml_string_of_jsbytes("ontouchmove"),
|
||
cst_ontouchcancel=caml_string_of_jsbytes("ontouchcancel"),
|
||
cst_stop_color=caml_string_of_jsbytes("stop-color"),
|
||
cst_stop_opacity=caml_string_of_jsbytes("stop-opacity"),
|
||
cst_stroke=caml_string_of_jsbytes("stroke"),
|
||
cst_stroke_width=caml_string_of_jsbytes("stroke-width"),
|
||
cst_stroke_miterlimit=caml_string_of_jsbytes("stroke-miterlimit"),
|
||
cst_stroke_dashoffset=caml_string_of_jsbytes("stroke-dashoffset"),
|
||
cst_stroke_opacity=caml_string_of_jsbytes("stroke-opacity"),
|
||
cst_g=caml_string_of_jsbytes("g"),
|
||
cst_defs=caml_string_of_jsbytes("defs"),
|
||
cst_desc=caml_string_of_jsbytes("desc"),
|
||
cst_title=caml_string_of_jsbytes("title"),
|
||
cst_symbol=caml_string_of_jsbytes("symbol"),
|
||
cst_use=caml_string_of_jsbytes("use"),
|
||
cst_image=caml_string_of_jsbytes("image"),
|
||
cst_switch=caml_string_of_jsbytes("switch"),
|
||
cst_style$0=caml_string_of_jsbytes("style"),
|
||
cst_path$0=caml_string_of_jsbytes("path"),
|
||
cst_rect=caml_string_of_jsbytes("rect"),
|
||
cst_circle=caml_string_of_jsbytes("circle"),
|
||
cst_ellipse=caml_string_of_jsbytes("ellipse"),
|
||
cst_line=caml_string_of_jsbytes("line"),
|
||
cst_polyline=caml_string_of_jsbytes("polyline"),
|
||
cst_polygon=caml_string_of_jsbytes("polygon"),
|
||
cst_text=caml_string_of_jsbytes("text"),
|
||
cst_tspan=caml_string_of_jsbytes("tspan"),
|
||
cst_tref=caml_string_of_jsbytes("tref"),
|
||
cst_textPath=caml_string_of_jsbytes("textPath"),
|
||
cst_altGlyph=caml_string_of_jsbytes("altGlyph"),
|
||
cst_altGlyphDef=caml_string_of_jsbytes("altGlyphDef"),
|
||
cst_altGlyphItem=caml_string_of_jsbytes("altGlyphItem"),
|
||
cst_glyphRef$0=caml_string_of_jsbytes("glyphRef"),
|
||
cst_marker=caml_string_of_jsbytes("marker"),
|
||
cst_color_profile=caml_string_of_jsbytes("color-profile"),
|
||
cst_linearGradient=caml_string_of_jsbytes("linearGradient"),
|
||
cst_radialGradient=caml_string_of_jsbytes("radialGradient"),
|
||
cst_stop=caml_string_of_jsbytes("stop"),
|
||
cst_pattern=caml_string_of_jsbytes("pattern"),
|
||
cst_clipPath=caml_string_of_jsbytes("clipPath"),
|
||
cst_filter=caml_string_of_jsbytes("filter"),
|
||
cst_feDistantLight=caml_string_of_jsbytes("feDistantLight"),
|
||
cst_fePointLight=caml_string_of_jsbytes("fePointLight"),
|
||
cst_feSpotLight=caml_string_of_jsbytes("feSpotLight"),
|
||
cst_feBlend=caml_string_of_jsbytes("feBlend"),
|
||
cst_feColorMatrix=caml_string_of_jsbytes("feColorMatrix"),
|
||
cst_feComponentTransfer=caml_string_of_jsbytes("feComponentTransfer"),
|
||
cst_feFuncA=caml_string_of_jsbytes("feFuncA"),
|
||
cst_feFuncG=caml_string_of_jsbytes("feFuncG"),
|
||
cst_feFuncB=caml_string_of_jsbytes("feFuncB"),
|
||
cst_feFuncR=caml_string_of_jsbytes("feFuncR"),
|
||
cst_feComposite=caml_string_of_jsbytes("feComposite"),
|
||
cst_feConvolveMatrix=caml_string_of_jsbytes("feConvolveMatrix"),
|
||
cst_feDiffuseLighting=caml_string_of_jsbytes("feDiffuseLighting"),
|
||
cst_feDisplacementMap=caml_string_of_jsbytes("feDisplacementMap"),
|
||
cst_feFlood=caml_string_of_jsbytes("feFlood"),
|
||
cst_feGaussianBlur=caml_string_of_jsbytes("feGaussianBlur"),
|
||
cst_feImage=caml_string_of_jsbytes("feImage"),
|
||
cst_feMerge=caml_string_of_jsbytes("feMerge"),
|
||
cst_feMorphology=caml_string_of_jsbytes("feMorphology"),
|
||
cst_feOffset=caml_string_of_jsbytes("feOffset"),
|
||
cst_feSpecularLighting=caml_string_of_jsbytes("feSpecularLighting"),
|
||
cst_feTile=caml_string_of_jsbytes("feTile"),
|
||
cst_feTurbulence=caml_string_of_jsbytes("feTurbulence"),
|
||
cst_cursor=caml_string_of_jsbytes("cursor"),
|
||
cst_a=caml_string_of_jsbytes("a"),
|
||
cst_view=caml_string_of_jsbytes("view"),
|
||
cst_script=caml_string_of_jsbytes("script"),
|
||
cst_animate=caml_string_of_jsbytes("animate"),
|
||
cst_set=caml_string_of_jsbytes("set"),
|
||
cst_animateMotion=caml_string_of_jsbytes("animateMotion"),
|
||
cst_mpath=caml_string_of_jsbytes("mpath"),
|
||
cst_animateColor=caml_string_of_jsbytes("animateColor"),
|
||
cst_animateTransform=caml_string_of_jsbytes("animateTransform"),
|
||
cst_font=caml_string_of_jsbytes("font"),
|
||
cst_glyph=caml_string_of_jsbytes("glyph"),
|
||
cst_missing_glyph=caml_string_of_jsbytes("missing-glyph"),
|
||
cst_hkern=caml_string_of_jsbytes("hkern"),
|
||
cst_vkern=caml_string_of_jsbytes("vkern"),
|
||
cst_font_face=caml_string_of_jsbytes("font-face"),
|
||
cst_font_face_src=caml_string_of_jsbytes("font-face-src"),
|
||
cst_font_face_uri=caml_string_of_jsbytes("font-face-uri"),
|
||
cst_font_face_uri$0=caml_string_of_jsbytes("font-face-uri"),
|
||
cst_font_face_name=caml_string_of_jsbytes("font-face-name"),
|
||
cst$34=caml_string_of_jsbytes(" "),
|
||
cst_none=caml_string_of_jsbytes("none"),
|
||
cst_currentColor=caml_string_of_jsbytes("currentColor"),
|
||
cst$33=caml_string_of_jsbytes(" "),
|
||
sep=caml_string_of_jsbytes(" "),
|
||
cst_px=caml_string_of_jsbytes("px"),
|
||
cst_pt=caml_string_of_jsbytes("pt"),
|
||
cst_pc=caml_string_of_jsbytes("pc"),
|
||
cst_in=caml_string_of_jsbytes("in"),
|
||
cst_mm=caml_string_of_jsbytes("mm"),
|
||
cst_ex=caml_string_of_jsbytes("ex"),
|
||
cst_em=caml_string_of_jsbytes("em"),
|
||
cst_cm=caml_string_of_jsbytes("cm"),
|
||
cst$32=caml_string_of_jsbytes("%"),
|
||
cst_grad=caml_string_of_jsbytes("grad"),
|
||
cst_deg=caml_string_of_jsbytes("deg"),
|
||
cst_rad=caml_string_of_jsbytes("rad"),
|
||
cst$31=caml_string_of_jsbytes(""),
|
||
cst$46=caml_string_of_jsbytes(", "),
|
||
cst$45=caml_string_of_jsbytes(" "),
|
||
cst$44=caml_string_of_jsbytes(", "),
|
||
cst$43=caml_string_of_jsbytes(","),
|
||
cst$42=caml_string_of_jsbytes(" "),
|
||
cst$41=caml_string_of_jsbytes(" "),
|
||
cst_any$1=caml_string_of_jsbytes("any"),
|
||
cst_any$0=caml_string_of_jsbytes("any"),
|
||
cst$40=caml_string_of_jsbytes(""),
|
||
cst_on=caml_string_of_jsbytes("on"),
|
||
cst_off=caml_string_of_jsbytes("off"),
|
||
cst_week=caml_string_of_jsbytes("week"),
|
||
cst_time$0=caml_string_of_jsbytes("time"),
|
||
cst_text$0=caml_string_of_jsbytes("text"),
|
||
cst_file=caml_string_of_jsbytes("file"),
|
||
cst_date=caml_string_of_jsbytes("date"),
|
||
cst_datetime_local=caml_string_of_jsbytes("datetime-local"),
|
||
cst_password=caml_string_of_jsbytes("password"),
|
||
cst_month=caml_string_of_jsbytes("month"),
|
||
cst_search$1=caml_string_of_jsbytes("search"),
|
||
cst_button$0=caml_string_of_jsbytes("button"),
|
||
cst_checkbox$0=caml_string_of_jsbytes("checkbox"),
|
||
cst_email$0=caml_string_of_jsbytes("email"),
|
||
cst_hidden$1=caml_string_of_jsbytes("hidden"),
|
||
cst_url$0=caml_string_of_jsbytes("url"),
|
||
cst_tel$0=caml_string_of_jsbytes("tel"),
|
||
cst_reset=caml_string_of_jsbytes("reset"),
|
||
cst_range=caml_string_of_jsbytes("range"),
|
||
cst_radio$0=caml_string_of_jsbytes("radio"),
|
||
cst_readonly$1=caml_string_of_jsbytes("readonly"),
|
||
cst_color=caml_string_of_jsbytes("color"),
|
||
cst_number=caml_string_of_jsbytes("number"),
|
||
cst_image$0=caml_string_of_jsbytes("image"),
|
||
cst_submit=caml_string_of_jsbytes("submit"),
|
||
cst_datetime$0=caml_string_of_jsbytes("datetime"),
|
||
cst_external$0=caml_string_of_jsbytes("external"),
|
||
cst_0=caml_string_of_jsbytes("0"),
|
||
cst_formnovalidate$0=caml_string_of_jsbytes("formnovalidate"),
|
||
cst_audio$0=caml_string_of_jsbytes("audio"),
|
||
cst_async$0=caml_string_of_jsbytes("async"),
|
||
cst_toolbar=caml_string_of_jsbytes("toolbar"),
|
||
cst_soft=caml_string_of_jsbytes("soft"),
|
||
cst_rows$0=caml_string_of_jsbytes("rows"),
|
||
cst_rect$0=caml_string_of_jsbytes("rect"),
|
||
cst_prev$0=caml_string_of_jsbytes("prev"),
|
||
cst_POST=caml_string_of_jsbytes("POST"),
|
||
cst_poly=caml_string_of_jsbytes("poly"),
|
||
cst_open$0=caml_string_of_jsbytes("open"),
|
||
cst_none$2=caml_string_of_jsbytes("none"),
|
||
cst_next$0=caml_string_of_jsbytes("next"),
|
||
cst_loop$0=caml_string_of_jsbytes("loop"),
|
||
cst_left=caml_string_of_jsbytes("left"),
|
||
cst_last$0=caml_string_of_jsbytes("last"),
|
||
cst_kana=caml_string_of_jsbytes("kana"),
|
||
cst_icon$1=caml_string_of_jsbytes("icon"),
|
||
cst_help$0=caml_string_of_jsbytes("help"),
|
||
cst_hard=caml_string_of_jsbytes("hard"),
|
||
cst_cols$0=caml_string_of_jsbytes("cols"),
|
||
cst_char$0=caml_string_of_jsbytes("char"),
|
||
cst_auto$3=caml_string_of_jsbytes("auto"),
|
||
cst_noreferrer$0=caml_string_of_jsbytes("noreferrer"),
|
||
cst_author$0=caml_string_of_jsbytes("author"),
|
||
cst_muted$0=caml_string_of_jsbytes("muted"),
|
||
cst_autoplay$0=caml_string_of_jsbytes("autoplay"),
|
||
cst_anonymous=caml_string_of_jsbytes("anonymous"),
|
||
cst_metadata$0=caml_string_of_jsbytes("metadata"),
|
||
cst_license$0=caml_string_of_jsbytes("license"),
|
||
cst_search$0=caml_string_of_jsbytes("search"),
|
||
cst_first$0=caml_string_of_jsbytes("first"),
|
||
cst_novalidate$0=caml_string_of_jsbytes("novalidate"),
|
||
cst_controls$0=caml_string_of_jsbytes("controls"),
|
||
cst_bookmark$0=caml_string_of_jsbytes("bookmark"),
|
||
cst_required$0=caml_string_of_jsbytes("required"),
|
||
cst_selected$0=caml_string_of_jsbytes("selected"),
|
||
cst_circle$0=caml_string_of_jsbytes("circle"),
|
||
cst_rowgroup=caml_string_of_jsbytes("rowgroup"),
|
||
cst_checkbox=caml_string_of_jsbytes("checkbox"),
|
||
cst_katakana=caml_string_of_jsbytes("katakana"),
|
||
cst_email=caml_string_of_jsbytes("email"),
|
||
cst_latin=caml_string_of_jsbytes("latin"),
|
||
cst_hidden$0=caml_string_of_jsbytes("hidden"),
|
||
cst_yes=caml_string_of_jsbytes("yes"),
|
||
cst_url=caml_string_of_jsbytes("url"),
|
||
cst_tel=caml_string_of_jsbytes("tel"),
|
||
cst_tag$0=caml_string_of_jsbytes("tag"),
|
||
cst_rtl=caml_string_of_jsbytes("rtl"),
|
||
cst_row=caml_string_of_jsbytes("row"),
|
||
cst_1=caml_string_of_jsbytes("1"),
|
||
cst_ltr=caml_string_of_jsbytes("ltr"),
|
||
cst_GET=caml_string_of_jsbytes("GET"),
|
||
cst_col$0=caml_string_of_jsbytes("col"),
|
||
cst_any=caml_string_of_jsbytes("any"),
|
||
cst_all$0=caml_string_of_jsbytes("all"),
|
||
cst_up$0=caml_string_of_jsbytes("up"),
|
||
cst_no=caml_string_of_jsbytes("no"),
|
||
cst_right=caml_string_of_jsbytes("right"),
|
||
cst_scoped$0=caml_string_of_jsbytes("scoped"),
|
||
cst_numeric=caml_string_of_jsbytes("numeric"),
|
||
cst_pingback$0=caml_string_of_jsbytes("pingback"),
|
||
cst_radio=caml_string_of_jsbytes("radio"),
|
||
cst_pubdate$0=caml_string_of_jsbytes("pubdate"),
|
||
cst_multiple$0=caml_string_of_jsbytes("multiple"),
|
||
cst_latin_name=caml_string_of_jsbytes("latin-name"),
|
||
cst_autofocus$0=caml_string_of_jsbytes("autofocus"),
|
||
cst_nofollow$0=caml_string_of_jsbytes("nofollow"),
|
||
cst_defer$0=caml_string_of_jsbytes("defer"),
|
||
cst_full_width_latin=caml_string_of_jsbytes("full-width-latin"),
|
||
cst_default$0=caml_string_of_jsbytes("default"),
|
||
cst_context=caml_string_of_jsbytes("context"),
|
||
cst_verbatim=caml_string_of_jsbytes("verbatim"),
|
||
cst_checked$0=caml_string_of_jsbytes("checked"),
|
||
cst_stylesheet$0=caml_string_of_jsbytes("stylesheet"),
|
||
cst_reserved$0=caml_string_of_jsbytes("reserved"),
|
||
cst_alternate$0=caml_string_of_jsbytes("alternate"),
|
||
cst_http_www_w3_org_1999_xhtml=
|
||
caml_string_of_jsbytes("http://www.w3.org/1999/xhtml"),
|
||
cst_disabled$0=caml_string_of_jsbytes("disabled"),
|
||
cst_ismap$0=caml_string_of_jsbytes("ismap"),
|
||
cst_use_credentials=caml_string_of_jsbytes("use-credentials"),
|
||
cst_index$0=caml_string_of_jsbytes("index"),
|
||
cst_justify=caml_string_of_jsbytes("justify"),
|
||
cst_groups=caml_string_of_jsbytes("groups"),
|
||
cst_command$0=caml_string_of_jsbytes("command"),
|
||
cst_sidebar$0=caml_string_of_jsbytes("sidebar"),
|
||
cst_latin_prose=caml_string_of_jsbytes("latin-prose"),
|
||
cst_readonly$0=caml_string_of_jsbytes("readonly"),
|
||
cst_colgroup$0=caml_string_of_jsbytes("colgroup"),
|
||
cst_archives$0=caml_string_of_jsbytes("archives"),
|
||
cst_seamless$0=caml_string_of_jsbytes("seamless"),
|
||
cst_preserve$0=caml_string_of_jsbytes("preserve"),
|
||
cst_prefetch$0=caml_string_of_jsbytes("prefetch"),
|
||
cst_same_origin=caml_string_of_jsbytes("same-origin"),
|
||
cst_origin_when_cross_origin=
|
||
caml_string_of_jsbytes("origin-when-cross-origin"),
|
||
cst_no_referrer_when_downgrade=
|
||
caml_string_of_jsbytes("no-referrer-when-downgrade"),
|
||
cst_no_referrer=caml_string_of_jsbytes("no-referrer"),
|
||
cst_unsafe_url=caml_string_of_jsbytes("unsafe-url"),
|
||
cst$39=caml_string_of_jsbytes(""),
|
||
cst_origin=caml_string_of_jsbytes("origin"),
|
||
cst_strict_origin=caml_string_of_jsbytes("strict-origin"),
|
||
cst_strict_origin_when_cross_o=
|
||
caml_string_of_jsbytes("strict-origin-when-cross-origin"),
|
||
cst_projection=caml_string_of_jsbytes("projection"),
|
||
cst_aural=caml_string_of_jsbytes("aural"),
|
||
cst_handheld=caml_string_of_jsbytes("handheld"),
|
||
cst_embossed=caml_string_of_jsbytes("embossed"),
|
||
cst_tty=caml_string_of_jsbytes("tty"),
|
||
cst_all=caml_string_of_jsbytes("all"),
|
||
cst_tv=caml_string_of_jsbytes("tv"),
|
||
cst_screen$0=caml_string_of_jsbytes("screen"),
|
||
cst_speech=caml_string_of_jsbytes("speech"),
|
||
cst_print=caml_string_of_jsbytes("print"),
|
||
cst_braille=caml_string_of_jsbytes("braille"),
|
||
cst_external=caml_string_of_jsbytes("external"),
|
||
cst_canonical=caml_string_of_jsbytes("canonical"),
|
||
cst_prev=caml_string_of_jsbytes("prev"),
|
||
cst_next=caml_string_of_jsbytes("next"),
|
||
cst_last=caml_string_of_jsbytes("last"),
|
||
cst_icon$0=caml_string_of_jsbytes("icon"),
|
||
cst_help=caml_string_of_jsbytes("help"),
|
||
cst_noreferrer=caml_string_of_jsbytes("noreferrer"),
|
||
cst_author=caml_string_of_jsbytes("author"),
|
||
cst_license=caml_string_of_jsbytes("license"),
|
||
cst_search=caml_string_of_jsbytes("search"),
|
||
cst_noopener=caml_string_of_jsbytes("noopener"),
|
||
cst_first=caml_string_of_jsbytes("first"),
|
||
cst_bookmark=caml_string_of_jsbytes("bookmark"),
|
||
cst_tag=caml_string_of_jsbytes("tag"),
|
||
cst_up=caml_string_of_jsbytes("up"),
|
||
cst_pingback=caml_string_of_jsbytes("pingback"),
|
||
cst_nofollow=caml_string_of_jsbytes("nofollow"),
|
||
cst_stylesheet=caml_string_of_jsbytes("stylesheet"),
|
||
cst_alternate=caml_string_of_jsbytes("alternate"),
|
||
cst_index=caml_string_of_jsbytes("index"),
|
||
cst_sidebar=caml_string_of_jsbytes("sidebar"),
|
||
cst_archives=caml_string_of_jsbytes("archives"),
|
||
cst_prefetch=caml_string_of_jsbytes("prefetch"),
|
||
cst_allow_same_origin=caml_string_of_jsbytes("allow-same-origin"),
|
||
cst_allow_popups=caml_string_of_jsbytes("allow-popups"),
|
||
cst_allow_forms=caml_string_of_jsbytes("allow-forms"),
|
||
cst_allow_pointer_lock=caml_string_of_jsbytes("allow-pointer-lock"),
|
||
cst_allow_script=caml_string_of_jsbytes("allow-script"),
|
||
cst_allow_top_navigation=caml_string_of_jsbytes("allow-top-navigation"),
|
||
cst_link=caml_string_of_jsbytes("link"),
|
||
cst_style$2=caml_string_of_jsbytes("style"),
|
||
cst_img=caml_string_of_jsbytes("img"),
|
||
cst_object=caml_string_of_jsbytes("object"),
|
||
cst_table$0=caml_string_of_jsbytes("table"),
|
||
cst_figure=caml_string_of_jsbytes("figure"),
|
||
cst_optgroup=caml_string_of_jsbytes("optgroup"),
|
||
cst_fieldset=caml_string_of_jsbytes("fieldset"),
|
||
cst_details=caml_string_of_jsbytes("details"),
|
||
cst_datalist=caml_string_of_jsbytes("datalist"),
|
||
cst_menu=caml_string_of_jsbytes("menu"),
|
||
cst_command=caml_string_of_jsbytes("command"),
|
||
cst_area=caml_string_of_jsbytes("area"),
|
||
cst_coords=caml_string_of_jsbytes("coords"),
|
||
cst_shape=caml_string_of_jsbytes("shape"),
|
||
cst_bdo=caml_string_of_jsbytes("bdo"),
|
||
cst_nbsp=caml_string_of_jsbytes("nbsp"),
|
||
cst_html$0=caml_string_of_jsbytes("html"),
|
||
cst_aria=caml_string_of_jsbytes("aria-"),
|
||
cst_scrolling=caml_string_of_jsbytes("scrolling"),
|
||
cst_frameborder=caml_string_of_jsbytes("frameborder"),
|
||
cst_char=caml_string_of_jsbytes("char"),
|
||
cst_rules=caml_string_of_jsbytes("rules"),
|
||
cst_scope=caml_string_of_jsbytes("scope"),
|
||
cst_align=caml_string_of_jsbytes("align"),
|
||
cst_type$8=caml_string_of_jsbytes("type"),
|
||
cst_type$7=caml_string_of_jsbytes("type"),
|
||
cst_type$6=caml_string_of_jsbytes("type"),
|
||
cst_type$5=caml_string_of_jsbytes("type"),
|
||
cst_wrap$0=caml_string_of_jsbytes("wrap"),
|
||
cst_step=caml_string_of_jsbytes("step"),
|
||
cst_sizes=caml_string_of_jsbytes("sizes"),
|
||
cst_spellcheck=caml_string_of_jsbytes("spellcheck"),
|
||
cst_sandbox=caml_string_of_jsbytes("sandbox"),
|
||
cst_preload=caml_string_of_jsbytes("preload"),
|
||
cst_inputmode=caml_string_of_jsbytes("inputmode"),
|
||
cst_draggable=caml_string_of_jsbytes("draggable"),
|
||
cst_dir=caml_string_of_jsbytes("dir"),
|
||
cst_contenteditable=caml_string_of_jsbytes("contenteditable"),
|
||
cst_crossorigin=caml_string_of_jsbytes("crossorigin"),
|
||
cst_autocomplete=caml_string_of_jsbytes("autocomplete"),
|
||
cst_referrerpolicy=caml_string_of_jsbytes("referrerpolicy"),
|
||
cst_method$0=caml_string_of_jsbytes("method"),
|
||
cst_width$0=caml_string_of_jsbytes("width"),
|
||
cst_height$0=caml_string_of_jsbytes("height"),
|
||
cst_download=caml_string_of_jsbytes("download"),
|
||
cst_accesskey=caml_string_of_jsbytes("accesskey"),
|
||
cst_xml_space$0=caml_string_of_jsbytes("xml:space"),
|
||
cst_xmlns$4=caml_string_of_jsbytes("xmlns"),
|
||
cst_data$0=caml_string_of_jsbytes("data-"),
|
||
content_type$0=caml_string_of_jsbytes("text/html"),
|
||
alternative_content_types=
|
||
[0,
|
||
caml_string_of_jsbytes("application/xhtml+xml"),
|
||
[0,
|
||
caml_string_of_jsbytes("application/xml"),
|
||
[0,caml_string_of_jsbytes("text/xml"),0]]],
|
||
version$0=caml_string_of_jsbytes("HTML5-draft"),
|
||
standard$0=caml_string_of_jsbytes("http://www.w3.org/TR/html5/"),
|
||
namespace$0=caml_string_of_jsbytes("http://www.w3.org/1999/xhtml"),
|
||
cst_html=caml_string_of_jsbytes("html"),
|
||
emptytags=
|
||
caml_list_of_js_array
|
||
([caml_string_of_jsbytes("area"),
|
||
caml_string_of_jsbytes("base"),
|
||
caml_string_of_jsbytes("br"),
|
||
caml_string_of_jsbytes("col"),
|
||
caml_string_of_jsbytes("command"),
|
||
caml_string_of_jsbytes("embed"),
|
||
caml_string_of_jsbytes("hr"),
|
||
caml_string_of_jsbytes("img"),
|
||
caml_string_of_jsbytes("input"),
|
||
caml_string_of_jsbytes("keygen"),
|
||
caml_string_of_jsbytes("link"),
|
||
caml_string_of_jsbytes("meta"),
|
||
caml_string_of_jsbytes("param"),
|
||
caml_string_of_jsbytes("source"),
|
||
caml_string_of_jsbytes("wbr")]),
|
||
cst_class$0=caml_string_of_jsbytes("class"),
|
||
cst_id$0=caml_string_of_jsbytes("id"),
|
||
cst_title$0=caml_string_of_jsbytes("title"),
|
||
cst_xml_lang$0=caml_string_of_jsbytes("xml:lang"),
|
||
cst_lang$0=caml_string_of_jsbytes("lang"),
|
||
cst_style$1=caml_string_of_jsbytes("style"),
|
||
cst_property=caml_string_of_jsbytes("property"),
|
||
cst_onabort$0=caml_string_of_jsbytes("onabort"),
|
||
cst_onafterprint=caml_string_of_jsbytes("onafterprint"),
|
||
cst_onbeforeprint=caml_string_of_jsbytes("onbeforeprint"),
|
||
cst_onbeforeunload=caml_string_of_jsbytes("onbeforeunload"),
|
||
cst_onblur=caml_string_of_jsbytes("onblur"),
|
||
cst_oncanplay=caml_string_of_jsbytes("oncanplay"),
|
||
cst_oncanplaythrough=caml_string_of_jsbytes("oncanplaythrough"),
|
||
cst_onchange=caml_string_of_jsbytes("onchange"),
|
||
cst_ondurationchange=caml_string_of_jsbytes("ondurationchange"),
|
||
cst_onemptied=caml_string_of_jsbytes("onemptied"),
|
||
cst_onended=caml_string_of_jsbytes("onended"),
|
||
cst_onerror$0=caml_string_of_jsbytes("onerror"),
|
||
cst_onfocus=caml_string_of_jsbytes("onfocus"),
|
||
cst_onformchange=caml_string_of_jsbytes("onformchange"),
|
||
cst_onforminput=caml_string_of_jsbytes("onforminput"),
|
||
cst_onhashchange=caml_string_of_jsbytes("onhashchange"),
|
||
cst_oninput=caml_string_of_jsbytes("oninput"),
|
||
cst_oninvalid=caml_string_of_jsbytes("oninvalid"),
|
||
cst_onoffline=caml_string_of_jsbytes("onoffline"),
|
||
cst_ononline=caml_string_of_jsbytes("ononline"),
|
||
cst_onpause=caml_string_of_jsbytes("onpause"),
|
||
cst_onplay=caml_string_of_jsbytes("onplay"),
|
||
cst_onplaying=caml_string_of_jsbytes("onplaying"),
|
||
cst_onpagehide=caml_string_of_jsbytes("onpagehide"),
|
||
cst_onpageshow=caml_string_of_jsbytes("onpageshow"),
|
||
cst_onpopstate=caml_string_of_jsbytes("onpopstate"),
|
||
cst_onprogress=caml_string_of_jsbytes("onprogress"),
|
||
cst_onratechange=caml_string_of_jsbytes("onratechange"),
|
||
cst_onreadystatechange=caml_string_of_jsbytes("onreadystatechange"),
|
||
cst_onredo=caml_string_of_jsbytes("onredo"),
|
||
cst_onresize$0=caml_string_of_jsbytes("onresize"),
|
||
cst_onscroll$0=caml_string_of_jsbytes("onscroll"),
|
||
cst_onseeked=caml_string_of_jsbytes("onseeked"),
|
||
cst_onseeking=caml_string_of_jsbytes("onseeking"),
|
||
cst_onselect=caml_string_of_jsbytes("onselect"),
|
||
cst_onshow=caml_string_of_jsbytes("onshow"),
|
||
cst_onstalled=caml_string_of_jsbytes("onstalled"),
|
||
cst_onstorage=caml_string_of_jsbytes("onstorage"),
|
||
cst_onsubmit=caml_string_of_jsbytes("onsubmit"),
|
||
cst_onsuspend=caml_string_of_jsbytes("onsuspend"),
|
||
cst_ontimeupdate=caml_string_of_jsbytes("ontimeupdate"),
|
||
cst_onundo=caml_string_of_jsbytes("onundo"),
|
||
cst_onunload$0=caml_string_of_jsbytes("onunload"),
|
||
cst_onvolumechange=caml_string_of_jsbytes("onvolumechange"),
|
||
cst_onwaiting=caml_string_of_jsbytes("onwaiting"),
|
||
cst_onload$0=caml_string_of_jsbytes("onload"),
|
||
cst_onloadeddata=caml_string_of_jsbytes("onloadeddata"),
|
||
cst_onloadedmetadata=caml_string_of_jsbytes("onloadedmetadata"),
|
||
cst_onloadstart=caml_string_of_jsbytes("onloadstart"),
|
||
cst_onmessage=caml_string_of_jsbytes("onmessage"),
|
||
cst_onmousewheel=caml_string_of_jsbytes("onmousewheel"),
|
||
cst_onclick$0=caml_string_of_jsbytes("onclick"),
|
||
cst_oncontextmenu=caml_string_of_jsbytes("oncontextmenu"),
|
||
cst_ondblclick=caml_string_of_jsbytes("ondblclick"),
|
||
cst_ondrag=caml_string_of_jsbytes("ondrag"),
|
||
cst_ondragend=caml_string_of_jsbytes("ondragend"),
|
||
cst_ondragenter=caml_string_of_jsbytes("ondragenter"),
|
||
cst_ondragleave=caml_string_of_jsbytes("ondragleave"),
|
||
cst_ondragover=caml_string_of_jsbytes("ondragover"),
|
||
cst_ondragstart=caml_string_of_jsbytes("ondragstart"),
|
||
cst_ondrop=caml_string_of_jsbytes("ondrop"),
|
||
cst_onmousedown$0=caml_string_of_jsbytes("onmousedown"),
|
||
cst_onmouseup$0=caml_string_of_jsbytes("onmouseup"),
|
||
cst_onmouseover$0=caml_string_of_jsbytes("onmouseover"),
|
||
cst_onmousemove$0=caml_string_of_jsbytes("onmousemove"),
|
||
cst_onmouseout$0=caml_string_of_jsbytes("onmouseout"),
|
||
cst_ontouchstart$0=caml_string_of_jsbytes("ontouchstart"),
|
||
cst_ontouchend$0=caml_string_of_jsbytes("ontouchend"),
|
||
cst_ontouchmove$0=caml_string_of_jsbytes("ontouchmove"),
|
||
cst_ontouchcancel$0=caml_string_of_jsbytes("ontouchcancel"),
|
||
cst_onkeypress=caml_string_of_jsbytes("onkeypress"),
|
||
cst_onkeydown=caml_string_of_jsbytes("onkeydown"),
|
||
cst_onkeyup=caml_string_of_jsbytes("onkeyup"),
|
||
cst_version$0=caml_string_of_jsbytes("version"),
|
||
cst_manifest=caml_string_of_jsbytes("manifest"),
|
||
cst_cite=caml_string_of_jsbytes("cite"),
|
||
cst_charset=caml_string_of_jsbytes("charset"),
|
||
cst_accept_charset=caml_string_of_jsbytes("accept-charset"),
|
||
cst_accept=caml_string_of_jsbytes("accept"),
|
||
cst_href$0=caml_string_of_jsbytes("href"),
|
||
cst_hreflang=caml_string_of_jsbytes("hreflang"),
|
||
cst_rel=caml_string_of_jsbytes("rel"),
|
||
cst_tabindex=caml_string_of_jsbytes("tabindex"),
|
||
cst_type$4=caml_string_of_jsbytes("type"),
|
||
cst_alt=caml_string_of_jsbytes("alt"),
|
||
cst_src=caml_string_of_jsbytes("src"),
|
||
cst_for=caml_string_of_jsbytes("for"),
|
||
cst_for$0=caml_string_of_jsbytes("for"),
|
||
cst_selected=caml_string_of_jsbytes("selected"),
|
||
cst_value=caml_string_of_jsbytes("value"),
|
||
cst_value$0=caml_string_of_jsbytes("value"),
|
||
cst_value$1=caml_string_of_jsbytes("value"),
|
||
cst_value$2=caml_string_of_jsbytes("value"),
|
||
cst_action=caml_string_of_jsbytes("action"),
|
||
cst_enctype=caml_string_of_jsbytes("enctype"),
|
||
cst_checked=caml_string_of_jsbytes("checked"),
|
||
cst_disabled=caml_string_of_jsbytes("disabled"),
|
||
cst_readonly=caml_string_of_jsbytes("readonly"),
|
||
cst_maxlength=caml_string_of_jsbytes("maxlength"),
|
||
cst_minlength=caml_string_of_jsbytes("minlength"),
|
||
cst_name$0=caml_string_of_jsbytes("name"),
|
||
cst_allowfullscreen=caml_string_of_jsbytes("allowfullscreen"),
|
||
cst_allowpaymentrequest=caml_string_of_jsbytes("allowpaymentrequest"),
|
||
cst_async=caml_string_of_jsbytes("async"),
|
||
cst_autofocus=caml_string_of_jsbytes("autofocus"),
|
||
cst_autoplay=caml_string_of_jsbytes("autoplay"),
|
||
cst_muted=caml_string_of_jsbytes("muted"),
|
||
cst_integrity=caml_string_of_jsbytes("integrity"),
|
||
cst_mediagroup=caml_string_of_jsbytes("mediagroup"),
|
||
cst_challenge=caml_string_of_jsbytes("challenge"),
|
||
cst_contextmenu=caml_string_of_jsbytes("contextmenu"),
|
||
cst_controls=caml_string_of_jsbytes("controls"),
|
||
cst_form=caml_string_of_jsbytes("form"),
|
||
cst_formaction=caml_string_of_jsbytes("formaction"),
|
||
cst_formenctype=caml_string_of_jsbytes("formenctype"),
|
||
cst_formnovalidate=caml_string_of_jsbytes("formnovalidate"),
|
||
cst_formtarget=caml_string_of_jsbytes("formtarget"),
|
||
cst_hidden=caml_string_of_jsbytes("hidden"),
|
||
cst_high=caml_string_of_jsbytes("high"),
|
||
cst_icon=caml_string_of_jsbytes("icon"),
|
||
cst_ismap=caml_string_of_jsbytes("ismap"),
|
||
cst_keytype=caml_string_of_jsbytes("keytype"),
|
||
cst_list=caml_string_of_jsbytes("list"),
|
||
cst_loop=caml_string_of_jsbytes("loop"),
|
||
cst_low=caml_string_of_jsbytes("low"),
|
||
cst_max$0=caml_string_of_jsbytes("max"),
|
||
cst_max$1=caml_string_of_jsbytes("max"),
|
||
cst_min$0=caml_string_of_jsbytes("min"),
|
||
cst_min$1=caml_string_of_jsbytes("min"),
|
||
cst_novalidate=caml_string_of_jsbytes("novalidate"),
|
||
cst_open=caml_string_of_jsbytes("open"),
|
||
cst_optimum=caml_string_of_jsbytes("optimum"),
|
||
cst_pattern$0=caml_string_of_jsbytes("pattern"),
|
||
cst_placeholder=caml_string_of_jsbytes("placeholder"),
|
||
cst_poster=caml_string_of_jsbytes("poster"),
|
||
cst_pubdate=caml_string_of_jsbytes("pubdate"),
|
||
cst_radiogroup=caml_string_of_jsbytes("radiogroup"),
|
||
cst_required=caml_string_of_jsbytes("required"),
|
||
cst_reserved=caml_string_of_jsbytes("reserved"),
|
||
cst_scoped=caml_string_of_jsbytes("scoped"),
|
||
cst_seamless=caml_string_of_jsbytes("seamless"),
|
||
cst_span=caml_string_of_jsbytes("span"),
|
||
cst_xml_lang$1=caml_string_of_jsbytes("xml:lang"),
|
||
cst_srcset=caml_string_of_jsbytes("srcset"),
|
||
cst_sizes$0=caml_string_of_jsbytes("sizes"),
|
||
cst_start$0=caml_string_of_jsbytes("start"),
|
||
cst_size=caml_string_of_jsbytes("size"),
|
||
cst_multiple=caml_string_of_jsbytes("multiple"),
|
||
cst_cols=caml_string_of_jsbytes("cols"),
|
||
cst_rows=caml_string_of_jsbytes("rows"),
|
||
cst_summary=caml_string_of_jsbytes("summary"),
|
||
cst_axis=caml_string_of_jsbytes("axis"),
|
||
cst_colspan=caml_string_of_jsbytes("colspan"),
|
||
cst_headers=caml_string_of_jsbytes("headers"),
|
||
cst_rowspan=caml_string_of_jsbytes("rowspan"),
|
||
cst_border=caml_string_of_jsbytes("border"),
|
||
cst_data$1=caml_string_of_jsbytes("data"),
|
||
cst_codetype=caml_string_of_jsbytes("codetype"),
|
||
cst_marginheight=caml_string_of_jsbytes("marginheight"),
|
||
cst_marginwidth=caml_string_of_jsbytes("marginwidth"),
|
||
cst_target=caml_string_of_jsbytes("target"),
|
||
cst_content=caml_string_of_jsbytes("content"),
|
||
cst_http_equiv=caml_string_of_jsbytes("http-equiv"),
|
||
cst_media$0=caml_string_of_jsbytes("media"),
|
||
cst_role=caml_string_of_jsbytes("role"),
|
||
cst_body=caml_string_of_jsbytes("body"),
|
||
cst_head=caml_string_of_jsbytes("head"),
|
||
cst_title$1=caml_string_of_jsbytes("title"),
|
||
cst_footer=caml_string_of_jsbytes("footer"),
|
||
cst_header=caml_string_of_jsbytes("header"),
|
||
cst_section=caml_string_of_jsbytes("section"),
|
||
cst_nav=caml_string_of_jsbytes("nav"),
|
||
cst_h1=caml_string_of_jsbytes("h1"),
|
||
cst_h2=caml_string_of_jsbytes("h2"),
|
||
cst_h3=caml_string_of_jsbytes("h3"),
|
||
cst_h4=caml_string_of_jsbytes("h4"),
|
||
cst_h5=caml_string_of_jsbytes("h5"),
|
||
cst_h6=caml_string_of_jsbytes("h6"),
|
||
cst_hgroup=caml_string_of_jsbytes("hgroup"),
|
||
cst_address=caml_string_of_jsbytes("address"),
|
||
cst_blockquote=caml_string_of_jsbytes("blockquote"),
|
||
cst_div=caml_string_of_jsbytes("div"),
|
||
cst_p=caml_string_of_jsbytes("p"),
|
||
cst_pre=caml_string_of_jsbytes("pre"),
|
||
cst_abbr=caml_string_of_jsbytes("abbr"),
|
||
cst_br=caml_string_of_jsbytes("br"),
|
||
cst_cite$0=caml_string_of_jsbytes("cite"),
|
||
cst_code=caml_string_of_jsbytes("code"),
|
||
cst_dfn=caml_string_of_jsbytes("dfn"),
|
||
cst_em$0=caml_string_of_jsbytes("em"),
|
||
cst_kbd=caml_string_of_jsbytes("kbd"),
|
||
cst_q=caml_string_of_jsbytes("q"),
|
||
cst_samp=caml_string_of_jsbytes("samp"),
|
||
cst_span$0=caml_string_of_jsbytes("span"),
|
||
cst_strong=caml_string_of_jsbytes("strong"),
|
||
cst_time=caml_string_of_jsbytes("time"),
|
||
cst_var=caml_string_of_jsbytes("var"),
|
||
cst_a$1=caml_string_of_jsbytes("a"),
|
||
cst_dl=caml_string_of_jsbytes("dl"),
|
||
cst_ol=caml_string_of_jsbytes("ol"),
|
||
cst_ul=caml_string_of_jsbytes("ul"),
|
||
cst_dd=caml_string_of_jsbytes("dd"),
|
||
cst_dt=caml_string_of_jsbytes("dt"),
|
||
cst_li=caml_string_of_jsbytes("li"),
|
||
cst_hr=caml_string_of_jsbytes("hr"),
|
||
cst_b$0=caml_string_of_jsbytes("b"),
|
||
cst_i=caml_string_of_jsbytes("i"),
|
||
cst_u=caml_string_of_jsbytes("u"),
|
||
cst_small=caml_string_of_jsbytes("small"),
|
||
cst_sub=caml_string_of_jsbytes("sub"),
|
||
cst_sup=caml_string_of_jsbytes("sup"),
|
||
cst_mark=caml_string_of_jsbytes("mark"),
|
||
cst_rp=caml_string_of_jsbytes("rp"),
|
||
cst_rt=caml_string_of_jsbytes("rt"),
|
||
cst_ruby=caml_string_of_jsbytes("ruby"),
|
||
cst_wbr=caml_string_of_jsbytes("wbr"),
|
||
cst_datetime=caml_string_of_jsbytes("datetime"),
|
||
cst_usemap=caml_string_of_jsbytes("usemap"),
|
||
cst_defer=caml_string_of_jsbytes("defer"),
|
||
cst_label=caml_string_of_jsbytes("label"),
|
||
cst_map=caml_string_of_jsbytes("map"),
|
||
cst_del=caml_string_of_jsbytes("del"),
|
||
cst_ins=caml_string_of_jsbytes("ins"),
|
||
cst_script$0=caml_string_of_jsbytes("script"),
|
||
cst_noscript=caml_string_of_jsbytes("noscript"),
|
||
cst_template=caml_string_of_jsbytes("template"),
|
||
cst_article=caml_string_of_jsbytes("article"),
|
||
cst_aside=caml_string_of_jsbytes("aside"),
|
||
cst_main=caml_string_of_jsbytes("main"),
|
||
cst_audio=caml_string_of_jsbytes("audio"),
|
||
cst_video=caml_string_of_jsbytes("video"),
|
||
cst_canvas=caml_string_of_jsbytes("canvas"),
|
||
cst_embed=caml_string_of_jsbytes("embed"),
|
||
cst_source=caml_string_of_jsbytes("source"),
|
||
cst_meter=caml_string_of_jsbytes("meter"),
|
||
cst_output=caml_string_of_jsbytes("output"),
|
||
cst_form$0=caml_string_of_jsbytes("form"),
|
||
cst_input=caml_string_of_jsbytes("input"),
|
||
cst_keygen=caml_string_of_jsbytes("keygen"),
|
||
cst_label$0=caml_string_of_jsbytes("label"),
|
||
cst_option=caml_string_of_jsbytes("option"),
|
||
cst_select=caml_string_of_jsbytes("select"),
|
||
cst_textarea=caml_string_of_jsbytes("textarea"),
|
||
cst_button=caml_string_of_jsbytes("button"),
|
||
cst_progress=caml_string_of_jsbytes("progress"),
|
||
cst_legend=caml_string_of_jsbytes("legend"),
|
||
cst_summary$0=caml_string_of_jsbytes("summary"),
|
||
cst_figcaption=caml_string_of_jsbytes("figcaption"),
|
||
cst_caption=caml_string_of_jsbytes("caption"),
|
||
cst_td=caml_string_of_jsbytes("td"),
|
||
cst_th=caml_string_of_jsbytes("th"),
|
||
cst_tr=caml_string_of_jsbytes("tr"),
|
||
cst_colgroup=caml_string_of_jsbytes("colgroup"),
|
||
cst_col=caml_string_of_jsbytes("col"),
|
||
cst_thead=caml_string_of_jsbytes("thead"),
|
||
cst_tbody=caml_string_of_jsbytes("tbody"),
|
||
cst_tfoot=caml_string_of_jsbytes("tfoot"),
|
||
cst_iframe=caml_string_of_jsbytes("iframe"),
|
||
cst_param=caml_string_of_jsbytes("param"),
|
||
cst_meta=caml_string_of_jsbytes("meta"),
|
||
cst_base=caml_string_of_jsbytes("base"),
|
||
Stdlib=global_data.Stdlib,
|
||
Stdlib_list=global_data.Stdlib__list,
|
||
Stdlib_seq=global_data.Stdlib__seq,
|
||
Stdlib_printf=global_data.Stdlib__printf,
|
||
Stdlib_string=global_data.Stdlib__string,
|
||
Stdlib_format=global_data.Stdlib__format,
|
||
Stdlib_set=global_data.Stdlib__set,
|
||
Stdlib_uchar=global_data.Stdlib__uchar,
|
||
Stdlib_buffer=global_data.Stdlib__buffer,
|
||
Uutf=global_data.Uutf,
|
||
Re=global_data.Re,
|
||
_L_=[0,[2,0,[12,61,[2,0,0]]],caml_string_of_jsbytes("%s=%s")],
|
||
_H_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
|
||
_I_=[0,[12,34,[4,0,0,0,[12,34,0]]],caml_string_of_jsbytes('"%d"')],
|
||
_J_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
|
||
_K_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
|
||
_F_=
|
||
[0,
|
||
[2,0,[17,[0,caml_string_of_jsbytes("@,"),0,0],0]],
|
||
caml_string_of_jsbytes("%s@,")],
|
||
_G_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("<!-- "),
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(" -->"),
|
||
[17,[0,caml_string_of_jsbytes("@,"),0,0],0]]]],
|
||
caml_string_of_jsbytes("<!-- %s -->@,")],
|
||
_C_=
|
||
[0,
|
||
[12,
|
||
60,
|
||
[16,
|
||
[15,
|
||
[12,
|
||
62,
|
||
[16,
|
||
[15,[16,[16,[11,caml_string_of_jsbytes("<\/"),[2,0,partial]]]]]]]]]],
|
||
caml_string_of_jsbytes("<%t%a>%t%a%t%t<\/%s>")],
|
||
_D_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("<!--"),
|
||
[2,0,[11,caml_string_of_jsbytes("-->"),0]]],
|
||
caml_string_of_jsbytes("<!--%s-->")],
|
||
_E_=[0,[12,38,[2,0,[12,59,0]]],caml_string_of_jsbytes("&%s;")],
|
||
_A_=
|
||
[0,
|
||
[12,60,[15,[11,caml_string_of_jsbytes("/>"),0]]],
|
||
caml_string_of_jsbytes("<%a/>")],
|
||
_B_=
|
||
[0,
|
||
[12,
|
||
60,
|
||
[15,[12,62,[16,[11,caml_string_of_jsbytes("<\/"),[2,0,[12,62,0]]]]]]],
|
||
caml_string_of_jsbytes("<%a>%t<\/%s>")],
|
||
_z_=[0,[2,0,[15,[16,0]]],caml_string_of_jsbytes("%s%a%t")],
|
||
_y_=[0,[16,[2,0,[12,61,[15,0]]]],caml_string_of_jsbytes("%t%s=%a")],
|
||
_u_=[0,[12,34,[15,[12,34,0]]],caml_string_of_jsbytes('"%a"')],
|
||
_v_=[0,[12,34,[4,0,0,0,[12,34,0]]],caml_string_of_jsbytes('"%d"')],
|
||
_w_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
|
||
_x_=[0,[12,34,[15,[12,34,0]]],caml_string_of_jsbytes('"%a"')],
|
||
_t_=[0,[12,44,[16,0]],caml_string_of_jsbytes(",%t")],
|
||
_s_=
|
||
[0,
|
||
[18,[1,[0,0,caml_string_of_jsbytes("")]],[15,[17,0,0]]],
|
||
caml_string_of_jsbytes("@[%a@]")],
|
||
_r_=[0,[15,0],caml_string_of_jsbytes("%a")],
|
||
_n_=[0,[4,0,0,0,[12,101,[4,0,0,0,0]]],caml_string_of_jsbytes("%de%d")],
|
||
_o_=[0,[8,[0,0,3],0,[0,12],0],caml_string_of_jsbytes("%.12g")],
|
||
_p_=[0,[8,[0,0,3],0,[0,15],0],caml_string_of_jsbytes("%.15g")],
|
||
_q_=[0,[8,[0,0,3],0,[0,18],0],caml_string_of_jsbytes("%.18g")],
|
||
_m_=[0,1],
|
||
_c_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')],
|
||
_d_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes(" PUBLIC "),[15,0]],
|
||
caml_string_of_jsbytes(" PUBLIC %a")],
|
||
_e_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("<!DOCTYPE "),[2,0,[15,[12,62,0]]]],
|
||
caml_string_of_jsbytes("<!DOCTYPE %s%a>")],
|
||
_b_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes('<?xml version="'),
|
||
[2,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes('" encoding="'),
|
||
[2,0,[11,caml_string_of_jsbytes('"?>\\n'),0]]]]],
|
||
caml_string_of_jsbytes('<?xml version="%s" encoding="%s"?>\\n')],
|
||
_X_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("skewY("),[2,0,[12,41,0]]],
|
||
caml_string_of_jsbytes("skewY(%s)")],
|
||
_Y_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("skewX("),[2,0,[12,41,0]]],
|
||
caml_string_of_jsbytes("skewX(%s)")],
|
||
_Z_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("scale("),[2,0,[12,41,0]]],
|
||
caml_string_of_jsbytes("scale(%s)")],
|
||
___=
|
||
[0,
|
||
[8,[0,0,3],0,0,[12,32,[8,[0,0,3],0,0,0]]],
|
||
caml_string_of_jsbytes("%g %g")],
|
||
_$_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("rotate("),[2,0,[12,32,[2,0,[12,41,0]]]]],
|
||
caml_string_of_jsbytes("rotate(%s %s)")],
|
||
_aa_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("matrix("),
|
||
[8,
|
||
[0,0,3],
|
||
0,
|
||
0,
|
||
[12,
|
||
32,
|
||
[8,
|
||
[0,0,3],
|
||
0,
|
||
0,
|
||
[12,
|
||
32,
|
||
[8,
|
||
[0,0,3],
|
||
0,
|
||
0,
|
||
[12,32,[8,[0,0,3],0,0,[12,32,[8,partial$1,0,0,partial$0]]]]]]]]]],
|
||
caml_string_of_jsbytes("matrix(%g %g %g %g %g %g)")],
|
||
_ab_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("translate("),[2,0,[12,41,0]]],
|
||
caml_string_of_jsbytes("translate(%s)")],
|
||
_U_=
|
||
[0,
|
||
[8,[0,0,3],0,0,[11,caml_string_of_jsbytes(", "),[8,[0,0,3],0,0,0]]],
|
||
caml_string_of_jsbytes("%g, %g")],
|
||
_V_=[0,[8,[0,0,3],0,0,0],caml_string_of_jsbytes("%g")],
|
||
_T_=
|
||
[0,
|
||
[2,0,[12,32,[2,0,[12,32,[2,0,[12,32,[2,0,0]]]]]]],
|
||
caml_string_of_jsbytes("%s %s %s %s")],
|
||
_S_=
|
||
[0,
|
||
[8,[0,0,3],0,0,[11,caml_string_of_jsbytes(", "),[8,[0,0,3],0,0,0]]],
|
||
caml_string_of_jsbytes("%g, %g")],
|
||
_W_=[0,caml_string_of_jsbytes("; ")],
|
||
_R_=
|
||
[0,
|
||
caml_string_of_jsbytes("-//W3C//DTD SVG 1.1//EN"),
|
||
[0,
|
||
caml_string_of_jsbytes
|
||
("http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"),
|
||
0]],
|
||
_Q_=[0,[8,[0,0,3],0,0,[2,0,0]],caml_string_of_jsbytes("%g%s")],
|
||
_P_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes("url("),[2,0,[12,41,0]]],
|
||
caml_string_of_jsbytes("url(%s)")],
|
||
_ag_=[0,[2,0,[12,32,[2,0,[12,120,0]]]],caml_string_of_jsbytes("%s %sx")],
|
||
_af_=[0,[2,0,[12,32,[2,0,[12,119,0]]]],caml_string_of_jsbytes("%s %sw")],
|
||
_ae_=[0,[4,0,0,0,[12,120,[4,0,0,0,0]]],caml_string_of_jsbytes("%dx%d")];
|
||
function fmap(f){return f}
|
||
function nil(param){return 0}
|
||
function singleton(x){return [0,x,0]}
|
||
function cons(x,xs){return [0,x,xs]}
|
||
function append(x,y){return caml_call2(Stdlib[37],x,y)}
|
||
var
|
||
map=Stdlib_list[17],
|
||
Xml_wrap=
|
||
[0,[0,function(_nk_){return _nk_},fmap,nil,singleton,cons,append,map]];
|
||
caml_register_global(1084,Xml_wrap,"Xml_wrap");
|
||
var
|
||
Malformed_stream=
|
||
[248,cst_Xml_stream_Malformed_strea,runtime.caml_fresh_oo_id(0)];
|
||
function _a_(Xml)
|
||
{function of_list(l)
|
||
{var _nh_=caml_call1(Xml[1][3],0);
|
||
function _ni_(a,b)
|
||
{var _nj_=caml_call1(Xml[1][1],a);
|
||
return caml_call2(Xml[1][5],_nj_,b)}
|
||
return caml_call3(Stdlib_list[23],_ni_,l,_nh_)}
|
||
function mk(children,seq)
|
||
{var children$0=children,seq$0=seq;
|
||
for(;;)
|
||
{var match=caml_call1(seq$0,0);
|
||
if(match)
|
||
{var _m$_=match[1];
|
||
if(typeof _m$_ === "number")
|
||
{var rest=match[2];
|
||
return [0,of_list(caml_call1(Stdlib_list[9],children$0)),rest]}
|
||
var _na_=_m$_[1];
|
||
if(856096383 === _na_)
|
||
{var
|
||
q=match[2],
|
||
_nb_=_m$_[2],
|
||
attrs=_nb_[2],
|
||
match$0=_nb_[1],
|
||
name=match$0[2],
|
||
f=
|
||
function(param)
|
||
{var
|
||
v=param[2],
|
||
match=param[1],
|
||
name=match[2],
|
||
_ng_=caml_call1(Xml[1][1],v);
|
||
return caml_call2(Xml[6],name,_ng_)},
|
||
a=caml_call2(Stdlib_list[17],f,attrs),
|
||
match$1=mk(0,q),
|
||
rest$0=match$1[2],
|
||
sub_children=match$1[1],
|
||
children$1=
|
||
[0,caml_call3(Xml[21],[0,a],name,sub_children),children$0],
|
||
children$0=children$1,
|
||
seq$0=rest$0;
|
||
continue}
|
||
if(936573133 <= _na_)
|
||
{var
|
||
q$0=match[2],
|
||
s=_m$_[2],
|
||
_nc_=
|
||
function(x)
|
||
{var _nf_=caml_call1(Xml[1][1],x);
|
||
return caml_call1(Xml[17],_nf_)},
|
||
_nd_=caml_call2(Stdlib_list[17],_nc_,s),
|
||
children$2=caml_call2(Stdlib[37],_nd_,children$0),
|
||
children$0=children$2,
|
||
seq$0=q$0;
|
||
continue}
|
||
var
|
||
q$1=match[2],
|
||
s$0=_m$_[2],
|
||
children$3=[0,caml_call1(Xml[16],s$0),children$0],
|
||
children$0=children$3,
|
||
seq$0=q$1;
|
||
continue}
|
||
var _ne_=Stdlib_seq[1];
|
||
return [0,of_list(caml_call1(Stdlib_list[9],children$0)),_ne_]}}
|
||
function of_seq(seq)
|
||
{var
|
||
match=mk(0,seq),
|
||
rest=match[2],
|
||
l=match[1],
|
||
match$0=caml_call1(rest,0);
|
||
if(match$0)throw Malformed_stream;
|
||
return l}
|
||
return [0,of_seq]}
|
||
var Xml_stream=[0,Malformed_stream,_a_];
|
||
caml_register_global(1086,Xml_stream,"Xml_stream");
|
||
function add_unsafe_char(b,c)
|
||
{if(34 === c)return caml_call2(Stdlib_buffer[14],b,cst_quot);
|
||
if(60 <= c)
|
||
{if(! (63 <= c))
|
||
{var switcher=c - 60 | 0;
|
||
switch(switcher)
|
||
{case 0:return caml_call2(Stdlib_buffer[14],b,cst_lt);
|
||
case 1:break;
|
||
default:return caml_call2(Stdlib_buffer[14],b,cst_gt)}}}
|
||
else
|
||
if(38 === c)return caml_call2(Stdlib_buffer[14],b,cst_amp);
|
||
var _m4_=c <= 8?1:0;
|
||
if(_m4_)
|
||
var _m5_=_m4_;
|
||
else
|
||
{var _m6_=11 === c?1:0;
|
||
if(_m6_)
|
||
var _m5_=_m6_;
|
||
else
|
||
{var _m7_=12 === c?1:0;
|
||
if(_m7_)
|
||
var _m5_=_m7_;
|
||
else
|
||
var
|
||
_m8_=14 <= c?1:0,
|
||
_m9_=_m8_?c <= 31?1:0:_m8_,
|
||
_m5_=_m9_ || (127 === c?1:0)}}
|
||
if(_m5_)
|
||
{caml_call2(Stdlib_buffer[14],b,cst);
|
||
var _m__=caml_call1(Stdlib[33],c);
|
||
caml_call2(Stdlib_buffer[14],b,_m__);
|
||
return caml_call2(Stdlib_buffer[14],b,cst$0)}
|
||
return caml_call2(Stdlib_buffer[10],b,c)}
|
||
function encode_unsafe_char(s)
|
||
{var b=caml_call1(Stdlib_buffer[1],caml_ml_string_length(s));
|
||
function _m2_(_m3_){return add_unsafe_char(b,_m3_)}
|
||
caml_call2(Stdlib_string[8],_m2_,s);
|
||
return caml_call1(Stdlib_buffer[2],b)}
|
||
function encode_unsafe_char_and_at(s)
|
||
{var b=caml_call1(Stdlib_buffer[1],caml_ml_string_length(s));
|
||
function f(c)
|
||
{return 64 === c
|
||
?caml_call2(Stdlib_buffer[14],b,cst_64)
|
||
:add_unsafe_char(b,c)}
|
||
caml_call2(Stdlib_string[8],f,s);
|
||
return caml_call1(Stdlib_buffer[2],b)}
|
||
function compose_decl(opt,_m1_,param)
|
||
{if(opt)var sth=opt[1],version=sth;else var version=cst_1_0;
|
||
if(_m1_)var sth$0=_m1_[1],encoding=sth$0;else var encoding=cst_UTF_8;
|
||
return caml_call3(Stdlib_format[126],_b_,version,encoding)}
|
||
function compose_doctype(dt,args)
|
||
{function pp_args(fmt,l)
|
||
{if(l)
|
||
{var
|
||
_mZ_=function(fmt){return caml_call2(Stdlib_format[123],fmt,_c_)},
|
||
_m0_=caml_call2(Stdlib_format[119],[0,Stdlib_format[25]],_mZ_);
|
||
return caml_call4(Stdlib_format[123],fmt,_d_,_m0_,l)}
|
||
return 0}
|
||
return caml_call4(Stdlib_format[127],_e_,dt,pp_args,args)}
|
||
var
|
||
_f_=[0,caml_call1(Re[23],cst$1),0],
|
||
_g_=[0,caml_call1(Re[23],cst$2),_f_],
|
||
_h_=[0,caml_call1(Re[23],cst$3),0],
|
||
_i_=[0,caml_call1(Re[26],[0,Re[37],_h_]),_g_],
|
||
_j_=[0,caml_call1(Re[23],cst$4),0],
|
||
_k_=[0,caml_call1(Re[26],[0,Re[37],_j_]),_i_],
|
||
_l_=caml_call1(Re[25],_k_),
|
||
re_end_comment=caml_call1(Re[2],_l_);
|
||
function pp_number(fmt,v)
|
||
{if(v == Stdlib[22])
|
||
return caml_call2(Stdlib_format[13],fmt,cst_Infinity);
|
||
if(v == Stdlib[23])
|
||
return caml_call2(Stdlib_format[13],fmt,cst_Infinity$0);
|
||
if(v != v)return caml_call2(Stdlib_format[13],fmt,cst_NaN);
|
||
var n=v | 0;
|
||
if(n == v)
|
||
{var n$0=n,i=0;
|
||
for(;;)
|
||
{if(0 !== n$0 && 0 === (n$0 % 10 | 0))
|
||
{var i$0=i + 1 | 0,n$1=n$0 / 10 | 0,n$0=n$1,i=i$0;continue}
|
||
return 2 < i
|
||
?caml_call4(Stdlib_format[123],fmt,_n_,n$0,i)
|
||
:caml_call2(Stdlib_format[17],fmt,n)}}
|
||
var s1=caml_call2(Stdlib_printf[4],_o_,v);
|
||
if(v == caml_float_of_string(s1))
|
||
return caml_call2(Stdlib_format[13],fmt,s1);
|
||
var s2=caml_call2(Stdlib_printf[4],_p_,v);
|
||
return v == caml_float_of_string(s2)
|
||
?caml_call2(Stdlib_format[13],fmt,s2)
|
||
:caml_call3(Stdlib_format[123],fmt,_q_,v)}
|
||
function string_of_number(v)
|
||
{return caml_call3(Stdlib_format[127],_r_,pp_number,v)}
|
||
function normalize(src)
|
||
{var
|
||
warn=[0,0],
|
||
buffer=caml_call1(Stdlib_buffer[1],caml_ml_string_length(src)),
|
||
_mV_=0;
|
||
function _mW_(param,_mY_,d)
|
||
{if(852405675 <= d[1])
|
||
{var code=d[2];return caml_call2(Uutf[23][1],buffer,code)}
|
||
caml_call2(Uutf[23][1],buffer,Uutf[2]);
|
||
warn[1] = 1;
|
||
return 0}
|
||
caml_call5(Uutf[22][2],0,0,_mW_,_mV_,src);
|
||
var _mX_=warn[1];
|
||
return [0,caml_call1(Stdlib_buffer[2],buffer),_mX_]}
|
||
function normalize_html(src)
|
||
{var l=caml_ml_string_length(src),i=0;
|
||
for(;;)
|
||
{var _mP_=i < l?1:0;
|
||
if(_mP_)
|
||
{var match=runtime.caml_string_get(src,i),switch$0=0;
|
||
if(35 <= match)
|
||
{if(61 <= match)
|
||
{if(62 === match)switch$0 = 1;else if(127 <= match)switch$0 = 2}
|
||
else
|
||
if(38 === match || 60 <= match)switch$0 = 1}
|
||
else
|
||
if(11 <= match)
|
||
{if(32 <= match)
|
||
{if(34 <= match)switch$0 = 1}
|
||
else
|
||
if(13 !== match)switch$0 = 2}
|
||
else
|
||
if(! (9 <= match))switch$0 = 2;
|
||
switch(switch$0)
|
||
{case 2:var _mQ_=1;break;
|
||
case 1:var _mQ_=1;break;
|
||
default:var i$0=i + 1 | 0,i=i$0;continue}}
|
||
else
|
||
var _mQ_=_mP_;
|
||
if(_mQ_)
|
||
{var
|
||
warn=[0,0],
|
||
buffer=caml_call1(Stdlib_buffer[1],caml_ml_string_length(src)),
|
||
_mR_=0,
|
||
_mS_=
|
||
function(param,_mU_,d)
|
||
{if(852405675 <= d[1])
|
||
{var u=d[2],code=caml_call1(Stdlib_uchar[10],u);
|
||
if(34 === code)
|
||
return caml_call2(Stdlib_buffer[14],buffer,cst_quot$0);
|
||
if(60 <= code)
|
||
{if(! (63 <= code))
|
||
{var switcher=code - 60 | 0;
|
||
switch(switcher)
|
||
{case 0:
|
||
return caml_call2(Stdlib_buffer[14],buffer,cst_lt$0);
|
||
case 1:break;
|
||
default:return caml_call2(Stdlib_buffer[14],buffer,cst_gt$4)}}}
|
||
else
|
||
if(38 === code)
|
||
return caml_call2(Stdlib_buffer[14],buffer,cst_amp$0);
|
||
var switch$0=0;
|
||
if(! (31 < code) && 9 !== code && 10 !== code && 13 !== code)
|
||
switch$0 = 1;
|
||
var switch$1=0;
|
||
if(! switch$0)
|
||
{var switch$2=0;
|
||
if(127 <= code && ! (159 < code))switch$2 = 1;
|
||
if
|
||
(!
|
||
switch$2
|
||
&&
|
||
65534
|
||
!==
|
||
(code & 65535)
|
||
&&
|
||
65535
|
||
!==
|
||
(code & 65535))
|
||
{var u$0=u;switch$1 = 1}}
|
||
if(! switch$1){warn[1] = 1;var u$0=Uutf[2]}
|
||
return caml_call2(Uutf[23][1],buffer,u$0)}
|
||
caml_call2(Uutf[23][1],buffer,Uutf[2]);
|
||
warn[1] = 1;
|
||
return 0};
|
||
caml_call5(Uutf[22][2],0,0,_mS_,_mR_,src);
|
||
var _mT_=warn[1];
|
||
return [0,caml_call1(Stdlib_buffer[2],buffer),_mT_]}
|
||
return [0,src,0]}}
|
||
function pp_noop(fmt,param){return 0}
|
||
function Make_fmt(Xml,_lY_)
|
||
{function open_box(indent,fmt)
|
||
{return indent?caml_call2(Stdlib_format[1],fmt,0):0}
|
||
function close_box(indent,fmt)
|
||
{return indent?caml_call2(Stdlib_format[3],fmt,0):0}
|
||
function sp(indent,fmt)
|
||
{return indent
|
||
?caml_call2(Stdlib_format[25],fmt,0)
|
||
:caml_call2(Stdlib_format[13],fmt,cst$9)}
|
||
function cut(indent,fmt)
|
||
{return indent?caml_call2(Stdlib_format[27],fmt,0):0}
|
||
var S=caml_call1(Stdlib_set[1],[0,Stdlib_string[33]]),_lZ_=_lY_[1];
|
||
if(_lZ_)
|
||
var
|
||
_l0_=S[1],
|
||
_l1_=function(s,x){return caml_call2(S[4],x,s)},
|
||
set=caml_call3(Stdlib_list[22],_l1_,_l0_,_lZ_),
|
||
is_emptytag=function(x){return caml_call2(S[3],x,set)};
|
||
else
|
||
var is_emptytag=function(param){return 0};
|
||
function pp_encode(encode,indent,fmt,s)
|
||
{var s$0=caml_call1(encode,s);
|
||
return indent
|
||
?caml_call4(Stdlib_format[123],fmt,_s_,Stdlib_format[120],s$0)
|
||
:caml_call2(Stdlib_format[13],fmt,s$0)}
|
||
function pp_sep(indent,param)
|
||
{return param
|
||
?function(fmt,param)
|
||
{function _mN_(_mO_){return sp(indent,_mO_)}
|
||
return caml_call3(Stdlib_format[123],fmt,_t_,_mN_)}
|
||
:function(fmt,param){return sp(indent,fmt)}}
|
||
function pp_attrib_value(encode,indent,fmt,a)
|
||
{var match=caml_call1(Xml[26],a);
|
||
switch(match[0])
|
||
{case 0:
|
||
var f=match[1];
|
||
return caml_call4(Stdlib_format[123],fmt,_u_,pp_number,f);
|
||
case 1:
|
||
var i=match[1];return caml_call3(Stdlib_format[123],fmt,_v_,i);
|
||
case 2:
|
||
var s=match[1],_mH_=caml_call1(encode,s);
|
||
return caml_call3(Stdlib_format[123],fmt,_w_,_mH_);
|
||
default:
|
||
var
|
||
slist=match[2],
|
||
sep=match[1],
|
||
_mI_=
|
||
function(_mL_,_mM_){return pp_encode(encode,indent,_mL_,_mM_)},
|
||
_mJ_=[0,pp_sep(indent,sep)],
|
||
_mK_=caml_call2(Stdlib_format[119],_mJ_,_mI_);
|
||
return caml_call4(Stdlib_format[123],fmt,_x_,_mK_,slist)}}
|
||
function pp_attrib(encode,indent,fmt,a)
|
||
{function _mB_(_mF_,_mG_)
|
||
{return pp_attrib_value(encode,indent,_mF_,_mG_)}
|
||
var _mC_=caml_call1(Xml[25],a);
|
||
function _mD_(_mE_){return sp(indent,_mE_)}
|
||
return caml_call6(Stdlib_format[123],fmt,_y_,_mD_,_mC_,_mB_,a)}
|
||
function pp_attribs(encode,indent)
|
||
{function _my_(_mz_,_mA_){return pp_attrib(encode,indent,_mz_,_mA_)}
|
||
return caml_call2(Stdlib_format[119],[0,pp_noop],_my_)}
|
||
function pp_tag_and_attribs(encode,indent,fmt,param)
|
||
{var attrs=param[2],tag=param[1];
|
||
open_box(indent,fmt);
|
||
function _mv_(_mx_){return cut(indent,_mx_)}
|
||
var _mw_=pp_attribs(encode,indent);
|
||
caml_call6(Stdlib_format[123],fmt,_z_,tag,_mw_,attrs,_mv_);
|
||
return close_box(indent,fmt)}
|
||
function pp_closedtag(encode,indent,fmt,tag,attrs)
|
||
{if(is_emptytag(tag))
|
||
{var
|
||
_ml_=[0,tag,attrs],
|
||
_mm_=
|
||
function(_mt_,_mu_)
|
||
{return pp_tag_and_attribs(encode,indent,_mt_,_mu_)};
|
||
return caml_call4(Stdlib_format[123],fmt,_A_,_mm_,_ml_)}
|
||
open_box(indent,fmt);
|
||
function _mn_(_ms_){return cut(indent,_ms_)}
|
||
var _mo_=[0,tag,attrs];
|
||
function _mp_(_mq_,_mr_)
|
||
{return pp_tag_and_attribs(encode,indent,_mq_,_mr_)}
|
||
caml_call6(Stdlib_format[123],fmt,_B_,_mp_,_mo_,_mn_,tag);
|
||
return close_box(indent,fmt)}
|
||
function pp_tag(encode,indent,fmt,tag,attrs,children)
|
||
{if(children)
|
||
{open_box(indent,fmt);
|
||
var
|
||
_l__=function(_mk_){return cut(indent,_mk_)},
|
||
_l$_=function(_mj_){return close_box(indent,_mj_)},
|
||
_ma_=pp_elts(encode,indent),
|
||
_mb_=function(_mi_){return cut(indent,_mi_)},
|
||
_mc_=[0,tag,attrs],
|
||
_md_=
|
||
function(_mg_,_mh_)
|
||
{return pp_tag_and_attribs(encode,indent,_mg_,_mh_)},
|
||
_me_=function(_mf_){return open_box(indent,_mf_)};
|
||
caml_call11
|
||
(Stdlib_format[123],
|
||
fmt,
|
||
_C_,
|
||
_me_,
|
||
_md_,
|
||
_mc_,
|
||
_mb_,
|
||
_ma_,
|
||
children,
|
||
_l$_,
|
||
_l__,
|
||
tag);
|
||
return close_box(indent,fmt)}
|
||
return pp_closedtag(encode,indent,fmt,tag,attrs)}
|
||
function pp_elt(encode,indent,fmt,elt)
|
||
{var match=caml_call1(Xml[27],elt);
|
||
if(typeof match === "number")
|
||
return 0;
|
||
else
|
||
switch(match[0])
|
||
{case 0:
|
||
var
|
||
texte=match[1],
|
||
f=
|
||
function(g)
|
||
{var s=caml_call2(Re[1][1],g,0);
|
||
return caml_string_notequal(s,cst$5)
|
||
?caml_string_notequal(s,cst$6)
|
||
?caml_string_notequal(s,cst$7)
|
||
?caml_string_notequal(s,cst$8)?s:cst_gt$0
|
||
:cst_gt$1
|
||
:cst_gt$2
|
||
:cst_gt$3},
|
||
_l9_=caml_call6(Re[21],0,0,_m_,re_end_comment,f,texte);
|
||
return caml_call3(Stdlib_format[123],fmt,_D_,_l9_);
|
||
case 1:
|
||
var texte$0=match[1];
|
||
return caml_call2(Stdlib_format[13],fmt,texte$0);
|
||
case 2:
|
||
var texte$1=match[1];return pp_encode(encode,indent,fmt,texte$1);
|
||
case 3:
|
||
var e=match[1];return caml_call3(Stdlib_format[123],fmt,_E_,e);
|
||
case 4:
|
||
var xh_attrs=match[2],name=match[1];
|
||
return pp_closedtag(encode,indent,fmt,name,xh_attrs);
|
||
default:
|
||
var xh_taglist=match[3],xh_attrs$0=match[2],name$0=match[1];
|
||
return pp_tag(encode,indent,fmt,name$0,xh_attrs$0,xh_taglist)}}
|
||
function pp_elts(encode,indent)
|
||
{function _l5_(_l7_,_l8_){return pp_elt(encode,indent,_l7_,_l8_)}
|
||
var _l6_=[0,function(fmt,param){return cut(indent,fmt)}];
|
||
return caml_call2(Stdlib_format[119],_l6_,_l5_)}
|
||
function pp(opt,_l2_,param)
|
||
{if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char;
|
||
if(_l2_)var sth$0=_l2_[1],indent=sth$0;else var indent=0;
|
||
return function(_l3_,_l4_){return pp_elt(encode,indent,_l3_,_l4_)}}
|
||
return [0,
|
||
open_box,
|
||
close_box,
|
||
sp,
|
||
cut,
|
||
S,
|
||
is_emptytag,
|
||
pp_encode,
|
||
pp_sep,
|
||
pp_attrib_value,
|
||
pp_attrib,
|
||
pp_attribs,
|
||
pp_tag_and_attribs,
|
||
pp_closedtag,
|
||
pp_tag,
|
||
pp_elt,
|
||
pp_elts,
|
||
pp]}
|
||
function Make(Xml,I,O)
|
||
{var symbol=O[2];
|
||
function separator_to_string(param){return param?cst$10:cst$11}
|
||
function attrib_value_to_string(encode,a)
|
||
{var match=caml_call1(Xml[26],a);
|
||
switch(match[0])
|
||
{case 0:
|
||
var f=match[1],_lU_=string_of_number(f);
|
||
return caml_call2(Stdlib_printf[4],_H_,_lU_);
|
||
case 1:var i=match[1];return caml_call2(Stdlib_printf[4],_I_,i);
|
||
case 2:
|
||
var s=match[1],_lV_=caml_call1(encode,s);
|
||
return caml_call2(Stdlib_printf[4],_J_,_lV_);
|
||
default:
|
||
var
|
||
slist=match[2],
|
||
sep=match[1],
|
||
_lW_=separator_to_string(sep),
|
||
_lX_=caml_call1(encode,caml_call2(Stdlib_string[7],_lW_,slist));
|
||
return caml_call2(Stdlib_printf[4],_K_,_lX_)}}
|
||
function attrib_to_string(encode,a)
|
||
{var _lS_=attrib_value_to_string(encode,a),_lT_=caml_call1(Xml[25],a);
|
||
return caml_call3(Stdlib_printf[4],_L_,_lT_,_lS_)}
|
||
function xh_print_attrs(encode,attrs)
|
||
{if(attrs)
|
||
{var
|
||
queue=attrs[2],
|
||
attr=attrs[1],
|
||
_lP_=xh_print_attrs(encode,queue),
|
||
_lQ_=attrib_to_string(encode,attr),
|
||
_lR_=caml_call2(Stdlib[28],cst$12,_lQ_);
|
||
return caml_call2(symbol,caml_call1(O[3],_lR_),_lP_)}
|
||
return O[1]}
|
||
function xh_print_closedtag(encode,tag,attrs)
|
||
{if(0 !== I[1] && ! caml_call2(Stdlib_list[33],tag,I[1]))
|
||
{var
|
||
_lK_=caml_call2(Stdlib[28],tag,cst$15),
|
||
_lL_=caml_call2(Stdlib[28],cst$16,_lK_),
|
||
_lM_=caml_call1(O[3],_lL_),
|
||
_lN_=xh_print_attrs(encode,attrs),
|
||
_lO_=caml_call2(Stdlib[28],cst$17,tag);
|
||
return caml_call2
|
||
(symbol,caml_call2(symbol,caml_call1(O[3],_lO_),_lN_),_lM_)}
|
||
var
|
||
_lH_=caml_call1(O[3],cst$13),
|
||
_lI_=xh_print_attrs(encode,attrs),
|
||
_lJ_=caml_call2(Stdlib[28],cst$14,tag);
|
||
return caml_call2
|
||
(symbol,caml_call2(symbol,caml_call1(O[3],_lJ_),_lI_),_lH_)}
|
||
function xh_print_tag(encode,tag,attrs,taglist)
|
||
{if(0 === taglist)return xh_print_closedtag(encode,tag,attrs);
|
||
var
|
||
_lA_=caml_call2(Stdlib[28],tag,cst$18),
|
||
_lB_=caml_call2(Stdlib[28],cst$19,_lA_),
|
||
_lC_=caml_call1(O[3],_lB_),
|
||
_lD_=xh_print_taglist(encode,taglist),
|
||
_lE_=caml_call1(O[3],cst$20),
|
||
_lF_=xh_print_attrs(encode,attrs),
|
||
_lG_=caml_call2(Stdlib[28],cst$21,tag);
|
||
return caml_call2
|
||
(symbol,
|
||
caml_call2
|
||
(symbol,
|
||
caml_call2
|
||
(symbol,caml_call2(symbol,caml_call1(O[3],_lG_),_lF_),_lE_),
|
||
_lD_),
|
||
_lC_)}
|
||
function print_nodes(encode,name,xh_attrs,xh_taglist,queue)
|
||
{var _lz_=xh_print_taglist(encode,queue);
|
||
return caml_call2
|
||
(symbol,xh_print_tag(encode,name,xh_attrs,xh_taglist),_lz_)}
|
||
function xh_print_taglist(encode,taglist)
|
||
{var taglist$0=taglist;
|
||
for(;;)
|
||
{if(taglist$0)
|
||
{var
|
||
queue=taglist$0[2],
|
||
elt=taglist$0[1],
|
||
match=caml_call1(Xml[27],elt);
|
||
if(typeof match === "number")
|
||
{var taglist$0=queue;continue}
|
||
else
|
||
switch(match[0])
|
||
{case 0:
|
||
var
|
||
texte=match[1],
|
||
_lp_=xh_print_taglist(encode,queue),
|
||
_lq_=caml_call1(encode,texte),
|
||
_lr_=caml_call2(Stdlib[28],_lq_,cst$22),
|
||
_ls_=caml_call2(Stdlib[28],cst$23,_lr_);
|
||
return caml_call2(symbol,caml_call1(O[3],_ls_),_lp_);
|
||
case 1:
|
||
var texte$0=match[1],_lt_=xh_print_taglist(encode,queue);
|
||
return caml_call2(symbol,caml_call1(O[3],texte$0),_lt_);
|
||
case 2:
|
||
var
|
||
texte$1=match[1],
|
||
_lu_=xh_print_taglist(encode,queue),
|
||
_lv_=caml_call1(encode,texte$1);
|
||
return caml_call2(symbol,caml_call1(O[3],_lv_),_lu_);
|
||
case 3:
|
||
var
|
||
e=match[1],
|
||
_lw_=xh_print_taglist(encode,queue),
|
||
_lx_=caml_call2(Stdlib[28],e,cst$24),
|
||
_ly_=caml_call2(Stdlib[28],cst$25,_lx_);
|
||
return caml_call2(symbol,caml_call1(O[3],_ly_),_lw_);
|
||
case 4:
|
||
var xh_attrs=match[2],name=match[1];
|
||
return print_nodes(encode,name,xh_attrs,0,queue);
|
||
default:
|
||
var xh_taglist=match[3],xh_attrs$0=match[2],name$0=match[1];
|
||
return print_nodes(encode,name$0,xh_attrs$0,xh_taglist,queue)}}
|
||
return O[1]}}
|
||
function print_list(opt,foret)
|
||
{if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char;
|
||
var _lo_=xh_print_taglist(encode,foret);
|
||
return caml_call1(O[4],_lo_)}
|
||
return [0,
|
||
symbol,
|
||
separator_to_string,
|
||
attrib_value_to_string,
|
||
attrib_to_string,
|
||
xh_print_attrs,
|
||
xh_print_closedtag,
|
||
xh_print_tag,
|
||
print_nodes,
|
||
xh_print_taglist,
|
||
print_list]}
|
||
function Make_typed(Xml,Typed_xml,O)
|
||
{var P=Make(Xml,[0,Typed_xml[1][7]],O),symbol=O[2];
|
||
function print_list(opt,foret)
|
||
{if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char;
|
||
var
|
||
_lm_=caml_call2(Stdlib_list[17],Typed_xml[2],foret),
|
||
_ln_=caml_call2(P[9],encode,_lm_);
|
||
return caml_call1(O[4],_ln_)}
|
||
function print(opt,_lf_,doc)
|
||
{if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char;
|
||
if(_lf_)var sth$0=_lf_[1],advert=sth$0;else var advert=cst$30;
|
||
var
|
||
doc$0=caml_call1(Typed_xml[3],doc),
|
||
match=caml_call1(Xml[27],doc$0),
|
||
switch$0=0;
|
||
if(typeof match !== "number" && 5 === match[0])
|
||
{var
|
||
c=match[3],
|
||
a=match[2],
|
||
n=match[1],
|
||
_ll_=
|
||
function(a)
|
||
{return caml_string_equal(caml_call1(Xml[25],a),cst_xmlns$1)},
|
||
a$0=
|
||
caml_call2(Stdlib_list[30],_ll_,a)
|
||
?a
|
||
:[0,caml_call2(Xml[6],cst_xmlns$2,Typed_xml[1][5]),a],
|
||
doc$1=caml_call3(Xml[21],[0,a$0],n,c);
|
||
switch$0 = 1}
|
||
if(! switch$0)var doc$1=doc$0;
|
||
var _lg_=caml_call2(P[9],encode,[0,doc$1,0]);
|
||
if(caml_string_notequal(advert,cst$26))
|
||
var
|
||
_lh_=caml_call2(Stdlib[28],advert,cst$27),
|
||
_li_=caml_call2(Stdlib[28],cst$28,_lh_);
|
||
else
|
||
var _li_=cst$29;
|
||
var
|
||
_lj_=caml_call1(O[3],_li_),
|
||
_lk_=
|
||
caml_call2
|
||
(symbol,
|
||
caml_call2(symbol,caml_call1(O[3],Typed_xml[1][6]),_lj_),
|
||
_lg_);
|
||
return caml_call1(O[4],_lk_)}
|
||
return [0,P,symbol,print_list,print]}
|
||
function Simple_output(M)
|
||
{function empty(param){return 0}
|
||
function concat(f1,f2,param){caml_call1(f1,0);return caml_call1(f2,0)}
|
||
function put(s,param){return caml_call1(M[1],s)}
|
||
function make(f){return caml_call1(f,0)}
|
||
return [0,empty,concat,put,make]}
|
||
function Make_simple(Xml,I)
|
||
{function print_list(output)
|
||
{return Make(Xml,I,Simple_output([0,output]))[10]}
|
||
return [0,print_list]}
|
||
function Make_typed_simple(Xml,Typed_xml)
|
||
{function print_list(output)
|
||
{return Make_typed(Xml,Typed_xml,Simple_output([0,output]))[3]}
|
||
function print(output)
|
||
{return Make_typed(Xml,Typed_xml,Simple_output([0,output]))[4]}
|
||
return [0,print_list,print]}
|
||
function _M_(_ld_,_lc_,_lb_)
|
||
{var _le_=Make_typed(_ld_,_lc_,_lb_);return [0,_le_[3],_le_[4]]}
|
||
function _N_(_la_,_k$_,_k__){return [0,Make(_la_,_k$_,_k__)[10]]}
|
||
function _O_(_k9_,_k8_){return [0,Make_fmt(_k9_,_k8_)[17]]}
|
||
var
|
||
Xml_print=
|
||
[0,
|
||
encode_unsafe_char,
|
||
encode_unsafe_char_and_at,
|
||
[0,normalize,normalize_html],
|
||
compose_decl,
|
||
compose_doctype,
|
||
string_of_number,
|
||
pp_number,
|
||
function(Xml,Typed_xml)
|
||
{var P=Make_fmt(Xml,[0,Typed_xml[1][7]]);
|
||
function pp_elt(opt,_k6_,param,fmt,foret)
|
||
{if(opt)
|
||
var sth=opt[1],encode=sth;
|
||
else
|
||
var encode=encode_unsafe_char;
|
||
if(_k6_)var sth$0=_k6_[1],indent=sth$0;else var indent=0;
|
||
var _k7_=caml_call1(Typed_xml[2],foret);
|
||
return caml_call4(P[15],encode,indent,fmt,_k7_)}
|
||
function pp(opt,_k4_,advert,param,fmt,doc$0)
|
||
{if(opt)
|
||
var sth=opt[1],encode=sth;
|
||
else
|
||
var encode=encode_unsafe_char;
|
||
if(_k4_)var sth$0=_k4_[1],indent=sth$0;else var indent=0;
|
||
caml_call2(Stdlib_format[7],fmt,0);
|
||
caml_call3(Stdlib_format[123],fmt,_F_,Typed_xml[1][6]);
|
||
if(advert)
|
||
{var s=advert[1];caml_call3(Stdlib_format[123],fmt,_G_,s)}
|
||
var
|
||
doc=caml_call1(Typed_xml[3],doc$0),
|
||
match=caml_call1(Xml[27],doc),
|
||
switch$0=0;
|
||
if(typeof match !== "number" && 5 === match[0])
|
||
{var
|
||
c=match[3],
|
||
a=match[2],
|
||
n=match[1],
|
||
_k3_=
|
||
function(a)
|
||
{return caml_string_equal(caml_call1(Xml[25],a),cst_xmlns)},
|
||
a$0=
|
||
caml_call2(Stdlib_list[30],_k3_,a)
|
||
?a
|
||
:[0,caml_call2(Xml[6],cst_xmlns$0,Typed_xml[1][5]),a],
|
||
_k5_=caml_call3(Xml[21],[0,a$0],n,c);
|
||
switch$0 = 1}
|
||
if(! switch$0)var _k5_=doc;
|
||
caml_call4(P[15],encode,indent,fmt,_k5_);
|
||
return caml_call2(Stdlib_format[3],fmt,0)}
|
||
return [0,pp_elt,pp]},
|
||
_O_,
|
||
_N_,
|
||
_M_,
|
||
Make_simple,
|
||
Make_typed_simple];
|
||
caml_register_global(1095,Xml_print,"Xml_print");
|
||
var
|
||
Xml_iter=
|
||
[0,
|
||
function(Xml)
|
||
{function amap1(f,n)
|
||
{var match=caml_call1(Xml[27],n);
|
||
if(typeof match !== "number")
|
||
switch(match[0])
|
||
{case 4:
|
||
var
|
||
attribs=match[2],
|
||
name=match[1],
|
||
_k1_=[0,caml_call2(f,name,attribs)];
|
||
return caml_call2(Xml[20],_k1_,name);
|
||
case 5:
|
||
var
|
||
elts=match[3],
|
||
attribs$0=match[2],
|
||
name$0=match[1],
|
||
_k2_=[0,caml_call2(f,name$0,attribs$0)];
|
||
return caml_call3(Xml[21],_k2_,name$0,elts)
|
||
}
|
||
return n}
|
||
function amap(f,n)
|
||
{var match=caml_call1(Xml[27],n);
|
||
if(typeof match !== "number")
|
||
switch(match[0])
|
||
{case 4:
|
||
var
|
||
attribs=match[2],
|
||
name=match[1],
|
||
_kW_=[0,caml_call2(f,name,attribs)];
|
||
return caml_call2(Xml[20],_kW_,name);
|
||
case 5:
|
||
var
|
||
elts=match[3],
|
||
attribs$0=match[2],
|
||
name$0=match[1],
|
||
_kX_=function(_k0_){return amap(f,_k0_)},
|
||
_kY_=caml_call2(Stdlib_list[17],_kX_,elts),
|
||
_kZ_=[0,caml_call2(f,name$0,attribs$0)];
|
||
return caml_call3(Xml[21],_kZ_,name$0,_kY_)
|
||
}
|
||
return n}
|
||
function add_float_attrib(name,value,param)
|
||
{if(param)
|
||
{var head=param[1],tail=param[2];
|
||
if(caml_string_equal(caml_call1(Xml[25],head),name))
|
||
return [0,caml_call2(Xml[4],name,value),tail];
|
||
var tail$0=param[2];
|
||
return [0,head,add_float_attrib(name,value,tail$0)]}
|
||
return [0,caml_call2(Xml[4],name,value),0]}
|
||
function map_float_attrib(is_attrib,f,l)
|
||
{function aux(head)
|
||
{var match=caml_call1(Xml[26],head);
|
||
if(0 === match[0])
|
||
{var value=match[1];
|
||
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
|
||
{var _kU_=caml_call1(f,value),_kV_=caml_call1(Xml[25],head);
|
||
return caml_call2(Xml[4],_kV_,_kU_)}}
|
||
return head}
|
||
return caml_call2(Stdlib_list[17],aux,l)}
|
||
function add_int_attrib(name,value,param)
|
||
{if(param)
|
||
{var head=param[1],tail=param[2];
|
||
if(caml_string_equal(caml_call1(Xml[25],head),name))
|
||
return [0,caml_call2(Xml[5],name,value),tail];
|
||
var tail$0=param[2];
|
||
return [0,head,add_int_attrib(name,value,tail$0)]}
|
||
return [0,caml_call2(Xml[5],name,value),0]}
|
||
function rm_attrib(is_attrib,param)
|
||
{var param$0=param;
|
||
for(;;)
|
||
{if(param$0)
|
||
{var head=param$0[1],tail=param$0[2];
|
||
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
|
||
{var param$0=tail;continue}
|
||
var tail$0=param$0[2];
|
||
return [0,head,rm_attrib(is_attrib,tail$0)]}
|
||
return 0}}
|
||
function map_int_attrib(is_attrib,f,l)
|
||
{function aux(head)
|
||
{var match=caml_call1(Xml[26],head);
|
||
if(1 === match[0])
|
||
{var value=match[1];
|
||
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
|
||
{var _kS_=caml_call1(f,value),_kT_=caml_call1(Xml[25],head);
|
||
return caml_call2(Xml[5],_kT_,_kS_)}}
|
||
return head}
|
||
return caml_call2(Stdlib_list[17],aux,l)}
|
||
function add_string_attrib(name,value,param)
|
||
{if(param)
|
||
{var head=param[1],tail=param[2];
|
||
if(caml_string_equal(caml_call1(Xml[25],head),name))
|
||
return [0,caml_call2(Xml[6],name,value),tail];
|
||
var tail$0=param[2];
|
||
return [0,head,add_string_attrib(name,value,tail$0)]}
|
||
return [0,caml_call2(Xml[6],name,value),0]}
|
||
function map_string_attrib(is_attrib,f,l)
|
||
{function aux(head)
|
||
{var match=caml_call1(Xml[26],head);
|
||
if(2 === match[0])
|
||
{var value=match[1];
|
||
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
|
||
{var _kQ_=caml_call1(f,value),_kR_=caml_call1(Xml[25],head);
|
||
return caml_call2(Xml[6],_kR_,_kQ_)}}
|
||
return head}
|
||
return caml_call2(Stdlib_list[17],aux,l)}
|
||
function add_space_sep_attrib(name,value,param)
|
||
{if(param)
|
||
{var tail=param[2],head=param[1],match=caml_call1(Xml[26],head);
|
||
if(3 === match[0] && ! match[1])
|
||
{var values=match[2];
|
||
if(caml_string_equal(caml_call1(Xml[25],head),name))
|
||
return [0,caml_call2(Xml[7],name,[0,value,values]),tail]}
|
||
return caml_string_equal(caml_call1(Xml[25],head),name)
|
||
?[0,caml_call2(Xml[7],name,[0,value,0]),tail]
|
||
:[0,head,add_space_sep_attrib(name,value,tail)]}
|
||
return [0,caml_call2(Xml[7],name,[0,value,0]),0]}
|
||
function add_comma_sep_attrib(name,value,param)
|
||
{if(param)
|
||
{var tail=param[2],head=param[1],match=caml_call1(Xml[26],head);
|
||
if(3 === match[0] && match[1])
|
||
{var values=match[2];
|
||
if(caml_string_equal(caml_call1(Xml[25],head),name))
|
||
return [0,caml_call2(Xml[8],name,[0,value,values]),tail]}
|
||
return caml_string_equal(caml_call1(Xml[25],head),name)
|
||
?[0,caml_call2(Xml[8],name,[0,value,0]),tail]
|
||
:[0,head,add_comma_sep_attrib(name,value,tail)]}
|
||
return [0,caml_call2(Xml[8],name,[0,value,0]),0]}
|
||
function rm_attrib_from_list(is_attrib,is_value,param)
|
||
{if(param)
|
||
{var tail=param[2],head=param[1],match=caml_call1(Xml[26],head);
|
||
if(3 === match[0])
|
||
{var values=match[2],sep=match[1];
|
||
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
|
||
{var
|
||
_kN_=function(v){return 1 - caml_call1(is_value,v)},
|
||
values$0=caml_call2(Stdlib_list[38],_kN_,values);
|
||
if(values$0)
|
||
{if(sep)
|
||
{var _kO_=caml_call1(Xml[25],head);
|
||
return [0,caml_call2(Xml[8],_kO_,values$0),tail]}
|
||
var _kP_=caml_call1(Xml[25],head);
|
||
return [0,caml_call2(Xml[7],_kP_,values$0),tail]}
|
||
return tail}}
|
||
return [0,head,rm_attrib_from_list(is_attrib,is_value,tail)]}
|
||
return 0}
|
||
function map_string_attrib_in_list(is_attrib,f,l)
|
||
{function aux(head)
|
||
{var match=caml_call1(Xml[26],head);
|
||
if(3 === match[0])
|
||
{var values=match[2],sep=match[1];
|
||
if(caml_call1(is_attrib,caml_call1(Xml[25],head)))
|
||
{if(sep)
|
||
{var
|
||
_kJ_=caml_call2(Stdlib_list[17],f,values),
|
||
_kK_=caml_call1(Xml[25],head);
|
||
return caml_call2(Xml[8],_kK_,_kJ_)}
|
||
var
|
||
_kL_=caml_call2(Stdlib_list[17],f,values),
|
||
_kM_=caml_call1(Xml[25],head);
|
||
return caml_call2(Xml[7],_kM_,_kL_)}}
|
||
return head}
|
||
return caml_call2(Stdlib_list[17],aux,l)}
|
||
function fold
|
||
(of_empty,
|
||
of_comment,
|
||
of_txt,
|
||
of_encodedpcdata,
|
||
of_entity,
|
||
of_leaf,
|
||
of_node,
|
||
n)
|
||
{var match=caml_call1(Xml[27],n);
|
||
if(typeof match === "number")
|
||
return caml_call1(of_empty,0);
|
||
else
|
||
switch(match[0])
|
||
{case 0:var s=match[1];return caml_call1(of_comment,s);
|
||
case 1:var s$0=match[1];return caml_call1(of_encodedpcdata,s$0);
|
||
case 2:var s$1=match[1];return caml_call1(of_txt,s$1);
|
||
case 3:var s$2=match[1];return caml_call1(of_entity,s$2);
|
||
case 4:
|
||
var attribs=match[2],name=match[1];
|
||
return caml_call2(of_leaf,name,attribs);
|
||
default:
|
||
var
|
||
elts=match[3],
|
||
attribs$0=match[2],
|
||
name$0=match[1],
|
||
_kH_=
|
||
function(_kI_)
|
||
{return fold
|
||
(of_empty,
|
||
of_comment,
|
||
of_txt,
|
||
of_encodedpcdata,
|
||
of_entity,
|
||
of_leaf,
|
||
of_node,
|
||
_kI_)};
|
||
return caml_call3
|
||
(of_node,
|
||
name$0,
|
||
attribs$0,
|
||
caml_call2(Stdlib_list[17],_kH_,elts))}}
|
||
function all_entities(elt)
|
||
{function f(param){return 0}
|
||
function _kG_(ename,attribs,elts)
|
||
{return caml_call1(Stdlib_list[14],elts)}
|
||
return fold(f,f,f,f,f,function(ename,attribs){return 0},_kG_,elt)}
|
||
function flatmap(f,l)
|
||
{var _kF_=caml_call2(Stdlib_list[17],f,l);
|
||
return caml_call1(Stdlib_list[13],_kF_)}
|
||
function translate
|
||
(root_leaf,root_node,sub_leaf,sub_node,update_state,state,n)
|
||
{function translate(state,n)
|
||
{var match=caml_call1(Xml[27],n);
|
||
if(typeof match !== "number")
|
||
switch(match[0])
|
||
{case 4:
|
||
var attribs=match[2],name=match[1];
|
||
return caml_call3(sub_leaf,state,name,attribs);
|
||
case 5:
|
||
var
|
||
elts=match[3],
|
||
attribs$0=match[2],
|
||
name$0=match[1],
|
||
_kD_=caml_call3(update_state,name$0,attribs$0,state);
|
||
return caml_call4
|
||
(sub_node,
|
||
state,
|
||
name$0,
|
||
attribs$0,
|
||
flatmap(function(_kE_){return translate(_kD_,_kE_)},elts))
|
||
}
|
||
return [0,n,0]}
|
||
var match=caml_call1(Xml[27],n);
|
||
if(typeof match !== "number")
|
||
switch(match[0])
|
||
{case 4:
|
||
var attribs=match[2],name=match[1];
|
||
return caml_call2(root_leaf,name,attribs);
|
||
case 5:
|
||
var elts=match[3],attribs$0=match[2],name$0=match[1];
|
||
return caml_call3
|
||
(root_node,
|
||
name$0,
|
||
attribs$0,
|
||
flatmap(function(_kC_){return translate(state,_kC_)},elts))
|
||
}
|
||
return n}
|
||
return [0,
|
||
amap,
|
||
amap1,
|
||
rm_attrib,
|
||
rm_attrib_from_list,
|
||
map_int_attrib,
|
||
map_float_attrib,
|
||
map_string_attrib,
|
||
map_string_attrib_in_list,
|
||
add_int_attrib,
|
||
add_float_attrib,
|
||
add_string_attrib,
|
||
add_comma_sep_attrib,
|
||
add_space_sep_attrib,
|
||
fold,
|
||
all_entities,
|
||
translate]}];
|
||
caml_register_global(1096,Xml_iter,"Xml_iter");
|
||
function string_of_iri(x){return caml_call2(Stdlib_printf[4],_P_,x)}
|
||
function to_string(f,param)
|
||
{var unit=param[2],n=param[1];
|
||
if(unit)
|
||
var unit$0=unit[1],_kB_=caml_call1(f,unit$0);
|
||
else
|
||
var _kB_=cst$31;
|
||
return caml_call3(Stdlib_printf[4],_Q_,n,_kB_)}
|
||
function angle_names(param)
|
||
{return 4099509 === param?cst_rad:793050094 <= param?cst_grad:cst_deg}
|
||
function string_of_angle(a){return to_string(angle_names,a)}
|
||
function length_names(param)
|
||
{return 16389 <= param
|
||
?17280 === param
|
||
?cst_mm
|
||
:17956 <= param
|
||
?17960 <= param?cst_px:cst_pt
|
||
:17939 <= param?cst_pc:cst_in
|
||
:15496 <= param
|
||
?15507 <= param?cst_ex:cst_em
|
||
:15050 <= param?cst_cm:cst$32}
|
||
function string_of_length(a){return to_string(length_names,a)}
|
||
function list(opt,f,l)
|
||
{if(opt)var sth=opt[1],sep=sth;else var sep=cst$33;
|
||
var _kA_=caml_call2(Stdlib_list[17],f,l);
|
||
return caml_call2(Stdlib_string[7],sep,_kA_)}
|
||
function string_of_paint_whitout_icc(param)
|
||
{if(typeof param === "number")
|
||
return 870530776 <= param?cst_none:cst_currentColor;
|
||
var match=param[2],icc=match[2],c=match[1];
|
||
if(icc)
|
||
{var x=icc[1],_kz_=caml_call2(Stdlib[28],sep,x);
|
||
return caml_call2(Stdlib[28],c,_kz_)}
|
||
return c}
|
||
function string_of_paint(c)
|
||
{if(typeof c !== "number" && 3652393 <= c[1])
|
||
{var _kt_=c[2],_ku_=_kt_[2],_kv_=_kt_[1];
|
||
if(_ku_)
|
||
{var
|
||
b=_ku_[1],
|
||
_kw_=string_of_paint_whitout_icc(b),
|
||
_kx_=caml_call2(Stdlib[28],cst$34,_kw_),
|
||
_ky_=string_of_iri(_kv_);
|
||
return caml_call2(Stdlib[28],_ky_,_kx_)}
|
||
return string_of_iri(_kv_)}
|
||
return string_of_paint_whitout_icc(c)}
|
||
function Make_with_wrapped_functions(Xml,C)
|
||
{var
|
||
doctype=compose_doctype(cst_svg,_R_),
|
||
Info=[0,content_type,0,0,version,standard,namespace,doctype],
|
||
_fk_=Xml[2],
|
||
_fl_=Xml[3];
|
||
function tot(x){return x}
|
||
function totl(x){return x}
|
||
function toelt(x){return x}
|
||
function toeltl(x){return x}
|
||
function to_attrib(x){return x}
|
||
function nullary(tag,a,param)
|
||
{var _ks_=caml_call1(Xml[1][3],0);
|
||
return caml_call3(Xml[21],a,tag,_ks_)}
|
||
function unary(tag,a,elt)
|
||
{var _kr_=caml_call1(Xml[1][4],elt);
|
||
return caml_call3(Xml[21],a,tag,_kr_)}
|
||
function star(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)}
|
||
function to_xmlattribs(x){return x}
|
||
var _fm_=Xml[4],_fn_=Xml[6],_fo_=C[10],_fp_=C[10],_fq_=C[11];
|
||
function user_attrib(f,name,v)
|
||
{var _kq_=caml_call2(Xml[1][2],f,v);
|
||
return caml_call2(Xml[6],name,_kq_)}
|
||
var _fr_=Xml[6];
|
||
function metadata(a,children)
|
||
{return caml_call3(Xml[21],a,cst_metadata,children)}
|
||
function foreignObject(a,children)
|
||
{return caml_call3(Xml[21],a,cst_foreignObject,children)}
|
||
function pcdata(s){return caml_call1(Xml[17],s)}
|
||
var
|
||
a_version=caml_call1(_fn_,cst_version),
|
||
a_baseProfile=caml_call1(_fn_,cst_baseProfile);
|
||
function a_x(_kp_){return user_attrib(_fo_,cst_x,_kp_)}
|
||
function a_y(_ko_){return user_attrib(_fo_,cst_y,_ko_)}
|
||
function a_width(_kn_){return user_attrib(_fp_,cst_width,_kn_)}
|
||
function a_height(_km_){return user_attrib(_fp_,cst_height,_km_)}
|
||
var
|
||
a_preserveAspectRatio=caml_call1(_fn_,cst_preserveAspectRatio),
|
||
a_contentScriptType=caml_call1(_fn_,cst_contentScriptType),
|
||
a_contentStyleType=caml_call1(_fn_,cst_contentStyleType);
|
||
function a_zoomAndPan(x){return user_attrib(C[4],cst_zoomAndSpan,x)}
|
||
var
|
||
a_href=caml_call1(_fn_,cst_href),
|
||
a_xlink_href=caml_call1(_fn_,cst_xlink_href),
|
||
a_requiredFeatures=caml_call1(Xml[7],cst_requiredFeatures),
|
||
a_requiredExtensions=caml_call1(Xml[7],cst_requiredExtension),
|
||
a_systemLanguage=caml_call1(Xml[8],cst_systemLanguage),
|
||
_fs_=C[3];
|
||
function a_externalRessourcesRequired(_kl_)
|
||
{return user_attrib(_fs_,cst_externalRessourcesRequired,_kl_)}
|
||
var a_id=caml_call1(_fn_,cst_id);
|
||
function a_user_data(name)
|
||
{return caml_call1(_fn_,caml_call2(Stdlib[28],cst_data,name))}
|
||
var
|
||
a_xml_base=caml_call1(_fn_,cst_xml_base),
|
||
a_xml_lang=caml_call1(_fn_,cst_xml_lang);
|
||
function a_xml_space(x){return user_attrib(C[4],cst_xml_space,x)}
|
||
var
|
||
a_type=caml_call1(_fn_,cst_type),
|
||
a_media=caml_call1(Xml[8],cst_media),
|
||
a_xlink_title=caml_call1(_fn_,cst_xlink_title),
|
||
a_class=caml_call1(Xml[7],cst_class),
|
||
a_style=caml_call1(_fn_,cst_style),
|
||
_ft_=C[21];
|
||
function a_transform(_kk_){return user_attrib(_ft_,cst_transform,_kk_)}
|
||
var _fu_=C[7];
|
||
function a_viewBox(_kj_){return user_attrib(_fu_,cst_viewBox,_kj_)}
|
||
var
|
||
a_d=caml_call1(_fn_,cst_d),
|
||
a_pathLength=caml_call1(_fm_,cst_pathLength);
|
||
function a_rx(_ki_){return user_attrib(_fp_,cst_rx,_ki_)}
|
||
function a_ry(_kh_){return user_attrib(_fp_,cst_ry,_kh_)}
|
||
function a_cx(_kg_){return user_attrib(_fp_,cst_cx,_kg_)}
|
||
function a_cy(_kf_){return user_attrib(_fp_,cst_cy,_kf_)}
|
||
function a_r(_ke_){return user_attrib(_fp_,cst_r,_ke_)}
|
||
function a_x1(_kd_){return user_attrib(_fo_,cst_x1,_kd_)}
|
||
function a_y1(_kc_){return user_attrib(_fo_,cst_y1,_kc_)}
|
||
function a_x2(_kb_){return user_attrib(_fo_,cst_x2,_kb_)}
|
||
function a_y2(_ka_){return user_attrib(_fo_,cst_y2,_ka_)}
|
||
var _fv_=C[5];
|
||
function a_points(_j$_){return user_attrib(_fv_,cst_points,_j$_)}
|
||
function a_x_list(_j__){return user_attrib(_fq_,cst_x$0,_j__)}
|
||
function a_y_list(_j9_){return user_attrib(_fq_,cst_y$0,_j9_)}
|
||
var _fw_=C[12];
|
||
function a_dx(_j8_){return user_attrib(_fw_,cst_dx,_j8_)}
|
||
var _fx_=C[12];
|
||
function a_dy(_j7_){return user_attrib(_fx_,cst_dy,_j7_)}
|
||
function a_dx_list(_j6_){return user_attrib(_fq_,cst_dx$0,_j6_)}
|
||
function a_dy_list(_j5_){return user_attrib(_fq_,cst_dy$0,_j5_)}
|
||
function a_lengthAdjust(x){return user_attrib(C[4],cst_lengthAdjust,x)}
|
||
function a_textLength(_j4_)
|
||
{return user_attrib(_fp_,cst_textLength,_j4_)}
|
||
function a_text_anchor(x){return user_attrib(C[4],cst_text_anchor,x)}
|
||
function a_text_decoration(x)
|
||
{return user_attrib(C[4],cst_text_decoration,x)}
|
||
function a_text_rendering(x)
|
||
{return user_attrib(C[4],cst_text_rendering,x)}
|
||
var _fy_=C[14];
|
||
function a_rotate(_j3_){return user_attrib(_fy_,cst_rotate,_j3_)}
|
||
function a_startOffset(_j2_)
|
||
{return user_attrib(_fp_,cst_startOffset,_j2_)}
|
||
function a_method(x){return user_attrib(C[4],cst_method,x)}
|
||
function a_spacing(x){return user_attrib(C[4],cst_spacing,x)}
|
||
var
|
||
a_glyphRef=caml_call1(_fn_,cst_glyphRef),
|
||
a_format=caml_call1(_fn_,cst_format);
|
||
function a_markerUnits(x){return user_attrib(C[4],cst_markerUnits,x)}
|
||
function a_refX(_j1_){return user_attrib(_fo_,cst_refX,_j1_)}
|
||
function a_refY(_j0_){return user_attrib(_fo_,cst_refY,_j0_)}
|
||
function a_markerWidth(_jZ_)
|
||
{return user_attrib(_fp_,cst_markerWidth,_jZ_)}
|
||
function a_markerHeight(_jY_)
|
||
{return user_attrib(_fp_,cst_markerHeight,_jY_)}
|
||
function a_orient(x){return user_attrib(C[17],cst_orient,x)}
|
||
var a_local=caml_call1(_fn_,cst_local);
|
||
function a_rendering_intent(x)
|
||
{return user_attrib(C[4],cst_rendering_intent,x)}
|
||
function a_gradientUnits(x)
|
||
{return user_attrib(C[4],cst_gradientUnits,x)}
|
||
var _fz_=C[21];
|
||
function a_gradientTransform(_jX_)
|
||
{return user_attrib(_fz_,cst_gradientTransform,_jX_)}
|
||
function a_spreadMethod(x){return user_attrib(C[4],cst_spreadMethod,x)}
|
||
function a_fx(_jW_){return user_attrib(_fo_,cst_fx,_jW_)}
|
||
function a_fy(_jV_){return user_attrib(_fo_,cst_fy,_jV_)}
|
||
function a_offset(x){return user_attrib(C[16],cst_offset,x)}
|
||
function a_patternUnits(x){return user_attrib(C[4],cst_patternUnits,x)}
|
||
function a_patternContentUnits(x)
|
||
{return user_attrib(C[4],cst_patternContentUnits,x)}
|
||
function a_patternTransform(x)
|
||
{return user_attrib(C[21],cst_patternTransform,x)}
|
||
function a_clipPathUnits(x)
|
||
{return user_attrib(C[4],cst_clipPathUnits,x)}
|
||
function a_maskUnits(x){return user_attrib(C[4],cst_maskUnits,x)}
|
||
function a_maskContentUnits(x)
|
||
{return user_attrib(C[4],cst_maskContentUnits,x)}
|
||
function a_primitiveUnits(x)
|
||
{return user_attrib(C[4],cst_primitiveUnits,x)}
|
||
var _fA_=C[13];
|
||
function a_filterRes(_jU_)
|
||
{return user_attrib(_fA_,cst_filterResUnits,_jU_)}
|
||
var a_result=caml_call1(_fn_,cst_result);
|
||
function a_in(x){return user_attrib(C[8],cst_in$0,x)}
|
||
function a_in2(x){return user_attrib(C[8],cst_in2,x)}
|
||
var
|
||
a_azimuth=caml_call1(_fm_,cst_azimuth),
|
||
a_elevation=caml_call1(_fm_,cst_elevation),
|
||
a_pointsAtX=caml_call1(_fm_,cst_pointsAtX),
|
||
a_pointsAtY=caml_call1(_fm_,cst_pointsAtY),
|
||
a_pointsAtZ=caml_call1(_fm_,cst_pointsAtZ),
|
||
a_specularExponent=caml_call1(_fm_,cst_specularExponent),
|
||
a_specularConstant=caml_call1(_fm_,cst_specularConstant),
|
||
a_limitingConeAngle=caml_call1(_fm_,cst_limitingConeAngle);
|
||
function a_mode(x){return user_attrib(C[4],cst_mode,x)}
|
||
function a_feColorMatrix_type(x){return user_attrib(C[4],cst_type$0,x)}
|
||
var _fB_=C[14];
|
||
function a_values(_jT_){return user_attrib(_fB_,cst_values,_jT_)}
|
||
function a_transfer_type(x){return user_attrib(C[4],cst_type$1,x)}
|
||
var _fC_=C[14];
|
||
function a_tableValues(_jS_)
|
||
{return user_attrib(_fC_,cst_tableValues,_jS_)}
|
||
var _fD_=C[12];
|
||
function a_intercept(_jR_){return user_attrib(_fD_,cst_intercept,_jR_)}
|
||
var _fE_=C[12];
|
||
function a_amplitude(_jQ_){return user_attrib(_fE_,cst_amplitude,_jQ_)}
|
||
var _fF_=C[12];
|
||
function a_exponent(_jP_){return user_attrib(_fF_,cst_exponent,_jP_)}
|
||
var _fG_=C[12];
|
||
function a_transfer_offset(_jO_)
|
||
{return user_attrib(_fG_,cst_offset$0,_jO_)}
|
||
function a_feComposite_operator(x)
|
||
{return user_attrib(C[4],cst_operator,x)}
|
||
var _fH_=C[12];
|
||
function a_k1(_jN_){return user_attrib(_fH_,cst_k1,_jN_)}
|
||
var _fI_=C[12];
|
||
function a_k2(_jM_){return user_attrib(_fI_,cst_k2,_jM_)}
|
||
var _fJ_=C[12];
|
||
function a_k3(_jL_){return user_attrib(_fJ_,cst_k3,_jL_)}
|
||
var _fK_=C[12];
|
||
function a_k4(_jK_){return user_attrib(_fK_,cst_k4,_jK_)}
|
||
var _fL_=C[13];
|
||
function a_order(_jJ_){return user_attrib(_fL_,cst_order,_jJ_)}
|
||
var _fM_=C[14];
|
||
function a_kernelMatrix(_jI_)
|
||
{return user_attrib(_fM_,cst_kernelMatrix,_jI_)}
|
||
var _fN_=C[12];
|
||
function a_divisor(_jH_){return user_attrib(_fN_,cst_divisor,_jH_)}
|
||
var _fO_=C[12];
|
||
function a_bias(_jG_){return user_attrib(_fO_,cst_bias,_jG_)}
|
||
var _fP_=C[13];
|
||
function a_kernelUnitLength(_jF_)
|
||
{return user_attrib(_fP_,cst_kernelUnitLength,_jF_)}
|
||
var _fQ_=C[9];
|
||
function a_targetX(_jE_){return user_attrib(_fQ_,cst_targetX,_jE_)}
|
||
var _fR_=C[9];
|
||
function a_targetY(_jD_){return user_attrib(_fR_,cst_targetY,_jD_)}
|
||
function a_edgeMode(x){return user_attrib(C[4],cst_targetY$0,x)}
|
||
var _fS_=C[3];
|
||
function a_preserveAlpha(_jC_)
|
||
{return user_attrib(_fS_,cst_preserveAlpha,_jC_)}
|
||
var _fT_=C[12];
|
||
function a_surfaceScale(_jB_)
|
||
{return user_attrib(_fT_,cst_surfaceScale,_jB_)}
|
||
var _fU_=C[12];
|
||
function a_diffuseConstant(_jA_)
|
||
{return user_attrib(_fU_,cst_diffuseConstant,_jA_)}
|
||
var _fV_=C[12];
|
||
function a_scale(_jz_){return user_attrib(_fV_,cst_scale,_jz_)}
|
||
function a_xChannelSelector(x)
|
||
{return user_attrib(C[4],cst_xChannelSelector,x)}
|
||
function a_yChannelSelector(x)
|
||
{return user_attrib(C[4],cst_yChannelSelector,x)}
|
||
var _fW_=C[13];
|
||
function a_stdDeviation(_jy_)
|
||
{return user_attrib(_fW_,cst_stdDeviation,_jy_)}
|
||
function a_feMorphology_operator(x)
|
||
{return user_attrib(C[4],cst_operator$0,x)}
|
||
var _fX_=C[13];
|
||
function a_radius(_jx_){return user_attrib(_fX_,cst_radius,_jx_)}
|
||
var _fY_=C[13];
|
||
function a_baseFrenquency(_jw_)
|
||
{return user_attrib(_fY_,cst_baseFrequency,_jw_)}
|
||
var _fZ_=C[9];
|
||
function a_numOctaves(_jv_)
|
||
{return user_attrib(_fZ_,cst_numOctaves,_jv_)}
|
||
var _f0_=C[12];
|
||
function a_seed(_ju_){return user_attrib(_f0_,cst_seed,_ju_)}
|
||
function a_stitchTiles(x){return user_attrib(C[4],cst_stitchTiles,x)}
|
||
function a_feTurbulence_type(x){return user_attrib(C[4],cst_type$2,x)}
|
||
function a_xlink_show(x){return user_attrib(C[4],cst_xlink_show,x)}
|
||
function a_xlink_actuate(x)
|
||
{return user_attrib(C[4],cst_xlink_actuate,x)}
|
||
var
|
||
a_target=caml_call1(_fn_,cst_xlink_target),
|
||
a_viewTarget=caml_call1(_fn_,cst_viewTarget),
|
||
a_attributeName=caml_call1(_fn_,cst_attributeName);
|
||
function a_attributeType(x)
|
||
{return user_attrib(C[4],cst_attributeType,x)}
|
||
var
|
||
a_begin=caml_call1(_fn_,cst_begin),
|
||
a_dur=caml_call1(_fn_,cst_dur),
|
||
a_min=caml_call1(_fn_,cst_min),
|
||
a_max=caml_call1(_fn_,cst_max);
|
||
function a_restart(x){return user_attrib(C[4],cst_restart,x)}
|
||
var
|
||
a_repeatCount=caml_call1(_fn_,cst_repeatCount),
|
||
a_repeatDur=caml_call1(_fn_,cst_repeatDur),
|
||
_f1_=C[18];
|
||
function a_fill(_jt_){return user_attrib(_f1_,cst_fill,_jt_)}
|
||
function a_animation_fill(x){return user_attrib(C[4],cst_fill$0,x)}
|
||
function a_calcMode(x){return user_attrib(C[4],cst_calcMode,x)}
|
||
var
|
||
a_animation_values=caml_call1(Xml[8],cst_values$0),
|
||
a_keyTimes=caml_call1(Xml[8],cst_keyTimes),
|
||
a_keySplines=caml_call1(Xml[8],cst_keySplines),
|
||
a_from=caml_call1(_fn_,cst_from),
|
||
a_to=caml_call1(_fn_,cst_to),
|
||
a_by=caml_call1(_fn_,cst_by);
|
||
function a_additive(x){return user_attrib(C[4],cst_additive,x)}
|
||
function a_accumulate(x){return user_attrib(C[4],cst_accumulate,x)}
|
||
var _f2_=C[15];
|
||
function a_keyPoints(_js_){return user_attrib(_f2_,cst_keyPoints,_js_)}
|
||
var a_path=caml_call1(_fn_,cst_path),_f3_=C[4];
|
||
function a_animateTransform_type(_jr_)
|
||
{return user_attrib(_f3_,cst_type$3,_jr_)}
|
||
var _f4_=C[12];
|
||
function a_horiz_origin_x(_jq_)
|
||
{return user_attrib(_f4_,cst_horiz_origin_x,_jq_)}
|
||
var _f5_=C[12];
|
||
function a_horiz_origin_y(_jp_)
|
||
{return user_attrib(_f5_,cst_horiz_origin_y,_jp_)}
|
||
var _f6_=C[12];
|
||
function a_horiz_adv_x(_jo_)
|
||
{return user_attrib(_f6_,cst_horiz_adv_x,_jo_)}
|
||
var _f7_=C[12];
|
||
function a_vert_origin_x(_jn_)
|
||
{return user_attrib(_f7_,cst_vert_origin_x,_jn_)}
|
||
var _f8_=C[12];
|
||
function a_vert_origin_y(_jm_)
|
||
{return user_attrib(_f8_,cst_vert_origin_y,_jm_)}
|
||
var _f9_=C[12];
|
||
function a_vert_adv_y(_jl_)
|
||
{return user_attrib(_f9_,cst_vert_adv_y,_jl_)}
|
||
var
|
||
a_unicode=caml_call1(_fn_,cst_unicode),
|
||
a_glyph_name=caml_call1(_fn_,cst_glyphname);
|
||
function a_orientation(x){return user_attrib(C[4],cst_orientation,x)}
|
||
function a_arabic_form(x){return user_attrib(C[4],cst_arabic_form,x)}
|
||
var
|
||
a_lang=caml_call1(_fn_,cst_lang),
|
||
a_u1=caml_call1(_fn_,cst_u1),
|
||
a_u2=caml_call1(_fn_,cst_u2),
|
||
a_g1=caml_call1(_fn_,cst_g1),
|
||
a_g2=caml_call1(_fn_,cst_g2),
|
||
a_k=caml_call1(_fn_,cst_k),
|
||
a_font_family=caml_call1(_fn_,cst_font_family),
|
||
a_font_style=caml_call1(_fn_,cst_font_style),
|
||
a_font_variant=caml_call1(_fn_,cst_font_variant),
|
||
a_font_weight=caml_call1(_fn_,cst_font_weight),
|
||
a_font_stretch=caml_call1(_fn_,cst_font_stretch),
|
||
a_font_size=caml_call1(_fn_,cst_font_size),
|
||
a_unicode_range=caml_call1(_fn_,cst_unicode_range),
|
||
a_units_per_em=caml_call1(_fn_,cst_units_per_em),
|
||
_f__=C[12];
|
||
function a_stemv(_jk_){return user_attrib(_f__,cst_stemv,_jk_)}
|
||
var _f$_=C[12];
|
||
function a_stemh(_jj_){return user_attrib(_f$_,cst_stemh,_jj_)}
|
||
var _ga_=C[12];
|
||
function a_slope(_ji_){return user_attrib(_ga_,cst_slope,_ji_)}
|
||
var _gb_=C[12];
|
||
function a_cap_height(_jh_)
|
||
{return user_attrib(_gb_,cst_cap_height,_jh_)}
|
||
var _gc_=C[12];
|
||
function a_x_height(_jg_){return user_attrib(_gc_,cst_x_height,_jg_)}
|
||
var _gd_=C[12];
|
||
function a_accent_height(_jf_)
|
||
{return user_attrib(_gd_,cst_accent_height,_jf_)}
|
||
var _ge_=C[12];
|
||
function a_ascent(_je_){return user_attrib(_ge_,cst_ascent,_je_)}
|
||
var
|
||
a_widths=caml_call1(_fn_,cst_widths),
|
||
a_bbox=caml_call1(_fn_,cst_bbox),
|
||
_gf_=C[12];
|
||
function a_ideographic(_jd_)
|
||
{return user_attrib(_gf_,cst_ideographic,_jd_)}
|
||
var _gg_=C[12];
|
||
function a_alphabetic(_jc_)
|
||
{return user_attrib(_gg_,cst_alphabetic,_jc_)}
|
||
var _gh_=C[12];
|
||
function a_mathematical(_jb_)
|
||
{return user_attrib(_gh_,cst_mathematical,_jb_)}
|
||
var _gi_=C[12];
|
||
function a_hanging(_ja_){return user_attrib(_gi_,cst_hanging,_ja_)}
|
||
var _gj_=C[12];
|
||
function a_videographic(_i$_)
|
||
{return user_attrib(_gj_,cst_v_ideographic,_i$_)}
|
||
var _gk_=C[12];
|
||
function a_v_alphabetic(_i__)
|
||
{return user_attrib(_gk_,cst_v_alphabetic,_i__)}
|
||
var _gl_=C[12];
|
||
function a_v_mathematical(_i9_)
|
||
{return user_attrib(_gl_,cst_v_mathematical,_i9_)}
|
||
var _gm_=C[12];
|
||
function a_v_hanging(_i8_){return user_attrib(_gm_,cst_v_hanging,_i8_)}
|
||
var _gn_=C[12];
|
||
function a_underline_position(_i7_)
|
||
{return user_attrib(_gn_,cst_underline_position,_i7_)}
|
||
var _go_=C[12];
|
||
function a_underline_thickness(_i6_)
|
||
{return user_attrib(_go_,cst_underline_thickness,_i6_)}
|
||
var _gp_=C[12];
|
||
function a_strikethrough_position(_i5_)
|
||
{return user_attrib(_gp_,cst_strikethrough_position,_i5_)}
|
||
var _gq_=C[12];
|
||
function a_strikethrough_thickness(_i4_)
|
||
{return user_attrib(_gq_,cst_strikethrough_thickness,_i4_)}
|
||
var _gr_=C[12];
|
||
function a_overline_position(_i3_)
|
||
{return user_attrib(_gr_,cst_overline_position,_i3_)}
|
||
var _gs_=C[12];
|
||
function a_overline_thickness(_i2_)
|
||
{return user_attrib(_gs_,cst_overline_thickness,_i2_)}
|
||
var
|
||
a_string=caml_call1(_fn_,cst_string),
|
||
a_name=caml_call1(_fn_,cst_name);
|
||
function a_alignment_baseline(x)
|
||
{return user_attrib(C[2],cst_alignment_baseline,x)}
|
||
function a_dominant_baseline(x)
|
||
{return user_attrib(C[6],cst_dominant_baseline,x)}
|
||
var
|
||
a_onabort=caml_call1(Xml[9],cst_onabort),
|
||
a_onactivate=caml_call1(Xml[9],cst_onactivate),
|
||
a_onbegin=caml_call1(Xml[9],cst_onbegin),
|
||
a_onend=caml_call1(Xml[9],cst_onend),
|
||
a_onerror=caml_call1(Xml[9],cst_onerror),
|
||
a_onfocusin=caml_call1(Xml[9],cst_onfocusin),
|
||
a_onfocusout=caml_call1(Xml[9],cst_onfocusout),
|
||
a_onload=caml_call1(Xml[9],cst_onload),
|
||
a_onrepeat=caml_call1(Xml[9],cst_onrepeat),
|
||
a_onresize=caml_call1(Xml[9],cst_onresize),
|
||
a_onscroll=caml_call1(Xml[9],cst_onscroll),
|
||
a_onunload=caml_call1(Xml[9],cst_onunload),
|
||
a_onzoom=caml_call1(Xml[9],cst_onzoom),
|
||
a_onclick=caml_call1(Xml[10],cst_onclick),
|
||
a_onmousedown=caml_call1(Xml[10],cst_onmousedown),
|
||
a_onmouseup=caml_call1(Xml[10],cst_onmouseup),
|
||
a_onmouseover=caml_call1(Xml[10],cst_onmouseover),
|
||
a_onmouseout=caml_call1(Xml[10],cst_onmouseout),
|
||
a_onmousemove=caml_call1(Xml[10],cst_onmousemove),
|
||
a_ontouchstart=caml_call1(Xml[12],cst_ontouchstart),
|
||
a_ontouchend=caml_call1(Xml[12],cst_ontouchend),
|
||
a_ontouchmove=caml_call1(Xml[12],cst_ontouchmove),
|
||
a_ontouchcancel=caml_call1(Xml[12],cst_ontouchcancel),
|
||
a_stop_color=caml_call1(_fr_,cst_stop_color),
|
||
_gt_=C[12];
|
||
function a_stop_opacity(_i1_)
|
||
{return user_attrib(_gt_,cst_stop_opacity,_i1_)}
|
||
var _gu_=C[18];
|
||
function a_stroke(_i0_){return user_attrib(_gu_,cst_stroke,_i0_)}
|
||
var _gv_=C[10];
|
||
function a_stroke_width(_iZ_)
|
||
{return user_attrib(_gv_,cst_stroke_width,_iZ_)}
|
||
function a_stroke_linecap(x)
|
||
{return user_attrib(C[4],cst_stroke_linecap,x)}
|
||
function a_stroke_linejoin(x)
|
||
{return user_attrib(C[4],cst_stroke_linejoin,x)}
|
||
var _gw_=C[12];
|
||
function a_stroke_miterlimit(_iY_)
|
||
{return user_attrib(_gw_,cst_stroke_miterlimit,_iY_)}
|
||
function a_stroke_dasharray(x)
|
||
{return user_attrib(C[19],cst_stroke_dasharray,x)}
|
||
var _gx_=C[10];
|
||
function a_stroke_dashoffset(_iX_)
|
||
{return user_attrib(_gx_,cst_stroke_dashoffset,_iX_)}
|
||
var _gy_=C[12];
|
||
function a_stroke_opacity(_iW_)
|
||
{return user_attrib(_gy_,cst_stroke_opacity,_iW_)}
|
||
function svg(opt,children)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
var
|
||
_iV_=
|
||
[0,
|
||
caml_call2
|
||
(_fn_,
|
||
cst_xmlns_xlink,
|
||
caml_call1(Xml[1][1],cst_http_www_w3_org_1999_xlink)),
|
||
a],
|
||
attribs=
|
||
[0,
|
||
caml_call2
|
||
(_fn_,
|
||
cst_xmlns$3,
|
||
caml_call1(Xml[1][1],cst_http_www_w3_org_2000_svg)),
|
||
_iV_];
|
||
return star(cst_svg$0,[0,attribs],children)}
|
||
function g(_iT_,_iU_){return star(cst_g,_iT_,_iU_)}
|
||
function defs(_iR_,_iS_){return star(cst_defs,_iR_,_iS_)}
|
||
function desc(_iP_,_iQ_){return unary(cst_desc,_iP_,_iQ_)}
|
||
function title(_iN_,_iO_){return unary(cst_title,_iN_,_iO_)}
|
||
function symbol(_iL_,_iM_){return star(cst_symbol,_iL_,_iM_)}
|
||
function use(_iJ_,_iK_){return star(cst_use,_iJ_,_iK_)}
|
||
function image(_iH_,_iI_){return star(cst_image,_iH_,_iI_)}
|
||
function switch$0(_iF_,_iG_){return star(cst_switch,_iF_,_iG_)}
|
||
function style(_iD_,_iE_){return unary(cst_style$0,_iD_,_iE_)}
|
||
function path(_iB_,_iC_){return star(cst_path$0,_iB_,_iC_)}
|
||
function rect(_iz_,_iA_){return star(cst_rect,_iz_,_iA_)}
|
||
function circle(_ix_,_iy_){return star(cst_circle,_ix_,_iy_)}
|
||
function ellipse(_iv_,_iw_){return star(cst_ellipse,_iv_,_iw_)}
|
||
function line(_it_,_iu_){return star(cst_line,_it_,_iu_)}
|
||
function polyline(_ir_,_is_){return star(cst_polyline,_ir_,_is_)}
|
||
function polygon(_ip_,_iq_){return star(cst_polygon,_ip_,_iq_)}
|
||
function text(_in_,_io_){return star(cst_text,_in_,_io_)}
|
||
function tspan(_il_,_im_){return star(cst_tspan,_il_,_im_)}
|
||
function tref(_ij_,_ik_){return star(cst_tref,_ij_,_ik_)}
|
||
function textPath(_ih_,_ii_){return star(cst_textPath,_ih_,_ii_)}
|
||
function altGlyph(_if_,_ig_){return unary(cst_altGlyph,_if_,_ig_)}
|
||
function altGlyphDef(_id_,_ie_){return unary(cst_altGlyphDef,_id_,_ie_)}
|
||
function altGlyphItem(_ib_,_ic_)
|
||
{return star(cst_altGlyphItem,_ib_,_ic_)}
|
||
function glyphRef(_h$_,_ia_){return nullary(cst_glyphRef$0,_h$_,_ia_)}
|
||
function marker(_h9_,_h__){return star(cst_marker,_h9_,_h__)}
|
||
function color_profile(_h7_,_h8_)
|
||
{return star(cst_color_profile,_h7_,_h8_)}
|
||
function linearGradient(_h5_,_h6_)
|
||
{return star(cst_linearGradient,_h5_,_h6_)}
|
||
function radialGradient(_h3_,_h4_)
|
||
{return star(cst_radialGradient,_h3_,_h4_)}
|
||
function stop(_h1_,_h2_){return star(cst_stop,_h1_,_h2_)}
|
||
function pattern(_hZ_,_h0_){return star(cst_pattern,_hZ_,_h0_)}
|
||
function clipPath(_hX_,_hY_){return star(cst_clipPath,_hX_,_hY_)}
|
||
function filter(_hV_,_hW_){return star(cst_filter,_hV_,_hW_)}
|
||
function feDistantLight(_hT_,_hU_)
|
||
{return star(cst_feDistantLight,_hT_,_hU_)}
|
||
function fePointLight(_hR_,_hS_)
|
||
{return star(cst_fePointLight,_hR_,_hS_)}
|
||
function feSpotLight(_hP_,_hQ_){return star(cst_feSpotLight,_hP_,_hQ_)}
|
||
function feBlend(_hN_,_hO_){return star(cst_feBlend,_hN_,_hO_)}
|
||
function feColorMatrix(_hL_,_hM_)
|
||
{return star(cst_feColorMatrix,_hL_,_hM_)}
|
||
function feComponentTransfer(_hJ_,_hK_)
|
||
{return star(cst_feComponentTransfer,_hJ_,_hK_)}
|
||
function feFuncA(_hH_,_hI_){return star(cst_feFuncA,_hH_,_hI_)}
|
||
function feFuncG(_hF_,_hG_){return star(cst_feFuncG,_hF_,_hG_)}
|
||
function feFuncB(_hD_,_hE_){return star(cst_feFuncB,_hD_,_hE_)}
|
||
function feFuncR(_hB_,_hC_){return star(cst_feFuncR,_hB_,_hC_)}
|
||
function feComposite(_hz_,_hA_){return star(cst_feComposite,_hz_,_hA_)}
|
||
function feConvolveMatrix(_hx_,_hy_)
|
||
{return star(cst_feConvolveMatrix,_hx_,_hy_)}
|
||
function feDiffuseLighting(_hv_,_hw_)
|
||
{return star(cst_feDiffuseLighting,_hv_,_hw_)}
|
||
function feDisplacementMap(_ht_,_hu_)
|
||
{return star(cst_feDisplacementMap,_ht_,_hu_)}
|
||
function feFlood(_hr_,_hs_){return star(cst_feFlood,_hr_,_hs_)}
|
||
function feGaussianBlur(_hp_,_hq_)
|
||
{return star(cst_feGaussianBlur,_hp_,_hq_)}
|
||
function feImage(_hn_,_ho_){return star(cst_feImage,_hn_,_ho_)}
|
||
function feMerge(_hl_,_hm_){return star(cst_feMerge,_hl_,_hm_)}
|
||
function feMorphology(_hj_,_hk_)
|
||
{return star(cst_feMorphology,_hj_,_hk_)}
|
||
function feOffset(_hh_,_hi_){return star(cst_feOffset,_hh_,_hi_)}
|
||
function feSpecularLighting(_hf_,_hg_)
|
||
{return star(cst_feSpecularLighting,_hf_,_hg_)}
|
||
function feTile(_hd_,_he_){return star(cst_feTile,_hd_,_he_)}
|
||
function feTurbulence(_hb_,_hc_)
|
||
{return star(cst_feTurbulence,_hb_,_hc_)}
|
||
function cursor(_g$_,_ha_){return star(cst_cursor,_g$_,_ha_)}
|
||
function a(_g9_,_g__){return star(cst_a,_g9_,_g__)}
|
||
function view(_g7_,_g8_){return star(cst_view,_g7_,_g8_)}
|
||
function script(_g5_,_g6_){return unary(cst_script,_g5_,_g6_)}
|
||
function animation(_g3_,_g4_){return star(cst_animate,_g3_,_g4_)}
|
||
function set(_g1_,_g2_){return star(cst_set,_g1_,_g2_)}
|
||
function animateMotion(_gZ_,_g0_)
|
||
{return star(cst_animateMotion,_gZ_,_g0_)}
|
||
function mpath(_gX_,_gY_){return star(cst_mpath,_gX_,_gY_)}
|
||
function animateColor(_gV_,_gW_)
|
||
{return star(cst_animateColor,_gV_,_gW_)}
|
||
function animateTransform(_gT_,_gU_)
|
||
{return star(cst_animateTransform,_gT_,_gU_)}
|
||
function font(_gR_,_gS_){return star(cst_font,_gR_,_gS_)}
|
||
function glyph(_gP_,_gQ_){return star(cst_glyph,_gP_,_gQ_)}
|
||
function missing_glyph(_gN_,_gO_)
|
||
{return star(cst_missing_glyph,_gN_,_gO_)}
|
||
function hkern(_gL_,_gM_){return nullary(cst_hkern,_gL_,_gM_)}
|
||
function vkern(_gJ_,_gK_){return nullary(cst_vkern,_gJ_,_gK_)}
|
||
function font_face(_gH_,_gI_){return nullary(cst_font_face,_gH_,_gI_)}
|
||
function font_face_src(_gF_,_gG_)
|
||
{return star(cst_font_face_src,_gF_,_gG_)}
|
||
function font_face_uri(_gD_,_gE_)
|
||
{return star(cst_font_face_uri,_gD_,_gE_)}
|
||
function font_face_format(_gB_,_gC_)
|
||
{return nullary(cst_font_face_uri$0,_gB_,_gC_)}
|
||
function font_face_name(_gz_,_gA_)
|
||
{return nullary(cst_font_face_name,_gz_,_gA_)}
|
||
function doc_toelt(x){return x}
|
||
var I=_a_(Xml);
|
||
function of_seq(s){return caml_call1(I[1],s)}
|
||
function data(s){return caml_call1(Xml[18],s)}
|
||
function leaf(tag,a,param){return caml_call2(Xml[20],a,tag)}
|
||
function node(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)}
|
||
function coerce_elt(x){return x}
|
||
var float_attrib=Xml[4],int_attrib=Xml[5],string_attrib=Xml[6];
|
||
function uri_attrib(a,s){return caml_call2(Xml[13],a,s)}
|
||
var
|
||
space_sep_attrib=Xml[7],
|
||
comma_sep_attrib=Xml[8],
|
||
Unsafe=
|
||
[0,
|
||
data,
|
||
leaf,
|
||
node,
|
||
coerce_elt,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
uri_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib];
|
||
return [0,
|
||
Xml,
|
||
Info,
|
||
_fk_,
|
||
_fl_,
|
||
tot,
|
||
totl,
|
||
toelt,
|
||
toeltl,
|
||
to_attrib,
|
||
nullary,
|
||
unary,
|
||
star,
|
||
to_xmlattribs,
|
||
_fm_,
|
||
_fn_,
|
||
_fo_,
|
||
_fp_,
|
||
_fq_,
|
||
user_attrib,
|
||
_fm_,
|
||
_fr_,
|
||
metadata,
|
||
foreignObject,
|
||
pcdata,
|
||
pcdata,
|
||
a_version,
|
||
a_baseProfile,
|
||
a_x,
|
||
a_y,
|
||
a_width,
|
||
a_height,
|
||
a_preserveAspectRatio,
|
||
a_contentScriptType,
|
||
a_contentStyleType,
|
||
a_zoomAndPan,
|
||
a_href,
|
||
a_xlink_href,
|
||
a_requiredFeatures,
|
||
a_requiredExtensions,
|
||
a_systemLanguage,
|
||
a_externalRessourcesRequired,
|
||
a_id,
|
||
a_user_data,
|
||
a_xml_base,
|
||
a_xml_lang,
|
||
a_xml_space,
|
||
a_type,
|
||
a_media,
|
||
a_xlink_title,
|
||
a_class,
|
||
a_style,
|
||
a_transform,
|
||
a_viewBox,
|
||
a_d,
|
||
a_pathLength,
|
||
a_rx,
|
||
a_ry,
|
||
a_cx,
|
||
a_cy,
|
||
a_r,
|
||
a_x1,
|
||
a_y1,
|
||
a_x2,
|
||
a_y2,
|
||
a_points,
|
||
a_x_list,
|
||
a_y_list,
|
||
a_dx,
|
||
a_dy,
|
||
a_dx_list,
|
||
a_dy_list,
|
||
a_lengthAdjust,
|
||
a_textLength,
|
||
a_text_anchor,
|
||
a_text_decoration,
|
||
a_text_rendering,
|
||
a_rotate,
|
||
a_startOffset,
|
||
a_method,
|
||
a_spacing,
|
||
a_glyphRef,
|
||
a_format,
|
||
a_markerUnits,
|
||
a_refX,
|
||
a_refY,
|
||
a_markerWidth,
|
||
a_markerHeight,
|
||
a_orient,
|
||
a_local,
|
||
a_rendering_intent,
|
||
a_gradientUnits,
|
||
a_gradientTransform,
|
||
a_spreadMethod,
|
||
a_fx,
|
||
a_fy,
|
||
a_offset,
|
||
a_patternUnits,
|
||
a_patternContentUnits,
|
||
a_patternTransform,
|
||
a_clipPathUnits,
|
||
a_maskUnits,
|
||
a_maskContentUnits,
|
||
a_primitiveUnits,
|
||
a_filterRes,
|
||
a_result,
|
||
a_in,
|
||
a_in2,
|
||
a_azimuth,
|
||
a_elevation,
|
||
a_pointsAtX,
|
||
a_pointsAtY,
|
||
a_pointsAtZ,
|
||
a_specularExponent,
|
||
a_specularConstant,
|
||
a_limitingConeAngle,
|
||
a_mode,
|
||
a_feColorMatrix_type,
|
||
a_values,
|
||
a_transfer_type,
|
||
a_tableValues,
|
||
a_intercept,
|
||
a_amplitude,
|
||
a_exponent,
|
||
a_transfer_offset,
|
||
a_feComposite_operator,
|
||
a_k1,
|
||
a_k2,
|
||
a_k3,
|
||
a_k4,
|
||
a_order,
|
||
a_kernelMatrix,
|
||
a_divisor,
|
||
a_bias,
|
||
a_kernelUnitLength,
|
||
a_targetX,
|
||
a_targetY,
|
||
a_edgeMode,
|
||
a_preserveAlpha,
|
||
a_surfaceScale,
|
||
a_diffuseConstant,
|
||
a_scale,
|
||
a_xChannelSelector,
|
||
a_yChannelSelector,
|
||
a_stdDeviation,
|
||
a_feMorphology_operator,
|
||
a_radius,
|
||
a_baseFrenquency,
|
||
a_numOctaves,
|
||
a_seed,
|
||
a_stitchTiles,
|
||
a_feTurbulence_type,
|
||
a_xlink_show,
|
||
a_xlink_actuate,
|
||
a_target,
|
||
a_viewTarget,
|
||
a_attributeName,
|
||
a_attributeType,
|
||
a_begin,
|
||
a_dur,
|
||
a_min,
|
||
a_max,
|
||
a_restart,
|
||
a_repeatCount,
|
||
a_repeatDur,
|
||
a_fill,
|
||
a_animation_fill,
|
||
a_calcMode,
|
||
a_animation_values,
|
||
a_keyTimes,
|
||
a_keySplines,
|
||
a_from,
|
||
a_to,
|
||
a_by,
|
||
a_additive,
|
||
a_accumulate,
|
||
a_keyPoints,
|
||
a_path,
|
||
a_animateTransform_type,
|
||
a_horiz_origin_x,
|
||
a_horiz_origin_y,
|
||
a_horiz_adv_x,
|
||
a_vert_origin_x,
|
||
a_vert_origin_y,
|
||
a_vert_adv_y,
|
||
a_unicode,
|
||
a_glyph_name,
|
||
a_orientation,
|
||
a_arabic_form,
|
||
a_lang,
|
||
a_u1,
|
||
a_u2,
|
||
a_g1,
|
||
a_g2,
|
||
a_k,
|
||
a_font_family,
|
||
a_font_style,
|
||
a_font_variant,
|
||
a_font_weight,
|
||
a_font_stretch,
|
||
a_font_size,
|
||
a_unicode_range,
|
||
a_units_per_em,
|
||
a_stemv,
|
||
a_stemh,
|
||
a_slope,
|
||
a_cap_height,
|
||
a_x_height,
|
||
a_accent_height,
|
||
a_ascent,
|
||
a_widths,
|
||
a_bbox,
|
||
a_ideographic,
|
||
a_alphabetic,
|
||
a_mathematical,
|
||
a_hanging,
|
||
a_videographic,
|
||
a_v_alphabetic,
|
||
a_v_mathematical,
|
||
a_v_hanging,
|
||
a_underline_position,
|
||
a_underline_thickness,
|
||
a_strikethrough_position,
|
||
a_strikethrough_thickness,
|
||
a_overline_position,
|
||
a_overline_thickness,
|
||
a_string,
|
||
a_name,
|
||
a_alignment_baseline,
|
||
a_dominant_baseline,
|
||
a_onabort,
|
||
a_onactivate,
|
||
a_onbegin,
|
||
a_onend,
|
||
a_onerror,
|
||
a_onfocusin,
|
||
a_onfocusout,
|
||
a_onload,
|
||
a_onrepeat,
|
||
a_onresize,
|
||
a_onscroll,
|
||
a_onunload,
|
||
a_onzoom,
|
||
a_onclick,
|
||
a_onmousedown,
|
||
a_onmouseup,
|
||
a_onmouseover,
|
||
a_onmouseout,
|
||
a_onmousemove,
|
||
a_ontouchstart,
|
||
a_ontouchend,
|
||
a_ontouchmove,
|
||
a_ontouchcancel,
|
||
a_stop_color,
|
||
a_stop_opacity,
|
||
a_stroke,
|
||
a_stroke_width,
|
||
a_stroke_linecap,
|
||
a_stroke_linejoin,
|
||
a_stroke_miterlimit,
|
||
a_stroke_dasharray,
|
||
a_stroke_dashoffset,
|
||
a_stroke_opacity,
|
||
svg,
|
||
g,
|
||
defs,
|
||
desc,
|
||
title,
|
||
symbol,
|
||
use,
|
||
image,
|
||
switch$0,
|
||
style,
|
||
path,
|
||
rect,
|
||
circle,
|
||
ellipse,
|
||
line,
|
||
polyline,
|
||
polygon,
|
||
text,
|
||
tspan,
|
||
tref,
|
||
textPath,
|
||
altGlyph,
|
||
altGlyphDef,
|
||
altGlyphItem,
|
||
glyphRef,
|
||
marker,
|
||
color_profile,
|
||
linearGradient,
|
||
radialGradient,
|
||
stop,
|
||
pattern,
|
||
clipPath,
|
||
filter,
|
||
feDistantLight,
|
||
fePointLight,
|
||
feSpotLight,
|
||
feBlend,
|
||
feColorMatrix,
|
||
feComponentTransfer,
|
||
feFuncA,
|
||
feFuncG,
|
||
feFuncB,
|
||
feFuncR,
|
||
feComposite,
|
||
feConvolveMatrix,
|
||
feDiffuseLighting,
|
||
feDisplacementMap,
|
||
feFlood,
|
||
feGaussianBlur,
|
||
feImage,
|
||
feMerge,
|
||
feMorphology,
|
||
feOffset,
|
||
feSpecularLighting,
|
||
feTile,
|
||
feTurbulence,
|
||
cursor,
|
||
a,
|
||
view,
|
||
script,
|
||
animation,
|
||
set,
|
||
animateMotion,
|
||
mpath,
|
||
animateColor,
|
||
animateTransform,
|
||
font,
|
||
glyph,
|
||
missing_glyph,
|
||
hkern,
|
||
vkern,
|
||
font_face,
|
||
font_face_src,
|
||
font_face_uri,
|
||
font_face_format,
|
||
font_face_name,
|
||
doc_toelt,
|
||
I,
|
||
of_seq,
|
||
Unsafe]}
|
||
function Wrapped_functions(Xml)
|
||
{function string_of_alignment_baseline(param)
|
||
{return -72987685 <= param
|
||
?354434192 <= param
|
||
?881373037 <= param
|
||
?1018879136 <= param?cst_after_edge:cst_alphabetic$0
|
||
:726666127 <= param?cst_auto:cst_hanging$0
|
||
:15943541 === param
|
||
?cst_middle
|
||
:218255880 <= param?cst_mathematical$0:cst_inherit
|
||
:-840627829 <= param
|
||
?-415175851 <= param
|
||
?-354838363 <= param?cst_baseline:cst_central
|
||
:-693588957 <= param?cst_ideographic$0:cst_text_before_edge
|
||
:-863864035 <= param?cst_before_edge:cst_text_after_edge}
|
||
function string_of_big_variant(param)
|
||
{return 3350435 <= param
|
||
?476616093 <= param
|
||
?744337004 <= param
|
||
?914009117 <= param
|
||
?970483178 <= param
|
||
?1040349136 <= param
|
||
?1071251601 <= param?cst_stitch:cst_onRequest
|
||
:990972795 <= param?cst_repeat:cst_wrap
|
||
:958206052 <= param?cst_remove:cst_reflect
|
||
:870530776 <= param
|
||
?884917925 <= param
|
||
?889668530 <= param?cst_noStitch:cst$35
|
||
:881966452 <= param?cst_over:cst_none$0
|
||
:861714216 <= param?cst_medial:cst_never
|
||
:568588039 <= param
|
||
?716799946 <= param
|
||
?726666127 <= param
|
||
?737755699 <= param?cst_butt:cst_auto$0
|
||
:726615284 <= param?cst_atop:cst_arithmetic
|
||
:698610924 <= param?cst_underline:cst_gamma
|
||
:512807795 <= param
|
||
?518168424 <= param
|
||
?557106693 <= param?cst_linear:cst_overline
|
||
:517347077 <= param?cst_onLoad:cst_turbulence
|
||
:504440814 <= param?cst_table:cst_geometricPrecision
|
||
:163178525 <= param
|
||
?316735838 <= param
|
||
?389604418 <= param
|
||
?463106021 <= param
|
||
?466749770 <= param?cst_optimizeSpeed:cst_miter
|
||
:418396260 <= param?cst_initial:cst_start
|
||
:384893183 <= param?cst_whenNotActive:cst_identity
|
||
:201080426 <= param
|
||
?289998318 <= param
|
||
?289998319 <= param?cst_skewY:cst_skewX
|
||
:226915517 <= param?cst_square:cst_scale$0
|
||
:172069535 <= param?cst_exact:cst_perceptual
|
||
:4393399 <= param
|
||
?9660462 <= param
|
||
?106228547 <= param
|
||
?118574553 <= param?cst_discrete:cst_erode
|
||
:15943541 <= param?cst_middle$0:cst_round
|
||
:4401019 <= param?cst_xor:cst_XML
|
||
:3901504 <= param
|
||
?4000051 <= param
|
||
?4153707 <= param?cst_sum:cst_pad
|
||
:3954798 <= param?cst_out:cst_new
|
||
:3455931 <= param?cst_end:cst_CSS
|
||
:-453122489 <= param
|
||
?-72987685 <= param
|
||
?66 <= param
|
||
?72 <= param
|
||
?86 <= param
|
||
?16389 <= param?cst_in$1:cst_v
|
||
:82 <= param?cst_r$0:cst_h
|
||
:71 <= param?cst_g$0:cst_b
|
||
:-68046964 <= param
|
||
?-4932997 <= param
|
||
?65 <= param?cst_a$0:cst_rotate$0
|
||
:-22441528 <= param?cst_disable:cst_screen
|
||
:-72678338 <= param?cst_absolute_colorimetric:cst_inherit$0
|
||
:-262362527 <= param
|
||
?-197222844 <= param
|
||
?-115006565 <= param
|
||
?-76840209 <= param?cst_always:cst_spacingAndGlyphs
|
||
:-126259180 <= param?cst_replace:cst_multiply
|
||
:-197983439 <= param?cst_spline:cst_matrix
|
||
:-384499551 <= param
|
||
?-318472885 <= param
|
||
?-313337870 <= param?cst_saturation:cst_dilate
|
||
:-346900690 <= param?cst_translate:cst_default
|
||
:-415993185 <= param?cst_lighten:cst_normal
|
||
:-839430911 <= param
|
||
?-672592881 <= param
|
||
?-552838301 <= param
|
||
?-505547199 <= param
|
||
?-474415497 <= param?cst_freeze:cst_magnify
|
||
:-543144685 <= param?cst_hueRotate:cst_spacing$0
|
||
:-621842423 <= param?cst_fractalNoise:cst_saturate
|
||
:-797470191 <= param
|
||
?-699926424 <= param
|
||
?-689066995 <= param
|
||
?cst_userSpaceOnUse
|
||
:cst_objectBoundingBox
|
||
:-707876225 <= param?cst_darken:cst_paced
|
||
:-824137927 <= param?cst_isolated:cst_optimizeLegibility
|
||
:-951087346 <= param
|
||
?-912466532 <= param
|
||
?-851306022 <= param
|
||
?-851300629 <= param?cst_luminanceToAlpha:cst_line_through
|
||
:-912009552 <= param?cst_other:cst_terminal
|
||
:-937074372 <= param?cst_blink:cst_stroke_width$0
|
||
:-1044642615 === param
|
||
?cst_relative_colorimetric
|
||
:-1014056864 <= param
|
||
?-1012636187 <= param?cst_stretch:cst_bevel
|
||
:-1024851605 <= param?cst_duplicate:cst_preserve}
|
||
var _eX_=Stdlib[30];
|
||
function _eY_(param)
|
||
{var b=param[2],a=param[1];return caml_call3(Stdlib_printf[4],_S_,a,b)}
|
||
var _eZ_=0;
|
||
function string_of_coords(_fj_){return list(_eZ_,_eY_,_fj_)}
|
||
function string_of_dominant_baseline(param)
|
||
{return -72987685 <= param
|
||
?354434192 <= param
|
||
?881373037 <= param
|
||
?945233102 <= param?cst_nochange:cst_alphabetic$1
|
||
:726666127 <= param?cst_auto$1:cst_hanging$1
|
||
:15943541 === param
|
||
?cst_middle$1
|
||
:218255880 <= param?cst_mathematical$1:cst_inherit$1
|
||
:-840627829 <= param
|
||
?-504734109 <= param
|
||
?-415175851 <= param?cst_central$0:cst_usescript
|
||
:-693588957 <= param?cst_ideographic$1:cst_textbeforeedge
|
||
:-880506735 <= param?cst_resetsize:cst_textafteredge}
|
||
function string_of_in_value(param)
|
||
{if(typeof param === "number")
|
||
return 198492909 <= param
|
||
?885982307 <= param
|
||
?976982182 <= param?cst_strokePaint:cst_sourceAlpha
|
||
:768130555 <= param?cst_fillPaint:cst_sourceGraphic
|
||
:-522189715 <= param?cst_backgroundImage:cst_backgroundAlpha;
|
||
var svg=param[2];
|
||
return svg}
|
||
var _e0_=Stdlib[33],_e1_=0;
|
||
function string_of_lengths(_fi_)
|
||
{return list(_e1_,string_of_length,_fi_)}
|
||
function string_of_percentage(x)
|
||
{var _fh_=string_of_number(x);
|
||
return caml_call2(Stdlib[28],_fh_,cst$36)}
|
||
function string_of_fourfloats(param)
|
||
{var
|
||
d=param[4],
|
||
c=param[3],
|
||
b=param[2],
|
||
a=param[1],
|
||
_fd_=string_of_number(d),
|
||
_fe_=string_of_number(c),
|
||
_ff_=string_of_number(b),
|
||
_fg_=string_of_number(a);
|
||
return caml_call5(Stdlib_printf[4],_T_,_fg_,_ff_,_fe_,_fd_)}
|
||
function string_of_number_optional_numb(param)
|
||
{var _fb_=param[2],_fc_=param[1];
|
||
if(_fb_){var y=_fb_[1];return caml_call3(Stdlib_printf[4],_U_,_fc_,y)}
|
||
return caml_call2(Stdlib_printf[4],_V_,_fc_)}
|
||
var _e2_=0;
|
||
function string_of_numbers(_fa_)
|
||
{return list(_e2_,string_of_number,_fa_)}
|
||
function string_of_numbers_semicolon(_e$_)
|
||
{return list(_W_,string_of_number,_e$_)}
|
||
function string_of_offset(param)
|
||
{if(-488794310 <= param[1])
|
||
{var x=param[2];return string_of_percentage(x)}
|
||
var x$0=param[2];
|
||
return string_of_number(x$0)}
|
||
function string_of_orient(param)
|
||
{if(param){var svg=param[1];return string_of_angle(svg)}
|
||
return cst_auto$2}
|
||
function string_of_strokedasharray(l)
|
||
{return l?list(0,string_of_length,l):cst_none$1}
|
||
function string_of_transform(param)
|
||
{var _e4_=param[1];
|
||
if(-4932997 <= _e4_)
|
||
{if(289998318 <= _e4_)
|
||
{if(289998319 <= _e4_)
|
||
{var angle=param[2],_e5_=string_of_angle(angle);
|
||
return caml_call2(Stdlib_printf[4],_X_,_e5_)}
|
||
var angle$0=param[2],_e6_=string_of_angle(angle$0);
|
||
return caml_call2(Stdlib_printf[4],_Y_,_e6_)}
|
||
if(201080426 <= _e4_)
|
||
{var x=param[2],_e7_=string_of_number_optional_numb(x);
|
||
return caml_call2(Stdlib_printf[4],_Z_,_e7_)}
|
||
var match=param[2],x$0=match[2],angle$1=match[1];
|
||
if(x$0)
|
||
var
|
||
match$0=x$0[1],
|
||
y=match$0[2],
|
||
x$1=match$0[1],
|
||
_e8_=caml_call3(Stdlib_printf[4],___,x$1,y);
|
||
else
|
||
var _e8_=cst$37;
|
||
var _e9_=string_of_angle(angle$1);
|
||
return caml_call3(Stdlib_printf[4],_$_,_e9_,_e8_)}
|
||
if(-262362527 <= _e4_)
|
||
{var
|
||
match$1=param[2],
|
||
f=match$1[6],
|
||
e=match$1[5],
|
||
d=match$1[4],
|
||
c=match$1[3],
|
||
b=match$1[2],
|
||
a=match$1[1];
|
||
return caml_call7(Stdlib_printf[4],_aa_,a,b,c,d,e,f)}
|
||
var x$2=param[2],_e__=string_of_number_optional_numb(x$2);
|
||
return caml_call2(Stdlib_printf[4],_ab_,_e__)}
|
||
function string_of_transforms(l)
|
||
{var _e3_=caml_call2(Stdlib_list[17],string_of_transform,l);
|
||
return caml_call2(Stdlib_string[7],cst$38,_e3_)}
|
||
return [0,
|
||
Xml,
|
||
string_of_alignment_baseline,
|
||
string_of_big_variant,
|
||
_eX_,
|
||
string_of_coords,
|
||
string_of_dominant_baseline,
|
||
string_of_in_value,
|
||
_e0_,
|
||
string_of_length,
|
||
string_of_lengths,
|
||
string_of_number,
|
||
string_of_percentage,
|
||
string_of_fourfloats,
|
||
string_of_number_optional_numb,
|
||
string_of_numbers,
|
||
string_of_numbers_semicolon,
|
||
string_of_offset,
|
||
string_of_orient,
|
||
string_of_paint,
|
||
string_of_strokedasharray,
|
||
string_of_transform,
|
||
string_of_transforms]}
|
||
function _ac_(_eT_,_eS_)
|
||
{var
|
||
_eU_=Make_with_wrapped_functions(_eT_,_eS_),
|
||
_eV_=_eU_[342],
|
||
_eW_=_eU_[2];
|
||
return [0,
|
||
_eU_[1],
|
||
[0,_eW_[1],_eW_[2],_eW_[4],_eW_[5],_eW_[6],_eW_[7],_eW_[3]],
|
||
_eU_[3],
|
||
_eU_[4],
|
||
_eU_[26],
|
||
_eU_[27],
|
||
_eU_[28],
|
||
_eU_[29],
|
||
_eU_[30],
|
||
_eU_[31],
|
||
_eU_[32],
|
||
_eU_[33],
|
||
_eU_[34],
|
||
_eU_[35],
|
||
_eU_[36],
|
||
_eU_[37],
|
||
_eU_[38],
|
||
_eU_[39],
|
||
_eU_[40],
|
||
_eU_[41],
|
||
_eU_[42],
|
||
_eU_[43],
|
||
_eU_[44],
|
||
_eU_[45],
|
||
_eU_[46],
|
||
_eU_[47],
|
||
_eU_[48],
|
||
_eU_[49],
|
||
_eU_[50],
|
||
_eU_[51],
|
||
_eU_[52],
|
||
_eU_[53],
|
||
_eU_[54],
|
||
_eU_[55],
|
||
_eU_[56],
|
||
_eU_[57],
|
||
_eU_[58],
|
||
_eU_[59],
|
||
_eU_[60],
|
||
_eU_[61],
|
||
_eU_[62],
|
||
_eU_[63],
|
||
_eU_[64],
|
||
_eU_[65],
|
||
_eU_[66],
|
||
_eU_[67],
|
||
_eU_[68],
|
||
_eU_[69],
|
||
_eU_[70],
|
||
_eU_[71],
|
||
_eU_[72],
|
||
_eU_[73],
|
||
_eU_[74],
|
||
_eU_[75],
|
||
_eU_[76],
|
||
_eU_[77],
|
||
_eU_[78],
|
||
_eU_[79],
|
||
_eU_[80],
|
||
_eU_[81],
|
||
_eU_[82],
|
||
_eU_[83],
|
||
_eU_[84],
|
||
_eU_[85],
|
||
_eU_[86],
|
||
_eU_[87],
|
||
_eU_[88],
|
||
_eU_[89],
|
||
_eU_[90],
|
||
_eU_[91],
|
||
_eU_[92],
|
||
_eU_[93],
|
||
_eU_[94],
|
||
_eU_[95],
|
||
_eU_[96],
|
||
_eU_[97],
|
||
_eU_[98],
|
||
_eU_[99],
|
||
_eU_[100],
|
||
_eU_[101],
|
||
_eU_[102],
|
||
_eU_[103],
|
||
_eU_[104],
|
||
_eU_[105],
|
||
_eU_[106],
|
||
_eU_[107],
|
||
_eU_[108],
|
||
_eU_[109],
|
||
_eU_[110],
|
||
_eU_[111],
|
||
_eU_[112],
|
||
_eU_[113],
|
||
_eU_[114],
|
||
_eU_[115],
|
||
_eU_[116],
|
||
_eU_[117],
|
||
_eU_[118],
|
||
_eU_[119],
|
||
_eU_[120],
|
||
_eU_[121],
|
||
_eU_[122],
|
||
_eU_[123],
|
||
_eU_[124],
|
||
_eU_[125],
|
||
_eU_[126],
|
||
_eU_[127],
|
||
_eU_[128],
|
||
_eU_[129],
|
||
_eU_[130],
|
||
_eU_[131],
|
||
_eU_[132],
|
||
_eU_[133],
|
||
_eU_[134],
|
||
_eU_[135],
|
||
_eU_[136],
|
||
_eU_[137],
|
||
_eU_[138],
|
||
_eU_[139],
|
||
_eU_[140],
|
||
_eU_[141],
|
||
_eU_[142],
|
||
_eU_[143],
|
||
_eU_[144],
|
||
_eU_[145],
|
||
_eU_[146],
|
||
_eU_[147],
|
||
_eU_[148],
|
||
_eU_[149],
|
||
_eU_[150],
|
||
_eU_[151],
|
||
_eU_[152],
|
||
_eU_[153],
|
||
_eU_[154],
|
||
_eU_[155],
|
||
_eU_[156],
|
||
_eU_[157],
|
||
_eU_[158],
|
||
_eU_[159],
|
||
_eU_[160],
|
||
_eU_[161],
|
||
_eU_[162],
|
||
_eU_[163],
|
||
_eU_[164],
|
||
_eU_[165],
|
||
_eU_[166],
|
||
_eU_[167],
|
||
_eU_[168],
|
||
_eU_[169],
|
||
_eU_[170],
|
||
_eU_[171],
|
||
_eU_[172],
|
||
_eU_[173],
|
||
_eU_[174],
|
||
_eU_[175],
|
||
_eU_[176],
|
||
_eU_[177],
|
||
_eU_[178],
|
||
_eU_[179],
|
||
_eU_[180],
|
||
_eU_[181],
|
||
_eU_[182],
|
||
_eU_[183],
|
||
_eU_[184],
|
||
_eU_[185],
|
||
_eU_[186],
|
||
_eU_[187],
|
||
_eU_[188],
|
||
_eU_[189],
|
||
_eU_[190],
|
||
_eU_[191],
|
||
_eU_[192],
|
||
_eU_[193],
|
||
_eU_[194],
|
||
_eU_[195],
|
||
_eU_[196],
|
||
_eU_[197],
|
||
_eU_[198],
|
||
_eU_[199],
|
||
_eU_[200],
|
||
_eU_[201],
|
||
_eU_[202],
|
||
_eU_[203],
|
||
_eU_[204],
|
||
_eU_[205],
|
||
_eU_[206],
|
||
_eU_[207],
|
||
_eU_[208],
|
||
_eU_[209],
|
||
_eU_[210],
|
||
_eU_[211],
|
||
_eU_[212],
|
||
_eU_[213],
|
||
_eU_[214],
|
||
_eU_[215],
|
||
_eU_[216],
|
||
_eU_[217],
|
||
_eU_[218],
|
||
_eU_[219],
|
||
_eU_[220],
|
||
_eU_[221],
|
||
_eU_[222],
|
||
_eU_[223],
|
||
_eU_[224],
|
||
_eU_[225],
|
||
_eU_[226],
|
||
_eU_[227],
|
||
_eU_[228],
|
||
_eU_[229],
|
||
_eU_[253],
|
||
_eU_[254],
|
||
_eU_[255],
|
||
_eU_[256],
|
||
_eU_[257],
|
||
_eU_[258],
|
||
_eU_[259],
|
||
_eU_[260],
|
||
_eU_[261],
|
||
_eU_[262],
|
||
_eU_[230],
|
||
_eU_[231],
|
||
_eU_[232],
|
||
_eU_[233],
|
||
_eU_[234],
|
||
_eU_[235],
|
||
_eU_[236],
|
||
_eU_[237],
|
||
_eU_[238],
|
||
_eU_[239],
|
||
_eU_[240],
|
||
_eU_[241],
|
||
_eU_[242],
|
||
_eU_[243],
|
||
_eU_[244],
|
||
_eU_[245],
|
||
_eU_[246],
|
||
_eU_[247],
|
||
_eU_[248],
|
||
_eU_[249],
|
||
_eU_[250],
|
||
_eU_[251],
|
||
_eU_[252],
|
||
_eU_[24],
|
||
_eU_[263],
|
||
_eU_[264],
|
||
_eU_[265],
|
||
_eU_[266],
|
||
_eU_[267],
|
||
_eU_[268],
|
||
_eU_[269],
|
||
_eU_[270],
|
||
_eU_[271],
|
||
_eU_[272],
|
||
_eU_[273],
|
||
_eU_[274],
|
||
_eU_[275],
|
||
_eU_[276],
|
||
_eU_[277],
|
||
_eU_[278],
|
||
_eU_[279],
|
||
_eU_[280],
|
||
_eU_[281],
|
||
_eU_[282],
|
||
_eU_[283],
|
||
_eU_[284],
|
||
_eU_[285],
|
||
_eU_[286],
|
||
_eU_[287],
|
||
_eU_[288],
|
||
_eU_[289],
|
||
_eU_[290],
|
||
_eU_[291],
|
||
_eU_[292],
|
||
_eU_[293],
|
||
_eU_[294],
|
||
_eU_[295],
|
||
_eU_[296],
|
||
_eU_[297],
|
||
_eU_[298],
|
||
_eU_[299],
|
||
_eU_[300],
|
||
_eU_[301],
|
||
_eU_[302],
|
||
_eU_[303],
|
||
_eU_[304],
|
||
_eU_[305],
|
||
_eU_[306],
|
||
_eU_[307],
|
||
_eU_[308],
|
||
_eU_[309],
|
||
_eU_[310],
|
||
_eU_[311],
|
||
_eU_[312],
|
||
_eU_[313],
|
||
_eU_[314],
|
||
_eU_[315],
|
||
_eU_[316],
|
||
_eU_[317],
|
||
_eU_[318],
|
||
_eU_[319],
|
||
_eU_[320],
|
||
_eU_[321],
|
||
_eU_[322],
|
||
_eU_[323],
|
||
_eU_[324],
|
||
_eU_[325],
|
||
_eU_[326],
|
||
_eU_[327],
|
||
_eU_[328],
|
||
_eU_[329],
|
||
_eU_[330],
|
||
_eU_[331],
|
||
_eU_[332],
|
||
_eU_[333],
|
||
_eU_[334],
|
||
_eU_[335],
|
||
_eU_[336],
|
||
_eU_[337],
|
||
_eU_[338],
|
||
_eU_[22],
|
||
_eU_[23],
|
||
_eU_[25],
|
||
_eU_[341],
|
||
_eU_[5],
|
||
_eU_[6],
|
||
_eU_[7],
|
||
_eU_[8],
|
||
_eU_[339],
|
||
_eU_[13],
|
||
_eU_[9],
|
||
[0,
|
||
_eV_[1],
|
||
_eV_[3],
|
||
_eV_[2],
|
||
_eV_[4],
|
||
_eV_[7],
|
||
_eV_[5],
|
||
_eV_[6],
|
||
_eV_[8],
|
||
_eV_[9],
|
||
_eV_[10]]]}
|
||
function _ad_(_eQ_)
|
||
{var _eR_=Wrapped_functions(_eQ_);
|
||
return [0,
|
||
_eR_[1],
|
||
_eR_[2],
|
||
_eR_[4],
|
||
_eR_[3],
|
||
_eR_[5],
|
||
_eR_[6],
|
||
_eR_[13],
|
||
_eR_[7],
|
||
_eR_[8],
|
||
_eR_[9],
|
||
_eR_[10],
|
||
_eR_[11],
|
||
_eR_[14],
|
||
_eR_[15],
|
||
_eR_[16],
|
||
_eR_[17],
|
||
_eR_[18],
|
||
_eR_[19],
|
||
_eR_[20],
|
||
_eR_[21],
|
||
_eR_[22]]}
|
||
var
|
||
Svg_f=
|
||
[0,
|
||
function(_eM_)
|
||
{var
|
||
_eL_=Wrapped_functions(_eM_),
|
||
_eP_=
|
||
Make_with_wrapped_functions
|
||
(_eM_,
|
||
[0,
|
||
_eL_[1],
|
||
_eL_[2],
|
||
_eL_[4],
|
||
_eL_[3],
|
||
_eL_[5],
|
||
_eL_[6],
|
||
_eL_[13],
|
||
_eL_[7],
|
||
_eL_[8],
|
||
_eL_[9],
|
||
_eL_[10],
|
||
_eL_[11],
|
||
_eL_[14],
|
||
_eL_[15],
|
||
_eL_[16],
|
||
_eL_[17],
|
||
_eL_[18],
|
||
_eL_[19],
|
||
_eL_[20],
|
||
_eL_[21],
|
||
_eL_[22]]),
|
||
_eN_=_eP_[342],
|
||
_eO_=_eP_[2];
|
||
return [0,
|
||
_eP_[1],
|
||
[0,_eO_[1],_eO_[2],_eO_[4],_eO_[5],_eO_[6],_eO_[7],_eO_[3]],
|
||
_eP_[3],
|
||
_eP_[4],
|
||
_eP_[26],
|
||
_eP_[27],
|
||
_eP_[28],
|
||
_eP_[29],
|
||
_eP_[30],
|
||
_eP_[31],
|
||
_eP_[32],
|
||
_eP_[33],
|
||
_eP_[34],
|
||
_eP_[35],
|
||
_eP_[36],
|
||
_eP_[37],
|
||
_eP_[38],
|
||
_eP_[39],
|
||
_eP_[40],
|
||
_eP_[41],
|
||
_eP_[42],
|
||
_eP_[43],
|
||
_eP_[44],
|
||
_eP_[45],
|
||
_eP_[46],
|
||
_eP_[47],
|
||
_eP_[48],
|
||
_eP_[49],
|
||
_eP_[50],
|
||
_eP_[51],
|
||
_eP_[52],
|
||
_eP_[53],
|
||
_eP_[54],
|
||
_eP_[55],
|
||
_eP_[56],
|
||
_eP_[57],
|
||
_eP_[58],
|
||
_eP_[59],
|
||
_eP_[60],
|
||
_eP_[61],
|
||
_eP_[62],
|
||
_eP_[63],
|
||
_eP_[64],
|
||
_eP_[65],
|
||
_eP_[66],
|
||
_eP_[67],
|
||
_eP_[68],
|
||
_eP_[69],
|
||
_eP_[70],
|
||
_eP_[71],
|
||
_eP_[72],
|
||
_eP_[73],
|
||
_eP_[74],
|
||
_eP_[75],
|
||
_eP_[76],
|
||
_eP_[77],
|
||
_eP_[78],
|
||
_eP_[79],
|
||
_eP_[80],
|
||
_eP_[81],
|
||
_eP_[82],
|
||
_eP_[83],
|
||
_eP_[84],
|
||
_eP_[85],
|
||
_eP_[86],
|
||
_eP_[87],
|
||
_eP_[88],
|
||
_eP_[89],
|
||
_eP_[90],
|
||
_eP_[91],
|
||
_eP_[92],
|
||
_eP_[93],
|
||
_eP_[94],
|
||
_eP_[95],
|
||
_eP_[96],
|
||
_eP_[97],
|
||
_eP_[98],
|
||
_eP_[99],
|
||
_eP_[100],
|
||
_eP_[101],
|
||
_eP_[102],
|
||
_eP_[103],
|
||
_eP_[104],
|
||
_eP_[105],
|
||
_eP_[106],
|
||
_eP_[107],
|
||
_eP_[108],
|
||
_eP_[109],
|
||
_eP_[110],
|
||
_eP_[111],
|
||
_eP_[112],
|
||
_eP_[113],
|
||
_eP_[114],
|
||
_eP_[115],
|
||
_eP_[116],
|
||
_eP_[117],
|
||
_eP_[118],
|
||
_eP_[119],
|
||
_eP_[120],
|
||
_eP_[121],
|
||
_eP_[122],
|
||
_eP_[123],
|
||
_eP_[124],
|
||
_eP_[125],
|
||
_eP_[126],
|
||
_eP_[127],
|
||
_eP_[128],
|
||
_eP_[129],
|
||
_eP_[130],
|
||
_eP_[131],
|
||
_eP_[132],
|
||
_eP_[133],
|
||
_eP_[134],
|
||
_eP_[135],
|
||
_eP_[136],
|
||
_eP_[137],
|
||
_eP_[138],
|
||
_eP_[139],
|
||
_eP_[140],
|
||
_eP_[141],
|
||
_eP_[142],
|
||
_eP_[143],
|
||
_eP_[144],
|
||
_eP_[145],
|
||
_eP_[146],
|
||
_eP_[147],
|
||
_eP_[148],
|
||
_eP_[149],
|
||
_eP_[150],
|
||
_eP_[151],
|
||
_eP_[152],
|
||
_eP_[153],
|
||
_eP_[154],
|
||
_eP_[155],
|
||
_eP_[156],
|
||
_eP_[157],
|
||
_eP_[158],
|
||
_eP_[159],
|
||
_eP_[160],
|
||
_eP_[161],
|
||
_eP_[162],
|
||
_eP_[163],
|
||
_eP_[164],
|
||
_eP_[165],
|
||
_eP_[166],
|
||
_eP_[167],
|
||
_eP_[168],
|
||
_eP_[169],
|
||
_eP_[170],
|
||
_eP_[171],
|
||
_eP_[172],
|
||
_eP_[173],
|
||
_eP_[174],
|
||
_eP_[175],
|
||
_eP_[176],
|
||
_eP_[177],
|
||
_eP_[178],
|
||
_eP_[179],
|
||
_eP_[180],
|
||
_eP_[181],
|
||
_eP_[182],
|
||
_eP_[183],
|
||
_eP_[184],
|
||
_eP_[185],
|
||
_eP_[186],
|
||
_eP_[187],
|
||
_eP_[188],
|
||
_eP_[189],
|
||
_eP_[190],
|
||
_eP_[191],
|
||
_eP_[192],
|
||
_eP_[193],
|
||
_eP_[194],
|
||
_eP_[195],
|
||
_eP_[196],
|
||
_eP_[197],
|
||
_eP_[198],
|
||
_eP_[199],
|
||
_eP_[200],
|
||
_eP_[201],
|
||
_eP_[202],
|
||
_eP_[203],
|
||
_eP_[204],
|
||
_eP_[205],
|
||
_eP_[206],
|
||
_eP_[207],
|
||
_eP_[208],
|
||
_eP_[209],
|
||
_eP_[210],
|
||
_eP_[211],
|
||
_eP_[212],
|
||
_eP_[213],
|
||
_eP_[214],
|
||
_eP_[215],
|
||
_eP_[216],
|
||
_eP_[217],
|
||
_eP_[218],
|
||
_eP_[219],
|
||
_eP_[220],
|
||
_eP_[221],
|
||
_eP_[222],
|
||
_eP_[223],
|
||
_eP_[224],
|
||
_eP_[225],
|
||
_eP_[226],
|
||
_eP_[227],
|
||
_eP_[228],
|
||
_eP_[229],
|
||
_eP_[253],
|
||
_eP_[254],
|
||
_eP_[255],
|
||
_eP_[256],
|
||
_eP_[257],
|
||
_eP_[258],
|
||
_eP_[259],
|
||
_eP_[260],
|
||
_eP_[261],
|
||
_eP_[262],
|
||
_eP_[230],
|
||
_eP_[231],
|
||
_eP_[232],
|
||
_eP_[233],
|
||
_eP_[234],
|
||
_eP_[235],
|
||
_eP_[236],
|
||
_eP_[237],
|
||
_eP_[238],
|
||
_eP_[239],
|
||
_eP_[240],
|
||
_eP_[241],
|
||
_eP_[242],
|
||
_eP_[243],
|
||
_eP_[244],
|
||
_eP_[245],
|
||
_eP_[246],
|
||
_eP_[247],
|
||
_eP_[248],
|
||
_eP_[249],
|
||
_eP_[250],
|
||
_eP_[251],
|
||
_eP_[252],
|
||
_eP_[24],
|
||
_eP_[263],
|
||
_eP_[264],
|
||
_eP_[265],
|
||
_eP_[266],
|
||
_eP_[267],
|
||
_eP_[268],
|
||
_eP_[269],
|
||
_eP_[270],
|
||
_eP_[271],
|
||
_eP_[272],
|
||
_eP_[273],
|
||
_eP_[274],
|
||
_eP_[275],
|
||
_eP_[276],
|
||
_eP_[277],
|
||
_eP_[278],
|
||
_eP_[279],
|
||
_eP_[280],
|
||
_eP_[281],
|
||
_eP_[282],
|
||
_eP_[283],
|
||
_eP_[284],
|
||
_eP_[285],
|
||
_eP_[286],
|
||
_eP_[287],
|
||
_eP_[288],
|
||
_eP_[289],
|
||
_eP_[290],
|
||
_eP_[291],
|
||
_eP_[292],
|
||
_eP_[293],
|
||
_eP_[294],
|
||
_eP_[295],
|
||
_eP_[296],
|
||
_eP_[297],
|
||
_eP_[298],
|
||
_eP_[299],
|
||
_eP_[300],
|
||
_eP_[301],
|
||
_eP_[302],
|
||
_eP_[303],
|
||
_eP_[304],
|
||
_eP_[305],
|
||
_eP_[306],
|
||
_eP_[307],
|
||
_eP_[308],
|
||
_eP_[309],
|
||
_eP_[310],
|
||
_eP_[311],
|
||
_eP_[312],
|
||
_eP_[313],
|
||
_eP_[314],
|
||
_eP_[315],
|
||
_eP_[316],
|
||
_eP_[317],
|
||
_eP_[318],
|
||
_eP_[319],
|
||
_eP_[320],
|
||
_eP_[321],
|
||
_eP_[322],
|
||
_eP_[323],
|
||
_eP_[324],
|
||
_eP_[325],
|
||
_eP_[326],
|
||
_eP_[327],
|
||
_eP_[328],
|
||
_eP_[329],
|
||
_eP_[330],
|
||
_eP_[331],
|
||
_eP_[332],
|
||
_eP_[333],
|
||
_eP_[334],
|
||
_eP_[335],
|
||
_eP_[336],
|
||
_eP_[337],
|
||
_eP_[338],
|
||
_eP_[22],
|
||
_eP_[23],
|
||
_eP_[25],
|
||
_eP_[341],
|
||
_eP_[5],
|
||
_eP_[6],
|
||
_eP_[7],
|
||
_eP_[8],
|
||
_eP_[339],
|
||
_eP_[13],
|
||
_eP_[9],
|
||
[0,
|
||
_eN_[1],
|
||
_eN_[3],
|
||
_eN_[2],
|
||
_eN_[4],
|
||
_eN_[7],
|
||
_eN_[5],
|
||
_eN_[6],
|
||
_eN_[8],
|
||
_eN_[9],
|
||
_eN_[10]]]},
|
||
_ad_,
|
||
_ac_];
|
||
caml_register_global(1097,Svg_f,"Svg_f");
|
||
function Make_with_wrapped_functions$0(Xml,C,Svg)
|
||
{var
|
||
doctype=compose_doctype(cst_html,0),
|
||
Info=
|
||
[0,
|
||
content_type$0,
|
||
alternative_content_types,
|
||
version$0,
|
||
standard$0,
|
||
namespace$0,
|
||
doctype,
|
||
emptytags],
|
||
_aH_=Xml[2],
|
||
_aI_=Xml[3];
|
||
function to_xmlattribs(x){return x}
|
||
function to_attrib(x){return x}
|
||
var _aJ_=Xml[4],_aK_=Xml[5],_aL_=Xml[6];
|
||
function uri_attrib(a,s){return caml_call2(Xml[13],a,s)}
|
||
var _aM_=Xml[7],_aN_=Xml[8];
|
||
function user_attrib(f,name,v)
|
||
{var _eK_=caml_call2(Xml[1][2],f,v);
|
||
return caml_call2(Xml[6],name,_eK_)}
|
||
var _aO_=C[3];
|
||
function bool_attrib(_eI_,_eJ_){return user_attrib(_aO_,_eI_,_eJ_)}
|
||
function constant_attrib(a,param)
|
||
{return caml_call2(_aL_,a,caml_call1(Xml[1][1],a))}
|
||
function linktypes_attrib(name,x){return user_attrib(C[8],name,x)}
|
||
function mediadesc_attrib(name,x){return user_attrib(C[9],name,x)}
|
||
function srcset_attrib(name,x){return user_attrib(C[14],name,x)}
|
||
var a_class=caml_call1(_aM_,cst_class$0),a_id=caml_call1(_aL_,cst_id$0);
|
||
function a_user_data(name)
|
||
{return caml_call1(_aL_,caml_call2(Stdlib[28],cst_data$0,name))}
|
||
var
|
||
a_title=caml_call1(_aL_,cst_title$0),
|
||
a_xml_lang=caml_call1(_aL_,cst_xml_lang$0),
|
||
a_lang=caml_call1(_aL_,cst_lang$0),
|
||
a_style=caml_call1(_aL_,cst_style$1),
|
||
a_property=caml_call1(_aL_,cst_property),
|
||
a_onabort=caml_call1(Xml[9],cst_onabort$0),
|
||
a_onafterprint=caml_call1(Xml[9],cst_onafterprint),
|
||
a_onbeforeprint=caml_call1(Xml[9],cst_onbeforeprint),
|
||
a_onbeforeunload=caml_call1(Xml[9],cst_onbeforeunload),
|
||
a_onblur=caml_call1(Xml[9],cst_onblur),
|
||
a_oncanplay=caml_call1(Xml[9],cst_oncanplay),
|
||
a_oncanplaythrough=caml_call1(Xml[9],cst_oncanplaythrough),
|
||
a_onchange=caml_call1(Xml[9],cst_onchange),
|
||
a_ondurationchange=caml_call1(Xml[9],cst_ondurationchange),
|
||
a_onemptied=caml_call1(Xml[9],cst_onemptied),
|
||
a_onended=caml_call1(Xml[9],cst_onended),
|
||
a_onerror=caml_call1(Xml[9],cst_onerror$0),
|
||
a_onfocus=caml_call1(Xml[9],cst_onfocus),
|
||
a_onformchange=caml_call1(Xml[9],cst_onformchange),
|
||
a_onforminput=caml_call1(Xml[9],cst_onforminput),
|
||
a_onhashchange=caml_call1(Xml[9],cst_onhashchange),
|
||
a_oninput=caml_call1(Xml[9],cst_oninput),
|
||
a_oninvalid=caml_call1(Xml[9],cst_oninvalid),
|
||
a_onoffline=caml_call1(Xml[9],cst_onoffline),
|
||
a_ononline=caml_call1(Xml[9],cst_ononline),
|
||
a_onpause=caml_call1(Xml[9],cst_onpause),
|
||
a_onplay=caml_call1(Xml[9],cst_onplay),
|
||
a_onplaying=caml_call1(Xml[9],cst_onplaying),
|
||
a_onpagehide=caml_call1(Xml[9],cst_onpagehide),
|
||
a_onpageshow=caml_call1(Xml[9],cst_onpageshow),
|
||
a_onpopstate=caml_call1(Xml[9],cst_onpopstate),
|
||
a_onprogress=caml_call1(Xml[9],cst_onprogress),
|
||
a_onratechange=caml_call1(Xml[9],cst_onratechange),
|
||
a_onreadystatechange=caml_call1(Xml[9],cst_onreadystatechange),
|
||
a_onredo=caml_call1(Xml[9],cst_onredo),
|
||
a_onresize=caml_call1(Xml[9],cst_onresize$0),
|
||
a_onscroll=caml_call1(Xml[9],cst_onscroll$0),
|
||
a_onseeked=caml_call1(Xml[9],cst_onseeked),
|
||
a_onseeking=caml_call1(Xml[9],cst_onseeking),
|
||
a_onselect=caml_call1(Xml[9],cst_onselect),
|
||
a_onshow=caml_call1(Xml[9],cst_onshow),
|
||
a_onstalled=caml_call1(Xml[9],cst_onstalled),
|
||
a_onstorage=caml_call1(Xml[9],cst_onstorage),
|
||
a_onsubmit=caml_call1(Xml[9],cst_onsubmit),
|
||
a_onsuspend=caml_call1(Xml[9],cst_onsuspend),
|
||
a_ontimeupdate=caml_call1(Xml[9],cst_ontimeupdate),
|
||
a_onundo=caml_call1(Xml[9],cst_onundo),
|
||
a_onunload=caml_call1(Xml[9],cst_onunload$0),
|
||
a_onvolumechange=caml_call1(Xml[9],cst_onvolumechange),
|
||
a_onwaiting=caml_call1(Xml[9],cst_onwaiting),
|
||
a_onload=caml_call1(Xml[9],cst_onload$0),
|
||
a_onloadeddata=caml_call1(Xml[9],cst_onloadeddata),
|
||
a_onloadedmetadata=caml_call1(Xml[9],cst_onloadedmetadata),
|
||
a_onloadstart=caml_call1(Xml[9],cst_onloadstart),
|
||
a_onmessage=caml_call1(Xml[9],cst_onmessage),
|
||
a_onmousewheel=caml_call1(Xml[9],cst_onmousewheel),
|
||
a_onclick=caml_call1(Xml[10],cst_onclick$0),
|
||
a_oncontextmenu=caml_call1(Xml[10],cst_oncontextmenu),
|
||
a_ondblclick=caml_call1(Xml[10],cst_ondblclick),
|
||
a_ondrag=caml_call1(Xml[10],cst_ondrag),
|
||
a_ondragend=caml_call1(Xml[10],cst_ondragend),
|
||
a_ondragenter=caml_call1(Xml[10],cst_ondragenter),
|
||
a_ondragleave=caml_call1(Xml[10],cst_ondragleave),
|
||
a_ondragover=caml_call1(Xml[10],cst_ondragover),
|
||
a_ondragstart=caml_call1(Xml[10],cst_ondragstart),
|
||
a_ondrop=caml_call1(Xml[10],cst_ondrop),
|
||
a_onmousedown=caml_call1(Xml[10],cst_onmousedown$0),
|
||
a_onmouseup=caml_call1(Xml[10],cst_onmouseup$0),
|
||
a_onmouseover=caml_call1(Xml[10],cst_onmouseover$0),
|
||
a_onmousemove=caml_call1(Xml[10],cst_onmousemove$0),
|
||
a_onmouseout=caml_call1(Xml[10],cst_onmouseout$0),
|
||
a_ontouchstart=caml_call1(Xml[12],cst_ontouchstart$0),
|
||
a_ontouchend=caml_call1(Xml[12],cst_ontouchend$0),
|
||
a_ontouchmove=caml_call1(Xml[12],cst_ontouchmove$0),
|
||
a_ontouchcancel=caml_call1(Xml[12],cst_ontouchcancel$0),
|
||
a_onkeypress=caml_call1(Xml[11],cst_onkeypress),
|
||
a_onkeydown=caml_call1(Xml[11],cst_onkeydown),
|
||
a_onkeyup=caml_call1(Xml[11],cst_onkeyup),
|
||
a_version=caml_call1(_aL_,cst_version$0);
|
||
function a_xmlns(x){return user_attrib(C[2],cst_xmlns$4,x)}
|
||
function a_manifest(_eH_){return uri_attrib(cst_manifest,_eH_)}
|
||
function a_cite(_eG_){return uri_attrib(cst_cite,_eG_)}
|
||
function a_xml_space(x){return user_attrib(C[2],cst_xml_space$0,x)}
|
||
function a_accesskey(c){return user_attrib(C[5],cst_accesskey,c)}
|
||
var
|
||
a_charset=caml_call1(_aL_,cst_charset),
|
||
a_accept_charset=caml_call1(_aM_,cst_accept_charset),
|
||
a_accept=caml_call1(_aN_,cst_accept);
|
||
function a_href(_eF_){return uri_attrib(cst_href$0,_eF_)}
|
||
var a_hreflang=caml_call1(_aL_,cst_hreflang);
|
||
function a_download(file){return user_attrib(C[16],cst_download,file)}
|
||
function a_rel(_eE_){return linktypes_attrib(cst_rel,_eE_)}
|
||
var
|
||
a_tabindex=caml_call1(_aK_,cst_tabindex),
|
||
a_mime_type=caml_call1(_aL_,cst_type$4),
|
||
a_alt=caml_call1(_aL_,cst_alt);
|
||
function a_height(p){return caml_call2(_aK_,cst_height$0,p)}
|
||
function a_src(_eD_){return uri_attrib(cst_src,_eD_)}
|
||
function a_width(p){return caml_call2(_aK_,cst_width$0,p)}
|
||
var
|
||
a_for=caml_call1(_aL_,cst_for),
|
||
a_for_list=caml_call1(_aM_,cst_for$0);
|
||
function a_selected(_eC_){return constant_attrib(cst_selected,_eC_)}
|
||
var
|
||
a_text_value=caml_call1(_aL_,cst_value),
|
||
a_int_value=caml_call1(_aK_,cst_value$0),
|
||
a_value=caml_call1(_aL_,cst_value$1),
|
||
a_float_value=caml_call1(_aJ_,cst_value$2);
|
||
function a_action(_eB_){return uri_attrib(cst_action,_eB_)}
|
||
function a_formmethod(x){return user_attrib(C[2],cst_method$0,x)}
|
||
var a_enctype=caml_call1(_aL_,cst_enctype);
|
||
function a_checked(_eA_){return constant_attrib(cst_checked,_eA_)}
|
||
function a_disabled(_ez_){return constant_attrib(cst_disabled,_ez_)}
|
||
function a_readonly(_ey_){return constant_attrib(cst_readonly,_ey_)}
|
||
var
|
||
a_maxlength=caml_call1(_aK_,cst_maxlength),
|
||
a_minlength=caml_call1(_aK_,cst_minlength),
|
||
a_name=caml_call1(_aL_,cst_name$0);
|
||
function a_allowfullscreen(_ex_)
|
||
{return constant_attrib(cst_allowfullscreen,_ex_)}
|
||
function a_allowpaymentrequest(_ew_)
|
||
{return constant_attrib(cst_allowpaymentrequest,_ew_)}
|
||
function a_referrerpolicy(x)
|
||
{return user_attrib(C[10],cst_referrerpolicy,x)}
|
||
function a_autocomplete(x){return user_attrib(C[4],cst_autocomplete,x)}
|
||
function a_async(_ev_){return constant_attrib(cst_async,_ev_)}
|
||
function a_autofocus(_eu_){return constant_attrib(cst_autofocus,_eu_)}
|
||
function a_autoplay(_et_){return constant_attrib(cst_autoplay,_et_)}
|
||
function a_muted(_es_){return constant_attrib(cst_muted,_es_)}
|
||
function a_crossorigin(x){return user_attrib(C[2],cst_crossorigin,x)}
|
||
var
|
||
a_integrity=caml_call1(_aL_,cst_integrity),
|
||
a_mediagroup=caml_call1(_aL_,cst_mediagroup),
|
||
a_challenge=caml_call1(_aL_,cst_challenge);
|
||
function a_contenteditable(ce)
|
||
{return bool_attrib(cst_contenteditable,ce)}
|
||
var a_contextmenu=caml_call1(_aL_,cst_contextmenu);
|
||
function a_controls(_er_){return constant_attrib(cst_controls,_er_)}
|
||
function a_dir(x){return user_attrib(C[2],cst_dir,x)}
|
||
function a_draggable(d){return bool_attrib(cst_draggable,d)}
|
||
var a_form=caml_call1(_aL_,cst_form);
|
||
function a_formaction(_eq_){return uri_attrib(cst_formaction,_eq_)}
|
||
var a_formenctype=caml_call1(_aL_,cst_formenctype);
|
||
function a_formnovalidate(_ep_)
|
||
{return constant_attrib(cst_formnovalidate,_ep_)}
|
||
var a_formtarget=caml_call1(_aL_,cst_formtarget);
|
||
function a_hidden(_eo_){return constant_attrib(cst_hidden,_eo_)}
|
||
var a_high=caml_call1(_aJ_,cst_high);
|
||
function a_icon(_en_){return uri_attrib(cst_icon,_en_)}
|
||
function a_ismap(_em_){return constant_attrib(cst_ismap,_em_)}
|
||
var
|
||
a_keytype=caml_call1(_aL_,cst_keytype),
|
||
a_list=caml_call1(_aL_,cst_list);
|
||
function a_loop(_el_){return constant_attrib(cst_loop,_el_)}
|
||
var
|
||
a_low=caml_call1(_aJ_,cst_low),
|
||
a_max=caml_call1(_aJ_,cst_max$0),
|
||
_aP_=C[7];
|
||
function a_input_max(_ek_){return user_attrib(_aP_,cst_max$1,_ek_)}
|
||
var a_min=caml_call1(_aJ_,cst_min$0),_aQ_=C[7];
|
||
function a_input_min(_ej_){return user_attrib(_aQ_,cst_min$1,_ej_)}
|
||
function a_inputmode(x){return user_attrib(C[2],cst_inputmode,x)}
|
||
function a_novalidate(_ei_){return constant_attrib(cst_novalidate,_ei_)}
|
||
function a_open(_eh_){return constant_attrib(cst_open,_eh_)}
|
||
var
|
||
a_optimum=caml_call1(_aJ_,cst_optimum),
|
||
a_pattern=caml_call1(_aL_,cst_pattern$0),
|
||
a_placeholder=caml_call1(_aL_,cst_placeholder);
|
||
function a_poster(_eg_){return uri_attrib(cst_poster,_eg_)}
|
||
function a_preload(x){return user_attrib(C[2],cst_preload,x)}
|
||
function a_pubdate(_ef_){return constant_attrib(cst_pubdate,_ef_)}
|
||
var a_radiogroup=caml_call1(_aL_,cst_radiogroup);
|
||
function a_required(_ee_){return constant_attrib(cst_required,_ee_)}
|
||
function a_reversed(_ed_){return constant_attrib(cst_reserved,_ed_)}
|
||
function a_sandbox(x){return user_attrib(C[12],cst_sandbox,x)}
|
||
function a_spellcheck(sc){return bool_attrib(cst_spellcheck,sc)}
|
||
function a_scoped(_ec_){return constant_attrib(cst_scoped,_ec_)}
|
||
function a_seamless(_eb_){return constant_attrib(cst_seamless,_eb_)}
|
||
function a_sizes(sizes){return user_attrib(C[13],cst_sizes,sizes)}
|
||
var
|
||
a_span=caml_call1(_aK_,cst_span),
|
||
a_srclang=caml_call1(_aL_,cst_xml_lang$1);
|
||
function a_srcset(_ea_){return srcset_attrib(cst_srcset,_ea_)}
|
||
var
|
||
a_img_sizes=caml_call1(_aN_,cst_sizes$0),
|
||
a_start=caml_call1(_aK_,cst_start$0);
|
||
function a_step(step){return user_attrib(C[15],cst_step,step)}
|
||
function a_wrap(x){return user_attrib(C[2],cst_wrap$0,x)}
|
||
var a_size=caml_call1(_aK_,cst_size);
|
||
function a_input_type(it){return user_attrib(C[6],cst_type$5,it)}
|
||
function a_menu_type(x){return user_attrib(C[2],cst_type$6,x)}
|
||
function a_command_type(x){return user_attrib(C[2],cst_type$7,x)}
|
||
function a_button_type(bt){return user_attrib(C[6],cst_type$8,bt)}
|
||
function a_multiple(_d$_){return constant_attrib(cst_multiple,_d$_)}
|
||
var
|
||
a_cols=caml_call1(_aK_,cst_cols),
|
||
a_rows=caml_call1(_aK_,cst_rows),
|
||
a_summary=caml_call1(_aL_,cst_summary);
|
||
function a_align(x){return user_attrib(C[2],cst_align,x)}
|
||
var
|
||
a_axis=caml_call1(_aL_,cst_axis),
|
||
a_colspan=caml_call1(_aK_,cst_colspan),
|
||
a_headers=caml_call1(_aM_,cst_headers),
|
||
a_rowspan=caml_call1(_aK_,cst_rowspan);
|
||
function a_scope(x){return user_attrib(C[2],cst_scope,x)}
|
||
var a_border=caml_call1(_aK_,cst_border);
|
||
function a_rules(x){return user_attrib(C[2],cst_rules,x)}
|
||
function a_char(c){return user_attrib(C[5],cst_char,c)}
|
||
function a_data(_d__){return uri_attrib(cst_data$1,_d__)}
|
||
var a_codetype=caml_call1(_aL_,cst_codetype);
|
||
function a_frameborder(x){return user_attrib(C[2],cst_frameborder,x)}
|
||
var
|
||
a_marginheight=caml_call1(_aK_,cst_marginheight),
|
||
a_marginwidth=caml_call1(_aK_,cst_marginwidth);
|
||
function a_scrolling(x){return user_attrib(C[2],cst_scrolling,x)}
|
||
var
|
||
a_target=caml_call1(_aL_,cst_target),
|
||
a_content=caml_call1(_aL_,cst_content),
|
||
a_http_equiv=caml_call1(_aL_,cst_http_equiv);
|
||
function a_media(_d9_){return mediadesc_attrib(cst_media$0,_d9_)}
|
||
var a_role=caml_call1(_aM_,cst_role);
|
||
function a_aria(name)
|
||
{return caml_call1(_aM_,caml_call2(Stdlib[28],cst_aria,name))}
|
||
function terminal(tag,a,param){return caml_call2(Xml[20],a,tag)}
|
||
function unary(tag,a,elt)
|
||
{var _d8_=caml_call1(Xml[1][4],elt);
|
||
return caml_call3(Xml[21],a,tag,_d8_)}
|
||
function star(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)}
|
||
function plus(tag,a,elt,elts)
|
||
{var _d7_=caml_call2(Xml[1][5],elt,elts);
|
||
return caml_call3(Xml[21],a,tag,_d7_)}
|
||
function option_cons(opt,elts)
|
||
{if(opt){var x=opt[1];return caml_call2(Xml[1][5],x,elts)}return elts}
|
||
function body(_d5_,_d6_){return star(cst_body,_d5_,_d6_)}
|
||
function head(_d2_,_d3_,_d4_){return plus(cst_head,_d2_,_d3_,_d4_)}
|
||
function title(_d0_,_d1_){return unary(cst_title$1,_d0_,_d1_)}
|
||
function html(a,head,body)
|
||
{var
|
||
_dZ_=caml_call1(Xml[1][4],body),
|
||
content=caml_call2(Xml[1][5],head,_dZ_);
|
||
return caml_call3(Xml[21],a,cst_html$0,content)}
|
||
function footer(_dX_,_dY_){return star(cst_footer,_dX_,_dY_)}
|
||
function header(_dV_,_dW_){return star(cst_header,_dV_,_dW_)}
|
||
function section(_dT_,_dU_){return star(cst_section,_dT_,_dU_)}
|
||
function nav(_dR_,_dS_){return star(cst_nav,_dR_,_dS_)}
|
||
function pcdata(s){return caml_call1(Xml[17],s)}
|
||
var _aR_=Xml[19];
|
||
function space(param){return caml_call1(_aR_,cst_nbsp)}
|
||
var _aS_=Xml[22],_aT_=Xml[23],_aU_=Xml[24];
|
||
function h1(_dP_,_dQ_){return star(cst_h1,_dP_,_dQ_)}
|
||
function h2(_dN_,_dO_){return star(cst_h2,_dN_,_dO_)}
|
||
function h3(_dL_,_dM_){return star(cst_h3,_dL_,_dM_)}
|
||
function h4(_dJ_,_dK_){return star(cst_h4,_dJ_,_dK_)}
|
||
function h5(_dH_,_dI_){return star(cst_h5,_dH_,_dI_)}
|
||
function h6(_dF_,_dG_){return star(cst_h6,_dF_,_dG_)}
|
||
function hgroup(_dD_,_dE_){return star(cst_hgroup,_dD_,_dE_)}
|
||
function address(_dB_,_dC_){return star(cst_address,_dB_,_dC_)}
|
||
function blockquote(_dz_,_dA_){return star(cst_blockquote,_dz_,_dA_)}
|
||
function div(_dx_,_dy_){return star(cst_div,_dx_,_dy_)}
|
||
function p(_dv_,_dw_){return star(cst_p,_dv_,_dw_)}
|
||
function pre(_dt_,_du_){return star(cst_pre,_dt_,_du_)}
|
||
function abbr(_dr_,_ds_){return star(cst_abbr,_dr_,_ds_)}
|
||
function br(_dp_,_dq_){return terminal(cst_br,_dp_,_dq_)}
|
||
function cite(_dn_,_do_){return star(cst_cite$0,_dn_,_do_)}
|
||
function code(_dl_,_dm_){return star(cst_code,_dl_,_dm_)}
|
||
function dfn(_dj_,_dk_){return star(cst_dfn,_dj_,_dk_)}
|
||
function em(_dh_,_di_){return star(cst_em$0,_dh_,_di_)}
|
||
function kbd(_df_,_dg_){return star(cst_kbd,_df_,_dg_)}
|
||
function q(_dd_,_de_){return star(cst_q,_dd_,_de_)}
|
||
function samp(_db_,_dc_){return star(cst_samp,_db_,_dc_)}
|
||
function span(_c$_,_da_){return star(cst_span$0,_c$_,_da_)}
|
||
function strong(_c9_,_c__){return star(cst_strong,_c9_,_c__)}
|
||
function time(_c7_,_c8_){return star(cst_time,_c7_,_c8_)}
|
||
function var$0(_c5_,_c6_){return star(cst_var,_c5_,_c6_)}
|
||
function a(_c3_,_c4_){return star(cst_a$1,_c3_,_c4_)}
|
||
function dl(_c1_,_c2_){return star(cst_dl,_c1_,_c2_)}
|
||
function ol(_cZ_,_c0_){return star(cst_ol,_cZ_,_c0_)}
|
||
function ul(_cX_,_cY_){return star(cst_ul,_cX_,_cY_)}
|
||
function dd(_cV_,_cW_){return star(cst_dd,_cV_,_cW_)}
|
||
function dt(_cT_,_cU_){return star(cst_dt,_cT_,_cU_)}
|
||
function li(_cR_,_cS_){return star(cst_li,_cR_,_cS_)}
|
||
function hr(_cP_,_cQ_){return terminal(cst_hr,_cP_,_cQ_)}
|
||
function b(_cN_,_cO_){return star(cst_b$0,_cN_,_cO_)}
|
||
function i(_cL_,_cM_){return star(cst_i,_cL_,_cM_)}
|
||
function u(_cJ_,_cK_){return star(cst_u,_cJ_,_cK_)}
|
||
function small(_cH_,_cI_){return star(cst_small,_cH_,_cI_)}
|
||
function sub(_cF_,_cG_){return star(cst_sub,_cF_,_cG_)}
|
||
function sup(_cD_,_cE_){return star(cst_sup,_cD_,_cE_)}
|
||
function mark(_cB_,_cC_){return star(cst_mark,_cB_,_cC_)}
|
||
function rp(_cz_,_cA_){return star(cst_rp,_cz_,_cA_)}
|
||
function rt(_cx_,_cy_){return star(cst_rt,_cx_,_cy_)}
|
||
function ruby(_cv_,_cw_){return star(cst_ruby,_cv_,_cw_)}
|
||
function wbr(_ct_,_cu_){return terminal(cst_wbr,_ct_,_cu_)}
|
||
function bdo(dir,opt,elts)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
var _cs_=[0,[0,a_dir(dir),a]];
|
||
return caml_call3(Xml[21],_cs_,cst_bdo,elts)}
|
||
var a_datetime=caml_call1(_aL_,cst_datetime);
|
||
function a_shape(x){return user_attrib(C[2],cst_shape,x)}
|
||
function a_coords(coords){return user_attrib(C[11],cst_coords,coords)}
|
||
var a_usemap=caml_call1(_aL_,cst_usemap);
|
||
function a_defer(_cr_){return constant_attrib(cst_defer,_cr_)}
|
||
var a_label=caml_call1(_aL_,cst_label);
|
||
function area(alt,opt,param)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
var _cq_=[0,[0,caml_call1(a_alt,alt),a]];
|
||
return caml_call2(Xml[20],_cq_,cst_area)}
|
||
function map(_co_,_cp_){return star(cst_map,_co_,_cp_)}
|
||
function del(_cm_,_cn_){return star(cst_del,_cm_,_cn_)}
|
||
function ins(_ck_,_cl_){return star(cst_ins,_ck_,_cl_)}
|
||
function script(_ci_,_cj_){return unary(cst_script$0,_ci_,_cj_)}
|
||
function noscript(_cg_,_ch_){return star(cst_noscript,_cg_,_ch_)}
|
||
function template(_ce_,_cf_){return star(cst_template,_ce_,_cf_)}
|
||
function article(_cc_,_cd_){return star(cst_article,_cc_,_cd_)}
|
||
function aside(_ca_,_cb_){return star(cst_aside,_ca_,_cb_)}
|
||
function main(_b__,_b$_){return star(cst_main,_b__,_b$_)}
|
||
function video_audio(name,src,srcs,opt,elts)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
if(src)var uri=src[1],a$0=[0,a_src(uri),a];else var a$0=a;
|
||
if(srcs)
|
||
{var srcs$0=srcs[1],_b9_=caml_call2(Xml[1][6],srcs$0,elts);
|
||
return caml_call3(Xml[21],[0,a$0],name,_b9_)}
|
||
return caml_call3(Xml[21],[0,a$0],name,elts)}
|
||
function audio(_b5_,_b6_,_b7_,_b8_)
|
||
{return video_audio(cst_audio,_b5_,_b6_,_b7_,_b8_)}
|
||
function video(_b1_,_b2_,_b3_,_b4_)
|
||
{return video_audio(cst_video,_b1_,_b2_,_b3_,_b4_)}
|
||
function canvas(_bZ_,_b0_){return star(cst_canvas,_bZ_,_b0_)}
|
||
function command(label,opt,param)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
var _bY_=[0,[0,caml_call1(a_label,label),a]];
|
||
return caml_call2(Xml[20],_bY_,cst_command)}
|
||
function menu(children,a,param)
|
||
{if(children)
|
||
var match=children[1],l=match[2],children$0=l;
|
||
else
|
||
var children$0=caml_call1(Xml[1][3],0);
|
||
return caml_call3(Xml[21],a,cst_menu,children$0)}
|
||
function embed(_bW_,_bX_){return terminal(cst_embed,_bW_,_bX_)}
|
||
function source(_bU_,_bV_){return terminal(cst_source,_bU_,_bV_)}
|
||
function meter(_bS_,_bT_){return star(cst_meter,_bS_,_bT_)}
|
||
function output_elt(_bQ_,_bR_){return star(cst_output,_bQ_,_bR_)}
|
||
function form(_bO_,_bP_){return star(cst_form$0,_bO_,_bP_)}
|
||
function svg(opt,children)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
var _bN_=caml_call2(Svg[242],[0,a],children);
|
||
return caml_call1(Svg[324],_bN_)}
|
||
function input(_bL_,_bM_){return terminal(cst_input,_bL_,_bM_)}
|
||
function keygen(_bJ_,_bK_){return terminal(cst_keygen,_bJ_,_bK_)}
|
||
function label(_bH_,_bI_){return star(cst_label$0,_bH_,_bI_)}
|
||
function option(_bF_,_bG_){return unary(cst_option,_bF_,_bG_)}
|
||
function select(_bD_,_bE_){return star(cst_select,_bD_,_bE_)}
|
||
function textarea(_bB_,_bC_){return unary(cst_textarea,_bB_,_bC_)}
|
||
function button(_bz_,_bA_){return star(cst_button,_bz_,_bA_)}
|
||
function datalist(children,a,param)
|
||
{if(children)
|
||
var match=children[1],x=match[2],children$0=x;
|
||
else
|
||
var children$0=caml_call1(Xml[1][3],0);
|
||
return caml_call3(Xml[21],a,cst_datalist,children$0)}
|
||
function progress(_bx_,_by_){return star(cst_progress,_bx_,_by_)}
|
||
function legend(_bv_,_bw_){return star(cst_legend,_bv_,_bw_)}
|
||
function details(summary,a,children)
|
||
{return plus(cst_details,a,summary,children)}
|
||
function summary(_bt_,_bu_){return star(cst_summary$0,_bt_,_bu_)}
|
||
function fieldset(legend,a,elts)
|
||
{var _bs_=option_cons(legend,elts);
|
||
return caml_call3(Xml[21],a,cst_fieldset,_bs_)}
|
||
function optgroup(label,opt,elts)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
var _br_=[0,[0,caml_call1(a_label,label),a]];
|
||
return caml_call3(Xml[21],_br_,cst_optgroup,elts)}
|
||
function figcaption(_bp_,_bq_){return star(cst_figcaption,_bp_,_bq_)}
|
||
function figure(figcaption,a,elts)
|
||
{if(figcaption)
|
||
{var _bm_=figcaption[1];
|
||
if(437082891 <= _bm_[1])
|
||
var
|
||
c=_bm_[2],
|
||
_bn_=caml_call1(Xml[1][4],c),
|
||
_bo_=caml_call2(Xml[1][6],elts,_bn_);
|
||
else
|
||
var c$0=_bm_[2],_bo_=caml_call2(Xml[1][5],c$0,elts);
|
||
var content=_bo_}
|
||
else
|
||
var content=elts;
|
||
return caml_call3(Xml[21],a,cst_figure,content)}
|
||
function caption(_bk_,_bl_){return star(cst_caption,_bk_,_bl_)}
|
||
function table(caption,columns,thead,tfoot,a,elts)
|
||
{var content=option_cons(thead,option_cons(tfoot,elts));
|
||
if(columns)
|
||
var
|
||
columns$0=columns[1],
|
||
content$0=caml_call2(Xml[1][6],columns$0,content);
|
||
else
|
||
var content$0=content;
|
||
var content$1=option_cons(caption,content$0);
|
||
return caml_call3(Xml[21],a,cst_table$0,content$1)}
|
||
function td(_bi_,_bj_){return star(cst_td,_bi_,_bj_)}
|
||
function th(_bg_,_bh_){return star(cst_th,_bg_,_bh_)}
|
||
function tr(_be_,_bf_){return star(cst_tr,_be_,_bf_)}
|
||
function colgroup(_bc_,_bd_){return star(cst_colgroup,_bc_,_bd_)}
|
||
function col(_ba_,_bb_){return terminal(cst_col,_ba_,_bb_)}
|
||
function thead(_a__,_a$_){return star(cst_thead,_a__,_a$_)}
|
||
function tbody(_a8_,_a9_){return star(cst_tbody,_a8_,_a9_)}
|
||
function tfoot(_a6_,_a7_){return star(cst_tfoot,_a6_,_a7_)}
|
||
function iframe(_a4_,_a5_){return star(cst_iframe,_a4_,_a5_)}
|
||
function object(params,opt,elts)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
if(params)
|
||
var e=params[1],elts$0=caml_call2(Xml[1][6],e,elts);
|
||
else
|
||
var elts$0=elts;
|
||
return caml_call3(Xml[21],[0,a],cst_object,elts$0)}
|
||
function param(_a2_,_a3_){return terminal(cst_param,_a2_,_a3_)}
|
||
function img(src,alt,opt,param)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
var _a1_=[0,caml_call1(a_alt,alt),a],a$0=[0,a_src(src),_a1_];
|
||
return caml_call2(Xml[20],[0,a$0],cst_img)}
|
||
function meta(_aZ_,_a0_){return terminal(cst_meta,_aZ_,_a0_)}
|
||
function style(opt,elts)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
return caml_call3(Xml[21],[0,a],cst_style$2,elts)}
|
||
function link(rel,href,opt,param)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;
|
||
var _aX_=[0,a_href(href),a],_aY_=[0,[0,a_rel(rel),_aX_]];
|
||
return caml_call2(Xml[20],_aY_,cst_link)}
|
||
function base(_aV_,_aW_){return terminal(cst_base,_aV_,_aW_)}
|
||
function tot(x){return x}
|
||
function totl(x){return x}
|
||
function toelt(x){return x}
|
||
function toeltl(x){return x}
|
||
function doc_toelt(x){return x}
|
||
var I=_a_(Xml);
|
||
function of_seq(s){return caml_call1(I[1],s)}
|
||
function data(s){return caml_call1(Xml[18],s)}
|
||
function leaf(tag,a,param){return caml_call2(Xml[20],a,tag)}
|
||
function node(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)}
|
||
function coerce_elt(x){return x}
|
||
var float_attrib=Xml[4],int_attrib=Xml[5],string_attrib=Xml[6];
|
||
function uri_attrib$0(a,s){return caml_call2(Xml[13],a,s)}
|
||
var
|
||
space_sep_attrib=Xml[7],
|
||
comma_sep_attrib=Xml[8],
|
||
Unsafe=
|
||
[0,
|
||
data,
|
||
leaf,
|
||
node,
|
||
coerce_elt,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
uri_attrib$0,
|
||
space_sep_attrib,
|
||
comma_sep_attrib];
|
||
return [0,
|
||
Xml,
|
||
Info,
|
||
_aH_,
|
||
_aI_,
|
||
to_xmlattribs,
|
||
to_attrib,
|
||
_aJ_,
|
||
_aK_,
|
||
_aL_,
|
||
uri_attrib,
|
||
_aM_,
|
||
_aN_,
|
||
user_attrib,
|
||
bool_attrib,
|
||
constant_attrib,
|
||
linktypes_attrib,
|
||
mediadesc_attrib,
|
||
srcset_attrib,
|
||
a_class,
|
||
a_id,
|
||
a_user_data,
|
||
a_title,
|
||
a_xml_lang,
|
||
a_lang,
|
||
a_style,
|
||
a_property,
|
||
a_onabort,
|
||
a_onafterprint,
|
||
a_onbeforeprint,
|
||
a_onbeforeunload,
|
||
a_onblur,
|
||
a_oncanplay,
|
||
a_oncanplaythrough,
|
||
a_onchange,
|
||
a_ondurationchange,
|
||
a_onemptied,
|
||
a_onended,
|
||
a_onerror,
|
||
a_onfocus,
|
||
a_onformchange,
|
||
a_onforminput,
|
||
a_onhashchange,
|
||
a_oninput,
|
||
a_oninvalid,
|
||
a_onoffline,
|
||
a_ononline,
|
||
a_onpause,
|
||
a_onplay,
|
||
a_onplaying,
|
||
a_onpagehide,
|
||
a_onpageshow,
|
||
a_onpopstate,
|
||
a_onprogress,
|
||
a_onratechange,
|
||
a_onreadystatechange,
|
||
a_onredo,
|
||
a_onresize,
|
||
a_onscroll,
|
||
a_onseeked,
|
||
a_onseeking,
|
||
a_onselect,
|
||
a_onshow,
|
||
a_onstalled,
|
||
a_onstorage,
|
||
a_onsubmit,
|
||
a_onsuspend,
|
||
a_ontimeupdate,
|
||
a_onundo,
|
||
a_onunload,
|
||
a_onvolumechange,
|
||
a_onwaiting,
|
||
a_onload,
|
||
a_onloadeddata,
|
||
a_onloadedmetadata,
|
||
a_onloadstart,
|
||
a_onmessage,
|
||
a_onmousewheel,
|
||
a_onclick,
|
||
a_oncontextmenu,
|
||
a_ondblclick,
|
||
a_ondrag,
|
||
a_ondragend,
|
||
a_ondragenter,
|
||
a_ondragleave,
|
||
a_ondragover,
|
||
a_ondragstart,
|
||
a_ondrop,
|
||
a_onmousedown,
|
||
a_onmouseup,
|
||
a_onmouseover,
|
||
a_onmousemove,
|
||
a_onmouseout,
|
||
a_ontouchstart,
|
||
a_ontouchend,
|
||
a_ontouchmove,
|
||
a_ontouchcancel,
|
||
a_onkeypress,
|
||
a_onkeydown,
|
||
a_onkeyup,
|
||
a_version,
|
||
a_xmlns,
|
||
a_manifest,
|
||
a_cite,
|
||
a_xml_space,
|
||
a_accesskey,
|
||
a_charset,
|
||
a_accept_charset,
|
||
a_accept,
|
||
a_href,
|
||
a_hreflang,
|
||
a_download,
|
||
a_rel,
|
||
a_tabindex,
|
||
a_mime_type,
|
||
a_alt,
|
||
a_height,
|
||
a_src,
|
||
a_width,
|
||
a_for,
|
||
a_for,
|
||
a_for_list,
|
||
a_for_list,
|
||
a_selected,
|
||
a_text_value,
|
||
a_int_value,
|
||
a_value,
|
||
a_float_value,
|
||
a_action,
|
||
a_formmethod,
|
||
a_formmethod,
|
||
a_enctype,
|
||
a_checked,
|
||
a_disabled,
|
||
a_readonly,
|
||
a_maxlength,
|
||
a_minlength,
|
||
a_name,
|
||
a_allowfullscreen,
|
||
a_allowpaymentrequest,
|
||
a_referrerpolicy,
|
||
a_autocomplete,
|
||
a_async,
|
||
a_autofocus,
|
||
a_autoplay,
|
||
a_muted,
|
||
a_crossorigin,
|
||
a_integrity,
|
||
a_mediagroup,
|
||
a_challenge,
|
||
a_contenteditable,
|
||
a_contextmenu,
|
||
a_controls,
|
||
a_dir,
|
||
a_draggable,
|
||
a_form,
|
||
a_formaction,
|
||
a_formenctype,
|
||
a_formnovalidate,
|
||
a_formtarget,
|
||
a_hidden,
|
||
a_high,
|
||
a_icon,
|
||
a_ismap,
|
||
a_keytype,
|
||
a_list,
|
||
a_loop,
|
||
a_low,
|
||
a_max,
|
||
a_input_max,
|
||
a_min,
|
||
a_input_min,
|
||
a_inputmode,
|
||
a_novalidate,
|
||
a_open,
|
||
a_optimum,
|
||
a_pattern,
|
||
a_placeholder,
|
||
a_poster,
|
||
a_preload,
|
||
a_pubdate,
|
||
a_radiogroup,
|
||
a_required,
|
||
a_reversed,
|
||
a_sandbox,
|
||
a_spellcheck,
|
||
a_scoped,
|
||
a_seamless,
|
||
a_sizes,
|
||
a_span,
|
||
a_srclang,
|
||
a_srcset,
|
||
a_img_sizes,
|
||
a_start,
|
||
a_step,
|
||
a_wrap,
|
||
a_size,
|
||
a_input_type,
|
||
a_menu_type,
|
||
a_command_type,
|
||
a_button_type,
|
||
a_multiple,
|
||
a_cols,
|
||
a_rows,
|
||
a_summary,
|
||
a_align,
|
||
a_axis,
|
||
a_colspan,
|
||
a_headers,
|
||
a_rowspan,
|
||
a_scope,
|
||
a_border,
|
||
a_rules,
|
||
a_char,
|
||
a_data,
|
||
a_codetype,
|
||
a_frameborder,
|
||
a_marginheight,
|
||
a_marginwidth,
|
||
a_scrolling,
|
||
a_target,
|
||
a_content,
|
||
a_http_equiv,
|
||
a_media,
|
||
a_role,
|
||
a_aria,
|
||
terminal,
|
||
unary,
|
||
star,
|
||
plus,
|
||
option_cons,
|
||
body,
|
||
head,
|
||
title,
|
||
html,
|
||
footer,
|
||
header,
|
||
section,
|
||
nav,
|
||
pcdata,
|
||
pcdata,
|
||
_aR_,
|
||
space,
|
||
_aS_,
|
||
_aT_,
|
||
_aU_,
|
||
h1,
|
||
h2,
|
||
h3,
|
||
h4,
|
||
h5,
|
||
h6,
|
||
hgroup,
|
||
address,
|
||
blockquote,
|
||
div,
|
||
p,
|
||
pre,
|
||
abbr,
|
||
br,
|
||
cite,
|
||
code,
|
||
dfn,
|
||
em,
|
||
kbd,
|
||
q,
|
||
samp,
|
||
span,
|
||
strong,
|
||
time,
|
||
var$0,
|
||
a,
|
||
dl,
|
||
ol,
|
||
ul,
|
||
dd,
|
||
dt,
|
||
li,
|
||
hr,
|
||
b,
|
||
i,
|
||
u,
|
||
small,
|
||
sub,
|
||
sup,
|
||
mark,
|
||
rp,
|
||
rt,
|
||
ruby,
|
||
wbr,
|
||
bdo,
|
||
a_datetime,
|
||
a_shape,
|
||
a_coords,
|
||
a_usemap,
|
||
a_defer,
|
||
a_label,
|
||
area,
|
||
map,
|
||
del,
|
||
ins,
|
||
script,
|
||
noscript,
|
||
template,
|
||
article,
|
||
aside,
|
||
main,
|
||
video_audio,
|
||
audio,
|
||
video,
|
||
canvas,
|
||
command,
|
||
menu,
|
||
embed,
|
||
source,
|
||
meter,
|
||
output_elt,
|
||
form,
|
||
svg,
|
||
input,
|
||
keygen,
|
||
label,
|
||
option,
|
||
select,
|
||
textarea,
|
||
button,
|
||
datalist,
|
||
progress,
|
||
legend,
|
||
details,
|
||
summary,
|
||
fieldset,
|
||
optgroup,
|
||
figcaption,
|
||
figure,
|
||
caption,
|
||
table,
|
||
table,
|
||
td,
|
||
th,
|
||
tr,
|
||
colgroup,
|
||
col,
|
||
thead,
|
||
tbody,
|
||
tfoot,
|
||
iframe,
|
||
object,
|
||
param,
|
||
img,
|
||
meta,
|
||
style,
|
||
link,
|
||
base,
|
||
tot,
|
||
totl,
|
||
toelt,
|
||
toeltl,
|
||
doc_toelt,
|
||
I,
|
||
of_seq,
|
||
Unsafe]}
|
||
function Wrapped_functions$0(Xml)
|
||
{function string_of_sandbox_token(param)
|
||
{return -177579325 <= param
|
||
?642066717 <= param
|
||
?961985737 <= param?cst_allow_same_origin:cst_allow_popups
|
||
:-141440231 <= param?cst_allow_forms:cst_allow_pointer_lock
|
||
:-237921695 <= param?cst_allow_script:cst_allow_top_navigation}
|
||
function string_of_linktype(param)
|
||
{if(typeof param === "number")
|
||
return 381789656 <= param
|
||
?814486425 <= param
|
||
?870035731 <= param
|
||
?1021867988 <= param
|
||
?1026883179 <= param?cst_external:cst_canonical
|
||
:892857107 <= param?cst_prev:cst_next
|
||
:847656566 <= param?cst_last:cst_icon$0
|
||
:395967329 <= param
|
||
?693914176 <= param
|
||
?803495649 <= param?cst_help:cst_noreferrer
|
||
:672161451 <= param?cst_author:cst_license
|
||
:395056008 <= param?cst_search:cst_noopener
|
||
:-289155950 <= param
|
||
?19067 <= param
|
||
?212027606 <= param
|
||
?332064784 <= param?cst_first:cst_bookmark
|
||
:4198970 <= param?cst_tag:cst_up
|
||
:-123098695 <= param?cst_pingback:cst_nofollow
|
||
:-837966724 <= param
|
||
?-687429350 <= param
|
||
?-543567890 <= param?cst_stylesheet:cst_alternate
|
||
:-784200974 <= param?cst_index:cst_sidebar
|
||
:-954191215 <= param?cst_archives:cst_prefetch;
|
||
var s=param[2];
|
||
return s}
|
||
function string_of_mediadesc_token(param)
|
||
{if(typeof param === "number")
|
||
return 3256577 <= param
|
||
?67844052 <= param
|
||
?985170249 <= param
|
||
?993823919 <= param?cst_projection:cst_aural
|
||
:741408196 <= param?cst_handheld:cst_embossed
|
||
:4203225 <= param?cst_tty:cst_all
|
||
:-321929715 === param
|
||
?cst_braille
|
||
:-68046964 <= param
|
||
?18850 <= param?cst_tv:cst_screen$0
|
||
:-275811774 <= param?cst_speech:cst_print;
|
||
var s=param[2];
|
||
return s}
|
||
function string_of_referrerpolicy(param)
|
||
{return 128179133 <= param
|
||
?516162486 === param
|
||
?cst_unsafe_url
|
||
:880519217 <= param
|
||
?1065162943 <= param
|
||
?cst_same_origin
|
||
:cst_origin_when_cross_origin
|
||
:808133042 <= param
|
||
?cst_no_referrer_when_downgrade
|
||
:cst_no_referrer
|
||
:-6975994 <= param
|
||
?50834029 <= param?cst$39:cst_origin
|
||
:-512964804 <= param
|
||
?cst_strict_origin
|
||
:cst_strict_origin_when_cross_o}
|
||
function string_of_big_variant(param)
|
||
{if(typeof param === "number")
|
||
return 4252495 <= param
|
||
?748194550 <= param
|
||
?892709484 <= param
|
||
?936387931 <= param
|
||
?984475830 <= param
|
||
?1003109192 <= param
|
||
?1026883179 <= param?cst_external$0:cst_0
|
||
:995986491 <= param?cst_formnovalidate$0:cst_audio$0
|
||
:963342108 <= param?cst_async$0:cst_toolbar
|
||
:892857107 <= param
|
||
?914891065 <= param
|
||
?925976842 <= param?cst_soft:cst_rows$0
|
||
:914389316 <= param?cst_rect$0:cst_prev$0
|
||
:892711040 <= param?cst_POST:cst_poly
|
||
:847656566 <= param
|
||
?848351876 <= param
|
||
?870530776 <= param
|
||
?881668074 <= param?cst_open$0:cst_none$2
|
||
:870035731 <= param?cst_next$0:cst_loop$0
|
||
:847852583 <= param?cst_left:cst_last$0
|
||
:803298059 <= param
|
||
?814486425 <= param
|
||
?836565865 <= param?cst_kana:cst_icon$1
|
||
:803495649 <= param?cst_help$0:cst_hard
|
||
:748545107 <= param?cst_cols$0:cst_char$0
|
||
:292438678 <= param
|
||
?434500685 <= param
|
||
?596180811 <= param
|
||
?693914176 <= param
|
||
?726666127 <= param?cst_auto$3:cst_noreferrer$0
|
||
:672161451 <= param?cst_author$0:cst_muted$0
|
||
:475573507 <= param?cst_autoplay$0:cst_anonymous
|
||
:332064784 <= param
|
||
?395967329 <= param
|
||
?432776079 <= param?cst_metadata$0:cst_license$0
|
||
:395056008 <= param?cst_search$0:cst_first$0
|
||
:306241015 <= param?cst_novalidate$0:cst_controls$0
|
||
:111644259 <= param
|
||
?178382384 <= param
|
||
?202657151 <= param
|
||
?212027606 <= param?cst_bookmark$0:cst_required$0
|
||
:186574459 <= param?cst_selected$0:cst_circle$0
|
||
:140750597 <= param?cst_rowgroup:cst_checkbox
|
||
:19559306 <= param
|
||
?50085628 <= param
|
||
?95509868 <= param?cst_katakana:cst_email
|
||
:48900580 <= param?cst_latin:cst_hidden$0
|
||
:4448519 <= param?cst_yes:cst_url
|
||
:-369291781 <= param
|
||
?17505 <= param
|
||
?3805386 <= param
|
||
?4102650 <= param
|
||
?4198970 <= param
|
||
?4199867 <= param?cst_tel:cst_tag$0
|
||
:4103754 <= param?cst_rtl:cst_row
|
||
:3953222 <= param?cst_1:cst_ltr
|
||
:3256577 <= param
|
||
?3356704 <= param
|
||
?3553398 <= param?cst_GET:cst_col$0
|
||
:3257036 <= param?cst_any:cst_all$0
|
||
:19067 <= param?cst_up$0:cst_no
|
||
:-165772469 <= param
|
||
?-123098695 <= param
|
||
?-100768656 <= param
|
||
?-57574468 <= param?cst_right:cst_scoped$0
|
||
:-116258131 <= param?cst_numeric:cst_pingback$0
|
||
:-146439973 <= param?cst_radio:cst_pubdate$0
|
||
:-289155950 <= param
|
||
?-200275514 <= param
|
||
?-197222864 <= param?cst_multiple$0:cst_latin_name
|
||
:-247853591 <= param?cst_autofocus$0:cst_nofollow$0
|
||
:-363872942 <= param?cst_defer$0:cst_full_width_latin
|
||
:-784200974 <= param
|
||
?-613973726 <= param
|
||
?-529147129 <= param
|
||
?-423051825 <= param
|
||
?-384499551 <= param?cst_default$0:cst_context
|
||
:-514572330 <= param?cst_verbatim:cst_checked$0
|
||
:-543567890 <= param?cst_stylesheet$0:cst_reserved$0
|
||
:-728306478 <= param
|
||
?-707104822 <= param
|
||
?-687429350 <= param
|
||
?cst_alternate$0
|
||
:cst_http_www_w3_org_1999_xhtml
|
||
:-709493348 <= param?cst_disabled$0:cst_ismap$0
|
||
:-773209244 <= param?cst_use_credentials:cst_index$0
|
||
:-883155966 <= param
|
||
?-837966724 <= param
|
||
?-792946572 <= param
|
||
?-788068560 <= param?cst_justify:cst_groups
|
||
:-826369749 <= param?cst_command$0:cst_sidebar$0
|
||
:-872161756 <= param?cst_latin_prose:cst_readonly$0
|
||
:-1000861353 === param
|
||
?cst_prefetch$0
|
||
:-954191215 <= param
|
||
?-931002593 <= param?cst_colgroup$0:cst_archives$0
|
||
:-967956361 <= param?cst_seamless$0:cst_preserve$0;
|
||
var s=param[2];
|
||
return s}
|
||
function string_of_input_type(param)
|
||
{return 50085628 <= param
|
||
?612668487 <= param
|
||
?781515420 <= param
|
||
?936769581 <= param
|
||
?969837588 <= param?cst_week:cst_time$0
|
||
:936573133 <= param?cst_text$0:cst_file
|
||
:758940238 <= param?cst_date:cst_datetime_local
|
||
:242538002 <= param
|
||
?529348384 <= param
|
||
?578936635 <= param?cst_password:cst_month
|
||
:395056008 <= param?cst_search$1:cst_button$0
|
||
:111644259 <= param?cst_checkbox$0:cst_email$0
|
||
:-146439973 <= param
|
||
?-101336657 <= param
|
||
?4252495 <= param
|
||
?19559306 <= param?cst_hidden$1:cst_url$0
|
||
:4199867 <= param?cst_tel$0:cst_reset
|
||
:-145943139 <= param?cst_range:cst_radio$0
|
||
:-795439301 <= param
|
||
?-578166461 <= param
|
||
?-528289822 <= param?cst_readonly$1:cst_color
|
||
:-703661335 <= param?cst_number:cst_image$0
|
||
:-828715976 <= param?cst_submit:cst_datetime$0}
|
||
function string_of_number_or_datetime(param)
|
||
{if(-703661335 <= param[1])
|
||
{var n=param[2];return caml_call1(Stdlib[33],n)}
|
||
var t=param[2];
|
||
return t}
|
||
var
|
||
string_of_character=caml_call1(Stdlib_string[1],1),
|
||
string_of_number$0=Stdlib[33],
|
||
string_of_bool=Stdlib[30];
|
||
function onoff_of_bool(param){return param?cst_on:cst_off}
|
||
function unoption_string(param)
|
||
{if(param){var x=param[1];return x}return cst$40}
|
||
function string_of_step(param)
|
||
{if(param){var x=param[1];return string_of_number(x)}return cst_any$0}
|
||
function string_of_sizes(param)
|
||
{if(param)
|
||
{var
|
||
l=param[1],
|
||
_aF_=
|
||
function(param)
|
||
{var y=param[2],x=param[1];
|
||
return caml_call3(Stdlib_printf[4],_ae_,x,y)},
|
||
_aG_=caml_call2(Stdlib_list[17],_aF_,l);
|
||
return caml_call2(Stdlib_string[7],cst$41,_aG_)}
|
||
return cst_any$1}
|
||
function string_of_sandbox(l)
|
||
{var _aE_=caml_call2(Stdlib_list[17],string_of_sandbox_token,l);
|
||
return caml_call2(Stdlib_string[7],cst$42,_aE_)}
|
||
function string_of_numbers(l)
|
||
{var _aD_=caml_call2(Stdlib_list[17],string_of_number$0,l);
|
||
return caml_call2(Stdlib_string[7],cst$43,_aD_)}
|
||
function string_of_mediadesc(l)
|
||
{var _aC_=caml_call2(Stdlib_list[17],string_of_mediadesc_token,l);
|
||
return caml_call2(Stdlib_string[7],cst$44,_aC_)}
|
||
function string_of_linktypes(l)
|
||
{var _aB_=caml_call2(Stdlib_list[17],string_of_linktype,l);
|
||
return caml_call2(Stdlib_string[7],cst$45,_aB_)}
|
||
function string_of_srcset(l)
|
||
{function f(param)
|
||
{var _aw_=param[1];
|
||
if(-738802218 === _aw_)
|
||
{var
|
||
match=param[2],
|
||
v=match[2],
|
||
url=match[1],
|
||
_ax_=caml_call1(string_of_number$0,v),
|
||
_ay_=caml_call1(Xml[2],url);
|
||
return caml_call3(Stdlib_printf[4],_af_,_ay_,_ax_)}
|
||
if(4252495 <= _aw_)
|
||
{var url$0=param[2];return caml_call1(Xml[2],url$0)}
|
||
var
|
||
match$0=param[2],
|
||
v$0=match$0[2],
|
||
url$1=match$0[1],
|
||
_az_=string_of_number(v$0),
|
||
_aA_=caml_call1(Xml[2],url$1);
|
||
return caml_call3(Stdlib_printf[4],_ag_,_aA_,_az_)}
|
||
var _av_=caml_call2(Stdlib_list[17],f,l);
|
||
return caml_call2(Stdlib_string[7],cst$46,_av_)}
|
||
return [0,
|
||
Xml,
|
||
string_of_sandbox_token,
|
||
string_of_linktype,
|
||
string_of_mediadesc_token,
|
||
string_of_referrerpolicy,
|
||
string_of_big_variant,
|
||
string_of_input_type,
|
||
string_of_number_or_datetime,
|
||
string_of_character,
|
||
string_of_number$0,
|
||
string_of_bool,
|
||
onoff_of_bool,
|
||
unoption_string,
|
||
string_of_step,
|
||
string_of_sizes,
|
||
string_of_sandbox,
|
||
string_of_numbers,
|
||
string_of_mediadesc,
|
||
string_of_linktypes,
|
||
string_of_srcset]}
|
||
function _ah_(_as_,_ar_,_aq_)
|
||
{var _at_=Make_with_wrapped_functions$0(_as_,_ar_,_aq_),_au_=_at_[361];
|
||
return [0,
|
||
_at_[1],
|
||
_at_[2],
|
||
_at_[3],
|
||
_at_[4],
|
||
_at_[19],
|
||
_at_[21],
|
||
_at_[20],
|
||
_at_[22],
|
||
_at_[23],
|
||
_at_[24],
|
||
_at_[27],
|
||
_at_[28],
|
||
_at_[29],
|
||
_at_[30],
|
||
_at_[31],
|
||
_at_[32],
|
||
_at_[33],
|
||
_at_[34],
|
||
_at_[35],
|
||
_at_[36],
|
||
_at_[37],
|
||
_at_[38],
|
||
_at_[39],
|
||
_at_[40],
|
||
_at_[41],
|
||
_at_[42],
|
||
_at_[43],
|
||
_at_[44],
|
||
_at_[77],
|
||
_at_[45],
|
||
_at_[46],
|
||
_at_[47],
|
||
_at_[48],
|
||
_at_[49],
|
||
_at_[50],
|
||
_at_[51],
|
||
_at_[52],
|
||
_at_[53],
|
||
_at_[54],
|
||
_at_[55],
|
||
_at_[56],
|
||
_at_[57],
|
||
_at_[58],
|
||
_at_[59],
|
||
_at_[60],
|
||
_at_[61],
|
||
_at_[62],
|
||
_at_[63],
|
||
_at_[64],
|
||
_at_[65],
|
||
_at_[66],
|
||
_at_[67],
|
||
_at_[68],
|
||
_at_[69],
|
||
_at_[70],
|
||
_at_[71],
|
||
_at_[72],
|
||
_at_[73],
|
||
_at_[74],
|
||
_at_[75],
|
||
_at_[76],
|
||
_at_[78],
|
||
_at_[79],
|
||
_at_[80],
|
||
_at_[81],
|
||
_at_[82],
|
||
_at_[83],
|
||
_at_[84],
|
||
_at_[85],
|
||
_at_[86],
|
||
_at_[87],
|
||
_at_[88],
|
||
_at_[89],
|
||
_at_[90],
|
||
_at_[91],
|
||
_at_[92],
|
||
_at_[93],
|
||
_at_[94],
|
||
_at_[95],
|
||
_at_[96],
|
||
_at_[97],
|
||
_at_[98],
|
||
_at_[99],
|
||
_at_[138],
|
||
_at_[139],
|
||
_at_[141],
|
||
_at_[142],
|
||
_at_[143],
|
||
_at_[144],
|
||
_at_[145],
|
||
_at_[146],
|
||
_at_[147],
|
||
_at_[148],
|
||
_at_[149],
|
||
_at_[150],
|
||
_at_[151],
|
||
_at_[152],
|
||
_at_[153],
|
||
_at_[154],
|
||
_at_[155],
|
||
_at_[156],
|
||
_at_[157],
|
||
_at_[158],
|
||
_at_[159],
|
||
_at_[160],
|
||
_at_[161],
|
||
_at_[162],
|
||
_at_[163],
|
||
_at_[164],
|
||
_at_[165],
|
||
_at_[166],
|
||
_at_[167],
|
||
_at_[168],
|
||
_at_[169],
|
||
_at_[170],
|
||
_at_[171],
|
||
_at_[172],
|
||
_at_[173],
|
||
_at_[174],
|
||
_at_[175],
|
||
_at_[176],
|
||
_at_[177],
|
||
_at_[178],
|
||
_at_[179],
|
||
_at_[180],
|
||
_at_[181],
|
||
_at_[140],
|
||
_at_[182],
|
||
_at_[183],
|
||
_at_[184],
|
||
_at_[185],
|
||
_at_[186],
|
||
_at_[187],
|
||
_at_[188],
|
||
_at_[189],
|
||
_at_[190],
|
||
_at_[191],
|
||
_at_[192],
|
||
_at_[193],
|
||
_at_[194],
|
||
_at_[195],
|
||
_at_[100],
|
||
_at_[101],
|
||
_at_[102],
|
||
_at_[103],
|
||
_at_[104],
|
||
_at_[105],
|
||
_at_[106],
|
||
_at_[107],
|
||
_at_[108],
|
||
_at_[109],
|
||
_at_[110],
|
||
_at_[111],
|
||
_at_[112],
|
||
_at_[113],
|
||
_at_[114],
|
||
_at_[291],
|
||
_at_[128],
|
||
_at_[132],
|
||
_at_[202],
|
||
_at_[131],
|
||
_at_[119],
|
||
_at_[120],
|
||
_at_[121],
|
||
_at_[122],
|
||
_at_[135],
|
||
_at_[136],
|
||
_at_[129],
|
||
_at_[130],
|
||
_at_[201],
|
||
_at_[137],
|
||
_at_[203],
|
||
_at_[123],
|
||
_at_[196],
|
||
_at_[117],
|
||
_at_[197],
|
||
_at_[124],
|
||
_at_[125],
|
||
_at_[126],
|
||
_at_[127],
|
||
_at_[133],
|
||
_at_[134],
|
||
_at_[200],
|
||
_at_[199],
|
||
_at_[198],
|
||
_at_[296],
|
||
_at_[205],
|
||
_at_[206],
|
||
_at_[207],
|
||
_at_[208],
|
||
_at_[209],
|
||
_at_[210],
|
||
_at_[204],
|
||
_at_[211],
|
||
_at_[212],
|
||
_at_[213],
|
||
_at_[115],
|
||
_at_[116],
|
||
_at_[118],
|
||
_at_[292],
|
||
_at_[293],
|
||
_at_[294],
|
||
_at_[214],
|
||
_at_[215],
|
||
_at_[216],
|
||
_at_[217],
|
||
_at_[218],
|
||
_at_[219],
|
||
_at_[220],
|
||
_at_[221],
|
||
_at_[222],
|
||
_at_[295],
|
||
_at_[223],
|
||
_at_[25],
|
||
_at_[26],
|
||
_at_[224],
|
||
_at_[225],
|
||
_at_[239],
|
||
_at_[234],
|
||
_at_[232],
|
||
_at_[353],
|
||
_at_[233],
|
||
_at_[231],
|
||
_at_[318],
|
||
_at_[235],
|
||
_at_[236],
|
||
_at_[237],
|
||
_at_[238],
|
||
_at_[246],
|
||
_at_[247],
|
||
_at_[248],
|
||
_at_[249],
|
||
_at_[250],
|
||
_at_[251],
|
||
_at_[252],
|
||
_at_[253],
|
||
_at_[304],
|
||
_at_[305],
|
||
_at_[306],
|
||
_at_[256],
|
||
_at_[257],
|
||
_at_[254],
|
||
_at_[255],
|
||
_at_[272],
|
||
_at_[273],
|
||
_at_[274],
|
||
_at_[275],
|
||
_at_[276],
|
||
_at_[277],
|
||
_at_[333],
|
||
_at_[334],
|
||
_at_[278],
|
||
_at_[279],
|
||
_at_[280],
|
||
_at_[281],
|
||
_at_[282],
|
||
_at_[283],
|
||
_at_[284],
|
||
_at_[285],
|
||
_at_[289],
|
||
_at_[290],
|
||
_at_[258],
|
||
_at_[259],
|
||
_at_[260],
|
||
_at_[261],
|
||
_at_[262],
|
||
_at_[263],
|
||
_at_[264],
|
||
_at_[265],
|
||
_at_[266],
|
||
_at_[267],
|
||
_at_[268],
|
||
_at_[269],
|
||
_at_[270],
|
||
_at_[271],
|
||
_at_[299],
|
||
_at_[300],
|
||
_at_[349],
|
||
_at_[346],
|
||
_at_[347],
|
||
_at_[348],
|
||
_at_[313],
|
||
_at_[308],
|
||
_at_[309],
|
||
_at_[310],
|
||
_at_[314],
|
||
_at_[297],
|
||
_at_[298],
|
||
_at_[335],
|
||
_at_[337],
|
||
_at_[336],
|
||
_at_[341],
|
||
_at_[342],
|
||
_at_[343],
|
||
_at_[344],
|
||
_at_[345],
|
||
_at_[338],
|
||
_at_[339],
|
||
_at_[340],
|
||
_at_[317],
|
||
_at_[331],
|
||
_at_[328],
|
||
_at_[321],
|
||
_at_[319],
|
||
_at_[325],
|
||
_at_[323],
|
||
_at_[326],
|
||
_at_[332],
|
||
_at_[322],
|
||
_at_[324],
|
||
_at_[320],
|
||
_at_[327],
|
||
_at_[315],
|
||
_at_[316],
|
||
_at_[241],
|
||
_at_[242],
|
||
_at_[243],
|
||
_at_[244],
|
||
_at_[245],
|
||
_at_[329],
|
||
_at_[330],
|
||
_at_[311],
|
||
_at_[312],
|
||
_at_[301],
|
||
_at_[302],
|
||
_at_[303],
|
||
_at_[350],
|
||
_at_[351],
|
||
_at_[352],
|
||
_at_[287],
|
||
_at_[286],
|
||
_at_[288],
|
||
_at_[240],
|
||
_at_[360],
|
||
_at_[354],
|
||
_at_[355],
|
||
_at_[356],
|
||
_at_[357],
|
||
_at_[358],
|
||
_at_[5],
|
||
_at_[6],
|
||
[0,
|
||
_au_[1],
|
||
_au_[3],
|
||
_au_[2],
|
||
_au_[4],
|
||
_au_[7],
|
||
_au_[5],
|
||
_au_[6],
|
||
_au_[8],
|
||
_au_[9],
|
||
_au_[10]]]}
|
||
function _ai_(_ao_)
|
||
{var _ap_=Wrapped_functions$0(_ao_);
|
||
return [0,
|
||
_ap_[1],
|
||
_ap_[6],
|
||
_ap_[11],
|
||
_ap_[12],
|
||
_ap_[9],
|
||
_ap_[7],
|
||
_ap_[8],
|
||
_ap_[19],
|
||
_ap_[18],
|
||
_ap_[5],
|
||
_ap_[17],
|
||
_ap_[16],
|
||
_ap_[15],
|
||
_ap_[20],
|
||
_ap_[14],
|
||
_ap_[13]]}
|
||
var
|
||
Html_f=
|
||
[0,
|
||
function(_al_,_ak_)
|
||
{var
|
||
_aj_=Wrapped_functions$0(_al_),
|
||
_an_=
|
||
Make_with_wrapped_functions$0
|
||
(_al_,
|
||
[0,
|
||
_aj_[1],
|
||
_aj_[6],
|
||
_aj_[11],
|
||
_aj_[12],
|
||
_aj_[9],
|
||
_aj_[7],
|
||
_aj_[8],
|
||
_aj_[19],
|
||
_aj_[18],
|
||
_aj_[5],
|
||
_aj_[17],
|
||
_aj_[16],
|
||
_aj_[15],
|
||
_aj_[20],
|
||
_aj_[14],
|
||
_aj_[13]],
|
||
_ak_),
|
||
_am_=_an_[361];
|
||
return [0,
|
||
_an_[1],
|
||
_an_[2],
|
||
_an_[3],
|
||
_an_[4],
|
||
_an_[19],
|
||
_an_[21],
|
||
_an_[20],
|
||
_an_[22],
|
||
_an_[23],
|
||
_an_[24],
|
||
_an_[27],
|
||
_an_[28],
|
||
_an_[29],
|
||
_an_[30],
|
||
_an_[31],
|
||
_an_[32],
|
||
_an_[33],
|
||
_an_[34],
|
||
_an_[35],
|
||
_an_[36],
|
||
_an_[37],
|
||
_an_[38],
|
||
_an_[39],
|
||
_an_[40],
|
||
_an_[41],
|
||
_an_[42],
|
||
_an_[43],
|
||
_an_[44],
|
||
_an_[77],
|
||
_an_[45],
|
||
_an_[46],
|
||
_an_[47],
|
||
_an_[48],
|
||
_an_[49],
|
||
_an_[50],
|
||
_an_[51],
|
||
_an_[52],
|
||
_an_[53],
|
||
_an_[54],
|
||
_an_[55],
|
||
_an_[56],
|
||
_an_[57],
|
||
_an_[58],
|
||
_an_[59],
|
||
_an_[60],
|
||
_an_[61],
|
||
_an_[62],
|
||
_an_[63],
|
||
_an_[64],
|
||
_an_[65],
|
||
_an_[66],
|
||
_an_[67],
|
||
_an_[68],
|
||
_an_[69],
|
||
_an_[70],
|
||
_an_[71],
|
||
_an_[72],
|
||
_an_[73],
|
||
_an_[74],
|
||
_an_[75],
|
||
_an_[76],
|
||
_an_[78],
|
||
_an_[79],
|
||
_an_[80],
|
||
_an_[81],
|
||
_an_[82],
|
||
_an_[83],
|
||
_an_[84],
|
||
_an_[85],
|
||
_an_[86],
|
||
_an_[87],
|
||
_an_[88],
|
||
_an_[89],
|
||
_an_[90],
|
||
_an_[91],
|
||
_an_[92],
|
||
_an_[93],
|
||
_an_[94],
|
||
_an_[95],
|
||
_an_[96],
|
||
_an_[97],
|
||
_an_[98],
|
||
_an_[99],
|
||
_an_[138],
|
||
_an_[139],
|
||
_an_[141],
|
||
_an_[142],
|
||
_an_[143],
|
||
_an_[144],
|
||
_an_[145],
|
||
_an_[146],
|
||
_an_[147],
|
||
_an_[148],
|
||
_an_[149],
|
||
_an_[150],
|
||
_an_[151],
|
||
_an_[152],
|
||
_an_[153],
|
||
_an_[154],
|
||
_an_[155],
|
||
_an_[156],
|
||
_an_[157],
|
||
_an_[158],
|
||
_an_[159],
|
||
_an_[160],
|
||
_an_[161],
|
||
_an_[162],
|
||
_an_[163],
|
||
_an_[164],
|
||
_an_[165],
|
||
_an_[166],
|
||
_an_[167],
|
||
_an_[168],
|
||
_an_[169],
|
||
_an_[170],
|
||
_an_[171],
|
||
_an_[172],
|
||
_an_[173],
|
||
_an_[174],
|
||
_an_[175],
|
||
_an_[176],
|
||
_an_[177],
|
||
_an_[178],
|
||
_an_[179],
|
||
_an_[180],
|
||
_an_[181],
|
||
_an_[140],
|
||
_an_[182],
|
||
_an_[183],
|
||
_an_[184],
|
||
_an_[185],
|
||
_an_[186],
|
||
_an_[187],
|
||
_an_[188],
|
||
_an_[189],
|
||
_an_[190],
|
||
_an_[191],
|
||
_an_[192],
|
||
_an_[193],
|
||
_an_[194],
|
||
_an_[195],
|
||
_an_[100],
|
||
_an_[101],
|
||
_an_[102],
|
||
_an_[103],
|
||
_an_[104],
|
||
_an_[105],
|
||
_an_[106],
|
||
_an_[107],
|
||
_an_[108],
|
||
_an_[109],
|
||
_an_[110],
|
||
_an_[111],
|
||
_an_[112],
|
||
_an_[113],
|
||
_an_[114],
|
||
_an_[291],
|
||
_an_[128],
|
||
_an_[132],
|
||
_an_[202],
|
||
_an_[131],
|
||
_an_[119],
|
||
_an_[120],
|
||
_an_[121],
|
||
_an_[122],
|
||
_an_[135],
|
||
_an_[136],
|
||
_an_[129],
|
||
_an_[130],
|
||
_an_[201],
|
||
_an_[137],
|
||
_an_[203],
|
||
_an_[123],
|
||
_an_[196],
|
||
_an_[117],
|
||
_an_[197],
|
||
_an_[124],
|
||
_an_[125],
|
||
_an_[126],
|
||
_an_[127],
|
||
_an_[133],
|
||
_an_[134],
|
||
_an_[200],
|
||
_an_[199],
|
||
_an_[198],
|
||
_an_[296],
|
||
_an_[205],
|
||
_an_[206],
|
||
_an_[207],
|
||
_an_[208],
|
||
_an_[209],
|
||
_an_[210],
|
||
_an_[204],
|
||
_an_[211],
|
||
_an_[212],
|
||
_an_[213],
|
||
_an_[115],
|
||
_an_[116],
|
||
_an_[118],
|
||
_an_[292],
|
||
_an_[293],
|
||
_an_[294],
|
||
_an_[214],
|
||
_an_[215],
|
||
_an_[216],
|
||
_an_[217],
|
||
_an_[218],
|
||
_an_[219],
|
||
_an_[220],
|
||
_an_[221],
|
||
_an_[222],
|
||
_an_[295],
|
||
_an_[223],
|
||
_an_[25],
|
||
_an_[26],
|
||
_an_[224],
|
||
_an_[225],
|
||
_an_[239],
|
||
_an_[234],
|
||
_an_[232],
|
||
_an_[353],
|
||
_an_[233],
|
||
_an_[231],
|
||
_an_[318],
|
||
_an_[235],
|
||
_an_[236],
|
||
_an_[237],
|
||
_an_[238],
|
||
_an_[246],
|
||
_an_[247],
|
||
_an_[248],
|
||
_an_[249],
|
||
_an_[250],
|
||
_an_[251],
|
||
_an_[252],
|
||
_an_[253],
|
||
_an_[304],
|
||
_an_[305],
|
||
_an_[306],
|
||
_an_[256],
|
||
_an_[257],
|
||
_an_[254],
|
||
_an_[255],
|
||
_an_[272],
|
||
_an_[273],
|
||
_an_[274],
|
||
_an_[275],
|
||
_an_[276],
|
||
_an_[277],
|
||
_an_[333],
|
||
_an_[334],
|
||
_an_[278],
|
||
_an_[279],
|
||
_an_[280],
|
||
_an_[281],
|
||
_an_[282],
|
||
_an_[283],
|
||
_an_[284],
|
||
_an_[285],
|
||
_an_[289],
|
||
_an_[290],
|
||
_an_[258],
|
||
_an_[259],
|
||
_an_[260],
|
||
_an_[261],
|
||
_an_[262],
|
||
_an_[263],
|
||
_an_[264],
|
||
_an_[265],
|
||
_an_[266],
|
||
_an_[267],
|
||
_an_[268],
|
||
_an_[269],
|
||
_an_[270],
|
||
_an_[271],
|
||
_an_[299],
|
||
_an_[300],
|
||
_an_[349],
|
||
_an_[346],
|
||
_an_[347],
|
||
_an_[348],
|
||
_an_[313],
|
||
_an_[308],
|
||
_an_[309],
|
||
_an_[310],
|
||
_an_[314],
|
||
_an_[297],
|
||
_an_[298],
|
||
_an_[335],
|
||
_an_[337],
|
||
_an_[336],
|
||
_an_[341],
|
||
_an_[342],
|
||
_an_[343],
|
||
_an_[344],
|
||
_an_[345],
|
||
_an_[338],
|
||
_an_[339],
|
||
_an_[340],
|
||
_an_[317],
|
||
_an_[331],
|
||
_an_[328],
|
||
_an_[321],
|
||
_an_[319],
|
||
_an_[325],
|
||
_an_[323],
|
||
_an_[326],
|
||
_an_[332],
|
||
_an_[322],
|
||
_an_[324],
|
||
_an_[320],
|
||
_an_[327],
|
||
_an_[315],
|
||
_an_[316],
|
||
_an_[241],
|
||
_an_[242],
|
||
_an_[243],
|
||
_an_[244],
|
||
_an_[245],
|
||
_an_[329],
|
||
_an_[330],
|
||
_an_[311],
|
||
_an_[312],
|
||
_an_[301],
|
||
_an_[302],
|
||
_an_[303],
|
||
_an_[350],
|
||
_an_[351],
|
||
_an_[352],
|
||
_an_[287],
|
||
_an_[286],
|
||
_an_[288],
|
||
_an_[240],
|
||
_an_[360],
|
||
_an_[354],
|
||
_an_[355],
|
||
_an_[356],
|
||
_an_[357],
|
||
_an_[358],
|
||
_an_[5],
|
||
_an_[6],
|
||
[0,
|
||
_am_[1],
|
||
_am_[3],
|
||
_am_[2],
|
||
_am_[4],
|
||
_am_[7],
|
||
_am_[5],
|
||
_am_[6],
|
||
_am_[8],
|
||
_am_[9],
|
||
_am_[10]]]},
|
||
_ai_,
|
||
_ah_];
|
||
caml_register_global(1098,Html_f,"Html_f");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# 1 "../.js/tyxml/tyxml.cma.js"
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
var
|
||
runtime=joo_global_object.jsoo_runtime,
|
||
caml_register_global=runtime.caml_register_global,
|
||
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes;
|
||
function caml_call1(f,a0)
|
||
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
|
||
function caml_call3(f,a0,a1,a2)
|
||
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
|
||
function caml_call4(f,a0,a1,a2,a3)
|
||
{return f.length == 4
|
||
?f(a0,a1,a2,a3)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3])}
|
||
function caml_call6(f,a0,a1,a2,a3,a4,a5)
|
||
{return f.length == 6
|
||
?f(a0,a1,a2,a3,a4,a5)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5])}
|
||
var
|
||
global_data=runtime.caml_get_global_data(),
|
||
cst$0=caml_string_of_jsbytes(""),
|
||
cst=caml_string_of_jsbytes(""),
|
||
cst$1=caml_string_of_jsbytes(""),
|
||
cst_CDATA=caml_string_of_jsbytes("<![CDATA["),
|
||
cst$2=caml_string_of_jsbytes("//"),
|
||
cst_CDATA$0=caml_string_of_jsbytes("//<![CDATA["),
|
||
cst$3=caml_string_of_jsbytes("/* */"),
|
||
cst_CDATA$1=caml_string_of_jsbytes("/* <![CDATA[ */"),
|
||
Stdlib_format=global_data.Stdlib__format,
|
||
Re=global_data.Re,
|
||
Stdlib_printf=global_data.Stdlib__printf,
|
||
Xml_wrap=global_data.Xml_wrap,
|
||
Xml_print=global_data.Xml_print,
|
||
Xml_iter=global_data.Xml_iter,
|
||
Xml_stream=global_data.Xml_stream,
|
||
Svg_f=global_data.Svg_f,
|
||
Html_f=global_data.Html_f,
|
||
_b_=[0,1],
|
||
_c_=
|
||
[0,
|
||
[12,10,[2,0,[12,10,[2,0,[12,10,[2,0,[12,10,0]]]]]]],
|
||
caml_string_of_jsbytes("\n%s\n%s\n%s\n")];
|
||
function uri_of_string(s){return s}
|
||
function string_of_uri(s){return s}
|
||
function acontent(param){var a=param[2];return a}
|
||
function aname(param){var name=param[1];return name}
|
||
function float_attrib(name,value){return [0,name,[0,value]]}
|
||
function int_attrib(name,value){return [0,name,[1,value]]}
|
||
function string_attrib(name,value){return [0,name,[2,value]]}
|
||
function space_sep_attrib(name,values){return [0,name,[3,0,values]]}
|
||
function comma_sep_attrib(name,values){return [0,name,[3,1,values]]}
|
||
function event_handler_attrib(name,value){return [0,name,[2,value]]}
|
||
function mouse_event_handler_attrib(name,value){return [0,name,[2,value]]}
|
||
function keyboard_event_handler_attrib(name,value)
|
||
{return [0,name,[2,value]]}
|
||
function touch_event_handler_attrib(name,value){return [0,name,[2,value]]}
|
||
function uri_attrib(name,value){return [0,name,[2,value]]}
|
||
function uris_attrib(name,values){return [0,name,[3,0,values]]}
|
||
function content(elt){return elt}
|
||
function empty(param){return 0}
|
||
function comment(c){return [0,c]}
|
||
function pcdata(d){return [2,d]}
|
||
function encodedpcdata(d){return [1,d]}
|
||
function entity(e){return [3,e]}
|
||
var _a_=caml_call1(Re[23],cst),re_end_cdata=caml_call1(Re[2],_a_);
|
||
function encoded_cdata(s1,s2,s)
|
||
{var _j5_=caml_call6(Re[22],0,0,_b_,re_end_cdata,cst$0,s);
|
||
return [1,caml_call4(Stdlib_printf[4],_c_,s1,_j5_,s2)]}
|
||
function cdata(_j4_){return encoded_cdata(cst_CDATA,cst$1,_j4_)}
|
||
function cdata_script(_j3_){return encoded_cdata(cst_CDATA$0,cst$2,_j3_)}
|
||
function cdata_style(_j2_){return encoded_cdata(cst_CDATA$1,cst$3,_j2_)}
|
||
function leaf(opt,name)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;return [4,name,a]}
|
||
function node(opt,name,children)
|
||
{if(opt)var sth=opt[1],a=sth;else var a=0;return [5,name,a,children]}
|
||
var
|
||
print_list=
|
||
caml_call1
|
||
(caml_call1
|
||
(Xml_print[12],
|
||
[0,
|
||
Xml_wrap[1],
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style,
|
||
aname,
|
||
acontent,
|
||
content]),
|
||
[0,0])
|
||
[1],
|
||
include=
|
||
caml_call1
|
||
(Xml_iter[1],
|
||
[0,
|
||
Xml_wrap[1],
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style,
|
||
aname,
|
||
acontent,
|
||
content]),
|
||
amap=include[1],
|
||
amap1=include[2],
|
||
rm_attrib=include[3],
|
||
rm_attrib_from_list=include[4],
|
||
map_int_attrib=include[5],
|
||
map_string_attrib=include[7],
|
||
map_string_attrib_in_list=include[8],
|
||
add_int_attrib=include[9],
|
||
add_string_attrib=include[11],
|
||
add_comma_sep_attrib=include[12],
|
||
add_space_sep_attrib=include[13],
|
||
fold=include[14],
|
||
all_entities=include[15],
|
||
translate=include[16],
|
||
pp=
|
||
caml_call1
|
||
(caml_call1
|
||
(Xml_print[9],
|
||
[0,
|
||
Xml_wrap[1],
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style,
|
||
aname,
|
||
acontent,
|
||
content]),
|
||
[0,0])
|
||
[1],
|
||
include$0=
|
||
caml_call1
|
||
(Xml_stream[2],
|
||
[0,
|
||
Xml_wrap[1],
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style]),
|
||
of_seq=include$0[1];
|
||
function print(fmt,x)
|
||
{return caml_call3
|
||
(print_list,caml_call1(Stdlib_format[13],fmt),0,[0,x,0])}
|
||
var
|
||
_d_=Xml_wrap[1],
|
||
Tyxml_xml=
|
||
[0,
|
||
_d_,
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style,
|
||
aname,
|
||
acontent,
|
||
content,
|
||
pp,
|
||
of_seq,
|
||
amap,
|
||
amap1,
|
||
rm_attrib,
|
||
rm_attrib_from_list,
|
||
map_int_attrib,
|
||
map_string_attrib,
|
||
map_string_attrib_in_list,
|
||
add_int_attrib,
|
||
add_string_attrib,
|
||
add_comma_sep_attrib,
|
||
add_space_sep_attrib,
|
||
fold,
|
||
all_entities,
|
||
translate,
|
||
print_list,
|
||
print];
|
||
caml_register_global(17,Tyxml_xml,"Tyxml_xml");
|
||
var
|
||
M=
|
||
caml_call1
|
||
(Svg_f[1],
|
||
[0,
|
||
_d_,
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style]),
|
||
_e_=[0,M[2],M[325],M[327]],
|
||
include$1=
|
||
caml_call1
|
||
(caml_call1
|
||
(Xml_print[8],
|
||
[0,
|
||
_d_,
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style,
|
||
aname,
|
||
acontent,
|
||
content]),
|
||
_e_),
|
||
_f_=[0,M[2],M[325],M[327]],
|
||
Make_printer=
|
||
caml_call1
|
||
(caml_call1
|
||
(Xml_print[11],
|
||
[0,
|
||
_d_,
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style,
|
||
aname,
|
||
acontent,
|
||
content]),
|
||
_f_),
|
||
_h_=M[2],
|
||
_i_=M[3],
|
||
_j_=M[4],
|
||
_k_=M[5],
|
||
_l_=M[6],
|
||
_m_=M[7],
|
||
_n_=M[8],
|
||
_o_=M[9],
|
||
_p_=M[10],
|
||
_q_=M[11],
|
||
_r_=M[12],
|
||
_s_=M[13],
|
||
_t_=M[14],
|
||
_u_=M[15],
|
||
_v_=M[16],
|
||
_w_=M[17],
|
||
_x_=M[18],
|
||
_y_=M[19],
|
||
_z_=M[20],
|
||
_A_=M[21],
|
||
_B_=M[22],
|
||
_C_=M[23],
|
||
_D_=M[24],
|
||
_E_=M[25],
|
||
_F_=M[26],
|
||
_G_=M[27],
|
||
_H_=M[28],
|
||
_I_=M[29],
|
||
_J_=M[30],
|
||
_K_=M[31],
|
||
_L_=M[32],
|
||
_M_=M[33],
|
||
_N_=M[34],
|
||
_O_=M[35],
|
||
_P_=M[36],
|
||
_Q_=M[37],
|
||
_R_=M[38],
|
||
_S_=M[39],
|
||
_T_=M[40],
|
||
_U_=M[41],
|
||
_V_=M[42],
|
||
_W_=M[43],
|
||
_X_=M[44],
|
||
_Y_=M[45],
|
||
_Z_=M[46],
|
||
___=M[47],
|
||
_$_=M[48],
|
||
_aa_=M[49],
|
||
_ab_=M[50],
|
||
_ac_=M[51],
|
||
_ad_=M[52],
|
||
_ae_=M[53],
|
||
_af_=M[54],
|
||
_ag_=M[55],
|
||
_ah_=M[56],
|
||
_ai_=M[57],
|
||
_aj_=M[58],
|
||
_ak_=M[59],
|
||
_al_=M[60],
|
||
_am_=M[61],
|
||
_an_=M[62],
|
||
_ao_=M[63],
|
||
_ap_=M[64],
|
||
_aq_=M[65],
|
||
_ar_=M[66],
|
||
_as_=M[67],
|
||
_at_=M[68],
|
||
_au_=M[69],
|
||
_av_=M[70],
|
||
_aw_=M[71],
|
||
_ax_=M[72],
|
||
_ay_=M[73],
|
||
_az_=M[74],
|
||
_aA_=M[75],
|
||
_aB_=M[76],
|
||
_aC_=M[77],
|
||
_aD_=M[78],
|
||
_aE_=M[79],
|
||
_aF_=M[80],
|
||
_aG_=M[81],
|
||
_aH_=M[82],
|
||
_aI_=M[83],
|
||
_aJ_=M[84],
|
||
_aK_=M[85],
|
||
_aL_=M[86],
|
||
_aM_=M[87],
|
||
_aN_=M[88],
|
||
_aO_=M[89],
|
||
_aP_=M[90],
|
||
_aQ_=M[91],
|
||
_aR_=M[92],
|
||
_aS_=M[93],
|
||
_aT_=M[94],
|
||
_aU_=M[95],
|
||
_aV_=M[96],
|
||
_aW_=M[97],
|
||
_aX_=M[98],
|
||
_aY_=M[99],
|
||
_aZ_=M[100],
|
||
_a0_=M[101],
|
||
_a1_=M[102],
|
||
_a2_=M[103],
|
||
_a3_=M[104],
|
||
_a4_=M[105],
|
||
_a5_=M[106],
|
||
_a6_=M[107],
|
||
_a7_=M[108],
|
||
_a8_=M[109],
|
||
_a9_=M[110],
|
||
_a__=M[111],
|
||
_a$_=M[112],
|
||
_ba_=M[113],
|
||
_bb_=M[114],
|
||
_bc_=M[115],
|
||
_bd_=M[116],
|
||
_be_=M[117],
|
||
_bf_=M[118],
|
||
_bg_=M[119],
|
||
_bh_=M[120],
|
||
_bi_=M[121],
|
||
_bj_=M[122],
|
||
_bk_=M[123],
|
||
_bl_=M[124],
|
||
_bm_=M[125],
|
||
_bn_=M[126],
|
||
_bo_=M[127],
|
||
_bp_=M[128],
|
||
_bq_=M[129],
|
||
_br_=M[130],
|
||
_bs_=M[131],
|
||
_bt_=M[132],
|
||
_bu_=M[133],
|
||
_bv_=M[134],
|
||
_bw_=M[135],
|
||
_bx_=M[136],
|
||
_by_=M[137],
|
||
_bz_=M[138],
|
||
_bA_=M[139],
|
||
_bB_=M[140],
|
||
_bC_=M[141],
|
||
_bD_=M[142],
|
||
_bE_=M[143],
|
||
_bF_=M[144],
|
||
_bG_=M[145],
|
||
_bH_=M[146],
|
||
_bI_=M[147],
|
||
_bJ_=M[148],
|
||
_bK_=M[149],
|
||
_bL_=M[150],
|
||
_bM_=M[151],
|
||
_bN_=M[152],
|
||
_bO_=M[153],
|
||
_bP_=M[154],
|
||
_bQ_=M[155],
|
||
_bR_=M[156],
|
||
_bS_=M[157],
|
||
_bT_=M[158],
|
||
_bU_=M[159],
|
||
_bV_=M[160],
|
||
_bW_=M[161],
|
||
_bX_=M[162],
|
||
_bY_=M[163],
|
||
_bZ_=M[164],
|
||
_b0_=M[165],
|
||
_b1_=M[166],
|
||
_b2_=M[167],
|
||
_b3_=M[168],
|
||
_b4_=M[169],
|
||
_b5_=M[170],
|
||
_b6_=M[171],
|
||
_b7_=M[172],
|
||
_b8_=M[173],
|
||
_b9_=M[174],
|
||
_b__=M[175],
|
||
_b$_=M[176],
|
||
_ca_=M[177],
|
||
_cb_=M[178],
|
||
_cc_=M[179],
|
||
_cd_=M[180],
|
||
_ce_=M[181],
|
||
_cf_=M[182],
|
||
_cg_=M[183],
|
||
_ch_=M[184],
|
||
_ci_=M[185],
|
||
_cj_=M[186],
|
||
_ck_=M[187],
|
||
_cl_=M[188],
|
||
_cm_=M[189],
|
||
_cn_=M[190],
|
||
_co_=M[191],
|
||
_cp_=M[192],
|
||
_cq_=M[193],
|
||
_cr_=M[194],
|
||
_cs_=M[195],
|
||
_ct_=M[196],
|
||
_cu_=M[197],
|
||
_cv_=M[198],
|
||
_cw_=M[199],
|
||
_cx_=M[200],
|
||
_cy_=M[201],
|
||
_cz_=M[202],
|
||
_cA_=M[203],
|
||
_cB_=M[204],
|
||
_cC_=M[205],
|
||
_cD_=M[206],
|
||
_cE_=M[207],
|
||
_cF_=M[208],
|
||
_cG_=M[209],
|
||
_cH_=M[210],
|
||
_cI_=M[211],
|
||
_cJ_=M[212],
|
||
_cK_=M[213],
|
||
_cL_=M[214],
|
||
_cM_=M[215],
|
||
_cN_=M[216],
|
||
_cO_=M[217],
|
||
_cP_=M[218],
|
||
_cQ_=M[219],
|
||
_cR_=M[220],
|
||
_cS_=M[221],
|
||
_cT_=M[222],
|
||
_cU_=M[223],
|
||
_cV_=M[224],
|
||
_cW_=M[225],
|
||
_cX_=M[226],
|
||
_cY_=M[227],
|
||
_cZ_=M[228],
|
||
_c0_=M[229],
|
||
_c1_=M[230],
|
||
_c2_=M[231],
|
||
_c3_=M[232],
|
||
_c4_=M[233],
|
||
_c5_=M[234],
|
||
_c6_=M[235],
|
||
_c7_=M[236],
|
||
_c8_=M[237],
|
||
_c9_=M[238],
|
||
_c__=M[239],
|
||
_c$_=M[240],
|
||
_da_=M[241],
|
||
_db_=M[242],
|
||
_dc_=M[243],
|
||
_dd_=M[244],
|
||
_de_=M[245],
|
||
_df_=M[246],
|
||
_dg_=M[247],
|
||
_dh_=M[248],
|
||
_di_=M[249],
|
||
_dj_=M[250],
|
||
_dk_=M[251],
|
||
_dl_=M[252],
|
||
_dm_=M[253],
|
||
_dn_=M[254],
|
||
_do_=M[255],
|
||
_dp_=M[256],
|
||
_dq_=M[257],
|
||
_dr_=M[258],
|
||
_ds_=M[259],
|
||
_dt_=M[260],
|
||
_du_=M[261],
|
||
_dv_=M[262],
|
||
_dw_=M[263],
|
||
_dx_=M[264],
|
||
_dy_=M[265],
|
||
_dz_=M[266],
|
||
_dA_=M[267],
|
||
_dB_=M[268],
|
||
_dC_=M[269],
|
||
_dD_=M[270],
|
||
_dE_=M[271],
|
||
_dF_=M[272],
|
||
_dG_=M[273],
|
||
_dH_=M[274],
|
||
_dI_=M[275],
|
||
_dJ_=M[276],
|
||
_dK_=M[277],
|
||
_dL_=M[278],
|
||
_dM_=M[279],
|
||
_dN_=M[280],
|
||
_dO_=M[281],
|
||
_dP_=M[282],
|
||
_dQ_=M[283],
|
||
_dR_=M[284],
|
||
_dS_=M[285],
|
||
_dT_=M[286],
|
||
_dU_=M[287],
|
||
_dV_=M[288],
|
||
_dW_=M[289],
|
||
_dX_=M[290],
|
||
_dY_=M[291],
|
||
_dZ_=M[292],
|
||
_d0_=M[293],
|
||
_d1_=M[294],
|
||
_d2_=M[295],
|
||
_d3_=M[296],
|
||
_d4_=M[297],
|
||
_d5_=M[298],
|
||
_d6_=M[299],
|
||
_d7_=M[300],
|
||
_d8_=M[301],
|
||
_d9_=M[302],
|
||
_d__=M[303],
|
||
_d$_=M[304],
|
||
_ea_=M[305],
|
||
_eb_=M[306],
|
||
_ec_=M[307],
|
||
_ed_=M[308],
|
||
_ee_=M[309],
|
||
_ef_=M[310],
|
||
_eg_=M[311],
|
||
_eh_=M[312],
|
||
_ei_=M[313],
|
||
_ej_=M[314],
|
||
_ek_=M[315],
|
||
_el_=M[316],
|
||
_em_=M[317],
|
||
_en_=M[318],
|
||
_eo_=M[319],
|
||
_ep_=M[320],
|
||
_eq_=M[321],
|
||
_er_=M[322],
|
||
_es_=M[323],
|
||
_et_=M[324],
|
||
_eu_=M[325],
|
||
_ev_=M[326],
|
||
_ew_=M[327],
|
||
_ex_=M[328],
|
||
_ey_=M[329],
|
||
_ez_=M[330],
|
||
_eA_=include$1[1],
|
||
_eB_=include$1[2],
|
||
_g_=M[1],
|
||
pp$0=caml_call4(_eB_,0,0,0,0),
|
||
pp_elt=caml_call3(_eA_,0,0,0),
|
||
Tyxml_svg=
|
||
[0,
|
||
_g_,
|
||
_h_,
|
||
_i_,
|
||
_j_,
|
||
_k_,
|
||
_l_,
|
||
_m_,
|
||
_n_,
|
||
_o_,
|
||
_p_,
|
||
_q_,
|
||
_r_,
|
||
_s_,
|
||
_t_,
|
||
_u_,
|
||
_v_,
|
||
_w_,
|
||
_x_,
|
||
_y_,
|
||
_z_,
|
||
_A_,
|
||
_B_,
|
||
_C_,
|
||
_D_,
|
||
_E_,
|
||
_F_,
|
||
_G_,
|
||
_H_,
|
||
_I_,
|
||
_J_,
|
||
_K_,
|
||
_L_,
|
||
_M_,
|
||
_N_,
|
||
_O_,
|
||
_P_,
|
||
_Q_,
|
||
_R_,
|
||
_S_,
|
||
_T_,
|
||
_U_,
|
||
_V_,
|
||
_W_,
|
||
_X_,
|
||
_Y_,
|
||
_Z_,
|
||
___,
|
||
_$_,
|
||
_aa_,
|
||
_ab_,
|
||
_ac_,
|
||
_ad_,
|
||
_ae_,
|
||
_af_,
|
||
_ag_,
|
||
_ah_,
|
||
_ai_,
|
||
_aj_,
|
||
_ak_,
|
||
_al_,
|
||
_am_,
|
||
_an_,
|
||
_ao_,
|
||
_ap_,
|
||
_aq_,
|
||
_ar_,
|
||
_as_,
|
||
_at_,
|
||
_au_,
|
||
_av_,
|
||
_aw_,
|
||
_ax_,
|
||
_ay_,
|
||
_az_,
|
||
_aA_,
|
||
_aB_,
|
||
_aC_,
|
||
_aD_,
|
||
_aE_,
|
||
_aF_,
|
||
_aG_,
|
||
_aH_,
|
||
_aI_,
|
||
_aJ_,
|
||
_aK_,
|
||
_aL_,
|
||
_aM_,
|
||
_aN_,
|
||
_aO_,
|
||
_aP_,
|
||
_aQ_,
|
||
_aR_,
|
||
_aS_,
|
||
_aT_,
|
||
_aU_,
|
||
_aV_,
|
||
_aW_,
|
||
_aX_,
|
||
_aY_,
|
||
_aZ_,
|
||
_a0_,
|
||
_a1_,
|
||
_a2_,
|
||
_a3_,
|
||
_a4_,
|
||
_a5_,
|
||
_a6_,
|
||
_a7_,
|
||
_a8_,
|
||
_a9_,
|
||
_a__,
|
||
_a$_,
|
||
_ba_,
|
||
_bb_,
|
||
_bc_,
|
||
_bd_,
|
||
_be_,
|
||
_bf_,
|
||
_bg_,
|
||
_bh_,
|
||
_bi_,
|
||
_bj_,
|
||
_bk_,
|
||
_bl_,
|
||
_bm_,
|
||
_bn_,
|
||
_bo_,
|
||
_bp_,
|
||
_bq_,
|
||
_br_,
|
||
_bs_,
|
||
_bt_,
|
||
_bu_,
|
||
_bv_,
|
||
_bw_,
|
||
_bx_,
|
||
_by_,
|
||
_bz_,
|
||
_bA_,
|
||
_bB_,
|
||
_bC_,
|
||
_bD_,
|
||
_bE_,
|
||
_bF_,
|
||
_bG_,
|
||
_bH_,
|
||
_bI_,
|
||
_bJ_,
|
||
_bK_,
|
||
_bL_,
|
||
_bM_,
|
||
_bN_,
|
||
_bO_,
|
||
_bP_,
|
||
_bQ_,
|
||
_bR_,
|
||
_bS_,
|
||
_bT_,
|
||
_bU_,
|
||
_bV_,
|
||
_bW_,
|
||
_bX_,
|
||
_bY_,
|
||
_bZ_,
|
||
_b0_,
|
||
_b1_,
|
||
_b2_,
|
||
_b3_,
|
||
_b4_,
|
||
_b5_,
|
||
_b6_,
|
||
_b7_,
|
||
_b8_,
|
||
_b9_,
|
||
_b__,
|
||
_b$_,
|
||
_ca_,
|
||
_cb_,
|
||
_cc_,
|
||
_cd_,
|
||
_ce_,
|
||
_cf_,
|
||
_cg_,
|
||
_ch_,
|
||
_ci_,
|
||
_cj_,
|
||
_ck_,
|
||
_cl_,
|
||
_cm_,
|
||
_cn_,
|
||
_co_,
|
||
_cp_,
|
||
_cq_,
|
||
_cr_,
|
||
_cs_,
|
||
_ct_,
|
||
_cu_,
|
||
_cv_,
|
||
_cw_,
|
||
_cx_,
|
||
_cy_,
|
||
_cz_,
|
||
_cA_,
|
||
_cB_,
|
||
_cC_,
|
||
_cD_,
|
||
_cE_,
|
||
_cF_,
|
||
_cG_,
|
||
_cH_,
|
||
_cI_,
|
||
_cJ_,
|
||
_cK_,
|
||
_cL_,
|
||
_cM_,
|
||
_cN_,
|
||
_cO_,
|
||
_cP_,
|
||
_cQ_,
|
||
_cR_,
|
||
_cS_,
|
||
_cT_,
|
||
_cU_,
|
||
_cV_,
|
||
_cW_,
|
||
_cX_,
|
||
_cY_,
|
||
_cZ_,
|
||
_c0_,
|
||
_c1_,
|
||
_c2_,
|
||
_c3_,
|
||
_c4_,
|
||
_c5_,
|
||
_c6_,
|
||
_c7_,
|
||
_c8_,
|
||
_c9_,
|
||
_c__,
|
||
_c$_,
|
||
_da_,
|
||
_db_,
|
||
_dc_,
|
||
_dd_,
|
||
_de_,
|
||
_df_,
|
||
_dg_,
|
||
_dh_,
|
||
_di_,
|
||
_dj_,
|
||
_dk_,
|
||
_dl_,
|
||
_dm_,
|
||
_dn_,
|
||
_do_,
|
||
_dp_,
|
||
_dq_,
|
||
_dr_,
|
||
_ds_,
|
||
_dt_,
|
||
_du_,
|
||
_dv_,
|
||
_dw_,
|
||
_dx_,
|
||
_dy_,
|
||
_dz_,
|
||
_dA_,
|
||
_dB_,
|
||
_dC_,
|
||
_dD_,
|
||
_dE_,
|
||
_dF_,
|
||
_dG_,
|
||
_dH_,
|
||
_dI_,
|
||
_dJ_,
|
||
_dK_,
|
||
_dL_,
|
||
_dM_,
|
||
_dN_,
|
||
_dO_,
|
||
_dP_,
|
||
_dQ_,
|
||
_dR_,
|
||
_dS_,
|
||
_dT_,
|
||
_dU_,
|
||
_dV_,
|
||
_dW_,
|
||
_dX_,
|
||
_dY_,
|
||
_dZ_,
|
||
_d0_,
|
||
_d1_,
|
||
_d2_,
|
||
_d3_,
|
||
_d4_,
|
||
_d5_,
|
||
_d6_,
|
||
_d7_,
|
||
_d8_,
|
||
_d9_,
|
||
_d__,
|
||
_d$_,
|
||
_ea_,
|
||
_eb_,
|
||
_ec_,
|
||
_ed_,
|
||
_ee_,
|
||
_ef_,
|
||
_eg_,
|
||
_eh_,
|
||
_ei_,
|
||
_ej_,
|
||
_ek_,
|
||
_el_,
|
||
_em_,
|
||
_en_,
|
||
_eo_,
|
||
_ep_,
|
||
_eq_,
|
||
_er_,
|
||
_es_,
|
||
_et_,
|
||
_eu_,
|
||
_ev_,
|
||
_ew_,
|
||
_ex_,
|
||
_ey_,
|
||
_ez_,
|
||
_eB_,
|
||
_eA_,
|
||
Make_printer,
|
||
pp$0,
|
||
pp_elt];
|
||
caml_register_global(19,Tyxml_svg,"Tyxml_svg");
|
||
var
|
||
M$0=
|
||
caml_call1
|
||
(caml_call1
|
||
(Html_f[1],
|
||
[0,
|
||
_d_,
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style]),
|
||
[0,
|
||
_h_,
|
||
_i_,
|
||
_j_,
|
||
_k_,
|
||
_l_,
|
||
_m_,
|
||
_n_,
|
||
_o_,
|
||
_p_,
|
||
_q_,
|
||
_r_,
|
||
_s_,
|
||
_t_,
|
||
_u_,
|
||
_v_,
|
||
_w_,
|
||
_x_,
|
||
_y_,
|
||
_z_,
|
||
_A_,
|
||
_B_,
|
||
_C_,
|
||
_D_,
|
||
_E_,
|
||
_F_,
|
||
_G_,
|
||
_H_,
|
||
_I_,
|
||
_J_,
|
||
_K_,
|
||
_L_,
|
||
_M_,
|
||
_N_,
|
||
_O_,
|
||
_P_,
|
||
_Q_,
|
||
_R_,
|
||
_S_,
|
||
_T_,
|
||
_U_,
|
||
_V_,
|
||
_W_,
|
||
_X_,
|
||
_Y_,
|
||
_Z_,
|
||
___,
|
||
_$_,
|
||
_aa_,
|
||
_ab_,
|
||
_ac_,
|
||
_ad_,
|
||
_ae_,
|
||
_af_,
|
||
_ag_,
|
||
_ah_,
|
||
_ai_,
|
||
_aj_,
|
||
_ak_,
|
||
_al_,
|
||
_am_,
|
||
_an_,
|
||
_ao_,
|
||
_ap_,
|
||
_aq_,
|
||
_ar_,
|
||
_as_,
|
||
_at_,
|
||
_au_,
|
||
_av_,
|
||
_aw_,
|
||
_ax_,
|
||
_ay_,
|
||
_az_,
|
||
_aA_,
|
||
_aB_,
|
||
_aC_,
|
||
_aD_,
|
||
_aE_,
|
||
_aF_,
|
||
_aG_,
|
||
_aH_,
|
||
_aI_,
|
||
_aJ_,
|
||
_aK_,
|
||
_aL_,
|
||
_aM_,
|
||
_aN_,
|
||
_aO_,
|
||
_aP_,
|
||
_aQ_,
|
||
_aR_,
|
||
_aS_,
|
||
_aT_,
|
||
_aU_,
|
||
_aV_,
|
||
_aW_,
|
||
_aX_,
|
||
_aY_,
|
||
_aZ_,
|
||
_a0_,
|
||
_a1_,
|
||
_a2_,
|
||
_a3_,
|
||
_a4_,
|
||
_a5_,
|
||
_a6_,
|
||
_a7_,
|
||
_a8_,
|
||
_a9_,
|
||
_a__,
|
||
_a$_,
|
||
_ba_,
|
||
_bb_,
|
||
_bc_,
|
||
_bd_,
|
||
_be_,
|
||
_bf_,
|
||
_bg_,
|
||
_bh_,
|
||
_bi_,
|
||
_bj_,
|
||
_bk_,
|
||
_bl_,
|
||
_bm_,
|
||
_bn_,
|
||
_bo_,
|
||
_bp_,
|
||
_bq_,
|
||
_br_,
|
||
_bs_,
|
||
_bt_,
|
||
_bu_,
|
||
_bv_,
|
||
_bw_,
|
||
_bx_,
|
||
_by_,
|
||
_bz_,
|
||
_bA_,
|
||
_bB_,
|
||
_bC_,
|
||
_bD_,
|
||
_bE_,
|
||
_bF_,
|
||
_bG_,
|
||
_bH_,
|
||
_bI_,
|
||
_bJ_,
|
||
_bK_,
|
||
_bL_,
|
||
_bM_,
|
||
_bN_,
|
||
_bO_,
|
||
_bP_,
|
||
_bQ_,
|
||
_bR_,
|
||
_bS_,
|
||
_bT_,
|
||
_bU_,
|
||
_bV_,
|
||
_bW_,
|
||
_bX_,
|
||
_bY_,
|
||
_bZ_,
|
||
_b0_,
|
||
_b1_,
|
||
_b2_,
|
||
_b3_,
|
||
_b4_,
|
||
_b5_,
|
||
_b6_,
|
||
_b7_,
|
||
_b8_,
|
||
_b9_,
|
||
_b__,
|
||
_b$_,
|
||
_ca_,
|
||
_cb_,
|
||
_cc_,
|
||
_cd_,
|
||
_ce_,
|
||
_cf_,
|
||
_cg_,
|
||
_ch_,
|
||
_ci_,
|
||
_cj_,
|
||
_ck_,
|
||
_cl_,
|
||
_cm_,
|
||
_cn_,
|
||
_co_,
|
||
_cp_,
|
||
_cq_,
|
||
_cr_,
|
||
_cs_,
|
||
_ct_,
|
||
_cu_,
|
||
_cv_,
|
||
_cw_,
|
||
_cx_,
|
||
_cy_,
|
||
_cz_,
|
||
_cA_,
|
||
_cB_,
|
||
_cC_,
|
||
_cD_,
|
||
_cE_,
|
||
_cF_,
|
||
_cG_,
|
||
_cH_,
|
||
_cI_,
|
||
_cJ_,
|
||
_cK_,
|
||
_cL_,
|
||
_cM_,
|
||
_cN_,
|
||
_cO_,
|
||
_cP_,
|
||
_cQ_,
|
||
_cR_,
|
||
_cS_,
|
||
_cT_,
|
||
_cU_,
|
||
_cV_,
|
||
_cW_,
|
||
_cX_,
|
||
_cY_,
|
||
_cZ_,
|
||
_c0_,
|
||
_c1_,
|
||
_c2_,
|
||
_c3_,
|
||
_c4_,
|
||
_c5_,
|
||
_c6_,
|
||
_c7_,
|
||
_c8_,
|
||
_c9_,
|
||
_c__,
|
||
_c$_,
|
||
_da_,
|
||
_db_,
|
||
_dc_,
|
||
_dd_,
|
||
_de_,
|
||
_df_,
|
||
_dg_,
|
||
_dh_,
|
||
_di_,
|
||
_dj_,
|
||
_dk_,
|
||
_dl_,
|
||
_dm_,
|
||
_dn_,
|
||
_do_,
|
||
_dp_,
|
||
_dq_,
|
||
_dr_,
|
||
_ds_,
|
||
_dt_,
|
||
_du_,
|
||
_dv_,
|
||
_dw_,
|
||
_dx_,
|
||
_dy_,
|
||
_dz_,
|
||
_dA_,
|
||
_dB_,
|
||
_dC_,
|
||
_dD_,
|
||
_dE_,
|
||
_dF_,
|
||
_dG_,
|
||
_dH_,
|
||
_dI_,
|
||
_dJ_,
|
||
_dK_,
|
||
_dL_,
|
||
_dM_,
|
||
_dN_,
|
||
_dO_,
|
||
_dP_,
|
||
_dQ_,
|
||
_dR_,
|
||
_dS_,
|
||
_dT_,
|
||
_dU_,
|
||
_dV_,
|
||
_dW_,
|
||
_dX_,
|
||
_dY_,
|
||
_dZ_,
|
||
_d0_,
|
||
_d1_,
|
||
_d2_,
|
||
_d3_,
|
||
_d4_,
|
||
_d5_,
|
||
_d6_,
|
||
_d7_,
|
||
_d8_,
|
||
_d9_,
|
||
_d__,
|
||
_d$_,
|
||
_ea_,
|
||
_eb_,
|
||
_ec_,
|
||
_ed_,
|
||
_ee_,
|
||
_ef_,
|
||
_eg_,
|
||
_eh_,
|
||
_ei_,
|
||
_ej_,
|
||
_ek_,
|
||
_el_,
|
||
_em_,
|
||
_en_,
|
||
_eo_,
|
||
_ep_,
|
||
_eq_,
|
||
_er_,
|
||
_es_,
|
||
_et_,
|
||
_eu_,
|
||
_ev_,
|
||
_ew_,
|
||
_ex_,
|
||
_ey_,
|
||
_ez_]),
|
||
_eC_=[0,M$0[2],M$0[337],M$0[339]],
|
||
include$2=
|
||
caml_call1
|
||
(caml_call1
|
||
(Xml_print[8],
|
||
[0,
|
||
_d_,
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style,
|
||
aname,
|
||
acontent,
|
||
content]),
|
||
_eC_),
|
||
_eD_=[0,M$0[2],M$0[337],M$0[339]],
|
||
Make_printer$0=
|
||
caml_call1
|
||
(caml_call1
|
||
(Xml_print[11],
|
||
[0,
|
||
_d_,
|
||
string_of_uri,
|
||
uri_of_string,
|
||
float_attrib,
|
||
int_attrib,
|
||
string_attrib,
|
||
space_sep_attrib,
|
||
comma_sep_attrib,
|
||
event_handler_attrib,
|
||
mouse_event_handler_attrib,
|
||
keyboard_event_handler_attrib,
|
||
touch_event_handler_attrib,
|
||
uri_attrib,
|
||
uris_attrib,
|
||
empty,
|
||
comment,
|
||
pcdata,
|
||
encodedpcdata,
|
||
entity,
|
||
leaf,
|
||
node,
|
||
cdata,
|
||
cdata_script,
|
||
cdata_style,
|
||
aname,
|
||
acontent,
|
||
content]),
|
||
_eD_),
|
||
_j0_=include$2[1],
|
||
_j1_=include$2[2],
|
||
_eE_=M$0[1],
|
||
_eF_=M$0[2],
|
||
_eG_=M$0[3],
|
||
_eH_=M$0[4],
|
||
_eI_=M$0[5],
|
||
_eJ_=M$0[6],
|
||
_eK_=M$0[7],
|
||
_eL_=M$0[8],
|
||
_eM_=M$0[9],
|
||
_eN_=M$0[10],
|
||
_eO_=M$0[11],
|
||
_eP_=M$0[12],
|
||
_eQ_=M$0[13],
|
||
_eR_=M$0[14],
|
||
_eS_=M$0[15],
|
||
_eT_=M$0[16],
|
||
_eU_=M$0[17],
|
||
_eV_=M$0[18],
|
||
_eW_=M$0[19],
|
||
_eX_=M$0[20],
|
||
_eY_=M$0[21],
|
||
_eZ_=M$0[22],
|
||
_e0_=M$0[23],
|
||
_e1_=M$0[24],
|
||
_e2_=M$0[25],
|
||
_e3_=M$0[26],
|
||
_e4_=M$0[27],
|
||
_e5_=M$0[28],
|
||
_e6_=M$0[29],
|
||
_e7_=M$0[30],
|
||
_e8_=M$0[31],
|
||
_e9_=M$0[32],
|
||
_e__=M$0[33],
|
||
_e$_=M$0[34],
|
||
_fa_=M$0[35],
|
||
_fb_=M$0[36],
|
||
_fc_=M$0[37],
|
||
_fd_=M$0[38],
|
||
_fe_=M$0[39],
|
||
_ff_=M$0[40],
|
||
_fg_=M$0[41],
|
||
_fh_=M$0[42],
|
||
_fi_=M$0[43],
|
||
_fj_=M$0[44],
|
||
_fk_=M$0[45],
|
||
_fl_=M$0[46],
|
||
_fm_=M$0[47],
|
||
_fn_=M$0[48],
|
||
_fo_=M$0[49],
|
||
_fp_=M$0[50],
|
||
_fq_=M$0[51],
|
||
_fr_=M$0[52],
|
||
_fs_=M$0[53],
|
||
_ft_=M$0[54],
|
||
_fu_=M$0[55],
|
||
_fv_=M$0[56],
|
||
_fw_=M$0[57],
|
||
_fx_=M$0[58],
|
||
_fy_=M$0[59],
|
||
_fz_=M$0[60],
|
||
_fA_=M$0[61],
|
||
_fB_=M$0[62],
|
||
_fC_=M$0[63],
|
||
_fD_=M$0[64],
|
||
_fE_=M$0[65],
|
||
_fF_=M$0[66],
|
||
_fG_=M$0[67],
|
||
_fH_=M$0[68],
|
||
_fI_=M$0[69],
|
||
_fJ_=M$0[70],
|
||
_fK_=M$0[71],
|
||
_fL_=M$0[72],
|
||
_fM_=M$0[73],
|
||
_fN_=M$0[74],
|
||
_fO_=M$0[75],
|
||
_fP_=M$0[76],
|
||
_fQ_=M$0[77],
|
||
_fR_=M$0[78],
|
||
_fS_=M$0[79],
|
||
_fT_=M$0[80],
|
||
_fU_=M$0[81],
|
||
_fV_=M$0[82],
|
||
_fW_=M$0[83],
|
||
_fX_=M$0[84],
|
||
_fY_=M$0[85],
|
||
_fZ_=M$0[86],
|
||
_f0_=M$0[87],
|
||
_f1_=M$0[88],
|
||
_f2_=M$0[89],
|
||
_f3_=M$0[90],
|
||
_f4_=M$0[91],
|
||
_f5_=M$0[92],
|
||
_f6_=M$0[93],
|
||
_f7_=M$0[94],
|
||
_f8_=M$0[95],
|
||
_f9_=M$0[96],
|
||
_f__=M$0[97],
|
||
_f$_=M$0[98],
|
||
_ga_=M$0[99],
|
||
_gb_=M$0[100],
|
||
_gc_=M$0[101],
|
||
_gd_=M$0[102],
|
||
_ge_=M$0[103],
|
||
_gf_=M$0[104],
|
||
_gg_=M$0[105],
|
||
_gh_=M$0[106],
|
||
_gi_=M$0[107],
|
||
_gj_=M$0[108],
|
||
_gk_=M$0[109],
|
||
_gl_=M$0[110],
|
||
_gm_=M$0[111],
|
||
_gn_=M$0[112],
|
||
_go_=M$0[113],
|
||
_gp_=M$0[114],
|
||
_gq_=M$0[115],
|
||
_gr_=M$0[116],
|
||
_gs_=M$0[117],
|
||
_gt_=M$0[118],
|
||
_gu_=M$0[119],
|
||
_gv_=M$0[120],
|
||
_gw_=M$0[121],
|
||
_gx_=M$0[122],
|
||
_gy_=M$0[123],
|
||
_gz_=M$0[124],
|
||
_gA_=M$0[125],
|
||
_gB_=M$0[126],
|
||
_gC_=M$0[127],
|
||
_gD_=M$0[128],
|
||
_gE_=M$0[129],
|
||
_gF_=M$0[130],
|
||
_gG_=M$0[131],
|
||
_gH_=M$0[132],
|
||
_gI_=M$0[133],
|
||
_gJ_=M$0[134],
|
||
_gK_=M$0[135],
|
||
_gL_=M$0[136],
|
||
_gM_=M$0[137],
|
||
_gN_=M$0[138],
|
||
_gO_=M$0[139],
|
||
_gP_=M$0[140],
|
||
_gQ_=M$0[141],
|
||
_gR_=M$0[142],
|
||
_gS_=M$0[143],
|
||
_gT_=M$0[144],
|
||
_gU_=M$0[145],
|
||
_gV_=M$0[146],
|
||
_gW_=M$0[147],
|
||
_gX_=M$0[148],
|
||
_gY_=M$0[149],
|
||
_gZ_=M$0[150],
|
||
_g0_=M$0[151],
|
||
_g1_=M$0[152],
|
||
_g2_=M$0[153],
|
||
_g3_=M$0[154],
|
||
_g4_=M$0[155],
|
||
_g5_=M$0[156],
|
||
_g6_=M$0[157],
|
||
_g7_=M$0[158],
|
||
_g8_=M$0[159],
|
||
_g9_=M$0[160],
|
||
_g__=M$0[161],
|
||
_g$_=M$0[162],
|
||
_ha_=M$0[163],
|
||
_hb_=M$0[164],
|
||
_hc_=M$0[165],
|
||
_hd_=M$0[166],
|
||
_he_=M$0[167],
|
||
_hf_=M$0[168],
|
||
_hg_=M$0[169],
|
||
_hh_=M$0[170],
|
||
_hi_=M$0[171],
|
||
_hj_=M$0[172],
|
||
_hk_=M$0[173],
|
||
_hl_=M$0[174],
|
||
_hm_=M$0[175],
|
||
_hn_=M$0[176],
|
||
_ho_=M$0[177],
|
||
_hp_=M$0[178],
|
||
_hq_=M$0[179],
|
||
_hr_=M$0[180],
|
||
_hs_=M$0[181],
|
||
_ht_=M$0[182],
|
||
_hu_=M$0[183],
|
||
_hv_=M$0[184],
|
||
_hw_=M$0[185],
|
||
_hx_=M$0[186],
|
||
_hy_=M$0[187],
|
||
_hz_=M$0[188],
|
||
_hA_=M$0[189],
|
||
_hB_=M$0[190],
|
||
_hC_=M$0[191],
|
||
_hD_=M$0[192],
|
||
_hE_=M$0[193],
|
||
_hF_=M$0[194],
|
||
_hG_=M$0[195],
|
||
_hH_=M$0[196],
|
||
_hI_=M$0[197],
|
||
_hJ_=M$0[198],
|
||
_hK_=M$0[199],
|
||
_hL_=M$0[200],
|
||
_hM_=M$0[201],
|
||
_hN_=M$0[202],
|
||
_hO_=M$0[203],
|
||
_hP_=M$0[204],
|
||
_hQ_=M$0[205],
|
||
_hR_=M$0[206],
|
||
_hS_=M$0[207],
|
||
_hT_=M$0[208],
|
||
_hU_=M$0[209],
|
||
_hV_=M$0[210],
|
||
_hW_=M$0[211],
|
||
_hX_=M$0[212],
|
||
_hY_=M$0[213],
|
||
_hZ_=M$0[214],
|
||
_h0_=M$0[215],
|
||
_h1_=M$0[216],
|
||
_h2_=M$0[217],
|
||
_h3_=M$0[218],
|
||
_h4_=M$0[219],
|
||
_h5_=M$0[220],
|
||
_h6_=M$0[221],
|
||
_h7_=M$0[222],
|
||
_h8_=M$0[223],
|
||
_h9_=M$0[224],
|
||
_h__=M$0[225],
|
||
_h$_=M$0[226],
|
||
_ia_=M$0[227],
|
||
_ib_=M$0[228],
|
||
_ic_=M$0[229],
|
||
_id_=M$0[230],
|
||
_ie_=M$0[231],
|
||
_if_=M$0[232],
|
||
_ig_=M$0[233],
|
||
_ih_=M$0[234],
|
||
_ii_=M$0[235],
|
||
_ij_=M$0[236],
|
||
_ik_=M$0[237],
|
||
_il_=M$0[238],
|
||
_im_=M$0[239],
|
||
_in_=M$0[240],
|
||
_io_=M$0[241],
|
||
_ip_=M$0[242],
|
||
_iq_=M$0[243],
|
||
_ir_=M$0[244],
|
||
_is_=M$0[245],
|
||
_it_=M$0[246],
|
||
_iu_=M$0[247],
|
||
_iv_=M$0[248],
|
||
_iw_=M$0[249],
|
||
_ix_=M$0[250],
|
||
_iy_=M$0[251],
|
||
_iz_=M$0[252],
|
||
_iA_=M$0[253],
|
||
_iB_=M$0[254],
|
||
_iC_=M$0[255],
|
||
_iD_=M$0[256],
|
||
_iE_=M$0[257],
|
||
_iF_=M$0[258],
|
||
_iG_=M$0[259],
|
||
_iH_=M$0[260],
|
||
_iI_=M$0[261],
|
||
_iJ_=M$0[262],
|
||
_iK_=M$0[263],
|
||
_iL_=M$0[264],
|
||
_iM_=M$0[265],
|
||
_iN_=M$0[266],
|
||
_iO_=M$0[267],
|
||
_iP_=M$0[268],
|
||
_iQ_=M$0[269],
|
||
_iR_=M$0[270],
|
||
_iS_=M$0[271],
|
||
_iT_=M$0[272],
|
||
_iU_=M$0[273],
|
||
_iV_=M$0[274],
|
||
_iW_=M$0[275],
|
||
_iX_=M$0[276],
|
||
_iY_=M$0[277],
|
||
_iZ_=M$0[278],
|
||
_i0_=M$0[279],
|
||
_i1_=M$0[280],
|
||
_i2_=M$0[281],
|
||
_i3_=M$0[282],
|
||
_i4_=M$0[283],
|
||
_i5_=M$0[284],
|
||
_i6_=M$0[285],
|
||
_i7_=M$0[286],
|
||
_i8_=M$0[287],
|
||
_i9_=M$0[288],
|
||
_i__=M$0[289],
|
||
_i$_=M$0[290],
|
||
_ja_=M$0[291],
|
||
_jb_=M$0[292],
|
||
_jc_=M$0[293],
|
||
_jd_=M$0[294],
|
||
_je_=M$0[295],
|
||
_jf_=M$0[296],
|
||
_jg_=M$0[297],
|
||
_jh_=M$0[298],
|
||
_ji_=M$0[299],
|
||
_jj_=M$0[300],
|
||
_jk_=M$0[301],
|
||
_jl_=M$0[302],
|
||
_jm_=M$0[303],
|
||
_jn_=M$0[304],
|
||
_jo_=M$0[305],
|
||
_jp_=M$0[306],
|
||
_jq_=M$0[307],
|
||
_jr_=M$0[308],
|
||
_js_=M$0[309],
|
||
_jt_=M$0[310],
|
||
_ju_=M$0[311],
|
||
_jv_=M$0[312],
|
||
_jw_=M$0[313],
|
||
_jx_=M$0[314],
|
||
_jy_=M$0[315],
|
||
_jz_=M$0[316],
|
||
_jA_=M$0[317],
|
||
_jB_=M$0[318],
|
||
_jC_=M$0[319],
|
||
_jD_=M$0[320],
|
||
_jE_=M$0[321],
|
||
_jF_=M$0[322],
|
||
_jG_=M$0[323],
|
||
_jH_=M$0[324],
|
||
_jI_=M$0[325],
|
||
_jJ_=M$0[326],
|
||
_jK_=M$0[327],
|
||
_jL_=M$0[328],
|
||
_jM_=M$0[329],
|
||
_jN_=M$0[330],
|
||
_jO_=M$0[331],
|
||
_jP_=M$0[332],
|
||
_jQ_=M$0[333],
|
||
_jR_=M$0[334],
|
||
_jS_=M$0[335],
|
||
_jT_=M$0[336],
|
||
_jU_=M$0[337],
|
||
_jV_=M$0[338],
|
||
_jW_=M$0[339],
|
||
_jX_=M$0[340],
|
||
_jY_=M$0[341],
|
||
_jZ_=M$0[342],
|
||
pp$1=caml_call4(_j1_,0,0,0,0),
|
||
pp_elt$0=caml_call3(_j0_,0,0,0),
|
||
Tyxml_html=
|
||
[0,
|
||
_eE_,
|
||
_eF_,
|
||
_eG_,
|
||
_eH_,
|
||
_eI_,
|
||
_eJ_,
|
||
_eK_,
|
||
_eL_,
|
||
_eM_,
|
||
_eN_,
|
||
_eO_,
|
||
_eP_,
|
||
_eQ_,
|
||
_eR_,
|
||
_eS_,
|
||
_eT_,
|
||
_eU_,
|
||
_eV_,
|
||
_eW_,
|
||
_eX_,
|
||
_eY_,
|
||
_eZ_,
|
||
_e0_,
|
||
_e1_,
|
||
_e2_,
|
||
_e3_,
|
||
_e4_,
|
||
_e5_,
|
||
_e6_,
|
||
_e7_,
|
||
_e8_,
|
||
_e9_,
|
||
_e__,
|
||
_e$_,
|
||
_fa_,
|
||
_fb_,
|
||
_fc_,
|
||
_fd_,
|
||
_fe_,
|
||
_ff_,
|
||
_fg_,
|
||
_fh_,
|
||
_fi_,
|
||
_fj_,
|
||
_fk_,
|
||
_fl_,
|
||
_fm_,
|
||
_fn_,
|
||
_fo_,
|
||
_fp_,
|
||
_fq_,
|
||
_fr_,
|
||
_fs_,
|
||
_ft_,
|
||
_fu_,
|
||
_fv_,
|
||
_fw_,
|
||
_fx_,
|
||
_fy_,
|
||
_fz_,
|
||
_fA_,
|
||
_fB_,
|
||
_fC_,
|
||
_fD_,
|
||
_fE_,
|
||
_fF_,
|
||
_fG_,
|
||
_fH_,
|
||
_fI_,
|
||
_fJ_,
|
||
_fK_,
|
||
_fL_,
|
||
_fM_,
|
||
_fN_,
|
||
_fO_,
|
||
_fP_,
|
||
_fQ_,
|
||
_fR_,
|
||
_fS_,
|
||
_fT_,
|
||
_fU_,
|
||
_fV_,
|
||
_fW_,
|
||
_fX_,
|
||
_fY_,
|
||
_fZ_,
|
||
_f0_,
|
||
_f1_,
|
||
_f2_,
|
||
_f3_,
|
||
_f4_,
|
||
_f5_,
|
||
_f6_,
|
||
_f7_,
|
||
_f8_,
|
||
_f9_,
|
||
_f__,
|
||
_f$_,
|
||
_ga_,
|
||
_gb_,
|
||
_gc_,
|
||
_gd_,
|
||
_ge_,
|
||
_gf_,
|
||
_gg_,
|
||
_gh_,
|
||
_gi_,
|
||
_gj_,
|
||
_gk_,
|
||
_gl_,
|
||
_gm_,
|
||
_gn_,
|
||
_go_,
|
||
_gp_,
|
||
_gq_,
|
||
_gr_,
|
||
_gs_,
|
||
_gt_,
|
||
_gu_,
|
||
_gv_,
|
||
_gw_,
|
||
_gx_,
|
||
_gy_,
|
||
_gz_,
|
||
_gA_,
|
||
_gB_,
|
||
_gC_,
|
||
_gD_,
|
||
_gE_,
|
||
_gF_,
|
||
_gG_,
|
||
_gH_,
|
||
_gI_,
|
||
_gJ_,
|
||
_gK_,
|
||
_gL_,
|
||
_gM_,
|
||
_gN_,
|
||
_gO_,
|
||
_gP_,
|
||
_gQ_,
|
||
_gR_,
|
||
_gS_,
|
||
_gT_,
|
||
_gU_,
|
||
_gV_,
|
||
_gW_,
|
||
_gX_,
|
||
_gY_,
|
||
_gZ_,
|
||
_g0_,
|
||
_g1_,
|
||
_g2_,
|
||
_g3_,
|
||
_g4_,
|
||
_g5_,
|
||
_g6_,
|
||
_g7_,
|
||
_g8_,
|
||
_g9_,
|
||
_g__,
|
||
_g$_,
|
||
_ha_,
|
||
_hb_,
|
||
_hc_,
|
||
_hd_,
|
||
_he_,
|
||
_hf_,
|
||
_hg_,
|
||
_hh_,
|
||
_hi_,
|
||
_hj_,
|
||
_hk_,
|
||
_hl_,
|
||
_hm_,
|
||
_hn_,
|
||
_ho_,
|
||
_hp_,
|
||
_hq_,
|
||
_hr_,
|
||
_hs_,
|
||
_ht_,
|
||
_hu_,
|
||
_hv_,
|
||
_hw_,
|
||
_hx_,
|
||
_hy_,
|
||
_hz_,
|
||
_hA_,
|
||
_hB_,
|
||
_hC_,
|
||
_hD_,
|
||
_hE_,
|
||
_hF_,
|
||
_hG_,
|
||
_hH_,
|
||
_hI_,
|
||
_hJ_,
|
||
_hK_,
|
||
_hL_,
|
||
_hM_,
|
||
_hN_,
|
||
_hO_,
|
||
_hP_,
|
||
_hQ_,
|
||
_hR_,
|
||
_hS_,
|
||
_hT_,
|
||
_hU_,
|
||
_hV_,
|
||
_hW_,
|
||
_hX_,
|
||
_hY_,
|
||
_hZ_,
|
||
_h0_,
|
||
_h1_,
|
||
_h2_,
|
||
_h3_,
|
||
_h4_,
|
||
_h5_,
|
||
_h6_,
|
||
_h7_,
|
||
_h8_,
|
||
_h9_,
|
||
_h__,
|
||
_h$_,
|
||
_ia_,
|
||
_ib_,
|
||
_ic_,
|
||
_id_,
|
||
_ie_,
|
||
_if_,
|
||
_ig_,
|
||
_ih_,
|
||
_ii_,
|
||
_ij_,
|
||
_ik_,
|
||
_il_,
|
||
_im_,
|
||
_in_,
|
||
_io_,
|
||
_ip_,
|
||
_iq_,
|
||
_ir_,
|
||
_is_,
|
||
_it_,
|
||
_iu_,
|
||
_iv_,
|
||
_iw_,
|
||
_ix_,
|
||
_iy_,
|
||
_iz_,
|
||
_iA_,
|
||
_iB_,
|
||
_iC_,
|
||
_iD_,
|
||
_iE_,
|
||
_iF_,
|
||
_iG_,
|
||
_iH_,
|
||
_iI_,
|
||
_iJ_,
|
||
_iK_,
|
||
_iL_,
|
||
_iM_,
|
||
_iN_,
|
||
_iO_,
|
||
_iP_,
|
||
_iQ_,
|
||
_iR_,
|
||
_iS_,
|
||
_iT_,
|
||
_iU_,
|
||
_iV_,
|
||
_iW_,
|
||
_iX_,
|
||
_iY_,
|
||
_iZ_,
|
||
_i0_,
|
||
_i1_,
|
||
_i2_,
|
||
_i3_,
|
||
_i4_,
|
||
_i5_,
|
||
_i6_,
|
||
_i7_,
|
||
_i8_,
|
||
_i9_,
|
||
_i__,
|
||
_i$_,
|
||
_ja_,
|
||
_jb_,
|
||
_jc_,
|
||
_jd_,
|
||
_je_,
|
||
_jf_,
|
||
_jg_,
|
||
_jh_,
|
||
_ji_,
|
||
_jj_,
|
||
_jk_,
|
||
_jl_,
|
||
_jm_,
|
||
_jn_,
|
||
_jo_,
|
||
_jp_,
|
||
_jq_,
|
||
_jr_,
|
||
_js_,
|
||
_jt_,
|
||
_ju_,
|
||
_jv_,
|
||
_jw_,
|
||
_jx_,
|
||
_jy_,
|
||
_jz_,
|
||
_jA_,
|
||
_jB_,
|
||
_jC_,
|
||
_jD_,
|
||
_jE_,
|
||
_jF_,
|
||
_jG_,
|
||
_jH_,
|
||
_jI_,
|
||
_jJ_,
|
||
_jK_,
|
||
_jL_,
|
||
_jM_,
|
||
_jN_,
|
||
_jO_,
|
||
_jP_,
|
||
_jQ_,
|
||
_jR_,
|
||
_jS_,
|
||
_jT_,
|
||
_jU_,
|
||
_jV_,
|
||
_jW_,
|
||
_jX_,
|
||
_jY_,
|
||
_jZ_,
|
||
_j1_,
|
||
_j0_,
|
||
Make_printer$0,
|
||
pp$1,
|
||
pp_elt$0];
|
||
caml_register_global(21,Tyxml_html,"Tyxml_html");
|
||
var Tyxml=[0];
|
||
caml_register_global(22,Tyxml,"Tyxml");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# 1 ".mechanic.eobjs/byte/dune__exe__Mechanic.cmo.js"
|
||
(function(joo_global_object)
|
||
{"use strict";
|
||
var
|
||
runtime=joo_global_object.jsoo_runtime,
|
||
caml_jsstring_of_string=runtime.caml_jsstring_of_string,
|
||
caml_mul=runtime.caml_mul,
|
||
caml_string_of_jsbytes=runtime.caml_string_of_jsbytes,
|
||
caml_string_of_jsstring=runtime.caml_string_of_jsstring;
|
||
function caml_call1(f,a0)
|
||
{return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])}
|
||
function caml_call2(f,a0,a1)
|
||
{return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])}
|
||
function caml_call3(f,a0,a1,a2)
|
||
{return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])}
|
||
function caml_call5(f,a0,a1,a2,a3,a4)
|
||
{return f.length == 5
|
||
?f(a0,a1,a2,a3,a4)
|
||
:runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])}
|
||
var
|
||
global_data=runtime.caml_get_global_data(),
|
||
cst_R_initialiser_compl_tement=
|
||
caml_string_of_jsbytes
|
||
("R\xc3\xa9initialiser compl\xc3\xa8tement le formulaire ?"),
|
||
cst$12=caml_string_of_jsbytes(""),
|
||
cst_nom_prenom$1=caml_string_of_jsbytes("nom_prenom"),
|
||
cst$13=caml_string_of_jsbytes(""),
|
||
cst_arrivee$1=caml_string_of_jsbytes("arrivee"),
|
||
cst$14=caml_string_of_jsbytes(""),
|
||
cst_depart$1=caml_string_of_jsbytes("depart"),
|
||
cst$10=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"),
|
||
cst_qte=caml_string_of_jsbytes("_qte"),
|
||
cst$11=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"),
|
||
cst_total=caml_string_of_jsbytes("total"),
|
||
cst_benvoi=caml_string_of_jsbytes("benvoi"),
|
||
cst_subject_R_servation_linge_=
|
||
caml_string_of_jsbytes
|
||
("?subject=R\xc3\xa9servation linge Dubuval&body="),
|
||
cst_mailto=caml_string_of_jsbytes("mailto:"),
|
||
cst_resume=caml_string_of_jsbytes("resume"),
|
||
cst$7=caml_string_of_jsbytes(", "),
|
||
cst$9=caml_string_of_jsbytes(""),
|
||
cst$8=caml_string_of_jsbytes(" "),
|
||
cst$6=caml_string_of_jsbytes(" : "),
|
||
cst$5=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"),
|
||
cst_Total=caml_string_of_jsbytes("Total : "),
|
||
cst_depart$0=caml_string_of_jsbytes("depart"),
|
||
cst_Date_de_d_part=caml_string_of_jsbytes("Date de d\xc3\xa9part : "),
|
||
cst_arrivee$0=caml_string_of_jsbytes("arrivee"),
|
||
cst_Date_d_arriv_e=
|
||
caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : "),
|
||
cst_nom_prenom$0=caml_string_of_jsbytes("nom_prenom"),
|
||
cst_Locataire=caml_string_of_jsbytes("Locataire : "),
|
||
cst$3=caml_string_of_jsbytes(", "),
|
||
cst$4=caml_string_of_jsbytes(""),
|
||
cst$2=caml_string_of_jsbytes(" : "),
|
||
cst_nom_prenom=caml_string_of_jsbytes("nom_prenom"),
|
||
cst_arrivee=caml_string_of_jsbytes("arrivee"),
|
||
cst_depart=caml_string_of_jsbytes("depart"),
|
||
cst$1=caml_string_of_jsbytes("_"),
|
||
cst$0=caml_string_of_jsbytes("_"),
|
||
cst=caml_string_of_jsbytes(""),
|
||
cst_compute=caml_string_of_jsbytes("compute"),
|
||
cst_reset_form=caml_string_of_jsbytes("reset_form"),
|
||
Js_of_ocaml_Dom_html=global_data.Js_of_ocaml__Dom_html,
|
||
Stdlib_list=global_data.Stdlib__list,
|
||
Stdlib=global_data.Stdlib,
|
||
Inventaire_linge=global_data.Inventaire_linge,
|
||
Stdlib_fun=global_data.Stdlib__fun,
|
||
Stdlib_string=global_data.Stdlib__string,
|
||
Stdlib_printf=global_data.Stdlib__printf,
|
||
Tyxml_html=global_data.Tyxml_html,
|
||
Stdlib_format=global_data.Stdlib__format,
|
||
Stdlib_buffer=global_data.Stdlib__buffer,
|
||
Js_of_ocaml_Js=global_data.Js_of_ocaml__Js,
|
||
_k_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes(" ("),[2,0,[12,41,0]]],
|
||
caml_string_of_jsbytes(" (%s)")],
|
||
_j_=[0,0,0],
|
||
_l_=[0,[15,0],caml_string_of_jsbytes("%a")],
|
||
_g_=
|
||
[0,
|
||
[11,caml_string_of_jsbytes(" ("),[2,0,[12,41,0]]],
|
||
caml_string_of_jsbytes(" (%s)")],
|
||
_h_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("\xe2\x80\x94 "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[12,32,[2,0,[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]]]]],
|
||
caml_string_of_jsbytes("\xe2\x80\x94 %d %s%s%%0A")],
|
||
_f_=[0,0,0],
|
||
_b_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes
|
||
("----- R\xc3\xa9servation linge Dubuval, Les terrasses des Choseaux, Appartement B6 -----"),
|
||
[12,37,[11,caml_string_of_jsbytes("0A"),0]]],
|
||
caml_string_of_jsbytes
|
||
("----- R\xc3\xa9servation linge Dubuval, Les terrasses des Choseaux, Appartement B6 -----%%0A")],
|
||
_c_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("Locataire : "),
|
||
[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]],
|
||
caml_string_of_jsbytes("Locataire : %s%%0A")],
|
||
_d_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : "),
|
||
[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]],
|
||
caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : %s%%0A")],
|
||
_e_=
|
||
[0,
|
||
[11,
|
||
caml_string_of_jsbytes("Date de d\xc3\xa9part : "),
|
||
[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]],
|
||
caml_string_of_jsbytes("Date de d\xc3\xa9part : %s%%0A")],
|
||
_i_=
|
||
[0,
|
||
[12,
|
||
37,
|
||
[11,
|
||
caml_string_of_jsbytes("0ATotal : "),
|
||
[4,
|
||
0,
|
||
0,
|
||
0,
|
||
[11,
|
||
caml_string_of_jsbytes(" \xe2\x82\xac"),
|
||
[12,37,[11,caml_string_of_jsbytes("0A"),0]]]]]],
|
||
caml_string_of_jsbytes("%%0ATotal : %d \xe2\x82\xac%%0A")];
|
||
function set_string_input_by_id(nm,v)
|
||
{var
|
||
match=
|
||
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][33]);
|
||
if(match)
|
||
{var inp=match[1];return inp.value = caml_jsstring_of_string(v)}
|
||
return 0}
|
||
function read_string_input_by_id(nm)
|
||
{var
|
||
match=
|
||
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][33]);
|
||
if(match){var inp=match[1];return caml_string_of_jsstring(inp.value)}
|
||
return cst}
|
||
function zero_int_input_by_id(nm)
|
||
{var
|
||
match=
|
||
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][50]);
|
||
if(match)
|
||
{var inp=match[1];
|
||
return inp.value = caml_jsstring_of_string(caml_call1(Stdlib[33],0))}
|
||
return 0}
|
||
function read_int_input_by_id(nm)
|
||
{var
|
||
match=
|
||
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][50]);
|
||
if(match)
|
||
{var inp=match[1];
|
||
return runtime.caml_int_of_string(caml_string_of_jsstring(inp.value))}
|
||
return 0}
|
||
function set_td_by_id(nm,v)
|
||
{var
|
||
match=
|
||
caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][54]);
|
||
if(match)
|
||
{var td=match[1];return td.innerHTML = caml_jsstring_of_string(v)}
|
||
return 0}
|
||
function field_id_by_fourniture(f)
|
||
{var _a$_=f[4];
|
||
function _ba_(param)
|
||
{var
|
||
p=param[1],
|
||
_bb_=caml_call1(Inventaire_linge[4],p),
|
||
_bc_=caml_call2(Stdlib[28],cst$0,_bb_);
|
||
return caml_call2(Stdlib[28],f[1],_bc_)}
|
||
return caml_call2(Stdlib_list[17],_ba_,_a$_)}
|
||
function field_id_and_piece_by_fournitu(f)
|
||
{var _a6_=f[4];
|
||
function _a7_(param)
|
||
{var
|
||
p=param[1],
|
||
_a8_=caml_call1(Inventaire_linge[5],p),
|
||
_a9_=caml_call1(Inventaire_linge[4],p),
|
||
_a__=caml_call2(Stdlib[28],cst$1,_a9_);
|
||
return [0,caml_call2(Stdlib[28],f[1],_a__),_a8_]}
|
||
return caml_call2(Stdlib_list[17],_a7_,_a6_)}
|
||
var
|
||
_a_=
|
||
caml_call2(Stdlib_list[17],field_id_by_fourniture,Inventaire_linge[6]),
|
||
all_names=caml_call1(Stdlib_list[13],_a_);
|
||
function email_body(param)
|
||
{var b=caml_call1(Stdlib_buffer[1],500);
|
||
caml_call2(Stdlib_printf[5],b,_b_);
|
||
var _aI_=read_string_input_by_id(cst_nom_prenom);
|
||
caml_call3(Stdlib_printf[5],b,_c_,_aI_);
|
||
var _aJ_=read_string_input_by_id(cst_arrivee);
|
||
caml_call3(Stdlib_printf[5],b,_d_,_aJ_);
|
||
var _aK_=read_string_input_by_id(cst_depart);
|
||
caml_call3(Stdlib_printf[5],b,_e_,_aK_);
|
||
var _aL_=Inventaire_linge[6];
|
||
function _aM_(f)
|
||
{var _aZ_=field_id_and_piece_by_fournitu(f);
|
||
function _a0_(param,_a2_)
|
||
{var
|
||
short$0=_a2_[2],
|
||
field_id=_a2_[1],
|
||
detail=param[2],
|
||
s=param[1],
|
||
q=read_int_input_by_id(field_id);
|
||
if(0 < q)
|
||
var
|
||
_a3_=caml_call1(Stdlib[33],q),
|
||
_a4_=caml_call2(Stdlib[28],cst$2,_a3_),
|
||
_a5_=[0,caml_call2(Stdlib[28],short$0,_a4_),detail];
|
||
else
|
||
var _a5_=detail;
|
||
return [0,s + q | 0,_a5_]}
|
||
var param=caml_call3(Stdlib_list[22],_a0_,_f_,_aZ_),_a1_=param[1];
|
||
if(0 === _a1_)return 0;
|
||
var detail=param[2];
|
||
return [0,[0,f[2],_a1_,detail]]}
|
||
var _aN_=caml_call2(Stdlib_list[20],_aM_,_aL_);
|
||
function _aO_(param)
|
||
{var detail=param[3],q=param[2],descr=param[1];
|
||
if(detail)
|
||
var
|
||
_aX_=caml_call2(Stdlib_string[7],cst$3,detail),
|
||
_aY_=caml_call2(Stdlib_printf[4],_g_,_aX_);
|
||
else
|
||
var _aY_=cst$4;
|
||
return caml_call5(Stdlib_printf[5],b,_h_,q,descr,_aY_)}
|
||
caml_call2(Stdlib_list[15],_aO_,_aN_);
|
||
var _aP_=Inventaire_linge[6],_aQ_=0;
|
||
function _aR_(total,f)
|
||
{var _aT_=field_id_by_fourniture(f),_aU_=0;
|
||
function _aV_(s,field_id)
|
||
{return s + read_int_input_by_id(field_id) | 0}
|
||
var _aW_=caml_call3(Stdlib_list[22],_aV_,_aU_,_aT_);
|
||
return total + caml_mul(f[3],_aW_) | 0}
|
||
var _aS_=caml_call3(Stdlib_list[22],_aR_,_aQ_,_aP_);
|
||
caml_call3(Stdlib_printf[5],b,_i_,_aS_);
|
||
return caml_call1(Stdlib_buffer[2],b)}
|
||
function resume_body(param)
|
||
{var
|
||
_H_=[0,caml_call1(Tyxml_html[218],cst$5),0],
|
||
_G_=0,
|
||
_I_=Inventaire_linge[6],
|
||
_J_=0;
|
||
function _K_(total,f)
|
||
{var _aE_=field_id_by_fourniture(f),_aF_=0;
|
||
function _aG_(s,field_id)
|
||
{return s + read_int_input_by_id(field_id) | 0}
|
||
var _aH_=caml_call3(Stdlib_list[22],_aG_,_aF_,_aE_);
|
||
return total + caml_mul(f[3],_aH_) | 0}
|
||
var
|
||
_L_=caml_call3(Stdlib_list[22],_K_,_J_,_I_),
|
||
_M_=caml_call1(Stdlib[33],_L_),
|
||
_N_=[0,caml_call1(Tyxml_html[218],_M_),_H_],
|
||
_O_=[0,caml_call1(Tyxml_html[218],cst_Total),0],
|
||
_P_=[0,caml_call2(Tyxml_html[253],0,_O_),_N_],
|
||
_Q_=[0,caml_call2(Tyxml_html[240],0,_P_),_G_],
|
||
_R_=[0,caml_call2(Tyxml_html[263],0,0),_Q_],
|
||
_S_=Inventaire_linge[6];
|
||
function _T_(f)
|
||
{var _aw_=field_id_and_piece_by_fournitu(f);
|
||
function _ax_(param,_aA_)
|
||
{var
|
||
short$0=_aA_[2],
|
||
field_id=_aA_[1],
|
||
detail=param[2],
|
||
s=param[1],
|
||
q=read_int_input_by_id(field_id);
|
||
if(0 < q)
|
||
var
|
||
_aB_=caml_call1(Stdlib[33],q),
|
||
_aC_=caml_call2(Stdlib[28],cst$6,_aB_),
|
||
_aD_=[0,caml_call2(Stdlib[28],short$0,_aC_),detail];
|
||
else
|
||
var _aD_=detail;
|
||
return [0,s + q | 0,_aD_]}
|
||
var param=caml_call3(Stdlib_list[22],_ax_,_j_,_aw_),_ay_=param[1];
|
||
if(0 === _ay_)return 0;
|
||
var detail=param[2],_az_=caml_call1(Stdlib_list[9],detail);
|
||
return [0,[0,f[2],_ay_,_az_]]}
|
||
var _U_=caml_call2(Stdlib_list[20],_T_,_S_);
|
||
function _V_(param)
|
||
{var detail=param[3],q=param[2],descr=param[1],_ao_=0;
|
||
if(detail)
|
||
var
|
||
_ap_=caml_call2(Stdlib_string[7],cst$7,detail),
|
||
_aq_=caml_call2(Stdlib_printf[4],_k_,_ap_);
|
||
else
|
||
var _aq_=cst$9;
|
||
var
|
||
_ar_=[0,caml_call1(Tyxml_html[218],_aq_),_ao_],
|
||
_as_=[0,caml_call1(Tyxml_html[218],descr),_ar_],
|
||
_at_=[0,caml_call1(Tyxml_html[218],cst$8),_as_],
|
||
_au_=caml_call1(Stdlib[33],q),
|
||
_av_=[0,caml_call1(Tyxml_html[218],_au_),_at_];
|
||
return caml_call2(Tyxml_html[249],0,_av_)}
|
||
var
|
||
_W_=caml_call2(Stdlib_list[17],_V_,_U_),
|
||
_X_=[0,caml_call2(Tyxml_html[246],0,_W_),_R_],
|
||
_Y_=[0,caml_call2(Tyxml_html[263],0,0),_X_],
|
||
_Z_=read_string_input_by_id(cst_depart$0),
|
||
___=[0,caml_call1(Tyxml_html[218],_Z_),0],
|
||
_$_=[0,caml_call1(Tyxml_html[218],cst_Date_de_d_part),___],
|
||
_aa_=[0,caml_call2(Tyxml_html[253],0,_$_),0],
|
||
_ab_=[0,caml_call2(Tyxml_html[240],0,_aa_),_Y_],
|
||
_ac_=read_string_input_by_id(cst_arrivee$0),
|
||
_ad_=[0,caml_call1(Tyxml_html[218],_ac_),0],
|
||
_ae_=[0,caml_call1(Tyxml_html[218],cst_Date_d_arriv_e),_ad_],
|
||
_af_=[0,caml_call2(Tyxml_html[253],0,_ae_),0],
|
||
_ag_=[0,caml_call2(Tyxml_html[240],0,_af_),_ab_],
|
||
_ah_=read_string_input_by_id(cst_nom_prenom$0),
|
||
_ai_=[0,caml_call1(Tyxml_html[218],_ah_),0],
|
||
_aj_=[0,caml_call1(Tyxml_html[218],cst_Locataire),_ai_],
|
||
_ak_=[0,caml_call2(Tyxml_html[253],0,_aj_),0],
|
||
_al_=[0,caml_call2(Tyxml_html[240],0,_ak_),_ag_],
|
||
_am_=caml_call2(Tyxml_html[243],0,_al_),
|
||
_an_=caml_call3(Tyxml_html[344],0,0,0);
|
||
return caml_jsstring_of_string
|
||
(caml_call3(Stdlib_format[127],_l_,_an_,_am_))}
|
||
function update_msg(param)
|
||
{var
|
||
match=
|
||
caml_call2
|
||
(Js_of_ocaml_Dom_html[5],cst_benvoi,Js_of_ocaml_Dom_html[117][2]);
|
||
if(match)
|
||
{var
|
||
a=match[1],
|
||
_D_=email_body(0),
|
||
_E_=caml_call2(Stdlib[28],cst_subject_R_servation_linge_,_D_),
|
||
_F_=caml_call2(Stdlib[28],Inventaire_linge[2],_E_);
|
||
a.href
|
||
=
|
||
caml_jsstring_of_string(caml_call2(Stdlib[28],cst_mailto,_F_))}
|
||
var
|
||
match$0=
|
||
caml_call2
|
||
(Js_of_ocaml_Dom_html[5],cst_resume,Js_of_ocaml_Dom_html[117][15]);
|
||
if(match$0)
|
||
{var resume=match$0[1];return resume.innerHTML = resume_body(0)}
|
||
return 0}
|
||
function compute(param)
|
||
{var _m_=Inventaire_linge[6];
|
||
function _n_(f)
|
||
{var _x_=field_id_by_fourniture(f),_y_=0;
|
||
function _z_(s,field_id)
|
||
{return s + read_int_input_by_id(field_id) | 0}
|
||
var
|
||
qte=caml_call3(Stdlib_list[22],_z_,_y_,_x_),
|
||
_A_=caml_call1(Stdlib[33],caml_mul(qte,f[3])),
|
||
_B_=caml_call2(Stdlib[28],_A_,cst$10);
|
||
set_td_by_id(f[1],_B_);
|
||
var _C_=caml_call1(Stdlib[33],qte);
|
||
return set_td_by_id(caml_call2(Stdlib[28],f[1],cst_qte),_C_)}
|
||
caml_call2(Stdlib_list[15],_n_,_m_);
|
||
var _o_=Inventaire_linge[6],_p_=0;
|
||
function _q_(total,f)
|
||
{var _t_=field_id_by_fourniture(f),_u_=0;
|
||
function _v_(s,field_id)
|
||
{return s + read_int_input_by_id(field_id) | 0}
|
||
var _w_=caml_call3(Stdlib_list[22],_v_,_u_,_t_);
|
||
return total + caml_mul(f[3],_w_) | 0}
|
||
var
|
||
_r_=caml_call3(Stdlib_list[22],_q_,_p_,_o_),
|
||
_s_=caml_call1(Stdlib[33],_r_);
|
||
set_td_by_id(cst_total,caml_call3(Stdlib_fun[2],Stdlib[28],cst$11,_s_));
|
||
return update_msg(0)}
|
||
function reset_form(param)
|
||
{var
|
||
doit=
|
||
Js_of_ocaml_Dom_html[8].confirm
|
||
(caml_jsstring_of_string(cst_R_initialiser_compl_tement))
|
||
|
|
||
0;
|
||
return doit
|
||
?(set_string_input_by_id(cst_nom_prenom$1,cst$12),
|
||
set_string_input_by_id(cst_arrivee$1,cst$13),
|
||
set_string_input_by_id(cst_depart$1,cst$14),
|
||
caml_call2(Stdlib_list[15],zero_int_input_by_id,all_names),
|
||
compute(0))
|
||
:doit}
|
||
caml_call2(Js_of_ocaml_Js[48],cst_compute,compute);
|
||
caml_call2(Js_of_ocaml_Js[48],cst_reset_form,reset_form);
|
||
var
|
||
Dune_exe_Mechanic=
|
||
[0,
|
||
set_string_input_by_id,
|
||
read_string_input_by_id,
|
||
zero_int_input_by_id,
|
||
read_int_input_by_id,
|
||
set_td_by_id,
|
||
field_id_by_fourniture,
|
||
field_id_and_piece_by_fournitu,
|
||
all_names,
|
||
email_body,
|
||
resume_body,
|
||
update_msg,
|
||
compute,
|
||
reset_form];
|
||
runtime.caml_register_global(68,Dune_exe_Mechanic,"Dune__exe__Mechanic");
|
||
return}
|
||
(function(){return this}()));
|
||
|
||
|
||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtZWNoYW5pYy5iYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJuYW1lcyI6WyJjYW1sX2ludDY0X2lzX3plcm8iLCJ4IiwiY2FtbF9zdHJfcmVwZWF0IiwibiIsInMiLCJyIiwibCIsImNhbWxfaW50NjRfb2Zmc2V0IiwiTWF0aCIsImNhbWxfcmFpc2VfY29uc3RhbnQiLCJ0YWciLCJjYW1sX2dsb2JhbF9kYXRhIiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ0aGlzIiwieGhpIiwiaCIsInNpZ24iLCJvZmZzZXQiLCJtb2R1bHVzIiwiZGl2aXNvciIsInF1b3RpZW50IiwieSIsInEiLCJjYW1sX2ludDY0X29mX2ludDMyIiwiY2FtbF9pbnQ2NF90b19pbnQzMiIsImNhbWxfaW50NjRfaXNfbmVnYXRpdmUiLCJjYW1sX2ludDY0X25lZyIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImEiLCJpIiwibGVuIiwiZiIsIlN0cmluZyIsIm51bGwiLCJjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIiwiY2FtbF9qc2J5dGVzX29mX3N0cmluZyIsImNhbWxfcmFpc2Vfd2l0aF9hcmciLCJhcmciLCJqc29vX2lzX2FzY2lpIiwiY2FtbF91dGYxNl9vZl91dGY4IiwiYiIsInQiLCJjIiwiYzEiLCJjMiIsInYiLCJqIiwiTWxCeXRlcyIsImNvbnRlbnRzIiwibGVuZ3RoIiwiY29udGVudCIsImNhbWxfYnl0ZXNfb2ZfanNieXRlcyIsImNhbWxfc3RyaW5nX29mX2pzYnl0ZXMiLCJjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIiwibXNnIiwiY2FtbF9pbnZhbGlkX2FyZ3VtZW50IiwiY2FtbF9wYXJzZV9mb3JtYXQiLCJmbXQiLCJjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nIiwicmF3YnVmZmVyIiwiYnVmZmVyIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwicCIsImNhbWxfZXhwbTFfZmxvYXQiLCJ6IiwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmciLCJqb29fZ2xvYmFsX29iamVjdCIsImNhbWxfY3VycmVudF9kaXIiLCJjYW1sX21ha2VfcGF0aCIsIm5hbWUiLCJjb21wIiwibmNvbXAiLCJjYW1sX2lzX21sX2J5dGVzIiwiY2FtbF9pc19tbF9zdHJpbmciLCJjYW1sX2J5dGVzX29mX2FycmF5IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX3V0Zjhfb2ZfdXRmMTYiLCJkIiwiY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyIsImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIiwiY2FtbF9yYWlzZV9zeXNfZXJyb3IiLCJjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSIsImNhbWxfYnl0ZXNfYm91bmRfZXJyb3IiLCJjYW1sX2J5dGVzX3Vuc2FmZV9nZXQiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJBcnJheSIsImNhbWxfYmxpdF9ieXRlcyIsInMxIiwiaTEiLCJzMiIsImkyIiwiY2FtbF9ibGl0X3N0cmluZyIsImUiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZURldmljZSIsInJvb3QiLCJyZXMiLCJuYW1lX3NsYXNoIiwiUmVnRXhwIiwic2VlbiIsIm0iLCJvayIsImZpbGUiLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX2FycmF5X29mX3N0cmluZyIsImNhbWxfYXJyYXlfb2ZfYnl0ZXMiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2J5dGVzX3NldCIsIk1sTm9kZUZpbGUiLCJmZCIsInJlcXVpcmUiLCJlcnIiLCJidWZfb2Zmc2V0IiwiTWxOb2RlRGV2aWNlIiwiY29uc3RzIiwia2V5IiwibyIsImNhbWxfcm9vdCIsImZzX25vZGVfc3VwcG9ydGVkIiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwicGF0aCIsImNhbWxfc3lzX2lzX2RpcmVjdG9yeSIsImNhbWxfcmFpc2Vfbm90X2ZvdW5kIiwiY2FtbF9zeXNfZ2V0ZW52IiwiZyIsInVuZGVmaW5lZCIsInNoaWZ0X3JpZ2h0X25hdCIsIm5hdDEiLCJvZnMxIiwibGVuMSIsIm5hdDIiLCJvZnMyIiwibmJpdHMiLCJ3cmFwIiwiY2FtbF9uYW1lZF92YWx1ZXMiLCJjYW1sX25hbWVkX3ZhbHVlIiwibm0iLCJjYW1sX2dyX3N0YXRlIiwiY2FtbF9ncl9zdGF0ZV9nZXQiLCJjYW1sX2dyX3BvaW50X2NvbG9yIiwiaW0iLCJNbE9iamVjdFRhYmxlIiwiTmFpdmVMb29rdXAiLCJvYmpzIiwiY2FtbF9mYWlsd2l0aCIsImNhbWxfc3lzX3JlbmFtZSIsIm9fcm9vdCIsIm5fcm9vdCIsImNhbWxfbG9nMTBfZmxvYXQiLCJjYW1sX3J1bnRpbWVfd2FybmluZ3MiLCJjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzIiwiYm9vbCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9tbF9yZWZpbGxfaW5wdXQiLCJjaGFuIiwic3RyIiwic3RyX2xlbiIsImNhbWxfbWxfY2hhbm5lbHMiLCJjYW1sX21sX21heV9yZWZpbGxfaW5wdXQiLCJjaGFuaWQiLCJjYW1sX2FycmF5X2JvdW5kX2Vycm9yIiwiY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmUiLCJjYW1sX2djX21pbm9yIiwiY2FtbF9pbnQ2NF9vZl9ieXRlcyIsImNhbWxfYmFfdWludDhfZ2V0NjQiLCJiYSIsImkwIiwib2ZzIiwiYjEiLCJiMiIsImIzIiwiYjQiLCJiNSIsImI2IiwiYjciLCJiOCIsImNhbWxfaW50NjRfdG9fYnl0ZXMiLCJjYW1sX2ludDY0X21hcnNoYWwiLCJ3cml0ZXIiLCJzaXplcyIsImNhbWxfYmFfbnVtX2RpbXMiLCJjYW1sX3JldHVybl9leG5fY29uc3RhbnQiLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9jcmVhdGVfZmlsZSIsImNhbWxfZnNfaW5pdCIsInRtcCIsImNhbWxfc2V0X3BhcnNlcl90cmFjZSIsImNhbWxfbGlzdF9vZl9qc19hcnJheSIsInVuaXhfZ2V0dGltZW9mZGF5IiwiRGF0ZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJudW1fZGlnaXRzX25hdCIsIm5hdCIsImNhbWxfaGFzaF9uYXQiLCJjYW1sX2NhbGxfZ2VuIiwiYXJncyIsImFyZ3NMZW4iLCJleHRyYV9hcmdzIiwiYXJndW1lbnRzIiwibmFyZ3MiLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzIiwiY2FtbF9zeXNfY2hkaXIiLCJkaXIiLCJjYW1sX2djX2NvdW50ZXJzIiwiY2FtbF9ncl9zeW5jaHJvbml6ZSIsImxvZzJfb2siLCJqc29vX2Zsb29yX2xvZzIiLCJJbmZpbml0eSIsImNhbWxfaW50MzJfYml0c19vZl9mbG9hdCIsImZsb2F0MzJhIiwiaW50MzJhIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9iYV9zZXJpYWxpemUiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyIsIk5hTiIsImNhbWxfYmFfZ2V0X3NpemUiLCJkaW1zIiwibl9kaW1zIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkiLCJjYW1sX2ludDY0X2hpMzIiLCJjYW1sX2ludDY0X2xvMzIiLCJNbF9CaWdhcnJheSIsImxheW91dCIsInJlIiwidG90YWwiLCJrMSIsImsyIiwiTWxfQmlnYXJyYXlfY18xXzEiLCJjYW1sX2JhX2NyZWF0ZV91bnNhZmUiLCJzaXplX3Blcl9lbGVtZW50IiwiY2FtbF9iYV9kZXNlcmlhbGl6ZSIsInJlYWRlciIsIm51bV9kaW1zIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfaGFzaF9taXhfaW50NjQiLCJjYW1sX2hhc2hfbWl4X2Zsb2F0IiwidjAiLCJjYW1sX2JhX2hhc2giLCJudW1fZWx0cyIsInciLCJjYW1sX2ludDMyX3VubWFyc2hhbCIsImNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCIsImNhbWxfaW50NjRfdW5tYXJzaGFsIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNhbWxfY29tcGFyZV92YWxfdGFnIiwiTnVtYmVyIiwiY2FtbF9pbnRfY29tcGFyZSIsImNhbWxfYnl0ZXNfY29tcGFyZSIsImNhbWxfc3RyaW5nX2NvbXBhcmUiLCJjYW1sX2NvbXBhcmVfdmFsIiwic3RhY2siLCJ0YWdfYSIsInRhZ19iIiwiY2FtbF9ncmVhdGVydGhhbiIsImRpdl9oZWxwZXIiLCJkaXZfZGlnaXRfbmF0IiwibmF0cSIsIm9mc3EiLCJuYXRyIiwib2ZzciIsInJlbSIsIm51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdCIsInNoaWZ0X2xlZnRfbmF0IiwiTWxOYXQiLCJjcmVhdGVfbmF0IiwiYXJyIiwic2V0X3RvX3plcm9fbmF0IiwiaW5jcl9uYXQiLCJjYXJyeV9pbiIsImNhcnJ5IiwiYWRkX25hdCIsImxlbjIiLCJuYXRfb2ZfYXJyYXkiLCJtdWx0X2RpZ2l0X25hdCIsIm5hdDMiLCJvZnMzIiwieDEiLCJ4MiIsIngzIiwiZGVjcl9uYXQiLCJib3Jyb3ciLCJzdWJfbmF0IiwiY29tcGFyZV9uYXQiLCJkaXZfbmF0IiwicXVvIiwiY2FtbF9iYV9ibGl0Iiwic3JjIiwiZHN0IiwiaXNfZGlnaXRfaW50IiwiY2FtbF9pbnQ2NF9kaXYiLCJjYW1sX2pzX2h0bWxfZW50aXRpZXMiLCJlbnRpdHkiLCJ0ZW1wIiwiZG9jdW1lbnQiLCJjYW1sX3N0cmluZ191bnNhZmVfc2V0IiwiY2FtbF9pbnQ2NF9vZl9mbG9hdCIsImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0IiwiY2FtbF9iYV9zZXRfMiIsImNhbWxfYXJndiIsIm1haW4iLCJhcmd2IiwiYXJnczIiLCJjYW1sX2V4ZWN1dGFibGVfbmFtZSIsImNhbWxfanNfZXZhbF9zdHJpbmciLCJldmFsIiwiY2FtbF9DYW1saW50ZXJuYWxNb2RfaW5pdF9tb2QiLCJsb2MiLCJzaGFwZSIsInVuZGVmX21vZHVsZSIsIl94IiwibG9vcCIsInN0cnVjdCIsImlkeCIsInNlcmlhbGl6ZV9uYXQiLCJjYW1sX21lbXByb2Zfc2V0IiwiX2NvbnRyb2wiLCJjYW1sX3N5c19leGl0IiwiY29kZSIsImNhbWxfanNfZnJvbV9hcnJheSIsImNhbWxfYmFfcmVzaGFwZSIsInZpbmQiLCJuZXdfZGltIiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9zZXRfb29faWQiLCJjYW1sX2dyX2ZpbGxfcmVjdCIsImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhIiwic3RyMSIsInBvczEiLCJiYTIiLCJwb3MyIiwic2xpY2UiLCJjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUiLCJqc25hbWUiLCJjYW1sX2dldF9nbG9iYWxfZGF0YSIsImNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQiLCJjYW1sX2JhX3VpbnQ4X2dldDE2IiwiY2FtbF9jb21wYXJlIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfaW50NjRfdG9fZmxvYXQiLCJjYW1sX2JhX2dldF8xIiwiY2FtbF9iaWdzdHJpbmdfbWVtY21wIiwiY2FtbF9uZXdfc3RyaW5nIiwiY2FtbF9iYV91aW50OF9nZXQzMiIsImNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgiLCJjYW1sX29ial9ibG9jayIsImNhbWxfZ3JfY2xlYXJfZ3JhcGgiLCJiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIiwiYnMiLCJseG9yX2RpZ2l0X25hdCIsImNhbWxfZmluYWxfcmVsZWFzZSIsImNhbWxfanNfdG9fYXJyYXkiLCJjYW1sX2dyX3Bsb3QiLCJjb2xvciIsImNhbWxfYnl0ZXNfc2V0NjQiLCJpNjQiLCJjYW1sX2J5dGVzX3NldDE2IiwiaTE2IiwiY2FtbF9zdHJpbmdfc2V0MTYiLCJjYW1sX2ludDY0X2Jzd2FwIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9maWxsX3N0cmluZyIsImNhbWxfZ2NfbWFqb3IiLCJjYW1sX2xleF9hcnJheSIsImNhbWxfbGV4X2VuZ2luZSIsInRibCIsInN0YXJ0X3N0YXRlIiwibGV4YnVmIiwibGV4X2J1ZmZlciIsImxleF9idWZmZXJfbGVuIiwibGV4X3N0YXJ0X3BvcyIsImxleF9jdXJyX3BvcyIsImxleF9sYXN0X3BvcyIsImxleF9sYXN0X2FjdGlvbiIsImxleF9lb2ZfcmVhY2hlZCIsImxleF9iYXNlIiwibGV4X2JhY2t0cmsiLCJsZXhfZGVmYXVsdCIsImxleF90cmFucyIsImxleF9jaGVjayIsInN0YXRlIiwiYmFzZSIsImJhY2t0cmsiLCJjYW1sX3N5c19maWxlX2V4aXN0cyIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QiLCJjYW1sX2FycmF5X3N1YiIsImEyIiwiY2FtbF9ieXRlc19lcXVhbCIsImNhbWxfZ3Jfc2l6ZV94IiwiY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiIsImNhbWxfY29zaF9mbG9hdCIsImNhbWxfZXBoZV9rZXlfb2Zmc2V0IiwiY2FtbF93ZWFrX2NoZWNrIiwiY2FtbF9lcGhlX2NoZWNrX2tleSIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2dyX3RleHRfc2l6ZSIsInR4dCIsImNhbWxfbGV4X3J1bl9tZW0iLCJtZW0iLCJjdXJyX3BvcyIsImNhbWxfbGV4X3J1bl90YWciLCJjYW1sX25ld19sZXhfZW5naW5lIiwibGV4X21lbSIsImxleF9iYXNlX2NvZGUiLCJsZXhfYmFja3Rya19jb2RlIiwibGV4X2RlZmF1bHRfY29kZSIsImxleF90cmFuc19jb2RlIiwibGV4X2NoZWNrX2NvZGUiLCJsZXhfY29kZSIsInBjX29mZiIsInBzdGF0ZSIsImJhc2VfY29kZSIsImNhbWxfYmFfdWludDhfc2V0NjQiLCJjYW1sX3N5c19leGVjdXRhYmxlX25hbWUiLCJjYW1sX2xlc3NlcXVhbCIsImNhbWxfbWxfZmx1c2giLCJvdXRwdXQiLCJjYW1sX21sX3NlZWtfb3V0XzY0IiwiY29tcGFyZV9uYXRfcmVhbCIsImNhbWxfZ2Nfc2V0IiwiY2FtbF9qc19nZXQiLCJjYW1sX2djX2NvbXBhY3Rpb24iLCJjYW1sX3dlYWtfZ2V0IiwiY2FtbF9lcGhlX2dldF9rZXkiLCJjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhIiwid2luX2NsZWFudXAiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX3N5c19pc2F0dHkiLCJfY2hhbiIsImlzX2RpZ2l0X3plcm8iLCJ1bml4X2luZXRfYWRkcl9vZl9zdHJpbmciLCJjYW1sX2pzX3NldCIsImNhbWxfYXJyYXlfZ2V0IiwiYXJyYXkiLCJpbmRleCIsImNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlIiwiY2FtbF9pbnQ2NF9zdWIiLCJjYW1sX21sX3NlZWtfaW5fNjQiLCJjYW1sX2ludDY0X3NoaWZ0X2xlZnQiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zeXNfY29uc3RfaW50X3NpemUiLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayIsImNhbWxfaXNfanMiLCJjYW1sX2JhX2RpbSIsImNhbWxfYmFfZGltXzEiLCJ1bml4X2xvY2FsdGltZSIsImRfbnVtIiwiamFudWFyeWZpcnN0IiwiZG95IiwiamFuIiwianVsIiwic3RkVGltZXpvbmVPZmZzZXQiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfd2Vha19jcmVhdGUiLCJjYW1sX2VwaGVfY3JlYXRlIiwiY2FtbF9qc190b19ieXRlX3N0cmluZyIsInVuaXhfbWt0aW1lIiwidG0iLCJ0bTIiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF93ZWFrX3NldCIsImNhbWxfc3lzX3JlbW92ZSIsImNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yIiwiY2FtbF9zdHJpbmdfZ2V0MzIiLCJjYW1sX2h5cG90X2Zsb2F0IiwiY2FtbF9qc19jYWxsIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfZXBoZV91bnNldF9rZXkiLCJjYW1sX2hhc2hfbWl4X2J5dGVzX2FyciIsImNhbWxfaGFzaF9taXhfanNieXRlcyIsImNhbWxfaGFzaF9taXhfYnl0ZXMiLCJjYW1sX2J5dGVzX2xlc3N0aGFuIiwiY2FtbF9ncl9maWxsX3BvbHkiLCJhciIsImNhbWxfZ2NfcXVpY2tfc3RhdCIsImNhbWxfcmFpc2VfZW5kX29mX2ZpbGUiLCJjYW1sX21sX2lucHV0X2ludCIsImNhbWxfZ3JfZGlzcGxheV9tb2RlIiwibnRoX2RpZ2l0X25hdCIsImNhbWxfYXJyYXlfYmxpdCIsImExIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtMyIsIm1hbnRpc3NhIiwicGFyc2VJbnQiLCJleHBvbmVudCIsImNhbWxfc3lzX2dldGN3ZCIsImNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4iLCJjYW1sX2xpc3RfdG9fanNfYXJyYXkiLCJjYW1sX2xlZ2FjeV9jdXN0b21fY29kZSIsImNhbWxfb3V0cHV0X3ZhbCIsIldyaXRlciIsInZhbHVlIiwiZmxhZ3MiLCJub19zaGFyaW5nIiwiY2xvc3VyZXMiLCJpbnRlcm5fb2JqX3RhYmxlIiwibWVtbyIsImV4aXN0aW5nX29mZnNldCIsImV4dGVybl9yZWMiLCJvcHMiLCJzel8zMl82NCIsImhlYWRlcl9wb3MiLCJvbGRfcG9zIiwidHlwZV9vZl92IiwiY2FtbF9zdHJpbmdfb2ZfYXJyYXkiLCJjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmciLCJjYW1sX3JhaXNlX25vdF9hX2RpciIsImNhbWxfc3lzX3N5c3RlbV9jb21tYW5kIiwiY21kIiwidW5peF9pc2F0dHkiLCJmaWxlRGVzY3JpcHRvciIsInR0eSIsImNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uIiwiZGVzZXJpYWxpemVfbmF0IiwiaW5pdGlhbGl6ZV9uYXQiLCJjYW1sX2dyX29wZW5fc3Vid2luZG93IiwianNfcHJpbnRfc3Rkb3V0IiwiY2FtbF9jb3B5c2lnbl9mbG9hdCIsImNhbWxfZ3Jfc2V0X3RleHRfc2l6ZSIsImNhbWxfbWQ1X2J5dGVzIiwiYWRkIiwieHgiLCJmZiIsImdnIiwiaGgiLCJpaSIsIm1kNSIsImNhbWxfYmFfc2V0X2dlbmVyaWMiLCJjYW1sX2VwaGVfc2V0X2tleSIsImNhbWxfYnl0ZXNfbGVzc2VxdWFsIiwiY2FtbF9zdHJpbmdfbGVzc2VxdWFsIiwiY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsIiwiY2FtbF9pbnQ2NF9hZGQiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImJpdHMiLCJvbmUiLCJjYW1sX2dyX3NpemVfeSIsImNhbWxfbWxfcG9zX2luIiwiY2FtbF9pbnQ2NF9hbmQiLCJjYW1sX3N5c19jb25zdF93b3JkX3NpemUiLCJjYW1sX3N0ZF9vdXRwdXQiLCJzbGVuIiwianNfcHJpbnRfc3RkZXJyIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImluZm8iLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiTWxTdHJpbmdSZWFkZXIiLCJjYW1sX2Zsb2F0X29mX2J5dGVzIiwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciIsIl9tYWdpYyIsIl9ibG9ja19sZW4iLCJudW1fb2JqZWN0cyIsIl9zaXplXzMyIiwiX3NpemVfNjQiLCJvYmpfY291bnRlciIsImludGVybl9yZWMiLCJoZWFkZXIiLCJleHBlY3RlZF9zaXplIiwiY2FtbF9zdHJpbmdfb2ZfYnl0ZXMiLCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMiLCJjYW1sX3N0cmluZ19nZXQiLCJyZV9tYXRjaCIsInJlX3dvcmRfbGV0dGVycyIsIm9wY29kZXMiLCJpc193b3JkX2xldHRlciIsImluX2JpdHNldCIsInJlX21hdGNoX2ltcGwiLCJwYXJ0aWFsIiwicHJvZyIsImNwb29sIiwibm9ybXRhYmxlIiwibnVtZ3JvdXBzIiwibnVtcmVnaXN0ZXJzIiwic3RhcnRjaGFycyIsInBjIiwicXVpdCIsImdyb3VwcyIsInJlX3JlZ2lzdGVyIiwiYmFja3RyYWNrIiwiaXRlbSIsInB1c2giLCJhY2NlcHQiLCJyZXN1bHQiLCJwcmVmaXhfbWF0Y2giLCJvcCIsInNhcmciLCJ1YXJnIiwiZ3JvdXAiLCJFcnJvciIsInJlX3NlYXJjaF9iYWNrd2FyZCIsImNhbWxfanNfZnJvbV9zdHJpbmciLCJjYW1sX2JhX3N1YiIsImNoYW5nZWRfZGltIiwibXVsIiwibmV3X2RpbXMiLCJuZXdfZGF0YSIsImNhbWxfZ2NfZnVsbF9tYWpvciIsImNhbWxfYnl0ZXNfc2V0MzIiLCJpMzIiLCJjYW1sX2dyX3NpZ2lvX3NpZ25hbCIsImNhbWxfYmFfdWludDhfc2V0MzIiLCJjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfZ3JfY3VycmVudF94IiwiY2FtbF9ncl9zZXRfbGluZV93aWR0aCIsImNhbWxfZ3Jfc2V0X2ZvbnQiLCJjYW1sX2dyX3NldF9jb2xvciIsImNvbnZlcnQiLCJudW1iZXIiLCJjX3N0ciIsImNhbWxfZ3JfbW92ZXRvIiwiY2FtbF9ncl9yZXNpemVfd2luZG93IiwiY2FtbF9ncl9zdGF0ZV9pbml0IiwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IiwidGEiLCJjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkiLCJjYW1sX21sX3NlZWtfb3V0IiwiY2FtbF9qc190eXBlb2YiLCJjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZSIsImJ0IiwiY2FtbF9ncl9saW5ldG8iLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUiLCJjYW1sX2JhX2RpbV8zIiwiY2FtbF9lcGhlX2RhdGFfb2Zmc2V0IiwiY2FtbF9lcGhlX2NoZWNrX2RhdGEiLCJjYW1sX2J5dGVzX2dldDE2IiwiY2FtbF9vYmpfbWFrZV9mb3J3YXJkIiwiY2FtbF9qc19mcm9tX2Jvb2wiLCJjYW1sX21sX3NldF9jaGFubmVsX25hbWUiLCJjYW1sX2dyX2Nsb3NlX2dyYXBoIiwiY2FtbF9jcmVhdGVfc3RyaW5nIiwiY2FtbF9tZDVfc3RyaW5nIiwiY2FtbF9tZDVfY2hhbiIsImNoYW5fbGVuIiwiY2FtbF9vYmpfZHVwIiwiY2FtbF93ZWFrX2dldF9jb3B5IiwiY2FtbF9tbF9vdXRwdXRfYnl0ZXMiLCJzdHJpbmciLCJqc3N0cmluZyIsImlkIiwiY2FtbF9tbF9vdXRwdXQiLCJjYW1sX2VwaGVfZ2V0X2RhdGEiLCJjYW1sX3RyYW1wb2xpbmVfcmV0dXJuIiwiY2FtbF9hcnJheV9hcHBlbmQiLCJsMSIsImwyIiwiY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGwiLCJjYW1sX2pzX2V4cHIiLCJjYW1sX2ludDY0X211bCIsImNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIiwiX3VuaXQiLCJjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyIsImNhbWxfaGFzaF91bml2X3BhcmFtIiwiY291bnQiLCJsaW1pdCIsIm9iaiIsImhhc2hfYWNjdSIsImhhc2hfYXV4IiwianNieXRlcyIsImNhbWxfc3RyaW5nX2VxdWFsIiwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyIiwicmVfcmVwbGFjZW1lbnRfdGV4dCIsInJlcGwiLCJvcmlnIiwiY3VyIiwic3RhcnQiLCJlbmQiLCJjYW1sX3B1cmVfanNfZXhwciIsImJsaXRfbmF0IiwiY2FtbF9pbnQ2NF91bHQiLCJjYW1sX2ludDY0X3hvciIsImNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXMiLCJiYTEiLCJieXRlczIiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwiY2FtbF90b19qc19zdHJpbmciLCJjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UiLCJjYW1sX3BhcnNlX2RpZ2l0IiwiY2FtbF9pbnQ2NF9vZl9zdHJpbmciLCJiYXNlNjQiLCJ0aHJlc2hvbGQiLCJyZV9zZWFyY2hfZm9yd2FyZCIsImNhbWxfYmxpdF9zdHJpbmdfdG9fYmlnc3RyaW5nIiwiY2FtbF9tYWtlX3ZlY3QiLCJpbml0IiwiY2FtbF9tbF9zZWVrX2luIiwiY2FtbF9zeXNfcmVhZF9kaXJlY3RvcnkiLCJjYW1sX21sX291dHB1dF9jaGFyIiwiY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIiwiY2FtbF9vYmpfaXNfYmxvY2siLCJjYW1sX21sX2lucHV0X2NoYXIiLCJjYW1sX2pzX3ZhciIsImNhbWxfdHJ1bmNfZmxvYXQiLCJjYW1sX2VwaGVfYmxpdF9kYXRhIiwiY2FtbF9pc19wcmludGFibGUiLCJjYW1sX2VxdWFsIiwicmVfcGFydGlhbF9tYXRjaCIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwibm93IiwiY2FtbF9maW5hbF9yZWdpc3Rlcl9jYWxsZWRfd2l0aG91dF92YWx1ZSIsImNhbWxfYmFfZ2V0XzIiLCJ3aW5faGFuZGxlX2ZkIiwiY2FtbF9iYV91aW50OF9zZXQxNiIsImNhbWxfanNfZGVsZXRlIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9saXN0X21vdW50X3BvaW50IiwicHJldiIsImNhbWxfbWFyc2hhbF9jb25zdGFudHMiLCJjYW1sX2pzX2VxdWFscyIsImJpZ3N0cmluZ190b190eXBlZF9hcnJheSIsImNhbWxfZ3JfYXJjX2F1eCIsImN0eCIsImN4IiwiY3kiLCJyeSIsInJ4Iiwicm90IiwieFBvcyIsInlQb3MiLCJ4UG9zX3ByZXYiLCJ5UG9zX3ByZXYiLCJzcGFjZSIsImRlbHRhIiwiY2FtbF9ncl9maWxsX2FyYyIsImNhbWxfYmFfc2xpY2UiLCJudW1faW5kcyIsInN1Yl9kaW1zIiwiY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSIsImdldDMyIiwiY2FtbF9pbnB1dF92YWx1ZSIsImNhbWxfYmFfa2luZCIsImNhbWxfanNfZnVuX2NhbGwiLCJjYW1sX2pzX3B1cmVfZXhwciIsImNvbXBhcmVfZGlnaXRzX25hdCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX2dyX3dhaXRfZXZlbnQiLCJfZXZsIiwiY2FtbF9ncl9zaWdpb19oYW5kbGVyIiwiY2FtbF9oYXNoX21peF9iaWdzdHJpbmciLCJjYW1sX3JlY29yZF9iYWNrdHJhY2UiLCJ1bml4X2dtdGltZSIsImNhbWxfc3lzX2dldF9jb25maWciLCJjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUiLCJ1bml4X3RpbWUiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlciIsImFiIiwiY2FtbF9tb2QiLCJjYW1sX2JhX2luaXQiLCJyZV9zdHJpbmdfbWF0Y2giLCJCaWdTdHJpbmdSZWFkZXIiLCJjYW1sX2dyX2R1bXBfaW1hZ2UiLCJjYW1sX2JhX2dldF9nZW5lcmljIiwiY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSIsImNhbWxfZm9ybWF0X2Zsb2F0IiwidG9GaXhlZCIsImRwIiwicHJlYyIsImNhbWxfbW91bnRfYXV0b2xvYWQiLCJjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhIiwiY2FtbF9ibGl0X2JpZ3N0cmluZ190b19iaWdzdHJpbmciLCJjYW1sX3N0cmluZ19sZXNzdGhhbiIsImNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuIiwiY2FtbF9kaXYiLCJjYW1sX2VwaGVfZ2V0X2RhdGFfY29weSIsImNhbWxfc3lzX2dldF9hcmd2IiwiY2FtbF9qc190b19ib29sIiwiY2FtbF9ncl9jcmVhdGVfaW1hZ2UiLCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5IiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QiLCJjYW1sX3JlZ2lzdGVyX2dsb2JhbCIsIm5hbWVfb3B0IiwibXVsdF9uYXQiLCJsZW4zIiwic3F1YXJlX25hdCIsImNhbWxfanNfZnJvbV9mbG9hdCIsImNhbWxfZmxvYXRhcnJheV9jcmVhdGUiLCJjYW1sX2djX3N0YXQiLCJjYW1sX3N5c19tb2RpZnlfYXJndiIsImNhbWxfbWV0aG9kX2NhY2hlIiwiY2FtbF9nZXRfcHVibGljX21ldGhvZCIsImNhY2hlaWQiLCJtZXRocyIsImxpIiwiY2FtbF9qc19nZXRfY29uc29sZSIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luIiwiY2hhbm5lbCIsImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheSIsImNhbWxfcm91bmRfZmxvYXQiLCJjYW1sX29qc19uZXdfYXJyIiwiRiIsImNvbXBsZW1lbnRfbmF0IiwiY2FtbF9qc19yZWdleHBzIiwiY2FtbF9qc19odG1sX2VzY2FwZSIsImNhbWxfYmFfZGltXzIiLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMiLCJjYW1sX3NpbmhfZmxvYXQiLCJjYW1sX2xkZXhwX2Zsb2F0IiwiY2FtbF9ncl9zdGF0ZV9zZXQiLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2JhX3NldF8xIiwiY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2siLCJsYW5kX2RpZ2l0X25hdCIsImNhbWxfaW50NjRfbW9kIiwiY2FtbF9vYmpfc2V0X3RhZyIsImNhbWxfY3JlYXRlX2ZpbGVfZXh0ZXJuIiwiY2FtbF9pbnQzMl9ic3dhcCIsIndpbl9zdGFydHVwIiwiY2FtbF9iYV9zZXRfMyIsImNhbWxfanNfaW5zdGFuY2VvZiIsImNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fc3RyaW5nIiwibnRoX2RpZ2l0X25hdF9uYXRpdmUiLCJzZXRfZGlnaXRfbmF0X25hdGl2ZSIsImRpZ2l0IiwiY2FtbF9zdHJpbmdfc2V0NjQiLCJjYW1sX2dyX3N0YXRlX2NyZWF0ZSIsImNhbnZhcyIsImNvbnRleHQiLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2siLCJjYW1sX2dyX2RyYXdfYXJjIiwiY2FtbF9iYV9tYXBfZmlsZSIsInZmZCIsInNoYXJlZCIsImNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUiLCJhcmduIiwiY2FtbF9iYV9jcmVhdGVfZnJvbSIsImRhdGExIiwiZGF0YTIiLCJqc3R5cCIsImNhbWxfdGFuaF9mbG9hdCIsImNhbWxfZ3JfZHJhd19zdHIiLCJkeCIsImNhbWxfZ3JfZHJhd19zdHJpbmciLCJjYW1sX2dyX2RyYXdfY2hhciIsImNhbWxfdW5tb3VudCIsImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmciLCJjYW1sX21sX3Bvc19pbl82NCIsImNhbWxfZ3JfZHJhd19pbWFnZSIsImltYWdlIiwiY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUiLCJfY2hhbm5lbCIsImNhbWxfc3RyaW5nX3NldCIsImNhbWxfbWxfcG9zX291dCIsImNhbWxfc3BhY2V0aW1lX2VuYWJsZWQiLCJjYW1sX2J5dGVzX25vdGVxdWFsIiwiY2FtbF9ydW50aW1lX3BhcmFtZXRlcnMiLCJjYW1sX2pzX29iamVjdCIsImNhbWxfYmFfY3JlYXRlIiwiZGltc19tbCIsImNhbWxfd2Vha19ibGl0IiwiY2FtbF9ncl9yZW1lbWJlcl9tb2RlIiwiY2FtbF9ic3dhcDE2IiwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUiLCJtb2RlIiwiY2FtbF9maW5hbF9yZWdpc3RlciIsImNhbWxfZ3JfZHJhd19yZWN0IiwiY2FtbF9zdHJpbmdfZ2V0MTYiLCJjYW1sX2VwaGVfdW5zZXRfZGF0YSIsImNhbWxfb3V0cHV0X3ZhbHVlIiwiY2FtbF9iYV9nZXRfMyIsImNhbWxfZXBoZV9ibGl0X2tleSIsImNhbWxfY2hlY2tfYm91bmQiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaCIsInNlZWQiLCJxdWV1ZSIsInJkIiwid3IiLCJjYW1sX29ial90YWciLCJGdW5jdGlvbiIsImNhbWxfYmFfdG9fdHlwZWRfYXJyYXkiLCJjYW1sX2pzX2V4cG9ydF92YXIiLCJtb2R1bGUiLCJjYW1sX2J5dGVzX2dldDMyIiwiY2FtbF9mcmV4cF9mbG9hdCIsIm5lZyIsImNhbWxfc3RyaW5nX2dldDY0IiwiY2FtbF9tbF9wb3Nfb3V0XzY0IiwiY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3ciLCJjYW1sX3NldF9zdGF0aWNfZW52IiwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0IiwiY2FtbF9qc19uZXciLCJjYW1sX2dyX2N1cnJlbnRfeSIsImNhbWxfZm9ybWF0X2ludCIsImNhbWxfb2JqX3RydW5jYXRlIiwiY2FtbF9qc190b19zdHJpbmciLCJpc19kaWdpdF9vZGQiLCJjYW1sX3J1bnRpbWVfdmFyaWFudCIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCIsImNhbWxfYXJyYXlfY29uY2F0IiwiY2FtbF9ncl9vcGVuX2dyYXBoIiwiZ2V0Iiwic3BlY3MiLCJ0YXJnZXQiLCJzdGF0dXMiLCJ3aW4iLCJkb2MiLCJ0aXRsZSIsImJvZHkiLCJjYW1sX2VwaGVfc2V0X2RhdGEiLCJjYW1sX21ha2VfZmxvYXRfdmVjdCIsImNhbWxfZ3JlYXRlcmVxdWFsIiwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UiLCJjYW1sX2xvZzFwX2Zsb2F0IiwiY2FtbF9pbnQ2NF9vciIsImNhbWxfbGF6eV9tYWtlX2ZvcndhcmQiLCJsb3JfZGlnaXRfbmF0IiwiY2FtbF9ncl9ibGl0X2ltYWdlIiwiaW0yIiwiY2FtbF9ncl93aW5kb3dfaWQiLCJjYW1sX2pzX29uX2llIiwidWEiLCJjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0IiwiY2FtbF9iYV9sYXlvdXQiLCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSIsImNhbWxfYXJyYXlfc2V0IiwibmV3dmFsIiwiY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwiLCJzZXRfZGlnaXRfbmF0IiwiY2FtbF91cGRhdGVfZHVtbXkiLCJjYW1sX0NhbWxpbnRlcm5hbE1vZF91cGRhdGVfbW9kIiwicmVhbCIsImNhbWxfZ3JfZG9jX29mX3N0YXRlIiwiY2FtbF9tbF9vdXRwdXRfaW50IiwiY2FtbF9vYmpfd2l0aF90YWciLCJjYW1sX2luaXRpYWxfdGltZSIsImNhbWxfc3lzX3RpbWUiLCJjYW1sX21sX2NoYW5uZWxfc2l6ZSIsImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90IiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCIsImNhbWxfYmFja3RyYWNlX3N0YXR1cyIsImNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlciIsImNhbWxfc3lzX2FyZ3YiLCJjYW1sX2JhX2ZpbGwiLCJjYW1sX21vZGZfZmxvYXQiLCJjYW1sX2djX2dldCIsImNhbWxfZmxvYXRfY29tcGFyZSIsImNhbWxfc3RyaW5nX3NldDMyIiwiY2FtbF9wYXJzZV9lbmdpbmUiLCJ0YWJsZXMiLCJlbnYiLCJFUlJDT0RFIiwidGVzdHNoaWZ0Iiwic2hpZnQiLCJzaGlmdF9yZWNvdmVyIiwicmVkdWNlIiwiUkVBRF9UT0tFTiIsIlJBSVNFX1BBUlNFX0VSUk9SIiwiR1JPV19TVEFDS1NfMSIsIkdST1dfU1RBQ0tTXzIiLCJDT01QVVRFX1NFTUFOVElDX0FDVElPTiIsIkNBTExfRVJST1JfRlVOQ1RJT04iLCJlbnZfc19zdGFjayIsImVudl92X3N0YWNrIiwiZW52X3N5bWJfc3RhcnRfc3RhY2siLCJlbnZfc3ltYl9lbmRfc3RhY2siLCJlbnZfc3RhY2tzaXplIiwiZW52X3N0YWNrYmFzZSIsImVudl9jdXJyX2NoYXIiLCJlbnZfbHZhbCIsImVudl9zeW1iX3N0YXJ0IiwiZW52X3N5bWJfZW5kIiwiZW52X2FzcCIsImVudl9ydWxlX2xlbiIsImVudl9ydWxlX251bWJlciIsImVudl9zcCIsImVudl9zdGF0ZSIsImVudl9lcnJmbGFnIiwidGJsX3RyYW5zbF9jb25zdCIsInRibF90cmFuc2xfYmxvY2siLCJ0YmxfbGhzIiwidGJsX2xlbiIsInRibF9kZWZyZWQiLCJ0YmxfZGdvdG8iLCJ0Ymxfc2luZGV4IiwidGJsX3JpbmRleCIsInRibF9naW5kZXgiLCJ0YmxfdGFibGVzaXplIiwidGJsX3RhYmxlIiwidGJsX2NoZWNrIiwibjEiLCJuMiIsInN0YXRlMSIsInNwIiwiZXJyZmxhZyIsImFzcCIsImNhbWxfYXJyYXlfZmlsbCIsImNhbWxfc3RyaW5nX25vdGVxdWFsIiwiY2FtbF9ieXRlc19ncmVhdGVydGhhbiIsImNhbWxfZ3JfbWFrZV9pbWFnZSIsImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0IiwiY2FtbF9yZWFkX2ZpbGVfY29udGVudCIsImNhbWxfanNfdG9fZmxvYXQiLCJlcnJfbm9fcHJlZCIsImVycl9ub19zdWNjIiwiemVybyQyIiwib25lJDIiLCJtaW51c19vbmUkMiIsIm1pbl9pbnQkMiIsIm1heF9pbnQkMiIsImR1bW15X3BvcyIsInplcm9fcG9zIiwic3ViX2Zvcm1hdCIsImZvcm1hdHRpbmdfbGl0IiwibG9jZm10IiwibnVsbCQwIiwiY3VycmVudF9kaXJfbmFtZSIsInBhcmVudF9kaXJfbmFtZSIsImRpcl9zZXAiLCJxdW90ZXF1b3RlIiwibnVsbCQxIiwiY3VycmVudF9kaXJfbmFtZSQwIiwicGFyZW50X2Rpcl9uYW1lJDAiLCJkaXJfc2VwJDAiLCJudWxsJDIiLCJjdXJyZW50X2Rpcl9uYW1lJDEiLCJwYXJlbnRfZGlyX25hbWUkMSIsImRpcl9zZXAkMSIsInplcm8kNCIsIm9uZSQ0IiwiaSIsImVyYXNlX3JlbCIsInJlc3QiLCJyZXN0JDAiLCJyZXN0JDEiLCJyZXN0JDIiLCJyZXN0JDMiLCJyZXN0JDQiLCJyZXN0JDUiLCJyZXN0JDYiLCJyZXN0JDciLCJ0eSIsInJlc3QkOCIsInR5MSIsInJlc3QkOSIsInJlc3QkMTAiLCJyZXN0JDExIiwicmVzdCQxMiIsInJlc3QkMTMiLCJjb25jYXRfZm10dHkiLCJmbXR0eTEiLCJmbXR0eTIiLCJ0eTIiLCJjb25jYXRfZm10IiwiZm10MSIsImZtdDIiLCJwYWQiLCJwYWQkMCIsInByZWMiLCJwYWQkMSIsImljb252IiwicHJlYyQwIiwicGFkJDIiLCJpY29udiQwIiwicHJlYyQxIiwicGFkJDMiLCJpY29udiQxIiwicHJlYyQyIiwicGFkJDQiLCJpY29udiQyIiwicHJlYyQzIiwicGFkJDUiLCJmY29udiIsInBhZCQ2Iiwic3RyIiwiY2hyIiwiZm10dHkiLCJwYWQkNyIsImZtdHR5JDAiLCJwYWQkOCIsInJlc3QkMTQiLCJyZXN0JDE1IiwicmVzdCQxNiIsImZtdGluZ19saXQiLCJyZXN0JDE3IiwiZm10aW5nX2dlbiIsInJlc3QkMTgiLCJyZXN0JDE5IiwiY2hhcl9zZXQiLCJ3aWR0aF9vcHQiLCJyZXN0JDIwIiwiY291bnRlciIsInJlc3QkMjEiLCJyZXN0JDIyIiwiaWduIiwicmVzdCQyMyIsImYiLCJhcml0eSIsInMiLCJ4IiwieSIsImluZmluaXR5IiwibmVnX2luZmluaXR5IiwibmFuIiwibWF4X2Zsb2F0IiwibWluX2Zsb2F0IiwiZXBzaWxvbiIsIm1heF9pbnQiLCJzMSIsInMyIiwibDEiLCJsMiIsIm4iLCJiIiwibCIsImkkMCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJhcHBlbmQiLCJ0bCIsImhkIiwibW9kZSIsInBlcm0iLCJuYW1lIiwiYyIsIml0ZXIiLCJhIiwib2MiLCJvZnMiLCJsZW4iLCJjaGFuIiwidiIsImljIiwidW5zYWZlX3JlYWxseV9pbnB1dCIsIm9mcyQwIiwibGVuJDAiLCJyIiwibGVuJDEiLCJvZnMkMSIsImJ1aWxkX3Jlc3VsdCIsImJ1ZiIsImFjY3UiLCJiZWciLCJhY2N1JDAiLCJyZXMiLCJzdHIyIiwic3RyMSIsImV4aXRfZnVuY3Rpb24iLCJnIiwiZl9hbHJlYWR5X3JhbiIsInJldGNvZGUiLCJlbXB0eSIsInJldHVybiQwIiwibWFwIiwic2VxIiwibmV4dCIsImZpbHRlcl9tYXAiLCJzZXEkMCIsImZpbHRlciIsImZsYXRfbWFwJDAiLCJmbGF0X21hcF9hcHAkMCIsInRhaWwiLCJmbGF0X21hcF9hcHAiLCJmbGF0X21hcCIsImZvbGRfbGVmdCIsImFjYyIsImFjYyQwIiwiYWNjJDEiLCJub25lIiwic29tZSIsInZhbHVlIiwibyIsImRlZmF1bHQkMCIsImdldCIsImJpbmQiLCJqb2luIiwibWFwJDAiLCJmb2xkIiwiaXRlciQwIiwiaXNfbm9uZSIsImlzX3NvbWUiLCJlcXVhbCIsImVxIiwibzAiLCJvMSIsInYxIiwidjAiLCJjb21wYXJlIiwiY21wIiwidG9fcmVzdWx0IiwidG9fbGlzdCIsInRvX3NlcSIsIm9rIiwiZXJyb3IiLCJlIiwidmFsdWUkMCIsImdldF9vayIsImdldF9lcnJvciIsImJpbmQkMCIsImpvaW4kMCIsIm1hcCQxIiwibWFwX2Vycm9yIiwiZm9sZCQwIiwiaXRlciQxIiwiaXRlcl9lcnJvciIsImlzX29rIiwiaXNfZXJyb3IiLCJlcXVhbCQwIiwicjAiLCJtYXRjaCIsImUxIiwiY29tcGFyZSQwIiwidG9fb3B0aW9uIiwidG9fbGlzdCQwIiwidG9fc2VxJDAiLCJlcXVhbCQxIiwiY29tcGFyZSQxIiwidG9faW50IiwidG9fZmxvYXQiLCJ0b19zdHJpbmckMCIsImVzY2FwZWQiLCJzJDAiLCJsb3dlcmNhc2UiLCJ1cHBlcmNhc2UiLCJsb3dlcmNhc2VfYXNjaWkiLCJ1cHBlcmNhc2VfYXNjaWkiLCJjb21wYXJlJDIiLCJjMSIsImMyIiwiZXF1YWwkMiIsIm1pbiQwIiwibWF4JDAiLCJsb19ib3VuZCIsImhpX2JvdW5kIiwiYm9tIiwicmVwIiwic3VjYyIsInUiLCJwcmVkIiwiaXNfdmFsaWQiLCJvZl9pbnQiLCJpc19jaGFyIiwib2ZfY2hhciIsInRvX2NoYXIiLCJ1bnNhZmVfdG9fY2hhciIsImVxdWFsJDMiLCJjb21wYXJlJDMiLCJoYXNoIiwibWF0Y2gkMSIsImxlbmd0aCIsInBhcmFtJDAiLCJjb25zIiwibnRoIiwibCQwIiwibiQwIiwibCQxIiwibiQxIiwibnRoX29wdCIsInJldl9hcHBlbmQiLCJsMSQwIiwibDIkMCIsImwxJDEiLCJsMiQxIiwicmV2IiwiaW5pdF9hdXgiLCJyZXZfaW5pdF90aHJlc2hvbGQiLCJwYXJhbSIsImFjY3UkMSIsImEyIiwiYTEiLCJwIiwicGFpciIsInJlc3VsdCIsInhzIiwicnkiLCJyeCIsInQyIiwiaDIiLCJ0MSIsImgxIiwic29ydCIsIngyIiwieDEiLCJ0bCQxIiwieDMiLCJ4MiQwIiwieDEkMCIsIm4xIiwibjIiLCJyZXZfc29ydCIsInRsJDAiLCJjJDAiLCJjJDEiLCJjJDIiLCJjJDMiLCJjJDQiLCJjJDUiLCJjJDYiLCJhY2N1JDIiLCJhdXgiLCJkaXJlY3QiLCJkZXB0aCIsInN5bWJvbCQxIiwibGVmdCIsInJpZ2h0IiwiZHN0b2ZmIiwic3Jjb2ZmIiwiY3B5bGVuIiwib2ZzMSIsIm9mczIiLCJzZXAiLCJzZXBsZW4iLCJkc3QiLCJpc19zcGFjZSIsImoiLCJhcHBseTEiLCJpbmRleF9yZWMiLCJsaW0iLCJpJDEiLCJpbmRleF9yZWNfb3B0IiwicmluZGV4X3JlYyIsInJpbmRleF9yZWNfb3B0IiwibmV3X2xlbiIsIm5ld19idWYiLCJpc19zcGFjZSQwIiwiaW5kZXhfcmVjJDAiLCJpbmRleF9yZWNfb3B0JDAiLCJyaW5kZXhfcmVjJDAiLCJyaW5kZXhfcmVjX29wdCQwIiwiZXF1YWwkNiIsImNvbXBhcmUkNiIsInRvX3N0cmluZyQyIiwidG9fYnVmZmVyIiwiYnVmZiIsImZsYWdzIiwiaGVhZGVyX3NpemUiLCJkYXRhX3NpemUiLCJ0b3RhbF9zaXplIiwiZnJvbV9ieXRlcyIsImZyb21fc3RyaW5nIiwiaXNfYmxvY2siLCJkb3VibGVfZmllbGQiLCJzZXRfZG91YmxlX2ZpZWxkIiwibWFyc2hhbCIsIm9iaiIsInVubWFyc2hhbCIsInBvcyIsImZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3RvciIsImxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yXyIsImxhenlfdGFnIiwiY2xvc3VyZV90YWciLCJvYmplY3RfdGFnIiwiaW5maXhfdGFnIiwiZm9yd2FyZF90YWciLCJub19zY2FuX3RhZyIsImFic3RyYWN0X3RhZyIsInN0cmluZ190YWciLCJkb3VibGVfdGFnIiwiZG91YmxlX2FycmF5X3RhZyIsImN1c3RvbV90YWciLCJpbnRfdGFnIiwib3V0X29mX2hlYXBfdGFnIiwidW5hbGlnbmVkX3RhZyIsIm9mX3ZhbCIsInNsb3QiLCJpZCIsImV4dGVuc2lvbl9jb25zdHJ1Y3RvciIsImV4dGVuc2lvbl9uYW1lIiwiZXh0ZW5zaW9uX2lkIiwibWF4X2VwaGVfbGVuZ3RoIiwiY3JlYXRlIiwibGVuZ3RoJDAiLCJyYWlzZV9pZl9pbnZhbGlkX29mZnNldCIsIm1zZyIsImdldF9rZXkiLCJnZXRfa2V5X2NvcHkiLCJzZXRfa2V5IiwidW5zZXRfa2V5IiwiY2hlY2tfa2V5IiwiYmxpdF9rZXkiLCJlMiIsIm8yIiwic3giLCJzeSIsImluaXQiLCJsYSIsImxiIiwicmVzJDAiLCJsaXN0X2xlbmd0aCIsInBhcmFtJDEiLCJoZCQwIiwibWF4c29uIiwiaTMxIiwidHJpY2tsZWRvd24iLCJ0cmlja2xlIiwiYnViYmxlZG93biIsImJ1YmJsZSIsImkkMiIsImUkMCIsImZhdGhlciIsIm1lcmdlIiwic3JjMW9mcyIsInNyYzFsZW4iLCJzcmMyIiwic3JjMm9mcyIsInNyYzJsZW4iLCJkc3RvZnMiLCJzcmMxciIsInNyYzJyIiwiczIkMSIsInMxJDEiLCJpMSIsImkyIiwiZCIsImkyJDAiLCJkJDAiLCJzMiQwIiwiaTEkMCIsImQkMSIsInMxJDAiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwidCIsInplcm8iLCJvbmUiLCJtaW51c19vbmUiLCJpc19maW5pdGUiLCJpc19pbmZpbml0ZSIsImlzX25hbiIsInBpIiwiaXNfaW50ZWdlciIsInN1Y2MkMCIsInByZWQkMCIsImVxdWFsJDciLCJtaW4kMSIsIm1heCQxIiwibWluX21heCIsIm1pbl9udW0iLCJtYXhfbnVtIiwibWluX21heF9udW0iLCJoYXNoJDAiLCJ1bnNhZmVfZmlsbCIsInVuc2FmZV9ibGl0Iiwic3JjIiwic29mcyIsImRvZnMiLCJjaGVjayIsIm1ha2UkMSIsImluaXQkMyIsImFwcGVuZCQxIiwiY29uY2F0JDIiLCJobGVuIiwic3ViJDIiLCJjb3B5JDIiLCJmaWxsJDEiLCJibGl0JDIiLCJ0b19saXN0JDIiLCJvZl9saXN0JDAiLCJoIiwiaXRlciQ2IiwiaXRlcjIkMSIsIm1hcCQ2IiwibWFwMiQxIiwiaXRlcmkkMyIsIm1hcGkkMyIsImZvbGRfbGVmdCQyIiwiZm9sZF9yaWdodCQxIiwiZXhpc3RzJDEiLCJmb3JfYWxsJDEiLCJtZW0kMSIsIm1lbV9pZWVlIiwic29ydCQwIiwic3RhYmxlX3NvcnQiLCJ0b19zZXEkNSIsInRvX3NlcWkkMiIsIm9mX3NlcSQzIiwibWFwX3RvX2FycmF5IiwibWFwX2Zyb21fYXJyYXkiLCJ6ZXJvJDAiLCJvbmUkMCIsIm1pbnVzX29uZSQwIiwiYWJzJDAiLCJtYXhfaW50JDAiLCJtaW5faW50JDAiLCJsb2dub3QiLCJlcXVhbCQ4IiwiY29tcGFyZSQ3IiwidG9fc3RyaW5nJDMiLCJ6ZXJvJDEiLCJvbmUkMSIsIm1pbnVzX29uZSQxIiwic3VjYyQxIiwicHJlZCQxIiwiYWJzJDEiLCJtaW5faW50JDEiLCJtYXhfaW50JDEiLCJsb2dub3QkMCIsInVuc2lnbmVkX3RvX2ludCIsInRvX3N0cmluZyQ0Iiwib2Zfc3RyaW5nX29wdCQwIiwiY29tcGFyZSQ4IiwiZXF1YWwkOSIsInVuc2lnbmVkX2NvbXBhcmUiLCJtIiwidW5zaWduZWRfZGl2IiwicSIsInVuc2lnbmVkX3JlbSIsInN1Y2MkMiIsInByZWQkMiIsImFicyQyIiwibG9nbm90JDEiLCJtYXhfaW50JDMiLCJ1bnNpZ25lZF90b19pbnQkMCIsInRvX3N0cmluZyQ1Iiwib2Zfc3RyaW5nX29wdCQxIiwiY29tcGFyZSQ5IiwiZXF1YWwkMTAiLCJ1bnNpZ25lZF9jb21wYXJlJDAiLCJ1bnNpZ25lZF9kaXYkMCIsInVuc2lnbmVkX3JlbSQwIiwiemVybyQzIiwib25lJDMiLCJtaW51c19vbmUkMyIsInN1Y2MkMyIsInByZWQkMyIsImFicyQzIiwibWluX2ludCQzIiwibWF4X2ludCQ0IiwibG9nbm90JDIiLCJ1bnNpZ25lZF90b19pbnQkMSIsInRvX3N0cmluZyQ2Iiwib2Zfc3RyaW5nX29wdCQyIiwiY29tcGFyZSQxMCIsImVxdWFsJDExIiwidW5zaWduZWRfY29tcGFyZSQxIiwidW5zaWduZWRfZGl2JDEiLCJ1bnNpZ25lZF9yZW0kMSIsImVuZ2luZSIsInRibCIsInN0YXRlIiwibmV3X2VuZ2luZSIsImZyb21fZnVuY3Rpb24iLCJvcHQiLCJzdGgiLCJ3aXRoX3Bvc2l0aW9ucyIsImF1eF9idWZmZXIiLCJsZXhidWYiLCJyZWFkIiwibmV3bGVuIiwibmV3YnVmIiwiZnJvbV9jaGFubmVsIiwiZnJvbV9zdHJpbmckMCIsImxleGVtZSIsInN1Yl9sZXhlbWUiLCJzdWJfbGV4ZW1lX29wdCIsInN1Yl9sZXhlbWVfY2hhciIsInN1Yl9sZXhlbWVfY2hhcl9vcHQiLCJsZXhlbWVfY2hhciIsImxleGVtZV9zdGFydCIsImxleGVtZV9lbmQiLCJsZXhlbWVfc3RhcnRfcCIsImxleGVtZV9lbmRfcCIsIm5ld19saW5lIiwibGNwIiwiZmx1c2hfaW5wdXQiLCJlbnYiLCJncm93X3N0YWNrcyIsIm9sZHNpemUiLCJuZXdzaXplIiwibmV3X3MiLCJuZXdfdiIsIm5ld19zdGFydCIsIm5ld19lbmQiLCJjbGVhcl9wYXJzZXIiLCJjdXJyZW50X2xvb2thaGVhZF9mdW4iLCJ5eXBhcnNlIiwidGFibGVzIiwic3RhcnQiLCJsZXhlciIsImluaXRfYXNwIiwiaW5pdF9zcCIsImluaXRfc3RhY2tiYXNlIiwiaW5pdF9zdGF0ZSIsImluaXRfY3Vycl9jaGFyIiwiaW5pdF9sdmFsIiwiaW5pdF9lcnJmbGFnIiwiY21kIiwiYXJnIiwiYXJnJDAiLCJhcmckMSIsImNtZCQwIiwiZXhuIiwiY3Vycl9jaGFyIiwidG9rIiwicGVla192YWwiLCJzeW1ib2xfc3RhcnRfcG9zIiwic3QiLCJlbiIsInN5bWJvbF9lbmRfcG9zIiwicmhzX3N0YXJ0X3BvcyIsInJoc19lbmRfcG9zIiwic3ltYm9sX3N0YXJ0Iiwic3ltYm9sX2VuZCIsInJoc19zdGFydCIsInJoc19lbmQiLCJpc19jdXJyZW50X2xvb2thaGVhZCIsInBhcnNlX2Vycm9yIiwiaGVpZ2h0IiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImFkZCIsInNpbmdsZXRvbiIsImFkZF9taW5fZWxlbWVudCIsImFkZF9tYXhfZWxlbWVudCIsInJoIiwibGgiLCJtaW5fZWx0IiwibWluX2VsdF9vcHQiLCJtYXhfZWx0IiwibWF4X2VsdF9vcHQiLCJyZW1vdmVfbWluX2VsdCIsInIkMCIsImNvbmNhdCIsInNwbGl0IiwicHJlcyIsInByZXMkMCIsImlzX2VtcHR5IiwibWVtIiwicmVtb3ZlIiwidW5pb24iLCJyMiIsInYyIiwicjEiLCJyMiQwIiwicjEkMCIsImludGVyIiwic3BsaXRfYmlzIiwiZGlzam9pbnQiLCJkaWZmIiwiY29uc19lbnVtIiwicyQxIiwiZSQxIiwiZTIkMiIsImUxJDIiLCJlMiQwIiwiZTEkMCIsImUyJDEiLCJlMSQxIiwic3Vic2V0IiwiZm9yX2FsbCIsImV4aXN0cyIsInB2IiwicGFydGl0aW9uIiwibGYiLCJsdCIsInJmIiwicnQiLCJjYXJkaW5hbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZCIsImZpbmRfZmlyc3QiLCJ2JDAiLCJmaW5kX2ZpcnN0X29wdCIsImZpbmRfbGFzdCIsImZpbmRfbGFzdF9vcHQiLCJmaW5kX29wdCIsIm9mX2xpc3QiLCJzdWIiLCJsJDMiLCJ4MCIsImwkNCIsIngwJDAiLCJsJDUiLCJ4MCQxIiwibmwiLCJtaWQiLCJsJDIiLCJ4NCIsImFkZF9zZXEiLCJvZl9zZXEiLCJzZXFfb2ZfZW51bSIsInRvX3NlcV9mcm9tIiwibG93IiwibGQiLCJscmQiLCJyZCIsInJsZCIsImRhdGEiLCJtaW5fYmluZGluZyIsIm1pbl9iaW5kaW5nX29wdCIsIm1heF9iaW5kaW5nIiwibWF4X2JpbmRpbmdfb3B0IiwicmVtb3ZlX21pbl9iaW5kaW5nIiwidXBkYXRlIiwiZGF0YSQwIiwibWFwaSIsIm0kMCIsImFkZF9taW5fYmluZGluZyIsImsiLCJhZGRfbWF4X2JpbmRpbmciLCJjb25jYXRfb3Jfam9pbiIsImQxIiwiZDIiLCJkMiQwIiwiZDEkMCIsImQyJDEiLCJkMSQxIiwicHZkIiwibSQxIiwibTEiLCJtMiIsImJpbmRpbmdzX2F1eCIsImJpbmRpbmdzIiwiY3JlYXRlJDAiLCJjbGVhciIsImNvcHkkMyIsInB1c2giLCJwb3AiLCJwb3Bfb3B0IiwidG9wIiwidG9wX29wdCIsImxlbmd0aCQxIiwiaXRlciQ3IiwiZm9sZCQxIiwidG9fc2VxJDYiLCJvZl9zZXEkNCIsImNyZWF0ZSQxIiwiY2xlYXIkMCIsImNlbGwiLCJwZWVrIiwiY29udGVudCIsInBlZWtfb3B0IiwidGFrZSIsInRha2Vfb3B0IiwiY29weSQ0IiwicV9yZXMiLCJwcmV2IiwiaXNfZW1wdHkkMCIsImxlbmd0aCQyIiwiaXRlciQ4IiwiZm9sZCQyIiwidHJhbnNmZXIiLCJxMSIsInEyIiwidG9fc2VxJDciLCJhZGRfc2VxJDAiLCJvZl9zZXEkNSIsInJhaXNlX3VuZGVmaW5lZCIsImZvcmNlX2xhenlfYmxvY2siLCJibGsiLCJjbG9zdXJlIiwiZm9yY2VfdmFsX2xhenlfYmxvY2siLCJmb3JjZSIsImx6diIsImZvcmNlX3ZhbCIsImZyb21fZnVuIiwiZnJvbV92YWwiLCJpc192YWwiLCJjb3VudCIsImZpbGxfYnVmZiIsImdldF9kYXRhIiwiZDExIiwiYSQwIiwiYSQxIiwicGVla19kYXRhIiwicGVlayQwIiwianVua19kYXRhIiwianVuayIsIm5nZXRfZGF0YSIsImFsIiwibnBlZWsiLCJlbXB0eSQxIiwiaXRlciQ5Iiwic3RybSIsImZyb20iLCJvZl9saXN0JDEiLCJvZl9zdHJpbmckMCIsIm9mX2J5dGVzIiwib2ZfY2hhbm5lbCIsImlhcHAiLCJpY29ucyIsImlzaW5nIiwibGFwcCIsImxjb25zIiwibHNpbmciLCJzZW1wdHkiLCJzbGF6eSIsImR1bXAiLCJkdW1wX2RhdGEiLCJjcmVhdGUkMiIsImNvbnRlbnRzIiwidG9fYnl0ZXMiLCJzdWIkMyIsImJsaXQkMyIsIm50aCQwIiwibGVuZ3RoJDMiLCJjbGVhciQxIiwicmVzZXQiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfYnVmZmVyIiwiYWRkX2NoYXIiLCJhZGRfdXRmXzhfdWNoYXIiLCJwb3MkMCIsInBvcyQxIiwiYWRkX3V0Zl8xNmJlX3VjaGFyIiwidSQwIiwiaGkiLCJsbyIsImFkZF91dGZfMTZsZV91Y2hhciIsImFkZF9zdWJzdHJpbmciLCJvZmZzZXQiLCJuZXdfcG9zaXRpb24iLCJhZGRfc3ViYnl0ZXMiLCJhZGRfc3RyaW5nIiwiYWRkX2J5dGVzIiwiYWRkX2J1ZmZlciIsImJzIiwiYWRkX2NoYW5uZWwiLCJhbHJlYWR5X3JlYWQiLCJ0b19yZWFkIiwiYWxyZWFkeV9yZWFkJDAiLCJ0b19yZWFkJDAiLCJvdXRwdXRfYnVmZmVyIiwiYWRkX3N1YnN0aXR1dGUiLCJsaW0kMSIsInByZXZpb3VzIiwiaSQ3IiwiY3VycmVudCIsImkkOCIsIm9wZW5pbmciLCJpJDYiLCJsaW0kMCIsImkkMyIsInN0b3AiLCJpJDQiLCJpJDUiLCJrJDIiLCJrJDAiLCJrJDEiLCJuZXh0X2kiLCJpZGVudCIsImkkOSIsImkkMTAiLCJpJDExIiwidHJ1bmNhdGUiLCJ0b19zZXEkOCIsInRvX3NlcWkkMyIsImFkZF9zZXEkMSIsIm9mX3NlcSQ2IiwiYWRkX2ludDgiLCJhZGRfaW50MTZfbmUiLCJhZGRfaW50MzJfbmUiLCJhZGRfaW50NjRfbmUiLCJhZGRfaW50MTZfbGUiLCJhZGRfaW50MTZfYmUiLCJ4JDAiLCJhZGRfaW50MzJfbGUiLCJhZGRfaW50MzJfYmUiLCJhZGRfaW50NjRfbGUiLCJhZGRfaW50NjRfYmUiLCJjcmVhdGVfY2hhcl9zZXQiLCJhZGRfaW5fY2hhcl9zZXQiLCJzdHJfaW5kIiwibWFzayIsImZyZWV6ZV9jaGFyX3NldCIsInJldl9jaGFyX3NldCIsImNoYXJfc2V0JDAiLCJpc19pbl9jaGFyX3NldCIsInBhZF9vZl9wYWRfb3B0IiwicGFkX29wdCIsIndpZHRoIiwicGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IiwiZm10IiwicGFkX29wdCQwIiwicGFkX29wdCQxIiwicGFkX29wdCQyIiwicGFkX29wdCQzIiwicGFkX29wdCQ0IiwicHJlY19vcHQiLCJwYWRfb3B0JDUiLCJuZGVjIiwicGFkX29wdCQ2IiwicGFkX29wdCQ3IiwicGFkX29wdCQ4IiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJidWZmZXJfY3JlYXRlIiwiaW5pdF9zaXplIiwiYnVmZmVyX2NoZWNrX3NpemUiLCJvdmVyaGVhZCIsIm1pbl9sZW4iLCJuZXdfc3RyIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9pY29udiIsImNoYXJfb2ZfZmNvbnYiLCJjRiIsImJwcmludF9wYWR0eSIsInBhZHR5IiwiYnByaW50X2lnbm9yZWRfZmxhZyIsImlnbl9mbGFnIiwiYnByaW50X3BhZF9vcHQiLCJicHJpbnRfcGFkZGluZyIsInBhZHR5JDAiLCJicHJpbnRfcHJlY2lzaW9uIiwiYnByaW50X2ljb252X2ZsYWciLCJicHJpbnRfYWx0aW50X2ZtdCIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0Iiwic3RyJDAiLCJicHJpbnRfY2hhcl9saXRlcmFsIiwiYnByaW50X3N0cmluZ19saXRlcmFsIiwiYnByaW50X2ZtdHR5Iiwic3ViX2ZtdHR5Iiwic3ViX2ZtdHR5JDAiLCJpbnRfb2ZfY3VzdG9tX2FyaXR5Iiwic3RyaW5nX29mX2ZtdCIsImZtdCQxIiwiY2hyJDAiLCJzdHIkMSIsInByaW50X2NoYXIiLCJpc19hbG9uZSQwIiwiaXNfYWxvbmUiLCJhZnRlciIsImJlZm9yZSIsImokMCIsImokMSIsImZtdCQwIiwic3ltbSIsImZtdHR5X3JlbF9kZXQiLCJkZSIsImVkIiwiYWYiLCJmYSIsImRlJDAiLCJlZCQwIiwiYWYkMCIsImZhJDAiLCJkZSQxIiwiZWQkMSIsImFmJDEiLCJmYSQxIiwiZGUkMiIsImVkJDIiLCJhZiQyIiwiZmEkMiIsImRlJDMiLCJlZCQzIiwiYWYkMyIsImZhJDMiLCJkZSQ0IiwiZWQkNCIsImFmJDQiLCJmYSQ0IiwiZGUkNSIsImVkJDUiLCJhZiQ1IiwiZmEkNSIsImRlJDYiLCJlZCQ2IiwiYWYkNiIsImZhJDYiLCJkZSQ3IiwiZWQkNyIsImFmJDciLCJmYSQ3IiwiZGUkOCIsImVkJDgiLCJhZiQ4IiwiZmEkOCIsInRyYW5zIiwiamQiLCJkaiIsImdhIiwiYWciLCJkZSQ5IiwiZWQkOSIsImFmJDkiLCJmYSQ5IiwiZGUkMTAiLCJlZCQxMCIsImFmJDEwIiwiZmEkMTAiLCJkZSQxMSIsImVkJDExIiwiYWYkMTEiLCJmYSQxMSIsImRlJDEyIiwiZWQkMTIiLCJhZiQxMiIsImZhJDEyIiwiZGUkMTMiLCJlZCQxMyIsImFmJDEzIiwiZmEkMTMiLCJyZXN0MiIsInJlc3QyJDAiLCJyZXN0MiQxIiwicmVzdDIkMiIsInJlc3QyJDMiLCJyZXN0MiQ0IiwicmVzdDIkNSIsInJlc3QyJDYiLCJyZXN0MiQ3IiwicmVzdDIkOCIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsInJlc3QyJDkiLCJyZXN0MiQxMCIsInJlc3QyJDExIiwicmVzdDIkMTIiLCJyZXN0MiQxMyIsImZtdHR5X29mX3BhZGRpbmdfZm10dHkiLCJmbXR0eV9vZl9jdXN0b20iLCJhcml0eSQwIiwiZm10dHlfb2ZfZm10IiwidHlfcmVzdCIsInByZWNfdHkiLCJmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkiLCJ0eV9yZXN0JDAiLCJwcmVjX3R5JDAiLCJ0eV9yZXN0JDEiLCJwcmVjX3R5JDEiLCJ0eV9yZXN0JDIiLCJwcmVjX3R5JDIiLCJ0eV9yZXN0JDMiLCJwcmVjX3R5JDMiLCJmbXR0eSQxIiwiZm10dHkkMiIsImZtdHR5JDMiLCJ0eSQwIiwiZm10dHkkNCIsImZtdHR5JDUiLCJ0eXBlX3BhZGRpbmciLCJ3IiwidHlwZV9wYWRwcmVjIiwidHlwZV9mb3JtYXQiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJ0eXBlX2lnbm9yZWRfcGFyYW1fb25lIiwiZm10dHlfcmVzdCIsImZtdF9yZXN0IiwiZm10dHlfcmVzdCQwIiwiZm10X3Jlc3QkMCIsImZtdF9yZXN0JDEiLCJmbXR0eV9yZXN0JDEiLCJmbXQkMiIsImZtdF9yZXN0JDIiLCJmbXR0eV9yZXN0JDIiLCJmbXQkMyIsImZtdF9yZXN0JDMiLCJmbXR0eV9yZXN0JDMiLCJmbXQkNCIsImZtdF9yZXN0JDQiLCJmbXR0eV9yZXN0JDQiLCJmbXQkNSIsImZtdF9yZXN0JDUiLCJmbXR0eV9yZXN0JDUiLCJwcmVjJDQiLCJmbXR0eSQ2IiwiZm10JDYiLCJmbXRfcmVzdCQ2IiwicHJlYyQ1IiwiZm10dHlfcmVzdCQ2IiwicHJlYyQ2IiwiZm10dHkkNyIsImZtdCQ3IiwiZm10X3Jlc3QkNyIsInByZWMkNyIsImZtdHR5X3Jlc3QkNyIsInByZWMkOCIsImZtdHR5JDgiLCJmbXQkOCIsImZtdF9yZXN0JDgiLCJmbXR0eV9yZXN0JDgiLCJmbXR0eSQ5IiwiZm10JDkiLCJmbXRfcmVzdCQ5IiwiZm10dHkkMTAiLCJmbXQkMTAiLCJmbXRfcmVzdCQxMCIsImZtdHR5JDExIiwiZm10JDExIiwiZm10X3Jlc3QkMTEiLCJmbXR0eSQxMiIsImZtdCQxMiIsImZtdHR5X3Jlc3QkOSIsImZtdF9yZXN0JDEyIiwiZm10dHkkMTMiLCJmbXQkMTMiLCJmbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5MSIsImZtdF9yZXN0JDEzIiwic3ViX2ZtdHR5JDEiLCJmbXR0eSQxNCIsImZtdCQxNCIsImZtdHR5X3Jlc3QkMTEiLCJmbXRfcmVzdCQxNCIsImZtdHR5JDE1IiwiZm10JDE1IiwiZm10dHlfcmVzdCQxMiIsImZtdF9yZXN0JDE1IiwiZm10dHkkMTYiLCJmbXQkMTYiLCJmbXRfcmVzdCQxNiIsImZtdHR5JDE3IiwiZm10JDE3IiwiZm10X3Jlc3QkMTciLCJmb3JtYXR0aW5nX2dlbiIsImZtdHR5MyIsImZtdDMiLCJmbXQxJDAiLCJmbXR0eTIkMCIsImZtdDIkMCIsImZtdHR5MyQwIiwiZm10MyQwIiwiZm10dHlfcmVzdCQxMyIsImZtdF9yZXN0JDE4IiwiZm10dHkkMTgiLCJmbXQkMTgiLCJmbXR0eV9yZXN0JDE0IiwiZm10X3Jlc3QkMTkiLCJmbXR0eSQxOSIsImZtdCQxOSIsImZtdHR5X3Jlc3QkMTUiLCJmbXRfcmVzdCQyMCIsImZtdHR5JDIwIiwiZm10JDIwIiwiZm10dHlfcmVzdCQxNiIsImZtdHR5JDIxIiwiZm10JDIxIiwic3ViX2ZtdHR5JDIiLCJzdWJfZm10dHkkMyIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsImZtdHR5JDIyIiwiZm10JDIyIiwic3ViX2ZtdHR5JDQiLCJzdWJfZm10dHlfcmVzdCIsInN1Yl9mbXR0eV9yZXN0JDAiLCJzdWJfZm10dHlfcmVzdCQxIiwic3ViX2ZtdHR5X3Jlc3QkMiIsInN1Yl9mbXR0eV9yZXN0JDMiLCJzdWJfZm10dHlfcmVzdCQ0Iiwic3ViX2ZtdHR5X3Jlc3QkNSIsInN1Yl9mbXR0eV9yZXN0JDYiLCJzdWJfZm10dHlfcmVzdCQ3Iiwic3ViX2ZtdHR5X3Jlc3QkOCIsInN1Yl9mbXR0eV9yZXN0JDkiLCJzdWJfZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eV9yZXN0JDExIiwic3ViX2ZtdHR5X3Jlc3QkMTIiLCJzdWJfZm10dHlfcmVzdCQxMyIsInN1Yl9mbXR0eV9yZXN0JDE0Iiwic3ViMl9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE1Iiwic3ViMl9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTYiLCJzdWIyX2ZtdHR5JDEiLCJzdWIxX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTciLCJzdWIyX2ZtdHR5JDIiLCJzdWIxX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxOCIsInN1Yl9mbXR0eV9yZXN0JDE5Iiwic3ViX2ZtdHR5X3Jlc3QkMjAiLCJzdWJfZm10dHlfcmVzdCQyMSIsInN1Yl9mbXR0eV9yZXN0JDIyIiwic3ViX2ZtdHR5X3Jlc3QkMjMiLCJzdWJfZm10dHlfcmVzdCQyNCIsInN1Yl9mbXR0eV9yZXN0JDI1Iiwic3ViX2ZtdHR5X3Jlc3QkMjYiLCJyZWNhc3QiLCJmaXhfcGFkZGluZyIsIndpZHRoJDAiLCJmaXhfaW50X3ByZWNpc2lvbiIsInJlcyQxIiwic3RyaW5nX3RvX2NhbWxfc3RyaW5nIiwiZm9ybWF0X29mX2Zjb252Iiwic3ltYiIsInRyYW5zZm9ybV9pbnRfYWx0IiwiZGlnaXRzIiwicHV0IiwiY29udmVydF9pbnQiLCJjb252ZXJ0X2ludDMyIiwiY29udmVydF9uYXRpdmVpbnQiLCJjb252ZXJ0X2ludDY0IiwiY29udmVydF9mbG9hdCIsImhleCIsInNpZ24iLCJjYW1sX3NwZWNpYWxfdmFsIiwic3RyaW5nX29mX2ZtdHR5IiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX3ByaW50ZiIsInAkMCIsInAkMSIsIm1ha2VfcGFkZGluZyIsIm5ld19hY2MiLCJtYWtlX3ByaW50ZiQwIiwiYWNjJDIiLCJhY2MkMyIsImFjYyQ0IiwiayQzIiwia2FjYyIsImskNCIsIm1ha2VfaWdub3JlZF9wYXJhbSQwIiwibWFrZV9jdXN0b20kMCIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX2Zyb21fZm10dHkkMCIsIm1ha2VfZnJvbV9mbXR0eSIsIm1ha2VfY3VzdG9tIiwibWFrZV9pZ25vcmVkX3BhcmFtIiwiZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24iLCJtYWtlX2lwcmludGYiLCJtYWtlX2lwcmludGYkMCIsImtvYyIsInJlc3QkMjQiLCJyZXN0JDI1IiwiZm5fb2ZfY3VzdG9tX2FyaXR5JDAiLCJmbl9vZl9jdXN0b21fYXJpdHkiLCJvdXRwdXRfYWNjIiwicCQyIiwicCQzIiwicCQ0IiwiYnVmcHV0X2FjYyIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJwYXJzZV9sd29yZCIsInBhcnNlX2ludCIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleHBfZW5kIiwiYm94X3R5cGUiLCJtYWtlX3BhZGRpbmdfZm10X2ViYiIsIm1ha2VfcGFkcHJlY19mbXRfZWJiIiwiZm10X2ViYl9vZl9zdHJpbmciLCJsZWdhY3lfYmVoYXZpb3IiLCJmbGFnIiwibGVnYWN5X2JlaGF2aW9yJDAiLCJpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIiwidW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IiwiZW5kX2luZCIsImludmFsaWRfZm9ybWF0X3dpdGhvdXQiLCJleHBlY3RlZF9jaGFyYWN0ZXIiLCJleHBlY3RlZCIsImFkZF9saXRlcmFsIiwibGl0X3N0YXJ0Iiwic2l6ZSIsInBhcnNlIiwic3RyX2luZCQyIiwicGFyc2VfZmxhZ3MiLCJzdHJfaW5kJDAiLCJwYXJzZV90YWciLCJwYXJzZV9nb29kX2JyZWFrIiwicGFyc2VfbWFnaWNfc2l6ZSIsInN0cl9pbmQkMSIsInBhcnNlX2NvbnZlcnNpb24iLCJwY3RfaW5kIiwicGx1cyIsInNwYWNlIiwicGFkcHJlYyIsInBsdXNfdXNlZCIsImhhc2hfdXNlZCIsInNwYWNlX3VzZWQiLCJpZ25fdXNlZCIsInBhZF91c2VkIiwicHJlY191c2VkIiwiZ2V0X3BsdXMiLCJnZXRfaGFzaCIsImdldF9zcGFjZSIsImdldF9pZ24iLCJnZXRfcGFkIiwiZ2V0X3ByZWMiLCJnZXRfcGFkcHJlYyIsImdldF9pbnRfcGFkIiwiaW5jb21wYXRpYmxlX2ZsYWciLCJjaGVja19ub18wIiwib3B0X29mX3BhZCIsIndpZHRoJDEiLCJnZXRfcGFkX29wdCIsImdldF9wYWRwcmVjX29wdCIsImZtdF9yZXN1bHQiLCJzdWJfZW5kIiwic2VhcmNoX3N1YmZvcm1hdF9lbmQiLCJzdWJfZm10IiwiaWdub3JlZCQyIiwiY291bnRlciQwIiwiaWdub3JlZCQ2IiwiaWdub3JlZCQ3IiwiYWRkX3JhbmdlIiwiZmFpbF9zaW5nbGVfcGVyY2VudCIsInBhcnNlX2NoYXJfc2V0X2NvbnRlbnQiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyJDAiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIiwicmV2ZXJzZSIsIm5leHRfaW5kIiwiY2hhcl9zZXQkMSIsImlnbm9yZWQkOSIsImNoYXJfZm9ybWF0IiwiZm10X3Jlc3QkMjEiLCJmbXRfcmVzdCQyMiIsInBhZCQ5IiwiZm10X3Jlc3QkMjMiLCJpZ25vcmVkJDEwIiwiZm10X3Jlc3QkMjQiLCJwYWQkMTAiLCJmbXRfcmVzdCQyNSIsInN1Yl9lbmQkMCIsInN1Yl9mbXQkMCIsImZtdF9yZXN0JDI2IiwiaWdub3JlZCQxMSIsImlnbm9yZWQkMyIsInN5bWIkMCIsImlnbm9yZWQkNSIsImNvbXB1dGVfaW50X2NvbnYiLCJpZ25vcmVkJDgiLCJzcGFjZSQxIiwiaGFzaCQxIiwicGx1cyQyIiwia2luZCIsImlnbm9yZWQkNCIsImlnbm9yZWQiLCJpZ25vcmVkJDAiLCJpZ25vcmVkJDEiLCJwbHVzJDAiLCJzcGFjZSQwIiwicGx1cyQxIiwiaWduJDAiLCJwYXJzZV9hZnRlcl9wcmVjaXNpb24iLCJtaW51cyIsInBhcnNlX2NvbnYiLCJwYXJzZV9hZnRlcl9wYWRkaW5nIiwicGFyc2VfbGl0ZXJhbCIsInBhcnNlX3Bvc2l0aXZlIiwibmV3X2luZCIsIm1pbnVzJDAiLCJzZXRfZmxhZyIsInN0cl9pbmQkMyIsInN0cl9pbmQkNCIsInN0cl9pbmQkNSIsImlzX29wZW5fdGFnIiwiaW5kIiwic3ViX3N0ciIsInN1Yl9mb3JtYXQkMCIsImZvcm1hdHRpbmckMCIsImZvcm1hdHRpbmciLCJzdHJfaW5kXzEiLCJwYXJzZV9pbnRlZ2VyIiwic3RyX2luZF8yIiwic3RyX2luZF8zIiwiZm9ybWF0dGluZ19saXQkMCIsInN0cl9pbmRfNCIsInN0cl9pbmRfNSIsInN1Yl9lbmQkMSIsInN1Yl9lbmQkMiIsInN0cl9pbmQkNiIsInN0cl9pbmQkNyIsIm9wdGlvbiIsInN1YmZtdCIsImZvcm1hdF9vZl9zdHJpbmdfZm10dHkiLCJmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCIsImtmcHJpbnRmIiwia2JwcmludGYiLCJpa2ZwcmludGYiLCJmcHJpbnRmIiwiYnByaW50ZiIsImlmcHJpbnRmIiwicHJpbnRmIiwiZXByaW50ZiIsImtzcHJpbnRmIiwic3ByaW50ZiIsImFzc29jMyIsInkyIiwieTEiLCJzcGxpdCQwIiwibWFrZV9zeW1saXN0IiwicHJlZml4Iiwic3VmZml4IiwiaGVscF9hY3Rpb24iLCJhZGRfaGVscCIsInNwZWNsaXN0IiwiYWRkMiIsInVzYWdlX2IiLCJlcnJtc2ciLCJkb2MiLCJzcGVjIiwia2V5IiwidXNhZ2Vfc3RyaW5nIiwidXNhZ2UiLCJib29sX29mX3N0cmluZ19vcHQkMCIsImludF9vZl9zdHJpbmdfb3B0JDAiLCJmbG9hdF9vZl9zdHJpbmdfb3B0IiwicGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNfIiwiYWxsb3dfZXhwYW5kIiwiYXJndiIsImFub25mdW4iLCJpbml0cG9zIiwiY29udmVydF9lcnJvciIsInByb2duYW1lIiwiZm9sbG93JDAiLCJhY3Rpb24iLCJrZXl3b3JkIiwibm9fYXJnJDAiLCJmb2xsb3ciLCJub19hcmciLCJnZXRfYXJnJDAiLCJnZXRfYXJnIiwiY29uc3VtZV9hcmckMCIsImNvbnN1bWVfYXJnIiwidHJlYXRfYWN0aW9uJDAiLCJ0cmVhdF9hY3Rpb24iLCJmJDAiLCJmJDEiLCJyJDEiLCJmJDIiLCJyJDIiLCJhcmckMiIsImYkMyIsImFyZyQzIiwieCQxIiwiciQzIiwiYXJnJDQiLCJ4JDIiLCJzcGVjcyIsImYkNCIsImFyZyQ1IiwiZiQ1IiwiZiQ2IiwiYXJnJDYiLCJuZXdhcmciLCJwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pYyIsInBhcnNlX2FyZ3ZfZHluYW1pYyIsImN1cnJlbnQkMCIsInBhcnNlX2FyZ3YiLCJtc2ckMCIsIm1zZyQxIiwicGFyc2VfZHluYW1pYyIsInBhcnNlX2V4cGFuZCIsInNlY29uZF93b3JkIiwibG9vcCIsIm1heF9hcmdfbGVuIiwiY3VyIiwia3dkIiwicmVwbGFjZV9sZWFkaW5nX3RhYiIsInNlZW4iLCJhbGlnbiIsImxpbWl0IiwiY29tcGxldGVkIiwia3NkIiwiY3V0Y29sJDAiLCJzcGFjZXMkMCIsImN1dGNvbCIsImt3ZF9sZW4iLCJzcGFjZXMiLCJyZWFkX2F1eCIsInRyaW0iLCJmaWxlIiwid29yZHMiLCJzdGFzaCIsIndvcmQiLCJyZWFkX2FyZyIsInJlYWRfYXJnMCIsIndyaXRlX2F1eCIsImFyZ3MiLCJ3cml0ZV9hcmciLCJ3cml0ZV9hcmcwIiwicHJpbnRlcnMiLCJmaWVsZCIsIm90aGVyX2ZpZWxkcyIsInVzZV9wcmludGVycyIsImNvbnYiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIkMCIsImxpbmUiLCJjaGFyJDEiLCJsaW5lJDAiLCJmaWxlJDAiLCJjaGFyJDIiLCJsaW5lJDEiLCJmaWxlJDEiLCJjb25zdHJ1Y3RvciIsInRvX3N0cmluZyQ3IiwicHJpbnQiLCJmY3QiLCJjYXRjaCQwIiwiY29udmVydF9yYXdfYmFja3RyYWNlIiwiYnQiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJpbmZvIiwiaXNfcmFpc2UiLCJwcmludF9yYXdfYmFja3RyYWNlIiwib3V0Y2hhbiIsInJhd19iYWNrdHJhY2UiLCJiYWNrdHJhY2UiLCJwcmludF9iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlX3RvX3N0cmluZyIsImJhY2t0cmFjZV9zbG90X2lzX3JhaXNlIiwiYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lIiwiYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24iLCJiYWNrdHJhY2Vfc2xvdHMiLCJnZXRfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwiZXhuX3Nsb3QiLCJleG5fc2xvdF9pZCIsImV4bl9zbG90X25hbWUiLCJ1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsInNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsImNvbnN0JDAiLCJmbGlwIiwibmVnYXRlIiwicHJvdGVjdCIsImZpbmFsbHkkMCIsIndvcmsiLCJmaW5hbGx5X25vX2V4biIsIndvcmtfZXhuIiwid29ya19idCIsInByaW50X3N0YXQiLCJhbGxvY2F0ZWRfYnl0ZXMiLCJtYSIsInBybyIsIm1pIiwiY3JlYXRlX2FsYXJtIiwiZGVsZXRlX2FsYXJtIiwic3RyaW5nIiwiYnl0ZXMiLCJzdWJzdHJpbmciLCJzdWJieXRlcyIsImZpbGVuYW1lIiwib3V0cHV0JDAiLCJkaWdlc3QiLCJpbnB1dCQwIiwiY2hhcl9oZXgiLCJ0b19oZXgiLCJmcm9tX2hleCIsImRpZ2l0IiwibmV3X3N0YXRlIiwiYXNzaWduIiwic3QxIiwic3QyIiwiZnVsbF9pbml0Iiwic2VlZCIsInNlZWQkMCIsIm1ha2UkMiIsIm1ha2Vfc2VsZl9pbml0IiwiY29weSQ1IiwiYml0cyIsImN1cnZhbCIsIm5ld3ZhbCIsIm5ld3ZhbDMwIiwiaW50JDAiLCJib3VuZCIsImludDMyIiwiYjEiLCJiMiIsImludDY0IiwiYjMiLCJuYXRpdmVpbnQiLCJmbG9hdCQwIiwiYm9vbCIsImJpdHMkMCIsImludCQxIiwiaW50MzIkMCIsIm5hdGl2ZWludCQwIiwiaW50NjQkMCIsImZsb2F0JDEiLCJzY2FsZSIsImJvb2wkMCIsImZ1bGxfaW5pdCQwIiwiaW5pdCQ0Iiwic2VsZl9pbml0IiwiZ2V0X3N0YXRlIiwic2V0X3N0YXRlIiwib25nb2luZ190cmF2ZXJzYWwiLCJmbGlwX29uZ29pbmdfdHJhdmVyc2FsIiwicGFyYW1zIiwicmFuZG9taXplZF9kZWZhdWx0IiwicmFuZG9taXplZCIsInJhbmRvbWl6ZSIsImlzX3JhbmRvbWl6ZWQiLCJwcm5nIiwiY3JlYXRlJDMiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJjbGVhciQyIiwicmVzZXQkMCIsImNvcHlfYnVja2V0bGlzdCIsImtleSQwIiwibmV4dCQwIiwiY29weSQ2IiwibGVuZ3RoJDQiLCJyZXNpemUkMCIsImluZGV4ZnVuIiwib2RhdGEiLCJvc2l6ZSIsIm5zaXplIiwibmRhdGEiLCJuZGF0YV90YWlsIiwiaW5wbGFjZSIsImNlbGwkMCIsIm5pZHgiLCJtYXRjaCQwIiwiaXRlciQxMCIsImRvX2J1Y2tldCIsIm9sZF90cmF2IiwiZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCIsImZpbHRlcl9tYXBfaW5wbGFjZSIsImZvbGQkMyIsImIkMCIsImJ1Y2tldF9sZW5ndGgiLCJzdGF0cyIsIm1ibCIsImhpc3RvIiwidG9fc2VxJDkiLCJ0YmxfZGF0YSIsImJ1Y2siLCJidWNrJDAiLCJidWNrJDEiLCJ0b19zZXFfa2V5cyIsInRvX3NlcV92YWx1ZXMiLCJrZXlfaW5kZXgiLCJidWNrZXQiLCJrMSIsIm5leHQxIiwiazIiLCJuZXh0MiIsImszIiwiZDMiLCJuZXh0MyIsImZpbmRfYWxsIiwiZmluZF9pbl9idWNrZXQiLCJyZXBsYWNlIiwicmVwbGFjZV9zZXEiLCJjb3B5Iiwic3oiLCJoYXNoX3BhcmFtIiwic2VlZGVkX2hhc2giLCJhZGQkMCIsImZpbmQkMCIsImZpbmRfb3B0JDAiLCJmaW5kX2FsbCQwIiwibWVtJDIiLCJhZGRfc2VxJDIiLCJvZl9zZXEkNyIsIndlYWtfY3JlYXRlIiwibGVuZ3RoJDUiLCJyYWlzZV9pZl9pbnZhbGlkX29mZnNldCQwIiwic2V0IiwiZ2V0JDAiLCJnZXRfY29weSIsImNoZWNrJDAiLCJibGl0JDQiLCJmaWxsJDIiLCJhciIsImVtcHR5YnVja2V0IiwiZ2V0X2luZGV4Iiwic3okMCIsInN6JDEiLCJjb3VudF9idWNrZXQiLCJhZGRfYXV4Iiwic2V0dGVyIiwiaW5kZXgiLCJidWNrZXQkMCIsImhhc2hlcyIsIm5ld3N6IiwibmV3YnVja2V0JDAiLCJuZXdoYXNoZXMiLCJoYnVja2V0IiwicHJldl9sZW4iLCJsaXZlIiwiaiQyIiwibmV3YnVja2V0IiwibmV3dCIsIm9iIiwib2giLCJzZXR0ZXIkMCIsIm5iIiwibmkiLCJmaW5kX29yIiwiaWZub3Rmb3VuZCIsImZpbmRfc2hhZG93IiwiaWZmb3VuZCIsImxlbnMiLCJ0b3RsZW4iLCJpZCQwIiwidW5rbm93biIsInBwX2VucXVldWUiLCJ0b2tlbiIsInBwX2luZmluaXR5IiwicHBfb3V0cHV0X3N0cmluZyIsInBwX291dHB1dF9uZXdsaW5lIiwiZm9ybWF0X3BwX3RleHQiLCJ0ZXh0IiwiZm9ybWF0X3N0cmluZyIsImJyZWFrX25ld19saW5lIiwicmVhbF9pbmRlbnQiLCJicmVha19saW5lIiwiYnJlYWtfc2FtZV9saW5lIiwiYWR2YW5jZV9sZWZ0Iiwic2l6ZSQwIiwicGVuZGluZ19jb3VudCIsInNpemUkMSIsInRhYnMiLCJhZGRfdGFiIiwibHMiLCJ0YWdfbmFtZSIsIm1hcmtlciIsImJyZWFrcyIsImZpdHMiLCJvZmYiLCJib3hfdHlwZSQwIiwib2ZmJDAiLCJpbnNlcnRpb25fcG9pbnQiLCJ0YWJzJDAiLCJmaXJzdCIsImhlYWQiLCJ0YWIiLCJvZmYkMSIsImluc2VydGlvbl9wb2ludCQwIiwid2lkdGgkMiIsImJveF90eXBlJDEiLCJ0Ym94IiwidGFnX25hbWUkMCIsIm1hcmtlciQwIiwiZW5xdWV1ZV9hZHZhbmNlIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJpbml0aWFsaXplX3NjYW5fc3RhY2siLCJzdGFjayIsInF1ZXVlX2VsZW0iLCJzZXRfc2l6ZSIsImxlZnRfdG90YWwiLCJzY2FuX3B1c2giLCJlbGVtIiwicHBfb3Blbl9ib3hfZ2VuIiwiYnJfdHkiLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfb3Blbl90YWciLCJwcF9jbG9zZV90YWciLCJwcF9zZXRfcHJpbnRfdGFncyIsInBwX3NldF9tYXJrX3RhZ3MiLCJwcF9nZXRfcHJpbnRfdGFncyIsInBwX2dldF9tYXJrX3RhZ3MiLCJwcF9zZXRfdGFncyIsInBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbiIsInBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbiIsInBjdCIsInBvdCIsIm1jdCIsIm1vdCIsInBwX3Jpbml0IiwicHBfZmx1c2hfcXVldWUiLCJwcF9wcmludF9hc19zaXplIiwicHBfcHJpbnRfYXMiLCJpc2l6ZSIsInBwX3ByaW50X3N0cmluZyIsInBwX3ByaW50X2ludCIsInBwX3ByaW50X2Zsb2F0IiwicHBfcHJpbnRfYm9vbCIsInBwX3ByaW50X2NoYXIiLCJwcF9vcGVuX2hib3giLCJwcF9vcGVuX3Zib3giLCJwcF9vcGVuX2h2Ym94IiwicHBfb3Blbl9ob3Zib3giLCJwcF9vcGVuX2JveCIsInBwX3ByaW50X25ld2xpbmUiLCJwcF9wcmludF9mbHVzaCIsInBwX2ZvcmNlX25ld2xpbmUiLCJwcF9wcmludF9pZl9uZXdsaW5lIiwicHBfcHJpbnRfY3VzdG9tX2JyZWFrIiwicHBfcHJpbnRfYnJlYWsiLCJwcF9wcmludF9zcGFjZSIsInBwX3ByaW50X2N1dCIsInBwX29wZW5fdGJveCIsInBwX2Nsb3NlX3Rib3giLCJwcF9wcmludF90YnJlYWsiLCJwcF9wcmludF90YWIiLCJwcF9zZXRfdGFiIiwicHBfc2V0X21heF9ib3hlcyIsInBwX2dldF9tYXhfYm94ZXMiLCJwcF9vdmVyX21heF9ib3hlcyIsInBwX3NldF9lbGxpcHNpc190ZXh0IiwicHBfZ2V0X2VsbGlwc2lzX3RleHQiLCJwcF9saW1pdCIsInBwX3NldF9tYXhfaW5kZW50IiwicHBfZ2V0X21heF9pbmRlbnQiLCJwcF9zZXRfbWFyZ2luIiwibmV3X21heF9pbmRlbnQiLCJjaGVja19nZW9tZXRyeSIsImdlb21ldHJ5IiwicHBfZ2V0X21hcmdpbiIsInBwX3NldF9nZW9tZXRyeSIsIm1heF9pbmRlbnQiLCJtYXJnaW4iLCJwcF9zYWZlX3NldF9nZW9tZXRyeSIsInBwX2dldF9nZW9tZXRyeSIsInBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyIsInBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyIsInBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aSIsInBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aSIsImRpc3BsYXlfbmV3bGluZSIsImJsYW5rX2xpbmUiLCJkaXNwbGF5X2luZGVudCIsInBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwiZm9ybWF0dGVyX29mX291dF9mdW5jdGlvbnMiLCJvdXRfZnVucyIsIm1ha2VfZm9ybWF0dGVyIiwib3V0cHV0IiwiZmx1c2giLCJwcGYiLCJmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwiLCJmb3JtYXR0ZXJfb2ZfYnVmZmVyIiwicHBfYnVmZmVyX3NpemUiLCJwcF9tYWtlX2J1ZmZlciIsInN0ZGJ1ZiIsInN0ZF9mb3JtYXR0ZXIiLCJlcnJfZm9ybWF0dGVyIiwic3RyX2Zvcm1hdHRlciIsImZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIiLCJmbHVzaF9zdHJfZm9ybWF0dGVyIiwibWFrZV9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciIsInNvYiIsImdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciIsIml0ZW1zIiwiYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIiwiaXRlbSIsImZvcm1hdHRlcl9vZl9zeW1ib2xpY19vdXRwdXRfYiIsIm9wZW5faGJveCIsIm9wZW5fdmJveCIsIm9wZW5faHZib3giLCJvcGVuX2hvdmJveCIsIm9wZW5fYm94IiwiY2xvc2VfYm94Iiwib3Blbl90YWciLCJjbG9zZV90YWciLCJvcGVuX3N0YWciLCJjbG9zZV9zdGFnIiwicHJpbnRfYXMiLCJwcmludF9zdHJpbmckMCIsInByaW50X2ludCQwIiwicHJpbnRfZmxvYXQkMCIsInByaW50X2NoYXIkMCIsInByaW50X2Jvb2wiLCJwcmludF9icmVhayIsInByaW50X2N1dCIsInByaW50X3NwYWNlIiwiZm9yY2VfbmV3bGluZSIsInByaW50X2ZsdXNoIiwicHJpbnRfbmV3bGluZSQwIiwicHJpbnRfaWZfbmV3bGluZSIsIm9wZW5fdGJveCIsImNsb3NlX3Rib3giLCJwcmludF90YnJlYWsiLCJzZXRfdGFiIiwicHJpbnRfdGFiIiwic2V0X21hcmdpbiIsImdldF9tYXJnaW4iLCJzZXRfbWF4X2luZGVudCIsImdldF9tYXhfaW5kZW50Iiwic2V0X2dlb21ldHJ5Iiwic2FmZV9zZXRfZ2VvbWV0cnkiLCJnZXRfZ2VvbWV0cnkiLCJzZXRfbWF4X2JveGVzIiwiZ2V0X21heF9ib3hlcyIsIm92ZXJfbWF4X2JveGVzIiwic2V0X2VsbGlwc2lzX3RleHQiLCJnZXRfZWxsaXBzaXNfdGV4dCIsInNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwiLCJzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMiLCJnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMiLCJzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMiLCJnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMiLCJzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyIsInNldF9wcmludF90YWdzIiwiZ2V0X3ByaW50X3RhZ3MiLCJzZXRfbWFya190YWdzIiwiZ2V0X21hcmtfdGFncyIsInNldF90YWdzIiwicHBfcHJpbnRfbGlzdCIsInBwX3YiLCJvcHQkMCIsInBwX3NlcCIsInZzIiwib3B0JDEiLCJwcF9wcmludF90ZXh0IiwicHBfcHJpbnRfb3B0aW9uIiwicHBfcHJpbnRfcmVzdWx0IiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwicCQ1IiwicCQ2Iiwic3RycHV0X2FjYyQwIiwia2ZwcmludGYkMCIsImlrZnByaW50ZiQwIiwiaWZwcmludGYkMCIsImZwcmludGYkMCIsInByaW50ZiQwIiwiZXByaW50ZiQwIiwia2RwcmludGYiLCJkcHJpbnRmIiwia3ByaW50ZiIsInNwcmludGYkMCIsImthc3ByaW50ZiIsImFzcHJpbnRmIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdSIsInBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdSIsInNldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdCIsImdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdCIsImJwcmludGYkMCIsInBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyIsInN0cmluZ2lmeSIsInBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyIsImZ1bnMiLCJtYXJrX29wZW5fdGFnIiwibWFya19jbG9zZV90YWciLCJwcmludF9vcGVuX3RhZyIsInByaW50X2Nsb3NlX3RhZyIsInNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyIsImdldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyIsIm51bGxfY2hhciIsIm5leHRfY2hhciIsImliIiwicGVla19jaGFyIiwiY2hlY2tlZF9wZWVrX2NoYXIiLCJlbmRfb2ZfaW5wdXQiLCJiZWdpbm5pbmdfb2ZfaW5wdXQiLCJuYW1lX29mX2lucHV0IiwiZm5hbWUiLCJjaGFyX2NvdW50IiwicmVzZXRfdG9rZW4iLCJpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciIsInRva2VuX3N0cmluZyIsInRva2VuX2J1ZmZlciIsInNraXBfY2hhciIsImlnbm9yZV9jaGFyIiwic3RvcmVfY2hhciIsImRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemUiLCJjcmVhdGUkNCIsImluYW1lIiwiZnJvbV9zdHJpbmckMSIsImZyb21fZnVuY3Rpb24kMCIsInNjYW5fY2xvc2VfYXRfZW5kIiwic2Nhbl9yYWlzZV9hdF9lbmQiLCJmcm9tX2ljIiwic2Nhbl9jbG9zZV9pYyIsImVvZiIsInN0ZGliIiwib3Blbl9pbl9maWxlIiwib3Blbl9pbiIsImZyb21fZmlsZSIsImZyb21fZmlsZV9iaW4iLCJmcm9tX2NoYW5uZWwkMCIsImNsb3NlX2luJDAiLCJpYyQwIiwibWVtbyIsIm1lbW9fZnJvbV9pYyIsIm1lbW9fZnJvbV9jaGFubmVsIiwiYmFkX2lucHV0IiwiYmFkX2lucHV0X2VzY2FwZSIsImJhZF90b2tlbl9sZW5ndGgiLCJtZXNzYWdlIiwiYmFkX2Zsb2F0IiwiYmFkX2hleF9mbG9hdCIsImNoYXJhY3Rlcl9taXNtYXRjaCIsImNpIiwiY2hlY2tfdGhpc19jaGFyIiwiY2hlY2tfY2hhciIsInRva2VuX2NoYXIiLCJ0b2tlbl9ib29sIiwiaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIiLCJ0b2tlbl9pbnRfbGl0ZXJhbCIsInRva2VuX2Zsb2F0Iiwic2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIiLCJzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50Iiwic2Nhbl9kaWdpdF9wbHVzIiwiYmFzaXMiLCJkaWdpdHAiLCJ3aWR0aCQzIiwiaXNfYmluYXJ5X2RpZ2l0Iiwic2Nhbl9iaW5hcnlfaW50IiwiaXNfb2N0YWxfZGlnaXQiLCJzY2FuX29jdGFsX2ludCIsImlzX2hleGFfZGlnaXQiLCJzY2FuX2hleGFkZWNpbWFsX2ludCIsInNjYW5fc2lnbiIsInNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbCIsInNjYW5faW50X2NvbnZlcnNpb24iLCJzY2FuX2ZyYWN0aW9uYWxfcGFydCIsInNjYW5fZXhwb25lbnRfcGFydCIsInNjYW5fZmxvYXQiLCJwcmVjaXNpb24iLCJwcmVjaXNpb24kMCIsImNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIiwic2Nhbl9oZXhfZmxvYXQiLCJ3aWR0aCQ0Iiwid2lkdGgkNSIsIndpZHRoJDYiLCJ3aWR0aCQxMCIsIndpZHRoJDciLCJ3aWR0aCQ4Iiwid2lkdGgkOSIsInNjYW5fY2FtbF9mbG9hdF9yZXN0Iiwid2lkdGhfcHJlY2lzaW9uIiwiZnJhY193aWR0aCIsInNjYW5fY2FtbF9mbG9hdCIsInNjYW5fc3RyaW5nIiwic3RwIiwic2Nhbl9jaGFyIiwiaGV4YWRlY2ltYWxfdmFsdWVfb2ZfY2hhciIsImNoZWNrX25leHRfY2hhciIsImNoZWNrX25leHRfY2hhcl9mb3JfY2hhciIsImNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIiwic2Nhbl9iYWNrc2xhc2hfY2hhciIsImMwIiwiZ2V0X2RpZ2l0IiwiZ2V0X2RpZ2l0JDAiLCJjMSQwIiwiYzIkMCIsInNjYW5fY2FtbF9jaGFyIiwiZmluZF9zdG9wIiwic2Nhbl9jYW1sX3N0cmluZyIsImZpbmRfc3RvcCQwIiwic2tpcF9zcGFjZXMiLCJzY2FuX2NoYXJzX2luX2NoYXJfc2V0Iiwic2Nhbl9pbmRpYyIsInNjYW5fY2hhcnMiLCJzY2FuZl9iYWRfaW5wdXQiLCJnZXRfY291bnRlciIsIndpZHRoX29mX3BhZF9vcHQiLCJzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IiwiZm10aW5nIiwidGFrZV9mb3JtYXRfcmVhZGVycyQwIiwidGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyQwIiwicmVhZGVyIiwibmV3X2siLCJyZWFkZXJzX3Jlc3QiLCJ0YWtlX2Zvcm1hdF9yZWFkZXJzIiwiZm10JDIzIiwiZm10JDI0IiwiZm10JDI1IiwidGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyIsInBhZF9wcmVjX3NjYW5mIiwicmVhZGVycyIsInNjYW4iLCJtYWtlX3NjYW5mIiwic2NhbiQwIiwic3RyX3Jlc3QiLCJzY2FuJDEiLCJzY2FuJDIiLCJzY2FuJDMiLCJzY2FuJDQiLCJjb252JDAiLCJzY2FuJDUiLCJjb252JDEiLCJzY2FuJDYiLCJjb252JDIiLCJzY2FuJDciLCJzY2FuJDgiLCJmbXRpbmdfbGl0JDAiLCJzdHAkMCIsInMkMiIsInN0cl9yZXN0JDAiLCJyZXN0JDI2IiwiYXJnX3Jlc3QiLCJrc2NhbmYiLCJlZiIsImFwcGx5IiwiYXJncyQwIiwiZXhjIiwiYnNjYW5mIiwia3NzY2FuZiIsInNzY2FuZiIsInNjYW5mIiwiYnNjYW5mX2Zvcm1hdCIsImZvcm1hdCIsInNzY2FuZl9mb3JtYXQiLCJmb3JtYXRfZnJvbV9zdHJpbmciLCJ1bmVzY2FwZWQiLCJrZnNjYW5mIiwiZnNjYW5mIiwicmVnaXN0ZXIiLCJyZWdpc3Rlcl9leGNlcHRpb24iLCJvJDAiLCJwYXJhbXMkMCIsImluaXRpYWxfb2JqZWN0X3NpemUiLCJkdW1teV9pdGVtIiwidGFnIiwiY29tcGFyZSQxMSIsImNvbXBhcmUkMTIiLCJjb21wYXJlJDEzIiwiZHVtbXlfdGFibGUiLCJ0YWJsZV9jb3VudCIsImR1bW15X21ldCIsImZpdF9zaXplIiwibmV3X3RhYmxlIiwicHViX2xhYmVscyIsIm1ldGhvZHMiLCJyZXNpemUkMSIsImFycmF5IiwibmV3X3NpemUiLCJvbGRfc2l6ZSIsIm5ld19idWNrIiwibWV0aG9kX2NvdW50IiwiaW5zdF92YXJfY291bnQiLCJuZXdfbWV0aG9kIiwidGFibGUiLCJnZXRfbWV0aG9kX2xhYmVsIiwibGFiZWwiLCJnZXRfbWV0aG9kX2xhYmVscyIsIm5hbWVzIiwic2V0X21ldGhvZCIsImVsZW1lbnQiLCJnZXRfbWV0aG9kIiwidG9fbGlzdCQzIiwiYXJyIiwibmFycm93IiwidmFycyIsInZpcnRfbWV0aHMiLCJjb25jcl9tZXRocyIsInZhcnMkMCIsInZpcnRfbWV0aHMkMCIsImNvbmNyX21ldGhzJDAiLCJ2aXJ0X21ldGhfbGFicyIsImNvbmNyX21ldGhfbGFicyIsImxhYiIsInR2YXJzIiwiYnlfbmFtZSIsImJ5X2xhYmVsIiwibWV0IiwiaG0iLCJ3aWRlbiIsInNhdmVkX3ZhcnMiLCJzYXZlZF9oaWRkZW5fbWV0aHMiLCJuZXdfc2xvdCIsIm5ld192YXJpYWJsZSIsInRvX2FycmF5IiwibmV3X21ldGhvZHNfdmFyaWFibGVzIiwibWV0aHMiLCJ2YWxzIiwibWV0aHMkMCIsIm5tZXRocyIsIm52YWxzIiwiZ2V0X3ZhcmlhYmxlIiwiZ2V0X3ZhcmlhYmxlcyIsImFkZF9pbml0aWFsaXplciIsImNyZWF0ZV90YWJsZSIsInB1YmxpY19tZXRob2RzIiwidGFncyIsImluaXRfY2xhc3MiLCJpbmhlcml0cyIsImNsYSIsInN1cGVyJDAiLCJubSIsIm1ha2VfY2xhc3MiLCJwdWJfbWV0aHMiLCJjbGFzc19pbml0IiwiZW52X2luaXQiLCJtYWtlX2NsYXNzX3N0b3JlIiwiaW5pdF90YWJsZSIsImR1bW15X2NsYXNzIiwibG9jIiwidW5kZWYiLCJjcmVhdGVfb2JqZWN0IiwiY3JlYXRlX29iamVjdF9vcHQiLCJvYmpfMCIsIml0ZXJfZiIsInJ1bl9pbml0aWFsaXplcnMiLCJpbml0cyIsInJ1bl9pbml0aWFsaXplcnNfb3B0IiwiY3JlYXRlX29iamVjdF9hbmRfcnVuX2luaXRpYWxpIiwiZ2V0X2RhdGEkMCIsImJ1aWxkX3BhdGgiLCJrZXlzIiwibG9va3VwX3RhYmxlcyIsInJvb3QiLCJ0YWJsZXMkMiIsInRhYmxlcyQwIiwidGFibGVzJDEiLCJuZXdfY2FjaGUiLCJzZXRfbWV0aG9kcyIsImNsbyIsImNsbyQwIiwibiQyIiwibiQzIiwibiQ0IiwibiQ1IiwibiQ2IiwieCQzIiwibiQ3IiwieCQ0IiwibiQ4IiwiZiQ3IiwibiQ5IiwieCQ1IiwiZiQ4IiwiZSQyIiwibiQxMCIsIngkNiIsImYkOSIsIm4kMTEiLCJ4JDciLCJuJDEyIiwieCQ4IiwibiQxMyIsIm4kMTQiLCJlJDMiLCJuJDE1IiwibSQyIiwieCQ5IiwibSQzIiwibiQxNiIsIm0kNCIsImUkNCIsIm4kMTciLCJtJDUiLCJuJDE4Iiwic3RhdHMkMCIsImluaXRpYWxfYnVmZmVyIiwiYnVmZmVyIiwiYnVmcG9zIiwicmVzZXRfYnVmZmVyIiwic3RvcmUiLCJuZXdidWZmZXIiLCJnZXRfc3RyaW5nIiwibWFrZV9sZXhlciIsImtleXdvcmRzIiwia3dkX3RhYmxlIiwiaWRlbnRfb3Jfa2V5d29yZCIsImtleXdvcmRfb3JfZXJyb3IiLCJlbmRfZXhwb25lbnRfcGFydCIsImV4cG9uZW50X3BhcnQiLCJudW1iZXIiLCJpZGVudDIiLCJuZWdfbnVtYmVyIiwibmV4dF90b2tlbiQwIiwiZXNjYXBlIiwibWF5YmVfY29tbWVudCIsImNvbW1lbnQiLCJuZXh0X3Rva2VuIiwiaW5wdXQiLCJoa2V5IiwiY2xlYW4iLCJpbnNlcnRfYnVja2V0IiwiY29udGFpbmVyIiwicmVtb3ZlX2J1Y2tldCIsImhrIiwicmVwbGFjZV9idWNrZXQiLCJuZXdfZCIsImJ1Y2tldF9sZW5ndGhfYWxpdmUiLCJzdGF0c19hbGl2ZSIsImNyZWF0ZSQ1IiwiZ2V0X2tleSQwIiwiZ2V0X2tleV9jb3B5JDAiLCJzZXRfa2V5JDAiLCJ1bnNldF9rZXkkMCIsImNoZWNrX2tleSQwIiwiYmxpdF9rZXkkMCIsImdldF9kYXRhJDEiLCJnZXRfZGF0YV9jb3B5Iiwic2V0X2RhdGEiLCJ1bnNldF9kYXRhIiwiY2hlY2tfZGF0YSIsImJsaXRfZGF0YSIsInNldF9rZXlfZGF0YSIsImNyZWF0ZSQ2IiwiZ2V0X2tleTEiLCJnZXRfa2V5MV9jb3B5Iiwic2V0X2tleTEiLCJ1bnNldF9rZXkxIiwiY2hlY2tfa2V5MSIsImdldF9rZXkyIiwiZ2V0X2tleTJfY29weSIsInNldF9rZXkyIiwidW5zZXRfa2V5MiIsImNoZWNrX2tleTIiLCJibGl0X2tleTEiLCJibGl0X2tleTIiLCJibGl0X2tleTEyIiwiZ2V0X2RhdGEkMiIsImdldF9kYXRhX2NvcHkkMCIsInNldF9kYXRhJDAiLCJ1bnNldF9kYXRhJDAiLCJjaGVja19kYXRhJDAiLCJibGl0X2RhdGEkMCIsImsyJDAiLCJrMSQwIiwiY3JlYXRlJDciLCJsZW5ndGgkNiIsImdldF9rZXkkMSIsImdldF9rZXlfY29weSQxIiwic2V0X2tleSQxIiwidW5zZXRfa2V5JDEiLCJjaGVja19rZXkkMSIsImJsaXRfa2V5JDEiLCJnZXRfZGF0YSQzIiwiZ2V0X2RhdGFfY29weSQxIiwic2V0X2RhdGEkMSIsInVuc2V0X2RhdGEkMSIsImNoZWNrX2RhdGEkMSIsImJsaXRfZGF0YSQxIiwia2kiLCJrMCIsImdlbmVyaWNfYmFzZW5hbWUiLCJpc19kaXJfc2VwIiwiZ2VuZXJpY19kaXJuYW1lIiwiaXNfcmVsYXRpdmUiLCJpc19pbXBsaWNpdCIsImNoZWNrX3N1ZmZpeCIsInN1ZmYiLCJjaG9wX3N1ZmZpeF9vcHQiLCJsZW5fcyIsImxlbl9mIiwicXVvdGUiLCJxdW90ZV9jb21tYW5kIiwic3RkaW4iLCJzdGRvdXQiLCJzdGRlcnIiLCJiYXNlbmFtZSIsImRpcm5hbWUiLCJpc19kaXJfc2VwJDAiLCJpc19yZWxhdGl2ZSQwIiwiaXNfaW1wbGljaXQkMCIsImNoZWNrX3N1ZmZpeCQwIiwiY2hvcF9zdWZmaXhfb3B0JDAiLCJ0ZW1wX2Rpcl9uYW1lIiwicXVvdGUkMCIsImFkZF9icyIsImxvb3AkMCIsImxvb3BfYnMiLCJxdW90ZV9jbWRfZmlsZW5hbWUiLCJxdW90ZV9jb21tYW5kJDAiLCJkcml2ZV9hbmRfcGF0aCIsImRpcm5hbWUkMCIsInBhdGgiLCJkcml2ZSIsImRpciIsImJhc2VuYW1lJDAiLCJiYXNlbmFtZSQxIiwiZGlybmFtZSQxIiwibnVsbCQzIiwiY3VycmVudF9kaXJfbmFtZSQyIiwicGFyZW50X2Rpcl9uYW1lJDIiLCJkaXJfc2VwJDIiLCJpc19kaXJfc2VwJDEiLCJpc19yZWxhdGl2ZSQxIiwiaXNfaW1wbGljaXQkMSIsImNoZWNrX3N1ZmZpeCQxIiwiY2hvcF9zdWZmaXhfb3B0JDEiLCJ0ZW1wX2Rpcl9uYW1lJDAiLCJxdW90ZSQxIiwicXVvdGVfY29tbWFuZCQxIiwiYmFzZW5hbWUkMiIsImRpcm5hbWUkMiIsImNvbmNhdCQzIiwiY2hvcF9zdWZmaXgiLCJleHRlbnNpb25fbGVuIiwiZXh0ZW5zaW9uIiwiY2hvcF9leHRlbnNpb24iLCJyZW1vdmVfZXh0ZW5zaW9uIiwicHJuZyQwIiwidGVtcF9maWxlX25hbWUiLCJ0ZW1wX2RpciIsInJuZCIsImN1cnJlbnRfdGVtcF9kaXJfbmFtZSIsInNldF90ZW1wX2Rpcl9uYW1lIiwiZ2V0X3RlbXBfZGlyX25hbWUiLCJ0ZW1wX2ZpbGUiLCJ0cnlfbmFtZSIsImNvdW50ZXIkMSIsIm9wZW5fdGVtcF9maWxlIiwic3RoJDAiLCJwZXJtcyIsInN0aCQxIiwiYWRkJDEiLCJzdWIkNCIsIm5lZyIsImNvbmoiLCJtdWwiLCJkaXYiLCJpbnYiLCJub3JtMiIsIm5vcm0iLCJxJDAiLCJwb2xhciIsInNxcnQiLCJ3JDAiLCJleHAiLCJsb2ciLCJwb3ciLCJlbmFibGVkIiwiaWZfc3BhY2V0aW1lX2VuYWJsZWQiLCJjcmVhdGUkOCIsImNoYW5uZWwiLCJzYXZlX2V2ZW50IiwidGltZSIsImV2ZW50X25hbWUiLCJzYXZlX2FuZF9jbG9zZSIsInRha2UkMCIsImNsb3NlZCIsInNhdmVfZXZlbnRfZm9yX2F1dG9tYXRpY19zbmFwcyIsImZsb2F0MzIiLCJmbG9hdDY0IiwiaW50OF9zaWduZWQiLCJpbnQ4X3Vuc2lnbmVkIiwiaW50MTZfc2lnbmVkIiwiaW50MTZfdW5zaWduZWQiLCJpbnQzMiQxIiwiaW50NjQkMSIsImludCQyIiwibmF0aXZlaW50JDEiLCJjb21wbGV4MzIiLCJjb21wbGV4NjQiLCJraW5kX3NpemVfaW5fYnl0ZXMiLCJjX2xheW91dCIsImZvcnRyYW5fbGF5b3V0IiwiZGltcyIsInNpemVfaW5fYnl0ZXMiLCJjcmVhdGUkOSIsImxheW91dCIsImdldCQxIiwic2V0JDAiLCJzaXplX2luX2J5dGVzJDAiLCJvZl92YWx1ZSIsImNyZWF0ZSQxMCIsImRpbSIsInNpemVfaW5fYnl0ZXMkMSIsInNsaWNlIiwib2ZfYXJyYXkiLCJiYSIsImNyZWF0ZSQxMSIsImRpbTEiLCJkaW0yIiwic2l6ZV9pbl9ieXRlcyQyIiwic2xpY2VfbGVmdCIsInNsaWNlX3JpZ2h0Iiwib2ZfYXJyYXkkMCIsInJvdyIsImNyZWF0ZSQxMiIsImRpbTMiLCJzaXplX2luX2J5dGVzJDMiLCJzbGljZV9sZWZ0XzEiLCJzbGljZV9yaWdodF8xIiwic2xpY2VfbGVmdF8yIiwic2xpY2VfcmlnaHRfMiIsIm9mX2FycmF5JDEiLCJjb2wiLCJhcnJheTBfb2ZfZ2VuYXJyYXkiLCJhcnJheTFfb2ZfZ2VuYXJyYXkiLCJhcnJheTJfb2ZfZ2VuYXJyYXkiLCJhcnJheTNfb2ZfZ2VuYXJyYXkiLCJyZXNoYXBlXzAiLCJyZXNoYXBlXzEiLCJyZXNoYXBlXzIiLCJyZXNoYXBlXzMiLCJ0YXJpZiIsImRlc3RpbmF0YWlyZXMiLCJwaWVjZXMiLCJmb3Vybml0dXJlcyIsInNob3J0X3N0cmluZ19vZl9waWVjZSIsImxvbmdfc3RyaW5nX29mX3BpZWNlIiwiam9vX2dsb2JhbF9vYmplY3QiLCJudWxsIiwidW5kZWZpbmVkIiwiZXhuIiwiZXZlbnQiLCJzZXRfc3RyaW5nX2lucHV0X2J5X2lkIiwibm0iLCJ2IiwiaW5wIiwicmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQiLCJ6ZXJvX2ludF9pbnB1dF9ieV9pZCIsInJlYWRfaW50X2lucHV0X2J5X2lkIiwic2V0X3RkX2J5X2lkIiwidGQiLCJmaWVsZF9pZF9ieV9mb3Vybml0dXJlIiwiZiIsInAiLCJmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHUiLCJhbGxfbmFtZXMiLCJlbWFpbF9ib2R5IiwiYiIsInNob3J0JDAiLCJmaWVsZF9pZCIsImRldGFpbCIsInMiLCJxIiwiZGVzY3IiLCJ0b3RhbCIsInJlc3VtZV9ib2R5IiwidXBkYXRlX21zZyIsImEiLCJyZXN1bWUiLCJjb21wdXRlIiwicXRlIiwicmVzZXRfZm9ybSIsImRvaXQiXSwic291cmNlcyI6WyIvYnVpbHRpbi8raW50NjQuanMiLCIvYnVpbHRpbi8rbWxCeXRlcy5qcyIsIi9idWlsdGluLytmYWlsLmpzIiwiL2J1aWx0aW4vK3N0ZGxpYi5qcyIsIi9idWlsdGluLytmb3JtYXQuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rZnMuanMiLCIvYnVpbHRpbi8rc3lzLmpzIiwiL2J1aWx0aW4vK2ZzX2Zha2UuanMiLCIvYnVpbHRpbi8rZnNfbm9kZS5qcyIsIi9idWlsdGluLytuYXQuanMiLCIvYnVpbHRpbi8rZ3JhcGhpY3MuanMiLCIvYnVpbHRpbi8rbWFyc2hhbC5qcyIsIi9idWlsdGluLytpby5qcyIsIi9idWlsdGluLytnYy5qcyIsIi9idWlsdGluLytiaWdhcnJheS5qcyIsIi9idWlsdGluLytqc2xpYi5qcyIsIi9idWlsdGluLytwYXJzaW5nLmpzIiwiL2J1aWx0aW4vK2pzbGliX2pzX29mX29jYW1sLmpzIiwiL2J1aWx0aW4vK3VuaXguanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8raW50ZXJuYWxNb2QuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2JpZ3N0cmluZy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rbGV4aW5nLmpzIiwiL2J1aWx0aW4vK2FycmF5LmpzIiwiL2J1aWx0aW4vK3dlYWsuanMiLCIvYnVpbHRpbi8rbWQ1LmpzIiwiL2J1aWx0aW4vK3N0ci5qcyIsIi9idWlsdGluLytiaWdzdHJpbmctY3N0cnVjdC5qcyIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL3VjaGFyLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvaW50NjQubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9sZXhpbmcubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2ZpbGVuYW1lLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvY29tcGxleC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL3N0ZGxpYi5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2Zsb2F0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvbmF0aXZlaW50Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvbGlzdC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL3NlcS5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL29wdGlvbi5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL3Jlc3VsdC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2Jvb2wubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9jaGFyLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvYnl0ZXMubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC91bml0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvbWFyc2hhbC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL29iai5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2FycmF5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvaW50Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvaW50MzIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9wYXJzaW5nLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvc2V0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvbWFwLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvc3RhY2subWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9xdWV1ZS5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2NhbWxpbnRlcm5hbExhenkubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9sYXp5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvc3RyZWFtLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvYnVmZmVyLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvcHJpbnRmLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvYXJnLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvZnVuLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvZ2MubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9kaWdlc3QubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9yYW5kb20ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9oYXNodGJsLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvd2Vhay5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2Zvcm1hdC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL3NjYW5mLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEwLjArZmxhbWJkYS9saWIvb2NhbWwvY2FsbGJhY2subWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTAuMCtmbGFtYmRhL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxPTy5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2dlbmxleC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2VwaGVtZXJvbi5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL3NwYWNldGltZS5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMC4wK2ZsYW1iZGEvbGliL29jYW1sL2JpZ2FycmF5Lm1sIiwiL2hvbWUvbWF0dC9wcm9qZXRzL2xvY2F0aW9uX2R1YnV2YWwvX2J1aWxkL2RlZmF1bHQvaW52ZW50YWlyZV9saW5nZS9pbnZlbnRhaXJlX2xpbmdlLm1sIiwiIiwiL2hvbWUvbWF0dC9wcm9qZXRzL2xvY2F0aW9uX2R1YnV2YWwvX2J1aWxkL2RlZmF1bHQvbWVjaGFuaWMvbWVjaGFuaWMubWwiXSwibWFwcGluZ3MiOiI7Ozs7SUEwT0EsU0FBU0EsbUJBQW1CQyxHQUFLLFNBQVEsVUFBWTtJQ3pMckQsU0FBU0MsZ0JBQWdCQyxFQUFHQztNQUMxQixHQUFHRCxPQUFRO01BQ1gsR0FBSUMsU0FBVSxPQUFRLFNBQVNEO01BQy9CLElBQU0sS0FBUTtNQUNkO09BQVEsQ0FDTixHQUFJQSxNQUFPRSxLQUFLRDtRQUNoQkQ7UUFDQSxHQUFJQSxPQUFRLE9BQU9FO1FBQ25CRCxLQUFLQTtRQUNMRTtRQUNBLEdBQUlBLE9BQVEsYUFNaEI7SUQ3Q0EsSUFBSUMsa0JBQW9CO0lFQXhCLFNBQVNFLG9CQUFxQkMsS0FBTyxNQUFNQSxHQUFLO0lDMkNoRCxJQUFJQztJRFJKLFNBQVNDO01BQ1Asb0JBQW9CRCxrQ0FDdEI7SUZqQ0EsU0FBU0UsUUFBU0MsR0FBR0MsR0FBR0M7TUFDdEJDLFVBQVVILGNBQ1ZHLFVBQVVGLGNBQ1ZFLFVBQVVELFdBQ1o7SUFDQUg7SUFDQUE7O2VBQ0UsV0FBV0EsUUFBUUksUUFBUUEsUUFBUUEs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDa0JLNGhDO0tBQ0FDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDd0JBQztLQUNBQztLQUNBQztLQUlBQztLQUNBQzs7OztLQ3pCQUM7S0FvSEFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQ205RU1DO0tBUVFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDbGxGZEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0NzRUVDO0tBQ0FDO0tBQ0FDO0tBQ0FDOzs7S0EvRVlDO0tBcUhaQztLQUNBQztLQUNBQztLQUNBQzs7O0tBbUlBQztLQUNBQztLQUNBQztLQUNBQzs7O0tDMVBGQztLQUNBQztLQUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lDQ0NHOztLRERELFdDQ0NDO0tEREQsSUNDQ0M7SURERDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJDQ1lDLEtBQU8sTUFBTUEsR0FBdkI7SURERjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JDQ0NDLE1EREQ7Ozs7Ozs7Ozs7eUJDQ0NBLE1EREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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O01BRUE7T0FERUM7UUFDRjtVQUNFOzs7TUFERixPQURFQTtnQkFNRjtnQkFDQTtnQkFDQTtnQkFDQSwyQkExT0F6QixxQkFtQ0FRO2dCQXVNQTtlQVRFaUIsSUFVVTtJQUdkLDBDQWhDRUg7SUFpQ0YsNkNBZkVFO0lBZUY7OztPQS9QRTdCO09BUUFJO09BUUFDO09BUUFDO09BUUFDO09BUUFFO09BS0FHO09BTUFDO09BR0FDO09Bd0NBUztPQTBHQUM7T0FzQkFHO09Ba0JBRTtJQWVGO1VEbFFIIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gTWxJbnQ2NCAobG8sbWksaGkpIHtcbiAgdGhpcy5sbyA9IGxvICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSBtaSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IFwiX2pcIlxuTWxJbnQ2NC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8sdGhpcy5taSx0aGlzLmhpKTtcbn1cblxuTWxJbnQ2NC5wcm90b3R5cGUudWNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICBpZiAodGhpcy5oaSA+IHguaGkpIHJldHVybiAxO1xuICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICB2YXIgeGhpID0geC5oaSA8PCAxNjtcbiAgaWYgKGhpID4geGhpKSByZXR1cm4gMTtcbiAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsbyA9IC0gdGhpcy5sbztcbiAgdmFyIG1pID0gLSB0aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gLSB0aGlzLmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyArIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgKyB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvIC0geC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpIC0geC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICB2YXIgbWkgPSAoKGxvICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLm1pICogeC5sbyArIHRoaXMubG8gKiB4Lm1pO1xuICB2YXIgaGkgPSAoKG1pICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLmhpICogeC5sbyArIHRoaXMubWkgKiB4Lm1pICsgdGhpcy5sbyAqIHguaGk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmxvfHRoaXMubWl8dGhpcy5oaSkgPT0gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzTmVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMuaGkgPDwgMTYpIDwgMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvICYgeC5sbywgdGhpcy5taSAmIHgubWksIHRoaXMuaGkgJiB4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG98eC5sbywgdGhpcy5taXx4Lm1pLCB0aGlzLmhpfHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG9eeC5sbywgdGhpcy5taV54Lm1pLCB0aGlzLmhpXnguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfbGVmdCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmxvIDw8IHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCBzKSB8ICh0aGlzLmxvID4+ICgyNCAtIHMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpKTtcbiAgfVxuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG8gPDwgKHMgLSAyNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCAocyAtIDI0KSkgfCAodGhpcy5sbyA+PiAoNDggLSBzKSkpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSlcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAodGhpcy5oaSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiBzKSk7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IChzIC0gMjQpKSxcbiAgICAgIDApO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgdmFyIGggPSAodGhpcy5oaSA8PCAxNikgPj4gMTY7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAoaCA8PCAoMjQgLSBzKSksXG4gICAgICAoKHRoaXMuaGkgPDwgMTYpID4+IHMpID4+PiAxNik7XG4gIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAyNCkgPj4gMTYsXG4gICAgICBzaWduICYgMHhmZmZmKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNsMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oaSA9ICh0aGlzLmhpIDw8IDEpIHwgKHRoaXMubWkgPj4gMjMpO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pIDw8IDEpIHwgKHRoaXMubG8gPj4gMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzcjEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG8gPSAoKHRoaXMubG8gPj4+IDEpIHwgKHRoaXMubWkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pID4+PiAxKSB8ICh0aGlzLmhpIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG59XG5NbEludDY0LnByb3RvdHlwZS51ZGl2bW9kID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIHZhciBtb2R1bHVzID0gdGhpcy5jb3B5KCk7XG4gIHZhciBkaXZpc29yID0geC5jb3B5KCk7XG4gIHZhciBxdW90aWVudCA9IG5ldyBNbEludDY0KDAsMCwwKTtcbiAgd2hpbGUgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPiAwKSB7XG4gICAgb2Zmc2V0Kys7XG4gICAgZGl2aXNvci5sc2wxKCk7XG4gIH1cbiAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgb2Zmc2V0IC0tO1xuICAgIHF1b3RpZW50LmxzbDEoKTtcbiAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICBxdW90aWVudC5sbyArKztcbiAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICB9XG4gICAgZGl2aXNvci5sc3IxKCk7XG4gIH1cbiAgcmV0dXJuIHsgcXVvdGllbnQgOiBxdW90aWVudCwgbW9kdWx1cyA6IG1vZHVsdXMgfTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGkgXiB5LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHEgPSB4LnVkaXZtb2QoeSkucXVvdGllbnQ7XG4gIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgcmV0dXJuIHE7XG59XG5NbEludDY0LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgaWYgKHNpZ24gJiAweDgwMDApIHIgPSByLm5lZygpO1xuICByZXR1cm4gcjtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvRmxvYXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMuaGkgPDwgMTYpICogTWF0aC5wb3coMiwgMzIpICsgdGhpcy5taSAqIE1hdGgucG93KDIsIDI0KSkgKyB0aGlzLmxvO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFt0aGlzLmhpID4+IDgsXG4gICAgICAgICAgdGhpcy5oaSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICAgICAodGhpcy5taSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICAgICAodGhpcy5sbyA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyAmIDB4ZmZdO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubG8zMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAoKHRoaXMubWkgJiAweGZmKSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5oaTMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdWx0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3VsdCh4LHkpIHsgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jb21wYXJlKHgseSwgdG90YWwpIHsgcmV0dXJuIHguY29tcGFyZSh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbmVnIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X25lZyAoeCkgeyByZXR1cm4geC5uZWcoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCAoeCwgeSkgeyByZXR1cm4geC5hZGQoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3N1YiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zdWIgKHgsIHkpIHsgcmV0dXJuIHguc3ViKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tdWwgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2ludDY0X211bCh4LHkpIHsgcmV0dXJuIHgubXVsKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc196ZXJvIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX3plcm8oeCkgeyByZXR1cm4gK3guaXNaZXJvKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7IHJldHVybiAreC5pc05lZygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYW5kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FuZCAoeCwgeSkgeyByZXR1cm4geC5hbmQoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vciAoeCwgeSkgeyByZXR1cm4geC5vcih5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3hvciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF94b3IgKHgsIHkpIHsgcmV0dXJuIHgueG9yKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfbGVmdChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHRfdW5zaWduZWQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9kaXYgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZGl2ICh4LCB5KSB7IHJldHVybiB4LmRpdih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCAoeCwgeSkgeyByZXR1cm4geC5tb2QoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2ludDMyIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh4ICYgMHhmZmZmZmYsICh4ID4+IDI0KSAmIDB4ZmZmZmZmLCAoeCA+PiAzMSkgJiAweGZmZmYpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9faW50MzIgKHgpIHsgcmV0dXJuIHgudG9JbnQoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQgKHgpIHsgcmV0dXJuIHgudG9GbG9hdCAoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0ICh4KSB7XG4gIGlmICh4IDwgMCkgeCA9IE1hdGguY2VpbCh4KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIHggJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZm9ybWF0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdG9faW50MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfemVybywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zvcm1hdCAoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7IHggPSBjYW1sX2ludDY0X25lZyh4KTtcbiAgfVxuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgdmFyIHdiYXNlID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihmLmJhc2UpO1xuICB2YXIgY3Z0YmwgPSBcIjAxMjM0NTY3ODlhYmNkZWZcIjtcbiAgZG8ge1xuICAgIHZhciBwID0geC51ZGl2bW9kKHdiYXNlKTtcbiAgICB4ID0gcC5xdW90aWVudDtcbiAgICBidWZmZXIgPSBjdnRibC5jaGFyQXQoY2FtbF9pbnQ2NF90b19pbnQzMihwLm1vZHVsdXMpKSArIGJ1ZmZlcjtcbiAgfSB3aGlsZSAoISBjYW1sX2ludDY0X2lzX3plcm8oeCkpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBidWZmZXI7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgYnVmZmVyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9mYWlsd2l0aCwgY2FtbF9wYXJzZV9kaWdpdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF91bHRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X211bCwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCxjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBiYXNlNjQgPSBjYW1sX2ludDY0X29mX2ludDMyKGJhc2UpO1xuICB2YXIgdGhyZXNob2xkID1cbiAgICAgIG5ldyBNbEludDY0KDB4ZmZmZmZmLCAweGZmZmZmZmYsIDB4ZmZmZikudWRpdm1vZChiYXNlNjQpLnF1b3RpZW50O1xuICB2YXIgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gbXVsdGlwbGljYXRpb24gYmFzZSAqIHJlcyAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdCh0aHJlc2hvbGQsIHJlcykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKGJhc2UgPT0gMTAgJiYgY2FtbF9pbnQ2NF91bHQobmV3IE1sSW50NjQoMCwgMCwgMHg4MDAwKSwgcmVzKSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKHNpZ24gPCAwKSByZXMgPSBjYW1sX2ludDY0X25lZyhyZXMpO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkobG8sIG1pLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKVxufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGxvLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgbG8gJiAweGZmZmZmZixcbiAgICAoKGxvID4+PiAyNCkgJiAweGZmKSB8ICgoaGkgJiAweGZmZmYpIDw8IDgpLFxuICAgIChoaSA+Pj4gMTYpICYgMHhmZmZmKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpeyByZXR1cm4gdi5sbzMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KXsgcmV0dXJuIHYuaGkzMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChhWzddIDw8IDAgfCAoYVs2XSA8PCA4KSB8IChhWzVdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbNF0gPDwgMCB8IChhWzNdIDw8IDgpIHwgKGFbMl0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVsxXSA8PCAwIHwgKGFbMF0gPDwgOCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19ieXRlcyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19ieXRlcyh4KSB7IHJldHVybiB4LnRvQXJyYXkoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpe1xuICByZXR1cm4gKHYubG8zMigpKSBeICh2LmhpMzIoKSlcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgaWYobiA9PSAwKSByZXR1cm4gXCJcIjtcbiAgaWYgKHMucmVwZWF0KSB7cmV0dXJuIHMucmVwZWF0KG4pO30gLy8gRUNNQXNjcmlwdCA2IGFuZCBGaXJlZm94IDI0K1xuICB2YXIgciA9IFwiXCIsIGwgPSAwO1xuICBmb3IoOzspIHtcbiAgICBpZiAobiAmIDEpIHIgKz0gcztcbiAgICBuID4+PSAxO1xuICAgIGlmIChuID09IDApIHJldHVybiByO1xuICAgIHMgKz0gcztcbiAgICBsKys7XG4gICAgaWYgKGwgPT0gOSkge1xuICAgICAgcy5zbGljZSgwLDEpOyAvLyBmbGF0dGVuIHRoZSBzdHJpbmdcbiAgICAgIC8vIHRoZW4sIHRoZSBmbGF0dGVuaW5nIG9mIHRoZSB3aG9sZSBzdHJpbmcgd2lsbCBiZSBmYXN0ZXIsXG4gICAgICAvLyBhcyBpdCB3aWxsIGJlIGNvbXBvc2VkIG9mIGxhcmdlciBwaWVjZXNcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT0gMCAmJiBsZW4gPD0gNDA5NiAmJiBsZW4gPT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5IChudWxsLCBhKTtcbiAgdmFyIHMgPSBcIlwiO1xuICBmb3IgKDsgMCA8IGxlbjsgaSArPSAxMDI0LGxlbi09MTAyNClcbiAgICBzICs9IGYuYXBwbHkgKG51bGwsIGEuc2xpY2UoaSxpICsgTWF0aC5taW4obGVuLCAxMDI0KSkpO1xuICByZXR1cm4gcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGY4X29mX3V0ZjE2XG5mdW5jdGlvbiBjYW1sX3V0Zjhfb2ZfdXRmMTYocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IGIsIGMsIGQsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGMwIHwgKGMgPj4gNikpO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPCAweGQ4MDAgfHwgYyA+PSAweGRmZmYpIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGUwIHwgKGMgPj4gMTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjID49IDB4ZGJmZiB8fCBpICsgMSA9PSBsIHx8XG4gICAgICAgICAgICAgICAoZCA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGQgPiAweGRmZmYpIHtcbiAgICAgIC8vIFVubWF0Y2hlZCBzdXJyb2dhdGUgcGFpciwgcmVwbGFjZWQgYnkgXFx1ZmZmZCAocmVwbGFjZW1lbnQgY2hhcmFjdGVyKVxuICAgICAgdCArPSBcIlxceGVmXFx4YmZcXHhiZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjID0gKGMgPDwgMTApICsgZCAtIDB4MzVmZGMwMDtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGYwIHwgKGMgPj4gMTgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gMTIpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIGNhbWxfdXRmMTZfb2ZfdXRmOChzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gXCJcIiwgYywgYzEsIGMyLCB2LCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYzEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMxIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjMSA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICB2ID0gMTtcbiAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgYyA9IGMyICsgKGMxIDw8IDYpO1xuICAgICAgaWYgKGMxIDwgMHhlMCkge1xuICAgICAgICB2ID0gYyAtIDB4MzA4MDtcbiAgICAgICAgaWYgKHYgPCAweDgwKSB2ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHYgPSAyO1xuICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgICAgIGMgPSBjMiArIChjIDw8IDYpO1xuICAgICAgICAgIGlmIChjMSA8IDB4ZjApIHtcbiAgICAgICAgICAgIHYgPSBjIC0gMHhlMjA4MDtcbiAgICAgICAgICAgIGlmICgodiA8IDB4ODAwKSB8fCAoKHYgPj0gMHhkN2ZmKSAmJiAodiA8IDB4ZTAwMCkpKSB2ID0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdiA9IDM7XG4gICAgICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSAmJlxuICAgICAgICAgICAgICAgIChjMSA8IDB4ZjUpKSB7XG4gICAgICAgICAgICAgIHYgPSBjMiAtIDB4M2M4MjA4MCArIChjIDw8IDYpO1xuICAgICAgICAgICAgICBpZiAodiA8IDB4MTAwMDAgfHwgdiA+IDB4MTBmZmZmKSB2ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHYgPCA0KSB7IC8vIEludmFsaWQgc2VxdWVuY2VcbiAgICAgIGkgLT0gdjtcbiAgICAgIHQgKz0gXCJcXHVmZmZkXCI7XG4gICAgfSBlbHNlIGlmICh2ID4gMHhmZmZmKVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZDdjMCArICh2ID4+IDEwKSwgMHhkYzAwICsgKHYgJiAweDNGRikpXG4gICAgZWxzZVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYpO1xuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczoganNvb19pc19hc2NpaVxuZnVuY3Rpb24ganNvb19pc19hc2NpaSAocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZVxuICAgIHJldHVybiAhL1teXFx4MDAtXFx4N2ZdLy50ZXN0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgaWYgKGkgPj0gcy5jLmxlbmd0aCkgcmV0dXJuIDA7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jLmNoYXJDb2RlQXQoaSk7XG4gIGNhc2UgNDogLyogQVJSQVkgKi9cbiAgICByZXR1cm4gcy5jW2ldXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYykge1xuICAvLyBUaGUgT0NhbWwgY29tcGlsZXIgdXNlcyBDaGFyLnVuc2FmZV9jaHIgb24gaW50ZWdlcnMgbGFyZ2VyIHRoYW4gMjU1IVxuICBjICY9IDB4ZmY7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09IHMuYy5sZW5ndGgpIHtcbiAgICAgIHMuYyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgIGlmIChpICsgMSA9PSBzLmwpIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocyk7XG4gIH1cbiAgcy5jW2ldID0gYztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAxKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDMpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSA3KSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMiA9IDB4RkYgJiBpMTYgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkxNjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQxNlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiNCA9IDB4RkYgJiBpMzIgPj4gMjQsXG4gICAgICBiMyA9IDB4RkYgJiBpMzIgPj4gMTYsXG4gICAgICBiMiA9IDB4RkYgJiBpMzIgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkzMjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDIsIGIzKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMywgYjQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MzJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKykge1xuICAgIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0NjRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nIChzKSB7XG4gIHZhciB0YWcgPSA5IC8qIEJZVEVTIHwgQVNDSUkgKi87XG4gIGlmICghanNvb19pc19hc2NpaShzKSlcbiAgICB0YWcgPSA4IC8qIEJZVEVTIHwgTk9UX0FTQ0lJICovLCBzID0gY2FtbF91dGY4X29mX3V0ZjE2KHMpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGFnLCBzLCBzLmxlbmd0aCk7XG59XG5cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBNbEJ5dGVzICh0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgdGhpcy50PXRhZzsgdGhpcy5jPWNvbnRlbnRzOyB0aGlzLmw9bGVuZ3RoO1xufVxuTWxCeXRlcy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpe1xuICBzd2l0Y2ggKHRoaXMudCkge1xuICBjYXNlIDk6IC8qQllURVMgfCBBU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgZGVmYXVsdDpcbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICBjYXNlIDA6IC8qQllURVMgfCBVTktPV04qL1xuICAgIGlmIChqc29vX2lzX2FzY2lpKHRoaXMuYykpIHtcbiAgICAgIHRoaXMudCA9IDk7IC8qQllURVMgfCBBU0NJSSovXG4gICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgICB0aGlzLnQgPSA4OyAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgY2FzZSA4OiAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHRoaXMuYyk7XG4gIH1cbn07XG5NbEJ5dGVzLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uICgpe1xuICB2YXIgY29udGVudCA9IHRoaXMudCA9PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0aGlzLnQsY29udGVudCx0aGlzLmwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyAocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09IDIgLyogUEFSVElBTCAqLylcbiAgICBzLmMgKz0gY2FtbF9zdHJfcmVwZWF0KHMubCAtIHMuYy5sZW5ndGgsICdcXDAnKVxuICBlbHNlXG4gICAgcy5jID0gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgaWYoam9vX2dsb2JhbF9vYmplY3QuVWludDhBcnJheSkge1xuICAgIHZhciBhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LlVpbnQ4QXJyYXkocy5sKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYSA9IG5ldyBBcnJheShzLmwpO1xuICB9XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICB2YXIgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgaWYobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCeXRlcy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsMCxhLmxlbmd0aCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5IChhKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX3N0cmluZ19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPD0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMixzMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczIsczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT0gMCAmJiAobCA+PSBzLmwgfHwgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbCA+PSBzLmMubGVuZ3RoKSkpIHtcbiAgICAgIGlmIChjID09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0IChsLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICAgICAgcy50ID0gKGwgPT0gcy5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbGxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2ZpbGxfYnl0ZXNcbnZhciBjYW1sX2ZpbGxfc3RyaW5nID0gY2FtbF9maWxsX2J5dGVzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmxpdF9ieXRlcyhzMSwgaTEsIHMyLCBpMiwgbGVuKSB7XG4gIGlmIChsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIGlmICgoaTIgPT0gMCkgJiZcbiAgICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbGVuID49IHMyLmMubGVuZ3RoKSkpIHtcbiAgICBzMi5jID0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgaTIgPT0gczIuYy5sZW5ndGgpIHtcbiAgICBzMi5jICs9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzMik7XG4gICAgdmFyIGMxID0gczEuYywgYzIgPSBzMi5jO1xuICAgIGlmIChzMS50ID09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbCA9IE1hdGgubWluIChsZW4sIGMxLmxlbmd0aCAtIGkxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYmxpdF9zdHJpbmcoYSxiLGMsZCxlKSB7XG4gICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGEpLGIsYyxkLGUpO1xuICAgIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKSB7IHJldHVybiBzLmwgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gcy5sZW5ndGhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPy0xOihzMSA+IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICBpZihzMSA9PT0gczIpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8PSBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhbiBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocy5jKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gcztcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIGlmIChqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpXG4gIGVsc2UgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF91dGY4X29mX3V0ZjE2KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocykgeyByZXR1cm4gbmV3IE1sQnl0ZXMoMCxzLHMubGVuZ3RoKTsgfVxuXG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLGksYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgaWYgKChzLnQgJiA2KSAhPSAwIC8qIEJZVEVTICovKSBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jIH1cblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKXtcbiAgcmV0dXJuIHMudG9TdHJpbmcoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gKHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3QocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9pc19tbF9ieXRlcyhzKTtcbn1cblxuLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgZGVwcmVjYXRlZFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbmV3X3N0cmluZyAocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19mcm9tX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3RvX2pzX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdG9fc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUmFpc2UgZXhjZXB0aW9uXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9jb25zdGFudCAodGFnKSB7IHRocm93IHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JldHVybl9leG5fY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50ICh0YWcpIHsgcmV0dXJuIHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGFyZykgeyB0aHJvdyBbMCwgdGFnLCBhcmddOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKHRhZywgbXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9hcmcgKHRhZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhtc2cpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYWlsd2l0aCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ZhaWx3aXRoIChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfaW52YWxpZF9hcmd1bWVudCAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkVuZF9vZl9maWxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5EaXZpc2lvbl9ieV96ZXJvKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgaWYoZi5mdW4pXG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZi5mdW4sIGFyZ3MpO1xuICAvL0ZJWE1FLCBjYW4gaGFwcGVuIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzXG4gIGlmKHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmO1xuICB2YXIgbiA9IGYubGVuZ3RoIHwgMDtcbiAgaWYobiA9PT0gMCkgcmV0dXJuIGYuYXBwbHkobnVsbCxhcmdzKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aCB8IDA7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW4gfCAwO1xuICBpZiAoZCA9PSAwKVxuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICBlbHNlIGlmIChkIDwgMCkge1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuYXBwbHkobnVsbCxhcmdzLnNsaWNlKDAsbikpLGFyZ3Muc2xpY2UobikpO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKXtcbiAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3MubGVuZ3RoK2V4dHJhX2FyZ3MpO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgbmFyZ3NbYXJncy5sZW5ndGgraV0gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZXNcbnZhciBjYW1sX25hbWVkX3ZhbHVlcyA9IHt9O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIChjb25zdCxjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLHYpIHtcbiAgY2FtbF9uYW1lZF92YWx1ZXNbY2FtbF9qc2J5dGVzX29mX3N0cmluZyhubSldID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG5mdW5jdGlvbiBjYW1sX25hbWVkX3ZhbHVlKG5tKSB7XG4gIHJldHVybiBjYW1sX25hbWVkX3ZhbHVlc1tubV1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9nbG9iYWxfZGF0YVxudmFyIGNhbWxfZ2xvYmFsX2RhdGEgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChjb25zdCwgc2hhbGxvdywgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYobmFtZV9vcHQgJiYgam9vX2dsb2JhbF9vYmplY3QudG9wbGV2ZWxSZWxvYylcbiAgICBuID0gam9vX2dsb2JhbF9vYmplY3QudG9wbGV2ZWxSZWxvYyhuYW1lX29wdCk7XG4gIGNhbWxfZ2xvYmFsX2RhdGFbbiArIDFdID0gdjtcbiAgaWYobmFtZV9vcHQpIGNhbWxfZ2xvYmFsX2RhdGFbbmFtZV9vcHRdID0gdjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfZ2xvYmFsX2RhdGEgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9nZXRfZ2xvYmFsX2RhdGEgKCkgeyByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3ByaW50YWJsZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2lzX3ByaW50YWJsZShjKSB7IHJldHVybiArKGMgPiAzMSAmJiBjIDwgMTI3KTsgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBGb3JtYXRcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9mb3JtYXRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9mb3JtYXQgKGZtdCkge1xuICBmbXQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCk7XG4gIHZhciBsZW4gPSBmbXQubGVuZ3RoO1xuICBpZiAobGVuID4gMzEpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImZvcm1hdF9pbnQ6IGZvcm1hdCB0b28gbG9uZ1wiKTtcbiAgdmFyIGYgPVxuICAgICAgeyBqdXN0aWZ5OicrJywgc2lnbnN0eWxlOictJywgZmlsbGVyOicgJywgYWx0ZXJuYXRlOmZhbHNlLFxuICAgICAgICBiYXNlOjAsIHNpZ25lZGNvbnY6ZmFsc2UsIHdpZHRoOjAsIHVwcGVyY2FzZTpmYWxzZSxcbiAgICAgICAgc2lnbjoxLCBwcmVjOi0xLCBjb252OidmJyB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgIGNhc2UgJy0nOlxuICAgICAgZi5qdXN0aWZ5ID0gJy0nOyBicmVhaztcbiAgICBjYXNlICcrJzogY2FzZSAnICc6XG4gICAgICBmLnNpZ25zdHlsZSA9IGM7IGJyZWFrO1xuICAgIGNhc2UgJzAnOlxuICAgICAgZi5maWxsZXIgPSAnMCc7IGJyZWFrO1xuICAgIGNhc2UgJyMnOlxuICAgICAgZi5hbHRlcm5hdGUgPSB0cnVlOyBicmVhaztcbiAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6XG4gICAgY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6XG4gICAgICBmLndpZHRoID0gMDtcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7IGkrK1xuICAgICAgfVxuICAgICAgaS0tO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnLic6XG4gICAgICBmLnByZWMgPSAwO1xuICAgICAgaSsrO1xuICAgICAgd2hpbGUgKGM9Zm10LmNoYXJDb2RlQXQoaSkgLSA0OCwgYyA+PSAwICYmIGMgPD0gOSkge1xuICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7IGkrK1xuICAgICAgfVxuICAgICAgaS0tO1xuICAgIGNhc2UgJ2QnOiBjYXNlICdpJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAndSc6XG4gICAgICBmLmJhc2UgPSAxMDsgYnJlYWs7XG4gICAgY2FzZSAneCc6XG4gICAgICBmLmJhc2UgPSAxNjsgYnJlYWs7XG4gICAgY2FzZSAnWCc6XG4gICAgICBmLmJhc2UgPSAxNjsgZi51cHBlcmNhc2UgPSB0cnVlOyBicmVhaztcbiAgICBjYXNlICdvJzpcbiAgICAgIGYuYmFzZSA9IDg7IGJyZWFrO1xuICAgIGNhc2UgJ2UnOiBjYXNlICdmJzogY2FzZSAnZyc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyBmLmNvbnYgPSBjOyBicmVhaztcbiAgICBjYXNlICdFJzogY2FzZSAnRic6IGNhc2UgJ0cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi51cHBlcmNhc2UgPSB0cnVlO1xuICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSAoKTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHJhd2J1ZmZlcikge1xuICBpZiAoZi51cHBlcmNhc2UpIHJhd2J1ZmZlciA9IHJhd2J1ZmZlci50b1VwcGVyQ2FzZSgpO1xuICB2YXIgbGVuID0gcmF3YnVmZmVyLmxlbmd0aDtcbiAgLyogQWRqdXN0IGxlbiB0byByZWZsZWN0IGFkZGl0aW9uYWwgY2hhcnMgKHNpZ24sIGV0YykgKi9cbiAgaWYgKGYuc2lnbmVkY29udiAmJiAoZi5zaWduIDwgMCB8fCBmLnNpZ25zdHlsZSAhPSAnLScpKSBsZW4rKztcbiAgaWYgKGYuYWx0ZXJuYXRlKSB7XG4gICAgaWYgKGYuYmFzZSA9PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09IDE2KSBsZW4gKz0gMjtcbiAgfVxuICAvKiBEbyB0aGUgZm9ybWF0dGluZyAqL1xuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJyAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9ICctJztcbiAgICBlbHNlIGlmIChmLnNpZ25zdHlsZSAhPSAnLScpIGJ1ZmZlciArPSBmLnNpZ25zdHlsZTtcbiAgfVxuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDgpIGJ1ZmZlciArPSAnMCc7XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT0gMTYpIGJ1ZmZlciArPSBcIjB4XCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcwJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJzAnO1xuICBidWZmZXIgKz0gcmF3YnVmZmVyO1xuICBpZiAoZi5qdXN0aWZ5ID09ICctJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWZmZXIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGpzb29fZmxvb3JfbG9nMlxudmFyIGxvZzJfb2sgPSBNYXRoLmxvZzIgJiYgTWF0aC5sb2cyKDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3KSA9PSAxMDIwXG5mdW5jdGlvbiBqc29vX2Zsb29yX2xvZzIoeCkge1xuICBpZihsb2cyX29rKSByZXR1cm4gTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpXG4gIHZhciBpID0gMDtcbiAgaWYgKHggPT0gMCkgcmV0dXJuIC1JbmZpbml0eTtcbiAgaWYoeD49MSkge3doaWxlICh4Pj0yKSB7eC89MjsgaSsrfSB9XG4gIGVsc2Uge3doaWxlICh4IDwgMSkge3gqPTI7IGktLX0gfTtcbiAgcmV0dXJuIGk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyLCBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMSwgMCwgMHg3ZmYwKTtcbiAgICBpZiAoeCA+IDApXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHg3ZmYwKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweGZmZjApXG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8weDgwMDA6KHg+PTApPzA6MHg4MDAwO1xuICBpZiAoc2lnbikgeCA9IC14O1xuICAvLyBJbnQ2NC5iaXRzX29mX2Zsb2F0IDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3ID0gMHg3ZmIwMDAwMDAwMDAwMDAwTFxuICAvLyB1c2luZyBNYXRoLkxPRzJFKk1hdGgubG9nKHgpIGluIHBsYWNlIG9mIE1hdGgubG9nMiByZXN1bHQgaW4gcHJlY2lzaW9uIGxvc3RcbiAgdmFyIGV4cCA9IGpzb29fZmxvb3JfbG9nMih4KSArIDEwMjM7XG4gIGlmIChleHAgPD0gMCkge1xuICAgIGV4cCA9IDA7XG4gICAgeCAvPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgfSBlbHNlIHtcbiAgICB4IC89IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICAgIGlmICh4IDwgMTYpIHtcbiAgICAgIHggKj0gMjsgZXhwIC09MTsgfVxuICAgIGlmIChleHAgPT0gMCkge1xuICAgICAgeCAvPSAyOyB9XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLDI0KTtcbiAgdmFyIHIzID0geHwwO1xuICB4ID0gKHggLSByMykgKiBrO1xuICB2YXIgcjIgPSB4fDA7XG4gIHggPSAoeCAtIHIyKSAqIGs7XG4gIHZhciByMSA9IHh8MDtcbiAgcjMgPSAocjMgJjB4ZikgfCBzaWduIHwgZXhwIDw8IDQ7XG4gIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShyMSwgcjIsIHIzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCAoeCkge1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuRmxvYXQzMkFycmF5KDEpO1xuICBmbG9hdDMyYVswXSA9IHg7XG4gIHZhciBpbnQzMmEgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuSW50MzJBcnJheShmbG9hdDMyYS5idWZmZXIpO1xuICByZXR1cm4gaW50MzJhWzBdIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgKHgsIHByZWMsIHN0eWxlKSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIm5hblwiKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKCh4ID4gMCk/XCJpbmZpbml0eVwiOlwiLWluZmluaXR5XCIpO1xuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MTooeD49MCk/MDoxO1xuICBpZihzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PSAwKSB7IH1cbiAgZWxzZSBpZiAoeCA8IDEpIHtcbiAgICB3aGlsZSAoeCA8IDEgJiYgZXhwID4gLTEwMjIpICB7IHggKj0gMjsgZXhwLS0gfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlICh4ID49IDIpIHsgeCAvPSAyOyBleHArKyB9XG4gIH1cbiAgdmFyIGV4cF9zaWduID0gZXhwIDwgMCA/ICcnIDogJysnO1xuICB2YXIgc2lnbl9zdHIgPSAnJztcbiAgaWYgKHNpZ24pIHNpZ25fc3RyID0gJy0nXG4gIGVsc2Uge1xuICAgIHN3aXRjaChzdHlsZSl7XG4gICAgY2FzZSA0MyAvKiAnKycgKi86IHNpZ25fc3RyID0gJysnOyBicmVhaztcbiAgICBjYXNlIDMyIC8qICcgJyAqLzogc2lnbl9zdHIgPSAnICc7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAocHJlYyA+PSAwICYmIHByZWMgPCAxMykge1xuICAgIC8qIElmIGEgcHJlY2lzaW9uIGlzIGdpdmVuLCBhbmQgaXMgc21hbGwsIHJvdW5kIG1hbnRpc3NhIGFjY29yZGluZ2x5ICovXG4gICAgdmFyIGNzdCA9IE1hdGgucG93KDIscHJlYyAqIDQpO1xuICAgIHggPSBNYXRoLnJvdW5kKHggKiBjc3QpIC8gY3N0O1xuICB9XG4gIHZhciB4X3N0ciA9IHgudG9TdHJpbmcoMTYpO1xuICBpZihwcmVjID49IDApe1xuICAgIHZhciBpZHggPSB4X3N0ci5pbmRleE9mKCcuJyk7XG4gICAgaWYoaWR4PDApIHtcbiAgICAgIHhfc3RyICs9ICcuJyArIGNhbWxfc3RyX3JlcGVhdChwcmVjLCAnMCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBzaXplID0gaWR4KzErcHJlYztcbiAgICAgIGlmKHhfc3RyLmxlbmd0aCA8IHNpemUpXG4gICAgICAgIHhfc3RyICs9IGNhbWxfc3RyX3JlcGVhdChzaXplIC0geF9zdHIubGVuZ3RoLCAnMCcpO1xuICAgICAgZWxzZVxuICAgICAgICB4X3N0ciA9IHhfc3RyLnN1YnN0cigwLHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHNpZ25fc3RyICsgJzB4JyArIHhfc3RyICsgJ3AnICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGxvID0geC5sbztcbiAgdmFyIG1pID0geC5taTtcbiAgdmFyIGhpID0geC5oaTtcbiAgdmFyIGV4cCA9IChoaSAmIDB4N2ZmZikgPj4gNDtcbiAgaWYgKGV4cCA9PSAyMDQ3KSB7XG4gICAgaWYgKChsb3xtaXwoaGkmMHhmKSkgPT0gMClcbiAgICAgIHJldHVybiAoaGkgJiAweDgwMDApPygtSW5maW5pdHkpOkluZmluaXR5O1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLC0yNCk7XG4gIHZhciByZXMgPSAobG8qayttaSkqaysoaGkmMHhmKTtcbiAgaWYgKGV4cCA+IDApIHtcbiAgICByZXMgKz0gMTY7XG4gICAgcmVzICo9IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICB9IGVsc2VcbiAgICByZXMgKj0gTWF0aC5wb3coMiwtMTAyNik7XG4gIGlmIChoaSAmIDB4ODAwMCkgcmVzID0gLSByZXM7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV4dGFmdGVyX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfc3ViLGNhbWxfaW50NjRfb2ZfaW50MzJcbmZ1bmN0aW9uIGNhbWxfbmV4dGFmdGVyX2Zsb2F0ICh4LHkpIHtcbiAgaWYoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybiBOYU47XG4gIGlmKHg9PXkpIHJldHVybiB5O1xuICBpZih4PT0wKXtcbiAgICBpZih5IDwgMClcbiAgICAgIHJldHVybiAtTWF0aC5wb3coMiwgLTEwNzQpXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE1hdGgucG93KDIsIC0xMDc0KVxuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKCh4PHkpID09ICh4PjApKVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X2FkZChiaXRzLCBvbmUpXG4gIGVsc2VcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9zdWIoYml0cywgb25lKVxuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGJpdHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RydW5jX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX3RydW5jX2Zsb2F0KHgpe1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGludDMyYSA9IG5ldyBqb29fZ2xvYmFsX29iamVjdC5JbnQzMkFycmF5KDEpO1xuICBpbnQzMmFbMF0gPSB4O1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuRmxvYXQzMkFycmF5KGludDMyYS5idWZmZXIpO1xuICByZXR1cm4gZmxvYXQzMmFbMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2xhc3NpZnlfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2xhc3NpZnlfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIGlmIChNYXRoLmFicyh4KSA+PSAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgcmV0dXJuIDA7XG4gICAgaWYgKHggIT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgcmV0dXJuIGlzTmFOKHgpPzQ6Mztcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbW9kZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tb2RmX2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICB2YXIgbmVnID0gKDEveCkgPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IgKHgpO1xuICAgIHZhciBmID0geCAtIGk7XG4gICAgaWYgKG5lZykgeyBpID0gLWk7IGYgPSAtZjsgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKGlzTmFOICh4KSkgcmV0dXJuIFswLCBOYU4sIE5hTl07XG4gIHJldHVybiBbMCwgMS94LCB4XTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbGRleHBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbGRleHBfZmxvYXQgKHgsZXhwKSB7XG4gIGV4cCB8PSAwO1xuICBpZiAoZXhwID4gMTAyMykge1xuICAgIGV4cCAtPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgaWYgKGV4cCA+IDEwMjMpIHsgIC8vIGluIGNhc2UgeCBpcyBzdWJub3JtYWxcbiAgICAgIGV4cCAtPSAxMDIzO1xuICAgICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4cCA8IC0xMDIzKSB7XG4gICAgZXhwICs9IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAtMTAyMyk7XG4gIH1cbiAgeCAqPSBNYXRoLnBvdygyLCBleHApO1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZnJleHBfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9mcmV4cF9mbG9hdCAoeCkge1xuICBpZiAoKHggPT0gMCkgfHwgIWlzRmluaXRlKHgpKSByZXR1cm4gWzAsIHgsIDBdO1xuICB2YXIgbmVnID0geCA8IDA7XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywganNvb19mbG9vcl9sb2cyKHgpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwtZXhwKTtcbiAgd2hpbGUgKHggPCAwLjUpIHtcbiAgICB4ICo9IDI7XG4gICAgZXhwLS07XG4gIH1cbiAgd2hpbGUgKHggPj0gMSkge1xuICAgIHggKj0gMC41O1xuICAgIGV4cCsrO1xuICB9XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUgKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHJldHVybiAwO1xuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgaWYgKHggPT09IHgpIHJldHVybiAxO1xuICBpZiAoeSA9PT0geSkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb3B5c2lnbl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3B5c2lnbl9mbG9hdCAoeCwgeSkge1xuICBpZiAoeSA9PSAwKSB5ID0gMSAvIHk7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgcmV0dXJuICh5IDwgMCk/KC14KTp4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NpZ25iaXRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2lnbmJpdF9mbG9hdCh4KSB7XG4gIGlmICh4ID09IDApIHggPSAxIC8geDtcbiAgcmV0dXJuICh4IDwgMCk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4cG0xX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cG0xX2Zsb2F0ICh4KSB7XG4gIHZhciB5ID0gTWF0aC5leHAoeCksIHogPSB5IC0gMTtcbiAgcmV0dXJuIChNYXRoLmFicyh4KT4xP3o6KHo9PTA/eDp4KnovTWF0aC5sb2coeSkpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sb2cxcF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxcF9mbG9hdCAoeCkge1xuICB2YXIgeSA9IDEgKyB4LCB6ID0geSAtIDE7XG4gIHJldHVybiAoej09MD94OngqTWF0aC5sb2coeSkveik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaHlwb3RfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaHlwb3RfZmxvYXQgKHgsIHkpIHtcbiAgdmFyIHggPSBNYXRoLmFicyh4KSwgeSA9IE1hdGguYWJzKHkpO1xuICB2YXIgYSA9IE1hdGgubWF4KHgsIHkpLCBiID0gTWF0aC5taW4oeCx5KSAvIChhP2E6MSk7XG4gIHJldHVybiAoYSAqIE1hdGguc3FydCgxICsgYipiKSk7XG59XG5cbi8vIEZJWDogdGhlc2UgZml2ZSBmdW5jdGlvbnMgb25seSBnaXZlIGFwcHJveGltYXRlIHJlc3VsdHMuXG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLkxPRzEwRSAqIE1hdGgubG9nKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKSAvIDI7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaW5oX2Zsb2F0ICh4KSB7IHJldHVybiAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpIC8gMjsgfVxuLy9Qcm92aWRlczogY2FtbF90YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3RhbmhfZmxvYXQgKHgpIHtcbiAgdmFyIHkgPSBNYXRoLmV4cCh4KSwgeiA9IE1hdGguZXhwKC14KTtcbiAgcmV0dXJuICh5IC0geikgLyAoeSArIHopO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZmxvYXQgKGZtdCwgeCkge1xuICBmdW5jdGlvbiB0b0ZpeGVkKHgsZHApIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPCAxLjApIHtcbiAgICAgIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZSA9IHBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdCgnKycpWzFdKTtcbiAgICAgIGlmIChlID4gMjApIHtcbiAgICAgICAgZSAtPSAyMDtcbiAgICAgICAgeCAvPSBNYXRoLnBvdygxMCxlKTtcbiAgICAgICAgeCArPSAobmV3IEFycmF5KGUrMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgaWYoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyAnLicgKyAobmV3IEFycmF5KGRwKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG4gICAgICBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApXG4gICAgfVxuICB9XG4gIHZhciBzLCBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSAoZi5wcmVjIDwgMCk/NjpmLnByZWM7XG4gIGlmICh4IDwgMCB8fCAoeCA9PSAwICYmIDEveCA9PSAtSW5maW5pdHkpKSB7IGYuc2lnbiA9IC0xOyB4ID0gLXg7IH1cbiAgaWYgKGlzTmFOKHgpKSB7IHMgPSBcIm5hblwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlIGlmICghaXNGaW5pdGUoeCkpIHsgcyA9IFwiaW5mXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgIGNhc2UgJ2UnOlxuICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAvLyBleHBvbmVudCBzaG91bGQgYmUgYXQgbGVhc3QgdHdvIGRpZ2l0c1xuICAgICAgdmFyIGkgPSBzLmxlbmd0aDtcbiAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT0gJ2UnKVxuICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZic6XG4gICAgICBzID0gdG9GaXhlZCh4LCBwcmVjKTsgYnJlYWs7XG4gICAgY2FzZSAnZyc6XG4gICAgICBwcmVjID0gcHJlYz9wcmVjOjE7XG4gICAgICBzID0geC50b0V4cG9uZW50aWFsKHByZWMgLSAxKTtcbiAgICAgIHZhciBqID0gcy5pbmRleE9mKCdlJyk7XG4gICAgICB2YXIgZXhwID0gK3Muc2xpY2UoaiArIDEpO1xuICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgIHZhciBpID0gaiAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICBzID0gcy5zbGljZSgwLCBpICsgMSkgKyBzLnNsaWNlKGopO1xuICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT0gJ2UnKVxuICAgICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHAgPSBwcmVjO1xuICAgICAgICBpZiAoZXhwIDwgMCkgeyBwIC09IGV4cCArIDE7IHMgPSB4LnRvRml4ZWQocCk7IH1cbiAgICAgICAgZWxzZSB3aGlsZSAocyA9IHgudG9GaXhlZChwKSwgcy5sZW5ndGggPiBwcmVjICsgMSkgcC0tO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IHMubGVuZ3RoIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgICBzID0gcy5zbGljZSgwLCBpICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHJlcztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocylcbiAgcmVzID0gK3M7XG4gIGlmICgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSByZXR1cm4gcmVzO1xuICBzID0gcy5yZXBsYWNlKC9fL2csXCJcIik7XG4gIHJlcyA9ICtzO1xuICBpZiAoKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHx8IC9eWystXT9uYW4kL2kudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgdmFyIG0gPSAvXiAqKFsrLV0/KTB4KFswLTlhLWZdKylcXC4/KFswLTlhLWZdKilwKFsrLV0/WzAtOV0rKS9pLmV4ZWMocyk7XG4gIC8vICAgICAgICAgIDEgICAgICAgIDIgICAgICAgICAgICAgMyAgICAgICAgICAgNFxuICBpZihtKXtcbiAgICB2YXIgbTMgPSBtWzNdLnJlcGxhY2UoLzArJC8sJycpO1xuICAgIHZhciBtYW50aXNzYSA9IHBhcnNlSW50KG1bMV0gKyBtWzJdICsgbTMsIDE2KTtcbiAgICB2YXIgZXhwb25lbnQgPSAobVs0XXwwKSAtIDQqbTMubGVuZ3RoO1xuICAgIHJlcyA9IG1hbnRpc3NhICogTWF0aC5wb3coMiwgZXhwb25lbnQpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgaWYoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIEluZmluaXR5O1xuICBpZigvXi1pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gLUluZmluaXR5O1xuICBjYW1sX2ZhaWx3aXRoKFwiZmxvYXRfb2Zfc3RyaW5nXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBEdW1teSBmaWxlc3lzdGVtXG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbmlmKGpvb19nbG9iYWxfb2JqZWN0LnByb2Nlc3MgJiYgam9vX2dsb2JhbF9vYmplY3QucHJvY2Vzcy5jd2QpXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gam9vX2dsb2JhbF9vYmplY3QucHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csJy8nKTtcbmVsc2VcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSAgXCIvc3RhdGljXCI7XG5pZihjYW1sX2N1cnJlbnRfZGlyLnNsaWNlKC0xKSAhPT0gXCIvXCIpIGNhbWxfY3VycmVudF9kaXIgKz0gXCIvXCJcblxuLy9Qcm92aWRlczogY2FtbF9yb290XG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG52YXIgY2FtbF9yb290ID0gY2FtbF9jdXJyZW50X2Rpci5tYXRjaCgvW15cXC9dKlxcLy8pWzBdO1xuXG5cbi8vUHJvdmlkZXM6IE1sRmlsZVxuZnVuY3Rpb24gTWxGaWxlKCl7ICB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9wYXRoXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tYWtlX3BhdGggKG5hbWUpIHtcbiAgbmFtZT1jYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYobmFtZS5jaGFyQ29kZUF0KDApICE9IDQ3KVxuICAgIG5hbWUgPSBjYW1sX2N1cnJlbnRfZGlyICsgbmFtZTtcbiAgdmFyIGNvbXAgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgdmFyIG5jb21wID0gW11cbiAgZm9yKHZhciBpID0gMDsgaTxjb21wLmxlbmd0aDsgaSsrKXtcbiAgICBzd2l0Y2goY29tcFtpXSl7XG4gICAgY2FzZSBcIi4uXCI6IGlmKG5jb21wLmxlbmd0aD4xKSBuY29tcC5wb3AoKTsgYnJlYWs7XG4gICAgY2FzZSBcIi5cIjogYnJlYWs7XG4gICAgY2FzZSBcIlwiOiBpZihuY29tcC5sZW5ndGggPT0gMCkgbmNvbXAucHVzaChcIlwiKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogbmNvbXAucHVzaChjb21wW2ldKTticmVha1xuICAgIH1cbiAgfVxuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn0gZWxzZSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoY2FtbF9yb290KX0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCtcInN0YXRpYy9cIiwgZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoY2FtbF9yb290K1wic3RhdGljL1wiKX0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9saXN0X21vdW50X3BvaW50KCl7XG4gIHZhciBwcmV2ID0gMFxuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIG9sZCA9IHByZXY7XG4gICAgcHJldiA9IFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF1cbiAgfVxuICByZXR1cm4gcHJldjtcbn1cblxuLy9Qcm92aWRlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50XG5mdW5jdGlvbiByZXNvbHZlX2ZzX2RldmljZShuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IG5hbWUgKyBcIi9cIjtcbiAgdmFyIHJlcztcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbSA9IGpzb29fbW91bnRfcG9pbnRbaV07XG4gICAgaWYobmFtZV9zbGFzaC5zZWFyY2gobS5wYXRoKSA9PSAwXG4gICAgICAgJiYgKCFyZXMgfHwgcmVzLnBhdGgubGVuZ3RoIDwgbS5wYXRoLmxlbmd0aCkpXG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW91bnRfYXV0b2xvYWRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnRcbmZ1bmN0aW9uIGNhbWxfbW91bnRfYXV0b2xvYWQobmFtZSxmKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpICsgXCIvXCI7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpuYW1lLGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKG5hbWUsZil9KVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bm1vdW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX21ha2VfcGF0aFxuZnVuY3Rpb24gY2FtbF91bm1vdW50KG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IHBhdGguam9pbihcIi9cIikgKyBcIi9cIjtcbiAgdmFyIGlkeCA9IC0xO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKylcbiAgICBpZihqc29vX21vdW50X3BvaW50W2ldLnBhdGggPT0gbmFtZSkgaWR4ID0gaTtcbiAgaWYoaWR4ID4gLTEpIGpzb29fbW91bnRfcG9pbnQuc3BsaWNlKGlkeCwxKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0Y3dkXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRjd2QoKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfY3VycmVudF9kaXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jaGRpclxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19jaGRpcihkaXIpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkaXIpO1xuICBpZihyb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KSkge1xuICAgIGlmKHJvb3QucmVzdCkgY2FtbF9jdXJyZW50X2RpciA9IHJvb3QucGF0aCArIHJvb3QucmVzdCArIFwiL1wiO1xuICAgIGVsc2UgY2FtbF9jdXJyZW50X2RpciA9IHJvb3QucGF0aDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShkaXIpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUobmFtZSl7XG4gIG5hbWUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpO1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9hX2RpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2FfZGlyKG5hbWUpe1xuICBuYW1lID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKTtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzIChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVhZF9kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVhZF9kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspXG4gICAgbFtpKzFdID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhhW2ldKTtcbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbW92ZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW1vdmUobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBvayA9IHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xuICBpZihvayA9PSAwKSBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5pc19kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIGE/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobyxuKXtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmKG9fcm9vdC5kZXZpY2UgIT0gbl9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBjYW5ub3QgbW92ZSBmaWxlIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1cIik7XG4gIGlmKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBubyBpbXBsZW1lbnRlZFwiKTtcbiAgb19yb290LmRldmljZS5yZW5hbWUob19yb290LnJlc3QsIG5fcm9vdC5yZXN0KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKHZmZCwga2luZCwgbGF5b3V0LCBzaGFyZWQsIGRpbXMsIHBvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW3ZmZF07XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2JhX21hcF9maWxlIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZVxuLy9SZXF1aXJlczogY2FtbF9iYV9tYXBfZmlsZVxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZShhcmd2LGFyZ24pe1xuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLGFyZ3ZbMV0sYXJndlsyXSxhcmd2WzNdLGFyZ3ZbNF0sYXJndls1XSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2ZpbGVfZXh0ZXJuXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9maWxlX2V4dGVybihuYW1lLGNvbnRlbnQpe1xuICBpZihqb29fZ2xvYmFsX29iamVjdC5jYW1sX2NyZWF0ZV9maWxlKVxuICAgIGpvb19nbG9iYWxfb2JqZWN0LmNhbWxfY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KTtcbiAgZWxzZSB7XG4gICAgaWYoIWpvb19nbG9iYWxfb2JqZWN0LmNhbWxfZnNfdG1wKSBqb29fZ2xvYmFsX29iamVjdC5jYW1sX2ZzX3RtcCA9IFtdO1xuICAgIGpvb19nbG9iYWxfb2JqZWN0LmNhbWxfZnNfdG1wLnB1c2goe25hbWU6bmFtZSxjb250ZW50OmNvbnRlbnR9KTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mc19pbml0XG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9maWxlXG5mdW5jdGlvbiBjYW1sX2ZzX2luaXQgKCl7XG4gIHZhciB0bXA9am9vX2dsb2JhbF9vYmplY3QuY2FtbF9mc190bXBcbiAgaWYodG1wKXtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKXtcbiAgICAgIGNhbWxfY3JlYXRlX2ZpbGUodG1wW2ldLm5hbWUsdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBqb29fZ2xvYmFsX29iamVjdC5jYW1sX2NyZWF0ZV9maWxlID0gY2FtbF9jcmVhdGVfZmlsZTtcbiAgam9vX2dsb2JhbF9vYmplY3QuY2FtbF9mc190bXAgPSBbXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZighIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKSBjYW1sX2ZhaWx3aXRoKFwiY2Fubm90IHJlZ2lzdGVyIGZpbGVcIik7XG4gIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKHJvb3QucmVzdCxjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVhZF9maWxlX2NvbnRlbnRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50IChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCx7cmRvbmx5OjF9KTtcbiAgICB2YXIgbGVuICA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiAgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgIGZpbGUucmVhZCgwLGJ1ZiwwLGxlbik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ1ZilcbiAgfVxuICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZXhpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N5c19leGl0IChjb2RlKSB7XG4gIHZhciBnID0gam9vX2dsb2JhbF9vYmplY3Q7XG4gIGlmKGcucXVpdCkgZy5xdWl0KGNvZGUpO1xuICAvL25vZGVqc1xuICBpZihnLnByb2Nlc3MgJiYgZy5wcm9jZXNzLmV4aXQpXG4gICAgZy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3N0YXRpY19lbnZcbmZ1bmN0aW9uIGNhbWxfc2V0X3N0YXRpY19lbnYoayx2KXtcbiAgaWYoIWpvb19nbG9iYWxfb2JqZWN0Lmpzb29fc3RhdGljX2VudilcbiAgICBqb29fZ2xvYmFsX29iamVjdC5qc29vX3N0YXRpY19lbnYgPSB7fVxuICBqb29fZ2xvYmFsX29iamVjdC5qc29vX3N0YXRpY19lbnZba10gPSB2O1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRlbnYgKG5hbWUpIHtcbiAgdmFyIGcgPSBqb29fZ2xvYmFsX29iamVjdDtcbiAgdmFyIG4gPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgLy9ub2RlanMgZW52XG4gIGlmKGcucHJvY2Vzc1xuICAgICAmJiBnLnByb2Nlc3MuZW52XG4gICAgICYmIGcucHJvY2Vzcy5lbnZbbl0gIT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhnLnByb2Nlc3MuZW52W25dKTtcbiAgaWYoam9vX2dsb2JhbF9vYmplY3QuanNvb19zdGF0aWNfZW52XG4gICAgICYmIGpvb19nbG9iYWxfb2JqZWN0Lmpzb29fc3RhdGljX2VudltuXSlcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoam9vX2dsb2JhbF9vYmplY3QuanNvb19zdGF0aWNfZW52W25dKVxuICBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIGNhbWxfYXJndiA9ICgoZnVuY3Rpb24gKCkge1xuICB2YXIgZyA9IGpvb19nbG9iYWxfb2JqZWN0O1xuICB2YXIgbWFpbiA9IFwiYS5vdXRcIjtcbiAgdmFyIGFyZ3MgPSBbXVxuXG4gIGlmKGcucHJvY2Vzc1xuICAgICAmJiBnLnByb2Nlc3MuYXJndlxuICAgICAmJiBnLnByb2Nlc3MuYXJndi5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBnLnByb2Nlc3MuYXJndlxuICAgIC8vbm9kZWpzXG4gICAgbWFpbiA9IGFyZ3ZbMV07XG4gICAgYXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gIH1cblxuICB2YXIgcCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG1haW4pO1xuICB2YXIgYXJnczIgPSBbMCwgcF07XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpKVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2FyZ3YgKGEpIHtcbiAgcmV0dXJuIFswLCBjYW1sX2FyZ3ZbMV0sIGNhbWxfYXJndl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfYXJndiAoYSkge1xuICByZXR1cm4gY2FtbF9hcmd2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19tb2RpZnlfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19tb2RpZnlfYXJndihhcmcpe1xuICBjYW1sX2FyZ3YgPSBhcmc7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG5mdW5jdGlvbiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUoYSl7XG4gIHJldHVybiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKGNtZCl7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT0gXCJ1bmRlZmluZWRcIlxuICAgICAgJiYgcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpXG4gICAgICAmJiByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY1N5bmMpIHtcbiAgICB0cnkge3JlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjU3luYyhjbWQse3N0ZGlvOiAnaW5oZXJpdCd9KTsgcmV0dXJuIDB9XG4gICAgY2F0Y2ggKGUpIHtyZXR1cm4gMX1cbiAgfVxuICBlbHNlIHJldHVybiAxMjc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWUgbXV0YWJsZVxudmFyIGNhbWxfaW5pdGlhbF90aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSAoKSB7XG4gIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmFuZG9tX3NlZWQgbXV0YWJsZVxuLy9UaGUgZnVuY3Rpb24gbmVlZHMgdG8gcmV0dXJuIGFuIGFycmF5IHNpbmNlIE9DYW1sIDQuMC4uLlxuZnVuY3Rpb24gY2FtbF9zeXNfcmFuZG9tX3NlZWQgKCkge1xuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3deMHhmZmZmZmZmZipNYXRoLnJhbmRvbSgpO1xuICByZXR1cm4gWzAseF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gKCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfaW50X3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSBjb25zdFxuLy8gbWF4X2ludCAvIDQgc28gdGhhdCB0aGUgZm9sbG93aW5nIGRvZXMgbm90IG92ZXJmbG93XG4vL2xldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMTs7XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplICgpIHsgcmV0dXJuICgweDdGRkZGRkZGLzQpIHwgMDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCAoKSB7IHJldHVybiAxOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luICgpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9jb25maWcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9jb25maWcgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJVbml4XCIpLCAzMiwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzYXR0eVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNhdHR5KF9jaGFuKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfdmFyaWFudFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3ZhcmlhbnQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3BhcmFtZXRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyKCl7cmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IHVuaXhfaW5ldF9hZGRyX29mX3N0cmluZ1xuZnVuY3Rpb24gdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nICgpIHtyZXR1cm4gMDt9XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MgKGJvb2wpIHtcbiAgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gYm9vbDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9ydW50aW1lX3dhcm5pbmdzO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfZW5hYmxlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUoX2NoYW5uZWwpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcIlNwYWNldGltZSBwcm9maWxpbmcgb25seSB3b3JrcyBmb3IgbmF0aXZlIGNvZGVcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBNbEZha2VEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIGNhbWxfY3JlYXRlX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2FycmF5LCBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuZnVuY3Rpb24gTWxGYWtlRGV2aWNlIChyb290LCBmKSB7XG4gIHRoaXMuY29udGVudD17fTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbiAgdGhpcy5sb29rdXBGdW4gPSBmO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24obmFtZSkge1xuICBpZighdGhpcy5jb250ZW50W25hbWVdICYmIHRoaXMubG9va3VwRnVuKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMubG9va3VwRnVuKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5yb290KSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKSk7XG4gICAgaWYocmVzICE9PSAwKSB0aGlzLmNvbnRlbnRbbmFtZV09bmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcocmVzWzFdKSk7XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICAvLyBUaGUgcm9vdCBvZiB0aGUgZGV2aWNlIGV4aXN0c1xuICBpZihuYW1lID09IFwiXCIpIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGRpcmVjdG9yeSBleGlzdHNcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSArIFwiL1wiKTtcbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCk7XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICBpZiAobi5tYXRjaChyKSkgcmV0dXJuIDFcbiAgfVxuICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOihuYW1lICsgXCIvXCIpO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSopXCIpO1xuICB2YXIgc2VlbiA9IHt9XG4gIHZhciBhID0gW107XG4gIGZvcih2YXIgbiBpbiB0aGlzLmNvbnRlbnQpIHtcbiAgICB2YXIgbSA9IG4ubWF0Y2gocik7XG4gICAgaWYobSAmJiAhc2VlblttWzFdXSkge3NlZW5bbVsxXV0gPSB0cnVlOyBhLnB1c2gobVsxXSl9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOihuYW1lICsgXCIvXCIpO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCJeXCIgKyBuYW1lX3NsYXNoICsgXCIoW14vXSopXCIpO1xuICB2YXIgYSA9IFtdO1xuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIG0gPSBuLm1hdGNoKHIpO1xuICAgIGlmKG0pIHJldHVybiAxXG4gIH1cbiAgcmV0dXJuIDBcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgb2sgPSB0aGlzLmNvbnRlbnRbbmFtZV0/dHJ1ZTpmYWxzZTtcbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lXTtcbiAgcmV0dXJuIG9rO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIHZhciBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgICByZXR1cm4gZmlsZTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlZ2lzdGVyPSBmdW5jdGlvbiAobmFtZSxjb250ZW50KXtcbiAgaWYodGhpcy5jb250ZW50W25hbWVdKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICBpZihjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKVxuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNvbnRlbnQpO1xuICBpZihjYW1sX2lzX21sX3N0cmluZyhjb250ZW50KSlcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICBlbHNlIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudC50b1N0cmluZykge1xuICAgIHZhciBieXRlcyA9IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSkpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgfVxuICBlbHNlIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2dldFxuZnVuY3Rpb24gTWxGYWtlRmlsZShjb250ZW50KXtcbiAgdGhpcy5kYXRhID0gY29udGVudDtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sRmFrZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdmFyIG9sZCA9IHRoaXMuZGF0YTtcbiAgdGhpcy5kYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICBjYW1sX2JsaXRfYnl0ZXMob2xkLCAwLCB0aGlzLmRhdGEsIDAsIGxlbik7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aCh0aGlzLmRhdGEpO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgdmFyIG5ld19zdHIgPSBjYW1sX2NyZWF0ZV9ieXRlcyhvZmZzZXQgKyBsZW4pO1xuICAgIHZhciBvbGRfZGF0YSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGRfZGF0YSwgMCwgdGhpcy5kYXRhLCAwLCBjbGVuKTtcbiAgfVxuICBjYW1sX2JsaXRfc3RyaW5nKGJ1ZiwgcG9zLCB0aGlzLmRhdGEsIG9mZnNldCwgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgYnVmLCBwb3MsIGxlbik7XG4gIHJldHVybiAwXG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5yZWFkX29uZSA9IGZ1bmN0aW9uKG9mZnNldCl7XG4gIHJldHVybiBjYW1sX2J5dGVzX2dldCh0aGlzLmRhdGEsIG9mZnNldCk7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7XG5cbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRmlsZVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygam9vX2dsb2JhbF9vYmplY3QucHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBqb29fZ2xvYmFsX29iamVjdC5wcm9jZXNzLnZlcnNpb25zICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGpvb19nbG9iYWxfb2JqZWN0LnByb2Nlc3MudmVyc2lvbnMubm9kZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIGpvb19nbG9iYWxfb2JqZWN0LnByb2Nlc3MucGxhdGZvcm0gIT09IFwiYnJvd3NlclwiKVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9SZXF1aXJlczogTWxOb2RlRmlsZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sTm9kZURldmljZShyb290KSB7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLnJvb3QgPSByb290O1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0RpcmVjdG9yeSgpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYiA9IHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gICAgdGhpcy5mcy51bmxpbmtTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIGJcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGNvbnN0cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBrZXkgaW4gZil7XG4gICAgc3dpdGNoKGtleSl7XG4gICAgY2FzZSBcInJkb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19SRE9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJ3cm9ubHlcIiAgOiByZXMgfD0gY29uc3RzLk9fV1JPTkxZOyBicmVhaztcbiAgICBjYXNlIFwiYXBwZW5kXCIgIDpcbiAgICAgIHJlcyB8PSBjb25zdHMuT19XUk9OTFkgfCBjb25zdHMuT19BUFBFTkQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3JlYXRlXCIgICA6IHJlcyB8PSBjb25zdHMuT19DUkVBVDsgICAgYnJlYWs7XG4gICAgY2FzZSBcInRydW5jYXRlXCIgOiByZXMgfD0gY29uc3RzLk9fVFJVTkM7ICAgIGJyZWFrO1xuICAgIGNhc2UgXCJleGNsXCIgICAgIDogcmVzIHw9IGNvbnN0cy5PX0VYQ0w7ICAgICBicmVhaztcbiAgICBjYXNlIFwiYmluYXJ5XCIgICA6IHJlcyB8PSBjb25zdHMuT19CSU5BUlk7ICAgYnJlYWs7XG4gICAgY2FzZSBcInRleHRcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fVEVYVDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJub25ibG9ja1wiIDogcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLOyBicmVhaztcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgZmQgPSB0aGlzLmZzLm9wZW5TeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgcmV0dXJuIG5ldyBNbE5vZGVGaWxlKGZkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24obyxuKSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sTm9kZUZpbGUoZmQpe1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5mZCA9IGZkO1xufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuXG5NbE5vZGVGaWxlLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5mdHJ1bmNhdGVTeW5jKHRoaXMuZmQsbGVufDApXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKS5zaXplO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZpbGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHZhciBhID0gY2FtbF9hcnJheV9vZl9zdHJpbmcoYnVmKTtcbiAgaWYoISAoYSBpbnN0YW5jZW9mIGpvb19nbG9iYWxfb2JqZWN0LlVpbnQ4QXJyYXkpKVxuICAgIGEgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuVWludDhBcnJheShhKTtcbiAgdmFyIGJ1ZmZlciA9IGpvb19nbG9iYWxfb2JqZWN0LkJ1ZmZlci5mcm9tKGEpO1xuICB0cnkge1xuICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZmZlciwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5NbE5vZGVGaWxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHZhciBhID0gY2FtbF9hcnJheV9vZl9ieXRlcyhidWYpO1xuICBpZighIChhIGluc3RhbmNlb2Ygam9vX2dsb2JhbF9vYmplY3QuVWludDhBcnJheSkpXG4gICAgYSA9IG5ldyBqb29fZ2xvYmFsX29iamVjdC5VaW50OEFycmF5KGEpO1xuICB2YXIgYnVmZmVyID0gam9vX2dsb2JhbF9vYmplY3QuQnVmZmVyLmZyb20oYSk7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBidWZmZXIsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgY2FtbF9ieXRlc19zZXQoYnVmLGJ1Zl9vZmZzZXQgKyBpLGJ1ZmZlcltidWZfb2Zmc2V0K2ldKTtcbiAgfVxuICByZXR1cm4gMFxufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUucmVhZF9vbmUgPSBmdW5jdGlvbihvZmZzZXQpe1xuICB2YXIgYSA9IG5ldyBqb29fZ2xvYmFsX29iamVjdC5VaW50OEFycmF5KDEpO1xuICB2YXIgYnVmZmVyID0gam9vX2dsb2JhbF9vYmplY3QuQnVmZmVyLmZyb20oYSk7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBidWZmZXIsIDAsIDEsIG9mZnNldCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxuICByZXR1cm4gYnVmZmVyWzBdO1xufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpe1xuICB0cnkge1xuICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuTWxOb2RlRmlsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbE5vZGVGaWxlO1xuIiwiLy9Qcm92aWRlczogaW5pdGlhbGl6ZV9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogc2VyaWFsaXplX25hdCwgZGVzZXJpYWxpemVfbmF0LCBjYW1sX2hhc2hfbmF0XG5mdW5jdGlvbiBpbml0aWFsaXplX25hdCgpIHtcbiAgY2FtbF9jdXN0b21fb3BzW1wiX25hdFwiXSA9XG4gICAgeyBkZXNlcmlhbGl6ZSA6IGRlc2VyaWFsaXplX25hdCxcbiAgICAgIHNlcmlhbGl6ZSA6IHNlcmlhbGl6ZV9uYXQsXG4gICAgICBoYXNoIDogY2FtbF9oYXNoX25hdFxuICAgIH1cbn1cblxuLy9Qcm92aWRlczogTWxOYXRcbmZ1bmN0aW9uIE1sTmF0KHgpe1xuICB0aGlzLmRhdGEgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuSW50MzJBcnJheSh4KTtcbiAgLy8gbGVuZ3RoX25hdCBpc24ndCBleHRlcm5hbCwgc28gd2UgaGF2ZSB0byBtYWtlIHRoZSBPYmouc2l6ZVxuICAvLyB3b3JrIG91dCByaWdodC4gVGhlICsyIHRvIGFycmF5IGxlbmd0aCBzZWVtcyB0byB3b3JrLlxuICB0aGlzLmxlbmd0aCA9IHRoaXMuZGF0YS5sZW5ndGggKyAyXG59XG5cbk1sTmF0LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IFwiX25hdFwiO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbmF0XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludCwgbnVtX2RpZ2l0c19uYXRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9uYXQoeCkge1xuICB2YXIgbGVuID0gbnVtX2RpZ2l0c19uYXQoeCwgMCwgeC5kYXRhLmxlbmd0aCk7XG4gIHZhciBoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB4LmRhdGFbaV0pO1xuICB9XG4gIHJldHVybiBoO1xufVxuXG5cbi8vUHJvdmlkZXM6IG5hdF9vZl9hcnJheVxuLy9SZXF1aXJlczogTWxOYXRcbmZ1bmN0aW9uIG5hdF9vZl9hcnJheShsKXtcbiAgcmV0dXJuIG5ldyBNbE5hdChsKTtcbn1cblxuLy9Qcm92aWRlczogY3JlYXRlX25hdFxuLy9SZXF1aXJlczogTWxOYXRcbmZ1bmN0aW9uIGNyZWF0ZV9uYXQoc2l6ZSkge1xuICB2YXIgYXJyID0gbmV3IE1sTmF0KHNpemUpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgYXJyLmRhdGFbaV0gPSAtMTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXRfdG9femVyb19uYXRcbmZ1bmN0aW9uIHNldF90b196ZXJvX25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW29mcytpXSA9IDA7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGJsaXRfbmF0XG5mdW5jdGlvbiBibGl0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyLCBsZW4pIHtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0MS5kYXRhW29mczEraV0gPSBuYXQyLmRhdGFbb2ZzMitpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdFxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdChuYXQsIG9mcywgZGlnaXQpIHtcbiAgbmF0LmRhdGFbb2ZzXSA9IGRpZ2l0O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbnRoX2RpZ2l0X25hdFxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdChuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogc2V0X2RpZ2l0X25hdF9uYXRpdmVcbmZ1bmN0aW9uIHNldF9kaWdpdF9uYXRfbmF0aXZlKG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gbnRoX2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMpIHtcbiAgcmV0dXJuIG5hdC5kYXRhW29mc107XG59XG5cbi8vUHJvdmlkZXM6IG51bV9kaWdpdHNfbmF0XG5mdW5jdGlvbiBudW1fZGlnaXRzX25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvcih2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYobmF0LmRhdGFbb2ZzK2ldICE9IDApIHJldHVybiBpKzE7XG4gIH1cbiAgcmV0dXJuIDE7IC8vIDAgY291bnRzIGFzIDEgZGlnaXRcbn1cblxuLy9Qcm92aWRlczogbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0XG5mdW5jdGlvbiBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQobmF0LCBvZnMpIHtcbiAgdmFyIGEgPSBuYXQuZGF0YVtvZnNdO1xuICB2YXIgYiA9IDA7XG4gIGlmKGEgJiAweEZGRkYwMDAwKSB7IGIgKz0xNjsgYSA+Pj49MTY7IH1cbiAgaWYoYSAmIDB4RkYwMCkgICAgIHsgYiArPSA4OyBhID4+Pj0gODsgfVxuICBpZihhICYgMHhGMCkgICAgICAgeyBiICs9IDQ7IGEgPj4+PSA0OyB9XG4gIGlmKGEgJiAxMikgICAgICAgICB7IGIgKz0gMjsgYSA+Pj49IDI7IH1cbiAgaWYoYSAmIDIpICAgICAgICAgIHsgYiArPSAxOyBhID4+Pj0gMTsgfVxuICBpZihhICYgMSkgICAgICAgICAgeyBiICs9IDE7IH1cbiAgcmV0dXJuIDMyIC0gYjtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfaW50XG5mdW5jdGlvbiBpc19kaWdpdF9pbnQobmF0LCBvZnMpIHtcbiAgaWYgKG5hdC5kYXRhW29mc10gPj0gMCkgcmV0dXJuIDFcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X3plcm9cbmZ1bmN0aW9uIGlzX2RpZ2l0X3plcm8obmF0LCBvZnMpIHtcbiAgaWYobmF0LmRhdGFbb2ZzXSA9PSAwKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGlzX2RpZ2l0X29kZFxuZnVuY3Rpb24gaXNfZGlnaXRfb2RkKG5hdCwgb2ZzKSB7XG4gIGlmKG5hdC5kYXRhW29mc10gJiAxKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGluY3JfbmF0XG5mdW5jdGlvbiBpbmNyX25hdChuYXQsIG9mcywgbGVuLCBjYXJyeV9pbikge1xuICB2YXIgY2FycnkgPSBjYXJyeV9pbjtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0LmRhdGFbb2ZzK2ldID4+PiAwKSArIGNhcnJ5O1xuICAgIG5hdC5kYXRhW29mcytpXSA9ICh4IHwgMCk7XG4gICAgaWYoeCA9PSAoeCA+Pj4gMCkpIHtcbiAgICAgIGNhcnJ5ID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJyeSA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYXJyeTtcbn1cblxuLy8gbGVuMSA+PSBsZW4yXG4vL1Byb3ZpZGVzOiBhZGRfbmF0XG4vL1JlcXVpcmVzOiBpbmNyX25hdFxuZnVuY3Rpb24gYWRkX25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBjYXJyeV9pbikge1xuICB2YXIgY2FycnkgPSBjYXJyeV9pbjtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4ID0gKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSArIChuYXQyLmRhdGFbb2ZzMitpXSA+Pj4gMCkgKyBjYXJyeTtcbiAgICBuYXQxLmRhdGFbb2ZzMStpXSA9IHhcbiAgICBpZih4ID09ICh4ID4+PiAwKSkge1xuICAgICAgY2FycnkgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXJyeSA9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmNyX25hdChuYXQxLCBvZnMxK2xlbjIsIGxlbjEtbGVuMiwgY2FycnkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjb21wbGVtZW50X25hdFxuZnVuY3Rpb24gY29tcGxlbWVudF9uYXQobmF0LCBvZnMsIGxlbikge1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQuZGF0YVtvZnMraV0gPSAoLTEgPj4+IDApIC0gKG5hdC5kYXRhW29mcytpXSA+Pj4gMCk7XG4gIH1cbn1cblxuLy8gb2NhbWwgZmxpcHMgY2FycnlfaW5cbi8vUHJvdmlkZXM6IGRlY3JfbmF0XG5mdW5jdGlvbiBkZWNyX25hdChuYXQsIG9mcywgbGVuLCBjYXJyeV9pbikge1xuICB2YXIgYm9ycm93ID0gKGNhcnJ5X2luID09IDEpID8gMCA6IDE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciB4ID0gKG5hdC5kYXRhW29mcytpXSA+Pj4wKSAtIGJvcnJvdztcbiAgICBuYXQuZGF0YVtvZnMraV0gPSB4O1xuICAgIGlmICh4ID49IDApIHtcbiAgICAgIGJvcnJvdyA9IDA7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYm9ycm93ID0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChib3Jyb3cgPT0gMSkgPyAwIDogMTtcbn1cblxuLy8gb2NhbWwgZmxpcHMgY2FycnlfaW5cbi8vIGxlbjEgPj0gbGVuMlxuLy9Qcm92aWRlczogc3ViX25hdFxuLy9SZXF1aXJlczogZGVjcl9uYXRcbmZ1bmN0aW9uIHN1Yl9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgY2FycnlfaW4pIHtcbiAgdmFyIGJvcnJvdyA9IChjYXJyeV9pbiA9PSAxKSA/IDAgOiAxO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0MS5kYXRhW29mczEraV0gPj4+IDApIC0gKG5hdDIuZGF0YVtvZnMyK2ldID4+PiAwKSAtIGJvcnJvdztcbiAgICBuYXQxLmRhdGFbb2ZzMStpXSA9IHg7XG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgYm9ycm93ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9ycm93ID0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlY3JfbmF0KG5hdDEsIG9mczErbGVuMiwgbGVuMS1sZW4yLCAoYm9ycm93PT0xKT8wOjEpO1xufVxuXG4vLyBuYXQxICs9IG5hdDIgKiBuYXQzW29mczNdXG4vLyBsZW4xID49IGxlbjJcbi8vUHJvdmlkZXM6IG11bHRfZGlnaXRfbmF0XG4vL1JlcXVpcmVzOiBhZGRfbmF0LCBuYXRfb2ZfYXJyYXlcbmZ1bmN0aW9uIG11bHRfZGlnaXRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDMsIG9mczMpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGEgPSAobmF0My5kYXRhW29mczNdID4+PiAwKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjI7IGkrKykge1xuICAgIHZhciB4MSA9IChuYXQxLmRhdGFbb2ZzMStpXSA+Pj4gMCkgKyAobmF0Mi5kYXRhW29mczIraV0gPj4+IDApICogKGEgJiAweDAwMDBGRkZGKSArIGNhcnJ5O1xuICAgIHZhciB4MiA9IChuYXQyLmRhdGFbb2ZzMitpXSA+Pj4gMCkgKiAoYSA+Pj4gMTYpO1xuICAgIGNhcnJ5ID0gTWF0aC5mbG9vcih4Mi82NTUzNik7XG4gICAgdmFyIHgzID0geDEgKyAoeDIgJSA2NTUzNikgKiA2NTUzNjtcbiAgICBuYXQxLmRhdGFbb2ZzMStpXSA9IHgzO1xuICAgIGNhcnJ5ICs9IE1hdGguZmxvb3IoeDMvNDI5NDk2NzI5Nik7XG4gIH1cblxuICBpZihsZW4yIDwgbGVuMSAmJiBjYXJyeSkge1xuICAgIHJldHVybiBhZGRfbmF0KG5hdDEsIG9mczErbGVuMiwgbGVuMS1sZW4yLCBuYXRfb2ZfYXJyYXkoW2NhcnJ5XSksIDAsIDEsIDApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYXJyeTtcbiAgfVxufVxuXG4vLyBuYXQxICs9IG5hdDIgKiBuYXQzXG4vLyBsZW4xID49IGxlbjIgKyBsZW4zLlxuLy9Qcm92aWRlczogbXVsdF9uYXRcbi8vUmVxdWlyZXM6IG11bHRfZGlnaXRfbmF0XG5mdW5jdGlvbiBtdWx0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQzLCBvZnMzLCBsZW4zKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW4zOyBpKyspIHtcbiAgICBjYXJyeSArPSBtdWx0X2RpZ2l0X25hdChuYXQxLCBvZnMxK2ksIGxlbjEtaSwgbmF0Miwgb2ZzMiwgbGVuMiwgbmF0Mywgb2ZzMytpKTtcbiAgfVxuICByZXR1cm4gY2Fycnk7XG59XG5cbi8vIG5hdDEgPSAyICogbmF0MSArIG5hdDIgKiBuYXQyXG4vLyBsZW4xID49IDIgKiBsZW4yXG4vL1Byb3ZpZGVzOiBzcXVhcmVfbmF0XG4vL1JlcXVpcmVzOiBtdWx0X25hdCwgYWRkX25hdFxuZnVuY3Rpb24gc3F1YXJlX25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIGNhcnJ5ICs9IGFkZF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0MSwgb2ZzMSwgbGVuMSwgMCk7XG4gIGNhcnJ5ICs9IG11bHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDIsIG9mczIsIGxlbjIpO1xuICByZXR1cm4gY2Fycnk7XG59XG5cblxuLy8gMCA8PSBzaGlmdCA8IDMyXG4vL1Byb3ZpZGVzOiBzaGlmdF9sZWZ0X25hdFxuZnVuY3Rpb24gc2hpZnRfbGVmdF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbmJpdHMpIHtcbiAgaWYobmJpdHMgPT0gMCkge1xuICAgIG5hdDIuZGF0YVtvZnMyXSA9IDA7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgdmFyIHdyYXAgPSAwO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7XG4gICAgdmFyIGEgPSAobmF0MS5kYXRhW29mczEraV0gPj4+IDApO1xuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0gKGEgPDwgbmJpdHMpIHwgd3JhcDtcbiAgICB3cmFwID0gYSA+Pj4gKDMyIC0gbmJpdHMpO1xuICB9XG4gIG5hdDIuZGF0YVtvZnMyXSA9IHdyYXA7XG4gIHJldHVybiAwO1xufVxuXG4vLyBBc3N1bWluZyBjID4gYSwgcmV0dXJucyBbcXVvdGllbnQsIHJlbWFpbmRlcl0gb2YgKGE8PDMyICsgYikvY1xuLy9Qcm92aWRlczogZGl2X2hlbHBlclxuZnVuY3Rpb24gZGl2X2hlbHBlcihhLCBiLCBjKSB7XG4gIHZhciB4ID0gYSAqIDY1NTM2ICsgKGI+Pj4xNik7XG4gIHZhciB5ID0gTWF0aC5mbG9vcih4L2MpICogNjU1MzY7XG4gIHZhciB6ID0gKHggJSBjKSAqIDY1NTM2O1xuICB2YXIgdyA9IHogKyAoYiAmIDB4MDAwMEZGRkYpO1xuICByZXR1cm4gW3kgKyBNYXRoLmZsb29yKHcvYyksIHcgJSBjXTtcbn1cblxuLy8gbmF0MVtvZnMxK2xlbl0gPCBuYXQyW29mczJdXG4vL1Byb3ZpZGVzOiBkaXZfZGlnaXRfbmF0XG4vL1JlcXVpcmVzOiBkaXZfaGVscGVyXG5mdW5jdGlvbiBkaXZfZGlnaXRfbmF0KG5hdHEsIG9mc3EsIG5hdHIsIG9mc3IsIG5hdDEsIG9mczEsIGxlbiwgbmF0Miwgb2ZzMikge1xuICB2YXIgcmVtID0gKG5hdDEuZGF0YVtvZnMxK2xlbi0xXSA+Pj4wKTtcbiAgLy8gbmF0cVtvZnNxK2xlbi0xXSBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8gKGR1ZSB0byB0aGUgTVNEIHJlcXVpcmVtZW50KSxcbiAgLy8gYW5kIHNob3VsZCBub3QgYmUgd3JpdHRlbiB0by5cbiAgZm9yKHZhciBpID0gbGVuLTI7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIHggPSBkaXZfaGVscGVyKHJlbSwgKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSwgKG5hdDIuZGF0YVtvZnMyXSA+Pj4gMCkpO1xuICAgIG5hdHEuZGF0YVtvZnNxK2ldID0geFswXTtcbiAgICByZW0gPSB4WzFdO1xuICB9XG4gIG5hdHIuZGF0YVtvZnNyXSA9IHJlbTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vIG5hdDFbbmF0MjpdIDo9IG5hdDEgLyBuYXQyXG4vLyBuYXQxWzpuYXQyXSA6PSBuYXQxICUgbmF0MlxuLy8gbGVuMSA+IGxlbjIsIG5hdDJbb2ZzMitsZW4yLTFdID4gbmF0MVtvZnMxK2xlbjEtMV1cbi8vUHJvdmlkZXM6IGRpdl9uYXRcbi8vUmVxdWlyZXM6IGRpdl9kaWdpdF9uYXQsIGRpdl9oZWxwZXIsIG51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdCwgc2hpZnRfbGVmdF9uYXQsIHNoaWZ0X3JpZ2h0X25hdCwgY3JlYXRlX25hdCwgc2V0X3RvX3plcm9fbmF0LCBtdWx0X2RpZ2l0X25hdCwgc3ViX25hdCwgY29tcGFyZV9uYXQsIG5hdF9vZl9hcnJheVxuZnVuY3Rpb24gZGl2X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yKSB7XG4gIGlmKGxlbjIgPT0gMSkge1xuICAgIGRpdl9kaWdpdF9uYXQobmF0MSwgb2ZzMSsxLCBuYXQxLCBvZnMxLCBuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciBzID0gbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0KG5hdDIsIG9mczIrbGVuMi0xKTtcbiAgc2hpZnRfbGVmdF9uYXQobmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpO1xuICBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7XG5cbiAgdmFyIGQgPSAobmF0Mi5kYXRhW29mczIrbGVuMi0xXSA+Pj4gMCkgKyAxO1xuICB2YXIgYSA9IGNyZWF0ZV9uYXQobGVuMisxKTtcbiAgZm9yICh2YXIgaSA9IGxlbjEgLSAxOyBpID49IGxlbjI7IGktLSkge1xuICAgIC8vIERlY2VudCBsb3dlciBib3VuZCBvbiBxdW9cbiAgICB2YXIgcXVvID0gZCA9PSA0Mjk0OTY3Mjk2ID8gKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSA6IGRpdl9oZWxwZXIoKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSwgKG5hdDEuZGF0YVtvZnMxK2ktMV0gPj4+MCksIGQpWzBdO1xuICAgIHNldF90b196ZXJvX25hdChhLCAwLCBsZW4yKzEpO1xuICAgIG11bHRfZGlnaXRfbmF0KGEsIDAsIGxlbjIrMSwgbmF0Miwgb2ZzMiwgbGVuMiwgbmF0X29mX2FycmF5KFtxdW9dKSwgMCk7XG4gICAgc3ViX25hdChuYXQxLCBvZnMxK2ktbGVuMiwgbGVuMisxLCBhLCAwLCBsZW4yKzEsIDEpO1xuXG4gICAgd2hpbGUgKG5hdDEuZGF0YVtvZnMxK2ldICE9IDAgfHwgY29tcGFyZV9uYXQobmF0MSwgb2ZzMStpLWxlbjIsIGxlbjIsIG5hdDIsIG9mczIsIGxlbjIpID49IDApIHtcbiAgICAgIHF1byA9IHF1byArIDE7XG4gICAgICBzdWJfbmF0KG5hdDEsIG9mczEraS1sZW4yLCBsZW4yKzEsIG5hdDIsIG9mczIsIGxlbjIsIDEpO1xuICAgIH1cblxuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0gcXVvO1xuICB9XG5cbiAgc2hpZnRfcmlnaHRfbmF0KG5hdDEsIG9mczEsIGxlbjIsIG5hdF9vZl9hcnJheShbMF0pLCAwLCBzKTsgLy8gc2hpZnQgcmVtYWluZGVyXG4gIHNoaWZ0X3JpZ2h0X25hdChuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7IC8vIHJlc3RvcmVcbiAgcmV0dXJuIDA7XG59XG5cblxuLy8gMCA8PSBzaGlmdCA8IDMyXG4vL1Byb3ZpZGVzOiBzaGlmdF9yaWdodF9uYXRcbmZ1bmN0aW9uIHNoaWZ0X3JpZ2h0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBuYml0cykge1xuICBpZihuYml0cyA9PSAwKSB7XG4gICAgbmF0Mi5kYXRhW29mczJdID0gMDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICB2YXIgd3JhcCA9IDA7XG4gIGZvcih2YXIgaSA9IGxlbjEtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgYSA9IG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwO1xuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0gKGEgPj4+IG5iaXRzKSB8IHdyYXA7XG4gICAgd3JhcCA9IGEgPDwgKDMyIC0gbmJpdHMpO1xuICB9XG4gIG5hdDIuZGF0YVtvZnMyXSA9IHdyYXA7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjb21wYXJlX2RpZ2l0c19uYXRcbmZ1bmN0aW9uIGNvbXBhcmVfZGlnaXRzX25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIGlmKG5hdDEuZGF0YVtvZnMxXSA+IG5hdDIuZGF0YVtvZnMyXSkgcmV0dXJuIDE7XG4gIGlmKG5hdDEuZGF0YVtvZnMxXSA8IG5hdDIuZGF0YVtvZnMyXSkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY29tcGFyZV9uYXRcbi8vUmVxdWlyZXM6IG51bV9kaWdpdHNfbmF0XG5mdW5jdGlvbiBjb21wYXJlX25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yKSB7XG4gIHZhciBhID0gbnVtX2RpZ2l0c19uYXQobmF0MSwgb2ZzMSwgbGVuMSk7XG4gIHZhciBiID0gbnVtX2RpZ2l0c19uYXQobmF0Miwgb2ZzMiwgbGVuMik7XG4gIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgaWYoYSA8IGIpIHJldHVybiAtMTtcbiAgZm9yKHZhciBpID0gbGVuMSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKChuYXQxLmRhdGFbb2ZzMStpXSA+Pj4gMCkgPiAobmF0Mi5kYXRhW29mczIraV0gPj4+IDApKSByZXR1cm4gMTtcbiAgICBpZiAoKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSA8IChuYXQyLmRhdGFbb2ZzMitpXSA+Pj4gMCkpIHJldHVybiAtMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY29tcGFyZV9uYXRfcmVhbFxuLy9SZXF1aXJlczogY29tcGFyZV9uYXRcbmZ1bmN0aW9uIGNvbXBhcmVfbmF0X3JlYWwobmF0MSxuYXQyKXtcbiAgcmV0dXJuIGNvbXBhcmVfbmF0KG5hdDEsMCxuYXQxLmRhdGEubGVuZ3RoLG5hdDIsMCxuYXQyLmRhdGEubGVuZ3RoKTtcbn1cblxuLy9Qcm92aWRlczogbGFuZF9kaWdpdF9uYXRcbmZ1bmN0aW9uIGxhbmRfZGlnaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgbmF0MS5kYXRhW29mczFdICY9IG5hdDIuZGF0YVtvZnMyXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGxvcl9kaWdpdF9uYXRcbmZ1bmN0aW9uIGxvcl9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMikge1xuICBuYXQxLmRhdGFbb2ZzMV0gfD0gbmF0Mi5kYXRhW29mczJdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbHhvcl9kaWdpdF9uYXRcbmZ1bmN0aW9uIGx4b3JfZGlnaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgbmF0MS5kYXRhW29mczFdIF49IG5hdDIuZGF0YVtvZnMyXTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogc2VyaWFsaXplX25hdFxuZnVuY3Rpb24gc2VyaWFsaXplX25hdCh3cml0ZXIsIG5hdCwgc3ope1xuICB2YXIgbGVuID0gbmF0LmRhdGEubGVuZ3RoO1xuICB3cml0ZXIud3JpdGUoMzIsIGxlbik7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgd3JpdGVyLndyaXRlKDMyLCBuYXQuZGF0YVtpXSk7XG4gIH1cbiAgc3pbMF0gPSBsZW4gKiA0O1xuICBzelsxXSA9IGxlbiAqIDg7XG59XG5cbi8vUHJvdmlkZXM6IGRlc2VyaWFsaXplX25hdFxuLy9SZXF1aXJlczogTWxOYXRcbmZ1bmN0aW9uIGRlc2VyaWFsaXplX25hdChyZWFkZXIsIHN6KXtcbiAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBuYXQgPSBuZXcgTWxOYXQobGVuKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICBuYXQuZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIH1cbiAgc3pbMF0gPSBsZW4gKiA0O1xuICByZXR1cm4gbmF0O1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IEh1Z28gSGV1emFyZFxuXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZVxudmFyIGNhbWxfZ3Jfc3RhdGU7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2dyX3N0YXRlX2dldCgpIHtcbiAgaWYoY2FtbF9ncl9zdGF0ZSkge1xuICAgIHJldHVybiBjYW1sX2dyX3N0YXRlO1xuICB9XG4gIHRocm93IFswLGNhbWxfbmFtZWRfdmFsdWUoXCJHcmFwaGljcy5HcmFwaGljX2ZhaWx1cmVcIiksIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJOb3QgaW5pdGlhbGl6ZWRcIildXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX3NldFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZSxjYW1sX2dyX3N0YXRlX2luaXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfc2V0KGN0eCkge1xuICBjYW1sX2dyX3N0YXRlPWN0eDtcbiAgY2FtbF9ncl9zdGF0ZV9pbml0KClcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfb3Blbl9ncmFwaFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9vcGVuX2dyYXBoKGluZm8pe1xuICB2YXIgZyA9IGpvb19nbG9iYWxfb2JqZWN0O1xuICB2YXIgaW5mbyA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGluZm8pO1xuICBmdW5jdGlvbiBnZXQobmFtZSl7XG4gICAgdmFyIHJlcyA9IGluZm8ubWF0Y2goXCIoXnwsKSAqXCIrbmFtZStcIiAqPSAqKFthLXpBLVowLTlfXSspICooLHwkKVwiKTtcbiAgICBpZihyZXMpIHJldHVybiByZXNbMl07XG4gIH1cbiAgdmFyIHNwZWNzID0gW107XG4gIGlmKCEoaW5mbz09XCJcIikpIHNwZWNzLnB1c2goaW5mbyk7XG4gIHZhciB0YXJnZXQgPSBnZXQoXCJ0YXJnZXRcIik7XG4gIGlmKCF0YXJnZXQpIHRhcmdldD1cIlwiO1xuICB2YXIgc3RhdHVzID0gZ2V0KFwic3RhdHVzXCIpO1xuICBpZighc3RhdHVzKSBzcGVjcy5wdXNoKFwic3RhdHVzPTFcIilcblxuICB2YXIgdyA9IGdldChcIndpZHRoXCIpO1xuICB3ID0gdz9wYXJzZUludCh3KToyMDA7XG4gIHNwZWNzLnB1c2goXCJ3aWR0aD1cIit3KTtcblxuICB2YXIgaCA9IGdldChcImhlaWdodFwiKTtcbiAgaCA9IGg/cGFyc2VJbnQoaCk6MjAwO1xuICBzcGVjcy5wdXNoKFwiaGVpZ2h0PVwiK2gpO1xuXG4gIHZhciB3aW4gPSBnLm9wZW4oXCJhYm91dDpibGFua1wiLHRhcmdldCxzcGVjcy5qb2luKFwiLFwiKSk7XG4gIGlmKCF3aW4pIHtjYW1sX2ZhaWx3aXRoKFwiR3JhcGhpY3Mub3Blbl9ncmFwaDogY2Fubm90IG9wZW4gdGhlIHdpbmRvd1wiKX1cbiAgdmFyIGRvYyA9IHdpbi5kb2N1bWVudDtcbiAgdmFyIGNhbnZhcyA9IGRvYy5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICBjYW52YXMud2lkdGggPSB3O1xuICBjYW52YXMuaGVpZ2h0ID0gaDtcbiAgdmFyIGN0eCA9IGNhbWxfZ3Jfc3RhdGVfY3JlYXRlKGNhbnZhcyx3LGgpO1xuICBjdHguc2V0X3RpdGxlID0gZnVuY3Rpb24gKHRpdGxlKSB7XG4gICAgZG9jLnRpdGxlID0gdGl0bGU7XG4gIH07XG4gIGNhbWxfZ3Jfc3RhdGVfc2V0KGN0eCk7XG4gIHZhciBib2R5ID0gZG9jLmJvZHk7XG4gIGJvZHkuc3R5bGUubWFyZ2luID0gXCIwcHhcIjtcbiAgYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9pbml0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF9jb2xvcixjYW1sX2dyX21vdmV0byxjYW1sX2dyX3Jlc2l6ZV93aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgsY2FtbF9ncl9zZXRfdGV4dF9zaXplLGNhbWxfZ3Jfc2V0X2ZvbnRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9pbml0KCl7XG4gIGNhbWxfZ3JfbW92ZXRvKGNhbWxfZ3Jfc3RhdGUueCxjYW1sX2dyX3N0YXRlLnkpO1xuICBjYW1sX2dyX3Jlc2l6ZV93aW5kb3coY2FtbF9ncl9zdGF0ZS53aWR0aCxjYW1sX2dyX3N0YXRlLmhlaWdodCk7XG4gIGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgoY2FtbF9ncl9zdGF0ZS5saW5lX3dpZHRoKTtcbiAgY2FtbF9ncl9zZXRfdGV4dF9zaXplKGNhbWxfZ3Jfc3RhdGUudGV4dF9zaXplKTtcbiAgY2FtbF9ncl9zZXRfZm9udChjYW1sX2dyX3N0YXRlLmZvbnQpO1xuICBjYW1sX2dyX3NldF9jb2xvcihjYW1sX2dyX3N0YXRlLmNvbG9yKTtcbiAgY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlKGNhbWxfZ3Jfc3RhdGUudGl0bGUpO1xuICAvL2NhbWxfZ3JfcmVzaXplX3dpbmRvdyBtaWdodCByZXNldCBzb21lIGNhbnZhcycgcHJvcGVydGllc1xuICBjYW1sX2dyX3N0YXRlLmNvbnRleHQudGV4dEJhc2VsaW5lID0gJ2JvdHRvbSc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2dyX3N0YXRlX2NyZWF0ZShjYW52YXMsdyxoKXtcbiAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICByZXR1cm4ge1xuICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgY2FudmFzIDogY2FudmFzLFxuICAgIHggOiAwLFxuICAgIHkgOiAwLFxuICAgIHdpZHRoIDogdyxcbiAgICBoZWlnaHQgOiBoLFxuICAgIGxpbmVfd2lkdGggOiAxLFxuICAgIGZvbnQgOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiZml4ZWRcIiksXG4gICAgdGV4dF9zaXplIDogMjYsXG4gICAgY29sb3IgOiAweDAwMDAwMCxcbiAgICB0aXRsZSA6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIilcbiAgfTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kb2Nfb2Zfc3RhdGVcbmZ1bmN0aW9uIGNhbWxfZ3JfZG9jX29mX3N0YXRlKHN0YXRlKSB7XG4gIGlmKHN0YXRlLmNhbnZhcy5vd25lckRvY3VtZW50KVxuICAgIHJldHVybiBzdGF0ZS5jYW52YXMub3duZXJEb2N1bWVudDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbG9zZV9ncmFwaFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xvc2VfZ3JhcGgoKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNhbnZhcy53aWR0aCA9IDA7XG4gIHMuY2FudmFzLmhlaWdodCA9IDA7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlKG5hbWUpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMudGl0bGUgPSBuYW1lO1xuICB2YXIganNuYW1lID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmKHMuc2V0X3RpdGxlKSBzLnNldF90aXRsZShqc25hbWUpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9yZXNpemVfd2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9yZXNpemVfd2luZG93KHcsaCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKVxuICBzLndpZHRoID0gdztcbiAgcy5oZWlnaHQgPSBoO1xuICBzLmNhbnZhcy53aWR0aCA9IHc7XG4gIHMuY2FudmFzLmhlaWdodCA9IGg7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2NsZWFyX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jbGVhcl9ncmFwaCgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY2FudmFzLndpZHRoID0gcy53aWR0aDtcbiAgcy5jYW52YXMuaGVpZ2h0ID0gcy5oZWlnaHQ7XG4gIC8vICBzLmNvbnRleHQuc3Ryb2tlUmVjdCAoMC4sIDAuLCBzLndpZHRoLCBzLmhlaWdodCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NpemVfeFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2l6ZV94KCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMud2lkdGg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NpemVfeVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2l6ZV95KCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMuaGVpZ2h0O1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2NvbG9yXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zZXRfY29sb3IoY29sb3Ipe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIGZ1bmN0aW9uIGNvbnZlcnQobnVtYmVyKSB7XG4gICAgdmFyIHN0ciA9ICcnICsgbnVtYmVyLnRvU3RyaW5nKDE2KTtcbiAgICB3aGlsZSAoc3RyLmxlbmd0aCA8IDIpIHN0ciA9ICcwJyArIHN0cjtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHZhclxuICByID0gKGNvbG9yID4+IDE2KSAmIDB4ZmYsXG4gIGcgPSAoY29sb3IgPj4gOCkgICYgMHhmZixcbiAgYiA9IChjb2xvciA+PiAwKSAgJiAweGZmO1xuICBzLmNvbG9yPWNvbG9yO1xuICB2YXIgY19zdHIgPSAnIycgKyBjb252ZXJ0KHIpICsgY29udmVydChnKSArIGNvbnZlcnQoYik7XG4gIHMuY29udGV4dC5maWxsU3R5bGUgPSAgIGNfc3RyO1xuICBzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjX3N0cjtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3Bsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3Bsb3QoeCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW09cy5jb250ZXh0LmNyZWF0ZUltYWdlRGF0YSgxLDEpO1xuICB2YXIgZCA9IGltLmRhdGE7XG4gIHZhciBjb2xvciA9IHMuY29sb3I7XG4gIGRbMF0gPSAoY29sb3IgPj4gMTYpICYgMHhmZjsgLy9yXG4gIGRbMV0gPSAoY29sb3IgPj4gOCkgICYgMHhmZiwgLy9nXG4gIGRbMl0gPSAoY29sb3IgPj4gMCkgICYgMHhmZjsgLy9iXG4gIGRbM10gPSAweEZGOyAvL2FcbiAgcy54PXg7XG4gIHMueT15O1xuICBzLmNvbnRleHQucHV0SW1hZ2VEYXRhKGltLHgscy5oZWlnaHQgLSB5KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcG9pbnRfY29sb3Jcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3BvaW50X2NvbG9yKHgseSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGltPXMuY29udGV4dC5nZXRJbWFnZURhdGEoeCxzLmhlaWdodCAtIHksMSwxKTtcbiAgdmFyIGQgPSBpbS5kYXRhO1xuICByZXR1cm4gKGRbMF0gPDwgMTYpICsgKGRbMV0gPDwgOCkgKyBkWzJdO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9tb3ZldG9cbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX21vdmV0byh4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMueD14O1xuICBzLnk9eTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF94XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3goKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy54XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2N1cnJlbnRfeVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfY3VycmVudF95KCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueVxufVxuLy9Qcm92aWRlczogY2FtbF9ncl9saW5ldG9cbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2xpbmV0byh4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgcy5jb250ZXh0Lm1vdmVUbyhzLngscy5oZWlnaHQgLSBzLnkpO1xuICBzLmNvbnRleHQubGluZVRvKHgscy5oZWlnaHQgLSB5KTtcbiAgcy5jb250ZXh0LnN0cm9rZSgpO1xuICBzLng9eDtcbiAgcy55PXk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3JlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfcmVjdCh4LHksdyxoKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuc3Ryb2tlUmVjdCh4LHMuaGVpZ2h0IC0geSx3LC1oKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfYXJjX2F1eFxuZnVuY3Rpb24gY2FtbF9ncl9hcmNfYXV4KGN0eCxjeCxjeSxyeSxyeCxhMSxhMil7XG4gIHdoaWxlKGExPmEyKSBhMis9MzYwO1xuICBhMSAvPSAxODA7XG4gIGEyIC89IDE4MDtcbiAgdmFyIHJvdCA9IDAseFBvcyx5UG9zLHhQb3NfcHJldix5UG9zX3ByZXY7XG4gIHZhciBzcGFjZSA9IDI7XG4gIHZhciBudW0gPSAoKChhMiAtIGExKSAqIE1hdGguUEkgKiAoKHJ4K3J5KS8yKSkgLyBzcGFjZSkgfCAwO1xuICB2YXIgZGVsdGEgPSAoYTIgLSBhMSkgKiBNYXRoLlBJIC8gbnVtO1xuICB2YXIgaSA9IGExICogTWF0aC5QSTtcbiAgZm9yICh2YXIgaj0wO2o8PW51bTtqKyspe1xuICAgIHhQb3MgPSBjeCAtIChyeCAqIE1hdGguc2luKGkpKSAqIE1hdGguc2luKHJvdCAqIE1hdGguUEkpICsgKHJ5ICogTWF0aC5jb3MoaSkpICogTWF0aC5jb3Mocm90ICogTWF0aC5QSSk7XG4gICAgeFBvcyA9IHhQb3MudG9GaXhlZCgyKTtcbiAgICB5UG9zID0gY3kgKyAocnkgKiBNYXRoLmNvcyhpKSkgKiBNYXRoLnNpbihyb3QgKiBNYXRoLlBJKSArIChyeCAqIE1hdGguc2luKGkpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHlQb3MgPSB5UG9zLnRvRml4ZWQoMik7XG4gICAgaWYgKGo9PTApIHtcbiAgICAgIGN0eC5tb3ZlVG8oeFBvcywgeVBvcyk7XG4gICAgfSBlbHNlIGlmICh4UG9zX3ByZXYhPXhQb3MgfHwgeVBvc19wcmV2IT15UG9zKXtcbiAgICAgIGN0eC5saW5lVG8oeFBvcywgeVBvcyk7XG4gICAgfVxuICAgIHhQb3NfcHJldj14UG9zO1xuICAgIHlQb3NfcHJldj15UG9zO1xuICAgIGktPSBkZWx0YTsvL2Njd1xuICB9XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19hcmNcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0LCBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19hcmMoeCx5LHJ4LHJ5LGExLGEyKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIGNhbWxfZ3JfYXJjX2F1eChzLmNvbnRleHQseCxzLmhlaWdodCAtIHkscngscnksYTEsYTIpO1xuICBzLmNvbnRleHQuc3Ryb2tlKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9saW5lX3dpZHRoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zZXRfbGluZV93aWR0aCh3KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmxpbmVfd2lkdGggPSB3O1xuICBzLmNvbnRleHQubGluZVdpZHRoID0gd1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9maWxsX3JlY3Rcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfcmVjdCh4LHksdyxoKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuZmlsbFJlY3QoeCxzLmhlaWdodCAtIHksdywtaCk7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9maWxsX3BvbHlcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfcG9seShhcil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBzLmNvbnRleHQubW92ZVRvKGFyWzFdWzFdLHMuaGVpZ2h0IC0gYXJbMV1bMl0pO1xuICBmb3IodmFyIGkgPSAyOyBpIDwgYXIubGVuZ3RoOyBpKyspXG4gICAgcy5jb250ZXh0LmxpbmVUbyhhcltpXVsxXSxzLmhlaWdodCAtIGFyW2ldWzJdKTtcbiAgcy5jb250ZXh0LmxpbmVUbyhhclsxXVsxXSxzLmhlaWdodCAtIGFyWzFdWzJdKTtcbiAgcy5jb250ZXh0LmZpbGwoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9hcmNcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0LCBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfZmlsbF9hcmMoeCx5LHJ4LHJ5LGExLGEyKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIGNhbWxfZ3JfYXJjX2F1eChzLmNvbnRleHQseCxzLmhlaWdodCAtIHkscngscnksYTEsYTIpO1xuICBzLmNvbnRleHQuZmlsbCgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3N0clxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19zdHIoc3RyKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgbSA9IHMuY29udGV4dC5tZWFzdXJlVGV4dChzdHIpO1xuICB2YXIgZHggPSBtLndpZHRoO1xuICBzLmNvbnRleHQuZmlsbFRleHQoc3RyLHMueCxzLmhlaWdodCAtIHMueSk7XG4gIHMueCArPSBkeCB8IDA7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RyYXdfY2hhclxuLy9SZXF1aXJlczogY2FtbF9ncl9kcmF3X3N0clxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X2NoYXIoYyl7XG4gIGNhbWxfZ3JfZHJhd19zdHIoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RyYXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2dyX2RyYXdfc3RyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X3N0cmluZyhzdHIpe1xuICBjYW1sX2dyX2RyYXdfc3RyKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN0cikpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfZm9udFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF9mb250KGYpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuZm9udCA9IGY7XG4gIHMuY29udGV4dC5mb250ID0gcy50ZXh0X3NpemUgKyBcInB4IFwiICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocy5mb250KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X3RleHRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF90ZXh0X3NpemUoc2l6ZSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy50ZXh0X3NpemUgPSBzaXplO1xuICBzLmNvbnRleHQuZm9udCA9IHMudGV4dF9zaXplICsgXCJweCBcIiArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMuZm9udCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3RleHRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3RleHRfc2l6ZSh0eHQpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciB3ID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHR4dCkpLndpZHRoO1xuICByZXR1cm4gWzAsdyxzLnRleHRfc2l6ZV07XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9ncl9tYWtlX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9tYWtlX2ltYWdlKGFycil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGggPSBhcnIubGVuZ3RoIC0gMSA7XG4gIHZhciB3ID0gYXJyWzFdLmxlbmd0aCAtIDE7XG4gIHZhciBpbSA9IHMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEodyxoKTtcbiAgZm9yKHZhciBpPTA7aTxoO2krKyl7XG4gICAgZm9yKHZhciBqPTA7ajx3O2orKyl7XG4gICAgICB2YXIgYyA9IGFycltpKzFdW2orMV07XG4gICAgICB2YXIgbyA9IGkqKHcqNCkgKyAoaiAqIDQpO1xuICAgICAgaWYoYyA9PSAtMSkge1xuICAgICAgICBpbS5kYXRhW28gKyAwXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDFdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgMl0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAzXSA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbS5kYXRhW28gKyAwXSA9IGMgPj4gMTYgJiAweGZmO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IGMgPj4gIDggJiAweGZmO1xuICAgICAgICBpbS5kYXRhW28gKyAyXSA9IGMgPj4gIDAgJiAwWGZmO1xuICAgICAgICBpbS5kYXRhW28gKyAzXSA9IDB4ZmY7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpbVxufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kdW1wX2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kdW1wX2ltYWdlKGltKXtcbiAgdmFyIGRhdGEgPSBbMF1cbiAgZm9yKHZhciBpPTA7IGk8aW0uaGVpZ2h0O2krKyl7XG4gICAgZGF0YVtpKzFdID0gWzBdXG4gICAgZm9yKHZhciBqPTA7IGo8aW0ud2lkdGg7aisrKXtcbiAgICAgIHZhciBvID0gaSooaW0ud2lkdGgqNCkgKyAoaiAqIDQpLFxuICAgICAgICAgIHIgPSBpbS5kYXRhW28rMF0sXG4gICAgICAgICAgZyA9IGltLmRhdGFbbysxXSxcbiAgICAgICAgICBiID0gaW0uZGF0YVtvKzJdO1xuICAgICAgZGF0YVtpKzFdW2orMV0gPSAociA8PCAxNikgKyAoZyA8PCA4KSArIGJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19pbWFnZShpbSx4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIGlmKCFpbS5pbWFnZSkge1xuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgIGNhbnZhcy53aWR0aCA9IHMud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IHMuaGVpZ2h0O1xuICAgIGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikucHV0SW1hZ2VEYXRhKGltLDAsMCk7XG4gICAgdmFyIGltYWdlID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LkltYWdlKCk7XG4gICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbWFnZSx4LHMuaGVpZ2h0IC0gaW0uaGVpZ2h0IC0geSk7XG4gICAgICBpbS5pbWFnZSA9IGltYWdlO1xuICAgIH1cbiAgICBpbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO1xuICB9IGVsc2Uge1xuICAgIHMuY29udGV4dC5kcmF3SW1hZ2UoaW0uaW1hZ2UseCxzLmhlaWdodCAtIGltLmhlaWdodCAtIHkpO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9jcmVhdGVfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2NyZWF0ZV9pbWFnZSh4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHgseSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2JsaXRfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2JsaXRfaW1hZ2UoaW0seCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW0yID0gcy5jb250ZXh0LmdldEltYWdlRGF0YSh4LHMuaGVpZ2h0IC0gaW0uaGVpZ2h0IC0geSxpbS53aWR0aCxpbS5oZWlnaHQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltMi5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgaW0uZGF0YVtpXSA9IGltMi5kYXRhW2ldO1xuICAgIGltLmRhdGFbaSsxXSA9IGltMi5kYXRhW2krMV07XG4gICAgaW0uZGF0YVtpKzJdID0gaW0yLmRhdGFbaSsyXTtcbiAgICBpbS5kYXRhW2krM10gPSBpbTIuZGF0YVtpKzNdO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19oYW5kbGVyXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXIoKXtyZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2lnaW9fc2lnbmFsXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX3NpZ25hbCgpe3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9ncl93YWl0X2V2ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dhaXRfZXZlbnQoX2V2bCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3dhaXRfZXZlbnQgbm90IEltcGxlbWVudGVkOiB1c2UgR3JhcGhpY3NfanMgaW5zdGVhZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zeW5jaHJvbml6ZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9zeW5jaHJvbml6ZSAoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3N5bmNocm9uaXplIG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVtZW1iZXJfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9yZW1lbWJlcl9tb2RlICgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Rpc3BsYXlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9kaXNwbGF5X21vZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Rpc3BsYXlfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2luZG93X2lkXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dpbmRvd19pZChhKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3dpbmRvd19pZCBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfb3Blbl9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3Jfb3Blbl9zdWJ3aW5kb3coYSxiLGMsZCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9vcGVuX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyhhKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogICAgICAgICAweDgwLFxuICBQUkVGSVhfU01BTExfSU5UOiAgICAgICAgICAgMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogICAgICAgIDB4MjAsXG4gIENPREVfSU5UODogICAgICAgICAgICAgICAgICAweDAwLFxuICBDT0RFX0lOVDE2OiAgICAgICAgICAgICAgICAgMHgwMSxcbiAgQ09ERV9JTlQzMjogICAgICAgICAgICAgICAgIDB4MDIsXG4gIENPREVfSU5UNjQ6ICAgICAgICAgICAgICAgICAweDAzLFxuICBDT0RFX1NIQVJFRDg6ICAgICAgICAgICAgICAgMHgwNCxcbiAgQ09ERV9TSEFSRUQxNjogICAgICAgICAgICAgIDB4MDUsXG4gIENPREVfU0hBUkVEMzI6ICAgICAgICAgICAgICAweDA2LFxuICBDT0RFX0JMT0NLMzI6ICAgICAgICAgICAgICAgMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAgICAgICAgICAgICAgIDB4MTMsXG4gIENPREVfU1RSSU5HODogICAgICAgICAgICAgICAweDA5LFxuICBDT0RFX1NUUklORzMyOiAgICAgICAgICAgICAgMHgwQSxcbiAgQ09ERV9ET1VCTEVfQklHOiAgICAgICAgICAgIDB4MEIsXG4gIENPREVfRE9VQkxFX0xJVFRMRTogICAgICAgICAweDBDLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAgICAgMHgwRCxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTogIDB4MEUsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfQklHOiAgICAweDBGLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTogMHgwNyxcbiAgQ09ERV9DT0RFUE9JTlRFUjogICAgICAgICAgIDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAgICAgICAgICAweDExLFxuICBDT0RFX0NVU1RPTTogICAgICAgICAgICAgICAgMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAgICAgICAgICAgIDB4MTgsXG4gIENPREVfQ1VTVE9NX0ZJWEVEOiAgICAgICAgICAweDE5XG59XG5cblxuLy9Qcm92aWRlczogTWxTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIE1sU3RyaW5nUmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7IHRoaXMuaSA9IGk7IH1cbk1sU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0ID4+IDE2KSB8IHMuY2hhckNvZGVBdChpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnMuc3Vic3RyaW5nKGksIGkgKyBsZW4pKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBCaWdTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBCaWdTdHJpbmdSZWFkZXIgKGJzLCBpKSB7IHRoaXMucyA9IGJzOyB0aGlzLmkgPSBpOyB9XG5CaWdTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCA4KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgMjQgPj4gMTYpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMykgICAgICAgICApID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgYXJyID0gbmV3IEFycmF5KGxlbilcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspe1xuICAgICAgYXJyW2pdID0gY2FtbF9iYV9nZXRfMSh0aGlzLnMsIGkraik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGFycik7XG4gIH1cbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9ieXRlcyAoYSkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIChjYW1sX2ludDY0X29mX2J5dGVzIChhKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXJcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAocywgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciwgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSwgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzICh0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X21hcnNoYWwod3JpdGVyLCB2LCBzaXplcykge1xuICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgd3JpdGVyLndyaXRlICg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4OyBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzaXplWzBdID0gNDtcbiAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzd2l0Y2ggKHJlYWRlci5yZWFkOHUgKCkpIHtcbiAgY2FzZSAxOlxuICAgIHNpemVbMF0gPSA0O1xuICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgY2FzZSAyOlxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICBkZWZhdWx0OiBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbmF0aXZlIGludGVnZXJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3VubWFyc2hhbCwgY2FtbF9pbnQ2NF9tYXJzaGFsLCBjYW1sX2ludDY0X2NvbXBhcmUsIGNhbWxfaW50NjRfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9pbnQzMl91bm1hcnNoYWwsIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9iYV9zZXJpYWxpemUsIGNhbWxfYmFfZGVzZXJpYWxpemUsIGNhbWxfYmFfY29tcGFyZSwgY2FtbF9iYV9oYXNoXG52YXIgY2FtbF9jdXN0b21fb3BzID1cbiAgICB7XCJfalwiOiB7XG4gICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgICAgc2VyaWFsaXplICA6IGNhbWxfaW50NjRfbWFyc2hhbCxcbiAgICAgIGZpeGVkX2xlbmd0aCA6IDgsXG4gICAgICBjb21wYXJlIDogY2FtbF9pbnQ2NF9jb21wYXJlLFxuICAgICAgaGFzaCA6IGNhbWxfaW50NjRfaGFzaFxuICAgIH0sXG4gICAgIFwiX2lcIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQzMl91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfblwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyYXlcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2JhX2Rlc2VyaWFsaXplLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9XG4gICAgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKSB7XG4gIHZhciBfbWFnaWMgPSByZWFkZXIucmVhZDMydSAoKVxuICB2YXIgX2Jsb2NrX2xlbiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSAobnVtX29iamVjdHMgPiAwKT9bXTpudWxsO1xuICB2YXIgb2JqX2NvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiBpbnRlcm5fcmVjICgpIHtcbiAgICB2YXIgY29kZSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweEY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAoY29kZSAmIDB4M0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyAqLykge1xuICAgICAgICB2YXIgbGVuID0gY29kZSAmIDB4MUY7XG4gICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2goY29kZSkge1xuICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQ4cyAoKTtcbiAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDE2cyAoKTtcbiAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW50ZWdlciB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyIC0gb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDE2dSAoKTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlciAtIG9mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIgLSBvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICB2YXIgaGVhZGVyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4RkY7XG4gICAgICAgICAgdmFyIHNpemUgPSBoZWFkZXIgPj4gMTA7XG4gICAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEzOiAvL2NzdC5DT0RFX0JMT0NLNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwOTogLy9jc3QuQ09ERV9TVFJJTkc4OlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQTogLy9jc3QuQ09ERV9TVFJJTkczMjpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBDOiAvL2NzdC5DT0RFX0RPVUJMRV9MSVRUTEU6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0W2ldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBFOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEQ6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwNzogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEY6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgIGNhc2UgMHgxMTogLy9jc3QuQ09ERV9JTkZJWFBPSU5URVI6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MTI6IC8vY3N0LkNPREVfQ1VTVE9NOlxuICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgY2FzZSAweDE5OiAvL2NzdC5DT0RFX0NVU1RPTV9GSVhFRDpcbiAgICAgICAgICB2YXIgYywgcyA9IFwiXCI7XG4gICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSAoKSkgIT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW3NdO1xuICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgIGlmKCFvcHMpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHVua25vd24gY3VzdG9tIGJsb2NrIGlkZW50aWZpZXJcIik7XG4gICAgICAgICAgc3dpdGNoKGNvZGUpe1xuICAgICAgICAgIGNhc2UgMHgxMjogLy8gY3N0LkNPREVfQ1VTVE9NIChkZXByZWNhdGVkKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgIGlmKCFvcHMuZml4ZWRfbGVuZ3RoKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGV4cGVjdGVkIGEgZml4ZWQtc2l6ZSBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gb3BzLmZpeGVkX2xlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxODogLy8gY3N0LkNPREVfQ1VTVE9NX0xFTlxuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgICAgLy8gU2tpcCBzaXplNjRcbiAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgICAgICAgICB2YXIgc2l6ZSA9IFswXTtcbiAgICAgICAgICB2YXIgdiA9IG9wcy5kZXNlcmlhbGl6ZShyZWFkZXIsIHNpemUpO1xuICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gc2l6ZVswXSlcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbmNvcnJlY3QgbGVuZ3RoIG9mIHNlcmlhbGl6ZWQgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjICgpO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIHZhciBzaXplID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgZCA9IHYubGVuZ3RoO1xuICAgIGlmIChkIDwgc2l6ZSkgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICB2W2RdID0gaW50ZXJuX3JlYyAoKTtcbiAgfVxuICBpZiAodHlwZW9mIG9mcyE9XCJudW1iZXJcIikgb2ZzWzBdID0gcmVhZGVyLmk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChzLCBvZnMpIHtcbiAgZnVuY3Rpb24gZ2V0MzIocyxpKSB7XG4gICAgcmV0dXJuIChjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSkgPDwgMjQpIHxcbiAgICAgIChjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDEpIDw8IDE2KSB8XG4gICAgICAoY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkgKyAyKSA8PCA4KSB8XG4gICAgICBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDMpO1xuICB9XG4gIGlmIChnZXQzMihzLCBvZnMpICE9ICgweDg0OTVBNkJFfDApKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogYmFkIG9iamVjdFwiKTtcbiAgcmV0dXJuIChnZXQzMihzLCBvZnMgKyA0KSk7XG59XG5cbi8vUHJvdmlkZXM6IE1sT2JqZWN0VGFibGVcbnZhciBNbE9iamVjdFRhYmxlO1xuaWYgKHR5cGVvZiBqb29fZ2xvYmFsX29iamVjdC5XZWFrTWFwID09PSAndW5kZWZpbmVkJykge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgLyogcG9seWZpbGwgKHVzaW5nIGxpbmVhciBzZWFyY2gpICovXG4gICAgZnVuY3Rpb24gTmFpdmVMb29rdXAob2JqcykgeyB0aGlzLm9ianMgPSBvYmpzOyB9XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm9ianNbaV0gPT09IHYpIHJldHVybiBpO1xuICAgICAgfVxuICAgIH07XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gRG8gbm90aGluZyBoZXJlLiBbTWxPYmplY3RUYWJsZS5zdG9yZV0gd2lsbCBwdXNoIHRvIFt0aGlzLm9ianNdIGRpcmVjdGx5LlxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBOYWl2ZUxvb2t1cCh0aGlzLm9ianMpO1xuICAgIH07XG4gIH0oKTtcbn1cbmVsc2Uge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICB0aGlzLm9ianMgPSBbXTsgdGhpcy5sb29rdXAgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuV2Vha01hcCgpO1xuICB9O1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5zdG9yZSA9IGZ1bmN0aW9uKHYpIHtcbiAgdGhpcy5sb29rdXAuc2V0KHYsIHRoaXMub2Jqcy5sZW5ndGgpO1xuICB0aGlzLm9ianMucHVzaCh2KTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUucmVjYWxsID0gZnVuY3Rpb24odikge1xuICB2YXIgaSA9IHRoaXMubG9va3VwLmdldCh2KTtcbiAgcmV0dXJuIChpID09PSB1bmRlZmluZWQpXG4gICAgPyB1bmRlZmluZWQgOiB0aGlzLm9ianMubGVuZ3RoIC0gaTsgICAvKiBpbmRleCBpcyByZWxhdGl2ZSAqL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xlZ2FjeV9jdXN0b21fY29kZVxuLy9WZXJzaW9uOiA+PSA0LjA4XG52YXIgY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGUgPSBmYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xlZ2FjeV9jdXN0b21fY29kZVxuLy9WZXJzaW9uOiA8IDQuMDhcbnZhciBjYW1sX2xlZ2FjeV9jdXN0b21fY29kZSA9IHRydWVcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IE1sT2JqZWN0VGFibGUsIGNhbWxfbGlzdF90b19qc19hcnJheSwgY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGUsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbnZhciBjYW1sX291dHB1dF92YWwgPSBmdW5jdGlvbiAoKXtcbiAgZnVuY3Rpb24gV3JpdGVyICgpIHsgdGhpcy5jaHVuayA9IFtdOyB9XG4gIFdyaXRlci5wcm90b3R5cGUgPSB7XG4gICAgY2h1bmtfaWR4OjIwLCBibG9ja19sZW46MCwgb2JqX2NvdW50ZXI6MCwgc2l6ZV8zMjowLCBzaXplXzY0OjAsXG4gICAgd3JpdGU6ZnVuY3Rpb24gKHNpemUsIHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9hdDpmdW5jdGlvbiAocG9zLCBzaXplLCB2YWx1ZSkge1xuICAgICAgdmFyIHBvcyA9IHBvcztcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3BvcysrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9jb2RlOmZ1bmN0aW9uIChzaXplLCBjb2RlLCB2YWx1ZSkge1xuICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9IGNvZGU7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1t0aGlzLmNodW5rX2lkeCsrXSA9ICh2YWx1ZSA+PiBpKSAmIDB4RkY7XG4gICAgfSxcbiAgICB3cml0ZV9zaGFyZWQ6ZnVuY3Rpb24gKG9mZnNldCkge1xuICAgICAgaWYgKG9mZnNldCA8ICgxIDw8IDgpKSB0aGlzLndyaXRlX2NvZGUoOCwgMHgwNCAvKmNzdC5DT0RFX1NIQVJFRDgqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgaWYgKG9mZnNldCA8ICgxIDw8IDE2KSkgdGhpcy53cml0ZV9jb2RlKDE2LCAweDA1IC8qY3N0LkNPREVfU0hBUkVEMTYqLywgb2Zmc2V0KTtcbiAgICAgIGVsc2UgdGhpcy53cml0ZV9jb2RlKDMyLCAweDA2IC8qY3N0LkNPREVfU0hBUkVEMzIqLywgb2Zmc2V0KTtcbiAgICB9LFxuICAgIHBvczpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNodW5rX2lkeCB9LFxuICAgIGZpbmFsaXplOmZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuYmxvY2tfbGVuID0gdGhpcy5jaHVua19pZHggLSAyMDtcbiAgICAgIHRoaXMuY2h1bmtfaWR4ID0gMDtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCAweDg0OTVBNkJFKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLmJsb2NrX2xlbik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5vYmpfY291bnRlcik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzMyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfNjQpO1xuICAgICAgcmV0dXJuIHRoaXMuY2h1bms7XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiAodiwgZmxhZ3MpIHtcbiAgICBmbGFncyA9IGNhbWxfbGlzdF90b19qc19hcnJheShmbGFncyk7XG5cbiAgICB2YXIgbm9fc2hhcmluZyA9IChmbGFncy5pbmRleE9mKDAgLypNYXJzaGFsLk5vX3NoYXJpbmcqLykgIT09IC0xKSxcbiAgICAgICAgY2xvc3VyZXMgPSAgKGZsYWdzLmluZGV4T2YoMSAvKk1hcnNoYWwuQ2xvc3VyZXMqLykgIT09IC0xKTtcbiAgICAgICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBqb29fZ2xvYmFsX29iamVjdC5jb25zb2xlLndhcm4oXCJpbiBjYW1sX291dHB1dF92YWw6IGZsYWcgTWFyc2hhbC5DbG9zdXJlcyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcblxuICAgIHZhciB3cml0ZXIgPSBuZXcgV3JpdGVyICgpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkgeyB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7IHJldHVybiB0cnVlOyB9XG4gICAgICBlbHNlIHsgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZXJuX3JlYyAodikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwwXTtcbiAgICAgICAgaWYoIW9wcy5zZXJpYWxpemUpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQ3VzdG9tKVwiKTtcbiAgICAgICAgaWYoY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGUpIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTIgLypjc3QuQ09ERV9DVVNUT00qLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICB9IGVsc2UgaWYob3BzLmZpeGVkX2xlbmd0aCA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOCAvKmNzdC5DT0RFX0NVU1RPTV9MRU4qLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MgKCk7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTkgLypjc3QuQ09ERV9DVVNUT01fRklYRUQqLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIGlmIChvcHMuZml4ZWRfbGVuZ3RoICE9IHdyaXRlci5wb3MoKSAtIG9sZF9wb3MpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBpbmNvcnJlY3QgZml4ZWQgc2l6ZXMgc3BlY2lmaWVkIGJ5IFwiICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMiArICgoc3pfMzJfNjRbMF0gKyAzKSA+PiAyKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMiArICgoc3pfMzJfNjRbMV0gKyA3KSA+PiAzKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgICBpZiAodlswXSA9PSAyNTEpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQWJzdHJhY3QpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEgJiYgbWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICBpZiAodlswXSA8IDE2ICYmIHYubGVuZ3RoIC0gMSA8IDgpXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKTw8NCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sICgodi5sZW5ndGgtMSkgPDwgMTApIHwgdlswXSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IHYubGVuZ3RoO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSB2Lmxlbmd0aDtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSkgc3RhY2sucHVzaCAodiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYoIShjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IFtCeXRlcy50XSBjYW5ub3Qgc2FmZWx5IGJlIG1hcnNoYWxlZCB3aXRoIFstLWVuYWJsZSB1c2UtanMtc3RyaW5nXVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9ieXRlc19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2ICE9ICh2fDApKXtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLiBJdCBzZWVtcyBiZXR0ZXIgdG9cbiAgICAgICAgICAvLyBzeXN0ZW1hdGljYWxseSBmYWlsIG9uIG1hcnNoYWxsaW5nLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gICAgICAgICAgaWYodHlwZV9vZl92ICE9IFwibnVtYmVyXCIpXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKFwiK3R5cGVfb2ZfditcIilcIik7XG4gICAgICAgICAgLy8gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgLy8gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDBCIC8qY3N0LkNPREVfRE9VQkxFX0JJRyovKTtcbiAgICAgICAgICAvLyAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpPDg7IGkrKyl7d3JpdGVyLndyaXRlKDgsdFtpXSl9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAwWDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLyArIHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2ID49IC0oMSA8PCA3KSAmJiB2IDwgKDEgPDwgNykpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8ICgxIDw8IDE1KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDE2LCAweDAxIC8qY3N0LkNPREVfSU5UMTYqLywgdik7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjICh2KTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGkgPSBzdGFjay5wb3AgKCk7XG4gICAgICB2YXIgdiA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoICh2LCBpICsgMSk7XG4gICAgICBleHRlcm5fcmVjICh2W2ldKTtcbiAgICB9XG4gICAgaWYgKGludGVybl9vYmpfdGFibGUpIHdyaXRlci5vYmpfY291bnRlciA9IGludGVybl9vYmpfdGFibGUub2Jqcy5sZW5ndGg7XG4gICAgd3JpdGVyLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHdyaXRlci5jaHVuaztcbiAgfVxufSAoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlciAocywgb2ZzLCBsZW4sIHYsIGZsYWdzKSB7XG4gIHZhciB0ID0gY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncyk7XG4gIGlmICh0Lmxlbmd0aCA+IGxlbikgY2FtbF9mYWlsd2l0aCAoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXModCwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jbG9zZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9zeXNfY2xvc2UoZmQpIHtcbiAgZGVsZXRlIGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2ZkXTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RkX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX3N0ZF9vdXRwdXQoY2hhbmlkLHMpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgdmFyIHN0ciA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocyk7XG4gIHZhciBzbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHN0cik7XG4gIGNoYW4uZmlsZS53cml0ZShjaGFuLm9mZnNldCwgc3RyLCAwLCBzbGVuKTtcbiAgY2hhbi5vZmZzZXQgKz0gc2xlbjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX2dsb2JhbF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9ieXRlcyxNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBqc19wcmludF9zdGRlcnIsIGpzX3ByaW50X3N0ZG91dFxuLy9SZXF1aXJlczogY2FtbF9zdGRfb3V0cHV0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChpZHgsb3V0cHV0LGZpbGUsZmxhZ3MpIHtcbiAgaWYoY2FtbF9nbG9iYWxfZGF0YS5mZHMgPT09IHVuZGVmaW5lZCkgY2FtbF9nbG9iYWxfZGF0YS5mZHMgPSBuZXcgQXJyYXkoKTtcbiAgZmxhZ3M9ZmxhZ3M/ZmxhZ3M6e307XG4gIHZhciBpbmZvID0ge307XG4gIGluZm8uZmlsZSA9IGZpbGU7XG4gIGluZm8ub2Zmc2V0ID0gZmxhZ3MuYXBwZW5kP2ZpbGUubGVuZ3RoKCk6MDtcbiAgaW5mby5mbGFncyA9IGZsYWdzO1xuICBpbmZvLm91dHB1dCA9IG91dHB1dDtcbiAgY2FtbF9nbG9iYWxfZGF0YS5mZHNbaWR4XSA9IGluZm87XG4gIGlmKCFjYW1sX2dsb2JhbF9kYXRhLmZkX2xhc3RfaWR4IHx8IGlkeCA+IGNhbWxfZ2xvYmFsX2RhdGEuZmRfbGFzdF9pZHgpXG4gICAgY2FtbF9nbG9iYWxfZGF0YS5mZF9sYXN0X2lkeCA9IGlkeDtcbiAgcmV0dXJuIGlkeDtcbn1cbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW4gKG5hbWUsIGZsYWdzLCBfcGVybXMpIHtcbiAgdmFyIGYgPSB7fTtcbiAgd2hpbGUoZmxhZ3Mpe1xuICAgIHN3aXRjaChmbGFnc1sxXSl7XG4gICAgY2FzZSAwOiBmLnJkb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAxOiBmLndyb25seSA9IDE7YnJlYWs7XG4gICAgY2FzZSAyOiBmLmFwcGVuZCA9IDE7YnJlYWs7XG4gICAgY2FzZSAzOiBmLmNyZWF0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA0OiBmLnRydW5jYXRlID0gMTticmVhaztcbiAgICBjYXNlIDU6IGYuZXhjbCA9IDE7IGJyZWFrO1xuICAgIGNhc2UgNjogZi5iaW5hcnkgPSAxO2JyZWFrO1xuICAgIGNhc2UgNzogZi50ZXh0ID0gMTticmVhaztcbiAgICBjYXNlIDg6IGYubm9uYmxvY2sgPSAxO2JyZWFrO1xuICAgIH1cbiAgICBmbGFncz1mbGFnc1syXTtcbiAgfVxuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBmaWxlID0gcm9vdC5kZXZpY2Uub3Blbihyb290LnJlc3QsZik7XG4gIHZhciBpZHggPSBjYW1sX2dsb2JhbF9kYXRhLmZkX2xhc3RfaWR4P2NhbWxfZ2xvYmFsX2RhdGEuZmRfbGFzdF9pZHg6MDtcbiAgcmV0dXJuIGNhbWxfc3lzX29wZW5faW50ZXJuYWwgKGlkeCsxLGNhbWxfc3RkX291dHB1dCxmaWxlLGYpO1xufVxuY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCgwLGNhbWxfc3RkX291dHB1dCwgbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpKTsgLy9zdGRpblxuY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCgxLGpzX3ByaW50X3N0ZG91dCwgbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpKTsgLy9zdGRvdXRcbmNhbWxfc3lzX29wZW5faW50ZXJuYWwoMixqc19wcmludF9zdGRlcnIsIG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKSk7IC8vc3RkZXJyXG5cblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoKSB7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbHNcbnZhciBjYW1sX21sX2NoYW5uZWxzID0gbmV3IEFycmF5KCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QgKCkge1xuICB2YXIgbCA9IDA7XG4gIGZvcih2YXIgYyA9IDA7IGMgPCBjYW1sX21sX2NoYW5uZWxzLmxlbmd0aDsgYysrKXtcbiAgICBpZihjYW1sX21sX2NoYW5uZWxzW2NdICYmIGNhbWxfbWxfY2hhbm5lbHNbY10ub3BlbmVkICYmIGNhbWxfbWxfY2hhbm5lbHNbY10ub3V0KVxuICAgICAgbD1bMCxjYW1sX21sX2NoYW5uZWxzW2NdLmZkLGxdO1xuICB9XG4gIHJldHVybiBsO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9nbG9iYWxfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCAoZmQpIHtcbiAgdmFyIGRhdGEgPSBjYW1sX2dsb2JhbF9kYXRhLmZkc1tmZF07XG4gIGlmKGRhdGEuZmxhZ3MucmRvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHJlYWRvbmx5XCIpO1xuICB2YXIgY2hhbm5lbCA9IHtcbiAgICBmaWxlOmRhdGEuZmlsZSxcbiAgICBvZmZzZXQ6ZGF0YS5vZmZzZXQsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OnRydWUsXG4gICAgYnVmZmVyOlwiXCJcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsY2FtbF9zeXNfb3BlbixjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4gKGZkKSAge1xuICB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2ZkXTtcbiAgaWYoZGF0YS5mbGFncy53cm9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgd3JpdGVvbmx5XCIpO1xuXG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZGF0YS5maWxlLFxuICAgIG9mZnNldDpkYXRhLm9mZnNldCxcbiAgICBmZDpmZCxcbiAgICBvcGVuZWQ6dHJ1ZSxcbiAgICBvdXQ6IGZhbHNlLFxuICAgIHJlZmlsbDpudWxsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlKGNoYW5pZCxtb2RlKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBkYXRhID0gY2FtbF9nbG9iYWxfZGF0YS5mZHNbY2hhbi5mZF07XG4gIGRhdGEuZmxhZ3MudGV4dCA9ICFtb2RlXG4gIGRhdGEuZmxhZ3MuYmluYXJ5ID0gbW9kZVxuICByZXR1cm4gMDtcbn1cblxuLy9JbnB1dCBmcm9tIGluX2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9jbG9zZV9jaGFubmVsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLCBjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jbG9zZVxuZnVuY3Rpb24gY2FtbF9tbF9jbG9zZV9jaGFubmVsIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgY2hhbi5vcGVuZWQgPSBmYWxzZTtcbiAgY2hhbi5maWxlLmNsb3NlKCk7XG4gIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5maWxlLmxlbmd0aCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGggKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXQoY2hhbmlkLGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2NoYW4uZmRdLm91dHB1dCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGwoY2hhbmlkLGYpIHtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLnJlZmlsbCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3JlZmlsbF9pbnB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX21sX3JlZmlsbF9pbnB1dCAoY2hhbikge1xuICB2YXIgc3RyID0gY2hhbi5yZWZpbGwoKTtcbiAgdmFyIHN0cl9sZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyKTtcbiAgaWYgKHN0cl9sZW4gPT0gMCkgY2hhbi5yZWZpbGwgPSBudWxsO1xuICBjaGFuLmZpbGUud3JpdGUoY2hhbi5maWxlLmxlbmd0aCgpLCBzdHIsIDAsIHN0cl9sZW4pO1xuICByZXR1cm4gc3RyX2xlbjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3JlZmlsbF9pbnB1dCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmIChjaGFuLnJlZmlsbCA9PSBudWxsKSByZXR1cm47XG4gIGlmIChjaGFuLmZpbGUubGVuZ3RoKCkgIT0gY2hhbi5vZmZzZXQpIHJldHVybjtcbiAgY2FtbF9tbF9yZWZpbGxfaW5wdXQgKGNoYW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3JlZmlsbF9pbnB1dCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dCAoY2hhbmlkLCBzLCBpLCBsKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgbDIgPSBjaGFuLmZpbGUubGVuZ3RoKCkgLSBjaGFuLm9mZnNldDtcbiAgaWYgKGwyID09IDAgJiYgY2hhbi5yZWZpbGwgIT0gbnVsbCkgbDIgPSBjYW1sX21sX3JlZmlsbF9pbnB1dChjaGFuKTtcbiAgaWYgKGwyIDwgbCkgbCA9IGwyO1xuICBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCwgcywgaSwgbCk7XG4gIGNoYW4ub2Zmc2V0ICs9IGw7XG4gIHJldHVybiBsO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfZGF0YV9zaXplLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG5cbiAgdmFyIGJ1ZiA9IGNhbWxfY3JlYXRlX2J5dGVzKDgpO1xuICBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCxidWYsMCw4KTtcblxuICAvLyBIZWFkZXIgaXMgMjAgYnl0ZXNcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKGJ1ZiwgMCkgKyAyMDtcblxuICB2YXIgYnVmID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKTtcbiAgY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsYnVmLDAsbGVuKTtcblxuICB2YXIgb2Zmc2V0ID0gWzBdO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGJ1Ziwgb2Zmc2V0KTtcbiAgY2hhbi5vZmZzZXQgPSBjaGFuLm9mZnNldCArIG9mZnNldFswXTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX21heV9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhciAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjYW1sX21sX21heV9yZWZpbGxfaW5wdXQoY2hhbmlkKTtcbiAgaWYgKGNoYW4ub2Zmc2V0ID49IGNoYW4uZmlsZS5sZW5ndGgoKSlcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmZpbGUucmVhZF9vbmUoY2hhbi5vZmZzZXQpO1xuICBjaGFuLm9mZnNldCsrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tbF9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfaW50IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBmaWxlID0gY2hhbi5maWxlO1xuICB3aGlsZSAoKGNoYW4ub2Zmc2V0ICsgMykgPj0gZmlsZS5sZW5ndGgoKSkge1xuICAgIHZhciBsID0gY2FtbF9tbF9yZWZpbGxfaW5wdXQoY2hhbik7XG4gICAgaWYgKGwgPT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB9XG4gIHZhciBvID0gY2hhbi5vZmZzZXQ7XG4gIHZhciByID0oZmlsZS5yZWFkX29uZShvICApIDw8IDI0KVxuICAgICAgfCAgKGZpbGUucmVhZF9vbmUobysxKSA8PCAxNilcbiAgICAgIHwgIChmaWxlLnJlYWRfb25lKG8rMikgPDwgOClcbiAgICAgIHwgIChmaWxlLnJlYWRfb25lKG8rMykpO1xuICBjaGFuLm9mZnNldCs9NDtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbihjaGFuaWQscG9zKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW5fNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGNoYW4ub2Zmc2V0ID0gY2FtbF9pbnQ2NF90b19mbG9hdChwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5cbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luKGNoYW5pZCkge3JldHVybiBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW5fNjQoY2hhbmlkKSB7cmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLm9mZnNldCl9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX21heV9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lKGNoYW5pZCl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjYW1sX21sX21heV9yZWZpbGxfaW5wdXQoY2hhbmlkKTtcbiAgdmFyIHAgPSBjaGFuLm9mZnNldDtcbiAgdmFyIGxlbiA9IGNoYW4uZmlsZS5sZW5ndGgoKTtcbiAgaWYocCA+PSBsZW4pIHsgcmV0dXJuIDA7fVxuICB3aGlsZSh0cnVlKSB7XG4gICAgaWYocCA+PSBsZW4pIHJldHVybiAtIChwIC0gY2hhbi5vZmZzZXQpO1xuICAgIGlmKGNoYW4uZmlsZS5yZWFkX29uZShwKSA9PSAxMCkgcmV0dXJuIHAgLSBjaGFuLm9mZnNldCArIDE7XG4gICAgcCsrO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmKCEgY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IGZsdXNoIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGlmKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlciA9PSBcIlwiKSByZXR1cm4gMDtcbiAgaWYoY2hhbi5mZFxuICAgICAmJiBjYW1sX2dsb2JhbF9kYXRhLmZkc1tjaGFuLmZkXVxuICAgICAmJiBjYW1sX2dsb2JhbF9kYXRhLmZkc1tjaGFuLmZkXS5vdXRwdXQpIHtcbiAgICB2YXIgb3V0cHV0ID0gY2FtbF9nbG9iYWxfZGF0YS5mZHNbY2hhbi5mZF0ub3V0cHV0O1xuICAgIHN3aXRjaChvdXRwdXQubGVuZ3RoKXtcbiAgICBjYXNlIDI6IG91dHB1dChjaGFuaWQsY2hhbi5idWZmZXIpO2JyZWFrO1xuICAgIGRlZmF1bHQ6IG91dHB1dChjaGFuLmJ1ZmZlcilcbiAgICB9O1xuICB9XG4gIGNoYW4uYnVmZmVyID0gXCJcIjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vb3V0cHV0IHRvIG91dF9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9ibGl0X2J5dGVzLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVscywgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3Qgb3V0cHV0IHRvIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIHZhciBieXRlcztcbiAgaWYob2Zmc2V0ID09IDAgJiYgY2FtbF9tbF9ieXRlc19sZW5ndGgoYnVmZmVyKSA9PSBsZW4pXG4gICAgYnl0ZXMgPSBidWZmZXI7XG4gIGVsc2Uge1xuICAgIGJ5dGVzID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXMoYnVmZmVyLG9mZnNldCxieXRlcywwLGxlbik7XG4gIH1cbiAgdmFyIHN0cmluZyA9IGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ5dGVzKTtcbiAgdmFyIGpzc3RyaW5nID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzdHJpbmcpO1xuICB2YXIgaWQgPSBqc3N0cmluZy5sYXN0SW5kZXhPZihcIlxcblwiKTtcbiAgaWYoaWQgPCAwKVxuICAgIGNoYW4uYnVmZmVyKz1qc3N0cmluZztcbiAgZWxzZSB7XG4gICAgY2hhbi5idWZmZXIrPWpzc3RyaW5nLnN1YnN0cigwLGlkKzEpO1xuICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgY2hhbi5idWZmZXIgKz0ganNzdHJpbmcuc3Vic3RyKGlkKzEpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dChjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pe1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksb2Zmc2V0LGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9jaGFyIChjaGFuaWQsYykge1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nLCBjYW1sX21sX291dHB1dCxjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlIChjaGFuaWQsdixmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dChjaGFuaWQscG9zKXtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dF82NChjaGFuaWQscG9zKXtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0ID0gY2FtbF9pbnQ2NF90b19mbG9hdChwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5vZmZzZXRcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQgKGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5vZmZzZXQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50IChjaGFuaWQsaSkge1xuICB2YXIgYXJyID0gWyhpPj4yNCkgJiAweEZGLChpPj4xNikgJiAweEZGLChpPj44KSAmIDB4RkYsaSAmIDB4RkYgXTtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDQpO1xuICByZXR1cm4gMFxufVxuIiwiXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfbWlub3JcbmZ1bmN0aW9uIGNhbWxfZ2NfbWlub3IoKXsgcmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX21ham9yKCl7IHJldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9nY19mdWxsX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX2Z1bGxfbWFqb3IoKXsgcmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2NvbXBhY3Rpb25cbmZ1bmN0aW9uIGNhbWxfZ2NfY29tcGFjdGlvbigpeyByZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY291bnRlcnNcbmZ1bmN0aW9uIGNhbWxfZ2NfY291bnRlcnMoKSB7IHJldHVybiBbMjU0LDAsMCwwXSB9XG4vL1Byb3ZpZGVzOiBjYW1sX2djX3F1aWNrX3N0YXRcbmZ1bmN0aW9uIGNhbWxfZ2NfcXVpY2tfc3RhdCgpe1xuICByZXR1cm4gWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ2Nfc3RhdFxuZnVuY3Rpb24gY2FtbF9nY19zdGF0KCkge1xuICByZXR1cm4gWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19zZXRcbmZ1bmN0aW9uIGNhbWxfZ2Nfc2V0KF9jb250cm9sKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX2dldFxuZnVuY3Rpb24gY2FtbF9nY19nZXQoKXtcbiAgcmV0dXJuIFswLDAsMCwwLDAsMCwwLDAsMF1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3NldFxuZnVuY3Rpb24gY2FtbF9tZW1wcm9mX3NldChfY29udHJvbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5hbF9yZWdpc3RlciBjb25zdFxuZnVuY3Rpb24gY2FtbF9maW5hbF9yZWdpc3RlciAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVsZWFzZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9maW5hbF9yZWxlYXNlICgpIHsgcmV0dXJuIDA7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkLCBBbmR5IFJheVxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuLy9cbi8vIEJpZ2FycmF5LlxuLy9cbi8vIC0gYWxsIGJpZ2FycmF5IHR5cGVzIGluY2x1ZGluZyBJbnQ2NCBhbmQgQ29tcGxleC5cbi8vIC0gZm9ydHJhbiArIGMgbGF5b3V0c1xuLy8gLSBzdWIvc2xpY2UvcmVzaGFwZVxuLy8gLSByZXRhaW4gZmFzdCBwYXRoIGZvciAxZCBhcnJheSBhY2Nlc3NcblxuLy9Qcm92aWRlczogY2FtbF9iYV9pbml0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2JhX2luaXQoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemUoZGltcykge1xuICB2YXIgbl9kaW1zID0gZGltcy5sZW5ndGg7XG4gIHZhciBzaXplID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuX2RpbXM7IGkrKykge1xuICAgIGlmIChkaW1zW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIHNpemUgPSBzaXplICogZGltc1tpXTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKXtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDc6IGNhc2UgMTA6IGNhc2UgMTE6IHJldHVybiAyO1xuICBkZWZhdWx0OiByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpe1xuICB2YXIgZyA9IGpvb19nbG9iYWxfb2JqZWN0O1xuICB2YXIgdmlldztcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDA6ICB2aWV3ID0gZy5GbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDE6ICB2aWV3ID0gZy5GbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDI6ICB2aWV3ID0gZy5JbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDM6ICB2aWV3ID0gZy5VaW50OEFycmF5OyBicmVhaztcbiAgY2FzZSA0OiAgdmlldyA9IGcuSW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNTogIHZpZXcgPSBnLlVpbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA2OiAgdmlldyA9IGcuSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgNzogIHZpZXcgPSBnLkludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDg6ICB2aWV3ID0gZy5JbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA5OiAgdmlldyA9IGcuSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTA6IHZpZXcgPSBnLkZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTE6IHZpZXcgPSBnLkZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTI6IHZpZXcgPSBnLlVpbnQ4QXJyYXk7IGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpLCBjYW1sX2ludDY0X2hpMzIsIGNhbWxfaW50NjRfbG8zMlxuZnVuY3Rpb24gTWxfQmlnYXJyYXkgKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG5cbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY2FtbF9jdXN0b20gPSBcIl9iaWdhcnJheVwiO1xuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICB2YXIgb2ZzID0gMDtcbiAgaWYodHlwZW9mIGFyZyA9PT0gXCJudW1iZXJcIikgYXJnID0gW2FyZ107XG4gIGlmICghIChhcmcgaW5zdGFuY2VvZiBBcnJheSkpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYXJnLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5nZXQvc2V0OiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIGlmKHRoaXMubGF5b3V0ID09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFyZ1tpXSA8IDAgfHwgYXJnW2ldID49IHRoaXMuZGltc1tpXSlcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyBhcmdbaV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmRpbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSl7XG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgKGFyZ1tpXSAtIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2ZzO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBoID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobCxoKTtcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciByID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaSA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXVxuICB9XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSB2WzJdO1xuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMFxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBhID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHZhciBiID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGlmKGEgPT0gYil7XG4gICAgICB0aGlzLmRhdGEuZmlsbChhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBhIDogYjtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgaW0gPSB2WzFdO1xuICAgIHZhciByZSA9IHZbMl07XG4gICAgaWYoaW0gPT0gcmUpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoaW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGltIDogcmU7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YS5maWxsKHYpO1xuICAgIGJyZWFrO1xuICB9XG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoYiwgdG90YWwpIHtcbiAgaWYgKHRoaXMubGF5b3V0ICE9IGIubGF5b3V0IHx8IHRoaXMua2luZCAhPSBiLmtpbmQpIHtcbiAgICB2YXIgazEgPSB0aGlzLmtpbmQgfCAodGhpcy5sYXlvdXQgPDwgOCk7XG4gICAgdmFyIGsyID0gICAgYi5raW5kIHwgKGIubGF5b3V0IDw8IDgpO1xuICAgIHJldHVybiBrMiAtIGsxO1xuICB9XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGIuZGltcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYi5kaW1zLmxlbmd0aCAtIHRoaXMuZGltcy5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKHRoaXMuZGltc1tpXSAhPSBiLmRpbXNbaV0pXG4gICAgICByZXR1cm4gKHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSkgPyAtMSA6IDE7XG4gIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICBjYXNlIDEwOlxuICBjYXNlIDExOlxuICAgIC8vIEZsb2F0c1xuICAgIHZhciB4LCB5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgeSA9IGIuZGF0YVtpXTtcbiAgICAgIGlmICh4IDwgeSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHggPiB5KVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICh4ICE9IHkpIHtcbiAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgaWYgKHggPT0geCkgcmV0dXJuIDE7XG4gICAgICAgIGlmICh5ID09IHkpIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSs9Mikge1xuICAgICAgLy8gQ2hlY2sgaGlnaGVzdCBiaXRzIGZpcnN0XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPCBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdID4gYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApIDwgKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA+IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMjpcbiAgY2FzZSAzOlxuICBjYXNlIDQ6XG4gIGNhc2UgNTpcbiAgY2FzZSA2OlxuICBjYXNlIDg6XG4gIGNhc2UgOTpcbiAgY2FzZSAxMjpcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA8IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA+IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheV9jXzFfMVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhICAgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZSA9IG5ldyBNbF9CaWdhcnJheSgpXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICBpZih0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKXtcbiAgICBpZigoYXJnIGluc3RhbmNlb2YgQXJyYXkpICYmIGFyZy5sZW5ndGggPT0gMSlcbiAgICAgIGFyZyA9IGFyZ1swXTtcbiAgICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk1sX0JpZ2FycmF5X2NfMV8xLm9mZnNldFwiKTtcbiAgfVxuICBpZiAoYXJnIDwgMCB8fCBhcmcgPj0gdGhpcy5kaW1zWzBdKVxuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFyZztcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgcmV0dXJuIDBcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jb21wYXJlXG5mdW5jdGlvbiBjYW1sX2JhX2NvbXBhcmUoYSxiLHRvdGFsKXtcbiAgcmV0dXJuIGEuY29tcGFyZShiLHRvdGFsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBNbF9CaWdhcnJheV9jXzFfMSwgY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKXtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpO1xuICBpZihjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPSBkYXRhLmxlbmd0aCkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImxlbmd0aCBkb2Vzbid0IG1hdGNoIGRpbXNcIik7XG4gIH1cbiAgaWYobGF5b3V0ID09IDAgJiYgLy8gY19sYXlvdXRcbiAgICAgZGltcy5sZW5ndGggPT0gMSAmJiAvLyBBcnJheTFcbiAgICAgc2l6ZV9wZXJfZWxlbWVudCA9PSAxKSAvLyAxLXRvLTEgbWFwcGluZ1xuICAgIHJldHVybiBuZXcgTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuXG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmKGJhLmxheW91dCA9PSBsYXlvdXQpIHJldHVybiBiYTtcbiAgdmFyIG5ld19kaW1zID0gW11cbiAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZGltXCIpO1xuICByZXR1cm4gYmEuZGltc1tpXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMVxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzEoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMlxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzIoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fM1xuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzMoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9nZW5lcmljKGJhLCBpKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKTtcbiAgcmV0dXJuIGJhLmdldChvZnMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDE2KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICByZXR1cm4gKGIxIHwgKGIyIDw8IDgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgcmV0dXJuICggKGIxIDw8IDApICB8XG4gICAgICAgICAgIChiMiA8PCA4KSAgfFxuICAgICAgICAgICAoYjMgPDwgMTYpIHxcbiAgICAgICAgICAgKGI0IDw8IDI0KSApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzKzQpO1xuICB2YXIgYjYgPSBiYS5nZXQob2ZzKzUpO1xuICB2YXIgYjcgPSBiYS5nZXQob2ZzKzYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzKzcpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbYjgsYjcsYjYsYjUsYjQsYjMsYjIsYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMV0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMyhiYSwgaTAsIGkxLCBpMikge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDE2KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQzMihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzIsICh2ID4+PiAxNikgJiAweGZmKTtcbiAgYmEuc2V0KG9mcyszLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgdiA9IGNhbWxfaW50NjRfdG9fYnl0ZXModik7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCA4OyBpKyspIGJhLnNldChvZnMraSwgdls3LWldKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMShiYSwgaTAsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChpMCksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8yXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8yKGJhLCBpMCwgaTEsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxLGkyXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9maWxsXG5mdW5jdGlvbiBjYW1sX2JhX2ZpbGwoYmEsIHYpIHtcbiAgYmEuZmlsbCh2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2JsaXQoc3JjLCBkc3QpIHtcbiAgaWYgKGRzdC5kaW1zLmxlbmd0aCAhPSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPSBzcmMuZGltc1tpXSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZHN0LmRhdGEuc2V0KHNyYy5kYXRhKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc3ViXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zdWIoYmEsIG9mcywgbGVuKSB7XG4gIHZhciBjaGFuZ2VkX2RpbTtcbiAgdmFyIG11bCA9IDE7XG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSAwO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGJhLmRpbXMubGVuZ3RoIC0gMSk7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSBiYS5kaW1zLmxlbmd0aCAtIDE7XG4gICAgb2ZzID0gb2ZzIC0gMTtcbiAgfVxuICBpZiAob2ZzIDwgMCB8fCBsZW4gPCAwIHx8IChvZnMgKyBsZW4pID4gYmEuZGltc1tjaGFuZ2VkX2RpbV0pe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tpXTtcbiAgbmV3X2RpbXNbY2hhbmdlZF9kaW1dID0gbGVuO1xuICBtdWwgKj0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBtdWwsIChvZnMgKyBsZW4pICogbXVsKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2xpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc2xpY2UoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG51bV9pbmRzID0gdmluZC5sZW5ndGg7XG4gIHZhciBpbmRleCA9IFtdO1xuICB2YXIgc3ViX2RpbXMgPSBbXTtcbiAgdmFyIG9mcztcblxuICBpZiAobnVtX2luZHMgPiBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zbGljZTogdG9vIG1hbnkgaW5kaWNlc1wiKTtcblxuICAvLyBDb21wdXRlIG9mZnNldCBhbmQgY2hlY2sgYm91bmRzXG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gdmluZFtpXTtcbiAgICBmb3IgKDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAxO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZSgwLCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzKTtcbiAgfVxuICBvZnMgPSBiYS5vZmZzZXQoaW5kZXgpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoc3ViX2RpbXMpO1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogc2l6ZV9wZXJfZWxlbWVudCwgKG9mcyArIHNpemUpICogc2l6ZV9wZXJfZWxlbWVudCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgfVxuICB2YXIgbnVtX2VsdHMgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICBuZXdfZGltW2ldID0gdmluZFtpXTtcbiAgICBpZiAobmV3X2RpbVtpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgbnVtX2VsdHMgPSBudW1fZWx0cyAqIG5ld19kaW1baV07XG4gIH1cblxuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIC8vIENoZWNrIHRoYXQgc2l6ZXMgYWdyZWVcbiAgaWYgKG51bV9lbHRzICE9IHNpemUpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogc2l6ZSBtaXNtYXRjaFwiKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW0sIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfc2VyaWFsaXplKHdyaXRlciwgYmEsIHN6KSB7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEuZGltcy5sZW5ndGgpO1xuICB3cml0ZXIud3JpdGUoMzIsIChiYS5raW5kIHwgKGJhLmxheW91dCA8PCA4KSkpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLGJhLmRpbXNbaV0pO1xuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoOCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB3cml0ZXIud3JpdGUoOCwwKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhiYS5nZXQoaSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgaiA9IGJhLmdldChpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMV0pKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsxXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMl0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogNDtcbiAgc3pbMV0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGVzZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlcywgY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6KXtcbiAgdmFyIG51bV9kaW1zID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogd3JvbmcgbnVtYmVyIG9mIGJpZ2FycmF5IGRpbWVuc2lvbnNcIik7XG4gIHZhciB0YWcgPSByZWFkZXIucmVhZDMycygpO1xuICB2YXIga2luZCA9IHRhZyAmIDB4ZmZcbiAgdmFyIGxheW91dCA9ICh0YWcgPj4gOCkgJiAxO1xuICB2YXIgZGltcyA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYoc2l4dHkpIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAvLyAoaW50NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGludDY0ID0gY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KTtcbiAgICAgIGJhLnNldChpLGludDY0KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL0RlcHJlY2F0ZWRcbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2Zyb21cbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9mcm9tKGRhdGExLCBkYXRhMiwganN0eXAsIGtpbmQsIGxheW91dCwgZGltcyl7XG4gIGlmKGRhdGEyIHx8IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkgPT0gMil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9jcmVhdGVfZnJvbTogdXNlIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcIik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKXtcbiAgdmFyIG51bV9lbHRzID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgdmFyIGggPSAwO1xuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDI1NikgbnVtX2VsdHMgPSAyNTY7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDQgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTQpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgOCkgfCAoYmEuZGF0YVtpKzJdIDw8IDE2KSB8IChiYS5kYXRhW2krM10gPDwgMjQpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIHcgPSAwO1xuICAgIHN3aXRjaCAobnVtX2VsdHMgJiAzKSB7XG4gICAgY2FzZSAzOiB3ICA9IGJhLmRhdGFbaSsyXSA8PCAxNjsgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDI6IHcgfD0gYmEuZGF0YVtpKzFdIDw8IDg7ICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMTogdyB8PSBiYS5kYXRhW2krMF07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAxMjgpIG51bV9lbHRzID0gMTI4O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyAyIDw9IGJhLmRhdGEubGVuZ3RoOyBpKz0yKXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDE2KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICBpZiAoKG51bV9lbHRzICYgMSkgIT0gMClcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBudW1fZWx0cyAqPSAyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKXtcbiAgcmV0dXJuIGJhLmRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBnID0gam9vX2dsb2JhbF9vYmplY3Q7XG4gIHZhciBraW5kO1xuICBpZiAodGEgaW5zdGFuY2VvZiBnLkZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5GbG9hdDY0QXJyYXkpIGtpbmQgPSAxO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuSW50OEFycmF5KSBraW5kID0gMjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBnLlVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuSW50MTZBcnJheSkga2luZCA9IDQ7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5VaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5JbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBnLlVpbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXk6IHVuc3VwcG9ydGVkIGtpbmRcIik7XG4gIHJldHVybiBraW5kO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgbGlicmFyeVxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEpzbGliXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfcHVyZV9leHByIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2pzX3B1cmVfZXhwciAoZikgeyByZXR1cm4gZigpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfc2V0IChtdXRhYmxlLCBjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3NldChvLGYsdikgeyBvW2ZdPXY7cmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2dldChvLGYpIHsgcmV0dXJuIG9bZl07IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZGVsZXRlIChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZGVsZXRlKG8sZikgeyBkZWxldGUgb1tmXTsgcmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaW5zdGFuY2VvZiAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19pbnN0YW5jZW9mKG8sYykgeyByZXR1cm4gbyBpbnN0YW5jZW9mIGM7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc190eXBlb2YgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190eXBlb2YobykgeyByZXR1cm4gdHlwZW9mIG87IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19vbl9pZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9qc19vbl9pZSAoKSB7XG4gIHZhciB1YSA9XG4gICAgICBqb29fZ2xvYmFsX29iamVjdC5uYXZpZ2F0b3I/am9vX2dsb2JhbF9vYmplY3QubmF2aWdhdG9yLnVzZXJBZ2VudDpcIlwiO1xuICByZXR1cm4gdWEuaW5kZXhPZihcIk1TSUVcIikgIT0gLTEgJiYgdWEuaW5kZXhPZihcIk9wZXJhXCIpICE9IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lc2NhcGUgY29uc3QgKGNvbnN0KVxudmFyIGNhbWxfanNfcmVnZXhwcyA9IHsgYW1wOi8mL2csIGx0Oi88L2csIHF1b3Q6L1xcXCIvZywgYWxsOi9bJjxcXFwiXS8gfTtcbmZ1bmN0aW9uIGNhbWxfanNfaHRtbF9lc2NhcGUgKHMpIHtcbiAgaWYgKCFjYW1sX2pzX3JlZ2V4cHMuYWxsLnRlc3QocykpIHJldHVybiBzO1xuICByZXR1cm4gcy5yZXBsYWNlKGNhbWxfanNfcmVnZXhwcy5hbXAsIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMubHQsIFwiJmx0O1wiKVxuICAgIC5yZXBsYWNlKGNhbWxfanNfcmVnZXhwcy5xdW90LCBcIiZxdW90O1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19odG1sX2VudGl0aWVzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2pzX2h0bWxfZW50aXRpZXMocykge1xuICB2YXIgZW50aXR5ID0gL14mIz9bMC05YS16QS1aXSs7JC9cbiAgaWYocy5tYXRjaChlbnRpdHkpKVxuICB7XG4gICAgdmFyIHN0ciwgdGVtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcbiAgICB0ZW1wLmlubmVySFRNTD0gcztcbiAgICBzdHI9IHRlbXAudGV4dENvbnRlbnQgfHwgdGVtcC5pbm5lclRleHQ7XG4gICAgdGVtcD1udWxsO1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgZWxzZSB7XG4gICAgY2FtbF9mYWlsd2l0aChcIkludmFsaWQgZW50aXR5IFwiICsgcyk7XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8gRGVidWdnaW5nIGNvbnNvbGVcbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0X2NvbnNvbGUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0X2NvbnNvbGUgKCkge1xuICB2YXIgYyA9IGpvb19nbG9iYWxfb2JqZWN0LmNvbnNvbGU/am9vX2dsb2JhbF9vYmplY3QuY29uc29sZTp7fTtcbiAgdmFyIG0gPSBbXCJsb2dcIiwgXCJkZWJ1Z1wiLCBcImluZm9cIiwgXCJ3YXJuXCIsIFwiZXJyb3JcIiwgXCJhc3NlcnRcIiwgXCJkaXJcIiwgXCJkaXJ4bWxcIixcbiAgICAgICAgICAgXCJ0cmFjZVwiLCBcImdyb3VwXCIsIFwiZ3JvdXBDb2xsYXBzZWRcIiwgXCJncm91cEVuZFwiLCBcInRpbWVcIiwgXCJ0aW1lRW5kXCJdO1xuICBmdW5jdGlvbiBmICgpIHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgaWYgKCFjW21baV1dKSBjW21baV1dPWY7XG4gIHJldHVybiBjO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlKHJlcyAmJiByZXMuam9vX3RyYW1wKXtcbiAgICByZXMgPSByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncyk7XG4gICAgYysrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lX3JldHVyblxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lX3JldHVybihmLGFyZ3MpIHtcbiAgcmV0dXJuIHtqb29fdHJhbXA6Zixqb29fYXJnczphcmdzfTtcbn1cblxuLy9Qcm92aWRlczoganNfcHJpbnRfc3Rkb3V0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24ganNfcHJpbnRfc3Rkb3V0KHMpIHtcbiAgdmFyIHMgPSBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7XG4gIHZhciBnID0gam9vX2dsb2JhbF9vYmplY3Q7XG4gIGlmIChnLnByb2Nlc3MgJiYgZy5wcm9jZXNzLnN0ZG91dCAmJiBnLnByb2Nlc3Muc3Rkb3V0LndyaXRlKSB7XG4gICAgZy5wcm9jZXNzLnN0ZG91dC53cml0ZShzKVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBvdXRwdXQgdGhlIGxhc3QgXFxuIGlmIHByZXNlbnRcbiAgICAvLyBhcyBjb25zb2xlIGxvZ2dpbmcgZGlzcGxheSBhIG5ld2xpbmUgYXQgdGhlIGVuZFxuICAgIGlmKHMuY2hhckNvZGVBdChzLmxlbmd0aCAtIDEpID09IDEwKVxuICAgICAgcyA9IHMuc3Vic3RyKDAscy5sZW5ndGggLSAxICk7XG4gICAgdmFyIHYgPSBnLmNvbnNvbGU7XG4gICAgdiAgJiYgdi5sb2cgJiYgdi5sb2cocyk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGpzX3ByaW50X3N0ZGVyciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIGpzX3ByaW50X3N0ZGVycihzKSB7XG4gIHZhciBzID0gY2FtbF91dGYxNl9vZl91dGY4KHMpO1xuICB2YXIgZyA9IGpvb19nbG9iYWxfb2JqZWN0O1xuICBpZiAoZy5wcm9jZXNzICYmIGcucHJvY2Vzcy5zdGRvdXQgJiYgZy5wcm9jZXNzLnN0ZG91dC53cml0ZSkge1xuICAgIGcucHJvY2Vzcy5zdGRlcnIud3JpdGUocylcbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgb3V0cHV0IHRoZSBsYXN0IFxcbiBpZiBwcmVzZW50XG4gICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICBpZihzLmNoYXJDb2RlQXQocy5sZW5ndGggLSAxKSA9PSAxMClcbiAgICAgIHMgPSBzLnN1YnN0cigwLHMubGVuZ3RoIC0gMSApO1xuICAgIHZhciB2ID0gZy5jb25zb2xlO1xuICAgIHYgJiYgdi5lcnJvciAmJiB2LmVycm9yKHMpO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pc19qc1xuZnVuY3Rpb24gY2FtbF9pc19qcygpIHtcbiAgcmV0dXJuIDE7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsY2FtbF9uYW1lZF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50XG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYoZSBpbnN0YW5jZW9mIEFycmF5KSByZXR1cm4gZTtcbiAgLy9TdGFja19vdmVyZmxvdzogY2hyb21lLCBzYWZhcmlcbiAgaWYoam9vX2dsb2JhbF9vYmplY3QuUmFuZ2VFcnJvclxuICAgICAmJiBlIGluc3RhbmNlb2Ygam9vX2dsb2JhbF9vYmplY3QuUmFuZ2VFcnJvclxuICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC9tYXhpbXVtIGNhbGwgc3RhY2svaSkpXG4gICAgcmV0dXJuIGNhbWxfcmV0dXJuX2V4bl9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93KTtcbiAgLy9TdGFja19vdmVyZmxvdzogZmlyZWZveFxuICBpZihqb29fZ2xvYmFsX29iamVjdC5JbnRlcm5hbEVycm9yXG4gICAgICYmIGUgaW5zdGFuY2VvZiBqb29fZ2xvYmFsX29iamVjdC5JbnRlcm5hbEVycm9yXG4gICAgICYmIGUubWVzc2FnZVxuICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKSlcbiAgICByZXR1cm4gY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3cpO1xuICAvL1dyYXAgRXJyb3IgaW4gSnMuRXJyb3IgZXhjZXB0aW9uXG4gIGlmKGUgaW5zdGFuY2VvZiBqb29fZ2xvYmFsX29iamVjdC5FcnJvciAmJiBjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSlcbiAgICByZXR1cm4gWzAsY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIiksZV07XG4gIC8vZmFsbGJhY2s6IHdyYXBwZWQgaW4gRmFpbHVyZVxuICByZXR1cm4gWzAsY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChTdHJpbmcoZSkpXTtcbn1cblxuLy8gRXhwZXJpbWVudGFsXG4vL1Byb3ZpZGVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICAvL25ldmVyIHJlcmFpc2UgZm9yIGNvbnN0YW50IGV4blxuICBpZighZXhuLmpzX2Vycm9yIHx8IGZvcmNlIHx8IGV4blswXSA9PSAyNDgpIGV4bi5qc19lcnJvciA9IG5ldyBqb29fZ2xvYmFsX29iamVjdC5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uKGV4bikge1xuICBpZihleG4uanNfZXJyb3IpIHsgcmV0dXJuIGV4bi5qc19lcnJvcjsgfVxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBwYXJzaW5nLmMgODk4MyAyMDA4LTA4LTA2IDA5OjM4OjI1WiB4bGVyb3kgJCAqL1xuXG4vKiBUaGUgUERBIGF1dG9tYXRvbiBmb3IgcGFyc2VycyBnZW5lcmF0ZWQgYnkgY2FtbHlhY2MgKi9cblxuLyogVGhlIHB1c2hkb3duIGF1dG9tYXRhICovXG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2xleF9hcnJheVxuZnVuY3Rpb24gY2FtbF9wYXJzZV9lbmdpbmUodGFibGVzLCBlbnYsIGNtZCwgYXJnKVxue1xuICB2YXIgRVJSQ09ERSA9IDI1NjtcblxuICAvL3ZhciBTVEFSVCA9IDA7XG4gIC8vdmFyIFRPS0VOX1JFQUQgPSAxO1xuICAvL3ZhciBTVEFDS1NfR1JPV05fMSA9IDI7XG4gIC8vdmFyIFNUQUNLU19HUk9XTl8yID0gMztcbiAgLy92YXIgU0VNQU5USUNfQUNUSU9OX0NPTVBVVEVEID0gNDtcbiAgLy92YXIgRVJST1JfREVURUNURUQgPSA1O1xuICB2YXIgbG9vcCA9IDY7XG4gIHZhciB0ZXN0c2hpZnQgPSA3O1xuICB2YXIgc2hpZnQgPSA4O1xuICB2YXIgc2hpZnRfcmVjb3ZlciA9IDk7XG4gIHZhciByZWR1Y2UgPSAxMDtcblxuICB2YXIgUkVBRF9UT0tFTiA9IDA7XG4gIHZhciBSQUlTRV9QQVJTRV9FUlJPUiA9IDE7XG4gIHZhciBHUk9XX1NUQUNLU18xID0gMjtcbiAgdmFyIEdST1dfU1RBQ0tTXzIgPSAzO1xuICB2YXIgQ09NUFVURV9TRU1BTlRJQ19BQ1RJT04gPSA0O1xuICB2YXIgQ0FMTF9FUlJPUl9GVU5DVElPTiA9IDU7XG5cbiAgdmFyIGVudl9zX3N0YWNrID0gMTtcbiAgdmFyIGVudl92X3N0YWNrID0gMjtcbiAgdmFyIGVudl9zeW1iX3N0YXJ0X3N0YWNrID0gMztcbiAgdmFyIGVudl9zeW1iX2VuZF9zdGFjayA9IDQ7XG4gIHZhciBlbnZfc3RhY2tzaXplID0gNTtcbiAgdmFyIGVudl9zdGFja2Jhc2UgPSA2O1xuICB2YXIgZW52X2N1cnJfY2hhciA9IDc7XG4gIHZhciBlbnZfbHZhbCA9IDg7XG4gIHZhciBlbnZfc3ltYl9zdGFydCA9IDk7XG4gIHZhciBlbnZfc3ltYl9lbmQgPSAxMDtcbiAgdmFyIGVudl9hc3AgPSAxMTtcbiAgdmFyIGVudl9ydWxlX2xlbiA9IDEyO1xuICB2YXIgZW52X3J1bGVfbnVtYmVyID0gMTM7XG4gIHZhciBlbnZfc3AgPSAxNDtcbiAgdmFyIGVudl9zdGF0ZSA9IDE1O1xuICB2YXIgZW52X2VycmZsYWcgPSAxNjtcblxuICAvLyB2YXIgX3RibF9hY3Rpb25zID0gMTtcbiAgdmFyIHRibF90cmFuc2xfY29uc3QgPSAyO1xuICB2YXIgdGJsX3RyYW5zbF9ibG9jayA9IDM7XG4gIHZhciB0YmxfbGhzID0gNDtcbiAgdmFyIHRibF9sZW4gPSA1O1xuICB2YXIgdGJsX2RlZnJlZCA9IDY7XG4gIHZhciB0YmxfZGdvdG8gPSA3O1xuICB2YXIgdGJsX3NpbmRleCA9IDg7XG4gIHZhciB0YmxfcmluZGV4ID0gOTtcbiAgdmFyIHRibF9naW5kZXggPSAxMDtcbiAgdmFyIHRibF90YWJsZXNpemUgPSAxMTtcbiAgdmFyIHRibF90YWJsZSA9IDEyO1xuICB2YXIgdGJsX2NoZWNrID0gMTM7XG4gIC8vIHZhciBfdGJsX2Vycm9yX2Z1bmN0aW9uID0gMTQ7XG4gIC8vIHZhciBfdGJsX25hbWVzX2NvbnN0ID0gMTU7XG4gIC8vIHZhciBfdGJsX25hbWVzX2Jsb2NrID0gMTY7XG5cbiAgaWYgKCF0YWJsZXMuZGdvdG8pIHtcbiAgICB0YWJsZXMuZGVmcmVkID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfZGVmcmVkXSk7XG4gICAgdGFibGVzLnNpbmRleCA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX3NpbmRleF0pO1xuICAgIHRhYmxlcy5jaGVjayAgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9jaGVja10pO1xuICAgIHRhYmxlcy5yaW5kZXggPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9yaW5kZXhdKTtcbiAgICB0YWJsZXMudGFibGUgID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfdGFibGVdKTtcbiAgICB0YWJsZXMubGVuICAgID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfbGVuXSk7XG4gICAgdGFibGVzLmxocyAgICA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX2xoc10pO1xuICAgIHRhYmxlcy5naW5kZXggPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9naW5kZXhdKTtcbiAgICB0YWJsZXMuZGdvdG8gID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfZGdvdG9dKTtcbiAgfVxuXG4gIHZhciByZXMgPSAwLCBuLCBuMSwgbjIsIHN0YXRlMTtcblxuICAvLyBSRVNUT1JFXG4gIHZhciBzcCA9IGVudltlbnZfc3BdO1xuICB2YXIgc3RhdGUgPSBlbnZbZW52X3N0YXRlXTtcbiAgdmFyIGVycmZsYWcgPSBlbnZbZW52X2VycmZsYWddO1xuXG4gIGV4aXQ6Zm9yICg7Oykge1xuICAgIHN3aXRjaChjbWQpIHtcbiAgICBjYXNlIDA6Ly9TVEFSVDpcbiAgICAgIHN0YXRlID0gMDtcbiAgICAgIGVycmZsYWcgPSAwO1xuICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICBjYXNlIDY6Ly9sb29wOlxuICAgICAgbiA9IHRhYmxlcy5kZWZyZWRbc3RhdGVdO1xuICAgICAgaWYgKG4gIT0gMCkgeyBjbWQgPSByZWR1Y2U7IGJyZWFrOyB9XG4gICAgICBpZiAoZW52W2Vudl9jdXJyX2NoYXJdID49IDApIHsgY21kID0gdGVzdHNoaWZ0OyBicmVhazsgfVxuICAgICAgcmVzID0gUkVBRF9UT0tFTjtcbiAgICAgIGJyZWFrIGV4aXQ7XG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgbGV4ZXIgYW5kIHVwZGF0ZXMgKi9cbiAgICAgIC8qIHN5bWJfc3RhcnQgYW5kIHN5bWJfZW5kICovXG4gICAgY2FzZSAxOi8vVE9LRU5fUkVBRDpcbiAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSB0YWJsZXNbdGJsX3RyYW5zbF9ibG9ja11bYXJnWzBdICsgMV07XG4gICAgICAgIGVudltlbnZfbHZhbF0gPSBhcmdbMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSB0YWJsZXNbdGJsX3RyYW5zbF9jb25zdF1bYXJnICsgMV07XG4gICAgICAgIGVudltlbnZfbHZhbF0gPSAwO1xuICAgICAgfVxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICBjYXNlIDc6Ly90ZXN0c2hpZnQ6XG4gICAgICBuMSA9IHRhYmxlcy5zaW5kZXhbc3RhdGVdO1xuICAgICAgbjIgPSBuMSArIGVudltlbnZfY3Vycl9jaGFyXTtcbiAgICAgIGlmIChuMSAhPSAwICYmIG4yID49IDAgJiYgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PSBlbnZbZW52X2N1cnJfY2hhcl0pIHtcbiAgICAgICAgY21kID0gc2hpZnQ7IGJyZWFrO1xuICAgICAgfVxuICAgICAgbjEgPSB0YWJsZXMucmluZGV4W3N0YXRlXTtcbiAgICAgIG4yID0gbjEgKyBlbnZbZW52X2N1cnJfY2hhcl07XG4gICAgICBpZiAobjEgIT0gMCAmJiBuMiA+PSAwICYmIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT0gZW52W2Vudl9jdXJyX2NoYXJdKSB7XG4gICAgICAgIG4gPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgICBjbWQgPSByZWR1Y2U7IGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGVycmZsYWcgPD0gMCkge1xuICAgICAgICByZXMgPSBDQUxMX0VSUk9SX0ZVTkNUSU9OO1xuICAgICAgICBicmVhayBleGl0O1xuICAgICAgfVxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgZXJyb3IgZnVuY3Rpb24gKi9cbiAgICBjYXNlIDU6Ly9FUlJPUl9ERVRFQ1RFRDpcbiAgICAgIGlmIChlcnJmbGFnIDwgMykge1xuICAgICAgICBlcnJmbGFnID0gMztcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgIHN0YXRlMSA9IGVudltlbnZfc19zdGFja11bc3AgKyAxXTtcbiAgICAgICAgICBuMSA9IHRhYmxlcy5zaW5kZXhbc3RhdGUxXTtcbiAgICAgICAgICBuMiA9IG4xICsgRVJSQ09ERTtcbiAgICAgICAgICBpZiAobjEgIT0gMCAmJiBuMiA+PSAwICYmIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09IEVSUkNPREUpIHtcbiAgICAgICAgICAgIGNtZCA9IHNoaWZ0X3JlY292ZXI7IGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3AgPD0gZW52W2Vudl9zdGFja2Jhc2VdKSByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgICAgICAgICAvKiBUaGUgTUwgY29kZSByYWlzZXMgUGFyc2VfZXJyb3IgKi9cbiAgICAgICAgICAgIHNwLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZW52W2Vudl9jdXJyX2NoYXJdID09IDApIHJldHVybiBSQUlTRV9QQVJTRV9FUlJPUjtcbiAgICAgICAgLyogVGhlIE1MIGNvZGUgcmFpc2VzIFBhcnNlX2Vycm9yICovXG4gICAgICAgIGVudltlbnZfY3Vycl9jaGFyXSA9IC0xO1xuICAgICAgICBjbWQgPSBsb29wOyBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuICAgIGNhc2UgODovL3NoaWZ0OlxuICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gLTE7XG4gICAgICBpZiAoZXJyZmxhZyA+IDApIGVycmZsYWctLTtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuICAgIGNhc2UgOTovL3NoaWZ0X3JlY292ZXI6XG4gICAgICBzdGF0ZSA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICBzcCsrO1xuICAgICAgaWYgKHNwID49IGVudltlbnZfc3RhY2tzaXplXSkge1xuICAgICAgICByZXMgPSBHUk9XX1NUQUNLU18xO1xuICAgICAgICBicmVhayBleGl0O1xuICAgICAgfVxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgICAvKiBUaGUgTUwgY29kZSByZXNpemVzIHRoZSBzdGFja3MgKi9cbiAgICBjYXNlIDI6Ly9TVEFDS1NfR1JPV05fMTpcbiAgICAgIGVudltlbnZfc19zdGFja11bc3AgKyAxXSA9IHN0YXRlO1xuICAgICAgZW52W2Vudl92X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9sdmFsXTtcbiAgICAgIGVudltlbnZfc3ltYl9zdGFydF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9zdGFydF07XG4gICAgICBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX2VuZF07XG4gICAgICBjbWQgPSBsb29wO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDEwOi8vcmVkdWNlOlxuICAgICAgdmFyIG0gPSB0YWJsZXMubGVuW25dO1xuICAgICAgZW52W2Vudl9hc3BdID0gc3A7XG4gICAgICBlbnZbZW52X3J1bGVfbnVtYmVyXSA9IG47XG4gICAgICBlbnZbZW52X3J1bGVfbGVuXSA9IG07XG4gICAgICBzcCA9IHNwIC0gbSArIDE7XG4gICAgICBtID0gdGFibGVzLmxoc1tuXTtcbiAgICAgIHN0YXRlMSA9IGVudltlbnZfc19zdGFja11bc3BdO1xuICAgICAgbjEgPSB0YWJsZXMuZ2luZGV4W21dO1xuICAgICAgbjIgPSBuMSArIHN0YXRlMTtcbiAgICAgIGlmIChuMSAhPSAwICYmIG4yID49IDAgJiYgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PSBzdGF0ZTEpXG4gICAgICAgIHN0YXRlID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgPSB0YWJsZXMuZGdvdG9bbV07XG4gICAgICBpZiAoc3AgPj0gZW52W2Vudl9zdGFja3NpemVdKSB7XG4gICAgICAgIHJlcyA9IEdST1dfU1RBQ0tTXzI7XG4gICAgICAgIGJyZWFrIGV4aXQ7XG4gICAgICB9XG4gICAgICAvLyBGYWxsIHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIHJlc2l6ZXMgdGhlIHN0YWNrcyAqL1xuICAgIGNhc2UgMzovL1NUQUNLU19HUk9XTl8yOlxuICAgICAgcmVzID0gQ09NUFVURV9TRU1BTlRJQ19BQ1RJT047XG4gICAgICBicmVhayBleGl0O1xuICAgICAgLyogVGhlIE1MIGNvZGUgY2FsbHMgdGhlIHNlbWFudGljIGFjdGlvbiAqL1xuICAgIGNhc2UgNDovL1NFTUFOVElDX0FDVElPTl9DT01QVVRFRDpcbiAgICAgIGVudltlbnZfc19zdGFja11bc3AgKyAxXSA9IHN0YXRlO1xuICAgICAgZW52W2Vudl92X3N0YWNrXVtzcCArIDFdID0gYXJnO1xuICAgICAgdmFyIGFzcCA9IGVudltlbnZfYXNwXTtcbiAgICAgIGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgIGlmIChzcCA+IGFzcCkge1xuICAgICAgICAvKiBUaGlzIGlzIGFuIGVwc2lsb24gcHJvZHVjdGlvbi4gVGFrZSBzeW1iX3N0YXJ0IGVxdWFsIHRvIHN5bWJfZW5kLiAqL1xuICAgICAgICBlbnZbZW52X3N5bWJfc3RhcnRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVthc3AgKyAxXTtcbiAgICAgIH1cbiAgICAgIGNtZCA9IGxvb3A7IGJyZWFrO1xuICAgICAgLyogU2hvdWxkIG5vdCBoYXBwZW4gKi9cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFJBSVNFX1BBUlNFX0VSUk9SO1xuICAgIH1cbiAgfVxuICAvLyBTQVZFXG4gIGVudltlbnZfc3BdID0gc3A7XG4gIGVudltlbnZfc3RhdGVdID0gc3RhdGU7XG4gIGVudltlbnZfZXJyZmxhZ10gPSBlcnJmbGFnO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9wYXJzZXJfdHJhY2UgY29uc3Rcbi8vRHVtbXkgZnVuY3Rpb24hXG5mdW5jdGlvbiBjYW1sX3NldF9wYXJzZXJfdHJhY2UoKSB7IHJldHVybiAwOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWI6IGNvZGUgc3BlY2lmaWMgdG8gSnNfb2Zfb2NhbWxcblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Jvb2woeCkgeyByZXR1cm4gISF4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Jvb2wgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19ib29sKHgpIHsgcmV0dXJuICt4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fZmxvYXQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fZmxvYXQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19mbG9hdCh4KSB7IHJldHVybiB4OyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2FycmF5KGEpIHtcbiAgcmV0dXJuIGEuc2xpY2UoMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2FycmF5KGEpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGJbMF0gPSAwO1xuICBmb3IodmFyIGk9MDtpPGxlbjtpKyspIGJbaSsxXSA9IGFbaV07XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9saXN0X29mX2pzX2FycmF5KGEpe1xuICB2YXIgbCA9IDA7XG4gIGZvcih2YXIgaT1hLmxlbmd0aCAtIDE7IGk+PTA7IGktLSl7XG4gICAgdmFyIGUgPSBhW2ldO1xuICAgIGwgPSBbMCxlLGxdO1xuICB9XG4gIHJldHVybiBsXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF90b19qc19hcnJheSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2xpc3RfdG9fanNfYXJyYXkobCl7XG4gIHZhciBhID0gW107XG4gIGZvcig7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGpzX3ByaW50X3N0ZGVyclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdmFyKHgpIHtcbiAgdmFyIHggPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyh4KTtcbiAgLy9DaGVja3MgdGhhdCB4IGhhcyB0aGUgZm9ybSBpZGVudFsuaWRlbnRdKlxuICBpZigheC5tYXRjaCgvXlthLXpBLVpfJF1bYS16QS1aXyQwLTldKihcXC5bYS16QS1aXyRdW2EtekEtWl8kMC05XSopKiQvKSl7XG4gICAganNfcHJpbnRfc3RkZXJyKFwiY2FtbF9qc192YXI6IFxcXCJcIiArIHggKyBcIlxcXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLlwiKTtcbiAgICAvL2pvb19nbG9iYWxfb2JqZWN0LmNvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICByZXR1cm4gZXZhbCh4KTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfY2FsbCAoY29uc3QsIG11dGFibGUsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfY2FsbChmLCBvLCBhcmdzKSB7IHJldHVybiBmLmFwcGx5KG8sIGNhbWxfanNfZnJvbV9hcnJheShhcmdzKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuX2NhbGwgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2Z1bl9jYWxsKGYsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDE6IHJldHVybiBmKCk7XG4gIGNhc2UgMjogcmV0dXJuIGYgKGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBmIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIGNhc2UgODogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdLGFbN10pO1xuICB9XG4gIHJldHVybiBmLmFwcGx5KG51bGwsIGNhbWxfanNfZnJvbV9hcnJheShhKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX21ldGhfY2FsbCAobXV0YWJsZSwgY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX21ldGhfY2FsbChvLCBmLCBhcmdzKSB7XG4gIHJldHVybiBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGYpXS5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19uZXcgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX25ldyhjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMjogcmV0dXJuIG5ldyBjIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIGNhc2UgODogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpOyB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRjtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDA6IHJldHVybiBuZXcgYztcbiAgY2FzZSAxOiByZXR1cm4gbmV3IGMgKGFbMF0pO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7IHJldHVybiBjLmFwcGx5KHRoaXMsIGEpOyB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRjtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmKGxlbiA+IDApe1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgW3VuZGVmaW5lZF0pO1xuICAgIH1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBbYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmKG4gPT0gYXJpdHkgJiYgZi5sZW5ndGggPT0gYXJpdHkpIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLGFyZ3MpO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZixbdGhpcyxhcmdzXSk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkgKyAxKTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpOyB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09IHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcgKHMpIHtyZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczoganNfcHJpbnRfc3RkZXJyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19leHByKHMpIHtcbiAganNfcHJpbnRfc3RkZXJyKFwiY2FtbF9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcHVyZV9qc19leHByIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGpzX3ByaW50X3N0ZGVyclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcHVyZV9qc19leHByIChzKXtcbiAganNfcHJpbnRfc3RkZXJyKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgcmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19vYmplY3QgKG9iamVjdF9saXRlcmFsKVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfb2JqZWN0IChhKSB7XG4gIHZhciBvID0ge307XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwID0gYVtpXTtcbiAgICBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBbMV0pXSA9IHBbMl07XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHBvcnRfdmFyXG5mdW5jdGlvbiBjYW1sX2pzX2V4cG9ydF92YXIgKCl7XG4gIGlmKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZSAmJiBtb2R1bGUuZXhwb3J0cylcbiAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHNcbiAgZWxzZVxuICAgIHJldHVybiBqb29fZ2xvYmFsX29iamVjdDtcbn1cbiIsIi8vUHJvdmlkZXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiB1bml4X2dldHRpbWVvZmRheSAoKSB7XG4gIHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMDtcbn1cblxuLy9Qcm92aWRlczogdW5peF90aW1lXG4vL1JlcXVpcmVzOiB1bml4X2dldHRpbWVvZmRheVxuZnVuY3Rpb24gdW5peF90aW1lICgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IodW5peF9nZXR0aW1lb2ZkYXkgKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2dtdGltZVxuZnVuY3Rpb24gdW5peF9nbXRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRVVENTZWNvbmRzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ0hvdXJzKCksXG4gICAgICAgICAgZC5nZXRVVENEYXRlKCksIGQuZ2V0VVRDTW9udGgoKSwgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICBkLmdldFVUQ0RheSgpLCBkb3ksXG4gICAgICAgICAgZmFsc2UgfCAwIC8qIGZvciBVVEMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlzIGZhbHNlICovKVxufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2xvY2FsdGltZVxuZnVuY3Rpb24gdW5peF9sb2NhbHRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoamFuLmdldFRpbWV6b25lT2Zmc2V0KCksIGp1bC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0U2Vjb25kcygpLCBkLmdldE1pbnV0ZXMoKSwgZC5nZXRIb3VycygpLFxuICAgICAgICAgIGQuZ2V0RGF0ZSgpLCBkLmdldE1vbnRoKCksIGQuZ2V0RnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgZC5nZXREYXkoKSwgZG95LFxuICAgICAgICAgIChkLmdldFRpbWV6b25lT2Zmc2V0KCkgPCBzdGRUaW1lem9uZU9mZnNldCkgfCAwIC8qIGRheWxpZ2h0IHNhdmluZ3MgdGltZSAgZmllbGQuICovKVxufVxuXG4vL1Byb3ZpZGVzOiB1bml4X21rdGltZVxuLy9SZXF1aXJlczogdW5peF9sb2NhbHRpbWVcbmZ1bmN0aW9uIHVuaXhfbWt0aW1lKHRtKXtcbiAgdmFyIGQgPSAobmV3IERhdGUodG1bNl0rMTkwMCx0bVs1XSx0bVs0XSx0bVszXSx0bVsyXSx0bVsxXSkpLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IHVuaXhfbG9jYWx0aW1lKHQpO1xuICByZXR1cm4gQkxPQ0soMCx0LHRtMik7XG59XG5cbi8vUHJvdmlkZXM6IHdpbl9zdGFydHVwIGNvbnN0XG5mdW5jdGlvbiB3aW5fc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IHdpbl9jbGVhbnVwIGNvbnN0XG5mdW5jdGlvbiB3aW5fY2xlYW51cCgpIHt9XG5cbi8vUHJvdmlkZXM6IHdpbl9oYW5kbGVfZmQgY29uc3RcbmZ1bmN0aW9uIHdpbl9oYW5kbGVfZmQoeCkge3JldHVybiB4O31cblxuLy9Qcm92aWRlczogdW5peF9pc2F0dHkgXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciB0dHkgPSByZXF1aXJlKCd0dHknKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eShmaWxlRGVzY3JpcHRvcik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9pbnQgY29uc3QgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nLCBjYW1sX3N0cl9yZXBlYXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2ludChmbXQsIGkpIHtcbiAgaWYgKGNhbWxfanNieXRlc19vZl9zdHJpbmcoZm10KSA9PSBcIiVkXCIpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIraSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7IGlmIChmLnNpZ25lZGNvbnYpIHsgZi5zaWduID0gLTE7IGkgPSAtaTsgfSBlbHNlIGkgPj4+PSAwOyB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIHMubGVuZ3RoO1xuICAgIGlmIChuID4gMCkgcyA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpIHtcbiAgdmFyIGkgPSAwLCBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyksIGJhc2UgPSAxMCwgc2lnbiA9IDE7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSkpIHtcbiAgICBjYXNlIDQ1OiBpKys7IHNpZ24gPSAtMTsgYnJlYWs7XG4gICAgY2FzZSA0MzogaSsrOyBzaWduID0gMTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChpICsgMSA8IGxlbiAmJiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpID09IDQ4KVxuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMSkpIHtcbiAgICBjYXNlIDEyMDogY2FzZSA4ODogYmFzZSA9IDE2OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTExOiBjYXNlIDc5OiBiYXNlID0gIDg7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAgOTg6IGNhc2UgNjY6IGJhc2UgPSAgMjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExNzogY2FzZSA4NTogaSArPSAyOyBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSAgcmV0dXJuIGMgLSA0ODtcbiAgaWYgKGMgPj0gNjUgJiYgYyA8PSA5MCkgIHJldHVybiBjIC0gNTU7XG4gIGlmIChjID49IDk3ICYmIGMgPD0gMTIyKSByZXR1cm4gYyAtIDg3O1xuICByZXR1cm4gLTE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9wYXJzZV9kaWdpdCwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9pbnRfb2Zfc3RyaW5nIChzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSAoaSA8IGxlbik/Y2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTowO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB2YXIgcmVzID0gZDtcbiAgZm9yIChpKys7aTxsZW47aSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIHJlcyA9IGJhc2UgKiByZXMgKyBkO1xuICAgIGlmIChyZXMgPiB0aHJlc2hvbGQpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB9XG4gIGlmIChpICE9IGxlbikgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIC8vIEZvciBiYXNlIGRpZmZlcmVudCBmcm9tIDEwLCB3ZSBleHBlY3QgYW4gdW5zaWduZWQgcmVwcmVzZW50YXRpb24sXG4gIC8vIGhlbmNlIGFueSB2YWx1ZSBvZiAncmVzJyAobGVzcyB0aGFuICd0aHJlc2hvbGQnKSBpcyBhY2NlcHRhYmxlLlxuICAvLyBCdXQgd2UgaGF2ZSB0byBjb252ZXJ0IHRoZSByZXN1bHQgYmFjayB0byBhIHNpZ25lZCBpbnRlZ2VyLlxuICByZXMgPSBzaWduICogcmVzO1xuICBpZiAoKGJhc2UgPT0gMTApICYmICgocmVzIHwgMCkgIT0gcmVzKSlcbiAgICAvKiBTaWduZWQgcmVwcmVzZW50YXRpb24gZXhwZWN0ZWQsIGFsbG93IC0yXihuYml0cy0xKSB0byAyXihuYml0cy0xKSAtIDEgKi9cbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgcmV0dXJuIHJlcyB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbXVsIGNvbnN0XG5mdW5jdGlvbiBjYW1sX211bChhLGIpe1xuICByZXR1cm4gTWF0aC5pbXVsKGEsYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBjYW1sX2Rpdih4LHkpIHtcbiAgaWYgKHkgPT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgcmV0dXJuICh4L3kpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBjYW1sX21vZCh4LHkpIHtcbiAgaWYgKHkgPT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgcmV0dXJuIHgleTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ic3dhcDE2XG5mdW5jdGlvbiBjYW1sX2Jzd2FwMTYoeCkge1xuICByZXR1cm4gKCgoKHggJiAweDAwRkYpIDw8IDgpIHxcbiAgICAgICAgICAgKCh4ICYgMHhGRjAwKSA+PiA4KSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoKCh4ICYgMHgwMDAwMDBGRikgPDwgMjQpIHxcbiAgICAgICAgICAoKHggJiAweDAwMDBGRjAwKSA8PCA4KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMEZGMDAwMCkgPj4+IDgpIHxcbiAgICAgICAgICAoKHggJiAweEZGMDAwMDAwKSA+Pj4gMjQpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYnN3YXBcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYnN3YXAoeCkge1xuICB2YXIgeSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoeCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFt5WzddLCB5WzZdLCB5WzVdLCB5WzRdLCB5WzNdLCB5WzJdLCB5WzFdLCB5WzBdXSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEhhc2h0YmxcblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX3VuaXZfcGFyYW0gbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX3VuaXZfcGFyYW0gKGNvdW50LCBsaW1pdCwgb2JqKSB7XG4gIHZhciBoYXNoX2FjY3UgPSAwO1xuICBmdW5jdGlvbiBoYXNoX2F1eCAob2JqKSB7XG4gICAgbGltaXQgLS07XG4gICAgaWYgKGNvdW50IDwgMCB8fCBsaW1pdCA8IDApIHJldHVybjtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkgJiYgb2JqWzBdID09PSAob2JqWzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKG9ialswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqWzJdKSB8IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgbGltaXQrKzsgaGFzaF9hdXgob2JqKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb3VudCAtLTtcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgb2JqWzBdKSB8IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSBvYmoubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgaGFzaF9hdXggKG9ialtpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKG9iaikpIHtcbiAgICAgIGNvdW50IC0tO1xuICAgICAgc3dpdGNoIChvYmoudCAmIDYpIHtcbiAgICAgIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICAgICAgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhvYmopO1xuICAgICAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgICAgICBmb3IgKHZhciBiID0gb2JqLmMsIGwgPSBjYW1sX21sX2J5dGVzX2xlbmd0aChvYmopLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6IC8qIEFSUkFZICovXG4gICAgICAgIGZvciAodmFyIGEgPSBvYmouYywgbCA9IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKG9iaiksIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGFbaV0pIHwgMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKG9iaikpIHtcbiAgICAgICAgdmFyIGpzYnl0ZXMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG9iaik7XG4gICAgICAgIGZvciAodmFyIGIgPSBqc2J5dGVzLCBsID0ganNieXRlcy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBmb3IgKHZhciBiID0gb2JqLCBsID0gb2JqLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IChvYmp8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGNvdW50IC0tO1xuICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09ICtvYmopIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBjb3VudC0tO1xuICAgICAgdmFyIHAgPSBjYW1sX2ludDY0X3RvX2J5dGVzIChjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKG9iaikpO1xuICAgICAgZm9yICh2YXIgaSA9IDc7IGkgPj0gMDsgaS0tKSBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBwW2ldKSB8IDA7XG4gICAgfSBlbHNlIGlmKG9iaiAmJiBvYmouY2FtbF9jdXN0b20pIHtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGggPSBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKG9iaikgfCAwO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBoKSB8IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGhhc2hfYXV4IChvYmopO1xuICByZXR1cm4gaGFzaF9hY2N1ICYgMHgzRkZGRkZGRjtcbn1cblxuLy9mdW5jdGlvbiBST1RMMzIoeCxuKSB7IHJldHVybiAoKHggPDwgbikgfCAoeCA+Pj4gKDMyLW4pKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQoaCxkKSB7XG4gIGQgPSBjYW1sX211bChkLCAweGNjOWUyZDUxfDApO1xuICBkID0gKChkIDw8IDE1KSB8IChkID4+PiAoMzItMTUpKSk7IC8vIFJPVEwzMihkLCAxNSk7XG4gIGQgPSBjYW1sX211bChkLCAweDFiODczNTkzKTtcbiAgaCBePSBkO1xuICBoID0gKChoIDw8IDEzKSB8IChoID4+PiAoMzItMTMpKSk7ICAgLy9ST1RMMzIoaCwgMTMpO1xuICByZXR1cm4gKCgoaCArIChoIDw8IDIpKXwwKSArICgweGU2NTQ2YjY0fDApKXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9maW5hbChoKSB7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIGggPSBjYW1sX211bCAoaCwgMHg4NWViY2E2YnwwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsIChoLCAweGMyYjJhZTM1fDApO1xuICBoIF49IGggPj4+IDE2O1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2hhc2hfbWl4X2ludDY0XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0IChoLCB2MCkge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9pbnQ2NChoLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHYwKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9sbzMyLCBjYW1sX2ludDY0X2hpMzJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50NjQgKGgsIHYpIHtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfbG8zMih2KSk7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2hpMzIodikpO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzLmNoYXJDb2RlQXQoaSlcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDgpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNilcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gcy5jaGFyQ29kZUF0KGkrMikgPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzLmNoYXJDb2RlQXQoaSsxKSA8PCA4O1xuICBjYXNlIDE6XG4gICAgdyB8PSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gc1tpXVxuICAgICAgfCAoc1tpKzFdIDw8IDgpXG4gICAgICB8IChzW2krMl0gPDwgMTYpXG4gICAgICB8IChzW2krM10gPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzW2krMl0gPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzW2krMV0gPDwgODtcbiAgY2FzZSAxOiB3IHw9IHNbaV07XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlcyhoLCB2KSB7XG4gIHN3aXRjaCAodi50ICYgNikge1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMgKHYpO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgaCA9IGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCB2LmMpO1xuICAgIGJyZWFrO1xuICBjYXNlIDI6IC8qIEFSUkFZICovXG4gICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIHYuYyk7XG4gIH1cbiAgcmV0dXJuIGhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQsIGNhbWxfaGFzaF9taXhfc3RyaW5nLCBjYW1sX2hhc2hfbWl4X2J5dGVzLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9oYXNoIChjb3VudCwgbGltaXQsIHNlZWQsIG9iaikge1xuICB2YXIgcXVldWUsIHJkLCB3ciwgc3osIG51bSwgaCwgdiwgaSwgbGVuO1xuICBzeiA9IGxpbWl0O1xuICBpZiAoc3ogPCAwIHx8IHN6ID4gMjU2KSBzeiA9IDI1NjtcbiAgbnVtID0gY291bnQ7XG4gIGggPSBzZWVkO1xuICBxdWV1ZSA9IFtvYmpdOyByZCA9IDA7IHdyID0gMTtcbiAgd2hpbGUgKHJkIDwgd3IgJiYgbnVtID4gMCkge1xuICAgIHYgPSBxdWV1ZVtyZCsrXTtcbiAgICBpZiAodiAmJiB2LmNhbWxfY3VzdG9tKXtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50IChoLCBoaCk7XG4gICAgICAgIG51bSAtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKHZbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHZbMl0pO1xuICAgICAgICBudW0tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdGFnKTtcbiAgICAgICAgZm9yIChpID0gMSwgbGVuID0gdi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgcXVldWVbd3IrK10gPSB2W2ldO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodnwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHYrdisxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodiA9PT0gK3YpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLHYpO1xuICAgICAgbnVtLS07XG4gICAgfVxuICB9XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfdGFnKGEpe1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKGEpKSByZXR1cm4gMjUyOyAvLyBzdHJpbmdfdGFnXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGEpKSByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIEFycmF5ICYmIGFbMF0gPT09IChhWzBdPj4+MCkgJiYgYVswXSA8PSAyNTUpIHtcbiAgICAvLyBMb29rIGxpa2UgYW4gb2NhbWwgYmxvY2tcbiAgICB2YXIgdGFnID0gYVswXSB8IDA7XG4gICAgLy8gaWdub3JlIGRvdWJsZV9hcnJheV90YWcgYmVjYXVzZSB3ZSBjYW5ub3QgYWNjdXJhdGVseSBzZXRcbiAgICAvLyB0aGlzIHRhZyB3aGVuIHdlIGNyZWF0ZSBhbiBhcnJheSBvZiBmbG9hdC5cbiAgICByZXR1cm4gKHRhZyA9PSAyNTQpPzA6dGFnXG4gIH1cbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIFN0cmluZykgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgTnVtYmVyKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYSAmJiBhLmNhbWxfY3VzdG9tKSByZXR1cm4gMTI1NTsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKGEgJiYgYS5jb21wYXJlKSByZXR1cm4gMTI1NjsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIDEyNDc7IC8vIGxpa2UgY2xvc3VyZV90YWcgKDI0NylcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpe1xuICByZXR1cm4gY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXS5jb21wYXJlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKG51bSwgY3VzdG9tLCBzd2FwLCB0b3RhbCkge1xuICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShjdXN0b20pO1xuICBpZihjb21wKSB7XG4gICAgdmFyIHggPSAoc3dhcCA+IDApP2NvbXAoY3VzdG9tLG51bSx0b3RhbCk6Y29tcChudW0sY3VzdG9tLHRvdGFsKTtcbiAgICBpZih0b3RhbCAmJiB4ICE9IHgpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZigreCAhPSAreCkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZigoeCB8IDApICE9IDApIHJldHVybiAoeCB8IDApOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbCAoY29uc3QsIGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW50X2NvbXBhcmUsIGNhbWxfc3RyaW5nX2NvbXBhcmUsIGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20sIGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRvdGFsKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBmb3IoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYSA9PSAyNTApIHsgYSA9IGFbMV07IGNvbnRpbnVlIH1cblxuICAgICAgdmFyIHRhZ19iID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYik7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYiA9PSAyNTApIHsgYiA9IGJbMV07IGNvbnRpbnVlIH1cblxuICAgICAgLy8gdGFncyBhcmUgZGlmZmVyZW50XG4gICAgICBpZih0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYodGFnX2EgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19iID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYSwgYiwgLTEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnX2IgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19hID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYiwgYSwgMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGFnX2EgPCB0YWdfYik/LTE6MTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCh0YWdfYSl7XG4gICAgICAgIC8vIDI0NjogTGF6eV90YWcgaGFuZGxlZCBiZWxsb3dcbiAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgIHZhciB4ID0gY2FtbF9pbnRfY29tcGFyZShhWzJdLCBiWzJdKTtcbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDk6IC8vIEluZml4XG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkIHRhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRm9yd2FyZF90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICB2YXIgeCA9IGNhbWxfYnl0ZXNfY29tcGFyZShhLCBiKTtcbiAgICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MzogLy8gRG91YmxlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBDdXN0b21fdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSk7XG4gICAgICAgIGlmKGNvbXAgIT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKXtcbiAgICAgICAgICByZXR1cm4gKGEuY2FtbF9jdXN0b208Yi5jYW1sX2N1c3RvbSk/LTE6MTtcbiAgICAgICAgfVxuICAgICAgICBpZighY29tcClcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgdmFyIHggPSBjb21wKGEsYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU2OiAvLyBjb21wYXJlIGZ1bmN0aW9uXG4gICAgICAgIHZhciB4ID0gYS5jb21wYXJlKGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpIHsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDA6IC8vIE51bWJlclxuICAgICAgICBhID0gK2E7XG4gICAgICAgIGIgPSArYjtcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgLy8gSGVyZSB3ZSBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAgICAgLy8gMS4gSmF2YVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMy4gSmF2YVNjcmlwdCBvYmplY3QgdGhhbiBjYW5ub3QgYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAvLyAoMikgd2lsbCBjb2VyY2UgdG8gcHJpbWl0aXZlIHR5cGVzIHVzaW5nIFt2YWx1ZU9mXSBvciBbdG9TdHJpbmddXG4gICAgICAgIC8vICgyKSBhbmQgKDMpLCBhZnRlciBldmVudHVhbCBjb2VyY2lvblxuICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAvLyAtIGlmIGEgb3IgYiBhcmUgbm90IHN0cmluZ3MsIGNvbnZlcnQgYSBhbmQgYiB0byBudW1iZXJcbiAgICAgICAgLy8gICBhbmQgYXBwbHkgc3RhbmRhcmQgY29tcGFyaXNvblxuICAgICAgICAvL1xuICAgICAgICAvLyBFeGNlcHRpb246IGAhPWAgd2lsbCBub3QgY29lcmNlL2NvbnZlcnQgaWYgYm90aCBhIGFuZCBiIGFyZSBvYmplY3RzXG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTE6IC8vIEphdmFTY3JpcHQgU3ltYm9sLCBubyBvcmRlcmluZy5cbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTI6IC8vIG9jYW1sIHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGEpO1xuICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGEudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGIgPSBiLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ2OiAvLyBMYXp5X3RhZ1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheVxuICAgICAgZGVmYXVsdDogLy8gQmxvY2sgd2l0aCBvdGhlciB0YWdcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gKGEubGVuZ3RoIDwgYi5sZW5ndGgpPy0xOjE7XG4gICAgICAgIGlmIChhLmxlbmd0aCA+IDEpIHN0YWNrLnB1c2goYSwgYiwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHJldHVybiAwO1xuICAgIHZhciBpID0gc3RhY2sucG9wKCk7XG4gICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICBpZiAoaSArIDEgPCBhLmxlbmd0aCkgc3RhY2sucHVzaChhLCBiLCBpICsgMSk7XG4gICAgYSA9IGFbaV07XG4gICAgYiA9IGJbaV07XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlIChhLCBiKSB7IHJldHVybiBjYW1sX2NvbXBhcmVfdmFsIChhLCBiLCB0cnVlKTsgfVxuLy9Qcm92aWRlczogY2FtbF9pbnRfY29tcGFyZSBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2ludF9jb21wYXJlIChhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuICgtMSk7IGlmIChhID09IGIpIHJldHVybiAwOyByZXR1cm4gMTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9lcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgIT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcmVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcmVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVydGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3NlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPD0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc3RoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzdGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPCAwKTsgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9DYW1saW50ZXJuYWxNb2RfaW5pdF9tb2Rcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfQ2FtbGludGVybmFsTW9kX2luaXRfbW9kKGxvYyxzaGFwZSkge1xuICBmdW5jdGlvbiB1bmRlZl9tb2R1bGUgKF94KSB7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZyhjYW1sX2dsb2JhbF9kYXRhLlVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlLCBsb2MpO1xuICB9XG4gIGZ1bmN0aW9uIGxvb3AgKHNoYXBlLHN0cnVjdCxpZHgpe1xuICAgIGlmKHR5cGVvZiBzaGFwZSA9PT0gXCJudW1iZXJcIilcbiAgICAgIHN3aXRjaChzaGFwZSl7XG4gICAgICBjYXNlIDA6Ly9mdW5jdGlvblxuICAgICAgICBzdHJ1Y3RbaWR4XT17ZnVuOnVuZGVmX21vZHVsZX07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOi8vbGF6eVxuICAgICAgICBzdHJ1Y3RbaWR4XT1bMjQ2LCB1bmRlZl9tb2R1bGVdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6Ly9jYXNlIDI6Ly9jbGFzc1xuICAgICAgICBzdHJ1Y3RbaWR4XT1bXTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBzd2l0Y2goc2hhcGVbMF0pe1xuICAgICAgY2FzZSAwOi8vbW9kdWxlXG4gICAgICAgIHN0cnVjdFtpZHhdID0gWzBdO1xuICAgICAgICBmb3IodmFyIGk9MTtpPHNoYXBlWzFdLmxlbmd0aDtpKyspXG4gICAgICAgICAgbG9vcChzaGFwZVsxXVtpXSxzdHJ1Y3RbaWR4XSxpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0Oi8vY2FzZSAxOi8vVmFsdWVcbiAgICAgICAgc3RydWN0W2lkeF0gPSBzaGFwZVsxXTtcbiAgICAgIH1cbiAgfVxuICB2YXIgcmVzID0gW107XG4gIGxvb3Aoc2hhcGUscmVzLDApO1xuICByZXR1cm4gcmVzWzBdXG59XG4vL1Byb3ZpZGVzOiBjYW1sX0NhbWxpbnRlcm5hbE1vZF91cGRhdGVfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF9DYW1saW50ZXJuYWxNb2RfdXBkYXRlX21vZChzaGFwZSxyZWFsLHgpIHtcbiAgaWYodHlwZW9mIHNoYXBlID09PSBcIm51bWJlclwiKVxuICAgIHN3aXRjaChzaGFwZSl7XG4gICAgY2FzZSAwOi8vZnVuY3Rpb25cbiAgICBjYXNlIDE6Ly9sYXp5XG4gICAgY2FzZSAyOi8vY2xhc3NcbiAgICBkZWZhdWx0OlxuICAgICAgY2FtbF91cGRhdGVfZHVtbXkocmVhbCx4KTtcbiAgICB9XG4gIGVsc2VcbiAgICBzd2l0Y2goc2hhcGVbMF0pe1xuICAgIGNhc2UgMDovL21vZHVsZVxuICAgICAgZm9yKHZhciBpPTE7aTxzaGFwZVsxXS5sZW5ndGg7aSsrKVxuICAgICAgICBjYW1sX0NhbWxpbnRlcm5hbE1vZF91cGRhdGVfbW9kKHNoYXBlWzFdW2ldLHJlYWxbaV0seFtpXSk7XG4gICAgICBicmVhaztcbiAgICAgIC8vY2FzZSAxOi8vVmFsdWVcbiAgICBkZWZhdWx0OlxuICAgIH07XG4gIHJldHVybiAwXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkgKHgsIHkpIHtcbiAgaWYoIHR5cGVvZiB5PT09XCJmdW5jdGlvblwiICkgeyB4LmZ1biA9IHk7IHJldHVybiAwOyB9XG4gIGlmKCB5LmZ1biApIHsgeC5mdW4gPSB5LmZ1bjsgcmV0dXJuIDA7IH1cbiAgdmFyIGkgPSB5Lmxlbmd0aDsgd2hpbGUgKGktLSkgeFtpXSA9IHlbaV07IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19ibG9jayBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9pc19ibG9jayAoeCkgeyByZXR1cm4gKyh4IGluc3RhbmNlb2YgQXJyYXkpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdGFnICh4KSB7XG4gIGlmICgoeCBpbnN0YW5jZW9mIEFycmF5KSAmJiB4WzBdID09ICh4WzBdID4+PiAwKSlcbiAgICByZXR1cm4geFswXVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmICgoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fCB0eXBlb2YgeCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIDI0N1xuICBlbHNlIGlmICh4ICYmIHguY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDI1NVxuICBlbHNlXG4gICAgcmV0dXJuIDEwMDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3RhZyAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfdGFnICh4LCB0YWcpIHsgeFswXSA9IHRhZzsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2Jsb2NrIGNvbnN0IChjb25zdCxjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2Jsb2NrICh0YWcsIHNpemUpIHtcbiAgdmFyIG8gPSBuZXcgQXJyYXkoc2l6ZSsxKTtcbiAgb1swXT10YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSB0YWc7XG4gIGZvcih2YXIgaSA9IDE7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2R1cCBtdXRhYmxlIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCAoeCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdHJ1bmNhdGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX29ial90cnVuY2F0ZSAoeCwgcykge1xuICBpZiAoczw9MCB8fCBzICsgMSA+IHgubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJPYmoudHJ1bmNhdGVcIik7XG4gIGlmICh4Lmxlbmd0aCAhPSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkIChiLHYpIHtcbiAgYlswXT0yNTA7XG4gIGJbMV09djtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkICh2KSB7IHJldHVybiBbMjUwLCB2XTsgfVxuXG4vLy8vLy8vLy8vLy8vIENhbWxpbnRlcm5hbE9PXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIGNvbnN0XG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAob2ZzID09PSBudWxsKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJheSBpcyBub3Qgc3BhcnNlXG4gICAgZm9yICh2YXIgaSA9IGNhbWxfbWV0aG9kX2NhY2hlLmxlbmd0aDsgaSA8IGNhY2hlaWQ7IGkrKylcbiAgICAgIGNhbWxfbWV0aG9kX2NhY2hlW2ldID0gMDtcbiAgfSBlbHNlIGlmIChtZXRoc1tvZnNdID09PSB0YWcpIHtcbiAgICByZXR1cm4gbWV0aHNbb2ZzIC0gMV07XG4gIH1cbiAgdmFyIGxpID0gMywgaGkgPSBtZXRoc1sxXSAqIDIgKyAxLCBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkraGkpID4+IDEpIHwgMTtcbiAgICBpZiAodGFnIDwgbWV0aHNbbWkrMV0pIGhpID0gbWktMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSArIDE7XG4gIC8qIHJldHVybiAwIGlmIHRhZyBpcyBub3QgdGhlcmUgKi9cbiAgcmV0dXJuICh0YWcgPT0gbWV0aHNbbGkrMV0gPyBtZXRoc1tsaV0gOiAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQgKGIpIHtcbiAgYlsyXT1jYW1sX29vX2xhc3RfaWQrKztcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnJlc2hfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9mcmVzaF9vb19pZCgpIHtcbiAgcmV0dXJuIGNhbWxfb29fbGFzdF9pZCsrO1xufVxuIiwiLy8vLy8vLy8vIEJJR1NUUklOR1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2JpZ3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYmlnc3RyaW5nKGgsIGJzKSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLGJzLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIG11dGFibGVcbmZ1bmN0aW9uIGJpZ3N0cmluZ190b19hcnJheV9idWZmZXIoYnMpIHtcbiAgcmV0dXJuIGJzLmRhdGEuYnVmZmVyXG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ190b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkoYnMpIHtcbiAgcmV0dXJuIGJzLmRhdGFcbn1cblxuLy9Qcm92aWRlczogYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXIoYWIpIHtcbiAgdmFyIHRhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LlVpbnQ4QXJyYXkoYWIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKDEyLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXkoYmEpIHtcbiAgdmFyIHRhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LlVpbnQ4QXJyYXkoYmEuYnVmZmVyLCBiYS5ieXRlT2Zmc2V0LCBiYS5sZW5ndGggKiBiYS5CWVRFU19QRVJfRUxFTUVOVCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoMTIsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX21lbWNtcFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfbWVtY21wKHMxLCBwb3MxLCBzMiwgcG9zMiwgbGVuKXtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhID0gY2FtbF9iYV9nZXRfMShzMSxwb3MxICsgaSk7XG4gICAgdmFyIGIgPSBjYW1sX2JhX2dldF8xKHMyLHBvczIgKyBpKTtcbiAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmEoYmExLCBwb3MxLCBiYTIsIHBvczIsIGxlbil7XG4gIGlmKDEyICE9IGJhMS5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmKDEyICE9IGJhMi5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmKG9mczEgKyBsZW4gPiBiYTEuZGF0YS5sZW5ndGgpe1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICBpZihvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKXtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gYmExLmRhdGEuc3ViYXJyYXkob2ZzMSxvZnMxK2xlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSxwb3MyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmEoc3RyMSwgcG9zMSwgYmEyLCBwb3MyLCBsZW4pe1xuICBpZigxMiAhPSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYobGVuID09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmKHBvczEgKyBsZW4gPiBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyMSkpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYob2ZzMiArIGxlbiA+IGJhMi5kYXRhLmxlbmd0aCkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBjYW1sX2FycmF5X29mX3N0cmluZyhzdHIxKS5zbGljZShwb3MxLHBvczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2Usb2ZzMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYnl0ZXNfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfYmlnc3RyaW5nX2JsaXRfYnl0ZXNfdG9fYmEoc3RyMSwgcG9zMSwgYmEyLCBwb3MyLCBsZW4pe1xuICBpZigxMiAhPSBiYTIua2luZClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYobGVuID09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMiA9IGJhMi5vZmZzZXQocG9zMik7XG4gIGlmKHBvczEgKyBsZW4gPiBjYW1sX21sX2J5dGVzX2xlbmd0aChzdHIxKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICBpZihvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGNhbWxfYXJyYXlfb2ZfYnl0ZXMoc3RyMSkuc2xpY2UocG9zMSxwb3MxICsgbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLG9mczIpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXMoYmExLCBwb3MxLCBieXRlczIsIHBvczIsIGxlbil7XG4gIGlmKDEyICE9IGJhMS5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZihsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMxID0gYmExLm9mZnNldChwb3MxKTtcbiAgaWYob2ZzMSArIGxlbiA+IGJhMS5kYXRhLmxlbmd0aCl7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmKHBvczIgKyBsZW4gPiBjYW1sX21sX2J5dGVzX2xlbmd0aChieXRlczIpKXtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gYmExLmRhdGEuc2xpY2Uob2ZzMSwgb2ZzMStsZW4pO1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShzbGljZSksIDAsIGJ5dGVzMiwgcG9zMiwgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFja3RyYWNlX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYWNrdHJhY2Vfc3RhdHVzICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JlY29yZF9iYWNrdHJhY2UgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QoKSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90ICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdDogaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZShleG4sIGJ0KSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayAoKSB7IHJldHVybiBbMF07IH1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdCgpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiKTtcbn1cbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0aXZlIENhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgKi9cbi8qICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgICAgKi9cbi8qICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2l0aCAgICAgKi9cbi8qICB0aGUgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSAuLi9MSUNFTlNFLiAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyogJElkOiBsZXhpbmcuYyA2MDQ1IDIwMDQtMDEtMDEgMTY6NDI6NDNaIGRvbGlnZXogJCAqL1xuXG4vKiBUaGUgdGFibGUtZHJpdmVuIGF1dG9tYXRvbiBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4LiAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9sZXhfYXJyYXkocykge1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTtcbiAgdmFyIGwgPSBzLmxlbmd0aCAvIDI7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKylcbiAgICBhW2ldID0gKHMuY2hhckNvZGVBdCgyICogaSkgfCAocy5jaGFyQ29kZUF0KDIgKiBpICsgMSkgPDwgOCkpIDw8IDE2ID4+IDE2O1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheSwgY2FtbF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSByZXR1cm4gLWJhc2UtMTtcbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qIE5ldyBsZXhlciBlbmdpbmUsIHdpdGggbWVtb3J5IG9mIHBvc2l0aW9ucyAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl9tZW0ocywgaSwgbWVtLCBjdXJyX3Bvcykge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gY3Vycl9wb3M7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX3RhZyhzLCBpLCBtZW0pIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybiA7XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSAtMTtcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX25ld19sZXhfZW5naW5lKHRibCwgc3RhcnRfc3RhdGUsIGxleGJ1Zikge1xuICB2YXIgbGV4X2J1ZmZlciA9IDI7XG4gIHZhciBsZXhfYnVmZmVyX2xlbiA9IDM7XG4gIHZhciBsZXhfc3RhcnRfcG9zID0gNTtcbiAgdmFyIGxleF9jdXJyX3BvcyA9IDY7XG4gIHZhciBsZXhfbGFzdF9wb3MgPSA3O1xuICB2YXIgbGV4X2xhc3RfYWN0aW9uID0gODtcbiAgdmFyIGxleF9lb2ZfcmVhY2hlZCA9IDk7XG4gIHZhciBsZXhfbWVtID0gMTA7XG4gIHZhciBsZXhfYmFzZSA9IDE7XG4gIHZhciBsZXhfYmFja3RyayA9IDI7XG4gIHZhciBsZXhfZGVmYXVsdCA9IDM7XG4gIHZhciBsZXhfdHJhbnMgPSA0O1xuICB2YXIgbGV4X2NoZWNrID0gNTtcbiAgdmFyIGxleF9iYXNlX2NvZGUgPSA2O1xuICB2YXIgbGV4X2JhY2t0cmtfY29kZSA9IDc7XG4gIHZhciBsZXhfZGVmYXVsdF9jb2RlID0gODtcbiAgdmFyIGxleF90cmFuc19jb2RlID0gOTtcbiAgdmFyIGxleF9jaGVja19jb2RlID0gMTA7XG4gIHZhciBsZXhfY29kZSA9IDExO1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG4gIGlmICghdGJsLmxleF9kZWZhdWx0X2NvZGUpIHtcbiAgICB0YmwubGV4X2Jhc2VfY29kZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VfY29kZV0pO1xuICAgIHRibC5sZXhfYmFja3Rya19jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya19jb2RlXSk7XG4gICAgdGJsLmxleF9jaGVja19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja19jb2RlXSk7XG4gICAgdGJsLmxleF90cmFuc19jb2RlID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc19jb2RlXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0X2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0X2NvZGVdKTtcbiAgfVxuICBpZiAodGJsLmxleF9jb2RlID09IG51bGwpIHRibC5sZXhfY29kZSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcodGJsW2xleF9jb2RlXSk7XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2Jhc2VfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgcmV0dXJuIC1iYXNlLTE7XG4gICAgfVxuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIHZhciBwY19vZmYgPSB0YmwubGV4X2JhY2t0cmtfY29kZVtzdGF0ZV07XG4gICAgICBjYW1sX2xleF9ydW5fdGFnKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0pO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICB2YXIgcHN0YXRlID0gc3RhdGUgO1xuICAgIGlmICh0YmwubGV4X2NoZWNrW2Jhc2UgKyBjXSA9PSBzdGF0ZSlcbiAgICAgIHN0YXRlID0gdGJsLmxleF90cmFuc1tiYXNlICsgY107XG4gICAgZWxzZVxuICAgICAgc3RhdGUgPSB0YmwubGV4X2RlZmF1bHRbc3RhdGVdO1xuICAgIC8qIElmIG5vIHRyYW5zaXRpb24gb24gdGhpcyBjaGFyLCByZXR1cm4gdG8gbGFzdCBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICBpZiAoc3RhdGUgPCAwKSB7XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSA9IGxleGJ1ZltsZXhfbGFzdF9wb3NdO1xuICAgICAgaWYgKGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID09IC0xKVxuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwibGV4aW5nOiBlbXB0eSB0b2tlblwiKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dO1xuICAgIH1lbHNle1xuICAgICAgLyogSWYgc29tZSB0cmFuc2l0aW9uLCBnZXQgYW5kIHBlcmZvcm0gbWVtb3J5IG1vdmVzICovXG4gICAgICB2YXIgYmFzZV9jb2RlID0gdGJsLmxleF9iYXNlX2NvZGVbcHN0YXRlXSwgcGNfb2ZmO1xuICAgICAgaWYgKHRibC5sZXhfY2hlY2tfY29kZVtiYXNlX2NvZGUgKyBjXSA9PSBwc3RhdGUpXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfdHJhbnNfY29kZVtiYXNlX2NvZGUgKyBjXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF9kZWZhdWx0X2NvZGVbcHN0YXRlXTtcbiAgICAgIGlmIChwY19vZmYgPiAwKVxuICAgICAgICBjYW1sX2xleF9ydW5fbWVtXG4gICAgICAodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSwgbGV4YnVmW2xleF9jdXJyX3Bvc10pO1xuICAgICAgLyogRXJhc2UgdGhlIEVPRiBjb25kaXRpb24gb25seSBpZiB0aGUgRU9GIHBzZXVkby1jaGFyYWN0ZXIgd2FzXG4gICAgICAgICBjb25zdW1lZCBieSB0aGUgYXV0b21hdG9uIChpLmUuIHRoZXJlIHdhcyBubyBiYWNrdHJhY2sgYWJvdmUpXG4gICAgICAqL1xuICAgICAgaWYgKGMgPT0gMjU2KSBsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9IDA7XG4gICAgfVxuICB9XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEFycmF5XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfc3ViIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc3ViIChhLCBpLCBsZW4pIHtcbiAgdmFyIGEyID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYTJbMF09MDtcbiAgZm9yKHZhciBpMiA9IDEsIGkxPSBpKzE7IGkyIDw9IGxlbjsgaTIrKyxpMSsrICl7XG4gICAgYTJbaTJdPWFbaTFdO1xuICB9XG4gIHJldHVybiBhMjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9hcHBlbmQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9hcHBlbmQoYTEsIGEyKSB7XG4gIHZhciBsMSA9IGExLmxlbmd0aCwgbDIgPSBhMi5sZW5ndGg7XG4gIHZhciBsID0gbDErbDItMVxuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgYVswXSA9IDA7XG4gIHZhciBpID0gMSxqID0gMTtcbiAgZm9yKDtpPGwxO2krKykgYVtpXT1hMVtpXTtcbiAgZm9yKDtpPGw7aSsrLGorKykgYVtpXT1hMltqXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfY29uY2F0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfY29uY2F0KGwpIHtcbiAgdmFyIGEgPSBbMF07XG4gIHdoaWxlIChsICE9PSAwKSB7XG4gICAgdmFyIGIgPSBsWzFdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykgYS5wdXNoKGJbaV0pO1xuICAgIGwgPSBsWzJdO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfc2V0IChhcnJheSwgaW5kZXgsIG5ld3ZhbCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGFycmF5W2luZGV4KzFdPW5ld3ZhbDsgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZ2V0IG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZ2V0IChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXgrMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZmlsbFxuZnVuY3Rpb24gY2FtbF9hcnJheV9maWxsKGFycmF5LCBvZnMsIGxlbiwgdil7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgYXJyYXlbb2ZzK2krMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoZWNrX2JvdW5kIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2NoZWNrX2JvdW5kIChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdmVjdCBjb25zdCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX3ZlY3QgKGxlbiwgaW5pdCkge1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IGluaXQ7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfZmxvYXRfdmVjdCBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfZmxvYXRfdmVjdChsZW4pe1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MjU0O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gMDtcbiAgcmV0dXJuIGJcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9jcmVhdGUgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9mbG9hdGFycmF5X2NyZWF0ZShsZW4pe1xuICBpZiAobGVuIDwgMCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgbGVuID0gbGVuICsgMSB8IDA7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbik7XG4gIGJbMF09MjU0O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gMDtcbiAgcmV0dXJuIGJcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBXZWFrIEFQSSwgYnV0IHdpdGhvdXQgdGhlIHdlYWsgc2VtYW50aWNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG4vL1ZlcnNpb246IDwgNC4wM1xudmFyIGNhbWxfZXBoZV9rZXlfb2Zmc2V0ID0gMlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9WZXJzaW9uOiA+PSA0LjAzXG52YXIgY2FtbF9lcGhlX2tleV9vZmZzZXQgPSAzXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuLy9WZXJzaW9uOiA+PSA0LjAzXG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3dlYWtfY3JlYXRlIChuKSB7XG4gIGlmIChuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuY3JlYXRlXCIpO1xuICB2YXIgeCA9IFsyNTEsXCJjYW1sX2VwaGVfbGlzdF9oZWFkXCJdO1xuICB4Lmxlbmd0aCA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19zZXQoeCwgaSwgdikge1xuICBpZihpIDwgMCB8fCBjYW1sX2VwaGVfa2V5X29mZnNldCArIGkgPj0geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuc2V0XCIpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSB2O1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19nZXQoeCwgaSkge1xuICBpZihpIDwgMCB8fCBjYW1sX2VwaGVfa2V5X29mZnNldCArIGkgPj0geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuZ2V0X2tleVwiKTtcbiAgcmV0dXJuICh4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaSBdPT09dW5kZWZpbmVkKT8wOnhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19nZXRfY29weVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2dldCxjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9vYmpfZHVwLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19nZXRfY29weSh4LCBpKSB7XG4gIGlmKGkgPCAwIHx8IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaSA+PSB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiV2Vhay5nZXRfY29weVwiKTtcbiAgdmFyIHkgPSBjYW1sX3dlYWtfZ2V0KHgsIGkpO1xuICBpZiAoeSA9PT0gMCkgcmV0dXJuIHk7XG4gIHZhciB6ID0geVsxXTtcbiAgaWYgKHogaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIFswLCBjYW1sX29ial9kdXAoeildO1xuICByZXR1cm4geTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93ZWFrX2NoZWNrIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX3dlYWtfY2hlY2soeCwgaSkge1xuICBpZih4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0hPT11bmRlZmluZWQgJiYgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldICE9PTApXG4gICAgcmV0dXJuIDE7XG4gIGVsc2VcbiAgICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93ZWFrX2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfd2Vha19ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgLy8gbWludXMgb25lIGJlY2F1c2UgY2FtbF9hcnJheV9ibGl0IHdvcmtzIG9uIG9jYW1sIGFycmF5XG4gIGNhbWxfYXJyYXlfYmxpdChhMSwgY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpMSAtIDEsXG4gICAgICAgICAgICAgICAgICBhMiwgY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpMiAtIDEsXG4gICAgICAgICAgICAgICAgICBsZW4pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxudmFyIGNhbWxfZXBoZV9jcmVhdGUgPSBjYW1sX3dlYWtfY3JlYXRlXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2tleVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2JsaXRcbnZhciBjYW1sX2VwaGVfYmxpdF9rZXkgPSBjYW1sX3dlYWtfYmxpdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2dldFxudmFyIGNhbWxfZXBoZV9nZXRfa2V5ID0gY2FtbF93ZWFrX2dldFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX3dlYWtfZ2V0X2NvcHlcbnZhciBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5ID0gY2FtbF93ZWFrX2dldF9jb3B5XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9jaGVja19rZXlcbi8vUmVxdWlyZXM6IGNhbWxfd2Vha19jaGVja1xudmFyIGNhbWxfZXBoZV9jaGVja19rZXkgPSBjYW1sX3dlYWtfY2hlY2tcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfd2Vha19zZXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgcmV0dXJuIGNhbWxfd2Vha19zZXQoeCwgaSwgWzAsIHZdKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfdW5zZXRfa2V5XG4vL1JlcXVpcmVzOiBjYW1sX3dlYWtfc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfa2V5KHgsIGkpIHtcbiAgcmV0dXJuIGNhbWxfd2Vha19zZXQoeCwgaSwgMClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2JsaXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG4vL1ZlcnNpb246ID49IDQuMDNcbmZ1bmN0aW9uIGNhbWxfZXBoZV9ibGl0X2RhdGEoc3JjLCBkc3Qpe1xuICBkc3RbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IHNyY1tjYW1sX2VwaGVfZGF0YV9vZmZzZXRdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbi8vVmVyc2lvbjogPj0gNC4wM1xuZnVuY3Rpb24gY2FtbF9lcGhlX2dldF9kYXRhKHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiBbMCwgeFtjYW1sX2VwaGVfZGF0YV9vZmZzZXRdXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9vYmpfZHVwXG4vL1ZlcnNpb246ID49IDQuMDNcbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5KHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiBbMCwgY2FtbF9vYmpfZHVwKHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuLy9WZXJzaW9uOiA+PSA0LjAzXG5mdW5jdGlvbiBjYW1sX2VwaGVfc2V0X2RhdGEoeCwgZGF0YSl7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IGRhdGE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfdW5zZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG4vL1ZlcnNpb246ID49IDQuMDNcbmZ1bmN0aW9uIGNhbWxfZXBoZV91bnNldF9kYXRhKHgsIGRhdGEpe1xuICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSB1bmRlZmluZWQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfY2hlY2tfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG4vL1ZlcnNpb246ID49IDQuMDNcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19kYXRhKHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiAxO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9tZDVfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9hcnJheSxjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLGxlbil7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgY2hhbl9sZW4gPSBjaGFuLmZpbGUubGVuZ3RoKCk7XG4gIGlmKGxlbjwwKSBsZW4gPSBjaGFuX2xlbiAtIGNoYW4ub2Zmc2V0O1xuICBpZihjaGFuLm9mZnNldCArIGxlbiA+IGNoYW5fbGVuKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciBidWYgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCxidWYsMCxsZW4pO1xuICByZXR1cm4gY2FtbF9tZDVfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ1ZiksMCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG52YXIgY2FtbF9tZDVfYnl0ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGFkZCAoeCwgeSkgeyByZXR1cm4gKHggKyB5KSB8IDA7IH1cbiAgZnVuY3Rpb24geHgocSxhLGIseCxzLHQpIHtcbiAgICBhID0gYWRkKGFkZChhLCBxKSwgYWRkKHgsIHQpKTtcbiAgICByZXR1cm4gYWRkKChhIDw8IHMpIHwgKGEgPj4+ICgzMiAtIHMpKSwgYik7XG4gIH1cbiAgZnVuY3Rpb24gZmYoYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gZ2coYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTsgfVxuICBmdW5jdGlvbiBpaShhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7IH1cblxuICBmdW5jdGlvbiBtZDUoYnVmZmVyLCBsZW5ndGgpIHtcbiAgICB2YXIgaSA9IGxlbmd0aDtcbiAgICBidWZmZXJbaSA+PiAyXSB8PSAweDgwIDw8ICg4ICogKGkgJiAzKSk7XG4gICAgZm9yIChpID0gKGkgJiB+MHgzKSArIDg7KGkgJiAweDNGKSA8IDYwIDtpICs9IDQpXG4gICAgICBidWZmZXJbKGkgPj4gMikgLSAxXSA9IDA7XG4gICAgYnVmZmVyWyhpID4+IDIpIC0xXSA9IGxlbmd0aCA8PCAzO1xuICAgIGJ1ZmZlcltpID4+IDJdID0gKGxlbmd0aCA+PiAyOSkgJiAweDFGRkZGRkZGO1xuXG4gICAgdmFyIHcgPSBbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3Nl07XG5cbiAgICBmb3IoaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgICB2YXIgYSA9IHdbMF0sIGIgPSB3WzFdLCBjID0gd1syXSwgZCA9IHdbM107XG5cbiAgICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbaSsgMF0sIDcsIDB4RDc2QUE0NzgpO1xuICAgICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyAxXSwgMTIsIDB4RThDN0I3NTYpO1xuICAgICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKyAyXSwgMTcsIDB4MjQyMDcwREIpO1xuICAgICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyAzXSwgMjIsIDB4QzFCRENFRUUpO1xuICAgICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA0XSwgNywgMHhGNTdDMEZBRik7XG4gICAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyW2krIDVdLCAxMiwgMHg0Nzg3QzYyQSk7XG4gICAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyW2krIDZdLCAxNywgMHhBODMwNDYxMyk7XG4gICAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyW2krIDddLCAyMiwgMHhGRDQ2OTUwMSk7XG4gICAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyW2krIDhdLCA3LCAweDY5ODA5OEQ4KTtcbiAgICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbaSsgOV0sIDEyLCAweDhCNDRGN0FGKTtcbiAgICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbaSsxMF0sIDE3LCAweEZGRkY1QkIxKTtcbiAgICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbaSsxMV0sIDIyLCAweDg5NUNEN0JFKTtcbiAgICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbaSsxMl0sIDcsIDB4NkI5MDExMjIpO1xuICAgICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKzEzXSwgMTIsIDB4RkQ5ODcxOTMpO1xuICAgICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzE0XSwgMTcsIDB4QTY3OTQzOEUpO1xuICAgICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzE1XSwgMjIsIDB4NDlCNDA4MjEpO1xuXG4gICAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyW2krIDFdLCA1LCAweEY2MUUyNTYyKTtcbiAgICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbaSsgNl0sIDksIDB4QzA0MEIzNDApO1xuICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzExXSwgMTQsIDB4MjY1RTVBNTEpO1xuICAgICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyAwXSwgMjAsIDB4RTlCNkM3QUEpO1xuICAgICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA1XSwgNSwgMHhENjJGMTA1RCk7XG4gICAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyW2krMTBdLCA5LCAweDAyNDQxNDUzKTtcbiAgICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbaSsxNV0sIDE0LCAweEQ4QTFFNjgxKTtcbiAgICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbaSsgNF0sIDIwLCAweEU3RDNGQkM4KTtcbiAgICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbaSsgOV0sIDUsIDB4MjFFMUNERTYpO1xuICAgICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKzE0XSwgOSwgMHhDMzM3MDdENik7XG4gICAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyW2krIDNdLCAxNCwgMHhGNEQ1MEQ4Nyk7XG4gICAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyW2krIDhdLCAyMCwgMHg0NTVBMTRFRCk7XG4gICAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyW2krMTNdLCA1LCAweEE5RTNFOTA1KTtcbiAgICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbaSsgMl0sIDksIDB4RkNFRkEzRjgpO1xuICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKyA3XSwgMTQsIDB4Njc2RjAyRDkpO1xuICAgICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzEyXSwgMjAsIDB4OEQyQTRDOEEpO1xuXG4gICAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyW2krIDVdLCA0LCAweEZGRkEzOTQyKTtcbiAgICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbaSsgOF0sIDExLCAweDg3NzFGNjgxKTtcbiAgICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbaSsxMV0sIDE2LCAweDZEOUQ2MTIyKTtcbiAgICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbaSsxNF0sIDIzLCAweEZERTUzODBDKTtcbiAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbaSsgMV0sIDQsIDB4QTRCRUVBNDQpO1xuICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyA0XSwgMTEsIDB4NEJERUNGQTkpO1xuICAgICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKyA3XSwgMTYsIDB4RjZCQjRCNjApO1xuICAgICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzEwXSwgMjMsIDB4QkVCRkJDNzApO1xuICAgICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKzEzXSwgNCwgMHgyODlCN0VDNik7XG4gICAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyW2krIDBdLCAxMSwgMHhFQUExMjdGQSk7XG4gICAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyW2krIDNdLCAxNiwgMHhENEVGMzA4NSk7XG4gICAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyW2krIDZdLCAyMywgMHgwNDg4MUQwNSk7XG4gICAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyW2krIDldLCA0LCAweEQ5RDREMDM5KTtcbiAgICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbaSsxMl0sIDExLCAweEU2REI5OUU1KTtcbiAgICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbaSsxNV0sIDE2LCAweDFGQTI3Q0Y4KTtcbiAgICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbaSsgMl0sIDIzLCAweEM0QUM1NjY1KTtcblxuICAgICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyAwXSwgNiwgMHhGNDI5MjI0NCk7XG4gICAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyW2krIDddLCAxMCwgMHg0MzJBRkY5Nyk7XG4gICAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyW2krMTRdLCAxNSwgMHhBQjk0MjNBNyk7XG4gICAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyW2krIDVdLCAyMSwgMHhGQzkzQTAzOSk7XG4gICAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyW2krMTJdLCA2LCAweDY1NUI1OUMzKTtcbiAgICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbaSsgM10sIDEwLCAweDhGMENDQzkyKTtcbiAgICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbaSsxMF0sIDE1LCAweEZGRUZGNDdEKTtcbiAgICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbaSsgMV0sIDIxLCAweDg1ODQ1REQxKTtcbiAgICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbaSsgOF0sIDYsIDB4NkZBODdFNEYpO1xuICAgICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKzE1XSwgMTAsIDB4RkUyQ0U2RTApO1xuICAgICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKyA2XSwgMTUsIDB4QTMwMTQzMTQpO1xuICAgICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzEzXSwgMjEsIDB4NEUwODExQTEpO1xuICAgICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA0XSwgNiwgMHhGNzUzN0U4Mik7XG4gICAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyW2krMTFdLCAxMCwgMHhCRDNBRjIzNSk7XG4gICAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyW2krIDJdLCAxNSwgMHgyQUQ3RDJCQik7XG4gICAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyW2krIDldLCAyMSwgMHhFQjg2RDM5MSk7XG5cbiAgICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgICB3WzFdID0gYWRkKGIsIHdbMV0pO1xuICAgICAgd1syXSA9IGFkZChjLCB3WzJdKTtcbiAgICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoMTYpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXG4gICAgICAgIHRbaSAqIDQgKyBqXSA9ICh3W2ldID4+ICg4ICogaikpICYgMHhGRjtcbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAocywgb2ZzLCBsZW4pIHtcbiAgICAvLyBGSVg6IG1heWJlIHdlIHNob3VsZCBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiBieSBjaHVuayBvZiA2NCBieXRlc1xuICAgIC8vIGFzIGluIGh0dHA6Ly93d3cubXllcnNkYWlseS5vcmcvam9zZXBoL2phdmFzY3JpcHQvbWQ1LmpzXG4gICAgdmFyIGJ1ZiA9IFtdO1xuICAgIHN3aXRjaCAocy50ICYgNikge1xuICAgIGRlZmF1bHQ6XG4gICAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICAgIGNhc2UgMDogLyogQllURVMgKi9cbiAgICAgIHZhciBiID0gcy5jO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrPTQpIHtcbiAgICAgICAgdmFyIGogPSBpICsgb2ZzO1xuICAgICAgICBidWZbaT4+Ml0gPVxuICAgICAgICAgIGIuY2hhckNvZGVBdChqKSB8IChiLmNoYXJDb2RlQXQoaisxKSA8PCA4KSB8XG4gICAgICAgICAgKGIuY2hhckNvZGVBdChqKzIpIDw8IDE2KSB8IChiLmNoYXJDb2RlQXQoaiszKSA8PCAyNCk7XG4gICAgICB9XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBidWZbaT4+Ml0gfD0gYi5jaGFyQ29kZUF0KGkgKyBvZnMpIDw8ICg4ICogKGkgJiAzKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgICB2YXIgYSA9IHMuYztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKz00KSB7XG4gICAgICAgIHZhciBqID0gaSArIG9mcztcbiAgICAgICAgYnVmW2k+PjJdID0gYVtqXSB8IChhW2orMV0gPDwgOCkgfCAoYVtqKzJdIDw8IDE2KSB8IChhW2orM10gPDwgMjQpO1xuICAgICAgfVxuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYnVmW2k+PjJdIHw9IGFbaSArIG9mc10gPDwgKDggKiAoaSAmIDMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KG1kNShidWYsIGxlbikpO1xuICB9XG59ICgpO1xuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDIwIC0gSHVnbyBIZXV6YXJkXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBTaGFjaGFyIEl0emhha3lcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9ibG9iLzQuMDcvb3RoZXJsaWJzL3N0ci9zdHJzdHVicy5jXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanNjb3EvanNjb3EvYmxvYi92OC4xMS9jb3EtanMvanNfc3R1Yi9zdHIuanNcblxuLy9Qcm92aWRlczogcmVfbWF0Y2hcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuXG52YXIgcmVfbWF0Y2ggPSBmdW5jdGlvbigpe1xuICB2YXIgcmVfd29yZF9sZXR0ZXJzID0gW1xuICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgIC8qIDB4MDAtMHgxRjogbm9uZSAqL1xuICAgIDB4MDAsIDB4MDAsIDB4RkYsIDB4MDMsICAgICAgIC8qIDB4MjAtMHgzRjogZGlnaXRzIDAtOSAqL1xuICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4ODcsICAgICAgIC8qIDB4NDAtMHg1RjogQSB0byBaLCBfICovXG4gICAgMHhGRSwgMHhGRiwgMHhGRiwgMHgwNywgICAgICAgLyogMHg2MC0weDdGOiBhIHRvIHogKi9cbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiAweDgwLTB4OUY6IG5vbmUgKi9cbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiAweEEwLTB4QkY6IG5vbmUgKi9cbiAgICAweEZGLCAweEZGLCAweDdGLCAweEZGLCAgICAgICAvKiAweEMwLTB4REY6IExhdGluLTEgYWNjZW50ZWQgdXBwZXJjYXNlICovXG4gICAgMHhGRiwgMHhGRiwgMHg3RiwgMHhGRiAgICAgICAgLyogMHhFMC0weEZGOiBMYXRpbi0xIGFjY2VudGVkIGxvd2VyY2FzZSAqL1xuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsIENIQVJOT1JNOiAxLCBTVFJJTkc6IDIsIFNUUklOR05PUk06IDMsIENIQVJDTEFTUzogNCxcbiAgICBCT0w6IDUsIEVPTDogNiwgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LCBFTkRHUk9VUDogOSwgUkVGR1JPVVA6IDEwLFxuICAgIEFDQ0VQVDogMTEsXG4gICAgU0lNUExFT1BUOiAxMiwgU0lNUExFU1RBUjogMTMsIFNJTVBMRVBMVVM6IDE0LFxuICAgIEdPVE86IDE1LCBQVVNIQkFDSzogMTYsIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4XG4gIH07XG5cbiAgZnVuY3Rpb24gaXNfd29yZF9sZXR0ZXIoYykge1xuICAgIHJldHVybiAocmVfd29yZF9sZXR0ZXJzWyAgKGMgPj4gMyldID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLGkpIHtcbiAgICByZXR1cm4gKGNhbWxfc3RyaW5nX2dldChzLChpID4+IDMpKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcblxuICAgIHZhciBwcm9nICAgICAgICAgID0gY2FtbF9qc19mcm9tX2FycmF5KHJlWzFdKSxcbiAgICAgICAgY3Bvb2wgICAgICAgICA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICAgIG5vcm10YWJsZSAgICAgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgICAgbnVtZ3JvdXBzICAgICA9IHJlWzRdIHwgMCxcbiAgICAgICAgbnVtcmVnaXN0ZXJzICA9IHJlWzVdIHwgMCxcbiAgICAgICAgc3RhcnRjaGFycyAgICA9IHJlWzZdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgICBxdWl0ID0gZmFsc2UsXG4gICAgICAgIHN0YWNrID0gW10sXG4gICAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgICByZV9yZWdpc3RlciA9IG5ldyBBcnJheShudW1yZWdpc3RlcnMpO1xuXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKyl7XG4gICAgICBncm91cHNbaV0gPSB7c3RhcnQ6IC0xLCBlbmQ6LTF9XG4gICAgfVxuICAgIGdyb3Vwc1swXS5zdGFydCA9IHBvcztcblxuICAgIHZhciBiYWNrdHJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIHZhciBpdGVtID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGlmIChpdGVtLnVuZG8pIHtcbiAgICAgICAgICBpdGVtLnVuZG8ub2JqW2l0ZW0udW5kby5wcm9wXSA9IGl0ZW0udW5kby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGl0ZW0ucG9zKSB7XG4gICAgICAgICAgcGMgPSBpdGVtLnBvcy5wYztcbiAgICAgICAgICBwb3MgPSBpdGVtLnBvcy50eHQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWl0ID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIHB1c2ggPSBmdW5jdGlvbihpdGVtKSB7IHN0YWNrLnB1c2goaXRlbSk7IH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGgqMik7XG4gICAgICByZXN1bHRbMF0gPSAwOyAvLyB0YWdcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZyA9IGdyb3Vwc1tpXTtcbiAgICAgICAgaWYoZy5zdGFydCA8IDAgfHwgZy5lbmQgPCAwKSB7XG4gICAgICAgICAgZy5zdGFydCA9IGcuZW5kID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WzIqaSArIDEgXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyKmkgKyAxICsgMSBdID0gZy5lbmQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH07XG5cbiAgICB2YXIgcHJlZml4X21hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYocGFydGlhbCkgcmV0dXJuIGFjY2VwdCAoKTtcbiAgICAgIGVsc2UgYmFja3RyYWNrICgpO1xuICAgIH1cblxuICAgIC8qIE1haW4gREZBIGludGVycHJldGVyIGxvb3AgKi9cbiAgICB3aGlsZSAoIXF1aXQpIHtcbiAgICAgIHZhciBvcCA9IHByb2dbcGNdICYgMHhmZixcbiAgICAgICAgICBzYXJnID0gcHJvZ1twY10gPj4gOCxcbiAgICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgICAgYyA9IHNbcG9zXSxcbiAgICAgICAgICBncm91cDtcblxuICAgICAgcGMrKztcblxuICAgICAgc3dpdGNoIChvcCkge1xuICAgICAgY2FzZSBvcGNvZGVzLkNIQVI6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGMgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSTk9STTpcbiAgICAgICAgaWYocG9zID09PSBzLmxlbmd0aCkge3ByZWZpeF9tYXRjaCAoKTsgYnJlYWt9O1xuICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgIGZvciAodmFyIGFyZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoY3Bvb2xbdWFyZ10pLCBpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgICBpZiAoYyA9PT0gYXJnLmNoYXJDb2RlQXQoaSkpXG4gICAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgICAgZWxzZSB7IGJhY2t0cmFjaygpOyBicmVhazsgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgIGZvciAodmFyIGFyZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoY3Bvb2xbdWFyZ10pLCBpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IGFyZy5jaGFyQ29kZUF0KGkpKVxuICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGVsc2UgeyBiYWNrdHJhY2soKTsgYnJlYWs7IH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICBpZihwb3MgPT09IHMubGVuZ3RoKSB7cHJlZml4X21hdGNoICgpOyBicmVha307XG4gICAgICAgIGlmIChpbl9iaXRzZXQoY3Bvb2xbdWFyZ10sIGMpKSBwb3MrKztcbiAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuQk9MOlxuICAgICAgICBpZihwb3MgPiAwICYmIHNbcG9zIC0gMV0gIT0gMTAgLyogXFxuICovKSB7YmFja3RyYWNrKCl9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLkVPTDpcbiAgICAgICAgaWYocG9zIDwgcy5sZW5ndGggJiYgc1twb3NdICE9IDEwIC8qIFxcbiAqLykge2JhY2t0cmFjaygpfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5XT1JEQk9VTkRBUlk6XG4gICAgICAgIGlmKHBvcyA9PSAwKSB7XG4gICAgICAgICAgaWYocG9zID09PSBzLmxlbmd0aCkge3ByZWZpeF9tYXRjaCAoKTsgYnJlYWt9O1xuICAgICAgICAgIGlmKGlzX3dvcmRfbGV0dGVyKHNbMF0pKSBicmVhaztcbiAgICAgICAgICBiYWNrdHJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwb3MgPT09IHMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYoaXNfd29yZF9sZXR0ZXIoc1twb3MgLSAxXSkpIGJyZWFrO1xuICAgICAgICAgIGJhY2t0cmFjayAoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZihpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSAhPSBpc193b3JkX2xldHRlcihzW3Bvc10pKSBicmVhaztcbiAgICAgICAgICBiYWNrdHJhY2sgKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuQkVHR1JPVVA6XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICBwdXNoKHt1bmRvOiB7b2JqOmdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgcHJvcDonc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwLnN0YXJ0fX0pO1xuICAgICAgICBncm91cC5zdGFydCA9IHBvcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuRU5ER1JPVVA6XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICBwdXNoKHt1bmRvOiB7b2JqOiBncm91cCxcbiAgICAgICAgICAgICAgICAgICAgIHByb3A6J2VuZCcsXG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXAuZW5kfX0pO1xuICAgICAgICBncm91cC5lbmQgPSBwb3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlJFRkdST1VQOlxuICAgICAgICBncm91cCA9IGdyb3Vwc1t1YXJnXTtcbiAgICAgICAgaWYoZ3JvdXAuc3RhcnQgPCAwIHx8IGdyb3VwLmVuZCA8IDApIHtiYWNrdHJhY2sgKCk7IGJyZWFrfVxuICAgICAgICBmb3IgKHZhciBpID0gZ3JvdXAuc3RhcnQ7IGkgPCBncm91cC5lbmQ7IGkrKyl7XG4gICAgICAgICAgaWYocG9zID09PSBzLmxlbmd0aCkge3ByZWZpeF9tYXRjaCAoKTsgYnJlYWt9O1xuICAgICAgICAgIGlmKHNbaV0gIT0gc1twb3NdKSB7YmFja3RyYWNrICgpOyBicmVha31cbiAgICAgICAgICBwb3MrKztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVPUFQ6XG4gICAgICAgIGlmIChpbl9iaXRzZXQoY3Bvb2xbdWFyZ10sIGMpKSBwb3MrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuU0lNUExFU1RBUjpcbiAgICAgICAgd2hpbGUgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpXG4gICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVQTFVTOlxuICAgICAgICBpZihwb3MgPT09IHMubGVuZ3RoKSB7cHJlZml4X21hdGNoICgpOyBicmVha307XG4gICAgICAgIGlmIChpbl9iaXRzZXQoY3Bvb2xbdWFyZ10sIGMpKSB7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIH0gd2hpbGUgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgYmFja3RyYWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLkFDQ0VQVDpcbiAgICAgICAgcmV0dXJuIGFjY2VwdCgpO1xuICAgICAgY2FzZSBvcGNvZGVzLkdPVE86XG4gICAgICAgIHBjID0gcGMgKyBzYXJnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5QVVNIQkFDSzpcbiAgICAgICAgcHVzaCh7cG9zOiB7cGM6IHBjICsgc2FyZywgdHh0OiBwb3N9fSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNFVE1BUks6XG4gICAgICAgIHB1c2goe3VuZG86IHtvYmo6cmVfcmVnaXN0ZXIsXG4gICAgICAgICAgICAgICAgICAgICBwcm9wOiB1YXJnLFxuICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlX3JlZ2lzdGVyW3VhcmddfX0pO1xuICAgICAgICByZV9yZWdpc3Rlclt1YXJnXSA9IHBvcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuQ0hFQ0tQUk9HUkVTUzpcbiAgICAgICAgaWYgKHJlX3JlZ2lzdGVyW3VhcmddID09PSBwb3MpIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYnl0ZWNvZGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIHJlX21hdGNoX2ltcGw7XG59KCk7XG5cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2ZvcndhcmRcbi8vUmVxdWlyZXM6IHJlX21hdGNoLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gcmVfc2VhcmNoX2ZvcndhcmQocmUsIHMsIHBvcykge1xuICBpZihwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIuc2VhcmNoX2ZvcndhcmRcIilcbiAgd2hpbGUgKHBvcyA8PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIHtcbiAgICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMCk7XG4gICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICBwb3MrKztcbiAgfVxuXG4gIHJldHVybiBbMF07ICAvKiBbfHxdIDogaW50IGFycmF5ICovXG59XG5cbi8vUHJvdmlkZXM6IHJlX3NlYXJjaF9iYWNrd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zZWFyY2hfYmFja3dhcmQocmUsIHMsIHBvcykge1xuICBpZihwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIuc2VhcmNoX2JhY2t3YXJkXCIpXG4gIHdoaWxlIChwb3MgPj0gMCkge1xuICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgIHBvcy0tO1xuICB9XG5cbiAgcmV0dXJuIFswXTsgIC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuXG4vL1Byb3ZpZGVzOiByZV9zdHJpbmdfbWF0Y2hcbi8vUmVxdWlyZXM6IHJlX21hdGNoLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gcmVfc3RyaW5nX21hdGNoKHJlLHMscG9zKXtcbiAgaWYocG9zIDwgMCB8fCBwb3MgPiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyLnN0cmluZ19tYXRjaFwiKVxuICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMCk7XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGVsc2UgcmV0dXJuIFswXTtcbn1cblxuLy9Qcm92aWRlczogcmVfcGFydGlhbF9tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9wYXJ0aWFsX21hdGNoKHJlLHMscG9zKXtcbiAgaWYocG9zIDwgMCB8fCBwb3MgPiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyLnBhcnRpYWxfbWF0Y2hcIilcbiAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDEpO1xuICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICBlbHNlIHJldHVybiBbMF07XG59XG5cbi8vUHJvdmlkZXM6IHJlX3JlcGxhY2VtZW50X3RleHRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vLyBleHRlcm5hbCByZV9yZXBsYWNlbWVudF90ZXh0OiBzdHJpbmcgLT4gaW50IGFycmF5IC0+IHN0cmluZyAtPiBzdHJpbmdcbmZ1bmN0aW9uIHJlX3JlcGxhY2VtZW50X3RleHQocmVwbCxncm91cHMsb3JpZykge1xuICB2YXIgcmVwbCA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocmVwbCk7XG4gIHZhciBsZW4gPSByZXBsLmxlbmd0aDtcbiAgdmFyIG9yaWcgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG9yaWcpO1xuICB2YXIgcmVzID0gXCJcIjsgLy9yZXN1bHRcbiAgdmFyIG4gPSAwOyAvLyBjdXJyZW50IHBvc2l0aW9uXG4gIHZhciBjdXI7IC8vY3VycmVudCBjaGFyXG4gIHZhciBzdGFydCwgZW5kLCBjO1xuICB3aGlsZShuIDwgbGVuKXtcbiAgICBjdXIgPSByZXBsLmNoYXJBdChuKyspO1xuICAgIGlmKGN1ciAhPSAnXFxcXCcpe1xuICAgICAgcmVzICs9IGN1cjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZihuID09IGxlbikgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiBpbGxlZ2FsIGJhY2tzbGFzaCBzZXF1ZW5jZVwiKTtcbiAgICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgICBzd2l0Y2goY3VyKXtcbiAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICByZXMgKz0gY3VyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzpcbiAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzpcbiAgICAgICAgYyA9ICtjdXI7XG4gICAgICAgIGlmIChjKjIgPj0gZ3JvdXBzLmxlbmd0aCAtIDEgKVxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJTdHIucmVwbGFjZTogcmVmZXJlbmNlIHRvIHVubWF0Y2hlZCBncm91cFwiICk7XG4gICAgICAgIHN0YXJ0ID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLGMqMik7XG4gICAgICAgIGVuZCA9IGNhbWxfYXJyYXlfZ2V0KGdyb3VwcywgYyoyICsxKTtcbiAgICAgICAgaWYgKHN0YXJ0ID09IC0xKVxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJTdHIucmVwbGFjZTogcmVmZXJlbmNlIHRvIHVubWF0Y2hlZCBncm91cFwiKTtcbiAgICAgICAgcmVzKz1vcmlnLnNsaWNlKHN0YXJ0LGVuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzICs9ICgnXFxcXCcgICsgY3VyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocmVzKTsgfVxuIiwiLy9UaGUgZm9sbG93aW5nIGFyZSBkZWZpbmVkIGluIENzdHJ1Y3Rcbi8vVGhlcmUgYXJlIGp1c3QgcHJvdmlkZWQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fYmlnc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhXG4vL1dlYWtkZWZcbnZhciBjYW1sX2JsaXRfYmlnc3RyaW5nX3RvX2JpZ3N0cmluZyA9IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2J5dGVzXG4vL1dlYWtkZWZcbnZhciBjYW1sX2JsaXRfYmlnc3RyaW5nX3RvX3N0cmluZyA9IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9zdHJpbmdfdG9fYmlnc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYVxuLy9XZWFrZGVmXG52YXIgY2FtbF9ibGl0X3N0cmluZ190b19iaWdzdHJpbmcgPSBjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICBEYW5pZWwgQy4gQnVlbnpsaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5cbmxldCBlcnJfbm9fcHJlZCA9IFwiVSswMDAwIGhhcyBubyBwcmVkZWNlc3NvclwiXG5sZXQgZXJyX25vX3N1Y2MgPSBcIlUrMTBGRkZGIGhhcyBubyBzdWNjZXNzb3JcIlxubGV0IGVycl9ub3Rfc3YgaSA9IGZvcm1hdF9pbnQgXCIlWFwiIGkgXiBcIiBpcyBub3QgYW4gVW5pY29kZSBzY2FsYXIgdmFsdWVcIlxubGV0IGVycl9ub3RfbGF0aW4xIHUgPSBcIlUrXCIgXiBmb3JtYXRfaW50IFwiJTA0WFwiIHUgXiBcIiBpcyBub3QgYSBsYXRpbjEgY2hhcmFjdGVyXCJcblxudHlwZSB0ID0gaW50XG5cbmxldCBtaW4gPSAweDAwMDBcbmxldCBtYXggPSAweDEwRkZGRlxubGV0IGxvX2JvdW5kID0gMHhEN0ZGXG5sZXQgaGlfYm91bmQgPSAweEUwMDBcblxubGV0IGJvbSA9IDB4RkVGRlxubGV0IHJlcCA9IDB4RkZGRFxuXG5sZXQgc3VjYyB1ID1cbiAgaWYgdSA9IGxvX2JvdW5kIHRoZW4gaGlfYm91bmQgZWxzZVxuICBpZiB1ID0gbWF4IHRoZW4gaW52YWxpZF9hcmcgZXJyX25vX3N1Y2MgZWxzZVxuICB1ICsgMVxuXG5sZXQgcHJlZCB1ID1cbiAgaWYgdSA9IGhpX2JvdW5kIHRoZW4gbG9fYm91bmQgZWxzZVxuICBpZiB1ID0gbWluIHRoZW4gaW52YWxpZF9hcmcgZXJyX25vX3ByZWQgZWxzZVxuICB1IC0gMVxuXG5sZXQgaXNfdmFsaWQgaSA9IChtaW4gPD0gaSAmJiBpIDw9IGxvX2JvdW5kKSB8fCAoaGlfYm91bmQgPD0gaSAmJiBpIDw9IG1heClcbmxldCBvZl9pbnQgaSA9IGlmIGlzX3ZhbGlkIGkgdGhlbiBpIGVsc2UgaW52YWxpZF9hcmcgKGVycl9ub3Rfc3YgaSlcbmV4dGVybmFsIHVuc2FmZV9vZl9pbnQgOiBpbnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHRvX2ludCA6IHQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgaXNfY2hhciB1ID0gdSA8IDI1NlxubGV0IG9mX2NoYXIgYyA9IENoYXIuY29kZSBjXG5sZXQgdG9fY2hhciB1ID1cbiAgaWYgdSA+IDI1NSB0aGVuIGludmFsaWRfYXJnIChlcnJfbm90X2xhdGluMSB1KSBlbHNlXG4gIENoYXIudW5zYWZlX2NociB1XG5cbmxldCB1bnNhZmVfdG9fY2hhciA9IENoYXIudW5zYWZlX2NoclxuXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgaGFzaCA9IHRvX2ludFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0ludDY0XTogNjQtYml0IGludGVnZXJzICopXG5cbmV4dGVybmFsIG5lZyA6IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbmVnXCJcbmV4dGVybmFsIGFkZCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfYWRkXCJcbmV4dGVybmFsIHN1YiA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfc3ViXCJcbmV4dGVybmFsIG11bCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbXVsXCJcbmV4dGVybmFsIGRpdiA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfZGl2XCJcbmV4dGVybmFsIHJlbSA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbW9kXCJcbmV4dGVybmFsIGxvZ2FuZCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfYW5kXCJcbmV4dGVybmFsIGxvZ29yIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9vclwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X3hvclwiXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0IDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfYXNyXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQ2NCAtPiBpbnQgLT4gaW50NjQgPSBcIiVpbnQ2NF9sc3JcIlxuZXh0ZXJuYWwgb2ZfaW50IDogaW50IC0+IGludDY0ID0gXCIlaW50NjRfb2ZfaW50XCJcbmV4dGVybmFsIHRvX2ludCA6IGludDY0IC0+IGludCA9IFwiJWludDY0X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X29mX2Zsb2F0XCIgXCJjYW1sX2ludDY0X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF90b19mbG9hdFwiIFwiY2FtbF9pbnQ2NF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyIDogaW50MzIgLT4gaW50NjQgPSBcIiVpbnQ2NF9vZl9pbnQzMlwiXG5leHRlcm5hbCB0b19pbnQzMiA6IGludDY0IC0+IGludDMyID0gXCIlaW50NjRfdG9faW50MzJcIlxuZXh0ZXJuYWwgb2ZfbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IGludDY0ID0gXCIlaW50NjRfb2ZfbmF0aXZlaW50XCJcbmV4dGVybmFsIHRvX25hdGl2ZWludCA6IGludDY0IC0+IG5hdGl2ZWludCA9IFwiJWludDY0X3RvX25hdGl2ZWludFwiXG5cbmxldCB6ZXJvID0gMExcbmxldCBvbmUgPSAxTFxubGV0IG1pbnVzX29uZSA9IC0xTFxubGV0IHN1Y2MgbiA9IGFkZCBuIDFMXG5sZXQgcHJlZCBuID0gc3ViIG4gMUxcbmxldCBhYnMgbiA9IGlmIG4gPj0gMEwgdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBtaW5faW50ID0gMHg4MDAwMDAwMDAwMDAwMDAwTFxubGV0IG1heF9pbnQgPSAweDdGRkZGRkZGRkZGRkZGRkZMXG5sZXQgbG9nbm90IG4gPSBsb2d4b3IgbiAoLTFMKVxuXG5sZXQgdW5zaWduZWRfdG9faW50ID1cbiAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgZnVuIG4gLT5cbiAgICBpZiBjb21wYXJlIHplcm8gbiA8PSAwICYmIGNvbXBhcmUgbiBtYXhfaW50IDw9IDAgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0ID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5cblxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbnR5cGUgdCA9IGludDY0XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZVxuICAgYml0bmVzcy4gU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2NvbXBhcmUgbiBkIDwgMCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfY29tcGFyZSByIGQgPj0gMCB0aGVuIHN1Y2MgcSBlbHNlIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4ICopXG5cbnR5cGUgcG9zaXRpb24gPSB7XG4gIHBvc19mbmFtZSA6IHN0cmluZztcbiAgcG9zX2xudW0gOiBpbnQ7XG4gIHBvc19ib2wgOiBpbnQ7XG4gIHBvc19jbnVtIDogaW50O1xufVxuXG5sZXQgZHVtbXlfcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDA7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IC0xO1xufVxuXG50eXBlIGxleGJ1ZiA9XG4gIHsgcmVmaWxsX2J1ZmYgOiBsZXhidWYgLT4gdW5pdDtcbiAgICBtdXRhYmxlIGxleF9idWZmZXIgOiBieXRlcztcbiAgICBtdXRhYmxlIGxleF9idWZmZXJfbGVuIDogaW50O1xuICAgIG11dGFibGUgbGV4X2Fic19wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2N1cnJfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfYWN0aW9uIDogaW50O1xuICAgIG11dGFibGUgbGV4X2VvZl9yZWFjaGVkIDogYm9vbDtcbiAgICBtdXRhYmxlIGxleF9tZW0gOiBpbnQgYXJyYXk7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcCA6IHBvc2l0aW9uO1xuICAgIG11dGFibGUgbGV4X2N1cnJfcCA6IHBvc2l0aW9uO1xuICB9XG5cbnR5cGUgbGV4X3RhYmxlcyA9XG4gIHsgbGV4X2Jhc2U6IHN0cmluZztcbiAgICBsZXhfYmFja3Ryazogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0OiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrOiBzdHJpbmc7XG4gICAgbGV4X2Jhc2VfY29kZSA6IHN0cmluZztcbiAgICBsZXhfYmFja3Rya19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0X2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NvZGU6IHN0cmluZzt9XG5cbmV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcbmV4dGVybmFsIGNfbmV3X2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9uZXdfbGV4X2VuZ2luZVwiXG5cbmxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cblxubGV0IG5ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX25ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5cbmxldCBsZXhfcmVmaWxsIHJlYWRfZnVuIGF1eF9idWZmZXIgbGV4YnVmID1cbiAgbGV0IHJlYWQgPVxuICAgIHJlYWRfZnVuIGF1eF9idWZmZXIgKEJ5dGVzLmxlbmd0aCBhdXhfYnVmZmVyKSBpblxuICBsZXQgbiA9XG4gICAgaWYgcmVhZCA+IDBcbiAgICB0aGVuIHJlYWRcbiAgICBlbHNlIChsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWU7IDApIGluXG4gICgqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlcjpcbiAgICAgICAgPC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tPlxuICAgICAgICB8ICBqdW5rIHwgICAgICB2YWxpZCBkYXRhICAgICB8ICAganVuayAgICB8XG4gICAgICAgIF4gICAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIF5cbiAgICAgICAgMCAgICBzdGFydF9wb3MgICAgICAgICAgICAgYnVmZmVyX2VuZCAgICBCeXRlcy5sZW5ndGggYnVmZmVyXG4gICopXG4gIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG4gPiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIgdGhlbiBiZWdpblxuICAgICgqIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuXG4gICAgICAgPD0gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyXG4gICAgdGhlbiBiZWdpblxuICAgICAgKCogQnV0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpZiB3ZSByZWNsYWltIHRoZSBqdW5rIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgIG9mIHRoZSBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcylcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgKCogV2UgbXVzdCBncm93IHRoZSBidWZmZXIuICBEb3VibGluZyBpdHMgc2l6ZSB3aWxsIHByb3ZpZGUgZW5vdWdoXG4gICAgICAgICBzcGFjZSBzaW5jZSBuIDw9IFN0cmluZy5sZW5ndGggYXV4X2J1ZmZlciA8PSBTdHJpbmcubGVuZ3RoIGJ1ZmZlci5cbiAgICAgICAgIFdhdGNoIG91dCBmb3Igc3RyaW5nIGxlbmd0aCBvdmVyZmxvdywgdGhvdWdoLiAqKVxuICAgICAgbGV0IG5ld2xlbiA9XG4gICAgICAgIG1pbiAoMiAqIEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlcikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG4gPiBuZXdsZW5cbiAgICAgIHRoZW4gZmFpbHdpdGggXCJMZXhpbmcubGV4X3JlZmlsbDogY2Fubm90IGdyb3cgYnVmZmVyXCI7XG4gICAgICBsZXQgbmV3YnVmID0gQnl0ZXMuY3JlYXRlIG5ld2xlbiBpblxuICAgICAgKCogQ29weSB0aGUgdmFsaWQgZGF0YSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBuZXdidWYgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKTtcbiAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDwtIG5ld2J1ZlxuICAgIGVuZDtcbiAgICAoKiBSZWFsbG9jYXRpb24gb3Igbm90LCB3ZSBoYXZlIHNoaWZ0ZWQgdGhlIGRhdGEgbGVmdCBieVxuICAgICAgIHN0YXJ0X3BvcyBjaGFyYWN0ZXJzOyB1cGRhdGUgdGhlIHBvc2l0aW9ucyAqKVxuICAgIGxldCBzID0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgICBsZXhidWYubGV4X2Fic19wb3MgPC0gbGV4YnVmLmxleF9hYnNfcG9zICsgcztcbiAgICBsZXhidWYubGV4X2N1cnJfcG9zIDwtIGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIDwtIDA7XG4gICAgbGV4YnVmLmxleF9sYXN0X3BvcyA8LSBsZXhidWYubGV4X2xhc3RfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gcyA7XG4gICAgbGV0IHQgPSBsZXhidWYubGV4X21lbSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggdC0xIGRvXG4gICAgICBsZXQgdiA9IHQuKGkpIGluXG4gICAgICBpZiB2ID49IDAgdGhlblxuICAgICAgICB0LihpKSA8LSB2LXNcbiAgICBkb25lXG4gIGVuZDtcbiAgKCogVGhlcmUgaXMgbm93IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgQnl0ZXMuYmxpdCBhdXhfYnVmZmVyIDAgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9idWZmZXJfbGVuIG47XG4gIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuXG5cbmxldCB6ZXJvX3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAxO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAwO1xufVxuXG5sZXQgZnJvbV9mdW5jdGlvbiA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgZiA9XG4gIHsgcmVmaWxsX2J1ZmYgPSBsZXhfcmVmaWxsIGYgKEJ5dGVzLmNyZWF0ZSA1MTIpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5jcmVhdGUgMTAyNDtcbiAgICBsZXhfYnVmZmVyX2xlbiA9IDA7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IGZhbHNlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgZnJvbV9jaGFubmVsID93aXRoX3Bvc2l0aW9ucyBpYyA9XG4gIGZyb21fZnVuY3Rpb24gP3dpdGhfcG9zaXRpb25zIChmdW4gYnVmIG4gLT4gaW5wdXQgaWMgYnVmIDAgbilcblxubGV0IGZyb21fc3RyaW5nID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBzID1cbiAgeyByZWZpbGxfYnVmZiA9IChmdW4gbGV4YnVmIC0+IGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZSk7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLm9mX3N0cmluZyBzOyAoKiBoYXZlIHRvIG1ha2UgYSBjb3B5IGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHVuc2FmZS1zdHJpbmcgbW9kZSAqKVxuICAgIGxleF9idWZmZXJfbGVuID0gU3RyaW5nLmxlbmd0aCBzO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSB0cnVlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgd2l0aF9wb3NpdGlvbnMgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zXG5cbmxldCBsZXhlbWUgbGV4YnVmID1cbiAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG5sZXQgc3ViX2xleGVtZSBsZXhidWYgaTEgaTIgPVxuICBsZXQgbGVuID0gaTItaTEgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW5cblxubGV0IHN1Yl9sZXhlbWVfb3B0IGxleGJ1ZiBpMSBpMiA9XG4gIGlmIGkxID49IDAgdGhlbiBiZWdpblxuICAgIGxldCBsZW4gPSBpMi1pMSBpblxuICAgIFNvbWUgKEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuKVxuICBlbmQgZWxzZSBiZWdpblxuICAgIE5vbmVcbiAgZW5kXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPSBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaVxuXG5sZXQgc3ViX2xleGVtZV9jaGFyX29wdCBsZXhidWYgaSA9XG4gIGlmIGkgPj0gMCB0aGVuXG4gICAgU29tZSAoQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cblxubGV0IGxleGVtZV9jaGFyIGxleGJ1ZiBpID1cbiAgQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIChsZXhidWYubGV4X3N0YXJ0X3BvcyArIGkpXG5cbmxldCBsZXhlbWVfc3RhcnQgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wLnBvc19jbnVtXG5sZXQgbGV4ZW1lX2VuZCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfY251bVxuXG5sZXQgbGV4ZW1lX3N0YXJ0X3AgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wXG5sZXQgbGV4ZW1lX2VuZF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wXG5cbmxldCBuZXdfbGluZSBsZXhidWYgPVxuICBsZXQgbGNwID0gbGV4YnVmLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGV4YnVmLmxleF9jdXJyX3AgPC1cbiAgICAgIHsgbGNwIHdpdGhcbiAgICAgICAgcG9zX2xudW0gPSBsY3AucG9zX2xudW0gKyAxO1xuICAgICAgICBwb3NfYm9sID0gbGNwLnBvc19jbnVtO1xuICAgICAgfVxuXG5cblxuKCogRGlzY2FyZCBkYXRhIGxlZnQgaW4gbGV4ZXIgYnVmZmVyLiAqKVxuXG5sZXQgZmx1c2hfaW5wdXQgbGIgPVxuICBsYi5sZXhfY3Vycl9wb3MgPC0gMDtcbiAgbGIubGV4X2Fic19wb3MgPC0gMDtcbiAgbGV0IGxjcCA9IGxiLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGIubGV4X2N1cnJfcCA8LSB7emVyb19wb3Mgd2l0aCBwb3NfZm5hbWUgPSBsY3AucG9zX2ZuYW1lfTtcbiAgbGIubGV4X2J1ZmZlcl9sZW4gPC0gMDtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3NcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgKCogVG9vbHMgdG8gbWFuaXB1bGF0ZSBzY2FubmluZyBzZXQgb2YgY2hhcnMgKHNlZSAlWy4uLl0pICopXG5cbnR5cGUgbXV0YWJsZV9jaGFyX3NldCA9IGJ5dGVzXG5cbigqIENyZWF0ZSBhIGZyZXNoLCBlbXB0eSwgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBjcmVhdGVfY2hhcl9zZXQgKCkgPSBCeXRlcy5tYWtlIDMyICdcXDAwMCdcblxuKCogQWRkIGEgY2hhciBpbiBhIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgQnl0ZXMuc2V0IGNoYXJfc2V0IHN0cl9pbmRcbiAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChCeXRlcy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbG9yIG1hc2spKVxuXG5sZXQgZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgQnl0ZXMudG9fc3RyaW5nIGNoYXJfc2V0XG5cbigqIENvbXB1dGUgdGhlIGNvbXBsZW1lbnQgb2YgYSBjaGFyIHNldC4gKilcbmxldCByZXZfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBsZXQgY2hhcl9zZXQnID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gIGZvciBpID0gMCB0byAzMSBkb1xuICAgIEJ5dGVzLnNldCBjaGFyX3NldCcgaVxuICAgICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBpKSBseG9yIDB4RkYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBjaGFyX3NldCdcblxuKCogUmV0dXJuIHRydWUgaWYgYSBgYycgaXMgaW4gYGNoYXJfc2V0Jy4gKilcbmxldCBpc19pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsYW5kIG1hc2spIDw+IDBcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIElnbm9yZWQgcGFyYW0gY29udmVyc2lvbiAqKVxuXG4oKiBHQURUIHVzZWQgdG8gYWJzdHJhY3QgYW4gZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXIuICopXG4oKiBTZWUgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0LiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYiA9IFBhcmFtX2Zvcm1hdF9FQkIgOlxuICAgICgneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYlxuXG4oKiBDb21wdXRlIGEgcGFkZGluZyBhc3NvY2lhdGVkIHRvIGEgcGFkX29wdGlvbiAoc2VlIFwiJV80MmRcIikuICopXG5sZXQgcGFkX29mX3BhZF9vcHQgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcGFkZGluZ1xuICB8IFNvbWUgd2lkdGggLT4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcblxuKCogQ29tcHV0ZSBhIHByZWNpc2lvbiBhc3NvY2lhdGVkIHRvIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfLjQyZlwiKS4gKilcbmxldCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0ID0gbWF0Y2ggcHJlY19vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcHJlY2lzaW9uXG4gIHwgU29tZSBuZGVjIC0+IExpdF9wcmVjaXNpb24gbmRlY1xuXG4oKiBUdXJuIGFuIGlnbm9yZWQgcGFyYW0gaW50byBpdHMgZXF1aXZhbGVudCBub3QtaWdub3JlZCBmb3JtYXQgbm9kZS4gKilcbigqIFVzZWQgZm9yIGZvcm1hdCBwcmV0dHktcHJpbnRpbmcgYW5kIFNjYW5mLiAqKVxubGV0IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPiAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFyYW1fZm9ybWF0X2ViYiA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENoYXIgZm10KVxuICB8IElnbm9yZWRfY2FtbF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9jaGFyIGZtdClcbiAgfCBJZ25vcmVkX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfc3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChJbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQzMiAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDMyIChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoTmF0aXZlaW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50NjQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQ2NCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2Zsb2F0IChwYWRfb3B0LCBwcmVjX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRmxvYXQgKChGbG9hdF9mbGFnXywgRmxvYXRfZiksXG4gICAgICAgICAgICAgIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9ib29sIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChCb29sIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoUmVhZGVyIGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdClcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZXMgKilcblxudHlwZSAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW4gPVxuICB8IEFjY19vcGVuX3RhZyBvZiAoJ2IsICdjKSBhY2NcbiAgfCBBY2Nfb3Blbl9ib3ggb2YgKCdiLCAnYykgYWNjXG5cbigqIFJldmVyc2VkIGxpc3Qgb2YgcHJpbnRpbmcgYXRvbXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgcHJpbnRmIGFyZ3VtZW50cy4gKilcbmFuZCAoJ2IsICdjKSBhY2MgPVxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCBvZiAoJ2IsICdjKSBhY2MgKiBmb3JtYXR0aW5nX2xpdFxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIG9mICgnYiwgJ2MpIGFjYyAqICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlblxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogTGl0ZXJhbCBzdHJpbmcgKilcbiAgfCBBY2NfY2hhcl9saXRlcmFsICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBMaXRlcmFsIGNoYXIgKilcbiAgfCBBY2NfZGF0YV9zdHJpbmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBHZW5lcmF0ZWQgc3RyaW5nICopXG4gIHwgQWNjX2RhdGFfY2hhciAgICAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogR2VuZXJhdGVkIGNoYXIgKilcbiAgfCBBY2NfZGVsYXkgICAgICAgICAgb2YgKCdiLCAnYykgYWNjICogKCdiIC0+ICdjKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRGVsYXllZCBwcmludGluZyAoJWEsICV0KSAqKVxuICB8IEFjY19mbHVzaCAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgICAgICAgICAgICAgICgqIEZsdXNoICopXG4gIHwgQWNjX2ludmFsaWRfYXJnICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZ1xuICAgICAgKCogUmFpc2UgSW52YWxpZF9hcmd1bWVudCBtc2cgKilcbiAgfCBFbmRfb2ZfYWNjXG5cbigqIExpc3Qgb2YgaGV0ZXJvZ2VuZW91cyB2YWx1ZXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgc2NhbmYgY2FsbGJhY2sgYXJndW1lbnRzLiAqKVxudHlwZSAoJ2EsICdiKSBoZXRlcl9saXN0ID1cbiAgfCBDb25zIDogJ2MgKiAoJ2EsICdiKSBoZXRlcl9saXN0IC0+ICgnYyAtPiAnYSwgJ2IpIGhldGVyX2xpc3RcbiAgfCBOaWwgOiAoJ2IsICdiKSBoZXRlcl9saXN0XG5cbigqIEV4aXN0ZW50aWFsIEJsYWNrIEJveGVzLiAqKVxuKCogVXNlZCB0byBhYnN0cmFjdCBzb21lIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVycy4gKilcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkZGluZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiID0gUGFkZGluZ19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkcHJlYyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiID0gUGFkcHJlY19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAneikgcHJlY2lzaW9uICogKCd6LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYiA9IFBhZGRpbmdfZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcGFkZGluZyAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiID0gUHJlY2lzaW9uX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZHByZWNfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiID0gUGFkcHJlY19mbXRfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3AgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiXG5cbigqIEFic3RyYWN0IHRoZSAnYSBhbmQgJ2QgcGFyYW1ldGVycyBvZiBhbiBmbXQuICopXG4oKiBPdXRwdXQgdHlwZSBvZiB0aGUgZm9ybWF0IHBhcnNpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYiA9IEZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9mb3JtYXRfZ2VuIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYiA9IEZtdF9mbXR0eV9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmIgPSBGbXR0eV9mbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdHR5ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgYWxsIGZtdHR5IHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBmb3JtYXQgdHlwZXMuICopXG50eXBlIGZtdHR5X2ViYiA9IEZtdHR5X0VCQiA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPiBmbXR0eV9lYmJcblxuKCogQWJzdHJhY3QgYWxsIHBhZGRpbmcgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHBhZGRpbmdzLiAqKVxudHlwZSBwYWRkaW5nX2ViYiA9IFBhZGRpbmdfRUJCIDogKCdhLCAnYikgcGFkZGluZyAtPiBwYWRkaW5nX2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcHJlY2lzaW9uIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwcmVjaXNpb25zLiAqKVxudHlwZSBwcmVjaXNpb25fZWJiID0gUHJlY2lzaW9uX0VCQiA6ICgnYSwgJ2IpIHByZWNpc2lvbiAtPiBwcmVjaXNpb25fZWJiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29uc3RhbnRzICopXG5cbigqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBmbG9hdCBwcmludGluZy4gKilcbmxldCBkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udiA9XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgfCBGbG9hdF9oIHwgRmxvYXRfSFxuICB8IEZsb2F0X0NGIC0+IC02XG4gICgqIEZvciAlaCAlSCBhbmQgJSNGIGZvcm1hdHMsIGEgbmVnYXRpdmUgcHJlY2lzaW9uIG1lYW5zIFwiYXMgbWFueSBkaWdpdHMgYXNcbiAgICAgbmVjZXNzYXJ5XCIuICBGb3IgdGhlIG90aGVyIEZQIGZvcm1hdHMsIHdlIHRha2UgdGhlIGFic29sdXRlIHZhbHVlXG4gICAgIG9mIHRoZSBwcmVjaXNpb24sIGhlbmNlIDYgZGlnaXRzIGJ5IGRlZmF1bHQuICopXG4gIHwgRmxvYXRfRiAtPiAxMlxuICAoKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgT0NhbWwgZmxvYXQgcHJpbnRpbmcgKCVGKS4gKilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFeHRlcm5hbHMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0OiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50OiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQzMjogc3RyaW5nIC0+IGludDMyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQzMl9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X25hdGl2ZWludDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50NjQ6IHN0cmluZyAtPiBpbnQ2NCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50NjRfZm9ybWF0XCJcbmV4dGVybmFsIGhleHN0cmluZ19vZl9mbG9hdDogZmxvYXQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdFwiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAoKiBUb29scyB0byBwcmV0dHktcHJpbnQgZm9ybWF0cyAqKVxuXG4oKiBUeXBlIG9mIGV4dGVuc2libGUgY2hhcmFjdGVyIGJ1ZmZlcnMuICopXG50eXBlIGJ1ZmZlciA9IHtcbiAgbXV0YWJsZSBpbmQgOiBpbnQ7XG4gIG11dGFibGUgYnl0ZXMgOiBieXRlcztcbn1cblxuKCogQ3JlYXRlIGEgZnJlc2ggYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jcmVhdGUgaW5pdF9zaXplID0geyBpbmQgPSAwOyBieXRlcyA9IEJ5dGVzLmNyZWF0ZSBpbml0X3NpemUgfVxuXG4oKiBDaGVjayBzaXplIG9mIHRoZSBidWZmZXIgYW5kIGdyb3cgaXQgaWYgbmVlZGVkLiAqKVxubGV0IGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBvdmVyaGVhZCA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmLmJ5dGVzIGluXG4gIGxldCBtaW5fbGVuID0gYnVmLmluZCArIG92ZXJoZWFkIGluXG4gIGlmIG1pbl9sZW4gPiBsZW4gdGhlbiAoXG4gICAgbGV0IG5ld19sZW4gPSBtYXggKGxlbiAqIDIpIG1pbl9sZW4gaW5cbiAgICBsZXQgbmV3X3N0ciA9IEJ5dGVzLmNyZWF0ZSBuZXdfbGVuIGluXG4gICAgQnl0ZXMuYmxpdCBidWYuYnl0ZXMgMCBuZXdfc3RyIDAgbGVuO1xuICAgIGJ1Zi5ieXRlcyA8LSBuZXdfc3RyO1xuICApXG5cbigqIEFkZCB0aGUgY2hhcmFjdGVyIGBjJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfY2hhciBidWYgYyA9XG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiAxO1xuICBCeXRlcy5zZXQgYnVmLmJ5dGVzIGJ1Zi5pbmQgYztcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgMVxuXG4oKiBBZGQgdGhlIHN0cmluZyBgcycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX3N0cmluZyBidWYgcyA9XG4gIGxldCBzdHJfbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBzdHJfbGVuO1xuICBTdHJpbmcuYmxpdCBzIDAgYnVmLmJ5dGVzIGJ1Zi5pbmQgc3RyX2xlbjtcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgc3RyX2xlblxuXG4oKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY29udGVudHMgYnVmID1cbiAgQnl0ZXMuc3ViX3N0cmluZyBidWYuYnl0ZXMgMCBidWYuaW5kXG5cbigqKiopXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciBjb252ZXJzaW9uIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9pY29udiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCB8IEludF9DZCAtPiAnZCcgfCBJbnRfaSB8IEludF9waSB8IEludF9zaVxuICB8IEludF9DaSAtPiAnaScgfCBJbnRfeCB8IEludF9DeCAtPiAneCcgfCBJbnRfWCB8IEludF9DWCAtPiAnWCcgfCBJbnRfb1xuICB8IEludF9DbyAtPiAnbycgfCBJbnRfdSB8IEludF9DdSAtPiAndSdcblxuKCogQ29udmVydCBhIGZsb2F0IGNvbnZlcnNpb24gdG8gY2hhci4gKilcbigqIGBjRicgd2lsbCBiZSAnRicgZm9yIGRpc3BsYXlpbmcgZm9ybWF0IGFuZCAnZycgdG8gY2FsbCBsaWJjIHByaW50ZiAqKVxubGV0IGNoYXJfb2ZfZmNvbnYgPyhjRj0nRicpIGZjb252ID0gbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIC0+ICdmJyB8IEZsb2F0X2UgLT4gJ2UnXG4gIHwgRmxvYXRfRSAtPiAnRScgfCBGbG9hdF9nIC0+ICdnJ1xuICB8IEZsb2F0X0cgLT4gJ0cnIHwgRmxvYXRfRiAtPiBjRlxuICB8IEZsb2F0X2ggLT4gJ2gnIHwgRmxvYXRfSCAtPiAnSCdcbiAgfCBGbG9hdF9DRiAtPiAnRidcblxuXG4oKiBDb252ZXJ0IGEgc2Nhbm5pbmcgY291bnRlciB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfY291bnRlciBjb3VudGVyID0gbWF0Y2ggY291bnRlciB3aXRoXG4gIHwgTGluZV9jb3VudGVyICAtPiAnbCdcbiAgfCBDaGFyX2NvdW50ZXIgIC0+ICduJ1xuICB8IFRva2VuX2NvdW50ZXIgLT4gJ04nXG5cbigqKiopXG5cbigqIFByaW50IGEgY2hhcl9zZXQgaW4gYSBidWZmZXIgd2l0aCB0aGUgT0NhbWwgZm9ybWF0IGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0ID1cbiAgbGV0IHJlYyBwcmludF9zdGFydCBzZXQgPVxuICAgIGxldCBpc19hbG9uZSBjID1cbiAgICAgIGxldCBiZWZvcmUsIGFmdGVyID0gQ2hhci4oY2hyIChjb2RlIGMgLSAxKSwgY2hyIChjb2RlIGMgKyAxKSkgaW5cbiAgICAgIGlzX2luX2NoYXJfc2V0IHNldCBjXG4gICAgICAmJiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCBiZWZvcmUgJiYgaXNfaW5fY2hhcl9zZXQgc2V0IGFmdGVyKSBpblxuICAgIGlmIGlzX2Fsb25lICddJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nO1xuICAgIHByaW50X291dCBzZXQgMTtcbiAgICBpZiBpc19hbG9uZSAnLScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICctJztcbiAgYW5kIHByaW50X291dCBzZXQgaSA9XG4gICAgaWYgaSA8IDI1NiB0aGVuXG4gICAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW4gcHJpbnRfZmlyc3Qgc2V0IGlcbiAgICAgIGVsc2UgcHJpbnRfb3V0IHNldCAoaSArIDEpXG4gIGFuZCBwcmludF9maXJzdCBzZXQgaSA9XG4gICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnXFwyNTUnIC0+IHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICB8ICddJyB8ICctJyAtPiBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgfCBfIC0+IHByaW50X3NlY29uZCBzZXQgKGkgKyAxKTtcbiAgYW5kIHByaW50X3NlY29uZCBzZXQgaSA9XG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuXG4gICAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICAgIHwgJ1xcMjU1JyAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTQ7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICAgIHwgJ10nIHwgJy0nIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgICB8IF8gd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAyKTtcbiAgICAgIHwgXyAtPlxuICAgICAgICBwcmludF9pbiBzZXQgKGkgLSAxKSAoaSArIDIpO1xuICAgIGVsc2UgKFxuICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICApXG4gIGFuZCBwcmludF9pbiBzZXQgaSBqID1cbiAgICBpZiBqID0gMjU2IHx8IG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBqKSkgdGhlbiAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGludF9vZl9jaGFyICctJyk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaiAtIDEpO1xuICAgICAgaWYgaiA8IDI1NiB0aGVuIHByaW50X291dCBzZXQgKGogKyAxKTtcbiAgICApIGVsc2VcbiAgICAgIHByaW50X2luIHNldCBpIChqICsgMSk7XG4gIGFuZCBwcmludF9jaGFyIGJ1ZiBpID0gbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnJScgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIHwgJ0AnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICdAJztcbiAgICB8IGMgICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGluXG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1snO1xuICBwcmludF9zdGFydCAoXG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgJ1xcMDAwJ1xuICAgIHRoZW4gKCBidWZmZXJfYWRkX2NoYXIgYnVmICdeJzsgcmV2X2NoYXJfc2V0IGNoYXJfc2V0IClcbiAgICBlbHNlIGNoYXJfc2V0XG4gICk7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nXG5cbigqKiopXG5cbigqIFByaW50IGEgcGFkdHkgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWR0eSBidWYgcGFkdHkgPSBtYXRjaCBwYWR0eSB3aXRoXG4gIHwgTGVmdCAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSdcbiAgfCBSaWdodCAtPiAoKVxuICB8IFplcm9zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJzAnXG5cbigqIFByaW50IHRoZSAnXycgb2YgYW4gaWdub3JlZCBmbGFnIGlmIG5lZWRlZC4gKilcbmxldCBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZyA9XG4gIGlmIGlnbl9mbGFnIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXydcblxuKCoqKilcblxubGV0IGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgd2lkdGggLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHdpZHRoKVxuXG4oKioqKVxuXG4oKiBQcmludCBwYWRkaW5nIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkZGluZyA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwYWRkaW5nIC0+IHVuaXQgPVxuZnVuIGJ1ZiBwYWQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+ICgpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCBuKSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcqJ1xuXG4oKiBQcmludCBwcmVjaXNpb24gaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wcmVjaXNpb24gOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcHJlY2lzaW9uIC0+IHVuaXQgPVxuICBmdW4gYnVmIHByZWMgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uIC0+ICgpXG4gIHwgTGl0X3ByZWNpc2lvbiBuIC0+XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wcmVjaXNpb24gLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIuKlwiXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBvciAnIycgYXNzb2NpYXRlZCB0byBhbiBpbnQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X3BkIHwgSW50X3BpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgSW50X3NkIHwgSW50X3NpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgSW50X0N4IHwgSW50X0NYIHwgSW50X0NvIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEludF9kIHwgSW50X2kgfCBJbnRfeCB8IEludF9YIHwgSW50X28gfCBJbnRfdSAtPiAoKVxuXG4oKiBQcmludCBhbiBjb21wbGV0ZSBpbnQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlMy4qZFwiKS4gKilcbmxldCBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBhbmQvb3IgJyMnIGFzc29jaWF0ZWQgdG8gYSBmbG9hdCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udiA9XG4gIGJlZ2luIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZmxhZ19wIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgRmxvYXRfZmxhZ19zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgRmxvYXRfZmxhZ18gLT4gKCkgZW5kO1xuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X0NGIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0dcbiAgfCBGbG9hdF9GIHwgRmxvYXRfaCB8IEZsb2F0X0ggLT4gKClcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmbG9hdCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUrKi4zZlwiKS4gKilcbmxldCBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2Zjb252IGZjb252KVxuXG4oKiBDb21wdXRlIHRoZSBsaXRlcmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIEZvcm1hdHRpbmdfbGl0LiAqKVxuKCogVXNlZCBieSBQcmludGYgYW5kIFNjYW5mIHdoZXJlIGZvcm1hdHRpbmcgaXMgbm90IGludGVycHJldGVkLiAqKVxubGV0IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmb3JtYXR0aW5nX2xpdCA9IG1hdGNoIGZvcm1hdHRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAtPiBcIkBdXCJcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAtPiBcIkB9XCJcbiAgfCBCcmVhayAoc3RyLCBfLCBfKSAgICAtPiBzdHJcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAtPiBcIkA/XCJcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAtPiBcIkBcXG5cIlxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgIC0+IFwiQC5cIlxuICB8IE1hZ2ljX3NpemUgKHN0ciwgXykgIC0+IHN0clxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgIC0+IFwiQEBcIlxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgIC0+IFwiQCVcIlxuICB8IFNjYW5faW5kaWMgYyAtPiBcIkBcIiBeIChTdHJpbmcubWFrZSAxIGMpXG5cbigqKiopXG5cbigqIFByaW50IGEgbGl0ZXJhbCBjaGFyIGluIGEgYnVmZmVyLCBlc2NhcGUgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHIgPSBtYXRjaCBjaHIgd2l0aFxuICB8ICclJyAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlJVwiXG4gIHwgXyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGNoclxuXG4oKiBQcmludCBhIGxpdGVyYWwgc3RyaW5nIGluIGEgYnVmZmVyLCBlc2NhcGUgYWxsICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHIgPVxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzdHIgLSAxIGRvXG4gICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgc3RyLltpXVxuICBkb25lXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwcmV0dHktcHJpbnRpbmcgKilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgdHlwZSAoYW4gZm10dHkpIGluIGEgYnVmZmVyLiAqKVxubGV0IHJlYyBicHJpbnRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgICBidWZmZXIgLT4gKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiB1bml0ID1cbmZ1biBidWYgZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVjXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlaVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDMyX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVsaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJW5pXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlTGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZsb2F0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVmXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQm9vbF90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbHBoYV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlYVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFRoZXRhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV0XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQW55X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJT9cIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBSZWFkZXJfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlclwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVfclwiO1xuICAgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIle1wiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlfVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHksIF8sIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJShcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRW5kX29mX2ZtdHR5IC0+ICgpXG5cbigqKiopXG5cbmxldCByZWMgaW50X29mX2N1c3RvbV9hcml0eSA6IHR5cGUgYSBiIGMgLlxuICAoYSwgYiwgYykgY3VzdG9tX2FyaXR5IC0+IGludCA9XG4gIGZ1bmN0aW9uXG4gIHwgQ3VzdG9tX3plcm8gLT4gMFxuICB8IEN1c3RvbV9zdWNjIHggLT4gMSArIGludF9vZl9jdXN0b21fYXJpdHkgeFxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfZm10IGJ1ZiBmbXQgPVxuICBsZXQgcmVjIGZtdGl0ZXIgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYm9vbCAtPiB1bml0ID1cbiAgZnVuIGZtdCBpZ25fZmxhZyAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdzJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdTJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ2wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICduJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdMJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdDJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdhJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAndCc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICBmb3IgX2kgPSAxIHRvIGludF9vZl9jdXN0b21fYXJpdHkgYXJpdHkgZG9cbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICc/JztcbiAgICAgIGRvbmU7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBSZWFkZXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncic7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUhXCI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0cjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICd7JztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICd9JztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKCc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgd2lkdGhfb3B0OyBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0O1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfY291bnRlciBjb3VudGVyKTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgXCIwY1wiOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICAgIGZtdGl0ZXIgZm10JyB0cnVlO1xuXG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgKHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0KTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZm10aW5nX2dlbiB3aXRoXG4gICAgICB8IE9wZW5fdGFnIChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkB7XCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIHwgT3Blbl9ib3ggKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQFtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgZW5kO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+ICgpXG5cbiAgaW4gZm10aXRlciBmbXQgZmFsc2VcblxuKCoqKilcblxuKCogQ29udmVydCBhIGZvcm1hdCB0byBzdHJpbmcuICopXG5sZXQgc3RyaW5nX29mX2ZtdCBmbXQgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10IGJ1ZiBmbXQ7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZSBleHRyYWN0aW9uICopXG5cbnR5cGUgKF8sIF8pIGVxID0gUmVmbCA6ICgnYSwgJ2EpIGVxXG5cbigqIEludmFyaWFudDogdGhpcyBmdW5jdGlvbiBpcyB0aGUgaWRlbnRpdHkgb24gdmFsdWVzLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBpZiAodHkxLCB0eTIpIGhhdmUgZXF1YWwgdmFsdWVzLCB0aGVuXG4gICAodHJhbnMgKHN5bW0gdHkxKSB0eTIpIHJlc3BlY3RzIHRoZSAndHJhbnMnIHByZWNvbmRpdGlvbi4gKilcbmxldCByZWMgc3ltbSA6IHR5cGUgYTEgYjEgYzEgZDEgZTEgZjEgYTIgYjIgYzIgZDIgZTIgZjIgLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXR0eV9yZWxcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT4gQ2hhcl90eSAoc3ltbSByZXN0KVxuICB8IEludF90eSByZXN0IC0+IEludF90eSAoc3ltbSByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT4gSW50MzJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+IEludDY0X3R5IChzeW1tIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gTmF0aXZlaW50X3R5IChzeW1tIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPiBGbG9hdF90eSAoc3ltbSByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPiBCb29sX3R5IChzeW1tIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT4gU3RyaW5nX3R5IChzeW1tIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPiBUaGV0YV90eSAoc3ltbSByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT4gQWxwaGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPiBBbnlfdHkgKHN5bW0gcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPiBSZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+IElnbm9yZWRfcmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyLCB0eTEsIHN5bW0gcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbmxldCByZWMgZm10dHlfcmVsX2RldCA6IHR5cGUgYTEgYiBjIGQxIGUxIGYxIGEyIGQyIGUyIGYyIC5cbiAgKGExLCBiLCBjLCBkMSwgZTEsIGYxLFxuICAgYTIsIGIsIGMsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoZjEsIGYyKSBlcSAtPiAoYTEsIGEyKSBlcSlcbiAgKiAoKGExLCBhMikgZXEgLT4gKGYxLCBmMikgZXEpXG4gICogKChlMSwgZTIpIGVxIC0+IChkMSwgZDIpIGVxKVxuICAqICgoZDEsIGQyKSBlcSAtPiAoZTEsIGUyKSBlcSlcbj0gZnVuY3Rpb25cbiAgfCBFbmRfb2ZfZm10dHkgLT5cbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbClcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgRm9ybWF0X2FyZ190eSAoX3R5LCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgbGV0IGFnLCBnYSwgZGosIGpkID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZyBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGdhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gbGV0IFJlZmwgPSBkaiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGpkIFJlZmwgaW4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG5cbigqIFByZWNvbmRpdGlvbjogd2UgYXNzdW1lIHRoYXQgdGhlIHR3byBmbXR0eV9yZWwgYXJndW1lbnRzIGhhdmUgZXF1YWxcbiAgIHZhbHVlcyAoYXQgcG9zc2libHkgZGlzdGluY3QgdHlwZXMpOyB0aGlzIGludmFyaWFudCBjb21lcyBmcm9tIHRoZSB3YXlcbiAgIGZtdHR5X3JlbCB3aXRuZXNzZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSB0eXBlLWNoZWNrZXJcblxuICAgVGhlIGNvZGUgYmVsb3cgdXNlcyAoYXNzZXJ0IGZhbHNlKSB3aGVuIHRoaXMgYXNzdW1wdGlvbiBpcyBicm9rZW4uIFRoZVxuICAgY29kZSBwYXR0ZXJuIGlzIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgfCBGb28geCwgRm9vIHkgLT5cbiAgICAgICAoKiBjYXNlIHdoZXJlIGluZGVlZCBib3RoIHZhbHVlc1xuICAgICAgICAgIHN0YXJ0IHdpdGggY29uc3RydWN0b3IgRm9vICopXG4gICAgIHwgRm9vIF8sIF9cbiAgICAgfCBfLCBGb28gXyAtPlxuICAgICAgICgqIGRpZmZlcmVudCBoZWFkIGNvbnN0cnVjdG9yczogYnJva2VuIHByZWNvbmRpdGlvbiAqKVxuICAgICAgIGFzc2VydCBmYWxzZVxuKilcbmFuZCB0cmFucyA6IHR5cGVcbiAgYTEgYjEgYzEgZDEgZTEgZjFcbiAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgYTMgYjMgYzMgZDMgZTMgZjNcbi5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG4tPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbj0gZnVuIHR5MSB0eTIgLT4gbWF0Y2ggdHkxLCB0eTIgd2l0aFxuICB8IENoYXJfdHkgcmVzdDEsIENoYXJfdHkgcmVzdDIgLT4gQ2hhcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgU3RyaW5nX3R5IHJlc3QxLCBTdHJpbmdfdHkgcmVzdDIgLT4gU3RyaW5nX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBCb29sX3R5IHJlc3QxLCBCb29sX3R5IHJlc3QyIC0+IEJvb2xfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludF90eSByZXN0MSwgSW50X3R5IHJlc3QyIC0+IEludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50MzJfdHkgcmVzdDEsIEludDMyX3R5IHJlc3QyIC0+IEludDMyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQ2NF90eSByZXN0MSwgSW50NjRfdHkgcmVzdDIgLT4gSW50NjRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IE5hdGl2ZWludF90eSByZXN0MSwgTmF0aXZlaW50X3R5IHJlc3QyIC0+IE5hdGl2ZWludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRmxvYXRfdHkgcmVzdDEsIEZsb2F0X3R5IHJlc3QyIC0+IEZsb2F0X3R5ICh0cmFucyByZXN0MSByZXN0MilcblxuICB8IEFscGhhX3R5IHJlc3QxLCBBbHBoYV90eSByZXN0MiAtPiBBbHBoYV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQWxwaGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbHBoYV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgVGhldGFfdHkgcmVzdDEsIFRoZXRhX3R5IHJlc3QyIC0+IFRoZXRhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBUaGV0YV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFRoZXRhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBBbnlfdHkgcmVzdDEsIEFueV90eSByZXN0MiAtPiBBbnlfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFueV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFueV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgUmVhZGVyX3R5IHJlc3QxLCBSZWFkZXJfdHkgcmVzdDIgLT4gUmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBSZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBSZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QxLCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MiAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIElnbm9yZWRfcmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfYXJnX3R5ICh0eTEsIHJlc3QxKSwgRm9ybWF0X2FyZ190eSAodHkyLCByZXN0MikgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0cmFucyB0eTEgdHkyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfYXJnX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X2FyZ190eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTEyLCByZXN0MSksXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIxLCB0eTIyLCByZXN0MikgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEyKSB0eTIxIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MjIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9zdWJzdF90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9zdWJzdF90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRW5kX29mX2ZtdHR5LCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG4gIHwgRW5kX29mX2ZtdHR5LCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEVuZF9vZl9mbXR0eSAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYyBmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBFeHRyYWN0IHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uIChhbiBmbXR0eSkgb2YgYSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfZm10IDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuXG4gIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQzMl90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoTmF0aXZlaW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDY0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEZsb2F0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuXG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAgICAgICAgICAgLT5cbiAgICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChCb29sX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQWxwaGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gQWxwaGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgIC0+IFRoZXRhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAgICAtPiBmbXR0eV9vZl9jdXN0b20gYXJpdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFJlYWRlciByZXN0ICAgICAgICAgICAgICAgIC0+IFJlYWRlcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGb3JtYXRfYXJnIChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5LCB0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGbHVzaCByZXN0ICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+IFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT4gSW50X3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAtPiBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdFxuICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpICAtPlxuICAgIGNvbmNhdF9mbXR0eSAoZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gZm10aW5nX2dlbikgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgLT4gRW5kX29mX2ZtdHR5XG5cbmFuZCBmbXR0eV9vZl9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICh5LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gYXJpdHkgZm10dHkgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IGZtdHR5XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT4gQW55X3R5IChmbXR0eV9vZl9jdXN0b20gYXJpdHkgZm10dHkpXG5cbigqIEV4dHJhY3QgdGhlIGZtdHR5IG9mIGFuIGlnbm9yZWQgcGFyYW1ldGVyIGZvbGxvd2VkIGJ5IHRoZSByZXN0IG9mXG4gICB0aGUgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gY29uY2F0X2ZtdHR5IGZtdHR5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gSWdub3JlZF9yZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwYWRkaW5nIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKnNcIikuICopXG5hbmQgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAgLT4gZm10dHlcbiAgICB8IExpdF9wYWRkaW5nIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wYWRkaW5nIF8gLT4gSW50X3R5IGZtdHR5XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwcmVjaXNpb24gaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikuKilcbmFuZCBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMgd2l0aFxuICAgIHwgTm9fcHJlY2lzaW9uICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcHJlY2lzaW9uIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wcmVjaXNpb24gICAtPiBJbnRfdHkgZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwaW5nICopXG5cbigqIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBhIGdpdmVuIGZvcm1hdCB0eXBlLiAqKVxuZXhjZXB0aW9uIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIHBhZGRpbmcuICopXG4oKiBUYWtlIGFuIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiB0aGUgaW50ZWdlciBzaG91bGQgYmUga2VwdCBhcyBhcmd1bWVudC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkZGluZyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCwgZm10dHkgd2l0aFxuICB8IE5vX3BhZGRpbmcsIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKE5vX3BhZGRpbmcsIGZtdHR5KVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKExpdF9wYWRkaW5nIChwYWR0eSx3KSxmbXR0eSlcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgSW50X3R5IHJlc3QgLT4gUGFkZGluZ19mbXR0eV9FQkIgKEFyZ19wYWRkaW5nIHBhZHR5LHJlc3QpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIENvbnZlcnQgYSAodXBhZGRpbmcsIHVwcmVjaXNpb24pIHRvIGEgKHBhZGRpbmcsIHByZWNpc2lvbikuICopXG4oKiBUYWtlIG9uZSBvciB0d28gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIG5lZWRlZC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkcHJlYyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IHogLlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeikgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYywgdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIE5vX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAsIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTGl0X3ByZWNpc2lvbiBwLCByZXN0KVxuICB8IEFyZ19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEludF90eSByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIEFyZ19wcmVjaXNpb24sIHJlc3QpXG4gIHwgXywgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBJZiB0eXBpbmcgc3VjY2VlZCwgZ2VuZXJhdGUgYSBjb3B5IG9mIHRoZSBmb3JtYXQgd2l0aCB0aGUgc2FtZVxuICAgIHR5cGUgcGFyYW1ldGVycyBhcyB0aGUgZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCByZWMgdHlwZV9mb3JtYXQgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgd2l0aFxuICB8IEZtdF9mbXR0eV9FQkIgKGZtdCcsIEVuZF9vZl9mbXR0eSkgLT4gZm10J1xuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXRfZ2VuIDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggZm10LCBmbXR0eSB3aXRoXG4gIHwgQ2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXIgZm10JywgZm10dHknKVxuICB8IENhbWxfY2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfY2hhciBmbXQnLCBmbXR0eScpXG4gIHwgU3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfc3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50MzJfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDY0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgRmxvYXRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEJvb2wgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEJvb2xfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEJvb2wgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbHVzaCBmbXRfcmVzdCwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGbHVzaCBmbXQnLCBmbXR0eScpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10JyksIGZtdHR5JylcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXJfbGl0ZXJhbCAoY2hyLCBmbXQnKSwgZm10dHknKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5JywgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5MSwgX3N1Yl9mbXR0eTIsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkxKSB0aGVuXG4gICAgICByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID1cbiAgICAgIHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCAoZXJhc2VfcmVsIGZtdHR5X3Jlc3QpXG4gICAgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eTEsIGZtdCcpLCBmbXR0eScpXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBBbHBoYSBmbXRfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChBbHBoYSBmbXQnLCBmbXR0eScpXG4gIHwgVGhldGEgZm10X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoVGhldGEgZm10JywgZm10dHknKVxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nX2dlbiwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9mb3JtYXR0aW5nX2dlbiBmb3JtYXR0aW5nX2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciBmbXRfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoUmVhZGVyIGZtdCcsIGZtdHR5JylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXRfcmVzdCksIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpLCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQnKSwgZm10dHknKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW0gaWduIHJlc3QgZm10dHlfcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdCAtPiBGbXRfZm10dHlfRUJCIChFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0KVxuXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhMSBhMyBiMSBiMyBjMSBjMyBkMSBkMyBlMSBlMiBlMyBmMSBmMiBmMyAuXG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGYxLCBiMSwgYzEsIGUxLCBlMiwgZjIpIGZtdCAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eSAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXRfZm10dHlfZWJiID1cbmZ1biBmb3JtYXR0aW5nX2dlbiBmbXQwIGZtdHR5MCAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcblxuKCogVHlwZSBhbiBJZ25vcmVkX3BhcmFtIG5vZGUgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbSA6IHR5cGUgcCBxIHggeSB6IHQgdSB2IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgeSwgeiwgdCwgcSwgcCkgaWdub3JlZCAtPlxuICAgIChwLCB5LCB6LCBxLCB1LCB2KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10X2ZtdHR5X2ViYiA9XG5mdW4gaWduIGZtdCBmbXR0eSAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50IF8gICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50MzIgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfbmF0aXZlaW50IF8gICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50NjQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZmxvYXQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgKElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSkgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5JywgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSkgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5IGZtdCBmbXR0eSBpblxuICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQnKSxcbiAgICAgICAgICAgICAgICAgICBmbXR0eScpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT4gKFxuICAgIG1hdGNoIGZtdHR5IHdpdGhcbiAgICB8IElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10JyksIGZtdHR5JylcbiAgICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG5cbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIDogdHlwZSBhMSBhMiBiMSBiMiBjMSBjMiBkMSBkMiBlMSBlMiBmMSBmMiAuXG4gICAgKGEyLCBiMiwgYzIsIGQyLCBkMiwgYTIpIGlnbm9yZWQgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGlnbiBmbXQgZm10dHkgLT5cbiAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IGluXG4gIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbiwgZm10JyksIGZtdHR5JylcblxuKCogVHlwaW5nIG9mIHRoZSBjb21wbGV4IGNhc2U6IFwiJV8oLi4uJSlcIi4gKilcbmFuZCB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiA6IHR5cGUgdyB4IHkgeiBwIHMgdCB1IGEgYiBjIGQgZSBmIC5cbiAgICAodywgeCwgeSwgeiwgcywgcCkgZm10dHkgLT5cbiAgICAocCwgeCwgeSwgcywgdCwgdSkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eV9mbXRfZWJiID1cbmZ1biBzdWJfZm10dHkgZm10IGZtdHR5IC0+IG1hdGNoIHN1Yl9mbXR0eSwgZm10dHkgd2l0aFxuICB8IENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQ2hhcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0LCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQzMl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQzMl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCwgSW50NjRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0LCBGbG9hdF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGbG9hdF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQm9vbF90eSBzdWJfZm10dHlfcmVzdCwgQm9vbF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChCb29sX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBBbHBoYV90eSBzdWJfZm10dHlfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChUaGV0YV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eSwgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWIyX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWIyX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5Jywgc3ViX2ZtdHR5X3Jlc3QnKSwgZm10JylcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHksICBzdWIyX2ZtdHR5LCAgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgICgqIFRPRE8gZGVmaW5lIEZtdHR5X3JlbF9FQkIgdG8gcmVtb3ZlIHRob3NlIGVyYXNlX3JlbCAqKVxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IHN1Yl9mbXR0eScgPSB0cmFucyAoc3ltbSBzdWIxX2ZtdHR5Jykgc3ViMl9mbXR0eScgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCBzdWJfZm10dHknIGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gKGVyYXNlX3JlbCBzdWJfZm10dHlfcmVzdCkgZm10IGZtdHR5X3Jlc3RcbiAgICBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbSBzdWJfZm10dHlfcmVzdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdCcpXG4gIHwgRW5kX29mX2ZtdHR5LCBmbXR0eSAtPlxuICAgIEZtdHR5X2ZtdF9FQkIgKEVuZF9vZl9mbXR0eSwgdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSlcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBgcmVjYXN0YCBpcyBhIGJpdCBkaXNhcHBvaW50aW5nLiBUaGVcbiAgIGludmFyaWFudCBwcm92aWRlZCBieSB0aGUgdHlwZSBhcmUgdmVyeSBzdHJvbmc6IHRoZSBpbnB1dCBmb3JtYXQnc1xuICAgdHlwZSBpcyBpbiByZWxhdGlvbiB0byB0aGUgb3V0cHV0IHR5cGUncyBhcyB3aXRuZXNzZWQgYnkgdGhlXG4gICBmbXR0eV9yZWwgYXJndW1lbnQuIE9uZSB3b3VsZCBhdCBmaXJzdCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgdG90YWwsIGFuZCBpbXBsZW1lbnRhYmxlIGJ5IGV4aGF1c3RpdmUgcGF0dGVybiBtYXRjaGluZy4gSW5zdGVhZCxcbiAgIHdlIHJldXNlIHRoZSBoaWdobHkgcGFydGlhbCBhbmQgbXVjaCBsZXNzIHdlbGwtZGVmaW5lZCBmdW5jdGlvblxuICAgYHR5cGVfZm9ybWF0YCB0aGF0IGhhcyBsb3N0IGFsbCBrbm93bGVkZ2Ugb2YgdGhlIGNvcnJlc3BvbmRlbmNlXG4gICBiZXR3ZWVuIHRoZSBhcmd1bWVudCdzIHR5cGVzLlxuXG4gICBCZXNpZGVzIHRoZSBmYWN0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXVzZXMgYSBsb3Qgb2YgdGhlXG4gICBgdHlwZV9mb3JtYXRgIGxvZ2ljIChlZy46IHNlZWluZyBJbnRfdHkgaW4gdGhlIGZtdHR5IHBhcmFtZXRlciBkb2VzXG4gICBub3QgbGV0IHlvdSBtYXRjaCBvbiBJbnQgb25seSwgYXMgeW91IG1heSBpbiBmYWN0IGhhdmUgRmxvYXRcbiAgIChBcmdfcGFkZGluZywgLi4uKSAoXCIlLipkXCIpIGJlZ2lubmluZyB3aXRoIGFuIEludF90eSksIGl0IGlzIGFsc29cbiAgIGEgcGFydGlhbCBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgdHlwaW5nIGluZm9ybWF0aW9uIGluIGEgZm9ybWF0IGlzXG4gICBub3QgcXVpdGUgZW5vdWdoIHRvIHJlY29uc3RydWN0IGl0IHVuYW1iaWd1b3VzbHkuIEZvciBleGFtcGxlLCB0aGVcbiAgIGZvcm1hdCB0eXBlcyBvZiBcIiVkJV9yXCIgYW5kIFwiJV9yJWRcIiBoYXZlIHRoZSBzYW1lIGZvcm1hdDZcbiAgIHBhcmFtZXRlcnMsIGJ1dCB0aGV5IGFyZSBub3QgYXQgYWxsIGV4Y2hhbmdlYWJsZSwgYW5kIHB1dHRpbmcgb25lXG4gICBpbiBwbGFjZSBvZiB0aGUgb3RoZXIgbXVzdCByZXN1bHQgaW4gYSBkeW5hbWljIGZhaWx1cmUuXG5cbiAgIEdpdmVuIHRoYXQ6XG4gICAtIHdlJ2QgaGF2ZSB0byBkdXBsaWNhdGUgYSBsb3Qgb2Ygbm9uLXRyaXZpYWwgdHlwaW5nIGxvZ2ljIGZyb20gdHlwZV9mb3JtYXRcbiAgIC0gdGhpcyB3b3VsZG4ndCBldmVuIGVsaW1pbmF0ZSAoYWxsKSB0aGUgZHluYW1pYyBmYWlsdXJlc1xuICAgd2UgZGVjaWRlZCB0byBqdXN0IHJldXNlIHR5cGVfZm9ybWF0IGRpcmVjdGx5IGZvciBub3cuXG4qKVxubGV0IHJlY2FzdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+XG4gIHR5cGVfZm9ybWF0IGZtdCAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUHJpbnRpbmcgdG9vbHMgKilcblxuKCogQWRkIHBhZGRpbmcgc3BhY2VzIGFyb3VuZCBhIHN0cmluZy4gKilcbmxldCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCBzdHIgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHdpZHRoLCBwYWR0eSA9XG4gICAgYWJzIHdpZHRoLFxuICAgICgqIHdoaWxlIGxpdGVyYWwgcGFkZGluZyB3aWR0aHMgYXJlIGFsd2F5cyBub24tbmVnYXRpdmUsXG4gICAgICAgZHluYW1pY2FsbHktc2V0IHdpZHRocyAoQXJnX3BhZGRpbmcsIGVnLiAlKmQpIG1heSBiZSBuZWdhdGl2ZTtcbiAgICAgICB3ZSBpbnRlcnByZXQgdGhvc2UgYXMgc3BlY2lmeWluZyBhIHBhZGRpbmctdG8tdGhlLWxlZnQ7IHRoaXNcbiAgICAgICBtZWFucyB0aGF0ICcwJyBtYXkgZ2V0IGRyb3BwZWQgZXZlbiBpZiBpdCB3YXMgZXhwbGljaXRseSBzZXQsXG4gICAgICAgYnV0OlxuICAgICAgIC0gdGhpcyBpcyB3aGF0IHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gZG9lcywgYW5kXG4gICAgICAgICB3ZSBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IGlmIHBvc3NpYmxlXG4gICAgICAgLSB3ZSBjb3VsZCBvbmx5IHNpZ25hbCB0aGlzIGlzc3VlIGJ5IGZhaWxpbmcgYXQgcnVudGltZSxcbiAgICAgICAgIHdoaWNoIGlzIG5vdCB2ZXJ5IG5pY2UuLi4gKilcbiAgICBpZiB3aWR0aCA8IDAgdGhlbiBMZWZ0IGVsc2UgcGFkdHkgaW5cbiAgaWYgd2lkdGggPD0gbGVuIHRoZW4gc3RyIGVsc2VcbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSB3aWR0aCAoaWYgcGFkdHkgPSBaZXJvcyB0aGVuICcwJyBlbHNlICcgJykgaW5cbiAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgfCBMZWZ0ICAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgMCBsZW5cbiAgICB8IFJpZ2h0IC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAwICYmIChzdHIuWzBdID0gJysnIHx8IHN0ci5bMF0gPSAnLScgfHwgc3RyLlswXSA9ICcgJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMCBzdHIuWzBdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzICh3aWR0aCAtIGxlbiArIDEpIChsZW4gLSAxKVxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAxICYmIHN0ci5bMF0gPSAnMCcgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzICh3aWR0aCAtIGxlbiArIDIpIChsZW4gLSAyKVxuICAgIHwgWmVyb3MgLT5cbiAgICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIGVuZDtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBBZGQgJzAnIHBhZGRpbmcgdG8gaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKilcbmxldCBmaXhfaW50X3ByZWNpc2lvbiBwcmVjIHN0ciA9XG4gIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIG1hdGNoIHN0ci5bMF0gd2l0aFxuICB8ICgnKycgfCAnLScgfCAnICcpIGFzIGMgd2hlbiBwcmVjICsgMSA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMSkgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAwIGM7XG4gICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzIChwcmVjIC0gbGVuICsgMikgKGxlbiAtIDEpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIHdoZW4gcHJlYyArIDIgPiBsZW4gJiYgbGVuID4gMSAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMikgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzIChwcmVjIC0gbGVuICsgNCkgKGxlbiAtIDIpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIHdoZW4gcHJlYyA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHByZWMgJzAnIGluXG4gICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzIChwcmVjIC0gbGVuKSBsZW47XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCBfIC0+XG4gICAgc3RyXG5cbigqIEVzY2FwZSBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGluZyBjb252ZW50aW9uLiAqKVxubGV0IHN0cmluZ190b19jYW1sX3N0cmluZyBzdHIgPVxuICBsZXQgc3RyID0gU3RyaW5nLmVzY2FwZWQgc3RyIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFxcIicgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfaW50L2ludDMyL25hdGl2ZWludC9pbnQ2NCBmaXJzdCBhcmd1bWVudFxuICAgZnJvbSBhbiBpbnRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfaWNvbnYgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWRcIiB8IEludF9wZCAtPiBcIiUrZFwiIHwgSW50X3NkIC0+IFwiJSBkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVpXCIgfCBJbnRfcGkgLT4gXCIlK2lcIiB8IEludF9zaSAtPiBcIiUgaVwiXG4gIHwgSW50X3ggLT4gXCIleFwiIHwgSW50X0N4IC0+IFwiJSN4XCJcbiAgfCBJbnRfWCAtPiBcIiVYXCIgfCBJbnRfQ1ggLT4gXCIlI1hcIlxuICB8IEludF9vIC0+IFwiJW9cIiB8IEludF9DbyAtPiBcIiUjb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIldVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZMID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVMZFwiIHwgSW50X3BkIC0+IFwiJStMZFwiIHwgSW50X3NkIC0+IFwiJSBMZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlTGlcIiB8IEludF9waSAtPiBcIiUrTGlcIiB8IEludF9zaSAtPiBcIiUgTGlcIlxuICB8IEludF94IC0+IFwiJUx4XCIgfCBJbnRfQ3ggLT4gXCIlI0x4XCJcbiAgfCBJbnRfWCAtPiBcIiVMWFwiIHwgSW50X0NYIC0+IFwiJSNMWFwiXG4gIHwgSW50X28gLT4gXCIlTG9cIiB8IEludF9DbyAtPiBcIiUjTG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJUx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udmwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWxkXCIgfCBJbnRfcGQgLT4gXCIlK2xkXCIgfCBJbnRfc2QgLT4gXCIlIGxkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVsaVwiIHwgSW50X3BpIC0+IFwiJStsaVwiIHwgSW50X3NpIC0+IFwiJSBsaVwiXG4gIHwgSW50X3ggLT4gXCIlbHhcIiB8IEludF9DeCAtPiBcIiUjbHhcIlxuICB8IEludF9YIC0+IFwiJWxYXCIgfCBJbnRfQ1ggLT4gXCIlI2xYXCJcbiAgfCBJbnRfbyAtPiBcIiVsb1wiIHwgSW50X0NvIC0+IFwiJSNsb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252biA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbmRcIiB8IEludF9wZCAtPiBcIiUrbmRcIiB8IEludF9zZCAtPiBcIiUgbmRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJW5pXCIgfCBJbnRfcGkgLT4gXCIlK25pXCIgfCBJbnRfc2kgLT4gXCIlIG5pXCJcbiAgfCBJbnRfeCAtPiBcIiVueFwiIHwgSW50X0N4IC0+IFwiJSNueFwiXG4gIHwgSW50X1ggLT4gXCIlblhcIiB8IEludF9DWCAtPiBcIiUjblhcIlxuICB8IEludF9vIC0+IFwiJW5vXCIgfCBJbnRfQ28gLT4gXCIlI25vXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVudVwiXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfZmxvYXQgZmlyc3QgYXJndW1lbnQgZnJvbSBhIGZsb2F0X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMgPVxuICAgIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgICBsZXQgc3ltYiA9IGNoYXJfb2ZfZmNvbnYgfmNGOidnJyBmY29udiBpblxuICAgIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBwcmVjKTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmIHN5bWI7XG4gICAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG5sZXQgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgcyA9XG4gIG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICBsZXQgZGlnaXRzID1cbiAgICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgIHwgJzAnLi4nOScgLT4gaW5jciBuXG4gICAgICAgIHwgXyAtPiAoKVxuICAgICAgZG9uZTtcbiAgICAgICFuXG4gICAgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAoZGlnaXRzIC0gMSkgLyAzKSBpblxuICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgIGxldCBwdXQgYyA9IEJ5dGVzLnNldCBidWYgIXBvcyBjOyBpbmNyIHBvcyBpblxuICAgIGxldCBsZWZ0ID0gcmVmICgoZGlnaXRzIC0gMSkgbW9kIDMgKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnMCcuLic5JyBhcyBjIC0+XG4gICAgICAgICAgaWYgIWxlZnQgPSAwIHRoZW4gKHB1dCAnXyc7IGxlZnQgOj0gMyk7IGRlY3IgbGVmdDsgcHV0IGNcbiAgICAgIHwgYyAtPiBwdXQgY1xuICAgIGRvbmU7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWZcbiAgfCBfIC0+IHNcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGNvbnZlcnNpb24uICopXG5sZXQgY29udmVydF9pbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50IChmb3JtYXRfb2ZfaWNvbnYgaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQzMiBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQzMiAoZm9ybWF0X29mX2ljb252bCBpY29udikgbilcbmxldCBjb252ZXJ0X25hdGl2ZWludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9uYXRpdmVpbnQgKGZvcm1hdF9vZl9pY29udm4gaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQ2NCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQ2NCAoZm9ybWF0X29mX2ljb252TCBpY29udikgbilcblxuKCogQ29udmVydCBhIGZsb2F0IHRvIHN0cmluZy4gKilcbigqIEZpeCBzcGVjaWFsIGNhc2Ugb2YgXCJPQ2FtbCBmbG9hdCBmb3JtYXRcIi4gKilcbmxldCBjb252ZXJ0X2Zsb2F0IGZjb252IHByZWMgeCA9XG4gIGxldCBoZXggKCkgPVxuICAgIGxldCBzaWduID1cbiAgICAgIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gICAgICB8IEZsb2F0X2ZsYWdfcCAtPiAnKydcbiAgICAgIHwgRmxvYXRfZmxhZ19zIC0+ICcgJ1xuICAgICAgfCBfIC0+ICctJyBpblxuICAgIGhleHN0cmluZ19vZl9mbG9hdCB4IHByZWMgc2lnbiBpblxuICBsZXQgYWRkX2RvdF9pZl9uZWVkZWQgc3RyID1cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgcmVjIGlzX3ZhbGlkIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJy4nIHwgJ2UnIHwgJ0UnIC0+IHRydWVcbiAgICAgICAgfCBfIC0+IGlzX3ZhbGlkIChpICsgMSkgaW5cbiAgICBpZiBpc192YWxpZCAwIHRoZW4gc3RyIGVsc2Ugc3RyIF4gXCIuXCIgaW5cbiAgbGV0IGNhbWxfc3BlY2lhbF92YWwgc3RyID0gbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+IHN0clxuICAgIHwgRlBfaW5maW5pdGUgLT4gaWYgeCA8IDAuMCB0aGVuIFwibmVnX2luZmluaXR5XCIgZWxzZSBcImluZmluaXR5XCJcbiAgICB8IEZQX25hbiAtPiBcIm5hblwiIGluXG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfaCAtPiBoZXggKClcbiAgfCBGbG9hdF9IIC0+IFN0cmluZy51cHBlcmNhc2VfYXNjaWkgKGhleCAoKSlcbiAgfCBGbG9hdF9DRiAtPiBjYW1sX3NwZWNpYWxfdmFsIChoZXggKCkpXG4gIHwgRmxvYXRfRiAtPlxuICAgIGxldCBzdHIgPSBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4IGluXG4gICAgY2FtbF9zcGVjaWFsX3ZhbCAoYWRkX2RvdF9pZl9uZWVkZWQgc3RyKVxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIC0+XG4gICAgZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeFxuXG4oKiBDb252ZXJ0IGEgY2hhciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBmb3JtYXRfY2FtbF9jaGFyIGMgPVxuICBsZXQgc3RyID0gQ2hhci5lc2NhcGVkIGMgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXCcnIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHR5cGUgdG8gc3RyaW5nICopXG5sZXQgc3RyaW5nX29mX2ZtdHR5IGZtdHR5ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBwcmludGluZyBmdW5jdGlvbiAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBwcmludGluZyBmdW5jdGlvbi4gKilcbigqIFVzZWQgdG8gZ2VuZXJhdGUgUHJpbnRmIGFuZCBGb3JtYXQgcHJpbnRpbmcgZnVuY3Rpb25zLiAqKVxuKCogUGFyYW1ldGVyczpcbiAgICAgazogYSBjb250aW51YXRpb24gZmluYWxseSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGUgYWNjdW11bGF0b3IuXG4gICAgIG86IHRoZSBvdXRwdXQgc3RyZWFtIChzZWUgaywgJWEgYW5kICV0KS5cbiAgICAgYWNjOiByZXYgbGlzdCBvZiBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzaCwgZm9ybWF0dGluZywgLi4uKS5cbiAgICAgZm10OiB0aGUgZm9ybWF0LiAqKVxubGV0IHJlYyBtYWtlX3ByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IENoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2NhbWxfY2hhciBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgKGZ1biBzdHIgLT4gc3RyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ190b19jYW1sX3N0cmluZ1xuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50IGljb252XG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDMyIGljb252XG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9uYXRpdmVpbnQgaWNvbnZcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50NjQgaWNvbnZcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgZmNvbnZcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ19vZl9ib29sXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIGZ1biBmIHggLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGZ1biBvIC0+IGYgbyB4KSkgcmVzdFxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBmdW4gZiAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgKCkpXG4gIHwgUmVhZGVyIF8gLT5cbiAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICopXG4gICAgKCogSW5kZWVkLCBzaW5jZSBwcmludGYgYW5kIGNvLiB0YWtlIGEgZm9ybWF0NCBhcyBhcmd1bWVudCwgdGhlICdkIGFuZCAnZVxuICAgICAgIHR5cGUgcGFyYW1ldGVycyBvZiBmbXQgYXJlIG9idmlvdXNseSBlcXVhbHMuIFRoZSBSZWFkZXIgaXMgdGhlXG4gICAgICAgb25seSBjb25zdHJ1Y3RvciB3aGljaCB0b3VjaCAnZCBhbmQgJ2UgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBmb3JtYXRcbiAgICAgICB0eXBlLCBpdCBhZGRzIGFuICgtPikgdG8gdGhlICdkIHBhcmFtZXRlcnMuIENvbnNlcXVlbnRseSwgYSBmb3JtYXQ0XG4gICAgICAgY2Fubm90IGNvbnRhaW4gYSBSZWFkZXIgbm9kZSwgZXhjZXB0IGluIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG9cbiAgICAgICBhbiAley4uLiV9LiBJdCdzIG5vdCBhIHByb2JsZW0gYmVjYXVzZSBtYWtlX3ByaW50ZiBkbyBub3QgY2FsbFxuICAgICAgIGl0c2VsZiByZWN1cnNpdmVseSBvbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvICV7Li4uJX0uICopXG4gICAgYXNzZXJ0IGZhbHNlXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mbHVzaCBhY2MpIHJlc3RcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX3N0cmluZ19saXRlcmFsIChhY2MsIHN0cikpIHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfY2hhcl9saXRlcmFsIChhY2MsIGNocikpIHJlc3RcblxuICB8IEZvcm1hdF9hcmcgKF8sIHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSBzdHJpbmdfb2ZfZm10dHkgc3ViX2ZtdHR5IGluXG4gICAgKGZ1biBzdHIgLT5cbiAgICAgIGlnbm9yZSBzdHI7XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHkpKSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+IG1ha2VfcHJpbnRmIGsgYWNjXG4gICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgbGV0IG5ld19hY2MgPSBBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVbXCIpIGluXG4gICAgZnVuIF8gLT4gbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICgqIFRoaXMgY2FzZSBzaG91bGQgYmUgcmVmdXNlZCBmb3IgUHJpbnRmLiAqKVxuICAgICgqIEFjY2VwdGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqKVxuICAgICgqIEludGVycHJldCAlbCwgJW4gYW5kICVMIGFzICV1LiAqKVxuICAgIGZ1biBuIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfaW50IFwiJXVcIiBuKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgbWFrZV9pZ25vcmVkX3BhcmFtIGsgYWNjIGlnbiByZXN0XG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19saXQgKGFjYywgZm10aW5nX2xpdCkpIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl90YWcga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl9ib3gga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBrIGFjY1xuXG4oKiBEZWxheSB0aGUgZXJyb3IgKEludmFsaWRfYXJndW1lbnQgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpLiAqKVxuKCogR2VuZXJhdGUgZnVuY3Rpb25zIHRvIHRha2UgcmVtYWluaW5nIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIFwiJV9cIikuICopXG5hbmQgbWFrZV9pZ25vcmVkX3BhcmFtIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgZm10dHkgZm10XG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcblxuXG4oKiBTcGVjaWFsIGNhc2Ugb2YgcHJpbnRmIFwiJV8oXCIuICopXG5hbmQgbWFrZV9mcm9tX2ZtdHR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgZm10dHkgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBSZWFkZXJfdHkgXyAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBGb3JtYXRfYXJnX3R5IChfLCByZXN0KSAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogSW5zZXJ0IGFuIEFjY19pbnZhbGlkX2FyZyBpbiB0aGUgYWNjdW11bGF0b3IgYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlXG4gICBjbG9zdXJlcyB0byBnZXQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuICopXG5hbmQgbWFrZV9pbnZhbGlkX2FyZyA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPlxuICBtYWtlX3ByaW50ZiBrIChBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpKSBmbXRcblxuKCogRml4IHBhZGRpbmcsIHRha2UgaXQgYXMgYW4gZXh0cmEgaW50ZWdlciBhcmd1bWVudCBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9wYWRkaW5nIDogdHlwZSB4IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHogLT4gYSkgcGFkZGluZyAtPiAoeiAtPiBzdHJpbmcpIC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCB0cmFucyAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHJhbnMgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcblxuKCogRml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBmb3IgaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0LiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IChpbnRfY29udiAtPiB6IC0+IHN0cmluZykgLT5cbiAgICBpbnRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyB0cmFucyBpY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gdHJhbnMgaWNvbnYgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuXG4oKiBDb252ZXJ0IGEgZmxvYXQsIGZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gaWYgbmVlZGVkLiAqKVxuKCogVGFrZSB0aGUgZmxvYXQgYXJndW1lbnQgYW5kIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgZmxvYXQgLT4gYSkgcHJlY2lzaW9uIC0+IGZsb2F0X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgZmNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbmFuZCBtYWtlX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geCAtPiB5ID1cbiAgZnVuIGsgYWNjIHJlc3QgYXJpdHkgZiAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiB4KVxuXG5sZXQgY29uc3QgeCBfID0geFxuXG5sZXQgcmVjIG1ha2VfaXByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuICBmdW4gayBvIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBDYW1sX3N0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBCb29sIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyByZXN0IGFyaXR5XG4gICAgfCBSZWFkZXIgXyAtPlxuICAgICAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICBTZWUgdGhlXG4gICAgICAgICAgIG5vdGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FzZSBmb3IgbWFrZV9wcmludGYuICopXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXRfYXJnIChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+XG4gICAgICAgICAgbWFrZV9pcHJpbnRmIGsgb1xuICAgICAgICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG4gICAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pZ25vcmVkX3BhcmFtIChmdW4gXyAtPiBrIG8pIChFbmRfb2ZfYWNjKSBpZ24gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgICAgIGsgb1xuYW5kIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIDpcbiAgdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IHggPVxuICBmdW4gayBvIGZtdCBwYWQgcHJlYyAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICwgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpKVxuYW5kIGZuX29mX2N1c3RvbV9hcml0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT5cbiAgc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHkgPVxuICBmdW4gayBvIGZtdCAtPiBmdW5jdGlvblxuICAgIHwgQ3VzdG9tX3plcm8gLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyBmbXRcbiAgICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgICAgIGNvbnN0IChmbl9vZl9jdXN0b21fYXJpdHkgayBvIGZtdCBhcml0eSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29udGludWF0aW9ucyBmb3IgbWFrZV9wcmludGYgKilcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBvIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQHtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQFtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X2NoYXIgbyBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmIG9cbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGZsdXNoIG9cbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBvIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIGJ1ZnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBmIGJcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IGJ1ZnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBidWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiAlYSBhbmQgJXQuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiAoZiAoKSlcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEVycm9yIG1hbmFnZW1lbnQgKilcblxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBwcmV0dHktcHJpbnRlZCBlcnJvciBtZXNzYWdlLiAqKVxubGV0IGZhaWx3aXRoX21lc3NhZ2UgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGsgYWNjID0gc3RycHV0X2FjYyBidWYgYWNjOyBmYWlsd2l0aCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdHRpbmcgdG9vbHMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhbiBvcGVuIGJsb2NrIGRlc2NyaXB0aW9uIChpbmRlbnQsIGJsb2NrX3R5cGUpICopXG5sZXQgb3Blbl9ib3hfb2Zfc3RyaW5nIHN0ciA9XG4gIGlmIHN0ciA9IFwiXCIgdGhlbiAoMCwgUHBfYm94KSBlbHNlXG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IGludmFsaWRfYm94ICgpID0gZmFpbHdpdGhfbWVzc2FnZSBcImludmFsaWQgYm94IGRlc2NyaXB0aW9uICVTXCIgc3RyIGluXG4gICAgbGV0IHJlYyBwYXJzZV9zcGFjZXMgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gaSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcgJyB8ICdcXHQnIC0+IHBhcnNlX3NwYWNlcyAoaSArIDEpXG4gICAgICAgIHwgXyAtPiBpXG4gICAgYW5kIHBhcnNlX2x3b3JkIGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICdhJyAuLiAneicgLT4gcGFyc2VfbHdvcmQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqXG4gICAgYW5kIHBhcnNlX2ludCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IHBhcnNlX2ludCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGogaW5cbiAgICBsZXQgd3N0YXJ0ID0gcGFyc2Vfc3BhY2VzIDAgaW5cbiAgICBsZXQgd2VuZCA9IHBhcnNlX2x3b3JkIHdzdGFydCB3c3RhcnQgaW5cbiAgICBsZXQgYm94X25hbWUgPSBTdHJpbmcuc3ViIHN0ciB3c3RhcnQgKHdlbmQgLSB3c3RhcnQpIGluXG4gICAgbGV0IG5zdGFydCA9IHBhcnNlX3NwYWNlcyB3ZW5kIGluXG4gICAgbGV0IG5lbmQgPSBwYXJzZV9pbnQgbnN0YXJ0IG5zdGFydCBpblxuICAgIGxldCBpbmRlbnQgPVxuICAgICAgaWYgbnN0YXJ0ID0gbmVuZCB0aGVuIDAgZWxzZVxuICAgICAgICB0cnkgaW50X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzdHIgbnN0YXJ0IChuZW5kIC0gbnN0YXJ0KSlcbiAgICAgICAgd2l0aCBGYWlsdXJlIF8gLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICBsZXQgZXhwX2VuZCA9IHBhcnNlX3NwYWNlcyBuZW5kIGluXG4gICAgaWYgZXhwX2VuZCA8PiBsZW4gdGhlbiBpbnZhbGlkX2JveCAoKTtcbiAgICBsZXQgYm94X3R5cGUgPSBtYXRjaCBib3hfbmFtZSB3aXRoXG4gICAgICB8IFwiXCIgfCBcImJcIiAtPiBQcF9ib3hcbiAgICAgIHwgXCJoXCIgICAgICAtPiBQcF9oYm94XG4gICAgICB8IFwidlwiICAgICAgLT4gUHBfdmJveFxuICAgICAgfCBcImh2XCIgICAgIC0+IFBwX2h2Ym94XG4gICAgICB8IFwiaG92XCIgICAgLT4gUHBfaG92Ym94XG4gICAgICB8IF8gICAgICAgIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgKGluZGVudCwgYm94X3R5cGUpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUGFyc2luZyB0b29scyAqKVxuXG4oKiBDcmVhdGUgYSBwYWRkaW5nX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcgYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZGRpbmdfZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcGFkZGluZ19mbXRfZWJiID1cbmZ1biBwYWQgZm10IC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoTm9fcGFkZGluZywgZm10KVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRkaW5nX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgZm10KVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIGZtdClcblxuKCogQ3JlYXRlIGEgcHJlY2lzaW9uX2ZtdF9lYmIgZnJvbSBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wcmVjaXNpb25fZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcHJlY2lzaW9uIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwcmVjaXNpb25fZm10X2ViYiA9XG5mdW4gcHJlYyBmbXQgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uICAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChOb19wcmVjaXNpb24sIGZtdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKExpdF9wcmVjaXNpb24gcCwgZm10KVxuICB8IEFyZ19wcmVjaXNpb24gICAtPiBQcmVjaXNpb25fZm10X0VCQiAoQXJnX3ByZWNpc2lvbiwgZm10KVxuXG4oKiBDcmVhdGUgYSBwYWRwcmVjX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgYW5kIHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnRzXG4gICBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkcHJlY19mbXRfZWJiIDogdHlwZSB4IHkgeiB0IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+XG4gICAgKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgIChfLCBfLCBfLCBfLCBfKSBwYWRwcmVjX2ZtdF9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdCAtPlxuICBsZXQgUHJlY2lzaW9uX2ZtdF9FQkIgKHByZWMsIGZtdCcpID0gbWFrZV9wcmVjaXNpb25fZm10X2ViYiBwcmVjIGZtdCBpblxuICBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIHByZWMsIGZtdCcpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZHByZWNfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBwcmVjLCBmbXQnKVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIHByZWMsIGZtdCcpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwYXJzaW5nICopXG5cbigqIFBhcnNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZvcm1hdCBhbmQgY3JlYXRlIGEgZm10X2ViYi4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSBpbiBjYXNlIG9mIGludmFsaWQgZm9ybWF0LiAqKVxubGV0IGZtdF9lYmJfb2Zfc3RyaW5nID9sZWdhY3lfYmVoYXZpb3Igc3RyID1cbiAgKCogUGFyYW1ldGVycyBuYW1pbmcgY29udmVudGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gbGl0X3N0YXJ0OiBzdGFydCBvZiB0aGUgbGl0ZXJhbCBzZXF1ZW5jZS4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzdHJfaW5kOiBjdXJyZW50IGluZGV4IGluIHRoZSBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGVuZF9pbmQ6IGVuZCBvZiB0aGUgY3VycmVudCAoc3ViLSlmb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcGN0X2luZDogaW5kZXggb2YgdGhlICclJyBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICopXG4gICgqICAgLSB6ZXJvOiAgaXMgdGhlICcwJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIG1pbnVzOiBpcyB0aGUgJy0nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGx1czogIGlzIHRoZSAnKycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBoYXNoOiAgaXMgdGhlICcjJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHNwYWNlOiBpcyB0aGUgJyAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaWduOiAgIGlzIHRoZSAnXycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwYWQ6IHBhZGRpbmcgb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHByZWM6IHByZWNpc2lvbiBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3ltYjogY2hhciByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24gKCdjJywgJ3MnLCAnZCcsIC4uLikuICopXG4gICgqICAgLSBjaGFyX3NldDogc2V0IG9mIGNoYXJhY3RlcnMgYXMgYml0bWFwIChzZWUgc2NhbmYgJVsuLi5dKS4gICAgKilcblxuICBsZXQgbGVnYWN5X2JlaGF2aW9yID0gbWF0Y2ggbGVnYWN5X2JlaGF2aW9yIHdpdGhcbiAgICB8IFNvbWUgZmxhZyAtPiBmbGFnXG4gICAgfCBOb25lIC0+IHRydWVcbiAgKCogIFdoZW4gdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBmb3JtYXQgcGFyc2VyIHRyaWVzIHRvIGJlaGF2ZSBhc1xuICAgICAgdGhlIDw0LjAyIGltcGxlbWVudGF0aW9ucywgaW4gcGFydGljdWxhciBpdCBpZ25vcmVzIG1vc3QgYmVuaW5lXG4gICAgICBub25zZW5zaWNhbCBmb3JtYXQuIFdoZW4gdGhlIGZsYWcgaXMgZGlzYWJsZWQsIGl0IHdpbGwgcmVqZWN0IGFueVxuICAgICAgZm9ybWF0IHRoYXQgaXMgbm90IGFjY2VwdGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uLlxuXG4gICAgICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBcIiUrIGRcIjogc3BlY2lmeWluZyBib3RoICcrJyAoaWYgdGhlXG4gICAgICBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoIGEgJysnIHRvIGdldCB0aGUgc2FtZSB3aWR0aCBhc1xuICAgICAgbmVnYXRpdmUgbnVtYmVycykgYW5kICcgJyAoaWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGhcbiAgICAgIGEgc3BhY2UpIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGJ1dCB0aGUgbGVnYWN5ICg8IDQuMDIpXG4gICAgICBpbXBsZW1lbnRhdGlvbiB3YXMgaGFwcHkgdG8ganVzdCBpZ25vcmUgdGhlIHNwYWNlLlxuICAqKVxuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZCBtc2cgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIG1zZ1xuICBpblxuXG4gICgqIFVzZWQgd2hlbiB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgKG9yIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXQpIHdhcyBlbmNvdW50ZXJlZFxuICAgICAgdW5leHBlY3RlZGx5LiAqKVxuICBsZXQgdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2UgZW5kX2luZFxuICAgICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiBmb3JtYXRcIlxuICBpblxuXG4gICgqIFVzZWQgZm9yICUwYzogbm8gb3RoZXIgd2lkdGhzIGFyZSBpbXBsZW1lbnRlZCAqKVxuICBsZXQgaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kXG4gICAgICBcIm5vbi16ZXJvIHdpZHRocyBhcmUgdW5zdXBwb3J0ZWQgZm9yICVjIGNvbnZlcnNpb25zXCJcbiAgaW5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIG9wdGlvbiBkZXBlbmRlbmN5XG4gICAgIHByb2JsZW0uICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IHN0cl9pbmQgYyBzID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAnJWMnIHdpdGhvdXQgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgYyBzXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIHVuZXhwZWN0ZWRcbiAgICAgY2hhcmFjdGVyLiAqKVxuICBsZXQgZXhwZWN0ZWRfY2hhcmFjdGVyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZCA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlcyBleHBlY3RlZCwgcmVhZCAlQ1wiXG4gICAgICBzdHIgc3RyX2luZCBleHBlY3RlZCByZWFkXG4gIGluXG5cbiAgKCogUGFyc2UgdGhlIHN0cmluZyBmcm9tIGJlZ19pbmQgKGluY2x1ZGVkKSB0byBlbmRfaW5kIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgcGFyc2UgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gYmVnX2luZCBlbmRfaW5kIC0+IHBhcnNlX2xpdGVyYWwgYmVnX2luZCBiZWdfaW5kIGVuZF9pbmRcblxuICAoKiBSZWFkIGxpdGVyYWwgY2hhcmFjdGVycyB1cCB0byAnJScgb3IgJ0AnIHNwZWNpYWwgY2hhcmFjdGVycy4gKilcbiAgYW5kIHBhcnNlX2xpdGVyYWwgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIEVuZF9vZl9mb3JtYXQgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2Zvcm1hdCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfYWZ0ZXJfYXQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfbGl0ZXJhbCBsaXRfc3RhcnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgKCogUGFyc2UgYSBmb3JtYXQgYWZ0ZXIgJyUnICopXG4gIGFuZCBwYXJzZV9mb3JtYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBlbmRfaW5kIC0+IHBhcnNlX2lnbiBwY3RfaW5kIChwY3RfaW5kICsgMSkgZW5kX2luZFxuXG4gIGFuZCBwYXJzZV9pZ24gOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ18nIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgKHN0cl9pbmQrMSkgZW5kX2luZCB0cnVlXG4gICAgICB8IF8gLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgZmFsc2VcblxuICBhbmQgcGFyc2VfZmxhZ3MgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmJcbiAgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgaWduIC0+XG4gICAgbGV0IHplcm8gPSByZWYgZmFsc2UgYW5kIG1pbnVzID0gcmVmIGZhbHNlXG4gICAgYW5kIHBsdXMgPSByZWYgZmFsc2UgYW5kIHNwYWNlID0gcmVmIGZhbHNlXG4gICAgYW5kIGhhc2ggPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgc2V0X2ZsYWcgc3RyX2luZCBmbGFnID1cbiAgICAgICgqIGluIGxlZ2FjeSBtb2RlLCBkdXBsaWNhdGUgZmxhZ3MgYXJlIGFjY2VwdGVkICopXG4gICAgICBpZiAhZmxhZyAmJiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIGR1cGxpY2F0ZSBmbGFnICVDXCJcbiAgICAgICAgICBzdHIgc3RyX2luZCBzdHIuW3N0cl9pbmRdO1xuICAgICAgZmxhZyA6PSB0cnVlO1xuICAgIGluXG4gICAgbGV0IHJlYyByZWFkX2ZsYWdzIHN0cl9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnMCcgLT4gc2V0X2ZsYWcgc3RyX2luZCB6ZXJvOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICctJyAtPiBzZXRfZmxhZyBzdHJfaW5kIG1pbnVzOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJysnIC0+IHNldF9mbGFnIHN0cl9pbmQgcGx1czsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnIycgLT4gc2V0X2ZsYWcgc3RyX2luZCBoYXNoOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyAnIC0+IHNldF9mbGFnIHN0cl9pbmQgc3BhY2U7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmRcbiAgICAgICAgICAhemVybyAhbWludXMgIXBsdXMgIWhhc2ggIXNwYWNlIGlnblxuICAgICAgZW5kXG4gICAgaW5cbiAgICByZWFkX2ZsYWdzIHN0cl9pbmRcblxuICAoKiBUcnkgdG8gcmVhZCBhIGRpZ2l0YWwgb3IgYSAnKicgcGFkZGluZy4gKilcbiAgYW5kIHBhcnNlX3BhZGRpbmcgOiB0eXBlIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCB6ZXJvIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYWR0eSA9IG1hdGNoIHplcm8sIG1pbnVzIHdpdGhcbiAgICAgIHwgZmFsc2UsIGZhbHNlIC0+IFJpZ2h0XG4gICAgICB8IGZhbHNlLCB0cnVlICAtPiBMZWZ0XG4gICAgICB8ICB0cnVlLCBmYWxzZSAtPiBaZXJvc1xuICAgICAgfCAgdHJ1ZSwgdHJ1ZSAgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGVmdFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnLScgXCIwXCIgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgIGxldCBuZXdfaW5kLCB3aWR0aCA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgKExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gKEFyZ19wYWRkaW5nIHBhZHR5KVxuICAgIHwgXyAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgICAgfCBMZWZ0ICAtPlxuICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy0nIFwicGFkZGluZ1wiO1xuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICB8IFplcm9zIC0+XG4gICAgICAgICAoKiBhICcwJyBwYWRkaW5nIGluZGljYXRpb24gbm90IGZvbGxvd2VkIGJ5IGFueXRoaW5nIHNob3VsZFxuICAgICAgICAgICBiZSBpbnRlcnByZXRlZCBhcyBhIFJpZ2h0IHBhZGRpbmcgb2Ygd2lkdGggMC4gVGhpcyBpcyB1c2VkXG4gICAgICAgICAgIGJ5IHNjYW5uaW5nIGNvbnZlcnNpb25zICUwcyBhbmQgJTBjICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIChMaXRfcGFkZGluZyAoUmlnaHQsIDApKVxuICAgICAgfCBSaWdodCAtPlxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICBlbmRcblxuICAoKiBJcyBwcmVjaXNpb24gZGVmaW5lZD8gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3BhZGRpbmcgOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnLicgLT5cbiAgICAgIHBhcnNlX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZFxuICAgIHwgc3ltYiAtPlxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBOb19wcmVjaXNpb24gcGFkIHN5bWJcblxuICAoKiBSZWFkIHRoZSBkaWdpdGFsIG9yICcqJyBwcmVjaXNpb24uICopXG4gIGFuZCBwYXJzZV9wcmVjaXNpb24gOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZCA9XG4gICAgICBsZXQgbmV3X2luZCwgcHJlYyA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gcHJlYykgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kXG4gICAgfCAoJysnIHwgJy0nKSBhcyBzeW1iIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+XG4gICAgICAoKiBMZWdhY3kgbW9kZSB3b3VsZCBhY2NlcHQgYW5kIGlnbm9yZSAnKycgb3IgJy0nIGJlZm9yZSB0aGVcbiAgICAgICAgIGludGVnZXIgZGVzY3JpYmluZyB0aGUgZGVzaXJlZCBwcmVjaXNpb247IG5vdGUgdGhhdCB0aGlzXG4gICAgICAgICBjYW5ub3QgaGFwcGVuIGZvciBwYWRkaW5nIHdpZHRoLCBhcyAnKycgYW5kICctJyBhbHJlYWR5IGhhdmVcbiAgICAgICAgIGEgc2VtYW50aWNzIHRoZXJlLlxuXG4gICAgICAgICBUaGF0IHNhaWQsIHRoZSBpZGVhIChzdXBwb3J0ZWQgYnkgdGhpcyB0d2VhaykgdGhhdCB3aWR0aCBhbmRcbiAgICAgICAgIHByZWNpc2lvbiBsaXRlcmFscyBhcmUgXCJpbnRlZ2VyIGxpdGVyYWxzXCIgaW4gdGhlIE9DYW1sIHNlbnNlIGlzXG4gICAgICAgICBzdGlsbCBibGF0YW50bHkgd3JvbmcsIGFzIDEyM180NTYgb3IgMHhGRiBhcmUgcmVqZWN0ZWQuICopXG4gICAgICBwYXJzZV9saXRlcmFsIChtaW51cyB8fCBzeW1iID0gJy0nKSAoc3RyX2luZCArIDEpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIHBhZCBBcmdfcHJlY2lzaW9uXG4gICAgfCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBub3RlIHRoYXQgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRpZCBub3QgaWdub3JlICcuJyB3aXRob3V0XG4gICAgICAgICAgIGEgbnVtYmVyIChhcyBpdCBkb2VzIGZvciBwYWRkaW5nIGluZGljYXRpb25zKSwgYnV0XG4gICAgICAgICAgIGludGVycHJldHMgaXQgYXMgJy4wJyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiAwKVxuICAgICAgZWxzZVxuICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy4nIFwicHJlY2lzaW9uXCJcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogdCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2NvbnYgKHR5cGUgdSkgKHR5cGUgdikgKHBhZHByZWMgOiAodSwgdikgcGFkZGluZykgPVxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBwcmVjIHBhZHByZWMgc3RyLltzdHJfaW5kXSBpblxuICAgICgqIGluIGxlZ2FjeSBtb2RlLCBzb21lIGZvcm1hdHMgKCVzIGFuZCAlUykgYWNjZXB0IGEgd2VpcmQgbWl4IG9mXG4gICAgICAgcGFkZGluZyBhbmQgcHJlY2lzaW9uLCB3aGljaCBpcyBtZXJnZWQgYXMgYSBzaW5nbGUgcGFkZGluZ1xuICAgICAgIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaW4gJS4xMHMgdGhlIHByZWNpc2lvbiBpcyBpbXBsaWNpdGx5XG4gICAgICAgdW5kZXJzdG9vZCBhcyBwYWRkaW5nICUxMHMsIGJ1dCB0aGUgbGVmdC1wYWRkaW5nIGNvbXBvbmVudCBtYXlcbiAgICAgICBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEgbGVmdCBwYWRkaW5nIG9yIGEgbmVnYXRpdmUgcHJlY2lzaW9uOlxuICAgICAgICUtLjNzIGFuZCAlLi0zcyBhcmUgZXF1aXZhbGVudCB0byAlLTNzICopXG4gICAgbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgLT4gKFxuICAgICAgbWF0Y2ggbWludXMsIHByZWMgd2l0aFxuICAgICAgICB8IF8sIE5vX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IE5vX3BhZGRpbmdcbiAgICAgICAgfCBmYWxzZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChSaWdodCwgbikpXG4gICAgICAgIHwgdHJ1ZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChMZWZ0LCBuKSlcbiAgICAgICAgfCBmYWxzZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBSaWdodClcbiAgICAgICAgfCB0cnVlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIExlZnQpXG4gICAgKVxuICAgIHwgcGFkIC0+IHBhcnNlX2NvbnYgcGFkXG5cbiAgKCogQ2FzZSBhbmFseXNpcyBvbiBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfY29udmVyc2lvbiA6IHR5cGUgeCB5IHogdCB1IHYgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gKHgsIHkpIHBhZGRpbmcgLT5cbiAgICAgICAgKHosIHQpIHByZWNpc2lvbiAtPiAodSwgdikgcGFkZGluZyAtPiBjaGFyIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgcGFkcHJlYyBzeW1iIC0+XG4gICAgKCogRmxhZ3MgdXNlZCB0byBjaGVjayBvcHRpb24gdXNhZ2VzL2NvbXBhdGliaWxpdGllcy4gKilcbiAgICBsZXQgcGx1c191c2VkICA9IHJlZiBmYWxzZSBhbmQgaGFzaF91c2VkID0gcmVmIGZhbHNlXG4gICAgYW5kIHNwYWNlX3VzZWQgPSByZWYgZmFsc2UgYW5kIGlnbl91c2VkICAgPSByZWYgZmFsc2VcbiAgICBhbmQgcGFkX3VzZWQgICA9IHJlZiBmYWxzZSBhbmQgcHJlY191c2VkICA9IHJlZiBmYWxzZSBpblxuXG4gICAgKCogQWNjZXNzIHRvIG9wdGlvbnMsIHVwZGF0ZSBmbGFncy4gKilcbiAgICBsZXQgZ2V0X3BsdXMgICAgKCkgPSBwbHVzX3VzZWQgIDo9IHRydWU7IHBsdXNcbiAgICBhbmQgZ2V0X2hhc2ggICAoKSA9IGhhc2hfdXNlZCA6PSB0cnVlOyBoYXNoXG4gICAgYW5kIGdldF9zcGFjZSAgICgpID0gc3BhY2VfdXNlZCA6PSB0cnVlOyBzcGFjZVxuICAgIGFuZCBnZXRfaWduICAgICAoKSA9IGlnbl91c2VkICAgOj0gdHJ1ZTsgaWduXG4gICAgYW5kIGdldF9wYWQgICAgICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRcbiAgICBhbmQgZ2V0X3ByZWMgICAgKCkgPSBwcmVjX3VzZWQgIDo9IHRydWU7IHByZWNcbiAgICBhbmQgZ2V0X3BhZHByZWMgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZHByZWMgaW5cblxuICAgIGxldCBnZXRfaW50X3BhZCAoKSA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSkgKHR5cGUgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSByZWYgW11cblxubGV0IGxvY2ZtdCA9IGZvcm1hdF9vZl9zdHJpbmcgXCJGaWxlIFxcXCIlc1xcXCIsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWQ6ICVzXCJcblxubGV0IGZpZWxkIHggaSA9XG4gIGxldCBmID0gT2JqLmZpZWxkIHggaSBpblxuICBpZiBub3QgKE9iai5pc19ibG9jayBmKSB0aGVuXG4gICAgc3ByaW50ZiBcIiVkXCIgKE9iai5tYWdpYyBmIDogaW50KSAgICAgICAgICAgKCogY2FuIGFsc28gYmUgYSBjaGFyICopXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLnN0cmluZ190YWcgdGhlblxuICAgIHNwcmludGYgXCIlU1wiIChPYmoubWFnaWMgZiA6IHN0cmluZylcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouZG91YmxlX3RhZyB0aGVuXG4gICAgc3RyaW5nX29mX2Zsb2F0IChPYmoubWFnaWMgZiA6IGZsb2F0KVxuICBlbHNlXG4gICAgXCJfXCJcblxubGV0IHJlYyBvdGhlcl9maWVsZHMgeCBpID1cbiAgaWYgaSA+PSBPYmouc2l6ZSB4IHRoZW4gXCJcIlxuICBlbHNlIHNwcmludGYgXCIsICVzJXNcIiAoZmllbGQgeCBpKSAob3RoZXJfZmllbGRzIHggKGkrMSkpXG5cbmxldCBmaWVsZHMgeCA9XG4gIG1hdGNoIE9iai5zaXplIHggd2l0aFxuICB8IDAgLT4gXCJcIlxuICB8IDEgLT4gXCJcIlxuICB8IDIgLT4gc3ByaW50ZiBcIiglcylcIiAoZmllbGQgeCAxKVxuICB8IF8gLT4gc3ByaW50ZiBcIiglcyVzKVwiIChmaWVsZCB4IDEpIChvdGhlcl9maWVsZHMgeCAyKVxuXG5sZXQgdXNlX3ByaW50ZXJzIHggPVxuICBsZXQgcmVjIGNvbnYgPSBmdW5jdGlvblxuICAgIHwgaGQgOjogdGwgLT5cbiAgICAgICAgKG1hdGNoIGhkIHggd2l0aFxuICAgICAgICAgfCBOb25lIHwgZXhjZXB0aW9uIF8gLT4gY29udiB0bFxuICAgICAgICAgfCBTb21lIHMgLT4gU29tZSBzKVxuICAgIHwgW10gLT4gTm9uZSBpblxuICBjb252ICFwcmludGVyc1xuXG5sZXQgdG9fc3RyaW5nX2RlZmF1bHQgPSBmdW5jdGlvblxuICB8IE91dF9vZl9tZW1vcnkgLT4gXCJPdXQgb2YgbWVtb3J5XCJcbiAgfCBTdGFja19vdmVyZmxvdyAtPiBcIlN0YWNrIG92ZXJmbG93XCJcbiAgfCBNYXRjaF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis1KSBcIlBhdHRlcm4gbWF0Y2hpbmcgZmFpbGVkXCJcbiAgfCBBc3NlcnRfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJBc3NlcnRpb24gZmFpbGVkXCJcbiAgfCBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNikgXCJVbmRlZmluZWQgcmVjdXJzaXZlIG1vZHVsZVwiXG4gIHwgeCAtPlxuICAgICAgbGV0IHggPSBPYmoucmVwciB4IGluXG4gICAgICBpZiBPYmoudGFnIHggPD4gMCB0aGVuXG4gICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCB4IDApIDogc3RyaW5nKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgY29uc3RydWN0b3IgPVxuICAgICAgICAgIChPYmoubWFnaWMgKE9iai5maWVsZCAoT2JqLmZpZWxkIHggMCkgMCkgOiBzdHJpbmcpIGluXG4gICAgICAgIGNvbnN0cnVjdG9yIF4gKGZpZWxkcyB4KVxuXG5sZXQgdG9fc3RyaW5nIGUgPVxuICBtYXRjaCB1c2VfcHJpbnRlcnMgZSB3aXRoXG4gIHwgU29tZSBzIC0+IHNcbiAgfCBOb25lIC0+IHRvX3N0cmluZ19kZWZhdWx0IGVcblxubGV0IHByaW50IGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBmbHVzaCBzdGRlcnI7XG4gICAgcmFpc2UgeFxuXG5sZXQgY2F0Y2ggZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZmx1c2ggc3Rkb3V0O1xuICAgIGVwcmludGYgXCJVbmNhdWdodCBleGNlcHRpb246ICVzXFxuXCIgKHRvX3N0cmluZyB4KTtcbiAgICBleGl0IDJcblxudHlwZSByYXdfYmFja3RyYWNlX3Nsb3RcbnR5cGUgcmF3X2JhY2t0cmFjZVxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZTpcbiAgdW5pdCAtPiByYXdfYmFja3RyYWNlID0gXCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZVwiXG5cbmV4dGVybmFsIHJhaXNlX3dpdGhfYmFja3RyYWNlOiBleG4gLT4gcmF3X2JhY2t0cmFjZSAtPiAnYVxuICA9IFwiJXJhaXNlX3dpdGhfYmFja3RyYWNlXCJcblxudHlwZSBiYWNrdHJhY2Vfc2xvdCA9XG4gIHwgS25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgICAgOiBib29sO1xuICAgICAgZmlsZW5hbWUgICAgOiBzdHJpbmc7XG4gICAgICBsaW5lX251bWJlciA6IGludDtcbiAgICAgIHN0YXJ0X2NoYXIgIDogaW50O1xuICAgICAgZW5kX2NoYXIgICAgOiBpbnQ7XG4gICAgICBpc19pbmxpbmUgICA6IGJvb2w7XG4gICAgfVxuICB8IFVua25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgOiBib29sXG4gICAgfVxuXG4oKiB0byBhdm9pZCB3YXJuaW5nICopXG5sZXQgXyA9IFtLbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2U7IGZpbGVuYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIgPSAwOyBzdGFydF9jaGFyID0gMDsgZW5kX2NoYXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbmxpbmUgPSBmYWxzZSB9O1xuICAgICAgICAgVW5rbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2UgfV1cblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Q6XG4gIHJhd19iYWNrdHJhY2Vfc2xvdCAtPiBiYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZTpcbiAgcmF3X2JhY2t0cmFjZSAtPiBiYWNrdHJhY2Vfc2xvdCBhcnJheSA9IFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2VcIlxuXG5sZXQgY29udmVydF9yYXdfYmFja3RyYWNlIGJ0ID1cbiAgdHJ5IFNvbWUgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidClcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgZm9ybWF0X2JhY2t0cmFjZV9zbG90IHBvcyBzbG90ID1cbiAgbGV0IGluZm8gaXNfcmFpc2UgPVxuICAgIGlmIGlzX3JhaXNlIHRoZW5cbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBhdFwiIGVsc2UgXCJSZS1yYWlzZWQgYXRcIlxuICAgIGVsc2VcbiAgICAgIGlmIHBvcyA9IDAgdGhlbiBcIlJhaXNlZCBieSBwcmltaXRpdmUgb3BlcmF0aW9uIGF0XCIgZWxzZSBcIkNhbGxlZCBmcm9tXCJcbiAgaW5cbiAgbWF0Y2ggc2xvdCB3aXRoXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBpZiBsLmlzX3JhaXNlIHRoZW5cbiAgICAgICAgKCogY29tcGlsZXItaW5zZXJ0ZWQgcmUtcmFpc2UsIHNraXBwZWQgKikgTm9uZVxuICAgICAgZWxzZVxuICAgICAgICBTb21lIChzcHJpbnRmIFwiJXMgdW5rbm93biBsb2NhdGlvblwiIChpbmZvIGZhbHNlKSlcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+XG4gICAgICBTb21lIChzcHJpbnRmIFwiJXMgZmlsZSBcXFwiJXNcXFwiJXMsIGxpbmUgJWQsIGNoYXJhY3RlcnMgJWQtJWRcIlxuICAgICAgICAgICAgICAoaW5mbyBsLmlzX3JhaXNlKSBsLmZpbGVuYW1lXG4gICAgICAgICAgICAgIChpZiBsLmlzX2lubGluZSB0aGVuIFwiIChpbmxpbmVkKVwiIGVsc2UgXCJcIilcbiAgICAgICAgICAgICAgbC5saW5lX251bWJlciBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5saW5lX251bWJlcjtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9jaGFyO1xuICAgIH1cblxubGV0IGJhY2t0cmFjZV9zbG90cyByYXdfYmFja3RyYWNlID1cbiAgKCogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBndWFyYW50ZWVzIHRoYXQgU29tZSBpc1xuICAgICByZXR1cm5lZCBvbmx5IGlmIGEgcGFydCBvZiB0aGUgdHJhY2UgaXMgdXNhYmxlLiBUaGlzIGdpdmVzIHVzXG4gICAgIGEgYml0IG1vcmUgd29yayB0aGFuIGp1c3QgY29udmVydF9yYXdfYmFja3RyYWNlLCBidXQgaXQgbWFrZXMgdGhlXG4gICAgIEFQSSBtb3JlIHVzZXItZnJpZW5kbHkgLS0gb3RoZXJ3aXNlIG1vc3QgdXNlcnMgd291bGQgaGF2ZSB0b1xuICAgICByZWltcGxlbWVudCB0aGUgXCJQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgc29ycnlcIiBsb2dpY1xuICAgICB0aGVtc2VsdmVzLiAqKVxuICBtYXRjaCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgcmF3X2JhY2t0cmFjZSB3aXRoXG4gICAgfCBOb25lIC0+IE5vbmVcbiAgICB8IFNvbWUgYmFja3RyYWNlIC0+XG4gICAgICBsZXQgdXNhYmxlX3Nsb3QgPSBmdW5jdGlvblxuICAgICAgICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuICAgICAgICB8IEtub3duX2xvY2F0aW9uIF8gLT4gdHJ1ZSBpblxuICAgICAgbGV0IHJlYyBleGlzdHNfdXNhYmxlID0gZnVuY3Rpb25cbiAgICAgICAgfCAoLTEpIC0+IGZhbHNlXG4gICAgICAgIHwgaSAtPiB1c2FibGVfc2xvdCBiYWNrdHJhY2UuKGkpIHx8IGV4aXN0c191c2FibGUgKGkgLSAxKSBpblxuICAgICAgaWYgZXhpc3RzX3VzYWJsZSAoQXJyYXkubGVuZ3RoIGJhY2t0cmFjZSAtIDEpXG4gICAgICB0aGVuIFNvbWUgYmFja3RyYWNlXG4gICAgICBlbHNlIE5vbmVcblxubW9kdWxlIFNsb3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGZvcm1hdCA9IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdFxuICBsZXQgaXNfcmFpc2UgPSBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZVxuICBsZXQgaXNfaW5saW5lID0gYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lXG4gIGxldCBsb2NhdGlvbiA9IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uXG5lbmRcblxuZXh0ZXJuYWwgcmF3X2JhY2t0cmFjZV9sZW5ndGggOlxuICByYXdfYmFja3RyYWNlIC0+IGludCA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFwiIFtAQG5vYWxsb2NdXG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX3Nsb3QgOlxuICByYXdfYmFja3RyYWNlIC0+IGludCAtPiByYXdfYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCBvcHRpb25cbiAgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcIlxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDpcbiAgIHJldHVybnMgdGhlICpzdHJpbmcqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IGdldF9iYWNrdHJhY2UgKCkgPSByYXdfYmFja3RyYWNlX3RvX3N0cmluZyAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmV4dGVybmFsIHJlY29yZF9iYWNrdHJhY2U6IGJvb2wgLT4gdW5pdCA9IFwiY2FtbF9yZWNvcmRfYmFja3RyYWNlXCJcbmV4dGVybmFsIGJhY2t0cmFjZV9zdGF0dXM6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXCJcblxubGV0IHJlZ2lzdGVyX3ByaW50ZXIgZm4gPVxuICBwcmludGVycyA6PSBmbiA6OiAhcHJpbnRlcnNcblxuZXh0ZXJuYWwgZ2V0X2NhbGxzdGFjazogaW50IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrXCJcblxubGV0IGV4bl9zbG90IHggPVxuICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgaWYgT2JqLnRhZyB4ID0gMCB0aGVuIE9iai5maWVsZCB4IDAgZWxzZSB4XG5cbmxldCBleG5fc2xvdF9pZCB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAxKSA6IGludClcblxubGV0IGV4bl9zbG90X25hbWUgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMCkgOiBzdHJpbmcpXG5cblxubGV0IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyID0gcmVmIE5vbmVcblxubGV0IHNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBmbiA9IHVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIDo9IFNvbWUgZm5cblxubGV0IGVtcHR5X2JhY2t0cmFjZSA6IHJhd19iYWNrdHJhY2UgPSBPYmoub2JqIChPYmoubmV3X2Jsb2NrIE9iai5hYnN0cmFjdF90YWcgMClcblxubGV0IHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKSA9XG4gIHRyeVxuICAgIGdldF9yYXdfYmFja3RyYWNlICgpXG4gIHdpdGggXyAoKiBPdXRfb2ZfbWVtb3J5PyAqKSAtPlxuICAgIGVtcHR5X2JhY2t0cmFjZVxuXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgICgqIEdldCB0aGUgYmFja3RyYWNlIG5vdywgaW4gY2FzZSBvbmUgb2YgdGhlIFthdF9leGl0XSBmdW5jdGlvblxuICAgICAgIGRlc3Ryb3lzIGl0LiAqKVxuICAgIGxldCByYXdfYmFja3RyYWNlID1cbiAgICAgIGlmIGRlYnVnZ2VyX2luX3VzZSAoKiBTYW1lIHRlc3QgYXMgaW4gW3J1bnRpbWUvcHJpbnRleGMuY10gKikgdGhlblxuICAgICAgICBlbXB0eV9iYWNrdHJhY2VcbiAgICAgIGVsc2VcbiAgICAgICAgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpXG4gICAgaW5cbiAgICAodHJ5IFN0ZGxpYi5kb19hdF9leGl0ICgpIHdpdGggXyAtPiAoKSk7XG4gICAgbWF0Y2ggIXVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIHdpdGhcbiAgICB8IE5vbmUgLT5cbiAgICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gICAgICAgIGZsdXNoIHN0ZGVyclxuICAgIHwgU29tZSBoYW5kbGVyIC0+XG4gICAgICAgIHRyeVxuICAgICAgICAgIGhhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2VcbiAgICAgICAgd2l0aCBleG4nIC0+XG4gICAgICAgICAgbGV0IHJhd19iYWNrdHJhY2UnID0gdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICAgICAgZXByaW50ZiBcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gJXNcXG5cIiAodG9fc3RyaW5nIGV4bik7XG4gICAgICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgICAgICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3IgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXI6IGV4Y2VwdGlvbiAlc1xcblwiXG4gICAgICAgICAgICAodG9fc3RyaW5nIGV4bicpO1xuICAgICAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2UnO1xuICAgICAgICAgIGZsdXNoIHN0ZGVyclxuICB3aXRoXG4gICAgfCBPdXRfb2ZfbWVtb3J5IC0+XG4gICAgICAgIHByZXJyX2VuZGxpbmVcbiAgICAgICAgICBcIkZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyXCJcblxuKCogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgW2NhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXSBpblxuICAgW3J1bnRpbWUvcHJpbnRleGMuY10gd2hpY2ggZXhwZWN0cyBubyBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24gZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2VcbiAgd2l0aCBfIC0+XG4gICAgKCogVGhlcmUgaXMgbm90IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKilcbiAgICAoKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCJcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgWGF2aWVyIExlcm95IGFuZCBEYW1pZW4gRG9saWdleiwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmxldCBnZW5lcmljX3F1b3RlIHF1b3RlcXVvdGUgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobCArIDIwKSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYiAnXFwnJztcbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgaWYgcy5baV0gPSAnXFwnJ1xuICAgIHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBxdW90ZXF1b3RlXG4gICAgZWxzZSBCdWZmZXIuYWRkX2NoYXIgYiAgcy5baV1cbiAgZG9uZTtcbiAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcJyc7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbigqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgT3BlbiBHcm91cCBzcGVjaWZpY2F0aW9uIGZvdW5kIGhlcmU6XG4gIFtbMV1dIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9iYXNlbmFtZS5odG1sXG4gIEluIHN0ZXAgMSBvZiBbWzFdXSwgd2UgY2hvb3NlIHRvIHJldHVybiBcIi5cIiBmb3IgZW1wdHkgaW5wdXQuXG4gICAgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgT0NhbWwpXG4gIEluIHN0ZXAgMiwgd2UgY2hvb3NlIHRvIHByb2Nlc3MgXCIvL1wiIG5vcm1hbGx5LlxuICBTdGVwIDYgaXMgbm90IGltcGxlbWVudGVkOiB3ZSBjb25zaWRlciB0aGF0IHRoZSBbc3VmZml4XSBvcGVyYW5kIGlzXG4gICAgYWx3YXlzIGFic2VudC4gIFN1ZmZpeGVzIGFyZSBoYW5kbGVkIGJ5IFtjaG9wX3N1ZmZpeF0gYW5kIFtjaG9wX2V4dGVuc2lvbl0uXG4qKVxubGV0IGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIG5hbWUgPVxuICBsZXQgcmVjIGZpbmRfZW5kIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBmaW5kX2VuZCAobiAtIDEpXG4gICAgZWxzZSBmaW5kX2JlZyBuIChuICsgMSlcbiAgYW5kIGZpbmRfYmVnIG4gcCA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCBwXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIFN0cmluZy5zdWIgbmFtZSAobiArIDEpIChwIC0gbiAtIDEpXG4gICAgZWxzZSBmaW5kX2JlZyAobiAtIDEpIHBcbiAgaW5cbiAgaWYgbmFtZSA9IFwiXCJcbiAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gIGVsc2UgZmluZF9lbmQgKFN0cmluZy5sZW5ndGggbmFtZSAtIDEpXG5cbigqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgT3BlbiBHcm91cCBzcGVjaWZpY2F0aW9uIGZvdW5kIGhlcmU6XG4gIFtbMl1dIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9kaXJuYW1lLmh0bWxcbiAgSW4gc3RlcCA2IG9mIFtbMl1dLCB3ZSBjaG9vc2UgdG8gcHJvY2VzcyBcIi8vXCIgbm9ybWFsbHkuXG4qKVxubGV0IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgbmFtZSA9XG4gIGxldCByZWMgdHJhaWxpbmdfc2VwIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiB0cmFpbGluZ19zZXAgKG4gLSAxKVxuICAgIGVsc2UgYmFzZSBuXG4gIGFuZCBiYXNlIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gY3VycmVudF9kaXJfbmFtZVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBpbnRlcm1lZGlhdGVfc2VwIG5cbiAgICBlbHNlIGJhc2UgKG4gLSAxKVxuICBhbmQgaW50ZXJtZWRpYXRlX3NlcCBuID1cbiAgICBpZiBuIDwgMCB0aGVuIFN0cmluZy5zdWIgbmFtZSAwIDFcbiAgICBlbHNlIGlmIGlzX2Rpcl9zZXAgbmFtZSBuIHRoZW4gaW50ZXJtZWRpYXRlX3NlcCAobiAtIDEpXG4gICAgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCAobiArIDEpXG4gIGluXG4gIGlmIG5hbWUgPSBcIlwiXG4gIHRoZW4gY3VycmVudF9kaXJfbmFtZVxuICBlbHNlIHRyYWlsaW5nX3NlcCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxubW9kdWxlIHR5cGUgU1lTREVQUyA9IHNpZ1xuICB2YWwgbnVsbCA6IHN0cmluZ1xuICB2YWwgY3VycmVudF9kaXJfbmFtZSA6IHN0cmluZ1xuICB2YWwgcGFyZW50X2Rpcl9uYW1lIDogc3RyaW5nXG4gIHZhbCBkaXJfc2VwIDogc3RyaW5nXG4gIHZhbCBpc19kaXJfc2VwIDogc3RyaW5nIC0+IGludCAtPiBib29sXG4gIHZhbCBpc19yZWxhdGl2ZSA6IHN0cmluZyAtPiBib29sXG4gIHZhbCBpc19pbXBsaWNpdCA6IHN0cmluZyAtPiBib29sXG4gIHZhbCBjaGVja19zdWZmaXggOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGNob3Bfc3VmZml4X29wdCA6IHN1ZmZpeDpzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb25cbiAgdmFsIHRlbXBfZGlyX25hbWUgOiBzdHJpbmdcbiAgdmFsIHF1b3RlIDogc3RyaW5nIC0+IHN0cmluZ1xuICB2YWwgcXVvdGVfY29tbWFuZCA6XG4gICAgc3RyaW5nIC0+ID9zdGRpbjogc3RyaW5nIC0+ID9zdGRvdXQ6IHN0cmluZyAtPiA/c3RkZXJyOiBzdHJpbmdcbiAgICAgICAgICAgLT4gc3RyaW5nIGxpc3QgLT4gc3RyaW5nXG4gIHZhbCBiYXNlbmFtZSA6IHN0cmluZyAtPiBzdHJpbmdcbiAgdmFsIGRpcm5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubW9kdWxlIFVuaXggOiBTWVNERVBTID0gc3RydWN0XG4gIGxldCBudWxsID0gXCIvZGV2L251bGxcIlxuICBsZXQgY3VycmVudF9kaXJfbmFtZSA9IFwiLlwiXG4gIGxldCBwYXJlbnRfZGlyX25hbWUgPSBcIi4uXCJcbiAgbGV0IGRpcl9zZXAgPSBcIi9cIlxuICBsZXQgaXNfZGlyX3NlcCBzIGkgPSBzLltpXSA9ICcvJ1xuICBsZXQgaXNfcmVsYXRpdmUgbiA9IFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJy8nXG4gIGxldCBpc19pbXBsaWNpdCBuID1cbiAgICBpc19yZWxhdGl2ZSBuXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uL1wiKVxuICBsZXQgY2hlY2tfc3VmZml4IG5hbWUgc3VmZiA9XG4gICAgU3RyaW5nLmxlbmd0aCBuYW1lID49IFN0cmluZy5sZW5ndGggc3VmZiAmJlxuICAgIFN0cmluZy5zdWIgbmFtZSAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gU3RyaW5nLmxlbmd0aCBzdWZmKVxuICAgICAgICAgICAgICAgICAgICAoU3RyaW5nLmxlbmd0aCBzdWZmKSA9IHN1ZmZcblxuICBsZXQgY2hvcF9zdWZmaXhfb3B0IH5zdWZmaXggZmlsZW5hbWUgPVxuICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggc3VmZml4IGFuZCBsZW5fZiA9IFN0cmluZy5sZW5ndGggZmlsZW5hbWUgaW5cbiAgICBpZiBsZW5fZiA+PSBsZW5fcyB0aGVuXG4gICAgICBsZXQgciA9IFN0cmluZy5zdWIgZmlsZW5hbWUgKGxlbl9mIC0gbGVuX3MpIGxlbl9zIGluXG4gICAgICBpZiByID0gc3VmZml4IHRoZW5cbiAgICAgICAgU29tZSAoU3RyaW5nLnN1YiBmaWxlbmFtZSAwIChsZW5fZiAtIGxlbl9zKSlcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIE5vbmVcblxuICBsZXQgdGVtcF9kaXJfbmFtZSA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJUTVBESVJcIiB3aXRoIE5vdF9mb3VuZCAtPiBcIi90bXBcIlxuICBsZXQgcXVvdGUgPSBnZW5lcmljX3F1b3RlIFwiJ1xcXFwnJ1wiXG4gIGxldCBxdW90ZV9jb21tYW5kIGNtZCA/c3RkaW4gP3N0ZG91dCA/c3RkZXJyIGFyZ3MgPVxuICAgIFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIHF1b3RlIChjbWQgOjogYXJncykpXG4gICAgXiAobWF0Y2ggc3RkaW4gIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+IFwiIDxcIiBeIHF1b3RlIGYpXG4gICAgXiAobWF0Y2ggc3Rkb3V0IHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+IFwiID5cIiBeIHF1b3RlIGYpXG4gICAgXiAobWF0Y2ggc3RkZXJyIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+IGlmIHN0ZGVyciA9IHN0ZG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBcIiAyPiYxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgXCIgMj5cIiBeIHF1b3RlIGYpXG4gIGxldCBiYXNlbmFtZSA9IGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lXG4gIGxldCBkaXJuYW1lID0gZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuZW5kXG5cbm1vZHVsZSBXaW4zMiA6IFNZU0RFUFMgPSBzdHJ1Y3RcbiAgbGV0IG51bGwgPSBcIk5VTFwiXG4gIGxldCBjdXJyZW50X2Rpcl9uYW1lID0gXCIuXCJcbiAgbGV0IHBhcmVudF9kaXJfbmFtZSA9IFwiLi5cIlxuICBsZXQgZGlyX3NlcCA9IFwiXFxcXFwiXG4gIGxldCBpc19kaXJfc2VwIHMgaSA9IGxldCBjID0gcy5baV0gaW4gYyA9ICcvJyB8fCBjID0gJ1xcXFwnIHx8IGMgPSAnOidcbiAgbGV0IGlzX3JlbGF0aXZlIG4gPVxuICAgIChTdHJpbmcubGVuZ3RoIG4gPCAxIHx8IG4uWzBdIDw+ICcvJylcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMSB8fCBuLlswXSA8PiAnXFxcXCcpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgbi5bMV0gPD4gJzonKVxuICBsZXQgaXNfaW1wbGljaXQgbiA9XG4gICAgaXNfcmVsYXRpdmUgblxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAyIHx8IFN0cmluZy5zdWIgbiAwIDIgPD4gXCIuL1wiKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAyIHx8IFN0cmluZy5zdWIgbiAwIDIgPD4gXCIuXFxcXFwiKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAzIHx8IFN0cmluZy5zdWIgbiAwIDMgPD4gXCIuLi9cIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMyB8fCBTdHJpbmcuc3ViIG4gMCAzIDw+IFwiLi5cXFxcXCIpXG4gIGxldCBjaGVja19zdWZmaXggbmFtZSBzdWZmID1cbiAgIFN0cmluZy5sZW5ndGggbmFtZSA+PSBTdHJpbmcubGVuZ3RoIHN1ZmYgJiZcbiAgIChsZXQgcyA9IFN0cmluZy5zdWIgbmFtZSAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gU3RyaW5nLmxlbmd0aCBzdWZmKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmcubGVuZ3RoIHN1ZmYpIGluXG4gICAgU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzID0gU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzdWZmKVxuXG4gIGxldCBjaG9wX3N1ZmZpeF9vcHQgfnN1ZmZpeCBmaWxlbmFtZSA9XG4gICAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzdWZmaXggYW5kIGxlbl9mID0gU3RyaW5nLmxlbmd0aCBmaWxlbmFtZSBpblxuICAgIGlmIGxlbl9mID49IGxlbl9zIHRoZW5cbiAgICAgIGxldCByID0gU3RyaW5nLnN1YiBmaWxlbmFtZSAobGVuX2YgLSBsZW5fcykgbGVuX3MgaW5cbiAgICAgIGlmIFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgciA9IFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgc3VmZml4IHRoZW5cbiAgICAgICAgU29tZSAoU3RyaW5nLnN1YiBmaWxlbmFtZSAwIChsZW5fZiAtIGxlbl9zKSlcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIE5vbmVcblxuXG4gIGxldCB0ZW1wX2Rpcl9uYW1lID1cbiAgICB0cnkgU3lzLmdldGVudiBcIlRFTVBcIiB3aXRoIE5vdF9mb3VuZCAtPiBcIi5cIlxuICBsZXQgcXVvdGUgcyA9XG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGwgKyAyMCkgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcIic7XG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IGwgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcIicgZWxzZVxuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXFxcIicgLT4gbG9vcF9icyAwIGk7XG4gICAgICB8ICdcXFxcJyAtPiBsb29wX2JzIDAgaTtcbiAgICAgIHwgYyAgICAtPiBCdWZmZXIuYWRkX2NoYXIgYiBjOyBsb29wIChpKzEpO1xuICAgIGFuZCBsb29wX2JzIG4gaSA9XG4gICAgICBpZiBpID0gbCB0aGVuIGJlZ2luXG4gICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJztcbiAgICAgICAgYWRkX2JzIG47XG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgIHwgJ1xcXCInIC0+IGFkZF9icyAoMipuKzEpOyBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcIic7IGxvb3AgKGkrMSk7XG4gICAgICAgIHwgJ1xcXFwnIC0+IGxvb3BfYnMgKG4rMSkgKGkrMSk7XG4gICAgICAgIHwgXyAgICAtPiBhZGRfYnMgbjsgbG9vcCBpXG4gICAgICBlbmRcbiAgICBhbmQgYWRkX2JzIG4gPSBmb3IgX2ogPSAxIHRvIG4gZG8gQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXFwnOyBkb25lXG4gICAgaW5cbiAgICBsb29wIDA7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcbigqXG5RdW90aW5nIGNvbW1hbmRzIGZvciBleGVjdXRpb24gYnkgY21kLmV4ZSBpcyBkaWZmaWN1bHQuXG4xLSBFYWNoIGFyZ3VtZW50IGlzIGZpcnN0IHF1b3RlZCB1c2luZyB0aGUgXCJxdW90ZVwiIGZ1bmN0aW9uIGFib3ZlLCB0b1xuICAgcHJvdGVjdCBpdCBhZ2FpbnN0IHRoZSBwcm9jZXNzaW5nIHBlcmZvcm1lZCBieSB0aGUgQyBydW50aW1lIHN5c3RlbSxcbiAgIHRoZW4gY21kLmV4ZSdzIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgZXNjYXBlZCB3aXRoICdeJywgdXNpbmdcbiAgIHRoZSBcInF1b3RlX2NtZFwiIGZ1bmN0aW9uIGJlbG93LiAgRm9yIG1vcmUgZGV0YWlscywgc2VlXG4gICBodHRwczovL2Jsb2dzLm1zZG4ubWljcm9zb2Z0LmNvbS90d2lzdHlsaXR0bGVwYXNzYWdlc2FsbGFsaWtlLzIwMTEvMDQvMjNcbjItIFRoZSBjb21tYW5kIGFuZCB0aGUgcmVkaXJlY3Rpb24gZmlsZXMsIGlmIGFueSwgbXVzdCBiZSBkb3VibGUtcXVvdGVkXG4gICBpbiBjYXNlIHRoZXkgY29udGFpbiBzcGFjZXMuICBUaGlzIHF1b3RpbmcgaXMgaW50ZXJwcmV0ZWQgYnkgY21kLmV4ZSxcbiAgIG5vdCBieSB0aGUgQyBydW50aW1lIHN5c3RlbSwgaGVuY2UgdGhlIFwicXVvdGVcIiBmdW5jdGlvbiBhYm92ZVxuICAgY2Fubm90IGJlIHVzZWQuICBUaGUgdHdvIGNoYXJhY3RlcnMgd2UgZG9uJ3Qga25vdyBob3cgdG8gcXVvdGVcbiAgIGluc2lkZSBhIGRvdWJsZS1xdW90ZWQgY21kLmV4ZSBzdHJpbmcgYXJlIGRvdWJsZS1xdW90ZSBhbmQgcGVyY2VudC5cbiAgIFdlIGp1c3QgZmFpbCBpZiB0aGUgY29tbWFuZCBuYW1lIG9yIHRoZSByZWRpcmVjdGlvbiBmaWxlIG5hbWVzXG4gICBjb250YWluIGEgZG91YmxlIHF1b3RlIChub3QgYWxsb3dlZCBpbiBXaW5kb3dzIGZpbGUgbmFtZXMsIGFueXdheSlcbiAgIG9yIGEgcGVyY2VudC4gIFNlZSBmdW5jdGlvbiBcInF1b3RlX2NtZF9maWxlbmFtZVwiIGJlbG93LlxuMy0gVGhlIHdob2xlIHN0cmluZyBwYXNzZWQgdG8gU3lzLmNvbW1hbmQgaXMgdGhlbiBlbmNsb3NlZCBpbiBkb3VibGVcbiAgIHF1b3Rlcywgd2hpY2ggYXJlIGltbWVkaWF0ZWx5IHN0cmlwcGVkIGJ5IGNtZC5leGUuICBPdGhlcndpc2UsXG4gICBzb21lIG9mIHRoZSBkb3VibGUgcXVvdGVzIGZyb20gc3RlcCAyIGFib3ZlIGNhbiBiZSBtaXNwYXJzZWQuXG4gICBTZWUgZS5nLiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvOTk2NTE0MVxuKilcbiAgbGV0IHF1b3RlX2NtZCBzID1cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIDIwKSBpblxuICAgIFN0cmluZy5pdGVyXG4gICAgICAoZnVuIGMgLT5cbiAgICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICAgIHwgJygnIHwgJyknIHwgJyEnIHwgJ14nIHwgJyUnIHwgJ1xcXCInIHwgJzwnIHwgJz4nIHwgJyYnIHwgJ3wnIC0+XG4gICAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiAnXic7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjKVxuICAgICAgcztcbiAgICBCdWZmZXIuY29udGVudHMgYlxuICBsZXQgcXVvdGVfY21kX2ZpbGVuYW1lIGYgPVxuICAgIGlmIFN0cmluZy5jb250YWlucyBmICdcXFwiJyB8fCBTdHJpbmcuY29udGFpbnMgZiAnJScgdGhlblxuICAgICAgZmFpbHdpdGggKFwiRmlsZW5hbWUucXVvdGVfY29tbWFuZDogYmFkIGZpbGUgbmFtZSBcIiBeIGYpXG4gICAgZWxzZSBpZiBTdHJpbmcuY29udGFpbnMgZiAnICcgdGhlblxuICAgICAgXCJcXFwiXCIgXiBmIF4gXCJcXFwiXCJcbiAgICBlbHNlXG4gICAgICBmXG4gICgqIFJlZGlyZWN0aW9ucyBpbiBjbWQuZXhlOiBzZWUgaHR0cHM6Ly9zczY0LmNvbS9udC9zeW50YXgtcmVkaXJlY3Rpb24uaHRtbFxuICAgICBhbmQgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcHJldmlvdXMtdmVyc2lvbnMvd2luZG93cy9pdC1wcm8vd2luZG93cy14cC9iYjQ5MDk4Mih2PXRlY2huZXQuMTApXG4gICopXG4gIGxldCBxdW90ZV9jb21tYW5kIGNtZCA/c3RkaW4gP3N0ZG91dCA/c3RkZXJyIGFyZ3MgPVxuICAgIFN0cmluZy5jb25jYXQgXCJcIiBbXG4gICAgICBcIlxcXCJcIjtcbiAgICAgIHF1b3RlX2NtZF9maWxlbmFtZSBjbWQ7XG4gICAgICBcIiBcIjtcbiAgICAgIHF1b3RlX2NtZCAoU3RyaW5nLmNvbmNhdCBcIiBcIiAoTGlzdC5tYXAgcXVvdGUgYXJncykpO1xuICAgICAgKG1hdGNoIHN0ZGluICB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA8XCIgXiBxdW90ZV9jbWRfZmlsZW5hbWUgZik7XG4gICAgICAobWF0Y2ggc3Rkb3V0IHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+IFwiID5cIiBeIHF1b3RlX2NtZF9maWxlbmFtZSBmKTtcbiAgICAgIChtYXRjaCBzdGRlcnIgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdGRlcnIgPSBzdGRvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIFwiIDI+JjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgXCIgMj5cIiBeIHF1b3RlX2NtZF9maWxlbmFtZSBmKTtcbiAgICAgIFwiXFxcIlwiXG4gICAgXVxuICBsZXQgaGFzX2RyaXZlIHMgPVxuICAgIGxldCBpc19sZXR0ZXIgPSBmdW5jdGlvblxuICAgICAgfCAnQScgLi4gJ1onIHwgJ2EnIC4uICd6JyAtPiB0cnVlXG4gICAgICB8IF8gLT4gZmFsc2VcbiAgICBpblxuICAgIFN0cmluZy5sZW5ndGggcyA+PSAyICYmIGlzX2xldHRlciBzLlswXSAmJiBzLlsxXSA9ICc6J1xuICBsZXQgZHJpdmVfYW5kX3BhdGggcyA9XG4gICAgaWYgaGFzX2RyaXZlIHNcbiAgICB0aGVuIChTdHJpbmcuc3ViIHMgMCAyLCBTdHJpbmcuc3ViIHMgMiAoU3RyaW5nLmxlbmd0aCBzIC0gMikpXG4gICAgZWxzZSAoXCJcIiwgcylcbiAgbGV0IGRpcm5hbWUgcyA9XG4gICAgbGV0IChkcml2ZSwgcGF0aCkgPSBkcml2ZV9hbmRfcGF0aCBzIGluXG4gICAgbGV0IGRpciA9IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgcGF0aCBpblxuICAgIGRyaXZlIF4gZGlyXG4gIGxldCBiYXNlbmFtZSBzID1cbiAgICBsZXQgKF9kcml2ZSwgcGF0aCkgPSBkcml2ZV9hbmRfcGF0aCBzIGluXG4gICAgZ2VuZXJpY19iYXNlbmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgcGF0aFxuZW5kXG5cbm1vZHVsZSBDeWd3aW4gOiBTWVNERVBTID0gc3RydWN0XG4gIGxldCBudWxsID0gXCIvZGV2L251bGxcIlxuICBsZXQgY3VycmVudF9kaXJfbmFtZSA9IFwiLlwiXG4gIGxldCBwYXJlbnRfZGlyX25hbWUgPSBcIi4uXCJcbiAgbGV0IGRpcl9zZXAgPSBcIi9cIlxuICBsZXQgaXNfZGlyX3NlcCA9IFdpbjMyLmlzX2Rpcl9zZXBcbiAgbGV0IGlzX3JlbGF0aXZlID0gV2luMzIuaXNfcmVsYXRpdmVcbiAgbGV0IGlzX2ltcGxpY2l0ID0gV2luMzIuaXNfaW1wbGljaXRcbiAgbGV0IGNoZWNrX3N1ZmZpeCA9IFdpbjMyLmNoZWNrX3N1ZmZpeFxuICBsZXQgY2hvcF9zdWZmaXhfb3B0ID0gV2luMzIuY2hvcF9zdWZmaXhfb3B0XG4gIGxldCB0ZW1wX2Rpcl9uYW1lID0gVW5peC50ZW1wX2Rpcl9uYW1lXG4gIGxldCBxdW90ZSA9IFVuaXgucXVvdGVcbiAgbGV0IHF1b3RlX2NvbW1hbmQgPSBVbml4LnF1b3RlX2NvbW1hbmRcbiAgbGV0IGJhc2VuYW1lID0gZ2VuZXJpY19iYXNlbmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbiAgbGV0IGRpcm5hbWUgPSBnZW5lcmljX2Rpcm5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lXG5lbmRcblxubW9kdWxlIFN5c2RlcHMgPVxuICAodmFsIChtYXRjaCBTeXMub3NfdHlwZSB3aXRoXG4gICAgICAgfCBcIldpbjMyXCIgLT4gKG1vZHVsZSBXaW4zMjogU1lTREVQUylcbiAgICAgICB8IFwiQ3lnd2luXCIgLT4gKG1vZHVsZSBDeWd3aW46IFNZU0RFUFMpXG4gICAgICAgfCBfIC0+IChtb2R1bGUgVW5peDogU1lTREVQUykpKVxuXG5pbmNsdWRlIFN5c2RlcHNcblxubGV0IGNvbmNhdCBkaXJuYW1lIGZpbGVuYW1lID1cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIGRpcm5hbWUgaW5cbiAgaWYgbCA9IDAgfHwgaXNfZGlyX3NlcCBkaXJuYW1lIChsLTEpXG4gIHRoZW4gZGlybmFtZSBeIGZpbGVuYW1lXG4gIGVsc2UgZGlybmFtZSBeIGRpcl9zZXAgXiBmaWxlbmFtZVxuXG5sZXQgY2hvcF9zdWZmaXggbmFtZSBzdWZmID1cbiAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIG5hbWUgLSBTdHJpbmcubGVuZ3RoIHN1ZmYgaW5cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZpbGVuYW1lLmNob3Bfc3VmZml4XCIgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCBuXG5cbmxldCBleHRlbnNpb25fbGVuIG5hbWUgPVxuICBsZXQgcmVjIGNoZWNrIGkwIGkgPVxuICAgIGlmIGkgPCAwIHx8IGlzX2Rpcl9zZXAgbmFtZSBpIHRoZW4gMFxuICAgIGVsc2UgaWYgbmFtZS5baV0gPSAnLicgdGhlbiBjaGVjayBpMCAoaSAtIDEpXG4gICAgZWxzZSBTdHJpbmcubGVuZ3RoIG5hbWUgLSBpMFxuICBpblxuICBsZXQgcmVjIHNlYXJjaF9kb3QgaSA9XG4gICAgaWYgaSA8IDAgfHwgaXNfZGlyX3NlcCBuYW1lIGkgdGhlbiAwXG4gICAgZWxzZSBpZiBuYW1lLltpXSA9ICcuJyB0aGVuIGNoZWNrIGkgKGkgLSAxKVxuICAgIGVsc2Ugc2VhcmNoX2RvdCAoaSAtIDEpXG4gIGluXG4gIHNlYXJjaF9kb3QgKFN0cmluZy5sZW5ndGggbmFtZSAtIDEpXG5cbmxldCBleHRlbnNpb24gbmFtZSA9XG4gIGxldCBsID0gZXh0ZW5zaW9uX2xlbiBuYW1lIGluXG4gIGlmIGwgPSAwIHRoZW4gXCJcIiBlbHNlIFN0cmluZy5zdWIgbmFtZSAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gbCkgbFxuXG5sZXQgY2hvcF9leHRlbnNpb24gbmFtZSA9XG4gIGxldCBsID0gZXh0ZW5zaW9uX2xlbiBuYW1lIGluXG4gIGlmIGwgPSAwIHRoZW4gaW52YWxpZF9hcmcgXCJGaWxlbmFtZS5jaG9wX2V4dGVuc2lvblwiXG4gIGVsc2UgU3RyaW5nLnN1YiBuYW1lIDAgKFN0cmluZy5sZW5ndGggbmFtZSAtIGwpXG5cbmxldCByZW1vdmVfZXh0ZW5zaW9uIG5hbWUgPVxuICBsZXQgbCA9IGV4dGVuc2lvbl9sZW4gbmFtZSBpblxuICBpZiBsID0gMCB0aGVuIG5hbWUgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gbClcblxuZXh0ZXJuYWwgb3Blbl9kZXNjOiBzdHJpbmcgLT4gb3Blbl9mbGFnIGxpc3QgLT4gaW50IC0+IGludCA9IFwiY2FtbF9zeXNfb3BlblwiXG5leHRlcm5hbCBjbG9zZV9kZXNjOiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9zeXNfY2xvc2VcIlxuXG5sZXQgcHJuZyA9IGxhenkoUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0ICgpKVxuXG5sZXQgdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCA9XG4gIGxldCBybmQgPSAoUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZykpIGxhbmQgMHhGRkZGRkYgaW5cbiAgY29uY2F0IHRlbXBfZGlyIChQcmludGYuc3ByaW50ZiBcIiVzJTA2eCVzXCIgcHJlZml4IHJuZCBzdWZmaXgpXG5cblxubGV0IGN1cnJlbnRfdGVtcF9kaXJfbmFtZSA9IHJlZiB0ZW1wX2Rpcl9uYW1lXG5cbmxldCBzZXRfdGVtcF9kaXJfbmFtZSBzID0gY3VycmVudF90ZW1wX2Rpcl9uYW1lIDo9IHNcbmxldCBnZXRfdGVtcF9kaXJfbmFtZSAoKSA9ICFjdXJyZW50X3RlbXBfZGlyX25hbWVcblxubGV0IHRlbXBfZmlsZSA/KHRlbXBfZGlyID0gIWN1cnJlbnRfdGVtcF9kaXJfbmFtZSkgcHJlZml4IHN1ZmZpeCA9XG4gIGxldCByZWMgdHJ5X25hbWUgY291bnRlciA9XG4gICAgbGV0IG5hbWUgPSB0ZW1wX2ZpbGVfbmFtZSB0ZW1wX2RpciBwcmVmaXggc3VmZml4IGluXG4gICAgdHJ5XG4gICAgICBjbG9zZV9kZXNjKG9wZW5fZGVzYyBuYW1lIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl9leGNsXSAwbzYwMCk7XG4gICAgICBuYW1lXG4gICAgd2l0aCBTeXNfZXJyb3IgXyBhcyBlIC0+XG4gICAgICBpZiBjb3VudGVyID49IDEwMDAgdGhlbiByYWlzZSBlIGVsc2UgdHJ5X25hbWUgKGNvdW50ZXIgKyAxKVxuICBpbiB0cnlfbmFtZSAwXG5cbmxldCBvcGVuX3RlbXBfZmlsZSA/KG1vZGUgPSBbT3Blbl90ZXh0XSkgPyhwZXJtcyA9IDBvNjAwKVxuICAgICAgICAgICAgICAgICAgID8odGVtcF9kaXIgPSAhY3VycmVudF90ZW1wX2Rpcl9uYW1lKSBwcmVmaXggc3VmZml4ID1cbiAgbGV0IHJlYyB0cnlfbmFtZSBjb3VudGVyID1cbiAgICBsZXQgbmFtZSA9IHRlbXBfZmlsZV9uYW1lIHRlbXBfZGlyIHByZWZpeCBzdWZmaXggaW5cbiAgICB0cnlcbiAgICAgIChuYW1lLFxuICAgICAgIG9wZW5fb3V0X2dlbiAoT3Blbl93cm9ubHk6Ok9wZW5fY3JlYXQ6Ok9wZW5fZXhjbDo6bW9kZSkgcGVybXMgbmFtZSlcbiAgICB3aXRoIFN5c19lcnJvciBfIGFzIGUgLT5cbiAgICAgIGlmIGNvdW50ZXIgPj0gMTAwMCB0aGVuIHJhaXNlIGUgZWxzZSB0cnlfbmFtZSAoY291bnRlciArIDEpXG4gIGluIHRyeV9uYW1lIDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ29tcGxleCBudW1iZXJzICopXG5cbnR5cGUgdCA9IHsgcmU6IGZsb2F0OyBpbTogZmxvYXQgfVxuXG5sZXQgemVybyA9IHsgcmUgPSAwLjA7IGltID0gMC4wIH1cbmxldCBvbmUgPSB7IHJlID0gMS4wOyBpbSA9IDAuMCB9XG5sZXQgaSA9IHsgcmUgPSAwLjA7IGltID0gMS4wIH1cblxubGV0IGFkZCB4IHkgPSB7IHJlID0geC5yZSArLiB5LnJlOyBpbSA9IHguaW0gKy4geS5pbSB9XG5cbmxldCBzdWIgeCB5ID0geyByZSA9IHgucmUgLS4geS5yZTsgaW0gPSB4LmltIC0uIHkuaW0gfVxuXG5sZXQgbmVnIHggPSB7IHJlID0gLS4geC5yZTsgaW0gPSAtLiB4LmltIH1cblxubGV0IGNvbmogeCA9IHsgcmUgPSB4LnJlOyBpbSA9IC0uIHguaW0gfVxuXG5sZXQgbXVsIHggeSA9IHsgcmUgPSB4LnJlICouIHkucmUgLS4geC5pbSAqLiB5LmltO1xuICAgICAgICAgICAgICAgIGltID0geC5yZSAqLiB5LmltICsuIHguaW0gKi4geS5yZSB9XG5cbmxldCBkaXYgeCB5ID1cbiAgaWYgYWJzX2Zsb2F0IHkucmUgPj0gYWJzX2Zsb2F0IHkuaW0gdGhlblxuICAgIGxldCByID0geS5pbSAvLiB5LnJlIGluXG4gICAgbGV0IGQgPSB5LnJlICsuIHIgKi4geS5pbSBpblxuICAgIHsgcmUgPSAoeC5yZSArLiByICouIHguaW0pIC8uIGQ7XG4gICAgICBpbSA9ICh4LmltIC0uIHIgKi4geC5yZSkgLy4gZCB9XG4gIGVsc2VcbiAgICBsZXQgciA9IHkucmUgLy4geS5pbSBpblxuICAgIGxldCBkID0geS5pbSArLiByICouIHkucmUgaW5cbiAgICB7IHJlID0gKHIgKi4geC5yZSArLiB4LmltKSAvLiBkO1xuICAgICAgaW0gPSAociAqLiB4LmltIC0uIHgucmUpIC8uIGQgfVxuXG5sZXQgaW52IHggPSBkaXYgb25lIHhcblxubGV0IG5vcm0yIHggPSB4LnJlICouIHgucmUgKy4geC5pbSAqLiB4LmltXG5cbmxldCBub3JtIHggPVxuICAoKiBXYXRjaCBvdXQgZm9yIG92ZXJmbG93IGluIGNvbXB1dGluZyByZV4yICsgaW1eMiAqKVxuICBsZXQgciA9IGFic19mbG9hdCB4LnJlIGFuZCBpID0gYWJzX2Zsb2F0IHguaW0gaW5cbiAgaWYgciA9IDAuMCB0aGVuIGlcbiAgZWxzZSBpZiBpID0gMC4wIHRoZW4gclxuICBlbHNlIGlmIHIgPj0gaSB0aGVuXG4gICAgbGV0IHEgPSBpIC8uIHIgaW4gciAqLiBzcXJ0KDEuMCArLiBxICouIHEpXG4gIGVsc2VcbiAgICBsZXQgcSA9IHIgLy4gaSBpbiBpICouIHNxcnQoMS4wICsuIHEgKi4gcSlcblxubGV0IGFyZyB4ID0gYXRhbjIgeC5pbSB4LnJlXG5cbmxldCBwb2xhciBuIGEgPSB7IHJlID0gY29zIGEgKi4gbjsgaW0gPSBzaW4gYSAqLiBuIH1cblxubGV0IHNxcnQgeCA9XG4gIGlmIHgucmUgPSAwLjAgJiYgeC5pbSA9IDAuMCB0aGVuIHsgcmUgPSAwLjA7IGltID0gMC4wIH1cbiAgZWxzZSBiZWdpblxuICAgIGxldCByID0gYWJzX2Zsb2F0IHgucmUgYW5kIGkgPSBhYnNfZmxvYXQgeC5pbSBpblxuICAgIGxldCB3ID1cbiAgICAgIGlmIHIgPj0gaSB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBxID0gaSAvLiByIGluXG4gICAgICAgIHNxcnQocikgKi4gc3FydCgwLjUgKi4gKDEuMCArLiBzcXJ0KDEuMCArLiBxICouIHEpKSlcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBxID0gciAvLiBpIGluXG4gICAgICAgIHNxcnQoaSkgKi4gc3FydCgwLjUgKi4gKHEgKy4gc3FydCgxLjAgKy4gcSAqLiBxKSkpXG4gICAgICBlbmQgaW5cbiAgICBpZiB4LnJlID49IDAuMFxuICAgIHRoZW4geyByZSA9IHc7ICBpbSA9IDAuNSAqLiB4LmltIC8uIHcgfVxuICAgIGVsc2UgeyByZSA9IDAuNSAqLiBpIC8uIHc7ICBpbSA9IGlmIHguaW0gPj0gMC4wIHRoZW4gdyBlbHNlIC0uIHcgfVxuICBlbmRcblxubGV0IGV4cCB4ID1cbiAgbGV0IGUgPSBleHAgeC5yZSBpbiB7IHJlID0gZSAqLiBjb3MgeC5pbTsgaW0gPSBlICouIHNpbiB4LmltIH1cblxubGV0IGxvZyB4ID0geyByZSA9IGxvZyAobm9ybSB4KTsgaW0gPSBhdGFuMiB4LmltIHgucmUgfVxuXG5sZXQgcG93IHggeSA9IGV4cCAobXVsIHkgKGxvZyB4KSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcblxuZXh0ZXJuYWwgX19MT0NfT0ZfXyA6ICdhIC0+IHN0cmluZyAqICdhID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0xJTkVfT0ZfXyA6ICdhIC0+IGludCAqICdhID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19QT1NfT0ZfXyA6ICdhIC0+IChzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQpICogJ2EgPSBcIiVsb2NfUE9TXCJcblxuKCogQ29tcGFyaXNvbnMgKilcblxuZXh0ZXJuYWwgKCA9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuZXh0ZXJuYWwgKCA8PiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcbmV4dGVybmFsICggPCApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcbmV4dGVybmFsICggPiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcbmV4dGVybmFsICggPD0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuZXh0ZXJuYWwgKCA+PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5leHRlcm5hbCBjb21wYXJlIDogJ2EgLT4gJ2EgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5cbmxldCBtaW4geCB5ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggIT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcVwiXG5cbigqIEJvb2xlYW4gb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBub3QgOiBib29sIC0+IGJvb2wgPSBcIiVib29sbm90XCJcbmV4dGVybmFsICggJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggJiYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoIG9yICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5leHRlcm5hbCAoIHx8ICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5cbigqIEludGVnZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tICkgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsICggfisgKSA6IGludCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBzdWNjIDogaW50IC0+IGludCA9IFwiJXN1Y2NpbnRcIlxuZXh0ZXJuYWwgcHJlZCA6IGludCAtPiBpbnQgPSBcIiVwcmVkaW50XCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgKCAtICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXN1YmludFwiXG5leHRlcm5hbCAoICogKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsICggLyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgKCBtb2QgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcblxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5cbmV4dGVybmFsICggbGFuZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgKCBsb3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgKCBseG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5cbmxldCBsbm90IHggPSB4IGx4b3IgKC0xKVxuXG5leHRlcm5hbCAoIGxzbCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgKCBsc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNyaW50XCJcbmV4dGVybmFsICggYXNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5cbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuXG4oKiBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0uICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJW5lZ2Zsb2F0XCJcbmV4dGVybmFsICggfisuICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsICggKy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWRkZmxvYXRcIlxuZXh0ZXJuYWwgKCAtLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVzdWJmbG9hdFwiXG5leHRlcm5hbCAoICouICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJW11bGZsb2F0XCJcbmV4dGVybmFsICggLy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlZGl2ZmxvYXRcIlxuZXh0ZXJuYWwgKCAqKiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBfZmxvYXRcIiBcImV4cFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zX2Zsb2F0XCIgXCJhY29zXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luX2Zsb2F0XCIgXCJhc2luXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuX2Zsb2F0XCIgXCJhdGFuXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4yIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbjJfZmxvYXRcIiBcImF0YW4yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGh5cG90IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgID0gXCJjYW1sX2h5cG90X2Zsb2F0XCIgXCJjYW1sX2h5cG90XCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc19mbG9hdFwiIFwiY29zXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NoX2Zsb2F0XCIgXCJjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY2VpbCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2NlaWxfZmxvYXRcIiBcImNlaWxcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvb3IgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9vcl9mbG9hdFwiIFwiZmxvb3JcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzX2Zsb2F0IDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5leHRlcm5hbCBjb3B5c2lnbiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICAgICA9IFwiY2FtbF9jb3B5c2lnbl9mbG9hdFwiIFwiY2FtbF9jb3B5c2lnblwiXG4gICAgICAgICAgICAgICAgICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kX2Zsb2F0IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZm1vZF9mbG9hdFwiIFwiZm1vZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmcmV4cCA6IGZsb2F0IC0+IGZsb2F0ICogaW50ID0gXCJjYW1sX2ZyZXhwX2Zsb2F0XCJcbmV4dGVybmFsIGxkZXhwIDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IChpbnQgW0B1bnRhZ2dlZF0pIC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9sZGV4cF9mbG9hdFwiIFwiY2FtbF9sZGV4cF9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZGYgOiBmbG9hdCAtPiBmbG9hdCAqIGZsb2F0ID0gXCJjYW1sX21vZGZfZmxvYXRcIlxuZXh0ZXJuYWwgZmxvYXQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIGZsb2F0X29mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGludF9vZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfYml0cyA6IGludDY0IC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcIiBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c191bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmxldCBpbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuZWdfaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4RkZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmFuID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAxTFxubGV0IG1heF9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9FRl9GRl9GRl9GRl9GRl9GRl9GRkxcbmxldCBtaW5fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4MDBfMTBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgZXBzaWxvbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgzQ19CMF8wMF8wMF8wMF8wMF8wMF8wMExcblxudHlwZSBmcGNsYXNzID1cbiAgICBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cbmV4dGVybmFsIGNsYXNzaWZ5X2Zsb2F0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGZwY2xhc3MgPVxuICBcImNhbWxfY2xhc3NpZnlfZmxvYXRcIiBcImNhbWxfY2xhc3NpZnlfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5cbigqIFN0cmluZyBhbmQgYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlcyBTdHJpbmcgYW5kIEJ5dGVzICopXG5cbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19sZW5ndGggOiBieXRlcyAtPiBpbnQgPSBcIiVieXRlc19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBzdHJpbmdfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBieXRlc19ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBieXRlc191bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0ICggXiApIHMxIHMyID1cbiAgbGV0IGwxID0gc3RyaW5nX2xlbmd0aCBzMSBhbmQgbDIgPSBzdHJpbmdfbGVuZ3RoIHMyIGluXG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIChsMSArIGwyKSBpblxuICBzdHJpbmdfYmxpdCBzMSAwIHMgMCBsMTtcbiAgc3RyaW5nX2JsaXQgczIgMCBzIGwxIGwyO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgQ2hhciAqKVxuXG5leHRlcm5hbCBpbnRfb2ZfY2hhciA6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NoYXJfb2ZfaW50IDogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5sZXQgY2hhcl9vZl9pbnQgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcImNoYXJfb2ZfaW50XCIgZWxzZSB1bnNhZmVfY2hhcl9vZl9pbnQgblxuXG4oKiBVbml0IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFBhaXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBmc3QgOiAnYSAqICdiIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsIHNuZCA6ICdhICogJ2IgLT4gJ2IgPSBcIiVmaWVsZDFcIlxuXG4oKiBSZWZlcmVuY2VzICopXG5cbnR5cGUgJ2EgcmVmID0geyBtdXRhYmxlIGNvbnRlbnRzIDogJ2EgfVxuZXh0ZXJuYWwgcmVmIDogJ2EgLT4gJ2EgcmVmID0gXCIlbWFrZW11dGFibGVcIlxuZXh0ZXJuYWwgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgKCA6PSApIDogJ2EgcmVmIC0+ICdhIC0+IHVuaXQgPSBcIiVzZXRmaWVsZDBcIlxuZXh0ZXJuYWwgaW5jciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWluY3JcIlxuZXh0ZXJuYWwgZGVjciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWRlY3JcIlxuXG4oKiBSZXN1bHQgdHlwZSAqKVxuXG50eXBlICgnYSwnYikgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnYlxuXG4oKiBTdHJpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0IDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuXG5sZXQgc3RyaW5nX29mX2Jvb2wgYiA9XG4gIGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIlxubGV0IGJvb2xfb2Zfc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IGZhbHNlXG4gIHwgXyAtPiBpbnZhbGlkX2FyZyBcImJvb2xfb2Zfc3RyaW5nXCJcblxubGV0IGJvb2xfb2Zfc3RyaW5nX29wdCA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gU29tZSB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IFNvbWUgZmFsc2VcbiAgfCBfIC0+IE5vbmVcblxubGV0IHN0cmluZ19vZl9pbnQgbiA9XG4gIGZvcm1hdF9pbnQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5cbmxldCBpbnRfb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogcHJvdmlkZSB0aGlzIGRpcmVjdGx5IGFzIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlLiAqKVxuICB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmV4dGVybmFsIHN0cmluZ19nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuXG5sZXQgdmFsaWRfZmxvYXRfbGV4ZW0gcyA9XG4gIGxldCBsID0gc3RyaW5nX2xlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID49IGwgdGhlbiBzIF4gXCIuXCIgZWxzZVxuICAgIG1hdGNoIHN0cmluZ19nZXQgcyBpIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gbG9vcCAoaSArIDEpXG4gICAgfCBfIC0+IHNcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzdHJpbmdfb2ZfZmxvYXQgZiA9IHZhbGlkX2Zsb2F0X2xleGVtIChmb3JtYXRfZmxvYXQgXCIlLjEyZ1wiIGYpXG5cbmV4dGVybmFsIGZsb2F0X29mX3N0cmluZyA6IHN0cmluZyAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdF9vZl9zdHJpbmdcIlxuXG5sZXQgZmxvYXRfb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogcHJvdmlkZSB0aGlzIGRpcmVjdGx5IGFzIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlLiAqKVxuICB0cnkgU29tZSAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuKCogTGlzdCBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIExpc3QgKilcblxubGV0IHJlYyAoIEAgKSBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGhkIDo6IHRsIC0+IGhkIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxubGV0IGV4aXRfZnVuY3Rpb24gPSByZWYgZmx1c2hfYWxsXG5cbmxldCBhdF9leGl0IGYgPVxuICBsZXQgZyA9ICFleGl0X2Z1bmN0aW9uIGluXG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl9hbHJlYWR5X3JhbiA9IHJlZiBmYWxzZSBpblxuICBleGl0X2Z1bmN0aW9uIDo9XG4gICAgKGZ1biAoKSAtPlxuICAgICAgaWYgbm90ICFmX2FscmVhZHlfcmFuIHRoZW4gYmVnaW4gZl9hbHJlYWR5X3JhbiA6PSB0cnVlOyBmKCkgZW5kO1xuICAgICAgZygpKVxuXG5sZXQgZG9fYXRfZXhpdCAoKSA9ICghZXhpdF9mdW5jdGlvbikgKClcblxubGV0IGV4aXQgcmV0Y29kZSA9XG4gIGRvX2F0X2V4aXQgKCk7XG4gIHN5c19leGl0IHJldGNvZGVcblxubGV0IF8gPSByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuZG9fYXRfZXhpdFwiIGRvX2F0X2V4aXRcblxuKCpNT0RVTEVfQUxJQVNFUyopXG5tb2R1bGUgQXJnICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgID0gQXJyYXlcbm1vZHVsZSBBcnJheUxhYmVscyAgPSBBcnJheUxhYmVsc1xubW9kdWxlIEJpZ2FycmF5ICAgICA9IEJpZ2FycmF5XG5tb2R1bGUgQm9vbCAgICAgICAgID0gQm9vbFxubW9kdWxlIEJ1ZmZlciAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICA9IEJ5dGVzXG5tb2R1bGUgQnl0ZXNMYWJlbHMgID0gQnl0ZXNMYWJlbHNcbm1vZHVsZSBDYWxsYmFjayAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICA9IENoYXJcbm1vZHVsZSBDb21wbGV4ICAgICAgPSBDb21wbGV4XG5tb2R1bGUgRGlnZXN0ICAgICAgID0gRGlnZXN0XG5tb2R1bGUgRXBoZW1lcm9uICAgID0gRXBoZW1lcm9uXG5tb2R1bGUgRmlsZW5hbWUgICAgID0gRmlsZW5hbWVcbm1vZHVsZSBGbG9hdCAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICA9IEZvcm1hdFxubW9kdWxlIEZ1biAgICAgICAgICA9IEZ1blxubW9kdWxlIEdjICAgICAgICAgICA9IEdjXG5tb2R1bGUgR2VubGV4ICAgICAgID0gR2VubGV4XG5tb2R1bGUgSGFzaHRibCAgICAgID0gSGFzaHRibFxubW9kdWxlIEludCAgICAgICAgICA9IEludFxubW9kdWxlIEludDMyICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgID0gSW50NjRcbm1vZHVsZSBMYXp5ICAgICAgICAgPSBMYXp5XG5tb2R1bGUgTGV4aW5nICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgID0gTGlzdFxubW9kdWxlIExpc3RMYWJlbHMgICA9IExpc3RMYWJlbHNcbm1vZHVsZSBNYXAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgPSBNYXJzaGFsXG5tb2R1bGUgTW9yZUxhYmVscyAgID0gTW9yZUxhYmVsc1xubW9kdWxlIE5hdGl2ZWludCAgICA9IE5hdGl2ZWludFxubW9kdWxlIE9iaiAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICA9IE9vXG5tb2R1bGUgT3B0aW9uICAgICAgID0gT3B0aW9uXG5tb2R1bGUgUGFyc2luZyAgICAgID0gUGFyc2luZ1xubW9kdWxlIFBlcnZhc2l2ZXMgICA9IFBlcnZhc2l2ZXNcbm1vZHVsZSBQcmludGV4YyAgICAgPSBQcmludGV4Y1xubW9kdWxlIFByaW50ZiAgICAgICA9IFByaW50ZlxubW9kdWxlIFF1ZXVlICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgID0gUmFuZG9tXG5tb2R1bGUgUmVzdWx0ICAgICAgID0gUmVzdWx0XG5tb2R1bGUgU2NhbmYgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZXEgICAgICAgICAgPSBTZXFcbm1vZHVsZSBTZXQgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTcGFjZXRpbWUgICAgPSBTcGFjZXRpbWVcbm1vZHVsZSBTdGFjayAgICAgICAgPSBTdGFja1xubW9kdWxlIFN0ZExhYmVscyAgICA9IFN0ZExhYmVsc1xubW9kdWxlIFN0cmVhbSAgICAgICA9IFN0cmVhbVxubW9kdWxlIFN0cmluZyAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyA9IFN0cmluZ0xhYmVsc1xubW9kdWxlIFN5cyAgICAgICAgICA9IFN5c1xubW9kdWxlIFVjaGFyICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgID0gVW5pdFxubW9kdWxlIFdlYWsgICAgICAgICA9IFdlYWtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgTmljb2xhcyBPamVkYSBCYXIsIExleGlGaSAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgbmVnIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCBhZGQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsIHN1YiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgbXVsIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCBkaXYgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsIHJlbSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZm1hIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZm1hX2Zsb2F0XCIgXCJjYW1sX2ZtYVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnMgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcblxubGV0IHplcm8gPSAwLlxubGV0IG9uZSA9IDEuXG5sZXQgbWludXNfb25lID0gLTEuXG5sZXQgaW5maW5pdHkgPSBTdGRsaWIuaW5maW5pdHlcbmxldCBuZWdfaW5maW5pdHkgPSBTdGRsaWIubmVnX2luZmluaXR5XG5sZXQgbmFuID0gU3RkbGliLm5hblxubGV0IGlzX2Zpbml0ZSAoeDogZmxvYXQpID0geCAtLiB4ID0gMC5cbmxldCBpc19pbmZpbml0ZSAoeDogZmxvYXQpID0gMS4gLy4geCA9IDAuXG5sZXQgaXNfbmFuICh4OiBmbG9hdCkgPSB4IDw+IHhcblxubGV0IHBpID0gMHgxLjkyMWZiNTQ0NDJkMThwKzFcbmxldCBtYXhfZmxvYXQgPSBTdGRsaWIubWF4X2Zsb2F0XG5sZXQgbWluX2Zsb2F0ID0gU3RkbGliLm1pbl9mbG9hdFxubGV0IGVwc2lsb24gPSBTdGRsaWIuZXBzaWxvbl9mbG9hdFxuZXh0ZXJuYWwgb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0b19pbnQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZ19vcHQgPSBTdGRsaWIuZmxvYXRfb2Zfc3RyaW5nX29wdFxubGV0IHRvX3N0cmluZyA9IFN0ZGxpYi5zdHJpbmdfb2ZfZmxvYXRcbnR5cGUgZnBjbGFzcyA9IFN0ZGxpYi5mcGNsYXNzID1cbiAgICBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cbmV4dGVybmFsIGNsYXNzaWZ5X2Zsb2F0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGZwY2xhc3MgPVxuICBcImNhbWxfY2xhc3NpZnlfZmxvYXRcIiBcImNhbWxfY2xhc3NpZnlfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBwb3cgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNxcnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zcXJ0X2Zsb2F0XCIgXCJzcXJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMXAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxcF9mbG9hdFwiIFwiY2FtbF9sb2cxcFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5fZmxvYXRcIiBcInNpblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luaF9mbG9hdFwiIFwic2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0cnVuYyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RydW5jX2Zsb2F0XCIgXCJjYW1sX3RydW5jXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHJvdW5kIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcm91bmRfZmxvYXRcIiBcImNhbWxfcm91bmRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY2VpbCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2NlaWxfZmxvYXRcIiBcImNlaWxcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvb3IgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9vcl9mbG9hdFwiIFwiZmxvb3JcIlxuW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cblxubGV0IGlzX2ludGVnZXIgeCA9IHggPSB0cnVuYyB4ICYmIGlzX2Zpbml0ZSB4XG5cbmV4dGVybmFsIG5leHRfYWZ0ZXIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICA9IFwiY2FtbF9uZXh0YWZ0ZXJfZmxvYXRcIiBcImNhbWxfbmV4dGFmdGVyXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cblxubGV0IHN1Y2MgeCA9IG5leHRfYWZ0ZXIgeCBpbmZpbml0eVxubGV0IHByZWQgeCA9IG5leHRfYWZ0ZXIgeCBuZWdfaW5maW5pdHlcblxuZXh0ZXJuYWwgY29weV9zaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaWduX2JpdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBib29sXG4gID0gXCJjYW1sX3NpZ25iaXRfZmxvYXRcIiBcImNhbWxfc2lnbmJpdFwiIFtAQG5vYWxsb2NdXG5cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG50eXBlIHQgPSBmbG9hdFxuZXh0ZXJuYWwgY29tcGFyZSA6IGZsb2F0IC0+IGZsb2F0IC0+IGludCA9IFwiJWNvbXBhcmVcIlxubGV0IGVxdWFsIHggeSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXRbQGlubGluZV0gbWluICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB5IHRoZW4geSBlbHNlIHhcbiAgZWxzZSBpZiBpc19uYW4geCB0aGVuIHggZWxzZSB5XG5cbmxldFtAaW5saW5lXSBtYXggKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHggdGhlbiB4IGVsc2UgeVxuICBlbHNlIGlmIGlzX25hbiB5IHRoZW4geSBlbHNlIHhcblxubGV0W0BpbmxpbmVdIG1pbl9tYXggKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgaXNfbmFuIHggfHwgaXNfbmFuIHkgdGhlbiAobmFuLCBuYW4pXG4gIGVsc2UgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuICh4LCB5KSBlbHNlICh5LCB4KVxuXG5sZXRbQGlubGluZV0gbWluX251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geCB0aGVuIHkgZWxzZSB4XG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiB4IGVsc2UgeVxuXG5sZXRbQGlubGluZV0gbWF4X251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geSB0aGVuIHggZWxzZSB5XG4gIGVsc2UgaWYgaXNfbmFuIHggdGhlbiB5IGVsc2UgeFxuXG5sZXRbQGlubGluZV0gbWluX21heF9udW0gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgaXNfbmFuIHggdGhlbiAoeSx5KVxuICBlbHNlIGlmIGlzX25hbiB5IHRoZW4gKHgseClcbiAgZWxzZSBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW4gKHgseSkgZWxzZSAoeSx4KVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6IGludCAtPiBpbnQgLT4gaW50IC0+IGZsb2F0IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuXG5tb2R1bGUgQXJyYXkgPSBzdHJ1Y3RcblxuICB0eXBlIHQgPSBmbG9hdGFycmF5XG5cbiAgZXh0ZXJuYWwgbGVuZ3RoIDogdCAtPiBpbnQgPSBcIiVmbG9hdGFycmF5X2xlbmd0aFwiXG4gIGV4dGVybmFsIGdldCA6IHQgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV9zYWZlX2dldFwiXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfc2V0XCJcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IHQgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX3NldFwiXG5cbiAgbGV0IHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2ID1cbiAgICBmb3IgaSA9IG9mcyB0byBvZnMgKyBsZW4gLSAxIGRvIHVuc2FmZV9zZXQgYSBpIHYgZG9uZVxuXG4gIGxldCB1bnNhZmVfYmxpdCBzcmMgc29mcyBkc3QgZG9mcyBsZW4gPVxuICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IGRzdCAoZG9mcyArIGkpICh1bnNhZmVfZ2V0IHNyYyAoc29mcyArIGkpKVxuICAgIGRvbmVcblxuICBsZXQgY2hlY2sgYSBvZnMgbGVuIG1zZyA9XG4gICAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyArIGxlbiA8IDAgfHwgb2ZzICsgbGVuID4gbGVuZ3RoIGEgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgbGV0IG1ha2UgbiB2ID1cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIG4gaW5cbiAgICB1bnNhZmVfZmlsbCByZXN1bHQgMCBuIHY7XG4gICAgcmVzdWx0XG5cbiAgbGV0IGluaXQgbCBmID1cbiAgICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaW5pdFwiXG4gICAgZWxzZVxuICAgICAgbGV0IHJlcyA9IGNyZWF0ZSBsIGluXG4gICAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgICAgZG9uZTtcbiAgICAgIHJlc1xuXG4gIGxldCBhcHBlbmQgYTEgYTIgPVxuICAgIGxldCBsMSA9IGxlbmd0aCBhMSBpblxuICAgIGxldCBsMiA9IGxlbmd0aCBhMiBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgKGwxICsgbDIpIGluXG4gICAgdW5zYWZlX2JsaXQgYTEgMCByZXN1bHQgMCBsMTtcbiAgICB1bnNhZmVfYmxpdCBhMiAwIHJlc3VsdCBsMSBsMjtcbiAgICByZXN1bHRcblxuICAoKiBuZXh0IDMgZnVuY3Rpb25zOiBtb2RpZmllZCBjb3B5IG9mIGNvZGUgZnJvbSBzdHJpbmcubWwgKilcbiAgbGV0IGVuc3VyZV9nZSAoeDppbnQpIHkgPVxuICAgIGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5LmNvbmNhdFwiXG5cbiAgbGV0IHJlYyBzdW1fbGVuZ3RocyBhY2MgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjXG4gICAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBhY2MpIGFjYykgdGxcblxuICBsZXQgY29uY2F0IGwgPVxuICAgIGxldCBsZW4gPSBzdW1fbGVuZ3RocyAwIGwgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGxlbiBpblxuICAgIGxldCByZWMgbG9vcCBsIGkgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGFzc2VydCAoaSA9IGxlbilcbiAgICAgIHwgaGQgOjogdGwgLT5cbiAgICAgICAgbGV0IGhsZW4gPSBsZW5ndGggaGQgaW5cbiAgICAgICAgdW5zYWZlX2JsaXQgaGQgMCByZXN1bHQgaSBobGVuO1xuICAgICAgICBsb29wIHRsIChpICsgaGxlbilcbiAgICBpblxuICAgIGxvb3AgbCAwO1xuICAgIHJlc3VsdFxuXG4gIGxldCBzdWIgYSBvZnMgbGVuID1cbiAgICBjaGVjayBhIG9mcyBsZW4gXCJGbG9hdC5BcnJheS5zdWJcIjtcbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGxlbiBpblxuICAgIHVuc2FmZV9ibGl0IGEgb2ZzIHJlc3VsdCAwIGxlbjtcbiAgICByZXN1bHRcblxuICBsZXQgY29weSBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSBsIGluXG4gICAgdW5zYWZlX2JsaXQgYSAwIHJlc3VsdCAwIGw7XG4gICAgcmVzdWx0XG5cbiAgbGV0IGZpbGwgYSBvZnMgbGVuIHYgPVxuICAgIGNoZWNrIGEgb2ZzIGxlbiBcIkZsb2F0LkFycmF5LmZpbGxcIjtcbiAgICB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdlxuXG4gIGxldCBibGl0IHNyYyBzb2ZzIGRzdCBkb2ZzIGxlbiA9XG4gICAgY2hlY2sgc3JjIHNvZnMgbGVuIFwiRmxvYXQuYXJyYXkuYmxpdFwiO1xuICAgIGNoZWNrIGRzdCBkb2ZzIGxlbiBcIkZsb2F0LmFycmF5LmJsaXRcIjtcbiAgICB1bnNhZmVfYmxpdCBzcmMgc29mcyBkc3QgZG9mcyBsZW5cblxuICBsZXQgdG9fbGlzdCBhID1cbiAgICBMaXN0LmluaXQgKGxlbmd0aCBhKSAodW5zYWZlX2dldCBhKVxuXG4gIGxldCBvZl9saXN0IGwgPVxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgKExpc3QubGVuZ3RoIGwpIGluXG4gICAgbGV0IHJlYyBmaWxsIGkgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gcmVzdWx0XG4gICAgICB8IGggOjogdCAtPiB1bnNhZmVfc2V0IHJlc3VsdCBpIGg7IGZpbGwgKGkgKyAxKSB0XG4gICAgaW5cbiAgICBmaWxsIDAgbFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlciBmIGEgPVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGl0ZXIyIGYgYSBiID1cbiAgICBpZiBsZW5ndGggYSA8PiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gICAgZWxzZVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSBkb25lXG5cbiAgbGV0IG1hcCBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG4gIGxldCBtYXAyIGYgYSBiID1cbiAgICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICAgIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gICAgaWYgbGEgPD4gbGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGl0ZXJpIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbiAgbGV0IG1hcGkgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgICBsZXQgciA9IHJlZiB4IGluXG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgICBkb25lO1xuICAgICFyXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgICBsZXQgciA9IHJlZiB4IGluXG4gICAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gICAgZG9uZTtcbiAgICAhclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZXhpc3RzIHAgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBsb29wIChpICsgMSkgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvcl9hbGwgcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKGkgKyAxKVxuICAgICAgZWxzZSBmYWxzZSBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgbWVtIHggYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICAgIGVsc2UgaWYgY29tcGFyZSAodW5zYWZlX2dldCBhIGkpIHggPSAwIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwsIGJ1dCBzbGlnaHRseSBkaWZmZXJlbnQgKilcbiAgbGV0IG1lbV9pZWVlIHggYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICAgIGVsc2UgaWYgeCA9ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgICBlbHNlIGxvb3AgKGkgKyAxKVxuICAgIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGV4Y2VwdGlvbiBCb3R0b20gb2YgaW50XG4gIGxldCBzb3J0IGNtcCBhID1cbiAgICBsZXQgbWF4c29uIGwgaSA9XG4gICAgICBsZXQgaTMxID0gaStpK2krMSBpblxuICAgICAgbGV0IHggPSByZWYgaTMxIGluXG4gICAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgICBpZiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMCB0aGVuIHggOj0gaTMxKzE7XG4gICAgICAgIGlmIGNtcCAoZ2V0IGEgIXgpIChnZXQgYSAoaTMxKzIpKSA8IDAgdGhlbiB4IDo9IGkzMSsyO1xuICAgICAgICAheFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgaWYgaTMxKzEgPCBsICYmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwXG4gICAgICAgIHRoZW4gaTMxKzFcbiAgICAgICAgZWxzZSBpZiBpMzEgPCBsIHRoZW4gaTMxIGVsc2UgcmFpc2UgKEJvdHRvbSBpKVxuICAgIGluXG4gICAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICAgIGlmIGNtcCAoZ2V0IGEgaikgZSA+IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgICAgdHJpY2tsZWRvd24gbCBqIGU7XG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgYSBpIGU7XG4gICAgICBlbmQ7XG4gICAgaW5cbiAgICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICAgIGxldCByZWMgYnViYmxlZG93biBsIGkgPVxuICAgICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIGJ1YmJsZWRvd24gbCBqXG4gICAgaW5cbiAgICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgICBsZXQgcmVjIHRyaWNrbGV1cCBpIGUgPVxuICAgICAgbGV0IGZhdGhlciA9IChpIC0gMSkgLyAzIGluXG4gICAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICAgIGlmIGNtcCAoZ2V0IGEgZmF0aGVyKSBlIDwgMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBhIGkgKGdldCBhIGZhdGhlcik7XG4gICAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgYSBpIGU7XG4gICAgICBlbmQ7XG4gICAgaW5cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICAgIGZvciBpID0gbCAtIDEgZG93bnRvIDIgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIGkpIGluXG4gICAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICAgIHRyaWNrbGV1cCAoYnViYmxlIGkgMCkgZTtcbiAgICBkb25lO1xuICAgIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sLCBleGNlcHQgZm9yIHRoZSBjYWxsIHRvIFtjcmVhdGVdICopXG4gIGxldCBjdXRvZmYgPSA1XG4gIGxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gICAgbGV0IG1lcmdlIHNyYzFvZnMgc3JjMWxlbiBzcmMyIHNyYzJvZnMgc3JjMmxlbiBkc3QgZHN0b2ZzID1cbiAgICAgIGxldCBzcmMxciA9IHNyYzFvZnMgKyBzcmMxbGVuIGFuZCBzcmMyciA9IHNyYzJvZnMgKyBzcmMybGVuIGluXG4gICAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICAgIGlmIGNtcCBzMSBzMiA8PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgICBzZXQgZHN0IGQgczE7XG4gICAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgICAgaWYgaTEgPCBzcmMxciB0aGVuXG4gICAgICAgICAgICBsb29wIGkxIChnZXQgYSBpMSkgaTIgczIgKGQgKyAxKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJsaXQgc3JjMiBpMiBkc3QgKGQgKyAxKSAoc3JjMnIgLSBpMilcbiAgICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgICAgbGV0IGkyID0gaTIgKyAxIGluXG4gICAgICAgICAgaWYgaTIgPCBzcmMyciB0aGVuXG4gICAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJsaXQgYSBpMSBkc3QgKGQgKyAxKSAoc3JjMXIgLSBpMSlcbiAgICAgICAgZW5kXG4gICAgICBpbiBsb29wIHNyYzFvZnMgKGdldCBhIHNyYzFvZnMpIHNyYzJvZnMgKGdldCBzcmMyIHNyYzJvZnMpIGRzdG9mcztcbiAgICBpblxuICAgIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgICAgICBsZXQgZSA9IChnZXQgYSAoc3Jjb2ZzICsgaSkpIGluXG4gICAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgICAgd2hpbGUgKCFqID49IGRzdG9mcyAmJiBjbXAgKGdldCBkc3QgIWopIGUgPiAwKSBkb1xuICAgICAgICAgIHNldCBkc3QgKCFqICsgMSkgKGdldCBkc3QgIWopO1xuICAgICAgICAgIGRlY3IgajtcbiAgICAgICAgZG9uZTtcbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSBlO1xuICAgICAgZG9uZTtcbiAgICBpblxuICAgIGxldCByZWMgc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgICBsZXQgbDEgPSBsZW4gLyAyIGluXG4gICAgICAgIGxldCBsMiA9IGxlbiAtIGwxIGluXG4gICAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgICBzb3J0dG8gc3Jjb2ZzIGEgKHNyY29mcyArIGwyKSBsMTtcbiAgICAgICAgbWVyZ2UgKHNyY29mcyArIGwyKSBsMSBkc3QgKGRzdG9mcyArIGwxKSBsMiBkc3QgZHN0b2ZzO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICAgIGxldCBsMSA9IGwgLyAyIGluXG4gICAgICBsZXQgbDIgPSBsIC0gbDEgaW5cbiAgICAgIGxldCB0ID0gY3JlYXRlIGwyIGluXG4gICAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgICAgc29ydHRvIDAgYSBsMiBsMTtcbiAgICAgIG1lcmdlIGwyIGwxIHQgMCBsMiBhIDA7XG4gICAgZW5kXG5cbiAgbGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCB0b19zZXEgYSA9XG4gICAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICAgICAgZWxzZSBTZXEuTmlsXG4gICAgaW5cbiAgICBhdXggMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgdG9fc2VxaSBhID1cbiAgICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAgIGlmIGkgPCBsZW5ndGggYVxuICAgICAgdGhlblxuICAgICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICAgICAgZWxzZSBTZXEuTmlsXG4gICAgaW5cbiAgICBhdXggMFxuXG4gICgqIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IG9mX3Jldl9saXN0IGwgPVxuICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgbGV0IGEgPSBjcmVhdGUgbGVuIGluXG4gICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICBbXSAtPiBhXG4gICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaS0xKSB0bFxuICAgIGluXG4gICAgZmlsbCAobGVuLTEpIGxcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IG9mX3NlcSBpID1cbiAgICBsZXQgbCA9IFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIGkgaW5cbiAgICBvZl9yZXZfbGlzdCBsXG5cblxuICBsZXQgbWFwX3RvX2FycmF5IGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGlmIGwgPSAwIHRoZW4gW3wgfF0gZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBBcnJheS5tYWtlIGwgKGYgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgICBBcnJheS51bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcblxuICBsZXQgbWFwX2Zyb21fYXJyYXkgZiBhID1cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBhIGluXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgKEFycmF5LnVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcblxuZW5kXG5cbm1vZHVsZSBBcnJheUxhYmVscyA9IEFycmF5XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbTmF0aXZlaW50XTogcHJvY2Vzc29yLW5hdGl2ZSBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWc6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbmVnXCJcbmV4dGVybmFsIGFkZDogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfYWRkXCJcbmV4dGVybmFsIHN1YjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfc3ViXCJcbmV4dGVybmFsIG11bDogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbXVsXCJcbmV4dGVybmFsIGRpdjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfZGl2XCJcbmV4dGVybmFsIHJlbTogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbW9kXCJcbmV4dGVybmFsIGxvZ2FuZDogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfYW5kXCJcbmV4dGVybmFsIGxvZ29yOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vclwiXG5leHRlcm5hbCBsb2d4b3I6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X3hvclwiXG5leHRlcm5hbCBzaGlmdF9sZWZ0OiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9sc2xcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQ6IG5hdGl2ZWludCAtPiBpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsOiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9sc3JcIlxuZXh0ZXJuYWwgb2ZfaW50OiBpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQ6IG5hdGl2ZWludCAtPiBpbnQgPSBcIiVuYXRpdmVpbnRfdG9faW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gbmF0aXZlaW50XG4gID0gXCJjYW1sX25hdGl2ZWludF9vZl9mbG9hdFwiIFwiY2FtbF9uYXRpdmVpbnRfb2ZfZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0b19mbG9hdCA6IG5hdGl2ZWludCAtPiBmbG9hdFxuICA9IFwiY2FtbF9uYXRpdmVpbnRfdG9fZmxvYXRcIiBcImNhbWxfbmF0aXZlaW50X3RvX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgb2ZfaW50MzI6IGludDMyIC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vZl9pbnQzMlwiXG5leHRlcm5hbCB0b19pbnQzMjogbmF0aXZlaW50IC0+IGludDMyID0gXCIlbmF0aXZlaW50X3RvX2ludDMyXCJcblxubGV0IHplcm8gPSAwblxubGV0IG9uZSA9IDFuXG5sZXQgbWludXNfb25lID0gLTFuXG5sZXQgc3VjYyBuID0gYWRkIG4gMW5cbmxldCBwcmVkIG4gPSBzdWIgbiAxblxubGV0IGFicyBuID0gaWYgbiA+PSAwbiB0aGVuIG4gZWxzZSBuZWcgblxubGV0IHNpemUgPSBTeXMud29yZF9zaXplXG5sZXQgbWluX2ludCA9IHNoaWZ0X2xlZnQgMW4gKHNpemUgLSAxKVxubGV0IG1heF9pbnQgPSBzdWIgbWluX2ludCAxblxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xbilcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIGxldCBtYXhfaW50ID0gb2ZfaW50IFN0ZGxpYi5tYXhfaW50IGluXG4gIGZ1biBuIC0+XG4gICAgaWYgY29tcGFyZSB6ZXJvIG4gPD0gMCAmJiBjb21wYXJlIG4gbWF4X2ludCA8PSAwIHRoZW5cbiAgICAgIFNvbWUgKHRvX2ludCBuKVxuICAgIGVsc2VcbiAgICAgIE5vbmVcblxuZXh0ZXJuYWwgZm9ybWF0IDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmcgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nOiBzdHJpbmcgLT4gbmF0aXZlaW50ID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5sZXQgb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogZXhwb3NlIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlIGRpcmVjdGx5LiAqKVxuICB0cnkgU29tZSAob2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxudHlwZSB0ID0gbmF0aXZlaW50XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZVxuICAgYml0bmVzcy4gU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2NvbXBhcmUgbiBkIDwgMCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfY29tcGFyZSByIGQgPj0gMCB0aGVuIHN1Y2MgcSBlbHNlIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0IHJlYyBpbml0X3RhaWxyZWNfYXV4IGFjYyBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIGFjY1xuICBlbHNlIGluaXRfdGFpbHJlY19hdXggKGYgaSA6OiBhY2MpIChpKzEpIG4gZlxuXG5sZXQgcmVjIGluaXRfYXV4IGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gW11cbiAgZWxzZVxuICAgIGxldCByID0gZiBpIGluXG4gICAgciA6OiBpbml0X2F1eCAoaSsxKSBuIGZcblxubGV0IHJldl9pbml0X3RocmVzaG9sZCA9XG4gIG1hdGNoIFN5cy5iYWNrZW5kX3R5cGUgd2l0aFxuICB8IFN5cy5OYXRpdmUgfCBTeXMuQnl0ZWNvZGUgLT4gMTBfMDAwXG4gICgqIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdGhlIHN0YWNrLCBiZXR0ZXIgYmUgc2FmZSBhbmQgYXNzdW1lIGl0J3NcbiAgICAgc21hbGwuICopXG4gIHwgU3lzLk90aGVyIF8gLT4gNTBcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGlmIGxlbiA+IHJldl9pbml0X3RocmVzaG9sZCB0aGVuIHJldiAoaW5pdF90YWlscmVjX2F1eCBbXSAwIGxlbiBmKVxuICBlbHNlIGluaXRfYXV4IDAgbGVuIGZcblxubGV0IHJlYyBmbGF0dGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGw6OnIgLT4gbCBAIGZsYXR0ZW4gclxuXG5sZXQgY29uY2F0ID0gZmxhdHRlblxuXG5sZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGEgaW4gciA6OiBtYXAgZiBsXG5cbmxldCByZWMgbWFwaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgaSBhIGluIHIgOjogbWFwaSAoaSArIDEpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldCByZWMgbWFwMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBsZXQgciA9IGYgYTEgYTIgaW4gciA6OiBtYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX2FsbCBwID1cbiAgbGV0IHJlYyBmaW5kIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2N1XG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIGZpbmQgKHggOjogYWNjdSkgbCBlbHNlIGZpbmQgYWNjdSBsIGluXG4gIGZpbmQgW11cblxubGV0IGZpbHRlciA9IGZpbmRfYWxsXG5cbmxldCBmaWx0ZXJfbWFwIGYgPVxuICBsZXQgcmVjIGF1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGF1eCBhY2N1IGxcbiAgICAgICAgfCBTb21lIHYgLT4gYXV4ICh2IDo6IGFjY3UpIGxcbiAgaW5cbiAgYXV4IFtdXG5cbmxldCBjb25jYXRfbWFwIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2NcbiAgICB8IHggOjogbCAtPlxuICAgICAgIGxldCB4cyA9IGYgeCBpblxuICAgICAgIGF1eCBmIChyZXZfYXBwZW5kIHhzIGFjYykgbFxuICBpbiBhdXggZiBbXSBsXG5cbmxldCBwYXJ0aXRpb24gcCBsID1cbiAgbGV0IHJlYyBwYXJ0IHllcyBubyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiB5ZXMsIHJldiBubylcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gcGFydCAoeCA6OiB5ZXMpIG5vIGwgZWxzZSBwYXJ0IHllcyAoeCA6OiBubykgbCBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHJlYyBzcGxpdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKFtdLCBbXSlcbiAgfCAoeCx5KTo6bCAtPlxuICAgICAgbGV0IChyeCwgcnkpID0gc3BsaXQgbCBpbiAoeDo6cngsIHk6OnJ5KVxuXG5sZXQgcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IChhMSwgYTIpIDo6IGNvbWJpbmUgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmNvbWJpbmVcIlxuXG4oKiogc29ydGluZyAqKVxuXG5sZXQgcmVjIG1lcmdlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIGwyIC0+IGwyXG4gIHwgbDEsIFtdIC0+IGwxXG4gIHwgaDEgOjogdDEsIGgyIDo6IHQyIC0+XG4gICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgdGhlbiBoMSA6OiBtZXJnZSBjbXAgdDEgbDJcbiAgICAgIGVsc2UgaDIgOjogbWVyZ2UgY21wIGwxIHQyXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA8PSAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyIDw9IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyID4gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHNvcnQgPSBzdGFibGVfc29ydFxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqIE5vdGU6IG9uIGEgbGlzdCBvZiBsZW5ndGggYmV0d2VlbiBhYm91dCAxMDAwMDAgKGRlcGVuZGluZyBvbiB0aGUgbWlub3JcbiAgIGhlYXAgc2l6ZSBhbmQgdGhlIHR5cGUgb2YgdGhlIGxpc3QpIGFuZCBTeXMubWF4X2FycmF5X3NpemUsIGl0IGlzXG4gICBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSBmb2xsb3dpbmcsIGJ1dCBpdCBtaWdodCBhbHNvIHVzZSBtb3JlIG1lbW9yeVxuICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgbGlzdCBjYW5ub3QgYmUgZGVhbGxvY2F0ZWQgaW5jcmVtZW50YWxseS5cblxuICAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhpcyBjb2RlIG9yIGluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2Ygb2JqX3RydW5jYXRlLlxuXG5leHRlcm5hbCBvYmpfdHJ1bmNhdGUgOiAnYSBhcnJheSAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuXG5sZXQgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhID1cbiAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgYWNjdSBuIHAgPVxuICAgIGlmIHAgPD0gMCB0aGVuIGFjY3UgZWxzZSBiZWdpblxuICAgICAgaWYgcCA9IG4gdGhlbiBiZWdpblxuICAgICAgICBvYmpfdHJ1bmNhdGUgYSBwO1xuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIChuLTEwMDApIChwLTEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIG4gKHAtMSlcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpblxuICBsb29wIFtdIChsLTEwMDApIGxcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBBcnJheS5zdGFibGVfc29ydCBjbXAgYTtcbiAgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhXG5cbiopXG5cblxuKCoqIHNvcnRpbmcgKyByZW1vdmluZyBkdXBsaWNhdGVzICopXG5cbmxldCBzb3J0X3VuaXEgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2UgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPCAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlX3JldiB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXywgW10gLT4gMVxuICB8IF8gOjogbDEsIF8gOjogbDIgLT4gY29tcGFyZV9sZW5ndGhzIGwxIGwyXG47O1xuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT5cbiAgICBpZiBuID0gMCB0aGVuIDAgZWxzZVxuICAgICAgaWYgbiA+IDAgdGhlbiAtMSBlbHNlIDFcbiAgfCBfIDo6IGwgLT5cbiAgICBpZiBuIDw9IDAgdGhlbiAxIGVsc2VcbiAgICAgIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCAobi0xKVxuOztcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBsID1cbiAgbGV0IHJlYyBhdXggbCAoKSA9IG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gU2VxLk5pbFxuICAgIHwgeCA6OiB0YWlsIC0+IFNlcS5Db25zICh4LCBhdXggdGFpbClcbiAgaW5cbiAgYXV4IGxcblxubGV0IG9mX3NlcSBzZXEgPVxuICBsZXQgcmVjIGRpcmVjdCBkZXB0aCBzZXEgOiBfIGxpc3QgPVxuICAgIGlmIGRlcHRoPTBcbiAgICB0aGVuXG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBzZXFcbiAgICAgIHw+IHJldiAoKiB0YWlscmVjICopXG4gICAgZWxzZSBtYXRjaCBzZXEoKSB3aXRoXG4gICAgICB8IFNlcS5OaWwgLT4gW11cbiAgICAgIHwgU2VxLkNvbnMgKHgsIG5leHQpIC0+IHggOjogZGlyZWN0IChkZXB0aC0xKSBuZXh0XG4gIGluXG4gIGRpcmVjdCA1MDAgc2VxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgU2ltb24gQ3J1YW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbU2VxXTogZnVuY3Rpb25hbCBpdGVyYXRvcnMgKilcblxudHlwZSArJ2Egbm9kZSA9XG4gIHwgTmlsXG4gIHwgQ29ucyBvZiAnYSAqICdhIHRcblxuYW5kICdhIHQgPSB1bml0IC0+ICdhIG5vZGVcblxubGV0IGVtcHR5ICgpID0gTmlsXG5cbmxldCByZXR1cm4geCAoKSA9IENvbnMgKHgsIGVtcHR5KVxuXG5sZXQgcmVjIG1hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoZiB4LCBtYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlcl9tYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gZmlsdGVyX21hcCBmIG5leHQgKClcbiAgICAgICAgfCBTb21lIHkgLT4gQ29ucyAoeSwgZmlsdGVyX21hcCBmIG5leHQpXG5cbmxldCByZWMgZmlsdGVyIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgaWYgZiB4XG4gICAgICB0aGVuIENvbnMgKHgsIGZpbHRlciBmIG5leHQpXG4gICAgICBlbHNlIGZpbHRlciBmIG5leHQgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgZmxhdF9tYXBfYXBwIGYgKGYgeCkgbmV4dCAoKVxuXG4oKiB0aGlzIGlzIFthcHBlbmQgc2VxIChmbGF0X21hcCBmIHRhaWwpXSAqKVxuYW5kIGZsYXRfbWFwX2FwcCBmIHNlcSB0YWlsICgpID0gbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBOaWwgLT4gZmxhdF9tYXAgZiB0YWlsICgpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICBDb25zICh4LCBmbGF0X21hcF9hcHAgZiBuZXh0IHRhaWwpXG5cbmxldCBmb2xkX2xlZnQgZiBhY2Mgc2VxID1cbiAgbGV0IHJlYyBhdXggZiBhY2Mgc2VxID0gbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICAgIGF1eCBmIGFjYyBuZXh0XG4gIGluXG4gIGF1eCBmIGFjYyBzZXFcblxubGV0IGl0ZXIgZiBzZXEgPVxuICBsZXQgcmVjIGF1eCBzZXEgPSBtYXRjaCBzZXEgKCkgd2l0aFxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgICBmIHg7XG4gICAgICAgIGF1eCBuZXh0XG4gIGluXG4gIGF1eCBzZXFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0gJ2Egb3B0aW9uID0gTm9uZSB8IFNvbWUgb2YgJ2FcblxubGV0IG5vbmUgPSBOb25lXG5sZXQgc29tZSB2ID0gU29tZSB2XG5sZXQgdmFsdWUgbyB+ZGVmYXVsdCA9IG1hdGNoIG8gd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gZGVmYXVsdFxubGV0IGdldCA9IGZ1bmN0aW9uIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIm9wdGlvbiBpcyBOb25lXCJcbmxldCBiaW5kIG8gZiA9IG1hdGNoIG8gd2l0aCBOb25lIC0+IE5vbmUgfCBTb21lIHYgLT4gZiB2XG5sZXQgam9pbiA9IGZ1bmN0aW9uIFNvbWUgbyAtPiBvIHwgTm9uZSAtPiBOb25lXG5sZXQgbWFwIGYgbyA9IG1hdGNoIG8gd2l0aCBOb25lIC0+IE5vbmUgfCBTb21lIHYgLT4gU29tZSAoZiB2KVxubGV0IGZvbGQgfm5vbmUgfnNvbWUgPSBmdW5jdGlvbiBTb21lIHYgLT4gc29tZSB2IHwgTm9uZSAtPiBub25lXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gU29tZSB2IC0+IGYgdiB8IE5vbmUgLT4gKClcbmxldCBpc19ub25lID0gZnVuY3Rpb24gTm9uZSAtPiB0cnVlIHwgU29tZSBfIC0+IGZhbHNlXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uIE5vbmUgLT4gZmFsc2UgfCBTb21lIF8gLT4gdHJ1ZVxuXG5sZXQgZXF1YWwgZXEgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGVxIHYwIHYxXG58IE5vbmUsIE5vbmUgLT4gdHJ1ZVxufCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIGNtcCBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gY21wIHYwIHYxXG58IE5vbmUsIE5vbmUgLT4gMFxufCBOb25lLCBTb21lIF8gLT4gLTFcbnwgU29tZSBfLCBOb25lIC0+IDFcblxubGV0IHRvX3Jlc3VsdCB+bm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gRXJyb3Igbm9uZSB8IFNvbWUgdiAtPiBPayB2XG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE5vbmUgLT4gW10gfCBTb21lIHYgLT4gW3ZdXG5sZXQgdG9fc2VxID0gZnVuY3Rpb24gTm9uZSAtPiBTZXEuZW1wdHkgfCBTb21lIHYgLT4gU2VxLnJldHVybiB2XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgKCdhLCAnZSkgdCA9ICgnYSwgJ2UpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2VcblxubGV0IG9rIHYgPSBPayB2XG5sZXQgZXJyb3IgZSA9IEVycm9yIGVcbmxldCB2YWx1ZSByIH5kZWZhdWx0ID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gdiB8IEVycm9yIF8gLT4gZGVmYXVsdFxubGV0IGdldF9vayA9IGZ1bmN0aW9uIE9rIHYgLT4gdiB8IEVycm9yIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgRXJyb3IgX1wiXG5sZXQgZ2V0X2Vycm9yID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBlIHwgT2sgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBPayBfXCJcbmxldCBiaW5kIHIgZiA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IGYgdiB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgam9pbiA9IGZ1bmN0aW9uIE9rIHIgLT4gciB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwIGYgPSBmdW5jdGlvbiBPayB2IC0+IE9rIChmIHYpIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXBfZXJyb3IgZiA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gRXJyb3IgKGYgZSkgfCBPayBfIGFzIHYgLT4gdlxubGV0IGZvbGQgfm9rIH5lcnJvciA9IGZ1bmN0aW9uIE9rIHYgLT4gb2sgdiB8IEVycm9yIGUgLT4gZXJyb3IgZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyAtPiAoKVxubGV0IGl0ZXJfZXJyb3IgZiA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZiBlIHwgT2sgXyAtPiAoKVxubGV0IGlzX29rID0gZnVuY3Rpb24gT2sgXyAtPiB0cnVlIHwgRXJyb3IgXyAtPiBmYWxzZVxubGV0IGlzX2Vycm9yID0gZnVuY3Rpb24gRXJyb3IgXyAtPiB0cnVlIHwgT2sgXyAtPiBmYWxzZVxuXG5sZXQgZXF1YWwgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgXywgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBPayBfLCBFcnJvciBfIC0+IC0xXG58IEVycm9yIF8sIE9rIF8gLT4gMVxuXG5sZXQgdG9fb3B0aW9uID0gZnVuY3Rpb24gT2sgdiAtPiBTb21lIHYgfCBFcnJvciBfIC0+IE5vbmVcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gT2sgdiAtPiBbdl0gfCBFcnJvciBfIC0+IFtdXG5sZXQgdG9fc2VxID0gZnVuY3Rpb24gT2sgdiAtPiBTZXEucmV0dXJuIHYgfCBFcnJvciBfIC0+IFNlcS5lbXB0eVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBib29sID0gZmFsc2UgfCB0cnVlXG5cbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmxldCBlcXVhbCA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gKCA9IClcbmxldCBjb21wYXJlIDogYm9vbCAtPiBib29sIC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgdG9faW50ID0gZnVuY3Rpb24gZmFsc2UgLT4gMCB8IHRydWUgLT4gMVxubGV0IHRvX2Zsb2F0ID0gZnVuY3Rpb24gZmFsc2UgLT4gMC4gfCB0cnVlIC0+IDEuXG5cbigqXG5sZXQgb2Zfc3RyaW5nID0gZnVuY3Rpb25cbnwgXCJmYWxzZVwiIC0+IFNvbWUgZmFsc2VcbnwgXCJ0cnVlXCIgLT4gU29tZSB0cnVlXG58IF8gLT4gTm9uZVxuKilcblxubGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uIGZhbHNlIC0+IFwiZmFsc2VcIiB8IHRydWUgLT4gXCJ0cnVlXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGNociBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiQ2hhci5jaHJcIiBlbHNlIHVuc2FmZV9jaHIgblxuXG5leHRlcm5hbCBieXRlc19jcmVhdGU6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0IGVzY2FwZWQgPSBmdW5jdGlvblxuICB8ICdcXCcnIC0+IFwiXFxcXCdcIlxuICB8ICdcXFxcJyAtPiBcIlxcXFxcXFxcXCJcbiAgfCAnXFxuJyAtPiBcIlxcXFxuXCJcbiAgfCAnXFx0JyAtPiBcIlxcXFx0XCJcbiAgfCAnXFxyJyAtPiBcIlxcXFxyXCJcbiAgfCAnXFxiJyAtPiBcIlxcXFxiXCJcbiAgfCAnICcgLi4gJ34nIGFzIGMgLT5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDEgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwIGM7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcbiAgfCBjIC0+XG4gICAgICBsZXQgbiA9IGNvZGUgYyBpblxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgNCBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgJ1xcXFwnO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDEgKHVuc2FmZV9jaHIgKDQ4ICsgbiAvIDEwMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDIgKHVuc2FmZV9jaHIgKDQ4ICsgKG4gLyAxMCkgbW9kIDEwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMyAodW5zYWZlX2NociAoNDggKyBuIG1vZCAxMCkpO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG5cbmxldCBsb3dlcmNhc2UgYyA9XG4gIGlmIChjID49ICdBJyAmJiBjIDw9ICdaJylcbiAgfHwgKGMgPj0gJ1xcMTkyJyAmJiBjIDw9ICdcXDIxNCcpXG4gIHx8IChjID49ICdcXDIxNicgJiYgYyA8PSAnXFwyMjInKVxuICB0aGVuIHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIGVsc2UgY1xuXG5sZXQgdXBwZXJjYXNlIGMgPVxuICBpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpXG4gIHx8IChjID49ICdcXDIyNCcgJiYgYyA8PSAnXFwyNDYnKVxuICB8fCAoYyA+PSAnXFwyNDgnICYmIGMgPD0gJ1xcMjU0JylcbiAgdGhlbiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICBlbHNlIGNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSBjID1cbiAgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKVxuICB0aGVuIHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIGVsc2UgY1xuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIGMgPVxuICBpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpXG4gIHRoZW4gdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgZWxzZSBjXG5cbnR5cGUgdCA9IGNoYXJcblxubGV0IGNvbXBhcmUgYzEgYzIgPSBjb2RlIGMxIC0gY29kZSBjMlxubGV0IGVxdWFsIChjMTogdCkgKGMyOiB0KSA9IGNvbXBhcmUgYzEgYzIgPSAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAqKVxuXG4oKiBXQVJOSU5HOiBTb21lIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIHN0cmluZy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9nZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGJ5dGVzID0gXCIlYnl0ZXNfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9ibGl0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5cbmxldCBtYWtlIG4gYyA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgdW5zYWZlX2ZpbGwgcyAwIG4gYztcbiAgc1xuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIGZvciBpID0gMCB0byBuIC0gMSBkb1xuICAgIHVuc2FmZV9zZXQgcyBpIChmIGkpXG4gIGRvbmU7XG4gIHNcblxubGV0IGVtcHR5ID0gY3JlYXRlIDBcblxubGV0IGNvcHkgcyA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgdW5zYWZlX2JsaXQgcyAwIHIgMCBsZW47XG4gIHJcblxubGV0IHRvX3N0cmluZyBiID0gdW5zYWZlX3RvX3N0cmluZyAoY29weSBiKVxubGV0IG9mX3N0cmluZyBzID0gY29weSAodW5zYWZlX29mX3N0cmluZyBzKVxuXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLnN1YiAvIEJ5dGVzLnN1YlwiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgICB1bnNhZmVfYmxpdCBzIG9mcyByIDAgbGVuO1xuICAgIHJcbiAgZW5kXG5cbmxldCBzdWJfc3RyaW5nIGIgb2ZzIGxlbiA9IHVuc2FmZV90b19zdHJpbmcgKHN1YiBiIG9mcyBsZW4pXG5cbigqIGFkZGl0aW9uIHdpdGggYW4gb3ZlcmZsb3cgY2hlY2sgKilcbmxldCAoKyspIGEgYiA9XG4gIGxldCBjID0gYSArIGIgaW5cbiAgbWF0Y2ggYSA8IDAsIGIgPCAwLCBjIDwgMCB3aXRoXG4gIHwgdHJ1ZSAsIHRydWUgLCBmYWxzZVxuICB8IGZhbHNlLCBmYWxzZSwgdHJ1ZSAgLT4gaW52YWxpZF9hcmcgXCJCeXRlcy5leHRlbmRcIiAoKiBvdmVyZmxvdyAqKVxuICB8IF8gLT4gY1xuXG5sZXQgZXh0ZW5kIHMgbGVmdCByaWdodCA9XG4gIGxldCBsZW4gPSBsZW5ndGggcyArKyBsZWZ0ICsrIHJpZ2h0IGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICBsZXQgKHNyY29mZiwgZHN0b2ZmKSA9IGlmIGxlZnQgPCAwIHRoZW4gLWxlZnQsIDAgZWxzZSAwLCBsZWZ0IGluXG4gIGxldCBjcHlsZW4gPSBtaW4gKGxlbmd0aCBzIC0gc3Jjb2ZmKSAobGVuIC0gZHN0b2ZmKSBpblxuICBpZiBjcHlsZW4gPiAwIHRoZW4gdW5zYWZlX2JsaXQgcyBzcmNvZmYgciBkc3RvZmYgY3B5bGVuO1xuICByXG5cbmxldCBmaWxsIHMgb2ZzIGxlbiBjID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuZmlsbCAvIEJ5dGVzLmZpbGxcIlxuICBlbHNlIHVuc2FmZV9maWxsIHMgb2ZzIGxlbiBjXG5cbmxldCBibGl0IHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBsZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCeXRlcy5ibGl0XCJcbiAgZWxzZSB1bnNhZmVfYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuXG5cbmxldCBibGl0X3N0cmluZyBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gc3RyaW5nX2xlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5ibGl0IC8gQnl0ZXMuYmxpdF9zdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9ibGl0X3N0cmluZyBzMSBvZnMxIHMyIG9mczIgbGVuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyaSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGVuc3VyZV9nZSAoeDppbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgaW52YWxpZF9hcmcgXCJCeXRlcy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGVtcHR5XG4gIHwgbCAtPiBsZXQgc2VwbGVuID0gbGVuZ3RoIHNlcCBpblxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKGNyZWF0ZSAoc3VtX2xlbmd0aHMgMCBzZXBsZW4gbCkpXG4gICAgICAgICAgICAwIHNlcCBzZXBsZW4gbFxuXG5sZXQgY2F0IHMxIHMyID1cbiAgbGV0IGwxID0gbGVuZ3RoIHMxIGluXG4gIGxldCBsMiA9IGxlbmd0aCBzMiBpblxuICBsZXQgciA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgdW5zYWZlX2JsaXQgczEgMCByIDAgbDE7XG4gIHVuc2FmZV9ibGl0IHMyIDAgciBsMSBsMjtcbiAgclxuXG5cbmV4dGVybmFsIGNoYXJfY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBjaGFyX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW4gJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBpbmNyIGlcbiAgZG9uZTtcbiAgbGV0IGogPSByZWYgKGxlbiAtIDEpIGluXG4gIHdoaWxlICFqID49ICFpICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWopIGRvXG4gICAgZGVjciBqXG4gIGRvbmU7XG4gIGlmICFqID49ICFpIHRoZW5cbiAgICBzdWIgcyAhaSAoIWogLSAhaSArIDEpXG4gIGVsc2VcbiAgICBlbXB0eVxuXG5sZXQgZXNjYXBlZCBzID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbiA6PSAhbiArXG4gICAgICAobWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgIHwgJ1xcXCInIHwgJ1xcXFwnIHwgJ1xcbicgfCAnXFx0JyB8ICdcXHInIHwgJ1xcYicgLT4gMlxuICAgICAgIHwgJyAnIC4uICd+JyAtPiAxXG4gICAgICAgfCBfIC0+IDQpXG4gIGRvbmU7XG4gIGlmICFuID0gbGVuZ3RoIHMgdGhlbiBjb3B5IHMgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBtYXAgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwaSBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbmxldCBhcHBseTEgZiBzID1cbiAgaWYgbGVuZ3RoIHMgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjb3B5IHMgaW5cbiAgICB1bnNhZmVfc2V0IHIgMCAoZih1bnNhZmVfZ2V0IHMgMCkpO1xuICAgIHJcbiAgZW5kXG5cbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cblxudHlwZSB0ID0gYnl0ZXNcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9ieXRlc19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID0gbWFwIENoYXIudXBwZXJjYXNlIHNcbmxldCBsb3dlcmNhc2UgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZSBzXG5cbmxldCBjYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2Ugc1xubGV0IHVuY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlIHNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGxldCBidWYgPSByZWYgKG1ha2UgMjU2ICdcXDAwMCcpIGluXG4gIGxldCByZXNpemUgKCkgPVxuICAgICgqIHJlc2l6ZSAqKVxuICAgIGxldCBuZXdfbGVuID0gbWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCBnZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfYnl0ZXNfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9ieXRlc19nZXQ2NFwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgZ2V0X2ludDggYiBpID1cbiAgKChnZXRfdWludDggYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDgpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDgpXG5cbmxldCBnZXRfdWludDE2X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X3VpbnQxNl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfaW50MTZfbmUgYiBpID1cbiAgKChnZXRfdWludDE2X25lIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfbGUgYiBpID1cbiAgKChnZXRfdWludDE2X2xlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MTZfYmUgYiBpID1cbiAgKChnZXRfdWludDE2X2JlIGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSAxNikpIGFzciAoU3lzLmludF9zaXplIC0gMTYpXG5cbmxldCBnZXRfaW50MzJfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDMyX2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBzZXRfaW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDE2X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfdWludDggPSBzZXRfaW50OFxubGV0IHNldF91aW50MTZfbmUgPSBzZXRfaW50MTZfbmVcbmxldCBzZXRfdWludDE2X2JlID0gc2V0X2ludDE2X2JlXG5sZXQgc2V0X3VpbnQxNl9sZSA9IHNldF9pbnQxNl9sZVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+ICBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfc3RyaW5nXCIgW0BAbm9hbGxvY11cblxubW9kdWxlIEIgPSBCeXRlc1xuXG5sZXQgYnRzID0gQi51bnNhZmVfdG9fc3RyaW5nXG5sZXQgYm9zID0gQi51bnNhZmVfb2Zfc3RyaW5nXG5cbmxldCBtYWtlIG4gYyA9XG4gIEIubWFrZSBuIGMgfD4gYnRzXG5sZXQgaW5pdCBuIGYgPVxuICBCLmluaXQgbiBmIHw+IGJ0c1xubGV0IGNvcHkgcyA9XG4gIEIuY29weSAoYm9zIHMpIHw+IGJ0c1xubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBCLnN1YiAoYm9zIHMpIG9mcyBsZW4gfD4gYnRzXG5sZXQgZmlsbCA9XG4gIEIuZmlsbFxubGV0IGJsaXQgPVxuICBCLmJsaXRfc3RyaW5nXG5cbmxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiU3RyaW5nLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gXCJcIlxuICB8IGwgLT4gbGV0IHNlcGxlbiA9IGxlbmd0aCBzZXAgaW4gYnRzIEBAXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoQi5jcmVhdGUgKHN1bV9sZW5ndGhzIDAgc2VwbGVuIGwpKVxuICAgICAgICAgICAgMCBzZXAgc2VwbGVuIGxcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXIgZiBzID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkbyBmICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlcmkgZiBzID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbmxldCBtYXAgZiBzID1cbiAgQi5tYXAgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IG1hcGkgZiBzID1cbiAgQi5tYXBpIGYgKGJvcyBzKSB8PiBidHNcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IGJvcyBzIHw+IEIudG9fc2VxXG5cbmxldCB0b19zZXFpIHMgPSBib3MgcyB8PiBCLnRvX3NlcWlcblxubGV0IG9mX3NlcSBnID0gQi5vZl9zZXEgZyB8PiBidHNcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0ID0gdW5pdCA9ICgpXG5cbmxldCBlcXVhbCAoKSAoKSA9IHRydWVcbmxldCBjb21wYXJlICgpICgpID0gMFxubGV0IHRvX3N0cmluZyAoKSA9IFwiKClcIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIGV4dGVybl9mbGFncyA9XG4gICAgTm9fc2hhcmluZ1xuICB8IENsb3N1cmVzXG4gIHwgQ29tcGF0XzMyXG4oKiBub3RlOiB0aGlzIHR5cGUgZGVmaW5pdGlvbiBpcyB1c2VkIGluICdydW50aW1lL2RlYnVnZ2VyLmMnICopXG5cbmV4dGVybmFsIHRvX2NoYW5uZWw6IG91dF9jaGFubmVsIC0+ICdhIC0+IGV4dGVybl9mbGFncyBsaXN0IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxuZXh0ZXJuYWwgdG9fYnl0ZXM6ICdhIC0+IGV4dGVybl9mbGFncyBsaXN0IC0+IGJ5dGVzXG4gICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzXCJcbmV4dGVybmFsIHRvX3N0cmluZzogJ2EgLT4gZXh0ZXJuX2ZsYWdzIGxpc3QgLT4gc3RyaW5nXG4gICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZ1wiXG5leHRlcm5hbCB0b19idWZmZXJfdW5zYWZlOlxuICAgICAgYnl0ZXMgLT4gaW50IC0+IGludCAtPiAnYSAtPiBleHRlcm5fZmxhZ3MgbGlzdCAtPiBpbnRcbiAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyXCJcblxubGV0IHRvX2J1ZmZlciBidWZmIG9mcyBsZW4gdiBmbGFncyA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBCeXRlcy5sZW5ndGggYnVmZiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiTWFyc2hhbC50b19idWZmZXI6IHN1YnN0cmluZyBvdXQgb2YgYm91bmRzXCJcbiAgZWxzZSB0b19idWZmZXJfdW5zYWZlIGJ1ZmYgb2ZzIGxlbiB2IGZsYWdzXG5cbigqIFRoZSBmdW5jdGlvbnMgYmVsb3cgdXNlIGJ5dGUgc2VxdWVuY2VzIGFzIGlucHV0LCBuZXZlciB1c2luZyBhbnlcbiAgIG11dGF0aW9uLiBJdCBtYWtlcyBzZW5zZSB0byB1c2Ugbm9uLW11dGF0ZWQgW2J5dGVzXSByYXRoZXIgdGhhblxuICAgW3N0cmluZ10sIGJlY2F1c2Ugd2UgcmVhbGx5IHdvcmsgd2l0aCBzZXF1ZW5jZXMgb2YgYnl0ZXMsIG5vdFxuICAgYSB0ZXh0IHJlcHJlc2VudGF0aW9uLlxuKilcblxuZXh0ZXJuYWwgZnJvbV9jaGFubmVsOiBpbl9jaGFubmVsIC0+ICdhID0gXCJjYW1sX2lucHV0X3ZhbHVlXCJcbmV4dGVybmFsIGZyb21fYnl0ZXNfdW5zYWZlOiBieXRlcyAtPiBpbnQgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlc1wiXG5leHRlcm5hbCBkYXRhX3NpemVfdW5zYWZlOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX21hcnNoYWxfZGF0YV9zaXplXCJcblxubGV0IGhlYWRlcl9zaXplID0gMjBcbmxldCBkYXRhX3NpemUgYnVmZiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+IEJ5dGVzLmxlbmd0aCBidWZmIC0gaGVhZGVyX3NpemVcbiAgdGhlbiBpbnZhbGlkX2FyZyBcIk1hcnNoYWwuZGF0YV9zaXplXCJcbiAgZWxzZSBkYXRhX3NpemVfdW5zYWZlIGJ1ZmYgb2ZzXG5sZXQgdG90YWxfc2l6ZSBidWZmIG9mcyA9IGhlYWRlcl9zaXplICsgZGF0YV9zaXplIGJ1ZmYgb2ZzXG5cbmxldCBmcm9tX2J5dGVzIGJ1ZmYgb2ZzID1cbiAgaWYgb2ZzIDwgMCB8fCBvZnMgPiBCeXRlcy5sZW5ndGggYnVmZiAtIGhlYWRlcl9zaXplXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJNYXJzaGFsLmZyb21fYnl0ZXNcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IGxlbiA9IGRhdGFfc2l6ZV91bnNhZmUgYnVmZiBvZnMgaW5cbiAgICBpZiBvZnMgPiBCeXRlcy5sZW5ndGggYnVmZiAtIChoZWFkZXJfc2l6ZSArIGxlbilcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiTWFyc2hhbC5mcm9tX2J5dGVzXCJcbiAgICBlbHNlIGZyb21fYnl0ZXNfdW5zYWZlIGJ1ZmYgb2ZzXG4gIGVuZFxuXG5sZXQgZnJvbV9zdHJpbmcgYnVmZiBvZnMgPVxuICAoKiBCeXRlcy51bnNhZmVfb2Zfc3RyaW5nIGlzIHNhZmUgaGVyZSwgYXMgdGhlIHByb2R1Y2VkIGJ5dGVcbiAgICAgc2VxdWVuY2UgaXMgbmV2ZXIgbXV0YXRlZCAqKVxuICBmcm9tX2J5dGVzIChCeXRlcy51bnNhZmVfb2Zfc3RyaW5nIGJ1ZmYpIG9mc1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbmV4dGVybmFsIHJlcHIgOiAnYSAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgb2JqIDogdCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG1hZ2ljIDogJ2EgLT4gJ2IgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBpc19pbnQgOiB0IC0+IGJvb2wgPSBcIiVvYmpfaXNfaW50XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGlzX2Jsb2NrIGEgPSBub3QgKGlzX2ludCBhKVxuZXh0ZXJuYWwgdGFnIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3RhZ1wiXG5leHRlcm5hbCBzZXRfdGFnIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfc2V0X3RhZ1wiXG5leHRlcm5hbCBzaXplIDogdCAtPiBpbnQgPSBcIiVvYmpfc2l6ZVwiXG5leHRlcm5hbCByZWFjaGFibGVfd29yZHMgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXCJcbmV4dGVybmFsIGZpZWxkIDogdCAtPiBpbnQgLT4gdCA9IFwiJW9ial9maWVsZFwiXG5leHRlcm5hbCBzZXRfZmllbGQgOiB0IC0+IGludCAtPiB0IC0+IHVuaXQgPSBcIiVvYmpfc2V0X2ZpZWxkXCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRhcnJheV9nZXRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9zZXQgOlxuICAgIGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcImNhbWxfZmxvYXRhcnJheV9zZXRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gZG91YmxlX2ZpZWxkIHggaSA9IGZsb2F0YXJyYXlfZ2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGlcbmxldCBbQGlubGluZSBhbHdheXNdIHNldF9kb3VibGVfZmllbGQgeCBpIHYgPVxuICBmbG9hdGFycmF5X3NldCAob2JqIHggOiBmbG9hdGFycmF5KSBpIHZcbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBtYXJzaGFsIChvYmogOiB0KSA9XG4gIE1hcnNoYWwudG9fYnl0ZXMgb2JqIFtdXG5sZXQgdW5tYXJzaGFsIHN0ciBwb3MgPVxuICAoTWFyc2hhbC5mcm9tX2J5dGVzIHN0ciBwb3MsIHBvcyArIE1hcnNoYWwudG90YWxfc2l6ZSBzdHIgcG9zKVxuXG5sZXQgZmlyc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDBcbmxldCBsYXN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAyNDVcblxubGV0IGxhenlfdGFnID0gMjQ2XG5sZXQgY2xvc3VyZV90YWcgPSAyNDdcbmxldCBvYmplY3RfdGFnID0gMjQ4XG5sZXQgaW5maXhfdGFnID0gMjQ5XG5sZXQgZm9yd2FyZF90YWcgPSAyNTBcblxubGV0IG5vX3NjYW5fdGFnID0gMjUxXG5cbmxldCBhYnN0cmFjdF90YWcgPSAyNTFcbmxldCBzdHJpbmdfdGFnID0gMjUyXG5sZXQgZG91YmxlX3RhZyA9IDI1M1xubGV0IGRvdWJsZV9hcnJheV90YWcgPSAyNTRcbmxldCBjdXN0b21fdGFnID0gMjU1XG5sZXQgZmluYWxfdGFnID0gY3VzdG9tX3RhZ1xuXG5cbmxldCBpbnRfdGFnID0gMTAwMFxubGV0IG91dF9vZl9oZWFwX3RhZyA9IDEwMDFcbmxldCB1bmFsaWduZWRfdGFnID0gMTAwMlxuXG5tb2R1bGUgRXh0ZW5zaW9uX2NvbnN0cnVjdG9yID1cbnN0cnVjdFxuICB0eXBlIHQgPSBleHRlbnNpb25fY29uc3RydWN0b3JcbiAgbGV0IG9mX3ZhbCB4ID1cbiAgICBsZXQgeCA9IHJlcHIgeCBpblxuICAgIGxldCBzbG90ID1cbiAgICAgIGlmIChpc19ibG9jayB4KSAmJiAodGFnIHgpIDw+IG9iamVjdF90YWcgJiYgKHNpemUgeCkgPj0gMSB0aGVuIGZpZWxkIHggMFxuICAgICAgZWxzZSB4XG4gICAgaW5cbiAgICBsZXQgbmFtZSA9XG4gICAgICBpZiAoaXNfYmxvY2sgc2xvdCkgJiYgKHRhZyBzbG90KSA9IG9iamVjdF90YWcgdGhlbiBmaWVsZCBzbG90IDBcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcbiAgICBpblxuICAgICAgaWYgKHRhZyBuYW1lKSA9IHN0cmluZ190YWcgdGhlbiAob2JqIHNsb3QgOiB0KVxuICAgICAgZWxzZSBpbnZhbGlkX2FyZyBcIk9iai5leHRlbnNpb25fY29uc3RydWN0b3JcIlxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIG5hbWUgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMCkgOiBzdHJpbmcpXG5cbiAgbGV0IFtAaW5saW5lIGFsd2F5c10gaWQgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMSkgOiBpbnQpXG5lbmRcblxubGV0IGV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5vZl92YWxcbmxldCBleHRlbnNpb25fbmFtZSA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5uYW1lXG5sZXQgZXh0ZW5zaW9uX2lkID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLmlkXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCI7O1xuICBsZXQgY3JlYXRlIGwgPVxuICAgIGlmIG5vdCAoMCA8PSBsICYmIGwgPD0gbWF4X2VwaGVfbGVuZ3RoKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIk9iai5FcGhlbWVyb24uY3JlYXRlXCI7XG4gICAgY3JlYXRlIGxcblxuICBsZXQgbGVuZ3RoIHggPSBzaXplKHJlcHIgeCkgLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGxldCByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gbXNnID1cbiAgICBpZiBub3QgKDAgPD0gbyAmJiBvIDwgbGVuZ3RoIGUpIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIG1zZ1xuXG4gIGV4dGVybmFsIGdldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9rZXlcIlxuICBsZXQgZ2V0X2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleVwiO1xuICAgIGdldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgZ2V0X2tleV9jb3B5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5X2NvcHlcIlxuICBsZXQgZ2V0X2tleV9jb3B5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5nZXRfa2V5X2NvcHlcIjtcbiAgICBnZXRfa2V5X2NvcHkgZSBvXG5cbiAgZXh0ZXJuYWwgc2V0X2tleTogdCAtPiBpbnQgLT4gb2JqX3QgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9rZXlcIlxuICBsZXQgc2V0X2tleSBlIG8geCA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5zZXRfa2V5XCI7XG4gICAgc2V0X2tleSBlIG8geFxuXG4gIGV4dGVybmFsIHVuc2V0X2tleTogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2tleVwiXG4gIGxldCB1bnNldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLnVuc2V0X2tleVwiO1xuICAgIHVuc2V0X2tleSBlIG9cblxuICBleHRlcm5hbCBjaGVja19rZXk6IHQgLT4gaW50IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19rZXlcIlxuICBsZXQgY2hlY2tfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5jaGVja19rZXlcIjtcbiAgICBjaGVja19rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgYmxpdF9rZXkgOiB0IC0+IGludCAtPiB0IC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgID0gXCJjYW1sX2VwaGVfYmxpdF9rZXlcIlxuXG4gIGxldCBibGl0X2tleSBlMSBvMSBlMiBvMiBsID1cbiAgICBpZiBsIDwgMCB8fCBvMSA8IDAgfHwgbzEgPiBsZW5ndGggZTEgLSBsXG4gICAgICAgfHwgbzIgPCAwIHx8IG8yID4gbGVuZ3RoIGUyIC0gbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmJsaXRfa2V5XCJcbiAgICBlbHNlIGlmIGwgPD4gMCB0aGVuIGJsaXRfa2V5IGUxIG8xIGUyIG8yIGxcblxuICBleHRlcm5hbCBnZXRfZGF0YTogdCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfZGF0YVwiXG4gIGV4dGVybmFsIGdldF9kYXRhX2NvcHk6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFfY29weVwiXG4gIGV4dGVybmFsIHNldF9kYXRhOiB0IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfZGF0YVwiXG4gIGV4dGVybmFsIHVuc2V0X2RhdGE6IHQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2RhdGFcIlxuICBleHRlcm5hbCBjaGVja19kYXRhOiB0IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19kYXRhXCJcbiAgZXh0ZXJuYWwgYmxpdF9kYXRhIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9ibGl0X2RhdGFcIlxuXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQW4gYWxpYXMgZm9yIHRoZSB0eXBlIG9mIGFycmF5cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGFycmF5XG5cbigqIEFycmF5IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogJ2EgYXJyYXkgLT4gaW50ID0gXCIlYXJyYXlfbGVuZ3RoXCJcbmV4dGVybmFsIGdldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3NhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV91bnNhZmVfc2V0XCJcbmV4dGVybmFsIG1ha2U6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgY3JlYXRlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIHVuc2FmZV9zdWIgOiAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X3N1YlwiXG5leHRlcm5hbCBhcHBlbmRfcHJpbSA6ICdhIGFycmF5IC0+ICdhIGFycmF5IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X2FwcGVuZFwiXG5leHRlcm5hbCBjb25jYXQgOiAnYSBhcnJheSBsaXN0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X2NvbmNhdFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6XG4gICdhIGFycmF5IC0+IGludCAtPiAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfYmxpdFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6XG4gICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9maWxsXCJcbmV4dGVybmFsIGNyZWF0ZV9mbG9hdDogaW50IC0+IGZsb2F0IGFycmF5ID0gXCJjYW1sX21ha2VfZmxvYXRfdmVjdFwiXG5sZXQgbWFrZV9mbG9hdCA9IGNyZWF0ZV9mbG9hdFxuXG5tb2R1bGUgRmxvYXRhcnJheSA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gZmxvYXRhcnJheSA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIGxlbmd0aCA6IGZsb2F0YXJyYXkgLT4gaW50ID0gXCIlZmxvYXRhcnJheV9sZW5ndGhcIlxuICBleHRlcm5hbCBnZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9nZXRcIlxuICBleHRlcm5hbCBzZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV9zYWZlX3NldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0XG4gICAgICA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX3NldFwiXG5lbmRcblxubGV0IGluaXQgbCBmID1cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2VcbiAgaWYgbCA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmluaXRcIlxuICAoKiBTZWUgIzY1NzUuIFdlIGNvdWxkIGFsc28gY2hlY2sgZm9yIG1heGltdW0gYXJyYXkgc2l6ZSwgYnV0IHRoaXMgZGVwZW5kc1xuICAgICBvbiB3aGV0aGVyIHdlIGNyZWF0ZSBhIGZsb2F0IGFycmF5IG9yIGEgcmVndWxhciBvbmUuLi4gKilcbiAgZWxzZVxuICAgbGV0IHJlcyA9IGNyZWF0ZSBsIChmIDApIGluXG4gICBmb3IgaSA9IDEgdG8gcHJlZCBsIGRvXG4gICAgIHVuc2FmZV9zZXQgcmVzIGkgKGYgaSlcbiAgIGRvbmU7XG4gICByZXNcblxubGV0IG1ha2VfbWF0cml4IHN4IHN5IGluaXQgPVxuICBsZXQgcmVzID0gY3JlYXRlIHN4IFt8fF0gaW5cbiAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICB1bnNhZmVfc2V0IHJlcyB4IChjcmVhdGUgc3kgaW5pdClcbiAgZG9uZTtcbiAgcmVzXG5cbmxldCBjcmVhdGVfbWF0cml4ID0gbWFrZV9tYXRyaXhcblxubGV0IGNvcHkgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW4gaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgdW5zYWZlX3N1YiBhIDAgbFxuXG5sZXQgYXBwZW5kIGExIGEyID1cbiAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gIGlmIGwxID0gMCB0aGVuIGNvcHkgYTJcbiAgZWxzZSBpZiBsZW5ndGggYTIgPSAwIHRoZW4gdW5zYWZlX3N1YiBhMSAwIGwxXG4gIGVsc2UgYXBwZW5kX3ByaW0gYTEgYTJcblxubGV0IHN1YiBhIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGEgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnN1YlwiXG4gIGVsc2UgdW5zYWZlX3N1YiBhIG9mcyBsZW5cblxubGV0IGZpbGwgYSBvZnMgbGVuIHYgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGEgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZpbGxcIlxuICBlbHNlIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbmxldCBibGl0IGExIG9mczEgYTIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBsZW5ndGggYTEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIGEyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5ibGl0XCJcbiAgZWxzZSB1bnNhZmVfYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuXG5cbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgaXRlcjIgZiBhIGIgPVxuICBpZiBsZW5ndGggYSA8PiBsZW5ndGggYiB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJBcnJheS5pdGVyMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlXG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSBkb25lXG5cbmxldCBtYXAgZiBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgKGYodW5zYWZlX2dldCBhIDApKSBpblxuICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcDIgZiBhIGIgPVxuICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICBsZXQgbGIgPSBsZW5ndGggYiBpblxuICBpZiBsYSA8PiBsYiB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJBcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2UgYmVnaW5cbiAgICBpZiBsYSA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gY3JlYXRlIGxhIChmICh1bnNhZmVfZ2V0IGEgMCkgKHVuc2FmZV9nZXQgYiAwKSkgaW5cbiAgICAgIGZvciBpID0gMSB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcbiAgZW5kXG5cbmxldCBpdGVyaSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IG1hcGkgZiBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgKGYgMCAodW5zYWZlX2dldCBhIDApKSBpblxuICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IHRvX2xpc3QgYSA9XG4gIGxldCByZWMgdG9saXN0IGkgcmVzID1cbiAgICBpZiBpIDwgMCB0aGVuIHJlcyBlbHNlIHRvbGlzdCAoaSAtIDEpICh1bnNhZmVfZ2V0IGEgaSA6OiByZXMpIGluXG4gIHRvbGlzdCAobGVuZ3RoIGEgLSAxKSBbXVxuXG4oKiBDYW5ub3QgdXNlIExpc3QubGVuZ3RoIGhlcmUgYmVjYXVzZSB0aGUgTGlzdCBtb2R1bGUgZGVwZW5kcyBvbiBBcnJheS4gKilcbmxldCByZWMgbGlzdF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjdVxuICB8IF86OnQgLT4gbGlzdF9sZW5ndGggKHN1Y2MgYWNjdSkgdFxuXG5sZXQgb2ZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgYSA9IGNyZWF0ZSAobGlzdF9sZW5ndGggMCBsKSBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGkrMSkgdGwgaW5cbiAgICAgIGZpbGwgMSB0bFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtIHggYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW1xIHggYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHggPT0gKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmV4Y2VwdGlvbiBCb3R0b20gb2YgaW50XG5sZXQgc29ydCBjbXAgYSA9XG4gIGxldCBtYXhzb24gbCBpID1cbiAgICBsZXQgaTMxID0gaStpK2krMSBpblxuICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgIGlmIGkzMSsyIDwgbCB0aGVuIGJlZ2luXG4gICAgICBpZiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMCB0aGVuIHggOj0gaTMxKzE7XG4gICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICF4XG4gICAgZW5kIGVsc2VcbiAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgdGhlbiBpMzErMVxuICAgICAgZWxzZSBpZiBpMzEgPCBsIHRoZW4gaTMxIGVsc2UgcmFpc2UgKEJvdHRvbSBpKVxuICBpblxuICBsZXQgcmVjIHRyaWNrbGVkb3duIGwgaSBlID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgICAgdHJpY2tsZWRvd24gbCBqIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCB0cmlja2xlIGwgaSBlID0gdHJ5IHRyaWNrbGVkb3duIGwgaSBlIHdpdGggQm90dG9tIGkgLT4gc2V0IGEgaSBlIGluXG4gIGxldCByZWMgYnViYmxlZG93biBsIGkgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgIGJ1YmJsZWRvd24gbCBqXG4gIGluXG4gIGxldCBidWJibGUgbCBpID0gdHJ5IGJ1YmJsZWRvd24gbCBpIHdpdGggQm90dG9tIGkgLT4gaSBpblxuICBsZXQgcmVjIHRyaWNrbGV1cCBpIGUgPVxuICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgIGFzc2VydCAoaSA8PiBmYXRoZXIpO1xuICAgIGlmIGNtcCAoZ2V0IGEgZmF0aGVyKSBlIDwgMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgaWYgZmF0aGVyID4gMCB0aGVuIHRyaWNrbGV1cCBmYXRoZXIgZSBlbHNlIHNldCBhIDAgZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBmb3IgaSA9IChsICsgMSkgLyAzIC0gMSBkb3dudG8gMCBkbyB0cmlja2xlIGwgaSAoZ2V0IGEgaSk7IGRvbmU7XG4gIGZvciBpID0gbCAtIDEgZG93bnRvIDIgZG9cbiAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgIHNldCBhIGkgKGdldCBhIDApO1xuICAgIHRyaWNrbGV1cCAoYnViYmxlIGkgMCkgZTtcbiAgZG9uZTtcbiAgaWYgbCA+IDEgdGhlbiAobGV0IGUgPSAoZ2V0IGEgMSkgaW4gc2V0IGEgMSAoZ2V0IGEgMCk7IHNldCBhIDAgZSlcblxuXG5sZXQgY3V0b2ZmID0gNVxubGV0IHN0YWJsZV9zb3J0IGNtcCBhID1cbiAgbGV0IG1lcmdlIHNyYzFvZnMgc3JjMWxlbiBzcmMyIHNyYzJvZnMgc3JjMmxlbiBkc3QgZHN0b2ZzID1cbiAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgIGxldCByZWMgbG9vcCBpMSBzMSBpMiBzMiBkID1cbiAgICAgIGlmIGNtcCBzMSBzMiA8PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICBsZXQgaTEgPSBpMSArIDEgaW5cbiAgICAgICAgaWYgaTEgPCBzcmMxciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgc3JjMiBpMiBkc3QgKGQgKyAxKSAoc3JjMnIgLSBpMilcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMjtcbiAgICAgICAgbGV0IGkyID0gaTIgKyAxIGluXG4gICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgczEgaTIgKGdldCBzcmMyIGkyKSAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICBlbmRcbiAgICBpbiBsb29wIHNyYzFvZnMgKGdldCBhIHNyYzFvZnMpIHNyYzJvZnMgKGdldCBzcmMyIHNyYzJvZnMpIGRzdG9mcztcbiAgaW5cbiAgbGV0IGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgbGV0IGogPSByZWYgKGRzdG9mcyArIGkgLSAxKSBpblxuICAgICAgd2hpbGUgKCFqID49IGRzdG9mcyAmJiBjbXAgKGdldCBkc3QgIWopIGUgPiAwKSBkb1xuICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgZGVjciBqO1xuICAgICAgZG9uZTtcbiAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICBkb25lO1xuICBpblxuICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGlmIGxlbiA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsZW4gLyAyIGluXG4gICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgc29ydHRvIChzcmNvZnMgKyBsMSkgZHN0IChkc3RvZnMgKyBsMSkgbDI7XG4gICAgICBzb3J0dG8gc3Jjb2ZzIGEgKHNyY29mcyArIGwyKSBsMTtcbiAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIDAgYSAwIGwgZWxzZSBiZWdpblxuICAgIGxldCBsMSA9IGwgLyAyIGluXG4gICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgbGV0IHQgPSBtYWtlIGwyIChnZXQgYSAwKSBpblxuICAgIHNvcnR0byBsMSB0IDAgbDI7XG4gICAgc29ydHRvIDAgYSBsMiBsMTtcbiAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICBlbmRcblxuXG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgb2ZfcmV2X2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGxlbiA9IGxpc3RfbGVuZ3RoIDAgbCBpblxuICAgICAgbGV0IGEgPSBjcmVhdGUgbGVuIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaS0xKSB0bFxuICAgICAgaW5cbiAgICAgIGZpbGwgKGxlbi0yKSB0bFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbCA9IFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIGkgaW5cbiAgb2ZfcmV2X2xpc3QgbFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbnRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5leHRlcm5hbCBuZWcgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsIGFkZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIHN1YiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsIG11bCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsIGRpdiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsIHJlbSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcbmV4dGVybmFsIGxvZ2FuZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsIGxvZ29yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG9nbm90IHggPSBsb2d4b3IgeCAoLTEpXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxubGV0IGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gKCA9IClcbmxldCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5cbigqXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmxldCB0b19zdHJpbmcgeCA9IGZvcm1hdF9pbnQgXCIlZFwiIHhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtJbnQzMl06IDMyLWJpdCBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWcgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX25lZ1wiXG5leHRlcm5hbCBhZGQgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2FkZFwiXG5leHRlcm5hbCBzdWIgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX3N1YlwiXG5leHRlcm5hbCBtdWwgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX211bFwiXG5leHRlcm5hbCBkaXYgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2RpdlwiXG5leHRlcm5hbCByZW0gOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX21vZFwiXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2FuZFwiXG5leHRlcm5hbCBsb2dvciA6IGludDMyIC0+IGludDMyIC0+IGludDMyID0gXCIlaW50MzJfb3JcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50MzIgLT4gaW50IC0+IGludDMyID0gXCIlaW50MzJfbHNyXCJcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBpbnQzMiA9IFwiJWludDMyX29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQgOiBpbnQzMiAtPiBpbnQgPSBcIiVpbnQzMl90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQzMlxuICA9IFwiY2FtbF9pbnQzMl9vZl9mbG9hdFwiIFwiY2FtbF9pbnQzMl9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50MzIgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50MzJfdG9fZmxvYXRcIiBcImNhbWxfaW50MzJfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBiaXRzX29mX2Zsb2F0IDogZmxvYXQgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfYml0c19vZl9mbG9hdFwiIFwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvYXRfb2ZfYml0cyA6IGludDMyIC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNcIiBcImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0c191bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cblxubGV0IHplcm8gPSAwbFxubGV0IG9uZSA9IDFsXG5sZXQgbWludXNfb25lID0gLTFsXG5sZXQgc3VjYyBuID0gYWRkIG4gMWxcbmxldCBwcmVkIG4gPSBzdWIgbiAxbFxubGV0IGFicyBuID0gaWYgbiA+PSAwbCB0aGVuIG4gZWxzZSBuZWcgblxubGV0IG1pbl9pbnQgPSAweDgwMDAwMDAwbFxubGV0IG1heF9pbnQgPSAweDdGRkZGRkZGbFxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xbClcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIG1hdGNoIFN5cy53b3JkX3NpemUgd2l0aFxuICB8IDMyIC0+XG4gICAgICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICAgICAgZnVuIG4gLT5cbiAgICAgICAgaWYgY29tcGFyZSB6ZXJvIG4gPD0gMCAmJiBjb21wYXJlIG4gbWF4X2ludCA8PSAwIHRoZW5cbiAgICAgICAgICBTb21lICh0b19pbnQgbilcbiAgICAgICAgZWxzZVxuICAgICAgICAgIE5vbmVcbiAgfCA2NCAtPlxuICAgICAgKCogU28gdGhhdCBpdCBjb21waWxlcyBpbiAzMi1iaXQgKilcbiAgICAgIGxldCBtb3ZlID0gaW50X29mX3N0cmluZyBcIjB4MV8wMDAwXzAwMDBcIiBpblxuICAgICAgZnVuIG4gLT4gbGV0IGkgPSB0b19pbnQgbiBpbiBTb21lIChpZiBpIDwgMCB0aGVuIGkgKyBtb3ZlIGVsc2UgaSlcbiAgfCBfIC0+XG4gICAgICBhc3NlcnQgZmFsc2VcblxuZXh0ZXJuYWwgZm9ybWF0IDogc3RyaW5nIC0+IGludDMyIC0+IHN0cmluZyA9IFwiY2FtbF9pbnQzMl9mb3JtYXRcIlxubGV0IHRvX3N0cmluZyBuID0gZm9ybWF0IFwiJWRcIiBuXG5cbmV4dGVybmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQzMiA9IFwiY2FtbF9pbnQzMl9vZl9zdHJpbmdcIlxuXG5sZXQgb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogZXhwb3NlIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlIGRpcmVjdGx5LiAqKVxuICB0cnkgU29tZSAob2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxudHlwZSB0ID0gaW50MzJcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxubGV0IGVxdWFsICh4OiB0KSAoeTogdCkgPSBjb21wYXJlIHggeSA9IDBcblxubGV0IHVuc2lnbmVkX2NvbXBhcmUgbiBtID1cbiAgY29tcGFyZSAoc3ViIG4gbWluX2ludCkgKHN1YiBtIG1pbl9pbnQpXG5cbigqIFVuc2lnbmVkIGRpdmlzaW9uIGZyb20gc2lnbmVkIGRpdmlzaW9uIG9mIHRoZSBzYW1lXG4gICBiaXRuZXNzLiBTZWUgV2FycmVuIEpyLiwgSGVucnkgUy4gKDIwMTMpLiBIYWNrZXIncyBEZWxpZ2h0ICgyIGVkLiksIFNlYyA5LTMuXG4qKVxubGV0IHVuc2lnbmVkX2RpdiBuIGQgPVxuICBpZiBkIDwgemVybyB0aGVuXG4gICAgaWYgdW5zaWduZWRfY29tcGFyZSBuIGQgPCAwIHRoZW4gemVybyBlbHNlIG9uZVxuICBlbHNlXG4gICAgbGV0IHEgPSBzaGlmdF9sZWZ0IChkaXYgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgbiAxKSBkKSAxIGluXG4gICAgbGV0IHIgPSBzdWIgbiAobXVsIHEgZCkgaW5cbiAgICBpZiB1bnNpZ25lZF9jb21wYXJlIHIgZCA+PSAwIHRoZW4gc3VjYyBxIGVsc2UgcVxuXG5sZXQgdW5zaWduZWRfcmVtIG4gZCA9XG4gIHN1YiBuIChtdWwgKHVuc2lnbmVkX2RpdiBuIGQpIGQpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFRoZSBwYXJzaW5nIGVuZ2luZSAqKVxuXG5vcGVuIExleGluZ1xuXG4oKiBJbnRlcm5hbCBpbnRlcmZhY2UgdG8gdGhlIHBhcnNpbmcgZW5naW5lICopXG5cbnR5cGUgcGFyc2VyX2VudiA9XG4gIHsgbXV0YWJsZSBzX3N0YWNrIDogaW50IGFycmF5OyAgICAgICAgKCogU3RhdGVzICopXG4gICAgbXV0YWJsZSB2X3N0YWNrIDogT2JqLnQgYXJyYXk7ICAgICAgKCogU2VtYW50aWMgYXR0cmlidXRlcyAqKVxuICAgIG11dGFibGUgc3ltYl9zdGFydF9zdGFjayA6IHBvc2l0aW9uIGFycmF5OyAoKiBTdGFydCBwb3NpdGlvbnMgKilcbiAgICBtdXRhYmxlIHN5bWJfZW5kX3N0YWNrIDogcG9zaXRpb24gYXJyYXk7ICAgKCogRW5kIHBvc2l0aW9ucyAqKVxuICAgIG11dGFibGUgc3RhY2tzaXplIDogaW50OyAgICAgICAgICAgICgqIFNpemUgb2YgdGhlIHN0YWNrcyAqKVxuICAgIG11dGFibGUgc3RhY2tiYXNlIDogaW50OyAgICAgICAgICAgICgqIEJhc2Ugc3AgZm9yIGN1cnJlbnQgcGFyc2UgKilcbiAgICBtdXRhYmxlIGN1cnJfY2hhciA6IGludDsgICAgICAgICAgICAoKiBMYXN0IHRva2VuIHJlYWQgKilcbiAgICBtdXRhYmxlIGx2YWwgOiBPYmoudDsgICAgICAgICAgICAgICAoKiBJdHMgc2VtYW50aWMgYXR0cmlidXRlICopXG4gICAgbXV0YWJsZSBzeW1iX3N0YXJ0IDogcG9zaXRpb247ICAgICAgKCogU3RhcnQgcG9zLiBvZiB0aGUgY3VycmVudCBzeW1ib2wqKVxuICAgIG11dGFibGUgc3ltYl9lbmQgOiBwb3NpdGlvbjsgICAgICAgICgqIEVuZCBwb3MuIG9mIHRoZSBjdXJyZW50IHN5bWJvbCAqKVxuICAgIG11dGFibGUgYXNwIDogaW50OyAgICAgICAgICAgICAgICAgICgqIFRoZSBzdGFjayBwb2ludGVyIGZvciBhdHRyaWJ1dGVzICopXG4gICAgbXV0YWJsZSBydWxlX2xlbiA6IGludDsgICAgICAgICAgICAgKCogTnVtYmVyIG9mIHJocyBpdGVtcyBpbiB0aGUgcnVsZSAqKVxuICAgIG11dGFibGUgcnVsZV9udW1iZXIgOiBpbnQ7ICAgICAgICAgICgqIFJ1bGUgbnVtYmVyIHRvIHJlZHVjZSBieSAqKVxuICAgIG11dGFibGUgc3AgOiBpbnQ7ICAgICAgICAgICAgICAgICAgICgqIFNhdmVkIHNwIGZvciBwYXJzZV9lbmdpbmUgKilcbiAgICBtdXRhYmxlIHN0YXRlIDogaW50OyAgICAgICAgICAgICAgICAoKiBTYXZlZCBzdGF0ZSBmb3IgcGFyc2VfZW5naW5lICopXG4gICAgbXV0YWJsZSBlcnJmbGFnIDogaW50IH0gICAgICAgICAgICAgKCogU2F2ZWQgZXJyb3IgZmxhZyBmb3IgcGFyc2VfZW5naW5lICopXG5cbnR5cGUgcGFyc2VfdGFibGVzID1cbiAgeyBhY3Rpb25zIDogKHBhcnNlcl9lbnYgLT4gT2JqLnQpIGFycmF5O1xuICAgIHRyYW5zbF9jb25zdCA6IGludCBhcnJheTtcbiAgICB0cmFuc2xfYmxvY2sgOiBpbnQgYXJyYXk7XG4gICAgbGhzIDogc3RyaW5nO1xuICAgIGxlbiA6IHN0cmluZztcbiAgICBkZWZyZWQgOiBzdHJpbmc7XG4gICAgZGdvdG8gOiBzdHJpbmc7XG4gICAgc2luZGV4IDogc3RyaW5nO1xuICAgIHJpbmRleCA6IHN0cmluZztcbiAgICBnaW5kZXggOiBzdHJpbmc7XG4gICAgdGFibGVzaXplIDogaW50O1xuICAgIHRhYmxlIDogc3RyaW5nO1xuICAgIGNoZWNrIDogc3RyaW5nO1xuICAgIGVycm9yX2Z1bmN0aW9uIDogc3RyaW5nIC0+IHVuaXQ7XG4gICAgbmFtZXNfY29uc3QgOiBzdHJpbmc7XG4gICAgbmFtZXNfYmxvY2sgOiBzdHJpbmcgfVxuXG5leGNlcHRpb24gWVlleGl0IG9mIE9iai50XG5leGNlcHRpb24gUGFyc2VfZXJyb3JcblxudHlwZSBwYXJzZXJfaW5wdXQgPVxuICAgIFN0YXJ0XG4gIHwgVG9rZW5fcmVhZFxuICB8IFN0YWNrc19ncm93bl8xXG4gIHwgU3RhY2tzX2dyb3duXzJcbiAgfCBTZW1hbnRpY19hY3Rpb25fY29tcHV0ZWRcbiAgfCBFcnJvcl9kZXRlY3RlZFxuXG50eXBlIHBhcnNlcl9vdXRwdXQgPVxuICAgIFJlYWRfdG9rZW5cbiAgfCBSYWlzZV9wYXJzZV9lcnJvclxuICB8IEdyb3dfc3RhY2tzXzFcbiAgfCBHcm93X3N0YWNrc18yXG4gIHwgQ29tcHV0ZV9zZW1hbnRpY19hY3Rpb25cbiAgfCBDYWxsX2Vycm9yX2Z1bmN0aW9uXG5cbigqIHRvIGF2b2lkIHdhcm5pbmdzICopXG5sZXQgXyA9IFtSZWFkX3Rva2VuOyBSYWlzZV9wYXJzZV9lcnJvcjsgR3Jvd19zdGFja3NfMTsgR3Jvd19zdGFja3NfMjtcbiAgICAgICAgIENvbXB1dGVfc2VtYW50aWNfYWN0aW9uOyBDYWxsX2Vycm9yX2Z1bmN0aW9uXVxuXG5leHRlcm5hbCBwYXJzZV9lbmdpbmUgOlxuICAgIHBhcnNlX3RhYmxlcyAtPiBwYXJzZXJfZW52IC0+IHBhcnNlcl9pbnB1dCAtPiBPYmoudCAtPiBwYXJzZXJfb3V0cHV0XG4gICAgPSBcImNhbWxfcGFyc2VfZW5naW5lXCJcblxuZXh0ZXJuYWwgc2V0X3RyYWNlOiBib29sIC0+IGJvb2xcbiAgICA9IFwiY2FtbF9zZXRfcGFyc2VyX3RyYWNlXCJcblxubGV0IGVudiA9XG4gIHsgc19zdGFjayA9IEFycmF5Lm1ha2UgMTAwIDA7XG4gICAgdl9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIChPYmoucmVwciAoKSk7XG4gICAgc3ltYl9zdGFydF9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIGR1bW15X3BvcztcbiAgICBzeW1iX2VuZF9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIGR1bW15X3BvcztcbiAgICBzdGFja3NpemUgPSAxMDA7XG4gICAgc3RhY2tiYXNlID0gMDtcbiAgICBjdXJyX2NoYXIgPSAwO1xuICAgIGx2YWwgPSBPYmoucmVwciAoKTtcbiAgICBzeW1iX3N0YXJ0ID0gZHVtbXlfcG9zO1xuICAgIHN5bWJfZW5kID0gZHVtbXlfcG9zO1xuICAgIGFzcCA9IDA7XG4gICAgcnVsZV9sZW4gPSAwO1xuICAgIHJ1bGVfbnVtYmVyID0gMDtcbiAgICBzcCA9IDA7XG4gICAgc3RhdGUgPSAwO1xuICAgIGVycmZsYWcgPSAwIH1cblxubGV0IGdyb3dfc3RhY2tzKCkgPVxuICBsZXQgb2xkc2l6ZSA9IGVudi5zdGFja3NpemUgaW5cbiAgbGV0IG5ld3NpemUgPSBvbGRzaXplICogMiBpblxuICBsZXQgbmV3X3MgPSBBcnJheS5tYWtlIG5ld3NpemUgMFxuICBhbmQgbmV3X3YgPSBBcnJheS5tYWtlIG5ld3NpemUgKE9iai5yZXByICgpKVxuICBhbmQgbmV3X3N0YXJ0ID0gQXJyYXkubWFrZSBuZXdzaXplIGR1bW15X3Bvc1xuICBhbmQgbmV3X2VuZCA9IEFycmF5Lm1ha2UgbmV3c2l6ZSBkdW1teV9wb3MgaW5cbiAgICBBcnJheS5ibGl0IGVudi5zX3N0YWNrIDAgbmV3X3MgMCBvbGRzaXplO1xuICAgIGVudi5zX3N0YWNrIDwtIG5ld19zO1xuICAgIEFycmF5LmJsaXQgZW52LnZfc3RhY2sgMCBuZXdfdiAwIG9sZHNpemU7XG4gICAgZW52LnZfc3RhY2sgPC0gbmV3X3Y7XG4gICAgQXJyYXkuYmxpdCBlbnYuc3ltYl9zdGFydF9zdGFjayAwIG5ld19zdGFydCAwIG9sZHNpemU7XG4gICAgZW52LnN5bWJfc3RhcnRfc3RhY2sgPC0gbmV3X3N0YXJ0O1xuICAgIEFycmF5LmJsaXQgZW52LnN5bWJfZW5kX3N0YWNrIDAgbmV3X2VuZCAwIG9sZHNpemU7XG4gICAgZW52LnN5bWJfZW5kX3N0YWNrIDwtIG5ld19lbmQ7XG4gICAgZW52LnN0YWNrc2l6ZSA8LSBuZXdzaXplXG5cbmxldCBjbGVhcl9wYXJzZXIoKSA9XG4gIEFycmF5LmZpbGwgZW52LnZfc3RhY2sgMCBlbnYuc3RhY2tzaXplIChPYmoucmVwciAoKSk7XG4gIGVudi5sdmFsIDwtIE9iai5yZXByICgpXG5cbmxldCBjdXJyZW50X2xvb2thaGVhZF9mdW4gPSByZWYgKGZ1biAoXyA6IE9iai50KSAtPiBmYWxzZSlcblxubGV0IHl5cGFyc2UgdGFibGVzIHN0YXJ0IGxleGVyIGxleGJ1ZiA9XG4gIGxldCByZWMgbG9vcCBjbWQgYXJnID1cbiAgICBtYXRjaCBwYXJzZV9lbmdpbmUgdGFibGVzIGVudiBjbWQgYXJnIHdpdGhcbiAgICAgIFJlYWRfdG9rZW4gLT5cbiAgICAgICAgbGV0IHQgPSBPYmoucmVwcihsZXhlciBsZXhidWYpIGluXG4gICAgICAgIGVudi5zeW1iX3N0YXJ0IDwtIGxleGJ1Zi5sZXhfc3RhcnRfcDtcbiAgICAgICAgZW52LnN5bWJfZW5kIDwtIGxleGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBsb29wIFRva2VuX3JlYWQgdFxuICAgIHwgUmFpc2VfcGFyc2VfZXJyb3IgLT5cbiAgICAgICAgcmFpc2UgUGFyc2VfZXJyb3JcbiAgICB8IENvbXB1dGVfc2VtYW50aWNfYWN0aW9uIC0+XG4gICAgICAgIGxldCAoYWN0aW9uLCB2YWx1ZSkgPVxuICAgICAgICAgIHRyeVxuICAgICAgICAgICAgKFNlbWFudGljX2FjdGlvbl9jb21wdXRlZCwgdGFibGVzLmFjdGlvbnMuKGVudi5ydWxlX251bWJlcikgZW52KVxuICAgICAgICAgIHdpdGggUGFyc2VfZXJyb3IgLT5cbiAgICAgICAgICAgIChFcnJvcl9kZXRlY3RlZCwgT2JqLnJlcHIgKCkpIGluXG4gICAgICAgIGxvb3AgYWN0aW9uIHZhbHVlXG4gICAgfCBHcm93X3N0YWNrc18xIC0+XG4gICAgICAgIGdyb3dfc3RhY2tzKCk7IGxvb3AgU3RhY2tzX2dyb3duXzEgKE9iai5yZXByICgpKVxuICAgIHwgR3Jvd19zdGFja3NfMiAtPlxuICAgICAgICBncm93X3N0YWNrcygpOyBsb29wIFN0YWNrc19ncm93bl8yIChPYmoucmVwciAoKSlcbiAgICB8IENhbGxfZXJyb3JfZnVuY3Rpb24gLT5cbiAgICAgICAgdGFibGVzLmVycm9yX2Z1bmN0aW9uIFwic3ludGF4IGVycm9yXCI7XG4gICAgICAgIGxvb3AgRXJyb3JfZGV0ZWN0ZWQgKE9iai5yZXByICgpKSBpblxuICBsZXQgaW5pdF9hc3AgPSBlbnYuYXNwXG4gIGFuZCBpbml0X3NwID0gZW52LnNwXG4gIGFuZCBpbml0X3N0YWNrYmFzZSA9IGVudi5zdGFja2Jhc2VcbiAgYW5kIGluaXRfc3RhdGUgPSBlbnYuc3RhdGVcbiAgYW5kIGluaXRfY3Vycl9jaGFyID0gZW52LmN1cnJfY2hhclxuICBhbmQgaW5pdF9sdmFsID0gZW52Lmx2YWxcbiAgYW5kIGluaXRfZXJyZmxhZyA9IGVudi5lcnJmbGFnIGluXG4gIGVudi5zdGFja2Jhc2UgPC0gZW52LnNwICsgMTtcbiAgZW52LmN1cnJfY2hhciA8LSBzdGFydDtcbiAgZW52LnN5bWJfZW5kIDwtIGxleGJ1Zi5sZXhfY3Vycl9wO1xuICB0cnlcbiAgICBsb29wIFN0YXJ0IChPYmoucmVwciAoKSlcbiAgd2l0aCBleG4gLT5cbiAgICBsZXQgY3Vycl9jaGFyID0gZW52LmN1cnJfY2hhciBpblxuICAgIGVudi5hc3AgPC0gaW5pdF9hc3A7XG4gICAgZW52LnNwIDwtIGluaXRfc3A7XG4gICAgZW52LnN0YWNrYmFzZSA8LSBpbml0X3N0YWNrYmFzZTtcbiAgICBlbnYuc3RhdGUgPC0gaW5pdF9zdGF0ZTtcbiAgICBlbnYuY3Vycl9jaGFyIDwtIGluaXRfY3Vycl9jaGFyO1xuICAgIGVudi5sdmFsIDwtIGluaXRfbHZhbDtcbiAgICBlbnYuZXJyZmxhZyA8LSBpbml0X2VycmZsYWc7XG4gICAgbWF0Y2ggZXhuIHdpdGhcbiAgICAgIFlZZXhpdCB2IC0+XG4gICAgICAgIE9iai5tYWdpYyB2XG4gICAgfCBfIC0+XG4gICAgICAgIGN1cnJlbnRfbG9va2FoZWFkX2Z1biA6PVxuICAgICAgICAgIChmdW4gdG9rIC0+XG4gICAgICAgICAgICBpZiBPYmouaXNfYmxvY2sgdG9rXG4gICAgICAgICAgICB0aGVuIHRhYmxlcy50cmFuc2xfYmxvY2suKE9iai50YWcgdG9rKSA9IGN1cnJfY2hhclxuICAgICAgICAgICAgZWxzZSB0YWJsZXMudHJhbnNsX2NvbnN0LihPYmoubWFnaWMgdG9rKSA9IGN1cnJfY2hhcik7XG4gICAgICAgIHJhaXNlIGV4blxuXG5sZXQgcGVla192YWwgZW52IG4gPVxuICBPYmoubWFnaWMgZW52LnZfc3RhY2suKGVudi5hc3AgLSBuKVxuXG5sZXQgc3ltYm9sX3N0YXJ0X3BvcyAoKSA9XG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpIDw9IDAgdGhlbiBlbnYuc3ltYl9lbmRfc3RhY2suKGVudi5hc3ApXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHN0ID0gZW52LnN5bWJfc3RhcnRfc3RhY2suKGVudi5hc3AgLSBpICsgMSkgaW5cbiAgICAgIGxldCBlbiA9IGVudi5zeW1iX2VuZF9zdGFjay4oZW52LmFzcCAtIGkgKyAxKSBpblxuICAgICAgaWYgc3QgPD4gZW4gdGhlbiBzdCBlbHNlIGxvb3AgKGkgLSAxKVxuICAgIGVuZFxuICBpblxuICBsb29wIGVudi5ydWxlX2xlblxuXG5sZXQgc3ltYm9sX2VuZF9wb3MgKCkgPSBlbnYuc3ltYl9lbmRfc3RhY2suKGVudi5hc3ApXG5sZXQgcmhzX3N0YXJ0X3BvcyBuID0gZW52LnN5bWJfc3RhcnRfc3RhY2suKGVudi5hc3AgLSAoZW52LnJ1bGVfbGVuIC0gbikpXG5sZXQgcmhzX2VuZF9wb3MgbiA9IGVudi5zeW1iX2VuZF9zdGFjay4oZW52LmFzcCAtIChlbnYucnVsZV9sZW4gLSBuKSlcblxubGV0IHN5bWJvbF9zdGFydCAoKSA9IChzeW1ib2xfc3RhcnRfcG9zICgpKS5wb3NfY251bVxubGV0IHN5bWJvbF9lbmQgKCkgPSAoc3ltYm9sX2VuZF9wb3MgKCkpLnBvc19jbnVtXG5sZXQgcmhzX3N0YXJ0IG4gPSAocmhzX3N0YXJ0X3BvcyBuKS5wb3NfY251bVxubGV0IHJoc19lbmQgbiA9IChyaHNfZW5kX3BvcyBuKS5wb3NfY251bVxuXG5sZXQgaXNfY3VycmVudF9sb29rYWhlYWQgdG9rID1cbiAgKCFjdXJyZW50X2xvb2thaGVhZF9mdW4pKE9iai5yZXByIHRvaylcblxubGV0IHBhcnNlX2Vycm9yIChfIDogc3RyaW5nKSA9ICgpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFNldHMgb3ZlciBvcmRlcmVkIHR5cGVzICopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGVsdFxuICAgIHR5cGUgdFxuICAgIHZhbCBlbXB0eTogdFxuICAgIHZhbCBpc19lbXB0eTogdCAtPiBib29sXG4gICAgdmFsIG1lbTogZWx0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgc2luZ2xldG9uOiBlbHQgLT4gdFxuICAgIHZhbCByZW1vdmU6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgdW5pb246IHQgLT4gdCAtPiB0XG4gICAgdmFsIGludGVyOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBkaXNqb2ludDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZGlmZjogdCAtPiB0IC0+IHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc3Vic2V0OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoZWx0IC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBmb3JfYWxsOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHRcbiAgICB2YWwgcGFydGl0aW9uOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdCAqIHRcbiAgICB2YWwgY2FyZGluYWw6IHQgLT4gaW50XG4gICAgdmFsIGVsZW1lbnRzOiB0IC0+IGVsdCBsaXN0XG4gICAgdmFsIG1pbl9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1pbl9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgbWF4X2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWF4X2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBjaG9vc2U6IHQgLT4gZWx0XG4gICAgdmFsIGNob29zZV9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgb2ZfbGlzdDogZWx0IGxpc3QgLT4gdFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGVsdCAtPiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAgIHZhbCBvZl9zZXEgOiBlbHQgU2VxLnQgLT4gdFxuICBlbmRcblxubW9kdWxlIE1ha2UoT3JkOiBPcmRlcmVkVHlwZSkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGVsdCA9IE9yZC50XG4gICAgdHlwZSB0ID0gRW1wdHkgfCBOb2RlIG9mIHtsOnQ7IHY6ZWx0OyByOnQ7IGg6aW50fVxuXG4gICAgKCogU2V0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYmFsYW5jZWQgYmluYXJ5IHRyZWVzICh0aGUgaGVpZ2h0cyBvZiB0aGVcbiAgICAgICBjaGlsZHJlbiBkaWZmZXIgYnkgYXQgbW9zdCAyICopXG5cbiAgICBsZXQgaGVpZ2h0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtofSAtPiBoXG5cbiAgICAoKiBDcmVhdGVzIGEgbmV3IG5vZGUgd2l0aCBsZWZ0IHNvbiBsLCB2YWx1ZSB2IGFuZCByaWdodCBzb24gci5cbiAgICAgICBXZSBtdXN0IGhhdmUgYWxsIGVsZW1lbnRzIG9mIGwgPCB2IDwgYWxsIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgbCBhbmQgciBtdXN0IGJlIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgaGVpZ2h0IGZvciBiZXR0ZXIgc3BlZWQuICopXG5cbiAgICBsZXQgY3JlYXRlIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIFNhbWUgYXMgY3JlYXRlLCBidXQgcGVyZm9ybXMgb25lIHN0ZXAgb2YgcmViYWxhbmNpbmcgaWYgbmVjZXNzYXJ5LlxuICAgICAgIEFzc3VtZXMgbCBhbmQgciBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMy5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGNyZWF0ZSBmb3IgYmV0dGVyIHNwZWVkIGluIHRoZSBtb3N0IGZyZXF1ZW50IGNhc2VcbiAgICAgICB3aGVyZSBubyByZWJhbGFuY2luZyBpcyByZXF1aXJlZC4gKilcblxuICAgIGxldCBiYWwgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9bGw7IHY9bHY7IHI9bHJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVpZ2h0IGxyIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIGxsIGx2IChjcmVhdGUgbHIgdiByKVxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBsciB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9bHJsOyB2PWxydjsgcj1scnJ9LT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGxsIGx2IGxybCkgbHJ2IChjcmVhdGUgbHJyIHYgcilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgaHIgPiBobCArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCByIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1ybDsgdj1ydjsgcj1ycn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCByciA+PSBoZWlnaHQgcmwgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmwpIHJ2IHJyXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIHJsIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1ybGw7IHY9cmx2OyByPXJscn0gLT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybGwpIHJsdiAoY3JlYXRlIHJsciBydiBycilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBJbnNlcnRpb24gb2Ygb25lIGVsZW1lbnQgKilcblxuICAgIGxldCByZWMgYWRkIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdCBlbHNlXG4gICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gYWRkIHggbCBpblxuICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHQgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHQgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgc2luZ2xldG9uIHggPSBOb2Rle2w9RW1wdHk7IHY9eDsgcj1FbXB0eTsgaD0xfVxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCB2IGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGVsZW1lbnRzIGluIHRoZSB0cmVlOyBpdFxuICAgICAgIGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5IHdpdGggdGhlIGN1cnJlbnQgbWluIChvciBtYXgpIGVsZW1lbnQuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9lbGVtZW50IHggbCkgdiByXG5cbiAgICBsZXQgcmVjIGFkZF9tYXhfZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiAoYWRkX21heF9lbGVtZW50IHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2VsZW1lbnQgdiByXG4gICAgICB8IChfLCBFbXB0eSkgLT4gYWRkX21heF9lbGVtZW50IHYgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyByPWxyOyBoPWxofSwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyOyBoPXJofSkgLT5cbiAgICAgICAgICBpZiBsaCA+IHJoICsgMiB0aGVuIGJhbCBsbCBsdiAoam9pbiBsciB2IHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgcmwpIHJ2IHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IHJcblxuICAgICgqIFNtYWxsZXN0IGFuZCBncmVhdGVzdCBlbGVtZW50IG9mIGEgc2V0ICopXG5cbiAgICBsZXQgcmVjIG1pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdCBsXG5cbiAgICBsZXQgcmVjIG1pbl9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHRfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0IHJcblxuICAgIGxldCByZWMgbWF4X2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdF9vcHQgclxuXG4gICAgKCogUmVtb3ZlIHRoZSBzbWFsbGVzdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzZXQgKilcblxuICAgIGxldCByZWMgcmVtb3ZlX21pbl9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgcn0gLT4gclxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGJhbCAocmVtb3ZlX21pbl9lbHQgbCkgdiByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgQXNzdW1lIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuICopXG5cbiAgICBsZXQgbWVyZ2UgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBiYWwgdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBObyBhc3N1bXB0aW9uIG9uIHRoZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgY29uY2F0IHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogU3BsaXR0aW5nLiAgc3BsaXQgeCBzIHJldHVybnMgYSB0cmlwbGUgKGwsIHByZXNlbnQsIHIpIHdoZXJlXG4gICAgICAgIC0gbCBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPCB4XG4gICAgICAgIC0gciBpcyB0aGUgc2V0IG9mIGVsZW1lbnRzIG9mIHMgdGhhdCBhcmUgPiB4XG4gICAgICAgIC0gcHJlc2VudCBpcyBmYWxzZSBpZiBzIGNvbnRhaW5zIG5vIGVsZW1lbnQgZXF1YWwgdG8geCxcbiAgICAgICAgICBvciB0cnVlIGlmIHMgY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byB4LiAqKVxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIGZhbHNlLCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgdHJ1ZSwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiByKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobHIsIHByZXMsIHJyKSA9IHNwbGl0IHggciBpbiAoam9pbiBsIHYgbHIsIHByZXMsIHJyKVxuXG4gICAgKCogSW1wbGVtZW50YXRpb24gb2YgdGhlIHNldCBvcGVyYXRpb25zICopXG5cbiAgICBsZXQgZW1wdHkgPSBFbXB0eVxuXG4gICAgbGV0IGlzX2VtcHR5ID0gZnVuY3Rpb24gRW1wdHkgLT4gdHJ1ZSB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBjID0gMCB8fCBtZW0geCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSBhcyB0KSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBtZXJnZSBsIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICAgIGxldCBsbCA9IHJlbW92ZSB4IGwgaW5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsbCB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbGwgdiByXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW5cbiAgICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSBiYWwgbCB2IHJyXG5cbiAgICBsZXQgcmVjIHVuaW9uIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0MikgLT4gdDJcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMTsgaD1oMX0sIE5vZGV7bD1sMjsgdj12Mjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgaWYgaDIgPSAxIHRoZW4gYWRkIHYyIHMxIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMiwgXywgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYxICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGgxID0gMSB0aGVuIGFkZCB2MSBzMiBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDEsIF8sIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MiAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgaW50ZXIgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8IChfLCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGludGVyIGwxIGwyKSAoaW50ZXIgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChpbnRlciBsMSBsMikgdjEgKGludGVyIHIxIHIyKVxuXG4gICAgKCogU2FtZSBhcyBzcGxpdCwgYnV0IGNvbXB1dGUgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWVzXG4gICAgICAgb25seSBpZiB0aGUgcGl2b3QgZWxlbWVudCBpcyBub3QgaW4gdGhlIHNldC4gIFRoZSByaWdodCBzdWJ0cmVlXG4gICAgICAgaXMgY29tcHV0ZWQgb24gZGVtYW5kLiAqKVxuXG4gICAgdHlwZSBzcGxpdF9iaXMgPVxuICAgICAgfCBGb3VuZFxuICAgICAgfCBOb3RGb3VuZCBvZiB0ICogKHVuaXQgLT4gdClcblxuICAgIGxldCByZWMgc3BsaXRfYmlzIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vdEZvdW5kIChFbXB0eSwgKGZ1biAoKSAtPiBFbXB0eSkpXG4gICAgICB8IE5vZGV7bDsgdjsgcjsgX30gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gRm91bmRcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IGwgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobGwsIHJsKSAtPiBOb3RGb3VuZCAobGwsIChmdW4gKCkgLT4gam9pbiAocmwgKCkpIHYgcikpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggciB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsciwgcnIpIC0+IE5vdEZvdW5kIChqb2luIGwgdiBsciwgcnIpXG5cbiAgICBsZXQgcmVjIGRpc2pvaW50IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSB8IChfLCBFbXB0eSkgLT4gdHJ1ZVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgaWYgczEgPT0gczIgdGhlbiBmYWxzZVxuICAgICAgICAgIGVsc2UgbWF0Y2ggc3BsaXRfYmlzIHYxIHQyIHdpdGhcbiAgICAgICAgICAgICAgTm90Rm91bmQobDIsIHIyKSAtPiBkaXNqb2ludCBsMSBsMiAmJiBkaXNqb2ludCByMSAocjIgKCkpXG4gICAgICAgICAgICB8IEZvdW5kIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGRpZmYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IEVtcHR5XG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoZGlmZiBsMSBsMikgdjEgKGRpZmYgcjEgcjIpXG4gICAgICAgICAgfCAobDIsIHRydWUsIHIyKSAtPlxuICAgICAgICAgICAgICBjb25jYXQgKGRpZmYgbDEgbDIpIChkaWZmIHIxIHIyKVxuXG4gICAgdHlwZSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2YgZWx0ICogdCAqIGVudW1lcmF0aW9uXG5cbiAgICBsZXQgcmVjIGNvbnNfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCByLCBlKSlcblxuICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgIChFbmQsIEVuZCkgLT4gMFxuICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgfCAoTW9yZSh2MSwgcjEsIGUxKSwgTW9yZSh2MiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA8PiAwXG4gICAgICAgICAgdGhlbiBjXG4gICAgICAgICAgZWxzZSBjb21wYXJlX2F1eCAoY29uc19lbnVtIHIxIGUxKSAoY29uc19lbnVtIHIyIGUyKVxuXG4gICAgbGV0IGNvbXBhcmUgczEgczIgPVxuICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSBzMSBFbmQpIChjb25zX2VudW0gczIgRW5kKVxuXG4gICAgbGV0IGVxdWFsIHMxIHMyID1cbiAgICAgIGNvbXBhcmUgczEgczIgPSAwXG5cbiAgICBsZXQgcmVjIHN1YnNldCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIEVtcHR5LCBfIC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBfLCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IE5vZGUge2w9bDE7IHY9djE7IHI9cjF9LCAoTm9kZSB7bD1sMjsgdj12Mjsgcj1yMn0gYXMgdDIpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCBsMSBsMiAmJiBzdWJzZXQgcjEgcjJcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1sMTsgdj12MTsgcj1FbXB0eTsgaD0wfSkgbDIgJiYgc3Vic2V0IHIxIHQyXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPUVtcHR5OyB2PXYxOyByPXIxOyBoPTB9KSByMiAmJiBzdWJzZXQgbDEgdDJcblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBpdGVyIGYgbDsgZiB2OyBpdGVyIGYgclxuXG4gICAgbGV0IHJlYyBmb2xkIGYgcyBhY2N1ID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZm9sZCBmIHIgKGYgdiAoZm9sZCBmIGwgYWNjdSkpXG5cbiAgICBsZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHRydWVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgJiYgZm9yX2FsbCBwIGwgJiYgZm9yX2FsbCBwIHJcblxuICAgIGxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBmYWxzZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiB8fCBleGlzdHMgcCBsIHx8IGV4aXN0cyBwIHJcblxuICAgIGxldCByZWMgZmlsdGVyIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsOyB2OyByfSkgYXMgdCAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdiB0aGVuXG4gICAgICAgICAgICBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIHQgZWxzZSBqb2luIGwnIHYgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBwYXJ0aXRpb24gcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IChFbXB0eSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiByZilcblxuICAgIGxldCByZWMgY2FyZGluYWwgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGV7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGVsZW1lbnRzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGVsZW1lbnRzX2F1eCAodiA6OiBlbGVtZW50c19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgZWxlbWVudHMgcyA9XG4gICAgICBlbGVtZW50c19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9lbHRcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2VsdF9vcHRcblxuICAgIGxldCByZWMgZmluZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gdlxuICAgICAgICAgIGVsc2UgZmluZCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX29wdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFNvbWUgdlxuICAgICAgICAgIGVsc2UgZmluZF9vcHQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCB0cnlfam9pbiBsIHYgciA9XG4gICAgICAoKiBbam9pbiBsIHYgcl0gY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4gKGVsZW1lbnRzIG9mIGwgPCB2IDxcbiAgICAgICAgIGVsZW1lbnRzIG9mIHIpOyB1c2UgW3RyeV9qb2luIGwgdiByXSB3aGVuIHRoaXMgcHJvcGVydHkgbWF5XG4gICAgICAgICBub3QgaG9sZCwgYnV0IHlvdSBob3BlIGl0IGRvZXMgaG9sZCBpbiB0aGUgY29tbW9uIGNhc2UgKilcbiAgICAgIGlmIChsID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgKG1heF9lbHQgbCkgdiA8IDApXG4gICAgICAmJiAociA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIHYgKG1pbl9lbHQgcikgPCAwKVxuICAgICAgdGhlbiBqb2luIGwgdiByXG4gICAgICBlbHNlIHVuaW9uIGwgKGFkZCB2IHIpXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAoKiBlbmZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciAqKVxuICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcblxuICAgIGxldCBvZl9zb3J0ZWRfbGlzdCBsID1cbiAgICAgIGxldCByZWMgc3ViIG4gbCA9XG4gICAgICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgICAgICB8IDAsIGwgLT4gRW1wdHksIGxcbiAgICAgICAgfCAxLCB4MCA6OiBsIC0+IE5vZGUge2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX0sIGxcbiAgICAgICAgfCAyLCB4MCA6OiB4MSA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxOyByPUVtcHR5OyBoPTJ9LCBsXG4gICAgICAgIHwgMywgeDAgOjogeDEgOjogeDIgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTtcbiAgICAgICAgICAgICAgICAgcj1Ob2Rle2w9RW1wdHk7IHY9eDI7IHI9RW1wdHk7IGg9MX07IGg9Mn0sIGxcbiAgICAgICAgfCBuLCBsIC0+XG4gICAgICAgICAgbGV0IG5sID0gbiAvIDIgaW5cbiAgICAgICAgICBsZXQgbGVmdCwgbCA9IHN1YiBubCBsIGluXG4gICAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IG1pZCA6OiBsIC0+XG4gICAgICAgICAgICBsZXQgcmlnaHQsIGwgPSBzdWIgKG4gLSBubCAtIDEpIGwgaW5cbiAgICAgICAgICAgIGNyZWF0ZSBsZWZ0IG1pZCByaWdodCwgbFxuICAgICAgaW5cbiAgICAgIGZzdCAoc3ViIChMaXN0Lmxlbmd0aCBsKSBsKVxuXG4gICAgbGV0IG9mX2xpc3QgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gZW1wdHlcbiAgICAgIHwgW3gwXSAtPiBzaW5nbGV0b24geDBcbiAgICAgIHwgW3gwOyB4MV0gLT4gYWRkIHgxIChzaW5nbGV0b24geDApXG4gICAgICB8IFt4MDsgeDE7IHgyXSAtPiBhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzXSAtPiBhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSlcbiAgICAgIHwgW3gwOyB4MTsgeDI7IHgzOyB4NF0gLT4gYWRkIHg0IChhZGQgeDMgKGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKSkpXG4gICAgICB8IF8gLT4gb2Zfc29ydGVkX2xpc3QgKExpc3Quc29ydF91bmlxIE9yZC5jb21wYXJlIGwpXG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIHMgeCAtPiBhZGQgeCBzKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlICh4LCB0LCByZXN0KSAtPiBTZXEuQ29ucyAoeCwgc2VxX29mX2VudW1fIChjb25zX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19zZXEgYyA9IHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBzID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBzIGMgPSBtYXRjaCBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgcjsgdjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBzIEVuZClcbiAgZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgKydhIHRcbiAgICB2YWwgZW1wdHk6ICdhIHRcbiAgICB2YWwgaXNfZW1wdHk6ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBtZW06ICBrZXkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGFkZDoga2V5IC0+ICdhIC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCB1cGRhdGU6IGtleSAtPiAoJ2Egb3B0aW9uIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIHNpbmdsZXRvbjoga2V5IC0+ICdhIC0+ICdhIHRcbiAgICB2YWwgcmVtb3ZlOiBrZXkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIG1lcmdlOlxuICAgICAgICAgIChrZXkgLT4gJ2Egb3B0aW9uIC0+ICdiIG9wdGlvbiAtPiAnYyBvcHRpb24pIC0+ICdhIHQgLT4gJ2IgdCAtPiAnYyB0XG4gICAgdmFsIHVuaW9uOiAoa2V5IC0+ICdhIC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgY29tcGFyZTogKCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogKCdhIC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQ6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgZm9yX2FsbDogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBmaWx0ZXI6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIHBhcnRpdGlvbjogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+ICdhIHQgKiAnYSB0XG4gICAgdmFsIGNhcmRpbmFsOiAnYSB0IC0+IGludFxuICAgIHZhbCBiaW5kaW5nczogJ2EgdCAtPiAoa2V5ICogJ2EpIGxpc3RcbiAgICB2YWwgbWluX2JpbmRpbmc6ICdhIHQgLT4gKGtleSAqICdhKVxuICAgIHZhbCBtaW5fYmluZGluZ19vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgbWF4X2JpbmRpbmc6ICdhIHQgLT4gKGtleSAqICdhKVxuICAgIHZhbCBtYXhfYmluZGluZ19vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgY2hvb3NlOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgY2hvb3NlX29wdDogJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBzcGxpdDoga2V5IC0+ICdhIHQgLT4gJ2EgdCAqICdhIG9wdGlvbiAqICdhIHRcbiAgICB2YWwgZmluZDoga2V5IC0+ICdhIHQgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6IGtleSAtPiAnYSB0IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9maXJzdF9vcHQ6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiBrZXkgKiAnYVxuICAgIHZhbCBmaW5kX2xhc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgbWFwOiAoJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBtYXBpOiAoa2V5IC0+ICdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9mcm9tIDoga2V5IC0+ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZShPcmQ6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuXG4gICAgdHlwZSBrZXkgPSBPcmQudFxuXG4gICAgdHlwZSAnYSB0ID1cbiAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSBvZiB7bDonYSB0OyB2OmtleTsgZDonYTsgcjonYSB0OyBoOmludH1cblxuICAgIGxldCBoZWlnaHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2h9IC0+IGhcblxuICAgIGxldCBjcmVhdGUgbCB4IGQgciA9XG4gICAgICBsZXQgaGwgPSBoZWlnaHQgbCBhbmQgaHIgPSBoZWlnaHQgciBpblxuICAgICAgTm9kZXtsOyB2PXg7IGQ7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgIGxldCBzaW5nbGV0b24geCBkID0gTm9kZXtsPUVtcHR5OyB2PXg7IGQ7IHI9RW1wdHk7IGg9MX1cblxuICAgIGxldCBiYWwgbCB4IGQgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgaWYgaGwgPiBociArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCBsbCA+PSBoZWlnaHQgbHIgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgbGwgbHYgbGQgKGNyZWF0ZSBsciB4IGQgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IGQ9bHJkOyByPWxycn0tPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbGwgbHYgbGQgbHJsKSBscnYgbHJkIChjcmVhdGUgbHJyIHggZCByKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBpZiBociA+IGhsICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIHIgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPXJsOyB2PXJ2OyBkPXJkOyByPXJyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IHJyID49IGhlaWdodCBybCB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgeCBkIHJsKSBydiByZCByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgZD1ybGQ7IHI9cmxyfSAtPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmxsKSBybHYgcmxkIChjcmVhdGUgcmxyIHJ2IHJkIHJyKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZVxuICAgICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGFkZCB4IGRhdGEgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgaWYgZCA9PSBkYXRhIHRoZW4gbSBlbHNlIE5vZGV7bDsgdj14OyBkPWRhdGE7IHI7IGh9XG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSBhZGQgeCBkYXRhIGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggZGF0YSByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyBmaW5kIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBkXG4gICAgICAgICAgZWxzZSBmaW5kIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2MCBkMCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3QgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHQgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2MCBkMCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3QgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHQgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfb3B0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gU29tZSBkXG4gICAgICAgICAgZWxzZSBmaW5kX29wdCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGMgPSAwIHx8IG1lbSB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBtaW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsPUVtcHR5OyB2OyBkfSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0gLT4gbWluX2JpbmRpbmcgbFxuXG4gICAgbGV0IHJlYyBtaW5fYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge2x9LT4gbWluX2JpbmRpbmdfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7djsgZDsgcj1FbXB0eX0gLT4gKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nIHJcblxuICAgIGxldCByZWMgbWF4X2JpbmRpbmdfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiBTb21lICh2LCBkKVxuICAgICAgfCBOb2RlIHtyfSAtPiBtYXhfYmluZGluZ19vcHQgclxuXG4gICAgbGV0IHJlYyByZW1vdmVfbWluX2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gYmFsIChyZW1vdmVfbWluX2JpbmRpbmcgbCkgdiBkIHJcblxuICAgIGxldCBtZXJnZSB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+XG4gICAgICAgICAgbGV0ICh4LCBkKSA9IG1pbl9iaW5kaW5nIHQyIGluXG4gICAgICAgICAgYmFsIHQxIHggZCAocmVtb3ZlX21pbl9iaW5kaW5nIHQyKVxuXG4gICAgbGV0IHJlYyByZW1vdmUgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgKE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0pIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIG1lcmdlIGwgclxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gcmVtb3ZlIHggbCBpbiBpZiBsID09IGxsIHRoZW4gbSBlbHNlIGJhbCBsbCB2IGQgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW4gaWYgciA9PSByciB0aGVuIG0gZWxzZSBiYWwgbCB2IGQgcnJcblxuICAgIGxldCByZWMgdXBkYXRlIHggZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggZiBOb25lIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gRW1wdHlcbiAgICAgICAgICB8IFNvbWUgZGF0YSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgZD1kYXRhOyByPUVtcHR5OyBoPTF9XG4gICAgICAgICAgZW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IGFzIG0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIG1hdGNoIGYgKFNvbWUgZCkgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IG1lcmdlIGwgclxuICAgICAgICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbmQgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSB1cGRhdGUgeCBmIGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gdXBkYXRlIHggZiByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGl0ZXIgZiBsOyBmIHYgZDsgaXRlciBmIHJcblxuICAgIGxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgIGxldCBkJyA9IGYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcCBmIHIgaW5cbiAgICAgICAgICBOb2Rle2w9bCc7IHY7IGQ9ZCc7IHI9cic7IGh9XG5cbiAgICBsZXQgcmVjIG1hcGkgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gLT5cbiAgICAgICAgICBsZXQgbCcgPSBtYXBpIGYgbCBpblxuICAgICAgICAgIGxldCBkJyA9IGYgdiBkIGluXG4gICAgICAgICAgbGV0IHInID0gbWFwaSBmIHIgaW5cbiAgICAgICAgICBOb2Rle2w9bCc7IHY7IGQ9ZCc7IHI9cic7IGh9XG5cbiAgICBsZXQgcmVjIGZvbGQgZiBtIGFjY3UgPVxuICAgICAgbWF0Y2ggbSB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBmb2xkIGYgciAoZiB2IGQgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gcCB2IGQgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICAoKiBCZXdhcmU6IHRob3NlIHR3byBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGFkZGVkIGsgaXMgKnN0cmljdGx5KlxuICAgICAgIHNtYWxsZXIgKG9yIGJpZ2dlcikgdGhhbiBhbGwgdGhlIHByZXNlbnQga2V5cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBrZXkuXG5cbiAgICAgICBJbmRlZWQsIHRoZXkgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIFwiam9pblwiIG9wZXJhdGlvbiB3aGljaFxuICAgICAgIHJlc3BlY3RzIHRoaXMgcHJlY29uZGl0aW9uLlxuICAgICopXG5cbiAgICBsZXQgcmVjIGFkZF9taW5fYmluZGluZyBrIHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24gayB4XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9iaW5kaW5nIGsgeCBsKSB2IGQgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgbCB2IGQgKGFkZF9tYXhfYmluZGluZyBrIHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IGQgciA9XG4gICAgICBtYXRjaCAobCwgcikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IGFkZF9taW5fYmluZGluZyB2IGQgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfYmluZGluZyB2IGQgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyOyBoPWxofSxcbiAgICAgICAgIE5vZGV7bD1ybDsgdj1ydjsgZD1yZDsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgbGQgKGpvaW4gbHIgdiBkIHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgZCBybCkgcnYgcmQgcnIgZWxzZVxuICAgICAgICAgIGNyZWF0ZSBsIHYgZCByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+XG4gICAgICAgICAgbGV0ICh4LCBkKSA9IG1pbl9iaW5kaW5nIHQyIGluXG4gICAgICAgICAgam9pbiB0MSB4IGQgKHJlbW92ZV9taW5fYmluZGluZyB0MilcblxuICAgIGxldCBjb25jYXRfb3Jfam9pbiB0MSB2IGQgdDIgPVxuICAgICAgbWF0Y2ggZCB3aXRoXG4gICAgICB8IFNvbWUgZCAtPiBqb2luIHQxIHYgZCB0MlxuICAgICAgfCBOb25lIC0+IGNvbmNhdCB0MSB0MlxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIE5vbmUsIEVtcHR5KVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgU29tZSBkLCByKVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IChsbCwgcHJlcywgcmwpID0gc3BsaXQgeCBsIGluIChsbCwgcHJlcywgam9pbiBybCB2IGQgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGQgbHIsIHByZXMsIHJyKVxuXG4gICAgbGV0IHJlYyBtZXJnZSBmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGUge2w9bDE7IHY9djE7IGQ9ZDE7IHI9cjE7IGg9aDF9LCBfKSB3aGVuIGgxID49IGhlaWdodCBzMiAtPlxuICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MSAoZiB2MSAoU29tZSBkMSkgZDIpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCAoXywgTm9kZSB7bD1sMjsgdj12MjsgZD1kMjsgcj1yMn0pIC0+XG4gICAgICAgICAgbGV0IChsMSwgZDEsIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgY29uY2F0X29yX2pvaW4gKG1lcmdlIGYgbDEgbDIpIHYyIChmIHYyIGQxIChTb21lIGQyKSkgKG1lcmdlIGYgcjEgcjIpXG4gICAgICB8IF8gLT5cbiAgICAgICAgICBhc3NlcnQgZmFsc2VcblxuICAgIGxldCByZWMgdW5pb24gZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICB8IChFbXB0eSwgcykgfCAocywgRW1wdHkpIC0+IHNcbiAgICAgIHwgKE5vZGUge2w9bDE7IHY9djE7IGQ9ZDE7IHI9cjE7IGg9aDF9LFxuICAgICAgICAgTm9kZSB7bD1sMjsgdj12MjsgZD1kMjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgbGV0IChsMiwgZDIsIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICBsZXQgbCA9IHVuaW9uIGYgbDEgbDIgYW5kIHIgPSB1bmlvbiBmIHIxIHIyIGluXG4gICAgICAgICAgICBtYXRjaCBkMiB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gam9pbiBsIHYxIGQxIHJcbiAgICAgICAgICAgIHwgU29tZSBkMiAtPiBjb25jYXRfb3Jfam9pbiBsIHYxIChmIHYxIGQxIGQyKSByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsMSwgZDEsIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICBsZXQgbCA9IHVuaW9uIGYgbDEgbDIgYW5kIHIgPSB1bmlvbiBmIHIxIHIyIGluXG4gICAgICAgICAgICBtYXRjaCBkMSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gam9pbiBsIHYyIGQyIHJcbiAgICAgICAgICAgIHwgU29tZSBkMSAtPiBjb25jYXRfb3Jfam9pbiBsIHYyIChmIHYyIGQxIGQyKSByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdmQgPSBwIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdmQgdGhlbiBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIG0gZWxzZSBqb2luIGwnIHYgZCByJ1xuICAgICAgICAgIGVsc2UgY29uY2F0IGwnIHInXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZkXG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IGQgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiBkIHJmKVxuXG4gICAgdHlwZSAnYSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2Yga2V5ICogJ2EgKiAnYSB0ICogJ2EgZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIG0gZSA9XG4gICAgICBtYXRjaCBtIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCBkLCByLCBlKSlcblxuICAgIGxldCBjb21wYXJlIGNtcCBtMSBtMiA9XG4gICAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIGQxIGQyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBjb21wYXJlX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgZXF1YWxfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiB0cnVlXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IGZhbHNlXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gZmFsc2VcbiAgICAgICAgfCAoTW9yZSh2MSwgZDEsIHIxLCBlMSksIE1vcmUodjIsIGQyLCByMiwgZTIpKSAtPlxuICAgICAgICAgICAgT3JkLmNvbXBhcmUgdjEgdjIgPSAwICYmIGNtcCBkMSBkMiAmJlxuICAgICAgICAgICAgZXF1YWxfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBlcXVhbF9hdXggKGNvbnNfZW51bSBtMSBFbmQpIChjb25zX2VudW0gbTIgRW5kKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGJpbmRpbmdzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiaW5kaW5nc19hdXggKCh2LCBkKSA6OiBiaW5kaW5nc19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgYmluZGluZ3MgcyA9XG4gICAgICBiaW5kaW5nc19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9iaW5kaW5nXG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9iaW5kaW5nX29wdFxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBtIChrLHYpIC0+IGFkZCBrIHYgbSkgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoayx2LHQscmVzdCkgLT4gU2VxLkNvbnMgKChrLHYpLCBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3NlcSBtID1cbiAgICAgIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIG0gRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBtID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBtIGMgPSBtYXRjaCBtIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIGQsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCBkLCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBtIEVuZClcbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSB7IG11dGFibGUgYyA6ICdhIGxpc3Q7IG11dGFibGUgbGVuIDogaW50OyB9XG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgY3JlYXRlICgpID0geyBjID0gW107IGxlbiA9IDA7IH1cblxubGV0IGNsZWFyIHMgPSBzLmMgPC0gW107IHMubGVuIDwtIDBcblxubGV0IGNvcHkgcyA9IHsgYyA9IHMuYzsgbGVuID0gcy5sZW47IH1cblxubGV0IHB1c2ggeCBzID0gcy5jIDwtIHggOjogcy5jOyBzLmxlbiA8LSBzLmxlbiArIDFcblxubGV0IHBvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IGhkXG4gIHwgW10gICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCBwb3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgU29tZSBoZFxuICB8IFtdICAgICAtPiBOb25lXG5cbmxldCB0b3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gaGRcbiAgfCBbXSAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgdG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBTb21lIGhkXG4gIHwgW10gICAgLT4gTm9uZVxuXG5sZXQgaXNfZW1wdHkgcyA9IChzLmMgPSBbXSlcblxubGV0IGxlbmd0aCBzID0gcy5sZW5cblxubGV0IGl0ZXIgZiBzID0gTGlzdC5pdGVyIGYgcy5jXG5cbmxldCBmb2xkIGYgYWNjIHMgPSBMaXN0LmZvbGRfbGVmdCBmIGFjYyBzLmNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gTGlzdC50b19zZXEgcy5jXG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcyA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcyBnO1xuICBzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudC4gIFRoaXMgZnVuY3Rpb24gaXNcbiAgIGhlcmUgZm9yIHRoZSBzYWtlIG9mIGNvbXBsZXRlbmVzcywgYW5kIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4gKilcblxubGV0IGZvcmNlIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2xhenlfYmxvY2sgbHp2XG5cblxubGV0IGZvcmNlX3ZhbCAobHp2IDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IHggPSBPYmoucmVwciBsenYgaW5cbiAgbGV0IHQgPSBPYmoudGFnIHggaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB0aGVuIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpIGVsc2VcbiAgaWYgdCA8PiBPYmoubGF6eV90YWcgdGhlbiAoT2JqLm9iaiB4IDogJ2FyZylcbiAgZWxzZSBmb3JjZV92YWxfbGF6eV9ibG9jayBsenZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtMYXp5XTogZGVmZXJyZWQgY29tcHV0YXRpb25zICopXG5cblxuKCpcbiAgIFdBUk5JTkc6IHNvbWUgcHVycGxlIG1hZ2ljIGlzIGdvaW5nIG9uIGhlcmUuICBEbyBub3QgdGFrZSB0aGlzIGZpbGVcbiAgIGFzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHByb2dyYW0gaW4gT0NhbWwuXG4qKVxuXG5cbigqIFdlIG1ha2UgdXNlIG9mIHR3byBzcGVjaWFsIHRhZ3MgcHJvdmlkZWQgYnkgdGhlIHJ1bnRpbWU6XG4gICBbbGF6eV90YWddIGFuZCBbZm9yd2FyZF90YWddLlxuXG4gICBBIHZhbHVlIG9mIHR5cGUgWydhIExhenkudF0gY2FuIGJlIG9uZSBvZiB0aHJlZSB0aGluZ3M6XG4gICAxLiBBIGJsb2NrIG9mIHNpemUgMSB3aXRoIHRhZyBbbGF6eV90YWddLiAgSXRzIGZpZWxkIGlzIGEgY2xvc3VyZSBvZlxuICAgICAgdHlwZSBbdW5pdCAtPiAnYV0gdGhhdCBjb21wdXRlcyB0aGUgdmFsdWUuXG4gICAyLiBBIGJsb2NrIG9mIHNpemUgMSB3aXRoIHRhZyBbZm9yd2FyZF90YWddLiAgSXRzIGZpZWxkIGlzIHRoZSB2YWx1ZVxuICAgICAgb2YgdHlwZSBbJ2FdIHRoYXQgd2FzIGNvbXB1dGVkLlxuICAgMy4gQW55dGhpbmcgZWxzZSBleGNlcHQgYSBmbG9hdC4gIFRoaXMgaGFzIHR5cGUgWydhXSBhbmQgaXMgdGhlIHZhbHVlXG4gICAgICB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIEV4Y2VwdGlvbnMgYXJlIHN0b3JlZCBpbiBmb3JtYXQgKDEpLlxuICAgVGhlIEdDIHdpbGwgbWFnaWNhbGx5IGNoYW5nZSB0aGluZ3MgZnJvbSAoMikgdG8gKDMpIGFjY29yZGluZyB0byBpdHNcbiAgIGZhbmN5LlxuXG4gICBJZiBPQ2FtbCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSAtZmxhdC1mbG9hdC1hcnJheSBvcHRpb24gKHdoaWNoIGlzXG4gICBjdXJyZW50bHkgdGhlIGRlZmF1bHQpLCB0aGUgZm9sbG93aW5nIGlzIGFsc28gdHJ1ZTpcbiAgIFdlIGNhbm5vdCB1c2UgcmVwcmVzZW50YXRpb24gKDMpIGZvciBhIFtmbG9hdCBMYXp5LnRdIGJlY2F1c2VcbiAgIFtjYW1sX21ha2VfYXJyYXldIGFzc3VtZXMgdGhhdCBvbmx5IGEgW2Zsb2F0XSB2YWx1ZSBjYW4gaGF2ZSB0YWdcbiAgIFtEb3VibGVfdGFnXS5cblxuICAgV2UgaGF2ZSB0byB1c2UgdGhlIGJ1aWx0LWluIHR5cGUgY29uc3RydWN0b3IgW2xhenlfdF0gdG9cbiAgIGxldCB0aGUgY29tcGlsZXIgaW1wbGVtZW50IHRoZSBzcGVjaWFsIHR5cGluZyBhbmQgY29tcGlsYXRpb25cbiAgIHJ1bGVzIGZvciB0aGUgW2xhenldIGtleXdvcmQuXG4qKVxuXG50eXBlICdhIHQgPSAnYSBDYW1saW50ZXJuYWxMYXp5LnRcblxuZXhjZXB0aW9uIFVuZGVmaW5lZCA9IENhbWxpbnRlcm5hbExhenkuVW5kZWZpbmVkXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6ICdhIC0+ICdhIGxhenlfdCA9IFwiY2FtbF9sYXp5X21ha2VfZm9yd2FyZFwiXG5cbmV4dGVybmFsIGZvcmNlIDogJ2EgdCAtPiAnYSA9IFwiJWxhenlfZm9yY2VcIlxuXG4oKiBsZXQgZm9yY2UgPSBmb3JjZSAqKVxuXG5sZXQgZm9yY2VfdmFsID0gQ2FtbGludGVybmFsTGF6eS5mb3JjZV92YWxcblxubGV0IGZyb21fZnVuIChmIDogdW5pdCAtPiAnYXJnKSA9XG4gIGxldCB4ID0gT2JqLm5ld19ibG9jayBPYmoubGF6eV90YWcgMSBpblxuICBPYmouc2V0X2ZpZWxkIHggMCAoT2JqLnJlcHIgZik7XG4gIChPYmoub2JqIHggOiAnYXJnIHQpXG5cblxubGV0IGZyb21fdmFsICh2IDogJ2FyZykgPVxuICBsZXQgdCA9IE9iai50YWcgKE9iai5yZXByIHYpIGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgfHwgdCA9IE9iai5sYXp5X3RhZyB8fCB0ID0gT2JqLmRvdWJsZV90YWcgdGhlbiBiZWdpblxuICAgIG1ha2VfZm9yd2FyZCB2XG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgKE9iai5tYWdpYyB2IDogJ2FyZyB0KVxuICBlbmRcblxuXG5sZXQgaXNfdmFsIChsIDogJ2FyZyB0KSA9IE9iai50YWcgKE9iai5yZXByIGwpIDw+IE9iai5sYXp5X3RhZ1xuXG5sZXQgbGF6eV9mcm9tX2Z1biA9IGZyb21fZnVuXG5cbmxldCBsYXp5X2Zyb21fdmFsID0gZnJvbV92YWxcblxubGV0IGxhenlfaXNfdmFsID0gaXNfdmFsXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIERhbmllbCBkZSBSYXVnbGF1ZHJlLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIGNlbGwgb3B0aW9uXG5hbmQgJ2EgY2VsbCA9IHsgbXV0YWJsZSBjb3VudCA6IGludDsgbXV0YWJsZSBkYXRhIDogJ2EgZGF0YSB9XG5hbmQgJ2EgZGF0YSA9XG4gICAgU2VtcHR5XG4gIHwgU2NvbnMgb2YgJ2EgKiAnYSBkYXRhXG4gIHwgU2FwcCBvZiAnYSBkYXRhICogJ2EgZGF0YVxuICB8IFNsYXp5IG9mICdhIGRhdGEgTGF6eS50XG4gIHwgU2dlbiBvZiAnYSBnZW5cbiAgfCBTYnVmZmlvIDogYnVmZmlvIC0+IGNoYXIgZGF0YVxuYW5kICdhIGdlbiA9IHsgbXV0YWJsZSBjdXJyIDogJ2Egb3B0aW9uIG9wdGlvbjsgZnVuYyA6IGludCAtPiAnYSBvcHRpb24gfVxuYW5kIGJ1ZmZpbyA9XG4gIHsgaWMgOiBpbl9jaGFubmVsOyBidWZmIDogYnl0ZXM7IG11dGFibGUgbGVuIDogaW50OyBtdXRhYmxlIGluZCA6IGludCB9XG5cbmV4Y2VwdGlvbiBGYWlsdXJlXG5leGNlcHRpb24gRXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBjb3VudCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSB7IGNvdW50IH0gLT4gY291bnRcbmxldCBkYXRhID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFNlbXB0eVxuICB8IFNvbWUgeyBkYXRhIH0gLT4gZGF0YVxuXG5sZXQgZmlsbF9idWZmIGIgPVxuICBiLmxlbiA8LSBpbnB1dCBiLmljIGIuYnVmZiAwIChCeXRlcy5sZW5ndGggYi5idWZmKTsgYi5pbmQgPC0gMFxuXG5cbmxldCByZWMgZ2V0X2RhdGEgOiB0eXBlIHYuIGludCAtPiB2IGRhdGEgLT4gdiBkYXRhID0gZnVuIGNvdW50IGQgLT4gbWF0Y2ggZCB3aXRoXG4gKCogUmV0dXJucyBlaXRoZXIgU2VtcHR5IG9yIFNjb25zKGEsIF8pIGV2ZW4gd2hlbiBkIGlzIGEgZ2VuZXJhdG9yXG4gICAgb3IgYSBidWZmZXIuIEluIHRob3NlIGNhc2VzLCB0aGUgaXRlbSBhIGlzIHNlZW4gYXMgZXh0cmFjdGVkIGZyb21cbiB0aGUgZ2VuZXJhdG9yL2J1ZmZlci5cbiBUaGUgY291bnQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGNhbGxpbmcgYFNnZW4tZnVuY3Rpb25zJy4gICopXG4gICBTZW1wdHkgfCBTY29ucyAoXywgXykgLT4gZFxuIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBjb3VudCBkMSB3aXRoXG4gICAgICAgU2NvbnMgKGEsIGQxMSkgLT4gU2NvbnMgKGEsIFNhcHAgKGQxMSwgZDIpKVxuICAgICB8IFNlbXB0eSAtPiBnZXRfZGF0YSBjb3VudCBkMlxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2dlbiB7Y3VyciA9IFNvbWUgTm9uZX0gLT4gU2VtcHR5XG4gfCBTZ2VuICh7Y3VyciA9IFNvbWUoU29tZSBhKX0gYXMgZykgLT5cbiAgICAgZy5jdXJyIDwtIE5vbmU7IFNjb25zKGEsIGQpXG4gfCBTZ2VuIGcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZy5mdW5jIGNvdW50IHdpdGhcbiAgICAgICBOb25lIC0+IGcuY3VyciA8LSBTb21lKE5vbmUpOyBTZW1wdHlcbiAgICAgfCBTb21lIGEgLT4gU2NvbnMoYSwgZClcbiAgICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICBlbmRcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gU2VtcHR5IGVsc2VcbiAgICAgICBsZXQgciA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kIGluXG4gICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgICAgYi5pbmQgPC0gc3VjYyBiLmluZDsgU2NvbnMociwgZClcbiB8IFNsYXp5IGYgLT4gZ2V0X2RhdGEgY291bnQgKExhenkuZm9yY2UgZilcblxuXG5sZXQgcmVjIHBlZWtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHYgb3B0aW9uID0gZnVuIHMgLT5cbiAoKiBjb25zdWx0IHRoZSBmaXJzdCBpdGVtIG9mIHMgKilcbiBtYXRjaCBzLmRhdGEgd2l0aFxuICAgU2VtcHR5IC0+IE5vbmVcbiB8IFNjb25zIChhLCBfKSAtPiBTb21lIGFcbiB8IFNhcHAgKF8sIF8pIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIHMuY291bnQgcy5kYXRhIHdpdGhcbiAgICAgICBTY29ucyhhLCBfKSBhcyBkIC0+IHMuZGF0YSA8LSBkOyBTb21lIGFcbiAgICAgfCBTZW1wdHkgLT4gTm9uZVxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2xhenkgZiAtPiBzLmRhdGEgPC0gKExhenkuZm9yY2UgZik7IHBlZWtfZGF0YSBzXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBhfSAtPiBhXG4gfCBTZ2VuIGcgLT4gbGV0IHggPSBnLmZ1bmMgcy5jb3VudCBpbiBnLmN1cnIgPC0gU29tZSB4OyB4XG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIGJlZ2luIHMuZGF0YSA8LSBTZW1wdHk7IE5vbmUgZW5kXG4gICAgIGVsc2UgU29tZSAoQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQpXG5cblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgcyAtPiBwZWVrX2RhdGEgc1xuXG5cbmxldCByZWMganVua19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdW5pdCA9IGZ1biBzIC0+XG4gIG1hdGNoIHMuZGF0YSB3aXRoXG4gICAgU2NvbnMgKF8sIGQpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IHMuZGF0YSA8LSBkXG4gIHwgU2dlbiAoe2N1cnIgPSBTb21lIF99IGFzIGcpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGcuY3VyciA8LSBOb25lXG4gIHwgU2J1ZmZpbyBiIC0+XG4gICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIHMuZGF0YSA8LSBTZW1wdHlcbiAgICAgIGVsc2UgKHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGIuaW5kIDwtIHN1Y2MgYi5pbmQpXG4gIHwgXyAtPlxuICAgICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgICBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgXyAtPiBqdW5rX2RhdGEgc1xuXG5cbmxldCBqdW5rID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBkYXRhIC0+IGp1bmtfZGF0YSBkYXRhXG5cbmxldCByZWMgbmdldF9kYXRhIG4gcyA9XG4gIGlmIG4gPD0gMCB0aGVuIFtdLCBzLmRhdGEsIDBcbiAgZWxzZVxuICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgIFNvbWUgYSAtPlxuICAgICAgICBqdW5rX2RhdGEgcztcbiAgICAgICAgbGV0IChhbCwgZCwgaykgPSBuZ2V0X2RhdGEgKHByZWQgbikgcyBpbiBhIDo6IGFsLCBTY29ucyAoYSwgZCksIHN1Y2Mga1xuICAgIHwgTm9uZSAtPiBbXSwgcy5kYXRhLCAwXG5cblxubGV0IG5wZWVrX2RhdGEgbiBzID1cbiAgbGV0IChhbCwgZCwgbGVuKSA9IG5nZXRfZGF0YSBuIHMgaW5cbiAgcy5jb3VudCA8LSAocy5jb3VudCAtIGxlbik7XG4gIHMuZGF0YSA8LSBkO1xuICBhbFxuXG5cbmxldCBucGVlayBuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSBkIC0+IG5wZWVrX2RhdGEgbiBkXG5cbmxldCBuZXh0IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgYSAtPiBqdW5rIHM7IGFcbiAgfCBOb25lIC0+IHJhaXNlIEZhaWx1cmVcblxuXG5sZXQgZW1wdHkgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBfIC0+IHJhaXNlIEZhaWx1cmVcbiAgfCBOb25lIC0+ICgpXG5cblxubGV0IGl0ZXIgZiBzdHJtID1cbiAgbGV0IHJlYyBkb19yZWMgKCkgPVxuICAgIG1hdGNoIHBlZWsgc3RybSB3aXRoXG4gICAgICBTb21lIGEgLT4ganVuayBzdHJtOyBpZ25vcmUoZiBhKTsgZG9fcmVjICgpXG4gICAgfCBOb25lIC0+ICgpXG4gIGluXG4gIGRvX3JlYyAoKVxuXG5cbigqIFN0cmVhbSBidWlsZGluZyBmdW5jdGlvbnMgKilcblxubGV0IGZyb20gZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNnZW4ge2N1cnIgPSBOb25lOyBmdW5jID0gZn19XG5cbmxldCBvZl9saXN0IGwgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBMaXN0LmZvbGRfcmlnaHQgKGZ1biB4IGwgLT4gU2NvbnMgKHgsIGwpKSBsIFNlbXB0eX1cblxuXG5sZXQgb2Zfc3RyaW5nIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgICgqIFdlIGNhbm5vdCB1c2UgdGhlIGluZGV4IHBhc3NlZCBieSB0aGUgW2Zyb21dIGZ1bmN0aW9uIGRpcmVjdGx5XG4gICAgICAgYmVjYXVzZSBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmVhbSBjb3VudCwgd2l0aCBhYnNvbHV0ZWx5IG5vXG4gICAgICAgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgICAgIG9mIFtTdHJlYW0uaWNvbnMgJ2MnIChTdHJlYW0uZnJvbV9zdHJpbmcgXCJhYlwiKV0sIHRoZSBmaXJzdFxuICAgICAgIGFjY2VzcyB0byB0aGUgc3RyaW5nIHdpbGwgYmUgbWFkZSB3aXRoIGNvdW50IFsxXSBhbHJlYWR5LlxuICAgICopXG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSBzLltjXSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2J5dGVzIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IEJ5dGVzLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSAoQnl0ZXMuZ2V0IHMgYykpXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9jaGFubmVsIGljID1cbiAgU29tZSB7Y291bnQgPSAwO1xuICAgICAgICBkYXRhID0gU2J1ZmZpbyB7aWMgPSBpYzsgYnVmZiA9IEJ5dGVzLmNyZWF0ZSA0MDk2OyBsZW4gPSAwOyBpbmQgPSAwfX1cblxuXG4oKiBTdHJlYW0gZXhwcmVzc2lvbnMgYnVpbGRlcnMgKilcblxubGV0IGlhcHAgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2FwcCAoZGF0YSBpLCBkYXRhIHMpfVxubGV0IGljb25zIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBkYXRhIHMpfVxubGV0IGlzaW5nIGkgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgU2VtcHR5KX1cblxubGV0IGxhcHAgZiBzID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2FwcCAoZGF0YSAoZiAoKSksIGRhdGEgcykpKX1cblxubGV0IGxjb25zIGYgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBkYXRhIHMpKSl9XG5sZXQgbHNpbmcgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBTZW1wdHkpKSl9XG5cbmxldCBzZW1wdHkgPSBOb25lXG5sZXQgc2xhenkgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KGRhdGEgKGYgKCkpKSl9XG5cbigqIEZvciBkZWJ1Z2dpbmcgdXNlICopXG5cbmxldCByZWMgZHVtcCA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiB0IC0+IHVuaXQgPSBmdW4gZiBzIC0+XG4gIHByaW50X3N0cmluZyBcIntjb3VudCA9IFwiO1xuICBwcmludF9pbnQgKGNvdW50IHMpO1xuICBwcmludF9zdHJpbmcgXCI7IGRhdGEgPSBcIjtcbiAgZHVtcF9kYXRhIGYgKGRhdGEgcyk7XG4gIHByaW50X3N0cmluZyBcIn1cIjtcbiAgcHJpbnRfbmV3bGluZSAoKVxuYW5kIGR1bXBfZGF0YSA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiBkYXRhIC0+IHVuaXQgPSBmdW4gZiAtPlxuICBmdW5jdGlvblxuICAgIFNlbXB0eSAtPiBwcmludF9zdHJpbmcgXCJTZW1wdHlcIlxuICB8IFNjb25zIChhLCBkKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2NvbnMgKFwiO1xuICAgICAgZiBhO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQ7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTYXBwIChcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQxO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQyO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2xhenkgXyAtPiBwcmludF9zdHJpbmcgXCJTbGF6eVwiXG4gIHwgU2dlbiBfIC0+IHByaW50X3N0cmluZyBcIlNnZW5cIlxuICB8IFNidWZmaW8gXyAtPiBwcmludF9zdHJpbmcgXCJTYnVmZmlvXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxuIGxldCBhZGRfdXRmXzhfdWNoYXIgYiB1ID0gbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgIGFkZF9jaGFyIGIgKENoYXIudW5zYWZlX2NociB1KVxuIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gICAgIGlmIHBvcyArIDIgPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDI7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyAgICApXG4gICAgICAgKENoYXIudW5zYWZlX2NociAoMHhDMCBsb3IgKHUgbHNyIDYpKSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDEpXG4gICAgICAgKENoYXIudW5zYWZlX2NociAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSkpO1xuICAgICBiLnBvc2l0aW9uIDwtIHBvcyArIDJcbiB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICAgICBpZiBwb3MgKyAzID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAzO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgICAgKVxuICAgICAgIChDaGFyLnVuc2FmZV9jaHIgKDB4RTAgbG9yICh1IGxzciAxMikpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMSlcbiAgICAgICAoQ2hhci51bnNhZmVfY2hyICgweDgwIGxvciAoKHUgbHNyIDYpIGxhbmQgMHgzRikpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMilcbiAgICAgICAoQ2hhci51bnNhZmVfY2hyICgweDgwIGxvciAodSBsYW5kIDB4M0YpKSk7XG4gICAgIGIucG9zaXRpb24gPC0gcG9zICsgM1xuIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgICAgaWYgcG9zICsgNCA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgNDtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICAgIClcbiAgICAgICAoQ2hhci51bnNhZmVfY2hyICgweEYwIGxvciAodSBsc3IgMTgpKSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDEpXG4gICAgICAgKENoYXIudW5zYWZlX2NociAoMHg4MCBsb3IgKCh1IGxzciAxMikgbGFuZCAweDNGKSkpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAyKVxuICAgICAgIChDaGFyLnVuc2FmZV9jaHIgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSkpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAzKVxuICAgICAgIChDaGFyLnVuc2FmZV9jaHIgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpKTtcbiAgICAgYi5wb3NpdGlvbiA8LSBwb3MgKyA0XG4gfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gbGV0IGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPSBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgICAgaWYgcG9zICsgMiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMjtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICAgICkgKENoYXIudW5zYWZlX2NociAodSBsc3IgOCkpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAxKSAoQ2hhci51bnNhZmVfY2hyICh1IGxhbmQgMHhGRikpO1xuICAgICBiLnBvc2l0aW9uIDwtIHBvcyArIDJcbiB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgIGxldCBoaSA9IDB4RDgwMCBsb3IgKHUnIGxzciAxMCkgaW5cbiAgICAgbGV0IGxvID0gMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikgaW5cbiAgICAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgICAgaWYgcG9zICsgNCA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgNDtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICAgICkgKENoYXIudW5zYWZlX2NociAoaGkgbHNyIDgpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMSkgKENoYXIudW5zYWZlX2NociAoaGkgbGFuZCAweEZGKSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDIpIChDaGFyLnVuc2FmZV9jaHIgKGxvIGxzciA4KSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDMpIChDaGFyLnVuc2FmZV9jaHIgKGxvIGxhbmQgMHhGRikpO1xuICAgICBiLnBvc2l0aW9uIDwtIHBvcyArIDRcbiB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiBsZXQgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9IG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICAgICBpZiBwb3MgKyAyID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgICAgKSAoQ2hhci51bnNhZmVfY2hyICh1IGxhbmQgMHhGRikpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAxKSAoQ2hhci51bnNhZmVfY2hyICh1IGxzciA4KSk7XG4gICAgIGIucG9zaXRpb24gPC0gcG9zICsgMlxuIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgbGV0IHUnID0gdSAtIDB4MTAwMDAgaW5cbiAgICAgbGV0IGhpID0gMHhEODAwIGxvciAodScgbHNyIDEwKSBpblxuICAgICBsZXQgbG8gPSAweERDMDAgbG9yICh1JyBsYW5kIDB4M0ZGKSBpblxuICAgICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICAgICBpZiBwb3MgKyA0ID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgICAgKSAoQ2hhci51bnNhZmVfY2hyIChoaSBsYW5kIDB4RkYpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMSkgKENoYXIudW5zYWZlX2NociAoaGkgbHNyIDgpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMikgKENoYXIudW5zYWZlX2NociAobG8gbGFuZCAweEZGKSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDMpIChDaGFyLnVuc2FmZV9jaHIgKGxvIGxzciA4KSk7XG4gICAgIGIucG9zaXRpb24gPC0gcG9zICsgNFxuIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUga2V5ID0gc3RyaW5nXG50eXBlIGRvYyA9IHN0cmluZ1xudHlwZSB1c2FnZV9tc2cgPSBzdHJpbmdcbnR5cGUgYW5vbl9mdW4gPSAoc3RyaW5nIC0+IHVuaXQpXG5cbnR5cGUgc3BlYyA9XG4gIHwgVW5pdCBvZiAodW5pdCAtPiB1bml0KSAgICAgKCogQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB1bml0IGFyZ3VtZW50ICopXG4gIHwgQm9vbCBvZiAoYm9vbCAtPiB1bml0KSAgICAgKCogQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBhIGJvb2wgYXJndW1lbnQgKilcbiAgfCBTZXQgb2YgYm9vbCByZWYgICAgICAgICAgICAoKiBTZXQgdGhlIHJlZmVyZW5jZSB0byB0cnVlICopXG4gIHwgQ2xlYXIgb2YgYm9vbCByZWYgICAgICAgICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gZmFsc2UgKilcbiAgfCBTdHJpbmcgb2YgKHN0cmluZyAtPiB1bml0KSAoKiBDYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGEgc3RyaW5nIGFyZ3VtZW50ICopXG4gIHwgU2V0X3N0cmluZyBvZiBzdHJpbmcgcmVmICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIHN0cmluZyBhcmd1bWVudCAqKVxuICB8IEludCBvZiAoaW50IC0+IHVuaXQpICAgICAgICgqIENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggYW4gaW50IGFyZ3VtZW50ICopXG4gIHwgU2V0X2ludCBvZiBpbnQgcmVmICAgICAgICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGludCBhcmd1bWVudCAqKVxuICB8IEZsb2F0IG9mIChmbG9hdCAtPiB1bml0KSAgICgqIENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggYSBmbG9hdCBhcmd1bWVudCAqKVxuICB8IFNldF9mbG9hdCBvZiBmbG9hdCByZWYgICAgICgqIFNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBmbG9hdCBhcmd1bWVudCAqKVxuICB8IFR1cGxlIG9mIHNwZWMgbGlzdCAgICAgICAgICgqIFRha2Ugc2V2ZXJhbCBhcmd1bWVudHMgYWNjb3JkaW5nIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMgbGlzdCAqKVxuICB8IFN5bWJvbCBvZiBzdHJpbmcgbGlzdCAqIChzdHJpbmcgLT4gdW5pdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUYWtlIG9uZSBvZiB0aGUgc3ltYm9scyBhcyBhcmd1bWVudCBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBzeW1ib2wuICopXG4gIHwgUmVzdCBvZiAoc3RyaW5nIC0+IHVuaXQpICAgKCogU3RvcCBpbnRlcnByZXRpbmcga2V5d29yZHMgYW5kIGNhbGwgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2l0aCBlYWNoIHJlbWFpbmluZyBhcmd1bWVudCAqKVxuICB8IEV4cGFuZCBvZiAoc3RyaW5nIC0+IHN0cmluZyBhcnJheSkgKCogSWYgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgdG8gcHJvY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG9mIHRoZSBmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW1wiLWZvb1wiOyBcImFyZ1wiXSBAIHJlc3RdIHdoZXJlIFwiZm9vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlZ2lzdGVyZWQgYXMgW0V4cGFuZCBmXSwgdGhlbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBbZiBcImFyZ1wiIEAgcmVzdF0gYXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQuIE9ubHkgYWxsb3dlZCBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljXS4gKilcblxuZXhjZXB0aW9uIEJhZCBvZiBzdHJpbmdcbmV4Y2VwdGlvbiBIZWxwIG9mIHN0cmluZ1xuXG50eXBlIGVycm9yID1cbiAgfCBVbmtub3duIG9mIHN0cmluZ1xuICB8IFdyb25nIG9mIHN0cmluZyAqIHN0cmluZyAqIHN0cmluZyAgKCogb3B0aW9uLCBhY3R1YWwsIGV4cGVjdGVkICopXG4gIHwgTWlzc2luZyBvZiBzdHJpbmdcbiAgfCBNZXNzYWdlIG9mIHN0cmluZ1xuXG5leGNlcHRpb24gU3RvcCBvZiBlcnJvciAoKiB1c2VkIGludGVybmFsbHkgKilcblxub3BlbiBQcmludGZcblxubGV0IHJlYyBhc3NvYzMgeCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKHkxLCB5MiwgXykgOjogXyB3aGVuIHkxID0geCAtPiB5MlxuICB8IF8gOjogdCAtPiBhc3NvYzMgeCB0XG5cblxubGV0IHNwbGl0IHMgPVxuICBsZXQgaSA9IFN0cmluZy5pbmRleCBzICc9JyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIFN0cmluZy5zdWIgcyAwIGksIFN0cmluZy5zdWIgcyAoaSsxKSAobGVuLShpKzEpKVxuXG5cbmxldCBtYWtlX3N5bWxpc3QgcHJlZml4IHNlcCBzdWZmaXggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFwiPG5vbmU+XCJcbiAgfCBoOjp0IC0+IChMaXN0LmZvbGRfbGVmdCAoZnVuIHggeSAtPiB4IF4gc2VwIF4geSkgKHByZWZpeCBeIGgpIHQpIF4gc3VmZml4XG5cblxubGV0IHByaW50X3NwZWMgYnVmIChrZXksIHNwZWMsIGRvYykgPVxuICBpZiBTdHJpbmcubGVuZ3RoIGRvYyA+IDAgdGhlblxuICAgIG1hdGNoIHNwZWMgd2l0aFxuICAgIHwgU3ltYm9sIChsLCBfKSAtPlxuICAgICAgICBicHJpbnRmIGJ1ZiBcIiAgJXMgJXMlc1xcblwiIGtleSAobWFrZV9zeW1saXN0IFwie1wiIFwifFwiIFwifVwiIGwpIGRvY1xuICAgIHwgXyAtPlxuICAgICAgICBicHJpbnRmIGJ1ZiBcIiAgJXMgJXNcXG5cIiBrZXkgZG9jXG5cblxubGV0IGhlbHBfYWN0aW9uICgpID0gcmFpc2UgKFN0b3AgKFVua25vd24gXCItaGVscFwiKSlcblxubGV0IGFkZF9oZWxwIHNwZWNsaXN0ID1cbiAgbGV0IGFkZDEgPVxuICAgIHRyeSBpZ25vcmUgKGFzc29jMyBcIi1oZWxwXCIgc3BlY2xpc3QpOyBbXVxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgICBbXCItaGVscFwiLCBVbml0IGhlbHBfYWN0aW9uLCBcIiBEaXNwbGF5IHRoaXMgbGlzdCBvZiBvcHRpb25zXCJdXG4gIGFuZCBhZGQyID1cbiAgICB0cnkgaWdub3JlIChhc3NvYzMgXCItLWhlbHBcIiBzcGVjbGlzdCk7IFtdXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgIFtcIi0taGVscFwiLCBVbml0IGhlbHBfYWN0aW9uLCBcIiBEaXNwbGF5IHRoaXMgbGlzdCBvZiBvcHRpb25zXCJdXG4gIGluXG4gIHNwZWNsaXN0IEAgKGFkZDEgQCBhZGQyKVxuXG5cbmxldCB1c2FnZV9iIGJ1ZiBzcGVjbGlzdCBlcnJtc2cgPVxuICBicHJpbnRmIGJ1ZiBcIiVzXFxuXCIgZXJybXNnO1xuICBMaXN0Lml0ZXIgKHByaW50X3NwZWMgYnVmKSAoYWRkX2hlbHAgc3BlY2xpc3QpXG5cblxubGV0IHVzYWdlX3N0cmluZyBzcGVjbGlzdCBlcnJtc2cgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjAwIGluXG4gIHVzYWdlX2IgYiBzcGVjbGlzdCBlcnJtc2c7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cblxubGV0IHVzYWdlIHNwZWNsaXN0IGVycm1zZyA9XG4gIGVwcmludGYgXCIlc1wiICh1c2FnZV9zdHJpbmcgc3BlY2xpc3QgZXJybXNnKVxuXG5cbmxldCBjdXJyZW50ID0gcmVmIDBcblxubGV0IGJvb2xfb2Zfc3RyaW5nX29wdCB4ID1cbiAgdHJ5IFNvbWUgKGJvb2xfb2Zfc3RyaW5nIHgpXG4gIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHggPVxuICB0cnkgU29tZSAoaW50X29mX3N0cmluZyB4KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHggPVxuICB0cnkgU29tZSAoZmxvYXRfb2Zfc3RyaW5nIHgpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IHBhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljX2F1eCBhbGxvd19leHBhbmQgY3VycmVudCBhcmd2IHNwZWNsaXN0IGFub25mdW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybXNnID1cbiAgbGV0IGluaXRwb3MgPSAhY3VycmVudCBpblxuICBsZXQgY29udmVydF9lcnJvciBlcnJvciA9XG4gICAgKCogY29udmVydCBhbiBpbnRlcm5hbCBlcnJvciB0byBhIEJhZC9IZWxwIGV4Y2VwdGlvblxuICAgICAgICpvciogYWRkIHRoZSBwcm9ncmFtIG5hbWUgYXMgYSBwcmVmaXggYW5kIHRoZSB1c2FnZSBtZXNzYWdlIGFzIGEgc3VmZml4XG4gICAgICAgdG8gYW4gdXNlci1yYWlzZWQgQmFkIGV4Y2VwdGlvbi5cbiAgICAqKVxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAyMDAgaW5cbiAgICBsZXQgcHJvZ25hbWUgPVxuICAgICAgaWYgaW5pdHBvcyA8IChBcnJheS5sZW5ndGggIWFyZ3YpIHRoZW4gIWFyZ3YuKGluaXRwb3MpIGVsc2UgXCIoPylcIiBpblxuICAgIGJlZ2luIG1hdGNoIGVycm9yIHdpdGhcbiAgICAgIHwgVW5rbm93biBcIi1oZWxwXCIgLT4gKClcbiAgICAgIHwgVW5rbm93biBcIi0taGVscFwiIC0+ICgpXG4gICAgICB8IFVua25vd24gcyAtPlxuICAgICAgICAgIGJwcmludGYgYiBcIiVzOiB1bmtub3duIG9wdGlvbiAnJXMnLlxcblwiIHByb2duYW1lIHNcbiAgICAgIHwgTWlzc2luZyBzIC0+XG4gICAgICAgICAgYnByaW50ZiBiIFwiJXM6IG9wdGlvbiAnJXMnIG5lZWRzIGFuIGFyZ3VtZW50LlxcblwiIHByb2duYW1lIHNcbiAgICAgIHwgV3JvbmcgKG9wdCwgYXJnLCBleHBlY3RlZCkgLT5cbiAgICAgICAgICBicHJpbnRmIGIgXCIlczogd3JvbmcgYXJndW1lbnQgJyVzJzsgb3B0aW9uICclcycgZXhwZWN0cyAlcy5cXG5cIlxuICAgICAgICAgICAgICAgICAgcHJvZ25hbWUgYXJnIG9wdCBleHBlY3RlZFxuICAgICAgfCBNZXNzYWdlIHMgLT4gKCogdXNlciBlcnJvciBtZXNzYWdlICopXG4gICAgICAgICAgYnByaW50ZiBiIFwiJXM6ICVzLlxcblwiIHByb2duYW1lIHNcbiAgICBlbmQ7XG4gICAgdXNhZ2VfYiBiICFzcGVjbGlzdCBlcnJtc2c7XG4gICAgaWYgZXJyb3IgPSBVbmtub3duIFwiLWhlbHBcIiB8fCBlcnJvciA9IFVua25vd24gXCItLWhlbHBcIlxuICAgIHRoZW4gSGVscCAoQnVmZmVyLmNvbnRlbnRzIGIpXG4gICAgZWxzZSBCYWQgKEJ1ZmZlci5jb250ZW50cyBiKVxuICBpblxuICBpbmNyIGN1cnJlbnQ7XG4gIHdoaWxlICFjdXJyZW50IDwgKEFycmF5Lmxlbmd0aCAhYXJndikgZG9cbiAgICBiZWdpbiB0cnlcbiAgICAgIGxldCBzID0gIWFyZ3YuKCFjdXJyZW50KSBpblxuICAgICAgaWYgU3RyaW5nLmxlbmd0aCBzID49IDEgJiYgcy5bMF0gPSAnLScgdGhlbiBiZWdpblxuICAgICAgICBsZXQgYWN0aW9uLCBmb2xsb3cgPVxuICAgICAgICAgIHRyeSBhc3NvYzMgcyAhc3BlY2xpc3QsIE5vbmVcbiAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgIHRyeVxuICAgICAgICAgICAgbGV0IGtleXdvcmQsIGFyZyA9IHNwbGl0IHMgaW5cbiAgICAgICAgICAgIGFzc29jMyBrZXl3b3JkICFzcGVjbGlzdCwgU29tZSBhcmdcbiAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiByYWlzZSAoU3RvcCAoVW5rbm93biBzKSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG5vX2FyZyAoKSA9XG4gICAgICAgICAgbWF0Y2ggZm9sbG93IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgYXJnIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcIm5vIGFyZ3VtZW50XCIpKSkgaW5cbiAgICAgICAgbGV0IGdldF9hcmcgKCkgPVxuICAgICAgICAgIG1hdGNoIGZvbGxvdyB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgIGlmICFjdXJyZW50ICsgMSA8IChBcnJheS5sZW5ndGggIWFyZ3YpIHRoZW4gIWFyZ3YuKCFjdXJyZW50ICsgMSlcbiAgICAgICAgICAgICAgZWxzZSByYWlzZSAoU3RvcCAoTWlzc2luZyBzKSlcbiAgICAgICAgICB8IFNvbWUgYXJnIC0+IGFyZ1xuICAgICAgICBpblxuICAgICAgICBsZXQgY29uc3VtZV9hcmcgKCkgPVxuICAgICAgICAgIG1hdGNoIGZvbGxvdyB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IGluY3IgY3VycmVudFxuICAgICAgICAgIHwgU29tZSBfIC0+ICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCByZWMgdHJlYXRfYWN0aW9uID0gZnVuY3Rpb25cbiAgICAgICAgfCBVbml0IGYgLT4gbm9fYXJnICgpOyBmICgpO1xuICAgICAgICB8IEJvb2wgZiAtPlxuICAgICAgICAgICAgbGV0IGFyZyA9IGdldF9hcmcgKCkgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGJvb2xfb2Zfc3RyaW5nX29wdCBhcmcgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcImEgYm9vbGVhblwiKSkpXG4gICAgICAgICAgICB8IFNvbWUgcyAtPiBmIHNcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGNvbnN1bWVfYXJnICgpO1xuICAgICAgICB8IFNldCByIC0+IG5vX2FyZyAoKTsgciA6PSB0cnVlO1xuICAgICAgICB8IENsZWFyIHIgLT4gbm9fYXJnICgpOyByIDo9IGZhbHNlO1xuICAgICAgICB8IFN0cmluZyBmIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgZiBhcmc7XG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgfCBTeW1ib2wgKHN5bWIsIGYpIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgaWYgTGlzdC5tZW0gYXJnIHN5bWIgdGhlbiBiZWdpblxuICAgICAgICAgICAgICBmIGFyZztcbiAgICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgICAgICByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJvbmUgb2Y6IFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIChtYWtlX3N5bWxpc3QgXCJcIiBcIiBcIiBcIlwiIHN5bWIpKSkpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgfCBTZXRfc3RyaW5nIHIgLT5cbiAgICAgICAgICAgIHIgOj0gZ2V0X2FyZyAoKTtcbiAgICAgICAgICAgIGNvbnN1bWVfYXJnICgpO1xuICAgICAgICB8IEludCBmIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggaW50X29mX3N0cmluZ19vcHQgYXJnIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJhbiBpbnRlZ2VyXCIpKSlcbiAgICAgICAgICAgIHwgU29tZSB4IC0+IGYgeFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgU2V0X2ludCByIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggaW50X29mX3N0cmluZ19vcHQgYXJnIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJhbiBpbnRlZ2VyXCIpKSlcbiAgICAgICAgICAgIHwgU29tZSB4IC0+IHIgOj0geFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgRmxvYXQgZiAtPlxuICAgICAgICAgICAgbGV0IGFyZyA9IGdldF9hcmcgKCkgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGZsb2F0X29mX3N0cmluZ19vcHQgYXJnIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJhIGZsb2F0XCIpKSlcbiAgICAgICAgICAgIHwgU29tZSB4IC0+IGYgeFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgU2V0X2Zsb2F0IHIgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBmbG9hdF9vZl9zdHJpbmdfb3B0IGFyZyB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgKFN0b3AgKFdyb25nIChzLCBhcmcsIFwiYSBmbG9hdFwiKSkpXG4gICAgICAgICAgICB8IFNvbWUgeCAtPiByIDo9IHhcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGNvbnN1bWVfYXJnICgpO1xuICAgICAgICB8IFR1cGxlIHNwZWNzIC0+XG4gICAgICAgICAgICBub19hcmcgKCk7XG4gICAgICAgICAgICBMaXN0Lml0ZXIgdHJlYXRfYWN0aW9uIHNwZWNzO1xuICAgICAgICB8IFJlc3QgZiAtPlxuICAgICAgICAgICAgbm9fYXJnICgpO1xuICAgICAgICAgICAgd2hpbGUgIWN1cnJlbnQgPCAoQXJyYXkubGVuZ3RoICFhcmd2KSAtIDEgZG9cbiAgICAgICAgICAgICAgZiAhYXJndi4oIWN1cnJlbnQgKyAxKTtcbiAgICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgICAgICBkb25lO1xuICAgICAgICB8IEV4cGFuZCBmIC0+XG4gICAgICAgICAgICBpZiBub3QgYWxsb3dfZXhwYW5kIHRoZW5cbiAgICAgICAgICAgICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJBcmcuRXhwYW5kIGlzIGlzIG9ubHkgYWxsb3dlZCB3aXRoIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcucGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNcIik7XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgbGV0IG5ld2FyZyA9IGYgYXJnIGluXG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGxldCBiZWZvcmUgPSBBcnJheS5zdWIgIWFyZ3YgMCAoIWN1cnJlbnQgKyAxKVxuICAgICAgICAgICAgYW5kIGFmdGVyID1cbiAgICAgICAgICAgICAgQXJyYXkuc3ViICFhcmd2ICghY3VycmVudCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAoKEFycmF5Lmxlbmd0aCAhYXJndikgLSAhY3VycmVudCAtIDEpIGluXG4gICAgICAgICAgICBhcmd2Oj0gQXJyYXkuY29uY2F0IFtiZWZvcmU7bmV3YXJnO2FmdGVyXTtcbiAgICAgICAgaW5cbiAgICAgICAgdHJlYXRfYWN0aW9uIGFjdGlvbiBlbmRcbiAgICAgIGVsc2UgYW5vbmZ1biBzXG4gICAgd2l0aCB8IEJhZCBtIC0+IHJhaXNlIChjb252ZXJ0X2Vycm9yIChNZXNzYWdlIG0pKTtcbiAgICAgICAgIHwgU3RvcCBlIC0+IHJhaXNlIChjb252ZXJ0X2Vycm9yIGUpO1xuICAgIGVuZDtcbiAgICBpbmNyIGN1cnJlbnRcbiAgZG9uZVxuXG5sZXQgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWMgY3VycmVudCBhcmd2IHNwZWNsaXN0IGFub25mdW4gZXJybXNnID1cbiAgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNfYXV4IHRydWUgY3VycmVudCBhcmd2IHNwZWNsaXN0IGFub25mdW4gZXJybXNnXG5cbmxldCBwYXJzZV9hcmd2X2R5bmFtaWMgPyhjdXJyZW50PWN1cnJlbnQpIGFyZ3Ygc3BlY2xpc3QgYW5vbmZ1biBlcnJtc2cgPVxuICBwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pY19hdXggZmFsc2UgY3VycmVudCAocmVmIGFyZ3YpIHNwZWNsaXN0IGFub25mdW5cbiAgICBlcnJtc2dcblxuXG5sZXQgcGFyc2VfYXJndiA/KGN1cnJlbnQ9Y3VycmVudCkgYXJndiBzcGVjbGlzdCBhbm9uZnVuIGVycm1zZyA9XG4gIHBhcnNlX2FyZ3ZfZHluYW1pYyB+Y3VycmVudDpjdXJyZW50IGFyZ3YgKHJlZiBzcGVjbGlzdCkgYW5vbmZ1biBlcnJtc2dcblxuXG5sZXQgcGFyc2UgbCBmIG1zZyA9XG4gIHRyeVxuICAgIHBhcnNlX2FyZ3YgU3lzLmFyZ3YgbCBmIG1zZ1xuICB3aXRoXG4gIHwgQmFkIG1zZyAtPiBlcHJpbnRmIFwiJXNcIiBtc2c7IGV4aXQgMlxuICB8IEhlbHAgbXNnIC0+IHByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDBcblxuXG5sZXQgcGFyc2VfZHluYW1pYyBsIGYgbXNnID1cbiAgdHJ5XG4gICAgcGFyc2VfYXJndl9keW5hbWljIFN5cy5hcmd2IGwgZiBtc2dcbiAgd2l0aFxuICB8IEJhZCBtc2cgLT4gZXByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDJcbiAgfCBIZWxwIG1zZyAtPiBwcmludGYgXCIlc1wiIG1zZzsgZXhpdCAwXG5cbmxldCBwYXJzZV9leHBhbmQgbCBmIG1zZyA9XG4gIHRyeVxuICAgIGxldCBhcmd2ID0gcmVmIFN5cy5hcmd2IGluXG4gICAgbGV0IHNwZWMgPSByZWYgbCBpblxuICAgIGxldCBjdXJyZW50ID0gcmVmICghY3VycmVudCkgaW5cbiAgICBwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pYyBjdXJyZW50IGFyZ3Ygc3BlYyBmIG1zZ1xuICB3aXRoXG4gIHwgQmFkIG1zZyAtPiBlcHJpbnRmIFwiJXNcIiBtc2c7IGV4aXQgMlxuICB8IEhlbHAgbXNnIC0+IHByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDBcblxuXG5sZXQgc2Vjb25kX3dvcmQgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIG4gPVxuICAgIGlmIG4gPj0gbGVuIHRoZW4gbGVuXG4gICAgZWxzZSBpZiBzLltuXSA9ICcgJyB0aGVuIGxvb3AgKG4rMSlcbiAgICBlbHNlIG5cbiAgaW5cbiAgbWF0Y2ggU3RyaW5nLmluZGV4IHMgJ1xcdCcgd2l0aFxuICB8IG4gLT4gbG9vcCAobisxKVxuICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT5cbiAgICAgIGJlZ2luIG1hdGNoIFN0cmluZy5pbmRleCBzICcgJyB3aXRoXG4gICAgICB8IG4gLT4gbG9vcCAobisxKVxuICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGxlblxuICAgICAgZW5kXG5cblxubGV0IG1heF9hcmdfbGVuIGN1ciAoa3dkLCBzcGVjLCBkb2MpID1cbiAgbWF0Y2ggc3BlYyB3aXRoXG4gIHwgU3ltYm9sIF8gLT4gbWF4IGN1ciAoU3RyaW5nLmxlbmd0aCBrd2QpXG4gIHwgXyAtPiBtYXggY3VyIChTdHJpbmcubGVuZ3RoIGt3ZCArIHNlY29uZF93b3JkIGRvYylcblxuXG5sZXQgcmVwbGFjZV9sZWFkaW5nX3RhYiBzID1cbiAgbGV0IHNlZW4gPSByZWYgZmFsc2UgaW5cbiAgU3RyaW5nLm1hcCAoZnVuY3Rpb24gJ1xcdCcgd2hlbiBub3QgIXNlZW4gLT4gc2VlbiA6PSB0cnVlOyAnICcgfCBjIC0+IGMpIHNcblxubGV0IGFkZF9wYWRkaW5nIGxlbiBrc2QgPVxuICBtYXRjaCBrc2Qgd2l0aFxuICB8IChfLCBfLCBcIlwiKSAtPlxuICAgICAgKCogRG8gbm90IHBhZCB1bmRvY3VtZW50ZWQgb3B0aW9ucywgc28gdGhhdCB0aGV5IHN0aWxsIGRvbid0IHNob3cgdXAgd2hlblxuICAgICAgICogcnVuIHRocm91Z2ggW3VzYWdlXSBvciBbcGFyc2VdLiAqKVxuICAgICAga3NkXG4gIHwgKGt3ZCwgKFN5bWJvbCBfIGFzIHNwZWMpLCBtc2cpIC0+XG4gICAgICBsZXQgY3V0Y29sID0gc2Vjb25kX3dvcmQgbXNnIGluXG4gICAgICBsZXQgc3BhY2VzID0gU3RyaW5nLm1ha2UgKChtYXggMCAobGVuIC0gY3V0Y29sKSkgKyAzKSAnICcgaW5cbiAgICAgIChrd2QsIHNwZWMsIFwiXFxuXCIgXiBzcGFjZXMgXiByZXBsYWNlX2xlYWRpbmdfdGFiIG1zZylcbiAgfCAoa3dkLCBzcGVjLCBtc2cpIC0+XG4gICAgICBsZXQgY3V0Y29sID0gc2Vjb25kX3dvcmQgbXNnIGluXG4gICAgICBsZXQga3dkX2xlbiA9IFN0cmluZy5sZW5ndGgga3dkIGluXG4gICAgICBsZXQgZGlmZiA9IGxlbiAtIGt3ZF9sZW4gLSBjdXRjb2wgaW5cbiAgICAgIGlmIGRpZmYgPD0gMCB0aGVuXG4gICAgICAgIChrd2QsIHNwZWMsIHJlcGxhY2VfbGVhZGluZ190YWIgbXNnKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgc3BhY2VzID0gU3RyaW5nLm1ha2UgZGlmZiAnICcgaW5cbiAgICAgICAgbGV0IHByZWZpeCA9IFN0cmluZy5zdWIgKHJlcGxhY2VfbGVhZGluZ190YWIgbXNnKSAwIGN1dGNvbCBpblxuICAgICAgICBsZXQgc3VmZml4ID0gU3RyaW5nLnN1YiBtc2cgY3V0Y29sIChTdHJpbmcubGVuZ3RoIG1zZyAtIGN1dGNvbCkgaW5cbiAgICAgICAgKGt3ZCwgc3BlYywgcHJlZml4IF4gc3BhY2VzIF4gc3VmZml4KVxuXG5cbmxldCBhbGlnbiA/KGxpbWl0PW1heF9pbnQpIHNwZWNsaXN0ID1cbiAgbGV0IGNvbXBsZXRlZCA9IGFkZF9oZWxwIHNwZWNsaXN0IGluXG4gIGxldCBsZW4gPSBMaXN0LmZvbGRfbGVmdCBtYXhfYXJnX2xlbiAwIGNvbXBsZXRlZCBpblxuICBsZXQgbGVuID0gbWluIGxlbiBsaW1pdCBpblxuICBMaXN0Lm1hcCAoYWRkX3BhZGRpbmcgbGVuKSBjb21wbGV0ZWRcblxubGV0IHRyaW1fY3IgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgaWYgbGVuID4gMCAmJiBTdHJpbmcuZ2V0IHMgKGxlbiAtIDEpID0gJ1xccicgdGhlblxuICAgIFN0cmluZy5zdWIgcyAwIChsZW4gLSAxKVxuICBlbHNlXG4gICAgc1xuXG5sZXQgcmVhZF9hdXggdHJpbSBzZXAgZmlsZSA9XG4gIGxldCBpYyA9IG9wZW5faW5fYmluIGZpbGUgaW5cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjAwIGluXG4gIGxldCB3b3JkcyA9IHJlZiBbXSBpblxuICBsZXQgc3Rhc2ggKCkgPVxuICAgIGxldCB3b3JkID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICAgIGxldCB3b3JkID0gaWYgdHJpbSB0aGVuIHRyaW1fY3Igd29yZCBlbHNlIHdvcmQgaW5cbiAgICB3b3JkcyA6PSB3b3JkIDo6ICF3b3JkcztcbiAgICBCdWZmZXIuY2xlYXIgYnVmXG4gIGluXG4gIGJlZ2luXG4gICAgdHJ5IHdoaWxlIHRydWUgZG9cbiAgICAgICAgbGV0IGMgPSBpbnB1dF9jaGFyIGljIGluXG4gICAgICAgIGlmIGMgPSBzZXAgdGhlbiBzdGFzaCAoKSBlbHNlIEJ1ZmZlci5hZGRfY2hhciBidWYgY1xuICAgICAgZG9uZVxuICAgIHdpdGggRW5kX29mX2ZpbGUgLT4gKClcbiAgZW5kO1xuICBpZiBCdWZmZXIubGVuZ3RoIGJ1ZiA+IDAgdGhlbiBzdGFzaCAoKTtcbiAgY2xvc2VfaW4gaWM7XG4gIEFycmF5Lm9mX2xpc3QgKExpc3QucmV2ICF3b3JkcylcblxubGV0IHJlYWRfYXJnID0gcmVhZF9hdXggdHJ1ZSAnXFxuJ1xuXG5sZXQgcmVhZF9hcmcwID0gcmVhZF9hdXggZmFsc2UgJ1xceDAwJ1xuXG5sZXQgd3JpdGVfYXV4IHNlcCBmaWxlIGFyZ3MgPVxuICBsZXQgb2MgPSBvcGVuX291dF9iaW4gZmlsZSBpblxuICBBcnJheS5pdGVyIChmdW4gcyAtPiBmcHJpbnRmIG9jIFwiJXMlY1wiIHMgc2VwKSBhcmdzO1xuICBjbG9zZV9vdXQgb2NcblxubGV0IHdyaXRlX2FyZyA9IHdyaXRlX2F1eCAnXFxuJ1xuXG5sZXQgd3JpdGVfYXJnMCA9IHdyaXRlX2F1eCAnXFx4MDAnXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGlkIDogJ2EgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5sZXQgY29uc3QgYyBfID0gY1xubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgcHJvdGVjdCB+KGZpbmFsbHkgOiB1bml0IC0+IHVuaXQpIHdvcmsgPVxuICBsZXQgZmluYWxseV9ub19leG4gKCkgPVxuICAgIHRyeSBmaW5hbGx5ICgpIHdpdGggZSAtPlxuICAgICAgbGV0IGJ0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIChGaW5hbGx5X3JhaXNlZCBlKSBidFxuICBpblxuICBtYXRjaCB3b3JrICgpIHdpdGhcbiAgfCByZXN1bHQgLT4gZmluYWxseV9ub19leG4gKCkgOyByZXN1bHRcbiAgfCBleGNlcHRpb24gd29ya19leG4gLT5cbiAgICAgIGxldCB3b3JrX2J0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGZpbmFsbHlfbm9fZXhuICgpIDtcbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIHdvcmtfZXhuIHdvcmtfYnRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgSmFjcXVlcy1IZW5yaSBKb3VyZGFuLCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUGFyaXMgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYtMjAxNiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlICAgKilcbigqICAgICBldCBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSBzdGF0ID0ge1xuICBtaW5vcl93b3JkcyA6IGZsb2F0O1xuICBwcm9tb3RlZF93b3JkcyA6IGZsb2F0O1xuICBtYWpvcl93b3JkcyA6IGZsb2F0O1xuICBtaW5vcl9jb2xsZWN0aW9ucyA6IGludDtcbiAgbWFqb3JfY29sbGVjdGlvbnMgOiBpbnQ7XG4gIGhlYXBfd29yZHMgOiBpbnQ7XG4gIGhlYXBfY2h1bmtzIDogaW50O1xuICBsaXZlX3dvcmRzIDogaW50O1xuICBsaXZlX2Jsb2NrcyA6IGludDtcbiAgZnJlZV93b3JkcyA6IGludDtcbiAgZnJlZV9ibG9ja3MgOiBpbnQ7XG4gIGxhcmdlc3RfZnJlZSA6IGludDtcbiAgZnJhZ21lbnRzIDogaW50O1xuICBjb21wYWN0aW9ucyA6IGludDtcbiAgdG9wX2hlYXBfd29yZHMgOiBpbnQ7XG4gIHN0YWNrX3NpemUgOiBpbnQ7XG59XG5cbnR5cGUgY29udHJvbCA9IHtcbiAgbXV0YWJsZSBtaW5vcl9oZWFwX3NpemUgOiBpbnQ7XG4gIG11dGFibGUgbWFqb3JfaGVhcF9pbmNyZW1lbnQgOiBpbnQ7XG4gIG11dGFibGUgc3BhY2Vfb3ZlcmhlYWQgOiBpbnQ7XG4gIG11dGFibGUgdmVyYm9zZSA6IGludDtcbiAgbXV0YWJsZSBtYXhfb3ZlcmhlYWQgOiBpbnQ7XG4gIG11dGFibGUgc3RhY2tfbGltaXQgOiBpbnQ7XG4gIG11dGFibGUgYWxsb2NhdGlvbl9wb2xpY3kgOiBpbnQ7XG4gIHdpbmRvd19zaXplIDogaW50O1xuICBjdXN0b21fbWFqb3JfcmF0aW8gOiBpbnQ7XG4gIGN1c3RvbV9taW5vcl9yYXRpbyA6IGludDtcbiAgY3VzdG9tX21pbm9yX21heF9zaXplIDogaW50O1xufVxuXG5leHRlcm5hbCBzdGF0IDogdW5pdCAtPiBzdGF0ID0gXCJjYW1sX2djX3N0YXRcIlxuZXh0ZXJuYWwgcXVpY2tfc3RhdCA6IHVuaXQgLT4gc3RhdCA9IFwiY2FtbF9nY19xdWlja19zdGF0XCJcbmV4dGVybmFsIGNvdW50ZXJzIDogdW5pdCAtPiAoZmxvYXQgKiBmbG9hdCAqIGZsb2F0KSA9IFwiY2FtbF9nY19jb3VudGVyc1wiXG5leHRlcm5hbCBtaW5vcl93b3JkcyA6IHVuaXQgLT4gKGZsb2F0IFtAdW5ib3hlZF0pXG4gID0gXCJjYW1sX2djX21pbm9yX3dvcmRzXCIgXCJjYW1sX2djX21pbm9yX3dvcmRzX3VuYm94ZWRcIlxuZXh0ZXJuYWwgZ2V0IDogdW5pdCAtPiBjb250cm9sID0gXCJjYW1sX2djX2dldFwiXG5leHRlcm5hbCBzZXQgOiBjb250cm9sIC0+IHVuaXQgPSBcImNhbWxfZ2Nfc2V0XCJcbmV4dGVybmFsIG1pbm9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21pbm9yXCJcbmV4dGVybmFsIG1ham9yX3NsaWNlIDogaW50IC0+IGludCA9IFwiY2FtbF9nY19tYWpvcl9zbGljZVwiXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBmdWxsX21ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX2Z1bGxfbWFqb3JcIlxuZXh0ZXJuYWwgY29tcGFjdCA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19jb21wYWN0aW9uXCJcbmV4dGVybmFsIGdldF9taW5vcl9mcmVlIDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2V0X21pbm9yX2ZyZWVcIlxuZXh0ZXJuYWwgZ2V0X2J1Y2tldCA6IGludCAtPiBpbnQgPSBcImNhbWxfZ2V0X21ham9yX2J1Y2tldFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBnZXRfY3JlZGl0IDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2V0X21ham9yX2NyZWRpdFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBodWdlX2ZhbGxiYWNrX2NvdW50IDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFwiXG5cbm9wZW4gUHJpbnRmXG5cbmxldCBwcmludF9zdGF0IGMgPVxuICBsZXQgc3QgPSBzdGF0ICgpIGluXG4gIGZwcmludGYgYyBcIm1pbm9yX2NvbGxlY3Rpb25zOiAlZFxcblwiIHN0Lm1pbm9yX2NvbGxlY3Rpb25zO1xuICBmcHJpbnRmIGMgXCJtYWpvcl9jb2xsZWN0aW9uczogJWRcXG5cIiBzdC5tYWpvcl9jb2xsZWN0aW9ucztcbiAgZnByaW50ZiBjIFwiY29tcGFjdGlvbnM6ICAgICAgICVkXFxuXCIgc3QuY29tcGFjdGlvbnM7XG4gIGZwcmludGYgYyBcIlxcblwiO1xuICBsZXQgbDEgPSBTdHJpbmcubGVuZ3RoIChzcHJpbnRmIFwiJS4wZlwiIHN0Lm1pbm9yX3dvcmRzKSBpblxuICBmcHJpbnRmIGMgXCJtaW5vcl93b3JkczogICAgJSouMGZcXG5cIiBsMSBzdC5taW5vcl93b3JkcztcbiAgZnByaW50ZiBjIFwicHJvbW90ZWRfd29yZHM6ICUqLjBmXFxuXCIgbDEgc3QucHJvbW90ZWRfd29yZHM7XG4gIGZwcmludGYgYyBcIm1ham9yX3dvcmRzOiAgICAlKi4wZlxcblwiIGwxIHN0Lm1ham9yX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJcXG5cIjtcbiAgbGV0IGwyID0gU3RyaW5nLmxlbmd0aCAoc3ByaW50ZiBcIiVkXCIgc3QudG9wX2hlYXBfd29yZHMpIGluXG4gIGZwcmludGYgYyBcInRvcF9oZWFwX3dvcmRzOiAlKmRcXG5cIiBsMiBzdC50b3BfaGVhcF93b3JkcztcbiAgZnByaW50ZiBjIFwiaGVhcF93b3JkczogICAgICUqZFxcblwiIGwyIHN0LmhlYXBfd29yZHM7XG4gIGZwcmludGYgYyBcImxpdmVfd29yZHM6ICAgICAlKmRcXG5cIiBsMiBzdC5saXZlX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJmcmVlX3dvcmRzOiAgICAgJSpkXFxuXCIgbDIgc3QuZnJlZV93b3JkcztcbiAgZnByaW50ZiBjIFwibGFyZ2VzdF9mcmVlOiAgICUqZFxcblwiIGwyIHN0Lmxhcmdlc3RfZnJlZTtcbiAgZnByaW50ZiBjIFwiZnJhZ21lbnRzOiAgICAgICUqZFxcblwiIGwyIHN0LmZyYWdtZW50cztcbiAgZnByaW50ZiBjIFwiXFxuXCI7XG4gIGZwcmludGYgYyBcImxpdmVfYmxvY2tzOiAlZFxcblwiIHN0LmxpdmVfYmxvY2tzO1xuICBmcHJpbnRmIGMgXCJmcmVlX2Jsb2NrczogJWRcXG5cIiBzdC5mcmVlX2Jsb2NrcztcbiAgZnByaW50ZiBjIFwiaGVhcF9jaHVua3M6ICVkXFxuXCIgc3QuaGVhcF9jaHVua3NcblxuXG5sZXQgYWxsb2NhdGVkX2J5dGVzICgpID1cbiAgbGV0IChtaSwgcHJvLCBtYSkgPSBjb3VudGVycyAoKSBpblxuICAobWkgKy4gbWEgLS4gcHJvKSAqLiBmbG9hdF9vZl9pbnQgKFN5cy53b3JkX3NpemUgLyA4KVxuXG5cbmV4dGVybmFsIGZpbmFsaXNlIDogKCdhIC0+IHVuaXQpIC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfZmluYWxfcmVnaXN0ZXJcIlxuZXh0ZXJuYWwgZmluYWxpc2VfbGFzdCA6ICh1bml0IC0+IHVuaXQpIC0+ICdhIC0+IHVuaXQgPVxuICBcImNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWVcIlxuZXh0ZXJuYWwgZmluYWxpc2VfcmVsZWFzZSA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9maW5hbF9yZWxlYXNlXCJcblxuXG50eXBlIGFsYXJtID0gYm9vbCByZWZcbnR5cGUgYWxhcm1fcmVjID0ge2FjdGl2ZSA6IGFsYXJtOyBmIDogdW5pdCAtPiB1bml0fVxuXG5sZXQgcmVjIGNhbGxfYWxhcm0gYXJlYyA9XG4gIGlmICEoYXJlYy5hY3RpdmUpIHRoZW4gYmVnaW5cbiAgICBmaW5hbGlzZSBjYWxsX2FsYXJtIGFyZWM7XG4gICAgYXJlYy5mICgpO1xuICBlbmRcblxuXG5sZXQgY3JlYXRlX2FsYXJtIGYgPVxuICBsZXQgYXJlYyA9IHsgYWN0aXZlID0gcmVmIHRydWU7IGYgPSBmIH0gaW5cbiAgZmluYWxpc2UgY2FsbF9hbGFybSBhcmVjO1xuICBhcmVjLmFjdGl2ZVxuXG5cbmxldCBkZWxldGVfYWxhcm0gYSA9IGEgOj0gZmFsc2VcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTWVzc2FnZSBkaWdlc3QgKE1ENSkgKilcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlID0gU3RyaW5nLmNvbXBhcmVcbmxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG5leHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9zdHJpbmdcIlxuZXh0ZXJuYWwgY2hhbm5lbDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfY2hhblwiXG5cbmxldCBzdHJpbmcgc3RyID1cbiAgdW5zYWZlX3N0cmluZyBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbmxldCBieXRlcyBiID0gc3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpXG5cbmxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gU3RyaW5nLmxlbmd0aCBzdHIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9zdHJpbmcgc3RyIG9mcyBsZW5cblxubGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9IHN1YnN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKSBvZnMgbGVuXG5cbmxldCBmaWxlIGZpbGVuYW1lID1cbiAgbGV0IGljID0gb3Blbl9pbl9iaW4gZmlsZW5hbWUgaW5cbiAgbWF0Y2ggY2hhbm5lbCBpYyAoLTEpIHdpdGhcbiAgICB8IGQgLT4gY2xvc2VfaW4gaWM7IGRcbiAgICB8IGV4Y2VwdGlvbiBlIC0+IGNsb3NlX2luIGljOyByYWlzZSBlXG5cbmxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPVxuICBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbmxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIDE2XG5cbmxldCBjaGFyX2hleCBuID1cbiAgQ2hhci51bnNhZmVfY2hyIChuICsgaWYgbiA8IDEwIHRoZW4gQ2hhci5jb2RlICcwJyBlbHNlIChDaGFyLmNvZGUgJ2EnIC0gMTApKVxuXG5sZXQgdG9faGV4IGQgPVxuICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gMTYgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAzMiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBsZXQgeCA9IENoYXIuY29kZSBkLltpXSBpblxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIpIChjaGFyX2hleCAoeCBsc3IgNCkpO1xuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIrMSkgKGNoYXJfaGV4ICh4IGxhbmQgMHgwZikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuXG5sZXQgZnJvbV9oZXggcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA8PiAzMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LmZyb21faGV4XCI7XG4gIGxldCBkaWdpdCBjID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICcwJy4uJzknIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJ1xuICAgIHwgJ0EnLi4nRicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ0EnICsgMTBcbiAgICB8ICdhJy4uJ2YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdhJyArIDEwXG4gICAgfCBfIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRGlnZXN0LmZyb21faGV4XCIpXG4gIGluXG4gIGxldCBieXRlIGkgPSBkaWdpdCBzLltpXSBsc2wgNCArIGRpZ2l0IHMuW2krMV0gaW5cbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAxNiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBCeXRlcy5zZXQgcmVzdWx0IGkgKENoYXIuY2hyIChieXRlICgyICogaSkpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICBUaGlzIGlzIGEgbGFnZ2VkLUZpYm9uYWNjaSBGKDU1LCAyNCwgKykgd2l0aCBhIG1vZGlmaWVkIGFkZGl0aW9uXG4gICBmdW5jdGlvbiB0byBlbmhhbmNlIHRoZSBtaXhpbmcgb2YgYml0cy5cbiAgIElmIHdlIHVzZSBub3JtYWwgYWRkaXRpb24sIHRoZSBsb3ctb3JkZXIgYml0IGZhaWxzIHRlc3RzIDEgYW5kIDdcbiAgIG9mIHRoZSBEaWVoYXJkIHRlc3Qgc3VpdGUsIGFuZCBiaXRzIDEgYW5kIDIgYWxzbyBmYWlsIHRlc3QgNy5cbiAgIElmIHdlIHVzZSBtdWx0aXBsaWNhdGlvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyc2FnbGlhLCBpdCBkb2Vzbid0IGZhcmVcbiAgIG11Y2ggYmV0dGVyLlxuICAgQnkgbWl4aW5nIHRoZSBiaXRzIG9mIG9uZSBvZiB0aGUgbnVtYmVycyBiZWZvcmUgYWRkaXRpb24gKFhPUiB0aGVcbiAgIDUgaGlnaC1vcmRlciBiaXRzIGludG8gdGhlIGxvdy1vcmRlciBiaXRzKSwgd2UgZ2V0IGEgZ2VuZXJhdG9yIHRoYXRcbiAgIHBhc3NlcyBhbGwgdGhlIERpZWhhcmQgdGVzdHMuXG4qKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgdHlwZSB0ID0geyBzdCA6IGludCBhcnJheTsgbXV0YWJsZSBpZHggOiBpbnQgfVxuXG4gIGxldCBuZXdfc3RhdGUgKCkgPSB7IHN0ID0gQXJyYXkubWFrZSA1NSAwOyBpZHggPSAwIH1cbiAgbGV0IGFzc2lnbiBzdDEgc3QyID1cbiAgICBBcnJheS5ibGl0IHN0Mi5zdCAwIHN0MS5zdCAwIDU1O1xuICAgIHN0MS5pZHggPC0gc3QyLmlkeFxuXG5cbiAgbGV0IGZ1bGxfaW5pdCBzIHNlZWQgPVxuICAgIGxldCBjb21iaW5lIGFjY3UgeCA9IERpZ2VzdC5zdHJpbmcgKGFjY3UgXiBJbnQudG9fc3RyaW5nIHgpIGluXG4gICAgbGV0IGV4dHJhY3QgZCA9XG4gICAgICBDaGFyLmNvZGUgZC5bMF0gKyAoQ2hhci5jb2RlIGQuWzFdIGxzbCA4KSArIChDaGFyLmNvZGUgZC5bMl0gbHNsIDE2KVxuICAgICAgKyAoQ2hhci5jb2RlIGQuWzNdIGxzbCAyNClcbiAgICBpblxuICAgIGxldCBzZWVkID0gaWYgQXJyYXkubGVuZ3RoIHNlZWQgPSAwIHRoZW4gW3wgMCB8XSBlbHNlIHNlZWQgaW5cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0IGRvXG4gICAgICBzLnN0LihpKSA8LSBpO1xuICAgIGRvbmU7XG4gICAgbGV0IGFjY3UgPSByZWYgXCJ4XCIgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgKyBtYXggNTUgbCBkb1xuICAgICAgbGV0IGogPSBpIG1vZCA1NSBpblxuICAgICAgbGV0IGsgPSBpIG1vZCBsIGluXG4gICAgICBhY2N1IDo9IGNvbWJpbmUgIWFjY3Ugc2VlZC4oayk7XG4gICAgICBzLnN0LihqKSA8LSAocy5zdC4oaikgbHhvciBleHRyYWN0ICFhY2N1KSBsYW5kIDB4M0ZGRkZGRkY7ICAoKiBQUiM1NTc1ICopXG4gICAgZG9uZTtcbiAgICBzLmlkeCA8LSAwXG5cblxuICBsZXQgbWFrZSBzZWVkID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgZnVsbF9pbml0IHJlc3VsdCBzZWVkO1xuICAgIHJlc3VsdFxuXG5cbiAgbGV0IG1ha2Vfc2VsZl9pbml0ICgpID0gbWFrZSAocmFuZG9tX3NlZWQgKCkpXG5cbiAgbGV0IGNvcHkgcyA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGFzc2lnbiByZXN1bHQgcztcbiAgICByZXN1bHRcblxuXG4gICgqIFJldHVybnMgMzAgcmFuZG9tIGJpdHMgYXMgYW4gaW50ZWdlciAwIDw9IHggPCAxMDczNzQxODI0ICopXG4gIGxldCBiaXRzIHMgPVxuICAgIHMuaWR4IDwtIChzLmlkeCArIDEpIG1vZCA1NTtcbiAgICBsZXQgY3VydmFsID0gcy5zdC4ocy5pZHgpIGluXG4gICAgbGV0IG5ld3ZhbCA9IHMuc3QuKChzLmlkeCArIDI0KSBtb2QgNTUpXG4gICAgICAgICAgICAgICAgICsgKGN1cnZhbCBseG9yICgoY3VydmFsIGxzciAyNSkgbGFuZCAweDFGKSkgaW5cbiAgICBsZXQgbmV3dmFsMzAgPSBuZXd2YWwgbGFuZCAweDNGRkZGRkZGIGluICAoKiBQUiM1NTc1ICopXG4gICAgcy5zdC4ocy5pZHgpIDwtIG5ld3ZhbDMwO1xuICAgIG5ld3ZhbDMwXG5cblxuICBsZXQgcmVjIGludGF1eCBzIG4gPVxuICAgIGxldCByID0gYml0cyBzIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiAweDNGRkZGRkZGIC0gbiArIDEgdGhlbiBpbnRhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBpbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPiAweDNGRkZGRkZGIHx8IGJvdW5kIDw9IDBcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludFwiXG4gICAgZWxzZSBpbnRhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQzMmF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDMyLm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDMyLnNoaWZ0X2xlZnQgKEludDMyLm9mX2ludCAoYml0cyBzIGxhbmQgMSkpIDMwIGluXG4gICAgbGV0IHIgPSBJbnQzMi5sb2dvciBiMSBiMiBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgIGlmIEludDMyLnN1YiByIHYgPiBJbnQzMi5hZGQgKEludDMyLnN1YiBJbnQzMi5tYXhfaW50IG4pIDFsXG4gICAgdGhlbiBpbnQzMmF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50MzIgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDMyXCJcbiAgICBlbHNlIGludDMyYXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQ2NC5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcykpIDMwIGluXG4gICAgbGV0IGIzID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMgbGFuZCA3KSkgNjAgaW5cbiAgICBsZXQgciA9IEludDY0LmxvZ29yIGIxIChJbnQ2NC5sb2dvciBiMiBiMykgaW5cbiAgICBsZXQgdiA9IEludDY0LnJlbSByIG4gaW5cbiAgICBpZiBJbnQ2NC5zdWIgciB2ID4gSW50NjQuYWRkIChJbnQ2NC5zdWIgSW50NjQubWF4X2ludCBuKSAxTFxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cblxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cblxuICAoKiBSZXR1cm5zIGEgZmxvYXQgMCA8PSB4IDw9IDEgd2l0aCBhdCBtb3N0IDYwIGJpdHMgb2YgcHJlY2lzaW9uLiAqKVxuICBsZXQgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IHNjYWxlID0gMTA3Mzc0MTgyNC4wICAoKiAyXjMwICopXG4gICAgYW5kIHIxID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgYW5kIHIyID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgaW4gKHIxIC8uIHNjYWxlICsuIHIyKSAvLiBzY2FsZVxuXG5cbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgbGV0IGJvb2wgcyA9IChiaXRzIHMgbGFuZCAxID0gMClcblxuZW5kXG5cbigqIFRoaXMgaXMgdGhlIHN0YXRlIHlvdSBnZXQgd2l0aCBbaW5pdCAyNzE4MjgxOF0gYW5kIHRoZW4gYXBwbHlpbmdcbiAgIHRoZSBcImxhbmQgMHgzRkZGRkZGRlwiIGZpbHRlciB0byB0aGVtLiAgU2VlICM1NTc1LCAjNTc5MywgIzU5NzcuICopXG5sZXQgZGVmYXVsdCA9IHtcbiAgU3RhdGUuc3QgPSBbfFxuICAgICAgMHgzYWUyNTIyYjsgMHgxZDhkNDYzNDsgMHgxNWI0ZmFkMDsgMHgxOGIxNGFjZTsgMHgxMmY4YTNjNDsgMHgzYjA4NmM0NztcbiAgICAgIDB4MTZkNDY3ZDY7IDB4MTAxZDkxYzc7IDB4MzIxZGYxNzc7IDB4MDE3NmMxOTM7IDB4MWZmNzJiZjE7IDB4MWU4ODkxMDk7XG4gICAgICAweDBiNDY0YjE4OyAweDJiODZiOTdjOyAweDA4OTFkYTQ4OyAweDAzMTM3NDYzOyAweDA4NWFjNWExOyAweDE1ZDYxZjJmO1xuICAgICAgMHgzYmNlZDM1OTsgMHgyOWMxYzEzMjsgMHgzYTg2NzY2ZTsgMHgzNjZkOGM4NjsgMHgxZjViNjIyMjsgMHgzY2UxYjU5ZjtcbiAgICAgIDB4MmViZjc4ZTE7IDB4MjdjZDFiODY7IDB4MjU4ZjNkYzM7IDB4Mzg5YTgxOTQ7IDB4MDJlNGM0NGM7IDB4MThjNDNmN2Q7XG4gICAgICAweDBmNmU1MzRmOyAweDFlN2RmMzU5OyAweDA1NWQwYjdlOyAweDEwZTg0ZTdlOyAweDEyNjE5OGU0OyAweDBlNzcyMmNiO1xuICAgICAgMHgxY2JlZGUyODsgMHgzMzkxYjk2NDsgMHgzZDQwZTkyYTsgMHgwYzU5OTMzZDsgMHgwYjhjZDBiNzsgMHgyNGVmZmYxYztcbiAgICAgIDB4MjgwM2ZkYWE7IDB4MDhlYmM3MmU7IDB4MGY1MjJlMzI7IDB4MDUzOThlZGM7IDB4MjE0NGEwNGM7IDB4MGFlZjNjYmQ7XG4gICAgICAweDAxYWQ0NzE5OyAweDM1YjkzY2Q2OyAweDJhNTU5ZDRmOyAweDFlNmZkNzY4OyAweDI2ZTI3ZjM2OyAweDE4NmYxOGMzO1xuICAgICAgMHgyZmJmOTY3YTtcbiAgICB8XTtcbiAgU3RhdGUuaWR4ID0gMDtcbn1cblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIGRlZmF1bHRcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgZGVmYXVsdCBib3VuZFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCBkZWZhdWx0IGJvdW5kXG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCBkZWZhdWx0IHNjYWxlXG5sZXQgYm9vbCAoKSA9IFN0YXRlLmJvb2wgZGVmYXVsdFxuXG5sZXQgZnVsbF9pbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBzZWVkXG5sZXQgaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgW3wgc2VlZCB8XVxubGV0IHNlbGZfaW5pdCAoKSA9IGZ1bGxfaW5pdCAocmFuZG9tX3NlZWQoKSlcblxuKCogTWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IHN0YXRlLiAqKVxuXG5sZXQgZ2V0X3N0YXRlICgpID0gU3RhdGUuY29weSBkZWZhdWx0XG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gZGVmYXVsdCBzXG5cbigqKioqKioqKioqKioqKioqKioqKlxuXG4oKiBUZXN0IGZ1bmN0aW9ucy4gIE5vdCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeS5cbiAgIFRoZSBbY2hpc3F1YXJlXSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggbiA+IDEwci5cbiAgIEl0IHJldHVybnMgYSB0cmlwbGUgKGxvdywgYWN0dWFsLCBoaWdoKS5cbiAgIElmIGxvdyA8PSBhY3R1YWwgPD0gaGlnaCwgdGhlIFtnXSBmdW5jdGlvbiBwYXNzZWQgdGhlIHRlc3QsXG4gICBvdGhlcndpc2UgaXQgZmFpbGVkLlxuXG4gIFNvbWUgcmVzdWx0czpcblxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCA1MDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyOTk3OTI2NDM7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMTQxNDIxMzY7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDI0OyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDI0OyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAxNDE0MjEzNjsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDI5OTc5MjY0MzsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG4tIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk5Ny41LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODkuNzQwMDAwMDAwMDA1MjM4NywgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg0ODU4LjU3ODY0Mzc2MjY5LCA1MDQ1LjUsIDUxNDEuNDIxMzU2MjM3MzEpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPVxuKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk0NC44MDU5OTk5OTk5ODIzMDUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAxOS4xOTc0NDAwMDAwMDM1NSwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1OS4zMTc3NjAwMDAwMDUzNiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAzOS45ODQ2Mzk5OTk5OTUxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1NC4zODIwNzk5OTk5OTU3NywgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA5MC4wOTYwMDAwMDAwMDUsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA3Ni43ODcyMDAwMDAwMDYxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4xNzYwMDAwMDAwMDY3NTIxLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMjE2MDAwMDAwMDAwMzQ5MiwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDgwLjYyMjAwMDAwMDAwMzAyNjgsIDEyMC4pXG5cbiopXG5cbigqIFJldHVybiB0aGUgc3VtIG9mIHRoZSBzcXVhcmVzIG9mIHZbaTAsaTFbICopXG5sZXQgcmVjIHN1bXNxIHYgaTAgaTEgPVxuICBpZiBpMCA+PSBpMSB0aGVuIDAuMFxuICBlbHNlIGlmIGkxID0gaTAgKyAxIHRoZW4gU3RkbGliLmZsb2F0IHYuKGkwKSAqLiBTdGRsaWIuZmxvYXQgdi4oaTApXG4gIGVsc2Ugc3Vtc3EgdiBpMCAoKGkwK2kxKS8yKSArLiBzdW1zcSB2ICgoaTAraTEpLzIpIGkxXG5cblxubGV0IGNoaXNxdWFyZSBnIG4gciA9XG4gIGlmIG4gPD0gMTAgKiByIHRoZW4gaW52YWxpZF9hcmcgXCJjaGlzcXVhcmVcIjtcbiAgbGV0IGYgPSBBcnJheS5tYWtlIHIgMCBpblxuICBmb3IgaSA9IDEgdG8gbiBkb1xuICAgIGxldCB0ID0gZyByIGluXG4gICAgZi4odCkgPC0gZi4odCkgKyAxXG4gIGRvbmU7XG4gIGxldCB0ID0gc3Vtc3EgZiAwIHJcbiAgYW5kIHIgPSBTdGRsaWIuZmxvYXQgclxuICBhbmQgbiA9IFN0ZGxpYi5mbG9hdCBuIGluXG4gIGxldCBzciA9IDIuMCAqLiBzcXJ0IHIgaW5cbiAgKHIgLS4gc3IsICAgKHIgKi4gdCAvLiBuKSAtLiBuLCAgIHIgKy4gc3IpXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBsaW5lYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb20gbnVtYmVycy5cbiopXG5sZXQgc3QgPSByZWYgMFxubGV0IGluaXRfZGlmZiByID0gc3QgOj0gaW50IHJcbmxldCBkaWZmIHIgPVxuICBsZXQgeDEgPSAhc3RcbiAgYW5kIHgyID0gaW50IHJcbiAgaW5cbiAgc3QgOj0geDI7XG4gIGlmIHgxID49IHgyIHRoZW5cbiAgICB4MSAtIHgyXG4gIGVsc2VcbiAgICByICsgeDEgLSB4MlxuXG5cbmxldCBzdDEgPSByZWYgMFxuYW5kIHN0MiA9IHJlZiAwXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBxdWFkcmF0aWMgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb21cbiAgIG51bWJlcnMuXG4qKVxubGV0IGluaXRfZGlmZjIgciA9IHN0MSA6PSBpbnQgcjsgc3QyIDo9IGludCByXG5sZXQgZGlmZjIgciA9XG4gIGxldCB4MSA9ICFzdDFcbiAgYW5kIHgyID0gIXN0MlxuICBhbmQgeDMgPSBpbnQgclxuICBpblxuICBzdDEgOj0geDI7XG4gIHN0MiA6PSB4MztcbiAgKHgzIC0geDIgLSB4MiArIHgxICsgMipyKSBtb2QgclxuXG5cbioqKioqKioqKioqKioqKioqKioqKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIGJ1Y2tldHMgYmVjb21lIHRvbyBsb25nLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBtdXRhYmxlIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zaXplOiBpbnQ7ICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICB9XG5cbmFuZCAoJ2EsICdiKSBidWNrZXRsaXN0ID1cbiAgICBFbXB0eVxuICB8IENvbnMgb2YgeyBtdXRhYmxlIGtleTogJ2E7XG4gICAgICAgICAgICAgIG11dGFibGUgZGF0YTogJ2I7XG4gICAgICAgICAgICAgIG11dGFibGUgbmV4dDogKCdhLCAnYikgYnVja2V0bGlzdCB9XG5cbigqIFRoZSBzaWduIG9mIGluaXRpYWxfc2l6ZSBlbmNvZGVzIHRoZSBmYWN0IHRoYXQgYSB0cmF2ZXJzYWwgaXNcbiAgIG9uZ29pbmcgb3Igbm90LlxuXG4gICBUaGlzIGRpc2FibGVzIHRoZSBlZmZpY2llbnQgaW4gcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgcmVzaXppbmcuXG4qKVxuXG5sZXQgb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICB8fCBoLmluaXRpYWxfc2l6ZSA8IDBcblxubGV0IGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIGguaW5pdGlhbF9zaXplIDwtIC0gaC5pbml0aWFsX3NpemVcblxuKCogVG8gcGljayByYW5kb20gc2VlZHMgaWYgcmVxdWVzdGVkICopXG5cbmxldCByYW5kb21pemVkX2RlZmF1bHQgPVxuICBsZXQgcGFyYW1zID1cbiAgICB0cnkgU3lzLmdldGVudiBcIk9DQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICBTdHJpbmcuY29udGFpbnMgcGFyYW1zICdSJ1xuXG5sZXQgcmFuZG9taXplZCA9IHJlZiByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IHJhbmRvbWl6ZWQgOj0gdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSAhcmFuZG9taXplZFxuXG5sZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG5sZXQgY2xlYXIgaCA9XG4gIGlmIGguc2l6ZSA+IDAgdGhlbiBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIEFycmF5LmZpbGwgaC5kYXRhIDAgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIEVtcHR5XG4gIGVuZFxuXG5sZXQgcmVzZXQgaCA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICAgIHx8IGxlbiA9IGFicyBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgY2xlYXIgaFxuICBlbHNlIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgKGFicyBoLmluaXRpYWxfc2l6ZSkgRW1wdHlcbiAgZW5kXG5cbmxldCBjb3B5X2J1Y2tldGxpc3QgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IEVtcHR5XG4gIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgbGV0IHJlYyBsb29wIHByZWMgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8IENvbnMgcHJlYyAtPiAgcHJlYy5uZXh0IDwtIHJcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGxvb3AgciBuZXh0XG4gICAgICBpblxuICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICBsb29wIHIgbmV4dDtcbiAgICAgIHJcblxubGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5tYXAgY29weV9idWNrZXRsaXN0IGguZGF0YSB9XG5cbmxldCBsZW5ndGggaCA9IGguc2l6ZVxuXG5sZXQgcmVzaXplIGluZGV4ZnVuIGggPVxuICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgbGV0IG9zaXplID0gQXJyYXkubGVuZ3RoIG9kYXRhIGluXG4gIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICBpZiBuc2l6ZSA8IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IG5kYXRhX3RhaWwgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IGlucGxhY2UgPSBub3QgKG9uZ29pbmdfdHJhdmVyc2FsIGgpIGluXG4gICAgaC5kYXRhIDwtIG5kYXRhOyAgICAgICAgICAoKiBzbyB0aGF0IGluZGV4ZnVuIHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGFzIGNlbGwgLT5cbiAgICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgICBpZiBpbnBsYWNlIHRoZW4gY2VsbFxuICAgICAgICAgICAgZWxzZSBDb25zIHtrZXk7IGRhdGE7IG5leHQgPSBFbXB0eX1cbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBuaWR4ID0gaW5kZXhmdW4gaCBrZXkgaW5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBuZGF0YS4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gY2VsbDtcbiAgICAgICAgICBlbmQ7XG4gICAgICAgICAgbmRhdGFfdGFpbC4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgICBpbnNlcnRfYnVja2V0IG5leHRcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBvc2l6ZSAtIDEgZG9cbiAgICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBpbnBsYWNlIHRoZW5cbiAgICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggbmRhdGFfdGFpbC4oaSkgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgICAgZG9uZTtcbiAgZW5kXG5cbmxldCBpdGVyIGYgaCA9XG4gIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+XG4gICAgICAgICgpXG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZiBrZXkgZGF0YTsgZG9fYnVja2V0IG5leHQgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIEVtcHR5XG4gICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gRW1wdHlcbiAgICAgIGVuZFxuICB8IChDb25zICh7a2V5OyBkYXRhOyBuZXh0fSBhcyBjKSkgYXMgc2xvdCAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZiBrZXkgZGF0YSB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgbmV4dFxuICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gc2xvdFxuICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBzbG90XG4gICAgICAgICAgZW5kO1xuICAgICAgICAgIGMuZGF0YSA8LSBkYXRhO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgc2xvdCBuZXh0XG4gICAgICBlbmRcblxubGV0IGZpbHRlcl9tYXBfaW5wbGFjZSBmIGggPVxuICBsZXQgZCA9IGguZGF0YSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBFbXB0eSBoLmRhdGEuKGkpXG4gICAgZG9uZVxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IGZvbGQgZiBoIGluaXQgPVxuICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgIG1hdGNoIGIgd2l0aFxuICAgICAgRW1wdHkgLT5cbiAgICAgICAgYWNjdVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGRvX2J1Y2tldCBuZXh0IChmIGtleSBkYXRhIGFjY3UpIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGxldCBhY2N1ID0gcmVmIGluaXQgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgICFhY2N1XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG50eXBlIHN0YXRpc3RpY3MgPSB7XG4gIG51bV9iaW5kaW5nczogaW50O1xuICBudW1fYnVja2V0czogaW50O1xuICBtYXhfYnVja2V0X2xlbmd0aDogaW50O1xuICBidWNrZXRfaGlzdG9ncmFtOiBpbnQgYXJyYXlcbn1cblxubGV0IHJlYyBidWNrZXRfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFjY3VcbiAgfCBDb25ze25leHR9IC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSBuZXh0XG5cbmxldCBzdGF0cyBoID1cbiAgbGV0IG1ibCA9XG4gICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IG1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiBpbnQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgJ2EgdFxuICAgIHZhbCBjcmVhdGUgOiA/cmFuZG9tOmJvb2wgLT4gaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weSA6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZSA6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZCA6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGwgOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlciA6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkIDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGggOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZVNlZWRlZChIOiBTZWVkZWRIYXNoZWRUeXBlKTogKFNlZWRlZFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGtleSA9IEgudFxuICAgIHR5cGUgJ2EgaGFzaHRibCA9IChrZXksICdhKSB0XG4gICAgdHlwZSAnYSB0ID0gJ2EgaGFzaHRibFxuICAgIGxldCBjcmVhdGUgPSBjcmVhdGVcbiAgICBsZXQgY2xlYXIgPSBjbGVhclxuICAgIGxldCByZXNldCA9IHJlc2V0XG4gICAgbGV0IGNvcHkgPSBjb3B5XG5cbiAgICBsZXQga2V5X2luZGV4IGgga2V5ID1cbiAgICAgIChILmhhc2ggaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG5cbiAgICBsZXQgYWRkIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICAgICAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxuICAgIGxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICgpXG4gICAgICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBiZWdpblxuICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG4gICAgbGV0IHJlbW92ZSBoIGtleSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxuICAgIGxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbiAgICBsZXQgZmluZCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxuICAgIGxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxuICAgIGxldCBmaW5kX29wdCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbiAgICBsZXQgZmluZF9hbGwgaCBrZXkgPVxuICAgICAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgW11cbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YT1kOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGQgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbiAgICBsZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgICAgIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICAgICAgZW5kXG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgICAgICBILmVxdWFsIGsga2V5IHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCBhZGRfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxuICAgIGxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG5cbiAgICBsZXQgaXRlciA9IGl0ZXJcbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlID0gZmlsdGVyX21hcF9pbnBsYWNlXG4gICAgbGV0IGZvbGQgPSBmb2xkXG4gICAgbGV0IGxlbmd0aCA9IGxlbmd0aFxuICAgIGxldCBzdGF0cyA9IHN0YXRzXG4gICAgbGV0IHRvX3NlcSA9IHRvX3NlcVxuICAgIGxldCB0b19zZXFfa2V5cyA9IHRvX3NlcV9rZXlzXG4gICAgbGV0IHRvX3NlcV92YWx1ZXMgPSB0b19zZXFfdmFsdWVzXG4gIGVuZFxuXG5tb2R1bGUgTWFrZShIOiBIYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbigqIFBvbHltb3JwaGljIGhhc2ggZnVuY3Rpb24tYmFzZWQgdGFibGVzICopXG4oKiBDb2RlIGluY2x1ZGVkIGJlbG93IHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSB0byBndWFyZCBhZ2FpbnN0IGFjY2lkZW50YWxcbiAgIHVzZSAtIHNlZSAjMjIwMiAqKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIG9sZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaF91bml2X3BhcmFtXCIgW0BAbm9hbGxvY11cblxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbmxldCBoYXNoX3BhcmFtIG4xIG4yIHggPSBzZWVkZWRfaGFzaF9wYXJhbSBuMSBuMiAwIHhcbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5cbmxldCBrZXlfaW5kZXggaCBrZXkgPVxuICAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSAzXG4gIHRoZW4gKHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcbiAgZWxzZSAob2xkX2hhc2hfcGFyYW0gMTAgMTAwIGtleSkgbW9kIChBcnJheS5sZW5ndGggaC5kYXRhKVxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCoqIFdlYWsgYXJyYXkgb3BlcmF0aW9ucyAqKVxuXG50eXBlICdhIHRcblxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+ICdhIHQgPSBcImNhbWxfd2Vha19jcmVhdGVcIlxuXG5sZXQgY3JlYXRlIGwgPVxuICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IE9iai5FcGhlbWVyb24ubWF4X2VwaGVfbGVuZ3RoKSB0aGVuXG4gICAgaW52YWxpZF9hcmcoXCJXZWFrLmNyZWF0ZVwiKTtcbiAgY3JlYXRlIGxcblxuKCoqIG51bWJlciBvZiBhZGRpdGlvbmFsIHZhbHVlcyBpbiBhIHdlYWsgcG9pbnRlciAqKVxubGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuXG5sZXQgbGVuZ3RoIHggPSBPYmouc2l6ZShPYmoucmVwciB4KSAtIGFkZGl0aW9uYWxfdmFsdWVzXG5cbmxldCByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gbXNnID1cbiAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgaW52YWxpZF9hcmcobXNnKVxuXG5leHRlcm5hbCBzZXQnIDogJ2EgdCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9rZXlcIlxuZXh0ZXJuYWwgdW5zZXQgOiAnYSB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfdW5zZXRfa2V5XCJcbmxldCBzZXQgZSBvIHggPVxuICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJXZWFrLnNldFwiO1xuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IHVuc2V0IGUgb1xuICB8IFNvbWUgeCAtPiBzZXQnIGUgbyB4XG5cbmV4dGVybmFsIGdldCA6ICdhIHQgLT4gaW50IC0+ICdhIG9wdGlvbiA9IFwiY2FtbF93ZWFrX2dldFwiXG5sZXQgZ2V0IGUgbyA9XG4gIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIldlYWsuZ2V0XCI7XG4gIGdldCBlIG9cblxuZXh0ZXJuYWwgZ2V0X2NvcHkgOiAnYSB0IC0+IGludCAtPiAnYSBvcHRpb24gPSBcImNhbWxfd2Vha19nZXRfY29weVwiXG5sZXQgZ2V0X2NvcHkgZSBvID1cbiAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiV2Vhay5nZXRfY29weVwiO1xuICBnZXRfY29weSBlIG9cblxuZXh0ZXJuYWwgY2hlY2sgOiAnYSB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX3dlYWtfY2hlY2tcIlxubGV0IGNoZWNrIGUgbyA9XG4gIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIldlYWsuY2hlY2tcIjtcbiAgY2hlY2sgZSBvXG5cbmV4dGVybmFsIGJsaXQgOiAnYSB0IC0+IGludCAtPiAnYSB0IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF93ZWFrX2JsaXRcIlxuXG4oKiBibGl0OiBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuICopXG5sZXQgYmxpdCBlMSBvMSBlMiBvMiBsID1cbiAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICB8fCBvMiA8IDAgfHwgbzIgPiBsZW5ndGggZTIgLSBsXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJXZWFrLmJsaXRcIlxuICBlbHNlIGlmIGwgPD4gMCB0aGVuIGJsaXQgZTEgbzEgZTIgbzIgbFxuXG5sZXQgZmlsbCBhciBvZnMgbGVuIHggPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGFyIC0gbGVuXG4gIHRoZW4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJXZWFrLmZpbGxcIilcbiAgZWxzZSBiZWdpblxuICAgIGZvciBpID0gb2ZzIHRvIChvZnMgKyBsZW4gLSAxKSBkb1xuICAgICAgc2V0IGFyIGkgeFxuICAgIGRvbmVcbiAgZW5kXG5cblxuKCoqIFdlYWsgaGFzaCB0YWJsZXMgKilcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICB0eXBlIGRhdGFcbiAgdHlwZSB0XG4gIHZhbCBjcmVhdGUgOiBpbnQgLT4gdFxuICB2YWwgY2xlYXIgOiB0IC0+IHVuaXRcbiAgdmFsIG1lcmdlIDogdCAtPiBkYXRhIC0+IGRhdGFcbiAgdmFsIGFkZCA6IHQgLT4gZGF0YSAtPiB1bml0XG4gIHZhbCByZW1vdmUgOiB0IC0+IGRhdGEgLT4gdW5pdFxuICB2YWwgZmluZCA6IHQgLT4gZGF0YSAtPiBkYXRhXG4gIHZhbCBmaW5kX29wdCA6IHQgLT4gZGF0YSAtPiBkYXRhIG9wdGlvblxuICB2YWwgZmluZF9hbGwgOiB0IC0+IGRhdGEgLT4gZGF0YSBsaXN0XG4gIHZhbCBtZW0gOiB0IC0+IGRhdGEgLT4gYm9vbFxuICB2YWwgaXRlciA6IChkYXRhIC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICB2YWwgZm9sZCA6IChkYXRhIC0+ICdhIC0+ICdhKSAtPiB0IC0+ICdhIC0+ICdhXG4gIHZhbCBjb3VudCA6IHQgLT4gaW50XG4gIHZhbCBzdGF0cyA6IHQgLT4gaW50ICogaW50ICogaW50ICogaW50ICogaW50ICogaW50XG5lbmRcblxubW9kdWxlIE1ha2UgKEggOiBIYXNodGJsLkhhc2hlZFR5cGUpIDogKFMgd2l0aCB0eXBlIGRhdGEgPSBILnQpID0gc3RydWN0XG5cbiAgdHlwZSAnYSB3ZWFrX3QgPSAnYSB0XG4gIGxldCB3ZWFrX2NyZWF0ZSA9IGNyZWF0ZVxuICBsZXQgZW1wdHlidWNrZXQgPSB3ZWFrX2NyZWF0ZSAwXG5cbiAgdHlwZSBkYXRhID0gSC50XG5cbiAgdHlwZSB0ID0ge1xuICAgIG11dGFibGUgdGFibGUgOiBkYXRhIHdlYWtfdCBhcnJheTtcbiAgICBtdXRhYmxlIGhhc2hlcyA6IGludCBhcnJheSBhcnJheTtcbiAgICBtdXRhYmxlIGxpbWl0IDogaW50OyAgICAgICAgICAgICAgICgqIGJ1Y2tldCBzaXplIGxpbWl0ICopXG4gICAgbXV0YWJsZSBvdmVyc2l6ZSA6IGludDsgICAgICAgICAgICAoKiBudW1iZXIgb2Ygb3ZlcnNpemUgYnVja2V0cyAqKVxuICAgIG11dGFibGUgcm92ZXIgOiBpbnQ7ICAgICAgICAgICAgICAgKCogZm9yIGludGVybmFsIGJvb2trZWVwaW5nICopXG4gIH1cblxuICBsZXQgZ2V0X2luZGV4IHQgaCA9IChoIGxhbmQgbWF4X2ludCkgbW9kIChBcnJheS5sZW5ndGggdC50YWJsZSlcblxuICBsZXQgbGltaXQgPSA3XG4gIGxldCBvdmVyX2xpbWl0ID0gMlxuXG4gIGxldCBjcmVhdGUgc3ogPVxuICAgIGxldCBzeiA9IGlmIHN6IDwgNyB0aGVuIDcgZWxzZSBzeiBpblxuICAgIGxldCBzeiA9IGlmIHN6ID4gU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiBTeXMubWF4X2FycmF5X2xlbmd0aCBlbHNlIHN6IGluXG4gICAge1xuICAgICAgdGFibGUgPSBBcnJheS5tYWtlIHN6IGVtcHR5YnVja2V0O1xuICAgICAgaGFzaGVzID0gQXJyYXkubWFrZSBzeiBbfCB8XTtcbiAgICAgIGxpbWl0ID0gbGltaXQ7XG4gICAgICBvdmVyc2l6ZSA9IDA7XG4gICAgICByb3ZlciA9IDA7XG4gICAgfVxuXG4gIGxldCBjbGVhciB0ID1cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIHQudGFibGUgLSAxIGRvXG4gICAgICB0LnRhYmxlLihpKSA8LSBlbXB0eWJ1Y2tldDtcbiAgICAgIHQuaGFzaGVzLihpKSA8LSBbfCB8XTtcbiAgICBkb25lO1xuICAgIHQubGltaXQgPC0gbGltaXQ7XG4gICAgdC5vdmVyc2l6ZSA8LSAwXG5cblxuICBsZXQgZm9sZCBmIHQgaW5pdCA9XG4gICAgbGV0IHJlYyBmb2xkX2J1Y2tldCBpIGIgYWNjdSA9XG4gICAgICBpZiBpID49IGxlbmd0aCBiIHRoZW4gYWNjdSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IGZvbGRfYnVja2V0IChpKzEpIGIgKGYgdiBhY2N1KVxuICAgICAgfCBOb25lIC0+IGZvbGRfYnVja2V0IChpKzEpIGIgYWNjdVxuICAgIGluXG4gICAgQXJyYXkuZm9sZF9yaWdodCAoZm9sZF9idWNrZXQgMCkgdC50YWJsZSBpbml0XG5cblxuICBsZXQgaXRlciBmIHQgPVxuICAgIGxldCByZWMgaXRlcl9idWNrZXQgaSBiID1cbiAgICAgIGlmIGkgPj0gbGVuZ3RoIGIgdGhlbiAoKSBlbHNlXG4gICAgICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IGYgdjsgaXRlcl9idWNrZXQgKGkrMSkgYlxuICAgICAgfCBOb25lIC0+IGl0ZXJfYnVja2V0IChpKzEpIGJcbiAgICBpblxuICAgIEFycmF5Lml0ZXIgKGl0ZXJfYnVja2V0IDApIHQudGFibGVcblxuXG4gIGxldCBpdGVyX3dlYWsgZiB0ID1cbiAgICBsZXQgcmVjIGl0ZXJfYnVja2V0IGkgaiBiID1cbiAgICAgIGlmIGkgPj0gbGVuZ3RoIGIgdGhlbiAoKSBlbHNlXG4gICAgICBtYXRjaCBjaGVjayBiIGkgd2l0aFxuICAgICAgfCB0cnVlIC0+IGYgYiB0Lmhhc2hlcy4oaikgaTsgaXRlcl9idWNrZXQgKGkrMSkgaiBiXG4gICAgICB8IGZhbHNlIC0+IGl0ZXJfYnVja2V0IChpKzEpIGogYlxuICAgIGluXG4gICAgQXJyYXkuaXRlcmkgKGl0ZXJfYnVja2V0IDApIHQudGFibGVcblxuXG4gIGxldCByZWMgY291bnRfYnVja2V0IGkgYiBhY2N1ID1cbiAgICBpZiBpID49IGxlbmd0aCBiIHRoZW4gYWNjdSBlbHNlXG4gICAgY291bnRfYnVja2V0IChpKzEpIGIgKGFjY3UgKyAoaWYgY2hlY2sgYiBpIHRoZW4gMSBlbHNlIDApKVxuXG5cbiAgbGV0IGNvdW50IHQgPVxuICAgIEFycmF5LmZvbGRfcmlnaHQgKGNvdW50X2J1Y2tldCAwKSB0LnRhYmxlIDBcblxuXG4gIGxldCBuZXh0X3N6IG4gPSBtaW4gKDMgKiBuIC8gMiArIDMpIFN5cy5tYXhfYXJyYXlfbGVuZ3RoXG4gIGxldCBwcmV2X3N6IG4gPSAoKG4gLSAzKSAqIDIgKyAyKSAvIDNcblxuICBsZXQgdGVzdF9zaHJpbmtfYnVja2V0IHQgPVxuICAgIGxldCBidWNrZXQgPSB0LnRhYmxlLih0LnJvdmVyKSBpblxuICAgIGxldCBoYnVja2V0ID0gdC5oYXNoZXMuKHQucm92ZXIpIGluXG4gICAgbGV0IGxlbiA9IGxlbmd0aCBidWNrZXQgaW5cbiAgICBsZXQgcHJldl9sZW4gPSBwcmV2X3N6IGxlbiBpblxuICAgIGxldCBsaXZlID0gY291bnRfYnVja2V0IDAgYnVja2V0IDAgaW5cbiAgICBpZiBsaXZlIDw9IHByZXZfbGVuIHRoZW4gYmVnaW5cbiAgICAgIGxldCByZWMgbG9vcCBpIGogPVxuICAgICAgICBpZiBqID49IHByZXZfbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgICBpZiBjaGVjayBidWNrZXQgaSB0aGVuIGxvb3AgKGkgKyAxKSBqXG4gICAgICAgICAgZWxzZSBpZiBjaGVjayBidWNrZXQgaiB0aGVuIGJlZ2luXG4gICAgICAgICAgICBibGl0IGJ1Y2tldCBqIGJ1Y2tldCBpIDE7XG4gICAgICAgICAgICBoYnVja2V0LihpKSA8LSBoYnVja2V0LihqKTtcbiAgICAgICAgICAgIGxvb3AgKGkgKyAxKSAoaiAtIDEpO1xuICAgICAgICAgIGVuZCBlbHNlIGxvb3AgaSAoaiAtIDEpO1xuICAgICAgICBlbmQ7XG4gICAgICBpblxuICAgICAgbG9vcCAwIChsZW5ndGggYnVja2V0IC0gMSk7XG4gICAgICBpZiBwcmV2X2xlbiA9IDAgdGhlbiBiZWdpblxuICAgICAgICB0LnRhYmxlLih0LnJvdmVyKSA8LSBlbXB0eWJ1Y2tldDtcbiAgICAgICAgdC5oYXNoZXMuKHQucm92ZXIpIDwtIFt8IHxdO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IG5ld2J1Y2tldCA9IHdlYWtfY3JlYXRlIHByZXZfbGVuIGluXG4gICAgICAgIGJsaXQgYnVja2V0IDAgbmV3YnVja2V0IDAgcHJldl9sZW47XG4gICAgICAgIHQudGFibGUuKHQucm92ZXIpIDwtIG5ld2J1Y2tldDtcbiAgICAgICAgdC5oYXNoZXMuKHQucm92ZXIpIDwtIEFycmF5LnN1YiBoYnVja2V0IDAgcHJldl9sZW5cbiAgICAgIGVuZDtcbiAgICAgIGlmIGxlbiA+IHQubGltaXQgJiYgcHJldl9sZW4gPD0gdC5saW1pdCB0aGVuIHQub3ZlcnNpemUgPC0gdC5vdmVyc2l6ZSAtIDE7XG4gICAgZW5kO1xuICAgIHQucm92ZXIgPC0gKHQucm92ZXIgKyAxKSBtb2QgKEFycmF5Lmxlbmd0aCB0LnRhYmxlKVxuXG5cbiAgbGV0IHJlYyByZXNpemUgdCA9XG4gICAgbGV0IG9sZGxlbiA9IEFycmF5Lmxlbmd0aCB0LnRhYmxlIGluXG4gICAgbGV0IG5ld2xlbiA9IG5leHRfc3ogb2xkbGVuIGluXG4gICAgaWYgbmV3bGVuID4gb2xkbGVuIHRoZW4gYmVnaW5cbiAgICAgIGxldCBuZXd0ID0gY3JlYXRlIG5ld2xlbiBpblxuICAgICAgbGV0IGFkZF93ZWFrIG9iIG9oIG9pID1cbiAgICAgICAgbGV0IHNldHRlciBuYiBuaSBfID0gYmxpdCBvYiBvaSBuYiBuaSAxIGluXG4gICAgICAgIGxldCBoID0gb2guKG9pKSBpblxuICAgICAgICBhZGRfYXV4IG5ld3Qgc2V0dGVyIE5vbmUgaCAoZ2V0X2luZGV4IG5ld3QgaCk7XG4gICAgICBpblxuICAgICAgaXRlcl93ZWFrIGFkZF93ZWFrIHQ7XG4gICAgICB0LnRhYmxlIDwtIG5ld3QudGFibGU7XG4gICAgICB0Lmhhc2hlcyA8LSBuZXd0Lmhhc2hlcztcbiAgICAgIHQubGltaXQgPC0gbmV3dC5saW1pdDtcbiAgICAgIHQub3ZlcnNpemUgPC0gbmV3dC5vdmVyc2l6ZTtcbiAgICAgIHQucm92ZXIgPC0gdC5yb3ZlciBtb2QgQXJyYXkubGVuZ3RoIG5ld3QudGFibGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHQubGltaXQgPC0gbWF4X2ludDsgICAgICAgICAgICAgKCogbWF4aW11bSBzaXplIGFscmVhZHkgcmVhY2hlZCAqKVxuICAgICAgdC5vdmVyc2l6ZSA8LSAwO1xuICAgIGVuZFxuXG4gIGFuZCBhZGRfYXV4IHQgc2V0dGVyIGQgaCBpbmRleCA9XG4gICAgbGV0IGJ1Y2tldCA9IHQudGFibGUuKGluZGV4KSBpblxuICAgIGxldCBoYXNoZXMgPSB0Lmhhc2hlcy4oaW5kZXgpIGluXG4gICAgbGV0IHN6ID0gbGVuZ3RoIGJ1Y2tldCBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPj0gc3ogdGhlbiBiZWdpblxuICAgICAgICBsZXQgbmV3c3ogPVxuICAgICAgICAgIG1pbiAoMyAqIHN6IC8gMiArIDMpIChTeXMubWF4X2FycmF5X2xlbmd0aCAtIGFkZGl0aW9uYWxfdmFsdWVzKVxuICAgICAgICBpblxuICAgICAgICBpZiBuZXdzeiA8PSBzeiB0aGVuIGZhaWx3aXRoIFwiV2Vhay5NYWtlOiBoYXNoIGJ1Y2tldCBjYW5ub3QgZ3JvdyBtb3JlXCI7XG4gICAgICAgIGxldCBuZXdidWNrZXQgPSB3ZWFrX2NyZWF0ZSBuZXdzeiBpblxuICAgICAgICBsZXQgbmV3aGFzaGVzID0gQXJyYXkubWFrZSBuZXdzeiAwIGluXG4gICAgICAgIGJsaXQgYnVja2V0IDAgbmV3YnVja2V0IDAgc3o7XG4gICAgICAgIEFycmF5LmJsaXQgaGFzaGVzIDAgbmV3aGFzaGVzIDAgc3o7XG4gICAgICAgIHNldHRlciBuZXdidWNrZXQgc3ogZDtcbiAgICAgICAgbmV3aGFzaGVzLihzeikgPC0gaDtcbiAgICAgICAgdC50YWJsZS4oaW5kZXgpIDwtIG5ld2J1Y2tldDtcbiAgICAgICAgdC5oYXNoZXMuKGluZGV4KSA8LSBuZXdoYXNoZXM7XG4gICAgICAgIGlmIHN6IDw9IHQubGltaXQgJiYgbmV3c3ogPiB0LmxpbWl0IHRoZW4gYmVnaW5cbiAgICAgICAgICB0Lm92ZXJzaXplIDwtIHQub3ZlcnNpemUgKyAxO1xuICAgICAgICAgIGZvciBfaSA9IDAgdG8gb3Zlcl9saW1pdCBkbyB0ZXN0X3Nocmlua19idWNrZXQgdCBkb25lO1xuICAgICAgICBlbmQ7XG4gICAgICAgIGlmIHQub3ZlcnNpemUgPiBBcnJheS5sZW5ndGggdC50YWJsZSAvIG92ZXJfbGltaXQgdGhlbiByZXNpemUgdDtcbiAgICAgIGVuZCBlbHNlIGlmIGNoZWNrIGJ1Y2tldCBpIHRoZW4gYmVnaW5cbiAgICAgICAgbG9vcCAoaSArIDEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXR0ZXIgYnVja2V0IGkgZDtcbiAgICAgICAgaGFzaGVzLihpKSA8LSBoO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbG9vcCAwXG5cblxuICBsZXQgYWRkIHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGFkZF9hdXggdCBzZXQgKFNvbWUgZCkgaCAoZ2V0X2luZGV4IHQgaClcblxuXG4gIGxldCBmaW5kX29yIHQgZCBpZm5vdGZvdW5kID1cbiAgICBsZXQgaCA9IEguaGFzaCBkIGluXG4gICAgbGV0IGluZGV4ID0gZ2V0X2luZGV4IHQgaCBpblxuICAgIGxldCBidWNrZXQgPSB0LnRhYmxlLihpbmRleCkgaW5cbiAgICBsZXQgaGFzaGVzID0gdC5oYXNoZXMuKGluZGV4KSBpblxuICAgIGxldCBzeiA9IGxlbmd0aCBidWNrZXQgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID49IHN6IHRoZW4gaWZub3Rmb3VuZCBoIGluZGV4XG4gICAgICBlbHNlIGlmIGggPSBoYXNoZXMuKGkpIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggZ2V0X2NvcHkgYnVja2V0IGkgd2l0aFxuICAgICAgICB8IFNvbWUgdiB3aGVuIEguZXF1YWwgdiBkXG4gICAgICAgICAgIC0+IGJlZ2luIG1hdGNoIGdldCBidWNrZXQgaSB3aXRoXG4gICAgICAgICAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgICAgICAgICBlbmRcbiAgICAgICAgfCBfIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgZW5kIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuXG4gIGxldCBtZXJnZSB0IGQgPVxuICAgIGZpbmRfb3IgdCBkIChmdW4gaCBpbmRleCAtPiBhZGRfYXV4IHQgc2V0IChTb21lIGQpIGggaW5kZXg7IGQpXG5cblxuICBsZXQgZmluZCB0IGQgPSBmaW5kX29yIHQgZCAoZnVuIF9oIF9pbmRleCAtPiByYWlzZSBOb3RfZm91bmQpXG5cbiAgbGV0IGZpbmRfb3B0IHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIE5vbmVcbiAgICAgIGVsc2UgaWYgaCA9IGhhc2hlcy4oaSkgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBnZXRfY29weSBidWNrZXQgaSB3aXRoXG4gICAgICAgIHwgU29tZSB2IHdoZW4gSC5lcXVhbCB2IGRcbiAgICAgICAgICAgLT4gYmVnaW4gbWF0Y2ggZ2V0IGJ1Y2tldCBpIHdpdGhcbiAgICAgICAgICAgICAgfCBTb21lIF8gYXMgdiAtPiB2XG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBsb29wIChpICsgMSlcbiAgICAgICAgICAgICAgZW5kXG4gICAgICAgIHwgXyAtPiBsb29wIChpICsgMSlcbiAgICAgIGVuZCBlbHNlIGxvb3AgKGkgKyAxKVxuICAgIGluXG4gICAgbG9vcCAwXG5cblxuICBsZXQgZmluZF9zaGFkb3cgdCBkIGlmZm91bmQgaWZub3Rmb3VuZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIGlmbm90Zm91bmRcbiAgICAgIGVsc2UgaWYgaCA9IGhhc2hlcy4oaSkgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBnZXRfY29weSBidWNrZXQgaSB3aXRoXG4gICAgICAgIHwgU29tZSB2IHdoZW4gSC5lcXVhbCB2IGQgLT4gaWZmb3VuZCBidWNrZXQgaVxuICAgICAgICB8IF8gLT4gbG9vcCAoaSArIDEpXG4gICAgICBlbmQgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG5cbiAgbGV0IHJlbW92ZSB0IGQgPSBmaW5kX3NoYWRvdyB0IGQgKGZ1biB3IGkgLT4gc2V0IHcgaSBOb25lKSAoKVxuXG5cbiAgbGV0IG1lbSB0IGQgPSBmaW5kX3NoYWRvdyB0IGQgKGZ1biBfdyBfaSAtPiB0cnVlKSBmYWxzZVxuXG5cbiAgbGV0IGZpbmRfYWxsIHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgYWNjdSA9XG4gICAgICBpZiBpID49IHN6IHRoZW4gYWNjdVxuICAgICAgZWxzZSBpZiBoID0gaGFzaGVzLihpKSB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGdldF9jb3B5IGJ1Y2tldCBpIHdpdGhcbiAgICAgICAgfCBTb21lIHYgd2hlbiBILmVxdWFsIHYgZFxuICAgICAgICAgICAtPiBiZWdpbiBtYXRjaCBnZXQgYnVja2V0IGkgd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgdiAtPiBsb29wIChpICsgMSkgKHYgOjogYWNjdSlcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKSBhY2N1XG4gICAgICAgICAgICAgIGVuZFxuICAgICAgICB8IF8gLT4gbG9vcCAoaSArIDEpIGFjY3VcbiAgICAgIGVuZCBlbHNlIGxvb3AgKGkgKyAxKSBhY2N1XG4gICAgaW5cbiAgICBsb29wIDAgW11cblxuXG4gIGxldCBzdGF0cyB0ID1cbiAgICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIHQudGFibGUgaW5cbiAgICBsZXQgbGVucyA9IEFycmF5Lm1hcCBsZW5ndGggdC50YWJsZSBpblxuICAgIEFycmF5LnNvcnQgY29tcGFyZSBsZW5zO1xuICAgIGxldCB0b3RsZW4gPSBBcnJheS5mb2xkX2xlZnQgKCArICkgMCBsZW5zIGluXG4gICAgKGxlbiwgY291bnQgdCwgdG90bGVuLCBsZW5zLigwKSwgbGVucy4obGVuLzIpLCBsZW5zLihsZW4tMSkpXG5cblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEEgcHJldHR5LXByaW50aW5nIGZhY2lsaXR5IGFuZCBkZWZpbml0aW9uIG9mIGZvcm1hdHRlcnMgZm9yICdwYXJhbGxlbCdcbiAgIChpLmUuIHVucmVsYXRlZCBvciBpbmRlcGVuZGVudCkgcHJldHR5LXByaW50aW5nIG9uIG11bHRpcGxlIG91dCBjaGFubmVscy4gKilcblxuKCpcbiAgIFRoZSBwcmV0dHktcHJpbnRpbmcgZW5naW5lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy5cbiopXG5cbmxldCBpZCB4ID0geFxuXG4oKiBBIGRldm90ZWQgdHlwZSBmb3Igc2l6ZXMgdG8gYXZvaWQgY29uZnVzaW9uXG4gICBiZXR3ZWVuIHNpemVzIGFuZCBtZXJlIGludGVnZXJzLiAqKVxubW9kdWxlIFNpemUgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHRvX2ludCA6IHQgLT4gaW50XG4gIHZhbCBvZl9pbnQgOiBpbnQgLT4gdFxuICB2YWwgemVybyA6IHRcbiAgdmFsIHVua25vd24gOiB0XG4gIHZhbCBpc19rbm93biA6IHQgLT4gYm9vbFxuZW5kICA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdG9faW50ID0gaWRcbiAgbGV0IG9mX2ludCA9IGlkXG4gIGxldCB6ZXJvID0gMFxuICBsZXQgdW5rbm93biA9IC0xXG4gIGxldCBpc19rbm93biBuID0gbiA+PSAwXG5lbmRcblxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgYm94ZXMgZGVmaW5pdGlvbjpcbiAgIGEgcHJldHR5LXByaW50aW5nIGJveCBpcyBlaXRoZXJcbiAgIC0gaGJveDogaG9yaXpvbnRhbCBib3ggKG5vIGxpbmUgc3BsaXR0aW5nKVxuICAgLSB2Ym94OiB2ZXJ0aWNhbCBib3ggKGV2ZXJ5IGJyZWFrIGhpbnQgc3BsaXRzIHRoZSBsaW5lKVxuICAgLSBodmJveDogaG9yaXpvbnRhbC92ZXJ0aWNhbCBib3hcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIGJveCBpZiBpdCBmaXRzIG9uXG4gICAgICB0aGUgY3VycmVudCBsaW5lLCBvdGhlcndpc2UgdGhlIGJveCBiZWhhdmVzIGFzIGEgdmVydGljYWwgYm94KVxuICAgLSBob3Zib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3hcbiAgICAgKHRoZSBib3ggaXMgY29tcGFjdGluZyBtYXRlcmlhbCwgcHJpbnRpbmcgYXMgbXVjaCBtYXRlcmlhbCBhcyBwb3NzaWJsZVxuICAgICAgb24gZXZlcnkgbGluZXMpXG4gICAtIGJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveCB3aXRoIGVuaGFuY2VkIGJveCBzdHJ1Y3R1cmVcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGJveCBidXQgYnJlYWsgaGludHMgc3BsaXRcbiAgICAgIHRoZSBsaW5lIGlmIHNwbGl0dGluZyB3b3VsZCBtb3ZlIHRvIHRoZSBsZWZ0KVxuKilcbnR5cGUgYm94X3R5cGUgPSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHNcblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIHRva2VucyBkZWZpbml0aW9uOlxuICAgYXJlIGVpdGhlciB0ZXh0IHRvIHByaW50IG9yIHByZXR0eSBwcmludGluZ1xuICAgZWxlbWVudHMgdGhhdCBkcml2ZSBpbmRlbnRhdGlvbiBhbmQgbGluZSBzcGxpdHRpbmcuICopXG50eXBlIHBwX3Rva2VuID1cbiAgfCBQcF90ZXh0IG9mIHN0cmluZyAgICAgICAgICAoKiBub3JtYWwgdGV4dCAqKVxuICB8IFBwX2JyZWFrIG9mIHsgICAgICAgICAgICAgICgqIGNvbXBsZXRlIGJyZWFrICopXG4gICAgICBmaXRzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICAgKCogbGluZSBpcyBub3Qgc3BsaXQgKilcbiAgICAgIGJyZWFrczogc3RyaW5nICogaW50ICogc3RyaW5nOyAoKiBsaW5lIGlzIHNwbGl0ICopXG4gICAgfVxuICB8IFBwX3RicmVhayBvZiBpbnQgKiBpbnQgICAgICgqIGdvIHRvIG5leHQgdGFidWxhdGlvbiAqKVxuICB8IFBwX3N0YWIgICAgICAgICAgICAgICAgICAgICgqIHNldCBhIHRhYnVsYXRpb24gKilcbiAgfCBQcF9iZWdpbiBvZiBpbnQgKiBib3hfdHlwZSAoKiBiZWdpbm5pbmcgb2YgYSBib3ggKilcbiAgfCBQcF9lbmQgICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSBib3ggKilcbiAgfCBQcF90YmVnaW4gb2YgdGJveCAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX3RlbmQgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfbmV3bGluZSAgICAgICAgICAgICAgICAgKCogdG8gZm9yY2UgYSBuZXdsaW5lIGluc2lkZSBhIGJveCAqKVxuICB8IFBwX2lmX25ld2xpbmUgICAgICAgICAgICAgICgqIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIHRoaXMgdmVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgaGFzIGJlZW4gYnJva2VuICopXG4gIHwgUHBfb3Blbl90YWcgb2Ygc3RhZyAgICAgICAgICgqIG9wZW5pbmcgYSB0YWcgbmFtZSAqKVxuICB8IFBwX2Nsb3NlX3RhZyAgICAgICAgICAgICAgICgqIGNsb3NpbmcgdGhlIG1vc3QgcmVjZW50bHkgb3BlbiB0YWcgKilcblxuYW5kIHN0YWcgPSAuLlxuXG5hbmQgdGJveCA9IFBwX3Rib3ggb2YgaW50IGxpc3QgcmVmICAoKiBUYWJ1bGF0aW9uIGJveCAqKVxuXG50eXBlIHRhZyA9IHN0cmluZ1xudHlwZSBzdGFnICs9IFN0cmluZ190YWcgb2YgdGFnXG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlOlxuICAgcHJldHR5LXByaW50aW5nIG1hdGVyaWFsIGlzIG5vdCB3cml0dGVuIGluIHRoZSBvdXRwdXQgYXMgc29vbiBhcyBlbWl0dGVkO1xuICAgaW5zdGVhZCwgdGhlIG1hdGVyaWFsIGlzIHNpbXBseSByZWNvcmRlZCBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUsXG4gICB1bnRpbCB0aGUgZW5jbG9zaW5nIGJveCBoYXMgYSBrbm93biBjb21wdXRlZCBzaXplIGFuZCBwcm9wZXIgc3BsaXR0aW5nXG4gICBkZWNpc2lvbnMgY2FuIGJlIG1hZGUuXG5cbiAgIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBjb250YWlucyBmb3JtYXR0aW5nIGVsZW1lbnRzIHRvIGJlIHByaW50ZWQuXG4gICBFYWNoIGZvcm1hdHRpbmcgZWxlbWVudCBpcyBhIHR1cGxlIChzaXplLCB0b2tlbiwgbGVuZ3RoKSwgd2hlcmVcbiAgIC0gbGVuZ3RoIGlzIHRoZSBkZWNsYXJlZCBsZW5ndGggb2YgdGhlIHRva2VuLFxuICAgLSBzaXplIGlzIGVmZmVjdGl2ZSBzaXplIG9mIHRoZSB0b2tlbiB3aGVuIGl0IGlzIHByaW50ZWRcbiAgICAgKHNpemUgaXMgc2V0IHdoZW4gdGhlIHNpemUgb2YgdGhlIGJveCBpcyBrbm93biwgc28gdGhhdCBzaXplIG9mIGJyZWFrXG4gICAgICBoaW50cyBhcmUgZGVmaW5pdGl2ZSkuICopXG50eXBlIHBwX3F1ZXVlX2VsZW0gPSB7XG4gIG11dGFibGUgc2l6ZSA6IFNpemUudDtcbiAgdG9rZW4gOiBwcF90b2tlbjtcbiAgbGVuZ3RoIDogaW50O1xufVxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9xdWV1ZSA9IHBwX3F1ZXVlX2VsZW0gUXVldWUudFxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjazogc2Nhbm5pbmcgZWxlbWVudCBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9zY2FuX2VsZW0gPSB7XG4gIGxlZnRfdG90YWwgOiBpbnQ7ICgqIFZhbHVlIG9mIHBwX2xlZnRfdG90YWwgd2hlbiB0aGUgZWxlbWVudCB3YXMgZW5xdWV1ZWQuICopXG4gIHF1ZXVlX2VsZW0gOiBwcF9xdWV1ZV9lbGVtXG59XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOlxuICAgdGhlIGZvcm1hdHRpbmcgc3RhY2sgY29udGFpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZVxuICAgYm94ZXM7IHRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrIGlzIHVzZWQgdG8gc3BsaXQgdGhlIGxpbmVzXG4gICB3aGlsZSBwcmludGluZyB0b2tlbnMuICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOiBmb3JtYXR0aW5nIHN0YWNrIGVsZW1lbnQgZGVmaW5pdGlvbi5cbiAgIEVhY2ggc3RhY2sgZWxlbWVudCBkZXNjcmliZXMgYSBwcmV0dHktcHJpbnRpbmcgYm94LiAqKVxudHlwZSBwcF9mb3JtYXRfZWxlbSA9IHsgYm94X3R5cGUgOiBib3hfdHlwZTsgd2lkdGggOiBpbnQgfVxuXG4oKiBUaGUgZm9ybWF0dGVyIGRlZmluaXRpb24uXG4gICBFYWNoIGZvcm1hdHRlciB2YWx1ZSBpcyBhIHByZXR0eS1wcmludGVyIGluc3RhbmNlIHdpdGggYWxsIGl0c1xuICAgbWFjaGluZXJ5LiAqKVxudHlwZSBmb3JtYXR0ZXIgPSB7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcbiAgcHBfc2Nhbl9zdGFjayA6IHBwX3NjYW5fZWxlbSBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjay4gKilcbiAgcHBfZm9ybWF0X3N0YWNrIDogcHBfZm9ybWF0X2VsZW0gU3RhY2sudDtcbiAgcHBfdGJveF9zdGFjayA6IHRib3ggU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNlbWFudGljcyB0YWcgc3RhY2suICopXG4gIHBwX3RhZ19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgcHBfbWFya19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgKCogVmFsdWUgb2YgcmlnaHQgbWFyZ2luLiAqKVxuICBtdXRhYmxlIHBwX21hcmdpbiA6IGludDtcbiAgKCogTWluaW1hbCBzcGFjZSBsZWZ0IGJlZm9yZSBtYXJnaW4sIHdoZW4gb3BlbmluZyBhIGJveC4gKilcbiAgbXV0YWJsZSBwcF9taW5fc3BhY2VfbGVmdCA6IGludDtcbiAgKCogTWF4aW11bSB2YWx1ZSBvZiBpbmRlbnRhdGlvbjpcbiAgICAgbm8gYm94IGNhbiBiZSBvcGVuZWQgZnVydGhlci4gKilcbiAgbXV0YWJsZSBwcF9tYXhfaW5kZW50IDogaW50O1xuICAoKiBTcGFjZSByZW1haW5pbmcgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbiAgbXV0YWJsZSBwcF9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBDdXJyZW50IHZhbHVlIG9mIGluZGVudGF0aW9uLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJlbnRfaW5kZW50IDogaW50O1xuICAoKiBUcnVlIHdoZW4gdGhlIGxpbmUgaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBwcmV0dHktcHJpbnRlci4gKilcbiAgbXV0YWJsZSBwcF9pc19uZXdfbGluZSA6IGJvb2w7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBhbHJlYWR5IHByaW50ZWQuICopXG4gIG11dGFibGUgcHBfbGVmdF90b3RhbCA6IGludDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGV2ZXIgcHV0IGluIHF1ZXVlLiAqKVxuICBtdXRhYmxlIHBwX3JpZ2h0X3RvdGFsIDogaW50O1xuICAoKiBDdXJyZW50IG51bWJlciBvZiBvcGVuIGJveGVzLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJfZGVwdGggOiBpbnQ7XG4gICgqIE1heGltdW0gbnVtYmVyIG9mIGJveGVzIHdoaWNoIGNhbiBiZSBzaW11bHRhbmVvdXNseSBvcGVuLiAqKVxuICBtdXRhYmxlIHBwX21heF9ib3hlcyA6IGludDtcbiAgKCogRWxsaXBzaXMgc3RyaW5nLiAqKVxuICBtdXRhYmxlIHBwX2VsbGlwc2lzIDogc3RyaW5nO1xuICAoKiBPdXRwdXQgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gICgqIEZsdXNoaW5nIGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGJyZWFrIGhpbnRzIHNwYWNlcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xuICAoKiBBcmUgdGFncyBwcmludGVkID8gKilcbiAgbXV0YWJsZSBwcF9wcmludF90YWdzIDogYm9vbDtcbiAgKCogQXJlIHRhZ3MgbWFya2VkID8gKilcbiAgbXV0YWJsZSBwcF9tYXJrX3RhZ3MgOiBib29sO1xuICAoKiBGaW5kIG9wZW5pbmcgYW5kIGNsb3NpbmcgbWFya2VycyBvZiB0YWdzLiAqKVxuICBtdXRhYmxlIHBwX21hcmtfb3Blbl90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9tYXJrX2Nsb3NlX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX3ByaW50X29wZW5fdGFnIDogc3RhZyAtPiB1bml0O1xuICBtdXRhYmxlIHBwX3ByaW50X2Nsb3NlX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxuICBwcF9xdWV1ZSA6IHBwX3F1ZXVlO1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgc3BlY2lmaWMgdGFnIGhhbmRsaW5nIGZ1bmN0aW9ucy4gKilcbnR5cGUgZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl9zdGFnIDogc3RhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV9zdGFnIDogc3RhZyAtPiB1bml0O1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25zIHRvIG91dHB1dCBtYXRlcmlhbC4gKilcbnR5cGUgZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPSB7XG4gIG91dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICBvdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICBvdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gIG91dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbn1cblxuXG4oKlxuXG4gIEF1eGlsaWFyaWVzIGFuZCBiYXNpYyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEVudGVyIGEgdG9rZW4gaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2VucXVldWUgc3RhdGUgdG9rZW4gPVxuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBzdGF0ZS5wcF9yaWdodF90b3RhbCArIHRva2VuLmxlbmd0aDtcbiAgUXVldWUuYWRkIHRva2VuIHN0YXRlLnBwX3F1ZXVlXG5cblxubGV0IHBwX2NsZWFyX3F1ZXVlIHN0YXRlID1cbiAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSAxOyBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSAxO1xuICBRdWV1ZS5jbGVhciBzdGF0ZS5wcF9xdWV1ZVxuXG5cbigqIFBwX2luZmluaXR5OiBsYXJnZSB2YWx1ZSBmb3IgZGVmYXVsdCB0b2tlbnMgc2l6ZS5cblxuICAgUHBfaW5maW5pdHkgaXMgZG9jdW1lbnRlZCBhcyBiZWluZyBncmVhdGVyIHRoYW4gMWUxMDsgdG8gYXZvaWRcbiAgIGNvbmZ1c2lvbiBhYm91dCB0aGUgd29yZCAnZ3JlYXRlcicsIHdlIGNob29zZSBwcF9pbmZpbml0eSBncmVhdGVyXG4gICB0aGFuIDFlMTAgKyAxOyBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiB0ZXN0cyBpbiB0aGUgYWxnb3JpdGhtLFxuICAgcHBfaW5maW5pdHkgbXVzdCBiZSBldmVuIG9uZSBtb3JlIHRoYW4gMWUxMCArIDE7IGxldCdzIHN0YW5kIG9uIHRoZVxuICAgc2FmZSBzaWRlIGJ5IGNob29zaW5nIDEuZTEwKzEwLlxuXG4gICBQcF9pbmZpbml0eSBjb3VsZCBwcm9iYWJseSBiZSAxMDczNzQxODIzIHRoYXQgaXMgMl4zMCAtIDEsIHRoYXQgaXNcbiAgIHRoZSBtaW5pbWFsIHVwcGVyIGJvdW5kIGZvciBpbnRlZ2Vyczsgbm93IHRoYXQgbWF4X2ludCBpcyBkZWZpbmVkLFxuICAgdGhpcyBsaW1pdCBjb3VsZCBhbHNvIGJlIGRlZmluZWQgYXMgbWF4X2ludCAtIDEuXG5cbiAgIEhvd2V2ZXIsIGJlZm9yZSBzZXR0aW5nIHBwX2luZmluaXR5IHRvIHNvbWV0aGluZyBhcm91bmQgbWF4X2ludCwgd2VcbiAgIG11c3QgY2FyZWZ1bGx5IGRvdWJsZS1jaGVjayBhbGwgdGhlIGludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zXG4gICB0aGF0IGludm9sdmUgcHBfaW5maW5pdHksIHNpbmNlIGFueSBvdmVyZmxvdyB3b3VsZCB3cmVjayBoYXZvYyB0aGVcbiAgIHByZXR0eS1wcmludGluZyBhbGdvcml0aG0ncyBpbnZhcmlhbnRzLiBHaXZlbiB0aGF0IHRoaXMgYXJpdGhtZXRpY1xuICAgY29ycmVjdG5lc3MgY2hlY2sgaXMgZGlmZmljdWx0IGFuZCBlcnJvciBwcm9uZSBhbmQgZ2l2ZW4gdGhhdCAxZTEwXG4gICArIDEgaXMgaW4gcHJhY3RpY2UgbGFyZ2UgZW5vdWdoLCB0aGVyZSBpcyBubyBuZWVkIHRvIGF0dGVtcHQgdG8gc2V0XG4gICBwcF9pbmZpbml0eSB0byB0aGUgdGhlb3JldGljYWxseSBtYXhpbXVtIGxpbWl0LiBJdCBpcyBub3Qgd29ydGggdGhlXG4gICBidXJkZW4gISAqKVxubGV0IHBwX2luZmluaXR5ID0gMTAwMDAwMDAxMFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIGZvciB0aGUgZm9ybWF0dGVyLiAqKVxubGV0IHBwX291dHB1dF9zdHJpbmcgc3RhdGUgcyA9IHN0YXRlLnBwX291dF9zdHJpbmcgcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5hbmQgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZSAoKVxuYW5kIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9zcGFjZXMgblxuYW5kIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9pbmRlbnQgblxuXG4oKiBGb3JtYXQgYSB0ZXh0dWFsIHRva2VuICopXG5sZXQgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSB0ZXh0ID1cbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gc2l6ZTtcbiAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSB0ZXh0O1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSBmYWxzZVxuXG4oKiBGb3JtYXQgYSBzdHJpbmcgYnkgaXRzIGxlbmd0aCwgaWYgbm90IGVtcHR5ICopXG5sZXQgZm9ybWF0X3N0cmluZyBzdGF0ZSBzID1cbiAgaWYgcyA8PiBcIlwiIHRoZW4gZm9ybWF0X3BwX3RleHQgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG4oKiBUbyBmb3JtYXQgYSBicmVhaywgaW5kZW50aW5nIGEgbmV3IGxpbmUuICopXG5sZXQgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKGJlZm9yZSwgb2Zmc2V0LCBhZnRlcikgd2lkdGggPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIHRydWU7XG4gIGxldCBpbmRlbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZnNldCBpblxuICAoKiBEb24ndCBpbmRlbnQgbW9yZSB0aGFuIHBwX21heF9pbmRlbnQuICopXG4gIGxldCByZWFsX2luZGVudCA9IG1pbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGluZGVudCBpblxuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSByZWFsX2luZGVudDtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9jdXJyZW50X2luZGVudDtcbiAgcHBfb3V0cHV0X2luZGVudCBzdGF0ZSBzdGF0ZS5wcF9jdXJyZW50X2luZGVudDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGZvcmNlIGEgbGluZSBicmVhayBpbnNpZGUgYSBib3g6IG5vIG9mZnNldCBpcyBhZGRlZC4gKilcbmxldCBicmVha19saW5lIHN0YXRlIHdpZHRoID0gYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIDAsIFwiXCIpIHdpZHRoXG5cbigqIFRvIGZvcm1hdCBhIGJyZWFrIHRoYXQgZml0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoYmVmb3JlLCB3aWR0aCwgYWZ0ZXIpID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHdpZHRoO1xuICBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIHdpZHRoO1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gaW5kZW50IG5vIG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LCBpZiBvbmUgdHJpZXMgdG8gb3BlbiBhIGJveFxuICAgYmV5b25kIHBwX21heF9pbmRlbnQsIHRoZW4gdGhlIGJveCBpcyByZWplY3RlZCBvbiB0aGUgbGVmdFxuICAgYnkgc2ltdWxhdGluZyBhIGJyZWFrLiAqKVxubGV0IHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZVxuICB8IFNvbWUgeyBib3hfdHlwZTsgd2lkdGggfSAtPlxuICAgIGlmIHdpZHRoID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuXG4gICAgICBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2ZpdHMgfCBQcF9oYm94IC0+ICgpXG4gICAgICB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG5cblxuKCogVG8gc2tpcCBhIHRva2VuLCBpZiB0aGUgcHJldmlvdXMgbGluZSBoYXMgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfc2tpcF90b2tlbiBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnRha2Vfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHByaW50X2lmX25ld2xpbmUgbXVzdCBoYXZlIGJlZW4gdGhlIGxhc3QgcHJpbnRpbmcgY29tbWFuZCAqKVxuICB8IFNvbWUgeyBzaXplOyBsZW5ndGg7IF8gfSAtPlxuICAgIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gc3RhdGUucHBfbGVmdF90b3RhbCAtIGxlbmd0aDtcbiAgICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgKyBTaXplLnRvX2ludCBzaXplXG5cblxuKCpcblxuICBUaGUgbWFpbiBwcmV0dHkgcHJpbnRpbmcgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBGb3JtYXR0aW5nIGEgdG9rZW4gd2l0aCBhIGdpdmVuIHNpemUuICopXG5sZXQgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgPSBmdW5jdGlvblxuXG4gIHwgUHBfdGV4dCBzIC0+XG4gICAgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSBzXG5cbiAgfCBQcF9iZWdpbiAob2ZmLCB0eSkgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGlmIGluc2VydGlvbl9wb2ludCA+IHN0YXRlLnBwX21heF9pbmRlbnQgdGhlblxuICAgICAgKCogY2FuIG5vdCBvcGVuIGEgYm94IHJpZ2h0IHRoZXJlLiAqKVxuICAgICAgYmVnaW4gcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSBlbmQ7XG4gICAgbGV0IHdpZHRoID0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIG9mZiBpblxuICAgIGxldCBib3hfdHlwZSA9XG4gICAgICBtYXRjaCB0eSB3aXRoXG4gICAgICB8IFBwX3Zib3ggLT4gUHBfdmJveFxuICAgICAgfCBQcF9oYm94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzIC0+XG4gICAgICAgIGlmIHNpemUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gdHkgZWxzZSBQcF9maXRzIGluXG4gICAgU3RhY2sucHVzaCB7IGJveF90eXBlOyB3aWR0aCB9IHN0YXRlLnBwX2Zvcm1hdF9zdGFja1xuXG4gIHwgUHBfZW5kIC0+XG4gICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF90YmVnaW4gKFBwX3Rib3ggXyBhcyB0Ym94KSAtPlxuICAgIFN0YWNrLnB1c2ggdGJveCBzdGF0ZS5wcF90Ym94X3N0YWNrXG5cbiAgfCBQcF90ZW5kIC0+XG4gICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfc3RhYiAtPlxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgcmVjIGFkZF90YWIgbiA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gW25dXG4gICAgICAgIHwgeCA6OiBsIGFzIGxzIC0+IGlmIG4gPCB4IHRoZW4gbiA6OiBscyBlbHNlIHggOjogYWRkX3RhYiBuIGwgaW5cbiAgICAgIHRhYnMgOj0gYWRkX3RhYiAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCkgIXRhYnNcbiAgICBlbmRcblxuICB8IFBwX3RicmVhayAobiwgb2ZmKSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCB0YWIgPVxuICAgICAgICBtYXRjaCAhdGFicyB3aXRoXG4gICAgICAgIHwgW10gLT4gaW5zZXJ0aW9uX3BvaW50XG4gICAgICAgIHwgZmlyc3QgOjogXyAtPlxuICAgICAgICAgIGxldCByZWMgZmluZCA9IGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGhlYWQgOjogdGFpbCAtPlxuICAgICAgICAgICAgICBpZiBoZWFkID49IGluc2VydGlvbl9wb2ludCB0aGVuIGhlYWQgZWxzZSBmaW5kIHRhaWxcbiAgICAgICAgICAgIHwgW10gLT4gZmlyc3QgaW5cbiAgICAgICAgICBmaW5kICF0YWJzIGluXG4gICAgICBsZXQgb2Zmc2V0ID0gdGFiIC0gaW5zZXJ0aW9uX3BvaW50IGluXG4gICAgICBpZiBvZmZzZXQgPj0gMFxuICAgICAgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgKFwiXCIsIG9mZnNldCArIG4sIFwiXCIpXG4gICAgICBlbHNlIGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCB0YWIgKyBvZmYsIFwiXCIpIHN0YXRlLnBwX21hcmdpblxuICAgIGVuZFxuXG4gIHwgUHBfbmV3bGluZSAtPlxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgd2lkdGg7IF99IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcbiAgICBlbmRcblxuICB8IFBwX2lmX25ld2xpbmUgLT5cbiAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCAhPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgdGhlbiBwcF9za2lwX3Rva2VuIHN0YXRlXG5cbiAgfCBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IC0+XG4gICAgbGV0IGJlZm9yZSwgb2ZmLCBfID0gYnJlYWtzIGluXG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyBib3hfdHlwZTsgd2lkdGggfSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9ob3Zib3ggLT5cbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2JveCAtPlxuICAgICAgICAoKiBIYXZlIHRoZSBsaW5lIGp1c3QgYmVlbiBicm9rZW4gaGVyZSA/ICopXG4gICAgICAgIGlmIHN0YXRlLnBwX2lzX25ld19saW5lIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHMgZWxzZVxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGggZWxzZVxuICAgICAgICAoKiBicmVhayB0aGUgbGluZSBoZXJlIGxlYWRzIHRvIG5ldyBpbmRlbnRhdGlvbiA/ICopXG4gICAgICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ID4gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9odmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfZml0cyAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF92Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9oYm94IC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICBlbmRcbiAgICBlbmRcblxuICAgfCBQcF9vcGVuX3RhZyB0YWdfbmFtZSAtPlxuICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlcjtcbiAgICAgU3RhY2sucHVzaCB0YWdfbmFtZSBzdGF0ZS5wcF9tYXJrX3N0YWNrXG5cbiAgIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgIGJlZ2luIG1hdGNoIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfbWFya19zdGFjayB3aXRoXG4gICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICAgfCBTb21lIHRhZ19uYW1lIC0+XG4gICAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIHRhZ19uYW1lIGluXG4gICAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXJcbiAgICAgZW5kXG5cblxuKCogUHJpbnQgaWYgdG9rZW4gc2l6ZSBpcyBrbm93biBlbHNlIHByaW50aW5nIGlzIGRlbGF5ZWQuXG4gICBQcmludGluZyBpcyBkZWxheWVkIHdoZW4gdGhlIHRleHQgd2FpdGluZyBpbiB0aGUgcXVldWUgcmVxdWlyZXNcbiAgIG1vcmUgcm9vbSB0byBmb3JtYXQgdGhhbiBleGlzdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCByZWMgYWR2YW5jZV9sZWZ0IHN0YXRlID1cbiAgbWF0Y2ggUXVldWUucGVla19vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogTm8gdG9rZW5zIHRvIHByaW50ICopXG4gIHwgU29tZSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSAtPlxuICAgIGxldCBwZW5kaW5nX2NvdW50ID0gc3RhdGUucHBfcmlnaHRfdG90YWwgLSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIGluXG4gICAgaWYgU2l6ZS5pc19rbm93biBzaXplIHx8IHBlbmRpbmdfY291bnQgPj0gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIGJlZ2luXG4gICAgICBRdWV1ZS50YWtlIHN0YXRlLnBwX3F1ZXVlIHw+IGlnbm9yZTsgKCogTm90IGVtcHR5OiB3ZSBwZWVrIGludG8gaXQgKilcbiAgICAgIGxldCBzaXplID0gaWYgU2l6ZS5pc19rbm93biBzaXplIHRoZW4gU2l6ZS50b19pbnQgc2l6ZSBlbHNlIHBwX2luZmluaXR5IGluXG4gICAgICBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSB0b2tlbjtcbiAgICAgIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gbGVuZ3RoICsgc3RhdGUucHBfbGVmdF90b3RhbDtcbiAgICAgIChhZHZhbmNlX2xlZnQgW0B0YWlsY2FsbF0pIHN0YXRlXG4gICAgZW5kXG5cblxuKCogVG8gZW5xdWV1ZSBhIHRva2VuIDogdHJ5IHRvIGFkdmFuY2UuICopXG5sZXQgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHRvayA9IHBwX2VucXVldWUgc3RhdGUgdG9rOyBhZHZhbmNlX2xlZnQgc3RhdGVcblxuXG4oKiBUbyBlbnF1ZXVlIHN0cmluZ3MuICopXG5sZXQgZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzID1cbiAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZTsgdG9rZW4gPSBQcF90ZXh0IHM7IGxlbmd0aCA9IFNpemUudG9faW50IHNpemUgfVxuXG5cbmxldCBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzID1cbiAgZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgKFNpemUub2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKSBzXG5cblxuKCogUm91dGluZXMgZm9yIHNjYW4gc3RhY2tcbiAgIGRldGVybWluZSBzaXplIG9mIGJveGVzLiAqKVxuXG4oKiBUaGUgc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbmxldCBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhY2sgPVxuICBTdGFjay5jbGVhciBzdGFjaztcbiAgbGV0IHF1ZXVlX2VsZW0gPSB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfdGV4dCBcIlwiOyBsZW5ndGggPSAwIH0gaW5cbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAtMTsgcXVldWVfZWxlbSB9IHN0YWNrXG5cbigqIFNldHRpbmcgdGhlIHNpemUgb2YgYm94ZXMgb24gc2NhbiBzdGFjazpcbiAgIGlmIHR5ID0gdHJ1ZSB0aGVuIHNpemUgb2YgYnJlYWsgaXMgc2V0IGVsc2Ugc2l6ZSBvZiBib3ggaXMgc2V0O1xuICAgaW4gZWFjaCBjYXNlIHBwX3NjYW5fc3RhY2sgaXMgcG9wcGVkLlxuXG4gICBOb3RlOlxuICAgUGF0dGVybiBtYXRjaGluZyBvbiBzY2FuIHN0YWNrIGlzIGV4aGF1c3RpdmUsIHNpbmNlIHNjYW5fc3RhY2sgaXMgbmV2ZXJcbiAgIGVtcHR5LlxuICAgUGF0dGVybiBtYXRjaGluZyBvbiB0b2tlbiBpbiBzY2FuIHN0YWNrIGlzIGFsc28gZXhoYXVzdGl2ZSxcbiAgIHNpbmNlIHNjYW5fcHVzaCBpcyB1c2VkIG9uIGJyZWFrcyBhbmQgb3BlbmluZyBvZiBib3hlcy4gKilcbmxldCBzZXRfc2l6ZSBzdGF0ZSB0eSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxuICB8IFNvbWUgeyBsZWZ0X3RvdGFsOyBxdWV1ZV9lbGVtIH0gLT5cbiAgICBsZXQgc2l6ZSA9IFNpemUudG9faW50IHF1ZXVlX2VsZW0uc2l6ZSBpblxuICAgICgqIHRlc3QgaWYgc2NhbiBzdGFjayBjb250YWlucyBhbnkgZGF0YSB0aGF0IGlzIG5vdCBvYnNvbGV0ZS4gKilcbiAgICBpZiBsZWZ0X3RvdGFsIDwgc3RhdGUucHBfbGVmdF90b3RhbCB0aGVuXG4gICAgICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhdGUucHBfc2Nhbl9zdGFja1xuICAgIGVsc2VcbiAgICAgIG1hdGNoIHF1ZXVlX2VsZW0udG9rZW4gd2l0aFxuICAgICAgfCBQcF9icmVhayBfIHwgUHBfdGJyZWFrIChfLCBfKSAtPlxuICAgICAgICBpZiB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX2JlZ2luIChfLCBfKSAtPlxuICAgICAgICBpZiBub3QgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF90ZXh0IF8gfCBQcF9zdGFiIHwgUHBfdGJlZ2luIF8gfCBQcF90ZW5kIHwgUHBfZW5kXG4gICAgICB8IFBwX25ld2xpbmUgfCBQcF9pZl9uZXdsaW5lIHwgUHBfb3Blbl90YWcgXyB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICAgICAoKSAoKiBzY2FuX3B1c2ggaXMgb25seSB1c2VkIGZvciBicmVha3MgYW5kIGJveGVzLiAqKVxuXG5cbigqIFB1c2ggYSB0b2tlbiBvbiBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay5cbiAgIElmIGIgaXMgdHJ1ZSBzZXRfc2l6ZSBpcyBjYWxsZWQuICopXG5sZXQgc2Nhbl9wdXNoIHN0YXRlIGIgdG9rZW4gPVxuICBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuO1xuICBpZiBiIHRoZW4gc2V0X3NpemUgc3RhdGUgdHJ1ZTtcbiAgbGV0IGVsZW0gPSB7IGxlZnRfdG90YWwgPSBzdGF0ZS5wcF9yaWdodF90b3RhbDsgcXVldWVfZWxlbSA9IHRva2VuIH0gaW5cbiAgU3RhY2sucHVzaCBlbGVtIHN0YXRlLnBwX3NjYW5fc3RhY2tcblxuXG4oKiBUbyBvcGVuIGEgbmV3IGJveCA6XG4gICB0aGUgdXNlciBtYXkgc2V0IHRoZSBkZXB0aCBib3VuZCBwcF9tYXhfYm94ZXNcbiAgIGFueSB0ZXh0IG5lc3RlZCBkZWVwZXIgaXMgcHJpbnRlZCBhcyB0aGUgZWxsaXBzaXMgc3RyaW5nLiAqKVxubGV0IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgYnJfdHkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX2JlZ2luIChpbmRlbnQsIGJyX3R5KTsgbGVuZ3RoID0gMCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIGZhbHNlIGVsZW0gZWxzZVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmcgc3RhdGUgc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUaGUgYm94IHdoaWNoIGlzIGFsd2F5cyBvcGVuLiAqKVxubGV0IHBwX29wZW5fc3lzX2JveCBzdGF0ZSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hvdmJveFxuXG4oKiBDbG9zZSBhIGJveCwgc2V0dGluZyBzaXplcyBvZiBpdHMgc3ViIGJveGVzLiAqKVxubGV0IHBwX2Nsb3NlX2JveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBiZWdpblxuICAgICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfZW5kOyBsZW5ndGggPSAwIH07XG4gICAgICBzZXRfc2l6ZSBzdGF0ZSB0cnVlOyBzZXRfc2l6ZSBzdGF0ZSBmYWxzZVxuICAgIGVuZDtcbiAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxO1xuICBlbmRcblxuXG4oKiBPcGVuIGEgdGFnLCBwdXNoaW5nIGl0IG9uIHRoZSB0YWcgc3RhY2suICopXG5sZXQgcHBfb3Blbl9zdGFnIHN0YXRlIHRhZ19uYW1lID1cbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gIGJlZ2luXG4gICAgU3RhY2sucHVzaCB0YWdfbmFtZSBzdGF0ZS5wcF90YWdfc3RhY2s7XG4gICAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgdGFnX25hbWVcbiAgZW5kO1xuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIGxldCB0b2tlbiA9IFBwX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuOyBsZW5ndGggPSAwIH1cblxuXG4oKiBDbG9zZSBhIHRhZywgcG9wcGluZyBpdCBmcm9tIHRoZSB0YWcgc3RhY2suICopXG5sZXQgcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfY2xvc2VfdGFnOyBsZW5ndGggPSAwIH07XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICAgIG1hdGNoIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGFnX3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgfCBTb21lIHRhZ19uYW1lIC0+XG4gICAgICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgdGFnX25hbWVcblxubGV0IHBwX29wZW5fdGFnIHN0YXRlIHMgPSBwcF9vcGVuX3N0YWcgc3RhdGUgKFN0cmluZ190YWcgcylcbmxldCBwcF9jbG9zZV90YWcgc3RhdGUgKCkgPSBwcF9jbG9zZV9zdGFnIHN0YXRlICgpXG5cbmxldCBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiID0gc3RhdGUucHBfcHJpbnRfdGFncyA8LSBiXG5sZXQgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiID0gc3RhdGUucHBfbWFya190YWdzIDwtIGJcbmxldCBwcF9nZXRfcHJpbnRfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX3ByaW50X3RhZ3NcbmxldCBwcF9nZXRfbWFya190YWdzIHN0YXRlICgpID0gc3RhdGUucHBfbWFya190YWdzXG5sZXQgcHBfc2V0X3RhZ3Mgc3RhdGUgYiA9XG4gIHBwX3NldF9wcmludF90YWdzIHN0YXRlIGI7IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYlxuXG5cbigqIEhhbmRsaW5nIHRhZyBoYW5kbGluZyBmdW5jdGlvbnM6IGdldC9zZXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG1hcmtfb3Blbl9zdGFnID0gc3RhdGUucHBfbWFya19vcGVuX3RhZztcbiAgbWFya19jbG9zZV9zdGFnID0gc3RhdGUucHBfbWFya19jbG9zZV90YWc7XG4gIHByaW50X29wZW5fc3RhZyA9IHN0YXRlLnBwX3ByaW50X29wZW5fdGFnO1xuICBwcmludF9jbG9zZV9zdGFnID0gc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnO1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3N0YWcgPSBtb3Q7XG4gICAgIG1hcmtfY2xvc2Vfc3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl9zdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV9zdGFnID0gcGN0O1xuICB9ID1cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBtb3Q7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIG1jdDtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gcG90O1xuICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgPC0gcGN0XG5cblxuKCogSW5pdGlhbGl6ZSBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9yaW5pdCBzdGF0ZSA9XG4gIHBwX2NsZWFyX3F1ZXVlIHN0YXRlO1xuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhdGUucHBfc2Nhbl9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfZm9ybWF0X3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF90Ym94X3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF90YWdfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX21hcmtfc3RhY2s7XG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIDA7XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gMDtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9tYXJnaW47XG4gIHBwX29wZW5fc3lzX2JveCBzdGF0ZVxuXG5sZXQgY2xlYXJfdGFnX3N0YWNrIHN0YXRlID1cbiAgU3RhY2suaXRlciAoZnVuIF8gLT4gcHBfY2xvc2VfdGFnIHN0YXRlICgpKSBzdGF0ZS5wcF90YWdfc3RhY2tcblxuXG4oKiBGbHVzaGluZyBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBiID1cbiAgY2xlYXJfdGFnX3N0YWNrIHN0YXRlO1xuICB3aGlsZSBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSBkb1xuICAgIHBwX2Nsb3NlX2JveCBzdGF0ZSAoKVxuICBkb25lO1xuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBwcF9pbmZpbml0eTtcbiAgYWR2YW5jZV9sZWZ0IHN0YXRlO1xuICBpZiBiIHRoZW4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHBwX3Jpbml0IHN0YXRlXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBmb3JtYXQgdmFsdWVzIGFuZCB1c2UgYm94ZXMuXG5cbiopXG5cbigqIFRvIGZvcm1hdCBhIHN0cmluZy4gKilcbmxldCBwcF9wcmludF9hc19zaXplIHN0YXRlIHNpemUgcyA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHNcblxuXG5sZXQgcHBfcHJpbnRfYXMgc3RhdGUgaXNpemUgcyA9XG4gIHBwX3ByaW50X2FzX3NpemUgc3RhdGUgKFNpemUub2ZfaW50IGlzaXplKSBzXG5cblxubGV0IHBwX3ByaW50X3N0cmluZyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgbWF4IChtYXggKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0KVxuICAgICAgICAgICAgICAgIChzdGF0ZS5wcF9tYXJnaW4gLyAyKSkgMSBpblxuICAgICgqIFJlYnVpbGQgaW52YXJpYW50cy4gKilcbiAgICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuZXdfbWF4X2luZGVudFxuXG5cbigqKiBHZW9tZXRyeSBmdW5jdGlvbnMgYW5kIHR5cGVzICopXG50eXBlIGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OmludDsgbWFyZ2luOiBpbnR9XG5cbmxldCBjaGVja19nZW9tZXRyeSBnZW9tZXRyeSA9XG4gIGdlb21ldHJ5Lm1heF9pbmRlbnQgPiAxXG4gICYmICBnZW9tZXRyeS5tYXJnaW4gPiBnZW9tZXRyeS5tYXhfaW5kZW50XG5cbmxldCBwcF9nZXRfbWFyZ2luIHN0YXRlICgpID0gc3RhdGUucHBfbWFyZ2luXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGlmIG1heF9pbmRlbnQgPCAyIHRoZW5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IG1heF9pbmRlbnQgPCAyXCIpXG4gIGVsc2UgaWYgbWFyZ2luIDw9IG1heF9pbmRlbnQgdGhlblxuICAgICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJGb3JtYXQucHBfc2V0X2dlb21ldHJ5OiBtYXJnaW4gPD0gbWF4X2luZGVudFwiKVxuICBlbHNlXG4gICAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47IHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnRcblxubGV0IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBpZiBjaGVja19nZW9tZXRyeSB7bWF4X2luZGVudDttYXJnaW59IHRoZW5cbiAgICBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpblxuICBlbHNlXG4gICAgKClcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9ib3hlcyA9IHBwX3NldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfYm94ZXMgPSBwcF9nZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvdmVyX21heF9ib3hlcyA9IHBwX292ZXJfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9lbGxpcHNpc190ZXh0ID0gcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9lbGxpcHNpc190ZXh0ID0gcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfcHJpbnRfdGFncyA9XG4gIHBwX3NldF9wcmludF90YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfcHJpbnRfdGFncyA9XG4gIHBwX2dldF9wcmludF90YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfbWFya190YWdzID1cbiAgcHBfc2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmtfdGFncyA9XG4gIHBwX2dldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF90YWdzID1cbiAgcHBfc2V0X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuXG5cbigqIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAqKVxuXG4oKiBUbyBmb3JtYXQgYSBsaXN0ICopXG5sZXQgcmVjIHBwX3ByaW50X2xpc3QgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAoKVxuICB8IFt2XSAtPiBwcF92IHBwZiB2XG4gIHwgdiA6OiB2cyAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF9wcmludF9saXN0IH5wcF9zZXAgcHBfdiBwcGYgdnNcblxuKCogVG8gZm9ybWF0IGZyZWUtZmxvd2luZyB0ZXh0ICopXG5sZXQgcHBfcHJpbnRfdGV4dCBwcGYgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IGxlZnQgPSByZWYgMCBpblxuICBsZXQgcmlnaHQgPSByZWYgMCBpblxuICBsZXQgZmx1c2ggKCkgPVxuICAgIHBwX3ByaW50X3N0cmluZyBwcGYgKFN0cmluZy5zdWIgcyAhbGVmdCAoIXJpZ2h0IC0gIWxlZnQpKTtcbiAgICBpbmNyIHJpZ2h0OyBsZWZ0IDo9ICFyaWdodDtcbiAgaW5cbiAgd2hpbGUgKCFyaWdodCA8PiBsZW4pIGRvXG4gICAgbWF0Y2ggcy5bIXJpZ2h0XSB3aXRoXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGZsdXNoICgpO1xuICAgICAgICBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgZmx1c2ggKCk7IHBwX3ByaW50X3NwYWNlIHBwZiAoKVxuICAgICAgKCogdGhlcmUgaXMgbm8gc3BlY2lmaWMgc3VwcG9ydCBmb3IgJ1xcdCdcbiAgICAgICAgIGFzIGl0IGlzIHVuY2xlYXIgd2hhdCBhIHJpZ2h0IHNlbWFudGljcyB3b3VsZCBiZSAqKVxuICAgICAgfCBfIC0+IGluY3IgcmlnaHRcbiAgZG9uZTtcbiAgaWYgIWxlZnQgPD4gbGVuIHRoZW4gZmx1c2ggKClcblxubGV0IHBwX3ByaW50X29wdGlvbiA/KG5vbmUgPSBmdW4gXyAoKSAtPiAoKSkgcHBfdiBwcGYgPSBmdW5jdGlvblxufCBOb25lIC0+IG5vbmUgcHBmICgpXG58IFNvbWUgdiAtPiBwcF92IHBwZiB2XG5cbmxldCBwcF9wcmludF9yZXN1bHQgfm9rIH5lcnJvciBwcGYgPSBmdW5jdGlvblxufCBPayB2IC0+IG9rIHBwZiB2XG58IEVycm9yIGUgLT4gZXJyb3IgcHBmIGVcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIGFsaWFzIHRvIGF2b2lkIHdhcm5pbmcgZm9yIGFtYmlndWl0eSBiZXR3ZWVuXG4gICBTdGRsaWIuZm9ybWF0NlxuICAgYW5kIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG5cbiAgICh0aGUgZm9ybWVyIGlzIGluIGZhY3QgYW4gYWxpYXMgZm9yIHRoZSBsYXR0ZXIsXG4gICAgYnV0IHRoZSBhbWJpZ3VpdHkgd2FybmluZyBkb2Vzbid0IGNhcmUpXG4qKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBTdGRsaWIuZm9ybWF0NlxuXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBzY2FubmVycy4gKilcblxuKCogU2Nhbm5pbmcgYnVmZmVycy4gKilcbm1vZHVsZSB0eXBlIFNDQU5OSU5HID0gc2lnXG5cbiAgdHlwZSBpbl9jaGFubmVsXG5cbiAgdHlwZSBzY2FuYnVmID0gaW5fY2hhbm5lbFxuXG4gIHR5cGUgZmlsZV9uYW1lID0gc3RyaW5nXG5cbiAgdmFsIHN0ZGluIDogaW5fY2hhbm5lbFxuICAoKiBUaGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXS5cbiAgICAgW3N0ZGliXSBpcyBlcXVpdmFsZW50IHRvIFtTY2FubmluZy5mcm9tX2NoYW5uZWwgU3RkbGliLnN0ZGluXS4gKilcblxuICB2YWwgc3RkaWIgOiBpbl9jaGFubmVsXG4gICgqIEFuIGFsaWFzIGZvciBbU2NhbmYuc3RkaW5dLCB0aGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbVxuICAgICBbU3RkbGliLnN0ZGluXS4gKilcblxuICB2YWwgbmV4dF9jaGFyIDogc2NhbmJ1ZiAtPiBjaGFyXG4gICgqIFtTY2FubmluZy5uZXh0X2NoYXIgaWJdIGFkdmFuY2UgdGhlIHNjYW5uaW5nIGJ1ZmZlciBmb3JcbiAgICAgb25lIGNoYXJhY3Rlci5cbiAgICAgSWYgbm8gbW9yZSBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQsIHNldHMgYSBlbmQgb2YgZmlsZSBjb25kaXRpb24gYW5kXG4gICAgIHJldHVybnMgJ1xcMDAwJy4gKilcblxuICB2YWwgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgOiBzY2FuYnVmIC0+IHVuaXRcbiAgKCogW1NjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliXSBtYXJrIHRoZSBjdXJyZW50X2NoYXIgYXMgYWxyZWFkeVxuICAgICBzY2FubmVkLiAqKVxuXG4gIHZhbCBwZWVrX2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogW1NjYW5uaW5nLnBlZWtfY2hhciBpYl0gcmV0dXJucyB0aGUgY3VycmVudCBjaGFyIGF2YWlsYWJsZSBpblxuICAgICB0aGUgYnVmZmVyIG9yIHJlYWRzIG9uZSBpZiBuZWNlc3NhcnkgKHdoZW4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzXG4gICAgIGFscmVhZHkgc2Nhbm5lZCkuXG4gICAgIElmIG5vIGNoYXJhY3RlciBjYW4gYmUgcmVhZCwgc2V0cyBhbiBlbmQgb2YgZmlsZSBjb25kaXRpb24gYW5kXG4gICAgIHJldHVybnMgJ1xcMDAwJy4gKilcblxuICB2YWwgY2hlY2tlZF9wZWVrX2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogU2FtZSBhcyBbU2Nhbm5pbmcucGVla19jaGFyXSBhYm92ZSBidXQgYWx3YXlzIHJldHVybnMgYSB2YWxpZCBjaGFyIG9yXG4gICAgIGZhaWxzOiBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG51bGwgY2hhciB3aGVuIHRoZSByZWFkaW5nIG1ldGhvZCBvZiB0aGVcbiAgICAgaW5wdXQgYnVmZmVyIGhhcyByZWFjaGVkIGFuIGVuZCBvZiBmaWxlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGV4Y2VwdGlvblxuICAgICBbRW5kX29mX2ZpbGVdLiAqKVxuXG4gIHZhbCBzdG9yZV9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gY2hhciAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLnN0b3JlX2NoYXIgbGltIGliIGNdIGFkZHMgW2NdIHRvIHRoZSB0b2tlbiBidWZmZXJcbiAgICAgb2YgdGhlIHNjYW5uaW5nIGJ1ZmZlciBbaWJdLiBJdCBhbHNvIGFkdmFuY2VzIHRoZSBzY2FubmluZyBidWZmZXIgZm9yXG4gICAgIG9uZSBjaGFyYWN0ZXIgYW5kIHJldHVybnMgW2xpbSAtIDFdLCBpbmRpY2F0aW5nIHRoZSBuZXcgbGltaXQgZm9yIHRoZVxuICAgICBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uICopXG5cbiAgdmFsIHNraXBfY2hhciA6IGludCAtPiBzY2FuYnVmIC0+IGludFxuICAoKiBbU2Nhbm5pbmcuc2tpcF9jaGFyIGxpbSBpYl0gaWdub3JlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuICopXG5cbiAgdmFsIGlnbm9yZV9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5pZ25vcmVfY2hhciBpYiBsaW1dIGlnbm9yZXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGFuZFxuICAgICBkZWNyZW1lbnRzIHRoZSBsaW1pdC4gKilcblxuICB2YWwgdG9rZW4gOiBzY2FuYnVmIC0+IHN0cmluZ1xuICAoKiBbU2Nhbm5pbmcudG9rZW4gaWJdIHJldHVybnMgdGhlIHN0cmluZyBzdG9yZWQgaW50byB0aGUgdG9rZW5cbiAgICAgYnVmZmVyIG9mIHRoZSBzY2FubmluZyBidWZmZXI6IGl0IHJldHVybnMgdGhlIHRva2VuIG1hdGNoZWQgYnkgdGhlXG4gICAgIGZvcm1hdC4gKilcblxuICB2YWwgcmVzZXRfdG9rZW4gOiBzY2FuYnVmIC0+IHVuaXRcbiAgKCogW1NjYW5uaW5nLnJlc2V0X3Rva2VuIGliXSByZXNldHMgdGhlIHRva2VuIGJ1ZmZlciBvZlxuICAgICB0aGUgZ2l2ZW4gc2Nhbm5pbmcgYnVmZmVyLiAqKVxuXG4gIHZhbCBjaGFyX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLmNoYXJfY291bnQgaWJdIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzXG4gICAgIHJlYWQgc28gZmFyIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgbGluZV9jb3VudCA6IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5saW5lX2NvdW50IGliXSByZXR1cm5zIHRoZSBudW1iZXIgb2YgbmV3IGxpbmVcbiAgICAgY2hhcmFjdGVycyByZWFkIHNvIGZhciBmcm9tIHRoZSBnaXZlbiBidWZmZXIuICopXG5cbiAgdmFsIHRva2VuX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLnRva2VuX2NvdW50IGliXSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdG9rZW5zIHJlYWRcbiAgICAgc28gZmFyIGZyb20gW2liXS4gKilcblxuICB2YWwgZW9mIDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5lb2YgaWJdIHJldHVybnMgdGhlIGVuZCBvZiBpbnB1dCBjb25kaXRpb25cbiAgICAgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgZW5kX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWJdIHRlc3RzIHRoZSBlbmQgb2YgaW5wdXQgY29uZGl0aW9uXG4gICAgIG9mIHRoZSBnaXZlbiBidWZmZXIgKGlmIG5vIGNoYXIgaGFzIGV2ZXIgYmVlbiByZWFkLCBhbiBhdHRlbXB0IHRvXG4gICAgIHJlYWQgb25lIGlzIHBlcmZvcm1lZCkuICopXG5cbiAgdmFsIGJlZ2lubmluZ19vZl9pbnB1dCA6IHNjYW5idWYgLT4gYm9vbFxuICAoKiBbU2Nhbm5pbmcuYmVnaW5uaW5nX29mX2lucHV0IGliXSB0ZXN0cyB0aGUgYmVnaW5uaW5nIG9mIGlucHV0XG4gICAgIGNvbmRpdGlvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiAqKVxuXG4gIHZhbCBuYW1lX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBzdHJpbmdcbiAgKCogW1NjYW5uaW5nLm5hbWVfb2ZfaW5wdXQgaWJdIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlclxuICAgICBzb3VyY2UgZm9yIGlucHV0IGJ1ZmZlciBbaWJdLiAqKVxuXG4gIHZhbCBvcGVuX2luIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIG9wZW5faW5fYmluIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZmlsZSA6IGZpbGVfbmFtZSAtPiBpbl9jaGFubmVsXG4gIHZhbCBmcm9tX2ZpbGVfYmluIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fc3RyaW5nIDogc3RyaW5nIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZnVuY3Rpb24gOiAodW5pdCAtPiBjaGFyKSAtPiBpbl9jaGFubmVsXG4gIHZhbCBmcm9tX2NoYW5uZWwgOiBTdGRsaWIuaW5fY2hhbm5lbCAtPiBpbl9jaGFubmVsXG5cbiAgdmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0XG5cbiAgdmFsIG1lbW9fZnJvbV9jaGFubmVsIDogU3RkbGliLmluX2NoYW5uZWwgLT4gaW5fY2hhbm5lbFxuICAoKiBPYnNvbGV0ZS4gKilcblxuZW5kXG5cblxubW9kdWxlIFNjYW5uaW5nIDogU0NBTk5JTkcgPSBzdHJ1Y3RcblxuICAoKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3Igc2NhbmYuICopXG5cbiAgdHlwZSBmaWxlX25hbWUgPSBzdHJpbmdcblxuICB0eXBlIGluX2NoYW5uZWxfbmFtZSA9XG4gICAgfCBGcm9tX2NoYW5uZWwgb2YgU3RkbGliLmluX2NoYW5uZWxcbiAgICB8IEZyb21fZmlsZSBvZiBmaWxlX25hbWUgKiBTdGRsaWIuaW5fY2hhbm5lbFxuICAgIHwgRnJvbV9mdW5jdGlvblxuICAgIHwgRnJvbV9zdHJpbmdcblxuXG4gIHR5cGUgaW5fY2hhbm5lbCA9IHtcbiAgICBtdXRhYmxlIGljX2VvZiA6IGJvb2w7XG4gICAgbXV0YWJsZSBpY19jdXJyZW50X2NoYXIgOiBjaGFyO1xuICAgIG11dGFibGUgaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkIDogYm9vbDtcbiAgICBtdXRhYmxlIGljX2NoYXJfY291bnQgOiBpbnQ7XG4gICAgbXV0YWJsZSBpY19saW5lX2NvdW50IDogaW50O1xuICAgIG11dGFibGUgaWNfdG9rZW5fY291bnQgOiBpbnQ7XG4gICAgbXV0YWJsZSBpY19nZXRfbmV4dF9jaGFyIDogdW5pdCAtPiBjaGFyO1xuICAgIGljX3Rva2VuX2J1ZmZlciA6IEJ1ZmZlci50O1xuICAgIGljX2lucHV0X25hbWUgOiBpbl9jaGFubmVsX25hbWU7XG4gIH1cblxuXG4gIHR5cGUgc2NhbmJ1ZiA9IGluX2NoYW5uZWxcblxuICBsZXQgbnVsbF9jaGFyID0gJ1xcMDAwJ1xuXG4gICgqIFJlYWRzIGEgbmV3IGNoYXJhY3RlciBmcm9tIGlucHV0IGJ1ZmZlci5cbiAgICAgTmV4dF9jaGFyIG5ldmVyIGZhaWxzLCBldmVuIGluIGNhc2Ugb2YgZW5kIG9mIGlucHV0OlxuICAgICBpdCB0aGVuIHNpbXBseSBzZXRzIHRoZSBlbmQgb2YgZmlsZSBjb25kaXRpb24uICopXG4gIGxldCBuZXh0X2NoYXIgaWIgPVxuICAgIHRyeVxuICAgICAgbGV0IGMgPSBpYi5pY19nZXRfbmV4dF9jaGFyICgpIGluXG4gICAgICBpYi5pY19jdXJyZW50X2NoYXIgPC0gYztcbiAgICAgIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA8LSB0cnVlO1xuICAgICAgaWIuaWNfY2hhcl9jb3VudCA8LSBzdWNjIGliLmljX2NoYXJfY291bnQ7XG4gICAgICBpZiBjID0gJ1xcbicgdGhlbiBpYi5pY19saW5lX2NvdW50IDwtIHN1Y2MgaWIuaWNfbGluZV9jb3VudDtcbiAgICAgIGMgd2l0aFxuICAgIHwgRW5kX29mX2ZpbGUgLT5cbiAgICAgIGxldCBjID0gbnVsbF9jaGFyIGluXG4gICAgICBpYi5pY19jdXJyZW50X2NoYXIgPC0gYztcbiAgICAgIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA8LSBmYWxzZTtcbiAgICAgIGliLmljX2VvZiA8LSB0cnVlO1xuICAgICAgY1xuXG5cbiAgbGV0IHBlZWtfY2hhciBpYiA9XG4gICAgaWYgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkXG4gICAgdGhlbiBpYi5pY19jdXJyZW50X2NoYXJcbiAgICBlbHNlIG5leHRfY2hhciBpYlxuXG5cbiAgKCogUmV0dXJucyBhIHZhbGlkIGN1cnJlbnQgY2hhciBmb3IgdGhlIGlucHV0IGJ1ZmZlci4gSW4gcGFydGljdWxhclxuICAgICBubyBpcnJlbGV2YW50IG51bGwgY2hhcmFjdGVyIChhcyBzZXQgYnkgW25leHRfY2hhcl0gaW4gY2FzZSBvZiBlbmRcbiAgICAgb2YgaW5wdXQpIGlzIHJldHVybmVkLCBzaW5jZSBbRW5kX29mX2ZpbGVdIGlzIHJhaXNlZCB3aGVuXG4gICAgIFtuZXh0X2NoYXJdIHNldHMgdGhlIGVuZCBvZiBmaWxlIGNvbmRpdGlvbiB3aGlsZSB0cnlpbmcgdG8gcmVhZCBhXG4gICAgIG5ldyBjaGFyYWN0ZXIuICopXG4gIGxldCBjaGVja2VkX3BlZWtfY2hhciBpYiA9XG4gICAgbGV0IGMgPSBwZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBpYi5pY19lb2YgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgICBjXG5cblxuICBsZXQgZW5kX29mX2lucHV0IGliID1cbiAgICBpZ25vcmUgKHBlZWtfY2hhciBpYik7XG4gICAgaWIuaWNfZW9mXG5cblxuICBsZXQgZW9mIGliID0gaWIuaWNfZW9mXG5cbiAgbGV0IGJlZ2lubmluZ19vZl9pbnB1dCBpYiA9IGliLmljX2NoYXJfY291bnQgPSAwXG5cbiAgbGV0IG5hbWVfb2ZfaW5wdXQgaWIgPVxuICAgIG1hdGNoIGliLmljX2lucHV0X25hbWUgd2l0aFxuICAgIHwgRnJvbV9jaGFubmVsIF9pYyAtPiBcInVubmFtZWQgU3RkbGliIGlucHV0IGNoYW5uZWxcIlxuICAgIHwgRnJvbV9maWxlIChmbmFtZSwgX2ljKSAtPiBmbmFtZVxuICAgIHwgRnJvbV9mdW5jdGlvbiAtPiBcInVubmFtZWQgZnVuY3Rpb25cIlxuICAgIHwgRnJvbV9zdHJpbmcgLT4gXCJ1bm5hbWVkIGNoYXJhY3RlciBzdHJpbmdcIlxuXG5cbiAgbGV0IGNoYXJfY291bnQgaWIgPVxuICAgIGlmIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZFxuICAgIHRoZW4gaWIuaWNfY2hhcl9jb3VudCAtIDFcbiAgICBlbHNlIGliLmljX2NoYXJfY291bnRcblxuXG4gIGxldCBsaW5lX2NvdW50IGliID0gaWIuaWNfbGluZV9jb3VudFxuXG4gIGxldCByZXNldF90b2tlbiBpYiA9IEJ1ZmZlci5yZXNldCBpYi5pY190b2tlbl9idWZmZXJcblxuICBsZXQgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWIgPSBpYi5pY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgPC0gZmFsc2VcblxuICBsZXQgdG9rZW4gaWIgPVxuICAgIGxldCB0b2tlbl9idWZmZXIgPSBpYi5pY190b2tlbl9idWZmZXIgaW5cbiAgICBsZXQgdG9rID0gQnVmZmVyLmNvbnRlbnRzIHRva2VuX2J1ZmZlciBpblxuICAgIEJ1ZmZlci5jbGVhciB0b2tlbl9idWZmZXI7XG4gICAgaWIuaWNfdG9rZW5fY291bnQgPC0gc3VjYyBpYi5pY190b2tlbl9jb3VudDtcbiAgICB0b2tcblxuXG4gIGxldCB0b2tlbl9jb3VudCBpYiA9IGliLmljX3Rva2VuX2NvdW50XG5cbiAgbGV0IHNraXBfY2hhciB3aWR0aCBpYiA9XG4gICAgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWI7XG4gICAgd2lkdGhcblxuXG4gIGxldCBpZ25vcmVfY2hhciB3aWR0aCBpYiA9IHNraXBfY2hhciAod2lkdGggLSAxKSBpYlxuXG4gIGxldCBzdG9yZV9jaGFyIHdpZHRoIGliIGMgPVxuICAgIEJ1ZmZlci5hZGRfY2hhciBpYi5pY190b2tlbl9idWZmZXIgYztcbiAgICBpZ25vcmVfY2hhciB3aWR0aCBpYlxuXG5cbiAgbGV0IGRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemUgPSAxMDI0XG5cbiAgbGV0IGNyZWF0ZSBpbmFtZSBuZXh0ID0ge1xuICAgIGljX2VvZiA9IGZhbHNlO1xuICAgIGljX2N1cnJlbnRfY2hhciA9IG51bGxfY2hhcjtcbiAgICBpY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgPSBmYWxzZTtcbiAgICBpY19jaGFyX2NvdW50ID0gMDtcbiAgICBpY19saW5lX2NvdW50ID0gMDtcbiAgICBpY190b2tlbl9jb3VudCA9IDA7XG4gICAgaWNfZ2V0X25leHRfY2hhciA9IG5leHQ7XG4gICAgaWNfdG9rZW5fYnVmZmVyID0gQnVmZmVyLmNyZWF0ZSBkZWZhdWx0X3Rva2VuX2J1ZmZlcl9zaXplO1xuICAgIGljX2lucHV0X25hbWUgPSBpbmFtZTtcbiAgfVxuXG5cbiAgbGV0IGZyb21fc3RyaW5nIHMgPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgbGV0IG5leHQgKCkgPVxuICAgICAgaWYgIWkgPj0gbGVuIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGUgZWxzZVxuICAgICAgbGV0IGMgPSBzLlshaV0gaW5cbiAgICAgIGluY3IgaTtcbiAgICAgIGMgaW5cbiAgICBjcmVhdGUgRnJvbV9zdHJpbmcgbmV4dFxuXG5cbiAgbGV0IGZyb21fZnVuY3Rpb24gPSBjcmVhdGUgRnJvbV9mdW5jdGlvblxuXG4gICgqIFNjYW5uaW5nIGZyb20gYW4gaW5wdXQgY2hhbm5lbC4gKilcblxuICAoKiBQb3NpdGlvbiBvZiB0aGUgcHJvYmxlbTpcblxuICAgICBXZSBjYW5ub3QgcHJldmVudCB0aGUgc2Nhbm5pbmcgbWVjaGFuaXNtIHRvIHVzZSBvbmUgbG9va2FoZWFkIGNoYXJhY3RlcixcbiAgICAgaWYgbmVlZGVkIGJ5IHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGZvcm1hdCBzdHJpbmcgc3BlY2lmaWNhdGlvbnMgKGUuZy4gYVxuICAgICB0cmFpbGluZyAnc2tpcCBzcGFjZScgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybWF0IHN0cmluZyk7IGluIHRoaXMgY2FzZSxcbiAgICAgdGhlIG1hbmRhdG9yeSBsb29rYWhlYWQgY2hhcmFjdGVyIGlzIGluZGVlZCByZWFkIGZyb20gdGhlIGlucHV0IGFuZCBub3RcbiAgICAgdXNlZCB0byByZXR1cm4gdGhlIHRva2VuIHJlYWQuIEl0IGlzIHRodXMgbWFuZGF0b3J5IHRvIGJlIGFibGUgdG8gc3RvcmVcbiAgICAgYW4gdW51c2VkIGxvb2thaGVhZCBjaGFyYWN0ZXIgc29tZXdoZXJlIHRvIGdldCBpdCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgIG9mIHRoZSBuZXh0IHNjYW4uXG5cbiAgICAgVG8gY2lyY3VtdmVudCB0aGlzIHByb2JsZW0sIGFsbCB0aGUgc2Nhbm5pbmcgZnVuY3Rpb25zIGdldCBhIGxvdyBsZXZlbFxuICAgICBpbnB1dCBidWZmZXIgYXJndW1lbnQgd2hlcmUgdGhleSBzdG9yZSB0aGUgbG9va2FoZWFkIGNoYXJhY3RlciB3aGVuXG4gICAgIG5lZWRlZDsgYWRkaXRpb25hbGx5LCB0aGUgaW5wdXQgYnVmZmVyIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBjaGFyYWN0ZXIgb2ZcbiAgICAgYSBzY2FubmVyLiBUaGUgW3NjYW5idWZdIGlucHV0IGJ1ZmZlcnMgYXJlIGRlZmluZWQgaW4gbW9kdWxlIHshU2Nhbm5pbmd9LlxuXG4gICAgIE5vdyB3ZSB1bmRlcnN0YW5kIHRoYXQgaXQgaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0aGF0IHJlbGF0ZWQgYW5kXG4gICAgIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gc2Nhbm5lcnMgaW5kZWVkIHJlYWQgZnJvbSB0aGUgc2FtZSBpbnB1dCBidWZmZXIuXG4gICAgIEluIGVmZmVjdCwgaWYgYSBzY2FubmVyIFtzY2FuMV0gaXMgcmVhZGluZyBmcm9tIFtpYjFdIGFuZCBzdG9yZXMgYW5cbiAgICAgdW51c2VkIGxvb2thaGVhZCBjaGFyYWN0ZXIgW2MxXSBpbnRvIGl0cyBpbnB1dCBidWZmZXIgW2liMV0sIHRoZW5cbiAgICAgYW5vdGhlciBzY2FubmVyIFtzY2FuMl0gbm90IHJlYWRpbmcgZnJvbSB0aGUgc2FtZSBidWZmZXIgW2liMV0gd2lsbCBtaXNzXG4gICAgIHRoZSBjaGFyYWN0ZXIgW2MxXSwgc2VlbWluZ2x5IHZhbmlzaGVkIGluIHRoZSBhaXIgZnJvbSB0aGUgcG9pbnQgb2Ygdmlld1xuICAgICBvZiBbc2NhbjJdLlxuXG4gICAgIFRoaXMgbWVjaGFuaXNtIHdvcmtzIHBlcmZlY3RseSB0byByZWFkIGZyb20gc3RyaW5ncywgZnJvbSBmaWxlcywgYW5kIGZyb21cbiAgICAgZnVuY3Rpb25zLCBzaW5jZSBpbiB0aG9zZSBjYXNlcywgYWxsb2NhdGluZyB0d28gYnVmZmVycyByZWFkaW5nIGZyb20gdGhlXG4gICAgIHNhbWUgc291cmNlIGlzIHVubmF0dXJhbC5cblxuICAgICBTdGlsbCwgdGhlcmUgaXMgYSBkaWZmaWN1bHR5IGluIHRoZSBjYXNlIG9mIHNjYW5uaW5nIGZyb20gYW4gaW5wdXRcbiAgICAgY2hhbm5lbC4gSW4gZWZmZWN0LCB3aGVuIHNjYW5uaW5nIGZyb20gYW4gaW5wdXQgY2hhbm5lbCBbaWNdLCB0aGlzIGNoYW5uZWxcbiAgICAgbWF5IG5vdCBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gd2l0aGluIHRoaXMgbGlicmFyeS4gSGVuY2UsIGl0IG1heSBiZVxuICAgICBzaGFyZWQgKHR3byBmdW5jdGlvbnMgb2YgdGhlIHVzZXIncyBwcm9ncmFtIG1heSBzdWNjZXNzaXZlbHkgcmVhZCBmcm9tXG4gICAgIFtpY10pLiBUaGlzIGlzIGhpZ2hseSBlcnJvciBwcm9uZSBzaW5jZSwgb25lIG9mIHRoZSBmdW5jdGlvbiBtYXkgc2VlayB0aGVcbiAgICAgaW5wdXQgY2hhbm5lbCwgd2hpbGUgdGhlIG90aGVyIGZ1bmN0aW9uIGhhcyBzdGlsbCBhbiB1bnVzZWQgbG9va2FoZWFkXG4gICAgIGNoYXJhY3RlciBpbiBpdHMgaW5wdXQgYnVmZmVyLiBJbiBjb25jbHVzaW9uLCB5b3Ugc2hvdWxkIG5ldmVyIG1peCBkaXJlY3RcbiAgICAgbG93IGxldmVsIHJlYWRpbmcgYW5kIGhpZ2ggbGV2ZWwgc2Nhbm5pbmcgZnJvbSB0aGUgc2FtZSBpbnB1dCBjaGFubmVsLlxuXG4gICopXG5cbiAgKCogUGVyZm9ybSBidWZmZXJpemVkIGlucHV0IHRvIGltcHJvdmUgZWZmaWNpZW5jeS4gKilcbiAgbGV0IGZpbGVfYnVmZmVyX3NpemUgPSByZWYgMTAyNFxuXG4gICgqIFRoZSBzY2FubmVyIGNsb3NlcyB0aGUgaW5wdXQgY2hhbm5lbCBhdCBlbmQgb2YgaW5wdXQuICopXG4gIGxldCBzY2FuX2Nsb3NlX2F0X2VuZCBpYyA9IFN0ZGxpYi5jbG9zZV9pbiBpYzsgcmFpc2UgRW5kX29mX2ZpbGVcblxuICAoKiBUaGUgc2Nhbm5lciBkb2VzIG5vdCBjbG9zZSB0aGUgaW5wdXQgY2hhbm5lbCBhdCBlbmQgb2YgaW5wdXQ6XG4gICAgIGl0IGp1c3QgcmFpc2VzIFtFbmRfb2ZfZmlsZV0uICopXG4gIGxldCBzY2FuX3JhaXNlX2F0X2VuZCBfaWMgPSByYWlzZSBFbmRfb2ZfZmlsZVxuXG4gIGxldCBmcm9tX2ljIHNjYW5fY2xvc2VfaWMgaW5hbWUgaWMgPVxuICAgIGxldCBsZW4gPSAhZmlsZV9idWZmZXJfc2l6ZSBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgbGVuIGluXG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCBsaW0gPSByZWYgMCBpblxuICAgIGxldCBlb2YgPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBpZiAhaSA8ICFsaW0gdGhlbiBiZWdpbiBsZXQgYyA9IEJ5dGVzLmdldCBidWYgIWkgaW4gaW5jciBpOyBjIGVuZCBlbHNlXG4gICAgICBpZiAhZW9mIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGUgZWxzZSBiZWdpblxuICAgICAgICBsaW0gOj0gaW5wdXQgaWMgYnVmIDAgbGVuO1xuICAgICAgICBpZiAhbGltID0gMCB0aGVuIGJlZ2luIGVvZiA6PSB0cnVlOyBzY2FuX2Nsb3NlX2ljIGljIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgaSA6PSAxO1xuICAgICAgICAgIEJ5dGVzLmdldCBidWYgMFxuICAgICAgICBlbmRcbiAgICAgIGVuZCBpblxuICAgIGNyZWF0ZSBpbmFtZSBuZXh0XG5cblxuICBsZXQgZnJvbV9pY19jbG9zZV9hdF9lbmQgPSBmcm9tX2ljIHNjYW5fY2xvc2VfYXRfZW5kXG4gIGxldCBmcm9tX2ljX3JhaXNlX2F0X2VuZCA9IGZyb21faWMgc2Nhbl9yYWlzZV9hdF9lbmRcblxuICAoKiBUaGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXS5cbiAgICAgT25lIGNvdWxkIHRyeSB0byBkZWZpbmUgW3N0ZGliXSBhcyBhIHNjYW5uaW5nIGJ1ZmZlciByZWFkaW5nIGEgY2hhcmFjdGVyXG4gICAgIGF0IGEgdGltZSAobm8gYnVmZmVyaXphdGlvbiBhdCBhbGwpLCBidXQgdW5mb3J0dW5hdGVseSB0aGUgdG9wLWxldmVsXG4gICAgIGludGVyYWN0aW9uIHdvdWxkIGJlIHdyb25nLiBUaGlzIGlzIGR1ZSB0byBzb21lIGtpbmQgb2ZcbiAgICAgJ3JhY2UgY29uZGl0aW9uJyB3aGVuIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXSxcbiAgICAgc2luY2UgdGhlIGludGVyYWN0aXZlIGNvbXBpbGVyIGFuZCBbU2NhbmYuc2NhbmZdIHdpbGwgc2ltdWx0YW5lb3VzbHlcbiAgICAgcmVhZCB0aGUgbWF0ZXJpYWwgdGhleSBuZWVkIGZyb20gW1N0ZGxpYi5zdGRpbl07IHRoZW4sIGNvbmZ1c2lvblxuICAgICB3aWxsIHJlc3VsdCBmcm9tIHdoYXQgc2hvdWxkIGJlIHJlYWQgYnkgdGhlIHRvcC1sZXZlbCBhbmQgd2hhdCBzaG91bGQgYmVcbiAgICAgcmVhZCBieSBbU2NhbmYuc2NhbmZdLlxuICAgICBUaGlzIGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCBieSB0aGUgb25lIGNoYXJhY3RlciBsb29rYWhlYWQgdGhhdFxuICAgICBbU2NhbmYuc2NhbmZdIGlzIHNvbWV0aW1lcyBvYmxpZ2VkIHRvIG1haW50YWluOiB0aGUgbG9va2FoZWFkIGNoYXJhY3RlclxuICAgICB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgW1NjYW5mLnNjYW5mXSBlbnRyeSwgc2VlbWluZ2x5IGNvbWluZyBmcm9tXG4gICAgIG5vd2hlcmUuXG4gICAgIEFsc28gbm8gW0VuZF9vZl9maWxlXSBpcyByYWlzZWQgd2hlbiByZWFkaW5nIGZyb20gc3RkaW46IGlmIG5vdCBlbm91Z2hcbiAgICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gcmVhZCwgd2Ugc2ltcGx5IGFzayB0byByZWFkIG1vcmUuICopXG4gIGxldCBzdGRpbiA9XG4gICAgZnJvbV9pYyBzY2FuX3JhaXNlX2F0X2VuZFxuICAgICAgKEZyb21fZmlsZSAoXCItXCIsIFN0ZGxpYi5zdGRpbikpIFN0ZGxpYi5zdGRpblxuXG5cbiAgbGV0IHN0ZGliID0gc3RkaW5cblxuICBsZXQgb3Blbl9pbl9maWxlIG9wZW5faW4gZm5hbWUgPVxuICAgIG1hdGNoIGZuYW1lIHdpdGhcbiAgICB8IFwiLVwiIC0+IHN0ZGluXG4gICAgfCBmbmFtZSAtPlxuICAgICAgbGV0IGljID0gb3Blbl9pbiBmbmFtZSBpblxuICAgICAgZnJvbV9pY19jbG9zZV9hdF9lbmQgKEZyb21fZmlsZSAoZm5hbWUsIGljKSkgaWNcblxuXG4gIGxldCBvcGVuX2luID0gb3Blbl9pbl9maWxlIFN0ZGxpYi5vcGVuX2luXG4gIGxldCBvcGVuX2luX2JpbiA9IG9wZW5faW5fZmlsZSBTdGRsaWIub3Blbl9pbl9iaW5cblxuICBsZXQgZnJvbV9maWxlID0gb3Blbl9pblxuICBsZXQgZnJvbV9maWxlX2JpbiA9IG9wZW5faW5fYmluXG5cbiAgbGV0IGZyb21fY2hhbm5lbCBpYyA9XG4gICAgZnJvbV9pY19yYWlzZV9hdF9lbmQgKEZyb21fY2hhbm5lbCBpYykgaWNcblxuXG4gIGxldCBjbG9zZV9pbiBpYiA9XG4gICAgbWF0Y2ggaWIuaWNfaW5wdXRfbmFtZSB3aXRoXG4gICAgfCBGcm9tX2NoYW5uZWwgaWMgLT5cbiAgICAgIFN0ZGxpYi5jbG9zZV9pbiBpY1xuICAgIHwgRnJvbV9maWxlIChfZm5hbWUsIGljKSAtPiBTdGRsaWIuY2xvc2VfaW4gaWNcbiAgICB8IEZyb21fZnVuY3Rpb24gfCBGcm9tX3N0cmluZyAtPiAoKVxuXG5cbiAgKCpcbiAgICAgT2Jzb2xldGU6IGEgbWVtbyBbZnJvbV9jaGFubmVsXSB2ZXJzaW9uIHRvIGJ1aWxkIGEgW1NjYW5uaW5nLmluX2NoYW5uZWxdXG4gICAgIHNjYW5uaW5nIGJ1ZmZlciBvdXQgb2YgYSBbU3RkbGliLmluX2NoYW5uZWxdLlxuICAgICBUaGlzIGZ1bmN0aW9uIHdhcyB1c2VkIHRvIHRyeSB0byBwcmVzZXJ2ZSB0aGUgc2Nhbm5pbmdcbiAgICAgc2VtYW50aWNzIGZvciB0aGUgKG5vdyBvYnNvbGV0ZSkgZnVuY3Rpb24gW2ZzY2FuZl0uXG4gICAgIEdpdmVuIHRoYXQgYWxsIHNjYW5uZXIgbXVzdCByZWFkIGZyb20gYSBbU2Nhbm5pbmcuaW5fY2hhbm5lbF0gc2Nhbm5pbmdcbiAgICAgYnVmZmVyLCBbZnNjYW5mXSBtdXN0IHJlYWQgZnJvbSBvbmUhXG4gICAgIE1vcmUgcHJlY2lzZWx5LCBnaXZlbiBbaWNdLCBhbGwgc3VjY2Vzc2l2ZSBjYWxscyBbZnNjYW5mIGljXSBtdXN0IHJlYWRcbiAgICAgZnJvbSB0aGUgc2FtZSBzY2FubmluZyBidWZmZXIuXG4gICAgIFRoaXMgb2JsaWdlZCB0aGlzIGxpYnJhcnkgdG8gYWxsb2NhdGVkIHNjYW5uaW5nIGJ1ZmZlcnMgdGhhdCB3ZXJlXG4gICAgIG5vdCBwcm9wZXJseSBnYXJiYWdlIGNvbGxlY3RhYmxlLCBoZW5jZSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcy5cbiAgICAgSWYgeW91IG5lZWQgdG8gcmVhZCBmcm9tIGEgW1N0ZGxpYi5pbl9jaGFubmVsXSBpbnB1dCBjaGFubmVsXG4gICAgIFtpY10sIHNpbXBseSBkZWZpbmUgYSBbU2Nhbm5pbmcuaW5fY2hhbm5lbF0gZm9ybWF0dGVkIGlucHV0IGNoYW5uZWwgYXMgaW5cbiAgICAgW2xldCBpYiA9IFNjYW5uaW5nLmZyb21fY2hhbm5lbCBpY10sIHRoZW4gdXNlIFtTY2FuZi5ic2NhbmYgaWJdIGFzIHVzdWFsLlxuICAqKVxuICBsZXQgbWVtb19mcm9tX2ljID1cbiAgICBsZXQgbWVtbyA9IHJlZiBbXSBpblxuICAgIChmdW4gc2Nhbl9jbG9zZV9pYyBpYyAtPlxuICAgICB0cnkgTGlzdC5hc3NxIGljICFtZW1vIHdpdGhcbiAgICAgfCBOb3RfZm91bmQgLT5cbiAgICAgICBsZXQgaWIgPVxuICAgICAgICAgZnJvbV9pYyBzY2FuX2Nsb3NlX2ljIChGcm9tX2NoYW5uZWwgaWMpIGljIGluXG4gICAgICAgbWVtbyA6PSAoaWMsIGliKSA6OiAhbWVtbztcbiAgICAgICBpYilcblxuXG4gICgqIE9ic29sZXRlOiBzZWUgeyFtZW1vX2Zyb21faWN9IGFib3ZlLiAqKVxuICBsZXQgbWVtb19mcm9tX2NoYW5uZWwgPSBtZW1vX2Zyb21faWMgc2Nhbl9yYWlzZV9hdF9lbmRcblxuZW5kXG5cblxuKCogRm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucy4gKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIHNjYW5uZXIgPVxuICAgICAoJ2EsIFNjYW5uaW5nLmluX2NoYW5uZWwsICdiLCAnYywgJ2EgLT4gJ2QsICdkKSBmb3JtYXQ2IC0+ICdjXG5cblxuKCogUmVwb3J0aW5nIGVycm9ycy4gKilcbmV4Y2VwdGlvbiBTY2FuX2ZhaWx1cmUgb2Ygc3RyaW5nXG5cbmxldCBiYWRfaW5wdXQgcyA9IHJhaXNlIChTY2FuX2ZhaWx1cmUgcylcblxubGV0IGJhZF9pbnB1dF9lc2NhcGUgYyA9XG4gIGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJpbGxlZ2FsIGVzY2FwZSBjaGFyYWN0ZXIgJUNcIiBjKVxuXG5cbmxldCBiYWRfdG9rZW5fbGVuZ3RoIG1lc3NhZ2UgPVxuICBiYWRfaW5wdXRcbiAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICBcInNjYW5uaW5nIG9mICVzIGZhaWxlZDogXFxcbiAgICAgICAgdGhlIHNwZWNpZmllZCBsZW5ndGggd2FzIHRvbyBzaG9ydCBmb3IgdG9rZW5cIlxuICAgICAgIG1lc3NhZ2UpXG5cblxubGV0IGJhZF9lbmRfb2ZfaW5wdXQgbWVzc2FnZSA9XG4gIGJhZF9pbnB1dFxuICAgIChQcmludGYuc3ByaW50ZlxuICAgICAgIFwic2Nhbm5pbmcgb2YgJXMgZmFpbGVkOiBcXFxuICAgICAgICBwcmVtYXR1cmUgZW5kIG9mIGZpbGUgb2NjdXJyZWQgYmVmb3JlIGVuZCBvZiB0b2tlblwiXG4gICAgICAgbWVzc2FnZSlcblxuXG5sZXQgYmFkX2Zsb2F0ICgpID1cbiAgYmFkX2lucHV0IFwibm8gZG90IG9yIGV4cG9uZW50IHBhcnQgZm91bmQgaW4gZmxvYXQgdG9rZW5cIlxuXG5cbmxldCBiYWRfaGV4X2Zsb2F0ICgpID1cbiAgYmFkX2lucHV0IFwibm90IGEgdmFsaWQgZmxvYXQgaW4gaGV4YWRlY2ltYWwgbm90YXRpb25cIlxuXG5cbmxldCBjaGFyYWN0ZXJfbWlzbWF0Y2hfZXJyIGMgY2kgPVxuICBQcmludGYuc3ByaW50ZiBcImxvb2tpbmcgZm9yICVDLCBmb3VuZCAlQ1wiIGMgY2lcblxuXG5sZXQgY2hhcmFjdGVyX21pc21hdGNoIGMgY2kgPVxuICBiYWRfaW5wdXQgKGNoYXJhY3Rlcl9taXNtYXRjaF9lcnIgYyBjaSlcblxuXG5sZXQgcmVjIHNraXBfd2hpdGVzIGliID1cbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgbm90IChTY2FubmluZy5lb2YgaWIpIHRoZW4gYmVnaW5cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICcgJyB8ICdcXHQnIHwgJ1xcbicgfCAnXFxyJyAtPlxuICAgICAgU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWI7IHNraXBfd2hpdGVzIGliXG4gICAgfCBfIC0+ICgpXG4gIGVuZFxuXG5cbigqIENoZWNraW5nIHRoYXQgW2NdIGlzIGluZGVlZCBpbiB0aGUgaW5wdXQsIHRoZW4gc2tpcHMgaXQuXG4gICBJbiB0aGlzIGNhc2UsIHRoZSBjaGFyYWN0ZXIgW2NdIGhhcyBiZWVuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHRoZVxuICAgZm9ybWF0IGFzIGJlaW5nIG1hbmRhdG9yeSBpbiB0aGUgaW5wdXQ7IGhlbmNlIHdlIHNob3VsZCBmYWlsIHdpdGhcbiAgIFtFbmRfb2ZfZmlsZV0gaW4gY2FzZSBvZiBlbmRfb2ZfaW5wdXQuXG4gICAoUmVtZW1iZXIgdGhhdCBbU2Nhbl9mYWlsdXJlXSBpcyByYWlzZWQgb25seSB3aGVuICh3ZSBjYW4gcHJvdmUgYnlcbiAgIGV2aWRlbmNlKSB0aGF0IHRoZSBpbnB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgZm9ybWF0IHN0cmluZyBnaXZlbi4gV2UgbXVzdFxuICAgdGh1cyBkaWZmZXJlbnRpYXRlIFtFbmRfb2ZfZmlsZV0gYXMgYW4gZXJyb3IgZHVlIHRvIGxhY2sgb2YgaW5wdXQsIGFuZFxuICAgW1NjYW5fZmFpbHVyZV0gd2hpY2ggaXMgZHVlIHRvIHByb3ZhYmx5IHdyb25nIGlucHV0LiBJIGFtIG5vdCBzdXJlIHRoaXMgaXNcbiAgIHdvcnRoIHRoZSBidXJkZW46IGl0IGlzIGNvbXBsZXggYW5kIHNvbWVob3cgc3VibGltaW5hbDsgc2hvdWxkIGJlIGNsZWFyZXJcbiAgIHRvIGZhaWwgd2l0aCBTY2FuX2ZhaWx1cmUgXCJOb3QgZW5vdWdoIGlucHV0IHRvIGNvbXBsZXRlIHNjYW5uaW5nXCIhKVxuXG4gICBUaGF0J3Mgd2h5LCB3YWl0aW5nIGZvciBhIGJldHRlciBzb2x1dGlvbiwgd2UgdXNlIGNoZWNrZWRfcGVla19jaGFyIGhlcmUuXG4gICBXZSBhcmUgYWxzbyBjYXJlZnVsIHRvIHRyZWF0IFwiXFxyXFxuXCIgaW4gdGhlIGlucHV0IGFzIGFuIGVuZCBvZiBsaW5lIG1hcmtlcjpcbiAgIGl0IGFsd2F5cyBtYXRjaGVzIGEgJ1xcbicgc3BlY2lmaWNhdGlvbiBpbiB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZy4gKilcbmxldCByZWMgY2hlY2tfY2hhciBpYiBjID1cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJyAnIC0+IHNraXBfd2hpdGVzIGliXG4gIHwgJ1xcbicgLT4gY2hlY2tfbmV3bGluZSBpYlxuICB8IGMgLT4gY2hlY2tfdGhpc19jaGFyIGliIGNcblxuYW5kIGNoZWNrX3RoaXNfY2hhciBpYiBjID1cbiAgbGV0IGNpID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgaWYgY2kgPSBjIHRoZW4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWIgZWxzZVxuICBjaGFyYWN0ZXJfbWlzbWF0Y2ggYyBjaVxuXG5hbmQgY2hlY2tfbmV3bGluZSBpYiA9XG4gIGxldCBjaSA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGNpIHdpdGhcbiAgfCAnXFxuJyAtPiBTY2FubmluZy5pbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYlxuICB8ICdcXHInIC0+IFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliOyBjaGVja190aGlzX2NoYXIgaWIgJ1xcbidcbiAgfCBfIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFxuJyBjaVxuXG5cbigqIEV4dHJhY3RpbmcgdG9rZW5zIGZyb20gdGhlIG91dHB1dCB0b2tlbiBidWZmZXIuICopXG5cbmxldCB0b2tlbl9jaGFyIGliID0gKFNjYW5uaW5nLnRva2VuIGliKS5bMF1cblxubGV0IHRva2VuX3N0cmluZyA9IFNjYW5uaW5nLnRva2VuXG5cbmxldCB0b2tlbl9ib29sIGliID1cbiAgbWF0Y2ggU2Nhbm5pbmcudG9rZW4gaWIgd2l0aFxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBzIC0+IGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJpbnZhbGlkIGJvb2xlYW4gJyVzJ1wiIHMpXG5cblxuKCogVGhlIHR5cGUgb2YgaW50ZWdlciBjb252ZXJzaW9ucy4gKilcbnR5cGUgaW50ZWdlcl9jb252ZXJzaW9uID1cbiAgfCBCX2NvbnZlcnNpb24gKCogVW5zaWduZWQgYmluYXJ5IGNvbnZlcnNpb24gKilcbiAgfCBEX2NvbnZlcnNpb24gKCogU2lnbmVkIGRlY2ltYWwgY29udmVyc2lvbiAqKVxuICB8IElfY29udmVyc2lvbiAoKiBTaWduZWQgaW50ZWdlciBjb252ZXJzaW9uICopXG4gIHwgT19jb252ZXJzaW9uICgqIFVuc2lnbmVkIG9jdGFsIGNvbnZlcnNpb24gKilcbiAgfCBVX2NvbnZlcnNpb24gKCogVW5zaWduZWQgZGVjaW1hbCBjb252ZXJzaW9uICopXG4gIHwgWF9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGhleGFkZWNpbWFsIGNvbnZlcnNpb24gKilcblxuXG5sZXQgaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgPSBmdW5jdGlvblxuICB8ICdiJyAtPiBCX2NvbnZlcnNpb25cbiAgfCAnZCcgLT4gRF9jb252ZXJzaW9uXG4gIHwgJ2knIC0+IElfY29udmVyc2lvblxuICB8ICdvJyAtPiBPX2NvbnZlcnNpb25cbiAgfCAndScgLT4gVV9jb252ZXJzaW9uXG4gIHwgJ3gnIHwgJ1gnIC0+IFhfY29udmVyc2lvblxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cblxuKCogRXh0cmFjdCBhbiBpbnRlZ2VyIGxpdGVyYWwgdG9rZW4uXG4gICBTaW5jZSB0aGUgZnVuY3Rpb25zIFN0ZGxpYi4qaW50Kl9vZl9zdHJpbmcgZG8gbm90IGFjY2VwdCBhIGxlYWRpbmcgKyxcbiAgIHdlIHNraXAgaXQgaWYgbmVjZXNzYXJ5LiAqKVxubGV0IHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIgPVxuICBsZXQgdG9rID1cbiAgICBtYXRjaCBjb252IHdpdGhcbiAgICB8IERfY29udmVyc2lvbiB8IElfY29udmVyc2lvbiAtPiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgVV9jb252ZXJzaW9uIC0+IFwiMHVcIiBeIFNjYW5uaW5nLnRva2VuIGliXG4gICAgfCBPX2NvbnZlcnNpb24gLT4gXCIwb1wiIF4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IFhfY29udmVyc2lvbiAtPiBcIjB4XCIgXiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgQl9jb252ZXJzaW9uIC0+IFwiMGJcIiBeIFNjYW5uaW5nLnRva2VuIGliIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCB0b2sgaW5cbiAgaWYgbCA9IDAgfHwgdG9rLlswXSA8PiAnKycgdGhlbiB0b2sgZWxzZSBTdHJpbmcuc3ViIHRvayAxIChsIC0gMSlcblxuXG4oKiBBbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBudW1iZXIgcmFpc2UgdGhlIGV4Y2VwdGlvblxuICAgRmFpbHVyZSB3aGVuIHRoZSBjb252ZXJzaW9uIGlzIG5vdCBwb3NzaWJsZS5cbiAgIFRoaXMgZXhjZXB0aW9uIGlzIHRoZW4gdHJhcHBlZCBpbiBba3NjYW5mXS4gKilcbmxldCB0b2tlbl9pbnQgY29udiBpYiA9IGludF9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5cbmxldCB0b2tlbl9mbG9hdCBpYiA9IGZsb2F0X29mX3N0cmluZyAoU2Nhbm5pbmcudG9rZW4gaWIpXG5cbigqIFRvIHNjYW4gbmF0aXZlIGludHMsIGludDMyIGFuZCBpbnQ2NCBpbnRlZ2Vycy5cbiAgIFdlIGNhbm5vdCBhY2Nlc3MgdG8gY29udmVyc2lvbnMgdG8vZnJvbSBzdHJpbmdzIGZvciB0aG9zZSB0eXBlcyxcbiAgIE5hdGl2ZWludC5vZl9zdHJpbmcsIEludDMyLm9mX3N0cmluZywgYW5kIEludDY0Lm9mX3N0cmluZyxcbiAgIHNpbmNlIHRob3NlIG1vZHVsZXMgYXJlIG5vdCBhdmFpbGFibGUgdG8gW1NjYW5mXS5cbiAgIEhvd2V2ZXIsIHdlIGNhbiBiaW5kIGFuZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgcHJpbWl0aXZlcyB0aGF0IGFyZVxuICAgYXZhaWxhYmxlIGluIHRoZSBydW50aW1lLiAqKVxuZXh0ZXJuYWwgbmF0aXZlaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBuYXRpdmVpbnRcbiAgPSBcImNhbWxfbmF0aXZlaW50X29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIGludDMyX29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQzMlxuICA9IFwiY2FtbF9pbnQzMl9vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCBpbnQ2NF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50NjRcbiAgPSBcImNhbWxfaW50NjRfb2Zfc3RyaW5nXCJcblxuXG5sZXQgdG9rZW5fbmF0aXZlaW50IGNvbnYgaWIgPSBuYXRpdmVpbnRfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxubGV0IHRva2VuX2ludDMyIGNvbnYgaWIgPSBpbnQzMl9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5sZXQgdG9rZW5faW50NjQgY29udiBpYiA9IGludDY0X29mX3N0cmluZyAodG9rZW5faW50X2xpdGVyYWwgY29udiBpYilcblxuKCogU2Nhbm5pbmcgbnVtYmVycy4gKilcblxuKCogRGlnaXRzIHNjYW5uaW5nIGZ1bmN0aW9ucyBzdXBwb3NlIHRoYXQgb25lIGNoYXJhY3RlciBoYXMgYmVlbiBjaGVja2VkIGFuZFxuICAgaXMgYXZhaWxhYmxlLCBzaW5jZSB0aGV5IHJldHVybiBhdCBlbmQgb2YgZmlsZSB3aXRoIHRoZSBjdXJyZW50bHkgZm91bmRcbiAgIHRva2VuIHNlbGVjdGVkLlxuXG4gICBQdXQgaXQgaW4gYW5vdGhlciB3YXksIHRoZSBkaWdpdHMgc2Nhbm5pbmcgZnVuY3Rpb25zIHNjYW4gZm9yIGEgcG9zc2libHlcbiAgIGVtcHR5IHNlcXVlbmNlIG9mIGRpZ2l0cywgKGhlbmNlLCBhIHN1Y2Nlc3NmdWwgc2Nhbm5pbmcgZnJvbSBvbmUgb2YgdGhvc2VcbiAgIGZ1bmN0aW9ucyBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSB0b2tlbiBpcyBhIHdlbGwtZm9ybWVkIG51bWJlcjogdG8gZ2V0IGFcbiAgIHRydWUgbnVtYmVyLCBpdCBpcyBtYW5kYXRvcnkgdG8gY2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgdmFsaWQgZGlnaXQgaXNcbiAgIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyBvbmUgb2YgdGhlIGRpZ2l0IHNjYW5uaW5nIGZ1bmN0aW9ucykuICopXG5cbigqIFRoZSBkZWNpbWFsIGNhc2UgaXMgdHJlYXRlZCBlc3BlY2lhbGx5IGZvciBvcHRpbWl6YXRpb24gcHVycG9zZXMuICopXG5sZXQgcmVjIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG4gIHwgJ18nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG5sZXQgc2Nhbl9kZWNpbWFsX2RpZ2l0X3BsdXMgd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiZGVjaW1hbCBkaWdpdHNcIiBlbHNlXG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJzAnIC4uICc5JyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG4gIHwgYyAtPlxuICAgIGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJjaGFyYWN0ZXIgJUMgaXMgbm90IGEgZGVjaW1hbCBkaWdpdFwiIGMpXG5cblxuKCogVG8gc2NhbiBudW1iZXJzIGZyb20gb3RoZXIgYmFzZXMsIHdlIHVzZSBhIHByZWRpY2F0ZSBhcmd1bWVudCB0b1xuICAgc2NhbiBkaWdpdHMuICopXG5sZXQgc2Nhbl9kaWdpdF9zdGFyIGRpZ2l0cCB3aWR0aCBpYiA9XG4gIGxldCByZWMgc2Nhbl9kaWdpdHMgd2lkdGggaWIgPVxuICAgIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8IGMgd2hlbiBkaWdpdHAgYyAtPlxuICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICBzY2FuX2RpZ2l0cyB3aWR0aCBpYlxuICAgIHwgJ18nIC0+XG4gICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYiBpblxuICAgICAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcbiAgICB8IF8gLT4gd2lkdGggaW5cbiAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9kaWdpdF9wbHVzIGJhc2lzIGRpZ2l0cCB3aWR0aCBpYiA9XG4gICgqIEVuc3VyZSB3ZSBoYXZlIGdvdCBlbm91Z2ggd2lkdGggbGVmdCxcbiAgICAgYW5kIHJlYWQgYXQgbGVhc3Qgb25lIGRpZ2l0LiAqKVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiZGlnaXRzXCIgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIGlmIGRpZ2l0cCBjIHRoZW5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RpZ2l0X3N0YXIgZGlnaXRwIHdpZHRoIGliXG4gIGVsc2VcbiAgICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiY2hhcmFjdGVyICVDIGlzIG5vdCBhIHZhbGlkICVzIGRpZ2l0XCIgYyBiYXNpcylcblxuXG5sZXQgaXNfYmluYXJ5X2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzEnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5fYmluYXJ5X2ludCA9IHNjYW5fZGlnaXRfcGx1cyBcImJpbmFyeVwiIGlzX2JpbmFyeV9kaWdpdFxuXG5sZXQgaXNfb2N0YWxfZGlnaXQgPSBmdW5jdGlvblxuICB8ICcwJyAuLiAnNycgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG5sZXQgc2Nhbl9vY3RhbF9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJvY3RhbFwiIGlzX29jdGFsX2RpZ2l0XG5cbmxldCBpc19oZXhhX2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG5sZXQgc2Nhbl9oZXhhZGVjaW1hbF9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJoZXhhZGVjaW1hbFwiIGlzX2hleGFfZGlnaXRcblxuKCogU2NhbiBhIGRlY2ltYWwgaW50ZWdlci4gKilcbmxldCBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50ID0gc2Nhbl9kZWNpbWFsX2RpZ2l0X3BsdXNcblxubGV0IHNjYW5fc2lnbiB3aWR0aCBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJysnIC0+IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgY1xuICB8ICctJyAtPiBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGNcbiAgfCBfIC0+IHdpZHRoXG5cblxubGV0IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgc2Nhbl91bnNpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuXG5cbigqIFNjYW4gYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IGNvdWxkIGJlIGdpdmVuIGluIGFueSAoY29tbW9uKSBiYXNpcy5cbiAgIElmIGRpZ2l0cyBhcmUgcHJlZml4ZWQgYnkgb25lIG9mIDB4LCAwWCwgMG8sIG9yIDBiLCB0aGUgbnVtYmVyIGlzXG4gICBhc3N1bWVkIHRvIGJlIHdyaXR0ZW4gcmVzcGVjdGl2ZWx5IGluIGhleGFkZWNpbWFsLCBoZXhhZGVjaW1hbCxcbiAgIG9jdGFsLCBvciBiaW5hcnkuICopXG5sZXQgc2Nhbl91bnNpZ25lZF9pbnQgd2lkdGggaWIgPVxuICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgYmVnaW4gbWF0Y2ggYyB3aXRoXG4gICAgfCAneCcgfCAnWCcgLT4gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8ICdvJyAtPiBzY2FuX29jdGFsX2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICAgIHwgJ2InIC0+IHNjYW5fYmluYXJ5X2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICAgIHwgXyAtPiBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYiBlbmRcbiAgfCBfIC0+IHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9pbnQgd2lkdGggaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgc2Nhbl91bnNpZ25lZF9pbnQgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9pbnRfY29udmVyc2lvbiBjb252IHdpZHRoIGliID1cbiAgbWF0Y2ggY29udiB3aXRoXG4gIHwgQl9jb252ZXJzaW9uIC0+IHNjYW5fYmluYXJ5X2ludCB3aWR0aCBpYlxuICB8IERfY29udmVyc2lvbiAtPiBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gIHwgSV9jb252ZXJzaW9uIC0+IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfaW50IHdpZHRoIGliXG4gIHwgT19jb252ZXJzaW9uIC0+IHNjYW5fb2N0YWxfaW50IHdpZHRoIGliXG4gIHwgVV9jb252ZXJzaW9uIC0+IHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgfCBYX2NvbnZlcnNpb24gLT4gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG4oKiBTY2FubmluZyBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAqKVxuXG4oKiBGcmFjdGlvbmFsIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSByZWR1Y2VkIHRvIDAgZGlnaXRzLiAqKVxubGV0IHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gIHwgXyAtPiB3aWR0aFxuXG5cbigqIEV4cCBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVkdWNlZCB0byAwIGRpZ2l0cy4gKilcbmxldCBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJ2UnIHwgJ0UnIGFzIGMgLT5cbiAgICBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gIHwgXyAtPiB3aWR0aFxuXG5cbigqIFNjYW4gdGhlIGludGVnZXIgcGFydCBvZiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgKG5vdCB1c2luZyB0aGVcbiAgIE9DYW1sIGxleGljYWwgY29udmVudGlvbiBzaW5jZSB0aGUgaW50ZWdlciBwYXJ0IGNhbiBiZSBlbXB0eSk6XG4gICBhbiBvcHRpb25hbCBzaWduLCBmb2xsb3dlZCBieSBhIHBvc3NpYmx5IGVtcHR5IHNlcXVlbmNlIG9mIGRlY2ltYWxcbiAgIGRpZ2l0cyAoZS5nLiAtLjEpLiAqKVxubGV0IHNjYW5faW50ZWdlcl9wYXJ0IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG5cblxuKCpcbiAgIEZvciB0aGUgdGltZSBiZWluZyB3ZSBoYXZlIChhcyBmb3VuZCBpbiBzY2FuZi5tbGkpOlxuICAgdGhlIGZpZWxkIHdpZHRoIGlzIGNvbXBvc2VkIG9mIGFuIG9wdGlvbmFsIGludGVnZXIgbGl0ZXJhbFxuICAgaW5kaWNhdGluZyB0aGUgbWF4aW1hbCB3aWR0aCBvZiB0aGUgdG9rZW4gdG8gcmVhZC5cbiAgIFVuZm9ydHVuYXRlbHksIHRoZSB0eXBlLWNoZWNrZXIgbGV0IHRoZSB1c2VyIHdyaXRlIGFuIG9wdGlvbmFsIHByZWNpc2lvbixcbiAgIHNpbmNlIHRoaXMgaXMgdmFsaWQgZm9yIHByaW50ZiBmb3JtYXQgc3RyaW5ncy5cblxuICAgVGh1cywgdGhlIG5leHQgc3RlcCBmb3IgU2NhbmYgaXMgdG8gc3VwcG9ydCBhIGZ1bGwgd2lkdGggYW5kIHByZWNpc2lvblxuICAgaW5kaWNhdGlvbiwgbW9yZSBvciBsZXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmb3IgcHJpbnRmLCBwb3NzaWJseSBleHRlbmRlZFxuICAgdG8gdGhlIHNwZWNpZmljYXRpb24gb2YgYSBbbWF4LCBtaW5dIHJhbmdlIGZvciB0aGUgd2lkdGggb2YgdGhlIHRva2VuIHJlYWRcbiAgIGZvciBzdHJpbmdzLiBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHNwZWMgZm9yIHNjYW5mLm1saTpcblxuICAgVGhlIG9wdGlvbmFsIFt3aWR0aF0gaXMgYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBtYXhpbWFsXG4gICB3aWR0aCBvZiB0aGUgdG9rZW4gcmVhZC4gRm9yIGluc3RhbmNlLCBbJTZkXSByZWFkcyBhbiBpbnRlZ2VyLFxuICAgaGF2aW5nIGF0IG1vc3QgNiBjaGFyYWN0ZXJzLlxuXG4gICBUaGUgb3B0aW9uYWwgW3ByZWNpc2lvbl0gaXMgYSBkb3QgWy5dIGZvbGxvd2VkIGJ5IGFuIGludGVnZXI6XG5cbiAgIC0gaW4gdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlciBjb252ZXJzaW9ucyAoWyVmXSwgWyVlXSwgWyVnXSwgWyVGXSwgWyVFXSxcbiAgIGFuZCBbJUZdIGNvbnZlcnNpb25zLCB0aGUgW3ByZWNpc2lvbl0gaW5kaWNhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZlxuICAgZGlnaXRzIHRoYXQgbWF5IGZvbGxvdyB0aGUgZGVjaW1hbCBwb2ludC4gRm9yIGluc3RhbmNlLCBbJS40Zl0gcmVhZHMgYVxuICAgW2Zsb2F0XSB3aXRoIGF0IG1vc3QgNCBmcmFjdGlvbmFsIGRpZ2l0cyxcblxuICAgLSBpbiB0aGUgc3RyaW5nIGNvbnZlcnNpb25zIChbJXNdLCBbJVNdLCBbJVxcWyByYW5nZSBcXF1dKSwgYW5kIGluIHRoZVxuICAgaW50ZWdlciBudW1iZXIgY29udmVyc2lvbnMgKFslaV0sIFslZF0sIFsldV0sIFsleF0sIFslb10sIGFuZCB0aGVpclxuICAgW2ludDMyXSwgW2ludDY0XSwgYW5kIFtuYXRpdmVfaW50XSBjb3JyZXNwb25kZW50KSwgdGhlIFtwcmVjaXNpb25dXG4gICBpbmRpY2F0ZXMgdGhlIHJlcXVpcmVkIG1pbmltdW0gd2lkdGggb2YgdGhlIHRva2VuIHJlYWQsXG5cbiAgIC0gb24gYWxsIG90aGVyIGNvbnZlcnNpb25zLCB0aGUgd2lkdGggYW5kIHByZWNpc2lvbiBzcGVjaWZ5IHRoZSBbbWF4LCBtaW5dXG4gICByYW5nZSBmb3IgdGhlIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkLlxuKilcbmxldCBzY2FuX2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGxldCB3aWR0aCA9IHNjYW5faW50ZWdlcl9wYXJ0IHdpZHRoIGliIGluXG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoLCBwcmVjaXNpb24gZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCwgcHJlY2lzaW9uIGVsc2VcbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJy4nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgbGV0IHByZWNpc2lvbiA9IG1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICBsZXQgd2lkdGggPSB3aWR0aCAtIChwcmVjaXNpb24gLSBzY2FuX2ZyYWN0aW9uYWxfcGFydCBwcmVjaXNpb24gaWIpIGluXG4gICAgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliLCBwcmVjaXNpb25cbiAgfCBfIC0+XG4gICAgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliLCBwcmVjaXNpb25cblxuXG5sZXQgY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgZXJyb3Igc3RyID1cbiAgbGV0IGxvd2VyY2FzZSBjID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICdBJyAuLiAnWicgLT5cbiAgICAgIGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICsgaW50X29mX2NoYXIgJ2EnKVxuICAgIHwgXyAtPiBjIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGggPSByZWYgd2lkdGggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIGxvd2VyY2FzZSBjIDw+IGxvd2VyY2FzZSBzdHIuW2ldIHRoZW4gZXJyb3IgKCk7XG4gICAgaWYgIXdpZHRoID0gMCB0aGVuIGVycm9yICgpO1xuICAgIHdpZHRoIDo9IFNjYW5uaW5nLnN0b3JlX2NoYXIgIXdpZHRoIGliIGM7XG4gIGRvbmU7XG4gICF3aWR0aFxuXG5cbmxldCBzY2FuX2hleF9mbG9hdCB3aWR0aCBwcmVjaXNpb24gaWIgPVxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICB8ICcwJyBhcyBjIC0+IChcbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICBsZXQgd2lkdGggPSBjaGVja19jYXNlX2luc2Vuc2l0aXZlX3N0cmluZyB3aWR0aCBpYiBiYWRfaGV4X2Zsb2F0IFwieFwiIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgIGxldCB3aWR0aCA9IG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgIHwgJy4nIHwgJ3AnIHwgJ1AnIC0+IHdpZHRoXG4gICAgICAgIHwgXyAtPiBzY2FuX2hleGFkZWNpbWFsX2ludCB3aWR0aCBpYiBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgICAgbGV0IHdpZHRoID0gbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgICB8ICcuJyBhcyBjIC0+IChcbiAgICAgICAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgICAgICAgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICAgICAgbGV0IHByZWNpc2lvbiA9IG1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAgICAgICAgICAgICB3aWR0aCAtIChwcmVjaXNpb24gLSBzY2FuX2hleGFkZWNpbWFsX2ludCBwcmVjaXNpb24gaWIpXG4gICAgICAgICAgKVxuICAgICAgICAgIHwgXyAtPiB3aWR0aCBpblxuICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgfCAncCcgfCAnUCcgYXMgYyAtPlxuICAgICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICAgICAgICAgIHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgICAgICAgICB8IF8gLT4gd2lkdGhcbiAgKVxuICB8ICduJyB8ICdOJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgYmFkX2hleF9mbG9hdCBcImFuXCJcbiAgfCAnaScgfCAnSScgYXMgYyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgIGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGJhZF9oZXhfZmxvYXQgXCJuZmluaXR5XCJcbiAgfCBfIC0+IGJhZF9oZXhfZmxvYXQgKClcblxuXG5sZXQgc2Nhbl9jYW1sX2Zsb2F0X3Jlc3Qgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IHdpZHRoID0gc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWIgaW5cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJy4nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgKCogVGhlIGVmZmVjdGl2ZSB3aWR0aCBhdmFpbGFibGUgZm9yIHNjYW5uaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgaXNcbiAgICAgICB0aGUgbWluaW11bSBvZiBkZWNsYXJlZCBwcmVjaXNpb24gYW5kIHdpZHRoIGxlZnQuICopXG4gICAgbGV0IHByZWNpc2lvbiA9IG1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAoKiBBZnRlciBzY2FubmluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0IHdpdGggW3ByZWNpc2lvbl0gcHJvdmlzaW9uYWwgd2lkdGgsXG4gICAgICAgW3dpZHRoX3ByZWNpc2lvbl0gaXMgbGVmdC4gKilcbiAgICBsZXQgd2lkdGhfcHJlY2lzaW9uID0gc2Nhbl9mcmFjdGlvbmFsX3BhcnQgcHJlY2lzaW9uIGliIGluXG4gICAgKCogSGVuY2UsIHNjYW5uaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgdG9vayBleGFjdGx5XG4gICAgICAgW3ByZWNpc2lvbiAtIHdpZHRoX3ByZWNpc2lvbl0gY2hhcnMuICopXG4gICAgbGV0IGZyYWNfd2lkdGggPSBwcmVjaXNpb24gLSB3aWR0aF9wcmVjaXNpb24gaW5cbiAgICAoKiBBbmQgbmV3IHByb3Zpc2lvbmFsIHdpZHRoIGlzIFt3aWR0aCAtIHdpZHRoX3ByZWNpc2lvbi4gKilcbiAgICBsZXQgd2lkdGggPSB3aWR0aCAtIGZyYWNfd2lkdGggaW5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWJcbiAgfCAnZScgfCAnRScgLT5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWJcbiAgfCBfIC0+IGJhZF9mbG9hdCAoKVxuXG5cbmxldCBzY2FuX2NhbWxfZmxvYXQgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT4gKFxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gICAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICB8ICd4JyB8ICdYJyBhcyBjIC0+IChcbiAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICAgIGxldCB3aWR0aCA9IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliIGluXG4gICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICAgICAgbGV0IHdpZHRoID0gbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgfCAnLicgYXMgYyAtPiAoXG4gICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgICB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICAgIGxldCBwcmVjaXNpb24gPSBtaW4gd2lkdGggcHJlY2lzaW9uIGluXG4gICAgICAgICAgICAgIHdpZHRoIC0gKHByZWNpc2lvbiAtIHNjYW5faGV4YWRlY2ltYWxfaW50IHByZWNpc2lvbiBpYilcbiAgICAgICAgKVxuICAgICAgICB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICB8IF8gLT4gYmFkX2Zsb2F0ICgpIGluXG4gICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICB8ICdwJyB8ICdQJyBhcyBjIC0+XG4gICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgICAgICAgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuICAgICAgICB8IF8gLT4gd2lkdGhcbiAgICApXG4gICAgfCBfIC0+XG4gICAgICBzY2FuX2NhbWxfZmxvYXRfcmVzdCB3aWR0aCBwcmVjaXNpb24gaWJcbiAgKVxuICB8ICcxJyAuLiAnOScgYXMgYyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gICAgc2Nhbl9jYW1sX2Zsb2F0X3Jlc3Qgd2lkdGggcHJlY2lzaW9uIGliXG4oKiBTcGVjaWFsIGNhc2Ugb2YgbmFuIGFuZCBpbmZpbml0eTpcbiAgfCAnaScgLT5cbiAgfCAnbicgLT5cbiopXG4gIHwgXyAtPiBiYWRfZmxvYXQgKClcblxuXG4oKiBTY2FuIGEgcmVndWxhciBzdHJpbmc6XG4gICBzdG9wcyB3aGVuIGVuY291bnRlcmluZyBhIHNwYWNlLCBpZiBubyBzY2FubmluZyBpbmRpY2F0aW9uIGhhcyBiZWVuIGdpdmVuO1xuICAgb3RoZXJ3aXNlLCBzdG9wcyB3aGVuIGVuY291bnRlcmluZyB0aGUgY2hhcmFjdGVycyBpbiB0aGUgc2Nhbm5pbmdcbiAgIGluZGljYXRpb24gW3N0cF0uXG4gICBJdCBhbHNvIHN0b3BzIGF0IGVuZCBvZiBmaWxlIG9yIHdoZW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaGFzXG4gICBiZWVuIHJlYWQuICopXG5sZXQgc2Nhbl9zdHJpbmcgc3RwIHdpZHRoIGliID1cbiAgbGV0IHJlYyBsb29wIHdpZHRoID1cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICBtYXRjaCBzdHAgd2l0aFxuICAgICAgfCBTb21lIGMnIHdoZW4gYyA9IGMnIC0+IFNjYW5uaW5nLnNraXBfY2hhciB3aWR0aCBpYlxuICAgICAgfCBTb21lIF8gLT4gbG9vcCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKVxuICAgICAgfCBOb25lIC0+XG4gICAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgICB8ICcgJyB8ICdcXHQnIHwgJ1xcbicgfCAnXFxyJyAtPiB3aWR0aFxuICAgICAgICB8IF8gLT4gbG9vcCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpblxuICBsb29wIHdpZHRoXG5cblxuKCogU2NhbiBhIGNoYXI6IHBlZWsgc3RyaWN0bHkgb25lIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQsIHdoYXRzb2V2ZXIuICopXG5sZXQgc2Nhbl9jaGFyIHdpZHRoIGliID1cbiAgKCogVGhlIGNhc2Ugd2lkdGggPSAwIGNvdWxkIG5vdCBoYXBwZW4gaGVyZSwgc2luY2UgaXQgaXMgdGVzdGVkIGJlZm9yZVxuICAgICBjYWxsaW5nIHNjYW5fY2hhciwgaW4gdGhlIG1haW4gc2Nhbm5pbmcgZnVuY3Rpb24uXG4gICAgaWYgd2lkdGggPSAwIHRoZW4gYmFkX3Rva2VuX2xlbmd0aCBcImEgY2hhcmFjdGVyXCIgZWxzZSAqKVxuICBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIChTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYilcblxuXG5sZXQgY2hhcl9mb3JfYmFja3NsYXNoID0gZnVuY3Rpb25cbiAgfCAnbicgLT4gJ1xcMDEwJ1xuICB8ICdyJyAtPiAnXFwwMTMnXG4gIHwgJ2InIC0+ICdcXDAwOCdcbiAgfCAndCcgLT4gJ1xcMDA5J1xuICB8IGMgLT4gY1xuXG5cbigqIFRoZSBpbnRlZ2VyIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZhY2lhbCB2YWx1ZSBvZiBhIHZhbGlkXG4gICBkZWNpbWFsIGRpZ2l0IGNoYXJhY3Rlci4gKilcbmxldCBkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYyA9IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcblxubGV0IGNoYXJfZm9yX2RlY2ltYWxfY29kZSBjMCBjMSBjMiA9XG4gIGxldCBjID1cbiAgICAxMDAgKiBkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzAgK1xuICAgICAxMCAqIGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMSArXG4gICAgICAgICAgZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMyIGluXG4gIGlmIGMgPCAwIHx8IGMgPiAyNTUgdGhlblxuICAgIGJhZF9pbnB1dFxuICAgICAgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgICBcImJhZCBjaGFyYWN0ZXIgZGVjaW1hbCBlbmNvZGluZyBcXFxcJWMlYyVjXCIgYzAgYzEgYzIpIGVsc2VcbiAgY2hhcl9vZl9pbnQgY1xuXG5cbigqIFRoZSBpbnRlZ2VyIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZhY2lhbCB2YWx1ZSBvZiBhIHZhbGlkXG4gICBoZXhhZGVjaW1hbCBkaWdpdCBjaGFyYWN0ZXIuICopXG5sZXQgaGV4YWRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjID1cbiAgbGV0IGQgPSBpbnRfb2ZfY2hhciBjIGluXG4gICgqIENvdWxkIGFsc28gYmU6XG4gICAgaWYgZCA8PSBpbnRfb2ZfY2hhciAnOScgdGhlbiBkIC0gaW50X29mX2NoYXIgJzAnIGVsc2VcbiAgICBpZiBkIDw9IGludF9vZl9jaGFyICdGJyB0aGVuIDEwICsgZCAtIGludF9vZl9jaGFyICdBJyBlbHNlXG4gICAgaWYgZCA8PSBpbnRfb2ZfY2hhciAnZicgdGhlbiAxMCArIGQgLSBpbnRfb2ZfY2hhciAnYScgZWxzZSBhc3NlcnQgZmFsc2VcbiAgKilcbiAgaWYgZCA+PSBpbnRfb2ZfY2hhciAnYScgdGhlblxuICAgIGQgLSA4NyAoKiAxMCArIGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnYScgKikgZWxzZVxuICBpZiBkID49IGludF9vZl9jaGFyICdBJyB0aGVuXG4gICAgZCAtIDU1ICAoKiAxMCArIGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnQScgKikgZWxzZVxuICAgIGQgLSBpbnRfb2ZfY2hhciAnMCdcblxuXG5sZXQgY2hhcl9mb3JfaGV4YWRlY2ltYWxfY29kZSBjMSBjMiA9XG4gIGxldCBjID1cbiAgICAxNiAqIGhleGFkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzEgK1xuICAgICAgICAgaGV4YWRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMiBpblxuICBpZiBjIDwgMCB8fCBjID4gMjU1IHRoZW5cbiAgICBiYWRfaW5wdXRcbiAgICAgIChQcmludGYuc3ByaW50ZiBcImJhZCBjaGFyYWN0ZXIgaGV4YWRlY2ltYWwgZW5jb2RpbmcgXFxcXCVjJWNcIiBjMSBjMikgZWxzZVxuICBjaGFyX29mX2ludCBjXG5cblxuKCogQ2FsbGVkIGluIHBhcnRpY3VsYXIgd2hlbiBlbmNvdW50ZXJpbmcgJ1xcXFwnIGFzIHN0YXJ0ZXIgb2YgYSBjaGFyLlxuICAgU3RvcHMgYmVmb3JlIHRoZSBjb3JyZXNwb25kaW5nICdcXCcnLiAqKVxubGV0IGNoZWNrX25leHRfY2hhciBtZXNzYWdlIHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gYmFkX3Rva2VuX2xlbmd0aCBtZXNzYWdlIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gYmFkX2VuZF9vZl9pbnB1dCBtZXNzYWdlIGVsc2VcbiAgY1xuXG5cbmxldCBjaGVja19uZXh0X2NoYXJfZm9yX2NoYXIgPSBjaGVja19uZXh0X2NoYXIgXCJhIENoYXJcIlxubGV0IGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nID0gY2hlY2tfbmV4dF9jaGFyIFwiYSBTdHJpbmdcIlxuXG5sZXQgc2Nhbl9iYWNrc2xhc2hfY2hhciB3aWR0aCBpYiA9XG4gIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3JfY2hhciB3aWR0aCBpYiB3aXRoXG4gIHwgJ1xcXFwnIHwgJ1xcJycgfCAnXFxcIicgfCAnbicgfCAndCcgfCAnYicgfCAncicgYXMgYyAtPlxuICAgIFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgKGNoYXJfZm9yX2JhY2tzbGFzaCBjKVxuICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgIGxldCBnZXRfZGlnaXQgKCkgPVxuICAgICAgbGV0IGMgPSBTY2FubmluZy5uZXh0X2NoYXIgaWIgaW5cbiAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIGFzIGMgLT4gY1xuICAgICAgfCBjIC0+IGJhZF9pbnB1dF9lc2NhcGUgYyBpblxuICAgIGxldCBjMCA9IGMgaW5cbiAgICBsZXQgYzEgPSBnZXRfZGlnaXQgKCkgaW5cbiAgICBsZXQgYzIgPSBnZXRfZGlnaXQgKCkgaW5cbiAgICBTY2FubmluZy5zdG9yZV9jaGFyICh3aWR0aCAtIDIpIGliIChjaGFyX2Zvcl9kZWNpbWFsX2NvZGUgYzAgYzEgYzIpXG4gIHwgJ3gnIC0+XG4gICAgbGV0IGdldF9kaWdpdCAoKSA9XG4gICAgICBsZXQgYyA9IFNjYW5uaW5nLm5leHRfY2hhciBpYiBpblxuICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgfCAnQScgLi4gJ0YnIHwgJ2EnIC4uICdmJyBhcyBjIC0+IGNcbiAgICAgIHwgYyAtPiBiYWRfaW5wdXRfZXNjYXBlIGMgaW5cbiAgICBsZXQgYzEgPSBnZXRfZGlnaXQgKCkgaW5cbiAgICBsZXQgYzIgPSBnZXRfZGlnaXQgKCkgaW5cbiAgICBTY2FubmluZy5zdG9yZV9jaGFyICh3aWR0aCAtIDIpIGliIChjaGFyX2Zvcl9oZXhhZGVjaW1hbF9jb2RlIGMxIGMyKVxuICB8IGMgLT5cbiAgICBiYWRfaW5wdXRfZXNjYXBlIGNcblxuXG4oKiBTY2FuIGEgY2hhcmFjdGVyIChhbiBPQ2FtbCB0b2tlbikuICopXG5sZXQgc2Nhbl9jYW1sX2NoYXIgd2lkdGggaWIgPVxuXG4gIGxldCByZWMgZmluZF9zdGFydCB3aWR0aCA9XG4gICAgbWF0Y2ggU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgd2l0aFxuICAgIHwgJ1xcJycgLT4gZmluZF9jaGFyIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IGMgLT4gY2hhcmFjdGVyX21pc21hdGNoICdcXCcnIGNcblxuICBhbmQgZmluZF9jaGFyIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX2NoYXIgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xcXFwnIC0+XG4gICAgICBmaW5kX3N0b3AgKHNjYW5fYmFja3NsYXNoX2NoYXIgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKSBpYilcbiAgICB8IGMgLT5cbiAgICAgIGZpbmRfc3RvcCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKVxuXG4gIGFuZCBmaW5kX3N0b3Agd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3JfY2hhciB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFwnJyAtPiBTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYlxuICAgIHwgYyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcJycgYyBpblxuXG4gIGZpbmRfc3RhcnQgd2lkdGhcblxuXG4oKiBTY2FuIGEgZGVsaW1pdGVkIHN0cmluZyAoYW4gT0NhbWwgdG9rZW4pLiAqKVxubGV0IHNjYW5fY2FtbF9zdHJpbmcgd2lkdGggaWIgPVxuXG4gIGxldCByZWMgZmluZF9zdGFydCB3aWR0aCA9XG4gICAgbWF0Y2ggU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgd2l0aFxuICAgIHwgJ1xcXCInIC0+IGZpbmRfc3RvcCAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBjIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFxcIicgY1xuXG4gIGFuZCBmaW5kX3N0b3Agd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXFwiJyAtPiBTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYlxuICAgIHwgJ1xcXFwnIC0+IHNjYW5fYmFja3NsYXNoIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IGMgLT4gZmluZF9zdG9wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpXG5cbiAgYW5kIHNjYW5fYmFja3NsYXNoIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxyJyAtPiBza2lwX25ld2xpbmUgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgJ1xcbicgLT4gc2tpcF9zcGFjZXMgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgXyAtPiBmaW5kX3N0b3AgKHNjYW5fYmFja3NsYXNoX2NoYXIgd2lkdGggaWIpXG5cbiAgYW5kIHNraXBfbmV3bGluZSB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xcbicgLT4gc2tpcF9zcGFjZXMgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgXyAtPiBmaW5kX3N0b3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgJ1xccicpXG5cbiAgYW5kIHNraXBfc3BhY2VzIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyB3aWR0aCBpYiB3aXRoXG4gICAgfCAnICcgLT4gc2tpcF9zcGFjZXMgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgXyAtPiBmaW5kX3N0b3Agd2lkdGggaW5cblxuICBmaW5kX3N0YXJ0IHdpZHRoXG5cblxuKCogU2NhbiBhIGJvb2xlYW4gKGFuIE9DYW1sIHRva2VuKS4gKilcbmxldCBzY2FuX2Jvb2wgaWIgPVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIGxldCBtID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICd0JyAtPiA0XG4gICAgfCAnZicgLT4gNVxuICAgIHwgYyAtPlxuICAgICAgYmFkX2lucHV0XG4gICAgICAgIChQcmludGYuc3ByaW50ZiBcInRoZSBjaGFyYWN0ZXIgJUMgY2Fubm90IHN0YXJ0IGEgYm9vbGVhblwiIGMpIGluXG4gIHNjYW5fc3RyaW5nIE5vbmUgbSBpYlxuXG5cbigqIFNjYW4gYSBzdHJpbmcgY29udGFpbmluZyBlbGVtZW50cyBpbiBjaGFyX3NldCBhbmQgdGVybWluYXRlZCBieSBzY2FuX2luZGljXG4gICBpZiBwcm92aWRlZC4gKilcbmxldCBzY2FuX2NoYXJzX2luX2NoYXJfc2V0IGNoYXJfc2V0IHNjYW5faW5kaWMgd2lkdGggaWIgPVxuICBsZXQgcmVjIHNjYW5fY2hhcnMgaSBzdHAgPVxuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgaSA+IDAgJiYgbm90IChTY2FubmluZy5lb2YgaWIpICYmXG4gICAgICAgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyAmJlxuICAgICAgIGludF9vZl9jaGFyIGMgPD4gc3RwIHRoZW5cbiAgICAgIGxldCBfID0gU2Nhbm5pbmcuc3RvcmVfY2hhciBtYXhfaW50IGliIGMgaW5cbiAgICAgIHNjYW5fY2hhcnMgKGkgLSAxKSBzdHAgaW5cbiAgbWF0Y2ggc2Nhbl9pbmRpYyB3aXRoXG4gIHwgTm9uZSAtPiBzY2FuX2NoYXJzIHdpZHRoICgtMSk7XG4gIHwgU29tZSBjIC0+XG4gICAgc2Nhbl9jaGFycyB3aWR0aCAoaW50X29mX2NoYXIgYyk7XG4gICAgaWYgbm90IChTY2FubmluZy5lb2YgaWIpIHRoZW5cbiAgICAgIGxldCBjaSA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgICAgaWYgYyA9IGNpXG4gICAgICB0aGVuIFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliXG4gICAgICBlbHNlIGNoYXJhY3Rlcl9taXNtYXRjaCBjIGNpXG5cblxuKCogVGhlIGdsb2JhbCBlcnJvciByZXBvcnQgZnVuY3Rpb24gZm9yIFtTY2FuZl0uICopXG5sZXQgc2NhbmZfYmFkX2lucHV0IGliID0gZnVuY3Rpb25cbiAgfCBTY2FuX2ZhaWx1cmUgcyB8IEZhaWx1cmUgcyAtPlxuICAgIGxldCBpID0gU2Nhbm5pbmcuY2hhcl9jb3VudCBpYiBpblxuICAgIGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJzY2FuZjogYmFkIGlucHV0IGF0IGNoYXIgbnVtYmVyICVpOiAlc1wiIGkgcylcbiAgfCB4IC0+IHJhaXNlIHhcblxuXG4oKiBHZXQgdGhlIGNvbnRlbnQgb2YgYSBjb3VudGVyIGZyb20gYW4gaW5wdXQgYnVmZmVyLiAqKVxubGV0IGdldF9jb3VudGVyIGliIGNvdW50ZXIgPVxuICBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgLT4gU2Nhbm5pbmcubGluZV9jb3VudCBpYlxuICB8IENoYXJfY291bnRlciAtPiBTY2FubmluZy5jaGFyX2NvdW50IGliXG4gIHwgVG9rZW5fY291bnRlciAtPiBTY2FubmluZy50b2tlbl9jb3VudCBpYlxuXG5cbigqIENvbXB1dGUgdGhlIHdpZHRoIG9mIGEgcGFkZGluZyBvcHRpb24gKHNlZSBcIiU0MntcIiBhbmQgXCIlMTIzKFwiKS4gKilcbmxldCB3aWR0aF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IG1heF9pbnRcbiAgfCBTb21lIHdpZHRoIC0+IHdpZHRoXG5cblxubGV0IHN0b3BwZXJfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nID1cbiAgaWYgZm10aW5nID0gRXNjYXBlZF9wZXJjZW50IHRoZW4gJyUnLCBcIlwiIGVsc2VcbiAgICBsZXQgc3RyID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZyBpblxuICAgIGxldCBzdHAgPSBzdHIuWzFdIGluXG4gICAgbGV0IHN1Yl9zdHIgPSBTdHJpbmcuc3ViIHN0ciAyIChTdHJpbmcubGVuZ3RoIHN0ciAtIDIpIGluXG4gICAgc3RwLCBzdWJfc3RyXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFJlYWRlciBtYW5hZ2VtZW50ICopXG5cbigqIEEgY2FsbCB0byB0YWtlX2Zvcm1hdF9yZWFkZXJzIG9uIGEgZm9ybWF0IGlzIGV2YWx1YXRlZCBpbnRvIGZ1bmN0aW9uc1xuICAgdGFraW5nIHJlYWRlcnMgYXMgYXJndW1lbnRzIGFuZCBhZ2dyZWdhdGUgdGhlbSBpbnRvIGFuIGhldGVyb2dlbmVvdXMgbGlzdCAqKVxuKCogV2hlbiBhbGwgcmVhZGVycyBhcmUgdGFrZW4sIGZpbmFsbHkgcGFzcyB0aGUgbGlzdCBvZiB0aGUgcmVhZGVycyB0byB0aGVcbiAgIGNvbnRpbnVhdGlvbiBrLiAqKVxubGV0IHJlYyB0YWtlX2Zvcm1hdF9yZWFkZXJzIDogdHlwZSBhIGMgZCBlIGYgLlxuICAgICgoZCwgZSkgaGV0ZXJfbGlzdCAtPiBlKSAtPiAoYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgZCA9XG5mdW4gayBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgfCBSZWFkZXIgZm10X3Jlc3QgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRfcmVzdFxuICB8IENoYXIgcmVzdCAgICAgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ2FtbF9jaGFyIHJlc3QgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTdHJpbmcgKF8sIHJlc3QpICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IENhbWxfc3RyaW5nIChfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgSW50IChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBJbnQzMiAoXywgXywgXywgcmVzdCkgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IE5hdGl2ZWludCAoXywgXywgXywgcmVzdCkgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgSW50NjQgKF8sIF8sIF8sIHJlc3QpICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGbG9hdCAoXywgXywgXywgcmVzdCkgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEJvb2wgKF8sIHJlc3QpICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQWxwaGEgcmVzdCAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBUaGV0YSByZXN0ICAgICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEN1c3RvbSAoXywgXywgcmVzdCkgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpLCByZXN0KSAtPlxuICAgICAgdGFrZV9mb3JtYXRfcmVhZGVycyBrIChjb25jYXRfZm10IGZtdCByZXN0KVxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSwgcmVzdCkgLT5cbiAgICAgIHRha2VfZm9ybWF0X3JlYWRlcnMgayAoY29uY2F0X2ZtdCBmbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgICAgLT5cbiAgICAgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKSByZXN0XG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAgICAgICAgLT4gdGFrZV9pZ25vcmVkX2Zvcm1hdF9yZWFkZXJzIGsgaWduIHJlc3RcblxuICB8IEVuZF9vZl9mb3JtYXQgICAgICAgICAgICAgICAgICAgIC0+IGsgTmlsXG5cbigqIFRha2UgcmVhZGVycyBhc3NvY2lhdGVkIHRvIGFuIGZtdHR5IGNvbWluZyBmcm9tIGEgRm9ybWF0X3N1YnN0IFwiJSguLi4lKVwiLiAqKVxuYW5kIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgOiB0eXBlIHggeSBhIGMgZCBlIGYgLlxuICAgICgoZCwgZSkgaGV0ZXJfbGlzdCAtPiBlKSAtPiAoYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgZCwgeCwgeSkgZm10dHkgLT5cbiAgICAgICh5LCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCB4LCBlLCBmKSBmbXQgLT4gZCA9XG5mdW4gayBmbXR0eSBmbXQgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IFJlYWRlcl90eSBmbXRfcmVzdCAtPlxuICAgIGZ1biByZWFkZXIgLT5cbiAgICAgIGxldCBuZXdfayByZWFkZXJzX3Jlc3QgPSBrIChDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkpIGluXG4gICAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIG5ld19rIGZtdF9yZXN0IGZtdFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IGZtdF9yZXN0IC0+XG4gICAgZnVuIHJlYWRlciAtPlxuICAgICAgbGV0IG5ld19rIHJlYWRlcnNfcmVzdCA9IGsgKENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSkgaW5cbiAgICAgIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgbmV3X2sgZm10X3Jlc3QgZm10XG4gIHwgQ2hhcl90eSByZXN0ICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IFN0cmluZ190eSByZXN0ICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IE5hdGl2ZWludF90eSByZXN0ICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEJvb2xfdHkgcmVzdCAgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBGb3JtYXRfYXJnX3R5IChfLCByZXN0KSAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgRW5kX29mX2ZtdHR5ICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIChjb25jYXRfZm10dHkgdHkgcmVzdCkgZm10XG5cbigqIFRha2UgcmVhZGVycyBhc3NvY2lhdGVkIHRvIGFuIGlnbm9yZWQgcGFyYW1ldGVyLiAqKVxuYW5kIHRha2VfaWdub3JlZF9mb3JtYXRfcmVhZGVycyA6IHR5cGUgeCB5IGEgYyBkIGUgZiAuXG4gICAgKChkLCBlKSBoZXRlcl9saXN0IC0+IGUpIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCB4LCB5KSBpZ25vcmVkIC0+XG4gICAgICAoeSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgeCwgZSwgZikgZm10IC0+IGQgPVxuZnVuIGsgaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfcmVhZGVyIC0+XG4gICAgZnVuIHJlYWRlciAtPlxuICAgICAgbGV0IG5ld19rIHJlYWRlcnNfcmVzdCA9IGsgKENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSkgaW5cbiAgICAgIHRha2VfZm9ybWF0X3JlYWRlcnMgbmV3X2sgZm10XG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgZm10dHkgZm10XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEdlbmVyaWMgc2Nhbm5pbmcgKilcblxuKCogTWFrZSBhIGdlbmVyaWMgc2Nhbm5pbmcgZnVuY3Rpb24uICopXG4oKiBTY2FuIGEgc3RyZWFtIGFjY29yZGluZyB0byBhIGZvcm1hdCBhbmQgcmVhZGVycyBvYnRhaW5lZCBieVxuICAgdGFrZV9mb3JtYXRfcmVhZGVycywgYW5kIGFnZ3JlZ2F0ZSBzY2FubmVkIHZhbHVlcyBpbnRvIGFuXG4gICBoZXRlcm9nZW5lb3VzIGxpc3QuICopXG4oKiBSZXR1cm4gdGhlIGhldGVyb2dlbmVvdXMgbGlzdCBvZiBzY2FubmVkIHZhbHVlcy4gKilcbmxldCByZWMgbWFrZV9zY2FuZiA6IHR5cGUgYSBjIGQgZSBmLlxuICAgIFNjYW5uaW5nLmluX2NoYW5uZWwgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKGQsIGUpIGhldGVyX2xpc3QgLT4gKGEsIGYpIGhldGVyX2xpc3QgPVxuZnVuIGliIGZtdCByZWFkZXJzIC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgbGV0IF8gPSBzY2FuX2NoYXIgMCBpYiBpblxuICAgIGxldCBjID0gdG9rZW5fY2hhciBpYiBpblxuICAgIENvbnMgKGMsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgbGV0IF8gPSBzY2FuX2NhbWxfY2hhciAwIGliIGluXG4gICAgbGV0IGMgPSB0b2tlbl9jaGFyIGliIGluXG4gICAgQ29ucyAoYywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG5cbiAgfCBTdHJpbmcgKHBhZCwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpKSAtPlxuICAgIGxldCBzdHAsIHN0ciA9IHN0b3BwZXJfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX3N0cmluZyAoU29tZSBzdHApIHdpZHRoIGliIGluXG4gICAgbGV0IHN0cl9yZXN0ID0gU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiBzdHJfcmVzdCByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhbiB0b2tlbl9zdHJpbmdcbiAgfCBTdHJpbmcgKHBhZCwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkpIC0+XG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIChTb21lICd7Jykgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuXG4gICAgICAgICAgICAgICAgICAgdG9rZW5fc3RyaW5nXG4gIHwgU3RyaW5nIChwYWQsIEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpKSAtPlxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX3N0cmluZyAoU29tZSAnWycpIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgKGNvbmNhdF9mbXQgZm10JyByZXN0KSByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhblxuICAgICAgICAgICAgICAgICAgIHRva2VuX3N0cmluZ1xuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX3N0cmluZyBOb25lIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhbiB0b2tlbl9zdHJpbmdcblxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fY2FtbF9zdHJpbmcgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX3N0cmluZ1xuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgYyA9IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIChjaGFyX29mX2ljb252IGljb252KSBpblxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2ludF9jb252ZXJzaW9uIGMgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2NhbiAodG9rZW5faW50IGMpXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IGMgPSBpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciAoY2hhcl9vZl9pY29udiBpY29udikgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9pbnRfY29udmVyc2lvbiBjIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gKHRva2VuX2ludDMyIGMpXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9uYXRpdmVpbnQgYylcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgYyA9IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIChjaGFyX29mX2ljb252IGljb252KSBpblxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2ludF9jb252ZXJzaW9uIGMgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2NhbiAodG9rZW5faW50NjQgYylcbiAgfCBGbG9hdCAoKF8sIChGbG9hdF9GIHwgRmxvYXRfQ0YpKSwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuX2NhbWxfZmxvYXQgdG9rZW5fZmxvYXRcbiAgfCBGbG9hdCAoKF8sIChGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRykpLFxuICAgICAgICAgICBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW5fZmxvYXQgdG9rZW5fZmxvYXRcbiAgfCBGbG9hdCAoKF8sIChGbG9hdF9oIHwgRmxvYXRfSCkpLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW5faGV4X2Zsb2F0IHRva2VuX2Zsb2F0XG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIGxldCBzY2FuIF8gXyBpYiA9IHNjYW5fYm9vbCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW4gdG9rZW5fYm9vbFxuICB8IEFscGhhIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJWFcXFwiXCJcbiAgfCBUaGV0YSBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiV0XFxcIlwiXG4gIHwgQ3VzdG9tIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJT9cXFwiIChjdXN0b20gY29udmVydGVyKVwiXG4gIHwgUmVhZGVyIGZtdF9yZXN0IC0+XG4gICAgYmVnaW4gbWF0Y2ggcmVhZGVycyB3aXRoXG4gICAgfCBDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkgLT5cbiAgICAgICAgbGV0IHggPSByZWFkZXIgaWIgaW5cbiAgICAgICAgQ29ucyAoeCwgbWFrZV9zY2FuZiBpYiBmbXRfcmVzdCByZWFkZXJzX3Jlc3QpXG4gICAgfCBOaWwgLT5cbiAgICAgICAgaW52YWxpZF9hcmcgXCJzY2FuZjogbWlzc2luZyByZWFkZXJcIlxuICAgIGVuZFxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBpZiBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVyc1xuICAgIGVsc2UgYmFkX2lucHV0IFwiZW5kIG9mIGlucHV0IG5vdCBmb3VuZFwiXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZy5pdGVyIChjaGVja19jaGFyIGliKSBzdHI7XG4gICAgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnNcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBjaGVja19jaGFyIGliIGNocjtcbiAgICBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVyc1xuXG4gIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgbGV0IF8gPSBzY2FuX2NhbWxfc3RyaW5nICh3aWR0aF9vZl9wYWRfb3B0IHBhZF9vcHQpIGliIGluXG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgZm10ID1cbiAgICAgIHRyeSBmb3JtYXRfb2Zfc3RyaW5nX2ZtdHR5IHMgZm10dHlcbiAgICAgIHdpdGggRmFpbHVyZSBtc2cgLT4gYmFkX2lucHV0IG1zZ1xuICAgIGluXG4gICAgQ29ucyAoZm10LCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgIGxldCBfID0gc2Nhbl9jYW1sX3N0cmluZyAod2lkdGhfb2ZfcGFkX29wdCBwYWRfb3B0KSBpYiBpblxuICAgIGxldCBzID0gdG9rZW5fc3RyaW5nIGliIGluXG4gICAgbGV0IGZtdCwgZm10JyA9XG4gICAgICB0cnlcbiAgICAgICAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgcyBpblxuICAgICAgICBsZXQgRm10X0VCQiBmbXQnID0gZm10X2ViYl9vZl9zdHJpbmcgcyBpblxuICAgICAgICAoKiBUT0RPOiBmaW5kIGEgd2F5IHRvIGF2b2lkIHJlcGFyc2luZyB0d2ljZSAqKVxuXG4gICAgICAgICgqIFRPRE86IHRoZXNlIHR5cGUtY2hlY2tzIGJlbG93ICpjYW4qIGZhaWwgYmVjYXVzZSBvZiB0eXBlXG4gICAgICAgICAgIGFtYmlndWl0eSBpbiBwcmVzZW5jZSBvZiBpZ25vcmVkLXJlYWRlcnM6IFwiJV9yJWRcIiBhbmQgXCIlZCVfclwiXG4gICAgICAgICAgIGFyZSB0eXBlZCBpbiB0aGUgc2FtZSB3YXkuXG5cbiAgICAgICAgICAgIyBTY2FuZi5zc2NhbmYgXCJcXFwiJV9yJWRcXFwiM1wiIFwiJSglZCVfciUpXCIgaWdub3JlXG4gICAgICAgICAgICAgKGZ1biBmbXQgbiAtPiBzdHJpbmdfb2ZfZm9ybWF0IGZtdCwgbilcbiAgICAgICAgICAgRXhjZXB0aW9uOiBDYW1saW50ZXJuYWxGb3JtYXQuVHlwZV9taXNtYXRjaC5cblxuICAgICAgICAgICBXZSBzaG91bGQgcHJvcGVybHkgY2F0Y2ggdGhpcyBleGNlcHRpb24uXG4gICAgICAgICopXG4gICAgICAgIHR5cGVfZm9ybWF0IGZtdCAoZXJhc2VfcmVsIGZtdHR5KSxcbiAgICAgICAgdHlwZV9mb3JtYXQgZm10JyAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSlcbiAgICAgIHdpdGggRmFpbHVyZSBtc2cgLT4gYmFkX2lucHV0IG1zZ1xuICAgIGluXG4gICAgQ29ucyAoRm9ybWF0IChmbXQsIHMpLFxuICAgICAgICAgIG1ha2Vfc2NhbmYgaWIgKGNvbmNhdF9mbXQgZm10JyByZXN0KSByZWFkZXJzKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpKSAtPlxuICAgIGxldCBzdHAsIHN0ciA9IHN0b3BwZXJfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIGxldCB3aWR0aCA9IHdpZHRoX29mX3BhZF9vcHQgd2lkdGhfb3B0IGluXG4gICAgc2Nhbl9jaGFyc19pbl9jaGFyX3NldCBjaGFyX3NldCAoU29tZSBzdHApIHdpZHRoIGliO1xuICAgIGxldCBzID0gdG9rZW5fc3RyaW5nIGliIGluXG4gICAgbGV0IHN0cl9yZXN0ID0gU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgaW5cbiAgICBDb25zIChzLCBtYWtlX3NjYW5mIGliIHN0cl9yZXN0IHJlYWRlcnMpXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBsZXQgd2lkdGggPSB3aWR0aF9vZl9wYWRfb3B0IHdpZHRoX29wdCBpblxuICAgIHNjYW5fY2hhcnNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgTm9uZSB3aWR0aCBpYjtcbiAgICBsZXQgcyA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIENvbnMgKHMsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgbGV0IGNvdW50ID0gZ2V0X2NvdW50ZXIgaWIgY291bnRlciBpblxuICAgIENvbnMgKGNvdW50LCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcbiAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgbGV0IGMgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICAgIENvbnMgKGMsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCByZXN0KSAtPlxuICAgIFN0cmluZy5pdGVyIChjaGVja19jaGFyIGliKSAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0KTtcbiAgICBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVyc1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgY2hlY2tfY2hhciBpYiAnQCc7IGNoZWNrX2NoYXIgaWIgJ3snO1xuICAgIG1ha2Vfc2NhbmYgaWIgKGNvbmNhdF9mbXQgZm10JyByZXN0KSByZWFkZXJzXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBjaGVja19jaGFyIGliICdAJzsgY2hlY2tfY2hhciBpYiAnWyc7XG4gICAgbWFrZV9zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnNcblxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBsZXQgUGFyYW1fZm9ybWF0X0VCQiBmbXQnID0gcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0IGluXG4gICAgYmVnaW4gbWF0Y2ggbWFrZV9zY2FuZiBpYiBmbXQnIHJlYWRlcnMgd2l0aFxuICAgIHwgQ29ucyAoXywgYXJnX3Jlc3QpIC0+IGFyZ19yZXN0XG4gICAgfCBOaWwgLT4gYXNzZXJ0IGZhbHNlXG4gICAgZW5kXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgTmlsXG5cbigqIENhc2UgYW5hbHlzaXMgb24gcGFkZGluZyBhbmQgcHJlY2lzaW9uLiAqKVxuKCogUmVqZWN0IGZvcm1hdHMgY29udGFpbmluZyBcIiUqXCIgb3IgXCIlLipcIi4gKilcbigqIFBhc3MgcGFkZGluZyBhbmQgcHJlY2lzaW9uIHRvIHRoZSBnZW5lcmljIHNjYW5uZXIgYHNjYW4nLiAqKVxuYW5kIHBhZF9wcmVjX3NjYW5mIDogdHlwZSBhIGMgZCBlIGYgeCB5IHogdCAuXG4gICAgU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiAoYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoZCwgZSkgaGV0ZXJfbGlzdCAtPiAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT5cbiAgICAgIChpbnQgLT4gaW50IC0+IFNjYW5uaW5nLmluX2NoYW5uZWwgLT4gdCkgLT5cbiAgICAgIChTY2FubmluZy5pbl9jaGFubmVsIC0+IHopIC0+XG4gICAgICAoeCwgZikgaGV0ZXJfbGlzdCA9XG5mdW4gaWIgZm10IHJlYWRlcnMgcGFkIHByZWMgc2NhbiB0b2tlbiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGxldCBfID0gc2NhbiBtYXhfaW50IG1heF9pbnQgaWIgaW5cbiAgICBsZXQgeCA9IHRva2VuIGliIGluXG4gICAgQ29ucyAoeCwgbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycylcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBsZXQgXyA9IHNjYW4gbWF4X2ludCBwIGliIGluXG4gICAgbGV0IHggPSB0b2tlbiBpYiBpblxuICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpXG4gIHwgTGl0X3BhZGRpbmcgKChSaWdodCB8IFplcm9zKSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGxldCBfID0gc2NhbiB3IG1heF9pbnQgaWIgaW5cbiAgICBsZXQgeCA9IHRva2VuIGliIGluXG4gICAgQ29ucyAoeCwgbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycylcbiAgfCBMaXRfcGFkZGluZyAoKFJpZ2h0IHwgWmVyb3MpLCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgbGV0IF8gPSBzY2FuIHcgcCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IExpdF9wYWRkaW5nIChMZWZ0LCBfKSwgXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlLVxcXCJcIlxuICB8IExpdF9wYWRkaW5nICgoUmlnaHQgfCBaZXJvcyksIF8pLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUqXFxcIlwiXG4gIHwgQXJnX3BhZGRpbmcgXywgXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlKlxcXCJcIlxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJSpcXFwiXCJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICgqIERlZmluaW5nIFtzY2FuZl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbc2NhbmZdICopXG5cbnR5cGUgJ2Ega3NjYW5mX3Jlc3VsdCA9IEFyZ3Mgb2YgJ2EgfCBFeGMgb2YgZXhuXG5cbmxldCBrc2NhbmYgaWIgZWYgKEZvcm1hdCAoZm10LCBzdHIpKSA9XG4gIGxldCByZWMgYXBwbHkgOiB0eXBlIGEgYiAuIGEgLT4gKGEsIGIpIGhldGVyX2xpc3QgLT4gYiA9XG4gICAgZnVuIGYgYXJncyAtPiBtYXRjaCBhcmdzIHdpdGhcbiAgICB8IENvbnMgKHgsIHIpIC0+IGFwcGx5IChmIHgpIHJcbiAgICB8IE5pbCAtPiBmXG4gIGluXG4gIGxldCBrIHJlYWRlcnMgZiA9XG4gICAgU2Nhbm5pbmcucmVzZXRfdG9rZW4gaWI7XG4gICAgbWF0Y2ggdHJ5IEFyZ3MgKG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpIHdpdGhcbiAgICAgIHwgKFNjYW5fZmFpbHVyZSBfIHwgRmFpbHVyZSBfIHwgRW5kX29mX2ZpbGUpIGFzIGV4YyAtPiBFeGMgZXhjXG4gICAgICB8IEludmFsaWRfYXJndW1lbnQgbXNnIC0+XG4gICAgICAgIGludmFsaWRfYXJnIChtc2cgXiBcIiBpbiBmb3JtYXQgXFxcIlwiIF4gU3RyaW5nLmVzY2FwZWQgc3RyIF4gXCJcXFwiXCIpXG4gICAgd2l0aFxuICAgICAgfCBBcmdzIGFyZ3MgLT4gYXBwbHkgZiBhcmdzXG4gICAgICB8IEV4YyBleGMgLT4gZWYgaWIgZXhjXG4gIGluXG4gIHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcblxuKCoqKilcblxubGV0IGtic2NhbmYgPSBrc2NhbmZcbmxldCBic2NhbmYgaWIgZm10ID0ga2JzY2FuZiBpYiBzY2FuZl9iYWRfaW5wdXQgZm10XG5cbmxldCBrc3NjYW5mIHMgZWYgZm10ID0ga2JzY2FuZiAoU2Nhbm5pbmcuZnJvbV9zdHJpbmcgcykgZWYgZm10XG5sZXQgc3NjYW5mIHMgZm10ID0ga2JzY2FuZiAoU2Nhbm5pbmcuZnJvbV9zdHJpbmcgcykgc2NhbmZfYmFkX2lucHV0IGZtdFxuXG5sZXQgc2NhbmYgZm10ID0ga3NjYW5mIFNjYW5uaW5nLnN0ZGliIHNjYW5mX2JhZF9pbnB1dCBmbXRcblxuKCoqKilcblxuKCogU2Nhbm5pbmcgZm9ybWF0IHN0cmluZ3MuICopXG5sZXQgYnNjYW5mX2Zvcm1hdCA6XG4gIFNjYW5uaW5nLmluX2NoYW5uZWwgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAgKCgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICdnKSAtPiAnZyA9XG4gIGZ1biBpYiBmb3JtYXQgZiAtPlxuICAgIGxldCBfID0gc2Nhbl9jYW1sX3N0cmluZyBtYXhfaW50IGliIGluXG4gICAgbGV0IHN0ciA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBmbXQnID1cbiAgICAgIHRyeSBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgZm9ybWF0XG4gICAgICB3aXRoIEZhaWx1cmUgbXNnIC0+IGJhZF9pbnB1dCBtc2cgaW5cbiAgICBmIGZtdCdcblxuXG5sZXQgc3NjYW5mX2Zvcm1hdCA6XG4gIHN0cmluZyAtPiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICAoKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gJ2cpIC0+ICdnID1cbiAgZnVuIHMgZm9ybWF0IGYgLT4gYnNjYW5mX2Zvcm1hdCAoU2Nhbm5pbmcuZnJvbV9zdHJpbmcgcykgZm9ybWF0IGZcblxuXG5sZXQgZm9ybWF0X2Zyb21fc3RyaW5nIHMgZm10ID1cbiAgc3NjYW5mX2Zvcm1hdCAoXCJcXFwiXCIgXiBTdHJpbmcuZXNjYXBlZCBzIF4gXCJcXFwiXCIpIGZtdCAoZnVuIHggLT4geClcblxuXG5sZXQgdW5lc2NhcGVkIHMgPVxuICBzc2NhbmYgKFwiXFxcIlwiIF4gcyBeIFwiXFxcIlwiKSBcIiVTJSFcIiAoZnVuIHggLT4geClcblxuXG4oKiBEZXByZWNhdGVkICopXG5sZXQga2ZzY2FuZiBpYyBlZiBmbXQgPSBrYnNjYW5mIChTY2FubmluZy5tZW1vX2Zyb21fY2hhbm5lbCBpYykgZWYgZm10XG5sZXQgZnNjYW5mIGljIGZtdCA9IGtzY2FuZiAoU2Nhbm5pbmcubWVtb19mcm9tX2NoYW5uZWwgaWMpIHNjYW5mX2JhZF9pbnB1dCBmbXRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUmVnaXN0ZXJpbmcgT0NhbWwgdmFsdWVzIHdpdGggdGhlIEMgcnVudGltZSBmb3IgbGF0ZXIgY2FsbGJhY2tzICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+IE9iai50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0IHJlZ2lzdGVyIG5hbWUgdiA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgKE9iai5yZXByIHYpXG5cbmxldCByZWdpc3Rlcl9leGNlcHRpb24gbmFtZSAoZXhuIDogZXhuKSA9XG4gIGxldCBleG4gPSBPYmoucmVwciBleG4gaW5cbiAgbGV0IHNsb3QgPSBpZiBPYmoudGFnIGV4biA9IE9iai5vYmplY3RfdGFnIHRoZW4gZXhuIGVsc2UgT2JqLmZpZWxkIGV4biAwIGluXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgc2xvdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgSmVyb21lIFZvdWlsbG9uLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIE9ialxuXG4oKioqKiBPYmplY3QgcmVwcmVzZW50YXRpb24gKioqKilcblxuZXh0ZXJuYWwgc2V0X2lkOiAnYSAtPiAnYSA9IFwiY2FtbF9zZXRfb29faWRcIiBbQEBub2FsbG9jXVxuXG4oKioqKiBPYmplY3QgY29weSAqKioqKVxuXG5sZXQgY29weSBvID1cbiAgbGV0IG8gPSAoT2JqLm9iaiAoT2JqLmR1cCAoT2JqLnJlcHIgbykpKSBpblxuICBzZXRfaWQgb1xuXG4oKioqKiBDb21wcmVzc2lvbiBvcHRpb25zICoqKiopXG4oKiBQYXJhbWV0ZXJzICopXG50eXBlIHBhcmFtcyA9IHtcbiAgICBtdXRhYmxlIGNvbXBhY3RfdGFibGUgOiBib29sO1xuICAgIG11dGFibGUgY29weV9wYXJlbnQgOiBib29sO1xuICAgIG11dGFibGUgY2xlYW5fd2hlbl9jb3B5aW5nIDogYm9vbDtcbiAgICBtdXRhYmxlIHJldHJ5X2NvdW50IDogaW50O1xuICAgIG11dGFibGUgYnVja2V0X3NtYWxsX3NpemUgOiBpbnRcbiAgfVxuXG5sZXQgcGFyYW1zID0ge1xuICBjb21wYWN0X3RhYmxlID0gdHJ1ZTtcbiAgY29weV9wYXJlbnQgPSB0cnVlO1xuICBjbGVhbl93aGVuX2NvcHlpbmcgPSB0cnVlO1xuICByZXRyeV9jb3VudCA9IDM7XG4gIGJ1Y2tldF9zbWFsbF9zaXplID0gMTZcbn1cblxuKCoqKiogUGFyYW1ldGVycyAqKioqKVxuXG5sZXQgaW5pdGlhbF9vYmplY3Rfc2l6ZSA9IDJcblxuKCoqKiogSXRlbXMgKioqKilcblxudHlwZSBpdGVtID0gRHVtbXlBIHwgRHVtbXlCIHwgRHVtbXlDIG9mIGludFxubGV0IF8gPSBbRHVtbXlBOyBEdW1teUI7IER1bW15QyAwXSAoKiB0byBhdm9pZCB3YXJuaW5ncyAqKVxuXG5sZXQgZHVtbXlfaXRlbSA9IChtYWdpYyAoKSA6IGl0ZW0pXG5cbigqKioqIFR5cGVzICoqKiopXG5cbnR5cGUgdGFnXG50eXBlIGxhYmVsID0gaW50XG50eXBlIGNsb3N1cmUgPSBpdGVtXG50eXBlIHQgPSBEdW1teUEgfCBEdW1teUIgfCBEdW1teUMgb2YgaW50XG5sZXQgXyA9IFtEdW1teUE7IER1bW15QjsgRHVtbXlDIDBdICgqIHRvIGF2b2lkIHdhcm5pbmdzICopXG5cbnR5cGUgb2JqID0gdCBhcnJheVxuZXh0ZXJuYWwgcmV0IDogKG9iaiAtPiAnYSkgLT4gY2xvc3VyZSA9IFwiJWlkZW50aXR5XCJcblxuKCoqKiogTGFiZWxzICoqKiopXG5cbmxldCBwdWJsaWNfbWV0aG9kX2xhYmVsIHMgOiB0YWcgPVxuICBsZXQgYWNjdSA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgYWNjdSA6PSAyMjMgKiAhYWNjdSArIENoYXIuY29kZSBzLltpXVxuICBkb25lO1xuICAoKiByZWR1Y2UgdG8gMzEgYml0cyAqKVxuICBhY2N1IDo9ICFhY2N1IGxhbmQgKDEgbHNsIDMxIC0gMSk7XG4gICgqIG1ha2UgaXQgc2lnbmVkIGZvciA2NCBiaXRzIGFyY2hpdGVjdHVyZXMgKilcbiAgbGV0IHRhZyA9IGlmICFhY2N1ID4gMHgzRkZGRkZGRiB0aGVuICFhY2N1IC0gKDEgbHNsIDMxKSBlbHNlICFhY2N1IGluXG4gICgqIFByaW50Zi5lcHJpbnRmIFwiJXMgPSAlZFxcblwiIHMgdGFnOyBmbHVzaCBzdGRlcnI7ICopXG4gIG1hZ2ljIHRhZ1xuXG4oKioqKiBTcGFyc2UgYXJyYXkgKioqKilcblxubW9kdWxlIFZhcnMgPVxuICBNYXAuTWFrZShzdHJ1Y3QgdHlwZSB0ID0gc3RyaW5nIGxldCBjb21wYXJlICh4OnQpIHkgPSBjb21wYXJlIHggeSBlbmQpXG50eXBlIHZhcnMgPSBpbnQgVmFycy50XG5cbm1vZHVsZSBNZXRocyA9XG4gIE1hcC5NYWtlKHN0cnVjdCB0eXBlIHQgPSBzdHJpbmcgbGV0IGNvbXBhcmUgKHg6dCkgeSA9IGNvbXBhcmUgeCB5IGVuZClcbnR5cGUgbWV0aHMgPSBsYWJlbCBNZXRocy50XG5tb2R1bGUgTGFicyA9XG4gIE1hcC5NYWtlKHN0cnVjdCB0eXBlIHQgPSBsYWJlbCBsZXQgY29tcGFyZSAoeDp0KSB5ID0gY29tcGFyZSB4IHkgZW5kKVxudHlwZSBsYWJzID0gYm9vbCBMYWJzLnRcblxuKCogVGhlIGNvbXBpbGVyIGFzc3VtZXMgdGhhdCB0aGUgZmlyc3QgZmllbGQgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgW3NpemVdLiAqKVxudHlwZSB0YWJsZSA9XG4geyBtdXRhYmxlIHNpemU6IGludDtcbiAgIG11dGFibGUgbWV0aG9kczogY2xvc3VyZSBhcnJheTtcbiAgIG11dGFibGUgbWV0aG9kc19ieV9uYW1lOiBtZXRocztcbiAgIG11dGFibGUgbWV0aG9kc19ieV9sYWJlbDogbGFicztcbiAgIG11dGFibGUgcHJldmlvdXNfc3RhdGVzOlxuICAgICAobWV0aHMgKiBsYWJzICogKGxhYmVsICogaXRlbSkgbGlzdCAqIHZhcnMgKlxuICAgICAgbGFiZWwgbGlzdCAqIHN0cmluZyBsaXN0KSBsaXN0O1xuICAgbXV0YWJsZSBoaWRkZW5fbWV0aHM6IChsYWJlbCAqIGl0ZW0pIGxpc3Q7XG4gICBtdXRhYmxlIHZhcnM6IHZhcnM7XG4gICBtdXRhYmxlIGluaXRpYWxpemVyczogKG9iaiAtPiB1bml0KSBsaXN0IH1cblxubGV0IGR1bW15X3RhYmxlID1cbiAgeyBtZXRob2RzID0gW3wgZHVtbXlfaXRlbSB8XTtcbiAgICBtZXRob2RzX2J5X25hbWUgPSBNZXRocy5lbXB0eTtcbiAgICBtZXRob2RzX2J5X2xhYmVsID0gTGFicy5lbXB0eTtcbiAgICBwcmV2aW91c19zdGF0ZXMgPSBbXTtcbiAgICBoaWRkZW5fbWV0aHMgPSBbXTtcbiAgICB2YXJzID0gVmFycy5lbXB0eTtcbiAgICBpbml0aWFsaXplcnMgPSBbXTtcbiAgICBzaXplID0gMCB9XG5cbmxldCB0YWJsZV9jb3VudCA9IHJlZiAwXG5cbigqIGR1bW15X21ldCBzaG91bGQgYmUgYSBwb2ludGVyLCBzbyB1c2UgYW4gYXRvbSAqKVxubGV0IGR1bW15X21ldCA6IGl0ZW0gPSBvYmogKE9iai5uZXdfYmxvY2sgMCAwKVxuKCogaWYgZGVidWdnaW5nIGlzIG5lZWRlZCwgdGhpcyBjb3VsZCBiZSBhIGdvb2QgaWRlYTogKilcbigqIGxldCBkdW1teV9tZXQgKCkgPSBmYWlsd2l0aCBcIlVuZGVmaW5lZCBtZXRob2RcIiAqKVxuXG5sZXQgcmVjIGZpdF9zaXplIG4gPVxuICBpZiBuIDw9IDIgdGhlbiBuIGVsc2VcbiAgZml0X3NpemUgKChuKzEpLzIpICogMlxuXG5sZXQgbmV3X3RhYmxlIHB1Yl9sYWJlbHMgPVxuICBpbmNyIHRhYmxlX2NvdW50O1xuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIHB1Yl9sYWJlbHMgaW5cbiAgbGV0IG1ldGhvZHMgPSBBcnJheS5tYWtlIChsZW4qMisyKSBkdW1teV9tZXQgaW5cbiAgbWV0aG9kcy4oMCkgPC0gbWFnaWMgbGVuO1xuICBtZXRob2RzLigxKSA8LSBtYWdpYyAoZml0X3NpemUgbGVuICogU3lzLndvcmRfc2l6ZSAvIDggLSAxKTtcbiAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG8gbWV0aG9kcy4oaSoyKzMpIDwtIG1hZ2ljIHB1Yl9sYWJlbHMuKGkpIGRvbmU7XG4gIHsgbWV0aG9kcyA9IG1ldGhvZHM7XG4gICAgbWV0aG9kc19ieV9uYW1lID0gTWV0aHMuZW1wdHk7XG4gICAgbWV0aG9kc19ieV9sYWJlbCA9IExhYnMuZW1wdHk7XG4gICAgcHJldmlvdXNfc3RhdGVzID0gW107XG4gICAgaGlkZGVuX21ldGhzID0gW107XG4gICAgdmFycyA9IFZhcnMuZW1wdHk7XG4gICAgaW5pdGlhbGl6ZXJzID0gW107XG4gICAgc2l6ZSA9IGluaXRpYWxfb2JqZWN0X3NpemUgfVxuXG5sZXQgcmVzaXplIGFycmF5IG5ld19zaXplID1cbiAgbGV0IG9sZF9zaXplID0gQXJyYXkubGVuZ3RoIGFycmF5Lm1ldGhvZHMgaW5cbiAgaWYgbmV3X3NpemUgPiBvbGRfc2l6ZSB0aGVuIGJlZ2luXG4gICAgbGV0IG5ld19idWNrID0gQXJyYXkubWFrZSBuZXdfc2l6ZSBkdW1teV9tZXQgaW5cbiAgICBBcnJheS5ibGl0IGFycmF5Lm1ldGhvZHMgMCBuZXdfYnVjayAwIG9sZF9zaXplO1xuICAgIGFycmF5Lm1ldGhvZHMgPC0gbmV3X2J1Y2tcbiBlbmRcblxubGV0IHB1dCBhcnJheSBsYWJlbCBlbGVtZW50ID1cbiAgcmVzaXplIGFycmF5IChsYWJlbCArIDEpO1xuICBhcnJheS5tZXRob2RzLihsYWJlbCkgPC0gZWxlbWVudFxuXG4oKioqKiBDbGFzc2VzICoqKiopXG5cbmxldCBtZXRob2RfY291bnQgPSByZWYgMFxubGV0IGluc3RfdmFyX2NvdW50ID0gcmVmIDBcblxuKCogdHlwZSB0ICopXG50eXBlIG1ldGggPSBpdGVtXG5cbmxldCBuZXdfbWV0aG9kIHRhYmxlID1cbiAgbGV0IGluZGV4ID0gQXJyYXkubGVuZ3RoIHRhYmxlLm1ldGhvZHMgaW5cbiAgcmVzaXplIHRhYmxlIChpbmRleCArIDEpO1xuICBpbmRleFxuXG5sZXQgZ2V0X21ldGhvZF9sYWJlbCB0YWJsZSBuYW1lID1cbiAgdHJ5XG4gICAgTWV0aHMuZmluZCBuYW1lIHRhYmxlLm1ldGhvZHNfYnlfbmFtZVxuICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIGxldCBsYWJlbCA9IG5ld19tZXRob2QgdGFibGUgaW5cbiAgICB0YWJsZS5tZXRob2RzX2J5X25hbWUgPC0gTWV0aHMuYWRkIG5hbWUgbGFiZWwgdGFibGUubWV0aG9kc19ieV9uYW1lO1xuICAgIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwgPC0gTGFicy5hZGQgbGFiZWwgdHJ1ZSB0YWJsZS5tZXRob2RzX2J5X2xhYmVsO1xuICAgIGxhYmVsXG5cbmxldCBnZXRfbWV0aG9kX2xhYmVscyB0YWJsZSBuYW1lcyA9XG4gIEFycmF5Lm1hcCAoZ2V0X21ldGhvZF9sYWJlbCB0YWJsZSkgbmFtZXNcblxubGV0IHNldF9tZXRob2QgdGFibGUgbGFiZWwgZWxlbWVudCA9XG4gIGluY3IgbWV0aG9kX2NvdW50O1xuICBpZiBMYWJzLmZpbmQgbGFiZWwgdGFibGUubWV0aG9kc19ieV9sYWJlbCB0aGVuXG4gICAgcHV0IHRhYmxlIGxhYmVsIGVsZW1lbnRcbiAgZWxzZVxuICAgIHRhYmxlLmhpZGRlbl9tZXRocyA8LSAobGFiZWwsIGVsZW1lbnQpIDo6IHRhYmxlLmhpZGRlbl9tZXRoc1xuXG5sZXQgZ2V0X21ldGhvZCB0YWJsZSBsYWJlbCA9XG4gIHRyeSBMaXN0LmFzc29jIGxhYmVsIHRhYmxlLmhpZGRlbl9tZXRoc1xuICB3aXRoIE5vdF9mb3VuZCAtPiB0YWJsZS5tZXRob2RzLihsYWJlbClcblxubGV0IHRvX2xpc3QgYXJyID1cbiAgaWYgYXJyID09IG1hZ2ljIDAgdGhlbiBbXSBlbHNlIEFycmF5LnRvX2xpc3QgYXJyXG5cbmxldCBuYXJyb3cgdGFibGUgdmFycyB2aXJ0X21ldGhzIGNvbmNyX21ldGhzID1cbiAgbGV0IHZhcnMgPSB0b19saXN0IHZhcnNcbiAgYW5kIHZpcnRfbWV0aHMgPSB0b19saXN0IHZpcnRfbWV0aHNcbiAgYW5kIGNvbmNyX21ldGhzID0gdG9fbGlzdCBjb25jcl9tZXRocyBpblxuICBsZXQgdmlydF9tZXRoX2xhYnMgPSBMaXN0Lm1hcCAoZ2V0X21ldGhvZF9sYWJlbCB0YWJsZSkgdmlydF9tZXRocyBpblxuICBsZXQgY29uY3JfbWV0aF9sYWJzID0gTGlzdC5tYXAgKGdldF9tZXRob2RfbGFiZWwgdGFibGUpIGNvbmNyX21ldGhzIGluXG4gIHRhYmxlLnByZXZpb3VzX3N0YXRlcyA8LVxuICAgICAodGFibGUubWV0aG9kc19ieV9uYW1lLCB0YWJsZS5tZXRob2RzX2J5X2xhYmVsLCB0YWJsZS5oaWRkZW5fbWV0aHMsXG4gICAgICB0YWJsZS52YXJzLCB2aXJ0X21ldGhfbGFicywgdmFycylcbiAgICAgOjogdGFibGUucHJldmlvdXNfc3RhdGVzO1xuICB0YWJsZS52YXJzIDwtXG4gICAgVmFycy5mb2xkXG4gICAgICAoZnVuIGxhYiBpbmZvIHR2YXJzIC0+XG4gICAgICAgIGlmIExpc3QubWVtIGxhYiB2YXJzIHRoZW4gVmFycy5hZGQgbGFiIGluZm8gdHZhcnMgZWxzZSB0dmFycylcbiAgICAgIHRhYmxlLnZhcnMgVmFycy5lbXB0eTtcbiAgbGV0IGJ5X25hbWUgPSByZWYgTWV0aHMuZW1wdHkgaW5cbiAgbGV0IGJ5X2xhYmVsID0gcmVmIExhYnMuZW1wdHkgaW5cbiAgTGlzdC5pdGVyMlxuICAgIChmdW4gbWV0IGxhYmVsIC0+XG4gICAgICAgYnlfbmFtZSA6PSBNZXRocy5hZGQgbWV0IGxhYmVsICFieV9uYW1lO1xuICAgICAgIGJ5X2xhYmVsIDo9XG4gICAgICAgICAgTGFicy5hZGQgbGFiZWxcbiAgICAgICAgICAgICh0cnkgTGFicy5maW5kIGxhYmVsIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwgd2l0aCBOb3RfZm91bmQgLT4gdHJ1ZSlcbiAgICAgICAgICAgICFieV9sYWJlbClcbiAgICBjb25jcl9tZXRocyBjb25jcl9tZXRoX2xhYnM7XG4gIExpc3QuaXRlcjJcbiAgICAoZnVuIG1ldCBsYWJlbCAtPlxuICAgICAgIGJ5X25hbWUgOj0gTWV0aHMuYWRkIG1ldCBsYWJlbCAhYnlfbmFtZTtcbiAgICAgICBieV9sYWJlbCA6PSBMYWJzLmFkZCBsYWJlbCBmYWxzZSAhYnlfbGFiZWwpXG4gICAgdmlydF9tZXRocyB2aXJ0X21ldGhfbGFicztcbiAgdGFibGUubWV0aG9kc19ieV9uYW1lIDwtICFieV9uYW1lO1xuICB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIDwtICFieV9sYWJlbDtcbiAgdGFibGUuaGlkZGVuX21ldGhzIDwtXG4gICAgIExpc3QuZm9sZF9yaWdodFxuICAgICAgIChmdW4gKChsYWIsIF8pIGFzIG1ldCkgaG0gLT5cbiAgICAgICAgICBpZiBMaXN0Lm1lbSBsYWIgdmlydF9tZXRoX2xhYnMgdGhlbiBobSBlbHNlIG1ldDo6aG0pXG4gICAgICAgdGFibGUuaGlkZGVuX21ldGhzXG4gICAgICAgW11cblxubGV0IHdpZGVuIHRhYmxlID1cbiAgbGV0IChieV9uYW1lLCBieV9sYWJlbCwgc2F2ZWRfaGlkZGVuX21ldGhzLCBzYXZlZF92YXJzLCB2aXJ0X21ldGhzLCB2YXJzKSA9XG4gICAgTGlzdC5oZCB0YWJsZS5wcmV2aW91c19zdGF0ZXNcbiAgaW5cbiAgdGFibGUucHJldmlvdXNfc3RhdGVzIDwtIExpc3QudGwgdGFibGUucHJldmlvdXNfc3RhdGVzO1xuICB0YWJsZS52YXJzIDwtXG4gICAgIExpc3QuZm9sZF9sZWZ0XG4gICAgICAgKGZ1biBzIHYgLT4gVmFycy5hZGQgdiAoVmFycy5maW5kIHYgdGFibGUudmFycykgcylcbiAgICAgICBzYXZlZF92YXJzIHZhcnM7XG4gIHRhYmxlLm1ldGhvZHNfYnlfbmFtZSA8LSBieV9uYW1lO1xuICB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIDwtIGJ5X2xhYmVsO1xuICB0YWJsZS5oaWRkZW5fbWV0aHMgPC1cbiAgICAgTGlzdC5mb2xkX3JpZ2h0XG4gICAgICAgKGZ1biAoKGxhYiwgXykgYXMgbWV0KSBobSAtPlxuICAgICAgICAgIGlmIExpc3QubWVtIGxhYiB2aXJ0X21ldGhzIHRoZW4gaG0gZWxzZSBtZXQ6OmhtKVxuICAgICAgIHRhYmxlLmhpZGRlbl9tZXRoc1xuICAgICAgIHNhdmVkX2hpZGRlbl9tZXRoc1xuXG5sZXQgbmV3X3Nsb3QgdGFibGUgPVxuICBsZXQgaW5kZXggPSB0YWJsZS5zaXplIGluXG4gIHRhYmxlLnNpemUgPC0gaW5kZXggKyAxO1xuICBpbmRleFxuXG5sZXQgbmV3X3ZhcmlhYmxlIHRhYmxlIG5hbWUgPVxuICB0cnkgVmFycy5maW5kIG5hbWUgdGFibGUudmFyc1xuICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIGxldCBpbmRleCA9IG5ld19zbG90IHRhYmxlIGluXG4gICAgaWYgbmFtZSA8PiBcIlwiIHRoZW4gdGFibGUudmFycyA8LSBWYXJzLmFkZCBuYW1lIGluZGV4IHRhYmxlLnZhcnM7XG4gICAgaW5kZXhcblxubGV0IHRvX2FycmF5IGFyciA9XG4gIGlmIGFyciA9IE9iai5tYWdpYyAwIHRoZW4gW3x8XSBlbHNlIGFyclxuXG5sZXQgbmV3X21ldGhvZHNfdmFyaWFibGVzIHRhYmxlIG1ldGhzIHZhbHMgPVxuICBsZXQgbWV0aHMgPSB0b19hcnJheSBtZXRocyBpblxuICBsZXQgbm1ldGhzID0gQXJyYXkubGVuZ3RoIG1ldGhzIGFuZCBudmFscyA9IEFycmF5Lmxlbmd0aCB2YWxzIGluXG4gIGxldCByZXMgPSBBcnJheS5tYWtlIChubWV0aHMgKyBudmFscykgMCBpblxuICBmb3IgaSA9IDAgdG8gbm1ldGhzIC0gMSBkb1xuICAgIHJlcy4oaSkgPC0gZ2V0X21ldGhvZF9sYWJlbCB0YWJsZSBtZXRocy4oaSlcbiAgZG9uZTtcbiAgZm9yIGkgPSAwIHRvIG52YWxzIC0gMSBkb1xuICAgIHJlcy4oaStubWV0aHMpIDwtIG5ld192YXJpYWJsZSB0YWJsZSB2YWxzLihpKVxuICBkb25lO1xuICByZXNcblxubGV0IGdldF92YXJpYWJsZSB0YWJsZSBuYW1lID1cbiAgdHJ5IFZhcnMuZmluZCBuYW1lIHRhYmxlLnZhcnMgd2l0aCBOb3RfZm91bmQgLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBnZXRfdmFyaWFibGVzIHRhYmxlIG5hbWVzID1cbiAgQXJyYXkubWFwIChnZXRfdmFyaWFibGUgdGFibGUpIG5hbWVzXG5cbmxldCBhZGRfaW5pdGlhbGl6ZXIgdGFibGUgZiA9XG4gIHRhYmxlLmluaXRpYWxpemVycyA8LSBmOjp0YWJsZS5pbml0aWFsaXplcnNcblxuKCpcbm1vZHVsZSBLZXlzID1cbiAgTWFwLk1ha2Uoc3RydWN0IHR5cGUgdCA9IHRhZyBhcnJheSBsZXQgY29tcGFyZSAoeDp0KSB5ID0gY29tcGFyZSB4IHkgZW5kKVxubGV0IGtleV9tYXAgPSByZWYgS2V5cy5lbXB0eVxubGV0IGdldF9rZXkgdGFncyA6IGl0ZW0gPVxuICB0cnkgbWFnaWMgKEtleXMuZmluZCB0YWdzICFrZXlfbWFwIDogdGFnIGFycmF5KVxuICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIGtleV9tYXAgOj0gS2V5cy5hZGQgdGFncyB0YWdzICFrZXlfbWFwO1xuICAgIG1hZ2ljIHRhZ3NcbiopXG5cbmxldCBjcmVhdGVfdGFibGUgcHVibGljX21ldGhvZHMgPVxuICBpZiBwdWJsaWNfbWV0aG9kcyA9PSBtYWdpYyAwIHRoZW4gbmV3X3RhYmxlIFt8fF0gZWxzZVxuICAoKiBbcHVibGljX21ldGhvZHNdIG11c3QgYmUgaW4gYXNjZW5kaW5nIG9yZGVyIGZvciBieXRlY29kZSAqKVxuICBsZXQgdGFncyA9IEFycmF5Lm1hcCBwdWJsaWNfbWV0aG9kX2xhYmVsIHB1YmxpY19tZXRob2RzIGluXG4gIGxldCB0YWJsZSA9IG5ld190YWJsZSB0YWdzIGluXG4gIEFycmF5Lml0ZXJpXG4gICAgKGZ1biBpIG1ldCAtPlxuICAgICAgbGV0IGxhYiA9IGkqMisyIGluXG4gICAgICB0YWJsZS5tZXRob2RzX2J5X25hbWUgIDwtIE1ldGhzLmFkZCBtZXQgbGFiIHRhYmxlLm1ldGhvZHNfYnlfbmFtZTtcbiAgICAgIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwgPC0gTGFicy5hZGQgbGFiIHRydWUgdGFibGUubWV0aG9kc19ieV9sYWJlbClcbiAgICBwdWJsaWNfbWV0aG9kcztcbiAgdGFibGVcblxubGV0IGluaXRfY2xhc3MgdGFibGUgPVxuICBpbnN0X3Zhcl9jb3VudCA6PSAhaW5zdF92YXJfY291bnQgKyB0YWJsZS5zaXplIC0gMTtcbiAgdGFibGUuaW5pdGlhbGl6ZXJzIDwtIExpc3QucmV2IHRhYmxlLmluaXRpYWxpemVycztcbiAgcmVzaXplIHRhYmxlICgzICsgbWFnaWMgdGFibGUubWV0aG9kcy4oMSkgKiAxNiAvIFN5cy53b3JkX3NpemUpXG5cbmxldCBpbmhlcml0cyBjbGEgdmFscyB2aXJ0X21ldGhzIGNvbmNyX21ldGhzIChfLCBzdXBlciwgXywgZW52KSB0b3AgPVxuICBuYXJyb3cgY2xhIHZhbHMgdmlydF9tZXRocyBjb25jcl9tZXRocztcbiAgbGV0IGluaXQgPVxuICAgIGlmIHRvcCB0aGVuIHN1cGVyIGNsYSBlbnYgZWxzZSBPYmoucmVwciAoc3VwZXIgY2xhKSBpblxuICB3aWRlbiBjbGE7XG4gIEFycmF5LmNvbmNhdFxuICAgIFtbfCByZXByIGluaXQgfF07XG4gICAgIG1hZ2ljIChBcnJheS5tYXAgKGdldF92YXJpYWJsZSBjbGEpICh0b19hcnJheSB2YWxzKSA6IGludCBhcnJheSk7XG4gICAgIEFycmF5Lm1hcFxuICAgICAgIChmdW4gbm0gLT4gcmVwciAoZ2V0X21ldGhvZCBjbGEgKGdldF9tZXRob2RfbGFiZWwgY2xhIG5tKSA6IGNsb3N1cmUpKVxuICAgICAgICh0b19hcnJheSBjb25jcl9tZXRocykgXVxuXG5sZXQgbWFrZV9jbGFzcyBwdWJfbWV0aHMgY2xhc3NfaW5pdCA9XG4gIGxldCB0YWJsZSA9IGNyZWF0ZV90YWJsZSBwdWJfbWV0aHMgaW5cbiAgbGV0IGVudl9pbml0ID0gY2xhc3NfaW5pdCB0YWJsZSBpblxuICBpbml0X2NsYXNzIHRhYmxlO1xuICAoZW52X2luaXQgKE9iai5yZXByIDApLCBjbGFzc19pbml0LCBlbnZfaW5pdCwgT2JqLnJlcHIgMClcblxudHlwZSBpbml0X3RhYmxlID0geyBtdXRhYmxlIGVudl9pbml0OiB0OyBtdXRhYmxlIGNsYXNzX2luaXQ6IHRhYmxlIC0+IHQgfVxuXG5sZXQgbWFrZV9jbGFzc19zdG9yZSBwdWJfbWV0aHMgY2xhc3NfaW5pdCBpbml0X3RhYmxlID1cbiAgbGV0IHRhYmxlID0gY3JlYXRlX3RhYmxlIHB1Yl9tZXRocyBpblxuICBsZXQgZW52X2luaXQgPSBjbGFzc19pbml0IHRhYmxlIGluXG4gIGluaXRfY2xhc3MgdGFibGU7XG4gIGluaXRfdGFibGUuY2xhc3NfaW5pdCA8LSBjbGFzc19pbml0O1xuICBpbml0X3RhYmxlLmVudl9pbml0IDwtIGVudl9pbml0XG5cbmxldCBkdW1teV9jbGFzcyBsb2MgPVxuICBsZXQgdW5kZWYgPSBmdW4gXyAtPiByYWlzZSAoVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGUgbG9jKSBpblxuICAoT2JqLm1hZ2ljIHVuZGVmLCB1bmRlZiwgdW5kZWYsIE9iai5yZXByIDApXG5cbigqKioqIE9iamVjdHMgKioqKilcblxubGV0IGNyZWF0ZV9vYmplY3QgdGFibGUgPVxuICAoKiBYWFggQXBwZWwgZGUgW29ial9ibG9ja10gfCBDYWxsIHRvIFtvYmpfYmxvY2tdICAqKVxuICBsZXQgb2JqID0gT2JqLm5ld19ibG9jayBPYmoub2JqZWN0X3RhZyB0YWJsZS5zaXplIGluXG4gICgqIFhYWCBBcHBlbCBkZSBbY2FtbF9tb2RpZnldIHwgQ2FsbCB0byBbY2FtbF9tb2RpZnldICopXG4gIE9iai5zZXRfZmllbGQgb2JqIDAgKE9iai5yZXByIHRhYmxlLm1ldGhvZHMpO1xuICBPYmoub2JqIChzZXRfaWQgb2JqKVxuXG5sZXQgY3JlYXRlX29iamVjdF9vcHQgb2JqXzAgdGFibGUgPVxuICBpZiAoT2JqLm1hZ2ljIG9ial8wIDogYm9vbCkgdGhlbiBvYmpfMCBlbHNlIGJlZ2luXG4gICAgKCogWFhYIEFwcGVsIGRlIFtvYmpfYmxvY2tdIHwgQ2FsbCB0byBbb2JqX2Jsb2NrXSAgKilcbiAgICBsZXQgb2JqID0gT2JqLm5ld19ibG9jayBPYmoub2JqZWN0X3RhZyB0YWJsZS5zaXplIGluXG4gICAgKCogWFhYIEFwcGVsIGRlIFtjYW1sX21vZGlmeV0gfCBDYWxsIHRvIFtjYW1sX21vZGlmeV0gKilcbiAgICBPYmouc2V0X2ZpZWxkIG9iaiAwIChPYmoucmVwciB0YWJsZS5tZXRob2RzKTtcbiAgICBPYmoub2JqIChzZXRfaWQgb2JqKVxuICBlbmRcblxubGV0IHJlYyBpdGVyX2Ygb2JqID1cbiAgZnVuY3Rpb25cbiAgICBbXSAgIC0+ICgpXG4gIHwgZjo6bCAtPiBmIG9iajsgaXRlcl9mIG9iaiBsXG5cbmxldCBydW5faW5pdGlhbGl6ZXJzIG9iaiB0YWJsZSA9XG4gIGxldCBpbml0cyA9IHRhYmxlLmluaXRpYWxpemVycyBpblxuICBpZiBpbml0cyA8PiBbXSB0aGVuXG4gICAgaXRlcl9mIG9iaiBpbml0c1xuXG5sZXQgcnVuX2luaXRpYWxpemVyc19vcHQgb2JqXzAgb2JqIHRhYmxlID1cbiAgaWYgKE9iai5tYWdpYyBvYmpfMCA6IGJvb2wpIHRoZW4gb2JqIGVsc2UgYmVnaW5cbiAgICBsZXQgaW5pdHMgPSB0YWJsZS5pbml0aWFsaXplcnMgaW5cbiAgICBpZiBpbml0cyA8PiBbXSB0aGVuIGl0ZXJfZiBvYmogaW5pdHM7XG4gICAgb2JqXG4gIGVuZFxuXG5sZXQgY3JlYXRlX29iamVjdF9hbmRfcnVuX2luaXRpYWxpemVycyBvYmpfMCB0YWJsZSA9XG4gIGlmIChPYmoubWFnaWMgb2JqXzAgOiBib29sKSB0aGVuIG9ial8wIGVsc2UgYmVnaW5cbiAgICBsZXQgb2JqID0gY3JlYXRlX29iamVjdCB0YWJsZSBpblxuICAgIHJ1bl9pbml0aWFsaXplcnMgb2JqIHRhYmxlO1xuICAgIG9ialxuICBlbmRcblxuKCogRXF1aXZhbGVudCBwcmltaXRpdmUgYmVsb3dcbmxldCBzZW5kc2VsZiBvYmogbGFiID1cbiAgKG1hZ2ljIG9iaiA6IChvYmogLT4gdCkgYXJyYXkgYXJyYXkpLigwKS4obGFiKSBvYmpcbiopXG5leHRlcm5hbCBzZW5kIDogb2JqIC0+IHRhZyAtPiAnYSA9IFwiJXNlbmRcIlxuZXh0ZXJuYWwgc2VuZGNhY2hlIDogb2JqIC0+IHRhZyAtPiB0IC0+IGludCAtPiAnYSA9IFwiJXNlbmRjYWNoZVwiXG5leHRlcm5hbCBzZW5kc2VsZiA6IG9iaiAtPiBsYWJlbCAtPiAnYSA9IFwiJXNlbmRzZWxmXCJcbmV4dGVybmFsIGdldF9wdWJsaWNfbWV0aG9kIDogb2JqIC0+IHRhZyAtPiBjbG9zdXJlXG4gICAgPSBcImNhbWxfZ2V0X3B1YmxpY19tZXRob2RcIiBbQEBub2FsbG9jXVxuXG4oKioqKiB0YWJsZSBjb2xsZWN0aW9uIGFjY2VzcyAqKioqKVxuXG50eXBlIHRhYmxlcyA9XG4gIHwgRW1wdHlcbiAgfCBDb25zIG9mIHtrZXkgOiBjbG9zdXJlOyBtdXRhYmxlIGRhdGE6IHRhYmxlczsgbXV0YWJsZSBuZXh0OiB0YWJsZXN9XG5cbmxldCBzZXRfZGF0YSB0YWJsZXMgdiA9IG1hdGNoIHRhYmxlcyB3aXRoXG4gIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgQ29ucyB0YWJsZXMgLT4gdGFibGVzLmRhdGEgPC0gdlxubGV0IHNldF9uZXh0IHRhYmxlcyB2ID0gbWF0Y2ggdGFibGVzIHdpdGhcbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMubmV4dCA8LSB2XG5sZXQgZ2V0X2tleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgQ29ucyB0YWJsZXMgLT4gdGFibGVzLmtleVxubGV0IGdldF9kYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMuZGF0YVxubGV0IGdldF9uZXh0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMubmV4dFxuXG5sZXQgYnVpbGRfcGF0aCBuIGtleXMgdGFibGVzID1cbiAgbGV0IHJlcyA9IENvbnMge2tleSA9IE9iai5tYWdpYyAwOyBkYXRhID0gRW1wdHk7IG5leHQgPSBFbXB0eX0gaW5cbiAgbGV0IHIgPSByZWYgcmVzIGluXG4gIGZvciBpID0gMCB0byBuIGRvXG4gICAgciA6PSBDb25zIHtrZXkgPSBrZXlzLihpKTsgZGF0YSA9ICFyOyBuZXh0ID0gRW1wdHl9XG4gIGRvbmU7XG4gIHNldF9kYXRhIHRhYmxlcyAhcjtcbiAgcmVzXG5cbmxldCByZWMgbG9va3VwX2tleXMgaSBrZXlzIHRhYmxlcyA9XG4gIGlmIGkgPCAwIHRoZW4gdGFibGVzIGVsc2VcbiAgbGV0IGtleSA9IGtleXMuKGkpIGluXG4gIGxldCByZWMgbG9va3VwX2tleSAodGFibGVzOnRhYmxlcykgPVxuICAgIGlmIGdldF9rZXkgdGFibGVzID09IGtleSB0aGVuXG4gICAgICBtYXRjaCBnZXRfZGF0YSB0YWJsZXMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgQ29ucyBfIGFzIHRhYmxlc19kYXRhIC0+XG4gICAgICAgICAgbG9va3VwX2tleXMgKGktMSkga2V5cyB0YWJsZXNfZGF0YVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIGdldF9uZXh0IHRhYmxlcyB3aXRoXG4gICAgICB8IENvbnMgXyBhcyBuZXh0IC0+IGxvb2t1cF9rZXkgbmV4dFxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGxldCBuZXh0IDogdGFibGVzID0gQ29ucyB7a2V5OyBkYXRhID0gRW1wdHk7IG5leHQgPSBFbXB0eX0gaW5cbiAgICAgICAgICBzZXRfbmV4dCB0YWJsZXMgbmV4dDtcbiAgICAgICAgICBidWlsZF9wYXRoIChpLTEpIGtleXMgbmV4dFxuICBpblxuICBsb29rdXBfa2V5IHRhYmxlc1xuXG5sZXQgbG9va3VwX3RhYmxlcyByb290IGtleXMgPVxuICBtYXRjaCBnZXRfZGF0YSByb290IHdpdGhcbiAgfCBDb25zIF8gYXMgcm9vdF9kYXRhIC0+XG4gICAgbG9va3VwX2tleXMgKEFycmF5Lmxlbmd0aCBrZXlzIC0gMSkga2V5cyByb290X2RhdGFcbiAgfCBFbXB0eSAtPlxuICAgIGJ1aWxkX3BhdGggKEFycmF5Lmxlbmd0aCBrZXlzIC0gMSkga2V5cyByb290XG5cbigqKioqIGJ1aWx0aW4gbWV0aG9kcyAqKioqKVxuXG5sZXQgZ2V0X2NvbnN0IHggPSByZXQgKGZ1biBfb2JqIC0+IHgpXG5sZXQgZ2V0X3ZhciBuICAgPSByZXQgKGZ1biBvYmogLT4gQXJyYXkudW5zYWZlX2dldCBvYmogbilcbmxldCBnZXRfZW52IGUgbiA9XG4gIHJldCAoZnVuIG9iaiAtPlxuICAgIEFycmF5LnVuc2FmZV9nZXQgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogZSkgOiBvYmopIG4pXG5sZXQgZ2V0X21ldGggbiAgPSByZXQgKGZ1biBvYmogLT4gc2VuZHNlbGYgb2JqIG4pXG5sZXQgc2V0X3ZhciBuICAgPSByZXQgKGZ1biBvYmogeCAtPiBBcnJheS51bnNhZmVfc2V0IG9iaiBuIHgpXG5sZXQgYXBwX2NvbnN0IGYgeCA9IHJldCAoZnVuIF9vYmogLT4gZiB4KVxubGV0IGFwcF92YXIgZiBuICAgPSByZXQgKGZ1biBvYmogLT4gZiAoQXJyYXkudW5zYWZlX2dldCBvYmogbikpXG5sZXQgYXBwX2VudiBmIGUgbiA9XG4gIHJldCAoZnVuIG9iaiAtPlxuICAgIGYgKEFycmF5LnVuc2FmZV9nZXQgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogZSkgOiBvYmopIG4pKVxubGV0IGFwcF9tZXRoIGYgbiAgPSByZXQgKGZ1biBvYmogLT4gZiAoc2VuZHNlbGYgb2JqIG4pKVxubGV0IGFwcF9jb25zdF9jb25zdCBmIHggeSA9IHJldCAoZnVuIF9vYmogLT4gZiB4IHkpXG5sZXQgYXBwX2NvbnN0X3ZhciBmIHggbiAgID0gcmV0IChmdW4gb2JqIC0+IGYgeCAoQXJyYXkudW5zYWZlX2dldCBvYmogbikpXG5sZXQgYXBwX2NvbnN0X21ldGggZiB4IG4gPSByZXQgKGZ1biBvYmogLT4gZiB4IChzZW5kc2VsZiBvYmogbikpXG5sZXQgYXBwX3Zhcl9jb25zdCBmIG4geCA9IHJldCAoZnVuIG9iaiAtPiBmIChBcnJheS51bnNhZmVfZ2V0IG9iaiBuKSB4KVxubGV0IGFwcF9tZXRoX2NvbnN0IGYgbiB4ID0gcmV0IChmdW4gb2JqIC0+IGYgKHNlbmRzZWxmIG9iaiBuKSB4KVxubGV0IGFwcF9jb25zdF9lbnYgZiB4IGUgbiA9XG4gIHJldCAoZnVuIG9iaiAtPlxuICAgIGYgeCAoQXJyYXkudW5zYWZlX2dldCAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IG9iaiBlKSA6IG9iaikgbikpXG5sZXQgYXBwX2Vudl9jb25zdCBmIGUgbiB4ID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgZiAoQXJyYXkudW5zYWZlX2dldCAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IG9iaiBlKSA6IG9iaikgbikgeClcbmxldCBtZXRoX2FwcF9jb25zdCBuIHggPSByZXQgKGZ1biBvYmogLT4gKHNlbmRzZWxmIG9iaiBuIDogXyAtPiBfKSB4KVxubGV0IG1ldGhfYXBwX3ZhciBuIG0gPVxuICByZXQgKGZ1biBvYmogLT4gKHNlbmRzZWxmIG9iaiBuIDogXyAtPiBfKSAoQXJyYXkudW5zYWZlX2dldCBvYmogbSkpXG5sZXQgbWV0aF9hcHBfZW52IG4gZSBtID1cbiAgcmV0IChmdW4gb2JqIC0+IChzZW5kc2VsZiBvYmogbiA6IF8gLT4gXylcbiAgICAgIChBcnJheS51bnNhZmVfZ2V0IChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIGUpIDogb2JqKSBtKSlcbmxldCBtZXRoX2FwcF9tZXRoIG4gbSA9XG4gIHJldCAoZnVuIG9iaiAtPiAoc2VuZHNlbGYgb2JqIG4gOiBfIC0+IF8pIChzZW5kc2VsZiBvYmogbSkpXG5sZXQgc2VuZF9jb25zdCBtIHggYyA9XG4gIHJldCAoZnVuIG9iaiAtPiBzZW5kY2FjaGUgeCBtIChBcnJheS51bnNhZmVfZ2V0IG9iaiAwKSBjKVxubGV0IHNlbmRfdmFyIG0gbiBjID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgc2VuZGNhY2hlIChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIG4pIDogb2JqKSBtXG4gICAgICAoQXJyYXkudW5zYWZlX2dldCBvYmogMCkgYylcbmxldCBzZW5kX2VudiBtIGUgbiBjID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgc2VuZGNhY2hlXG4gICAgICAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0XG4gICAgICAgICAgICAgICAgICAgIChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIGUpIDogb2JqKSBuKSA6IG9iailcbiAgICAgIG0gKEFycmF5LnVuc2FmZV9nZXQgb2JqIDApIGMpXG5sZXQgc2VuZF9tZXRoIG0gbiBjID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgc2VuZGNhY2hlIChzZW5kc2VsZiBvYmogbikgbSAoQXJyYXkudW5zYWZlX2dldCBvYmogMCkgYylcbmxldCBuZXdfY2FjaGUgdGFibGUgPVxuICBsZXQgbiA9IG5ld19tZXRob2QgdGFibGUgaW5cbiAgbGV0IG4gPVxuICAgIGlmIG4gbW9kIDIgPSAwIHx8IG4gPiAyICsgbWFnaWMgdGFibGUubWV0aG9kcy4oMSkgKiAxNiAvIFN5cy53b3JkX3NpemVcbiAgICB0aGVuIG4gZWxzZSBuZXdfbWV0aG9kIHRhYmxlXG4gIGluXG4gIHRhYmxlLm1ldGhvZHMuKG4pIDwtIE9iai5tYWdpYyAwO1xuICBuXG5cbnR5cGUgaW1wbCA9XG4gICAgR2V0Q29uc3RcbiAgfCBHZXRWYXJcbiAgfCBHZXRFbnZcbiAgfCBHZXRNZXRoXG4gIHwgU2V0VmFyXG4gIHwgQXBwQ29uc3RcbiAgfCBBcHBWYXJcbiAgfCBBcHBFbnZcbiAgfCBBcHBNZXRoXG4gIHwgQXBwQ29uc3RDb25zdFxuICB8IEFwcENvbnN0VmFyXG4gIHwgQXBwQ29uc3RFbnZcbiAgfCBBcHBDb25zdE1ldGhcbiAgfCBBcHBWYXJDb25zdFxuICB8IEFwcEVudkNvbnN0XG4gIHwgQXBwTWV0aENvbnN0XG4gIHwgTWV0aEFwcENvbnN0XG4gIHwgTWV0aEFwcFZhclxuICB8IE1ldGhBcHBFbnZcbiAgfCBNZXRoQXBwTWV0aFxuICB8IFNlbmRDb25zdFxuICB8IFNlbmRWYXJcbiAgfCBTZW5kRW52XG4gIHwgU2VuZE1ldGhcbiAgfCBDbG9zdXJlIG9mIGNsb3N1cmVcblxubGV0IG1ldGhvZF9pbXBsIHRhYmxlIGkgYXJyID1cbiAgbGV0IG5leHQgKCkgPSBpbmNyIGk7IG1hZ2ljIGFyci4oIWkpIGluXG4gIG1hdGNoIG5leHQoKSB3aXRoXG4gICAgR2V0Q29uc3QgLT4gbGV0IHggOiB0ID0gbmV4dCgpIGluIGdldF9jb25zdCB4XG4gIHwgR2V0VmFyICAgLT4gbGV0IG4gPSBuZXh0KCkgaW4gZ2V0X3ZhciBuXG4gIHwgR2V0RW52ICAgLT4gbGV0IGUgPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0KCkgaW4gZ2V0X2VudiBlIG5cbiAgfCBHZXRNZXRoICAtPiBsZXQgbiA9IG5leHQoKSBpbiBnZXRfbWV0aCBuXG4gIHwgU2V0VmFyICAgLT4gbGV0IG4gPSBuZXh0KCkgaW4gc2V0X3ZhciBuXG4gIHwgQXBwQ29uc3QgLT4gbGV0IGYgPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW4gYXBwX2NvbnN0IGYgeFxuICB8IEFwcFZhciAgIC0+IGxldCBmID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCAoKSBpbiBhcHBfdmFyIGYgblxuICB8IEFwcEVudiAgIC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiAgbGV0IGUgPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0KCkgaW5cbiAgICAgIGFwcF9lbnYgZiBlIG5cbiAgfCBBcHBNZXRoICAtPiBsZXQgZiA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQgKCkgaW4gYXBwX21ldGggZiBuXG4gIHwgQXBwQ29uc3RDb25zdCAtPlxuICAgICAgbGV0IGYgPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW4gbGV0IHkgPSBuZXh0KCkgaW5cbiAgICAgIGFwcF9jb25zdF9jb25zdCBmIHggeVxuICB8IEFwcENvbnN0VmFyIC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgYXBwX2NvbnN0X3ZhciBmIHggblxuICB8IEFwcENvbnN0RW52IC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBsZXQgZSA9IG5leHQgKCkgaW4gbGV0IG4gPSBuZXh0KCkgaW5cbiAgICAgIGFwcF9jb25zdF9lbnYgZiB4IGUgblxuICB8IEFwcENvbnN0TWV0aCAtPlxuICAgICAgbGV0IGYgPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0KCkgaW5cbiAgICAgIGFwcF9jb25zdF9tZXRoIGYgeCBuXG4gIHwgQXBwVmFyQ29uc3QgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluXG4gICAgICBhcHBfdmFyX2NvbnN0IGYgbiB4XG4gIHwgQXBwRW52Q29uc3QgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCBlID0gbmV4dCAoKSBpbiBsZXQgbiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpblxuICAgICAgYXBwX2Vudl9jb25zdCBmIGUgbiB4XG4gIHwgQXBwTWV0aENvbnN0IC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpblxuICAgICAgYXBwX21ldGhfY29uc3QgZiBuIHhcbiAgfCBNZXRoQXBwQ29uc3QgLT5cbiAgICAgIGxldCBuID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluIG1ldGhfYXBwX2NvbnN0IG4geFxuICB8IE1ldGhBcHBWYXIgLT5cbiAgICAgIGxldCBuID0gbmV4dCgpIGluIGxldCBtID0gbmV4dCgpIGluIG1ldGhfYXBwX3ZhciBuIG1cbiAgfCBNZXRoQXBwRW52IC0+XG4gICAgICBsZXQgbiA9IG5leHQoKSBpbiBsZXQgZSA9IG5leHQoKSBpbiBsZXQgbSA9IG5leHQoKSBpblxuICAgICAgbWV0aF9hcHBfZW52IG4gZSBtXG4gIHwgTWV0aEFwcE1ldGggLT5cbiAgICAgIGxldCBuID0gbmV4dCgpIGluIGxldCBtID0gbmV4dCgpIGluIG1ldGhfYXBwX21ldGggbiBtXG4gIHwgU2VuZENvbnN0IC0+XG4gICAgICBsZXQgbSA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBzZW5kX2NvbnN0IG0geCAobmV3X2NhY2hlIHRhYmxlKVxuICB8IFNlbmRWYXIgLT5cbiAgICAgIGxldCBtID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCAoKSBpbiBzZW5kX3ZhciBtIG4gKG5ld19jYWNoZSB0YWJsZSlcbiAgfCBTZW5kRW52IC0+XG4gICAgICBsZXQgbSA9IG5leHQoKSBpbiBsZXQgZSA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgc2VuZF9lbnYgbSBlIG4gKG5ld19jYWNoZSB0YWJsZSlcbiAgfCBTZW5kTWV0aCAtPlxuICAgICAgbGV0IG0gPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0ICgpIGluIHNlbmRfbWV0aCBtIG4gKG5ld19jYWNoZSB0YWJsZSlcbiAgfCBDbG9zdXJlIF8gYXMgY2xvIC0+IG1hZ2ljIGNsb1xuXG5sZXQgc2V0X21ldGhvZHMgdGFibGUgbWV0aG9kcyA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggbWV0aG9kcyBpbiBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgbGV0IGxhYmVsID0gbWV0aG9kcy4oIWkpIGluIGxldCBjbG8gPSBtZXRob2RfaW1wbCB0YWJsZSBpIG1ldGhvZHMgaW5cbiAgICBzZXRfbWV0aG9kIHRhYmxlIGxhYmVsIGNsbztcbiAgICBpbmNyIGlcbiAgZG9uZVxuXG4oKioqKiBTdGF0aXN0aWNzICoqKiopXG5cbnR5cGUgc3RhdHMgPVxuICB7IGNsYXNzZXM6IGludDsgbWV0aG9kczogaW50OyBpbnN0X3ZhcnM6IGludDsgfVxuXG5sZXQgc3RhdHMgKCkgPVxuICB7IGNsYXNzZXMgPSAhdGFibGVfY291bnQ7XG4gICAgbWV0aG9kcyA9ICFtZXRob2RfY291bnQ7IGluc3RfdmFycyA9ICFpbnN0X3Zhcl9jb3VudDsgfVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHRva2VuID1cbiAgICBLd2Qgb2Ygc3RyaW5nXG4gIHwgSWRlbnQgb2Ygc3RyaW5nXG4gIHwgSW50IG9mIGludFxuICB8IEZsb2F0IG9mIGZsb2F0XG4gIHwgU3RyaW5nIG9mIHN0cmluZ1xuICB8IENoYXIgb2YgY2hhclxuXG4oKiBUaGUgc3RyaW5nIGJ1ZmZlcmluZyBtYWNoaW5lcnkgKilcblxubGV0IGluaXRpYWxfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDMyXG5cbmxldCBidWZmZXIgPSByZWYgaW5pdGlhbF9idWZmZXJcbmxldCBidWZwb3MgPSByZWYgMFxuXG5sZXQgcmVzZXRfYnVmZmVyICgpID0gYnVmZmVyIDo9IGluaXRpYWxfYnVmZmVyOyBidWZwb3MgOj0gMFxuXG5sZXQgc3RvcmUgYyA9XG4gIGlmICFidWZwb3MgPj0gQnl0ZXMubGVuZ3RoICFidWZmZXIgdGhlbiBiZWdpblxuICAgIGxldCBuZXdidWZmZXIgPSBCeXRlcy5jcmVhdGUgKDIgKiAhYnVmcG9zKSBpblxuICAgIEJ5dGVzLmJsaXQgIWJ1ZmZlciAwIG5ld2J1ZmZlciAwICFidWZwb3M7XG4gICAgYnVmZmVyIDo9IG5ld2J1ZmZlclxuICBlbmQ7XG4gIEJ5dGVzLnNldCAhYnVmZmVyICFidWZwb3MgYztcbiAgaW5jciBidWZwb3NcblxubGV0IGdldF9zdHJpbmcgKCkgPVxuICBsZXQgcyA9IEJ5dGVzLnN1Yl9zdHJpbmcgIWJ1ZmZlciAwICFidWZwb3MgaW4gYnVmZmVyIDo9IGluaXRpYWxfYnVmZmVyOyBzXG5cbigqIFRoZSBsZXhlciAqKVxuXG5sZXQgbWFrZV9sZXhlciBrZXl3b3JkcyA9XG4gIGxldCBrd2RfdGFibGUgPSBIYXNodGJsLmNyZWF0ZSAxNyBpblxuICBMaXN0Lml0ZXIgKGZ1biBzIC0+IEhhc2h0YmwuYWRkIGt3ZF90YWJsZSBzIChLd2QgcykpIGtleXdvcmRzO1xuICBsZXQgaWRlbnRfb3Jfa2V5d29yZCBpZCA9XG4gICAgdHJ5IEhhc2h0YmwuZmluZCBrd2RfdGFibGUgaWQgd2l0aFxuICAgICAgTm90X2ZvdW5kIC0+IElkZW50IGlkXG4gIGFuZCBrZXl3b3JkX29yX2Vycm9yIGMgPVxuICAgIGxldCBzID0gU3RyaW5nLm1ha2UgMSBjIGluXG4gICAgdHJ5IEhhc2h0YmwuZmluZCBrd2RfdGFibGUgcyB3aXRoXG4gICAgICBOb3RfZm91bmQgLT4gcmFpc2UgKFN0cmVhbS5FcnJvciAoXCJJbGxlZ2FsIGNoYXJhY3RlciBcIiBeIHMpKVxuICBpblxuICBsZXQgcmVjIG5leHRfdG9rZW4gKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAoJyAnIHwgJ1xcMDEwJyB8ICdcXDAxMycgfCAnXFwwMDknIHwgJ1xcMDI2JyB8ICdcXDAxMicpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbmV4dF90b2tlbiBzdHJtX19cbiAgICB8IFNvbWUgKCdBJy4uJ1onIHwgJ2EnLi4neicgfCAnXycgfCAnXFwxOTInLi4nXFwyNTUnIGFzIGMpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gcmVzZXRfYnVmZmVyICgpOyBzdG9yZSBjOyBpZGVudCBzXG4gICAgfCBTb21lXG4gICAgICAgICgnIScgfCAnJScgfCAnJicgfCAnJCcgfCAnIycgfCAnKycgfCAnLycgfCAnOicgfCAnPCcgfCAnPScgfCAnPicgfFxuICAgICAgICAgJz8nIHwgJ0AnIHwgJ1xcXFwnIHwgJ34nIHwgJ14nIHwgJ3wnIHwgJyonIGFzIGMpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gcmVzZXRfYnVmZmVyICgpOyBzdG9yZSBjOyBpZGVudDIgc1xuICAgIHwgU29tZSAoJzAnLi4nOScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fO1xuICAgICAgICBsZXQgcyA9IHN0cm1fXyBpbiByZXNldF9idWZmZXIgKCk7IHN0b3JlIGM7IG51bWJlciBzXG4gICAgfCBTb21lICdcXCcnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IGMgPVxuICAgICAgICAgIHRyeSBjaGFyIHN0cm1fXyB3aXRoXG4gICAgICAgICAgICBTdHJlYW0uRmFpbHVyZSAtPiByYWlzZSAoU3RyZWFtLkVycm9yIFwiXCIpXG4gICAgICAgIGluXG4gICAgICAgIGJlZ2luIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICAgICAgU29tZSAnXFwnJyAtPiBTdHJlYW0uanVuayBzdHJtX187IFNvbWUgKENoYXIgYylcbiAgICAgICAgfCBfIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lICdcXFwiJyAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187XG4gICAgICAgIGxldCBzID0gc3RybV9fIGluIHJlc2V0X2J1ZmZlciAoKTsgU29tZSAoU3RyaW5nIChzdHJpbmcgcykpXG4gICAgfCBTb21lICctJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG5lZ19udW1iZXIgc3RybV9fXG4gICAgfCBTb21lICcoJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2NvbW1lbnQgc3RybV9fXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBTb21lIChrZXl3b3JkX29yX2Vycm9yIGMpXG4gICAgfCBfIC0+IE5vbmVcbiAgYW5kIGlkZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWVcbiAgICAgICAgKCdBJy4uJ1onIHwgJ2EnLi4neicgfCAnXFwxOTInLi4nXFwyNTUnIHwgJzAnLi4nOScgfCAnXycgfCAnXFwnJyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGlkZW50IHNcbiAgICB8IF8gLT4gU29tZSAoaWRlbnRfb3Jfa2V5d29yZCAoZ2V0X3N0cmluZyAoKSkpXG4gIGFuZCBpZGVudDIgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZVxuICAgICAgICAoJyEnIHwgJyUnIHwgJyYnIHwgJyQnIHwgJyMnIHwgJysnIHwgJy0nIHwgJy8nIHwgJzonIHwgJzwnIHwgJz0nIHxcbiAgICAgICAgICc+JyB8ICc/JyB8ICdAJyB8ICdcXFxcJyB8ICd+JyB8ICdeJyB8ICd8JyB8ICcqJyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGlkZW50MiBzXG4gICAgfCBfIC0+IFNvbWUgKGlkZW50X29yX2tleXdvcmQgKGdldF9zdHJpbmcgKCkpKVxuICBhbmQgbmVnX251bWJlciAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187XG4gICAgICAgIGxldCBzID0gc3RybV9fIGluIHJlc2V0X2J1ZmZlciAoKTsgc3RvcmUgJy0nOyBzdG9yZSBjOyBudW1iZXIgc1xuICAgIHwgXyAtPiBsZXQgcyA9IHN0cm1fXyBpbiByZXNldF9idWZmZXIgKCk7IHN0b3JlICctJzsgaWRlbnQyIHNcbiAgYW5kIG51bWJlciAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IG51bWJlciBzXG4gICAgfCBTb21lICcuJyAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlICcuJzsgZGVjaW1hbF9wYXJ0IHNcbiAgICB8IFNvbWUgKCdlJyB8ICdFJykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSAnRSc7IGV4cG9uZW50X3BhcnQgc1xuICAgIHwgXyAtPiBTb21lIChJbnQgKGludF9vZl9zdHJpbmcgKGdldF9zdHJpbmcgKCkpKSlcbiAgYW5kIGRlY2ltYWxfcGFydCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGRlY2ltYWxfcGFydCBzXG4gICAgfCBTb21lICgnZScgfCAnRScpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gc3RvcmUgJ0UnOyBleHBvbmVudF9wYXJ0IHNcbiAgICB8IF8gLT4gU29tZSAoRmxvYXQgKGZsb2F0X29mX3N0cmluZyAoZ2V0X3N0cmluZyAoKSkpKVxuICBhbmQgZXhwb25lbnRfcGFydCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnKycgfCAnLScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSBjOyBlbmRfZXhwb25lbnRfcGFydCBzXG4gICAgfCBfIC0+IGVuZF9leHBvbmVudF9wYXJ0IHN0cm1fX1xuICBhbmQgZW5kX2V4cG9uZW50X3BhcnQgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAoJzAnLi4nOScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSBjOyBlbmRfZXhwb25lbnRfcGFydCBzXG4gICAgfCBfIC0+IFNvbWUgKEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgKGdldF9zdHJpbmcgKCkpKSlcbiAgYW5kIHN0cmluZyAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICdcXFwiJyAtPiBTdHJlYW0uanVuayBzdHJtX187IGdldF9zdHJpbmcgKClcbiAgICB8IFNvbWUgJ1xcXFwnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IGMgPVxuICAgICAgICAgIHRyeSBlc2NhcGUgc3RybV9fIHdpdGhcbiAgICAgICAgICAgIFN0cmVhbS5GYWlsdXJlIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gc3RvcmUgYzsgc3RyaW5nIHNcbiAgICB8IFNvbWUgYyAtPiBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IHN0cmluZyBzXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBjaGFyIChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJ1xcXFwnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgYmVnaW4gdHJ5IGVzY2FwZSBzdHJtX18gd2l0aFxuICAgICAgICAgIFN0cmVhbS5GYWlsdXJlIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBjXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBlc2NhcGUgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAnbicgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFxuJ1xuICAgIHwgU29tZSAncicgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFxyJ1xuICAgIHwgU29tZSAndCcgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFx0J1xuICAgIHwgU29tZSAoJzAnLi4nOScgYXMgYzEpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgYmVnaW4gbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgICAgICBTb21lICgnMCcuLic5JyBhcyBjMikgLT5cbiAgICAgICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICAgICAgICAgIFNvbWUgKCcwJy4uJzknIGFzIGMzKSAtPlxuICAgICAgICAgICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgICAgICAgICBDaGFyLmNoclxuICAgICAgICAgICAgICAgICAgKChDaGFyLmNvZGUgYzEgLSA0OCkgKiAxMDAgKyAoQ2hhci5jb2RlIGMyIC0gNDgpICogMTAgK1xuICAgICAgICAgICAgICAgICAgICAgKENoYXIuY29kZSBjMyAtIDQ4KSlcbiAgICAgICAgICAgIHwgXyAtPiByYWlzZSAoU3RyZWFtLkVycm9yIFwiXCIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgfCBfIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBjXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBtYXliZV9jb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJyonIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gY29tbWVudCBzOyBuZXh0X3Rva2VuIHNcbiAgICB8IF8gLT4gU29tZSAoa2V5d29yZF9vcl9lcnJvciAnKCcpXG4gIGFuZCBjb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJygnIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgbWF5YmVfbmVzdGVkX2NvbW1lbnQgc3RybV9fXG4gICAgfCBTb21lICcqJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2VuZF9jb21tZW50IHN0cm1fX1xuICAgIHwgU29tZSBfIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgY29tbWVudCBzdHJtX19cbiAgICB8IF8gLT4gcmFpc2UgU3RyZWFtLkZhaWx1cmVcbiAgYW5kIG1heWJlX25lc3RlZF9jb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJyonIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gY29tbWVudCBzOyBjb21tZW50IHNcbiAgICB8IFNvbWUgXyAtPiBTdHJlYW0uanVuayBzdHJtX187IGNvbW1lbnQgc3RybV9fXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBtYXliZV9lbmRfY29tbWVudCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICcpJyAtPiBTdHJlYW0uanVuayBzdHJtX187ICgpXG4gICAgfCBTb21lICcqJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2VuZF9jb21tZW50IHN0cm1fX1xuICAgIHwgU29tZSBfIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgY29tbWVudCBzdHJtX19cbiAgICB8IF8gLT4gcmFpc2UgU3RyZWFtLkZhaWx1cmVcbiAgaW5cbiAgZnVuIGlucHV0IC0+IFN0cmVhbS5mcm9tIChmdW4gX2NvdW50IC0+IG5leHRfdG9rZW4gaW5wdXQpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPSBzaWdcbiAgaW5jbHVkZSBIYXNodGJsLlNlZWRlZFNcbiAgdmFsIGNsZWFuOiAnYSB0IC0+IHVuaXRcbiAgdmFsIHN0YXRzX2FsaXZlOiAnYSB0IC0+IEhhc2h0Ymwuc3RhdGlzdGljc1xuICAgICgqKiBzYW1lIGFzIHshc3RhdHN9IGJ1dCBvbmx5IGNvdW50IHRoZSBhbGl2ZSBiaW5kaW5ncyAqKVxuZW5kXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBIYXNodGJsLlNcbiAgdmFsIGNsZWFuOiAnYSB0IC0+IHVuaXRcbiAgdmFsIHN0YXRzX2FsaXZlOiAnYSB0IC0+IEhhc2h0Ymwuc3RhdGlzdGljc1xuICAgICgqKiBzYW1lIGFzIHshc3RhdHN9IGJ1dCBvbmx5IGNvdW50IHRoZSBhbGl2ZSBiaW5kaW5ncyAqKVxuZW5kXG5cbm1vZHVsZSBHZW5IYXNoVGFibGUgPSBzdHJ1Y3RcblxuICB0eXBlIGVxdWFsID1cbiAgfCBFVHJ1ZSB8IEVGYWxzZVxuICB8IEVEZWFkICgqKiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgcmVjbGFpbWVkIHRoZSBkYXRhICopXG5cbiAgbW9kdWxlIE1ha2VTZWVkZWQoSDogc2lnXG4gICAgdHlwZSB0XG4gICAgdHlwZSAnYSBjb250YWluZXJcbiAgICB2YWwgY3JlYXRlOiB0IC0+ICdhIC0+ICdhIGNvbnRhaW5lclxuICAgIHZhbCBoYXNoOiBpbnQgLT4gdCAtPiBpbnRcbiAgICB2YWwgZXF1YWw6ICdhIGNvbnRhaW5lciAtPiB0IC0+IGVxdWFsXG4gICAgdmFsIGdldF9kYXRhOiAnYSBjb250YWluZXIgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGdldF9rZXk6ICdhIGNvbnRhaW5lciAtPiB0IG9wdGlvblxuICAgIHZhbCBzZXRfa2V5X2RhdGE6ICdhIGNvbnRhaW5lciAtPiB0IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgY2hlY2tfa2V5OiAnYSBjb250YWluZXIgLT4gYm9vbFxuICBlbmQpIDogU2VlZGVkUyB3aXRoIHR5cGUga2V5ID0gSC50XG4gID0gc3RydWN0XG5cbiAgICB0eXBlICdhIHQgPVxuICAgICAgeyBtdXRhYmxlIHNpemU6IGludDsgICAgICAgICAgICAgICAgICAoKiBudW1iZXIgb2YgZW50cmllcyAqKVxuICAgICAgICBtdXRhYmxlIGRhdGE6ICdhIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgICAgICBtdXRhYmxlIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgICAgICBpbml0aWFsX3NpemU6IGludDsgICAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgICAgIH1cblxuICAgIGFuZCAnYSBidWNrZXRsaXN0ID1cbiAgICB8IEVtcHR5XG4gICAgfCBDb25zIG9mIGludCAoKiBoYXNoIG9mIHRoZSBrZXkgKikgKiAnYSBILmNvbnRhaW5lciAqICdhIGJ1Y2tldGxpc3RcblxuICAgICgqKiB0aGUgaGFzaCBvZiB0aGUga2V5IGlzIGtlcHQgaW4gb3JkZXIgdG8gdGVzdCB0aGUgZXF1YWxpdHkgb2YgdGhlIGhhc2hcbiAgICAgIGJlZm9yZSB0aGUga2V5LiBTYW1lIHJlYXNvbiBhcyBmb3IgV2Vhay5NYWtlICopXG5cbiAgICB0eXBlIGtleSA9IEgudFxuXG4gICAgbGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gICAgICBpZiB4ID49IG4gdGhlbiB4XG4gICAgICBlbHNlIGlmIHggKiAyID4gU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiB4XG4gICAgICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbiAgICBsZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4gICAgbGV0IGNyZWF0ZSA/KHJhbmRvbSA9IChIYXNodGJsLmlzX3JhbmRvbWl6ZWQgKCkpKSBpbml0aWFsX3NpemUgPVxuICAgICAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IGluaXRpYWxfc2l6ZSBpblxuICAgICAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgICAgIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxuICAgIGxldCBjbGVhciBoID1cbiAgICAgIGguc2l6ZSA8LSAwO1xuICAgICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICAgIGguZGF0YS4oaSkgPC0gRW1wdHlcbiAgICAgIGRvbmVcblxuICAgIGxldCByZXNldCBoID1cbiAgICAgIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gICAgICBpZiBsZW4gPSBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgICAgIGNsZWFyIGhcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIDA7XG4gICAgICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIGguaW5pdGlhbF9zaXplIEVtcHR5XG4gICAgICBlbmRcblxuICAgIGxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkuY29weSBoLmRhdGEgfVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGhrZXkgPVxuICAgICAgaGtleSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBjbGVhbiBoID1cbiAgICAgIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICAgRW1wdHlcbiAgICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIHdoZW4gbm90IChILmNoZWNrX2tleSBjKSAtPlxuICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICBkb19idWNrZXQgcmVzdFxuICAgICAgICB8IENvbnMoaGtleSwgYywgcmVzdCkgLT5cbiAgICAgICAgICAgIENvbnMoaGtleSwgYywgZG9fYnVja2V0IHJlc3QpXG4gICAgICBpblxuICAgICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgICAgZC4oaSkgPC0gZG9fYnVja2V0IGQuKGkpXG4gICAgICBkb25lXG5cbiAgICAoKiogcmVzaXplIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRvIGRvIHRoZSBhY3R1YWwgY2xlYW5pbmcgb2YgZGVhZCBrZXlzXG4gICAgICAgIChyZW1vdmUgZG9lcyBpdCBqdXN0IGJlY2F1c2UgaXQgY291bGQpLlxuXG4gICAgICAgIFRoZSBnb2FsIGlzIHRvOlxuXG4gICAgICAgIC0gbm90IHJlc2l6ZSBpbmZpbml0ZWx5IHdoZW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxpdmUga2V5cyBpc1xuICAgICAgICBib3VuZGVkIGJ1dCBrZXlzIGFyZSBjb250aW51b3VzbHkgYWRkZWQuIFRoYXQgd291bGQgaGFwcGVuIGlmXG4gICAgICAgIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJlc2l6ZS5cbiAgICAgICAgLSBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIGVhY2ggYWRkaXRpb24sIHRoYXQgd291bGQgaGFwcGVuIGlmIHRoaXNcbiAgICAgICAgZnVuY3Rpb24gZG9uJ3QgcmVzaXplIGV2ZW4gd2hlbiBvbmx5IG9uZSBrZXkgaXMgZGVhZC5cblxuICAgICAgICBTbyB0aGUgYWxnb3JpdGhtOlxuICAgICAgICAtIGNsZWFuIHRoZSBrZXlzIGJlZm9yZSByZXNpemluZ1xuICAgICAgICAtIGlmIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGtleXMgaXMgbGVzcyB0aGFuIGhhbGYgdGhlIHNpemUgb2YgdGhlXG4gICAgICAgIGFycmF5LCBkb24ndCByZXNpemUuXG4gICAgICAgIC0gaWYgaXQgaXMgbW9yZSwgcmVzaXplLlxuXG4gICAgICAgIFRoZSBzZWNvbmQgcHJvYmxlbSByZW1haW5zIGlmIHRoZSB0YWJsZSByZWFjaGVzIHshU3lzLm1heF9hcnJheV9sZW5ndGh9LlxuXG4gICAgKilcbiAgICBsZXQgcmVzaXplIGggPVxuICAgICAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gICAgICBsZXQgb3NpemUgPSBBcnJheS5sZW5ndGggb2RhdGEgaW5cbiAgICAgIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICAgICAgY2xlYW4gaDtcbiAgICAgIGlmIG5zaXplIDwgU3lzLm1heF9hcnJheV9sZW5ndGggJiYgaC5zaXplID49IG9zaXplIGxzciAxIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgICAgICBoLmRhdGEgPC0gbmRhdGE7ICAgICAgICgqIHNvIHRoYXQga2V5X2luZGV4IHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICAgICAgbGV0IHJlYyBpbnNlcnRfYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICAgICAgfCBDb25zKGhrZXksIGRhdGEsIHJlc3QpIC0+XG4gICAgICAgICAgICAgIGluc2VydF9idWNrZXQgcmVzdDsgKCogcHJlc2VydmUgb3JpZ2luYWwgb3JkZXIgb2YgZWxlbWVudHMgKilcbiAgICAgICAgICAgICAgbGV0IG5pZHggPSBrZXlfaW5kZXggaCBoa2V5IGluXG4gICAgICAgICAgICAgIG5kYXRhLihuaWR4KSA8LSBDb25zKGhrZXksIGRhdGEsIG5kYXRhLihuaWR4KSkgaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIG9zaXplIC0gMSBkb1xuICAgICAgICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gICAgICAgIGRvbmVcbiAgICAgIGVuZFxuXG4gICAgbGV0IGFkZCBoIGtleSBpbmZvID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGggaGtleSBpblxuICAgICAgbGV0IGNvbnRhaW5lciA9IEguY3JlYXRlIGtleSBpbmZvIGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29ucyhoa2V5LCBjb250YWluZXIsIGguZGF0YS4oaSkpIGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBoXG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgIGxldCByZWMgcmVtb3ZlX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgICAgfCBDb25zKGhrLCBjLCBuZXh0KSB3aGVuIGhrZXkgPSBoayAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggSC5lcXVhbCBjIGtleSB3aXRoXG4gICAgICAgICAgICB8IEVUcnVlIC0+IGguc2l6ZSA8LSBoLnNpemUgLSAxOyBuZXh0XG4gICAgICAgICAgICB8IEVGYWxzZSAtPiBDb25zKGhrLCBjLCByZW1vdmVfYnVja2V0IG5leHQpXG4gICAgICAgICAgICB8IEVEZWFkIC0+XG4gICAgICAgICAgICAgICAgKCogVGhlIGRlYWQga2V5IGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC4gSXQgaXMgYWNjZXB0YWJsZVxuICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBmdW5jdGlvbiBzaW5jZSBpdCBhbHJlYWR5IHJlbW92ZXMgYSBiaW5kaW5nICopXG4gICAgICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgcmVtb3ZlX2J1Y2tldCBuZXh0XG4gICAgICAgICAgICBlbmRcbiAgICAgICAgfCBDb25zKGhrLGMsbmV4dCkgLT4gQ29ucyhoaywgYywgcmVtb3ZlX2J1Y2tldCBuZXh0KSBpblxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBoa2V5IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIHJlbW92ZV9idWNrZXQgaC5kYXRhLihpKVxuXG4gICAgKCoqIHshZmluZH0gZG9uJ3QgcmVtb3ZlIGRlYWQga2V5cyBiZWNhdXNlIGl0IHdvdWxkIGJlIHN1cnByaXNpbmcgZm9yXG4gICAgICAgIHRoZSB1c2VyIHRoYXQgYSByZWFkLW9ubHkgZnVuY3Rpb24gbXV0YXRlcyB0aGUgc3RhdGUgKGVnLiBjb25jdXJyZW50XG4gICAgICAgIGFjY2VzcykuIFNhbWUgZm9yIHshaXRlcn0sIHshZm9sZH0sIHshbWVtfS5cbiAgICAqKVxuICAgIGxldCByZWMgZmluZF9yZWMga2V5IGhrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25zKGhrLCBjLCByZXN0KSB3aGVuIGhrZXkgPSBoayAgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICB8IEVUcnVlIC0+XG4gICAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgKCogVGhpcyBjYXNlIGlzIG5vdCBpbXBvc3NpYmxlIGJlY2F1c2UgdGhlIGdjIGNhbiBydW4gYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgIEguZXF1YWwgYW5kIEguZ2V0X2RhdGEgKilcbiAgICAgICAgICAgICAgICAgIGZpbmRfcmVjIGtleSBoa2V5IHJlc3RcbiAgICAgICAgICAgICAgfCBTb21lIGQgLT4gZFxuICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICB8IEVGYWxzZSAtPiBmaW5kX3JlYyBrZXkgaGtleSByZXN0XG4gICAgICAgICAgfCBFRGVhZCAtPlxuICAgICAgICAgICAgICBmaW5kX3JlYyBrZXkgaGtleSByZXN0XG4gICAgICAgICAgZW5kXG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT5cbiAgICAgICAgICBmaW5kX3JlYyBrZXkgaGtleSByZXN0XG5cbiAgICBsZXQgZmluZCBoIGtleSA9XG4gICAgICBsZXQgaGtleSA9IEguaGFzaCBoLnNlZWQga2V5IGluXG4gICAgICAoKiBUT0RPIGlubGluZSAzIGl0ZXJhdGlvbnMgKilcbiAgICAgIGZpbmRfcmVjIGtleSBoa2V5IChoLmRhdGEuKGtleV9pbmRleCBoIGhrZXkpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5IGhrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29ucyhoaywgYywgcmVzdCkgd2hlbiBoa2V5ID0gaGsgIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggSC5lcXVhbCBjIGtleSB3aXRoXG4gICAgICAgICAgfCBFVHJ1ZSAtPlxuICAgICAgICAgICAgICBiZWdpbiBtYXRjaCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgICgqIFRoaXMgY2FzZSBpcyBub3QgaW1wb3NzaWJsZSBiZWNhdXNlIHRoZSBnYyBjYW4gcnVuIGJldHdlZW5cbiAgICAgICAgICAgICAgICAgICAgICBILmVxdWFsIGFuZCBILmdldF9kYXRhICopXG4gICAgICAgICAgICAgICAgICBmaW5kX3JlY19vcHQga2V5IGhrZXkgcmVzdFxuICAgICAgICAgICAgICB8IFNvbWUgXyBhcyBkIC0+IGRcbiAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfCBFRmFsc2UgLT4gZmluZF9yZWNfb3B0IGtleSBoa2V5IHJlc3RcbiAgICAgICAgICB8IEVEZWFkIC0+XG4gICAgICAgICAgICAgIGZpbmRfcmVjX29wdCBrZXkgaGtleSByZXN0XG4gICAgICAgICAgZW5kXG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT5cbiAgICAgICAgICBmaW5kX3JlY19vcHQga2V5IGhrZXkgcmVzdFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgICgqIFRPRE8gaW5saW5lIDMgaXRlcmF0aW9ucyAqKVxuICAgICAgZmluZF9yZWNfb3B0IGtleSBoa2V5IChoLmRhdGEuKGtleV9pbmRleCBoIGhrZXkpKVxuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBbXVxuICAgICAgfCBDb25zKGhrLCBjLCByZXN0KSB3aGVuIGhrZXkgPSBoayAgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICB8IEVUcnVlIC0+IGJlZ2luIG1hdGNoIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgZmluZF9pbl9idWNrZXQgcmVzdFxuICAgICAgICAgICAgICB8IFNvbWUgZCAtPiBkOjpmaW5kX2luX2J1Y2tldCByZXN0XG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB8IEVGYWxzZSAtPiBmaW5kX2luX2J1Y2tldCByZXN0XG4gICAgICAgICAgfCBFRGVhZCAtPlxuICAgICAgICAgICAgICBmaW5kX2luX2J1Y2tldCByZXN0XG4gICAgICAgICAgZW5kXG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT5cbiAgICAgICAgICBmaW5kX2luX2J1Y2tldCByZXN0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGhrZXkpXG5cblxuICAgIGxldCByZXBsYWNlIGgga2V5IGluZm8gPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIHwgQ29ucyhoaywgYywgbmV4dCkgd2hlbiBoa2V5ID0gaGsgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZXF1YWwgYyBrZXkgd2l0aFxuICAgICAgICAgICAgfCBFVHJ1ZSAtPiBILnNldF9rZXlfZGF0YSBjIGtleSBpbmZvXG4gICAgICAgICAgICB8IEVGYWxzZSB8IEVEZWFkIC0+IHJlcGxhY2VfYnVja2V0IG5leHRcbiAgICAgICAgICAgIGVuZFxuICAgICAgICB8IENvbnMoXyxfLG5leHQpIC0+IHJlcGxhY2VfYnVja2V0IG5leHRcbiAgICAgIGluXG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGhrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgdHJ5XG4gICAgICAgIHJlcGxhY2VfYnVja2V0IGxcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgIGxldCBjb250YWluZXIgPSBILmNyZWF0ZSBrZXkgaW5mbyBpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnMoaGtleSwgY29udGFpbmVyLCBsKTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUgaFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgaGtleSA9IEguaGFzaCBoLnNlZWQga2V5IGluXG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnMoaGssIGMsIHJlc3QpIHdoZW4gaGsgPSBoa2V5IC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggSC5lcXVhbCBjIGtleSB3aXRoXG4gICAgICAgICAgfCBFVHJ1ZSAtPiB0cnVlXG4gICAgICAgICAgfCBFRmFsc2UgfCBFRGVhZCAtPiBtZW1faW5fYnVja2V0IHJlc3RcbiAgICAgICAgICBlbmRcbiAgICAgIHwgQ29ucyhfaGssIF9jLCByZXN0KSAtPiBtZW1faW5fYnVja2V0IHJlc3QgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBoa2V5KVxuXG4gICAgbGV0IGl0ZXIgZiBoID1cbiAgICAgIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICAgKClcbiAgICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBILmdldF9rZXkgYywgSC5nZXRfZGF0YSBjIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gKClcbiAgICAgICAgICAgIHwgU29tZSBrLCBTb21lIGQgLT4gZiBrIGRcbiAgICAgICAgICAgIGVuZDsgZG9fYnVja2V0IHJlc3QgaW5cbiAgICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgICAgZG9uZVxuXG4gICAgbGV0IGZvbGQgZiBoIGluaXQgPVxuICAgICAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICAgICAgbWF0Y2ggYiB3aXRoXG4gICAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAgIGFjY3VcbiAgICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIC0+XG4gICAgICAgICAgICBsZXQgYWNjdSA9IGJlZ2luIG1hdGNoIEguZ2V0X2tleSBjLCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IGFjY3VcbiAgICAgICAgICAgICAgfCBTb21lIGssIFNvbWUgZCAtPiBmIGsgZCBhY2N1XG4gICAgICAgICAgICBlbmQgaW5cbiAgICAgICAgICAgIGRvX2J1Y2tldCByZXN0IGFjY3UgIGluXG4gICAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgICAgZG9uZTtcbiAgICAgICFhY2N1XG5cbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlIGYgaCA9XG4gICAgICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAgIEVtcHR5XG4gICAgICAgIHwgQ29ucyhoaywgYywgcmVzdCkgLT5cbiAgICAgICAgICAgIG1hdGNoIEguZ2V0X2tleSBjLCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgfCBOb25lLCBfIHwgXywgTm9uZSAtPlxuICAgICAgICAgICAgICAgIGRvX2J1Y2tldCByZXN0XG4gICAgICAgICAgICB8IFNvbWUgaywgU29tZSBkIC0+XG4gICAgICAgICAgICAgICAgbWF0Y2ggZiBrIGQgd2l0aFxuICAgICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgICBkb19idWNrZXQgcmVzdFxuICAgICAgICAgICAgICAgIHwgU29tZSBuZXdfZCAtPlxuICAgICAgICAgICAgICAgICAgICBILnNldF9rZXlfZGF0YSBjIGsgbmV3X2Q7XG4gICAgICAgICAgICAgICAgICAgIENvbnMoaGssIGMsIGRvX2J1Y2tldCByZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICAgIGQuKGkpIDwtIGRvX2J1Y2tldCBkLihpKVxuICAgICAgZG9uZVxuXG4gICAgbGV0IGxlbmd0aCBoID0gaC5zaXplXG5cbiAgICBsZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgQ29ucyhfLCBfLCByZXN0KSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgcmVzdFxuXG4gICAgbGV0IHN0YXRzIGggPVxuICAgICAgbGV0IG1ibCA9XG4gICAgICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBtYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICAgICAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICAgICAgQXJyYXkuaXRlclxuICAgICAgICAoZnVuIGIgLT5cbiAgICAgICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICAgICAgaC5kYXRhO1xuICAgICAgeyBIYXNodGJsLm51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICAgICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgICAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICAgICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuICAgIGxldCByZWMgYnVja2V0X2xlbmd0aF9hbGl2ZSBhY2N1ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIHdoZW4gSC5jaGVja19rZXkgYyAtPlxuICAgICAgICAgIGJ1Y2tldF9sZW5ndGhfYWxpdmUgKGFjY3UgKyAxKSByZXN0XG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT4gYnVja2V0X2xlbmd0aF9hbGl2ZSBhY2N1IHJlc3RcblxuICAgIGxldCBzdGF0c19hbGl2ZSBoID1cbiAgICAgIGxldCBzaXplID0gcmVmIDAgaW5cbiAgICAgIGxldCBtYmwgPVxuICAgICAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gbWF4IG0gKGJ1Y2tldF9sZW5ndGhfYWxpdmUgMCBiKSkgMCBoLmRhdGEgaW5cbiAgICAgIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgICAgIEFycmF5Lml0ZXJcbiAgICAgICAgKGZ1biBiIC0+XG4gICAgICAgICAgIGxldCBsID0gYnVja2V0X2xlbmd0aF9hbGl2ZSAwIGIgaW5cbiAgICAgICAgICAgc2l6ZSA6PSAhc2l6ZSArIGw7XG4gICAgICAgICAgIGhpc3RvLihsKSA8LSBoaXN0by4obCkgKyAxKVxuICAgICAgICBoLmRhdGE7XG4gICAgICB7IEhhc2h0YmwubnVtX2JpbmRpbmdzID0gIXNpemU7XG4gICAgICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICAgICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgICAgIGJ1Y2tldF9oaXN0b2dyYW0gPSBoaXN0byB9XG5cbiAgICBsZXQgdG9fc2VxIHRibCA9XG4gICAgICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICAgICAga2VlcCBpdGVyYXRpbmcgb24gdGhlIHNhbWUgYXJyYXkgKilcbiAgICAgIGxldCB0YmxfZGF0YSA9IHRibC5kYXRhIGluXG4gICAgICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICAgICAgbGV0IHJlYyBhdXggaSBidWNrICgpID0gbWF0Y2ggYnVjayB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgICAgIHRoZW4gU2VxLk5pbFxuICAgICAgICAgICAgZWxzZSBhdXgoaSsxKSB0YmxfZGF0YS4oaSkgKClcbiAgICAgICAgfCBDb25zIChfLCBjLCBuZXh0KSAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggSC5nZXRfa2V5IGMsIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gYXV4IGkgbmV4dCAoKVxuICAgICAgICAgICAgICB8IFNvbWUga2V5LCBTb21lIGRhdGEgLT5cbiAgICAgICAgICAgICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIGF1eCAwIEVtcHR5XG5cbiAgICBsZXQgdG9fc2VxX2tleXMgbSA9IFNlcS5tYXAgZnN0ICh0b19zZXEgbSlcblxuICAgIGxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbiAgICBsZXQgYWRkX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbiAgICBsZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBPYmpFcGggPSBPYmouRXBoZW1lcm9uXG5cbmxldCBfb2JqX29wdCA6IE9iai50IG9wdGlvbiAtPiAnYSBvcHRpb24gPSBmdW4geCAtPlxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IHhcbiAgfCBTb21lIHYgLT4gU29tZSAoT2JqLm9iaiB2KVxuXG4oKiogVGhlIHByZXZpb3VzIGZ1bmN0aW9uIGlzIHR5cGVkIHNvIHRoaXMgb25lIGlzIGFsc28gY29ycmVjdCAqKVxubGV0IG9ial9vcHQgOiBPYmoudCBvcHRpb24gLT4gJ2Egb3B0aW9uID0gZnVuIHggLT4gT2JqLm1hZ2ljIHhcblxuXG5tb2R1bGUgSzEgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2ssJ2QpIHQgPSBPYmpFcGgudFxuXG4gIGxldCBjcmVhdGUgKCkgOiAoJ2ssJ2QpIHQgPSBPYmpFcGguY3JlYXRlIDFcblxuICBsZXQgZ2V0X2tleSAodDooJ2ssJ2QpIHQpIDogJ2sgb3B0aW9uID0gb2JqX29wdCAoT2JqRXBoLmdldF9rZXkgdCAwKVxuICBsZXQgZ2V0X2tleV9jb3B5ICh0OignaywnZCkgdCkgOiAnayBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2tleV9jb3B5IHQgMClcbiAgbGV0IHNldF9rZXkgKHQ6KCdrLCdkKSB0KSAoazonaykgOiB1bml0ID0gT2JqRXBoLnNldF9rZXkgdCAwIChPYmoucmVwciBrKVxuICBsZXQgdW5zZXRfa2V5ICh0OignaywnZCkgdCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2tleSB0IDBcbiAgbGV0IGNoZWNrX2tleSAodDooJ2ssJ2QpIHQpIDogYm9vbCA9IE9iakVwaC5jaGVja19rZXkgdCAwXG5cbiAgbGV0IGJsaXRfa2V5ICh0MTooJ2ssJ2QpIHQpICh0MjooJ2ssJ2QpIHQpOiB1bml0ID1cbiAgICBPYmpFcGguYmxpdF9rZXkgdDEgMCB0MiAwIDFcblxuICBsZXQgZ2V0X2RhdGEgKHQ6KCdrLCdkKSB0KSA6ICdkIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YSB0KVxuICBsZXQgZ2V0X2RhdGFfY29weSAodDooJ2ssJ2QpIHQpIDogJ2Qgb3B0aW9uID0gb2JqX29wdCAoT2JqRXBoLmdldF9kYXRhX2NvcHkgdClcbiAgbGV0IHNldF9kYXRhICh0OignaywnZCkgdCkgKGQ6J2QpIDogdW5pdCA9IE9iakVwaC5zZXRfZGF0YSB0IChPYmoucmVwciBkKVxuICBsZXQgdW5zZXRfZGF0YSAodDooJ2ssJ2QpIHQpIDogdW5pdCA9IE9iakVwaC51bnNldF9kYXRhIHRcbiAgbGV0IGNoZWNrX2RhdGEgKHQ6KCdrLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfZGF0YSB0XG4gIGxldCBibGl0X2RhdGEgKHQxOihfLCdkKSB0KSAodDI6KF8sJ2QpIHQpIDogdW5pdCA9IE9iakVwaC5ibGl0X2RhdGEgdDEgdDJcblxuICBtb2R1bGUgTWFrZVNlZWRlZCAoSDpIYXNodGJsLlNlZWRlZEhhc2hlZFR5cGUpID1cbiAgICBHZW5IYXNoVGFibGUuTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgIHR5cGUgJ2EgY29udGFpbmVyID0gKEgudCwnYSkgdFxuICAgICAgdHlwZSB0ID0gSC50XG4gICAgICBsZXQgY3JlYXRlIGsgZCA9XG4gICAgICAgIGxldCBjID0gY3JlYXRlICgpIGluXG4gICAgICAgIHNldF9kYXRhIGMgZDtcbiAgICAgICAgc2V0X2tleSBjIGs7XG4gICAgICAgIGNcbiAgICAgIGxldCBoYXNoID0gSC5oYXNoXG4gICAgICBsZXQgZXF1YWwgYyBrID1cbiAgICAgICAgKCogeyFnZXRfa2V5X2NvcHl9IGlzIG5vdCB1c2VkIGJlY2F1c2UgdGhlIGVxdWFsaXR5IG9mIHRoZSB1c2VyIGNhbiBiZVxuICAgICAgICAgICAgdGhlIHBoeXNpY2FsIGVxdWFsaXR5ICopXG4gICAgICAgIG1hdGNoIGdldF9rZXkgYyB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBHZW5IYXNoVGFibGUuRURlYWRcbiAgICAgICAgfCBTb21lIGsnIC0+XG4gICAgICAgICAgICBpZiBILmVxdWFsIGsgaycgdGhlbiBHZW5IYXNoVGFibGUuRVRydWUgZWxzZSBHZW5IYXNoVGFibGUuRUZhbHNlXG4gICAgICBsZXQgZ2V0X2RhdGEgPSBnZXRfZGF0YVxuICAgICAgbGV0IGdldF9rZXkgPSBnZXRfa2V5XG4gICAgICBsZXQgc2V0X2tleV9kYXRhIGMgayBkID1cbiAgICAgICAgdW5zZXRfZGF0YSBjO1xuICAgICAgICBzZXRfa2V5IGMgaztcbiAgICAgICAgc2V0X2RhdGEgYyBkXG4gICAgICBsZXQgY2hlY2tfa2V5ID0gY2hlY2tfa2V5XG4gICAgZW5kKVxuXG4gIG1vZHVsZSBNYWtlKEg6IEhhc2h0YmwuSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIEsyID0gc3RydWN0XG4gIHR5cGUgKCdrMSwgJ2syLCAnZCkgdCA9IE9iakVwaC50XG5cbiAgbGV0IGNyZWF0ZSAoKSA6ICgnazEsJ2syLCdkKSB0ID0gT2JqRXBoLmNyZWF0ZSAyXG5cbiAgbGV0IGdldF9rZXkxICh0OignazEsJ2syLCdkKSB0KSA6ICdrMSBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2tleSB0IDApXG4gIGxldCBnZXRfa2V5MV9jb3B5ICh0OignazEsJ2syLCdkKSB0KSA6ICdrMSBvcHRpb24gPVxuICAgIG9ial9vcHQgKE9iakVwaC5nZXRfa2V5X2NvcHkgdCAwKVxuICBsZXQgc2V0X2tleTEgKHQ6KCdrMSwnazIsJ2QpIHQpIChrOidrMSkgOiB1bml0ID1cbiAgICBPYmpFcGguc2V0X2tleSB0IDAgKE9iai5yZXByIGspXG4gIGxldCB1bnNldF9rZXkxICh0OignazEsJ2syLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfa2V5IHQgMFxuICBsZXQgY2hlY2tfa2V5MSAodDooJ2sxLCdrMiwnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2tleSB0IDBcblxuICBsZXQgZ2V0X2tleTIgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2syIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfa2V5IHQgMSlcbiAgbGV0IGdldF9rZXkyX2NvcHkgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2syIG9wdGlvbiA9XG4gICAgb2JqX29wdCAoT2JqRXBoLmdldF9rZXlfY29weSB0IDEpXG4gIGxldCBzZXRfa2V5MiAodDooJ2sxLCdrMiwnZCkgdCkgKGs6J2syKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfa2V5IHQgMSAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleTIgKHQ6KCdrMSwnazIsJ2QpIHQpIDogdW5pdCA9IE9iakVwaC51bnNldF9rZXkgdCAxXG4gIGxldCBjaGVja19rZXkyICh0OignazEsJ2syLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfa2V5IHQgMVxuXG5cbiAgbGV0IGJsaXRfa2V5MSAodDE6KCdrMSxfLF8pIHQpICh0MjooJ2sxLF8sXykgdCkgOiB1bml0ID1cbiAgICBPYmpFcGguYmxpdF9rZXkgdDEgMCB0MiAwIDFcbiAgbGV0IGJsaXRfa2V5MiAodDE6KF8sJ2syLF8pIHQpICh0MjooXywnazIsXykgdCkgOiB1bml0ID1cbiAgICBPYmpFcGguYmxpdF9rZXkgdDEgMSB0MiAxIDFcbiAgbGV0IGJsaXRfa2V5MTIgKHQxOignazEsJ2syLF8pIHQpICh0MjooJ2sxLCdrMixfKSB0KSA6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSAwIHQyIDAgMlxuXG4gIGxldCBnZXRfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGEgdClcbiAgbGV0IGdldF9kYXRhX2NvcHkgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2Qgb3B0aW9uID1cbiAgICBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGFfY29weSB0KVxuICBsZXQgc2V0X2RhdGEgKHQ6KCdrMSwnazIsJ2QpIHQpIChkOidkKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfZGF0YSB0IChPYmoucmVwciBkKVxuICBsZXQgdW5zZXRfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2RhdGEgdFxuICBsZXQgY2hlY2tfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2RhdGEgdFxuICBsZXQgYmxpdF9kYXRhICh0MTooXyxfLCdkKSB0KSAodDI6KF8sXywnZCkgdCkgOiB1bml0ID0gT2JqRXBoLmJsaXRfZGF0YSB0MSB0MlxuXG4gIG1vZHVsZSBNYWtlU2VlZGVkXG4gICAgICAoSDE6SGFzaHRibC5TZWVkZWRIYXNoZWRUeXBlKVxuICAgICAgKEgyOkhhc2h0YmwuU2VlZGVkSGFzaGVkVHlwZSkgPVxuICAgIEdlbkhhc2hUYWJsZS5NYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgdHlwZSAnYSBjb250YWluZXIgPSAoSDEudCxIMi50LCdhKSB0XG4gICAgICB0eXBlIHQgPSBIMS50ICogSDIudFxuICAgICAgbGV0IGNyZWF0ZSAoazEsazIpIGQgPVxuICAgICAgICBsZXQgYyA9IGNyZWF0ZSAoKSBpblxuICAgICAgICBzZXRfZGF0YSBjIGQ7XG4gICAgICAgIHNldF9rZXkxIGMgazE7IHNldF9rZXkyIGMgazI7XG4gICAgICAgIGNcbiAgICAgIGxldCBoYXNoIHNlZWQgKGsxLGsyKSA9XG4gICAgICAgIEgxLmhhc2ggc2VlZCBrMSArIEgyLmhhc2ggc2VlZCBrMiAqIDY1NTk5XG4gICAgICBsZXQgZXF1YWwgYyAoazEsazIpID1cbiAgICAgICAgbWF0Y2ggZ2V0X2tleTEgYywgZ2V0X2tleTIgYyB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyB8IF8gLCBOb25lIC0+IEdlbkhhc2hUYWJsZS5FRGVhZFxuICAgICAgICB8IFNvbWUgazEnLCBTb21lIGsyJyAtPlxuICAgICAgICAgICAgaWYgSDEuZXF1YWwgazEgazEnICYmIEgyLmVxdWFsIGsyIGsyJ1xuICAgICAgICAgICAgdGhlbiBHZW5IYXNoVGFibGUuRVRydWUgZWxzZSBHZW5IYXNoVGFibGUuRUZhbHNlXG4gICAgICBsZXQgZ2V0X2RhdGEgPSBnZXRfZGF0YVxuICAgICAgbGV0IGdldF9rZXkgYyA9XG4gICAgICAgIG1hdGNoIGdldF9rZXkxIGMsIGdldF9rZXkyIGMgd2l0aFxuICAgICAgICB8IE5vbmUsIF8gfCBfICwgTm9uZSAtPiBOb25lXG4gICAgICAgIHwgU29tZSBrMScsIFNvbWUgazInIC0+IFNvbWUgKGsxJywgazInKVxuICAgICAgbGV0IHNldF9rZXlfZGF0YSBjIChrMSxrMikgZCA9XG4gICAgICAgIHVuc2V0X2RhdGEgYztcbiAgICAgICAgc2V0X2tleTEgYyBrMTsgc2V0X2tleTIgYyBrMjtcbiAgICAgICAgc2V0X2RhdGEgYyBkXG4gICAgICBsZXQgY2hlY2tfa2V5IGMgPSBjaGVja19rZXkxIGMgJiYgY2hlY2tfa2V5MiBjXG4gICAgZW5kKVxuXG4gIG1vZHVsZSBNYWtlKEgxOiBIYXNodGJsLkhhc2hlZFR5cGUpKEgyOiBIYXNodGJsLkhhc2hlZFR5cGUpOlxuICAgIChTIHdpdGggdHlwZSBrZXkgPSBIMS50ICogSDIudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWRcbiAgICAgICAgKHN0cnVjdFxuICAgICAgICAgIHR5cGUgdCA9IEgxLnRcbiAgICAgICAgICBsZXQgZXF1YWwgPSBIMS5lcXVhbFxuICAgICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSDEuaGFzaCB4XG4gICAgICAgIGVuZClcbiAgICAgICAgKHN0cnVjdFxuICAgICAgICAgIHR5cGUgdCA9IEgyLnRcbiAgICAgICAgICBsZXQgZXF1YWwgPSBIMi5lcXVhbFxuICAgICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSDIuaGFzaCB4XG4gICAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbmVuZFxuXG5tb2R1bGUgS24gPSBzdHJ1Y3RcbiAgdHlwZSAoJ2ssJ2QpIHQgPSBPYmpFcGgudFxuXG4gIGxldCBjcmVhdGUgbiA6ICgnaywnZCkgdCA9IE9iakVwaC5jcmVhdGUgblxuICBsZXQgbGVuZ3RoIChrOignaywnZCkgdCkgOiBpbnQgPSBPYmpFcGgubGVuZ3RoIGtcblxuICBsZXQgZ2V0X2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiAnayBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2tleSB0IG4pXG4gIGxldCBnZXRfa2V5X2NvcHkgKHQ6KCdrLCdkKSB0KSAobjppbnQpIDogJ2sgb3B0aW9uID1cbiAgICBvYmpfb3B0IChPYmpFcGguZ2V0X2tleV9jb3B5IHQgbilcbiAgbGV0IHNldF9rZXkgKHQ6KCdrLCdkKSB0KSAobjppbnQpIChrOidrKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfa2V5IHQgbiAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2tleSB0IG5cbiAgbGV0IGNoZWNrX2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2tleSB0IG5cblxuICBsZXQgYmxpdF9rZXkgKHQxOignaywnZCkgdCkgKG8xOmludCkgKHQyOignaywnZCkgdCkgKG8yOmludCkgKGw6aW50KSA6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSBvMSB0MiBvMiBsXG5cbiAgbGV0IGdldF9kYXRhICh0OignaywnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGEgdClcbiAgbGV0IGdldF9kYXRhX2NvcHkgKHQ6KCdrLCdkKSB0KSA6ICdkIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YV9jb3B5IHQpXG4gIGxldCBzZXRfZGF0YSAodDooJ2ssJ2QpIHQpIChkOidkKSA6IHVuaXQgPSBPYmpFcGguc2V0X2RhdGEgdCAoT2JqLnJlcHIgZClcbiAgbGV0IHVuc2V0X2RhdGEgKHQ6KCdrLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfZGF0YSB0XG4gIGxldCBjaGVja19kYXRhICh0OignaywnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2RhdGEgdFxuICBsZXQgYmxpdF9kYXRhICh0MTooXywnZCkgdCkgKHQyOihfLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGguYmxpdF9kYXRhIHQxIHQyXG5cbiAgbW9kdWxlIE1ha2VTZWVkZWQgKEg6SGFzaHRibC5TZWVkZWRIYXNoZWRUeXBlKSA9XG4gICAgR2VuSGFzaFRhYmxlLk1ha2VTZWVkZWQoc3RydWN0XG4gICAgICB0eXBlICdhIGNvbnRhaW5lciA9IChILnQsJ2EpIHRcbiAgICAgIHR5cGUgdCA9IEgudCBhcnJheVxuICAgICAgbGV0IGNyZWF0ZSBrIGQgPVxuICAgICAgICBsZXQgYyA9IGNyZWF0ZSAoQXJyYXkubGVuZ3RoIGspIGluXG4gICAgICAgIHNldF9kYXRhIGMgZDtcbiAgICAgICAgZm9yIGk9MCB0byBBcnJheS5sZW5ndGggayAtMSBkb1xuICAgICAgICAgIHNldF9rZXkgYyBpIGsuKGkpO1xuICAgICAgICBkb25lO1xuICAgICAgICBjXG4gICAgICBsZXQgaGFzaCBzZWVkIGsgPVxuICAgICAgICBsZXQgaCA9IHJlZiAwIGluXG4gICAgICAgIGZvciBpPTAgdG8gQXJyYXkubGVuZ3RoIGsgLTEgZG9cbiAgICAgICAgICBoIDo9IEguaGFzaCBzZWVkIGsuKGkpICogNjU1OTkgKyAhaDtcbiAgICAgICAgZG9uZTtcbiAgICAgICAgIWhcbiAgICAgIGxldCBlcXVhbCBjIGsgPVxuICAgICAgICBsZXQgbGVuICA9IEFycmF5Lmxlbmd0aCBrIGluXG4gICAgICAgIGxldCBsZW4nID0gbGVuZ3RoIGMgaW5cbiAgICAgICAgaWYgbGVuICE9IGxlbicgdGhlbiBHZW5IYXNoVGFibGUuRUZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBsZXQgcmVjIGVxdWFsX2FycmF5IGsgYyBpID1cbiAgICAgICAgICAgIGlmIGkgPCAwIHRoZW4gR2VuSGFzaFRhYmxlLkVUcnVlXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIGdldF9rZXkgYyBpIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IEdlbkhhc2hUYWJsZS5FRGVhZFxuICAgICAgICAgICAgICB8IFNvbWUga2kgLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwgay4oaSkga2lcbiAgICAgICAgICAgICAgICAgIHRoZW4gZXF1YWxfYXJyYXkgayBjIChpLTEpXG4gICAgICAgICAgICAgICAgICBlbHNlIEdlbkhhc2hUYWJsZS5FRmFsc2VcbiAgICAgICAgICBpblxuICAgICAgICAgIGVxdWFsX2FycmF5IGsgYyAobGVuLTEpXG4gICAgICBsZXQgZ2V0X2RhdGEgPSBnZXRfZGF0YVxuICAgICAgbGV0IGdldF9rZXkgYyA9XG4gICAgICAgIGxldCBsZW4gPSBsZW5ndGggYyBpblxuICAgICAgICBpZiBsZW4gPSAwIHRoZW4gU29tZSBbfHxdXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBtYXRjaCBnZXRfa2V5IGMgMCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgICAgICB8IFNvbWUgazAgLT5cbiAgICAgICAgICAgICAgbGV0IHJlYyBmaWxsIGEgaSA9XG4gICAgICAgICAgICAgICAgaWYgaSA8IDEgdGhlbiBTb21lIGFcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBtYXRjaCBnZXRfa2V5IGMgaSB3aXRoXG4gICAgICAgICAgICAgICAgICB8IE5vbmUgLT4gTm9uZVxuICAgICAgICAgICAgICAgICAgfCBTb21lIGtpIC0+XG4gICAgICAgICAgICAgICAgICAgICAgYS4oaSkgPC0ga2k7XG4gICAgICAgICAgICAgICAgICAgICAgZmlsbCBhIChpLTEpXG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIGxldCBhID0gQXJyYXkubWFrZSBsZW4gazAgaW5cbiAgICAgICAgICAgICAgZmlsbCBhIChsZW4tMSlcbiAgICAgIGxldCBzZXRfa2V5X2RhdGEgYyBrIGQgPVxuICAgICAgICB1bnNldF9kYXRhIGM7XG4gICAgICAgIGZvciBpPTAgdG8gQXJyYXkubGVuZ3RoIGsgLTEgZG9cbiAgICAgICAgICBzZXRfa2V5IGMgaSBrLihpKTtcbiAgICAgICAgZG9uZTtcbiAgICAgICAgc2V0X2RhdGEgYyBkXG4gICAgICBsZXQgY2hlY2tfa2V5IGMgPVxuICAgICAgICBsZXQgcmVjIGNoZWNrIGMgaSA9XG4gICAgICAgICAgaSA8IDAgfHwgKGNoZWNrX2tleSBjIGkgJiYgY2hlY2sgYyAoaS0xKSkgaW5cbiAgICAgICAgY2hlY2sgYyAobGVuZ3RoIGMgLSAxKVxuICAgIGVuZClcblxuICBtb2R1bGUgTWFrZShIOiBIYXNodGJsLkhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50IGFycmF5KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IGhhc2ggKF9zZWVkOiBpbnQpIHggPSBILmhhc2ggeFxuICAgICAgZW5kKVxuICAgIGxldCBjcmVhdGUgc3ogPSBjcmVhdGUgfnJhbmRvbTpmYWxzZSBzelxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuICBlbmRcbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIE1hcmsgU2hpbndlbGwgYW5kIExlbyBXaGl0ZSwgSmFuZSBTdHJlZXQgRXVyb3BlICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNS0tMjAxNiBKYW5lIFN0cmVldCBHcm91cCBMTEMgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBzcGFjZXRpbWVfZW5hYmxlZCA6IHVuaXQgLT4gYm9vbFxuICA9IFwiY2FtbF9zcGFjZXRpbWVfZW5hYmxlZFwiIFtAQG5vYWxsb2NdXG5cbmxldCBlbmFibGVkID0gc3BhY2V0aW1lX2VuYWJsZWQgKClcblxubGV0IGlmX3NwYWNldGltZV9lbmFibGVkIGYgPVxuICBpZiBlbmFibGVkIHRoZW4gZiAoKSBlbHNlICgpXG5cbm1vZHVsZSBTZXJpZXMgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0ge1xuICAgIGNoYW5uZWwgOiBvdXRfY2hhbm5lbDtcbiAgICBtdXRhYmxlIGNsb3NlZCA6IGJvb2w7XG4gIH1cblxuICBleHRlcm5hbCB3cml0ZV9tYWdpY19udW1iZXIgOiBvdXRfY2hhbm5lbCAtPiB1bml0XG4gICAgPSBcImNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlXCJcbiAgICAgIFwiY2FtbF9zcGFjZXRpbWVfd3JpdGVfbWFnaWNfbnVtYmVyXCJcblxuICBleHRlcm5hbCByZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUgOiBvdXRfY2hhbm5lbCAtPiB1bml0XG4gICAgPSBcImNhbWxfcmVnaXN0ZXJfY2hhbm5lbF9mb3Jfc3BhY2V0aW1lXCJcblxuICBsZXQgY3JlYXRlIH5wYXRoID1cbiAgICBpZiBzcGFjZXRpbWVfZW5hYmxlZCAoKSB0aGVuIGJlZ2luXG4gICAgICBsZXQgY2hhbm5lbCA9IG9wZW5fb3V0IHBhdGggaW5cbiAgICAgIHJlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSBjaGFubmVsO1xuICAgICAgbGV0IHQgPVxuICAgICAgICB7IGNoYW5uZWwgPSBjaGFubmVsO1xuICAgICAgICAgIGNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICBpblxuICAgICAgd3JpdGVfbWFnaWNfbnVtYmVyIHQuY2hhbm5lbDtcbiAgICAgIHRcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgeyBjaGFubmVsID0gc3Rkb3V0OyAgKCogYXJiaXRyYXJ5IHZhbHVlICopXG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICB9XG4gICAgZW5kXG5cbiAgZXh0ZXJuYWwgc2F2ZV9ldmVudCA6ID90aW1lOmZsb2F0IC0+IG91dF9jaGFubmVsIC0+IGV2ZW50X25hbWU6c3RyaW5nIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcIlxuICAgICAgXCJjYW1sX3NwYWNldGltZV9zYXZlX2V2ZW50XCJcblxuICBsZXQgc2F2ZV9ldmVudCA/dGltZSB0IH5ldmVudF9uYW1lID1cbiAgICBpZl9zcGFjZXRpbWVfZW5hYmxlZCAoZnVuICgpIC0+XG4gICAgICBzYXZlX2V2ZW50ID90aW1lIHQuY2hhbm5lbCB+ZXZlbnRfbmFtZSlcblxuICBleHRlcm5hbCBzYXZlX3RyaWUgOiA/dGltZTpmbG9hdCAtPiBvdXRfY2hhbm5lbCAtPiB1bml0XG4gICAgPSBcImNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlXCJcbiAgICAgIFwiY2FtbF9zcGFjZXRpbWVfc2F2ZV90cmllXCJcblxuICBsZXQgc2F2ZV9hbmRfY2xvc2UgP3RpbWUgdCA9XG4gICAgaWZfc3BhY2V0aW1lX2VuYWJsZWQgKGZ1biAoKSAtPlxuICAgICAgaWYgdC5jbG9zZWQgdGhlbiBmYWlsd2l0aCBcIlNlcmllcyBpcyBjbG9zZWRcIjtcbiAgICAgIHNhdmVfdHJpZSA/dGltZSB0LmNoYW5uZWw7XG4gICAgICBjbG9zZV9vdXQgdC5jaGFubmVsO1xuICAgICAgdC5jbG9zZWQgPC0gdHJ1ZSlcbmVuZFxuXG5tb2R1bGUgU25hcHNob3QgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgdGFrZSA6ID90aW1lOmZsb2F0IC0+IG91dF9jaGFubmVsIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcIlxuICAgICAgXCJjYW1sX3NwYWNldGltZV90YWtlX3NuYXBzaG90XCJcblxuICBsZXQgdGFrZSA/dGltZSB7IFNlcmllcy5jbG9zZWQ7IGNoYW5uZWwgfSA9XG4gICAgaWZfc3BhY2V0aW1lX2VuYWJsZWQgKGZ1biAoKSAtPlxuICAgICAgaWYgY2xvc2VkIHRoZW4gZmFpbHdpdGggXCJTZXJpZXMgaXMgY2xvc2VkXCI7XG4gICAgICBHYy5taW5vciAoKTtcbiAgICAgIHRha2UgP3RpbWUgY2hhbm5lbClcbmVuZFxuXG5leHRlcm5hbCBzYXZlX2V2ZW50X2Zvcl9hdXRvbWF0aWNfc25hcHNob3RzIDogZXZlbnRfbmFtZTpzdHJpbmcgLT4gdW5pdFxuICA9IFwiY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcIlxuICAgIFwiY2FtbF9zcGFjZXRpbWVfc2F2ZV9ldmVudF9mb3JfYXV0b21hdGljX3NuYXBzaG90c1wiXG5cbmxldCBzYXZlX2V2ZW50X2Zvcl9hdXRvbWF0aWNfc25hcHNob3RzIH5ldmVudF9uYW1lID1cbiAgaWZfc3BhY2V0aW1lX2VuYWJsZWQgKGZ1biAoKSAtPlxuICAgIHNhdmVfZXZlbnRfZm9yX2F1dG9tYXRpY19zbmFwc2hvdHMgfmV2ZW50X25hbWUpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgTWFudWVsIFNlcnJhbm8gZXQgWGF2aWVyIExlcm95LCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbQmlnYXJyYXldOiBsYXJnZSwgbXVsdGktZGltZW5zaW9uYWwsIG51bWVyaWNhbCBhcnJheXMgKilcblxuKCogVGhlc2UgdHlwZXMgaW4gbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgdGFibGVzIGluXG4gICAuLi90eXBpbmcvdHlwZW9wdC5tbCAqKVxuXG50eXBlIGZsb2F0MzJfZWx0ID0gRmxvYXQzMl9lbHRcbnR5cGUgZmxvYXQ2NF9lbHQgPSBGbG9hdDY0X2VsdFxudHlwZSBpbnQ4X3NpZ25lZF9lbHQgPSBJbnQ4X3NpZ25lZF9lbHRcbnR5cGUgaW50OF91bnNpZ25lZF9lbHQgPSBJbnQ4X3Vuc2lnbmVkX2VsdFxudHlwZSBpbnQxNl9zaWduZWRfZWx0ID0gSW50MTZfc2lnbmVkX2VsdFxudHlwZSBpbnQxNl91bnNpZ25lZF9lbHQgPSBJbnQxNl91bnNpZ25lZF9lbHRcbnR5cGUgaW50MzJfZWx0ID0gSW50MzJfZWx0XG50eXBlIGludDY0X2VsdCA9IEludDY0X2VsdFxudHlwZSBpbnRfZWx0ID0gSW50X2VsdFxudHlwZSBuYXRpdmVpbnRfZWx0ID0gTmF0aXZlaW50X2VsdFxudHlwZSBjb21wbGV4MzJfZWx0ID0gQ29tcGxleDMyX2VsdFxudHlwZSBjb21wbGV4NjRfZWx0ID0gQ29tcGxleDY0X2VsdFxuXG50eXBlICgnYSwgJ2IpIGtpbmQgPVxuICAgIEZsb2F0MzIgOiAoZmxvYXQsIGZsb2F0MzJfZWx0KSBraW5kXG4gIHwgRmxvYXQ2NCA6IChmbG9hdCwgZmxvYXQ2NF9lbHQpIGtpbmRcbiAgfCBJbnQ4X3NpZ25lZCA6IChpbnQsIGludDhfc2lnbmVkX2VsdCkga2luZFxuICB8IEludDhfdW5zaWduZWQgOiAoaW50LCBpbnQ4X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEludDE2X3NpZ25lZCA6IChpbnQsIGludDE2X3NpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQxNl91bnNpZ25lZCA6IChpbnQsIGludDE2X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEludDMyIDogKGludDMyLCBpbnQzMl9lbHQpIGtpbmRcbiAgfCBJbnQ2NCA6IChpbnQ2NCwgaW50NjRfZWx0KSBraW5kXG4gIHwgSW50IDogKGludCwgaW50X2VsdCkga2luZFxuICB8IE5hdGl2ZWludCA6IChuYXRpdmVpbnQsIG5hdGl2ZWludF9lbHQpIGtpbmRcbiAgfCBDb21wbGV4MzIgOiAoQ29tcGxleC50LCBjb21wbGV4MzJfZWx0KSBraW5kXG4gIHwgQ29tcGxleDY0IDogKENvbXBsZXgudCwgY29tcGxleDY0X2VsdCkga2luZFxuICB8IENoYXIgOiAoY2hhciwgaW50OF91bnNpZ25lZF9lbHQpIGtpbmRcblxudHlwZSBjX2xheW91dCA9IENfbGF5b3V0X3R5cFxudHlwZSBmb3J0cmFuX2xheW91dCA9IEZvcnRyYW5fbGF5b3V0X3R5cCAoKiopXG5cbnR5cGUgJ2EgbGF5b3V0ID1cbiAgICBDX2xheW91dDogY19sYXlvdXQgbGF5b3V0XG4gIHwgRm9ydHJhbl9sYXlvdXQ6IGZvcnRyYW5fbGF5b3V0IGxheW91dFxuXG4oKiBLZWVwIHRob3NlIGNvbnN0YW50cyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfa2luZCBlbnVtZXJhdGlvblxuICAgaW4gYmlnYXJyYXkuaCAqKVxuXG5sZXQgZmxvYXQzMiA9IEZsb2F0MzJcbmxldCBmbG9hdDY0ID0gRmxvYXQ2NFxubGV0IGludDhfc2lnbmVkID0gSW50OF9zaWduZWRcbmxldCBpbnQ4X3Vuc2lnbmVkID0gSW50OF91bnNpZ25lZFxubGV0IGludDE2X3NpZ25lZCA9IEludDE2X3NpZ25lZFxubGV0IGludDE2X3Vuc2lnbmVkID0gSW50MTZfdW5zaWduZWRcbmxldCBpbnQzMiA9IEludDMyXG5sZXQgaW50NjQgPSBJbnQ2NFxubGV0IGludCA9IEludFxubGV0IG5hdGl2ZWludCA9IE5hdGl2ZWludFxubGV0IGNvbXBsZXgzMiA9IENvbXBsZXgzMlxubGV0IGNvbXBsZXg2NCA9IENvbXBsZXg2NFxubGV0IGNoYXIgPSBDaGFyXG5cbmxldCBraW5kX3NpemVfaW5fYnl0ZXMgOiB0eXBlIGEgYi4gKGEsIGIpIGtpbmQgLT4gaW50ID0gZnVuY3Rpb25cbiAgfCBGbG9hdDMyIC0+IDRcbiAgfCBGbG9hdDY0IC0+IDhcbiAgfCBJbnQ4X3NpZ25lZCAtPiAxXG4gIHwgSW50OF91bnNpZ25lZCAtPiAxXG4gIHwgSW50MTZfc2lnbmVkIC0+IDJcbiAgfCBJbnQxNl91bnNpZ25lZCAtPiAyXG4gIHwgSW50MzIgLT4gNFxuICB8IEludDY0IC0+IDhcbiAgfCBJbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBOYXRpdmVpbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBDb21wbGV4MzIgLT4gOFxuICB8IENvbXBsZXg2NCAtPiAxNlxuICB8IENoYXIgLT4gMVxuXG4oKiBLZWVwIHRob3NlIGNvbnN0YW50cyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfbGF5b3V0IGVudW1lcmF0aW9uXG4gICBpbiBiaWdhcnJheS5oICopXG5cbmxldCBjX2xheW91dCA9IENfbGF5b3V0XG5sZXQgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dFxuXG5tb2R1bGUgR2VuYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiLCAnYykgdFxuICBleHRlcm5hbCBjcmVhdGU6ICgnYSwgJ2IpIGtpbmQgLT4gJ2MgbGF5b3V0IC0+IGludCBhcnJheSAtPiAoJ2EsICdiLCAnYykgdFxuICAgICA9IFwiY2FtbF9iYV9jcmVhdGVcIlxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYVxuICAgICA9IFwiY2FtbF9iYV9nZXRfZ2VuZXJpY1wiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IGFycmF5IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcImNhbWxfYmFfc2V0X2dlbmVyaWNcIlxuICBleHRlcm5hbCBudW1fZGltczogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCJjYW1sX2JhX251bV9kaW1zXCJcbiAgZXh0ZXJuYWwgbnRoX2RpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCA9IFwiY2FtbF9iYV9kaW1cIlxuICBsZXQgZGltcyBhID1cbiAgICBsZXQgbiA9IG51bV9kaW1zIGEgaW5cbiAgICBsZXQgZCA9IEFycmF5Lm1ha2UgbiAwIGluXG4gICAgZm9yIGkgPSAwIHRvIG4tMSBkbyBkLihpKSA8LSBudGhfZGltIGEgaSBkb25lO1xuICAgIGRcblxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKEFycmF5LmZvbGRfbGVmdCAoICogKSAxIChkaW1zIGFycikpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHNsaWNlX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCBhcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zbGljZVwiXG4gIGV4dGVybmFsIHNsaWNlX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgYXJyYXkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc2xpY2VcIlxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuZW5kXG5cbm1vZHVsZSBBcnJheTAgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiLCAnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfHxdXG4gIGxldCBnZXQgYXJyID0gR2VuYXJyYXkuZ2V0IGFyciBbfHxdXG4gIGxldCBzZXQgYXJyID0gR2VuYXJyYXkuc2V0IGFyciBbfHxdXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID0ga2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycilcblxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuXG4gIGxldCBvZl92YWx1ZSBraW5kIGxheW91dCB2ID1cbiAgICBsZXQgYSA9IGNyZWF0ZSBraW5kIGxheW91dCBpblxuICAgIHNldCBhIHY7XG4gICAgYVxuZW5kXG5cbm1vZHVsZSBBcnJheTEgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiLCAnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW18XVxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfcmVmXzFcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlY2FtbF9iYV9zZXRfMVwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfdW5zYWZlX3JlZl8xXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9zZXRfMVwiXG4gIGV4dGVybmFsIGRpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKGRpbSBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsICdjKSB0ID0gXCJjYW1sX2JhX3N1YlwiXG4gIGxldCBzbGljZSAodHlwZSB0KSAoYSA6IChfLCBfLCB0KSBHZW5hcnJheS50KSBuID1cbiAgICBtYXRjaCBsYXlvdXQgYSB3aXRoXG4gICAgfCBDX2xheW91dCAtPiAoR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdIDogKF8sIF8sIHQpIEdlbmFycmF5LnQpXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiAoR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XTogKF8sIF8sIHQpIEdlbmFycmF5LnQpXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgKEFycmF5Lmxlbmd0aCBkYXRhKSBpblxuICAgIGxldCBvZnMgPVxuICAgICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICAgICAgQ19sYXlvdXQgLT4gMFxuICAgICAgfCBGb3J0cmFuX2xheW91dCAtPiAxXG4gICAgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGRhdGEgLSAxIGRvIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIGRhdGEuKGkpIGRvbmU7XG4gICAgYmFcbmVuZFxuXG5tb2R1bGUgQXJyYXkyID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYiwgJ2MpIHQgPSAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICBsZXQgY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltMTsgZGltMnxdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfcmVmXzJcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWNhbWxfYmFfc2V0XzJcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhXG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzJcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9zZXRfMlwiXG4gIGV4dGVybmFsIGRpbTE6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzFcIlxuICBleHRlcm5hbCBkaW0yOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8yXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltMSBhcnIpICogKGRpbTIgYXJyKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDpcbiAgICAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGxldCBzbGljZV9sZWZ0IGEgbiA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XVxuICBsZXQgc2xpY2VfcmlnaHQgYSBuID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XVxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuICBsZXQgb2ZfYXJyYXkgKHR5cGUgdCkga2luZCAobGF5b3V0OiB0IGxheW91dCkgZGF0YSA9XG4gICAgbGV0IGRpbTEgPSBBcnJheS5sZW5ndGggZGF0YSBpblxuICAgIGxldCBkaW0yID0gaWYgZGltMSA9IDAgdGhlbiAwIGVsc2UgQXJyYXkubGVuZ3RoIGRhdGEuKDApIGluXG4gICAgbGV0IGJhID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBpblxuICAgIGxldCBvZnMgPVxuICAgICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICAgICAgQ19sYXlvdXQgLT4gMFxuICAgICAgfCBGb3J0cmFuX2xheW91dCAtPiAxXG4gICAgaW5cbiAgICBmb3IgaSA9IDAgdG8gZGltMSAtIDEgZG9cbiAgICAgIGxldCByb3cgPSBkYXRhLihpKSBpblxuICAgICAgaWYgQXJyYXkubGVuZ3RoIHJvdyA8PiBkaW0yIHRoZW5cbiAgICAgICAgaW52YWxpZF9hcmcoXCJCaWdhcnJheS5BcnJheTIub2ZfYXJyYXk6IG5vbi1yZWN0YW5ndWxhciBkYXRhXCIpO1xuICAgICAgZm9yIGogPSAwIHRvIGRpbTIgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIChqICsgb2ZzKSByb3cuKGopXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICBiYVxuZW5kXG5cbm1vZHVsZSBBcnJheTMgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiLCAnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbTE7IGRpbTI7IGRpbTN8XVxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfM1wiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfc2V0XzNcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYVxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3JlZl8zXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8zXCJcbiAgZXh0ZXJuYWwgZGltMTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGRpbTI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzJcIlxuICBleHRlcm5hbCBkaW0zOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8zXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltMSBhcnIpICogKGRpbTIgYXJyKSAqIChkaW0zIGFycilcblxuICBleHRlcm5hbCBzdWJfbGVmdDogKCdhLCAnYiwgY19sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBleHRlcm5hbCBzdWJfcmlnaHQ6XG4gICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlX2xlZnRfMSBhIG4gbSA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG47IG18XVxuICBsZXQgc2xpY2VfcmlnaHRfMSBhIG4gbSA9IEdlbmFycmF5LnNsaWNlX3JpZ2h0IGEgW3xuOyBtfF1cbiAgbGV0IHNsaWNlX2xlZnRfMiBhIG4gPSBHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF1cbiAgbGV0IHNsaWNlX3JpZ2h0XzIgYSBuID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG58XVxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuICBsZXQgb2ZfYXJyYXkgKHR5cGUgdCkga2luZCAobGF5b3V0OiB0IGxheW91dCkgZGF0YSA9XG4gICAgbGV0IGRpbTEgPSBBcnJheS5sZW5ndGggZGF0YSBpblxuICAgIGxldCBkaW0yID0gaWYgZGltMSA9IDAgdGhlbiAwIGVsc2UgQXJyYXkubGVuZ3RoIGRhdGEuKDApIGluXG4gICAgbGV0IGRpbTMgPSBpZiBkaW0yID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkuKDApIGluXG4gICAgbGV0IGJhID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBkaW0zIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBkaW0xIC0gMSBkb1xuICAgICAgbGV0IHJvdyA9IGRhdGEuKGkpIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggcm93IDw+IGRpbTIgdGhlblxuICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5My5vZl9hcnJheTogbm9uLWN1YmljIGRhdGFcIik7XG4gICAgICBmb3IgaiA9IDAgdG8gZGltMiAtIDEgZG9cbiAgICAgICAgbGV0IGNvbCA9IHJvdy4oaikgaW5cbiAgICAgICAgaWYgQXJyYXkubGVuZ3RoIGNvbCA8PiBkaW0zIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5My5vZl9hcnJheTogbm9uLWN1YmljIGRhdGFcIik7XG4gICAgICAgIGZvciBrID0gMCB0byBkaW0zIC0gMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYmEgKGkgKyBvZnMpIChqICsgb2ZzKSAoayArIG9mcykgY29sLihrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZTtcbiAgICBiYVxuZW5kXG5cbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MDogKCdhLCAnYiwgJ2MpIEFycmF5MC50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MTogKCdhLCAnYiwgJ2MpIEFycmF5MS50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MjogKCdhLCAnYiwgJ2MpIEFycmF5Mi50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGdlbmFycmF5X29mX2FycmF5MzogKCdhLCAnYiwgJ2MpIEFycmF5My50IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiJWlkZW50aXR5XCJcbmxldCBhcnJheTBfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAwIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkwX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTFfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAxIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkxX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTJfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAyIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkyX29mX2dlbmFycmF5XCJcbmxldCBhcnJheTNfb2ZfZ2VuYXJyYXkgYSA9XG4gIGlmIEdlbmFycmF5Lm51bV9kaW1zIGEgPSAzIHRoZW4gYVxuICBlbHNlIGludmFsaWRfYXJnIFwiQmlnYXJyYXkuYXJyYXkzX29mX2dlbmFycmF5XCJcblxuZXh0ZXJuYWwgcmVzaGFwZTpcbiAgICgnYSwgJ2IsICdjKSBHZW5hcnJheS50IC0+IGludCBhcnJheSAtPiAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICAgPSBcImNhbWxfYmFfcmVzaGFwZVwiXG5sZXQgcmVzaGFwZV8wIGEgPSByZXNoYXBlIGEgW3x8XVxubGV0IHJlc2hhcGVfMSBhIGRpbTEgPSByZXNoYXBlIGEgW3xkaW0xfF1cbmxldCByZXNoYXBlXzIgYSBkaW0xIGRpbTIgPSByZXNoYXBlIGEgW3xkaW0xO2RpbTJ8XVxubGV0IHJlc2hhcGVfMyBhIGRpbTEgZGltMiBkaW0zID0gcmVzaGFwZSBhIFt8ZGltMTtkaW0yO2RpbTN8XVxuXG4oKiBGb3JjZSBjYW1sX2JhX2dldF97MSwyLDMsTn0gdG8gYmUgbGlua2VkIGluLCBzaW5jZSB3ZSBkb24ndCByZWZlclxuICAgdG8gdGhvc2UgcHJpbWl0aXZlcyBkaXJlY3RseSBpbiB0aGlzIGZpbGUgKilcblxubGV0IF8gPVxuICBsZXQgXyA9IEdlbmFycmF5LmdldCBpblxuICBsZXQgXyA9IEFycmF5MS5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTIuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkzLmdldCBpblxuICAoKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuZXh0ZXJuYWwgZ2V0MTogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8xXCJcbmV4dGVybmFsIGdldDI6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfMlwiXG5leHRlcm5hbCBnZXQzOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzNcIlxuZXh0ZXJuYWwgc2V0MTogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8xXCJcbmV4dGVybmFsIHNldDI6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfMlwiXG5leHRlcm5hbCBzZXQzOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzNcIlxuIiwibGV0IHRhcmlmID0gXCLDiXTDqSAyMDIwXCJcblxubGV0IGRlc3RpbmF0YWlyZXMgPSBcImR1YnV2YWxAZ21haWwuY29tLGd1eS5ncmFuZ2VAd2FuYWRvby5mclwiXG5cbnR5cGUgcGllY2UgPSBDaGFtYnJlMSB8IENoYW1icmUyIHwgQ2hhbWJyZTMgfCBTZWpvdXIgfCBTZGIxIHwgU2RiMlxuXG5sZXQgcGllY2VzID0gWyBDaGFtYnJlMTsgQ2hhbWJyZTI7IENoYW1icmUzOyBTZWpvdXI7IFNkYjE7IFNkYjIgXVxuXG5sZXQgc2hvcnRfc3RyaW5nX29mX3BpZWNlID0gZnVuY3Rpb25cbiAgfCBDaGFtYnJlMSAtPiBcImNoMVwiXG4gIHwgQ2hhbWJyZTIgLT4gXCJjaDJcIlxuICB8IENoYW1icmUzIC0+IFwiY2gzXCJcbiAgfCBTZWpvdXIgLT4gXCJzalwiXG4gIHwgU2RiMSAtPiBcInNkYjFcIlxuICB8IFNkYjIgLT4gXCJzZGIyXCJcblxubGV0IGxvbmdfc3RyaW5nX29mX3BpZWNlID0gZnVuY3Rpb25cbiAgfCBDaGFtYnJlMSAtPiBcIkNoYW1icmUgMVwiXG4gIHwgQ2hhbWJyZTIgLT4gXCJDaGFtYnJlIDJcIlxuICB8IENoYW1icmUzIC0+IFwiQ2hhbWJyZSAzXCJcbiAgfCBTZWpvdXIgLT4gXCJTw6lqb3VyXCJcbiAgfCBTZGIxIC0+IFwiU2FsbGUgZGUgYmFpbnMgMVwiXG4gIHwgU2RiMiAtPiBcIlNhbGxlIGRlIGJhaW5zIDJcIlxuXG50eXBlIGZvdXJuaXR1cmUgPSB7XG4gIG5hbWUgOiBzdHJpbmc7XG4gIGRlc2lnbmF0aW9uIDogc3RyaW5nO1xuICBwcml4IDogaW50O1xuICBkaXNwb25pYmlsaXRlIDogKHBpZWNlICogaW50KSBsaXN0O1xufVxuXG5sZXQgZm91cm5pdHVyZXMgPVxuICBbXG4gICAge1xuICAgICAgbmFtZSA9IFwiZGg4MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkRyYXAgaG91c3NlIDgwIGNtXCI7XG4gICAgICBwcml4ID0gNztcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMSwgMikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImRoOTBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSA5MCBjbVwiO1xuICAgICAgcHJpeCA9IDc7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTMsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJkaDE0MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkRyYXAgaG91c3NlIDE0MCBjbVwiO1xuICAgICAgcHJpeCA9IDE1O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUyLCAxKTsgKFNlam91ciwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImRoYmJcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSBiw6liw6lcIjtcbiAgICAgIHByaXggPSAzO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiaGMxcFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkhvdXNzZSBkZSBjb3VldHRlIDEgcGxhY2VcIjtcbiAgICAgIHByaXggPSAxMDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMSwgMik7IChDaGFtYnJlMywgNCkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImhjMnBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJIb3Vzc2UgZGUgY291ZXR0ZSAyIHBsYWNlc1wiO1xuICAgICAgcHJpeCA9IDE2O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUyLCAxKTsgKFNlam91ciwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImhjYmJcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJIb3Vzc2UgZGUgY291ZXR0ZSBiw6liw6lcIjtcbiAgICAgIHByaXggPSA0O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwibGl0YmJcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJMaXQgYsOpYsOpXCI7XG4gICAgICBwcml4ID0gMTA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTgwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyA4MCBjbVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTkwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyA5MCBjbVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTMsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTE0MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgMTQwIGNtXCI7XG4gICAgICBwcml4ID0gMDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMiwgMSk7IChTZWpvdXIsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbWJiXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyBiw6liw6lcIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidGFpZVwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlRhaWUgZOKAmW9yZWlsbGVyXCI7XG4gICAgICBwcml4ID0gMztcbiAgICAgIGRpc3BvbmliaWxpdGUgPVxuICAgICAgICBbIChDaGFtYnJlMSwgNCk7IChDaGFtYnJlMiwgNCk7IChDaGFtYnJlMywgOCk7IChTZWpvdXIsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJkb3VjaGVcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGRlIGRvdWNoZVwiO1xuICAgICAgcHJpeCA9IDQ7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMyk7IChTZGIyLCAzKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZ2FudFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkdhbnQgZGUgdG9pbGV0dGVcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDQpOyAoU2RiMiwgNikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcInNlcnZcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJTZXJ2aWV0dGUgZGUgdG9pbGV0dGVcIjtcbiAgICAgIHByaXggPSAzO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDQpOyAoU2RiMiwgNikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImludlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlNlcnZpZXR0ZSBpbnZpdMOpc1wiO1xuICAgICAgcHJpeCA9IDM7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMSk7IChTZGIyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidGFwaXNcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJUYXBpcyBkZSBkb3VjaGVcIjtcbiAgICAgIHByaXggPSAzO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDIpOyAoU2RiMiwgMikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcIm1haW5zXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiRXNzdWllLW1haW5zXCI7XG4gICAgICBwcml4ID0gMjtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZWpvdXIsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJ0YWJsZVwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlNlcnZpZXR0ZXMgZGUgdGFibGVcIjtcbiAgICAgIHByaXggPSAyO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNlam91ciwgMTApIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJ0b3JjaG9uXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiVG9yY2hvbnMgw6AgdmFpc3NlbGxlXCI7XG4gICAgICBwcml4ID0gMjtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZWpvdXIsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJtaWNyb2ZpYnJlXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiVG9yY2hvbnMgbWljcm9maWJyZVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMik7IChTZGIyLCAyKTsgKFNlam91ciwgMikgXTtcbiAgICB9O1xuICBdXG5cbiIsbnVsbCwibW9kdWxlIElMID0gSW52ZW50YWlyZV9saW5nZVxuXG5sZXQgc2V0X3N0cmluZ19pbnB1dF9ieV9pZCBubSB2ID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLmlucHV0XG4gIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBpbnAgLT4gaW5wIyMudmFsdWUgOj0gSnNfb2Zfb2NhbWwuSnMuc3RyaW5nIHZcblxubGV0IHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLmlucHV0XG4gIHdpdGhcbiAgfCBOb25lIC0+IFwiXCJcbiAgfCBTb21lIGlucCAtPiBpbnAjIy52YWx1ZSB8PiBKc19vZl9vY2FtbC5Kcy50b19zdHJpbmdcblxubGV0IHplcm9faW50X2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnNlbGVjdFxuICB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgaW5wIC0+IGlucCMjLnZhbHVlIDo9IDAgfD4gc3RyaW5nX29mX2ludCB8PiBKc19vZl9vY2FtbC5Kcy5zdHJpbmdcblxubGV0IHJlYWRfaW50X2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnNlbGVjdFxuICB3aXRoXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSBpbnAgLT4gaW5wIyMudmFsdWUgfD4gSnNfb2Zfb2NhbWwuSnMudG9fc3RyaW5nIHw+IGludF9vZl9zdHJpbmdcblxubGV0IHNldF90ZF9ieV9pZCBubSB2ID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnRkXG4gIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB0ZCAtPiB0ZCMjLmlubmVySFRNTCA6PSBKc19vZl9vY2FtbC5Kcy5zdHJpbmcgdlxuXG5sZXQgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmID1cbiAgbGV0IG9wZW4gSUwgaW5cbiAgZi5kaXNwb25pYmlsaXRlXG4gIHw+IExpc3QubWFwIChmdW4gKHAsIF8pIC0+IGYubmFtZSBeIFwiX1wiIF4gc2hvcnRfc3RyaW5nX29mX3BpZWNlIHApXG5cbmxldCBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmID1cbiAgbGV0IG9wZW4gSUwgaW5cbiAgZi5kaXNwb25pYmlsaXRlXG4gIHw+IExpc3QubWFwIChmdW4gKHAsIF8pIC0+XG4gICAgICAgICAoZi5uYW1lIF4gXCJfXCIgXiBzaG9ydF9zdHJpbmdfb2ZfcGllY2UgcCwgbG9uZ19zdHJpbmdfb2ZfcGllY2UgcCkpXG5cbmxldCBhbGxfbmFtZXMgPSBJTC5mb3Vybml0dXJlcyB8PiBMaXN0Lm1hcCBmaWVsZF9pZF9ieV9mb3Vybml0dXJlIHw+IExpc3QuY29uY2F0XG5cbigqIE1ldHMgw6Agam91ciBsZSBjb3JwcyBkdSBtYWlsICopXG5sZXQgZW1haWxfYm9keSAoKSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSA1MDAgaW5cbiAgUHJpbnRmLmJwcmludGYgYlxuICAgIFwiLS0tLS0gUsOpc2VydmF0aW9uIGxpbmdlIER1YnV2YWwsIExlcyB0ZXJyYXNzZXMgZGVzIENob3NlYXV4LCBBcHBhcnRlbWVudCBcXFxuICAgICBCNiAtLS0tLSUlMEFcIjtcbiAgUHJpbnRmLmJwcmludGYgYiBcIkxvY2F0YWlyZSA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIik7XG4gIFByaW50Zi5icHJpbnRmIGIgXCJEYXRlIGTigJlhcnJpdsOpZSA6ICVzJSUwQVwiXG4gICAgKHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiKTtcbiAgUHJpbnRmLmJwcmludGYgYiBcIkRhdGUgZGUgZMOpcGFydCA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiKTtcbiAgTGlzdC5maWx0ZXJfbWFwXG4gICAgKGZ1biBmIC0+XG4gICAgICBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAoZnVuIChzLCBkZXRhaWwpIChmaWVsZF9pZCwgc2hvcnQpIC0+XG4gICAgICAgICAgICAgbGV0IHEgPSByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZCBpblxuICAgICAgICAgICAgICggcyArIHEsXG4gICAgICAgICAgICAgICBpZiBxID4gMCB0aGVuIChzaG9ydCBeIFwiIDogXCIgXiBzdHJpbmdfb2ZfaW50IHEpIDo6IGRldGFpbFxuICAgICAgICAgICAgICAgZWxzZSBkZXRhaWwgKSlcbiAgICAgICAgICAgKDAsIFtdKVxuICAgICAgfD4gZnVuY3Rpb25cbiAgICAgIHwgMCwgXyAtPiBOb25lXG4gICAgICB8IHEsIGRldGFpbCAtPiBTb21lIChmLmRlc2lnbmF0aW9uLCBxLCBkZXRhaWwpKVxuICAgIElMLmZvdXJuaXR1cmVzXG4gIHw+IExpc3QuaXRlciAoZnVuIChkZXNjciwgcSwgZGV0YWlsKSAtPlxuICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIuKAlCAlZCAlcyVzJSUwQVwiIHEgZGVzY3JcbiAgICAgICAgICAgKCBtYXRjaCBkZXRhaWwgd2l0aFxuICAgICAgICAgICB8IFtdIC0+IFwiXCJcbiAgICAgICAgICAgfCBfIC0+IFByaW50Zi5zcHJpbnRmIFwiICglcylcIiAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgZGV0YWlsKSApKTtcbiAgUHJpbnRmLmJwcmludGYgYiBcIiUlMEFUb3RhbCA6ICVkIOKCrCUlMEFcIlxuICAgIChMaXN0LmZvbGRfbGVmdFxuICAgICAgIChmdW4gdG90YWwgZiAtPlxuICAgICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKVxuICAgICAgICAgICAgICAwXG4gICAgICAgICB8PiAoICogKSBmLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgICAgMCBJTC5mb3Vybml0dXJlcyk7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbigqIE1ldHMgw6Agam91ciBsZSBjb3JwcyBkdSBtYWlsICopXG5sZXQgcmVzdW1lX2JvZHkgKCkgPVxuICBUeXhtbC5IdG1sLihcbiAgICBkaXZcbiAgICAgIFtcbiAgICAgICAgcFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGIgWyB0eHQgXCJMb2NhdGFpcmUgOiBcIjsgdHh0IChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIikgXTtcbiAgICAgICAgICBdO1xuICAgICAgICBwXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdHh0IFwiRGF0ZSBk4oCZYXJyaXbDqWUgOiBcIjtcbiAgICAgICAgICAgICAgICB0eHQgKHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiKTtcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICBdO1xuICAgICAgICBwXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdHh0IFwiRGF0ZSBkZSBkw6lwYXJ0IDogXCI7IHR4dCAocmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJkZXBhcnRcIik7XG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgXTtcbiAgICAgICAgYnIgKCk7XG4gICAgICAgIHVsXG4gICAgICAgICAgKCBMaXN0LmZpbHRlcl9tYXBcbiAgICAgICAgICAgICAgKGZ1biBmIC0+XG4gICAgICAgICAgICAgICAgZmllbGRfaWRfYW5kX3BpZWNlX2J5X2ZvdXJuaXR1cmUgZlxuICAgICAgICAgICAgICAgIHw+IExpc3QuZm9sZF9sZWZ0XG4gICAgICAgICAgICAgICAgICAgICAoZnVuIChzLCBkZXRhaWwpIChmaWVsZF9pZCwgc2hvcnQpIC0+XG4gICAgICAgICAgICAgICAgICAgICAgIGxldCBxID0gcmVhZF9pbnRfaW5wdXRfYnlfaWQgZmllbGRfaWQgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgKCBzICsgcSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBxID4gMCB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQgXiBcIiA6IFwiIF4gc3RyaW5nX29mX2ludCBxKSA6OiBkZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRldGFpbCApKVxuICAgICAgICAgICAgICAgICAgICAgKDAsIFtdKVxuICAgICAgICAgICAgICAgIHw+IGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgfCAwLCBfIC0+IE5vbmVcbiAgICAgICAgICAgICAgICB8IHEsIGRldGFpbCAtPiBTb21lIChmLmRlc2lnbmF0aW9uLCBxLCBMaXN0LnJldiBkZXRhaWwpKVxuICAgICAgICAgICAgICBJTC5mb3Vybml0dXJlc1xuICAgICAgICAgIHw+IExpc3QubWFwIChmdW4gKGRlc2NyLCBxLCBkZXRhaWwpIC0+XG4gICAgICAgICAgICAgICAgIGxpXG4gICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgdHh0IChzdHJpbmdfb2ZfaW50IHEpO1xuICAgICAgICAgICAgICAgICAgICAgdHh0IFwiIFwiO1xuICAgICAgICAgICAgICAgICAgICAgdHh0IGRlc2NyO1xuICAgICAgICAgICAgICAgICAgICAgdHh0XG4gICAgICAgICAgICAgICAgICAgICAgICggbWF0Y2ggZGV0YWlsIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgICAgfCBbXSAtPiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgIHwgXyAtPiBQcmludGYuc3ByaW50ZiBcIiAoJXMpXCIgKFN0cmluZy5jb25jYXQgXCIsIFwiIGRldGFpbClcbiAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICBdKSApO1xuICAgICAgICBiciAoKTtcbiAgICAgICAgcFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGIgWyB0eHQgXCJUb3RhbCA6IFwiIF07XG4gICAgICAgICAgICB0eHRcbiAgICAgICAgICAgICAgKCBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAgICAgKGZ1biB0b3RhbCBmIC0+XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkX2lkX2J5X2ZvdXJuaXR1cmUgZlxuICAgICAgICAgICAgICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgIChmdW4gcyBmaWVsZF9pZCAtPiBzICsgcmVhZF9pbnRfaW5wdXRfYnlfaWQgZmllbGRfaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICB8PiAoICogKSBmLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgICAgICAgICAgICAgICAwIElMLmZvdXJuaXR1cmVzXG4gICAgICAgICAgICAgIHw+IHN0cmluZ19vZl9pbnQgKTtcbiAgICAgICAgICAgIHR4dCBcIsKg4oKsXCI7XG4gICAgICAgICAgXTtcbiAgICAgIF0pXG4gIHw+IEZvcm1hdC5hc3ByaW50ZiBcIiVhXCIgKFR5eG1sLkh0bWwucHBfZWx0ICgpKVxuICB8PiBKc19vZl9vY2FtbC5Kcy5zdHJpbmdcblxuKCogUHJpbnRmLmJwcmludGYgYiBcIkxvY2F0YWlyZSA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIik7XG4gKiBQcmludGYuYnByaW50ZiBiIFwiRGF0ZSBk4oCZYXJyaXbDqWUgOiAlcyUlMEFcIlxuICogICAocmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJhcnJpdmVlXCIpO1xuICogUHJpbnRmLmJwcmludGYgYiBcIkRhdGUgZGUgZMOpcGFydCA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiKTtcbiAqIExpc3QuZmlsdGVyX21hcFxuICogICAoZnVuIGYgLT5cbiAqICAgICBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmXG4gKiAgICAgfD4gTGlzdC5mb2xkX2xlZnRcbiAqICAgICAgICAgIChmdW4gKHMsIGRldGFpbCkgKGZpZWxkX2lkLCBzaG9ydCkgLT5cbiAqICAgICAgICAgICAgbGV0IHEgPSByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZCBpblxuICogICAgICAgICAgICAoIHMgKyBxLFxuICogICAgICAgICAgICAgIGlmIHEgPiAwIHRoZW4gKHNob3J0IF4gXCIgOiBcIiBeIHN0cmluZ19vZl9pbnQgcSkgOjogZGV0YWlsXG4gKiAgICAgICAgICAgICAgZWxzZSBkZXRhaWwgKSlcbiAqICAgICAgICAgICgwLCBbXSlcbiAqICAgICB8PiBmdW5jdGlvblxuICogICAgIHwgMCwgXyAtPiBOb25lXG4gKiAgICAgfCBxLCBkZXRhaWwgLT4gU29tZSAoZi5kZXNpZ25hdGlvbiwgcSwgZGV0YWlsKSlcbiAqICAgSUwuZm91cm5pdHVyZXNcbiAqIHw+IExpc3QuaXRlciAoZnVuIChkZXNjciwgcSwgZGV0YWlsKSAtPlxuICogICAgICAgIFByaW50Zi5icHJpbnRmIGIgXCLigJQgJWQgJXMlcyUlMEFcIiBxIGRlc2NyXG4gKiAgICAgICAgICAoIG1hdGNoIGRldGFpbCB3aXRoXG4gKiAgICAgICAgICB8IFtdIC0+IFwiXCJcbiAqICAgICAgICAgIHwgXyAtPiBQcmludGYuc3ByaW50ZiBcIiAoJXMpXCIgKFN0cmluZy5jb25jYXQgXCIsIFwiIGRldGFpbCkgKSk7XG4gKiBQcmludGYuYnByaW50ZiBiIFwiJSUwQVRvdGFsIDogJWQg4oKsJSUwQVwiXG4gKiAgIChMaXN0LmZvbGRfbGVmdFxuICogICAgICAoZnVuIHRvdGFsIGYgLT5cbiAqICAgICAgICBmaWVsZF9pZF9ieV9mb3Vybml0dXJlIGZcbiAqICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICogICAgICAgICAgICAgKGZ1biBzIGZpZWxkX2lkIC0+IHMgKyByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZClcbiAqICAgICAgICAgICAgIDBcbiAqICAgICAgICB8PiAoICogKSBmLnByaXggfD4gKCArICkgdG90YWwpXG4gKiAgICAgIDAgSUwuZm91cm5pdHVyZXMpO1xuICogQnVmZmVyLmNvbnRlbnRzIGIgKilcblxubGV0IHVwZGF0ZV9tc2cgKCkgPVxuICBsZXQgKCkgPVxuICAgIG1hdGNoXG4gICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2UgXCJiZW52b2lcIlxuICAgICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5Db2VyY2VUby5hXG4gICAgd2l0aFxuICAgIHwgTm9uZSAtPiAoKVxuICAgIHwgU29tZSBhIC0+XG4gICAgICAgIGEjIy5ocmVmIDo9XG4gICAgICAgICAgSnNfb2Zfb2NhbWwuSnMuc3RyaW5nXG4gICAgICAgICAgICAoIFwibWFpbHRvOlwiIF4gSUwuZGVzdGluYXRhaXJlc1xuICAgICAgICAgICAgXiBcIj9zdWJqZWN0PVLDqXNlcnZhdGlvbiBsaW5nZSBEdWJ1dmFsJmJvZHk9XCIgXiBlbWFpbF9ib2R5ICgpIClcbiAgaW5cblxuICBtYXRjaFxuICAgIEpzX29mX29jYW1sLkRvbV9odG1sLmdldEVsZW1lbnRCeUlkX2NvZXJjZSBcInJlc3VtZVwiXG4gICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5Db2VyY2VUby5kaXZcbiAgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHJlc3VtZSAtPiByZXN1bWUjIy5pbm5lckhUTUwgOj0gcmVzdW1lX2JvZHkgKClcblxuKCogUmUtY2FsY3VsICopXG5sZXQgY29tcHV0ZSAoKSA9XG4gIExpc3QuaXRlclxuICAgIChmdW4gZiAtPlxuICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdCAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKSAwXG4gICAgICB8PiBmdW4gcXRlIC0+XG4gICAgICBzZXRfdGRfYnlfaWQgZi5JTC5uYW1lICgocXRlICogZi5wcml4IHw+IHN0cmluZ19vZl9pbnQpIF4gXCLCoOKCrFwiKTtcbiAgICAgIHN0cmluZ19vZl9pbnQgcXRlIHw+IHNldF90ZF9ieV9pZCAoZi5JTC5uYW1lIF4gXCJfcXRlXCIpKVxuICAgIElMLmZvdXJuaXR1cmVzO1xuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gdG90YWwgZiAtPlxuICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdCAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKSAwXG4gICAgICB8PiAoICogKSBmLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgMCBJTC5mb3Vybml0dXJlc1xuICB8PiBzdHJpbmdfb2ZfaW50IHw+IEZ1bi5mbGlwICggXiApIFwiwqDigqxcIiB8PiBzZXRfdGRfYnlfaWQgXCJ0b3RhbFwiO1xuICB1cGRhdGVfbXNnICgpXG5cbmxldCByZXNldF9mb3JtICgpID1cbiAgbGV0IGRvaXQgPVxuICAgIEpzX29mX29jYW1sLkRvbV9odG1sLndpbmRvdyMjY29uZmlybVxuICAgICAgKEpzX29mX29jYW1sLkpzLnN0cmluZyBcIlLDqWluaXRpYWxpc2VyIGNvbXBsw6h0ZW1lbnQgbGUgZm9ybXVsYWlyZSA/XCIpXG4gICAgfD4gSnNfb2Zfb2NhbWwuSnMudG9fYm9vbFxuICBpblxuICBpZiBkb2l0IHRoZW4gKFxuICAgIHNldF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJub21fcHJlbm9tXCIgXCJcIjtcbiAgICBzZXRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiIFwiXCI7XG4gICAgc2V0X3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiIFwiXCI7XG4gICAgYWxsX25hbWVzIHw+IExpc3QuaXRlciB6ZXJvX2ludF9pbnB1dF9ieV9pZDtcbiAgICBjb21wdXRlICgpIClcblxubGV0IF8gPVxuICBKc19vZl9vY2FtbC5Kcy5leHBvcnQgXCJjb21wdXRlXCIgY29tcHV0ZTtcbiAgSnNfb2Zfb2NhbWwuSnMuZXhwb3J0IFwicmVzZXRfZm9ybVwiIHJlc2V0X2Zvcm1cbiJdfQ==
|
||
//]]>
|
||
|
||
</script>
|
||
<div>
|
||
<p><b>Tarifs de location du linge — SCI Dubuval — Été 2020</b></p>
|
||
<br/>
|
||
<p>
|
||
<b>
|
||
Si nécessaire, complétez ce formulaire dès la réservation, puis
|
||
cliquez sur le bouton « Envoi par courriel » situé en bas de page
|
||
pour nous l’envoyer par courriel.
|
||
</b>
|
||
</p>
|
||
<p>Votre demande est modifiable jusqu’à 7 jours avant votre arrivée.
|
||
</p>
|
||
<p>
|
||
<b>
|
||
Le montant sera réglé directement à la Société Guy Grange le jour
|
||
de votre arrivée.
|
||
</b>
|
||
</p><br/>
|
||
<p>
|
||
<button type="button" onclick="reset_form()">Réinitialiser le formulaire
|
||
</button>
|
||
</p><br/>
|
||
<table>
|
||
<tr><td><b>Nom et prénom du locataire : </b></td>
|
||
<td><input id="nom_prenom" onchange="compute()"/></td>
|
||
</tr>
|
||
<tr><td><b>Date d’arrivée (aaaa-mm-jj) : </b></td>
|
||
<td><input id="arrivee" onchange="compute()"/></td>
|
||
</tr>
|
||
<tr><td><b>Date de départ (aaaa-mm-jj) : </b></td>
|
||
<td><input id="depart" onchange="compute()"/></td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div><br/>
|
||
<table class="montablo">
|
||
<tr class="gras"><td></td><td>Prix unitaire</td><td>Chambre 1</td>
|
||
<td>Chambre 2</td><td>Chambre 3</td><td>Séjour</td>
|
||
<td>Salle de bains 1</td><td>Salle de bains 2</td><td>Quantités</td>
|
||
<td>Totaux</td>
|
||
</tr>
|
||
<tr><td class="gras">Drap housse 80 cm</td><td id="dh80_prix">7 €</td>
|
||
<td>
|
||
<select id="dh80_ch1" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td></td><td></td>
|
||
<td id="dh80_qte"></td><td id="dh80"></td>
|
||
</tr>
|
||
<tr><td class="gras">Drap housse 90 cm</td><td id="dh90_prix">7 €</td>
|
||
<td></td><td></td>
|
||
<td>
|
||
<select id="dh90_ch3" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
<option value="3">3</option><option value="4">4</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td id="dh90_qte"></td>
|
||
<td id="dh90"></td>
|
||
</tr>
|
||
<tr><td class="gras">Drap housse 140 cm</td>
|
||
<td id="dh140_prix">15 €</td><td></td>
|
||
<td>
|
||
<select id="dh140_ch2" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
</select>
|
||
</td><td></td>
|
||
<td>
|
||
<select id="dh140_sj" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td><td></td><td></td><td id="dh140_qte"></td><td id="dh140"></td>
|
||
</tr>
|
||
<tr><td class="gras">Drap housse bébé</td><td id="dhbb_prix">3 €</td>
|
||
<td>
|
||
<select id="dhbb_ch1" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td></td><td></td>
|
||
<td id="dhbb_qte"></td><td id="dhbb"></td>
|
||
</tr>
|
||
<tr><td class="gras">Housse de couette 1 place</td>
|
||
<td id="hc1p_prix">10 €</td>
|
||
<td>
|
||
<select id="hc1p_ch1" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
</select>
|
||
</td><td></td>
|
||
<td>
|
||
<select id="hc1p_ch3" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
<option value="3">3</option><option value="4">4</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td id="hc1p_qte"></td>
|
||
<td id="hc1p"></td>
|
||
</tr>
|
||
<tr><td class="gras">Housse de couette 2 places</td>
|
||
<td id="hc2p_prix">16 €</td><td></td>
|
||
<td>
|
||
<select id="hc2p_ch2" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td><td></td>
|
||
<td>
|
||
<select id="hc2p_sj" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td><td></td><td></td><td id="hc2p_qte"></td><td id="hc2p"></td>
|
||
</tr>
|
||
<tr><td class="gras">Housse de couette bébé</td>
|
||
<td id="hcbb_prix">4 €</td>
|
||
<td>
|
||
<select id="hcbb_ch1" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td></td><td></td>
|
||
<td id="hcbb_qte"></td><td id="hcbb"></td>
|
||
</tr>
|
||
<tr><td class="gras">Lit bébé</td><td id="litbb_prix">10 €</td>
|
||
<td>
|
||
<select id="litbb_ch1" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td></td><td></td>
|
||
<td id="litbb_qte"></td><td id="litbb"></td>
|
||
</tr>
|
||
<tr><td class="gras">Protège matelas 80 cm</td>
|
||
<td id="pm80_prix">0 €</td>
|
||
<td>
|
||
<select id="pm80_ch1" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td></td><td></td>
|
||
<td id="pm80_qte"></td><td id="pm80"></td>
|
||
</tr>
|
||
<tr><td class="gras">Protège matelas 90 cm</td>
|
||
<td id="pm90_prix">0 €</td><td></td><td></td>
|
||
<td>
|
||
<select id="pm90_ch3" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
<option value="3">3</option><option value="4">4</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td id="pm90_qte"></td>
|
||
<td id="pm90"></td>
|
||
</tr>
|
||
<tr><td class="gras">Protège matelas 140 cm</td>
|
||
<td id="pm140_prix">0 €</td><td></td>
|
||
<td>
|
||
<select id="pm140_ch2" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
</select>
|
||
</td><td></td>
|
||
<td>
|
||
<select id="pm140_sj" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td><td></td><td></td><td id="pm140_qte"></td><td id="pm140"></td>
|
||
</tr>
|
||
<tr><td class="gras">Protège matelas bébé</td>
|
||
<td id="pmbb_prix">0 €</td>
|
||
<td>
|
||
<select id="pmbb_ch1" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td><td></td><td></td><td></td><td></td><td></td>
|
||
<td id="pmbb_qte"></td><td id="pmbb"></td>
|
||
</tr>
|
||
<tr><td class="gras">Taie d’oreiller</td><td id="taie_prix">3 €</td>
|
||
<td>
|
||
<select id="taie_ch1" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
<option value="3">3</option><option value="4">4</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="taie_ch2" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
<option value="3">3</option><option value="4">4</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="taie_ch3" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
<option value="3">3</option><option value="4">4</option>
|
||
<option value="5">5</option><option value="6">6</option>
|
||
<option value="7">7</option><option value="8">8</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="taie_sj" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
<option value="3">3</option><option value="4">4</option>
|
||
</select>
|
||
</td><td></td><td></td><td id="taie_qte"></td><td id="taie"></td>
|
||
</tr>
|
||
<tr><td class="gras">Drap de douche</td><td id="douche_prix">4 €</td>
|
||
<td></td><td></td><td></td><td></td>
|
||
<td>
|
||
<select id="douche_sdb1" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option><option value="3">3</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="douche_sdb2" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option><option value="3">3</option>
|
||
</select>
|
||
</td><td id="douche_qte"></td><td id="douche"></td>
|
||
</tr>
|
||
<tr><td class="gras">Gant de toilette</td><td id="gant_prix">1 €</td>
|
||
<td></td><td></td><td></td><td></td>
|
||
<td>
|
||
<select id="gant_sdb1" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option><option value="3">3</option>
|
||
<option value="4">4</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="gant_sdb2" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option><option value="3">3</option>
|
||
<option value="4">4</option><option value="5">5</option>
|
||
<option value="6">6</option>
|
||
</select>
|
||
</td><td id="gant_qte"></td><td id="gant"></td>
|
||
</tr>
|
||
<tr><td class="gras">Serviette de toilette</td>
|
||
<td id="serv_prix">3 €</td><td></td><td></td><td></td><td></td>
|
||
<td>
|
||
<select id="serv_sdb1" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option><option value="3">3</option>
|
||
<option value="4">4</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="serv_sdb2" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option><option value="3">3</option>
|
||
<option value="4">4</option><option value="5">5</option>
|
||
<option value="6">6</option>
|
||
</select>
|
||
</td><td id="serv_qte"></td><td id="serv"></td>
|
||
</tr>
|
||
<tr><td class="gras">Serviette invités</td><td id="inv_prix">3 €</td>
|
||
<td></td><td></td><td></td><td></td>
|
||
<td>
|
||
<select id="inv_sdb1" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="inv_sdb2" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option>
|
||
</select>
|
||
</td><td id="inv_qte"></td><td id="inv"></td>
|
||
</tr>
|
||
<tr><td class="gras">Tapis de douche</td><td id="tapis_prix">3 €</td>
|
||
<td></td><td></td><td></td><td></td>
|
||
<td>
|
||
<select id="tapis_sdb1" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="tapis_sdb2" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option>
|
||
</select>
|
||
</td><td id="tapis_qte"></td><td id="tapis"></td>
|
||
</tr>
|
||
<tr><td class="gras">Essuie-mains</td><td id="mains_prix">2 €</td>
|
||
<td></td><td></td><td></td>
|
||
<td>
|
||
<select id="mains_sj" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
</select>
|
||
</td><td></td><td></td><td id="mains_qte"></td><td id="mains"></td>
|
||
</tr>
|
||
<tr><td class="gras">Serviettes de table</td>
|
||
<td id="table_prix">2 €</td><td></td><td></td><td></td>
|
||
<td>
|
||
<select id="table_sj" onchange="compute()"><option value="0">0</option>
|
||
<option value="1">1</option><option value="2">2</option>
|
||
<option value="3">3</option><option value="4">4</option>
|
||
<option value="5">5</option><option value="6">6</option>
|
||
<option value="7">7</option><option value="8">8</option>
|
||
<option value="9">9</option><option value="10">10</option>
|
||
</select>
|
||
</td><td></td><td></td><td id="table_qte"></td><td id="table"></td>
|
||
</tr>
|
||
<tr><td class="gras">Torchons à vaisselle</td>
|
||
<td id="torchon_prix">2 €</td><td></td><td></td><td></td>
|
||
<td>
|
||
<select id="torchon_sj" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option>
|
||
</select>
|
||
</td><td></td><td></td><td id="torchon_qte"></td><td id="torchon"></td>
|
||
</tr>
|
||
<tr><td class="gras">Torchons microfibre</td>
|
||
<td id="microfibre_prix">0 €</td><td></td><td></td><td></td>
|
||
<td>
|
||
<select id="microfibre_sj" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="microfibre_sdb1" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option>
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<select id="microfibre_sdb2" onchange="compute()">
|
||
<option value="0">0</option><option value="1">1</option>
|
||
<option value="2">2</option>
|
||
</select>
|
||
</td><td id="microfibre_qte"></td><td id="microfibre"></td>
|
||
</tr>
|
||
<tr><td class="gras">Totaux</td><td></td><td></td><td></td><td></td>
|
||
<td></td><td></td><td></td><td></td><td id="total"></td>
|
||
</tr>
|
||
<tr class="gras"><td></td><td>Prix unitaire</td><td>Chambre 1</td>
|
||
<td>Chambre 2</td><td>Chambre 3</td><td>Séjour</td>
|
||
<td>Salle de bains 1</td><td>Salle de bains 2</td><td>Quantités</td>
|
||
<td>Totaux</td>
|
||
</tr>
|
||
</table><br/>
|
||
<a id="benvoi"><button type="button">Envoi par courriel</button></a>
|
||
<p>
|
||
Si jamais le bouton d’envoi par courriel ne fonctionne pas, vous pouvez
|
||
nous envoyer une copie du résumé ci-dessous :
|
||
</p><div id="resume"></div>
|
||
</div>
|
||
</body>
|