@asgardeo/auth-react 0.2.11 → 0.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +38 -38
- package/dist/tsconfig.tsbuildinfo +14 -14
- package/package.json +2 -2
package/dist/main.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(t,l){"object"==typeof exports&&"object"==typeof module?module.exports=l(require("react"),require("react-router-dom")):"function"==typeof define&&define.amd?define([,],l):"object"==typeof exports?exports.AsgardeoAuth=l(require("react"),require("react-router-dom")):t.AsgardeoAuth=l(t.React,t.ReactRouter)}(this,(function(t,l){return function(t){var l={};function i(n){if(l[n])return l[n].exports;var e=l[n]={i:n,l:!1,exports:{}};return t[n].call(e.exports,e,e.exports,i),e.l=!0,e.exports}return i.m=t,i.c=l,i.d=function(t,l,n){i.o(t,l)||Object.defineProperty(t,l,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,l){if(1&l&&(t=i(t)),8&l)return t;if(4&l&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&l&&"string"!=typeof t)for(var e in t)i.d(n,e,function(l){return t[l]}.bind(null,e));return n},i.n=function(t){var l=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(l,"a",l),l},i.o=function(t,l){return Object.prototype.hasOwnProperty.call(t,l)},i.p="",i(i.s=537)}([function(t,l,i){var n=i(4),e=i(24).f,c=i(18),o=i(25),d=i(108),r=i(145),a=i(72);t.exports=function(t,l){var i,u,Z,s,b,m=t.target,h=t.global,I=t.stat;if(i=h?n:I?n[m]||d(m,{}):(n[m]||{}).prototype)for(u in l){if(s=l[u],Z=t.noTargetGet?(b=e(i,u))&&b.value:i[u],!a(h?u:m+(I?".":"#")+u,t.forced)&&void 0!==Z){if(typeof s==typeof Z)continue;r(s,Z)}(t.sham||Z&&Z.sham)&&c(s,"sham",!0),o(i,u,s,t)}}},function(t,l,i){var n=i(8);t.exports=function(t){if(!n(t))throw TypeError(String(t)+" is not an object");return t}},function(t,l){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,l){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,l,i){(function(l){var i=function(t){return t&&t.Math==Math&&t};t.exports=i("object"==typeof globalThis&&globalThis)||i("object"==typeof window&&window)||i("object"==typeof self&&self)||i("object"==typeof l&&l)||function(){return this}()||Function("return this")()}).call(this,i(140))},function(t,l){t.exports=!1},function(t,l,i){var n=i(1),e=i(118),c=i(10),o=i(19),d=i(41),r=i(52),a=i(85),u=function(t,l){this.stopped=t,this.result=l};t.exports=function(t,l,i){var Z,s,b,m,h,I,p,G=i&&i.that,y=!(!i||!i.AS_ENTRIES),g=!(!i||!i.IS_ITERATOR),X=!(!i||!i.INTERRUPTED),V=o(l,G,1+y+X),W=function(t){return Z&&a(Z,"normal",t),new u(!0,t)},C=function(t){return y?(n(t),X?V(t[0],t[1],W):V(t[0],t[1])):X?V(t,W):V(t)};if(g)Z=t;else{if("function"!=typeof(s=r(t)))throw TypeError("Target is not iterable");if(e(s)){for(b=0,m=c(t.length);m>b;b++)if((h=C(t[b]))&&h instanceof u)return h;return new u(!1)}Z=d(t,s)}for(I=Z.next;!(p=I.call(Z)).done;){try{h=C(p.value)}catch(t){a(Z,"throw",t)}if("object"==typeof h&&h&&h instanceof u)return h}return new u(!1)}},function(t,l,i){var n=i(4),e=i(68),c=i(16),o=i(69),d=i(107),r=i(141),a=e("wks"),u=n.Symbol,Z=r?u:u&&u.withoutSetter||o;t.exports=function(t){return c(a,t)&&(d||"string"==typeof a[t])||(d&&c(u,t)?a[t]=u[t]:a[t]=Z("Symbol."+t)),a[t]}},function(t,l){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,l,i){var n=i(2);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,l,i){var n=i(30),e=Math.min;t.exports=function(t){return t>0?e(n(t),9007199254740991):0}},function(t,l,i){var n=i(4),e=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,l){return arguments.length<2?e(n[t]):n[t]&&n[t][l]}},function(t,l,i){"use strict";var n,e,c,o=i(124),d=i(9),r=i(4),a=i(8),u=i(16),Z=i(76),s=i(18),b=i(25),m=i(14).f,h=i(27),I=i(42),p=i(7),G=i(69),y=r.Int8Array,g=y&&y.prototype,X=r.Uint8ClampedArray,V=X&&X.prototype,W=y&&h(y),C=g&&h(g),R=Object.prototype,f=R.isPrototypeOf,S=p("toStringTag"),v=G("TYPED_ARRAY_TAG"),K=G("TYPED_ARRAY_CONSTRUCTOR"),Y=o&&!!I&&"Opera"!==Z(r.opera),J=!1,N={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},L={BigInt64Array:8,BigUint64Array:8},U=function(t){if(!a(t))return!1;var l=Z(t);return u(N,l)||u(L,l)};for(n in N)(c=(e=r[n])&&e.prototype)?s(c,K,e):Y=!1;for(n in L)(c=(e=r[n])&&e.prototype)&&s(c,K,e);if((!Y||"function"!=typeof W||W===Function.prototype)&&(W=function(){throw TypeError("Incorrect invocation")},Y))for(n in N)r[n]&&I(r[n],W);if((!Y||!C||C===R)&&(C=W.prototype,Y))for(n in N)r[n]&&I(r[n].prototype,C);if(Y&&h(V)!==C&&I(V,C),d&&!u(C,S))for(n in J=!0,m(C,S,{get:function(){return a(this)?this[v]:void 0}}),N)r[n]&&s(r[n],v,n);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:Y,TYPED_ARRAY_CONSTRUCTOR:K,TYPED_ARRAY_TAG:J&&v,aTypedArray:function(t){if(U(t))return t;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(t){if(I&&!f.call(W,t))throw TypeError("Target is not a typed array constructor");return t},exportTypedArrayMethod:function(t,l,i){if(d){if(i)for(var n in N){var e=r[n];if(e&&u(e.prototype,t))try{delete e.prototype[t]}catch(t){}}C[t]&&!i||b(C,t,i?l:Y&&g[t]||l)}},exportTypedArrayStaticMethod:function(t,l,i){var n,e;if(d){if(I){if(i)for(n in N)if((e=r[n])&&u(e,t))try{delete e[t]}catch(t){}if(W[t]&&!i)return;try{return b(W,t,i?l:Y&&W[t]||l)}catch(t){}}for(n in N)!(e=r[n])||e[t]&&!i||b(e,t,l)}},isView:function(t){if(!a(t))return!1;var l=Z(t);return"DataView"===l||u(N,l)||u(L,l)},isTypedArray:U,TypedArray:W,TypedArrayPrototype:C}},function(t,l,i){var n=i(22);t.exports=function(t){return Object(n(t))}},function(t,l,i){var n=i(9),e=i(143),c=i(1),o=i(47),d=Object.defineProperty;l.f=n?d:function(t,l,i){if(c(t),l=o(l),c(i),e)try{return d(t,l,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported");return"value"in i&&(t[l]=i.value),t}},function(t,l,i){var n=i(59);t.exports=function(t){if(n(t))throw TypeError("Cannot convert a Symbol value to a string");return String(t)}},function(t,l,i){var n=i(13),e={}.hasOwnProperty;t.exports=Object.hasOwn||function(t,l){return e.call(n(t),l)}},function(t,l,i){var n,e,c,o=i(144),d=i(4),r=i(8),a=i(18),u=i(16),Z=i(83),s=i(84),b=i(70),m=d.WeakMap;if(o||Z.state){var h=Z.state||(Z.state=new m),I=h.get,p=h.has,G=h.set;n=function(t,l){if(p.call(h,t))throw new TypeError("Object already initialized");return l.facade=t,G.call(h,t,l),l},e=function(t){return I.call(h,t)||{}},c=function(t){return p.call(h,t)}}else{var y=s("state");b[y]=!0,n=function(t,l){if(u(t,y))throw new TypeError("Object already initialized");return l.facade=t,a(t,y,l),l},e=function(t){return u(t,y)?t[y]:{}},c=function(t){return u(t,y)}}t.exports={set:n,get:e,has:c,enforce:function(t){return c(t)?e(t):n(t,{})},getterFor:function(t){return function(l){var i;if(!r(l)||(i=e(l)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return i}}}},function(t,l,i){var n=i(9),e=i(14),c=i(38);t.exports=n?function(t,l,i){return e.f(t,l,c(1,i))}:function(t,l,i){return t[l]=i,t}},function(t,l,i){var n=i(3);t.exports=function(t,l,i){if(n(t),void 0===l)return t;switch(i){case 0:return function(){return t.call(l)};case 1:return function(i){return t.call(l,i)};case 2:return function(i,n){return t.call(l,i,n)};case 3:return function(i,n,e){return t.call(l,i,n,e)}}return function(){return t.apply(l,arguments)}}},function(l,i){l.exports=t},function(t,l,i){var n=i(61),e=i(16),c=i(148),o=i(14).f;t.exports=function(t){var l=n.Symbol||(n.Symbol={});e(l,t)||o(l,t,{value:c.f(t)})}},function(t,l){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,l,i){var n=i(19),e=i(67),c=i(13),o=i(10),d=i(73),r=[].push,a=function(t){var l=1==t,i=2==t,a=3==t,u=4==t,Z=6==t,s=7==t,b=5==t||Z;return function(m,h,I,p){for(var G,y,g=c(m),X=e(g),V=n(h,I,3),W=o(X.length),C=0,R=p||d,f=l?R(m,W):i||s?R(m,0):void 0;W>C;C++)if((b||C in X)&&(y=V(G=X[C],C,g),t))if(l)f[C]=y;else if(y)switch(t){case 3:return!0;case 5:return G;case 6:return C;case 2:r.call(f,G)}else switch(t){case 4:return!1;case 7:r.call(f,G)}return Z?-1:a||u?u:f}};t.exports={forEach:a(0),map:a(1),filter:a(2),some:a(3),every:a(4),find:a(5),findIndex:a(6),filterReject:a(7)}},function(t,l,i){var n=i(9),e=i(82),c=i(38),o=i(29),d=i(47),r=i(16),a=i(143),u=Object.getOwnPropertyDescriptor;l.f=n?u:function(t,l){if(t=o(t),l=d(l),a)try{return u(t,l)}catch(t){}if(r(t,l))return c(!e.f.call(t,l),t[l])}},function(t,l,i){var n=i(4),e=i(18),c=i(16),o=i(108),d=i(110),r=i(17),a=r.get,u=r.enforce,Z=String(String).split("String");(t.exports=function(t,l,i,d){var r,a=!!d&&!!d.unsafe,s=!!d&&!!d.enumerable,b=!!d&&!!d.noTargetGet;"function"==typeof i&&("string"!=typeof l||c(i,"name")||e(i,"name",l),(r=u(i)).source||(r.source=Z.join("string"==typeof l?l:""))),t!==n?(a?!b&&t[l]&&(s=!0):delete t[l],s?t[l]=i:e(t,l,i)):s?t[l]=i:o(l,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&a(this).source||d(this)}))},function(t,l,i){var n,e=i(1),c=i(114),o=i(112),d=i(70),r=i(147),a=i(109),u=i(84),Z=u("IE_PROTO"),s=function(){},b=function(t){return"<script>"+t+"<\/script>"},m=function(t){t.write(b("")),t.close();var l=t.parentWindow.Object;return t=null,l},h=function(){try{n=new ActiveXObject("htmlfile")}catch(t){}var t,l;h="undefined"!=typeof document?document.domain&&n?m(n):((l=a("iframe")).style.display="none",r.appendChild(l),l.src=String("javascript:"),(t=l.contentWindow.document).open(),t.write(b("document.F=Object")),t.close(),t.F):m(n);for(var i=o.length;i--;)delete h.prototype[o[i]];return h()};d[Z]=!0,t.exports=Object.create||function(t,l){var i;return null!==t?(s.prototype=e(t),i=new s,s.prototype=null,i[Z]=t):i=h(),void 0===l?i:c(i,l)}},function(t,l,i){var n=i(16),e=i(13),c=i(84),o=i(122),d=c("IE_PROTO"),r=Object.prototype;t.exports=o?Object.getPrototypeOf:function(t){return t=e(t),n(t,d)?t[d]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,l,i){var n=i(1),e=i(3),c=i(7)("species");t.exports=function(t,l){var i,o=n(t).constructor;return void 0===o||null==(i=n(o)[c])?l:e(i)}},function(t,l,i){var n=i(67),e=i(22);t.exports=function(t){return n(e(t))}},function(t,l){var i=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:i)(t)}},function(t,l,i){var n=i(22),e=i(15),c=/"/g;t.exports=function(t,l,i,o){var d=e(n(t)),r="<"+l;return""!==i&&(r+=" "+i+'="'+e(o).replace(c,""")+'"'),r+">"+d+"</"+l+">"}},function(t,l,i){var n=i(2);t.exports=function(t){return n((function(){var l=""[t]('"');return l!==l.toLowerCase()||l.split('"').length>3}))}},function(t,l){t.exports=function(t,l,i){if(!(t instanceof l))throw TypeError("Incorrect "+(i?i+" ":"")+"invocation");return t}},function(t,l,i){var n=i(14).f,e=i(16),c=i(7)("toStringTag");t.exports=function(t,l,i){t&&!e(t=i?t:t.prototype,c)&&n(t,c,{configurable:!0,value:l})}},function(t,l,i){var n=i(7),e=i(26),c=i(14),o=n("unscopables"),d=Array.prototype;null==d[o]&&c.f(d,o,{configurable:!0,value:e(null)}),t.exports=function(t){d[o][t]=!0}},function(t,l,i){var n=i(25);t.exports=function(t,l,i){for(var e in l)n(t,e,l[e],i);return t}},function(t,l){t.exports=function(t){return Map.prototype.entries.call(t)}},function(t,l){t.exports=function(t,l){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:l}}},function(t,l,i){var n=i(11);t.exports=n("navigator","userAgent")||""},function(t,l,i){"use strict";var n=i(2);t.exports=function(t,l){var i=[][t];return!!i&&n((function(){i.call(null,l||function(){throw 1},1)}))}},function(t,l,i){var n=i(1),e=i(52);t.exports=function(t,l){var i=arguments.length<2?e(t):l;if("function"!=typeof i)throw TypeError(String(t)+" is not iterable");return n(i.call(t))}},function(t,l,i){var n=i(1),e=i(153);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,l=!1,i={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(i,[]),l=i instanceof Array}catch(t){}return function(i,c){return n(i),e(c),l?t.call(i,c):i.__proto__=c,i}}():void 0)},function(t,l,i){"use strict";var n=i(0),e=i(4),c=i(9),o=i(136),d=i(12),r=i(89),a=i(33),u=i(38),Z=i(18),s=i(129),b=i(10),m=i(158),h=i(184),I=i(47),p=i(16),G=i(76),y=i(8),g=i(59),X=i(26),V=i(42),W=i(49).f,C=i(185),R=i(23).forEach,f=i(54),S=i(14),v=i(24),K=i(17),Y=i(91),J=K.get,N=K.set,L=S.f,U=v.f,H=Math.round,x=e.RangeError,T=r.ArrayBuffer,k=r.DataView,F=d.NATIVE_ARRAY_BUFFER_VIEWS,B=d.TYPED_ARRAY_CONSTRUCTOR,z=d.TYPED_ARRAY_TAG,w=d.TypedArray,A=d.TypedArrayPrototype,P=d.aTypedArrayConstructor,M=d.isTypedArray,j=function(t,l){for(var i=0,n=l.length,e=new(P(t))(n);n>i;)e[i]=l[i++];return e},Q=function(t,l){L(t,l,{get:function(){return J(this)[l]}})},E=function(t){var l;return t instanceof T||"ArrayBuffer"==(l=G(t))||"SharedArrayBuffer"==l},D=function(t,l){return M(t)&&!g(l)&&l in t&&s(+l)&&l>=0},O=function(t,l){return l=I(l),D(t,l)?u(2,t[l]):U(t,l)},q=function(t,l,i){return l=I(l),!(D(t,l)&&y(i)&&p(i,"value"))||p(i,"get")||p(i,"set")||i.configurable||p(i,"writable")&&!i.writable||p(i,"enumerable")&&!i.enumerable?L(t,l,i):(t[l]=i.value,t)};c?(F||(v.f=O,S.f=q,Q(A,"buffer"),Q(A,"byteOffset"),Q(A,"byteLength"),Q(A,"length")),n({target:"Object",stat:!0,forced:!F},{getOwnPropertyDescriptor:O,defineProperty:q}),t.exports=function(t,l,i){var c=t.match(/\d+$/)[0]/8,d=t+(i?"Clamped":"")+"Array",r="get"+t,u="set"+t,s=e[d],I=s,p=I&&I.prototype,G={},g=function(t,l){L(t,l,{get:function(){return function(t,l){var i=J(t);return i.view[r](l*c+i.byteOffset,!0)}(this,l)},set:function(t){return function(t,l,n){var e=J(t);i&&(n=(n=H(n))<0?0:n>255?255:255&n),e.view[u](l*c+e.byteOffset,n,!0)}(this,l,t)},enumerable:!0})};F?o&&(I=l((function(t,l,i,n){return a(t,I,d),Y(y(l)?E(l)?void 0!==n?new s(l,h(i,c),n):void 0!==i?new s(l,h(i,c)):new s(l):M(l)?j(I,l):C.call(I,l):new s(m(l)),t,I)})),V&&V(I,w),R(W(s),(function(t){t in I||Z(I,t,s[t])})),I.prototype=p):(I=l((function(t,l,i,n){a(t,I,d);var e,o,r,u=0,Z=0;if(y(l)){if(!E(l))return M(l)?j(I,l):C.call(I,l);e=l,Z=h(i,c);var s=l.byteLength;if(void 0===n){if(s%c)throw x("Wrong length");if((o=s-Z)<0)throw x("Wrong length")}else if((o=b(n)*c)+Z>s)throw x("Wrong length");r=o/c}else r=m(l),e=new T(o=r*c);for(N(t,{buffer:e,byteOffset:Z,byteLength:o,length:r,view:new k(e)});u<r;)g(t,u++)})),V&&V(I,w),p=I.prototype=X(A)),p.constructor!==I&&Z(p,"constructor",I),Z(p,B,I),z&&Z(p,z,d),G[d]=I,n({global:!0,forced:I!=s,sham:!F},G),"BYTES_PER_ELEMENT"in I||Z(I,"BYTES_PER_ELEMENT",c),"BYTES_PER_ELEMENT"in p||Z(p,"BYTES_PER_ELEMENT",c),f(d)}):t.exports=function(){}},function(t,l,i){var n=i(127),e=i(137),c=i(68)("metadata"),o=c.store||(c.store=new e),d=function(t,l,i){var e=o.get(t);if(!e){if(!i)return;o.set(t,e=new n)}var c=e.get(l);if(!c){if(!i)return;e.set(l,c=new n)}return c};t.exports={store:o,getMap:d,has:function(t,l,i){var n=d(l,i,!1);return void 0!==n&&n.has(t)},get:function(t,l,i){var n=d(l,i,!1);return void 0===n?void 0:n.get(t)},set:function(t,l,i,n){d(i,n,!0).set(t,l)},keys:function(t,l){var i=d(t,l,!1),n=[];return i&&i.forEach((function(t,l){n.push(l)})),n},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}}},function(t,l,i){"use strict";(function(t){
|
|
1
|
+
!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("react"),require("react-router-dom")):"function"==typeof define&&define.amd?define([,],n):"object"==typeof exports?exports.AsgardeoAuth=n(require("react"),require("react-router-dom")):t.AsgardeoAuth=n(t.React,t.ReactRouter)}(this,(function(t,n){return function(t){var n={};function l(i){if(n[i])return n[i].exports;var e=n[i]={i:i,l:!1,exports:{}};return t[i].call(e.exports,e,e.exports,l),e.l=!0,e.exports}return l.m=t,l.c=n,l.d=function(t,n,i){l.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:i})},l.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},l.t=function(t,n){if(1&n&&(t=l(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(l.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var e in t)l.d(i,e,function(n){return t[n]}.bind(null,e));return i},l.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return l.d(n,"a",n),n},l.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},l.p="",l(l.s=542)}([function(t,n,l){var i=l(4),e=l(24).f,c=l(18),o=l(25),d=l(109),r=l(145),a=l(72);t.exports=function(t,n){var l,u,Z,s,b,m=t.target,h=t.global,I=t.stat;if(l=h?i:I?i[m]||d(m,{}):(i[m]||{}).prototype)for(u in n){if(s=n[u],Z=t.noTargetGet?(b=e(l,u))&&b.value:l[u],!a(h?u:m+(I?".":"#")+u,t.forced)&&void 0!==Z){if(typeof s==typeof Z)continue;r(s,Z)}(t.sham||Z&&Z.sham)&&c(s,"sham",!0),o(l,u,s,t)}}},function(t,n,l){var i=l(8);t.exports=function(t){if(!i(t))throw TypeError(String(t)+" is not an object");return t}},function(t,n){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,n,l){(function(n){var l=function(t){return t&&t.Math==Math&&t};t.exports=l("object"==typeof globalThis&&globalThis)||l("object"==typeof window&&window)||l("object"==typeof self&&self)||l("object"==typeof n&&n)||function(){return this}()||Function("return this")()}).call(this,l(106))},function(t,n){t.exports=!1},function(t,n,l){var i=l(1),e=l(119),c=l(10),o=l(19),d=l(41),r=l(52),a=l(85),u=function(t,n){this.stopped=t,this.result=n};t.exports=function(t,n,l){var Z,s,b,m,h,I,p,G=l&&l.that,y=!(!l||!l.AS_ENTRIES),X=!(!l||!l.IS_ITERATOR),g=!(!l||!l.INTERRUPTED),V=o(n,G,1+y+g),W=function(t){return Z&&a(Z,"normal",t),new u(!0,t)},R=function(t){return y?(i(t),g?V(t[0],t[1],W):V(t[0],t[1])):g?V(t,W):V(t)};if(X)Z=t;else{if("function"!=typeof(s=r(t)))throw TypeError("Target is not iterable");if(e(s)){for(b=0,m=c(t.length);m>b;b++)if((h=R(t[b]))&&h instanceof u)return h;return new u(!1)}Z=d(t,s)}for(I=Z.next;!(p=I.call(Z)).done;){try{h=R(p.value)}catch(t){a(Z,"throw",t)}if("object"==typeof h&&h&&h instanceof u)return h}return new u(!1)}},function(t,n,l){var i=l(4),e=l(68),c=l(16),o=l(69),d=l(108),r=l(141),a=e("wks"),u=i.Symbol,Z=r?u:u&&u.withoutSetter||o;t.exports=function(t){return c(a,t)&&(d||"string"==typeof a[t])||(d&&c(u,t)?a[t]=u[t]:a[t]=Z("Symbol."+t)),a[t]}},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n,l){var i=l(2);t.exports=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,n,l){var i=l(30),e=Math.min;t.exports=function(t){return t>0?e(i(t),9007199254740991):0}},function(t,n,l){var i=l(4),e=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,n){return arguments.length<2?e(i[t]):i[t]&&i[t][n]}},function(t,n,l){"use strict";var i,e,c,o=l(125),d=l(9),r=l(4),a=l(8),u=l(16),Z=l(76),s=l(18),b=l(25),m=l(14).f,h=l(27),I=l(42),p=l(7),G=l(69),y=r.Int8Array,X=y&&y.prototype,g=r.Uint8ClampedArray,V=g&&g.prototype,W=y&&h(y),R=X&&h(X),C=Object.prototype,f=C.isPrototypeOf,S=p("toStringTag"),v=G("TYPED_ARRAY_TAG"),K=G("TYPED_ARRAY_CONSTRUCTOR"),Y=o&&!!I&&"Opera"!==Z(r.opera),J=!1,N={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},L={BigInt64Array:8,BigUint64Array:8},H=function(t){if(!a(t))return!1;var n=Z(t);return u(N,n)||u(L,n)};for(i in N)(c=(e=r[i])&&e.prototype)?s(c,K,e):Y=!1;for(i in L)(c=(e=r[i])&&e.prototype)&&s(c,K,e);if((!Y||"function"!=typeof W||W===Function.prototype)&&(W=function(){throw TypeError("Incorrect invocation")},Y))for(i in N)r[i]&&I(r[i],W);if((!Y||!R||R===C)&&(R=W.prototype,Y))for(i in N)r[i]&&I(r[i].prototype,R);if(Y&&h(V)!==R&&I(V,R),d&&!u(R,S))for(i in J=!0,m(R,S,{get:function(){return a(this)?this[v]:void 0}}),N)r[i]&&s(r[i],v,i);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:Y,TYPED_ARRAY_CONSTRUCTOR:K,TYPED_ARRAY_TAG:J&&v,aTypedArray:function(t){if(H(t))return t;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(t){if(I&&!f.call(W,t))throw TypeError("Target is not a typed array constructor");return t},exportTypedArrayMethod:function(t,n,l){if(d){if(l)for(var i in N){var e=r[i];if(e&&u(e.prototype,t))try{delete e.prototype[t]}catch(t){}}R[t]&&!l||b(R,t,l?n:Y&&X[t]||n)}},exportTypedArrayStaticMethod:function(t,n,l){var i,e;if(d){if(I){if(l)for(i in N)if((e=r[i])&&u(e,t))try{delete e[t]}catch(t){}if(W[t]&&!l)return;try{return b(W,t,l?n:Y&&W[t]||n)}catch(t){}}for(i in N)!(e=r[i])||e[t]&&!l||b(e,t,n)}},isView:function(t){if(!a(t))return!1;var n=Z(t);return"DataView"===n||u(N,n)||u(L,n)},isTypedArray:H,TypedArray:W,TypedArrayPrototype:R}},function(t,n,l){var i=l(22);t.exports=function(t){return Object(i(t))}},function(t,n,l){var i=l(9),e=l(143),c=l(1),o=l(47),d=Object.defineProperty;n.f=i?d:function(t,n,l){if(c(t),n=o(n),c(l),e)try{return d(t,n,l)}catch(t){}if("get"in l||"set"in l)throw TypeError("Accessors not supported");return"value"in l&&(t[n]=l.value),t}},function(t,n,l){var i=l(59);t.exports=function(t){if(i(t))throw TypeError("Cannot convert a Symbol value to a string");return String(t)}},function(t,n,l){var i=l(13),e={}.hasOwnProperty;t.exports=Object.hasOwn||function(t,n){return e.call(i(t),n)}},function(t,n,l){var i,e,c,o=l(144),d=l(4),r=l(8),a=l(18),u=l(16),Z=l(83),s=l(84),b=l(70),m=d.WeakMap;if(o||Z.state){var h=Z.state||(Z.state=new m),I=h.get,p=h.has,G=h.set;i=function(t,n){if(p.call(h,t))throw new TypeError("Object already initialized");return n.facade=t,G.call(h,t,n),n},e=function(t){return I.call(h,t)||{}},c=function(t){return p.call(h,t)}}else{var y=s("state");b[y]=!0,i=function(t,n){if(u(t,y))throw new TypeError("Object already initialized");return n.facade=t,a(t,y,n),n},e=function(t){return u(t,y)?t[y]:{}},c=function(t){return u(t,y)}}t.exports={set:i,get:e,has:c,enforce:function(t){return c(t)?e(t):i(t,{})},getterFor:function(t){return function(n){var l;if(!r(n)||(l=e(n)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return l}}}},function(t,n,l){var i=l(9),e=l(14),c=l(38);t.exports=i?function(t,n,l){return e.f(t,n,c(1,l))}:function(t,n,l){return t[n]=l,t}},function(t,n,l){var i=l(3);t.exports=function(t,n,l){if(i(t),void 0===n)return t;switch(l){case 0:return function(){return t.call(n)};case 1:return function(l){return t.call(n,l)};case 2:return function(l,i){return t.call(n,l,i)};case 3:return function(l,i,e){return t.call(n,l,i,e)}}return function(){return t.apply(n,arguments)}}},function(n,l){n.exports=t},function(t,n,l){var i=l(61),e=l(16),c=l(148),o=l(14).f;t.exports=function(t){var n=i.Symbol||(i.Symbol={});e(n,t)||o(n,t,{value:c.f(t)})}},function(t,n){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,n,l){var i=l(19),e=l(67),c=l(13),o=l(10),d=l(73),r=[].push,a=function(t){var n=1==t,l=2==t,a=3==t,u=4==t,Z=6==t,s=7==t,b=5==t||Z;return function(m,h,I,p){for(var G,y,X=c(m),g=e(X),V=i(h,I,3),W=o(g.length),R=0,C=p||d,f=n?C(m,W):l||s?C(m,0):void 0;W>R;R++)if((b||R in g)&&(y=V(G=g[R],R,X),t))if(n)f[R]=y;else if(y)switch(t){case 3:return!0;case 5:return G;case 6:return R;case 2:r.call(f,G)}else switch(t){case 4:return!1;case 7:r.call(f,G)}return Z?-1:a||u?u:f}};t.exports={forEach:a(0),map:a(1),filter:a(2),some:a(3),every:a(4),find:a(5),findIndex:a(6),filterReject:a(7)}},function(t,n,l){var i=l(9),e=l(82),c=l(38),o=l(29),d=l(47),r=l(16),a=l(143),u=Object.getOwnPropertyDescriptor;n.f=i?u:function(t,n){if(t=o(t),n=d(n),a)try{return u(t,n)}catch(t){}if(r(t,n))return c(!e.f.call(t,n),t[n])}},function(t,n,l){var i=l(4),e=l(18),c=l(16),o=l(109),d=l(111),r=l(17),a=r.get,u=r.enforce,Z=String(String).split("String");(t.exports=function(t,n,l,d){var r,a=!!d&&!!d.unsafe,s=!!d&&!!d.enumerable,b=!!d&&!!d.noTargetGet;"function"==typeof l&&("string"!=typeof n||c(l,"name")||e(l,"name",n),(r=u(l)).source||(r.source=Z.join("string"==typeof n?n:""))),t!==i?(a?!b&&t[n]&&(s=!0):delete t[n],s?t[n]=l:e(t,n,l)):s?t[n]=l:o(n,l)})(Function.prototype,"toString",(function(){return"function"==typeof this&&a(this).source||d(this)}))},function(t,n,l){var i,e=l(1),c=l(115),o=l(113),d=l(70),r=l(147),a=l(110),u=l(84),Z=u("IE_PROTO"),s=function(){},b=function(t){return"<script>"+t+"<\/script>"},m=function(t){t.write(b("")),t.close();var n=t.parentWindow.Object;return t=null,n},h=function(){try{i=new ActiveXObject("htmlfile")}catch(t){}var t,n;h="undefined"!=typeof document?document.domain&&i?m(i):((n=a("iframe")).style.display="none",r.appendChild(n),n.src=String("javascript:"),(t=n.contentWindow.document).open(),t.write(b("document.F=Object")),t.close(),t.F):m(i);for(var l=o.length;l--;)delete h.prototype[o[l]];return h()};d[Z]=!0,t.exports=Object.create||function(t,n){var l;return null!==t?(s.prototype=e(t),l=new s,s.prototype=null,l[Z]=t):l=h(),void 0===n?l:c(l,n)}},function(t,n,l){var i=l(16),e=l(13),c=l(84),o=l(123),d=c("IE_PROTO"),r=Object.prototype;t.exports=o?Object.getPrototypeOf:function(t){return t=e(t),i(t,d)?t[d]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,n,l){var i=l(1),e=l(3),c=l(7)("species");t.exports=function(t,n){var l,o=i(t).constructor;return void 0===o||null==(l=i(o)[c])?n:e(l)}},function(t,n,l){var i=l(67),e=l(22);t.exports=function(t){return i(e(t))}},function(t,n){var l=Math.ceil,i=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?i:l)(t)}},function(t,n,l){var i=l(22),e=l(15),c=/"/g;t.exports=function(t,n,l,o){var d=e(i(t)),r="<"+n;return""!==l&&(r+=" "+l+'="'+e(o).replace(c,""")+'"'),r+">"+d+"</"+n+">"}},function(t,n,l){var i=l(2);t.exports=function(t){return i((function(){var n=""[t]('"');return n!==n.toLowerCase()||n.split('"').length>3}))}},function(t,n){t.exports=function(t,n,l){if(!(t instanceof n))throw TypeError("Incorrect "+(l?l+" ":"")+"invocation");return t}},function(t,n,l){var i=l(14).f,e=l(16),c=l(7)("toStringTag");t.exports=function(t,n,l){t&&!e(t=l?t:t.prototype,c)&&i(t,c,{configurable:!0,value:n})}},function(t,n,l){var i=l(7),e=l(26),c=l(14),o=i("unscopables"),d=Array.prototype;null==d[o]&&c.f(d,o,{configurable:!0,value:e(null)}),t.exports=function(t){d[o][t]=!0}},function(t,n,l){var i=l(25);t.exports=function(t,n,l){for(var e in n)i(t,e,n[e],l);return t}},function(t,n){t.exports=function(t){return Map.prototype.entries.call(t)}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,l){var i=l(11);t.exports=i("navigator","userAgent")||""},function(t,n,l){"use strict";var i=l(2);t.exports=function(t,n){var l=[][t];return!!l&&i((function(){l.call(null,n||function(){throw 1},1)}))}},function(t,n,l){var i=l(1),e=l(52);t.exports=function(t,n){var l=arguments.length<2?e(t):n;if("function"!=typeof l)throw TypeError(String(t)+" is not iterable");return i(l.call(t))}},function(t,n,l){var i=l(1),e=l(153);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,n=!1,l={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(l,[]),n=l instanceof Array}catch(t){}return function(l,c){return i(l),e(c),n?t.call(l,c):l.__proto__=c,l}}():void 0)},function(t,n,l){"use strict";var i=l(0),e=l(4),c=l(9),o=l(137),d=l(12),r=l(89),a=l(33),u=l(38),Z=l(18),s=l(130),b=l(10),m=l(158),h=l(184),I=l(47),p=l(16),G=l(76),y=l(8),X=l(59),g=l(26),V=l(42),W=l(49).f,R=l(185),C=l(23).forEach,f=l(54),S=l(14),v=l(24),K=l(17),Y=l(91),J=K.get,N=K.set,L=S.f,H=v.f,U=Math.round,x=e.RangeError,T=r.ArrayBuffer,k=r.DataView,F=d.NATIVE_ARRAY_BUFFER_VIEWS,B=d.TYPED_ARRAY_CONSTRUCTOR,z=d.TYPED_ARRAY_TAG,w=d.TypedArray,A=d.TypedArrayPrototype,M=d.aTypedArrayConstructor,P=d.isTypedArray,Q=function(t,n){for(var l=0,i=n.length,e=new(M(t))(i);i>l;)e[l]=n[l++];return e},j=function(t,n){L(t,n,{get:function(){return J(this)[n]}})},E=function(t){var n;return t instanceof T||"ArrayBuffer"==(n=G(t))||"SharedArrayBuffer"==n},D=function(t,n){return P(t)&&!X(n)&&n in t&&s(+n)&&n>=0},O=function(t,n){return n=I(n),D(t,n)?u(2,t[n]):H(t,n)},q=function(t,n,l){return n=I(n),!(D(t,n)&&y(l)&&p(l,"value"))||p(l,"get")||p(l,"set")||l.configurable||p(l,"writable")&&!l.writable||p(l,"enumerable")&&!l.enumerable?L(t,n,l):(t[n]=l.value,t)};c?(F||(v.f=O,S.f=q,j(A,"buffer"),j(A,"byteOffset"),j(A,"byteLength"),j(A,"length")),i({target:"Object",stat:!0,forced:!F},{getOwnPropertyDescriptor:O,defineProperty:q}),t.exports=function(t,n,l){var c=t.match(/\d+$/)[0]/8,d=t+(l?"Clamped":"")+"Array",r="get"+t,u="set"+t,s=e[d],I=s,p=I&&I.prototype,G={},X=function(t,n){L(t,n,{get:function(){return function(t,n){var l=J(t);return l.view[r](n*c+l.byteOffset,!0)}(this,n)},set:function(t){return function(t,n,i){var e=J(t);l&&(i=(i=U(i))<0?0:i>255?255:255&i),e.view[u](n*c+e.byteOffset,i,!0)}(this,n,t)},enumerable:!0})};F?o&&(I=n((function(t,n,l,i){return a(t,I,d),Y(y(n)?E(n)?void 0!==i?new s(n,h(l,c),i):void 0!==l?new s(n,h(l,c)):new s(n):P(n)?Q(I,n):R.call(I,n):new s(m(n)),t,I)})),V&&V(I,w),C(W(s),(function(t){t in I||Z(I,t,s[t])})),I.prototype=p):(I=n((function(t,n,l,i){a(t,I,d);var e,o,r,u=0,Z=0;if(y(n)){if(!E(n))return P(n)?Q(I,n):R.call(I,n);e=n,Z=h(l,c);var s=n.byteLength;if(void 0===i){if(s%c)throw x("Wrong length");if((o=s-Z)<0)throw x("Wrong length")}else if((o=b(i)*c)+Z>s)throw x("Wrong length");r=o/c}else r=m(n),e=new T(o=r*c);for(N(t,{buffer:e,byteOffset:Z,byteLength:o,length:r,view:new k(e)});u<r;)X(t,u++)})),V&&V(I,w),p=I.prototype=g(A)),p.constructor!==I&&Z(p,"constructor",I),Z(p,B,I),z&&Z(p,z,d),G[d]=I,i({global:!0,forced:I!=s,sham:!F},G),"BYTES_PER_ELEMENT"in I||Z(I,"BYTES_PER_ELEMENT",c),"BYTES_PER_ELEMENT"in p||Z(p,"BYTES_PER_ELEMENT",c),f(d)}):t.exports=function(){}},function(t,n,l){var i=l(128),e=l(138),c=l(68)("metadata"),o=c.store||(c.store=new e),d=function(t,n,l){var e=o.get(t);if(!e){if(!l)return;o.set(t,e=new i)}var c=e.get(n);if(!c){if(!l)return;e.set(n,c=new i)}return c};t.exports={store:o,getMap:d,has:function(t,n,l){var i=d(n,l,!1);return void 0!==i&&i.has(t)},get:function(t,n,l){var i=d(n,l,!1);return void 0===i?void 0:i.get(t)},set:function(t,n,l,i){d(l,i,!0).set(t,n)},keys:function(t,n){var l=d(t,n,!1),i=[];return l&&l.forEach((function(t,n){i.push(n)})),i},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}}},function(t,n,l){"use strict";(function(t){
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -13,7 +13,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
15
|
***************************************************************************** */
|
|
16
|
-
function n(t,l,i,n){return new(i||(i=Promise))((function(e,c){function o(t){try{r(n.next(t))}catch(t){c(t)}}function d(t){try{r(n.throw(t))}catch(t){c(t)}}function r(t){var l;t.done?e(t.value):(l=t.value,l instanceof i?l:new i((function(t){t(l)}))).then(o,d)}r((n=n.apply(t,l||[])).next())}))}i.d(l,"a",(function(){return Kl})),i.d(l,"b",(function(){return Hn})),i.d(l,"c",(function(){return _n})),i.d(l,"d",(function(){return Cl})),i.d(l,"e",(function(){return Rl})),i.d(l,"f",(function(){return Tn})),i.d(l,"g",(function(){return Ll})),i.d(l,"h",(function(){return vl})),i.d(l,"i",(function(){return Sl})),i.d(l,"j",(function(){return pl})),i.d(l,"k",(function(){return Wl})),i.d(l,"l",(function(){return Yl})),i.d(l,"m",(function(){return Nl})),i.d(l,"n",(function(){return Jl})),i.d(l,"o",(function(){return zn})),i.d(l,"p",(function(){return xn})),i.d(l,"q",(function(){return fl})),i.d(l,"r",(function(){return Xl})),i.d(l,"s",(function(){return Vl})),i.d(l,"t",(function(){return $n}));var e=void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},c=[],o=[],d="undefined"!=typeof Uint8Array?Uint8Array:Array,r=!1;function a(){r=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=0,i=t.length;l<i;++l)c[l]=t[l],o[t.charCodeAt(l)]=l;o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63}function u(t,l,i){for(var n,e,o=[],d=l;d<i;d+=3)n=(t[d]<<16)+(t[d+1]<<8)+t[d+2],o.push(c[(e=n)>>18&63]+c[e>>12&63]+c[e>>6&63]+c[63&e]);return o.join("")}function Z(t){var l;r||a();for(var i=t.length,n=i%3,e="",o=[],d=16383,Z=0,s=i-n;Z<s;Z+=d)o.push(u(t,Z,Z+d>s?s:Z+d));return 1===n?(l=t[i-1],e+=c[l>>2],e+=c[l<<4&63],e+="=="):2===n&&(l=(t[i-2]<<8)+t[i-1],e+=c[l>>10],e+=c[l>>4&63],e+=c[l<<2&63],e+="="),o.push(e),o.join("")}function s(t,l,i,n,e){var c,o,d=8*e-n-1,r=(1<<d)-1,a=r>>1,u=-7,Z=i?e-1:0,s=i?-1:1,b=t[l+Z];for(Z+=s,c=b&(1<<-u)-1,b>>=-u,u+=d;u>0;c=256*c+t[l+Z],Z+=s,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=n;u>0;o=256*o+t[l+Z],Z+=s,u-=8);if(0===c)c=1-a;else{if(c===r)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,n),c-=a}return(b?-1:1)*o*Math.pow(2,c-n)}function b(t,l,i,n,e,c){var o,d,r,a=8*c-e-1,u=(1<<a)-1,Z=u>>1,s=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,b=n?0:c-1,m=n?1:-1,h=l<0||0===l&&1/l<0?1:0;for(l=Math.abs(l),isNaN(l)||l===1/0?(d=isNaN(l)?1:0,o=u):(o=Math.floor(Math.log(l)/Math.LN2),l*(r=Math.pow(2,-o))<1&&(o--,r*=2),(l+=o+Z>=1?s/r:s*Math.pow(2,1-Z))*r>=2&&(o++,r/=2),o+Z>=u?(d=0,o=u):o+Z>=1?(d=(l*r-1)*Math.pow(2,e),o+=Z):(d=l*Math.pow(2,Z-1)*Math.pow(2,e),o=0));e>=8;t[i+b]=255&d,b+=m,d/=256,e-=8);for(o=o<<e|d,a+=e;a>0;t[i+b]=255&o,b+=m,o/=256,a-=8);t[i+b-m]|=128*h}var m={}.toString,h=Array.isArray||function(t){return"[object Array]"==m.call(t)};function I(){return G.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function p(t,l){if(I()<l)throw new RangeError("Invalid typed array length");return G.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(l)).__proto__=G.prototype:(null===t&&(t=new G(l)),t.length=l),t}function G(t,l,i){if(!(G.TYPED_ARRAY_SUPPORT||this instanceof G))return new G(t,l,i);if("number"==typeof t){if("string"==typeof l)throw new Error("If encoding is specified then the first argument must be a string");return X(this,t)}return y(this,t,l,i)}function y(t,l,i,n){if("number"==typeof l)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&l instanceof ArrayBuffer?function(t,l,i,n){if(l.byteLength,i<0||l.byteLength<i)throw new RangeError("'offset' is out of bounds");if(l.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");return l=void 0===i&&void 0===n?new Uint8Array(l):void 0===n?new Uint8Array(l,i):new Uint8Array(l,i,n),G.TYPED_ARRAY_SUPPORT?(t=l).__proto__=G.prototype:t=V(t,l),t}(t,l,i,n):"string"==typeof l?function(t,l,i){if("string"==typeof i&&""!==i||(i="utf8"),!G.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|R(l,i),e=(t=p(t,n)).write(l,i);return e!==n&&(t=t.slice(0,e)),t}(t,l,i):function(t,l){if(C(l)){var i=0|W(l.length);return 0===(t=p(t,i)).length||l.copy(t,0,0,i),t}if(l){if("undefined"!=typeof ArrayBuffer&&l.buffer instanceof ArrayBuffer||"length"in l)return"number"!=typeof l.length||(n=l.length)!=n?p(t,0):V(t,l);if("Buffer"===l.type&&h(l.data))return V(t,l.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,l)}function g(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function X(t,l){if(g(l),t=p(t,l<0?0:0|W(l)),!G.TYPED_ARRAY_SUPPORT)for(var i=0;i<l;++i)t[i]=0;return t}function V(t,l){var i=l.length<0?0:0|W(l.length);t=p(t,i);for(var n=0;n<i;n+=1)t[n]=255&l[n];return t}function W(t){if(t>=I())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+I().toString(16)+" bytes");return 0|t}function C(t){return!(null==t||!t._isBuffer)}function R(t,l){if(C(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var n=!1;;)switch(l){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return _(t).length;default:if(n)return q(t).length;l=(""+l).toLowerCase(),n=!0}}function f(t,l,i){var n=!1;if((void 0===l||l<0)&&(l=0),l>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(l>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return B(this,l,i);case"utf8":case"utf-8":return T(this,l,i);case"ascii":return k(this,l,i);case"latin1":case"binary":return F(this,l,i);case"base64":return x(this,l,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return z(this,l,i);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function S(t,l,i){var n=t[l];t[l]=t[i],t[i]=n}function v(t,l,i,n,e){if(0===t.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=e?0:t.length-1),i<0&&(i=t.length+i),i>=t.length){if(e)return-1;i=t.length-1}else if(i<0){if(!e)return-1;i=0}if("string"==typeof l&&(l=G.from(l,n)),C(l))return 0===l.length?-1:K(t,l,i,n,e);if("number"==typeof l)return l&=255,G.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(t,l,i):Uint8Array.prototype.lastIndexOf.call(t,l,i):K(t,[l],i,n,e);throw new TypeError("val must be string, number or Buffer")}function K(t,l,i,n,e){var c,o=1,d=t.length,r=l.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||l.length<2)return-1;o=2,d/=2,r/=2,i/=2}function a(t,l){return 1===o?t[l]:t.readUInt16BE(l*o)}if(e){var u=-1;for(c=i;c<d;c++)if(a(t,c)===a(l,-1===u?0:c-u)){if(-1===u&&(u=c),c-u+1===r)return u*o}else-1!==u&&(c-=c-u),u=-1}else for(i+r>d&&(i=d-r),c=i;c>=0;c--){for(var Z=!0,s=0;s<r;s++)if(a(t,c+s)!==a(l,s)){Z=!1;break}if(Z)return c}return-1}function Y(t,l,i,n){i=Number(i)||0;var e=t.length-i;n?(n=Number(n))>e&&(n=e):n=e;var c=l.length;if(c%2!=0)throw new TypeError("Invalid hex string");n>c/2&&(n=c/2);for(var o=0;o<n;++o){var d=parseInt(l.substr(2*o,2),16);if(isNaN(d))return o;t[i+o]=d}return o}function J(t,l,i,n){return $(q(l,t.length-i),t,i,n)}function N(t,l,i,n){return $(function(t){for(var l=[],i=0;i<t.length;++i)l.push(255&t.charCodeAt(i));return l}(l),t,i,n)}function L(t,l,i,n){return N(t,l,i,n)}function U(t,l,i,n){return $(_(l),t,i,n)}function H(t,l,i,n){return $(function(t,l){for(var i,n,e,c=[],o=0;o<t.length&&!((l-=2)<0);++o)n=(i=t.charCodeAt(o))>>8,e=i%256,c.push(e),c.push(n);return c}(l,t.length-i),t,i,n)}function x(t,l,i){return 0===l&&i===t.length?Z(t):Z(t.slice(l,i))}function T(t,l,i){i=Math.min(t.length,i);for(var n=[],e=l;e<i;){var c,o,d,r,a=t[e],u=null,Z=a>239?4:a>223?3:a>191?2:1;if(e+Z<=i)switch(Z){case 1:a<128&&(u=a);break;case 2:128==(192&(c=t[e+1]))&&(r=(31&a)<<6|63&c)>127&&(u=r);break;case 3:c=t[e+1],o=t[e+2],128==(192&c)&&128==(192&o)&&(r=(15&a)<<12|(63&c)<<6|63&o)>2047&&(r<55296||r>57343)&&(u=r);break;case 4:c=t[e+1],o=t[e+2],d=t[e+3],128==(192&c)&&128==(192&o)&&128==(192&d)&&(r=(15&a)<<18|(63&c)<<12|(63&o)<<6|63&d)>65535&&r<1114112&&(u=r)}null===u?(u=65533,Z=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),e+=Z}return function(t){var l=t.length;if(l<=4096)return String.fromCharCode.apply(String,t);for(var i="",n=0;n<l;)i+=String.fromCharCode.apply(String,t.slice(n,n+=4096));return i}(n)}function k(t,l,i){var n="";i=Math.min(t.length,i);for(var e=l;e<i;++e)n+=String.fromCharCode(127&t[e]);return n}function F(t,l,i){var n="";i=Math.min(t.length,i);for(var e=l;e<i;++e)n+=String.fromCharCode(t[e]);return n}function B(t,l,i){var n=t.length;(!l||l<0)&&(l=0),(!i||i<0||i>n)&&(i=n);for(var e="",c=l;c<i;++c)e+=O(t[c]);return e}function z(t,l,i){for(var n=t.slice(l,i),e="",c=0;c<n.length;c+=2)e+=String.fromCharCode(n[c]+256*n[c+1]);return e}function w(t,l,i){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+l>i)throw new RangeError("Trying to access beyond buffer length")}function A(t,l,i,n,e,c){if(!C(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(l>e||l<c)throw new RangeError('"value" argument is out of bounds');if(i+n>t.length)throw new RangeError("Index out of range")}function P(t,l,i,n){l<0&&(l=65535+l+1);for(var e=0,c=Math.min(t.length-i,2);e<c;++e)t[i+e]=(l&255<<8*(n?e:1-e))>>>8*(n?e:1-e)}function M(t,l,i,n){l<0&&(l=4294967295+l+1);for(var e=0,c=Math.min(t.length-i,4);e<c;++e)t[i+e]=l>>>8*(n?e:3-e)&255}function j(t,l,i,n,e,c){if(i+n>t.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function Q(t,l,i,n,e){return e||j(t,0,i,4),b(t,l,i,n,23,4),i+4}function E(t,l,i,n,e){return e||j(t,0,i,8),b(t,l,i,n,52,8),i+8}G.TYPED_ARRAY_SUPPORT=void 0===e.TYPED_ARRAY_SUPPORT||e.TYPED_ARRAY_SUPPORT,G.poolSize=8192,G._augment=function(t){return t.__proto__=G.prototype,t},G.from=function(t,l,i){return y(null,t,l,i)},G.TYPED_ARRAY_SUPPORT&&(G.prototype.__proto__=Uint8Array.prototype,G.__proto__=Uint8Array),G.alloc=function(t,l,i){return function(t,l,i,n){return g(l),l<=0?p(t,l):void 0!==i?"string"==typeof n?p(t,l).fill(i,n):p(t,l).fill(i):p(t,l)}(null,t,l,i)},G.allocUnsafe=function(t){return X(null,t)},G.allocUnsafeSlow=function(t){return X(null,t)},G.isBuffer=function(t){return null!=t&&(!!t._isBuffer||tt(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&tt(t.slice(0,0))}(t))},G.compare=function(t,l){if(!C(t)||!C(l))throw new TypeError("Arguments must be Buffers");if(t===l)return 0;for(var i=t.length,n=l.length,e=0,c=Math.min(i,n);e<c;++e)if(t[e]!==l[e]){i=t[e],n=l[e];break}return i<n?-1:n<i?1:0},G.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},G.concat=function(t,l){if(!h(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return G.alloc(0);var i;if(void 0===l)for(l=0,i=0;i<t.length;++i)l+=t[i].length;var n=G.allocUnsafe(l),e=0;for(i=0;i<t.length;++i){var c=t[i];if(!C(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(n,e),e+=c.length}return n},G.byteLength=R,G.prototype._isBuffer=!0,G.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var l=0;l<t;l+=2)S(this,l,l+1);return this},G.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var l=0;l<t;l+=4)S(this,l,l+3),S(this,l+1,l+2);return this},G.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var l=0;l<t;l+=8)S(this,l,l+7),S(this,l+1,l+6),S(this,l+2,l+5),S(this,l+3,l+4);return this},G.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?T(this,0,t):f.apply(this,arguments)},G.prototype.equals=function(t){if(!C(t))throw new TypeError("Argument must be a Buffer");return this===t||0===G.compare(this,t)},G.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},G.prototype.compare=function(t,l,i,n,e){if(!C(t))throw new TypeError("Argument must be a Buffer");if(void 0===l&&(l=0),void 0===i&&(i=t?t.length:0),void 0===n&&(n=0),void 0===e&&(e=this.length),l<0||i>t.length||n<0||e>this.length)throw new RangeError("out of range index");if(n>=e&&l>=i)return 0;if(n>=e)return-1;if(l>=i)return 1;if(this===t)return 0;for(var c=(e>>>=0)-(n>>>=0),o=(i>>>=0)-(l>>>=0),d=Math.min(c,o),r=this.slice(n,e),a=t.slice(l,i),u=0;u<d;++u)if(r[u]!==a[u]){c=r[u],o=a[u];break}return c<o?-1:o<c?1:0},G.prototype.includes=function(t,l,i){return-1!==this.indexOf(t,l,i)},G.prototype.indexOf=function(t,l,i){return v(this,t,l,i,!0)},G.prototype.lastIndexOf=function(t,l,i){return v(this,t,l,i,!1)},G.prototype.write=function(t,l,i,n){if(void 0===l)n="utf8",i=this.length,l=0;else if(void 0===i&&"string"==typeof l)n=l,i=this.length,l=0;else{if(!isFinite(l))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");l|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var e=this.length-l;if((void 0===i||i>e)&&(i=e),t.length>0&&(i<0||l<0)||l>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var c=!1;;)switch(n){case"hex":return Y(this,t,l,i);case"utf8":case"utf-8":return J(this,t,l,i);case"ascii":return N(this,t,l,i);case"latin1":case"binary":return L(this,t,l,i);case"base64":return U(this,t,l,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return H(this,t,l,i);default:if(c)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),c=!0}},G.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},G.prototype.slice=function(t,l){var i,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(l=void 0===l?n:~~l)<0?(l+=n)<0&&(l=0):l>n&&(l=n),l<t&&(l=t),G.TYPED_ARRAY_SUPPORT)(i=this.subarray(t,l)).__proto__=G.prototype;else{var e=l-t;i=new G(e,void 0);for(var c=0;c<e;++c)i[c]=this[c+t]}return i},G.prototype.readUIntLE=function(t,l,i){t|=0,l|=0,i||w(t,l,this.length);for(var n=this[t],e=1,c=0;++c<l&&(e*=256);)n+=this[t+c]*e;return n},G.prototype.readUIntBE=function(t,l,i){t|=0,l|=0,i||w(t,l,this.length);for(var n=this[t+--l],e=1;l>0&&(e*=256);)n+=this[t+--l]*e;return n},G.prototype.readUInt8=function(t,l){return l||w(t,1,this.length),this[t]},G.prototype.readUInt16LE=function(t,l){return l||w(t,2,this.length),this[t]|this[t+1]<<8},G.prototype.readUInt16BE=function(t,l){return l||w(t,2,this.length),this[t]<<8|this[t+1]},G.prototype.readUInt32LE=function(t,l){return l||w(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},G.prototype.readUInt32BE=function(t,l){return l||w(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},G.prototype.readIntLE=function(t,l,i){t|=0,l|=0,i||w(t,l,this.length);for(var n=this[t],e=1,c=0;++c<l&&(e*=256);)n+=this[t+c]*e;return n>=(e*=128)&&(n-=Math.pow(2,8*l)),n},G.prototype.readIntBE=function(t,l,i){t|=0,l|=0,i||w(t,l,this.length);for(var n=l,e=1,c=this[t+--n];n>0&&(e*=256);)c+=this[t+--n]*e;return c>=(e*=128)&&(c-=Math.pow(2,8*l)),c},G.prototype.readInt8=function(t,l){return l||w(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},G.prototype.readInt16LE=function(t,l){l||w(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},G.prototype.readInt16BE=function(t,l){l||w(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},G.prototype.readInt32LE=function(t,l){return l||w(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},G.prototype.readInt32BE=function(t,l){return l||w(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},G.prototype.readFloatLE=function(t,l){return l||w(t,4,this.length),s(this,t,!0,23,4)},G.prototype.readFloatBE=function(t,l){return l||w(t,4,this.length),s(this,t,!1,23,4)},G.prototype.readDoubleLE=function(t,l){return l||w(t,8,this.length),s(this,t,!0,52,8)},G.prototype.readDoubleBE=function(t,l){return l||w(t,8,this.length),s(this,t,!1,52,8)},G.prototype.writeUIntLE=function(t,l,i,n){t=+t,l|=0,i|=0,n||A(this,t,l,i,Math.pow(2,8*i)-1,0);var e=1,c=0;for(this[l]=255&t;++c<i&&(e*=256);)this[l+c]=t/e&255;return l+i},G.prototype.writeUIntBE=function(t,l,i,n){t=+t,l|=0,i|=0,n||A(this,t,l,i,Math.pow(2,8*i)-1,0);var e=i-1,c=1;for(this[l+e]=255&t;--e>=0&&(c*=256);)this[l+e]=t/c&255;return l+i},G.prototype.writeUInt8=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,1,255,0),G.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[l]=255&t,l+1},G.prototype.writeUInt16LE=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,2,65535,0),G.TYPED_ARRAY_SUPPORT?(this[l]=255&t,this[l+1]=t>>>8):P(this,t,l,!0),l+2},G.prototype.writeUInt16BE=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,2,65535,0),G.TYPED_ARRAY_SUPPORT?(this[l]=t>>>8,this[l+1]=255&t):P(this,t,l,!1),l+2},G.prototype.writeUInt32LE=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,4,4294967295,0),G.TYPED_ARRAY_SUPPORT?(this[l+3]=t>>>24,this[l+2]=t>>>16,this[l+1]=t>>>8,this[l]=255&t):M(this,t,l,!0),l+4},G.prototype.writeUInt32BE=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,4,4294967295,0),G.TYPED_ARRAY_SUPPORT?(this[l]=t>>>24,this[l+1]=t>>>16,this[l+2]=t>>>8,this[l+3]=255&t):M(this,t,l,!1),l+4},G.prototype.writeIntLE=function(t,l,i,n){if(t=+t,l|=0,!n){var e=Math.pow(2,8*i-1);A(this,t,l,i,e-1,-e)}var c=0,o=1,d=0;for(this[l]=255&t;++c<i&&(o*=256);)t<0&&0===d&&0!==this[l+c-1]&&(d=1),this[l+c]=(t/o>>0)-d&255;return l+i},G.prototype.writeIntBE=function(t,l,i,n){if(t=+t,l|=0,!n){var e=Math.pow(2,8*i-1);A(this,t,l,i,e-1,-e)}var c=i-1,o=1,d=0;for(this[l+c]=255&t;--c>=0&&(o*=256);)t<0&&0===d&&0!==this[l+c+1]&&(d=1),this[l+c]=(t/o>>0)-d&255;return l+i},G.prototype.writeInt8=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,1,127,-128),G.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[l]=255&t,l+1},G.prototype.writeInt16LE=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,2,32767,-32768),G.TYPED_ARRAY_SUPPORT?(this[l]=255&t,this[l+1]=t>>>8):P(this,t,l,!0),l+2},G.prototype.writeInt16BE=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,2,32767,-32768),G.TYPED_ARRAY_SUPPORT?(this[l]=t>>>8,this[l+1]=255&t):P(this,t,l,!1),l+2},G.prototype.writeInt32LE=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,4,2147483647,-2147483648),G.TYPED_ARRAY_SUPPORT?(this[l]=255&t,this[l+1]=t>>>8,this[l+2]=t>>>16,this[l+3]=t>>>24):M(this,t,l,!0),l+4},G.prototype.writeInt32BE=function(t,l,i){return t=+t,l|=0,i||A(this,t,l,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),G.TYPED_ARRAY_SUPPORT?(this[l]=t>>>24,this[l+1]=t>>>16,this[l+2]=t>>>8,this[l+3]=255&t):M(this,t,l,!1),l+4},G.prototype.writeFloatLE=function(t,l,i){return Q(this,t,l,!0,i)},G.prototype.writeFloatBE=function(t,l,i){return Q(this,t,l,!1,i)},G.prototype.writeDoubleLE=function(t,l,i){return E(this,t,l,!0,i)},G.prototype.writeDoubleBE=function(t,l,i){return E(this,t,l,!1,i)},G.prototype.copy=function(t,l,i,n){if(i||(i=0),n||0===n||(n=this.length),l>=t.length&&(l=t.length),l||(l=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===t.length||0===this.length)return 0;if(l<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-l<n-i&&(n=t.length-l+i);var e,c=n-i;if(this===t&&i<l&&l<n)for(e=c-1;e>=0;--e)t[e+l]=this[e+i];else if(c<1e3||!G.TYPED_ARRAY_SUPPORT)for(e=0;e<c;++e)t[e+l]=this[e+i];else Uint8Array.prototype.set.call(t,this.subarray(i,i+c),l);return c},G.prototype.fill=function(t,l,i,n){if("string"==typeof t){if("string"==typeof l?(n=l,l=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===t.length){var e=t.charCodeAt(0);e<256&&(t=e)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!G.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(l<0||this.length<l||this.length<i)throw new RangeError("Out of range index");if(i<=l)return this;var c;if(l>>>=0,i=void 0===i?this.length:i>>>0,t||(t=0),"number"==typeof t)for(c=l;c<i;++c)this[c]=t;else{var o=C(t)?t:q(new G(t,n).toString()),d=o.length;for(c=0;c<i-l;++c)this[c+l]=o[c%d]}return this};var D=/[^+\/0-9A-Za-z-_]/g;function O(t){return t<16?"0"+t.toString(16):t.toString(16)}function q(t,l){var i;l=l||1/0;for(var n=t.length,e=null,c=[],o=0;o<n;++o){if((i=t.charCodeAt(o))>55295&&i<57344){if(!e){if(i>56319){(l-=3)>-1&&c.push(239,191,189);continue}if(o+1===n){(l-=3)>-1&&c.push(239,191,189);continue}e=i;continue}if(i<56320){(l-=3)>-1&&c.push(239,191,189),e=i;continue}i=65536+(e-55296<<10|i-56320)}else e&&(l-=3)>-1&&c.push(239,191,189);if(e=null,i<128){if((l-=1)<0)break;c.push(i)}else if(i<2048){if((l-=2)<0)break;c.push(i>>6|192,63&i|128)}else if(i<65536){if((l-=3)<0)break;c.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((l-=4)<0)break;c.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return c}function _(t){return function(t){var l,i,n,e,c,u;r||a();var Z=t.length;if(Z%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[Z-2]?2:"="===t[Z-1]?1:0,u=new d(3*Z/4-c),n=c>0?Z-4:Z;var s=0;for(l=0,i=0;l<n;l+=4,i+=3)e=o[t.charCodeAt(l)]<<18|o[t.charCodeAt(l+1)]<<12|o[t.charCodeAt(l+2)]<<6|o[t.charCodeAt(l+3)],u[s++]=e>>16&255,u[s++]=e>>8&255,u[s++]=255&e;return 2===c?(e=o[t.charCodeAt(l)]<<2|o[t.charCodeAt(l+1)]>>4,u[s++]=255&e):1===c&&(e=o[t.charCodeAt(l)]<<10|o[t.charCodeAt(l+1)]<<4|o[t.charCodeAt(l+2)]>>2,u[s++]=e>>8&255,u[s++]=255&e),u}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(D,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function $(t,l,i,n){for(var e=0;e<n&&!(e+i>=l.length||e>=t.length);++e)l[e+i]=t[e];return e}function tt(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var lt=function(t,l){return function(){for(var i=new Array(arguments.length),n=0;n<i.length;n++)i[n]=arguments[n];return t.apply(l,i)}},it=Object.prototype.toString;function nt(t){return"[object Array]"===it.call(t)}function et(t){return void 0===t}function ct(t){return null!==t&&"object"==typeof t}function ot(t){if("[object Object]"!==it.call(t))return!1;var l=Object.getPrototypeOf(t);return null===l||l===Object.prototype}function dt(t){return"[object Function]"===it.call(t)}function rt(t,l){if(null!=t)if("object"!=typeof t&&(t=[t]),nt(t))for(var i=0,n=t.length;i<n;i++)l.call(null,t[i],i,t);else for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&l.call(null,t[e],e,t)}var at={isArray:nt,isArrayBuffer:function(t){return"[object ArrayBuffer]"===it.call(t)},isBuffer:function(t){return null!==t&&!et(t)&&null!==t.constructor&&!et(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:ct,isPlainObject:ot,isUndefined:et,isDate:function(t){return"[object Date]"===it.call(t)},isFile:function(t){return"[object File]"===it.call(t)},isBlob:function(t){return"[object Blob]"===it.call(t)},isFunction:dt,isStream:function(t){return ct(t)&&dt(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:rt,merge:function t(){var l={};function i(i,n){ot(l[n])&&ot(i)?l[n]=t(l[n],i):ot(i)?l[n]=t({},i):nt(i)?l[n]=i.slice():l[n]=i}for(var n=0,e=arguments.length;n<e;n++)rt(arguments[n],i);return l},extend:function(t,l,i){return rt(l,(function(l,n){t[n]=i&&"function"==typeof l?lt(l,i):l})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}};function ut(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var Zt=function(t,l,i){if(!l)return t;var n;if(i)n=i(l);else if(at.isURLSearchParams(l))n=l.toString();else{var e=[];at.forEach(l,(function(t,l){null!=t&&(at.isArray(t)?l+="[]":t=[t],at.forEach(t,(function(t){at.isDate(t)?t=t.toISOString():at.isObject(t)&&(t=JSON.stringify(t)),e.push(ut(l)+"="+ut(t))})))})),n=e.join("&")}if(n){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+n}return t};function st(){this.handlers=[]}st.prototype.use=function(t,l,i){return this.handlers.push({fulfilled:t,rejected:l,synchronous:!!i&&i.synchronous,runWhen:i?i.runWhen:null}),this.handlers.length-1},st.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},st.prototype.forEach=function(t){at.forEach(this.handlers,(function(l){null!==l&&t(l)}))};var bt=st;function mt(){throw new Error("setTimeout has not been defined")}function ht(){throw new Error("clearTimeout has not been defined")}var It=mt,pt=ht;function Gt(t){if(It===setTimeout)return setTimeout(t,0);if((It===mt||!It)&&setTimeout)return It=setTimeout,setTimeout(t,0);try{return It(t,0)}catch(l){try{return It.call(null,t,0)}catch(l){return It.call(this,t,0)}}}"function"==typeof e.setTimeout&&(It=setTimeout),"function"==typeof e.clearTimeout&&(pt=clearTimeout);var yt,gt=[],Xt=!1,Vt=-1;function Wt(){Xt&&yt&&(Xt=!1,yt.length?gt=yt.concat(gt):Vt=-1,gt.length&&Ct())}function Ct(){if(!Xt){var t=Gt(Wt);Xt=!0;for(var l=gt.length;l;){for(yt=gt,gt=[];++Vt<l;)yt&&yt[Vt].run();Vt=-1,l=gt.length}yt=null,Xt=!1,function(t){if(pt===clearTimeout)return clearTimeout(t);if((pt===ht||!pt)&&clearTimeout)return pt=clearTimeout,clearTimeout(t);try{pt(t)}catch(l){try{return pt.call(null,t)}catch(l){return pt.call(this,t)}}}(t)}}function Rt(t,l){this.fun=t,this.array=l}function ft(){}Rt.prototype.run=function(){this.fun.apply(null,this.array)};var St=ft,vt=ft,Kt=ft,Yt=ft,Jt=ft,Nt=ft,Lt=ft,Ut=e.performance||{},Ht=Ut.now||Ut.mozNow||Ut.msNow||Ut.oNow||Ut.webkitNow||function(){return(new Date).getTime()},xt=new Date,Tt={nextTick:function(t){var l=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)l[i-1]=arguments[i];gt.push(new Rt(t,l)),1!==gt.length||Xt||Gt(Ct)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:St,addListener:vt,once:Kt,off:Yt,removeListener:Jt,removeAllListeners:Nt,emit:Lt,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var l=.001*Ht.call(Ut),i=Math.floor(l),n=Math.floor(l%1*1e9);return t&&(i-=t[0],(n-=t[1])<0&&(i--,n+=1e9)),[i,n]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-xt)/1e3}},kt=function(t,l){at.forEach(t,(function(i,n){n!==l&&n.toUpperCase()===l.toUpperCase()&&(t[l]=i,delete t[n])}))},Ft=function(t,l,i,n,e){return t.config=l,i&&(t.code=i),t.request=n,t.response=e,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t},Bt=function(t,l,i,n,e){var c=new Error(t);return Ft(c,l,i,n,e)},zt=at.isStandardBrowserEnv()?{write:function(t,l,i,n,e,c){var o=[];o.push(t+"="+encodeURIComponent(l)),at.isNumber(i)&&o.push("expires="+new Date(i).toGMTString()),at.isString(n)&&o.push("path="+n),at.isString(e)&&o.push("domain="+e),!0===c&&o.push("secure"),document.cookie=o.join("; ")},read:function(t){var l=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return l?decodeURIComponent(l[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},wt=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],At=at.isStandardBrowserEnv()?function(){var t,l=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement("a");function n(t){var n=t;return l&&(i.setAttribute("href",n),n=i.href),i.setAttribute("href",n),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,""):"",host:i.host,search:i.search?i.search.replace(/^\?/,""):"",hash:i.hash?i.hash.replace(/^#/,""):"",hostname:i.hostname,port:i.port,pathname:"/"===i.pathname.charAt(0)?i.pathname:"/"+i.pathname}}return t=n(window.location.href),function(l){var i=at.isString(l)?n(l):l;return i.protocol===t.protocol&&i.host===t.host}}():function(){return!0},Pt={"Content-Type":"application/x-www-form-urlencoded"};function Mt(t,l){!at.isUndefined(t)&&at.isUndefined(t["Content-Type"])&&(t["Content-Type"]=l)}var jt,Qt={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==Tt&&"[object process]"===Object.prototype.toString.call(Tt))&&(jt=function(t){return new Promise((function(l,i){var n=t.data,e=t.headers,c=t.responseType;at.isFormData(n)&&delete e["Content-Type"];var o=new XMLHttpRequest;if(t.auth){var d=t.auth.username||"",r=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";e.Authorization="Basic "+btoa(d+":"+r)}var a,u,Z=(a=t.baseURL,u=t.url,a&&!/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(u)?function(t,l){return l?t.replace(/\/+$/,"")+"/"+l.replace(/^\/+/,""):t}(a,u):u);function s(){if(o){var n="getAllResponseHeaders"in o?function(t){var l,i,n,e={};return t?(at.forEach(t.split("\n"),(function(t){if(n=t.indexOf(":"),l=at.trim(t.substr(0,n)).toLowerCase(),i=at.trim(t.substr(n+1)),l){if(e[l]&&wt.indexOf(l)>=0)return;e[l]="set-cookie"===l?(e[l]?e[l]:[]).concat([i]):e[l]?e[l]+", "+i:i}})),e):e}(o.getAllResponseHeaders()):null,e={data:c&&"text"!==c&&"json"!==c?o.response:o.responseText,status:o.status,statusText:o.statusText,headers:n,config:t,request:o};!function(t,l,i){var n=i.config.validateStatus;i.status&&n&&!n(i.status)?l(Bt("Request failed with status code "+i.status,i.config,null,i.request,i)):t(i)}(l,i,e),o=null}}if(o.open(t.method.toUpperCase(),Zt(Z,t.params,t.paramsSerializer),!0),o.timeout=t.timeout,"onloadend"in o?o.onloadend=s:o.onreadystatechange=function(){o&&4===o.readyState&&(0!==o.status||o.responseURL&&0===o.responseURL.indexOf("file:"))&&setTimeout(s)},o.onabort=function(){o&&(i(Bt("Request aborted",t,"ECONNABORTED",o)),o=null)},o.onerror=function(){i(Bt("Network Error",t,null,o)),o=null},o.ontimeout=function(){var l="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(l=t.timeoutErrorMessage),i(Bt(l,t,t.transitional&&t.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",o)),o=null},at.isStandardBrowserEnv()){var b=(t.withCredentials||At(Z))&&t.xsrfCookieName?zt.read(t.xsrfCookieName):void 0;b&&(e[t.xsrfHeaderName]=b)}"setRequestHeader"in o&&at.forEach(e,(function(t,l){void 0===n&&"content-type"===l.toLowerCase()?delete e[l]:o.setRequestHeader(l,t)})),at.isUndefined(t.withCredentials)||(o.withCredentials=!!t.withCredentials),c&&"json"!==c&&(o.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&o.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&o.upload&&o.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){o&&(o.abort(),i(t),o=null)})),n||(n=null),o.send(n)}))}),jt),transformRequest:[function(t,l){return kt(l,"Accept"),kt(l,"Content-Type"),at.isFormData(t)||at.isArrayBuffer(t)||at.isBuffer(t)||at.isStream(t)||at.isFile(t)||at.isBlob(t)?t:at.isArrayBufferView(t)?t.buffer:at.isURLSearchParams(t)?(Mt(l,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):at.isObject(t)||l&&"application/json"===l["Content-Type"]?(Mt(l,"application/json"),function(t,l,i){if(at.isString(t))try{return(0,JSON.parse)(t),at.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var l=this.transitional,i=l&&l.silentJSONParsing,n=l&&l.forcedJSONParsing,e=!i&&"json"===this.responseType;if(e||n&&at.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(e){if("SyntaxError"===t.name)throw Ft(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};at.forEach(["delete","get","head"],(function(t){Qt.headers[t]={}})),at.forEach(["post","put","patch"],(function(t){Qt.headers[t]=at.merge(Pt)}));var Et=Qt,Dt=function(t,l,i){var n=this||Et;return at.forEach(i,(function(i){t=i.call(n,t,l)})),t},Ot=function(t){return!(!t||!t.__CANCEL__)};function qt(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var _t=function(t){return qt(t),t.headers=t.headers||{},t.data=Dt.call(t,t.data,t.headers,t.transformRequest),t.headers=at.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),at.forEach(["delete","get","head","post","put","patch","common"],(function(l){delete t.headers[l]})),(t.adapter||Et.adapter)(t).then((function(l){return qt(t),l.data=Dt.call(t,l.data,l.headers,t.transformResponse),l}),(function(l){return Ot(l)||(qt(t),l&&l.response&&(l.response.data=Dt.call(t,l.response.data,l.response.headers,t.transformResponse))),Promise.reject(l)}))},$t=function(t,l){l=l||{};var i={},n=["url","method","data"],e=["headers","auth","proxy","params"],c=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],o=["validateStatus"];function d(t,l){return at.isPlainObject(t)&&at.isPlainObject(l)?at.merge(t,l):at.isPlainObject(l)?at.merge({},l):at.isArray(l)?l.slice():l}function r(n){at.isUndefined(l[n])?at.isUndefined(t[n])||(i[n]=d(void 0,t[n])):i[n]=d(t[n],l[n])}at.forEach(n,(function(t){at.isUndefined(l[t])||(i[t]=d(void 0,l[t]))})),at.forEach(e,r),at.forEach(c,(function(n){at.isUndefined(l[n])?at.isUndefined(t[n])||(i[n]=d(void 0,t[n])):i[n]=d(void 0,l[n])})),at.forEach(o,(function(n){n in l?i[n]=d(t[n],l[n]):n in t&&(i[n]=d(void 0,t[n]))}));var a=n.concat(e).concat(c).concat(o),u=Object.keys(t).concat(Object.keys(l)).filter((function(t){return-1===a.indexOf(t)}));return at.forEach(u,r),i},tl={name:"axios",version:"0.21.4",description:"Promise based HTTP client for the browser and node.js",main:"index.js",scripts:{test:"grunt test",start:"node ./sandbox/server.js",build:"NODE_ENV=production grunt build",preversion:"npm test",version:"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json",postversion:"git push && git push --tags",examples:"node ./examples/server.js",coveralls:"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",fix:"eslint --fix lib/**/*.js"},repository:{type:"git",url:"https://github.com/axios/axios.git"},keywords:["xhr","http","ajax","promise","node"],author:"Matt Zabriskie",license:"MIT",bugs:{url:"https://github.com/axios/axios/issues"},homepage:"https://axios-http.com",devDependencies:{coveralls:"^3.0.0","es6-promise":"^4.2.4",grunt:"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1",karma:"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2",minimist:"^1.2.0",mocha:"^8.2.1",sinon:"^4.5.0","terser-webpack-plugin":"^4.2.3",typescript:"^4.0.5","url-search-params":"^0.10.0",webpack:"^4.44.2","webpack-dev-server":"^3.11.0"},browser:{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},jsdelivr:"dist/axios.min.js",unpkg:"dist/axios.min.js",typings:"./index.d.ts",dependencies:{"follow-redirects":"^1.14.0"},bundlesize:[{path:"./dist/axios.min.js",threshold:"5kB"}],_resolved:"https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",_integrity:"sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",_from:"axios@0.21.4"},ll={};["object","boolean","number","function","string","symbol"].forEach((function(t,l){ll[t]=function(i){return typeof i===t||"a"+(l<1?"n ":" ")+t}}));var il={},nl=tl.version.split(".");function el(t,l){for(var i=l?l.split("."):nl,n=t.split("."),e=0;e<3;e++){if(i[e]>n[e])return!0;if(i[e]<n[e])return!1}return!1}ll.transitional=function(t,l,i){var n=l&&el(l);function e(t,l){return"[Axios v"+tl.version+"] Transitional option '"+t+"'"+l+(i?". "+i:"")}return function(i,c,o){if(!1===t)throw new Error(e(c," has been removed in "+l));return n&&!il[c]&&(il[c]=!0,console.warn(e(c," has been deprecated since v"+l+" and will be removed in the near future"))),!t||t(i,c,o)}};var cl={isOlderVersion:el,assertOptions:function(t,l,i){if("object"!=typeof t)throw new TypeError("options must be an object");for(var n=Object.keys(t),e=n.length;e-- >0;){var c=n[e],o=l[c];if(o){var d=t[c],r=void 0===d||o(d,c,t);if(!0!==r)throw new TypeError("option "+c+" must be "+r)}else if(!0!==i)throw Error("Unknown option "+c)}},validators:ll},ol=cl.validators;function dl(t){this.defaults=t,this.interceptors={request:new bt,response:new bt}}dl.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=$t(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var l=t.transitional;void 0!==l&&cl.assertOptions(l,{silentJSONParsing:ol.transitional(ol.boolean,"1.0.0"),forcedJSONParsing:ol.transitional(ol.boolean,"1.0.0"),clarifyTimeoutError:ol.transitional(ol.boolean,"1.0.0")},!1);var i=[],n=!0;this.interceptors.request.forEach((function(l){"function"==typeof l.runWhen&&!1===l.runWhen(t)||(n=n&&l.synchronous,i.unshift(l.fulfilled,l.rejected))}));var e,c=[];if(this.interceptors.response.forEach((function(t){c.push(t.fulfilled,t.rejected)})),!n){var o=[_t,void 0];for(Array.prototype.unshift.apply(o,i),o=o.concat(c),e=Promise.resolve(t);o.length;)e=e.then(o.shift(),o.shift());return e}for(var d=t;i.length;){var r=i.shift(),a=i.shift();try{d=r(d)}catch(t){a(t);break}}try{e=_t(d)}catch(t){return Promise.reject(t)}for(;c.length;)e=e.then(c.shift(),c.shift());return e},dl.prototype.getUri=function(t){return t=$t(this.defaults,t),Zt(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},at.forEach(["delete","get","head","options"],(function(t){dl.prototype[t]=function(l,i){return this.request($t(i||{},{method:t,url:l,data:(i||{}).data}))}})),at.forEach(["post","put","patch"],(function(t){dl.prototype[t]=function(l,i,n){return this.request($t(n||{},{method:t,url:l,data:i}))}}));var rl=dl;function al(t){this.message=t}al.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},al.prototype.__CANCEL__=!0;var ul=al;function Zl(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var l;this.promise=new Promise((function(t){l=t}));var i=this;t((function(t){i.reason||(i.reason=new ul(t),l(i.reason))}))}Zl.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},Zl.source=function(){var t;return{token:new Zl((function(l){t=l})),cancel:t}};var sl=Zl;function bl(t){var l=new rl(t),i=lt(rl.prototype.request,l);return at.extend(i,rl.prototype,l),at.extend(i,l),i}var ml=bl(Et);ml.Axios=rl,ml.create=function(t){return bl($t(ml.defaults,t))},ml.Cancel=ul,ml.CancelToken=sl,ml.isCancel=Ot,ml.all=function(t){return Promise.all(t)},ml.spread=function(t){return function(l){return t.apply(null,l)}},ml.isAxiosError=function(t){return"object"==typeof t&&!0===t.isAxiosError};var hl=ml,Il=ml;hl.default=Il;var pl,Gl,yl=hl;
|
|
16
|
+
function i(t,n,l,i){return new(l||(l=Promise))((function(e,c){function o(t){try{r(i.next(t))}catch(t){c(t)}}function d(t){try{r(i.throw(t))}catch(t){c(t)}}function r(t){var n;t.done?e(t.value):(n=t.value,n instanceof l?n:new l((function(t){t(n)}))).then(o,d)}r((i=i.apply(t,n||[])).next())}))}l.d(n,"a",(function(){return Yn})),l.d(n,"b",(function(){return Fi})),l.d(n,"c",(function(){return le})),l.d(n,"d",(function(){return Cn})),l.d(n,"e",(function(){return fn})),l.d(n,"f",(function(){return zi})),l.d(n,"g",(function(){return Hn})),l.d(n,"h",(function(){return Kn})),l.d(n,"i",(function(){return vn})),l.d(n,"j",(function(){return Gn})),l.d(n,"k",(function(){return Rn})),l.d(n,"l",(function(){return Jn})),l.d(n,"m",(function(){return Ln})),l.d(n,"n",(function(){return Nn})),l.d(n,"o",(function(){return Pi})),l.d(n,"p",(function(){return Bi})),l.d(n,"q",(function(){return Sn})),l.d(n,"r",(function(){return Vn})),l.d(n,"s",(function(){return Wn})),l.d(n,"t",(function(){return ie}));var e=void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},c=[],o=[],d="undefined"!=typeof Uint8Array?Uint8Array:Array,r=!1;function a(){r=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,l=t.length;n<l;++n)c[n]=t[n],o[t.charCodeAt(n)]=n;o["-".charCodeAt(0)]=62,o["_".charCodeAt(0)]=63}function u(t,n,l){for(var i,e,o=[],d=n;d<l;d+=3)i=(t[d]<<16)+(t[d+1]<<8)+t[d+2],o.push(c[(e=i)>>18&63]+c[e>>12&63]+c[e>>6&63]+c[63&e]);return o.join("")}function Z(t){var n;r||a();for(var l=t.length,i=l%3,e="",o=[],d=16383,Z=0,s=l-i;Z<s;Z+=d)o.push(u(t,Z,Z+d>s?s:Z+d));return 1===i?(n=t[l-1],e+=c[n>>2],e+=c[n<<4&63],e+="=="):2===i&&(n=(t[l-2]<<8)+t[l-1],e+=c[n>>10],e+=c[n>>4&63],e+=c[n<<2&63],e+="="),o.push(e),o.join("")}function s(t,n,l,i,e){var c,o,d=8*e-i-1,r=(1<<d)-1,a=r>>1,u=-7,Z=l?e-1:0,s=l?-1:1,b=t[n+Z];for(Z+=s,c=b&(1<<-u)-1,b>>=-u,u+=d;u>0;c=256*c+t[n+Z],Z+=s,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=i;u>0;o=256*o+t[n+Z],Z+=s,u-=8);if(0===c)c=1-a;else{if(c===r)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,i),c-=a}return(b?-1:1)*o*Math.pow(2,c-i)}function b(t,n,l,i,e,c){var o,d,r,a=8*c-e-1,u=(1<<a)-1,Z=u>>1,s=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,b=i?0:c-1,m=i?1:-1,h=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(d=isNaN(n)?1:0,o=u):(o=Math.floor(Math.log(n)/Math.LN2),n*(r=Math.pow(2,-o))<1&&(o--,r*=2),(n+=o+Z>=1?s/r:s*Math.pow(2,1-Z))*r>=2&&(o++,r/=2),o+Z>=u?(d=0,o=u):o+Z>=1?(d=(n*r-1)*Math.pow(2,e),o+=Z):(d=n*Math.pow(2,Z-1)*Math.pow(2,e),o=0));e>=8;t[l+b]=255&d,b+=m,d/=256,e-=8);for(o=o<<e|d,a+=e;a>0;t[l+b]=255&o,b+=m,o/=256,a-=8);t[l+b-m]|=128*h}var m={}.toString,h=Array.isArray||function(t){return"[object Array]"==m.call(t)};function I(){return G.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function p(t,n){if(I()<n)throw new RangeError("Invalid typed array length");return G.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(n)).__proto__=G.prototype:(null===t&&(t=new G(n)),t.length=n),t}function G(t,n,l){if(!(G.TYPED_ARRAY_SUPPORT||this instanceof G))return new G(t,n,l);if("number"==typeof t){if("string"==typeof n)throw new Error("If encoding is specified then the first argument must be a string");return g(this,t)}return y(this,t,n,l)}function y(t,n,l,i){if("number"==typeof n)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&n instanceof ArrayBuffer?function(t,n,l,i){if(n.byteLength,l<0||n.byteLength<l)throw new RangeError("'offset' is out of bounds");if(n.byteLength<l+(i||0))throw new RangeError("'length' is out of bounds");return n=void 0===l&&void 0===i?new Uint8Array(n):void 0===i?new Uint8Array(n,l):new Uint8Array(n,l,i),G.TYPED_ARRAY_SUPPORT?(t=n).__proto__=G.prototype:t=V(t,n),t}(t,n,l,i):"string"==typeof n?function(t,n,l){if("string"==typeof l&&""!==l||(l="utf8"),!G.isEncoding(l))throw new TypeError('"encoding" must be a valid string encoding');var i=0|C(n,l),e=(t=p(t,i)).write(n,l);return e!==i&&(t=t.slice(0,e)),t}(t,n,l):function(t,n){if(R(n)){var l=0|W(n.length);return 0===(t=p(t,l)).length||n.copy(t,0,0,l),t}if(n){if("undefined"!=typeof ArrayBuffer&&n.buffer instanceof ArrayBuffer||"length"in n)return"number"!=typeof n.length||(i=n.length)!=i?p(t,0):V(t,n);if("Buffer"===n.type&&h(n.data))return V(t,n.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,n)}function X(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function g(t,n){if(X(n),t=p(t,n<0?0:0|W(n)),!G.TYPED_ARRAY_SUPPORT)for(var l=0;l<n;++l)t[l]=0;return t}function V(t,n){var l=n.length<0?0:0|W(n.length);t=p(t,l);for(var i=0;i<l;i+=1)t[i]=255&n[i];return t}function W(t){if(t>=I())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+I().toString(16)+" bytes");return 0|t}function R(t){return!(null==t||!t._isBuffer)}function C(t,n){if(R(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var l=t.length;if(0===l)return 0;for(var i=!1;;)switch(n){case"ascii":case"latin1":case"binary":return l;case"utf8":case"utf-8":case void 0:return q(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*l;case"hex":return l>>>1;case"base64":return _(t).length;default:if(i)return q(t).length;n=(""+n).toLowerCase(),i=!0}}function f(t,n,l){var i=!1;if((void 0===n||n<0)&&(n=0),n>this.length)return"";if((void 0===l||l>this.length)&&(l=this.length),l<=0)return"";if((l>>>=0)<=(n>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return B(this,n,l);case"utf8":case"utf-8":return T(this,n,l);case"ascii":return k(this,n,l);case"latin1":case"binary":return F(this,n,l);case"base64":return x(this,n,l);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return z(this,n,l);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function S(t,n,l){var i=t[n];t[n]=t[l],t[l]=i}function v(t,n,l,i,e){if(0===t.length)return-1;if("string"==typeof l?(i=l,l=0):l>2147483647?l=2147483647:l<-2147483648&&(l=-2147483648),l=+l,isNaN(l)&&(l=e?0:t.length-1),l<0&&(l=t.length+l),l>=t.length){if(e)return-1;l=t.length-1}else if(l<0){if(!e)return-1;l=0}if("string"==typeof n&&(n=G.from(n,i)),R(n))return 0===n.length?-1:K(t,n,l,i,e);if("number"==typeof n)return n&=255,G.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(t,n,l):Uint8Array.prototype.lastIndexOf.call(t,n,l):K(t,[n],l,i,e);throw new TypeError("val must be string, number or Buffer")}function K(t,n,l,i,e){var c,o=1,d=t.length,r=n.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||n.length<2)return-1;o=2,d/=2,r/=2,l/=2}function a(t,n){return 1===o?t[n]:t.readUInt16BE(n*o)}if(e){var u=-1;for(c=l;c<d;c++)if(a(t,c)===a(n,-1===u?0:c-u)){if(-1===u&&(u=c),c-u+1===r)return u*o}else-1!==u&&(c-=c-u),u=-1}else for(l+r>d&&(l=d-r),c=l;c>=0;c--){for(var Z=!0,s=0;s<r;s++)if(a(t,c+s)!==a(n,s)){Z=!1;break}if(Z)return c}return-1}function Y(t,n,l,i){l=Number(l)||0;var e=t.length-l;i?(i=Number(i))>e&&(i=e):i=e;var c=n.length;if(c%2!=0)throw new TypeError("Invalid hex string");i>c/2&&(i=c/2);for(var o=0;o<i;++o){var d=parseInt(n.substr(2*o,2),16);if(isNaN(d))return o;t[l+o]=d}return o}function J(t,n,l,i){return $(q(n,t.length-l),t,l,i)}function N(t,n,l,i){return $(function(t){for(var n=[],l=0;l<t.length;++l)n.push(255&t.charCodeAt(l));return n}(n),t,l,i)}function L(t,n,l,i){return N(t,n,l,i)}function H(t,n,l,i){return $(_(n),t,l,i)}function U(t,n,l,i){return $(function(t,n){for(var l,i,e,c=[],o=0;o<t.length&&!((n-=2)<0);++o)i=(l=t.charCodeAt(o))>>8,e=l%256,c.push(e),c.push(i);return c}(n,t.length-l),t,l,i)}function x(t,n,l){return 0===n&&l===t.length?Z(t):Z(t.slice(n,l))}function T(t,n,l){l=Math.min(t.length,l);for(var i=[],e=n;e<l;){var c,o,d,r,a=t[e],u=null,Z=a>239?4:a>223?3:a>191?2:1;if(e+Z<=l)switch(Z){case 1:a<128&&(u=a);break;case 2:128==(192&(c=t[e+1]))&&(r=(31&a)<<6|63&c)>127&&(u=r);break;case 3:c=t[e+1],o=t[e+2],128==(192&c)&&128==(192&o)&&(r=(15&a)<<12|(63&c)<<6|63&o)>2047&&(r<55296||r>57343)&&(u=r);break;case 4:c=t[e+1],o=t[e+2],d=t[e+3],128==(192&c)&&128==(192&o)&&128==(192&d)&&(r=(15&a)<<18|(63&c)<<12|(63&o)<<6|63&d)>65535&&r<1114112&&(u=r)}null===u?(u=65533,Z=1):u>65535&&(u-=65536,i.push(u>>>10&1023|55296),u=56320|1023&u),i.push(u),e+=Z}return function(t){var n=t.length;if(n<=4096)return String.fromCharCode.apply(String,t);for(var l="",i=0;i<n;)l+=String.fromCharCode.apply(String,t.slice(i,i+=4096));return l}(i)}function k(t,n,l){var i="";l=Math.min(t.length,l);for(var e=n;e<l;++e)i+=String.fromCharCode(127&t[e]);return i}function F(t,n,l){var i="";l=Math.min(t.length,l);for(var e=n;e<l;++e)i+=String.fromCharCode(t[e]);return i}function B(t,n,l){var i=t.length;(!n||n<0)&&(n=0),(!l||l<0||l>i)&&(l=i);for(var e="",c=n;c<l;++c)e+=O(t[c]);return e}function z(t,n,l){for(var i=t.slice(n,l),e="",c=0;c<i.length;c+=2)e+=String.fromCharCode(i[c]+256*i[c+1]);return e}function w(t,n,l){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+n>l)throw new RangeError("Trying to access beyond buffer length")}function A(t,n,l,i,e,c){if(!R(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>e||n<c)throw new RangeError('"value" argument is out of bounds');if(l+i>t.length)throw new RangeError("Index out of range")}function M(t,n,l,i){n<0&&(n=65535+n+1);for(var e=0,c=Math.min(t.length-l,2);e<c;++e)t[l+e]=(n&255<<8*(i?e:1-e))>>>8*(i?e:1-e)}function P(t,n,l,i){n<0&&(n=4294967295+n+1);for(var e=0,c=Math.min(t.length-l,4);e<c;++e)t[l+e]=n>>>8*(i?e:3-e)&255}function Q(t,n,l,i,e,c){if(l+i>t.length)throw new RangeError("Index out of range");if(l<0)throw new RangeError("Index out of range")}function j(t,n,l,i,e){return e||Q(t,0,l,4),b(t,n,l,i,23,4),l+4}function E(t,n,l,i,e){return e||Q(t,0,l,8),b(t,n,l,i,52,8),l+8}G.TYPED_ARRAY_SUPPORT=void 0===e.TYPED_ARRAY_SUPPORT||e.TYPED_ARRAY_SUPPORT,G.poolSize=8192,G._augment=function(t){return t.__proto__=G.prototype,t},G.from=function(t,n,l){return y(null,t,n,l)},G.TYPED_ARRAY_SUPPORT&&(G.prototype.__proto__=Uint8Array.prototype,G.__proto__=Uint8Array),G.alloc=function(t,n,l){return function(t,n,l,i){return X(n),n<=0?p(t,n):void 0!==l?"string"==typeof i?p(t,n).fill(l,i):p(t,n).fill(l):p(t,n)}(null,t,n,l)},G.allocUnsafe=function(t){return g(null,t)},G.allocUnsafeSlow=function(t){return g(null,t)},G.isBuffer=function(t){return null!=t&&(!!t._isBuffer||tt(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&tt(t.slice(0,0))}(t))},G.compare=function(t,n){if(!R(t)||!R(n))throw new TypeError("Arguments must be Buffers");if(t===n)return 0;for(var l=t.length,i=n.length,e=0,c=Math.min(l,i);e<c;++e)if(t[e]!==n[e]){l=t[e],i=n[e];break}return l<i?-1:i<l?1:0},G.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},G.concat=function(t,n){if(!h(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return G.alloc(0);var l;if(void 0===n)for(n=0,l=0;l<t.length;++l)n+=t[l].length;var i=G.allocUnsafe(n),e=0;for(l=0;l<t.length;++l){var c=t[l];if(!R(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(i,e),e+=c.length}return i},G.byteLength=C,G.prototype._isBuffer=!0,G.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var n=0;n<t;n+=2)S(this,n,n+1);return this},G.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var n=0;n<t;n+=4)S(this,n,n+3),S(this,n+1,n+2);return this},G.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var n=0;n<t;n+=8)S(this,n,n+7),S(this,n+1,n+6),S(this,n+2,n+5),S(this,n+3,n+4);return this},G.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?T(this,0,t):f.apply(this,arguments)},G.prototype.equals=function(t){if(!R(t))throw new TypeError("Argument must be a Buffer");return this===t||0===G.compare(this,t)},G.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},G.prototype.compare=function(t,n,l,i,e){if(!R(t))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===l&&(l=t?t.length:0),void 0===i&&(i=0),void 0===e&&(e=this.length),n<0||l>t.length||i<0||e>this.length)throw new RangeError("out of range index");if(i>=e&&n>=l)return 0;if(i>=e)return-1;if(n>=l)return 1;if(this===t)return 0;for(var c=(e>>>=0)-(i>>>=0),o=(l>>>=0)-(n>>>=0),d=Math.min(c,o),r=this.slice(i,e),a=t.slice(n,l),u=0;u<d;++u)if(r[u]!==a[u]){c=r[u],o=a[u];break}return c<o?-1:o<c?1:0},G.prototype.includes=function(t,n,l){return-1!==this.indexOf(t,n,l)},G.prototype.indexOf=function(t,n,l){return v(this,t,n,l,!0)},G.prototype.lastIndexOf=function(t,n,l){return v(this,t,n,l,!1)},G.prototype.write=function(t,n,l,i){if(void 0===n)i="utf8",l=this.length,n=0;else if(void 0===l&&"string"==typeof n)i=n,l=this.length,n=0;else{if(!isFinite(n))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");n|=0,isFinite(l)?(l|=0,void 0===i&&(i="utf8")):(i=l,l=void 0)}var e=this.length-n;if((void 0===l||l>e)&&(l=e),t.length>0&&(l<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var c=!1;;)switch(i){case"hex":return Y(this,t,n,l);case"utf8":case"utf-8":return J(this,t,n,l);case"ascii":return N(this,t,n,l);case"latin1":case"binary":return L(this,t,n,l);case"base64":return H(this,t,n,l);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return U(this,t,n,l);default:if(c)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),c=!0}},G.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},G.prototype.slice=function(t,n){var l,i=this.length;if((t=~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),(n=void 0===n?i:~~n)<0?(n+=i)<0&&(n=0):n>i&&(n=i),n<t&&(n=t),G.TYPED_ARRAY_SUPPORT)(l=this.subarray(t,n)).__proto__=G.prototype;else{var e=n-t;l=new G(e,void 0);for(var c=0;c<e;++c)l[c]=this[c+t]}return l},G.prototype.readUIntLE=function(t,n,l){t|=0,n|=0,l||w(t,n,this.length);for(var i=this[t],e=1,c=0;++c<n&&(e*=256);)i+=this[t+c]*e;return i},G.prototype.readUIntBE=function(t,n,l){t|=0,n|=0,l||w(t,n,this.length);for(var i=this[t+--n],e=1;n>0&&(e*=256);)i+=this[t+--n]*e;return i},G.prototype.readUInt8=function(t,n){return n||w(t,1,this.length),this[t]},G.prototype.readUInt16LE=function(t,n){return n||w(t,2,this.length),this[t]|this[t+1]<<8},G.prototype.readUInt16BE=function(t,n){return n||w(t,2,this.length),this[t]<<8|this[t+1]},G.prototype.readUInt32LE=function(t,n){return n||w(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},G.prototype.readUInt32BE=function(t,n){return n||w(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},G.prototype.readIntLE=function(t,n,l){t|=0,n|=0,l||w(t,n,this.length);for(var i=this[t],e=1,c=0;++c<n&&(e*=256);)i+=this[t+c]*e;return i>=(e*=128)&&(i-=Math.pow(2,8*n)),i},G.prototype.readIntBE=function(t,n,l){t|=0,n|=0,l||w(t,n,this.length);for(var i=n,e=1,c=this[t+--i];i>0&&(e*=256);)c+=this[t+--i]*e;return c>=(e*=128)&&(c-=Math.pow(2,8*n)),c},G.prototype.readInt8=function(t,n){return n||w(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},G.prototype.readInt16LE=function(t,n){n||w(t,2,this.length);var l=this[t]|this[t+1]<<8;return 32768&l?4294901760|l:l},G.prototype.readInt16BE=function(t,n){n||w(t,2,this.length);var l=this[t+1]|this[t]<<8;return 32768&l?4294901760|l:l},G.prototype.readInt32LE=function(t,n){return n||w(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},G.prototype.readInt32BE=function(t,n){return n||w(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},G.prototype.readFloatLE=function(t,n){return n||w(t,4,this.length),s(this,t,!0,23,4)},G.prototype.readFloatBE=function(t,n){return n||w(t,4,this.length),s(this,t,!1,23,4)},G.prototype.readDoubleLE=function(t,n){return n||w(t,8,this.length),s(this,t,!0,52,8)},G.prototype.readDoubleBE=function(t,n){return n||w(t,8,this.length),s(this,t,!1,52,8)},G.prototype.writeUIntLE=function(t,n,l,i){t=+t,n|=0,l|=0,i||A(this,t,n,l,Math.pow(2,8*l)-1,0);var e=1,c=0;for(this[n]=255&t;++c<l&&(e*=256);)this[n+c]=t/e&255;return n+l},G.prototype.writeUIntBE=function(t,n,l,i){t=+t,n|=0,l|=0,i||A(this,t,n,l,Math.pow(2,8*l)-1,0);var e=l-1,c=1;for(this[n+e]=255&t;--e>=0&&(c*=256);)this[n+e]=t/c&255;return n+l},G.prototype.writeUInt8=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,1,255,0),G.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[n]=255&t,n+1},G.prototype.writeUInt16LE=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,2,65535,0),G.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):M(this,t,n,!0),n+2},G.prototype.writeUInt16BE=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,2,65535,0),G.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):M(this,t,n,!1),n+2},G.prototype.writeUInt32LE=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,4,4294967295,0),G.TYPED_ARRAY_SUPPORT?(this[n+3]=t>>>24,this[n+2]=t>>>16,this[n+1]=t>>>8,this[n]=255&t):P(this,t,n,!0),n+4},G.prototype.writeUInt32BE=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,4,4294967295,0),G.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):P(this,t,n,!1),n+4},G.prototype.writeIntLE=function(t,n,l,i){if(t=+t,n|=0,!i){var e=Math.pow(2,8*l-1);A(this,t,n,l,e-1,-e)}var c=0,o=1,d=0;for(this[n]=255&t;++c<l&&(o*=256);)t<0&&0===d&&0!==this[n+c-1]&&(d=1),this[n+c]=(t/o>>0)-d&255;return n+l},G.prototype.writeIntBE=function(t,n,l,i){if(t=+t,n|=0,!i){var e=Math.pow(2,8*l-1);A(this,t,n,l,e-1,-e)}var c=l-1,o=1,d=0;for(this[n+c]=255&t;--c>=0&&(o*=256);)t<0&&0===d&&0!==this[n+c+1]&&(d=1),this[n+c]=(t/o>>0)-d&255;return n+l},G.prototype.writeInt8=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,1,127,-128),G.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[n]=255&t,n+1},G.prototype.writeInt16LE=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,2,32767,-32768),G.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):M(this,t,n,!0),n+2},G.prototype.writeInt16BE=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,2,32767,-32768),G.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):M(this,t,n,!1),n+2},G.prototype.writeInt32LE=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,4,2147483647,-2147483648),G.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8,this[n+2]=t>>>16,this[n+3]=t>>>24):P(this,t,n,!0),n+4},G.prototype.writeInt32BE=function(t,n,l){return t=+t,n|=0,l||A(this,t,n,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),G.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):P(this,t,n,!1),n+4},G.prototype.writeFloatLE=function(t,n,l){return j(this,t,n,!0,l)},G.prototype.writeFloatBE=function(t,n,l){return j(this,t,n,!1,l)},G.prototype.writeDoubleLE=function(t,n,l){return E(this,t,n,!0,l)},G.prototype.writeDoubleBE=function(t,n,l){return E(this,t,n,!1,l)},G.prototype.copy=function(t,n,l,i){if(l||(l=0),i||0===i||(i=this.length),n>=t.length&&(n=t.length),n||(n=0),i>0&&i<l&&(i=l),i===l)return 0;if(0===t.length||0===this.length)return 0;if(n<0)throw new RangeError("targetStart out of bounds");if(l<0||l>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-n<i-l&&(i=t.length-n+l);var e,c=i-l;if(this===t&&l<n&&n<i)for(e=c-1;e>=0;--e)t[e+n]=this[e+l];else if(c<1e3||!G.TYPED_ARRAY_SUPPORT)for(e=0;e<c;++e)t[e+n]=this[e+l];else Uint8Array.prototype.set.call(t,this.subarray(l,l+c),n);return c},G.prototype.fill=function(t,n,l,i){if("string"==typeof t){if("string"==typeof n?(i=n,n=0,l=this.length):"string"==typeof l&&(i=l,l=this.length),1===t.length){var e=t.charCodeAt(0);e<256&&(t=e)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!G.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof t&&(t&=255);if(n<0||this.length<n||this.length<l)throw new RangeError("Out of range index");if(l<=n)return this;var c;if(n>>>=0,l=void 0===l?this.length:l>>>0,t||(t=0),"number"==typeof t)for(c=n;c<l;++c)this[c]=t;else{var o=R(t)?t:q(new G(t,i).toString()),d=o.length;for(c=0;c<l-n;++c)this[c+n]=o[c%d]}return this};var D=/[^+\/0-9A-Za-z-_]/g;function O(t){return t<16?"0"+t.toString(16):t.toString(16)}function q(t,n){var l;n=n||1/0;for(var i=t.length,e=null,c=[],o=0;o<i;++o){if((l=t.charCodeAt(o))>55295&&l<57344){if(!e){if(l>56319){(n-=3)>-1&&c.push(239,191,189);continue}if(o+1===i){(n-=3)>-1&&c.push(239,191,189);continue}e=l;continue}if(l<56320){(n-=3)>-1&&c.push(239,191,189),e=l;continue}l=65536+(e-55296<<10|l-56320)}else e&&(n-=3)>-1&&c.push(239,191,189);if(e=null,l<128){if((n-=1)<0)break;c.push(l)}else if(l<2048){if((n-=2)<0)break;c.push(l>>6|192,63&l|128)}else if(l<65536){if((n-=3)<0)break;c.push(l>>12|224,l>>6&63|128,63&l|128)}else{if(!(l<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;c.push(l>>18|240,l>>12&63|128,l>>6&63|128,63&l|128)}}return c}function _(t){return function(t){var n,l,i,e,c,u;r||a();var Z=t.length;if(Z%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[Z-2]?2:"="===t[Z-1]?1:0,u=new d(3*Z/4-c),i=c>0?Z-4:Z;var s=0;for(n=0,l=0;n<i;n+=4,l+=3)e=o[t.charCodeAt(n)]<<18|o[t.charCodeAt(n+1)]<<12|o[t.charCodeAt(n+2)]<<6|o[t.charCodeAt(n+3)],u[s++]=e>>16&255,u[s++]=e>>8&255,u[s++]=255&e;return 2===c?(e=o[t.charCodeAt(n)]<<2|o[t.charCodeAt(n+1)]>>4,u[s++]=255&e):1===c&&(e=o[t.charCodeAt(n)]<<10|o[t.charCodeAt(n+1)]<<4|o[t.charCodeAt(n+2)]>>2,u[s++]=e>>8&255,u[s++]=255&e),u}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(D,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function $(t,n,l,i){for(var e=0;e<i&&!(e+l>=n.length||e>=t.length);++e)n[e+l]=t[e];return e}function tt(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var nt=function(t,n){return function(){for(var l=new Array(arguments.length),i=0;i<l.length;i++)l[i]=arguments[i];return t.apply(n,l)}},lt=Object.prototype.toString;function it(t){return"[object Array]"===lt.call(t)}function et(t){return void 0===t}function ct(t){return null!==t&&"object"==typeof t}function ot(t){if("[object Object]"!==lt.call(t))return!1;var n=Object.getPrototypeOf(t);return null===n||n===Object.prototype}function dt(t){return"[object Function]"===lt.call(t)}function rt(t,n){if(null!=t)if("object"!=typeof t&&(t=[t]),it(t))for(var l=0,i=t.length;l<i;l++)n.call(null,t[l],l,t);else for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&n.call(null,t[e],e,t)}var at={isArray:it,isArrayBuffer:function(t){return"[object ArrayBuffer]"===lt.call(t)},isBuffer:function(t){return null!==t&&!et(t)&&null!==t.constructor&&!et(t.constructor)&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)},isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:ct,isPlainObject:ot,isUndefined:et,isDate:function(t){return"[object Date]"===lt.call(t)},isFile:function(t){return"[object File]"===lt.call(t)},isBlob:function(t){return"[object Blob]"===lt.call(t)},isFunction:dt,isStream:function(t){return ct(t)&&dt(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&"undefined"!=typeof window&&"undefined"!=typeof document},forEach:rt,merge:function t(){var n={};function l(l,i){ot(n[i])&&ot(l)?n[i]=t(n[i],l):ot(l)?n[i]=t({},l):it(l)?n[i]=l.slice():n[i]=l}for(var i=0,e=arguments.length;i<e;i++)rt(arguments[i],l);return n},extend:function(t,n,l){return rt(n,(function(n,i){t[i]=l&&"function"==typeof n?nt(n,l):n})),t},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},stripBOM:function(t){return 65279===t.charCodeAt(0)&&(t=t.slice(1)),t}};function ut(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var Zt=function(t,n,l){if(!n)return t;var i;if(l)i=l(n);else if(at.isURLSearchParams(n))i=n.toString();else{var e=[];at.forEach(n,(function(t,n){null!=t&&(at.isArray(t)?n+="[]":t=[t],at.forEach(t,(function(t){at.isDate(t)?t=t.toISOString():at.isObject(t)&&(t=JSON.stringify(t)),e.push(ut(n)+"="+ut(t))})))})),i=e.join("&")}if(i){var c=t.indexOf("#");-1!==c&&(t=t.slice(0,c)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t};function st(){this.handlers=[]}st.prototype.use=function(t,n,l){return this.handlers.push({fulfilled:t,rejected:n,synchronous:!!l&&l.synchronous,runWhen:l?l.runWhen:null}),this.handlers.length-1},st.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},st.prototype.forEach=function(t){at.forEach(this.handlers,(function(n){null!==n&&t(n)}))};var bt=st;function mt(){throw new Error("setTimeout has not been defined")}function ht(){throw new Error("clearTimeout has not been defined")}var It=mt,pt=ht;function Gt(t){if(It===setTimeout)return setTimeout(t,0);if((It===mt||!It)&&setTimeout)return It=setTimeout,setTimeout(t,0);try{return It(t,0)}catch(n){try{return It.call(null,t,0)}catch(n){return It.call(this,t,0)}}}"function"==typeof e.setTimeout&&(It=setTimeout),"function"==typeof e.clearTimeout&&(pt=clearTimeout);var yt,Xt=[],gt=!1,Vt=-1;function Wt(){gt&&yt&&(gt=!1,yt.length?Xt=yt.concat(Xt):Vt=-1,Xt.length&&Rt())}function Rt(){if(!gt){var t=Gt(Wt);gt=!0;for(var n=Xt.length;n;){for(yt=Xt,Xt=[];++Vt<n;)yt&&yt[Vt].run();Vt=-1,n=Xt.length}yt=null,gt=!1,function(t){if(pt===clearTimeout)return clearTimeout(t);if((pt===ht||!pt)&&clearTimeout)return pt=clearTimeout,clearTimeout(t);try{pt(t)}catch(n){try{return pt.call(null,t)}catch(n){return pt.call(this,t)}}}(t)}}function Ct(t,n){this.fun=t,this.array=n}function ft(){}Ct.prototype.run=function(){this.fun.apply(null,this.array)};var St=ft,vt=ft,Kt=ft,Yt=ft,Jt=ft,Nt=ft,Lt=ft,Ht=e.performance||{},Ut=Ht.now||Ht.mozNow||Ht.msNow||Ht.oNow||Ht.webkitNow||function(){return(new Date).getTime()},xt=new Date,Tt={nextTick:function(t){var n=new Array(arguments.length-1);if(arguments.length>1)for(var l=1;l<arguments.length;l++)n[l-1]=arguments[l];Xt.push(new Ct(t,n)),1!==Xt.length||gt||Gt(Rt)},title:"browser",browser:!0,env:{},argv:[],version:"",versions:{},on:St,addListener:vt,once:Kt,off:Yt,removeListener:Jt,removeAllListeners:Nt,emit:Lt,binding:function(t){throw new Error("process.binding is not supported")},cwd:function(){return"/"},chdir:function(t){throw new Error("process.chdir is not supported")},umask:function(){return 0},hrtime:function(t){var n=.001*Ut.call(Ht),l=Math.floor(n),i=Math.floor(n%1*1e9);return t&&(l-=t[0],(i-=t[1])<0&&(l--,i+=1e9)),[l,i]},platform:"browser",release:{},config:{},uptime:function(){return(new Date-xt)/1e3}},kt=function(t,n){at.forEach(t,(function(l,i){i!==n&&i.toUpperCase()===n.toUpperCase()&&(t[n]=l,delete t[i])}))},Ft=function(t,n,l,i,e){return t.config=n,l&&(t.code=l),t.request=i,t.response=e,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t},Bt=function(t,n,l,i,e){var c=new Error(t);return Ft(c,n,l,i,e)},zt=at.isStandardBrowserEnv()?{write:function(t,n,l,i,e,c){var o=[];o.push(t+"="+encodeURIComponent(n)),at.isNumber(l)&&o.push("expires="+new Date(l).toGMTString()),at.isString(i)&&o.push("path="+i),at.isString(e)&&o.push("domain="+e),!0===c&&o.push("secure"),document.cookie=o.join("; ")},read:function(t){var n=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}},wt=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"],At=at.isStandardBrowserEnv()?function(){var t,n=/(msie|trident)/i.test(navigator.userAgent),l=document.createElement("a");function i(t){var i=t;return n&&(l.setAttribute("href",i),i=l.href),l.setAttribute("href",i),{href:l.href,protocol:l.protocol?l.protocol.replace(/:$/,""):"",host:l.host,search:l.search?l.search.replace(/^\?/,""):"",hash:l.hash?l.hash.replace(/^#/,""):"",hostname:l.hostname,port:l.port,pathname:"/"===l.pathname.charAt(0)?l.pathname:"/"+l.pathname}}return t=i(window.location.href),function(n){var l=at.isString(n)?i(n):n;return l.protocol===t.protocol&&l.host===t.host}}():function(){return!0},Mt={"Content-Type":"application/x-www-form-urlencoded"};function Pt(t,n){!at.isUndefined(t)&&at.isUndefined(t["Content-Type"])&&(t["Content-Type"]=n)}var Qt,jt={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==Tt&&"[object process]"===Object.prototype.toString.call(Tt))&&(Qt=function(t){return new Promise((function(n,l){var i=t.data,e=t.headers,c=t.responseType;at.isFormData(i)&&delete e["Content-Type"];var o=new XMLHttpRequest;if(t.auth){var d=t.auth.username||"",r=t.auth.password?unescape(encodeURIComponent(t.auth.password)):"";e.Authorization="Basic "+btoa(d+":"+r)}var a,u,Z=(a=t.baseURL,u=t.url,a&&!/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(u)?function(t,n){return n?t.replace(/\/+$/,"")+"/"+n.replace(/^\/+/,""):t}(a,u):u);function s(){if(o){var i="getAllResponseHeaders"in o?function(t){var n,l,i,e={};return t?(at.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),n=at.trim(t.substr(0,i)).toLowerCase(),l=at.trim(t.substr(i+1)),n){if(e[n]&&wt.indexOf(n)>=0)return;e[n]="set-cookie"===n?(e[n]?e[n]:[]).concat([l]):e[n]?e[n]+", "+l:l}})),e):e}(o.getAllResponseHeaders()):null,e={data:c&&"text"!==c&&"json"!==c?o.response:o.responseText,status:o.status,statusText:o.statusText,headers:i,config:t,request:o};!function(t,n,l){var i=l.config.validateStatus;l.status&&i&&!i(l.status)?n(Bt("Request failed with status code "+l.status,l.config,null,l.request,l)):t(l)}(n,l,e),o=null}}if(o.open(t.method.toUpperCase(),Zt(Z,t.params,t.paramsSerializer),!0),o.timeout=t.timeout,"onloadend"in o?o.onloadend=s:o.onreadystatechange=function(){o&&4===o.readyState&&(0!==o.status||o.responseURL&&0===o.responseURL.indexOf("file:"))&&setTimeout(s)},o.onabort=function(){o&&(l(Bt("Request aborted",t,"ECONNABORTED",o)),o=null)},o.onerror=function(){l(Bt("Network Error",t,null,o)),o=null},o.ontimeout=function(){var n="timeout of "+t.timeout+"ms exceeded";t.timeoutErrorMessage&&(n=t.timeoutErrorMessage),l(Bt(n,t,t.transitional&&t.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",o)),o=null},at.isStandardBrowserEnv()){var b=(t.withCredentials||At(Z))&&t.xsrfCookieName?zt.read(t.xsrfCookieName):void 0;b&&(e[t.xsrfHeaderName]=b)}"setRequestHeader"in o&&at.forEach(e,(function(t,n){void 0===i&&"content-type"===n.toLowerCase()?delete e[n]:o.setRequestHeader(n,t)})),at.isUndefined(t.withCredentials)||(o.withCredentials=!!t.withCredentials),c&&"json"!==c&&(o.responseType=t.responseType),"function"==typeof t.onDownloadProgress&&o.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&o.upload&&o.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){o&&(o.abort(),l(t),o=null)})),i||(i=null),o.send(i)}))}),Qt),transformRequest:[function(t,n){return kt(n,"Accept"),kt(n,"Content-Type"),at.isFormData(t)||at.isArrayBuffer(t)||at.isBuffer(t)||at.isStream(t)||at.isFile(t)||at.isBlob(t)?t:at.isArrayBufferView(t)?t.buffer:at.isURLSearchParams(t)?(Pt(n,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):at.isObject(t)||n&&"application/json"===n["Content-Type"]?(Pt(n,"application/json"),function(t,n,l){if(at.isString(t))try{return(0,JSON.parse)(t),at.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(0,JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){var n=this.transitional,l=n&&n.silentJSONParsing,i=n&&n.forcedJSONParsing,e=!l&&"json"===this.responseType;if(e||i&&at.isString(t)&&t.length)try{return JSON.parse(t)}catch(t){if(e){if("SyntaxError"===t.name)throw Ft(t,this,"E_JSON_PARSE");throw t}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};at.forEach(["delete","get","head"],(function(t){jt.headers[t]={}})),at.forEach(["post","put","patch"],(function(t){jt.headers[t]=at.merge(Mt)}));var Et=jt,Dt=function(t,n,l){var i=this||Et;return at.forEach(l,(function(l){t=l.call(i,t,n)})),t},Ot=function(t){return!(!t||!t.__CANCEL__)};function qt(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var _t=function(t){return qt(t),t.headers=t.headers||{},t.data=Dt.call(t,t.data,t.headers,t.transformRequest),t.headers=at.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),at.forEach(["delete","get","head","post","put","patch","common"],(function(n){delete t.headers[n]})),(t.adapter||Et.adapter)(t).then((function(n){return qt(t),n.data=Dt.call(t,n.data,n.headers,t.transformResponse),n}),(function(n){return Ot(n)||(qt(t),n&&n.response&&(n.response.data=Dt.call(t,n.response.data,n.response.headers,t.transformResponse))),Promise.reject(n)}))},$t=function(t,n){n=n||{};var l={},i=["url","method","data"],e=["headers","auth","proxy","params"],c=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],o=["validateStatus"];function d(t,n){return at.isPlainObject(t)&&at.isPlainObject(n)?at.merge(t,n):at.isPlainObject(n)?at.merge({},n):at.isArray(n)?n.slice():n}function r(i){at.isUndefined(n[i])?at.isUndefined(t[i])||(l[i]=d(void 0,t[i])):l[i]=d(t[i],n[i])}at.forEach(i,(function(t){at.isUndefined(n[t])||(l[t]=d(void 0,n[t]))})),at.forEach(e,r),at.forEach(c,(function(i){at.isUndefined(n[i])?at.isUndefined(t[i])||(l[i]=d(void 0,t[i])):l[i]=d(void 0,n[i])})),at.forEach(o,(function(i){i in n?l[i]=d(t[i],n[i]):i in t&&(l[i]=d(void 0,t[i]))}));var a=i.concat(e).concat(c).concat(o),u=Object.keys(t).concat(Object.keys(n)).filter((function(t){return-1===a.indexOf(t)}));return at.forEach(u,r),l},tn={name:"axios",version:"0.21.4",description:"Promise based HTTP client for the browser and node.js",main:"index.js",scripts:{test:"grunt test",start:"node ./sandbox/server.js",build:"NODE_ENV=production grunt build",preversion:"npm test",version:"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json",postversion:"git push && git push --tags",examples:"node ./examples/server.js",coveralls:"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",fix:"eslint --fix lib/**/*.js"},repository:{type:"git",url:"https://github.com/axios/axios.git"},keywords:["xhr","http","ajax","promise","node"],author:"Matt Zabriskie",license:"MIT",bugs:{url:"https://github.com/axios/axios/issues"},homepage:"https://axios-http.com",devDependencies:{coveralls:"^3.0.0","es6-promise":"^4.2.4",grunt:"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1",karma:"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2",minimist:"^1.2.0",mocha:"^8.2.1",sinon:"^4.5.0","terser-webpack-plugin":"^4.2.3",typescript:"^4.0.5","url-search-params":"^0.10.0",webpack:"^4.44.2","webpack-dev-server":"^3.11.0"},browser:{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},jsdelivr:"dist/axios.min.js",unpkg:"dist/axios.min.js",typings:"./index.d.ts",dependencies:{"follow-redirects":"^1.14.0"},bundlesize:[{path:"./dist/axios.min.js",threshold:"5kB"}]},nn={};["object","boolean","number","function","string","symbol"].forEach((function(t,n){nn[t]=function(l){return typeof l===t||"a"+(n<1?"n ":" ")+t}}));var ln={},en=tn.version.split(".");function cn(t,n){for(var l=n?n.split("."):en,i=t.split("."),e=0;e<3;e++){if(l[e]>i[e])return!0;if(l[e]<i[e])return!1}return!1}nn.transitional=function(t,n,l){var i=n&&cn(n);function e(t,n){return"[Axios v"+tn.version+"] Transitional option '"+t+"'"+n+(l?". "+l:"")}return function(l,c,o){if(!1===t)throw new Error(e(c," has been removed in "+n));return i&&!ln[c]&&(ln[c]=!0,console.warn(e(c," has been deprecated since v"+n+" and will be removed in the near future"))),!t||t(l,c,o)}};var on={isOlderVersion:cn,assertOptions:function(t,n,l){if("object"!=typeof t)throw new TypeError("options must be an object");for(var i=Object.keys(t),e=i.length;e-- >0;){var c=i[e],o=n[c];if(o){var d=t[c],r=void 0===d||o(d,c,t);if(!0!==r)throw new TypeError("option "+c+" must be "+r)}else if(!0!==l)throw Error("Unknown option "+c)}},validators:nn},dn=on.validators;function rn(t){this.defaults=t,this.interceptors={request:new bt,response:new bt}}rn.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=$t(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var n=t.transitional;void 0!==n&&on.assertOptions(n,{silentJSONParsing:dn.transitional(dn.boolean,"1.0.0"),forcedJSONParsing:dn.transitional(dn.boolean,"1.0.0"),clarifyTimeoutError:dn.transitional(dn.boolean,"1.0.0")},!1);var l=[],i=!0;this.interceptors.request.forEach((function(n){"function"==typeof n.runWhen&&!1===n.runWhen(t)||(i=i&&n.synchronous,l.unshift(n.fulfilled,n.rejected))}));var e,c=[];if(this.interceptors.response.forEach((function(t){c.push(t.fulfilled,t.rejected)})),!i){var o=[_t,void 0];for(Array.prototype.unshift.apply(o,l),o=o.concat(c),e=Promise.resolve(t);o.length;)e=e.then(o.shift(),o.shift());return e}for(var d=t;l.length;){var r=l.shift(),a=l.shift();try{d=r(d)}catch(t){a(t);break}}try{e=_t(d)}catch(t){return Promise.reject(t)}for(;c.length;)e=e.then(c.shift(),c.shift());return e},rn.prototype.getUri=function(t){return t=$t(this.defaults,t),Zt(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},at.forEach(["delete","get","head","options"],(function(t){rn.prototype[t]=function(n,l){return this.request($t(l||{},{method:t,url:n,data:(l||{}).data}))}})),at.forEach(["post","put","patch"],(function(t){rn.prototype[t]=function(n,l,i){return this.request($t(i||{},{method:t,url:n,data:l}))}}));var an=rn;function un(t){this.message=t}un.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},un.prototype.__CANCEL__=!0;var Zn=un;function sn(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var n;this.promise=new Promise((function(t){n=t}));var l=this;t((function(t){l.reason||(l.reason=new Zn(t),n(l.reason))}))}sn.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},sn.source=function(){var t;return{token:new sn((function(n){t=n})),cancel:t}};var bn=sn;function mn(t){var n=new an(t),l=nt(an.prototype.request,n);return at.extend(l,an.prototype,n),at.extend(l,n),l}var hn=mn(Et);hn.Axios=an,hn.create=function(t){return mn($t(hn.defaults,t))},hn.Cancel=Zn,hn.CancelToken=bn,hn.isCancel=Ot,hn.all=function(t){return Promise.all(t)},hn.spread=function(t){return function(n){return t.apply(null,n)}},hn.isAxiosError=function(t){return"object"==typeof t&&!0===t.isAxiosError};var In=hn,pn=hn;In.default=pn;var Gn,yn,Xn=In;
|
|
17
17
|
/*! *****************************************************************************
|
|
18
18
|
Copyright (c) Microsoft Corporation.
|
|
19
19
|
|
|
@@ -27,7 +27,7 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
27
27
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
28
28
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
29
29
|
PERFORMANCE OF THIS SOFTWARE.
|
|
30
|
-
***************************************************************************** */function gl(t,l,i,n){return new(i||(i=Promise))((function(e,c){function o(t){try{r(n.next(t))}catch(t){c(t)}}function d(t){try{r(n.throw(t))}catch(t){c(t)}}function r(t){var l;t.done?e(t.value):(l=t.value,l instanceof i?l:new i((function(t){t(l)}))).then(o,d)}r((n=n.apply(t,l||[])).next())}))}(Gl=pl||(pl={})).formPost="form_post",Gl.query="query";const Xl="{{token}}",Vl="{{username}}",Wl="{{scope}}",Cl="{{clientID}}",Rl="{{clientSecret}}";var fl;!function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(fl||(fl={}));const Sl="refresh_token_timer",vl="pkce_code_verifier",Kl="code",Yl="session_state",Jl="sign_out_url",Nl="sign_out_success",Ll="openid";class Ul extends Error{constructor(t,l,i,n,e,c){super(null!=n?n:null==c?void 0:c.message),this.name=this.constructor.name,this.code=t,this.file=l,this.method=i,this.description=e,this.error=c,Object.setPrototypeOf(this,new.target.prototype)}}class Hl extends Ul{constructor(t,l,i,n,e,c,o,d,r){super(t,l,i,n,e),this.name=this.constructor.name,this.code=t,this.file=l,this.method=i,this.description=e,this.networkErrorCode=c,this.networkErrorMessage=o,this.status=d,this.networkErrorData=r}}var xl="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{};function Tl(t,l,i){return t(i={path:l,exports:{},require:function(t,l){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==l&&i.path)}},i.exports),i.exports}var kl=void 0!==e?e:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},Fl=[],Bl=[],zl="undefined"!=typeof Uint8Array?Uint8Array:Array,wl=!1;function Al(){wl=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=0,i=t.length;l<i;++l)Fl[l]=t[l],Bl[t.charCodeAt(l)]=l;Bl["-".charCodeAt(0)]=62,Bl["_".charCodeAt(0)]=63}function Pl(t,l,i){for(var n,e,c=[],o=l;o<i;o+=3)n=(t[o]<<16)+(t[o+1]<<8)+t[o+2],c.push(Fl[(e=n)>>18&63]+Fl[e>>12&63]+Fl[e>>6&63]+Fl[63&e]);return c.join("")}function Ml(t){var l;wl||Al();for(var i=t.length,n=i%3,e="",c=[],o=16383,d=0,r=i-n;d<r;d+=o)c.push(Pl(t,d,d+o>r?r:d+o));return 1===n?(l=t[i-1],e+=Fl[l>>2],e+=Fl[l<<4&63],e+="=="):2===n&&(l=(t[i-2]<<8)+t[i-1],e+=Fl[l>>10],e+=Fl[l>>4&63],e+=Fl[l<<2&63],e+="="),c.push(e),c.join("")}function jl(t,l,i,n,e){var c,o,d=8*e-n-1,r=(1<<d)-1,a=r>>1,u=-7,Z=i?e-1:0,s=i?-1:1,b=t[l+Z];for(Z+=s,c=b&(1<<-u)-1,b>>=-u,u+=d;u>0;c=256*c+t[l+Z],Z+=s,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=n;u>0;o=256*o+t[l+Z],Z+=s,u-=8);if(0===c)c=1-a;else{if(c===r)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,n),c-=a}return(b?-1:1)*o*Math.pow(2,c-n)}function Ql(t,l,i,n,e,c){var o,d,r,a=8*c-e-1,u=(1<<a)-1,Z=u>>1,s=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,b=n?0:c-1,m=n?1:-1,h=l<0||0===l&&1/l<0?1:0;for(l=Math.abs(l),isNaN(l)||l===1/0?(d=isNaN(l)?1:0,o=u):(o=Math.floor(Math.log(l)/Math.LN2),l*(r=Math.pow(2,-o))<1&&(o--,r*=2),(l+=o+Z>=1?s/r:s*Math.pow(2,1-Z))*r>=2&&(o++,r/=2),o+Z>=u?(d=0,o=u):o+Z>=1?(d=(l*r-1)*Math.pow(2,e),o+=Z):(d=l*Math.pow(2,Z-1)*Math.pow(2,e),o=0));e>=8;t[i+b]=255&d,b+=m,d/=256,e-=8);for(o=o<<e|d,a+=e;a>0;t[i+b]=255&o,b+=m,o/=256,a-=8);t[i+b-m]|=128*h}var El={}.toString,Dl=Array.isArray||function(t){return"[object Array]"==El.call(t)};$l.TYPED_ARRAY_SUPPORT=void 0===kl.TYPED_ARRAY_SUPPORT||kl.TYPED_ARRAY_SUPPORT;var Ol=ql();function ql(){return $l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function _l(t,l){if(ql()<l)throw new RangeError("Invalid typed array length");return $l.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(l)).__proto__=$l.prototype:(null===t&&(t=new $l(l)),t.length=l),t}function $l(t,l,i){if(!($l.TYPED_ARRAY_SUPPORT||this instanceof $l))return new $l(t,l,i);if("number"==typeof t){if("string"==typeof l)throw new Error("If encoding is specified then the first argument must be a string");return ii(this,t)}return ti(this,t,l,i)}function ti(t,l,i,n){if("number"==typeof l)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&l instanceof ArrayBuffer?function(t,l,i,n){if(l.byteLength,i<0||l.byteLength<i)throw new RangeError("'offset' is out of bounds");if(l.byteLength<i+(n||0))throw new RangeError("'length' is out of bounds");return l=void 0===i&&void 0===n?new Uint8Array(l):void 0===n?new Uint8Array(l,i):new Uint8Array(l,i,n),$l.TYPED_ARRAY_SUPPORT?(t=l).__proto__=$l.prototype:t=ni(t,l),t}(t,l,i,n):"string"==typeof l?function(t,l,i){if("string"==typeof i&&""!==i||(i="utf8"),!$l.isEncoding(i))throw new TypeError('"encoding" must be a valid string encoding');var n=0|oi(l,i),e=(t=_l(t,n)).write(l,i);return e!==n&&(t=t.slice(0,e)),t}(t,l,i):function(t,l){if(ci(l)){var i=0|ei(l.length);return 0===(t=_l(t,i)).length||l.copy(t,0,0,i),t}if(l){if("undefined"!=typeof ArrayBuffer&&l.buffer instanceof ArrayBuffer||"length"in l)return"number"!=typeof l.length||(n=l.length)!=n?_l(t,0):ni(t,l);if("Buffer"===l.type&&Dl(l.data))return ni(t,l.data)}var n;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,l)}function li(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function ii(t,l){if(li(l),t=_l(t,l<0?0:0|ei(l)),!$l.TYPED_ARRAY_SUPPORT)for(var i=0;i<l;++i)t[i]=0;return t}function ni(t,l){var i=l.length<0?0:0|ei(l.length);t=_l(t,i);for(var n=0;n<i;n+=1)t[n]=255&l[n];return t}function ei(t){if(t>=ql())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+ql().toString(16)+" bytes");return 0|t}function ci(t){return!(null==t||!t._isBuffer)}function oi(t,l){if(ci(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var n=!1;;)switch(l){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return Ni(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return Li(t).length;default:if(n)return Ni(t).length;l=(""+l).toLowerCase(),n=!0}}function di(t,l,i){var n=!1;if((void 0===l||l<0)&&(l=0),l>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(l>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Xi(this,l,i);case"utf8":case"utf-8":return Gi(this,l,i);case"ascii":return yi(this,l,i);case"latin1":case"binary":return gi(this,l,i);case"base64":return pi(this,l,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Vi(this,l,i);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function ri(t,l,i){var n=t[l];t[l]=t[i],t[i]=n}function ai(t,l,i,n,e){if(0===t.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=e?0:t.length-1),i<0&&(i=t.length+i),i>=t.length){if(e)return-1;i=t.length-1}else if(i<0){if(!e)return-1;i=0}if("string"==typeof l&&(l=$l.from(l,n)),ci(l))return 0===l.length?-1:ui(t,l,i,n,e);if("number"==typeof l)return l&=255,$l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(t,l,i):Uint8Array.prototype.lastIndexOf.call(t,l,i):ui(t,[l],i,n,e);throw new TypeError("val must be string, number or Buffer")}function ui(t,l,i,n,e){var c,o=1,d=t.length,r=l.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||l.length<2)return-1;o=2,d/=2,r/=2,i/=2}function a(t,l){return 1===o?t[l]:t.readUInt16BE(l*o)}if(e){var u=-1;for(c=i;c<d;c++)if(a(t,c)===a(l,-1===u?0:c-u)){if(-1===u&&(u=c),c-u+1===r)return u*o}else-1!==u&&(c-=c-u),u=-1}else for(i+r>d&&(i=d-r),c=i;c>=0;c--){for(var Z=!0,s=0;s<r;s++)if(a(t,c+s)!==a(l,s)){Z=!1;break}if(Z)return c}return-1}function Zi(t,l,i,n){i=Number(i)||0;var e=t.length-i;n?(n=Number(n))>e&&(n=e):n=e;var c=l.length;if(c%2!=0)throw new TypeError("Invalid hex string");n>c/2&&(n=c/2);for(var o=0;o<n;++o){var d=parseInt(l.substr(2*o,2),16);if(isNaN(d))return o;t[i+o]=d}return o}function si(t,l,i,n){return Ui(Ni(l,t.length-i),t,i,n)}function bi(t,l,i,n){return Ui(function(t){for(var l=[],i=0;i<t.length;++i)l.push(255&t.charCodeAt(i));return l}(l),t,i,n)}function mi(t,l,i,n){return bi(t,l,i,n)}function hi(t,l,i,n){return Ui(Li(l),t,i,n)}function Ii(t,l,i,n){return Ui(function(t,l){for(var i,n,e,c=[],o=0;o<t.length&&!((l-=2)<0);++o)n=(i=t.charCodeAt(o))>>8,e=i%256,c.push(e),c.push(n);return c}(l,t.length-i),t,i,n)}function pi(t,l,i){return 0===l&&i===t.length?Ml(t):Ml(t.slice(l,i))}function Gi(t,l,i){i=Math.min(t.length,i);for(var n=[],e=l;e<i;){var c,o,d,r,a=t[e],u=null,Z=a>239?4:a>223?3:a>191?2:1;if(e+Z<=i)switch(Z){case 1:a<128&&(u=a);break;case 2:128==(192&(c=t[e+1]))&&(r=(31&a)<<6|63&c)>127&&(u=r);break;case 3:c=t[e+1],o=t[e+2],128==(192&c)&&128==(192&o)&&(r=(15&a)<<12|(63&c)<<6|63&o)>2047&&(r<55296||r>57343)&&(u=r);break;case 4:c=t[e+1],o=t[e+2],d=t[e+3],128==(192&c)&&128==(192&o)&&128==(192&d)&&(r=(15&a)<<18|(63&c)<<12|(63&o)<<6|63&d)>65535&&r<1114112&&(u=r)}null===u?(u=65533,Z=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),e+=Z}return function(t){var l=t.length;if(l<=4096)return String.fromCharCode.apply(String,t);for(var i="",n=0;n<l;)i+=String.fromCharCode.apply(String,t.slice(n,n+=4096));return i}(n)}function yi(t,l,i){var n="";i=Math.min(t.length,i);for(var e=l;e<i;++e)n+=String.fromCharCode(127&t[e]);return n}function gi(t,l,i){var n="";i=Math.min(t.length,i);for(var e=l;e<i;++e)n+=String.fromCharCode(t[e]);return n}function Xi(t,l,i){var n=t.length;(!l||l<0)&&(l=0),(!i||i<0||i>n)&&(i=n);for(var e="",c=l;c<i;++c)e+=Ji(t[c]);return e}function Vi(t,l,i){for(var n=t.slice(l,i),e="",c=0;c<n.length;c+=2)e+=String.fromCharCode(n[c]+256*n[c+1]);return e}function Wi(t,l,i){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+l>i)throw new RangeError("Trying to access beyond buffer length")}function Ci(t,l,i,n,e,c){if(!ci(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(l>e||l<c)throw new RangeError('"value" argument is out of bounds');if(i+n>t.length)throw new RangeError("Index out of range")}function Ri(t,l,i,n){l<0&&(l=65535+l+1);for(var e=0,c=Math.min(t.length-i,2);e<c;++e)t[i+e]=(l&255<<8*(n?e:1-e))>>>8*(n?e:1-e)}function fi(t,l,i,n){l<0&&(l=4294967295+l+1);for(var e=0,c=Math.min(t.length-i,4);e<c;++e)t[i+e]=l>>>8*(n?e:3-e)&255}function Si(t,l,i,n,e,c){if(i+n>t.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function vi(t,l,i,n,e){return e||Si(t,0,i,4),Ql(t,l,i,n,23,4),i+4}function Ki(t,l,i,n,e){return e||Si(t,0,i,8),Ql(t,l,i,n,52,8),i+8}$l.poolSize=8192,$l._augment=function(t){return t.__proto__=$l.prototype,t},$l.from=function(t,l,i){return ti(null,t,l,i)},$l.TYPED_ARRAY_SUPPORT&&($l.prototype.__proto__=Uint8Array.prototype,$l.__proto__=Uint8Array),$l.alloc=function(t,l,i){return function(t,l,i,n){return li(l),l<=0?_l(t,l):void 0!==i?"string"==typeof n?_l(t,l).fill(i,n):_l(t,l).fill(i):_l(t,l)}(null,t,l,i)},$l.allocUnsafe=function(t){return ii(null,t)},$l.allocUnsafeSlow=function(t){return ii(null,t)},$l.isBuffer=Hi,$l.compare=function(t,l){if(!ci(t)||!ci(l))throw new TypeError("Arguments must be Buffers");if(t===l)return 0;for(var i=t.length,n=l.length,e=0,c=Math.min(i,n);e<c;++e)if(t[e]!==l[e]){i=t[e],n=l[e];break}return i<n?-1:n<i?1:0},$l.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},$l.concat=function(t,l){if(!Dl(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return $l.alloc(0);var i;if(void 0===l)for(l=0,i=0;i<t.length;++i)l+=t[i].length;var n=$l.allocUnsafe(l),e=0;for(i=0;i<t.length;++i){var c=t[i];if(!ci(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(n,e),e+=c.length}return n},$l.byteLength=oi,$l.prototype._isBuffer=!0,$l.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var l=0;l<t;l+=2)ri(this,l,l+1);return this},$l.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var l=0;l<t;l+=4)ri(this,l,l+3),ri(this,l+1,l+2);return this},$l.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var l=0;l<t;l+=8)ri(this,l,l+7),ri(this,l+1,l+6),ri(this,l+2,l+5),ri(this,l+3,l+4);return this},$l.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?Gi(this,0,t):di.apply(this,arguments)},$l.prototype.equals=function(t){if(!ci(t))throw new TypeError("Argument must be a Buffer");return this===t||0===$l.compare(this,t)},$l.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},$l.prototype.compare=function(t,l,i,n,e){if(!ci(t))throw new TypeError("Argument must be a Buffer");if(void 0===l&&(l=0),void 0===i&&(i=t?t.length:0),void 0===n&&(n=0),void 0===e&&(e=this.length),l<0||i>t.length||n<0||e>this.length)throw new RangeError("out of range index");if(n>=e&&l>=i)return 0;if(n>=e)return-1;if(l>=i)return 1;if(this===t)return 0;for(var c=(e>>>=0)-(n>>>=0),o=(i>>>=0)-(l>>>=0),d=Math.min(c,o),r=this.slice(n,e),a=t.slice(l,i),u=0;u<d;++u)if(r[u]!==a[u]){c=r[u],o=a[u];break}return c<o?-1:o<c?1:0},$l.prototype.includes=function(t,l,i){return-1!==this.indexOf(t,l,i)},$l.prototype.indexOf=function(t,l,i){return ai(this,t,l,i,!0)},$l.prototype.lastIndexOf=function(t,l,i){return ai(this,t,l,i,!1)},$l.prototype.write=function(t,l,i,n){if(void 0===l)n="utf8",i=this.length,l=0;else if(void 0===i&&"string"==typeof l)n=l,i=this.length,l=0;else{if(!isFinite(l))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");l|=0,isFinite(i)?(i|=0,void 0===n&&(n="utf8")):(n=i,i=void 0)}var e=this.length-l;if((void 0===i||i>e)&&(i=e),t.length>0&&(i<0||l<0)||l>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var c=!1;;)switch(n){case"hex":return Zi(this,t,l,i);case"utf8":case"utf-8":return si(this,t,l,i);case"ascii":return bi(this,t,l,i);case"latin1":case"binary":return mi(this,t,l,i);case"base64":return hi(this,t,l,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ii(this,t,l,i);default:if(c)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),c=!0}},$l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},$l.prototype.slice=function(t,l){var i,n=this.length;if((t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(l=void 0===l?n:~~l)<0?(l+=n)<0&&(l=0):l>n&&(l=n),l<t&&(l=t),$l.TYPED_ARRAY_SUPPORT)(i=this.subarray(t,l)).__proto__=$l.prototype;else{var e=l-t;i=new $l(e,void 0);for(var c=0;c<e;++c)i[c]=this[c+t]}return i},$l.prototype.readUIntLE=function(t,l,i){t|=0,l|=0,i||Wi(t,l,this.length);for(var n=this[t],e=1,c=0;++c<l&&(e*=256);)n+=this[t+c]*e;return n},$l.prototype.readUIntBE=function(t,l,i){t|=0,l|=0,i||Wi(t,l,this.length);for(var n=this[t+--l],e=1;l>0&&(e*=256);)n+=this[t+--l]*e;return n},$l.prototype.readUInt8=function(t,l){return l||Wi(t,1,this.length),this[t]},$l.prototype.readUInt16LE=function(t,l){return l||Wi(t,2,this.length),this[t]|this[t+1]<<8},$l.prototype.readUInt16BE=function(t,l){return l||Wi(t,2,this.length),this[t]<<8|this[t+1]},$l.prototype.readUInt32LE=function(t,l){return l||Wi(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},$l.prototype.readUInt32BE=function(t,l){return l||Wi(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},$l.prototype.readIntLE=function(t,l,i){t|=0,l|=0,i||Wi(t,l,this.length);for(var n=this[t],e=1,c=0;++c<l&&(e*=256);)n+=this[t+c]*e;return n>=(e*=128)&&(n-=Math.pow(2,8*l)),n},$l.prototype.readIntBE=function(t,l,i){t|=0,l|=0,i||Wi(t,l,this.length);for(var n=l,e=1,c=this[t+--n];n>0&&(e*=256);)c+=this[t+--n]*e;return c>=(e*=128)&&(c-=Math.pow(2,8*l)),c},$l.prototype.readInt8=function(t,l){return l||Wi(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},$l.prototype.readInt16LE=function(t,l){l||Wi(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},$l.prototype.readInt16BE=function(t,l){l||Wi(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},$l.prototype.readInt32LE=function(t,l){return l||Wi(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},$l.prototype.readInt32BE=function(t,l){return l||Wi(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},$l.prototype.readFloatLE=function(t,l){return l||Wi(t,4,this.length),jl(this,t,!0,23,4)},$l.prototype.readFloatBE=function(t,l){return l||Wi(t,4,this.length),jl(this,t,!1,23,4)},$l.prototype.readDoubleLE=function(t,l){return l||Wi(t,8,this.length),jl(this,t,!0,52,8)},$l.prototype.readDoubleBE=function(t,l){return l||Wi(t,8,this.length),jl(this,t,!1,52,8)},$l.prototype.writeUIntLE=function(t,l,i,n){t=+t,l|=0,i|=0,n||Ci(this,t,l,i,Math.pow(2,8*i)-1,0);var e=1,c=0;for(this[l]=255&t;++c<i&&(e*=256);)this[l+c]=t/e&255;return l+i},$l.prototype.writeUIntBE=function(t,l,i,n){t=+t,l|=0,i|=0,n||Ci(this,t,l,i,Math.pow(2,8*i)-1,0);var e=i-1,c=1;for(this[l+e]=255&t;--e>=0&&(c*=256);)this[l+e]=t/c&255;return l+i},$l.prototype.writeUInt8=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,1,255,0),$l.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[l]=255&t,l+1},$l.prototype.writeUInt16LE=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,2,65535,0),$l.TYPED_ARRAY_SUPPORT?(this[l]=255&t,this[l+1]=t>>>8):Ri(this,t,l,!0),l+2},$l.prototype.writeUInt16BE=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,2,65535,0),$l.TYPED_ARRAY_SUPPORT?(this[l]=t>>>8,this[l+1]=255&t):Ri(this,t,l,!1),l+2},$l.prototype.writeUInt32LE=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,4,4294967295,0),$l.TYPED_ARRAY_SUPPORT?(this[l+3]=t>>>24,this[l+2]=t>>>16,this[l+1]=t>>>8,this[l]=255&t):fi(this,t,l,!0),l+4},$l.prototype.writeUInt32BE=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,4,4294967295,0),$l.TYPED_ARRAY_SUPPORT?(this[l]=t>>>24,this[l+1]=t>>>16,this[l+2]=t>>>8,this[l+3]=255&t):fi(this,t,l,!1),l+4},$l.prototype.writeIntLE=function(t,l,i,n){if(t=+t,l|=0,!n){var e=Math.pow(2,8*i-1);Ci(this,t,l,i,e-1,-e)}var c=0,o=1,d=0;for(this[l]=255&t;++c<i&&(o*=256);)t<0&&0===d&&0!==this[l+c-1]&&(d=1),this[l+c]=(t/o>>0)-d&255;return l+i},$l.prototype.writeIntBE=function(t,l,i,n){if(t=+t,l|=0,!n){var e=Math.pow(2,8*i-1);Ci(this,t,l,i,e-1,-e)}var c=i-1,o=1,d=0;for(this[l+c]=255&t;--c>=0&&(o*=256);)t<0&&0===d&&0!==this[l+c+1]&&(d=1),this[l+c]=(t/o>>0)-d&255;return l+i},$l.prototype.writeInt8=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,1,127,-128),$l.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[l]=255&t,l+1},$l.prototype.writeInt16LE=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,2,32767,-32768),$l.TYPED_ARRAY_SUPPORT?(this[l]=255&t,this[l+1]=t>>>8):Ri(this,t,l,!0),l+2},$l.prototype.writeInt16BE=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,2,32767,-32768),$l.TYPED_ARRAY_SUPPORT?(this[l]=t>>>8,this[l+1]=255&t):Ri(this,t,l,!1),l+2},$l.prototype.writeInt32LE=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,4,2147483647,-2147483648),$l.TYPED_ARRAY_SUPPORT?(this[l]=255&t,this[l+1]=t>>>8,this[l+2]=t>>>16,this[l+3]=t>>>24):fi(this,t,l,!0),l+4},$l.prototype.writeInt32BE=function(t,l,i){return t=+t,l|=0,i||Ci(this,t,l,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),$l.TYPED_ARRAY_SUPPORT?(this[l]=t>>>24,this[l+1]=t>>>16,this[l+2]=t>>>8,this[l+3]=255&t):fi(this,t,l,!1),l+4},$l.prototype.writeFloatLE=function(t,l,i){return vi(this,t,l,!0,i)},$l.prototype.writeFloatBE=function(t,l,i){return vi(this,t,l,!1,i)},$l.prototype.writeDoubleLE=function(t,l,i){return Ki(this,t,l,!0,i)},$l.prototype.writeDoubleBE=function(t,l,i){return Ki(this,t,l,!1,i)},$l.prototype.copy=function(t,l,i,n){if(i||(i=0),n||0===n||(n=this.length),l>=t.length&&(l=t.length),l||(l=0),n>0&&n<i&&(n=i),n===i)return 0;if(0===t.length||0===this.length)return 0;if(l<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-l<n-i&&(n=t.length-l+i);var e,c=n-i;if(this===t&&i<l&&l<n)for(e=c-1;e>=0;--e)t[e+l]=this[e+i];else if(c<1e3||!$l.TYPED_ARRAY_SUPPORT)for(e=0;e<c;++e)t[e+l]=this[e+i];else Uint8Array.prototype.set.call(t,this.subarray(i,i+c),l);return c},$l.prototype.fill=function(t,l,i,n){if("string"==typeof t){if("string"==typeof l?(n=l,l=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),1===t.length){var e=t.charCodeAt(0);e<256&&(t=e)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!$l.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(l<0||this.length<l||this.length<i)throw new RangeError("Out of range index");if(i<=l)return this;var c;if(l>>>=0,i=void 0===i?this.length:i>>>0,t||(t=0),"number"==typeof t)for(c=l;c<i;++c)this[c]=t;else{var o=ci(t)?t:Ni(new $l(t,n).toString()),d=o.length;for(c=0;c<i-l;++c)this[c+l]=o[c%d]}return this};var Yi=/[^+\/0-9A-Za-z-_]/g;function Ji(t){return t<16?"0"+t.toString(16):t.toString(16)}function Ni(t,l){var i;l=l||1/0;for(var n=t.length,e=null,c=[],o=0;o<n;++o){if((i=t.charCodeAt(o))>55295&&i<57344){if(!e){if(i>56319){(l-=3)>-1&&c.push(239,191,189);continue}if(o+1===n){(l-=3)>-1&&c.push(239,191,189);continue}e=i;continue}if(i<56320){(l-=3)>-1&&c.push(239,191,189),e=i;continue}i=65536+(e-55296<<10|i-56320)}else e&&(l-=3)>-1&&c.push(239,191,189);if(e=null,i<128){if((l-=1)<0)break;c.push(i)}else if(i<2048){if((l-=2)<0)break;c.push(i>>6|192,63&i|128)}else if(i<65536){if((l-=3)<0)break;c.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((l-=4)<0)break;c.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return c}function Li(t){return function(t){var l,i,n,e,c,o;wl||Al();var d=t.length;if(d%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[d-2]?2:"="===t[d-1]?1:0,o=new zl(3*d/4-c),n=c>0?d-4:d;var r=0;for(l=0,i=0;l<n;l+=4,i+=3)e=Bl[t.charCodeAt(l)]<<18|Bl[t.charCodeAt(l+1)]<<12|Bl[t.charCodeAt(l+2)]<<6|Bl[t.charCodeAt(l+3)],o[r++]=e>>16&255,o[r++]=e>>8&255,o[r++]=255&e;return 2===c?(e=Bl[t.charCodeAt(l)]<<2|Bl[t.charCodeAt(l+1)]>>4,o[r++]=255&e):1===c&&(e=Bl[t.charCodeAt(l)]<<10|Bl[t.charCodeAt(l+1)]<<4|Bl[t.charCodeAt(l+2)]>>2,o[r++]=e>>8&255,o[r++]=255&e),o}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(Yi,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Ui(t,l,i,n){for(var e=0;e<n&&!(e+i>=l.length||e>=t.length);++e)l[e+i]=t[e];return e}function Hi(t){return null!=t&&(!!t._isBuffer||xi(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&xi(t.slice(0,0))}(t))}function xi(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var Ti=Object.freeze({__proto__:null,Buffer:$l,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),$l.alloc(+t)},isBuffer:Hi,kMaxLength:Ol}),ki=Tl((function(t,l){Object.defineProperty(l,"__esModule",{value:!0}),l.default=function(t){var l=t.length,i=l%4;if(!i)return t;var n=l,e=4-i,c=l+e,o=$l.alloc(c);for(o.write(t);e--;)o.write("=",n++);return o.toString()}})),Fi=Tl((function(t,l){function i(t,l){return void 0===l&&(l="utf8"),$l.isBuffer(t)?e(t.toString("base64")):e($l.from(t,l).toString("base64"))}function n(t){return t=t.toString(),ki.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function e(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}Object.defineProperty(l,"__esModule",{value:!0});var c=i;c.encode=i,c.decode=function(t,l){return void 0===l&&(l="utf8"),$l.from(n(t),"base64").toString(l)},c.toBase64=n,c.fromBase64=e,c.toBuffer=function(t){return $l.from(n(t),"base64")},l.default=c})),Bi=Tl((function(t){t.exports=Fi.default,t.exports.default=t.exports})),zi=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(Tl((function(t){!function(l,i){var n={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var l=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function i(t,i,n,e,c){for(var o,d,r,a,u,Z,s,b,m,h,I,p,G;c>=64;){for(o=i[0],d=i[1],r=i[2],a=i[3],u=i[4],Z=i[5],s=i[6],b=i[7],h=0;h<16;h++)I=e+4*h,t[h]=(255&n[I])<<24|(255&n[I+1])<<16|(255&n[I+2])<<8|255&n[I+3];for(h=16;h<64;h++)p=((m=t[h-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,G=((m=t[h-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[h]=(p+t[h-7]|0)+(G+t[h-16]|0);for(h=0;h<64;h++)p=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&Z^~u&s)|0)+(b+(l[h]+t[h]|0)|0)|0,G=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&d^o&r^d&r)|0,b=s,s=Z,Z=u,u=a+p|0,a=r,r=d,d=o,o=p+G|0;i[0]+=o,i[1]+=d,i[2]+=r,i[3]+=a,i[4]+=u,i[5]+=Z,i[6]+=s,i[7]+=b,e+=64,c-=64}return e}var n=function(){function l(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return l.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},l.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},l.prototype.update=function(t,l){if(void 0===l&&(l=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var n=0;if(this.bytesHashed+=l,this.bufferLength>0){for(;this.bufferLength<64&&l>0;)this.buffer[this.bufferLength++]=t[n++],l--;64===this.bufferLength&&(i(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(l>=64&&(n=i(this.temp,this.state,t,n,l),l%=64);l>0;)this.buffer[this.bufferLength++]=t[n++],l--;return this},l.prototype.finish=function(t){if(!this.finished){var l=this.bytesHashed,n=this.bufferLength,e=l/536870912|0,c=l<<3,o=l%64<56?64:128;this.buffer[n]=128;for(var d=n+1;d<o-8;d++)this.buffer[d]=0;this.buffer[o-8]=e>>>24&255,this.buffer[o-7]=e>>>16&255,this.buffer[o-6]=e>>>8&255,this.buffer[o-5]=e>>>0&255,this.buffer[o-4]=c>>>24&255,this.buffer[o-3]=c>>>16&255,this.buffer[o-2]=c>>>8&255,this.buffer[o-1]=c>>>0&255,i(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(d=0;d<8;d++)t[4*d+0]=this.state[d]>>>24&255,t[4*d+1]=this.state[d]>>>16&255,t[4*d+2]=this.state[d]>>>8&255,t[4*d+3]=this.state[d]>>>0&255;return this},l.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},l.prototype._saveState=function(t){for(var l=0;l<this.state.length;l++)t[l]=this.state[l]},l.prototype._restoreState=function(t,l){for(var i=0;i<this.state.length;i++)this.state[i]=t[i];this.bytesHashed=l,this.finished=!1,this.bufferLength=0},l}();t.Hash=n;var e=function(){function t(t){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var l=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new n).update(t).finish(l).clean();else for(var i=0;i<t.length;i++)l[i]=t[i];for(i=0;i<l.length;i++)l[i]^=54;for(this.inner.update(l),i=0;i<l.length;i++)l[i]^=106;for(this.outer.update(l),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),i=0;i<l.length;i++)l[i]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var l=(new n).update(t),i=l.digest();return l.clean(),i}function o(t,l){var i=new e(t).update(l),n=i.digest();return i.clean(),n}function d(t,l,i,n){var e=n[0];if(0===e)throw new Error("hkdf: cannot expand more");l.reset(),e>1&&l.update(t),i&&l.update(i),l.update(n),l.finish(t),n[0]++}t.HMAC=e,t.hash=c,t.default=c,t.hmac=o;var r=new Uint8Array(t.digestLength);t.hkdf=function(t,l,i,n){void 0===l&&(l=r),void 0===n&&(n=32);for(var c=new Uint8Array([1]),a=o(l,t),u=new e(a),Z=new Uint8Array(u.digestLength),s=Z.length,b=new Uint8Array(n),m=0;m<n;m++)s===Z.length&&(d(Z,u,i,c),s=0),b[m]=Z[s++];return u.clean(),Z.fill(0),c.fill(0),b},t.pbkdf2=function(t,l,i,n){for(var c=new e(t),o=c.digestLength,d=new Uint8Array(4),r=new Uint8Array(o),a=new Uint8Array(o),u=new Uint8Array(n),Z=0;Z*o<n;Z++){var s=Z+1;d[0]=s>>>24&255,d[1]=s>>>16&255,d[2]=s>>>8&255,d[3]=s>>>0&255,c.reset(),c.update(l),c.update(d),c.finish(a);for(var b=0;b<o;b++)r[b]=a[b];for(b=2;b<=i;b++){c.reset(),c.update(a).finish(a);for(var m=0;m<o;m++)r[m]^=a[m]}for(b=0;b<o&&Z*o+b<n;b++)u[Z*o+b]=r[b]}for(Z=0;Z<o;Z++)r[Z]=a[Z]=0;for(Z=0;Z<4;Z++)d[Z]=0;return c.clean(),u}}(n);var e=n.default;for(var c in n)e[c]=n[c];t.exports=e}()})));function wi(){throw new Error("setTimeout has not been defined")}function Ai(){throw new Error("clearTimeout has not been defined")}var Pi=wi,Mi=Ai;function ji(t){if(Pi===setTimeout)return setTimeout(t,0);if((Pi===wi||!Pi)&&setTimeout)return Pi=setTimeout,setTimeout(t,0);try{return Pi(t,0)}catch(l){try{return Pi.call(null,t,0)}catch(l){return Pi.call(this,t,0)}}}"function"==typeof kl.setTimeout&&(Pi=setTimeout),"function"==typeof kl.clearTimeout&&(Mi=clearTimeout);var Qi,Ei=[],Di=!1,Oi=-1;function qi(){Di&&Qi&&(Di=!1,Qi.length?Ei=Qi.concat(Ei):Oi=-1,Ei.length&&_i())}function _i(){if(!Di){var t=ji(qi);Di=!0;for(var l=Ei.length;l;){for(Qi=Ei,Ei=[];++Oi<l;)Qi&&Qi[Oi].run();Oi=-1,l=Ei.length}Qi=null,Di=!1,function(t){if(Mi===clearTimeout)return clearTimeout(t);if((Mi===Ai||!Mi)&&clearTimeout)return Mi=clearTimeout,clearTimeout(t);try{Mi(t)}catch(l){try{return Mi.call(null,t)}catch(l){return Mi.call(this,t)}}}(t)}}function $i(t,l){this.fun=t,this.array=l}$i.prototype.run=function(){this.fun.apply(null,this.array)};var tn=kl.performance||{},ln=(tn.now||tn.mozNow||tn.msNow||tn.oNow||tn.webkitNow,new Date,function(t){var l=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)l[i-1]=arguments[i];Ei.push(new $i(t,l)),1!==Ei.length||Di||ji(_i)}),nn=function(t){if(t.__esModule)return t;var l=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(i){var n=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(l,i,n.get?n:{enumerable:!0,get:function(){return t[i]}})})),l}(Ti),en=Tl((function(t,l){var i=nn.Buffer;function n(t,l){for(var i in t)l[i]=t[i]}function e(t,l,n){return i(t,l,n)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=nn:(n(nn,l),l.Buffer=e),n(i,e),e.from=function(t,l,n){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,l,n)},e.alloc=function(t,l,n){if("number"!=typeof t)throw new TypeError("Argument must be a number");var e=i(t);return void 0!==l?"string"==typeof n?e.fill(l,n):e.fill(l):e.fill(0),e},e.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},e.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return nn.SlowBuffer(t)}})),cn=Tl((function(t){var l=65536,i=en.Buffer,n=xl.crypto||xl.msCrypto;n&&n.getRandomValues?t.exports=function(t,e){if(t>4294967295)throw new RangeError("requested too many random bytes");var c=i.allocUnsafe(t);if(t>0)if(t>l)for(var o=0;o<t;o+=l)n.getRandomValues(c.slice(o,o+l));else n.getRandomValues(c);return"function"==typeof e?ln((function(){e(null,c)})):c}:t.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}}));const on=new TextEncoder,dn=new TextDecoder;var rn=function(){if("undefined"!=typeof globalThis)return globalThis;if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;throw new Error("unable to locate global object")}();const an=t=>{let l=t;return l instanceof Uint8Array&&(l=dn.decode(l)),l=l.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,""),new Uint8Array(rn.atob(l).split("").map(t=>t.charCodeAt(0)))};class un extends Error{constructor(t){super(t),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}class Zn extends un{constructor(t,l="unspecified",i="unspecified"){super(t),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=l,this.reason=i}}class sn extends un{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}}class bn extends un{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}}class mn extends un{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}}class hn extends un{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}}class In extends un{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}}class pn extends Zn{constructor(){super(...arguments),this.code="ERR_JWT_EXPIRED"}}var Gn=rn.crypto;function yn(){if(!rn.isSecureContext&&!rn.crypto.subtle)throw new un("Web Cryptography API is available only in Secure Contexts. See: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts")}const gn=async t=>{var l,i;const{algorithm:n,keyUsages:e}=function(t){let l,i;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":l={name:"HMAC",hash:"SHA-"+t.alg.substr(-3)},i=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new bn(t.alg+" keys cannot be imported as CryptoKey instances");case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":l={name:"AES-GCM"},i=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":l={name:"AES-KW"},i=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":l={name:"PBKDF2"},i=["deriveBits"];break;default:throw new bn('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":l={name:"RSA-PSS",hash:"SHA-"+t.alg.substr(-3)},i=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":l={name:"RSASSA-PKCS1-v1_5",hash:"SHA-"+t.alg.substr(-3)},i=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":l={name:"RSA-OAEP",hash:"SHA-"+(parseInt(t.alg.substr(-3),10)||1)},i=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new bn('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":case"ES384":case"ES512":l={name:"ECDSA",namedCurve:t.crv},i=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":l={name:"ECDH",namedCurve:t.crv},i=t.d?["deriveBits"]:[];break;default:throw new bn('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;default:throw new bn('unsupported or invalid JWK "kty" (Key Type) Parameter value')}return{algorithm:l,keyUsages:i}}(t);let c="jwk",o={...t};return delete o.alg,"PBKDF2"===n.name&&(c="raw",o=an(t.k)),yn(),Gn.subtle.importKey(c,o,n,null!==(l=t.ext)&&void 0!==l&&l,null!==(i=t.key_ops)&&void 0!==i?i:e)};function Xn(t){return!!t&&t.constructor===Object}async function Vn(t,l,i){if(!Xn(t))throw new TypeError("JWK must be an object");if(l||(l=t.alg),"string"!=typeof l||!l)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(t.kty){case"oct":if("string"!=typeof t.k||!t.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=i||(i=!0!==t.ext),i?gn({...t,alg:l,ext:!1}):an(t.k);case"RSA":if(void 0!==t.oth)throw new bn('RSA JWK "oth" (Other Primes Info) Parameter value is unsupported');case"EC":case"OKP":return gn({...t,alg:l});default:throw new bn('unsupported "kty" (Key Type) Parameter value')}}const Wn=function(t,l,i,n){if(void 0!==n.crit&&void 0===i.crit)throw new t('"crit" (Critical) Header Parameter MUST be integrity protected');if(!i||void 0===i.crit)return new Set;if(!Array.isArray(i.crit)||0===i.crit.length||i.crit.some(t=>"string"!=typeof t||0===t.length))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');for(const e of i.crit){if(!l.has(e))throw new bn(`Extension Header Parameter "${e}" is not supported by this implementation`);if(void 0===n[e])throw new t(`Extension Header Parameter "${e}" is missing`);if(l.get(e)&&void 0===i[e])throw new t(`Extension Header Parameter "${e}" MUST be integrity protected`)}return new Set(i.crit)}.bind(void 0,mn,new Map([["b64",!0]])),Cn=((t,l)=>{if(void 0!==l&&(!Array.isArray(l)||l.some(t=>"string"!=typeof t)))throw new TypeError(`"${t}" option must be an array of strings`);if(l)return new Set(l)}).bind(void 0,"algorithms");const Rn=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var fn=t=>{const l=Rn.exec(t);if(!l)throw new TypeError("invalid time period format");const i=parseFloat(l[1]);switch(l[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(i);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*i);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*i);case"day":case"days":case"d":return Math.round(86400*i);case"week":case"weeks":case"w":return Math.round(604800*i);default:return Math.round(31557600*i)}};const Sn=t=>t.toLowerCase().replace(/^application\//,"");var vn=(t,l,i={})=>{const{typ:n}=i;if(n&&("string"!=typeof t.typ||Sn(t.typ)!==Sn(n)))throw new Zn('unexpected "typ" JWT header value',"typ","check_failed");let e;try{e=JSON.parse(dn.decode(l))}catch(t){}if("object"!=typeof e||!e||Array.isArray(e))throw new hn("JWT Claims Set must be a top-level JSON object");const{issuer:c}=i;if(c&&!("string"==typeof c?[c]:c).includes(e.iss))throw new Zn('unexpected "iss" claim value',"iss","check_failed");const{subject:o}=i;if(o&&e.sub!==o)throw new Zn('unexpected "sub" claim value',"sub","check_failed");const{audience:d}=i;if(d&&(a="string"==typeof d?[d]:d,!("string"==typeof(r=e.aud)?a.includes(r):a.some(Set.prototype.has.bind(new Set(r))))))throw new Zn('unexpected "aud" claim value',"aud","check_failed");var r,a;let u;switch(typeof i.clockTolerance){case"string":u=fn(i.clockTolerance);break;case"number":u=i.clockTolerance;break;case"undefined":u=0;break;default:throw new TypeError("invalid clockTolerance option type")}const{currentDate:Z}=i,s=(b=Z||new Date,Math.floor(b.getTime()/1e3));var b;if(void 0!==e.iat||i.maxTokenAge){if("number"!=typeof e.iat)throw new Zn('"iat" claim must be a number',"iat","invalid");if(void 0===e.exp&&e.iat>s+u)throw new Zn('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}if(void 0!==e.nbf){if("number"!=typeof e.nbf)throw new Zn('"nbf" claim must be a number',"nbf","invalid");if(e.nbf>s+u)throw new Zn('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==e.exp){if("number"!=typeof e.exp)throw new Zn('"exp" claim must be a number',"exp","invalid");if(e.exp<=s-u)throw new pn('"exp" claim timestamp check failed',"exp","check_failed")}if(i.maxTokenAge){const t=s-e.iat;if(t-u>("number"==typeof i.maxTokenAge?i.maxTokenAge:fn(i.maxTokenAge)))throw new pn('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(t<0-u)throw new Zn('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return e};class Kn{constructor(){}static base64URLEncode(t){return Bi.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}static getCodeVerifier(){return this.base64URLEncode(cn(32))}static getCodeChallenge(t){return this.base64URLEncode(new G(zi((new TextEncoder).encode(t))))}static getSupportedSignatureAlgorithms(){return["RS256","RS512","RS384","PS256"]}static getJWKForTheIdToken(t,l){const i=JSON.parse(Bi.decode(t,"utf8"));for(const t of l)if(i.kid===t.kid)return Vn({alg:t.alg,e:t.e,kty:t.kty,n:t.n});return Promise.reject(new Ul("CRYPTO_UTIL-GTFTIT-IV01","crypto-utils","getJWKForTheIdToken","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+i.kid+", Expected values: "+l.map(t=>t.kid).join(", ")))}static isValidIdToken(t,l,i,n,e,c){return async function(t,l,i){const n=await async function(t,l,i){if(t instanceof Uint8Array&&(t=dn.decode(t)),"string"!=typeof t)throw new mn("Compact JWS must be a string or Uint8Array");const{0:n,1:e,2:c,length:o}=t.split(".");if(3!==o)throw new mn("Invalid Compact JWS");const d=await async function(t,l,i){if(!Xn(t))throw new mn("Flattened JWS must be an object");if(void 0===t.protected&&void 0===t.header)throw new mn('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==t.protected&&"string"!=typeof t.protected)throw new mn("JWS Protected Header incorrect type");if(void 0===t.payload)throw new mn("JWS Payload missing");if("string"!=typeof t.signature)throw new mn("JWS Signature missing or incorrect type");if(void 0!==t.header&&!Xn(t.header))throw new mn("JWS Unprotected Header incorrect type");let n={};if(t.protected){const l=an(t.protected);n=JSON.parse(dn.decode(l))}if(!((...t)=>{const l=t.filter(Boolean);if(0===l.length||1===l.length)return!0;let i;for(const t of l){const l=Object.keys(t);if(i&&0!==i.size)for(const t of l){if(i.has(t))return!1;i.add(t)}else i=new Set(l)}return!0})(n,t.header))throw new mn("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const e={...n,...t.header};let c=!0;if(Wn(n,e).has("b64")&&(c=n.b64,"boolean"!=typeof c))throw new mn('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:o}=e;if("string"!=typeof o||!o)throw new mn('JWS "alg" (Algorithm) Header Parameter missing or invalid');const d=i&&Cn(i.algorithms);if(d&&!d.has(o))throw new sn('"alg" (Algorithm) Header Parameter not allowed');if(c){if("string"!=typeof t.payload)throw new mn("JWS Payload must be a string")}else if("string"!=typeof t.payload&&!(t.payload instanceof Uint8Array))throw new mn("JWS Payload must be a string or an Uint8Array instance");"function"==typeof l&&(l=await l(n,t)),((t,l)=>{if(t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||t.match(/^A\d{3}(?:GCM)KW$/)){if(l instanceof Uint8Array||"secret"===l.type)return;throw new TypeError('CryptoKey or KeyObject instances for symmetric algorithms must be of type "secret"')}if(l instanceof Uint8Array)throw new TypeError("CryptoKey or KeyObject instances must be used for asymmetric algorithms");if("secret"===l.type)throw new TypeError('CryptoKey or KeyObject instances for asymmetric algorithms must not be of type "secret"')})(o,l);const r=function(...t){const l=t.reduce((t,{length:l})=>t+l,0),i=new Uint8Array(l);let n=0;return t.forEach(t=>{i.set(t,n),n+=t.length}),i}(on.encode(t.protected||""),on.encode("."),"string"==typeof t.payload?on.encode(t.payload):t.payload),a=an(t.signature);if(!await(async(t,l,i,n)=>{let e;if(yn(),l instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError("symmetric keys are only applicable for HMAC-based algorithms");e=await Gn.subtle.importKey("raw",l,{hash:"SHA-"+t.substr(-3),name:"HMAC"},!1,["verify"])}else e=l;return((t,l)=>{if(t.startsWith("HS")){const i=parseInt(t.substr(-3),10),{length:n}=l.algorithm;if("number"!=typeof n||n<i)throw new TypeError(`${t} requires symmetric keys to be ${i} bits or larger`)}if(t.startsWith("RS")||t.startsWith("PS")){const{modulusLength:i}=l.algorithm;if("number"!=typeof i||i<2048)throw new TypeError(t+" requires key modulusLength to be 2048 bits or larger")}})(t,e),Gn.subtle.verify(function(t){switch(t){case"HS256":return{hash:"SHA-256",name:"HMAC"};case"HS384":return{hash:"SHA-384",name:"HMAC"};case"HS512":return{hash:"SHA-512",name:"HMAC"};case"PS256":return{hash:"SHA-256",name:"RSA-PSS",saltLength:32};case"PS384":return{hash:"SHA-384",name:"RSA-PSS",saltLength:48};case"PS512":return{hash:"SHA-512",name:"RSA-PSS",saltLength:64};case"RS256":return{hash:"SHA-256",name:"RSASSA-PKCS1-v1_5"};case"RS384":return{hash:"SHA-384",name:"RSASSA-PKCS1-v1_5"};case"RS512":return{hash:"SHA-512",name:"RSASSA-PKCS1-v1_5"};case"ES256":return{hash:"SHA-256",name:"ECDSA",namedCurve:"P-256"};case"ES384":return{hash:"SHA-384",name:"ECDSA",namedCurve:"P-384"};case"ES512":return{hash:"SHA-512",name:"ECDSA",namedCurve:"P-521"};default:throw new bn(`alg ${t} is unsupported either by JOSE or your javascript runtime`)}}(t),e,i,n)})(o,l,a,r))throw new In;let u;u=c?an(t.payload):"string"==typeof t.payload?on.encode(t.payload):t.payload;const Z={payload:u};return void 0!==t.protected&&(Z.protectedHeader=n),void 0!==t.header&&(Z.unprotectedHeader=t.header),Z}({payload:e||void 0,protected:n||void 0,signature:c||void 0},l,i);return{payload:d.payload,protectedHeader:d.protectedHeader}}(t,l,i);return{payload:vn(n.protectedHeader,n.payload,i),protectedHeader:n.protectedHeader}}(t,l,{algorithms:this.getSupportedSignatureAlgorithms(),audience:i,clockTolerance:c,issuer:n,subject:e}).then(()=>Promise.resolve(!0)).catch(t=>Promise.reject(new Ul("CRYPTO_UTIL-IVIT-IV02","crypto-utils","isValidIdToken","Validating ID token failed",t)))}static decodeIDToken(t){try{const l=Bi.decode(t.split(".")[1],"utf8");return JSON.parse(l)}catch(t){throw new Ul("CRYPTO_UTIL-DIT-IV01","crypto-utils","decodeIDToken","Decoding ID token failed.",t)}}}class Yn{constructor(){}static getAuthenticatedUserInfo(t){var l,i,n,e;const c=Kn.decodeIDToken(t),o=this.getTenantDomainFromIdTokenPayload(c),d=null!==(l=null==c?void 0:c.username)&&void 0!==l?l:"",r=null!==(i=c.given_name)&&void 0!==i?i:"",a=null!==(n=c.family_name)&&void 0!==n?n:"",u=r&&a?`${r} ${a}`:r||a||"",Z=null!==(e=c.preferred_username)&&void 0!==e?e:u;return Object.assign({displayName:Z,tenantDomain:o,username:d},this.filterClaimsFromIDTokenPayload(c))}static filterClaimsFromIDTokenPayload(t){const l=Object.assign({},t);null==l||delete l.iss,null==l||delete l.aud,null==l||delete l.exp,null==l||delete l.iat,null==l||delete l.acr,null==l||delete l.amr,null==l||delete l.azp,null==l||delete l.auth_time,null==l||delete l.nonce,null==l||delete l.c_hash,null==l||delete l.at_hash,null==l||delete l.nbf,null==l||delete l.isk,null==l||delete l.sid;const i={};return Object.entries(l).forEach(([t,l])=>{const n=t.split("_").map((t,l)=>0===l?t:[t[0].toUpperCase(),...t.slice(1)].join("")).join("");i[n]=l}),i}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}}Yn.getTenantDomainFromIdTokenPayload=(t,l="@")=>{const i=t.sub.split(l);return i.length>2?i[i.length-1]:""};class Jn{constructor(t){this._dataLayer=t,this._config=()=>gl(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>gl(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}resolveWellKnownEndpoint(){return gl(this,void 0,void 0,(function*(){const t=yield this._config();return t.wellKnownEndpoint?t.serverOrigin+t.wellKnownEndpoint:t.serverOrigin+"/oauth2/token/.well-known/openid-configuration"}))}resolveEndpoints(t){return gl(this,void 0,void 0,(function*(){const l={},i=yield this._config();return i.overrideWellEndpointConfig&&i.endpoints&&Object.keys(i.endpoints).forEach(t=>{const n=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());l[n]=(null==i?void 0:i.endpoints)?i.endpoints[t]:""}),Object.assign(Object.assign({},t),l)}))}resolveFallbackEndpoints(){return gl(this,void 0,void 0,(function*(){const t={},l=yield this._config();l.endpoints&&Object.keys(l.endpoints).forEach(i=>{const n=i.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[n]=(null==l?void 0:l.endpoints)?l.endpoints[i]:""});const i={authorization_endpoint:l.serverOrigin+"/oauth2/authorize",end_session_endpoint:l.serverOrigin+"/oidc/logout",jwks_uri:l.serverOrigin+"/oauth2/jwks",check_session_iframe:l.serverOrigin+"/oidc/checksession",revocation_endpoint:l.serverOrigin+"/oauth2/revoke",token_endpoint:l.serverOrigin+"/oauth2/token"};return Object.assign(Object.assign({},t),i)}))}validateIdToken(t){return gl(this,void 0,void 0,(function*(){const l=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,i=yield this._config();return l&&0!==l.trim().length?yl.get(l,{withCredentials:null==i?void 0:i.sendCookiesInRequests}).then(l=>gl(this,void 0,void 0,(function*(){if(200!==l.status)return Promise.reject(new Ul("AUTH_HELPER-VIT-NR02","authentication-helper","validateIdToken","Invalid response status received for jwks request.","The request sent to get the jwks returned "+l.status+" , which is invalid."));const i=(yield this._oidcProviderMetaData()).issuer,n=(yield this.resolveWellKnownEndpoint()).split("/.well-known")[0];return i&&i===n?Kn.getJWKForTheIdToken(t.split(".")[0],l.data.keys).then(l=>gl(this,void 0,void 0,(function*(){return Kn.isValidIdToken(t,l,(yield this._config()).clientID,i,Kn.decodeIDToken(t).sub,(yield this._config()).clockTolerance).then(t=>t).catch(t=>Promise.reject(new Ul("AUTH_HELPER-VIT-ES03","authentication-helper","validateIdToken",void 0,void 0,t)))}))).catch(t=>Promise.reject(new Ul("AUTH_HELPER-VIT-ES04","authentication-helper","validateIdToken",void 0,void 0,t))):Promise.resolve(!1)}))).catch(t=>{var l,i,n;return Promise.reject(new Hl("AUTH_HELPER-VIT-NR05","authentication-helper","validateIdToken","Request to jwks endpoint failed.","The request sent to get the jwks from the server failed.",null!==(l=null==t?void 0:t.code)&&void 0!==l?l:"",null==t?void 0:t.message,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.status,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data))}):Promise.reject(new Ul("AUTH_HELPER-VIT-NF01","authentication-helper","validateIdToken","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty."))}))}replaceCustomGrantTemplateTags(t){var l;return gl(this,void 0,void 0,(function*(){let i="openid";const n=yield this._config(),e=yield this._dataLayer.getSessionData();return n.scope&&n.scope.length>0&&(n.scope.includes("openid")||n.scope.push("openid"),i=n.scope.join(" ")),t.replace("{{token}}",e.access_token).replace("{{username}}",Yn.getAuthenticatedUserInfo(e.id_token).username).replace("{{scope}}",i).replace("{{clientID}}",n.clientID).replace("{{clientSecret}}",null!==(l=n.clientSecret)&&void 0!==l?l:"")}))}clearUserSessionData(){return gl(this,void 0,void 0,(function*(){yield this._dataLayer.removeOIDCProviderMetaData(),yield this._dataLayer.removeTemporaryData(),yield this._dataLayer.removeSessionData()}))}handleTokenResponse(t){return gl(this,void 0,void 0,(function*(){if(200!==t.status)return Promise.reject(new Ul("AUTH_HELPER-HTR-NR01","authentication-helper","handleTokenResponse","Invalid response status received for token request.","The request sent to get the token returned "+t.status+" , which is invalid."));if((yield this._config()).validateIDToken)return this.validateIdToken(t.data.id_token).then(l=>gl(this,void 0,void 0,(function*(){if(l){yield this._dataLayer.setSessionData(t.data);const l={accessToken:t.data.access_token,expiresIn:t.data.expires_in,idToken:t.data.id_token,refreshToken:t.data.refresh_token,scope:t.data.scope,tokenType:t.data.token_type};return Promise.resolve(l)}return Promise.reject(new Ul("AUTH_HELPER-HTR-IV02","authentication-helper","handleTokenResponse","The id token returned is not valid.","The id token returned has failed the validation check."))}))).catch(t=>Promise.reject(new Ul("AUTH_HELPER-HAT-ES03","authentication-helper","handleTokenResponse",void 0,void 0,t)));{const l={accessToken:t.data.access_token,expiresIn:t.data.expires_in,idToken:t.data.id_token,refreshToken:t.data.refresh_token,scope:t.data.scope,tokenType:t.data.token_type};return yield this._dataLayer.setSessionData(t.data),Promise.resolve(l)}}))}}class Nn{constructor(t){this._authenticationHelper=new Jn(t),this._dataLayer=t,this._config=()=>gl(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>gl(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(t){return gl(this,void 0,void 0,(function*(){const l=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),i=yield this._config();if(!l||0===l.trim().length)throw new Ul("AUTH_CORE-GAU-NF01","authentication-core","getAuthorizationURL","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");const n=new URL(l);n.searchParams.append("response_type","code"),n.searchParams.append("client_id",i.clientID);let e="openid";if(i.scope&&i.scope.length>0&&(i.scope.includes("openid")||i.scope.push("openid"),e=i.scope.join(" ")),n.searchParams.append("scope",e),n.searchParams.append("redirect_uri",i.signInRedirectURL),i.responseMode&&n.searchParams.append("response_mode",i.responseMode),i.enablePKCE){const t=Kn.getCodeVerifier(),l=Kn.getCodeChallenge(t);yield this._dataLayer.setTemporaryDataParameter("pkce_code_verifier",t),n.searchParams.append("code_challenge_method","S256"),n.searchParams.append("code_challenge",l)}i.prompt&&n.searchParams.append("prompt",i.prompt);const c=t;if(c)for(const[t,l]of Object.entries(c))""!=t&&""!=l&&n.searchParams.append(t,l.toString());return n.toString()}))}requestAccessToken(t,l){return gl(this,void 0,void 0,(function*(){const i=(yield this._oidcProviderMetaData()).token_endpoint,n=yield this._config();if(!i||0===i.trim().length)return Promise.reject(new Ul("AUTH_CORE-RAT1-NF01","authentication-core","requestAccessToken","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty."));l&&(yield this._dataLayer.setSessionDataParameter("session_state",l));const e=[];e.push("client_id="+n.clientID),n.clientSecret&&n.clientSecret.trim().length>0&&e.push("client_secret="+n.clientSecret);const c=t;return e.push("code="+c),e.push("grant_type=authorization_code"),e.push("redirect_uri="+n.signInRedirectURL),n.enablePKCE&&(e.push("code_verifier="+(yield this._dataLayer.getTemporaryDataParameter("pkce_code_verifier"))),yield this._dataLayer.removeTemporaryDataParameter("pkce_code_verifier")),yl.post(i,e.join("&"),{headers:Yn.getTokenRequestHeaders(),withCredentials:n.sendCookiesInRequests}).then(t=>this._authenticationHelper.handleTokenResponse(t).then(t=>t).catch(t=>Promise.reject(new Ul("AUTH_CORE-RAT1-ES02","authentication-core","requestAccessToken",void 0,void 0,t)))).catch(t=>{var l,i,n;return Promise.reject(new Hl("AUTH_CORE-RAT1-NR03","authentication-core","requestAccessToken","Requesting access token failed","The request to get the access token from the server failed.",null!==(l=null==t?void 0:t.code)&&void 0!==l?l:"",null==t?void 0:t.message,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.status,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data))})}))}refreshAccessToken(){return gl(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,l=yield this._config(),i=yield this._dataLayer.getSessionData();if(!i.refresh_token)return Promise.reject(new Ul("AUTH_CORE-RAT2-NF01","authentication-core","refreshAccessToken","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled."));if(!t||0===t.trim().length)return Promise.reject(new Ul("AUTH_CORE-RAT2-NF02","authentication-core","refreshAccessToken","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty."));const n=[];return n.push("client_id="+l.clientID),n.push("refresh_token="+i.refresh_token),n.push("grant_type=refresh_token"),l.clientSecret&&l.clientSecret.trim().length>0&&n.push("client_secret="+l.clientSecret),yl.post(t,n.join("&"),{headers:Yn.getTokenRequestHeaders(),withCredentials:l.sendCookiesInRequests}).then(t=>this._authenticationHelper.handleTokenResponse(t).then(t=>t).catch(t=>Promise.reject(new Ul("AUTH_CORE-RAT2-ES03","authentication-core","refreshAccessToken",void 0,void 0,t)))).catch(t=>{var l,i,n;return Promise.reject(new Hl("AUTH_CORE-RAT2-NR03","authentication-core","refreshAccessToken","Refresh access token request failed.","The request to refresh the access token failed.",null!==(l=null==t?void 0:t.code)&&void 0!==l?l:"",null==t?void 0:t.message,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.status,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data))})}))}revokeAccessToken(){return gl(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,l=yield this._config();if(!t||0===t.trim().length)return Promise.reject(new Ul("AUTH_CORE-RAT3-NF01","authentication-core","revokeAccessToken","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty."));const i=[];return i.push("client_id="+l.clientID),i.push("token="+(yield this._dataLayer.getSessionData()).access_token),i.push("token_type_hint=access_token"),yl.post(t,i.join("&"),{headers:Yn.getTokenRequestHeaders(),withCredentials:l.sendCookiesInRequests}).then(t=>200!==t.status?Promise.reject(new Ul("AUTH_CORE-RAT3-NR02","authentication-core","revokeAccessToken","Invalid response status received for revoke access token request.","The request sent to revoke the access token returned "+t.status+" , which is invalid.")):(this._authenticationHelper.clearUserSessionData(),Promise.resolve(t))).catch(t=>{var l,i,n;return Promise.reject(new Hl("AUTH_CORE-RAT3-NR03","authentication-core","revokeAccessToken","The request to revoke access token failed.","The request sent to revoke the access token failed.",null!==(l=null==t?void 0:t.code)&&void 0!==l?l:"",null==t?void 0:t.message,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.status,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data))})}))}requestCustomGrant(t){return gl(this,void 0,void 0,(function*(){const l=yield this._oidcProviderMetaData(),i=yield this._config();let n;if(n=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:l.token_endpoint,!n||0===n.trim().length)return Promise.reject(new Ul("AUTH_CORE-RCG-NF01","authentication-core","requestCustomGrant","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty."));const e={data:(yield Promise.all(Object.entries(t.data).map(([t,l])=>gl(this,void 0,void 0,(function*(){const i=yield this._authenticationHelper.replaceCustomGrantTemplateTags(l);return`${t}=${i}`}))))).join("&"),headers:Object.assign({},Yn.getTokenRequestHeaders()),method:"POST",url:n,withCredentials:i.sendCookiesInRequests};return t.attachToken&&(e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer "+(yield this._dataLayer.getSessionData()).access_token})),yl(e).then(l=>200!==l.status?Promise.reject(new Ul("AUTH_CORE-RCG-NR02","authentication-core","requestCustomGrant","Invalid response status received for the custom grant request.","The request sent to get the custom grant returned "+l.status+" , which is invalid.")):t.returnsSession?this._authenticationHelper.handleTokenResponse(l).then(t=>t).catch(t=>Promise.reject(new Ul("AUTH_CORE-RCG-ES03","authentication-core","requestCustomGrant",void 0,void 0,t))):Promise.resolve(l)).catch(t=>{var l,i,n;return Promise.reject(new Hl("AUTH_CORE-RCG-NR04","authentication-core","requestCustomGrant","The custom grant request failed.","The request sent to get the custom grant failed.",null!==(l=null==t?void 0:t.code)&&void 0!==l?l:"",null==t?void 0:t.message,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.status,null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data))})}))}getBasicUserInfo(){return gl(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(),l=Yn.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let i={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(l).forEach(t=>{void 0!==l[t]&&""!==l[t]&&null!==l[t]||delete l[t]}),i=Object.assign(Object.assign({},i),l),i}))}getDecodedIDToken(){return gl(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData()).id_token;return Kn.decodeIDToken(t)}))}getIDToken(){return gl(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData()).id_token}))}getOIDCProviderMetaData(t){return gl(this,void 0,void 0,(function*(){if(!t&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve(!0);const l=yield this._authenticationHelper.resolveWellKnownEndpoint();return yl.get(l).then(t=>gl(this,void 0,void 0,(function*(){return 200!==t.status?Promise.reject(new Ul("AUTH_CORE-GOPM-NR01","authentication-core","getOIDCProviderMetaData","Invalid response status received for OIDC provider meta data request.","The request sent to the well-known endpoint to get the OIDC provider meta data returned "+t.status+" , which is invalid.")):(yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(t.data)),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve(!0))}))).catch(()=>gl(this,void 0,void 0,(function*(){return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveFallbackEndpoints()),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve(!0)})))}))}getOIDCServiceEndpoints(){return gl(this,void 0,void 0,(function*(){const t=yield this._oidcProviderMetaData();return{authorizationEndpoint:t.authorization_endpoint,checkSessionIframe:t.check_session_iframe,endSessionEndpoint:t.end_session_endpoint,introspectionEndpoint:t.introspection_endpoint,issuer:t.issuer,jwksUri:t.jwks_uri,registrationEndpoint:t.registration_endpoint,revocationEndpoint:t.revocation_endpoint,tokenEndpoint:t.token_endpoint,userinfoEndpoint:t.userinfo_endpoint,wellKnownEndpoint:yield this._authenticationHelper.resolveWellKnownEndpoint()}}))}getSignOutURL(){var t,l,i;return gl(this,void 0,void 0,(function*(){const n=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,e=yield this._config();if(!n||0===n.trim().length)throw new Ul("AUTH_CORE-GSOU-NF01","authentication-core","getSignOutURL","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");const c=null===(l=yield this._dataLayer.getSessionData())||void 0===l?void 0:l.id_token;if(!c||0===c.trim().length)throw new Ul("AUTH_CORE-GSOU-NF02","authentication-core","getSignOutURL","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");const o=null!==(i=null==e?void 0:e.signOutRedirectURL)&&void 0!==i?i:null==e?void 0:e.signInRedirectURL;if(!o||0===o.trim().length)throw new Ul("AUTH_CORE-GSOU-NF03","authentication-core","getSignOutURL","No sign-out redirect URL found.","The sign-out redirect URL cannot be found or the URL passed to the SDK is empty. No sign-in redirect URL has been found either. ");return`${n}?id_token_hint=${c}&post_logout_redirect_uri=${o}&state=sign_out_success`}))}signOut(){return gl(this,void 0,void 0,(function*(){const t=yield this.getSignOutURL();return this._authenticationHelper.clearUserSessionData(),t}))}getAccessToken(){var t;return gl(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData())||void 0===t?void 0:t.access_token}))}isAuthenticated(){return gl(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken())}))}getPKCECode(){return gl(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter("pkce_code_verifier")}))}setPKCECode(t){return gl(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter("pkce_code_verifier",t)}))}updateConfig(t){return gl(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(t),t.overrideWellEndpointConfig?(null==t?void 0:t.endpoints)&&(yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints({}))):(null==t?void 0:t.endpoints)&&(yield this.getOIDCProviderMetaData(!0))}))}}class Ln{constructor(t,l){this._id=t,this._store=l}setDataInBulk(t,l){var i;return gl(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(t))&&void 0!==i?i:null,e=n&&JSON.parse(n),c=Object.assign(Object.assign({},e),l),o=JSON.stringify(c);yield this._store.setData(t,o)}))}setValue(t,l,i){var n;return gl(this,void 0,void 0,(function*(){const e=null!==(n=yield this._store.getData(t))&&void 0!==n?n:null,c=e&&JSON.parse(e),o=Object.assign(Object.assign({},c),{[l]:i}),d=JSON.stringify(o);yield this._store.setData(t,d)}))}removeValue(t,l){var i;return gl(this,void 0,void 0,(function*(){const n=null!==(i=yield this._store.getData(t))&&void 0!==i?i:null,e=n&&JSON.parse(n),c=Object.assign({},e);delete c[l];const o=JSON.stringify(c);yield this._store.setData(t,o)}))}_resolveKey(t){return`${t}-${this._id}`}setConfigData(t){return gl(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(fl.ConfigData),t)}))}setOIDCProviderMetaData(t){return gl(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(fl.OIDCProviderMetaData),t)}))}setTemporaryData(t){return gl(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(fl.TemporaryData),t)}))}setSessionData(t){return gl(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(fl.SessionData),t)}))}getConfigData(){var t;return gl(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(fl.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return gl(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(fl.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(){var t;return gl(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(fl.TemporaryData)))&&void 0!==t?t:null)}))}getSessionData(){var t;return gl(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(fl.SessionData)))&&void 0!==t?t:null)}))}removeConfigData(){return gl(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(fl.ConfigData))}))}removeOIDCProviderMetaData(){return gl(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(fl.OIDCProviderMetaData))}))}removeTemporaryData(){return gl(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(fl.TemporaryData))}))}removeSessionData(){return gl(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(fl.SessionData))}))}getConfigDataParameter(t){return gl(this,void 0,void 0,(function*(){const l=yield this._store.getData(this._resolveKey(fl.ConfigData));return l&&JSON.parse(l)[t]}))}getOIDCProviderMetaDataParameter(t){return gl(this,void 0,void 0,(function*(){const l=yield this._store.getData(this._resolveKey(fl.OIDCProviderMetaData));return l&&JSON.parse(l)[t]}))}getTemporaryDataParameter(t){return gl(this,void 0,void 0,(function*(){const l=yield this._store.getData(this._resolveKey(fl.TemporaryData));return l&&JSON.parse(l)[t]}))}getSessionDataParameter(t){return gl(this,void 0,void 0,(function*(){const l=yield this._store.getData(this._resolveKey(fl.SessionData));return l&&JSON.parse(l)[t]}))}setConfigDataParameter(t,l){return gl(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(fl.ConfigData),t,l)}))}setOIDCProviderMetaDataParameter(t,l){return gl(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(fl.OIDCProviderMetaData),t,l)}))}setTemporaryDataParameter(t,l){return gl(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(fl.TemporaryData),t,l)}))}setSessionDataParameter(t,l){return gl(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(fl.SessionData),t,l)}))}removeConfigDataParameter(t){return gl(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(fl.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return gl(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(fl.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t){return gl(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(fl.TemporaryData),t)}))}removeSessionDataParameter(t){return gl(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(fl.SessionData),t)}))}}const Un={clockTolerance:300,enablePKCE:!0,responseMode:pl.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class Hn{
|
|
30
|
+
***************************************************************************** */function gn(t,n,l,i){return new(l||(l=Promise))((function(e,c){function o(t){try{r(i.next(t))}catch(t){c(t)}}function d(t){try{r(i.throw(t))}catch(t){c(t)}}function r(t){var n;t.done?e(t.value):(n=t.value,n instanceof l?n:new l((function(t){t(n)}))).then(o,d)}r((i=i.apply(t,n||[])).next())}))}(yn=Gn||(Gn={})).formPost="form_post",yn.query="query";const Vn="{{token}}",Wn="{{username}}",Rn="{{scope}}",Cn="{{clientID}}",fn="{{clientSecret}}";var Sn;!function(t){t.ConfigData="config_data",t.OIDCProviderMetaData="oidc_provider_meta_data",t.SessionData="session_data",t.TemporaryData="temporary_data"}(Sn||(Sn={}));const vn="refresh_token_timer",Kn="pkce_code_verifier",Yn="code",Jn="session_state",Nn="sign_out_url",Ln="sign_out_success",Hn="openid";var Un;!function(t){t.ReactNative="REACT_NATIVE",t.Browser="BROWSER",t.Node="NODE"}(Un||(Un={}));class xn extends Error{constructor(t,n,l,i,e,c){super(null!=i?i:null==c?void 0:c.message),this.name=this.constructor.name,this.code=t,this.file=n,this.method=l,this.description=e,this.error=c,Object.setPrototypeOf(this,new.target.prototype)}}class Tn extends xn{constructor(t,n,l,i,e,c,o,d,r){super(t,n,l,i,e),this.name=this.constructor.name,this.code=t,this.file=n,this.method=l,this.description=e,this.networkErrorCode=c,this.networkErrorMessage=o,this.status=d,this.networkErrorData=r}}var kn="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{};function Fn(t,n,l){return t(l={path:n,exports:{},require:function(t,n){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==n&&l.path)}},l.exports),l.exports}var Bn=void 0!==e?e:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},zn=[],wn=[],An="undefined"!=typeof Uint8Array?Uint8Array:Array,Mn=!1;function Pn(){Mn=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,l=t.length;n<l;++n)zn[n]=t[n],wn[t.charCodeAt(n)]=n;wn["-".charCodeAt(0)]=62,wn["_".charCodeAt(0)]=63}function Qn(t,n,l){for(var i,e,c=[],o=n;o<l;o+=3)i=(t[o]<<16)+(t[o+1]<<8)+t[o+2],c.push(zn[(e=i)>>18&63]+zn[e>>12&63]+zn[e>>6&63]+zn[63&e]);return c.join("")}function jn(t){var n;Mn||Pn();for(var l=t.length,i=l%3,e="",c=[],o=16383,d=0,r=l-i;d<r;d+=o)c.push(Qn(t,d,d+o>r?r:d+o));return 1===i?(n=t[l-1],e+=zn[n>>2],e+=zn[n<<4&63],e+="=="):2===i&&(n=(t[l-2]<<8)+t[l-1],e+=zn[n>>10],e+=zn[n>>4&63],e+=zn[n<<2&63],e+="="),c.push(e),c.join("")}function En(t,n,l,i,e){var c,o,d=8*e-i-1,r=(1<<d)-1,a=r>>1,u=-7,Z=l?e-1:0,s=l?-1:1,b=t[n+Z];for(Z+=s,c=b&(1<<-u)-1,b>>=-u,u+=d;u>0;c=256*c+t[n+Z],Z+=s,u-=8);for(o=c&(1<<-u)-1,c>>=-u,u+=i;u>0;o=256*o+t[n+Z],Z+=s,u-=8);if(0===c)c=1-a;else{if(c===r)return o?NaN:1/0*(b?-1:1);o+=Math.pow(2,i),c-=a}return(b?-1:1)*o*Math.pow(2,c-i)}function Dn(t,n,l,i,e,c){var o,d,r,a=8*c-e-1,u=(1<<a)-1,Z=u>>1,s=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,b=i?0:c-1,m=i?1:-1,h=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(d=isNaN(n)?1:0,o=u):(o=Math.floor(Math.log(n)/Math.LN2),n*(r=Math.pow(2,-o))<1&&(o--,r*=2),(n+=o+Z>=1?s/r:s*Math.pow(2,1-Z))*r>=2&&(o++,r/=2),o+Z>=u?(d=0,o=u):o+Z>=1?(d=(n*r-1)*Math.pow(2,e),o+=Z):(d=n*Math.pow(2,Z-1)*Math.pow(2,e),o=0));e>=8;t[l+b]=255&d,b+=m,d/=256,e-=8);for(o=o<<e|d,a+=e;a>0;t[l+b]=255&o,b+=m,o/=256,a-=8);t[l+b-m]|=128*h}var On={}.toString,qn=Array.isArray||function(t){return"[object Array]"==On.call(t)};nl.TYPED_ARRAY_SUPPORT=void 0===Bn.TYPED_ARRAY_SUPPORT||Bn.TYPED_ARRAY_SUPPORT;var _n=$n();function $n(){return nl.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function tl(t,n){if($n()<n)throw new RangeError("Invalid typed array length");return nl.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(n)).__proto__=nl.prototype:(null===t&&(t=new nl(n)),t.length=n),t}function nl(t,n,l){if(!(nl.TYPED_ARRAY_SUPPORT||this instanceof nl))return new nl(t,n,l);if("number"==typeof t){if("string"==typeof n)throw new Error("If encoding is specified then the first argument must be a string");return el(this,t)}return ll(this,t,n,l)}function ll(t,n,l,i){if("number"==typeof n)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&n instanceof ArrayBuffer?function(t,n,l,i){if(n.byteLength,l<0||n.byteLength<l)throw new RangeError("'offset' is out of bounds");if(n.byteLength<l+(i||0))throw new RangeError("'length' is out of bounds");return n=void 0===l&&void 0===i?new Uint8Array(n):void 0===i?new Uint8Array(n,l):new Uint8Array(n,l,i),nl.TYPED_ARRAY_SUPPORT?(t=n).__proto__=nl.prototype:t=cl(t,n),t}(t,n,l,i):"string"==typeof n?function(t,n,l){if("string"==typeof l&&""!==l||(l="utf8"),!nl.isEncoding(l))throw new TypeError('"encoding" must be a valid string encoding');var i=0|rl(n,l),e=(t=tl(t,i)).write(n,l);return e!==i&&(t=t.slice(0,e)),t}(t,n,l):function(t,n){if(dl(n)){var l=0|ol(n.length);return 0===(t=tl(t,l)).length||n.copy(t,0,0,l),t}if(n){if("undefined"!=typeof ArrayBuffer&&n.buffer instanceof ArrayBuffer||"length"in n)return"number"!=typeof n.length||(i=n.length)!=i?tl(t,0):cl(t,n);if("Buffer"===n.type&&qn(n.data))return cl(t,n.data)}var i;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t,n)}function il(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function el(t,n){if(il(n),t=tl(t,n<0?0:0|ol(n)),!nl.TYPED_ARRAY_SUPPORT)for(var l=0;l<n;++l)t[l]=0;return t}function cl(t,n){var l=n.length<0?0:0|ol(n.length);t=tl(t,l);for(var i=0;i<l;i+=1)t[i]=255&n[i];return t}function ol(t){if(t>=$n())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+$n().toString(16)+" bytes");return 0|t}function dl(t){return!(null==t||!t._isBuffer)}function rl(t,n){if(dl(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var l=t.length;if(0===l)return 0;for(var i=!1;;)switch(n){case"ascii":case"latin1":case"binary":return l;case"utf8":case"utf-8":case void 0:return Hl(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*l;case"hex":return l>>>1;case"base64":return Ul(t).length;default:if(i)return Hl(t).length;n=(""+n).toLowerCase(),i=!0}}function al(t,n,l){var i=!1;if((void 0===n||n<0)&&(n=0),n>this.length)return"";if((void 0===l||l>this.length)&&(l=this.length),l<=0)return"";if((l>>>=0)<=(n>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return Wl(this,n,l);case"utf8":case"utf-8":return Xl(this,n,l);case"ascii":return gl(this,n,l);case"latin1":case"binary":return Vl(this,n,l);case"base64":return yl(this,n,l);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Rl(this,n,l);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0}}function ul(t,n,l){var i=t[n];t[n]=t[l],t[l]=i}function Zl(t,n,l,i,e){if(0===t.length)return-1;if("string"==typeof l?(i=l,l=0):l>2147483647?l=2147483647:l<-2147483648&&(l=-2147483648),l=+l,isNaN(l)&&(l=e?0:t.length-1),l<0&&(l=t.length+l),l>=t.length){if(e)return-1;l=t.length-1}else if(l<0){if(!e)return-1;l=0}if("string"==typeof n&&(n=nl.from(n,i)),dl(n))return 0===n.length?-1:sl(t,n,l,i,e);if("number"==typeof n)return n&=255,nl.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(t,n,l):Uint8Array.prototype.lastIndexOf.call(t,n,l):sl(t,[n],l,i,e);throw new TypeError("val must be string, number or Buffer")}function sl(t,n,l,i,e){var c,o=1,d=t.length,r=n.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||n.length<2)return-1;o=2,d/=2,r/=2,l/=2}function a(t,n){return 1===o?t[n]:t.readUInt16BE(n*o)}if(e){var u=-1;for(c=l;c<d;c++)if(a(t,c)===a(n,-1===u?0:c-u)){if(-1===u&&(u=c),c-u+1===r)return u*o}else-1!==u&&(c-=c-u),u=-1}else for(l+r>d&&(l=d-r),c=l;c>=0;c--){for(var Z=!0,s=0;s<r;s++)if(a(t,c+s)!==a(n,s)){Z=!1;break}if(Z)return c}return-1}function bl(t,n,l,i){l=Number(l)||0;var e=t.length-l;i?(i=Number(i))>e&&(i=e):i=e;var c=n.length;if(c%2!=0)throw new TypeError("Invalid hex string");i>c/2&&(i=c/2);for(var o=0;o<i;++o){var d=parseInt(n.substr(2*o,2),16);if(isNaN(d))return o;t[l+o]=d}return o}function ml(t,n,l,i){return xl(Hl(n,t.length-l),t,l,i)}function hl(t,n,l,i){return xl(function(t){for(var n=[],l=0;l<t.length;++l)n.push(255&t.charCodeAt(l));return n}(n),t,l,i)}function Il(t,n,l,i){return hl(t,n,l,i)}function pl(t,n,l,i){return xl(Ul(n),t,l,i)}function Gl(t,n,l,i){return xl(function(t,n){for(var l,i,e,c=[],o=0;o<t.length&&!((n-=2)<0);++o)i=(l=t.charCodeAt(o))>>8,e=l%256,c.push(e),c.push(i);return c}(n,t.length-l),t,l,i)}function yl(t,n,l){return 0===n&&l===t.length?jn(t):jn(t.slice(n,l))}function Xl(t,n,l){l=Math.min(t.length,l);for(var i=[],e=n;e<l;){var c,o,d,r,a=t[e],u=null,Z=a>239?4:a>223?3:a>191?2:1;if(e+Z<=l)switch(Z){case 1:a<128&&(u=a);break;case 2:128==(192&(c=t[e+1]))&&(r=(31&a)<<6|63&c)>127&&(u=r);break;case 3:c=t[e+1],o=t[e+2],128==(192&c)&&128==(192&o)&&(r=(15&a)<<12|(63&c)<<6|63&o)>2047&&(r<55296||r>57343)&&(u=r);break;case 4:c=t[e+1],o=t[e+2],d=t[e+3],128==(192&c)&&128==(192&o)&&128==(192&d)&&(r=(15&a)<<18|(63&c)<<12|(63&o)<<6|63&d)>65535&&r<1114112&&(u=r)}null===u?(u=65533,Z=1):u>65535&&(u-=65536,i.push(u>>>10&1023|55296),u=56320|1023&u),i.push(u),e+=Z}return function(t){var n=t.length;if(n<=4096)return String.fromCharCode.apply(String,t);for(var l="",i=0;i<n;)l+=String.fromCharCode.apply(String,t.slice(i,i+=4096));return l}(i)}function gl(t,n,l){var i="";l=Math.min(t.length,l);for(var e=n;e<l;++e)i+=String.fromCharCode(127&t[e]);return i}function Vl(t,n,l){var i="";l=Math.min(t.length,l);for(var e=n;e<l;++e)i+=String.fromCharCode(t[e]);return i}function Wl(t,n,l){var i=t.length;(!n||n<0)&&(n=0),(!l||l<0||l>i)&&(l=i);for(var e="",c=n;c<l;++c)e+=Ll(t[c]);return e}function Rl(t,n,l){for(var i=t.slice(n,l),e="",c=0;c<i.length;c+=2)e+=String.fromCharCode(i[c]+256*i[c+1]);return e}function Cl(t,n,l){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+n>l)throw new RangeError("Trying to access beyond buffer length")}function fl(t,n,l,i,e,c){if(!dl(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>e||n<c)throw new RangeError('"value" argument is out of bounds');if(l+i>t.length)throw new RangeError("Index out of range")}function Sl(t,n,l,i){n<0&&(n=65535+n+1);for(var e=0,c=Math.min(t.length-l,2);e<c;++e)t[l+e]=(n&255<<8*(i?e:1-e))>>>8*(i?e:1-e)}function vl(t,n,l,i){n<0&&(n=4294967295+n+1);for(var e=0,c=Math.min(t.length-l,4);e<c;++e)t[l+e]=n>>>8*(i?e:3-e)&255}function Kl(t,n,l,i,e,c){if(l+i>t.length)throw new RangeError("Index out of range");if(l<0)throw new RangeError("Index out of range")}function Yl(t,n,l,i,e){return e||Kl(t,0,l,4),Dn(t,n,l,i,23,4),l+4}function Jl(t,n,l,i,e){return e||Kl(t,0,l,8),Dn(t,n,l,i,52,8),l+8}nl.poolSize=8192,nl._augment=function(t){return t.__proto__=nl.prototype,t},nl.from=function(t,n,l){return ll(null,t,n,l)},nl.TYPED_ARRAY_SUPPORT&&(nl.prototype.__proto__=Uint8Array.prototype,nl.__proto__=Uint8Array),nl.alloc=function(t,n,l){return function(t,n,l,i){return il(n),n<=0?tl(t,n):void 0!==l?"string"==typeof i?tl(t,n).fill(l,i):tl(t,n).fill(l):tl(t,n)}(null,t,n,l)},nl.allocUnsafe=function(t){return el(null,t)},nl.allocUnsafeSlow=function(t){return el(null,t)},nl.isBuffer=Tl,nl.compare=function(t,n){if(!dl(t)||!dl(n))throw new TypeError("Arguments must be Buffers");if(t===n)return 0;for(var l=t.length,i=n.length,e=0,c=Math.min(l,i);e<c;++e)if(t[e]!==n[e]){l=t[e],i=n[e];break}return l<i?-1:i<l?1:0},nl.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},nl.concat=function(t,n){if(!qn(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return nl.alloc(0);var l;if(void 0===n)for(n=0,l=0;l<t.length;++l)n+=t[l].length;var i=nl.allocUnsafe(n),e=0;for(l=0;l<t.length;++l){var c=t[l];if(!dl(c))throw new TypeError('"list" argument must be an Array of Buffers');c.copy(i,e),e+=c.length}return i},nl.byteLength=rl,nl.prototype._isBuffer=!0,nl.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var n=0;n<t;n+=2)ul(this,n,n+1);return this},nl.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var n=0;n<t;n+=4)ul(this,n,n+3),ul(this,n+1,n+2);return this},nl.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var n=0;n<t;n+=8)ul(this,n,n+7),ul(this,n+1,n+6),ul(this,n+2,n+5),ul(this,n+3,n+4);return this},nl.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?Xl(this,0,t):al.apply(this,arguments)},nl.prototype.equals=function(t){if(!dl(t))throw new TypeError("Argument must be a Buffer");return this===t||0===nl.compare(this,t)},nl.prototype.inspect=function(){var t="";return this.length>0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),"<Buffer "+t+">"},nl.prototype.compare=function(t,n,l,i,e){if(!dl(t))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===l&&(l=t?t.length:0),void 0===i&&(i=0),void 0===e&&(e=this.length),n<0||l>t.length||i<0||e>this.length)throw new RangeError("out of range index");if(i>=e&&n>=l)return 0;if(i>=e)return-1;if(n>=l)return 1;if(this===t)return 0;for(var c=(e>>>=0)-(i>>>=0),o=(l>>>=0)-(n>>>=0),d=Math.min(c,o),r=this.slice(i,e),a=t.slice(n,l),u=0;u<d;++u)if(r[u]!==a[u]){c=r[u],o=a[u];break}return c<o?-1:o<c?1:0},nl.prototype.includes=function(t,n,l){return-1!==this.indexOf(t,n,l)},nl.prototype.indexOf=function(t,n,l){return Zl(this,t,n,l,!0)},nl.prototype.lastIndexOf=function(t,n,l){return Zl(this,t,n,l,!1)},nl.prototype.write=function(t,n,l,i){if(void 0===n)i="utf8",l=this.length,n=0;else if(void 0===l&&"string"==typeof n)i=n,l=this.length,n=0;else{if(!isFinite(n))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");n|=0,isFinite(l)?(l|=0,void 0===i&&(i="utf8")):(i=l,l=void 0)}var e=this.length-n;if((void 0===l||l>e)&&(l=e),t.length>0&&(l<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var c=!1;;)switch(i){case"hex":return bl(this,t,n,l);case"utf8":case"utf-8":return ml(this,t,n,l);case"ascii":return hl(this,t,n,l);case"latin1":case"binary":return Il(this,t,n,l);case"base64":return pl(this,t,n,l);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Gl(this,t,n,l);default:if(c)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),c=!0}},nl.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},nl.prototype.slice=function(t,n){var l,i=this.length;if((t=~~t)<0?(t+=i)<0&&(t=0):t>i&&(t=i),(n=void 0===n?i:~~n)<0?(n+=i)<0&&(n=0):n>i&&(n=i),n<t&&(n=t),nl.TYPED_ARRAY_SUPPORT)(l=this.subarray(t,n)).__proto__=nl.prototype;else{var e=n-t;l=new nl(e,void 0);for(var c=0;c<e;++c)l[c]=this[c+t]}return l},nl.prototype.readUIntLE=function(t,n,l){t|=0,n|=0,l||Cl(t,n,this.length);for(var i=this[t],e=1,c=0;++c<n&&(e*=256);)i+=this[t+c]*e;return i},nl.prototype.readUIntBE=function(t,n,l){t|=0,n|=0,l||Cl(t,n,this.length);for(var i=this[t+--n],e=1;n>0&&(e*=256);)i+=this[t+--n]*e;return i},nl.prototype.readUInt8=function(t,n){return n||Cl(t,1,this.length),this[t]},nl.prototype.readUInt16LE=function(t,n){return n||Cl(t,2,this.length),this[t]|this[t+1]<<8},nl.prototype.readUInt16BE=function(t,n){return n||Cl(t,2,this.length),this[t]<<8|this[t+1]},nl.prototype.readUInt32LE=function(t,n){return n||Cl(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},nl.prototype.readUInt32BE=function(t,n){return n||Cl(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},nl.prototype.readIntLE=function(t,n,l){t|=0,n|=0,l||Cl(t,n,this.length);for(var i=this[t],e=1,c=0;++c<n&&(e*=256);)i+=this[t+c]*e;return i>=(e*=128)&&(i-=Math.pow(2,8*n)),i},nl.prototype.readIntBE=function(t,n,l){t|=0,n|=0,l||Cl(t,n,this.length);for(var i=n,e=1,c=this[t+--i];i>0&&(e*=256);)c+=this[t+--i]*e;return c>=(e*=128)&&(c-=Math.pow(2,8*n)),c},nl.prototype.readInt8=function(t,n){return n||Cl(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},nl.prototype.readInt16LE=function(t,n){n||Cl(t,2,this.length);var l=this[t]|this[t+1]<<8;return 32768&l?4294901760|l:l},nl.prototype.readInt16BE=function(t,n){n||Cl(t,2,this.length);var l=this[t+1]|this[t]<<8;return 32768&l?4294901760|l:l},nl.prototype.readInt32LE=function(t,n){return n||Cl(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},nl.prototype.readInt32BE=function(t,n){return n||Cl(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},nl.prototype.readFloatLE=function(t,n){return n||Cl(t,4,this.length),En(this,t,!0,23,4)},nl.prototype.readFloatBE=function(t,n){return n||Cl(t,4,this.length),En(this,t,!1,23,4)},nl.prototype.readDoubleLE=function(t,n){return n||Cl(t,8,this.length),En(this,t,!0,52,8)},nl.prototype.readDoubleBE=function(t,n){return n||Cl(t,8,this.length),En(this,t,!1,52,8)},nl.prototype.writeUIntLE=function(t,n,l,i){t=+t,n|=0,l|=0,i||fl(this,t,n,l,Math.pow(2,8*l)-1,0);var e=1,c=0;for(this[n]=255&t;++c<l&&(e*=256);)this[n+c]=t/e&255;return n+l},nl.prototype.writeUIntBE=function(t,n,l,i){t=+t,n|=0,l|=0,i||fl(this,t,n,l,Math.pow(2,8*l)-1,0);var e=l-1,c=1;for(this[n+e]=255&t;--e>=0&&(c*=256);)this[n+e]=t/c&255;return n+l},nl.prototype.writeUInt8=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,1,255,0),nl.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[n]=255&t,n+1},nl.prototype.writeUInt16LE=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,2,65535,0),nl.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):Sl(this,t,n,!0),n+2},nl.prototype.writeUInt16BE=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,2,65535,0),nl.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):Sl(this,t,n,!1),n+2},nl.prototype.writeUInt32LE=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,4,4294967295,0),nl.TYPED_ARRAY_SUPPORT?(this[n+3]=t>>>24,this[n+2]=t>>>16,this[n+1]=t>>>8,this[n]=255&t):vl(this,t,n,!0),n+4},nl.prototype.writeUInt32BE=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,4,4294967295,0),nl.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):vl(this,t,n,!1),n+4},nl.prototype.writeIntLE=function(t,n,l,i){if(t=+t,n|=0,!i){var e=Math.pow(2,8*l-1);fl(this,t,n,l,e-1,-e)}var c=0,o=1,d=0;for(this[n]=255&t;++c<l&&(o*=256);)t<0&&0===d&&0!==this[n+c-1]&&(d=1),this[n+c]=(t/o>>0)-d&255;return n+l},nl.prototype.writeIntBE=function(t,n,l,i){if(t=+t,n|=0,!i){var e=Math.pow(2,8*l-1);fl(this,t,n,l,e-1,-e)}var c=l-1,o=1,d=0;for(this[n+c]=255&t;--c>=0&&(o*=256);)t<0&&0===d&&0!==this[n+c+1]&&(d=1),this[n+c]=(t/o>>0)-d&255;return n+l},nl.prototype.writeInt8=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,1,127,-128),nl.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[n]=255&t,n+1},nl.prototype.writeInt16LE=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,2,32767,-32768),nl.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):Sl(this,t,n,!0),n+2},nl.prototype.writeInt16BE=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,2,32767,-32768),nl.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):Sl(this,t,n,!1),n+2},nl.prototype.writeInt32LE=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,4,2147483647,-2147483648),nl.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8,this[n+2]=t>>>16,this[n+3]=t>>>24):vl(this,t,n,!0),n+4},nl.prototype.writeInt32BE=function(t,n,l){return t=+t,n|=0,l||fl(this,t,n,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),nl.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):vl(this,t,n,!1),n+4},nl.prototype.writeFloatLE=function(t,n,l){return Yl(this,t,n,!0,l)},nl.prototype.writeFloatBE=function(t,n,l){return Yl(this,t,n,!1,l)},nl.prototype.writeDoubleLE=function(t,n,l){return Jl(this,t,n,!0,l)},nl.prototype.writeDoubleBE=function(t,n,l){return Jl(this,t,n,!1,l)},nl.prototype.copy=function(t,n,l,i){if(l||(l=0),i||0===i||(i=this.length),n>=t.length&&(n=t.length),n||(n=0),i>0&&i<l&&(i=l),i===l)return 0;if(0===t.length||0===this.length)return 0;if(n<0)throw new RangeError("targetStart out of bounds");if(l<0||l>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),t.length-n<i-l&&(i=t.length-n+l);var e,c=i-l;if(this===t&&l<n&&n<i)for(e=c-1;e>=0;--e)t[e+n]=this[e+l];else if(c<1e3||!nl.TYPED_ARRAY_SUPPORT)for(e=0;e<c;++e)t[e+n]=this[e+l];else Uint8Array.prototype.set.call(t,this.subarray(l,l+c),n);return c},nl.prototype.fill=function(t,n,l,i){if("string"==typeof t){if("string"==typeof n?(i=n,n=0,l=this.length):"string"==typeof l&&(i=l,l=this.length),1===t.length){var e=t.charCodeAt(0);e<256&&(t=e)}if(void 0!==i&&"string"!=typeof i)throw new TypeError("encoding must be a string");if("string"==typeof i&&!nl.isEncoding(i))throw new TypeError("Unknown encoding: "+i)}else"number"==typeof t&&(t&=255);if(n<0||this.length<n||this.length<l)throw new RangeError("Out of range index");if(l<=n)return this;var c;if(n>>>=0,l=void 0===l?this.length:l>>>0,t||(t=0),"number"==typeof t)for(c=n;c<l;++c)this[c]=t;else{var o=dl(t)?t:Hl(new nl(t,i).toString()),d=o.length;for(c=0;c<l-n;++c)this[c+n]=o[c%d]}return this};var Nl=/[^+\/0-9A-Za-z-_]/g;function Ll(t){return t<16?"0"+t.toString(16):t.toString(16)}function Hl(t,n){var l;n=n||1/0;for(var i=t.length,e=null,c=[],o=0;o<i;++o){if((l=t.charCodeAt(o))>55295&&l<57344){if(!e){if(l>56319){(n-=3)>-1&&c.push(239,191,189);continue}if(o+1===i){(n-=3)>-1&&c.push(239,191,189);continue}e=l;continue}if(l<56320){(n-=3)>-1&&c.push(239,191,189),e=l;continue}l=65536+(e-55296<<10|l-56320)}else e&&(n-=3)>-1&&c.push(239,191,189);if(e=null,l<128){if((n-=1)<0)break;c.push(l)}else if(l<2048){if((n-=2)<0)break;c.push(l>>6|192,63&l|128)}else if(l<65536){if((n-=3)<0)break;c.push(l>>12|224,l>>6&63|128,63&l|128)}else{if(!(l<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;c.push(l>>18|240,l>>12&63|128,l>>6&63|128,63&l|128)}}return c}function Ul(t){return function(t){var n,l,i,e,c,o;Mn||Pn();var d=t.length;if(d%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[d-2]?2:"="===t[d-1]?1:0,o=new An(3*d/4-c),i=c>0?d-4:d;var r=0;for(n=0,l=0;n<i;n+=4,l+=3)e=wn[t.charCodeAt(n)]<<18|wn[t.charCodeAt(n+1)]<<12|wn[t.charCodeAt(n+2)]<<6|wn[t.charCodeAt(n+3)],o[r++]=e>>16&255,o[r++]=e>>8&255,o[r++]=255&e;return 2===c?(e=wn[t.charCodeAt(n)]<<2|wn[t.charCodeAt(n+1)]>>4,o[r++]=255&e):1===c&&(e=wn[t.charCodeAt(n)]<<10|wn[t.charCodeAt(n+1)]<<4|wn[t.charCodeAt(n+2)]>>2,o[r++]=e>>8&255,o[r++]=255&e),o}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(Nl,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function xl(t,n,l,i){for(var e=0;e<i&&!(e+l>=n.length||e>=t.length);++e)n[e+l]=t[e];return e}function Tl(t){return null!=t&&(!!t._isBuffer||kl(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&kl(t.slice(0,0))}(t))}function kl(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}var Fl=Object.freeze({__proto__:null,Buffer:nl,INSPECT_MAX_BYTES:50,SlowBuffer:function(t){return+t!=t&&(t=0),nl.alloc(+t)},isBuffer:Tl,kMaxLength:_n}),Bl=Fn((function(t,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(t){var n=t.length,l=n%4;if(!l)return t;var i=n,e=4-l,c=n+e,o=nl.alloc(c);for(o.write(t);e--;)o.write("=",i++);return o.toString()}})),zl=Fn((function(t,n){function l(t,n){return void 0===n&&(n="utf8"),nl.isBuffer(t)?e(t.toString("base64")):e(nl.from(t,n).toString("base64"))}function i(t){return t=t.toString(),Bl.default(t).replace(/\-/g,"+").replace(/_/g,"/")}function e(t){return t.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}Object.defineProperty(n,"__esModule",{value:!0});var c=l;c.encode=l,c.decode=function(t,n){return void 0===n&&(n="utf8"),nl.from(i(t),"base64").toString(n)},c.toBase64=i,c.fromBase64=e,c.toBuffer=function(t){return nl.from(i(t),"base64")},n.default=c})),wl=Fn((function(t){t.exports=zl.default,t.exports.default=t.exports})),Al=Fn((function(t,n){var l;t.exports=l=l||function(t,n){var l=Object.create||function(){function t(){}return function(n){var l;return t.prototype=n,l=new t,t.prototype=null,l}}(),i={},e=i.lib={},c=e.Base={extend:function(t){var n=l(this);return t&&n.mixIn(t),n.hasOwnProperty("init")&&this.init!==n.init||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var n in t)t.hasOwnProperty(n)&&(this[n]=t[n]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},o=e.WordArray=c.extend({init:function(t,n){t=this.words=t||[],this.sigBytes=null!=n?n:4*t.length},toString:function(t){return(t||r).stringify(this)},concat:function(t){var n=this.words,l=t.words,i=this.sigBytes,e=t.sigBytes;if(this.clamp(),i%4)for(var c=0;c<e;c++){var o=l[c>>>2]>>>24-c%4*8&255;n[i+c>>>2]|=o<<24-(i+c)%4*8}else for(c=0;c<e;c+=4)n[i+c>>>2]=l[c>>>2];return this.sigBytes+=e,this},clamp:function(){var n=this.words,l=this.sigBytes;n[l>>>2]&=4294967295<<32-l%4*8,n.length=t.ceil(l/4)},clone:function(){var t=c.clone.call(this);return t.words=this.words.slice(0),t},random:function(n){for(var l,i=[],e=function(n){n=n;var l=987654321,i=4294967295;return function(){var e=((l=36969*(65535&l)+(l>>16)&i)<<16)+(n=18e3*(65535&n)+(n>>16)&i)&i;return e/=4294967296,(e+=.5)*(t.random()>.5?1:-1)}},c=0;c<n;c+=4){var d=e(4294967296*(l||t.random()));l=987654071*d(),i.push(4294967296*d()|0)}return new o.init(i,n)}}),d=i.enc={},r=d.Hex={stringify:function(t){for(var n=t.words,l=t.sigBytes,i=[],e=0;e<l;e++){var c=n[e>>>2]>>>24-e%4*8&255;i.push((c>>>4).toString(16)),i.push((15&c).toString(16))}return i.join("")},parse:function(t){for(var n=t.length,l=[],i=0;i<n;i+=2)l[i>>>3]|=parseInt(t.substr(i,2),16)<<24-i%8*4;return new o.init(l,n/2)}},a=d.Latin1={stringify:function(t){for(var n=t.words,l=t.sigBytes,i=[],e=0;e<l;e++){var c=n[e>>>2]>>>24-e%4*8&255;i.push(String.fromCharCode(c))}return i.join("")},parse:function(t){for(var n=t.length,l=[],i=0;i<n;i++)l[i>>>2]|=(255&t.charCodeAt(i))<<24-i%4*8;return new o.init(l,n)}},u=d.Utf8={stringify:function(t){try{return decodeURIComponent(escape(a.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return a.parse(unescape(encodeURIComponent(t)))}},Z=e.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=u.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(n){var l=this._data,i=l.words,e=l.sigBytes,c=this.blockSize,d=e/(4*c),r=(d=n?t.ceil(d):t.max((0|d)-this._minBufferSize,0))*c,a=t.min(4*r,e);if(r){for(var u=0;u<r;u+=c)this._doProcessBlock(i,u);var Z=i.splice(0,r);l.sigBytes-=a}return new o.init(Z,a)},clone:function(){var t=c.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),s=(e.Hasher=Z.extend({cfg:c.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){Z.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){return t&&this._append(t),this._doFinalize()},blockSize:16,_createHelper:function(t){return function(n,l){return new t.init(l).finalize(n)}},_createHmacHelper:function(t){return function(n,l){return new s.HMAC.init(t,l).finalize(n)}}}),i.algo={});return i}(Math)})),Ml=Fn((function(t,n){var l;t.exports=(l=Al,function(){if("function"==typeof ArrayBuffer){var t=l.lib.WordArray,n=t.init;(t.init=function(t){if(t instanceof ArrayBuffer&&(t=new Uint8Array(t)),(t instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array)&&(t=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),t instanceof Uint8Array){for(var l=t.byteLength,i=[],e=0;e<l;e++)i[e>>>2]|=t[e]<<24-e%4*8;n.call(this,i,l)}else n.apply(this,arguments)}).prototype=t}}(),l.lib.WordArray)})),Pl=function(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}(Fn((function(t){!function(n,l){var i={};!function(t){t.__esModule=!0,t.digestLength=32,t.blockSize=64;var n=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function l(t,l,i,e,c){for(var o,d,r,a,u,Z,s,b,m,h,I,p,G;c>=64;){for(o=l[0],d=l[1],r=l[2],a=l[3],u=l[4],Z=l[5],s=l[6],b=l[7],h=0;h<16;h++)I=e+4*h,t[h]=(255&i[I])<<24|(255&i[I+1])<<16|(255&i[I+2])<<8|255&i[I+3];for(h=16;h<64;h++)p=((m=t[h-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,G=((m=t[h-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[h]=(p+t[h-7]|0)+(G+t[h-16]|0);for(h=0;h<64;h++)p=(((u>>>6|u<<26)^(u>>>11|u<<21)^(u>>>25|u<<7))+(u&Z^~u&s)|0)+(b+(n[h]+t[h]|0)|0)|0,G=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&d^o&r^d&r)|0,b=s,s=Z,Z=u,u=a+p|0,a=r,r=d,d=o,o=p+G|0;l[0]+=o,l[1]+=d,l[2]+=r,l[3]+=a,l[4]+=u,l[5]+=Z,l[6]+=s,l[7]+=b,e+=64,c-=64}return e}var i=function(){function n(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return n.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},n.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},n.prototype.update=function(t,n){if(void 0===n&&(n=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var i=0;if(this.bytesHashed+=n,this.bufferLength>0){for(;this.bufferLength<64&&n>0;)this.buffer[this.bufferLength++]=t[i++],n--;64===this.bufferLength&&(l(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(n>=64&&(i=l(this.temp,this.state,t,i,n),n%=64);n>0;)this.buffer[this.bufferLength++]=t[i++],n--;return this},n.prototype.finish=function(t){if(!this.finished){var n=this.bytesHashed,i=this.bufferLength,e=n/536870912|0,c=n<<3,o=n%64<56?64:128;this.buffer[i]=128;for(var d=i+1;d<o-8;d++)this.buffer[d]=0;this.buffer[o-8]=e>>>24&255,this.buffer[o-7]=e>>>16&255,this.buffer[o-6]=e>>>8&255,this.buffer[o-5]=e>>>0&255,this.buffer[o-4]=c>>>24&255,this.buffer[o-3]=c>>>16&255,this.buffer[o-2]=c>>>8&255,this.buffer[o-1]=c>>>0&255,l(this.temp,this.state,this.buffer,0,o),this.finished=!0}for(d=0;d<8;d++)t[4*d+0]=this.state[d]>>>24&255,t[4*d+1]=this.state[d]>>>16&255,t[4*d+2]=this.state[d]>>>8&255,t[4*d+3]=this.state[d]>>>0&255;return this},n.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},n.prototype._saveState=function(t){for(var n=0;n<this.state.length;n++)t[n]=this.state[n]},n.prototype._restoreState=function(t,n){for(var l=0;l<this.state.length;l++)this.state[l]=t[l];this.bytesHashed=n,this.finished=!1,this.bufferLength=0},n}();t.Hash=i;var e=function(){function t(t){this.inner=new i,this.outer=new i,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var n=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new i).update(t).finish(n).clean();else for(var l=0;l<t.length;l++)n[l]=t[l];for(l=0;l<n.length;l++)n[l]^=54;for(this.inner.update(n),l=0;l<n.length;l++)n[l]^=106;for(this.outer.update(n),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),l=0;l<n.length;l++)n[l]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function c(t){var n=(new i).update(t),l=n.digest();return n.clean(),l}function o(t,n){var l=new e(t).update(n),i=l.digest();return l.clean(),i}function d(t,n,l,i){var e=i[0];if(0===e)throw new Error("hkdf: cannot expand more");n.reset(),e>1&&n.update(t),l&&n.update(l),n.update(i),n.finish(t),i[0]++}t.HMAC=e,t.hash=c,t.default=c,t.hmac=o;var r=new Uint8Array(t.digestLength);t.hkdf=function(t,n,l,i){void 0===n&&(n=r),void 0===i&&(i=32);for(var c=new Uint8Array([1]),a=o(n,t),u=new e(a),Z=new Uint8Array(u.digestLength),s=Z.length,b=new Uint8Array(i),m=0;m<i;m++)s===Z.length&&(d(Z,u,l,c),s=0),b[m]=Z[s++];return u.clean(),Z.fill(0),c.fill(0),b},t.pbkdf2=function(t,n,l,i){for(var c=new e(t),o=c.digestLength,d=new Uint8Array(4),r=new Uint8Array(o),a=new Uint8Array(o),u=new Uint8Array(i),Z=0;Z*o<i;Z++){var s=Z+1;d[0]=s>>>24&255,d[1]=s>>>16&255,d[2]=s>>>8&255,d[3]=s>>>0&255,c.reset(),c.update(n),c.update(d),c.finish(a);for(var b=0;b<o;b++)r[b]=a[b];for(b=2;b<=l;b++){c.reset(),c.update(a).finish(a);for(var m=0;m<o;m++)r[m]^=a[m]}for(b=0;b<o&&Z*o+b<i;b++)u[Z*o+b]=r[b]}for(Z=0;Z<o;Z++)r[Z]=a[Z]=0;for(Z=0;Z<4;Z++)d[Z]=0;return c.clean(),u}}(i);var e=i.default;for(var c in i)e[c]=i[c];t.exports=e}()})));function Ql(){throw new Error("setTimeout has not been defined")}function jl(){throw new Error("clearTimeout has not been defined")}var El=Ql,Dl=jl;function Ol(t){if(El===setTimeout)return setTimeout(t,0);if((El===Ql||!El)&&setTimeout)return El=setTimeout,setTimeout(t,0);try{return El(t,0)}catch(n){try{return El.call(null,t,0)}catch(n){return El.call(this,t,0)}}}"function"==typeof Bn.setTimeout&&(El=setTimeout),"function"==typeof Bn.clearTimeout&&(Dl=clearTimeout);var ql,_l=[],$l=!1,ti=-1;function ni(){$l&&ql&&($l=!1,ql.length?_l=ql.concat(_l):ti=-1,_l.length&&li())}function li(){if(!$l){var t=Ol(ni);$l=!0;for(var n=_l.length;n;){for(ql=_l,_l=[];++ti<n;)ql&&ql[ti].run();ti=-1,n=_l.length}ql=null,$l=!1,function(t){if(Dl===clearTimeout)return clearTimeout(t);if((Dl===jl||!Dl)&&clearTimeout)return Dl=clearTimeout,clearTimeout(t);try{Dl(t)}catch(n){try{return Dl.call(null,t)}catch(n){return Dl.call(this,t)}}}(t)}}function ii(t,n){this.fun=t,this.array=n}ii.prototype.run=function(){this.fun.apply(null,this.array)};var ei=Bn.performance||{},ci=(ei.now||ei.mozNow||ei.msNow||ei.oNow||ei.webkitNow,new Date,function(t){var n=new Array(arguments.length-1);if(arguments.length>1)for(var l=1;l<arguments.length;l++)n[l-1]=arguments[l];_l.push(new ii(t,n)),1!==_l.length||$l||Ol(li)}),oi=function(t){if(t.__esModule)return t;var n=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(l){var i=Object.getOwnPropertyDescriptor(t,l);Object.defineProperty(n,l,i.get?i:{enumerable:!0,get:function(){return t[l]}})})),n}(Fl),di=Fn((function(t,n){var l=oi.Buffer;function i(t,n){for(var l in t)n[l]=t[l]}function e(t,n,i){return l(t,n,i)}l.from&&l.alloc&&l.allocUnsafe&&l.allocUnsafeSlow?t.exports=oi:(i(oi,n),n.Buffer=e),i(l,e),e.from=function(t,n,i){if("number"==typeof t)throw new TypeError("Argument must not be a number");return l(t,n,i)},e.alloc=function(t,n,i){if("number"!=typeof t)throw new TypeError("Argument must be a number");var e=l(t);return void 0!==n?"string"==typeof i?e.fill(n,i):e.fill(n):e.fill(0),e},e.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return l(t)},e.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return oi.SlowBuffer(t)}})),ri=Fn((function(t){var n=65536,l=di.Buffer,i=kn.crypto||kn.msCrypto;i&&i.getRandomValues?t.exports=function(t,e){if(t>4294967295)throw new RangeError("requested too many random bytes");var c=l.allocUnsafe(t);if(t>0)if(t>n)for(var o=0;o<t;o+=n)i.getRandomValues(c.slice(o,o+n));else i.getRandomValues(c);return"function"==typeof e?ci((function(){e(null,c)})):c}:t.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}}));const ai=new TextEncoder,ui=new TextDecoder;var Zi=function(){if("undefined"!=typeof globalThis)return globalThis;if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;throw new Error("unable to locate global object")}();const si=t=>{let n=t;return n instanceof Uint8Array&&(n=ui.decode(n)),n=n.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,""),new Uint8Array(Zi.atob(n).split("").map(t=>t.charCodeAt(0)))};class bi extends Error{constructor(t){super(t),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}}class mi extends bi{constructor(t,n="unspecified",l="unspecified"){super(t),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=n,this.reason=l}}class hi extends bi{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}}class Ii extends bi{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}}class pi extends bi{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}}class Gi extends bi{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}}class yi extends bi{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}}class Xi extends mi{constructor(){super(...arguments),this.code="ERR_JWT_EXPIRED"}}var gi=Zi.crypto;function Vi(){if(!Zi.isSecureContext&&!Zi.crypto.subtle)throw new bi("Web Cryptography API is available only in Secure Contexts. See: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts")}const Wi=async t=>{var n,l;const{algorithm:i,keyUsages:e}=function(t){let n,l;switch(t.kty){case"oct":switch(t.alg){case"HS256":case"HS384":case"HS512":n={name:"HMAC",hash:"SHA-"+t.alg.substr(-3)},l=["sign","verify"];break;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":throw new Ii(t.alg+" keys cannot be imported as CryptoKey instances");case"A128GCM":case"A192GCM":case"A256GCM":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":n={name:"AES-GCM"},l=["encrypt","decrypt"];break;case"A128KW":case"A192KW":case"A256KW":n={name:"AES-KW"},l=["wrapKey","unwrapKey"];break;case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":n={name:"PBKDF2"},l=["deriveBits"];break;default:throw new Ii('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;case"RSA":switch(t.alg){case"PS256":case"PS384":case"PS512":n={name:"RSA-PSS",hash:"SHA-"+t.alg.substr(-3)},l=t.d?["sign"]:["verify"];break;case"RS256":case"RS384":case"RS512":n={name:"RSASSA-PKCS1-v1_5",hash:"SHA-"+t.alg.substr(-3)},l=t.d?["sign"]:["verify"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":n={name:"RSA-OAEP",hash:"SHA-"+(parseInt(t.alg.substr(-3),10)||1)},l=t.d?["decrypt","unwrapKey"]:["encrypt","wrapKey"];break;default:throw new Ii('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;case"EC":switch(t.alg){case"ES256":case"ES384":case"ES512":n={name:"ECDSA",namedCurve:t.crv},l=t.d?["sign"]:["verify"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":n={name:"ECDH",namedCurve:t.crv},l=t.d?["deriveBits"]:[];break;default:throw new Ii('unsupported or invalid JWK "alg" (Algorithm) Parameter value')}break;default:throw new Ii('unsupported or invalid JWK "kty" (Key Type) Parameter value')}return{algorithm:n,keyUsages:l}}(t);let c="jwk",o={...t};return delete o.alg,"PBKDF2"===i.name&&(c="raw",o=si(t.k)),Vi(),gi.subtle.importKey(c,o,i,null!==(n=t.ext)&&void 0!==n&&n,null!==(l=t.key_ops)&&void 0!==l?l:e)};function Ri(t){return!!t&&t.constructor===Object}async function Ci(t,n,l){if(!Ri(t))throw new TypeError("JWK must be an object");if(n||(n=t.alg),"string"!=typeof n||!n)throw new TypeError('"alg" argument is required when "jwk.alg" is not present');switch(t.kty){case"oct":if("string"!=typeof t.k||!t.k)throw new TypeError('missing "k" (Key Value) Parameter value');return null!=l||(l=!0!==t.ext),l?Wi({...t,alg:n,ext:!1}):si(t.k);case"RSA":if(void 0!==t.oth)throw new Ii('RSA JWK "oth" (Other Primes Info) Parameter value is unsupported');case"EC":case"OKP":return Wi({...t,alg:n});default:throw new Ii('unsupported "kty" (Key Type) Parameter value')}}const fi=function(t,n,l,i){if(void 0!==i.crit&&void 0===l.crit)throw new t('"crit" (Critical) Header Parameter MUST be integrity protected');if(!l||void 0===l.crit)return new Set;if(!Array.isArray(l.crit)||0===l.crit.length||l.crit.some(t=>"string"!=typeof t||0===t.length))throw new t('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');for(const e of l.crit){if(!n.has(e))throw new Ii(`Extension Header Parameter "${e}" is not supported by this implementation`);if(void 0===i[e])throw new t(`Extension Header Parameter "${e}" is missing`);if(n.get(e)&&void 0===l[e])throw new t(`Extension Header Parameter "${e}" MUST be integrity protected`)}return new Set(l.crit)}.bind(void 0,pi,new Map([["b64",!0]])),Si=((t,n)=>{if(void 0!==n&&(!Array.isArray(n)||n.some(t=>"string"!=typeof t)))throw new TypeError(`"${t}" option must be an array of strings`);if(n)return new Set(n)}).bind(void 0,"algorithms");const vi=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var Ki=t=>{const n=vi.exec(t);if(!n)throw new TypeError("invalid time period format");const l=parseFloat(n[1]);switch(n[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(l);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*l);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*l);case"day":case"days":case"d":return Math.round(86400*l);case"week":case"weeks":case"w":return Math.round(604800*l);default:return Math.round(31557600*l)}};const Yi=t=>t.toLowerCase().replace(/^application\//,"");var Ji=(t,n,l={})=>{const{typ:i}=l;if(i&&("string"!=typeof t.typ||Yi(t.typ)!==Yi(i)))throw new mi('unexpected "typ" JWT header value',"typ","check_failed");let e;try{e=JSON.parse(ui.decode(n))}catch(t){}if("object"!=typeof e||!e||Array.isArray(e))throw new Gi("JWT Claims Set must be a top-level JSON object");const{issuer:c}=l;if(c&&!("string"==typeof c?[c]:c).includes(e.iss))throw new mi('unexpected "iss" claim value',"iss","check_failed");const{subject:o}=l;if(o&&e.sub!==o)throw new mi('unexpected "sub" claim value',"sub","check_failed");const{audience:d}=l;if(d&&(a="string"==typeof d?[d]:d,!("string"==typeof(r=e.aud)?a.includes(r):a.some(Set.prototype.has.bind(new Set(r))))))throw new mi('unexpected "aud" claim value',"aud","check_failed");var r,a;let u;switch(typeof l.clockTolerance){case"string":u=Ki(l.clockTolerance);break;case"number":u=l.clockTolerance;break;case"undefined":u=0;break;default:throw new TypeError("invalid clockTolerance option type")}const{currentDate:Z}=l,s=(b=Z||new Date,Math.floor(b.getTime()/1e3));var b;if(void 0!==e.iat||l.maxTokenAge){if("number"!=typeof e.iat)throw new mi('"iat" claim must be a number',"iat","invalid");if(void 0===e.exp&&e.iat>s+u)throw new mi('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}if(void 0!==e.nbf){if("number"!=typeof e.nbf)throw new mi('"nbf" claim must be a number',"nbf","invalid");if(e.nbf>s+u)throw new mi('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==e.exp){if("number"!=typeof e.exp)throw new mi('"exp" claim must be a number',"exp","invalid");if(e.exp<=s-u)throw new Xi('"exp" claim timestamp check failed',"exp","check_failed")}if(l.maxTokenAge){const t=s-e.iat;if(t-u>("number"==typeof l.maxTokenAge?l.maxTokenAge:Ki(l.maxTokenAge)))throw new Xi('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(t<0-u)throw new mi('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return e};const Ni=l(537);class Li{constructor(){}static base64URLEncode(t){return wl.encode(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}static getCodeVerifier(t){switch(t){case Un.Node:return this.base64URLEncode(Ni(32));case Un.Browser:return this.base64URLEncode(ri(32));case Un.ReactNative:return this.base64URLEncode(Ml.random(32).toString());default:return this.base64URLEncode(ri(32))}}static getCodeChallenge(t){return this.base64URLEncode(new G(Pl((new TextEncoder).encode(t))))}static getSupportedSignatureAlgorithms(){return["RS256","RS512","RS384","PS256"]}static getJWKForTheIdToken(t,n){const l=JSON.parse(wl.decode(t,"utf8"));for(const t of n)if(l.kid===t.kid)return Ci({alg:t.alg,e:t.e,kty:t.kty,n:t.n});return Promise.reject(new xn("CRYPTO_UTIL-GTFTIT-IV01","crypto-utils","getJWKForTheIdToken","kid not found.","Failed to find the 'kid' specified in the id_token. 'kid' found in the header : "+l.kid+", Expected values: "+n.map(t=>t.kid).join(", ")))}static isValidIdToken(t,n,l,i,e,c){return async function(t,n,l){const i=await async function(t,n,l){if(t instanceof Uint8Array&&(t=ui.decode(t)),"string"!=typeof t)throw new pi("Compact JWS must be a string or Uint8Array");const{0:i,1:e,2:c,length:o}=t.split(".");if(3!==o)throw new pi("Invalid Compact JWS");const d=await async function(t,n,l){if(!Ri(t))throw new pi("Flattened JWS must be an object");if(void 0===t.protected&&void 0===t.header)throw new pi('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==t.protected&&"string"!=typeof t.protected)throw new pi("JWS Protected Header incorrect type");if(void 0===t.payload)throw new pi("JWS Payload missing");if("string"!=typeof t.signature)throw new pi("JWS Signature missing or incorrect type");if(void 0!==t.header&&!Ri(t.header))throw new pi("JWS Unprotected Header incorrect type");let i={};if(t.protected){const n=si(t.protected);i=JSON.parse(ui.decode(n))}if(!((...t)=>{const n=t.filter(Boolean);if(0===n.length||1===n.length)return!0;let l;for(const t of n){const n=Object.keys(t);if(l&&0!==l.size)for(const t of n){if(l.has(t))return!1;l.add(t)}else l=new Set(n)}return!0})(i,t.header))throw new pi("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const e={...i,...t.header};let c=!0;if(fi(i,e).has("b64")&&(c=i.b64,"boolean"!=typeof c))throw new pi('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:o}=e;if("string"!=typeof o||!o)throw new pi('JWS "alg" (Algorithm) Header Parameter missing or invalid');const d=l&&Si(l.algorithms);if(d&&!d.has(o))throw new hi('"alg" (Algorithm) Header Parameter not allowed');if(c){if("string"!=typeof t.payload)throw new pi("JWS Payload must be a string")}else if("string"!=typeof t.payload&&!(t.payload instanceof Uint8Array))throw new pi("JWS Payload must be a string or an Uint8Array instance");"function"==typeof n&&(n=await n(i,t)),((t,n)=>{if(t.startsWith("HS")||"dir"===t||t.startsWith("PBES2")||t.match(/^A\d{3}(?:GCM)KW$/)){if(n instanceof Uint8Array||"secret"===n.type)return;throw new TypeError('CryptoKey or KeyObject instances for symmetric algorithms must be of type "secret"')}if(n instanceof Uint8Array)throw new TypeError("CryptoKey or KeyObject instances must be used for asymmetric algorithms");if("secret"===n.type)throw new TypeError('CryptoKey or KeyObject instances for asymmetric algorithms must not be of type "secret"')})(o,n);const r=function(...t){const n=t.reduce((t,{length:n})=>t+n,0),l=new Uint8Array(n);let i=0;return t.forEach(t=>{l.set(t,i),i+=t.length}),l}(ai.encode(t.protected||""),ai.encode("."),"string"==typeof t.payload?ai.encode(t.payload):t.payload),a=si(t.signature);if(!await(async(t,n,l,i)=>{let e;if(Vi(),n instanceof Uint8Array){if(!t.startsWith("HS"))throw new TypeError("symmetric keys are only applicable for HMAC-based algorithms");e=await gi.subtle.importKey("raw",n,{hash:"SHA-"+t.substr(-3),name:"HMAC"},!1,["verify"])}else e=n;return((t,n)=>{if(t.startsWith("HS")){const l=parseInt(t.substr(-3),10),{length:i}=n.algorithm;if("number"!=typeof i||i<l)throw new TypeError(`${t} requires symmetric keys to be ${l} bits or larger`)}if(t.startsWith("RS")||t.startsWith("PS")){const{modulusLength:l}=n.algorithm;if("number"!=typeof l||l<2048)throw new TypeError(t+" requires key modulusLength to be 2048 bits or larger")}})(t,e),gi.subtle.verify(function(t){switch(t){case"HS256":return{hash:"SHA-256",name:"HMAC"};case"HS384":return{hash:"SHA-384",name:"HMAC"};case"HS512":return{hash:"SHA-512",name:"HMAC"};case"PS256":return{hash:"SHA-256",name:"RSA-PSS",saltLength:32};case"PS384":return{hash:"SHA-384",name:"RSA-PSS",saltLength:48};case"PS512":return{hash:"SHA-512",name:"RSA-PSS",saltLength:64};case"RS256":return{hash:"SHA-256",name:"RSASSA-PKCS1-v1_5"};case"RS384":return{hash:"SHA-384",name:"RSASSA-PKCS1-v1_5"};case"RS512":return{hash:"SHA-512",name:"RSASSA-PKCS1-v1_5"};case"ES256":return{hash:"SHA-256",name:"ECDSA",namedCurve:"P-256"};case"ES384":return{hash:"SHA-384",name:"ECDSA",namedCurve:"P-384"};case"ES512":return{hash:"SHA-512",name:"ECDSA",namedCurve:"P-521"};default:throw new Ii(`alg ${t} is unsupported either by JOSE or your javascript runtime`)}}(t),e,l,i)})(o,n,a,r))throw new yi;let u;u=c?si(t.payload):"string"==typeof t.payload?ai.encode(t.payload):t.payload;const Z={payload:u};return void 0!==t.protected&&(Z.protectedHeader=i),void 0!==t.header&&(Z.unprotectedHeader=t.header),Z}({payload:e||void 0,protected:i||void 0,signature:c||void 0},n,l);return{payload:d.payload,protectedHeader:d.protectedHeader}}(t,n,l);return{payload:Ji(i.protectedHeader,i.payload,l),protectedHeader:i.protectedHeader}}(t,n,{algorithms:this.getSupportedSignatureAlgorithms(),audience:l,clockTolerance:c,issuer:i,subject:e}).then(()=>Promise.resolve(!0)).catch(t=>Promise.reject(new xn("CRYPTO_UTIL-IVIT-IV02","crypto-utils","isValidIdToken","Validating ID token failed",t)))}static decodeIDToken(t){try{const n=wl.decode(t.split(".")[1],"utf8");return JSON.parse(n)}catch(t){throw new xn("CRYPTO_UTIL-DIT-IV01","crypto-utils","decodeIDToken","Decoding ID token failed.",t)}}}class Hi{constructor(){}static getAuthenticatedUserInfo(t){var n,l,i,e;const c=Li.decodeIDToken(t),o=this.getTenantDomainFromIdTokenPayload(c),d=null!==(n=null==c?void 0:c.username)&&void 0!==n?n:"",r=null!==(l=c.given_name)&&void 0!==l?l:"",a=null!==(i=c.family_name)&&void 0!==i?i:"",u=r&&a?`${r} ${a}`:r||a||"",Z=null!==(e=c.preferred_username)&&void 0!==e?e:u;return Object.assign({displayName:Z,tenantDomain:o,username:d},this.filterClaimsFromIDTokenPayload(c))}static filterClaimsFromIDTokenPayload(t){const n=Object.assign({},t);null==n||delete n.iss,null==n||delete n.aud,null==n||delete n.exp,null==n||delete n.iat,null==n||delete n.acr,null==n||delete n.amr,null==n||delete n.azp,null==n||delete n.auth_time,null==n||delete n.nonce,null==n||delete n.c_hash,null==n||delete n.at_hash,null==n||delete n.nbf,null==n||delete n.isk,null==n||delete n.sid;const l={};return Object.entries(n).forEach(([t,n])=>{const i=t.split("_").map((t,n)=>0===n?t:[t[0].toUpperCase(),...t.slice(1)].join("")).join("");l[i]=n}),l}static getTokenRequestHeaders(){return{Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}}}Hi.getTenantDomainFromIdTokenPayload=(t,n="@")=>{const l=t.sub.split(n);return l.length>2?l[l.length-1]:""};class Ui{constructor(t){this._dataLayer=t,this._config=()=>gn(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>gn(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}resolveWellKnownEndpoint(){return gn(this,void 0,void 0,(function*(){const t=yield this._config();return t.wellKnownEndpoint?t.serverOrigin+t.wellKnownEndpoint:t.serverOrigin+"/oauth2/token/.well-known/openid-configuration"}))}resolveEndpoints(t){return gn(this,void 0,void 0,(function*(){const n={},l=yield this._config();return l.overrideWellEndpointConfig&&l.endpoints&&Object.keys(l.endpoints).forEach(t=>{const i=t.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());n[i]=(null==l?void 0:l.endpoints)?l.endpoints[t]:""}),Object.assign(Object.assign({},t),n)}))}resolveFallbackEndpoints(){return gn(this,void 0,void 0,(function*(){const t={},n=yield this._config();n.endpoints&&Object.keys(n.endpoints).forEach(l=>{const i=l.replace(/[A-Z]/g,t=>"_"+t.toLowerCase());t[i]=(null==n?void 0:n.endpoints)?n.endpoints[l]:""});const l={authorization_endpoint:n.serverOrigin+"/oauth2/authorize",end_session_endpoint:n.serverOrigin+"/oidc/logout",jwks_uri:n.serverOrigin+"/oauth2/jwks",check_session_iframe:n.serverOrigin+"/oidc/checksession",revocation_endpoint:n.serverOrigin+"/oauth2/revoke",token_endpoint:n.serverOrigin+"/oauth2/token"};return Object.assign(Object.assign({},t),l)}))}validateIdToken(t){return gn(this,void 0,void 0,(function*(){const n=(yield this._dataLayer.getOIDCProviderMetaData()).jwks_uri,l=yield this._config();return n&&0!==n.trim().length?Xn.get(n,{withCredentials:null==l?void 0:l.sendCookiesInRequests}).then(n=>gn(this,void 0,void 0,(function*(){if(200!==n.status)return Promise.reject(new xn("AUTH_HELPER-VIT-NR02","authentication-helper","validateIdToken","Invalid response status received for jwks request.","The request sent to get the jwks returned "+n.status+" , which is invalid."));const l=(yield this._oidcProviderMetaData()).issuer,i=(yield this.resolveWellKnownEndpoint()).split("/.well-known")[0];return l&&l===i?Li.getJWKForTheIdToken(t.split(".")[0],n.data.keys).then(n=>gn(this,void 0,void 0,(function*(){return Li.isValidIdToken(t,n,(yield this._config()).clientID,l,Li.decodeIDToken(t).sub,(yield this._config()).clockTolerance).then(t=>t).catch(t=>Promise.reject(new xn("AUTH_HELPER-VIT-ES03","authentication-helper","validateIdToken",void 0,void 0,t)))}))).catch(t=>Promise.reject(new xn("AUTH_HELPER-VIT-ES04","authentication-helper","validateIdToken",void 0,void 0,t))):Promise.resolve(!1)}))).catch(t=>{var n,l,i;return Promise.reject(new Tn("AUTH_HELPER-VIT-NR05","authentication-helper","validateIdToken","Request to jwks endpoint failed.","The request sent to get the jwks from the server failed.",null!==(n=null==t?void 0:t.code)&&void 0!==n?n:"",null==t?void 0:t.message,null===(l=null==t?void 0:t.response)||void 0===l?void 0:l.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))}):Promise.reject(new xn("AUTH_HELPER-VIT-NF01","authentication-helper","validateIdToken","JWKS endpoint not found.","No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty."))}))}replaceCustomGrantTemplateTags(t){var n;return gn(this,void 0,void 0,(function*(){let l="openid";const i=yield this._config(),e=yield this._dataLayer.getSessionData();return i.scope&&i.scope.length>0&&(i.scope.includes("openid")||i.scope.push("openid"),l=i.scope.join(" ")),t.replace("{{token}}",e.access_token).replace("{{username}}",Hi.getAuthenticatedUserInfo(e.id_token).username).replace("{{scope}}",l).replace("{{clientID}}",i.clientID).replace("{{clientSecret}}",null!==(n=i.clientSecret)&&void 0!==n?n:"")}))}clearUserSessionData(){return gn(this,void 0,void 0,(function*(){yield this._dataLayer.removeOIDCProviderMetaData(),yield this._dataLayer.removeTemporaryData(),yield this._dataLayer.removeSessionData()}))}handleTokenResponse(t){return gn(this,void 0,void 0,(function*(){if(200!==t.status)return Promise.reject(new xn("AUTH_HELPER-HTR-NR01","authentication-helper","handleTokenResponse","Invalid response status received for token request.","The request sent to get the token returned "+t.status+" , which is invalid."));if((yield this._config()).validateIDToken)return this.validateIdToken(t.data.id_token).then(n=>gn(this,void 0,void 0,(function*(){if(n){yield this._dataLayer.setSessionData(t.data);const n={accessToken:t.data.access_token,expiresIn:t.data.expires_in,idToken:t.data.id_token,refreshToken:t.data.refresh_token,scope:t.data.scope,tokenType:t.data.token_type};return Promise.resolve(n)}return Promise.reject(new xn("AUTH_HELPER-HTR-IV02","authentication-helper","handleTokenResponse","The id token returned is not valid.","The id token returned has failed the validation check."))}))).catch(t=>Promise.reject(new xn("AUTH_HELPER-HAT-ES03","authentication-helper","handleTokenResponse",void 0,void 0,t)));{const n={accessToken:t.data.access_token,expiresIn:t.data.expires_in,idToken:t.data.id_token,refreshToken:t.data.refresh_token,scope:t.data.scope,tokenType:t.data.token_type};return yield this._dataLayer.setSessionData(t.data),Promise.resolve(n)}}))}}class xi{constructor(t){this._authenticationHelper=new Ui(t),this._dataLayer=t,this._config=()=>gn(this,void 0,void 0,(function*(){return yield this._dataLayer.getConfigData()})),this._oidcProviderMetaData=()=>gn(this,void 0,void 0,(function*(){return yield this._dataLayer.getOIDCProviderMetaData()}))}getAuthorizationURL(t){return gn(this,void 0,void 0,(function*(){const n=yield this._dataLayer.getOIDCProviderMetaDataParameter("authorization_endpoint"),l=yield this._config();if(!n||0===n.trim().length)throw new xn("AUTH_CORE-GAU-NF01","authentication-core","getAuthorizationURL","No authorization endpoint found.","No authorization endpoint was found in the OIDC provider meta data from the well-known endpoint or the authorization endpoint passed to the SDK is empty.");const i=new URL(n);i.searchParams.append("response_type","code"),i.searchParams.append("client_id",l.clientID);let e="openid";if(l.scope&&l.scope.length>0&&(l.scope.includes("openid")||l.scope.push("openid"),e=l.scope.join(" ")),i.searchParams.append("scope",e),i.searchParams.append("redirect_uri",l.signInRedirectURL),l.responseMode&&i.searchParams.append("response_mode",l.responseMode),l.enablePKCE){const t=Li.getCodeVerifier(l.runtimeEnvironment),n=Li.getCodeChallenge(t);yield this._dataLayer.setTemporaryDataParameter("pkce_code_verifier",t),i.searchParams.append("code_challenge_method","S256"),i.searchParams.append("code_challenge",n)}l.prompt&&i.searchParams.append("prompt",l.prompt);const c=t;if(c)for(const[t,n]of Object.entries(c))""!=t&&""!=n&&i.searchParams.append(t,n.toString());return i.toString()}))}requestAccessToken(t,n){return gn(this,void 0,void 0,(function*(){const l=(yield this._oidcProviderMetaData()).token_endpoint,i=yield this._config();if(!l||0===l.trim().length)return Promise.reject(new xn("AUTH_CORE-RAT1-NF01","authentication-core","requestAccessToken","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty."));n&&(yield this._dataLayer.setSessionDataParameter("session_state",n));const e=[];e.push("client_id="+i.clientID),i.clientSecret&&i.clientSecret.trim().length>0&&e.push("client_secret="+i.clientSecret);const c=t;return e.push("code="+c),e.push("grant_type=authorization_code"),e.push("redirect_uri="+i.signInRedirectURL),i.enablePKCE&&(e.push("code_verifier="+(yield this._dataLayer.getTemporaryDataParameter("pkce_code_verifier"))),yield this._dataLayer.removeTemporaryDataParameter("pkce_code_verifier")),Xn.post(l,e.join("&"),{headers:Hi.getTokenRequestHeaders(),withCredentials:i.sendCookiesInRequests}).then(t=>this._authenticationHelper.handleTokenResponse(t).then(t=>t).catch(t=>Promise.reject(new xn("AUTH_CORE-RAT1-ES02","authentication-core","requestAccessToken",void 0,void 0,t)))).catch(t=>{var n,l,i;return Promise.reject(new Tn("AUTH_CORE-RAT1-NR03","authentication-core","requestAccessToken","Requesting access token failed","The request to get the access token from the server failed.",null!==(n=null==t?void 0:t.code)&&void 0!==n?n:"",null==t?void 0:t.message,null===(l=null==t?void 0:t.response)||void 0===l?void 0:l.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})}))}refreshAccessToken(){return gn(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).token_endpoint,n=yield this._config(),l=yield this._dataLayer.getSessionData();if(!l.refresh_token)return Promise.reject(new xn("AUTH_CORE-RAT2-NF01","authentication-core","refreshAccessToken","No refresh token found.","There was no refresh token found. Asgardeo doesn't return a refresh token if the refresh token grant is not enabled."));if(!t||0===t.trim().length)return Promise.reject(new xn("AUTH_CORE-RAT2-NF02","authentication-core","refreshAccessToken","No refresh token endpoint found.","No refresh token endpoint was in the OIDC provider meta data returned by the well-known endpoint or the refresh token endpoint passed to the SDK is empty."));const i=[];return i.push("client_id="+n.clientID),i.push("refresh_token="+l.refresh_token),i.push("grant_type=refresh_token"),n.clientSecret&&n.clientSecret.trim().length>0&&i.push("client_secret="+n.clientSecret),Xn.post(t,i.join("&"),{headers:Hi.getTokenRequestHeaders(),withCredentials:n.sendCookiesInRequests}).then(t=>this._authenticationHelper.handleTokenResponse(t).then(t=>t).catch(t=>Promise.reject(new xn("AUTH_CORE-RAT2-ES03","authentication-core","refreshAccessToken",void 0,void 0,t)))).catch(t=>{var n,l,i;return Promise.reject(new Tn("AUTH_CORE-RAT2-NR03","authentication-core","refreshAccessToken","Refresh access token request failed.","The request to refresh the access token failed.",null!==(n=null==t?void 0:t.code)&&void 0!==n?n:"",null==t?void 0:t.message,null===(l=null==t?void 0:t.response)||void 0===l?void 0:l.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})}))}revokeAccessToken(){return gn(this,void 0,void 0,(function*(){const t=(yield this._oidcProviderMetaData()).revocation_endpoint,n=yield this._config();if(!t||0===t.trim().length)return Promise.reject(new xn("AUTH_CORE-RAT3-NF01","authentication-core","revokeAccessToken","No revoke access token endpoint found.","No revoke access token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the revoke access token endpoint passed to the SDK is empty."));const l=[];return l.push("client_id="+n.clientID),l.push("token="+(yield this._dataLayer.getSessionData()).access_token),l.push("token_type_hint=access_token"),Xn.post(t,l.join("&"),{headers:Hi.getTokenRequestHeaders(),withCredentials:n.sendCookiesInRequests}).then(t=>200!==t.status?Promise.reject(new xn("AUTH_CORE-RAT3-NR02","authentication-core","revokeAccessToken","Invalid response status received for revoke access token request.","The request sent to revoke the access token returned "+t.status+" , which is invalid.")):(this._authenticationHelper.clearUserSessionData(),Promise.resolve(t))).catch(t=>{var n,l,i;return Promise.reject(new Tn("AUTH_CORE-RAT3-NR03","authentication-core","revokeAccessToken","The request to revoke access token failed.","The request sent to revoke the access token failed.",null!==(n=null==t?void 0:t.code)&&void 0!==n?n:"",null==t?void 0:t.message,null===(l=null==t?void 0:t.response)||void 0===l?void 0:l.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})}))}requestCustomGrant(t){return gn(this,void 0,void 0,(function*(){const n=yield this._oidcProviderMetaData(),l=yield this._config();let i;if(i=t.tokenEndpoint&&0!==t.tokenEndpoint.trim().length?t.tokenEndpoint:n.token_endpoint,!i||0===i.trim().length)return Promise.reject(new xn("AUTH_CORE-RCG-NF01","authentication-core","requestCustomGrant","Token endpoint not found.","No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty."));const e={data:(yield Promise.all(Object.entries(t.data).map(([t,n])=>gn(this,void 0,void 0,(function*(){const l=yield this._authenticationHelper.replaceCustomGrantTemplateTags(n);return`${t}=${l}`}))))).join("&"),headers:Object.assign({},Hi.getTokenRequestHeaders()),method:"POST",url:i,withCredentials:l.sendCookiesInRequests};return t.attachToken&&(e.headers=Object.assign(Object.assign({},e.headers),{Authorization:"Bearer "+(yield this._dataLayer.getSessionData()).access_token})),Xn(e).then(n=>200!==n.status?Promise.reject(new xn("AUTH_CORE-RCG-NR02","authentication-core","requestCustomGrant","Invalid response status received for the custom grant request.","The request sent to get the custom grant returned "+n.status+" , which is invalid.")):t.returnsSession?this._authenticationHelper.handleTokenResponse(n).then(t=>t).catch(t=>Promise.reject(new xn("AUTH_CORE-RCG-ES03","authentication-core","requestCustomGrant",void 0,void 0,t))):Promise.resolve(n)).catch(t=>{var n,l,i;return Promise.reject(new Tn("AUTH_CORE-RCG-NR04","authentication-core","requestCustomGrant","The custom grant request failed.","The request sent to get the custom grant failed.",null!==(n=null==t?void 0:t.code)&&void 0!==n?n:"",null==t?void 0:t.message,null===(l=null==t?void 0:t.response)||void 0===l?void 0:l.status,null===(i=null==t?void 0:t.response)||void 0===i?void 0:i.data))})}))}getBasicUserInfo(){return gn(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData(),n=Hi.getAuthenticatedUserInfo(null==t?void 0:t.id_token);let l={allowedScopes:t.scope,sessionState:t.session_state};return Object.keys(n).forEach(t=>{void 0!==n[t]&&""!==n[t]&&null!==n[t]||delete n[t]}),l=Object.assign(Object.assign({},l),n),l}))}getDecodedIDToken(){return gn(this,void 0,void 0,(function*(){const t=(yield this._dataLayer.getSessionData()).id_token;return Li.decodeIDToken(t)}))}getIDToken(){return gn(this,void 0,void 0,(function*(){return(yield this._dataLayer.getSessionData()).id_token}))}getOIDCProviderMetaData(t){return gn(this,void 0,void 0,(function*(){if(!t&&(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated")))return Promise.resolve(!0);const n=yield this._authenticationHelper.resolveWellKnownEndpoint();return Xn.get(n).then(t=>gn(this,void 0,void 0,(function*(){return 200!==t.status?Promise.reject(new xn("AUTH_CORE-GOPM-NR01","authentication-core","getOIDCProviderMetaData","Invalid response status received for OIDC provider meta data request.","The request sent to the well-known endpoint to get the OIDC provider meta data returned "+t.status+" , which is invalid.")):(yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints(t.data)),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve(!0))}))).catch(()=>gn(this,void 0,void 0,(function*(){return yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveFallbackEndpoints()),yield this._dataLayer.setTemporaryDataParameter("op_config_initiated",!0),Promise.resolve(!0)})))}))}getOIDCServiceEndpoints(){return gn(this,void 0,void 0,(function*(){const t=yield this._oidcProviderMetaData();return{authorizationEndpoint:t.authorization_endpoint,checkSessionIframe:t.check_session_iframe,endSessionEndpoint:t.end_session_endpoint,introspectionEndpoint:t.introspection_endpoint,issuer:t.issuer,jwksUri:t.jwks_uri,registrationEndpoint:t.registration_endpoint,revocationEndpoint:t.revocation_endpoint,tokenEndpoint:t.token_endpoint,userinfoEndpoint:t.userinfo_endpoint,wellKnownEndpoint:yield this._authenticationHelper.resolveWellKnownEndpoint()}}))}getSignOutURL(){var t,n,l;return gn(this,void 0,void 0,(function*(){const i=null===(t=yield this._oidcProviderMetaData())||void 0===t?void 0:t.end_session_endpoint,e=yield this._config();if(!i||0===i.trim().length)throw new xn("AUTH_CORE-GSOU-NF01","authentication-core","getSignOutURL","Sign-out endpoint not found.","No sign-out endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the sign-out endpoint passed to the SDK is empty.");const c=null===(n=yield this._dataLayer.getSessionData())||void 0===n?void 0:n.id_token;if(!c||0===c.trim().length)throw new xn("AUTH_CORE-GSOU-NF02","authentication-core","getSignOutURL","ID token not found.","No ID token could be found. Either the session information is lost or you have not signed in.");const o=null!==(l=null==e?void 0:e.signOutRedirectURL)&&void 0!==l?l:null==e?void 0:e.signInRedirectURL;if(!o||0===o.trim().length)throw new xn("AUTH_CORE-GSOU-NF03","authentication-core","getSignOutURL","No sign-out redirect URL found.","The sign-out redirect URL cannot be found or the URL passed to the SDK is empty. No sign-in redirect URL has been found either. ");return`${i}?id_token_hint=${c}&post_logout_redirect_uri=${o}&state=sign_out_success`}))}signOut(){return gn(this,void 0,void 0,(function*(){const t=yield this.getSignOutURL();return this._authenticationHelper.clearUserSessionData(),t}))}getAccessToken(){var t;return gn(this,void 0,void 0,(function*(){return null===(t=yield this._dataLayer.getSessionData())||void 0===t?void 0:t.access_token}))}isAuthenticated(){return gn(this,void 0,void 0,(function*(){return Boolean(yield this.getAccessToken())}))}getPKCECode(){return gn(this,void 0,void 0,(function*(){return yield this._dataLayer.getTemporaryDataParameter("pkce_code_verifier")}))}setPKCECode(t){return gn(this,void 0,void 0,(function*(){return yield this._dataLayer.setTemporaryDataParameter("pkce_code_verifier",t)}))}updateConfig(t){return gn(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(t),t.overrideWellEndpointConfig?(null==t?void 0:t.endpoints)&&(yield this._dataLayer.setOIDCProviderMetaData(yield this._authenticationHelper.resolveEndpoints({}))):(null==t?void 0:t.endpoints)&&(yield this.getOIDCProviderMetaData(!0))}))}}class Ti{constructor(t,n){this._id=t,this._store=n}setDataInBulk(t,n){var l;return gn(this,void 0,void 0,(function*(){const i=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,e=i&&JSON.parse(i),c=Object.assign(Object.assign({},e),n),o=JSON.stringify(c);yield this._store.setData(t,o)}))}setValue(t,n,l){var i;return gn(this,void 0,void 0,(function*(){const e=null!==(i=yield this._store.getData(t))&&void 0!==i?i:null,c=e&&JSON.parse(e),o=Object.assign(Object.assign({},c),{[n]:l}),d=JSON.stringify(o);yield this._store.setData(t,d)}))}removeValue(t,n){var l;return gn(this,void 0,void 0,(function*(){const i=null!==(l=yield this._store.getData(t))&&void 0!==l?l:null,e=i&&JSON.parse(i),c=Object.assign({},e);delete c[n];const o=JSON.stringify(c);yield this._store.setData(t,o)}))}_resolveKey(t){return`${t}-${this._id}`}setConfigData(t){return gn(this,void 0,void 0,(function*(){yield this.setDataInBulk(this._resolveKey(Sn.ConfigData),t)}))}setOIDCProviderMetaData(t){return gn(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Sn.OIDCProviderMetaData),t)}))}setTemporaryData(t){return gn(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Sn.TemporaryData),t)}))}setSessionData(t){return gn(this,void 0,void 0,(function*(){this.setDataInBulk(this._resolveKey(Sn.SessionData),t)}))}getConfigData(){var t;return gn(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(Sn.ConfigData)))&&void 0!==t?t:null)}))}getOIDCProviderMetaData(){var t;return gn(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(Sn.OIDCProviderMetaData)))&&void 0!==t?t:null)}))}getTemporaryData(){var t;return gn(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(Sn.TemporaryData)))&&void 0!==t?t:null)}))}getSessionData(){var t;return gn(this,void 0,void 0,(function*(){return JSON.parse(null!==(t=yield this._store.getData(this._resolveKey(Sn.SessionData)))&&void 0!==t?t:null)}))}removeConfigData(){return gn(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Sn.ConfigData))}))}removeOIDCProviderMetaData(){return gn(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Sn.OIDCProviderMetaData))}))}removeTemporaryData(){return gn(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Sn.TemporaryData))}))}removeSessionData(){return gn(this,void 0,void 0,(function*(){yield this._store.removeData(this._resolveKey(Sn.SessionData))}))}getConfigDataParameter(t){return gn(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(Sn.ConfigData));return n&&JSON.parse(n)[t]}))}getOIDCProviderMetaDataParameter(t){return gn(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(Sn.OIDCProviderMetaData));return n&&JSON.parse(n)[t]}))}getTemporaryDataParameter(t){return gn(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(Sn.TemporaryData));return n&&JSON.parse(n)[t]}))}getSessionDataParameter(t){return gn(this,void 0,void 0,(function*(){const n=yield this._store.getData(this._resolveKey(Sn.SessionData));return n&&JSON.parse(n)[t]}))}setConfigDataParameter(t,n){return gn(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Sn.ConfigData),t,n)}))}setOIDCProviderMetaDataParameter(t,n){return gn(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Sn.OIDCProviderMetaData),t,n)}))}setTemporaryDataParameter(t,n){return gn(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Sn.TemporaryData),t,n)}))}setSessionDataParameter(t,n){return gn(this,void 0,void 0,(function*(){yield this.setValue(this._resolveKey(Sn.SessionData),t,n)}))}removeConfigDataParameter(t){return gn(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Sn.ConfigData),t)}))}removeOIDCProviderMetaDataParameter(t){return gn(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Sn.OIDCProviderMetaData),t)}))}removeTemporaryDataParameter(t){return gn(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Sn.TemporaryData),t)}))}removeSessionDataParameter(t){return gn(this,void 0,void 0,(function*(){yield this.removeValue(this._resolveKey(Sn.SessionData),t)}))}}const ki={clockTolerance:300,enablePKCE:!0,responseMode:Gn.query,scope:["openid"],sendCookiesInRequests:!0,validateIDToken:!0};class Fi{
|
|
31
31
|
/**
|
|
32
32
|
* This is the constructor method that returns an instance of the .
|
|
33
33
|
*
|
|
@@ -42,7 +42,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
42
42
|
* @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#constructor
|
|
43
43
|
* @preserve
|
|
44
44
|
*/
|
|
45
|
-
constructor(t){
|
|
45
|
+
constructor(t){Fi._instanceID?Fi._instanceID+=1:Fi._instanceID=0,this._dataLayer=new Ti("instance_"+Fi._instanceID,t),this._authenticationCore=new xi(this._dataLayer)
|
|
46
46
|
/**
|
|
47
47
|
*
|
|
48
48
|
* This method initializes the SDK with the config data.
|
|
@@ -61,7 +61,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
61
61
|
* @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#initialize
|
|
62
62
|
*
|
|
63
63
|
* @preserve
|
|
64
|
-
*/}initialize(t){var l,i
|
|
64
|
+
*/}initialize(t){var n,l,i;return gn(this,void 0,void 0,(function*(){yield this._dataLayer.setConfigData(Object.assign(Object.assign(Object.assign({},ki),t),{scope:[...null!==(n=ki.scope)&&void 0!==n?n:[],...null!==(i=null===(l=t.scope)||void 0===l?void 0:l.filter(t=>{var n;return!(null===(n=null==ki?void 0:ki.scope)||void 0===n?void 0:n.includes(t))}))&&void 0!==i?i:[]]}))}))}
|
|
65
65
|
/**
|
|
66
66
|
* This method returns the `DataLayer` object that allows you to access authentication data.
|
|
67
67
|
*
|
|
@@ -100,7 +100,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
100
100
|
* @memberof AsgardeoAuthClient
|
|
101
101
|
*
|
|
102
102
|
* @preserve
|
|
103
|
-
*/getAuthorizationURL(t){return
|
|
103
|
+
*/getAuthorizationURL(t){return gn(this,void 0,void 0,(function*(){const n=Object.assign({},t);return null==n||delete n.forceInit,(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.getAuthorizationURL(n):this._authenticationCore.getOIDCProviderMetaData(null==t?void 0:t.forceInit).then(()=>this._authenticationCore.getAuthorizationURL(n))}))}
|
|
104
104
|
/**
|
|
105
105
|
* This is an async method that sends a request to obtain the access token and returns a Promise
|
|
106
106
|
* that resolves with the token and other relevant data.
|
|
@@ -124,7 +124,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
124
124
|
* @memberof AsgardeoAuthClient
|
|
125
125
|
*
|
|
126
126
|
* @preserve
|
|
127
|
-
*/requestAccessToken(t,
|
|
127
|
+
*/requestAccessToken(t,n){return gn(this,void 0,void 0,(function*(){return(yield this._dataLayer.getTemporaryDataParameter("op_config_initiated"))?this._authenticationCore.requestAccessToken(t,n):this._authenticationCore.getOIDCProviderMetaData(!1).then(()=>this._authenticationCore.requestAccessToken(t,n))}))}
|
|
128
128
|
/**
|
|
129
129
|
* This method clears all authentication data and returns the sign-out URL.
|
|
130
130
|
*
|
|
@@ -140,7 +140,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
140
140
|
* @memberof AsgardeoAuthClient
|
|
141
141
|
*
|
|
142
142
|
* @preserve
|
|
143
|
-
*/signOut(){return
|
|
143
|
+
*/signOut(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.signOut()}))}
|
|
144
144
|
/**
|
|
145
145
|
* This method returns the sign-out URL.
|
|
146
146
|
*
|
|
@@ -158,7 +158,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
158
158
|
* @memberof AsgardeoAuthClient
|
|
159
159
|
*
|
|
160
160
|
* @preserve
|
|
161
|
-
*/getSignOutURL(){return
|
|
161
|
+
*/getSignOutURL(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.getSignOutURL()}))}
|
|
162
162
|
/**
|
|
163
163
|
* This method returns OIDC service endpoints that are fetched from the `.well-known` endpoint.
|
|
164
164
|
*
|
|
@@ -174,7 +174,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
174
174
|
* @memberof AsgardeoAuthClient
|
|
175
175
|
*
|
|
176
176
|
* @preserve
|
|
177
|
-
*/getOIDCServiceEndpoints(){return
|
|
177
|
+
*/getOIDCServiceEndpoints(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.getOIDCServiceEndpoints()}))}
|
|
178
178
|
/**
|
|
179
179
|
* This method decodes the payload of the ID token and returns it.
|
|
180
180
|
*
|
|
@@ -190,7 +190,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
190
190
|
* @memberof AsgardeoAuthClient
|
|
191
191
|
*
|
|
192
192
|
* @preserve
|
|
193
|
-
*/getDecodedIDToken(){return
|
|
193
|
+
*/getDecodedIDToken(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.getDecodedIDToken()}))}
|
|
194
194
|
/**
|
|
195
195
|
* This method returns the ID token.
|
|
196
196
|
*
|
|
@@ -206,7 +206,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
206
206
|
* @memberof AsgardeoAuthClient
|
|
207
207
|
*
|
|
208
208
|
* @preserve
|
|
209
|
-
*/getIDToken(){return
|
|
209
|
+
*/getIDToken(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.getIDToken()}))}
|
|
210
210
|
/**
|
|
211
211
|
* This method returns the basic user information obtained from the ID token.
|
|
212
212
|
*
|
|
@@ -222,7 +222,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
222
222
|
* @memberof AsgardeoAuthClient
|
|
223
223
|
*
|
|
224
224
|
* @preserve
|
|
225
|
-
*/getBasicUserInfo(){return
|
|
225
|
+
*/getBasicUserInfo(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.getBasicUserInfo()}))}
|
|
226
226
|
/**
|
|
227
227
|
* This method revokes the access token.
|
|
228
228
|
*
|
|
@@ -281,7 +281,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
281
281
|
* @memberof AsgardeoAuthClient
|
|
282
282
|
*
|
|
283
283
|
* @preserve
|
|
284
|
-
*/getAccessToken(){return
|
|
284
|
+
*/getAccessToken(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.getAccessToken()}))}
|
|
285
285
|
/**
|
|
286
286
|
* This method sends a custom-grant request and returns a Promise that resolves with the response
|
|
287
287
|
* depending on the config passed.
|
|
@@ -335,7 +335,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
335
335
|
* @memberof AsgardeoAuthClient
|
|
336
336
|
*
|
|
337
337
|
* @preserve
|
|
338
|
-
*/isAuthenticated(){return
|
|
338
|
+
*/isAuthenticated(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.isAuthenticated()}))}
|
|
339
339
|
/**
|
|
340
340
|
* This method returns the PKCE code generated during the generation of the authentication URL.
|
|
341
341
|
*
|
|
@@ -351,7 +351,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
351
351
|
* @memberof AsgardeoAuthClient
|
|
352
352
|
*
|
|
353
353
|
* @preserve
|
|
354
|
-
*/getPKCECode(){return
|
|
354
|
+
*/getPKCECode(){return gn(this,void 0,void 0,(function*(){return this._authenticationCore.getPKCECode()}))}
|
|
355
355
|
/**
|
|
356
356
|
* This method sets the PKCE code to the data store.
|
|
357
357
|
*
|
|
@@ -367,7 +367,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
367
367
|
* @memberof AsgardeoAuthClient
|
|
368
368
|
*
|
|
369
369
|
* @preserve
|
|
370
|
-
*/setPKCECode(t){return
|
|
370
|
+
*/setPKCECode(t){return gn(this,void 0,void 0,(function*(){yield this._authenticationCore.setPKCECode(t)}))}
|
|
371
371
|
/**
|
|
372
372
|
* This method returns if the sign-out is successful or not.
|
|
373
373
|
*
|
|
@@ -383,7 +383,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
383
383
|
* @memberof AsgardeoAuthClient
|
|
384
384
|
*
|
|
385
385
|
* @preserve
|
|
386
|
-
*/static isSignOutSuccessful(t){const
|
|
386
|
+
*/static isSignOutSuccessful(t){const n=new URL(t),l=n.searchParams.get("state"),i=Boolean(n.searchParams.get("error"));return!!l&&"sign_out_success"===l&&!i}
|
|
387
387
|
/**
|
|
388
388
|
* This method updates the configuration that was passed into the constructor when instantiating this class.
|
|
389
389
|
*
|
|
@@ -404,7 +404,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
404
404
|
* @memberof AsgardeoAuthClient
|
|
405
405
|
*
|
|
406
406
|
* @preserve
|
|
407
|
-
*/updateConfig(t){return gl(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}}var xn,Tn;!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(xn||(xn={})),function(t){t.SignIn="sign-in",t.SignOut="sign-out",t.Initialize="initialize",t.HttpRequestStart="http-request-start",t.HttpRequestFinish="http-request-finish",t.HttpRequestError="http-request-error",t.HttpRequestSuccess="http-request-success",t.RevokeAccessToken="revoke-access-token",t.CustomGrant="custom-grant"}(Tn||(Tn={}));const kn="Y2hlY2tTZXNzaW9u";class Fn extends Error{constructor(t,l,i,n,e,c){super(null!=n?n:null==c?void 0:c.message),this.name=this.constructor.name,this.code=t,this.file=l,this.method=i,this.error=c,this.description=e,Object.setPrototypeOf(this,new.target.prototype)}}class Bn{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(){return n(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const l=parseInt(t.expires_in),i=setTimeout(()=>n(this,void 0,void 0,(function*(){yield this._authenticationClient.refreshAccessToken()})),1e3*(l<=10?l:l-10));yield this._dataLayer.setTemporaryDataParameter(Sl,JSON.stringify(i))}}))}clearRefreshTokenTimeout(){return n(this,void 0,void 0,(function*(){if(yield this._dataLayer.getTemporaryDataParameter(Sl)){const t=JSON.parse(yield this._dataLayer.getTemporaryDataParameter(Sl));clearTimeout(t)}}))}}class zn{constructor(){}static removeAuthorizationCode(){const t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}static getPKCE(){var t;return null!==(t=sessionStorage.getItem(vl))&&void 0!==t?t:""}static setPKCE(t){sessionStorage.setItem(vl,t)}static setSignOutURL(t){sessionStorage.setItem(Jl,t)}static getSignOutURL(){var t;return null!==(t=sessionStorage.getItem(Jl))&&void 0!==t?t:""}static removePKCE(){sessionStorage.removeItem(vl)}static canContinueSignIn(t,l){return!(t&&!zn.hasErrorInURL()&&!zn.hasAuthSearchParamsInURL()&&!l)}static isInitializedSilentSignIn(){return zn.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!zn.hasErrorInURL()&&!zn.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),l=t?JSON.parse(t):null;return Boolean(l)}static isSignOutSuccessful(){if(Hn.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!0}return!1}static isSilentStatePresentInURL(){return"sign-in-silently"===new URL(window.location.href).searchParams.get("state")}static hasAuthSearchParamsInURL(t=window.location.search){return/[?&]code=[^&]+/.test(t)}static hasErrorInURL(t=window.location.href){return!!new URL(t).searchParams.get("error")}static canSendPromptNoneRequest(){const t=sessionStorage.getItem("promptNoneRequestSent");return!(t&&JSON.parse(t))}static setPromptNoneRequestSent(t){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(t))}static waitTillPageRedirect(t){return n(this,void 0,void 0,(function*(){const l=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*l))}))}}const wn=(()=>{let t,l,i,e,c,o,d,r,a,u,Z,s;const b=(n,r,a,u,Z,b,h,I)=>{t=n,l=r,i=a,e=u,c=b,o=h,d=Z,s=I,e>-1&&m(),d>-1&&(Z=setInterval(()=>{p()},1e3*d))},m=()=>n(void 0,void 0,void 0,(function*(){var o;if(!l||!t||!c)return;const d="opIFrame";function r(){var e;return n(this,void 0,void 0,(function*(){const n=yield i();if(Boolean(t)&&Boolean(n)){const i=`${t} ${n}`,c=document.getElementById("rpIFrame"),o=(null===(e=null==c?void 0:c.contentDocument)||void 0===e?void 0:e.getElementById(d)).contentWindow;null==o||o.postMessage(i,l)}}))}const u=document.getElementById("rpIFrame");(null===(o=null==u?void 0:u.contentDocument)||void 0===o?void 0:o.getElementById(d)).src=l+"?client_id="+t+"&redirect_uri="+c,yield r(),a=setInterval(r,1e3*e),I()})),h=()=>{clearInterval(a),clearInterval(void 0)},I=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){var i;return n(this,void 0,void 0,(function*(){!l||(null==l?void 0:l.indexOf(t.origin))<0||"set_session_state_from_iframe"===(null===(i=null==t?void 0:t.data)||void 0===i?void 0:i.type)||"unchanged"===t.data||("error"===t.data?window.location.href=yield r():"changed"===t.data&&p())}))}),!1)},p=()=>{var l;const i=document.getElementById("rpIFrame"),n=null===(l=null==i?void 0:i.contentDocument)||void 0===l?void 0:l.getElementById("promptNoneIFrame");if(zn.canSendPromptNoneRequest()){zn.setPromptNoneRequestSent(!0);const l=t=>{var i,n,e;"set_session_state_from_iframe"===(null===(i=null==t?void 0:t.data)||void 0===i?void 0:i.type)&&(Z(null!==(e=null===(n=null==t?void 0:t.data)||void 0===n?void 0:n.data)&&void 0!==e?e:""),null===window||void 0===window||window.removeEventListener("message",l))};u!==xn.BrowserMemory&&u!==xn.WebWorker||null===window||void 0===window||window.addEventListener("message",l);const i=new URL(o);i.searchParams.set("response_type","code"),i.searchParams.set("client_id",t),i.searchParams.set("scope","openid"),i.searchParams.set("redirect_uri",c),i.searchParams.set("state",kn),i.searchParams.set("prompt","none"),s&&(i.searchParams.set("code_challenge_method","S256"),i.searchParams.set("code_challenge",(()=>{const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz-_";let l="";for(let i=0;i<43;i++){const i=Math.floor(Math.random()*t.length);l+=t.substring(i,i+1)}return l})())),n.src=i.toString()}},G=t=>n(void 0,void 0,void 0,(function*(){var l,i;const n=new URL(window.location.href).searchParams.get("state"),e=new URL(window.location.href).searchParams.get(Yl),c=window.parent.parent;if(null!==n&&(n===kn||"sign-in-silently"===n)){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if("sign-in-silently"===n){const t={data:{code:o,sessionState:null!=e?e:""},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),zn.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zn.waitTillPageRedirect(),!0}const d=new URL(window.location.href).searchParams.get("session_state");if(u===xn.LocalStorage||u===xn.SessionStorage)t&&(yield t(d));else{const t={data:null!=d?d:"",type:"set_session_state_from_iframe"};null===(i=null===(l=null===window||void 0===window?void 0:window.parent)||void 0===l?void 0:l.parent)||void 0===i||i.postMessage(t)}return zn.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zn.waitTillPageRedirect(),!0}if("sign-in-silently"===n){const t={type:"check_session_signed_out"};return window.parent.parent.postMessage(t,c.origin),zn.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield zn.waitTillPageRedirect(),!0}return zn.setPromptNoneRequestSent(!1),c.location.href=yield r(),window.location.href="about:blank",yield zn.waitTillPageRedirect(),!0}return!1}));return(t,l,i)=>{var n;let e=document.createElement("iframe");return e.setAttribute("id","rpIFrame"),e.style.display="none",e.onload=()=>{var t,l,i,n;e=document.getElementById("rpIFrame");const c=null==e?void 0:e.contentDocument,o=null==c?void 0:c.createElement("iframe");o&&(o.setAttribute("id","opIFrame"),o.style.display="none");const d=null==c?void 0:c.createElement("iframe");d&&(d.setAttribute("id","promptNoneIFrame"),d.style.display="none"),o&&(null===(l=null===(t=null==e?void 0:e.contentDocument)||void 0===t?void 0:t.body)||void 0===l||l.appendChild(o)),d&&(null===(n=null===(i=null==e?void 0:e.contentDocument)||void 0===i?void 0:i.body)||void 0===n||n.appendChild(d))},null===(n=null===document||void 0===document?void 0:document.body)||void 0===n||n.appendChild(e),r=t,u=l,Z=i,{initialize:b,receivePromptNoneResponse:G,reset:h}}})();var An;let Pn=An=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=yl.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new An),this.axiosInstance.interceptors.request.use(t=>n(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(t)}))),this.axiosInstance.interceptors.response.use(t=>this.clientInstance.successHandler(t),t=>this.clientInstance.errorHandler(t)),this.axiosInstance.all=yl.all,this.axiosInstance.spread=yl.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(t){return n(this,void 0,void 0,(function*(){if(yield this.attachToken(t),null==t?void 0:t.shouldEncodeToFormData){const l=null==t?void 0:t.data,i=new FormData;Object.keys(l).forEach(t=>{i.append(t,l[t])}),t.data=i}return An.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw An.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return An.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,l){return n(this,void 0,void 0,(function*(){An.isHandlerEnabled=t,this.attachToken=l}))}enableHandler(){An.isHandlerEnabled=!0}disableHandler(){An.isHandlerEnabled=!1}disableHandlerWithTimeout(t=An.DEFAULT_HANDLER_DISABLE_TIMEOUT){An.isHandlerEnabled=!1,setTimeout(()=>{An.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};Pn.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,Pn=An=function(t,l,i,n){var e,c=arguments.length,o=c<3?l:null===n?n=Object.getOwnPropertyDescriptor(l,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,l,i,n);else for(var d=t.length-1;d>=0;d--)(e=t[d])&&(o=(c<3?e(o):c>3?e(l,i,o):e(l,i))||o);return c>3&&o&&Object.defineProperty(l,i,o),o}([t=>{}],Pn);class Mn{setData(t,l){return n(this,void 0,void 0,(function*(){localStorage.setItem(t,l)}))}getData(t){var l;return n(this,void 0,void 0,(function*(){return null!==(l=localStorage.getItem(t))&&void 0!==l?l:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class jn{constructor(){this._data=new Map}setData(t,l){return n(this,void 0,void 0,(function*(){this._data.set(t,l)}))}getData(t){var l,i;return n(this,void 0,void 0,(function*(){return null!==(i=null===(l=this._data)||void 0===l?void 0:l.get(t))&&void 0!==i?i:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class Qn{setData(t,l){return n(this,void 0,void 0,(function*(){sessionStorage.setItem(t,l)}))}getData(t){var l;return n(this,void 0,void 0,(function*(){return null!==(l=sessionStorage.getItem(t))&&void 0!==l?l:"{}"}))}removeData(t){return n(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}const En=t=>n(void 0,void 0,void 0,(function*(){var l;const i=(t=>{switch(t){case xn.LocalStorage:return new Mn;case xn.SessionStorage:return new Qn;case xn.BrowserMemory:return new jn;default:return new Qn}})(t.storage),e=new Hn(i);yield e.initialize(t);const c=new Bn(e),o=e.getDataLayer(),d=wn(()=>n(void 0,void 0,void 0,(function*(){return e.signOut()})),null!==(l=t.storage)&&void 0!==l?l:xn.SessionStorage,t=>o.setSessionDataParameter(Yl,null!=t?t:"")),r=Pn.getInstance();(null==r?void 0:r.init)&&(yield r.init(!0,t=>n(void 0,void 0,void 0,(function*(){Object.assign({attachToken:!0},t).attachToken&&(t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield e.getAccessToken())}))}))));const a=()=>n(void 0,void 0,void 0,(function*(){var t,l,i,c;const r=yield e.getOIDCServiceEndpoints(),a=yield o.getConfigData();d.initialize(a.clientID,null!==(t=r.checkSessionIframe)&&void 0!==t?t:"",()=>n(void 0,void 0,void 0,(function*(){return(yield e.getBasicUserInfo()).sessionState})),null!==(l=a.checkSessionInterval)&&void 0!==l?l:3,null!==(i=a.sessionRefreshInterval)&&void 0!==i?i:300,a.signInRedirectURL,null!==(c=r.authorizationEndpoint)&&void 0!==c?c:"",a.enablePKCE)})),u=(t,l)=>n(void 0,void 0,void 0,(function*(){const i=yield o.getConfigData();if(i.storage===xn.BrowserMemory&&i.enablePKCE){const t=zn.getPKCE();yield e.setPKCECode(t)}return e.requestAccessToken(t,l).then(()=>n(void 0,void 0,void 0,(function*(){return i.storage===xn.BrowserMemory&&zn.setSignOutURL(yield e.getSignOutURL()),c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),i.enableOIDCSessionManagement&&a(),e.getBasicUserInfo()}))).catch(t=>Promise.reject(t))}));return{disableHttpHandler:()=>((null==r?void 0:r.disableHandler)&&r.disableHandler(),!0),enableHttpHandler:()=>((null==r?void 0:r.enableHandler)&&r.enableHandler(),!0),getAccessToken:()=>n(void 0,void 0,void 0,(function*(){return e.getAccessToken()})),getBasicUserInfo:()=>n(void 0,void 0,void 0,(function*(){return e.getBasicUserInfo()})),getDecodedIDToken:()=>n(void 0,void 0,void 0,(function*(){return e.getDecodedIDToken()})),getHttpClient:()=>r,getIDToken:()=>n(void 0,void 0,void 0,(function*(){return e.getIDToken()})),getOIDCServiceEndpoints:()=>n(void 0,void 0,void 0,(function*(){return e.getOIDCServiceEndpoints()})),httpRequest:t=>n(void 0,void 0,void 0,(function*(){var l,i;let n=!1;const c=yield o.getConfigData();for(const e of[...null!==(l=yield null==c?void 0:c.resourceServerURLs)&&void 0!==l?l:[],null==c?void 0:c.serverOrigin])if(null===(i=null==t?void 0:t.url)||void 0===i?void 0:i.startsWith(e)){n=!0;break}return n?r.request(t).then(t=>Promise.resolve(t)).catch(l=>{var i;return 401===(null===(i=null==l?void 0:l.response)||void 0===i?void 0:i.status)?e.refreshAccessToken().then(()=>r.request(t).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(new Fn("MAIN_THREAD_CLIENT-HR-ES01","main-thread-client","httpRequest","","",t))):Promise.reject(l)}):Promise.reject(new Fn("MAIN_THREAD_CLIENT-HR-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))})),httpRequestAll:t=>n(void 0,void 0,void 0,(function*(){var l,i,n;let c=!0;const d=yield o.getConfigData();for(const e of t){let t=!1;for(const c of[...null!==(i=null===(l=yield d)||void 0===l?void 0:l.resourceServerURLs)&&void 0!==i?i:[],null==d?void 0:d.serverOrigin])if(null===(n=e.url)||void 0===n?void 0:n.startsWith(c)){t=!0;break}if(!t){c=!1;break}}const a=[];return c?(t.forEach(t=>{a.push(r.request(t))}),(null==r?void 0:r.all)&&r.all(a).then(t=>Promise.resolve(t)).catch(t=>{var l;return 401===(null===(l=null==t?void 0:t.response)||void 0===l?void 0:l.status)?e.refreshAccessToken().then(()=>r.all&&r.all(a).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(new Fn("MAIN_THREAD_CLIENT-HRA-ES01","main-thread-client","httpRequestAll","","",t))):Promise.reject(t)})):Promise.reject(new Fn("MAIN_THREAD_CLIENT-HRA-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))})),isAuthenticated:()=>n(void 0,void 0,void 0,(function*(){return e.isAuthenticated()})),refreshAccessToken:()=>e.refreshAccessToken().then(()=>(c.refreshAccessTokenAutomatically(),e.getBasicUserInfo())).catch(t=>Promise.reject(t)),requestCustomGrant:t=>n(void 0,void 0,void 0,(function*(){var l,i,d;let r=!0,a=!1;const u=yield o.getConfigData();if(null==t?void 0:t.tokenEndpoint){r=!1;for(const n of[...null!==(i=null===(l=yield o.getConfigData())||void 0===l?void 0:l.resourceServerURLs)&&void 0!==i?i:[],null==u?void 0:u.serverOrigin])if(null===(d=t.tokenEndpoint)||void 0===d?void 0:d.startsWith(n)){a=!0;break}}return r||a?e.requestCustomGrant(t).then(l=>n(void 0,void 0,void 0,(function*(){return t.returnsSession?(c.refreshAccessTokenAutomatically(),e.getBasicUserInfo()):l}))).catch(t=>Promise.reject(t)):Promise.reject(new Fn("MAIN_THREAD_CLIENT-RCG-IV01","main-thread-client","requestCustomGrant","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))})),revokeAccessToken:()=>e.revokeAccessToken().then(()=>(d.reset(),c.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{(null==r?void 0:r.setHttpRequestErrorCallback)&&r.setHttpRequestErrorCallback(t)},setHttpRequestFinishCallback:t=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(t)},setHttpRequestStartCallback:t=>{(null==r?void 0:r.setHttpRequestStartCallback)&&r.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==r?void 0:r.setHttpRequestSuccessCallback)&&r.setHttpRequestSuccessCallback(t)},signIn:(t,l,i)=>n(void 0,void 0,void 0,(function*(){var r,Z;const s=yield o.getConfigData();if(yield d.receivePromptNoneResponse(t=>n(void 0,void 0,void 0,(function*(){yield o.setSessionDataParameter(Yl,null!=t?t:"")}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(yield e.isAuthenticated())return c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),s.enableOIDCSessionManagement&&a(),Promise.resolve(yield e.getBasicUserInfo());let b,m;if((null==s?void 0:s.responseMode)===pl.formPost&&l?(b=l,m=null!=i?i:""):(b=null!==(r=new URL(window.location.href).searchParams.get(Kl))&&void 0!==r?r:"",m=null!==(Z=new URL(window.location.href).searchParams.get(Yl))&&void 0!==Z?Z:"",zn.removeAuthorizationCode()),b)return u(b,m);const h=new URL(window.location.href).searchParams.get("error"),I=new URL(window.location.href).searchParams.get("error_description");if(h){const t=new URL(window.location.href);return t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),Promise.reject(new Fn("MAIN_THREAD_CLIENT-SI-BE","main-thread-client","signIn",h,null!=I?I:""))}return e.getAuthorizationURL(t).then(t=>n(void 0,void 0,void 0,(function*(){return s.storage===xn.BrowserMemory&&s.enablePKCE&&zn.setPKCE(yield e.getPKCECode()),location.href=t,yield zn.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))})),signOut:()=>n(void 0,void 0,void 0,(function*(){return(yield e.isAuthenticated())?location.href=yield e.signOut():location.href=zn.getSignOutURL(),c.clearRefreshTokenTimeout(),yield zn.waitTillPageRedirect(),!0})),trySignInSilently:()=>n(void 0,void 0,void 0,(function*(){var t;const l=yield o.getConfigData();if(zn.isInitializedSilentSignIn())return yield d.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const i=document.getElementById("rpIFrame"),c=null===(t=null==i?void 0:i.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");try{const t=yield e.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),i=new URL(t);i.searchParams.set("response_mode","query");const n=i.toString();l.storage===xn.BrowserMemory&&l.enablePKCE&&zn.setPKCE(yield e.getPKCECode()),c.src=n}catch(t){return Promise.reject(t)}return new Promise((t,l)=>{const i=setTimeout(()=>{t(!1)},1e4),e=c=>n(void 0,void 0,void 0,(function*(){var n,o;const d=c.data;"check_session_signed_out"==(null==d?void 0:d.type)&&(window.removeEventListener("message",e),clearTimeout(i),t(!1)),"check_session_signed_in"==(null==d?void 0:d.type)&&(null===(n=null==d?void 0:d.data)||void 0===n?void 0:n.code)&&u(d.data.code,null===(o=null==d?void 0:d.data)||void 0===o?void 0:o.sessionState).then(l=>{window.removeEventListener("message",e),t(l)}).catch(t=>{window.removeEventListener("message",e),l(t)}).finally(()=>{clearTimeout(i)})}));window.addEventListener("message",e)})})),updateConfig:t=>n(void 0,void 0,void 0,(function*(){const l=yield o.getConfigData(),i=!(l&&l.endpoints&&l.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&l.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),n=Object.assign(Object.assign({},l),t);yield e.updateConfig(n),n.enableOIDCSessionManagement&&i&&(d.reset(),a())}))}}));var Dn,On=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHI9W10sbj1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89ITE7ZnVuY3Rpb24gcygpe289ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsaT1lLmxlbmd0aDt0PGk7Kyt0KXJbdF09ZVt0XSxuW2UuY2hhckNvZGVBdCh0KV09dDtuWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIGksbyxzPVtdLGE9dDthPG47YSs9MylpPShlW2FdPDwxNikrKGVbYSsxXTw8OCkrZVthKzJdLHMucHVzaChyWyhvPWkpPj4xOCY2M10rcltvPj4xMiY2M10rcltvPj42JjYzXStyWzYzJm9dKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB1KGUpe3ZhciB0O298fHMoKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uJTMsdT0iIixjPVtdLGg9MTYzODMsbD0wLGY9bi1pO2w8ZjtsKz1oKWMucHVzaChhKGUsbCxsK2g+Zj9mOmwraCkpO3JldHVybiAxPT09aT8odD1lW24tMV0sdSs9clt0Pj4yXSx1Kz1yW3Q8PDQmNjNdLHUrPSI9PSIpOjI9PT1pJiYodD0oZVtuLTJdPDw4KStlW24tMV0sdSs9clt0Pj4xMF0sdSs9clt0Pj40JjYzXSx1Kz1yW3Q8PDImNjNdLHUrPSI9IiksYy5wdXNoKHUpLGMuam9pbigiIil9ZnVuY3Rpb24gYyhlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBoKGUsdCxyLG4saSxvKXt2YXIgcyxhLHUsYz04Km8taS0xLGg9KDE8PGMpLTEsbD1oPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpvLTEscD1uPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9aCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSx1Kj0yKSwodCs9cytsPj0xP2YvdTpmKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKHMrKyx1Lz0yKSxzK2w+PWg/KGE9MCxzPWgpOnMrbD49MT8oYT0odCp1LTEpKk1hdGgucG93KDIsaSkscys9bCk6KGE9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqZ312YXIgbD17fS50b1N0cmluZyxmPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWwuY2FsbChlKX07ZnVuY3Rpb24gZCgpe3JldHVybiBnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHAoZSx0KXtpZihkKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBnKGUsdCxyKXtpZighKGcuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBtKHRoaXMsZSl9cmV0dXJuIHYodGhpcyxlLHQscil9ZnVuY3Rpb24gdihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO2cuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189Zy5wcm90b3R5cGU6ZT13KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIWcuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGsodCxyKSxpPShlPXAoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoXyh0KSl7dmFyIHI9MHxiKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXAoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP3AoZSwwKTp3KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmYodC5kYXRhKSlyZXR1cm4gdyhlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIHkoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBtKGUsdCl7aWYoeSh0KSxlPXAoZSx0PDA/MDowfGIodCkpLCFnLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGIodC5sZW5ndGgpO2U9cChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtpZihlPj1kKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gayhlLHQpe2lmKF8oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuICQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuICQoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiB4KHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHEodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gRShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIFQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWcuZnJvbSh0LG4pKSxfKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6QShlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGcuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOkEoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIEEoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gUihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHQscixuKXtyZXR1cm4gWCgkKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFAoZSx0LHIsbil7cmV0dXJuIFgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBEKGUsdCxyLG4pe3JldHVybiBQKGUsdCxyLG4pfWZ1bmN0aW9uIE8oZSx0LHIsbil7cmV0dXJuIFgoRyh0KSxlLHIsbil9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gWChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFUoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3UoZSk6dShlLnNsaWNlKHQscikpfWZ1bmN0aW9uIE0oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsdSxjPWVbaV0saD1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKHU9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9dSk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihoPXUpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYodT0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZ1PDExMTQxMTImJihoPXUpfW51bGw9PT1oPyhoPTY1NTMzLGw9MSk6aD42NTUzNSYmKGgtPTY1NTM2LG4ucHVzaChoPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG4ucHVzaChoKSxpKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1MKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1MKSk7cmV0dXJuIHJ9KG4pfWcuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT10LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHQuVFlQRURfQVJSQVlfU1VQUE9SVCxnLnBvb2xTaXplPTgxOTIsZy5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189Zy5wcm90b3R5cGUsZX0sZy5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdihudWxsLGUsdCxyKX0sZy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGcuX19wcm90b19fPVVpbnQ4QXJyYXkpLGcuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4geSh0KSx0PD0wP3AoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9wKGUsdCkuZmlsbChyLG4pOnAoZSx0KS5maWxsKHIpOnAoZSx0KX0obnVsbCxlLHQscil9LGcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFooZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmWihlLnNsaWNlKDAsMCkpfShlKSl9LGcuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFfKGUpfHwhXyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sZy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxnLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGcuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1nLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFfKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sZy5ieXRlTGVuZ3RoPWssZy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilFKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpRSh0aGlzLHQsdCszKSxFKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClFKHRoaXMsdCx0KzcpLEUodGhpcyx0KzEsdCs2KSxFKHRoaXMsdCsyLHQrNSksRSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP00odGhpcywwLGUpOlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIV8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWcuY29tcGFyZSh0aGlzLGUpfSxnLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighXyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixpKSxjPWUuc2xpY2UodCxyKSxoPTA7aDxhOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBUKHRoaXMsZSx0LHIsITApfSxnLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFQodGhpcyxlLHQsciwhMSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBSKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRCh0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBJKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LGcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEw9NDA5NjtmdW5jdGlvbiBIKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVYoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gcShlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpLG8pe2lmKCFfKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBLKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFkoZSx0LHIsbixpLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsNCksaChlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBKKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsOCksaChlLHQscixuLDUyLDgpLHIrOH1nLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgZyhpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0sZy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fEIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LGcucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxnLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEIoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sZy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8QihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxnLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxnLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sZy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLGModGhpcyxlLCEwLDIzLDQpfSxnLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsMjMsNCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITAsNTIsOCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsNTIsOCl9LGcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8Tih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sZy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxOKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LGcucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDI1NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsMiw2NTUzNSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwyLDY1NTM1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOksodGhpcyxlLHQsITEpLHQrMn0sZy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Rih0aGlzLGUsdCwhMCksdCs0fSxnLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzR9LGcucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDEyNywtMTI4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpLKHRoaXMsZSx0LCExKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkYodGhpcyxlLHQsITApLHQrNH0sZy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCs0fSxnLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCEwLHIpfSxnLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCExLHIpfSxnLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gSih0aGlzLGUsdCwhMCxyKX0sZy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEoodGhpcyxlLHQsITEscil9LGcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IWcuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LGcucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9XyhlKT9lOiQobmV3IGcoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB6PS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uICQoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsYSx1LGMsaDtvfHxzKCk7dmFyIGw9ZS5sZW5ndGg7aWYobCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7Yz0iPSI9PT1lW2wtMl0/MjoiPSI9PT1lW2wtMV0/MTowLGg9bmV3IGkoMypsLzQtYyksYT1jPjA/bC00Omw7dmFyIGY9MDtmb3IodD0wLHI9MDt0PGE7dCs9NCxyKz0zKXU9bltlLmNoYXJDb2RlQXQodCldPDwxOHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bltlLmNoYXJDb2RlQXQodCszKV0saFtmKytdPXU+PjE2JjI1NSxoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1O3JldHVybiAyPT09Yz8odT1uW2UuY2hhckNvZGVBdCh0KV08PDJ8bltlLmNoYXJDb2RlQXQodCsxKV0+PjQsaFtmKytdPTI1NSZ1KToxPT09YyYmKHU9bltlLmNoYXJDb2RlQXQodCldPDwxMHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxuW2UuY2hhckNvZGVBdCh0KzIpXT4+MixoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1KSxofShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKHosIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIFgoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LGVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWVlLmNhbGwoZSl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gaWUoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1lZS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIG9lKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1lZS5jYWxsKGUpfWZ1bmN0aW9uIHNlKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksdGUoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGFlPXtpc0FycmF5OnRlLGlzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWVlLmNhbGwoZSl9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXJlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXJlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpuZSxpc1BsYWluT2JqZWN0OmllLGlzVW5kZWZpbmVkOnJlLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1lZS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09ZWUuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PWVlLmNhbGwoZSl9LGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKGUpJiZvZShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcyYmZSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpzZSxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe2llKHRbbl0pJiZpZShyKT90W25dPWUodFtuXSxyKTppZShyKT90W25dPWUoe30scik6dGUocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXNlKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gc2UodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1EodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGFlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107YWUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihhZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sYWUuZm9yRWFjaChlLChmdW5jdGlvbihlKXthZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6YWUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2godWUodCkrIj0iK3VlKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gaGUoKXt0aGlzLmhhbmRsZXJzPVtdfWhlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGhlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0saGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7YWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGxlPWhlO2Z1bmN0aW9uIGZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZGUoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBwZT1mZSxnZT1kZTtmdW5jdGlvbiB2ZShlKXtpZihwZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigocGU9PT1mZXx8IXBlKSYmc2V0VGltZW91dClyZXR1cm4gcGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBwZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gcGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHBlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0VGltZW91dCYmKHBlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsZWFyVGltZW91dCYmKGdlPWNsZWFyVGltZW91dCk7dmFyIHllLG1lPVtdLHdlPSExLGJlPS0xO2Z1bmN0aW9uIF9lKCl7d2UmJnllJiYod2U9ITEseWUubGVuZ3RoP21lPXllLmNvbmNhdChtZSk6YmU9LTEsbWUubGVuZ3RoJiZrZSgpKX1mdW5jdGlvbiBrZSgpe2lmKCF3ZSl7dmFyIGU9dmUoX2UpO3dlPSEwO2Zvcih2YXIgdD1tZS5sZW5ndGg7dDspe2Zvcih5ZT1tZSxtZT1bXTsrK2JlPHQ7KXllJiZ5ZVtiZV0ucnVuKCk7YmU9LTEsdD1tZS5sZW5ndGh9eWU9bnVsbCx3ZT0hMSxmdW5jdGlvbihlKXtpZihnZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChnZT09PWRlfHwhZ2UpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGdlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2dlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gZ2UuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBnZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFNlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9U2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEVlKCl7fXZhciBUZT1FZSxBZT1FZSxSZT1FZSxDZT1FZSxQZT1FZSxEZT1FZSxPZT1FZTt2YXIgSWU9dC5wZXJmb3JtYW5jZXx8e30sVWU9SWUubm93fHxJZS5tb3pOb3d8fEllLm1zTm93fHxJZS5vTm93fHxJZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBNZT1uZXcgRGF0ZTt2YXIgTGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07bWUucHVzaChuZXcgU2UoZSx0KSksMSE9PW1lLmxlbmd0aHx8d2V8fHZlKGtlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpUZSxhZGRMaXN0ZW5lcjpBZSxvbmNlOlJlLG9mZjpDZSxyZW1vdmVMaXN0ZW5lcjpQZSxyZW1vdmVBbGxMaXN0ZW5lcnM6RGUsZW1pdDpPZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpVZS5jYWxsKEllKSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1NZSkvMWUzfX0sSGU9TGUsamU9ZnVuY3Rpb24oZSx0KXthZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LHhlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxxZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4geGUobyx0LHIsbixpKX0sQmU9YWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLGFlLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksYWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxOZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLEtlPWFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPWFlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxpPWUuaGVhZGVycyxvPWUucmVzcG9uc2VUeXBlO2FlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYT1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShhKyI6Iit1KX12YXIgYyxoLGw9KGM9ZS5iYXNlVVJMLGg9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChoKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGgpOmgpO2Z1bmN0aW9uIGYoKXtpZihzKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHM/ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmTmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0ocy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOm8mJiJ0ZXh0IiE9PW8mJiJqc29uIiE9PW8/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dCxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6c307IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QocWUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLGkpLHM9bnVsbH19aWYocy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksY2UobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gcz9zLm9ubG9hZGVuZD1mOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cyYmND09PXMucmVhZHlTdGF0ZSYmKDAhPT1zLnN0YXR1c3x8cy5yZXNwb25zZVVSTCYmMD09PXMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKHFlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IocWUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIocWUodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHMpKSxzPW51bGx9LGFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBkPShlLndpdGhDcmVkZW50aWFsc3x8S2UobCkpJiZlLnhzcmZDb29raWVOYW1lP0JlLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2QmJihpW2UueHNyZkhlYWRlck5hbWVdPWQpfSJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmFlLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTpzLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChzLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYocy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmcy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7cyYmKHMuYWJvcnQoKSxyKGUpLHM9bnVsbCl9KSksbnx8KG49bnVsbCkscy5zZW5kKG4pfSkpfSxZZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFdlKGUsdCl7IWFlLmlzVW5kZWZpbmVkKGUpJiZhZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgSmUsemU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PUhlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSGUpKSYmKEplPUZlKSxKZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUodCwiQWNjZXB0IiksamUodCwiQ29udGVudC1UeXBlIiksYWUuaXNGb3JtRGF0YShlKXx8YWUuaXNBcnJheUJ1ZmZlcihlKXx8YWUuaXNCdWZmZXIoZSl8fGFlLmlzU3RyZWFtKGUpfHxhZS5pc0ZpbGUoZSl8fGFlLmlzQmxvYihlKT9lOmFlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOmFlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6YWUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKGFlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksYWUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZhZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgeGUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07emUuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPXt9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7emUuaGVhZGVyc1tlXT1hZS5tZXJnZShZZSl9KSk7dmFyIFZlPXplLCRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxWZTtyZXR1cm4gYWUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sR2U9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIFhlKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBaZT1mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPSRlLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPWFlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksYWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxWZS5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gWGUoZSksdC5kYXRhPSRlLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEdlKHQpfHwoWGUoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT0kZS5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxRZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxpPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLG89WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0scz1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhZS5pc1BsYWluT2JqZWN0KGUpJiZhZS5pc1BsYWluT2JqZWN0KHQpP2FlLm1lcmdlKGUsdCk6YWUuaXNQbGFpbk9iamVjdCh0KT9hZS5tZXJnZSh7fSx0KTphZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEoZVtuXSx0W25dKX1hZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe2FlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1hKHZvaWQgMCx0W2VdKSl9KSksYWUuZm9yRWFjaChpLHUpLGFlLmZvckVhY2gobywoZnVuY3Rpb24obil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEodm9pZCAwLHRbbl0pfSkpLGFlLmZvckVhY2gocywoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09YShlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09YSh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KGkpLmNvbmNhdChvKS5jb25jYXQocyksaD1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIGFlLmZvckVhY2goaCx1KSxyfSxldD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heGlvcy8tL2F4aW9zLTAuMjEuNC50Z3oiLF9pbnRlZ3JpdHk6InNoYTUxMi11dDV2ZXdraXU4ampHQmRxcE00NFh4anVDanE5TEFLZUhWbW9WZkhWenk4ZUhneHhxOFNiQVZRTm92REE4bVZpMDVrUDBFYS9uL1V6Y1NIY1RKUWZOZz09IixfZnJvbToiYXhpb3NAMC4yMS40In0sdHQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3R0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgcnQ9e30sbnQ9ZXQudmVyc2lvbi5zcGxpdCgiLiIpO2Z1bmN0aW9uIGl0KGUsdCl7Zm9yKHZhciByPXQ/dC5zcGxpdCgiLiIpOm50LG49ZS5zcGxpdCgiLiIpLGk9MDtpPDM7aSsrKXtpZihyW2ldPm5baV0pcmV0dXJuITA7aWYocltpXTxuW2ldKXJldHVybiExfXJldHVybiExfXR0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7dmFyIG49dCYmaXQodCk7ZnVuY3Rpb24gaShlLHQpe3JldHVybiJbQXhpb3MgdiIrZXQudmVyc2lvbisiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixvLHMpe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IoaShvLCIgaGFzIGJlZW4gcmVtb3ZlZCBpbiAiK3QpKTtyZXR1cm4gbiYmIXJ0W29dJiYocnRbb109ITAsY29uc29sZS53YXJuKGkobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLG8scyl9fTt2YXIgb3Q9e2lzT2xkZXJWZXJzaW9uOml0LGFzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSx1PXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09dSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczp0dH0sc3Q9b3QudmFsaWRhdG9ycztmdW5jdGlvbiBhdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGxlLHJlc3BvbnNlOm5ldyBsZX19YXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlPyhlPWFyZ3VtZW50c1sxXXx8e30pLnVybD1hcmd1bWVudHNbMF06ZT1lfHx7fSwoZT1RZSh0aGlzLmRlZmF1bHRzLGUpKS5tZXRob2Q/ZS5tZXRob2Q9ZS5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD9lLm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOmUubWV0aG9kPSJnZXQiO3ZhciB0PWUudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PXQmJm90LmFzc2VydE9wdGlvbnModCx7c2lsZW50SlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksZm9yY2VkSlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksY2xhcmlmeVRpbWVvdXRFcnJvcjpzdC50cmFuc2l0aW9uYWwoc3QuYm9vbGVhbiwiMS4wLjAiKX0sITEpO3ZhciByPVtdLG49ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdC5ydW5XaGVuJiYhMT09PXQucnVuV2hlbihlKXx8KG49biYmdC5zeW5jaHJvbm91cyxyLnVuc2hpZnQodC5mdWxmaWxsZWQsdC5yZWplY3RlZCkpfSkpO3ZhciBpLG89W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFuKXt2YXIgcz1bWmUsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkocyxyKSxzPXMuY29uY2F0KG8pLGk9UHJvbWlzZS5yZXNvbHZlKGUpO3MubGVuZ3RoOylpPWkudGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gaX1mb3IodmFyIGE9ZTtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxjPXIuc2hpZnQoKTt0cnl7YT11KGEpfWNhdGNoKGUpe2MoZSk7YnJlYWt9fXRyeXtpPVplKGEpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO28ubGVuZ3RoOylpPWkudGhlbihvLnNoaWZ0KCksby5zaGlmdCgpKTtyZXR1cm4gaX0sYXQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1RZSh0aGlzLmRlZmF1bHRzLGUpLGNlKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LGFlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFFlKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KSksYWUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoUWUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6cn0pKX19KSk7dmFyIHV0PWF0O2Z1bmN0aW9uIGN0KGUpe3RoaXMubWVzc2FnZT1lfWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxjdC5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgaHQ9Y3Q7ZnVuY3Rpb24gbHQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7ZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgaHQoZSksdChyLnJlYXNvbikpfSkpfWx0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGx0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGx0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgZnQ9bHQ7ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9bmV3IHV0KGUpLHI9USh1dC5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gYWUuZXh0ZW5kKHIsdXQucHJvdG90eXBlLHQpLGFlLmV4dGVuZChyLHQpLHJ9dmFyIHB0PWR0KFZlKTtwdC5BeGlvcz11dCxwdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGR0KFFlKHB0LmRlZmF1bHRzLGUpKX0scHQuQ2FuY2VsPWh0LHB0LkNhbmNlbFRva2VuPWZ0LHB0LmlzQ2FuY2VsPUdlLHB0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LHB0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LHB0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiEwPT09ZS5pc0F4aW9zRXJyb3J9O3ZhciBndD1wdCx2dD1wdDtndC5kZWZhdWx0PXZ0O3ZhciB5dCxtdCx3dD1ndDsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiBidChlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0obXQ9eXR8fCh5dD17fSkpLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLG10LnF1ZXJ5PSJxdWVyeSI7dmFyIF90OyFmdW5jdGlvbihlKXtlLkNvbmZpZ0RhdGE9ImNvbmZpZ19kYXRhIixlLk9JRENQcm92aWRlck1ldGFEYXRhPSJvaWRjX3Byb3ZpZGVyX21ldGFfZGF0YSIsZS5TZXNzaW9uRGF0YT0ic2Vzc2lvbl9kYXRhIixlLlRlbXBvcmFyeURhdGE9InRlbXBvcmFyeV9kYXRhIn0oX3R8fChfdD17fSkpO2NvbnN0IGt0PSJyZWZyZXNoX3Rva2VuX3RpbWVyIjtjbGFzcyBTdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxyLG4saSxvKXtzdXBlcihudWxsIT1uP246bnVsbD09bz92b2lkIDA6by5tZXNzYWdlKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1lLHRoaXMuZmlsZT10LHRoaXMubWV0aG9kPXIsdGhpcy5kZXNjcmlwdGlvbj1pLHRoaXMuZXJyb3I9byxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIEV0IGV4dGVuZHMgU3R7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8scyxhLHUpe3N1cGVyKGUsdCxyLG4saSksdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLmNvZGU9ZSx0aGlzLmZpbGU9dCx0aGlzLm1ldGhvZD1yLHRoaXMuZGVzY3JpcHRpb249aSx0aGlzLm5ldHdvcmtFcnJvckNvZGU9byx0aGlzLm5ldHdvcmtFcnJvck1lc3NhZ2U9cyx0aGlzLnN0YXR1cz1hLHRoaXMubmV0d29ya0Vycm9yRGF0YT11fX12YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBBdChlLHQscil7cmV0dXJuIGUocj17cGF0aDp0LGV4cG9ydHM6e30scmVxdWlyZTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0obnVsbD09dCYmci5wYXRoKX19LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBSdD12b2lkIDAhPT10P3Q6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LEN0PVtdLFB0PVtdLER0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LE90PSExO2Z1bmN0aW9uIEl0KCl7T3Q9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KUN0W3RdPWVbdF0sUHRbZS5jaGFyQ29kZUF0KHQpXT10O1B0WyItIi5jaGFyQ29kZUF0KDApXT02MixQdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gVXQoZSx0LHIpe2Zvcih2YXIgbixpLG89W10scz10O3M8cjtzKz0zKW49KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKEN0WyhpPW4pPj4xOCY2M10rQ3RbaT4+MTImNjNdK0N0W2k+PjYmNjNdK0N0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBNdChlKXt2YXIgdDtPdHx8SXQoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLHU9ci1uO2E8dTthKz1zKW8ucHVzaChVdChlLGEsYStzPnU/dTphK3MpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGkrPUN0W3Q+PjJdLGkrPUN0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saSs9Q3RbdD4+MTBdLGkrPUN0W3Q+PjQmNjNdLGkrPUN0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gTHQoZSx0LHIsbixpKXt2YXIgbyxzLGE9OCppLW4tMSx1PSgxPDxhKS0xLGM9dT4+MSxoPS03LGw9cj9pLTE6MCxmPXI/LTE6MSxkPWVbdCtsXTtmb3IobCs9ZixvPWQmKDE8PC1oKS0xLGQ+Pj0taCxoKz1hO2g+MDtvPTI1NipvK2VbdCtsXSxsKz1mLGgtPTgpO2ZvcihzPW8mKDE8PC1oKS0xLG8+Pj0taCxoKz1uO2g+MDtzPTI1NipzK2VbdCtsXSxsKz1mLGgtPTgpO2lmKDA9PT1vKW89MS1jO2Vsc2V7aWYobz09PXUpcmV0dXJuIHM/TmFOOjEvMCooZD8tMToxKTtzKz1NYXRoLnBvdygyLG4pLG8tPWN9cmV0dXJuKGQ/LTE6MSkqcypNYXRoLnBvdygyLG8tbil9ZnVuY3Rpb24gSHQoZSx0LHIsbixpLG8pe3ZhciBzLGEsdSxjPTgqby1pLTEsaD0oMTw8YyktMSxsPWg+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9bj8wOm8tMSxwPW4/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHUqPTIpLCh0Kz1zK2w+PTE/Zi91OmYqTWF0aC5wb3coMiwxLWwpKSp1Pj0yJiYocysrLHUvPTIpLHMrbD49aD8oYT0wLHM9aCk6cytsPj0xPyhhPSh0KnUtMSkqTWF0aC5wb3coMixpKSxzKz1sKTooYT10Kk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtyK2RdPTI1NSZhLGQrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSxjKz1pO2M+MDtlW3IrZF09MjU1JnMsZCs9cCxzLz0yNTYsYy09OCk7ZVtyK2QtcF18PTEyOCpnfXZhciBqdD17fS50b1N0cmluZyx4dD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qdC5jYWxsKGUpfTtLdC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PVJ0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fFJ0LlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIHF0PUJ0KCk7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gTnQoZSx0KXtpZihCdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1LdC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgS3QodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gS3QoZSx0LHIpe2lmKCEoS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIEt0KSlyZXR1cm4gbmV3IEt0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIFd0KHRoaXMsZSl9cmV0dXJuIEZ0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIEZ0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPUt0LnByb3RvdHlwZTplPUp0KGUsdCksZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKSwhS3QuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfCR0KHQsciksaT0oZT1OdChlLG4pKS53cml0ZSh0LHIpO3JldHVybiBpIT09biYmKGU9ZS5zbGljZSgwLGkpKSxlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihWdCh0KSl7dmFyIHI9MHx6dCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1OdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/TnQoZSwwKTpKdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZ4dCh0LmRhdGEpKXJldHVybiBKdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFl0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gV3QoZSx0KXtpZihZdCh0KSxlPU50KGUsdDwwPzA6MHx6dCh0KSksIUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHx6dCh0Lmxlbmd0aCk7ZT1OdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24genQoZSl7aWYoZT49QnQoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrQnQoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uICR0KGUsdCl7aWYoVnQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIF9yKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4ga3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gX3IoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gR3QoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gaHIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGFyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gdXIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHNyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIFh0KGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gWnQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PUt0LmZyb20odCxuKSksVnQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpRdChlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpRdChlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gUXQoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZXIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHRyKGUsdCxyLG4pe3JldHVybiBTcihfcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBycihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBucihlLHQscixuKXtyZXR1cm4gcnIoZSx0LHIsbil9ZnVuY3Rpb24gaXIoZSx0LHIsbil7cmV0dXJuIFNyKGtyKHQpLGUscixuKX1mdW5jdGlvbiBvcihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBzcihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/TXQoZSk6TXQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBhcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSx1LGM9ZVtpXSxoPW51bGwsbD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrbDw9cilzd2l0Y2gobCl7Y2FzZSAxOmM8MTI4JiYoaD1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoaD11KTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGg9dSk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJnU8MTExNDExMiYmKGg9dSl9bnVsbD09PWg/KGg9NjU1MzMsbD0xKTpoPjY1NTM1JiYoaC09NjU1MzYsbi5wdXNoKGg+Pj4xMCYxMDIzfDU1Mjk2KSxoPTU2MzIwfDEwMjMmaCksbi5wdXNoKGgpLGkrPWx9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgcj0iIixuPTA7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1mdW5jdGlvbiB1cihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGNyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBocihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPWJyKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGxyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGk9IiIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZnIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGRyKGUsdCxyLG4saSxvKXtpZighVnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHByKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBncihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiB2cihlLHQscixuLGksbyl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHlyKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDQpLEh0KGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIG1yKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDgpLEh0KGUsdCxyLG4sNTIsOCkscis4fUt0LnBvb2xTaXplPTgxOTIsS3QuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPUt0LnByb3RvdHlwZSxlfSxLdC5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRnQobnVsbCxlLHQscil9LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihLdC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLEt0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxLdC5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBZdCh0KSx0PD0wP050KGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/TnQoZSx0KS5maWxsKHIsbik6TnQoZSx0KS5maWxsKHIpOk50KGUsdCl9KG51bGwsZSx0LHIpfSxLdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gV3QobnVsbCxlKX0sS3QuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBXdChudWxsLGUpfSxLdC5pc0J1ZmZlcj1FcixLdC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIVZ0KGUpfHwhVnQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LEt0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEt0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCF4dChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBLdC5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPUt0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFWdChvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4saSksaSs9by5sZW5ndGh9cmV0dXJuIG59LEt0LmJ5dGVMZW5ndGg9JHQsS3QucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxLdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKVh0KHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxLdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KVh0KHRoaXMsdCx0KzMpLFh0KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpWHQodGhpcyx0LHQrNyksWHQodGhpcyx0KzEsdCs2KSxYdCh0aGlzLHQrMix0KzUpLFh0KHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2FyKHRoaXMsMCxlKTpHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEt0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1LdC5jb21wYXJlKHRoaXMsZSl9LEt0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LEt0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmdD49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLHU9dGhpcy5zbGljZShuLGkpLGM9ZS5zbGljZSh0LHIpLGg9MDtoPGE7KytoKWlmKHVbaF0hPT1jW2hdKXtvPXVbaF0scz1jW2hdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sS3QucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LEt0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gWnQodGhpcyxlLHQsciwhMCl9LEt0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFp0KHRoaXMsZSx0LHIsITEpfSxLdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIGVyKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHRyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBycih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBucih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGlyKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gb3IodGhpcyxlLHQscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxvPSEwfX0sS3QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0sS3QucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189S3QucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IEt0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSxLdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sS3QucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxLdC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LEt0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxLdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sS3QucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sS3QucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LEt0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxLdC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LEt0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sS3QucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksTHQodGhpcyxlLCEwLDIzLDQpfSxLdC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsMjMsNCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITAsNTIsOCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsNTIsOCl9LEt0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtlPStlLHR8PTAscnw9MCxufHxkcih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sS3QucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fGRyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDEsMjU1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpwcih0aGlzLGUsdCwhMCksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxLdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz1yLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMSwxMjcsLTEyOCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sS3QucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOnByKHRoaXMsZSx0LCEwKSx0KzJ9LEt0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4geXIodGhpcyxlLHQsITAscil9LEt0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB5cih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMCxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK28pLHQpO3JldHVybiBvfSxLdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhS3QuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9VnQoZSk/ZTpfcihuZXcgS3QoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB3cj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBicihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gX3IoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIGtyKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvLHM7T3R8fEl0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IER0KDMqYS80LW8pLG49bz4wP2EtNDphO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylpPVB0W2UuY2hhckNvZGVBdCh0KV08PDE4fFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8UHRbZS5jaGFyQ29kZUF0KHQrMildPDw2fFB0W2UuY2hhckNvZGVBdCh0KzMpXSxzW3UrK109aT4+MTYmMjU1LHNbdSsrXT1pPj44JjI1NSxzW3UrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPVB0W2UuY2hhckNvZGVBdCh0KV08PDJ8UHRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbdSsrXT0yNTUmaSk6MT09PW8mJihpPVB0W2UuY2hhckNvZGVBdCh0KV08PDEwfFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxQdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1t1KytdPWk+PjgmMjU1LHNbdSsrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZSh3ciwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gU3IoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxUcihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZUcihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gVHIoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgQXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOkt0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLEt0LmFsbG9jKCtlKX0saXNCdWZmZXI6RXIsa01heExlbmd0aDpxdH0pLFJyPUF0KChmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxpPTQtcixvPXQraSxzPUt0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIsbisrKTtyZXR1cm4gcy50b1N0cmluZygpfX0pKSxDcj1BdCgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuaXNCdWZmZXIoZSk/aShlLnRvU3RyaW5nKCJiYXNlNjQiKSk6aShLdC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxSci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89cjtvLmVuY29kZT1yLG8uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuZnJvbShuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sby50b0Jhc2U2ND1uLG8uZnJvbUJhc2U2ND1pLG8udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIEt0LmZyb20obihlKSwiYmFzZTY0Iil9LHQuZGVmYXVsdD1vfSkpLFByPUF0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9Q3IuZGVmYXVsdCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSksRHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0oQXQoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsdSxjLGgsbCxmLGQscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sdT1yWzJdLGM9clszXSxoPXJbNF0sbD1yWzVdLGY9cls2XSxkPXJbN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1Jm5bdl0pPDwyNHwoMjU1Jm5bdisxXSk8PDE2fCgyNTUmblt2KzJdKTw8OHwyNTUmblt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKyhoJmxefmgmZil8MCkrKGQrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZ1XmEmdSl8MCxkPWYsZj1sLGw9aCxoPWMreXwwLGM9dSx1PWEsYT1zLHM9eSttfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPXUsclszXSs9YyxyWzRdKz1oLHJbNV0rPWwscls2XSs9ZixyWzddKz1kLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1zKHQsZSksaD1uZXcgaShjKSxsPW5ldyBVaW50OEFycmF5KGguZGlnZXN0TGVuZ3RoKSxmPWwubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkobikscD0wO3A8bjtwKyspZj09PWwubGVuZ3RoJiYoYShsLGgscixvKSxmPTApLGRbcF09bFtmKytdO3JldHVybiBoLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxkfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkocyksYz1uZXcgVWludDhBcnJheShzKSxoPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKnM8bjtsKyspe3ZhciBmPWwrMTthWzBdPWY+Pj4yNCYyNTUsYVsxXT1mPj4+MTYmMjU1LGFbMl09Zj4+PjgmMjU1LGFbM109Zj4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXVbZF09Y1tkXTtmb3IoZD0yO2Q8PXI7ZCsrKXtvLnJlc2V0KCksby51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8cztwKyspdVtwXV49Y1twXX1mb3IoZD0wO2Q8cyYmbCpzK2Q8bjtkKyspaFtsKnMrZF09dVtkXX1mb3IobD0wO2w8cztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKWFbbF09MDtyZXR1cm4gby5jbGVhbigpLGh9fShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfSkpKTtmdW5jdGlvbiBPcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIElyKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVXI9T3IsTXI9SXI7ZnVuY3Rpb24gTHIoZSl7aWYoVXI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFVyPT09T3J8fCFVcikmJnNldFRpbWVvdXQpcmV0dXJuIFVyPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVXIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFVyLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBVci5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBSdC5zZXRUaW1lb3V0JiYoVXI9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIFJ0LmNsZWFyVGltZW91dCYmKE1yPWNsZWFyVGltZW91dCk7dmFyIEhyLGpyPVtdLHhyPSExLHFyPS0xO2Z1bmN0aW9uIEJyKCl7eHImJkhyJiYoeHI9ITEsSHIubGVuZ3RoP2pyPUhyLmNvbmNhdChqcik6cXI9LTEsanIubGVuZ3RoJiZOcigpKX1mdW5jdGlvbiBOcigpe2lmKCF4cil7dmFyIGU9THIoQnIpO3hyPSEwO2Zvcih2YXIgdD1qci5sZW5ndGg7dDspe2ZvcihIcj1qcixqcj1bXTsrK3FyPHQ7KUhyJiZIcltxcl0ucnVuKCk7cXI9LTEsdD1qci5sZW5ndGh9SHI9bnVsbCx4cj0hMSxmdW5jdGlvbihlKXtpZihNcj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChNcj09PUlyfHwhTXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIE1yPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e01yKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gTXIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBNci5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIEtyKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9S3IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBGcj1SdC5wZXJmb3JtYW5jZXx8e30sWXI9KEZyLm5vd3x8RnIubW96Tm93fHxGci5tc05vd3x8RnIub05vd3x8RnIud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07anIucHVzaChuZXcgS3IoZSx0KSksMSE9PWpyLmxlbmd0aHx8eHJ8fExyKE5yKX0pLFdyPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KEFyKSxKcj1BdCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1Xci5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9V3I6KG4oV3IsdCksdC5CdWZmZXI9aSksbihyLGkpLGkuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxpLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBXci5TbG93QnVmZmVyKGUpfX0pKSx6cj1BdCgoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj1Kci5CdWZmZXIsbj1UdC5jcnlwdG98fFR0Lm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLGkpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBvPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIHM9MDtzPGU7cys9dCluLmdldFJhbmRvbVZhbHVlcyhvLnNsaWNlKHMscyt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhvKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9ZcigoZnVuY3Rpb24oKXtpKG51bGwsbyl9KSk6b306ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKTtjb25zdCBWcj1uZXcgVGV4dEVuY29kZXIsJHI9bmV3IFRleHREZWNvZGVyO3ZhciBHcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfSgpO2NvbnN0IFhyPWU9PntsZXQgdD1lO3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9JHIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIiksbmV3IFVpbnQ4QXJyYXkoR3IuYXRvYih0KS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSl9O2NsYXNzIFpyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfX1jbGFzcyBRciBleHRlbmRzIFpye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn19Y2xhc3MgZW4gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyB0biBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBybiBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIG5uIGV4dGVuZHMgWnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn19Y2xhc3Mgc24gZXh0ZW5kcyBRcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQifX12YXIgYW49R3IuY3J5cHRvO2Z1bmN0aW9uIHVuKCl7aWYoIUdyLmlzU2VjdXJlQ29udGV4dCYmIUdyLmNyeXB0by5zdWJ0bGUpdGhyb3cgbmV3IFpyKCJXZWIgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBhdmFpbGFibGUgb25seSBpbiBTZWN1cmUgQ29udGV4dHMuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJlX0NvbnRleHRzIil9Y29uc3QgY249YXN5bmMgZT0+e3ZhciB0LHI7Y29uc3R7YWxnb3JpdGhtOm4sa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHRuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc3Vic3RyKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnN1YnN0cigtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKTtsZXQgbz0iandrIixzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCJQQktERjIiPT09bi5uYW1lJiYobz0icmF3IixzPVhyKGUuaykpLHVuKCksYW4uc3VidGxlLmltcG9ydEtleShvLHMsbixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0ocj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1yP3I6aSl9O2Z1bmN0aW9uIGhuKGUpe3JldHVybiEhZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1hc3luYyBmdW5jdGlvbiBsbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/Y24oey4uLmUsYWxnOnQsZXh0OiExfSk6WHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHRuKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIHVuc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBjbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX1jb25zdCBmbj1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDAhPT1uLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2Zvcihjb25zdCBpIG9mIHIuY3JpdCl7aWYoIXQuaGFzKGkpKXRocm93IG5ldyB0bihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7aX0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbmApO2lmKHZvaWQgMD09PW5baV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBpcyBtaXNzaW5nYCk7aWYodC5nZXQoaSkmJnZvaWQgMD09PXJbaV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfS5iaW5kKHZvaWQgMCxybixuZXcgTWFwKFtbImI2NCIsITBdXSkpLGRuPSgoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkuYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTthc3luYyBmdW5jdGlvbiBwbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBybigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgcm4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBybigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgcm4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhaG4oZS5oZWFkZXIpKXRocm93IG5ldyBybigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBuPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVhyKGUucHJvdGVjdGVkKTtuPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkobixlLmhlYWRlcikpdGhyb3cgbmV3IHJuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3QgaT17Li4ubiwuLi5lLmhlYWRlcn07bGV0IG89ITA7aWYoZm4obixpKS5oYXMoImI2NCIpJiYobz1uLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBvKSl0aHJvdyBuZXcgcm4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOnN9PWk7aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhcyl0aHJvdyBuZXcgcm4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IGE9ciYmZG4oci5hbGdvcml0aG1zKTtpZihhJiYhYS5oYXMocykpdGhyb3cgbmV3IGVuKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYobyl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgcm4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KG4sZSkpLCgoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fGUubWF0Y2goL15BXGR7M30oPzpHQ00pS1ckLykpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwic2VjcmV0Ij09PXQudHlwZSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpfWlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBvciBLZXlPYmplY3QgaW5zdGFuY2VzIG11c3QgYmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIik7aWYoInNlY3JldCI9PT10LnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9KShzLHQpO2NvbnN0IHU9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KFZyLmVuY29kZShlLnByb3RlY3RlZHx8IiIpLFZyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1ZyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksYz1YcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0KGFzeW5jKGUsdCxyLG4pPT57bGV0IGk7aWYodW4oKSx0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzeW1tZXRyaWMga2V5cyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciBITUFDLWJhc2VkIGFsZ29yaXRobXMiKTtpPWF3YWl0IGFuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zdWJzdHIoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFsidmVyaWZ5Il0pfWVsc2UgaT10O3JldHVybigoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7Y29uc3Qgcj1wYXJzZUludChlLnN1YnN0cigtMyksMTApLHtsZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBzeW1tZXRyaWMga2V5cyB0byBiZSAke3J9IGJpdHMgb3IgbGFyZ2VyYCl9aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKSxhbi5zdWJ0bGUudmVyaWZ5KGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkhTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiSE1BQyJ9O2Nhc2UiSFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJITUFDIn07Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDozMn07Y2FzZSJQUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6NDh9O2Nhc2UiUFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjY0fTtjYXNlIlJTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In07Y2FzZSJFUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9O2Nhc2UiRVM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtkZWZhdWx0OnRocm93IG5ldyB0bihgYWxnICR7ZX0gaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUpLGkscixuKX0pKHMsdCxjLHUpKXRocm93IG5ldyBvbjtsZXQgaDtoPW8/WHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Wci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgbD17cGF5bG9hZDpofTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihsLnByb3RlY3RlZEhlYWRlcj1uKSx2b2lkIDAhPT1lLmhlYWRlciYmKGwudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGx9Y29uc3QgZ249L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIHZuPWU9Pntjb25zdCB0PWduLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKDg2NDAwKnIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IHluPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBtbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHluKGUudHlwKSE9PXluKG4pKSl0aHJvdyBuZXcgUXIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPXR5cGVvZiBpfHwhaXx8QXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgbm4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKCJzdHJpbmciPT10eXBlb2Ygbz9bb106bykuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBRcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mKHU9aS5hdWQpP2MuaW5jbHVkZXModSk6Yy5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldCh1KSkpKSkpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYztsZXQgaDtzd2l0Y2godHlwZW9mIHIuY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpoPXZuKHIuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpoPXIuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmg9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpsfT1yLGY9KGQ9bHx8bmV3IERhdGUsTWF0aC5mbG9vcihkLmdldFRpbWUoKS8xZTMpKTt2YXIgZDtpZih2b2lkIDAhPT1pLmlhdHx8ci5tYXhUb2tlbkFnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwPT09aS5leHAmJmkuaWF0PmYraCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgUXIoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+ZitoKXRocm93IG5ldyBRcignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBRcignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9Zi1oKXRocm93IG5ldyBzbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKHIubWF4VG9rZW5BZ2Upe2NvbnN0IGU9Zi1pLmlhdDtpZihlLWg+KCJudW1iZXIiPT10eXBlb2Ygci5tYXhUb2tlbkFnZT9yLm1heFRva2VuQWdlOnZuKHIubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgc24oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWgpdGhyb3cgbmV3IFFyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2NsYXNzIHdue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBiYXNlNjRVUkxFbmNvZGUoZSl7cmV0dXJuIFByLmVuY29kZShlKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0vZywiIil9c3RhdGljIGdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZSh6cigzMikpfXN0YXRpYyBnZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShuZXcgZyhEcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKSl9c3RhdGljIGdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKXtyZXR1cm5bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il19c3RhdGljIGdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UoUHIuZGVjb2RlKGUsInV0ZjgiKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihyLmtpZD09PWUua2lkKXJldHVybiBsbih7YWxnOmUuYWxnLGU6ZS5lLGt0eTplLmt0eSxuOmUubn0pO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkNSWVBUT19VVElMLUdURlRJVC1JVjAxIiwiY3J5cHRvLXV0aWxzIiwiZ2V0SldLRm9yVGhlSWRUb2tlbiIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK3Iua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKSl9c3RhdGljIGlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxvKXtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT0kci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgcm4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6biwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHJuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBwbih7cGF5bG9hZDppfHx2b2lkIDAscHJvdGVjdGVkOm58fHZvaWQgMCxzaWduYXR1cmU6b3x8dm9pZCAwfSx0LHIpO3JldHVybntwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9fShlLHQscik7cmV0dXJue3BheWxvYWQ6bW4obi5wcm90ZWN0ZWRIZWFkZXIsbi5wYXlsb2FkLHIpLHByb3RlY3RlZEhlYWRlcjpuLnByb3RlY3RlZEhlYWRlcn19KGUsdCx7YWxnb3JpdGhtczp0aGlzLmdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKSxhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOm8saXNzdWVyOm4sc3ViamVjdDppfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJDUllQVE9fVVRJTC1JVklULUlWMDIiLCJjcnlwdG8tdXRpbHMiLCJpc1ZhbGlkSWRUb2tlbiIsIlZhbGlkYXRpbmcgSUQgdG9rZW4gZmFpbGVkIixlKSkpKX1zdGF0aWMgZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD1Qci5kZWNvZGUoZS5zcGxpdCgiLiIpWzFdLCJ1dGY4Iik7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFN0KCJDUllQVE9fVVRJTC1ESVQtSVYwMSIsImNyeXB0by11dGlscyIsImRlY29kZUlEVG9rZW4iLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGJue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQscixuLGk7Y29uc3Qgbz13bi5kZWNvZGVJRFRva2VuKGUpLHM9dGhpcy5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIix1PW51bGwhPT0ocj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsYz1udWxsIT09KG49by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PW4/bjoiIixoPXUmJmM/YCR7dX0gJHtjfWA6dXx8Y3x8IiIsbD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6aDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6bCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx0aGlzLmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9c3RhdGljIGZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LmF1ZCxudWxsPT10fHxkZWxldGUgdC5leHAsbnVsbD09dHx8ZGVsZXRlIHQuaWF0LG51bGw9PXR8fGRlbGV0ZSB0LmFjcixudWxsPT10fHxkZWxldGUgdC5hbXIsbnVsbD09dHx8ZGVsZXRlIHQuYXpwLG51bGw9PXR8fGRlbGV0ZSB0LmF1dGhfdGltZSxudWxsPT10fHxkZWxldGUgdC5ub25jZSxudWxsPT10fHxkZWxldGUgdC5jX2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQuYXRfaGFzaCxudWxsPT10fHxkZWxldGUgdC5uYmYsbnVsbD09dHx8ZGVsZXRlIHQuaXNrLG51bGw9PXR8fGRlbGV0ZSB0LnNpZDtjb25zdCByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57Y29uc3Qgbj1lLnNwbGl0KCJfIikubWFwKCgoZSx0KT0+MD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpLC4uLmUuc2xpY2UoMSldLmpvaW4oIiIpKSkuam9pbigiIik7cltuXT10fSkpLHJ9c3RhdGljIGdldFRva2VuUmVxdWVzdEhlYWRlcnMoKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19fWJuLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD0oZSx0PSJAIik9Pntjb25zdCByPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O2NsYXNzIF9ue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCl9KSl9cmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gZS53ZWxsS25vd25FbmRwb2ludD9lLnNlcnZlck9yaWdpbitlLndlbGxLbm93bkVuZHBvaW50OmUuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Rva2VuLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0pKX1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9e30scj15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gci5vdmVycmlkZVdlbGxFbmRwb2ludENvbmZpZyYmci5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHIuZW5kcG9pbnRzKS5mb3JFYWNoKChlPT57Y29uc3Qgbj1lLnJlcGxhY2UoL1tBLVpdL2csKGU9PmBfJHtlLnRvTG93ZXJDYXNlKCl9YCkpO3Rbbl09KG51bGw9PXI/dm9pZCAwOnIuZW5kcG9pbnRzKT9yLmVuZHBvaW50c1tlXToiIn0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksdCl9KSl9cmVzb2x2ZUZhbGxiYWNrRW5kcG9pbnRzKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpO3QuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgocj0+e2NvbnN0IG49ci5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW25dPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbcl06IiJ9KSk7Y29uc3Qgcj17YXV0aG9yaXphdGlvbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29hdXRoMi9hdXRob3JpemUiLGVuZF9zZXNzaW9uX2VuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2lkYy9sb2dvdXQiLGp3a3NfdXJpOnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL2p3a3MiLGNoZWNrX3Nlc3Npb25faWZyYW1lOnQuc2VydmVyT3JpZ2luKyIvb2lkYy9jaGVja3Nlc3Npb24iLHJldm9jYXRpb25fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvcmV2b2tlIix0b2tlbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29hdXRoMi90b2tlbiJ9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkscil9KSl9dmFsaWRhdGVJZFRva2VuKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpKS5qd2tzX3VyaSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiB0JiYwIT09dC50cmltKCkubGVuZ3RoP3d0LmdldCh0LHt3aXRoQ3JlZGVudGlhbHM6bnVsbD09cj92b2lkIDA6ci5zZW5kQ29va2llc0luUmVxdWVzdHN9KS50aGVuKCh0PT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKDIwMCE9PXQuc3RhdHVzKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLVZJVC1OUjAyIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyByZXR1cm5lZCAiK3Quc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKTtjb25zdCByPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5pc3N1ZXIsbj0oeWllbGQgdGhpcy5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKSkuc3BsaXQoIi8ud2VsbC1rbm93biIpWzBdO3JldHVybiByJiZyPT09bj93bi5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSx0LmRhdGEua2V5cykudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gd24uaXNWYWxpZElkVG9rZW4oZSx0LCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQscix3bi5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULUVTMDMiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSl9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1WSVQtRVMwNCIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUoITEpfSkpKSkuY2F0Y2goKGU9Pnt2YXIgdCxyLG47cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFdCgiQVVUSF9IRUxQRVItVklULU5SMDUiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJSZXF1ZXN0IHRvIGp3a3MgZW5kcG9pbnQgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSk6UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1WSVQtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSl9KSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUpe3ZhciB0O3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCByPSJvcGVuaWQiO2NvbnN0IG49eWllbGQgdGhpcy5fY29uZmlnKCksaT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtyZXR1cm4gbi5zY29wZSYmbi5zY29wZS5sZW5ndGg+MCYmKG4uc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxuLnNjb3BlLnB1c2goIm9wZW5pZCIpLHI9bi5zY29wZS5qb2luKCIgIikpLGUucmVwbGFjZSgie3t0b2tlbn19IixpLmFjY2Vzc190b2tlbikucmVwbGFjZSgie3t1c2VybmFtZX19Iixibi5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oaS5pZF90b2tlbikudXNlcm5hbWUpLnJlcGxhY2UoInt7c2NvcGV9fSIscikucmVwbGFjZSgie3tjbGllbnRJRH19IixuLmNsaWVudElEKS5yZXBsYWNlKCJ7e2NsaWVudFNlY3JldH19IixudWxsIT09KHQ9bi5jbGllbnRTZWNyZXQpJiZ2b2lkIDAhPT10P3Q6IiIpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKDIwMCE9PWUuc3RhdHVzKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLUhUUi1OUjAxIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSB0b2tlbiByZXR1cm5lZCAiK2Uuc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKTtpZigoeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbilyZXR1cm4gdGhpcy52YWxpZGF0ZUlkVG9rZW4oZS5kYXRhLmlkX3Rva2VuKS50aGVuKCh0PT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHQpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShlLmRhdGEpO2NvbnN0IHQ9e2FjY2Vzc1Rva2VuOmUuZGF0YS5hY2Nlc3NfdG9rZW4sZXhwaXJlc0luOmUuZGF0YS5leHBpcmVzX2luLGlkVG9rZW46ZS5kYXRhLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjplLmRhdGEucmVmcmVzaF90b2tlbixzY29wZTplLmRhdGEuc2NvcGUsdG9rZW5UeXBlOmUuZGF0YS50b2tlbl90eXBlfTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpfXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLUhUUi1JVjAyIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBpcyBub3QgdmFsaWQuIiwiVGhlIGlkIHRva2VuIHJldHVybmVkIGhhcyBmYWlsZWQgdGhlIHZhbGlkYXRpb24gY2hlY2suIikpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItSEFULUVTMDMiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJoYW5kbGVUb2tlblJlc3BvbnNlIix2b2lkIDAsdm9pZCAwLGUpKSkpO3tjb25zdCB0PXthY2Nlc3NUb2tlbjplLmRhdGEuYWNjZXNzX3Rva2VuLGV4cGlyZXNJbjplLmRhdGEuZXhwaXJlc19pbixpZFRva2VuOmUuZGF0YS5pZF90b2tlbixyZWZyZXNoVG9rZW46ZS5kYXRhLnJlZnJlc2hfdG9rZW4sc2NvcGU6ZS5kYXRhLnNjb3BlLHRva2VuVHlwZTplLmRhdGEudG9rZW5fdHlwZX07cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShlLmRhdGEpLFByb21pc2UucmVzb2x2ZSh0KX19KSl9fWNsYXNzIGtue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyBfbihlKSx0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdBVS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldEF1dGhvcml6YXRpb25VUkwiLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IGZvdW5kLiIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSBmcm9tIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IG49bmV3IFVSTCh0KTtuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX3R5cGUiLCJjb2RlIiksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjbGllbnRfaWQiLHIuY2xpZW50SUQpO2xldCBpPSJvcGVuaWQiO2lmKHIuc2NvcGUmJnIuc2NvcGUubGVuZ3RoPjAmJihyLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8ci5zY29wZS5wdXNoKCJvcGVuaWQiKSxpPXIuc2NvcGUuam9pbigiICIpKSxuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInNjb3BlIixpKSxuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlZGlyZWN0X3VyaSIsci5zaWduSW5SZWRpcmVjdFVSTCksci5yZXNwb25zZU1vZGUmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVzcG9uc2VfbW9kZSIsci5yZXNwb25zZU1vZGUpLHIuZW5hYmxlUEtDRSl7Y29uc3QgZT13bi5nZXRDb2RlVmVyaWZpZXIoKSx0PXduLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIsZSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2Iiksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZSIsdCl9ci5wcm9tcHQmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZCgicHJvbXB0IixyLnByb21wdCk7Y29uc3Qgbz1lO2lmKG8pZm9yKGNvbnN0W2UsdF1vZiBPYmplY3QuZW50cmllcyhvKSkiIiE9ZSYmIiIhPXQmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQudG9TdHJpbmcoKSk7cmV0dXJuIG4udG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFyfHwwPT09ci50cmltKCkubGVuZ3RoKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfQ09SRS1SQVQxLU5GMDEiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTt0JiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KSk7Y29uc3QgaT1bXTtpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7Y29uc3Qgbz1lO3JldHVybiBpLnB1c2goYGNvZGU9JHtvfWApLGkucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSxpLnB1c2goYHJlZGlyZWN0X3VyaT0ke24uc2lnbkluUmVkaXJlY3RVUkx9YCksbi5lbmFibGVQS0NFJiYoaS5wdXNoKGBjb2RlX3ZlcmlmaWVyPSR7eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIpfWApLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKSksd3QucG9zdChyLGkuam9pbigiJiIpLHtoZWFkZXJzOmJuLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSx3aXRoQ3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHN9KS50aGVuKChlPT50aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGUpLnRoZW4oKGU9PmUpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMS1FUzAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsdm9pZCAwLHZvaWQgMCxlKSkpKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfQ09SRS1SQVQxLU5SMDMiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIiwiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYoIXIucmVmcmVzaF90b2tlbilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMi1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3Qgbj1bXTtyZXR1cm4gbi5wdXNoKGBjbGllbnRfaWQ9JHt0LmNsaWVudElEfWApLG4ucHVzaChgcmVmcmVzaF90b2tlbj0ke3IucmVmcmVzaF90b2tlbn1gKSxuLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHQuY2xpZW50U2VjcmV0JiZ0LmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm4ucHVzaChgY2xpZW50X3NlY3JldD0ke3QuY2xpZW50U2VjcmV0fWApLHd0LnBvc3QoZSxuLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMi1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTtjb25zdCByPVtdO3JldHVybiByLnB1c2goYGNsaWVudF9pZD0ke3QuY2xpZW50SUR9YCksci5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWApLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpLHd0LnBvc3QoZSxyLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+MjAwIT09ZS5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMy1OUjAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOih0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLFByb21pc2UucmVzb2x2ZShlKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMy1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBuO2lmKG49ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnQudG9rZW5fZW5kcG9pbnQsIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3QgaT17ZGF0YTooeWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSx0XSk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3ModCk7cmV0dXJuYCR7ZX09JHtyfWB9KSkpKSkpLmpvaW4oIiYiKSxoZWFkZXJzOk9iamVjdC5hc3NpZ24oe30sYm4uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QiLHVybDpuLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c307cmV0dXJuIGUuYXR0YWNoVG9rZW4mJihpLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWB9KSksd3QoaSkudGhlbigodD0+MjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUodCkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkNHLU5SMDQiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSx0PWJuLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1lP3ZvaWQgMDplLmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3BlczplLnNjb3BlLHNlc3Npb25TdGF0ZTplLnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57dm9pZCAwIT09dFtlXSYmIiIhPT10W2VdJiZudWxsIT09dFtlXXx8ZGVsZXRlIHRbZV19KSkscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sciksdCkscn0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKS5pZF90b2tlbjtyZXR1cm4gd24uZGVjb2RlSURUb2tlbihlKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZighZSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCk7cmV0dXJuIHd0LmdldCh0KS50aGVuKChlPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiAyMDAhPT1lLnN0YXR1cz9Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfQ09SRS1HT1BNLU5SMDEiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IHRvIGdldCB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk6KHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKGUuZGF0YSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCEwKSl9KSkpKS5jYXRjaCgoKCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRmFsbGJhY2tFbmRwb2ludHMoKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoITApfSkpKSl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDplLmF1dGhvcml6YXRpb25fZW5kcG9pbnQsY2hlY2tTZXNzaW9uSWZyYW1lOmUuY2hlY2tfc2Vzc2lvbl9pZnJhbWUsZW5kU2Vzc2lvbkVuZHBvaW50OmUuZW5kX3Nlc3Npb25fZW5kcG9pbnQsaW50cm9zcGVjdGlvbkVuZHBvaW50OmUuaW50cm9zcGVjdGlvbl9lbmRwb2ludCxpc3N1ZXI6ZS5pc3N1ZXIsandrc1VyaTplLmp3a3NfdXJpLHJlZ2lzdHJhdGlvbkVuZHBvaW50OmUucmVnaXN0cmF0aW9uX2VuZHBvaW50LHJldm9jYXRpb25FbmRwb2ludDplLnJldm9jYXRpb25fZW5kcG9pbnQsdG9rZW5FbmRwb2ludDplLnRva2VuX2VuZHBvaW50LHVzZXJpbmZvRW5kcG9pbnQ6ZS51c2VyaW5mb19lbmRwb2ludCx3ZWxsS25vd25FbmRwb2ludDp5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKX19KSl9Z2V0U2lnbk91dFVSTCgpe3ZhciBlLHQscjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPW51bGw9PT0oZT15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludCxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFufHwwPT09bi50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdTT1UtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IG89bnVsbD09PSh0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pZF90b2tlbjtpZighb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgU3QoIkFVVEhfQ09SRS1HU09VLU5GMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwiZ2V0U2lnbk91dFVSTCIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBzPW51bGwhPT0ocj1udWxsPT1pP3ZvaWQgMDppLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PXI/cjpudWxsPT1pP3ZvaWQgMDppLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdTT1UtTkYwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7bn0/aWRfdG9rZW5faGludD0ke299JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke3N9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfXNpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0U2lnbk91dFVSTCgpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLGV9KSl9Z2V0QWNjZXNzVG9rZW4oKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKX0pKX1nZXRQS0NFQ29kZSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIil9KSl9c2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiLGUpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSxlLm92ZXJyaWRlV2VsbEVuZHBvaW50Q29uZmlnPyhudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh7fSkpKToobnVsbD09ZT92b2lkIDA6ZS5lbmRwb2ludHMpJiYoeWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCkpfSkpfX1jbGFzcyBTbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fc3RvcmU9dH1zZXREYXRhSW5CdWxrKGUsdCl7dmFyIHI7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9biYmSlNPTi5wYXJzZShuKSxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx0KSxzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1zZXRWYWx1ZShlLHQscil7dmFyIG47cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLG89aSYmSlNPTi5wYXJzZShpKSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3RdOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHQpe3ZhciByO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPW4mJkpTT04ucGFyc2Uobiksbz1PYmplY3QuYXNzaWduKHt9LGkpO2RlbGV0ZSBvW3RdO2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfV9yZXNvbHZlS2V5KGUpe3JldHVybmAke2V9LSR7dGhpcy5faWR9YH1zZXRDb25maWdEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpLGUpfSkpfXNldFNlc3Npb25EYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlKX0pKX1nZXRDb25maWdEYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YSgpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldFNlc3Npb25EYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSxlLHQpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSxlLHQpfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSx0KX0pKX1zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSksZSx0KX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSxlKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpLGUpfSkpfXJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSksZSl9KSl9fWNvbnN0IEVuPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6eXQucXVlcnksc2NvcGU6WyJvcGVuaWQiXSxzZW5kQ29va2llc0luUmVxdWVzdHM6ITAsdmFsaWRhdGVJRFRva2VuOiEwfTtjbGFzcyBUbnsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlKXtUbi5faW5zdGFuY2VJRD9Ubi5faW5zdGFuY2VJRCs9MTpUbi5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgU24oYGluc3RhbmNlXyR7VG4uX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGtuKHRoaXMuX2RhdGFMYXllcikKLyoqCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICogICAgIGNsaWVudElEOiAiY2xpZW50IElEIiwKICAgICAgICAgKiAgICAgc2VydmVyT3JpZ2luOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLmluaXRpYWxpemUoY29uZmlnKTsKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpbml0aWFsaXplCiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi99aW5pdGlhbGl6ZShlKXt2YXIgdCxyLG47cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sRW4pLGUpLHtzY29wZTpbLi4ubnVsbCE9PSh0PUVuLnNjb3BlKSYmdm9pZCAwIT09dD90OltdLC4uLm51bGwhPT0obj1udWxsPT09KHI9ZS5zY29wZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZmlsdGVyKChlPT57dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09RW4/dm9pZCAwOkVuLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1uP246W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RBY2Nlc3NUb2tlbihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QXhpb3NSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAqIG9uIHlvdXIgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgKiAgIGRhdGE6IHsKICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICogICAgICAgc2NvcGU6ICJ7e3Njb3BlfX0iLAogICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgKiAgIH0sCiAgICAgICAgICogICBpZDogImFjY291bnQtc3dpdGNoIiwKICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICogICBzaWduSW5SZXF1aXJlZDogdHJ1ZQogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF1dGgucmVxdWVzdEN1c3RvbUdyYW50KGNvbmZpZykudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2lzQXV0aGVudGljYXRlZCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuaXNBdXRoZW50aWNhdGVkKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNsYXNzIEFuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8pe3N1cGVyKG51bGwhPW4/bjpudWxsPT1vP3ZvaWQgMDpvLm1lc3NhZ2UpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5jb2RlPWUsdGhpcy5maWxlPXQsdGhpcy5tZXRob2Q9cix0aGlzLmVycm9yPW8sdGhpcy5kZXNjcmlwdGlvbj1pLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgUm57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZih0LnJlZnJlc2hfdG9rZW4pe2NvbnN0IHI9cGFyc2VJbnQodC5leHBpcmVzX2luKSxuPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QsSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSl7Y29uc3QgZT1KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSk7Y2xlYXJUaW1lb3V0KGUpfX0pKX19Y29uc3QgQ249ImluaXQiO3ZhciBQbixEbixPbjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KFBufHwoUG49e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50In0oRG58fChEbj17fSkpO2NsYXNzIElue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWxldCBVbj1Pbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT13dC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBPbiksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9d3QuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9d3Quc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuYXR0YWNoVG9rZW4odCksbnVsbD09dD92b2lkIDA6dC5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKXtjb25zdCBlPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSxyPW5ldyBGb3JtRGF0YTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57ci5hcHBlbmQodCxlW3RdKX0pKSx0LmRhdGE9cn1yZXR1cm4gT24uaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2sodCksdH0pKX1lcnJvckhhbmRsZXIoZSl7dGhyb3cgT24uaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9c3VjY2Vzc0hhbmRsZXIoZSl7cmV0dXJuIE9uLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQodD0hMCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe09uLmlzSGFuZGxlckVuYWJsZWQ9dCx0aGlzLmF0dGFjaFRva2VuPXJ9KSl9ZW5hYmxlSGFuZGxlcigpe09uLmlzSGFuZGxlckVuYWJsZWQ9ITB9ZGlzYWJsZUhhbmRsZXIoKXtPbi5pc0hhbmRsZXJFbmFibGVkPSExfWRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQoZT1Pbi5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUKXtPbi5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKCgpPT57T24uaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfXNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fTtVbi5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxVbj1Pbj1mdW5jdGlvbihlLHQscixuKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09bj9uPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTpuO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKGk9ZVthXSkmJihzPShvPDM/aShzKTpvPjM/aSh0LHIscyk6aSh0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfShbZT0+e31dLFVuKTtjbGFzcyBNbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2RhdGE9bmV3IE1hcH1zZXREYXRhKHQscil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLnNldCh0LHIpfSkpfWdldERhdGEodCl7dmFyIHIsbjtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsIT09KG49bnVsbD09PShyPXRoaXMuX2RhdGEpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldCh0KSkmJnZvaWQgMCE9PW4/bjoie30ifSkpfXJlbW92ZURhdGEodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLmRlbGV0ZSh0KX0pKX19Y29uc3QgTG49c2VsZjtsZXQgSG47TG4ub25tZXNzYWdlPSh7ZGF0YTp0LHBvcnRzOnJ9KT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvO2NvbnN0IHM9clswXTtpZih0LnR5cGU9PT1Dbnx8SG4pc3dpdGNoKHQudHlwZSl7Y2FzZSBDbjp0cnl7Y29uc3Qgcj1PYmplY3QuYXNzaWduKHt9LHQuZGF0YSk7SG49eWllbGQodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgTW4sbj1uZXcgVG4ocik7eWllbGQgbi5pbml0aWFsaXplKHQpO2NvbnN0IGk9bmV3IFJuKG4pLG89bi5nZXREYXRhTGF5ZXIoKSxzPVVuLmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXM/dm9pZCAwOnMuaW5pdCkmJih5aWVsZCBzLmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe09iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KS5hdHRhY2hUb2tlbiYmKHQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7eWllbGQgbi5nZXRBY2Nlc3NUb2tlbigpfWB9KSl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e3MuZGlzYWJsZUhhbmRsZXImJnMuZGlzYWJsZUhhbmRsZXIoKX0sZW5hYmxlSHR0cEhhbmRsZXI6KCk9PntzLmVuYWJsZUhhbmRsZXImJnMuZW5hYmxlSGFuZGxlcigpfSxnZXRBY2Nlc3NUb2tlbjooKT0+bi5nZXRBY2Nlc3NUb2tlbigpLGdldEF1dGhvcml6YXRpb25VUkw6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0QXV0aG9yaXphdGlvblVSTCh0KS50aGVuKCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6eWllbGQgbi5nZXRQS0NFQ29kZSgpfX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfSkpLGdldEJhc2ljVXNlckluZm86KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldEJhc2ljVXNlckluZm8oKX0pKSxnZXRDb25maWdEYXRhOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRDb25maWdEYXRhKCl9KSksZ2V0RGVjb2RlZElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldERlY29kZWRJRFRva2VuKCl9KSksZ2V0SURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0SURUb2tlbigpfSkpLGdldE9JRENTZXJ2aWNlRW5kcG9pbnRzOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpLGdldFNpZ25PdXRVUkw6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBuLmdldFNpZ25PdXRVUkwoKX0pKSxodHRwUmVxdWVzdDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxyLGk7bGV0IGE9ITE7Y29uc3QgdT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgbiBvZlsuLi5udWxsIT09KHI9bnVsbD09PShlPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1yP3I6W10sbnVsbD09dT92b2lkIDA6dS5zZXJ2ZXJPcmlnaW5dKWlmKG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LnVybCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc3RhcnRzV2l0aChuKSl7YT0hMDticmVha31yZXR1cm4gYT9zLnJlcXVlc3QodCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9Pnt2YXIgcjtyZXR1cm4gNDAxPT09KG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMpP24ucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PnMucmVxdWVzdCh0KS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLUhSLUVTMDEiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0IiwiIiwiIixlKSkpKTpQcm9taXNlLnJlamVjdChlKX0pKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLUhSLUlWMDIiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0IiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksaHR0cFJlcXVlc3RBbGw6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixpO2xldCBhPSEwO2NvbnN0IHU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IG4gb2YgdCl7bGV0IHQ9ITE7Zm9yKGNvbnN0IHMgb2ZbLi4ubnVsbCE9PShyPW51bGw9PT0oZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cj9yOltdLG51bGw9PXU/dm9pZCAwOnUuc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGk9bi51cmwpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0YXJ0c1dpdGgocykpe3Q9ITA7YnJlYWt9aWYoIXQpe2E9ITE7YnJlYWt9fWNvbnN0IGM9W107cmV0dXJuIGE/KHQuZm9yRWFjaCgoZT0+e2MucHVzaChzLnJlcXVlc3QoZSkpfSkpLChudWxsPT1zP3ZvaWQgMDpzLmFsbCkmJnMuYWxsKGMpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT57dmFyIHQ7cmV0dXJuIDQwMT09PShudWxsPT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3RhdHVzKT9uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT5zLmFsbCYmcy5hbGwoYykudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUkEtRVMwMSIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3RBbGwiLCIiLCIiLGUpKSkpOlByb21pc2UucmVqZWN0KGUpfSkpKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLUhSQS1JVjAyIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+bi5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9Pm4ucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxuLmdldEJhc2ljVXNlckluZm8oKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSxyZXF1ZXN0QWNjZXNzVG9rZW46KHQscixzKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtyZXR1cm4gcyYmZS5lbmFibGVQS0NFJiYoeWllbGQgbi5zZXRQS0NFQ29kZShzKSksdD9uLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPXI/cjoiIikudGhlbigoKCk9PihpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxuLmdldEJhc2ljVXNlckluZm8oKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLVJBVDEtTkYwMSIsIndvcmtlci1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpLHJlcXVlc3RDdXN0b21HcmFudDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcixzLGE7bGV0IHU9ITAsYz0hMTtjb25zdCBoPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7dT0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KHM9bnVsbD09PShyPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1zP3M6W10sbnVsbD09aD92b2lkIDA6aC5zZXJ2ZXJPcmlnaW5dKWlmKG51bGw9PT0oYT10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnN0YXJ0c1dpdGgoZSkpe2M9ITA7YnJlYWt9fXJldHVybiB1fHxjP24ucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0LnJldHVybnNTZXNzaW9uPyhpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxuLmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBBbigiV09SS0VSX0NPUkUtUkNHLUlWMDEiLCJ3b3JrZXItY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIHRva2VuIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLHJldm9rZUFjY2Vzc1Rva2VuOigpPT5uLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihpLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSksc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6ZT0+eyhudWxsPT1zP3ZvaWQgMDpzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKX0sc2V0U2Vzc2lvblN0YXRlOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIG8uc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpfSkpLHNpZ25PdXQ6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHlpZWxkIG4uc2lnbk91dCgpfSkpLHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgbi51cGRhdGVDb25maWcodCl9KSl9fSkpKShyKSxIbi5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soQm4pLEhuLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2socW4pLEhuLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhqbiksSG4uc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soeG4pLHMucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpIbi5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOkhuLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNlc3Npb25TdGF0ZSxudWxsPT09KG89bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bz92b2lkIDA6by5wa2NlKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOkhuLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6SG4uaHR0cFJlcXVlc3RBbGwodC5kYXRhKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5zaWduT3V0KCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOkhuLnJlcXVlc3RDdXN0b21HcmFudCh0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOkhuLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6SG4uZW5hYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6SG4uZGlzYWJsZUh0dHBIYW5kbGVyKCkscy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiaXNfYXV0aGVudGljYXRlZCI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldFNpZ25PdXRVUkwoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzdGFydF9hdXRvX3JlZnJlc2hfdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoSG4uc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uc2V0U2Vzc2lvblN0YXRlKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi51cGRhdGVDb25maWcobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfY29uZmlnX2RhdGEiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PXN8fHMucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgQW4oIkNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsImNsaWVudC53b3JrZXIiLCJvbm1lc3NhZ2UiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIixgVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgJHt0LnR5cGV9LCBpcyBpbnZhbGlkLmApKSl9ZWxzZSBzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IEFuKCJDTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJjbGllbnQud29ya2VyIix0LnR5cGUsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3Qgam49KCk9PntMbi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0seG49ZT0+e0xuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxxbj0oKT0+e0xuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX0sQm49ZT0+e2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtkZWxldGUgdC50b0pTT04sTG4ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9dD90OiIiKSx0eXBlOiJyZXF1ZXN0LWVycm9yIn0pfTtyZXR1cm57fX0oKTsKCg==",null,!1,function(t){return Dn=Dn||function(t,l,i){var n=void 0===l?null:l,e=function(t,l){var i=atob(t);if(l){for(var n=new Uint8Array(i.length),e=0,c=i.length;e<c;++e)n[e]=i.charCodeAt(e);return String.fromCharCode.apply(null,new Uint16Array(n.buffer))}return i}(t,void 0!==i&&i),c=e.indexOf("\n",10)+1,o=e.substring(c)+(n?"//# sourceMappingURL="+n:""),d=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(d)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHI9W10sbj1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89ITE7ZnVuY3Rpb24gcygpe289ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsaT1lLmxlbmd0aDt0PGk7Kyt0KXJbdF09ZVt0XSxuW2UuY2hhckNvZGVBdCh0KV09dDtuWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIGksbyxzPVtdLGE9dDthPG47YSs9MylpPShlW2FdPDwxNikrKGVbYSsxXTw8OCkrZVthKzJdLHMucHVzaChyWyhvPWkpPj4xOCY2M10rcltvPj4xMiY2M10rcltvPj42JjYzXStyWzYzJm9dKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB1KGUpe3ZhciB0O298fHMoKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uJTMsdT0iIixjPVtdLGg9MTYzODMsbD0wLGY9bi1pO2w8ZjtsKz1oKWMucHVzaChhKGUsbCxsK2g+Zj9mOmwraCkpO3JldHVybiAxPT09aT8odD1lW24tMV0sdSs9clt0Pj4yXSx1Kz1yW3Q8PDQmNjNdLHUrPSI9PSIpOjI9PT1pJiYodD0oZVtuLTJdPDw4KStlW24tMV0sdSs9clt0Pj4xMF0sdSs9clt0Pj40JjYzXSx1Kz1yW3Q8PDImNjNdLHUrPSI9IiksYy5wdXNoKHUpLGMuam9pbigiIil9ZnVuY3Rpb24gYyhlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBoKGUsdCxyLG4saSxvKXt2YXIgcyxhLHUsYz04Km8taS0xLGg9KDE8PGMpLTEsbD1oPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpvLTEscD1uPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9aCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSx1Kj0yKSwodCs9cytsPj0xP2YvdTpmKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKHMrKyx1Lz0yKSxzK2w+PWg/KGE9MCxzPWgpOnMrbD49MT8oYT0odCp1LTEpKk1hdGgucG93KDIsaSkscys9bCk6KGE9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqZ312YXIgbD17fS50b1N0cmluZyxmPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWwuY2FsbChlKX07ZnVuY3Rpb24gZCgpe3JldHVybiBnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHAoZSx0KXtpZihkKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBnKGUsdCxyKXtpZighKGcuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBtKHRoaXMsZSl9cmV0dXJuIHYodGhpcyxlLHQscil9ZnVuY3Rpb24gdihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO2cuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189Zy5wcm90b3R5cGU6ZT13KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIWcuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGsodCxyKSxpPShlPXAoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoXyh0KSl7dmFyIHI9MHxiKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXAoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP3AoZSwwKTp3KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmYodC5kYXRhKSlyZXR1cm4gdyhlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIHkoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBtKGUsdCl7aWYoeSh0KSxlPXAoZSx0PDA/MDowfGIodCkpLCFnLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGIodC5sZW5ndGgpO2U9cChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtpZihlPj1kKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gayhlLHQpe2lmKF8oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuICQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuICQoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiB4KHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaih0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHEodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gRShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIFQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWcuZnJvbSh0LG4pKSxfKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6QShlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGcuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOkEoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIEEoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gUihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHQscixuKXtyZXR1cm4gWCgkKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFAoZSx0LHIsbil7cmV0dXJuIFgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBEKGUsdCxyLG4pe3JldHVybiBQKGUsdCxyLG4pfWZ1bmN0aW9uIE8oZSx0LHIsbil7cmV0dXJuIFgoRyh0KSxlLHIsbil9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gWChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFUoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3UoZSk6dShlLnNsaWNlKHQscikpfWZ1bmN0aW9uIE0oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsdSxjPWVbaV0saD1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKHU9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9dSk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihoPXUpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYodT0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZ1PDExMTQxMTImJihoPXUpfW51bGw9PT1oPyhoPTY1NTMzLGw9MSk6aD42NTUzNSYmKGgtPTY1NTM2LG4ucHVzaChoPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG4ucHVzaChoKSxpKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1MKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1MKSk7cmV0dXJuIHJ9KG4pfWcuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT10LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHQuVFlQRURfQVJSQVlfU1VQUE9SVCxnLnBvb2xTaXplPTgxOTIsZy5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189Zy5wcm90b3R5cGUsZX0sZy5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdihudWxsLGUsdCxyKX0sZy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGcuX19wcm90b19fPVVpbnQ4QXJyYXkpLGcuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4geSh0KSx0PD0wP3AoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9wKGUsdCkuZmlsbChyLG4pOnAoZSx0KS5maWxsKHIpOnAoZSx0KX0obnVsbCxlLHQscil9LGcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFooZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmWihlLnNsaWNlKDAsMCkpfShlKSl9LGcuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFfKGUpfHwhXyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sZy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxnLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGcuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1nLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFfKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sZy5ieXRlTGVuZ3RoPWssZy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilFKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpRSh0aGlzLHQsdCszKSxFKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClFKHRoaXMsdCx0KzcpLEUodGhpcyx0KzEsdCs2KSxFKHRoaXMsdCsyLHQrNSksRSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP00odGhpcywwLGUpOlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIV8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWcuY29tcGFyZSh0aGlzLGUpfSxnLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighXyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixpKSxjPWUuc2xpY2UodCxyKSxoPTA7aDxhOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBUKHRoaXMsZSx0LHIsITApfSxnLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFQodGhpcyxlLHQsciwhMSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBSKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRCh0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBJKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LGcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEw9NDA5NjtmdW5jdGlvbiBIKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVYoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gcShlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpLG8pe2lmKCFfKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBLKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFkoZSx0LHIsbixpLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsNCksaChlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBKKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsOCksaChlLHQscixuLDUyLDgpLHIrOH1nLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgZyhpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0sZy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fEIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LGcucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxnLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEIoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxCKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sZy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8QihlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxnLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxnLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEIoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sZy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QihlLDQsdGhpcy5sZW5ndGgpLGModGhpcyxlLCEwLDIzLDQpfSxnLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsNCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsMjMsNCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITAsNTIsOCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxCKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsNTIsOCl9LGcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8Tih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sZy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxOKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LGcucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDI1NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsMiw2NTUzNSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwyLDY1NTM1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOksodGhpcyxlLHQsITEpLHQrMn0sZy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Rih0aGlzLGUsdCwhMCksdCs0fSxnLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzR9LGcucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDEyNywtMTI4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpLKHRoaXMsZSx0LCExKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkYodGhpcyxlLHQsITApLHQrNH0sZy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCs0fSxnLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCEwLHIpfSxnLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCExLHIpfSxnLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gSih0aGlzLGUsdCwhMCxyKX0sZy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIEoodGhpcyxlLHQsITEscil9LGcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IWcuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LGcucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9XyhlKT9lOiQobmV3IGcoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB6PS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uICQoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsYSx1LGMsaDtvfHxzKCk7dmFyIGw9ZS5sZW5ndGg7aWYobCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7Yz0iPSI9PT1lW2wtMl0/MjoiPSI9PT1lW2wtMV0/MTowLGg9bmV3IGkoMypsLzQtYyksYT1jPjA/bC00Omw7dmFyIGY9MDtmb3IodD0wLHI9MDt0PGE7dCs9NCxyKz0zKXU9bltlLmNoYXJDb2RlQXQodCldPDwxOHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bltlLmNoYXJDb2RlQXQodCszKV0saFtmKytdPXU+PjE2JjI1NSxoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1O3JldHVybiAyPT09Yz8odT1uW2UuY2hhckNvZGVBdCh0KV08PDJ8bltlLmNoYXJDb2RlQXQodCsxKV0+PjQsaFtmKytdPTI1NSZ1KToxPT09YyYmKHU9bltlLmNoYXJDb2RlQXQodCldPDwxMHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxuW2UuY2hhckNvZGVBdCh0KzIpXT4+MixoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1KSxofShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKHosIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIFgoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LGVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWVlLmNhbGwoZSl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gaWUoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1lZS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIG9lKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1lZS5jYWxsKGUpfWZ1bmN0aW9uIHNlKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksdGUoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGFlPXtpc0FycmF5OnRlLGlzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWVlLmNhbGwoZSl9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXJlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXJlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpuZSxpc1BsYWluT2JqZWN0OmllLGlzVW5kZWZpbmVkOnJlLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1lZS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09ZWUuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PWVlLmNhbGwoZSl9LGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKGUpJiZvZShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcyYmZSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpzZSxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe2llKHRbbl0pJiZpZShyKT90W25dPWUodFtuXSxyKTppZShyKT90W25dPWUoe30scik6dGUocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXNlKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gc2UodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1EodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGFlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107YWUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihhZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sYWUuZm9yRWFjaChlLChmdW5jdGlvbihlKXthZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6YWUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2godWUodCkrIj0iK3VlKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gaGUoKXt0aGlzLmhhbmRsZXJzPVtdfWhlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGhlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0saGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7YWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGxlPWhlO2Z1bmN0aW9uIGZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZGUoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBwZT1mZSxnZT1kZTtmdW5jdGlvbiB2ZShlKXtpZihwZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigocGU9PT1mZXx8IXBlKSYmc2V0VGltZW91dClyZXR1cm4gcGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBwZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gcGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHBlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0VGltZW91dCYmKHBlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsZWFyVGltZW91dCYmKGdlPWNsZWFyVGltZW91dCk7dmFyIHllLG1lPVtdLHdlPSExLGJlPS0xO2Z1bmN0aW9uIF9lKCl7d2UmJnllJiYod2U9ITEseWUubGVuZ3RoP21lPXllLmNvbmNhdChtZSk6YmU9LTEsbWUubGVuZ3RoJiZrZSgpKX1mdW5jdGlvbiBrZSgpe2lmKCF3ZSl7dmFyIGU9dmUoX2UpO3dlPSEwO2Zvcih2YXIgdD1tZS5sZW5ndGg7dDspe2Zvcih5ZT1tZSxtZT1bXTsrK2JlPHQ7KXllJiZ5ZVtiZV0ucnVuKCk7YmU9LTEsdD1tZS5sZW5ndGh9eWU9bnVsbCx3ZT0hMSxmdW5jdGlvbihlKXtpZihnZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChnZT09PWRlfHwhZ2UpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGdlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2dlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gZ2UuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBnZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFNlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9U2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEVlKCl7fXZhciBUZT1FZSxBZT1FZSxSZT1FZSxDZT1FZSxQZT1FZSxEZT1FZSxPZT1FZTt2YXIgSWU9dC5wZXJmb3JtYW5jZXx8e30sVWU9SWUubm93fHxJZS5tb3pOb3d8fEllLm1zTm93fHxJZS5vTm93fHxJZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBNZT1uZXcgRGF0ZTt2YXIgTGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07bWUucHVzaChuZXcgU2UoZSx0KSksMSE9PW1lLmxlbmd0aHx8d2V8fHZlKGtlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpUZSxhZGRMaXN0ZW5lcjpBZSxvbmNlOlJlLG9mZjpDZSxyZW1vdmVMaXN0ZW5lcjpQZSxyZW1vdmVBbGxMaXN0ZW5lcnM6RGUsZW1pdDpPZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpVZS5jYWxsKEllKSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1NZSkvMWUzfX0sSGU9TGUsamU9ZnVuY3Rpb24oZSx0KXthZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LHhlPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxxZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4geGUobyx0LHIsbixpKX0sQmU9YWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLGFlLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksYWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxOZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLEtlPWFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPWFlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxpPWUuaGVhZGVycyxvPWUucmVzcG9uc2VUeXBlO2FlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYT1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShhKyI6Iit1KX12YXIgYyxoLGw9KGM9ZS5iYXNlVVJMLGg9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChoKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGgpOmgpO2Z1bmN0aW9uIGYoKXtpZihzKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHM/ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmTmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0ocy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOm8mJiJ0ZXh0IiE9PW8mJiJqc29uIiE9PW8/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dCxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6c307IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QocWUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLGkpLHM9bnVsbH19aWYocy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksY2UobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gcz9zLm9ubG9hZGVuZD1mOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cyYmND09PXMucmVhZHlTdGF0ZSYmKDAhPT1zLnN0YXR1c3x8cy5yZXNwb25zZVVSTCYmMD09PXMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKHFlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IocWUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIocWUodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHMpKSxzPW51bGx9LGFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBkPShlLndpdGhDcmVkZW50aWFsc3x8S2UobCkpJiZlLnhzcmZDb29raWVOYW1lP0JlLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2QmJihpW2UueHNyZkhlYWRlck5hbWVdPWQpfSJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmFlLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTpzLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChzLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYocy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmcy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7cyYmKHMuYWJvcnQoKSxyKGUpLHM9bnVsbCl9KSksbnx8KG49bnVsbCkscy5zZW5kKG4pfSkpfSxZZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFdlKGUsdCl7IWFlLmlzVW5kZWZpbmVkKGUpJiZhZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgSmUsemU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PUhlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSGUpKSYmKEplPUZlKSxKZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUodCwiQWNjZXB0IiksamUodCwiQ29udGVudC1UeXBlIiksYWUuaXNGb3JtRGF0YShlKXx8YWUuaXNBcnJheUJ1ZmZlcihlKXx8YWUuaXNCdWZmZXIoZSl8fGFlLmlzU3RyZWFtKGUpfHxhZS5pc0ZpbGUoZSl8fGFlLmlzQmxvYihlKT9lOmFlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOmFlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6YWUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKGFlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksYWUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZhZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgeGUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07emUuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXt6ZS5oZWFkZXJzW2VdPXt9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7emUuaGVhZGVyc1tlXT1hZS5tZXJnZShZZSl9KSk7dmFyIFZlPXplLCRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxWZTtyZXR1cm4gYWUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sR2U9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIFhlKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBaZT1mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPSRlLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPWFlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksYWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxWZS5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gWGUoZSksdC5kYXRhPSRlLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEdlKHQpfHwoWGUoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT0kZS5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxRZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxpPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLG89WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0scz1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhZS5pc1BsYWluT2JqZWN0KGUpJiZhZS5pc1BsYWluT2JqZWN0KHQpP2FlLm1lcmdlKGUsdCk6YWUuaXNQbGFpbk9iamVjdCh0KT9hZS5tZXJnZSh7fSx0KTphZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEoZVtuXSx0W25dKX1hZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe2FlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1hKHZvaWQgMCx0W2VdKSl9KSksYWUuZm9yRWFjaChpLHUpLGFlLmZvckVhY2gobywoZnVuY3Rpb24obil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEodm9pZCAwLHRbbl0pfSkpLGFlLmZvckVhY2gocywoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09YShlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09YSh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KGkpLmNvbmNhdChvKS5jb25jYXQocyksaD1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIGFlLmZvckVhY2goaCx1KSxyfSxldD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heGlvcy8tL2F4aW9zLTAuMjEuNC50Z3oiLF9pbnRlZ3JpdHk6InNoYTUxMi11dDV2ZXdraXU4ampHQmRxcE00NFh4anVDanE5TEFLZUhWbW9WZkhWenk4ZUhneHhxOFNiQVZRTm92REE4bVZpMDVrUDBFYS9uL1V6Y1NIY1RKUWZOZz09IixfZnJvbToiYXhpb3NAMC4yMS40In0sdHQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3R0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pKTt2YXIgcnQ9e30sbnQ9ZXQudmVyc2lvbi5zcGxpdCgiLiIpO2Z1bmN0aW9uIGl0KGUsdCl7Zm9yKHZhciByPXQ/dC5zcGxpdCgiLiIpOm50LG49ZS5zcGxpdCgiLiIpLGk9MDtpPDM7aSsrKXtpZihyW2ldPm5baV0pcmV0dXJuITA7aWYocltpXTxuW2ldKXJldHVybiExfXJldHVybiExfXR0LnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7dmFyIG49dCYmaXQodCk7ZnVuY3Rpb24gaShlLHQpe3JldHVybiJbQXhpb3MgdiIrZXQudmVyc2lvbisiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2UrIiciK3QrKHI/Ii4gIityOiIiKX1yZXR1cm4gZnVuY3Rpb24ocixvLHMpe2lmKCExPT09ZSl0aHJvdyBuZXcgRXJyb3IoaShvLCIgaGFzIGJlZW4gcmVtb3ZlZCBpbiAiK3QpKTtyZXR1cm4gbiYmIXJ0W29dJiYocnRbb109ITAsY29uc29sZS53YXJuKGkobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhZXx8ZShyLG8scyl9fTt2YXIgb3Q9e2lzT2xkZXJWZXJzaW9uOml0LGFzc2VydE9wdGlvbnM6ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGg7aS0tID4wOyl7dmFyIG89bltpXSxzPXRbb107aWYocyl7dmFyIGE9ZVtvXSx1PXZvaWQgMD09PWF8fHMoYSxvLGUpO2lmKCEwIT09dSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK3UpfWVsc2UgaWYoITAhPT1yKXRocm93IEVycm9yKCJVbmtub3duIG9wdGlvbiAiK28pfX0sdmFsaWRhdG9yczp0dH0sc3Q9b3QudmFsaWRhdG9ycztmdW5jdGlvbiBhdChlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGxlLHJlc3BvbnNlOm5ldyBsZX19YXQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlPyhlPWFyZ3VtZW50c1sxXXx8e30pLnVybD1hcmd1bWVudHNbMF06ZT1lfHx7fSwoZT1RZSh0aGlzLmRlZmF1bHRzLGUpKS5tZXRob2Q/ZS5tZXRob2Q9ZS5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD9lLm1ldGhvZD10aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOmUubWV0aG9kPSJnZXQiO3ZhciB0PWUudHJhbnNpdGlvbmFsO3ZvaWQgMCE9PXQmJm90LmFzc2VydE9wdGlvbnModCx7c2lsZW50SlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksZm9yY2VkSlNPTlBhcnNpbmc6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIiksY2xhcmlmeVRpbWVvdXRFcnJvcjpzdC50cmFuc2l0aW9uYWwoc3QuYm9vbGVhbiwiMS4wLjAiKX0sITEpO3ZhciByPVtdLG49ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdC5ydW5XaGVuJiYhMT09PXQucnVuV2hlbihlKXx8KG49biYmdC5zeW5jaHJvbm91cyxyLnVuc2hpZnQodC5mdWxmaWxsZWQsdC5yZWplY3RlZCkpfSkpO3ZhciBpLG89W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7by5wdXNoKGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLCFuKXt2YXIgcz1bWmUsdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkocyxyKSxzPXMuY29uY2F0KG8pLGk9UHJvbWlzZS5yZXNvbHZlKGUpO3MubGVuZ3RoOylpPWkudGhlbihzLnNoaWZ0KCkscy5zaGlmdCgpKTtyZXR1cm4gaX1mb3IodmFyIGE9ZTtyLmxlbmd0aDspe3ZhciB1PXIuc2hpZnQoKSxjPXIuc2hpZnQoKTt0cnl7YT11KGEpfWNhdGNoKGUpe2MoZSk7YnJlYWt9fXRyeXtpPVplKGEpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoO28ubGVuZ3RoOylpPWkudGhlbihvLnNoaWZ0KCksby5zaGlmdCgpKTtyZXR1cm4gaX0sYXQucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihlKXtyZXR1cm4gZT1RZSh0aGlzLmRlZmF1bHRzLGUpLGNlKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LGFlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFFlKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KSksYWUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLChmdW5jdGlvbihlKXthdC5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoUWUobnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6cn0pKX19KSk7dmFyIHV0PWF0O2Z1bmN0aW9uIGN0KGUpe3RoaXMubWVzc2FnZT1lfWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJDYW5jZWwiKyh0aGlzLm1lc3NhZ2U/IjogIit0aGlzLm1lc3NhZ2U6IiIpfSxjdC5wcm90b3R5cGUuX19DQU5DRUxfXz0hMDt2YXIgaHQ9Y3Q7ZnVuY3Rpb24gbHQoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dD1lfSkpO3ZhciByPXRoaXM7ZSgoZnVuY3Rpb24oZSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgaHQoZSksdChyLnJlYXNvbikpfSkpfWx0LnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LGx0LnNvdXJjZT1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IGx0KChmdW5jdGlvbih0KXtlPXR9KSk7cmV0dXJue3Rva2VuOnQsY2FuY2VsOmV9fTt2YXIgZnQ9bHQ7ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9bmV3IHV0KGUpLHI9USh1dC5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gYWUuZXh0ZW5kKHIsdXQucHJvdG90eXBlLHQpLGFlLmV4dGVuZChyLHQpLHJ9dmFyIHB0PWR0KFZlKTtwdC5BeGlvcz11dCxwdC5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGR0KFFlKHB0LmRlZmF1bHRzLGUpKX0scHQuQ2FuY2VsPWh0LHB0LkNhbmNlbFRva2VuPWZ0LHB0LmlzQ2FuY2VsPUdlLHB0LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9LHB0LnNwcmVhZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19LHB0LmlzQXhpb3NFcnJvcj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJiEwPT09ZS5pc0F4aW9zRXJyb3J9O3ZhciBndD1wdCx2dD1wdDtndC5kZWZhdWx0PXZ0O3ZhciB5dCxtdCx3dD1ndDsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KCiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9mdW5jdGlvbiBidChlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX0obXQ9eXR8fCh5dD17fSkpLmZvcm1Qb3N0PSJmb3JtX3Bvc3QiLG10LnF1ZXJ5PSJxdWVyeSI7dmFyIF90OyFmdW5jdGlvbihlKXtlLkNvbmZpZ0RhdGE9ImNvbmZpZ19kYXRhIixlLk9JRENQcm92aWRlck1ldGFEYXRhPSJvaWRjX3Byb3ZpZGVyX21ldGFfZGF0YSIsZS5TZXNzaW9uRGF0YT0ic2Vzc2lvbl9kYXRhIixlLlRlbXBvcmFyeURhdGE9InRlbXBvcmFyeV9kYXRhIn0oX3R8fChfdD17fSkpO2NvbnN0IGt0PSJyZWZyZXNoX3Rva2VuX3RpbWVyIjtjbGFzcyBTdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUsdCxyLG4saSxvKXtzdXBlcihudWxsIT1uP246bnVsbD09bz92b2lkIDA6by5tZXNzYWdlKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1lLHRoaXMuZmlsZT10LHRoaXMubWV0aG9kPXIsdGhpcy5kZXNjcmlwdGlvbj1pLHRoaXMuZXJyb3I9byxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxuZXcudGFyZ2V0LnByb3RvdHlwZSl9fWNsYXNzIEV0IGV4dGVuZHMgU3R7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8scyxhLHUpe3N1cGVyKGUsdCxyLG4saSksdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLmNvZGU9ZSx0aGlzLmZpbGU9dCx0aGlzLm1ldGhvZD1yLHRoaXMuZGVzY3JpcHRpb249aSx0aGlzLm5ldHdvcmtFcnJvckNvZGU9byx0aGlzLm5ldHdvcmtFcnJvck1lc3NhZ2U9cyx0aGlzLnN0YXR1cz1hLHRoaXMubmV0d29ya0Vycm9yRGF0YT11fX12YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBBdChlLHQscil7cmV0dXJuIGUocj17cGF0aDp0LGV4cG9ydHM6e30scmVxdWlyZTpmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRHluYW1pYyByZXF1aXJlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMiKX0obnVsbD09dCYmci5wYXRoKX19LHIuZXhwb3J0cyksci5leHBvcnRzfXZhciBSdD12b2lkIDAhPT10P3Q6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LEN0PVtdLFB0PVtdLER0PSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LE90PSExO2Z1bmN0aW9uIEl0KCl7T3Q9ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KUN0W3RdPWVbdF0sUHRbZS5jaGFyQ29kZUF0KHQpXT10O1B0WyItIi5jaGFyQ29kZUF0KDApXT02MixQdFsiXyIuY2hhckNvZGVBdCgwKV09NjN9ZnVuY3Rpb24gVXQoZSx0LHIpe2Zvcih2YXIgbixpLG89W10scz10O3M8cjtzKz0zKW49KGVbc108PDE2KSsoZVtzKzFdPDw4KStlW3MrMl0sby5wdXNoKEN0WyhpPW4pPj4xOCY2M10rQ3RbaT4+MTImNjNdK0N0W2k+PjYmNjNdK0N0WzYzJmldKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBNdChlKXt2YXIgdDtPdHx8SXQoKTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1yJTMsaT0iIixvPVtdLHM9MTYzODMsYT0wLHU9ci1uO2E8dTthKz1zKW8ucHVzaChVdChlLGEsYStzPnU/dTphK3MpKTtyZXR1cm4gMT09PW4/KHQ9ZVtyLTFdLGkrPUN0W3Q+PjJdLGkrPUN0W3Q8PDQmNjNdLGkrPSI9PSIpOjI9PT1uJiYodD0oZVtyLTJdPDw4KStlW3ItMV0saSs9Q3RbdD4+MTBdLGkrPUN0W3Q+PjQmNjNdLGkrPUN0W3Q8PDImNjNdLGkrPSI9Iiksby5wdXNoKGkpLG8uam9pbigiIil9ZnVuY3Rpb24gTHQoZSx0LHIsbixpKXt2YXIgbyxzLGE9OCppLW4tMSx1PSgxPDxhKS0xLGM9dT4+MSxoPS03LGw9cj9pLTE6MCxmPXI/LTE6MSxkPWVbdCtsXTtmb3IobCs9ZixvPWQmKDE8PC1oKS0xLGQ+Pj0taCxoKz1hO2g+MDtvPTI1NipvK2VbdCtsXSxsKz1mLGgtPTgpO2ZvcihzPW8mKDE8PC1oKS0xLG8+Pj0taCxoKz1uO2g+MDtzPTI1NipzK2VbdCtsXSxsKz1mLGgtPTgpO2lmKDA9PT1vKW89MS1jO2Vsc2V7aWYobz09PXUpcmV0dXJuIHM/TmFOOjEvMCooZD8tMToxKTtzKz1NYXRoLnBvdygyLG4pLG8tPWN9cmV0dXJuKGQ/LTE6MSkqcypNYXRoLnBvdygyLG8tbil9ZnVuY3Rpb24gSHQoZSx0LHIsbixpLG8pe3ZhciBzLGEsdSxjPTgqby1pLTEsaD0oMTw8YyktMSxsPWg+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9bj8wOm8tMSxwPW4/MTotMSxnPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8oYT1pc05hTih0KT8xOjAscz1oKToocz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0Kih1PU1hdGgucG93KDIsLXMpKTwxJiYocy0tLHUqPTIpLCh0Kz1zK2w+PTE/Zi91OmYqTWF0aC5wb3coMiwxLWwpKSp1Pj0yJiYocysrLHUvPTIpLHMrbD49aD8oYT0wLHM9aCk6cytsPj0xPyhhPSh0KnUtMSkqTWF0aC5wb3coMixpKSxzKz1sKTooYT10Kk1hdGgucG93KDIsbC0xKSpNYXRoLnBvdygyLGkpLHM9MCkpO2k+PTg7ZVtyK2RdPTI1NSZhLGQrPXAsYS89MjU2LGktPTgpO2ZvcihzPXM8PGl8YSxjKz1pO2M+MDtlW3IrZF09MjU1JnMsZCs9cCxzLz0yNTYsYy09OCk7ZVtyK2QtcF18PTEyOCpnfXZhciBqdD17fS50b1N0cmluZyx4dD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1qdC5jYWxsKGUpfTtLdC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMD09PVJ0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fFJ0LlRZUEVEX0FSUkFZX1NVUFBPUlQ7dmFyIHF0PUJ0KCk7ZnVuY3Rpb24gQnQoKXtyZXR1cm4gS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gTnQoZSx0KXtpZihCdCgpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1LdC5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgS3QodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gS3QoZSx0LHIpe2lmKCEoS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIEt0KSlyZXR1cm4gbmV3IEt0KGUsdCxyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIFd0KHRoaXMsZSl9cmV0dXJuIEZ0KHRoaXMsZSx0LHIpfWZ1bmN0aW9uIEZ0KGUsdCxyLG4pe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKHQuYnl0ZUxlbmd0aCxyPDB8fHQuYnl0ZUxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPHIrKG58fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPUt0LnByb3RvdHlwZTplPUp0KGUsdCksZX0oZSx0LHIsbik6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHImJiIiIT09cnx8KHI9InV0ZjgiKSwhS3QuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfCR0KHQsciksaT0oZT1OdChlLG4pKS53cml0ZSh0LHIpO3JldHVybiBpIT09biYmKGU9ZS5zbGljZSgwLGkpKSxlfShlLHQscik6ZnVuY3Rpb24oZSx0KXtpZihWdCh0KSl7dmFyIHI9MHx6dCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1OdChlLHIpKS5sZW5ndGh8fHQuY29weShlLDAsMCxyKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPW4/TnQoZSwwKTpKdChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZ4dCh0LmRhdGEpKXJldHVybiBKdChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIFl0KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gV3QoZSx0KXtpZihZdCh0KSxlPU50KGUsdDwwPzA6MHx6dCh0KSksIUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gSnQoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHx6dCh0Lmxlbmd0aCk7ZT1OdChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24genQoZSl7aWYoZT49QnQoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrQnQoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfWZ1bmN0aW9uICR0KGUsdCl7aWYoVnQoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIF9yKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4ga3IoZSkubGVuZ3RoO2RlZmF1bHQ6aWYobilyZXR1cm4gX3IoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gR3QoZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gaHIodGhpcyx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGFyKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gdXIodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNyKHRoaXMsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIHNyKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGxyKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIFh0KGUsdCxyKXt2YXIgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gWnQoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PUt0LmZyb20odCxuKSksVnQodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTpRdChlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTpRdChlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gUXQoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gZXIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBvPXQubGVuZ3RoO2lmKG8lMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIHM9MDtzPG47KytzKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKnMsMiksMTYpO2lmKGlzTmFOKGEpKXJldHVybiBzO2VbcitzXT1hfXJldHVybiBzfWZ1bmN0aW9uIHRyKGUsdCxyLG4pe3JldHVybiBTcihfcih0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBycihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBucihlLHQscixuKXtyZXR1cm4gcnIoZSx0LHIsbil9ZnVuY3Rpb24gaXIoZSx0LHIsbil7cmV0dXJuIFNyKGtyKHQpLGUscixuKX1mdW5jdGlvbiBvcihlLHQscixuKXtyZXR1cm4gU3IoZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpLG89W10scz0wO3M8ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrcyluPShyPWUuY2hhckNvZGVBdChzKSk+PjgsaT1yJTI1NixvLnB1c2goaSksby5wdXNoKG4pO3JldHVybiBvfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBzcihlLHQscil7cmV0dXJuIDA9PT10JiZyPT09ZS5sZW5ndGg/TXQoZSk6TXQoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBhcihlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10saT10O2k8cjspe3ZhciBvLHMsYSx1LGM9ZVtpXSxoPW51bGwsbD1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGkrbDw9cilzd2l0Y2gobCl7Y2FzZSAxOmM8MTI4JiYoaD1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoaD11KTticmVhaztjYXNlIDM6bz1lW2krMV0scz1lW2krMl0sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJih1PSgxNSZjKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjIwNDcmJih1PDU1Mjk2fHx1PjU3MzQzKSYmKGg9dSk7YnJlYWs7Y2FzZSA0Om89ZVtpKzFdLHM9ZVtpKzJdLGE9ZVtpKzNdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImYSkmJih1PSgxNSZjKTw8MTh8KDYzJm8pPDwxMnwoNjMmcyk8PDZ8NjMmYSk+NjU1MzUmJnU8MTExNDExMiYmKGg9dSl9bnVsbD09PWg/KGg9NjU1MzMsbD0xKTpoPjY1NTM1JiYoaC09NjU1MzYsbi5wdXNoKGg+Pj4xMCYxMDIzfDU1Mjk2KSxoPTU2MzIwfDEwMjMmaCksbi5wdXNoKGgpLGkrPWx9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2Zvcih2YXIgcj0iIixuPTA7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9NDA5NikpO3JldHVybiByfShuKX1mdW5jdGlvbiB1cihlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGNyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBocihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPWJyKGVbb10pO3JldHVybiBpfWZ1bmN0aW9uIGxyKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGk9IiIsbz0wO288bi5sZW5ndGg7bys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10rMjU2Km5bbysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZnIoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGRyKGUsdCxyLG4saSxvKXtpZighVnQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHByKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBncihlLHQscixuKXt0PDAmJih0PTQyOTQ5NjcyOTUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsNCk7aTxvOysraSllW3IraV09dD4+PjgqKG4/aTozLWkpJjI1NX1mdW5jdGlvbiB2cihlLHQscixuLGksbyl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHlyKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDQpLEh0KGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIG1yKGUsdCxyLG4saSl7cmV0dXJuIGl8fHZyKGUsMCxyLDgpLEh0KGUsdCxyLG4sNTIsOCkscis4fUt0LnBvb2xTaXplPTgxOTIsS3QuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPUt0LnByb3RvdHlwZSxlfSxLdC5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRnQobnVsbCxlLHQscil9LEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQmJihLdC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLEt0Ll9fcHJvdG9fXz1VaW50OEFycmF5KSxLdC5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBZdCh0KSx0PD0wP050KGUsdCk6dm9pZCAwIT09cj8ic3RyaW5nIj09dHlwZW9mIG4/TnQoZSx0KS5maWxsKHIsbik6TnQoZSx0KS5maWxsKHIpOk50KGUsdCl9KG51bGwsZSx0LHIpfSxLdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gV3QobnVsbCxlKX0sS3QuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBXdChudWxsLGUpfSxLdC5pc0J1ZmZlcj1FcixLdC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIVZ0KGUpfHwhVnQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LEt0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEt0LmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCF4dChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBLdC5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPUt0LmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFWdChvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4saSksaSs9by5sZW5ndGh9cmV0dXJuIG59LEt0LmJ5dGVMZW5ndGg9JHQsS3QucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxLdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKVh0KHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxLdC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KVh0KHRoaXMsdCx0KzMpLFh0KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpWHQodGhpcyx0LHQrNyksWHQodGhpcyx0KzEsdCs2KSxYdCh0aGlzLHQrMix0KzUpLFh0KHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LEt0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP2FyKHRoaXMsMCxlKTpHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEt0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1LdC5jb21wYXJlKHRoaXMsZSl9LEt0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LEt0LnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoIVZ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtpZih2b2lkIDA9PT10JiYodD0wKSx2b2lkIDA9PT1yJiYocj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSx0PDB8fHI+ZS5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmdD49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKHQ+PXIpcmV0dXJuIDE7aWYodGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKHQ+Pj49MCksYT1NYXRoLm1pbihvLHMpLHU9dGhpcy5zbGljZShuLGkpLGM9ZS5zbGljZSh0LHIpLGg9MDtoPGE7KytoKWlmKHVbaF0hPT1jW2hdKXtvPXVbaF0scz1jW2hdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sS3QucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LEt0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gWnQodGhpcyxlLHQsciwhMCl9LEt0LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIFp0KHRoaXMsZSx0LHIsITEpfSxLdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodm9pZCAwPT09dCluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgdCluPXQscj10aGlzLmxlbmd0aCx0PTA7ZWxzZXtpZighaXNGaW5pdGUodCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO3R8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49InV0ZjgiKSk6KG49cixyPXZvaWQgMCl9dmFyIGk9dGhpcy5sZW5ndGgtdDtpZigodm9pZCAwPT09cnx8cj5pKSYmKHI9aSksZS5sZW5ndGg+MCYmKHI8MHx8dDwwKXx8dD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtufHwobj0idXRmOCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlImhleCI6cmV0dXJuIGVyKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHRyKHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBycih0aGlzLGUsdCxyKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBucih0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGlyKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gb3IodGhpcyxlLHQscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7bj0oIiIrbikudG9Mb3dlckNhc2UoKSxvPSEwfX0sS3QucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX0sS3QucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189S3QucHJvdG90eXBlO2Vsc2V7dmFyIGk9dC1lO3I9bmV3IEt0KGksdm9pZCAwKTtmb3IodmFyIG89MDtvPGk7KytvKXJbb109dGhpc1tvK2VdfXJldHVybiByfSxLdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxLdC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sS3QucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDIsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fSxLdC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LEt0LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxLdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tlXSsodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX0sS3QucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sS3QucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fGZyKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsaT0xLG89dGhpc1tlKy0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1tlKy0tbl0qaTtyZXR1cm4gbz49KGkqPTEyOCkmJihvLT1NYXRoLnBvdygyLDgqdCkpLG99LEt0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2VdPy0xKigyNTUtdGhpc1tlXSsxKTp0aGlzW2VdfSxLdC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oZSx0KXt0fHxmcihlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxLdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9LEt0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxmcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sS3QucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGZyKGUsNCx0aGlzLmxlbmd0aCksTHQodGhpcyxlLCEwLDIzLDQpfSxLdC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw0LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsMjMsNCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITAsNTIsOCl9LEt0LnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZnIoZSw4LHRoaXMubGVuZ3RoKSxMdCh0aGlzLGUsITEsNTIsOCl9LEt0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtlPStlLHR8PTAscnw9MCxufHxkcih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sS3QucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fGRyKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDEsMjU1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpwcih0aGlzLGUsdCwhMCksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDY1NTM1LDApLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0KzNdPWU+Pj4yNCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCsxXT1lPj4+OCx0aGlzW3RdPTI1NSZlKTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxLdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO2RyKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz1yLTEscz0xLGE9MDtmb3IodGhpc1t0K29dPTI1NSZlOy0tbz49MCYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrbysxXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LEt0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMSwxMjcsLTEyOCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0sS3QucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxkcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOnByKHRoaXMsZSx0LCEwKSx0KzJ9LEt0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8ZHIodGhpcyxlLHQsMiwzMjc2NywtMzI3NjgpLEt0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpwcih0aGlzLGUsdCwhMSksdCsyfSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpncih0aGlzLGUsdCwhMCksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fGRyKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksS3QuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpncih0aGlzLGUsdCwhMSksdCs0fSxLdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4geXIodGhpcyxlLHQsITAscil9LEt0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB5cih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMCxyKX0sS3QucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMSxyKX0sS3QucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IUt0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGk9MDtpPG87KytpKWVbaSt0XT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK28pLHQpO3JldHVybiBvfSxLdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihlLHQscixuKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIHImJihuPXIscj10aGlzLmxlbmd0aCksMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7aTwyNTYmJihlPWkpfWlmKHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhS3QuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9VnQoZSk/ZTpfcihuZXcgS3QoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciB3cj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBicihlKXtyZXR1cm4gZTwxNj8iMCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gX3IoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIGtyKGUpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvLHM7T3R8fEl0KCk7dmFyIGE9ZS5sZW5ndGg7aWYoYSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7bz0iPSI9PT1lW2EtMl0/MjoiPSI9PT1lW2EtMV0/MTowLHM9bmV3IER0KDMqYS80LW8pLG49bz4wP2EtNDphO3ZhciB1PTA7Zm9yKHQ9MCxyPTA7dDxuO3QrPTQscis9MylpPVB0W2UuY2hhckNvZGVBdCh0KV08PDE4fFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8UHRbZS5jaGFyQ29kZUF0KHQrMildPDw2fFB0W2UuY2hhckNvZGVBdCh0KzMpXSxzW3UrK109aT4+MTYmMjU1LHNbdSsrXT1pPj44JjI1NSxzW3UrK109MjU1Jmk7cmV0dXJuIDI9PT1vPyhpPVB0W2UuY2hhckNvZGVBdCh0KV08PDJ8UHRbZS5jaGFyQ29kZUF0KHQrMSldPj40LHNbdSsrXT0yNTUmaSk6MT09PW8mJihpPVB0W2UuY2hhckNvZGVBdCh0KV08PDEwfFB0W2UuY2hhckNvZGVBdCh0KzEpXTw8NHxQdFtlLmNoYXJDb2RlQXQodCsyKV0+PjIsc1t1KytdPWk+PjgmMjU1LHNbdSsrXT0yNTUmaSksc30oZnVuY3Rpb24oZSl7aWYoKGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oZSkucmVwbGFjZSh3ciwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gU3IoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIG51bGwhPWUmJighIWUuX2lzQnVmZmVyfHxUcihlKXx8ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUucmVhZEZsb2F0TEUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnNsaWNlJiZUcihlLnNsaWNlKDAsMCkpfShlKSl9ZnVuY3Rpb24gVHIoZSl7cmV0dXJuISFlLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgQXI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQnVmZmVyOkt0LElOU1BFQ1RfTUFYX0JZVEVTOjUwLFNsb3dCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLEt0LmFsbG9jKCtlKX0saXNCdWZmZXI6RXIsa01heExlbmd0aDpxdH0pLFJyPUF0KChmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgscj10JTQ7aWYoIXIpcmV0dXJuIGU7dmFyIG49dCxpPTQtcixvPXQraSxzPUt0LmFsbG9jKG8pO2ZvcihzLndyaXRlKGUpO2ktLTspcy53cml0ZSgiPSIsbisrKTtyZXR1cm4gcy50b1N0cmluZygpfX0pKSxDcj1BdCgoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuaXNCdWZmZXIoZSk/aShlLnRvU3RyaW5nKCJiYXNlNjQiKSk6aShLdC5mcm9tKGUsdCkudG9TdHJpbmcoImJhc2U2NCIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiBlPWUudG9TdHJpbmcoKSxSci5kZWZhdWx0KGUpLnJlcGxhY2UoL1wtL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKX1mdW5jdGlvbiBpKGUpe3JldHVybiBlLnJlcGxhY2UoLz0vZywiIikucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89cjtvLmVuY29kZT1yLG8uZGVjb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSJ1dGY4IiksS3QuZnJvbShuKGUpLCJiYXNlNjQiKS50b1N0cmluZyh0KX0sby50b0Jhc2U2ND1uLG8uZnJvbUJhc2U2ND1pLG8udG9CdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIEt0LmZyb20obihlKSwiYmFzZTY0Iil9LHQuZGVmYXVsdD1vfSkpLFByPUF0KChmdW5jdGlvbihlKXtlLmV4cG9ydHM9Q3IuZGVmYXVsdCxlLmV4cG9ydHMuZGVmYXVsdD1lLmV4cG9ydHN9KSksRHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0oQXQoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsdSxjLGgsbCxmLGQscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sdT1yWzJdLGM9clszXSxoPXJbNF0sbD1yWzVdLGY9cls2XSxkPXJbN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1Jm5bdl0pPDwyNHwoMjU1Jm5bdisxXSk8PDE2fCgyNTUmblt2KzJdKTw8OHwyNTUmblt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKyhoJmxefmgmZil8MCkrKGQrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZ1XmEmdSl8MCxkPWYsZj1sLGw9aCxoPWMreXwwLGM9dSx1PWEsYT1zLHM9eSttfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPXUsclszXSs9YyxyWzRdKz1oLHJbNV0rPWwscls2XSs9ZixyWzddKz1kLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1zKHQsZSksaD1uZXcgaShjKSxsPW5ldyBVaW50OEFycmF5KGguZGlnZXN0TGVuZ3RoKSxmPWwubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkobikscD0wO3A8bjtwKyspZj09PWwubGVuZ3RoJiYoYShsLGgscixvKSxmPTApLGRbcF09bFtmKytdO3JldHVybiBoLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxkfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkocyksYz1uZXcgVWludDhBcnJheShzKSxoPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKnM8bjtsKyspe3ZhciBmPWwrMTthWzBdPWY+Pj4yNCYyNTUsYVsxXT1mPj4+MTYmMjU1LGFbMl09Zj4+PjgmMjU1LGFbM109Zj4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXVbZF09Y1tkXTtmb3IoZD0yO2Q8PXI7ZCsrKXtvLnJlc2V0KCksby51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8cztwKyspdVtwXV49Y1twXX1mb3IoZD0wO2Q8cyYmbCpzK2Q8bjtkKyspaFtsKnMrZF09dVtkXX1mb3IobD0wO2w8cztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKWFbbF09MDtyZXR1cm4gby5jbGVhbigpLGh9fShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfSkpKTtmdW5jdGlvbiBPcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIElyKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgVXI9T3IsTXI9SXI7ZnVuY3Rpb24gTHIoZSl7aWYoVXI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKFVyPT09T3J8fCFVcikmJnNldFRpbWVvdXQpcmV0dXJuIFVyPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gVXIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIFVyLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBVci5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBSdC5zZXRUaW1lb3V0JiYoVXI9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIFJ0LmNsZWFyVGltZW91dCYmKE1yPWNsZWFyVGltZW91dCk7dmFyIEhyLGpyPVtdLHhyPSExLHFyPS0xO2Z1bmN0aW9uIEJyKCl7eHImJkhyJiYoeHI9ITEsSHIubGVuZ3RoP2pyPUhyLmNvbmNhdChqcik6cXI9LTEsanIubGVuZ3RoJiZOcigpKX1mdW5jdGlvbiBOcigpe2lmKCF4cil7dmFyIGU9THIoQnIpO3hyPSEwO2Zvcih2YXIgdD1qci5sZW5ndGg7dDspe2ZvcihIcj1qcixqcj1bXTsrK3FyPHQ7KUhyJiZIcltxcl0ucnVuKCk7cXI9LTEsdD1qci5sZW5ndGh9SHI9bnVsbCx4cj0hMSxmdW5jdGlvbihlKXtpZihNcj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChNcj09PUlyfHwhTXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIE1yPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e01yKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gTXIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBNci5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIEtyKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9S3IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciBGcj1SdC5wZXJmb3JtYW5jZXx8e30sWXI9KEZyLm5vd3x8RnIubW96Tm93fHxGci5tc05vd3x8RnIub05vd3x8RnIud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07anIucHVzaChuZXcgS3IoZSx0KSksMSE9PWpyLmxlbmd0aHx8eHJ8fExyKE5yKX0pLFdyPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KEFyKSxKcj1BdCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1Xci5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9V3I6KG4oV3IsdCksdC5CdWZmZXI9aSksbihyLGkpLGkuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxpLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBXci5TbG93QnVmZmVyKGUpfX0pKSx6cj1BdCgoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj1Kci5CdWZmZXIsbj1UdC5jcnlwdG98fFR0Lm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLGkpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBvPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIHM9MDtzPGU7cys9dCluLmdldFJhbmRvbVZhbHVlcyhvLnNsaWNlKHMscyt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhvKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9ZcigoZnVuY3Rpb24oKXtpKG51bGwsbyl9KSk6b306ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKTtjb25zdCBWcj1uZXcgVGV4dEVuY29kZXIsJHI9bmV3IFRleHREZWNvZGVyO3ZhciBHcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfSgpO2NvbnN0IFhyPWU9PntsZXQgdD1lO3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9JHIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIiksbmV3IFVpbnQ4QXJyYXkoR3IuYXRvYih0KS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSl9O2NsYXNzIFpyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfX1jbGFzcyBRciBleHRlbmRzIFpye2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn19Y2xhc3MgZW4gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyB0biBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBybiBleHRlbmRzIFpye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIG5uIGV4dGVuZHMgWnJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3Mgb24gZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn19Y2xhc3Mgc24gZXh0ZW5kcyBRcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQifX12YXIgYW49R3IuY3J5cHRvO2Z1bmN0aW9uIHVuKCl7aWYoIUdyLmlzU2VjdXJlQ29udGV4dCYmIUdyLmNyeXB0by5zdWJ0bGUpdGhyb3cgbmV3IFpyKCJXZWIgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBhdmFpbGFibGUgb25seSBpbiBTZWN1cmUgQ29udGV4dHMuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJlX0NvbnRleHRzIil9Y29uc3QgY249YXN5bmMgZT0+e3ZhciB0LHI7Y29uc3R7YWxnb3JpdGhtOm4sa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IHRuKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc3Vic3RyKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnN1YnN0cigtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyB0bigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKTtsZXQgbz0iandrIixzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCJQQktERjIiPT09bi5uYW1lJiYobz0icmF3IixzPVhyKGUuaykpLHVuKCksYW4uc3VidGxlLmltcG9ydEtleShvLHMsbixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0ocj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1yP3I6aSl9O2Z1bmN0aW9uIGhuKGUpe3JldHVybiEhZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1hc3luYyBmdW5jdGlvbiBsbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/Y24oey4uLmUsYWxnOnQsZXh0OiExfSk6WHIoZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IHRuKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIHVuc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBjbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IHRuKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX1jb25zdCBmbj1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDAhPT1uLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2Zvcihjb25zdCBpIG9mIHIuY3JpdCl7aWYoIXQuaGFzKGkpKXRocm93IG5ldyB0bihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7aX0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbmApO2lmKHZvaWQgMD09PW5baV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBpcyBtaXNzaW5nYCk7aWYodC5nZXQoaSkmJnZvaWQgMD09PXJbaV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfS5iaW5kKHZvaWQgMCxybixuZXcgTWFwKFtbImI2NCIsITBdXSkpLGRuPSgoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkuYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTthc3luYyBmdW5jdGlvbiBwbihlLHQscil7aWYoIWhuKGUpKXRocm93IG5ldyBybigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgcm4oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBybigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgcm4oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhaG4oZS5oZWFkZXIpKXRocm93IG5ldyBybigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBuPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PVhyKGUucHJvdGVjdGVkKTtuPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkobixlLmhlYWRlcikpdGhyb3cgbmV3IHJuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3QgaT17Li4ubiwuLi5lLmhlYWRlcn07bGV0IG89ITA7aWYoZm4obixpKS5oYXMoImI2NCIpJiYobz1uLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBvKSl0aHJvdyBuZXcgcm4oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOnN9PWk7aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhcyl0aHJvdyBuZXcgcm4oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IGE9ciYmZG4oci5hbGdvcml0aG1zKTtpZihhJiYhYS5oYXMocykpdGhyb3cgbmV3IGVuKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYobyl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHJuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgcm4oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KG4sZSkpLCgoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fGUubWF0Y2goL15BXGR7M30oPzpHQ00pS1ckLykpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwic2VjcmV0Ij09PXQudHlwZSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpfWlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBvciBLZXlPYmplY3QgaW5zdGFuY2VzIG11c3QgYmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIik7aWYoInNlY3JldCI9PT10LnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9KShzLHQpO2NvbnN0IHU9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KFZyLmVuY29kZShlLnByb3RlY3RlZHx8IiIpLFZyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1ZyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksYz1YcihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0KGFzeW5jKGUsdCxyLG4pPT57bGV0IGk7aWYodW4oKSx0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzeW1tZXRyaWMga2V5cyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciBITUFDLWJhc2VkIGFsZ29yaXRobXMiKTtpPWF3YWl0IGFuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zdWJzdHIoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFsidmVyaWZ5Il0pfWVsc2UgaT10O3JldHVybigoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7Y29uc3Qgcj1wYXJzZUludChlLnN1YnN0cigtMyksMTApLHtsZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBzeW1tZXRyaWMga2V5cyB0byBiZSAke3J9IGJpdHMgb3IgbGFyZ2VyYCl9aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKSxhbi5zdWJ0bGUudmVyaWZ5KGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkhTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiSE1BQyJ9O2Nhc2UiSFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJITUFDIn07Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDozMn07Y2FzZSJQUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6NDh9O2Nhc2UiUFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjY0fTtjYXNlIlJTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In07Y2FzZSJFUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9O2Nhc2UiRVM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtkZWZhdWx0OnRocm93IG5ldyB0bihgYWxnICR7ZX0gaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUpLGkscixuKX0pKHMsdCxjLHUpKXRocm93IG5ldyBvbjtsZXQgaDtoPW8/WHIoZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Wci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgbD17cGF5bG9hZDpofTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihsLnByb3RlY3RlZEhlYWRlcj1uKSx2b2lkIDAhPT1lLmhlYWRlciYmKGwudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGx9Y29uc3QgZ249L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIHZuPWU9Pntjb25zdCB0PWduLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKDg2NDAwKnIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IHluPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBtbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fHluKGUudHlwKSE9PXluKG4pKSl0aHJvdyBuZXcgUXIoJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoJHIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPXR5cGVvZiBpfHwhaXx8QXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgbm4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKCJzdHJpbmciPT10eXBlb2Ygbz9bb106bykuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBRcigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mKHU9aS5hdWQpP2MuaW5jbHVkZXModSk6Yy5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldCh1KSkpKSkpdGhyb3cgbmV3IFFyKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYztsZXQgaDtzd2l0Y2godHlwZW9mIHIuY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpoPXZuKHIuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpoPXIuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmg9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpsfT1yLGY9KGQ9bHx8bmV3IERhdGUsTWF0aC5mbG9vcihkLmdldFRpbWUoKS8xZTMpKTt2YXIgZDtpZih2b2lkIDAhPT1pLmlhdHx8ci5tYXhUb2tlbkFnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwPT09aS5leHAmJmkuaWF0PmYraCl0aHJvdyBuZXcgUXIoJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgUXIoJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+ZitoKXRocm93IG5ldyBRcignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBRcignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9Zi1oKXRocm93IG5ldyBzbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKHIubWF4VG9rZW5BZ2Upe2NvbnN0IGU9Zi1pLmlhdDtpZihlLWg+KCJudW1iZXIiPT10eXBlb2Ygci5tYXhUb2tlbkFnZT9yLm1heFRva2VuQWdlOnZuKHIubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgc24oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWgpdGhyb3cgbmV3IFFyKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2NsYXNzIHdue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBiYXNlNjRVUkxFbmNvZGUoZSl7cmV0dXJuIFByLmVuY29kZShlKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpLnJlcGxhY2UoLz0vZywiIil9c3RhdGljIGdldENvZGVWZXJpZmllcigpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZSh6cigzMikpfXN0YXRpYyBnZXRDb2RlQ2hhbGxlbmdlKGUpe3JldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShuZXcgZyhEcigobmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSkpKSl9c3RhdGljIGdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKXtyZXR1cm5bIlJTMjU2IiwiUlM1MTIiLCJSUzM4NCIsIlBTMjU2Il19c3RhdGljIGdldEpXS0ZvclRoZUlkVG9rZW4oZSx0KXtjb25zdCByPUpTT04ucGFyc2UoUHIuZGVjb2RlKGUsInV0ZjgiKSk7Zm9yKGNvbnN0IGUgb2YgdClpZihyLmtpZD09PWUua2lkKXJldHVybiBsbih7YWxnOmUuYWxnLGU6ZS5lLGt0eTplLmt0eSxuOmUubn0pO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkNSWVBUT19VVElMLUdURlRJVC1JVjAxIiwiY3J5cHRvLXV0aWxzIiwiZ2V0SldLRm9yVGhlSWRUb2tlbiIsImtpZCBub3QgZm91bmQuIiwiRmFpbGVkIHRvIGZpbmQgdGhlICdraWQnIHNwZWNpZmllZCBpbiB0aGUgaWRfdG9rZW4uICdraWQnIGZvdW5kIGluIHRoZSBoZWFkZXIgOiAiK3Iua2lkKyIsIEV4cGVjdGVkIHZhbHVlczogIit0Lm1hcCgoZT0+ZS5raWQpKS5qb2luKCIsICIpKSl9c3RhdGljIGlzVmFsaWRJZFRva2VuKGUsdCxyLG4saSxvKXtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe2lmKGUgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYoZT0kci5kZWNvZGUoZSkpLCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgcm4oIkNvbXBhY3QgSldTIG11c3QgYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheSIpO2NvbnN0ezA6biwxOmksMjpvLGxlbmd0aDpzfT1lLnNwbGl0KCIuIik7aWYoMyE9PXMpdGhyb3cgbmV3IHJuKCJJbnZhbGlkIENvbXBhY3QgSldTIik7Y29uc3QgYT1hd2FpdCBwbih7cGF5bG9hZDppfHx2b2lkIDAscHJvdGVjdGVkOm58fHZvaWQgMCxzaWduYXR1cmU6b3x8dm9pZCAwfSx0LHIpO3JldHVybntwYXlsb2FkOmEucGF5bG9hZCxwcm90ZWN0ZWRIZWFkZXI6YS5wcm90ZWN0ZWRIZWFkZXJ9fShlLHQscik7cmV0dXJue3BheWxvYWQ6bW4obi5wcm90ZWN0ZWRIZWFkZXIsbi5wYXlsb2FkLHIpLHByb3RlY3RlZEhlYWRlcjpuLnByb3RlY3RlZEhlYWRlcn19KGUsdCx7YWxnb3JpdGhtczp0aGlzLmdldFN1cHBvcnRlZFNpZ25hdHVyZUFsZ29yaXRobXMoKSxhdWRpZW5jZTpyLGNsb2NrVG9sZXJhbmNlOm8saXNzdWVyOm4sc3ViamVjdDppfSkudGhlbigoKCk9PlByb21pc2UucmVzb2x2ZSghMCkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJDUllQVE9fVVRJTC1JVklULUlWMDIiLCJjcnlwdG8tdXRpbHMiLCJpc1ZhbGlkSWRUb2tlbiIsIlZhbGlkYXRpbmcgSUQgdG9rZW4gZmFpbGVkIixlKSkpKX1zdGF0aWMgZGVjb2RlSURUb2tlbihlKXt0cnl7Y29uc3QgdD1Qci5kZWNvZGUoZS5zcGxpdCgiLiIpWzFdLCJ1dGY4Iik7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goZSl7dGhyb3cgbmV3IFN0KCJDUllQVE9fVVRJTC1ESVQtSVYwMSIsImNyeXB0by11dGlscyIsImRlY29kZUlEVG9rZW4iLCJEZWNvZGluZyBJRCB0b2tlbiBmYWlsZWQuIixlKX19fWNsYXNzIGJue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRBdXRoZW50aWNhdGVkVXNlckluZm8oZSl7dmFyIHQscixuLGk7Y29uc3Qgbz13bi5kZWNvZGVJRFRva2VuKGUpLHM9dGhpcy5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQobyksYT1udWxsIT09KHQ9bnVsbD09bz92b2lkIDA6by51c2VybmFtZSkmJnZvaWQgMCE9PXQ/dDoiIix1PW51bGwhPT0ocj1vLmdpdmVuX25hbWUpJiZ2b2lkIDAhPT1yP3I6IiIsYz1udWxsIT09KG49by5mYW1pbHlfbmFtZSkmJnZvaWQgMCE9PW4/bjoiIixoPXUmJmM/YCR7dX0gJHtjfWA6dXx8Y3x8IiIsbD1udWxsIT09KGk9by5wcmVmZXJyZWRfdXNlcm5hbWUpJiZ2b2lkIDAhPT1pP2k6aDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7ZGlzcGxheU5hbWU6bCx0ZW5hbnREb21haW46cyx1c2VybmFtZTphfSx0aGlzLmZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChvKSl9c3RhdGljIGZpbHRlckNsYWltc0Zyb21JRFRva2VuUGF5bG9hZChlKXtjb25zdCB0PU9iamVjdC5hc3NpZ24oe30sZSk7bnVsbD09dHx8ZGVsZXRlIHQuaXNzLG51bGw9PXR8fGRlbGV0ZSB0LmF1ZCxudWxsPT10fHxkZWxldGUgdC5leHAsbnVsbD09dHx8ZGVsZXRlIHQuaWF0LG51bGw9PXR8fGRlbGV0ZSB0LmFjcixudWxsPT10fHxkZWxldGUgdC5hbXIsbnVsbD09dHx8ZGVsZXRlIHQuYXpwLG51bGw9PXR8fGRlbGV0ZSB0LmF1dGhfdGltZSxudWxsPT10fHxkZWxldGUgdC5ub25jZSxudWxsPT10fHxkZWxldGUgdC5jX2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQuYXRfaGFzaCxudWxsPT10fHxkZWxldGUgdC5uYmYsbnVsbD09dHx8ZGVsZXRlIHQuaXNrLG51bGw9PXR8fGRlbGV0ZSB0LnNpZDtjb25zdCByPXt9O3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57Y29uc3Qgbj1lLnNwbGl0KCJfIikubWFwKCgoZSx0KT0+MD09PXQ/ZTpbZVswXS50b1VwcGVyQ2FzZSgpLC4uLmUuc2xpY2UoMSldLmpvaW4oIiIpKSkuam9pbigiIik7cltuXT10fSkpLHJ9c3RhdGljIGdldFRva2VuUmVxdWVzdEhlYWRlcnMoKXtyZXR1cm57QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn19fWJuLmdldFRlbmFudERvbWFpbkZyb21JZFRva2VuUGF5bG9hZD0oZSx0PSJAIik9Pntjb25zdCByPWUuc3ViLnNwbGl0KHQpO3JldHVybiByLmxlbmd0aD4yP3Jbci5sZW5ndGgtMV06IiJ9O2NsYXNzIF9ue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2RhdGFMYXllcj1lLHRoaXMuX2NvbmZpZz0oKT0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldENvbmZpZ0RhdGEoKX0pKSx0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YT0oKT0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCl9KSl9cmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gZS53ZWxsS25vd25FbmRwb2ludD9lLnNlcnZlck9yaWdpbitlLndlbGxLbm93bkVuZHBvaW50OmUuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Rva2VuLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0pKX1yZXNvbHZlRW5kcG9pbnRzKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9e30scj15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gci5vdmVycmlkZVdlbGxFbmRwb2ludENvbmZpZyYmci5lbmRwb2ludHMmJk9iamVjdC5rZXlzKHIuZW5kcG9pbnRzKS5mb3JFYWNoKChlPT57Y29uc3Qgbj1lLnJlcGxhY2UoL1tBLVpdL2csKGU9PmBfJHtlLnRvTG93ZXJDYXNlKCl9YCkpO3Rbbl09KG51bGw9PXI/dm9pZCAwOnIuZW5kcG9pbnRzKT9yLmVuZHBvaW50c1tlXToiIn0pKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSksdCl9KSl9cmVzb2x2ZUZhbGxiYWNrRW5kcG9pbnRzKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT17fSx0PXlpZWxkIHRoaXMuX2NvbmZpZygpO3QuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyh0LmVuZHBvaW50cykuZm9yRWFjaCgocj0+e2NvbnN0IG49ci5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTtlW25dPShudWxsPT10P3ZvaWQgMDp0LmVuZHBvaW50cyk/dC5lbmRwb2ludHNbcl06IiJ9KSk7Y29uc3Qgcj17YXV0aG9yaXphdGlvbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29hdXRoMi9hdXRob3JpemUiLGVuZF9zZXNzaW9uX2VuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2lkYy9sb2dvdXQiLGp3a3NfdXJpOnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL2p3a3MiLGNoZWNrX3Nlc3Npb25faWZyYW1lOnQuc2VydmVyT3JpZ2luKyIvb2lkYy9jaGVja3Nlc3Npb24iLHJldm9jYXRpb25fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvcmV2b2tlIix0b2tlbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29hdXRoMi90b2tlbiJ9O3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZSkscil9KSl9dmFsaWRhdGVJZFRva2VuKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpKS5qd2tzX3VyaSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO3JldHVybiB0JiYwIT09dC50cmltKCkubGVuZ3RoP3d0LmdldCh0LHt3aXRoQ3JlZGVudGlhbHM6bnVsbD09cj92b2lkIDA6ci5zZW5kQ29va2llc0luUmVxdWVzdHN9KS50aGVuKCh0PT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKDIwMCE9PXQuc3RhdHVzKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLVZJVC1OUjAyIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIGp3a3MgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyByZXR1cm5lZCAiK3Quc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKTtjb25zdCByPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5pc3N1ZXIsbj0oeWllbGQgdGhpcy5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKSkuc3BsaXQoIi8ud2VsbC1rbm93biIpWzBdO3JldHVybiByJiZyPT09bj93bi5nZXRKV0tGb3JUaGVJZFRva2VuKGUuc3BsaXQoIi4iKVswXSx0LmRhdGEua2V5cykudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gd24uaXNWYWxpZElkVG9rZW4oZSx0LCh5aWVsZCB0aGlzLl9jb25maWcoKSkuY2xpZW50SUQscix3bi5kZWNvZGVJRFRva2VuKGUpLnN1YiwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsb2NrVG9sZXJhbmNlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItVklULUVTMDMiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSl9KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1WSVQtRVMwNCIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUoITEpfSkpKSkuY2F0Y2goKGU9Pnt2YXIgdCxyLG47cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFdCgiQVVUSF9IRUxQRVItVklULU5SMDUiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJSZXF1ZXN0IHRvIGp3a3MgZW5kcG9pbnQgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSBqd2tzIGZyb20gdGhlIHNlcnZlciBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSk6UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0hFTFBFUi1WSVQtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsIkpXS1MgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIEpXS1MgZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgSldLUyBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSl9KSl9cmVwbGFjZUN1c3RvbUdyYW50VGVtcGxhdGVUYWdzKGUpe3ZhciB0O3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2xldCByPSJvcGVuaWQiO2NvbnN0IG49eWllbGQgdGhpcy5fY29uZmlnKCksaT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtyZXR1cm4gbi5zY29wZSYmbi5zY29wZS5sZW5ndGg+MCYmKG4uc2NvcGUuaW5jbHVkZXMoIm9wZW5pZCIpfHxuLnNjb3BlLnB1c2goIm9wZW5pZCIpLHI9bi5zY29wZS5qb2luKCIgIikpLGUucmVwbGFjZSgie3t0b2tlbn19IixpLmFjY2Vzc190b2tlbikucmVwbGFjZSgie3t1c2VybmFtZX19Iixibi5nZXRBdXRoZW50aWNhdGVkVXNlckluZm8oaS5pZF90b2tlbikudXNlcm5hbWUpLnJlcGxhY2UoInt7c2NvcGV9fSIscikucmVwbGFjZSgie3tjbGllbnRJRH19IixuLmNsaWVudElEKS5yZXBsYWNlKCJ7e2NsaWVudFNlY3JldH19IixudWxsIT09KHQ9bi5jbGllbnRTZWNyZXQpJiZ2b2lkIDAhPT10P3Q6IiIpfSkpfWNsZWFyVXNlclNlc3Npb25EYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVRlbXBvcmFyeURhdGEoKSx5aWVsZCB0aGlzLl9kYXRhTGF5ZXIucmVtb3ZlU2Vzc2lvbkRhdGEoKX0pKX1oYW5kbGVUb2tlblJlc3BvbnNlKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKDIwMCE9PWUuc3RhdHVzKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLUhUUi1OUjAxIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciB0b2tlbiByZXF1ZXN0LiIsIlRoZSByZXF1ZXN0IHNlbnQgdG8gZ2V0IHRoZSB0b2tlbiByZXR1cm5lZCAiK2Uuc3RhdHVzKyIgLCB3aGljaCBpcyBpbnZhbGlkLiIpKTtpZigoeWllbGQgdGhpcy5fY29uZmlnKCkpLnZhbGlkYXRlSURUb2tlbilyZXR1cm4gdGhpcy52YWxpZGF0ZUlkVG9rZW4oZS5kYXRhLmlkX3Rva2VuKS50aGVuKCh0PT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHQpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShlLmRhdGEpO2NvbnN0IHQ9e2FjY2Vzc1Rva2VuOmUuZGF0YS5hY2Nlc3NfdG9rZW4sZXhwaXJlc0luOmUuZGF0YS5leHBpcmVzX2luLGlkVG9rZW46ZS5kYXRhLmlkX3Rva2VuLHJlZnJlc2hUb2tlbjplLmRhdGEucmVmcmVzaF90b2tlbixzY29wZTplLmRhdGEuc2NvcGUsdG9rZW5UeXBlOmUuZGF0YS50b2tlbl90eXBlfTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpfXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfSEVMUEVSLUhUUi1JVjAyIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBpcyBub3QgdmFsaWQuIiwiVGhlIGlkIHRva2VuIHJldHVybmVkIGhhcyBmYWlsZWQgdGhlIHZhbGlkYXRpb24gY2hlY2suIikpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9IRUxQRVItSEFULUVTMDMiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJoYW5kbGVUb2tlblJlc3BvbnNlIix2b2lkIDAsdm9pZCAwLGUpKSkpO3tjb25zdCB0PXthY2Nlc3NUb2tlbjplLmRhdGEuYWNjZXNzX3Rva2VuLGV4cGlyZXNJbjplLmRhdGEuZXhwaXJlc19pbixpZFRva2VuOmUuZGF0YS5pZF90b2tlbixyZWZyZXNoVG9rZW46ZS5kYXRhLnJlZnJlc2hfdG9rZW4sc2NvcGU6ZS5kYXRhLnNjb3BlLHRva2VuVHlwZTplLmRhdGEudG9rZW5fdHlwZX07cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRTZXNzaW9uRGF0YShlLmRhdGEpLFByb21pc2UucmVzb2x2ZSh0KX19KSl9fWNsYXNzIGtue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F1dGhlbnRpY2F0aW9uSGVscGVyPW5ldyBfbihlKSx0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfWdldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGFQYXJhbWV0ZXIoImF1dGhvcml6YXRpb25fZW5kcG9pbnQiKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCF0fHwwPT09dC50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdBVS1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsImdldEF1dGhvcml6YXRpb25VUkwiLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IGZvdW5kLiIsIk5vIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgd2FzIGZvdW5kIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSBmcm9tIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IG49bmV3IFVSTCh0KTtuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX3R5cGUiLCJjb2RlIiksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjbGllbnRfaWQiLHIuY2xpZW50SUQpO2xldCBpPSJvcGVuaWQiO2lmKHIuc2NvcGUmJnIuc2NvcGUubGVuZ3RoPjAmJihyLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8ci5zY29wZS5wdXNoKCJvcGVuaWQiKSxpPXIuc2NvcGUuam9pbigiICIpKSxuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInNjb3BlIixpKSxuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlZGlyZWN0X3VyaSIsci5zaWduSW5SZWRpcmVjdFVSTCksci5yZXNwb25zZU1vZGUmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVzcG9uc2VfbW9kZSIsci5yZXNwb25zZU1vZGUpLHIuZW5hYmxlUEtDRSl7Y29uc3QgZT13bi5nZXRDb2RlVmVyaWZpZXIoKSx0PXduLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIsZSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2Iiksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZSIsdCl9ci5wcm9tcHQmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZCgicHJvbXB0IixyLnByb21wdCk7Y29uc3Qgbz1lO2lmKG8pZm9yKGNvbnN0W2UsdF1vZiBPYmplY3QuZW50cmllcyhvKSkiIiE9ZSYmIiIhPXQmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQudG9TdHJpbmcoKSk7cmV0dXJuIG4udG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFyfHwwPT09ci50cmltKCkubGVuZ3RoKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfQ09SRS1SQVQxLU5GMDEiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTt0JiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KSk7Y29uc3QgaT1bXTtpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7Y29uc3Qgbz1lO3JldHVybiBpLnB1c2goYGNvZGU9JHtvfWApLGkucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSxpLnB1c2goYHJlZGlyZWN0X3VyaT0ke24uc2lnbkluUmVkaXJlY3RVUkx9YCksbi5lbmFibGVQS0NFJiYoaS5wdXNoKGBjb2RlX3ZlcmlmaWVyPSR7eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIpfWApLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKSksd3QucG9zdChyLGkuam9pbigiJiIpLHtoZWFkZXJzOmJuLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSx3aXRoQ3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHN9KS50aGVuKChlPT50aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGUpLnRoZW4oKGU9PmUpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMS1FUzAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsdm9pZCAwLHZvaWQgMCxlKSkpKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfQ09SRS1SQVQxLU5SMDMiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIiwiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYoIXIucmVmcmVzaF90b2tlbilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMi1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3Qgbj1bXTtyZXR1cm4gbi5wdXNoKGBjbGllbnRfaWQ9JHt0LmNsaWVudElEfWApLG4ucHVzaChgcmVmcmVzaF90b2tlbj0ke3IucmVmcmVzaF90b2tlbn1gKSxuLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHQuY2xpZW50U2VjcmV0JiZ0LmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm4ucHVzaChgY2xpZW50X3NlY3JldD0ke3QuY2xpZW50U2VjcmV0fWApLHd0LnBvc3QoZSxuLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMi1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTtjb25zdCByPVtdO3JldHVybiByLnB1c2goYGNsaWVudF9pZD0ke3QuY2xpZW50SUR9YCksci5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWApLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpLHd0LnBvc3QoZSxyLmpvaW4oIiYiKSx7aGVhZGVyczpibi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+MjAwIT09ZS5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkFUMy1OUjAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOih0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLFByb21pc2UucmVzb2x2ZShlKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMy1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBuO2lmKG49ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnQudG9rZW5fZW5kcG9pbnQsIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3QgaT17ZGF0YTooeWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSx0XSk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3ModCk7cmV0dXJuYCR7ZX09JHtyfWB9KSkpKSkpLmpvaW4oIiYiKSxoZWFkZXJzOk9iamVjdC5hc3NpZ24oe30sYm4uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QiLHVybDpuLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c307cmV0dXJuIGUuYXR0YWNoVG9rZW4mJihpLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWB9KSksd3QoaSkudGhlbigodD0+MjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IFN0KCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBTdCgiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUodCkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkNHLU5SMDQiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSx0PWJuLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1lP3ZvaWQgMDplLmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3BlczplLnNjb3BlLHNlc3Npb25TdGF0ZTplLnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57dm9pZCAwIT09dFtlXSYmIiIhPT10W2VdJiZudWxsIT09dFtlXXx8ZGVsZXRlIHRbZV19KSkscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sciksdCkscn0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKS5pZF90b2tlbjtyZXR1cm4gd24uZGVjb2RlSURUb2tlbihlKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZighZSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCk7cmV0dXJuIHd0LmdldCh0KS50aGVuKChlPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiAyMDAhPT1lLnN0YXR1cz9Qcm9taXNlLnJlamVjdChuZXcgU3QoIkFVVEhfQ09SRS1HT1BNLU5SMDEiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IHRvIGdldCB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk6KHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKGUuZGF0YSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCEwKSl9KSkpKS5jYXRjaCgoKCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRmFsbGJhY2tFbmRwb2ludHMoKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoITApfSkpKSl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDplLmF1dGhvcml6YXRpb25fZW5kcG9pbnQsY2hlY2tTZXNzaW9uSWZyYW1lOmUuY2hlY2tfc2Vzc2lvbl9pZnJhbWUsZW5kU2Vzc2lvbkVuZHBvaW50OmUuZW5kX3Nlc3Npb25fZW5kcG9pbnQsaW50cm9zcGVjdGlvbkVuZHBvaW50OmUuaW50cm9zcGVjdGlvbl9lbmRwb2ludCxpc3N1ZXI6ZS5pc3N1ZXIsandrc1VyaTplLmp3a3NfdXJpLHJlZ2lzdHJhdGlvbkVuZHBvaW50OmUucmVnaXN0cmF0aW9uX2VuZHBvaW50LHJldm9jYXRpb25FbmRwb2ludDplLnJldm9jYXRpb25fZW5kcG9pbnQsdG9rZW5FbmRwb2ludDplLnRva2VuX2VuZHBvaW50LHVzZXJpbmZvRW5kcG9pbnQ6ZS51c2VyaW5mb19lbmRwb2ludCx3ZWxsS25vd25FbmRwb2ludDp5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKX19KSl9Z2V0U2lnbk91dFVSTCgpe3ZhciBlLHQscjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPW51bGw9PT0oZT15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludCxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFufHwwPT09bi50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdTT1UtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IG89bnVsbD09PSh0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pZF90b2tlbjtpZighb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgU3QoIkFVVEhfQ09SRS1HU09VLU5GMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwiZ2V0U2lnbk91dFVSTCIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBzPW51bGwhPT0ocj1udWxsPT1pP3ZvaWQgMDppLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PXI/cjpudWxsPT1pP3ZvaWQgMDppLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBTdCgiQVVUSF9DT1JFLUdTT1UtTkYwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7bn0/aWRfdG9rZW5faGludD0ke299JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke3N9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfXNpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0U2lnbk91dFVSTCgpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLGV9KSl9Z2V0QWNjZXNzVG9rZW4oKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKX0pKX1nZXRQS0NFQ29kZSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIil9KSl9c2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiLGUpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSxlLm92ZXJyaWRlV2VsbEVuZHBvaW50Q29uZmlnPyhudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh7fSkpKToobnVsbD09ZT92b2lkIDA6ZS5lbmRwb2ludHMpJiYoeWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCkpfSkpfX1jbGFzcyBTbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fc3RvcmU9dH1zZXREYXRhSW5CdWxrKGUsdCl7dmFyIHI7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9biYmSlNPTi5wYXJzZShuKSxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx0KSxzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1zZXRWYWx1ZShlLHQscil7dmFyIG47cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLG89aSYmSlNPTi5wYXJzZShpKSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3RdOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHQpe3ZhciByO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPW4mJkpTT04ucGFyc2Uobiksbz1PYmplY3QuYXNzaWduKHt9LGkpO2RlbGV0ZSBvW3RdO2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfV9yZXNvbHZlS2V5KGUpe3JldHVybmAke2V9LSR7dGhpcy5faWR9YH1zZXRDb25maWdEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpLGUpfSkpfXNldFNlc3Npb25EYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlKX0pKX1nZXRDb25maWdEYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YSgpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldFNlc3Npb25EYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSxlLHQpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSxlLHQpfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSx0KX0pKX1zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSksZSx0KX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSxlKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpLGUpfSkpfXJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSksZSl9KSl9fWNvbnN0IEVuPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6eXQucXVlcnksc2NvcGU6WyJvcGVuaWQiXSxzZW5kQ29va2llc0luUmVxdWVzdHM6ITAsdmFsaWRhdGVJRFRva2VuOiEwfTtjbGFzcyBUbnsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlKXtUbi5faW5zdGFuY2VJRD9Ubi5faW5zdGFuY2VJRCs9MTpUbi5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgU24oYGluc3RhbmNlXyR7VG4uX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IGtuKHRoaXMuX2RhdGFMYXllcikKLyoqCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICogICAgIGNsaWVudElEOiAiY2xpZW50IElEIiwKICAgICAgICAgKiAgICAgc2VydmVyT3JpZ2luOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLmluaXRpYWxpemUoY29uZmlnKTsKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpbml0aWFsaXplCiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi99aW5pdGlhbGl6ZShlKXt2YXIgdCxyLG47cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sRW4pLGUpLHtzY29wZTpbLi4ubnVsbCE9PSh0PUVuLnNjb3BlKSYmdm9pZCAwIT09dD90OltdLC4uLm51bGwhPT0obj1udWxsPT09KHI9ZS5zY29wZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZmlsdGVyKChlPT57dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09RW4/dm9pZCAwOkVuLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1uP246W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RBY2Nlc3NUb2tlbihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QXhpb3NSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAqIG9uIHlvdXIgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgKiAgIGRhdGE6IHsKICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICogICAgICAgc2NvcGU6ICJ7e3Njb3BlfX0iLAogICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgKiAgIH0sCiAgICAgICAgICogICBpZDogImFjY291bnQtc3dpdGNoIiwKICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICogICBzaWduSW5SZXF1aXJlZDogdHJ1ZQogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF1dGgucmVxdWVzdEN1c3RvbUdyYW50KGNvbmZpZykudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2lzQXV0aGVudGljYXRlZCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuaXNBdXRoZW50aWNhdGVkKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNsYXNzIEFuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8pe3N1cGVyKG51bGwhPW4/bjpudWxsPT1vP3ZvaWQgMDpvLm1lc3NhZ2UpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5jb2RlPWUsdGhpcy5maWxlPXQsdGhpcy5tZXRob2Q9cix0aGlzLmVycm9yPW8sdGhpcy5kZXNjcmlwdGlvbj1pLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgUm57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQ9ZSx0aGlzLl9kYXRhTGF5ZXI9dGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0RGF0YUxheWVyKCl9cmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKTtpZih0LnJlZnJlc2hfdG9rZW4pe2NvbnN0IHI9cGFyc2VJbnQodC5leHBpcmVzX2luKSxuPXNldFRpbWVvdXQoKCgpPT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25DbGllbnQucmVmcmVzaEFjY2Vzc1Rva2VuKCl9KSkpLDFlMyoocjw9MTA/cjpyLTEwKSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QsSlNPTi5zdHJpbmdpZnkobikpfX0pKX1jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSl7Y29uc3QgZT1KU09OLnBhcnNlKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKGt0KSk7Y2xlYXJUaW1lb3V0KGUpfX0pKX19Y29uc3QgQ249ImluaXQiO3ZhciBQbixEbixPbjshZnVuY3Rpb24oZSl7ZS5Mb2NhbFN0b3JhZ2U9ImxvY2FsU3RvcmFnZSIsZS5TZXNzaW9uU3RvcmFnZT0ic2Vzc2lvblN0b3JhZ2UiLGUuV2ViV29ya2VyPSJ3ZWJXb3JrZXIiLGUuQnJvd3Nlck1lbW9yeT0iYnJvd3Nlck1lbW9yeSJ9KFBufHwoUG49e30pKSxmdW5jdGlvbihlKXtlLlNpZ25Jbj0ic2lnbi1pbiIsZS5TaWduT3V0PSJzaWduLW91dCIsZS5Jbml0aWFsaXplPSJpbml0aWFsaXplIixlLkh0dHBSZXF1ZXN0U3RhcnQ9Imh0dHAtcmVxdWVzdC1zdGFydCIsZS5IdHRwUmVxdWVzdEZpbmlzaD0iaHR0cC1yZXF1ZXN0LWZpbmlzaCIsZS5IdHRwUmVxdWVzdEVycm9yPSJodHRwLXJlcXVlc3QtZXJyb3IiLGUuSHR0cFJlcXVlc3RTdWNjZXNzPSJodHRwLXJlcXVlc3Qtc3VjY2VzcyIsZS5SZXZva2VBY2Nlc3NUb2tlbj0icmV2b2tlLWFjY2Vzcy10b2tlbiIsZS5DdXN0b21HcmFudD0iY3VzdG9tLWdyYW50In0oRG58fChEbj17fSkpO2NsYXNzIElue2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpe3JldHVybntibG9iOihudWxsPT1lP3ZvaWQgMDplLmRhdGEpaW5zdGFuY2VvZiBCbG9iP251bGw9PWU/dm9pZCAwOmUuZGF0YTpudWxsLGRhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9ZT9lOiIiKSxzdWNjZXNzOiEwfX1zdGF0aWMgZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS50b0pTT04pJiZkZWxldGUgZS50b0pTT04se2Vycm9yOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMX19fWxldCBVbj1Pbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYXR0YWNoVG9rZW49KCk9PlByb21pc2UucmVzb2x2ZSgpLHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPSgpPT5udWxsLHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5pbml0PXRoaXMuaW5pdC5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjay5iaW5kKHRoaXMpLHRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjaz10aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrLmJpbmQodGhpcyl9c3RhdGljIGdldEluc3RhbmNlKCl7cmV0dXJuIHRoaXMuYXhpb3NJbnN0YW5jZXx8KHRoaXMuYXhpb3NJbnN0YW5jZT13dC5jcmVhdGUoe3dpdGhDcmVkZW50aWFsczohMH0pLHRoaXMuY2xpZW50SW5zdGFuY2V8fCh0aGlzLmNsaWVudEluc3RhbmNlPW5ldyBPbiksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZSgodD0+ZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNsaWVudEluc3RhbmNlLnJlcXVlc3RIYW5kbGVyKHQpfSkpKSksdGhpcy5heGlvc0luc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoKGU9PnRoaXMuY2xpZW50SW5zdGFuY2Uuc3VjY2Vzc0hhbmRsZXIoZSkpLChlPT50aGlzLmNsaWVudEluc3RhbmNlLmVycm9ySGFuZGxlcihlKSkpLHRoaXMuYXhpb3NJbnN0YW5jZS5hbGw9d3QuYWxsLHRoaXMuYXhpb3NJbnN0YW5jZS5zcHJlYWQ9d3Quc3ByZWFkLHRoaXMuYXhpb3NJbnN0YW5jZS5pbml0PXRoaXMuY2xpZW50SW5zdGFuY2UuaW5pdCx0aGlzLmF4aW9zSW5zdGFuY2UuZW5hYmxlSGFuZGxlcj10aGlzLmNsaWVudEluc3RhbmNlLmVuYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZGlzYWJsZUhhbmRsZXIsdGhpcy5heGlvc0luc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcldpdGhUaW1lb3V0LHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2ssdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2spLHRoaXMuYXhpb3NJbnN0YW5jZX1yZXF1ZXN0SGFuZGxlcih0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2lmKHlpZWxkIHRoaXMuYXR0YWNoVG9rZW4odCksbnVsbD09dD92b2lkIDA6dC5zaG91bGRFbmNvZGVUb0Zvcm1EYXRhKXtjb25zdCBlPW51bGw9PXQ/dm9pZCAwOnQuZGF0YSxyPW5ldyBGb3JtRGF0YTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57ci5hcHBlbmQodCxlW3RdKX0pKSx0LmRhdGE9cn1yZXR1cm4gT24uaXNIYW5kbGVyRW5hYmxlZCYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2smJnRoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2sodCksdH0pKX1lcnJvckhhbmRsZXIoZSl7dGhyb3cgT24uaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrJiZ0aGlzLnJlcXVlc3RFcnJvckNhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9c3VjY2Vzc0hhbmRsZXIoZSl7cmV0dXJuIE9uLmlzSGFuZGxlckVuYWJsZWQmJih0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2smJnRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKSx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiZ0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaygpKSxlfWluaXQodD0hMCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe09uLmlzSGFuZGxlckVuYWJsZWQ9dCx0aGlzLmF0dGFjaFRva2VuPXJ9KSl9ZW5hYmxlSGFuZGxlcigpe09uLmlzSGFuZGxlckVuYWJsZWQ9ITB9ZGlzYWJsZUhhbmRsZXIoKXtPbi5pc0hhbmRsZXJFbmFibGVkPSExfWRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQoZT1Pbi5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUKXtPbi5pc0hhbmRsZXJFbmFibGVkPSExLHNldFRpbWVvdXQoKCgpPT57T24uaXNIYW5kbGVyRW5hYmxlZD0hMH0pLGUpfXNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPWV9c2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrPWV9fTtVbi5ERUZBVUxUX0hBTkRMRVJfRElTQUJMRV9USU1FT1VUPTFlMyxVbj1Pbj1mdW5jdGlvbihlLHQscixuKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGgscz1vPDM/dDpudWxsPT09bj9uPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTpuO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpcz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBhPWUubGVuZ3RoLTE7YT49MDthLS0pKGk9ZVthXSkmJihzPShvPDM/aShzKTpvPjM/aSh0LHIscyk6aSh0LHIpKXx8cyk7cmV0dXJuIG8+MyYmcyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzKSxzfShbZT0+e31dLFVuKTtjbGFzcyBNbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2RhdGE9bmV3IE1hcH1zZXREYXRhKHQscil7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLnNldCh0LHIpfSkpfWdldERhdGEodCl7dmFyIHIsbjtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBudWxsIT09KG49bnVsbD09PShyPXRoaXMuX2RhdGEpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldCh0KSkmJnZvaWQgMCE9PW4/bjoie30ifSkpfXJlbW92ZURhdGEodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt0aGlzLl9kYXRhLmRlbGV0ZSh0KX0pKX19Y29uc3QgTG49c2VsZjtsZXQgSG47TG4ub25tZXNzYWdlPSh7ZGF0YTp0LHBvcnRzOnJ9KT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIG4saSxvO2NvbnN0IHM9clswXTtpZih0LnR5cGU9PT1Dbnx8SG4pc3dpdGNoKHQudHlwZSl7Y2FzZSBDbjp0cnl7Y29uc3Qgcj1PYmplY3QuYXNzaWduKHt9LHQuZGF0YSk7SG49eWllbGQodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj1uZXcgTW4sbj1uZXcgVG4ocik7eWllbGQgbi5pbml0aWFsaXplKHQpO2NvbnN0IGk9bmV3IFJuKG4pLG89bi5nZXREYXRhTGF5ZXIoKSxzPVVuLmdldEluc3RhbmNlKCk7cmV0dXJuKG51bGw9PXM/dm9pZCAwOnMuaW5pdCkmJih5aWVsZCBzLmluaXQoITAsKHQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe09iamVjdC5hc3NpZ24oe2F0dGFjaFRva2VuOiEwfSx0KS5hdHRhY2hUb2tlbiYmKHQuaGVhZGVycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdC5oZWFkZXJzKSx7QXV0aG9yaXphdGlvbjpgQmVhcmVyICR7eWllbGQgbi5nZXRBY2Nlc3NUb2tlbigpfWB9KSl9KSkpKSkse2Rpc2FibGVIdHRwSGFuZGxlcjooKT0+e3MuZGlzYWJsZUhhbmRsZXImJnMuZGlzYWJsZUhhbmRsZXIoKX0sZW5hYmxlSHR0cEhhbmRsZXI6KCk9PntzLmVuYWJsZUhhbmRsZXImJnMuZW5hYmxlSGFuZGxlcigpfSxnZXRBY2Nlc3NUb2tlbjooKT0+bi5nZXRBY2Nlc3NUb2tlbigpLGdldEF1dGhvcml6YXRpb25VUkw6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0QXV0aG9yaXphdGlvblVSTCh0KS50aGVuKCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm57YXV0aG9yaXphdGlvblVSTDp0LHBrY2U6eWllbGQgbi5nZXRQS0NFQ29kZSgpfX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpfSkpLGdldEJhc2ljVXNlckluZm86KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldEJhc2ljVXNlckluZm8oKX0pKSxnZXRDb25maWdEYXRhOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gby5nZXRDb25maWdEYXRhKCl9KSksZ2V0RGVjb2RlZElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldERlY29kZWRJRFRva2VuKCl9KSksZ2V0SURUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0SURUb2tlbigpfSkpLGdldE9JRENTZXJ2aWNlRW5kcG9pbnRzOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXRPSURDU2VydmljZUVuZHBvaW50cygpfSkpLGdldFNpZ25PdXRVUkw6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBuLmdldFNpZ25PdXRVUkwoKX0pKSxodHRwUmVxdWVzdDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxyLGk7bGV0IGE9ITE7Y29uc3QgdT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgbiBvZlsuLi5udWxsIT09KHI9bnVsbD09PShlPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1yP3I6W10sbnVsbD09dT92b2lkIDA6dS5zZXJ2ZXJPcmlnaW5dKWlmKG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LnVybCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc3RhcnRzV2l0aChuKSl7YT0hMDticmVha31yZXR1cm4gYT9zLnJlcXVlc3QodCkudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9Pnt2YXIgcjtyZXR1cm4gNDAxPT09KG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMpP24ucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PnMucmVxdWVzdCh0KS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLUhSLUVTMDEiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0IiwiIiwiIixlKSkpKTpQcm9taXNlLnJlamVjdChlKX0pKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLUhSLUlWMDIiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0IiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksaHR0cFJlcXVlc3RBbGw6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixpO2xldCBhPSEwO2NvbnN0IHU9eWllbGQgby5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IG4gb2YgdCl7bGV0IHQ9ITE7Zm9yKGNvbnN0IHMgb2ZbLi4ubnVsbCE9PShyPW51bGw9PT0oZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cj9yOltdLG51bGw9PXU/dm9pZCAwOnUuc2VydmVyT3JpZ2luXSlpZihudWxsPT09KGk9bi51cmwpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN0YXJ0c1dpdGgocykpe3Q9ITA7YnJlYWt9aWYoIXQpe2E9ITE7YnJlYWt9fWNvbnN0IGM9W107cmV0dXJuIGE/KHQuZm9yRWFjaCgoZT0+e2MucHVzaChzLnJlcXVlc3QoZSkpfSkpLChudWxsPT1zP3ZvaWQgMDpzLmFsbCkmJnMuYWxsKGMpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT57dmFyIHQ7cmV0dXJuIDQwMT09PShudWxsPT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc3RhdHVzKT9uLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnRoZW4oKCgpPT5zLmFsbCYmcy5hbGwoYykudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IEFuKCJXT1JLRVJfQ09SRS1IUkEtRVMwMSIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3RBbGwiLCIiLCIiLGUpKSkpOlByb21pc2UucmVqZWN0KGUpfSkpKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLUhSQS1JVjAyIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLGlzQXV0aGVudGljYXRlZDooKT0+bi5pc0F1dGhlbnRpY2F0ZWQoKSxyZWZyZXNoQWNjZXNzVG9rZW46KCk9Pm4ucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxuLmdldEJhc2ljVXNlckluZm8oKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSxyZXF1ZXN0QWNjZXNzVG9rZW46KHQscixzKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtyZXR1cm4gcyYmZS5lbmFibGVQS0NFJiYoeWllbGQgbi5zZXRQS0NFQ29kZShzKSksdD9uLnJlcXVlc3RBY2Nlc3NUb2tlbih0LG51bGwhPXI/cjoiIikudGhlbigoKCk9PihpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxuLmdldEJhc2ljVXNlckluZm8oKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKTpQcm9taXNlLnJlamVjdChuZXcgQW4oIldPUktFUl9DT1JFLVJBVDEtTkYwMSIsIndvcmtlci1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlLiIsIk5vIGF1dGhvcml6YXRpb24gY29kZSB3YXMgZm91bmQuIikpfSkpLHJlcXVlc3RDdXN0b21HcmFudDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgcixzLGE7bGV0IHU9ITAsYz0hMTtjb25zdCBoPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpO2lmKG51bGw9PXQ/dm9pZCAwOnQudG9rZW5FbmRwb2ludCl7dT0hMTtmb3IoY29uc3QgZSBvZlsuLi5udWxsIT09KHM9bnVsbD09PShyPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09cj92b2lkIDA6ci5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1zP3M6W10sbnVsbD09aD92b2lkIDA6aC5zZXJ2ZXJPcmlnaW5dKWlmKG51bGw9PT0oYT10LnRva2VuRW5kcG9pbnQpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnN0YXJ0c1dpdGgoZSkpe2M9ITA7YnJlYWt9fXJldHVybiB1fHxjP24ucmVxdWVzdEN1c3RvbUdyYW50KHQpLnRoZW4oKHI9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0LnJldHVybnNTZXNzaW9uPyhpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxuLmdldEJhc2ljVXNlckluZm8oKSk6cn0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBBbigiV09SS0VSX0NPUkUtUkNHLUlWMDEiLCJ3b3JrZXItY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlJlcXVlc3QgdG8gdGhlIHByb3ZpZGVkIGVuZHBvaW50IGlzIHByb2hpYml0ZWQuIiwiUmVxdWVzdHMgY2FuIG9ubHkgYmUgc2VudCB0byByZXNvdXJjZSBzZXJ2ZXJzIHNwZWNpZmllZCBieSB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AgYXR0cmlidXRlIHdoaWxlIGluaXRpYWxpemluZyB0aGUgU0RLLiBUaGUgc3BlY2lmaWVkIHRva2VuIGVuZHBvaW50IGluIHRoaXMgcmVxdWVzdCBjYW5ub3QgYmUgZm91bmQgYW1vbmcgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIikpfSkpLHJldm9rZUFjY2Vzc1Rva2VuOigpPT5uLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PihpLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLFByb21pc2UucmVzb2x2ZSghMCkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSksc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0RXJyb3JDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhlKX0sc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s6ZT0+eyhudWxsPT1zP3ZvaWQgMDpzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKX0sc2V0U2Vzc2lvblN0YXRlOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIG8uc2V0U2Vzc2lvbkRhdGFQYXJhbWV0ZXIoInNlc3Npb25fc3RhdGUiLHQpfSkpLHNpZ25PdXQ6KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBpLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLHlpZWxkIG4uc2lnbk91dCgpfSkpLHN0YXJ0QXV0b1JlZnJlc2hUb2tlbjooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aS5jbGVhclJlZnJlc2hUb2tlblRpbWVvdXQoKSxpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKX0pKSx1cGRhdGVDb25maWc6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgbi51cGRhdGVDb25maWcodCl9KSl9fSkpKShyKSxIbi5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soQm4pLEhuLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2socW4pLEhuLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhqbiksSG4uc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soeG4pLHMucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpIbi5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOkhuLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNlc3Npb25TdGF0ZSxudWxsPT09KG89bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bz92b2lkIDA6by5wa2NlKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOkhuLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6SG4uaHR0cFJlcXVlc3RBbGwodC5kYXRhKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5zaWduT3V0KCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOkhuLnJlcXVlc3RDdXN0b21HcmFudCh0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOkhuLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6SG4uZW5hYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6SG4uZGlzYWJsZUh0dHBIYW5kbGVyKCkscy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiaXNfYXV0aGVudGljYXRlZCI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIEhuLmdldFNpZ25PdXRVUkwoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzdGFydF9hdXRvX3JlZnJlc2hfdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoSG4uc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uc2V0U2Vzc2lvblN0YXRlKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBIbi51cGRhdGVDb25maWcobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfY29uZmlnX2RhdGEiOnRyeXtzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgSG4uZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShJbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PXN8fHMucG9zdE1lc3NhZ2UoSW4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgQW4oIkNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsImNsaWVudC53b3JrZXIiLCJvbm1lc3NhZ2UiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIixgVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgJHt0LnR5cGV9LCBpcyBpbnZhbGlkLmApKSl9ZWxzZSBzLnBvc3RNZXNzYWdlKEluLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IEFuKCJDTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJjbGllbnQud29ya2VyIix0LnR5cGUsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3Qgam49KCk9PntMbi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0seG49ZT0+e0xuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxxbj0oKT0+e0xuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX0sQm49ZT0+e2NvbnN0IHQ9T2JqZWN0LmFzc2lnbih7fSxlKTtkZWxldGUgdC50b0pTT04sTG4ucG9zdE1lc3NhZ2Uoe2RhdGE6SlNPTi5zdHJpbmdpZnkobnVsbCE9dD90OiIiKSx0eXBlOiJyZXF1ZXN0LWVycm9yIn0pfTtyZXR1cm57fX0oKTsKCg==",null,!1),new Worker(Dn,t)});const qn={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:xn.SessionStorage};class _n{constructor(t){this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=t}_isInitialized(){return n(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let t=0;for(;!this._initialized;)10===t&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise(t=>setTimeout(t,1e3)),t++;return!0}))}_validateMethod(){return n(this,void 0,void 0,(function*(){return(yield this._isInitialized())&&!!(yield this.isAuthenticated())||Promise.reject()}))}
|
|
407
|
+
*/updateConfig(t){return gn(this,void 0,void 0,(function*(){yield this._authenticationCore.updateConfig(t)}))}}var Bi,zi;!function(t){t.LocalStorage="localStorage",t.SessionStorage="sessionStorage",t.WebWorker="webWorker",t.BrowserMemory="browserMemory"}(Bi||(Bi={})),function(t){t.SignIn="sign-in",t.SignOut="sign-out",t.Initialize="initialize",t.HttpRequestStart="http-request-start",t.HttpRequestFinish="http-request-finish",t.HttpRequestError="http-request-error",t.HttpRequestSuccess="http-request-success",t.RevokeAccessToken="revoke-access-token",t.CustomGrant="custom-grant"}(zi||(zi={}));const wi="Y2hlY2tTZXNzaW9u";class Ai extends Error{constructor(t,n,l,i,e,c){super(null!=i?i:null==c?void 0:c.message),this.name=this.constructor.name,this.code=t,this.file=n,this.method=l,this.error=c,this.description=e,Object.setPrototypeOf(this,new.target.prototype)}}class Mi{constructor(t){this._authenticationClient=t,this._dataLayer=this._authenticationClient.getDataLayer()}refreshAccessTokenAutomatically(){return i(this,void 0,void 0,(function*(){const t=yield this._dataLayer.getSessionData();if(t.refresh_token){const n=parseInt(t.expires_in),l=setTimeout(()=>i(this,void 0,void 0,(function*(){yield this._authenticationClient.refreshAccessToken()})),1e3*(n<=10?n:n-10));yield this._dataLayer.setTemporaryDataParameter(vn,JSON.stringify(l))}}))}clearRefreshTokenTimeout(){return i(this,void 0,void 0,(function*(){if(yield this._dataLayer.getTemporaryDataParameter(vn)){const t=JSON.parse(yield this._dataLayer.getTemporaryDataParameter(vn));clearTimeout(t)}}))}}class Pi{constructor(){}static removeAuthorizationCode(){const t=location.href;history.pushState({},document.title,t.replace(/\?code=.*$/,""))}static getPKCE(){var t;return null!==(t=sessionStorage.getItem(Kn))&&void 0!==t?t:""}static setPKCE(t){sessionStorage.setItem(Kn,t)}static setSignOutURL(t){sessionStorage.setItem(Nn,t)}static getSignOutURL(){var t;return null!==(t=sessionStorage.getItem(Nn))&&void 0!==t?t:""}static removePKCE(){sessionStorage.removeItem(Kn)}static canContinueSignIn(t,n){return!(t&&!Pi.hasErrorInURL()&&!Pi.hasAuthSearchParamsInURL()&&!n)}static isInitializedSilentSignIn(){return Pi.isSilentStatePresentInURL()}static wasSignInCalled(){return!(!Pi.hasErrorInURL()&&!Pi.hasAuthSearchParamsInURL()||this.isSilentStatePresentInURL())}static wasSilentSignInCalled(){const t=sessionStorage.getItem("initialized-silent-sign-in"),n=t?JSON.parse(t):null;return Boolean(n)}static isSignOutSuccessful(){if(Fi.isSignOutSuccessful(window.location.href)){const t=window.location.href.split("?")[0];return history.pushState({},document.title,t),!0}return!1}static isSilentStatePresentInURL(){return"sign-in-silently"===new URL(window.location.href).searchParams.get("state")}static hasAuthSearchParamsInURL(t=window.location.search){return/[?&]code=[^&]+/.test(t)}static hasErrorInURL(t=window.location.href){return!!new URL(t).searchParams.get("error")}static canSendPromptNoneRequest(){const t=sessionStorage.getItem("promptNoneRequestSent");return!(t&&JSON.parse(t))}static setPromptNoneRequestSent(t){sessionStorage.setItem("promptNoneRequestSent",JSON.stringify(t))}static waitTillPageRedirect(t){return i(this,void 0,void 0,(function*(){const n=null!=t?t:3e3;yield new Promise(t=>setTimeout(t,1e3*n))}))}}const Qi=(()=>{let t,n,l,e,c,o,d,r,a,u,Z,s;const b=(i,r,a,u,Z,b,h,I)=>{t=i,n=r,l=a,e=u,c=b,o=h,d=Z,s=I,e>-1&&m(),d>-1&&(Z=setInterval(()=>{p()},1e3*d))},m=()=>i(void 0,void 0,void 0,(function*(){var o;if(!n||!t||!c)return;const d="opIFrame";function r(){var e;return i(this,void 0,void 0,(function*(){const i=yield l();if(Boolean(t)&&Boolean(i)){const l=`${t} ${i}`,c=document.getElementById("rpIFrame"),o=(null===(e=null==c?void 0:c.contentDocument)||void 0===e?void 0:e.getElementById(d)).contentWindow;null==o||o.postMessage(l,n)}}))}const u=document.getElementById("rpIFrame");(null===(o=null==u?void 0:u.contentDocument)||void 0===o?void 0:o.getElementById(d)).src=n+"?client_id="+t+"&redirect_uri="+c,yield r(),a=setInterval(r,1e3*e),I()})),h=()=>{clearInterval(a),clearInterval(void 0)},I=()=>{null===window||void 0===window||window.addEventListener("message",(function(t){var l;return i(this,void 0,void 0,(function*(){!n||(null==n?void 0:n.indexOf(t.origin))<0||"set_session_state_from_iframe"===(null===(l=null==t?void 0:t.data)||void 0===l?void 0:l.type)||"unchanged"===t.data||("error"===t.data?window.location.href=yield r():"changed"===t.data&&p())}))}),!1)},p=()=>{var n;const l=document.getElementById("rpIFrame"),i=null===(n=null==l?void 0:l.contentDocument)||void 0===n?void 0:n.getElementById("promptNoneIFrame");if(Pi.canSendPromptNoneRequest()){Pi.setPromptNoneRequestSent(!0);const n=t=>{var l,i,e;"set_session_state_from_iframe"===(null===(l=null==t?void 0:t.data)||void 0===l?void 0:l.type)&&(Z(null!==(e=null===(i=null==t?void 0:t.data)||void 0===i?void 0:i.data)&&void 0!==e?e:""),null===window||void 0===window||window.removeEventListener("message",n))};u!==Bi.BrowserMemory&&u!==Bi.WebWorker||null===window||void 0===window||window.addEventListener("message",n);const l=new URL(o);l.searchParams.set("response_type","code"),l.searchParams.set("client_id",t),l.searchParams.set("scope","openid"),l.searchParams.set("redirect_uri",c),l.searchParams.set("state",wi),l.searchParams.set("prompt","none"),s&&(l.searchParams.set("code_challenge_method","S256"),l.searchParams.set("code_challenge",(()=>{const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz-_";let n="";for(let l=0;l<43;l++){const l=Math.floor(Math.random()*t.length);n+=t.substring(l,l+1)}return n})())),i.src=l.toString()}},G=t=>i(void 0,void 0,void 0,(function*(){var n,l;const i=new URL(window.location.href).searchParams.get("state"),e=new URL(window.location.href).searchParams.get(Jn),c=window.parent.parent;if(null!==i&&(i===wi||"sign-in-silently"===i)){const o=new URL(window.location.href).searchParams.get("code");if(null!==o&&0!==o.length){if("sign-in-silently"===i){const t={data:{code:o,sessionState:null!=e?e:""},type:"check_session_signed_in"};return sessionStorage.setItem("initialized-silent-sign-in","false"),c.postMessage(t,c.origin),Pi.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield Pi.waitTillPageRedirect(),!0}const d=new URL(window.location.href).searchParams.get("session_state");if(u===Bi.LocalStorage||u===Bi.SessionStorage)t&&(yield t(d));else{const t={data:null!=d?d:"",type:"set_session_state_from_iframe"};null===(l=null===(n=null===window||void 0===window?void 0:window.parent)||void 0===n?void 0:n.parent)||void 0===l||l.postMessage(t)}return Pi.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield Pi.waitTillPageRedirect(),!0}if("sign-in-silently"===i){const t={type:"check_session_signed_out"};return window.parent.parent.postMessage(t,c.origin),Pi.setPromptNoneRequestSent(!1),window.location.href="about:blank",yield Pi.waitTillPageRedirect(),!0}return Pi.setPromptNoneRequestSent(!1),c.location.href=yield r(),window.location.href="about:blank",yield Pi.waitTillPageRedirect(),!0}return!1}));return(t,n,l)=>{var i;let e=document.createElement("iframe");return e.setAttribute("id","rpIFrame"),e.style.display="none",e.onload=()=>{var t,n,l,i;e=document.getElementById("rpIFrame");const c=null==e?void 0:e.contentDocument,o=null==c?void 0:c.createElement("iframe");o&&(o.setAttribute("id","opIFrame"),o.style.display="none");const d=null==c?void 0:c.createElement("iframe");d&&(d.setAttribute("id","promptNoneIFrame"),d.style.display="none"),o&&(null===(n=null===(t=null==e?void 0:e.contentDocument)||void 0===t?void 0:t.body)||void 0===n||n.appendChild(o)),d&&(null===(i=null===(l=null==e?void 0:e.contentDocument)||void 0===l?void 0:l.body)||void 0===i||i.appendChild(d))},null===(i=null===document||void 0===document?void 0:document.body)||void 0===i||i.appendChild(e),r=t,u=n,Z=l,{initialize:b,receivePromptNoneResponse:G,reset:h}}})();var ji;let Ei=ji=class{constructor(){this.attachToken=()=>Promise.resolve(),this.requestStartCallback=()=>null,this.requestSuccessCallback=()=>null,this.requestErrorCallback=()=>null,this.requestFinishCallback=()=>null,this.init=this.init.bind(this),this.setHttpRequestErrorCallback=this.setHttpRequestErrorCallback.bind(this),this.setHttpRequestFinishCallback=this.setHttpRequestFinishCallback.bind(this),this.setHttpRequestStartCallback=this.setHttpRequestStartCallback.bind(this),this.setHttpRequestSuccessCallback=this.setHttpRequestSuccessCallback.bind(this)}static getInstance(){return this.axiosInstance||(this.axiosInstance=Xn.create({withCredentials:!0}),this.clientInstance||(this.clientInstance=new ji),this.axiosInstance.interceptors.request.use(t=>i(this,void 0,void 0,(function*(){return yield this.clientInstance.requestHandler(t)}))),this.axiosInstance.interceptors.response.use(t=>this.clientInstance.successHandler(t),t=>this.clientInstance.errorHandler(t)),this.axiosInstance.all=Xn.all,this.axiosInstance.spread=Xn.spread,this.axiosInstance.init=this.clientInstance.init,this.axiosInstance.enableHandler=this.clientInstance.enableHandler,this.axiosInstance.disableHandler=this.clientInstance.disableHandler,this.axiosInstance.disableHandlerWithTimeout=this.clientInstance.disableHandlerWithTimeout,this.axiosInstance.setHttpRequestStartCallback=this.clientInstance.setHttpRequestStartCallback,this.axiosInstance.setHttpRequestSuccessCallback=this.clientInstance.setHttpRequestSuccessCallback,this.axiosInstance.setHttpRequestErrorCallback=this.clientInstance.setHttpRequestErrorCallback,this.axiosInstance.setHttpRequestFinishCallback=this.clientInstance.setHttpRequestFinishCallback),this.axiosInstance}requestHandler(t){return i(this,void 0,void 0,(function*(){if(yield this.attachToken(t),null==t?void 0:t.shouldEncodeToFormData){const n=null==t?void 0:t.data,l=new FormData;Object.keys(n).forEach(t=>{l.append(t,n[t])}),t.data=l}return ji.isHandlerEnabled&&this.requestStartCallback&&"function"==typeof this.requestStartCallback&&this.requestStartCallback(t),t}))}errorHandler(t){throw ji.isHandlerEnabled&&(this.requestErrorCallback&&"function"==typeof this.requestErrorCallback&&this.requestErrorCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}successHandler(t){return ji.isHandlerEnabled&&(this.requestSuccessCallback&&"function"==typeof this.requestSuccessCallback&&this.requestSuccessCallback(t),this.requestFinishCallback&&"function"==typeof this.requestFinishCallback&&this.requestFinishCallback()),t}init(t=!0,n){return i(this,void 0,void 0,(function*(){ji.isHandlerEnabled=t,this.attachToken=n}))}enableHandler(){ji.isHandlerEnabled=!0}disableHandler(){ji.isHandlerEnabled=!1}disableHandlerWithTimeout(t=ji.DEFAULT_HANDLER_DISABLE_TIMEOUT){ji.isHandlerEnabled=!1,setTimeout(()=>{ji.isHandlerEnabled=!0},t)}setHttpRequestStartCallback(t){this.requestStartCallback=t}setHttpRequestSuccessCallback(t){this.requestSuccessCallback=t}setHttpRequestErrorCallback(t){this.requestErrorCallback=t}setHttpRequestFinishCallback(t){this.requestFinishCallback=t}};Ei.DEFAULT_HANDLER_DISABLE_TIMEOUT=1e3,Ei=ji=function(t,n,l,i){var e,c=arguments.length,o=c<3?n:null===i?i=Object.getOwnPropertyDescriptor(n,l):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,n,l,i);else for(var d=t.length-1;d>=0;d--)(e=t[d])&&(o=(c<3?e(o):c>3?e(n,l,o):e(n,l))||o);return c>3&&o&&Object.defineProperty(n,l,o),o}([t=>{}],Ei);class Di{setData(t,n){return i(this,void 0,void 0,(function*(){localStorage.setItem(t,n)}))}getData(t){var n;return i(this,void 0,void 0,(function*(){return null!==(n=localStorage.getItem(t))&&void 0!==n?n:"{}"}))}removeData(t){return i(this,void 0,void 0,(function*(){localStorage.removeItem(t)}))}}class Oi{constructor(){this._data=new Map}setData(t,n){return i(this,void 0,void 0,(function*(){this._data.set(t,n)}))}getData(t){var n,l;return i(this,void 0,void 0,(function*(){return null!==(l=null===(n=this._data)||void 0===n?void 0:n.get(t))&&void 0!==l?l:"{}"}))}removeData(t){return i(this,void 0,void 0,(function*(){this._data.delete(t)}))}}class qi{setData(t,n){return i(this,void 0,void 0,(function*(){sessionStorage.setItem(t,n)}))}getData(t){var n;return i(this,void 0,void 0,(function*(){return null!==(n=sessionStorage.getItem(t))&&void 0!==n?n:"{}"}))}removeData(t){return i(this,void 0,void 0,(function*(){sessionStorage.removeItem(t)}))}}const _i=t=>i(void 0,void 0,void 0,(function*(){var n;const l=(t=>{switch(t){case Bi.LocalStorage:return new Di;case Bi.SessionStorage:return new qi;case Bi.BrowserMemory:return new Oi;default:return new qi}})(t.storage),e=new Fi(l);yield e.initialize(t);const c=new Mi(e),o=e.getDataLayer(),d=Qi(()=>i(void 0,void 0,void 0,(function*(){return e.signOut()})),null!==(n=t.storage)&&void 0!==n?n:Bi.SessionStorage,t=>o.setSessionDataParameter(Jn,null!=t?t:"")),r=Ei.getInstance();let a,u,Z=!0;(null==r?void 0:r.init)&&(yield r.init(!0,t=>i(void 0,void 0,void 0,(function*(){Object.assign({attachToken:!0},t).attachToken&&(t.headers=Object.assign(Object.assign({},t.headers),{Authorization:"Bearer "+(yield e.getAccessToken())}))}))));const s=()=>i(void 0,void 0,void 0,(function*(){var t,n,l,c;const r=yield e.getOIDCServiceEndpoints(),a=yield o.getConfigData();d.initialize(a.clientID,null!==(t=r.checkSessionIframe)&&void 0!==t?t:"",()=>i(void 0,void 0,void 0,(function*(){return(yield e.getBasicUserInfo()).sessionState})),null!==(n=a.checkSessionInterval)&&void 0!==n?n:3,null!==(l=a.sessionRefreshInterval)&&void 0!==l?l:300,a.signInRedirectURL,null!==(c=r.authorizationEndpoint)&&void 0!==c?c:"",a.enablePKCE)})),b=t=>i(void 0,void 0,void 0,(function*(){var n,l,d;let r=!0,a=!1;const u=yield o.getConfigData();if(null==t?void 0:t.tokenEndpoint){r=!1;for(const i of[...null!==(l=null===(n=yield o.getConfigData())||void 0===n?void 0:n.resourceServerURLs)&&void 0!==l?l:[],null==u?void 0:u.serverOrigin])if(null===(d=t.tokenEndpoint)||void 0===d?void 0:d.startsWith(i)){a=!0;break}}return t.shouldReplayAfterRefresh&&o.setTemporaryDataParameter("custom_grant_config",JSON.stringify(t)),r||a?e.requestCustomGrant(t).then(n=>i(void 0,void 0,void 0,(function*(){return t.returnsSession?(c.refreshAccessTokenAutomatically(),e.getBasicUserInfo()):n}))).catch(t=>Promise.reject(t)):Promise.reject(new Ai("MAIN_THREAD_CLIENT-RCG-IV01","main-thread-client","requestCustomGrant","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified token endpoint in this request cannot be found among the `resourceServerURLs`"))})),m=()=>e.refreshAccessToken().then(()=>(I().then(t=>{t&&b(t)}),c.refreshAccessTokenAutomatically(),e.getBasicUserInfo())).catch(t=>Promise.reject(t)),h=(t,n)=>i(void 0,void 0,void 0,(function*(){const l=yield o.getConfigData();if(l.storage===Bi.BrowserMemory&&l.enablePKCE){const t=Pi.getPKCE();yield e.setPKCECode(t)}return e.requestAccessToken(t,n).then(()=>i(void 0,void 0,void 0,(function*(){return l.storage===Bi.BrowserMemory&&Pi.setSignOutURL(yield e.getSignOutURL()),c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),l.enableOIDCSessionManagement&&s(),e.getBasicUserInfo()}))).catch(t=>Promise.reject(t))})),I=()=>i(void 0,void 0,void 0,(function*(){const t=yield o.getTemporaryDataParameter("custom_grant_config");return t?JSON.parse(t):null}));return{disableHttpHandler:()=>((null==r?void 0:r.disableHandler)&&r.disableHandler(),Z=!1,!0),enableHttpHandler:()=>((null==r?void 0:r.enableHandler)&&r.enableHandler(),Z=!0,!0),getAccessToken:()=>i(void 0,void 0,void 0,(function*(){return e.getAccessToken()})),getBasicUserInfo:()=>i(void 0,void 0,void 0,(function*(){return e.getBasicUserInfo()})),getDecodedIDToken:()=>i(void 0,void 0,void 0,(function*(){return e.getDecodedIDToken()})),getHttpClient:()=>r,getIDToken:()=>i(void 0,void 0,void 0,(function*(){return e.getIDToken()})),getOIDCServiceEndpoints:()=>i(void 0,void 0,void 0,(function*(){return e.getOIDCServiceEndpoints()})),httpRequest:t=>i(void 0,void 0,void 0,(function*(){var n,l;let e=!1;const c=yield o.getConfigData();for(const i of[...null!==(n=yield null==c?void 0:c.resourceServerURLs)&&void 0!==n?n:[],null==c?void 0:c.serverOrigin])if(null===(l=null==t?void 0:t.url)||void 0===l?void 0:l.startsWith(i)){e=!0;break}return e?r.request(t).then(t=>Promise.resolve(t)).catch(n=>i(void 0,void 0,void 0,(function*(){var l;if(401===(null===(l=null==n?void 0:n.response)||void 0===l?void 0:l.status)||!(null==n?void 0:n.response)){let i;try{i=yield m()}catch(l){return Z&&("function"==typeof a&&(yield a(n)),"function"==typeof u&&u()),Promise.reject(new Ai("MAIN_THREAD_CLIENT-HR-ES01","main-thread-client","httpRequest","","",l))}if(i)try{const n=yield r.request(t);return Promise.resolve(n)}catch(l){return Z&&("function"==typeof a&&(yield a(l)),"function"==typeof u&&u()),Promise.reject(l)}}return Z&&("function"==typeof a&&(yield a(n)),"function"==typeof u&&u()),Promise.reject(n)}))):Promise.reject(new Ai("MAIN_THREAD_CLIENT-HR-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))})),httpRequestAll:t=>i(void 0,void 0,void 0,(function*(){var n,l,c;let d=!0;const s=yield o.getConfigData();for(const i of t){let t=!1;for(const e of[...null!==(l=null===(n=yield s)||void 0===n?void 0:n.resourceServerURLs)&&void 0!==l?l:[],null==s?void 0:s.serverOrigin])if(null===(c=i.url)||void 0===c?void 0:c.startsWith(e)){t=!0;break}if(!t){d=!1;break}}const b=[];return d?(t.forEach(t=>{b.push(r.request(t))}),(null==r?void 0:r.all)&&r.all(b).then(t=>Promise.resolve(t)).catch(t=>i(void 0,void 0,void 0,(function*(){var n;if(401===(null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.status)||!(null==t?void 0:t.response)){let n;try{n=yield e.refreshAccessToken()}catch(n){return Z&&("function"==typeof a&&(yield a(t)),"function"==typeof u&&u()),Promise.reject(new Ai("MAIN_THREAD_CLIENT-HRA-ES01","main-thread-client","httpRequestAll","","",n))}if(n)return r.all&&r.all(b).then(t=>Promise.resolve(t)).catch(t=>i(void 0,void 0,void 0,(function*(){return Z&&("function"==typeof a&&(yield a(t)),"function"==typeof u&&u()),Promise.reject(t)})))}return Z&&("function"==typeof a&&(yield a(t)),"function"==typeof u&&u()),Promise.reject(t)})))):Promise.reject(new Ai("MAIN_THREAD_CLIENT-HRA-IV02","main-thread-client","httpRequest","Request to the provided endpoint is prohibited.","Requests can only be sent to resource servers specified by the `resourceServerURLs` attribute while initializing the SDK. The specified endpoint in this request cannot be found among the `resourceServerURLs`"))})),isAuthenticated:()=>i(void 0,void 0,void 0,(function*(){return e.isAuthenticated()})),refreshAccessToken:m,requestCustomGrant:b,revokeAccessToken:()=>e.revokeAccessToken().then(()=>(d.reset(),c.clearRefreshTokenTimeout(),Promise.resolve(!0))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{a=t},setHttpRequestFinishCallback:t=>{(null==r?void 0:r.setHttpRequestFinishCallback)&&r.setHttpRequestFinishCallback(t),u=t},setHttpRequestStartCallback:t=>{(null==r?void 0:r.setHttpRequestStartCallback)&&r.setHttpRequestStartCallback(t)},setHttpRequestSuccessCallback:t=>{(null==r?void 0:r.setHttpRequestSuccessCallback)&&r.setHttpRequestSuccessCallback(t)},signIn:(t,n,l)=>i(void 0,void 0,void 0,(function*(){var r,a;const u=yield o.getConfigData();if(yield d.receivePromptNoneResponse(t=>i(void 0,void 0,void 0,(function*(){yield o.setSessionDataParameter(Jn,null!=t?t:"")}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});if(yield e.isAuthenticated())return c.clearRefreshTokenTimeout(),c.refreshAccessTokenAutomatically(),u.enableOIDCSessionManagement&&s(),Promise.resolve(yield e.getBasicUserInfo());let Z,b;if((null==u?void 0:u.responseMode)===Gn.formPost&&n?(Z=n,b=null!=l?l:""):(Z=null!==(r=new URL(window.location.href).searchParams.get(Yn))&&void 0!==r?r:"",b=null!==(a=new URL(window.location.href).searchParams.get(Jn))&&void 0!==a?a:"",Pi.removeAuthorizationCode()),Z)return h(Z,b);const m=new URL(window.location.href).searchParams.get("error"),I=new URL(window.location.href).searchParams.get("error_description");if(m){const t=new URL(window.location.href);return t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),Promise.reject(new Ai("MAIN_THREAD_CLIENT-SI-BE","main-thread-client","signIn",m,null!=I?I:""))}return e.getAuthorizationURL(t).then(t=>i(void 0,void 0,void 0,(function*(){return u.storage===Bi.BrowserMemory&&u.enablePKCE&&Pi.setPKCE(yield e.getPKCECode()),location.href=t,yield Pi.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})})))})),signOut:()=>i(void 0,void 0,void 0,(function*(){return(yield e.isAuthenticated())?location.href=yield e.signOut():location.href=Pi.getSignOutURL(),c.clearRefreshTokenTimeout(),yield Pi.waitTillPageRedirect(),!0})),trySignInSilently:()=>i(void 0,void 0,void 0,(function*(){var t;const n=yield o.getConfigData();if(Pi.isInitializedSilentSignIn())return yield d.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const l=document.getElementById("rpIFrame"),c=null===(t=null==l?void 0:l.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame");try{const t=yield e.getAuthorizationURL({prompt:"none",state:"sign-in-silently"}),l=new URL(t);l.searchParams.set("response_mode","query");const i=l.toString();n.storage===Bi.BrowserMemory&&n.enablePKCE&&Pi.setPKCE(yield e.getPKCECode()),c.src=i}catch(t){return Promise.reject(t)}return new Promise((t,n)=>{const l=setTimeout(()=>{t(!1)},1e4),e=c=>i(void 0,void 0,void 0,(function*(){var i,o;const d=c.data;"check_session_signed_out"==(null==d?void 0:d.type)&&(window.removeEventListener("message",e),clearTimeout(l),t(!1)),"check_session_signed_in"==(null==d?void 0:d.type)&&(null===(i=null==d?void 0:d.data)||void 0===i?void 0:i.code)&&h(d.data.code,null===(o=null==d?void 0:d.data)||void 0===o?void 0:o.sessionState).then(n=>{window.removeEventListener("message",e),t(n)}).catch(t=>{window.removeEventListener("message",e),n(t)}).finally(()=>{clearTimeout(l)})}));window.addEventListener("message",e)})})),updateConfig:t=>i(void 0,void 0,void 0,(function*(){const n=yield o.getConfigData(),l=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),i=Object.assign(Object.assign({},n),t);yield e.updateConfig(i),i.enableOIDCSessionManagement&&l&&(d.reset(),s())}))}}));var $i,te=("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHI9W10sbj1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89ITE7ZnVuY3Rpb24gcygpe289ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsaT1lLmxlbmd0aDt0PGk7Kyt0KXJbdF09ZVt0XSxuW2UuY2hhckNvZGVBdCh0KV09dDtuWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIGksbyxzPVtdLGE9dDthPG47YSs9MylpPShlW2FdPDwxNikrKGVbYSsxXTw8OCkrZVthKzJdLHMucHVzaChyWyhvPWkpPj4xOCY2M10rcltvPj4xMiY2M10rcltvPj42JjYzXStyWzYzJm9dKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB1KGUpe3ZhciB0O298fHMoKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uJTMsdT0iIixjPVtdLGg9MTYzODMsbD0wLGY9bi1pO2w8ZjtsKz1oKWMucHVzaChhKGUsbCxsK2g+Zj9mOmwraCkpO3JldHVybiAxPT09aT8odD1lW24tMV0sdSs9clt0Pj4yXSx1Kz1yW3Q8PDQmNjNdLHUrPSI9PSIpOjI9PT1pJiYodD0oZVtuLTJdPDw4KStlW24tMV0sdSs9clt0Pj4xMF0sdSs9clt0Pj40JjYzXSx1Kz1yW3Q8PDImNjNdLHUrPSI9IiksYy5wdXNoKHUpLGMuam9pbigiIil9ZnVuY3Rpb24gYyhlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBoKGUsdCxyLG4saSxvKXt2YXIgcyxhLHUsYz04Km8taS0xLGg9KDE8PGMpLTEsbD1oPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpvLTEscD1uPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9aCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSx1Kj0yKSwodCs9cytsPj0xP2YvdTpmKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKHMrKyx1Lz0yKSxzK2w+PWg/KGE9MCxzPWgpOnMrbD49MT8oYT0odCp1LTEpKk1hdGgucG93KDIsaSkscys9bCk6KGE9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqZ312YXIgbD17fS50b1N0cmluZyxmPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWwuY2FsbChlKX07ZnVuY3Rpb24gZCgpe3JldHVybiBnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHAoZSx0KXtpZihkKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBnKGUsdCxyKXtpZighKGcuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBtKHRoaXMsZSl9cmV0dXJuIHYodGhpcyxlLHQscil9ZnVuY3Rpb24gdihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO2cuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189Zy5wcm90b3R5cGU6ZT13KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIWcuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGsodCxyKSxpPShlPXAoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoXyh0KSl7dmFyIHI9MHxiKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXAoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP3AoZSwwKTp3KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmYodC5kYXRhKSlyZXR1cm4gdyhlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIHkoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBtKGUsdCl7aWYoeSh0KSxlPXAoZSx0PDA/MDowfGIodCkpLCFnLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGIodC5sZW5ndGgpO2U9cChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtpZihlPj1kKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gayhlLHQpe2lmKF8oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuICQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuICQoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBqKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEIodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gQShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIEUoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWcuZnJvbSh0LG4pKSxfKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6VChlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGcuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOlQoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFQoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gUihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHQscixuKXtyZXR1cm4gWCgkKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFAoZSx0LHIsbil7cmV0dXJuIFgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBEKGUsdCxyLG4pe3JldHVybiBQKGUsdCxyLG4pfWZ1bmN0aW9uIE8oZSx0LHIsbil7cmV0dXJuIFgoRyh0KSxlLHIsbil9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gWChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFUoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3UoZSk6dShlLnNsaWNlKHQscikpfWZ1bmN0aW9uIE0oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsdSxjPWVbaV0saD1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKHU9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9dSk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihoPXUpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYodT0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZ1PDExMTQxMTImJihoPXUpfW51bGw9PT1oPyhoPTY1NTMzLGw9MSk6aD42NTUzNSYmKGgtPTY1NTM2LG4ucHVzaChoPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG4ucHVzaChoKSxpKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1MKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1MKSk7cmV0dXJuIHJ9KG4pfWcuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT10LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHQuVFlQRURfQVJSQVlfU1VQUE9SVCxnLnBvb2xTaXplPTgxOTIsZy5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189Zy5wcm90b3R5cGUsZX0sZy5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdihudWxsLGUsdCxyKX0sZy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGcuX19wcm90b19fPVVpbnQ4QXJyYXkpLGcuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4geSh0KSx0PD0wP3AoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9wKGUsdCkuZmlsbChyLG4pOnAoZSx0KS5maWxsKHIpOnAoZSx0KX0obnVsbCxlLHQscil9LGcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFooZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmWihlLnNsaWNlKDAsMCkpfShlKSl9LGcuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFfKGUpfHwhXyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sZy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxnLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGcuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1nLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFfKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sZy5ieXRlTGVuZ3RoPWssZy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilBKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpQSh0aGlzLHQsdCszKSxBKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClBKHRoaXMsdCx0KzcpLEEodGhpcyx0KzEsdCs2KSxBKHRoaXMsdCsyLHQrNSksQSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP00odGhpcywwLGUpOlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIV8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWcuY29tcGFyZSh0aGlzLGUpfSxnLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighXyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixpKSxjPWUuc2xpY2UodCxyKSxoPTA7aDxhOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBFKHRoaXMsZSx0LHIsITApfSxnLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIEUodGhpcyxlLHQsciwhMSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBSKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRCh0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBJKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LGcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEw9NDA5NjtmdW5jdGlvbiBIKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVYoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQihlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIHEoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpLG8pe2lmKCFfKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBLKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFkoZSx0LHIsbixpLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsNCksaChlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiB6KGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsOCksaChlLHQscixuLDUyLDgpLHIrOH1nLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgZyhpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0sZy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fHEoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LGcucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxxKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxnLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8cShlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHEoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxxKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sZy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8cShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxnLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8cShlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxnLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fHEoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sZy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8cShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8cShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8cShlLDQsdGhpcy5sZW5ndGgpLGModGhpcyxlLCEwLDIzLDQpfSxnLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsNCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsMjMsNCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITAsNTIsOCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsNTIsOCl9LGcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8Tih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sZy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxOKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LGcucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDI1NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsMiw2NTUzNSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwyLDY1NTM1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOksodGhpcyxlLHQsITEpLHQrMn0sZy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Rih0aGlzLGUsdCwhMCksdCs0fSxnLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzR9LGcucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDEyNywtMTI4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpLKHRoaXMsZSx0LCExKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkYodGhpcyxlLHQsITApLHQrNH0sZy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCs0fSxnLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCEwLHIpfSxnLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCExLHIpfSxnLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4geih0aGlzLGUsdCwhMCxyKX0sZy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHoodGhpcyxlLHQsITEscil9LGcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IWcuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LGcucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9XyhlKT9lOiQobmV3IGcoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciBKPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uICQoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsYSx1LGMsaDtvfHxzKCk7dmFyIGw9ZS5sZW5ndGg7aWYobCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7Yz0iPSI9PT1lW2wtMl0/MjoiPSI9PT1lW2wtMV0/MTowLGg9bmV3IGkoMypsLzQtYyksYT1jPjA/bC00Omw7dmFyIGY9MDtmb3IodD0wLHI9MDt0PGE7dCs9NCxyKz0zKXU9bltlLmNoYXJDb2RlQXQodCldPDwxOHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bltlLmNoYXJDb2RlQXQodCszKV0saFtmKytdPXU+PjE2JjI1NSxoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1O3JldHVybiAyPT09Yz8odT1uW2UuY2hhckNvZGVBdCh0KV08PDJ8bltlLmNoYXJDb2RlQXQodCsxKV0+PjQsaFtmKytdPTI1NSZ1KToxPT09YyYmKHU9bltlLmNoYXJDb2RlQXQodCldPDwxMHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxuW2UuY2hhckNvZGVBdCh0KzIpXT4+MixoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1KSxofShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKEosIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIFgoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LGVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWVlLmNhbGwoZSl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gaWUoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1lZS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIG9lKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1lZS5jYWxsKGUpfWZ1bmN0aW9uIHNlKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksdGUoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGFlPXtpc0FycmF5OnRlLGlzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWVlLmNhbGwoZSl9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXJlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXJlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpuZSxpc1BsYWluT2JqZWN0OmllLGlzVW5kZWZpbmVkOnJlLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1lZS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09ZWUuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PWVlLmNhbGwoZSl9LGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKGUpJiZvZShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcyYmZSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpzZSxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe2llKHRbbl0pJiZpZShyKT90W25dPWUodFtuXSxyKTppZShyKT90W25dPWUoe30scik6dGUocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXNlKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gc2UodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1EodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGFlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107YWUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihhZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sYWUuZm9yRWFjaChlLChmdW5jdGlvbihlKXthZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6YWUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2godWUodCkrIj0iK3VlKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gaGUoKXt0aGlzLmhhbmRsZXJzPVtdfWhlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGhlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0saGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7YWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGxlPWhlO2Z1bmN0aW9uIGZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZGUoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBwZT1mZSxnZT1kZTtmdW5jdGlvbiB2ZShlKXtpZihwZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigocGU9PT1mZXx8IXBlKSYmc2V0VGltZW91dClyZXR1cm4gcGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBwZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gcGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHBlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0VGltZW91dCYmKHBlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsZWFyVGltZW91dCYmKGdlPWNsZWFyVGltZW91dCk7dmFyIHllLG1lPVtdLHdlPSExLGJlPS0xO2Z1bmN0aW9uIF9lKCl7d2UmJnllJiYod2U9ITEseWUubGVuZ3RoP21lPXllLmNvbmNhdChtZSk6YmU9LTEsbWUubGVuZ3RoJiZrZSgpKX1mdW5jdGlvbiBrZSgpe2lmKCF3ZSl7dmFyIGU9dmUoX2UpO3dlPSEwO2Zvcih2YXIgdD1tZS5sZW5ndGg7dDspe2Zvcih5ZT1tZSxtZT1bXTsrK2JlPHQ7KXllJiZ5ZVtiZV0ucnVuKCk7YmU9LTEsdD1tZS5sZW5ndGh9eWU9bnVsbCx3ZT0hMSxmdW5jdGlvbihlKXtpZihnZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChnZT09PWRlfHwhZ2UpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGdlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2dlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gZ2UuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBnZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFNlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9U2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEFlKCl7fXZhciBFZT1BZSxUZT1BZSxSZT1BZSxDZT1BZSxQZT1BZSxEZT1BZSxPZT1BZTt2YXIgSWU9dC5wZXJmb3JtYW5jZXx8e30sVWU9SWUubm93fHxJZS5tb3pOb3d8fEllLm1zTm93fHxJZS5vTm93fHxJZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBNZT1uZXcgRGF0ZTt2YXIgTGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07bWUucHVzaChuZXcgU2UoZSx0KSksMSE9PW1lLmxlbmd0aHx8d2V8fHZlKGtlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpFZSxhZGRMaXN0ZW5lcjpUZSxvbmNlOlJlLG9mZjpDZSxyZW1vdmVMaXN0ZW5lcjpQZSxyZW1vdmVBbGxMaXN0ZW5lcnM6RGUsZW1pdDpPZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpVZS5jYWxsKEllKSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1NZSkvMWUzfX0sSGU9TGUseGU9ZnVuY3Rpb24oZSx0KXthZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LGplPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxCZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gamUobyx0LHIsbixpKX0scWU9YWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLGFlLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksYWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxOZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLEtlPWFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPWFlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxpPWUuaGVhZGVycyxvPWUucmVzcG9uc2VUeXBlO2FlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYT1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShhKyI6Iit1KX12YXIgYyxoLGw9KGM9ZS5iYXNlVVJMLGg9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChoKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGgpOmgpO2Z1bmN0aW9uIGYoKXtpZihzKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHM/ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmTmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0ocy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOm8mJiJ0ZXh0IiE9PW8mJiJqc29uIiE9PW8/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dCxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6c307IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QoQmUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLGkpLHM9bnVsbH19aWYocy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksY2UobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gcz9zLm9ubG9hZGVuZD1mOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cyYmND09PXMucmVhZHlTdGF0ZSYmKDAhPT1zLnN0YXR1c3x8cy5yZXNwb25zZVVSTCYmMD09PXMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKEJlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IoQmUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIoQmUodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHMpKSxzPW51bGx9LGFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBkPShlLndpdGhDcmVkZW50aWFsc3x8S2UobCkpJiZlLnhzcmZDb29raWVOYW1lP3FlLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2QmJihpW2UueHNyZkhlYWRlck5hbWVdPWQpfSJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmFlLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTpzLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChzLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYocy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmcy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7cyYmKHMuYWJvcnQoKSxyKGUpLHM9bnVsbCl9KSksbnx8KG49bnVsbCkscy5zZW5kKG4pfSkpfSxZZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFdlKGUsdCl7IWFlLmlzVW5kZWZpbmVkKGUpJiZhZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgemUsSmU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PUhlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSGUpKSYmKHplPUZlKSx6ZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4geGUodCwiQWNjZXB0IikseGUodCwiQ29udGVudC1UeXBlIiksYWUuaXNGb3JtRGF0YShlKXx8YWUuaXNBcnJheUJ1ZmZlcihlKXx8YWUuaXNCdWZmZXIoZSl8fGFlLmlzU3RyZWFtKGUpfHxhZS5pc0ZpbGUoZSl8fGFlLmlzQmxvYihlKT9lOmFlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOmFlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6YWUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKGFlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksYWUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZhZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgamUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07SmUuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXtKZS5oZWFkZXJzW2VdPXt9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7SmUuaGVhZGVyc1tlXT1hZS5tZXJnZShZZSl9KSk7dmFyIFZlPUplLCRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxWZTtyZXR1cm4gYWUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sR2U9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIFhlKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBaZT1mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPSRlLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPWFlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksYWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxWZS5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gWGUoZSksdC5kYXRhPSRlLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEdlKHQpfHwoWGUoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT0kZS5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxRZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxpPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLG89WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0scz1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhZS5pc1BsYWluT2JqZWN0KGUpJiZhZS5pc1BsYWluT2JqZWN0KHQpP2FlLm1lcmdlKGUsdCk6YWUuaXNQbGFpbk9iamVjdCh0KT9hZS5tZXJnZSh7fSx0KTphZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEoZVtuXSx0W25dKX1hZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe2FlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1hKHZvaWQgMCx0W2VdKSl9KSksYWUuZm9yRWFjaChpLHUpLGFlLmZvckVhY2gobywoZnVuY3Rpb24obil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEodm9pZCAwLHRbbl0pfSkpLGFlLmZvckVhY2gocywoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09YShlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09YSh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KGkpLmNvbmNhdChvKS5jb25jYXQocyksaD1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIGFlLmZvckVhY2goaCx1KSxyfSxldD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV19LHR0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXt0dFtlXT1mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHI9PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIHJ0PXt9LG50PWV0LnZlcnNpb24uc3BsaXQoIi4iKTtmdW5jdGlvbiBpdChlLHQpe2Zvcih2YXIgcj10P3Quc3BsaXQoIi4iKTpudCxuPWUuc3BsaXQoIi4iKSxpPTA7aTwzO2krKyl7aWYocltpXT5uW2ldKXJldHVybiEwO2lmKHJbaV08bltpXSlyZXR1cm4hMX1yZXR1cm4hMX10dC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQmJml0KHQpO2Z1bmN0aW9uIGkoZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2V0LnZlcnNpb24rIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhyPyIuICIrcjoiIil9cmV0dXJuIGZ1bmN0aW9uKHIsbyxzKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKGkobywiIGhhcyBiZWVuIHJlbW92ZWQgaW4gIit0KSk7cmV0dXJuIG4mJiFydFtvXSYmKHJ0W29dPSEwLGNvbnNvbGUud2FybihpKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWV8fGUocixvLHMpfX07dmFyIG90PXtpc09sZGVyVmVyc2lvbjppdCxhc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGUsdCxyKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxpPW4ubGVuZ3RoO2ktLSA+MDspe3ZhciBvPW5baV0scz10W29dO2lmKHMpe3ZhciBhPWVbb10sdT12b2lkIDA9PT1hfHxzKGEsbyxlKTtpZighMCE9PXUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uICIrbysiIG11c3QgYmUgIit1KX1lbHNlIGlmKCEwIT09cil0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19LHZhbGlkYXRvcnM6dHR9LHN0PW90LnZhbGlkYXRvcnM7ZnVuY3Rpb24gYXQoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBsZSxyZXNwb25zZTpuZXcgbGV9fWF0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUpeyJzdHJpbmciPT10eXBlb2YgZT8oZT1hcmd1bWVudHNbMV18fHt9KS51cmw9YXJndW1lbnRzWzBdOmU9ZXx8e30sKGU9UWUodGhpcy5kZWZhdWx0cyxlKSkubWV0aG9kP2UubWV0aG9kPWUubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/ZS5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTplLm1ldGhvZD0iZ2V0Ijt2YXIgdD1lLnRyYW5zaXRpb25hbDt2b2lkIDAhPT10JiZvdC5hc3NlcnRPcHRpb25zKHQse3NpbGVudEpTT05QYXJzaW5nOnN0LnRyYW5zaXRpb25hbChzdC5ib29sZWFuLCIxLjAuMCIpLGZvcmNlZEpTT05QYXJzaW5nOnN0LnRyYW5zaXRpb25hbChzdC5ib29sZWFuLCIxLjAuMCIpLGNsYXJpZnlUaW1lb3V0RXJyb3I6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIil9LCExKTt2YXIgcj1bXSxuPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImZ1bmN0aW9uIj09dHlwZW9mIHQucnVuV2hlbiYmITE9PT10LnJ1bldoZW4oZSl8fChuPW4mJnQuc3luY2hyb25vdXMsci51bnNoaWZ0KHQuZnVsZmlsbGVkLHQucmVqZWN0ZWQpKX0pKTt2YXIgaSxvPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe28ucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhbil7dmFyIHM9W1plLHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KHMscikscz1zLmNvbmNhdChvKSxpPVByb21pc2UucmVzb2x2ZShlKTtzLmxlbmd0aDspaT1pLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIGl9Zm9yKHZhciBhPWU7ci5sZW5ndGg7KXt2YXIgdT1yLnNoaWZ0KCksYz1yLnNoaWZ0KCk7dHJ5e2E9dShhKX1jYXRjaChlKXtjKGUpO2JyZWFrfX10cnl7aT1aZShhKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtvLmxlbmd0aDspaT1pLnRoZW4oby5zaGlmdCgpLG8uc2hpZnQoKSk7cmV0dXJuIGl9LGF0LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9UWUodGhpcy5kZWZhdWx0cyxlKSxjZShlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7YXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChRZShyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7YXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFFlKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOnJ9KSl9fSkpO3ZhciB1dD1hdDtmdW5jdGlvbiBjdChlKXt0aGlzLm1lc3NhZ2U9ZX1jdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sY3QucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIGh0PWN0O2Z1bmN0aW9uIGx0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgcj10aGlzO2UoKGZ1bmN0aW9uKGUpe3IucmVhc29ufHwoci5yZWFzb249bmV3IGh0KGUpLHQoci5yZWFzb24pKX0pKX1sdC5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxsdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBsdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIGZ0PWx0O2Z1bmN0aW9uIGR0KGUpe3ZhciB0PW5ldyB1dChlKSxyPVEodXQucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIGFlLmV4dGVuZChyLHV0LnByb3RvdHlwZSx0KSxhZS5leHRlbmQocix0KSxyfXZhciBwdD1kdChWZSk7cHQuQXhpb3M9dXQscHQuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBkdChRZShwdC5kZWZhdWx0cyxlKSl9LHB0LkNhbmNlbD1odCxwdC5DYW5jZWxUb2tlbj1mdCxwdC5pc0NhbmNlbD1HZSxwdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxwdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxwdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiYhMD09PWUuaXNBeGlvc0Vycm9yfTt2YXIgZ3Q9cHQsdnQ9cHQ7Z3QuZGVmYXVsdD12dDt2YXIgeXQsbXQsd3Q9Z3Q7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gYnQoZSx0LHIsbil7cmV0dXJuIG5ldyhyfHwocj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gcyhlKXt0cnl7dShuLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGEoZSl7dHJ5e3Uobi50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gdShlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiByP3Q6bmV3IHIoKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4ocyxhKX11KChuPW4uYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9KG10PXl0fHwoeXQ9e30pKS5mb3JtUG9zdD0iZm9ybV9wb3N0IixtdC5xdWVyeT0icXVlcnkiO3ZhciBfdDshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KF90fHwoX3Q9e30pKTtjb25zdCBrdD0icmVmcmVzaF90b2tlbl90aW1lciI7dmFyIFN0OyFmdW5jdGlvbihlKXtlLlJlYWN0TmF0aXZlPSJSRUFDVF9OQVRJVkUiLGUuQnJvd3Nlcj0iQlJPV1NFUiIsZS5Ob2RlPSJOT0RFIn0oU3R8fChTdD17fSkpO2NsYXNzIEF0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8pe3N1cGVyKG51bGwhPW4/bjpudWxsPT1vP3ZvaWQgMDpvLm1lc3NhZ2UpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5jb2RlPWUsdGhpcy5maWxlPXQsdGhpcy5tZXRob2Q9cix0aGlzLmRlc2NyaXB0aW9uPWksdGhpcy5lcnJvcj1vLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgRXQgZXh0ZW5kcyBBdHtjb25zdHJ1Y3RvcihlLHQscixuLGksbyxzLGEsdSl7c3VwZXIoZSx0LHIsbixpKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1lLHRoaXMuZmlsZT10LHRoaXMubWV0aG9kPXIsdGhpcy5kZXNjcmlwdGlvbj1pLHRoaXMubmV0d29ya0Vycm9yQ29kZT1vLHRoaXMubmV0d29ya0Vycm9yTWVzc2FnZT1zLHRoaXMuc3RhdHVzPWEsdGhpcy5uZXR3b3JrRXJyb3JEYXRhPXV9fXZhciBUdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwIT09dD90OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFJ0KGUsdCxyKXtyZXR1cm4gZShyPXtwYXRoOnQsZXhwb3J0czp7fSxyZXF1aXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJEeW5hbWljIHJlcXVpcmVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBAcm9sbHVwL3BsdWdpbi1jb21tb25qcyIpfShudWxsPT10JiZyLnBhdGgpfX0sci5leHBvcnRzKSxyLmV4cG9ydHN9dmFyIEN0PXZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sUHQ9W10sRHQ9W10sT3Q9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksSXQ9ITE7ZnVuY3Rpb24gVXQoKXtJdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpUHRbdF09ZVt0XSxEdFtlLmNoYXJDb2RlQXQodCldPXQ7RHRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLER0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBNdChlLHQscil7Zm9yKHZhciBuLGksbz1bXSxzPXQ7czxyO3MrPTMpbj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goUHRbKGk9bik+PjE4JjYzXStQdFtpPj4xMiY2M10rUHRbaT4+NiY2M10rUHRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIEx0KGUpe3ZhciB0O0l0fHxVdCgpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXIlMyxpPSIiLG89W10scz0xNjM4MyxhPTAsdT1yLW47YTx1O2ErPXMpby5wdXNoKE10KGUsYSxhK3M+dT91OmErcykpO3JldHVybiAxPT09bj8odD1lW3ItMV0saSs9UHRbdD4+Ml0saSs9UHRbdDw8NCY2M10saSs9Ij09Iik6Mj09PW4mJih0PShlW3ItMl08PDgpK2Vbci0xXSxpKz1QdFt0Pj4xMF0saSs9UHRbdD4+NCY2M10saSs9UHRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBIdChlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiB4dChlLHQscixuLGksbyl7dmFyIHMsYSx1LGM9OCpvLWktMSxoPSgxPDxjKS0xLGw9aD4+MSxmPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZD1uPzA6by0xLHA9bj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWgpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKHU9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sdSo9MiksKHQrPXMrbD49MT9mL3U6ZipNYXRoLnBvdygyLDEtbCkpKnU+PTImJihzKyssdS89MikscytsPj1oPyhhPTAscz1oKTpzK2w+PTE/KGE9KHQqdS0xKSpNYXRoLnBvdygyLGkpLHMrPWwpOihhPXQqTWF0aC5wb3coMixsLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW3IrZF09MjU1JmEsZCs9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLGMrPWk7Yz4wO2VbcitkXT0yNTUmcyxkKz1wLHMvPTI1NixjLT04KTtlW3IrZC1wXXw9MTI4Kmd9dmFyIGp0PXt9LnRvU3RyaW5nLEJ0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWp0LmNhbGwoZSl9O0Z0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Q3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8Q3QuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgcXQ9TnQoKTtmdW5jdGlvbiBOdCgpe3JldHVybiBGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBLdChlLHQpe2lmKE50KCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPUZ0LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBGdCh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBGdChlLHQscil7aWYoIShGdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgRnQpKXJldHVybiBuZXcgRnQoZSx0LHIpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4genQodGhpcyxlKX1yZXR1cm4gWXQodGhpcyxlLHQscil9ZnVuY3Rpb24gWXQoZSx0LHIsbil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gdD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbiksRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189RnQucHJvdG90eXBlOmU9SnQoZSx0KSxlfShlLHQscixuKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwocj0idXRmOCIpLCFGdC5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciBuPTB8R3QodCxyKSxpPShlPUt0KGUsbikpLndyaXRlKHQscik7cmV0dXJuIGkhPT1uJiYoZT1lLnNsaWNlKDAsaSkpLGV9KGUsdCxyKTpmdW5jdGlvbihlLHQpe2lmKCR0KHQpKXt2YXIgcj0wfFZ0KHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPUt0KGUscikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLHIpLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChuPXQubGVuZ3RoKSE9bj9LdChlLDApOkp0KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkJ0KHQuZGF0YSkpcmV0dXJuIEp0KGUsdC5kYXRhKX12YXIgbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gV3QoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB6dChlLHQpe2lmKFd0KHQpLGU9S3QoZSx0PDA/MDowfFZ0KHQpKSwhRnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1mdW5jdGlvbiBKdChlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfFZ0KHQubGVuZ3RoKTtlPUt0KGUscik7Zm9yKHZhciBuPTA7bjxyO24rPTEpZVtuXT0yNTUmdFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBWdChlKXtpZihlPj1OdCgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitOdCgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiAkdChlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gR3QoZSx0KXtpZigkdChlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIHI9ZS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBuPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHI7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4ga3IoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBTcihlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBrcihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBYdChlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBscih0aGlzLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gdXIodGhpcyx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBjcih0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaHIodGhpcyx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYXIodGhpcyx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gZnIodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gWnQoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBRdChlLHQscixuLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLHI9K3IsaXNOYU4ocikmJihyPWk/MDplLmxlbmd0aC0xKSxyPDAmJihyPWUubGVuZ3RoK3IpLHI+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9ZS5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9RnQuZnJvbSh0LG4pKSwkdCh0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOmVyKGUsdCxyLG4saSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsRnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOmVyKGUsW3RdLHIsbixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBlcihlLHQscixuLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGg9LTE7Zm9yKG89cjtvPGE7bysrKWlmKGMoZSxvKT09PWModCwtMT09PWg/MDpvLWgpKXtpZigtMT09PWgmJihoPW8pLG8taCsxPT09dSlyZXR1cm4gaCpzfWVsc2UtMSE9PWgmJihvLT1vLWgpLGg9LTF9ZWxzZSBmb3Iocit1PmEmJihyPWEtdSksbz1yO28+PTA7by0tKXtmb3IodmFyIGw9ITAsZj0wO2Y8dTtmKyspaWYoYyhlLG8rZikhPT1jKHQsZikpe2w9ITE7YnJlYWt9aWYobClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiB0cihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gcnIoZSx0LHIsbil7cmV0dXJuIEFyKGtyKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIG5yKGUsdCxyLG4pe3JldHVybiBBcihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gdH0odCksZSxyLG4pfWZ1bmN0aW9uIGlyKGUsdCxyLG4pe3JldHVybiBucihlLHQscixuKX1mdW5jdGlvbiBvcihlLHQscixuKXtyZXR1cm4gQXIoU3IodCksZSxyLG4pfWZ1bmN0aW9uIHNyKGUsdCxyLG4pe3JldHVybiBBcihmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIGFyKGUsdCxyKXtyZXR1cm4gMD09PXQmJnI9PT1lLmxlbmd0aD9MdChlKTpMdChlLnNsaWNlKHQscikpfWZ1bmN0aW9uIHVyKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPXQ7aTxyOyl7dmFyIG8scyxhLHUsYz1lW2ldLGg9bnVsbCxsPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStsPD1yKXN3aXRjaChsKXtjYXNlIDE6YzwxMjgmJihoPWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJih1PSgzMSZjKTw8Nnw2MyZvKT4xMjcmJihoPXUpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoaD11KTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmdTwxMTE0MTEyJiYoaD11KX1udWxsPT09aD8oaD02NTUzMyxsPTEpOmg+NjU1MzUmJihoLT02NTUzNixuLnB1c2goaD4+PjEwJjEwMjN8NTUyOTYpLGg9NTYzMjB8MTAyMyZoKSxuLnB1c2goaCksaSs9bH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7Zm9yKHZhciByPSIiLG49MDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz00MDk2KSk7cmV0dXJuIHJ9KG4pfWZ1bmN0aW9uIGNyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaHIoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBpPXQ7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGxyKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsbz10O288cjsrK28paSs9X3IoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZnIoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksaT0iIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBkcihlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gcHIoZSx0LHIsbixpLG8pe2lmKCEkdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gZ3IoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciwyKTtpPG87KytpKWVbcitpXT0odCYyNTU8PDgqKG4/aToxLWkpKT4+PjgqKG4/aToxLWkpfWZ1bmN0aW9uIHZyKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIHlyKGUsdCxyLG4saSxvKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gbXIoZSx0LHIsbixpKXtyZXR1cm4gaXx8eXIoZSwwLHIsNCkseHQoZSx0LHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gd3IoZSx0LHIsbixpKXtyZXR1cm4gaXx8eXIoZSwwLHIsOCkseHQoZSx0LHIsbiw1Miw4KSxyKzh9RnQucG9vbFNpemU9ODE5MixGdC5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189RnQucHJvdG90eXBlLGV9LEZ0LmZyb209ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBZdChudWxsLGUsdCxyKX0sRnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmKEZ0LnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsRnQuX19wcm90b19fPVVpbnQ4QXJyYXkpLEZ0LmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFd0KHQpLHQ8PTA/S3QoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9LdChlLHQpLmZpbGwocixuKTpLdChlLHQpLmZpbGwocik6S3QoZSx0KX0obnVsbCxlLHQscil9LEZ0LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiB6dChudWxsLGUpfSxGdC5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIHp0KG51bGwsZSl9LEZ0LmlzQnVmZmVyPUVyLEZ0LmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighJHQoZSl8fCEkdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sRnQuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sRnQuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIUJ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIEZ0LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49RnQuYWxsb2NVbnNhZmUodCksaT0wO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBvPWVbcl07aWYoISR0KG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sRnQuYnl0ZUxlbmd0aD1HdCxGdC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLEZ0LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpWnQodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LEZ0LnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpWnQodGhpcyx0LHQrMyksWnQodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sRnQucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OCladCh0aGlzLHQsdCs3KSxadCh0aGlzLHQrMSx0KzYpLFp0KHRoaXMsdCsyLHQrNSksWnQodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sRnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/dXIodGhpcywwLGUpOlh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRnQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighJHQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PUZ0LmNvbXBhcmUodGhpcyxlKX0sRnQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLDUwKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+NTAmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0sRnQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighJHQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHQ8MHx8cj5lLmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1pJiZ0Pj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYodD49cilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIG89KGk+Pj49MCktKG4+Pj49MCkscz0ocj4+Pj0wKS0odD4+Pj0wKSxhPU1hdGgubWluKG8scyksdT10aGlzLnNsaWNlKG4saSksYz1lLnNsaWNlKHQsciksaD0wO2g8YTsrK2gpaWYodVtoXSE9PWNbaF0pe289dVtoXSxzPWNbaF07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSxGdC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxyKX0sRnQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBRdCh0aGlzLGUsdCxyLCEwKX0sRnQucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gUXQodGhpcyxlLHQsciwhMSl9LEZ0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gdHIodGhpcyxlLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gcnIodGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIG5yKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGlyKHRoaXMsZSx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gb3IodGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBzcih0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLG89ITB9fSxGdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fSxGdC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9bik8MCYmKGU9MCk6ZT5uJiYoZT1uKSwodD12b2lkIDA9PT10P246fn50KTwwPyh0Kz1uKTwwJiYodD0wKTp0Pm4mJih0PW4pLHQ8ZSYmKHQ9ZSksRnQuVFlQRURfQVJSQVlfU1VQUE9SVCkocj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1GdC5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgRnQoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pcltvXT10aGlzW28rZV19cmV0dXJuIHJ9LEZ0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8ZHIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LEZ0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8ZHIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KW4rPXRoaXNbZSstLXRdKmk7cmV0dXJuIG59LEZ0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZHIoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxGdC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGRyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LEZ0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZHIoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sRnQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LEZ0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZHIoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxGdC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8ZHIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG4+PShpKj0xMjgpJiYobi09TWF0aC5wb3coMiw4KnQpKSxufSxGdC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8ZHIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dCxpPTEsbz10aGlzW2UrLS1uXTtuPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1uXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sRnQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGRyKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LEZ0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fGRyKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LEZ0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fGRyKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LEZ0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sRnQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGRyKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxGdC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZHIoZSw0LHRoaXMubGVuZ3RoKSxIdCh0aGlzLGUsITAsMjMsNCl9LEZ0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDQsdGhpcy5sZW5ndGgpLEh0KHRoaXMsZSwhMSwyMyw0KX0sRnQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDgsdGhpcy5sZW5ndGgpLEh0KHRoaXMsZSwhMCw1Miw4KX0sRnQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDgsdGhpcy5sZW5ndGgpLEh0KHRoaXMsZSwhMSw1Miw4KX0sRnQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fHByKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtyfSxGdC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7ZT0rZSx0fD0wLHJ8PTAsbnx8cHIodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsbz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrcn0sRnQucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8cHIodGhpcyxlLHQsMSwyNTUsMCksRnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LEZ0LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDIsNjU1MzUsMCksRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOmdyKHRoaXMsZSx0LCEwKSx0KzJ9LEZ0LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDIsNjU1MzUsMCksRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOmdyKHRoaXMsZSx0LCExKSx0KzJ9LEZ0LnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOnZyKHRoaXMsZSx0LCEwKSx0KzR9LEZ0LnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOnZyKHRoaXMsZSx0LCExKSx0KzR9LEZ0LnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7cHIodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPTAscz0xLGE9MDtmb3IodGhpc1t0XT0yNTUmZTsrK288ciYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3Qrby0xXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LEZ0LnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7cHIodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPXItMSxzPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrcn0sRnQucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxwcih0aGlzLGUsdCwxLDEyNywtMTI4KSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxGdC5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Z3IodGhpcyxlLHQsITApLHQrMn0sRnQucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxwcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOmdyKHRoaXMsZSx0LCExKSx0KzJ9LEZ0LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8cHIodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOnZyKHRoaXMsZSx0LCEwKSx0KzR9LEZ0LnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8cHIodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOnZyKHRoaXMsZSx0LCExKSx0KzR9LEZ0LnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMCxyKX0sRnQucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIG1yKHRoaXMsZSx0LCExLHIpfSxGdC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHdyKHRoaXMsZSx0LCEwLHIpfSxGdC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHdyKHRoaXMsZSx0LCExLHIpfSxGdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQscixuKXtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8bi1yJiYobj1lLmxlbmd0aC10K3IpO3ZhciBpLG89bi1yO2lmKHRoaXM9PT1lJiZyPHQmJnQ8bilmb3IoaT1vLTE7aT49MDstLWkpZVtpK3RdPXRoaXNbaStyXTtlbHNlIGlmKG88MWUzfHwhRnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LEZ0LnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBpPWUuY2hhckNvZGVBdCgwKTtpPDI1NiYmKGU9aSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFGdC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbil9ZWxzZSJudW1iZXIiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD10KXJldHVybiB0aGlzO3ZhciBvO2lmKHQ+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsZXx8KGU9MCksIm51bWJlciI9PXR5cGVvZiBlKWZvcihvPXQ7bzxyOysrbyl0aGlzW29dPWU7ZWxzZXt2YXIgcz0kdChlKT9lOmtyKG5ldyBGdChlLG4pLnRvU3RyaW5nKCkpLGE9cy5sZW5ndGg7Zm9yKG89MDtvPHItdDsrK28pdGhpc1tvK3RdPXNbbyVhXX1yZXR1cm4gdGhpc307dmFyIGJyPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIF9yKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBrcihlLHQpe3ZhciByO3Q9dHx8MS8wO2Zvcih2YXIgbj1lLmxlbmd0aCxpPW51bGwsbz1bXSxzPTA7czxuOysrcyl7aWYoKHI9ZS5jaGFyQ29kZUF0KHMpKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1uKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gU3IoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG8scztJdHx8VXQoKTt2YXIgYT1lLmxlbmd0aDtpZihhJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtvPSI9Ij09PWVbYS0yXT8yOiI9Ij09PWVbYS0xXT8xOjAscz1uZXcgT3QoMyphLzQtbyksbj1vPjA/YS00OmE7dmFyIHU9MDtmb3IodD0wLHI9MDt0PG47dCs9NCxyKz0zKWk9RHRbZS5jaGFyQ29kZUF0KHQpXTw8MTh8RHRbZS5jaGFyQ29kZUF0KHQrMSldPDwxMnxEdFtlLmNoYXJDb2RlQXQodCsyKV08PDZ8RHRbZS5jaGFyQ29kZUF0KHQrMyldLHNbdSsrXT1pPj4xNiYyNTUsc1t1KytdPWk+PjgmMjU1LHNbdSsrXT0yNTUmaTtyZXR1cm4gMj09PW8/KGk9RHRbZS5jaGFyQ29kZUF0KHQpXTw8MnxEdFtlLmNoYXJDb2RlQXQodCsxKV0+PjQsc1t1KytdPTI1NSZpKToxPT09byYmKGk9RHRbZS5jaGFyQ29kZUF0KHQpXTw8MTB8RHRbZS5jaGFyQ29kZUF0KHQrMSldPDw0fER0W2UuY2hhckNvZGVBdCh0KzIpXT4+MixzW3UrK109aT4+OCYyNTUsc1t1KytdPTI1NSZpKSxzfShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKGJyLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBBcihlLHQscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj10Lmxlbmd0aHx8aT49ZS5sZW5ndGgpOysraSl0W2krcl09ZVtpXTtyZXR1cm4gaX1mdW5jdGlvbiBFcihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFRyKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJlRyKGUuc2xpY2UoMCwwKSl9KGUpKX1mdW5jdGlvbiBUcihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBScj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCdWZmZXI6RnQsSU5TUEVDVF9NQVhfQllURVM6NTAsU2xvd0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksRnQuYWxsb2MoK2UpfSxpc0J1ZmZlcjpFcixrTWF4TGVuZ3RoOnF0fSksQ3I9UnQoKGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxyPXQlNDtpZighcilyZXR1cm4gZTt2YXIgbj10LGk9NC1yLG89dCtpLHM9RnQuYWxsb2Mobyk7Zm9yKHMud3JpdGUoZSk7aS0tOylzLndyaXRlKCI9IixuKyspO3JldHVybiBzLnRvU3RyaW5nKCl9fSkpLFByPVJ0KChmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxGdC5pc0J1ZmZlcihlKT9pKGUudG9TdHJpbmcoImJhc2U2NCIpKTppKEZ0LmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLENyLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLCIiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1yO28uZW5jb2RlPXIsby5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxGdC5mcm9tKG4oZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSxvLnRvQmFzZTY0PW4sby5mcm9tQmFzZTY0PWksby50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gRnQuZnJvbShuKGUpLCJiYXNlNjQiKX0sdC5kZWZhdWx0PW99KSksRHI9UnQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1Qci5kZWZhdWx0LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0c30pKSxPcj1SdCgoZnVuY3Rpb24oZSx0KXt2YXIgcjtlLmV4cG9ydHM9KHI9cnx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByO3JldHVybiBlLnByb3RvdHlwZT10LHI9bmV3IGUsZS5wcm90b3R5cGU9bnVsbCxyfX0oKSxuPXt9LGk9bi5saWI9e30sbz1pLkJhc2U9e2V4dGVuZDpmdW5jdGlvbihlKXt2YXIgdD1yKHRoaXMpO3JldHVybiBlJiZ0Lm1peEluKGUpLHQuaGFzT3duUHJvcGVydHkoImluaXQiKSYmdGhpcy5pbml0IT09dC5pbml0fHwodC5pbml0PWZ1bmN0aW9uKCl7dC4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx0LmluaXQucHJvdG90eXBlPXQsdC4kc3VwZXI9dGhpcyx0fSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmV4dGVuZCgpO3JldHVybiBlLmluaXQuYXBwbHkoZSxhcmd1bWVudHMpLGV9LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJih0aGlzW3RdPWVbdF0pO2UuaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPWUudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19LHM9aS5Xb3JkQXJyYXk9by5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oZSx0KXtlPXRoaXMud29yZHM9ZXx8W10sdGhpcy5zaWdCeXRlcz1udWxsIT10P3Q6NCplLmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fHUpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMud29yZHMscj1lLndvcmRzLG49dGhpcy5zaWdCeXRlcyxpPWUuc2lnQnl0ZXM7aWYodGhpcy5jbGFtcCgpLG4lNClmb3IodmFyIG89MDtvPGk7bysrKXt2YXIgcz1yW28+Pj4yXT4+PjI0LW8lNCo4JjI1NTt0W24rbz4+PjJdfD1zPDwyNC0obitvKSU0Kjh9ZWxzZSBmb3Iobz0wO288aTtvKz00KXRbbitvPj4+Ml09cltvPj4+Ml07cmV0dXJuIHRoaXMuc2lnQnl0ZXMrPWksdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzLHI9dGhpcy5zaWdCeXRlczt0W3I+Pj4yXSY9NDI5NDk2NzI5NTw8MzItciU0KjgsdC5sZW5ndGg9ZS5jZWlsKHIvNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9by5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBlLndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCksZX0scmFuZG9tOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCl7dD10O3ZhciByPTk4NzY1NDMyMSxuPTQyOTQ5NjcyOTU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9KChyPTM2OTY5Kig2NTUzNSZyKSsocj4+MTYpJm4pPDwxNikrKHQ9MThlMyooNjU1MzUmdCkrKHQ+PjE2KSZuKSZuO3JldHVybiBpLz00Mjk0OTY3Mjk2LChpKz0uNSkqKGUucmFuZG9tKCk+LjU/MTotMSl9fSxvPTA7bzx0O28rPTQpe3ZhciBhPWkoNDI5NDk2NzI5Nioocnx8ZS5yYW5kb20oKSkpO3I9OTg3NjU0MDcxKmEoKSxuLnB1c2goNDI5NDk2NzI5NiphKCl8MCl9cmV0dXJuIG5ldyBzLmluaXQobix0KX19KSxhPW4uZW5jPXt9LHU9YS5IZXg9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS53b3JkcyxyPWUuc2lnQnl0ZXMsbj1bXSxpPTA7aTxyO2krKyl7dmFyIG89dFtpPj4+Ml0+Pj4yNC1pJTQqOCYyNTU7bi5wdXNoKChvPj4+NCkudG9TdHJpbmcoMTYpKSxuLnB1c2goKDE1Jm8pLnRvU3RyaW5nKDE2KSl9cmV0dXJuIG4uam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLG49MDtuPHQ7bis9MilyW24+Pj4zXXw9cGFyc2VJbnQoZS5zdWJzdHIobiwyKSwxNik8PDI0LW4lOCo0O3JldHVybiBuZXcgcy5pbml0KHIsdC8yKX19LGM9YS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS53b3JkcyxyPWUuc2lnQnl0ZXMsbj1bXSxpPTA7aTxyO2krKyl7dmFyIG89dFtpPj4+Ml0+Pj4yNC1pJTQqOCYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobykpfXJldHVybiBuLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bXSxuPTA7bjx0O24rKylyW24+Pj4yXXw9KDI1NSZlLmNoYXJDb2RlQXQobikpPDwyNC1uJTQqODtyZXR1cm4gbmV3IHMuaW5pdChyLHQpfX0saD1hLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoYy5zdHJpbmdpZnkoZSkpKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBVVEYtOCBkYXRhIil9fSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gYy5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpKX19LGw9aS5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtPW8uZXh0ZW5kKHtyZXNldDpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IHMuaW5pdCx0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1oLnBhcnNlKGUpKSx0aGlzLl9kYXRhLmNvbmNhdChlKSx0aGlzLl9uRGF0YUJ5dGVzKz1lLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih0KXt2YXIgcj10aGlzLl9kYXRhLG49ci53b3JkcyxpPXIuc2lnQnl0ZXMsbz10aGlzLmJsb2NrU2l6ZSxhPWkvKDQqbyksdT0oYT10P2UuY2VpbChhKTplLm1heCgoMHxhKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpvLGM9ZS5taW4oNCp1LGkpO2lmKHUpe2Zvcih2YXIgaD0wO2g8dTtoKz1vKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKG4saCk7dmFyIGw9bi5zcGxpY2UoMCx1KTtyLnNpZ0J5dGVzLT1jfXJldHVybiBuZXcgcy5pbml0KGwsYyl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9by5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBlLl9kYXRhPXRoaXMuX2RhdGEuY2xvbmUoKSxlfSxfbWluQnVmZmVyU2l6ZTowfSksZj0oaS5IYXNoZXI9bC5leHRlbmQoe2NmZzpvLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oZSl7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKGUpLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtsLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2FwcGVuZChlKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnRoaXMuX2FwcGVuZChlKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZS5pbml0KHIpLmZpbmFsaXplKHQpfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBmLkhNQUMuaW5pdChlLHIpLmZpbmFsaXplKHQpfX19KSxuLmFsZ289e30pO3JldHVybiBufShNYXRoKSxyKX0pKSxJcj1SdCgoZnVuY3Rpb24oZSx0KXt2YXIgcjtlLmV4cG9ydHM9KHI9T3IsZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciBlPXIubGliLldvcmRBcnJheSx0PWUuaW5pdDsoZS5pbml0PWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKGU9bmV3IFVpbnQ4QXJyYXkoZSkpLChlIGluc3RhbmNlb2YgSW50OEFycmF5fHwidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiZlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fGUgaW5zdGFuY2VvZiBJbnQxNkFycmF5fHxlIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fGUgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxlIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fGUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fGUgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpJiYoZT1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKSksZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2Zvcih2YXIgcj1lLmJ5dGVMZW5ndGgsbj1bXSxpPTA7aTxyO2krKyluW2k+Pj4yXXw9ZVtpXTw8MjQtaSU0Kjg7dC5jYWxsKHRoaXMsbixyKX1lbHNlIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkucHJvdG90eXBlPWV9fSgpLHIubGliLldvcmRBcnJheSl9KSksVXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0oUnQoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsdSxjLGgsbCxmLGQscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sdT1yWzJdLGM9clszXSxoPXJbNF0sbD1yWzVdLGY9cls2XSxkPXJbN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1Jm5bdl0pPDwyNHwoMjU1Jm5bdisxXSk8PDE2fCgyNTUmblt2KzJdKTw8OHwyNTUmblt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKyhoJmxefmgmZil8MCkrKGQrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZ1XmEmdSl8MCxkPWYsZj1sLGw9aCxoPWMreXwwLGM9dSx1PWEsYT1zLHM9eSttfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPXUsclszXSs9YyxyWzRdKz1oLHJbNV0rPWwscls2XSs9ZixyWzddKz1kLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1zKHQsZSksaD1uZXcgaShjKSxsPW5ldyBVaW50OEFycmF5KGguZGlnZXN0TGVuZ3RoKSxmPWwubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkobikscD0wO3A8bjtwKyspZj09PWwubGVuZ3RoJiYoYShsLGgscixvKSxmPTApLGRbcF09bFtmKytdO3JldHVybiBoLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxkfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkocyksYz1uZXcgVWludDhBcnJheShzKSxoPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKnM8bjtsKyspe3ZhciBmPWwrMTthWzBdPWY+Pj4yNCYyNTUsYVsxXT1mPj4+MTYmMjU1LGFbMl09Zj4+PjgmMjU1LGFbM109Zj4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXVbZF09Y1tkXTtmb3IoZD0yO2Q8PXI7ZCsrKXtvLnJlc2V0KCksby51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8cztwKyspdVtwXV49Y1twXX1mb3IoZD0wO2Q8cyYmbCpzK2Q8bjtkKyspaFtsKnMrZF09dVtkXX1mb3IobD0wO2w8cztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKWFbbF09MDtyZXR1cm4gby5jbGVhbigpLGh9fShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfSkpKTtmdW5jdGlvbiBNcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIExyKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgSHI9TXIseHI9THI7ZnVuY3Rpb24ganIoZSl7aWYoSHI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKEhyPT09TXJ8fCFIcikmJnNldFRpbWVvdXQpcmV0dXJuIEhyPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gSHIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIEhyLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBIci5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBDdC5zZXRUaW1lb3V0JiYoSHI9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIEN0LmNsZWFyVGltZW91dCYmKHhyPWNsZWFyVGltZW91dCk7dmFyIEJyLHFyPVtdLE5yPSExLEtyPS0xO2Z1bmN0aW9uIEZyKCl7TnImJkJyJiYoTnI9ITEsQnIubGVuZ3RoP3FyPUJyLmNvbmNhdChxcik6S3I9LTEscXIubGVuZ3RoJiZZcigpKX1mdW5jdGlvbiBZcigpe2lmKCFOcil7dmFyIGU9anIoRnIpO05yPSEwO2Zvcih2YXIgdD1xci5sZW5ndGg7dDspe2ZvcihCcj1xcixxcj1bXTsrK0tyPHQ7KUJyJiZCcltLcl0ucnVuKCk7S3I9LTEsdD1xci5sZW5ndGh9QnI9bnVsbCxOcj0hMSxmdW5jdGlvbihlKXtpZih4cj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKCh4cj09PUxyfHwheHIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIHhyPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e3hyKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4geHIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiB4ci5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFdyKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9V3IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciB6cj1DdC5wZXJmb3JtYW5jZXx8e30sSnI9KHpyLm5vd3x8enIubW96Tm93fHx6ci5tc05vd3x8enIub05vd3x8enIud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07cXIucHVzaChuZXcgV3IoZSx0KSksMSE9PXFyLmxlbmd0aHx8TnJ8fGpyKFlyKX0pLFZyPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KFJyKSwkcj1SdCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1Wci5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9VnI6KG4oVnIsdCksdC5CdWZmZXI9aSksbihyLGkpLGkuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxpLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBWci5TbG93QnVmZmVyKGUpfX0pKSxHcj1SdCgoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj0kci5CdWZmZXIsbj1UdC5jcnlwdG98fFR0Lm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLGkpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBvPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIHM9MDtzPGU7cys9dCluLmdldFJhbmRvbVZhbHVlcyhvLnNsaWNlKHMscyt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhvKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9KcigoZnVuY3Rpb24oKXtpKG51bGwsbyl9KSk6b306ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKTtjb25zdCBYcj1uZXcgVGV4dEVuY29kZXIsWnI9bmV3IFRleHREZWNvZGVyO3ZhciBRcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfSgpO2NvbnN0IGVuPWU9PntsZXQgdD1lO3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9WnIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIiksbmV3IFVpbnQ4QXJyYXkoUXIuYXRvYih0KS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSl9O2NsYXNzIHRuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfX1jbGFzcyBybiBleHRlbmRzIHRue2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn19Y2xhc3Mgbm4gZXh0ZW5kcyB0bntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyBvbiBleHRlbmRzIHRue2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBzbiBleHRlbmRzIHRue2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIGFuIGV4dGVuZHMgdG57Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3MgdW4gZXh0ZW5kcyB0bntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn19Y2xhc3MgY24gZXh0ZW5kcyBybntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQifX12YXIgaG49UXIuY3J5cHRvO2Z1bmN0aW9uIGxuKCl7aWYoIVFyLmlzU2VjdXJlQ29udGV4dCYmIVFyLmNyeXB0by5zdWJ0bGUpdGhyb3cgbmV3IHRuKCJXZWIgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBhdmFpbGFibGUgb25seSBpbiBTZWN1cmUgQ29udGV4dHMuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJlX0NvbnRleHRzIil9Y29uc3QgZm49YXN5bmMgZT0+e3ZhciB0LHI7Y29uc3R7YWxnb3JpdGhtOm4sa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IG9uKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvbigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc3Vic3RyKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnN1YnN0cigtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvbigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG9uKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBvbigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKTtsZXQgbz0iandrIixzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCJQQktERjIiPT09bi5uYW1lJiYobz0icmF3IixzPWVuKGUuaykpLGxuKCksaG4uc3VidGxlLmltcG9ydEtleShvLHMsbixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0ocj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1yP3I6aSl9O2Z1bmN0aW9uIGRuKGUpe3JldHVybiEhZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1hc3luYyBmdW5jdGlvbiBwbihlLHQscil7aWYoIWRuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/Zm4oey4uLmUsYWxnOnQsZXh0OiExfSk6ZW4oZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IG9uKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIHVuc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBmbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IG9uKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX1jb25zdCBnbj1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDAhPT1uLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2Zvcihjb25zdCBpIG9mIHIuY3JpdCl7aWYoIXQuaGFzKGkpKXRocm93IG5ldyBvbihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7aX0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbmApO2lmKHZvaWQgMD09PW5baV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBpcyBtaXNzaW5nYCk7aWYodC5nZXQoaSkmJnZvaWQgMD09PXJbaV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfS5iaW5kKHZvaWQgMCxzbixuZXcgTWFwKFtbImI2NCIsITBdXSkpLHZuPSgoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkuYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTthc3luYyBmdW5jdGlvbiB5bihlLHQscil7aWYoIWRuKGUpKXRocm93IG5ldyBzbigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgc24oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBzbigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHNuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgc24oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhZG4oZS5oZWFkZXIpKXRocm93IG5ldyBzbigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBuPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PWVuKGUucHJvdGVjdGVkKTtuPUpTT04ucGFyc2UoWnIuZGVjb2RlKHQpKX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkobixlLmhlYWRlcikpdGhyb3cgbmV3IHNuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3QgaT17Li4ubiwuLi5lLmhlYWRlcn07bGV0IG89ITA7aWYoZ24obixpKS5oYXMoImI2NCIpJiYobz1uLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBvKSl0aHJvdyBuZXcgc24oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOnN9PWk7aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhcyl0aHJvdyBuZXcgc24oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IGE9ciYmdm4oci5hbGdvcml0aG1zKTtpZihhJiYhYS5oYXMocykpdGhyb3cgbmV3IG5uKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYobyl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHNuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgc24oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KG4sZSkpLCgoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fGUubWF0Y2goL15BXGR7M30oPzpHQ00pS1ckLykpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwic2VjcmV0Ij09PXQudHlwZSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpfWlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBvciBLZXlPYmplY3QgaW5zdGFuY2VzIG11c3QgYmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIik7aWYoInNlY3JldCI9PT10LnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9KShzLHQpO2NvbnN0IHU9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KFhyLmVuY29kZShlLnByb3RlY3RlZHx8IiIpLFhyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1hyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksYz1lbihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0KGFzeW5jKGUsdCxyLG4pPT57bGV0IGk7aWYobG4oKSx0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzeW1tZXRyaWMga2V5cyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciBITUFDLWJhc2VkIGFsZ29yaXRobXMiKTtpPWF3YWl0IGhuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zdWJzdHIoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFsidmVyaWZ5Il0pfWVsc2UgaT10O3JldHVybigoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7Y29uc3Qgcj1wYXJzZUludChlLnN1YnN0cigtMyksMTApLHtsZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBzeW1tZXRyaWMga2V5cyB0byBiZSAke3J9IGJpdHMgb3IgbGFyZ2VyYCl9aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKSxobi5zdWJ0bGUudmVyaWZ5KGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkhTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiSE1BQyJ9O2Nhc2UiSFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJITUFDIn07Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDozMn07Y2FzZSJQUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6NDh9O2Nhc2UiUFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjY0fTtjYXNlIlJTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In07Y2FzZSJFUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9O2Nhc2UiRVM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtkZWZhdWx0OnRocm93IG5ldyBvbihgYWxnICR7ZX0gaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUpLGkscixuKX0pKHMsdCxjLHUpKXRocm93IG5ldyB1bjtsZXQgaDtoPW8/ZW4oZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Yci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgbD17cGF5bG9hZDpofTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihsLnByb3RlY3RlZEhlYWRlcj1uKSx2b2lkIDAhPT1lLmhlYWRlciYmKGwudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGx9Y29uc3QgbW49L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIHduPWU9Pntjb25zdCB0PW1uLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKDg2NDAwKnIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IGJuPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBfbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fGJuKGUudHlwKSE9PWJuKG4pKSl0aHJvdyBuZXcgcm4oJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoWnIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPXR5cGVvZiBpfHwhaXx8QXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgYW4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKCJzdHJpbmciPT10eXBlb2Ygbz9bb106bykuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBybigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IHJuKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mKHU9aS5hdWQpP2MuaW5jbHVkZXModSk6Yy5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldCh1KSkpKSkpdGhyb3cgbmV3IHJuKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYztsZXQgaDtzd2l0Y2godHlwZW9mIHIuY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpoPXduKHIuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpoPXIuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmg9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpsfT1yLGY9KGQ9bHx8bmV3IERhdGUsTWF0aC5mbG9vcihkLmdldFRpbWUoKS8xZTMpKTt2YXIgZDtpZih2b2lkIDAhPT1pLmlhdHx8ci5tYXhUb2tlbkFnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcm4oJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwPT09aS5leHAmJmkuaWF0PmYraCl0aHJvdyBuZXcgcm4oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgcm4oJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+ZitoKXRocm93IG5ldyBybignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBybignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9Zi1oKXRocm93IG5ldyBjbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKHIubWF4VG9rZW5BZ2Upe2NvbnN0IGU9Zi1pLmlhdDtpZihlLWg+KCJudW1iZXIiPT10eXBlb2Ygci5tYXhUb2tlbkFnZT9yLm1heFRva2VuQWdlOnduKHIubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgY24oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWgpdGhyb3cgbmV3IHJuKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2NvbnN0IGtuPXJlcXVpcmUoInNlY3VyZS1yYW5kb20tYnl0ZXMiKTtjbGFzcyBTbntjb25zdHJ1Y3Rvcigpe31zdGF0aWMgYmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBEci5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfXN0YXRpYyBnZXRDb2RlVmVyaWZpZXIoZSl7c3dpdGNoKGUpe2Nhc2UgU3QuTm9kZTpyZXR1cm4gdGhpcy5iYXNlNjRVUkxFbmNvZGUoa24oMzIpKTtjYXNlIFN0LkJyb3dzZXI6cmV0dXJuIHRoaXMuYmFzZTY0VVJMRW5jb2RlKEdyKDMyKSk7Y2FzZSBTdC5SZWFjdE5hdGl2ZTpyZXR1cm4gdGhpcy5iYXNlNjRVUkxFbmNvZGUoSXIucmFuZG9tKDMyKS50b1N0cmluZygpKTtkZWZhdWx0OnJldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShHcigzMikpfX1zdGF0aWMgZ2V0Q29kZUNoYWxsZW5nZShlKXtyZXR1cm4gdGhpcy5iYXNlNjRVUkxFbmNvZGUobmV3IGcoVXIoKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSkpfXN0YXRpYyBnZXRTdXBwb3J0ZWRTaWduYXR1cmVBbGdvcml0aG1zKCl7cmV0dXJuWyJSUzI1NiIsIlJTNTEyIiwiUlMzODQiLCJQUzI1NiJdfXN0YXRpYyBnZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgcj1KU09OLnBhcnNlKERyLmRlY29kZShlLCJ1dGY4IikpO2Zvcihjb25zdCBlIG9mIHQpaWYoci5raWQ9PT1lLmtpZClyZXR1cm4gcG4oe2FsZzplLmFsZyxlOmUuZSxrdHk6ZS5rdHksbjplLm59KTtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJDUllQVE9fVVRJTC1HVEZUSVQtSVYwMSIsImNyeXB0by11dGlscyIsImdldEpXS0ZvclRoZUlkVG9rZW4iLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIityLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGU9PmUua2lkKSkuam9pbigiLCAiKSkpfXN0YXRpYyBpc1ZhbGlkSWRUb2tlbihlLHQscixuLGksbyl7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxyKXtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGU9WnIuZGVjb2RlKGUpKSwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHNuKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjb25zdHswOm4sMTppLDI6byxsZW5ndGg6c309ZS5zcGxpdCgiLiIpO2lmKDMhPT1zKXRocm93IG5ldyBzbigiSW52YWxpZCBDb21wYWN0IEpXUyIpO2NvbnN0IGE9YXdhaXQgeW4oe3BheWxvYWQ6aXx8dm9pZCAwLHByb3RlY3RlZDpufHx2b2lkIDAsc2lnbmF0dXJlOm98fHZvaWQgMH0sdCxyKTtyZXR1cm57cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfX0oZSx0LHIpO3JldHVybntwYXlsb2FkOl9uKG4ucHJvdGVjdGVkSGVhZGVyLG4ucGF5bG9hZCxyKSxwcm90ZWN0ZWRIZWFkZXI6bi5wcm90ZWN0ZWRIZWFkZXJ9fShlLHQse2FsZ29yaXRobXM6dGhpcy5nZXRTdXBwb3J0ZWRTaWduYXR1cmVBbGdvcml0aG1zKCksYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpvLGlzc3VlcjpuLHN1YmplY3Q6aX0pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBdCgiQ1JZUFRPX1VUSUwtSVZJVC1JVjAyIiwiY3J5cHRvLXV0aWxzIiwiaXNWYWxpZElkVG9rZW4iLCJWYWxpZGF0aW5nIElEIHRva2VuIGZhaWxlZCIsZSkpKSl9c3RhdGljIGRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9RHIuZGVjb2RlKGUuc3BsaXQoIi4iKVsxXSwidXRmOCIpO3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBBdCgiQ1JZUFRPX1VUSUwtRElULUlWMDEiLCJjcnlwdG8tdXRpbHMiLCJkZWNvZGVJRFRva2VuIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBBbntjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGUpe3ZhciB0LHIsbixpO2NvbnN0IG89U24uZGVjb2RlSURUb2tlbihlKSxzPXRoaXMuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKG8pLGE9bnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8udXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsdT1udWxsIT09KHI9by5naXZlbl9uYW1lKSYmdm9pZCAwIT09cj9yOiIiLGM9bnVsbCE9PShuPW8uZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1uP246IiIsaD11JiZjP2Ake3V9ICR7Y31gOnV8fGN8fCIiLGw9bnVsbCE9PShpPW8ucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09aT9pOmg7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmwsdGVuYW50RG9tYWluOnMsdXNlcm5hbWU6YX0sdGhpcy5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQobykpfXN0YXRpYyBmaWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO251bGw9PXR8fGRlbGV0ZSB0LmlzcyxudWxsPT10fHxkZWxldGUgdC5hdWQsbnVsbD09dHx8ZGVsZXRlIHQuZXhwLG51bGw9PXR8fGRlbGV0ZSB0LmlhdCxudWxsPT10fHxkZWxldGUgdC5hY3IsbnVsbD09dHx8ZGVsZXRlIHQuYW1yLG51bGw9PXR8fGRlbGV0ZSB0LmF6cCxudWxsPT10fHxkZWxldGUgdC5hdXRoX3RpbWUsbnVsbD09dHx8ZGVsZXRlIHQubm9uY2UsbnVsbD09dHx8ZGVsZXRlIHQuY19oYXNoLG51bGw9PXR8fGRlbGV0ZSB0LmF0X2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQubmJmLG51bGw9PXR8fGRlbGV0ZSB0LmlzayxudWxsPT10fHxkZWxldGUgdC5zaWQ7Y29uc3Qgcj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoKFtlLHRdKT0+e2NvbnN0IG49ZS5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO3Jbbl09dH0pKSxyfXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fX1Bbi5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9KGUsdD0iQCIpPT57Y29uc3Qgcj1lLnN1Yi5zcGxpdCh0KTtyZXR1cm4gci5sZW5ndGg+Mj9yW3IubGVuZ3RoLTFdOiIifTtjbGFzcyBFbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfXJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIGUud2VsbEtub3duRW5kcG9pbnQ/ZS5zZXJ2ZXJPcmlnaW4rZS53ZWxsS25vd25FbmRwb2ludDplLnNlcnZlck9yaWdpbisiL29hdXRoMi90b2tlbi8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiJ9KSl9cmVzb2x2ZUVuZHBvaW50cyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIHIub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWcmJnIuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhyLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W25dPShudWxsPT1yP3ZvaWQgMDpyLmVuZHBvaW50cyk/ci5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvYXV0aG9yaXplIixlbmRfc2Vzc2lvbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29pZGMvbG9nb3V0Iixqd2tzX3VyaTp0LnNlcnZlck9yaWdpbisiL29hdXRoMi9qd2tzIixjaGVja19zZXNzaW9uX2lmcmFtZTp0LnNlcnZlck9yaWdpbisiL29pZGMvY2hlY2tzZXNzaW9uIixyZXZvY2F0aW9uX2VuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Jldm9rZSIsdG9rZW5fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvdG9rZW4ifTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHIpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gdCYmMCE9PXQudHJpbSgpLmxlbmd0aD93dC5nZXQodCx7d2l0aENyZWRlbnRpYWxzOm51bGw9PXI/dm9pZCAwOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT10LnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0hFTFBFUi1WSVQtTlIwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgcmV0dXJuZWQgIit0LnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLG49KHlpZWxkIHRoaXMucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCkpLnNwbGl0KCIvLndlbGwta25vd24iKVswXTtyZXR1cm4gciYmcj09PW4/U24uZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sdC5kYXRhLmtleXMpLnRoZW4oKHQ9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIFNuLmlzVmFsaWRJZFRva2VuKGUsdCwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELHIsU24uZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSkudGhlbigoZT0+ZSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgQXQoIkFVVEhfSEVMUEVSLVZJVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIix2b2lkIDAsdm9pZCAwLGUpKSkpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9IRUxQRVItVklULUVTMDQiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSk6UHJvbWlzZS5yZXNvbHZlKCExKX0pKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfSEVMUEVSLVZJVC1OUjA1IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9IRUxQRVItVklULU5GMDEiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpfSkpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlKXt2YXIgdDtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcj0ib3BlbmlkIjtjb25zdCBuPXlpZWxkIHRoaXMuX2NvbmZpZygpLGk9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7cmV0dXJuIG4uc2NvcGUmJm4uc2NvcGUubGVuZ3RoPjAmJihuLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8bi5zY29wZS5wdXNoKCJvcGVuaWQiKSxyPW4uc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsaS5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsQW4uZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGkuaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHIpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsbi5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PSh0PW4uY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09dD90OiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKCl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0hFTFBFUi1IVFItTlIwMSIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgdG9rZW4gcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7aWYoKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKGUuZGF0YS5pZF90b2tlbikudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKTtjb25zdCB0PXthY2Nlc3NUb2tlbjplLmRhdGEuYWNjZXNzX3Rva2VuLGV4cGlyZXNJbjplLmRhdGEuZXhwaXJlc19pbixpZFRva2VuOmUuZGF0YS5pZF90b2tlbixyZWZyZXNoVG9rZW46ZS5kYXRhLnJlZnJlc2hfdG9rZW4sc2NvcGU6ZS5kYXRhLnNjb3BlLHRva2VuVHlwZTplLmRhdGEudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0hFTFBFUi1IVFItSVYwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJUaGUgaWQgdG9rZW4gcmV0dXJuZWQgaXMgbm90IHZhbGlkLiIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBoYXMgZmFpbGVkIHRoZSB2YWxpZGF0aW9uIGNoZWNrLiIpKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgQXQoIkFVVEhfSEVMUEVSLUhBVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsdm9pZCAwLHZvaWQgMCxlKSkpKTt7Y29uc3QgdD17YWNjZXNzVG9rZW46ZS5kYXRhLmFjY2Vzc190b2tlbixleHBpcmVzSW46ZS5kYXRhLmV4cGlyZXNfaW4saWRUb2tlbjplLmRhdGEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmUuZGF0YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmUuZGF0YS5zY29wZSx0b2tlblR5cGU6ZS5kYXRhLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKSxQcm9taXNlLnJlc29sdmUodCl9fSkpfX1jbGFzcyBUbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgRW4oZSksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgQXQoIkFVVEhfQ09SRS1HQVUtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRBdXRob3JpemF0aW9uVVJMIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPW5ldyBVUkwodCk7bi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwiY29kZSIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIixyLmNsaWVudElEKTtsZXQgaT0ib3BlbmlkIjtpZihyLnNjb3BlJiZyLnNjb3BlLmxlbmd0aD4wJiYoci5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHIuc2NvcGUucHVzaCgib3BlbmlkIiksaT1yLnNjb3BlLmpvaW4oIiAiKSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsaSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLHIuc2lnbkluUmVkaXJlY3RVUkwpLHIucmVzcG9uc2VNb2RlJiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLHIucmVzcG9uc2VNb2RlKSxyLmVuYWJsZVBLQ0Upe2NvbnN0IGU9U24uZ2V0Q29kZVZlcmlmaWVyKHIucnVudGltZUVudmlyb25tZW50KSx0PVNuLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIsZSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2Iiksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZSIsdCl9ci5wcm9tcHQmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZCgicHJvbXB0IixyLnByb21wdCk7Y29uc3Qgbz1lO2lmKG8pZm9yKGNvbnN0W2UsdF1vZiBPYmplY3QuZW50cmllcyhvKSkiIiE9ZSYmIiIhPXQmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQudG9TdHJpbmcoKSk7cmV0dXJuIG4udG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFyfHwwPT09ci50cmltKCkubGVuZ3RoKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXQoIkFVVEhfQ09SRS1SQVQxLU5GMDEiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTt0JiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KSk7Y29uc3QgaT1bXTtpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7Y29uc3Qgbz1lO3JldHVybiBpLnB1c2goYGNvZGU9JHtvfWApLGkucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSxpLnB1c2goYHJlZGlyZWN0X3VyaT0ke24uc2lnbkluUmVkaXJlY3RVUkx9YCksbi5lbmFibGVQS0NFJiYoaS5wdXNoKGBjb2RlX3ZlcmlmaWVyPSR7eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIpfWApLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKSksd3QucG9zdChyLGkuam9pbigiJiIpLHtoZWFkZXJzOkFuLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSx3aXRoQ3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHN9KS50aGVuKChlPT50aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGUpLnRoZW4oKGU9PmUpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0NPUkUtUkFUMS1FUzAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsdm9pZCAwLHZvaWQgMCxlKSkpKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfQ09SRS1SQVQxLU5SMDMiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIiwiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYoIXIucmVmcmVzaF90b2tlbilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0NPUkUtUkFUMi1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJBVDItTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3Qgbj1bXTtyZXR1cm4gbi5wdXNoKGBjbGllbnRfaWQ9JHt0LmNsaWVudElEfWApLG4ucHVzaChgcmVmcmVzaF90b2tlbj0ke3IucmVmcmVzaF90b2tlbn1gKSxuLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHQuY2xpZW50U2VjcmV0JiZ0LmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm4ucHVzaChgY2xpZW50X3NlY3JldD0ke3QuY2xpZW50U2VjcmV0fWApLHd0LnBvc3QoZSxuLmpvaW4oIiYiKSx7aGVhZGVyczpBbi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMi1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTtjb25zdCByPVtdO3JldHVybiByLnB1c2goYGNsaWVudF9pZD0ke3QuY2xpZW50SUR9YCksci5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWApLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpLHd0LnBvc3QoZSxyLmpvaW4oIiYiKSx7aGVhZGVyczpBbi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+MjAwIT09ZS5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0NPUkUtUkFUMy1OUjAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOih0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLFByb21pc2UucmVzb2x2ZShlKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMy1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBuO2lmKG49ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnQudG9rZW5fZW5kcG9pbnQsIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJDRy1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3QgaT17ZGF0YTooeWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSx0XSk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3ModCk7cmV0dXJuYCR7ZX09JHtyfWB9KSkpKSkpLmpvaW4oIiYiKSxoZWFkZXJzOk9iamVjdC5hc3NpZ24oe30sQW4uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QiLHVybDpuLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c307cmV0dXJuIGUuYXR0YWNoVG9rZW4mJihpLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWB9KSksd3QoaSkudGhlbigodD0+MjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUodCkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkNHLU5SMDQiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSx0PUFuLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1lP3ZvaWQgMDplLmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3BlczplLnNjb3BlLHNlc3Npb25TdGF0ZTplLnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57dm9pZCAwIT09dFtlXSYmIiIhPT10W2VdJiZudWxsIT09dFtlXXx8ZGVsZXRlIHRbZV19KSkscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sciksdCkscn0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKS5pZF90b2tlbjtyZXR1cm4gU24uZGVjb2RlSURUb2tlbihlKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZighZSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCk7cmV0dXJuIHd0LmdldCh0KS50aGVuKChlPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiAyMDAhPT1lLnN0YXR1cz9Qcm9taXNlLnJlamVjdChuZXcgQXQoIkFVVEhfQ09SRS1HT1BNLU5SMDEiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IHRvIGdldCB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk6KHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKGUuZGF0YSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCEwKSl9KSkpKS5jYXRjaCgoKCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRmFsbGJhY2tFbmRwb2ludHMoKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoITApfSkpKSl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDplLmF1dGhvcml6YXRpb25fZW5kcG9pbnQsY2hlY2tTZXNzaW9uSWZyYW1lOmUuY2hlY2tfc2Vzc2lvbl9pZnJhbWUsZW5kU2Vzc2lvbkVuZHBvaW50OmUuZW5kX3Nlc3Npb25fZW5kcG9pbnQsaW50cm9zcGVjdGlvbkVuZHBvaW50OmUuaW50cm9zcGVjdGlvbl9lbmRwb2ludCxpc3N1ZXI6ZS5pc3N1ZXIsandrc1VyaTplLmp3a3NfdXJpLHJlZ2lzdHJhdGlvbkVuZHBvaW50OmUucmVnaXN0cmF0aW9uX2VuZHBvaW50LHJldm9jYXRpb25FbmRwb2ludDplLnJldm9jYXRpb25fZW5kcG9pbnQsdG9rZW5FbmRwb2ludDplLnRva2VuX2VuZHBvaW50LHVzZXJpbmZvRW5kcG9pbnQ6ZS51c2VyaW5mb19lbmRwb2ludCx3ZWxsS25vd25FbmRwb2ludDp5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKX19KSl9Z2V0U2lnbk91dFVSTCgpe3ZhciBlLHQscjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPW51bGw9PT0oZT15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludCxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFufHwwPT09bi50cmltKCkubGVuZ3RoKXRocm93IG5ldyBBdCgiQVVUSF9DT1JFLUdTT1UtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IG89bnVsbD09PSh0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pZF90b2tlbjtpZighb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgQXQoIkFVVEhfQ09SRS1HU09VLU5GMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwiZ2V0U2lnbk91dFVSTCIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBzPW51bGwhPT0ocj1udWxsPT1pP3ZvaWQgMDppLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PXI/cjpudWxsPT1pP3ZvaWQgMDppLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBBdCgiQVVUSF9DT1JFLUdTT1UtTkYwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7bn0/aWRfdG9rZW5faGludD0ke299JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke3N9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfXNpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0U2lnbk91dFVSTCgpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLGV9KSl9Z2V0QWNjZXNzVG9rZW4oKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKX0pKX1nZXRQS0NFQ29kZSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIil9KSl9c2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiLGUpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSxlLm92ZXJyaWRlV2VsbEVuZHBvaW50Q29uZmlnPyhudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh7fSkpKToobnVsbD09ZT92b2lkIDA6ZS5lbmRwb2ludHMpJiYoeWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCkpfSkpfX1jbGFzcyBSbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fc3RvcmU9dH1zZXREYXRhSW5CdWxrKGUsdCl7dmFyIHI7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9biYmSlNPTi5wYXJzZShuKSxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx0KSxzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1zZXRWYWx1ZShlLHQscil7dmFyIG47cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLG89aSYmSlNPTi5wYXJzZShpKSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3RdOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHQpe3ZhciByO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPW4mJkpTT04ucGFyc2Uobiksbz1PYmplY3QuYXNzaWduKHt9LGkpO2RlbGV0ZSBvW3RdO2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfV9yZXNvbHZlS2V5KGUpe3JldHVybmAke2V9LSR7dGhpcy5faWR9YH1zZXRDb25maWdEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpLGUpfSkpfXNldFNlc3Npb25EYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlKX0pKX1nZXRDb25maWdEYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YSgpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldFNlc3Npb25EYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSxlLHQpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSxlLHQpfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSx0KX0pKX1zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSksZSx0KX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSxlKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpLGUpfSkpfXJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSksZSl9KSl9fWNvbnN0IENuPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6eXQucXVlcnksc2NvcGU6WyJvcGVuaWQiXSxzZW5kQ29va2llc0luUmVxdWVzdHM6ITAsdmFsaWRhdGVJRFRva2VuOiEwfTtjbGFzcyBQbnsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlKXtQbi5faW5zdGFuY2VJRD9Qbi5faW5zdGFuY2VJRCs9MTpQbi5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgUm4oYGluc3RhbmNlXyR7UG4uX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IFRuKHRoaXMuX2RhdGFMYXllcikKLyoqCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICogICAgIGNsaWVudElEOiAiY2xpZW50IElEIiwKICAgICAgICAgKiAgICAgc2VydmVyT3JpZ2luOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLmluaXRpYWxpemUoY29uZmlnKTsKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpbml0aWFsaXplCiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi99aW5pdGlhbGl6ZShlKXt2YXIgdCxyLG47cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sQ24pLGUpLHtzY29wZTpbLi4ubnVsbCE9PSh0PUNuLnNjb3BlKSYmdm9pZCAwIT09dD90OltdLC4uLm51bGwhPT0obj1udWxsPT09KHI9ZS5zY29wZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZmlsdGVyKChlPT57dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09Q24/dm9pZCAwOkNuLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1uP246W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RBY2Nlc3NUb2tlbihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QXhpb3NSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAqIG9uIHlvdXIgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgKiAgIGRhdGE6IHsKICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICogICAgICAgc2NvcGU6ICJ7e3Njb3BlfX0iLAogICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgKiAgIH0sCiAgICAgICAgICogICBpZDogImFjY291bnQtc3dpdGNoIiwKICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICogICBzaWduSW5SZXF1aXJlZDogdHJ1ZQogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF1dGgucmVxdWVzdEN1c3RvbUdyYW50KGNvbmZpZykudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2lzQXV0aGVudGljYXRlZCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuaXNBdXRoZW50aWNhdGVkKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNvbnN0IERuPSJpbml0Ijt2YXIgT24sSW47IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifShPbnx8KE9uPXt9KSksZnVuY3Rpb24oZSl7ZS5TaWduSW49InNpZ24taW4iLGUuU2lnbk91dD0ic2lnbi1vdXQiLGUuSW5pdGlhbGl6ZT0iaW5pdGlhbGl6ZSIsZS5IdHRwUmVxdWVzdFN0YXJ0PSJodHRwLXJlcXVlc3Qtc3RhcnQiLGUuSHR0cFJlcXVlc3RGaW5pc2g9Imh0dHAtcmVxdWVzdC1maW5pc2giLGUuSHR0cFJlcXVlc3RFcnJvcj0iaHR0cC1yZXF1ZXN0LWVycm9yIixlLkh0dHBSZXF1ZXN0U3VjY2Vzcz0iaHR0cC1yZXF1ZXN0LXN1Y2Nlc3MiLGUuUmV2b2tlQWNjZXNzVG9rZW49InJldm9rZS1hY2Nlc3MtdG9rZW4iLGUuQ3VzdG9tR3JhbnQ9ImN1c3RvbS1ncmFudCJ9KElufHwoSW49e30pKTtjb25zdCBVbj0iY3VzdG9tX2dyYW50X2NvbmZpZyI7Y2xhc3MgTW4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQscixuLGksbyl7c3VwZXIobnVsbCE9bj9uOm51bGw9PW8/dm9pZCAwOm8ubWVzc2FnZSksdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLmNvZGU9ZSx0aGlzLmZpbGU9dCx0aGlzLm1ldGhvZD1yLHRoaXMuZXJyb3I9byx0aGlzLmRlc2NyaXB0aW9uPWksT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsbmV3LnRhcmdldC5wcm90b3R5cGUpfX1jbGFzcyBMbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKHQucmVmcmVzaF90b2tlbil7Y29uc3Qgcj1wYXJzZUludCh0LmV4cGlyZXNfaW4pLG49c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX0pKSksMWUzKihyPD0xMD9yOnItMTApKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihrdCxKU09OLnN0cmluZ2lmeShuKSl9fSkpfWNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QpKXtjb25zdCBlPUpTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QpKTtjbGVhclRpbWVvdXQoZSl9fSkpfX1jbGFzcyBIbntjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19c3RhdGljIGdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUudG9KU09OKSYmZGVsZXRlIGUudG9KU09OLHtlcnJvcjpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITF9fX12YXIgeG47bGV0IGpuPXhuPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPXd0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IHhuKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD13dC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD13dC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLHI9bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntyLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1yfXJldHVybiB4bi5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyB4bi5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4geG4uaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eG4uaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49cn0pKX1lbmFibGVIYW5kbGVyKCl7eG4uaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe3huLmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPXhuLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe3huLmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9Pnt4bi5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O2puLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLGpuPXhuPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1uP249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOm47aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsbik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQscixzKTppKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9KFtlPT57fV0sam4pO2NsYXNzIEJue2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQscil9KSl9Z2V0RGF0YSh0KXt2YXIgcixuO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0obj1udWxsPT09KHI9dGhpcy5fZGF0YSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpKSYmdm9pZCAwIT09bj9uOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX1jb25zdCBxbj1zZWxmO2xldCBObjtxbi5vbm1lc3NhZ2U9KHtkYXRhOnQscG9ydHM6cn0pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgbixpLG87Y29uc3Qgcz1yWzBdO2lmKHQudHlwZT09PURufHxObilzd2l0Y2godC50eXBlKXtjYXNlIERuOnRyeXtjb25zdCByPU9iamVjdC5hc3NpZ24oe30sdC5kYXRhKTtObj15aWVsZCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPW5ldyBCbixuPW5ldyBQbihyKTt5aWVsZCBuLmluaXRpYWxpemUodCk7Y29uc3QgaT1uZXcgTG4obiksbz1uLmdldERhdGFMYXllcigpLHM9am4uZ2V0SW5zdGFuY2UoKTsobnVsbD09cz92b2lkIDA6cy5pbml0KSYmKHlpZWxkIHMuaW5pdCghMCwodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7T2JqZWN0LmFzc2lnbih7YXR0YWNoVG9rZW46ITB9LHQpLmF0dGFjaFRva2VuJiYodC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHt5aWVsZCBuLmdldEFjY2Vzc1Rva2VuKCl9YH0pKX0pKSkpKTtjb25zdCBhPXQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciByLHMsYTtsZXQgdT0hMCxjPSExO2NvbnN0IGg9eWllbGQgby5nZXRDb25maWdEYXRhKCk7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXt1PSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0ocz1udWxsPT09KHI9eWllbGQgby5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PXM/czpbXSxudWxsPT1oP3ZvaWQgMDpoLnNlcnZlck9yaWdpbl0paWYobnVsbD09PShhPXQudG9rZW5FbmRwb2ludCl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3RhcnRzV2l0aChlKSl7Yz0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZvLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoVW4sSlNPTi5zdHJpbmdpZnkodCkpLHV8fGM/bi5yZXF1ZXN0Q3VzdG9tR3JhbnQodCkudGhlbigocj0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHQucmV0dXJuc1Nlc3Npb24/KGkucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLG4uZ2V0QmFzaWNVc2VySW5mbygpKTpyfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IE1uKCJXT1JLRVJfQ09SRS1SQ0ctSVYwMSIsIndvcmtlci1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksdT0oKT0+bi5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+KGMoKS50aGVuKChlPT57ZSYmYShlKX0pKSxpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxuLmdldEJhc2ljVXNlckluZm8oKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSxjPSgpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIG8uZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihVbik7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpO3JldHVybntkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntzLmRpc2FibGVIYW5kbGVyJiZzLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57cy5lbmFibGVIYW5kbGVyJiZzLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9Pm4uZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnlpZWxkIG4uZ2V0UEtDRUNvZGUoKX19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgbi5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixuO2xldCBpPSExO2NvbnN0IGE9eWllbGQgby5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IHMgb2ZbLi4ubnVsbCE9PShyPW51bGw9PT0oZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cj9yOltdLG51bGw9PWE/dm9pZCAwOmEuc2VydmVyT3JpZ2luXSlpZihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC51cmwpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnN0YXJ0c1dpdGgocykpe2k9ITA7YnJlYWt9cmV0dXJuIGk/cy5yZXF1ZXN0KHQpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT57dmFyIHI7cmV0dXJuIDQwMSE9PShudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzKSYmKG51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpP1Byb21pc2UucmVqZWN0KGUpOnUoKS50aGVuKCgoKT0+cy5yZXF1ZXN0KHQpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBNbigiV09SS0VSX0NPUkUtSFItRVMwMSIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3QiLCIiLCIiLGUpKSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBNbigiV09SS0VSX0NPUkUtSFItSVYwMiIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3QiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxyLGk7bGV0IGE9ITA7Y29uc3QgdT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgbiBvZiB0KXtsZXQgdD0hMTtmb3IoY29uc3QgcyBvZlsuLi5udWxsIT09KHI9bnVsbD09PShlPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1yP3I6W10sbnVsbD09dT92b2lkIDA6dS5zZXJ2ZXJPcmlnaW5dKWlmKG51bGw9PT0oaT1uLnVybCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc3RhcnRzV2l0aChzKSl7dD0hMDticmVha31pZighdCl7YT0hMTticmVha319Y29uc3QgYz1bXTtyZXR1cm4gYT8odC5mb3JFYWNoKChlPT57Yy5wdXNoKHMucmVxdWVzdChlKSl9KSksKG51bGw9PXM/dm9pZCAwOnMuYWxsKSYmcy5hbGwoYykudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9Pnt2YXIgdDtyZXR1cm4gNDAxPT09KG51bGw9PT0odD1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zdGF0dXMpP24ucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PnMuYWxsJiZzLmFsbChjKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgTW4oIldPUktFUl9DT1JFLUhSQS1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdEFsbCIsIiIsIiIsZSkpKSk6UHJvbWlzZS5yZWplY3QoZSl9KSkpOlByb21pc2UucmVqZWN0KG5ldyBNbigiV09SS0VSX0NPUkUtSFJBLUlWMDIiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0IiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5uLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjp1LHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxyLHMpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpO3JldHVybiBzJiZlLmVuYWJsZVBLQ0UmJih5aWVsZCBuLnNldFBLQ0VDb2RlKHMpKSx0P24ucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9cj9yOiIiKS50aGVuKCgoKT0+KGkucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLG4uZ2V0QmFzaWNVc2VySW5mbygpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBNbigiV09SS0VSX0NPUkUtUkFUMS1ORjAxIiwid29ya2VyLWNvcmUiLCJyZXF1ZXN0QWNjZXNzVG9rZW4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBmb3VuZC4iKSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OmEscmV2b2tlQWNjZXNzVG9rZW46KCk9Pm4ucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+KGkuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT1zP3ZvaWQgMDpzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgbi5zaWduT3V0KCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLGkucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBuLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKHIpLE5uLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soWW4pLE5uLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhLbiksTm4uc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soRm4pLHMucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpObi5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOk5uLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNlc3Npb25TdGF0ZSxudWxsPT09KG89bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bz92b2lkIDA6by5wa2NlKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOk5uLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6Tm4uaHR0cFJlcXVlc3RBbGwodC5kYXRhKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5zaWduT3V0KCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOk5uLnJlcXVlc3RDdXN0b21HcmFudCh0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOk5uLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgTm4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIE5uLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6Tm4uZW5hYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6Tm4uZGlzYWJsZUh0dHBIYW5kbGVyKCkscy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiaXNfYXV0aGVudGljYXRlZCI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIE5uLmdldFNpZ25PdXRVUkwoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzdGFydF9hdXRvX3JlZnJlc2hfdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoTm4uc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgTm4uc2V0U2Vzc2lvblN0YXRlKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi51cGRhdGVDb25maWcobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfY29uZmlnX2RhdGEiOnRyeXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgTm4uZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PXN8fHMucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgTW4oIkNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsImNsaWVudC53b3JrZXIiLCJvbm1lc3NhZ2UiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIixgVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgJHt0LnR5cGV9LCBpcyBpbnZhbGlkLmApKSl9ZWxzZSBzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IE1uKCJDTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJjbGllbnQud29ya2VyIix0LnR5cGUsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgS249KCk9Pntxbi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0sRm49ZT0+e3FuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxZbj0oKT0+e3FuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX07cmV0dXJue319KCk7Cgo=",null,!1,function(t){return $i=$i||function(t,n,l){var i=void 0===n?null:n,e=function(t,n){var l=atob(t);if(n){for(var i=new Uint8Array(l.length),e=0,c=l.length;e<c;++e)i[e]=l.charCodeAt(e);return String.fromCharCode.apply(null,new Uint16Array(i.buffer))}return l}(t,void 0!==l&&l),c=e.indexOf("\n",10)+1,o=e.substring(c)+(i?"//# sourceMappingURL="+i:""),d=new Blob([o],{type:"application/javascript"});return URL.createObjectURL(d)}("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwp2YXIgd29ya2VyX2NvZGU9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gZShlLHQscixuKXtyZXR1cm4gbmV3KHJ8fChyPVByb21pc2UpKSgoZnVuY3Rpb24oaSxvKXtmdW5jdGlvbiBzKGUpe3RyeXt1KG4ubmV4dChlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gYShlKXt0cnl7dShuLnRocm93KGUpKX1jYXRjaChlKXtvKGUpfX1mdW5jdGlvbiB1KGUpe3ZhciB0O2UuZG9uZT9pKGUudmFsdWUpOih0PWUudmFsdWUsdCBpbnN0YW5jZW9mIHI/dDpuZXcgcigoZnVuY3Rpb24oZSl7ZSh0KX0pKSkudGhlbihzLGEpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pKX12YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHI9W10sbj1bXSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LG89ITE7ZnVuY3Rpb24gcygpe289ITA7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsaT1lLmxlbmd0aDt0PGk7Kyt0KXJbdF09ZVt0XSxuW2UuY2hhckNvZGVBdCh0KV09dDtuWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIGksbyxzPVtdLGE9dDthPG47YSs9MylpPShlW2FdPDwxNikrKGVbYSsxXTw8OCkrZVthKzJdLHMucHVzaChyWyhvPWkpPj4xOCY2M10rcltvPj4xMiY2M10rcltvPj42JjYzXStyWzYzJm9dKTtyZXR1cm4gcy5qb2luKCIiKX1mdW5jdGlvbiB1KGUpe3ZhciB0O298fHMoKTtmb3IodmFyIG49ZS5sZW5ndGgsaT1uJTMsdT0iIixjPVtdLGg9MTYzODMsbD0wLGY9bi1pO2w8ZjtsKz1oKWMucHVzaChhKGUsbCxsK2g+Zj9mOmwraCkpO3JldHVybiAxPT09aT8odD1lW24tMV0sdSs9clt0Pj4yXSx1Kz1yW3Q8PDQmNjNdLHUrPSI9PSIpOjI9PT1pJiYodD0oZVtuLTJdPDw4KStlW24tMV0sdSs9clt0Pj4xMF0sdSs9clt0Pj40JjYzXSx1Kz1yW3Q8PDImNjNdLHUrPSI9IiksYy5wdXNoKHUpLGMuam9pbigiIil9ZnVuY3Rpb24gYyhlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiBoKGUsdCxyLG4saSxvKXt2YXIgcyxhLHUsYz04Km8taS0xLGg9KDE8PGMpLTEsbD1oPj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpvLTEscD1uPzE6LTEsZz10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLHM9aCk6KHM9TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoodT1NYXRoLnBvdygyLC1zKSk8MSYmKHMtLSx1Kj0yKSwodCs9cytsPj0xP2YvdTpmKk1hdGgucG93KDIsMS1sKSkqdT49MiYmKHMrKyx1Lz0yKSxzK2w+PWg/KGE9MCxzPWgpOnMrbD49MT8oYT0odCp1LTEpKk1hdGgucG93KDIsaSkscys9bCk6KGE9dCpNYXRoLnBvdygyLGwtMSkqTWF0aC5wb3coMixpKSxzPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iocz1zPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqZ312YXIgbD17fS50b1N0cmluZyxmPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWwuY2FsbChlKX07ZnVuY3Rpb24gZCgpe3JldHVybiBnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIHAoZSx0KXtpZihkKCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU6KG51bGw9PT1lJiYoZT1uZXcgZyh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBnKGUsdCxyKXtpZighKGcuVFlQRURfQVJSQVlfU1VQUE9SVHx8dGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhlLHQscik7aWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBtKHRoaXMsZSl9cmV0dXJuIHYodGhpcyxlLHQscil9ZnVuY3Rpb24gdihlLHQscixuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9mdW5jdGlvbihlLHQscixuKXtpZih0LmJ5dGVMZW5ndGgscjwwfHx0LmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kcyIpO2lmKHQuYnl0ZUxlbmd0aDxyKyhufHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kcyIpO3Q9dm9pZCAwPT09ciYmdm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQscik6bmV3IFVpbnQ4QXJyYXkodCxyLG4pO2cuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189Zy5wcm90b3R5cGU6ZT13KGUsdCk7cmV0dXJuIGV9KGUsdCxyLG4pOiJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbihlLHQscil7InN0cmluZyI9PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIWcuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGsodCxyKSxpPShlPXAoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYoXyh0KSl7dmFyIHI9MHxiKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXAoZSxyKSkubGVuZ3RofHx0LmNvcHkoZSwwLDAsciksZX1pZih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHwibGVuZ3RoImluIHQpcmV0dXJuIm51bWJlciIhPXR5cGVvZiB0Lmxlbmd0aHx8KG49dC5sZW5ndGgpIT1uP3AoZSwwKTp3KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJmYodC5kYXRhKSlyZXR1cm4gdyhlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIHkoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiBtKGUsdCl7aWYoeSh0KSxlPXAoZSx0PDA/MDowfGIodCkpLCFnLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciByPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9ZnVuY3Rpb24gdyhlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfGIodC5sZW5ndGgpO2U9cChlLHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKWVbbl09MjU1JnRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gYihlKXtpZihlPj1kKCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2QoKS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gayhlLHQpe2lmKF8oZSkpcmV0dXJuIGUubGVuZ3RoO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIGUmJihlPSIiK2UpO3ZhciByPWUubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaCh0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuICQoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBHKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuICQoZSkubGVuZ3RoO3Q9KCIiK3QpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gUyhlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBqKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4gSCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBVKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEIodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gQShlLHQscil7dmFyIG49ZVt0XTtlW3RdPWVbcl0sZVtyXT1ufWZ1bmN0aW9uIEUoZSx0LHIsbixpKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLGlzTmFOKHIpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWcuZnJvbSh0LG4pKSxfKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6VChlLHQscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdCY9MjU1LGcuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOlQoZSxbdF0scixuLGkpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFQoZSx0LHIsbixpKXt2YXIgbyxzPTEsYT1lLmxlbmd0aCx1PXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJigidWNzMiI9PT0obj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1ufHwidXRmMTZsZSI9PT1ufHwidXRmLTE2bGUiPT09bikpe2lmKGUubGVuZ3RoPDJ8fHQubGVuZ3RoPDIpcmV0dXJuLTE7cz0yLGEvPTIsdS89MixyLz0yfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gMT09PXM/ZVt0XTplLnJlYWRVSW50MTZCRSh0KnMpfWlmKGkpe3ZhciBoPS0xO2ZvcihvPXI7bzxhO28rKylpZihjKGUsbyk9PT1jKHQsLTE9PT1oPzA6by1oKSl7aWYoLTE9PT1oJiYoaD1vKSxvLWgrMT09PXUpcmV0dXJuIGgqc31lbHNlLTEhPT1oJiYoby09by1oKSxoPS0xfWVsc2UgZm9yKHIrdT5hJiYocj1hLXUpLG89cjtvPj0wO28tLSl7Zm9yKHZhciBsPSEwLGY9MDtmPHU7ZisrKWlmKGMoZSxvK2YpIT09Yyh0LGYpKXtsPSExO2JyZWFrfWlmKGwpcmV0dXJuIG99cmV0dXJuLTF9ZnVuY3Rpb24gUihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gQyhlLHQscixuKXtyZXR1cm4gWCgkKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFAoZSx0LHIsbil7cmV0dXJuIFgoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBEKGUsdCxyLG4pe3JldHVybiBQKGUsdCxyLG4pfWZ1bmN0aW9uIE8oZSx0LHIsbil7cmV0dXJuIFgoRyh0KSxlLHIsbil9ZnVuY3Rpb24gSShlLHQscixuKXtyZXR1cm4gWChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFUoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP3UoZSk6dShlLnNsaWNlKHQscikpfWZ1bmN0aW9uIE0oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9dDtpPHI7KXt2YXIgbyxzLGEsdSxjPWVbaV0saD1udWxsLGw9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2w8PXIpc3dpdGNoKGwpe2Nhc2UgMTpjPDEyOCYmKGg9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW2krMV0pKSYmKHU9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKGg9dSk7YnJlYWs7Y2FzZSAzOm89ZVtpKzFdLHM9ZVtpKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYodT0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZzKT4yMDQ3JiYodTw1NTI5Nnx8dT41NzM0MykmJihoPXUpO2JyZWFrO2Nhc2UgNDpvPWVbaSsxXSxzPWVbaSsyXSxhPWVbaSszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmMTI4PT0oMTkyJmEpJiYodT0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJnMpPDw2fDYzJmEpPjY1NTM1JiZ1PDExMTQxMTImJihoPXUpfW51bGw9PT1oPyhoPTY1NTMzLGw9MSk6aD42NTUzNSYmKGgtPTY1NTM2LG4ucHVzaChoPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG4ucHVzaChoKSxpKz1sfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1MKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTt2YXIgcj0iIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz1MKSk7cmV0dXJuIHJ9KG4pfWcuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDA9PT10LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHQuVFlQRURfQVJSQVlfU1VQUE9SVCxnLnBvb2xTaXplPTgxOTIsZy5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189Zy5wcm90b3R5cGUsZX0sZy5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdihudWxsLGUsdCxyKX0sZy5UWVBFRF9BUlJBWV9TVVBQT1JUJiYoZy5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGcuX19wcm90b19fPVVpbnQ4QXJyYXkpLGcuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4geSh0KSx0PD0wP3AoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9wKGUsdCkuZmlsbChyLG4pOnAoZSx0KS5maWxsKHIpOnAoZSx0KX0obnVsbCxlLHQscil9LGcuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG0obnVsbCxlKX0sZy5pc0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFooZSl8fGZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5zbGljZSYmWihlLnNsaWNlKDAsMCkpfShlKSl9LGcuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKCFfKGUpfHwhXyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sZy5pc0VuY29kaW5nPWZ1bmN0aW9uKGUpe3N3aXRjaChTdHJpbmcoZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxnLmNvbmNhdD1mdW5jdGlvbihlLHQpe2lmKCFmKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGcuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09dClmb3IodD0wLHI9MDtyPGUubGVuZ3RoOysrcil0Kz1lW3JdLmxlbmd0aDt2YXIgbj1nLmFsbG9jVW5zYWZlKHQpLGk9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbz1lW3JdO2lmKCFfKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sZy5ieXRlTGVuZ3RoPWssZy5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGcucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilBKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpQSh0aGlzLHQsdCszKSxBKHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OClBKHRoaXMsdCx0KzcpLEEodGhpcyx0KzEsdCs2KSxBKHRoaXMsdCsyLHQrNSksQSh0aGlzLHQrMyx0KzQpO3JldHVybiB0aGlzfSxnLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBlPTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1lPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP00odGhpcywwLGUpOlMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7aWYoIV8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PWcuY29tcGFyZSh0aGlzLGUpfSxnLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCw1MCkubWF0Y2goLy57Mn0vZykuam9pbigiICIpLHRoaXMubGVuZ3RoPjUwJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGcucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighXyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxzPShyPj4+PTApLSh0Pj4+PTApLGE9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixpKSxjPWUuc2xpY2UodCxyKSxoPTA7aDxhOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGcucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LGcucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBFKHRoaXMsZSx0LHIsITApfSxnLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIEUodGhpcyxlLHQsciwhMSl9LGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj0idXRmOCIscj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIHQpbj10LHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKHIpPyhyfD0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBSKHRoaXMsZSx0LHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyxlLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRCh0aGlzLGUsdCxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIE8odGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBJKHRoaXMsZSx0LHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LGcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEw9NDA5NjtmdW5jdGlvbiBIKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7dmFyIG49IiI7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIGk9dDtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaihlLHQscil7dmFyIG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLG89dDtvPHI7KytvKWkrPVYoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gQihlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPSIiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIHEoZSx0LHIpe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpLG8pe2lmKCFfKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0Pml8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBLKGUsdCxyLG4pe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKGUubGVuZ3RoLXIsMik7aTxvOysraSllW3IraV09KHQmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBGKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIFkoZSx0LHIsbixpLG8pe2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsNCksaChlLHQscixuLDIzLDQpLHIrNH1mdW5jdGlvbiB6KGUsdCxyLG4saSl7cmV0dXJuIGl8fFkoZSwwLHIsOCksaChlLHQscixuLDUyLDgpLHIrOH1nLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1uKTwwJiYoZT0wKTplPm4mJihlPW4pLCh0PXZvaWQgMD09PXQ/bjp+fnQpPDA/KHQrPW4pPDAmJih0PTApOnQ+biYmKHQ9biksdDxlJiYodD1lKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQpKHI9dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189Zy5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgZyhpLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxpOysrbylyW29dPXRoaXNbbytlXX1yZXR1cm4gcn0sZy5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fHEoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LGcucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxxKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxnLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8cShlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGcucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGcucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fHEoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxnLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxxKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLG89MDsrK288dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStvXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0sZy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8cShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10LGk9MSxvPXRoaXNbZSstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbZSstLW5dKmk7cmV0dXJuIG8+PShpKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxnLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGcucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8cShlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxnLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fHEoZSwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sZy5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8cShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sZy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8cShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sZy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8cShlLDQsdGhpcy5sZW5ndGgpLGModGhpcyxlLCEwLDIzLDQpfSxnLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsNCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsMjMsNCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITAsNTIsOCl9LGcucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxxKGUsOCx0aGlzLmxlbmd0aCksYyh0aGlzLGUsITEsNTIsOCl9LGcucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8Tih0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBpPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxyJiYoaSo9MjU2KTspdGhpc1t0K29dPWUvaSYyNTU7cmV0dXJuIHQrcn0sZy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7KGU9K2UsdHw9MCxyfD0wLG4pfHxOKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9ci0xLG89MTtmb3IodGhpc1t0K2ldPTI1NSZlOy0taT49MCYmKG8qPTI1Nik7KXRoaXNbdCtpXT1lL28mMjU1O3JldHVybiB0K3J9LGcucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDI1NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbdF09MjU1JmUsdCsxfSxnLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsMiw2NTUzNSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwyLDY1NTM1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOksodGhpcyxlLHQsITEpLHQrMn0sZy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSk6Rih0aGlzLGUsdCwhMCksdCs0fSxnLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLGcuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzR9LGcucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oZSx0LHIsbil7aWYoZT0rZSx0fD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgbz0wLHM9MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28tMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLGUsdCxyLGktMSwtaSl9dmFyIG89ci0xLHM9MSxhPTA7Zm9yKHRoaXNbdCtvXT0yNTUmZTstLW8+PTAmJihzKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K28rMV0mJihhPTEpLHRoaXNbdCtvXT0oZS9zPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxnLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8Tih0aGlzLGUsdCwxLDEyNywtMTI4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1t0XT0yNTUmZSx0KzF9LGcucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09MjU1JmUsdGhpc1t0KzFdPWU+Pj44KTpLKHRoaXMsZSx0LCEwKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpLKHRoaXMsZSx0LCExKSx0KzJ9LGcucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxOKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZy5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOkYodGhpcyxlLHQsITApLHQrNH0sZy5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fE4odGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxnLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCs0fSxnLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCEwLHIpfSxnLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBXKHRoaXMsZSx0LCExLHIpfSxnLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4geih0aGlzLGUsdCwhMCxyKX0sZy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHoodGhpcyxlLHQsITEscil9LGcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSx0LHIsbil7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihyPDB8fHI+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC10PG4tciYmKG49ZS5sZW5ndGgtdCtyKTt2YXIgaSxvPW4tcjtpZih0aGlzPT09ZSYmcjx0JiZ0PG4pZm9yKGk9by0xO2k+PTA7LS1pKWVbaSt0XT10aGlzW2krcl07ZWxzZSBpZihvPDFlM3x8IWcuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LGcucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigic3RyaW5nIj09dHlwZW9mIHQ/KG49dCx0PTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIGk9ZS5jaGFyQ29kZUF0KDApO2k8MjU2JiYoZT1pKX1pZih2b2lkIDAhPT1uJiYic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWcuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pfWVsc2UibnVtYmVyIj09dHlwZW9mIGUmJihlJj0yNTUpO2lmKHQ8MHx8dGhpcy5sZW5ndGg8dHx8dGhpcy5sZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocjw9dClyZXR1cm4gdGhpczt2YXIgbztpZih0Pj4+PTAscj12b2lkIDA9PT1yP3RoaXMubGVuZ3RoOnI+Pj4wLGV8fChlPTApLCJudW1iZXIiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIHM9XyhlKT9lOiQobmV3IGcoZSxuKS50b1N0cmluZygpKSxhPXMubGVuZ3RoO2ZvcihvPTA7bzxyLXQ7KytvKXRoaXNbbyt0XT1zW28lYV19cmV0dXJuIHRoaXN9O3ZhciBKPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIFYoZSl7cmV0dXJuIGU8MTY/IjAiK2UudG9TdHJpbmcoMTYpOmUudG9TdHJpbmcoMTYpfWZ1bmN0aW9uICQoZSx0KXt2YXIgcjt0PXR8fDEvMDtmb3IodmFyIG49ZS5sZW5ndGgsaT1udWxsLG89W10scz0wO3M8bjsrK3Mpe2lmKChyPWUuY2hhckNvZGVBdChzKSk+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYocysxPT09bil7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9NjU1MzYrKGktNTUyOTY8PDEwfHItNTYzMjApfWVsc2UgaSYmKHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodC09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsYSx1LGMsaDtvfHxzKCk7dmFyIGw9ZS5sZW5ndGg7aWYobCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7Yz0iPSI9PT1lW2wtMl0/MjoiPSI9PT1lW2wtMV0/MTowLGg9bmV3IGkoMypsLzQtYyksYT1jPjA/bC00Omw7dmFyIGY9MDtmb3IodD0wLHI9MDt0PGE7dCs9NCxyKz0zKXU9bltlLmNoYXJDb2RlQXQodCldPDwxOHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8MTJ8bltlLmNoYXJDb2RlQXQodCsyKV08PDZ8bltlLmNoYXJDb2RlQXQodCszKV0saFtmKytdPXU+PjE2JjI1NSxoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1O3JldHVybiAyPT09Yz8odT1uW2UuY2hhckNvZGVBdCh0KV08PDJ8bltlLmNoYXJDb2RlQXQodCsxKV0+PjQsaFtmKytdPTI1NSZ1KToxPT09YyYmKHU9bltlLmNoYXJDb2RlQXQodCldPDwxMHxuW2UuY2hhckNvZGVBdCh0KzEpXTw8NHxuW2UuY2hhckNvZGVBdCh0KzIpXT4+MixoW2YrK109dT4+OCYyNTUsaFtmKytdPTI1NSZ1KSxofShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKEosIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO2UubGVuZ3RoJTQhPTA7KWUrPSI9IjtyZXR1cm4gZX0oZSkpfWZ1bmN0aW9uIFgoZSx0LHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49dC5sZW5ndGh8fGk+PWUubGVuZ3RoKTsrK2kpdFtpK3JdPWVbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuYXBwbHkodCxyKX19LGVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PWVlLmNhbGwoZSl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZnVuY3Rpb24gaWUoZSl7aWYoIltvYmplY3QgT2JqZWN0XSIhPT1lZS5jYWxsKGUpKXJldHVybiExO3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PXR8fHQ9PT1PYmplY3QucHJvdG90eXBlfWZ1bmN0aW9uIG9lKGUpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1lZS5jYWxsKGUpfWZ1bmN0aW9uIHNlKGUsdCl7aWYobnVsbCE9ZSlpZigib2JqZWN0IiE9dHlwZW9mIGUmJihlPVtlXSksdGUoZSkpZm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNlIGZvcih2YXIgaSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiZ0LmNhbGwobnVsbCxlW2ldLGksZSl9dmFyIGFlPXtpc0FycmF5OnRlLGlzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWVlLmNhbGwoZSl9LGlzQnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIXJlKGUpJiZudWxsIT09ZS5jb25zdHJ1Y3RvciYmIXJlKGUuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX0saXNGb3JtRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZSYmZS5idWZmZXImJmUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9LGlzU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfSxpc09iamVjdDpuZSxpc1BsYWluT2JqZWN0OmllLGlzVW5kZWZpbmVkOnJlLGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1lZS5jYWxsKGUpfSxpc0ZpbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgRmlsZV0iPT09ZWUuY2FsbChlKX0saXNCbG9iOmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEJsb2JdIj09PWVlLmNhbGwoZSl9LGlzRnVuY3Rpb246b2UsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIG5lKGUpJiZvZShlLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFVSTFNlYXJjaFBhcmFtcyYmZSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30saXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4oInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KX0sZm9yRWFjaDpzZSxtZXJnZTpmdW5jdGlvbiBlKCl7dmFyIHQ9e307ZnVuY3Rpb24gcihyLG4pe2llKHRbbl0pJiZpZShyKT90W25dPWUodFtuXSxyKTppZShyKT90W25dPWUoe30scik6dGUocik/dFtuXT1yLnNsaWNlKCk6dFtuXT1yfWZvcih2YXIgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKXNlKGFyZ3VtZW50c1tuXSxyKTtyZXR1cm4gdH0sZXh0ZW5kOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gc2UodCwoZnVuY3Rpb24odCxuKXtlW25dPXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0P1EodCxyKTp0fSkpLGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpbT9lLnRyaW0oKTplLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oZSl7cmV0dXJuIDY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApJiYoZT1lLnNsaWNlKDEpKSxlfX07ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9dmFyIGNlPWZ1bmN0aW9uKGUsdCxyKXtpZighdClyZXR1cm4gZTt2YXIgbjtpZihyKW49cih0KTtlbHNlIGlmKGFlLmlzVVJMU2VhcmNoUGFyYW1zKHQpKW49dC50b1N0cmluZygpO2Vsc2V7dmFyIGk9W107YWUuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPWUmJihhZS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0sYWUuZm9yRWFjaChlLChmdW5jdGlvbihlKXthZS5pc0RhdGUoZSk/ZT1lLnRvSVNPU3RyaW5nKCk6YWUuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxpLnB1c2godWUodCkrIj0iK3VlKGUpKX0pKSl9KSksbj1pLmpvaW4oIiYiKX1pZihuKXt2YXIgbz1lLmluZGV4T2YoIiMiKTstMSE9PW8mJihlPWUuc2xpY2UoMCxvKSksZSs9KC0xPT09ZS5pbmRleE9mKCI/Iik/Ij8iOiImIikrbn1yZXR1cm4gZX07ZnVuY3Rpb24gaGUoKXt0aGlzLmhhbmRsZXJzPVtdfWhlLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ISFyJiZyLnN5bmNocm9ub3VzLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LGhlLnByb3RvdHlwZS5lamVjdD1mdW5jdGlvbihlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX0saGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7YWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX07dmFyIGxlPWhlO2Z1bmN0aW9uIGZlKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZGUoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfXZhciBwZT1mZSxnZT1kZTtmdW5jdGlvbiB2ZShlKXtpZihwZT09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigocGU9PT1mZXx8IXBlKSYmc2V0VGltZW91dClyZXR1cm4gcGU9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBwZShlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gcGUuY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIHBlLmNhbGwodGhpcyxlLDApfX19ImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0VGltZW91dCYmKHBlPXNldFRpbWVvdXQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsZWFyVGltZW91dCYmKGdlPWNsZWFyVGltZW91dCk7dmFyIHllLG1lPVtdLHdlPSExLGJlPS0xO2Z1bmN0aW9uIF9lKCl7d2UmJnllJiYod2U9ITEseWUubGVuZ3RoP21lPXllLmNvbmNhdChtZSk6YmU9LTEsbWUubGVuZ3RoJiZrZSgpKX1mdW5jdGlvbiBrZSgpe2lmKCF3ZSl7dmFyIGU9dmUoX2UpO3dlPSEwO2Zvcih2YXIgdD1tZS5sZW5ndGg7dDspe2Zvcih5ZT1tZSxtZT1bXTsrK2JlPHQ7KXllJiZ5ZVtiZV0ucnVuKCk7YmU9LTEsdD1tZS5sZW5ndGh9eWU9bnVsbCx3ZT0hMSxmdW5jdGlvbihlKXtpZihnZT09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChnZT09PWRlfHwhZ2UpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGdlPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2dlKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gZ2UuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBnZS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFNlKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9U2UucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O2Z1bmN0aW9uIEFlKCl7fXZhciBFZT1BZSxUZT1BZSxSZT1BZSxDZT1BZSxQZT1BZSxEZT1BZSxPZT1BZTt2YXIgSWU9dC5wZXJmb3JtYW5jZXx8e30sVWU9SWUubm93fHxJZS5tb3pOb3d8fEllLm1zTm93fHxJZS5vTm93fHxJZS53ZWJraXROb3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O3ZhciBNZT1uZXcgRGF0ZTt2YXIgTGU9e25leHRUaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07bWUucHVzaChuZXcgU2UoZSx0KSksMSE9PW1lLmxlbmd0aHx8d2V8fHZlKGtlKX0sdGl0bGU6ImJyb3dzZXIiLGJyb3dzZXI6ITAsZW52Ont9LGFyZ3Y6W10sdmVyc2lvbjoiIix2ZXJzaW9uczp7fSxvbjpFZSxhZGRMaXN0ZW5lcjpUZSxvbmNlOlJlLG9mZjpDZSxyZW1vdmVMaXN0ZW5lcjpQZSxyZW1vdmVBbGxMaXN0ZW5lcnM6RGUsZW1pdDpPZSxiaW5kaW5nOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sY3dkOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxjaGRpcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx1bWFzazpmdW5jdGlvbigpe3JldHVybiAwfSxocnRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9LjAwMSpVZS5jYWxsKEllKSxyPU1hdGguZmxvb3IodCksbj1NYXRoLmZsb29yKHQlMSoxZTkpO3JldHVybiBlJiYoci09ZVswXSwobi09ZVsxXSk8MCYmKHItLSxuKz0xZTkpKSxbcixuXX0scGxhdGZvcm06ImJyb3dzZXIiLHJlbGVhc2U6e30sY29uZmlnOnt9LHVwdGltZTpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZS1NZSkvMWUzfX0sSGU9TGUseGU9ZnVuY3Rpb24oZSx0KXthZS5mb3JFYWNoKGUsKGZ1bmN0aW9uKHIsbil7biE9PXQmJm4udG9VcHBlckNhc2UoKT09PXQudG9VcHBlckNhc2UoKSYmKGVbdF09cixkZWxldGUgZVtuXSl9KSl9LGplPWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGUuY29uZmlnPXQsciYmKGUuY29kZT1yKSxlLnJlcXVlc3Q9bixlLnJlc3BvbnNlPWksZS5pc0F4aW9zRXJyb3I9ITAsZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dGhpcy5jb25maWcsY29kZTp0aGlzLmNvZGV9fSxlfSxCZT1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPW5ldyBFcnJvcihlKTtyZXR1cm4gamUobyx0LHIsbixpKX0scWU9YWUuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBzPVtdO3MucHVzaChlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCkpLGFlLmlzTnVtYmVyKHIpJiZzLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhZS5pc1N0cmluZyhuKSYmcy5wdXNoKCJwYXRoPSIrbiksYWUuaXNTdHJpbmcoaSkmJnMucHVzaCgiZG9tYWluPSIraSksITA9PT1vJiZzLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1zLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fSxOZT1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdLEtlPWFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gbihlKXt2YXIgbj1lO3JldHVybiB0JiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOiIvIj09PXIucGF0aG5hbWUuY2hhckF0KDApP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiBlPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciByPWFlLmlzU3RyaW5nKHQpP24odCk6dDtyZXR1cm4gci5wcm90b2NvbD09PWUucHJvdG9jb2wmJnIuaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sRmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWUuZGF0YSxpPWUuaGVhZGVycyxvPWUucmVzcG9uc2VUeXBlO2FlLmlzRm9ybURhdGEobikmJmRlbGV0ZSBpWyJDb250ZW50LVR5cGUiXTt2YXIgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZS5hdXRoKXt2YXIgYT1lLmF1dGgudXNlcm5hbWV8fCIiLHU9ZS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlLmF1dGgucGFzc3dvcmQpKToiIjtpLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShhKyI6Iit1KX12YXIgYyxoLGw9KGM9ZS5iYXNlVVJMLGg9ZS51cmwsYyYmIS9eKFthLXpdW2EtelxkXCtcLVwuXSo6KT9cL1wvL2kudGVzdChoKT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cLysvLCIiKTplfShjLGgpOmgpO2Z1bmN0aW9uIGYoKXtpZihzKXt2YXIgbj0iZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHM/ZnVuY3Rpb24oZSl7dmFyIHQscixuLGk9e307cmV0dXJuIGU/KGFlLmZvckVhY2goZS5zcGxpdCgiXG4iKSwoZnVuY3Rpb24oZSl7aWYobj1lLmluZGV4T2YoIjoiKSx0PWFlLnRyaW0oZS5zdWJzdHIoMCxuKSkudG9Mb3dlckNhc2UoKSxyPWFlLnRyaW0oZS5zdWJzdHIobisxKSksdCl7aWYoaVt0XSYmTmUuaW5kZXhPZih0KT49MClyZXR1cm47aVt0XT0ic2V0LWNvb2tpZSI9PT10PyhpW3RdP2lbdF06W10pLmNvbmNhdChbcl0pOmlbdF0/aVt0XSsiLCAiK3I6cn19KSksaSk6aX0ocy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbCxpPXtkYXRhOm8mJiJ0ZXh0IiE9PW8mJiJqc29uIiE9PW8/cy5yZXNwb25zZTpzLnJlc3BvbnNlVGV4dCxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpuLGNvbmZpZzplLHJlcXVlc3Q6c307IWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztyLnN0YXR1cyYmbiYmIW4oci5zdGF0dXMpP3QoQmUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxyLmNvbmZpZyxudWxsLHIucmVxdWVzdCxyKSk6ZShyKX0odCxyLGkpLHM9bnVsbH19aWYocy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksY2UobCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gcz9zLm9ubG9hZGVuZD1mOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7cyYmND09PXMucmVhZHlTdGF0ZSYmKDAhPT1zLnN0YXR1c3x8cy5yZXNwb25zZVVSTCYmMD09PXMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKSkmJnNldFRpbWVvdXQoZil9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKEJlKCJSZXF1ZXN0IGFib3J0ZWQiLGUsIkVDT05OQUJPUlRFRCIscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IoQmUoIk5ldHdvcmsgRXJyb3IiLGUsbnVsbCxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciB0PSJ0aW1lb3V0IG9mICIrZS50aW1lb3V0KyJtcyBleGNlZWRlZCI7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodD1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIoQmUodCxlLGUudHJhbnNpdGlvbmFsJiZlLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yPyJFVElNRURPVVQiOiJFQ09OTkFCT1JURUQiLHMpKSxzPW51bGx9LGFlLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBkPShlLndpdGhDcmVkZW50aWFsc3x8S2UobCkpJiZlLnhzcmZDb29raWVOYW1lP3FlLnJlYWQoZS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2QmJihpW2UueHNyZkhlYWRlck5hbWVdPWQpfSJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmFlLmZvckVhY2goaSwoZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT1uJiYiY29udGVudC10eXBlIj09PXQudG9Mb3dlckNhc2UoKT9kZWxldGUgaVt0XTpzLnNldFJlcXVlc3RIZWFkZXIodCxlKX0pKSxhZS5pc1VuZGVmaW5lZChlLndpdGhDcmVkZW50aWFscyl8fChzLndpdGhDcmVkZW50aWFscz0hIWUud2l0aENyZWRlbnRpYWxzKSxvJiYianNvbiIhPT1vJiYocy5yZXNwb25zZVR5cGU9ZS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uRG93bmxvYWRQcm9ncmVzcyYmcy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3MmJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZS5vblVwbG9hZFByb2dyZXNzKSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnByb21pc2UudGhlbigoZnVuY3Rpb24oZSl7cyYmKHMuYWJvcnQoKSxyKGUpLHM9bnVsbCl9KSksbnx8KG49bnVsbCkscy5zZW5kKG4pfSkpfSxZZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFdlKGUsdCl7IWFlLmlzVW5kZWZpbmVkKGUpJiZhZS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX12YXIgemUsSmU9e3RyYW5zaXRpb25hbDp7c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sYWRhcHRlcjooKCJ1bmRlZmluZWQiIT10eXBlb2YgWE1MSHR0cFJlcXVlc3R8fHZvaWQgMCE9PUhlJiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSGUpKSYmKHplPUZlKSx6ZSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtyZXR1cm4geGUodCwiQWNjZXB0IikseGUodCwiQ29udGVudC1UeXBlIiksYWUuaXNGb3JtRGF0YShlKXx8YWUuaXNBcnJheUJ1ZmZlcihlKXx8YWUuaXNCdWZmZXIoZSl8fGFlLmlzU3RyZWFtKGUpfHxhZS5pc0ZpbGUoZSl8fGFlLmlzQmxvYihlKT9lOmFlLmlzQXJyYXlCdWZmZXJWaWV3KGUpP2UuYnVmZmVyOmFlLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhXZSh0LCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpLGUudG9TdHJpbmcoKSk6YWUuaXNPYmplY3QoZSl8fHQmJiJhcHBsaWNhdGlvbi9qc29uIj09PXRbIkNvbnRlbnQtVHlwZSJdPyhXZSh0LCJhcHBsaWNhdGlvbi9qc29uIiksZnVuY3Rpb24oZSx0LHIpe2lmKGFlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksYWUudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWwscj10JiZ0LnNpbGVudEpTT05QYXJzaW5nLG49dCYmdC5mb3JjZWRKU09OUGFyc2luZyxpPSFyJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihpfHxuJiZhZS5pc1N0cmluZyhlKSYmZS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGUpe2lmKGkpe2lmKCJTeW50YXhFcnJvciI9PT1lLm5hbWUpdGhyb3cgamUoZSx0aGlzLCJFX0pTT05fUEFSU0UiKTt0aHJvdyBlfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfX07SmUuaGVhZGVycz17Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXtKZS5oZWFkZXJzW2VdPXt9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7SmUuaGVhZGVyc1tlXT1hZS5tZXJnZShZZSl9KSk7dmFyIFZlPUplLCRlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzfHxWZTtyZXR1cm4gYWUuZm9yRWFjaChyLChmdW5jdGlvbihyKXtlPXIuY2FsbChuLGUsdCl9KSksZX0sR2U9ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IWUuX19DQU5DRUxfXyl9O2Z1bmN0aW9uIFhlKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfXZhciBaZT1mdW5jdGlvbihlKXtyZXR1cm4gWGUoZSksZS5oZWFkZXJzPWUuaGVhZGVyc3x8e30sZS5kYXRhPSRlLmNhbGwoZSxlLmRhdGEsZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVxdWVzdCksZS5oZWFkZXJzPWFlLm1lcmdlKGUuaGVhZGVycy5jb21tb258fHt9LGUuaGVhZGVyc1tlLm1ldGhvZF18fHt9LGUuaGVhZGVycyksYWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKSwoZS5hZGFwdGVyfHxWZS5hZGFwdGVyKShlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gWGUoZSksdC5kYXRhPSRlLmNhbGwoZSx0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEdlKHQpfHwoWGUoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT0kZS5jYWxsKGUsdC5yZXNwb25zZS5kYXRhLHQucmVzcG9uc2UuaGVhZGVycyxlLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KHQpfSkpfSxRZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIHI9e30sbj1bInVybCIsIm1ldGhvZCIsImRhdGEiXSxpPVsiaGVhZGVycyIsImF1dGgiLCJwcm94eSIsInBhcmFtcyJdLG89WyJiYXNlVVJMIiwidHJhbnNmb3JtUmVxdWVzdCIsInRyYW5zZm9ybVJlc3BvbnNlIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXQiLCJ0aW1lb3V0TWVzc2FnZSIsIndpdGhDcmVkZW50aWFscyIsImFkYXB0ZXIiLCJyZXNwb25zZVR5cGUiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJtYXhDb250ZW50TGVuZ3RoIiwibWF4Qm9keUxlbmd0aCIsIm1heFJlZGlyZWN0cyIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIl0scz1bInZhbGlkYXRlU3RhdHVzIl07ZnVuY3Rpb24gYShlLHQpe3JldHVybiBhZS5pc1BsYWluT2JqZWN0KGUpJiZhZS5pc1BsYWluT2JqZWN0KHQpP2FlLm1lcmdlKGUsdCk6YWUuaXNQbGFpbk9iamVjdCh0KT9hZS5tZXJnZSh7fSx0KTphZS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fWZ1bmN0aW9uIHUobil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEoZVtuXSx0W25dKX1hZS5mb3JFYWNoKG4sKGZ1bmN0aW9uKGUpe2FlLmlzVW5kZWZpbmVkKHRbZV0pfHwocltlXT1hKHZvaWQgMCx0W2VdKSl9KSksYWUuZm9yRWFjaChpLHUpLGFlLmZvckVhY2gobywoZnVuY3Rpb24obil7YWUuaXNVbmRlZmluZWQodFtuXSk/YWUuaXNVbmRlZmluZWQoZVtuXSl8fChyW25dPWEodm9pZCAwLGVbbl0pKTpyW25dPWEodm9pZCAwLHRbbl0pfSkpLGFlLmZvckVhY2gocywoZnVuY3Rpb24obil7biBpbiB0P3Jbbl09YShlW25dLHRbbl0pOm4gaW4gZSYmKHJbbl09YSh2b2lkIDAsZVtuXSkpfSkpO3ZhciBjPW4uY29uY2F0KGkpLmNvbmNhdChvKS5jb25jYXQocyksaD1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXModCkpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1jLmluZGV4T2YoZSl9KSk7cmV0dXJuIGFlLmZvckVhY2goaCx1KSxyfSxldD17bmFtZToiYXhpb3MiLHZlcnNpb246IjAuMjEuNCIsZGVzY3JpcHRpb246IlByb21pc2UgYmFzZWQgSFRUUCBjbGllbnQgZm9yIHRoZSBicm93c2VyIGFuZCBub2RlLmpzIixtYWluOiJpbmRleC5qcyIsc2NyaXB0czp7dGVzdDoiZ3J1bnQgdGVzdCIsc3RhcnQ6Im5vZGUgLi9zYW5kYm94L3NlcnZlci5qcyIsYnVpbGQ6Ik5PREVfRU5WPXByb2R1Y3Rpb24gZ3J1bnQgYnVpbGQiLHByZXZlcnNpb246Im5wbSB0ZXN0Iix2ZXJzaW9uOiJucG0gcnVuIGJ1aWxkICYmIGdydW50IHZlcnNpb24gJiYgZ2l0IGFkZCAtQSBkaXN0ICYmIGdpdCBhZGQgQ0hBTkdFTE9HLm1kIGJvd2VyLmpzb24gcGFja2FnZS5qc29uIixwb3N0dmVyc2lvbjoiZ2l0IHB1c2ggJiYgZ2l0IHB1c2ggLS10YWdzIixleGFtcGxlczoibm9kZSAuL2V4YW1wbGVzL3NlcnZlci5qcyIsY292ZXJhbGxzOiJjYXQgY292ZXJhZ2UvbGNvdi5pbmZvIHwgLi9ub2RlX21vZHVsZXMvY292ZXJhbGxzL2Jpbi9jb3ZlcmFsbHMuanMiLGZpeDoiZXNsaW50IC0tZml4IGxpYi8qKi8qLmpzIn0scmVwb3NpdG9yeTp7dHlwZToiZ2l0Iix1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy5naXQifSxrZXl3b3JkczpbInhociIsImh0dHAiLCJhamF4IiwicHJvbWlzZSIsIm5vZGUiXSxhdXRob3I6Ik1hdHQgWmFicmlza2llIixsaWNlbnNlOiJNSVQiLGJ1Z3M6e3VybDoiaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2F4aW9zLWh0dHAuY29tIixkZXZEZXBlbmRlbmNpZXM6e2NvdmVyYWxsczoiXjMuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjQiLGdydW50OiJeMS4zLjAiLCJncnVudC1iYW5uZXIiOiJeMC42LjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNsZWFuIjoiXjEuMS4wIiwiZ3J1bnQtY29udHJpYi13YXRjaCI6Il4xLjAuMCIsImdydW50LWVzbGludCI6Il4yMy4wLjAiLCJncnVudC1rYXJtYSI6Il40LjAuMCIsImdydW50LW1vY2hhLXRlc3QiOiJeMC4xMy4zIiwiZ3J1bnQtdHMiOiJeNi4wLjAtYmV0YS4xOSIsImdydW50LXdlYnBhY2siOiJeNC4wLjIiLCJpc3RhbmJ1bC1pbnN0cnVtZW50ZXItbG9hZGVyIjoiXjEuMC4wIiwiamFzbWluZS1jb3JlIjoiXjIuNC4xIixrYXJtYToiXjYuMy4yIiwia2FybWEtY2hyb21lLWxhdW5jaGVyIjoiXjMuMS4wIiwia2FybWEtZmlyZWZveC1sYXVuY2hlciI6Il4yLjEuMCIsImthcm1hLWphc21pbmUiOiJeMS4xLjEiLCJrYXJtYS1qYXNtaW5lLWFqYXgiOiJeMC4xLjEzIiwia2FybWEtc2FmYXJpLWxhdW5jaGVyIjoiXjEuMC4wIiwia2FybWEtc2F1Y2UtbGF1bmNoZXIiOiJeNC4zLjYiLCJrYXJtYS1zaW5vbiI6Il4xLjAuNSIsImthcm1hLXNvdXJjZW1hcC1sb2FkZXIiOiJeMC4zLjgiLCJrYXJtYS13ZWJwYWNrIjoiXjQuMC4yIiwibG9hZC1ncnVudC10YXNrcyI6Il4zLjUuMiIsbWluaW1pc3Q6Il4xLjIuMCIsbW9jaGE6Il44LjIuMSIsc2lub246Il40LjUuMCIsInRlcnNlci13ZWJwYWNrLXBsdWdpbiI6Il40LjIuMyIsdHlwZXNjcmlwdDoiXjQuMC41IiwidXJsLXNlYXJjaC1wYXJhbXMiOiJeMC4xMC4wIix3ZWJwYWNrOiJeNC40NC4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMCJ9LGJyb3dzZXI6eyIuL2xpYi9hZGFwdGVycy9odHRwLmpzIjoiLi9saWIvYWRhcHRlcnMveGhyLmpzIn0sanNkZWxpdnI6ImRpc3QvYXhpb3MubWluLmpzIix1bnBrZzoiZGlzdC9heGlvcy5taW4uanMiLHR5cGluZ3M6Ii4vaW5kZXguZC50cyIsZGVwZW5kZW5jaWVzOnsiZm9sbG93LXJlZGlyZWN0cyI6Il4xLjE0LjAifSxidW5kbGVzaXplOlt7cGF0aDoiLi9kaXN0L2F4aW9zLm1pbi5qcyIsdGhyZXNob2xkOiI1a0IifV19LHR0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXt0dFtlXT1mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHI9PT1lfHwiYSIrKHQ8MT8ibiAiOiIgIikrZX19KSk7dmFyIHJ0PXt9LG50PWV0LnZlcnNpb24uc3BsaXQoIi4iKTtmdW5jdGlvbiBpdChlLHQpe2Zvcih2YXIgcj10P3Quc3BsaXQoIi4iKTpudCxuPWUuc3BsaXQoIi4iKSxpPTA7aTwzO2krKyl7aWYocltpXT5uW2ldKXJldHVybiEwO2lmKHJbaV08bltpXSlyZXR1cm4hMX1yZXR1cm4hMX10dC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQmJml0KHQpO2Z1bmN0aW9uIGkoZSx0KXtyZXR1cm4iW0F4aW9zIHYiK2V0LnZlcnNpb24rIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhyPyIuICIrcjoiIil9cmV0dXJuIGZ1bmN0aW9uKHIsbyxzKXtpZighMT09PWUpdGhyb3cgbmV3IEVycm9yKGkobywiIGhhcyBiZWVuIHJlbW92ZWQgaW4gIit0KSk7cmV0dXJuIG4mJiFydFtvXSYmKHJ0W29dPSEwLGNvbnNvbGUud2FybihpKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWV8fGUocixvLHMpfX07dmFyIG90PXtpc09sZGVyVmVyc2lvbjppdCxhc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGUsdCxyKXtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxpPW4ubGVuZ3RoO2ktLSA+MDspe3ZhciBvPW5baV0scz10W29dO2lmKHMpe3ZhciBhPWVbb10sdT12b2lkIDA9PT1hfHxzKGEsbyxlKTtpZighMCE9PXUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9uICIrbysiIG11c3QgYmUgIit1KX1lbHNlIGlmKCEwIT09cil0aHJvdyBFcnJvcigiVW5rbm93biBvcHRpb24gIitvKX19LHZhbGlkYXRvcnM6dHR9LHN0PW90LnZhbGlkYXRvcnM7ZnVuY3Rpb24gYXQoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBsZSxyZXNwb25zZTpuZXcgbGV9fWF0LnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKGUpeyJzdHJpbmciPT10eXBlb2YgZT8oZT1hcmd1bWVudHNbMV18fHt9KS51cmw9YXJndW1lbnRzWzBdOmU9ZXx8e30sKGU9UWUodGhpcy5kZWZhdWx0cyxlKSkubWV0aG9kP2UubWV0aG9kPWUubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/ZS5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTplLm1ldGhvZD0iZ2V0Ijt2YXIgdD1lLnRyYW5zaXRpb25hbDt2b2lkIDAhPT10JiZvdC5hc3NlcnRPcHRpb25zKHQse3NpbGVudEpTT05QYXJzaW5nOnN0LnRyYW5zaXRpb25hbChzdC5ib29sZWFuLCIxLjAuMCIpLGZvcmNlZEpTT05QYXJzaW5nOnN0LnRyYW5zaXRpb25hbChzdC5ib29sZWFuLCIxLjAuMCIpLGNsYXJpZnlUaW1lb3V0RXJyb3I6c3QudHJhbnNpdGlvbmFsKHN0LmJvb2xlYW4sIjEuMC4wIil9LCExKTt2YXIgcj1bXSxuPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImZ1bmN0aW9uIj09dHlwZW9mIHQucnVuV2hlbiYmITE9PT10LnJ1bldoZW4oZSl8fChuPW4mJnQuc3luY2hyb25vdXMsci51bnNoaWZ0KHQuZnVsZmlsbGVkLHQucmVqZWN0ZWQpKX0pKTt2YXIgaSxvPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe28ucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKSwhbil7dmFyIHM9W1plLHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KHMscikscz1zLmNvbmNhdChvKSxpPVByb21pc2UucmVzb2x2ZShlKTtzLmxlbmd0aDspaT1pLnRoZW4ocy5zaGlmdCgpLHMuc2hpZnQoKSk7cmV0dXJuIGl9Zm9yKHZhciBhPWU7ci5sZW5ndGg7KXt2YXIgdT1yLnNoaWZ0KCksYz1yLnNoaWZ0KCk7dHJ5e2E9dShhKX1jYXRjaChlKXtjKGUpO2JyZWFrfX10cnl7aT1aZShhKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9Zm9yKDtvLmxlbmd0aDspaT1pLnRoZW4oby5zaGlmdCgpLG8uc2hpZnQoKSk7cmV0dXJuIGl9LGF0LnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9UWUodGhpcy5kZWZhdWx0cyxlKSxjZShlLnVybCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cPy8sIiIpfSxhZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSwoZnVuY3Rpb24oZSl7YXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChRZShyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSkpLGFlLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSwoZnVuY3Rpb24oZSl7YXQucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFFlKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOnJ9KSl9fSkpO3ZhciB1dD1hdDtmdW5jdGlvbiBjdChlKXt0aGlzLm1lc3NhZ2U9ZX1jdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQ2FuY2VsIisodGhpcy5tZXNzYWdlPyI6ICIrdGhpcy5tZXNzYWdlOiIiKX0sY3QucHJvdG90eXBlLl9fQ0FOQ0VMX189ITA7dmFyIGh0PWN0O2Z1bmN0aW9uIGx0KGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3Q9ZX0pKTt2YXIgcj10aGlzO2UoKGZ1bmN0aW9uKGUpe3IucmVhc29ufHwoci5yZWFzb249bmV3IGh0KGUpLHQoci5yZWFzb24pKX0pKX1sdC5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxsdC5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgZSx0PW5ldyBsdCgoZnVuY3Rpb24odCl7ZT10fSkpO3JldHVybnt0b2tlbjp0LGNhbmNlbDplfX07dmFyIGZ0PWx0O2Z1bmN0aW9uIGR0KGUpe3ZhciB0PW5ldyB1dChlKSxyPVEodXQucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIGFlLmV4dGVuZChyLHV0LnByb3RvdHlwZSx0KSxhZS5leHRlbmQocix0KSxyfXZhciBwdD1kdChWZSk7cHQuQXhpb3M9dXQscHQuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBkdChRZShwdC5kZWZhdWx0cyxlKSl9LHB0LkNhbmNlbD1odCxwdC5DYW5jZWxUb2tlbj1mdCxwdC5pc0NhbmNlbD1HZSxwdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxwdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxwdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiYhMD09PWUuaXNBeGlvc0Vycm9yfTt2YXIgZ3Q9cHQsdnQ9cHQ7Z3QuZGVmYXVsdD12dDt2YXIgeXQsbXQsd3Q9Z3Q7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uCgogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuCgogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgKICAgIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULAogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NCiAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogICAgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovZnVuY3Rpb24gYnQoZSx0LHIsbil7cmV0dXJuIG5ldyhyfHwocj1Qcm9taXNlKSkoKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gcyhlKXt0cnl7dShuLm5leHQoZSkpfWNhdGNoKGUpe28oZSl9fWZ1bmN0aW9uIGEoZSl7dHJ5e3Uobi50aHJvdyhlKSl9Y2F0Y2goZSl7byhlKX19ZnVuY3Rpb24gdShlKXt2YXIgdDtlLmRvbmU/aShlLnZhbHVlKToodD1lLnZhbHVlLHQgaW5zdGFuY2VvZiByP3Q6bmV3IHIoKGZ1bmN0aW9uKGUpe2UodCl9KSkpLnRoZW4ocyxhKX11KChuPW4uYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9KG10PXl0fHwoeXQ9e30pKS5mb3JtUG9zdD0iZm9ybV9wb3N0IixtdC5xdWVyeT0icXVlcnkiO3ZhciBfdDshZnVuY3Rpb24oZSl7ZS5Db25maWdEYXRhPSJjb25maWdfZGF0YSIsZS5PSURDUHJvdmlkZXJNZXRhRGF0YT0ib2lkY19wcm92aWRlcl9tZXRhX2RhdGEiLGUuU2Vzc2lvbkRhdGE9InNlc3Npb25fZGF0YSIsZS5UZW1wb3JhcnlEYXRhPSJ0ZW1wb3JhcnlfZGF0YSJ9KF90fHwoX3Q9e30pKTtjb25zdCBrdD0icmVmcmVzaF90b2tlbl90aW1lciI7dmFyIFN0OyFmdW5jdGlvbihlKXtlLlJlYWN0TmF0aXZlPSJSRUFDVF9OQVRJVkUiLGUuQnJvd3Nlcj0iQlJPV1NFUiIsZS5Ob2RlPSJOT0RFIn0oU3R8fChTdD17fSkpO2NsYXNzIEF0IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LHIsbixpLG8pe3N1cGVyKG51bGwhPW4/bjpudWxsPT1vP3ZvaWQgMDpvLm1lc3NhZ2UpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5jb2RlPWUsdGhpcy5maWxlPXQsdGhpcy5tZXRob2Q9cix0aGlzLmRlc2NyaXB0aW9uPWksdGhpcy5lcnJvcj1vLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG5ldy50YXJnZXQucHJvdG90eXBlKX19Y2xhc3MgRXQgZXh0ZW5kcyBBdHtjb25zdHJ1Y3RvcihlLHQscixuLGksbyxzLGEsdSl7c3VwZXIoZSx0LHIsbixpKSx0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLHRoaXMuY29kZT1lLHRoaXMuZmlsZT10LHRoaXMubWV0aG9kPXIsdGhpcy5kZXNjcmlwdGlvbj1pLHRoaXMubmV0d29ya0Vycm9yQ29kZT1vLHRoaXMubmV0d29ya0Vycm9yTWVzc2FnZT1zLHRoaXMuc3RhdHVzPWEsdGhpcy5uZXR3b3JrRXJyb3JEYXRhPXV9fXZhciBUdD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dm9pZCAwIT09dD90OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9O2Z1bmN0aW9uIFJ0KGUsdCxyKXtyZXR1cm4gZShyPXtwYXRoOnQsZXhwb3J0czp7fSxyZXF1aXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJEeW5hbWljIHJlcXVpcmVzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBAcm9sbHVwL3BsdWdpbi1jb21tb25qcyIpfShudWxsPT10JiZyLnBhdGgpfX0sci5leHBvcnRzKSxyLmV4cG9ydHN9dmFyIEN0PXZvaWQgMCE9PXQ/dDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sUHQ9W10sRHQ9W10sT3Q9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksSXQ9ITE7ZnVuY3Rpb24gVXQoKXtJdD0hMDtmb3IodmFyIGU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpUHRbdF09ZVt0XSxEdFtlLmNoYXJDb2RlQXQodCldPXQ7RHRbIi0iLmNoYXJDb2RlQXQoMCldPTYyLER0WyJfIi5jaGFyQ29kZUF0KDApXT02M31mdW5jdGlvbiBNdChlLHQscil7Zm9yKHZhciBuLGksbz1bXSxzPXQ7czxyO3MrPTMpbj0oZVtzXTw8MTYpKyhlW3MrMV08PDgpK2VbcysyXSxvLnB1c2goUHRbKGk9bik+PjE4JjYzXStQdFtpPj4xMiY2M10rUHRbaT4+NiY2M10rUHRbNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWZ1bmN0aW9uIEx0KGUpe3ZhciB0O0l0fHxVdCgpO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXIlMyxpPSIiLG89W10scz0xNjM4MyxhPTAsdT1yLW47YTx1O2ErPXMpby5wdXNoKE10KGUsYSxhK3M+dT91OmErcykpO3JldHVybiAxPT09bj8odD1lW3ItMV0saSs9UHRbdD4+Ml0saSs9UHRbdDw8NCY2M10saSs9Ij09Iik6Mj09PW4mJih0PShlW3ItMl08PDgpK2Vbci0xXSxpKz1QdFt0Pj4xMF0saSs9UHRbdD4+NCY2M10saSs9UHRbdDw8MiY2M10saSs9Ij0iKSxvLnB1c2goaSksby5qb2luKCIiKX1mdW5jdGlvbiBIdChlLHQscixuLGkpe3ZhciBvLHMsYT04Kmktbi0xLHU9KDE8PGEpLTEsYz11Pj4xLGg9LTcsbD1yP2ktMTowLGY9cj8tMToxLGQ9ZVt0K2xdO2ZvcihsKz1mLG89ZCYoMTw8LWgpLTEsZD4+PS1oLGgrPWE7aD4wO289MjU2Km8rZVt0K2xdLGwrPWYsaC09OCk7Zm9yKHM9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO3M9MjU2KnMrZVt0K2xdLGwrPWYsaC09OCk7aWYoMD09PW8pbz0xLWM7ZWxzZXtpZihvPT09dSlyZXR1cm4gcz9OYU46MS8wKihkPy0xOjEpO3MrPU1hdGgucG93KDIsbiksby09Y31yZXR1cm4oZD8tMToxKSpzKk1hdGgucG93KDIsby1uKX1mdW5jdGlvbiB4dChlLHQscixuLGksbyl7dmFyIHMsYSx1LGM9OCpvLWktMSxoPSgxPDxjKS0xLGw9aD4+MSxmPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZD1uPzA6by0xLHA9bj8xOi0xLGc9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhhPWlzTmFOKHQpPzE6MCxzPWgpOihzPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKHU9TWF0aC5wb3coMiwtcykpPDEmJihzLS0sdSo9MiksKHQrPXMrbD49MT9mL3U6ZipNYXRoLnBvdygyLDEtbCkpKnU+PTImJihzKyssdS89MikscytsPj1oPyhhPTAscz1oKTpzK2w+PTE/KGE9KHQqdS0xKSpNYXRoLnBvdygyLGkpLHMrPWwpOihhPXQqTWF0aC5wb3coMixsLTEpKk1hdGgucG93KDIsaSkscz0wKSk7aT49ODtlW3IrZF09MjU1JmEsZCs9cCxhLz0yNTYsaS09OCk7Zm9yKHM9czw8aXxhLGMrPWk7Yz4wO2VbcitkXT0yNTUmcyxkKz1wLHMvPTI1NixjLT04KTtlW3IrZC1wXXw9MTI4Kmd9dmFyIGp0PXt9LnRvU3RyaW5nLEJ0PUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PWp0LmNhbGwoZSl9O0Z0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwPT09Q3QuVFlQRURfQVJSQVlfU1VQUE9SVHx8Q3QuVFlQRURfQVJSQVlfU1VQUE9SVDt2YXIgcXQ9TnQoKTtmdW5jdGlvbiBOdCgpe3JldHVybiBGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBLdChlLHQpe2lmKE50KCk8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTtyZXR1cm4gRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPUZ0LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBGdCh0KSksZS5sZW5ndGg9dCksZX1mdW5jdGlvbiBGdChlLHQscil7aWYoIShGdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgRnQpKXJldHVybiBuZXcgRnQoZSx0LHIpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4genQodGhpcyxlKX1yZXR1cm4gWXQodGhpcyxlLHQscil9ZnVuY3Rpb24gWXQoZSx0LHIsbil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gdD12b2lkIDA9PT1yJiZ2b2lkIDA9PT1uP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCxyKTpuZXcgVWludDhBcnJheSh0LHIsbiksRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189RnQucHJvdG90eXBlOmU9SnQoZSx0KSxlfShlLHQscixuKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwocj0idXRmOCIpLCFGdC5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciBuPTB8R3QodCxyKSxpPShlPUt0KGUsbikpLndyaXRlKHQscik7cmV0dXJuIGkhPT1uJiYoZT1lLnNsaWNlKDAsaSkpLGV9KGUsdCxyKTpmdW5jdGlvbihlLHQpe2lmKCR0KHQpKXt2YXIgcj0wfFZ0KHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPUt0KGUscikpLmxlbmd0aHx8dC5jb3B5KGUsMCwwLHIpLGV9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChuPXQubGVuZ3RoKSE9bj9LdChlLDApOkp0KGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkJ0KHQuZGF0YSkpcmV0dXJuIEp0KGUsdC5kYXRhKX12YXIgbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gV3QoZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB6dChlLHQpe2lmKFd0KHQpLGU9S3QoZSx0PDA/MDowfFZ0KHQpKSwhRnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIHI9MDtyPHQ7KytyKWVbcl09MDtyZXR1cm4gZX1mdW5jdGlvbiBKdChlLHQpe3ZhciByPXQubGVuZ3RoPDA/MDowfFZ0KHQubGVuZ3RoKTtlPUt0KGUscik7Zm9yKHZhciBuPTA7bjxyO24rPTEpZVtuXT0yNTUmdFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBWdChlKXtpZihlPj1OdCgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitOdCgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiAkdChlKXtyZXR1cm4hKG51bGw9PWV8fCFlLl9pc0J1ZmZlcil9ZnVuY3Rpb24gR3QoZSx0KXtpZigkdChlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIHI9ZS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuIDA7Zm9yKHZhciBuPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHI7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4ga3IoZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBTcihlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBrcihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBYdChlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBscih0aGlzLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gdXIodGhpcyx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBjcih0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaHIodGhpcyx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gYXIodGhpcyx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gZnIodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gWnQoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBRdChlLHQscixuLGkpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLHI9K3IsaXNOYU4ocikmJihyPWk/MDplLmxlbmd0aC0xKSxyPDAmJihyPWUubGVuZ3RoK3IpLHI+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9ZS5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9RnQuZnJvbSh0LG4pKSwkdCh0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOmVyKGUsdCxyLG4saSk7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsRnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/aT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSx0LHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSx0LHIpOmVyKGUsW3RdLHIsbixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBlcihlLHQscixuLGkpe3ZhciBvLHM9MSxhPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtzPTIsYS89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09cz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqcyl9aWYoaSl7dmFyIGg9LTE7Zm9yKG89cjtvPGE7bysrKWlmKGMoZSxvKT09PWModCwtMT09PWg/MDpvLWgpKXtpZigtMT09PWgmJihoPW8pLG8taCsxPT09dSlyZXR1cm4gaCpzfWVsc2UtMSE9PWgmJihvLT1vLWgpLGg9LTF9ZWxzZSBmb3Iocit1PmEmJihyPWEtdSksbz1yO28+PTA7by0tKXtmb3IodmFyIGw9ITAsZj0wO2Y8dTtmKyspaWYoYyhlLG8rZikhPT1jKHQsZikpe2w9ITE7YnJlYWt9aWYobClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiB0cihlLHQscixuKXtyPU51bWJlcihyKXx8MDt2YXIgaT1lLmxlbmd0aC1yO24/KG49TnVtYmVyKG4pKT5pJiYobj1pKTpuPWk7dmFyIG89dC5sZW5ndGg7aWYobyUyIT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBhPXBhcnNlSW50KHQuc3Vic3RyKDIqcywyKSwxNik7aWYoaXNOYU4oYSkpcmV0dXJuIHM7ZVtyK3NdPWF9cmV0dXJuIHN9ZnVuY3Rpb24gcnIoZSx0LHIsbil7cmV0dXJuIEFyKGtyKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIG5yKGUsdCxyLG4pe3JldHVybiBBcihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gdH0odCksZSxyLG4pfWZ1bmN0aW9uIGlyKGUsdCxyLG4pe3JldHVybiBucihlLHQscixuKX1mdW5jdGlvbiBvcihlLHQscixuKXtyZXR1cm4gQXIoU3IodCksZSxyLG4pfWZ1bmN0aW9uIHNyKGUsdCxyLG4pe3JldHVybiBBcihmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxzPTA7czxlLmxlbmd0aCYmISgodC09Mik8MCk7KytzKW49KHI9ZS5jaGFyQ29kZUF0KHMpKT4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIGFyKGUsdCxyKXtyZXR1cm4gMD09PXQmJnI9PT1lLmxlbmd0aD9MdChlKTpMdChlLnNsaWNlKHQscikpfWZ1bmN0aW9uIHVyKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPXQ7aTxyOyl7dmFyIG8scyxhLHUsYz1lW2ldLGg9bnVsbCxsPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStsPD1yKXN3aXRjaChsKXtjYXNlIDE6YzwxMjgmJihoPWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKG89ZVtpKzFdKSkmJih1PSgzMSZjKTw8Nnw2MyZvKT4xMjcmJihoPXUpO2JyZWFrO2Nhc2UgMzpvPWVbaSsxXSxzPWVbaSsyXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZzKSYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoaD11KTticmVhaztjYXNlIDQ6bz1lW2krMV0scz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJjEyOD09KDE5MiZhKSYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZzKTw8Nnw2MyZhKT42NTUzNSYmdTwxMTE0MTEyJiYoaD11KX1udWxsPT09aD8oaD02NTUzMyxsPTEpOmg+NjU1MzUmJihoLT02NTUzNixuLnB1c2goaD4+PjEwJjEwMjN8NTUyOTYpLGg9NTYzMjB8MTAyMyZoKSxuLnB1c2goaCksaSs9bH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7Zm9yKHZhciByPSIiLG49MDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz00MDk2KSk7cmV0dXJuIHJ9KG4pfWZ1bmN0aW9uIGNyKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgaT10O2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gaHIoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBpPXQ7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiBufWZ1bmN0aW9uIGxyKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9IiIsbz10O288cjsrK28paSs9X3IoZVtvXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZnIoZSx0LHIpe2Zvcih2YXIgbj1lLnNsaWNlKHQsciksaT0iIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBkcihlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gcHIoZSx0LHIsbixpLG8pe2lmKCEkdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodD5pfHx0PG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gZ3IoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciwyKTtpPG87KytpKWVbcitpXT0odCYyNTU8PDgqKG4/aToxLWkpKT4+PjgqKG4/aToxLWkpfWZ1bmN0aW9uIHZyKGUsdCxyLG4pe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4oZS5sZW5ndGgtciw0KTtpPG87KytpKWVbcitpXT10Pj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIHlyKGUsdCxyLG4saSxvKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gbXIoZSx0LHIsbixpKXtyZXR1cm4gaXx8eXIoZSwwLHIsNCkseHQoZSx0LHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gd3IoZSx0LHIsbixpKXtyZXR1cm4gaXx8eXIoZSwwLHIsOCkseHQoZSx0LHIsbiw1Miw4KSxyKzh9RnQucG9vbFNpemU9ODE5MixGdC5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189RnQucHJvdG90eXBlLGV9LEZ0LmZyb209ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBZdChudWxsLGUsdCxyKX0sRnQuVFlQRURfQVJSQVlfU1VQUE9SVCYmKEZ0LnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsRnQuX19wcm90b19fPVVpbnQ4QXJyYXkpLEZ0LmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFd0KHQpLHQ8PTA/S3QoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbj9LdChlLHQpLmZpbGwocixuKTpLdChlLHQpLmZpbGwocik6S3QoZSx0KX0obnVsbCxlLHQscil9LEZ0LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiB6dChudWxsLGUpfSxGdC5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIHp0KG51bGwsZSl9LEZ0LmlzQnVmZmVyPUVyLEZ0LmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighJHQoZSl8fCEkdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYoZT09PXQpcmV0dXJuIDA7Zm9yKHZhciByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT0wLG89TWF0aC5taW4ocixuKTtpPG87KytpKWlmKGVbaV0hPT10W2ldKXtyPWVbaV0sbj10W2ldO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0sRnQuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sRnQuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIUJ0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIEZ0LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49RnQuYWxsb2NVbnNhZmUodCksaT0wO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBvPWVbcl07aWYoISR0KG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixpKSxpKz1vLmxlbmd0aH1yZXR1cm4gbn0sRnQuYnl0ZUxlbmd0aD1HdCxGdC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLEZ0LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpWnQodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LEZ0LnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpWnQodGhpcyx0LHQrMyksWnQodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sRnQucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9OCladCh0aGlzLHQsdCs3KSxadCh0aGlzLHQrMSx0KzYpLFp0KHRoaXMsdCsyLHQrNSksWnQodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sRnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/dXIodGhpcywwLGUpOlh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRnQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighJHQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09ZXx8MD09PUZ0LmNvbXBhcmUodGhpcyxlKX0sRnQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIjtyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLDUwKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+NTAmJihlKz0iIC4uLiAiKSksIjxCdWZmZXIgIitlKyI+In0sRnQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighJHQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHQ8MHx8cj5lLmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1pJiZ0Pj1yKXJldHVybiAwO2lmKG4+PWkpcmV0dXJuLTE7aWYodD49cilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIG89KGk+Pj49MCktKG4+Pj49MCkscz0ocj4+Pj0wKS0odD4+Pj0wKSxhPU1hdGgubWluKG8scyksdT10aGlzLnNsaWNlKG4saSksYz1lLnNsaWNlKHQsciksaD0wO2g8YTsrK2gpaWYodVtoXSE9PWNbaF0pe289dVtoXSxzPWNbaF07YnJlYWt9cmV0dXJuIG88cz8tMTpzPG8/MTowfSxGdC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGUsdCxyKX0sRnQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBRdCh0aGlzLGUsdCxyLCEwKX0sRnQucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gUXQodGhpcyxlLHQsciwhMSl9LEZ0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBvPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gdHIodGhpcyxlLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gcnIodGhpcyxlLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIG5yKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGlyKHRoaXMsZSx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gb3IodGhpcyxlLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBzcih0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLG89ITB9fSxGdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fSxGdC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXRoaXMubGVuZ3RoO2lmKChlPX5+ZSk8MD8oZSs9bik8MCYmKGU9MCk6ZT5uJiYoZT1uKSwodD12b2lkIDA9PT10P246fn50KTwwPyh0Kz1uKTwwJiYodD0wKTp0Pm4mJih0PW4pLHQ8ZSYmKHQ9ZSksRnQuVFlQRURfQVJSQVlfU1VQUE9SVCkocj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1GdC5wcm90b3R5cGU7ZWxzZXt2YXIgaT10LWU7cj1uZXcgRnQoaSx2b2lkIDApO2Zvcih2YXIgbz0wO288aTsrK28pcltvXT10aGlzW28rZV19cmV0dXJuIHJ9LEZ0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8ZHIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG59LEZ0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8ZHIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlKy0tdF0saT0xO3Q+MCYmKGkqPTI1Nik7KW4rPXRoaXNbZSstLXRdKmk7cmV0dXJuIG59LEZ0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZHIoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxGdC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGRyKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LEZ0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZHIoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sRnQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LEZ0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZHIoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxGdC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8ZHIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxpPTEsbz0wOysrbzx0JiYoaSo9MjU2KTspbis9dGhpc1tlK29dKmk7cmV0dXJuIG4+PShpKj0xMjgpJiYobi09TWF0aC5wb3coMiw4KnQpKSxufSxGdC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8ZHIoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dCxpPTEsbz10aGlzW2UrLS1uXTtuPjAmJihpKj0yNTYpOylvKz10aGlzW2UrLS1uXSppO3JldHVybiBvPj0oaSo9MTI4KSYmKG8tPU1hdGgucG93KDIsOCp0KSksb30sRnQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGRyKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LEZ0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihlLHQpe3R8fGRyKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LEZ0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fGRyKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LEZ0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sRnQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fGRyKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxGdC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZHIoZSw0LHRoaXMubGVuZ3RoKSxIdCh0aGlzLGUsITAsMjMsNCl9LEZ0LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDQsdGhpcy5sZW5ndGgpLEh0KHRoaXMsZSwhMSwyMyw0KX0sRnQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDgsdGhpcy5sZW5ndGgpLEh0KHRoaXMsZSwhMCw1Miw4KX0sRnQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxkcihlLDgsdGhpcy5sZW5ndGgpLEh0KHRoaXMsZSwhMSw1Miw4KX0sRnQucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2U9K2UsdHw9MCxyfD0wLG58fHByKHRoaXMsZSx0LHIsTWF0aC5wb3coMiw4KnIpLTEsMCk7dmFyIGk9MSxvPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytvPHImJihpKj0yNTYpOyl0aGlzW3Qrb109ZS9pJjI1NTtyZXR1cm4gdCtyfSxGdC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LHIsbil7ZT0rZSx0fD0wLHJ8PTAsbnx8cHIodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsbz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspdGhpc1t0K2ldPWUvbyYyNTU7cmV0dXJuIHQrcn0sRnQucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8cHIodGhpcyxlLHQsMSwyNTUsMCksRnQuVFlQRURfQVJSQVlfU1VQUE9SVHx8KGU9TWF0aC5mbG9vcihlKSksdGhpc1t0XT0yNTUmZSx0KzF9LEZ0LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDIsNjU1MzUsMCksRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgpOmdyKHRoaXMsZSx0LCEwKSx0KzJ9LEZ0LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDIsNjU1MzUsMCksRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOmdyKHRoaXMsZSx0LCExKSx0KzJ9LEZ0LnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOnZyKHRoaXMsZSx0LCEwKSx0KzR9LEZ0LnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOnZyKHRoaXMsZSx0LCExKSx0KzR9LEZ0LnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7cHIodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPTAscz0xLGE9MDtmb3IodGhpc1t0XT0yNTUmZTsrK288ciYmKHMqPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3Qrby0xXSYmKGE9MSksdGhpc1t0K29dPShlL3M+PjApLWEmMjU1O3JldHVybiB0K3J9LEZ0LnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7cHIodGhpcyxlLHQscixpLTEsLWkpfXZhciBvPXItMSxzPTEsYT0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYocyo9MjU2KTspZTwwJiYwPT09YSYmMCE9PXRoaXNbdCtvKzFdJiYoYT0xKSx0aGlzW3Qrb109KGUvcz4+MCktYSYyNTU7cmV0dXJuIHQrcn0sRnQucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxwcih0aGlzLGUsdCwxLDEyNywtMTI4KSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxGdC5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fHByKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Z3IodGhpcyxlLHQsITApLHQrMn0sRnQucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxwcih0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksRnQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT1lPj4+OCx0aGlzW3QrMV09MjU1JmUpOmdyKHRoaXMsZSx0LCExKSx0KzJ9LEZ0LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8cHIodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQpOnZyKHRoaXMsZSx0LCEwKSx0KzR9LEZ0LnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8cHIodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSxGdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOnZyKHRoaXMsZSx0LCExKSx0KzR9LEZ0LnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBtcih0aGlzLGUsdCwhMCxyKX0sRnQucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIG1yKHRoaXMsZSx0LCExLHIpfSxGdC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHdyKHRoaXMsZSx0LCEwLHIpfSxGdC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHdyKHRoaXMsZSx0LCExLHIpfSxGdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlLHQscixuKXtpZihyfHwocj0wKSxufHwwPT09bnx8KG49dGhpcy5sZW5ndGgpLHQ+PWUubGVuZ3RoJiYodD1lLmxlbmd0aCksdHx8KHQ9MCksbj4wJiZuPHImJihuPXIpLG49PT1yKXJldHVybiAwO2lmKDA9PT1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihuPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8bi1yJiYobj1lLmxlbmd0aC10K3IpO3ZhciBpLG89bi1yO2lmKHRoaXM9PT1lJiZyPHQmJnQ8bilmb3IoaT1vLTE7aT49MDstLWkpZVtpK3RdPXRoaXNbaStyXTtlbHNlIGlmKG88MWUzfHwhRnQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IoaT0wO2k8bzsrK2kpZVtpK3RdPXRoaXNbaStyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLHIrbyksdCk7cmV0dXJuIG99LEZ0LnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBpPWUuY2hhckNvZGVBdCgwKTtpPDI1NiYmKGU9aSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFGdC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbil9ZWxzZSJudW1iZXIiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD10KXJldHVybiB0aGlzO3ZhciBvO2lmKHQ+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsZXx8KGU9MCksIm51bWJlciI9PXR5cGVvZiBlKWZvcihvPXQ7bzxyOysrbyl0aGlzW29dPWU7ZWxzZXt2YXIgcz0kdChlKT9lOmtyKG5ldyBGdChlLG4pLnRvU3RyaW5nKCkpLGE9cy5sZW5ndGg7Zm9yKG89MDtvPHItdDsrK28pdGhpc1tvK3RdPXNbbyVhXX1yZXR1cm4gdGhpc307dmFyIGJyPS9bXitcLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIF9yKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBrcihlLHQpe3ZhciByO3Q9dHx8MS8wO2Zvcih2YXIgbj1lLmxlbmd0aCxpPW51bGwsbz1bXSxzPTA7czxuOysrcyl7aWYoKHI9ZS5jaGFyQ29kZUF0KHMpKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihzKzE9PT1uKXsodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYodC09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigodC09MSk8MClicmVhaztvLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO28ucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigodC09Myk8MClicmVhaztvLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0LT00KTwwKWJyZWFrO28ucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gU3IoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG8scztJdHx8VXQoKTt2YXIgYT1lLmxlbmd0aDtpZihhJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTtvPSI9Ij09PWVbYS0yXT8yOiI9Ij09PWVbYS0xXT8xOjAscz1uZXcgT3QoMyphLzQtbyksbj1vPjA/YS00OmE7dmFyIHU9MDtmb3IodD0wLHI9MDt0PG47dCs9NCxyKz0zKWk9RHRbZS5jaGFyQ29kZUF0KHQpXTw8MTh8RHRbZS5jaGFyQ29kZUF0KHQrMSldPDwxMnxEdFtlLmNoYXJDb2RlQXQodCsyKV08PDZ8RHRbZS5jaGFyQ29kZUF0KHQrMyldLHNbdSsrXT1pPj4xNiYyNTUsc1t1KytdPWk+PjgmMjU1LHNbdSsrXT0yNTUmaTtyZXR1cm4gMj09PW8/KGk9RHRbZS5jaGFyQ29kZUF0KHQpXTw8MnxEdFtlLmNoYXJDb2RlQXQodCsxKV0+PjQsc1t1KytdPTI1NSZpKToxPT09byYmKGk9RHRbZS5jaGFyQ29kZUF0KHQpXTw8MTB8RHRbZS5jaGFyQ29kZUF0KHQrMSldPDw0fER0W2UuY2hhckNvZGVBdCh0KzIpXT4+MixzW3UrK109aT4+OCYyNTUsc1t1KytdPTI1NSZpKSxzfShmdW5jdGlvbihlKXtpZigoZT1mdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfShlKS5yZXBsYWNlKGJyLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtlLmxlbmd0aCU0IT0wOyllKz0iPSI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBBcihlLHQscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj10Lmxlbmd0aHx8aT49ZS5sZW5ndGgpOysraSl0W2krcl09ZVtpXTtyZXR1cm4gaX1mdW5jdGlvbiBFcihlKXtyZXR1cm4gbnVsbCE9ZSYmKCEhZS5faXNCdWZmZXJ8fFRyKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkRmxvYXRMRSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc2xpY2UmJlRyKGUuc2xpY2UoMCwwKSl9KGUpKX1mdW5jdGlvbiBUcihlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBScj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCdWZmZXI6RnQsSU5TUEVDVF9NQVhfQllURVM6NTAsU2xvd0J1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksRnQuYWxsb2MoK2UpfSxpc0J1ZmZlcjpFcixrTWF4TGVuZ3RoOnF0fSksQ3I9UnQoKGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aCxyPXQlNDtpZighcilyZXR1cm4gZTt2YXIgbj10LGk9NC1yLG89dCtpLHM9RnQuYWxsb2Mobyk7Zm9yKHMud3JpdGUoZSk7aS0tOylzLndyaXRlKCI9IixuKyspO3JldHVybiBzLnRvU3RyaW5nKCl9fSkpLFByPVJ0KChmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxGdC5pc0J1ZmZlcihlKT9pKGUudG9TdHJpbmcoImJhc2U2NCIpKTppKEZ0LmZyb20oZSx0KS50b1N0cmluZygiYmFzZTY0IikpfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIGU9ZS50b1N0cmluZygpLENyLmRlZmF1bHQoZSkucmVwbGFjZSgvXC0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLCIiKS5yZXBsYWNlKC9cKy9nLCItIikucmVwbGFjZSgvXC8vZywiXyIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1yO28uZW5jb2RlPXIsby5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9InV0ZjgiKSxGdC5mcm9tKG4oZSksImJhc2U2NCIpLnRvU3RyaW5nKHQpfSxvLnRvQmFzZTY0PW4sby5mcm9tQmFzZTY0PWksby50b0J1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gRnQuZnJvbShuKGUpLCJiYXNlNjQiKX0sdC5kZWZhdWx0PW99KSksRHI9UnQoKGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1Qci5kZWZhdWx0LGUuZXhwb3J0cy5kZWZhdWx0PWUuZXhwb3J0c30pKSxPcj1SdCgoZnVuY3Rpb24oZSx0KXt2YXIgcjtlLmV4cG9ydHM9KHI9cnx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByO3JldHVybiBlLnByb3RvdHlwZT10LHI9bmV3IGUsZS5wcm90b3R5cGU9bnVsbCxyfX0oKSxuPXt9LGk9bi5saWI9e30sbz1pLkJhc2U9e2V4dGVuZDpmdW5jdGlvbihlKXt2YXIgdD1yKHRoaXMpO3JldHVybiBlJiZ0Lm1peEluKGUpLHQuaGFzT3duUHJvcGVydHkoImluaXQiKSYmdGhpcy5pbml0IT09dC5pbml0fHwodC5pbml0PWZ1bmN0aW9uKCl7dC4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx0LmluaXQucHJvdG90eXBlPXQsdC4kc3VwZXI9dGhpcyx0fSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmV4dGVuZCgpO3JldHVybiBlLmluaXQuYXBwbHkoZSxhcmd1bWVudHMpLGV9LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJih0aGlzW3RdPWVbdF0pO2UuaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPWUudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19LHM9aS5Xb3JkQXJyYXk9by5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oZSx0KXtlPXRoaXMud29yZHM9ZXx8W10sdGhpcy5zaWdCeXRlcz1udWxsIT10P3Q6NCplLmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fHUpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMud29yZHMscj1lLndvcmRzLG49dGhpcy5zaWdCeXRlcyxpPWUuc2lnQnl0ZXM7aWYodGhpcy5jbGFtcCgpLG4lNClmb3IodmFyIG89MDtvPGk7bysrKXt2YXIgcz1yW28+Pj4yXT4+PjI0LW8lNCo4JjI1NTt0W24rbz4+PjJdfD1zPDwyNC0obitvKSU0Kjh9ZWxzZSBmb3Iobz0wO288aTtvKz00KXRbbitvPj4+Ml09cltvPj4+Ml07cmV0dXJuIHRoaXMuc2lnQnl0ZXMrPWksdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzLHI9dGhpcy5zaWdCeXRlczt0W3I+Pj4yXSY9NDI5NDk2NzI5NTw8MzItciU0KjgsdC5sZW5ndGg9ZS5jZWlsKHIvNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9by5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBlLndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCksZX0scmFuZG9tOmZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCl7dD10O3ZhciByPTk4NzY1NDMyMSxuPTQyOTQ5NjcyOTU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9KChyPTM2OTY5Kig2NTUzNSZyKSsocj4+MTYpJm4pPDwxNikrKHQ9MThlMyooNjU1MzUmdCkrKHQ+PjE2KSZuKSZuO3JldHVybiBpLz00Mjk0OTY3Mjk2LChpKz0uNSkqKGUucmFuZG9tKCk+LjU/MTotMSl9fSxvPTA7bzx0O28rPTQpe3ZhciBhPWkoNDI5NDk2NzI5Nioocnx8ZS5yYW5kb20oKSkpO3I9OTg3NjU0MDcxKmEoKSxuLnB1c2goNDI5NDk2NzI5NiphKCl8MCl9cmV0dXJuIG5ldyBzLmluaXQobix0KX19KSxhPW4uZW5jPXt9LHU9YS5IZXg9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS53b3JkcyxyPWUuc2lnQnl0ZXMsbj1bXSxpPTA7aTxyO2krKyl7dmFyIG89dFtpPj4+Ml0+Pj4yNC1pJTQqOCYyNTU7bi5wdXNoKChvPj4+NCkudG9TdHJpbmcoMTYpKSxuLnB1c2goKDE1Jm8pLnRvU3RyaW5nKDE2KSl9cmV0dXJuIG4uam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVtdLG49MDtuPHQ7bis9MilyW24+Pj4zXXw9cGFyc2VJbnQoZS5zdWJzdHIobiwyKSwxNik8PDI0LW4lOCo0O3JldHVybiBuZXcgcy5pbml0KHIsdC8yKX19LGM9YS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS53b3JkcyxyPWUuc2lnQnl0ZXMsbj1bXSxpPTA7aTxyO2krKyl7dmFyIG89dFtpPj4+Ml0+Pj4yNC1pJTQqOCYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUobykpfXJldHVybiBuLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bXSxuPTA7bjx0O24rKylyW24+Pj4yXXw9KDI1NSZlLmNoYXJDb2RlQXQobikpPDwyNC1uJTQqODtyZXR1cm4gbmV3IHMuaW5pdChyLHQpfX0saD1hLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoYy5zdHJpbmdpZnkoZSkpKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBVVEYtOCBkYXRhIil9fSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gYy5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpKX19LGw9aS5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtPW8uZXh0ZW5kKHtyZXNldDpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IHMuaW5pdCx0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1oLnBhcnNlKGUpKSx0aGlzLl9kYXRhLmNvbmNhdChlKSx0aGlzLl9uRGF0YUJ5dGVzKz1lLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih0KXt2YXIgcj10aGlzLl9kYXRhLG49ci53b3JkcyxpPXIuc2lnQnl0ZXMsbz10aGlzLmJsb2NrU2l6ZSxhPWkvKDQqbyksdT0oYT10P2UuY2VpbChhKTplLm1heCgoMHxhKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpvLGM9ZS5taW4oNCp1LGkpO2lmKHUpe2Zvcih2YXIgaD0wO2g8dTtoKz1vKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKG4saCk7dmFyIGw9bi5zcGxpY2UoMCx1KTtyLnNpZ0J5dGVzLT1jfXJldHVybiBuZXcgcy5pbml0KGwsYyl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9by5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBlLl9kYXRhPXRoaXMuX2RhdGEuY2xvbmUoKSxlfSxfbWluQnVmZmVyU2l6ZTowfSksZj0oaS5IYXNoZXI9bC5leHRlbmQoe2NmZzpvLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oZSl7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKGUpLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtsLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2FwcGVuZChlKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnRoaXMuX2FwcGVuZChlKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZS5pbml0KHIpLmZpbmFsaXplKHQpfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBmLkhNQUMuaW5pdChlLHIpLmZpbmFsaXplKHQpfX19KSxuLmFsZ289e30pO3JldHVybiBufShNYXRoKSxyKX0pKSxJcj1SdCgoZnVuY3Rpb24oZSx0KXt2YXIgcjtlLmV4cG9ydHM9KHI9T3IsZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciBlPXIubGliLldvcmRBcnJheSx0PWUuaW5pdDsoZS5pbml0PWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKGU9bmV3IFVpbnQ4QXJyYXkoZSkpLChlIGluc3RhbmNlb2YgSW50OEFycmF5fHwidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiZlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fGUgaW5zdGFuY2VvZiBJbnQxNkFycmF5fHxlIGluc3RhbmNlb2YgVWludDE2QXJyYXl8fGUgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHxlIGluc3RhbmNlb2YgVWludDMyQXJyYXl8fGUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fGUgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpJiYoZT1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKSksZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe2Zvcih2YXIgcj1lLmJ5dGVMZW5ndGgsbj1bXSxpPTA7aTxyO2krKyluW2k+Pj4yXXw9ZVtpXTw8MjQtaSU0Kjg7dC5jYWxsKHRoaXMsbixyKX1lbHNlIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkucHJvdG90eXBlPWV9fSgpLHIubGliLldvcmRBcnJheSl9KSksVXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZX0oUnQoKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LHIpe3ZhciBuPXt9OyFmdW5jdGlvbihlKXtlLl9fZXNNb2R1bGU9ITAsZS5kaWdlc3RMZW5ndGg9MzIsZS5ibG9ja1NpemU9NjQ7dmFyIHQ9bmV3IFVpbnQzMkFycmF5KFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKTtmdW5jdGlvbiByKGUscixuLGksbyl7Zm9yKHZhciBzLGEsdSxjLGgsbCxmLGQscCxnLHYseSxtO28+PTY0Oyl7Zm9yKHM9clswXSxhPXJbMV0sdT1yWzJdLGM9clszXSxoPXJbNF0sbD1yWzVdLGY9cls2XSxkPXJbN10sZz0wO2c8MTY7ZysrKXY9aSs0KmcsZVtnXT0oMjU1Jm5bdl0pPDwyNHwoMjU1Jm5bdisxXSk8PDE2fCgyNTUmblt2KzJdKTw8OHwyNTUmblt2KzNdO2ZvcihnPTE2O2c8NjQ7ZysrKXk9KChwPWVbZy0yXSk+Pj4xN3xwPDwxNSleKHA+Pj4xOXxwPDwxMylecD4+PjEwLG09KChwPWVbZy0xNV0pPj4+N3xwPDwyNSleKHA+Pj4xOHxwPDwxNClecD4+PjMsZVtnXT0oeStlW2ctN118MCkrKG0rZVtnLTE2XXwwKTtmb3IoZz0wO2c8NjQ7ZysrKXk9KCgoaD4+PjZ8aDw8MjYpXihoPj4+MTF8aDw8MjEpXihoPj4+MjV8aDw8NykpKyhoJmxefmgmZil8MCkrKGQrKHRbZ10rZVtnXXwwKXwwKXwwLG09KChzPj4+MnxzPDwzMCleKHM+Pj4xM3xzPDwxOSleKHM+Pj4yMnxzPDwxMCkpKyhzJmFecyZ1XmEmdSl8MCxkPWYsZj1sLGw9aCxoPWMreXwwLGM9dSx1PWEsYT1zLHM9eSttfDA7clswXSs9cyxyWzFdKz1hLHJbMl0rPXUsclszXSs9YyxyWzRdKz1oLHJbNV0rPWwscls2XSs9ZixyWzddKz1kLGkrPTY0LG8tPTY0fXJldHVybiBpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlnZXN0TGVuZ3RoPWUuZGlnZXN0TGVuZ3RoLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLHRoaXMuc3RhdGU9bmV3IEludDMyQXJyYXkoOCksdGhpcy50ZW1wPW5ldyBJbnQzMkFycmF5KDY0KSx0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxMjgpLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5ieXRlc0hhc2hlZD0wLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5yZXNldCgpfXJldHVybiB0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlWzBdPTE3NzkwMzM3MDMsdGhpcy5zdGF0ZVsxXT0zMTQ0MTM0Mjc3LHRoaXMuc3RhdGVbMl09MTAxMzkwNDI0Mix0aGlzLnN0YXRlWzNdPTI3NzM0ODA3NjIsdGhpcy5zdGF0ZVs0XT0xMzU5ODkzMTE5LHRoaXMuc3RhdGVbNV09MjYwMDgyMjkyNCx0aGlzLnN0YXRlWzZdPTUyODczNDYzNSx0aGlzLnN0YXRlWzddPTE1NDE0NTkyMjUsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmJ5dGVzSGFzaGVkPTAsdGhpcy5maW5pc2hlZD0hMSx0aGlzfSx0LnByb3RvdHlwZS5jbGVhbj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5idWZmZXIubGVuZ3RoO2UrKyl0aGlzLmJ1ZmZlcltlXT0wO2ZvcihlPTA7ZTx0aGlzLnRlbXAubGVuZ3RoO2UrKyl0aGlzLnRlbXBbZV09MDt0aGlzLnJlc2V0KCl9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQmJih0PWUubGVuZ3RoKSx0aGlzLmZpbmlzaGVkKXRocm93IG5ldyBFcnJvcigiU0hBMjU2OiBjYW4ndCB1cGRhdGUgYmVjYXVzZSBoYXNoIHdhcyBmaW5pc2hlZC4iKTt2YXIgbj0wO2lmKHRoaXMuYnl0ZXNIYXNoZWQrPXQsdGhpcy5idWZmZXJMZW5ndGg+MCl7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw2NCYmdD4wOyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lW24rK10sdC0tOzY0PT09dGhpcy5idWZmZXJMZW5ndGgmJihyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAsNjQpLHRoaXMuYnVmZmVyTGVuZ3RoPTApfWZvcih0Pj02NCYmKG49cih0aGlzLnRlbXAsdGhpcy5zdGF0ZSxlLG4sdCksdCU9NjQpO3Q+MDspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZVtuKytdLHQtLTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbmlzaGVkKXt2YXIgdD10aGlzLmJ5dGVzSGFzaGVkLG49dGhpcy5idWZmZXJMZW5ndGgsaT10LzUzNjg3MDkxMnwwLG89dDw8MyxzPXQlNjQ8NTY/NjQ6MTI4O3RoaXMuYnVmZmVyW25dPTEyODtmb3IodmFyIGE9bisxO2E8cy04O2ErKyl0aGlzLmJ1ZmZlclthXT0wO3RoaXMuYnVmZmVyW3MtOF09aT4+PjI0JjI1NSx0aGlzLmJ1ZmZlcltzLTddPWk+Pj4xNiYyNTUsdGhpcy5idWZmZXJbcy02XT1pPj4+OCYyNTUsdGhpcy5idWZmZXJbcy01XT1pPj4+MCYyNTUsdGhpcy5idWZmZXJbcy00XT1vPj4+MjQmMjU1LHRoaXMuYnVmZmVyW3MtM109bz4+PjE2JjI1NSx0aGlzLmJ1ZmZlcltzLTJdPW8+Pj44JjI1NSx0aGlzLmJ1ZmZlcltzLTFdPW8+Pj4wJjI1NSxyKHRoaXMudGVtcCx0aGlzLnN0YXRlLHRoaXMuYnVmZmVyLDAscyksdGhpcy5maW5pc2hlZD0hMH1mb3IoYT0wO2E8ODthKyspZVs0KmErMF09dGhpcy5zdGF0ZVthXT4+PjI0JjI1NSxlWzQqYSsxXT10aGlzLnN0YXRlW2FdPj4+MTYmMjU1LGVbNCphKzJdPXRoaXMuc3RhdGVbYV0+Pj44JjI1NSxlWzQqYSszXT10aGlzLnN0YXRlW2FdPj4+MCYyNTU7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KHRoaXMuZGlnZXN0TGVuZ3RoKTtyZXR1cm4gdGhpcy5maW5pc2goZSksZX0sdC5wcm90b3R5cGUuX3NhdmVTdGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuc3RhdGUubGVuZ3RoO3QrKyllW3RdPXRoaXMuc3RhdGVbdF19LHQucHJvdG90eXBlLl9yZXN0b3JlU3RhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPHRoaXMuc3RhdGUubGVuZ3RoO3IrKyl0aGlzLnN0YXRlW3JdPWVbcl07dGhpcy5ieXRlc0hhc2hlZD10LHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5idWZmZXJMZW5ndGg9MH0sdH0oKTtlLkhhc2g9bjt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1uZXcgbix0aGlzLm91dGVyPW5ldyBuLHRoaXMuYmxvY2tTaXplPXRoaXMuaW5uZXIuYmxvY2tTaXplLHRoaXMuZGlnZXN0TGVuZ3RoPXRoaXMuaW5uZXIuZGlnZXN0TGVuZ3RoO3ZhciB0PW5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tTaXplKTtpZihlLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSkobmV3IG4pLnVwZGF0ZShlKS5maW5pc2godCkuY2xlYW4oKTtlbHNlIGZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXRbcl1ePTU0O2Zvcih0aGlzLmlubmVyLnVwZGF0ZSh0KSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXV49MTA2O2Zvcih0aGlzLm91dGVyLnVwZGF0ZSh0KSx0aGlzLmlzdGF0ZT1uZXcgVWludDMyQXJyYXkoOCksdGhpcy5vc3RhdGU9bmV3IFVpbnQzMkFycmF5KDgpLHRoaXMuaW5uZXIuX3NhdmVTdGF0ZSh0aGlzLmlzdGF0ZSksdGhpcy5vdXRlci5fc2F2ZVN0YXRlKHRoaXMub3N0YXRlKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0wfXJldHVybiBlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLl9yZXN0b3JlU3RhdGUodGhpcy5pc3RhdGUsdGhpcy5pbm5lci5ibG9ja1NpemUpLHRoaXMub3V0ZXIuX3Jlc3RvcmVTdGF0ZSh0aGlzLm9zdGF0ZSx0aGlzLm91dGVyLmJsb2NrU2l6ZSksdGhpc30sZS5wcm90b3R5cGUuY2xlYW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuaXN0YXRlLmxlbmd0aDtlKyspdGhpcy5vc3RhdGVbZV09dGhpcy5pc3RhdGVbZV09MDt0aGlzLmlubmVyLmNsZWFuKCksdGhpcy5vdXRlci5jbGVhbigpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUpLHRoaXN9LGUucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vdXRlci5maW5pc2hlZD90aGlzLm91dGVyLmZpbmlzaChlKToodGhpcy5pbm5lci5maW5pc2goZSksdGhpcy5vdXRlci51cGRhdGUoZSx0aGlzLmRpZ2VzdExlbmd0aCkuZmluaXNoKGUpKSx0aGlzfSxlLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSh0aGlzLmRpZ2VzdExlbmd0aCk7cmV0dXJuIHRoaXMuZmluaXNoKGUpLGV9LGV9KCk7ZnVuY3Rpb24gbyhlKXt2YXIgdD0obmV3IG4pLnVwZGF0ZShlKSxyPXQuZGlnZXN0KCk7cmV0dXJuIHQuY2xlYW4oKSxyfWZ1bmN0aW9uIHMoZSx0KXt2YXIgcj1uZXcgaShlKS51cGRhdGUodCksbj1yLmRpZ2VzdCgpO3JldHVybiByLmNsZWFuKCksbn1mdW5jdGlvbiBhKGUsdCxyLG4pe3ZhciBpPW5bMF07aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJoa2RmOiBjYW5ub3QgZXhwYW5kIG1vcmUiKTt0LnJlc2V0KCksaT4xJiZ0LnVwZGF0ZShlKSxyJiZ0LnVwZGF0ZShyKSx0LnVwZGF0ZShuKSx0LmZpbmlzaChlKSxuWzBdKyt9ZS5ITUFDPWksZS5oYXNoPW8sZS5kZWZhdWx0PW8sZS5obWFjPXM7dmFyIHU9bmV3IFVpbnQ4QXJyYXkoZS5kaWdlc3RMZW5ndGgpO2UuaGtkZj1mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT10JiYodD11KSx2b2lkIDA9PT1uJiYobj0zMik7Zm9yKHZhciBvPW5ldyBVaW50OEFycmF5KFsxXSksYz1zKHQsZSksaD1uZXcgaShjKSxsPW5ldyBVaW50OEFycmF5KGguZGlnZXN0TGVuZ3RoKSxmPWwubGVuZ3RoLGQ9bmV3IFVpbnQ4QXJyYXkobikscD0wO3A8bjtwKyspZj09PWwubGVuZ3RoJiYoYShsLGgscixvKSxmPTApLGRbcF09bFtmKytdO3JldHVybiBoLmNsZWFuKCksbC5maWxsKDApLG8uZmlsbCgwKSxkfSxlLnBia2RmMj1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIG89bmV3IGkoZSkscz1vLmRpZ2VzdExlbmd0aCxhPW5ldyBVaW50OEFycmF5KDQpLHU9bmV3IFVpbnQ4QXJyYXkocyksYz1uZXcgVWludDhBcnJheShzKSxoPW5ldyBVaW50OEFycmF5KG4pLGw9MDtsKnM8bjtsKyspe3ZhciBmPWwrMTthWzBdPWY+Pj4yNCYyNTUsYVsxXT1mPj4+MTYmMjU1LGFbMl09Zj4+PjgmMjU1LGFbM109Zj4+PjAmMjU1LG8ucmVzZXQoKSxvLnVwZGF0ZSh0KSxvLnVwZGF0ZShhKSxvLmZpbmlzaChjKTtmb3IodmFyIGQ9MDtkPHM7ZCsrKXVbZF09Y1tkXTtmb3IoZD0yO2Q8PXI7ZCsrKXtvLnJlc2V0KCksby51cGRhdGUoYykuZmluaXNoKGMpO2Zvcih2YXIgcD0wO3A8cztwKyspdVtwXV49Y1twXX1mb3IoZD0wO2Q8cyYmbCpzK2Q8bjtkKyspaFtsKnMrZF09dVtkXX1mb3IobD0wO2w8cztsKyspdVtsXT1jW2xdPTA7Zm9yKGw9MDtsPDQ7bCsrKWFbbF09MDtyZXR1cm4gby5jbGVhbigpLGh9fShuKTt2YXIgaT1uLmRlZmF1bHQ7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2UuZXhwb3J0cz1pfSgpfSkpKTtmdW5jdGlvbiBNcigpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIExyKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX12YXIgSHI9TXIseHI9THI7ZnVuY3Rpb24ganIoZSl7aWYoSHI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKEhyPT09TXJ8fCFIcikmJnNldFRpbWVvdXQpcmV0dXJuIEhyPXNldFRpbWVvdXQsc2V0VGltZW91dChlLDApO3RyeXtyZXR1cm4gSHIoZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIEhyLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBIci5jYWxsKHRoaXMsZSwwKX19fSJmdW5jdGlvbiI9PXR5cGVvZiBDdC5zZXRUaW1lb3V0JiYoSHI9c2V0VGltZW91dCksImZ1bmN0aW9uIj09dHlwZW9mIEN0LmNsZWFyVGltZW91dCYmKHhyPWNsZWFyVGltZW91dCk7dmFyIEJyLHFyPVtdLE5yPSExLEtyPS0xO2Z1bmN0aW9uIEZyKCl7TnImJkJyJiYoTnI9ITEsQnIubGVuZ3RoP3FyPUJyLmNvbmNhdChxcik6S3I9LTEscXIubGVuZ3RoJiZZcigpKX1mdW5jdGlvbiBZcigpe2lmKCFOcil7dmFyIGU9anIoRnIpO05yPSEwO2Zvcih2YXIgdD1xci5sZW5ndGg7dDspe2ZvcihCcj1xcixxcj1bXTsrK0tyPHQ7KUJyJiZCcltLcl0ucnVuKCk7S3I9LTEsdD1xci5sZW5ndGh9QnI9bnVsbCxOcj0hMSxmdW5jdGlvbihlKXtpZih4cj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKCh4cj09PUxyfHwheHIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIHhyPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e3hyKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4geHIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiB4ci5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIFdyKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9V3IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3ZhciB6cj1DdC5wZXJmb3JtYW5jZXx8e30sSnI9KHpyLm5vd3x8enIubW96Tm93fHx6ci5tc05vd3x8enIub05vd3x8enIud2Via2l0Tm93LG5ldyBEYXRlLGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbci0xXT1hcmd1bWVudHNbcl07cXIucHVzaChuZXcgV3IoZSx0KSksMSE9PXFyLmxlbmd0aHx8TnJ8fGpyKFlyKX0pLFZyPWZ1bmN0aW9uKGUpe2lmKGUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixuLmdldD9uOntlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlW3JdfX0pfSkpLHR9KFJyKSwkcj1SdCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1Wci5CdWZmZXI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXX1mdW5jdGlvbiBpKGUsdCxuKXtyZXR1cm4gcihlLHQsbil9ci5mcm9tJiZyLmFsbG9jJiZyLmFsbG9jVW5zYWZlJiZyLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9VnI6KG4oVnIsdCksdC5CdWZmZXI9aSksbihyLGkpLGkuZnJvbT1mdW5jdGlvbihlLHQsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHIoZSx0LG4pfSxpLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBpPXIoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/InN0cmluZyI9PXR5cGVvZiBuP2kuZmlsbCh0LG4pOmkuZmlsbCh0KTppLmZpbGwoMCksaX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiByKGUpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBWci5TbG93QnVmZmVyKGUpfX0pKSxHcj1SdCgoZnVuY3Rpb24oZSl7dmFyIHQ9NjU1MzYscj0kci5CdWZmZXIsbj1UdC5jcnlwdG98fFR0Lm1zQ3J5cHRvO24mJm4uZ2V0UmFuZG9tVmFsdWVzP2UuZXhwb3J0cz1mdW5jdGlvbihlLGkpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBvPXIuYWxsb2NVbnNhZmUoZSk7aWYoZT4wKWlmKGU+dClmb3IodmFyIHM9MDtzPGU7cys9dCluLmdldFJhbmRvbVZhbHVlcyhvLnNsaWNlKHMscyt0KSk7ZWxzZSBuLmdldFJhbmRvbVZhbHVlcyhvKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9KcigoZnVuY3Rpb24oKXtpKG51bGwsbyl9KSk6b306ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0pKTtjb25zdCBYcj1uZXcgVGV4dEVuY29kZXIsWnI9bmV3IFRleHREZWNvZGVyO3ZhciBRcj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpcmV0dXJuIHNlbGY7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdzt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCIpfSgpO2NvbnN0IGVuPWU9PntsZXQgdD1lO3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheSYmKHQ9WnIuZGVjb2RlKHQpKSx0PXQucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIikucmVwbGFjZSgvXHMvZywiIiksbmV3IFVpbnQ4QXJyYXkoUXIuYXRvYih0KS5zcGxpdCgiIikubWFwKChlPT5lLmNoYXJDb2RlQXQoMCkpKSl9O2NsYXNzIHRuIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSk9TRV9HRU5FUklDIix0aGlzLm5hbWU9dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpfX1jbGFzcyBybiBleHRlbmRzIHRue2NvbnN0cnVjdG9yKGUsdD0idW5zcGVjaWZpZWQiLHI9InVuc3BlY2lmaWVkIil7c3VwZXIoZSksdGhpcy5jb2RlPSJFUlJfSldUX0NMQUlNX1ZBTElEQVRJT05fRkFJTEVEIix0aGlzLmNsYWltPXQsdGhpcy5yZWFzb249cn19Y2xhc3Mgbm4gZXh0ZW5kcyB0bntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSk9TRV9BTEdfTk9UX0FMTE9XRUQifX1jbGFzcyBvbiBleHRlbmRzIHRue2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KT1NFX05PVF9TVVBQT1JURUQifX1jbGFzcyBzbiBleHRlbmRzIHRue2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvZGU9IkVSUl9KV1NfSU5WQUxJRCJ9fWNsYXNzIGFuIGV4dGVuZHMgdG57Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29kZT0iRVJSX0pXVF9JTlZBTElEIn19Y2xhc3MgdW4gZXh0ZW5kcyB0bntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldTX1NJR05BVFVSRV9WRVJJRklDQVRJT05fRkFJTEVEIix0aGlzLm1lc3NhZ2U9InNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIn19Y2xhc3MgY24gZXh0ZW5kcyBybntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb2RlPSJFUlJfSldUX0VYUElSRUQifX12YXIgaG49UXIuY3J5cHRvO2Z1bmN0aW9uIGxuKCl7aWYoIVFyLmlzU2VjdXJlQ29udGV4dCYmIVFyLmNyeXB0by5zdWJ0bGUpdGhyb3cgbmV3IHRuKCJXZWIgQ3J5cHRvZ3JhcGh5IEFQSSBpcyBhdmFpbGFibGUgb25seSBpbiBTZWN1cmUgQ29udGV4dHMuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvU2VjdXJpdHkvU2VjdXJlX0NvbnRleHRzIil9Y29uc3QgZm49YXN5bmMgZT0+e3ZhciB0LHI7Y29uc3R7YWxnb3JpdGhtOm4sa2V5VXNhZ2VzOml9PWZ1bmN0aW9uKGUpe2xldCB0LHI7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6c3dpdGNoKGUuYWxnKXtjYXNlIkhTMjU2IjpjYXNlIkhTMzg0IjpjYXNlIkhTNTEyIjp0PXtuYW1lOiJITUFDIixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9WyJzaWduIiwidmVyaWZ5Il07YnJlYWs7Y2FzZSJBMTI4Q0JDLUhTMjU2IjpjYXNlIkExOTJDQkMtSFMzODQiOmNhc2UiQTI1NkNCQy1IUzUxMiI6dGhyb3cgbmV3IG9uKGAke2UuYWxnfSBrZXlzIGNhbm5vdCBiZSBpbXBvcnRlZCBhcyBDcnlwdG9LZXkgaW5zdGFuY2VzYCk7Y2FzZSJBMTI4R0NNIjpjYXNlIkExOTJHQ00iOmNhc2UiQTI1NkdDTSI6Y2FzZSJBMTI4R0NNS1ciOmNhc2UiQTE5MkdDTUtXIjpjYXNlIkEyNTZHQ01LVyI6dD17bmFtZToiQUVTLUdDTSJ9LHI9WyJlbmNyeXB0IiwiZGVjcnlwdCJdO2JyZWFrO2Nhc2UiQTEyOEtXIjpjYXNlIkExOTJLVyI6Y2FzZSJBMjU2S1ciOnQ9e25hbWU6IkFFUy1LVyJ9LHI9WyJ3cmFwS2V5IiwidW53cmFwS2V5Il07YnJlYWs7Y2FzZSJQQkVTMi1IUzI1NitBMTI4S1ciOmNhc2UiUEJFUzItSFMzODQrQTE5MktXIjpjYXNlIlBCRVMyLUhTNTEyK0EyNTZLVyI6dD17bmFtZToiUEJLREYyIn0scj1bImRlcml2ZUJpdHMiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvbigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJSU0EiOnN3aXRjaChlLmFsZyl7Y2FzZSJQUzI1NiI6Y2FzZSJQUzM4NCI6Y2FzZSJQUzUxMiI6dD17bmFtZToiUlNBLVBTUyIsaGFzaDpgU0hBLSR7ZS5hbGcuc3Vic3RyKC0zKX1gfSxyPWUuZD9bInNpZ24iXTpbInZlcmlmeSJdO2JyZWFrO2Nhc2UiUlMyNTYiOmNhc2UiUlMzODQiOmNhc2UiUlM1MTIiOnQ9e25hbWU6IlJTQVNTQS1QS0NTMS12MV81IixoYXNoOmBTSEEtJHtlLmFsZy5zdWJzdHIoLTMpfWB9LHI9ZS5kP1sic2lnbiJdOlsidmVyaWZ5Il07YnJlYWs7Y2FzZSJSU0EtT0FFUCI6Y2FzZSJSU0EtT0FFUC0yNTYiOmNhc2UiUlNBLU9BRVAtMzg0IjpjYXNlIlJTQS1PQUVQLTUxMiI6dD17bmFtZToiUlNBLU9BRVAiLGhhc2g6YFNIQS0ke3BhcnNlSW50KGUuYWxnLnN1YnN0cigtMyksMTApfHwxfWB9LHI9ZS5kP1siZGVjcnlwdCIsInVud3JhcEtleSJdOlsiZW5jcnlwdCIsIndyYXBLZXkiXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvbigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImFsZyIgKEFsZ29yaXRobSkgUGFyYW1ldGVyIHZhbHVlJyl9YnJlYWs7Y2FzZSJFQyI6c3dpdGNoKGUuYWxnKXtjYXNlIkVTMjU2IjpjYXNlIkVTMzg0IjpjYXNlIkVTNTEyIjp0PXtuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZTplLmNydn0scj1lLmQ/WyJzaWduIl06WyJ2ZXJpZnkiXTticmVhaztjYXNlIkVDREgtRVMiOmNhc2UiRUNESC1FUytBMTI4S1ciOmNhc2UiRUNESC1FUytBMTkyS1ciOmNhc2UiRUNESC1FUytBMjU2S1ciOnQ9e25hbWU6IkVDREgiLG5hbWVkQ3VydmU6ZS5jcnZ9LHI9ZS5kP1siZGVyaXZlQml0cyJdOltdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG9uKCd1bnN1cHBvcnRlZCBvciBpbnZhbGlkIEpXSyAiYWxnIiAoQWxnb3JpdGhtKSBQYXJhbWV0ZXIgdmFsdWUnKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBvbigndW5zdXBwb3J0ZWQgb3IgaW52YWxpZCBKV0sgImt0eSIgKEtleSBUeXBlKSBQYXJhbWV0ZXIgdmFsdWUnKX1yZXR1cm57YWxnb3JpdGhtOnQsa2V5VXNhZ2VzOnJ9fShlKTtsZXQgbz0iandrIixzPXsuLi5lfTtyZXR1cm4gZGVsZXRlIHMuYWxnLCJQQktERjIiPT09bi5uYW1lJiYobz0icmF3IixzPWVuKGUuaykpLGxuKCksaG4uc3VidGxlLmltcG9ydEtleShvLHMsbixudWxsIT09KHQ9ZS5leHQpJiZ2b2lkIDAhPT10JiZ0LG51bGwhPT0ocj1lLmtleV9vcHMpJiZ2b2lkIDAhPT1yP3I6aSl9O2Z1bmN0aW9uIGRuKGUpe3JldHVybiEhZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1hc3luYyBmdW5jdGlvbiBwbihlLHQscil7aWYoIWRuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkpXSyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHR8fCh0PWUuYWxnKSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJhbGciIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdoZW4gImp3ay5hbGciIGlzIG5vdCBwcmVzZW50Jyk7c3dpdGNoKGUua3R5KXtjYXNlIm9jdCI6aWYoInN0cmluZyIhPXR5cGVvZiBlLmt8fCFlLmspdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyAiayIgKEtleSBWYWx1ZSkgUGFyYW1ldGVyIHZhbHVlJyk7cmV0dXJuIG51bGwhPXJ8fChyPSEwIT09ZS5leHQpLHI/Zm4oey4uLmUsYWxnOnQsZXh0OiExfSk6ZW4oZS5rKTtjYXNlIlJTQSI6aWYodm9pZCAwIT09ZS5vdGgpdGhyb3cgbmV3IG9uKCdSU0EgSldLICJvdGgiIChPdGhlciBQcmltZXMgSW5mbykgUGFyYW1ldGVyIHZhbHVlIGlzIHVuc3VwcG9ydGVkJyk7Y2FzZSJFQyI6Y2FzZSJPS1AiOnJldHVybiBmbih7Li4uZSxhbGc6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IG9uKCd1bnN1cHBvcnRlZCAia3R5IiAoS2V5IFR5cGUpIFBhcmFtZXRlciB2YWx1ZScpfX1jb25zdCBnbj1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDAhPT1uLmNyaXQmJnZvaWQgMD09PXIuY3JpdCl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWQnKTtpZighcnx8dm9pZCAwPT09ci5jcml0KXJldHVybiBuZXcgU2V0O2lmKCFBcnJheS5pc0FycmF5KHIuY3JpdCl8fDA9PT1yLmNyaXQubGVuZ3RofHxyLmNyaXQuc29tZSgoZT0+InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpKSl0aHJvdyBuZXcgZSgnImNyaXQiIChDcml0aWNhbCkgSGVhZGVyIFBhcmFtZXRlciBNVVNUIGJlIGFuIGFycmF5IG9mIG5vbi1lbXB0eSBzdHJpbmdzIHdoZW4gcHJlc2VudCcpO2Zvcihjb25zdCBpIG9mIHIuY3JpdCl7aWYoIXQuaGFzKGkpKXRocm93IG5ldyBvbihgRXh0ZW5zaW9uIEhlYWRlciBQYXJhbWV0ZXIgIiR7aX0iIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbmApO2lmKHZvaWQgMD09PW5baV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBpcyBtaXNzaW5nYCk7aWYodC5nZXQoaSkmJnZvaWQgMD09PXJbaV0pdGhyb3cgbmV3IGUoYEV4dGVuc2lvbiBIZWFkZXIgUGFyYW1ldGVyICIke2l9IiBNVVNUIGJlIGludGVncml0eSBwcm90ZWN0ZWRgKX1yZXR1cm4gbmV3IFNldChyLmNyaXQpfS5iaW5kKHZvaWQgMCxzbixuZXcgTWFwKFtbImI2NCIsITBdXSkpLHZuPSgoZSx0KT0+e2lmKHZvaWQgMCE9PXQmJighQXJyYXkuaXNBcnJheSh0KXx8dC5zb21lKChlPT4ic3RyaW5nIiE9dHlwZW9mIGUpKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgIiR7ZX0iIG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtpZih0KXJldHVybiBuZXcgU2V0KHQpfSkuYmluZCh2b2lkIDAsImFsZ29yaXRobXMiKTthc3luYyBmdW5jdGlvbiB5bihlLHQscil7aWYoIWRuKGUpKXRocm93IG5ldyBzbigiRmxhdHRlbmVkIEpXUyBtdXN0IGJlIGFuIG9iamVjdCIpO2lmKHZvaWQgMD09PWUucHJvdGVjdGVkJiZ2b2lkIDA9PT1lLmhlYWRlcil0aHJvdyBuZXcgc24oJ0ZsYXR0ZW5lZCBKV1MgbXVzdCBoYXZlIGVpdGhlciBvZiB0aGUgInByb3RlY3RlZCIgb3IgImhlYWRlciIgbWVtYmVycycpO2lmKHZvaWQgMCE9PWUucHJvdGVjdGVkJiYic3RyaW5nIiE9dHlwZW9mIGUucHJvdGVjdGVkKXRocm93IG5ldyBzbigiSldTIFByb3RlY3RlZCBIZWFkZXIgaW5jb3JyZWN0IHR5cGUiKTtpZih2b2lkIDA9PT1lLnBheWxvYWQpdGhyb3cgbmV3IHNuKCJKV1MgUGF5bG9hZCBtaXNzaW5nIik7aWYoInN0cmluZyIhPXR5cGVvZiBlLnNpZ25hdHVyZSl0aHJvdyBuZXcgc24oIkpXUyBTaWduYXR1cmUgbWlzc2luZyBvciBpbmNvcnJlY3QgdHlwZSIpO2lmKHZvaWQgMCE9PWUuaGVhZGVyJiYhZG4oZS5oZWFkZXIpKXRocm93IG5ldyBzbigiSldTIFVucHJvdGVjdGVkIEhlYWRlciBpbmNvcnJlY3QgdHlwZSIpO2xldCBuPXt9O2lmKGUucHJvdGVjdGVkKXtjb25zdCB0PWVuKGUucHJvdGVjdGVkKTtuPUpTT04ucGFyc2UoWnIuZGVjb2RlKHQpKX1pZighKCguLi5lKT0+e2NvbnN0IHQ9ZS5maWx0ZXIoQm9vbGVhbik7aWYoMD09PXQubGVuZ3RofHwxPT09dC5sZW5ndGgpcmV0dXJuITA7bGV0IHI7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKTtpZihyJiYwIT09ci5zaXplKWZvcihjb25zdCBlIG9mIHQpe2lmKHIuaGFzKGUpKXJldHVybiExO3IuYWRkKGUpfWVsc2Ugcj1uZXcgU2V0KHQpfXJldHVybiEwfSkobixlLmhlYWRlcikpdGhyb3cgbmV3IHNuKCJKV1MgUHJvdGVjdGVkIGFuZCBKV1MgVW5wcm90ZWN0ZWQgSGVhZGVyIFBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIGRpc2pvaW50Iik7Y29uc3QgaT17Li4ubiwuLi5lLmhlYWRlcn07bGV0IG89ITA7aWYoZ24obixpKS5oYXMoImI2NCIpJiYobz1uLmI2NCwiYm9vbGVhbiIhPXR5cGVvZiBvKSl0aHJvdyBuZXcgc24oJ1RoZSAiYjY0IiAoYmFzZTY0dXJsLWVuY29kZSBwYXlsb2FkKSBIZWFkZXIgUGFyYW1ldGVyIG11c3QgYmUgYSBib29sZWFuJyk7Y29uc3R7YWxnOnN9PWk7aWYoInN0cmluZyIhPXR5cGVvZiBzfHwhcyl0aHJvdyBuZXcgc24oJ0pXUyAiYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZCcpO2NvbnN0IGE9ciYmdm4oci5hbGdvcml0aG1zKTtpZihhJiYhYS5oYXMocykpdGhyb3cgbmV3IG5uKCciYWxnIiAoQWxnb3JpdGhtKSBIZWFkZXIgUGFyYW1ldGVyIG5vdCBhbGxvd2VkJyk7aWYobyl7aWYoInN0cmluZyIhPXR5cGVvZiBlLnBheWxvYWQpdGhyb3cgbmV3IHNuKCJKV1MgUGF5bG9hZCBtdXN0IGJlIGEgc3RyaW5nIil9ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUucGF5bG9hZCYmIShlLnBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgc24oIkpXUyBQYXlsb2FkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gVWludDhBcnJheSBpbnN0YW5jZSIpOyJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD1hd2FpdCB0KG4sZSkpLCgoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKXx8ImRpciI9PT1lfHxlLnN0YXJ0c1dpdGgoIlBCRVMyIil8fGUubWF0Y2goL15BXGR7M30oPzpHQ00pS1ckLykpe2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHwic2VjcmV0Ij09PXQudHlwZSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIHN5bW1ldHJpYyBhbGdvcml0aG1zIG11c3QgYmUgb2YgdHlwZSAic2VjcmV0IicpfWlmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KXRocm93IG5ldyBUeXBlRXJyb3IoIkNyeXB0b0tleSBvciBLZXlPYmplY3QgaW5zdGFuY2VzIG11c3QgYmUgdXNlZCBmb3IgYXN5bW1ldHJpYyBhbGdvcml0aG1zIik7aWYoInNlY3JldCI9PT10LnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcignQ3J5cHRvS2V5IG9yIEtleU9iamVjdCBpbnN0YW5jZXMgZm9yIGFzeW1tZXRyaWMgYWxnb3JpdGhtcyBtdXN0IG5vdCBiZSBvZiB0eXBlICJzZWNyZXQiJyl9KShzLHQpO2NvbnN0IHU9ZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1lLnJlZHVjZSgoKGUse2xlbmd0aDp0fSk9PmUrdCksMCkscj1uZXcgVWludDhBcnJheSh0KTtsZXQgbj0wO3JldHVybiBlLmZvckVhY2goKGU9PntyLnNldChlLG4pLG4rPWUubGVuZ3RofSkpLHJ9KFhyLmVuY29kZShlLnByb3RlY3RlZHx8IiIpLFhyLmVuY29kZSgiLiIpLCJzdHJpbmciPT10eXBlb2YgZS5wYXlsb2FkP1hyLmVuY29kZShlLnBheWxvYWQpOmUucGF5bG9hZCksYz1lbihlLnNpZ25hdHVyZSk7aWYoIWF3YWl0KGFzeW5jKGUsdCxyLG4pPT57bGV0IGk7aWYobG4oKSx0IGluc3RhbmNlb2YgVWludDhBcnJheSl7aWYoIWUuc3RhcnRzV2l0aCgiSFMiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzeW1tZXRyaWMga2V5cyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciBITUFDLWJhc2VkIGFsZ29yaXRobXMiKTtpPWF3YWl0IGhuLnN1YnRsZS5pbXBvcnRLZXkoInJhdyIsdCx7aGFzaDpgU0hBLSR7ZS5zdWJzdHIoLTMpfWAsbmFtZToiSE1BQyJ9LCExLFsidmVyaWZ5Il0pfWVsc2UgaT10O3JldHVybigoZSx0KT0+e2lmKGUuc3RhcnRzV2l0aCgiSFMiKSl7Y29uc3Qgcj1wYXJzZUludChlLnN1YnN0cigtMyksMTApLHtsZW5ndGg6bn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiBufHxuPHIpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBzeW1tZXRyaWMga2V5cyB0byBiZSAke3J9IGJpdHMgb3IgbGFyZ2VyYCl9aWYoZS5zdGFydHNXaXRoKCJSUyIpfHxlLnN0YXJ0c1dpdGgoIlBTIikpe2NvbnN0e21vZHVsdXNMZW5ndGg6cn09dC5hbGdvcml0aG07aWYoIm51bWJlciIhPXR5cGVvZiByfHxyPDIwNDgpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlfSByZXF1aXJlcyBrZXkgbW9kdWx1c0xlbmd0aCB0byBiZSAyMDQ4IGJpdHMgb3IgbGFyZ2VyYCl9fSkoZSxpKSxobi5zdWJ0bGUudmVyaWZ5KGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkhTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiSE1BQyJ9O2Nhc2UiSFMzODQiOnJldHVybntoYXNoOiJTSEEtMzg0IixuYW1lOiJITUFDIn07Y2FzZSJIUzUxMiI6cmV0dXJue2hhc2g6IlNIQS01MTIiLG5hbWU6IkhNQUMifTtjYXNlIlBTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBLVBTUyIsc2FsdExlbmd0aDozMn07Y2FzZSJQUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IlJTQS1QU1MiLHNhbHRMZW5ndGg6NDh9O2Nhc2UiUFM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJSU0EtUFNTIixzYWx0TGVuZ3RoOjY0fTtjYXNlIlJTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTMzg0IjpyZXR1cm57aGFzaDoiU0hBLTM4NCIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIlJTNTEyIjpyZXR1cm57aGFzaDoiU0hBLTUxMiIsbmFtZToiUlNBU1NBLVBLQ1MxLXYxXzUifTtjYXNlIkVTMjU2IjpyZXR1cm57aGFzaDoiU0hBLTI1NiIsbmFtZToiRUNEU0EiLG5hbWVkQ3VydmU6IlAtMjU2In07Y2FzZSJFUzM4NCI6cmV0dXJue2hhc2g6IlNIQS0zODQiLG5hbWU6IkVDRFNBIixuYW1lZEN1cnZlOiJQLTM4NCJ9O2Nhc2UiRVM1MTIiOnJldHVybntoYXNoOiJTSEEtNTEyIixuYW1lOiJFQ0RTQSIsbmFtZWRDdXJ2ZToiUC01MjEifTtkZWZhdWx0OnRocm93IG5ldyBvbihgYWxnICR7ZX0gaXMgdW5zdXBwb3J0ZWQgZWl0aGVyIGJ5IEpPU0Ugb3IgeW91ciBqYXZhc2NyaXB0IHJ1bnRpbWVgKX19KGUpLGkscixuKX0pKHMsdCxjLHUpKXRocm93IG5ldyB1bjtsZXQgaDtoPW8/ZW4oZS5wYXlsb2FkKToic3RyaW5nIj09dHlwZW9mIGUucGF5bG9hZD9Yci5lbmNvZGUoZS5wYXlsb2FkKTplLnBheWxvYWQ7Y29uc3QgbD17cGF5bG9hZDpofTtyZXR1cm4gdm9pZCAwIT09ZS5wcm90ZWN0ZWQmJihsLnByb3RlY3RlZEhlYWRlcj1uKSx2b2lkIDAhPT1lLmhlYWRlciYmKGwudW5wcm90ZWN0ZWRIZWFkZXI9ZS5oZWFkZXIpLGx9Y29uc3QgbW49L14oXGQrfFxkK1wuXGQrKSA/KHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSkkL2k7dmFyIHduPWU9Pntjb25zdCB0PW1uLmV4ZWMoZSk7aWYoIXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCB0aW1lIHBlcmlvZCBmb3JtYXQiKTtjb25zdCByPXBhcnNlRmxvYXQodFsxXSk7c3dpdGNoKHRbMl0udG9Mb3dlckNhc2UoKSl7Y2FzZSJzZWMiOmNhc2Uic2VjcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2Vjb25kcyI6Y2FzZSJzIjpyZXR1cm4gTWF0aC5yb3VuZChyKTtjYXNlIm1pbnV0ZSI6Y2FzZSJtaW51dGVzIjpjYXNlIm1pbiI6Y2FzZSJtaW5zIjpjYXNlIm0iOnJldHVybiBNYXRoLnJvdW5kKDYwKnIpO2Nhc2UiaG91ciI6Y2FzZSJob3VycyI6Y2FzZSJociI6Y2FzZSJocnMiOmNhc2UiaCI6cmV0dXJuIE1hdGgucm91bmQoMzYwMCpyKTtjYXNlImRheSI6Y2FzZSJkYXlzIjpjYXNlImQiOnJldHVybiBNYXRoLnJvdW5kKDg2NDAwKnIpO2Nhc2Uid2VlayI6Y2FzZSJ3ZWVrcyI6Y2FzZSJ3IjpyZXR1cm4gTWF0aC5yb3VuZCg2MDQ4MDAqcik7ZGVmYXVsdDpyZXR1cm4gTWF0aC5yb3VuZCgzMTU1NzYwMCpyKX19O2NvbnN0IGJuPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eYXBwbGljYXRpb25cLy8sIiIpO3ZhciBfbj0oZSx0LHI9e30pPT57Y29uc3R7dHlwOm59PXI7aWYobiYmKCJzdHJpbmciIT10eXBlb2YgZS50eXB8fGJuKGUudHlwKSE9PWJuKG4pKSl0aHJvdyBuZXcgcm4oJ3VuZXhwZWN0ZWQgInR5cCIgSldUIGhlYWRlciB2YWx1ZScsInR5cCIsImNoZWNrX2ZhaWxlZCIpO2xldCBpO3RyeXtpPUpTT04ucGFyc2UoWnIuZGVjb2RlKHQpKX1jYXRjaChlKXt9aWYoIm9iamVjdCIhPXR5cGVvZiBpfHwhaXx8QXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgYW4oIkpXVCBDbGFpbXMgU2V0IG11c3QgYmUgYSB0b3AtbGV2ZWwgSlNPTiBvYmplY3QiKTtjb25zdHtpc3N1ZXI6b309cjtpZihvJiYhKCJzdHJpbmciPT10eXBlb2Ygbz9bb106bykuaW5jbHVkZXMoaS5pc3MpKXRocm93IG5ldyBybigndW5leHBlY3RlZCAiaXNzIiBjbGFpbSB2YWx1ZScsImlzcyIsImNoZWNrX2ZhaWxlZCIpO2NvbnN0e3N1YmplY3Q6c309cjtpZihzJiZpLnN1YiE9PXMpdGhyb3cgbmV3IHJuKCd1bmV4cGVjdGVkICJzdWIiIGNsYWltIHZhbHVlJywic3ViIiwiY2hlY2tfZmFpbGVkIik7Y29uc3R7YXVkaWVuY2U6YX09cjtpZihhJiYoYz0ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEsISgic3RyaW5nIj09dHlwZW9mKHU9aS5hdWQpP2MuaW5jbHVkZXModSk6Yy5zb21lKFNldC5wcm90b3R5cGUuaGFzLmJpbmQobmV3IFNldCh1KSkpKSkpdGhyb3cgbmV3IHJuKCd1bmV4cGVjdGVkICJhdWQiIGNsYWltIHZhbHVlJywiYXVkIiwiY2hlY2tfZmFpbGVkIik7dmFyIHUsYztsZXQgaDtzd2l0Y2godHlwZW9mIHIuY2xvY2tUb2xlcmFuY2Upe2Nhc2Uic3RyaW5nIjpoPXduKHIuY2xvY2tUb2xlcmFuY2UpO2JyZWFrO2Nhc2UibnVtYmVyIjpoPXIuY2xvY2tUb2xlcmFuY2U7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmg9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2xvY2tUb2xlcmFuY2Ugb3B0aW9uIHR5cGUiKX1jb25zdHtjdXJyZW50RGF0ZTpsfT1yLGY9KGQ9bHx8bmV3IERhdGUsTWF0aC5mbG9vcihkLmdldFRpbWUoKS8xZTMpKTt2YXIgZDtpZih2b2lkIDAhPT1pLmlhdHx8ci5tYXhUb2tlbkFnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpLmlhdCl0aHJvdyBuZXcgcm4oJyJpYXQiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJpYXQiLCJpbnZhbGlkIik7aWYodm9pZCAwPT09aS5leHAmJmkuaWF0PmYraCl0aHJvdyBuZXcgcm4oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKGl0IHNob3VsZCBiZSBpbiB0aGUgcGFzdCknLCJpYXQiLCJjaGVja19mYWlsZWQiKX1pZih2b2lkIDAhPT1pLm5iZil7aWYoIm51bWJlciIhPXR5cGVvZiBpLm5iZil0aHJvdyBuZXcgcm4oJyJuYmYiIGNsYWltIG11c3QgYmUgYSBudW1iZXInLCJuYmYiLCJpbnZhbGlkIik7aWYoaS5uYmY+ZitoKXRocm93IG5ldyBybignIm5iZiIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsIm5iZiIsImNoZWNrX2ZhaWxlZCIpfWlmKHZvaWQgMCE9PWkuZXhwKXtpZigibnVtYmVyIiE9dHlwZW9mIGkuZXhwKXRocm93IG5ldyBybignImV4cCIgY2xhaW0gbXVzdCBiZSBhIG51bWJlcicsImV4cCIsImludmFsaWQiKTtpZihpLmV4cDw9Zi1oKXRocm93IG5ldyBjbignImV4cCIgY2xhaW0gdGltZXN0YW1wIGNoZWNrIGZhaWxlZCcsImV4cCIsImNoZWNrX2ZhaWxlZCIpfWlmKHIubWF4VG9rZW5BZ2Upe2NvbnN0IGU9Zi1pLmlhdDtpZihlLWg+KCJudW1iZXIiPT10eXBlb2Ygci5tYXhUb2tlbkFnZT9yLm1heFRva2VuQWdlOnduKHIubWF4VG9rZW5BZ2UpKSl0aHJvdyBuZXcgY24oJyJpYXQiIGNsYWltIHRpbWVzdGFtcCBjaGVjayBmYWlsZWQgKHRvbyBmYXIgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIik7aWYoZTwwLWgpdGhyb3cgbmV3IHJuKCciaWF0IiBjbGFpbSB0aW1lc3RhbXAgY2hlY2sgZmFpbGVkIChpdCBzaG91bGQgYmUgaW4gdGhlIHBhc3QpJywiaWF0IiwiY2hlY2tfZmFpbGVkIil9cmV0dXJuIGl9O2NvbnN0IGtuPXJlcXVpcmUoInNlY3VyZS1yYW5kb20tYnl0ZXMiKTtjbGFzcyBTbntjb25zdHJ1Y3Rvcigpe31zdGF0aWMgYmFzZTY0VVJMRW5jb2RlKGUpe3JldHVybiBEci5lbmNvZGUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfXN0YXRpYyBnZXRDb2RlVmVyaWZpZXIoZSl7c3dpdGNoKGUpe2Nhc2UgU3QuTm9kZTpyZXR1cm4gdGhpcy5iYXNlNjRVUkxFbmNvZGUoa24oMzIpKTtjYXNlIFN0LkJyb3dzZXI6cmV0dXJuIHRoaXMuYmFzZTY0VVJMRW5jb2RlKEdyKDMyKSk7Y2FzZSBTdC5SZWFjdE5hdGl2ZTpyZXR1cm4gdGhpcy5iYXNlNjRVUkxFbmNvZGUoSXIucmFuZG9tKDMyKS50b1N0cmluZygpKTtkZWZhdWx0OnJldHVybiB0aGlzLmJhc2U2NFVSTEVuY29kZShHcigzMikpfX1zdGF0aWMgZ2V0Q29kZUNoYWxsZW5nZShlKXtyZXR1cm4gdGhpcy5iYXNlNjRVUkxFbmNvZGUobmV3IGcoVXIoKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGUpKSkpfXN0YXRpYyBnZXRTdXBwb3J0ZWRTaWduYXR1cmVBbGdvcml0aG1zKCl7cmV0dXJuWyJSUzI1NiIsIlJTNTEyIiwiUlMzODQiLCJQUzI1NiJdfXN0YXRpYyBnZXRKV0tGb3JUaGVJZFRva2VuKGUsdCl7Y29uc3Qgcj1KU09OLnBhcnNlKERyLmRlY29kZShlLCJ1dGY4IikpO2Zvcihjb25zdCBlIG9mIHQpaWYoci5raWQ9PT1lLmtpZClyZXR1cm4gcG4oe2FsZzplLmFsZyxlOmUuZSxrdHk6ZS5rdHksbjplLm59KTtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJDUllQVE9fVVRJTC1HVEZUSVQtSVYwMSIsImNyeXB0by11dGlscyIsImdldEpXS0ZvclRoZUlkVG9rZW4iLCJraWQgbm90IGZvdW5kLiIsIkZhaWxlZCB0byBmaW5kIHRoZSAna2lkJyBzcGVjaWZpZWQgaW4gdGhlIGlkX3Rva2VuLiAna2lkJyBmb3VuZCBpbiB0aGUgaGVhZGVyIDogIityLmtpZCsiLCBFeHBlY3RlZCB2YWx1ZXM6ICIrdC5tYXAoKGU9PmUua2lkKSkuam9pbigiLCAiKSkpfXN0YXRpYyBpc1ZhbGlkSWRUb2tlbihlLHQscixuLGksbyl7cmV0dXJuIGFzeW5jIGZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPWF3YWl0IGFzeW5jIGZ1bmN0aW9uKGUsdCxyKXtpZihlIGluc3RhbmNlb2YgVWludDhBcnJheSYmKGU9WnIuZGVjb2RlKGUpKSwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IHNuKCJDb21wYWN0IEpXUyBtdXN0IGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXkiKTtjb25zdHswOm4sMTppLDI6byxsZW5ndGg6c309ZS5zcGxpdCgiLiIpO2lmKDMhPT1zKXRocm93IG5ldyBzbigiSW52YWxpZCBDb21wYWN0IEpXUyIpO2NvbnN0IGE9YXdhaXQgeW4oe3BheWxvYWQ6aXx8dm9pZCAwLHByb3RlY3RlZDpufHx2b2lkIDAsc2lnbmF0dXJlOm98fHZvaWQgMH0sdCxyKTtyZXR1cm57cGF5bG9hZDphLnBheWxvYWQscHJvdGVjdGVkSGVhZGVyOmEucHJvdGVjdGVkSGVhZGVyfX0oZSx0LHIpO3JldHVybntwYXlsb2FkOl9uKG4ucHJvdGVjdGVkSGVhZGVyLG4ucGF5bG9hZCxyKSxwcm90ZWN0ZWRIZWFkZXI6bi5wcm90ZWN0ZWRIZWFkZXJ9fShlLHQse2FsZ29yaXRobXM6dGhpcy5nZXRTdXBwb3J0ZWRTaWduYXR1cmVBbGdvcml0aG1zKCksYXVkaWVuY2U6cixjbG9ja1RvbGVyYW5jZTpvLGlzc3VlcjpuLHN1YmplY3Q6aX0pLnRoZW4oKCgpPT5Qcm9taXNlLnJlc29sdmUoITApKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBdCgiQ1JZUFRPX1VUSUwtSVZJVC1JVjAyIiwiY3J5cHRvLXV0aWxzIiwiaXNWYWxpZElkVG9rZW4iLCJWYWxpZGF0aW5nIElEIHRva2VuIGZhaWxlZCIsZSkpKSl9c3RhdGljIGRlY29kZUlEVG9rZW4oZSl7dHJ5e2NvbnN0IHQ9RHIuZGVjb2RlKGUuc3BsaXQoIi4iKVsxXSwidXRmOCIpO3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBBdCgiQ1JZUFRPX1VUSUwtRElULUlWMDEiLCJjcnlwdG8tdXRpbHMiLCJkZWNvZGVJRFRva2VuIiwiRGVjb2RpbmcgSUQgdG9rZW4gZmFpbGVkLiIsZSl9fX1jbGFzcyBBbntjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGUpe3ZhciB0LHIsbixpO2NvbnN0IG89U24uZGVjb2RlSURUb2tlbihlKSxzPXRoaXMuZ2V0VGVuYW50RG9tYWluRnJvbUlkVG9rZW5QYXlsb2FkKG8pLGE9bnVsbCE9PSh0PW51bGw9PW8/dm9pZCAwOm8udXNlcm5hbWUpJiZ2b2lkIDAhPT10P3Q6IiIsdT1udWxsIT09KHI9by5naXZlbl9uYW1lKSYmdm9pZCAwIT09cj9yOiIiLGM9bnVsbCE9PShuPW8uZmFtaWx5X25hbWUpJiZ2b2lkIDAhPT1uP246IiIsaD11JiZjP2Ake3V9ICR7Y31gOnV8fGN8fCIiLGw9bnVsbCE9PShpPW8ucHJlZmVycmVkX3VzZXJuYW1lKSYmdm9pZCAwIT09aT9pOmg7cmV0dXJuIE9iamVjdC5hc3NpZ24oe2Rpc3BsYXlOYW1lOmwsdGVuYW50RG9tYWluOnMsdXNlcm5hbWU6YX0sdGhpcy5maWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQobykpfXN0YXRpYyBmaWx0ZXJDbGFpbXNGcm9tSURUb2tlblBheWxvYWQoZSl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO251bGw9PXR8fGRlbGV0ZSB0LmlzcyxudWxsPT10fHxkZWxldGUgdC5hdWQsbnVsbD09dHx8ZGVsZXRlIHQuZXhwLG51bGw9PXR8fGRlbGV0ZSB0LmlhdCxudWxsPT10fHxkZWxldGUgdC5hY3IsbnVsbD09dHx8ZGVsZXRlIHQuYW1yLG51bGw9PXR8fGRlbGV0ZSB0LmF6cCxudWxsPT10fHxkZWxldGUgdC5hdXRoX3RpbWUsbnVsbD09dHx8ZGVsZXRlIHQubm9uY2UsbnVsbD09dHx8ZGVsZXRlIHQuY19oYXNoLG51bGw9PXR8fGRlbGV0ZSB0LmF0X2hhc2gsbnVsbD09dHx8ZGVsZXRlIHQubmJmLG51bGw9PXR8fGRlbGV0ZSB0LmlzayxudWxsPT10fHxkZWxldGUgdC5zaWQ7Y29uc3Qgcj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoKFtlLHRdKT0+e2NvbnN0IG49ZS5zcGxpdCgiXyIpLm1hcCgoKGUsdCk9PjA9PT10P2U6W2VbMF0udG9VcHBlckNhc2UoKSwuLi5lLnNsaWNlKDEpXS5qb2luKCIiKSkpLmpvaW4oIiIpO3Jbbl09dH0pKSxyfXN0YXRpYyBnZXRUb2tlblJlcXVlc3RIZWFkZXJzKCl7cmV0dXJue0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiIsIkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9fX1Bbi5nZXRUZW5hbnREb21haW5Gcm9tSWRUb2tlblBheWxvYWQ9KGUsdD0iQCIpPT57Y29uc3Qgcj1lLnN1Yi5zcGxpdCh0KTtyZXR1cm4gci5sZW5ndGg+Mj9yW3IubGVuZ3RoLTFdOiIifTtjbGFzcyBFbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9kYXRhTGF5ZXI9ZSx0aGlzLl9jb25maWc9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRDb25maWdEYXRhKCl9KSksdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGE9KCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSgpfSkpfXJlc29sdmVXZWxsS25vd25FbmRwb2ludCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIGUud2VsbEtub3duRW5kcG9pbnQ/ZS5zZXJ2ZXJPcmlnaW4rZS53ZWxsS25vd25FbmRwb2ludDplLnNlcnZlck9yaWdpbisiL29hdXRoMi90b2tlbi8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbiJ9KSl9cmVzb2x2ZUVuZHBvaW50cyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXt9LHI9eWllbGQgdGhpcy5fY29uZmlnKCk7cmV0dXJuIHIub3ZlcnJpZGVXZWxsRW5kcG9pbnRDb25maWcmJnIuZW5kcG9pbnRzJiZPYmplY3Qua2V5cyhyLmVuZHBvaW50cykuZm9yRWFjaCgoZT0+e2NvbnN0IG49ZS5yZXBsYWNlKC9bQS1aXS9nLChlPT5gXyR7ZS50b0xvd2VyQ2FzZSgpfWApKTt0W25dPShudWxsPT1yP3ZvaWQgMDpyLmVuZHBvaW50cyk/ci5lbmRwb2ludHNbZV06IiJ9KSksT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHQpfSkpfXJlc29sdmVGYWxsYmFja0VuZHBvaW50cygpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9e30sdD15aWVsZCB0aGlzLl9jb25maWcoKTt0LmVuZHBvaW50cyYmT2JqZWN0LmtleXModC5lbmRwb2ludHMpLmZvckVhY2goKHI9Pntjb25zdCBuPXIucmVwbGFjZSgvW0EtWl0vZywoZT0+YF8ke2UudG9Mb3dlckNhc2UoKX1gKSk7ZVtuXT0obnVsbD09dD92b2lkIDA6dC5lbmRwb2ludHMpP3QuZW5kcG9pbnRzW3JdOiIifSkpO2NvbnN0IHI9e2F1dGhvcml6YXRpb25fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvYXV0aG9yaXplIixlbmRfc2Vzc2lvbl9lbmRwb2ludDp0LnNlcnZlck9yaWdpbisiL29pZGMvbG9nb3V0Iixqd2tzX3VyaTp0LnNlcnZlck9yaWdpbisiL29hdXRoMi9qd2tzIixjaGVja19zZXNzaW9uX2lmcmFtZTp0LnNlcnZlck9yaWdpbisiL29pZGMvY2hlY2tzZXNzaW9uIixyZXZvY2F0aW9uX2VuZHBvaW50OnQuc2VydmVyT3JpZ2luKyIvb2F1dGgyL3Jldm9rZSIsdG9rZW5fZW5kcG9pbnQ6dC5zZXJ2ZXJPcmlnaW4rIi9vYXV0aDIvdG9rZW4ifTtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHIpfSkpfXZhbGlkYXRlSWRUb2tlbihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PSh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKSkuandrc191cmkscj15aWVsZCB0aGlzLl9jb25maWcoKTtyZXR1cm4gdCYmMCE9PXQudHJpbSgpLmxlbmd0aD93dC5nZXQodCx7d2l0aENyZWRlbnRpYWxzOm51bGw9PXI/dm9pZCAwOnIuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT10LnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0hFTFBFUi1WSVQtTlIwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsInZhbGlkYXRlSWRUb2tlbiIsIkludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIHJlY2VpdmVkIGZvciBqd2tzIHJlcXVlc3QuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byBnZXQgdGhlIGp3a3MgcmV0dXJuZWQgIit0LnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7Y29uc3Qgcj0oeWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSkuaXNzdWVyLG49KHlpZWxkIHRoaXMucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCkpLnNwbGl0KCIvLndlbGwta25vd24iKVswXTtyZXR1cm4gciYmcj09PW4/U24uZ2V0SldLRm9yVGhlSWRUb2tlbihlLnNwbGl0KCIuIilbMF0sdC5kYXRhLmtleXMpLnRoZW4oKHQ9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIFNuLmlzVmFsaWRJZFRva2VuKGUsdCwoeWllbGQgdGhpcy5fY29uZmlnKCkpLmNsaWVudElELHIsU24uZGVjb2RlSURUb2tlbihlKS5zdWIsKHlpZWxkIHRoaXMuX2NvbmZpZygpKS5jbG9ja1RvbGVyYW5jZSkudGhlbigoZT0+ZSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgQXQoIkFVVEhfSEVMUEVSLVZJVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIix2b2lkIDAsdm9pZCAwLGUpKSkpfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9IRUxQRVItVklULUVTMDQiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSk6UHJvbWlzZS5yZXNvbHZlKCExKX0pKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfSEVMUEVSLVZJVC1OUjA1IiwiYXV0aGVudGljYXRpb24taGVscGVyIiwidmFsaWRhdGVJZFRva2VuIiwiUmVxdWVzdCB0byBqd2tzIGVuZHBvaW50IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgandrcyBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLiIsbnVsbCE9PSh0PW51bGw9PWU/dm9pZCAwOmUuY29kZSkmJnZvaWQgMCE9PXQ/dDoiIixudWxsPT1lP3ZvaWQgMDplLm1lc3NhZ2UsbnVsbD09PShyPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnN0YXR1cyxudWxsPT09KG49bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGF0YSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9IRUxQRVItVklULU5GMDEiLCJhdXRoZW50aWNhdGlvbi1oZWxwZXIiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJKV0tTIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyBKV0tTIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIEpXS1MgZW5kcG9pbnQgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIikpfSkpfXJlcGxhY2VDdXN0b21HcmFudFRlbXBsYXRlVGFncyhlKXt2YXIgdDtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtsZXQgcj0ib3BlbmlkIjtjb25zdCBuPXlpZWxkIHRoaXMuX2NvbmZpZygpLGk9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7cmV0dXJuIG4uc2NvcGUmJm4uc2NvcGUubGVuZ3RoPjAmJihuLnNjb3BlLmluY2x1ZGVzKCJvcGVuaWQiKXx8bi5zY29wZS5wdXNoKCJvcGVuaWQiKSxyPW4uc2NvcGUuam9pbigiICIpKSxlLnJlcGxhY2UoInt7dG9rZW59fSIsaS5hY2Nlc3NfdG9rZW4pLnJlcGxhY2UoInt7dXNlcm5hbWV9fSIsQW4uZ2V0QXV0aGVudGljYXRlZFVzZXJJbmZvKGkuaWRfdG9rZW4pLnVzZXJuYW1lKS5yZXBsYWNlKCJ7e3Njb3BlfX0iLHIpLnJlcGxhY2UoInt7Y2xpZW50SUR9fSIsbi5jbGllbnRJRCkucmVwbGFjZSgie3tjbGllbnRTZWNyZXR9fSIsbnVsbCE9PSh0PW4uY2xpZW50U2VjcmV0KSYmdm9pZCAwIT09dD90OiIiKX0pKX1jbGVhclVzZXJTZXNzaW9uRGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YSgpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhKCkseWllbGQgdGhpcy5fZGF0YUxheWVyLnJlbW92ZVNlc3Npb25EYXRhKCl9KSl9aGFuZGxlVG9rZW5SZXNwb25zZShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZigyMDAhPT1lLnN0YXR1cylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0hFTFBFUi1IVFItTlIwMSIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgdG9rZW4gcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk7aWYoKHlpZWxkIHRoaXMuX2NvbmZpZygpKS52YWxpZGF0ZUlEVG9rZW4pcmV0dXJuIHRoaXMudmFsaWRhdGVJZFRva2VuKGUuZGF0YS5pZF90b2tlbikudGhlbigodD0+YnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZih0KXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKTtjb25zdCB0PXthY2Nlc3NUb2tlbjplLmRhdGEuYWNjZXNzX3Rva2VuLGV4cGlyZXNJbjplLmRhdGEuZXhwaXJlc19pbixpZFRva2VuOmUuZGF0YS5pZF90b2tlbixyZWZyZXNoVG9rZW46ZS5kYXRhLnJlZnJlc2hfdG9rZW4sc2NvcGU6ZS5kYXRhLnNjb3BlLHRva2VuVHlwZTplLmRhdGEudG9rZW5fdHlwZX07cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0hFTFBFUi1IVFItSVYwMiIsImF1dGhlbnRpY2F0aW9uLWhlbHBlciIsImhhbmRsZVRva2VuUmVzcG9uc2UiLCJUaGUgaWQgdG9rZW4gcmV0dXJuZWQgaXMgbm90IHZhbGlkLiIsIlRoZSBpZCB0b2tlbiByZXR1cm5lZCBoYXMgZmFpbGVkIHRoZSB2YWxpZGF0aW9uIGNoZWNrLiIpKX0pKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgQXQoIkFVVEhfSEVMUEVSLUhBVC1FUzAzIiwiYXV0aGVudGljYXRpb24taGVscGVyIiwiaGFuZGxlVG9rZW5SZXNwb25zZSIsdm9pZCAwLHZvaWQgMCxlKSkpKTt7Y29uc3QgdD17YWNjZXNzVG9rZW46ZS5kYXRhLmFjY2Vzc190b2tlbixleHBpcmVzSW46ZS5kYXRhLmV4cGlyZXNfaW4saWRUb2tlbjplLmRhdGEuaWRfdG9rZW4scmVmcmVzaFRva2VuOmUuZGF0YS5yZWZyZXNoX3Rva2VuLHNjb3BlOmUuZGF0YS5zY29wZSx0b2tlblR5cGU6ZS5kYXRhLnRva2VuX3R5cGV9O3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0U2Vzc2lvbkRhdGEoZS5kYXRhKSxQcm9taXNlLnJlc29sdmUodCl9fSkpfX1jbGFzcyBUbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlcj1uZXcgRW4oZSksdGhpcy5fZGF0YUxheWVyPWUsdGhpcy5fY29uZmlnPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0Q29uZmlnRGF0YSgpfSkpLHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhPSgpPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKX0pKX1nZXRBdXRob3JpemF0aW9uVVJMKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKCJhdXRob3JpemF0aW9uX2VuZHBvaW50Iikscj15aWVsZCB0aGlzLl9jb25maWcoKTtpZighdHx8MD09PXQudHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgQXQoIkFVVEhfQ09SRS1HQVUtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRBdXRob3JpemF0aW9uVVJMIiwiTm8gYXV0aG9yaXphdGlvbiBlbmRwb2ludCBmb3VuZC4iLCJObyBhdXRob3JpemF0aW9uIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgZnJvbSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgYXV0aG9yaXphdGlvbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKTtjb25zdCBuPW5ldyBVUkwodCk7bi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZXNwb25zZV90eXBlIiwiY29kZSIpLG4uc2VhcmNoUGFyYW1zLmFwcGVuZCgiY2xpZW50X2lkIixyLmNsaWVudElEKTtsZXQgaT0ib3BlbmlkIjtpZihyLnNjb3BlJiZyLnNjb3BlLmxlbmd0aD4wJiYoci5zY29wZS5pbmNsdWRlcygib3BlbmlkIil8fHIuc2NvcGUucHVzaCgib3BlbmlkIiksaT1yLnNjb3BlLmpvaW4oIiAiKSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJzY29wZSIsaSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJyZWRpcmVjdF91cmkiLHIuc2lnbkluUmVkaXJlY3RVUkwpLHIucmVzcG9uc2VNb2RlJiZuLnNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX21vZGUiLHIucmVzcG9uc2VNb2RlKSxyLmVuYWJsZVBLQ0Upe2NvbnN0IGU9U24uZ2V0Q29kZVZlcmlmaWVyKHIucnVudGltZUVudmlyb25tZW50KSx0PVNuLmdldENvZGVDaGFsbGVuZ2UoZSk7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIsZSksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJTMjU2Iiksbi5zZWFyY2hQYXJhbXMuYXBwZW5kKCJjb2RlX2NoYWxsZW5nZSIsdCl9ci5wcm9tcHQmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZCgicHJvbXB0IixyLnByb21wdCk7Y29uc3Qgbz1lO2lmKG8pZm9yKGNvbnN0W2UsdF1vZiBPYmplY3QuZW50cmllcyhvKSkiIiE9ZSYmIiIhPXQmJm4uc2VhcmNoUGFyYW1zLmFwcGVuZChlLHQudG9TdHJpbmcoKSk7cmV0dXJuIG4udG9TdHJpbmcoKX0pKX1yZXF1ZXN0QWNjZXNzVG9rZW4oZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCxuPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFyfHwwPT09ci50cmltKCkubGVuZ3RoKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXQoIkFVVEhfQ09SRS1SQVQxLU5GMDEiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiVG9rZW4gZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHRva2VuIGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTt0JiYoeWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFNlc3Npb25EYXRhUGFyYW1ldGVyKCJzZXNzaW9uX3N0YXRlIix0KSk7Y29uc3QgaT1bXTtpLnB1c2goYGNsaWVudF9pZD0ke24uY2xpZW50SUR9YCksbi5jbGllbnRTZWNyZXQmJm4uY2xpZW50U2VjcmV0LnRyaW0oKS5sZW5ndGg+MCYmaS5wdXNoKGBjbGllbnRfc2VjcmV0PSR7bi5jbGllbnRTZWNyZXR9YCk7Y29uc3Qgbz1lO3JldHVybiBpLnB1c2goYGNvZGU9JHtvfWApLGkucHVzaCgiZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUiKSxpLnB1c2goYHJlZGlyZWN0X3VyaT0ke24uc2lnbkluUmVkaXJlY3RVUkx9YCksbi5lbmFibGVQS0NFJiYoaS5wdXNoKGBjb2RlX3ZlcmlmaWVyPSR7eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoInBrY2VfY29kZV92ZXJpZmllciIpfWApLHlpZWxkIHRoaXMuX2RhdGFMYXllci5yZW1vdmVUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiKSksd3QucG9zdChyLGkuam9pbigiJiIpLHtoZWFkZXJzOkFuLmdldFRva2VuUmVxdWVzdEhlYWRlcnMoKSx3aXRoQ3JlZGVudGlhbHM6bi5zZW5kQ29va2llc0luUmVxdWVzdHN9KS50aGVuKChlPT50aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5oYW5kbGVUb2tlblJlc3BvbnNlKGUpLnRoZW4oKGU9PmUpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0NPUkUtUkFUMS1FUzAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RBY2Nlc3NUb2tlbiIsdm9pZCAwLHZvaWQgMCxlKSkpKSkpLmNhdGNoKChlPT57dmFyIHQscixuO3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXQoIkFVVEhfQ09SRS1SQVQxLU5SMDMiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEFjY2Vzc1Rva2VuIiwiUmVxdWVzdGluZyBhY2Nlc3MgdG9rZW4gZmFpbGVkIiwiVGhlIHJlcXVlc3QgdG8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gZnJvbSB0aGUgc2VydmVyIGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1yZWZyZXNoQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS50b2tlbl9lbmRwb2ludCx0PXlpZWxkIHRoaXMuX2NvbmZpZygpLHI9eWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFNlc3Npb25EYXRhKCk7aWYoIXIucmVmcmVzaF90b2tlbilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0NPUkUtUkFUMi1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIk5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIiwiVGhlcmUgd2FzIG5vIHJlZnJlc2ggdG9rZW4gZm91bmQuIEFzZ2FyZGVvIGRvZXNuJ3QgcmV0dXJuIGEgcmVmcmVzaCB0b2tlbiBpZiB0aGUgcmVmcmVzaCB0b2tlbiBncmFudCBpcyBub3QgZW5hYmxlZC4iKSk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJBVDItTkYwMiIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLCJObyByZWZyZXNoIHRva2VuIGVuZHBvaW50IGZvdW5kLiIsIk5vIHJlZnJlc2ggdG9rZW4gZW5kcG9pbnQgd2FzIGluIHRoZSBPSURDIHByb3ZpZGVyIG1ldGEgZGF0YSByZXR1cm5lZCBieSB0aGUgd2VsbC1rbm93biBlbmRwb2ludCBvciB0aGUgcmVmcmVzaCB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3Qgbj1bXTtyZXR1cm4gbi5wdXNoKGBjbGllbnRfaWQ9JHt0LmNsaWVudElEfWApLG4ucHVzaChgcmVmcmVzaF90b2tlbj0ke3IucmVmcmVzaF90b2tlbn1gKSxuLnB1c2goImdyYW50X3R5cGU9cmVmcmVzaF90b2tlbiIpLHQuY2xpZW50U2VjcmV0JiZ0LmNsaWVudFNlY3JldC50cmltKCkubGVuZ3RoPjAmJm4ucHVzaChgY2xpZW50X3NlY3JldD0ke3QuY2xpZW50U2VjcmV0fWApLHd0LnBvc3QoZSxuLmpvaW4oIiYiKSx7aGVhZGVyczpBbi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZShlKS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJBVDItRVMwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZWZyZXNoQWNjZXNzVG9rZW4iLHZvaWQgMCx2b2lkIDAsZSkpKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMi1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlZnJlc2hBY2Nlc3NUb2tlbiIsIlJlZnJlc2ggYWNjZXNzIHRva2VuIHJlcXVlc3QgZmFpbGVkLiIsIlRoZSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPSh5aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKS5yZXZvY2F0aW9uX2VuZHBvaW50LHQ9eWllbGQgdGhpcy5fY29uZmlnKCk7aWYoIWV8fDA9PT1lLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJBVDMtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJyZXZva2VBY2Nlc3NUb2tlbiIsIk5vIHJldm9rZSBhY2Nlc3MgdG9rZW4gZW5kcG9pbnQgZm91bmQuIiwiTm8gcmV2b2tlIGFjY2VzcyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSByZXZva2UgYWNjZXNzIHRva2VuIGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpKTtjb25zdCByPVtdO3JldHVybiByLnB1c2goYGNsaWVudF9pZD0ke3QuY2xpZW50SUR9YCksci5wdXNoKGB0b2tlbj0keyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWApLHIucHVzaCgidG9rZW5fdHlwZV9oaW50PWFjY2Vzc190b2tlbiIpLHd0LnBvc3QoZSxyLmpvaW4oIiYiKSx7aGVhZGVyczpBbi5nZXRUb2tlblJlcXVlc3RIZWFkZXJzKCksd2l0aENyZWRlbnRpYWxzOnQuc2VuZENvb2tpZXNJblJlcXVlc3RzfSkudGhlbigoZT0+MjAwIT09ZS5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0NPUkUtUkFUMy1OUjAyIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHJldm9rZSBhY2Nlc3MgdG9rZW4gcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHJldm9rZSB0aGUgYWNjZXNzIHRva2VuIHJldHVybmVkICIrZS5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOih0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLFByb21pc2UucmVzb2x2ZShlKSkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkFUMy1OUjAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJldm9rZUFjY2Vzc1Rva2VuIiwiVGhlIHJlcXVlc3QgdG8gcmV2b2tlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIiwiVGhlIHJlcXVlc3Qgc2VudCB0byByZXZva2UgdGhlIGFjY2VzcyB0b2tlbiBmYWlsZWQuIixudWxsIT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5jb2RlKSYmdm9pZCAwIT09dD90OiIiLG51bGw9PWU/dm9pZCAwOmUubWVzc2FnZSxudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzLG51bGw9PT0obj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09bj92b2lkIDA6bi5kYXRhKSl9KSl9KSl9cmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fb2lkY1Byb3ZpZGVyTWV0YURhdGEoKSxyPXlpZWxkIHRoaXMuX2NvbmZpZygpO2xldCBuO2lmKG49ZS50b2tlbkVuZHBvaW50JiYwIT09ZS50b2tlbkVuZHBvaW50LnRyaW0oKS5sZW5ndGg/ZS50b2tlbkVuZHBvaW50OnQudG9rZW5fZW5kcG9pbnQsIW58fDA9PT1uLnRyaW0oKS5sZW5ndGgpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJDRy1ORjAxIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsIlRva2VuIGVuZHBvaW50IG5vdCBmb3VuZC4iLCJObyB0b2tlbiBlbmRwb2ludCB3YXMgZm91bmQgaW4gdGhlIE9JREMgcHJvdmlkZXIgbWV0YSBkYXRhIHJldHVybmVkIGJ5IHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IG9yIHRoZSB0b2tlbiBlbmRwb2ludCBwYXNzZWQgdG8gdGhlIFNESyBpcyBlbXB0eS4iKSk7Y29uc3QgaT17ZGF0YTooeWllbGQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXMoZS5kYXRhKS5tYXAoKChbZSx0XSk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgcj15aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXBsYWNlQ3VzdG9tR3JhbnRUZW1wbGF0ZVRhZ3ModCk7cmV0dXJuYCR7ZX09JHtyfWB9KSkpKSkpLmpvaW4oIiYiKSxoZWFkZXJzOk9iamVjdC5hc3NpZ24oe30sQW4uZ2V0VG9rZW5SZXF1ZXN0SGVhZGVycygpKSxtZXRob2Q6IlBPU1QiLHVybDpuLHdpdGhDcmVkZW50aWFsczpyLnNlbmRDb29raWVzSW5SZXF1ZXN0c307cmV0dXJuIGUuYXR0YWNoVG9rZW4mJihpLmhlYWRlcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkuaGVhZGVycykse0F1dGhvcml6YXRpb246YEJlYXJlciAkeyh5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSkuYWNjZXNzX3Rva2VufWB9KSksd3QoaSkudGhlbigodD0+MjAwIT09dC5zdGF0dXM/UHJvbWlzZS5yZWplY3QobmV3IEF0KCJBVVRIX0NPUkUtUkNHLU5SMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgcmVjZWl2ZWQgZm9yIHRoZSBjdXN0b20gZ3JhbnQgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IHJldHVybmVkICIrdC5zdGF0dXMrIiAsIHdoaWNoIGlzIGludmFsaWQuIikpOmUucmV0dXJuc1Nlc3Npb24/dGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIuaGFuZGxlVG9rZW5SZXNwb25zZSh0KS50aGVuKChlPT5lKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBBdCgiQVVUSF9DT1JFLVJDRy1FUzAzIiwiYXV0aGVudGljYXRpb24tY29yZSIsInJlcXVlc3RDdXN0b21HcmFudCIsdm9pZCAwLHZvaWQgMCxlKSkpKTpQcm9taXNlLnJlc29sdmUodCkpKS5jYXRjaCgoZT0+e3ZhciB0LHIsbjtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEV0KCJBVVRIX0NPUkUtUkNHLU5SMDQiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiVGhlIGN1c3RvbSBncmFudCByZXF1ZXN0IGZhaWxlZC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIGdldCB0aGUgY3VzdG9tIGdyYW50IGZhaWxlZC4iLG51bGwhPT0odD1udWxsPT1lP3ZvaWQgMDplLmNvZGUpJiZ2b2lkIDAhPT10P3Q6IiIsbnVsbD09ZT92b2lkIDA6ZS5tZXNzYWdlLG51bGw9PT0ocj1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5zdGF0dXMsbnVsbD09PShuPW51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRhdGEpKX0pKX0pKX1nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgZT15aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0U2Vzc2lvbkRhdGEoKSx0PUFuLmdldEF1dGhlbnRpY2F0ZWRVc2VySW5mbyhudWxsPT1lP3ZvaWQgMDplLmlkX3Rva2VuKTtsZXQgcj17YWxsb3dlZFNjb3BlczplLnNjb3BlLHNlc3Npb25TdGF0ZTplLnNlc3Npb25fc3RhdGV9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChlPT57dm9pZCAwIT09dFtlXSYmIiIhPT10W2VdJiZudWxsIT09dFtlXXx8ZGVsZXRlIHRbZV19KSkscj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sciksdCkscn0pKX1nZXREZWNvZGVkSURUb2tlbigpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IGU9KHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKS5pZF90b2tlbjtyZXR1cm4gU24uZGVjb2RlSURUb2tlbihlKX0pKX1nZXRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKS5pZF90b2tlbn0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpZighZSYmKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpKXJldHVybiBQcm9taXNlLnJlc29sdmUoITApO2NvbnN0IHQ9eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZVdlbGxLbm93bkVuZHBvaW50KCk7cmV0dXJuIHd0LmdldCh0KS50aGVuKChlPT5idCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiAyMDAhPT1lLnN0YXR1cz9Qcm9taXNlLnJlamVjdChuZXcgQXQoIkFVVEhfQ09SRS1HT1BNLU5SMDEiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwiZ2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEiLCJJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyByZWNlaXZlZCBmb3IgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmVxdWVzdC4iLCJUaGUgcmVxdWVzdCBzZW50IHRvIHRoZSB3ZWxsLWtub3duIGVuZHBvaW50IHRvIGdldCB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgIitlLnN0YXR1cysiICwgd2hpY2ggaXMgaW52YWxpZC4iKSk6KHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRW5kcG9pbnRzKGUuZGF0YSkpLHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIiwhMCksUHJvbWlzZS5yZXNvbHZlKCEwKSl9KSkpKS5jYXRjaCgoKCk9PmJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRPSURDUHJvdmlkZXJNZXRhRGF0YSh5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlRmFsbGJhY2tFbmRwb2ludHMoKSkseWllbGQgdGhpcy5fZGF0YUxheWVyLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoIm9wX2NvbmZpZ19pbml0aWF0ZWQiLCEwKSxQcm9taXNlLnJlc29sdmUoITApfSkpKSl9KSl9Z2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuX29pZGNQcm92aWRlck1ldGFEYXRhKCk7cmV0dXJue2F1dGhvcml6YXRpb25FbmRwb2ludDplLmF1dGhvcml6YXRpb25fZW5kcG9pbnQsY2hlY2tTZXNzaW9uSWZyYW1lOmUuY2hlY2tfc2Vzc2lvbl9pZnJhbWUsZW5kU2Vzc2lvbkVuZHBvaW50OmUuZW5kX3Nlc3Npb25fZW5kcG9pbnQsaW50cm9zcGVjdGlvbkVuZHBvaW50OmUuaW50cm9zcGVjdGlvbl9lbmRwb2ludCxpc3N1ZXI6ZS5pc3N1ZXIsandrc1VyaTplLmp3a3NfdXJpLHJlZ2lzdHJhdGlvbkVuZHBvaW50OmUucmVnaXN0cmF0aW9uX2VuZHBvaW50LHJldm9jYXRpb25FbmRwb2ludDplLnJldm9jYXRpb25fZW5kcG9pbnQsdG9rZW5FbmRwb2ludDplLnRva2VuX2VuZHBvaW50LHVzZXJpbmZvRW5kcG9pbnQ6ZS51c2VyaW5mb19lbmRwb2ludCx3ZWxsS25vd25FbmRwb2ludDp5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5yZXNvbHZlV2VsbEtub3duRW5kcG9pbnQoKX19KSl9Z2V0U2lnbk91dFVSTCgpe3ZhciBlLHQscjtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBuPW51bGw9PT0oZT15aWVsZCB0aGlzLl9vaWRjUHJvdmlkZXJNZXRhRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lbmRfc2Vzc2lvbl9lbmRwb2ludCxpPXlpZWxkIHRoaXMuX2NvbmZpZygpO2lmKCFufHwwPT09bi50cmltKCkubGVuZ3RoKXRocm93IG5ldyBBdCgiQVVUSF9DT1JFLUdTT1UtTkYwMSIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiU2lnbi1vdXQgZW5kcG9pbnQgbm90IGZvdW5kLiIsIk5vIHNpZ24tb3V0IGVuZHBvaW50IHdhcyBmb3VuZCBpbiB0aGUgT0lEQyBwcm92aWRlciBtZXRhIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHdlbGwta25vd24gZW5kcG9pbnQgb3IgdGhlIHNpZ24tb3V0IGVuZHBvaW50IHBhc3NlZCB0byB0aGUgU0RLIGlzIGVtcHR5LiIpO2NvbnN0IG89bnVsbD09PSh0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pZF90b2tlbjtpZighb3x8MD09PW8udHJpbSgpLmxlbmd0aCl0aHJvdyBuZXcgQXQoIkFVVEhfQ09SRS1HU09VLU5GMDIiLCJhdXRoZW50aWNhdGlvbi1jb3JlIiwiZ2V0U2lnbk91dFVSTCIsIklEIHRva2VuIG5vdCBmb3VuZC4iLCJObyBJRCB0b2tlbiBjb3VsZCBiZSBmb3VuZC4gRWl0aGVyIHRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIGxvc3Qgb3IgeW91IGhhdmUgbm90IHNpZ25lZCBpbi4iKTtjb25zdCBzPW51bGwhPT0ocj1udWxsPT1pP3ZvaWQgMDppLnNpZ25PdXRSZWRpcmVjdFVSTCkmJnZvaWQgMCE9PXI/cjpudWxsPT1pP3ZvaWQgMDppLnNpZ25JblJlZGlyZWN0VVJMO2lmKCFzfHwwPT09cy50cmltKCkubGVuZ3RoKXRocm93IG5ldyBBdCgiQVVUSF9DT1JFLUdTT1UtTkYwMyIsImF1dGhlbnRpY2F0aW9uLWNvcmUiLCJnZXRTaWduT3V0VVJMIiwiTm8gc2lnbi1vdXQgcmVkaXJlY3QgVVJMIGZvdW5kLiIsIlRoZSBzaWduLW91dCByZWRpcmVjdCBVUkwgY2Fubm90IGJlIGZvdW5kIG9yIHRoZSBVUkwgcGFzc2VkIHRvIHRoZSBTREsgaXMgZW1wdHkuIE5vIHNpZ24taW4gcmVkaXJlY3QgVVJMIGhhcyBiZWVuIGZvdW5kIGVpdGhlci4gIik7cmV0dXJuYCR7bn0/aWRfdG9rZW5faGludD0ke299JnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaT0ke3N9JnN0YXRlPXNpZ25fb3V0X3N1Y2Nlc3NgfSkpfXNpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIHRoaXMuZ2V0U2lnbk91dFVSTCgpO3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkhlbHBlci5jbGVhclVzZXJTZXNzaW9uRGF0YSgpLGV9KSl9Z2V0QWNjZXNzVG9rZW4oKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbnVsbD09PShlPXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5hY2Nlc3NfdG9rZW59KSl9aXNBdXRoZW50aWNhdGVkKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEJvb2xlYW4oeWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpKX0pKX1nZXRQS0NFQ29kZSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigicGtjZV9jb2RlX3ZlcmlmaWVyIil9KSl9c2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuX2RhdGFMYXllci5zZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJwa2NlX2NvZGVfdmVyaWZpZXIiLGUpfSkpfXVwZGF0ZUNvbmZpZyhlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0Q29uZmlnRGF0YShlKSxlLm92ZXJyaWRlV2VsbEVuZHBvaW50Q29uZmlnPyhudWxsPT1lP3ZvaWQgMDplLmVuZHBvaW50cykmJih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoeWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25IZWxwZXIucmVzb2x2ZUVuZHBvaW50cyh7fSkpKToobnVsbD09ZT92b2lkIDA6ZS5lbmRwb2ludHMpJiYoeWllbGQgdGhpcy5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YSghMCkpfSkpfX1jbGFzcyBSbntjb25zdHJ1Y3RvcihlLHQpe3RoaXMuX2lkPWUsdGhpcy5fc3RvcmU9dH1zZXREYXRhSW5CdWxrKGUsdCl7dmFyIHI7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3Qgbj1udWxsIT09KHI9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PXI/cjpudWxsLGk9biYmSlNPTi5wYXJzZShuKSxvPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx0KSxzPUpTT04uc3RyaW5naWZ5KG8pO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxzKX0pKX1zZXRWYWx1ZShlLHQscil7dmFyIG47cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgaT1udWxsIT09KG49eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YShlKSkmJnZvaWQgMCE9PW4/bjpudWxsLG89aSYmSlNPTi5wYXJzZShpKSxzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxvKSx7W3RdOnJ9KSxhPUpTT04uc3RyaW5naWZ5KHMpO3lpZWxkIHRoaXMuX3N0b3JlLnNldERhdGEoZSxhKX0pKX1yZW1vdmVWYWx1ZShlLHQpe3ZhciByO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IG49bnVsbCE9PShyPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEoZSkpJiZ2b2lkIDAhPT1yP3I6bnVsbCxpPW4mJkpTT04ucGFyc2Uobiksbz1PYmplY3QuYXNzaWduKHt9LGkpO2RlbGV0ZSBvW3RdO2NvbnN0IHM9SlNPTi5zdHJpbmdpZnkobyk7eWllbGQgdGhpcy5fc3RvcmUuc2V0RGF0YShlLHMpfSkpfV9yZXNvbHZlS2V5KGUpe3JldHVybmAke2V9LSR7dGhpcy5faWR9YH1zZXRDb25maWdEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpLGUpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSxlKX0pKX1zZXRUZW1wb3JhcnlEYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpLGUpfSkpfXNldFNlc3Npb25EYXRhKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuc2V0RGF0YUluQnVsayh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSxlKX0pKX1nZXRDb25maWdEYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0T0lEQ1Byb3ZpZGVyTWV0YURhdGEoKXt2YXIgZTtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gSlNPTi5wYXJzZShudWxsIT09KGU9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSkpJiZ2b2lkIDAhPT1lP2U6bnVsbCl9KSl9Z2V0VGVtcG9yYXJ5RGF0YSgpe3ZhciBlO3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBKU09OLnBhcnNlKG51bGwhPT0oZT15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfWdldFNlc3Npb25EYXRhKCl7dmFyIGU7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIEpTT04ucGFyc2UobnVsbCE9PShlPXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSkpKSYmdm9pZCAwIT09ZT9lOm51bGwpfSkpfXJlbW92ZUNvbmZpZ0RhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuQ29uZmlnRGF0YSkpfSkpfXJlbW92ZU9JRENQcm92aWRlck1ldGFEYXRhKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fc3RvcmUucmVtb3ZlRGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSl9KSl9cmVtb3ZlVGVtcG9yYXJ5RGF0YSgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX3N0b3JlLnJlbW92ZURhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5UZW1wb3JhcnlEYXRhKSl9KSl9cmVtb3ZlU2Vzc2lvbkRhdGEoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9zdG9yZS5yZW1vdmVEYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuU2Vzc2lvbkRhdGEpKX0pKX1nZXRDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LkNvbmZpZ0RhdGEpKTtyZXR1cm4gdCYmSlNPTi5wYXJzZSh0KVtlXX0pKX1nZXRPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX3N0b3JlLmdldERhdGEodGhpcy5fcmVzb2x2ZUtleShfdC5PSURDUHJvdmlkZXJNZXRhRGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD15aWVsZCB0aGlzLl9zdG9yZS5nZXREYXRhKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSkpO3JldHVybiB0JiZKU09OLnBhcnNlKHQpW2VdfSkpfWdldFNlc3Npb25EYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe2NvbnN0IHQ9eWllbGQgdGhpcy5fc3RvcmUuZ2V0RGF0YSh0aGlzLl9yZXNvbHZlS2V5KF90LlNlc3Npb25EYXRhKSk7cmV0dXJuIHQmJkpTT04ucGFyc2UodClbZV19KSl9c2V0Q29uZmlnRGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSxlLHQpfSkpfXNldE9JRENQcm92aWRlck1ldGFEYXRhUGFyYW1ldGVyKGUsdCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5zZXRWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90Lk9JRENQcm92aWRlck1ldGFEYXRhKSxlLHQpfSkpfXNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSx0KXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnNldFZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuVGVtcG9yYXJ5RGF0YSksZSx0KX0pKX1zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuc2V0VmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSksZSx0KX0pKX1yZW1vdmVDb25maWdEYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5Db25maWdEYXRhKSxlKX0pKX1yZW1vdmVPSURDUHJvdmlkZXJNZXRhRGF0YVBhcmFtZXRlcihlKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlbW92ZVZhbHVlKHRoaXMuX3Jlc29sdmVLZXkoX3QuT0lEQ1Byb3ZpZGVyTWV0YURhdGEpLGUpfSkpfXJlbW92ZVRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5yZW1vdmVWYWx1ZSh0aGlzLl9yZXNvbHZlS2V5KF90LlRlbXBvcmFyeURhdGEpLGUpfSkpfXJlbW92ZVNlc3Npb25EYXRhUGFyYW1ldGVyKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVtb3ZlVmFsdWUodGhpcy5fcmVzb2x2ZUtleShfdC5TZXNzaW9uRGF0YSksZSl9KSl9fWNvbnN0IENuPXtjbG9ja1RvbGVyYW5jZTozMDAsZW5hYmxlUEtDRTohMCxyZXNwb25zZU1vZGU6eXQucXVlcnksc2NvcGU6WyJvcGVuaWQiXSxzZW5kQ29va2llc0luUmVxdWVzdHM6ITAsdmFsaWRhdGVJRFRva2VuOiEwfTtjbGFzcyBQbnsKLyoqCiAgICAgICAgICogVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdG9yZX0gc3RvcmUgLSBUaGUgc3RvcmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBfc3RvcmU6IFN0b3JlID0gbmV3IERhdGFTdG9yZSgpOwogICAgICAgICAqIGNvbnN0IGF1dGggPSBuZXcgQXNnYXJkZW9BdXRoQ2xpZW50PEN1c3RvbUNsaWVudENvbmZpZz4oX3N0b3JlKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNjb25zdHJ1Y3RvcgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqLwpjb25zdHJ1Y3RvcihlKXtQbi5faW5zdGFuY2VJRD9Qbi5faW5zdGFuY2VJRCs9MTpQbi5faW5zdGFuY2VJRD0wLHRoaXMuX2RhdGFMYXllcj1uZXcgUm4oYGluc3RhbmNlXyR7UG4uX2luc3RhbmNlSUR9YCxlKSx0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmU9bmV3IFRuKHRoaXMuX2RhdGFMYXllcikKLyoqCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgU0RLIHdpdGggdGhlIGNvbmZpZyBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtBdXRoQ2xpZW50Q29uZmlnPFQ+fSBjb25maWcgLSBUaGUgY29uZmlnIG9iamVjdCB0byBpbml0aWFsaXplIHdpdGguCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgICAgc2lnbkluUmVkaXJlY3RVUkw6ICJodHRwOi8vbG9jYWxob3N0OjMwMDAvc2lnbi1pbiIsCiAgICAgICAgICogICAgIGNsaWVudElEOiAiY2xpZW50IElEIiwKICAgICAgICAgKiAgICAgc2VydmVyT3JpZ2luOiAiaHR0cHM6Ly9sb2NhbGhvc3Q6OTQ0MyIKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBhd2FpdCBhdXRoLmluaXRpYWxpemUoY29uZmlnKTsKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpbml0aWFsaXplCiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi99aW5pdGlhbGl6ZShlKXt2YXIgdCxyLG47cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fZGF0YUxheWVyLnNldENvbmZpZ0RhdGEoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sQ24pLGUpLHtzY29wZTpbLi4ubnVsbCE9PSh0PUNuLnNjb3BlKSYmdm9pZCAwIT09dD90OltdLC4uLm51bGwhPT0obj1udWxsPT09KHI9ZS5zY29wZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZmlsdGVyKChlPT57dmFyIHQ7cmV0dXJuIShudWxsPT09KHQ9bnVsbD09Q24/dm9pZCAwOkNuLnNjb3BlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5pbmNsdWRlcyhlKSl9KSkpJiZ2b2lkIDAhPT1uP246W11dfSkpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgRGF0YUxheWVyYCBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyBhdXRoZW50aWNhdGlvbiBkYXRhLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7RGF0YUxheWVyfSAtIFRoZSBgRGF0YUxheWVyYCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGRhdGEgPSBhdXRoLmdldERhdGFMYXllcigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldERhdGFMYXllcgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0RGF0YUxheWVyKCl7cmV0dXJuIHRoaXMuX2RhdGFMYXllcn0KLyoqCiAgICAgICAgICogVGhpcyBpcyBhbiBhc3luYyBtZXRob2QgdGhhdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGF1dGhvcml6YXRpb24gVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtHZXRBdXRoVVJMQ29uZmlnfSBjb25maWcgLSAoT3B0aW9uYWwpIEEgY29uZmlnIG9iamVjdCB0byBmb3JjZSBpbml0aWFsaXphdGlvbiBhbmQgcGFzcwogICAgICAgICAqIGN1c3RvbSBwYXRoIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgZmlkcCBwYXJhbWV0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXV0aG9yaXphdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGguZ2V0QXV0aG9yaXphdGlvblVSTCgpLnRoZW4oKHVybCk9PnsKICAgICAgICAgKiAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldEF1dGhvcml6YXRpb25VUkwKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEF1dGhvcml6YXRpb25VUkwoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO3JldHVybiBudWxsPT10fHxkZWxldGUgdC5mb3JjZUluaXQsKHlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRUZW1wb3JhcnlEYXRhUGFyYW1ldGVyKCJvcF9jb25maWdfaW5pdGlhdGVkIikpP3RoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpOnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRPSURDUHJvdmlkZXJNZXRhRGF0YShudWxsPT1lP3ZvaWQgMDplLmZvcmNlSW5pdCkudGhlbigoKCk9PnRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBdXRob3JpemF0aW9uVVJMKHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgaXMgYW4gYXN5bmMgbWV0aG9kIHRoYXQgc2VuZHMgYSByZXF1ZXN0IHRvIG9idGFpbiB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZQogICAgICAgICAqIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gYW5kIG90aGVyIHJlbGV2YW50IGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0aG9yaXphdGlvbkNvZGUgLSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uU3RhdGUgLSBUaGUgc2Vzc2lvbiBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVxdWVzdEFjY2Vzc1Rva2VuKGF1dGhDb2RlLCBzZXNzaW9uU3RhdGUpLnRoZW4oKHRva2VuKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyh0b2tlbik7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXF1ZXN0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3JlcXVlc3RBY2Nlc3NUb2tlbihlLHQpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcigib3BfY29uZmlnX2luaXRpYXRlZCIpKT90aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEFjY2Vzc1Rva2VuKGUsdCk6dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENQcm92aWRlck1ldGFEYXRhKCExKS50aGVuKCgoKT0+dGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJlcXVlc3RBY2Nlc3NUb2tlbihlLHQpKSl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYXV0aGVudGljYXRpb24gZGF0YSBhbmQgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ24tb3V0IFVSTC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3Qgc2lnbk91dFVybCA9IGF3YWl0IGF1dGguc2lnbk91dCgpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3NpZ25PdXQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL3NpZ25PdXQoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNpZ25PdXQoKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc2lnbi1vdXQgVVJMLgogICAgICAgICAqCiAgICAgICAgICogKipUaGlzIGRvZXNuJ3QgY2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzaWduLW91dCBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IHNpZ25PdXRVcmwgPSBhd2FpdCBhdXRoLmdldFNpZ25PdXRVUkwoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRTaWduT3V0VVJMCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRTaWduT3V0VVJMKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRTaWduT3V0VVJMKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgT0lEQyBzZXJ2aWNlIGVuZHBvaW50cyB0aGF0IGFyZSBmZXRjaGVkIGZyb20gdGhlIGAud2VsbC1rbm93bmAgZW5kcG9pbnQuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPE9JRENFbmRwb2ludHM+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIE9JREMgc2VydmljZSBlbmRwb2ludHMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGF1dGguZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRPSURDU2VydmljZUVuZHBvaW50cwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldE9JRENTZXJ2aWNlRW5kcG9pbnRzKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY29kZXMgdGhlIHBheWxvYWQgb2YgdGhlIElEIHRva2VuIGFuZCByZXR1cm5zIGl0LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxEZWNvZGVkSURUb2tlblBheWxvYWQ+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlY29kZWQgSUQgdG9rZW4gcGF5bG9hZC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgZGVjb2RlZElkVG9rZW4gPSBhd2FpdCBhdXRoLmdldERlY29kZWRJRFRva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0RGVjb2RlZElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldERlY29kZWRJRFRva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXREZWNvZGVkSURUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgaWRUb2tlbiA9IGF3YWl0IGF1dGguZ2V0SURUb2tlbigpOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI2dldElEVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldElEVG9rZW4oKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldElEVG9rZW4oKX0pKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBJRCB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QmFzaWNVc2VySW5mbz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYmFzaWMgdXNlciBpbmZvcm1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgdXNlckluZm8gPSBhd2FpdCBhdXRoLmdldEJhc2ljVXNlckluZm8oKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRCYXNpY1VzZXJJbmZvCiAgICAgICAgICoKICAgICAgICAgKiBAbWVtYmVyb2YgQXNnYXJkZW9BdXRoQ2xpZW50CiAgICAgICAgICoKICAgICAgICAgKiBAcHJlc2VydmUKICAgICAgICAgKi9nZXRCYXNpY1VzZXJJbmZvKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRCYXNpY1VzZXJJbmZvKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldm9rZXMgdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqICoqVGhpcyBtZXRob2QgYWxzbyBjbGVhcnMgdGhlIGF1dGhlbnRpY2F0aW9uIGRhdGEuKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8QXhpb3NSZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmV0dXJucyB0aGUgcmVzcG9uc2Ugb2YgdGhlIHJldm9rZS1hY2Nlc3MtdG9rZW4gcmVxdWVzdC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXV0aC5yZXZva2VBY2Nlc3NUb2tlbigpLnRoZW4oKHJlc3BvbnNlKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICogfSkuY2F0Y2goKGVycm9yKT0+ewogICAgICAgICAqICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNyZXZva2VBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmV2b2tlQWNjZXNzVG9rZW4oKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnJldm9rZUFjY2Vzc1Rva2VuKCl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG5ldyBhY2Nlc3MKICAgICAgICAgKiB0b2tlbiBhbmQgb3RoZXIgcmVsZXZhbnQgZGF0YS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZT59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdG9rZW4gcmVzcG9uc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGF1dGgucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlZnJlc2hBY2Nlc3NUb2tlbgogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVmcmVzaEFjY2Vzc1Rva2VuKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5yZWZyZXNoQWNjZXNzVG9rZW4oKX0KLyoqCiAgICAgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuLgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGFjY2VzcyB0b2tlbi4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBhdXRoLmdldEFjY2Vzc1Rva2VuKCk7CiAgICAgICAgICogYGBgCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjZ2V0QWNjZXNzVG9rZW4KICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2dldEFjY2Vzc1Rva2VuKCl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS5nZXRBY2Nlc3NUb2tlbigpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIGN1c3RvbS1ncmFudCByZXF1ZXN0IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlCiAgICAgICAgICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgcGFzc2VkLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtDdXN0b21HcmFudENvbmZpZ30gY29uZmlnIC0gQSBjb25maWcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1c3RvbSBncmFudCBjb25maWd1cmF0aW9ucy4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4ge1Byb21pc2U8VG9rZW5SZXNwb25zZSB8IEF4aW9zUmVzcG9uc2U+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRlcGVuZGluZwogICAgICAgICAqIG9uIHlvdXIgY29uZmlndXJhdGlvbnMuCiAgICAgICAgICoKICAgICAgICAgKiBAZXhhbXBsZQogICAgICAgICAqIGBgYAogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IHsKICAgICAgICAgKiAgIGF0dGFjaFRva2VuOiBmYWxzZSwKICAgICAgICAgKiAgIGRhdGE6IHsKICAgICAgICAgKiAgICAgICBjbGllbnRfaWQ6ICJ7e2NsaWVudElEfX0iLAogICAgICAgICAqICAgICAgIGdyYW50X3R5cGU6ICJhY2NvdW50X3N3aXRjaCIsCiAgICAgICAgICogICAgICAgc2NvcGU6ICJ7e3Njb3BlfX0iLAogICAgICAgICAqICAgICAgIHRva2VuOiAie3t0b2tlbn19IiwKICAgICAgICAgKiAgIH0sCiAgICAgICAgICogICBpZDogImFjY291bnQtc3dpdGNoIiwKICAgICAgICAgKiAgIHJldHVyblJlc3BvbnNlOiB0cnVlLAogICAgICAgICAqICAgcmV0dXJuc1Nlc3Npb246IHRydWUsCiAgICAgICAgICogICBzaWduSW5SZXF1aXJlZDogdHJ1ZQogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF1dGgucmVxdWVzdEN1c3RvbUdyYW50KGNvbmZpZykudGhlbigocmVzcG9uc2UpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgKiB9KS5jYXRjaCgoZXJyb3IpPT57CiAgICAgICAgICogIC8vIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogICAgICAgICAqIH0pOwogICAgICAgICAqIGBgYAogICAgICAgICAqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3JlcXVlc3RDdXN0b21HcmFudAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovcmVxdWVzdEN1c3RvbUdyYW50KGUpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUucmVxdWVzdEN1c3RvbUdyYW50KGUpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQgb3Igbm90LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGB0cnVlYCBpZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5pc0F1dGhlbnRpY2F0ZWQoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNpc0F1dGhlbnRpY2F0ZWQKICAgICAgICAgKgogICAgICAgICAqIEBtZW1iZXJvZiBBc2dhcmRlb0F1dGhDbGllbnQKICAgICAgICAgKgogICAgICAgICAqIEBwcmVzZXJ2ZQogICAgICAgICAqL2lzQXV0aGVudGljYXRlZCgpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLl9hdXRoZW50aWNhdGlvbkNvcmUuaXNBdXRoZW50aWNhdGVkKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIFBLQ0UgY29kZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBVUkwuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IC0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgUEtDRSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogQGV4YW1wbGUKICAgICAgICAgKiBgYGAKICAgICAgICAgKiBjb25zdCBwa2NlID0gYXdhaXQgZ2V0UEtDRUNvZGUoKTsKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNnZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovZ2V0UEtDRUNvZGUoKXtyZXR1cm4gYnQodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLmdldFBLQ0VDb2RlKCl9KSl9Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIFBLQ0UgY29kZSB0byB0aGUgZGF0YSBzdG9yZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwa2NlIC0gVGhlIFBLQ0UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogYXdhaXQgYXV0aC5zZXRQS0NFQ29kZSgicGtjZV9jb2RlIikKICAgICAgICAgKiBgYGAKICAgICAgICAgKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2dhcmRlby9hc2dhcmRlby1hdXRoLWpzLXNkay90cmVlL21hc3RlciNzZXRQS0NFQ29kZQogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc2V0UEtDRUNvZGUoZSl7cmV0dXJuIGJ0KHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5fYXV0aGVudGljYXRpb25Db3JlLnNldFBLQ0VDb2RlKGUpfSkpfQovKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGlmIHRoZSBzaWduLW91dCBpcyBzdWNjZXNzZnVsIG9yIG5vdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduT3V0UmVkaXJlY3RVcmwgLSBUaGUgVVJMIHRvIHdoaWNoIHRoZSB1c2VyIGhhcyBiZWVuIHJlZGlyZWN0ZWQgdG8gYWZ0ZXIgc2lnbmluZy1vdXQuCiAgICAgICAgICoKICAgICAgICAgKiAqKlRoZSBzZXJ2ZXIgYXBwZW5kcyBwYXRoIHBhcmFtZXRlcnMgdG8gdGhlIGBzaWduT3V0UmVkaXJlY3RVUkxgIGFuZCB0aGVzZSBwYXRoIHBhcmFtZXRlcnMKICAgICAgICAgKiAgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1ldGhvZCB0byBmdW5jdGlvbi4qKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuCiAgICAgICAgICoKICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYXNnYXJkZW8vYXNnYXJkZW8tYXV0aC1qcy1zZGsvdHJlZS9tYXN0ZXIjaXNTaWduT3V0U3VjY2Vzc2Z1bAogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovc3RhdGljIGlzU2lnbk91dFN1Y2Nlc3NmdWwoZSl7Y29uc3QgdD1uZXcgVVJMKGUpLHI9dC5zZWFyY2hQYXJhbXMuZ2V0KCJzdGF0ZSIpLG49Qm9vbGVhbih0LnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIikpO3JldHVybiEhciYmInNpZ25fb3V0X3N1Y2Nlc3MiPT09ciYmIW59Ci8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIHVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIHdoZW4gaW5zdGFudGlhdGluZyB0aGlzIGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtQYXJ0aWFsPEF1dGhDbGllbnRDb25maWc8VD4+fSBjb25maWcgLSBBIGNvbmZpZyBvYmplY3QgdG8gdXBkYXRlIHRoZSBTREsgY29uZmlndXJhdGlvbnMgd2l0aC4KICAgICAgICAgKgogICAgICAgICAqIEBleGFtcGxlCiAgICAgICAgICogYGBgCiAgICAgICAgICogY29uc3QgY29uZmlnID0gewogICAgICAgICAqICAgICBzaWduSW5SZWRpcmVjdFVSTDogImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9zaWduLWluIiwKICAgICAgICAgKiAgICAgY2xpZW50SUQ6ICJjbGllbnQgSUQiLAogICAgICAgICAqICAgICBzZXJ2ZXJPcmlnaW46ICJodHRwczovL2xvY2FsaG9zdDo5NDQzIgogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGF3YWl0IGF1dGgudXBkYXRlQ29uZmlnKGNvbmZpZyk7CiAgICAgICAgICogYGBgCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FzZ2FyZGVvL2FzZ2FyZGVvLWF1dGgtanMtc2RrL3RyZWUvbWFzdGVyI3VwZGF0ZUNvbmZpZwogICAgICAgICAqCiAgICAgICAgICogQG1lbWJlcm9mIEFzZ2FyZGVvQXV0aENsaWVudAogICAgICAgICAqCiAgICAgICAgICogQHByZXNlcnZlCiAgICAgICAgICovdXBkYXRlQ29uZmlnKGUpe3JldHVybiBidCh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuX2F1dGhlbnRpY2F0aW9uQ29yZS51cGRhdGVDb25maWcoZSl9KSl9fWNvbnN0IERuPSJpbml0Ijt2YXIgT24sSW47IWZ1bmN0aW9uKGUpe2UuTG9jYWxTdG9yYWdlPSJsb2NhbFN0b3JhZ2UiLGUuU2Vzc2lvblN0b3JhZ2U9InNlc3Npb25TdG9yYWdlIixlLldlYldvcmtlcj0id2ViV29ya2VyIixlLkJyb3dzZXJNZW1vcnk9ImJyb3dzZXJNZW1vcnkifShPbnx8KE9uPXt9KSksZnVuY3Rpb24oZSl7ZS5TaWduSW49InNpZ24taW4iLGUuU2lnbk91dD0ic2lnbi1vdXQiLGUuSW5pdGlhbGl6ZT0iaW5pdGlhbGl6ZSIsZS5IdHRwUmVxdWVzdFN0YXJ0PSJodHRwLXJlcXVlc3Qtc3RhcnQiLGUuSHR0cFJlcXVlc3RGaW5pc2g9Imh0dHAtcmVxdWVzdC1maW5pc2giLGUuSHR0cFJlcXVlc3RFcnJvcj0iaHR0cC1yZXF1ZXN0LWVycm9yIixlLkh0dHBSZXF1ZXN0U3VjY2Vzcz0iaHR0cC1yZXF1ZXN0LXN1Y2Nlc3MiLGUuUmV2b2tlQWNjZXNzVG9rZW49InJldm9rZS1hY2Nlc3MtdG9rZW4iLGUuQ3VzdG9tR3JhbnQ9ImN1c3RvbS1ncmFudCJ9KElufHwoSW49e30pKTtjb25zdCBVbj0iY3VzdG9tX2dyYW50X2NvbmZpZyI7Y2xhc3MgTW4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihlLHQscixuLGksbyl7c3VwZXIobnVsbCE9bj9uOm51bGw9PW8/dm9pZCAwOm8ubWVzc2FnZSksdGhpcy5uYW1lPXRoaXMuY29uc3RydWN0b3IubmFtZSx0aGlzLmNvZGU9ZSx0aGlzLmZpbGU9dCx0aGlzLm1ldGhvZD1yLHRoaXMuZXJyb3I9byx0aGlzLmRlc2NyaXB0aW9uPWksT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsbmV3LnRhcmdldC5wcm90b3R5cGUpfX1jbGFzcyBMbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudD1lLHRoaXMuX2RhdGFMYXllcj10aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5nZXREYXRhTGF5ZXIoKX1yZWZyZXNoQWNjZXNzVG9rZW5BdXRvbWF0aWNhbGx5KCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCB0PXlpZWxkIHRoaXMuX2RhdGFMYXllci5nZXRTZXNzaW9uRGF0YSgpO2lmKHQucmVmcmVzaF90b2tlbil7Y29uc3Qgcj1wYXJzZUludCh0LmV4cGlyZXNfaW4pLG49c2V0VGltZW91dCgoKCk9PmUodGhpcyx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCB0aGlzLl9hdXRoZW50aWNhdGlvbkNsaWVudC5yZWZyZXNoQWNjZXNzVG9rZW4oKX0pKSksMWUzKihyPD0xMD9yOnItMTApKTt5aWVsZCB0aGlzLl9kYXRhTGF5ZXIuc2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihrdCxKU09OLnN0cmluZ2lmeShuKSl9fSkpfWNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QpKXtjb25zdCBlPUpTT04ucGFyc2UoeWllbGQgdGhpcy5fZGF0YUxheWVyLmdldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoa3QpKTtjbGVhclRpbWVvdXQoZSl9fSkpfX1jbGFzcyBIbntjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKXtyZXR1cm57YmxvYjoobnVsbD09ZT92b2lkIDA6ZS5kYXRhKWluc3RhbmNlb2YgQmxvYj9udWxsPT1lP3ZvaWQgMDplLmRhdGE6bnVsbCxkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksc3VjY2VzczohMH19c3RhdGljIGdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSl7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUudG9KU09OKSYmZGVsZXRlIGUudG9KU09OLHtlcnJvcjpKU09OLnN0cmluZ2lmeShudWxsIT1lP2U6IiIpLHN1Y2Nlc3M6ITF9fX12YXIgeG47bGV0IGpuPXhuPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hdHRhY2hUb2tlbj0oKT0+UHJvbWlzZS5yZXNvbHZlKCksdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9KCk9Pm51bGwsdGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjaz0oKT0+bnVsbCx0aGlzLmluaXQ9dGhpcy5pbml0LmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrLmJpbmQodGhpcyksdGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s9dGhpcy5zZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2suYmluZCh0aGlzKSx0aGlzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrPXRoaXMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtyZXR1cm4gdGhpcy5heGlvc0luc3RhbmNlfHwodGhpcy5heGlvc0luc3RhbmNlPXd0LmNyZWF0ZSh7d2l0aENyZWRlbnRpYWxzOiEwfSksdGhpcy5jbGllbnRJbnN0YW5jZXx8KHRoaXMuY2xpZW50SW5zdGFuY2U9bmV3IHhuKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKCh0PT5lKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY2xpZW50SW5zdGFuY2UucmVxdWVzdEhhbmRsZXIodCl9KSkpKSx0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSgoZT0+dGhpcy5jbGllbnRJbnN0YW5jZS5zdWNjZXNzSGFuZGxlcihlKSksKGU9PnRoaXMuY2xpZW50SW5zdGFuY2UuZXJyb3JIYW5kbGVyKGUpKSksdGhpcy5heGlvc0luc3RhbmNlLmFsbD13dC5hbGwsdGhpcy5heGlvc0luc3RhbmNlLnNwcmVhZD13dC5zcHJlYWQsdGhpcy5heGlvc0luc3RhbmNlLmluaXQ9dGhpcy5jbGllbnRJbnN0YW5jZS5pbml0LHRoaXMuYXhpb3NJbnN0YW5jZS5lbmFibGVIYW5kbGVyPXRoaXMuY2xpZW50SW5zdGFuY2UuZW5hYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXI9dGhpcy5jbGllbnRJbnN0YW5jZS5kaXNhYmxlSGFuZGxlcix0aGlzLmF4aW9zSW5zdGFuY2UuZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dD10aGlzLmNsaWVudEluc3RhbmNlLmRpc2FibGVIYW5kbGVyV2l0aFRpbWVvdXQsdGhpcy5heGlvc0luc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaz10aGlzLmNsaWVudEluc3RhbmNlLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9dGhpcy5jbGllbnRJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayx0aGlzLmF4aW9zSW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RFcnJvckNhbGxiYWNrLHRoaXMuYXhpb3NJbnN0YW5jZS5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrPXRoaXMuY2xpZW50SW5zdGFuY2Uuc2V0SHR0cFJlcXVlc3RGaW5pc2hDYWxsYmFjayksdGhpcy5heGlvc0luc3RhbmNlfXJlcXVlc3RIYW5kbGVyKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7aWYoeWllbGQgdGhpcy5hdHRhY2hUb2tlbih0KSxudWxsPT10P3ZvaWQgMDp0LnNob3VsZEVuY29kZVRvRm9ybURhdGEpe2NvbnN0IGU9bnVsbD09dD92b2lkIDA6dC5kYXRhLHI9bmV3IEZvcm1EYXRhO09iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntyLmFwcGVuZCh0LGVbdF0pfSkpLHQuZGF0YT1yfXJldHVybiB4bi5pc0hhbmRsZXJFbmFibGVkJiZ0aGlzLnJlcXVlc3RTdGFydENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3RhcnRDYWxsYmFjayh0KSx0fSkpfWVycm9ySGFuZGxlcihlKXt0aHJvdyB4bi5pc0hhbmRsZXJFbmFibGVkJiYodGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2smJnRoaXMucmVxdWVzdEVycm9yQ2FsbGJhY2soZSksdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlcXVlc3RGaW5pc2hDYWxsYmFjayYmdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2soKSksZX1zdWNjZXNzSGFuZGxlcihlKXtyZXR1cm4geG4uaXNIYW5kbGVyRW5hYmxlZCYmKHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMucmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayYmdGhpcy5yZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpLHRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2smJnRoaXMucmVxdWVzdEZpbmlzaENhbGxiYWNrKCkpLGV9aW5pdCh0PSEwLHIpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eG4uaXNIYW5kbGVyRW5hYmxlZD10LHRoaXMuYXR0YWNoVG9rZW49cn0pKX1lbmFibGVIYW5kbGVyKCl7eG4uaXNIYW5kbGVyRW5hYmxlZD0hMH1kaXNhYmxlSGFuZGxlcigpe3huLmlzSGFuZGxlckVuYWJsZWQ9ITF9ZGlzYWJsZUhhbmRsZXJXaXRoVGltZW91dChlPXhuLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQpe3huLmlzSGFuZGxlckVuYWJsZWQ9ITEsc2V0VGltZW91dCgoKCk9Pnt4bi5pc0hhbmRsZXJFbmFibGVkPSEwfSksZSl9c2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpe3RoaXMucmVxdWVzdFN0YXJ0Q2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjayhlKXt0aGlzLnJlcXVlc3RTdWNjZXNzQ2FsbGJhY2s9ZX1zZXRIdHRwUmVxdWVzdEVycm9yQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RXJyb3JDYWxsYmFjaz1lfXNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soZSl7dGhpcy5yZXF1ZXN0RmluaXNoQ2FsbGJhY2s9ZX19O2puLkRFRkFVTFRfSEFORExFUl9ESVNBQkxFX1RJTUVPVVQ9MWUzLGpuPXhuPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aCxzPW88Mz90Om51bGw9PT1uP249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOm47aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlzPVJlZmxlY3QuZGVjb3JhdGUoZSx0LHIsbik7ZWxzZSBmb3IodmFyIGE9ZS5sZW5ndGgtMTthPj0wO2EtLSkoaT1lW2FdKSYmKHM9KG88Mz9pKHMpOm8+Mz9pKHQscixzKTppKHQscikpfHxzKTtyZXR1cm4gbz4zJiZzJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHMpLHN9KFtlPT57fV0sam4pO2NsYXNzIEJue2NvbnN0cnVjdG9yKCl7dGhpcy5fZGF0YT1uZXcgTWFwfXNldERhdGEodCxyKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuc2V0KHQscil9KSl9Z2V0RGF0YSh0KXt2YXIgcixuO3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG51bGwhPT0obj1udWxsPT09KHI9dGhpcy5fZGF0YSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpKSYmdm9pZCAwIT09bj9uOiJ7fSJ9KSl9cmVtb3ZlRGF0YSh0KXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3RoaXMuX2RhdGEuZGVsZXRlKHQpfSkpfX1jb25zdCBxbj1zZWxmO2xldCBObjtxbi5vbm1lc3NhZ2U9KHtkYXRhOnQscG9ydHM6cn0pPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgbixpLG87Y29uc3Qgcz1yWzBdO2lmKHQudHlwZT09PURufHxObilzd2l0Y2godC50eXBlKXtjYXNlIERuOnRyeXtjb25zdCByPU9iamVjdC5hc3NpZ24oe30sdC5kYXRhKTtObj15aWVsZCh0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCByPW5ldyBCbixuPW5ldyBQbihyKTt5aWVsZCBuLmluaXRpYWxpemUodCk7Y29uc3QgaT1uZXcgTG4obiksbz1uLmdldERhdGFMYXllcigpLHM9am4uZ2V0SW5zdGFuY2UoKTsobnVsbD09cz92b2lkIDA6cy5pbml0KSYmKHlpZWxkIHMuaW5pdCghMCwodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7T2JqZWN0LmFzc2lnbih7YXR0YWNoVG9rZW46ITB9LHQpLmF0dGFjaFRva2VuJiYodC5oZWFkZXJzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0LmhlYWRlcnMpLHtBdXRob3JpemF0aW9uOmBCZWFyZXIgJHt5aWVsZCBuLmdldEFjY2Vzc1Rva2VuKCl9YH0pKX0pKSkpKTtjb25zdCBhPXQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3ZhciByLHMsYTtsZXQgdT0hMCxjPSExO2NvbnN0IGg9eWllbGQgby5nZXRDb25maWdEYXRhKCk7aWYobnVsbD09dD92b2lkIDA6dC50b2tlbkVuZHBvaW50KXt1PSExO2Zvcihjb25zdCBlIG9mWy4uLm51bGwhPT0ocz1udWxsPT09KHI9eWllbGQgby5nZXRDb25maWdEYXRhKCkpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlc291cmNlU2VydmVyVVJMcykmJnZvaWQgMCE9PXM/czpbXSxudWxsPT1oP3ZvaWQgMDpoLnNlcnZlck9yaWdpbl0paWYobnVsbD09PShhPXQudG9rZW5FbmRwb2ludCl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3RhcnRzV2l0aChlKSl7Yz0hMDticmVha319cmV0dXJuIHQuc2hvdWxkUmVwbGF5QWZ0ZXJSZWZyZXNoJiZvLnNldFRlbXBvcmFyeURhdGFQYXJhbWV0ZXIoVW4sSlNPTi5zdHJpbmdpZnkodCkpLHV8fGM/bi5yZXF1ZXN0Q3VzdG9tR3JhbnQodCkudGhlbigocj0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIHQucmV0dXJuc1Nlc3Npb24/KGkucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLG4uZ2V0QmFzaWNVc2VySW5mbygpKTpyfSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IE1uKCJXT1JLRVJfQ09SRS1SQ0ctSVYwMSIsIndvcmtlci1jb3JlIiwicmVxdWVzdEN1c3RvbUdyYW50IiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgdG9rZW4gZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksdT0oKT0+bi5yZWZyZXNoQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+KGMoKS50aGVuKChlPT57ZSYmYShlKX0pKSxpLnJlZnJlc2hBY2Nlc3NUb2tlbkF1dG9tYXRpY2FsbHkoKSxuLmdldEJhc2ljVXNlckluZm8oKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSxjPSgpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIG8uZ2V0VGVtcG9yYXJ5RGF0YVBhcmFtZXRlcihVbik7cmV0dXJuIGU/SlNPTi5wYXJzZShlKTpudWxsfSkpO3JldHVybntkaXNhYmxlSHR0cEhhbmRsZXI6KCk9PntzLmRpc2FibGVIYW5kbGVyJiZzLmRpc2FibGVIYW5kbGVyKCl9LGVuYWJsZUh0dHBIYW5kbGVyOigpPT57cy5lbmFibGVIYW5kbGVyJiZzLmVuYWJsZUhhbmRsZXIoKX0sZ2V0QWNjZXNzVG9rZW46KCk9Pm4uZ2V0QWNjZXNzVG9rZW4oKSxnZXRBdXRob3JpemF0aW9uVVJMOnQ9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldEF1dGhvcml6YXRpb25VUkwodCkudGhlbigodD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJue2F1dGhvcml6YXRpb25VUkw6dCxwa2NlOnlpZWxkIG4uZ2V0UEtDRUNvZGUoKX19KSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKX0pKSxnZXRCYXNpY1VzZXJJbmZvOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXRCYXNpY1VzZXJJbmZvKCl9KSksZ2V0Q29uZmlnRGF0YTooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG8uZ2V0Q29uZmlnRGF0YSgpfSkpLGdldERlY29kZWRJRFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4gbi5nZXREZWNvZGVkSURUb2tlbigpfSkpLGdldElEVG9rZW46KCk9PmUodm9pZCAwLHZvaWQgMCx2b2lkIDAsKGZ1bmN0aW9uKigpe3JldHVybiBuLmdldElEVG9rZW4oKX0pKSxnZXRPSURDU2VydmljZUVuZHBvaW50czooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIG4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKX0pKSxnZXRTaWduT3V0VVJMOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgbi5nZXRTaWduT3V0VVJMKCl9KSksaHR0cFJlcXVlc3Q6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7dmFyIGUscixuO2xldCBpPSExO2NvbnN0IGE9eWllbGQgby5nZXRDb25maWdEYXRhKCk7Zm9yKGNvbnN0IHMgb2ZbLi4ubnVsbCE9PShyPW51bGw9PT0oZT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVzb3VyY2VTZXJ2ZXJVUkxzKSYmdm9pZCAwIT09cj9yOltdLG51bGw9PWE/dm9pZCAwOmEuc2VydmVyT3JpZ2luXSlpZihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC51cmwpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnN0YXJ0c1dpdGgocykpe2k9ITA7YnJlYWt9cmV0dXJuIGk/cy5yZXF1ZXN0KHQpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT57dmFyIHI7cmV0dXJuIDQwMSE9PShudWxsPT09KHI9bnVsbD09ZT92b2lkIDA6ZS5yZXNwb25zZSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc3RhdHVzKSYmKG51bGw9PWU/dm9pZCAwOmUucmVzcG9uc2UpP1Byb21pc2UucmVqZWN0KGUpOnUoKS50aGVuKCgoKT0+cy5yZXF1ZXN0KHQpLnRoZW4oKGU9PlByb21pc2UucmVzb2x2ZShlKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpKSkuY2F0Y2goKGU9PlByb21pc2UucmVqZWN0KG5ldyBNbigiV09SS0VSX0NPUkUtSFItRVMwMSIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3QiLCIiLCIiLGUpKSkpfSkpOlByb21pc2UucmVqZWN0KG5ldyBNbigiV09SS0VSX0NPUkUtSFItSVYwMiIsIndvcmtlci1jb3JlIiwiaHR0cFJlcXVlc3QiLCJSZXF1ZXN0IHRvIHRoZSBwcm92aWRlZCBlbmRwb2ludCBpcyBwcm9oaWJpdGVkLiIsIlJlcXVlc3RzIGNhbiBvbmx5IGJlIHNlbnQgdG8gcmVzb3VyY2Ugc2VydmVycyBzcGVjaWZpZWQgYnkgdGhlIGByZXNvdXJjZVNlcnZlclVSTHNgIGF0dHJpYnV0ZSB3aGlsZSBpbml0aWFsaXppbmcgdGhlIFNESy4gVGhlIHNwZWNpZmllZCBlbmRwb2ludCBpbiB0aGlzIHJlcXVlc3QgY2Fubm90IGJlIGZvdW5kIGFtb25nIHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCIpKX0pKSxodHRwUmVxdWVzdEFsbDp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt2YXIgZSxyLGk7bGV0IGE9ITA7Y29uc3QgdT15aWVsZCBvLmdldENvbmZpZ0RhdGEoKTtmb3IoY29uc3QgbiBvZiB0KXtsZXQgdD0hMTtmb3IoY29uc3QgcyBvZlsuLi5udWxsIT09KHI9bnVsbD09PShlPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5yZXNvdXJjZVNlcnZlclVSTHMpJiZ2b2lkIDAhPT1yP3I6W10sbnVsbD09dT92b2lkIDA6dS5zZXJ2ZXJPcmlnaW5dKWlmKG51bGw9PT0oaT1uLnVybCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc3RhcnRzV2l0aChzKSl7dD0hMDticmVha31pZighdCl7YT0hMTticmVha319Y29uc3QgYz1bXTtyZXR1cm4gYT8odC5mb3JFYWNoKChlPT57Yy5wdXNoKHMucmVxdWVzdChlKSl9KSksKG51bGw9PXM/dm9pZCAwOnMuYWxsKSYmcy5hbGwoYykudGhlbigoZT0+UHJvbWlzZS5yZXNvbHZlKGUpKSkuY2F0Y2goKGU9Pnt2YXIgdDtyZXR1cm4gNDAxPT09KG51bGw9PT0odD1udWxsPT1lP3ZvaWQgMDplLnJlc3BvbnNlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zdGF0dXMpP24ucmVmcmVzaEFjY2Vzc1Rva2VuKCkudGhlbigoKCk9PnMuYWxsJiZzLmFsbChjKS50aGVuKChlPT5Qcm9taXNlLnJlc29sdmUoZSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChuZXcgTW4oIldPUktFUl9DT1JFLUhSQS1FUzAxIiwid29ya2VyLWNvcmUiLCJodHRwUmVxdWVzdEFsbCIsIiIsIiIsZSkpKSk6UHJvbWlzZS5yZWplY3QoZSl9KSkpOlByb21pc2UucmVqZWN0KG5ldyBNbigiV09SS0VSX0NPUkUtSFJBLUlWMDIiLCJ3b3JrZXItY29yZSIsImh0dHBSZXF1ZXN0IiwiUmVxdWVzdCB0byB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgcHJvaGliaXRlZC4iLCJSZXF1ZXN0cyBjYW4gb25seSBiZSBzZW50IHRvIHJlc291cmNlIHNlcnZlcnMgc3BlY2lmaWVkIGJ5IHRoZSBgcmVzb3VyY2VTZXJ2ZXJVUkxzYCBhdHRyaWJ1dGUgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBTREsuIFRoZSBzcGVjaWZpZWQgZW5kcG9pbnQgaW4gdGhpcyByZXF1ZXN0IGNhbm5vdCBiZSBmb3VuZCBhbW9uZyB0aGUgYHJlc291cmNlU2VydmVyVVJMc2AiKSl9KSksaXNBdXRoZW50aWNhdGVkOigpPT5uLmlzQXV0aGVudGljYXRlZCgpLHJlZnJlc2hBY2Nlc3NUb2tlbjp1LHJlcXVlc3RBY2Nlc3NUb2tlbjoodCxyLHMpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtjb25zdCBlPXlpZWxkIG8uZ2V0Q29uZmlnRGF0YSgpO3JldHVybiBzJiZlLmVuYWJsZVBLQ0UmJih5aWVsZCBuLnNldFBLQ0VDb2RlKHMpKSx0P24ucmVxdWVzdEFjY2Vzc1Rva2VuKHQsbnVsbCE9cj9yOiIiKS50aGVuKCgoKT0+KGkucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpLG4uZ2V0QmFzaWNVc2VySW5mbygpKSkpLmNhdGNoKChlPT5Qcm9taXNlLnJlamVjdChlKSkpOlByb21pc2UucmVqZWN0KG5ldyBNbigiV09SS0VSX0NPUkUtUkFUMS1ORjAxIiwid29ya2VyLWNvcmUiLCJyZXF1ZXN0QWNjZXNzVG9rZW4iLCJObyBhdXRob3JpemF0aW9uIGNvZGUuIiwiTm8gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBmb3VuZC4iKSl9KSkscmVxdWVzdEN1c3RvbUdyYW50OmEscmV2b2tlQWNjZXNzVG9rZW46KCk9Pm4ucmV2b2tlQWNjZXNzVG9rZW4oKS50aGVuKCgoKT0+KGkuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCksUHJvbWlzZS5yZXNvbHZlKCEwKSkpKS5jYXRjaCgoZT0+UHJvbWlzZS5yZWplY3QoZSkpKSxzZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrOmU9PnsobnVsbD09cz92b2lkIDA6cy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKSYmcy5zZXRIdHRwUmVxdWVzdEZpbmlzaENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN0YXJ0Q2FsbGJhY2s6ZT0+eyhudWxsPT1zP3ZvaWQgMDpzLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjaykmJnMuc2V0SHR0cFJlcXVlc3RTdGFydENhbGxiYWNrKGUpfSxzZXRIdHRwUmVxdWVzdFN1Y2Nlc3NDYWxsYmFjazplPT57KG51bGw9PXM/dm9pZCAwOnMuc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2spJiZzLnNldEh0dHBSZXF1ZXN0U3VjY2Vzc0NhbGxiYWNrKGUpfSxzZXRTZXNzaW9uU3RhdGU6dD0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7eWllbGQgby5zZXRTZXNzaW9uRGF0YVBhcmFtZXRlcigic2Vzc2lvbl9zdGF0ZSIsdCl9KSksc2lnbk91dDooKT0+ZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCwoZnVuY3Rpb24qKCl7cmV0dXJuIGkuY2xlYXJSZWZyZXNoVG9rZW5UaW1lb3V0KCkseWllbGQgbi5zaWduT3V0KCl9KSksc3RhcnRBdXRvUmVmcmVzaFRva2VuOigpPT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXtpLmNsZWFyUmVmcmVzaFRva2VuVGltZW91dCgpLGkucmVmcmVzaEFjY2Vzc1Rva2VuQXV0b21hdGljYWxseSgpfSkpLHVwZGF0ZUNvbmZpZzp0PT5lKHZvaWQgMCx2b2lkIDAsdm9pZCAwLChmdW5jdGlvbiooKXt5aWVsZCBuLnVwZGF0ZUNvbmZpZyh0KX0pKX19KSkpKHIpLE5uLnNldEh0dHBSZXF1ZXN0RmluaXNoQ2FsbGJhY2soWW4pLE5uLnNldEh0dHBSZXF1ZXN0U3RhcnRDYWxsYmFjayhLbiksTm4uc2V0SHR0cFJlcXVlc3RTdWNjZXNzQ2FsbGJhY2soRm4pLHMucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSgpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZ2V0X2F1dGhfdXJsIjpObi5nZXRBdXRob3JpemF0aW9uVVJMKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UicmVxdWVzdF9nZXRfdG9rZW4iOk5uLnJlcXVlc3RBY2Nlc3NUb2tlbihudWxsPT09KG49bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bj92b2lkIDA6bi5jb2RlLG51bGw9PT0oaT1udWxsPT10P3ZvaWQgMDp0LmRhdGEpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNlc3Npb25TdGF0ZSxudWxsPT09KG89bnVsbD09dD92b2lkIDA6dC5kYXRhKXx8dm9pZCAwPT09bz92b2lkIDA6by5wa2NlKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJodHRwLXJlcXVlc3QiOk5uLmh0dHBSZXF1ZXN0KHQuZGF0YSkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiaHR0cC1yZXF1ZXN0LWFsbCI6Tm4uaHR0cFJlcXVlc3RBbGwodC5kYXRhKS50aGVuKChlPT57cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKGUpKX0pKS5jYXRjaCgoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9KSk7YnJlYWs7Y2FzZSJzaWduLW91dCI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5zaWduT3V0KCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UicmVxdWVzdC1jdXN0b20tZ3JhbnQiOk5uLnJlcXVlc3RDdXN0b21HcmFudCh0LmRhdGEpLnRoZW4oKGU9PntzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoZSkpfSkpLmNhdGNoKChlPT57cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX0pKTticmVhaztjYXNlInJldm9rZS1hY2Nlc3MtdG9rZW4iOk5uLnJldm9rZUFjY2Vzc1Rva2VuKCkudGhlbigoZT0+e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZShlKSl9KSkuY2F0Y2goKGU9PntzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfSkpO2JyZWFrO2Nhc2UiZ2V0LW9pZGMtc2VydmljZS1lbmRwb2ludHMiOnRyeXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgTm4uZ2V0T0lEQ1NlcnZpY2VFbmRwb2ludHMoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtYmFzaWMtdXNlci1pbmZvIjp0cnl7cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIE5uLmdldEJhc2ljVXNlckluZm8oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXQtZGVjb2RlZC1pZC10b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5nZXREZWNvZGVkSURUb2tlbigpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztjYXNlImdldF9pZF90b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5nZXRJRFRva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UiZW5hYmxlX2h0dHBfaGFuZGxlciI6Tm4uZW5hYmxlSHR0cEhhbmRsZXIoKSxzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoKSk7YnJlYWs7Y2FzZSJkaXNhYmxlX2h0dHBfaGFuZGxlciI6Tm4uZGlzYWJsZUh0dHBIYW5kbGVyKCkscy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKCkpO2JyZWFrO2Nhc2UiaXNfYXV0aGVudGljYXRlZCI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5pc0F1dGhlbnRpY2F0ZWQoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfc2lnbl9vdXRfdXJsIjp0cnl7cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZVN1Y2Nlc3NNZXNzYWdlKHlpZWxkIE5uLmdldFNpZ25PdXRVUkwoKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJyZWZyZXNoX2FjY2Vzcy10b2tlbiI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi5yZWZyZXNoQWNjZXNzVG9rZW4oKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJzdGFydF9hdXRvX3JlZnJlc2hfdG9rZW4iOnRyeXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoTm4uc3RhcnRBdXRvUmVmcmVzaFRva2VuKCkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2Uic2V0X3Nlc3Npb25fc3RhdGUiOnRyeXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgTm4uc2V0U2Vzc2lvblN0YXRlKG51bGw9PXQ/dm9pZCAwOnQuZGF0YSkpKX1jYXRjaChlKXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UoZSkpfWJyZWFrO2Nhc2UidXBkYXRlX2NvbmZpZyI6dHJ5e3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVTdWNjZXNzTWVzc2FnZSh5aWVsZCBObi51cGRhdGVDb25maWcobnVsbD09dD92b2lkIDA6dC5kYXRhKSkpfWNhdGNoKGUpe3MucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShlKSl9YnJlYWs7Y2FzZSJnZXRfY29uZmlnX2RhdGEiOnRyeXtzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlU3VjY2Vzc01lc3NhZ2UoeWllbGQgTm4uZ2V0Q29uZmlnRGF0YSgpKSl9Y2F0Y2goZSl7cy5wb3N0TWVzc2FnZShIbi5nZW5lcmF0ZUZhaWx1cmVNZXNzYWdlKGUpKX1icmVhaztkZWZhdWx0Om51bGw9PXN8fHMucG9zdE1lc3NhZ2UoSG4uZ2VuZXJhdGVGYWlsdXJlTWVzc2FnZShuZXcgTW4oIkNMSUVOVF9XT1JLRVItT05NU0ctSVYwMiIsImNsaWVudC53b3JrZXIiLCJvbm1lc3NhZ2UiLCJUaGUgbWVzc2FnZSB0eXBlIGlzIGludmFsaWQuIixgVGhlIG1lc3NhZ2UgdHlwZSBwcm92aWRlZCwgJHt0LnR5cGV9LCBpcyBpbnZhbGlkLmApKSl9ZWxzZSBzLnBvc3RNZXNzYWdlKEhuLmdlbmVyYXRlRmFpbHVyZU1lc3NhZ2UobmV3IE1uKCJDTElFTlRfV09SS0VSLU9OTVNHLU5GMDEiLCJjbGllbnQud29ya2VyIix0LnR5cGUsIlRoZSB3ZWIgd29ya2VyIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuIiwiVGhlIGluaXRpYWxpemUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gY2FuIGJlIGNhcnJpZWQgb3V0LiIpKSl9KSk7Y29uc3QgS249KCk9Pntxbi5wb3N0TWVzc2FnZSh7dHlwZToicmVxdWVzdC1zdGFydCJ9KX0sRm49ZT0+e3FuLnBvc3RNZXNzYWdlKHtkYXRhOkpTT04uc3RyaW5naWZ5KG51bGwhPWU/ZToiIiksdHlwZToicmVxdWVzdC1zdWNjZXNzIn0pfSxZbj0oKT0+e3FuLnBvc3RNZXNzYWdlKHt0eXBlOiJyZXF1ZXN0LWZpbmlzaCJ9KX07cmV0dXJue319KCk7Cgo=",null,!1),new Worker($i,t)});const ne={checkSessionInterval:3,clientHost:origin,enableOIDCSessionManagement:!1,sessionRefreshInterval:300,storage:Bi.SessionStorage};class le{constructor(t){this._initialized=!1,this._startedInitialize=!1,this._onSignInCallback=()=>null,this._onSignOutCallback=()=>null,this._onEndUserSession=()=>null,this._onInitialize=()=>null,this._onCustomGrant=new Map,this._instanceID=t}_isInitialized(){return i(this,void 0,void 0,(function*(){if(!this._startedInitialize)return!1;let t=0;for(;!this._initialized;)10===t&&console.warn("It is taking longer than usual for the object to be initialized"),yield new Promise(t=>setTimeout(t,1e3)),t++;return!0}))}_validateMethod(){return i(this,void 0,void 0,(function*(){return(yield this._isInitialized())&&!!(yield this.isAuthenticated())||Promise.reject()}))}
|
|
408
408
|
/**
|
|
409
409
|
* This method returns the instance of the singleton class.
|
|
410
410
|
*
|
|
@@ -420,7 +420,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
420
420
|
* @memberof AsgardeoSPAClient
|
|
421
421
|
*
|
|
422
422
|
* @preserve
|
|
423
|
-
*/static getInstance(t){var l
|
|
423
|
+
*/static getInstance(t){var n,l;return t&&(null===(n=this._instances)||void 0===n?void 0:n.get(t))?this._instances.get(t):!t&&(null===(l=this._instances)||void 0===l?void 0:l.get("primaryInstance"))?this._instances.get("primaryInstance"):t?(this._instances.set(t,new le(t)),this._instances.get(t)):(this._instances.set("primaryInstance",new le("primaryInstance")),this._instances.get("primaryInstance"))}
|
|
424
424
|
/**
|
|
425
425
|
* This method initializes the `AsgardeoSPAClient` instance.
|
|
426
426
|
*
|
|
@@ -442,7 +442,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
442
442
|
* @memberof AsgardeoSPAClient
|
|
443
443
|
*
|
|
444
444
|
* @preserve
|
|
445
|
-
*/initialize(t){var
|
|
445
|
+
*/initialize(t){var n;return i(this,void 0,void 0,(function*(){if(this._storage=null!==(n=t.storage)&&void 0!==n?n:Bi.SessionStorage,this._initialized=!1,this._startedInitialize=!0,this._storage!==Bi.WebWorker){if(!this._client){const n=t,l=Object.assign({},ne);this._client=yield _i(Object.assign(Object.assign({},l),n))}return this._initialized=!0,this._onInitialize&&this._onInitialize(!0),Promise.resolve(!0)}if(!this._client){const n=t;return this._client=(t=>{var n;let l;const e=null!==(n=null==t?void 0:t.requestTimeout)&&void 0!==n?n:6e4;let c=!0;const o=Qi(()=>i(void 0,void 0,void 0,(function*(){const t={type:"sign-out"};try{return yield r(t)}catch(t){return Pi.getSignOutURL()}})),t.storage,t=>a(t)),d=new te,r=t=>{const n=new MessageChannel;return d.postMessage(t,[n.port2]),new Promise((t,l)=>{const i=setTimeout(()=>{l(new Ai("WEB_WORKER_CLIENT-COM-TO-01","web-worker-client","communicate","Operation timed out.","No response was received from the web worker for "+e/1e3+" since dispatching the request"))},e);return n.port1.onmessage=({data:n})=>{if(clearTimeout(i),null==n?void 0:n.success){const l=(null==n?void 0:n.data)?JSON.parse(null==n?void 0:n.data):null;(null==n?void 0:n.blob)&&(l.data=null==n?void 0:n.blob),t(l)}else l(n.error?JSON.parse(n.error):null)}})},a=t=>r({data:t,type:"set_session_state"}),u=()=>r({type:"start_auto_refresh_token"}),Z=()=>i(void 0,void 0,void 0,(function*(){var t,n,l,e;const c=yield b(),d=yield m();o.initialize(d.clientID,null!==(t=c.checkSessionIframe)&&void 0!==t?t:"",()=>i(void 0,void 0,void 0,(function*(){return(yield h()).sessionState})),null!==(n=d.checkSessionInterval)&&void 0!==n?n:3,null!==(l=d.sessionRefreshInterval)&&void 0!==l?l:300,d.signInRedirectURL,null!==(e=c.authorizationEndpoint)&&void 0!==e?e:"",d.enablePKCE)})),s=(t,n)=>i(void 0,void 0,void 0,(function*(){const l=yield m(),i={data:{code:t,pkce:l.enablePKCE?Pi.getPKCE():void 0,sessionState:n},type:"request_get_token"};return l.enablePKCE&&Pi.removePKCE(),r(i).then(t=>r({type:"get_sign_out_url"}).then(n=>(Pi.setSignOutURL(n),l.enableOIDCSessionManagement&&Z(),u(),Promise.resolve(t))).catch(t=>Promise.reject(t))).catch(t=>Promise.reject(t))})),b=()=>r({type:"get-oidc-service-endpoints"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),m=()=>r({type:"get_config_data"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),h=()=>r({type:"get-basic-user-info"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),I=()=>r({type:"is_authenticated"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t));return{disableHttpHandler:()=>r({type:"disable_http_handler"}).then(()=>(c=!1,Promise.resolve(!0))).catch(t=>Promise.reject(t)),enableHttpHandler:()=>r({type:"enable_http_handler"}).then(()=>(c=!0,Promise.resolve(!0))).catch(t=>Promise.reject(t)),getBasicUserInfo:h,getDecodedIDToken:()=>r({type:"get-decoded-id-token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getIDToken:()=>r({type:"get_id_token"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),getOIDCServiceEndpoints:b,httpRequest:t=>r({data:t,type:"http-request"}).then(t=>Promise.resolve(t)).catch(t=>i(void 0,void 0,void 0,(function*(){return c&&("function"==typeof l.requestErrorCallback&&(yield l.requestErrorCallback(t)),"function"==typeof l.requestFinishCallback&&l.requestFinishCallback()),Promise.reject(t)}))),httpRequestAll:t=>r({data:t,type:"http-request-all"}).then(t=>Promise.resolve(t)).catch(t=>i(void 0,void 0,void 0,(function*(){return c&&("function"==typeof l.requestErrorCallback&&(yield l.requestErrorCallback(t)),"function"==typeof l.requestFinishCallback&&l.requestFinishCallback()),Promise.reject(t)}))),initialize:()=>(l||(l={requestErrorCallback:()=>Promise.resolve(),requestFinishCallback:()=>null,requestStartCallback:()=>null,requestSuccessCallback:()=>null}),d.onmessage=({data:t})=>{switch(t.type){case"request-finish":(null==l?void 0:l.requestFinishCallback)&&(null==l||l.requestFinishCallback());break;case"request-start":(null==l?void 0:l.requestStartCallback)&&(null==l||l.requestStartCallback());break;case"request-success":(null==l?void 0:l.requestSuccessCallback)&&(null==l||l.requestSuccessCallback(t.data?JSON.parse(t.data):null))}},r({data:t,type:"init"}).then(()=>Promise.resolve(!0)).catch(t=>Promise.reject(t))),isAuthenticated:I,refreshAccessToken:()=>r({type:"refresh_access-token"}),requestCustomGrant:t=>r({data:t,type:"request-custom-grant"}).then(t=>Promise.resolve(t)).catch(t=>Promise.reject(t)),revokeAccessToken:()=>r({type:"revoke-access-token"}).then(t=>(o.reset(),Promise.resolve(t))).catch(t=>Promise.reject(t)),setHttpRequestErrorCallback:t=>{t&&"function"==typeof t&&(l.requestErrorCallback=t)},setHttpRequestFinishCallback:t=>{t&&"function"==typeof t&&(l.requestFinishCallback=t)},setHttpRequestStartCallback:t=>{t&&"function"==typeof t&&(l.requestStartCallback=t)},setHttpRequestSuccessCallback:t=>{t&&"function"==typeof t&&(l.requestSuccessCallback=t)},signIn:(t,n,l)=>i(void 0,void 0,void 0,(function*(){var e,c;const d=yield m();if(yield o.receivePromptNoneResponse(t=>i(void 0,void 0,void 0,(function*(){return a(t)}))))return Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const b=new URL(window.location.href).searchParams.get("error"),p=new URL(window.location.href).searchParams.get("error_description");if(b){const t=new URL(window.location.href);return t.searchParams.delete("error"),t.searchParams.delete("error_description"),history.pushState(null,document.title,t.toString()),Promise.reject(new Ai("WEB_WORKER_CLIENT-SI-BE","web-worker-client","signIn",b,null!=p?p:""))}if(yield I())return yield u(),d.enableOIDCSessionManagement&&Z(),h();let G,y;return(null==d?void 0:d.responseMode)===Gn.formPost&&n?(G=n,y=null!=l?l:""):(G=null!==(e=new URL(window.location.href).searchParams.get(Yn))&&void 0!==e?e:"",y=null!==(c=new URL(window.location.href).searchParams.get(Jn))&&void 0!==c?c:"",Pi.removeAuthorizationCode()),G?s(G,y):r({data:t,type:"get_auth_url"}).then(t=>i(void 0,void 0,void 0,(function*(){return t.pkce&&d.enablePKCE&&Pi.setPKCE(t.pkce),location.href=t.authorizationURL,yield Pi.waitTillPageRedirect(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""})}))).catch(t=>Promise.reject(t))})),signOut:()=>I().then(t=>i(void 0,void 0,void 0,(function*(){return t?r({type:"sign-out"}).then(t=>i(void 0,void 0,void 0,(function*(){return window.location.href=t,yield Pi.waitTillPageRedirect(),Promise.resolve(!0)}))).catch(t=>Promise.reject(t)):(window.location.href=Pi.getSignOutURL(),yield Pi.waitTillPageRedirect(),Promise.resolve(!0))}))).catch(t=>Promise.reject(t)),trySignInSilently:()=>i(void 0,void 0,void 0,(function*(){var t;const n=yield m();if(Pi.isInitializedSilentSignIn())return yield o.receivePromptNoneResponse(),Promise.resolve({allowedScopes:"",displayName:"",email:"",sessionState:"",sub:"",tenantDomain:"",username:""});const l=document.getElementById("rpIFrame"),e=null===(t=null==l?void 0:l.contentDocument)||void 0===t?void 0:t.getElementById("promptNoneIFrame"),c={data:{prompt:"none",state:"sign-in-silently"},type:"get_auth_url"};try{const t=yield r(c);t.pkce&&n.enablePKCE&&Pi.setPKCE(t.pkce);const l=t.authorizationURL,i=new URL(l);i.searchParams.set("response_mode","query");const o=i.toString();e.src=o}catch(t){return Promise.reject(t)}return new Promise((t,n)=>{const l=setTimeout(()=>{t(!1)},1e4),e=c=>i(void 0,void 0,void 0,(function*(){var i,o,d;const r=c.data;"check_session_signed_out"==(null==r?void 0:r.type)&&(window.removeEventListener("message",e),clearTimeout(l),t(!1)),"check_session_signed_in"==(null==r?void 0:r.type)&&(null===(i=null==r?void 0:r.data)||void 0===i?void 0:i.code)&&s(null===(o=null==r?void 0:r.data)||void 0===o?void 0:o.code,null===(d=null==r?void 0:r.data)||void 0===d?void 0:d.sessionState).then(n=>{window.removeEventListener("message",e),t(n)}).catch(t=>{window.removeEventListener("message",e),n(t)}).finally(()=>{clearTimeout(l)})}));window.addEventListener("message",e)})})),updateConfig:t=>i(void 0,void 0,void 0,(function*(){const n=yield m(),l=!(n&&n.endpoints&&n.endpoints.checkSessionIframe&&t&&t.endpoints&&t.endpoints.checkSessionIframe&&n.endpoints.checkSessionIframe===t.endpoints.checkSessionIframe),i=Object.assign(Object.assign({},n),t),e={data:i,type:"update_config"};yield r(e),i.enableOIDCSessionManagement&&l&&(o.reset(),Z())}))}})(Object.assign(Object.assign({},ne),n)),this._client.initialize().then(()=>(this._onInitialize&&this._onInitialize(!0),this._initialized=!0,Promise.resolve(!0))).catch(t=>Promise.reject(t))}return Promise.resolve(!0)}))}
|
|
446
446
|
/**
|
|
447
447
|
* This method returns a Promise that resolves with the basic user information obtained from the ID token.
|
|
448
448
|
*
|
|
@@ -462,7 +462,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
462
462
|
* @memberof AsgardeoSPAClient
|
|
463
463
|
*
|
|
464
464
|
* @preserve
|
|
465
|
-
*/getBasicUserInfo(){var t;return
|
|
465
|
+
*/getBasicUserInfo(){var t;return i(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getBasicUserInfo()}))}
|
|
466
466
|
/**
|
|
467
467
|
* This method initiates the authentication flow. This should be called twice.
|
|
468
468
|
* 1. To initiate the authentication flow.
|
|
@@ -495,7 +495,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
495
495
|
* @memberof AsgardeoSPAClient
|
|
496
496
|
*
|
|
497
497
|
* @preserve
|
|
498
|
-
*/signIn(t,l
|
|
498
|
+
*/signIn(t,n,l){var e;return i(this,void 0,void 0,(function*(){if(yield this._isInitialized(),Pi.canContinueSignIn(Boolean(null==t?void 0:t.callOnlyOnRedirect),n))return null==t||delete t.callOnlyOnRedirect,null===(e=this._client)||void 0===e?void 0:e.signIn(t,n,l).then(t=>(this._onSignInCallback&&(t.allowedScopes||t.displayName||t.email||t.username)&&this._onSignInCallback(t),t))}))}trySignInSilently(){var t;return i(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!Pi.wasSignInCalled())return null===(t=this._client)||void 0===t?void 0:t.trySignInSilently().then(t=>{if(this._onSignInCallback&&t){const n=t;(n.allowedScopes||n.displayName||n.email||n.username)&&this._onSignInCallback(n)}return t})}))}
|
|
499
499
|
/**
|
|
500
500
|
* This method initiates the sign-out flow.
|
|
501
501
|
*
|
|
@@ -515,7 +515,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
515
515
|
* @memberof AsgardeoSPAClient
|
|
516
516
|
*
|
|
517
517
|
* @preserve
|
|
518
|
-
*/signOut(){var t,
|
|
518
|
+
*/signOut(){var t,n;return i(this,void 0,void 0,(function*(){return yield this._validateMethod(),null!==(n=yield null===(t=this._client)||void 0===t?void 0:t.signOut())&&void 0!==n&&n}))}
|
|
519
519
|
/**
|
|
520
520
|
* This method sends an API request to a protected endpoint.
|
|
521
521
|
* The access token is automatically attached to the header of the request.
|
|
@@ -552,7 +552,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
552
552
|
* @memberof AsgardeoSPAClient
|
|
553
553
|
*
|
|
554
554
|
* @preserve
|
|
555
|
-
*/httpRequest(t){var
|
|
555
|
+
*/httpRequest(t){var n;return i(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(n=this._client)||void 0===n?void 0:n.httpRequest(t)}))}
|
|
556
556
|
/**
|
|
557
557
|
* This method sends multiple API requests to a protected endpoint.
|
|
558
558
|
* The access token is automatically attached to the header of the request.
|
|
@@ -599,7 +599,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
599
599
|
* @memberof AsgardeoSPAClient
|
|
600
600
|
*
|
|
601
601
|
* @preserve
|
|
602
|
-
*/httpRequestAll(t){var
|
|
602
|
+
*/httpRequestAll(t){var n;return i(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(n=this._client)||void 0===n?void 0:n.httpRequestAll(t)}))}
|
|
603
603
|
/**
|
|
604
604
|
* This method allows you to send a request with a custom grant.
|
|
605
605
|
*
|
|
@@ -630,7 +630,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
630
630
|
* @memberof AsgardeoSPAClient
|
|
631
631
|
*
|
|
632
632
|
* @preserve
|
|
633
|
-
*/requestCustomGrant(t){var l
|
|
633
|
+
*/requestCustomGrant(t){var n,l;return i(this,void 0,void 0,(function*(){if(t.signInRequired,yield this._validateMethod(),!t.id)return Promise.reject(new Ai("AUTH_CLIENT-RCG-NF01","client","requestCustomGrant","The custom grant request id not found.","The id attribute of the custom grant config object passed as an argument should have a value."));const i=yield null===(n=this._client)||void 0===n?void 0:n.requestCustomGrant(t),e=this._onCustomGrant.get(t.id);return e&&e(null===(l=this._onCustomGrant)||void 0===l?void 0:l.get(t.id)),i}))}
|
|
634
634
|
/**
|
|
635
635
|
* This method ends a user session. The access token is revoked and the session information is destroyed.
|
|
636
636
|
*
|
|
@@ -650,7 +650,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
650
650
|
* @memberof AsgardeoSPAClient
|
|
651
651
|
*
|
|
652
652
|
* @preserve
|
|
653
|
-
*/revokeAccessToken(){var t;return
|
|
653
|
+
*/revokeAccessToken(){var t;return i(this,void 0,void 0,(function*(){yield this._validateMethod();const n=yield null===(t=this._client)||void 0===t?void 0:t.revokeAccessToken();return this._onEndUserSession&&(yield this._onEndUserSession(n)),n}))}
|
|
654
654
|
/**
|
|
655
655
|
* This method returns a Promise that resolves with an object containing the service endpoints.
|
|
656
656
|
*
|
|
@@ -670,7 +670,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
670
670
|
* @memberof AsgardeoSPAClient
|
|
671
671
|
*
|
|
672
672
|
* @preserve
|
|
673
|
-
*/getOIDCServiceEndpoints(){var t;return
|
|
673
|
+
*/getOIDCServiceEndpoints(){var t;return i(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.getOIDCServiceEndpoints()}))}
|
|
674
674
|
/**
|
|
675
675
|
* This methods returns the Axios http client.
|
|
676
676
|
*
|
|
@@ -679,7 +679,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
679
679
|
* @memberof AsgardeoSPAClient
|
|
680
680
|
*
|
|
681
681
|
* @preserve
|
|
682
|
-
*/getHttpClient(){if(this._client){if(this._storage!==
|
|
682
|
+
*/getHttpClient(){if(this._client){if(this._storage!==Bi.WebWorker)return this._client.getHttpClient();throw new Ai("AUTH_CLIENT-GHC-IV01","client","getHttpClient","Http client cannot be returned.","The http client cannot be returned when the storage type is set to webWorker.")}throw new Ai("AUTH_CLIENT-GHC-NF02","client","getHttpClient","The SDK is not initialized.","The SDK has not been initialized yet. Initialize the SDK suing the initialize method before calling this method.")}
|
|
683
683
|
/**
|
|
684
684
|
* This method decodes the payload of the id token and returns it.
|
|
685
685
|
*
|
|
@@ -699,7 +699,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
699
699
|
* @memberof AsgardeoSPAClient
|
|
700
700
|
*
|
|
701
701
|
* @preserve
|
|
702
|
-
*/getDecodedIDToken(){var t;return
|
|
702
|
+
*/getDecodedIDToken(){var t;return i(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getDecodedIDToken()}))}
|
|
703
703
|
/**
|
|
704
704
|
* This method return the ID token.
|
|
705
705
|
*
|
|
@@ -715,7 +715,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
715
715
|
* @memberof AsgardeoAuthClient
|
|
716
716
|
*
|
|
717
717
|
* @preserve
|
|
718
|
-
*/getIDToken(){var t;return
|
|
718
|
+
*/getIDToken(){var t;return i(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.getIDToken()}))}
|
|
719
719
|
/**
|
|
720
720
|
* This method return a Promise that resolves with the access token.
|
|
721
721
|
*
|
|
@@ -737,7 +737,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
737
737
|
* @memberof AsgardeoSPAClient
|
|
738
738
|
*
|
|
739
739
|
* @preserve
|
|
740
|
-
*/getAccessToken(){return
|
|
740
|
+
*/getAccessToken(){return i(this,void 0,void 0,(function*(){return yield this._validateMethod(),this._storage&&[(Bi.WebWorker,Bi.BrowserMemory)].includes(this._storage)?Promise.reject(new Ai("AUTH_CLIENT-GAT-IV01","client","getAccessToken","The access token cannot be returned.","The access token cannot be returned when the storage type is set to webWorker or browserMemory.")):this._client.getAccessToken()}))}
|
|
741
741
|
/**
|
|
742
742
|
* This method refreshes the access token.
|
|
743
743
|
*
|
|
@@ -758,7 +758,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
758
758
|
* @memberof AsgardeoSPAClient
|
|
759
759
|
*
|
|
760
760
|
* @preserve
|
|
761
|
-
*/refreshAccessToken(){var t;return
|
|
761
|
+
*/refreshAccessToken(){var t;return i(this,void 0,void 0,(function*(){return yield this._validateMethod(),null===(t=this._client)||void 0===t?void 0:t.refreshAccessToken()}))}
|
|
762
762
|
/**
|
|
763
763
|
* This method specifies if the user is authenticated or not.
|
|
764
764
|
*
|
|
@@ -767,7 +767,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
767
767
|
* @memberof AsgardeoSPAClient
|
|
768
768
|
*
|
|
769
769
|
* @preserve
|
|
770
|
-
*/isAuthenticated(){var t;return
|
|
770
|
+
*/isAuthenticated(){var t;return i(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.isAuthenticated()}))}on(t,n,l){var e,c,o,d;return i(this,void 0,void 0,(function*(){if(yield this._isInitialized(),!n||"function"!=typeof n)throw new Ai("AUTH_CLIENT-ON-IV02","client","on","Invalid callback function.","The provided callback function is invalid.");switch(t){case zi.SignIn:this._onSignInCallback=n;break;case zi.SignOut:this._onSignOutCallback=n,Pi.isSignOutSuccessful()&&this._onSignOutCallback();break;case zi.RevokeAccessToken:this._onEndUserSession=n;break;case zi.Initialize:this._onInitialize=n;break;case zi.HttpRequestError:null===(e=this._client)||void 0===e||e.setHttpRequestErrorCallback(n);break;case zi.HttpRequestFinish:null===(c=this._client)||void 0===c||c.setHttpRequestFinishCallback(n);break;case zi.HttpRequestStart:null===(o=this._client)||void 0===o||o.setHttpRequestStartCallback(n);break;case zi.HttpRequestSuccess:null===(d=this._client)||void 0===d||d.setHttpRequestSuccessCallback(n);break;case zi.CustomGrant:l&&this._onCustomGrant.set(l,n);break;default:throw new Ai("AUTH_CLIENT-ON-IV01","client","on","Invalid hook.","The provided hook is invalid.")}}))}
|
|
771
771
|
/**
|
|
772
772
|
* This method enables callback functions attached to the http client.
|
|
773
773
|
*
|
|
@@ -783,7 +783,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
783
783
|
* @memberof AsgardeoSPAClient
|
|
784
784
|
*
|
|
785
785
|
* @preserve
|
|
786
|
-
*/enableHttpHandler(){var t;return
|
|
786
|
+
*/enableHttpHandler(){var t;return i(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.enableHttpHandler()}))}
|
|
787
787
|
/**
|
|
788
788
|
* This method disables callback functions attached to the http client.
|
|
789
789
|
*
|
|
@@ -799,7 +799,7 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
799
799
|
* @memberof AsgardeoSPAClient
|
|
800
800
|
*
|
|
801
801
|
* @preserve
|
|
802
|
-
*/disableHttpHandler(){var t;return
|
|
802
|
+
*/disableHttpHandler(){var t;return i(this,void 0,void 0,(function*(){return yield this._isInitialized(),null===(t=this._client)||void 0===t?void 0:t.disableHttpHandler()}))}
|
|
803
803
|
/**
|
|
804
804
|
* This method updates the configuration that was passed into the constructor when instantiating this class.
|
|
805
805
|
*
|
|
@@ -819,4 +819,4 @@ constructor(t){Hn._instanceID?Hn._instanceID+=1:Hn._instanceID=0,this._dataLayer
|
|
|
819
819
|
* @memberof AsgardeoAuthClient
|
|
820
820
|
*
|
|
821
821
|
* @preserve
|
|
822
|
-
*/updateConfig(t){return n(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===xn.WebWorker){const l=this._client;yield l.updateConfig(t)}else{const l=this._client;yield l.updateConfig(t)}}))}}_n._instances=new Map;class $n extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}}).call(this,i(140))},function(t,l){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,l,i){var n=i(106),e=i(59);t.exports=function(t){var l=n(t,"string");return e(l)?l:String(l)}},function(t,l,i){var n,e,c=i(4),o=i(39),d=c.process,r=c.Deno,a=d&&d.versions||r&&r.version,u=a&&a.v8;u?e=(n=u.split("."))[0]<4?1:n[0]+n[1]:o&&(!(n=o.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\/(\d+)/))&&(e=n[1]),t.exports=e&&+e},function(t,l,i){var n=i(146),e=i(112).concat("length","prototype");l.f=Object.getOwnPropertyNames||function(t){return n(t,e)}},function(t,l,i){var n=i(30),e=Math.max,c=Math.min;t.exports=function(t,l){var i=n(t);return i<0?e(i+l,0):c(i,l)}},function(t,l,i){var n=i(46);t.exports=Array.isArray||function(t){return"Array"==n(t)}},function(t,l,i){var n=i(76),e=i(75),c=i(7)("iterator");t.exports=function(t){if(null!=t)return t[c]||t["@@iterator"]||e[n(t)]}},function(t,l,i){"use strict";var n=i(47),e=i(14),c=i(38);t.exports=function(t,l,i){var o=n(l);o in t?e.f(t,o,c(0,i)):t[o]=i}},function(t,l,i){"use strict";var n=i(11),e=i(14),c=i(7),o=i(9),d=c("species");t.exports=function(t){var l=n(t),i=e.f;o&&l&&!l[d]&&i(l,d,{configurable:!0,get:function(){return this}})}},function(t,l,i){var n=i(0),e=i(70),c=i(8),o=i(16),d=i(14).f,r=i(49),a=i(115),u=i(69),Z=i(77),s=!1,b=u("meta"),m=0,h=Object.isExtensible||function(){return!0},I=function(t){d(t,b,{value:{objectID:"O"+m++,weakData:{}}})},p=t.exports={enable:function(){p.enable=function(){},s=!0;var t=r.f,l=[].splice,i={};i[b]=1,t(i).length&&(r.f=function(i){for(var n=t(i),e=0,c=n.length;e<c;e++)if(n[e]===b){l.call(n,e,1);break}return n},n({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:a.f}))},fastKey:function(t,l){if(!c(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,b)){if(!h(t))return"F";if(!l)return"E";I(t)}return t[b].objectID},getWeakData:function(t,l){if(!o(t,b)){if(!h(t))return!0;if(!l)return!1;I(t)}return t[b].weakData},onFreeze:function(t){return Z&&s&&h(t)&&!o(t,b)&&I(t),t}};e[b]=!0},function(t,l,i){"use strict";var n=i(61),e=i(3),c=i(1),o=i(26),d=i(18),r=i(36),a=i(7),u=i(17),Z=i(11)("Promise"),s=u.set,b=u.get,m=a("toStringTag");t.exports=function(t,l){var i=function(t){t.next=e(t.iterator.next),t.done=!1,t.ignoreArgument=!l,s(this,t)};return i.prototype=r(o(n.AsyncIterator.prototype),{next:function(i){var n=this,e=!!arguments.length;return new Z((function(o){var d=b(n),r=e?[d.ignoreArgument?void 0:i]:l?[]:[void 0];d.ignoreArgument=!1,o(d.done?{done:!0,value:void 0}:c(t.call(d,Z,r)))}))},return:function(t){var l=this;return new Z((function(i,n){var e=b(l),o=e.iterator;e.done=!0;var d=o.return;if(void 0===d)return i({done:!0,value:t});Z.resolve(d.call(o,t)).then((function(l){c(l),i({done:!0,value:t})}),n)}))},throw:function(t){var l=this;return new Z((function(i,n){var e=b(l),c=e.iterator;e.done=!0;var o=c.throw;if(void 0===o)return n(t);i(o.call(c,t))}))}}),l||d(i.prototype,m,"Generator"),i}},function(t,l,i){"use strict";var n=i(61),e=i(3),c=i(1),o=i(26),d=i(18),r=i(36),a=i(7),u=i(17),Z=u.set,s=u.get,b=a("toStringTag");t.exports=function(t,l){var i=function(t){t.next=e(t.iterator.next),t.done=!1,t.ignoreArg=!l,Z(this,t)};return i.prototype=r(o(n.Iterator.prototype),{next:function(i){var n=s(this),e=arguments.length?[n.ignoreArg?void 0:i]:l?[]:[void 0];n.ignoreArg=!1;var c=n.done?void 0:t.call(n,e);return{done:n.done,value:c}},return:function(t){var l=s(this),i=l.iterator;l.done=!0;var n=i.return;return{done:!0,value:void 0===n?t:c(n.call(i,t)).value}},throw:function(t){var l=s(this),i=l.iterator;l.done=!0;var n=i.throw;if(void 0===n)throw t;return n.call(i,t)}}),l||d(i.prototype,b,"Generator"),i}},function(t,l){t.exports=function(t){return Set.prototype.values.call(t)}},function(t,l,i){var n=i(11),e=i(141);t.exports=e?function(t){return"symbol"==typeof t}:function(t){var l=n("Symbol");return"function"==typeof l&&Object(t)instanceof l}},function(t,l,i){var n=i(146),e=i(112);t.exports=Object.keys||function(t){return n(t,e)}},function(t,l,i){var n=i(4);t.exports=n},function(t,l,i){"use strict";var n=i(121).IteratorPrototype,e=i(26),c=i(38),o=i(34),d=i(75),r=function(){return this};t.exports=function(t,l,i){var a=l+" Iterator";return t.prototype=e(n,{next:c(1,i)}),o(t,a,!1,!0),d[a]=r,t}},function(t,l,i){var n=i(46),e=i(4);t.exports="process"==n(e.process)},function(t,l,i){var n=i(22),e=i(15),c="["+i(93)+"]",o=RegExp("^"+c+c+"*"),d=RegExp(c+c+"*$"),r=function(t){return function(l){var i=e(n(l));return 1&t&&(i=i.replace(o,"")),2&t&&(i=i.replace(d,"")),i}};t.exports={start:r(1),end:r(2),trim:r(3)}},function(t,l,i){"use strict";var n=i(1);t.exports=function(){var t=n(this),l="";return t.global&&(l+="g"),t.ignoreCase&&(l+="i"),t.multiline&&(l+="m"),t.dotAll&&(l+="s"),t.unicode&&(l+="u"),t.sticky&&(l+="y"),l}},function(t,l,i){var n=i(30),e=i(15),c=i(22),o=function(t){return function(l,i){var o,d,r=e(c(l)),a=n(i),u=r.length;return a<0||a>=u?t?"":void 0:(o=r.charCodeAt(a))<55296||o>56319||a+1===u||(d=r.charCodeAt(a+1))<56320||d>57343?t?r.charAt(a):o:t?r.slice(a,a+2):d-56320+(o-55296<<10)+65536}};t.exports={codeAt:o(!1),charAt:o(!0)}},function(t,l,i){var n=i(2),e=i(46),c="".split;t.exports=n((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==e(t)?c.call(t,""):Object(t)}:Object},function(t,l,i){var n=i(5),e=i(83);(t.exports=function(t,l){return e[t]||(e[t]=void 0!==l?l:{})})("versions",[]).push({version:"3.17.2",mode:n?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(t,l){var i=0,n=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++i+n).toString(36)}},function(t,l){t.exports={}},function(t,l,i){var n=i(29),e=i(10),c=i(50),o=function(t){return function(l,i,o){var d,r=n(l),a=e(r.length),u=c(o,a);if(t&&i!=i){for(;a>u;)if((d=r[u++])!=d)return!0}else for(;a>u;u++)if((t||u in r)&&r[u]===i)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,l,i){var n=i(2),e=/#|\.prototype\./,c=function(t,l){var i=d[o(t)];return i==a||i!=r&&("function"==typeof l?n(l):!!l)},o=c.normalize=function(t){return String(t).replace(e,".").toLowerCase()},d=c.data={},r=c.NATIVE="N",a=c.POLYFILL="P";t.exports=c},function(t,l,i){var n=i(197);t.exports=function(t,l){return new(n(t))(0===l?0:l)}},function(t,l,i){var n=i(2),e=i(7),c=i(48),o=e("species");t.exports=function(t){return c>=51||!n((function(){var l=[];return(l.constructor={})[o]=function(){return{foo:1}},1!==l[t](Boolean).foo}))}},function(t,l){t.exports={}},function(t,l,i){var n=i(119),e=i(46),c=i(7)("toStringTag"),o="Arguments"==e(function(){return arguments}());t.exports=n?e:function(t){var l,i,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=function(t,l){try{return t[l]}catch(t){}}(l=Object(t),c))?i:o?e(l):"Object"==(n=e(l))&&"function"==typeof l.callee?"Arguments":n}},function(t,l,i){var n=i(2);t.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,l,i){"use strict";var n=i(3),e=function(t){var l,i;this.promise=new t((function(t,n){if(void 0!==l||void 0!==i)throw TypeError("Bad Promise constructor");l=t,i=n})),this.resolve=n(l),this.reject=n(i)};t.exports.f=function(t){return new e(t)}},function(t,l,i){var n=i(8),e=i(46),c=i(7)("match");t.exports=function(t){var l;return n(t)&&(void 0!==(l=t[c])?!!l:"RegExp"==e(t))}},function(t,l,i){var n=i(30);t.exports=function(t){var l=n(t);if(l<0)throw RangeError("The argument can't be less than 0");return l}},function(t,l,i){"use strict";var n=i(3),e=i(1),c=i(11)("Promise"),o=[].push,d=function(t){var l=0==t,i=1==t,d=2==t,r=3==t;return function(t,a){e(t);var u=n(t.next),Z=l?[]:void 0;return l||n(a),new c((function(n,s){var b=function(l,i){try{var n=t.return;if(void 0!==n)return c.resolve(n.call(t)).then((function(){l(i)}),(function(t){s(t)}))}catch(t){return s(t)}l(i)},m=function(t){b(s,t)},h=function(){try{c.resolve(e(u.call(t))).then((function(t){try{if(e(t).done)n(l?Z:!r&&(d||void 0));else{var u=t.value;l?(o.call(Z,u),h()):c.resolve(a(u)).then((function(t){i?h():d?t?h():b(n,!1):t?b(n,r||u):h()}),m)}}catch(t){m(t)}}),m)}catch(t){m(t)}};h()}))}};t.exports={toArray:d(0),forEach:d(1),every:d(2),some:d(3),find:d(4)}},function(t,l,i){"use strict";var n={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,c=e&&!n.call({1:2},1);l.f=c?function(t){var l=e(this,t);return!!l&&l.enumerable}:n},function(t,l,i){var n=i(4),e=i(108),c=n["__core-js_shared__"]||e("__core-js_shared__",{});t.exports=c},function(t,l,i){var n=i(68),e=i(69),c=n("keys");t.exports=function(t){return c[t]||(c[t]=e(t))}},function(t,l,i){var n=i(1);t.exports=function(t,l,i){var e,c;n(t);try{if(void 0===(e=t.return)){if("throw"===l)throw i;return i}e=e.call(t)}catch(t){c=!0,e=t}if("throw"===l)throw i;if(c)throw e;return n(e),i}},function(t,l,i){var n=i(7)("iterator"),e=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){e=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,l){if(!l&&!e)return!1;var i=!1;try{var c={};c[n]=function(){return{next:function(){return{done:i=!0}}}},t(c)}catch(t){}return i}},function(t,l,i){"use strict";var n=i(29),e=i(35),c=i(75),o=i(17),d=i(120),r=o.set,a=o.getterFor("Array Iterator");t.exports=d(Array,"Array",(function(t,l){r(this,{type:"Array Iterator",target:n(t),index:0,kind:l})}),(function(){var t=a(this),l=t.target,i=t.kind,n=t.index++;return!l||n>=l.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==i?{value:n,done:!1}:"values"==i?{value:l[n],done:!1}:{value:[n,l[n]],done:!1}}),"values"),c.Arguments=c.Array,e("keys"),e("values"),e("entries")},function(t,l,i){var n=i(3),e=i(13),c=i(67),o=i(10),d=function(t){return function(l,i,d,r){n(i);var a=e(l),u=c(a),Z=o(a.length),s=t?Z-1:0,b=t?-1:1;if(d<2)for(;;){if(s in u){r=u[s],s+=b;break}if(s+=b,t?s<0:Z<=s)throw TypeError("Reduce of empty array with no initial value")}for(;t?s>=0:Z>s;s+=b)s in u&&(r=i(r,u[s],s,a));return r}};t.exports={left:d(!1),right:d(!0)}},function(t,l,i){"use strict";var n=i(4),e=i(9),c=i(124),o=i(18),d=i(36),r=i(2),a=i(33),u=i(30),Z=i(10),s=i(158),b=i(241),m=i(27),h=i(42),I=i(49).f,p=i(14).f,G=i(116),y=i(34),g=i(17),X=g.get,V=g.set,W=n.ArrayBuffer,C=W,R=n.DataView,f=R&&R.prototype,S=Object.prototype,v=n.RangeError,K=b.pack,Y=b.unpack,J=function(t){return[255&t]},N=function(t){return[255&t,t>>8&255]},L=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},U=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},H=function(t){return K(t,23,4)},x=function(t){return K(t,52,8)},T=function(t,l){p(t.prototype,l,{get:function(){return X(this)[l]}})},k=function(t,l,i,n){var e=s(i),c=X(t);if(e+l>c.byteLength)throw v("Wrong index");var o=X(c.buffer).bytes,d=e+c.byteOffset,r=o.slice(d,d+l);return n?r:r.reverse()},F=function(t,l,i,n,e,c){var o=s(i),d=X(t);if(o+l>d.byteLength)throw v("Wrong index");for(var r=X(d.buffer).bytes,a=o+d.byteOffset,u=n(+e),Z=0;Z<l;Z++)r[a+Z]=u[c?Z:l-Z-1]};if(c){if(!r((function(){W(1)}))||!r((function(){new W(-1)}))||r((function(){return new W,new W(1.5),new W(NaN),"ArrayBuffer"!=W.name}))){for(var B,z=(C=function(t){return a(this,C),new W(s(t))}).prototype=W.prototype,w=I(W),A=0;w.length>A;)(B=w[A++])in C||o(C,B,W[B]);z.constructor=C}h&&m(f)!==S&&h(f,S);var P=new R(new C(2)),M=f.setInt8;P.setInt8(0,2147483648),P.setInt8(1,2147483649),!P.getInt8(0)&&P.getInt8(1)||d(f,{setInt8:function(t,l){M.call(this,t,l<<24>>24)},setUint8:function(t,l){M.call(this,t,l<<24>>24)}},{unsafe:!0})}else C=function(t){a(this,C,"ArrayBuffer");var l=s(t);V(this,{bytes:G.call(new Array(l),0),byteLength:l}),e||(this.byteLength=l)},R=function(t,l,i){a(this,R,"DataView"),a(t,C,"DataView");var n=X(t).byteLength,c=u(l);if(c<0||c>n)throw v("Wrong offset");if(c+(i=void 0===i?n-c:Z(i))>n)throw v("Wrong length");V(this,{buffer:t,byteLength:i,byteOffset:c}),e||(this.buffer=t,this.byteLength=i,this.byteOffset=c)},e&&(T(C,"byteLength"),T(R,"buffer"),T(R,"byteLength"),T(R,"byteOffset")),d(R.prototype,{getInt8:function(t){return k(this,1,t)[0]<<24>>24},getUint8:function(t){return k(this,1,t)[0]},getInt16:function(t){var l=k(this,2,t,arguments.length>1?arguments[1]:void 0);return(l[1]<<8|l[0])<<16>>16},getUint16:function(t){var l=k(this,2,t,arguments.length>1?arguments[1]:void 0);return l[1]<<8|l[0]},getInt32:function(t){return U(k(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return U(k(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return Y(k(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return Y(k(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,l){F(this,1,t,J,l)},setUint8:function(t,l){F(this,1,t,J,l)},setInt16:function(t,l){F(this,2,t,N,l,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,l){F(this,2,t,N,l,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,l){F(this,4,t,L,l,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,l){F(this,4,t,L,l,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,l){F(this,4,t,H,l,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,l){F(this,8,t,x,l,arguments.length>2?arguments[2]:void 0)}});y(C,"ArrayBuffer"),y(R,"DataView"),t.exports={ArrayBuffer:C,DataView:R}},function(t,l,i){"use strict";var n=i(0),e=i(4),c=i(72),o=i(25),d=i(55),r=i(6),a=i(33),u=i(8),Z=i(2),s=i(86),b=i(34),m=i(91);t.exports=function(t,l,i){var h=-1!==t.indexOf("Map"),I=-1!==t.indexOf("Weak"),p=h?"set":"add",G=e[t],y=G&&G.prototype,g=G,X={},V=function(t){var l=y[t];o(y,t,"add"==t?function(t){return l.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(I&&!u(t))&&l.call(this,0===t?0:t)}:"get"==t?function(t){return I&&!u(t)?void 0:l.call(this,0===t?0:t)}:"has"==t?function(t){return!(I&&!u(t))&&l.call(this,0===t?0:t)}:function(t,i){return l.call(this,0===t?0:t,i),this})};if(c(t,"function"!=typeof G||!(I||y.forEach&&!Z((function(){(new G).entries().next()})))))g=i.getConstructor(l,t,h,p),d.enable();else if(c(t,!0)){var W=new g,C=W[p](I?{}:-0,1)!=W,R=Z((function(){W.has(1)})),f=s((function(t){new G(t)})),S=!I&&Z((function(){for(var t=new G,l=5;l--;)t[p](l,l);return!t.has(-0)}));f||((g=l((function(l,i){a(l,g,t);var n=m(new G,l,g);return null!=i&&r(i,n[p],{that:n,AS_ENTRIES:h}),n}))).prototype=y,y.constructor=g),(R||S)&&(V("delete"),V("has"),h&&V("get")),(S||C)&&V(p),I&&y.clear&&delete y.clear}return X[t]=g,n({global:!0,forced:g!=G},X),b(g,t),I||i.setStrong(g,t,h),g}},function(t,l,i){var n=i(8),e=i(42);t.exports=function(t,l,i){var c,o;return e&&"function"==typeof(c=l.constructor)&&c!==i&&n(o=c.prototype)&&o!==i.prototype&&e(t,o),t}},function(t,l){var i=Math.expm1,n=Math.exp;t.exports=!i||i(10)>22025.465794806718||i(10)<22025.465794806718||-2e-17!=i(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:i},function(t,l){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,l,i){"use strict";var n=i(5),e=i(4),c=i(2),o=i(123);t.exports=n||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete e[t]}}))},function(t,l){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,l,i){var n=i(2),e=i(4).RegExp;l.UNSUPPORTED_Y=n((function(){var t=e("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),l.BROKEN_CARET=n((function(){var t=e("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,l,i){"use strict";var n,e,c=i(15),o=i(65),d=i(96),r=i(68),a=i(26),u=i(17).get,Z=i(177),s=i(178),b=RegExp.prototype.exec,m=r("native-string-replace",String.prototype.replace),h=b,I=(n=/a/,e=/b*/g,b.call(n,"a"),b.call(e,"a"),0!==n.lastIndex||0!==e.lastIndex),p=d.UNSUPPORTED_Y||d.BROKEN_CARET,G=void 0!==/()??/.exec("")[1];(I||G||p||Z||s)&&(h=function(t){var l,i,n,e,d,r,Z,s=this,y=u(s),g=c(t),X=y.raw;if(X)return X.lastIndex=s.lastIndex,l=h.call(X,g),s.lastIndex=X.lastIndex,l;var V=y.groups,W=p&&s.sticky,C=o.call(s),R=s.source,f=0,S=g;if(W&&(-1===(C=C.replace("y","")).indexOf("g")&&(C+="g"),S=g.slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==g.charAt(s.lastIndex-1))&&(R="(?: "+R+")",S=" "+S,f++),i=new RegExp("^(?:"+R+")",C)),G&&(i=new RegExp("^"+R+"$(?!\\s)",C)),I&&(n=s.lastIndex),e=b.call(W?i:s,S),W?e?(e.input=e.input.slice(f),e[0]=e[0].slice(f),e.index=s.lastIndex,s.lastIndex+=e[0].length):s.lastIndex=0:I&&e&&(s.lastIndex=s.global?e.index+e[0].length:n),G&&e&&e.length>1&&m.call(e[0],i,(function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(e[d]=void 0)})),e&&V)for(e.groups=r=a(null),d=0;d<V.length;d++)r[(Z=V[d])[0]]=e[Z[1]];return e}),t.exports=h},function(t,l,i){"use strict";i(132);var n=i(25),e=i(97),c=i(2),o=i(7),d=i(18),r=o("species"),a=RegExp.prototype;t.exports=function(t,l,i,u){var Z=o(t),s=!c((function(){var l={};return l[Z]=function(){return 7},7!=""[t](l)})),b=s&&!c((function(){var l=!1,i=/a/;return"split"===t&&((i={}).constructor={},i.constructor[r]=function(){return i},i.flags="",i[Z]=/./[Z]),i.exec=function(){return l=!0,null},i[Z](""),!l}));if(!s||!b||i){var m=/./[Z],h=l(Z,""[t],(function(t,l,i,n,c){var o=l.exec;return o===e||o===a.exec?s&&!c?{done:!0,value:m.call(l,i,n)}:{done:!0,value:t.call(i,l,n)}:{done:!1}}));n(String.prototype,t,h[0]),n(a,Z,h[1])}u&&d(a[Z],"sham",!0)}},function(t,l,i){"use strict";var n=i(66).charAt;t.exports=function(t,l,i){return l+(i?n(t,l).length:1)}},function(t,l,i){var n=i(46),e=i(97);t.exports=function(t,l){var i=t.exec;if("function"==typeof i){var c=i.call(t,l);if("object"!=typeof c)throw TypeError("RegExp exec method returned something other than an Object or null");return c}if("RegExp"!==n(t))throw TypeError("RegExp#exec called on incompatible receiver");return e.call(t,l)}},function(t,l,i){var n=i(12),e=i(28),c=n.TYPED_ARRAY_CONSTRUCTOR,o=n.aTypedArrayConstructor;t.exports=function(t){return o(e(t,t[c]))}},function(t,l,i){var n=i(3);t.exports=function(t){return null==t?void 0:n(t)}},function(t,l,i){"use strict";var n=i(1),e=i(3);t.exports=function(){for(var t,l=n(this),i=e(l.delete),c=!0,o=0,d=arguments.length;o<d;o++)t=i.call(l,arguments[o]),c=c&&t;return!!c}},function(t,l,i){"use strict";var n=i(3),e=i(19),c=i(6);t.exports=function(t){var l,i,o,d,r=arguments.length,a=r>1?arguments[1]:void 0;return n(this),(l=void 0!==a)&&n(a),null==t?new this:(i=[],l?(o=0,d=e(a,r>2?arguments[2]:void 0,2),c(t,(function(t){i.push(d(t,o++))}))):c(t,i.push,{that:i}),new this(i))}},function(t,l,i){"use strict";t.exports=function(){for(var t=arguments.length,l=new Array(t);t--;)l[t]=arguments[t];return new this(l)}},function(t,l,i){var n=i(8),e=i(59),c=i(142),o=i(7)("toPrimitive");t.exports=function(t,l){if(!n(t)||e(t))return t;var i,d=t[o];if(void 0!==d){if(void 0===l&&(l="default"),i=d.call(t,l),!n(i)||e(i))return i;throw TypeError("Can't convert object to primitive value")}return void 0===l&&(l="number"),c(t,l)}},function(t,l,i){var n=i(48),e=i(2);t.exports=!!Object.getOwnPropertySymbols&&!e((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},function(t,l,i){var n=i(4);t.exports=function(t,l){try{Object.defineProperty(n,t,{value:l,configurable:!0,writable:!0})}catch(i){n[t]=l}return l}},function(t,l,i){var n=i(4),e=i(8),c=n.document,o=e(c)&&e(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,l,i){var n=i(83),e=Function.toString;"function"!=typeof n.inspectSource&&(n.inspectSource=function(t){return e.call(t)}),t.exports=n.inspectSource},function(t,l,i){var n=i(11),e=i(49),c=i(113),o=i(1);t.exports=n("Reflect","ownKeys")||function(t){var l=e.f(o(t)),i=c.f;return i?l.concat(i(t)):l}},function(t,l){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,l){l.f=Object.getOwnPropertySymbols},function(t,l,i){var n=i(9),e=i(14),c=i(1),o=i(60);t.exports=n?Object.defineProperties:function(t,l){c(t);for(var i,n=o(l),d=n.length,r=0;d>r;)e.f(t,i=n[r++],l[i]);return t}},function(t,l,i){var n=i(29),e=i(49).f,c={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return o&&"[object Window]"==c.call(t)?function(t){try{return e(t)}catch(t){return o.slice()}}(t):e(n(t))}},function(t,l,i){"use strict";var n=i(13),e=i(50),c=i(10);t.exports=function(t){for(var l=n(this),i=c(l.length),o=arguments.length,d=e(o>1?arguments[1]:void 0,i),r=o>2?arguments[2]:void 0,a=void 0===r?i:e(r,i);a>d;)l[d++]=t;return l}},function(t,l,i){var n=i(1),e=i(85);t.exports=function(t,l,i,c){try{return c?l(n(i)[0],i[1]):l(i)}catch(l){e(t,"throw",l)}}},function(t,l,i){var n=i(7),e=i(75),c=n("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(e.Array===t||o[c]===t)}},function(t,l,i){var n={};n[i(7)("toStringTag")]="z",t.exports="[object z]"===String(n)},function(t,l,i){"use strict";var n=i(0),e=i(62),c=i(27),o=i(42),d=i(34),r=i(18),a=i(25),u=i(7),Z=i(5),s=i(75),b=i(121),m=b.IteratorPrototype,h=b.BUGGY_SAFARI_ITERATORS,I=u("iterator"),p=function(){return this};t.exports=function(t,l,i,u,b,G,y){e(i,l,u);var g,X,V,W=function(t){if(t===b&&v)return v;if(!h&&t in f)return f[t];switch(t){case"keys":case"values":case"entries":return function(){return new i(this,t)}}return function(){return new i(this)}},C=l+" Iterator",R=!1,f=t.prototype,S=f[I]||f["@@iterator"]||b&&f[b],v=!h&&S||W(b),K="Array"==l&&f.entries||S;if(K&&(g=c(K.call(new t)),m!==Object.prototype&&g.next&&(Z||c(g)===m||(o?o(g,m):"function"!=typeof g[I]&&r(g,I,p)),d(g,C,!0,!0),Z&&(s[C]=p))),"values"==b&&S&&"values"!==S.name&&(R=!0,v=function(){return S.call(this)}),Z&&!y||f[I]===v||r(f,I,v),s[l]=v,b)if(X={values:W("values"),keys:G?v:W("keys"),entries:W("entries")},y)for(V in X)(h||R||!(V in f))&&a(f,V,X[V]);else n({target:l,proto:!0,forced:h||R},X);return X}},function(t,l,i){"use strict";var n,e,c,o=i(2),d=i(27),r=i(18),a=i(16),u=i(7),Z=i(5),s=u("iterator"),b=!1;[].keys&&("next"in(c=[].keys())?(e=d(d(c)))!==Object.prototype&&(n=e):b=!0);var m=null==n||o((function(){var t={};return n[s].call(t)!==t}));m&&(n={}),Z&&!m||a(n,s)||r(n,s,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:b}},function(t,l,i){var n=i(2);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,l,i){var n=i(39).match(/AppleWebKit\/(\d+)\./);t.exports=!!n&&+n[1]},function(t,l){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,l,i){var n=i(10),e=i(15),c=i(126),o=i(22),d=Math.ceil,r=function(t){return function(l,i,r){var a,u,Z=e(o(l)),s=Z.length,b=void 0===r?" ":e(r),m=n(i);return m<=s||""==b?Z:(a=m-s,(u=c.call(b,d(a/b.length))).length>a&&(u=u.slice(0,a)),t?Z+u:u+Z)}};t.exports={start:r(!1),end:r(!0)}},function(t,l,i){"use strict";var n=i(30),e=i(15),c=i(22);t.exports=function(t){var l=e(c(this)),i="",o=n(t);if(o<0||o==1/0)throw RangeError("Wrong number of repetitions");for(;o>0;(o>>>=1)&&(l+=l))1&o&&(i+=l);return i}},function(t,l,i){"use strict";var n=i(90),e=i(161);t.exports=n("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),e)},function(t,l){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,l,i){var n=i(8),e=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&e(t)===t}},function(t,l,i){var n=i(4),e=i(15),c=i(64).trim,o=i(93),d=n.parseInt,r=/^[+-]?0[Xx]/,a=8!==d(o+"08")||22!==d(o+"0x16");t.exports=a?function(t,l){var i=c(e(t));return d(i,l>>>0||(r.test(i)?16:10))}:d},function(t,l,i){var n,e,c,o,d=i(4),r=i(2),a=i(19),u=i(147),Z=i(109),s=i(171),b=i(63),m=d.setImmediate,h=d.clearImmediate,I=d.process,p=d.MessageChannel,G=d.Dispatch,y=0,g={};try{n=d.location}catch(t){}var X=function(t){if(g.hasOwnProperty(t)){var l=g[t];delete g[t],l()}},V=function(t){return function(){X(t)}},W=function(t){X(t.data)},C=function(t){d.postMessage(String(t),n.protocol+"//"+n.host)};m&&h||(m=function(t){for(var l=[],i=arguments.length,n=1;i>n;)l.push(arguments[n++]);return g[++y]=function(){("function"==typeof t?t:Function(t)).apply(void 0,l)},e(y),y},h=function(t){delete g[t]},b?e=function(t){I.nextTick(V(t))}:G&&G.now?e=function(t){G.now(V(t))}:p&&!s?(o=(c=new p).port2,c.port1.onmessage=W,e=a(o.postMessage,o,1)):d.addEventListener&&"function"==typeof postMessage&&!d.importScripts&&n&&"file:"!==n.protocol&&!r(C)?(e=C,d.addEventListener("message",W,!1)):e="onreadystatechange"in Z("script")?function(t){u.appendChild(Z("script")).onreadystatechange=function(){u.removeChild(this),X(t)}}:function(t){setTimeout(V(t),0)}),t.exports={set:m,clear:h}},function(t,l,i){"use strict";var n=i(0),e=i(97);n({target:"RegExp",proto:!0,forced:/./.exec!==e},{exec:e})},function(t,l,i){var n=i(79);t.exports=function(t){if(n(t))throw TypeError("The method doesn't accept regular expressions");return t}},function(t,l,i){var n=i(7)("match");t.exports=function(t){var l=/./;try{"/./"[t](l)}catch(i){try{return l[n]=!1,"/./"[t](l)}catch(t){}}return!1}},function(t,l,i){var n=i(2),e=i(93);t.exports=function(t){return n((function(){return!!e[t]()||"
"!="
"[t]()||e[t].name!==t}))}},function(t,l,i){var n=i(4),e=i(2),c=i(86),o=i(12).NATIVE_ARRAY_BUFFER_VIEWS,d=n.ArrayBuffer,r=n.Int8Array;t.exports=!o||!e((function(){r(1)}))||!e((function(){new r(-1)}))||!c((function(t){new r,new r(null),new r(1.5),new r(t)}),!0)||e((function(){return 1!==new r(new d(2),1,void 0).length}))},function(t,l,i){"use strict";var n,e=i(4),c=i(36),o=i(55),d=i(90),r=i(186),a=i(8),u=i(17).enforce,Z=i(144),s=!e.ActiveXObject&&"ActiveXObject"in e,b=Object.isExtensible,m=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},h=t.exports=d("WeakMap",m,r);if(Z&&s){n=r.getConstructor(m,"WeakMap",!0),o.enable();var I=h.prototype,p=I.delete,G=I.has,y=I.get,g=I.set;c(I,{delete:function(t){if(a(t)&&!b(t)){var l=u(this);return l.frozen||(l.frozen=new n),p.call(this,t)||l.frozen.delete(t)}return p.call(this,t)},has:function(t){if(a(t)&&!b(t)){var l=u(this);return l.frozen||(l.frozen=new n),G.call(this,t)||l.frozen.has(t)}return G.call(this,t)},get:function(t){if(a(t)&&!b(t)){var l=u(this);return l.frozen||(l.frozen=new n),G.call(this,t)?y.call(this,t):l.frozen.get(t)}return y.call(this,t)},set:function(t,l){if(a(t)&&!b(t)){var i=u(this);i.frozen||(i.frozen=new n),G.call(this,t)?g.call(this,t,l):i.frozen.set(t,l)}else g.call(this,t,l);return this}})}},function(t,l,i){"use strict";var n=i(1);t.exports=function(t,l){var i,e=n(this),c=arguments.length>2?arguments[2]:void 0;if("function"!=typeof l&&"function"!=typeof c)throw TypeError("At least one callback required");return e.has(t)?(i=e.get(t),"function"==typeof l&&(i=l(i),e.set(t,i))):"function"==typeof c&&(i=c(),e.set(t,i)),i}},function(t,l,i){"use strict";var n=i(17),e=i(62),c=i(16),o=i(60),d=i(13),r=n.set,a=n.getterFor("Object Iterator");t.exports=e((function(t,l){var i=d(t);r(this,{type:"Object Iterator",mode:l,object:i,keys:o(i),index:0})}),"Object",(function(){for(var t=a(this),l=t.keys;;){if(null===l||t.index>=l.length)return t.object=t.keys=null,{value:void 0,done:!0};var i=l[t.index++],n=t.object;if(c(n,i)){switch(t.mode){case"keys":return{value:i,done:!1};case"values":return{value:n[i],done:!1}}return{value:[i,n[i]],done:!1}}}}))},function(t,l){var i;i=function(){return this}();try{i=i||new Function("return this")()}catch(t){"object"==typeof window&&(i=window)}t.exports=i},function(t,l,i){var n=i(107);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,l,i){var n=i(8);t.exports=function(t,l){var i,e;if("string"===l&&"function"==typeof(i=t.toString)&&!n(e=i.call(t)))return e;if("function"==typeof(i=t.valueOf)&&!n(e=i.call(t)))return e;if("string"!==l&&"function"==typeof(i=t.toString)&&!n(e=i.call(t)))return e;throw TypeError("Can't convert object to primitive value")}},function(t,l,i){var n=i(9),e=i(2),c=i(109);t.exports=!n&&!e((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,l,i){var n=i(4),e=i(110),c=n.WeakMap;t.exports="function"==typeof c&&/native code/.test(e(c))},function(t,l,i){var n=i(16),e=i(111),c=i(24),o=i(14);t.exports=function(t,l){for(var i=e(l),d=o.f,r=c.f,a=0;a<i.length;a++){var u=i[a];n(t,u)||d(t,u,r(l,u))}}},function(t,l,i){var n=i(16),e=i(29),c=i(71).indexOf,o=i(70);t.exports=function(t,l){var i,d=e(t),r=0,a=[];for(i in d)!n(o,i)&&n(d,i)&&a.push(i);for(;l.length>r;)n(d,i=l[r++])&&(~c(a,i)||a.push(i));return a}},function(t,l,i){var n=i(11);t.exports=n("document","documentElement")},function(t,l,i){var n=i(7);l.f=n},function(t,l,i){"use strict";var n=i(13),e=i(50),c=i(10),o=Math.min;t.exports=[].copyWithin||function(t,l){var i=n(this),d=c(i.length),r=e(t,d),a=e(l,d),u=arguments.length>2?arguments[2]:void 0,Z=o((void 0===u?d:e(u,d))-a,d-r),s=1;for(a<r&&r<a+Z&&(s=-1,a+=Z-1,r+=Z-1);Z-- >0;)a in i?i[r]=i[a]:delete i[r],r+=s,a+=s;return i}},function(t,l,i){"use strict";var n=i(51),e=i(10),c=i(19),o=function(t,l,i,d,r,a,u,Z){for(var s,b=r,m=0,h=!!u&&c(u,Z,3);m<d;){if(m in i){if(s=h?h(i[m],m,l):i[m],a>0&&n(s))b=o(t,l,s,e(s.length),b,a-1)-1;else{if(b>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[b]=s}b++}m++}return b};t.exports=o},function(t,l,i){"use strict";var n=i(23).forEach,e=i(40)("forEach");t.exports=e?[].forEach:function(t){return n(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,l,i){"use strict";var n=i(19),e=i(13),c=i(117),o=i(118),d=i(10),r=i(53),a=i(41),u=i(52);t.exports=function(t){var l,i,Z,s,b,m,h=e(t),I="function"==typeof this?this:Array,p=arguments.length,G=p>1?arguments[1]:void 0,y=void 0!==G,g=u(h),X=0;if(y&&(G=n(G,p>2?arguments[2]:void 0,2)),null==g||I==Array&&o(g))for(i=new I(l=d(h.length));l>X;X++)m=y?G(h[X],X):h[X],r(i,X,m);else for(b=(s=a(h,g)).next,i=new I;!(Z=b.call(s)).done;X++)m=y?c(s,G,[Z.value,X],!0):Z.value,r(i,X,m);return i.length=X,i}},function(t,l,i){var n=i(8);t.exports=function(t){if(!n(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,l,i){"use strict";var n=i(29),e=i(30),c=i(10),o=i(40),d=Math.min,r=[].lastIndexOf,a=!!r&&1/[1].lastIndexOf(1,-0)<0,u=o("lastIndexOf"),Z=a||!u;t.exports=Z?function(t){if(a)return r.apply(this,arguments)||0;var l=n(this),i=c(l.length),o=i-1;for(arguments.length>1&&(o=d(o,e(arguments[1]))),o<0&&(o=i+o);o>=0;o--)if(o in l&&l[o]===t)return o||0;return-1}:r},function(t,l){var i=Math.floor,n=function(t,l){var o=t.length,d=i(o/2);return o<8?e(t,l):c(n(t.slice(0,d),l),n(t.slice(d),l),l)},e=function(t,l){for(var i,n,e=t.length,c=1;c<e;){for(n=c,i=t[c];n&&l(t[n-1],i)>0;)t[n]=t[--n];n!==c++&&(t[n]=i)}return t},c=function(t,l,i){for(var n=t.length,e=l.length,c=0,o=0,d=[];c<n||o<e;)c<n&&o<e?d.push(i(t[c],l[o])<=0?t[c++]:l[o++]):d.push(c<n?t[c++]:l[o++]);return d};t.exports=n},function(t,l,i){var n=i(39).match(/firefox\/(\d+)/i);t.exports=!!n&&+n[1]},function(t,l,i){var n=i(39);t.exports=/MSIE|Trident/.test(n)},function(t,l,i){var n=i(30),e=i(10);t.exports=function(t){if(void 0===t)return 0;var l=n(t),i=e(l);if(l!==i)throw RangeError("Wrong length or index");return i}},function(t,l,i){"use strict";var n=i(3),e=i(8),c=[].slice,o={},d=function(t,l,i){if(!(l in o)){for(var n=[],e=0;e<l;e++)n[e]="a["+e+"]";o[l]=Function("C,a","return new C("+n.join(",")+")")}return o[l](t,i)};t.exports=Function.bind||function(t){var l=n(this),i=c.call(arguments,1),o=function(){var n=i.concat(c.call(arguments));return this instanceof o?d(l,n.length,n):l.apply(t,n)};return e(l.prototype)&&(o.prototype=l.prototype),o}},function(t,l,i){i(0)({global:!0},{globalThis:i(4)})},function(t,l,i){"use strict";var n=i(14).f,e=i(26),c=i(36),o=i(19),d=i(33),r=i(6),a=i(120),u=i(54),Z=i(9),s=i(55).fastKey,b=i(17),m=b.set,h=b.getterFor;t.exports={getConstructor:function(t,l,i,a){var u=t((function(t,n){d(t,u,l),m(t,{type:l,index:e(null),first:void 0,last:void 0,size:0}),Z||(t.size=0),null!=n&&r(n,t[a],{that:t,AS_ENTRIES:i})})),b=h(l),I=function(t,l,i){var n,e,c=b(t),o=p(t,l);return o?o.value=i:(c.last=o={index:e=s(l,!0),key:l,value:i,previous:n=c.last,next:void 0,removed:!1},c.first||(c.first=o),n&&(n.next=o),Z?c.size++:t.size++,"F"!==e&&(c.index[e]=o)),t},p=function(t,l){var i,n=b(t),e=s(l);if("F"!==e)return n.index[e];for(i=n.first;i;i=i.next)if(i.key==l)return i};return c(u.prototype,{clear:function(){for(var t=b(this),l=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete l[i.index],i=i.next;t.first=t.last=void 0,Z?t.size=0:this.size=0},delete:function(t){var l=b(this),i=p(this,t);if(i){var n=i.next,e=i.previous;delete l.index[i.index],i.removed=!0,e&&(e.next=n),n&&(n.previous=e),l.first==i&&(l.first=n),l.last==i&&(l.last=e),Z?l.size--:this.size--}return!!i},forEach:function(t){for(var l,i=b(this),n=o(t,arguments.length>1?arguments[1]:void 0,3);l=l?l.next:i.first;)for(n(l.value,l.key,this);l&&l.removed;)l=l.previous},has:function(t){return!!p(this,t)}}),c(u.prototype,i?{get:function(t){var l=p(this,t);return l&&l.value},set:function(t,l){return I(this,0===t?0:t,l)}}:{add:function(t){return I(this,t=0===t?0:t,t)}}),Z&&n(u.prototype,"size",{get:function(){return b(this).size}}),u},setStrong:function(t,l,i){var n=l+" Iterator",e=h(l),c=h(n);a(t,l,(function(t,l){m(this,{type:n,target:t,state:e(t),kind:l,last:void 0})}),(function(){for(var t=c(this),l=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?"keys"==l?{value:i.key,done:!1}:"values"==l?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?"entries":"values",!i,!0),u(l)}}},function(t,l){var i=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:i(1+t)}},function(t,l,i){var n=i(128),e=Math.abs,c=Math.pow,o=c(2,-52),d=c(2,-23),r=c(2,127)*(2-d),a=c(2,-126);t.exports=Math.fround||function(t){var l,i,c=e(t),u=n(t);return c<a?u*(c/a/d+1/o-1/o)*a*d:(i=(l=(1+d/o)*c)-(l-c))>r||i!=i?u*(1/0):u*i}},function(t,l,i){var n=i(4).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&n(t)}},function(t,l,i){var n=i(4),e=i(15),c=i(64).trim,o=i(93),d=n.parseFloat,r=1/d(o+"-0")!=-1/0;t.exports=r?function(t){var l=c(e(t)),i=d(l);return 0===i&&"-"==l.charAt(0)?-0:i}:d},function(t,l){var i=1..valueOf;t.exports=function(t){return i.call(t)}},function(t,l,i){"use strict";var n=i(9),e=i(2),c=i(60),o=i(113),d=i(82),r=i(13),a=i(67),u=Object.assign,Z=Object.defineProperty;t.exports=!u||e((function(){if(n&&1!==u({b:1},u(Z({},"a",{enumerable:!0,get:function(){Z(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},l={},i=Symbol();return t[i]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){l[t]=t})),7!=u({},t)[i]||"abcdefghijklmnopqrst"!=c(u({},l)).join("")}))?function(t,l){for(var i=r(t),e=arguments.length,u=1,Z=o.f,s=d.f;e>u;)for(var b,m=a(arguments[u++]),h=Z?c(m).concat(Z(m)):c(m),I=h.length,p=0;I>p;)b=h[p++],n&&!s.call(m,b)||(i[b]=m[b]);return i}:u},function(t,l,i){var n=i(9),e=i(60),c=i(29),o=i(82).f,d=function(t){return function(l){for(var i,d=c(l),r=e(d),a=r.length,u=0,Z=[];a>u;)i=r[u++],n&&!o.call(d,i)||Z.push(t?[i,d[i]]:d[i]);return Z}};t.exports={entries:d(!0),values:d(!1)}},function(t,l){t.exports=Object.is||function(t,l){return t===l?0!==t||1/t==1/l:t!=t&&l!=l}},function(t,l,i){var n=i(4);t.exports=n.Promise},function(t,l,i){var n=i(39);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},function(t,l,i){var n,e,c,o,d,r,a,u,Z=i(4),s=i(24).f,b=i(131).set,m=i(171),h=i(316),I=i(317),p=i(63),G=Z.MutationObserver||Z.WebKitMutationObserver,y=Z.document,g=Z.process,X=Z.Promise,V=s(Z,"queueMicrotask"),W=V&&V.value;W||(n=function(){var t,l;for(p&&(t=g.domain)&&t.exit();e;){l=e.fn,e=e.next;try{l()}catch(t){throw e?o():c=void 0,t}}c=void 0,t&&t.enter()},m||p||I||!G||!y?!h&&X&&X.resolve?((a=X.resolve(void 0)).constructor=X,u=a.then,o=function(){u.call(a,n)}):o=p?function(){g.nextTick(n)}:function(){b.call(Z,n)}:(d=!0,r=y.createTextNode(""),new G(n).observe(r,{characterData:!0}),o=function(){r.data=d=!d})),t.exports=W||function(t){var l={fn:t,next:void 0};c&&(c.next=l),e||(e=l,o()),c=l}},function(t,l,i){var n=i(1),e=i(8),c=i(78);t.exports=function(t,l){if(n(t),e(l)&&l.constructor===t)return l;var i=c.f(t);return(0,i.resolve)(l),i.promise}},function(t,l,i){var n=i(4);t.exports=function(t,l){var i=n.console;i&&i.error&&(1===arguments.length?i.error(t):i.error(t,l))}},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(78),o=i(95),d=i(6);n({target:"Promise",stat:!0},{allSettled:function(t){var l=this,i=c.f(l),n=i.resolve,r=i.reject,a=o((function(){var i=e(l.resolve),c=[],o=0,r=1;d(t,(function(t){var e=o++,d=!1;c.push(void 0),r++,i.call(l,t).then((function(t){d||(d=!0,c[e]={status:"fulfilled",value:t},--r||n(c))}),(function(t){d||(d=!0,c[e]={status:"rejected",reason:t},--r||n(c))}))})),--r||n(c)}));return a.error&&r(a.value),i.promise}})},function(t,l,i){var n=i(16);t.exports=function(t){return void 0!==t&&(n(t,"value")||n(t,"writable"))}},function(t,l,i){var n=i(2),e=i(4).RegExp;t.exports=n((function(){var t=e(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,l,i){var n=i(2),e=i(4).RegExp;t.exports=n((function(){var t=e("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,l,i){"use strict";var n=i(90),e=i(161);t.exports=n("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),e)},function(t,l,i){"use strict";var n=i(66).charAt,e=i(15),c=i(17),o=i(120),d=c.set,r=c.getterFor("String Iterator");o(String,"String",(function(t){d(this,{type:"String Iterator",string:e(t),index:0})}),(function(){var t,l=r(this),i=l.string,e=l.index;return e>=i.length?{value:void 0,done:!0}:(t=n(i,e),l.index+=t.length,{value:t,done:!1})}))},function(t,l,i){"use strict";var n=i(0),e=i(62),c=i(22),o=i(10),d=i(15),r=i(3),a=i(1),u=i(46),Z=i(79),s=i(65),b=i(18),m=i(2),h=i(7),I=i(28),p=i(99),G=i(17),y=i(5),g=h("matchAll"),X=G.set,V=G.getterFor("RegExp String Iterator"),W=RegExp.prototype,C=W.exec,R="".matchAll,f=!!R&&!m((function(){"a".matchAll(/./)})),S=e((function(t,l,i,n){X(this,{type:"RegExp String Iterator",regexp:t,string:l,global:i,unicode:n,done:!1})}),"RegExp String",(function(){var t=V(this);if(t.done)return{value:void 0,done:!0};var l=t.regexp,i=t.string,n=function(t,l){var i,n=t.exec;if("function"==typeof n){if("object"!=typeof(i=n.call(t,l)))throw TypeError("Incorrect exec result");return i}return C.call(t,l)}(l,i);return null===n?{value:void 0,done:t.done=!0}:t.global?(""===d(n[0])&&(l.lastIndex=p(i,o(l.lastIndex),t.unicode)),{value:n,done:!1}):(t.done=!0,{value:n,done:!1})})),v=function(t){var l,i,n,e,c,r,u=a(this),Z=d(t);return l=I(u,RegExp),void 0===(i=u.flags)&&u instanceof RegExp&&!("flags"in W)&&(i=s.call(u)),n=void 0===i?"":d(i),e=new l(l===RegExp?u.source:u,n),c=!!~n.indexOf("g"),r=!!~n.indexOf("u"),e.lastIndex=o(u.lastIndex),new S(e,Z,c,r)};n({target:"String",proto:!0,forced:f},{matchAll:function(t){var l,i,n,e=c(this);if(null!=t){if(Z(t)&&!~d(c("flags"in W?t.flags:s.call(t))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(f)return R.apply(e,arguments);if(void 0===(i=t[g])&&y&&"RegExp"==u(t)&&(i=v),null!=i)return r(i).call(t,e)}else if(f)return R.apply(e,arguments);return l=d(e),n=new RegExp(t,"g"),y?v.call(n,l):n[g](l)}}),y||g in W||b(W,g,v)},function(t,l,i){var n=i(39);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(n)},function(t,l,i){var n=i(13),e=Math.floor,c="".replace,o=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,d=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,l,i,r,a,u){var Z=i+t.length,s=r.length,b=d;return void 0!==a&&(a=n(a),b=o),c.call(u,b,(function(n,c){var o;switch(c.charAt(0)){case"$":return"$";case"&":return t;case"`":return l.slice(0,i);case"'":return l.slice(Z);case"<":o=a[c.slice(1,-1)];break;default:var d=+c;if(0===d)return n;if(d>s){var u=e(d/10);return 0===u?n:u<=s?void 0===r[u-1]?c.charAt(1):r[u-1]+c.charAt(1):n}o=r[d-1]}return void 0===o?"":o}))}},function(t,l,i){var n=i(80);t.exports=function(t,l){var i=n(t);if(i%l)throw RangeError("Wrong offset");return i}},function(t,l,i){var n=i(13),e=i(10),c=i(41),o=i(52),d=i(118),r=i(19),a=i(12).aTypedArrayConstructor;t.exports=function(t){var l,i,u,Z,s,b,m=n(t),h=arguments.length,I=h>1?arguments[1]:void 0,p=void 0!==I,G=o(m);if(null!=G&&!d(G))for(b=(s=c(m,G)).next,m=[];!(Z=b.call(s)).done;)m.push(Z.value);for(p&&h>2&&(I=r(I,arguments[2],2)),i=e(m.length),u=new(a(this))(i),l=0;i>l;l++)u[l]=p?I(m[l],l):m[l];return u}},function(t,l,i){"use strict";var n=i(36),e=i(55).getWeakData,c=i(1),o=i(8),d=i(33),r=i(6),a=i(23),u=i(16),Z=i(17),s=Z.set,b=Z.getterFor,m=a.find,h=a.findIndex,I=0,p=function(t){return t.frozen||(t.frozen=new G)},G=function(){this.entries=[]},y=function(t,l){return m(t.entries,(function(t){return t[0]===l}))};G.prototype={get:function(t){var l=y(this,t);if(l)return l[1]},has:function(t){return!!y(this,t)},set:function(t,l){var i=y(this,t);i?i[1]=l:this.entries.push([t,l])},delete:function(t){var l=h(this.entries,(function(l){return l[0]===t}));return~l&&this.entries.splice(l,1),!!~l}},t.exports={getConstructor:function(t,l,i,a){var Z=t((function(t,n){d(t,Z,l),s(t,{type:l,id:I++,frozen:void 0}),null!=n&&r(n,t[a],{that:t,AS_ENTRIES:i})})),m=b(l),h=function(t,l,i){var n=m(t),o=e(c(l),!0);return!0===o?p(n).set(l,i):o[n.id]=i,t};return n(Z.prototype,{delete:function(t){var l=m(this);if(!o(t))return!1;var i=e(t);return!0===i?p(l).delete(t):i&&u(i,l.id)&&delete i[l.id]},has:function(t){var l=m(this);if(!o(t))return!1;var i=e(t);return!0===i?p(l).has(t):i&&u(i,l.id)}}),n(Z.prototype,i?{get:function(t){var l=m(this);if(o(t)){var i=e(t);return!0===i?p(l).get(t):i?i[l.id]:void 0}},set:function(t,l){return h(this,t,l)}}:{add:function(t){return h(this,t,!0)}}),Z}}},function(t,l,i){var n=i(188),e=i(3),c=i(1),o=i(41),d=i(102),r=i(7)("asyncIterator");t.exports=function(t,l){var i=arguments.length<2?d(t[r]):l;return void 0===i?new n(o(t)):c(e(i).call(t))}},function(t,l,i){"use strict";var n=i(61),e=i(1),c=i(26),o=i(102),d=i(36),r=i(17),a=i(11)("Promise"),u=r.set,Z=r.get,s=function(t,l,i){var n=t.done;a.resolve(t.value).then((function(t){l({done:n,value:t})}),i)},b=function(t){u(this,{iterator:e(t),next:t.next})};b.prototype=d(c(n.AsyncIterator.prototype),{next:function(t){var l=Z(this),i=!!arguments.length;return new a((function(n,c){var o=e(l.next.apply(l.iterator,i?[t]:[]));s(o,n,c)}))},return:function(t){var l=Z(this).iterator,i=!!arguments.length;return new a((function(n,c){var d=o(l.return);if(void 0===d)return n({done:!0,value:t});var r=e(d.apply(l,i?[t]:[]));s(r,n,c)}))},throw:function(t){var l=Z(this).iterator,i=!!arguments.length;return new a((function(n,c){var d=o(l.throw);if(void 0===d)return c(t);var r=e(d.apply(l,i?[t]:[]));s(r,n,c)}))}}),t.exports=b},function(t,l,i){var n=i(127),e=i(137),c=i(26),o=i(8),d=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};d.prototype.get=function(t,l){return this[t]||(this[t]=l())},d.prototype.next=function(t,l,i){var c=i?this.objectsByIndex[t]||(this.objectsByIndex[t]=new e):this.primitives||(this.primitives=new n),o=c.get(l);return o||c.set(l,o=new d),o};var r=new d;t.exports=function(){var t,l,i=r,n=arguments.length;for(t=0;t<n;t++)o(l=arguments[t])&&(i=i.next(t,l,!0));if(this===Object&&i===r)throw TypeError("Composite keys must contain a non-primitive component");for(t=0;t<n;t++)o(l=arguments[t])||(i=i.next(t,l,!1));return i}},function(t,l){t.exports=Math.scale||function(t,l,i,n,e){return 0===arguments.length||t!=t||l!=l||i!=i||n!=n||e!=e?NaN:t===1/0||t===-1/0?t:(t-l)*(e-n)/(i-l)+n}},function(t,l,i){"use strict";var n=i(1),e=i(3);t.exports=function(){for(var t=n(this),l=e(t.add),i=0,c=arguments.length;i<c;i++)l.call(t,arguments[i]);return t}},function(t,l){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,l,i){var n=i(2),e=i(7),c=i(5),o=e("iterator");t.exports=!n((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),l=t.searchParams,i="";return t.pathname="c%20d",l.forEach((function(t,n){l.delete("b"),i+=n+t})),c&&!t.toJSON||!l.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==l.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!l[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==i||"x"!==new URL("http://x",void 0).host}))},function(t,l,i){"use strict";i(87);var n=i(0),e=i(11),c=i(193),o=i(25),d=i(36),r=i(34),a=i(62),u=i(17),Z=i(33),s=i(16),b=i(19),m=i(76),h=i(1),I=i(8),p=i(15),G=i(26),y=i(38),g=i(41),X=i(52),V=i(7),W=e("fetch"),C=e("Request"),R=C&&C.prototype,f=e("Headers"),S=V("iterator"),v=u.set,K=u.getterFor("URLSearchParams"),Y=u.getterFor("URLSearchParamsIterator"),J=/\+/g,N=Array(4),L=function(t){return N[t-1]||(N[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},U=function(t){try{return decodeURIComponent(t)}catch(l){return t}},H=function(t){var l=t.replace(J," "),i=4;try{return decodeURIComponent(l)}catch(t){for(;i;)l=l.replace(L(i--),U);return l}},x=/[!'()~]|%20/g,T={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},k=function(t){return T[t]},F=function(t){return encodeURIComponent(t).replace(x,k)},B=function(t,l){if(l)for(var i,n,e=l.split("&"),c=0;c<e.length;)(i=e[c++]).length&&(n=i.split("="),t.push({key:H(n.shift()),value:H(n.join("="))}))},z=function(t){this.entries.length=0,B(this.entries,t)},w=function(t,l){if(t<l)throw TypeError("Not enough arguments")},A=a((function(t,l){v(this,{type:"URLSearchParamsIterator",iterator:g(K(t).entries),kind:l})}),"Iterator",(function(){var t=Y(this),l=t.kind,i=t.iterator.next(),n=i.value;return i.done||(i.value="keys"===l?n.key:"values"===l?n.value:[n.key,n.value]),i})),P=function(){Z(this,P,"URLSearchParams");var t,l,i,n,e,c,o,d,r,a=arguments.length>0?arguments[0]:void 0,u=this,b=[];if(v(u,{type:"URLSearchParams",entries:b,updateURL:function(){},updateSearchParams:z}),void 0!==a)if(I(a))if("function"==typeof(t=X(a)))for(i=(l=g(a,t)).next;!(n=i.call(l)).done;){if((o=(c=(e=g(h(n.value))).next).call(e)).done||(d=c.call(e)).done||!c.call(e).done)throw TypeError("Expected sequence with length 2");b.push({key:p(o.value),value:p(d.value)})}else for(r in a)s(a,r)&&b.push({key:r,value:p(a[r])});else B(b,"string"==typeof a?"?"===a.charAt(0)?a.slice(1):a:p(a))},M=P.prototype;if(d(M,{append:function(t,l){w(arguments.length,2);var i=K(this);i.entries.push({key:p(t),value:p(l)}),i.updateURL()},delete:function(t){w(arguments.length,1);for(var l=K(this),i=l.entries,n=p(t),e=0;e<i.length;)i[e].key===n?i.splice(e,1):e++;l.updateURL()},get:function(t){w(arguments.length,1);for(var l=K(this).entries,i=p(t),n=0;n<l.length;n++)if(l[n].key===i)return l[n].value;return null},getAll:function(t){w(arguments.length,1);for(var l=K(this).entries,i=p(t),n=[],e=0;e<l.length;e++)l[e].key===i&&n.push(l[e].value);return n},has:function(t){w(arguments.length,1);for(var l=K(this).entries,i=p(t),n=0;n<l.length;)if(l[n++].key===i)return!0;return!1},set:function(t,l){w(arguments.length,1);for(var i,n=K(this),e=n.entries,c=!1,o=p(t),d=p(l),r=0;r<e.length;r++)(i=e[r]).key===o&&(c?e.splice(r--,1):(c=!0,i.value=d));c||e.push({key:o,value:d}),n.updateURL()},sort:function(){var t,l,i,n=K(this),e=n.entries,c=e.slice();for(e.length=0,i=0;i<c.length;i++){for(t=c[i],l=0;l<i;l++)if(e[l].key>t.key){e.splice(l,0,t);break}l===i&&e.push(t)}n.updateURL()},forEach:function(t){for(var l,i=K(this).entries,n=b(t,arguments.length>1?arguments[1]:void 0,3),e=0;e<i.length;)n((l=i[e++]).value,l.key,this)},keys:function(){return new A(this,"keys")},values:function(){return new A(this,"values")},entries:function(){return new A(this,"entries")}},{enumerable:!0}),o(M,S,M.entries),o(M,"toString",(function(){for(var t,l=K(this).entries,i=[],n=0;n<l.length;)t=l[n++],i.push(F(t.key)+"="+F(t.value));return i.join("&")}),{enumerable:!0}),r(P,"URLSearchParams"),n({global:!0,forced:!c},{URLSearchParams:P}),!c&&"function"==typeof f){var j=function(t){if(I(t)){var l,i=t.body;if("URLSearchParams"===m(i))return(l=t.headers?new f(t.headers):new f).has("content-type")||l.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),G(t,{body:y(0,String(i)),headers:y(0,l)})}return t};if("function"==typeof W&&n({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return W(t,arguments.length>1?j(arguments[1]):{})}}),"function"==typeof C){var Q=function(t){return Z(this,Q,"Request"),new C(t,arguments.length>1?j(arguments[1]):{})};R.constructor=Q,Q.prototype=R,n({global:!0,forced:!0},{Request:Q})}}t.exports={URLSearchParams:P,getState:K}},function(t,i){t.exports=l},function(t,l,i){"use strict";var n=i(0),e=i(4),c=i(11),o=i(5),d=i(9),r=i(107),a=i(2),u=i(16),Z=i(51),s=i(8),b=i(59),m=i(1),h=i(13),I=i(29),p=i(47),G=i(15),y=i(38),g=i(26),X=i(60),V=i(49),W=i(115),C=i(113),R=i(24),f=i(14),S=i(82),v=i(18),K=i(25),Y=i(68),J=i(84),N=i(70),L=i(69),U=i(7),H=i(148),x=i(21),T=i(34),k=i(17),F=i(23).forEach,B=J("hidden"),z=U("toPrimitive"),w=k.set,A=k.getterFor("Symbol"),P=Object.prototype,M=e.Symbol,j=c("JSON","stringify"),Q=R.f,E=f.f,D=W.f,O=S.f,q=Y("symbols"),_=Y("op-symbols"),$=Y("string-to-symbol-registry"),tt=Y("symbol-to-string-registry"),lt=Y("wks"),it=e.QObject,nt=!it||!it.prototype||!it.prototype.findChild,et=d&&a((function(){return 7!=g(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,l,i){var n=Q(P,l);n&&delete P[l],E(t,l,i),n&&t!==P&&E(P,l,n)}:E,ct=function(t,l){var i=q[t]=g(M.prototype);return w(i,{type:"Symbol",tag:t,description:l}),d||(i.description=l),i},ot=function(t,l,i){t===P&&ot(_,l,i),m(t);var n=p(l);return m(i),u(q,n)?(i.enumerable?(u(t,B)&&t[B][n]&&(t[B][n]=!1),i=g(i,{enumerable:y(0,!1)})):(u(t,B)||E(t,B,y(1,{})),t[B][n]=!0),et(t,n,i)):E(t,n,i)},dt=function(t,l){m(t);var i=I(l),n=X(i).concat(Zt(i));return F(n,(function(l){d&&!rt.call(i,l)||ot(t,l,i[l])})),t},rt=function(t){var l=p(t),i=O.call(this,l);return!(this===P&&u(q,l)&&!u(_,l))&&(!(i||!u(this,l)||!u(q,l)||u(this,B)&&this[B][l])||i)},at=function(t,l){var i=I(t),n=p(l);if(i!==P||!u(q,n)||u(_,n)){var e=Q(i,n);return!e||!u(q,n)||u(i,B)&&i[B][n]||(e.enumerable=!0),e}},ut=function(t){var l=D(I(t)),i=[];return F(l,(function(t){u(q,t)||u(N,t)||i.push(t)})),i},Zt=function(t){var l=t===P,i=D(l?_:I(t)),n=[];return F(i,(function(t){!u(q,t)||l&&!u(P,t)||n.push(q[t])})),n};(r||(K((M=function(){if(this instanceof M)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?G(arguments[0]):void 0,l=L(t),i=function(t){this===P&&i.call(_,t),u(this,B)&&u(this[B],l)&&(this[B][l]=!1),et(this,l,y(1,t))};return d&&nt&&et(P,l,{configurable:!0,set:i}),ct(l,t)}).prototype,"toString",(function(){return A(this).tag})),K(M,"withoutSetter",(function(t){return ct(L(t),t)})),S.f=rt,f.f=ot,R.f=at,V.f=W.f=ut,C.f=Zt,H.f=function(t){return ct(U(t),t)},d&&(E(M.prototype,"description",{configurable:!0,get:function(){return A(this).description}}),o||K(P,"propertyIsEnumerable",rt,{unsafe:!0}))),n({global:!0,wrap:!0,forced:!r,sham:!r},{Symbol:M}),F(X(lt),(function(t){x(t)})),n({target:"Symbol",stat:!0,forced:!r},{for:function(t){var l=G(t);if(u($,l))return $[l];var i=M(l);return $[l]=i,tt[i]=l,i},keyFor:function(t){if(!b(t))throw TypeError(t+" is not a symbol");if(u(tt,t))return tt[t]},useSetter:function(){nt=!0},useSimple:function(){nt=!1}}),n({target:"Object",stat:!0,forced:!r,sham:!d},{create:function(t,l){return void 0===l?g(t):dt(g(t),l)},defineProperty:ot,defineProperties:dt,getOwnPropertyDescriptor:at}),n({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:ut,getOwnPropertySymbols:Zt}),n({target:"Object",stat:!0,forced:a((function(){C.f(1)}))},{getOwnPropertySymbols:function(t){return C.f(h(t))}}),j)&&n({target:"JSON",stat:!0,forced:!r||a((function(){var t=M();return"[null]"!=j([t])||"{}"!=j({a:t})||"{}"!=j(Object(t))}))},{stringify:function(t,l,i){for(var n,e=[t],c=1;arguments.length>c;)e.push(arguments[c++]);if(n=l,(s(l)||void 0!==t)&&!b(t))return Z(l)||(l=function(t,l){if("function"==typeof n&&(l=n.call(this,t,l)),!b(l))return l}),e[1]=l,j.apply(null,e)}});M.prototype[z]||v(M.prototype,z,M.prototype.valueOf),T(M,"Symbol"),N[B]=!0},function(t,l,i){var n=i(8),e=i(51),c=i(7)("species");t.exports=function(t){var l;return e(t)&&("function"!=typeof(l=t.constructor)||l!==Array&&!e(l.prototype)?n(l)&&null===(l=l[c])&&(l=void 0):l=void 0),void 0===l?Array:l}},function(t,l,i){"use strict";var n=i(0),e=i(9),c=i(4),o=i(16),d=i(8),r=i(14).f,a=i(145),u=c.Symbol;if(e&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var Z={},s=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),l=this instanceof s?new u(t):void 0===t?u():u(t);return""===t&&(Z[l]=!0),l};a(s,u);var b=s.prototype=u.prototype;b.constructor=s;var m=b.toString,h="Symbol(test)"==String(u("test")),I=/^Symbol\((.*)\)[^)]+$/;r(b,"description",{configurable:!0,get:function(){var t=d(this)?this.valueOf():this,l=m.call(t);if(o(Z,t))return"";var i=h?l.slice(7,-1):l.replace(I,"$1");return""===i?void 0:i}}),n({global:!0,forced:!0},{Symbol:s})}},function(t,l,i){i(21)("asyncIterator")},function(t,l,i){i(21)("hasInstance")},function(t,l,i){i(21)("isConcatSpreadable")},function(t,l,i){i(21)("iterator")},function(t,l,i){i(21)("match")},function(t,l,i){i(21)("matchAll")},function(t,l,i){i(21)("replace")},function(t,l,i){i(21)("search")},function(t,l,i){i(21)("species")},function(t,l,i){i(21)("split")},function(t,l,i){i(21)("toPrimitive")},function(t,l,i){i(21)("toStringTag")},function(t,l,i){i(21)("unscopables")},function(t,l,i){"use strict";var n=i(0),e=i(2),c=i(51),o=i(8),d=i(13),r=i(10),a=i(53),u=i(73),Z=i(74),s=i(7),b=i(48),m=s("isConcatSpreadable"),h=b>=51||!e((function(){var t=[];return t[m]=!1,t.concat()[0]!==t})),I=Z("concat"),p=function(t){if(!o(t))return!1;var l=t[m];return void 0!==l?!!l:c(t)};n({target:"Array",proto:!0,forced:!h||!I},{concat:function(t){var l,i,n,e,c,o=d(this),Z=u(o,0),s=0;for(l=-1,n=arguments.length;l<n;l++)if(p(c=-1===l?o:arguments[l])){if(s+(e=r(c.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(i=0;i<e;i++,s++)i in c&&a(Z,s,c[i])}else{if(s>=9007199254740991)throw TypeError("Maximum allowed index exceeded");a(Z,s++,c)}return Z.length=s,Z}})},function(t,l,i){var n=i(0),e=i(149),c=i(35);n({target:"Array",proto:!0},{copyWithin:e}),c("copyWithin")},function(t,l,i){"use strict";var n=i(0),e=i(23).every;n({target:"Array",proto:!0,forced:!i(40)("every")},{every:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){var n=i(0),e=i(116),c=i(35);n({target:"Array",proto:!0},{fill:e}),c("fill")},function(t,l,i){"use strict";var n=i(0),e=i(23).filter;n({target:"Array",proto:!0,forced:!i(74)("filter")},{filter:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){"use strict";var n=i(0),e=i(23).find,c=i(35),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),n({target:"Array",proto:!0,forced:o},{find:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("find")},function(t,l,i){"use strict";var n=i(0),e=i(23).findIndex,c=i(35),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),n({target:"Array",proto:!0,forced:o},{findIndex:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("findIndex")},function(t,l,i){"use strict";var n=i(0),e=i(150),c=i(13),o=i(10),d=i(30),r=i(73);n({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,l=c(this),i=o(l.length),n=r(l,0);return n.length=e(n,l,l,i,0,void 0===t?1:d(t)),n}})},function(t,l,i){"use strict";var n=i(0),e=i(150),c=i(13),o=i(10),d=i(3),r=i(73);n({target:"Array",proto:!0},{flatMap:function(t){var l,i=c(this),n=o(i.length);return d(t),(l=r(i,0)).length=e(l,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),l}})},function(t,l,i){"use strict";var n=i(0),e=i(151);n({target:"Array",proto:!0,forced:[].forEach!=e},{forEach:e})},function(t,l,i){var n=i(0),e=i(152);n({target:"Array",stat:!0,forced:!i(86)((function(t){Array.from(t)}))},{from:e})},function(t,l,i){"use strict";var n=i(0),e=i(71).includes,c=i(35);n({target:"Array",proto:!0},{includes:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,l,i){"use strict";var n=i(0),e=i(71).indexOf,c=i(40),o=[].indexOf,d=!!o&&1/[1].indexOf(1,-0)<0,r=c("indexOf");n({target:"Array",proto:!0,forced:d||!r},{indexOf:function(t){return d?o.apply(this,arguments)||0:e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){i(0)({target:"Array",stat:!0},{isArray:i(51)})},function(t,l,i){"use strict";var n=i(0),e=i(67),c=i(29),o=i(40),d=[].join,r=e!=Object,a=o("join",",");n({target:"Array",proto:!0,forced:r||!a},{join:function(t){return d.call(c(this),void 0===t?",":t)}})},function(t,l,i){var n=i(0),e=i(154);n({target:"Array",proto:!0,forced:e!==[].lastIndexOf},{lastIndexOf:e})},function(t,l,i){"use strict";var n=i(0),e=i(23).map;n({target:"Array",proto:!0,forced:!i(74)("map")},{map:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){"use strict";var n=i(0),e=i(2),c=i(53);n({target:"Array",stat:!0,forced:e((function(){function t(){}return!(Array.of.call(t)instanceof t)}))},{of:function(){for(var t=0,l=arguments.length,i=new("function"==typeof this?this:Array)(l);l>t;)c(i,t,arguments[t++]);return i.length=l,i}})},function(t,l,i){"use strict";var n=i(0),e=i(88).left,c=i(40),o=i(48),d=i(63);n({target:"Array",proto:!0,forced:!c("reduce")||!d&&o>79&&o<83},{reduce:function(t){return e(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){"use strict";var n=i(0),e=i(88).right,c=i(40),o=i(48),d=i(63);n({target:"Array",proto:!0,forced:!c("reduceRight")||!d&&o>79&&o<83},{reduceRight:function(t){return e(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){"use strict";var n=i(0),e=i(51),c=[].reverse,o=[1,2];n({target:"Array",proto:!0,forced:String(o)===String(o.reverse())},{reverse:function(){return e(this)&&(this.length=this.length),c.call(this)}})},function(t,l,i){"use strict";var n=i(0),e=i(8),c=i(51),o=i(50),d=i(10),r=i(29),a=i(53),u=i(7),Z=i(74)("slice"),s=u("species"),b=[].slice,m=Math.max;n({target:"Array",proto:!0,forced:!Z},{slice:function(t,l){var i,n,u,Z=r(this),h=d(Z.length),I=o(t,h),p=o(void 0===l?h:l,h);if(c(Z)&&("function"!=typeof(i=Z.constructor)||i!==Array&&!c(i.prototype)?e(i)&&null===(i=i[s])&&(i=void 0):i=void 0,i===Array||void 0===i))return b.call(Z,I,p);for(n=new(void 0===i?Array:i)(m(p-I,0)),u=0;I<p;I++,u++)I in Z&&a(n,u,Z[I]);return n.length=u,n}})},function(t,l,i){"use strict";var n=i(0),e=i(23).some;n({target:"Array",proto:!0,forced:!i(40)("some")},{some:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(13),o=i(10),d=i(15),r=i(2),a=i(155),u=i(40),Z=i(156),s=i(157),b=i(48),m=i(123),h=[],I=h.sort,p=r((function(){h.sort(void 0)})),G=r((function(){h.sort(null)})),y=u("sort"),g=!r((function(){if(b)return b<70;if(!(Z&&Z>3)){if(s)return!0;if(m)return m<603;var t,l,i,n,e="";for(t=65;t<76;t++){switch(l=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)h.push({k:l+n,v:i})}for(h.sort((function(t,l){return l.v-t.v})),n=0;n<h.length;n++)l=h[n].k.charAt(0),e.charAt(e.length-1)!==l&&(e+=l);return"DGBEFHACIJK"!==e}}));n({target:"Array",proto:!0,forced:p||!G||!y||!g},{sort:function(t){void 0!==t&&e(t);var l=c(this);if(g)return void 0===t?I.call(l):I.call(l,t);var i,n,r=[],u=o(l.length);for(n=0;n<u;n++)n in l&&r.push(l[n]);for(i=(r=a(r,function(t){return function(l,i){return void 0===i?-1:void 0===l?1:void 0!==t?+t(l,i)||0:d(l)>d(i)?1:-1}}(t))).length,n=0;n<i;)l[n]=r[n++];for(;n<u;)delete l[n++];return l}})},function(t,l,i){i(54)("Array")},function(t,l,i){"use strict";var n=i(0),e=i(50),c=i(30),o=i(10),d=i(13),r=i(73),a=i(53),u=i(74)("splice"),Z=Math.max,s=Math.min;n({target:"Array",proto:!0,forced:!u},{splice:function(t,l){var i,n,u,b,m,h,I=d(this),p=o(I.length),G=e(t,p),y=arguments.length;if(0===y?i=n=0:1===y?(i=0,n=p-G):(i=y-2,n=s(Z(c(l),0),p-G)),p+i-n>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(u=r(I,n),b=0;b<n;b++)(m=G+b)in I&&a(u,b,I[m]);if(u.length=n,i<n){for(b=G;b<p-n;b++)h=b+i,(m=b+n)in I?I[h]=I[m]:delete I[h];for(b=p;b>p-n+i;b--)delete I[b-1]}else if(i>n)for(b=p-n;b>G;b--)h=b+i-1,(m=b+n-1)in I?I[h]=I[m]:delete I[h];for(b=0;b<i;b++)I[b+G]=arguments[b+2];return I.length=p-n+i,u}})},function(t,l,i){i(35)("flat")},function(t,l,i){i(35)("flatMap")},function(t,l,i){"use strict";var n=i(0),e=i(4),c=i(89),o=i(54),d=c.ArrayBuffer;n({global:!0,forced:e.ArrayBuffer!==d},{ArrayBuffer:d}),o("ArrayBuffer")},function(t,l){var i=Math.abs,n=Math.pow,e=Math.floor,c=Math.log,o=Math.LN2;t.exports={pack:function(t,l,d){var r,a,u,Z=new Array(d),s=8*d-l-1,b=(1<<s)-1,m=b>>1,h=23===l?n(2,-24)-n(2,-77):0,I=t<0||0===t&&1/t<0?1:0,p=0;for((t=i(t))!=t||t===1/0?(a=t!=t?1:0,r=b):(r=e(c(t)/o),t*(u=n(2,-r))<1&&(r--,u*=2),(t+=r+m>=1?h/u:h*n(2,1-m))*u>=2&&(r++,u/=2),r+m>=b?(a=0,r=b):r+m>=1?(a=(t*u-1)*n(2,l),r+=m):(a=t*n(2,m-1)*n(2,l),r=0));l>=8;Z[p++]=255&a,a/=256,l-=8);for(r=r<<l|a,s+=l;s>0;Z[p++]=255&r,r/=256,s-=8);return Z[--p]|=128*I,Z},unpack:function(t,l){var i,e=t.length,c=8*e-l-1,o=(1<<c)-1,d=o>>1,r=c-7,a=e-1,u=t[a--],Z=127&u;for(u>>=7;r>0;Z=256*Z+t[a],a--,r-=8);for(i=Z&(1<<-r)-1,Z>>=-r,r+=l;r>0;i=256*i+t[a],a--,r-=8);if(0===Z)Z=1-d;else{if(Z===o)return i?NaN:u?-1/0:1/0;i+=n(2,l),Z-=d}return(u?-1:1)*i*n(2,Z-l)}}},function(t,l,i){var n=i(0),e=i(12);n({target:"ArrayBuffer",stat:!0,forced:!e.NATIVE_ARRAY_BUFFER_VIEWS},{isView:e.isView})},function(t,l,i){"use strict";var n=i(0),e=i(2),c=i(89),o=i(1),d=i(50),r=i(10),a=i(28),u=c.ArrayBuffer,Z=c.DataView,s=u.prototype.slice;n({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:e((function(){return!new u(2).slice(1,void 0).byteLength}))},{slice:function(t,l){if(void 0!==s&&void 0===l)return s.call(o(this),t);for(var i=o(this).byteLength,n=d(t,i),e=d(void 0===l?i:l,i),c=new(a(this,u))(r(e-n)),b=new Z(this),m=new Z(c),h=0;n<e;)m.setUint8(h++,b.getUint8(n++));return c}})},function(t,l,i){var n=i(0),e=i(89);n({global:!0,forced:!i(124)},{DataView:e.DataView})},function(t,l,i){i(0)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},function(t,l,i){var n=i(0),e=i(247);n({target:"Date",proto:!0,forced:Date.prototype.toISOString!==e},{toISOString:e})},function(t,l,i){"use strict";var n=i(2),e=i(125).start,c=Math.abs,o=Date.prototype,d=o.getTime,r=o.toISOString;t.exports=n((function(){return"0385-07-25T07:06:39.999Z"!=r.call(new Date(-50000000000001))}))||!n((function(){r.call(new Date(NaN))}))?function(){if(!isFinite(d.call(this)))throw RangeError("Invalid time value");var t=this.getUTCFullYear(),l=this.getUTCMilliseconds(),i=t<0?"-":t>9999?"+":"";return i+e(c(t),i?6:4,0)+"-"+e(this.getUTCMonth()+1,2,0)+"-"+e(this.getUTCDate(),2,0)+"T"+e(this.getUTCHours(),2,0)+":"+e(this.getUTCMinutes(),2,0)+":"+e(this.getUTCSeconds(),2,0)+"."+e(l,3,0)+"Z"}:r},function(t,l,i){"use strict";var n=i(0),e=i(2),c=i(13),o=i(106);n({target:"Date",proto:!0,forced:e((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var l=c(this),i=o(l,"number");return"number"!=typeof i||isFinite(i)?l.toISOString():null}})},function(t,l,i){var n=i(18),e=i(250),c=i(7)("toPrimitive"),o=Date.prototype;c in o||n(o,c,e)},function(t,l,i){"use strict";var n=i(1),e=i(142);t.exports=function(t){if(n(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw TypeError("Incorrect hint");return e(this,t)}},function(t,l,i){var n=i(25),e=Date.prototype,c=e.toString,o=e.getTime;"Invalid Date"!=String(new Date(NaN))&&n(e,"toString",(function(){var t=o.call(this);return t==t?c.call(this):"Invalid Date"}))},function(t,l,i){i(0)({target:"Function",proto:!0},{bind:i(159)})},function(t,l,i){"use strict";var n=i(8),e=i(14),c=i(27),o=i(7)("hasInstance"),d=Function.prototype;o in d||e.f(d,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=c(t);)if(this.prototype===t)return!0;return!1}})},function(t,l,i){var n=i(9),e=i(14).f,c=Function.prototype,o=c.toString,d=/^\s*function ([^ (]*)/;n&&!("name"in c)&&e(c,"name",{configurable:!0,get:function(){try{return o.call(this).match(d)[1]}catch(t){return""}}})},function(t,l,i){var n=i(0),e=i(11),c=i(2),o=e("JSON","stringify"),d=/[\uD800-\uDFFF]/g,r=/^[\uD800-\uDBFF]$/,a=/^[\uDC00-\uDFFF]$/,u=function(t,l,i){var n=i.charAt(l-1),e=i.charAt(l+1);return r.test(t)&&!a.test(e)||a.test(t)&&!r.test(n)?"\\u"+t.charCodeAt(0).toString(16):t},Z=c((function(){return'"\\udf06\\ud834"'!==o("\udf06\ud834")||'"\\udead"'!==o("\udead")}));o&&n({target:"JSON",stat:!0,forced:Z},{stringify:function(t,l,i){var n=o.apply(null,arguments);return"string"==typeof n?n.replace(d,u):n}})},function(t,l,i){var n=i(4);i(34)(n.JSON,"JSON",!0)},function(t,l,i){var n=i(0),e=i(162),c=Math.acosh,o=Math.log,d=Math.sqrt,r=Math.LN2;n({target:"Math",stat:!0,forced:!c||710!=Math.floor(c(Number.MAX_VALUE))||c(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?o(t)+r:e(t-1+d(t-1)*d(t+1))}})},function(t,l,i){var n=i(0),e=Math.asinh,c=Math.log,o=Math.sqrt;n({target:"Math",stat:!0,forced:!(e&&1/e(0)>0)},{asinh:function t(l){return isFinite(l=+l)&&0!=l?l<0?-t(-l):c(l+o(l*l+1)):l}})},function(t,l,i){var n=i(0),e=Math.atanh,c=Math.log;n({target:"Math",stat:!0,forced:!(e&&1/e(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:c((1+t)/(1-t))/2}})},function(t,l,i){var n=i(0),e=i(128),c=Math.abs,o=Math.pow;n({target:"Math",stat:!0},{cbrt:function(t){return e(t=+t)*o(c(t),1/3)}})},function(t,l,i){var n=i(0),e=Math.floor,c=Math.log,o=Math.LOG2E;n({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-e(c(t+.5)*o):32}})},function(t,l,i){var n=i(0),e=i(92),c=Math.cosh,o=Math.abs,d=Math.E;n({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var l=e(o(t)-1)+1;return(l+1/(l*d*d))*(d/2)}})},function(t,l,i){var n=i(0),e=i(92);n({target:"Math",stat:!0,forced:e!=Math.expm1},{expm1:e})},function(t,l,i){i(0)({target:"Math",stat:!0},{fround:i(163)})},function(t,l,i){var n=i(0),e=Math.hypot,c=Math.abs,o=Math.sqrt;n({target:"Math",stat:!0,forced:!!e&&e(1/0,NaN)!==1/0},{hypot:function(t,l){for(var i,n,e=0,d=0,r=arguments.length,a=0;d<r;)a<(i=c(arguments[d++]))?(e=e*(n=a/i)*n+1,a=i):e+=i>0?(n=i/a)*n:i;return a===1/0?1/0:a*o(e)}})},function(t,l,i){var n=i(0),e=i(2),c=Math.imul;n({target:"Math",stat:!0,forced:e((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,l){var i=+t,n=+l,e=65535&i,c=65535&n;return 0|e*c+((65535&i>>>16)*c+e*(65535&n>>>16)<<16>>>0)}})},function(t,l,i){var n=i(0),e=Math.log,c=Math.LOG10E;n({target:"Math",stat:!0},{log10:function(t){return e(t)*c}})},function(t,l,i){i(0)({target:"Math",stat:!0},{log1p:i(162)})},function(t,l,i){var n=i(0),e=Math.log,c=Math.LN2;n({target:"Math",stat:!0},{log2:function(t){return e(t)/c}})},function(t,l,i){i(0)({target:"Math",stat:!0},{sign:i(128)})},function(t,l,i){var n=i(0),e=i(2),c=i(92),o=Math.abs,d=Math.exp,r=Math.E;n({target:"Math",stat:!0,forced:e((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return o(t=+t)<1?(c(t)-c(-t))/2:(d(t-1)-d(-t-1))*(r/2)}})},function(t,l,i){var n=i(0),e=i(92),c=Math.exp;n({target:"Math",stat:!0},{tanh:function(t){var l=e(t=+t),i=e(-t);return l==1/0?1:i==1/0?-1:(l-i)/(c(t)+c(-t))}})},function(t,l,i){i(34)(Math,"Math",!0)},function(t,l,i){var n=i(0),e=Math.ceil,c=Math.floor;n({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:e)(t)}})},function(t,l,i){"use strict";var n=i(9),e=i(4),c=i(72),o=i(25),d=i(16),r=i(46),a=i(91),u=i(59),Z=i(106),s=i(2),b=i(26),m=i(49).f,h=i(24).f,I=i(14).f,p=i(64).trim,G=e.Number,y=G.prototype,g="Number"==r(b(y)),X=function(t){if(u(t))throw TypeError("Cannot convert a Symbol value to a number");var l,i,n,e,c,o,d,r,a=Z(t,"number");if("string"==typeof a&&a.length>2)if(43===(l=(a=p(a)).charCodeAt(0))||45===l){if(88===(i=a.charCodeAt(2))||120===i)return NaN}else if(48===l){switch(a.charCodeAt(1)){case 66:case 98:n=2,e=49;break;case 79:case 111:n=8,e=55;break;default:return+a}for(o=(c=a.slice(2)).length,d=0;d<o;d++)if((r=c.charCodeAt(d))<48||r>e)return NaN;return parseInt(c,n)}return+a};if(c("Number",!G(" 0o1")||!G("0b1")||G("+0x1"))){for(var V,W=function(t){var l=arguments.length<1?0:t,i=this;return i instanceof W&&(g?s((function(){y.valueOf.call(i)})):"Number"!=r(i))?a(new G(X(l)),i,W):X(l)},C=n?m(G):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),R=0;C.length>R;R++)d(G,V=C[R])&&!d(W,V)&&I(W,V,h(G,V));W.prototype=y,y.constructor=W,o(e,"Number",W)}},function(t,l,i){i(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,l,i){i(0)({target:"Number",stat:!0},{isFinite:i(164)})},function(t,l,i){i(0)({target:"Number",stat:!0},{isInteger:i(129)})},function(t,l,i){i(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,l,i){var n=i(0),e=i(129),c=Math.abs;n({target:"Number",stat:!0},{isSafeInteger:function(t){return e(t)&&c(t)<=9007199254740991}})},function(t,l,i){i(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,l,i){i(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,l,i){var n=i(0),e=i(165);n({target:"Number",stat:!0,forced:Number.parseFloat!=e},{parseFloat:e})},function(t,l,i){var n=i(0),e=i(130);n({target:"Number",stat:!0,forced:Number.parseInt!=e},{parseInt:e})},function(t,l,i){"use strict";var n=i(0),e=i(30),c=i(166),o=i(126),d=i(2),r=1..toFixed,a=Math.floor,u=function(t,l,i){return 0===l?i:l%2==1?u(t,l-1,i*t):u(t*t,l/2,i)},Z=function(t,l,i){for(var n=-1,e=i;++n<6;)e+=l*t[n],t[n]=e%1e7,e=a(e/1e7)},s=function(t,l){for(var i=6,n=0;--i>=0;)n+=t[i],t[i]=a(n/l),n=n%l*1e7},b=function(t){for(var l=6,i="";--l>=0;)if(""!==i||0===l||0!==t[l]){var n=String(t[l]);i=""===i?n:i+o.call("0",7-n.length)+n}return i};n({target:"Number",proto:!0,forced:r&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!d((function(){r.call({})}))},{toFixed:function(t){var l,i,n,d,r=c(this),a=e(t),m=[0,0,0,0,0,0],h="",I="0";if(a<0||a>20)throw RangeError("Incorrect fraction digits");if(r!=r)return"NaN";if(r<=-1e21||r>=1e21)return String(r);if(r<0&&(h="-",r=-r),r>1e-21)if(i=(l=function(t){for(var l=0,i=t;i>=4096;)l+=12,i/=4096;for(;i>=2;)l+=1,i/=2;return l}(r*u(2,69,1))-69)<0?r*u(2,-l,1):r/u(2,l,1),i*=4503599627370496,(l=52-l)>0){for(Z(m,0,i),n=a;n>=7;)Z(m,1e7,0),n-=7;for(Z(m,u(10,n,1),0),n=l-1;n>=23;)s(m,1<<23),n-=23;s(m,1<<n),Z(m,1,1),s(m,2),I=b(m)}else Z(m,0,i),Z(m,1<<-l,0),I=b(m)+o.call("0",a);return I=a>0?h+((d=I.length)<=a?"0."+o.call("0",a-d)+I:I.slice(0,d-a)+"."+I.slice(d-a)):h+I}})},function(t,l,i){"use strict";var n=i(0),e=i(2),c=i(166),o=1..toPrecision;n({target:"Number",proto:!0,forced:e((function(){return"1"!==o.call(1,void 0)}))||!e((function(){o.call({})}))},{toPrecision:function(t){return void 0===t?o.call(c(this)):o.call(c(this),t)}})},function(t,l,i){var n=i(0),e=i(167);n({target:"Object",stat:!0,forced:Object.assign!==e},{assign:e})},function(t,l,i){i(0)({target:"Object",stat:!0,sham:!i(9)},{create:i(26)})},function(t,l,i){"use strict";var n=i(0),e=i(9),c=i(94),o=i(13),d=i(3),r=i(14);e&&n({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,l){r.f(o(this),t,{get:d(l),enumerable:!0,configurable:!0})}})},function(t,l,i){var n=i(0),e=i(9);n({target:"Object",stat:!0,forced:!e,sham:!e},{defineProperties:i(114)})},function(t,l,i){var n=i(0),e=i(9);n({target:"Object",stat:!0,forced:!e,sham:!e},{defineProperty:i(14).f})},function(t,l,i){"use strict";var n=i(0),e=i(9),c=i(94),o=i(13),d=i(3),r=i(14);e&&n({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,l){r.f(o(this),t,{set:d(l),enumerable:!0,configurable:!0})}})},function(t,l,i){var n=i(0),e=i(168).entries;n({target:"Object",stat:!0},{entries:function(t){return e(t)}})},function(t,l,i){var n=i(0),e=i(77),c=i(2),o=i(8),d=i(55).onFreeze,r=Object.freeze;n({target:"Object",stat:!0,forced:c((function(){r(1)})),sham:!e},{freeze:function(t){return r&&o(t)?r(d(t)):t}})},function(t,l,i){var n=i(0),e=i(6),c=i(53);n({target:"Object",stat:!0},{fromEntries:function(t){var l={};return e(t,(function(t,i){c(l,t,i)}),{AS_ENTRIES:!0}),l}})},function(t,l,i){var n=i(0),e=i(2),c=i(29),o=i(24).f,d=i(9),r=e((function(){o(1)}));n({target:"Object",stat:!0,forced:!d||r,sham:!d},{getOwnPropertyDescriptor:function(t,l){return o(c(t),l)}})},function(t,l,i){var n=i(0),e=i(9),c=i(111),o=i(29),d=i(24),r=i(53);n({target:"Object",stat:!0,sham:!e},{getOwnPropertyDescriptors:function(t){for(var l,i,n=o(t),e=d.f,a=c(n),u={},Z=0;a.length>Z;)void 0!==(i=e(n,l=a[Z++]))&&r(u,l,i);return u}})},function(t,l,i){var n=i(0),e=i(2),c=i(115).f;n({target:"Object",stat:!0,forced:e((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,l,i){var n=i(0),e=i(2),c=i(13),o=i(27),d=i(122);n({target:"Object",stat:!0,forced:e((function(){o(1)})),sham:!d},{getPrototypeOf:function(t){return o(c(t))}})},function(t,l,i){i(0)({target:"Object",stat:!0},{is:i(169)})},function(t,l,i){var n=i(0),e=i(2),c=i(8),o=Object.isExtensible;n({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isExtensible:function(t){return!!c(t)&&(!o||o(t))}})},function(t,l,i){var n=i(0),e=i(2),c=i(8),o=Object.isFrozen;n({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isFrozen:function(t){return!c(t)||!!o&&o(t)}})},function(t,l,i){var n=i(0),e=i(2),c=i(8),o=Object.isSealed;n({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isSealed:function(t){return!c(t)||!!o&&o(t)}})},function(t,l,i){var n=i(0),e=i(13),c=i(60);n({target:"Object",stat:!0,forced:i(2)((function(){c(1)}))},{keys:function(t){return c(e(t))}})},function(t,l,i){"use strict";var n=i(0),e=i(9),c=i(94),o=i(13),d=i(47),r=i(27),a=i(24).f;e&&n({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var l,i=o(this),n=d(t);do{if(l=a(i,n))return l.get}while(i=r(i))}})},function(t,l,i){"use strict";var n=i(0),e=i(9),c=i(94),o=i(13),d=i(47),r=i(27),a=i(24).f;e&&n({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var l,i=o(this),n=d(t);do{if(l=a(i,n))return l.set}while(i=r(i))}})},function(t,l,i){var n=i(0),e=i(8),c=i(55).onFreeze,o=i(77),d=i(2),r=Object.preventExtensions;n({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{preventExtensions:function(t){return r&&e(t)?r(c(t)):t}})},function(t,l,i){var n=i(0),e=i(8),c=i(55).onFreeze,o=i(77),d=i(2),r=Object.seal;n({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{seal:function(t){return r&&e(t)?r(c(t)):t}})},function(t,l,i){i(0)({target:"Object",stat:!0},{setPrototypeOf:i(42)})},function(t,l,i){var n=i(119),e=i(25),c=i(311);n||e(Object.prototype,"toString",c,{unsafe:!0})},function(t,l,i){"use strict";var n=i(119),e=i(76);t.exports=n?{}.toString:function(){return"[object "+e(this)+"]"}},function(t,l,i){var n=i(0),e=i(168).values;n({target:"Object",stat:!0},{values:function(t){return e(t)}})},function(t,l,i){var n=i(0),e=i(165);n({global:!0,forced:parseFloat!=e},{parseFloat:e})},function(t,l,i){var n=i(0),e=i(130);n({global:!0,forced:parseInt!=e},{parseInt:e})},function(t,l,i){"use strict";var n,e,c,o,d=i(0),r=i(5),a=i(4),u=i(11),Z=i(170),s=i(25),b=i(36),m=i(42),h=i(34),I=i(54),p=i(8),G=i(3),y=i(33),g=i(110),X=i(6),V=i(86),W=i(28),C=i(131).set,R=i(172),f=i(173),S=i(174),v=i(78),K=i(95),Y=i(17),J=i(72),N=i(7),L=i(318),U=i(63),H=i(48),x=N("species"),T="Promise",k=Y.get,F=Y.set,B=Y.getterFor(T),z=Z&&Z.prototype,w=Z,A=z,P=a.TypeError,M=a.document,j=a.process,Q=v.f,E=Q,D=!!(M&&M.createEvent&&a.dispatchEvent),O="function"==typeof PromiseRejectionEvent,q=!1,_=J(T,(function(){var t=g(w),l=t!==String(w);if(!l&&66===H)return!0;if(r&&!A.finally)return!0;if(H>=51&&/native code/.test(t))return!1;var i=new w((function(t){t(1)})),n=function(t){t((function(){}),(function(){}))};return(i.constructor={})[x]=n,!(q=i.then((function(){}))instanceof n)||!l&&L&&!O})),$=_||!V((function(t){w.all(t).catch((function(){}))})),tt=function(t){var l;return!(!p(t)||"function"!=typeof(l=t.then))&&l},lt=function(t,l){if(!t.notified){t.notified=!0;var i=t.reactions;R((function(){for(var n=t.value,e=1==t.state,c=0;i.length>c;){var o,d,r,a=i[c++],u=e?a.ok:a.fail,Z=a.resolve,s=a.reject,b=a.domain;try{u?(e||(2===t.rejection&&ct(t),t.rejection=1),!0===u?o=n:(b&&b.enter(),o=u(n),b&&(b.exit(),r=!0)),o===a.promise?s(P("Promise-chain cycle")):(d=tt(o))?d.call(o,Z,s):Z(o)):s(n)}catch(t){b&&!r&&b.exit(),s(t)}}t.reactions=[],t.notified=!1,l&&!t.rejection&&nt(t)}))}},it=function(t,l,i){var n,e;D?((n=M.createEvent("Event")).promise=l,n.reason=i,n.initEvent(t,!1,!0),a.dispatchEvent(n)):n={promise:l,reason:i},!O&&(e=a["on"+t])?e(n):"unhandledrejection"===t&&S("Unhandled promise rejection",i)},nt=function(t){C.call(a,(function(){var l,i=t.facade,n=t.value;if(et(t)&&(l=K((function(){U?j.emit("unhandledRejection",n,i):it("unhandledrejection",i,n)})),t.rejection=U||et(t)?2:1,l.error))throw l.value}))},et=function(t){return 1!==t.rejection&&!t.parent},ct=function(t){C.call(a,(function(){var l=t.facade;U?j.emit("rejectionHandled",l):it("rejectionhandled",l,t.value)}))},ot=function(t,l,i){return function(n){t(l,n,i)}},dt=function(t,l,i){t.done||(t.done=!0,i&&(t=i),t.value=l,t.state=2,lt(t,!0))},rt=function(t,l,i){if(!t.done){t.done=!0,i&&(t=i);try{if(t.facade===l)throw P("Promise can't be resolved itself");var n=tt(l);n?R((function(){var i={done:!1};try{n.call(l,ot(rt,i,t),ot(dt,i,t))}catch(l){dt(i,l,t)}})):(t.value=l,t.state=1,lt(t,!1))}catch(l){dt({done:!1},l,t)}}};if(_&&(A=(w=function(t){y(this,w,T),G(t),n.call(this);var l=k(this);try{t(ot(rt,l),ot(dt,l))}catch(t){dt(l,t)}}).prototype,(n=function(t){F(this,{type:T,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=b(A,{then:function(t,l){var i=B(this),n=Q(W(this,w));return n.ok="function"!=typeof t||t,n.fail="function"==typeof l&&l,n.domain=U?j.domain:void 0,i.parent=!0,i.reactions.push(n),0!=i.state&<(i,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),e=function(){var t=new n,l=k(t);this.promise=t,this.resolve=ot(rt,l),this.reject=ot(dt,l)},v.f=Q=function(t){return t===w||t===c?new e(t):E(t)},!r&&"function"==typeof Z&&z!==Object.prototype)){o=z.then,q||(s(z,"then",(function(t,l){var i=this;return new w((function(t,l){o.call(i,t,l)})).then(t,l)}),{unsafe:!0}),s(z,"catch",A.catch,{unsafe:!0}));try{delete z.constructor}catch(t){}m&&m(z,A)}d({global:!0,wrap:!0,forced:_},{Promise:w}),h(w,T,!1,!0),I(T),c=u(T),d({target:T,stat:!0,forced:_},{reject:function(t){var l=Q(this);return l.reject.call(void 0,t),l.promise}}),d({target:T,stat:!0,forced:r||_},{resolve:function(t){return f(r&&this===c?w:this,t)}}),d({target:T,stat:!0,forced:$},{all:function(t){var l=this,i=Q(l),n=i.resolve,e=i.reject,c=K((function(){var i=G(l.resolve),c=[],o=0,d=1;X(t,(function(t){var r=o++,a=!1;c.push(void 0),d++,i.call(l,t).then((function(t){a||(a=!0,c[r]=t,--d||n(c))}),e)})),--d||n(c)}));return c.error&&e(c.value),i.promise},race:function(t){var l=this,i=Q(l),n=i.reject,e=K((function(){var e=G(l.resolve);X(t,(function(t){e.call(l,t).then(i.resolve,n)}))}));return e.error&&n(e.value),i.promise}})},function(t,l,i){var n=i(39),e=i(4);t.exports=/ipad|iphone|ipod/i.test(n)&&void 0!==e.Pebble},function(t,l,i){var n=i(39);t.exports=/web0s(?!.*chrome)/i.test(n)},function(t,l){t.exports="object"==typeof window},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(170),o=i(2),d=i(11),r=i(28),a=i(173),u=i(25);if(n({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){c.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var l=r(this,d("Promise")),i="function"==typeof t;return this.then(i?function(i){return a(l,t()).then((function(){return i}))}:t,i?function(i){return a(l,t()).then((function(){throw i}))}:t)}}),!e&&"function"==typeof c){var Z=d("Promise").prototype.finally;c.prototype.finally!==Z&&u(c.prototype,"finally",Z,{unsafe:!0})}},function(t,l,i){var n=i(0),e=i(11),c=i(3),o=i(1),d=i(2),r=e("Reflect","apply"),a=Function.apply;n({target:"Reflect",stat:!0,forced:!d((function(){r((function(){}))}))},{apply:function(t,l,i){return c(t),o(i),r?r(t,l,i):a.call(t,l,i)}})},function(t,l,i){var n=i(0),e=i(11),c=i(3),o=i(1),d=i(8),r=i(26),a=i(159),u=i(2),Z=e("Reflect","construct"),s=u((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),b=!u((function(){Z((function(){}))})),m=s||b;n({target:"Reflect",stat:!0,forced:m,sham:m},{construct:function(t,l){c(t),o(l);var i=arguments.length<3?t:c(arguments[2]);if(b&&!s)return Z(t,l,i);if(t==i){switch(l.length){case 0:return new t;case 1:return new t(l[0]);case 2:return new t(l[0],l[1]);case 3:return new t(l[0],l[1],l[2]);case 4:return new t(l[0],l[1],l[2],l[3])}var n=[null];return n.push.apply(n,l),new(a.apply(t,n))}var e=i.prototype,u=r(d(e)?e:Object.prototype),m=Function.apply.call(t,u,l);return d(m)?m:u}})},function(t,l,i){var n=i(0),e=i(9),c=i(1),o=i(47),d=i(14);n({target:"Reflect",stat:!0,forced:i(2)((function(){Reflect.defineProperty(d.f({},1,{value:1}),1,{value:2})})),sham:!e},{defineProperty:function(t,l,i){c(t);var n=o(l);c(i);try{return d.f(t,n,i),!0}catch(t){return!1}}})},function(t,l,i){var n=i(0),e=i(1),c=i(24).f;n({target:"Reflect",stat:!0},{deleteProperty:function(t,l){var i=c(e(t),l);return!(i&&!i.configurable)&&delete t[l]}})},function(t,l,i){var n=i(0),e=i(8),c=i(1),o=i(176),d=i(24),r=i(27);n({target:"Reflect",stat:!0},{get:function t(l,i){var n,a,u=arguments.length<3?l:arguments[2];return c(l)===u?l[i]:(n=d.f(l,i))?o(n)?n.value:void 0===n.get?void 0:n.get.call(u):e(a=r(l))?t(a,i,u):void 0}})},function(t,l,i){var n=i(0),e=i(9),c=i(1),o=i(24);n({target:"Reflect",stat:!0,sham:!e},{getOwnPropertyDescriptor:function(t,l){return o.f(c(t),l)}})},function(t,l,i){var n=i(0),e=i(1),c=i(27);n({target:"Reflect",stat:!0,sham:!i(122)},{getPrototypeOf:function(t){return c(e(t))}})},function(t,l,i){i(0)({target:"Reflect",stat:!0},{has:function(t,l){return l in t}})},function(t,l,i){var n=i(0),e=i(1),c=Object.isExtensible;n({target:"Reflect",stat:!0},{isExtensible:function(t){return e(t),!c||c(t)}})},function(t,l,i){i(0)({target:"Reflect",stat:!0},{ownKeys:i(111)})},function(t,l,i){var n=i(0),e=i(11),c=i(1);n({target:"Reflect",stat:!0,sham:!i(77)},{preventExtensions:function(t){c(t);try{var l=e("Object","preventExtensions");return l&&l(t),!0}catch(t){return!1}}})},function(t,l,i){var n=i(0),e=i(1),c=i(8),o=i(176),d=i(2),r=i(14),a=i(24),u=i(27),Z=i(38);n({target:"Reflect",stat:!0,forced:d((function(){var t=function(){},l=r.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,l)}))},{set:function t(l,i,n){var d,s,b,m=arguments.length<4?l:arguments[3],h=a.f(e(l),i);if(!h){if(c(s=u(l)))return t(s,i,n,m);h=Z(0)}if(o(h)){if(!1===h.writable||!c(m))return!1;if(d=a.f(m,i)){if(d.get||d.set||!1===d.writable)return!1;d.value=n,r.f(m,i,d)}else r.f(m,i,Z(0,n))}else{if(void 0===(b=h.set))return!1;b.call(m,n)}return!0}})},function(t,l,i){var n=i(0),e=i(1),c=i(153),o=i(42);o&&n({target:"Reflect",stat:!0},{setPrototypeOf:function(t,l){e(t),c(l);try{return o(t,l),!0}catch(t){return!1}}})},function(t,l,i){var n=i(9),e=i(4),c=i(72),o=i(91),d=i(18),r=i(14).f,a=i(49).f,u=i(79),Z=i(15),s=i(65),b=i(96),m=i(25),h=i(2),I=i(16),p=i(17).enforce,G=i(54),y=i(7),g=i(177),X=i(178),V=y("match"),W=e.RegExp,C=W.prototype,R=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,f=/a/g,S=/a/g,v=new W(f)!==f,K=b.UNSUPPORTED_Y,Y=n&&(!v||K||g||X||h((function(){return S[V]=!1,W(f)!=f||W(S)==S||"/a/i"!=W(f,"i")})));if(c("RegExp",Y)){for(var J=function(t,l){var i,n,e,c,r,a,b=this instanceof J,m=u(t),h=void 0===l,G=[],y=t;if(!b&&m&&h&&t.constructor===J)return t;if((m||t instanceof J)&&(t=t.source,h&&(l="flags"in y?y.flags:s.call(y))),t=void 0===t?"":Z(t),l=void 0===l?"":Z(l),y=t,g&&"dotAll"in f&&(n=!!l&&l.indexOf("s")>-1)&&(l=l.replace(/s/g,"")),i=l,K&&"sticky"in f&&(e=!!l&&l.indexOf("y")>-1)&&(l=l.replace(/y/g,"")),X&&(t=(c=function(t){for(var l,i=t.length,n=0,e="",c=[],o={},d=!1,r=!1,a=0,u="";n<=i;n++){if("\\"===(l=t.charAt(n)))l+=t.charAt(++n);else if("]"===l)d=!1;else if(!d)switch(!0){case"["===l:d=!0;break;case"("===l:R.test(t.slice(n+1))&&(n+=2,r=!0),e+=l,a++;continue;case">"===l&&r:if(""===u||I(o,u))throw new SyntaxError("Invalid capture group name");o[u]=!0,c.push([u,a]),r=!1,u="";continue}r?u+=l:e+=l}return[e,c]}(t))[0],G=c[1]),r=o(W(t,l),b?this:C,J),(n||e||G.length)&&(a=p(r),n&&(a.dotAll=!0,a.raw=J(function(t){for(var l,i=t.length,n=0,e="",c=!1;n<=i;n++)"\\"!==(l=t.charAt(n))?c||"."!==l?("["===l?c=!0:"]"===l&&(c=!1),e+=l):e+="[\\s\\S]":e+=l+t.charAt(++n);return e}(t),i)),e&&(a.sticky=!0),G.length&&(a.groups=G)),t!==y)try{d(r,"source",""===y?"(?:)":y)}catch(t){}return r},N=function(t){t in J||r(J,t,{configurable:!0,get:function(){return W[t]},set:function(l){W[t]=l}})},L=a(W),U=0;L.length>U;)N(L[U++]);C.constructor=J,J.prototype=C,m(e,"RegExp",J)}G("RegExp")},function(t,l,i){var n=i(9),e=i(14),c=i(65),o=i(2);n&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&e.f(RegExp.prototype,"flags",{configurable:!0,get:c})},function(t,l,i){var n=i(9),e=i(96).UNSUPPORTED_Y,c=i(14).f,o=i(17).get,d=RegExp.prototype;n&&e&&c(d,"sticky",{configurable:!0,get:function(){if(this!==d){if(this instanceof RegExp)return!!o(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}})},function(t,l,i){"use strict";i(132);var n,e,c=i(0),o=i(8),d=(n=!1,(e=/[ac]/).exec=function(){return n=!0,/./.exec.apply(this,arguments)},!0===e.test("abc")&&n),r=/./.test;c({target:"RegExp",proto:!0,forced:!d},{test:function(t){if("function"!=typeof this.exec)return r.call(this,t);var l=this.exec(t);if(null!==l&&!o(l))throw new Error("RegExp exec method returned something other than an Object or null");return!!l}})},function(t,l,i){"use strict";var n=i(25),e=i(1),c=i(15),o=i(2),d=i(65),r=RegExp.prototype,a=r.toString,u=o((function(){return"/a/b"!=a.call({source:"a",flags:"b"})})),Z="toString"!=a.name;(u||Z)&&n(RegExp.prototype,"toString",(function(){var t=e(this),l=c(t.source),i=t.flags;return"/"+l+"/"+c(void 0===i&&t instanceof RegExp&&!("flags"in r)?d.call(t):i)}),{unsafe:!0})},function(t,l,i){"use strict";var n=i(0),e=i(66).codeAt;n({target:"String",proto:!0},{codePointAt:function(t){return e(this,t)}})},function(t,l,i){"use strict";var n,e=i(0),c=i(24).f,o=i(10),d=i(15),r=i(133),a=i(22),u=i(134),Z=i(5),s="".endsWith,b=Math.min,m=u("endsWith");e({target:"String",proto:!0,forced:!!(Z||m||(n=c(String.prototype,"endsWith"),!n||n.writable))&&!m},{endsWith:function(t){var l=d(a(this));r(t);var i=arguments.length>1?arguments[1]:void 0,n=o(l.length),e=void 0===i?n:b(o(i),n),c=d(t);return s?s.call(l,c,e):l.slice(e-c.length,e)===c}})},function(t,l,i){var n=i(0),e=i(50),c=String.fromCharCode,o=String.fromCodePoint;n({target:"String",stat:!0,forced:!!o&&1!=o.length},{fromCodePoint:function(t){for(var l,i=[],n=arguments.length,o=0;n>o;){if(l=+arguments[o++],e(l,1114111)!==l)throw RangeError(l+" is not a valid code point");i.push(l<65536?c(l):c(55296+((l-=65536)>>10),l%1024+56320))}return i.join("")}})},function(t,l,i){"use strict";var n=i(0),e=i(133),c=i(22),o=i(15);n({target:"String",proto:!0,forced:!i(134)("includes")},{includes:function(t){return!!~o(c(this)).indexOf(o(e(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){"use strict";var n=i(98),e=i(1),c=i(10),o=i(15),d=i(22),r=i(99),a=i(100);n("match",(function(t,l,i){return[function(l){var i=d(this),n=null==l?void 0:l[t];return void 0!==n?n.call(l,i):new RegExp(l)[t](o(i))},function(t){var n=e(this),d=o(t),u=i(l,n,d);if(u.done)return u.value;if(!n.global)return a(n,d);var Z=n.unicode;n.lastIndex=0;for(var s,b=[],m=0;null!==(s=a(n,d));){var h=o(s[0]);b[m]=h,""===h&&(n.lastIndex=r(d,c(n.lastIndex),Z)),m++}return 0===m?null:b}]}))},function(t,l,i){"use strict";var n=i(0),e=i(125).end;n({target:"String",proto:!0,forced:i(182)},{padEnd:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){"use strict";var n=i(0),e=i(125).start;n({target:"String",proto:!0,forced:i(182)},{padStart:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,l,i){var n=i(0),e=i(29),c=i(10),o=i(15);n({target:"String",stat:!0},{raw:function(t){for(var l=e(t.raw),i=c(l.length),n=arguments.length,d=[],r=0;i>r;)d.push(o(l[r++])),r<n&&d.push(o(arguments[r]));return d.join("")}})},function(t,l,i){i(0)({target:"String",proto:!0},{repeat:i(126)})},function(t,l,i){"use strict";var n=i(98),e=i(2),c=i(1),o=i(30),d=i(10),r=i(15),a=i(22),u=i(99),Z=i(183),s=i(100),b=i(7)("replace"),m=Math.max,h=Math.min,I="$0"==="a".replace(/./,"$0"),p=!!/./[b]&&""===/./[b]("a","$0");n("replace",(function(t,l,i){var n=p?"$":"$0";return[function(t,i){var n=a(this),e=null==t?void 0:t[b];return void 0!==e?e.call(t,n,i):l.call(r(n),t,i)},function(t,e){var a=c(this),b=r(t);if("string"==typeof e&&-1===e.indexOf(n)&&-1===e.indexOf("$<")){var I=i(l,a,b,e);if(I.done)return I.value}var p="function"==typeof e;p||(e=r(e));var G=a.global;if(G){var y=a.unicode;a.lastIndex=0}for(var g=[];;){var X=s(a,b);if(null===X)break;if(g.push(X),!G)break;""===r(X[0])&&(a.lastIndex=u(b,d(a.lastIndex),y))}for(var V,W="",C=0,R=0;R<g.length;R++){X=g[R];for(var f=r(X[0]),S=m(h(o(X.index),b.length),0),v=[],K=1;K<X.length;K++)v.push(void 0===(V=X[K])?V:String(V));var Y=X.groups;if(p){var J=[f].concat(v,S,b);void 0!==Y&&J.push(Y);var N=r(e.apply(void 0,J))}else N=Z(f,b,S,v,Y,e);S>=C&&(W+=b.slice(C,S)+N,C=S+f.length)}return W+b.slice(C)}]}),!!e((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!I||p)},function(t,l,i){"use strict";var n=i(98),e=i(1),c=i(22),o=i(169),d=i(15),r=i(100);n("search",(function(t,l,i){return[function(l){var i=c(this),n=null==l?void 0:l[t];return void 0!==n?n.call(l,i):new RegExp(l)[t](d(i))},function(t){var n=e(this),c=d(t),a=i(l,n,c);if(a.done)return a.value;var u=n.lastIndex;o(u,0)||(n.lastIndex=0);var Z=r(n,c);return o(n.lastIndex,u)||(n.lastIndex=u),null===Z?-1:Z.index}]}))},function(t,l,i){"use strict";var n=i(98),e=i(79),c=i(1),o=i(22),d=i(28),r=i(99),a=i(10),u=i(15),Z=i(100),s=i(97),b=i(96),m=i(2),h=b.UNSUPPORTED_Y,I=[].push,p=Math.min;n("split",(function(t,l,i){var n;return n="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,i){var n=u(o(this)),c=void 0===i?4294967295:i>>>0;if(0===c)return[];if(void 0===t)return[n];if(!e(t))return l.call(n,t,c);for(var d,r,a,Z=[],b=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),m=0,h=new RegExp(t.source,b+"g");(d=s.call(h,n))&&!((r=h.lastIndex)>m&&(Z.push(n.slice(m,d.index)),d.length>1&&d.index<n.length&&I.apply(Z,d.slice(1)),a=d[0].length,m=r,Z.length>=c));)h.lastIndex===d.index&&h.lastIndex++;return m===n.length?!a&&h.test("")||Z.push(""):Z.push(n.slice(m)),Z.length>c?Z.slice(0,c):Z}:"0".split(void 0,0).length?function(t,i){return void 0===t&&0===i?[]:l.call(this,t,i)}:l,[function(l,i){var e=o(this),c=null==l?void 0:l[t];return void 0!==c?c.call(l,e,i):n.call(u(e),l,i)},function(t,e){var o=c(this),s=u(t),b=i(n,o,s,e,n!==l);if(b.done)return b.value;var m=d(o,RegExp),I=o.unicode,G=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(h?"g":"y"),y=new m(h?"^(?:"+o.source+")":o,G),g=void 0===e?4294967295:e>>>0;if(0===g)return[];if(0===s.length)return null===Z(y,s)?[s]:[];for(var X=0,V=0,W=[];V<s.length;){y.lastIndex=h?0:V;var C,R=Z(y,h?s.slice(V):s);if(null===R||(C=p(a(y.lastIndex+(h?V:0)),s.length))===X)V=r(s,V,I);else{if(W.push(s.slice(X,V)),W.length===g)return W;for(var f=1;f<=R.length-1;f++)if(W.push(R[f]),W.length===g)return W;V=X=C}}return W.push(s.slice(X)),W}]}),!!m((function(){var t=/(?:)/,l=t.exec;t.exec=function(){return l.apply(this,arguments)};var i="ab".split(t);return 2!==i.length||"a"!==i[0]||"b"!==i[1]})),h)},function(t,l,i){"use strict";var n,e=i(0),c=i(24).f,o=i(10),d=i(15),r=i(133),a=i(22),u=i(134),Z=i(5),s="".startsWith,b=Math.min,m=u("startsWith");e({target:"String",proto:!0,forced:!!(Z||m||(n=c(String.prototype,"startsWith"),!n||n.writable))&&!m},{startsWith:function(t){var l=d(a(this));r(t);var i=o(b(arguments.length>1?arguments[1]:void 0,l.length)),n=d(t);return s?s.call(l,n,i):l.slice(i,i+n.length)===n}})},function(t,l,i){"use strict";var n=i(0),e=i(64).trim;n({target:"String",proto:!0,forced:i(135)("trim")},{trim:function(){return e(this)}})},function(t,l,i){"use strict";var n=i(0),e=i(64).end,c=i(135)("trimEnd"),o=c?function(){return e(this)}:"".trimEnd;n({target:"String",proto:!0,forced:c},{trimEnd:o,trimRight:o})},function(t,l,i){"use strict";var n=i(0),e=i(64).start,c=i(135)("trimStart"),o=c?function(){return e(this)}:"".trimStart;n({target:"String",proto:!0,forced:c},{trimStart:o,trimLeft:o})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("anchor")},{anchor:function(t){return e(this,"a","name",t)}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("big")},{big:function(){return e(this,"big","","")}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("blink")},{blink:function(){return e(this,"blink","","")}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("bold")},{bold:function(){return e(this,"b","","")}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("fixed")},{fixed:function(){return e(this,"tt","","")}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("fontcolor")},{fontcolor:function(t){return e(this,"font","color",t)}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("fontsize")},{fontsize:function(t){return e(this,"font","size",t)}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("italics")},{italics:function(){return e(this,"i","","")}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("link")},{link:function(t){return e(this,"a","href",t)}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("small")},{small:function(){return e(this,"small","","")}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("strike")},{strike:function(){return e(this,"strike","","")}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("sub")},{sub:function(){return e(this,"sub","","")}})},function(t,l,i){"use strict";var n=i(0),e=i(31);n({target:"String",proto:!0,forced:i(32)("sup")},{sup:function(){return e(this,"sup","","")}})},function(t,l,i){i(43)("Float32",(function(t){return function(l,i,n){return t(this,l,i,n)}}))},function(t,l,i){i(43)("Float64",(function(t){return function(l,i,n){return t(this,l,i,n)}}))},function(t,l,i){i(43)("Int8",(function(t){return function(l,i,n){return t(this,l,i,n)}}))},function(t,l,i){i(43)("Int16",(function(t){return function(l,i,n){return t(this,l,i,n)}}))},function(t,l,i){i(43)("Int32",(function(t){return function(l,i,n){return t(this,l,i,n)}}))},function(t,l,i){i(43)("Uint8",(function(t){return function(l,i,n){return t(this,l,i,n)}}))},function(t,l,i){i(43)("Uint8",(function(t){return function(l,i,n){return t(this,l,i,n)}}),!0)},function(t,l,i){i(43)("Uint16",(function(t){return function(l,i,n){return t(this,l,i,n)}}))},function(t,l,i){i(43)("Uint32",(function(t){return function(l,i,n){return t(this,l,i,n)}}))},function(t,l,i){"use strict";var n=i(12),e=i(149),c=n.aTypedArray;(0,n.exportTypedArrayMethod)("copyWithin",(function(t,l){return e.call(c(this),t,l,arguments.length>2?arguments[2]:void 0)}))},function(t,l,i){"use strict";var n=i(12),e=i(23).every,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("every",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(12),e=i(116),c=n.aTypedArray;(0,n.exportTypedArrayMethod)("fill",(function(t){return e.apply(c(this),arguments)}))},function(t,l,i){"use strict";var n=i(12),e=i(23).filter,c=i(380),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("filter",(function(t){var l=e(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,l)}))},function(t,l,i){var n=i(381),e=i(101);t.exports=function(t,l){return n(e(t),l)}},function(t,l){t.exports=function(t,l){for(var i=0,n=l.length,e=new t(n);n>i;)e[i]=l[i++];return e}},function(t,l,i){"use strict";var n=i(12),e=i(23).find,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("find",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(12),e=i(23).findIndex,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("findIndex",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(12),e=i(23).forEach,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("forEach",(function(t){e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(136);(0,i(12).exportTypedArrayStaticMethod)("from",i(185),n)},function(t,l,i){"use strict";var n=i(12),e=i(71).includes,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("includes",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(12),e=i(71).indexOf,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("indexOf",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(4),e=i(12),c=i(87),o=i(7)("iterator"),d=n.Uint8Array,r=c.values,a=c.keys,u=c.entries,Z=e.aTypedArray,s=e.exportTypedArrayMethod,b=d&&d.prototype[o],m=!!b&&("values"==b.name||null==b.name),h=function(){return r.call(Z(this))};s("entries",(function(){return u.call(Z(this))})),s("keys",(function(){return a.call(Z(this))})),s("values",h,!m),s(o,h,!m)},function(t,l,i){"use strict";var n=i(12),e=n.aTypedArray,c=n.exportTypedArrayMethod,o=[].join;c("join",(function(t){return o.apply(e(this),arguments)}))},function(t,l,i){"use strict";var n=i(12),e=i(154),c=n.aTypedArray;(0,n.exportTypedArrayMethod)("lastIndexOf",(function(t){return e.apply(c(this),arguments)}))},function(t,l,i){"use strict";var n=i(12),e=i(23).map,c=i(101),o=n.aTypedArray;(0,n.exportTypedArrayMethod)("map",(function(t){return e(o(this),t,arguments.length>1?arguments[1]:void 0,(function(t,l){return new(c(t))(l)}))}))},function(t,l,i){"use strict";var n=i(12),e=i(136),c=n.aTypedArrayConstructor;(0,n.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,l=arguments.length,i=new(c(this))(l);l>t;)i[t]=arguments[t++];return i}),e)},function(t,l,i){"use strict";var n=i(12),e=i(88).left,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("reduce",(function(t){return e(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(12),e=i(88).right,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("reduceRight",(function(t){return e(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(12),e=n.aTypedArray,c=n.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,l=e(this).length,i=o(l/2),n=0;n<i;)t=this[n],this[n++]=this[--l],this[l]=t;return this}))},function(t,l,i){"use strict";var n=i(12),e=i(10),c=i(184),o=i(13),d=i(2),r=n.aTypedArray;(0,n.exportTypedArrayMethod)("set",(function(t){r(this);var l=c(arguments.length>1?arguments[1]:void 0,1),i=this.length,n=o(t),d=e(n.length),a=0;if(d+l>i)throw RangeError("Wrong length");for(;a<d;)this[l+a]=n[a++]}),d((function(){new Int8Array(1).set({})})))},function(t,l,i){"use strict";var n=i(12),e=i(101),c=i(2),o=n.aTypedArray,d=n.exportTypedArrayMethod,r=[].slice;d("slice",(function(t,l){for(var i=r.call(o(this),t,l),n=e(this),c=0,d=i.length,a=new n(d);d>c;)a[c]=i[c++];return a}),c((function(){new Int8Array(1).slice()})))},function(t,l,i){"use strict";var n=i(12),e=i(23).some,c=n.aTypedArray;(0,n.exportTypedArrayMethod)("some",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,l,i){"use strict";var n=i(12),e=i(4),c=i(2),o=i(3),d=i(10),r=i(155),a=i(156),u=i(157),Z=i(48),s=i(123),b=n.aTypedArray,m=n.exportTypedArrayMethod,h=e.Uint16Array,I=h&&h.prototype.sort,p=!!I&&!c((function(){var t=new h(2);t.sort(null),t.sort({})})),G=!!I&&!c((function(){if(Z)return Z<74;if(a)return a<67;if(u)return!0;if(s)return s<602;var t,l,i=new h(516),n=Array(516);for(t=0;t<516;t++)l=t%4,i[t]=515-t,n[t]=t-2*l+3;for(i.sort((function(t,l){return(t/4|0)-(l/4|0)})),t=0;t<516;t++)if(i[t]!==n[t])return!0}));m("sort",(function(t){if(void 0!==t&&o(t),G)return I.call(this,t);b(this);var l,i=d(this.length),n=Array(i);for(l=0;l<i;l++)n[l]=this[l];for(n=r(this,function(t){return function(l,i){return void 0!==t?+t(l,i)||0:i!=i?-1:l!=l?1:0===l&&0===i?1/l>0&&1/i<0?1:-1:l>i}}(t)),l=0;l<i;l++)this[l]=n[l];return this}),!G||p)},function(t,l,i){"use strict";var n=i(12),e=i(10),c=i(50),o=i(101),d=n.aTypedArray;(0,n.exportTypedArrayMethod)("subarray",(function(t,l){var i=d(this),n=i.length,r=c(t,n);return new(o(i))(i.buffer,i.byteOffset+r*i.BYTES_PER_ELEMENT,e((void 0===l?n:c(l,n))-r))}))},function(t,l,i){"use strict";var n=i(4),e=i(12),c=i(2),o=n.Int8Array,d=e.aTypedArray,r=e.exportTypedArrayMethod,a=[].toLocaleString,u=[].slice,Z=!!o&&c((function(){a.call(new o(1))}));r("toLocaleString",(function(){return a.apply(Z?u.call(d(this)):d(this),arguments)}),c((function(){return[1,2].toLocaleString()!=new o([1,2]).toLocaleString()}))||!c((function(){o.prototype.toLocaleString.call([1,2])})))},function(t,l,i){"use strict";var n=i(12).exportTypedArrayMethod,e=i(2),c=i(4).Uint8Array,o=c&&c.prototype||{},d=[].toString,r=[].join;e((function(){d.call({})}))&&(d=function(){return r.call(this)});var a=o.toString!=d;n("toString",d,a)},function(t,l,i){"use strict";i(90)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),i(186))},function(t,l,i){i(405)},function(t,l,i){"use strict";var n=i(0),e=i(27),c=i(42),o=i(26),d=i(18),r=i(38),a=i(6),u=i(15),Z=function(t,l){var i=this;if(!(i instanceof Z))return new Z(t,l);c&&(i=c(new Error(void 0),e(i))),void 0!==l&&d(i,"message",u(l));var n=[];return a(t,n.push,{that:n}),d(i,"errors",n),i};Z.prototype=o(Error.prototype,{constructor:r(5,Z),message:r(5,""),name:r(5,"AggregateError")}),n({global:!0},{AggregateError:Z})},function(t,l,i){var n=i(0),e=i(51),c=Object.isFrozen,o=function(t,l){if(!c||!e(t)||!c(t))return!1;for(var i,n=0,o=t.length;n<o;)if(!("string"==typeof(i=t[n++])||l&&void 0===i))return!1;return 0!==o};n({target:"Array",stat:!0},{isTemplateObject:function(t){if(!o(t,!0))return!1;var l=t.raw;return!(l.length!==t.length||!o(l,!1))}})},function(t,l,i){"use strict";var n=i(9),e=i(35),c=i(13),o=i(10),d=i(14).f;n&&!("lastIndex"in[])&&(d(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),l=o(t.length);return 0==l?0:l-1}}),e("lastIndex"))},function(t,l,i){"use strict";var n=i(9),e=i(35),c=i(13),o=i(10),d=i(14).f;n&&!("lastItem"in[])&&(d(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),l=o(t.length);return 0==l?void 0:t[l-1]},set:function(t){var l=c(this),i=o(l.length);return l[0==i?0:i-1]=t}}),e("lastItem"))},function(t,l,i){"use strict";var n=i(0),e=i(33),c=i(18),o=i(16),d=i(7),r=i(410),a=i(5),u=d("toStringTag"),Z=function(){e(this,Z)};Z.prototype=r,o(r,u)||c(r,u,"AsyncIterator"),o(r,"constructor")&&r.constructor!==Object||c(r,"constructor",Z),n({global:!0,forced:a},{AsyncIterator:Z})},function(t,l,i){var n,e,c=i(4),o=i(83),d=i(27),r=i(16),a=i(18),u=i(7),Z=i(5),s=u("asyncIterator"),b=c.AsyncIterator,m=o.AsyncIteratorPrototype;if(!Z)if(m)n=m;else if("function"==typeof b)n=b.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{e=d(d(d(Function("return async function*(){}()")()))),d(e)===Object.prototype&&(n=e)}catch(t){}n||(n={}),r(n,s)||a(n,s,(function(){return this})),t.exports=n},function(t,l,i){"use strict";var n=i(0),e=i(1),c=i(56)((function(t,l){var i=this,n=i.iterator;return t.resolve(e(i.next.apply(n,l))).then((function(t){return e(t).done?(i.done=!0,{done:!0,value:void 0}):{done:!1,value:[i.index++,t.value]}}))}));n({target:"AsyncIterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:e(this),index:0})}})},function(t,l,i){"use strict";var n=i(0),e=i(1),c=i(80),o=i(56)((function(t,l){var i=this;return new t((function(n,c){var o=function(){try{t.resolve(e(i.next.apply(i.iterator,i.remaining?[]:l))).then((function(t){try{e(t).done?(i.done=!0,n({done:!0,value:void 0})):i.remaining?(i.remaining--,o()):n({done:!1,value:t.value})}catch(t){c(t)}}),c)}catch(t){c(t)}};o()}))}));n({target:"AsyncIterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,l,i){"use strict";var n=i(0),e=i(81).every;n({target:"AsyncIterator",proto:!0,real:!0},{every:function(t){return e(this,t)}})},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(1),o=i(56)((function(t,l){var i=this,n=i.filterer;return new t((function(e,o){var d=function(){try{t.resolve(c(i.next.apply(i.iterator,l))).then((function(l){try{if(c(l).done)i.done=!0,e({done:!0,value:void 0});else{var r=l.value;t.resolve(n(r)).then((function(t){t?e({done:!1,value:r}):d()}),o)}}catch(t){o(t)}}),o)}catch(t){o(t)}};d()}))}));n({target:"AsyncIterator",proto:!0,real:!0},{filter:function(t){return new o({iterator:c(this),filterer:e(t)})}})},function(t,l,i){"use strict";var n=i(0),e=i(81).find;n({target:"AsyncIterator",proto:!0,real:!0},{find:function(t){return e(this,t)}})},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(1),o=i(56),d=i(187),r=o((function(t){var l,i=this,n=i.mapper;return new t((function(o,r){var a=function(){try{t.resolve(c(i.next.call(i.iterator))).then((function(a){try{c(a).done?(i.done=!0,o({done:!0,value:void 0})):t.resolve(n(a.value)).then((function(t){try{return i.innerIterator=l=d(t),i.innerNext=e(l.next),u()}catch(t){r(t)}}),r)}catch(t){r(t)}}),r)}catch(t){r(t)}},u=function(){if(l=i.innerIterator)try{t.resolve(c(i.innerNext.call(l))).then((function(t){try{c(t).done?(i.innerIterator=i.innerNext=null,a()):o({done:!1,value:t.value})}catch(t){r(t)}}),r)}catch(t){r(t)}else a()};u()}))}));n({target:"AsyncIterator",proto:!0,real:!0},{flatMap:function(t){return new r({iterator:c(this),mapper:e(t),innerIterator:null,innerNext:null})}})},function(t,l,i){"use strict";var n=i(0),e=i(81).forEach;n({target:"AsyncIterator",proto:!0,real:!0},{forEach:function(t){return e(this,t)}})},function(t,l,i){var n=i(0),e=i(61),c=i(1),o=i(13),d=i(56),r=i(187),a=i(41),u=i(52),Z=i(102),s=i(7),b=i(188),m=s("asyncIterator"),h=e.AsyncIterator,I=d((function(t,l){return c(this.next.apply(this.iterator,l))}),!0);n({target:"AsyncIterator",stat:!0},{from:function(t){var l,i=o(t),n=Z(i[m]);return void 0!==n&&(l=r(i,n))instanceof h?l:void 0===l&&void 0!==(n=u(i))?new b(a(i,n)):new I({iterator:void 0!==l?l:i})}})},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(1),o=i(56)((function(t,l){var i=this,n=i.mapper;return t.resolve(c(i.next.apply(i.iterator,l))).then((function(l){return c(l).done?(i.done=!0,{done:!0,value:void 0}):t.resolve(n(l.value)).then((function(t){return{done:!1,value:t}}))}))}));n({target:"AsyncIterator",proto:!0,real:!0},{map:function(t){return new o({iterator:c(this),mapper:e(t)})}})},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(1),o=i(11)("Promise");n({target:"AsyncIterator",proto:!0,real:!0},{reduce:function(t){var l=c(this),i=e(l.next),n=arguments.length<2,d=n?void 0:arguments[1];return e(t),new o((function(e,r){var a=function(){try{o.resolve(c(i.call(l))).then((function(l){try{if(c(l).done)n?r(TypeError("Reduce of empty iterator with no initial value")):e(d);else{var i=l.value;n?(n=!1,d=i,a()):o.resolve(t(d,i)).then((function(t){d=t,a()}),r)}}catch(t){r(t)}}),r)}catch(t){r(t)}};a()}))}})},function(t,l,i){"use strict";var n=i(0),e=i(81).some;n({target:"AsyncIterator",proto:!0,real:!0},{some:function(t){return e(this,t)}})},function(t,l,i){"use strict";var n=i(0),e=i(1),c=i(80),o=i(56)((function(t,l){var i,n,e=this.iterator;return this.remaining--?this.next.apply(e,l):(n={done:!0,value:void 0},this.done=!0,void 0!==(i=e.return)?t.resolve(i.call(e)).then((function(){return n})):n)}));n({target:"AsyncIterator",proto:!0,real:!0},{take:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,l,i){"use strict";var n=i(0),e=i(81).toArray;n({target:"AsyncIterator",proto:!0,real:!0},{toArray:function(){return e(this)}})},function(t,l,i){var n=i(0),e=i(189),c=i(11),o=i(26),d=function(){var t=c("Object","freeze");return t?t(o(null)):o(null)};n({global:!0},{compositeKey:function(){return e.apply(Object,arguments).get("object",d)}})},function(t,l,i){var n=i(0),e=i(189),c=i(11);n({global:!0},{compositeSymbol:function(){return 1===arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):e.apply(null,arguments).get("symbol",c("Symbol"))}})},function(t,l,i){i(160)},function(t,l,i){"use strict";var n=i(0),e=i(4),c=i(33),o=i(18),d=i(2),r=i(16),a=i(7),u=i(121).IteratorPrototype,Z=i(5),s=a("iterator"),b=a("toStringTag"),m=e.Iterator,h=Z||"function"!=typeof m||m.prototype!==u||!d((function(){m({})})),I=function(){c(this,I)};Z&&o(u={},s,(function(){return this})),r(u,b)||o(u,b,"Iterator"),!h&&r(u,"constructor")&&u.constructor!==Object||o(u,"constructor",I),I.prototype=u,n({global:!0,forced:h},{Iterator:I})},function(t,l,i){"use strict";var n=i(0),e=i(1),c=i(57)((function(t){var l=e(this.next.apply(this.iterator,t));if(!(this.done=!!l.done))return[this.index++,l.value]}));n({target:"Iterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:e(this),index:0})}})},function(t,l,i){"use strict";var n=i(0),e=i(1),c=i(80),o=i(57)((function(t){for(var l,i=this.iterator,n=this.next;this.remaining;)if(this.remaining--,l=e(n.call(i)),this.done=!!l.done)return;if(l=e(n.apply(i,t)),!(this.done=!!l.done))return l.value}));n({target:"Iterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,l,i){"use strict";var n=i(0),e=i(6),c=i(3),o=i(1);n({target:"Iterator",proto:!0,real:!0},{every:function(t){return o(this),c(t),!e(this,(function(l,i){if(!t(l))return i()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(1),o=i(57),d=i(117),r=o((function(t){for(var l,i,n=this.iterator,e=this.filterer,o=this.next;;){if(l=c(o.apply(n,t)),this.done=!!l.done)return;if(i=l.value,d(n,e,i))return i}}));n({target:"Iterator",proto:!0,real:!0},{filter:function(t){return new r({iterator:c(this),filterer:e(t)})}})},function(t,l,i){"use strict";var n=i(0),e=i(6),c=i(3),o=i(1);n({target:"Iterator",proto:!0,real:!0},{find:function(t){return o(this),c(t),e(this,(function(l,i){if(t(l))return i(l)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(1),o=i(52),d=i(57),r=i(85),a=d((function(){for(var t,l,i,n,d=this.iterator,a=this.mapper;;)try{if(n=this.innerIterator){if(!(t=c(this.innerNext.call(n))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=c(this.next.call(d)),this.done=!!t.done)return;if(l=a(t.value),void 0===(i=o(l)))throw TypeError(".flatMap callback should return an iterable object");this.innerIterator=n=c(i.call(l)),this.innerNext=e(n.next)}catch(t){r(d,"throw",t)}}));n({target:"Iterator",proto:!0,real:!0},{flatMap:function(t){return new a({iterator:c(this),mapper:e(t),innerIterator:null,innerNext:null})}})},function(t,l,i){"use strict";var n=i(0),e=i(6),c=i(1);n({target:"Iterator",proto:!0,real:!0},{forEach:function(t){e(c(this),t,{IS_ITERATOR:!0})}})},function(t,l,i){var n=i(0),e=i(61),c=i(1),o=i(13),d=i(57),r=i(41),a=i(52),u=e.Iterator,Z=d((function(t){var l=c(this.next.apply(this.iterator,t));if(!(this.done=!!l.done))return l.value}),!0);n({target:"Iterator",stat:!0},{from:function(t){var l,i=o(t),n=a(i);if(null!=n){if((l=r(i,n))instanceof u)return l}else l=i;return new Z({iterator:l})}})},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(1),o=i(57),d=i(117),r=o((function(t){var l=this.iterator,i=c(this.next.apply(l,t));if(!(this.done=!!i.done))return d(l,this.mapper,i.value)}));n({target:"Iterator",proto:!0,real:!0},{map:function(t){return new r({iterator:c(this),mapper:e(t)})}})},function(t,l,i){"use strict";var n=i(0),e=i(6),c=i(3),o=i(1);n({target:"Iterator",proto:!0,real:!0},{reduce:function(t){o(this),c(t);var l=arguments.length<2,i=l?void 0:arguments[1];if(e(this,(function(n){l?(l=!1,i=n):i=t(i,n)}),{IS_ITERATOR:!0}),l)throw TypeError("Reduce of empty iterator with no initial value");return i}})},function(t,l,i){"use strict";var n=i(0),e=i(6),c=i(3),o=i(1);n({target:"Iterator",proto:!0,real:!0},{some:function(t){return o(this),c(t),e(this,(function(l,i){if(t(l))return i()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(1),c=i(80),o=i(57),d=i(85),r=o((function(t){var l=this.iterator;if(!this.remaining--)return this.done=!0,d(l,"normal",void 0);var i=e(this.next.apply(l,t));return(this.done=!!i.done)?void 0:i.value}));n({target:"Iterator",proto:!0,real:!0},{take:function(t){return new r({iterator:e(this),remaining:c(t)})}})},function(t,l,i){"use strict";var n=i(0),e=i(6),c=i(1),o=[].push;n({target:"Iterator",proto:!0,real:!0},{toArray:function(){var t=[];return e(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(103);n({target:"Map",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(19),d=i(37),r=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{every:function(t){var l=c(this),i=d(l),n=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(i,(function(t,i,e){if(!n(i,t,l))return e()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(19),a=i(28),u=i(37),Z=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{filter:function(t){var l=o(this),i=u(l),n=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(l,c("Map"))),s=d(e.set);return Z(i,(function(t,i){n(i,t,l)&&s.call(e,t,i)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(19),d=i(37),r=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{find:function(t){var l=c(this),i=d(l),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(i,(function(t,i,e){if(n(i,t,l))return e(i)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(19),d=i(37),r=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{findKey:function(t){var l=c(this),i=d(l),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(i,(function(t,i,e){if(n(i,t,l))return e(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,l,i){i(0)({target:"Map",stat:!0},{from:i(104)})},function(t,l,i){"use strict";var n=i(0),e=i(6),c=i(3);n({target:"Map",stat:!0},{groupBy:function(t,l){var i=new this;c(l);var n=c(i.has),o=c(i.get),d=c(i.set);return e(t,(function(t){var e=l(t);n.call(i,e)?o.call(i,e).push(t):d.call(i,e,[t])})),i}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(37),d=i(449),r=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{includes:function(t){return r(o(c(this)),(function(l,i,n){if(d(i,t))return n()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,l){t.exports=function(t,l){return t===l||t!=t&&l!=l}},function(t,l,i){"use strict";var n=i(0),e=i(6),c=i(3);n({target:"Map",stat:!0},{keyBy:function(t,l){var i=new this;c(l);var n=c(i.set);return e(t,(function(t){n.call(i,l(t),t)})),i}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(37),d=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{keyOf:function(t){return d(o(c(this)),(function(l,i,n){if(i===t)return n(l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(19),a=i(28),u=i(37),Z=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{mapKeys:function(t){var l=o(this),i=u(l),n=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(l,c("Map"))),s=d(e.set);return Z(i,(function(t,i){s.call(e,n(i,t,l),i)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(19),a=i(28),u=i(37),Z=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{mapValues:function(t){var l=o(this),i=u(l),n=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(l,c("Map"))),s=d(e.set);return Z(i,(function(t,i){s.call(e,t,n(i,t,l))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(3),d=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{merge:function(t){for(var l=c(this),i=o(l.set),n=arguments.length,e=0;e<n;)d(arguments[e++],i,{that:l,AS_ENTRIES:!0});return l}})},function(t,l,i){i(0)({target:"Map",stat:!0},{of:i(105)})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(3),d=i(37),r=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{reduce:function(t){var l=c(this),i=d(l),n=arguments.length<2,e=n?void 0:arguments[1];if(o(t),r(i,(function(i,c){n?(n=!1,e=c):e=t(e,c,i,l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),n)throw TypeError("Reduce of empty map with no initial value");return e}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(19),d=i(37),r=i(6);n({target:"Map",proto:!0,real:!0,forced:e},{some:function(t){var l=c(this),i=d(l),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(i,(function(t,i,e){if(n(i,t,l))return e()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(3);n({target:"Map",proto:!0,real:!0,forced:e},{update:function(t,l){var i=c(this),n=arguments.length;o(l);var e=i.has(t);if(!e&&n<3)throw TypeError("Updating absent value");var d=e?i.get(t):o(n>2?arguments[2]:void 0)(t,i);return i.set(t,l(d,t,i)),i}})},function(t,l,i){"use strict";i(0)({target:"Map",proto:!0,real:!0,forced:i(5)},{updateOrInsert:i(138)})},function(t,l,i){"use strict";i(0)({target:"Map",proto:!0,real:!0,forced:i(5)},{upsert:i(138)})},function(t,l,i){var n=i(0),e=Math.min,c=Math.max;n({target:"Math",stat:!0},{clamp:function(t,l,i){return e(i,c(l,t))}})},function(t,l,i){i(0)({target:"Math",stat:!0},{DEG_PER_RAD:Math.PI/180})},function(t,l,i){var n=i(0),e=180/Math.PI;n({target:"Math",stat:!0},{degrees:function(t){return t*e}})},function(t,l,i){var n=i(0),e=i(190),c=i(163);n({target:"Math",stat:!0},{fscale:function(t,l,i,n,o){return c(e(t,l,i,n,o))}})},function(t,l,i){i(0)({target:"Math",stat:!0},{iaddh:function(t,l,i,n){var e=t>>>0,c=i>>>0;return(l>>>0)+(n>>>0)+((e&c|(e|c)&~(e+c>>>0))>>>31)|0}})},function(t,l,i){i(0)({target:"Math",stat:!0},{imulh:function(t,l){var i=+t,n=+l,e=65535&i,c=65535&n,o=i>>16,d=n>>16,r=(o*c>>>0)+(e*c>>>16);return o*d+(r>>16)+((e*d>>>0)+(65535&r)>>16)}})},function(t,l,i){i(0)({target:"Math",stat:!0},{isubh:function(t,l,i,n){var e=t>>>0,c=i>>>0;return(l>>>0)-(n>>>0)-((~e&c|~(e^c)&e-c>>>0)>>>31)|0}})},function(t,l,i){i(0)({target:"Math",stat:!0},{RAD_PER_DEG:180/Math.PI})},function(t,l,i){var n=i(0),e=Math.PI/180;n({target:"Math",stat:!0},{radians:function(t){return t*e}})},function(t,l,i){i(0)({target:"Math",stat:!0},{scale:i(190)})},function(t,l,i){var n=i(0),e=i(1),c=i(164),o=i(62),d=i(17),r=d.set,a=d.getterFor("Seeded Random Generator"),u=o((function(t){r(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=a(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));n({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var l=e(t).seed;if(!c(l))throw TypeError('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new u(l)}})},function(t,l,i){i(0)({target:"Math",stat:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,l,i){i(0)({target:"Math",stat:!0},{umulh:function(t,l){var i=+t,n=+l,e=65535&i,c=65535&n,o=i>>>16,d=n>>>16,r=(o*c>>>0)+(e*c>>>16);return o*d+(r>>>16)+((e*d>>>0)+(65535&r)>>>16)}})},function(t,l,i){"use strict";var n=i(0),e=i(30),c=i(130),o=/^[\da-z]+$/;n({target:"Number",stat:!0},{fromString:function(t,l){var i,n,d=1;if("string"!=typeof t)throw TypeError("Invalid number representation");if(!t.length)throw SyntaxError("Invalid number representation");if("-"==t.charAt(0)&&(d=-1,!(t=t.slice(1)).length))throw SyntaxError("Invalid number representation");if((i=void 0===l?10:e(l))<2||i>36)throw RangeError("Invalid radix");if(!o.test(t)||(n=c(t,i)).toString(i)!==t)throw SyntaxError("Invalid number representation");return d*n}})},function(t,l,i){"use strict";var n=i(0),e=i(139);n({target:"Object",stat:!0},{iterateEntries:function(t){return new e(t,"entries")}})},function(t,l,i){"use strict";var n=i(0),e=i(139);n({target:"Object",stat:!0},{iterateKeys:function(t){return new e(t,"keys")}})},function(t,l,i){"use strict";var n=i(0),e=i(139);n({target:"Object",stat:!0},{iterateValues:function(t){return new e(t,"values")}})},function(t,l,i){"use strict";var n=i(0),e=i(9),c=i(54),o=i(3),d=i(1),r=i(8),a=i(33),u=i(14).f,Z=i(18),s=i(36),b=i(41),m=i(102),h=i(6),I=i(174),p=i(7),G=i(17),y=p("observable"),g=G.get,X=G.set,V=function(t){var l=t.cleanup;if(l){t.cleanup=void 0;try{l()}catch(t){I(t)}}},W=function(t){return void 0===t.observer},C=function(t){var l=t.facade;if(!e){l.closed=!0;var i=t.subscriptionObserver;i&&(i.closed=!0)}t.observer=void 0},R=function(t,l){var i,n=X(this,{cleanup:void 0,observer:d(t),subscriptionObserver:void 0});e||(this.closed=!1);try{(i=m(t.start))&&i.call(t,this)}catch(t){I(t)}if(!W(n)){var c=n.subscriptionObserver=new f(this);try{var r=l(c),a=r;null!=r&&(n.cleanup="function"==typeof r.unsubscribe?function(){a.unsubscribe()}:o(r))}catch(t){return void c.error(t)}W(n)&&V(n)}};R.prototype=s({},{unsubscribe:function(){var t=g(this);W(t)||(C(t),V(t))}}),e&&u(R.prototype,"closed",{configurable:!0,get:function(){return W(g(this))}});var f=function(t){X(this,{subscription:t}),e||(this.closed=!1)};f.prototype=s({},{next:function(t){var l=g(g(this).subscription);if(!W(l)){var i=l.observer;try{var n=m(i.next);n&&n.call(i,t)}catch(t){I(t)}}},error:function(t){var l=g(g(this).subscription);if(!W(l)){var i=l.observer;C(l);try{var n=m(i.error);n?n.call(i,t):I(t)}catch(t){I(t)}V(l)}},complete:function(){var t=g(g(this).subscription);if(!W(t)){var l=t.observer;C(t);try{var i=m(l.complete);i&&i.call(l)}catch(t){I(t)}V(t)}}}),e&&u(f.prototype,"closed",{configurable:!0,get:function(){return W(g(g(this).subscription))}});var S=function(t){a(this,S,"Observable"),X(this,{subscriber:o(t)})};s(S.prototype,{subscribe:function(t){var l=arguments.length;return new R("function"==typeof t?{next:t,error:l>1?arguments[1]:void 0,complete:l>2?arguments[2]:void 0}:r(t)?t:{},g(this).subscriber)}}),s(S,{from:function(t){var l="function"==typeof this?this:S,i=m(d(t)[y]);if(i){var n=d(i.call(t));return n.constructor===l?n:new l((function(t){return n.subscribe(t)}))}var e=b(t);return new l((function(t){h(e,(function(l,i){if(t.next(l),t.closed)return i()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))},of:function(){for(var t="function"==typeof this?this:S,l=arguments.length,i=new Array(l),n=0;n<l;)i[n]=arguments[n++];return new t((function(t){for(var n=0;n<l;n++)if(t.next(i[n]),t.closed)return;t.complete()}))}}),Z(S.prototype,y,(function(){return this})),n({global:!0},{Observable:S}),c("Observable")},function(t,l,i){i(175)},function(t,l,i){i(481)},function(t,l,i){"use strict";var n=i(0),e=i(3),c=i(11),o=i(78),d=i(95),r=i(6);n({target:"Promise",stat:!0},{any:function(t){var l=this,i=o.f(l),n=i.resolve,a=i.reject,u=d((function(){var i=e(l.resolve),o=[],d=0,u=1,Z=!1;r(t,(function(t){var e=d++,r=!1;o.push(void 0),u++,i.call(l,t).then((function(t){r||Z||(Z=!0,n(t))}),(function(t){r||Z||(r=!0,o[e]=t,--u||a(new(c("AggregateError"))(o,"No one promise resolved")))}))})),--u||a(new(c("AggregateError"))(o,"No one promise resolved"))}));return u.error&&a(u.value),i.promise}})},function(t,l,i){"use strict";var n=i(0),e=i(78),c=i(95);n({target:"Promise",stat:!0},{try:function(t){var l=e.f(this),i=c(t);return(i.error?l.reject:l.resolve)(i.value),l.promise}})},function(t,l,i){var n=i(0),e=i(44),c=i(1),o=e.toKey,d=e.set;n({target:"Reflect",stat:!0},{defineMetadata:function(t,l,i){var n=arguments.length<4?void 0:o(arguments[3]);d(t,l,c(i),n)}})},function(t,l,i){var n=i(0),e=i(44),c=i(1),o=e.toKey,d=e.getMap,r=e.store;n({target:"Reflect",stat:!0},{deleteMetadata:function(t,l){var i=arguments.length<3?void 0:o(arguments[2]),n=d(c(l),i,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var e=r.get(l);return e.delete(i),!!e.size||r.delete(l)}})},function(t,l,i){var n=i(0),e=i(44),c=i(1),o=i(27),d=e.has,r=e.get,a=e.toKey,u=function(t,l,i){if(d(t,l,i))return r(t,l,i);var n=o(l);return null!==n?u(t,n,i):void 0};n({target:"Reflect",stat:!0},{getMetadata:function(t,l){var i=arguments.length<3?void 0:a(arguments[2]);return u(t,c(l),i)}})},function(t,l,i){var n=i(0),e=i(179),c=i(44),o=i(1),d=i(27),r=i(6),a=c.keys,u=c.toKey,Z=function(t,l){var i=a(t,l),n=d(t);if(null===n)return i;var c,o,u=Z(n,l);return u.length?i.length?(c=new e(i.concat(u)),r(c,(o=[]).push,{that:o}),o):u:i};n({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var l=arguments.length<2?void 0:u(arguments[1]);return Z(o(t),l)}})},function(t,l,i){var n=i(0),e=i(44),c=i(1),o=e.get,d=e.toKey;n({target:"Reflect",stat:!0},{getOwnMetadata:function(t,l){var i=arguments.length<3?void 0:d(arguments[2]);return o(t,c(l),i)}})},function(t,l,i){var n=i(0),e=i(44),c=i(1),o=e.keys,d=e.toKey;n({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var l=arguments.length<2?void 0:d(arguments[1]);return o(c(t),l)}})},function(t,l,i){var n=i(0),e=i(44),c=i(1),o=i(27),d=e.has,r=e.toKey,a=function(t,l,i){if(d(t,l,i))return!0;var n=o(l);return null!==n&&a(t,n,i)};n({target:"Reflect",stat:!0},{hasMetadata:function(t,l){var i=arguments.length<3?void 0:r(arguments[2]);return a(t,c(l),i)}})},function(t,l,i){var n=i(0),e=i(44),c=i(1),o=e.has,d=e.toKey;n({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,l){var i=arguments.length<3?void 0:d(arguments[2]);return o(t,c(l),i)}})},function(t,l,i){var n=i(0),e=i(44),c=i(1),o=e.toKey,d=e.set;n({target:"Reflect",stat:!0},{metadata:function(t,l){return function(i,n){d(t,l,c(i),o(n))}}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(191);n({target:"Set",proto:!0,real:!0,forced:e},{addAll:function(){return c.apply(this,arguments)}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(103);n({target:"Set",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(28),a=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{difference:function(t){var l=o(this),i=new(r(l,c("Set")))(l),n=d(i.delete);return a(t,(function(t){n.call(i,t)})),i}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(19),d=i(58),r=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{every:function(t){var l=c(this),i=d(l),n=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(i,(function(t,i){if(!n(t,t,l))return i()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(19),a=i(28),u=i(58),Z=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{filter:function(t){var l=o(this),i=u(l),n=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(l,c("Set"))),s=d(e.add);return Z(i,(function(t){n(t,t,l)&&s.call(e,t)}),{IS_ITERATOR:!0}),e}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(19),d=i(58),r=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{find:function(t){var l=c(this),i=d(l),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(i,(function(t,i){if(n(t,t,l))return i(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,l,i){i(0)({target:"Set",stat:!0},{from:i(104)})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(28),a=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{intersection:function(t){var l=o(this),i=new(r(l,c("Set"))),n=d(l.has),e=d(i.add);return a(t,(function(t){n.call(l,t)&&e.call(i,t)})),i}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(3),d=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{isDisjointFrom:function(t){var l=c(this),i=o(l.has);return!d(t,(function(t,n){if(!0===i.call(l,t))return n()}),{INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(41),a=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{isSubsetOf:function(t){var l=r(this),i=o(t),n=i.has;return"function"!=typeof n&&(i=new(c("Set"))(t),n=d(i.has)),!a(l,(function(t,l){if(!1===n.call(i,t))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(3),d=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{isSupersetOf:function(t){var l=c(this),i=o(l.has);return!d(t,(function(t,n){if(!1===i.call(l,t))return n()}),{INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(58),d=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{join:function(t){var l=c(this),i=o(l),n=void 0===t?",":String(t),e=[];return d(i,e.push,{that:e,IS_ITERATOR:!0}),e.join(n)}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(19),a=i(28),u=i(58),Z=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{map:function(t){var l=o(this),i=u(l),n=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(l,c("Set"))),s=d(e.add);return Z(i,(function(t){s.call(e,n(t,t,l))}),{IS_ITERATOR:!0}),e}})},function(t,l,i){i(0)({target:"Set",stat:!0},{of:i(105)})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(3),d=i(58),r=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{reduce:function(t){var l=c(this),i=d(l),n=arguments.length<2,e=n?void 0:arguments[1];if(o(t),r(i,(function(i){n?(n=!1,e=i):e=t(e,i,i,l)}),{IS_ITERATOR:!0}),n)throw TypeError("Reduce of empty set with no initial value");return e}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(1),o=i(19),d=i(58),r=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{some:function(t){var l=c(this),i=d(l),n=o(t,arguments.length>1?arguments[1]:void 0,3);return r(i,(function(t,i){if(n(t,t,l))return i()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(28),a=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{symmetricDifference:function(t){var l=o(this),i=new(r(l,c("Set")))(l),n=d(i.delete),e=d(i.add);return a(t,(function(t){n.call(i,t)||e.call(i,t)})),i}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(11),o=i(1),d=i(3),r=i(28),a=i(6);n({target:"Set",proto:!0,real:!0,forced:e},{union:function(t){var l=o(this),i=new(r(l,c("Set")))(l);return a(t,d(i.add),{that:i}),i}})},function(t,l,i){"use strict";var n=i(0),e=i(66).charAt;n({target:"String",proto:!0,forced:i(2)((function(){return"𠮷"!=="𠮷".at(0)}))},{at:function(t){return e(this,t)}})},function(t,l,i){"use strict";var n=i(0),e=i(62),c=i(22),o=i(15),d=i(17),r=i(66),a=r.codeAt,u=r.charAt,Z=d.set,s=d.getterFor("String Iterator"),b=e((function(t){Z(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,l=s(this),i=l.string,n=l.index;return n>=i.length?{value:void 0,done:!0}:(t=u(i,n),l.index+=t.length,{value:{codePoint:a(t,0),position:n},done:!1})}));n({target:"String",proto:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,l,i){i(181)},function(t,l,i){i(514)},function(t,l,i){"use strict";var n=i(0),e=i(22),c=i(79),o=i(15),d=i(65),r=i(183),a=i(7),u=i(5),Z=a("replace"),s=RegExp.prototype,b=Math.max,m=function(t,l,i){return i>t.length?-1:""===l?i:t.indexOf(l,i)};n({target:"String",proto:!0},{replaceAll:function(t,l){var i,n,a,h,I,p,G,y,g=e(this),X=0,V=0,W="";if(null!=t){if((i=c(t))&&!~o(e("flags"in s?t.flags:d.call(t))).indexOf("g"))throw TypeError("`.replaceAll` does not allow non-global regexes");if(void 0!==(n=t[Z]))return n.call(t,g,l);if(u&&i)return o(g).replace(t,l)}for(a=o(g),h=o(t),(I="function"==typeof l)||(l=o(l)),p=h.length,G=b(1,p),X=m(a,h,0);-1!==X;)y=I?o(l(h,X,a)):r(h,a,X,[],void 0,l),W+=a.slice(V,X)+y,V=X+p,X=m(a,h,X+G);return V<a.length&&(W+=a.slice(V)),W}})},function(t,l,i){i(21)("asyncDispose")},function(t,l,i){i(21)("dispose")},function(t,l,i){i(21)("observable")},function(t,l,i){i(21)("patternMatch")},function(t,l,i){i(21)("replaceAll")},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(103);n({target:"WeakMap",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,l,i){i(0)({target:"WeakMap",stat:!0},{from:i(104)})},function(t,l,i){i(0)({target:"WeakMap",stat:!0},{of:i(105)})},function(t,l,i){"use strict";i(0)({target:"WeakMap",proto:!0,real:!0,forced:i(5)},{upsert:i(138)})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(191);n({target:"WeakSet",proto:!0,real:!0,forced:e},{addAll:function(){return c.apply(this,arguments)}})},function(t,l,i){"use strict";var n=i(0),e=i(5),c=i(103);n({target:"WeakSet",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,l,i){i(0)({target:"WeakSet",stat:!0},{from:i(104)})},function(t,l,i){i(0)({target:"WeakSet",stat:!0},{of:i(105)})},function(t,l,i){var n=i(4),e=i(192),c=i(151),o=i(18);for(var d in e){var r=n[d],a=r&&r.prototype;if(a&&a.forEach!==c)try{o(a,"forEach",c)}catch(t){a.forEach=c}}},function(t,l,i){var n=i(4),e=i(192),c=i(87),o=i(18),d=i(7),r=d("iterator"),a=d("toStringTag"),u=c.values;for(var Z in e){var s=n[Z],b=s&&s.prototype;if(b){if(b[r]!==u)try{o(b,r,u)}catch(t){b[r]=u}if(b[a]||o(b,a,Z),e[Z])for(var m in c)if(b[m]!==c[m])try{o(b,m,c[m])}catch(t){b[m]=c[m]}}}},function(t,l,i){var n=i(0),e=i(4),c=i(131);n({global:!0,bind:!0,enumerable:!0,forced:!e.setImmediate||!e.clearImmediate},{setImmediate:c.set,clearImmediate:c.clear})},function(t,l,i){var n=i(0),e=i(4),c=i(172),o=i(63),d=e.process;n({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var l=o&&d.domain;c(l?l.bind(t):t)}})},function(t,l,i){var n=i(0),e=i(4),c=i(39),o=[].slice,d=function(t){return function(l,i){var n=arguments.length>2,e=n?o.call(arguments,2):void 0;return t(n?function(){("function"==typeof l?l:Function(l)).apply(this,e)}:l,i)}};n({global:!0,bind:!0,forced:/MSIE .\./.test(c)},{setTimeout:d(e.setTimeout),setInterval:d(e.setInterval)})},function(t,l,i){"use strict";i(180);var n,e=i(0),c=i(9),o=i(193),d=i(4),r=i(114),a=i(25),u=i(33),Z=i(16),s=i(167),b=i(152),m=i(66).codeAt,h=i(534),I=i(15),p=i(34),G=i(194),y=i(17),g=d.URL,X=G.URLSearchParams,V=G.getState,W=y.set,C=y.getterFor("URL"),R=Math.floor,f=Math.pow,S=/[A-Za-z]/,v=/[\d+-.A-Za-z]/,K=/\d/,Y=/^0x/i,J=/^[0-7]+$/,N=/^\d+$/,L=/^[\dA-Fa-f]+$/,U=/[\0\t\n\r #%/:<>?@[\\\]^|]/,H=/[\0\t\n\r #/:<>?@[\\\]^|]/,x=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,T=/[\t\n\r]/g,k=function(t,l){var i,n,e;if("["==l.charAt(0)){if("]"!=l.charAt(l.length-1))return"Invalid host";if(!(i=B(l.slice(1,-1))))return"Invalid host";t.host=i}else if(E(t)){if(l=h(l),U.test(l))return"Invalid host";if(null===(i=F(l)))return"Invalid host";t.host=i}else{if(H.test(l))return"Invalid host";for(i="",n=b(l),e=0;e<n.length;e++)i+=j(n[e],w);t.host=i}},F=function(t){var l,i,n,e,c,o,d,r=t.split(".");if(r.length&&""==r[r.length-1]&&r.pop(),(l=r.length)>4)return t;for(i=[],n=0;n<l;n++){if(""==(e=r[n]))return t;if(c=10,e.length>1&&"0"==e.charAt(0)&&(c=Y.test(e)?16:8,e=e.slice(8==c?1:2)),""===e)o=0;else{if(!(10==c?N:8==c?J:L).test(e))return t;o=parseInt(e,c)}i.push(o)}for(n=0;n<l;n++)if(o=i[n],n==l-1){if(o>=f(256,5-l))return null}else if(o>255)return null;for(d=i.pop(),n=0;n<i.length;n++)d+=i[n]*f(256,3-n);return d},B=function(t){var l,i,n,e,c,o,d,r=[0,0,0,0,0,0,0,0],a=0,u=null,Z=0,s=function(){return t.charAt(Z)};if(":"==s()){if(":"!=t.charAt(1))return;Z+=2,u=++a}for(;s();){if(8==a)return;if(":"!=s()){for(l=i=0;i<4&&L.test(s());)l=16*l+parseInt(s(),16),Z++,i++;if("."==s()){if(0==i)return;if(Z-=i,a>6)return;for(n=0;s();){if(e=null,n>0){if(!("."==s()&&n<4))return;Z++}if(!K.test(s()))return;for(;K.test(s());){if(c=parseInt(s(),10),null===e)e=c;else{if(0==e)return;e=10*e+c}if(e>255)return;Z++}r[a]=256*r[a]+e,2!=++n&&4!=n||a++}if(4!=n)return;break}if(":"==s()){if(Z++,!s())return}else if(s())return;r[a++]=l}else{if(null!==u)return;Z++,u=++a}}if(null!==u)for(o=a-u,a=7;0!=a&&o>0;)d=r[a],r[a--]=r[u+o-1],r[u+--o]=d;else if(8!=a)return;return r},z=function(t){var l,i,n,e;if("number"==typeof t){for(l=[],i=0;i<4;i++)l.unshift(t%256),t=R(t/256);return l.join(".")}if("object"==typeof t){for(l="",n=function(t){for(var l=null,i=1,n=null,e=0,c=0;c<8;c++)0!==t[c]?(e>i&&(l=n,i=e),n=null,e=0):(null===n&&(n=c),++e);return e>i&&(l=n,i=e),l}(t),i=0;i<8;i++)e&&0===t[i]||(e&&(e=!1),n===i?(l+=i?":":"::",e=!0):(l+=t[i].toString(16),i<7&&(l+=":")));return"["+l+"]"}return t},w={},A=s({},w,{" ":1,'"':1,"<":1,">":1,"`":1}),P=s({},A,{"#":1,"?":1,"{":1,"}":1}),M=s({},P,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),j=function(t,l){var i=m(t,0);return i>32&&i<127&&!Z(l,t)?t:encodeURIComponent(t)},Q={ftp:21,file:null,http:80,https:443,ws:80,wss:443},E=function(t){return Z(Q,t.scheme)},D=function(t){return""!=t.username||""!=t.password},O=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},q=function(t,l){var i;return 2==t.length&&S.test(t.charAt(0))&&(":"==(i=t.charAt(1))||!l&&"|"==i)},_=function(t){var l;return t.length>1&&q(t.slice(0,2))&&(2==t.length||"/"===(l=t.charAt(2))||"\\"===l||"?"===l||"#"===l)},$=function(t){var l=t.path,i=l.length;!i||"file"==t.scheme&&1==i&&q(l[0],!0)||l.pop()},tt=function(t){return"."===t||"%2e"===t.toLowerCase()},lt={},it={},nt={},et={},ct={},ot={},dt={},rt={},at={},ut={},Zt={},st={},bt={},mt={},ht={},It={},pt={},Gt={},yt={},gt={},Xt={},Vt=function(t,l,i,e){var c,o,d,r,a,u=i||lt,s=0,m="",h=!1,I=!1,p=!1;for(i||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,l=l.replace(x,"")),l=l.replace(T,""),c=b(l);s<=c.length;){switch(o=c[s],u){case lt:if(!o||!S.test(o)){if(i)return"Invalid scheme";u=nt;continue}m+=o.toLowerCase(),u=it;break;case it:if(o&&(v.test(o)||"+"==o||"-"==o||"."==o))m+=o.toLowerCase();else{if(":"!=o){if(i)return"Invalid scheme";m="",u=nt,s=0;continue}if(i&&(E(t)!=Z(Q,m)||"file"==m&&(D(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=m,i)return void(E(t)&&Q[t.scheme]==t.port&&(t.port=null));m="","file"==t.scheme?u=mt:E(t)&&e&&e.scheme==t.scheme?u=et:E(t)?u=rt:"/"==c[s+1]?(u=ct,s++):(t.cannotBeABaseURL=!0,t.path.push(""),u=yt)}break;case nt:if(!e||e.cannotBeABaseURL&&"#"!=o)return"Invalid scheme";if(e.cannotBeABaseURL&&"#"==o){t.scheme=e.scheme,t.path=e.path.slice(),t.query=e.query,t.fragment="",t.cannotBeABaseURL=!0,u=Xt;break}u="file"==e.scheme?mt:ot;continue;case et:if("/"!=o||"/"!=c[s+1]){u=ot;continue}u=at,s++;break;case ct:if("/"==o){u=ut;break}u=Gt;continue;case ot:if(t.scheme=e.scheme,o==n)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query;else if("/"==o||"\\"==o&&E(t))u=dt;else if("?"==o)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query="",u=gt;else{if("#"!=o){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.path.pop(),u=Gt;continue}t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query,t.fragment="",u=Xt}break;case dt:if(!E(t)||"/"!=o&&"\\"!=o){if("/"!=o){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,u=Gt;continue}u=ut}else u=at;break;case rt:if(u=at,"/"!=o||"/"!=m.charAt(s+1))continue;s++;break;case at:if("/"!=o&&"\\"!=o){u=ut;continue}break;case ut:if("@"==o){h&&(m="%40"+m),h=!0,d=b(m);for(var G=0;G<d.length;G++){var y=d[G];if(":"!=y||p){var g=j(y,M);p?t.password+=g:t.username+=g}else p=!0}m=""}else if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(h&&""==m)return"Invalid authority";s-=b(m).length+1,m="",u=Zt}else m+=o;break;case Zt:case st:if(i&&"file"==t.scheme){u=It;continue}if(":"!=o||I){if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(E(t)&&""==m)return"Invalid host";if(i&&""==m&&(D(t)||null!==t.port))return;if(r=k(t,m))return r;if(m="",u=pt,i)return;continue}"["==o?I=!0:"]"==o&&(I=!1),m+=o}else{if(""==m)return"Invalid host";if(r=k(t,m))return r;if(m="",u=bt,i==st)return}break;case bt:if(!K.test(o)){if(o==n||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)||i){if(""!=m){var X=parseInt(m,10);if(X>65535)return"Invalid port";t.port=E(t)&&X===Q[t.scheme]?null:X,m=""}if(i)return;u=pt;continue}return"Invalid port"}m+=o;break;case mt:if(t.scheme="file","/"==o||"\\"==o)u=ht;else{if(!e||"file"!=e.scheme){u=Gt;continue}if(o==n)t.host=e.host,t.path=e.path.slice(),t.query=e.query;else if("?"==o)t.host=e.host,t.path=e.path.slice(),t.query="",u=gt;else{if("#"!=o){_(c.slice(s).join(""))||(t.host=e.host,t.path=e.path.slice(),$(t)),u=Gt;continue}t.host=e.host,t.path=e.path.slice(),t.query=e.query,t.fragment="",u=Xt}}break;case ht:if("/"==o||"\\"==o){u=It;break}e&&"file"==e.scheme&&!_(c.slice(s).join(""))&&(q(e.path[0],!0)?t.path.push(e.path[0]):t.host=e.host),u=Gt;continue;case It:if(o==n||"/"==o||"\\"==o||"?"==o||"#"==o){if(!i&&q(m))u=Gt;else if(""==m){if(t.host="",i)return;u=pt}else{if(r=k(t,m))return r;if("localhost"==t.host&&(t.host=""),i)return;m="",u=pt}continue}m+=o;break;case pt:if(E(t)){if(u=Gt,"/"!=o&&"\\"!=o)continue}else if(i||"?"!=o)if(i||"#"!=o){if(o!=n&&(u=Gt,"/"!=o))continue}else t.fragment="",u=Xt;else t.query="",u=gt;break;case Gt:if(o==n||"/"==o||"\\"==o&&E(t)||!i&&("?"==o||"#"==o)){if(".."===(a=(a=m).toLowerCase())||"%2e."===a||".%2e"===a||"%2e%2e"===a?($(t),"/"==o||"\\"==o&&E(t)||t.path.push("")):tt(m)?"/"==o||"\\"==o&&E(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&q(m)&&(t.host&&(t.host=""),m=m.charAt(0)+":"),t.path.push(m)),m="","file"==t.scheme&&(o==n||"?"==o||"#"==o))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==o?(t.query="",u=gt):"#"==o&&(t.fragment="",u=Xt)}else m+=j(o,P);break;case yt:"?"==o?(t.query="",u=gt):"#"==o?(t.fragment="",u=Xt):o!=n&&(t.path[0]+=j(o,w));break;case gt:i||"#"!=o?o!=n&&("'"==o&&E(t)?t.query+="%27":t.query+="#"==o?"%23":j(o,w)):(t.fragment="",u=Xt);break;case Xt:o!=n&&(t.fragment+=j(o,A))}s++}},Wt=function(t){var l,i,n=u(this,Wt,"URL"),e=arguments.length>1?arguments[1]:void 0,o=I(t),d=W(n,{type:"URL"});if(void 0!==e)if(e instanceof Wt)l=C(e);else if(i=Vt(l={},I(e)))throw TypeError(i);if(i=Vt(d,o,null,l))throw TypeError(i);var r=d.searchParams=new X,a=V(r);a.updateSearchParams(d.query),a.updateURL=function(){d.query=String(r)||null},c||(n.href=Rt.call(n),n.origin=ft.call(n),n.protocol=St.call(n),n.username=vt.call(n),n.password=Kt.call(n),n.host=Yt.call(n),n.hostname=Jt.call(n),n.port=Nt.call(n),n.pathname=Lt.call(n),n.search=Ut.call(n),n.searchParams=Ht.call(n),n.hash=xt.call(n))},Ct=Wt.prototype,Rt=function(){var t=C(this),l=t.scheme,i=t.username,n=t.password,e=t.host,c=t.port,o=t.path,d=t.query,r=t.fragment,a=l+":";return null!==e?(a+="//",D(t)&&(a+=i+(n?":"+n:"")+"@"),a+=z(e),null!==c&&(a+=":"+c)):"file"==l&&(a+="//"),a+=t.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==d&&(a+="?"+d),null!==r&&(a+="#"+r),a},ft=function(){var t=C(this),l=t.scheme,i=t.port;if("blob"==l)try{return new Wt(l.path[0]).origin}catch(t){return"null"}return"file"!=l&&E(t)?l+"://"+z(t.host)+(null!==i?":"+i:""):"null"},St=function(){return C(this).scheme+":"},vt=function(){return C(this).username},Kt=function(){return C(this).password},Yt=function(){var t=C(this),l=t.host,i=t.port;return null===l?"":null===i?z(l):z(l)+":"+i},Jt=function(){var t=C(this).host;return null===t?"":z(t)},Nt=function(){var t=C(this).port;return null===t?"":String(t)},Lt=function(){var t=C(this),l=t.path;return t.cannotBeABaseURL?l[0]:l.length?"/"+l.join("/"):""},Ut=function(){var t=C(this).query;return t?"?"+t:""},Ht=function(){return C(this).searchParams},xt=function(){var t=C(this).fragment;return t?"#"+t:""},Tt=function(t,l){return{get:t,set:l,configurable:!0,enumerable:!0}};if(c&&r(Ct,{href:Tt(Rt,(function(t){var l=C(this),i=I(t),n=Vt(l,i);if(n)throw TypeError(n);V(l.searchParams).updateSearchParams(l.query)})),origin:Tt(ft),protocol:Tt(St,(function(t){var l=C(this);Vt(l,I(t)+":",lt)})),username:Tt(vt,(function(t){var l=C(this),i=b(I(t));if(!O(l)){l.username="";for(var n=0;n<i.length;n++)l.username+=j(i[n],M)}})),password:Tt(Kt,(function(t){var l=C(this),i=b(I(t));if(!O(l)){l.password="";for(var n=0;n<i.length;n++)l.password+=j(i[n],M)}})),host:Tt(Yt,(function(t){var l=C(this);l.cannotBeABaseURL||Vt(l,I(t),Zt)})),hostname:Tt(Jt,(function(t){var l=C(this);l.cannotBeABaseURL||Vt(l,I(t),st)})),port:Tt(Nt,(function(t){var l=C(this);O(l)||(""==(t=I(t))?l.port=null:Vt(l,t,bt))})),pathname:Tt(Lt,(function(t){var l=C(this);l.cannotBeABaseURL||(l.path=[],Vt(l,I(t),pt))})),search:Tt(Ut,(function(t){var l=C(this);""==(t=I(t))?l.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),l.query="",Vt(l,t,gt)),V(l.searchParams).updateSearchParams(l.query)})),searchParams:Tt(Ht),hash:Tt(xt,(function(t){var l=C(this);""!=(t=I(t))?("#"==t.charAt(0)&&(t=t.slice(1)),l.fragment="",Vt(l,t,Xt)):l.fragment=null}))}),a(Ct,"toJSON",(function(){return Rt.call(this)}),{enumerable:!0}),a(Ct,"toString",(function(){return Rt.call(this)}),{enumerable:!0}),g){var kt=g.createObjectURL,Ft=g.revokeObjectURL;kt&&a(Wt,"createObjectURL",(function(t){return kt.apply(g,arguments)})),Ft&&a(Wt,"revokeObjectURL",(function(t){return Ft.apply(g,arguments)}))}p(Wt,"URL"),e({global:!0,forced:!o,sham:!c},{URL:Wt})},function(t,l,i){"use strict";var n=/[^\0-\u007E]/,e=/[.\u3002\uFF0E\uFF61]/g,c="Overflow: input needs wider integers to process",o=Math.floor,d=String.fromCharCode,r=function(t){return t+22+75*(t<26)},a=function(t,l,i){var n=0;for(t=i?o(t/700):t>>1,t+=o(t/l);t>455;n+=36)t=o(t/35);return o(n+36*t/(t+38))},u=function(t){var l,i,n=[],e=(t=function(t){for(var l=[],i=0,n=t.length;i<n;){var e=t.charCodeAt(i++);if(e>=55296&&e<=56319&&i<n){var c=t.charCodeAt(i++);56320==(64512&c)?l.push(((1023&e)<<10)+(1023&c)+65536):(l.push(e),i--)}else l.push(e)}return l}(t)).length,u=128,Z=0,s=72;for(l=0;l<t.length;l++)(i=t[l])<128&&n.push(d(i));var b=n.length,m=b;for(b&&n.push("-");m<e;){var h=2147483647;for(l=0;l<t.length;l++)(i=t[l])>=u&&i<h&&(h=i);var I=m+1;if(h-u>o((2147483647-Z)/I))throw RangeError(c);for(Z+=(h-u)*I,u=h,l=0;l<t.length;l++){if((i=t[l])<u&&++Z>2147483647)throw RangeError(c);if(i==u){for(var p=Z,G=36;;G+=36){var y=G<=s?1:G>=s+26?26:G-s;if(p<y)break;var g=p-y,X=36-y;n.push(d(r(y+g%X))),p=o(g/X)}n.push(d(r(p))),s=a(Z,I,m==b),Z=0,++m}}++Z,++u}return n.join("")};t.exports=function(t){var l,i,c=[],o=t.toLowerCase().replace(e,".").split(".");for(l=0;l<o.length;l++)i=o[l],c.push(n.test(i)?"xn--"+u(i):i);return c.join(".")}},function(t,l,i){"use strict";i(0)({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},function(t,l,i){var n=function(t){"use strict";var l=Object.prototype,i=l.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},e=n.iterator||"@@iterator",c=n.asyncIterator||"@@asyncIterator",o=n.toStringTag||"@@toStringTag";function d(t,l,i){return Object.defineProperty(t,l,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[l]}try{d({},"")}catch(t){d=function(t,l,i){return t[l]=i}}function r(t,l,i,n){var e=l&&l.prototype instanceof Z?l:Z,c=Object.create(e.prototype),o=new W(n||[]);return c._invoke=function(t,l,i){var n="suspendedStart";return function(e,c){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===e)throw c;return R()}for(i.method=e,i.arg=c;;){var o=i.delegate;if(o){var d=g(o,i);if(d){if(d===u)continue;return d}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if("suspendedStart"===n)throw n="completed",i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n="executing";var r=a(t,l,i);if("normal"===r.type){if(n=i.done?"completed":"suspendedYield",r.arg===u)continue;return{value:r.arg,done:i.done}}"throw"===r.type&&(n="completed",i.method="throw",i.arg=r.arg)}}}(t,i,o),c}function a(t,l,i){try{return{type:"normal",arg:t.call(l,i)}}catch(t){return{type:"throw",arg:t}}}t.wrap=r;var u={};function Z(){}function s(){}function b(){}var m={};m[e]=function(){return this};var h=Object.getPrototypeOf,I=h&&h(h(C([])));I&&I!==l&&i.call(I,e)&&(m=I);var p=b.prototype=Z.prototype=Object.create(m);function G(t){["next","throw","return"].forEach((function(l){d(t,l,(function(t){return this._invoke(l,t)}))}))}function y(t,l){var n;this._invoke=function(e,c){function o(){return new l((function(n,o){!function n(e,c,o,d){var r=a(t[e],t,c);if("throw"!==r.type){var u=r.arg,Z=u.value;return Z&&"object"==typeof Z&&i.call(Z,"__await")?l.resolve(Z.__await).then((function(t){n("next",t,o,d)}),(function(t){n("throw",t,o,d)})):l.resolve(Z).then((function(t){u.value=t,o(u)}),(function(t){return n("throw",t,o,d)}))}d(r.arg)}(e,c,n,o)}))}return n=n?n.then(o,o):o()}}function g(t,l){var i=t.iterator[l.method];if(void 0===i){if(l.delegate=null,"throw"===l.method){if(t.iterator.return&&(l.method="return",l.arg=void 0,g(t,l),"throw"===l.method))return u;l.method="throw",l.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var n=a(i,t.iterator,l.arg);if("throw"===n.type)return l.method="throw",l.arg=n.arg,l.delegate=null,u;var e=n.arg;return e?e.done?(l[t.resultName]=e.value,l.next=t.nextLoc,"return"!==l.method&&(l.method="next",l.arg=void 0),l.delegate=null,u):e:(l.method="throw",l.arg=new TypeError("iterator result is not an object"),l.delegate=null,u)}function X(t){var l={tryLoc:t[0]};1 in t&&(l.catchLoc=t[1]),2 in t&&(l.finallyLoc=t[2],l.afterLoc=t[3]),this.tryEntries.push(l)}function V(t){var l=t.completion||{};l.type="normal",delete l.arg,t.completion=l}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(X,this),this.reset(!0)}function C(t){if(t){var l=t[e];if(l)return l.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,c=function l(){for(;++n<t.length;)if(i.call(t,n))return l.value=t[n],l.done=!1,l;return l.value=void 0,l.done=!0,l};return c.next=c}}return{next:R}}function R(){return{value:void 0,done:!0}}return s.prototype=p.constructor=b,b.constructor=s,s.displayName=d(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var l="function"==typeof t&&t.constructor;return!!l&&(l===s||"GeneratorFunction"===(l.displayName||l.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,d(t,o,"GeneratorFunction")),t.prototype=Object.create(p),t},t.awrap=function(t){return{__await:t}},G(y.prototype),y.prototype[c]=function(){return this},t.AsyncIterator=y,t.async=function(l,i,n,e,c){void 0===c&&(c=Promise);var o=new y(r(l,i,n,e),c);return t.isGeneratorFunction(i)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},G(p),d(p,o,"Generator"),p[e]=function(){return this},p.toString=function(){return"[object Generator]"},t.keys=function(t){var l=[];for(var i in t)l.push(i);return l.reverse(),function i(){for(;l.length;){var n=l.pop();if(n in t)return i.value=n,i.done=!1,i}return i.done=!0,i}},t.values=C,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(V),!t)for(var l in this)"t"===l.charAt(0)&&i.call(this,l)&&!isNaN(+l.slice(1))&&(this[l]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var l=this;function n(i,n){return o.type="throw",o.arg=t,l.next=i,n&&(l.method="next",l.arg=void 0),!!n}for(var e=this.tryEntries.length-1;e>=0;--e){var c=this.tryEntries[e],o=c.completion;if("root"===c.tryLoc)return n("end");if(c.tryLoc<=this.prev){var d=i.call(c,"catchLoc"),r=i.call(c,"finallyLoc");if(d&&r){if(this.prev<c.catchLoc)return n(c.catchLoc,!0);if(this.prev<c.finallyLoc)return n(c.finallyLoc)}else if(d){if(this.prev<c.catchLoc)return n(c.catchLoc,!0)}else{if(!r)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return n(c.finallyLoc)}}}},abrupt:function(t,l){for(var n=this.tryEntries.length-1;n>=0;--n){var e=this.tryEntries[n];if(e.tryLoc<=this.prev&&i.call(e,"finallyLoc")&&this.prev<e.finallyLoc){var c=e;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=l&&l<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=l,c?(this.method="next",this.next=c.finallyLoc,u):this.complete(o)},complete:function(t,l){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&l&&(this.next=l),u},finish:function(t){for(var l=this.tryEntries.length-1;l>=0;--l){var i=this.tryEntries[l];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),V(i),u}},catch:function(t){for(var l=this.tryEntries.length-1;l>=0;--l){var i=this.tryEntries[l];if(i.tryLoc===t){var n=i.completion;if("throw"===n.type){var e=n.arg;V(i)}return e}}throw new Error("illegal catch attempt")},delegateYield:function(t,l,i){return this.delegate={iterator:C(t),resultName:l,nextLoc:i},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},function(t,l,i){"use strict";i.r(l),i.d(l,"AUTHORIZATION_CODE",(function(){return n.a})),i.d(l,"AsgardeoAuthClient",(function(){return n.b})),i.d(l,"AsgardeoSPAClient",(function(){return n.c})),i.d(l,"CLIENT_ID_TAG",(function(){return n.d})),i.d(l,"CLIENT_SECRET_TAG",(function(){return n.e})),i.d(l,"Hooks",(function(){return n.f})),i.d(l,"OIDC_SCOPE",(function(){return n.g})),i.d(l,"PKCE_CODE_VERIFIER",(function(){return n.h})),i.d(l,"REFRESH_TOKEN_TIMER",(function(){return n.i})),i.d(l,"ResponseMode",(function(){return n.j})),i.d(l,"SCOPE_TAG",(function(){return n.k})),i.d(l,"SESSION_STATE",(function(){return n.l})),i.d(l,"SIGN_OUT_SUCCESS_PARAM",(function(){return n.m})),i.d(l,"SIGN_OUT_URL",(function(){return n.n})),i.d(l,"SPAUtils",(function(){return n.o})),i.d(l,"Storage",(function(){return n.p})),i.d(l,"Stores",(function(){return n.q})),i.d(l,"TOKEN_TAG",(function(){return n.r})),i.d(l,"USERNAME_TAG",(function(){return n.s})),i.d(l,"WebWorkerClass",(function(){return n.t})),i.d(l,"AuthClient",(function(){return X})),i.d(l,"AuthProvider",(function(){return W})),i.d(l,"useAuthContext",(function(){return C})),i.d(l,"SecureRoute",(function(){return K})),i.d(l,"AuthenticatedComponent",(function(){return Y})),i.d(l,"SecureApp",(function(){return N}));i(196),i(198),i(199),i(200),i(201),i(202),i(203),i(204),i(205),i(206),i(207),i(208),i(209),i(210),i(211),i(212),i(213),i(214),i(215),i(216),i(217),i(218),i(219),i(220),i(221),i(222),i(223),i(224),i(225),i(87),i(226),i(227),i(228),i(229),i(230),i(231),i(232),i(233),i(234),i(235),i(236),i(237),i(238),i(239),i(240),i(242),i(243),i(244),i(245),i(246),i(248),i(249),i(251),i(252),i(253),i(254),i(160),i(255),i(256),i(127),i(257),i(258),i(259),i(260),i(261),i(262),i(263),i(264),i(265),i(266),i(267),i(268),i(269),i(270),i(271),i(272),i(273),i(274),i(275),i(276),i(277),i(278),i(279),i(280),i(281),i(282),i(283),i(284),i(285),i(286),i(287),i(288),i(289),i(290),i(291),i(292),i(293),i(294),i(295),i(296),i(297),i(298),i(299),i(300),i(301),i(302),i(303),i(304),i(305),i(306),i(307),i(308),i(309),i(310),i(312),i(313),i(314),i(315),i(175),i(319),i(320),i(321),i(322),i(323),i(324),i(325),i(326),i(327),i(328),i(329),i(330),i(331),i(332),i(333),i(132),i(334),i(335),i(336),i(337),i(179),i(338),i(339),i(340),i(341),i(180),i(342),i(181),i(343),i(344),i(345),i(346),i(347),i(348),i(349),i(350),i(351),i(352),i(353),i(354),i(355),i(356),i(357),i(358),i(359),i(360),i(361),i(362),i(363),i(364),i(365),i(366),i(367),i(368),i(369),i(370),i(371),i(372),i(373),i(374),i(375),i(376),i(377),i(378),i(379),i(382),i(383),i(384),i(385),i(386),i(387),i(388),i(389),i(390),i(391),i(392),i(393),i(394),i(395),i(396),i(397),i(398),i(399),i(400),i(401),i(402),i(137),i(403),i(404),i(406),i(407),i(408),i(409),i(411),i(412),i(413),i(414),i(415),i(416),i(417),i(418),i(419),i(420),i(421),i(422),i(423),i(424),i(425),i(426),i(427),i(428),i(429),i(430),i(431),i(432),i(433),i(434),i(435),i(436),i(437),i(438),i(439),i(440),i(441),i(442),i(443),i(444),i(445),i(446),i(447),i(448),i(450),i(451),i(452),i(453),i(454),i(455),i(456),i(457),i(458),i(459),i(460),i(461),i(462),i(463),i(464),i(465),i(466),i(467),i(468),i(469),i(470),i(471),i(472),i(473),i(474),i(475),i(476),i(477),i(478),i(479),i(480),i(482),i(483),i(484),i(485),i(486),i(487),i(488),i(489),i(490),i(491),i(492),i(493),i(494),i(495),i(496),i(497),i(498),i(499),i(500),i(501),i(502),i(503),i(504),i(505),i(506),i(507),i(508),i(509),i(510),i(511),i(512),i(513),i(515),i(516),i(517),i(518),i(519),i(520),i(521),i(522),i(523),i(524),i(525),i(526),i(527),i(528),i(529),i(530),i(531),i(532),i(533),i(535),i(194),i(536);var n=i(45),e=i(20),c=i.n(e);function o(t,l){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);l&&(n=n.filter((function(l){return Object.getOwnPropertyDescriptor(t,l).enumerable}))),i.push.apply(i,n)}return i}function d(t){for(var l=1;l<arguments.length;l++){var i=null!=arguments[l]?arguments[l]:{};l%2?o(Object(i),!0).forEach((function(l){Z(t,l,i[l])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):o(Object(i)).forEach((function(l){Object.defineProperty(t,l,Object.getOwnPropertyDescriptor(i,l))}))}return t}function r(t,l,i,n,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void i(t)}d.done?l(r):Promise.resolve(r).then(n,e)}function a(t){return function(){var l=this,i=arguments;return new Promise((function(n,e){var c=t.apply(l,i);function o(t){r(c,n,e,o,d,"next",t)}function d(t){r(c,n,e,o,d,"throw",t)}o(void 0)}))}}function u(t,l){for(var i=0;i<l.length;i++){var n=l[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function Z(t,l,i){return l in t?Object.defineProperty(t,l,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[l]=i,t}var s=function(){function t(){!function(t,l){if(!(t instanceof l))throw new TypeError("Cannot call a class as a function")}(this,t),Z(this,"_authState",t.DEFAULT_STATE),Z(this,"_client",void 0),this._client=n.c.getInstance(),this.getState=this.getState.bind(this),this.init=this.init.bind(this),this.signIn=this.signIn.bind(this),this.signOut=this.signOut.bind(this),this.updateState=this.updateState.bind(this)}var l,i,e,c,o,r,s,b,m,h,I,p,G,y,g,X,V,W,C;return l=t,(i=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(C=a(regeneratorRuntime.mark((function t(l,i,n,e,c,o){var r=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.signIn(n,e,c).then(function(){var t=a(regeneratorRuntime.mark((function t(n){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,r._client.isAuthenticated();case 4:if(!t.sent){t.next=9;break}e={allowedScopes:n.allowedScopes,displayName:n.displayName,email:n.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:n.sub,username:n.username},r.updateState(e),l(d(d({},i),e)),o&&o(n);case 9:return t.abrupt("return",n);case 10:case"end":return t.stop()}}),t)})));return function(l){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,l,i,n,e,c){return C.apply(this,arguments)})},{key:"signOut",value:function(t,l,i){return this._client.signOut().then((function(t){return i&&i(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=d(d({},this._authState),t)}},{key:"getBasicUserInfo",value:(W=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)}))),function(){return W.apply(this,arguments)})},{key:"httpRequest",value:(V=a(regeneratorRuntime.mark((function t(l){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequest(l));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return V.apply(this,arguments)})},{key:"httpRequestAll",value:(X=a(regeneratorRuntime.mark((function t(l){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequestAll(l));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return X.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,l,i){var n=this;return this._client.requestCustomGrant(t).then((function(e){if(e)return t.returnsSession&&(n.updateState(d(d(d({},n.getState()),e),{},{isAuthenticated:!0,isLoading:!1})),i(d(d({},e),{},{isAuthenticated:!0,isLoading:!1}))),l&&l(e),e})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(g=a(regeneratorRuntime.mark((function l(i){var n=this;return regeneratorRuntime.wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return l.abrupt("return",this._client.revokeAccessToken().then((function(){return n.updateState(d(d({},t.DEFAULT_STATE),{},{isLoading:!1})),i(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return l.stop()}}),l,this)}))),function(t){return g.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(y=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return y.apply(this,arguments)})},{key:"getHttpClient",value:(G=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getDecodedIDToken",value:(p=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDToken",value:(I=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.apply(this,arguments)})},{key:"getAccessToken",value:(h=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"refreshAccessToken",value:(m=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.refreshAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return m.apply(this,arguments)})},{key:"isAuthenticated",value:(b=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)}))),function(){return b.apply(this,arguments)})},{key:"enableHttpHandler",value:(s=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.enableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return s.apply(this,arguments)})},{key:"disableHttpHandler",value:(r=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.disableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"updateConfig",value:(o=a(regeneratorRuntime.mark((function t(l){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.updateConfig(l));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"on",value:function(t,l,i){return t===n.f.CustomGrant?this._client.on(t,l,i):this._client.on(t,l)}},{key:"trySignInSilently",value:(c=a(regeneratorRuntime.mark((function t(l,i){var n=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.trySignInSilently().then(function(){var t=a(regeneratorRuntime.mark((function t(e){var c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=4;break}return n.updateState(d(d({},n.getState()),{},{isLoading:!1})),i(d(d({},l),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,n._client.isAuthenticated();case 6:if(!t.sent){t.next=11;break}o={allowedScopes:(c=e).allowedScopes,displayName:c.displayName,email:c.email,isAuthenticated:!0,isLoading:!1,username:c.username,isSigningOut:!1,sub:c.sub},n.updateState(o),i(d(d({},l),o));case 11:return t.abrupt("return",e);case 12:case"end":return t.stop()}}),t)})));return function(l){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,l){return c.apply(this,arguments)})}])&&u(l.prototype,i),e&&u(l,e),t}();function b(t,l,i,n,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void i(t)}d.done?l(r):Promise.resolve(r).then(n,e)}function m(t){return function(){var l=this,i=arguments;return new Promise((function(n,e){var c=t.apply(l,i);function o(t){b(c,n,e,o,d,"next",t)}function d(t){b(c,n,e,o,d,"throw",t)}o(void 0)}))}}function h(t,l){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);l&&(n=n.filter((function(l){return Object.getOwnPropertyDescriptor(t,l).enumerable}))),i.push.apply(i,n)}return i}function I(t){for(var l=1;l<arguments.length;l++){var i=null!=arguments[l]?arguments[l]:{};l%2?h(Object(i),!0).forEach((function(l){p(t,l,i[l])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):h(Object(i)).forEach((function(l){Object.defineProperty(t,l,Object.getOwnPropertyDescriptor(i,l))}))}return t}function p(t,l,i){return l in t?Object.defineProperty(t,l,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[l]=i,t}function G(t,l){return function(t){if(Array.isArray(t))return t}(t)||function(t,l){var i=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==i)return;var n,e,c=[],o=!0,d=!1;try{for(i=i.call(t);!(o=(n=i.next()).done)&&(c.push(n.value),!l||c.length!==l);o=!0);}catch(t){d=!0,e=t}finally{try{o||null==i.return||i.return()}finally{if(d)throw e}}return c}(t,l)||function(t,l){if(!t)return;if("string"==typeof t)return y(t,l);var i=Object.prototype.toString.call(t).slice(8,-1);"Object"===i&&t.constructor&&(i=t.constructor.name);if("Map"===i||"Set"===i)return Array.from(t);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return y(t,l)}(t,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(t,l){(null==l||l>t.length)&&(l=t.length);for(var i=0,n=new Array(l);i<l;i++)n[i]=t[i];return n}Z(s,"DEFAULT_STATE",void 0),s.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,username:"",sub:""};var g={disableTrySignInSilently:!1},X=new s,V=Object(e.createContext)(null),W=function(t){var l=G(Object(e.useState)(X.getState()),2),i=l[0],o=l[1],d=G(Object(e.useState)(!1),2),r=d[0],a=d[1],u=t.children,Z=t.config,s=t.fallback,b=t.getAuthParams,h=t.onSignOut,p=Object(e.useMemo)((function(){return I(I({},g),Z)}),[Z]),y=function(){var t=m(regeneratorRuntime.mark((function t(l,n,e,c){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,X.signIn(o,i,l,n,e,c);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(l,i,n,e){return t.apply(this,arguments)}}(),W=function(t,l,i){return t===n.f.CustomGrant?X.on(t,l,i):X.on(t,l)},C=function(){return X.trySignInSilently(i,o)};return Object(e.useEffect)((function(){i.isAuthenticated||m(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=a,t.next=3,X.init(p);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[p]),Object(e.useEffect)((function(){m(regeneratorRuntime.mark((function t(){var l,e,c,d,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return l=!1,t.next=3,W(n.f.SignOut,(function(){l=!0,h&&h()}));case 3:if(!i.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(p.skipRedirectCallback){t.next=14;break}if(c=null,!b||"function"!=typeof b){t.next=11;break}return t.next=10,b();case 10:c=t.sent;case 11:if(!(n.o.hasAuthSearchParamsInURL()||null!==(e=c)&&void 0!==e&&e.authorizationCode||new URL(location.href).searchParams.get("error"))){t.next=14;break}return t.next=14,y({callOnlyOnRedirect:!0},null===(d=c)||void 0===d?void 0:d.authorizationCode,null===(r=c)||void 0===r?void 0:r.sessionState).then((function(){})).catch((function(t){throw t}));case 14:if(!X.getState().isAuthenticated){t.next=16;break}return t.abrupt("return");case 16:if(!p.disableTrySignInSilently&&!l){t.next=19;break}return o(I(I({},i),{},{isLoading:!1})),t.abrupt("return");case 19:return t.next=21,C().then((function(t){})).catch((function(t){throw t}));case 21:case"end":return t.stop()}}),t)})))()}),[p]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return X.disableHttpHandler()},enableHttpHandler:function(){return X.enableHttpHandler()},getAccessToken:function(){return X.getAccessToken()},getBasicUserInfo:function(){return X.getBasicUserInfo()},getDecodedIDToken:function(){return X.getDecodedIDToken()},getHttpClient:function(){return X.getHttpClient()},getIDToken:function(){return X.getIDToken()},getOIDCServiceEndpoints:function(){return X.getOIDCServiceEndpoints()},httpRequest:function(t){return X.httpRequest(t)},httpRequestAll:function(t){return X.httpRequestAll(t)},isAuthenticated:function(){return X.isAuthenticated()},on:W,refreshAccessToken:function(){return X.refreshAccessToken()},requestCustomGrant:function(t,l){return X.requestCustomGrant(t,l,o)},revokeAccessToken:function(){return X.revokeAccessToken(o)},signIn:y,signOut:function(t){return X.signOut(o,i,t)},state:i,trySignInSilently:C,updateConfig:function(t){return X.updateConfig(t)}}},r?u:null!=s?s:null)},C=function(){return Object(e.useContext)(V)},R=i(195),f=["component","callback"];function S(){return(S=Object.assign||function(t){for(var l=1;l<arguments.length;l++){var i=arguments[l];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n])}return t}).apply(this,arguments)}function v(t,l){if(null==t)return{};var i,n,e=function(t,l){if(null==t)return{};var i,n,e={},c=Object.keys(t);for(n=0;n<c.length;n++)i=c[n],l.indexOf(i)>=0||(e[i]=t[i]);return e}(t,l);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(n=0;n<c.length;n++)i=c[n],l.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(t,i)&&(e[i]=t[i])}return e}var K=function(t){var l=C().state,i=t.component,n=t.callback,o=v(t,f);return Object(e.useEffect)((function(){l.isAuthenticated||n&&n()}),[l.isAuthenticated]),l.isAuthenticated?c.a.createElement(R.Route,S({},o,{render:function(t){return c.a.createElement(i,t)}})):null},Y=function(t){var l=t.fallback,i=t.children,n=C().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",n?i:null!=l?l:null," ")};function J(t,l,i,n,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void i(t)}d.done?l(r):Promise.resolve(r).then(n,e)}var N=function(t){var l=t.children,i=t.fallback,n=t.onSignIn,o=t.overrideSignIn,d=C(),r=d.state,a=r.isAuthenticated,u=r.isLoading,Z=d.signIn;return Object(e.useEffect)((function(){var t;a||u||(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o||"function"!=typeof o){t.next=5;break}return t.next=3,o();case 3:t.next=7;break;case 5:return t.next=7,Z();case 7:case"end":return t.stop()}}),t)})),function(){var l=this,i=arguments;return new Promise((function(n,e){var c=t.apply(l,i);function o(t){J(c,n,e,o,d,"next",t)}function d(t){J(c,n,e,o,d,"throw",t)}o(void 0)}))})(),a&&n&&"function"==typeof n&&n()}),[a,u]),c.a.createElement(Y,{fallback:i},c.a.createElement(e.Suspense,{fallback:i},l))}}])}));
|
|
822
|
+
*/updateConfig(t){return i(this,void 0,void 0,(function*(){if(yield this._isInitialized(),this._storage===Bi.WebWorker){const n=this._client;yield n.updateConfig(t)}else{const n=this._client;yield n.updateConfig(t)}}))}}le._instances=new Map;class ie extends Worker{constructor(){super(...arguments),this.onmessage=()=>null}}}).call(this,l(106))},function(t,n){var l={}.toString;t.exports=function(t){return l.call(t).slice(8,-1)}},function(t,n,l){var i=l(107),e=l(59);t.exports=function(t){var n=i(t,"string");return e(n)?n:String(n)}},function(t,n,l){var i,e,c=l(4),o=l(39),d=c.process,r=c.Deno,a=d&&d.versions||r&&r.version,u=a&&a.v8;u?e=(i=u.split("."))[0]<4?1:i[0]+i[1]:o&&(!(i=o.match(/Edge\/(\d+)/))||i[1]>=74)&&(i=o.match(/Chrome\/(\d+)/))&&(e=i[1]),t.exports=e&&+e},function(t,n,l){var i=l(146),e=l(113).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return i(t,e)}},function(t,n,l){var i=l(30),e=Math.max,c=Math.min;t.exports=function(t,n){var l=i(t);return l<0?e(l+n,0):c(l,n)}},function(t,n,l){var i=l(46);t.exports=Array.isArray||function(t){return"Array"==i(t)}},function(t,n,l){var i=l(76),e=l(75),c=l(7)("iterator");t.exports=function(t){if(null!=t)return t[c]||t["@@iterator"]||e[i(t)]}},function(t,n,l){"use strict";var i=l(47),e=l(14),c=l(38);t.exports=function(t,n,l){var o=i(n);o in t?e.f(t,o,c(0,l)):t[o]=l}},function(t,n,l){"use strict";var i=l(11),e=l(14),c=l(7),o=l(9),d=c("species");t.exports=function(t){var n=i(t),l=e.f;o&&n&&!n[d]&&l(n,d,{configurable:!0,get:function(){return this}})}},function(t,n,l){var i=l(0),e=l(70),c=l(8),o=l(16),d=l(14).f,r=l(49),a=l(116),u=l(69),Z=l(77),s=!1,b=u("meta"),m=0,h=Object.isExtensible||function(){return!0},I=function(t){d(t,b,{value:{objectID:"O"+m++,weakData:{}}})},p=t.exports={enable:function(){p.enable=function(){},s=!0;var t=r.f,n=[].splice,l={};l[b]=1,t(l).length&&(r.f=function(l){for(var i=t(l),e=0,c=i.length;e<c;e++)if(i[e]===b){n.call(i,e,1);break}return i},i({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:a.f}))},fastKey:function(t,n){if(!c(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,b)){if(!h(t))return"F";if(!n)return"E";I(t)}return t[b].objectID},getWeakData:function(t,n){if(!o(t,b)){if(!h(t))return!0;if(!n)return!1;I(t)}return t[b].weakData},onFreeze:function(t){return Z&&s&&h(t)&&!o(t,b)&&I(t),t}};e[b]=!0},function(t,n,l){"use strict";var i=l(61),e=l(3),c=l(1),o=l(26),d=l(18),r=l(36),a=l(7),u=l(17),Z=l(11)("Promise"),s=u.set,b=u.get,m=a("toStringTag");t.exports=function(t,n){var l=function(t){t.next=e(t.iterator.next),t.done=!1,t.ignoreArgument=!n,s(this,t)};return l.prototype=r(o(i.AsyncIterator.prototype),{next:function(l){var i=this,e=!!arguments.length;return new Z((function(o){var d=b(i),r=e?[d.ignoreArgument?void 0:l]:n?[]:[void 0];d.ignoreArgument=!1,o(d.done?{done:!0,value:void 0}:c(t.call(d,Z,r)))}))},return:function(t){var n=this;return new Z((function(l,i){var e=b(n),o=e.iterator;e.done=!0;var d=o.return;if(void 0===d)return l({done:!0,value:t});Z.resolve(d.call(o,t)).then((function(n){c(n),l({done:!0,value:t})}),i)}))},throw:function(t){var n=this;return new Z((function(l,i){var e=b(n),c=e.iterator;e.done=!0;var o=c.throw;if(void 0===o)return i(t);l(o.call(c,t))}))}}),n||d(l.prototype,m,"Generator"),l}},function(t,n,l){"use strict";var i=l(61),e=l(3),c=l(1),o=l(26),d=l(18),r=l(36),a=l(7),u=l(17),Z=u.set,s=u.get,b=a("toStringTag");t.exports=function(t,n){var l=function(t){t.next=e(t.iterator.next),t.done=!1,t.ignoreArg=!n,Z(this,t)};return l.prototype=r(o(i.Iterator.prototype),{next:function(l){var i=s(this),e=arguments.length?[i.ignoreArg?void 0:l]:n?[]:[void 0];i.ignoreArg=!1;var c=i.done?void 0:t.call(i,e);return{done:i.done,value:c}},return:function(t){var n=s(this),l=n.iterator;n.done=!0;var i=l.return;return{done:!0,value:void 0===i?t:c(i.call(l,t)).value}},throw:function(t){var n=s(this),l=n.iterator;n.done=!0;var i=l.throw;if(void 0===i)throw t;return i.call(l,t)}}),n||d(l.prototype,b,"Generator"),l}},function(t,n){t.exports=function(t){return Set.prototype.values.call(t)}},function(t,n,l){var i=l(11),e=l(141);t.exports=e?function(t){return"symbol"==typeof t}:function(t){var n=i("Symbol");return"function"==typeof n&&Object(t)instanceof n}},function(t,n,l){var i=l(146),e=l(113);t.exports=Object.keys||function(t){return i(t,e)}},function(t,n,l){var i=l(4);t.exports=i},function(t,n,l){"use strict";var i=l(122).IteratorPrototype,e=l(26),c=l(38),o=l(34),d=l(75),r=function(){return this};t.exports=function(t,n,l){var a=n+" Iterator";return t.prototype=e(i,{next:c(1,l)}),o(t,a,!1,!0),d[a]=r,t}},function(t,n,l){var i=l(46),e=l(4);t.exports="process"==i(e.process)},function(t,n,l){var i=l(22),e=l(15),c="["+l(93)+"]",o=RegExp("^"+c+c+"*"),d=RegExp(c+c+"*$"),r=function(t){return function(n){var l=e(i(n));return 1&t&&(l=l.replace(o,"")),2&t&&(l=l.replace(d,"")),l}};t.exports={start:r(1),end:r(2),trim:r(3)}},function(t,n,l){"use strict";var i=l(1);t.exports=function(){var t=i(this),n="";return t.global&&(n+="g"),t.ignoreCase&&(n+="i"),t.multiline&&(n+="m"),t.dotAll&&(n+="s"),t.unicode&&(n+="u"),t.sticky&&(n+="y"),n}},function(t,n,l){var i=l(30),e=l(15),c=l(22),o=function(t){return function(n,l){var o,d,r=e(c(n)),a=i(l),u=r.length;return a<0||a>=u?t?"":void 0:(o=r.charCodeAt(a))<55296||o>56319||a+1===u||(d=r.charCodeAt(a+1))<56320||d>57343?t?r.charAt(a):o:t?r.slice(a,a+2):d-56320+(o-55296<<10)+65536}};t.exports={codeAt:o(!1),charAt:o(!0)}},function(t,n,l){var i=l(2),e=l(46),c="".split;t.exports=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==e(t)?c.call(t,""):Object(t)}:Object},function(t,n,l){var i=l(5),e=l(83);(t.exports=function(t,n){return e[t]||(e[t]=void 0!==n?n:{})})("versions",[]).push({version:"3.17.2",mode:i?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},function(t,n){var l=0,i=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++l+i).toString(36)}},function(t,n){t.exports={}},function(t,n,l){var i=l(29),e=l(10),c=l(50),o=function(t){return function(n,l,o){var d,r=i(n),a=e(r.length),u=c(o,a);if(t&&l!=l){for(;a>u;)if((d=r[u++])!=d)return!0}else for(;a>u;u++)if((t||u in r)&&r[u]===l)return t||u||0;return!t&&-1}};t.exports={includes:o(!0),indexOf:o(!1)}},function(t,n,l){var i=l(2),e=/#|\.prototype\./,c=function(t,n){var l=d[o(t)];return l==a||l!=r&&("function"==typeof n?i(n):!!n)},o=c.normalize=function(t){return String(t).replace(e,".").toLowerCase()},d=c.data={},r=c.NATIVE="N",a=c.POLYFILL="P";t.exports=c},function(t,n,l){var i=l(197);t.exports=function(t,n){return new(i(t))(0===n?0:n)}},function(t,n,l){var i=l(2),e=l(7),c=l(48),o=e("species");t.exports=function(t){return c>=51||!i((function(){var n=[];return(n.constructor={})[o]=function(){return{foo:1}},1!==n[t](Boolean).foo}))}},function(t,n){t.exports={}},function(t,n,l){var i=l(120),e=l(46),c=l(7)("toStringTag"),o="Arguments"==e(function(){return arguments}());t.exports=i?e:function(t){var n,l,i;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(l=function(t,n){try{return t[n]}catch(t){}}(n=Object(t),c))?l:o?e(n):"Object"==(i=e(n))&&"function"==typeof n.callee?"Arguments":i}},function(t,n,l){var i=l(2);t.exports=!i((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,n,l){"use strict";var i=l(3),e=function(t){var n,l;this.promise=new t((function(t,i){if(void 0!==n||void 0!==l)throw TypeError("Bad Promise constructor");n=t,l=i})),this.resolve=i(n),this.reject=i(l)};t.exports.f=function(t){return new e(t)}},function(t,n,l){var i=l(8),e=l(46),c=l(7)("match");t.exports=function(t){var n;return i(t)&&(void 0!==(n=t[c])?!!n:"RegExp"==e(t))}},function(t,n,l){var i=l(30);t.exports=function(t){var n=i(t);if(n<0)throw RangeError("The argument can't be less than 0");return n}},function(t,n,l){"use strict";var i=l(3),e=l(1),c=l(11)("Promise"),o=[].push,d=function(t){var n=0==t,l=1==t,d=2==t,r=3==t;return function(t,a){e(t);var u=i(t.next),Z=n?[]:void 0;return n||i(a),new c((function(i,s){var b=function(n,l){try{var i=t.return;if(void 0!==i)return c.resolve(i.call(t)).then((function(){n(l)}),(function(t){s(t)}))}catch(t){return s(t)}n(l)},m=function(t){b(s,t)},h=function(){try{c.resolve(e(u.call(t))).then((function(t){try{if(e(t).done)i(n?Z:!r&&(d||void 0));else{var u=t.value;n?(o.call(Z,u),h()):c.resolve(a(u)).then((function(t){l?h():d?t?h():b(i,!1):t?b(i,r||u):h()}),m)}}catch(t){m(t)}}),m)}catch(t){m(t)}};h()}))}};t.exports={toArray:d(0),forEach:d(1),every:d(2),some:d(3),find:d(4)}},function(t,n,l){"use strict";var i={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,c=e&&!i.call({1:2},1);n.f=c?function(t){var n=e(this,t);return!!n&&n.enumerable}:i},function(t,n,l){var i=l(4),e=l(109),c=i["__core-js_shared__"]||e("__core-js_shared__",{});t.exports=c},function(t,n,l){var i=l(68),e=l(69),c=i("keys");t.exports=function(t){return c[t]||(c[t]=e(t))}},function(t,n,l){var i=l(1);t.exports=function(t,n,l){var e,c;i(t);try{if(void 0===(e=t.return)){if("throw"===n)throw l;return l}e=e.call(t)}catch(t){c=!0,e=t}if("throw"===n)throw l;if(c)throw e;return i(e),l}},function(t,n,l){var i=l(7)("iterator"),e=!1;try{var c=0,o={next:function(){return{done:!!c++}},return:function(){e=!0}};o[i]=function(){return this},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,n){if(!n&&!e)return!1;var l=!1;try{var c={};c[i]=function(){return{next:function(){return{done:l=!0}}}},t(c)}catch(t){}return l}},function(t,n,l){"use strict";var i=l(29),e=l(35),c=l(75),o=l(17),d=l(121),r=o.set,a=o.getterFor("Array Iterator");t.exports=d(Array,"Array",(function(t,n){r(this,{type:"Array Iterator",target:i(t),index:0,kind:n})}),(function(){var t=a(this),n=t.target,l=t.kind,i=t.index++;return!n||i>=n.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==l?{value:i,done:!1}:"values"==l?{value:n[i],done:!1}:{value:[i,n[i]],done:!1}}),"values"),c.Arguments=c.Array,e("keys"),e("values"),e("entries")},function(t,n,l){var i=l(3),e=l(13),c=l(67),o=l(10),d=function(t){return function(n,l,d,r){i(l);var a=e(n),u=c(a),Z=o(a.length),s=t?Z-1:0,b=t?-1:1;if(d<2)for(;;){if(s in u){r=u[s],s+=b;break}if(s+=b,t?s<0:Z<=s)throw TypeError("Reduce of empty array with no initial value")}for(;t?s>=0:Z>s;s+=b)s in u&&(r=l(r,u[s],s,a));return r}};t.exports={left:d(!1),right:d(!0)}},function(t,n,l){"use strict";var i=l(4),e=l(9),c=l(125),o=l(18),d=l(36),r=l(2),a=l(33),u=l(30),Z=l(10),s=l(158),b=l(241),m=l(27),h=l(42),I=l(49).f,p=l(14).f,G=l(117),y=l(34),X=l(17),g=X.get,V=X.set,W=i.ArrayBuffer,R=W,C=i.DataView,f=C&&C.prototype,S=Object.prototype,v=i.RangeError,K=b.pack,Y=b.unpack,J=function(t){return[255&t]},N=function(t){return[255&t,t>>8&255]},L=function(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]},H=function(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]},U=function(t){return K(t,23,4)},x=function(t){return K(t,52,8)},T=function(t,n){p(t.prototype,n,{get:function(){return g(this)[n]}})},k=function(t,n,l,i){var e=s(l),c=g(t);if(e+n>c.byteLength)throw v("Wrong index");var o=g(c.buffer).bytes,d=e+c.byteOffset,r=o.slice(d,d+n);return i?r:r.reverse()},F=function(t,n,l,i,e,c){var o=s(l),d=g(t);if(o+n>d.byteLength)throw v("Wrong index");for(var r=g(d.buffer).bytes,a=o+d.byteOffset,u=i(+e),Z=0;Z<n;Z++)r[a+Z]=u[c?Z:n-Z-1]};if(c){if(!r((function(){W(1)}))||!r((function(){new W(-1)}))||r((function(){return new W,new W(1.5),new W(NaN),"ArrayBuffer"!=W.name}))){for(var B,z=(R=function(t){return a(this,R),new W(s(t))}).prototype=W.prototype,w=I(W),A=0;w.length>A;)(B=w[A++])in R||o(R,B,W[B]);z.constructor=R}h&&m(f)!==S&&h(f,S);var M=new C(new R(2)),P=f.setInt8;M.setInt8(0,2147483648),M.setInt8(1,2147483649),!M.getInt8(0)&&M.getInt8(1)||d(f,{setInt8:function(t,n){P.call(this,t,n<<24>>24)},setUint8:function(t,n){P.call(this,t,n<<24>>24)}},{unsafe:!0})}else R=function(t){a(this,R,"ArrayBuffer");var n=s(t);V(this,{bytes:G.call(new Array(n),0),byteLength:n}),e||(this.byteLength=n)},C=function(t,n,l){a(this,C,"DataView"),a(t,R,"DataView");var i=g(t).byteLength,c=u(n);if(c<0||c>i)throw v("Wrong offset");if(c+(l=void 0===l?i-c:Z(l))>i)throw v("Wrong length");V(this,{buffer:t,byteLength:l,byteOffset:c}),e||(this.buffer=t,this.byteLength=l,this.byteOffset=c)},e&&(T(R,"byteLength"),T(C,"buffer"),T(C,"byteLength"),T(C,"byteOffset")),d(C.prototype,{getInt8:function(t){return k(this,1,t)[0]<<24>>24},getUint8:function(t){return k(this,1,t)[0]},getInt16:function(t){var n=k(this,2,t,arguments.length>1?arguments[1]:void 0);return(n[1]<<8|n[0])<<16>>16},getUint16:function(t){var n=k(this,2,t,arguments.length>1?arguments[1]:void 0);return n[1]<<8|n[0]},getInt32:function(t){return H(k(this,4,t,arguments.length>1?arguments[1]:void 0))},getUint32:function(t){return H(k(this,4,t,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(t){return Y(k(this,4,t,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(t){return Y(k(this,8,t,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(t,n){F(this,1,t,J,n)},setUint8:function(t,n){F(this,1,t,J,n)},setInt16:function(t,n){F(this,2,t,N,n,arguments.length>2?arguments[2]:void 0)},setUint16:function(t,n){F(this,2,t,N,n,arguments.length>2?arguments[2]:void 0)},setInt32:function(t,n){F(this,4,t,L,n,arguments.length>2?arguments[2]:void 0)},setUint32:function(t,n){F(this,4,t,L,n,arguments.length>2?arguments[2]:void 0)},setFloat32:function(t,n){F(this,4,t,U,n,arguments.length>2?arguments[2]:void 0)},setFloat64:function(t,n){F(this,8,t,x,n,arguments.length>2?arguments[2]:void 0)}});y(R,"ArrayBuffer"),y(C,"DataView"),t.exports={ArrayBuffer:R,DataView:C}},function(t,n,l){"use strict";var i=l(0),e=l(4),c=l(72),o=l(25),d=l(55),r=l(6),a=l(33),u=l(8),Z=l(2),s=l(86),b=l(34),m=l(91);t.exports=function(t,n,l){var h=-1!==t.indexOf("Map"),I=-1!==t.indexOf("Weak"),p=h?"set":"add",G=e[t],y=G&&G.prototype,X=G,g={},V=function(t){var n=y[t];o(y,t,"add"==t?function(t){return n.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(I&&!u(t))&&n.call(this,0===t?0:t)}:"get"==t?function(t){return I&&!u(t)?void 0:n.call(this,0===t?0:t)}:"has"==t?function(t){return!(I&&!u(t))&&n.call(this,0===t?0:t)}:function(t,l){return n.call(this,0===t?0:t,l),this})};if(c(t,"function"!=typeof G||!(I||y.forEach&&!Z((function(){(new G).entries().next()})))))X=l.getConstructor(n,t,h,p),d.enable();else if(c(t,!0)){var W=new X,R=W[p](I?{}:-0,1)!=W,C=Z((function(){W.has(1)})),f=s((function(t){new G(t)})),S=!I&&Z((function(){for(var t=new G,n=5;n--;)t[p](n,n);return!t.has(-0)}));f||((X=n((function(n,l){a(n,X,t);var i=m(new G,n,X);return null!=l&&r(l,i[p],{that:i,AS_ENTRIES:h}),i}))).prototype=y,y.constructor=X),(C||S)&&(V("delete"),V("has"),h&&V("get")),(S||R)&&V(p),I&&y.clear&&delete y.clear}return g[t]=X,i({global:!0,forced:X!=G},g),b(X,t),I||l.setStrong(X,t,h),X}},function(t,n,l){var i=l(8),e=l(42);t.exports=function(t,n,l){var c,o;return e&&"function"==typeof(c=n.constructor)&&c!==l&&i(o=c.prototype)&&o!==l.prototype&&e(t,o),t}},function(t,n){var l=Math.expm1,i=Math.exp;t.exports=!l||l(10)>22025.465794806718||l(10)<22025.465794806718||-2e-17!=l(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:i(t)-1}:l},function(t,n){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,n,l){"use strict";var i=l(5),e=l(4),c=l(2),o=l(124);t.exports=i||!c((function(){if(!(o&&o<535)){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete e[t]}}))},function(t,n){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,n,l){var i=l(2),e=l(4).RegExp;n.UNSUPPORTED_Y=i((function(){var t=e("a","y");return t.lastIndex=2,null!=t.exec("abcd")})),n.BROKEN_CARET=i((function(){var t=e("^r","gy");return t.lastIndex=2,null!=t.exec("str")}))},function(t,n,l){"use strict";var i,e,c=l(15),o=l(65),d=l(96),r=l(68),a=l(26),u=l(17).get,Z=l(177),s=l(178),b=RegExp.prototype.exec,m=r("native-string-replace",String.prototype.replace),h=b,I=(i=/a/,e=/b*/g,b.call(i,"a"),b.call(e,"a"),0!==i.lastIndex||0!==e.lastIndex),p=d.UNSUPPORTED_Y||d.BROKEN_CARET,G=void 0!==/()??/.exec("")[1];(I||G||p||Z||s)&&(h=function(t){var n,l,i,e,d,r,Z,s=this,y=u(s),X=c(t),g=y.raw;if(g)return g.lastIndex=s.lastIndex,n=h.call(g,X),s.lastIndex=g.lastIndex,n;var V=y.groups,W=p&&s.sticky,R=o.call(s),C=s.source,f=0,S=X;if(W&&(-1===(R=R.replace("y","")).indexOf("g")&&(R+="g"),S=X.slice(s.lastIndex),s.lastIndex>0&&(!s.multiline||s.multiline&&"\n"!==X.charAt(s.lastIndex-1))&&(C="(?: "+C+")",S=" "+S,f++),l=new RegExp("^(?:"+C+")",R)),G&&(l=new RegExp("^"+C+"$(?!\\s)",R)),I&&(i=s.lastIndex),e=b.call(W?l:s,S),W?e?(e.input=e.input.slice(f),e[0]=e[0].slice(f),e.index=s.lastIndex,s.lastIndex+=e[0].length):s.lastIndex=0:I&&e&&(s.lastIndex=s.global?e.index+e[0].length:i),G&&e&&e.length>1&&m.call(e[0],l,(function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(e[d]=void 0)})),e&&V)for(e.groups=r=a(null),d=0;d<V.length;d++)r[(Z=V[d])[0]]=e[Z[1]];return e}),t.exports=h},function(t,n,l){"use strict";l(133);var i=l(25),e=l(97),c=l(2),o=l(7),d=l(18),r=o("species"),a=RegExp.prototype;t.exports=function(t,n,l,u){var Z=o(t),s=!c((function(){var n={};return n[Z]=function(){return 7},7!=""[t](n)})),b=s&&!c((function(){var n=!1,l=/a/;return"split"===t&&((l={}).constructor={},l.constructor[r]=function(){return l},l.flags="",l[Z]=/./[Z]),l.exec=function(){return n=!0,null},l[Z](""),!n}));if(!s||!b||l){var m=/./[Z],h=n(Z,""[t],(function(t,n,l,i,c){var o=n.exec;return o===e||o===a.exec?s&&!c?{done:!0,value:m.call(n,l,i)}:{done:!0,value:t.call(l,n,i)}:{done:!1}}));i(String.prototype,t,h[0]),i(a,Z,h[1])}u&&d(a[Z],"sham",!0)}},function(t,n,l){"use strict";var i=l(66).charAt;t.exports=function(t,n,l){return n+(l?i(t,n).length:1)}},function(t,n,l){var i=l(46),e=l(97);t.exports=function(t,n){var l=t.exec;if("function"==typeof l){var c=l.call(t,n);if("object"!=typeof c)throw TypeError("RegExp exec method returned something other than an Object or null");return c}if("RegExp"!==i(t))throw TypeError("RegExp#exec called on incompatible receiver");return e.call(t,n)}},function(t,n,l){var i=l(12),e=l(28),c=i.TYPED_ARRAY_CONSTRUCTOR,o=i.aTypedArrayConstructor;t.exports=function(t){return o(e(t,t[c]))}},function(t,n,l){var i=l(3);t.exports=function(t){return null==t?void 0:i(t)}},function(t,n,l){"use strict";var i=l(1),e=l(3);t.exports=function(){for(var t,n=i(this),l=e(n.delete),c=!0,o=0,d=arguments.length;o<d;o++)t=l.call(n,arguments[o]),c=c&&t;return!!c}},function(t,n,l){"use strict";var i=l(3),e=l(19),c=l(6);t.exports=function(t){var n,l,o,d,r=arguments.length,a=r>1?arguments[1]:void 0;return i(this),(n=void 0!==a)&&i(a),null==t?new this:(l=[],n?(o=0,d=e(a,r>2?arguments[2]:void 0,2),c(t,(function(t){l.push(d(t,o++))}))):c(t,l.push,{that:l}),new this(l))}},function(t,n,l){"use strict";t.exports=function(){for(var t=arguments.length,n=new Array(t);t--;)n[t]=arguments[t];return new this(n)}},function(t,n){var l;l=function(){return this}();try{l=l||new Function("return this")()}catch(t){"object"==typeof window&&(l=window)}t.exports=l},function(t,n,l){var i=l(8),e=l(59),c=l(142),o=l(7)("toPrimitive");t.exports=function(t,n){if(!i(t)||e(t))return t;var l,d=t[o];if(void 0!==d){if(void 0===n&&(n="default"),l=d.call(t,n),!i(l)||e(l))return l;throw TypeError("Can't convert object to primitive value")}return void 0===n&&(n="number"),c(t,n)}},function(t,n,l){var i=l(48),e=l(2);t.exports=!!Object.getOwnPropertySymbols&&!e((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&i&&i<41}))},function(t,n,l){var i=l(4);t.exports=function(t,n){try{Object.defineProperty(i,t,{value:n,configurable:!0,writable:!0})}catch(l){i[t]=n}return n}},function(t,n,l){var i=l(4),e=l(8),c=i.document,o=e(c)&&e(c.createElement);t.exports=function(t){return o?c.createElement(t):{}}},function(t,n,l){var i=l(83),e=Function.toString;"function"!=typeof i.inspectSource&&(i.inspectSource=function(t){return e.call(t)}),t.exports=i.inspectSource},function(t,n,l){var i=l(11),e=l(49),c=l(114),o=l(1);t.exports=i("Reflect","ownKeys")||function(t){var n=e.f(o(t)),l=c.f;return l?n.concat(l(t)):n}},function(t,n){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,n){n.f=Object.getOwnPropertySymbols},function(t,n,l){var i=l(9),e=l(14),c=l(1),o=l(60);t.exports=i?Object.defineProperties:function(t,n){c(t);for(var l,i=o(n),d=i.length,r=0;d>r;)e.f(t,l=i[r++],n[l]);return t}},function(t,n,l){var i=l(29),e=l(49).f,c={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return o&&"[object Window]"==c.call(t)?function(t){try{return e(t)}catch(t){return o.slice()}}(t):e(i(t))}},function(t,n,l){"use strict";var i=l(13),e=l(50),c=l(10);t.exports=function(t){for(var n=i(this),l=c(n.length),o=arguments.length,d=e(o>1?arguments[1]:void 0,l),r=o>2?arguments[2]:void 0,a=void 0===r?l:e(r,l);a>d;)n[d++]=t;return n}},function(t,n,l){var i=l(1),e=l(85);t.exports=function(t,n,l,c){try{return c?n(i(l)[0],l[1]):n(l)}catch(n){e(t,"throw",n)}}},function(t,n,l){var i=l(7),e=l(75),c=i("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(e.Array===t||o[c]===t)}},function(t,n,l){var i={};i[l(7)("toStringTag")]="z",t.exports="[object z]"===String(i)},function(t,n,l){"use strict";var i=l(0),e=l(62),c=l(27),o=l(42),d=l(34),r=l(18),a=l(25),u=l(7),Z=l(5),s=l(75),b=l(122),m=b.IteratorPrototype,h=b.BUGGY_SAFARI_ITERATORS,I=u("iterator"),p=function(){return this};t.exports=function(t,n,l,u,b,G,y){e(l,n,u);var X,g,V,W=function(t){if(t===b&&v)return v;if(!h&&t in f)return f[t];switch(t){case"keys":case"values":case"entries":return function(){return new l(this,t)}}return function(){return new l(this)}},R=n+" Iterator",C=!1,f=t.prototype,S=f[I]||f["@@iterator"]||b&&f[b],v=!h&&S||W(b),K="Array"==n&&f.entries||S;if(K&&(X=c(K.call(new t)),m!==Object.prototype&&X.next&&(Z||c(X)===m||(o?o(X,m):"function"!=typeof X[I]&&r(X,I,p)),d(X,R,!0,!0),Z&&(s[R]=p))),"values"==b&&S&&"values"!==S.name&&(C=!0,v=function(){return S.call(this)}),Z&&!y||f[I]===v||r(f,I,v),s[n]=v,b)if(g={values:W("values"),keys:G?v:W("keys"),entries:W("entries")},y)for(V in g)(h||C||!(V in f))&&a(f,V,g[V]);else i({target:n,proto:!0,forced:h||C},g);return g}},function(t,n,l){"use strict";var i,e,c,o=l(2),d=l(27),r=l(18),a=l(16),u=l(7),Z=l(5),s=u("iterator"),b=!1;[].keys&&("next"in(c=[].keys())?(e=d(d(c)))!==Object.prototype&&(i=e):b=!0);var m=null==i||o((function(){var t={};return i[s].call(t)!==t}));m&&(i={}),Z&&!m||a(i,s)||r(i,s,(function(){return this})),t.exports={IteratorPrototype:i,BUGGY_SAFARI_ITERATORS:b}},function(t,n,l){var i=l(2);t.exports=!i((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,n,l){var i=l(39).match(/AppleWebKit\/(\d+)\./);t.exports=!!i&&+i[1]},function(t,n){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,n,l){var i=l(10),e=l(15),c=l(127),o=l(22),d=Math.ceil,r=function(t){return function(n,l,r){var a,u,Z=e(o(n)),s=Z.length,b=void 0===r?" ":e(r),m=i(l);return m<=s||""==b?Z:(a=m-s,(u=c.call(b,d(a/b.length))).length>a&&(u=u.slice(0,a)),t?Z+u:u+Z)}};t.exports={start:r(!1),end:r(!0)}},function(t,n,l){"use strict";var i=l(30),e=l(15),c=l(22);t.exports=function(t){var n=e(c(this)),l="",o=i(t);if(o<0||o==1/0)throw RangeError("Wrong number of repetitions");for(;o>0;(o>>>=1)&&(n+=n))1&o&&(l+=n);return l}},function(t,n,l){"use strict";var i=l(90),e=l(161);t.exports=i("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),e)},function(t,n){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,n,l){var i=l(8),e=Math.floor;t.exports=function(t){return!i(t)&&isFinite(t)&&e(t)===t}},function(t,n,l){var i=l(4),e=l(15),c=l(64).trim,o=l(93),d=i.parseInt,r=/^[+-]?0[Xx]/,a=8!==d(o+"08")||22!==d(o+"0x16");t.exports=a?function(t,n){var l=c(e(t));return d(l,n>>>0||(r.test(l)?16:10))}:d},function(t,n,l){var i,e,c,o,d=l(4),r=l(2),a=l(19),u=l(147),Z=l(110),s=l(171),b=l(63),m=d.setImmediate,h=d.clearImmediate,I=d.process,p=d.MessageChannel,G=d.Dispatch,y=0,X={};try{i=d.location}catch(t){}var g=function(t){if(X.hasOwnProperty(t)){var n=X[t];delete X[t],n()}},V=function(t){return function(){g(t)}},W=function(t){g(t.data)},R=function(t){d.postMessage(String(t),i.protocol+"//"+i.host)};m&&h||(m=function(t){for(var n=[],l=arguments.length,i=1;l>i;)n.push(arguments[i++]);return X[++y]=function(){("function"==typeof t?t:Function(t)).apply(void 0,n)},e(y),y},h=function(t){delete X[t]},b?e=function(t){I.nextTick(V(t))}:G&&G.now?e=function(t){G.now(V(t))}:p&&!s?(o=(c=new p).port2,c.port1.onmessage=W,e=a(o.postMessage,o,1)):d.addEventListener&&"function"==typeof postMessage&&!d.importScripts&&i&&"file:"!==i.protocol&&!r(R)?(e=R,d.addEventListener("message",W,!1)):e="onreadystatechange"in Z("script")?function(t){u.appendChild(Z("script")).onreadystatechange=function(){u.removeChild(this),g(t)}}:function(t){setTimeout(V(t),0)}),t.exports={set:m,clear:h}},function(t,n,l){"use strict";var i=l(0),e=l(97);i({target:"RegExp",proto:!0,forced:/./.exec!==e},{exec:e})},function(t,n,l){var i=l(79);t.exports=function(t){if(i(t))throw TypeError("The method doesn't accept regular expressions");return t}},function(t,n,l){var i=l(7)("match");t.exports=function(t){var n=/./;try{"/./"[t](n)}catch(l){try{return n[i]=!1,"/./"[t](n)}catch(t){}}return!1}},function(t,n,l){var i=l(2),e=l(93);t.exports=function(t){return i((function(){return!!e[t]()||"
"!="
"[t]()||e[t].name!==t}))}},function(t,n,l){var i=l(4),e=l(2),c=l(86),o=l(12).NATIVE_ARRAY_BUFFER_VIEWS,d=i.ArrayBuffer,r=i.Int8Array;t.exports=!o||!e((function(){r(1)}))||!e((function(){new r(-1)}))||!c((function(t){new r,new r(null),new r(1.5),new r(t)}),!0)||e((function(){return 1!==new r(new d(2),1,void 0).length}))},function(t,n,l){"use strict";var i,e=l(4),c=l(36),o=l(55),d=l(90),r=l(186),a=l(8),u=l(17).enforce,Z=l(144),s=!e.ActiveXObject&&"ActiveXObject"in e,b=Object.isExtensible,m=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},h=t.exports=d("WeakMap",m,r);if(Z&&s){i=r.getConstructor(m,"WeakMap",!0),o.enable();var I=h.prototype,p=I.delete,G=I.has,y=I.get,X=I.set;c(I,{delete:function(t){if(a(t)&&!b(t)){var n=u(this);return n.frozen||(n.frozen=new i),p.call(this,t)||n.frozen.delete(t)}return p.call(this,t)},has:function(t){if(a(t)&&!b(t)){var n=u(this);return n.frozen||(n.frozen=new i),G.call(this,t)||n.frozen.has(t)}return G.call(this,t)},get:function(t){if(a(t)&&!b(t)){var n=u(this);return n.frozen||(n.frozen=new i),G.call(this,t)?y.call(this,t):n.frozen.get(t)}return y.call(this,t)},set:function(t,n){if(a(t)&&!b(t)){var l=u(this);l.frozen||(l.frozen=new i),G.call(this,t)?X.call(this,t,n):l.frozen.set(t,n)}else X.call(this,t,n);return this}})}},function(t,n,l){"use strict";var i=l(1);t.exports=function(t,n){var l,e=i(this),c=arguments.length>2?arguments[2]:void 0;if("function"!=typeof n&&"function"!=typeof c)throw TypeError("At least one callback required");return e.has(t)?(l=e.get(t),"function"==typeof n&&(l=n(l),e.set(t,l))):"function"==typeof c&&(l=c(),e.set(t,l)),l}},function(t,n,l){"use strict";var i=l(17),e=l(62),c=l(16),o=l(60),d=l(13),r=i.set,a=i.getterFor("Object Iterator");t.exports=e((function(t,n){var l=d(t);r(this,{type:"Object Iterator",mode:n,object:l,keys:o(l),index:0})}),"Object",(function(){for(var t=a(this),n=t.keys;;){if(null===n||t.index>=n.length)return t.object=t.keys=null,{value:void 0,done:!0};var l=n[t.index++],i=t.object;if(c(i,l)){switch(t.mode){case"keys":return{value:l,done:!1};case"values":return{value:i[l],done:!1}}return{value:[l,i[l]],done:!1}}}}))},function(t,n,l){var i=l(108);t.exports=i&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,n,l){var i=l(8);t.exports=function(t,n){var l,e;if("string"===n&&"function"==typeof(l=t.toString)&&!i(e=l.call(t)))return e;if("function"==typeof(l=t.valueOf)&&!i(e=l.call(t)))return e;if("string"!==n&&"function"==typeof(l=t.toString)&&!i(e=l.call(t)))return e;throw TypeError("Can't convert object to primitive value")}},function(t,n,l){var i=l(9),e=l(2),c=l(110);t.exports=!i&&!e((function(){return 7!=Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a}))},function(t,n,l){var i=l(4),e=l(111),c=i.WeakMap;t.exports="function"==typeof c&&/native code/.test(e(c))},function(t,n,l){var i=l(16),e=l(112),c=l(24),o=l(14);t.exports=function(t,n){for(var l=e(n),d=o.f,r=c.f,a=0;a<l.length;a++){var u=l[a];i(t,u)||d(t,u,r(n,u))}}},function(t,n,l){var i=l(16),e=l(29),c=l(71).indexOf,o=l(70);t.exports=function(t,n){var l,d=e(t),r=0,a=[];for(l in d)!i(o,l)&&i(d,l)&&a.push(l);for(;n.length>r;)i(d,l=n[r++])&&(~c(a,l)||a.push(l));return a}},function(t,n,l){var i=l(11);t.exports=i("document","documentElement")},function(t,n,l){var i=l(7);n.f=i},function(t,n,l){"use strict";var i=l(13),e=l(50),c=l(10),o=Math.min;t.exports=[].copyWithin||function(t,n){var l=i(this),d=c(l.length),r=e(t,d),a=e(n,d),u=arguments.length>2?arguments[2]:void 0,Z=o((void 0===u?d:e(u,d))-a,d-r),s=1;for(a<r&&r<a+Z&&(s=-1,a+=Z-1,r+=Z-1);Z-- >0;)a in l?l[r]=l[a]:delete l[r],r+=s,a+=s;return l}},function(t,n,l){"use strict";var i=l(51),e=l(10),c=l(19),o=function(t,n,l,d,r,a,u,Z){for(var s,b=r,m=0,h=!!u&&c(u,Z,3);m<d;){if(m in l){if(s=h?h(l[m],m,n):l[m],a>0&&i(s))b=o(t,n,s,e(s.length),b,a-1)-1;else{if(b>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[b]=s}b++}m++}return b};t.exports=o},function(t,n,l){"use strict";var i=l(23).forEach,e=l(40)("forEach");t.exports=e?[].forEach:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}},function(t,n,l){"use strict";var i=l(19),e=l(13),c=l(118),o=l(119),d=l(10),r=l(53),a=l(41),u=l(52);t.exports=function(t){var n,l,Z,s,b,m,h=e(t),I="function"==typeof this?this:Array,p=arguments.length,G=p>1?arguments[1]:void 0,y=void 0!==G,X=u(h),g=0;if(y&&(G=i(G,p>2?arguments[2]:void 0,2)),null==X||I==Array&&o(X))for(l=new I(n=d(h.length));n>g;g++)m=y?G(h[g],g):h[g],r(l,g,m);else for(b=(s=a(h,X)).next,l=new I;!(Z=b.call(s)).done;g++)m=y?c(s,G,[Z.value,g],!0):Z.value,r(l,g,m);return l.length=g,l}},function(t,n,l){var i=l(8);t.exports=function(t){if(!i(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},function(t,n,l){"use strict";var i=l(29),e=l(30),c=l(10),o=l(40),d=Math.min,r=[].lastIndexOf,a=!!r&&1/[1].lastIndexOf(1,-0)<0,u=o("lastIndexOf"),Z=a||!u;t.exports=Z?function(t){if(a)return r.apply(this,arguments)||0;var n=i(this),l=c(n.length),o=l-1;for(arguments.length>1&&(o=d(o,e(arguments[1]))),o<0&&(o=l+o);o>=0;o--)if(o in n&&n[o]===t)return o||0;return-1}:r},function(t,n){var l=Math.floor,i=function(t,n){var o=t.length,d=l(o/2);return o<8?e(t,n):c(i(t.slice(0,d),n),i(t.slice(d),n),n)},e=function(t,n){for(var l,i,e=t.length,c=1;c<e;){for(i=c,l=t[c];i&&n(t[i-1],l)>0;)t[i]=t[--i];i!==c++&&(t[i]=l)}return t},c=function(t,n,l){for(var i=t.length,e=n.length,c=0,o=0,d=[];c<i||o<e;)c<i&&o<e?d.push(l(t[c],n[o])<=0?t[c++]:n[o++]):d.push(c<i?t[c++]:n[o++]);return d};t.exports=i},function(t,n,l){var i=l(39).match(/firefox\/(\d+)/i);t.exports=!!i&&+i[1]},function(t,n,l){var i=l(39);t.exports=/MSIE|Trident/.test(i)},function(t,n,l){var i=l(30),e=l(10);t.exports=function(t){if(void 0===t)return 0;var n=i(t),l=e(n);if(n!==l)throw RangeError("Wrong length or index");return l}},function(t,n,l){"use strict";var i=l(3),e=l(8),c=[].slice,o={},d=function(t,n,l){if(!(n in o)){for(var i=[],e=0;e<n;e++)i[e]="a["+e+"]";o[n]=Function("C,a","return new C("+i.join(",")+")")}return o[n](t,l)};t.exports=Function.bind||function(t){var n=i(this),l=c.call(arguments,1),o=function(){var i=l.concat(c.call(arguments));return this instanceof o?d(n,i.length,i):n.apply(t,i)};return e(n.prototype)&&(o.prototype=n.prototype),o}},function(t,n,l){l(0)({global:!0},{globalThis:l(4)})},function(t,n,l){"use strict";var i=l(14).f,e=l(26),c=l(36),o=l(19),d=l(33),r=l(6),a=l(121),u=l(54),Z=l(9),s=l(55).fastKey,b=l(17),m=b.set,h=b.getterFor;t.exports={getConstructor:function(t,n,l,a){var u=t((function(t,i){d(t,u,n),m(t,{type:n,index:e(null),first:void 0,last:void 0,size:0}),Z||(t.size=0),null!=i&&r(i,t[a],{that:t,AS_ENTRIES:l})})),b=h(n),I=function(t,n,l){var i,e,c=b(t),o=p(t,n);return o?o.value=l:(c.last=o={index:e=s(n,!0),key:n,value:l,previous:i=c.last,next:void 0,removed:!1},c.first||(c.first=o),i&&(i.next=o),Z?c.size++:t.size++,"F"!==e&&(c.index[e]=o)),t},p=function(t,n){var l,i=b(t),e=s(n);if("F"!==e)return i.index[e];for(l=i.first;l;l=l.next)if(l.key==n)return l};return c(u.prototype,{clear:function(){for(var t=b(this),n=t.index,l=t.first;l;)l.removed=!0,l.previous&&(l.previous=l.previous.next=void 0),delete n[l.index],l=l.next;t.first=t.last=void 0,Z?t.size=0:this.size=0},delete:function(t){var n=b(this),l=p(this,t);if(l){var i=l.next,e=l.previous;delete n.index[l.index],l.removed=!0,e&&(e.next=i),i&&(i.previous=e),n.first==l&&(n.first=i),n.last==l&&(n.last=e),Z?n.size--:this.size--}return!!l},forEach:function(t){for(var n,l=b(this),i=o(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.next:l.first;)for(i(n.value,n.key,this);n&&n.removed;)n=n.previous},has:function(t){return!!p(this,t)}}),c(u.prototype,l?{get:function(t){var n=p(this,t);return n&&n.value},set:function(t,n){return I(this,0===t?0:t,n)}}:{add:function(t){return I(this,t=0===t?0:t,t)}}),Z&&i(u.prototype,"size",{get:function(){return b(this).size}}),u},setStrong:function(t,n,l){var i=n+" Iterator",e=h(n),c=h(i);a(t,n,(function(t,n){m(this,{type:i,target:t,state:e(t),kind:n,last:void 0})}),(function(){for(var t=c(this),n=t.kind,l=t.last;l&&l.removed;)l=l.previous;return t.target&&(t.last=l=l?l.next:t.state.first)?"keys"==n?{value:l.key,done:!1}:"values"==n?{value:l.value,done:!1}:{value:[l.key,l.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),l?"entries":"values",!l,!0),u(n)}}},function(t,n){var l=Math.log;t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:l(1+t)}},function(t,n,l){var i=l(129),e=Math.abs,c=Math.pow,o=c(2,-52),d=c(2,-23),r=c(2,127)*(2-d),a=c(2,-126);t.exports=Math.fround||function(t){var n,l,c=e(t),u=i(t);return c<a?u*(c/a/d+1/o-1/o)*a*d:(l=(n=(1+d/o)*c)-(n-c))>r||l!=l?u*(1/0):u*l}},function(t,n,l){var i=l(4).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&i(t)}},function(t,n,l){var i=l(4),e=l(15),c=l(64).trim,o=l(93),d=i.parseFloat,r=1/d(o+"-0")!=-1/0;t.exports=r?function(t){var n=c(e(t)),l=d(n);return 0===l&&"-"==n.charAt(0)?-0:l}:d},function(t,n){var l=1..valueOf;t.exports=function(t){return l.call(t)}},function(t,n,l){"use strict";var i=l(9),e=l(2),c=l(60),o=l(114),d=l(82),r=l(13),a=l(67),u=Object.assign,Z=Object.defineProperty;t.exports=!u||e((function(){if(i&&1!==u({b:1},u(Z({},"a",{enumerable:!0,get:function(){Z(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},n={},l=Symbol();return t[l]=7,"abcdefghijklmnopqrst".split("").forEach((function(t){n[t]=t})),7!=u({},t)[l]||"abcdefghijklmnopqrst"!=c(u({},n)).join("")}))?function(t,n){for(var l=r(t),e=arguments.length,u=1,Z=o.f,s=d.f;e>u;)for(var b,m=a(arguments[u++]),h=Z?c(m).concat(Z(m)):c(m),I=h.length,p=0;I>p;)b=h[p++],i&&!s.call(m,b)||(l[b]=m[b]);return l}:u},function(t,n,l){var i=l(9),e=l(60),c=l(29),o=l(82).f,d=function(t){return function(n){for(var l,d=c(n),r=e(d),a=r.length,u=0,Z=[];a>u;)l=r[u++],i&&!o.call(d,l)||Z.push(t?[l,d[l]]:d[l]);return Z}};t.exports={entries:d(!0),values:d(!1)}},function(t,n){t.exports=Object.is||function(t,n){return t===n?0!==t||1/t==1/n:t!=t&&n!=n}},function(t,n,l){var i=l(4);t.exports=i.Promise},function(t,n,l){var i=l(39);t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(i)},function(t,n,l){var i,e,c,o,d,r,a,u,Z=l(4),s=l(24).f,b=l(132).set,m=l(171),h=l(316),I=l(317),p=l(63),G=Z.MutationObserver||Z.WebKitMutationObserver,y=Z.document,X=Z.process,g=Z.Promise,V=s(Z,"queueMicrotask"),W=V&&V.value;W||(i=function(){var t,n;for(p&&(t=X.domain)&&t.exit();e;){n=e.fn,e=e.next;try{n()}catch(t){throw e?o():c=void 0,t}}c=void 0,t&&t.enter()},m||p||I||!G||!y?!h&&g&&g.resolve?((a=g.resolve(void 0)).constructor=g,u=a.then,o=function(){u.call(a,i)}):o=p?function(){X.nextTick(i)}:function(){b.call(Z,i)}:(d=!0,r=y.createTextNode(""),new G(i).observe(r,{characterData:!0}),o=function(){r.data=d=!d})),t.exports=W||function(t){var n={fn:t,next:void 0};c&&(c.next=n),e||(e=n,o()),c=n}},function(t,n,l){var i=l(1),e=l(8),c=l(78);t.exports=function(t,n){if(i(t),e(n)&&n.constructor===t)return n;var l=c.f(t);return(0,l.resolve)(n),l.promise}},function(t,n,l){var i=l(4);t.exports=function(t,n){var l=i.console;l&&l.error&&(1===arguments.length?l.error(t):l.error(t,n))}},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(78),o=l(95),d=l(6);i({target:"Promise",stat:!0},{allSettled:function(t){var n=this,l=c.f(n),i=l.resolve,r=l.reject,a=o((function(){var l=e(n.resolve),c=[],o=0,r=1;d(t,(function(t){var e=o++,d=!1;c.push(void 0),r++,l.call(n,t).then((function(t){d||(d=!0,c[e]={status:"fulfilled",value:t},--r||i(c))}),(function(t){d||(d=!0,c[e]={status:"rejected",reason:t},--r||i(c))}))})),--r||i(c)}));return a.error&&r(a.value),l.promise}})},function(t,n,l){var i=l(16);t.exports=function(t){return void 0!==t&&(i(t,"value")||i(t,"writable"))}},function(t,n,l){var i=l(2),e=l(4).RegExp;t.exports=i((function(){var t=e(".","s");return!(t.dotAll&&t.exec("\n")&&"s"===t.flags)}))},function(t,n,l){var i=l(2),e=l(4).RegExp;t.exports=i((function(){var t=e("(?<a>b)","g");return"b"!==t.exec("b").groups.a||"bc"!=="b".replace(t,"$<a>c")}))},function(t,n,l){"use strict";var i=l(90),e=l(161);t.exports=i("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),e)},function(t,n,l){"use strict";var i=l(66).charAt,e=l(15),c=l(17),o=l(121),d=c.set,r=c.getterFor("String Iterator");o(String,"String",(function(t){d(this,{type:"String Iterator",string:e(t),index:0})}),(function(){var t,n=r(this),l=n.string,e=n.index;return e>=l.length?{value:void 0,done:!0}:(t=i(l,e),n.index+=t.length,{value:t,done:!1})}))},function(t,n,l){"use strict";var i=l(0),e=l(62),c=l(22),o=l(10),d=l(15),r=l(3),a=l(1),u=l(46),Z=l(79),s=l(65),b=l(18),m=l(2),h=l(7),I=l(28),p=l(99),G=l(17),y=l(5),X=h("matchAll"),g=G.set,V=G.getterFor("RegExp String Iterator"),W=RegExp.prototype,R=W.exec,C="".matchAll,f=!!C&&!m((function(){"a".matchAll(/./)})),S=e((function(t,n,l,i){g(this,{type:"RegExp String Iterator",regexp:t,string:n,global:l,unicode:i,done:!1})}),"RegExp String",(function(){var t=V(this);if(t.done)return{value:void 0,done:!0};var n=t.regexp,l=t.string,i=function(t,n){var l,i=t.exec;if("function"==typeof i){if("object"!=typeof(l=i.call(t,n)))throw TypeError("Incorrect exec result");return l}return R.call(t,n)}(n,l);return null===i?{value:void 0,done:t.done=!0}:t.global?(""===d(i[0])&&(n.lastIndex=p(l,o(n.lastIndex),t.unicode)),{value:i,done:!1}):(t.done=!0,{value:i,done:!1})})),v=function(t){var n,l,i,e,c,r,u=a(this),Z=d(t);return n=I(u,RegExp),void 0===(l=u.flags)&&u instanceof RegExp&&!("flags"in W)&&(l=s.call(u)),i=void 0===l?"":d(l),e=new n(n===RegExp?u.source:u,i),c=!!~i.indexOf("g"),r=!!~i.indexOf("u"),e.lastIndex=o(u.lastIndex),new S(e,Z,c,r)};i({target:"String",proto:!0,forced:f},{matchAll:function(t){var n,l,i,e=c(this);if(null!=t){if(Z(t)&&!~d(c("flags"in W?t.flags:s.call(t))).indexOf("g"))throw TypeError("`.matchAll` does not allow non-global regexes");if(f)return C.apply(e,arguments);if(void 0===(l=t[X])&&y&&"RegExp"==u(t)&&(l=v),null!=l)return r(l).call(t,e)}else if(f)return C.apply(e,arguments);return n=d(e),i=new RegExp(t,"g"),y?v.call(i,n):i[X](n)}}),y||X in W||b(W,X,v)},function(t,n,l){var i=l(39);t.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(i)},function(t,n,l){var i=l(13),e=Math.floor,c="".replace,o=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,d=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,n,l,r,a,u){var Z=l+t.length,s=r.length,b=d;return void 0!==a&&(a=i(a),b=o),c.call(u,b,(function(i,c){var o;switch(c.charAt(0)){case"$":return"$";case"&":return t;case"`":return n.slice(0,l);case"'":return n.slice(Z);case"<":o=a[c.slice(1,-1)];break;default:var d=+c;if(0===d)return i;if(d>s){var u=e(d/10);return 0===u?i:u<=s?void 0===r[u-1]?c.charAt(1):r[u-1]+c.charAt(1):i}o=r[d-1]}return void 0===o?"":o}))}},function(t,n,l){var i=l(80);t.exports=function(t,n){var l=i(t);if(l%n)throw RangeError("Wrong offset");return l}},function(t,n,l){var i=l(13),e=l(10),c=l(41),o=l(52),d=l(119),r=l(19),a=l(12).aTypedArrayConstructor;t.exports=function(t){var n,l,u,Z,s,b,m=i(t),h=arguments.length,I=h>1?arguments[1]:void 0,p=void 0!==I,G=o(m);if(null!=G&&!d(G))for(b=(s=c(m,G)).next,m=[];!(Z=b.call(s)).done;)m.push(Z.value);for(p&&h>2&&(I=r(I,arguments[2],2)),l=e(m.length),u=new(a(this))(l),n=0;l>n;n++)u[n]=p?I(m[n],n):m[n];return u}},function(t,n,l){"use strict";var i=l(36),e=l(55).getWeakData,c=l(1),o=l(8),d=l(33),r=l(6),a=l(23),u=l(16),Z=l(17),s=Z.set,b=Z.getterFor,m=a.find,h=a.findIndex,I=0,p=function(t){return t.frozen||(t.frozen=new G)},G=function(){this.entries=[]},y=function(t,n){return m(t.entries,(function(t){return t[0]===n}))};G.prototype={get:function(t){var n=y(this,t);if(n)return n[1]},has:function(t){return!!y(this,t)},set:function(t,n){var l=y(this,t);l?l[1]=n:this.entries.push([t,n])},delete:function(t){var n=h(this.entries,(function(n){return n[0]===t}));return~n&&this.entries.splice(n,1),!!~n}},t.exports={getConstructor:function(t,n,l,a){var Z=t((function(t,i){d(t,Z,n),s(t,{type:n,id:I++,frozen:void 0}),null!=i&&r(i,t[a],{that:t,AS_ENTRIES:l})})),m=b(n),h=function(t,n,l){var i=m(t),o=e(c(n),!0);return!0===o?p(i).set(n,l):o[i.id]=l,t};return i(Z.prototype,{delete:function(t){var n=m(this);if(!o(t))return!1;var l=e(t);return!0===l?p(n).delete(t):l&&u(l,n.id)&&delete l[n.id]},has:function(t){var n=m(this);if(!o(t))return!1;var l=e(t);return!0===l?p(n).has(t):l&&u(l,n.id)}}),i(Z.prototype,l?{get:function(t){var n=m(this);if(o(t)){var l=e(t);return!0===l?p(n).get(t):l?l[n.id]:void 0}},set:function(t,n){return h(this,t,n)}}:{add:function(t){return h(this,t,!0)}}),Z}}},function(t,n,l){var i=l(188),e=l(3),c=l(1),o=l(41),d=l(102),r=l(7)("asyncIterator");t.exports=function(t,n){var l=arguments.length<2?d(t[r]):n;return void 0===l?new i(o(t)):c(e(l).call(t))}},function(t,n,l){"use strict";var i=l(61),e=l(1),c=l(26),o=l(102),d=l(36),r=l(17),a=l(11)("Promise"),u=r.set,Z=r.get,s=function(t,n,l){var i=t.done;a.resolve(t.value).then((function(t){n({done:i,value:t})}),l)},b=function(t){u(this,{iterator:e(t),next:t.next})};b.prototype=d(c(i.AsyncIterator.prototype),{next:function(t){var n=Z(this),l=!!arguments.length;return new a((function(i,c){var o=e(n.next.apply(n.iterator,l?[t]:[]));s(o,i,c)}))},return:function(t){var n=Z(this).iterator,l=!!arguments.length;return new a((function(i,c){var d=o(n.return);if(void 0===d)return i({done:!0,value:t});var r=e(d.apply(n,l?[t]:[]));s(r,i,c)}))},throw:function(t){var n=Z(this).iterator,l=!!arguments.length;return new a((function(i,c){var d=o(n.throw);if(void 0===d)return c(t);var r=e(d.apply(n,l?[t]:[]));s(r,i,c)}))}}),t.exports=b},function(t,n,l){var i=l(128),e=l(138),c=l(26),o=l(8),d=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=c(null)};d.prototype.get=function(t,n){return this[t]||(this[t]=n())},d.prototype.next=function(t,n,l){var c=l?this.objectsByIndex[t]||(this.objectsByIndex[t]=new e):this.primitives||(this.primitives=new i),o=c.get(n);return o||c.set(n,o=new d),o};var r=new d;t.exports=function(){var t,n,l=r,i=arguments.length;for(t=0;t<i;t++)o(n=arguments[t])&&(l=l.next(t,n,!0));if(this===Object&&l===r)throw TypeError("Composite keys must contain a non-primitive component");for(t=0;t<i;t++)o(n=arguments[t])||(l=l.next(t,n,!1));return l}},function(t,n){t.exports=Math.scale||function(t,n,l,i,e){return 0===arguments.length||t!=t||n!=n||l!=l||i!=i||e!=e?NaN:t===1/0||t===-1/0?t:(t-n)*(e-i)/(l-n)+i}},function(t,n,l){"use strict";var i=l(1),e=l(3);t.exports=function(){for(var t=i(this),n=e(t.add),l=0,c=arguments.length;l<c;l++)n.call(t,arguments[l]);return t}},function(t,n){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},function(t,n,l){var i=l(2),e=l(7),c=l(5),o=e("iterator");t.exports=!i((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),n=t.searchParams,l="";return t.pathname="c%20d",n.forEach((function(t,i){n.delete("b"),l+=i+t})),c&&!t.toJSON||!n.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==n.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!n[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==l||"x"!==new URL("http://x",void 0).host}))},function(t,n,l){"use strict";l(87);var i=l(0),e=l(11),c=l(193),o=l(25),d=l(36),r=l(34),a=l(62),u=l(17),Z=l(33),s=l(16),b=l(19),m=l(76),h=l(1),I=l(8),p=l(15),G=l(26),y=l(38),X=l(41),g=l(52),V=l(7),W=e("fetch"),R=e("Request"),C=R&&R.prototype,f=e("Headers"),S=V("iterator"),v=u.set,K=u.getterFor("URLSearchParams"),Y=u.getterFor("URLSearchParamsIterator"),J=/\+/g,N=Array(4),L=function(t){return N[t-1]||(N[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},H=function(t){try{return decodeURIComponent(t)}catch(n){return t}},U=function(t){var n=t.replace(J," "),l=4;try{return decodeURIComponent(n)}catch(t){for(;l;)n=n.replace(L(l--),H);return n}},x=/[!'()~]|%20/g,T={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},k=function(t){return T[t]},F=function(t){return encodeURIComponent(t).replace(x,k)},B=function(t,n){if(n)for(var l,i,e=n.split("&"),c=0;c<e.length;)(l=e[c++]).length&&(i=l.split("="),t.push({key:U(i.shift()),value:U(i.join("="))}))},z=function(t){this.entries.length=0,B(this.entries,t)},w=function(t,n){if(t<n)throw TypeError("Not enough arguments")},A=a((function(t,n){v(this,{type:"URLSearchParamsIterator",iterator:X(K(t).entries),kind:n})}),"Iterator",(function(){var t=Y(this),n=t.kind,l=t.iterator.next(),i=l.value;return l.done||(l.value="keys"===n?i.key:"values"===n?i.value:[i.key,i.value]),l})),M=function(){Z(this,M,"URLSearchParams");var t,n,l,i,e,c,o,d,r,a=arguments.length>0?arguments[0]:void 0,u=this,b=[];if(v(u,{type:"URLSearchParams",entries:b,updateURL:function(){},updateSearchParams:z}),void 0!==a)if(I(a))if("function"==typeof(t=g(a)))for(l=(n=X(a,t)).next;!(i=l.call(n)).done;){if((o=(c=(e=X(h(i.value))).next).call(e)).done||(d=c.call(e)).done||!c.call(e).done)throw TypeError("Expected sequence with length 2");b.push({key:p(o.value),value:p(d.value)})}else for(r in a)s(a,r)&&b.push({key:r,value:p(a[r])});else B(b,"string"==typeof a?"?"===a.charAt(0)?a.slice(1):a:p(a))},P=M.prototype;if(d(P,{append:function(t,n){w(arguments.length,2);var l=K(this);l.entries.push({key:p(t),value:p(n)}),l.updateURL()},delete:function(t){w(arguments.length,1);for(var n=K(this),l=n.entries,i=p(t),e=0;e<l.length;)l[e].key===i?l.splice(e,1):e++;n.updateURL()},get:function(t){w(arguments.length,1);for(var n=K(this).entries,l=p(t),i=0;i<n.length;i++)if(n[i].key===l)return n[i].value;return null},getAll:function(t){w(arguments.length,1);for(var n=K(this).entries,l=p(t),i=[],e=0;e<n.length;e++)n[e].key===l&&i.push(n[e].value);return i},has:function(t){w(arguments.length,1);for(var n=K(this).entries,l=p(t),i=0;i<n.length;)if(n[i++].key===l)return!0;return!1},set:function(t,n){w(arguments.length,1);for(var l,i=K(this),e=i.entries,c=!1,o=p(t),d=p(n),r=0;r<e.length;r++)(l=e[r]).key===o&&(c?e.splice(r--,1):(c=!0,l.value=d));c||e.push({key:o,value:d}),i.updateURL()},sort:function(){var t,n,l,i=K(this),e=i.entries,c=e.slice();for(e.length=0,l=0;l<c.length;l++){for(t=c[l],n=0;n<l;n++)if(e[n].key>t.key){e.splice(n,0,t);break}n===l&&e.push(t)}i.updateURL()},forEach:function(t){for(var n,l=K(this).entries,i=b(t,arguments.length>1?arguments[1]:void 0,3),e=0;e<l.length;)i((n=l[e++]).value,n.key,this)},keys:function(){return new A(this,"keys")},values:function(){return new A(this,"values")},entries:function(){return new A(this,"entries")}},{enumerable:!0}),o(P,S,P.entries),o(P,"toString",(function(){for(var t,n=K(this).entries,l=[],i=0;i<n.length;)t=n[i++],l.push(F(t.key)+"="+F(t.value));return l.join("&")}),{enumerable:!0}),r(M,"URLSearchParams"),i({global:!0,forced:!c},{URLSearchParams:M}),!c&&"function"==typeof f){var Q=function(t){if(I(t)){var n,l=t.body;if("URLSearchParams"===m(l))return(n=t.headers?new f(t.headers):new f).has("content-type")||n.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),G(t,{body:y(0,String(l)),headers:y(0,n)})}return t};if("function"==typeof W&&i({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return W(t,arguments.length>1?Q(arguments[1]):{})}}),"function"==typeof R){var j=function(t){return Z(this,j,"Request"),new R(t,arguments.length>1?Q(arguments[1]):{})};C.constructor=j,j.prototype=C,i({global:!0,forced:!0},{Request:j})}}t.exports={URLSearchParams:M,getState:K}},function(t,l){t.exports=n},function(t,n,l){"use strict";var i=l(0),e=l(4),c=l(11),o=l(5),d=l(9),r=l(108),a=l(2),u=l(16),Z=l(51),s=l(8),b=l(59),m=l(1),h=l(13),I=l(29),p=l(47),G=l(15),y=l(38),X=l(26),g=l(60),V=l(49),W=l(116),R=l(114),C=l(24),f=l(14),S=l(82),v=l(18),K=l(25),Y=l(68),J=l(84),N=l(70),L=l(69),H=l(7),U=l(148),x=l(21),T=l(34),k=l(17),F=l(23).forEach,B=J("hidden"),z=H("toPrimitive"),w=k.set,A=k.getterFor("Symbol"),M=Object.prototype,P=e.Symbol,Q=c("JSON","stringify"),j=C.f,E=f.f,D=W.f,O=S.f,q=Y("symbols"),_=Y("op-symbols"),$=Y("string-to-symbol-registry"),tt=Y("symbol-to-string-registry"),nt=Y("wks"),lt=e.QObject,it=!lt||!lt.prototype||!lt.prototype.findChild,et=d&&a((function(){return 7!=X(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a}))?function(t,n,l){var i=j(M,n);i&&delete M[n],E(t,n,l),i&&t!==M&&E(M,n,i)}:E,ct=function(t,n){var l=q[t]=X(P.prototype);return w(l,{type:"Symbol",tag:t,description:n}),d||(l.description=n),l},ot=function(t,n,l){t===M&&ot(_,n,l),m(t);var i=p(n);return m(l),u(q,i)?(l.enumerable?(u(t,B)&&t[B][i]&&(t[B][i]=!1),l=X(l,{enumerable:y(0,!1)})):(u(t,B)||E(t,B,y(1,{})),t[B][i]=!0),et(t,i,l)):E(t,i,l)},dt=function(t,n){m(t);var l=I(n),i=g(l).concat(Zt(l));return F(i,(function(n){d&&!rt.call(l,n)||ot(t,n,l[n])})),t},rt=function(t){var n=p(t),l=O.call(this,n);return!(this===M&&u(q,n)&&!u(_,n))&&(!(l||!u(this,n)||!u(q,n)||u(this,B)&&this[B][n])||l)},at=function(t,n){var l=I(t),i=p(n);if(l!==M||!u(q,i)||u(_,i)){var e=j(l,i);return!e||!u(q,i)||u(l,B)&&l[B][i]||(e.enumerable=!0),e}},ut=function(t){var n=D(I(t)),l=[];return F(n,(function(t){u(q,t)||u(N,t)||l.push(t)})),l},Zt=function(t){var n=t===M,l=D(n?_:I(t)),i=[];return F(l,(function(t){!u(q,t)||n&&!u(M,t)||i.push(q[t])})),i};(r||(K((P=function(){if(this instanceof P)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?G(arguments[0]):void 0,n=L(t),l=function(t){this===M&&l.call(_,t),u(this,B)&&u(this[B],n)&&(this[B][n]=!1),et(this,n,y(1,t))};return d&&it&&et(M,n,{configurable:!0,set:l}),ct(n,t)}).prototype,"toString",(function(){return A(this).tag})),K(P,"withoutSetter",(function(t){return ct(L(t),t)})),S.f=rt,f.f=ot,C.f=at,V.f=W.f=ut,R.f=Zt,U.f=function(t){return ct(H(t),t)},d&&(E(P.prototype,"description",{configurable:!0,get:function(){return A(this).description}}),o||K(M,"propertyIsEnumerable",rt,{unsafe:!0}))),i({global:!0,wrap:!0,forced:!r,sham:!r},{Symbol:P}),F(g(nt),(function(t){x(t)})),i({target:"Symbol",stat:!0,forced:!r},{for:function(t){var n=G(t);if(u($,n))return $[n];var l=P(n);return $[n]=l,tt[l]=n,l},keyFor:function(t){if(!b(t))throw TypeError(t+" is not a symbol");if(u(tt,t))return tt[t]},useSetter:function(){it=!0},useSimple:function(){it=!1}}),i({target:"Object",stat:!0,forced:!r,sham:!d},{create:function(t,n){return void 0===n?X(t):dt(X(t),n)},defineProperty:ot,defineProperties:dt,getOwnPropertyDescriptor:at}),i({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:ut,getOwnPropertySymbols:Zt}),i({target:"Object",stat:!0,forced:a((function(){R.f(1)}))},{getOwnPropertySymbols:function(t){return R.f(h(t))}}),Q)&&i({target:"JSON",stat:!0,forced:!r||a((function(){var t=P();return"[null]"!=Q([t])||"{}"!=Q({a:t})||"{}"!=Q(Object(t))}))},{stringify:function(t,n,l){for(var i,e=[t],c=1;arguments.length>c;)e.push(arguments[c++]);if(i=n,(s(n)||void 0!==t)&&!b(t))return Z(n)||(n=function(t,n){if("function"==typeof i&&(n=i.call(this,t,n)),!b(n))return n}),e[1]=n,Q.apply(null,e)}});P.prototype[z]||v(P.prototype,z,P.prototype.valueOf),T(P,"Symbol"),N[B]=!0},function(t,n,l){var i=l(8),e=l(51),c=l(7)("species");t.exports=function(t){var n;return e(t)&&("function"!=typeof(n=t.constructor)||n!==Array&&!e(n.prototype)?i(n)&&null===(n=n[c])&&(n=void 0):n=void 0),void 0===n?Array:n}},function(t,n,l){"use strict";var i=l(0),e=l(9),c=l(4),o=l(16),d=l(8),r=l(14).f,a=l(145),u=c.Symbol;if(e&&"function"==typeof u&&(!("description"in u.prototype)||void 0!==u().description)){var Z={},s=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),n=this instanceof s?new u(t):void 0===t?u():u(t);return""===t&&(Z[n]=!0),n};a(s,u);var b=s.prototype=u.prototype;b.constructor=s;var m=b.toString,h="Symbol(test)"==String(u("test")),I=/^Symbol\((.*)\)[^)]+$/;r(b,"description",{configurable:!0,get:function(){var t=d(this)?this.valueOf():this,n=m.call(t);if(o(Z,t))return"";var l=h?n.slice(7,-1):n.replace(I,"$1");return""===l?void 0:l}}),i({global:!0,forced:!0},{Symbol:s})}},function(t,n,l){l(21)("asyncIterator")},function(t,n,l){l(21)("hasInstance")},function(t,n,l){l(21)("isConcatSpreadable")},function(t,n,l){l(21)("iterator")},function(t,n,l){l(21)("match")},function(t,n,l){l(21)("matchAll")},function(t,n,l){l(21)("replace")},function(t,n,l){l(21)("search")},function(t,n,l){l(21)("species")},function(t,n,l){l(21)("split")},function(t,n,l){l(21)("toPrimitive")},function(t,n,l){l(21)("toStringTag")},function(t,n,l){l(21)("unscopables")},function(t,n,l){"use strict";var i=l(0),e=l(2),c=l(51),o=l(8),d=l(13),r=l(10),a=l(53),u=l(73),Z=l(74),s=l(7),b=l(48),m=s("isConcatSpreadable"),h=b>=51||!e((function(){var t=[];return t[m]=!1,t.concat()[0]!==t})),I=Z("concat"),p=function(t){if(!o(t))return!1;var n=t[m];return void 0!==n?!!n:c(t)};i({target:"Array",proto:!0,forced:!h||!I},{concat:function(t){var n,l,i,e,c,o=d(this),Z=u(o,0),s=0;for(n=-1,i=arguments.length;n<i;n++)if(p(c=-1===n?o:arguments[n])){if(s+(e=r(c.length))>9007199254740991)throw TypeError("Maximum allowed index exceeded");for(l=0;l<e;l++,s++)l in c&&a(Z,s,c[l])}else{if(s>=9007199254740991)throw TypeError("Maximum allowed index exceeded");a(Z,s++,c)}return Z.length=s,Z}})},function(t,n,l){var i=l(0),e=l(149),c=l(35);i({target:"Array",proto:!0},{copyWithin:e}),c("copyWithin")},function(t,n,l){"use strict";var i=l(0),e=l(23).every;i({target:"Array",proto:!0,forced:!l(40)("every")},{every:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){var i=l(0),e=l(117),c=l(35);i({target:"Array",proto:!0},{fill:e}),c("fill")},function(t,n,l){"use strict";var i=l(0),e=l(23).filter;i({target:"Array",proto:!0,forced:!l(74)("filter")},{filter:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){"use strict";var i=l(0),e=l(23).find,c=l(35),o=!0;"find"in[]&&Array(1).find((function(){o=!1})),i({target:"Array",proto:!0,forced:o},{find:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("find")},function(t,n,l){"use strict";var i=l(0),e=l(23).findIndex,c=l(35),o=!0;"findIndex"in[]&&Array(1).findIndex((function(){o=!1})),i({target:"Array",proto:!0,forced:o},{findIndex:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("findIndex")},function(t,n,l){"use strict";var i=l(0),e=l(150),c=l(13),o=l(10),d=l(30),r=l(73);i({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,n=c(this),l=o(n.length),i=r(n,0);return i.length=e(i,n,n,l,0,void 0===t?1:d(t)),i}})},function(t,n,l){"use strict";var i=l(0),e=l(150),c=l(13),o=l(10),d=l(3),r=l(73);i({target:"Array",proto:!0},{flatMap:function(t){var n,l=c(this),i=o(l.length);return d(t),(n=r(l,0)).length=e(n,l,l,i,0,1,t,arguments.length>1?arguments[1]:void 0),n}})},function(t,n,l){"use strict";var i=l(0),e=l(151);i({target:"Array",proto:!0,forced:[].forEach!=e},{forEach:e})},function(t,n,l){var i=l(0),e=l(152);i({target:"Array",stat:!0,forced:!l(86)((function(t){Array.from(t)}))},{from:e})},function(t,n,l){"use strict";var i=l(0),e=l(71).includes,c=l(35);i({target:"Array",proto:!0},{includes:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}}),c("includes")},function(t,n,l){"use strict";var i=l(0),e=l(71).indexOf,c=l(40),o=[].indexOf,d=!!o&&1/[1].indexOf(1,-0)<0,r=c("indexOf");i({target:"Array",proto:!0,forced:d||!r},{indexOf:function(t){return d?o.apply(this,arguments)||0:e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){l(0)({target:"Array",stat:!0},{isArray:l(51)})},function(t,n,l){"use strict";var i=l(0),e=l(67),c=l(29),o=l(40),d=[].join,r=e!=Object,a=o("join",",");i({target:"Array",proto:!0,forced:r||!a},{join:function(t){return d.call(c(this),void 0===t?",":t)}})},function(t,n,l){var i=l(0),e=l(154);i({target:"Array",proto:!0,forced:e!==[].lastIndexOf},{lastIndexOf:e})},function(t,n,l){"use strict";var i=l(0),e=l(23).map;i({target:"Array",proto:!0,forced:!l(74)("map")},{map:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){"use strict";var i=l(0),e=l(2),c=l(53);i({target:"Array",stat:!0,forced:e((function(){function t(){}return!(Array.of.call(t)instanceof t)}))},{of:function(){for(var t=0,n=arguments.length,l=new("function"==typeof this?this:Array)(n);n>t;)c(l,t,arguments[t++]);return l.length=n,l}})},function(t,n,l){"use strict";var i=l(0),e=l(88).left,c=l(40),o=l(48),d=l(63);i({target:"Array",proto:!0,forced:!c("reduce")||!d&&o>79&&o<83},{reduce:function(t){return e(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){"use strict";var i=l(0),e=l(88).right,c=l(40),o=l(48),d=l(63);i({target:"Array",proto:!0,forced:!c("reduceRight")||!d&&o>79&&o<83},{reduceRight:function(t){return e(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){"use strict";var i=l(0),e=l(51),c=[].reverse,o=[1,2];i({target:"Array",proto:!0,forced:String(o)===String(o.reverse())},{reverse:function(){return e(this)&&(this.length=this.length),c.call(this)}})},function(t,n,l){"use strict";var i=l(0),e=l(8),c=l(51),o=l(50),d=l(10),r=l(29),a=l(53),u=l(7),Z=l(74)("slice"),s=u("species"),b=[].slice,m=Math.max;i({target:"Array",proto:!0,forced:!Z},{slice:function(t,n){var l,i,u,Z=r(this),h=d(Z.length),I=o(t,h),p=o(void 0===n?h:n,h);if(c(Z)&&("function"!=typeof(l=Z.constructor)||l!==Array&&!c(l.prototype)?e(l)&&null===(l=l[s])&&(l=void 0):l=void 0,l===Array||void 0===l))return b.call(Z,I,p);for(i=new(void 0===l?Array:l)(m(p-I,0)),u=0;I<p;I++,u++)I in Z&&a(i,u,Z[I]);return i.length=u,i}})},function(t,n,l){"use strict";var i=l(0),e=l(23).some;i({target:"Array",proto:!0,forced:!l(40)("some")},{some:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(13),o=l(10),d=l(15),r=l(2),a=l(155),u=l(40),Z=l(156),s=l(157),b=l(48),m=l(124),h=[],I=h.sort,p=r((function(){h.sort(void 0)})),G=r((function(){h.sort(null)})),y=u("sort"),X=!r((function(){if(b)return b<70;if(!(Z&&Z>3)){if(s)return!0;if(m)return m<603;var t,n,l,i,e="";for(t=65;t<76;t++){switch(n=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:l=3;break;case 68:case 71:l=4;break;default:l=2}for(i=0;i<47;i++)h.push({k:n+i,v:l})}for(h.sort((function(t,n){return n.v-t.v})),i=0;i<h.length;i++)n=h[i].k.charAt(0),e.charAt(e.length-1)!==n&&(e+=n);return"DGBEFHACIJK"!==e}}));i({target:"Array",proto:!0,forced:p||!G||!y||!X},{sort:function(t){void 0!==t&&e(t);var n=c(this);if(X)return void 0===t?I.call(n):I.call(n,t);var l,i,r=[],u=o(n.length);for(i=0;i<u;i++)i in n&&r.push(n[i]);for(l=(r=a(r,function(t){return function(n,l){return void 0===l?-1:void 0===n?1:void 0!==t?+t(n,l)||0:d(n)>d(l)?1:-1}}(t))).length,i=0;i<l;)n[i]=r[i++];for(;i<u;)delete n[i++];return n}})},function(t,n,l){l(54)("Array")},function(t,n,l){"use strict";var i=l(0),e=l(50),c=l(30),o=l(10),d=l(13),r=l(73),a=l(53),u=l(74)("splice"),Z=Math.max,s=Math.min;i({target:"Array",proto:!0,forced:!u},{splice:function(t,n){var l,i,u,b,m,h,I=d(this),p=o(I.length),G=e(t,p),y=arguments.length;if(0===y?l=i=0:1===y?(l=0,i=p-G):(l=y-2,i=s(Z(c(n),0),p-G)),p+l-i>9007199254740991)throw TypeError("Maximum allowed length exceeded");for(u=r(I,i),b=0;b<i;b++)(m=G+b)in I&&a(u,b,I[m]);if(u.length=i,l<i){for(b=G;b<p-i;b++)h=b+l,(m=b+i)in I?I[h]=I[m]:delete I[h];for(b=p;b>p-i+l;b--)delete I[b-1]}else if(l>i)for(b=p-i;b>G;b--)h=b+l-1,(m=b+i-1)in I?I[h]=I[m]:delete I[h];for(b=0;b<l;b++)I[b+G]=arguments[b+2];return I.length=p-i+l,u}})},function(t,n,l){l(35)("flat")},function(t,n,l){l(35)("flatMap")},function(t,n,l){"use strict";var i=l(0),e=l(4),c=l(89),o=l(54),d=c.ArrayBuffer;i({global:!0,forced:e.ArrayBuffer!==d},{ArrayBuffer:d}),o("ArrayBuffer")},function(t,n){var l=Math.abs,i=Math.pow,e=Math.floor,c=Math.log,o=Math.LN2;t.exports={pack:function(t,n,d){var r,a,u,Z=new Array(d),s=8*d-n-1,b=(1<<s)-1,m=b>>1,h=23===n?i(2,-24)-i(2,-77):0,I=t<0||0===t&&1/t<0?1:0,p=0;for((t=l(t))!=t||t===1/0?(a=t!=t?1:0,r=b):(r=e(c(t)/o),t*(u=i(2,-r))<1&&(r--,u*=2),(t+=r+m>=1?h/u:h*i(2,1-m))*u>=2&&(r++,u/=2),r+m>=b?(a=0,r=b):r+m>=1?(a=(t*u-1)*i(2,n),r+=m):(a=t*i(2,m-1)*i(2,n),r=0));n>=8;Z[p++]=255&a,a/=256,n-=8);for(r=r<<n|a,s+=n;s>0;Z[p++]=255&r,r/=256,s-=8);return Z[--p]|=128*I,Z},unpack:function(t,n){var l,e=t.length,c=8*e-n-1,o=(1<<c)-1,d=o>>1,r=c-7,a=e-1,u=t[a--],Z=127&u;for(u>>=7;r>0;Z=256*Z+t[a],a--,r-=8);for(l=Z&(1<<-r)-1,Z>>=-r,r+=n;r>0;l=256*l+t[a],a--,r-=8);if(0===Z)Z=1-d;else{if(Z===o)return l?NaN:u?-1/0:1/0;l+=i(2,n),Z-=d}return(u?-1:1)*l*i(2,Z-n)}}},function(t,n,l){var i=l(0),e=l(12);i({target:"ArrayBuffer",stat:!0,forced:!e.NATIVE_ARRAY_BUFFER_VIEWS},{isView:e.isView})},function(t,n,l){"use strict";var i=l(0),e=l(2),c=l(89),o=l(1),d=l(50),r=l(10),a=l(28),u=c.ArrayBuffer,Z=c.DataView,s=u.prototype.slice;i({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:e((function(){return!new u(2).slice(1,void 0).byteLength}))},{slice:function(t,n){if(void 0!==s&&void 0===n)return s.call(o(this),t);for(var l=o(this).byteLength,i=d(t,l),e=d(void 0===n?l:n,l),c=new(a(this,u))(r(e-i)),b=new Z(this),m=new Z(c),h=0;i<e;)m.setUint8(h++,b.getUint8(i++));return c}})},function(t,n,l){var i=l(0),e=l(89);i({global:!0,forced:!l(125)},{DataView:e.DataView})},function(t,n,l){l(0)({target:"Date",stat:!0},{now:function(){return(new Date).getTime()}})},function(t,n,l){var i=l(0),e=l(247);i({target:"Date",proto:!0,forced:Date.prototype.toISOString!==e},{toISOString:e})},function(t,n,l){"use strict";var i=l(2),e=l(126).start,c=Math.abs,o=Date.prototype,d=o.getTime,r=o.toISOString;t.exports=i((function(){return"0385-07-25T07:06:39.999Z"!=r.call(new Date(-50000000000001))}))||!i((function(){r.call(new Date(NaN))}))?function(){if(!isFinite(d.call(this)))throw RangeError("Invalid time value");var t=this.getUTCFullYear(),n=this.getUTCMilliseconds(),l=t<0?"-":t>9999?"+":"";return l+e(c(t),l?6:4,0)+"-"+e(this.getUTCMonth()+1,2,0)+"-"+e(this.getUTCDate(),2,0)+"T"+e(this.getUTCHours(),2,0)+":"+e(this.getUTCMinutes(),2,0)+":"+e(this.getUTCSeconds(),2,0)+"."+e(n,3,0)+"Z"}:r},function(t,n,l){"use strict";var i=l(0),e=l(2),c=l(13),o=l(107);i({target:"Date",proto:!0,forced:e((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(t){var n=c(this),l=o(n,"number");return"number"!=typeof l||isFinite(l)?n.toISOString():null}})},function(t,n,l){var i=l(18),e=l(250),c=l(7)("toPrimitive"),o=Date.prototype;c in o||i(o,c,e)},function(t,n,l){"use strict";var i=l(1),e=l(142);t.exports=function(t){if(i(this),"string"===t||"default"===t)t="string";else if("number"!==t)throw TypeError("Incorrect hint");return e(this,t)}},function(t,n,l){var i=l(25),e=Date.prototype,c=e.toString,o=e.getTime;"Invalid Date"!=String(new Date(NaN))&&i(e,"toString",(function(){var t=o.call(this);return t==t?c.call(this):"Invalid Date"}))},function(t,n,l){l(0)({target:"Function",proto:!0},{bind:l(159)})},function(t,n,l){"use strict";var i=l(8),e=l(14),c=l(27),o=l(7)("hasInstance"),d=Function.prototype;o in d||e.f(d,o,{value:function(t){if("function"!=typeof this||!i(t))return!1;if(!i(this.prototype))return t instanceof this;for(;t=c(t);)if(this.prototype===t)return!0;return!1}})},function(t,n,l){var i=l(9),e=l(14).f,c=Function.prototype,o=c.toString,d=/^\s*function ([^ (]*)/;i&&!("name"in c)&&e(c,"name",{configurable:!0,get:function(){try{return o.call(this).match(d)[1]}catch(t){return""}}})},function(t,n,l){var i=l(0),e=l(11),c=l(2),o=e("JSON","stringify"),d=/[\uD800-\uDFFF]/g,r=/^[\uD800-\uDBFF]$/,a=/^[\uDC00-\uDFFF]$/,u=function(t,n,l){var i=l.charAt(n-1),e=l.charAt(n+1);return r.test(t)&&!a.test(e)||a.test(t)&&!r.test(i)?"\\u"+t.charCodeAt(0).toString(16):t},Z=c((function(){return'"\\udf06\\ud834"'!==o("\udf06\ud834")||'"\\udead"'!==o("\udead")}));o&&i({target:"JSON",stat:!0,forced:Z},{stringify:function(t,n,l){var i=o.apply(null,arguments);return"string"==typeof i?i.replace(d,u):i}})},function(t,n,l){var i=l(4);l(34)(i.JSON,"JSON",!0)},function(t,n,l){var i=l(0),e=l(162),c=Math.acosh,o=Math.log,d=Math.sqrt,r=Math.LN2;i({target:"Math",stat:!0,forced:!c||710!=Math.floor(c(Number.MAX_VALUE))||c(1/0)!=1/0},{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?o(t)+r:e(t-1+d(t-1)*d(t+1))}})},function(t,n,l){var i=l(0),e=Math.asinh,c=Math.log,o=Math.sqrt;i({target:"Math",stat:!0,forced:!(e&&1/e(0)>0)},{asinh:function t(n){return isFinite(n=+n)&&0!=n?n<0?-t(-n):c(n+o(n*n+1)):n}})},function(t,n,l){var i=l(0),e=Math.atanh,c=Math.log;i({target:"Math",stat:!0,forced:!(e&&1/e(-0)<0)},{atanh:function(t){return 0==(t=+t)?t:c((1+t)/(1-t))/2}})},function(t,n,l){var i=l(0),e=l(129),c=Math.abs,o=Math.pow;i({target:"Math",stat:!0},{cbrt:function(t){return e(t=+t)*o(c(t),1/3)}})},function(t,n,l){var i=l(0),e=Math.floor,c=Math.log,o=Math.LOG2E;i({target:"Math",stat:!0},{clz32:function(t){return(t>>>=0)?31-e(c(t+.5)*o):32}})},function(t,n,l){var i=l(0),e=l(92),c=Math.cosh,o=Math.abs,d=Math.E;i({target:"Math",stat:!0,forced:!c||c(710)===1/0},{cosh:function(t){var n=e(o(t)-1)+1;return(n+1/(n*d*d))*(d/2)}})},function(t,n,l){var i=l(0),e=l(92);i({target:"Math",stat:!0,forced:e!=Math.expm1},{expm1:e})},function(t,n,l){l(0)({target:"Math",stat:!0},{fround:l(163)})},function(t,n,l){var i=l(0),e=Math.hypot,c=Math.abs,o=Math.sqrt;i({target:"Math",stat:!0,forced:!!e&&e(1/0,NaN)!==1/0},{hypot:function(t,n){for(var l,i,e=0,d=0,r=arguments.length,a=0;d<r;)a<(l=c(arguments[d++]))?(e=e*(i=a/l)*i+1,a=l):e+=l>0?(i=l/a)*i:l;return a===1/0?1/0:a*o(e)}})},function(t,n,l){var i=l(0),e=l(2),c=Math.imul;i({target:"Math",stat:!0,forced:e((function(){return-5!=c(4294967295,5)||2!=c.length}))},{imul:function(t,n){var l=+t,i=+n,e=65535&l,c=65535&i;return 0|e*c+((65535&l>>>16)*c+e*(65535&i>>>16)<<16>>>0)}})},function(t,n,l){var i=l(0),e=Math.log,c=Math.LOG10E;i({target:"Math",stat:!0},{log10:function(t){return e(t)*c}})},function(t,n,l){l(0)({target:"Math",stat:!0},{log1p:l(162)})},function(t,n,l){var i=l(0),e=Math.log,c=Math.LN2;i({target:"Math",stat:!0},{log2:function(t){return e(t)/c}})},function(t,n,l){l(0)({target:"Math",stat:!0},{sign:l(129)})},function(t,n,l){var i=l(0),e=l(2),c=l(92),o=Math.abs,d=Math.exp,r=Math.E;i({target:"Math",stat:!0,forced:e((function(){return-2e-17!=Math.sinh(-2e-17)}))},{sinh:function(t){return o(t=+t)<1?(c(t)-c(-t))/2:(d(t-1)-d(-t-1))*(r/2)}})},function(t,n,l){var i=l(0),e=l(92),c=Math.exp;i({target:"Math",stat:!0},{tanh:function(t){var n=e(t=+t),l=e(-t);return n==1/0?1:l==1/0?-1:(n-l)/(c(t)+c(-t))}})},function(t,n,l){l(34)(Math,"Math",!0)},function(t,n,l){var i=l(0),e=Math.ceil,c=Math.floor;i({target:"Math",stat:!0},{trunc:function(t){return(t>0?c:e)(t)}})},function(t,n,l){"use strict";var i=l(9),e=l(4),c=l(72),o=l(25),d=l(16),r=l(46),a=l(91),u=l(59),Z=l(107),s=l(2),b=l(26),m=l(49).f,h=l(24).f,I=l(14).f,p=l(64).trim,G=e.Number,y=G.prototype,X="Number"==r(b(y)),g=function(t){if(u(t))throw TypeError("Cannot convert a Symbol value to a number");var n,l,i,e,c,o,d,r,a=Z(t,"number");if("string"==typeof a&&a.length>2)if(43===(n=(a=p(a)).charCodeAt(0))||45===n){if(88===(l=a.charCodeAt(2))||120===l)return NaN}else if(48===n){switch(a.charCodeAt(1)){case 66:case 98:i=2,e=49;break;case 79:case 111:i=8,e=55;break;default:return+a}for(o=(c=a.slice(2)).length,d=0;d<o;d++)if((r=c.charCodeAt(d))<48||r>e)return NaN;return parseInt(c,i)}return+a};if(c("Number",!G(" 0o1")||!G("0b1")||G("+0x1"))){for(var V,W=function(t){var n=arguments.length<1?0:t,l=this;return l instanceof W&&(X?s((function(){y.valueOf.call(l)})):"Number"!=r(l))?a(new G(g(n)),l,W):g(n)},R=i?m(G):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,fromString,range".split(","),C=0;R.length>C;C++)d(G,V=R[C])&&!d(W,V)&&I(W,V,h(G,V));W.prototype=y,y.constructor=W,o(e,"Number",W)}},function(t,n,l){l(0)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},function(t,n,l){l(0)({target:"Number",stat:!0},{isFinite:l(164)})},function(t,n,l){l(0)({target:"Number",stat:!0},{isInteger:l(130)})},function(t,n,l){l(0)({target:"Number",stat:!0},{isNaN:function(t){return t!=t}})},function(t,n,l){var i=l(0),e=l(130),c=Math.abs;i({target:"Number",stat:!0},{isSafeInteger:function(t){return e(t)&&c(t)<=9007199254740991}})},function(t,n,l){l(0)({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991})},function(t,n,l){l(0)({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991})},function(t,n,l){var i=l(0),e=l(165);i({target:"Number",stat:!0,forced:Number.parseFloat!=e},{parseFloat:e})},function(t,n,l){var i=l(0),e=l(131);i({target:"Number",stat:!0,forced:Number.parseInt!=e},{parseInt:e})},function(t,n,l){"use strict";var i=l(0),e=l(30),c=l(166),o=l(127),d=l(2),r=1..toFixed,a=Math.floor,u=function(t,n,l){return 0===n?l:n%2==1?u(t,n-1,l*t):u(t*t,n/2,l)},Z=function(t,n,l){for(var i=-1,e=l;++i<6;)e+=n*t[i],t[i]=e%1e7,e=a(e/1e7)},s=function(t,n){for(var l=6,i=0;--l>=0;)i+=t[l],t[l]=a(i/n),i=i%n*1e7},b=function(t){for(var n=6,l="";--n>=0;)if(""!==l||0===n||0!==t[n]){var i=String(t[n]);l=""===l?i:l+o.call("0",7-i.length)+i}return l};i({target:"Number",proto:!0,forced:r&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!d((function(){r.call({})}))},{toFixed:function(t){var n,l,i,d,r=c(this),a=e(t),m=[0,0,0,0,0,0],h="",I="0";if(a<0||a>20)throw RangeError("Incorrect fraction digits");if(r!=r)return"NaN";if(r<=-1e21||r>=1e21)return String(r);if(r<0&&(h="-",r=-r),r>1e-21)if(l=(n=function(t){for(var n=0,l=t;l>=4096;)n+=12,l/=4096;for(;l>=2;)n+=1,l/=2;return n}(r*u(2,69,1))-69)<0?r*u(2,-n,1):r/u(2,n,1),l*=4503599627370496,(n=52-n)>0){for(Z(m,0,l),i=a;i>=7;)Z(m,1e7,0),i-=7;for(Z(m,u(10,i,1),0),i=n-1;i>=23;)s(m,1<<23),i-=23;s(m,1<<i),Z(m,1,1),s(m,2),I=b(m)}else Z(m,0,l),Z(m,1<<-n,0),I=b(m)+o.call("0",a);return I=a>0?h+((d=I.length)<=a?"0."+o.call("0",a-d)+I:I.slice(0,d-a)+"."+I.slice(d-a)):h+I}})},function(t,n,l){"use strict";var i=l(0),e=l(2),c=l(166),o=1..toPrecision;i({target:"Number",proto:!0,forced:e((function(){return"1"!==o.call(1,void 0)}))||!e((function(){o.call({})}))},{toPrecision:function(t){return void 0===t?o.call(c(this)):o.call(c(this),t)}})},function(t,n,l){var i=l(0),e=l(167);i({target:"Object",stat:!0,forced:Object.assign!==e},{assign:e})},function(t,n,l){l(0)({target:"Object",stat:!0,sham:!l(9)},{create:l(26)})},function(t,n,l){"use strict";var i=l(0),e=l(9),c=l(94),o=l(13),d=l(3),r=l(14);e&&i({target:"Object",proto:!0,forced:c},{__defineGetter__:function(t,n){r.f(o(this),t,{get:d(n),enumerable:!0,configurable:!0})}})},function(t,n,l){var i=l(0),e=l(9);i({target:"Object",stat:!0,forced:!e,sham:!e},{defineProperties:l(115)})},function(t,n,l){var i=l(0),e=l(9);i({target:"Object",stat:!0,forced:!e,sham:!e},{defineProperty:l(14).f})},function(t,n,l){"use strict";var i=l(0),e=l(9),c=l(94),o=l(13),d=l(3),r=l(14);e&&i({target:"Object",proto:!0,forced:c},{__defineSetter__:function(t,n){r.f(o(this),t,{set:d(n),enumerable:!0,configurable:!0})}})},function(t,n,l){var i=l(0),e=l(168).entries;i({target:"Object",stat:!0},{entries:function(t){return e(t)}})},function(t,n,l){var i=l(0),e=l(77),c=l(2),o=l(8),d=l(55).onFreeze,r=Object.freeze;i({target:"Object",stat:!0,forced:c((function(){r(1)})),sham:!e},{freeze:function(t){return r&&o(t)?r(d(t)):t}})},function(t,n,l){var i=l(0),e=l(6),c=l(53);i({target:"Object",stat:!0},{fromEntries:function(t){var n={};return e(t,(function(t,l){c(n,t,l)}),{AS_ENTRIES:!0}),n}})},function(t,n,l){var i=l(0),e=l(2),c=l(29),o=l(24).f,d=l(9),r=e((function(){o(1)}));i({target:"Object",stat:!0,forced:!d||r,sham:!d},{getOwnPropertyDescriptor:function(t,n){return o(c(t),n)}})},function(t,n,l){var i=l(0),e=l(9),c=l(112),o=l(29),d=l(24),r=l(53);i({target:"Object",stat:!0,sham:!e},{getOwnPropertyDescriptors:function(t){for(var n,l,i=o(t),e=d.f,a=c(i),u={},Z=0;a.length>Z;)void 0!==(l=e(i,n=a[Z++]))&&r(u,n,l);return u}})},function(t,n,l){var i=l(0),e=l(2),c=l(116).f;i({target:"Object",stat:!0,forced:e((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:c})},function(t,n,l){var i=l(0),e=l(2),c=l(13),o=l(27),d=l(123);i({target:"Object",stat:!0,forced:e((function(){o(1)})),sham:!d},{getPrototypeOf:function(t){return o(c(t))}})},function(t,n,l){l(0)({target:"Object",stat:!0},{is:l(169)})},function(t,n,l){var i=l(0),e=l(2),c=l(8),o=Object.isExtensible;i({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isExtensible:function(t){return!!c(t)&&(!o||o(t))}})},function(t,n,l){var i=l(0),e=l(2),c=l(8),o=Object.isFrozen;i({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isFrozen:function(t){return!c(t)||!!o&&o(t)}})},function(t,n,l){var i=l(0),e=l(2),c=l(8),o=Object.isSealed;i({target:"Object",stat:!0,forced:e((function(){o(1)}))},{isSealed:function(t){return!c(t)||!!o&&o(t)}})},function(t,n,l){var i=l(0),e=l(13),c=l(60);i({target:"Object",stat:!0,forced:l(2)((function(){c(1)}))},{keys:function(t){return c(e(t))}})},function(t,n,l){"use strict";var i=l(0),e=l(9),c=l(94),o=l(13),d=l(47),r=l(27),a=l(24).f;e&&i({target:"Object",proto:!0,forced:c},{__lookupGetter__:function(t){var n,l=o(this),i=d(t);do{if(n=a(l,i))return n.get}while(l=r(l))}})},function(t,n,l){"use strict";var i=l(0),e=l(9),c=l(94),o=l(13),d=l(47),r=l(27),a=l(24).f;e&&i({target:"Object",proto:!0,forced:c},{__lookupSetter__:function(t){var n,l=o(this),i=d(t);do{if(n=a(l,i))return n.set}while(l=r(l))}})},function(t,n,l){var i=l(0),e=l(8),c=l(55).onFreeze,o=l(77),d=l(2),r=Object.preventExtensions;i({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{preventExtensions:function(t){return r&&e(t)?r(c(t)):t}})},function(t,n,l){var i=l(0),e=l(8),c=l(55).onFreeze,o=l(77),d=l(2),r=Object.seal;i({target:"Object",stat:!0,forced:d((function(){r(1)})),sham:!o},{seal:function(t){return r&&e(t)?r(c(t)):t}})},function(t,n,l){l(0)({target:"Object",stat:!0},{setPrototypeOf:l(42)})},function(t,n,l){var i=l(120),e=l(25),c=l(311);i||e(Object.prototype,"toString",c,{unsafe:!0})},function(t,n,l){"use strict";var i=l(120),e=l(76);t.exports=i?{}.toString:function(){return"[object "+e(this)+"]"}},function(t,n,l){var i=l(0),e=l(168).values;i({target:"Object",stat:!0},{values:function(t){return e(t)}})},function(t,n,l){var i=l(0),e=l(165);i({global:!0,forced:parseFloat!=e},{parseFloat:e})},function(t,n,l){var i=l(0),e=l(131);i({global:!0,forced:parseInt!=e},{parseInt:e})},function(t,n,l){"use strict";var i,e,c,o,d=l(0),r=l(5),a=l(4),u=l(11),Z=l(170),s=l(25),b=l(36),m=l(42),h=l(34),I=l(54),p=l(8),G=l(3),y=l(33),X=l(111),g=l(6),V=l(86),W=l(28),R=l(132).set,C=l(172),f=l(173),S=l(174),v=l(78),K=l(95),Y=l(17),J=l(72),N=l(7),L=l(318),H=l(63),U=l(48),x=N("species"),T="Promise",k=Y.get,F=Y.set,B=Y.getterFor(T),z=Z&&Z.prototype,w=Z,A=z,M=a.TypeError,P=a.document,Q=a.process,j=v.f,E=j,D=!!(P&&P.createEvent&&a.dispatchEvent),O="function"==typeof PromiseRejectionEvent,q=!1,_=J(T,(function(){var t=X(w),n=t!==String(w);if(!n&&66===U)return!0;if(r&&!A.finally)return!0;if(U>=51&&/native code/.test(t))return!1;var l=new w((function(t){t(1)})),i=function(t){t((function(){}),(function(){}))};return(l.constructor={})[x]=i,!(q=l.then((function(){}))instanceof i)||!n&&L&&!O})),$=_||!V((function(t){w.all(t).catch((function(){}))})),tt=function(t){var n;return!(!p(t)||"function"!=typeof(n=t.then))&&n},nt=function(t,n){if(!t.notified){t.notified=!0;var l=t.reactions;C((function(){for(var i=t.value,e=1==t.state,c=0;l.length>c;){var o,d,r,a=l[c++],u=e?a.ok:a.fail,Z=a.resolve,s=a.reject,b=a.domain;try{u?(e||(2===t.rejection&&ct(t),t.rejection=1),!0===u?o=i:(b&&b.enter(),o=u(i),b&&(b.exit(),r=!0)),o===a.promise?s(M("Promise-chain cycle")):(d=tt(o))?d.call(o,Z,s):Z(o)):s(i)}catch(t){b&&!r&&b.exit(),s(t)}}t.reactions=[],t.notified=!1,n&&!t.rejection&&it(t)}))}},lt=function(t,n,l){var i,e;D?((i=P.createEvent("Event")).promise=n,i.reason=l,i.initEvent(t,!1,!0),a.dispatchEvent(i)):i={promise:n,reason:l},!O&&(e=a["on"+t])?e(i):"unhandledrejection"===t&&S("Unhandled promise rejection",l)},it=function(t){R.call(a,(function(){var n,l=t.facade,i=t.value;if(et(t)&&(n=K((function(){H?Q.emit("unhandledRejection",i,l):lt("unhandledrejection",l,i)})),t.rejection=H||et(t)?2:1,n.error))throw n.value}))},et=function(t){return 1!==t.rejection&&!t.parent},ct=function(t){R.call(a,(function(){var n=t.facade;H?Q.emit("rejectionHandled",n):lt("rejectionhandled",n,t.value)}))},ot=function(t,n,l){return function(i){t(n,i,l)}},dt=function(t,n,l){t.done||(t.done=!0,l&&(t=l),t.value=n,t.state=2,nt(t,!0))},rt=function(t,n,l){if(!t.done){t.done=!0,l&&(t=l);try{if(t.facade===n)throw M("Promise can't be resolved itself");var i=tt(n);i?C((function(){var l={done:!1};try{i.call(n,ot(rt,l,t),ot(dt,l,t))}catch(n){dt(l,n,t)}})):(t.value=n,t.state=1,nt(t,!1))}catch(n){dt({done:!1},n,t)}}};if(_&&(A=(w=function(t){y(this,w,T),G(t),i.call(this);var n=k(this);try{t(ot(rt,n),ot(dt,n))}catch(t){dt(n,t)}}).prototype,(i=function(t){F(this,{type:T,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=b(A,{then:function(t,n){var l=B(this),i=j(W(this,w));return i.ok="function"!=typeof t||t,i.fail="function"==typeof n&&n,i.domain=H?Q.domain:void 0,l.parent=!0,l.reactions.push(i),0!=l.state&&nt(l,!1),i.promise},catch:function(t){return this.then(void 0,t)}}),e=function(){var t=new i,n=k(t);this.promise=t,this.resolve=ot(rt,n),this.reject=ot(dt,n)},v.f=j=function(t){return t===w||t===c?new e(t):E(t)},!r&&"function"==typeof Z&&z!==Object.prototype)){o=z.then,q||(s(z,"then",(function(t,n){var l=this;return new w((function(t,n){o.call(l,t,n)})).then(t,n)}),{unsafe:!0}),s(z,"catch",A.catch,{unsafe:!0}));try{delete z.constructor}catch(t){}m&&m(z,A)}d({global:!0,wrap:!0,forced:_},{Promise:w}),h(w,T,!1,!0),I(T),c=u(T),d({target:T,stat:!0,forced:_},{reject:function(t){var n=j(this);return n.reject.call(void 0,t),n.promise}}),d({target:T,stat:!0,forced:r||_},{resolve:function(t){return f(r&&this===c?w:this,t)}}),d({target:T,stat:!0,forced:$},{all:function(t){var n=this,l=j(n),i=l.resolve,e=l.reject,c=K((function(){var l=G(n.resolve),c=[],o=0,d=1;g(t,(function(t){var r=o++,a=!1;c.push(void 0),d++,l.call(n,t).then((function(t){a||(a=!0,c[r]=t,--d||i(c))}),e)})),--d||i(c)}));return c.error&&e(c.value),l.promise},race:function(t){var n=this,l=j(n),i=l.reject,e=K((function(){var e=G(n.resolve);g(t,(function(t){e.call(n,t).then(l.resolve,i)}))}));return e.error&&i(e.value),l.promise}})},function(t,n,l){var i=l(39),e=l(4);t.exports=/ipad|iphone|ipod/i.test(i)&&void 0!==e.Pebble},function(t,n,l){var i=l(39);t.exports=/web0s(?!.*chrome)/i.test(i)},function(t,n){t.exports="object"==typeof window},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(170),o=l(2),d=l(11),r=l(28),a=l(173),u=l(25);if(i({target:"Promise",proto:!0,real:!0,forced:!!c&&o((function(){c.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var n=r(this,d("Promise")),l="function"==typeof t;return this.then(l?function(l){return a(n,t()).then((function(){return l}))}:t,l?function(l){return a(n,t()).then((function(){throw l}))}:t)}}),!e&&"function"==typeof c){var Z=d("Promise").prototype.finally;c.prototype.finally!==Z&&u(c.prototype,"finally",Z,{unsafe:!0})}},function(t,n,l){var i=l(0),e=l(11),c=l(3),o=l(1),d=l(2),r=e("Reflect","apply"),a=Function.apply;i({target:"Reflect",stat:!0,forced:!d((function(){r((function(){}))}))},{apply:function(t,n,l){return c(t),o(l),r?r(t,n,l):a.call(t,n,l)}})},function(t,n,l){var i=l(0),e=l(11),c=l(3),o=l(1),d=l(8),r=l(26),a=l(159),u=l(2),Z=e("Reflect","construct"),s=u((function(){function t(){}return!(Z((function(){}),[],t)instanceof t)})),b=!u((function(){Z((function(){}))})),m=s||b;i({target:"Reflect",stat:!0,forced:m,sham:m},{construct:function(t,n){c(t),o(n);var l=arguments.length<3?t:c(arguments[2]);if(b&&!s)return Z(t,n,l);if(t==l){switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3])}var i=[null];return i.push.apply(i,n),new(a.apply(t,i))}var e=l.prototype,u=r(d(e)?e:Object.prototype),m=Function.apply.call(t,u,n);return d(m)?m:u}})},function(t,n,l){var i=l(0),e=l(9),c=l(1),o=l(47),d=l(14);i({target:"Reflect",stat:!0,forced:l(2)((function(){Reflect.defineProperty(d.f({},1,{value:1}),1,{value:2})})),sham:!e},{defineProperty:function(t,n,l){c(t);var i=o(n);c(l);try{return d.f(t,i,l),!0}catch(t){return!1}}})},function(t,n,l){var i=l(0),e=l(1),c=l(24).f;i({target:"Reflect",stat:!0},{deleteProperty:function(t,n){var l=c(e(t),n);return!(l&&!l.configurable)&&delete t[n]}})},function(t,n,l){var i=l(0),e=l(8),c=l(1),o=l(176),d=l(24),r=l(27);i({target:"Reflect",stat:!0},{get:function t(n,l){var i,a,u=arguments.length<3?n:arguments[2];return c(n)===u?n[l]:(i=d.f(n,l))?o(i)?i.value:void 0===i.get?void 0:i.get.call(u):e(a=r(n))?t(a,l,u):void 0}})},function(t,n,l){var i=l(0),e=l(9),c=l(1),o=l(24);i({target:"Reflect",stat:!0,sham:!e},{getOwnPropertyDescriptor:function(t,n){return o.f(c(t),n)}})},function(t,n,l){var i=l(0),e=l(1),c=l(27);i({target:"Reflect",stat:!0,sham:!l(123)},{getPrototypeOf:function(t){return c(e(t))}})},function(t,n,l){l(0)({target:"Reflect",stat:!0},{has:function(t,n){return n in t}})},function(t,n,l){var i=l(0),e=l(1),c=Object.isExtensible;i({target:"Reflect",stat:!0},{isExtensible:function(t){return e(t),!c||c(t)}})},function(t,n,l){l(0)({target:"Reflect",stat:!0},{ownKeys:l(112)})},function(t,n,l){var i=l(0),e=l(11),c=l(1);i({target:"Reflect",stat:!0,sham:!l(77)},{preventExtensions:function(t){c(t);try{var n=e("Object","preventExtensions");return n&&n(t),!0}catch(t){return!1}}})},function(t,n,l){var i=l(0),e=l(1),c=l(8),o=l(176),d=l(2),r=l(14),a=l(24),u=l(27),Z=l(38);i({target:"Reflect",stat:!0,forced:d((function(){var t=function(){},n=r.f(new t,"a",{configurable:!0});return!1!==Reflect.set(t.prototype,"a",1,n)}))},{set:function t(n,l,i){var d,s,b,m=arguments.length<4?n:arguments[3],h=a.f(e(n),l);if(!h){if(c(s=u(n)))return t(s,l,i,m);h=Z(0)}if(o(h)){if(!1===h.writable||!c(m))return!1;if(d=a.f(m,l)){if(d.get||d.set||!1===d.writable)return!1;d.value=i,r.f(m,l,d)}else r.f(m,l,Z(0,i))}else{if(void 0===(b=h.set))return!1;b.call(m,i)}return!0}})},function(t,n,l){var i=l(0),e=l(1),c=l(153),o=l(42);o&&i({target:"Reflect",stat:!0},{setPrototypeOf:function(t,n){e(t),c(n);try{return o(t,n),!0}catch(t){return!1}}})},function(t,n,l){var i=l(9),e=l(4),c=l(72),o=l(91),d=l(18),r=l(14).f,a=l(49).f,u=l(79),Z=l(15),s=l(65),b=l(96),m=l(25),h=l(2),I=l(16),p=l(17).enforce,G=l(54),y=l(7),X=l(177),g=l(178),V=y("match"),W=e.RegExp,R=W.prototype,C=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,f=/a/g,S=/a/g,v=new W(f)!==f,K=b.UNSUPPORTED_Y,Y=i&&(!v||K||X||g||h((function(){return S[V]=!1,W(f)!=f||W(S)==S||"/a/i"!=W(f,"i")})));if(c("RegExp",Y)){for(var J=function(t,n){var l,i,e,c,r,a,b=this instanceof J,m=u(t),h=void 0===n,G=[],y=t;if(!b&&m&&h&&t.constructor===J)return t;if((m||t instanceof J)&&(t=t.source,h&&(n="flags"in y?y.flags:s.call(y))),t=void 0===t?"":Z(t),n=void 0===n?"":Z(n),y=t,X&&"dotAll"in f&&(i=!!n&&n.indexOf("s")>-1)&&(n=n.replace(/s/g,"")),l=n,K&&"sticky"in f&&(e=!!n&&n.indexOf("y")>-1)&&(n=n.replace(/y/g,"")),g&&(t=(c=function(t){for(var n,l=t.length,i=0,e="",c=[],o={},d=!1,r=!1,a=0,u="";i<=l;i++){if("\\"===(n=t.charAt(i)))n+=t.charAt(++i);else if("]"===n)d=!1;else if(!d)switch(!0){case"["===n:d=!0;break;case"("===n:C.test(t.slice(i+1))&&(i+=2,r=!0),e+=n,a++;continue;case">"===n&&r:if(""===u||I(o,u))throw new SyntaxError("Invalid capture group name");o[u]=!0,c.push([u,a]),r=!1,u="";continue}r?u+=n:e+=n}return[e,c]}(t))[0],G=c[1]),r=o(W(t,n),b?this:R,J),(i||e||G.length)&&(a=p(r),i&&(a.dotAll=!0,a.raw=J(function(t){for(var n,l=t.length,i=0,e="",c=!1;i<=l;i++)"\\"!==(n=t.charAt(i))?c||"."!==n?("["===n?c=!0:"]"===n&&(c=!1),e+=n):e+="[\\s\\S]":e+=n+t.charAt(++i);return e}(t),l)),e&&(a.sticky=!0),G.length&&(a.groups=G)),t!==y)try{d(r,"source",""===y?"(?:)":y)}catch(t){}return r},N=function(t){t in J||r(J,t,{configurable:!0,get:function(){return W[t]},set:function(n){W[t]=n}})},L=a(W),H=0;L.length>H;)N(L[H++]);R.constructor=J,J.prototype=R,m(e,"RegExp",J)}G("RegExp")},function(t,n,l){var i=l(9),e=l(14),c=l(65),o=l(2);i&&o((function(){return"sy"!==Object.getOwnPropertyDescriptor(RegExp.prototype,"flags").get.call({dotAll:!0,sticky:!0})}))&&e.f(RegExp.prototype,"flags",{configurable:!0,get:c})},function(t,n,l){var i=l(9),e=l(96).UNSUPPORTED_Y,c=l(14).f,o=l(17).get,d=RegExp.prototype;i&&e&&c(d,"sticky",{configurable:!0,get:function(){if(this!==d){if(this instanceof RegExp)return!!o(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}})},function(t,n,l){"use strict";l(133);var i,e,c=l(0),o=l(8),d=(i=!1,(e=/[ac]/).exec=function(){return i=!0,/./.exec.apply(this,arguments)},!0===e.test("abc")&&i),r=/./.test;c({target:"RegExp",proto:!0,forced:!d},{test:function(t){if("function"!=typeof this.exec)return r.call(this,t);var n=this.exec(t);if(null!==n&&!o(n))throw new Error("RegExp exec method returned something other than an Object or null");return!!n}})},function(t,n,l){"use strict";var i=l(25),e=l(1),c=l(15),o=l(2),d=l(65),r=RegExp.prototype,a=r.toString,u=o((function(){return"/a/b"!=a.call({source:"a",flags:"b"})})),Z="toString"!=a.name;(u||Z)&&i(RegExp.prototype,"toString",(function(){var t=e(this),n=c(t.source),l=t.flags;return"/"+n+"/"+c(void 0===l&&t instanceof RegExp&&!("flags"in r)?d.call(t):l)}),{unsafe:!0})},function(t,n,l){"use strict";var i=l(0),e=l(66).codeAt;i({target:"String",proto:!0},{codePointAt:function(t){return e(this,t)}})},function(t,n,l){"use strict";var i,e=l(0),c=l(24).f,o=l(10),d=l(15),r=l(134),a=l(22),u=l(135),Z=l(5),s="".endsWith,b=Math.min,m=u("endsWith");e({target:"String",proto:!0,forced:!!(Z||m||(i=c(String.prototype,"endsWith"),!i||i.writable))&&!m},{endsWith:function(t){var n=d(a(this));r(t);var l=arguments.length>1?arguments[1]:void 0,i=o(n.length),e=void 0===l?i:b(o(l),i),c=d(t);return s?s.call(n,c,e):n.slice(e-c.length,e)===c}})},function(t,n,l){var i=l(0),e=l(50),c=String.fromCharCode,o=String.fromCodePoint;i({target:"String",stat:!0,forced:!!o&&1!=o.length},{fromCodePoint:function(t){for(var n,l=[],i=arguments.length,o=0;i>o;){if(n=+arguments[o++],e(n,1114111)!==n)throw RangeError(n+" is not a valid code point");l.push(n<65536?c(n):c(55296+((n-=65536)>>10),n%1024+56320))}return l.join("")}})},function(t,n,l){"use strict";var i=l(0),e=l(134),c=l(22),o=l(15);i({target:"String",proto:!0,forced:!l(135)("includes")},{includes:function(t){return!!~o(c(this)).indexOf(o(e(t)),arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){"use strict";var i=l(98),e=l(1),c=l(10),o=l(15),d=l(22),r=l(99),a=l(100);i("match",(function(t,n,l){return[function(n){var l=d(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,l):new RegExp(n)[t](o(l))},function(t){var i=e(this),d=o(t),u=l(n,i,d);if(u.done)return u.value;if(!i.global)return a(i,d);var Z=i.unicode;i.lastIndex=0;for(var s,b=[],m=0;null!==(s=a(i,d));){var h=o(s[0]);b[m]=h,""===h&&(i.lastIndex=r(d,c(i.lastIndex),Z)),m++}return 0===m?null:b}]}))},function(t,n,l){"use strict";var i=l(0),e=l(126).end;i({target:"String",proto:!0,forced:l(182)},{padEnd:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){"use strict";var i=l(0),e=l(126).start;i({target:"String",proto:!0,forced:l(182)},{padStart:function(t){return e(this,t,arguments.length>1?arguments[1]:void 0)}})},function(t,n,l){var i=l(0),e=l(29),c=l(10),o=l(15);i({target:"String",stat:!0},{raw:function(t){for(var n=e(t.raw),l=c(n.length),i=arguments.length,d=[],r=0;l>r;)d.push(o(n[r++])),r<i&&d.push(o(arguments[r]));return d.join("")}})},function(t,n,l){l(0)({target:"String",proto:!0},{repeat:l(127)})},function(t,n,l){"use strict";var i=l(98),e=l(2),c=l(1),o=l(30),d=l(10),r=l(15),a=l(22),u=l(99),Z=l(183),s=l(100),b=l(7)("replace"),m=Math.max,h=Math.min,I="$0"==="a".replace(/./,"$0"),p=!!/./[b]&&""===/./[b]("a","$0");i("replace",(function(t,n,l){var i=p?"$":"$0";return[function(t,l){var i=a(this),e=null==t?void 0:t[b];return void 0!==e?e.call(t,i,l):n.call(r(i),t,l)},function(t,e){var a=c(this),b=r(t);if("string"==typeof e&&-1===e.indexOf(i)&&-1===e.indexOf("$<")){var I=l(n,a,b,e);if(I.done)return I.value}var p="function"==typeof e;p||(e=r(e));var G=a.global;if(G){var y=a.unicode;a.lastIndex=0}for(var X=[];;){var g=s(a,b);if(null===g)break;if(X.push(g),!G)break;""===r(g[0])&&(a.lastIndex=u(b,d(a.lastIndex),y))}for(var V,W="",R=0,C=0;C<X.length;C++){g=X[C];for(var f=r(g[0]),S=m(h(o(g.index),b.length),0),v=[],K=1;K<g.length;K++)v.push(void 0===(V=g[K])?V:String(V));var Y=g.groups;if(p){var J=[f].concat(v,S,b);void 0!==Y&&J.push(Y);var N=r(e.apply(void 0,J))}else N=Z(f,b,S,v,Y,e);S>=R&&(W+=b.slice(R,S)+N,R=S+f.length)}return W+b.slice(R)}]}),!!e((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}))||!I||p)},function(t,n,l){"use strict";var i=l(98),e=l(1),c=l(22),o=l(169),d=l(15),r=l(100);i("search",(function(t,n,l){return[function(n){var l=c(this),i=null==n?void 0:n[t];return void 0!==i?i.call(n,l):new RegExp(n)[t](d(l))},function(t){var i=e(this),c=d(t),a=l(n,i,c);if(a.done)return a.value;var u=i.lastIndex;o(u,0)||(i.lastIndex=0);var Z=r(i,c);return o(i.lastIndex,u)||(i.lastIndex=u),null===Z?-1:Z.index}]}))},function(t,n,l){"use strict";var i=l(98),e=l(79),c=l(1),o=l(22),d=l(28),r=l(99),a=l(10),u=l(15),Z=l(100),s=l(97),b=l(96),m=l(2),h=b.UNSUPPORTED_Y,I=[].push,p=Math.min;i("split",(function(t,n,l){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,l){var i=u(o(this)),c=void 0===l?4294967295:l>>>0;if(0===c)return[];if(void 0===t)return[i];if(!e(t))return n.call(i,t,c);for(var d,r,a,Z=[],b=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),m=0,h=new RegExp(t.source,b+"g");(d=s.call(h,i))&&!((r=h.lastIndex)>m&&(Z.push(i.slice(m,d.index)),d.length>1&&d.index<i.length&&I.apply(Z,d.slice(1)),a=d[0].length,m=r,Z.length>=c));)h.lastIndex===d.index&&h.lastIndex++;return m===i.length?!a&&h.test("")||Z.push(""):Z.push(i.slice(m)),Z.length>c?Z.slice(0,c):Z}:"0".split(void 0,0).length?function(t,l){return void 0===t&&0===l?[]:n.call(this,t,l)}:n,[function(n,l){var e=o(this),c=null==n?void 0:n[t];return void 0!==c?c.call(n,e,l):i.call(u(e),n,l)},function(t,e){var o=c(this),s=u(t),b=l(i,o,s,e,i!==n);if(b.done)return b.value;var m=d(o,RegExp),I=o.unicode,G=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(h?"g":"y"),y=new m(h?"^(?:"+o.source+")":o,G),X=void 0===e?4294967295:e>>>0;if(0===X)return[];if(0===s.length)return null===Z(y,s)?[s]:[];for(var g=0,V=0,W=[];V<s.length;){y.lastIndex=h?0:V;var R,C=Z(y,h?s.slice(V):s);if(null===C||(R=p(a(y.lastIndex+(h?V:0)),s.length))===g)V=r(s,V,I);else{if(W.push(s.slice(g,V)),W.length===X)return W;for(var f=1;f<=C.length-1;f++)if(W.push(C[f]),W.length===X)return W;V=g=R}}return W.push(s.slice(g)),W}]}),!!m((function(){var t=/(?:)/,n=t.exec;t.exec=function(){return n.apply(this,arguments)};var l="ab".split(t);return 2!==l.length||"a"!==l[0]||"b"!==l[1]})),h)},function(t,n,l){"use strict";var i,e=l(0),c=l(24).f,o=l(10),d=l(15),r=l(134),a=l(22),u=l(135),Z=l(5),s="".startsWith,b=Math.min,m=u("startsWith");e({target:"String",proto:!0,forced:!!(Z||m||(i=c(String.prototype,"startsWith"),!i||i.writable))&&!m},{startsWith:function(t){var n=d(a(this));r(t);var l=o(b(arguments.length>1?arguments[1]:void 0,n.length)),i=d(t);return s?s.call(n,i,l):n.slice(l,l+i.length)===i}})},function(t,n,l){"use strict";var i=l(0),e=l(64).trim;i({target:"String",proto:!0,forced:l(136)("trim")},{trim:function(){return e(this)}})},function(t,n,l){"use strict";var i=l(0),e=l(64).end,c=l(136)("trimEnd"),o=c?function(){return e(this)}:"".trimEnd;i({target:"String",proto:!0,forced:c},{trimEnd:o,trimRight:o})},function(t,n,l){"use strict";var i=l(0),e=l(64).start,c=l(136)("trimStart"),o=c?function(){return e(this)}:"".trimStart;i({target:"String",proto:!0,forced:c},{trimStart:o,trimLeft:o})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("anchor")},{anchor:function(t){return e(this,"a","name",t)}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("big")},{big:function(){return e(this,"big","","")}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("blink")},{blink:function(){return e(this,"blink","","")}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("bold")},{bold:function(){return e(this,"b","","")}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("fixed")},{fixed:function(){return e(this,"tt","","")}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("fontcolor")},{fontcolor:function(t){return e(this,"font","color",t)}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("fontsize")},{fontsize:function(t){return e(this,"font","size",t)}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("italics")},{italics:function(){return e(this,"i","","")}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("link")},{link:function(t){return e(this,"a","href",t)}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("small")},{small:function(){return e(this,"small","","")}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("strike")},{strike:function(){return e(this,"strike","","")}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("sub")},{sub:function(){return e(this,"sub","","")}})},function(t,n,l){"use strict";var i=l(0),e=l(31);i({target:"String",proto:!0,forced:l(32)("sup")},{sup:function(){return e(this,"sup","","")}})},function(t,n,l){l(43)("Float32",(function(t){return function(n,l,i){return t(this,n,l,i)}}))},function(t,n,l){l(43)("Float64",(function(t){return function(n,l,i){return t(this,n,l,i)}}))},function(t,n,l){l(43)("Int8",(function(t){return function(n,l,i){return t(this,n,l,i)}}))},function(t,n,l){l(43)("Int16",(function(t){return function(n,l,i){return t(this,n,l,i)}}))},function(t,n,l){l(43)("Int32",(function(t){return function(n,l,i){return t(this,n,l,i)}}))},function(t,n,l){l(43)("Uint8",(function(t){return function(n,l,i){return t(this,n,l,i)}}))},function(t,n,l){l(43)("Uint8",(function(t){return function(n,l,i){return t(this,n,l,i)}}),!0)},function(t,n,l){l(43)("Uint16",(function(t){return function(n,l,i){return t(this,n,l,i)}}))},function(t,n,l){l(43)("Uint32",(function(t){return function(n,l,i){return t(this,n,l,i)}}))},function(t,n,l){"use strict";var i=l(12),e=l(149),c=i.aTypedArray;(0,i.exportTypedArrayMethod)("copyWithin",(function(t,n){return e.call(c(this),t,n,arguments.length>2?arguments[2]:void 0)}))},function(t,n,l){"use strict";var i=l(12),e=l(23).every,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("every",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(12),e=l(117),c=i.aTypedArray;(0,i.exportTypedArrayMethod)("fill",(function(t){return e.apply(c(this),arguments)}))},function(t,n,l){"use strict";var i=l(12),e=l(23).filter,c=l(380),o=i.aTypedArray;(0,i.exportTypedArrayMethod)("filter",(function(t){var n=e(o(this),t,arguments.length>1?arguments[1]:void 0);return c(this,n)}))},function(t,n,l){var i=l(381),e=l(101);t.exports=function(t,n){return i(e(t),n)}},function(t,n){t.exports=function(t,n){for(var l=0,i=n.length,e=new t(i);i>l;)e[l]=n[l++];return e}},function(t,n,l){"use strict";var i=l(12),e=l(23).find,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("find",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(12),e=l(23).findIndex,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("findIndex",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(12),e=l(23).forEach,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("forEach",(function(t){e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(137);(0,l(12).exportTypedArrayStaticMethod)("from",l(185),i)},function(t,n,l){"use strict";var i=l(12),e=l(71).includes,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("includes",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(12),e=l(71).indexOf,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("indexOf",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(4),e=l(12),c=l(87),o=l(7)("iterator"),d=i.Uint8Array,r=c.values,a=c.keys,u=c.entries,Z=e.aTypedArray,s=e.exportTypedArrayMethod,b=d&&d.prototype[o],m=!!b&&("values"==b.name||null==b.name),h=function(){return r.call(Z(this))};s("entries",(function(){return u.call(Z(this))})),s("keys",(function(){return a.call(Z(this))})),s("values",h,!m),s(o,h,!m)},function(t,n,l){"use strict";var i=l(12),e=i.aTypedArray,c=i.exportTypedArrayMethod,o=[].join;c("join",(function(t){return o.apply(e(this),arguments)}))},function(t,n,l){"use strict";var i=l(12),e=l(154),c=i.aTypedArray;(0,i.exportTypedArrayMethod)("lastIndexOf",(function(t){return e.apply(c(this),arguments)}))},function(t,n,l){"use strict";var i=l(12),e=l(23).map,c=l(101),o=i.aTypedArray;(0,i.exportTypedArrayMethod)("map",(function(t){return e(o(this),t,arguments.length>1?arguments[1]:void 0,(function(t,n){return new(c(t))(n)}))}))},function(t,n,l){"use strict";var i=l(12),e=l(137),c=i.aTypedArrayConstructor;(0,i.exportTypedArrayStaticMethod)("of",(function(){for(var t=0,n=arguments.length,l=new(c(this))(n);n>t;)l[t]=arguments[t++];return l}),e)},function(t,n,l){"use strict";var i=l(12),e=l(88).left,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("reduce",(function(t){return e(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(12),e=l(88).right,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("reduceRight",(function(t){return e(c(this),t,arguments.length,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(12),e=i.aTypedArray,c=i.exportTypedArrayMethod,o=Math.floor;c("reverse",(function(){for(var t,n=e(this).length,l=o(n/2),i=0;i<l;)t=this[i],this[i++]=this[--n],this[n]=t;return this}))},function(t,n,l){"use strict";var i=l(12),e=l(10),c=l(184),o=l(13),d=l(2),r=i.aTypedArray;(0,i.exportTypedArrayMethod)("set",(function(t){r(this);var n=c(arguments.length>1?arguments[1]:void 0,1),l=this.length,i=o(t),d=e(i.length),a=0;if(d+n>l)throw RangeError("Wrong length");for(;a<d;)this[n+a]=i[a++]}),d((function(){new Int8Array(1).set({})})))},function(t,n,l){"use strict";var i=l(12),e=l(101),c=l(2),o=i.aTypedArray,d=i.exportTypedArrayMethod,r=[].slice;d("slice",(function(t,n){for(var l=r.call(o(this),t,n),i=e(this),c=0,d=l.length,a=new i(d);d>c;)a[c]=l[c++];return a}),c((function(){new Int8Array(1).slice()})))},function(t,n,l){"use strict";var i=l(12),e=l(23).some,c=i.aTypedArray;(0,i.exportTypedArrayMethod)("some",(function(t){return e(c(this),t,arguments.length>1?arguments[1]:void 0)}))},function(t,n,l){"use strict";var i=l(12),e=l(4),c=l(2),o=l(3),d=l(10),r=l(155),a=l(156),u=l(157),Z=l(48),s=l(124),b=i.aTypedArray,m=i.exportTypedArrayMethod,h=e.Uint16Array,I=h&&h.prototype.sort,p=!!I&&!c((function(){var t=new h(2);t.sort(null),t.sort({})})),G=!!I&&!c((function(){if(Z)return Z<74;if(a)return a<67;if(u)return!0;if(s)return s<602;var t,n,l=new h(516),i=Array(516);for(t=0;t<516;t++)n=t%4,l[t]=515-t,i[t]=t-2*n+3;for(l.sort((function(t,n){return(t/4|0)-(n/4|0)})),t=0;t<516;t++)if(l[t]!==i[t])return!0}));m("sort",(function(t){if(void 0!==t&&o(t),G)return I.call(this,t);b(this);var n,l=d(this.length),i=Array(l);for(n=0;n<l;n++)i[n]=this[n];for(i=r(this,function(t){return function(n,l){return void 0!==t?+t(n,l)||0:l!=l?-1:n!=n?1:0===n&&0===l?1/n>0&&1/l<0?1:-1:n>l}}(t)),n=0;n<l;n++)this[n]=i[n];return this}),!G||p)},function(t,n,l){"use strict";var i=l(12),e=l(10),c=l(50),o=l(101),d=i.aTypedArray;(0,i.exportTypedArrayMethod)("subarray",(function(t,n){var l=d(this),i=l.length,r=c(t,i);return new(o(l))(l.buffer,l.byteOffset+r*l.BYTES_PER_ELEMENT,e((void 0===n?i:c(n,i))-r))}))},function(t,n,l){"use strict";var i=l(4),e=l(12),c=l(2),o=i.Int8Array,d=e.aTypedArray,r=e.exportTypedArrayMethod,a=[].toLocaleString,u=[].slice,Z=!!o&&c((function(){a.call(new o(1))}));r("toLocaleString",(function(){return a.apply(Z?u.call(d(this)):d(this),arguments)}),c((function(){return[1,2].toLocaleString()!=new o([1,2]).toLocaleString()}))||!c((function(){o.prototype.toLocaleString.call([1,2])})))},function(t,n,l){"use strict";var i=l(12).exportTypedArrayMethod,e=l(2),c=l(4).Uint8Array,o=c&&c.prototype||{},d=[].toString,r=[].join;e((function(){d.call({})}))&&(d=function(){return r.call(this)});var a=o.toString!=d;i("toString",d,a)},function(t,n,l){"use strict";l(90)("WeakSet",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),l(186))},function(t,n,l){l(405)},function(t,n,l){"use strict";var i=l(0),e=l(27),c=l(42),o=l(26),d=l(18),r=l(38),a=l(6),u=l(15),Z=function(t,n){var l=this;if(!(l instanceof Z))return new Z(t,n);c&&(l=c(new Error(void 0),e(l))),void 0!==n&&d(l,"message",u(n));var i=[];return a(t,i.push,{that:i}),d(l,"errors",i),l};Z.prototype=o(Error.prototype,{constructor:r(5,Z),message:r(5,""),name:r(5,"AggregateError")}),i({global:!0},{AggregateError:Z})},function(t,n,l){var i=l(0),e=l(51),c=Object.isFrozen,o=function(t,n){if(!c||!e(t)||!c(t))return!1;for(var l,i=0,o=t.length;i<o;)if(!("string"==typeof(l=t[i++])||n&&void 0===l))return!1;return 0!==o};i({target:"Array",stat:!0},{isTemplateObject:function(t){if(!o(t,!0))return!1;var n=t.raw;return!(n.length!==t.length||!o(n,!1))}})},function(t,n,l){"use strict";var i=l(9),e=l(35),c=l(13),o=l(10),d=l(14).f;i&&!("lastIndex"in[])&&(d(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=c(this),n=o(t.length);return 0==n?0:n-1}}),e("lastIndex"))},function(t,n,l){"use strict";var i=l(9),e=l(35),c=l(13),o=l(10),d=l(14).f;i&&!("lastItem"in[])&&(d(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=c(this),n=o(t.length);return 0==n?void 0:t[n-1]},set:function(t){var n=c(this),l=o(n.length);return n[0==l?0:l-1]=t}}),e("lastItem"))},function(t,n,l){"use strict";var i=l(0),e=l(33),c=l(18),o=l(16),d=l(7),r=l(410),a=l(5),u=d("toStringTag"),Z=function(){e(this,Z)};Z.prototype=r,o(r,u)||c(r,u,"AsyncIterator"),o(r,"constructor")&&r.constructor!==Object||c(r,"constructor",Z),i({global:!0,forced:a},{AsyncIterator:Z})},function(t,n,l){var i,e,c=l(4),o=l(83),d=l(27),r=l(16),a=l(18),u=l(7),Z=l(5),s=u("asyncIterator"),b=c.AsyncIterator,m=o.AsyncIteratorPrototype;if(!Z)if(m)i=m;else if("function"==typeof b)i=b.prototype;else if(o.USE_FUNCTION_CONSTRUCTOR||c.USE_FUNCTION_CONSTRUCTOR)try{e=d(d(d(Function("return async function*(){}()")()))),d(e)===Object.prototype&&(i=e)}catch(t){}i||(i={}),r(i,s)||a(i,s,(function(){return this})),t.exports=i},function(t,n,l){"use strict";var i=l(0),e=l(1),c=l(56)((function(t,n){var l=this,i=l.iterator;return t.resolve(e(l.next.apply(i,n))).then((function(t){return e(t).done?(l.done=!0,{done:!0,value:void 0}):{done:!1,value:[l.index++,t.value]}}))}));i({target:"AsyncIterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:e(this),index:0})}})},function(t,n,l){"use strict";var i=l(0),e=l(1),c=l(80),o=l(56)((function(t,n){var l=this;return new t((function(i,c){var o=function(){try{t.resolve(e(l.next.apply(l.iterator,l.remaining?[]:n))).then((function(t){try{e(t).done?(l.done=!0,i({done:!0,value:void 0})):l.remaining?(l.remaining--,o()):i({done:!1,value:t.value})}catch(t){c(t)}}),c)}catch(t){c(t)}};o()}))}));i({target:"AsyncIterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,n,l){"use strict";var i=l(0),e=l(81).every;i({target:"AsyncIterator",proto:!0,real:!0},{every:function(t){return e(this,t)}})},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(1),o=l(56)((function(t,n){var l=this,i=l.filterer;return new t((function(e,o){var d=function(){try{t.resolve(c(l.next.apply(l.iterator,n))).then((function(n){try{if(c(n).done)l.done=!0,e({done:!0,value:void 0});else{var r=n.value;t.resolve(i(r)).then((function(t){t?e({done:!1,value:r}):d()}),o)}}catch(t){o(t)}}),o)}catch(t){o(t)}};d()}))}));i({target:"AsyncIterator",proto:!0,real:!0},{filter:function(t){return new o({iterator:c(this),filterer:e(t)})}})},function(t,n,l){"use strict";var i=l(0),e=l(81).find;i({target:"AsyncIterator",proto:!0,real:!0},{find:function(t){return e(this,t)}})},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(1),o=l(56),d=l(187),r=o((function(t){var n,l=this,i=l.mapper;return new t((function(o,r){var a=function(){try{t.resolve(c(l.next.call(l.iterator))).then((function(a){try{c(a).done?(l.done=!0,o({done:!0,value:void 0})):t.resolve(i(a.value)).then((function(t){try{return l.innerIterator=n=d(t),l.innerNext=e(n.next),u()}catch(t){r(t)}}),r)}catch(t){r(t)}}),r)}catch(t){r(t)}},u=function(){if(n=l.innerIterator)try{t.resolve(c(l.innerNext.call(n))).then((function(t){try{c(t).done?(l.innerIterator=l.innerNext=null,a()):o({done:!1,value:t.value})}catch(t){r(t)}}),r)}catch(t){r(t)}else a()};u()}))}));i({target:"AsyncIterator",proto:!0,real:!0},{flatMap:function(t){return new r({iterator:c(this),mapper:e(t),innerIterator:null,innerNext:null})}})},function(t,n,l){"use strict";var i=l(0),e=l(81).forEach;i({target:"AsyncIterator",proto:!0,real:!0},{forEach:function(t){return e(this,t)}})},function(t,n,l){var i=l(0),e=l(61),c=l(1),o=l(13),d=l(56),r=l(187),a=l(41),u=l(52),Z=l(102),s=l(7),b=l(188),m=s("asyncIterator"),h=e.AsyncIterator,I=d((function(t,n){return c(this.next.apply(this.iterator,n))}),!0);i({target:"AsyncIterator",stat:!0},{from:function(t){var n,l=o(t),i=Z(l[m]);return void 0!==i&&(n=r(l,i))instanceof h?n:void 0===n&&void 0!==(i=u(l))?new b(a(l,i)):new I({iterator:void 0!==n?n:l})}})},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(1),o=l(56)((function(t,n){var l=this,i=l.mapper;return t.resolve(c(l.next.apply(l.iterator,n))).then((function(n){return c(n).done?(l.done=!0,{done:!0,value:void 0}):t.resolve(i(n.value)).then((function(t){return{done:!1,value:t}}))}))}));i({target:"AsyncIterator",proto:!0,real:!0},{map:function(t){return new o({iterator:c(this),mapper:e(t)})}})},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(1),o=l(11)("Promise");i({target:"AsyncIterator",proto:!0,real:!0},{reduce:function(t){var n=c(this),l=e(n.next),i=arguments.length<2,d=i?void 0:arguments[1];return e(t),new o((function(e,r){var a=function(){try{o.resolve(c(l.call(n))).then((function(n){try{if(c(n).done)i?r(TypeError("Reduce of empty iterator with no initial value")):e(d);else{var l=n.value;i?(i=!1,d=l,a()):o.resolve(t(d,l)).then((function(t){d=t,a()}),r)}}catch(t){r(t)}}),r)}catch(t){r(t)}};a()}))}})},function(t,n,l){"use strict";var i=l(0),e=l(81).some;i({target:"AsyncIterator",proto:!0,real:!0},{some:function(t){return e(this,t)}})},function(t,n,l){"use strict";var i=l(0),e=l(1),c=l(80),o=l(56)((function(t,n){var l,i,e=this.iterator;return this.remaining--?this.next.apply(e,n):(i={done:!0,value:void 0},this.done=!0,void 0!==(l=e.return)?t.resolve(l.call(e)).then((function(){return i})):i)}));i({target:"AsyncIterator",proto:!0,real:!0},{take:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,n,l){"use strict";var i=l(0),e=l(81).toArray;i({target:"AsyncIterator",proto:!0,real:!0},{toArray:function(){return e(this)}})},function(t,n,l){var i=l(0),e=l(189),c=l(11),o=l(26),d=function(){var t=c("Object","freeze");return t?t(o(null)):o(null)};i({global:!0},{compositeKey:function(){return e.apply(Object,arguments).get("object",d)}})},function(t,n,l){var i=l(0),e=l(189),c=l(11);i({global:!0},{compositeSymbol:function(){return 1===arguments.length&&"string"==typeof arguments[0]?c("Symbol").for(arguments[0]):e.apply(null,arguments).get("symbol",c("Symbol"))}})},function(t,n,l){l(160)},function(t,n,l){"use strict";var i=l(0),e=l(4),c=l(33),o=l(18),d=l(2),r=l(16),a=l(7),u=l(122).IteratorPrototype,Z=l(5),s=a("iterator"),b=a("toStringTag"),m=e.Iterator,h=Z||"function"!=typeof m||m.prototype!==u||!d((function(){m({})})),I=function(){c(this,I)};Z&&o(u={},s,(function(){return this})),r(u,b)||o(u,b,"Iterator"),!h&&r(u,"constructor")&&u.constructor!==Object||o(u,"constructor",I),I.prototype=u,i({global:!0,forced:h},{Iterator:I})},function(t,n,l){"use strict";var i=l(0),e=l(1),c=l(57)((function(t){var n=e(this.next.apply(this.iterator,t));if(!(this.done=!!n.done))return[this.index++,n.value]}));i({target:"Iterator",proto:!0,real:!0},{asIndexedPairs:function(){return new c({iterator:e(this),index:0})}})},function(t,n,l){"use strict";var i=l(0),e=l(1),c=l(80),o=l(57)((function(t){for(var n,l=this.iterator,i=this.next;this.remaining;)if(this.remaining--,n=e(i.call(l)),this.done=!!n.done)return;if(n=e(i.apply(l,t)),!(this.done=!!n.done))return n.value}));i({target:"Iterator",proto:!0,real:!0},{drop:function(t){return new o({iterator:e(this),remaining:c(t)})}})},function(t,n,l){"use strict";var i=l(0),e=l(6),c=l(3),o=l(1);i({target:"Iterator",proto:!0,real:!0},{every:function(t){return o(this),c(t),!e(this,(function(n,l){if(!t(n))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(1),o=l(57),d=l(118),r=o((function(t){for(var n,l,i=this.iterator,e=this.filterer,o=this.next;;){if(n=c(o.apply(i,t)),this.done=!!n.done)return;if(l=n.value,d(i,e,l))return l}}));i({target:"Iterator",proto:!0,real:!0},{filter:function(t){return new r({iterator:c(this),filterer:e(t)})}})},function(t,n,l){"use strict";var i=l(0),e=l(6),c=l(3),o=l(1);i({target:"Iterator",proto:!0,real:!0},{find:function(t){return o(this),c(t),e(this,(function(n,l){if(t(n))return l(n)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(1),o=l(52),d=l(57),r=l(85),a=d((function(){for(var t,n,l,i,d=this.iterator,a=this.mapper;;)try{if(i=this.innerIterator){if(!(t=c(this.innerNext.call(i))).done)return t.value;this.innerIterator=this.innerNext=null}if(t=c(this.next.call(d)),this.done=!!t.done)return;if(n=a(t.value),void 0===(l=o(n)))throw TypeError(".flatMap callback should return an iterable object");this.innerIterator=i=c(l.call(n)),this.innerNext=e(i.next)}catch(t){r(d,"throw",t)}}));i({target:"Iterator",proto:!0,real:!0},{flatMap:function(t){return new a({iterator:c(this),mapper:e(t),innerIterator:null,innerNext:null})}})},function(t,n,l){"use strict";var i=l(0),e=l(6),c=l(1);i({target:"Iterator",proto:!0,real:!0},{forEach:function(t){e(c(this),t,{IS_ITERATOR:!0})}})},function(t,n,l){var i=l(0),e=l(61),c=l(1),o=l(13),d=l(57),r=l(41),a=l(52),u=e.Iterator,Z=d((function(t){var n=c(this.next.apply(this.iterator,t));if(!(this.done=!!n.done))return n.value}),!0);i({target:"Iterator",stat:!0},{from:function(t){var n,l=o(t),i=a(l);if(null!=i){if((n=r(l,i))instanceof u)return n}else n=l;return new Z({iterator:n})}})},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(1),o=l(57),d=l(118),r=o((function(t){var n=this.iterator,l=c(this.next.apply(n,t));if(!(this.done=!!l.done))return d(n,this.mapper,l.value)}));i({target:"Iterator",proto:!0,real:!0},{map:function(t){return new r({iterator:c(this),mapper:e(t)})}})},function(t,n,l){"use strict";var i=l(0),e=l(6),c=l(3),o=l(1);i({target:"Iterator",proto:!0,real:!0},{reduce:function(t){o(this),c(t);var n=arguments.length<2,l=n?void 0:arguments[1];if(e(this,(function(i){n?(n=!1,l=i):l=t(l,i)}),{IS_ITERATOR:!0}),n)throw TypeError("Reduce of empty iterator with no initial value");return l}})},function(t,n,l){"use strict";var i=l(0),e=l(6),c=l(3),o=l(1);i({target:"Iterator",proto:!0,real:!0},{some:function(t){return o(this),c(t),e(this,(function(n,l){if(t(n))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(1),c=l(80),o=l(57),d=l(85),r=o((function(t){var n=this.iterator;if(!this.remaining--)return this.done=!0,d(n,"normal",void 0);var l=e(this.next.apply(n,t));return(this.done=!!l.done)?void 0:l.value}));i({target:"Iterator",proto:!0,real:!0},{take:function(t){return new r({iterator:e(this),remaining:c(t)})}})},function(t,n,l){"use strict";var i=l(0),e=l(6),c=l(1),o=[].push;i({target:"Iterator",proto:!0,real:!0},{toArray:function(){var t=[];return e(c(this),o,{that:t,IS_ITERATOR:!0}),t}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(103);i({target:"Map",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(19),d=l(37),r=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{every:function(t){var n=c(this),l=d(n),i=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(l,(function(t,l,e){if(!i(l,t,n))return e()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(19),a=l(28),u=l(37),Z=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{filter:function(t){var n=o(this),l=u(n),i=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(n,c("Map"))),s=d(e.set);return Z(l,(function(t,l){i(l,t,n)&&s.call(e,t,l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(19),d=l(37),r=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{find:function(t){var n=c(this),l=d(n),i=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l,e){if(i(l,t,n))return e(l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(19),d=l(37),r=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{findKey:function(t){var n=c(this),l=d(n),i=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l,e){if(i(l,t,n))return e(t)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,n,l){l(0)({target:"Map",stat:!0},{from:l(104)})},function(t,n,l){"use strict";var i=l(0),e=l(6),c=l(3);i({target:"Map",stat:!0},{groupBy:function(t,n){var l=new this;c(n);var i=c(l.has),o=c(l.get),d=c(l.set);return e(t,(function(t){var e=n(t);i.call(l,e)?o.call(l,e).push(t):d.call(l,e,[t])})),l}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(37),d=l(449),r=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{includes:function(t){return r(o(c(this)),(function(n,l,i){if(d(l,t))return i()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,n){t.exports=function(t,n){return t===n||t!=t&&n!=n}},function(t,n,l){"use strict";var i=l(0),e=l(6),c=l(3);i({target:"Map",stat:!0},{keyBy:function(t,n){var l=new this;c(n);var i=c(l.set);return e(t,(function(t){i.call(l,n(t),t)})),l}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(37),d=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{keyOf:function(t){return d(o(c(this)),(function(n,l,i){if(l===t)return i(n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(19),a=l(28),u=l(37),Z=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{mapKeys:function(t){var n=o(this),l=u(n),i=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(n,c("Map"))),s=d(e.set);return Z(l,(function(t,l){s.call(e,i(l,t,n),l)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(19),a=l(28),u=l(37),Z=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{mapValues:function(t){var n=o(this),l=u(n),i=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(n,c("Map"))),s=d(e.set);return Z(l,(function(t,l){s.call(e,t,i(l,t,n))}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),e}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(3),d=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{merge:function(t){for(var n=c(this),l=o(n.set),i=arguments.length,e=0;e<i;)d(arguments[e++],l,{that:n,AS_ENTRIES:!0});return n}})},function(t,n,l){l(0)({target:"Map",stat:!0},{of:l(105)})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(3),d=l(37),r=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{reduce:function(t){var n=c(this),l=d(n),i=arguments.length<2,e=i?void 0:arguments[1];if(o(t),r(l,(function(l,c){i?(i=!1,e=c):e=t(e,c,l,n)}),{AS_ENTRIES:!0,IS_ITERATOR:!0}),i)throw TypeError("Reduce of empty map with no initial value");return e}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(19),d=l(37),r=l(6);i({target:"Map",proto:!0,real:!0,forced:e},{some:function(t){var n=c(this),l=d(n),i=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l,e){if(i(l,t,n))return e()}),{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(3);i({target:"Map",proto:!0,real:!0,forced:e},{update:function(t,n){var l=c(this),i=arguments.length;o(n);var e=l.has(t);if(!e&&i<3)throw TypeError("Updating absent value");var d=e?l.get(t):o(i>2?arguments[2]:void 0)(t,l);return l.set(t,n(d,t,l)),l}})},function(t,n,l){"use strict";l(0)({target:"Map",proto:!0,real:!0,forced:l(5)},{updateOrInsert:l(139)})},function(t,n,l){"use strict";l(0)({target:"Map",proto:!0,real:!0,forced:l(5)},{upsert:l(139)})},function(t,n,l){var i=l(0),e=Math.min,c=Math.max;i({target:"Math",stat:!0},{clamp:function(t,n,l){return e(l,c(n,t))}})},function(t,n,l){l(0)({target:"Math",stat:!0},{DEG_PER_RAD:Math.PI/180})},function(t,n,l){var i=l(0),e=180/Math.PI;i({target:"Math",stat:!0},{degrees:function(t){return t*e}})},function(t,n,l){var i=l(0),e=l(190),c=l(163);i({target:"Math",stat:!0},{fscale:function(t,n,l,i,o){return c(e(t,n,l,i,o))}})},function(t,n,l){l(0)({target:"Math",stat:!0},{iaddh:function(t,n,l,i){var e=t>>>0,c=l>>>0;return(n>>>0)+(i>>>0)+((e&c|(e|c)&~(e+c>>>0))>>>31)|0}})},function(t,n,l){l(0)({target:"Math",stat:!0},{imulh:function(t,n){var l=+t,i=+n,e=65535&l,c=65535&i,o=l>>16,d=i>>16,r=(o*c>>>0)+(e*c>>>16);return o*d+(r>>16)+((e*d>>>0)+(65535&r)>>16)}})},function(t,n,l){l(0)({target:"Math",stat:!0},{isubh:function(t,n,l,i){var e=t>>>0,c=l>>>0;return(n>>>0)-(i>>>0)-((~e&c|~(e^c)&e-c>>>0)>>>31)|0}})},function(t,n,l){l(0)({target:"Math",stat:!0},{RAD_PER_DEG:180/Math.PI})},function(t,n,l){var i=l(0),e=Math.PI/180;i({target:"Math",stat:!0},{radians:function(t){return t*e}})},function(t,n,l){l(0)({target:"Math",stat:!0},{scale:l(190)})},function(t,n,l){var i=l(0),e=l(1),c=l(164),o=l(62),d=l(17),r=d.set,a=d.getterFor("Seeded Random Generator"),u=o((function(t){r(this,{type:"Seeded Random Generator",seed:t%2147483647})}),"Seeded Random",(function(){var t=a(this);return{value:(1073741823&(t.seed=(1103515245*t.seed+12345)%2147483647))/1073741823,done:!1}}));i({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var n=e(t).seed;if(!c(n))throw TypeError('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new u(n)}})},function(t,n,l){l(0)({target:"Math",stat:!0},{signbit:function(t){return(t=+t)==t&&0==t?1/t==-1/0:t<0}})},function(t,n,l){l(0)({target:"Math",stat:!0},{umulh:function(t,n){var l=+t,i=+n,e=65535&l,c=65535&i,o=l>>>16,d=i>>>16,r=(o*c>>>0)+(e*c>>>16);return o*d+(r>>>16)+((e*d>>>0)+(65535&r)>>>16)}})},function(t,n,l){"use strict";var i=l(0),e=l(30),c=l(131),o=/^[\da-z]+$/;i({target:"Number",stat:!0},{fromString:function(t,n){var l,i,d=1;if("string"!=typeof t)throw TypeError("Invalid number representation");if(!t.length)throw SyntaxError("Invalid number representation");if("-"==t.charAt(0)&&(d=-1,!(t=t.slice(1)).length))throw SyntaxError("Invalid number representation");if((l=void 0===n?10:e(n))<2||l>36)throw RangeError("Invalid radix");if(!o.test(t)||(i=c(t,l)).toString(l)!==t)throw SyntaxError("Invalid number representation");return d*i}})},function(t,n,l){"use strict";var i=l(0),e=l(140);i({target:"Object",stat:!0},{iterateEntries:function(t){return new e(t,"entries")}})},function(t,n,l){"use strict";var i=l(0),e=l(140);i({target:"Object",stat:!0},{iterateKeys:function(t){return new e(t,"keys")}})},function(t,n,l){"use strict";var i=l(0),e=l(140);i({target:"Object",stat:!0},{iterateValues:function(t){return new e(t,"values")}})},function(t,n,l){"use strict";var i=l(0),e=l(9),c=l(54),o=l(3),d=l(1),r=l(8),a=l(33),u=l(14).f,Z=l(18),s=l(36),b=l(41),m=l(102),h=l(6),I=l(174),p=l(7),G=l(17),y=p("observable"),X=G.get,g=G.set,V=function(t){var n=t.cleanup;if(n){t.cleanup=void 0;try{n()}catch(t){I(t)}}},W=function(t){return void 0===t.observer},R=function(t){var n=t.facade;if(!e){n.closed=!0;var l=t.subscriptionObserver;l&&(l.closed=!0)}t.observer=void 0},C=function(t,n){var l,i=g(this,{cleanup:void 0,observer:d(t),subscriptionObserver:void 0});e||(this.closed=!1);try{(l=m(t.start))&&l.call(t,this)}catch(t){I(t)}if(!W(i)){var c=i.subscriptionObserver=new f(this);try{var r=n(c),a=r;null!=r&&(i.cleanup="function"==typeof r.unsubscribe?function(){a.unsubscribe()}:o(r))}catch(t){return void c.error(t)}W(i)&&V(i)}};C.prototype=s({},{unsubscribe:function(){var t=X(this);W(t)||(R(t),V(t))}}),e&&u(C.prototype,"closed",{configurable:!0,get:function(){return W(X(this))}});var f=function(t){g(this,{subscription:t}),e||(this.closed=!1)};f.prototype=s({},{next:function(t){var n=X(X(this).subscription);if(!W(n)){var l=n.observer;try{var i=m(l.next);i&&i.call(l,t)}catch(t){I(t)}}},error:function(t){var n=X(X(this).subscription);if(!W(n)){var l=n.observer;R(n);try{var i=m(l.error);i?i.call(l,t):I(t)}catch(t){I(t)}V(n)}},complete:function(){var t=X(X(this).subscription);if(!W(t)){var n=t.observer;R(t);try{var l=m(n.complete);l&&l.call(n)}catch(t){I(t)}V(t)}}}),e&&u(f.prototype,"closed",{configurable:!0,get:function(){return W(X(X(this).subscription))}});var S=function(t){a(this,S,"Observable"),g(this,{subscriber:o(t)})};s(S.prototype,{subscribe:function(t){var n=arguments.length;return new C("function"==typeof t?{next:t,error:n>1?arguments[1]:void 0,complete:n>2?arguments[2]:void 0}:r(t)?t:{},X(this).subscriber)}}),s(S,{from:function(t){var n="function"==typeof this?this:S,l=m(d(t)[y]);if(l){var i=d(l.call(t));return i.constructor===n?i:new n((function(t){return i.subscribe(t)}))}var e=b(t);return new n((function(t){h(e,(function(n,l){if(t.next(n),t.closed)return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))},of:function(){for(var t="function"==typeof this?this:S,n=arguments.length,l=new Array(n),i=0;i<n;)l[i]=arguments[i++];return new t((function(t){for(var i=0;i<n;i++)if(t.next(l[i]),t.closed)return;t.complete()}))}}),Z(S.prototype,y,(function(){return this})),i({global:!0},{Observable:S}),c("Observable")},function(t,n,l){l(175)},function(t,n,l){l(481)},function(t,n,l){"use strict";var i=l(0),e=l(3),c=l(11),o=l(78),d=l(95),r=l(6);i({target:"Promise",stat:!0},{any:function(t){var n=this,l=o.f(n),i=l.resolve,a=l.reject,u=d((function(){var l=e(n.resolve),o=[],d=0,u=1,Z=!1;r(t,(function(t){var e=d++,r=!1;o.push(void 0),u++,l.call(n,t).then((function(t){r||Z||(Z=!0,i(t))}),(function(t){r||Z||(r=!0,o[e]=t,--u||a(new(c("AggregateError"))(o,"No one promise resolved")))}))})),--u||a(new(c("AggregateError"))(o,"No one promise resolved"))}));return u.error&&a(u.value),l.promise}})},function(t,n,l){"use strict";var i=l(0),e=l(78),c=l(95);i({target:"Promise",stat:!0},{try:function(t){var n=e.f(this),l=c(t);return(l.error?n.reject:n.resolve)(l.value),n.promise}})},function(t,n,l){var i=l(0),e=l(44),c=l(1),o=e.toKey,d=e.set;i({target:"Reflect",stat:!0},{defineMetadata:function(t,n,l){var i=arguments.length<4?void 0:o(arguments[3]);d(t,n,c(l),i)}})},function(t,n,l){var i=l(0),e=l(44),c=l(1),o=e.toKey,d=e.getMap,r=e.store;i({target:"Reflect",stat:!0},{deleteMetadata:function(t,n){var l=arguments.length<3?void 0:o(arguments[2]),i=d(c(n),l,!1);if(void 0===i||!i.delete(t))return!1;if(i.size)return!0;var e=r.get(n);return e.delete(l),!!e.size||r.delete(n)}})},function(t,n,l){var i=l(0),e=l(44),c=l(1),o=l(27),d=e.has,r=e.get,a=e.toKey,u=function(t,n,l){if(d(t,n,l))return r(t,n,l);var i=o(n);return null!==i?u(t,i,l):void 0};i({target:"Reflect",stat:!0},{getMetadata:function(t,n){var l=arguments.length<3?void 0:a(arguments[2]);return u(t,c(n),l)}})},function(t,n,l){var i=l(0),e=l(179),c=l(44),o=l(1),d=l(27),r=l(6),a=c.keys,u=c.toKey,Z=function(t,n){var l=a(t,n),i=d(t);if(null===i)return l;var c,o,u=Z(i,n);return u.length?l.length?(c=new e(l.concat(u)),r(c,(o=[]).push,{that:o}),o):u:l};i({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var n=arguments.length<2?void 0:u(arguments[1]);return Z(o(t),n)}})},function(t,n,l){var i=l(0),e=l(44),c=l(1),o=e.get,d=e.toKey;i({target:"Reflect",stat:!0},{getOwnMetadata:function(t,n){var l=arguments.length<3?void 0:d(arguments[2]);return o(t,c(n),l)}})},function(t,n,l){var i=l(0),e=l(44),c=l(1),o=e.keys,d=e.toKey;i({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var n=arguments.length<2?void 0:d(arguments[1]);return o(c(t),n)}})},function(t,n,l){var i=l(0),e=l(44),c=l(1),o=l(27),d=e.has,r=e.toKey,a=function(t,n,l){if(d(t,n,l))return!0;var i=o(n);return null!==i&&a(t,i,l)};i({target:"Reflect",stat:!0},{hasMetadata:function(t,n){var l=arguments.length<3?void 0:r(arguments[2]);return a(t,c(n),l)}})},function(t,n,l){var i=l(0),e=l(44),c=l(1),o=e.has,d=e.toKey;i({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,n){var l=arguments.length<3?void 0:d(arguments[2]);return o(t,c(n),l)}})},function(t,n,l){var i=l(0),e=l(44),c=l(1),o=e.toKey,d=e.set;i({target:"Reflect",stat:!0},{metadata:function(t,n){return function(l,i){d(t,n,c(l),o(i))}}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(191);i({target:"Set",proto:!0,real:!0,forced:e},{addAll:function(){return c.apply(this,arguments)}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(103);i({target:"Set",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(28),a=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{difference:function(t){var n=o(this),l=new(r(n,c("Set")))(n),i=d(l.delete);return a(t,(function(t){i.call(l,t)})),l}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(19),d=l(58),r=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{every:function(t){var n=c(this),l=d(n),i=o(t,arguments.length>1?arguments[1]:void 0,3);return!r(l,(function(t,l){if(!i(t,t,n))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(19),a=l(28),u=l(58),Z=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{filter:function(t){var n=o(this),l=u(n),i=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(n,c("Set"))),s=d(e.add);return Z(l,(function(t){i(t,t,n)&&s.call(e,t)}),{IS_ITERATOR:!0}),e}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(19),d=l(58),r=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{find:function(t){var n=c(this),l=d(n),i=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l){if(i(t,t,n))return l(t)}),{IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},function(t,n,l){l(0)({target:"Set",stat:!0},{from:l(104)})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(28),a=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{intersection:function(t){var n=o(this),l=new(r(n,c("Set"))),i=d(n.has),e=d(l.add);return a(t,(function(t){i.call(n,t)&&e.call(l,t)})),l}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(3),d=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{isDisjointFrom:function(t){var n=c(this),l=o(n.has);return!d(t,(function(t,i){if(!0===l.call(n,t))return i()}),{INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(41),a=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{isSubsetOf:function(t){var n=r(this),l=o(t),i=l.has;return"function"!=typeof i&&(l=new(c("Set"))(t),i=d(l.has)),!a(n,(function(t,n){if(!1===i.call(l,t))return n()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(3),d=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{isSupersetOf:function(t){var n=c(this),l=o(n.has);return!d(t,(function(t,i){if(!1===l.call(n,t))return i()}),{INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(58),d=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{join:function(t){var n=c(this),l=o(n),i=void 0===t?",":String(t),e=[];return d(l,e.push,{that:e,IS_ITERATOR:!0}),e.join(i)}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(19),a=l(28),u=l(58),Z=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{map:function(t){var n=o(this),l=u(n),i=r(t,arguments.length>1?arguments[1]:void 0,3),e=new(a(n,c("Set"))),s=d(e.add);return Z(l,(function(t){s.call(e,i(t,t,n))}),{IS_ITERATOR:!0}),e}})},function(t,n,l){l(0)({target:"Set",stat:!0},{of:l(105)})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(3),d=l(58),r=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{reduce:function(t){var n=c(this),l=d(n),i=arguments.length<2,e=i?void 0:arguments[1];if(o(t),r(l,(function(l){i?(i=!1,e=l):e=t(e,l,l,n)}),{IS_ITERATOR:!0}),i)throw TypeError("Reduce of empty set with no initial value");return e}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(1),o=l(19),d=l(58),r=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{some:function(t){var n=c(this),l=d(n),i=o(t,arguments.length>1?arguments[1]:void 0,3);return r(l,(function(t,l){if(i(t,t,n))return l()}),{IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(28),a=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{symmetricDifference:function(t){var n=o(this),l=new(r(n,c("Set")))(n),i=d(l.delete),e=d(l.add);return a(t,(function(t){i.call(l,t)||e.call(l,t)})),l}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(11),o=l(1),d=l(3),r=l(28),a=l(6);i({target:"Set",proto:!0,real:!0,forced:e},{union:function(t){var n=o(this),l=new(r(n,c("Set")))(n);return a(t,d(l.add),{that:l}),l}})},function(t,n,l){"use strict";var i=l(0),e=l(66).charAt;i({target:"String",proto:!0,forced:l(2)((function(){return"𠮷"!=="𠮷".at(0)}))},{at:function(t){return e(this,t)}})},function(t,n,l){"use strict";var i=l(0),e=l(62),c=l(22),o=l(15),d=l(17),r=l(66),a=r.codeAt,u=r.charAt,Z=d.set,s=d.getterFor("String Iterator"),b=e((function(t){Z(this,{type:"String Iterator",string:t,index:0})}),"String",(function(){var t,n=s(this),l=n.string,i=n.index;return i>=l.length?{value:void 0,done:!0}:(t=u(l,i),n.index+=t.length,{value:{codePoint:a(t,0),position:i},done:!1})}));i({target:"String",proto:!0},{codePoints:function(){return new b(o(c(this)))}})},function(t,n,l){l(181)},function(t,n,l){l(514)},function(t,n,l){"use strict";var i=l(0),e=l(22),c=l(79),o=l(15),d=l(65),r=l(183),a=l(7),u=l(5),Z=a("replace"),s=RegExp.prototype,b=Math.max,m=function(t,n,l){return l>t.length?-1:""===n?l:t.indexOf(n,l)};i({target:"String",proto:!0},{replaceAll:function(t,n){var l,i,a,h,I,p,G,y,X=e(this),g=0,V=0,W="";if(null!=t){if((l=c(t))&&!~o(e("flags"in s?t.flags:d.call(t))).indexOf("g"))throw TypeError("`.replaceAll` does not allow non-global regexes");if(void 0!==(i=t[Z]))return i.call(t,X,n);if(u&&l)return o(X).replace(t,n)}for(a=o(X),h=o(t),(I="function"==typeof n)||(n=o(n)),p=h.length,G=b(1,p),g=m(a,h,0);-1!==g;)y=I?o(n(h,g,a)):r(h,a,g,[],void 0,n),W+=a.slice(V,g)+y,V=g+p,g=m(a,h,g+G);return V<a.length&&(W+=a.slice(V)),W}})},function(t,n,l){l(21)("asyncDispose")},function(t,n,l){l(21)("dispose")},function(t,n,l){l(21)("observable")},function(t,n,l){l(21)("patternMatch")},function(t,n,l){l(21)("replaceAll")},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(103);i({target:"WeakMap",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,n,l){l(0)({target:"WeakMap",stat:!0},{from:l(104)})},function(t,n,l){l(0)({target:"WeakMap",stat:!0},{of:l(105)})},function(t,n,l){"use strict";l(0)({target:"WeakMap",proto:!0,real:!0,forced:l(5)},{upsert:l(139)})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(191);i({target:"WeakSet",proto:!0,real:!0,forced:e},{addAll:function(){return c.apply(this,arguments)}})},function(t,n,l){"use strict";var i=l(0),e=l(5),c=l(103);i({target:"WeakSet",proto:!0,real:!0,forced:e},{deleteAll:function(){return c.apply(this,arguments)}})},function(t,n,l){l(0)({target:"WeakSet",stat:!0},{from:l(104)})},function(t,n,l){l(0)({target:"WeakSet",stat:!0},{of:l(105)})},function(t,n,l){var i=l(4),e=l(192),c=l(151),o=l(18);for(var d in e){var r=i[d],a=r&&r.prototype;if(a&&a.forEach!==c)try{o(a,"forEach",c)}catch(t){a.forEach=c}}},function(t,n,l){var i=l(4),e=l(192),c=l(87),o=l(18),d=l(7),r=d("iterator"),a=d("toStringTag"),u=c.values;for(var Z in e){var s=i[Z],b=s&&s.prototype;if(b){if(b[r]!==u)try{o(b,r,u)}catch(t){b[r]=u}if(b[a]||o(b,a,Z),e[Z])for(var m in c)if(b[m]!==c[m])try{o(b,m,c[m])}catch(t){b[m]=c[m]}}}},function(t,n,l){var i=l(0),e=l(4),c=l(132);i({global:!0,bind:!0,enumerable:!0,forced:!e.setImmediate||!e.clearImmediate},{setImmediate:c.set,clearImmediate:c.clear})},function(t,n,l){var i=l(0),e=l(4),c=l(172),o=l(63),d=e.process;i({global:!0,enumerable:!0,noTargetGet:!0},{queueMicrotask:function(t){var n=o&&d.domain;c(n?n.bind(t):t)}})},function(t,n,l){var i=l(0),e=l(4),c=l(39),o=[].slice,d=function(t){return function(n,l){var i=arguments.length>2,e=i?o.call(arguments,2):void 0;return t(i?function(){("function"==typeof n?n:Function(n)).apply(this,e)}:n,l)}};i({global:!0,bind:!0,forced:/MSIE .\./.test(c)},{setTimeout:d(e.setTimeout),setInterval:d(e.setInterval)})},function(t,n,l){"use strict";l(180);var i,e=l(0),c=l(9),o=l(193),d=l(4),r=l(115),a=l(25),u=l(33),Z=l(16),s=l(167),b=l(152),m=l(66).codeAt,h=l(534),I=l(15),p=l(34),G=l(194),y=l(17),X=d.URL,g=G.URLSearchParams,V=G.getState,W=y.set,R=y.getterFor("URL"),C=Math.floor,f=Math.pow,S=/[A-Za-z]/,v=/[\d+-.A-Za-z]/,K=/\d/,Y=/^0x/i,J=/^[0-7]+$/,N=/^\d+$/,L=/^[\dA-Fa-f]+$/,H=/[\0\t\n\r #%/:<>?@[\\\]^|]/,U=/[\0\t\n\r #/:<>?@[\\\]^|]/,x=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,T=/[\t\n\r]/g,k=function(t,n){var l,i,e;if("["==n.charAt(0)){if("]"!=n.charAt(n.length-1))return"Invalid host";if(!(l=B(n.slice(1,-1))))return"Invalid host";t.host=l}else if(E(t)){if(n=h(n),H.test(n))return"Invalid host";if(null===(l=F(n)))return"Invalid host";t.host=l}else{if(U.test(n))return"Invalid host";for(l="",i=b(n),e=0;e<i.length;e++)l+=Q(i[e],w);t.host=l}},F=function(t){var n,l,i,e,c,o,d,r=t.split(".");if(r.length&&""==r[r.length-1]&&r.pop(),(n=r.length)>4)return t;for(l=[],i=0;i<n;i++){if(""==(e=r[i]))return t;if(c=10,e.length>1&&"0"==e.charAt(0)&&(c=Y.test(e)?16:8,e=e.slice(8==c?1:2)),""===e)o=0;else{if(!(10==c?N:8==c?J:L).test(e))return t;o=parseInt(e,c)}l.push(o)}for(i=0;i<n;i++)if(o=l[i],i==n-1){if(o>=f(256,5-n))return null}else if(o>255)return null;for(d=l.pop(),i=0;i<l.length;i++)d+=l[i]*f(256,3-i);return d},B=function(t){var n,l,i,e,c,o,d,r=[0,0,0,0,0,0,0,0],a=0,u=null,Z=0,s=function(){return t.charAt(Z)};if(":"==s()){if(":"!=t.charAt(1))return;Z+=2,u=++a}for(;s();){if(8==a)return;if(":"!=s()){for(n=l=0;l<4&&L.test(s());)n=16*n+parseInt(s(),16),Z++,l++;if("."==s()){if(0==l)return;if(Z-=l,a>6)return;for(i=0;s();){if(e=null,i>0){if(!("."==s()&&i<4))return;Z++}if(!K.test(s()))return;for(;K.test(s());){if(c=parseInt(s(),10),null===e)e=c;else{if(0==e)return;e=10*e+c}if(e>255)return;Z++}r[a]=256*r[a]+e,2!=++i&&4!=i||a++}if(4!=i)return;break}if(":"==s()){if(Z++,!s())return}else if(s())return;r[a++]=n}else{if(null!==u)return;Z++,u=++a}}if(null!==u)for(o=a-u,a=7;0!=a&&o>0;)d=r[a],r[a--]=r[u+o-1],r[u+--o]=d;else if(8!=a)return;return r},z=function(t){var n,l,i,e;if("number"==typeof t){for(n=[],l=0;l<4;l++)n.unshift(t%256),t=C(t/256);return n.join(".")}if("object"==typeof t){for(n="",i=function(t){for(var n=null,l=1,i=null,e=0,c=0;c<8;c++)0!==t[c]?(e>l&&(n=i,l=e),i=null,e=0):(null===i&&(i=c),++e);return e>l&&(n=i,l=e),n}(t),l=0;l<8;l++)e&&0===t[l]||(e&&(e=!1),i===l?(n+=l?":":"::",e=!0):(n+=t[l].toString(16),l<7&&(n+=":")));return"["+n+"]"}return t},w={},A=s({},w,{" ":1,'"':1,"<":1,">":1,"`":1}),M=s({},A,{"#":1,"?":1,"{":1,"}":1}),P=s({},M,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Q=function(t,n){var l=m(t,0);return l>32&&l<127&&!Z(n,t)?t:encodeURIComponent(t)},j={ftp:21,file:null,http:80,https:443,ws:80,wss:443},E=function(t){return Z(j,t.scheme)},D=function(t){return""!=t.username||""!=t.password},O=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},q=function(t,n){var l;return 2==t.length&&S.test(t.charAt(0))&&(":"==(l=t.charAt(1))||!n&&"|"==l)},_=function(t){var n;return t.length>1&&q(t.slice(0,2))&&(2==t.length||"/"===(n=t.charAt(2))||"\\"===n||"?"===n||"#"===n)},$=function(t){var n=t.path,l=n.length;!l||"file"==t.scheme&&1==l&&q(n[0],!0)||n.pop()},tt=function(t){return"."===t||"%2e"===t.toLowerCase()},nt={},lt={},it={},et={},ct={},ot={},dt={},rt={},at={},ut={},Zt={},st={},bt={},mt={},ht={},It={},pt={},Gt={},yt={},Xt={},gt={},Vt=function(t,n,l,e){var c,o,d,r,a,u=l||nt,s=0,m="",h=!1,I=!1,p=!1;for(l||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,n=n.replace(x,"")),n=n.replace(T,""),c=b(n);s<=c.length;){switch(o=c[s],u){case nt:if(!o||!S.test(o)){if(l)return"Invalid scheme";u=it;continue}m+=o.toLowerCase(),u=lt;break;case lt:if(o&&(v.test(o)||"+"==o||"-"==o||"."==o))m+=o.toLowerCase();else{if(":"!=o){if(l)return"Invalid scheme";m="",u=it,s=0;continue}if(l&&(E(t)!=Z(j,m)||"file"==m&&(D(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=m,l)return void(E(t)&&j[t.scheme]==t.port&&(t.port=null));m="","file"==t.scheme?u=mt:E(t)&&e&&e.scheme==t.scheme?u=et:E(t)?u=rt:"/"==c[s+1]?(u=ct,s++):(t.cannotBeABaseURL=!0,t.path.push(""),u=yt)}break;case it:if(!e||e.cannotBeABaseURL&&"#"!=o)return"Invalid scheme";if(e.cannotBeABaseURL&&"#"==o){t.scheme=e.scheme,t.path=e.path.slice(),t.query=e.query,t.fragment="",t.cannotBeABaseURL=!0,u=gt;break}u="file"==e.scheme?mt:ot;continue;case et:if("/"!=o||"/"!=c[s+1]){u=ot;continue}u=at,s++;break;case ct:if("/"==o){u=ut;break}u=Gt;continue;case ot:if(t.scheme=e.scheme,o==i)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query;else if("/"==o||"\\"==o&&E(t))u=dt;else if("?"==o)t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query="",u=Xt;else{if("#"!=o){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.path.pop(),u=Gt;continue}t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,t.path=e.path.slice(),t.query=e.query,t.fragment="",u=gt}break;case dt:if(!E(t)||"/"!=o&&"\\"!=o){if("/"!=o){t.username=e.username,t.password=e.password,t.host=e.host,t.port=e.port,u=Gt;continue}u=ut}else u=at;break;case rt:if(u=at,"/"!=o||"/"!=m.charAt(s+1))continue;s++;break;case at:if("/"!=o&&"\\"!=o){u=ut;continue}break;case ut:if("@"==o){h&&(m="%40"+m),h=!0,d=b(m);for(var G=0;G<d.length;G++){var y=d[G];if(":"!=y||p){var X=Q(y,P);p?t.password+=X:t.username+=X}else p=!0}m=""}else if(o==i||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(h&&""==m)return"Invalid authority";s-=b(m).length+1,m="",u=Zt}else m+=o;break;case Zt:case st:if(l&&"file"==t.scheme){u=It;continue}if(":"!=o||I){if(o==i||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)){if(E(t)&&""==m)return"Invalid host";if(l&&""==m&&(D(t)||null!==t.port))return;if(r=k(t,m))return r;if(m="",u=pt,l)return;continue}"["==o?I=!0:"]"==o&&(I=!1),m+=o}else{if(""==m)return"Invalid host";if(r=k(t,m))return r;if(m="",u=bt,l==st)return}break;case bt:if(!K.test(o)){if(o==i||"/"==o||"?"==o||"#"==o||"\\"==o&&E(t)||l){if(""!=m){var g=parseInt(m,10);if(g>65535)return"Invalid port";t.port=E(t)&&g===j[t.scheme]?null:g,m=""}if(l)return;u=pt;continue}return"Invalid port"}m+=o;break;case mt:if(t.scheme="file","/"==o||"\\"==o)u=ht;else{if(!e||"file"!=e.scheme){u=Gt;continue}if(o==i)t.host=e.host,t.path=e.path.slice(),t.query=e.query;else if("?"==o)t.host=e.host,t.path=e.path.slice(),t.query="",u=Xt;else{if("#"!=o){_(c.slice(s).join(""))||(t.host=e.host,t.path=e.path.slice(),$(t)),u=Gt;continue}t.host=e.host,t.path=e.path.slice(),t.query=e.query,t.fragment="",u=gt}}break;case ht:if("/"==o||"\\"==o){u=It;break}e&&"file"==e.scheme&&!_(c.slice(s).join(""))&&(q(e.path[0],!0)?t.path.push(e.path[0]):t.host=e.host),u=Gt;continue;case It:if(o==i||"/"==o||"\\"==o||"?"==o||"#"==o){if(!l&&q(m))u=Gt;else if(""==m){if(t.host="",l)return;u=pt}else{if(r=k(t,m))return r;if("localhost"==t.host&&(t.host=""),l)return;m="",u=pt}continue}m+=o;break;case pt:if(E(t)){if(u=Gt,"/"!=o&&"\\"!=o)continue}else if(l||"?"!=o)if(l||"#"!=o){if(o!=i&&(u=Gt,"/"!=o))continue}else t.fragment="",u=gt;else t.query="",u=Xt;break;case Gt:if(o==i||"/"==o||"\\"==o&&E(t)||!l&&("?"==o||"#"==o)){if(".."===(a=(a=m).toLowerCase())||"%2e."===a||".%2e"===a||"%2e%2e"===a?($(t),"/"==o||"\\"==o&&E(t)||t.path.push("")):tt(m)?"/"==o||"\\"==o&&E(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&q(m)&&(t.host&&(t.host=""),m=m.charAt(0)+":"),t.path.push(m)),m="","file"==t.scheme&&(o==i||"?"==o||"#"==o))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==o?(t.query="",u=Xt):"#"==o&&(t.fragment="",u=gt)}else m+=Q(o,M);break;case yt:"?"==o?(t.query="",u=Xt):"#"==o?(t.fragment="",u=gt):o!=i&&(t.path[0]+=Q(o,w));break;case Xt:l||"#"!=o?o!=i&&("'"==o&&E(t)?t.query+="%27":t.query+="#"==o?"%23":Q(o,w)):(t.fragment="",u=gt);break;case gt:o!=i&&(t.fragment+=Q(o,A))}s++}},Wt=function(t){var n,l,i=u(this,Wt,"URL"),e=arguments.length>1?arguments[1]:void 0,o=I(t),d=W(i,{type:"URL"});if(void 0!==e)if(e instanceof Wt)n=R(e);else if(l=Vt(n={},I(e)))throw TypeError(l);if(l=Vt(d,o,null,n))throw TypeError(l);var r=d.searchParams=new g,a=V(r);a.updateSearchParams(d.query),a.updateURL=function(){d.query=String(r)||null},c||(i.href=Ct.call(i),i.origin=ft.call(i),i.protocol=St.call(i),i.username=vt.call(i),i.password=Kt.call(i),i.host=Yt.call(i),i.hostname=Jt.call(i),i.port=Nt.call(i),i.pathname=Lt.call(i),i.search=Ht.call(i),i.searchParams=Ut.call(i),i.hash=xt.call(i))},Rt=Wt.prototype,Ct=function(){var t=R(this),n=t.scheme,l=t.username,i=t.password,e=t.host,c=t.port,o=t.path,d=t.query,r=t.fragment,a=n+":";return null!==e?(a+="//",D(t)&&(a+=l+(i?":"+i:"")+"@"),a+=z(e),null!==c&&(a+=":"+c)):"file"==n&&(a+="//"),a+=t.cannotBeABaseURL?o[0]:o.length?"/"+o.join("/"):"",null!==d&&(a+="?"+d),null!==r&&(a+="#"+r),a},ft=function(){var t=R(this),n=t.scheme,l=t.port;if("blob"==n)try{return new Wt(n.path[0]).origin}catch(t){return"null"}return"file"!=n&&E(t)?n+"://"+z(t.host)+(null!==l?":"+l:""):"null"},St=function(){return R(this).scheme+":"},vt=function(){return R(this).username},Kt=function(){return R(this).password},Yt=function(){var t=R(this),n=t.host,l=t.port;return null===n?"":null===l?z(n):z(n)+":"+l},Jt=function(){var t=R(this).host;return null===t?"":z(t)},Nt=function(){var t=R(this).port;return null===t?"":String(t)},Lt=function(){var t=R(this),n=t.path;return t.cannotBeABaseURL?n[0]:n.length?"/"+n.join("/"):""},Ht=function(){var t=R(this).query;return t?"?"+t:""},Ut=function(){return R(this).searchParams},xt=function(){var t=R(this).fragment;return t?"#"+t:""},Tt=function(t,n){return{get:t,set:n,configurable:!0,enumerable:!0}};if(c&&r(Rt,{href:Tt(Ct,(function(t){var n=R(this),l=I(t),i=Vt(n,l);if(i)throw TypeError(i);V(n.searchParams).updateSearchParams(n.query)})),origin:Tt(ft),protocol:Tt(St,(function(t){var n=R(this);Vt(n,I(t)+":",nt)})),username:Tt(vt,(function(t){var n=R(this),l=b(I(t));if(!O(n)){n.username="";for(var i=0;i<l.length;i++)n.username+=Q(l[i],P)}})),password:Tt(Kt,(function(t){var n=R(this),l=b(I(t));if(!O(n)){n.password="";for(var i=0;i<l.length;i++)n.password+=Q(l[i],P)}})),host:Tt(Yt,(function(t){var n=R(this);n.cannotBeABaseURL||Vt(n,I(t),Zt)})),hostname:Tt(Jt,(function(t){var n=R(this);n.cannotBeABaseURL||Vt(n,I(t),st)})),port:Tt(Nt,(function(t){var n=R(this);O(n)||(""==(t=I(t))?n.port=null:Vt(n,t,bt))})),pathname:Tt(Lt,(function(t){var n=R(this);n.cannotBeABaseURL||(n.path=[],Vt(n,I(t),pt))})),search:Tt(Ht,(function(t){var n=R(this);""==(t=I(t))?n.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),n.query="",Vt(n,t,Xt)),V(n.searchParams).updateSearchParams(n.query)})),searchParams:Tt(Ut),hash:Tt(xt,(function(t){var n=R(this);""!=(t=I(t))?("#"==t.charAt(0)&&(t=t.slice(1)),n.fragment="",Vt(n,t,gt)):n.fragment=null}))}),a(Rt,"toJSON",(function(){return Ct.call(this)}),{enumerable:!0}),a(Rt,"toString",(function(){return Ct.call(this)}),{enumerable:!0}),X){var kt=X.createObjectURL,Ft=X.revokeObjectURL;kt&&a(Wt,"createObjectURL",(function(t){return kt.apply(X,arguments)})),Ft&&a(Wt,"revokeObjectURL",(function(t){return Ft.apply(X,arguments)}))}p(Wt,"URL"),e({global:!0,forced:!o,sham:!c},{URL:Wt})},function(t,n,l){"use strict";var i=/[^\0-\u007E]/,e=/[.\u3002\uFF0E\uFF61]/g,c="Overflow: input needs wider integers to process",o=Math.floor,d=String.fromCharCode,r=function(t){return t+22+75*(t<26)},a=function(t,n,l){var i=0;for(t=l?o(t/700):t>>1,t+=o(t/n);t>455;i+=36)t=o(t/35);return o(i+36*t/(t+38))},u=function(t){var n,l,i=[],e=(t=function(t){for(var n=[],l=0,i=t.length;l<i;){var e=t.charCodeAt(l++);if(e>=55296&&e<=56319&&l<i){var c=t.charCodeAt(l++);56320==(64512&c)?n.push(((1023&e)<<10)+(1023&c)+65536):(n.push(e),l--)}else n.push(e)}return n}(t)).length,u=128,Z=0,s=72;for(n=0;n<t.length;n++)(l=t[n])<128&&i.push(d(l));var b=i.length,m=b;for(b&&i.push("-");m<e;){var h=2147483647;for(n=0;n<t.length;n++)(l=t[n])>=u&&l<h&&(h=l);var I=m+1;if(h-u>o((2147483647-Z)/I))throw RangeError(c);for(Z+=(h-u)*I,u=h,n=0;n<t.length;n++){if((l=t[n])<u&&++Z>2147483647)throw RangeError(c);if(l==u){for(var p=Z,G=36;;G+=36){var y=G<=s?1:G>=s+26?26:G-s;if(p<y)break;var X=p-y,g=36-y;i.push(d(r(y+X%g))),p=o(X/g)}i.push(d(r(p))),s=a(Z,I,m==b),Z=0,++m}}++Z,++u}return i.join("")};t.exports=function(t){var n,l,c=[],o=t.toLowerCase().replace(e,".").split(".");for(n=0;n<o.length;n++)l=o[n],c.push(i.test(l)?"xn--"+u(l):l);return c.join(".")}},function(t,n,l){"use strict";l(0)({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}})},function(t,n,l){var i=function(t){"use strict";var n=Object.prototype,l=n.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},e=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",o=i.toStringTag||"@@toStringTag";function d(t,n,l){return Object.defineProperty(t,n,{value:l,enumerable:!0,configurable:!0,writable:!0}),t[n]}try{d({},"")}catch(t){d=function(t,n,l){return t[n]=l}}function r(t,n,l,i){var e=n&&n.prototype instanceof Z?n:Z,c=Object.create(e.prototype),o=new W(i||[]);return c._invoke=function(t,n,l){var i="suspendedStart";return function(e,c){if("executing"===i)throw new Error("Generator is already running");if("completed"===i){if("throw"===e)throw c;return C()}for(l.method=e,l.arg=c;;){var o=l.delegate;if(o){var d=X(o,l);if(d){if(d===u)continue;return d}}if("next"===l.method)l.sent=l._sent=l.arg;else if("throw"===l.method){if("suspendedStart"===i)throw i="completed",l.arg;l.dispatchException(l.arg)}else"return"===l.method&&l.abrupt("return",l.arg);i="executing";var r=a(t,n,l);if("normal"===r.type){if(i=l.done?"completed":"suspendedYield",r.arg===u)continue;return{value:r.arg,done:l.done}}"throw"===r.type&&(i="completed",l.method="throw",l.arg=r.arg)}}}(t,l,o),c}function a(t,n,l){try{return{type:"normal",arg:t.call(n,l)}}catch(t){return{type:"throw",arg:t}}}t.wrap=r;var u={};function Z(){}function s(){}function b(){}var m={};m[e]=function(){return this};var h=Object.getPrototypeOf,I=h&&h(h(R([])));I&&I!==n&&l.call(I,e)&&(m=I);var p=b.prototype=Z.prototype=Object.create(m);function G(t){["next","throw","return"].forEach((function(n){d(t,n,(function(t){return this._invoke(n,t)}))}))}function y(t,n){var i;this._invoke=function(e,c){function o(){return new n((function(i,o){!function i(e,c,o,d){var r=a(t[e],t,c);if("throw"!==r.type){var u=r.arg,Z=u.value;return Z&&"object"==typeof Z&&l.call(Z,"__await")?n.resolve(Z.__await).then((function(t){i("next",t,o,d)}),(function(t){i("throw",t,o,d)})):n.resolve(Z).then((function(t){u.value=t,o(u)}),(function(t){return i("throw",t,o,d)}))}d(r.arg)}(e,c,i,o)}))}return i=i?i.then(o,o):o()}}function X(t,n){var l=t.iterator[n.method];if(void 0===l){if(n.delegate=null,"throw"===n.method){if(t.iterator.return&&(n.method="return",n.arg=void 0,X(t,n),"throw"===n.method))return u;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var i=a(l,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,u;var e=i.arg;return e?e.done?(n[t.resultName]=e.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=void 0),n.delegate=null,u):e:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,u)}function g(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function V(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function W(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(g,this),this.reset(!0)}function R(t){if(t){var n=t[e];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,c=function n(){for(;++i<t.length;)if(l.call(t,i))return n.value=t[i],n.done=!1,n;return n.value=void 0,n.done=!0,n};return c.next=c}}return{next:C}}function C(){return{value:void 0,done:!0}}return s.prototype=p.constructor=b,b.constructor=s,s.displayName=d(b,o,"GeneratorFunction"),t.isGeneratorFunction=function(t){var n="function"==typeof t&&t.constructor;return!!n&&(n===s||"GeneratorFunction"===(n.displayName||n.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__=b,d(t,o,"GeneratorFunction")),t.prototype=Object.create(p),t},t.awrap=function(t){return{__await:t}},G(y.prototype),y.prototype[c]=function(){return this},t.AsyncIterator=y,t.async=function(n,l,i,e,c){void 0===c&&(c=Promise);var o=new y(r(n,l,i,e),c);return t.isGeneratorFunction(l)?o:o.next().then((function(t){return t.done?t.value:o.next()}))},G(p),d(p,o,"Generator"),p[e]=function(){return this},p.toString=function(){return"[object Generator]"},t.keys=function(t){var n=[];for(var l in t)n.push(l);return n.reverse(),function l(){for(;n.length;){var i=n.pop();if(i in t)return l.value=i,l.done=!1,l}return l.done=!0,l}},t.values=R,W.prototype={constructor:W,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(V),!t)for(var n in this)"t"===n.charAt(0)&&l.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function i(l,i){return o.type="throw",o.arg=t,n.next=l,i&&(n.method="next",n.arg=void 0),!!i}for(var e=this.tryEntries.length-1;e>=0;--e){var c=this.tryEntries[e],o=c.completion;if("root"===c.tryLoc)return i("end");if(c.tryLoc<=this.prev){var d=l.call(c,"catchLoc"),r=l.call(c,"finallyLoc");if(d&&r){if(this.prev<c.catchLoc)return i(c.catchLoc,!0);if(this.prev<c.finallyLoc)return i(c.finallyLoc)}else if(d){if(this.prev<c.catchLoc)return i(c.catchLoc,!0)}else{if(!r)throw new Error("try statement without catch or finally");if(this.prev<c.finallyLoc)return i(c.finallyLoc)}}}},abrupt:function(t,n){for(var i=this.tryEntries.length-1;i>=0;--i){var e=this.tryEntries[i];if(e.tryLoc<=this.prev&&l.call(e,"finallyLoc")&&this.prev<e.finallyLoc){var c=e;break}}c&&("break"===t||"continue"===t)&&c.tryLoc<=n&&n<=c.finallyLoc&&(c=null);var o=c?c.completion:{};return o.type=t,o.arg=n,c?(this.method="next",this.next=c.finallyLoc,u):this.complete(o)},complete:function(t,n){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&n&&(this.next=n),u},finish:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var l=this.tryEntries[n];if(l.finallyLoc===t)return this.complete(l.completion,l.afterLoc),V(l),u}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var l=this.tryEntries[n];if(l.tryLoc===t){var i=l.completion;if("throw"===i.type){var e=i.arg;V(l)}return e}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,l){return this.delegate={iterator:R(t),resultName:n,nextLoc:l},"next"===this.method&&(this.arg=void 0),u}},t}(t.exports);try{regeneratorRuntime=i}catch(t){Function("r","regeneratorRuntime = r")(i)}},function(t,n,l){var i=l(538);t.exports=function(t){for(var n="",l=0;l<t;l++)n+=String.fromCharCode(i());return n}},function(t,n,l){const i=l(539);t.exports=function(){const t=new Uint8Array(1);return i(t),t[0]}},function(t,n,l){var i=l(540),e=l(541);t.exports=function(t){if(i.crypto&&i.crypto.getRandomValues)return i.crypto.getRandomValues(t);if("object"==typeof i.msCrypto&&"function"==typeof i.msCrypto.getRandomValues)return i.msCrypto.getRandomValues(t);if(e.randomBytes){if(!(t instanceof Uint8Array))throw new TypeError("expected Uint8Array");if(t.length>65536){var n=new Error;throw n.code=22,n.message="Failed to execute 'getRandomValues' on 'Crypto': The ArrayBufferView's byte length ("+t.length+") exceeds the number of bytes of entropy available via this API (65536).",n.name="QuotaExceededError",n}var l=e.randomBytes(t.length);return t.set(l),t}throw new Error("No secure random number generator available.")}},function(t,n,l){(function(n){var l;l="undefined"!=typeof window?window:void 0!==n?n:"undefined"!=typeof self?self:{},t.exports=l}).call(this,l(106))},function(t,n){},function(t,n,l){"use strict";l.r(n),l.d(n,"AUTHORIZATION_CODE",(function(){return i.a})),l.d(n,"AsgardeoAuthClient",(function(){return i.b})),l.d(n,"AsgardeoSPAClient",(function(){return i.c})),l.d(n,"CLIENT_ID_TAG",(function(){return i.d})),l.d(n,"CLIENT_SECRET_TAG",(function(){return i.e})),l.d(n,"Hooks",(function(){return i.f})),l.d(n,"OIDC_SCOPE",(function(){return i.g})),l.d(n,"PKCE_CODE_VERIFIER",(function(){return i.h})),l.d(n,"REFRESH_TOKEN_TIMER",(function(){return i.i})),l.d(n,"ResponseMode",(function(){return i.j})),l.d(n,"SCOPE_TAG",(function(){return i.k})),l.d(n,"SESSION_STATE",(function(){return i.l})),l.d(n,"SIGN_OUT_SUCCESS_PARAM",(function(){return i.m})),l.d(n,"SIGN_OUT_URL",(function(){return i.n})),l.d(n,"SPAUtils",(function(){return i.o})),l.d(n,"Storage",(function(){return i.p})),l.d(n,"Stores",(function(){return i.q})),l.d(n,"TOKEN_TAG",(function(){return i.r})),l.d(n,"USERNAME_TAG",(function(){return i.s})),l.d(n,"WebWorkerClass",(function(){return i.t})),l.d(n,"AuthClient",(function(){return g})),l.d(n,"AuthProvider",(function(){return W})),l.d(n,"useAuthContext",(function(){return R})),l.d(n,"SecureRoute",(function(){return K})),l.d(n,"AuthenticatedComponent",(function(){return Y})),l.d(n,"SecureApp",(function(){return N}));l(196),l(198),l(199),l(200),l(201),l(202),l(203),l(204),l(205),l(206),l(207),l(208),l(209),l(210),l(211),l(212),l(213),l(214),l(215),l(216),l(217),l(218),l(219),l(220),l(221),l(222),l(223),l(224),l(225),l(87),l(226),l(227),l(228),l(229),l(230),l(231),l(232),l(233),l(234),l(235),l(236),l(237),l(238),l(239),l(240),l(242),l(243),l(244),l(245),l(246),l(248),l(249),l(251),l(252),l(253),l(254),l(160),l(255),l(256),l(128),l(257),l(258),l(259),l(260),l(261),l(262),l(263),l(264),l(265),l(266),l(267),l(268),l(269),l(270),l(271),l(272),l(273),l(274),l(275),l(276),l(277),l(278),l(279),l(280),l(281),l(282),l(283),l(284),l(285),l(286),l(287),l(288),l(289),l(290),l(291),l(292),l(293),l(294),l(295),l(296),l(297),l(298),l(299),l(300),l(301),l(302),l(303),l(304),l(305),l(306),l(307),l(308),l(309),l(310),l(312),l(313),l(314),l(315),l(175),l(319),l(320),l(321),l(322),l(323),l(324),l(325),l(326),l(327),l(328),l(329),l(330),l(331),l(332),l(333),l(133),l(334),l(335),l(336),l(337),l(179),l(338),l(339),l(340),l(341),l(180),l(342),l(181),l(343),l(344),l(345),l(346),l(347),l(348),l(349),l(350),l(351),l(352),l(353),l(354),l(355),l(356),l(357),l(358),l(359),l(360),l(361),l(362),l(363),l(364),l(365),l(366),l(367),l(368),l(369),l(370),l(371),l(372),l(373),l(374),l(375),l(376),l(377),l(378),l(379),l(382),l(383),l(384),l(385),l(386),l(387),l(388),l(389),l(390),l(391),l(392),l(393),l(394),l(395),l(396),l(397),l(398),l(399),l(400),l(401),l(402),l(138),l(403),l(404),l(406),l(407),l(408),l(409),l(411),l(412),l(413),l(414),l(415),l(416),l(417),l(418),l(419),l(420),l(421),l(422),l(423),l(424),l(425),l(426),l(427),l(428),l(429),l(430),l(431),l(432),l(433),l(434),l(435),l(436),l(437),l(438),l(439),l(440),l(441),l(442),l(443),l(444),l(445),l(446),l(447),l(448),l(450),l(451),l(452),l(453),l(454),l(455),l(456),l(457),l(458),l(459),l(460),l(461),l(462),l(463),l(464),l(465),l(466),l(467),l(468),l(469),l(470),l(471),l(472),l(473),l(474),l(475),l(476),l(477),l(478),l(479),l(480),l(482),l(483),l(484),l(485),l(486),l(487),l(488),l(489),l(490),l(491),l(492),l(493),l(494),l(495),l(496),l(497),l(498),l(499),l(500),l(501),l(502),l(503),l(504),l(505),l(506),l(507),l(508),l(509),l(510),l(511),l(512),l(513),l(515),l(516),l(517),l(518),l(519),l(520),l(521),l(522),l(523),l(524),l(525),l(526),l(527),l(528),l(529),l(530),l(531),l(532),l(533),l(535),l(194),l(536);var i=l(45),e=l(20),c=l.n(e);function o(t,n){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),l.push.apply(l,i)}return l}function d(t){for(var n=1;n<arguments.length;n++){var l=null!=arguments[n]?arguments[n]:{};n%2?o(Object(l),!0).forEach((function(n){Z(t,n,l[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(l)):o(Object(l)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(l,n))}))}return t}function r(t,n,l,i,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void l(t)}d.done?n(r):Promise.resolve(r).then(i,e)}function a(t){return function(){var n=this,l=arguments;return new Promise((function(i,e){var c=t.apply(n,l);function o(t){r(c,i,e,o,d,"next",t)}function d(t){r(c,i,e,o,d,"throw",t)}o(void 0)}))}}function u(t,n){for(var l=0;l<n.length;l++){var i=n[l];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function Z(t,n,l){return n in t?Object.defineProperty(t,n,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[n]=l,t}var s=function(){function t(){!function(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}(this,t),Z(this,"_authState",t.DEFAULT_STATE),Z(this,"_client",void 0),this._client=i.c.getInstance(),this.getState=this.getState.bind(this),this.init=this.init.bind(this),this.signIn=this.signIn.bind(this),this.signOut=this.signOut.bind(this),this.updateState=this.updateState.bind(this)}var n,l,e,c,o,r,s,b,m,h,I,p,G,y,X,g,V,W,R;return n=t,(l=[{key:"getState",value:function(){return this._authState}},{key:"init",value:function(t){return this._client.initialize(t)}},{key:"signIn",value:(R=a(regeneratorRuntime.mark((function t(n,l,i,e,c,o){var r=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.signIn(i,e,c).then(function(){var t=a(regeneratorRuntime.mark((function t(i){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,r._client.isAuthenticated();case 4:if(!t.sent){t.next=9;break}e={allowedScopes:i.allowedScopes,displayName:i.displayName,email:i.email,isAuthenticated:!0,isLoading:!1,isSigningOut:!1,sub:i.sub,username:i.username},r.updateState(e),n(d(d({},l),e)),o&&o(i);case 9:return t.abrupt("return",i);case 10:case"end":return t.stop()}}),t)})));return function(n){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,n,l,i,e,c){return R.apply(this,arguments)})},{key:"signOut",value:function(t,n,l){return this._client.signOut().then((function(t){return l&&l(t),t})).catch((function(t){return Promise.reject(t)}))}},{key:"updateState",value:function(t){this._authState=d(d({},this._authState),t)}},{key:"getBasicUserInfo",value:(W=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getBasicUserInfo());case 1:case"end":return t.stop()}}),t,this)}))),function(){return W.apply(this,arguments)})},{key:"httpRequest",value:(V=a(regeneratorRuntime.mark((function t(n){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequest(n));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return V.apply(this,arguments)})},{key:"httpRequestAll",value:(g=a(regeneratorRuntime.mark((function t(n){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.httpRequestAll(n));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return g.apply(this,arguments)})},{key:"requestCustomGrant",value:function(t,n,l){var i=this;return this._client.requestCustomGrant(t).then((function(e){if(e)return t.returnsSession&&(i.updateState(d(d(d({},i.getState()),e),{},{isAuthenticated:!0,isLoading:!1})),l(d(d({},e),{},{isAuthenticated:!0,isLoading:!1}))),n&&n(e),e})).catch((function(t){return Promise.reject(t)}))}},{key:"revokeAccessToken",value:(X=a(regeneratorRuntime.mark((function n(l){var i=this;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",this._client.revokeAccessToken().then((function(){return i.updateState(d(d({},t.DEFAULT_STATE),{},{isLoading:!1})),l(t.DEFAULT_STATE),!0})).catch((function(t){return Promise.reject(t)})));case 1:case"end":return n.stop()}}),n,this)}))),function(t){return X.apply(this,arguments)})},{key:"getOIDCServiceEndpoints",value:(y=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getOIDCServiceEndpoints());case 1:case"end":return t.stop()}}),t,this)}))),function(){return y.apply(this,arguments)})},{key:"getHttpClient",value:(G=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getHttpClient());case 1:case"end":return t.stop()}}),t,this)}))),function(){return G.apply(this,arguments)})},{key:"getDecodedIDToken",value:(p=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getDecodedIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getIDToken",value:(I=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getIDToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return I.apply(this,arguments)})},{key:"getAccessToken",value:(h=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.getAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"refreshAccessToken",value:(m=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.refreshAccessToken());case 1:case"end":return t.stop()}}),t,this)}))),function(){return m.apply(this,arguments)})},{key:"isAuthenticated",value:(b=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.isAuthenticated());case 1:case"end":return t.stop()}}),t,this)}))),function(){return b.apply(this,arguments)})},{key:"enableHttpHandler",value:(s=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.enableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return s.apply(this,arguments)})},{key:"disableHttpHandler",value:(r=a(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.disableHttpHandler());case 1:case"end":return t.stop()}}),t,this)}))),function(){return r.apply(this,arguments)})},{key:"updateConfig",value:(o=a(regeneratorRuntime.mark((function t(n){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.updateConfig(n));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"on",value:function(t,n,l){return t===i.f.CustomGrant?this._client.on(t,n,l):this._client.on(t,n)}},{key:"trySignInSilently",value:(c=a(regeneratorRuntime.mark((function t(n,l){var i=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this._client.trySignInSilently().then(function(){var t=a(regeneratorRuntime.mark((function t(e){var c,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(e){t.next=4;break}return i.updateState(d(d({},i.getState()),{},{isLoading:!1})),l(d(d({},n),{},{isLoading:!1})),t.abrupt("return",!1);case 4:return t.next=6,i._client.isAuthenticated();case 6:if(!t.sent){t.next=11;break}o={allowedScopes:(c=e).allowedScopes,displayName:c.displayName,email:c.email,isAuthenticated:!0,isLoading:!1,username:c.username,isSigningOut:!1,sub:c.sub},i.updateState(o),l(d(d({},n),o));case 11:return t.abrupt("return",e);case 12:case"end":return t.stop()}}),t)})));return function(n){return t.apply(this,arguments)}}()).catch((function(t){return Promise.reject(t)})));case 1:case"end":return t.stop()}}),t,this)}))),function(t,n){return c.apply(this,arguments)})}])&&u(n.prototype,l),e&&u(n,e),t}();function b(t,n,l,i,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void l(t)}d.done?n(r):Promise.resolve(r).then(i,e)}function m(t){return function(){var n=this,l=arguments;return new Promise((function(i,e){var c=t.apply(n,l);function o(t){b(c,i,e,o,d,"next",t)}function d(t){b(c,i,e,o,d,"throw",t)}o(void 0)}))}}function h(t,n){var l=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),l.push.apply(l,i)}return l}function I(t){for(var n=1;n<arguments.length;n++){var l=null!=arguments[n]?arguments[n]:{};n%2?h(Object(l),!0).forEach((function(n){p(t,n,l[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(l)):h(Object(l)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(l,n))}))}return t}function p(t,n,l){return n in t?Object.defineProperty(t,n,{value:l,enumerable:!0,configurable:!0,writable:!0}):t[n]=l,t}function G(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){var l=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null==l)return;var i,e,c=[],o=!0,d=!1;try{for(l=l.call(t);!(o=(i=l.next()).done)&&(c.push(i.value),!n||c.length!==n);o=!0);}catch(t){d=!0,e=t}finally{try{o||null==l.return||l.return()}finally{if(d)throw e}}return c}(t,n)||function(t,n){if(!t)return;if("string"==typeof t)return y(t,n);var l=Object.prototype.toString.call(t).slice(8,-1);"Object"===l&&t.constructor&&(l=t.constructor.name);if("Map"===l||"Set"===l)return Array.from(t);if("Arguments"===l||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l))return y(t,n)}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(t,n){(null==n||n>t.length)&&(n=t.length);for(var l=0,i=new Array(n);l<n;l++)i[l]=t[l];return i}Z(s,"DEFAULT_STATE",void 0),s.DEFAULT_STATE={allowedScopes:"",displayName:"",email:"",isAuthenticated:!1,isLoading:!0,username:"",sub:""};var X={disableTrySignInSilently:!1},g=new s,V=Object(e.createContext)(null),W=function(t){var n=G(Object(e.useState)(g.getState()),2),l=n[0],o=n[1],d=G(Object(e.useState)(!1),2),r=d[0],a=d[1],u=t.children,Z=t.config,s=t.fallback,b=t.getAuthParams,h=t.onSignOut,p=Object(e.useMemo)((function(){return I(I({},X),Z)}),[Z]),y=function(){var t=m(regeneratorRuntime.mark((function t(n,i,e,c){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,g.signIn(o,l,n,i,e,c);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(n,l,i,e){return t.apply(this,arguments)}}(),W=function(t,n,l){return t===i.f.CustomGrant?g.on(t,n,l):g.on(t,n)},R=function(){return g.trySignInSilently(l,o)};return Object(e.useEffect)((function(){l.isAuthenticated||m(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.t0=a,t.next=3,g.init(p);case 3:t.t1=t.sent,(0,t.t0)(t.t1);case 5:case"end":return t.stop()}}),t)})))()}),[p]),Object(e.useEffect)((function(){m(regeneratorRuntime.mark((function t(){var n,e,c,d,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=!1,t.next=3,W(i.f.SignOut,(function(){n=!0,h&&h()}));case 3:if(!l.isAuthenticated){t.next=5;break}return t.abrupt("return");case 5:if(p.skipRedirectCallback){t.next=14;break}if(c=null,!b||"function"!=typeof b){t.next=11;break}return t.next=10,b();case 10:c=t.sent;case 11:if(!(i.o.hasAuthSearchParamsInURL()||null!==(e=c)&&void 0!==e&&e.authorizationCode||new URL(location.href).searchParams.get("error"))){t.next=14;break}return t.next=14,y({callOnlyOnRedirect:!0},null===(d=c)||void 0===d?void 0:d.authorizationCode,null===(r=c)||void 0===r?void 0:r.sessionState).then((function(){})).catch((function(t){throw t}));case 14:if(!g.getState().isAuthenticated){t.next=16;break}return t.abrupt("return");case 16:if(!p.disableTrySignInSilently&&!n){t.next=19;break}return o(I(I({},l),{},{isLoading:!1})),t.abrupt("return");case 19:return t.next=21,R().then((function(t){})).catch((function(t){throw t}));case 21:case"end":return t.stop()}}),t)})))()}),[p]),c.a.createElement(V.Provider,{value:{disableHttpHandler:function(){return g.disableHttpHandler()},enableHttpHandler:function(){return g.enableHttpHandler()},getAccessToken:function(){return g.getAccessToken()},getBasicUserInfo:function(){return g.getBasicUserInfo()},getDecodedIDToken:function(){return g.getDecodedIDToken()},getHttpClient:function(){return g.getHttpClient()},getIDToken:function(){return g.getIDToken()},getOIDCServiceEndpoints:function(){return g.getOIDCServiceEndpoints()},httpRequest:function(t){return g.httpRequest(t)},httpRequestAll:function(t){return g.httpRequestAll(t)},isAuthenticated:function(){return g.isAuthenticated()},on:W,refreshAccessToken:function(){return g.refreshAccessToken()},requestCustomGrant:function(t,n){return g.requestCustomGrant(t,n,o)},revokeAccessToken:function(){return g.revokeAccessToken(o)},signIn:y,signOut:function(t){return g.signOut(o,l,t)},state:l,trySignInSilently:R,updateConfig:function(t){return g.updateConfig(t)}}},r?u:null!=s?s:null)},R=function(){return Object(e.useContext)(V)},C=l(195),f=["component","callback"];function S(){return(S=Object.assign||function(t){for(var n=1;n<arguments.length;n++){var l=arguments[n];for(var i in l)Object.prototype.hasOwnProperty.call(l,i)&&(t[i]=l[i])}return t}).apply(this,arguments)}function v(t,n){if(null==t)return{};var l,i,e=function(t,n){if(null==t)return{};var l,i,e={},c=Object.keys(t);for(i=0;i<c.length;i++)l=c[i],n.indexOf(l)>=0||(e[l]=t[l]);return e}(t,n);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);for(i=0;i<c.length;i++)l=c[i],n.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(t,l)&&(e[l]=t[l])}return e}var K=function(t){var n=R().state,l=t.component,i=t.callback,o=v(t,f);return Object(e.useEffect)((function(){n.isAuthenticated||i&&i()}),[n.isAuthenticated]),n.isAuthenticated?c.a.createElement(C.Route,S({},o,{render:function(t){return c.a.createElement(l,t)}})):null},Y=function(t){var n=t.fallback,l=t.children,i=R().state.isAuthenticated;return c.a.createElement(c.a.Fragment,null," ",i?l:null!=n?n:null," ")};function J(t,n,l,i,e,c,o){try{var d=t[c](o),r=d.value}catch(t){return void l(t)}d.done?n(r):Promise.resolve(r).then(i,e)}var N=function(t){var n=t.children,l=t.fallback,i=t.onSignIn,o=t.overrideSignIn,d=R(),r=d.state,a=r.isAuthenticated,u=r.isLoading,Z=d.signIn;return Object(e.useEffect)((function(){var t;a||u||(t=regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!o||"function"!=typeof o){t.next=5;break}return t.next=3,o();case 3:t.next=7;break;case 5:return t.next=7,Z();case 7:case"end":return t.stop()}}),t)})),function(){var n=this,l=arguments;return new Promise((function(i,e){var c=t.apply(n,l);function o(t){J(c,i,e,o,d,"next",t)}function d(t){J(c,i,e,o,d,"throw",t)}o(void 0)}))})(),a&&i&&"function"==typeof i&&i()}),[a,u]),c.a.createElement(Y,{fallback:l},c.a.createElement(e.Suspense,{fallback:l},n))}}])}));
|