/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/reaflow@5.4.1/dist/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
!function(){"use strict";try{if("undefined"!=typeof document){var Y=document.createElement("style");Y.appendChild(document.createTextNode("._port_1r6fw_1 {\n  stroke: #0d0e17;\n  fill: #3e405a;\n  stroke-width: 2px;\n  shape-rendering: geometricPrecision;\n  pointer-events: none;\n}\n\n._clicker_1r6fw_9 {\n  opacity: 0;\n}\n\n._clicker_1r6fw_9:not(._disabled_1r6fw_12) {\n    cursor: crosshair;\n  }\n._text_fhkx6_1 {\n  fill: #d6e7ff;\n  pointer-events: none;\n  font-size: 14px;\n  text-rendering: geometricPrecision;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n          user-select: none;\n}\n._deleteX_nxq8k_1 {\n  stroke: black;\n  pointer-events: none;\n}\n\n._container_nxq8k_6 {\n  will-change: transform, opacity;\n}\n\n._drop_nxq8k_10 {\n  cursor: pointer;\n  opacity: 0;\n}\n\n._rect_nxq8k_15 {\n  shape-rendering: geometricPrecision;\n  fill: #ff005d;\n  border-radius: 2px;\n  pointer-events: none;\n}\n._plus_1qsm8_1 {\n  stroke: black;\n  pointer-events: none;\n}\n\n._container_1qsm8_6 {\n  will-change: transform, opacity;\n}\n\n._drop_1qsm8_10 {\n  cursor: pointer;\n  opacity: 0;\n}\n\n._rect_1qsm8_15 {\n  shape-rendering: geometricPrecision;\n  fill: #46FECB;\n  border-radius: 2px;\n  pointer-events: none;\n}\n._edge_v5z62_1._disabled_v5z62_2 {\n    pointer-events: none;\n  }\n  ._edge_v5z62_1:not(._selectionDisabled_v5z62_6):not(._disabled_v5z62_2):hover ._path_v5z62_8 {\n        stroke: #a5a9e2;\n      }\n  ._edge_v5z62_1:not(._selectionDisabled_v5z62_6):not(._disabled_v5z62_2):hover ._path_v5z62_8._active_v5z62_11 {\n          stroke: #46fecb;\n        }\n  ._edge_v5z62_1:not(._selectionDisabled_v5z62_6):not(._disabled_v5z62_2):hover ._path_v5z62_8._deleteHovered_v5z62_15 {\n          stroke: #ff005d;\n          stroke-dasharray: 4 2;\n        }\n  ._edge_v5z62_1:not(._selectionDisabled_v5z62_6):not(._disabled_v5z62_2) ._clicker_v5z62_22 {\n      cursor: pointer;\n    }\n\n._path_v5z62_8 {\n  fill: transparent;\n  stroke: #485a74;\n  pointer-events: none;\n  shape-rendering: geometricPrecision;\n  stroke-width: 1pt;\n}\n\n._clicker_v5z62_22 {\n  fill: none;\n  stroke: transparent;\n  stroke-width: 15px;\n}\n\n._clicker_v5z62_22:focus {\n    outline: none;\n  }\n._rect_1b6xi_1 {\n  fill: #2b2c3e;\n  transition: stroke 100ms ease-in-out;\n  stroke: #475872;\n  shape-rendering: geometricPrecision;\n  stroke-width: 1pt;\n}\n\n  ._rect_1b6xi_1:not(._selectionDisabled_1b6xi_8):not(._disabled_1b6xi_8) {\n    cursor: pointer;\n  }\n\n  ._rect_1b6xi_1:not(._selectionDisabled_1b6xi_8):not(._disabled_1b6xi_8):hover {\n      stroke: #a5a9e2;\n    }\n\n  ._rect_1b6xi_1:not(._selectionDisabled_1b6xi_8):not(._disabled_1b6xi_8)._dragging_1b6xi_15 {\n      stroke: #a5a9e2;\n    }\n\n  ._rect_1b6xi_1:not(._selectionDisabled_1b6xi_8):not(._disabled_1b6xi_8)._active_1b6xi_19 {\n      stroke: #46fecb;\n    }\n\n  ._rect_1b6xi_1:not(._selectionDisabled_1b6xi_8):not(._disabled_1b6xi_8)._unlinkable_1b6xi_23 {\n      stroke: #ff005d;\n    }\n\n  ._rect_1b6xi_1:not(._selectionDisabled_1b6xi_8):not(._disabled_1b6xi_8)._deleteHovered_1b6xi_27 {\n      stroke: #ff005d !important;\n      stroke-dasharray: 4 2;\n    }\n\n  ._rect_1b6xi_1:focus {\n    outline: none;\n  }\n\n  ._rect_1b6xi_1._children_1b6xi_37 {\n    fill: transparent;\n    stroke: #475872;\n  }\n._arrow_4r5xg_1 {\n  pointer-events: none;\n  shape-rendering: geometricPrecision;\n  fill: #485a74;\n}\n._container_1ryvh_1._pannable_1ryvh_2 {\n    overflow: auto;\n  }\n  ._container_1ryvh_1:focus {\n    outline: none;\n  }\n\n.dragging {\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n._dragNode_1ryvh_20 {\n  pointer-events: none;\n}\n\n._draggable_1ryvh_24 {\n  scrollbar-width: none; /* Firefox */\n  -ms-overflow-style: none; /* Internet Explorer 10+ */\n  cursor: grab;\n}\n\n._draggable_1ryvh_24::-webkit-scrollbar {\n    display: none; /* WebKit */\n  }\n\n._draggable_1ryvh_24:active {\n    cursor: grabbing;\n  }\n._icon_6o39n_1 {\n  pointer-events: none;\n}")),document.head.appendChild(Y)}}catch(Y){console.error("vite-plugin-css-injected-by-js",Y)}}();import{jsx,jsxs,Fragment as Fragment$1}from"react/jsx-runtime";import{useRef,useState,useEffect,useCallback,useLayoutEffect,createContext,useContext,forwardRef,Fragment,useMemo,useImperativeHandle}from"react";import{CloneElement,useId}from"reablocks";import{useGesture,useDrag}from"react-use-gesture";import{motion,useAnimation}from"motion/react";import useDimensions from"react-cool-dimensions";import isEqual from"react-fast-compare";import PCancelable from"p-cancelable";import calculateSize from"calculate-size";import ellipsize from"ellipsize";import{Point2D,Matrix2D}from"kld-affine";import classNames from"classnames";import{line,curveBundle}from"d3-shape";import{useHotkeys}from"reakeys";import Undoo from"undoo";import{IntersectionQuery}from"kld-intersections";var CanvasPosition=(Y=>(Y.CENTER="center",Y.TOP="top",Y.LEFT="left",Y.RIGHT="right",Y.BOTTOM="bottom",Y))(CanvasPosition||{});const MAX_CHAR_COUNT=35,MIN_NODE_WIDTH=50,DEFAULT_NODE_HEIGHT=50,NODE_PADDING=30,ICON_PADDING=10;function measureText(Y){let Z={height:0,width:0};if(Y){Z=("function"==typeof calculateSize?calculateSize:calculateSize.default)(Y,{font:"Arial, sans-serif",fontSize:"14px"})}return Z}function parsePadding(Y){let Z=50,G=50,K=50,m=50;return Array.isArray(Y)?2===Y.length?(Z=Y[0],K=Y[0],m=Y[1],G=Y[1]):4===Y.length&&(Z=Y[0],G=Y[1],K=Y[2],m=Y[3]):void 0!==Y&&(Z=Y,G=Y,K=Y,m=Y),{top:Z,right:G,bottom:K,left:m}}function formatText(Y){const Z=Y.text?ellipsize(Y.text,35):Y.text,G=measureText(Z),K=parsePadding(Y.nodePadding);let m=Y.width;void 0===m&&(Z&&Y.icon?m=G.width+Y.icon.width+30+10:(Z?m=G.width+30:Y.icon&&(m=Y.icon.width+30),m=Math.max(m,50)));let i=Y.height;return void 0===i&&(Z&&Y.icon?i=G.height+Y.icon.height:Z?i=G.height+30:Y.icon&&(i=Y.icon.height+30),i=Math.max(i,50)),{text:Z,originalText:Y.text,width:m,height:i,nodePadding:K,labelHeight:G.height,labelWidth:G.width}}const findNode=(Y,Z)=>{for(const G of Y){if(G.id===Z)return G;if(G.children){const Y=findNode(G.children,Z);if(Y)return Y}}},getChildCount=Y=>{var Z;return(null==(Z=Y.children)?void 0:Z.reduce(((Y,Z)=>Z.children?Y+1+getChildCount(Z):Y+1),0))??0},calculateZoom=({nodes:Y,viewportWidth:Z,viewportHeight:G,maxViewportCoverage:K=.9,minViewportCoverage:m=.2})=>{const i=Math.max(0,Y.map(getChildCount).reduce(((Y,Z)=>Y+Z),0)),h=getNodesBoundingBox(Y),l=h.x1-h.x0,p=h.y1-h.y0,L=(.2+.1*i)*Z/Math.max(...Y.map((Y=>Y.width))),S=(.2+.1*i)*G/Math.max(...Y.map((Y=>Y.height))),k=Math.min(L,S),W=Math.max(Math.min(K,k),m),d=W*Z/l,y=W*G/p;return Math.min(d,y,k)},calculateScrollPosition=({nodes:Y,viewportWidth:Z,viewportHeight:G,canvasWidth:K,canvasHeight:m,chartWidth:i,chartHeight:h,zoom:l})=>{const{x0:p,y0:L,x1:S,y1:k}=getNodesBoundingBox(Y);return[(K-i*l)/2+p*l+(S-p)*l/2-Z/2,(m-h*l)/2+L*l+(k-L)*l/2-G/2]},getNodesBoundingBox=Y=>Y.reduce(((Y,Z)=>({x0:Math.min(Y.x0,Z.x),y0:Math.min(Y.y0,Z.y),x1:Math.max(Y.x1,Z.x+Z.width),y1:Math.max(Y.y1,Z.y+Z.height)})),{x0:Y[0].x,y0:Y[0].y,x1:Y[0].x+Y[0].width,y1:Y[0].y+Y[0].height}),defaultLayoutOptions={"elk.nodeLabels.placement":"INSIDE V_CENTER H_RIGHT","elk.algorithm":"org.eclipse.elk.layered","elk.direction":"DOWN","layered.crossingMinimization.forceNodeModelOrder":"true","org.eclipse.elk.layered.layering.strategy":"INTERACTIVE","org.eclipse.elk.edgeRouting":"ORTHOGONAL","elk.layered.unnecessaryBendpoints":"true","elk.layered.spacing.edgeNodeBetweenLayers":"50","org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment":"BALANCED","org.eclipse.elk.layered.cycleBreaking.strategy":"DEPTH_FIRST","org.eclipse.elk.insideSelfLoops.activate":"true",separateConnectedComponents:"false","spacing.componentComponent":"70",spacing:"75","spacing.nodeNodeBetweenLayers":"70"};function mapNode(Y,Z,G){const{text:K,width:m,height:i,labelHeight:h,labelWidth:l,nodePadding:p,originalText:L}=formatText(G),S=Y.filter((Y=>Y.parent===G.id)).map((G=>mapNode(Y,Z,G))),k=Z.filter((Y=>Y.parent===G.id)).map((Y=>mapEdge({edge:Y}))),W={"elk.padding":`[left=${p.left}, top=${p.top}, right=${p.right}, bottom=${p.bottom}]`,portConstraints:"FIXED_ORDER",...G.layoutOptions||{}};return{id:G.id,height:i,width:m,children:S,edges:k,ports:G.ports?G.ports.map((Y=>({id:Y.id,properties:{...Y,"port.side":Y.side,"port.alignment":Y.alignment||"CENTER"}}))):[],layoutOptions:W,properties:{...G},labels:K?[{width:l,height:-h/2,text:K,originalText:L}]:[]}}function mapEdge({edge:{data:Y,...Z},direction:G}){const K=measureText(Z.text),m=Y?{data:Y}:{};let i=K.width/2;return"LEFT"!==G&&"RIGHT"!==G||(i=K.width),{id:Z.id,source:Z.from,target:Z.to,properties:{...Z},...m,sourcePort:Z.fromPort,targetPort:Z.toPort,labels:Z.text?[{width:i,height:-K.height/2,text:Z.text,layoutOptions:{"elk.edgeLabels.placement":"INSIDE V_CENTER H_CENTER"}}]:[]}}function mapInput({nodes:Y,edges:Z,direction:G}){const K=[],m=[];for(const G of Y)if(!G.parent){const m=mapNode(Y,Z,G);null!==m&&K.push(m)}for(const Y of Z)if(!Y.parent){const Z=mapEdge({edge:Y,direction:G});null!==Z&&m.push(Z)}return{children:K,edges:m}}function postProcessNode(Y){var Z;for(const G of Y){const Y=(null==(Z=G.labels)?void 0:Z.length)>0;if(Y&&G.properties.icon){const[Y]=G.labels;Y.x=G.properties.icon.width+25,G.properties.icon.x=25,G.properties.icon.y=G.height/2}else if(Y){const[Y]=G.labels;Y.x=(G.width-Y.width)/2}else G.properties.icon&&(G.properties.icon.x=G.width/2,G.properties.icon.y=G.height/2);G.children&&postProcessNode(G.children)}return Y}const isBrowser="undefined"!=typeof window&&"undefined"!=typeof Worker;let elkInstance=null;const getElk=async()=>{if(elkInstance)return elkInstance;if(isBrowser){const Y=await import("elkjs/lib/elk-api");return elkInstance=new Y.default({algorithms:["layered"],workerFactory:()=>{const Y=new URL("data:application/javascript;base64,J3VzZSBzdHJpY3QnOwoKLy8gLS0tLS0tLS0tLS0tLS0gICAgRkFLRSBFTEVNRU5UUyBHV1QgQVNTVU1FUyBFWElTVCAgIC0tLS0tLS0tLS0tLS0tIAp2YXIgJHduZDsKaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKQogICAgJHduZCA9IHdpbmRvdwplbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykKICAgICR3bmQgPSBnbG9iYWwgLy8gbm9kZWpzCmVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykKICAgICR3bmQgPSBzZWxmIC8vIHdlYiB3b3JrZXIKCnZhciAkbW9kdWxlTmFtZSwKICAgICRtb2R1bGVCYXNlOwoKLy8gLS0tLS0tLS0tLS0tLS0gICAgV09SS0FST1VORCBTVFJJQ1QgTU9ERSwgU0VFICMxMjcgICAgLS0tLS0tLS0tLS0tLS0gCnZhciBnLCBpLCBvOwoKLy8gLS0tLS0tLS0tLS0tLS0gICAgR0VORVJBVEVEIENPREUgICAgLS0tLS0tLS0tLS0tLS0gCmZ1bmN0aW9uIG5iKCl7fQpmdW5jdGlvbiB4Yigpe30KZnVuY3Rpb24gRmQoKXt9CmZ1bmN0aW9uIGZoKCl7fQpmdW5jdGlvbiBmeCgpe30KZnVuY3Rpb24gbngoKXt9CmZ1bmN0aW9uIG94KCl7fQpmdW5jdGlvbiBocSgpe30KZnVuY3Rpb24gSnEoKXt9CmZ1bmN0aW9uIGVyKCl7fQpmdW5jdGlvbiBlQSgpe30KZnVuY3Rpb24gbEEoKXt9CmZ1bmN0aW9uIFVBKCl7fQpmdW5jdGlvbiBYQSgpe30KZnVuY3Rpb24gWEIoKXt9CmZ1bmN0aW9uIGJCKCl7fQpmdW5jdGlvbiBTcygpe30KZnVuY3Rpb24gVncoKXt9CmZ1bmN0aW9uIFZ6KCl7fQpmdW5jdGlvbiBFeSgpe30KZnVuY3Rpb24gYmRiKCl7fQpmdW5jdGlvbiBmZGIoKXt9CmZ1bmN0aW9uIFpjYigpe30KZnVuY3Rpb24gX21iKCl7fQpmdW5jdGlvbiBfbmIoKXt9CmZ1bmN0aW9uIEFuYigpe30KZnVuY3Rpb24gSW5iKCl7fQpmdW5jdGlvbiBUbmIoKXt9CmZ1bmN0aW9uIGNxYigpe30KZnVuY3Rpb24gbHFiKCl7fQpmdW5jdGlvbiBxcWIoKXt9CmZ1bmN0aW9uIEVxYigpe30KZnVuY3Rpb24gYXNiKCl7fQpmdW5jdGlvbiBndWIoKXt9CmZ1bmN0aW9uIGx1Yigpe30KZnVuY3Rpb24gbnViKCl7fQpmdW5jdGlvbiBPd2IoKXt9CmZ1bmN0aW9uIHV5Yigpe30KZnVuY3Rpb24gQnpiKCl7fQpmdW5jdGlvbiBKemIoKXt9CmZ1bmN0aW9uIEpDYigpe30KZnVuY3Rpb24gRUNiKCl7fQpmdW5jdGlvbiBIQ2IoKXt9CmZ1bmN0aW9uIExDYigpe30KZnVuY3Rpb24gZkFiKCl7fQpmdW5jdGlvbiB0QWIoKXt9CmZ1bmN0aW9uIHZBYigpe30KZnVuY3Rpb24geEFiKCl7fQpmdW5jdGlvbiB6QWIoKXt9CmZ1bmN0aW9uIEJBYigpe30KZnVuY3Rpb24gRkFiKCl7fQpmdW5jdGlvbiBmRGIoKXt9CmZ1bmN0aW9uIEVEYigpe30KZnVuY3Rpb24gSURiKCl7fQpmdW5jdGlvbiB3RWIoKXt9CmZ1bmN0aW9uIHpFYigpe30KZnVuY3Rpb24gWEViKCl7fQpmdW5jdGlvbiBuRmIoKXt9CmZ1bmN0aW9uIHNGYigpe30KZnVuY3Rpb24gd0ZiKCl7fQpmdW5jdGlvbiBCRmIoKXt9CmZ1bmN0aW9uIEJJYigpe30KZnVuY3Rpb24gdkliKCl7fQpmdW5jdGlvbiB4SWIoKXt9CmZ1bmN0aW9uIHpJYigpe30KZnVuY3Rpb24gUUliKCl7fQpmdW5jdGlvbiBVSWIoKXt9CmZ1bmN0aW9uIE1HYigpe30KZnVuY3Rpb24gVkpiKCl7fQpmdW5jdGlvbiBYSmIoKXt9CmZ1bmN0aW9uIFpKYigpe30KZnVuY3Rpb24gWktiKCl7fQpmdW5jdGlvbiBoS2IoKXt9CmZ1bmN0aW9uIFhLYigpe30KZnVuY3Rpb24gbExiKCl7fQpmdW5jdGlvbiBwTGIoKXt9CmZ1bmN0aW9uIFFMYigpe30KZnVuY3Rpb24gbE1iKCl7fQpmdW5jdGlvbiBxTWIoKXt9CmZ1bmN0aW9uIHVNYigpe30KZnVuY3Rpb24gQ01iKCl7fQpmdW5jdGlvbiBFTWIoKXt9CmZ1bmN0aW9uICRNYigpe30KZnVuY3Rpb24gTU9iKCl7fQpmdW5jdGlvbiByUGIoKXt9CmZ1bmN0aW9uIHdQYigpe30KZnVuY3Rpb24gclFiKCl7fQpmdW5jdGlvbiBQUWIoKXt9CmZ1bmN0aW9uIFBSYigpe30KZnVuY3Rpb24gZlJiKCl7fQpmdW5jdGlvbiBpUmIoKXt9CmZ1bmN0aW9uIGxSYigpe30KZnVuY3Rpb24gdlJiKCl7fQpmdW5jdGlvbiBmU2IoKXt9CmZ1bmN0aW9uIGtTYigpe30KZnVuY3Rpb24gYVRiKCl7fQpmdW5jdGlvbiBoVGIoKXt9CmZ1bmN0aW9uIGxUYigpe30KZnVuY3Rpb24gcFRiKCl7fQpmdW5jdGlvbiB0VGIoKXt9CmZ1bmN0aW9uIHhUYigpe30KZnVuY3Rpb24gdFViKCl7fQpmdW5jdGlvbiBVVWIoKXt9CmZ1bmN0aW9uIGRWYigpe30KZnVuY3Rpb24gaFZiKCl7fQpmdW5jdGlvbiBsVmIoKXt9CmZ1bmN0aW9uIHZWYigpe30KZnVuY3Rpb24gZlhiKCl7fQpmdW5jdGlvbiBqWGIoKXt9CmZ1bmN0aW9uIEpZYigpe30KZnVuY3Rpb24gRFpiKCl7fQpmdW5jdGlvbiBJWmIoKXt9CmZ1bmN0aW9uIE1aYigpe30KZnVuY3Rpb24gUVpiKCl7fQpmdW5jdGlvbiBVWmIoKXt9CmZ1bmN0aW9uIFlaYigpe30KZnVuY3Rpb24gQSRiKCl7fQpmdW5jdGlvbiBDJGIoKXt9CmZ1bmN0aW9uIEkkYigpe30KZnVuY3Rpb24gTSRiKCl7fQpmdW5jdGlvbiBRJGIoKXt9CmZ1bmN0aW9uIHRfYigpe30KZnVuY3Rpb24gdl9iKCl7fQpmdW5jdGlvbiB4X2IoKXt9CmZ1bmN0aW9uIENfYigpe30KZnVuY3Rpb24gSF9iKCl7fQpmdW5jdGlvbiBLX2IoKXt9CmZ1bmN0aW9uIFNfYigpe30KZnVuY3Rpb24gV19iKCl7fQpmdW5jdGlvbiBaX2IoKXt9CmZ1bmN0aW9uIF9fYigpe30KZnVuY3Rpb24gYjBiKCl7fQpmdW5jdGlvbiBuMGIoKXt9CmZ1bmN0aW9uIHIwYigpe30KZnVuY3Rpb24gdjBiKCl7fQpmdW5jdGlvbiB6MGIoKXt9CmZ1bmN0aW9uIE8wYigpe30KZnVuY3Rpb24gVDBiKCl7fQpmdW5jdGlvbiBWMGIoKXt9CmZ1bmN0aW9uIFgwYigpe30KZnVuY3Rpb24gWjBiKCl7fQpmdW5jdGlvbiBfMGIoKXt9CmZ1bmN0aW9uIG0xYigpe30KZnVuY3Rpb24gbzFiKCl7fQpmdW5jdGlvbiBxMWIoKXt9CmZ1bmN0aW9uIHMxYigpe30KZnVuY3Rpb24gdTFiKCl7fQpmdW5jdGlvbiB5MWIoKXt9CmZ1bmN0aW9uIGoyYigpe30KZnVuY3Rpb24gcjJiKCl7fQpmdW5jdGlvbiB1MmIoKXt9CmZ1bmN0aW9uIEEyYigpe30KZnVuY3Rpb24gTzJiKCl7fQpmdW5jdGlvbiBSMmIoKXt9CmZ1bmN0aW9uIFcyYigpe30KZnVuY3Rpb24gYTNiKCl7fQpmdW5jdGlvbiBtM2IoKXt9CmZ1bmN0aW9uIG4zYigpe30KZnVuY3Rpb24gcTNiKCl7fQpmdW5jdGlvbiB5M2IoKXt9CmZ1bmN0aW9uIEIzYigpe30KZnVuY3Rpb24gRDNiKCl7fQpmdW5jdGlvbiBGM2IoKXt9CmZ1bmN0aW9uIEozYigpe30KZnVuY3Rpb24gTTNiKCl7fQpmdW5jdGlvbiBQM2IoKXt9CmZ1bmN0aW9uIFUzYigpe30KZnVuY3Rpb24gJDNiKCl7fQpmdW5jdGlvbiAkNWIoKXt9CmZ1bmN0aW9uIEY1Yigpe30KZnVuY3Rpb24gTDViKCl7fQpmdW5jdGlvbiBONWIoKXt9CmZ1bmN0aW9uIFA1Yigpe30KZnVuY3Rpb24gZTRiKCl7fQpmdW5jdGlvbiBmNmIoKXt9CmZ1bmN0aW9uIGg2Yigpe30KZnVuY3Rpb24gTDZiKCl7fQpmdW5jdGlvbiBONmIoKXt9CmZ1bmN0aW9uIFQ2Yigpe30KZnVuY3Rpb24gWTZiKCl7fQpmdW5jdGlvbiBrN2IoKXt9CmZ1bmN0aW9uIHM3Yigpe30KZnVuY3Rpb24gUTdiKCl7fQpmdW5jdGlvbiBUN2IoKXt9CmZ1bmN0aW9uIFg3Yigpe30KZnVuY3Rpb24gcjhiKCl7fQpmdW5jdGlvbiB3OGIoKXt9CmZ1bmN0aW9uIEE4Yigpe30KZnVuY3Rpb24gTzhiKCl7fQpmdW5jdGlvbiBXOGIoKXt9CmZ1bmN0aW9uIFo4Yigpe30KZnVuY3Rpb24gZDliKCl7fQpmdW5jdGlvbiBnOWIoKXt9CmZ1bmN0aW9uIGw5Yigpe30KZnVuY3Rpb24gcTliKCl7fQpmdW5jdGlvbiBzOWIoKXt9CmZ1bmN0aW9uIHU5Yigpe30KZnVuY3Rpb24gdzliKCl7fQpmdW5jdGlvbiB5OWIoKXt9CmZ1bmN0aW9uIFI5Yigpe30KZnVuY3Rpb24gVDliKCl7fQpmdW5jdGlvbiBWOWIoKXt9CmZ1bmN0aW9uIFo5Yigpe30KZnVuY3Rpb24gYmFjKCl7fQpmdW5jdGlvbiBoYWMoKXt9CmZ1bmN0aW9uIGthYygpe30KZnVuY3Rpb24gcWFjKCl7fQpmdW5jdGlvbiBzYWMoKXt9CmZ1bmN0aW9uIHVhYygpe30KZnVuY3Rpb24gd2FjKCl7fQpmdW5jdGlvbiBBYWMoKXt9CmZ1bmN0aW9uIEZhYygpe30KZnVuY3Rpb24gSWFjKCl7fQpmdW5jdGlvbiBLYWMoKXt9CmZ1bmN0aW9uIE1hYygpe30KZnVuY3Rpb24gT2FjKCl7fQpmdW5jdGlvbiBRYWMoKXt9CmZ1bmN0aW9uIFVhYygpe30KZnVuY3Rpb24gX2FjKCl7fQpmdW5jdGlvbiBiYmMoKXt9CmZ1bmN0aW9uIGRiYygpe30KZnVuY3Rpb24gZmJjKCl7fQpmdW5jdGlvbiBtYmMoKXt9CmZ1bmN0aW9uIG9iYygpe30KZnVuY3Rpb24gcWJjKCl7fQpmdW5jdGlvbiBzYmMoKXt9CmZ1bmN0aW9uIHhiYygpe30KZnVuY3Rpb24gQmJjKCl7fQpmdW5jdGlvbiBEYmMoKXt9CmZ1bmN0aW9uIEZiYygpe30KZnVuY3Rpb24gSmJjKCl7fQpmdW5jdGlvbiBNYmMoKXt9CmZ1bmN0aW9uIFNiYygpe30KZnVuY3Rpb24gU2NjKCl7fQpmdW5jdGlvbiBlY2MoKXt9CmZ1bmN0aW9uIG1jYygpe30KZnVuY3Rpb24gcWNjKCl7fQpmdW5jdGlvbiBzY2MoKXt9CmZ1bmN0aW9uIHljYygpe30KZnVuY3Rpb24gQ2NjKCl7fQpmdW5jdGlvbiBHY2MoKXt9CmZ1bmN0aW9uIEljYygpe30KZnVuY3Rpb24gT2NjKCl7fQpmdW5jdGlvbiBVY2MoKXt9CmZ1bmN0aW9uICRjYygpe30KZnVuY3Rpb24gY2RjKCl7fQpmdW5jdGlvbiBlZGMoKXt9CmZ1bmN0aW9uIHVkYygpe30KZnVuY3Rpb24gX2RjKCl7fQpmdW5jdGlvbiBiZWMoKXt9CmZ1bmN0aW9uIGRlYygpe30KZnVuY3Rpb24gZmVjKCl7fQpmdW5jdGlvbiBoZWMoKXt9CmZ1bmN0aW9uIGplYygpe30KZnVuY3Rpb24gbGVjKCl7fQpmdW5jdGlvbiB0ZWMoKXt9CmZ1bmN0aW9uIHZlYygpe30KZnVuY3Rpb24gQmVjKCl7fQpmdW5jdGlvbiBEZWMoKXt9CmZ1bmN0aW9uIEZlYygpe30KZnVuY3Rpb24gSGVjKCl7fQpmdW5jdGlvbiBMZWMoKXt9CmZ1bmN0aW9uIE5lYygpe30KZnVuY3Rpb24gVmVjKCl7fQpmdW5jdGlvbiBYZWMoKXt9CmZ1bmN0aW9uIFplYygpe30KZnVuY3Rpb24gZ2ZjKCl7fQpmdW5jdGlvbiBnaWMoKXt9CmZ1bmN0aW9uIGNpYygpe30KZnVuY3Rpb24gZWljKCl7fQpmdW5jdGlvbiBpaWMoKXt9CmZ1bmN0aW9uIGtpYygpe30KZnVuY3Rpb24gbWljKCl7fQpmdW5jdGlvbiBKaWMoKXt9CmZ1bmN0aW9uIExpYygpe30KZnVuY3Rpb24gTmljKCl7fQpmdW5jdGlvbiBQaWMoKXt9CmZ1bmN0aW9uIFBnYygpe30KZnVuY3Rpb24gVGdjKCl7fQpmdW5jdGlvbiBUaWMoKXt9CmZ1bmN0aW9uIFhpYygpe30KZnVuY3Rpb24gX2ljKCl7fQpmdW5jdGlvbiBPaGMoKXt9CmZ1bmN0aW9uIFFoYygpe30KZnVuY3Rpb24gU2hjKCl7fQpmdW5jdGlvbiBVaGMoKXt9CmZ1bmN0aW9uICRoYygpe30KZnVuY3Rpb24gampjKCl7fQpmdW5jdGlvbiBuamMoKXt9CmZ1bmN0aW9uIENqYygpe30KZnVuY3Rpb24gSWpjKCl7fQpmdW5jdGlvbiBaamMoKXt9CmZ1bmN0aW9uIGJrYygpe30KZnVuY3Rpb24gZGtjKCl7fQpmdW5jdGlvbiBwa2MoKXt9CmZ1bmN0aW9uIHprYygpe30KZnVuY3Rpb24gTGtjKCl7fQpmdW5jdGlvbiBOa2MoKXt9CmZ1bmN0aW9uIFBrYygpe30KZnVuY3Rpb24gUGxjKCl7fQpmdW5jdGlvbiBobGMoKXt9CmZ1bmN0aW9uIGpsYygpe30KZnVuY3Rpb24gcmxjKCl7fQpmdW5jdGlvbiBObGMoKXt9CmZ1bmN0aW9uIFJsYygpe30KZnVuY3Rpb24gV2xjKCl7fQpmdW5jdGlvbiBZbGMoKXt9CmZ1bmN0aW9uIGttYygpe30KZnVuY3Rpb24gbW1jKCl7fQpmdW5jdGlvbiBvbWMoKXt9CmZ1bmN0aW9uIHVtYygpe30KZnVuY3Rpb24geG1jKCl7fQpmdW5jdGlvbiBDbWMoKXt9CmZ1bmN0aW9uIEZ3Yygpe30KZnVuY3Rpb24gd0FjKCl7fQpmdW5jdGlvbiBkQmMoKXt9CmZ1bmN0aW9uIGpCYygpe30KZnVuY3Rpb24gcUNjKCl7fQpmdW5jdGlvbiBTRGMoKXt9CmZ1bmN0aW9uICRFYygpe30KZnVuY3Rpb24gaUZjKCl7fQpmdW5jdGlvbiBrRmMoKXt9CmZ1bmN0aW9uIG9GYygpe30KZnVuY3Rpb24gaEhjKCl7fQpmdW5jdGlvbiBMSWMoKXt9CmZ1bmN0aW9uIFBJYygpe30KZnVuY3Rpb24gWkljKCl7fQpmdW5jdGlvbiBfSWMoKXt9CmZ1bmN0aW9uIGJKYygpe30KZnVuY3Rpb24gZkpjKCl7fQpmdW5jdGlvbiBsSmMoKXt9CmZ1bmN0aW9uIHBKYygpe30KZnVuY3Rpb24gckpjKCl7fQpmdW5jdGlvbiB0SmMoKXt9CmZ1bmN0aW9uIHZKYygpe30KZnVuY3Rpb24gekpjKCl7fQpmdW5jdGlvbiBESmMoKXt9CmZ1bmN0aW9uIElKYygpe30KZnVuY3Rpb24gS0pjKCl7fQpmdW5jdGlvbiBRSmMoKXt9CmZ1bmN0aW9uIFNKYygpe30KZnVuY3Rpb24gV0pjKCl7fQpmdW5jdGlvbiBZSmMoKXt9CmZ1bmN0aW9uIGFLYygpe30KZnVuY3Rpb24gY0tjKCl7fQpmdW5jdGlvbiBlS2MoKXt9CmZ1bmN0aW9uIGdLYygpe30KZnVuY3Rpb24gVktjKCl7fQpmdW5jdGlvbiBrTGMoKXt9CmZ1bmN0aW9uIEtMYygpe30KZnVuY3Rpb24gS01jKCl7fQpmdW5jdGlvbiBzTWMoKXt9CmZ1bmN0aW9uIEFNYygpe30KZnVuY3Rpb24gQ01jKCl7fQpmdW5jdGlvbiBFTWMoKXt9CmZ1bmN0aW9uIEdNYygpe30KZnVuY3Rpb24gSU1jKCl7fQpmdW5jdGlvbiBGTmMoKXt9CmZ1bmN0aW9uIExOYygpe30KZnVuY3Rpb24gTk5jKCl7fQpmdW5jdGlvbiBQTmMoKXt9CmZ1bmN0aW9uICROYygpe30KZnVuY3Rpb24gYU9jKCl7fQpmdW5jdGlvbiBtUGMoKXt9CmZ1bmN0aW9uIG9QYygpe30KZnVuY3Rpb24gQ1BjKCl7fQpmdW5jdGlvbiBMUGMoKXt9CmZ1bmN0aW9uIE5QYygpe30KZnVuY3Rpb24gTlFjKCl7fQpmdW5jdGlvbiB4UWMoKXt9CmZ1bmN0aW9uIEFRYygpe30KZnVuY3Rpb24gRFFjKCl7fQpmdW5jdGlvbiBUUWMoKXt9CmZ1bmN0aW9uIFhRYygpe30KZnVuY3Rpb24gdFJjKCl7fQpmdW5jdGlvbiBOUmMoKXt9CmZ1bmN0aW9uIFJSYygpe30KZnVuY3Rpb24gVlJjKCl7fQpmdW5jdGlvbiBiU2MoKXt9CmZ1bmN0aW9uIHBTYygpe30KZnVuY3Rpb24gdVNjKCl7fQpmdW5jdGlvbiBDU2MoKXt9CmZ1bmN0aW9uIEdTYygpe30KZnVuY3Rpb24gSVNjKCl7fQpmdW5jdGlvbiBLU2MoKXt9CmZ1bmN0aW9uIE1TYygpe30KZnVuY3Rpb24gZlRjKCl7fQpmdW5jdGlvbiBqVGMoKXt9CmZ1bmN0aW9uIGxUYygpe30KZnVuY3Rpb24gc1RjKCl7fQpmdW5jdGlvbiB3VGMoKXt9CmZ1bmN0aW9uIHlUYygpe30KZnVuY3Rpb24gRFRjKCl7fQpmdW5jdGlvbiBKVGMoKXt9CmZ1bmN0aW9uIG9WYygpe30KZnVuY3Rpb24gb1hjKCl7fQpmdW5jdGlvbiBhWGMoKXt9CmZ1bmN0aW9uIGVYYygpe30KZnVuY3Rpb24gZ1hjKCl7fQpmdW5jdGlvbiBrWGMoKXt9CmZ1bmN0aW9uIHFYYygpe30KZnVuY3Rpb24gdVhjKCl7fQpmdW5jdGlvbiB5WGMoKXt9CmZ1bmN0aW9uIEFYYygpe30KZnVuY3Rpb24gR1hjKCl7fQpmdW5jdGlvbiBLWGMoKXt9CmZ1bmN0aW9uIE9YYygpe30KZnVuY3Rpb24gVVhjKCl7fQpmdW5jdGlvbiBZWGMoKXt9CmZ1bmN0aW9uIGRXYygpe30KZnVuY3Rpb24gZldjKCl7fQpmdW5jdGlvbiBoV2MoKXt9CmZ1bmN0aW9uIG5XYygpe30KZnVuY3Rpb24gcldjKCl7fQpmdW5jdGlvbiBhWWMoKXt9CmZ1bmN0aW9uIGVZYygpe30KZnVuY3Rpb24gb1ljKCl7fQpmdW5jdGlvbiBzWWMoKXt9CmZ1bmN0aW9uIF9ZYygpe30KZnVuY3Rpb24gY1pjKCl7fQpmdW5jdGlvbiBEWmMoKXt9CmZ1bmN0aW9uIElaYygpe30KZnVuY3Rpb24gTFpjKCl7fQpmdW5jdGlvbiBOWmMoKXt9CmZ1bmN0aW9uIFBaYygpe30KZnVuY3Rpb24gVFpjKCl7fQpmdW5jdGlvbiBYWmMoKXt9CmZ1bmN0aW9uIGZfYygpe30KZnVuY3Rpb24gR19jKCl7fQpmdW5jdGlvbiBKX2MoKXt9CmZ1bmN0aW9uIE1fYygpe30KZnVuY3Rpb24gUV9jKCl7fQpmdW5jdGlvbiBZX2MoKXt9CmZ1bmN0aW9uIHMwYygpe30KZnVuY3Rpb24gdjBjKCl7fQpmdW5jdGlvbiBMMGMoKXt9CmZ1bmN0aW9uIE8wYygpe30KZnVuY3Rpb24gUjBjKCl7fQpmdW5jdGlvbiBXMGMoKXt9CmZ1bmN0aW9uIG8yYygpe30KZnVuY3Rpb24gdzJjKCl7fQpmdW5jdGlvbiB5MmMoKXt9CmZ1bmN0aW9uIEQyYygpe30KZnVuY3Rpb24gRzJjKCl7fQpmdW5jdGlvbiBKMmMoKXt9CmZ1bmN0aW9uIGUzYygpe30KZnVuY3Rpb24gazNjKCl7fQpmdW5jdGlvbiBEM2MoKXt9CmZ1bmN0aW9uIEgzYygpe30KZnVuY3Rpb24gTTNjKCl7fQpmdW5jdGlvbiBlNWMoKXt9CmZ1bmN0aW9uIEg2Yygpe30KZnVuY3Rpb24gbDdjKCl7fQpmdW5jdGlvbiBLN2MoKXt9CmZ1bmN0aW9uIEs4Yygpe30KZnVuY3Rpb24gZzhjKCl7fQpmdW5jdGlvbiBvOGMoKXt9CmZ1bmN0aW9uIEY4Yygpe30KZnVuY3Rpb24gSThjKCl7fQpmdW5jdGlvbiBXOGMoKXt9CmZ1bmN0aW9uIG05Yygpe30KZnVuY3Rpb24gcTljKCl7fQpmdW5jdGlvbiB4OWMoKXt9CmZ1bmN0aW9uIFY5Yygpe30KZnVuY3Rpb24gWDljKCl7fQpmdW5jdGlvbiBYYWQoKXt9CmZ1bmN0aW9uIHBhZCgpe30KZnVuY3Rpb24gc2FkKCl7fQpmdW5jdGlvbiBFYWQoKXt9CmZ1bmN0aW9uIFdhZCgpe30KZnVuY3Rpb24gWmFkKCl7fQpmdW5jdGlvbiBfYWQoKXt9CmZ1bmN0aW9uIGJiZCgpe30KZnVuY3Rpb24gZGJkKCl7fQpmdW5jdGlvbiBmYmQoKXt9CmZ1bmN0aW9uIGhiZCgpe30KZnVuY3Rpb24gamJkKCl7fQpmdW5jdGlvbiBsYmQoKXt9CmZ1bmN0aW9uIG5iZCgpe30KZnVuY3Rpb24gcGJkKCl7fQpmdW5jdGlvbiByYmQoKXt9CmZ1bmN0aW9uIHRiZCgpe30KZnVuY3Rpb24gdmJkKCl7fQpmdW5jdGlvbiB4YmQoKXt9CmZ1bmN0aW9uIHpiZCgpe30KZnVuY3Rpb24gQmJkKCl7fQpmdW5jdGlvbiBEYmQoKXt9CmZ1bmN0aW9uIEZiZCgpe30KZnVuY3Rpb24gSGJkKCl7fQpmdW5jdGlvbiBmY2QoKXt9CmZ1bmN0aW9uIHllZCgpe30KZnVuY3Rpb24geW1kKCl7fQpmdW5jdGlvbiB1bWQoKXt9CmZ1bmN0aW9uIENtZCgpe30KZnVuY3Rpb24gR21kKCl7fQpmdW5jdGlvbiBLbWQoKXt9CmZ1bmN0aW9uIEtvZCgpe30KZnVuY3Rpb24gaG9kKCl7fQpmdW5jdGlvbiAkaGQoKXt9CmZ1bmN0aW9uIGlrZCgpe30KZnVuY3Rpb24gVGxkKCl7fQpmdW5jdGlvbiBUbmQoKXt9CmZ1bmN0aW9uIHRuZCgpe30KZnVuY3Rpb24gTG5kKCl7fQpmdW5jdGlvbiBObmQoKXt9CmZ1bmN0aW9uIFluZCgpe30KZnVuY3Rpb24gQ3BkKCl7fQpmdW5jdGlvbiBDdGQoKXt9CmZ1bmN0aW9uIFZ0ZCgpe30KZnVuY3Rpb24gQnNkKCl7fQpmdW5jdGlvbiB0dWQoKXt9CmZ1bmN0aW9uIG12ZCgpe30KZnVuY3Rpb24gTHdkKCl7fQpmdW5jdGlvbiBEeGQoKXt9CmZ1bmN0aW9uIGR5ZCgpe30KZnVuY3Rpb24gdkRkKCl7fQpmdW5jdGlvbiAkRGQoKXt9CmZ1bmN0aW9uIGdFZCgpe30KZnVuY3Rpb24gRUdkKCl7fQpmdW5jdGlvbiBFTGQoKXt9CmZ1bmN0aW9uIFhMZCgpe30KZnVuY3Rpb24gQUtkKCl7fQpmdW5jdGlvbiBoT2QoKXt9CmZ1bmN0aW9uIHVPZCgpe30KZnVuY3Rpb24gRlBkKCl7fQpmdW5jdGlvbiBvUWQoKXt9CmZ1bmN0aW9uIEtRZCgpe30KZnVuY3Rpb24gcFdkKCl7fQpmdW5jdGlvbiBzV2QoKXt9CmZ1bmN0aW9uIHZXZCgpe30KZnVuY3Rpb24gRFdkKCl7fQpmdW5jdGlvbiBRV2QoKXt9CmZ1bmN0aW9uIFRXZCgpe30KZnVuY3Rpb24gQVlkKCl7fQpmdW5jdGlvbiBlMWQoKXt9CmZ1bmN0aW9uIFExZCgpe30KZnVuY3Rpb24gdzNkKCl7fQpmdW5jdGlvbiB6M2QoKXt9CmZ1bmN0aW9uIEMzZCgpe30KZnVuY3Rpb24gRjNkKCl7fQpmdW5jdGlvbiBJM2QoKXt9CmZ1bmN0aW9uIEwzZCgpe30KZnVuY3Rpb24gTzNkKCl7fQpmdW5jdGlvbiBSM2QoKXt9CmZ1bmN0aW9uIFUzZCgpe30KZnVuY3Rpb24gcTVkKCl7fQpmdW5jdGlvbiB1NWQoKXt9CmZ1bmN0aW9uIGY2ZCgpe30KZnVuY3Rpb24geDZkKCl7fQpmdW5jdGlvbiB6NmQoKXt9CmZ1bmN0aW9uIEM2ZCgpe30KZnVuY3Rpb24gRjZkKCl7fQpmdW5jdGlvbiBJNmQoKXt9CmZ1bmN0aW9uIEw2ZCgpe30KZnVuY3Rpb24gTzZkKCl7fQpmdW5jdGlvbiBSNmQoKXt9CmZ1bmN0aW9uIFU2ZCgpe30KZnVuY3Rpb24gWDZkKCl7fQpmdW5jdGlvbiAkNmQoKXt9CmZ1bmN0aW9uIGI3ZCgpe30KZnVuY3Rpb24gZTdkKCl7fQpmdW5jdGlvbiBoN2QoKXt9CmZ1bmN0aW9uIGs3ZCgpe30KZnVuY3Rpb24gbjdkKCl7fQpmdW5jdGlvbiBxN2QoKXt9CmZ1bmN0aW9uIHQ3ZCgpe30KZnVuY3Rpb24gdzdkKCl7fQpmdW5jdGlvbiB6N2QoKXt9CmZ1bmN0aW9uIEM3ZCgpe30KZnVuY3Rpb24gRjdkKCl7fQpmdW5jdGlvbiBJN2QoKXt9CmZ1bmN0aW9uIEw3ZCgpe30KZnVuY3Rpb24gTzdkKCl7fQpmdW5jdGlvbiBSN2QoKXt9CmZ1bmN0aW9uIFU3ZCgpe30KZnVuY3Rpb24gWDdkKCl7fQpmdW5jdGlvbiAkN2QoKXt9CmZ1bmN0aW9uIGI4ZCgpe30KZnVuY3Rpb24gZThkKCl7fQpmdW5jdGlvbiBoOGQoKXt9CmZ1bmN0aW9uIGs4ZCgpe30KZnVuY3Rpb24gbjhkKCl7fQpmdW5jdGlvbiBxOGQoKXt9CmZ1bmN0aW9uIHQ4ZCgpe30KZnVuY3Rpb24gdzhkKCl7fQpmdW5jdGlvbiB6OGQoKXt9CmZ1bmN0aW9uIEM4ZCgpe30KZnVuY3Rpb24gRjhkKCl7fQpmdW5jdGlvbiBJOGQoKXt9CmZ1bmN0aW9uIEw4ZCgpe30KZnVuY3Rpb24gTzhkKCl7fQpmdW5jdGlvbiBSOGQoKXt9CmZ1bmN0aW9uIGFlZSgpe30KZnVuY3Rpb24gTWZlKCl7fQpmdW5jdGlvbiBNaWUoKXt9CmZ1bmN0aW9uIFppZSgpe30KZnVuY3Rpb24gX2llKCl7fQpmdW5jdGlvbiBUaGUoKXt9CmZ1bmN0aW9uIGNqZSgpe30KZnVuY3Rpb24gZmplKCl7fQpmdW5jdGlvbiBpamUoKXt9CmZ1bmN0aW9uIGxqZSgpe30KZnVuY3Rpb24gb2plKCl7fQpmdW5jdGlvbiByamUoKXt9CmZ1bmN0aW9uIHVqZSgpe30KZnVuY3Rpb24geGplKCl7fQpmdW5jdGlvbiBBamUoKXt9CmZ1bmN0aW9uIERqZSgpe30KZnVuY3Rpb24gR2plKCl7fQpmdW5jdGlvbiBKamUoKXt9CmZ1bmN0aW9uIE1qZSgpe30KZnVuY3Rpb24gUGplKCl7fQpmdW5jdGlvbiBTamUoKXt9CmZ1bmN0aW9uIFZqZSgpe30KZnVuY3Rpb24gWWplKCl7fQpmdW5jdGlvbiBfamUoKXt9CmZ1bmN0aW9uIGNrZSgpe30KZnVuY3Rpb24gZmtlKCl7fQpmdW5jdGlvbiBpa2UoKXt9CmZ1bmN0aW9uIGxrZSgpe30KZnVuY3Rpb24gb2tlKCl7fQpmdW5jdGlvbiBya2UoKXt9CmZ1bmN0aW9uIHVrZSgpe30KZnVuY3Rpb24geGtlKCl7fQpmdW5jdGlvbiBBa2UoKXt9CmZ1bmN0aW9uIERrZSgpe30KZnVuY3Rpb24gR2tlKCl7fQpmdW5jdGlvbiBKa2UoKXt9CmZ1bmN0aW9uIE1rZSgpe30KZnVuY3Rpb24gUGtlKCl7fQpmdW5jdGlvbiBTa2UoKXt9CmZ1bmN0aW9uIFZrZSgpe30KZnVuY3Rpb24gWWtlKCl7fQpmdW5jdGlvbiBfa2UoKXt9CmZ1bmN0aW9uIGNsZSgpe30KZnVuY3Rpb24gZmxlKCl7fQpmdW5jdGlvbiBpbGUoKXt9CmZ1bmN0aW9uIGxsZSgpe30KZnVuY3Rpb24gb2xlKCl7fQpmdW5jdGlvbiBybGUoKXt9CmZ1bmN0aW9uIHVsZSgpe30KZnVuY3Rpb24geGxlKCl7fQpmdW5jdGlvbiBBbGUoKXt9CmZ1bmN0aW9uIERsZSgpe30KZnVuY3Rpb24gR2xlKCl7fQpmdW5jdGlvbiBKbGUoKXt9CmZ1bmN0aW9uIE1sZSgpe30KZnVuY3Rpb24gUGxlKCl7fQpmdW5jdGlvbiBtbWUoKXt9CmZ1bmN0aW9uIE5wZSgpe30KZnVuY3Rpb24gWXBlKCl7fQpmdW5jdGlvbiBLWGIoYSl7fQpmdW5jdGlvbiBjX2QoYSl7fQpmdW5jdGlvbiB4bCgpe3diKCl9CmZ1bmN0aW9uIFpOYigpe1lOYigpfQpmdW5jdGlvbiBaJGIoKXtUJGIoKX0KZnVuY3Rpb24gS09iKCl7SU9iKCl9CmZ1bmN0aW9uIF9PYigpeyRPYigpfQpmdW5jdGlvbiBwUGIoKXtuUGIoKX0KZnVuY3Rpb24gTDBiKCl7RTBiKCl9CmZ1bmN0aW9uIEw5Yigpe0c5YigpfQpmdW5jdGlvbiBrM2IoKXtlM2IoKX0KZnVuY3Rpb24gWTViKCl7VTViKCl9CmZ1bmN0aW9uIEM2Yigpe2s2YigpfQpmdW5jdGlvbiBDN2IoKXt2N2IoKX0KZnVuY3Rpb24gQWhjKCl7amhjKCl9CmZ1bmN0aW9uIG1BYygpe2pBYygpfQpmdW5jdGlvbiBmQWMoKXtjQWMoKX0KZnVuY3Rpb24gc0FjKCl7cUFjKCl9CmZ1bmN0aW9uIF9BYygpe1ZBYygpfQpmdW5jdGlvbiBYamMoKXtMamMoKX0KZnVuY3Rpb24gUHRjKCl7T3RjKCl9CmZ1bmN0aW9uIER3Yygpe0J3YygpfQpmdW5jdGlvbiBRemMoKXtOemMoKX0KZnVuY3Rpb24gc0JjKCl7b0JjKCl9CmZ1bmN0aW9uIEFCYygpe3dCYygpfQpmdW5jdGlvbiBMQmMoKXtGQmMoKX0KZnVuY3Rpb24gJEJjKCl7VUJjKCl9CmZ1bmN0aW9uIFlWYygpe1VWYygpfQpmdW5jdGlvbiBtVmMoKXtrVmMoKX0KZnVuY3Rpb24gUVZjKCl7S1ZjKCl9CmZ1bmN0aW9uIGRFYygpe19EYygpfQpmdW5jdGlvbiBkX2MoKXtiX2MoKX0KZnVuY3Rpb24gSUZjKCl7R0ZjKCl9CmZ1bmN0aW9uIEgkYygpe0ckYygpfQpmdW5jdGlvbiBHSGMoKXtESGMoKX0KZnVuY3Rpb24gV0hjKCl7TUhjKCl9CmZ1bmN0aW9uIGxLYygpe2pLYygpfQpmdW5jdGlvbiBaTGMoKXtXTGMoKX0KZnVuY3Rpb24gRlVjKCl7RVVjKCl9CmZ1bmN0aW9uIE1XYygpe0VXYygpfQpmdW5jdGlvbiBBV2MoKXt1V2MoKX0KZnVuY3Rpb24gSjFjKCl7STFjKCl9CmZ1bmN0aW9uIG0yYygpe2syYygpfQpmdW5jdGlvbiBGNmMoKXtENmMoKX0KZnVuY3Rpb24gXzZjKCl7JDZjKCl9CmZ1bmN0aW9uIGo3Yygpe2g3YygpfQpmdW5jdGlvbiBROWMoKXtQOWMoKX0KZnVuY3Rpb24gd2VkKCl7dWVkKCl9CmZ1bmN0aW9uIE1nZCgpe0xnZCgpfQpmdW5jdGlvbiBZaGQoKXtXaGQoKX0KZnVuY3Rpb24gZ2tkKCl7ZWtkKCl9CmZ1bmN0aW9uIGF2ZCgpe1V1ZCgpfQpmdW5jdGlvbiBhVWQoKXtHVGQoKX0KZnVuY3Rpb24gQVBkKCl7bVBkKCl9CmZ1bmN0aW9uIEJmZSgpe01wZSgpfQpmdW5jdGlvbiBNd2IoYSl7dERiKGEpfQpmdW5jdGlvbiBZYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gY2MoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGJmKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBoZihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gaGgoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHJoKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB6aChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gVmgoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEJpKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBJaShhKXt0aGlzLmE9YX0KZnVuY3Rpb24gaWooYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIG9qKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBKaihhKXt0aGlzLmE9YX0KZnVuY3Rpb24geWooYSl7dGhpcy5jPWF9CmZ1bmN0aW9uIEdrKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBPayhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gVG4oYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGlwKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBIcChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gZXEoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEFxKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBScShhKXt0aGlzLmE9YX0KZnVuY3Rpb24gS3IoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFdyKGEpe3RoaXMuYj1hfQpmdW5jdGlvbiBydShhKXt0aGlzLmE9YX0KZnVuY3Rpb24gcncoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGN3KGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBodyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gRXcoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEp3KGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBPdyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gYXgoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGJ4KGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBoeChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gaHkoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEd5KGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBGQihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gUEIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIF9CKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBuQyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gRUIoKXt0aGlzLmE9W119CmZ1bmN0aW9uIEdDYihhLGIpe2EuYT1ifQpmdW5jdGlvbiBPWGIoYSxiKXthLmE9Yn0KZnVuY3Rpb24gUFhiKGEsYil7YS5iPWJ9CmZ1bmN0aW9uIFFYYihhLGIpe2EuYz1ifQpmdW5jdGlvbiBqTmIoYSxiKXthLmM9Yn0KZnVuY3Rpb24ga05iKGEsYil7YS5kPWJ9CmZ1bmN0aW9uIFJYYihhLGIpe2EuZD1ifQpmdW5jdGlvbiBfR2IoYSxiKXthLmo9Yn0KZnVuY3Rpb24gclliKGEsYil7YS5rPWJ9CmZ1bmN0aW9uICRZYihhLGIpe2EuYz1ifQpmdW5jdGlvbiBxZ2MoYSxiKXthLmM9Yn0KZnVuY3Rpb24gcGdjKGEsYil7YS5hPWJ9CmZ1bmN0aW9uIEdEYyhhLGIpe2EuYT1ifQpmdW5jdGlvbiBIRGMoYSxiKXthLmY9Yn0KZnVuY3Rpb24gUU1jKGEsYil7YS5hPWJ9CmZ1bmN0aW9uIFJNYyhhLGIpe2EuYj1ifQpmdW5jdGlvbiBTTWMoYSxiKXthLmQ9Yn0KZnVuY3Rpb24gVE1jKGEsYil7YS5pPWJ9CmZ1bmN0aW9uIFVNYyhhLGIpe2Eubz1ifQpmdW5jdGlvbiBWTWMoYSxiKXthLnI9Yn0KZnVuY3Rpb24gQk9jKGEsYil7YS5hPWJ9CmZ1bmN0aW9uIENPYyhhLGIpe2EuYj1ifQpmdW5jdGlvbiB0WmMoYSxiKXthLmU9Yn0KZnVuY3Rpb24gdVpjKGEsYil7YS5mPWJ9CmZ1bmN0aW9uIHZaYyhhLGIpe2EuZz1ifQpmdW5jdGlvbiBtNGMoYSxiKXthLmU9Yn0KZnVuY3Rpb24gbjRjKGEsYil7YS5mPWJ9CmZ1bmN0aW9uIEE0YyhhLGIpe2EuZj1ifQpmdW5jdGlvbiB2b2QoYSxiKXthLmE9Yn0KZnVuY3Rpb24gd29kKGEsYil7YS5iPWJ9CmZ1bmN0aW9uIFdSZChhLGIpe2Eubj1ifQpmdW5jdGlvbiB0YWUoYSxiKXthLmE9Yn0KZnVuY3Rpb24gQ2FlKGEsYil7YS5hPWJ9CmZ1bmN0aW9uIFlhZShhLGIpe2EuYT1ifQpmdW5jdGlvbiB1YWUoYSxiKXthLmM9Yn0KZnVuY3Rpb24gRGFlKGEsYil7YS5jPWJ9CmZ1bmN0aW9uIFphZShhLGIpe2EuYz1ifQpmdW5jdGlvbiBFYWUoYSxiKXthLmQ9Yn0KZnVuY3Rpb24gJGFlKGEsYil7YS5kPWJ9CmZ1bmN0aW9uIEZhZShhLGIpe2EuZT1ifQpmdW5jdGlvbiBfYWUoYSxiKXthLmU9Yn0KZnVuY3Rpb24gR2FlKGEsYil7YS5nPWJ9CmZ1bmN0aW9uIGFiZShhLGIpe2EuZj1ifQpmdW5jdGlvbiBiYmUoYSxiKXthLmo9Yn0KZnVuY3Rpb24gUmhlKGEsYil7YS5hPWJ9CmZ1bmN0aW9uICRoZShhLGIpe2EuYT1ifQpmdW5jdGlvbiBTaGUoYSxiKXthLmI9Yn0KZnVuY3Rpb24gRmZjKGEpe2EuYj1hLmF9CmZ1bmN0aW9uIEpnKGEpe2EuYz1hLmQuZH0KZnVuY3Rpb24gSmRiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBpZGIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFVkYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gVWpiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBkamIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIE9qYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gT2ZiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBxZmIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEtlYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gWWViKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBaamIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHVqYihhKXt0aGlzLmQ9YX0KZnVuY3Rpb24gY2tiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBMa2IoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFNrYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gU3BiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBOcGIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGRvYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gb29iKGEpe3RoaXMuYj1hfQpmdW5jdGlvbiBGb2IoYSl7dGhpcy5iPWF9CmZ1bmN0aW9uIEdrYihhKXt0aGlzLmI9YX0KZnVuY3Rpb24gcm1iKGEpe3RoaXMuYz1hfQpmdW5jdGlvbiBrcGIoYSl7dGhpcy5jPWF9CmZ1bmN0aW9uIGt0YihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gdXFiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBZcWIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFRyYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gUXZiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBTdmIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFV2YihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gV3ZiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBudmIoYSl7dGhpcy5jPWF9CmZ1bmN0aW9uIG56YihhKXt0aGlzLmE9YX0KZnVuY3Rpb24geHpiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB6emIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIER6YihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gYUJiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBjQmIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGVCYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gdEJiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBaQmIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIF9CYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gZENiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBOQ2IoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFJDYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gUkRiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBHRGIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIE1EYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gVkViKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBTR2IoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uICRHYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gdktiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBFTGIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFNMYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gUVBiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBjUWIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGVRYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gcFFiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB0UWIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFdWYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gQldiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBOV2IoYSl7dGhpcy5lPWF9CmZ1bmN0aW9uIGRaYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gZ1piKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBsWmIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIG9aYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gRSRiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBHJGIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEskYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gTyRiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBhX2IoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGNfYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gZV9iKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBnX2IoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHgwYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gQjBiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB3MWIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFgxYihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gYjRiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBoNGIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGs0YihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gbjRiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBQNmIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFI2YihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gRDhiKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBHOGIoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGk5YihhKXt0aGlzLmE9YX0KZnVuY3Rpb24gaWNjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB1Y2MoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEVjYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24geWFjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBTYWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFdhYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gVWJjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiByZGMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHdkYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gbmVjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBwZWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHJlYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24geGVjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB6ZWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEplYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gUGVjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBSZWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIF9lYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gV2hjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBZaGMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFJpYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gc2tjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB1a2MoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHFtYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gc21jKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBNQWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFFBYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gUEJjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBNQ2MoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGlEYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gRURjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBnRGMoYSl7dGhpcy5jPWF9CmZ1bmN0aW9uIERsYyhhKXt0aGlzLmI9YX0KZnVuY3Rpb24gaEVjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBMRWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIE5FYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gUEVjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBCRmMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEtHYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gT0djKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBTR2MoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFdHYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gJEdjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBhSGMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGRIYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gbUhjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBkSmMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGpKYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gbkpjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBCSmMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEZKYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gTUpjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBVSmMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uICRKYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gcExjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBBTmMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEZRYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gSFFjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBMUWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFJRYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gZ1JjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBqUmMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEhSYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gWlJjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBfUmMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGRTYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gZlNjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBoU2MoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGxTYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gbFdjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBqV2MoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFNYYyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gZzVjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBpNWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGs1YyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gbTVjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBzNWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIE43YyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gWjdjKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBfN2MoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIG85YyhhKXt0aGlzLmE9YX0KZnVuY3Rpb24gczljKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBaOWMoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFpsZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gSW1kKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBNbWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIENuZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gRG9kKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBhcGQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHZwZChhKXt0aGlzLmY9YX0KZnVuY3Rpb24gRnpkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBYemQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFp6ZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gX3pkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBiQWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGRBZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gZkFkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBoQWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGpBZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gbEFkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB0QWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHhBZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gekFkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBCQWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIERBZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gRkFkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBIQWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFBBZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gVkFkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBYQWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFpBZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gX0FkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBiQmQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIGxCZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gbkJkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBwQmQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHJCZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gVkJkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBLQmQoYSl7dGhpcy5iPWF9CmZ1bmN0aW9uIG5DZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gdUtkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBDS2QoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIElLZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gT0tkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBlTGQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFJWZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24geldkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiB4WWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIHhaZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gRzBkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBiNWQoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIEs1ZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gUzVkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBqWGQoYSl7dGhpcy5iPWF9CmZ1bmN0aW9uIGUyZChhKXt0aGlzLmM9YX0KZnVuY3Rpb24gTzJkKGEpe3RoaXMuZT1hfQpmdW5jdGlvbiBsOWQoYSl7dGhpcy5kPWF9CmZ1bmN0aW9uIHM5ZChhKXt0aGlzLmE9YX0KZnVuY3Rpb24gSDlkKGEpe3RoaXMuYT1hfQpmdW5jdGlvbiBQZWUoYSl7dGhpcy5hPWF9CmZ1bmN0aW9uIFdvZShhKXt0aGlzLmE9YX0KZnVuY3Rpb24gcG9lKGEpe3RoaXMuZT1hfQpmdW5jdGlvbiBGbmQoKXt0aGlzLmE9MH0KZnVuY3Rpb24gVWxiKCl7R2xiKHRoaXMpfQpmdW5jdGlvbiBJcmIoKXtUaWIodGhpcyl9CmZ1bmN0aW9uIGJGYigpe2FGYih0aGlzKX0KZnVuY3Rpb24gU1hiKCl7S1hiKHRoaXMpfQpmdW5jdGlvbiBOWmQoKXt0aGlzLmM9eVpkfQpmdW5jdGlvbiB6bGMoYSxiKXthLmIrPWJ9CmZ1bmN0aW9uIG5mZShhLGIpe2IuV2IoYSl9CmZ1bmN0aW9uIGZDKGEpe3JldHVybiBhLmF9CmZ1bmN0aW9uIHRDKGEpe3JldHVybiBhLmF9CmZ1bmN0aW9uIE1DKGEpe3JldHVybiBhLmF9CmZ1bmN0aW9uIExCKGEpe3JldHVybiBhLmF9CmZ1bmN0aW9uIFRCKGEpe3JldHVybiBhLmF9CmZ1bmN0aW9uIHNjYihhKXtyZXR1cm4gYS5lfQpmdW5jdGlvbiAkQigpe3JldHVybiBudWxsfQpmdW5jdGlvbiBFQygpe3JldHVybiBudWxsfQpmdW5jdGlvbiBjZGIoKXtqRWQoKTtsRWQoKX0KZnVuY3Rpb24gQkpiKGEpe2EuYi5NZihhLmUpfQpmdW5jdGlvbiBLVGIoYSl7YS5iPW5ldyBQaX0KZnVuY3Rpb24gTTFiKGEsYil7YS5iPWItYS5ifQpmdW5jdGlvbiBKMWIoYSxiKXthLmE9Yi1hLmF9CmZ1bmN0aW9uIHNpYyhhLGIpe2FaYihiLGEpfQpmdW5jdGlvbiBUX2MoYSxiKXtiLmdkKGEuYSl9CmZ1bmN0aW9uIFlDYihhLGIpe2EucHVzaChiKX0KZnVuY3Rpb24gYURiKGEsYil7YS5zb3J0KGIpfQpmdW5jdGlvbiBwcChhLGIsYyl7YS5XZChjLGIpfQpmdW5jdGlvbiBPcyhhLGIpe2EuZT1iO2IuYj1hfQpmdW5jdGlvbiBmbShhKXtZbCgpO3RoaXMuYT1hfQpmdW5jdGlvbiB0cShhKXtZbCgpO3RoaXMuYT1hfQpmdW5jdGlvbiBDcShhKXtZbCgpO3RoaXMuYT1hfQpmdW5jdGlvbiBUcShhKXtxbSgpO3RoaXMuYT1hfQpmdW5jdGlvbiAkeihhKXtaeigpO1l6LmplKGEpfQpmdW5jdGlvbiBweigpe2V6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIHBkYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIGxkYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIHRkYigpe2V6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIHllYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIFNlYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIFZlYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIEVmYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIGFoYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIHlxYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIEhxYigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIHF1Yigpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIFg4Yygpe3B6LmNhbGwodGhpcyl9CmZ1bmN0aW9uIGtaZCgpe3RoaXMuYT10aGlzfQpmdW5jdGlvbiBGWWQoKXt0aGlzLkJifD0yNTZ9CmZ1bmN0aW9uIEZQYigpe3RoaXMuYj1uZXcgQXR9CmZ1bmN0aW9uIG5BKCl7bkE9WmNiO25ldyBJcmJ9CmZ1bmN0aW9uIG5kYigpe2xkYi5jYWxsKHRoaXMpfQpmdW5jdGlvbiBUd2IoYSxiKXtJbGIoYS5hLGIpfQpmdW5jdGlvbiB1S2IoYSxiKXtXSGIoYS5jLGIpfQpmdW5jdGlvbiB0TGMoYSxiKXtOcmIoYS5iLGIpfQpmdW5jdGlvbiByS2QoYSxiKXtySmQoYS5hLGIpfQpmdW5jdGlvbiBzS2QoYSxiKXtzSmQoYS5hLGIpfQpmdW5jdGlvbiB6VWQoYSxiKXtXcGQoYS5lLGIpfQpmdW5jdGlvbiBYZmUoYSl7d2JlKGEuYyxhLmIpfQpmdW5jdGlvbiBzaihhLGIpe2Eua2MoKS5OYihiKX0KZnVuY3Rpb24gX0NiKGEsYil7YS5sZW5ndGg9Yn0KZnVuY3Rpb24gUXJiKCl7dGhpcy5hPW5ldyBJcmJ9CmZ1bmN0aW9uIE96Yigpe3RoaXMuYT1uZXcgSXJifQpmdW5jdGlvbiBsemIoKXt0aGlzLmE9bmV3IFR4Yn0KZnVuY3Rpb24gV3diKCl7dGhpcy5hPW5ldyBVbGJ9CmZ1bmN0aW9uIE5GYigpe3RoaXMuYT1uZXcgVWxifQpmdW5jdGlvbiBTRmIoKXt0aGlzLmE9bmV3IFVsYn0KZnVuY3Rpb24gSUZiKCl7dGhpcy5hPW5ldyBCRmJ9CmZ1bmN0aW9uIHJHYigpe3RoaXMuYT1uZXcgUEZifQpmdW5jdGlvbiBpRWIoKXt0aGlzLmE9bmV3IGVFYn0KZnVuY3Rpb24gcEViKCl7dGhpcy5hPW5ldyBqRWJ9CmZ1bmN0aW9uIFNNYigpe3RoaXMuYT1uZXcgQ01ifQpmdW5jdGlvbiB2UWIoKXt0aGlzLmE9bmV3IF9QYn0KZnVuY3Rpb24gT1NiKCl7dGhpcy5hPW5ldyBVbGJ9CmZ1bmN0aW9uIE9VYigpe3RoaXMuYT1uZXcgVWxifQpmdW5jdGlvbiBBVWIoKXt0aGlzLmE9bmV3IFVsYn0KZnVuY3Rpb24gVFRiKCl7dGhpcy5hPW5ldyBVbGJ9CmZ1bmN0aW9uIGhMYigpe3RoaXMuZD1uZXcgVWxifQpmdW5jdGlvbiBJVWIoKXt0aGlzLmE9bmV3IFFyYn0KZnVuY3Rpb24gdyRiKCl7dGhpcy5hPW5ldyBJcmJ9CmZ1bmN0aW9uIE9WYigpe3RoaXMuYj1uZXcgSXJifQpmdW5jdGlvbiBtQmMoKXt0aGlzLmI9bmV3IFVsYn0KZnVuY3Rpb24gYUljKCl7dGhpcy5lPW5ldyBVbGJ9CmZ1bmN0aW9uIG9hYygpe3RoaXMuYT1uZXcgQWhjfQpmdW5jdGlvbiBYS2MoKXt0aGlzLmQ9bmV3IFVsYn0KZnVuY3Rpb24gTGViKGEpe3RoaXMuYT1RZWIoYSl9CmZ1bmN0aW9uIExZYigpe1NYYi5jYWxsKHRoaXMpfQpmdW5jdGlvbiBaWGIoKXtTWGIuY2FsbCh0aGlzKX0KZnVuY3Rpb24gYlliKCl7WlhiLmNhbGwodGhpcyl9CmZ1bmN0aW9uIE9ZYigpe0xZYi5jYWxsKHRoaXMpfQpmdW5jdGlvbiB0eGIoKXtXd2IuY2FsbCh0aGlzKX0KZnVuY3Rpb24gcUhiKCl7YUhiLmNhbGwodGhpcyl9CmZ1bmN0aW9uIFhUYigpe1RUYi5jYWxsKHRoaXMpfQpmdW5jdGlvbiBZSWMoKXtVbGIuY2FsbCh0aGlzKX0KZnVuY3Rpb24geExjKCl7d0xjLmNhbGwodGhpcyl9CmZ1bmN0aW9uIEVMYygpe3dMYy5jYWxsKHRoaXMpfQpmdW5jdGlvbiBmT2MoKXtkT2MuY2FsbCh0aGlzKX0KZnVuY3Rpb24ga09jKCl7ZE9jLmNhbGwodGhpcyl9CmZ1bmN0aW9uIHBPYygpe2RPYy5jYWxsKHRoaXMpfQpmdW5jdGlvbiBXN2MoKXtTN2MuY2FsbCh0aGlzKX0KZnVuY3Rpb24gUmRkKCl7TXRiLmNhbGwodGhpcyl9CmZ1bmN0aW9uIGN4ZCgpe0N0ZC5jYWxsKHRoaXMpfQpmdW5jdGlvbiByeGQoKXtDdGQuY2FsbCh0aGlzKX0KZnVuY3Rpb24gZ01kKCl7VExkLmNhbGwodGhpcyl9CmZ1bmN0aW9uIEhNZCgpe1RMZC5jYWxsKHRoaXMpfQpmdW5jdGlvbiBmT2QoKXtJcmIuY2FsbCh0aGlzKX0KZnVuY3Rpb24gb09kKCl7SXJiLmNhbGwodGhpcyl9CmZ1bmN0aW9uIHpPZCgpe0lyYi5jYWxsKHRoaXMpfQpmdW5jdGlvbiBIU2QoKXthU2QuY2FsbCh0aGlzKX0KZnVuY3Rpb24gRFlkKCl7UXJiLmNhbGwodGhpcyl9CmZ1bmN0aW9uIFZZZCgpe0ZZZC5jYWxsKHRoaXMpfQpmdW5jdGlvbiBMX2QoKXt5UmQuY2FsbCh0aGlzKX0KZnVuY3Rpb24gaDFkKCl7SXJiLmNhbGwodGhpcyl9CmZ1bmN0aW9uIGsxZCgpe3lSZC5jYWxsKHRoaXMpfQpmdW5jdGlvbiBHNWQoKXtJcmIuY2FsbCh0aGlzKX0KZnVuY3Rpb24gWDVkKCl7SXJiLmNhbGwodGhpcyl9CmZ1bmN0aW9uIEpoZSgpe0ZQZC5jYWxsKHRoaXMpfQpmdW5jdGlvbiBhaWUoKXtKaGUuY2FsbCh0aGlzKX0KZnVuY3Rpb24gZ2llKCl7RlBkLmNhbGwodGhpcyl9CmZ1bmN0aW9uIF9tZSgpe21tZS5jYWxsKHRoaXMpfQpmdW5jdGlvbiBkT2MoKXt0aGlzLmE9bmV3IFFyYn0KZnVuY3Rpb24gcVRjKCl7dGhpcy5hPW5ldyBJcmJ9CmZ1bmN0aW9uIFM3Yygpe3RoaXMuYT1uZXcgSXJifQpmdW5jdGlvbiBHVGMoKXt0aGlzLmE9bmV3IFVsYn0KZnVuY3Rpb24gYjljKCl7dGhpcy5qPW5ldyBVbGJ9CmZ1bmN0aW9uIFVfYygpe3RoaXMuYT1uZXcgWV9jfQpmdW5jdGlvbiBFNWMoKXt0aGlzLmE9bmV3IEQ1Y30KZnVuY3Rpb24gd2xkKCl7dGhpcy5hPW5ldyBNdGJ9CmZ1bmN0aW9uIFRMZCgpe3RoaXMuYT1uZXcgWExkfQpmdW5jdGlvbiB3Yigpe3diPVpjYjt2Yj1uZXcgeGJ9CmZ1bmN0aW9uIFVrKCl7VWs9WmNiO1RrPW5ldyBWa30KZnVuY3Rpb24gaWwoKXtpbD1aY2I7aGw9bmV3IGpsfQpmdW5jdGlvbiBqbCgpe09rLmNhbGwodGhpcywnJyl9CmZ1bmN0aW9uIFZrKCl7T2suY2FsbCh0aGlzLCcnKX0KZnVuY3Rpb24gRGQoYSl7eWQuY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBIZChhKXt5ZC5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHZoKGEpe3JoLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gWWgoYSl7V2MuY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBPaShhKXtXYy5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHVpKGEpe1loLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gT3AoYSl7WWguY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBGcyhhKXtZaC5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIEZwKGEpe1RvLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gTXAoYSl7VG8uY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBfcChhKXtjby5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIEJ2KGEpe3F2LmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gWXYoYSl7UHIuY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiAkdihhKXtQci5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIFh3KGEpe1ByLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gSXgoYSl7Q24uY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBKeChhKXtJeC5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHF6KGEpe2Z6LmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gVUIoYSl7cXouY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBtQygpe25DLmNhbGwodGhpcyx7fSl9CmZ1bmN0aW9uIEN1YihhKXt5dWIoKTt0aGlzLmE9YX0KZnVuY3Rpb24genhiKGEpe2EuYj1udWxsO2EuYz0wfQpmdW5jdGlvbiBjeihhLGIpe2EuZT1iO195KGEsYil9CmZ1bmN0aW9uIFhSYihhLGIpe2EuYT1iO1pSYihhKX0KZnVuY3Rpb24gbkliKGEsYixjKXthLmFbYi5nXT1jfQpmdW5jdGlvbiBobmQoYSxiLGMpe3BuZChjLGEsYil9CmZ1bmN0aW9uIEdhYyhhLGIpe3VnYyhiLmksYS5uKX0KZnVuY3Rpb24gS3djKGEsYil7THdjKGEpLkFkKGIpfQpmdW5jdGlvbiBLTmIoYSxiKXtyZXR1cm4gYSphL2J9CmZ1bmN0aW9uIGpzKGEsYil7cmV0dXJuIGEuZy1iLmd9CmZ1bmN0aW9uIHV3KGEsYil7YS5hLmVjKCkuS2MoYil9CmZ1bmN0aW9uIEJDKGEpe3JldHVybiBuZXcgX0IoYSl9CmZ1bmN0aW9uIERDKGEpe3JldHVybiBuZXcgR0MoYSl9CmZ1bmN0aW9uIHN6KCl7c3o9WmNiO3J6PW5ldyBuYn0KZnVuY3Rpb24gU3ooKXtTej1aY2I7Uno9bmV3IFZ6fQpmdW5jdGlvbiBTQSgpe1NBPVpjYjtSQT1uZXcgVUF9CmZ1bmN0aW9uIHZzKCl7dnM9WmNiO3VzPW5ldyB3c30KZnVuY3Rpb24gV0IoKXtXQj1aY2I7VkI9bmV3IFhCfQpmdW5jdGlvbiBJRWMoYSl7bUVjKCk7dGhpcy5hPWF9CmZ1bmN0aW9uIFg4ZChhKXtoSWQoKTt0aGlzLmE9YX0KZnVuY3Rpb24gZHBkKGEpe1RvZCgpO3RoaXMuZj1hfQpmdW5jdGlvbiBmcGQoYSl7VG9kKCk7dGhpcy5mPWF9CmZ1bmN0aW9uIGtkYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIG1kYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHFkYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHJkYihhKXtmei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHplYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIFRlYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIFdlYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIERmYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIEZmYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIGJoYihhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIGRuYihhKXt0RGIoYSk7dGhpcy5hPWF9CmZ1bmN0aW9uIEVtYihhKXtKbWIoYSxhLmxlbmd0aCl9CmZ1bmN0aW9uIElSYihhKXtDUmIoYSk7cmV0dXJuIGF9CmZ1bmN0aW9uIHlkYihhKXtyZXR1cm4gdERiKGEpLGF9CmZ1bmN0aW9uIEJlYihhKXtyZXR1cm4gdERiKGEpLGF9CmZ1bmN0aW9uIERlYihhKXtyZXR1cm4gdERiKGEpLGF9CmZ1bmN0aW9uIGpnYihhKXtyZXR1cm4gdERiKGEpLGF9CmZ1bmN0aW9uIHRnYihhKXtyZXR1cm4gdERiKGEpLGF9CmZ1bmN0aW9uIGVsYihhKXtyZXR1cm4gYS5iPT1hLmN9CmZ1bmN0aW9uIEp4YihhKXtyZXR1cm4gISFhJiZhLmJ9CmZ1bmN0aW9uIHJJYihhKXtyZXR1cm4gISFhJiZhLmt9CmZ1bmN0aW9uIHNJYihhKXtyZXR1cm4gISFhJiZhLmp9CmZ1bmN0aW9uIFk4YyhhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIFo4YyhhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIGV5ZChhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIGVtZShhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIGZoZShhKXtxei5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHBjKGEpe3FjLmNhbGwodGhpcyxhLDApfQpmdW5jdGlvbiBQaSgpe1FpLmNhbGwodGhpcywxMiwzKX0KZnVuY3Rpb24gR2IoKXt0aGlzLmE9T0QoUWIoTHFlKSl9CmZ1bmN0aW9uIHh5KGEpe1lsKCk7dGhpcy5hPVFiKGEpfQpmdW5jdGlvbiBQcyhhLGIpe2EuX2QoYik7Yi4kZChhKX0KZnVuY3Rpb24gUFViKGEsYixjKXthLmMuQ2YoYixjKX0KZnVuY3Rpb24gT0MoYSxiKXtyZXR1cm4gb2ViKGEsYil9CmZ1bmN0aW9uIElkYihhLGIpe3JldHVybiBhLmEtYi5hfQpmdW5jdGlvbiBUZGIoYSxiKXtyZXR1cm4gYS5hLWIuYX0KZnVuY3Rpb24gaEMoYixhKXtyZXR1cm4gYSBpbiBiLmF9CmZ1bmN0aW9uIE5mYihhLGIpe3JldHVybiBhLmEtYi5hfQpmdW5jdGlvbiBNZmIoYSl7VGViLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gb2RiKGEpe21kYi5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIEhnYigpe2lkYi5jYWxsKHRoaXMsJycpfQpmdW5jdGlvbiBJZ2IoKXtpZGIuY2FsbCh0aGlzLCcnKX0KZnVuY3Rpb24gVWdiKCl7aWRiLmNhbGwodGhpcywnJyl9CmZ1bmN0aW9uIFZnYigpe2lkYi5jYWxsKHRoaXMsJycpfQpmdW5jdGlvbiBYZ2IoYSl7bWRiLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gQXBiKGEpe29vYi5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIFpwYihhKXtLb2IuY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBIcGIoYSl7QXBiLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gdHNiKCl7dHNiPVpjYjtzc2I9dnNiKCl9CmZ1bmN0aW9uIEl6KCl7SXo9WmNiOyEhKFp6KCksWXopfQpmdW5jdGlvbiBqYygpe3Rocm93IHNjYihuZXcgYWhiKX0KZnVuY3Rpb24gRmgoKXt0aHJvdyBzY2IobmV3IGFoYil9CmZ1bmN0aW9uIFZpKCl7dGhyb3cgc2NiKG5ldyBhaGIpfQpmdW5jdGlvbiBWaigpe3Rocm93IHNjYihuZXcgYWhiKX0KZnVuY3Rpb24gV2ooKXt0aHJvdyBzY2IobmV3IGFoYil9CmZ1bmN0aW9uIGZuKCl7dGhyb3cgc2NiKG5ldyBhaGIpfQpmdW5jdGlvbiBiRGIoYSxiKXtyZXR1cm4gWEMoYSxiKX0KZnVuY3Rpb24gSnViKGEpe3JldHVybiBhLmE/YS5iOjB9CmZ1bmN0aW9uIFN1YihhKXtyZXR1cm4gYS5hP2EuYjowfQpmdW5jdGlvbiBTRWIoYSxiKXthLmc9YjtyZXR1cm4gYX0KZnVuY3Rpb24gUEViKGEsYil7YS5iPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIFFFYihhLGIpe2EuYz1iO3JldHVybiBhfQpmdW5jdGlvbiBSRWIoYSxiKXthLmY9YjtyZXR1cm4gYX0KZnVuY3Rpb24gS0diKGEsYil7YS5mPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIEpHYihhLGIpe2EuYT1iO3JldHVybiBhfQpmdW5jdGlvbiBMR2IoYSxiKXthLms9YjtyZXR1cm4gYX0KZnVuY3Rpb24gTFJiKGEsYil7YS5lPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIGdMYihhLGIpe2EuZT1iO3JldHVybiBhfQpmdW5jdGlvbiBmTGIoYSxiKXthLmE9YjtyZXR1cm4gYX0KZnVuY3Rpb24gTVJiKGEsYil7YS5mPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIEZIYihhLGIpe2EuYj1uZXcgRmRkKGIpfQpmdW5jdGlvbiB5d2IoYSxiLGMpe2IuTmUoYS5hW2NdKX0KZnVuY3Rpb24gdHdiKGEsYixjKXtiLkFkKGEuYVtjXSl9CmZ1bmN0aW9uIFpkYyhhLGIpe0FkYygpO2Iubi5hKz1hfQpmdW5jdGlvbiBCaGMoYSxiKXtqaGMoKTtfWWIoYixhKX0KZnVuY3Rpb24gWkhjKGEsYil7cmV0dXJuIGEuYi1iLmJ9CmZ1bmN0aW9uIE5NYyhhLGIpe3JldHVybiBhLmctYi5nfQpmdW5jdGlvbiB4UGMoYSxiKXtyZXR1cm4gYS5zLWIuc30KZnVuY3Rpb24gT2ZjKGEsYil7cmV0dXJuIGE/MDpiLTF9CmZ1bmN0aW9uIHRFYyhhLGIpe3JldHVybiBhPzA6Yi0xfQpmdW5jdGlvbiBzRWMoYSxiKXtyZXR1cm4gYT9iLTE6MH0KZnVuY3Rpb24gazljKGEsYil7cmV0dXJuIGIucGcoYSl9CmZ1bmN0aW9uIGthZChhLGIpe2EuYj1iO3JldHVybiBhfQpmdW5jdGlvbiBqYWQoYSxiKXthLmE9YjtyZXR1cm4gYX0KZnVuY3Rpb24gQmFkKGEsYil7YS5hPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIGxhZChhLGIpe2EuYz1iO3JldHVybiBhfQpmdW5jdGlvbiBEYWQoYSxiKXthLmM9YjtyZXR1cm4gYX0KZnVuY3Rpb24gbWFkKGEsYil7YS5kPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIG5hZChhLGIpe2EuZT1iO3JldHVybiBhfQpmdW5jdGlvbiBvYWQoYSxiKXthLmY9YjtyZXR1cm4gYX0KZnVuY3Rpb24gQ2FkKGEsYil7YS5iPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIFliZChhLGIpe2EuYj1iO3JldHVybiBhfQpmdW5jdGlvbiBaYmQoYSxiKXthLmM9YjtyZXR1cm4gYX0KZnVuY3Rpb24gJGJkKGEsYil7YS5kPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIF9iZChhLGIpe2EuZT1iO3JldHVybiBhfQpmdW5jdGlvbiBhY2QoYSxiKXthLmY9YjtyZXR1cm4gYX0KZnVuY3Rpb24gYmNkKGEsYil7YS5nPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIGNjZChhLGIpe2EuYT1iO3JldHVybiBhfQpmdW5jdGlvbiBkY2QoYSxiKXthLmk9YjtyZXR1cm4gYX0KZnVuY3Rpb24gZWNkKGEsYil7YS5qPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIHRsZChhLGIpe2Euaj1iO3JldHVybiBhfQpmdW5jdGlvbiBzbGQoYSxiKXthLms9YjtyZXR1cm4gYX0KZnVuY3Rpb24gc0ZjKGEpe0ZDYy5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIExGYyhhKXtGQ2MuY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBTZGQoYSl7TnRiLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gRkdkKGEpe3dEZC5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIF9LZChhKXtWS2QuY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBiTGQoYSl7VktkLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gSFhiKCl7SVhiLmNhbGwodGhpcywnJyl9CmZ1bmN0aW9uIENkZCgpe3RoaXMuYT0wO3RoaXMuYj0wfQpmdW5jdGlvbiBETmMoKXt0aGlzLmI9MDt0aGlzLmE9MH0KZnVuY3Rpb24gR1NkKGEsYil7YS5iPTA7d1JkKGEsYil9CmZ1bmN0aW9uIFFhZShhLGIpe2EuYz1iO2EuYj10cnVlfQpmdW5jdGlvbiByNWMoYSxiLGMpe3A1YyhhLmEsYixjKX0KZnVuY3Rpb24gT2MoYSxiKXtyZXR1cm4gYS5jLl9iKGIpfQpmdW5jdGlvbiBkZWIoYSl7cmV0dXJuIGEuZSYmYS5lKCl9CmZ1bmN0aW9uIFZkKGEpe3JldHVybiAhYT9udWxsOmEuZH0KZnVuY3Rpb24gQW4oYSxiKXtyZXR1cm4gU3YoYS5iLGIpfQpmdW5jdGlvbiBSdihhKXtyZXR1cm4gIWE/bnVsbDphLmd9CmZ1bmN0aW9uIFd2KGEpe3JldHVybiAhYT9udWxsOmEuaX0KZnVuY3Rpb24gZWViKGEpe2NlYihhKTtyZXR1cm4gYS5vfQpmdW5jdGlvbiBQc2IoKXt0aHJvdyBzY2IobmV3IGFoYil9CmZ1bmN0aW9uIGhoZSgpe2hoZT1aY2I7Z2hlPVFpZSgpfQpmdW5jdGlvbiBqaGUoKXtqaGU9WmNiO2loZT1YaWUoKX0KZnVuY3Rpb24gakVkKCl7akVkPVpjYjtpRWQ9TmFkKCl9CmZ1bmN0aW9uIEhwZCgpe0hwZD1aY2I7R3BkPXF2ZCgpfQpmdW5jdGlvbiBKcGQoKXtKcGQ9WmNiO0lwZD1Fd2QoKX0KZnVuY3Rpb24gRU9kKCl7RU9kPVpjYjtET2Q9ajZkKCl9CmZ1bmN0aW9uIGhvYigpe3Rocm93IHNjYihuZXcgYWhiKX0KZnVuY3Rpb24gaW9iKCl7dGhyb3cgc2NiKG5ldyBhaGIpfQpmdW5jdGlvbiBqb2IoKXt0aHJvdyBzY2IobmV3IGFoYil9CmZ1bmN0aW9uIG1vYigpe3Rocm93IHNjYihuZXcgYWhiKX0KZnVuY3Rpb24gRW9iKCl7dGhyb3cgc2NiKG5ldyBhaGIpfQpmdW5jdGlvbiBScmIoYSl7dGhpcy5hPW5ldyBKcmIoYSl9CmZ1bmN0aW9uIHNoYihhKXtraGIoKTttaGIodGhpcyxhKX0KZnVuY3Rpb24gbXpiKGEpe3RoaXMuYT1uZXcgVXhiKGEpfQpmdW5jdGlvbiBZdmIoYSxiKXt3aGlsZShhLlBlKGIpKTt9CmZ1bmN0aW9uIFB2YihhLGIpe3doaWxlKGEuemQoYikpO30KZnVuY3Rpb24gQmdiKGEsYil7YS5hKz1iO3JldHVybiBhfQpmdW5jdGlvbiBDZ2IoYSxiKXthLmErPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIEZnYihhLGIpe2EuYSs9YjtyZXR1cm4gYX0KZnVuY3Rpb24gTGdiKGEsYil7YS5hKz1iO3JldHVybiBhfQpmdW5jdGlvbiBQQmIoYSl7S0FiKGEpO3JldHVybiBhLmF9CmZ1bmN0aW9uIFR0YihhKXtyZXR1cm4gYS5iIT1hLmQuY30KZnVuY3Rpb24geEQoYSl7cmV0dXJuIGEubHxhLm08PDIyfQpmdW5jdGlvbiBER2MoYSxiKXtyZXR1cm4gYS5kW2IucF19CmZ1bmN0aW9uIEg4YyhhLGIpe3JldHVybiBDOGMoYSxiKX0KZnVuY3Rpb24gWkNiKGEsYixjKXthLnNwbGljZShiLGMpfQpmdW5jdGlvbiBZSGIoYSl7YS5jP1hIYihhKTpaSGIoYSl9CmZ1bmN0aW9uIFdZYyhhKXt0aGlzLmE9MDt0aGlzLmI9YX0KZnVuY3Rpb24gS1ljKCl7dGhpcy5hPW5ldyBqOWMoZ18pfQpmdW5jdGlvbiBvMGMoKXt0aGlzLmE9bmV3IGo5YyhKXyl9CmZ1bmN0aW9uIG81Yygpe3RoaXMuYj1uZXcgajljKHkwKX0KZnVuY3Rpb24gRDVjKCl7dGhpcy5iPW5ldyBqOWMoeTApfQpmdW5jdGlvbiBXUGMoKXt0aGlzLmI9bmV3IGo5Yyh2Wil9CmZ1bmN0aW9uIEpMZCgpe3Rocm93IHNjYihuZXcgYWhiKX0KZnVuY3Rpb24gS0xkKCl7dGhyb3cgc2NiKG5ldyBhaGIpfQpmdW5jdGlvbiBMTGQoKXt0aHJvdyBzY2IobmV3IGFoYil9CmZ1bmN0aW9uIE1MZCgpe3Rocm93IHNjYihuZXcgYWhiKX0KZnVuY3Rpb24gTkxkKCl7dGhyb3cgc2NiKG5ldyBhaGIpfQpmdW5jdGlvbiBPTGQoKXt0aHJvdyBzY2IobmV3IGFoYil9CmZ1bmN0aW9uIFBMZCgpe3Rocm93IHNjYihuZXcgYWhiKX0KZnVuY3Rpb24gUUxkKCl7dGhyb3cgc2NiKG5ldyBhaGIpfQpmdW5jdGlvbiBSTGQoKXt0aHJvdyBzY2IobmV3IGFoYil9CmZ1bmN0aW9uIFNMZCgpe3Rocm93IHNjYihuZXcgYWhiKX0KZnVuY3Rpb24gVnBlKCl7dGhyb3cgc2NiKG5ldyBxdWIpfQpmdW5jdGlvbiBXcGUoKXt0aHJvdyBzY2IobmV3IHF1Yil9CmZ1bmN0aW9uIEpwZShhKXt0aGlzLmE9bmV3IFlvZShhKX0KZnVuY3Rpb24gcGYoYSl7dGhpcy5iPUpEKFFiKGEpLDkxKX0KZnVuY3Rpb24gRmYoYSxiKXt0aGlzLmI9YTt0aGlzLmM9Yn0KZnVuY3Rpb24gbWUoYSxiKXt0aGlzLmU9YTt0aGlzLmQ9Yn0KZnVuY3Rpb24gV2MoYSl7TGIoYS5kYygpKTt0aGlzLmM9YX0KZnVuY3Rpb24gTGooYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gZmsoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gbGsoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gbmsoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gdmsoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24geGsoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gSWsoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gJG8oYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gY3AoYSxiKXt0aGlzLmc9YTt0aGlzLmk9Yn0KZnVuY3Rpb24geXAoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gY2coYSxiKXt4Zi5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gZWcoYSxiKXtjZy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gbXIoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gTnIoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gcnIoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gbXMoYSxiKXt0aGlzLmY9YTt0aGlzLmc9Yn0KZnVuY3Rpb24gUHIoYSl7dGhpcy5iPUpEKFFiKGEpLDQ5KX0KZnVuY3Rpb24gb3UoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gRHUoYSxiKXt0aGlzLmE9YTt0aGlzLmY9Yn0KZnVuY3Rpb24gbHYoYSl7dGhpcy5hPUpEKFFiKGEpLDE1KX0KZnVuY3Rpb24gcXYoYSl7dGhpcy5hPUpEKFFiKGEpLDE1KX0KZnVuY3Rpb24gQ3YoYSxiKXt0aGlzLmI9YTt0aGlzLmM9Yn0KZnVuY3Rpb24gancoYSl7dGhpcy5hPUpEKFFiKGEpLDkxKX0KZnVuY3Rpb24gQXgoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gYXkoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24geHQoYSxiKXtyZXR1cm4gTGliKGEuYixiKX0KZnVuY3Rpb24gVHAoYSxiKXtyZXR1cm4gYT5iJiZiPENyZX0KZnVuY3Rpb24gWGxlKGEpe3JldHVybiBTbGVbYV0hPS0xfQpmdW5jdGlvbiB5cWUoYSl7cmV0dXJuICFhfHx4cWUoYSl9CmZ1bmN0aW9uIFVpYihhKXtyZXR1cm4gYS5mLmMrYS5pLmN9CmZ1bmN0aW9uIEFDKGEpe3JldHVybiBPQigpLGE/TkI6TUJ9CmZ1bmN0aW9uIGtvYihhLGIpe3JldHVybiBhLmIuR2MoYil9CmZ1bmN0aW9uIGxvYihhLGIpe3JldHVybiBhLmIuSGMoYil9CmZ1bmN0aW9uIG5vYihhLGIpe3JldHVybiBhLmIuT2MoYil9CmZ1bmN0aW9uIGZwYihhLGIpe3JldHVybiBhLmMudWMoYil9CmZ1bmN0aW9uIGhwYihhLGIpe3JldHVybiBwYihhLmMsYil9CmZ1bmN0aW9uIEVwYihhLGIpe3JldHVybiBhLmIuR2MoYil9CmZ1bmN0aW9uIEhXZChhLGIpe09HZChTVGQoYS5hKSxiKX0KZnVuY3Rpb24gTVdkKGEsYil7T0dkKFNUZChhLmEpLGIpfQpmdW5jdGlvbiBPcmIoYSxiKXtyZXR1cm4gYS5hLl9iKGIpfQpmdW5jdGlvbiBZb2UoYSl7WG9lKHRoaXMsYSxObmUoKSl9CmZ1bmN0aW9uIEpyYihhKXtWaWIuY2FsbCh0aGlzLGEsMCl9CmZ1bmN0aW9uIERyYihhKXt0aGlzLmM9YTtBcmIodGhpcyl9CmZ1bmN0aW9uIE10Yigpe3p0Yih0aGlzKTtMdGIodGhpcyl9CmZ1bmN0aW9uIFVjYigpe1NjYj09bnVsbCYmKFNjYj1bXSl9CmZ1bmN0aW9uIFR4Yigpe1V4Yi5jYWxsKHRoaXMsbnVsbCl9CmZ1bmN0aW9uIHVDKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIG1CKCl7dGhpcy5xPW5ldyAkd25kLkRhdGV9CmZ1bmN0aW9uIFF6KCl7RnohPTAmJihGej0wKTtIej0tMX0KZnVuY3Rpb24gR3piKCl7R3piPVpjYjtGemI9bmV3IEp6Yn0KZnVuY3Rpb24gWmdiKCl7WmdiPVpjYjtZZ2I9bmV3IGZkYn0KZnVuY3Rpb24gSG5iKCl7SG5iPVpjYjtHbmI9bmV3IEluYn0KZnVuY3Rpb24gSHViKCl7SHViPVpjYjtHdWI9bmV3IEx1Yn0KZnVuY3Rpb24gUnViKCl7UnViPVpjYjtRdWI9bmV3IFR1Yn0KZnVuY3Rpb24gd0JiKCl7d0JiPVpjYjt2QmI9bmV3IEpDYn0KZnVuY3Rpb24gcUJiKCl7TUFiLmNhbGwodGhpcyxudWxsKX0KZnVuY3Rpb24gRUJiKGEsYil7S0FiKGEpO2EuYS5OYihiKX0KZnVuY3Rpb24gZ3piKGEsYil7cmV0dXJuIGEuYS5WYyhiKX0KZnVuY3Rpb24gaHpiKGEsYil7cmV0dXJuIGEuYS5XYyhiKX0KZnVuY3Rpb24gaXpiKGEsYil7cmV0dXJuIGEuYS5ZYyhiKX0KZnVuY3Rpb24ganpiKGEsYil7cmV0dXJuIGEuYS5aYyhiKX0KZnVuY3Rpb24gc0FiKGEsYil7cmV0dXJuIGEuRmMoYiksYX0KZnVuY3Rpb24gZ0ViKGEsYil7YS5hLmY9YjtyZXR1cm4gYX0KZnVuY3Rpb24gbUViKGEsYil7YS5hLmQ9YjtyZXR1cm4gYX0KZnVuY3Rpb24gbkViKGEsYil7YS5hLmc9YjtyZXR1cm4gYX0KZnVuY3Rpb24gb0ViKGEsYil7YS5hLmo9YjtyZXR1cm4gYX0KZnVuY3Rpb24gRUZiKGEsYil7YS5hLmE9YjtyZXR1cm4gYX0KZnVuY3Rpb24gRkZiKGEsYil7YS5hLmQ9YjtyZXR1cm4gYX0KZnVuY3Rpb24gR0ZiKGEsYil7YS5hLmU9YjtyZXR1cm4gYX0KZnVuY3Rpb24gSEZiKGEsYil7YS5hLmc9YjtyZXR1cm4gYX0KZnVuY3Rpb24gcUdiKGEsYil7YS5hLmY9YjtyZXR1cm4gYX0KZnVuY3Rpb24gVkdiKGEpe2EuYj1mYWxzZTtyZXR1cm4gYX0KZnVuY3Rpb24gWFNiKCl7WFNiPVpjYjtXU2I9bmV3IGFUYn0KZnVuY3Rpb24gdkViKCl7dkViPVpjYjt1RWI9bmV3IHdFYn0KZnVuY3Rpb24gSlFiKCl7SlFiPVpjYjtJUWI9bmV3IFBRYn0KZnVuY3Rpb24gdVJiKCl7dVJiPVpjYjt0UmI9bmV3IHZSYn0KZnVuY3Rpb24gelJiKCl7elJiPVpjYjt5UmI9bmV3ICRSYn0KZnVuY3Rpb24gVTViKCl7VTViPVpjYjtUNWI9bmV3ICQ1Yn0KZnVuY3Rpb24gcVZiKCl7cVZiPVpjYjtwVmI9bmV3IHZWYn0KZnVuY3Rpb24gc1diKCl7c1diPVpjYjtyV2I9bmV3IGZYYn0KZnVuY3Rpb24gRTBiKCl7RTBiPVpjYjtEMGI9bmV3IE8wYn0KZnVuY3Rpb24gVCRiKCl7VCRiPVpjYjtTJGI9bmV3IENkZH0KZnVuY3Rpb24gSndjKCl7SndjPVpjYjtJd2M9bmV3IEdtZH0KZnVuY3Rpb24gamRjKCl7amRjPVpjYjtpZGM9bmV3IGdmY30KZnVuY3Rpb24gTGpjKCl7TGpjPVpjYjtLamM9bmV3IFpqY30KZnVuY3Rpb24gSTVjKCl7STVjPVpjYjtINWM9bmV3IEs1Y30KZnVuY3Rpb24gUzVjKCl7UzVjPVpjYjtSNWM9bmV3IFQ1Y30KZnVuY3Rpb24gcDdjKCl7cDdjPVpjYjtvN2M9bmV3IHI3Y30KZnVuY3Rpb24gSkFjKCl7QkFjKCk7dGhpcy5jPW5ldyBQaX0KZnVuY3Rpb24gSzVjKCl7bXMuY2FsbCh0aGlzLHF3ZSwwKX0KZnVuY3Rpb24gSTViKGEsYixjLGQpe0o1YihkLGEsYixjKX0KZnVuY3Rpb24gZjBiKGEsYixjLGQpe2swYihkLGEsYixjKX0KZnVuY3Rpb24gbUtiKGEsYixjLGQpe2xLYihhLGQsYixjKX0KZnVuY3Rpb24gXzljKGEsYixjKXtSaWIoYS5kLGIuZixjKX0KZnVuY3Rpb24gUmFkKGEsYil7VXNiKGEuYy5iLGIuYyxiKX0KZnVuY3Rpb24gU2FkKGEsYil7VXNiKGEuYy5jLGIuYixiKX0KZnVuY3Rpb24gRzljKGEsYil7YS5hPWIuZztyZXR1cm4gYX0KZnVuY3Rpb24gRFNjKGEpe3JldHVybiBhLmUuYSthLmYuYX0KZnVuY3Rpb24gRVNjKGEpe3JldHVybiBhLmUuYithLmYuYn0KZnVuY3Rpb24gQk5jKGEpe3JldHVybiAoYS5jK2EuYSkvMn0KZnVuY3Rpb24gZ1pkKGEpe3JldHVybiBhLmI/YS5iOmEuYX0KZnVuY3Rpb24gd1pkKGEsYil7cmV0dXJuIHlBKGEuYSxiKX0KZnVuY3Rpb24gUm9kKCl7Um9kPVpjYjtRb2Q9bmV3IENwZH0KZnVuY3Rpb24gdE9kKCl7dE9kPVpjYjtzT2Q9bmV3IHVPZH0KZnVuY3Rpb24gbU9kKCl7bU9kPVpjYjtsT2Q9bmV3IG9PZH0KZnVuY3Rpb24geE9kKCl7eE9kPVpjYjt3T2Q9bmV3IHpPZH0KZnVuY3Rpb24gck9kKCl7ck9kPVpjYjtxT2Q9bmV3IGgxZH0KZnVuY3Rpb24gQ09kKCl7Q09kPVpjYjtCT2Q9bmV3IFg1ZH0KZnVuY3Rpb24gaU5kKCl7aU5kPVpjYjtoTmQ9bmV3IElyYn0KZnVuY3Rpb24gbTZkKCl7bTZkPVpjYjtrNmQ9bmV3IFVsYn0KZnVuY3Rpb24gZyRkKCl7ZyRkPVpjYjtmJGQ9bmV3IG5kZX0KZnVuY3Rpb24gRSRkKCl7RSRkPVpjYjtEJGQ9bmV3IHJkZX0KZnVuY3Rpb24gX2RlKCl7X2RlPVpjYjskZGU9bmV3IGFlZX0KZnVuY3Rpb24gSWZlKCl7SWZlPVpjYjtIZmU9bmV3IE1mZX0KZnVuY3Rpb24gUXBlKCl7UXBlPVpjYjtQcGU9bmV3IFlwZX0KZnVuY3Rpb24gUHooYSl7JHduZC5jbGVhclRpbWVvdXQoYSl9CmZ1bmN0aW9uIE14KGEpe0x4KCk7Y28uY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBzZGIoYSxiKXtnei5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gb2tiKGEsYil7dGhpcy5kPWE7dGhpcy5lPWJ9CmZ1bmN0aW9uIENtYihhLGIpe0dtYihhLGEubGVuZ3RoLGIpfQpmdW5jdGlvbiBEbWIoYSxiKXtJbWIoYSxhLmxlbmd0aCxiKX0KZnVuY3Rpb24gSnFiKGEsYil7cmV0dXJuIHFyYihhLmEsYil9CmZ1bmN0aW9uIEFjYihhLGIpe3JldHVybiB2Y2IoYSxiKT4wfQpmdW5jdGlvbiBEY2IoYSxiKXtyZXR1cm4gdmNiKGEsYik8MH0KZnVuY3Rpb24gU3NiKGEsYil7cmV0dXJuIExpYihhLmUsYil9CmZ1bmN0aW9uIHpzYihhLGIpe3JldHVybiBhLmEuZ2V0KGIpfQpmdW5jdGlvbiBkZGIoYixhKXtyZXR1cm4gYS5zcGxpdChiKX0KZnVuY3Rpb24gcmpiKGEpe3JldHVybiBhLmI8YS5kLmdjKCl9CmZ1bmN0aW9uIE53YihhKXtyZXR1cm4gdERiKGEpLGZhbHNlfQpmdW5jdGlvbiBYdihhKXtyZXR1cm4gSkQoYSw0MykuamQoKX0KZnVuY3Rpb24gdncoYSl7dGhpcy5hPUpEKFFiKGEpLDIyOCl9CmZ1bmN0aW9uIE92YihhKXtHdmIuY2FsbCh0aGlzLGEsMjEpfQpmdW5jdGlvbiBUeWIoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gbUFiKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGhyYihhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiBpQ2IoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gb0NiKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIHVDYihhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBBQ2IoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gU0RiKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIFBDYihhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiByRmIoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gakhiKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIFFIYihhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBISWIoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24geUxiKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIHBNYihhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiBOTWIoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gY09iKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIExQYihhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBEUWIoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gV0NiKGEsYixjKXthLnNwbGljZShiLDAsYyl9CmZ1bmN0aW9uIGxyKGEsYixjKXthLk1iKGMpJiZiLkFkKGMpfQpmdW5jdGlvbiBrQ2IoYSxiLGMpe2IuTmUoYS5hLldlKGMpKX0KZnVuY3Rpb24gcUNiKGEsYixjKXtiLkJkKGEuYS5YZShjKSl9CmZ1bmN0aW9uIHdDYihhLGIsYyl7Yi5BZChhLmEuS2IoYykpfQpmdW5jdGlvbiBvUmIoYSxiKXtyZXR1cm4gcnJiKGEuYyxiKX0KZnVuY3Rpb24gYkViKGEsYil7cmV0dXJuIHJyYihhLmUsYil9CmZ1bmN0aW9uIEFTYihhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBkVWIoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gRVliKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGEyYihhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiB2NWIoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gSzdiKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGpTYihhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiBvU2IoYSxiKXt0aGlzLmM9YTt0aGlzLmQ9Yn0KZnVuY3Rpb24gJFdiKGEsYil7dGhpcy5lPWE7dGhpcy5kPWJ9CmZ1bmN0aW9uIHRaYihhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiB1YmMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24ga2NjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIEtjYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBNY2MoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gV2NjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIGdkYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBUZWMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gYmZjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIHdjYyhhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiBZY2MoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gRWpjKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9CmZ1bmN0aW9uIFJmYyhhLGIpe3RoaXMuYj1iO3RoaXMuYz1hfQpmdW5jdGlvbiBFZ2MoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gX2djKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIEpoYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBPbWMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gV21jKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGVuYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBwbmMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gQm5jKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIExuYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBVbmMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gZm9jKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIG5vYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiB6b2MoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gTG9jKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIF9vYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBpcGMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gcnBjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIHpwYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBQcWMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gWHFjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGV4YyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBxeGMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gQnhjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIE94YyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBPeWMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gZXljKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIG95YyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiB3eWMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gRnljKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIFh5YyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBwemMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24geXpjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIEh6YyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBWRWMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gd0hjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGZIYyhhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiBUSWMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gaEpjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIE9KYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBBS2MoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gSUtjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIFBLYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBBTGMoYSxiKXt0aGlzLmI9YTt0aGlzLmQ9Yn0KZnVuY3Rpb24gZExjKCl7WktjKCk7dGhpcy5iPW5ldyBRcmJ9CmZ1bmN0aW9uIG9NYygpe2dNYygpO3RoaXMuYT1uZXcgUXJifQpmdW5jdGlvbiBtOGIoKXtjOGIoKTt0aGlzLmE9bmV3IHFfYn0KZnVuY3Rpb24geHNiKCl7dHNiKCk7cmV0dXJuIG5ldyBzc2J9CmZ1bmN0aW9uIEl1YihhKXtyRGIoYS5hKTtyZXR1cm4gYS5ifQpmdW5jdGlvbiBBUmIoYSl7QlJiKGEsYS5jKTtyZXR1cm4gYX0KZnVuY3Rpb24gSUdjKGEsYil7Z0djKCk7cmV0dXJuIGIhPWF9CmZ1bmN0aW9uIHFrYyhhLGIpe3JldHVybiBycmIoYi5iLGEpfQpmdW5jdGlvbiBjSGMoYSxiKXtKR2MoYS5hLEpEKGIsMTEpKX0KZnVuY3Rpb24gak5jKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGhQYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBiUWMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gJFNjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIFBUYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiB3VmMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gRVZjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIENZYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBrWmMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gYiRjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGwkYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBvX2MoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24geV9jKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGowYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBFMGMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gbTFjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIFEyYyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBzM2MoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gc1BjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIHFQYyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBKUWMoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gQjNjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIExSYyhhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiBDWGMoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gRVhjKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9CmZ1bmN0aW9uIGdZYyhhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiBpWWMoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gTThjKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIHU5YyhhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBUM2MoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gSjRjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIHg1YyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBiNmMoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gbTZjKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIEM3YyhhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBtY2QoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gQWNkKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGRlZChhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBJZWQoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gWGdkKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGZoZChhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBvaGQoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24geWhkKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIEtoZChhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBmaWQoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gcWlkKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIEZpZChhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBSaWQoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gZGpkKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIHBqZChhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBWamQoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gcGtkKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIHprZChhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBPa2QoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gWGtkKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGRsZChhLGIpe21zLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBwbWQoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gT21kKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIFFtZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBTbWQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gRWRkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIHduZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiB5bmQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gQW5kKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIHhvZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBCemQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gRHpkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIEh6ZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBKemQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gUHpkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIFJ6ZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBUemQoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gVnpkKGEsYil7dGhpcy5iPWE7dGhpcy5hPWJ9CmZ1bmN0aW9uIG5BZChhLGIpe3RoaXMuYj1hO3RoaXMuYT1ifQpmdW5jdGlvbiBwQWQoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gckFkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIHZBZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBOQWQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gUkFkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIFREZChhLGIpe3RoaXMuZj1hO3RoaXMuYz1ifQpmdW5jdGlvbiBZSWQoYSxiKXt0aGlzLmk9YTt0aGlzLmc9Yn0KZnVuY3Rpb24gZFBkKGEsYil7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIGdQZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBjb2QoYSxiKXttcy5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gQ0JkKGEsYil7bXMuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIFcwZChhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBzMmQoYSxiKXt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gRlVkKGEsYil7dGhpcy5kPWE7dGhpcy5lPWJ9CmZ1bmN0aW9uIHZhZShhLGIpe3RoaXMuZD1hO3RoaXMuYj1ifQpmdW5jdGlvbiBSYWUoYSxiKXt0aGlzLmU9YTt0aGlzLmE9Yn0KZnVuY3Rpb24gWmZlKGEsYil7dGhpcy5iPWE7dGhpcy5jPWJ9CmZ1bmN0aW9uIFdnZShhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBUUmQoYSxiKXthLmk9bnVsbDtVUmQoYSxiKX0KZnVuY3Rpb24gZkVkKGEsYil7ISFhJiZRaWIoX0RkLGEsYil9CmZ1bmN0aW9uIGRMZChhLGIpe3JldHVybiBuSmQoYS5hLGIpfQpmdW5jdGlvbiBiYWQoYSxiKXtyZXR1cm4gcnJiKGEuZyxiKX0KZnVuY3Rpb24gWDdjKGEsYil7cmV0dXJuIC1hLmIuJGUoYil9CmZ1bmN0aW9uIFlmZShhKXtyZXR1cm4gS2JlKGEuYyxhLmIpfQpmdW5jdGlvbiBXZChhKXtyZXR1cm4gIWE/bnVsbDphLmtkKCl9CmZ1bmN0aW9uIFhEKGEpe3JldHVybiBhPT1udWxsP251bGw6YX0KZnVuY3Rpb24gU0QoYSl7cmV0dXJuIHR5cGVvZiBhPT09RHFlfQpmdW5jdGlvbiBURChhKXtyZXR1cm4gdHlwZW9mIGE9PT1FcWV9CmZ1bmN0aW9uIFZEKGEpe3JldHVybiB0eXBlb2YgYT09PUZxZX0KZnVuY3Rpb24gTm0oYSxiKXtyZXR1cm4gYS5QZCgpLlhiKGIpfQpmdW5jdGlvbiBZcShhLGIpe3JldHVybiB2cihhLkpjKCksYil9CmZ1bmN0aW9uIHljYihhLGIpe3JldHVybiB2Y2IoYSxiKT09MH0KZnVuY3Rpb24gQmNiKGEsYil7cmV0dXJuIHZjYihhLGIpPj0wfQpmdW5jdGlvbiBIY2IoYSxiKXtyZXR1cm4gdmNiKGEsYikhPTB9CmZ1bmN0aW9uIEdlYihhKXtyZXR1cm4gJycrKHREYihhKSxhKX0KZnVuY3Rpb24gd3FlKGEsYil7QXFlKG5ldyBDSGQoYSksYil9CmZ1bmN0aW9uICR5ZChhLGIsYyl7VHhkKGIseHlkKGEsYykpfQpmdW5jdGlvbiBfeWQoYSxiLGMpe1R4ZChiLHh5ZChhLGMpKX0KZnVuY3Rpb24gX3pjKCl7VXpjKCk7WHpjLmNhbGwodGhpcyl9CmZ1bmN0aW9uIGlnKGEpe2dnKGEpO3JldHVybiBhLmQuZ2MoKX0KZnVuY3Rpb24gWkQoYSl7QkRiKGE9PW51bGwpO3JldHVybiBhfQpmdW5jdGlvbiB6bmIoYSl7c0RiKGEsMCk7cmV0dXJuIG51bGx9CmZ1bmN0aW9uIERnYihhLGIpe2EuYSs9JycrYjtyZXR1cm4gYX0KZnVuY3Rpb24gRWdiKGEsYil7YS5hKz0nJytiO3JldHVybiBhfQpmdW5jdGlvbiBOZ2IoYSxiKXthLmErPScnK2I7cmV0dXJuIGF9CmZ1bmN0aW9uIFBnYihhLGIpe2EuYSs9JycrYjtyZXR1cm4gYX0KZnVuY3Rpb24gUWdiKGEsYil7YS5hKz0nJytiO3JldHVybiBhfQpmdW5jdGlvbiBNZ2IoYSxiKXtyZXR1cm4gYS5hKz0nJytiLGF9CmZ1bmN0aW9uIEJ0YihhLGIpe0R0YihhLGIsYS5hLGEuYS5hKX0KZnVuY3Rpb24gQ3RiKGEsYil7RHRiKGEsYixhLmMuYixhLmMpfQpmdW5jdGlvbiBkd2IoYSxiKXskdmIuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGh3YihhLGIpeyR2Yi5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gbHdiKGEsYil7JHZiLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBLcmIoYSl7VGliKHRoaXMpO0xkKHRoaXMsYSl9CmZ1bmN0aW9uIEx1Yigpe3RoaXMuYj0wO3RoaXMuYT1mYWxzZX0KZnVuY3Rpb24gVHViKCl7dGhpcy5iPTA7dGhpcy5hPWZhbHNlfQpmdW5jdGlvbiBBdCgpe3RoaXMuYj1uZXcgSnJiKE92KDEyKSl9CmZ1bmN0aW9uIGtCKGEsYil7YS5xLnNldFRpbWUoT2NiKGIpKX0KZnVuY3Rpb24gTUJkKGEsYil7TEJkLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBYSWQoYSxiKXt6SGQuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGdXZChhLGIpe1lJZC5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gcGRlKGEsYil7aiRkLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBsZGUoYSxiKXtpZGUuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGtOZChhLGIpe2lOZCgpO1FpYihoTmQsYSxiKX0KZnVuY3Rpb24gbWIoYSxiKXtyZXR1cm4gWEQoYSk9PT1YRChiKX0KZnVuY3Rpb24gJHEoYSl7cmV0dXJuIFFiKGEpLG5ldyBCbChhKX0KZnVuY3Rpb24gSXcoYSxiKXtyZXR1cm4gYS5hLmEuYS5jYyhiKX0KZnVuY3Rpb24gcUljKGEsYil7cmV0dXJuIGEualtiLnBdPT0yfQpmdW5jdGlvbiBXeShhLGIpe3JldHVybiBhPT1iPzA6YT8xOi0xfQpmdW5jdGlvbiBzQihhKXtyZXR1cm4gYTwxMD8nMCcrYTonJythfQpmdW5jdGlvbiAkQyhhKXtyZXR1cm4gX0MoYS5sLGEubSxhLmgpfQpmdW5jdGlvbiBDY2IoYSl7cmV0dXJuIHR5cGVvZiBhPT09RXFlfQpmdW5jdGlvbiBoZGIoYSxiKXtyZXR1cm4gcWdiKGEuYSwwLGIpfQpmdW5jdGlvbiBFZWIoYSl7cmV0dXJuIFlEKCh0RGIoYSksYSkpfQpmdW5jdGlvbiBGZWIoYSl7cmV0dXJuIFlEKCh0RGIoYSksYSkpfQpmdW5jdGlvbiBKZWIoYSxiKXtyZXR1cm4gSGViKGEuYSxiLmEpfQpmdW5jdGlvbiBYZWIoYSxiKXtyZXR1cm4gJGViKGEuYSxiLmEpfQpmdW5jdGlvbiBwZmIoYSxiKXtyZXR1cm4gcmZiKGEuYSxiLmEpfQpmdW5jdGlvbiBoZ2IoYSxiKXtyZXR1cm4gYS5pbmRleE9mKGIpfQpmdW5jdGlvbiBRbWIoYSxiKXtObWIoYSwwLGEubGVuZ3RoLGIpfQpmdW5jdGlvbiBGOWMoYSxiKXthLmE9Yi5nKzE7cmV0dXJuIGF9CmZ1bmN0aW9uIHZkZChhKXthLmE9MDthLmI9MDtyZXR1cm4gYX0KZnVuY3Rpb24gaXNiKGEpe3RoaXMuYT14c2IoKTt0aGlzLmI9YX0KZnVuY3Rpb24gQ3NiKGEpe3RoaXMuYT14c2IoKTt0aGlzLmI9YX0KZnVuY3Rpb24gQmwoYSl7dGhpcy5hPWE7eGwuY2FsbCh0aGlzKX0KZnVuY3Rpb24gRWwoYSl7dGhpcy5hPWE7eGwuY2FsbCh0aGlzKX0KZnVuY3Rpb24gZFRjKCl7ZFRjPVpjYjtjVGM9b3MoYlRjKCkpfQpmdW5jdGlvbiBBSmIoKXtBSmI9WmNiO3pKYj1vcyh5SmIoKSl9CmZ1bmN0aW9uIEE1Yigpe0E1Yj1aY2I7ejViPW9zKHk1YigpKX0KZnVuY3Rpb24gUnkoKXtSeT1aY2I7JHduZC5NYXRoLmxvZygyKX0KZnVuY3Rpb24gT0EoKXtPQT1aY2I7bkEoKTtOQT1uZXcgSXJifQpmdW5jdGlvbiB3dGIoKXtUcmIuY2FsbCh0aGlzLG5ldyBYc2IpfQpmdW5jdGlvbiAkWGIoKXtUWGIuY2FsbCh0aGlzLDAsMCwwLDApfQpmdW5jdGlvbiBhJGIoYSl7cmV0dXJuIE5sYihhLmIuYixhLDApfQpmdW5jdGlvbiBQSWIoYSxiKXtyZXR1cm4gJGViKGEuZyxiLmcpfQpmdW5jdGlvbiBhbGMoYSxiKXtyZXR1cm4gJGViKGEuZyxiLmcpfQpmdW5jdGlvbiBRMGMoYSxiKXtyZXR1cm4gSGViKGIuZixhLmYpfQpmdW5jdGlvbiBLOWMoYSl7cmV0dXJuIEQ5YyhuZXcgSjljLGEpfQpmdW5jdGlvbiBBeGMoYSl7cmV0dXJuIGE9PXd4Y3x8YT09dnhjfQpmdW5jdGlvbiB5U2IoYSl7cmV0dXJuIGE9PXRTYnx8YT09d1NifQpmdW5jdGlvbiB6U2IoYSl7cmV0dXJuIGE9PXRTYnx8YT09dVNifQpmdW5jdGlvbiBVZ2QoYSl7cmV0dXJuIGE9PVBnZHx8YT09UWdkfQpmdW5jdGlvbiBWZ2QoYSl7cmV0dXJuIGE9PVNnZHx8YT09T2dkfQpmdW5jdGlvbiBjamQoYSl7cmV0dXJuIGEhPSRpZCYmYSE9X2lkfQpmdW5jdGlvbiBxcWQoYSl7cmV0dXJuIGEucmgoKSYmYS5zaCgpfQpmdW5jdGlvbiBzbmQoYSl7cmV0dXJuIE9zZChKRChhLDEyNCkpfQpmdW5jdGlvbiBkdGQoYSxiLGMpe2d0ZChhLGIpO2V0ZChhLGMpfQpmdW5jdGlvbiBmdGQoYSxiLGMpe2h0ZChhLGIpO2l0ZChhLGMpfQpmdW5jdGlvbiB5c2QoYSxiLGMpe3pzZChhLGIpO0FzZChhLGMpfQpmdW5jdGlvbiBpdWQoYSxiLGMpe2p1ZChhLGIpO2t1ZChhLGMpfQpmdW5jdGlvbiBwdWQoYSxiLGMpe3F1ZChhLGIpO3J1ZChhLGMpfQpmdW5jdGlvbiBiVGQoYSxiKXtUU2QoYSxiKTtVU2QoYSxhLkQpfQpmdW5jdGlvbiBzeGIoYSxiKXtJbGIoYS5hLGIpO3JldHVybiBifQpmdW5jdGlvbiB4OGMoYSxiKXtJbGIoYS5jLGIpO3JldHVybiBhfQpmdW5jdGlvbiBjOWMoYSxiKXtEOWMoYS5hLGIpO3JldHVybiBhfQpmdW5jdGlvbiBWZGMoYSxiKXtBZGMoKTtyZXR1cm4gYi5hKz1hfQpmdW5jdGlvbiBYZGMoYSxiKXtBZGMoKTtyZXR1cm4gYi5hKz1hfQpmdW5jdGlvbiBXZGMoYSxiKXtBZGMoKTtyZXR1cm4gYi5jKz1hfQpmdW5jdGlvbiByYmUoYSxiKXtyZXR1cm4gbmV3IGlkZShiLGEpfQpmdW5jdGlvbiBzYmUoYSxiKXtyZXR1cm4gbmV3IGlkZShiLGEpfQpmdW5jdGlvbiBocihhKXtyZXR1cm4genIoYS5iLkpjKCksYS5hKX0KZnVuY3Rpb24gdXViKGEpe3JldHVybiBhIT1udWxsP3RiKGEpOjB9CmZ1bmN0aW9uIFhBYihhLGIpe3JldHVybiBhW2EubGVuZ3RoXT1ifQpmdW5jdGlvbiAkQWIoYSxiKXtyZXR1cm4gYVthLmxlbmd0aF09Yn0KZnVuY3Rpb24gYUFiKGEsYil7aWYoVHpiKXtyZXR1cm59YS5iPWJ9CmZ1bmN0aW9uIEZkZChhKXt0aGlzLmE9YS5hO3RoaXMuYj1hLmJ9CmZ1bmN0aW9uIFlEZChhKXtURGQuY2FsbCh0aGlzLGEsdHJ1ZSl9CmZ1bmN0aW9uIE1ZYihhKXtUWGIuY2FsbCh0aGlzLGEsYSxhLGEpfQpmdW5jdGlvbiBZeWIoKXtUeWIuY2FsbCh0aGlzLCdIZWFkJywxKX0KZnVuY3Rpb24gYnpiKCl7VHliLmNhbGwodGhpcywnVGFpbCcsMyl9CmZ1bmN0aW9uIGZkZCgpe2dkZC5jYWxsKHRoaXMsMCwwLDAsMCl9CmZ1bmN0aW9uIGJoKGEsYixjKXtfZy5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiBYaGIoYSl7R2hiKCk7WWhiLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gT0diKGEpe0xsYihhLlFmKCksbmV3IFNHYihhKSl9CmZ1bmN0aW9uIElMYygpe0lMYz1aY2I7SExjPW5ldyBPcWIobDIpfQpmdW5jdGlvbiBHbGIoYSl7YS5jPVNDKGFKLE5xZSwxLDAsNSwxKX0KZnVuY3Rpb24gaHpjKGEsYixjKXtWQyhhLmNbYi5nXSxiLmcsYyl9CmZ1bmN0aW9uIFVRZChhLGIsYyl7SkQoYS5jLDcxKS5EaShiLGMpfQpmdW5jdGlvbiBpbmQoYSxiLGMpe2Z0ZChjLGMuaSthLGMuaitiKX0KZnVuY3Rpb24gTkJkKGEsYil7TEJkLmNhbGwodGhpcyxhLmIsYil9CmZ1bmN0aW9uIE5YZChhLGIpe3RDZChPVGQoYS5hKSxRWGQoYikpfQpmdW5jdGlvbiBXX2QoYSxiKXt0Q2QoSl9kKGEuYSksWl9kKGIpKX0KZnVuY3Rpb24geCRiKGEsYil7cmV0dXJuIGtDZChiLG94ZChhKSl9CmZ1bmN0aW9uIHkkYihhLGIpe3JldHVybiBrQ2QoYixveGQoYSkpfQpmdW5jdGlvbiBqeWQoYSxiKXtyZXR1cm4gaHAoeW8oYS5mKSxiKX0KZnVuY3Rpb24ga3lkKGEsYil7cmV0dXJuIGhwKHlvKGEubiksYil9CmZ1bmN0aW9uIGx5ZChhLGIpe3JldHVybiBocCh5byhhLnApLGIpfQpmdW5jdGlvbiB6SmQoYSl7cmV0dXJuIGE9PW51bGw/MDp0YihhKX0KZnVuY3Rpb24gRHBlKGEpe29vZSgpO3BvZS5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIFNnKGEpe3RoaXMuYT1hO01nLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gQ3AoYSl7dGhpcy5hPWE7cGYuY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBKcChhKXt0aGlzLmE9YTtwZi5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIE9xKGEsYil7cW0oKTt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gSGgoYSxiKXtRYihiKTtHaChhKS5JYyhuZXcgZngpfQpmdW5jdGlvbiBpSWQoYSxiLGMpe1ZDKGEsYixjKTtyZXR1cm4gY30KZnVuY3Rpb24gX0MoYSxiLGMpe3JldHVybiB7bDphLG06YixoOmN9fQpmdW5jdGlvbiAkZWIoYSxiKXtyZXR1cm4gYTxiPy0xOmE+Yj8xOjB9CmZ1bmN0aW9uIEJmYihhLGIpe3JldHVybiB2Y2IoYSxiKT4wP2E6Yn0KZnVuY3Rpb24gb21iKGEpe3JldHVybiBhLmE8YS5jLmMubGVuZ3RofQpmdW5jdGlvbiBCcmIoYSl7cmV0dXJuIGEuYTxhLmMuYS5sZW5ndGh9CmZ1bmN0aW9uIFNsYihhLGIpe1BtYihhLmMsYS5jLmxlbmd0aCxiKX0KZnVuY3Rpb24gQXViKGEsYil7YS5hIT1udWxsJiZjSGMoYixhLmEpfQpmdW5jdGlvbiBLdWIoYSxiKXtyZXR1cm4gYS5hP2EuYjpiLlVlKCl9CmZ1bmN0aW9uIFVwZSgpe3Rocm93IHNjYihuZXcgYmhiKGNIZSkpfQpmdW5jdGlvbiBYcGUoKXt0aHJvdyBzY2IobmV3IGJoYihkSGUpKX0KZnVuY3Rpb24ga3FlKCl7dGhyb3cgc2NiKG5ldyBiaGIoZEhlKSl9CmZ1bmN0aW9uIGhxZSgpe3Rocm93IHNjYihuZXcgYmhiKGNIZSkpfQpmdW5jdGlvbiBiOWQoKXtuZXcgSXJiO25ldyBJcmI7bmV3IElyYn0KZnVuY3Rpb24gYTlkKCl7YTlkPVpjYjtuZXcgYjlkO25ldyBVbGJ9CmZ1bmN0aW9uIE4yZCgpe04yZD1aY2I7TTJkPSh0T2QoKSxzT2QpfQpmdW5jdGlvbiBZeShhKXthLmo9U0MoZEosaHJlLDMyMCwwLDAsMSl9CmZ1bmN0aW9uICR5Yigpe1R5Yi5jYWxsKHRoaXMsJ1JhbmdlJywyKX0KZnVuY3Rpb24gdk5iKGEpe2ROYi5jYWxsKHRoaXMpO3RoaXMuYj1hfQpmdW5jdGlvbiBJWGIoYSl7RlhiLmNhbGwodGhpcyk7dGhpcy5hPWF9CmZ1bmN0aW9uIGVNYihhKXt0aGlzLmI9bmV3IHFNYjt0aGlzLmE9YX0KZnVuY3Rpb24gWkRiKGEpe3RoaXMuYj1hO3RoaXMuYT1uZXcgVWxifQpmdW5jdGlvbiBuUWIoKXtqUWIoKTt0aGlzLmE9bmV3IGo5YyhBTyl9CmZ1bmN0aW9uIHp0YihhKXthLmE9bmV3IGd1YjthLmM9bmV3IGd1Yn0KZnVuY3Rpb24gUmtjKGEpe2EuYT1uZXcgSXJiO2EuZD1uZXcgSXJifQpmdW5jdGlvbiBSN2MoYSxiKXtyZXR1cm4gUWliKGEuYSxiLmEsYil9CmZ1bmN0aW9uIE5kYyhhLGIsYyl7cmV0dXJuIFFpYihhLmcsYyxiKX0KZnVuY3Rpb24gbUljKGEsYixjKXtyZXR1cm4gUWliKGEuayxjLGIpfQpmdW5jdGlvbiBlemMoYSxiLGMpe3JldHVybiBjemMoYixjLGEuYyl9CmZ1bmN0aW9uIHZ5ZChhLGIpe3JldHVybiBNRChOaWIoYS5pLGIpKX0KZnVuY3Rpb24gd3lkKGEsYil7cmV0dXJuIE1EKE5pYihhLmosYikpfQpmdW5jdGlvbiBiZGQoYSl7cmV0dXJuIG5ldyBFZGQoYS5jLGEuZCl9CmZ1bmN0aW9uIGNkZChhKXtyZXR1cm4gbmV3IEVkZChhLmMsYS5kKX0KZnVuY3Rpb24gb2RkKGEpe3JldHVybiBuZXcgRWRkKGEuYSxhLmIpfQpmdW5jdGlvbiB2WmQoYSxiKXtyZXR1cm4gcEEoYS5hLGIsbnVsbCl9CmZ1bmN0aW9uIFphYyhhKXtnV2IoYSxudWxsKTtoV2IoYSxudWxsKX0KZnVuY3Rpb24gYk5jKGEpe2NOYyhhLG51bGwpO2ROYyhhLG51bGwpfQpmdW5jdGlvbiBuZGUoKXtqJGQuY2FsbCh0aGlzLG51bGwsbnVsbCl9CmZ1bmN0aW9uIHJkZSgpe0skZC5jYWxsKHRoaXMsbnVsbCxudWxsKX0KZnVuY3Rpb24gVWZlKGEpe3RoaXMuYT1hO0lyYi5jYWxsKHRoaXMpfQpmdW5jdGlvbiBYcChhKXt0aGlzLmI9KHBuYigpLG5ldyBrcGIoYSkpfQpmdW5jdGlvbiBEcihhKXtyZXR1cm4gYS5PYigpP2EuUGIoKTpudWxsfQpmdW5jdGlvbiBOdihhLGIpe3JldHVybiBuZXcgYXcoYS5KYygpLGIpfQpmdW5jdGlvbiBacShhLGIpe3JldHVybiBGcihhLkpjKCksYikhPS0xfQpmdW5jdGlvbiBWZmUoYSxiKXtyZXR1cm4gbWJlKGEuYyxhLmIsYil9CmZ1bmN0aW9uIFJEKGEsYil7cmV0dXJuIGEhPW51bGwmJklEKGEsYil9CmZ1bmN0aW9uIGdCKGEsYil7YS5xLnNldEhvdXJzKGIpO2VCKGEsYil9CmZ1bmN0aW9uIElJYyhhLGIpe2dJYygpO3JldHVybiBiLm4uYis9YX0KZnVuY3Rpb24gc0ljKGEsYixjKXt0SWMoYSxiLGMpO3JldHVybiBjfQpmdW5jdGlvbiBJbGIoYSxiKXtZQ2IoYS5jLGIpO3JldHVybiB0cnVlfQpmdW5jdGlvbiBWc2IoYSxiKXtpZihhLmMpe2d0YihiKTtmdGIoYil9fQpmdW5jdGlvbiBsSmQoYSxiLGMpe2EuYy5fYyhiLEpEKGMsMTM1KSl9CmZ1bmN0aW9uIERKZChhLGIsYyl7YS5jLlJpKGIsSkQoYywxMzUpKX0KZnVuY3Rpb24gQ1VkKGEsYil7UkdkKGEpO2EuRmMoSkQoYiwxNSkpfQpmdW5jdGlvbiBQcmIoYSxiKXtyZXR1cm4gYS5hLkFjKGIpIT1udWxsfQpmdW5jdGlvbiBremIoYSxiKXtyZXR1cm4gYS5hLkFjKGIpIT1udWxsfQpmdW5jdGlvbiB6SGIoYSxiLGMpe3JldHVybiBhLmFbYi5nXVtjLmddfQpmdW5jdGlvbiBEQ2MoYSxiKXtyZXR1cm4gYS5lW2IuYy5wXVtiLnBdfQpmdW5jdGlvbiBXQ2MoYSxiKXtyZXR1cm4gYS5jW2IuYy5wXVtiLnBdfQpmdW5jdGlvbiBzRGMoYSxiKXtyZXR1cm4gYS5hW2IuYy5wXVtiLnBdfQpmdW5jdGlvbiBwSWMoYSxiKXtyZXR1cm4gYS5qW2IucF09REljKGIpfQpmdW5jdGlvbiB6UmMoYSxiKXtyZXR1cm4gQmViKE1EKGIuYSkpPD1hfQpmdW5jdGlvbiBBUmMoYSxiKXtyZXR1cm4gQmViKE1EKGIuYSkpPj1hfQpmdW5jdGlvbiBLYmQoYSxiKXtyZXR1cm4gYWdiKGEuZixiLk5nKCkpfQpmdW5jdGlvbiB5Z2IoYSl7cmV0dXJuIHpnYihhLDAsYS5sZW5ndGgpfQpmdW5jdGlvbiBxZGQoYSxiKXtyZXR1cm4gYS5hKmIuYSthLmIqYi5ifQpmdW5jdGlvbiBFbmQoYSxiKXtyZXR1cm4gYS5hPEhkYihiKT8tMToxfQpmdW5jdGlvbiBIQmQoYSxiKXtyZXR1cm4gYWdiKGEuYixiLk5nKCkpfQpmdW5jdGlvbiBBQ2MoYSxiLGMpe3JldHVybiBjP2IhPTA6YiE9YS0xfQpmdW5jdGlvbiBBdmIoYSxiLGMpe2EuYT1iXjE1MDI7YS5iPWNeZ3RlfQpmdW5jdGlvbiB5ZGQoYSxiLGMpe2EuYT1iO2EuYj1jO3JldHVybiBhfQpmdW5jdGlvbiB3ZGQoYSxiKXthLmEqPWI7YS5iKj1iO3JldHVybiBhfQpmdW5jdGlvbiBqRGQoYSxiLGMpe1ZDKGEuZyxiLGMpO3JldHVybiBjfQpmdW5jdGlvbiBFSGIoYSxiLGMsZCl7VkMoYS5hW2IuZ10sYy5nLGQpfQpmdW5jdGlvbiBxVmQoYSxiLGMpe2lWZC5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiB1VmQoYSxiLGMpe3FWZC5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiB2ZGUoYSxiLGMpe2RiZS5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiB6ZGUoYSxiLGMpe2RiZS5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiBCZGUoYSxiLGMpe3ZkZS5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiBEZGUoYSxiLGMpe3FWZC5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiBHZGUoYSxiLGMpe3VWZC5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiBRZGUoYSxiLGMpe2lWZC5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiBVZGUoYSxiLGMpe2lWZC5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiBYZGUoYSxiLGMpe1FkZS5jYWxsKHRoaXMsYSxiLGMpfQpmdW5jdGlvbiB3cygpe21zLmNhbGwodGhpcywnSU5TVEFOQ0UnLDApfQpmdW5jdGlvbiBubGIoKXt0aGlzLmE9U0MoYUosTnFlLDEsOCw1LDEpfQpmdW5jdGlvbiB5UmQoKXt0aGlzLkJifD0yNTY7dGhpcy5CYnw9NTEyfQpmdW5jdGlvbiBDSGQoYSl7dGhpcy5pPWE7dGhpcy5mPXRoaXMuaS5qfQpmdW5jdGlvbiBscWUoYSl7dGhpcy5jPWE7dGhpcy5hPXRoaXMuYy5hfQpmdW5jdGlvbiB4ZihhLGIpe3RoaXMuYT1hO3BmLmNhbGwodGhpcyxiKX0KZnVuY3Rpb24gRWIoYSxiKXtyZXR1cm4gRGIoYSxuZXcgVWdiLGIpLmF9CmZ1bmN0aW9uIExiKGEpe2lmKCFhKXt0aHJvdyBzY2IobmV3IFNlYil9fQpmdW5jdGlvbiBVYihhKXtpZighYSl7dGhyb3cgc2NiKG5ldyBWZWIpfX0KZnVuY3Rpb24gSHdiKCl7SHdiPVpjYjtId2IoKTtHd2I9bmV3IE93Yn0KZnVuY3Rpb24gQWZlKCl7QWZlPVpjYjtfZGUoKTt6ZmU9bmV3IEJmZX0KZnVuY3Rpb24geXViKCl7eXViPVpjYjt4dWI9bmV3IEN1YihudWxsKX0KZnVuY3Rpb24gbENkKGEpe3d1YihhLEpEZSk7VHRkKGEsZkNkKGEpKX0KZnVuY3Rpb24gTElkKGEpe2EuYT1KRChDcmQoYS5iLmEsNCksMTI4KX0KZnVuY3Rpb24gVElkKGEpe2EuYT1KRChDcmQoYS5iLmEsNCksMTI4KX0KZnVuY3Rpb24gS2coYSl7YS5iLlFiKCk7LS1hLmQuZi5kO2hnKGEuZCl9CmZ1bmN0aW9uIFhqKGEpe3RoaXMuYT1hO3lqLmNhbGwodGhpcyxhLmQpfQpmdW5jdGlvbiBnaihhLGIpe3RoaXMuYT1hO3BjLmNhbGwodGhpcyxiKX0KZnVuY3Rpb24gcWooYSxiKXt0aGlzLmE9YTtwYy5jYWxsKHRoaXMsYil9CmZ1bmN0aW9uIFBqKGEsYil7dGhpcy5hPWE7cGMuY2FsbCh0aGlzLGIpfQpmdW5jdGlvbiBHbChhLGIpe3RoaXMuYT1iO3BjLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gWW8oYSxiKXt0aGlzLmE9YjtUby5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHdwKGEsYil7dGhpcy5hPWE7VG8uY2FsbCh0aGlzLGIpfQpmdW5jdGlvbiBVcihhLGIpe3RoaXMuYT1iO1ByLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gYXcoYSxiKXt0aGlzLmE9YjtQci5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIElyKGEsYil7UWIoYik7cmV0dXJuIG5ldyBVcihhLGIpfQpmdW5jdGlvbiBudShhLGIpe3JldHVybiBuZXcgS3UoYS5hLGEuYixiKX0KZnVuY3Rpb24ga2diKGEsYil7cmV0dXJuIGEubGFzdEluZGV4T2YoYil9CmZ1bmN0aW9uIGlnYihhLGIsYyl7cmV0dXJuIGEuaW5kZXhPZihiLGMpfQpmdW5jdGlvbiB4Z2IoYSl7cmV0dXJuIGE9PW51bGw/UnFlOmFkYihhKX0KZnVuY3Rpb24gd3ooYSl7cmV0dXJuIGE9PW51bGw/bnVsbDphLm5hbWV9CmZ1bmN0aW9uIGlEKGEpe3JldHVybiBhLmwrYS5tKkNzZSthLmgqRHNlfQpmdW5jdGlvbiBDcihhKXtyZXR1cm4gVHRiKGEuYSk/QnIoYSk6bnVsbH0KZnVuY3Rpb24gYmwoYSl7T2suY2FsbCh0aGlzLEpEKFFiKGEpLDM0KSl9CmZ1bmN0aW9uIHJsKGEpe09rLmNhbGwodGhpcyxKRChRYihhKSwzNCkpfQpmdW5jdGlvbiBKZ2IoYSl7aWRiLmNhbGwodGhpcywodERiKGEpLGEpKX0KZnVuY3Rpb24gV2diKGEpe2lkYi5jYWxsKHRoaXMsKHREYihhKSxhKSl9CmZ1bmN0aW9uIHh0YihhKXtUcmIuY2FsbCh0aGlzLG5ldyBZc2IoYSkpfQpmdW5jdGlvbiBLb2IoYSl7b29iLmNhbGwodGhpcyxhKTt0aGlzLmE9YX0KZnVuY3Rpb24gWm9iKGEpe0ZvYi5jYWxsKHRoaXMsYSk7dGhpcy5hPWF9CmZ1bmN0aW9uICRwYihhKXtBcGIuY2FsbCh0aGlzLGEpO3RoaXMuYT1hfQpmdW5jdGlvbiBleigpe1l5KHRoaXMpOyR5KHRoaXMpO3RoaXMuaGUoKX0KZnVuY3Rpb24gcnliKGEpe3RoaXMuYT1hO0drYi5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uIHp1YihhKXtyRGIoYS5hIT1udWxsKTtyZXR1cm4gYS5hfQpmdW5jdGlvbiBmRWIoYSxiKXtJbGIoYi5hLGEuYSk7cmV0dXJuIGEuYX0KZnVuY3Rpb24gbEViKGEsYil7SWxiKGIuYixhLmEpO3JldHVybiBhLmF9CmZ1bmN0aW9uIHBHYihhLGIpe0lsYihiLmEsYS5hKTtyZXR1cm4gYS5hfQpmdW5jdGlvbiBUZ2IoYSxiLGMpe2dkYihhLGIsYixjKTtyZXR1cm4gYX0KZnVuY3Rpb24gUUZiKGEsYil7KythLmI7cmV0dXJuIElsYihhLmEsYil9CmZ1bmN0aW9uIFJGYihhLGIpeysrYS5iO3JldHVybiBQbGIoYS5hLGIpfQpmdW5jdGlvbiBZS2IoYSxiKXtyZXR1cm4gSGViKGEuYy5kLGIuYy5kKX0KZnVuY3Rpb24gaUxiKGEsYil7cmV0dXJuIEhlYihhLmMuYyxiLmMuYyl9CmZ1bmN0aW9uIFEyYihhLGIpe3JldHVybiBIZWIoYS5uLmEsYi5uLmEpfQpmdW5jdGlvbiBMVGIoYSxiKXtyZXR1cm4gSkQoUWMoYS5iLGIpLDE1KX0KZnVuY3Rpb24gVjNiKGEsYil7cmV0dXJuIGEubi5iPSh0RGIoYiksYil9CmZ1bmN0aW9uIFczYihhLGIpe3JldHVybiBhLm4uYj0odERiKGIpLGIpfQpmdW5jdGlvbiBycmIoYSxiKXtyZXR1cm4gISFiJiZhLmJbYi5nXT09Yn0KZnVuY3Rpb24gd1piKGEpe3JldHVybiBvbWIoYS5hKXx8b21iKGEuYil9CmZ1bmN0aW9uIGpEYihhKXtyZXR1cm4gYS4kSHx8KGEuJEg9KytoRGIpfQpmdW5jdGlvbiBCdWIoYSl7cmV0dXJuIGEuYSE9bnVsbD9hLmE6bnVsbH0KZnVuY3Rpb24geFJjKGEsYil7cmV0dXJuIEhlYihhLmUuYixiLmUuYil9CmZ1bmN0aW9uIEZSYyhhLGIpe3JldHVybiBIZWIoYS5lLmEsYi5lLmEpfQpmdW5jdGlvbiBhemMoYSxiLGMpe3JldHVybiBiemMoYSxiLGMsYS5iKX0KZnVuY3Rpb24gZHpjKGEsYixjKXtyZXR1cm4gYnpjKGEsYixjLGEuYyl9CmZ1bmN0aW9uIEk5YyhhLGIsYyl7SkQoXzhjKGEsYiksMjIpLkVjKGMpfQpmdW5jdGlvbiBTUWIoYSxiKXtUUWIuY2FsbCh0aGlzLGEsYixudWxsKX0KZnVuY3Rpb24ganBkKGEsYil7VG9kKCk7dGhpcy5mPWI7dGhpcy5kPWF9CmZ1bmN0aW9uIGxkYygpe2pkYygpO3RoaXMuYj1uZXcgcmRjKHRoaXMpfQpmdW5jdGlvbiBZZGMoYSl7QWRjKCk7cmV0dXJuICEhYSYmIWEuZGMoKX0KZnVuY3Rpb24gRXVkKGEpe1JEKGEsMTU3KSYmSkQoYSwxNTcpLmxpKCl9CmZ1bmN0aW9uIHRLZChhLGIsYyl7c0pkKGEuYSxjKTtySmQoYS5hLGIpfQpmdW5jdGlvbiBqJGQoYSxiKXtnJGQoKTt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gSyRkKGEsYil7RSRkKCk7dGhpcy5iPWE7dGhpcy5jPWJ9CmZ1bmN0aW9uIHFjKGEsYil7U2IoYixhKTt0aGlzLmQ9YTt0aGlzLmM9Yn0KZnVuY3Rpb24gUTFiKGEpe3ZhciBiO2I9YS5hO2EuYT1hLmI7YS5iPWJ9CmZ1bmN0aW9uIHhkYigpe3hkYj1aY2I7dmRiPWZhbHNlO3dkYj10cnVlfQpmdW5jdGlvbiBFS2IoKXtFS2I9WmNiO0RLYj1uZXcgTEJkKGp1ZSwwKX0KZnVuY3Rpb24gc29lKGEpeysrbm9lO3JldHVybiBuZXcgZHBlKDMsYSl9CmZ1bmN0aW9uIEJzKGEpe3ZzKCk7cmV0dXJuIHNzKChFcygpLERzKSxhKX0KZnVuY3Rpb24gcm0oYSxiKXtyZXR1cm4gbmV3IGJxKGEsYS5nYygpLGIpfQpmdW5jdGlvbiB4aihhLGIpe3JldHVybiBlbihhLmMpLktkKCkuWGIoYil9CmZ1bmN0aW9uIGdnYihhLGIsYyl7cmV0dXJuIGlnYihhLHdnYihiKSxjKX0KZnVuY3Rpb24gSWcoYSxiLGMsZCl7d2cuY2FsbCh0aGlzLGEsYixjLGQpfQpmdW5jdGlvbiBMSGQoYSl7dGhpcy5kPWE7Q0hkLmNhbGwodGhpcyxhKX0KZnVuY3Rpb24gWEhkKGEpe3RoaXMuYz1hO0NIZC5jYWxsKHRoaXMsYSl9CmZ1bmN0aW9uICRIZChhKXt0aGlzLmM9YTtMSGQuY2FsbCh0aGlzLGEpfQpmdW5jdGlvbiBodGIoYSl7aXRiLmNhbGwodGhpcyxhLG51bGwsbnVsbCl9CmZ1bmN0aW9uIHFsYihhKXtpZighYSl7dGhyb3cgc2NiKG5ldyB5cWIpfX0KZnVuY3Rpb24gYXYoYSl7YmsoYSxEcmUpO3JldHVybiBuZXcgVmxiKGEpfQpmdW5jdGlvbiBGdGIoYSl7ckRiKGEuYiE9MCk7cmV0dXJuIGEuYy5iLmN9CmZ1bmN0aW9uIEV0YihhKXtyRGIoYS5iIT0wKTtyZXR1cm4gYS5hLmEuY30KZnVuY3Rpb24gR2diKGEsYil7Z2RiKGEsYixiKzEsJycpO3JldHVybiBhfQpmdW5jdGlvbiBkdShhLGIsYyl7dmFyIGQ7ZD1hLmRkKGIpO2QuUmIoYyl9CmZ1bmN0aW9uIGp5YihhKXtyZXR1cm4gYS5iPUpEKHNqYihhLmEpLDQzKX0KZnVuY3Rpb24ga3MoYSl7cmV0dXJuIGEuZiE9bnVsbD9hLmY6JycrYS5nfQpmdW5jdGlvbiBscyhhKXtyZXR1cm4gYS5mIT1udWxsP2EuZjonJythLmd9CmZ1bmN0aW9uIElOYihhLGIpe3JldHVybiBhPjA/Yi8oYSphKTpiKjEwMH0KZnVuY3Rpb24gUE5iKGEsYil7cmV0dXJuIGE+MD9iKmIvYTpiKmIqMTAwfQpmdW5jdGlvbiBYTWIoYSxiKXtyZXR1cm4gISFhLnEmJkxpYihhLnEsYil9CmZ1bmN0aW9uIGtfYihhLGIpe3JldHVybiBKRChUc2IoYS5hLGIpLDM0KX0KZnVuY3Rpb24gYkEoYSl7WnooKTtyZXR1cm4gcGFyc2VJbnQoYSl8fC0xfQpmdW5jdGlvbiBDaGMoYSxiKXtqaGMoKTtyZXR1cm4gUmMoYSxiLmUsYil9CmZ1bmN0aW9uIFF3YyhhLGIsYyl7SndjKCk7cmV0dXJuIGMuS2coYSxiKX0KZnVuY3Rpb24gT1djKGEpe0VXYygpO3JldHVybiBhLmUuYSthLmYuYS8yfQpmdW5jdGlvbiBRV2MoYSxiLGMpe0VXYygpO3JldHVybiBjLmUuYS1hKmJ9CmZ1bmN0aW9uIFlXYyhhKXtFV2MoKTtyZXR1cm4gYS5lLmIrYS5mLmIvMn0KZnVuY3Rpb24gJFdjKGEsYixjKXtFV2MoKTtyZXR1cm4gYy5lLmItYSpifQpmdW5jdGlvbiBrRGIoYSl7aWYoIWEpe3Rocm93IHNjYihuZXcgU2ViKX19CmZ1bmN0aW9uIHhEYihhKXtpZighYSl7dGhyb3cgc2NiKG5ldyBWZWIpfX0KZnVuY3Rpb24gb0RiKGEpe2lmKCFhKXt0aHJvdyBzY2IobmV3IHBkYil9fQpmdW5jdGlvbiByRGIoYSl7aWYoIWEpe3Rocm93IHNjYihuZXcgcXViKX19CmZ1bmN0aW9uIFFzYihhKXthLmQ9bmV3IGh0YihhKTthLmU9bmV3IElyYn0KZnVuY3Rpb24gQVpjKCl7dGhpcy5hPW5ldyBQcDt0aGlzLmI9bmV3IFBwfQpmdW5jdGlvbiBHZmMoYSl7dGhpcy5jPWE7dGhpcy5hPTE7dGhpcy5iPTF9CmZ1bmN0aW9uIE11YihhKXtIdWIoKTt0aGlzLmI9YTt0aGlzLmE9dHJ1ZX0KZnVuY3Rpb24gVXViKGEpe1J1YigpO3RoaXMuYj1hO3RoaXMuYT10cnVlfQpmdW5jdGlvbiBNVGIoYSl7SlRiKCk7S1RiKHRoaXMpO3RoaXMuRGYoYSl9CmZ1bmN0aW9uIFRkZChhKXtNdGIuY2FsbCh0aGlzKTtNZGQodGhpcyxhKX0KZnVuY3Rpb24gVDVjKCl7bXMuY2FsbCh0aGlzLCdHUk9XX1RSRUUnLDApfQpmdW5jdGlvbiBpbWQoYSl7dGhpcy5jPWE7aHRkKGEsMCk7aXRkKGEsMCl9CmZ1bmN0aW9uIHRkZChhKXthLmE9LWEuYTthLmI9LWEuYjtyZXR1cm4gYX0KZnVuY3Rpb24gemRkKGEsYil7YS5hPWIuYTthLmI9Yi5iO3JldHVybiBhfQpmdW5jdGlvbiBsZGQoYSxiLGMpe2EuYSs9YjthLmIrPWM7cmV0dXJuIGF9CmZ1bmN0aW9uIEFkZChhLGIsYyl7YS5hLT1iO2EuYi09YztyZXR1cm4gYX0KZnVuY3Rpb24gVDljKGEsYixjKXtQOWMoKTthLm5mKGIpJiZjLkFkKGEpfQpmdW5jdGlvbiBlOWMoYSxiLGMpe3JldHVybiBJbGIoYixnOWMoYSxjKSl9CmZ1bmN0aW9uIG1KZChhLGIpe3JldHVybiBhLmMuRWMoSkQoYiwxMzUpKX0KZnVuY3Rpb24gbXlkKGEsYil7cmV0dXJuIEpEKE5pYihhLmUsYiksMjcpfQpmdW5jdGlvbiBueWQoYSxiKXtyZXR1cm4gSkQoTmliKGEuZSxiKSwyNyl9CmZ1bmN0aW9uIGxSZChhLGIsYyl7WVFkLmNhbGwodGhpcyxhLGIsYywyKX0KZnVuY3Rpb24gJCRkKGEsYil7RSRkKCk7WSRkLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBZJGQoYSxiKXtFJGQoKTtLJGQuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGFfZChhLGIpe0UkZCgpO0skZC5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24geiRkKGEsYil7ZyRkKCk7aiRkLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBzNGQoYSxiKXtOMmQoKTtnNGQuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIEk0ZChhLGIpe04yZCgpO2c0ZC5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24gUTRkKGEsYil7TjJkKCk7ZzRkLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiB1NGQoYSxiKXtOMmQoKTtzNGQuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIHc0ZChhLGIpe04yZCgpO3M0ZC5jYWxsKHRoaXMsYSxiKX0KZnVuY3Rpb24geTRkKGEsYil7TjJkKCk7dzRkLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBLNGQoYSxiKXtOMmQoKTtJNGQuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIE1YZChhLGIsYyl7c0NkKE9UZChhLmEpLGIsUVhkKGMpKX0KZnVuY3Rpb24gVl9kKGEsYixjKXtzQ2QoSl9kKGEuYSksYixaX2QoYykpfQpmdW5jdGlvbiBwYWUoYSxiLGMpe3JldHVybiBPYWUoaWFlKGEsYiksYyl9CmZ1bmN0aW9uIEdiZShhLGIsYyl7cmV0dXJuIGIud2woYS5lLGEuYyxjKX0KZnVuY3Rpb24gSWJlKGEsYixjKXtyZXR1cm4gYi54bChhLmUsYS5jLGMpfQpmdW5jdGlvbiBWYmUoYSxiKXtyZXR1cm4genFkKGEuZSxKRChiLDUyKSl9CmZ1bmN0aW9uIE9wZShhLGIpe3JldHVybiAodERiKGEpLGEpK0hkYihiKX0KZnVuY3Rpb24gQmllKGEpe3JldHVybiBhPT1udWxsP251bGw6YWRiKGEpfQpmdW5jdGlvbiBDaWUoYSl7cmV0dXJuIGE9PW51bGw/bnVsbDphZGIoYSl9CmZ1bmN0aW9uIHVpZShhKXtyZXR1cm4gYT09bnVsbD9udWxsOldsZShhKX0KZnVuY3Rpb24geWllKGEpe3JldHVybiBhPT1udWxsP251bGw6Ym1lKGEpfQpmdW5jdGlvbiBjZWIoYSl7aWYoYS5vIT1udWxsKXtyZXR1cm59c2ViKGEpfQpmdW5jdGlvbiBMRChhKXtCRGIoYT09bnVsbHx8U0QoYSkpO3JldHVybiBhfQpmdW5jdGlvbiBNRChhKXtCRGIoYT09bnVsbHx8VEQoYSkpO3JldHVybiBhfQpmdW5jdGlvbiBPRChhKXtCRGIoYT09bnVsbHx8VkQoYSkpO3JldHVybiBhfQpmdW5jdGlvbiBvQihhKXt0aGlzLnE9bmV3ICR3bmQuRGF0ZShPY2IoYSkpfQpmdW5jdGlvbiBLZihhLGIpe3RoaXMuYz1hO21lLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBTZihhLGIpe3RoaXMuYT1hO0tmLmNhbGwodGhpcyxhLGIpfQpmdW5jdGlvbiBOZyhhLGIpe3RoaXMuZD1hO0pnKHRoaXMpO3RoaXMuYj1ifQpmdW5jdGlvbiBWQWIoYSxiKXtNQWIuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifQpmdW5jdGlvbiBuQmIoYSxiKXtNQWIuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifQpmdW5jdGlvbiB5MWQoKXthU2QuY2FsbCh0aGlzKTt0aGlzLkJifD1Qc2V9CmZ1bmN0aW9uIF9nKGEsYixjKXtqZy5jYWxsKHRoaXMsYSxiLGMsbnVsbCl9CmZ1bmN0aW9uIGRoKGEsYixjKXtqZy5jYWxsKHRoaXMsYSxiLGMsbnVsbCl9CmZ1bmN0aW9uIHZ6YihhLGIsYyl7cmV0dXJuIGEuTGUoYixjKTw9MD9jOmJ9CmZ1bmN0aW9uIHd6YihhLGIsYyl7cmV0dXJuIGEuTGUoYixjKTw9MD9iOmN9CmZ1bmN0aW9uIEFkYihhKXtyZXR1cm4gKHREYihhKSxhKT8xMjMxOjEyMzd9CmZ1bmN0aW9uIHpmYyhhKXtyZXR1cm4gSkQoTWxiKGEuYSxhLmIpLDI5Mil9CmZ1bmN0aW9uIEdhZChhLGIpe3JldHVybiBKRChUc2IoYS5iLGIpLDE0OSl9CmZ1bmN0aW9uIElhZChhLGIpe3JldHVybiBKRChUc2IoYS5jLGIpLDIzMil9CmZ1bmN0aW9uIFpjZChhKXtyZXR1cm4gbmV3IEVkZChhLmMsYS5kK2EuYSl9CmZ1bmN0aW9uIEhKYyhhKXtyZXR1cm4gZ0ljKCksQXhjKEpEKGEsMjAzKSl9CmZ1bmN0aW9uIGFLYigpe2FLYj1aY2I7X0piPW1yYigoeWtkKCkseGtkKSl9CmZ1bmN0aW9uIHhZYygpe3hZYz1aY2I7d1ljPW5ldyBLQmQoJ3Jvb3QnKX0KZnVuY3Rpb24gR0xkKCl7R0xkPVpjYjtGTGQ9bmV3IGdNZDtuZXcgSE1kfQpmdW5jdGlvbiBNdGQoYSxiLGMpe2M9YnFkKGEsYiwzLGMpO3JldHVybiBjfQpmdW5jdGlvbiBkdWQoYSxiLGMpe2M9YnFkKGEsYiw2LGMpO3JldHVybiBjfQpmdW5jdGlvbiBteGQoYSxiLGMpe2M9YnFkKGEsYiw5LGMpO3JldHVybiBjfQpmdW5jdGlvbiBiSWIoYSxiKXt3dWIoYixidWUpO2EuZj1iO3JldHVybiBhfQpmdW5jdGlvbiBfJGIoYSxiKXtUJGIoKTtyZXR1cm4geFhiKGIuZC5pLGEpfQpmdW5jdGlvbiBENmIoYSxiKXtrNmIoKTtyZXR1cm4gbmV3IEs2YihiLGEpfQpmdW5jdGlvbiBZemIoYSxiKXtpZihUemIpe3JldHVybn1JbGIoYS5hLGIpfQpmdW5jdGlvbiBnTWIoYSxiKXtiLmE/aE1iKGEsYik6a3piKGEuYSxiLmIpfQpmdW5jdGlvbiB6RWQoYSxiLGMpeysrYS5qO2EucWooKTt4Q2QoYSxiLGMpfQpmdW5jdGlvbiB4RWQoYSxiLGMpeysrYS5qO2EubmooYixhLldpKGIsYykpfQpmdW5jdGlvbiBXWmQoYSxiLGMpe3ZhciBkO2Q9YS5kZChiKTtkLlJiKGMpfQpmdW5jdGlvbiBXZmUoYSxiLGMpe3JldHVybiB2YmUoYS5jLGEuYixiLGMpfQpmdW5jdGlvbiB1eWQoYSxiKXtyZXR1cm4gSkQoTmliKGEuYixiKSwyNzUpfQpmdW5jdGlvbiBBSmQoYSxiKXtyZXR1cm4gKGImSHFlKSVhLmQubGVuZ3RofQpmdW5jdGlvbiBuMmQoYSxiKXtlMmQuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifQpmdW5jdGlvbiBsNWQoYSxiKXtlMmQuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifQpmdW5jdGlvbiBMQmQoYSxiKXtLQmQuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifQpmdW5jdGlvbiB3SGQoYSxiKXt0aGlzLmM9YTt3RGQuY2FsbCh0aGlzLGIpfQpmdW5jdGlvbiBSWGQoYSxiKXt0aGlzLmE9YTtqWGQuY2FsbCh0aGlzLGIpfQpmdW5jdGlvbiAkX2QoYSxiKXt0aGlzLmE9YTtqWGQuY2FsbCh0aGlzLGIpfQpmdW5jdGlvbiBkcShhKXt0aGlzLmE9KGJrKGEsRHJlKSxuZXcgVmxiKGEpKX0KZnVuY3Rpb24ga3EoYSl7dGhpcy5hPShiayhhLERyZSksbmV3IFZsYihhKSl9CmZ1bmN0aW9uIHdmYihhKXtyZXR1cm4gUGNiKExjYihhLDMyKSleUGNiKGEpfQpmdW5jdGlvbiBQRChhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhKX0KZnVuY3Rpb24gdnooYSl7cmV0dXJuIGE9PW51bGw/bnVsbDphLm1lc3NhZ2V9CmZ1bmN0aW9uIEp6KGEsYixjKXtyZXR1cm4gYS5hcHBseShiLGMpO3ZhciBkfQpmdW5jdGlvbiBNcWIoYSxiLGMpe3JldHVybiBMcWIoYSxKRChiLDIzKSxjKX0KZnVuY3Rpb24gU2diKGEsYixjKXthLmErPXpnYihiLDAsYyk7cmV0dXJuIGF9CmZ1bmN0aW9uIGhrYihhLGIpe3ZhciBjO2M9YS5lO2EuZT1iO3JldHVybiBjfQpmdW5jdGlvbiB0a2IoYSxiKXt2YXIgYztjPWI7cmV0dXJuICEhYS5EZShjKX0KZnVuY3Rpb24gcXNiKGEsYil7dmFyIGM7Yz1hW2R0ZV07Yy5jYWxsKGEsYil9CmZ1bmN0aW9uIHJzYihhLGIpe3ZhciBjO2M9YVtkdGVdO2MuY2FsbChhLGIpfQpmdW5jdGlvbiB6amIoYSxiKXthLmEuX2MoYS5iLGIpOysrYS5iO2EuYz0tMX0KZnVuY3Rpb24gUnNiKGEpe1RpYihhLmUpO2EuZC5iPWEuZDthLmQuYT1hLmR9CmZ1bmN0aW9uIGZnKGEpe2EuYj9mZyhhLmIpOmEuZi5jLnljKGEuZSxhLmQpfQpmdW5jdGlvbiBUQShhKXshYS5hJiYoYS5hPW5ldyBiQik7cmV0dXJuIGEuYX0KZnVuY3Rpb24gbU5iKCl7dGhpcy5hPW5ldyBVbGI7dGhpcy5iPW5ldyBVbGJ9CmZ1bmN0aW9uIHVQYigpe3RoaXMuYT1uZXcgQ01iO3RoaXMuYj1uZXcgRlBifQpmdW5jdGlvbiBqRWIoKXt0aGlzLmI9bmV3IENkZDt0aGlzLmM9bmV3IFVsYn0KZnVuY3Rpb24gRlhiKCl7dGhpcy5uPW5ldyBDZGQ7dGhpcy5vPW5ldyBDZGR9CmZ1bmN0aW9uIGFIYigpe3RoaXMubj1uZXcgTFliO3RoaXMuaT1uZXcgZmRkfQpmdW5jdGlvbiBxX2IoKXt0aGlzLmI9bmV3IFhzYjt0aGlzLmE9bmV3IFhzYn0KZnVuY3Rpb24ga2JjKCl7dGhpcy5hPW5ldyBYamM7dGhpcy5iPW5ldyBwa2N9CmZ1bmN0aW9uIG1DYygpe3RoaXMuYj1uZXcgUXJiO3RoaXMuYT1uZXcgUXJifQpmdW5jdGlvbiBvSGMoKXt0aGlzLmE9bmV3IFVsYjt0aGlzLmQ9bmV3IFVsYn0KZnVuY3Rpb24gaVFjKCl7dGhpcy5iPW5ldyBXUGM7dGhpcy5hPW5ldyBMUGN9CmZ1bmN0aW9uIHlTYygpe3RoaXMuYj1uZXcgSXJiO3RoaXMuYT1uZXcgSXJifQpmdW5jdGlvbiBjSGIoKXthSGIuY2FsbCh0aGlzKTt0aGlzLmE9bmV3IENkZH0KZnVuY3Rpb24gX1hiKGEsYixjLGQpe1RYYi5jYWxsKHRoaXMsYSxiLGMsZCl9CmZ1bmN0aW9uIFVCYihhLGIsYyl7d0JiKCk7R0NiKGEsYi5UZShhLmEsYykpfQpmdW5jdGlvbiAkJGIoYSxiKXtUJGIoKTtyZXR1cm4gIXhYYihiLmQuaSxhKX0KZnVuY3Rpb24gQmRiKGEsYil7eGRiKCk7cmV0dXJuIGE9PWI/MDphPzE6LTF9CmZ1bmN0aW9uIFgzYihhLGIpe3JldHVybiBhLm4uYT0odERiKGIpLGIpKzEwfQpmdW5jdGlvbiBZM2IoYSxiKXtyZXR1cm4gYS5uLmE9KHREYihiKSxiKSsxMH0KZnVuY3Rpb24gVkNiKGEsYil7cmV0dXJuIGJEYihuZXcgQXJyYXkoYiksYSl9CmZ1bmN0aW9uIFlUZChhLGIpe3JldHVybiBiPT1hfHxtRGQoTlRkKGIpLGEpfQpmdW5jdGlvbiBTR2QoYSl7cmV0dXJuIGE8MTAwP251bGw6bmV3IEZHZChhKX0KZnVuY3Rpb24gSTVkKGEsYil7cmV0dXJuIFFpYihhLmEsYiwnJyk9PW51bGx9CmZ1bmN0aW9uIGFhZShhLGIpe3ZhciBjO2M9Yi5taShhLmEpO3JldHVybiBjfQpmdW5jdGlvbiBtZGQoYSxiKXthLmErPWIuYTthLmIrPWIuYjtyZXR1cm4gYX0KZnVuY3Rpb24gQmRkKGEsYil7YS5hLT1iLmE7YS5iLT1iLmI7cmV0dXJuIGF9CmZ1bmN0aW9uIFZ3ZChhLGIsYyl7Yz1icWQoYSxiLDExLGMpO3JldHVybiBjfQpmdW5jdGlvbiBIOWMoYSl7X0NiKGEuai5jLDApO2EuYT0tMTtyZXR1cm4gYX0KZnVuY3Rpb24gdWdjKGEsYil7VWdkKGEuZik/dmdjKGEsYik6d2djKGEsYil9CmZ1bmN0aW9uIEd5ZChhLGIsYyl7YyE9bnVsbCYmbXVkKGIsbHpkKGEsYykpfQpmdW5jdGlvbiBIeWQoYSxiLGMpe2MhPW51bGwmJm51ZChiLGx6ZChhLGMpKX0KZnVuY3Rpb24gXzBkKGEsYixjLGQpe1gwZC5jYWxsKHRoaXMsYSxiLGMsZCl9CmZ1bmN0aW9uIEpkZShhLGIsYyxkKXtYMGQuY2FsbCh0aGlzLGEsYixjLGQpfQpmdW5jdGlvbiBOZGUoYSxiLGMsZCl7SmRlLmNhbGwodGhpcyxhLGIsYyxkKX0KZnVuY3Rpb24gZ2VlKGEsYixjLGQpe2JlZS5jYWxsKHRoaXMsYSxiLGMsZCl9CmZ1bmN0aW9uIGllZShhLGIsYyxkKXtiZWUuY2FsbCh0aGlzLGEsYixjLGQpfQpmdW5jdGlvbiBvZWUoYSxiLGMsZCl7YmVlLmNhbGwodGhpcyxhLGIsYyxkKX0KZnVuY3Rpb24gbWVlKGEsYixjLGQpe2llZS5jYWxsKHRoaXMsYSxiLGMsZCl9CmZ1bmN0aW9uIHRlZShhLGIsYyxkKXtpZWUuY2FsbCh0aGlzLGEsYixjLGQpfQpmdW5jdGlvbiByZWUoYSxiLGMsZCl7b2VlLmNhbGwodGhpcyxhLGIsYyxkKX0KZnVuY3Rpb24gd2VlKGEsYixjLGQpe3RlZS5jYWxsKHRoaXMsYSxiLGMsZCl9CmZ1bmN0aW9uIFllZShhLGIsYyxkKXtSZWUuY2FsbCh0aGlzLGEsYixjLGQpfQpmdW5jdGlvbiB6SGQoYSxiKXttZGIuY2FsbCh0aGlzLElFZSthK09EZStiKX0KZnVuY3Rpb24gendiKGEsYil7QXdiLmNhbGwodGhpcyxhLGEubGVuZ3RoLGIpfQpmdW5jdGlvbiBhZmUoYSxiKXtyZXR1cm4gYS5naygpLnNpKCkubmkoYSxiKX0KZnVuY3Rpb24gYmZlKGEsYil7cmV0dXJuIGEuZ2soKS5zaSgpLnBpKGEsYil9CmZ1bmN0aW9uIGxDYihhLGIpe3JldHVybiBhLmIuemQobmV3IG9DYihhLGIpKX0KZnVuY3Rpb24gckNiKGEsYil7cmV0dXJuIGEuYi56ZChuZXcgdUNiKGEsYikpfQpmdW5jdGlvbiB4Q2IoYSxiKXtyZXR1cm4gYS5iLnpkKG5ldyBBQ2IoYSxiKSl9CmZ1bmN0aW9uIHprKGEsYil7cmV0dXJuIGEuZT1KRChhLmQuS2IoYiksMTU4KX0KZnVuY3Rpb24gbGdiKGEsYixjKXtyZXR1cm4gYS5sYXN0SW5kZXhPZihiLGMpfQpmdW5jdGlvbiBHUGIoYSxiLGMpe3JldHVybiBIZWIoYVtiLmFdLGFbYy5hXSl9CmZ1bmN0aW9uIGhqYyhhLGIpe3JldHVybiAkZWIoYS5hLmQucCxiLmEuZC5wKX0KZnVuY3Rpb24gaWpjKGEsYil7cmV0dXJuICRlYihiLmEuZC5wLGEuYS5kLnApfQpmdW5jdGlvbiBiUWIoYSxiKXtyZXR1cm4gWk1iKGIsKEJ3YygpLGd1YyksYSl9CmZ1bmN0aW9uIENlYihhLGIpe3JldHVybiB0RGIoYSksWEQoYSk9PT1YRChiKX0KZnVuY3Rpb24gY2diKGEsYil7cmV0dXJuIHREYihhKSxYRChhKT09PVhEKGIpfQpmdW5jdGlvbiB0UWMoYSxiKXtyZXR1cm4gSGViKGEuYi5lLmEsYi5iLmUuYSl9CmZ1bmN0aW9uIHZRYyhhLGIpe3JldHVybiBIZWIoYS5jLmUuYSxiLmMuZS5hKX0KZnVuY3Rpb24gQ05jKGEsYil7cmV0dXJuIEhlYihhLmMtYS5zLGIuYy1iLnMpfQpmdW5jdGlvbiBpWWIoYSl7cmV0dXJuICFhLmM/LTE6TmxiKGEuYy5hLGEsMCl9CmZ1bmN0aW9uIHdKZChhLGIpe3JldHVybiBSRChiLDE1KSYmeUNkKGEuYyxiKX0KZnVuY3Rpb24gYkFiKGEsYil7aWYoVHpiKXtyZXR1cm59ISFiJiYoYS5kPWIpfQpmdW5jdGlvbiBfSGQoYSxiKXt0aGlzLmM9YTtNSGQuY2FsbCh0aGlzLGEsYil9CmZ1bmN0aW9uIGJxKGEsYixjKXt0aGlzLmE9YTtxYy5jYWxsKHRoaXMsYixjKX0KZnVuY3Rpb24gWEJiKGEpe3RoaXMuYz1hO2x3Yi5jYWxsKHRoaXMsbXJlLDApfQpmdW5jdGlvbiBwayhhLGIsYyl7dGhpcy5jPWI7dGhpcy5iPWM7dGhpcy5hPWF9CmZ1bmN0aW9uIEdHYyhhKXtnR2MoKTt0aGlzLmQ9YTt0aGlzLmE9bmV3IG5sYn0KZnVuY3Rpb24gY28oYSl7WWwoKTt0aGlzLmE9KHBuYigpLG5ldyBBcGIoYSkpfQpmdW5jdGlvbiBoSWQoKXtoSWQ9WmNiO2dJZD1TQyhhSixOcWUsMSwwLDUsMSl9CmZ1bmN0aW9uIG1QZCgpe21QZD1aY2I7bFBkPVNDKGFKLE5xZSwxLDAsNSwxKX0KZnVuY3Rpb24gVFBkKCl7VFBkPVpjYjtTUGQ9U0MoYUosTnFlLDEsMCw1LDEpfQpmdW5jdGlvbiBZbCgpe1lsPVpjYjtuZXcgZm0oKHBuYigpLHBuYigpLG1uYikpfQpmdW5jdGlvbiBWYihhKXtpZighYSl7dGhyb3cgc2NiKG5ldyBXZWIoUHFlKSl9fQpmdW5jdGlvbiBNYihhLGIpe2lmKCFhKXt0aHJvdyBzY2IobmV3IFRlYihiKSl9fQpmdW5jdGlvbiBWUWQoYSxiLGMpe3JldHVybiBKRChhLmMsNzEpLlRrKGIsYyl9CmZ1bmN0aW9uIFdRZChhLGIsYyl7cmV0dXJuIEpEKGEuYyw3MSkuVWsoYixjKX0KZnVuY3Rpb24gSGJlKGEsYixjKXtyZXR1cm4gR2JlKGEsSkQoYiwzMzkpLGMpfQpmdW5jdGlvbiBKYmUoYSxiLGMpe3JldHVybiBJYmUoYSxKRChiLDMzOSksYyl9CmZ1bmN0aW9uIGJjZShhLGIsYyl7cmV0dXJuIGFjZShhLEpEKGIsMzM5KSxjKX0KZnVuY3Rpb24gZGNlKGEsYixjKXtyZXR1cm4gY2NlKGEsSkQoYiwzMzkpLGMpfQpmdW5jdGlvbiBCbihhLGIpe3JldHVybiBiPT1udWxsP251bGw6VHYoYS5iLGIpfQpmdW5jdGlvbiBiamQoYSl7cmV0dXJuIGE9PVdpZHx8YT09WWlkfHxhPT1YaWR9CmZ1bmN0aW9uIEhkYihhKXtyZXR1cm4gVEQoYSk/KHREYihhKSxhKTphLnNlKCl9CmZ1bmN0aW9uIEllYihhKXtyZXR1cm4gIWlzTmFOKGEpJiYhaXNGaW5pdGUoYSl9CmZ1bmN0aW9uIE50YihhKXt6dGIodGhpcyk7THRiKHRoaXMpO3hlKHRoaXMsYSl9CmZ1bmN0aW9uIFdsYihhKXtHbGIodGhpcyk7WENiKHRoaXMuYywwLGEuTmMoKSl9CmZ1bmN0aW9uIGt5YihhKXt0amIoYS5hKTtNeGIoYS5jLGEuYik7YS5iPW51bGx9CmZ1bmN0aW9uIFF6YihhKXt0aGlzLmE9YTtaZ2IoKTt6Y2IoRGF0ZS5ub3coKSl9CmZ1bmN0aW9uIHVyYihhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIEtzYihhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIFh0YihhLGIsYyl7dGhpcy5kPWE7dGhpcy5iPWM7dGhpcy5hPWJ9CmZ1bmN0aW9uIFRCYihhLGIsYyl7d0JiKCk7YS5hLldkKGIsYyk7cmV0dXJuIGJ9CmZ1bmN0aW9uIE5HYihhKXt2YXIgYjtiPW5ldyBNR2I7Yi5lPWE7cmV0dXJuIGJ9CmZ1bmN0aW9uIGtMYihhKXt2YXIgYjtiPW5ldyBoTGI7Yi5iPWE7cmV0dXJuIGJ9CmZ1bmN0aW9uIGt1Yigpe2t1Yj1aY2I7aXViPW5ldyBsdWI7anViPW5ldyBudWJ9CmZ1bmN0aW9uIHFEYihhLGIpe2lmKGEhPWIpe3Rocm93IHNjYihuZXcgeXFiKX19CmZ1bmN0aW9uIGtIYihhKXtpSGIoKTtyZXR1cm4gc3MoKG5IYigpLG1IYiksYSl9CmZ1bmN0aW9uIFJIYihhKXtQSGIoKTtyZXR1cm4gc3MoKFVIYigpLFRIYiksYSl9CmZ1bmN0aW9uIFd5YihhKXtTeWIoKTtyZXR1cm4gc3MoKGV6YigpLGR6YiksYSl9CmZ1bmN0aW9uIG5BYihhKXtsQWIoKTtyZXR1cm4gc3MoKHFBYigpLHBBYiksYSl9CmZ1bmN0aW9uIElJYihhKXtHSWIoKTtyZXR1cm4gc3MoKExJYigpLEtJYiksYSl9CmZ1bmN0aW9uIHhKYihhKXtzSmIoKTtyZXR1cm4gc3MoKEFKYigpLHpKYiksYSl9CmZ1bmN0aW9uIHpMYihhKXt4TGIoKTtyZXR1cm4gc3MoKENMYigpLEJMYiksYSl9CmZ1bmN0aW9uIERTYihhKXt4U2IoKTtyZXR1cm4gc3MoKEdTYigpLEZTYiksYSl9CmZ1bmN0aW9uIGRPYihhKXtiT2IoKTtyZXR1cm4gc3MoKGdPYigpLGZPYiksYSl9CmZ1bmN0aW9uIE1QYihhKXtLUGIoKTtyZXR1cm4gc3MoKFBQYigpLE9QYiksYSl9CmZ1bmN0aW9uIEVRYihhKXtDUWIoKTtyZXR1cm4gc3MoKEhRYigpLEdRYiksYSl9CmZ1bmN0aW9uIGVVYihhKXtjVWIoKTtyZXR1cm4gc3MoKGhVYigpLGdVYiksYSl9CmZ1bmN0aW9uIEZZYihhKXtEWWIoKTtyZXR1cm4gc3MoKElZYigpLEhZYiksYSl9CmZ1bmN0aW9uIGIyYihhKXtfMWIoKTtyZXR1cm4gc3MoKGUyYigpLGQyYiksYSl9CmZ1bmN0aW9uIHg1YihhKXt1NWIoKTtyZXR1cm4gc3MoKEE1YigpLHo1YiksYSl9CmZ1bmN0aW9uIGFZYihhKXtUWGIuY2FsbCh0aGlzLGEuZCxhLmMsYS5hLGEuYil9CmZ1bmN0aW9uIE5ZYihhKXtUWGIuY2FsbCh0aGlzLGEuZCxhLmMsYS5hLGEuYil9CmZ1bmN0aW9uIEw3YihhKXtJN2IoKTtyZXR1cm4gc3MoKE83YigpLE43YiksYSl9CmZ1bmN0aW9uIGUzYigpe2UzYj1aY2I7YzNiPW5ldyBuM2I7ZDNiPW5ldyBxM2J9CmZ1bmN0aW9uIGM4Yigpe2M4Yj1aY2I7YjhiPW5ldyByOGI7YThiPW5ldyB3OGJ9CmZ1bmN0aW9uIEFkYygpe0FkYz1aY2I7eWRjPW5ldyBiZWM7emRjPW5ldyBkZWN9CmZ1bmN0aW9uIFBXYihhLGIsYyl7dGhpcy5lPWI7dGhpcy5iPWE7dGhpcy5kPWN9CmZ1bmN0aW9uIFVMYihhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIHQwYihhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIEEzYihhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIFRWYihhLGIsYyl7dGhpcy5iPWE7dGhpcy5hPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIFI1YihhLGIsYyl7dGhpcy5iPWE7dGhpcy5hPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIG9LYihhLGIsYyl7dGhpcy5iPWE7dGhpcy5jPWI7dGhpcy5hPWN9CmZ1bmN0aW9uIGJoYyhhKXskZ2MoKTtyZXR1cm4gc3MoKGVoYygpLGRoYyksYSl9CmZ1bmN0aW9uIEtoYyhhKXtJaGMoKTtyZXR1cm4gc3MoKE5oYygpLE1oYyksYSl9CmZ1bmN0aW9uIEZnYyhhKXtEZ2MoKTtyZXR1cm4gc3MoKElnYygpLEhnYyksYSl9CmZ1bmN0aW9uIEZpYyhhKXtEaWMoKTtyZXR1cm4gc3MoKElpYygpLEhpYyksYSl9CmZ1bmN0aW9uIFBtYyhhKXtObWMoKTtyZXR1cm4gc3MoKFNtYygpLFJtYyksYSl9CmZ1bmN0aW9uIFhtYyhhKXtWbWMoKTtyZXR1cm4gc3MoKCRtYygpLFptYyksYSl9CmZ1bmN0aW9uIGhuYyhhKXtjbmMoKTtyZXR1cm4gc3MoKGtuYygpLGpuYyksYSl9CmZ1bmN0aW9uIHFuYyhhKXtvbmMoKTtyZXR1cm4gc3MoKHRuYygpLHNuYyksYSl9CmZ1bmN0aW9uIEVuYyhhKXt6bmMoKTtyZXR1cm4gc3MoKEhuYygpLEduYyksYSl9CmZ1bmN0aW9uIE1uYyhhKXtLbmMoKTtyZXR1cm4gc3MoKFBuYygpLE9uYyksYSl9CmZ1bmN0aW9uIFZuYyhhKXtUbmMoKTtyZXR1cm4gc3MoKFluYygpLFhuYyksYSl9CmZ1bmN0aW9uIGdvYyhhKXtkb2MoKTtyZXR1cm4gc3MoKGpvYygpLGlvYyksYSl9CmZ1bmN0aW9uIG9vYyhhKXttb2MoKTtyZXR1cm4gc3MoKHJvYygpLHFvYyksYSl9CmZ1bmN0aW9uIEFvYyhhKXt5b2MoKTtyZXR1cm4gc3MoKERvYygpLENvYyksYSl9CmZ1bmN0aW9uIE1vYyhhKXtLb2MoKTtyZXR1cm4gc3MoKFBvYygpLE9vYyksYSl9CmZ1bmN0aW9uIGFwYyhhKXskb2MoKTtyZXR1cm4gc3MoKGRwYygpLGNwYyksYSl9CmZ1bmN0aW9uIGpwYyhhKXtocGMoKTtyZXR1cm4gc3MoKG1wYygpLGxwYyksYSl9CmZ1bmN0aW9uIHNwYyhhKXtxcGMoKTtyZXR1cm4gc3MoKHZwYygpLHVwYyksYSl9CmZ1bmN0aW9uIEFwYyhhKXt5cGMoKTtyZXR1cm4gc3MoKERwYygpLENwYyksYSl9CmZ1bmN0aW9uIFFxYyhhKXtPcWMoKTtyZXR1cm4gc3MoKFRxYygpLFNxYyksYSl9CmZ1bmN0aW9uIFlxYyhhKXtXcWMoKTtyZXR1cm4gc3MoKF9xYygpLCRxYyksYSl9CmZ1bmN0aW9uIGh4YyhhKXtjeGMoKTtyZXR1cm4gc3MoKGt4YygpLGp4YyksYSl9CmZ1bmN0aW9uIHJ4YyhhKXtveGMoKTtyZXR1cm4gc3MoKHV4YygpLHR4YyksYSl9CmZ1bmN0aW9uIER4YyhhKXt6eGMoKTtyZXR1cm4gc3MoKEd4YygpLEZ4YyksYSl9CmZ1bmN0aW9uIFJ4YyhhKXtNeGMoKTtyZXR1cm4gc3MoKFV4YygpLFR4YyksYSl9CmZ1bmN0aW9uIGZ5YyhhKXtkeWMoKTtyZXR1cm4gc3MoKGl5YygpLGh5YyksYSl9CmZ1bmN0aW9uIHB5YyhhKXtueWMoKTtyZXR1cm4gc3MoKHN5YygpLHJ5YyksYSl9CmZ1bmN0aW9uIHh5YyhhKXt2eWMoKTtyZXR1cm4gc3MoKEF5YygpLHp5YyksYSl9CmZ1bmN0aW9uIEd5YyhhKXtFeWMoKTtyZXR1cm4gc3MoKEp5YygpLEl5YyksYSl9CmZ1bmN0aW9uIFB5YyhhKXtOeWMoKTtyZXR1cm4gc3MoKFN5YygpLFJ5YyksYSl9CmZ1bmN0aW9uIFl5YyhhKXtXeWMoKTtyZXR1cm4gc3MoKF95YygpLCR5YyksYSl9CmZ1bmN0aW9uIHF6YyhhKXtvemMoKTtyZXR1cm4gc3MoKHR6YygpLHN6YyksYSl9CmZ1bmN0aW9uIHp6YyhhKXt4emMoKTtyZXR1cm4gc3MoKEN6YygpLEJ6YyksYSl9CmZ1bmN0aW9uIEl6YyhhKXtHemMoKTtyZXR1cm4gc3MoKEx6YygpLEt6YyksYSl9CmZ1bmN0aW9uIFdFYyhhKXtVRWMoKTtyZXR1cm4gc3MoKFpFYygpLFlFYyksYSl9CmZ1bmN0aW9uIHhIYyhhKXt2SGMoKTtyZXR1cm4gc3MoKEFIYygpLHpIYyksYSl9CmZ1bmN0aW9uIEJLYyhhKXt6S2MoKTtyZXR1cm4gc3MoKEVLYygpLERLYyksYSl9CmZ1bmN0aW9uIEpLYyhhKXtIS2MoKTtyZXR1cm4gc3MoKE1LYygpLExLYyksYSl9CmZ1bmN0aW9uIGtOYyhhKXtpTmMoKTtyZXR1cm4gc3MoKG5OYygpLG1OYyksYSl9CmZ1bmN0aW9uIGlQYyhhKXtnUGMoKTtyZXR1cm4gc3MoKGxQYygpLGtQYyksYSl9CmZ1bmN0aW9uIGVRYyhhKXtfUGMoKTtyZXR1cm4gc3MoKGhRYygpLGdRYyksYSl9CmZ1bmN0aW9uIGFUYyhhKXtaU2MoKTtyZXR1cm4gc3MoKGRUYygpLGNUYyksYSl9CmZ1bmN0aW9uIFFUYyhhKXtPVGMoKTtyZXR1cm4gc3MoKFRUYygpLFNUYyksYSl9CmZ1bmN0aW9uIHhWYyhhKXt2VmMoKTtyZXR1cm4gc3MoKEFWYygpLHpWYyksYSl9CmZ1bmN0aW9uIEZWYyhhKXtEVmMoKTtyZXR1cm4gc3MoKElWYygpLEhWYyksYSl9CmZ1bmN0aW9uIEZZYyhhKXtBWWMoKTtyZXR1cm4gc3MoKElZYygpLEhZYyksYSl9CmZ1bmN0aW9uIG1aYyhhKXtqWmMoKTtyZXR1cm4gc3MoKHBaYygpLG9aYyksYSl9CmZ1bmN0aW9uIG0kYyhhKXtqJGMoKTtyZXR1cm4gc3MoKHAkYygpLG8kYyksYSl9CmZ1bmN0aW9uIGMkYyhhKXtfWmMoKTtyZXR1cm4gc3MoKGYkYygpLGUkYyksYSl9CmZ1bmN0aW9uIHBfYyhhKXttX2MoKTtyZXR1cm4gc3MoKHNfYygpLHJfYyksYSl9CmZ1bmN0aW9uIHpfYyhhKXt3X2MoKTtyZXR1cm4gc3MoKENfYygpLEJfYyksYSl9CmZ1bmN0aW9uIGswYyhhKXtpMGMoKTtyZXR1cm4gc3MoKG4wYygpLG0wYyksYSl9CmZ1bmN0aW9uIEcwYyhhKXtEMGMoKTtyZXR1cm4gc3MoKEowYygpLEkwYyksYSl9CmZ1bmN0aW9uIG4xYyhhKXtsMWMoKTtyZXR1cm4gc3MoKHExYygpLHAxYyksYSl9CmZ1bmN0aW9uIFQyYyhhKXtPMmMoKTtyZXR1cm4gc3MoKFcyYygpLFYyYyksYSl9CmZ1bmN0aW9uIHYzYyhhKXtxM2MoKTtyZXR1cm4gc3MoKHkzYygpLHgzYyksYSl9CmZ1bmN0aW9uIFczYyhhKXtSM2MoKTtyZXR1cm4gc3MoKFozYygpLFkzYyksYSl9CmZ1bmN0aW9uIFc1YyhhKXtTNWMoKTtyZXR1cm4gc3MoKFo1YygpLFk1YyksYSl9CmZ1bmN0aW9uIHk1YyhhKXt3NWMoKTtyZXR1cm4gc3MoKEI1YygpLEE1YyksYSl9CmZ1bmN0aW9uIE41YyhhKXtJNWMoKTtyZXR1cm4gc3MoKFE1YygpLFA1YyksYSl9CmZ1bmN0aW9uIEs0YyhhKXtJNGMoKTtyZXR1cm4gc3MoKE40YygpLE00YyksYSl9CmZ1bmN0aW9uIGM2YyhhKXthNmMoKTtyZXR1cm4gc3MoKGY2YygpLGU2YyksYSl9CmZ1bmN0aW9uIG42YyhhKXtsNmMoKTtyZXR1cm4gc3MoKHE2YygpLHA2YyksYSl9CmZ1bmN0aW9uIHU3YyhhKXtwN2MoKTtyZXR1cm4gc3MoKHg3YygpLHc3YyksYSl9CmZ1bmN0aW9uIEY3YyhhKXtBN2MoKTtyZXR1cm4gc3MoKEk3YygpLEg3YyksYSl9CmZ1bmN0aW9uIG5jZChhKXtsY2QoKTtyZXR1cm4gc3MoKHFjZCgpLHBjZCksYSl9CmZ1bmN0aW9uIEJjZChhKXt6Y2QoKTtyZXR1cm4gc3MoKEVjZCgpLERjZCksYSl9CmZ1bmN0aW9uIGVlZChhKXtjZWQoKTtyZXR1cm4gc3MoKGhlZCgpLGdlZCksYSl9CmZ1bmN0aW9uIEplZChhKXtIZWQoKTtyZXR1cm4gc3MoKE1lZCgpLExlZCksYSl9CmZ1bmN0aW9uIFlnZChhKXtUZ2QoKTtyZXR1cm4gc3MoKF9nZCgpLCRnZCksYSl9CmZ1bmN0aW9uIGdoZChhKXtlaGQoKTtyZXR1cm4gc3MoKGpoZCgpLGloZCksYSl9CmZ1bmN0aW9uIHBoZChhKXtuaGQoKTtyZXR1cm4gc3MoKHNoZCgpLHJoZCksYSl9CmZ1bmN0aW9uIHpoZChhKXt4aGQoKTtyZXR1cm4gc3MoKENoZCgpLEJoZCksYSl9CmZ1bmN0aW9uIExoZChhKXtKaGQoKTtyZXR1cm4gc3MoKE9oZCgpLE5oZCksYSl9CmZ1bmN0aW9uIGdpZChhKXtlaWQoKTtyZXR1cm4gc3MoKGppZCgpLGlpZCksYSl9CmZ1bmN0aW9uIHJpZChhKXtvaWQoKTtyZXR1cm4gc3MoKHVpZCgpLHRpZCksYSl9CmZ1bmN0aW9uIEhpZChhKXtFaWQoKTtyZXR1cm4gc3MoKEtpZCgpLEppZCksYSl9CmZ1bmN0aW9uIFNpZChhKXtRaWQoKTtyZXR1cm4gc3MoKFZpZCgpLFVpZCksYSl9CmZ1bmN0aW9uIGVqZChhKXthamQoKTtyZXR1cm4gc3MoKGhqZCgpLGdqZCksYSl9CmZ1bmN0aW9uIHNqZChhKXtvamQoKTtyZXR1cm4gc3MoKHZqZCgpLHVqZCksYSl9CmZ1bmN0aW9uIFhqZChhKXtSamQoKTtyZXR1cm4gc3MoKCRqZCgpLFpqZCksYSl9CmZ1bmN0aW9uIHFrZChhKXtva2QoKTtyZXR1cm4gc3MoKHRrZCgpLHNrZCksYSl9CmZ1bmN0aW9uIEFrZChhKXt5a2QoKTtyZXR1cm4gc3MoKERrZCgpLENrZCksYSl9CmZ1bmN0aW9uIFBrZChhKXtOa2QoKTtyZXR1cm4gc3MoKFNrZCgpLFJrZCksYSl9CmZ1bmN0aW9uIFlrZChhKXtXa2QoKTtyZXR1cm4gc3MoKF9rZCgpLCRrZCksYSl9CmZ1bmN0aW9uIGVsZChhKXtjbGQoKTtyZXR1cm4gc3MoKG1sZCgpLGxsZCksYSl9CmZ1bmN0aW9uIHFtZChhKXtvbWQoKTtyZXR1cm4gc3MoKHRtZCgpLHNtZCksYSl9CmZ1bmN0aW9uIGRvZChhKXtib2QoKTtyZXR1cm4gc3MoKGdvZCgpLGZvZCksYSl9CmZ1bmN0aW9uIGptYyhhLGIpe3JldHVybiAodERiKGEpLGEpKyh0RGIoYiksYil9CmZ1bmN0aW9uIEVOYyhhLGIpe3RoaXMuYz1hO3RoaXMuYT1iO3RoaXMuYj1iLWF9CmZ1bmN0aW9uIHYyYyhhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIGo4YyhhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIHI4YyhhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIE1vZChhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIFRBZChhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIHVMZChhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIExBZChhLGIsYyl7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5iPWN9CmZ1bmN0aW9uIEIyZChhLGIsYyl7dGhpcy5lPWE7dGhpcy5hPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIEE0ZChhLGIsYyl7TjJkKCk7aDRkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIE00ZChhLGIsYyl7TjJkKCk7aDRkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIEM0ZChhLGIsYyl7TjJkKCk7QTRkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIEU0ZChhLGIsYyl7TjJkKCk7QTRkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIEc0ZChhLGIsYyl7TjJkKCk7RTRkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIE80ZChhLGIsYyl7TjJkKCk7TTRkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIFM0ZChhLGIsYyl7TjJkKCk7aDRkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIFU0ZChhLGIsYyl7TjJkKCk7UzRkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIGQzZChhLGIsYyl7TjJkKCk7WDJkLmNhbGwodGhpcyxhLGIsYyl9CmZ1bmN0aW9uIERCZChhKXtCQmQoKTtyZXR1cm4gc3MoKEdCZCgpLEZCZCksYSl9CmZ1bmN0aW9uIGVrKGEsYil7UWIoYSk7UWIoYik7cmV0dXJuIG5ldyBmayhhLGIpfQpmdW5jdGlvbiBfcShhLGIpe1FiKGEpO1FiKGIpO3JldHVybiBuZXcgaXIoYSxiKX0KZnVuY3Rpb24gZHIoYSxiKXtRYihhKTtRYihiKTtyZXR1cm4gbmV3IG9yKGEsYil9CmZ1bmN0aW9uIHpyKGEsYil7UWIoYSk7UWIoYik7cmV0dXJuIG5ldyBOcihhLGIpfQpmdW5jdGlvbiBKRChhLGIpe0JEYihhPT1udWxsfHxJRChhLGIpKTtyZXR1cm4gYX0KZnVuY3Rpb24gJHUoYSl7dmFyIGI7Yj1uZXcgVWxiO3RyKGIsYSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIFJ4KGEpe3ZhciBiO2I9bmV3IFFyYjt0cihiLGEpO3JldHVybiBifQpmdW5jdGlvbiBVeChhKXt2YXIgYjtiPW5ldyBsemI7WHEoYixhKTtyZXR1cm4gYn0KZnVuY3Rpb24gY3YoYSl7dmFyIGI7Yj1uZXcgTXRiO1hxKGIsYSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIHpEYyhhKXshYS5lJiYoYS5lPW5ldyBVbGIpO3JldHVybiBhLmV9CmZ1bmN0aW9uIExWZChhKXshYS5jJiYoYS5jPW5ldyBxNWQpO3JldHVybiBhLmN9CmZ1bmN0aW9uIGNsZCgpe2NsZD1aY2I7YWxkPW5ldyBobGQ7YmxkPW5ldyBqbGR9CmZ1bmN0aW9uIGdHYygpe2dHYz1aY2I7ZUdjPShSamQoKSxRamQpO2ZHYz13amR9CmZ1bmN0aW9uIEF3YihhLGIsYyl7b3diLmNhbGwodGhpcyxiLGMpO3RoaXMuYT1hfQpmdW5jdGlvbiBjQihhLGIpe3RoaXMuYz1hO3RoaXMuYj1iO3RoaXMuYT1mYWxzZX0KZnVuY3Rpb24gTWcoYSl7dGhpcy5kPWE7SmcodGhpcyk7dGhpcy5iPWVkKGEuZCl9CmZ1bmN0aW9uIERBYigpe3RoaXMuYT0nOyw7Jzt0aGlzLmI9Jyc7dGhpcy5jPScnfQpmdW5jdGlvbiBaQWIoYSxiLGMpe3RoaXMuYj1hO2R3Yi5jYWxsKHRoaXMsYixjKX0KZnVuY3Rpb24gaXRiKGEsYixjKXt0aGlzLmM9YTtva2IuY2FsbCh0aGlzLGIsYyl9CmZ1bmN0aW9uIFhDYihhLGIsYyl7VUNiKGMsMCxhLGIsYy5sZW5ndGgsZmFsc2UpfQpmdW5jdGlvbiBwU2IoYSxiLGMpe29TYi5jYWxsKHRoaXMsYSxiKTt0aGlzLmI9Y30KZnVuY3Rpb24gTlhiKGEsYixjLGQsZSl7YS5kPWI7YS5jPWM7YS5hPWQ7YS5iPWV9CmZ1bmN0aW9uIFRSYihhLGIsYyxkLGUpe2EuYj1iO2EuYz1jO2EuZD1kO2EuYT1lfQpmdW5jdGlvbiBXQmIoYSxiKXtpZihiKXthLmI9YjthLmE9KEtBYihiKSxiLmEpfX0KZnVuY3Rpb24gbERiKGEsYil7aWYoIWEpe3Rocm93IHNjYihuZXcgVGViKGIpKX19CmZ1bmN0aW9uIHlEYihhLGIpe2lmKCFhKXt0aHJvdyBzY2IobmV3IFdlYihiKSl9fQpmdW5jdGlvbiBwRGIoYSxiKXtpZighYSl7dGhyb3cgc2NiKG5ldyBxZGIoYikpfX0KZnVuY3Rpb24gWWpjKGEsYil7TGpjKCk7cmV0dXJuICRlYihhLmQucCxiLmQucCl9CmZ1bmN0aW9uIFdXYyhhLGIpe0VXYygpO3JldHVybiBIZWIoYS5lLmIsYi5lLmIpfQpmdW5jdGlvbiBYV2MoYSxiKXtFV2MoKTtyZXR1cm4gSGViKGEuZS5hLGIuZS5hKX0KZnVuY3Rpb24gSXRiKGEpe3JEYihhLmIhPTApO3JldHVybiBLdGIoYSxhLmEuYSl9CmZ1bmN0aW9uIEp0YihhKXtyRGIoYS5iIT0wKTtyZXR1cm4gS3RiKGEsYS5jLmIpfQpmdW5jdGlvbiBLMWIoYSl7dmFyIGIsYztiPWEuYjtjPWEuYzthLmI9YzthLmM9Yn0KZnVuY3Rpb24gTjFiKGEpe3ZhciBiLGM7Yz1hLmQ7Yj1hLmE7YS5kPWI7YS5hPWN9CmZ1bmN0aW9uIGRkZChhLGIsYyxkLGUpe2EuYz1iO2EuZD1jO2EuYj1kO2EuYT1lfQpmdW5jdGlvbiB4ZGQoYSxiKXt1ZGQoYSk7YS5hKj1iO2EuYio9YjtyZXR1cm4gYX0KZnVuY3Rpb24gdmxkKGEsYil7YjwwPyhhLmc9LTEpOihhLmc9Yik7cmV0dXJuIGF9CmZ1bmN0aW9uIGlWZChhLGIsYyl7RlVkLmNhbGwodGhpcyxhLGIpO3RoaXMuYz1jfQpmdW5jdGlvbiBVUGQoYSl7VFBkKCk7RlBkLmNhbGwodGhpcyk7dGhpcy4kaChhKX0KZnVuY3Rpb24gSVdkKGEsYixjKXt0aGlzLmE9YTtnV2QuY2FsbCh0aGlzLGIsYyl9CmZ1bmN0aW9uIE5XZChhLGIsYyl7dGhpcy5hPWE7Z1dkLmNhbGwodGhpcyxiLGMpfQpmdW5jdGlvbiBXeGQoYSxiLGMpe3ZhciBkO2Q9bmV3IEdDKGMpO2tDKGEsYixkKX0KZnVuY3Rpb24gUDFkKGEsYil7dmFyIGM7Yz1hLmM7TzFkKGEsYik7cmV0dXJuIGN9CmZ1bmN0aW9uIGRiZShhLGIsYyl7RlVkLmNhbGwodGhpcyxhLGIpO3RoaXMuYz1jfQpmdW5jdGlvbiByYWUoKXtNOWQoKTtzYWUuY2FsbCh0aGlzLChyT2QoKSxxT2QpKX0KZnVuY3Rpb24gSk5iKCl7dGhpcy5iPUJlYihNRChKQmQoKElPYigpLENPYikpKSl9CmZ1bmN0aW9uIExxKGEpe3RoaXMuYj1hO3RoaXMuYT1kbih0aGlzLmIuYSkuTWQoKX0KZnVuY3Rpb24gaXIoYSxiKXt0aGlzLmI9YTt0aGlzLmE9Yjt4bC5jYWxsKHRoaXMpfQpmdW5jdGlvbiBvcihhLGIpe3RoaXMuYT1hO3RoaXMuYj1iO3hsLmNhbGwodGhpcyl9CmZ1bmN0aW9uIHVpYyhhLGIpe3JldHVybiAkZWIoWlliKGEuZCksWlliKGIuZCkpfQpmdW5jdGlvbiB3eWIoYSxiKXtyZXR1cm4gISFiJiZ4eWIoYSxiLmQpP2I6bnVsbH0KZnVuY3Rpb24geGZjKGEsYil7cmV0dXJuIGI9PShSamQoKSxRamQpP2EuYzphLmR9CmZ1bmN0aW9uICRjZChhKXtyZXR1cm4gbmV3IEVkZChhLmMrYS5iLGEuZCthLmEpfQpmdW5jdGlvbiBfTmQoYSl7cmV0dXJuIGEhPW51bGwmJiFITmQoYSx2TmQsd05kKX0KZnVuY3Rpb24gQ2ZiKGEpe3JldHVybiBhPT0wfHxpc05hTihhKT9hOmE8MD8tMToxfQpmdW5jdGlvbiB0bihhLGIpe3JldHVybiBjbigpLGFrKGEsYiksbmV3IHJ5KGEsYil9CmZ1bmN0aW9uIFlOZChhLGIpe3JldHVybiAoY09kKGEpPDw0fGNPZChiKSkmV3JlfQpmdW5jdGlvbiBBdGIoYSxiKXtEdGIoYSxiLGEuYy5iLGEuYyk7cmV0dXJuIHRydWV9CmZ1bmN0aW9uIFRDYihhKXt2YXIgYjtiPWEuc2xpY2UoKTtyZXR1cm4gWEMoYixhKX0KZnVuY3Rpb24gYkhiKGEpe3ZhciBiO2I9YS5uO3JldHVybiBhLmEuYitiLmQrYi5hfQpmdW5jdGlvbiAkSGIoYSl7dmFyIGI7Yj1hLm47cmV0dXJuIGEuZS5iK2IuZCtiLmF9CmZ1bmN0aW9uIF9IYihhKXt2YXIgYjtiPWEubjtyZXR1cm4gYS5lLmErYi5iK2IuY30KZnVuY3Rpb24gcm9lKGEpe29vZSgpOysrbm9lO3JldHVybiBuZXcgYXBlKDAsYSl9CmZ1bmN0aW9uIFBmZSgpe1BmZT1aY2I7T2ZlPShwbmIoKSxuZXcgZG9iKGZHZSkpfQpmdW5jdGlvbiBsZmIoKXtsZmI9WmNiO2tmYj1TQyhVSSxocmUsMTcsMjU2LDAsMSl9CmZ1bmN0aW9uIHF4KCl7cXg9WmNiO25ldyBzeCgoaWwoKSxobCksKFVrKCksVGspKX0KZnVuY3Rpb24gVVJiKCl7VFJiKHRoaXMsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpfQpmdW5jdGlvbiBndGIoYSl7YS5hLmI9YS5iO2EuYi5hPWEuYTthLmE9YS5iPW51bGx9CmZ1bmN0aW9uIFhZYihhKXtyZXR1cm4gYS5lLmMubGVuZ3RoK2EuZy5jLmxlbmd0aH0KZnVuY3Rpb24gWlliKGEpe3JldHVybiBhLmUuYy5sZW5ndGgtYS5nLmMubGVuZ3RofQpmdW5jdGlvbiBSZ2MoYSl7cmV0dXJuIGEuYi5jLmxlbmd0aC1hLmUuYy5sZW5ndGh9CmZ1bmN0aW9uIEVmYyhhLGIpe3JldHVybiBhLmM8Yi5jPy0xOmEuYz09Yi5jPzA6MX0KZnVuY3Rpb24gdlViKGEsYil7cmV0dXJuIHVVYihhLG5ldyBvU2IoYi5hLGIuYikpfQpmdW5jdGlvbiBWT2MoYSxiLGMpe3JldHVybiBRaWIoYS5iLEpEKGMuYiwxOCksYil9CmZ1bmN0aW9uIFdPYyhhLGIsYyl7cmV0dXJuIFFpYihhLmIsSkQoYy5iLDE4KSxiKX0KZnVuY3Rpb24gWldjKGEsYixjKXtFV2MoKTtyZXR1cm4gYy5lLmIrYy5mLmIrYSpifQpmdW5jdGlvbiBQV2MoYSxiLGMpe0VXYygpO3JldHVybiBjLmUuYStjLmYuYSthKmJ9CmZ1bmN0aW9uIEdJYyhhKXtnSWMoKTtyZXR1cm4gKFJqZCgpLEJqZCkuR2MoYS5qKX0KZnVuY3Rpb24gR1hiKGEpe2lmKGEuYSl7cmV0dXJuIGEuYX1yZXR1cm4gX1ZiKGEpfQpmdW5jdGlvbiBCRGIoYSl7aWYoIWEpe3Rocm93IHNjYihuZXcgemViKG51bGwpKX19CmZ1bmN0aW9uIGpuZChhLGIpe3JldHVybiBJbGIoYSxuZXcgRWRkKGIuYSxiLmIpKX0KZnVuY3Rpb24gZFdiKGEpe3JldHVybiAhZVdiKGEpJiZhLmMuaS5jPT1hLmQuaS5jfQpmdW5jdGlvbiBjV2MoYSl7cmV0dXJuIFVWYygpLFNDKE5aLEl6ZSwzOSxhLDAsMSl9CmZ1bmN0aW9uIEI0YyhhLGIsYyxkKXtDNGMuY2FsbCh0aGlzLGEsYixjLGQsMCwwKX0KZnVuY3Rpb24gSmdlKGEsYil7WmZlLmNhbGwodGhpcyxhLGIpO3RoaXMuYT10aGlzfQpmdW5jdGlvbiB1d2IoYSxiKXtvd2IuY2FsbCh0aGlzLGIsMTA0MCk7dGhpcy5hPWF9CmZ1bmN0aW9uIGVRZChhKXtUUGQoKTtVUGQuY2FsbCh0aGlzLGEpO3RoaXMuYT0tMX0KZnVuY3Rpb24gaGxkKCl7ZGxkLmNhbGwodGhpcywnQ09VTlRfQ0hJTERSRU4nLDApfQpmdW5jdGlvbiBrZihhKXt0aGlzLmM9YTt0aGlzLmI9dGhpcy5jLmQudmMoKS5KYygpfQpmdW5jdGlvbiBiaihhKXtyZXR1cm4gYS5lLlBkKCkuZ2MoKSphLmMuUGQoKS5nYygpfQpmdW5jdGlvbiBkayhhLGIsYyl7cmV0dXJuIG5ldyBwayhnQmIoYSkuWmUoKSxjLGIpfQpmdW5jdGlvbiAkQ2IoYSxiLGMpe3ZhciBkO2Q9YVtiXTthW2JdPWM7cmV0dXJuIGR9CmZ1bmN0aW9uIGxlYihhLGIpe3ZhciBjO2M9aWViKGEsYik7Yy5pPTI7cmV0dXJuIGN9CmZ1bmN0aW9uIEJFZChhLGIpe3ZhciBjOysrYS5qO2M9YS56aihiKTtyZXR1cm4gY30KZnVuY3Rpb24gRTljKGEsYixjKXthLmE9LTE7STljKGEsYi5nLGMpO3JldHVybiBhfQpmdW5jdGlvbiBRQyhhLGIsYyxkLGUsZil7cmV0dXJuIFJDKGEsYixjLGQsZSwwLGYpfQpmdW5jdGlvbiBIUWQoYSxiKXtJUWQoYSxiPT1udWxsP251bGw6KHREYihiKSxiKSl9CmZ1bmN0aW9uIEwxZChhLGIpe04xZChhLGI9PW51bGw/bnVsbDoodERiKGIpLGIpKX0KZnVuY3Rpb24gTTFkKGEsYil7TjFkKGEsYj09bnVsbD9udWxsOih0RGIoYiksYikpfQpmdW5jdGlvbiBwdChhKXtpZihhLmMuZSE9YS5hKXt0aHJvdyBzY2IobmV3IHlxYil9fQpmdW5jdGlvbiB3dShhKXtpZihhLmUuYyE9YS5iKXt0aHJvdyBzY2IobmV3IHlxYil9fQpmdW5jdGlvbiB3cihhKXtRYihhKTt3aGlsZShhLk9iKCkpe2EuUGIoKTthLlFiKCl9fQpmdW5jdGlvbiB2eShhKXtxbSgpO3RoaXMuYT0ocG5iKCksbmV3IGRvYihRYihhKSkpfQpmdW5jdGlvbiBkeChhKXthLmEuamQoKTtKRChhLmEua2QoKSwxNikuZ2MoKTtGaCgpfQpmdW5jdGlvbiBrcWIoYSxiKXtyZXR1cm4gdERiKGEpLENkYihhLCh0RGIoYiksYikpfQpmdW5jdGlvbiBwcWIoYSxiKXtyZXR1cm4gdERiKGIpLENkYihiLCh0RGIoYSksYSkpfQpmdW5jdGlvbiBSZ2IoYSxiKXthLmErPXpnYihiLDAsYi5sZW5ndGgpO3JldHVybiBhfQpmdW5jdGlvbiBNbGIoYSxiKXtzRGIoYixhLmMubGVuZ3RoKTtyZXR1cm4gYS5jW2JdfQpmdW5jdGlvbiBibmIoYSxiKXtzRGIoYixhLmEubGVuZ3RoKTtyZXR1cm4gYS5hW2JdfQpmdW5jdGlvbiBSQmIoYSxiKXt3QmIoKTtNQWIuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifQpmdW5jdGlvbiB5dGIoYSl7VHJiLmNhbGwodGhpcyxuZXcgWHNiKTt4ZSh0aGlzLGEpfQpmdW5jdGlvbiBjcmIoYSl7dGhpcy5jPWE7dGhpcy5hPW5ldyBEcmIodGhpcy5jLmEpfQpmdW5jdGlvbiBoZ2MoYSl7dGhpcy5hPWE7dGhpcy5jPW5ldyBJcmI7YmdjKHRoaXMpfQpmdW5jdGlvbiBTcmIoYSl7dGhpcy5hPW5ldyBKcmIoYS5nYygpKTt4ZSh0aGlzLGEpfQpmdW5jdGlvbiBWTWIoYSl7cmV0dXJuICFhLnE/KHBuYigpLHBuYigpLG5uYik6YS5xfQpmdW5jdGlvbiB5ZmMoYSl7cmV0dXJuIGEuYy1KRChNbGIoYS5hLGEuYiksMjkyKS5ifQpmdW5jdGlvbiBWQ2MoYSxiKXtyZXR1cm4gYT8wOiR3bmQuTWF0aC5tYXgoMCxiLTEpfQpmdW5jdGlvbiBya2MoYSxiLGMpe3JldHVybiAkZWIoYi5kW2EuZ10sYy5kW2EuZ10pfQpmdW5jdGlvbiB6R2MoYSxiLGMpe3JldHVybiAkZWIoYS5kW2IucF0sYS5kW2MucF0pfQpmdW5jdGlvbiBBR2MoYSxiLGMpe3JldHVybiAkZWIoYS5kW2IucF0sYS5kW2MucF0pfQpmdW5jdGlvbiBCR2MoYSxiLGMpe3JldHVybiAkZWIoYS5kW2IucF0sYS5kW2MucF0pfQpmdW5jdGlvbiBDR2MoYSxiLGMpe3JldHVybiAkZWIoYS5kW2IucF0sYS5kW2MucF0pfQpmdW5jdGlvbiBRNGMoYSxiLGMpe3JldHVybiAkd25kLk1hdGgubWluKGMvYSwxL2IpfQpmdW5jdGlvbiBibWQoYSl7aWYoYS5jKXtyZXR1cm4gYS5jLmZ9cmV0dXJuIGEuZS5ifQpmdW5jdGlvbiBjbWQoYSl7aWYoYS5jKXtyZXR1cm4gYS5jLmd9cmV0dXJuIGEuZS5hfQpmdW5jdGlvbiBnbWMoYSxiKXthLmE9PW51bGwmJmVtYyhhKTtyZXR1cm4gYS5hW2JdfQpmdW5jdGlvbiBPWWMoYSl7dmFyIGI7Yj1VWWMoYSk7cmV0dXJuICFiP2E6T1ljKGIpfQpmdW5jdGlvbiBIbWIoYSxiKXt2YXIgYztmb3IoYz0wO2M8YjsrK2Mpe2FbY109LTF9fQpmdW5jdGlvbiBUWGIoYSxiLGMsZCl7S1hiKHRoaXMpO05YYih0aGlzLGEsYixjLGQpfQpmdW5jdGlvbiBpT2QoYSl7d0RkLmNhbGwodGhpcyxhLmdjKCkpO3ZDZCh0aGlzLGEpfQpmdW5jdGlvbiBnNGQoYSxiKXtOMmQoKTtPMmQuY2FsbCh0aGlzLGIpO3RoaXMuYT1hfQpmdW5jdGlvbiBENWQoYSxiLGMpe3RoaXMuYT1hO3FWZC5jYWxsKHRoaXMsYixjLDIpfQpmdW5jdGlvbiBhcGUoYSxiKXtvb2UoKTtwb2UuY2FsbCh0aGlzLGEpO3RoaXMuYT1ifQpmdW5jdGlvbiBYbmQoYSl7dGhpcy5iPW5ldyBNdGI7dGhpcy5hPWE7dGhpcy5jPS0xfQpmdW5jdGlvbiAkcigpeyRyPVpjYjtacj1uZXcgX3IoU0MoYUosTnFlLDEsMCw1LDEpKX0KZnVuY3Rpb24gQWZiKCl7QWZiPVpjYjt6ZmI9U0MoWEksaHJlLDE5MCwyNTYsMCwxKX0KZnVuY3Rpb24gV2ZiKCl7V2ZiPVpjYjtWZmI9U0MoY0osaHJlLDE5MSwyNTYsMCwxKX0KZnVuY3Rpb24gUWRiKCl7UWRiPVpjYjtQZGI9U0MoSEksaHJlLDIxOSwyNTYsMCwxKX0KZnVuY3Rpb24gYWViKCl7YWViPVpjYjtfZGI9U0MoSUksaHJlLDE3OSwxMjgsMCwxKX0KZnVuY3Rpb24gVG9kKCl7VG9kPVpjYjtTb2Q9bmV3IE5CZCgoTGdkKCksWGZkKSwwKX0KZnVuY3Rpb24gdG9lKGEsYil7b29lKCk7Kytub2U7cmV0dXJuIG5ldyBqcGUoYSxiKX0KZnVuY3Rpb24gTE5kKGEsYil7cmV0dXJuIGE9PW51bGw/Yj09bnVsbDpjZ2IoYSxiKX0KZnVuY3Rpb24gTU5kKGEsYil7cmV0dXJuIGE9PW51bGw/Yj09bnVsbDpkZ2IoYSxiKX0KZnVuY3Rpb24gcXJiKGEsYil7cmV0dXJuIFJEKGIsMjMpJiZycmIoYSxKRChiLDIzKSl9CmZ1bmN0aW9uIHNyYihhLGIpe3JldHVybiBSRChiLDIzKSYmdHJiKGEsSkQoYiwyMykpfQpmdW5jdGlvbiBmc2IoYSxiKXtyZXR1cm4gZHNiKGEsYixlc2IoYSxhLmIuQWUoYikpKX0KZnVuY3Rpb24geXNiKGEsYil7cmV0dXJuICEoYS5hLmdldChiKT09PXVuZGVmaW5lZCl9CmZ1bmN0aW9uIHd2YihhKXtyZXR1cm4geXZiKGEsMjYpKmV0ZSt5dmIoYSwyNykqZnRlfQpmdW5jdGlvbiBVQyhhKXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKSYmYS5RbT09PWJkYn0KZnVuY3Rpb24gaGcoYSl7YS5iP2hnKGEuYik6YS5kLmRjKCkmJmEuZi5jLkFjKGEuZSl9CmZ1bmN0aW9uIFBjYihhKXtpZihDY2IoYSkpe3JldHVybiBhfDB9cmV0dXJuIHhEKGEpfQpmdW5jdGlvbiBucmIoYSxiKXt2YXIgYztjPW1yYihhKTtxbmIoYyxiKTtyZXR1cm4gY30KZnVuY3Rpb24gV3ooYSxiKXshYSYmKGE9W10pO2FbYS5sZW5ndGhdPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIEhsYihhLGIsYyl7dkRiKGIsYS5jLmxlbmd0aCk7V0NiKGEuYyxiLGMpfQpmdW5jdGlvbiBQbWIoYSxiLGMpe21EYigwLGIsYS5sZW5ndGgpO05tYihhLDAsYixjKX0KZnVuY3Rpb24gJExiKGEsYil7X0xiKGEsQmRkKG5ldyBFZGQoYi5hLGIuYiksYS5jKSl9CmZ1bmN0aW9uIF9MYihhLGIpe21kZChhLmMsYik7YS5iLmMrPWIuYTthLmIuZCs9Yi5ifQpmdW5jdGlvbiBETGIoYSxiKXt0aGlzLmI9bmV3IE10Yjt0aGlzLmE9YTt0aGlzLmM9Yn0KZnVuY3Rpb24gJFJiKCl7dGhpcy5iPW5ldyBrU2I7dGhpcy5jPW5ldyBjU2IodGhpcyl9CmZ1bmN0aW9uIGVGYigpe3RoaXMuZD1uZXcgc0ZiO3RoaXMuZT1uZXcga0ZiKHRoaXMpfQpmdW5jdGlvbiBYemMoKXtVemMoKTt0aGlzLmY9bmV3IE10Yjt0aGlzLmU9bmV3IE10Yn0KZnVuY3Rpb24gQkljKCl7Z0ljKCk7dGhpcy5rPW5ldyBJcmI7dGhpcy5kPW5ldyBRcmJ9CmZ1bmN0aW9uIF9yKGEpe3FjLmNhbGwodGhpcywwLDApO3RoaXMuYT1hO3RoaXMuYj0wfQpmdW5jdGlvbiBqbGQoKXtkbGQuY2FsbCh0aGlzLCdMT09LQUhFQURfTEFZT1VUJywxKX0KZnVuY3Rpb24gYWNjKGEsYixjKXtYYmMoYyxhLDEpO0lsYihiLG5ldyBZY2MoYyxhKSl9CmZ1bmN0aW9uIF9iYyhhLGIsYyl7V2JjKGMsYSwxKTtJbGIoYixuZXcgTWNjKGMsYSkpfQpmdW5jdGlvbiBwNWMoYSxiLGMpe3JldHVybiBOcmIoYSxuZXcgU0RiKGIuYSxjLmEpKX0KZnVuY3Rpb24gR0FjKGEsYixjKXtyZXR1cm4gLSRlYihhLmZbYi5wXSxhLmZbYy5wXSl9CmZ1bmN0aW9uIEdtYihhLGIsYyl7dmFyIGQ7Zm9yKGQ9MDtkPGI7KytkKXthW2RdPWN9fQpmdW5jdGlvbiBwSGIoYSxiLGMpe3ZhciBkO2lmKGEpe2Q9YS5pO2QuZD1iO2QuYT1jfX0KZnVuY3Rpb24gb0hiKGEsYixjKXt2YXIgZDtpZihhKXtkPWEuaTtkLmM9YjtkLmI9Y319CmZ1bmN0aW9uIEM5YyhhLGIsYyl7YS5hPS0xO0k5YyhhLGIuZysxLGMpO3JldHVybiBhfQpmdW5jdGlvbiBDUWQoYSxiLGMpe2M9YnFkKGEsSkQoYiw1MiksMyxjKTtyZXR1cm4gY30KZnVuY3Rpb24gRndkKGEsYixjKXtjPWJxZChhLEpEKGIsNTIpLDcsYyk7cmV0dXJuIGN9CmZ1bmN0aW9uIENWZChhLGIsYyl7dGhpcy5hPWE7dVZkLmNhbGwodGhpcyxiLGMsMjIpfQpmdW5jdGlvbiBOMGQoYSxiLGMpe3RoaXMuYT1hO3VWZC5jYWxsKHRoaXMsYixjLDE0KX0KZnVuY3Rpb24gWjNkKGEsYixjLGQpe04yZCgpO2czZC5jYWxsKHRoaXMsYSxiLGMsZCl9CmZ1bmN0aW9uIGU0ZChhLGIsYyxkKXtOMmQoKTtnM2QuY2FsbCh0aGlzLGEsYixjLGQpfQpmdW5jdGlvbiB5V2QoYSxiKXsoYi5CYiZSQ2UpIT0wJiYhYS5hLm8mJihhLmEubz1iKX0KZnVuY3Rpb24gVUQoYSl7cmV0dXJuIGEhPW51bGwmJldEKGEpJiYhKGEuUW09PT1iZGIpfQpmdW5jdGlvbiBRRChhKXtyZXR1cm4gIUFycmF5LmlzQXJyYXkoYSkmJmEuUW09PT1iZGJ9CmZ1bmN0aW9uIGVkKGEpe3JldHVybiBSRChhLDE1KT9KRChhLDE1KS5jZCgpOmEuSmMoKX0KZnVuY3Rpb24gQ2UoYSl7cmV0dXJuIGEuT2MoU0MoYUosTnFlLDEsYS5nYygpLDUsMSkpfQpmdW5jdGlvbiBuYWUoYSxiKXtyZXR1cm4gUGFlKGlhZShhLGIpKT9iLnZpKCk6bnVsbH0KZnVuY3Rpb24gcngoYSxiKXtyZXR1cm4gUWIoYiksYS5hLkhkKGIpJiYhYS5iLkhkKGIpfQpmdW5jdGlvbiBkbihhKXtpZihhLmMpe3JldHVybiBhLmN9cmV0dXJuIGEuYz1hLlFkKCl9CmZ1bmN0aW9uIGVuKGEpe2lmKGEuZCl7cmV0dXJuIGEuZH1yZXR1cm4gYS5kPWEuUmQoKX0KZnVuY3Rpb24gZWUoYSl7dmFyIGI7Yj1hLmY7cmV0dXJuICFiPyhhLmY9YS5DYygpKTpifQpmdW5jdGlvbiBFYyhhKXt2YXIgYjtiPWEuaTtyZXR1cm4gIWI/KGEuaT1hLmJjKCkpOmJ9CmZ1bmN0aW9uIHhvZShhKXtvb2UoKTsrK25vZTtyZXR1cm4gbmV3IHpwZSgxMCxhLDApfQpmdW5jdGlvbiBScGUoYSl7UXBlKCk7dGhpcy5hPTA7dGhpcy5iPWEtMTt0aGlzLmM9MX0KZnVuY3Rpb24gZnooYSl7WXkodGhpcyk7dGhpcy5nPWE7JHkodGhpcyk7dGhpcy5oZSgpfQpmdW5jdGlvbiB3ZyhhLGIsYyxkKXt0aGlzLmE9YTtqZy5jYWxsKHRoaXMsYSxiLGMsZCl9CmZ1bmN0aW9uIGVzKGEpe3RoaXMuYT0oJHIoKSxacik7dGhpcy5kPUpEKFFiKGEpLDQ5KX0KZnVuY3Rpb24gVmNlKGEpe2lmKGEuZS5qIT1hLmQpe3Rocm93IHNjYihuZXcgeXFiKX19CmZ1bmN0aW9uIFFjYihhKXtpZihDY2IoYSkpe3JldHVybiAnJythfXJldHVybiB5RChhKX0KZnVuY3Rpb24gSmNiKGEsYil7cmV0dXJuIHdjYihzRChDY2IoYSk/TmNiKGEpOmEsYikpfQpmdW5jdGlvbiBLY2IoYSxiKXtyZXR1cm4gd2NiKHREKENjYihhKT9OY2IoYSk6YSxiKSl9CmZ1bmN0aW9uIExjYihhLGIpe3JldHVybiB3Y2IodUQoQ2NiKGEpP05jYihhKTphLGIpKX0KZnVuY3Rpb24gemRiKGEsYil7cmV0dXJuIEJkYigodERiKGEpLGEpLCh0RGIoYiksYikpfQpmdW5jdGlvbiBBZWIoYSxiKXtyZXR1cm4gSGViKCh0RGIoYSksYSksKHREYihiKSxiKSl9CmZ1bmN0aW9uIGxEKGEsYil7cmV0dXJuIF9DKGEubCZiLmwsYS5tJmIubSxhLmgmYi5oKX0KZnVuY3Rpb24gckQoYSxiKXtyZXR1cm4gX0MoYS5sfGIubCxhLm18Yi5tLGEuaHxiLmgpfQpmdW5jdGlvbiB6RChhLGIpe3JldHVybiBfQyhhLmxeYi5sLGEubV5iLm0sYS5oXmIuaCl9CmZ1bmN0aW9uIElCYihhLGIpe3JldHVybiBMQmIoYSwodERiKGIpLG5ldyB4emIoYikpKX0KZnVuY3Rpb24gSkJiKGEsYil7cmV0dXJuIExCYihhLCh0RGIoYiksbmV3IHp6YihiKSkpfQpmdW5jdGlvbiBDWmIoYSl7cmV0dXJuIFZZYigpLEpEKGEsMTEpLmcuYy5sZW5ndGghPTB9CmZ1bmN0aW9uIEhaYihhKXtyZXR1cm4gVlliKCksSkQoYSwxMSkuZS5jLmxlbmd0aCE9MH0KZnVuY3Rpb24gRjZiKGEsYil7azZiKCk7cmV0dXJuIEhlYihiLmEuby5hLGEuYS5vLmEpfQpmdW5jdGlvbiBVa2MoYSxiLGMpe3JldHVybiBWa2MoYSxKRChiLDExKSxKRChjLDExKSl9CmZ1bmN0aW9uIHhsYyhhKXtpZihhLmUpe3JldHVybiBDbGMoYS5lKX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gRXZiKGEpe2lmKCFhLmQpe2EuZD1hLmIuSmMoKTthLmM9YS5iLmdjKCl9fQpmdW5jdGlvbiBmQ2IoYSxiLGMpe2lmKGEuYS5NYihjKSl7YS5iPXRydWU7Yi5BZChjKX19CmZ1bmN0aW9uIF93YihhLGIpe2lmKGE8MHx8YT49Yil7dGhyb3cgc2NiKG5ldyBuZGIpfX0KZnVuY3Rpb24gUUZjKGEpe3RoaXMuYT1PRmMoYS5hKTt0aGlzLmI9bmV3IFdsYihhLmIpfQpmdW5jdGlvbiBkdmIoYSl7dGhpcy5iPW5ldyBWbGIoMTEpO3RoaXMuYT0oanFiKCksYSl9CmZ1bmN0aW9uIFV4YihhKXt0aGlzLmI9bnVsbDt0aGlzLmE9KGpxYigpLCFhP2dxYjphKX0KZnVuY3Rpb24gJHZiKGEsYil7dGhpcy5lPWE7dGhpcy5kPShiJjY0KSE9MD9ifGlyZTpifQpmdW5jdGlvbiBvd2IoYSxiKXt0aGlzLmM9MDt0aGlzLmQ9YTt0aGlzLmI9Ynw2NHxpcmV9CmZ1bmN0aW9uIE1JZChhKXt0aGlzLmI9YTtMSGQuY2FsbCh0aGlzLGEpO0xJZCh0aGlzKX0KZnVuY3Rpb24gVUlkKGEpe3RoaXMuYj1hOyRIZC5jYWxsKHRoaXMsYSk7VElkKHRoaXMpfQpmdW5jdGlvbiBnX2QoYSxiLGMsZCxlKXtoX2QuY2FsbCh0aGlzLGEsYixjLGQsZSwtMSl9CmZ1bmN0aW9uIHdfZChhLGIsYyxkLGUpe3hfZC5jYWxsKHRoaXMsYSxiLGMsZCxlLC0xKX0KZnVuY3Rpb24gWDBkKGEsYixjLGQpe3FWZC5jYWxsKHRoaXMsYSxiLGMpO3RoaXMuYj1kfQpmdW5jdGlvbiBkamMoYSxiLGMsZCl7dmFyIGU7ZT1hLmk7ZS5pPWI7ZS5hPWM7ZS5iPWR9CmZ1bmN0aW9uICRIYyhhKXt2YXIgYjtiPWE7d2hpbGUoYi5mKXtiPWIuZn1yZXR1cm4gYn0KZnVuY3Rpb24gX2NkKGEpe3JldHVybiBuZXcgRWRkKGEuYythLmIvMixhLmQrYS5hLzIpfQpmdW5jdGlvbiBoWGQoYSxiKXtyZXR1cm4gYi5SaCgpP3pxZChhLmIsSkQoYiw1MikpOmJ9CmZ1bmN0aW9uIHFqZChhKXtvamQoKTtyZXR1cm4gIWEuR2Moa2pkKSYmIWEuR2MobWpkKX0KZnVuY3Rpb24gTmNkKGEsYixjKXtJY2QoKTtyZXR1cm4gTWNkKGEsYikmJk1jZChhLGMpfQpmdW5jdGlvbiBQd2MoYSxiLGMpe2Iub2YoYyxCZWIoTUQoTmliKGEuYixjKSkpKmEuYSl9CmZ1bmN0aW9uIFdaYyhhLGIpe2IuU2coIkdlbmVyYWwgJ1JvdGF0b3IiLDEpO1ZaYyhhKX0KZnVuY3Rpb24gUmVlKGEsYixjLGQpe3RoaXMuYj1hO3FWZC5jYWxsKHRoaXMsYixjLGQpfQpmdW5jdGlvbiBjMWQoYSxiLGMpe3RoaXMuYT1hO18wZC5jYWxsKHRoaXMsYixjLDUsNil9CmZ1bmN0aW9uIFJqKGEsYil7dGhpcy5iPWE7eWouY2FsbCh0aGlzLGEuYik7dGhpcy5hPWJ9CmZ1bmN0aW9uIGJlZShhLGIsYyxkKXtpVmQuY2FsbCh0aGlzLGEsYixjKTt0aGlzLmI9ZH0KZnVuY3Rpb24gcTlkKGEpe1REZC5jYWxsKHRoaXMsYSxmYWxzZSk7dGhpcy5hPWZhbHNlfQpmdW5jdGlvbiBCeChhLGIpe3FtKCk7QXguY2FsbCh0aGlzLGEsTW0obmV3IGRuYihiKSkpfQpmdW5jdGlvbiB1b2UoYSxiKXtvb2UoKTsrK25vZTtyZXR1cm4gbmV3IHZwZShhLGIsMCl9CmZ1bmN0aW9uIHdvZShhLGIpe29vZSgpOysrbm9lO3JldHVybiBuZXcgdnBlKDYsYSxiKX0KZnVuY3Rpb24gbmdiKGEsYil7cmV0dXJuIGNnYihhLnN1YnN0cigwLGIubGVuZ3RoKSxiKX0KZnVuY3Rpb24gTGliKGEsYil7cmV0dXJuIFZEKGIpP1BpYihhLGIpOiEhZnNiKGEuZixiKX0KZnVuY3Rpb24gT3NiKGEsYil7dERiKGIpO3doaWxlKGEuT2IoKSl7Yi5BZChhLlBiKCkpfX0KZnVuY3Rpb24gVmhiKGEsYixjKXtHaGIoKTt0aGlzLmU9YTt0aGlzLmQ9Yjt0aGlzLmE9Y30KZnVuY3Rpb24gQm1iKGEsYixjLGQpe21EYihiLGMsYS5sZW5ndGgpO0ZtYihhLGIsYyxkKX0KZnVuY3Rpb24gRm1iKGEsYixjLGQpe3ZhciBlO2ZvcihlPWI7ZTxjOysrZSl7YVtlXT1kfX0KZnVuY3Rpb24gSm1iKGEsYil7dmFyIGM7Zm9yKGM9MDtjPGI7KytjKXthW2NdPWZhbHNlfX0KZnVuY3Rpb24gcHYoYSxiKXt2YXIgYztjPWEuYS5nYygpO1NiKGIsYyk7cmV0dXJuIGMtYn0KZnVuY3Rpb24gamxiKGEpe3ZhciBiO2I9ZmxiKGEpO3JEYihiIT1udWxsKTtyZXR1cm4gYn0KZnVuY3Rpb24ga2xiKGEpe3ZhciBiO2I9Z2xiKGEpO3JEYihiIT1udWxsKTtyZXR1cm4gYn0KZnVuY3Rpb24gTnJiKGEsYil7dmFyIGM7Yz1hLmEueWMoYixhKTtyZXR1cm4gYz09bnVsbH0KZnVuY3Rpb24gZnpiKGEsYil7cmV0dXJuIGEuYS55YyhiLCh4ZGIoKSx2ZGIpKT09bnVsbH0KZnVuY3Rpb24gU21iKGEpe3JldHVybiBuZXcgUkJiKG51bGwsUm1iKGEsYS5sZW5ndGgpKX0KZnVuY3Rpb24gRGwoYSl7cmV0dXJuIG5ldyBlcyhuZXcgR2woYS5hLmxlbmd0aCxhLmEpKX0KZnVuY3Rpb24gcUQoYSl7cmV0dXJuIF9DKH5hLmwmenNlLH5hLm0menNlLH5hLmgmQXNlKX0KZnVuY3Rpb24gV0QoYSl7cmV0dXJuIHR5cGVvZiBhPT09Q3FlfHx0eXBlb2YgYT09PUdxZX0KZnVuY3Rpb24gRU5iKGEsYil7cmV0dXJuIGE+MD8kd25kLk1hdGgubG9nKGEvYik6LTEwMH0KZnVuY3Rpb24gVGxjKGEsYil7aWYoIWIpe3JldHVybiBmYWxzZX1yZXR1cm4geGUoYSxiKX0KZnVuY3Rpb24gQmtiKGEpe2lmKCFhKXt0aHJvdyBzY2IobmV3IHF1Yil9cmV0dXJuIGEuZH0KZnVuY3Rpb24gdURiKGEsYil7aWYoYT09bnVsbCl7dGhyb3cgc2NiKG5ldyBGZmIoYikpfX0KZnVuY3Rpb24gTHFiKGEsYixjKXtvcmIoYS5hLGIpO3JldHVybiAkQ2IoYS5iLGIuZyxjKX0KZnVuY3Rpb24gVndiKGEsYixjKXtfd2IoYyxhLmEuYy5sZW5ndGgpO1JsYihhLmEsYyxiKX0KZnVuY3Rpb24gSkFkKGEsYixjKXtZeWQoYS5hLGEuYixhLmQsYS5jLEpEKGIsMTY4KSxjKX0KZnVuY3Rpb24gWWJlKGEsYil7Q1VkKGEsUkQoYiwxNTkpP2I6SkQoYiwxOTgyKS5PbCgpKX0KZnVuY3Rpb24gaTljKGEsYixjKXthOWMoYSxiLmcsYyk7b3JiKGEuYyxiKTtyZXR1cm4gYX0KZnVuY3Rpb24gSFJiKGEpe0ZSYihhLChUZ2QoKSxQZ2QpKTthLmQ9dHJ1ZTtyZXR1cm4gYX0KZnVuY3Rpb24gWGFlKGEpeyFhLmomJmJiZShhLFk5ZChhLmcsYS5iKSk7cmV0dXJuIGEuan0KZnVuY3Rpb24gQ0IoYSxiLGMpe3ZhciBkO2Q9QkIoYSxiKTtEQihhLGIsYyk7cmV0dXJuIGR9CmZ1bmN0aW9uIHJBYihhLGIsYyl7dGhpcy5jPWE7dGhpcy5hPWI7cG5iKCk7dGhpcy5iPWN9CmZ1bmN0aW9uIE1IZChhLGIpe3RoaXMuZD1hO0NIZC5jYWxsKHRoaXMsYSk7dGhpcy5lPWJ9CmZ1bmN0aW9uIGpwZShhLGIpe3BvZS5jYWxsKHRoaXMsMSk7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIHFtYihhKXt4RGIoYS5iIT0tMSk7T2xiKGEuYyxhLmE9YS5iKTthLmI9LTF9CmZ1bmN0aW9uIFRpYihhKXthLmY9bmV3IGlzYihhKTthLmk9bmV3IENzYihhKTsrK2EuZ30KZnVuY3Rpb24gd3QoYSl7YS5hPW51bGw7YS5lPW51bGw7VGliKGEuYik7YS5kPTA7KythLmN9CmZ1bmN0aW9uIE9oYihhKXtyZXR1cm4gYS5lPT0wP2E6bmV3IFZoYigtYS5lLGEuZCxhLmEpfQpmdW5jdGlvbiB2aWUoYSl7cmV0dXJuIGE9PUtzZT9uR2U6YT09THNlPyctSU5GJzonJythfQpmdW5jdGlvbiB4aWUoYSl7cmV0dXJuIGE9PUtzZT9uR2U6YT09THNlPyctSU5GJzonJythfQpmdW5jdGlvbiBSbWIoYSxiKXtyZXR1cm4gWnZiKGIsYS5sZW5ndGgpLG5ldyB1d2IoYSxiKX0KZnVuY3Rpb24gakxiKGEsYil7cmV0dXJuIEhlYihhLmMuYythLmMuYixiLmMuYytiLmMuYil9CmZ1bmN0aW9uIHJmYihhLGIpe3JldHVybiB2Y2IoYSxiKTwwPy0xOnZjYihhLGIpPjA/MTowfQpmdW5jdGlvbiBJQWIoYSxiKXshYS5jP0lsYihhLmIsYik6SUFiKGEuYyxiKTtyZXR1cm4gYX0KZnVuY3Rpb24gU3RiKGEsYil7RHRiKGEuZCxiLGEuYi5iLGEuYik7KythLmE7YS5jPW51bGx9CmZ1bmN0aW9uIEh2YihhKXt0aGlzLmQ9KHREYihhKSxhKTt0aGlzLmE9MDt0aGlzLmM9bXJlfQpmdW5jdGlvbiBlTmIoYSl7ZE5iLmNhbGwodGhpcyk7dGhpcy5hPWE7SWxiKGEuYSx0aGlzKX0KZnVuY3Rpb24gV05jKGEsYil7dGhpcy5kPWVPYyhhKTt0aGlzLmM9Yjt0aGlzLmE9MC41KmJ9CmZ1bmN0aW9uIEhrYyhhLGIsYyl7R2tjLmNhbGwodGhpcyxiLGMsZmFsc2UpO3RoaXMuZT1hfQpmdW5jdGlvbiBuaGMoYSxiLGMsZCxlKXttaGMoYSxKRChRYyhiLmssYyksMTUpLGMsZCxlKX0KZnVuY3Rpb24gZWdiKGEsYixjLGQsZSl7d2hpbGUoYjxjKXtkW2UrK109X2ZiKGEsYisrKX19CmZ1bmN0aW9uIEltYihhLGIsYyl7dmFyIGQ7Zm9yKGQ9MDtkPGI7KytkKXtWQyhhLGQsYyl9fQpmdW5jdGlvbiB2Q2QoYSxiKXthLlBpKCkmJihiPUFDZChhLGIpKTtyZXR1cm4gYS5DaShiKX0KZnVuY3Rpb24ga2hjKGEsYil7RUJiKEZCYihhLk1jKCksbmV3IFVoYyksbmV3IFdoYyhiKSl9CmZ1bmN0aW9uIHdSYyhhLGIpe3JldHVybiBIZWIoYS5lLmErYS5mLmEsYi5lLmErYi5mLmEpfQpmdW5jdGlvbiB5UmMoYSxiKXtyZXR1cm4gSGViKGEuZS5iK2EuZi5iLGIuZS5iK2IuZi5iKX0KZnVuY3Rpb24gSkljKGEpe3JldHVybiAkd25kLk1hdGguYWJzKGEuZC5lLWEuZS5lKS1hLmF9CmZ1bmN0aW9uIFZUZChhKXtyZXR1cm4gKGEuaT09bnVsbCYmTVRkKGEpLGEuaSkubGVuZ3RofQpmdW5jdGlvbiBKSmQoYSxiLGMpe3JldHVybiBKRChhLmMuZmQoYixKRChjLDEzNSkpLDQzKX0KZnVuY3Rpb24gQ3MoKXt2cygpO3JldHVybiBXQyhPQyhKRywxKSxFcmUsNTM0LDAsW3VzXSl9CmZ1bmN0aW9uIE9CKCl7T0I9WmNiO01CPW5ldyBQQihmYWxzZSk7TkI9bmV3IFBCKHRydWUpfQpmdW5jdGlvbiBHT2QoKXtHT2Q9WmNiO0ZPZD11NmQoKTshIShjUGQoKSxJT2QpJiZ3NmQoKX0KZnVuY3Rpb24gT01jKGEpe2Eucz1OYU47YS5jPU5hTjtQTWMoYSxhLmUpO1BNYyhhLGEuail9CmZ1bmN0aW9uIHJFZChhKXthP2F6KGEsKFpnYigpLFlnYiksJycpOmVkYigoWmdiKCksYSkpfQpmdW5jdGlvbiBwYmUoYSxiKXsrK2EuajttY2UoYSxhLmksYik7b2JlKGEsSkQoYiwzMzkpKX0KZnVuY3Rpb24gb1JkKGEsYil7Yj1hLlZrKG51bGwsYik7cmV0dXJuIG5SZChhLG51bGwsYil9CmZ1bmN0aW9uIHZvZShhLGIsYyl7b29lKCk7Kytub2U7cmV0dXJuIG5ldyBycGUoYSxiLGMpfQpmdW5jdGlvbiBGYyhhKXt2YXIgYjtiPWEuajtyZXR1cm4gIWI/KGEuaj1uZXcgT3coYSkpOmJ9CmZ1bmN0aW9uIF9pKGEpe3ZhciBiO2I9YS5mO3JldHVybiAhYj8oYS5mPW5ldyBYaihhKSk6Yn0KZnVuY3Rpb24gaWkoYSl7dmFyIGI7cmV0dXJuIGI9YS5rLCFiPyhhLms9bmV3IHpoKGEpKTpifQpmdW5jdGlvbiBVYyhhKXt2YXIgYjtyZXR1cm4gYj1hLmssIWI/KGEuaz1uZXcgemgoYSkpOmJ9CmZ1bmN0aW9uIFBjKGEpe3ZhciBiO3JldHVybiBiPWEuZywhYj8oYS5nPW5ldyByaChhKSk6Yn0KZnVuY3Rpb24gY2ooYSl7dmFyIGI7cmV0dXJuIGI9YS5pLCFiPyhhLmk9bmV3IElpKGEpKTpifQpmdW5jdGlvbiB5byhhKXt2YXIgYjtiPWEuZDtyZXR1cm4gIWI/KGEuZD1uZXcgaXAoYSkpOmJ9CmZ1bmN0aW9uIGllYihhLGIpe3ZhciBjO2M9bmV3IGdlYjtjLmo9YTtjLmQ9YjtyZXR1cm4gY30KZnVuY3Rpb24gamViKGEsYixjKXt2YXIgZDtkPWllYihhLGIpO3dlYihjLGQpO3JldHVybiBkfQpmdW5jdGlvbiBvdihhLGIpe3ZhciBjO2M9YS5hLmdjKCk7UGIoYixjKTtyZXR1cm4gYy0xLWJ9CmZ1bmN0aW9uIHdqKGEsYil7UGIoYixhLmMuYi5jLmdjKCkpO3JldHVybiBuZXcgTGooYSxiKX0KZnVuY3Rpb24gVngoYSl7aWYoUkQoYSw2MDEpKXtyZXR1cm4gYX1yZXR1cm4gbmV3IGx5KGEpfQpmdW5jdGlvbiBRYihhKXtpZihhPT1udWxsKXt0aHJvdyBzY2IobmV3IEVmYil9cmV0dXJuIGF9CmZ1bmN0aW9uIEdDKGEpe2lmKGE9PW51bGwpe3Rocm93IHNjYihuZXcgRWZiKX10aGlzLmE9YX0KZnVuY3Rpb24gUEEoYSl7bkEoKTt0aGlzLmI9bmV3IFVsYjt0aGlzLmE9YTtBQSh0aGlzLGEpfQpmdW5jdGlvbiBWcyhhKXt0aGlzLmI9YTt0aGlzLmE9SkQodnViKHRoaXMuYi5hLmUpLDIyNil9CmZ1bmN0aW9uIHNmZSgpe1hzYi5jYWxsKHRoaXMpO3RoaXMuYT10cnVlO3RoaXMuYj10cnVlfQpmdW5jdGlvbiBwZ2IoYSxiKXtBRGIoYixhLmxlbmd0aCsxKTtyZXR1cm4gYS5zdWJzdHIoYil9CmZ1bmN0aW9uIFZDKGEsYixjKXtvRGIoYz09bnVsbHx8TkMoYSxjKSk7cmV0dXJuIGFbYl09Y30KZnVuY3Rpb24gQWdiKGEsYil7YS5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGIpO3JldHVybiBhfQpmdW5jdGlvbiBLZ2IoYSxiKXthLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoYik7cmV0dXJuIGF9CmZ1bmN0aW9uIG13YihhLGIpe3REYihiKTt3aGlsZShhLmM8YS5kKXthLlFlKGIsYS5jKyspfX0KZnVuY3Rpb24gc3EoYSxiKXtyZXR1cm4gSkQoZG4oYS5hKS5LZCgpLlhiKGIpLDQzKS5qZCgpfQpmdW5jdGlvbiBOaWIoYSxiKXtyZXR1cm4gVkQoYik/T2liKGEsYik6V2QoZnNiKGEuZixiKSl9CmZ1bmN0aW9uIEU2YihhLGIpe2s2YigpO3JldHVybiBKRChLcWIoYSxiLmQpLDE1KS5FYyhiKX0KZnVuY3Rpb24gQlBiKGEsYixjLGQpe3JldHVybiBjPT0wfHwoYy1kKS9jPGEuZXx8Yj49YS5nfQpmdW5jdGlvbiBvR2MoYSxiLGMpe3ZhciBkO2Q9dUdjKGEsYixjKTtyZXR1cm4gbkdjKGEsZCl9CmZ1bmN0aW9uIGREYihhLGIpe3ZhciBjO2M9Y29uc29sZVthXTtjLmNhbGwoY29uc29sZSxiKX0KZnVuY3Rpb24gYzhjKGEsYixjKXtKRChiLmIsNjgpO0xsYihiLmEsbmV3IGo4YyhhLGMsYikpfQpmdW5jdGlvbiBoQmQoYSxiKXtTeGQoYSxuZXcgR0MoYi5mIT1udWxsP2IuZjonJytiLmcpKX0KZnVuY3Rpb24gakJkKGEsYil7U3hkKGEsbmV3IEdDKGIuZiE9bnVsbD9iLmY6JycrYi5nKSl9CmZ1bmN0aW9uIHlFZChhLGIpe3ZhciBjOysrYS5qO2M9YS5CaigpO2Eub2ooYS5XaShjLGIpKX0KZnVuY3Rpb24gU3hkKGEsYil7dmFyIGM7Yz1hLmEubGVuZ3RoO0JCKGEsYyk7REIoYSxjLGIpfQpmdW5jdGlvbiBFUWQoYSl7IWEuYSYmKGEuYT1uZXcgcVZkKGo2LGEsNCkpO3JldHVybiBhLmF9CmZ1bmN0aW9uIEVaZChhKXshYS5kJiYoYS5kPW5ldyBxVmQoZzYsYSwxKSk7cmV0dXJuIGEuZH0KZnVuY3Rpb24gaCRkKGEpe3JldHVybiBSRChhLDEwMSkmJihKRChhLDE5KS5CYiZSQ2UpIT0wfQpmdW5jdGlvbiBzZGQoYSl7cmV0dXJuICR3bmQuTWF0aC5zcXJ0KGEuYSphLmErYS5iKmEuYil9CmZ1bmN0aW9uIHJ0YihhKXt0aGlzLmQ9YTt0aGlzLmM9YS5hLmQuYTt0aGlzLmI9YS5hLmUuZ30KZnVuY3Rpb24gVmFkKGEpe3RoaXMuYz1hO3RoaXMuYT1uZXcgTXRiO3RoaXMuYj1uZXcgTXRifQpmdW5jdGlvbiBiJGIoYSl7dGhpcy5jPW5ldyBDZGQ7dGhpcy5hPW5ldyBVbGI7dGhpcy5iPWF9CmZ1bmN0aW9uIHBSYihhKXt0aGlzLmI9bmV3IFVsYjt0aGlzLmE9bmV3IFVsYjt0aGlzLmM9YX0KZnVuY3Rpb24gWTRkKGEsYixjKXt0aGlzLmE9YTtlMmQuY2FsbCh0aGlzLGIpO3RoaXMuYj1jfQpmdW5jdGlvbiAkOGQoYSxiLGMpe3RoaXMuYT1hO2pHZC5jYWxsKHRoaXMsOCxiLG51bGwsYyl9CmZ1bmN0aW9uIHZwZShhLGIsYyl7cG9lLmNhbGwodGhpcyxhKTt0aGlzLmE9Yjt0aGlzLmI9Y30KZnVuY3Rpb24gaDRkKGEsYixjKXtPMmQuY2FsbCh0aGlzLGIpO3RoaXMuYT1hO3RoaXMuYj1jfQpmdW5jdGlvbiBxdChhKXt0aGlzLmM9YTt0aGlzLmI9dGhpcy5jLmE7dGhpcy5hPXRoaXMuYy5lfQpmdW5jdGlvbiBzYWUoYSl7dGhpcy5hPSh0RGIockZlKSxyRmUpO3RoaXMuYj1hO25ldyBoMWR9CmZ1bmN0aW9uIHRqYihhKXt4RGIoYS5jIT0tMSk7YS5kLmVkKGEuYyk7YS5iPWEuYzthLmM9LTF9CmZ1bmN0aW9uIElxYihhKXt6ZShhLmEpO2EuYj1TQyhhSixOcWUsMSxhLmIubGVuZ3RoLDUsMSl9CmZ1bmN0aW9uIHh5YihhLGIpe3JldHVybiBIeGIoYS5jLGEuZixiLGEuYixhLmEsYS5lLGEuZCl9CmZ1bmN0aW9uIFV3YihhLGIpe3JldHVybiBfd2IoYixhLmEuYy5sZW5ndGgpLE1sYihhLmEsYil9CmZ1bmN0aW9uIEhiKGEsYil7cmV0dXJuIFhEKGEpPT09WEQoYil8fGEhPW51bGwmJnBiKGEsYil9CmZ1bmN0aW9uIEZiKGEpe3Z1YihhKTtyZXR1cm4gUkQoYSw0NzApP0pEKGEsNDcwKTphZGIoYSl9CmZ1bmN0aW9uIHhxZShhKXtpZihhKXJldHVybiBhLmRjKCk7cmV0dXJuICFhLkpjKCkuT2IoKX0KZnVuY3Rpb24gRm9lKGEpe2lmKCFWbmUpcmV0dXJuIGZhbHNlO3JldHVybiBQaWIoVm5lLGEpfQpmdW5jdGlvbiBnQmIoYSl7aWYoMD49YSl7cmV0dXJuIG5ldyBxQmJ9cmV0dXJuIGhCYihhLTEpfQpmdW5jdGlvbiBnWWIoYSl7aWYoIWEuYSYmISFhLmMpe3JldHVybiBhLmMuYn1yZXR1cm4gYS5hfQpmdW5jdGlvbiB2dWIoYSl7aWYoYT09bnVsbCl7dGhyb3cgc2NiKG5ldyBFZmIpfXJldHVybiBhfQpmdW5jdGlvbiB0RGIoYSl7aWYoYT09bnVsbCl7dGhyb3cgc2NiKG5ldyBFZmIpfXJldHVybiBhfQpmdW5jdGlvbiBIQWIoYSl7aWYoIWEuYyl7YS5kPXRydWU7SkFiKGEpfWVsc2V7YS5jLlllKCl9fQpmdW5jdGlvbiBLQWIoYSl7aWYoIWEuYyl7TEFiKGEpO2EuZD10cnVlfWVsc2V7S0FiKGEuYyl9fQpmdW5jdGlvbiBhRmIoYSl7YS5iPWZhbHNlO2EuYz1mYWxzZTthLmQ9ZmFsc2U7YS5hPWZhbHNlfQpmdW5jdGlvbiB4R2MoYSl7dmFyIGIsYztiPWEuYy5pLmM7Yz1hLmQuaS5jO3JldHVybiBiPT1jfQpmdW5jdGlvbiBGcWQoYSxiKXt2YXIgYztjPWEuRWgoYik7Yz49MD9hLmdpKGMpOnhxZChhLGIpfQpmdW5jdGlvbiBXbmQoYSxiKXthLmM8MHx8YS5iLmI8YS5jP0N0YihhLmIsYik6YS5hLnZmKGIpfQpmdW5jdGlvbiBFdmQoYSxiKXt0Q2QoKCFhLmEmJihhLmE9bmV3ICRfZChhLGEpKSxhLmEpLGIpfQpmdW5jdGlvbiBxbSgpe3FtPVpjYjtZbCgpO3BtPW5ldyBHeCgocG5iKCkscG5iKCksbW5iKSl9CmZ1bmN0aW9uIEx4KCl7THg9WmNiO1lsKCk7S3g9bmV3IE14KChwbmIoKSxwbmIoKSxvbmIpKX0KZnVuY3Rpb24gRDhjKGEsYixjKXt3OGMoKTtyZXR1cm4gYy5KZyhhLEpEKGIuamQoKSwxNDQpKX0KZnVuY3Rpb24gdGljKGEsYil7cmV0dXJuICRlYihiLmouYy5sZW5ndGgsYS5qLmMubGVuZ3RoKX0KZnVuY3Rpb24gTklkKGEsYil7dGhpcy5iPWE7TUhkLmNhbGwodGhpcyxhLGIpO0xJZCh0aGlzKX0KZnVuY3Rpb24gVklkKGEsYil7dGhpcy5iPWE7X0hkLmNhbGwodGhpcyxhLGIpO1RJZCh0aGlzKX0KZnVuY3Rpb24gTkxiKGEsYil7X0xiKEpEKGIuYiw2OCksYSk7TGxiKGIuYSxuZXcgU0xiKGEpKX0KZnVuY3Rpb24gU0ZkKGEpe2lmKGEucCE9Myl0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIGEuZX0KZnVuY3Rpb24gVEZkKGEpe2lmKGEucCE9NCl0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIGEuZX0KZnVuY3Rpb24gVkZkKGEpe2lmKGEucCE9Nil0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIGEuZn0KZnVuY3Rpb24gX0ZkKGEpe2lmKGEucCE9Myl0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIGEuan0KZnVuY3Rpb24gYUdkKGEpe2lmKGEucCE9NCl0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIGEuan0KZnVuY3Rpb24gY0dkKGEpe2lmKGEucCE9Nil0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIGEua30KZnVuY3Rpb24gdDVkKGEpeyFhLmImJihhLmI9bmV3IEs1ZChuZXcgRzVkKSk7cmV0dXJuIGEuYn0KZnVuY3Rpb24gVGFlKGEpe2EuYz09LTImJlphZShhLFE5ZChhLmcsYS5iKSk7cmV0dXJuIGEuY30KZnVuY3Rpb24gbWViKGEsYil7dmFyIGM7Yz1pZWIoJycsYSk7Yy5uPWI7Yy5pPTE7cmV0dXJuIGN9CmZ1bmN0aW9uIGdwKGEsYixjLGQpe2NwLmNhbGwodGhpcyxhLGMpO3RoaXMuYT1iO3RoaXMuZj1kfQpmdW5jdGlvbiAkcyhhLGIsYyxkKXtjcC5jYWxsKHRoaXMsYSxiKTt0aGlzLmQ9Yzt0aGlzLmE9ZH0KZnVuY3Rpb24gcnkoYSxiKXtYcC5jYWxsKHRoaXMseG5iKFFiKGEpLFFiKGIpKSk7dGhpcy5hPWJ9CmZ1bmN0aW9uIEo5Yygpe2I5Yy5jYWxsKHRoaXMpO19DYih0aGlzLmouYywwKTt0aGlzLmE9LTF9CmZ1bmN0aW9uIFdpZSgpe2h3ZC5jYWxsKHRoaXMsZUdlLChoaGUoKSxnaGUpKTtTaWUodGhpcyl9CmZ1bmN0aW9uIHQ2ZCgpe2h3ZC5jYWxsKHRoaXMsQkZlLChFT2QoKSxET2QpKTtuNmQodGhpcyl9CmZ1bmN0aW9uIHI3Yygpe21zLmNhbGwodGhpcywnREVMQVVOQVlfVFJJQU5HVUxBVElPTicsMCl9CmZ1bmN0aW9uIHZnYihhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEpfQpmdW5jdGlvbiBRaWIoYSxiLGMpe3JldHVybiBWRChiKT9SaWIoYSxiLGMpOmdzYihhLmYsYixjKX0KZnVuY3Rpb24gd25iKGEpe3BuYigpO3JldHVybiAhYT8oanFiKCksanFiKCksaXFiKTphLk1lKCl9CmZ1bmN0aW9uIFZ1KGEpe2JrKGEsR3JlKTtyZXR1cm4gWHkodGNiKHRjYig1LGEpLGEvMTB8MCkpfQpmdW5jdGlvbiB1eChhLGIpe3F4KCk7cmV0dXJuIG5ldyBzeChuZXcgcmwoYSksbmV3IGJsKGIpKX0KZnVuY3Rpb24gdHViKGEsYil7cmV0dXJuIFhEKGEpPT09WEQoYil8fGEhPW51bGwmJnBiKGEsYil9CmZ1bmN0aW9uIEtxYihhLGIpe3JldHVybiBxcmIoYS5hLGIpP2EuYltKRChiLDIzKS5nXTpudWxsfQpmdW5jdGlvbiBRSmIoYSxiKXthLnUuR2MoKG9qZCgpLGtqZCkpJiZPSmIoYSxiKTtTSmIoYSxiKX0KZnVuY3Rpb24gRUFjKGEsYil7dmFyIGM7Yz1uZXcgYiRiKGEpO1lDYihiLmMsYyk7cmV0dXJuIGN9CmZ1bmN0aW9uIGdwYihhKXshYS5hJiYoYS5hPW5ldyBIcGIoYS5jLnZjKCkpKTtyZXR1cm4gYS5hfQpmdW5jdGlvbiBpcGIoYSl7IWEuYiYmKGEuYj1uZXcgQXBiKGEuYy5lYygpKSk7cmV0dXJuIGEuYn0KZnVuY3Rpb24ganBiKGEpeyFhLmQmJihhLmQ9bmV3IG9vYihhLmMuQmMoKSkpO3JldHVybiBhLmR9CmZ1bmN0aW9uIE9zZChhKXshYS5uJiYoYS5uPW5ldyBYMGQoejMsYSwxLDcpKTtyZXR1cm4gYS5ufQpmdW5jdGlvbiBQdGQoYSl7IWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSk7cmV0dXJuIGEuYn0KZnVuY3Rpb24gUXRkKGEpeyFhLmMmJihhLmM9bmV3IHJlZSh2MyxhLDUsOCkpO3JldHVybiBhLmN9CmZ1bmN0aW9uIGY5YyhhKXthLmouYy5sZW5ndGg9MDt6ZShhLmMpO0g5YyhhLmEpO3JldHVybiBhfQpmdW5jdGlvbiBfdmQoYSxiLGMsZCl7JHZkKGEsYixjLGZhbHNlKTtFWWQoYSxkKTtyZXR1cm4gYX0KZnVuY3Rpb24gaGZiKGEsYil7d2hpbGUoYi0tPjApe2E9YTw8MXwoYTwwPzE6MCl9cmV0dXJuIGF9CmZ1bmN0aW9uICR3ZChhKXshYS5jJiYoYS5jPW5ldyBYMGQoQjMsYSw5LDkpKTtyZXR1cm4gYS5jfQpmdW5jdGlvbiBjbigpe2NuPVpjYjtibj1uZXcgSngoV0MoT0MoTEssMSksdHJlLDQzLDAsW10pKX0KZnVuY3Rpb24gWDVjKCl7UzVjKCk7cmV0dXJuIFdDKE9DKEQwLDEpLEVyZSw1NDMsMCxbUjVjXSl9CmZ1bmN0aW9uIE81Yygpe0k1YygpO3JldHVybiBXQyhPQyhDMCwxKSxFcmUsNDc1LDAsW0g1Y10pfQpmdW5jdGlvbiB2N2MoKXtwN2MoKTtyZXR1cm4gV0MoT0MoTDAsMSksRXJlLDUyNCwwLFtvN2NdKX0KZnVuY3Rpb24gQnlkKGEsYil7YkNkKGEsQmViKFp4ZChiLCd4JykpLEJlYihaeGQoYiwneScpKSl9CmZ1bmN0aW9uIE95ZChhLGIpe2JDZChhLEJlYihaeGQoYiwneCcpKSxCZWIoWnhkKGIsJ3knKSkpfQpmdW5jdGlvbiBfZmIoYSxiKXtBRGIoYixhLmxlbmd0aCk7cmV0dXJuIGEuY2hhckNvZGVBdChiKX0KZnVuY3Rpb24gankoYSxiKXt0aGlzLmI9YTt0aGlzLmM9Yjt0aGlzLmE9bmV3IERyYih0aGlzLmIpfQpmdW5jdGlvbiBCbGIoYSl7dGhpcy5kPWE7dGhpcy5hPXRoaXMuZC5iO3RoaXMuYj10aGlzLmQuY30KZnVuY3Rpb24gWGZiKGEsYixjKXt0aGlzLmE9VHJlO3RoaXMuZD1hO3RoaXMuYj1iO3RoaXMuYz1jfQpmdW5jdGlvbiBJdmIoYSxiKXt0aGlzLmQ9KHREYihhKSxhKTt0aGlzLmE9MTY0NDk7dGhpcy5jPWJ9CmZ1bmN0aW9uIFdhZShhKXthLmY9PWdHZSYmYWJlKGEsVzlkKGEuZyxhLmIpKTtyZXR1cm4gYS5mfQpmdW5jdGlvbiBWYWUoYSl7YS5lPT1nR2UmJl9hZShhLFY5ZChhLmcsYS5iKSk7cmV0dXJuIGEuZX0KZnVuY3Rpb24gR2goYSl7dmFyIGI7Yj1hLmI7IWImJihhLmI9Yj1uZXcgVmgoYSkpO3JldHVybiBifQpmdW5jdGlvbiB6ZShhKXt2YXIgYjtmb3IoYj1hLkpjKCk7Yi5PYigpOyl7Yi5QYigpO2IuUWIoKX19CmZ1bmN0aW9uIEFrKGEsYixjKXt2YXIgZDtkPUpEKGEuZC5LYihjKSwxNTgpOyEhZCYmZC5OYihiKX0KZnVuY3Rpb24gTHkoYSxiKXtyZXR1cm4gbmV3IEp5KEpEKFFiKGEpLDUxKSxKRChRYihiKSw1MSkpfQpmdW5jdGlvbiBfU2IoYSxiKXtYU2IoKTtyZXR1cm4gSGViKCh0RGIoYSksYSksKHREYihiKSxiKSl9CmZ1bmN0aW9uIEJCYihhLGIpe0xBYihhKTtyZXR1cm4gbmV3IFJCYihhLG5ldyBnQ2IoYixhLmEpKX0KZnVuY3Rpb24gRkJiKGEsYil7TEFiKGEpO3JldHVybiBuZXcgUkJiKGEsbmV3IHlDYihiLGEuYSkpfQpmdW5jdGlvbiBIQmIoYSxiKXtMQWIoYSk7cmV0dXJuIG5ldyBuQmIoYSxuZXcgc0NiKGIsYS5hKSl9CmZ1bmN0aW9uIEdCYihhLGIpe0xBYihhKTtyZXR1cm4gbmV3IFZBYihhLG5ldyBtQ2IoYixhLmEpKX0KZnVuY3Rpb24gbUZiKGEsYil7cmV0dXJuIEhlYihhLmQuYythLmQuYi8yLGIuZC5jK2IuZC5iLzIpfQpmdW5jdGlvbiBlU2IoYSxiKXtyZXR1cm4gSGViKGEuZy5jK2EuZy5iLzIsYi5nLmMrYi5nLmIvMil9CmZ1bmN0aW9uIFRkYyhhKXtBZGMoKTt2YXIgYjtiPUpEKGEuZyw5KTtiLm4uYT1hLmQuYytiLmQuYn0KZnVuY3Rpb24gX1ZiKGEpe3ZhciBiO2I9al9iKGEpO2lmKGIpe3JldHVybiBifXJldHVybiBudWxsfQpmdW5jdGlvbiBydWIoKXtxei5jYWxsKHRoaXMsJ1RoZXJlIGlzIG5vIG1vcmUgZWxlbWVudC4nKX0KZnVuY3Rpb24gRWljKGEsYixjLGQpe21zLmNhbGwodGhpcyxhLGIpO3RoaXMuYT1jO3RoaXMuYj1kfQpmdW5jdGlvbiBVSWMoYSxiLGMsZCl7dGhpcy5jPWE7dGhpcy5iPWI7dGhpcy5hPWM7dGhpcy5kPWR9CmZ1bmN0aW9uIHhKYyhhLGIsYyxkKXt0aGlzLmM9YTt0aGlzLmI9Yjt0aGlzLmQ9Yzt0aGlzLmE9ZH0KZnVuY3Rpb24gZ2RkKGEsYixjLGQpe3RoaXMuYz1hO3RoaXMuZD1iO3RoaXMuYj1jO3RoaXMuYT1kfQpmdW5jdGlvbiBySGMoYSxiLGMsZCl7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5iPWM7dGhpcy5kPWR9CmZ1bmN0aW9uIEpOYyhhLGIsYyxkKXt0aGlzLmE9YTt0aGlzLmQ9Yjt0aGlzLmM9Yzt0aGlzLmI9ZH0KZnVuY3Rpb24gRFdiKGEsYixjLGQpe3RoaXMuYT1hO3RoaXMuZT1iO3RoaXMuZD1jO3RoaXMuYz1kfQpmdW5jdGlvbiBGQ2MoYSl7dGhpcy5hPW5ldyBVbGI7dGhpcy5lPVNDKGNFLGhyZSw1NCxhLDAsMil9CmZ1bmN0aW9uIFJOZChhKXtyZXR1cm4gYSE9bnVsbCYma29iKHpOZCxhLnRvTG93ZXJDYXNlKCkpfQpmdW5jdGlvbiBWbGQoYSxiKXtyZXR1cm4gSGViKGNtZChhKSpibWQoYSksY21kKGIpKmJtZChiKSl9CmZ1bmN0aW9uIFdsZChhLGIpe3JldHVybiBIZWIoY21kKGEpKmJtZChhKSxjbWQoYikqYm1kKGIpKX0KZnVuY3Rpb24gaGJjKGEsYixjKXtTamMoYS5hLGMpO2dqYyhjKTtoa2MoYS5iLGMpO0FqYyhiLGMpfQpmdW5jdGlvbiBScWQoYSxiLGMpe3ZhciBkLGU7ZD1KTmQoYSk7ZT1iLnBpKGMsZCk7cmV0dXJuIGV9CmZ1bmN0aW9uIFB2ZChhKXt2YXIgYixjO2M9KGI9bmV3IE5aZCxiKTtHWmQoYyxhKTtyZXR1cm4gY30KZnVuY3Rpb24gUXZkKGEpe3ZhciBiLGM7Yz0oYj1uZXcgTlpkLGIpO0taZChjLGEpO3JldHVybiBjfQpmdW5jdGlvbiBZd2QoYSl7IWEuYiYmKGEuYj1uZXcgWDBkKHgzLGEsMTIsMykpO3JldHVybiBhLmJ9CmZ1bmN0aW9uIExnKGEpe2dnKGEuZCk7aWYoYS5kLmQhPWEuYyl7dGhyb3cgc2NiKG5ldyB5cWIpfX0KZnVuY3Rpb24gUzJkKGEsYixjLGQpe3RoaXMuYT1hO3RoaXMuYz1iO3RoaXMuZD1jO3RoaXMuYj1kfQpmdW5jdGlvbiBLQWQoYSxiLGMsZCl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5kPWM7dGhpcy5jPWR9CmZ1bmN0aW9uIEx6ZChhLGIsYyxkKXt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Yzt0aGlzLmQ9ZH0KZnVuY3Rpb24gTnpkKGEsYixjLGQpe3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuYz1jO3RoaXMuZD1kfQpmdW5jdGlvbiBDMmQoYSxiLGMsZCl7dGhpcy5lPWE7dGhpcy5hPWI7dGhpcy5jPWM7dGhpcy5kPWR9CmZ1bmN0aW9uIFgzZChhLGIsYyxkKXtOMmQoKTtmM2QuY2FsbCh0aGlzLGIsYyxkKTt0aGlzLmE9YX0KZnVuY3Rpb24gYzRkKGEsYixjLGQpe04yZCgpO2YzZC5jYWxsKHRoaXMsYixjLGQpO3RoaXMuYT1hfQpmdW5jdGlvbiBUZyhhLGIpe3RoaXMuYT1hO05nLmNhbGwodGhpcyxhLEpEKGEuZCwxNSkuZGQoYikpfQpmdW5jdGlvbiBWS2QoYSl7dGhpcy5mPWE7dGhpcy5jPXRoaXMuZi5lO2EuZj4wJiZVS2QodGhpcyl9CmZ1bmN0aW9uIGJDYihhLGIsYyxkKXt0aGlzLmI9YTt0aGlzLmM9ZDtsd2IuY2FsbCh0aGlzLGIsYyl9CmZ1bmN0aW9uIEx0YihhKXthLmEuYT1hLmM7YS5jLmI9YS5hO2EuYS5iPWEuYy5hPW51bGw7YS5iPTB9CmZ1bmN0aW9uIE1YYihhLGIpe2EuYj1iLmI7YS5jPWIuYzthLmQ9Yi5kO2EuYT1iLmE7cmV0dXJuIGF9CmZ1bmN0aW9uICR5KGEpe2lmKGEubil7YS5lIT09TXJlJiZhLmhlKCk7YS5qPW51bGx9cmV0dXJuIGF9CmZ1bmN0aW9uIE5EKGEpe0JEYihhPT1udWxsfHxXRChhKSYmIShhLlFtPT09YmRiKSk7cmV0dXJuIGF9CmZ1bmN0aW9uIHNqYihhKXtyRGIoYS5iPGEuZC5nYygpKTtyZXR1cm4gYS5kLlhiKGEuYz1hLmIrKyl9CmZ1bmN0aW9uIHpiYyhhLGIpe0pEKFdNYihhLChJcWMoKSxhcWMpKSwxNSkuRWMoYik7cmV0dXJuIGJ9CmZ1bmN0aW9uIGU5YihhLGIpe3JldHVybiBSYyhhLEpEKFdNYihiLChCd2MoKSx3dmMpKSwxNyksYil9CmZ1bmN0aW9uIHokYihhKXtyZXR1cm4gU3RkKGEpJiZ5ZGIoTEQoa3NkKGEsKEJ3YygpLE91YykpKSl9CmZ1bmN0aW9uIG5kKGEpe3ZhciBiO3JldHVybiBiPWEuZiwhYj8oYS5mPW5ldyBtZShhLGEuYykpOmJ9CmZ1bmN0aW9uIHBkYyhhLGIsYyl7amRjKCk7cmV0dXJuICRFYihKRChOaWIoYS5lLGIpLDUxNCksYyl9CmZ1bmN0aW9uIHJmYyhhLGIsYyl7YS5pPTA7YS5lPTA7aWYoYj09Yyl7cmV0dXJufW5mYyhhLGIsYyl9CmZ1bmN0aW9uIHNmYyhhLGIsYyl7YS5pPTA7YS5lPTA7aWYoYj09Yyl7cmV0dXJufW9mYyhhLGIsYyl9CmZ1bmN0aW9uIEJsYyhhLGIpe2lmKCEhYS5lJiYhYS5lLmEpe3psYyhhLmUsYik7QmxjKGEuZSxiKX19CmZ1bmN0aW9uIEFsYyhhLGIpe2lmKCEhYS5kJiYhYS5kLmEpe3psYyhhLmQsYik7QWxjKGEuZCxiKX19CmZ1bmN0aW9uIEJEYyhhLGIpe3RoaXMuZz1hO3RoaXMuZD1XQyhPQyhSUCwxKSxKdmUsOSwwLFtiXSl9CmZ1bmN0aW9uIFpRYyhhLGIpe25ldyBNdGI7dGhpcy5hPW5ldyBSZGQ7dGhpcy5iPWE7dGhpcy5jPWJ9CmZ1bmN0aW9uIFMwYihhKXt0aGlzLmI9bmV3IFVsYjtLbGIodGhpcy5iLHRoaXMuYik7dGhpcy5hPWF9CmZ1bmN0aW9uIGd3ZCgpe2R3ZCh0aGlzLG5ldyBhdmQpO3RoaXMud2I9KEdPZCgpLEZPZCk7RU9kKCl9CmZ1bmN0aW9uIFFuZChhKXtyZXR1cm4gSkQoYS5qZCgpLDE0NCkuTmcoKSsnOicrYWRiKGEua2QoKSl9CmZ1bmN0aW9uIHFOYyhhLGIpe3JldHVybiBZTmMoYS5qLGIucyxiLmMpK1lOYyhiLmUsYS5zLGEuYyl9CmZ1bmN0aW9uIFVsZChhLGIpe3JldHVybiAtSGViKGNtZChhKSpibWQoYSksY21kKGIpKmJtZChiKSl9CmZ1bmN0aW9uIFV4ZChhLGIsYyl7dmFyIGQsZTtkPUhkYihjKTtlPW5ldyBfQihkKTtrQyhhLGIsZSl9CmZ1bmN0aW9uIHc5YyhhLGIpe3JiKGEpO3JiKGIpO3JldHVybiBqcyhKRChhLDIzKSxKRChiLDIzKSl9CmZ1bmN0aW9uIEhGYyhhKXthLlNnKCdObyBjcm9zc2luZyBtaW5pbWl6YXRpb24nLDEpO2EuVGcoKX0KZnVuY3Rpb24gT3ooYSl7SXooKTskd25kLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBhfSwwKX0KZnVuY3Rpb24gU1RkKGEpeyFhLnMmJihhLnM9bmV3IFgwZChxNixhLDIxLDE3KSk7cmV0dXJuIGEuc30KZnVuY3Rpb24gUFRkKGEpeyFhLnEmJihhLnE9bmV3IFgwZChrNixhLDExLDEwKSk7cmV0dXJuIGEucX0KZnVuY3Rpb24gWHdkKGEpeyFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSk7cmV0dXJuIGEuYX0KZnVuY3Rpb24gUmIoYSxiKXtpZihhPT1udWxsKXt0aHJvdyBzY2IobmV3IEZmYihiKSl9cmV0dXJuIGF9CmZ1bmN0aW9uIHBuYigpe3BuYj1aY2I7bW5iPW5ldyBBbmI7bm5iPW5ldyBUbmI7b25iPW5ldyBfbmJ9CmZ1bmN0aW9uIGpxYigpe2pxYj1aY2I7Z3FiPW5ldyBscWI7aHFiPW5ldyBscWI7aXFiPW5ldyBxcWJ9CmZ1bmN0aW9uIEVFYigpe0VFYj1aY2I7QkViPW5ldyB6RWI7REViPW5ldyBlRmI7Q0ViPW5ldyBYRWJ9CmZ1bmN0aW9uIFp6KCl7Wno9WmNiO3ZhciBhLGI7Yj0hZEEoKTthPW5ldyBsQTtZej1iP25ldyBlQTphfQpmdW5jdGlvbiBhcihhKXtRYihhKTtyZXR1cm4gQXIobmV3IGVzKElyKGEuYS5KYygpLG5ldyBlcikpKX0KZnVuY3Rpb24gVGkoYSl7cmV0dXJuIG5ldyBnaihhLGEuZS5QZCgpLmdjKCkqYS5jLlBkKCkuZ2MoKSl9CmZ1bmN0aW9uIGRqKGEpe3JldHVybiBuZXcgcWooYSxhLmUuUGQoKS5nYygpKmEuYy5QZCgpLmdjKCkpfQpmdW5jdGlvbiBReChhKXtyZXR1cm4gUkQoYSwxNik/bmV3IFNyYihKRChhLDE2KSk6UngoYS5KYygpKX0KZnVuY3Rpb24geW5iKGEpe3BuYigpO3JldHVybiBSRChhLDU5KT9uZXcgWnBiKGEpOm5ldyBLb2IoYSl9CmZ1bmN0aW9uIFBpYihhLGIpe3JldHVybiBiPT1udWxsPyEhZnNiKGEuZixudWxsKTp5c2IoYS5pLGIpfQpmdW5jdGlvbiBBeihhKXtyZXR1cm4gISFhJiYhIWEuaGFzaENvZGU/YS5oYXNoQ29kZSgpOmpEYihhKX0KZnVuY3Rpb24gQ3UoYSl7dGhpcy5iPWE7dGhpcy5jPWE7YS5lPW51bGw7YS5jPW51bGw7dGhpcy5hPTF9CmZ1bmN0aW9uIGlNYihhKXt0aGlzLmI9YTt0aGlzLmE9bmV3IG16YihKRChRYihuZXcgbE1iKSw1MSkpfQpmdW5jdGlvbiBrRmIoYSl7dGhpcy5jPWE7dGhpcy5iPW5ldyBtemIoSkQoUWIobmV3IG5GYiksNTEpKX0KZnVuY3Rpb24gY1NiKGEpe3RoaXMuYz1hO3RoaXMuYj1uZXcgbXpiKEpEKFFiKG5ldyBmU2IpLDUxKSl9CmZ1bmN0aW9uIGtXYigpe3RoaXMuYT1uZXcgUmRkO3RoaXMuYj0oYmsoMyxEcmUpLG5ldyBWbGIoMykpfQpmdW5jdGlvbiBkTmIoKXt0aGlzLmM9bmV3IENkZDt0aGlzLmQ9bmV3IENkZDt0aGlzLmU9bmV3IENkZH0KZnVuY3Rpb24gd0xjKCl7dGhpcy5iPW5ldyBRcmI7dGhpcy5kPW5ldyBNdGI7dGhpcy5lPW5ldyB0eGJ9CmZ1bmN0aW9uIGhkZChhKXt0aGlzLmM9YS5jO3RoaXMuZD1hLmQ7dGhpcy5iPWEuYjt0aGlzLmE9YS5hfQpmdW5jdGlvbiBOZWUoYSxiLGMsZCl7RlVkLmNhbGwodGhpcyxiLGMpO3RoaXMuYj1hO3RoaXMuYT1kfQpmdW5jdGlvbiBKeShhLGIpe3VpLmNhbGwodGhpcyxuZXcgVXhiKGEpKTt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24gekdkKGEsYixjLGQsZSxmKXt0aGlzLmE9YTtrR2QuY2FsbCh0aGlzLGIsYyxkLGUsZil9CmZ1bmN0aW9uIHNIZChhLGIsYyxkLGUsZil7dGhpcy5hPWE7a0dkLmNhbGwodGhpcyxiLGMsZCxlLGYpfQpmdW5jdGlvbiB5X2QoYSxiLGMsZCxlLGYpe3hfZC5jYWxsKHRoaXMsYSxiLGMsZCxlLGY/LTI6LTEpfQpmdW5jdGlvbiBMRWIoYSxiLGMpe2lmKGEuZil7cmV0dXJuIGEuZi5jZihiLGMpfXJldHVybiBmYWxzZX0KZnVuY3Rpb24gVVRkKGEpe2lmKCFhLnUpe1RUZChhKTthLnU9bmV3IFJYZChhLGEpfXJldHVybiBhLnV9CmZ1bmN0aW9uIHJSYihhLGIpe3ZhciBjO2M9UHJiKGEuYSxiKTtjJiYoYi5kPW51bGwpO3JldHVybiBjfQpmdW5jdGlvbiB5cmQoYSl7dmFyIGI7Yj1KRChDcmQoYSwxNiksMjkpO3JldHVybiAhYj9hLmVpKCk6Yn0KZnVuY3Rpb24gZHooYSxiKXt2YXIgYztjPWVlYihhLk9tKTtyZXR1cm4gYj09bnVsbD9jOmMrJzogJytifQpmdW5jdGlvbiBEMmQoYSxiKXt0aGlzLmU9YTt0aGlzLmE9YUo7dGhpcy5iPUtlZShiKTt0aGlzLmM9Yn0KZnVuY3Rpb24gSUJkKGEsYil7cmV0dXJuIFJEKGIsMTQ0KSYmY2diKGEuYixKRChiLDE0NCkuTmcoKSl9CmZ1bmN0aW9uIG05ZChhLGIpe3JldHVybiBhLmE/Yi5DaCgpLkpjKCk6SkQoYi5DaCgpLDcxKS5GaSgpfQpmdW5jdGlvbiB2UmMoYSxiLGMpe3JldHVybiBCZWIoTUQoYy5hKSk8PWEmJkJlYihNRChjLmIpKT49Yn0KZnVuY3Rpb24gb2diKGEsYixjKXtyZXR1cm4gYz49MCYmY2diKGEuc3Vic3RyKGMsYi5sZW5ndGgpLGIpfQpmdW5jdGlvbiBBYmUoYSxiLGMsZCxlLGYsZyl7cmV0dXJuIG5ldyBHZ2UoYS5lLGIsYyxkLGUsZixnKX0KZnVuY3Rpb24gaXpjKGEsYixjLGQpe1ZDKGEuY1tiLmddLGIuZyxjKTtWQyhhLmJbYi5nXSxiLmcsZCl9CmZ1bmN0aW9uIGZ6YyhhLGIsYyxkKXtWQyhhLmNbYi5nXSxjLmcsZCk7VkMoYS5jW2MuZ10sYi5nLGQpfQpmdW5jdGlvbiBxZ2IoYSxiLGMpe3pEYihiLGMsYS5sZW5ndGgpO3JldHVybiBhLnN1YnN0cihiLGMtYil9CmZ1bmN0aW9uIEZwYihhLGIpe3ZhciBjO2M9YS5iLk9jKGIpO0dwYihjLGEuYi5nYygpKTtyZXR1cm4gY30KZnVuY3Rpb24gd3ViKGEsYil7aWYoYT09bnVsbCl7dGhyb3cgc2NiKG5ldyBGZmIoYikpfXJldHVybiBhfQpmdW5jdGlvbiBHeChhKXt0aGlzLmE9KHBuYigpLFJEKGEsNTkpP25ldyBacGIoYSk6bmV3IEtvYihhKSl9CmZ1bmN0aW9uIGVkYihhKXshYT9ScWU6ZHooYSxhLmdlKCkpO1N0cmluZy5mcm9tQ2hhckNvZGUoMTApfQpmdW5jdGlvbiBlSWIoYSxiKXthSGIuY2FsbCh0aGlzKTtWSGIodGhpcyk7dGhpcy5hPWE7dGhpcy5jPWJ9CmZ1bmN0aW9uIGVPYigpe2JPYigpO3JldHVybiBXQyhPQyhoTywxKSxFcmUsNDIxLDAsW19OYixhT2JdKX0KZnVuY3Rpb24gYzJiKCl7XzFiKCk7cmV0dXJuIFdDKE9DKGJSLDEpLEVyZSw1MDEsMCxbJDFiLFoxYl0pfQpmdW5jdGlvbiBDS2MoKXt6S2MoKTtyZXR1cm4gV0MoT0ModFksMSksRXJlLDUwNywwLFt5S2MseEtjXSl9CmZ1bmN0aW9uIEtLYygpe0hLYygpO3JldHVybiBXQyhPQyh1WSwxKSxFcmUsNTA2LDAsW0ZLYyxHS2NdKX0KZnVuY3Rpb24geUhjKCl7dkhjKCk7cmV0dXJuIFdDKE9DKEFYLDEpLEVyZSw1MTYsMCxbdUhjLHRIY10pfQpmdW5jdGlvbiB5eWMoKXt2eWMoKTtyZXR1cm4gV0MoT0MobFcsMSksRXJlLDQxOCwwLFt0eWMsdXljXSl9CmZ1bmN0aW9uIFltYygpe1ZtYygpO3JldHVybiBXQyhPQyhOViwxKSxFcmUsNDE5LDAsW1RtYyxVbWNdKX0KZnVuY3Rpb24gTm5jKCl7S25jKCk7cmV0dXJuIFdDKE9DKFJWLDEpLEVyZSw0MTYsMCxbSW5jLEpuY10pfQpmdW5jdGlvbiBCcGMoKXt5cGMoKTtyZXR1cm4gV0MoT0MoJFYsMSksRXJlLDQxNywwLFt3cGMseHBjXSl9CmZ1bmN0aW9uIHBvYygpe21vYygpO3JldHVybiBXQyhPQyhVViwxKSxFcmUsNDc0LDAsW2xvYyxrb2NdKX0KZnVuY3Rpb24gVTJjKCl7TzJjKCk7cmV0dXJuIFdDKE9DKGIwLDEpLEVyZSw0NzYsMCxbTTJjLE4yY10pfQpmdW5jdGlvbiBacWMoKXtXcWMoKTtyZXR1cm4gV0MoT0MoYVcsMSksRXJlLDQyMCwwLFtWcWMsVXFjXSl9CmZ1bmN0aW9uIEdWYygpe0RWYygpO3JldHVybiBXQyhPQyh5JCwxKSxFcmUsNDIyLDAsW0NWYyxCVmNdKX0KZnVuY3Rpb24gR1ljKCl7QVljKCk7cmV0dXJuIFdDKE9DKGdfLDEpLEVyZSw0ODUsMCxbeVljLHpZY10pfQpmdW5jdGlvbiBHN2MoKXtBN2MoKTtyZXR1cm4gV0MoT0MoTTAsMSksRXJlLDQyNCwwLFt6N2MseTdjXSl9CmZ1bmN0aW9uIGQ2Yygpe2E2YygpO3JldHVybiBXQyhPQyhFMCwxKSxFcmUsNDI1LDAsW181YywkNWNdKX0KZnVuY3Rpb24gZCRjKCl7X1pjKCk7cmV0dXJuIFdDKE9DKHZfLDEpLEVyZSw0MjMsMCxbWlpjLCRaY10pfQpmdW5jdGlvbiBsTmMoKXtpTmMoKTtyZXR1cm4gV0MoT0MoUlksMSksRXJlLDUxMywwLFtoTmMsZ05jXSl9CmZ1bmN0aW9uIGpQYygpe2dQYygpO3JldHVybiBXQyhPQyhrWiwxKSxFcmUsNDUxLDAsW2VQYyxmUGNdKX0KZnVuY3Rpb24gZmxkKCl7Y2xkKCk7cmV0dXJuIFdDKE9DKEUyLDEpLEVyZSwzNDMsMCxbYWxkLGJsZF0pfQpmdW5jdGlvbiBucWQoYSxiLGMsZCl7cmV0dXJuIGM+PTA/YS5RaChiLGMsZCk6YS55aChudWxsLGMsZCl9CmZ1bmN0aW9uIFZuZChhKXtpZihhLmIuYj09MCl7cmV0dXJuIGEuYS51ZigpfXJldHVybiBJdGIoYS5iKX0KZnVuY3Rpb24gVUZkKGEpe2lmKGEucCE9NSl0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIFBjYihhLmYpfQpmdW5jdGlvbiBiR2QoYSl7aWYoYS5wIT01KXRocm93IHNjYihuZXcgVmViKTtyZXR1cm4gUGNiKGEuayl9CmZ1bmN0aW9uIGlXZChhKXtYRChhLmEpPT09WEQoKEdUZCgpLEZUZCkpJiZqV2QoYSk7cmV0dXJuIGEuYX0KZnVuY3Rpb24gUHgoYSxiKXtSYihhLCdzZXQxJyk7UmIoYiwnc2V0MicpO3JldHVybiBuZXcgYXkoYSxiKX0KZnVuY3Rpb24gRU9jKGEsYil7Qk9jKHRoaXMsbmV3IEVkZChhLmEsYS5iKSk7Q09jKHRoaXMsY3YoYikpfQpmdW5jdGlvbiBQcCgpe09wLmNhbGwodGhpcyxuZXcgSnJiKE92KDEyKSkpO0xiKHRydWUpO3RoaXMuYT0yfQpmdW5jdGlvbiB6cGUoYSxiLGMpe29vZSgpO3BvZS5jYWxsKHRoaXMsYSk7dGhpcy5iPWI7dGhpcy5hPWN9CmZ1bmN0aW9uIFgyZChhLGIsYyl7TjJkKCk7TzJkLmNhbGwodGhpcyxiKTt0aGlzLmE9YTt0aGlzLmI9Y30KZnVuY3Rpb24gZnRiKGEpe3ZhciBiO2I9YS5jLmQuYjthLmI9YjthLmE9YS5jLmQ7Yi5hPWEuYy5kLmI9YX0KZnVuY3Rpb24geTRjKGEsYil7YS5iPWI7YS5jPjAmJmEuYj4wJiYoYS5nPVE0YyhhLmMsYS5iLGEuYSkpfQpmdW5jdGlvbiB6NGMoYSxiKXthLmM9YjthLmM+MCYmYS5iPjAmJihhLmc9UTRjKGEuYyxhLmIsYS5hKSl9CmZ1bmN0aW9uIEh0YihhKXtyZXR1cm4gYS5iPT0wP251bGw6KHJEYihhLmIhPTApLEt0YihhLGEuYS5hKSl9CmZ1bmN0aW9uIE9pYihhLGIpe3JldHVybiBiPT1udWxsP1dkKGZzYihhLmYsbnVsbCkpOnpzYihhLmksYil9CmZ1bmN0aW9uIFJ4YihhLGIsYyxkLGUpe3JldHVybiBuZXcgeXliKGEsKFN5YigpLFF5YiksYixjLGQsZSl9CmZ1bmN0aW9uIHdtYihhLGIpe25EYihiKTtyZXR1cm4geW1iKGEsU0MoY0UsaXNlLDMwLGIsMTUsMSksYil9CmZ1bmN0aW9uIGtLYihhLGIpe2pLYihhLHRydWUpO0xsYihhLmUuUGYoKSxuZXcgb0tiKGEsdHJ1ZSxiKSl9CmZ1bmN0aW9uIFFEYihhKXt2YXIgYjtQR2IoYS5hKTtPR2IoYS5hKTtiPW5ldyAkR2IoYS5hKTtXR2IoYil9CmZ1bmN0aW9uIGFSYihhLGIpe3ZhciBjO2M9TFFiKGEuZixiKTtyZXR1cm4gbWRkKHRkZChjKSxhLmYuZCl9CmZ1bmN0aW9uIEx4YihhLGIpe3ZhciBjLGQ7Yz1iO2Q9bmV3IHV5YjtOeGIoYSxjLGQpO3JldHVybiBkLmR9CmZ1bmN0aW9uIFBKYihhLGIsYyxkKXt2YXIgZTtlPW5ldyBjSGI7Yi5hW2MuZ109ZTtMcWIoYS5iLGQsZSl9CmZ1bmN0aW9uIHA0YyhhLGIsYyl7dGhpcy5jPW5ldyBVbGI7dGhpcy5lPWE7dGhpcy5mPWI7dGhpcy5iPWN9CmZ1bmN0aW9uIHg0YyhhLGIsYyl7dGhpcy5hPW5ldyBVbGI7dGhpcy5lPWE7dGhpcy5mPWI7dGhpcy5jPWN9CmZ1bmN0aW9uIEc1YyhhLGIsYyl7dGhpcy5pPW5ldyBVbGI7dGhpcy5iPWE7dGhpcy5nPWI7dGhpcy5hPWN9CmZ1bmN0aW9uIGNJYihhKXthSGIuY2FsbCh0aGlzKTtWSGIodGhpcyk7dGhpcy5hPWE7dGhpcy5jPXRydWV9CmZ1bmN0aW9uIGx5KGEpe3RoaXMuYT1KRChRYihhKSwyNzQpO3RoaXMuYj0ocG5iKCksbmV3ICRwYihhKSl9CmZ1bmN0aW9uIEJxZChhLGIsYyl7dmFyIGQ7ZD1hLkVoKGIpO2Q+PTA/YS5aaChkLGMpOndxZChhLGIsYyl9CmZ1bmN0aW9uIGVFZChhLGIsYyl7YkVkKCk7ISFhJiZRaWIoYUVkLGEsYik7ISFhJiZRaWIoX0RkLGEsYyl9CmZ1bmN0aW9uIFVXYyhhLGIpe0VXYygpO3JldHVybiBKRChXTWIoYiwoa1ZjKCksaVZjKSksMTcpLmE9PWF9CmZ1bmN0aW9uIFlEKGEpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbihhLEhxZSksLTIxNDc0ODM2NDgpfDB9CmZ1bmN0aW9uIEN6KGEsYil7dmFyIGM9QnpbYS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gYz09bnVsbD9hOmN9CmZ1bmN0aW9uIE90ZChhKXtpZihhLkRiPj4xNiE9MylyZXR1cm4gbnVsbDtyZXR1cm4gSkQoYS5DYiwyNyl9CmZ1bmN0aW9uIG94ZChhKXtpZihhLkRiPj4xNiE9OSlyZXR1cm4gbnVsbDtyZXR1cm4gSkQoYS5DYiwyNyl9CmZ1bmN0aW9uIGh1ZChhKXtpZihhLkRiPj4xNiE9NilyZXR1cm4gbnVsbDtyZXR1cm4gSkQoYS5DYiw4NSl9CmZ1bmN0aW9uIHFlYihhKXtpZihhLnllKCkpe3JldHVybiBudWxsfXZhciBiPWEubjtyZXR1cm4gWGNiW2JdfQpmdW5jdGlvbiBpQyhhLGIpe2lmKGI9PW51bGwpe3Rocm93IHNjYihuZXcgRWZiKX1yZXR1cm4gakMoYSxiKX0KZnVuY3Rpb24gaGxiKGEsYil7aWYoYmxiKGEsYikpe0FsYihhKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIF9jYihhKXtmdW5jdGlvbiBiKCl7fQo7Yi5wcm90b3R5cGU9YXx8e307cmV0dXJuIG5ldyBifQpmdW5jdGlvbiBTeChhKXt2YXIgYjtiPW5ldyBScmIoT3YoYS5sZW5ndGgpKTtxbmIoYixhKTtyZXR1cm4gYn0KZnVuY3Rpb24gTFhiKGEsYil7YS5iKz1iLmI7YS5jKz1iLmM7YS5kKz1iLmQ7YS5hKz1iLmE7cmV0dXJuIGF9CmZ1bmN0aW9uIHZvKGEsYil7dmFyIGM7UWIoYik7Zm9yKGM9YS5hO2M7Yz1jLmMpe2IuV2QoYy5nLGMuaSl9fQpmdW5jdGlvbiBmQihhLGIpe3ZhciBjO2M9YS5xLmdldEhvdXJzKCk7YS5xLnNldERhdGUoYik7ZUIoYSxjKX0KZnVuY3Rpb24gYjFiKGEsYil7cmV0dXJuICR3bmQuTWF0aC5hYnMoYSk8JHduZC5NYXRoLmFicyhiKT9hOmJ9CmZ1bmN0aW9uIG84YihhLGIpe2M4YigpO3JldHVybiB4ZGIoKSxKRChiLmEsMTcpLmE8YT90cnVlOmZhbHNlfQpmdW5jdGlvbiBuOGIoYSxiKXtjOGIoKTtyZXR1cm4geGRiKCksSkQoYi5iLDE3KS5hPGE/dHJ1ZTpmYWxzZX0KZnVuY3Rpb24gcHFkKGEsYil7dmFyIGM7Yz1hLkVoKGIpO3JldHVybiBjPj0wP2EuU2goYyk6dnFkKGEsYil9CmZ1bmN0aW9uIHNHYyhhLGIsYyl7dmFyIGQ7ZD10R2MoYSxiLGMpO2EuYj1uZXcgY0djKGQuYy5sZW5ndGgpfQpmdW5jdGlvbiB6S2MoKXt6S2M9WmNiO3lLYz1uZXcgQUtjKGF1ZSwwKTt4S2M9bmV3IEFLYyhfdGUsMSl9CmZ1bmN0aW9uIEhLYygpe0hLYz1aY2I7RktjPW5ldyBJS2MobHVlLDApO0dLYz1uZXcgSUtjKCdVUCcsMSl9CmZ1bmN0aW9uIGdQYygpe2dQYz1aY2I7ZVBjPW5ldyBoUGMoX3RlLDApO2ZQYz1uZXcgaFBjKGF1ZSwxKX0KZnVuY3Rpb24gQUNkKGEsYil7dmFyIGM7Yz1uZXcgeXRiKGIpO1RlKGMsYSk7cmV0dXJuIG5ldyBXbGIoYyl9CmZ1bmN0aW9uIFJEZChhKXt2YXIgYjtiPWEuZDtiPWEuJGkoYS5mKTt0Q2QoYSxiKTtyZXR1cm4gYi5PYigpfQpmdW5jdGlvbiBQRmQoYSl7aWYoYS5wIT0wKXRocm93IHNjYihuZXcgVmViKTtyZXR1cm4gSGNiKGEuZiwwKX0KZnVuY3Rpb24gWUZkKGEpe2lmKGEucCE9MCl0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIEhjYihhLmssMCl9CmZ1bmN0aW9uIEt2ZChhKXtpZihhLkRiPj4xNiE9NylyZXR1cm4gbnVsbDtyZXR1cm4gSkQoYS5DYiwyNDApfQpmdW5jdGlvbiBId2QoYSl7aWYoYS5EYj4+MTYhPTcpcmV0dXJuIG51bGw7cmV0dXJuIEpEKGEuQ2IsMTczKX0KZnVuY3Rpb24gWndkKGEpe2lmKGEuRGI+PjE2IT0xMSlyZXR1cm4gbnVsbDtyZXR1cm4gSkQoYS5DYiwyNyl9CmZ1bmN0aW9uIFBSZChhKXtpZihhLkRiPj4xNiE9MTcpcmV0dXJuIG51bGw7cmV0dXJuIEpEKGEuQ2IsMjkpfQpmdW5jdGlvbiBTU2QoYSl7aWYoYS5EYj4+MTYhPTYpcmV0dXJuIG51bGw7cmV0dXJuIEpEKGEuQ2IsMjQwKX0KZnVuY3Rpb24gRlFkKGEpe2lmKGEuRGI+PjE2IT0zKXJldHVybiBudWxsO3JldHVybiBKRChhLkNiLDE1NCl9CmZ1bmN0aW9uIG9lYihhLGIpe3ZhciBjPWEuYT1hLmF8fFtdO3JldHVybiBjW2JdfHwoY1tiXT1hLnRlKGIpKX0KZnVuY3Rpb24gaUIoYSxiKXt2YXIgYztjPWEucS5nZXRIb3VycygpO2EucS5zZXRNb250aChiKTtlQihhLGMpfQpmdW5jdGlvbiBBQmIoYSl7dmFyIGI7TEFiKGEpO2I9bmV3IFFyYjtyZXR1cm4gQkJiKGEsbmV3IF9CYihiKSl9CmZ1bmN0aW9uIGJFZCgpe2JFZD1aY2I7YUVkPW5ldyBJcmI7X0RkPW5ldyBJcmI7ZkVkKHFLLG5ldyBnRWQpfQpmdW5jdGlvbiBlRWIoKXt0aGlzLmE9bmV3IHd0Yjt0aGlzLmU9bmV3IFFyYjt0aGlzLmc9MDt0aGlzLmk9MH0KZnVuY3Rpb24gZ3ooYSxiKXtZeSh0aGlzKTt0aGlzLmY9Yjt0aGlzLmc9YTskeSh0aGlzKTt0aGlzLmhlKCl9CmZ1bmN0aW9uIGJNYihhLGIpe3RoaXMuYT1hO3RoaXMuYz1vZGQodGhpcy5hKTt0aGlzLmI9bmV3IGhkZChiKX0KZnVuY3Rpb24gX0RiKGEsYixjKXt0aGlzLmE9Yjt0aGlzLmM9YTt0aGlzLmI9KFFiKGMpLG5ldyBXbGIoYykpfQpmdW5jdGlvbiBDVGIoYSxiLGMpe3RoaXMuYT1iO3RoaXMuYz1hO3RoaXMuYj0oUWIoYyksbmV3IFdsYihjKSl9CmZ1bmN0aW9uIGNGYyhhKXt0aGlzLmE9YTt0aGlzLmI9U0MoZVgsaHJlLDE5ODksYS5lLmxlbmd0aCwwLDIpfQpmdW5jdGlvbiBfd2QoYSl7cmV0dXJuICFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hLmk+MH0KZnVuY3Rpb24geVVkKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IGlfZChhLmUsYixhLklqKCksYyxkLGUsZil9CmZ1bmN0aW9uIFJpYihhLGIsYyl7cmV0dXJuIGI9PW51bGw/Z3NiKGEuZixudWxsLGMpOkFzYihhLmksYixjKX0KZnVuY3Rpb24gZ1diKGEsYil7ISFhLmMmJlBsYihhLmMuZyxhKTthLmM9YjshIWEuYyYmSWxiKGEuYy5nLGEpfQpmdW5jdGlvbiBxWWIoYSxiKXshIWEuYyYmUGxiKGEuYy5hLGEpO2EuYz1iOyEhYS5jJiZJbGIoYS5jLmEsYSl9CmZ1bmN0aW9uIF9ZYihhLGIpeyEhYS5pJiZQbGIoYS5pLmosYSk7YS5pPWI7ISFhLmkmJklsYihhLmkuaixhKX0KZnVuY3Rpb24gaFdiKGEsYil7ISFhLmQmJlBsYihhLmQuZSxhKTthLmQ9YjshIWEuZCYmSWxiKGEuZC5lLGEpfQpmdW5jdGlvbiB2RGIoYSxiKXtpZihhPDB8fGE+Yil7dGhyb3cgc2NiKG5ldyBtZGIoeXRlK2ErenRlK2IpKX19CmZ1bmN0aW9uIGpxKGEsYixjKXtJbGIoYS5hLChjbigpLGFrKGIsYyksbmV3IGNwKGIsYykpKTtyZXR1cm4gYX0KZnVuY3Rpb24gY05jKGEsYil7ISFhLmEmJlBsYihhLmEuayxhKTthLmE9YjshIWEuYSYmSWxiKGEuYS5rLGEpfQpmdW5jdGlvbiBkTmMoYSxiKXshIWEuYiYmUGxiKGEuYi5mLGEpO2EuYj1iOyEhYS5iJiZJbGIoYS5iLmYsYSl9CmZ1bmN0aW9uIGVOYyhhLGIsYyxkKXt0aGlzLmM9YTt0aGlzLmQ9ZDtjTmModGhpcyxiKTtkTmModGhpcyxjKX0KZnVuY3Rpb24gakFjKCl7akFjPVpjYjtpQWM9QzljKG5ldyBKOWMsKENRYigpLEJRYiksKHU1YigpLGw1YikpfQpmdW5jdGlvbiBOemMoKXtOemM9WmNiO016Yz1DOWMobmV3IEo5YywoQ1FiKCksQlFiKSwodTViKCksbDViKSl9CmZ1bmN0aW9uIFV6Yygpe1V6Yz1aY2I7VHpjPUM5YyhuZXcgSjljLChDUWIoKSxCUWIpLCh1NWIoKSxsNWIpKX0KZnVuY3Rpb24gREhjKCl7REhjPVpjYjtDSGM9RTljKG5ldyBKOWMsKENRYigpLEJRYiksKHU1YigpLEw0YikpfQpmdW5jdGlvbiBnSWMoKXtnSWM9WmNiO2ZJYz1FOWMobmV3IEo5YywoQ1FiKCksQlFiKSwodTViKCksTDRiKSl9CmZ1bmN0aW9uIGpLYygpe2pLYz1aY2I7aUtjPUU5YyhuZXcgSjljLChDUWIoKSxCUWIpLCh1NWIoKSxMNGIpKX0KZnVuY3Rpb24gWktjKCl7WktjPVpjYjtZS2M9RTljKG5ldyBKOWMsKENRYigpLEJRYiksKHU1YigpLEw0YikpfQpmdW5jdGlvbiBLVmMoKXtLVmM9WmNiO0pWYz1DOWMobmV3IEo5YywoX1BjKCksWlBjKSwoWlNjKCksUFNjKSl9CmZ1bmN0aW9uIEVzKCl7RXM9WmNiO0RzPW9zKCh2cygpLFdDKE9DKEpHLDEpLEVyZSw1MzQsMCxbdXNdKSkpfQpmdW5jdGlvbiBnUmIoYSl7WFFiKCk7cmV0dXJuIHhkYigpLEpEKGEuYSw4MikuZC5lIT0wP3RydWU6ZmFsc2V9CmZ1bmN0aW9uIG1ZYyhhLGIpe3JldHVybiBIZWIoSkQoYS5jLDY1KS5jLmUuYixKRChiLmMsNjUpLmMuZS5iKX0KZnVuY3Rpb24gblljKGEsYil7cmV0dXJuIEhlYihKRChhLmMsNjUpLmMuZS5hLEpEKGIuYyw2NSkuYy5lLmEpfQpmdW5jdGlvbiBiOGMoYSxiKXtjOGMoYSxhLmIsYS5jKTtKRChhLmIuYiw2OCk7ISFiJiZKRChiLmIsNjgpLmJ9CmZ1bmN0aW9uIHUxZChhLGIpe3YxZChhLGIpO1JEKGEuQ2IsODgpJiZRVmQoVFRkKEpEKGEuQ2IsODgpKSwyKX0KZnVuY3Rpb24gWFJkKGEsYil7UkQoYS5DYiw4OCkmJlFWZChUVGQoSkQoYS5DYiw4OCkpLDQpO3J2ZChhLGIpfQpmdW5jdGlvbiBlVGQoYSxiKXtSRChhLkNiLDE4NCkmJihKRChhLkNiLDE4NCkudGI9bnVsbCk7cnZkKGEsYil9CmZ1bmN0aW9uIE13KGEsYil7dmFyIGM7Yz1KRChUdihuZChhLmEpLGIpLDE2KTtyZXR1cm4gIWM/MDpjLmdjKCl9CmZ1bmN0aW9uIGlCZChhLGIpe3ZhciBjLGQ7Yz1iLmM7ZD1jIT1udWxsO2QmJlN4ZChhLG5ldyBHQyhiLmMpKX0KZnVuY3Rpb24gUVhkKGEpe3ZhciBiLGM7Yz0oRU9kKCksYj1uZXcgTlpkLGIpO0daZChjLGEpO3JldHVybiBjfQpmdW5jdGlvbiBaX2QoYSl7dmFyIGIsYztjPShFT2QoKSxiPW5ldyBOWmQsYik7R1pkKGMsYSk7cmV0dXJuIGN9CmZ1bmN0aW9uIEJyKGEpe3ZhciBiO3doaWxlKHRydWUpe2I9YS5QYigpO2lmKCFhLk9iKCkpe3JldHVybiBifX19CmZ1bmN0aW9uIGZpYihhKXtHaGIoKTtyZXR1cm4gdmNiKGEsMCk+PTA/YWliKGEpOk9oYihhaWIoR2NiKGEpKSl9CmZ1bmN0aW9uIEJ2YihhLGIpe0F2YihhLFBjYih1Y2IoS2NiKGIsMjQpLGp0ZSkpLFBjYih1Y2IoYixqdGUpKSl9CmZ1bmN0aW9uIFFsYihhLGIsYyl7dmFyIGQ7d0RiKGIsYyxhLmMubGVuZ3RoKTtkPWMtYjtaQ2IoYS5jLGIsZCl9CmZ1bmN0aW9uIElqYihhLGIsYyl7d0RiKGIsYyxhLmdjKCkpO3RoaXMuYz1hO3RoaXMuYT1iO3RoaXMuYj1jLWJ9CmZ1bmN0aW9uIHVhZChhKXt0aGlzLmM9bmV3IE10Yjt0aGlzLmI9YS5iO3RoaXMuZD1hLmM7dGhpcy5hPWEuYX0KZnVuY3Rpb24gRGRkKGEpe3RoaXMuYT0kd25kLk1hdGguY29zKGEpO3RoaXMuYj0kd25kLk1hdGguc2luKGEpfQpmdW5jdGlvbiBHdmIoYSxiKXt0aGlzLmI9KHREYihhKSxhKTt0aGlzLmE9KGImTXNlKT09MD9ifDY0fGlyZTpifQpmdW5jdGlvbiBzRGIoYSxiKXtpZihhPDB8fGE+PWIpe3Rocm93IHNjYihuZXcgbWRiKHl0ZSthK3p0ZStiKSl9fQpmdW5jdGlvbiBBRGIoYSxiKXtpZihhPDB8fGE+PWIpe3Rocm93IHNjYihuZXcgWGdiKHl0ZSthK3p0ZStiKSl9fQpmdW5jdGlvbiBNYmUoYSxiKXtyZXR1cm4gSWZlKCksUlJkKGIpP25ldyBKZ2UoYixhKTpuZXcgWmZlKGIsYSl9CmZ1bmN0aW9uIEZ4YihhLGIsYyl7cmV0dXJuIG5ldyB5eWIoYSwoU3liKCksUHliKSxudWxsLGZhbHNlLGIsYyl9CmZ1bmN0aW9uIFN4YihhLGIsYyl7cmV0dXJuIG5ldyB5eWIoYSwoU3liKCksUnliKSxiLGMsbnVsbCxmYWxzZSl9CmZ1bmN0aW9uIE1NYihhLGIsYyl7dmFyIGQ7ZD1uZXcgRmRkKGMuZCk7bWRkKGQsYSk7YkNkKGIsZC5hLGQuYil9CmZ1bmN0aW9uIE5CYihhKXt2YXIgYjtMQWIoYSk7Yj0oanFiKCksanFiKCksaHFiKTtyZXR1cm4gT0JiKGEsYil9CmZ1bmN0aW9uIG1kYyhhKXtqZGMoKTtpZihSRChhLmcsOSkpe3JldHVybiBKRChhLmcsOSl9cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGluYygpe2NuYygpO3JldHVybiBXQyhPQyhPViwxKSxFcmUsMzIzLDAsW2FuYyxfbWMsYm5jXSl9CmZ1bmN0aW9uIHJuYygpe29uYygpO3JldHVybiBXQyhPQyhQViwxKSxFcmUsMzQ3LDAsW2xuYyxubmMsbW5jXSl9CmZ1bmN0aW9uIFduYygpe1RuYygpO3JldHVybiBXQyhPQyhTViwxKSxFcmUsNDQ2LDAsW1JuYyxRbmMsU25jXSl9CmZ1bmN0aW9uIGtwYygpe2hwYygpO3JldHVybiBXQyhPQyhZViwxKSxFcmUsMjk4LDAsW2ZwYyxncGMsZXBjXSl9CmZ1bmN0aW9uIHRwYygpe3FwYygpO3JldHVybiBXQyhPQyhaViwxKSxFcmUsMzEyLDAsW29wYyxwcGMsbnBjXSl9CmZ1bmN0aW9uIHN4Yygpe294YygpO3JldHVybiBXQyhPQyhnVywxKSxFcmUsMzQ5LDAsW2x4YyxteGMsbnhjXSl9CmZ1bmN0aW9uIEh5Yygpe0V5YygpO3JldHVybiBXQyhPQyhtVywxKSxFcmUsNDQ5LDAsW0R5YyxCeWMsQ3ljXSl9CmZ1bmN0aW9uIFF5Yygpe055YygpO3JldHVybiBXQyhPQyhuVywxKSxFcmUsMzc5LDAsW0t5YyxMeWMsTXljXSl9CmZ1bmN0aW9uIFp5Yygpe1d5YygpO3JldHVybiBXQyhPQyhvVywxKSxFcmUsMzQ1LDAsW1Z5YyxUeWMsVXljXSl9CmZ1bmN0aW9uIHJ6Yygpe296YygpO3JldHVybiBXQyhPQyhxVywxKSxFcmUsMzQ2LDAsW2x6YyxtemMsbnpjXSl9CmZ1bmN0aW9uIEF6Yygpe3h6YygpO3JldHVybiBXQyhPQyhyVywxKSxFcmUsMzQ4LDAsW3d6Yyx1emMsdnpjXSl9CmZ1bmN0aW9uIEp6Yygpe0d6YygpO3JldHVybiBXQyhPQyhzVywxKSxFcmUsMzgwLDAsW0V6YyxGemMsRHpjXSl9CmZ1bmN0aW9uIExoYygpe0loYygpO3JldHVybiBXQyhPQyhFVSwxKSxFcmUsMzY1LDAsW0hoYyxHaGMsRmhjXSl9CmZ1bmN0aW9uIFJUYygpe09UYygpO3JldHVybiBXQyhPQyh0JCwxKSxFcmUsMzgzLDAsW05UYyxNVGMsTFRjXSl9CmZ1bmN0aW9uIFhFYygpe1VFYygpO3JldHVybiBXQyhPQyhiWCwxKSxFcmUsNDUwLDAsW1JFYyxTRWMsVEVjXSl9CmZ1bmN0aW9uIG4kYygpe2okYygpO3JldHVybiBXQyhPQyh3XywxKSxFcmUsMzg0LDAsW2ckYyxoJGMsaSRjXSl9CmZ1bmN0aW9uIEFfYygpe3dfYygpO3JldHVybiBXQyhPQyhCXywxKSxFcmUsMjk5LDAsW3VfYyx2X2MsdF9jXSl9CmZ1bmN0aW9uIGwwYygpe2kwYygpO3JldHVybiBXQyhPQyhKXywxKSxFcmUsNDMzLDAsW2YwYyxnMGMsaDBjXSl9CmZ1bmN0aW9uIGxIYigpe2lIYigpO3JldHVybiBXQyhPQyhoTiwxKSxFcmUsMjM2LDAsW2ZIYixnSGIsaEhiXSl9CmZ1bmN0aW9uIFNIYigpe1BIYigpO3JldHVybiBXQyhPQyhrTiwxKSxFcmUsNDU3LDAsW05IYixNSGIsT0hiXSl9CmZ1bmN0aW9uIEpJYigpe0dJYigpO3JldHVybiBXQyhPQyhyTiwxKSxFcmUsNDU4LDAsW0ZJYixFSWIsREliXSl9CmZ1bmN0aW9uIG9BYigpe2xBYigpO3JldHVybiBXQyhPQyhITCwxKSxFcmUsMTMxLDAsW2lBYixqQWIsa0FiXSl9CmZ1bmN0aW9uIE5QYigpe0tQYigpO3JldHVybiBXQyhPQyhwTywxKSxFcmUsMzgyLDAsW0lQYixIUGIsSlBiXSl9CmZ1bmN0aW9uIG8xYygpe2wxYygpO3JldHVybiBXQyhPQyhTXywxKSxFcmUsMzg1LDAsW2oxYyxrMWMsaTFjXSl9CmZ1bmN0aW9uIHczYygpe3EzYygpO3JldHVybiBXQyhPQyhlMCwxKSxFcmUsNDI2LDAsW24zYyxwM2MsbzNjXSl9CmZ1bmN0aW9uIFgzYygpe1IzYygpO3JldHVybiBXQyhPQyhqMCwxKSxFcmUsNDI3LDAsW08zYyxRM2MsUDNjXSl9CmZ1bmN0aW9uIHo1Yygpe3c1YygpO3JldHVybiBXQyhPQyh5MCwxKSxFcmUsNDMyLDAsW3Q1Yyx1NWMsdjVjXSl9CmZ1bmN0aW9uIGhpZCgpe2VpZCgpO3JldHVybiBXQyhPQyhwMiwxKSxFcmUsMzQyLDAsW2NpZCxiaWQsZGlkXSl9CmZ1bmN0aW9uIHFoZCgpe25oZCgpO3JldHVybiBXQyhPQyhrMiwxKSxFcmUsMjc2LDAsW2toZCxsaGQsbWhkXSl9CmZ1bmN0aW9uIFprZCgpe1drZCgpO3JldHVybiBXQyhPQyhCMiwxKSxFcmUsMjc4LDAsW1VrZCxUa2QsVmtkXSl9CmZ1bmN0aW9uIHJrZCgpe29rZCgpO3JldHVybiBXQyhPQyh5MiwxKSxFcmUsMjk3LDAsW2xrZCxta2QsbmtkXSl9CmZ1bmN0aW9uIFdZYihhKXtyZXR1cm4gS2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2EuaS5uLGEubixhLmFdKSl9CmZ1bmN0aW9uIFNhZShhKXthLmE9PShNOWQoKSxMOWQpJiZZYWUoYSxOOWQoYS5nLGEuYikpO3JldHVybiBhLmF9CmZ1bmN0aW9uIFVhZShhKXthLmQ9PShNOWQoKSxMOWQpJiYkYWUoYSxSOWQoYS5nLGEuYikpO3JldHVybiBhLmR9CmZ1bmN0aW9uIHRzKGEsYil7dmFyIGM7Yz0odERiKGEpLGEpLmc7a0RiKCEhYyk7dERiKGIpO3JldHVybiBjKGIpfQpmdW5jdGlvbiBRaShhLGIpe09pLmNhbGwodGhpcyxuZXcgSnJiKE92KGEpKSk7YmsoYixncmUpO3RoaXMuYT1ifQpmdW5jdGlvbiBycGUoYSxiLGMpe3BvZS5jYWxsKHRoaXMsMjUpO3RoaXMuYj1hO3RoaXMuYT1iO3RoaXMuYz1jfQpmdW5jdGlvbiBTb2UoYSl7b29lKCk7cG9lLmNhbGwodGhpcyxhKTt0aGlzLmM9ZmFsc2U7dGhpcy5hPWZhbHNlfQpmdW5jdGlvbiBSRmQoYSl7aWYoYS5wIT0yKXRocm93IHNjYihuZXcgVmViKTtyZXR1cm4gUGNiKGEuZikmV3JlfQpmdW5jdGlvbiAkRmQoYSl7aWYoYS5wIT0yKXRocm93IHNjYihuZXcgVmViKTtyZXR1cm4gUGNiKGEuaykmV3JlfQpmdW5jdGlvbiBYU2QoYSl7aWYoYS5EYj4+MTYhPTYpcmV0dXJuIG51bGw7cmV0dXJuIEpEKGNxZChhKSwyNDApfQpmdW5jdGlvbiBudihhLGIpe3ZhciBjLGQ7ZD1wdihhLGIpO2M9YS5hLmRkKGQpO3JldHVybiBuZXcgQ3YoYSxjKX0KZnVuY3Rpb24gZjRjKGEsYixjKXt2YXIgZDtkPWc0YyhhLGIsZmFsc2UpO3JldHVybiBkLmI8PWImJmQuYTw9Y30KZnVuY3Rpb24gV0tjKGEsYixjKXt2YXIgZDtkPW5ldyBWS2M7ZC5iPWI7ZC5hPWM7KytiLmI7SWxiKGEuZCxkKX0KZnVuY3Rpb24gcHJiKGEpe3ZhciBiO2I9SkQoVENiKGEuYiksMTApO3JldHVybiBuZXcgdXJiKGEuYSxiLGEuYyl9CmZ1bmN0aW9uIHp2YihhKXtyZXR1cm4gdGNiKEpjYih6Y2IoeXZiKGEsMzIpKSwzMiksemNiKHl2YihhLDMyKSkpfQpmdW5jdGlvbiB1Y2IoYSxiKXtyZXR1cm4gd2NiKGxEKENjYihhKT9OY2IoYSk6YSxDY2IoYik/TmNiKGIpOmIpKX0KZnVuY3Rpb24gSWNiKGEsYil7cmV0dXJuIHdjYihyRChDY2IoYSk/TmNiKGEpOmEsQ2NiKGIpP05jYihiKTpiKSl9CmZ1bmN0aW9uIFJjYihhLGIpe3JldHVybiB3Y2IoekQoQ2NiKGEpP05jYihhKTphLENjYihiKT9OY2IoYik6YikpfQpmdW5jdGlvbiBOcWIoYSxiKXtyZXR1cm4gc3JiKGEuYSxiKT8kQ2IoYS5iLEpEKGIsMjMpLmcsbnVsbCk6bnVsbH0KZnVuY3Rpb24gWnUoYSl7UWIoYSk7cmV0dXJuIFJEKGEsMTYpP25ldyBXbGIoSkQoYSwxNikpOiR1KGEuSmMoKSl9CmZ1bmN0aW9uIFFTYihhLGIpe01TYigpO3JldHVybiBhLmM9PWIuYz9IZWIoYi5kLGEuZCk6SGViKGEuYyxiLmMpfQpmdW5jdGlvbiBSU2IoYSxiKXtNU2IoKTtyZXR1cm4gYS5jPT1iLmM/SGViKGEuZCxiLmQpOkhlYihhLmMsYi5jKX0KZnVuY3Rpb24gU1NiKGEsYil7TVNiKCk7cmV0dXJuIGEuYz09Yi5jP0hlYihiLmQsYS5kKTpIZWIoYi5jLGEuYyl9CmZ1bmN0aW9uIFRTYihhLGIpe01TYigpO3JldHVybiBhLmM9PWIuYz9IZWIoYS5kLGIuZCk6SGViKGIuYyxhLmMpfQpmdW5jdGlvbiBaRWIoYSxiKXthLmI9YS5ifGIuYjthLmM9YS5jfGIuYzthLmQ9YS5kfGIuZDthLmE9YS5hfGIuYX0KZnVuY3Rpb24gcG1iKGEpe3JEYihhLmE8YS5jLmMubGVuZ3RoKTthLmI9YS5hKys7cmV0dXJuIGEuYy5jW2EuYl19CmZ1bmN0aW9uIHVOYihhKXtyZXR1cm4gYS5iPT1udWxsfHxhLmIubGVuZ3RoPT0wPyduXycrYS5hOiduXycrYS5ifQpmdW5jdGlvbiBEWGIoYSl7cmV0dXJuIEpEKFRsYihhLFNDKFJQLEp2ZSw5LGEuYy5sZW5ndGgsMCwxKSksMTk5KX0KZnVuY3Rpb24genooYSxiKXtyZXR1cm4gISFhJiYhIWEuZXF1YWxzP2EuZXF1YWxzKGIpOlhEKGEpPT09WEQoYil9CmZ1bmN0aW9uIGRSYyhhKXtyZXR1cm4gYS5jPT1udWxsfHxhLmMubGVuZ3RoPT0wPyduXycrYS5nOiduXycrYS5jfQpmdW5jdGlvbiB6U2MoYSxiKXt2YXIgYztjPWErJyc7d2hpbGUoYy5sZW5ndGg8Yil7Yz0nMCcrY31yZXR1cm4gY30KZnVuY3Rpb24gS2RjKGEsYil7dmFyIGM7Yz1KRChOaWIoYS5nLGIpLDYwKTtMbGIoYi5kLG5ldyBUZWMoYSxjKSl9CmZ1bmN0aW9uIFlHYihhLGIpe3ZhciBjO2M9QmViKE1EKGEuYS5tZigoTGdkKCksdGdkKSkpKTtaR2IoYSxiLGMpfQpmdW5jdGlvbiBUVWIoYSxiKXt2YXIgYyxkO2M9dlhiKGEpO2Q9dlhiKGIpO3JldHVybiBjPGQ/LTE6Yz5kPzE6MH0KZnVuY3Rpb24gZWdjKGEsYil7dmFyIGMsZDtjPWRnYyhiKTtkPWM7cmV0dXJuIEpEKE5pYihhLmMsZCksMTcpLmF9CmZ1bmN0aW9uIEZHYyhhLGIsYyl7dmFyIGQ7ZD1hLmRbYi5wXTthLmRbYi5wXT1hLmRbYy5wXTthLmRbYy5wXT1kfQpmdW5jdGlvbiBybGQoYSxiLGMpe3ZhciBkO2lmKGEubiYmISFiJiYhIWMpe2Q9bmV3IFluZDtJbGIoYS5lLGQpfX0KZnVuY3Rpb24gcVJiKGEsYil7TnJiKGEuYSxiKTtpZihiLmQpe3Rocm93IHNjYihuZXcgcXooRnRlKSl9Yi5kPWF9CmZ1bmN0aW9uIFg0YyhhLGIpe3RoaXMuYT1uZXcgVWxiO3RoaXMuZD1uZXcgVWxiO3RoaXMuZj1hO3RoaXMuYz1ifQpmdW5jdGlvbiBfUGIoKXt0aGlzLmM9bmV3IG5RYjt0aGlzLmE9bmV3IFNVYjt0aGlzLmI9bmV3IE9WYjtxVmIoKX0KZnVuY3Rpb24gQjhjKCl7dzhjKCk7dGhpcy5iPW5ldyBJcmI7dGhpcy5hPW5ldyBJcmI7dGhpcy5jPW5ldyBVbGJ9CmZ1bmN0aW9uIGhHZChhLGIsYyl7dGhpcy5kPWE7dGhpcy5qPWI7dGhpcy5lPWM7dGhpcy5vPS0xO3RoaXMucD0zfQpmdW5jdGlvbiBpR2QoYSxiLGMpe3RoaXMuZD1hO3RoaXMuaz1iO3RoaXMuZj1jO3RoaXMubz0tMTt0aGlzLnA9NX0KZnVuY3Rpb24gdF9kKGEsYixjLGQsZSxmKXtzX2QuY2FsbCh0aGlzLGEsYixjLGQsZSk7ZiYmKHRoaXMubz0tMil9CmZ1bmN0aW9uIGxfZChhLGIsYyxkLGUsZil7a19kLmNhbGwodGhpcyxhLGIsYyxkLGUpO2YmJih0aGlzLm89LTIpfQpmdW5jdGlvbiBuX2QoYSxiLGMsZCxlLGYpe21fZC5jYWxsKHRoaXMsYSxiLGMsZCxlKTtmJiYodGhpcy5vPS0yKX0KZnVuY3Rpb24gcF9kKGEsYixjLGQsZSxmKXtvX2QuY2FsbCh0aGlzLGEsYixjLGQsZSk7ZiYmKHRoaXMubz0tMil9CmZ1bmN0aW9uIHJfZChhLGIsYyxkLGUsZil7cV9kLmNhbGwodGhpcyxhLGIsYyxkLGUpO2YmJih0aGlzLm89LTIpfQpmdW5jdGlvbiB2X2QoYSxiLGMsZCxlLGYpe3VfZC5jYWxsKHRoaXMsYSxiLGMsZCxlKTtmJiYodGhpcy5vPS0yKX0KZnVuY3Rpb24gQV9kKGEsYixjLGQsZSxmKXt6X2QuY2FsbCh0aGlzLGEsYixjLGQsZSk7ZiYmKHRoaXMubz0tMil9CmZ1bmN0aW9uIENfZChhLGIsYyxkLGUsZil7Ql9kLmNhbGwodGhpcyxhLGIsYyxkLGUpO2YmJih0aGlzLm89LTIpfQpmdW5jdGlvbiBnM2QoYSxiLGMsZCl7TzJkLmNhbGwodGhpcyxjKTt0aGlzLmI9YTt0aGlzLmM9Yjt0aGlzLmQ9ZH0KZnVuY3Rpb24gSGFlKGEsYil7dGhpcy5mPWE7dGhpcy5hPShNOWQoKSxLOWQpO3RoaXMuYz1LOWQ7dGhpcy5iPWJ9CmZ1bmN0aW9uIGNiZShhLGIpe3RoaXMuZz1hO3RoaXMuZD0oTTlkKCksTDlkKTt0aGlzLmE9TDlkO3RoaXMuYj1ifQpmdW5jdGlvbiBVaGIoYSxiKXtWaGIuY2FsbCh0aGlzLDEsMixXQyhPQyhjRSwxKSxpc2UsMzAsMTUsW2EsYl0pKX0KZnVuY3Rpb24gX2hlKGEsYil7IWEuYyYmKGEuYz1uZXcgbmNlKGEsMCkpOyRiZShhLmMsKEloZSgpLEFoZSksYil9CmZ1bmN0aW9uIGhjZShhLGIpe3JldHVybiBpY2UoYSxiLFJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTApfQpmdW5jdGlvbiBkQihhLGIpe3JldHVybiByZmIoemNiKGEucS5nZXRUaW1lKCkpLHpjYihiLnEuZ2V0VGltZSgpKSl9CmZ1bmN0aW9uIGVqKGEpe3JldHVybiBkayhhLmUuUGQoKS5nYygpKmEuYy5QZCgpLmdjKCksMTYsbmV3IG9qKGEpKX0KZnVuY3Rpb24gWFRkKGEpe3JldHVybiAhIWEudSYmT1RkKGEudS5hKS5pIT0wJiYhKCEhYS5uJiZ5VmQoYS5uKSl9CmZ1bmN0aW9uIEtfZChhKXtyZXR1cm4gISFhLmEmJkpfZChhLmEuYSkuaSE9MCYmISghIWEuYiYmSjBkKGEuYikpfQpmdW5jdGlvbiBnc2QoYSxiKXtpZihiPT0wKXtyZXR1cm4gISFhLm8mJmEuby5mIT0wfXJldHVybiBvcWQoYSxiKX0KZnVuY3Rpb24gVnRiKGEpe3JEYihhLmIuYiE9YS5kLmEpO2EuYz1hLmI9YS5iLmI7LS1hLmE7cmV0dXJuIGEuYy5jfQpmdW5jdGlvbiB3eGIoYSl7cmV0dXJuICFhLmE/YS5jOmEuZS5sZW5ndGg9PTA/YS5hLmE6YS5hLmErKCcnK2EuZSl9CmZ1bmN0aW9uIEloYihhKXt3aGlsZShhLmQ+MCYmYS5hWy0tYS5kXT09MCk7YS5hW2EuZCsrXT09MCYmKGEuZT0wKX0KZnVuY3Rpb24gQWpiKGEsYil7dGhpcy5hPWE7dWpiLmNhbGwodGhpcyxhKTt2RGIoYixhLmdjKCkpO3RoaXMuYj1ifQpmdW5jdGlvbiBvbGIoYSl7dGhpcy5hPVNDKGFKLE5xZSwxLGRmYigkd25kLk1hdGgubWF4KDgsYSkpPDwxLDUsMSl9CmZ1bmN0aW9uIGx5YihhKXtteWIuY2FsbCh0aGlzLGEsKFN5YigpLE95YiksbnVsbCxmYWxzZSxudWxsLGZhbHNlKX0KZnVuY3Rpb24gUHhiKGEsYil7dmFyIGM7Yz0xLWI7YS5hW2NdPVF4YihhLmFbY10sYyk7cmV0dXJuIFF4YihhLGIpfQpmdW5jdGlvbiBDRGIoYSxiKXt2YXIgYyxkO2Q9dWNiKGEsVXNlKTtjPUpjYihiLDMyKTtyZXR1cm4gSWNiKGMsZCl9CmZ1bmN0aW9uIENjKGEsYixjKXt2YXIgZDtkPUpEKGEuWmIoKS54YyhiKSwxNik7cmV0dXJuICEhZCYmZC5HYyhjKX0KZnVuY3Rpb24gR2MoYSxiLGMpe3ZhciBkO2Q9SkQoYS5aYigpLnhjKGIpLDE2KTtyZXR1cm4gISFkJiZkLktjKGMpfQpmdW5jdGlvbiBhRWIoYSxiLGMpe3ZhciBkO2Q9KFFiKGEpLG5ldyBXbGIoYSkpOyREYihuZXcgX0RiKGQsYixjKSl9CmZ1bmN0aW9uIERUYihhLGIsYyl7dmFyIGQ7ZD0oUWIoYSksbmV3IFdsYihhKSk7QlRiKG5ldyBDVGIoZCxiLGMpKX0KZnVuY3Rpb24gdkxjKGEsYixjKXthLmE9YjthLmM9YzthLmIuYS4kYigpO0x0YihhLmQpO19DYihhLmUuYS5jLDApfQpmdW5jdGlvbiBhMGMoYSxiKXt2YXIgYzthLmU9bmV3IFVfYztjPVRZYyhiKTtTbGIoYyxhLmMpO2IwYyhhLGMsMCl9CmZ1bmN0aW9uIEJSYyhhLGIpe3JldHVybiBuZXcgTW9kKGIsQWRkKG9kZChiLmUpLGEsYSksKHhkYigpLHRydWUpKX0KZnVuY3Rpb24gX1ZjKGEsYil7VVZjKCk7cmV0dXJuIEpEKFdNYihiLChrVmMoKSxaVWMpKSwxNykuYT49YS5nYygpfQpmdW5jdGlvbiBGSWMoYSl7Z0ljKCk7cmV0dXJuICFlV2IoYSkmJiEoIWVXYihhKSYmYS5jLmkuYz09YS5kLmkuYyl9CmZ1bmN0aW9uIENYYihhKXtyZXR1cm4gSkQoVGxiKGEsU0MoQ1AsSXZlLDE4LGEuYy5sZW5ndGgsMCwxKSksNDY5KX0KZnVuY3Rpb24gVjBjKGEpe0lMZCgoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpLG5ldyBSMGMpfQpmdW5jdGlvbiBvNmQoKXt2YXIgYSxiLGM7Yj0oYz0oYT1uZXcgTlpkLGEpLGMpO0lsYihrNmQsYik7cmV0dXJuIGJ9CmZ1bmN0aW9uIFp2ZChhLGIsYyxkLGUsZil7JHZkKGEsYixjLGYpO1pUZChhLGQpOyRUZChhLGUpO3JldHVybiBhfQpmdW5jdGlvbiBPZ2IoYSxiLGMsZCl7YS5hKz0nJytxZ2IoYj09bnVsbD9ScWU6YWRiKGIpLGMsZCk7cmV0dXJuIGF9CmZ1bmN0aW9uIFBiKGEsYil7aWYoYTwwfHxhPj1iKXt0aHJvdyBzY2IobmV3IG1kYihJYihhLGIpKSl9cmV0dXJuIGF9CmZ1bmN0aW9uIFRiKGEsYixjKXtpZihhPDB8fGI8YXx8Yj5jKXt0aHJvdyBzY2IobmV3IG1kYihLYihhLGIsYykpKX19CmZ1bmN0aW9uIFBhZChhLGIsYyxkKXt2YXIgZTtlPW5ldyBXYWQ7ZS5hPWI7ZS5iPWM7ZS5jPWQ7QXRiKGEuYixlKX0KZnVuY3Rpb24gT2FkKGEsYixjLGQpe3ZhciBlO2U9bmV3IFdhZDtlLmE9YjtlLmI9YztlLmM9ZDtBdGIoYS5hLGUpfQpmdW5jdGlvbiBNeihhLGIsYyl7dmFyIGQ7ZD1LeigpO3RyeXtyZXR1cm4gSnooYSxiLGMpfWZpbmFsbHl7TnooZCl9fQpmdW5jdGlvbiBPY2IoYSl7dmFyIGI7aWYoQ2NiKGEpKXtiPWE7cmV0dXJuIGI9PS0wLj8wOmJ9cmV0dXJuIHdEKGEpfQpmdW5jdGlvbiBjamIoYSxiKXtpZihSRChiLDQzKSl7cmV0dXJuIEpkKGEuYSxKRChiLDQzKSl9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBYcWIoYSxiKXtpZihSRChiLDQzKSl7cmV0dXJuIEpkKGEuYSxKRChiLDQzKSl9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBqdGIoYSxiKXtpZihSRChiLDQzKSl7cmV0dXJuIEpkKGEuYSxKRChiLDQzKSl9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBqeChhKXtpZihHaChhKS5kYygpKXtyZXR1cm4gZmFsc2V9SGgoYSxuZXcgbngpO3JldHVybiB0cnVlfQpmdW5jdGlvbiBsQmIoYSl7dmFyIGI7S0FiKGEpO2I9bmV3IGFzYjtZdmIoYS5hLG5ldyB0QmIoYikpO3JldHVybiBifQpmdW5jdGlvbiBRQWIoYSl7dmFyIGI7S0FiKGEpO2I9bmV3IEVxYjtZdmIoYS5hLG5ldyBlQmIoYikpO3JldHVybiBifQpmdW5jdGlvbiBpeihiKXtpZighKCdzdGFjaycgaW4gYikpe3RyeXt0aHJvdyBifWNhdGNoKGEpe319cmV0dXJuIGJ9CmZ1bmN0aW9uIGlCYihhLGIpe2lmKGEuYTw9YS5iKXtiLkJkKGEuYSsrKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIGlXYihhLGIsYyl7ISFhLmQmJlBsYihhLmQuZSxhKTthLmQ9YjshIWEuZCYmSGxiKGEuZC5lLGMsYSl9CmZ1bmN0aW9uIFhDYyhhLGIsYyl7dGhpcy5kPW5ldyBpRGModGhpcyk7dGhpcy5lPWE7dGhpcy5pPWI7dGhpcy5mPWN9CmZ1bmN0aW9uIFlrYyhhLGIsYyxkKXtSa2ModGhpcyk7dGhpcy5jPWE7dGhpcy5lPWI7dGhpcy5mPWM7dGhpcy5iPWR9CmZ1bmN0aW9uIEMxYihhLGIpe0kxYihiLGEpO0sxYihhLmQpO0sxYihKRChXTWIoYSwoQndjKCksZnZjKSksMjEzKSl9CmZ1bmN0aW9uIEQxYihhLGIpe0wxYihiLGEpO04xYihhLmQpO04xYihKRChXTWIoYSwoQndjKCksZnZjKSksMjEzKSl9CmZ1bmN0aW9uICR4ZChhLGIpe3ZhciBjLGQ7Yz1pQyhhLGIpO2Q9bnVsbDshIWMmJihkPWMubmUoKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIF94ZChhLGIpe3ZhciBjLGQ7Yz1CQihhLGIpO2Q9bnVsbDshIWMmJihkPWMucWUoKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIGF5ZChhLGIpe3ZhciBjLGQ7Yz1pQyhhLGIpO2Q9bnVsbDshIWMmJihkPWMucWUoKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIGJ5ZChhLGIpe3ZhciBjLGQ7Yz1pQyhhLGIpO2Q9bnVsbDshIWMmJihkPWN5ZChjKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIGh6ZChhLGIsYyl7dmFyIGQ7ZD1ZeGQoYyk7em8oYS5uLGQsYik7em8oYS5vLGIsYyk7cmV0dXJuIGJ9CmZ1bmN0aW9uIGpHZChhLGIsYyxkKXt0aGlzLmQ9YTt0aGlzLm49Yjt0aGlzLmc9Yzt0aGlzLm89ZDt0aGlzLnA9LTF9CmZ1bmN0aW9uIHVmZShhKXt2YXIgYjtiPWEuQ2goKTt0aGlzLmE9UkQoYiw3MSk/SkQoYiw3MSkuRmkoKTpiLkpjKCl9CmZ1bmN0aW9uIFVpKGEpe3JldHVybiBkayhhLmUuUGQoKS5nYygpKmEuYy5QZCgpLmdjKCksMjczLG5ldyBpaihhKSl9CmZ1bmN0aW9uIGJ2KGEpe3JldHVybiBuZXcgVmxiKChiayhhLEdyZSksWHkodGNiKHRjYig1LGEpLGEvMTB8MCkpKSl9CmZ1bmN0aW9uIEVYYihhKXtyZXR1cm4gSkQoVGxiKGEsU0MoZFEsS3ZlLDExLGEuYy5sZW5ndGgsMCwxKSksMTk4OCl9CmZ1bmN0aW9uIFZjKGEsYixjLGQpe3JldHVybiBSRChjLDU5KT9uZXcgSWcoYSxiLGMsZCk6bmV3IHdnKGEsYixjLGQpfQpmdW5jdGlvbiBEVmMoKXtEVmM9WmNiO0NWYz1uZXcgRVZjKCdERlMnLDApO0JWYz1uZXcgRVZjKCdCRlMnLDEpfQpmdW5jdGlvbiB5cGMoKXt5cGM9WmNiO3dwYz1uZXcgenBjKFl0ZSwwKTt4cGM9bmV3IHpwYygnVE9QX0xFRlQnLDEpfQpmdW5jdGlvbiB4N2MoKXt4N2M9WmNiO3c3Yz1vcygocDdjKCksV0MoT0MoTDAsMSksRXJlLDUyNCwwLFtvN2NdKSkpfQpmdW5jdGlvbiBaNWMoKXtaNWM9WmNiO1k1Yz1vcygoUzVjKCksV0MoT0MoRDAsMSksRXJlLDU0MywwLFtSNWNdKSkpfQpmdW5jdGlvbiBRNWMoKXtRNWM9WmNiO1A1Yz1vcygoSTVjKCksV0MoT0MoQzAsMSksRXJlLDQ3NSwwLFtINWNdKSkpfQpmdW5jdGlvbiBGQmMoKXtGQmM9WmNiO0VCYz11eChqZmIoMSksamZiKDQpKTtEQmM9dXgoamZiKDEpLGpmYigyKSl9CmZ1bmN0aW9uIEFMYigpe3hMYigpO3JldHVybiBXQyhPQyhITiwxKSxFcmUsNDA2LDAsW3dMYix0TGIsdUxiLHZMYl0pfQpmdW5jdGlvbiBFU2IoKXt4U2IoKTtyZXR1cm4gV0MoT0MoVE8sMSksRXJlLDQwNSwwLFt0U2Isd1NiLHVTYix2U2JdKX0KZnVuY3Rpb24gWHliKCl7U3liKCk7cmV0dXJuIFdDKE9DKHJMLDEpLEVyZSwzMDUsMCxbT3liLFB5YixReWIsUnliXSl9CmZ1bmN0aW9uIGZVYigpe2NVYigpO3JldHVybiBXQyhPQyhpUCwxKSxFcmUsMzgxLDAsW2JVYixfVGIsJFRiLGFVYl0pfQpmdW5jdGlvbiBNN2IoKXtJN2IoKTtyZXR1cm4gV0MoT0MoWVIsMSksRXJlLDM2NCwwLFtIN2IsRjdiLEc3YixFN2JdKX0KZnVuY3Rpb24gY3IoYSl7aWYoUkQoYSwxNikpe3JldHVybiBKRChhLDE2KS5kYygpfXJldHVybiAhYS5KYygpLk9iKCl9CmZ1bmN0aW9uIG5kYyhhKXtqZGMoKTtpZihSRChhLmcsMTUyKSl7cmV0dXJuIEpEKGEuZywxNTIpfXJldHVybiBudWxsfQpmdW5jdGlvbiBTbyhhKXtpZihhLmUuZyE9YS5iKXt0aHJvdyBzY2IobmV3IHlxYil9cmV0dXJuICEhYS5jJiZhLmQ+MH0KZnVuY3Rpb24gVXRiKGEpe3JEYihhLmIhPWEuZC5jKTthLmM9YS5iO2EuYj1hLmIuYTsrK2EuYTtyZXR1cm4gYS5jLmN9CmZ1bmN0aW9uIF9rYihhLGIpe3REYihiKTtWQyhhLmEsYS5jLGIpO2EuYz1hLmMrMSZhLmEubGVuZ3RoLTE7ZGxiKGEpfQpmdW5jdGlvbiAka2IoYSxiKXt0RGIoYik7YS5iPWEuYi0xJmEuYS5sZW5ndGgtMTtWQyhhLmEsYS5iLGIpO2RsYihhKX0KZnVuY3Rpb24gRWFjKGEsYil7dmFyIGM7Yz1iLmE7Z1diKGMsYi5jLmQpO2hXYihjLGIuZC5kKTtQZGQoYy5hLGEubil9CmZ1bmN0aW9uIGxfYihhLGIpe3ZhciBjO2M9SkQoVHNiKGEuYixiKSw2Nyk7IWMmJihjPW5ldyBNdGIpO3JldHVybiBjfQpmdW5jdGlvbiByaGMoYSl7dmFyIGI7cmV0dXJuIGEuaj09KFJqZCgpLE9qZCkmJihiPXNoYyhhKSxycmIoYix3amQpKX0KZnVuY3Rpb24gR2djKCl7RGdjKCk7cmV0dXJuIFdDKE9DKHZVLDEpLEVyZSw0MTAsMCxbemdjLEFnYyxCZ2MsQ2djXSl9CmZ1bmN0aW9uIEV4Yygpe3p4YygpO3JldHVybiBXQyhPQyhoVywxKSxFcmUsMjAzLDAsW3h4Yyx5eGMsd3hjLHZ4Y10pfQpmdW5jdGlvbiBxeWMoKXtueWMoKTtyZXR1cm4gV0MoT0Moa1csMSksRXJlLDI2NiwwLFtreWMsanljLGx5YyxteWNdKX0KZnVuY3Rpb24gZlFjKCl7X1BjKCk7cmV0dXJuIFdDKE9DKHZaLDEpLEVyZSwzOTYsMCxbWFBjLFlQYyxaUGMsJFBjXSl9CmZ1bmN0aW9uIFZqYyhhLGIpe3JldHVybiBKRCh6dWIoSUJiKEpEKFFjKGEuayxiKSwxNSkuTWMoKSxLamMpKSwxMTIpfQpmdW5jdGlvbiBXamMoYSxiKXtyZXR1cm4gSkQoenViKEpCYihKRChRYyhhLmssYiksMTUpLk1jKCksS2pjKSksMTEyKX0KZnVuY3Rpb24gbHgoYSl7cmV0dXJuIG5ldyBHdmIodW5iKEpEKGEuYS5rZCgpLDE2KS5nYygpLGEuYS5qZCgpKSwxNil9CmZ1bmN0aW9uIHFRYyhhLGIpe3JldHVybiBxZGQobmV3IEVkZChiLmUuYStiLmYuYS8yLGIuZS5iK2IuZi5iLzIpLGEpfQpmdW5jdGlvbiAkOGMoYSxiKXt2YXIgYztmb3IoYz1hLmouYy5sZW5ndGg7YzxiO2MrKyl7SWxiKGEuaixhLkxnKCkpfX0KZnVuY3Rpb24gYnpjKGEsYixjLGQpe3ZhciBlO2U9ZFtiLmddW2MuZ107cmV0dXJuIEJlYihNRChXTWIoYS5hLGUpKSl9CmZ1bmN0aW9uIEtrKGEsYixjLGQpe3RoaXMuZT1udWxsO3RoaXMuYz1hO3RoaXMuZD1iO3RoaXMuYT1jO3RoaXMuYj1kfQpmdW5jdGlvbiB0bGMoYSxiLGMsZCxlKXt0aGlzLmk9YTt0aGlzLmE9Yjt0aGlzLmU9Yzt0aGlzLmo9ZDt0aGlzLmY9ZX0KZnVuY3Rpb24gakxjKGEpe2EuYT1udWxsO2EuZT1udWxsO19DYihhLmIuYywwKTtfQ2IoYS5mLmMsMCk7YS5jPW51bGx9CmZ1bmN0aW9uIHZIYygpe3ZIYz1aY2I7dUhjPW5ldyB3SGMoJ1VQUEVSJywwKTt0SGM9bmV3IHdIYygnTE9XRVInLDEpfQpmdW5jdGlvbiB5VmMoKXt2VmMoKTtyZXR1cm4gV0MoT0MoeCQsMSksRXJlLDM1MCwwLFt1VmMsc1ZjLHRWYyxyVmNdKX0KZnVuY3Rpb24gcV9jKCl7bV9jKCk7cmV0dXJuIFdDKE9DKEFfLDEpLEVyZSwzNTEsMCxbbF9jLGpfYyxrX2MsaV9jXSl9CmZ1bmN0aW9uIEgwYygpe0QwYygpO3JldHVybiBXQyhPQyhOXywxKSxFcmUsMzk4LDAsW0MwYyx6MGMsQjBjLEEwY10pfQpmdW5jdGlvbiBCa2QoKXt5a2QoKTtyZXR1cm4gV0MoT0MoejIsMSksRXJlLDM3OCwwLFt3a2QseGtkLHZrZCx1a2RdKX0KZnVuY3Rpb24gaGhkKCl7ZWhkKCk7cmV0dXJuIFdDKE9DKGoyLDEpLEVyZSwyNzUsMCxbYmhkLGFoZCxjaGQsZGhkXSl9CmZ1bmN0aW9uIEFoZCgpe3hoZCgpO3JldHVybiBXQyhPQyhsMiwxKSxFcmUsMjIwLDAsW3doZCx1aGQsdGhkLHZoZF0pfQpmdW5jdGlvbiBzaWQoKXtvaWQoKTtyZXR1cm4gV0MoT0MocTIsMSksRXJlLDI4OSwwLFtuaWQsa2lkLGxpZCxtaWRdKX0KZnVuY3Rpb24gcm1kKCl7b21kKCk7cmV0dXJuIFdDKE9DKEoyLDEpLEVyZSwzMjEsMCxbbm1kLGttZCxtbWQsbG1kXSl9CmZ1bmN0aW9uIGVvZCgpe2JvZCgpO3JldHVybiBXQyhPQyhmMywxKSxFcmUsNDA0LDAsWyRuZCxfbmQsWm5kLGFvZF0pfQpmdW5jdGlvbiBkRWQoYSl7YkVkKCk7cmV0dXJuIExpYihhRWQsYSk/SkQoTmliKGFFZCxhKSwzMzcpLk9nKCk6bnVsbH0KZnVuY3Rpb24gZXFkKGEsYixjKXtyZXR1cm4gYjwwP3ZxZChhLGMpOkpEKGMsNjkpLnRrKCkueWsoYSxhLmRpKCksYil9CmZ1bmN0aW9uIGd6ZChhLGIsYyl7dmFyIGQ7ZD1ZeGQoYyk7em8oYS5mLGQsYik7UWliKGEuZyxiLGMpO3JldHVybiBifQpmdW5jdGlvbiBpemQoYSxiLGMpe3ZhciBkO2Q9WXhkKGMpO3pvKGEucCxkLGIpO1FpYihhLnEsYixjKTtyZXR1cm4gYn0KZnVuY3Rpb24gY0NkKGEpe3ZhciBiLGM7Yj0oSHBkKCksYz1uZXcgVnRkLGMpOyEhYSYmVHRkKGIsYSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIHREZChhKXt2YXIgYjtiPWEuWmkoYS5pKTthLmk+MCYmJGdiKGEuZywwLGIsMCxhLmkpO3JldHVybiBifQpmdW5jdGlvbiBHcihhKXt2YXIgYjtiPTA7d2hpbGUoYS5PYigpKXthLlBiKCk7Yj10Y2IoYiwxKX1yZXR1cm4gWHkoYil9CmZ1bmN0aW9uIHp4KGEsYil7dmFyIGM7Yz1uZXcgVmdiO2EuRWQoYyk7Yy5hKz0nLi4nO2IuRmQoYyk7cmV0dXJuIGMuYX0KZnVuY3Rpb24gak5kKGEsYil7aU5kKCk7dmFyIGM7Yz1KRChOaWIoaE5kLGEpLDU4KTtyZXR1cm4gIWN8fGMuY2soYil9CmZ1bmN0aW9uIFFGZChhKXtpZihhLnAhPTEpdGhyb3cgc2NiKG5ldyBWZWIpO3JldHVybiBQY2IoYS5mKTw8MjQ+PjI0fQpmdW5jdGlvbiBaRmQoYSl7aWYoYS5wIT0xKXRocm93IHNjYihuZXcgVmViKTtyZXR1cm4gUGNiKGEuayk8PDI0Pj4yNH0KZnVuY3Rpb24gV0ZkKGEpe2lmKGEucCE9Nyl0aHJvdyBzY2IobmV3IFZlYik7cmV0dXJuIFBjYihhLmYpPDwxNj4+MTZ9CmZ1bmN0aW9uIGRHZChhKXtpZihhLnAhPTcpdGhyb3cgc2NiKG5ldyBWZWIpO3JldHVybiBQY2IoYS5rKTw8MTY+PjE2fQpmdW5jdGlvbiBOaGIoYSxiKXtpZihiLmU9PTB8fGEuZT09MCl7cmV0dXJuIEZoYn1yZXR1cm4gQ2liKCksRGliKGEsYil9CmZ1bmN0aW9uIHBmYyhhLGIsYyl7YS5pPTA7YS5lPTA7aWYoYj09Yyl7cmV0dXJufW9mYyhhLGIsYyk7bmZjKGEsYixjKX0KZnVuY3Rpb24gdU5jKGEsYixjLGQsZSl7dmFyIGY7Zj1wTmMoZSxjLGQpO0lsYihiLFdNYyhlLGYpKTt5TmMoYSxlLGIpfQpmdW5jdGlvbiBNZGMoYSxiLGMpe3ZhciBkO2Q9SkQoTmliKGEuZyxjKSw2MCk7SWxiKGEuYS5jLG5ldyB4b2QoYixkKSl9CmZ1bmN0aW9uIExEYihhLGIsYyl7cmV0dXJuIEFlYihNRChXZChmc2IoYS5mLGIpKSksTUQoV2QoZnNiKGEuZixjKSkpKX0KZnVuY3Rpb24gZE9kKGEsYil7cmV0dXJuIEpEKGI9PW51bGw/V2QoZnNiKGEuZixudWxsKSk6enNiKGEuaSxiKSwyODYpfQpmdW5jdGlvbiBOZChhLGIpe3JldHVybiBYRChiKT09PVhEKGEpPycodGhpcyBNYXApJzpiPT1udWxsP1JxZTphZGIoYil9CmZ1bmN0aW9uIGtJYyhhLGIpe3JldHVybiBhPT0oRFliKCksQVliKSYmYj09QVliPzQ6YT09QVlifHxiPT1BWWI/ODozMn0KZnVuY3Rpb24geGJlKGEsYixjKXtyZXR1cm4geWJlKGEsYixjLFJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTApfQpmdW5jdGlvbiBFYmUoYSxiLGMpe3JldHVybiBGYmUoYSxiLGMsUkQoYiwxMDEpJiYoSkQoYiwxOSkuQmImUHNlKSE9MCl9CmZ1bmN0aW9uIGpjZShhLGIsYyl7cmV0dXJuIGtjZShhLGIsYyxSRChiLDEwMSkmJihKRChiLDE5KS5CYiZQc2UpIT0wKX0KZnVuY3Rpb24gSmZlKGEsYil7SWZlKCk7dmFyIGM7Yz1KRChhLDY5KS5zaygpO2QyZChjLGIpO3JldHVybiBjLnVsKGIpfQpmdW5jdGlvbiBubmQoYSxiKXt2YXIgYztjPWI7d2hpbGUoYyl7bGRkKGEsYy5pLGMuaik7Yz1ad2QoYyl9cmV0dXJuIGF9CmZ1bmN0aW9uIEdwYihhLGIpe3ZhciBjO2ZvcihjPTA7YzxiOysrYyl7VkMoYSxjLG5ldyBTcGIoSkQoYVtjXSw0MykpKX19CmZ1bmN0aW9uIFRoYihhLGIpe0doYigpO1ZoYi5jYWxsKHRoaXMsYSwxLFdDKE9DKGNFLDEpLGlzZSwzMCwxNSxbYl0pKX0KZnVuY3Rpb24gZHBlKGEsYil7b29lKCk7cG9lLmNhbGwodGhpcyxhKTt0aGlzLmE9Yjt0aGlzLmM9LTE7dGhpcy5iPS0xfQpmdW5jdGlvbiBzTmIoYSxiKXtkTmIuY2FsbCh0aGlzKTt0aGlzLmE9YTt0aGlzLmI9YjtJbGIodGhpcy5hLmIsdGhpcyl9CmZ1bmN0aW9uIENyYihhKXtyRGIoYS5hPGEuYy5hLmxlbmd0aCk7YS5iPWEuYTtBcmIoYSk7cmV0dXJuIGEuYy5iW2EuYl19CmZ1bmN0aW9uIE9UZChhKXtpZighYS5uKXtUVGQoYSk7YS5uPW5ldyBDVmQoYSxnNixhKTtVVGQoYSl9cmV0dXJuIGEubn0KZnVuY3Rpb24gbkRiKGEpe2lmKGE8MCl7dGhyb3cgc2NiKG5ldyBEZmIoJ05lZ2F0aXZlIGFycmF5IHNpemU6ICcrYSkpfX0KZnVuY3Rpb24gREIoZCxhLGIpe2lmKGIpe3ZhciBjPWIubWUoKTtiPWMoYil9ZWxzZXtiPXVuZGVmaW5lZH1kLmFbYV09Yn0KZnVuY3Rpb24gbEMoZCxhLGIpe2lmKGIpe3ZhciBjPWIubWUoKTtkLmFbYV09YyhiKX1lbHNle2RlbGV0ZSBkLmFbYV19fQpmdW5jdGlvbiBNOWIoYSxiKXtHOWIoKTt2YXIgYztjPWEuai5nLWIuai5nO2lmKGMhPTApe3JldHVybiBjfXJldHVybiAwfQpmdW5jdGlvbiBHV2QoYSxiKXtaZ2IoKTtTdHJpbmcuZnJvbUNoYXJDb2RlKDEwKTtyZXR1cm4gdENkKFNUZChhLmEpLGIpfQpmdW5jdGlvbiBMV2QoYSxiKXtaZ2IoKTtTdHJpbmcuZnJvbUNoYXJDb2RlKDEwKTtyZXR1cm4gdENkKFNUZChhLmEpLGIpfQpmdW5jdGlvbiBsQihhLGIpe3ZhciBjO2M9YS5xLmdldEhvdXJzKCk7YS5xLnNldEZ1bGxZZWFyKGIraHNlKTtlQihhLGMpfQpmdW5jdGlvbiBuT2QoYSxiKXt2YXIgYztyZXR1cm4gYz1iIT1udWxsP09pYihhLGIpOldkKGZzYihhLmYsYikpLFpEKGMpfQpmdW5jdGlvbiB5T2QoYSxiKXt2YXIgYztyZXR1cm4gYz1iIT1udWxsP09pYihhLGIpOldkKGZzYihhLmYsYikpLFpEKGMpfQpmdW5jdGlvbiBsTmIoYSl7cmV0dXJuICEhYS5jJiYhIWEuZD91TmIoYS5jKSsnLT4nK3VOYihhLmQpOidlXycrakRiKGEpfQpmdW5jdGlvbiBhbGIoYSl7aWYoYS5iPT1hLmMpe3JldHVybn1hLmE9U0MoYUosTnFlLDEsOCw1LDEpO2EuYj0wO2EuYz0wfQpmdW5jdGlvbiBUeChhKXt2YXIgYjtpZihhKXtyZXR1cm4gbmV3IHl0YihhKX1iPW5ldyB3dGI7WHEoYixhKTtyZXR1cm4gYn0KZnVuY3Rpb24geG1iKGEsYil7dmFyIGM7bkRiKGIpO3JldHVybiBjPWEuc2xpY2UoMCxiKSxjLmxlbmd0aD1iLFhDKGMsYSl9CmZ1bmN0aW9uIEtoYihhLGIpe3ZhciBjO2ZvcihjPWEuZC0xO2M+PTAmJmEuYVtjXT09PWJbY107Yy0tKTtyZXR1cm4gYzwwfQpmdW5jdGlvbiBlX2QoYSxiLGMsZCl7aEdkLmNhbGwodGhpcywxLGMsZCk7Y19kKHRoaXMpO3RoaXMuYz1hO3RoaXMuYj1ifQpmdW5jdGlvbiBmX2QoYSxiLGMsZCl7aUdkLmNhbGwodGhpcywxLGMsZCk7Y19kKHRoaXMpO3RoaXMuYz1hO3RoaXMuYj1ifQpmdW5jdGlvbiBHZ2UoYSxiLGMsZCxlLGYsZyl7a0dkLmNhbGwodGhpcyxiLGQsZSxmLGcpO3RoaXMuYz1hO3RoaXMuYT1jfQpmdW5jdGlvbiBFMmQoYSxiLGMpe3RoaXMuZT1hO3RoaXMuYT1hSjt0aGlzLmI9S2VlKGIpO3RoaXMuYz1iO3RoaXMuZD1jfQpmdW5jdGlvbiBUbyhhKXt0aGlzLmU9YTt0aGlzLmM9dGhpcy5lLmE7dGhpcy5iPXRoaXMuZS5nO3RoaXMuZD10aGlzLmUuaX0KZnVuY3Rpb24gRnNiKGEpe3RoaXMuZD1hO3RoaXMuYj10aGlzLmQuYS5lbnRyaWVzKCk7dGhpcy5hPXRoaXMuYi5uZXh0KCl9CmZ1bmN0aW9uIGc1ZChhKXt0aGlzLmM9YTt0aGlzLmE9SkQocFJkKGEpLDE1NSk7dGhpcy5iPXRoaXMuYS5naygpLnNpKCl9CmZ1bmN0aW9uIFhzYigpe0lyYi5jYWxsKHRoaXMpO1FzYih0aGlzKTt0aGlzLmQuYj10aGlzLmQ7dGhpcy5kLmE9dGhpcy5kfQpmdW5jdGlvbiBEdGIoYSxiLGMsZCl7dmFyIGU7ZT1uZXcgZ3ViO2UuYz1iO2UuYj1jO2UuYT1kO2QuYj1jLmE9ZTsrK2EuYn0KZnVuY3Rpb24geUJiKGEsYil7dmFyIGM7cmV0dXJuIGIuYi5LYihLQmIoYSxiLmMuVmUoKSwoYz1uZXcgTkNiKGIpLGMpKSl9CmZ1bmN0aW9uIER2YihhKXt2dmIoKTtBdmIodGhpcyxQY2IodWNiKEtjYihhLDI0KSxqdGUpKSxQY2IodWNiKGEsanRlKSkpfQpmdW5jdGlvbiBnT2IoKXtnT2I9WmNiO2ZPYj1vcygoYk9iKCksV0MoT0MoaE8sMSksRXJlLDQyMSwwLFtfTmIsYU9iXSkpKX0KZnVuY3Rpb24gZTJiKCl7ZTJiPVpjYjtkMmI9b3MoKF8xYigpLFdDKE9DKGJSLDEpLEVyZSw1MDEsMCxbJDFiLFoxYl0pKSl9CmZ1bmN0aW9uICRtYygpeyRtYz1aY2I7Wm1jPW9zKChWbWMoKSxXQyhPQyhOViwxKSxFcmUsNDE5LDAsW1RtYyxVbWNdKSkpfQpmdW5jdGlvbiBQbmMoKXtQbmM9WmNiO09uYz1vcygoS25jKCksV0MoT0MoUlYsMSksRXJlLDQxNiwwLFtJbmMsSm5jXSkpKX0KZnVuY3Rpb24gRHBjKCl7RHBjPVpjYjtDcGM9b3MoKHlwYygpLFdDKE9DKCRWLDEpLEVyZSw0MTcsMCxbd3BjLHhwY10pKSl9CmZ1bmN0aW9uIHJvYygpe3JvYz1aY2I7cW9jPW9zKChtb2MoKSxXQyhPQyhVViwxKSxFcmUsNDc0LDAsW2xvYyxrb2NdKSkpfQpmdW5jdGlvbiBfcWMoKXtfcWM9WmNiOyRxYz1vcygoV3FjKCksV0MoT0MoYVcsMSksRXJlLDQyMCwwLFtWcWMsVXFjXSkpKX0KZnVuY3Rpb24gQXljKCl7QXljPVpjYjt6eWM9b3MoKHZ5YygpLFdDKE9DKGxXLDEpLEVyZSw0MTgsMCxbdHljLHV5Y10pKSl9CmZ1bmN0aW9uIEFIYygpe0FIYz1aY2I7ekhjPW9zKCh2SGMoKSxXQyhPQyhBWCwxKSxFcmUsNTE2LDAsW3VIYyx0SGNdKSkpfQpmdW5jdGlvbiBNS2MoKXtNS2M9WmNiO0xLYz1vcygoSEtjKCksV0MoT0ModVksMSksRXJlLDUwNiwwLFtGS2MsR0tjXSkpKX0KZnVuY3Rpb24gRUtjKCl7RUtjPVpjYjtES2M9b3MoKHpLYygpLFdDKE9DKHRZLDEpLEVyZSw1MDcsMCxbeUtjLHhLY10pKSl9CmZ1bmN0aW9uIG5OYygpe25OYz1aY2I7bU5jPW9zKChpTmMoKSxXQyhPQyhSWSwxKSxFcmUsNTEzLDAsW2hOYyxnTmNdKSkpfQpmdW5jdGlvbiBsUGMoKXtsUGM9WmNiO2tQYz1vcygoZ1BjKCksV0MoT0Moa1osMSksRXJlLDQ1MSwwLFtlUGMsZlBjXSkpKX0KZnVuY3Rpb24gSVZjKCl7SVZjPVpjYjtIVmM9b3MoKERWYygpLFdDKE9DKHkkLDEpLEVyZSw0MjIsMCxbQ1ZjLEJWY10pKSl9CmZ1bmN0aW9uIElZYygpe0lZYz1aY2I7SFljPW9zKChBWWMoKSxXQyhPQyhnXywxKSxFcmUsNDg1LDAsW3lZYyx6WWNdKSkpfQpmdW5jdGlvbiBmJGMoKXtmJGM9WmNiO2UkYz1vcygoX1pjKCksV0MoT0Modl8sMSksRXJlLDQyMywwLFtaWmMsJFpjXSkpKX0KZnVuY3Rpb24gZjZjKCl7ZjZjPVpjYjtlNmM9b3MoKGE2YygpLFdDKE9DKEUwLDEpLEVyZSw0MjUsMCxbXzVjLCQ1Y10pKSl9CmZ1bmN0aW9uIEk3Yygpe0k3Yz1aY2I7SDdjPW9zKChBN2MoKSxXQyhPQyhNMCwxKSxFcmUsNDI0LDAsW3o3Yyx5N2NdKSkpfQpmdW5jdGlvbiBXMmMoKXtXMmM9WmNiO1YyYz1vcygoTzJjKCksV0MoT0MoYjAsMSksRXJlLDQ3NiwwLFtNMmMsTjJjXSkpKX0KZnVuY3Rpb24gV3FjKCl7V3FjPVpjYjtWcWM9bmV3IFhxYyh5dmUsMCk7VXFjPW5ldyBYcWMoJ0FMVEVSTkFUSU5HJywxKX0KZnVuY3Rpb24gTzJjKCl7TzJjPVpjYjtNMmM9bmV3IFEyYyhwd2UsMCk7TjJjPW5ldyBRMmMoJ1RBUkdFVF9XSURUSCcsMSl9CmZ1bmN0aW9uIFd6Yigpe1d6Yj1aY2I7VHpiPXRydWU7UnpiPWZhbHNlO1N6Yj1mYWxzZTtWemI9ZmFsc2U7VXpiPWZhbHNlfQpmdW5jdGlvbiBtbGQoKXttbGQ9WmNiO2xsZD1vcygoY2xkKCksV0MoT0MoRTIsMSksRXJlLDM0MywwLFthbGQsYmxkXSkpKX0KZnVuY3Rpb24gWmdkKCl7VGdkKCk7cmV0dXJuIFdDKE9DKGkyLDEpLEVyZSw4NiwwLFtSZ2QsUWdkLFBnZCxPZ2QsU2dkXSl9CmZ1bmN0aW9uIFlqZCgpe1JqZCgpO3JldHVybiBXQyhPQyh2MiwxKSxBdmUsNjQsMCxbUGpkLHhqZCx3amQsT2pkLFFqZF0pfQpmdW5jdGlvbiBlT2QoYSxiLGMpe3JldHVybiBKRChiPT1udWxsP2dzYihhLmYsbnVsbCxjKTpBc2IoYS5pLGIsYyksMjg2KX0KZnVuY3Rpb24gWF9iKGEpe3JldHVybiAoYS5rPT0oRFliKCksQVliKXx8YS5rPT13WWIpJiZYTWIoYSwoSXFjKCksT3BjKSl9CmZ1bmN0aW9uIGxlKGEsYil7dmFyIGM7Yz1iLmpkKCk7cmV0dXJuIG5ldyBjcChjLGEuZS5wYyhjLEpEKGIua2QoKSwxNikpKX0KZnVuY3Rpb24gc2tiKGEsYil7dmFyIGMsZDtjPWIuamQoKTtkPWEuRGUoYyk7cmV0dXJuICEhZCYmdHViKGQuZSxiLmtkKCkpfQpmdW5jdGlvbiBvZmIoYSxiKXt2YXIgYyxkO3REYihiKTtmb3IoZD1hLkpjKCk7ZC5PYigpOyl7Yz1kLlBiKCk7Yi5BZChjKX19CmZ1bmN0aW9uIE1mYyhhLGIpe3ZhciBjLGQ7ZD1mYWxzZTtkb3tjPVBmYyhhLGIpO2Q9ZHxjfXdoaWxlKGMpO3JldHVybiBkfQpmdW5jdGlvbiBhR2MoYSxiKXt2YXIgYyxkO2M9YjtkPTA7d2hpbGUoYz4wKXtkKz1hLmFbY107Yy09YyYtY31yZXR1cm4gZH0KZnVuY3Rpb24gb25kKGEsYil7dmFyIGM7Yz1iO3doaWxlKGMpe2xkZChhLC1jLmksLWMuaik7Yz1ad2QoYyl9cmV0dXJuIGF9CmZ1bmN0aW9uIFJsYihhLGIsYyl7dmFyIGQ7ZD0oc0RiKGIsYS5jLmxlbmd0aCksYS5jW2JdKTthLmNbYl09YztyZXR1cm4gZH0KZnVuY3Rpb24geENjKGEsYixjKXthLmEuYy5sZW5ndGg9MDtCQ2MoYSxiLGMpO2EuYS5jLmxlbmd0aD09MHx8dUNjKGEsYil9CmZ1bmN0aW9uIHNvKGEpe2EuaT0wO0RtYihhLmIsbnVsbCk7RG1iKGEuYyxudWxsKTthLmE9bnVsbDthLmU9bnVsbDsrK2EuZ30KZnVuY3Rpb24gZXNiKGEsYil7dmFyIGM7Yz1hLmEuZ2V0KGIpO3JldHVybiBjPT1udWxsP1NDKGFKLE5xZSwxLDAsNSwxKTpjfQpmdW5jdGlvbiBlV2IoYSl7aWYoIWEuY3x8IWEuZCl7cmV0dXJuIGZhbHNlfXJldHVybiAhIWEuYy5pJiZhLmMuaT09YS5kLml9CmZ1bmN0aW9uIGNBYihhKXtXemIoKTtpZihUemIpe3JldHVybn10aGlzLmM9YTt0aGlzLmU9dHJ1ZTt0aGlzLmE9bmV3IFVsYn0KZnVuY3Rpb24gYVZiKGEpe1pVYigpO0tUYih0aGlzKTt0aGlzLmE9bmV3IE10YjskVWIodGhpcyxhKTtBdGIodGhpcy5hLGEpfQpmdW5jdGlvbiB3VWIoKXtHbGIodGhpcyk7dGhpcy5iPW5ldyBFZGQoS3NlLEtzZSk7dGhpcy5hPW5ldyBFZGQoTHNlLExzZSl9CmZ1bmN0aW9uIGpCYihhLGIpe3RoaXMuYz0wO3RoaXMuYj1iO2h3Yi5jYWxsKHRoaXMsYSwxNzQ5Myk7dGhpcy5hPXRoaXMuY30KZnVuY3Rpb24gdWRiKGEpe3NkYi5jYWxsKHRoaXMsYT09bnVsbD9ScWU6YWRiKGEpLFJEKGEsODApP0pEKGEsODApOm51bGwpfQpmdW5jdGlvbiBOeihhKXthJiZVeigoU3ooKSxSeikpOy0tRno7aWYoYSl7aWYoSHohPS0xKXtQeihIeik7SHo9LTF9fX0KZnVuY3Rpb24geEJiKGEsYil7cmV0dXJuIChMQWIoYSksUEJiKG5ldyBSQmIoYSxuZXcgZ0NiKGIsYS5hKSkpKS56ZCh2QmIpfQpmdW5jdGlvbiBGUWIoKXtDUWIoKTtyZXR1cm4gV0MoT0MoQU8sMSksRXJlLDM2MCwwLFt4UWIseVFiLHpRYixBUWIsQlFiXSl9CmZ1bmN0aW9uIGNoYygpeyRnYygpO3JldHVybiBXQyhPQyhEVSwxKSxFcmUsMzY4LDAsW1dnYyxZZ2MsWmdjLFhnYyxWZ2NdKX0KZnVuY3Rpb24gblpjKCl7alpjKCk7cmV0dXJuIFdDKE9DKGxfLDEpLEVyZSwzNjEsMCxbaFpjLGVaYyxpWmMsZlpjLGdaY10pfQpmdW5jdGlvbiBMNGMoKXtJNGMoKTtyZXR1cm4gV0MoT0MobjAsMSksRXJlLDM2NiwwLFtFNGMsRDRjLEc0YyxGNGMsSDRjXSl9CmZ1bmN0aW9uIG82Yygpe2w2YygpO3JldHVybiBXQyhPQyhGMCwxKSxFcmUsMzI1LDAsW2c2YyxoNmMsazZjLGk2YyxqNmNdKX0KZnVuY3Rpb24gU3hjKCl7TXhjKCk7cmV0dXJuIFdDKE9DKGlXLDEpLEVyZSwzMjQsMCxbTHhjLEl4YyxKeGMsSHhjLEt4Y10pfQpmdW5jdGlvbiBGbmMoKXt6bmMoKTtyZXR1cm4gV0MoT0MoUVYsMSksRXJlLDM0NCwwLFt2bmMsdW5jLHhuYyx5bmMsd25jXSl9CmZ1bmN0aW9uIFJxYygpe09xYygpO3JldHVybiBXQyhPQyhfViwxKSxFcmUsMTcxLDAsW05xYyxKcWMsS3FjLExxYyxNcWNdKX0KZnVuY3Rpb24gb2NkKCl7bGNkKCk7cmV0dXJuIFdDKE9DKFYxLDEpLEVyZSwxNzAsMCxbamNkLGljZCxnY2Qsa2NkLGhjZF0pfQpmdW5jdGlvbiBUaWQoKXtRaWQoKTtyZXR1cm4gV0MoT0MoczIsMSksRXJlLDI1NSwwLFtOaWQsUGlkLExpZCxNaWQsT2lkXSl9CmZ1bmN0aW9uIEx6KGIpe0l6KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE16KGIsdGhpcyxhcmd1bWVudHMpO3ZhciBhfX0KZnVuY3Rpb24gYWFkKGEsYil7aWYoUkQoYiwxNDkpKXtyZXR1cm4gY2diKGEuYyxKRChiLDE0OSkuYyl9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiByMWQoYSl7dmFyIGI7aWYoIWEuYyl7Yj1hLnI7UkQoYiw4OCkmJihhLmM9SkQoYiwyOSkpfXJldHVybiBhLmN9CmZ1bmN0aW9uIFRUZChhKXtpZighYS50KXthLnQ9bmV3IFJWZChhKTtzQ2QobmV3IFg4ZChhKSwwLGEudCl9cmV0dXJuIGEudH0KZnVuY3Rpb24gemMoYSl7YS5lPTM7YS5kPWEuWWIoKTtpZihhLmUhPTIpe2EuZT0wO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX0KZnVuY3Rpb24gSmFkKGEsYil7dmFyIGM7Yz1KRChUc2IoYS5kLGIpLDIxKTtyZXR1cm4gYz9jOkpEKFRzYihhLmUsYiksMjEpfQpmdW5jdGlvbiBUYyhhLGIpe3ZhciBjLGQ7Yz1KRChVdihhLmMsYiksMTYpO2lmKGMpe2Q9Yy5nYygpO2MuJGIoKTthLmQtPWR9fQpmdW5jdGlvbiBDeShhKXt2YXIgYixjLGQsZTtmb3IoYz1hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtIQWIoYil9fQpmdW5jdGlvbiBaQyhhKXt2YXIgYixjLGQ7Yj1hJnpzZTtjPWE+PjIyJnpzZTtkPWE8MD9Bc2U6MDtyZXR1cm4gX0MoYixjLGQpfQpmdW5jdGlvbiBiZ2IoYSl7dmFyIGI7Yj1hLmxlbmd0aDtyZXR1cm4gY2diKE9zZS5zdWJzdHIoT3NlLmxlbmd0aC1iLGIpLGEpfQpmdW5jdGlvbiBkcyhhKXtpZihjcyhhKSl7YS5jPWEuYTtyZXR1cm4gYS5hLlBiKCl9ZWxzZXt0aHJvdyBzY2IobmV3IHF1Yil9fQpmdW5jdGlvbiBRaGIoYSxiKXtpZihiPT0wfHxhLmU9PTApe3JldHVybiBhfXJldHVybiBiPjA/aGliKGEsYik6a2liKGEsLWIpfQpmdW5jdGlvbiBSaGIoYSxiKXtpZihiPT0wfHxhLmU9PTApe3JldHVybiBhfXJldHVybiBiPjA/a2liKGEsYik6aGliKGEsLWIpfQpmdW5jdGlvbiBSSWQoYSl7dGhpcy5iPWE7WEhkLmNhbGwodGhpcyxhKTt0aGlzLmE9SkQoQ3JkKHRoaXMuYi5hLDQpLDEyOCl9CmZ1bmN0aW9uIElJZChhKXt0aGlzLmI9YTtDSGQuY2FsbCh0aGlzLGEpO3RoaXMuYT1KRChDcmQodGhpcy5iLmEsNCksMTI4KX0KZnVuY3Rpb24gal9kKGEsYixjLGQsZSl7bEdkLmNhbGwodGhpcyxiLGQsZSk7Y19kKHRoaXMpO3RoaXMuYz1hO3RoaXMuYj1jfQpmdW5jdGlvbiBCX2QoYSxiLGMsZCxlKXtsR2QuY2FsbCh0aGlzLGIsZCxlKTtjX2QodGhpcyk7dGhpcy5jPWE7dGhpcy5hPWN9CmZ1bmN0aW9uIG9fZChhLGIsYyxkLGUpe2hHZC5jYWxsKHRoaXMsYixkLGUpO2NfZCh0aGlzKTt0aGlzLmM9YTt0aGlzLmE9Y30KZnVuY3Rpb24gc19kKGEsYixjLGQsZSl7aUdkLmNhbGwodGhpcyxiLGQsZSk7Y19kKHRoaXMpO3RoaXMuYz1hO3RoaXMuYT1jfQpmdW5jdGlvbiB4SGIoYSxiLGMsZCl7dmFyIGU7Zm9yKGU9MDtlPHVIYjtlKyspe29IYihhLmFbZV1bYi5nXSxjLGRbYi5nXSl9fQpmdW5jdGlvbiB3SGIoYSxiLGMsZCl7dmFyIGU7Zm9yKGU9MDtlPHRIYjtlKyspe3BIYihhLmFbYi5nXVtlXSxjLGRbYi5nXSl9fQpmdW5jdGlvbiBqcWQoYSxiLGMpe3ZhciBkO3JldHVybiBkPWEuRWgoYiksZD49MD9hLkhoKGQsYyx0cnVlKTp1cWQoYSxiLGMpfQpmdW5jdGlvbiBEUmMoYSxiLGMpe3JldHVybiBIZWIocWRkKG1RYyhhKSxvZGQoYi5iKSkscWRkKG1RYyhhKSxvZGQoYy5iKSkpfQpmdW5jdGlvbiBFUmMoYSxiLGMpe3JldHVybiBIZWIocWRkKG1RYyhhKSxvZGQoYi5lKSkscWRkKG1RYyhhKSxvZGQoYy5lKSkpfQpmdW5jdGlvbiAkNGMoYSxiKXtyZXR1cm4gJHduZC5NYXRoLm1pbihwZGQoYi5hLGEuZC5kLmMpLHBkZChiLmIsYS5kLmQuYykpfQpmdW5jdGlvbiBUZmUoYSxiLGMpe3ZhciBkO2Q9bmV3IFVmZShhLmEpO0xkKGQsYS5hLmEpO2dzYihkLmYsYixjKTthLmEuYT1kfQpmdW5jdGlvbiBDVmIoYSl7dmFyIGI7Yj1uZXcga1diO1VNYihiLGEpO1pNYihiLChCd2MoKSxSdWMpLG51bGwpO3JldHVybiBifQpmdW5jdGlvbiB5N2IoYSl7dmFyIGIsYztiPWEuYy5pO2M9YS5kLmk7cmV0dXJuIGIuaz09KERZYigpLHdZYikmJmMuaz09d1lifQpmdW5jdGlvbiBsRGQoYSl7dmFyIGIsYzsrK2EuajtiPWEuZztjPWEuaTthLmc9bnVsbDthLmk9MDthLkxpKGMsYik7YS5LaSgpfQpmdW5jdGlvbiBpRGQoYSxiKXthLllpKGEuaSsxKTtqRGQoYSxhLmksYS5XaShhLmksYikpO2EuSmkoYS5pKyssYik7YS5LaSgpfQpmdW5jdGlvbiBRYyhhLGIpe3ZhciBjO2M9SkQoYS5jLnhjKGIpLDE2KTshYyYmKGM9YS5pYyhiKSk7cmV0dXJuIGEucGMoYixjKX0KZnVuY3Rpb24gYWdiKGEsYil7dmFyIGMsZDtjPSh0RGIoYSksYSk7ZD0odERiKGIpLGIpO3JldHVybiBjPT1kPzA6YzxkPy0xOjF9CmZ1bmN0aW9uIGhCKGEsYil7dmFyIGM7Yz1hLnEuZ2V0SG91cnMoKSsoYi82MHwwKTthLnEuc2V0TWludXRlcyhiKTtlQihhLGMpfQpmdW5jdGlvbiBzbShhKXt2YXIgYjtiPShRYihhKSxhP25ldyBXbGIoYSk6JHUoYS5KYygpKSk7dm5iKGIpO3JldHVybiBNbShiKX0KZnVuY3Rpb24gX3UoYSl7dmFyIGIsYztRYihhKTtiPVZ1KGEubGVuZ3RoKTtjPW5ldyBWbGIoYik7cW5iKGMsYSk7cmV0dXJuIGN9CmZ1bmN0aW9uIE9sYihhLGIpe3ZhciBjO2M9KHNEYihiLGEuYy5sZW5ndGgpLGEuY1tiXSk7WkNiKGEuYyxiLDEpO3JldHVybiBjfQpmdW5jdGlvbiB1eGIoYSxiKXshYS5hPyhhLmE9bmV3IFdnYihhLmQpKTpRZ2IoYS5hLGEuYik7TmdiKGEuYSxiKTtyZXR1cm4gYX0KZnVuY3Rpb24gU2IoYSxiKXtpZihhPDB8fGE+Yil7dGhyb3cgc2NiKG5ldyBtZGIoSmIoYSxiLCdpbmRleCcpKSl9cmV0dXJuIGF9CmZ1bmN0aW9uIHlpYihhLGIsYyxkKXt2YXIgZTtlPVNDKGNFLGlzZSwzMCxiLDE1LDEpO3ppYihlLGEsYixjLGQpO3JldHVybiBlfQpmdW5jdGlvbiBEcWIoYSl7dmFyIGI7Yj1hLmUrYS5mO2lmKGlzTmFOKGIpJiZJZWIoYS5kKSl7cmV0dXJuIGEuZH1yZXR1cm4gYn0KZnVuY3Rpb24gTTlkKCl7TTlkPVpjYjt2YXIgYSxiO0s5ZD0oRU9kKCksYj1uZXcgRllkLGIpO0w5ZD0oYT1uZXcgSFNkLGEpfQpmdW5jdGlvbiBHY2QoKXtHY2Q9WmNiO0ZjZD1uZXcgS0JkKCdvcmcuZWNsaXBzZS5lbGsubGFiZWxzLmxhYmVsTWFuYWdlcicpfQpmdW5jdGlvbiBpTmMoKXtpTmM9WmNiO2hOYz1uZXcgak5jKCdSRUdVTEFSJywwKTtnTmM9bmV3IGpOYygnQ1JJVElDQUwnLDEpfQpmdW5jdGlvbiB4WmIoYSl7dGhpcy5jPWE7dGhpcy5hPW5ldyBybWIodGhpcy5jLmEpO3RoaXMuYj1uZXcgcm1iKHRoaXMuYy5iKX0KZnVuY3Rpb24gbEdkKGEsYixjKXt0aGlzLmQ9YTt0aGlzLms9Yj8xOjA7dGhpcy5mPWM/MTowO3RoaXMubz0tMTt0aGlzLnA9MH0KZnVuY3Rpb24gZjNkKGEsYixjKXtPMmQuY2FsbCh0aGlzLGMpO3RoaXMuYj1hO3RoaXMuYz1iO3RoaXMuZD0odjNkKCksdDNkKX0KZnVuY3Rpb24gSmdjKGEsYixjKXt0aGlzLmE9YTt0aGlzLmM9Yjt0aGlzLmQ9YztJbGIoYi5lLHRoaXMpO0lsYihjLmIsdGhpcyl9CmZ1bmN0aW9uIHFOYigpe3RoaXMuZT1uZXcgVWxiO3RoaXMuYz1uZXcgVWxiO3RoaXMuZD1uZXcgVWxiO3RoaXMuYj1uZXcgVWxifQpmdW5jdGlvbiBQRmIoKXt0aGlzLmc9bmV3IFNGYjt0aGlzLmI9bmV3IFNGYjt0aGlzLmE9bmV3IFVsYjt0aGlzLms9bmV3IFVsYn0KZnVuY3Rpb24gU1ViKCl7dGhpcy5hPW5ldyBUVGI7dGhpcy5iPW5ldyBYVGI7dGhpcy5kPW5ldyBoVmI7dGhpcy5lPW5ldyBkVmJ9CmZ1bmN0aW9uIHNDYihhLGIpe2h3Yi5jYWxsKHRoaXMsYi54ZCgpLGIud2QoKSYtNik7dERiKGEpO3RoaXMuYT1hO3RoaXMuYj1ifQpmdW5jdGlvbiBtQ2IoYSxiKXtkd2IuY2FsbCh0aGlzLGIueGQoKSxiLndkKCkmLTYpO3REYihhKTt0aGlzLmE9YTt0aGlzLmI9Yn0KZnVuY3Rpb24geUNiKGEsYil7bHdiLmNhbGwodGhpcyxiLnhkKCksYi53ZCgpJi02KTt0RGIoYSk7dGhpcy5hPWE7dGhpcy5iPWJ9CmZ1bmN0aW9uIGNQYyhhLGIsYyl7dGhpcy5hPWE7dGhpcy5iPWI7dGhpcy5jPWM7SWxiKGEudCx0aGlzKTtJbGIoYi5pLHRoaXMpfQpmdW5jdGlvbiBfUWMoKXt0aGlzLmI9bmV3IE10Yjt0aGlzLmE9bmV3IE10Yjt0aGlzLmI9bmV3IE10Yjt0aGlzLmE9bmV3IE10Yn0KZnVuY3Rpb24gcUdjKGEsYil7dmFyIGM7Yz13R2MoYSxiKTthLmI9bmV3IGNHYyhjLmMubGVuZ3RoKTtyZXR1cm4gcEdjKGEsYyl9CmZ1bmN0aW9uIEhKZChhLGIsYyl7dmFyIGQ7KythLmU7LS1hLmY7ZD1KRChhLmRbYl0uZWQoYyksMTM1KTtyZXR1cm4gZC5rZCgpfQpmdW5jdGlvbiBDU2QoYSl7dmFyIGI7aWYoIWEuYSl7Yj1hLnI7UkQoYiwxNTUpJiYoYS5hPUpEKGIsMTU1KSl9cmV0dXJuIGEuYX0KZnVuY3Rpb24gQ2xjKGEpe2lmKGEuYSl7aWYoYS5lKXtyZXR1cm4gQ2xjKGEuZSl9fWVsc2V7cmV0dXJuIGF9cmV0dXJuIG51bGx9CmZ1bmN0aW9uIHBDYyhhLGIpe2lmKGEucDxiLnApe3JldHVybiAxfWVsc2UgaWYoYS5wPmIucCl7cmV0dXJuIC0xfXJldHVybiAwfQpmdW5jdGlvbiBKNWQoYSxiKXtpZihMaWIoYS5hLGIpKXtTaWIoYS5hLGIpO3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX0KZnVuY3Rpb24gY1JjKGEpe3ZhciBiO2I9YS5iO2lmKGIuYj09MCl7cmV0dXJuIG51bGx9cmV0dXJuIEpEKGZ1KGIsMCksNjUpLmJ9CmZ1bmN0aW9uIGZkKGEpe3ZhciBiLGM7Yj1hLmpkKCk7Yz1KRChhLmtkKCksMTYpO3JldHVybiBlayhjLkxjKCksbmV3IGhoKGIpKX0KZnVuY3Rpb24gbndiKGEsYil7dERiKGIpO2lmKGEuYzxhLmQpe2EuUWUoYixhLmMrKyk7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBUQWIoYSl7dmFyIGI7TEFiKGEpO2I9bmV3IFpBYihhLGEuYS5lLGEuYS5kfDQpO3JldHVybiBuZXcgVkFiKGEsYil9CmZ1bmN0aW9uIHpCYihhKXt2YXIgYjtLQWIoYSk7Yj0wO3doaWxlKGEuYS56ZChuZXcgTENiKSl7Yj10Y2IoYiwxKX1yZXR1cm4gYn0KZnVuY3Rpb24gU2liKGEsYil7cmV0dXJuIFZEKGIpP2I9PW51bGw/aHNiKGEuZixudWxsKTpCc2IoYS5pLGIpOmhzYihhLmYsYil9CmZ1bmN0aW9uIFg2YihhLGIpe2IuU2coJ0xhYmVsIG1hbmFnZW1lbnQnLDEpO1pEKFdNYihhLChHY2QoKSxGY2QpKSk7Yi5UZygpfQpmdW5jdGlvbiBTaShhLGIsYyl7UGIoYixhLmUuUGQoKS5nYygpKTtQYihjLGEuYy5QZCgpLmdjKCkpO3JldHVybiBhLmFbYl1bY119CmZ1bmN0aW9uIHZDYyhhLGIsYyl7dmFyIGQsZTtkPTA7Zm9yKGU9MDtlPGIubGVuZ3RoO2UrKyl7ZCs9YS5yZyhiW2VdLGQsYyl9fQpmdW5jdGlvbiBTSmIoYSxiKXt2YXIgYztpZihhLkMpe2M9SkQoS3FiKGEuYixiKSwxMjYpLm47Yy5kPWEuQy5kO2MuYT1hLkMuYX19CmZ1bmN0aW9uIFIxYihhKXt2YXIgYixjLGQsZTtlPWEuZDtiPWEuYTtjPWEuYjtkPWEuYzthLmQ9YzthLmE9ZDthLmI9ZTthLmM9Yn0KZnVuY3Rpb24gamcoYSxiLGMsZCl7dGhpcy5mPWE7dGhpcy5lPWI7dGhpcy5kPWM7dGhpcy5iPWQ7dGhpcy5jPSFkP251bGw6ZC5kfQpmdW5jdGlvbiBWbGIoYSl7R2xiKHRoaXMpO2xEYihhPj0wLCdJbml0aWFsIGNhcGFjaXR5IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9CmZ1bmN0aW9uIHY3Yigpe3Y3Yj1aY2I7dTdiPW5ldyBMQmQoJ3NlcGFyYXRlTGF5ZXJDb25uZWN0aW9ucycsKEk3YigpLEg3YikpfQpmdW5jdGlvbiBhNmMoKXthNmM9WmNiO181Yz1uZXcgYjZjKCdGSVhFRCcsMCk7JDVjPW5ldyBiNmMoJ0NFTlRFUl9OT0RFJywxKX0KZnVuY3Rpb24gVm1jKCl7Vm1jPVpjYjtUbWM9bmV3IFdtYygnUVVBRFJBVElDJywwKTtVbWM9bmV3IFdtYygnU0NBTkxJTkUnLDEpfQpmdW5jdGlvbiBOaGMoKXtOaGM9WmNiO01oYz1vcygoSWhjKCksV0MoT0MoRVUsMSksRXJlLDM2NSwwLFtIaGMsR2hjLEZoY10pKSl9CmZ1bmN0aW9uIGtuYygpe2tuYz1aY2I7am5jPW9zKChjbmMoKSxXQyhPQyhPViwxKSxFcmUsMzIzLDAsW2FuYyxfbWMsYm5jXSkpKX0KZnVuY3Rpb24gdG5jKCl7dG5jPVpjYjtzbmM9b3MoKG9uYygpLFdDKE9DKFBWLDEpLEVyZSwzNDcsMCxbbG5jLG5uYyxtbmNdKSkpfQpmdW5jdGlvbiBZbmMoKXtZbmM9WmNiO1huYz1vcygoVG5jKCksV0MoT0MoU1YsMSksRXJlLDQ0NiwwLFtSbmMsUW5jLFNuY10pKSl9CmZ1bmN0aW9uIEp5Yygpe0p5Yz1aY2I7SXljPW9zKChFeWMoKSxXQyhPQyhtVywxKSxFcmUsNDQ5LDAsW0R5YyxCeWMsQ3ljXSkpKX0KZnVuY3Rpb24gU3ljKCl7U3ljPVpjYjtSeWM9b3MoKE55YygpLFdDKE9DKG5XLDEpLEVyZSwzNzksMCxbS3ljLEx5YyxNeWNdKSkpfQpmdW5jdGlvbiBfeWMoKXtfeWM9WmNiOyR5Yz1vcygoV3ljKCksV0MoT0Mob1csMSksRXJlLDM0NSwwLFtWeWMsVHljLFV5Y10pKSl9CmZ1bmN0aW9uIHV4Yygpe3V4Yz1aY2I7dHhjPW9zKChveGMoKSxXQyhPQyhnVywxKSxFcmUsMzQ5LDAsW2x4YyxteGMsbnhjXSkpKX0KZnVuY3Rpb24gdHpjKCl7dHpjPVpjYjtzemM9b3MoKG96YygpLFdDKE9DKHFXLDEpLEVyZSwzNDYsMCxbbHpjLG16YyxuemNdKSkpfQpmdW5jdGlvbiBDemMoKXtDemM9WmNiO0J6Yz1vcygoeHpjKCksV0MoT0MoclcsMSksRXJlLDM0OCwwLFt3emMsdXpjLHZ6Y10pKSl9CmZ1bmN0aW9uIEx6Yygpe0x6Yz1aY2I7S3pjPW9zKChHemMoKSxXQyhPQyhzVywxKSxFcmUsMzgwLDAsW0V6YyxGemMsRHpjXSkpKX0KZnVuY3Rpb24gVFRjKCl7VFRjPVpjYjtTVGM9b3MoKE9UYygpLFdDKE9DKHQkLDEpLEVyZSwzODMsMCxbTlRjLE1UYyxMVGNdKSkpfQpmdW5jdGlvbiBwJGMoKXtwJGM9WmNiO28kYz1vcygoaiRjKCksV0MoT0Mod18sMSksRXJlLDM4NCwwLFtnJGMsaCRjLGkkY10pKSl9CmZ1bmN0aW9uIHZwYygpe3ZwYz1aY2I7dXBjPW9zKChxcGMoKSxXQyhPQyhaViwxKSxFcmUsMzEyLDAsW29wYyxwcGMsbnBjXSkpKX0KZnVuY3Rpb24gbXBjKCl7bXBjPVpjYjtscGM9b3MoKGhwYygpLFdDKE9DKFlWLDEpLEVyZSwyOTgsMCxbZnBjLGdwYyxlcGNdKSkpfQpmdW5jdGlvbiBDX2MoKXtDX2M9WmNiO0JfYz1vcygod19jKCksV0MoT0MoQl8sMSksRXJlLDI5OSwwLFt1X2Msdl9jLHRfY10pKSl9CmZ1bmN0aW9uIG4wYygpe24wYz1aY2I7bTBjPW9zKChpMGMoKSxXQyhPQyhKXywxKSxFcmUsNDMzLDAsW2YwYyxnMGMsaDBjXSkpKX0KZnVuY3Rpb24gQjVjKCl7QjVjPVpjYjtBNWM9b3MoKHc1YygpLFdDKE9DKHkwLDEpLEVyZSw0MzIsMCxbdDVjLHU1Yyx2NWNdKSkpfQpmdW5jdGlvbiB5M2MoKXt5M2M9WmNiO3gzYz1vcygocTNjKCksV0MoT0MoZTAsMSksRXJlLDQyNiwwLFtuM2MscDNjLG8zY10pKSl9CmZ1bmN0aW9uIFozYygpe1ozYz1aY2I7WTNjPW9zKChSM2MoKSxXQyhPQyhqMCwxKSxFcmUsNDI3LDAsW08zYyxRM2MsUDNjXSkpKX0KZnVuY3Rpb24gWkVjKCl7WkVjPVpjYjtZRWM9b3MoKFVFYygpLFdDKE9DKGJYLDEpLEVyZSw0NTAsMCxbUkVjLFNFYyxURWNdKSkpfQpmdW5jdGlvbiBxMWMoKXtxMWM9WmNiO3AxYz1vcygobDFjKCksV0MoT0MoU18sMSksRXJlLDM4NSwwLFtqMWMsazFjLGkxY10pKSl9CmZ1bmN0aW9uIHFBYigpe3FBYj1aY2I7cEFiPW9zKChsQWIoKSxXQyhPQyhITCwxKSxFcmUsMTMxLDAsW2lBYixqQWIsa0FiXSkpKX0KZnVuY3Rpb24gbkhiKCl7bkhiPVpjYjttSGI9b3MoKGlIYigpLFdDKE9DKGhOLDEpLEVyZSwyMzYsMCxbZkhiLGdIYixoSGJdKSkpfQpmdW5jdGlvbiBVSGIoKXtVSGI9WmNiO1RIYj1vcygoUEhiKCksV0MoT0Moa04sMSksRXJlLDQ1NywwLFtOSGIsTUhiLE9IYl0pKSl9CmZ1bmN0aW9uIExJYigpe0xJYj1aY2I7S0liPW9zKChHSWIoKSxXQyhPQyhyTiwxKSxFcmUsNDU4LDAsW0ZJYixFSWIsREliXSkpKX0KZnVuY3Rpb24gUFBiKCl7UFBiPVpjYjtPUGI9b3MoKEtQYigpLFdDKE9DKHBPLDEpLEVyZSwzODIsMCxbSVBiLEhQYixKUGJdKSkpfQpmdW5jdGlvbiBqaWQoKXtqaWQ9WmNiO2lpZD1vcygoZWlkKCksV0MoT0MocDIsMSksRXJlLDM0MiwwLFtjaWQsYmlkLGRpZF0pKSl9CmZ1bmN0aW9uIHNoZCgpe3NoZD1aY2I7cmhkPW9zKChuaGQoKSxXQyhPQyhrMiwxKSxFcmUsMjc2LDAsW2toZCxsaGQsbWhkXSkpKX0KZnVuY3Rpb24gX2tkKCl7X2tkPVpjYjska2Q9b3MoKFdrZCgpLFdDKE9DKEIyLDEpLEVyZSwyNzgsMCxbVWtkLFRrZCxWa2RdKSkpfQpmdW5jdGlvbiB0a2QoKXt0a2Q9WmNiO3NrZD1vcygob2tkKCksV0MoT0MoeTIsMSksRXJlLDI5NywwLFtsa2QsbWtkLG5rZF0pKSl9CmZ1bmN0aW9uIGxzZChhLGIpe3JldHVybiAhYS5vJiYoYS5vPW5ldyBZUWQoKFZwZCgpLFNwZCksTzMsYSwwKSksbkpkKGEubyxiKX0KZnVuY3Rpb24gS0pkKGEpeyFhLmcmJihhLmc9bmV3IEVMZCk7IWEuZy5kJiYoYS5nLmQ9bmV3IElLZChhKSk7cmV0dXJuIGEuZy5kfQpmdW5jdGlvbiB2SmQoYSl7IWEuZyYmKGEuZz1uZXcgRUxkKTshYS5nLmEmJihhLmcuYT1uZXcgT0tkKGEpKTtyZXR1cm4gYS5nLmF9CmZ1bmN0aW9uIEJKZChhKXshYS5nJiYoYS5nPW5ldyBFTGQpOyFhLmcuYiYmKGEuZy5iPW5ldyBDS2QoYSkpO3JldHVybiBhLmcuYn0KZnVuY3Rpb24gQ0pkKGEpeyFhLmcmJihhLmc9bmV3IEVMZCk7IWEuZy5jJiYoYS5nLmM9bmV3IGVMZChhKSk7cmV0dXJuIGEuZy5jfQpmdW5jdGlvbiBXNGQoYSxiLGMsZCl7ISFjJiYoZD1jLk5oKGIsV1RkKGMuemgoKSxhLmMucmsoKSksbnVsbCxkKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIFg0ZChhLGIsYyxkKXshIWMmJihkPWMuUGgoYixXVGQoYy56aCgpLGEuYy5yaygpKSxudWxsLGQpKTtyZXR1cm4gZH0KZnVuY3Rpb24gdGliKGEsYixjLGQpe3ZhciBlO2U9U0MoY0UsaXNlLDMwLGIrMSwxNSwxKTt1aWIoZSxhLGIsYyxkKTtyZXR1cm4gZX0KZnVuY3Rpb24gU0MoYSxiLGMsZCxlLGYpe3ZhciBnO2c9VEMoZSxkKTtlIT0xMCYmV0MoT0MoYSxmKSxiLGMsZSxnKTtyZXR1cm4gZ30KZnVuY3Rpb24gdGJlKGEsYixjKXt2YXIgZCxlO2U9bmV3IGlkZShiLGEpO2ZvcihkPTA7ZDxjOysrZCl7WWNlKGUpfXJldHVybiBlfQpmdW5jdGlvbiB4Q2QoYSxiLGMpe3ZhciBkLGU7aWYoYyE9bnVsbCl7Zm9yKGQ9MDtkPGI7KytkKXtlPWNbZF07YS5OaShkLGUpfX19CmZ1bmN0aW9uIE14YihhLGIpe3ZhciBjO2M9bmV3IHV5YjtjLmM9dHJ1ZTtjLmQ9Yi5rZCgpO3JldHVybiBOeGIoYSxiLmpkKCksYyl9CmZ1bmN0aW9uIGpCKGEsYil7dmFyIGM7Yz1hLnEuZ2V0SG91cnMoKSsoYi8zNjAwfDApO2EucS5zZXRTZWNvbmRzKGIpO2VCKGEsYyl9CmZ1bmN0aW9uIHl0KGEsYil7dmFyIGMsZDtjPWI7ZD15bmIoJHUobmV3IEp1KGEsYykpKTt3cihuZXcgSnUoYSxjKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIFJiZShhLGIsYyxkKXtRYmUoYSxiLGMsRmJlKGEsYixkLFJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTApKX0KZnVuY3Rpb24gTExiKGEsYixjKXtKRChhLmIsNjgpO0pEKGEuYiw2OCk7SkQoYS5iLDY4KTtMbGIoYS5hLG5ldyBVTGIoYyxiLGEpKX0KZnVuY3Rpb24gekRiKGEsYixjKXtpZihhPDB8fGI+Y3x8YjxhKXt0aHJvdyBzY2IobmV3IFhnYih2dGUrYSt4dGUrYitrdGUrYykpfX0KZnVuY3Rpb24gTUFiKGEpe2lmKCFhKXt0aGlzLmM9bnVsbDt0aGlzLmI9bmV3IFVsYn1lbHNle3RoaXMuYz1hO3RoaXMuYj1udWxsfX0KZnVuY3Rpb24gWXNiKGEpe1ZpYi5jYWxsKHRoaXMsYSwwKTtRc2IodGhpcyk7dGhpcy5kLmI9dGhpcy5kO3RoaXMuZC5hPXRoaXMuZH0KZnVuY3Rpb24gdHliKGEsYil7b2tiLmNhbGwodGhpcyxhLGIpO3RoaXMuYT1TQyhtTCx0cmUsNDM1LDIsMCwxKTt0aGlzLmI9dHJ1ZX0KZnVuY3Rpb24gbHNiKGEpe3RoaXMuZT1hO3RoaXMuYj10aGlzLmUuYS5lbnRyaWVzKCk7dGhpcy5hPVNDKGFKLE5xZSwxLDAsNSwxKX0KZnVuY3Rpb24gY0FjKCl7Y0FjPVpjYjtiQWM9QzljKEU5YyhuZXcgSjljLChDUWIoKSx4UWIpLCh1NWIoKSxSNGIpKSxCUWIsbDViKX0KZnVuY3Rpb24gQm9jKCl7eW9jKCk7cmV0dXJuIFdDKE9DKFZWLDEpLEVyZSwyNzksMCxbdm9jLHVvYyx4b2MsdG9jLHdvYyxzb2NdKX0KZnVuY3Rpb24gTm9jKCl7S29jKCk7cmV0dXJuIFdDKE9DKFdWLDEpLEVyZSwyODAsMCxbSW9jLEZvYyxKb2MsSG9jLEdvYyxFb2NdKX0KZnVuY3Rpb24gaG9jKCl7ZG9jKCk7cmV0dXJuIFdDKE9DKFRWLDEpLEVyZSwyODEsMCxbJG5jLFpuYyxhb2MsX25jLGNvYyxib2NdKX0KZnVuY3Rpb24gUW1jKCl7Tm1jKCk7cmV0dXJuIFdDKE9DKE1WLDEpLEVyZSwyMzEsMCxbSm1jLExtYyxJbWMsS21jLE1tYyxIbWNdKX0KZnVuY3Rpb24gZmVkKCl7Y2VkKCk7cmV0dXJuIFdDKE9DKGQyLDEpLEVyZSwyNTQsMCxbWWRkLF9kZCxhZWQsYmVkLFpkZCwkZGRdKX0KZnVuY3Rpb24gS2VkKCl7SGVkKCk7cmV0dXJuIFdDKE9DKGcyLDEpLEVyZSwyOTYsMCxbR2VkLEZlZCxFZWQsQ2VkLEJlZCxEZWRdKX0KZnVuY3Rpb24gTWhkKCl7SmhkKCk7cmV0dXJuIFdDKE9DKG0yLDEpLEVyZSwzMjIsMCxbSGhkLEZoZCxJaGQsRGhkLEdoZCxFaGRdKX0KZnVuY3Rpb24gZmpkKCl7YWpkKCk7cmV0dXJuIFdDKE9DKHQyLDEpLEVyZSwxMDAsMCxbX2lkLCRpZCxaaWQsV2lkLFlpZCxYaWRdKX0KZnVuY3Rpb24gdGpkKCl7b2pkKCk7cmV0dXJuIFdDKE9DKHUyLDEpLEVyZSwyNzcsMCxbbWpkLGtqZCxsamQsampkLGlqZCxuamRdKX0KZnVuY3Rpb24gRG9lKGEsYixjKXtvb2UoKTt2YXIgZDtkPUNvZShhLGIpO2MmJiEhZCYmRm9lKGEpJiYoZD1udWxsKTtyZXR1cm4gZH0KZnVuY3Rpb24gYUliKGEsYil7d3ViKGIsJ0hvcml6b250YWwgYWxpZ25tZW50IGNhbm5vdCBiZSBudWxsJyk7YS5iPWI7cmV0dXJuIGF9CmZ1bmN0aW9uIHRDZChhLGIpe2lmKGEuUGkoKSYmYS5HYyhiKSl7cmV0dXJuIGZhbHNlfWVsc2V7YS5FaShiKTtyZXR1cm4gdHJ1ZX19CmZ1bmN0aW9uIGRfZChhKXt2YXIgYjtpZighYS5hJiZhLmIhPS0xKXtiPWEuYy56aCgpO2EuYT1RVGQoYixhLmIpfXJldHVybiBhLmF9CmZ1bmN0aW9uIHBkZChhLGIpe3ZhciBjLGQ7Yz1hLmEtYi5hO2Q9YS5iLWIuYjtyZXR1cm4gJHduZC5NYXRoLnNxcnQoYypjK2QqZCl9CmZ1bmN0aW9uIHJnYyhhLGIsYyl7dmFyIGQ7YS5kW2IuZ109YztkPWEuZy5jO2RbYi5nXT0kd25kLk1hdGgubWF4KGRbYi5nXSxjKzEpfQpmdW5jdGlvbiBhRmMoYSxiLGMpe3ZhciBkO2Q9YS5iW2MuYy5wXVtjLnBdO2QuYis9Yi5iO2QuYys9Yi5jO2QuYSs9Yi5hOysrZC5hfQpmdW5jdGlvbiBIVGIoYSxiLGMpe3ZhciBkLGU7Zm9yKGU9YS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDM2KTtHVGIoZCxiLGMpfX0KZnVuY3Rpb24gRlRiKGEsYil7dmFyIGMsZDtmb3IoZD1iLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksMzYpO0VUYihhLGMsMCwwKX19CmZ1bmN0aW9uIEpXYyhhKXt2YXIgYixjO2ZvcihjPUd0YihhLmEsMCk7Yy5iIT1jLmQuYzspe2I9SkQoVXRiKGMpLDY1KTtLV2MoYil9fQpmdW5jdGlvbiByeWQoYSxiKXt2YXIgYztjPU5pYihhLmssYik7ZXpkKGEsYik7ZHpkKGEsYik7b3pkKGEsYixjKTtyZXR1cm4gbnVsbH0KZnVuY3Rpb24gaXFkKGEsYil7dmFyIGM7cmV0dXJuIGM9YS5FaChiKSxjPj0wP2EuSGgoYyx0cnVlLHRydWUpOnVxZChhLGIsdHJ1ZSl9CmZ1bmN0aW9uIGU0YyhhLGIpe3ZhciBjLGQsZTtlPWEucjtkPWEuZDtjPWc0YyhhLGIsdHJ1ZSk7cmV0dXJuIGMuYiE9ZXx8Yy5hIT1kfQpmdW5jdGlvbiBNZ2MoYSxiKXtTc2IoYS5lLGIpfHxVc2IoYS5lLGIsbmV3IFNnYyhiKSk7cmV0dXJuIEpEKFRzYihhLmUsYiksMTEyKX0KZnVuY3Rpb24gaEFiKGEsYixjLGQpe3REYihhKTt0RGIoYik7dERiKGMpO3REYihkKTtyZXR1cm4gbmV3IHJBYihhLGIsbmV3IEJ6Yil9CmZ1bmN0aW9uIG9hZShhLGIsYyl7dmFyIGQsZTtlPShkPWcxZChhLmIsYiksZCk7cmV0dXJuICFlP251bGw6T2FlKGlhZShhLGUpLGMpfQpmdW5jdGlvbiBQeWQoYSxiLGMpe3ZhciBkLGUsZjtkPWlDKGEsYyk7ZT1udWxsOyEhZCYmKGU9Y3lkKGQpKTtmPWU7anpkKGIsYyxmKX0KZnVuY3Rpb24gUXlkKGEsYixjKXt2YXIgZCxlLGY7ZD1pQyhhLGMpO2U9bnVsbDshIWQmJihlPWN5ZChkKSk7Zj1lO2p6ZChiLGMsZil9CmZ1bmN0aW9uIFlRZChhLGIsYyxkKXt0aGlzLlpqKCk7dGhpcy5hPWI7dGhpcy5iPWE7dGhpcy5jPW5ldyBSZWUodGhpcyxiLGMsZCl9CmZ1bmN0aW9uIGhfZChhLGIsYyxkLGUsZil7akdkLmNhbGwodGhpcyxiLGQsZSxmKTtjX2QodGhpcyk7dGhpcy5jPWE7dGhpcy5iPWN9CmZ1bmN0aW9uIHhfZChhLGIsYyxkLGUsZil7akdkLmNhbGwodGhpcyxiLGQsZSxmKTtjX2QodGhpcyk7dGhpcy5jPWE7dGhpcy5hPWN9CmZ1bmN0aW9uIGdDYihhLGIpe2x3Yi5jYWxsKHRoaXMsYi54ZCgpLGIud2QoKSYtMTY0NDkpO3REYihhKTt0aGlzLmE9YTt0aGlzLmM9Yn0KZnVuY3Rpb24gWVNiKGEsYil7aWYoYS5hLkxlKGIuZCxhLmIpPjApe0lsYihhLmMsbmV3IHBTYihiLmMsYi5kLGEuZCkpO2EuYj1iLmR9fQpmdW5jdGlvbiBfRmMoYSl7YS5hPVNDKGNFLGlzZSwzMCxhLmIrMSwxNSwxKTthLmM9U0MoY0UsaXNlLDMwLGEuYiwxNSwxKTthLmQ9MH0KZnVuY3Rpb24gUjljKGEpe1A5YygpO0pEKGEubWYoKExnZCgpLGFnZCkpLDE4MSkuRWMoKG9qZCgpLGxqZCkpO2Eub2YoX2ZkLG51bGwpfQpmdW5jdGlvbiBQOWMoKXtQOWM9WmNiO005Yz1uZXcgVjljO085Yz1uZXcgWDljO045Yz11bigoTGdkKCksX2ZkKSxNOWMsR2ZkLE85Yyl9CmZ1bmN0aW9uIF9aYygpe19aYz1aY2I7WlpjPW5ldyBiJGMoJ0xFQUZfTlVNQkVSJywwKTskWmM9bmV3IGIkYygnTk9ERV9TSVpFJywxKX0KZnVuY3Rpb24gSnIoYSl7dmFyIGI7UWIoYSk7aWYoUkQoYSwyMDQpKXtiPUpEKGEsMjA0KTtyZXR1cm4gYn1yZXR1cm4gbmV3IEtyKGEpfQpmdW5jdGlvbiBWQmIoYSl7d2hpbGUoIWEuYSl7aWYoIXhDYihhLmMsbmV3IFpCYihhKSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIG1DZChhKXt2YXIgYjtpZighYS5hKXt0aHJvdyBzY2IobmV3IHJ1Yil9Yj1hLmE7YS5hPVp3ZChhLmEpO3JldHVybiBifQpmdW5jdGlvbiBqcWUoYSl7aWYoYS5iPD0wKXRocm93IHNjYihuZXcgcXViKTstLWEuYjthLmEtPWEuYy5jO3JldHVybiBqZmIoYS5hKX0KZnVuY3Rpb24ga0RkKGEsYil7aWYoYS5nPT1udWxsfHxiPj1hLmkpdGhyb3cgc2NiKG5ldyBYSWQoYixhLmkpKTtyZXR1cm4gYS5nW2JdfQpmdW5jdGlvbiBpWGQoYSxiLGMpe0ZDZChhLGMpO2lmKGMhPW51bGwmJiFhLmNrKGMpKXt0aHJvdyBzY2IobmV3IHBkYil9cmV0dXJuIGN9CmZ1bmN0aW9uIGpHYyhhLGIsYyl7dmFyIGQ7ZD10R2MoYSxiLGMpO2EuYj1uZXcgY0djKGQuYy5sZW5ndGgpO3JldHVybiBsR2MoYSxkKX0KZnVuY3Rpb24gWmkoYSxiKXt2YXIgYyxkO2Q9Yi9hLmMuUGQoKS5nYygpfDA7Yz1iJWEuYy5QZCgpLmdjKCk7cmV0dXJuIFNpKGEsZCxjKX0KZnVuY3Rpb24gTm1iKGEsYixjLGQpe3ZhciBlO2Q9KGpxYigpLCFkP2dxYjpkKTtlPWEuc2xpY2UoYixjKTtPbWIoZSxhLGIsYywtYixkKX0KZnVuY3Rpb24gZHFkKGEsYixjLGQsZSl7cmV0dXJuIGI8MD91cWQoYSxjLGQpOkpEKGMsNjkpLnRrKCkudmsoYSxhLmRpKCksYixkLGUpfQpmdW5jdGlvbiBWMmIoYSxiKXtyZXR1cm4gSGViKEJlYihNRChXTWIoYSwoSXFjKCksdHFjKSkpKSxCZWIoTUQoV01iKGIsdHFjKSkpKX0KZnVuY3Rpb24gZXpiKCl7ZXpiPVpjYjtkemI9b3MoKFN5YigpLFdDKE9DKHJMLDEpLEVyZSwzMDUsMCxbT3liLFB5YixReWIsUnliXSkpKX0KZnVuY3Rpb24gU3liKCl7U3liPVpjYjtPeWI9bmV3IFR5YignQWxsJywwKTtQeWI9bmV3IFl5YjtReWI9bmV3ICR5YjtSeWI9bmV3IGJ6Yn0KZnVuY3Rpb24gUEhiKCl7UEhiPVpjYjtOSGI9bmV3IFFIYihfdGUsMCk7TUhiPW5ldyBRSGIoWXRlLDEpO09IYj1uZXcgUUhiKGF1ZSwyKX0KZnVuY3Rpb24gc2llKCl7c2llPVpjYjtVdWQoKTtwaWU9S3NlO29pZT1Mc2U7cmllPW5ldyBLZWIoS3NlKTtxaWU9bmV3IEtlYihMc2UpfQpmdW5jdGlvbiBoVWIoKXtoVWI9WmNiO2dVYj1vcygoY1ViKCksV0MoT0MoaVAsMSksRXJlLDM4MSwwLFtiVWIsX1RiLCRUYixhVWJdKSkpfQpmdW5jdGlvbiBPN2IoKXtPN2I9WmNiO043Yj1vcygoSTdiKCksV0MoT0MoWVIsMSksRXJlLDM2NCwwLFtIN2IsRjdiLEc3YixFN2JdKSkpfQpmdW5jdGlvbiBDTGIoKXtDTGI9WmNiO0JMYj1vcygoeExiKCksV0MoT0MoSE4sMSksRXJlLDQwNiwwLFt3TGIsdExiLHVMYix2TGJdKSkpfQpmdW5jdGlvbiBHU2IoKXtHU2I9WmNiO0ZTYj1vcygoeFNiKCksV0MoT0MoVE8sMSksRXJlLDQwNSwwLFt0U2Isd1NiLHVTYix2U2JdKSkpfQpmdW5jdGlvbiBJZ2MoKXtJZ2M9WmNiO0hnYz1vcygoRGdjKCksV0MoT0ModlUsMSksRXJlLDQxMCwwLFt6Z2MsQWdjLEJnYyxDZ2NdKSkpfQpmdW5jdGlvbiBHeGMoKXtHeGM9WmNiO0Z4Yz1vcygoenhjKCksV0MoT0MoaFcsMSksRXJlLDIwMywwLFt4eGMseXhjLHd4Yyx2eGNdKSkpfQpmdW5jdGlvbiBzeWMoKXtzeWM9WmNiO3J5Yz1vcygobnljKCksV0MoT0Moa1csMSksRXJlLDI2NiwwLFtreWMsanljLGx5YyxteWNdKSkpfQpmdW5jdGlvbiBtb2MoKXttb2M9WmNiO2xvYz1uZXcgbm9jKHl2ZSwwKTtrb2M9bmV3IG5vYygnSU1QUk9WRV9TVFJBSUdIVE5FU1MnLDEpfQpmdW5jdGlvbiBNbGMoYSl7dmFyIGI7Zm9yKGI9YS5wKzE7YjxhLmMuYS5jLmxlbmd0aDsrK2Ipey0tSkQoTWxiKGEuYy5hLGIpLDkpLnB9fQpmdW5jdGlvbiBEVWQoYSl7dmFyIGI7aWYoYS5rbCgpKXtmb3IoYj1hLmktMTtiPj0wOy0tYil7bkRkKGEsYil9fXJldHVybiB0RGQoYSl9CmZ1bmN0aW9uIEJ4YihhKXt2YXIgYixjO2lmKCFhLmIpe3JldHVybiBudWxsfWM9YS5iO3doaWxlKGI9Yy5hWzBdKXtjPWJ9cmV0dXJuIGN9CmZ1bmN0aW9uIEN4YihhKXt2YXIgYixjO2lmKCFhLmIpe3JldHVybiBudWxsfWM9YS5iO3doaWxlKGI9Yy5hWzFdKXtjPWJ9cmV0dXJuIGN9CmZ1bmN0aW9uIGE2ZChhKXtpZihSRChhLDE3OSkpe3JldHVybiAnJytKRChhLDE3OSkuYX1yZXR1cm4gYT09bnVsbD9udWxsOmFkYihhKX0KZnVuY3Rpb24gYjZkKGEpe2lmKFJEKGEsMTc5KSl7cmV0dXJuICcnK0pEKGEsMTc5KS5hfXJldHVybiBhPT1udWxsP251bGw6YWRiKGEpfQpmdW5jdGlvbiBkRWIoYSxiKXtpZihiLmEpe3Rocm93IHNjYihuZXcgcXooRnRlKSl9TnJiKGEuYSxiKTtiLmE9YTshYS5qJiYoYS5qPWIpfQpmdW5jdGlvbiBIR2MoYSxiKXtnR2MoKTtyZXR1cm4gSWxiKGEsbmV3IHhvZChiLGpmYihiLmUuYy5sZW5ndGgrYi5nLmMubGVuZ3RoKSkpfQpmdW5jdGlvbiBKR2MoYSxiKXtnR2MoKTtyZXR1cm4gSWxiKGEsbmV3IHhvZChiLGpmYihiLmUuYy5sZW5ndGgrYi5nLmMubGVuZ3RoKSkpfQpmdW5jdGlvbiBDUmMoYSxiKXtyZXR1cm4gbmV3IE1vZChiLGxkZChvZGQoYi5lKSxiLmYuYSthLGIuZi5iK2EpLCh4ZGIoKSxmYWxzZSkpfQpmdW5jdGlvbiBYQyhhLGIpe1BDKGIpIT0xMCYmV0MocmIoYiksYi5QbSxiLl9fZWxlbWVudFR5cGVJZCQsUEMoYiksYSk7cmV0dXJuIGF9CmZ1bmN0aW9uIHNfYygpe3NfYz1aY2I7cl9jPW9zKChtX2MoKSxXQyhPQyhBXywxKSxFcmUsMzUxLDAsW2xfYyxqX2Msa19jLGlfY10pKSl9CmZ1bmN0aW9uIEFWYygpe0FWYz1aY2I7elZjPW9zKCh2VmMoKSxXQyhPQyh4JCwxKSxFcmUsMzUwLDAsW3VWYyxzVmMsdFZjLHJWY10pKSl9CmZ1bmN0aW9uIGhRYygpe2hRYz1aY2I7Z1FjPW9zKChfUGMoKSxXQyhPQyh2WiwxKSxFcmUsMzk2LDAsW1hQYyxZUGMsWlBjLCRQY10pKSl9CmZ1bmN0aW9uIEowYygpe0owYz1aY2I7STBjPW9zKChEMGMoKSxXQyhPQyhOXywxKSxFcmUsMzk4LDAsW0MwYyx6MGMsQjBjLEEwY10pKSl9CmZ1bmN0aW9uIERrZCgpe0RrZD1aY2I7Q2tkPW9zKCh5a2QoKSxXQyhPQyh6MiwxKSxFcmUsMzc4LDAsW3drZCx4a2QsdmtkLHVrZF0pKSl9CmZ1bmN0aW9uIGpoZCgpe2poZD1aY2I7aWhkPW9zKChlaGQoKSxXQyhPQyhqMiwxKSxFcmUsMjc1LDAsW2JoZCxhaGQsY2hkLGRoZF0pKSl9CmZ1bmN0aW9uIENoZCgpe0NoZD1aY2I7QmhkPW9zKCh4aGQoKSxXQyhPQyhsMiwxKSxFcmUsMjIwLDAsW3doZCx1aGQsdGhkLHZoZF0pKSl9CmZ1bmN0aW9uIHVpZCgpe3VpZD1aY2I7dGlkPW9zKChvaWQoKSxXQyhPQyhxMiwxKSxFcmUsMjg5LDAsW25pZCxraWQsbGlkLG1pZF0pKSl9CmZ1bmN0aW9uIHRtZCgpe3RtZD1aY2I7c21kPW9zKChvbWQoKSxXQyhPQyhKMiwxKSxFcmUsMzIxLDAsW25tZCxrbWQsbW1kLGxtZF0pKSl9CmZ1bmN0aW9uIGdvZCgpe2dvZD1aY2I7Zm9kPW9zKChib2QoKSxXQyhPQyhmMywxKSxFcmUsNDA0LDAsWyRuZCxfbmQsWm5kLGFvZF0pKSl9CmZ1bmN0aW9uIHEzYygpe3EzYz1aY2I7bjNjPW5ldyBzM2MoZEFlLDApO3AzYz1uZXcgczNjKGZ6ZSwxKTtvM2M9bmV3IHMzYyh5dmUsMil9CmZ1bmN0aW9uIGdBYihhLGIsYyxkLGUpe3REYihhKTt0RGIoYik7dERiKGMpO3REYihkKTt0RGIoZSk7cmV0dXJuIG5ldyByQWIoYSxiLGQpfQpmdW5jdGlvbiBXc2IoYSxiKXt2YXIgYztjPUpEKFNpYihhLmUsYiksMzkxKTtpZihjKXtndGIoYyk7cmV0dXJuIGMuZX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gUGxiKGEsYil7dmFyIGM7Yz1ObGIoYSxiLDApO2lmKGM9PS0xKXtyZXR1cm4gZmFsc2V9T2xiKGEsYyk7cmV0dXJuIHRydWV9CmZ1bmN0aW9uIEtCYihhLGIsYyl7dmFyIGQ7S0FiKGEpO2Q9bmV3IEhDYjtkLmE9YjthLmEuTmIobmV3IFBDYihkLGMpKTtyZXR1cm4gZC5hfQpmdW5jdGlvbiBVQWIoYSl7dmFyIGI7S0FiKGEpO2I9U0MoYUUsUnNlLDMwLDAsMTUsMSk7WXZiKGEuYSxuZXcgY0JiKGIpKTtyZXR1cm4gYn0KZnVuY3Rpb24geWMoYSl7dmFyIGI7aWYoIXhjKGEpKXt0aHJvdyBzY2IobmV3IHF1Yil9YS5lPTE7Yj1hLmQ7YS5kPW51bGw7cmV0dXJuIGJ9CmZ1bmN0aW9uIEdjYihhKXt2YXIgYjtpZihDY2IoYSkpe2I9MC1hO2lmKCFpc05hTihiKSl7cmV0dXJuIGJ9fXJldHVybiB3Y2IocEQoYSkpfQpmdW5jdGlvbiBObGIoYSxiLGMpe2Zvcig7YzxhLmMubGVuZ3RoOysrYyl7aWYodHViKGIsYS5jW2NdKSl7cmV0dXJuIGN9fXJldHVybiAtMX0KZnVuY3Rpb24gZGdjKGEpe3ZhciBiLGM7Yz1KRChNbGIoYS5qLDApLDExKTtiPUpEKFdNYihjLChJcWMoKSxrcWMpKSwxMSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIEp1KGEsYil7dmFyIGM7dGhpcy5mPWE7dGhpcy5iPWI7Yz1KRChOaWIoYS5iLGIpLDI2MCk7dGhpcy5jPSFjP251bGw6Yy5ifQpmdW5jdGlvbiBTZGMoKXtBZGMoKTt0aGlzLmI9bmV3IElyYjt0aGlzLmY9bmV3IElyYjt0aGlzLmc9bmV3IElyYjt0aGlzLmU9bmV3IElyYn0KZnVuY3Rpb24ga09kKGEpe1l5KHRoaXMpO3RoaXMuZz0hYT9udWxsOmR6KGEsYS5nZSgpKTt0aGlzLmY9YTskeSh0aGlzKTt0aGlzLmhlKCl9CmZ1bmN0aW9uIE9GZChhKXt2YXIgYjtiPWEuZ2ooKTtiIT1udWxsJiZhLmQhPS0xJiZKRChiLDkzKS50aChhKTshIWEuaSYmYS5pLmxqKCl9CmZ1bmN0aW9uIGxqYihhKXt4RGIoISFhLmMpO3FEYihhLmYuZyxhLmQpO2EuYy5RYigpO2EuYz1udWxsO2EuYj1qamIoYSk7YS5kPWEuZi5nfQpmdW5jdGlvbiBKX2QoYSl7aWYoIWEuYil7YS5iPW5ldyBOMGQoYSxnNixhKTshYS5hJiYoYS5hPW5ldyAkX2QoYSxhKSl9cmV0dXJuIGEuYn0KZnVuY3Rpb24gaWFlKGEsYil7dmFyIGMsZDtjPUpEKGIsNjc1KTtkPWMudGkoKTshZCYmYy53aShkPW5ldyBSYWUoYSxiKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIGphZShhLGIpe3ZhciBjLGQ7Yz1KRChiLDY3Nyk7ZD1jLlhrKCk7IWQmJmMuX2soZD1uZXcgY2JlKGEsYikpO3JldHVybiBkfQpmdW5jdGlvbiBvZGMoYSxiKXtqZGMoKTt2YXIgYyxkO2M9bmRjKGEpO2Q9bmRjKGIpO3JldHVybiAhIWMmJiEhZCYmIXJuYihjLmssZC5rKX0KZnVuY3Rpb24gXzhjKGEsYil7aWYoYjwwKXt0aHJvdyBzY2IobmV3IG1kYih3QmUrYikpfSQ4YyhhLGIrMSk7cmV0dXJuIE1sYihhLmosYil9CmZ1bmN0aW9uIE9iKGEsYixjLGQpe2lmKCFhKXt0aHJvdyBzY2IobmV3IFRlYihoYyhiLFdDKE9DKGFKLDEpLE5xZSwxLDUsW2MsZF0pKSkpfX0KZnVuY3Rpb24gVkRiKGEsYil7cmV0dXJuIHR1YihiLE1sYihhLmYsMCkpfHx0dWIoYixNbGIoYS5mLDEpKXx8dHViKGIsTWxiKGEuZiwyKSl9CmZ1bmN0aW9uIEtQYigpe0tQYj1aY2I7SVBiPW5ldyBMUGIoJ1hZJywwKTtIUGI9bmV3IExQYignWCcsMSk7SlBiPW5ldyBMUGIoJ1knLDIpfQpmdW5jdGlvbiB2eWMoKXt2eWM9WmNiO3R5Yz1uZXcgd3ljKCdJTlBVVF9PUkRFUicsMCk7dXljPW5ldyB3eWMoJ1BPUlRfREVHUkVFJywxKX0KZnVuY3Rpb24gR0liKCl7R0liPVpjYjtGSWI9bmV3IEhJYignVE9QJywwKTtFSWI9bmV3IEhJYihZdGUsMSk7REliPW5ldyBISWIoY3VlLDIpfQpmdW5jdGlvbiBKTGIoYSxiKXtJTGI9bmV3IHVNYjtHTGI9YjtITGI9YTtKRChITGIuYiw2OCk7TExiKEhMYixJTGIsbnVsbCk7S0xiKEhMYil9CmZ1bmN0aW9uIHJnYihhKXt2YXIgYixjO2M9YS5sZW5ndGg7Yj1TQyhfRCxVcmUsMzAsYywxNSwxKTtlZ2IoYSwwLGMsYiwwKTtyZXR1cm4gYn0KZnVuY3Rpb24gUmRiKGEpe1FkYigpO3ZhciBiLGM7Yj1hKzEyODtjPVBkYltiXTshYyYmKGM9UGRiW2JdPW5ldyBKZGIoYSkpO3JldHVybiBjfQpmdW5jdGlvbiBxdGIoYSl7cURiKGEuZC5hLmUuZyxhLmIpO3JEYihhLmMhPWEuZC5hLmQpO2EuYT1hLmM7YS5jPWEuYy5hO3JldHVybiBhLmF9CmZ1bmN0aW9uIE9uZChhKXsoIXRoaXMucT8ocG5iKCkscG5iKCksbm5iKTp0aGlzLnEpLnpjKCFhLnE/KHBuYigpLHBuYigpLG5uYik6YS5xKX0KZnVuY3Rpb24gQ3FkKGEpe3ZhciBiO2lmKCFhLktoKCkpe2I9VlRkKGEuemgoKSktYS5maSgpO2EuV2goKS5KayhiKX1yZXR1cm4gYS52aCgpfQpmdW5jdGlvbiB6cmQoYSl7dmFyIGI7Yj1LRChDcmQoYSwzMikpO2lmKGI9PW51bGwpe0FyZChhKTtiPUtEKENyZChhLDMyKSl9cmV0dXJuIGJ9CmZ1bmN0aW9uIGtxZChhLGIpe3ZhciBjO2M9V1RkKGEuZCxiKTtyZXR1cm4gYz49MD9ocWQoYSxjLHRydWUsdHJ1ZSk6dXFkKGEsYix0cnVlKX0KZnVuY3Rpb24gaXBkKGEsYil7YmpkKEpEKEpEKGEuZiwyNykubWYoKExnZCgpLFlmZCkpLDEwMCkpJiZJTGQoJHdkKEpEKGEuZiwyNykpLGIpfQpmdW5jdGlvbiBVeWQoYSxiKXtodGQoYSxiPT1udWxsfHxJZWIoKHREYihiKSxiKSl8fGlzTmFOKCh0RGIoYiksYikpPzA6KHREYihiKSxiKSl9CmZ1bmN0aW9uIFZ5ZChhLGIpe2l0ZChhLGI9PW51bGx8fEllYigodERiKGIpLGIpKXx8aXNOYU4oKHREYihiKSxiKSk/MDoodERiKGIpLGIpKX0KZnVuY3Rpb24gV3lkKGEsYil7Z3RkKGEsYj09bnVsbHx8SWViKCh0RGIoYiksYikpfHxpc05hTigodERiKGIpLGIpKT8wOih0RGIoYiksYikpfQpmdW5jdGlvbiBYeWQoYSxiKXtldGQoYSxiPT1udWxsfHxJZWIoKHREYihiKSxiKSl8fGlzTmFOKCh0RGIoYiksYikpPzA6KHREYihiKSxiKSl9CmZ1bmN0aW9uIENBKGEsYil7d2hpbGUoYlswXTxhLmxlbmd0aCYmaGdiKCcgXHRcclxuJyx3Z2IoX2ZiKGEsYlswXSkpKT49MCl7KytiWzBdfX0KZnVuY3Rpb24gbnBlKGEsYixjLGQpe29vZSgpO3BvZS5jYWxsKHRoaXMsMjYpO3RoaXMuYz1hO3RoaXMuYT1iO3RoaXMuZD1jO3RoaXMuYj1kfQpmdW5jdGlvbiBpX2QoYSxiLGMsZCxlLGYsZyl7a0dkLmNhbGwodGhpcyxiLGQsZSxmLGcpO2NfZCh0aGlzKTt0aGlzLmM9YTt0aGlzLmI9Y30KZnVuY3Rpb24gckRkKGEsYixjKXt2YXIgZDtkPWEuZ1tiXTtqRGQoYSxiLGEuV2koYixjKSk7YS5PaShiLGMsZCk7YS5LaSgpO3JldHVybiBkfQpmdW5jdGlvbiBDQ2QoYSxiKXt2YXIgYztjPWEuYmQoYik7aWYoYz49MCl7YS5lZChjKTtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19CmZ1bmN0aW9uIFRzYihhLGIpe3ZhciBjO2M9SkQoTmliKGEuZSxiKSwzOTEpO2lmKGMpe1ZzYihhLGMpO3JldHVybiBjLmV9cmV0dXJuIG51bGx9CmZ1bmN0aW9uIFJSZChhKXt2YXIgYjtpZihhLmQhPWEucil7Yj1wUmQoYSk7YS5lPSEhYiYmYi5paygpPT1jRmU7YS5kPWJ9cmV0dXJuIGEuZX0KZnVuY3Rpb24gdHIoYSxiKXt2YXIgYztRYihhKTtRYihiKTtjPWZhbHNlO3doaWxlKGIuT2IoKSl7Yz1jfGEuRWMoYi5QYigpKX1yZXR1cm4gY30KZnVuY3Rpb24gYXZiKGEpe3ZhciBiO2I9YS5iLmMubGVuZ3RoPT0wP251bGw6TWxiKGEuYiwwKTtiIT1udWxsJiZjdmIoYSwwKTtyZXR1cm4gYn0KZnVuY3Rpb24gREJiKGEsYil7dmFyIGMsZDtMQWIoYSk7ZD1uZXcgeUNiKGIsYS5hKTtjPW5ldyBYQmIoZCk7cmV0dXJuIG5ldyBSQmIoYSxjKX0KZnVuY3Rpb24gcXBjKCl7cXBjPVpjYjtvcGM9bmV3IHJwYyh5dmUsMCk7cHBjPW5ldyBycGMoJ1RPUCcsMSk7bnBjPW5ldyBycGMoY3VlLDIpfQpmdW5jdGlvbiBNU2IoKXtNU2I9WmNiO0pTYj1uZXcgaFRiO0tTYj1uZXcgbFRiO0hTYj1uZXcgcFRiO0lTYj1uZXcgdFRiO0xTYj1uZXcgeFRifQpmdW5jdGlvbiBQQyhhKXtyZXR1cm4gYS5fX2VsZW1lbnRUeXBlQ2F0ZWdvcnkkPT1udWxsPzEwOmEuX19lbGVtZW50VHlwZUNhdGVnb3J5JH0KZnVuY3Rpb24gclFjKGEsYixjKXtyZXR1cm4gcWRkKG5ldyBFZGQoYy5lLmErYy5mLmEvMixjLmUuYitjLmYuYi8yKSxhKT09KHREYihiKSxiKX0KZnVuY3Rpb24gSmRjKGEsYil7dmFyIGMsZCxlO2U9Yi5jLmk7Yz1KRChOaWIoYS5mLGUpLDYwKTtkPWMuZC5jLWMuZS5jO09kZChiLmEsZCwwKX0KZnVuY3Rpb24gJEZjKGEsYil7dmFyIGM7KythLmQ7KythLmNbYl07Yz1iKzE7d2hpbGUoYzxhLmEubGVuZ3RoKXsrK2EuYVtjXTtjKz1jJi1jfX0KZnVuY3Rpb24gTUEoYSxiLGMpe3ZhciBkLGU7ZD0xMDtmb3IoZT0wO2U8Yy0xO2UrKyl7YjxkJiYoYS5hKz0nMCcsYSk7ZCo9MTB9YS5hKz1ifQpmdW5jdGlvbiBBcWUoYSxiKXt2YXIgYztjPTA7d2hpbGUoYS5lIT1hLmkuZ2MoKSl7SkFkKGIsQUhkKGEpLGpmYihjKSk7YyE9SHFlJiYrK2N9fQpmdW5jdGlvbiBhQihhKXt2YXIgYixjO2I9YS82MHwwO2M9YSU2MDtpZihjPT0wKXtyZXR1cm4gJycrYn1yZXR1cm4gJycrYisnOicrKCcnK2MpfQpmdW5jdGlvbiBCQihkLGEpe3ZhciBiPWQuYVthXTt2YXIgYz0oekMoKSx5QylbdHlwZW9mIGJdO3JldHVybiBjP2MoYik6RkModHlwZW9mIGIpfQpmdW5jdGlvbiBweGMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBIcWU7Y2FzZSAxOnJldHVybiBMcmU7ZGVmYXVsdDpyZXR1cm4gMDt9fQpmdW5jdGlvbiB3RChhKXtpZihtRChhLChFRCgpLEREKSk8MCl7cmV0dXJuIC1pRChwRChhKSl9cmV0dXJuIGEubCthLm0qQ3NlK2EuaCpEc2V9CmZ1bmN0aW9uIEh1KGEpe2lmKCFhLmMpe3Rocm93IHNjYihuZXcgcXViKX1hLmU9YS5hPWEuYzthLmM9YS5jLmM7KythLmQ7cmV0dXJuIGEuYS5mfQpmdW5jdGlvbiBJdShhKXtpZighYS5lKXt0aHJvdyBzY2IobmV3IHF1Yil9YS5jPWEuYT1hLmU7YS5lPWEuZS5lOy0tYS5kO3JldHVybiBhLmEuZn0KZnVuY3Rpb24gQXJiKGEpe3ZhciBiOysrYS5hO2ZvcihiPWEuYy5hLmxlbmd0aDthLmE8YjsrK2EuYSl7aWYoYS5jLmJbYS5hXSl7cmV0dXJufX19CmZ1bmN0aW9uIFR6KGEpe3ZhciBiLGM7aWYoYS5hKXtjPW51bGw7ZG97Yj1hLmE7YS5hPW51bGw7Yz1YeihiLGMpfXdoaWxlKGEuYSk7YS5hPWN9fQpmdW5jdGlvbiBVeihhKXt2YXIgYixjO2lmKGEuYil7Yz1udWxsO2Rve2I9YS5iO2EuYj1udWxsO2M9WHooYixjKX13aGlsZShhLmIpO2EuYj1jfX0KZnVuY3Rpb24gdTZiKGEsYil7dmFyIGMsZDtkPWIuYztmb3IoYz1kKzE7Yzw9Yi5mO2MrKyl7YS5hW2NdPmEuYVtkXSYmKGQ9Yyl9cmV0dXJuIGR9CmZ1bmN0aW9uIGlmYyhhLGIpe3ZhciBjO2M9U3koYS5lLmMsYi5lLmMpO2lmKGM9PTApe3JldHVybiBIZWIoYS5lLmQsYi5lLmQpfXJldHVybiBjfQpmdW5jdGlvbiBzZ2IoYSxiKXtyZXR1cm4gYj09KGt1YigpLGt1YigpLGp1Yik/YS50b0xvY2FsZUxvd2VyQ2FzZSgpOmEudG9Mb3dlckNhc2UoKX0KZnVuY3Rpb24gTGJlKGEsYil7cmV0dXJuIFJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTA/bmV3IGxkZShiLGEpOm5ldyBpZGUoYixhKX0KZnVuY3Rpb24gTmJlKGEsYil7cmV0dXJuIFJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTA/bmV3IGxkZShiLGEpOm5ldyBpZGUoYixhKX0KZnVuY3Rpb24gSFFiKCl7SFFiPVpjYjtHUWI9b3MoKENRYigpLFdDKE9DKEFPLDEpLEVyZSwzNjAsMCxbeFFiLHlRYix6UWIsQVFiLEJRYl0pKSl9CmZ1bmN0aW9uIEhuYygpe0huYz1aY2I7R25jPW9zKCh6bmMoKSxXQyhPQyhRViwxKSxFcmUsMzQ0LDAsW3ZuYyx1bmMseG5jLHluYyx3bmNdKSkpfQpmdW5jdGlvbiBlaGMoKXtlaGM9WmNiO2RoYz1vcygoJGdjKCksV0MoT0MoRFUsMSksRXJlLDM2OCwwLFtXZ2MsWWdjLFpnYyxYZ2MsVmdjXSkpKX0KZnVuY3Rpb24gVXhjKCl7VXhjPVpjYjtUeGM9b3MoKE14YygpLFdDKE9DKGlXLDEpLEVyZSwzMjQsMCxbTHhjLEl4YyxKeGMsSHhjLEt4Y10pKSl9CmZ1bmN0aW9uIFRxYygpe1RxYz1aY2I7U3FjPW9zKChPcWMoKSxXQyhPQyhfViwxKSxFcmUsMTcxLDAsW05xYyxKcWMsS3FjLExxYyxNcWNdKSkpfQpmdW5jdGlvbiBwWmMoKXtwWmM9WmNiO29aYz1vcygoalpjKCksV0MoT0MobF8sMSksRXJlLDM2MSwwLFtoWmMsZVpjLGlaYyxmWmMsZ1pjXSkpKX0KZnVuY3Rpb24gTjRjKCl7TjRjPVpjYjtNNGM9b3MoKEk0YygpLFdDKE9DKG4wLDEpLEVyZSwzNjYsMCxbRTRjLEQ0YyxHNGMsRjRjLEg0Y10pKSl9CmZ1bmN0aW9uIHE2Yygpe3E2Yz1aY2I7cDZjPW9zKChsNmMoKSxXQyhPQyhGMCwxKSxFcmUsMzI1LDAsW2c2YyxoNmMsazZjLGk2YyxqNmNdKSkpfQpmdW5jdGlvbiBfZ2QoKXtfZ2Q9WmNiOyRnZD1vcygoVGdkKCksV0MoT0MoaTIsMSksRXJlLDg2LDAsW1JnZCxRZ2QsUGdkLE9nZCxTZ2RdKSkpfQpmdW5jdGlvbiAkamQoKXskamQ9WmNiO1pqZD1vcygoUmpkKCksV0MoT0ModjIsMSksQXZlLDY0LDAsW1BqZCx4amQsd2pkLE9qZCxRamRdKSkpfQpmdW5jdGlvbiBWaWQoKXtWaWQ9WmNiO1VpZD1vcygoUWlkKCksV0MoT0MoczIsMSksRXJlLDI1NSwwLFtOaWQsUGlkLExpZCxNaWQsT2lkXSkpKX0KZnVuY3Rpb24gcWNkKCl7cWNkPVpjYjtwY2Q9b3MoKGxjZCgpLFdDKE9DKFYxLDEpLEVyZSwxNzAsMCxbamNkLGljZCxnY2Qsa2NkLGhjZF0pKSl9CmZ1bmN0aW9uIEtuYygpe0tuYz1aY2I7SW5jPW5ldyBMbmMoJ1JFQURJTkdfRElSRUNUSU9OJywwKTtKbmM9bmV3IExuYygnUk9UQVRJT04nLDEpfQpmdW5jdGlvbiBiT2IoKXtiT2I9WmNiO19OYj1uZXcgY09iKCdFQURFUycsMCk7YU9iPW5ldyBjT2IoJ0ZSVUNIVEVSTUFOX1JFSU5HT0xEJywxKX0KZnVuY3Rpb24gRUQoKXtFRD1aY2I7QUQ9X0MoenNlLHpzZSw1MjQyODcpO0JEPV9DKDAsMCxCc2UpO0NEPVpDKDEpO1pDKDIpO0REPVpDKDApfQpmdW5jdGlvbiB6OGMoYSxiKXt2YXIgYztjPUpEKE5pYihhLmEsYiksMTQ4KTtpZighYyl7Yz1uZXcgJE1iO1FpYihhLmEsYixjKX1yZXR1cm4gY30KZnVuY3Rpb24gdWxjKGEpe3ZhciBiO2I9SkQoV01iKGEsKElxYygpLEdwYykpLDMxNCk7aWYoYil7cmV0dXJuIGIuYT09YX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIHZsYyhhKXt2YXIgYjtiPUpEKFdNYihhLChJcWMoKSxHcGMpKSwzMTQpO2lmKGIpe3JldHVybiBiLmk9PWF9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBGdmIoYSxiKXt0RGIoYik7RXZiKGEpO2lmKGEuZC5PYigpKXtiLkFkKGEuZC5QYigpKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIFh5KGEpe2lmKHZjYihhLEhxZSk+MCl7cmV0dXJuIEhxZX1pZih2Y2IoYSxMcmUpPDApe3JldHVybiBMcmV9cmV0dXJuIFBjYihhKX0KZnVuY3Rpb24gT3YoYSl7aWYoYTwzKXtiayhhLEJyZSk7cmV0dXJuIGErMX1pZihhPENyZSl7cmV0dXJuIFlEKGEvMC43NSsxKX1yZXR1cm4gSHFlfQpmdW5jdGlvbiBrQyhhLGIsYyl7dmFyIGQ7aWYoYj09bnVsbCl7dGhyb3cgc2NiKG5ldyBFZmIpfWQ9aUMoYSxiKTtsQyhhLGIsYyk7cmV0dXJuIGR9CmZ1bmN0aW9uIHBfYihhLGIsYyl7dmFyIGQsZTtmb3IoZT1uZXcgcm1iKGMpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPXBtYihlKTtvX2IoYSxiLGQpfX0KZnVuY3Rpb24gb0xjKGEsYixjKXt2YXIgZDtkPWEuYS5lW0pEKGIuYSw5KS5wXS1hLmEuZVtKRChjLmEsOSkucF07cmV0dXJuIFlEKENmYihkKSl9CmZ1bmN0aW9uIFFUZChhLGIpe3ZhciBjO2M9KGEuaT09bnVsbCYmTVRkKGEpLGEuaSk7cmV0dXJuIGI+PTAmJmI8Yy5sZW5ndGg/Y1tiXTpudWxsfQpmdW5jdGlvbiBvbGQoYSxiKXt2YXIgYztjPWI+MD9iLTE6YjtyZXR1cm4gc2xkKHRsZCh1bGQodmxkKG5ldyB3bGQsYyksYS5uKSxhLmopLGEuayl9CmZ1bmN0aW9uIFJ2ZChhKXt2YXIgYixjO2M9KGI9bmV3IExfZCxiKTt0Q2QoKCFhLnEmJihhLnE9bmV3IFgwZChrNixhLDExLDEwKSksYS5xKSxjKX0KZnVuY3Rpb24gZlRiKGEpe3RoaXMuZz1hO3RoaXMuZj1uZXcgVWxiO3RoaXMuYT0kd25kLk1hdGgubWluKHRoaXMuZy5jLmMsdGhpcy5nLmQuYyl9CmZ1bmN0aW9uIGNFYihhKXt0aGlzLmI9bmV3IFVsYjt0aGlzLmE9bmV3IFVsYjt0aGlzLmM9bmV3IFVsYjt0aGlzLmQ9bmV3IFVsYjt0aGlzLmU9YX0KZnVuY3Rpb24gZEliKGEsYixjKXthSGIuY2FsbCh0aGlzKTtWSGIodGhpcyk7dGhpcy5hPWE7dGhpcy5jPWM7dGhpcy5iPWIuZDt0aGlzLmY9Yi5lfQpmdW5jdGlvbiB5ZChhKXt0aGlzLmQ9YTt0aGlzLmM9YS5jLnZjKCkuSmMoKTt0aGlzLmI9bnVsbDt0aGlzLmE9bnVsbDt0aGlzLmU9KHZzKCksdXMpfQpmdW5jdGlvbiB3RGQoYSl7aWYoYTwwKXt0aHJvdyBzY2IobmV3IFRlYignSWxsZWdhbCBDYXBhY2l0eTogJythKSl9dGhpcy5nPXRoaXMuWmkoYSl9CmZ1bmN0aW9uIEdpYygpe0RpYygpO3JldHVybiBXQyhPQyhUVSwxKSxFcmUsMjcyLDAsW3dpYyx6aWMsdmljLENpYyx5aWMseGljLEJpYyxBaWNdKX0KZnVuY3Rpb24gR1liKCl7RFliKCk7cmV0dXJuIFdDKE9DKFBQLDEpLEVyZSwyNDcsMCxbQVliLHlZYix3WWIsQlliLHhZYix2WWIsQ1liLHpZYl0pfQpmdW5jdGlvbiBFQmQoKXtCQmQoKTtyZXR1cm4gV0MoT0MoTDQsMSksRXJlLDI0MywwLFtBQmQseEJkLHlCZCx3QmQsekJkLHVCZCx0QmQsdkJkXSl9CmZ1bmN0aW9uIENjZCgpe3pjZCgpO3JldHVybiBXQyhPQyhXMSwxKSxFcmUsMjgyLDAsW3ljZCxyY2QsdmNkLHhjZCxzY2QsdGNkLHVjZCx3Y2RdKX0KZnVuY3Rpb24gYVdjKGEsYil7VVZjKCk7cmV0dXJuIC0kZWIoSkQoV01iKGEsKGtWYygpLFpVYykpLDE3KS5hLEpEKFdNYihiLFpVYyksMTcpLmEpfQpmdW5jdGlvbiB0byhhLGIpe3JldHVybiAhIURvKGEsYixQY2IoRmNiKHlyZSxoZmIoUGNiKEZjYihiPT1udWxsPzA6dGIoYiksenJlKSksMTUpKSkpfQpmdW5jdGlvbiBmZWIoYSl7cmV0dXJuICgoYS5pJjIpIT0wPydpbnRlcmZhY2UgJzooYS5pJjEpIT0wPycnOidjbGFzcyAnKSsoY2ViKGEpLGEubyl9CmZ1bmN0aW9uIE9CYihhLGIpe3ZhciBjO0xBYihhKTtjPW5ldyBiQ2IoYSxhLmEueGQoKSxhLmEud2QoKXw0LGIpO3JldHVybiBuZXcgUkJiKGEsYyl9CmZ1bmN0aW9uIGplKGEsYil7dmFyIGMsZDtjPUpEKFR2KGEuZCxiKSwxNik7aWYoIWMpe3JldHVybiBudWxsfWQ9YjtyZXR1cm4gYS5lLnBjKGQsYyl9CmZ1bmN0aW9uIF82YihhLGIpe3ZhciBjLGQ7Zm9yKGQ9YS5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDcyKTtaTWIoYywoSXFjKCksY3FjKSxiKX19CmZ1bmN0aW9uIFg1YihhKXt2YXIgYjtiPUJlYihNRChXTWIoYSwoQndjKCksRnVjKSkpKTtpZihiPDApe2I9MDtaTWIoYSxGdWMsYil9cmV0dXJuIGJ9CmZ1bmN0aW9uIE9XYihhLGIpe2JqZChKRChXTWIoSkQoYS5lLDkpLChCd2MoKSxFdmMpKSwxMDApKSYmKHBuYigpLFNsYihKRChhLmUsOSkuaixiKSl9CmZ1bmN0aW9uIGMzYyhhLGIpe21zZChhLChoMWMoKSxkMWMpLGIuZik7bXNkKGEsYTFjLGIuZSk7bXNkKGEsYzFjLGIuZCk7bXNkKGEsXzBjLGIuYyl9CmZ1bmN0aW9uIFd0YihhKXt2YXIgYjt4RGIoISFhLmMpO2I9YS5jLmE7S3RiKGEuZCxhLmMpO2EuYj09YS5jPyhhLmI9Yik6LS1hLmE7YS5jPW51bGx9CmZ1bmN0aW9uIEhqYyhhKXthLmE+PS0wLjAxJiZhLmE8PWZ1ZSYmKGEuYT0wKTthLmI+PS0wLjAxJiZhLmI8PWZ1ZSYmKGEuYj0wKTtyZXR1cm4gYX0KZnVuY3Rpb24gVWNkKGEpe0ljZCgpO3ZhciBiLGM7Yz1GemU7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7YVtiXT5jJiYoYz1hW2JdKX1yZXR1cm4gY30KZnVuY3Rpb24gRHFkKGEsYil7dmFyIGM7Yz1SVGQoYS56aCgpLGIpO2lmKCFjKXt0aHJvdyBzY2IobmV3IFRlYihMQ2UrYitPQ2UpKX1yZXR1cm4gY30KZnVuY3Rpb24ga0NkKGEsYil7dmFyIGM7Yz1hO3doaWxlKFp3ZChjKSl7Yz1ad2QoYyk7aWYoYz09Yil7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gdHJiKGEsYil7aWYoISFiJiZhLmJbYi5nXT09Yil7VkMoYS5iLGIuZyxudWxsKTstLWEuYztyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIEt0YihhLGIpe3ZhciBjO2M9Yi5jO2IuYS5iPWIuYjtiLmIuYT1iLmE7Yi5hPWIuYj1udWxsO2IuYz1udWxsOy0tYS5iO3JldHVybiBjfQpmdW5jdGlvbiBMbGIoYSxiKXt2YXIgYyxkLGUsZjt0RGIoYik7Zm9yKGQ9YS5jLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtiLkFkKGMpfX0KZnVuY3Rpb24gZXgoYSxiKXt2YXIgYyxkLGU7ZD1iLmEuamQoKTtjPUpEKGIuYS5rZCgpLDE2KS5nYygpO2ZvcihlPTA7ZTxjO2UrKyl7YS5BZChkKX19CmZ1bmN0aW9uIGJjYyhhLGIsYyl7dmFyIGQ7ZD0kd25kLk1hdGgubWF4KDAsYS5iLzItMC41KTtYYmMoYyxkLDEpO0lsYihiLG5ldyBrY2MoYyxkKSl9CmZ1bmN0aW9uIG5iZShhLGIsYyxkKXt2YXIgZTthLmo9LTE7TkdkKGEsQmJlKGEsYixjKSwoSWZlKCksZT1KRChiLDY5KS5zaygpLGUudWwoZCkpKX0KZnVuY3Rpb24gQVZiKGEsYixjLGQsZSxmKXt2YXIgZztnPUNWYihkKTtnV2IoZyxlKTtoV2IoZyxmKTtSYyhhLmEsZCxuZXcgVFZiKGcsYixjLmYpKX0KZnVuY3Rpb24gQURjKGEsYil7dmFyIGMsZCxlLGY7Zm9yKGQ9YS5kLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtzRGMoYS5nLGMpLmE9Yn19CmZ1bmN0aW9uIEVDYyhhLGIsYyl7dmFyIGQsZSxmO2U9YltjXTtmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKXtmPWVbZF07YS5lW2YuYy5wXVtmLnBdPWR9fQpmdW5jdGlvbiBNamMoYSl7dmFyIGI7Zm9yKGI9MDtiPGEuYy5sZW5ndGg7YisrKXsoc0RiKGIsYS5jLmxlbmd0aCksSkQoYS5jW2JdLDExKSkucD1ifX0KZnVuY3Rpb24gUGpjKGEpe3ZhciBiLGM7Yj1hLmEuZC5qO2M9YS5jLmQuajt3aGlsZShiIT1jKXtvcmIoYS5iLGIpO2I9VWpkKGIpfW9yYihhLmIsYil9CmZ1bmN0aW9uIHVkZChhKXt2YXIgYjtiPSR3bmQuTWF0aC5zcXJ0KGEuYSphLmErYS5iKmEuYik7aWYoYj4wKXthLmEvPWI7YS5iLz1ifXJldHVybiBhfQpmdW5jdGlvbiB1S2MoYSxiLGMpe3ZhciBkLGU7ZD1iO2Rve2U9QmViKGEucFtkLnBdKStjO2EucFtkLnBdPWU7ZD1hLmFbZC5wXX13aGlsZShkIT1iKX0KZnVuY3Rpb24gWnZiKGEsYil7aWYoMD5hfHxhPmIpe3Rocm93IHNjYihuZXcgb2RiKCdmcm9tSW5kZXg6IDAsIHRvSW5kZXg6ICcrYStrdGUrYikpfX0KZnVuY3Rpb24gbkRkKGEsYil7aWYoYS5nPT1udWxsfHxiPj1hLmkpdGhyb3cgc2NiKG5ldyBYSWQoYixhLmkpKTtyZXR1cm4gYS5UaShiLGEuZ1tiXSl9CmZ1bmN0aW9uIG5oZCgpe25oZD1aY2I7a2hkPW5ldyBvaGQoWXRlLDApO2xoZD1uZXcgb2hkKCdIRUFEJywxKTttaGQ9bmV3IG9oZCgnVEFJTCcsMil9CmZ1bmN0aW9uIGlIYigpe2lIYj1aY2I7ZkhiPW5ldyBqSGIoJ0JFR0lOJywwKTtnSGI9bmV3IGpIYihZdGUsMSk7aEhiPW5ldyBqSGIoJ0VORCcsMil9CmZ1bmN0aW9uIHZIYigpe3ZIYj1aY2I7dUhiPShpSGIoKSxXQyhPQyhoTiwxKSxFcmUsMjM2LDAsW2ZIYixnSGIsaEhiXSkpLmxlbmd0aDt0SGI9dUhifQpmdW5jdGlvbiBWSGIoYSl7YS5iPShQSGIoKSxNSGIpO2EuZj0oR0liKCksRUliKTthLmQ9KGJrKDIsRHJlKSxuZXcgVmxiKDIpKTthLmU9bmV3IENkZH0KZnVuY3Rpb24gaG1kKGEpe3RoaXMuYj0oUWIoYSksbmV3IFdsYihhKSk7dGhpcy5hPW5ldyBVbGI7dGhpcy5kPW5ldyBVbGI7dGhpcy5lPW5ldyBDZGR9CmZ1bmN0aW9uIFdTZChhKXt2YXIgYjtpZihhLncpe3JldHVybiBhLnd9ZWxzZXtiPVhTZChhKTshIWImJiFiLlJoKCkmJihhLnc9Yik7cmV0dXJuIGJ9fQpmdW5jdGlvbiBfNWQoYSl7dmFyIGI7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9ZWxzZXtiPUpEKGEsMTk1KTtyZXR1cm4gV3VkKGIsYi5sZW5ndGgpfX0KZnVuY3Rpb24gS0QoYSl7dmFyIGI7QkRiKGE9PW51bGx8fEFycmF5LmlzQXJyYXkoYSkmJihiPVBDKGEpLCEoYj49MTQmJmI8PTE2KSkpO3JldHVybiBhfQpmdW5jdGlvbiBMUWIoYSxiKXt2YXIgYztjPUJkZChvZGQoSkQoTmliKGEuZyxiKSw4KSksYmRkKEpEKE5pYihhLmYsYiksNDU2KS5iKSk7cmV0dXJuIGN9CmZ1bmN0aW9uICRjYihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShkLGFyZ3VtZW50cyl9O2IuYXBwbHkoZCxjKTtyZXR1cm4gZH0KZnVuY3Rpb24gRGhjKGEsYil7amhjKCk7cmV0dXJuICRlYihhLmIuYy5sZW5ndGgtYS5lLmMubGVuZ3RoLGIuYi5jLmxlbmd0aC1iLmUuYy5sZW5ndGgpfQpmdW5jdGlvbiB3byhhLGIpe3JldHVybiBXdihDbyhhLGIsUGNiKEZjYih5cmUsaGZiKFBjYihGY2IoYj09bnVsbD8wOnRiKGIpLHpyZSkpLDE1KSkpKSl9CmZ1bmN0aW9uIHFFYihhLGIpe3JldHVybiBSeSgpLFZ5KEtyZSksJHduZC5NYXRoLmFicyhhLWIpPD1LcmV8fGE9PWJ8fGlzTmFOKGEpJiZpc05hTihiKX0KZnVuY3Rpb24gVHkoYSxiKXtSeSgpO1Z5KEtyZSk7cmV0dXJuICR3bmQuTWF0aC5hYnMoYS1iKTw9S3JlfHxhPT1ifHxpc05hTihhKSYmaXNOYU4oYil9CmZ1bmN0aW9uIHVuYihhLGIpe3BuYigpO3ZhciBjLGQ7ZD1uZXcgVWxiO2ZvcihjPTA7YzxhOysrYyl7WUNiKGQuYyxiKX1yZXR1cm4gbmV3IFpwYihkKX0KZnVuY3Rpb24gTUJiKGEpe0xBYihhKTt5RGIodHJ1ZSwnbiBtYXkgbm90IGJlIG5lZ2F0aXZlJyk7cmV0dXJuIG5ldyBSQmIoYSxuZXcgQ0NiKGEuYSkpfQpmdW5jdGlvbiBFV2MoKXtFV2M9WmNiO0RXYz1COWMoQjljKEI5YyhHOWMobmV3IEo5YywoX1BjKCksJFBjKSksKFpTYygpLFRTYykpLE9TYyksU1NjKX0KZnVuY3Rpb24gVVZjKCl7VVZjPVpjYjtUVmM9QjljKEI5YyhCOWMoRzljKG5ldyBKOWMsKF9QYygpLFlQYykpLChaU2MoKSxZU2MpKSxSU2MpLFZTYyl9CmZ1bmN0aW9uIGpvYygpe2pvYz1aY2I7aW9jPW9zKChkb2MoKSxXQyhPQyhUViwxKSxFcmUsMjgxLDAsWyRuYyxabmMsYW9jLF9uYyxjb2MsYm9jXSkpKX0KZnVuY3Rpb24gUG9jKCl7UG9jPVpjYjtPb2M9b3MoKEtvYygpLFdDKE9DKFdWLDEpLEVyZSwyODAsMCxbSW9jLEZvYyxKb2MsSG9jLEdvYyxFb2NdKSkpfQpmdW5jdGlvbiBEb2MoKXtEb2M9WmNiO0NvYz1vcygoeW9jKCksV0MoT0MoVlYsMSksRXJlLDI3OSwwLFt2b2MsdW9jLHhvYyx0b2Msd29jLHNvY10pKSl9CmZ1bmN0aW9uIFNtYygpe1NtYz1aY2I7Um1jPW9zKChObWMoKSxXQyhPQyhNViwxKSxFcmUsMjMxLDAsW0ptYyxMbWMsSW1jLEttYyxNbWMsSG1jXSkpKX0KZnVuY3Rpb24gaGVkKCl7aGVkPVpjYjtnZWQ9b3MoKGNlZCgpLFdDKE9DKGQyLDEpLEVyZSwyNTQsMCxbWWRkLF9kZCxhZWQsYmVkLFpkZCwkZGRdKSkpfQpmdW5jdGlvbiBNZWQoKXtNZWQ9WmNiO0xlZD1vcygoSGVkKCksV0MoT0MoZzIsMSksRXJlLDI5NiwwLFtHZWQsRmVkLEVlZCxDZWQsQmVkLERlZF0pKSl9CmZ1bmN0aW9uIE9oZCgpe09oZD1aY2I7TmhkPW9zKChKaGQoKSxXQyhPQyhtMiwxKSxFcmUsMzIyLDAsW0hoZCxGaGQsSWhkLERoZCxHaGQsRWhkXSkpKX0KZnVuY3Rpb24gaGpkKCl7aGpkPVpjYjtnamQ9b3MoKGFqZCgpLFdDKE9DKHQyLDEpLEVyZSwxMDAsMCxbX2lkLCRpZCxaaWQsV2lkLFlpZCxYaWRdKSkpfQpmdW5jdGlvbiB2amQoKXt2amQ9WmNiO3VqZD1vcygob2pkKCksV0MoT0ModTIsMSksRXJlLDI3NywwLFttamQsa2pkLGxqZCxqamQsaWpkLG5qZF0pKSl9CmZ1bmN0aW9uIElpZCgpe0VpZCgpO3JldHVybiBXQyhPQyhyMiwxKSxFcmUsOTQsMCxbd2lkLHZpZCx5aWQsRGlkLENpZCxCaWQsemlkLEFpZCx4aWRdKX0KZnVuY3Rpb24gb2tkKCl7b2tkPVpjYjtsa2Q9bmV3IHBrZChwQ2UsMCk7bWtkPW5ldyBwa2QoJ1BBUkVOVCcsMSk7bmtkPW5ldyBwa2QoJ1JPT1QnLDIpfQpmdW5jdGlvbiB1bGQoYSxiKXthLm49YjtpZihhLm4pe2EuZj1uZXcgVWxiO2EuZT1uZXcgVWxifWVsc2V7YS5mPW51bGw7YS5lPW51bGx9cmV0dXJuIGF9CmZ1bmN0aW9uIGV0ZChhLGIpe3ZhciBjO2M9YS5mO2EuZj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGVfZChhLDMsYyxhLmYpKX0KZnVuY3Rpb24gZ3RkKGEsYil7dmFyIGM7Yz1hLmc7YS5nPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZV9kKGEsNCxjLGEuZykpfQpmdW5jdGlvbiBodGQoYSxiKXt2YXIgYztjPWEuaTthLmk9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBlX2QoYSw1LGMsYS5pKSl9CmZ1bmN0aW9uIGl0ZChhLGIpe3ZhciBjO2M9YS5qO2Euaj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGVfZChhLDYsYyxhLmopKX0KZnVuY3Rpb24gcXVkKGEsYil7dmFyIGM7Yz1hLmo7YS5qPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZV9kKGEsMSxjLGEuaikpfQpmdW5jdGlvbiBBc2QoYSxiKXt2YXIgYztjPWEuYjthLmI9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBlX2QoYSwxLGMsYS5iKSl9CmZ1bmN0aW9uIGp1ZChhLGIpe3ZhciBjO2M9YS5iO2EuYj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGVfZChhLDMsYyxhLmIpKX0KZnVuY3Rpb24ga3VkKGEsYil7dmFyIGM7Yz1hLmM7YS5jPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZV9kKGEsNCxjLGEuYykpfQpmdW5jdGlvbiBydWQoYSxiKXt2YXIgYztjPWEuazthLms9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBlX2QoYSwyLGMsYS5rKSl9CmZ1bmN0aW9uIHpzZChhLGIpe3ZhciBjO2M9YS5hO2EuYT1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGVfZChhLDAsYyxhLmEpKX0KZnVuY3Rpb24gdFJkKGEsYil7dmFyIGM7Yz1hLnM7YS5zPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZl9kKGEsNCxjLGEucykpfQpmdW5jdGlvbiB3UmQoYSxiKXt2YXIgYztjPWEudDthLnQ9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBmX2QoYSw1LGMsYS50KSl9CmZ1bmN0aW9uIGpaZChhLGIpe3ZhciBjO2M9YS5kO2EuZD1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGZfZChhLDIsYyxhLmQpKX0KZnVuY3Rpb24gVVNkKGEsYil7dmFyIGM7Yz1hLkY7YS5GPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSw1LGMsYikpfQpmdW5jdGlvbiBHWmQoYSxiKXt2YXIgYyxkO2Q9YS5hO2M9SFpkKGEsYixudWxsKTtkIT1iJiYhYS5lJiYoYz1KWmQoYSxiLGMpKTshIWMmJmMubGooKX0KZnVuY3Rpb24gZUNkKGEsYil7dmFyIGMsZCxlO2M9KGQ9KEhwZCgpLGU9bmV3IEx3ZCxlKSwhIWImJkl3ZChkLGIpLGQpO0p3ZChjLGEpO3JldHVybiBjfQpmdW5jdGlvbiBmemQoYSxiLGMpe3ZhciBkO2Q9WXhkKGMpO1FpYihhLmMsZCxiKTtRaWIoYS5kLGIsYyk7UWliKGEuZSxiLE90ZChiKSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIFp4ZChhLGIpe3ZhciBjLGQ7Yz1iIGluIGEuYTtpZihjKXtkPWlDKGEsYikucGUoKTtpZihkKXtyZXR1cm4gZC5hfX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gd2ViKGEsYil7dmFyIGM7aWYoIWEpe3JldHVybn1iLm49YTt2YXIgZD1xZWIoYik7aWYoIWQpe1hjYlthXT1bYl07cmV0dXJufWQuT209Yn0KZnVuY3Rpb24gRVVkKGEsYixjKXtGQ2QoYSxjKTtpZighYS5obCgpJiZjIT1udWxsJiYhYS5jayhjKSl7dGhyb3cgc2NiKG5ldyBwZGIpfXJldHVybiBjfQpmdW5jdGlvbiBzcyhhLGIpe3ZhciBjO3REYihiKTtjPWFbJzonK2JdO2xEYighIWMsJ0VudW0gY29uc3RhbnQgdW5kZWZpbmVkOiAnK2IpO3JldHVybiBjfQpmdW5jdGlvbiBrZWIoYSxiLGMsZCxlLGYpe3ZhciBnO2c9aWViKGEsYik7d2ViKGMsZyk7Zy5pPWU/ODowO2cuZj1kO2cuZT1lO2cuZz1mO3JldHVybiBnfQpmdW5jdGlvbiBrX2QoYSxiLGMsZCxlKXt0aGlzLmQ9Yjt0aGlzLms9ZDt0aGlzLmY9ZTt0aGlzLm89LTE7dGhpcy5wPTE7dGhpcy5jPWE7dGhpcy5hPWN9CmZ1bmN0aW9uIG1fZChhLGIsYyxkLGUpe3RoaXMuZD1iO3RoaXMuaz1kO3RoaXMuZj1lO3RoaXMubz0tMTt0aGlzLnA9Mjt0aGlzLmM9YTt0aGlzLmE9Y30KZnVuY3Rpb24gdV9kKGEsYixjLGQsZSl7dGhpcy5kPWI7dGhpcy5rPWQ7dGhpcy5mPWU7dGhpcy5vPS0xO3RoaXMucD02O3RoaXMuYz1hO3RoaXMuYT1jfQpmdW5jdGlvbiB6X2QoYSxiLGMsZCxlKXt0aGlzLmQ9Yjt0aGlzLms9ZDt0aGlzLmY9ZTt0aGlzLm89LTE7dGhpcy5wPTc7dGhpcy5jPWE7dGhpcy5hPWN9CmZ1bmN0aW9uIHFfZChhLGIsYyxkLGUpe3RoaXMuZD1iO3RoaXMuaj1kO3RoaXMuZT1lO3RoaXMubz0tMTt0aGlzLnA9NDt0aGlzLmM9YTt0aGlzLmE9Y30KZnVuY3Rpb24gaEViKGEsYil7dmFyIGMsZCxlLGY7Zm9yKGQ9YixlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07ZEViKGEuYSxjKX1yZXR1cm4gYX0KZnVuY3Rpb24geWwoYSl7dmFyIGIsYyxkLGU7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07UWIoYil9cmV0dXJuIG5ldyBFbChhKX0KZnVuY3Rpb24gaE5iKGEpe3ZhciBiO2I9QmRkKG9kZChhLmQuZCksYS5jLmQpO0xjZChiLGEuYy5lLmEsYS5jLmUuYik7cmV0dXJuIG1kZChiLGEuYy5kKX0KZnVuY3Rpb24gaU5iKGEpe3ZhciBiO2I9QmRkKG9kZChhLmMuZCksYS5kLmQpO0xjZChiLGEuZC5lLmEsYS5kLmUuYik7cmV0dXJuIG1kZChiLGEuZC5kKX0KZnVuY3Rpb24gYUEoYSl7dmFyIGI9L2Z1bmN0aW9uKD86XHMrKFtcdyRdKykpP1xzKlwoLzt2YXIgYz1iLmV4ZWMoYSk7cmV0dXJuIGMmJmNbMV18fFJyZX0KZnVuY3Rpb24gZklkKGEsYil7dmFyIGM7Yz1KRChOaWIoKGlOZCgpLGhOZCksYSksNTgpO3JldHVybiBjP2MuZGsoYik6U0MoYUosTnFlLDEsYiw1LDEpfQpmdW5jdGlvbiB5bWIoYSxiLGMpe3ZhciBkLGU7ZT1hLmxlbmd0aDtkPSR3bmQuTWF0aC5taW4oYyxlKTtVQ2IoYSwwLGIsMCxkLHRydWUpO3JldHVybiBifQpmdW5jdGlvbiBzS2MoYSxiKXt2YXIgYyxkO2M9YS5jO2Q9Yi5lW2EucF07aWYoZD4wKXtyZXR1cm4gSkQoTWxiKGMuYSxkLTEpLDkpfXJldHVybiBudWxsfQpmdW5jdGlvbiBTNGMoYSxiKXthLmI9JHduZC5NYXRoLm1heChhLmIsYi5kKTthLmUrPWIucisoYS5hLmMubGVuZ3RoPT0wPzA6YS5jKTtJbGIoYS5hLGIpfQpmdW5jdGlvbiBBbGIoYSl7eERiKGEuYz49MCk7aWYoaWxiKGEuZCxhLmMpPDApe2EuYT1hLmEtMSZhLmQuYS5sZW5ndGgtMTthLmI9YS5kLmN9YS5jPS0xfQpmdW5jdGlvbiBNZGQoYSxiKXt2YXIgYyxkLGUsZjtmb3IoZD1iLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtEdGIoYSxjLGEuYy5iLGEuYyl9fQpmdW5jdGlvbiBUY2IoKXtVY2IoKTt2YXIgYT1TY2I7Zm9yKHZhciBiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7YS5wdXNoKGFyZ3VtZW50c1tiXSl9fQpmdW5jdGlvbiBuMmIoYSxiKXtiLlNnKCdIaWVyYXJjaGljYWwgcG9ydCBjb25zdHJhaW50IHByb2Nlc3NpbmcnLDEpO28yYihhKTtxMmIoYSk7Yi5UZygpfQpmdW5jdGlvbiB3Q2QoYSxiKXt2YXIgYztjPWEuZ2MoKTtpZihiPDB8fGI+Yyl0aHJvdyBzY2IobmV3IHpIZChiLGMpKTtyZXR1cm4gbmV3IF9IZChhLGIpfQpmdW5jdGlvbiBhd2QoYSxiLGMpe3JSZChhLGIpO3J2ZChhLGMpO3RSZChhLDApO3dSZChhLDEpO3ZSZChhLHRydWUpO3VSZChhLHRydWUpO3JldHVybiBhfQpmdW5jdGlvbiBHSmQoYSxiKXt2YXIgYztpZihSRChiLDQzKSl7cmV0dXJuIGEuYy5LYyhiKX1lbHNle2M9bkpkKGEsYik7SUpkKGEsYik7cmV0dXJuIGN9fQpmdW5jdGlvbiBWeShhKXtpZighKGE+PTApKXt0aHJvdyBzY2IobmV3IFRlYigndG9sZXJhbmNlICgnK2ErJykgbXVzdCBiZSA+PSAwJykpfXJldHVybiBhfQpmdW5jdGlvbiBOYWQoKXtpZighRmFkKXtGYWQ9bmV3IE1hZDtMYWQoRmFkLFdDKE9DKHIxLDEpLE5xZSwxNDYsMCxbbmV3IE1nZF0pKX1yZXR1cm4gRmFkfQpmdW5jdGlvbiB4emMoKXt4emM9WmNiO3d6Yz1uZXcgeXpjKCdOTycsMCk7dXpjPW5ldyB5emMocHdlLDEpO3Z6Yz1uZXcgeXpjKCdMT09LX0JBQ0snLDIpfQpmdW5jdGlvbiBvbmMoKXtvbmM9WmNiO2xuYz1uZXcgcG5jKCdBUkQnLDApO25uYz1uZXcgcG5jKCdNU0QnLDEpO21uYz1uZXcgcG5jKCdNQU5VQUwnLDIpfQpmdW5jdGlvbiBFeWMoKXtFeWM9WmNiO0R5Yz1uZXcgRnljKGV1ZSwwKTtCeWM9bmV3IEZ5YygnSU5QVVQnLDEpO0N5Yz1uZXcgRnljKCdPVVRQVVQnLDIpfQpmdW5jdGlvbiBVRWMoKXtVRWM9WmNiO1JFYz1uZXcgVkVjKCdCQVJZQ0VOVEVSJywwKTtTRWM9bmV3IFZFYyhZdmUsMSk7VEVjPW5ldyBWRWMoWnZlLDIpfQpmdW5jdGlvbiBpeGMoKXtjeGMoKTtyZXR1cm4gV0MoT0MoZlcsMSksRXJlLDI2NSwwLFtheGMsWndjLCR3YyxXd2MsWXdjLGJ4Yyxfd2MsVndjLFh3Y10pfQpmdW5jdGlvbiBRa2QoKXtOa2QoKTtyZXR1cm4gV0MoT0MoQTIsMSksRXJlLDI2NCwwLFtHa2QsSWtkLEZrZCxKa2QsS2tkLE1rZCxMa2QsSGtkLEVrZF0pfQpmdW5jdGlvbiBocChhLGIpe3JldHVybiBSdihEbyhhLmEsYixQY2IoRmNiKHlyZSxoZmIoUGNiKEZjYihiPT1udWxsPzA6dGIoYiksenJlKSksMTUpKSkpKX0KZnVuY3Rpb24gWGkoYSl7dmFyIGIsYyxkLGU7Zm9yKGM9YS5hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtJbWIoYixiLmxlbmd0aCxudWxsKX19CmZ1bmN0aW9uIE5jKGEpe3ZhciBiLGM7Zm9yKGM9YS5jLkJjKCkuSmMoKTtjLk9iKCk7KXtiPUpEKGMuUGIoKSwxNik7Yi4kYigpfWEuYy4kYigpO2EuZD0wfQpmdW5jdGlvbiBQR2IoYSl7dmFyIGIsYztmb3IoYz1uZXcgcm1iKGNwZChhKSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDY4MCk7Yi5aZigpfX0KZnVuY3Rpb24gT3QoYSxiKXt2YXIgYyxkO2ZvcihjPTAsZD1hLmdjKCk7YzxkOysrYyl7aWYodHViKGIsYS5YYihjKSkpe3JldHVybiBjfX1yZXR1cm4gLTF9CmZ1bmN0aW9uIGZmYihhKXt2YXIgYixjO2lmKGE9PTApe3JldHVybiAzMn1lbHNle2M9MDtmb3IoYj0xOyhiJmEpPT0wO2I8PD0xKXsrK2N9cmV0dXJuIGN9fQpmdW5jdGlvbiBiayhhLGIpe2lmKGE8MCl7dGhyb3cgc2NiKG5ldyBUZWIoYisnIGNhbm5vdCBiZSBuZWdhdGl2ZSBidXQgd2FzOiAnK2EpKX1yZXR1cm4gYX0KZnVuY3Rpb24gT1FiKGEpe0pRYigpO3RoaXMuZz1uZXcgSXJiO3RoaXMuZj1uZXcgSXJiO3RoaXMuYj1uZXcgSXJiO3RoaXMuYz1uZXcgUHA7dGhpcy5pPWF9CmZ1bmN0aW9uIG5XYigpe3RoaXMuZj1uZXcgQ2RkO3RoaXMuZD1uZXcgT1liO3RoaXMuYz1uZXcgQ2RkO3RoaXMuYT1uZXcgVWxiO3RoaXMuYj1uZXcgVWxifQpmdW5jdGlvbiBYZWUoYSxiLGMsZCl7dGhpcy5aaigpO3RoaXMuYT1iO3RoaXMuYj1hO3RoaXMuYz1udWxsO3RoaXMuYz1uZXcgWWVlKHRoaXMsYixjLGQpfQpmdW5jdGlvbiBrR2QoYSxiLGMsZCxlKXt0aGlzLmQ9YTt0aGlzLm49Yjt0aGlzLmc9Yzt0aGlzLm89ZDt0aGlzLnA9LTE7ZXx8KHRoaXMubz0tMi1kLTEpfQpmdW5jdGlvbiBhU2QoKXt5UmQuY2FsbCh0aGlzKTt0aGlzLm49LTE7dGhpcy5nPW51bGw7dGhpcy5pPW51bGw7dGhpcy5qPW51bGw7dGhpcy5CYnw9TkVlfQpmdW5jdGlvbiBDQ2IoYSl7bHdiLmNhbGwodGhpcyxhLnlkKDY0KT9CZmIoMCxNY2IoYS54ZCgpLDEpKTptcmUsYS53ZCgpKTt0aGlzLmI9MTt0aGlzLmE9YX0KZnVuY3Rpb24gTGRjKGEsYil7dmFyIGMsZCxlO2U9Yi5jLmk7Yz1KRChOaWIoYS5mLGUpLDYwKTtkPWMuZC5jLWMuZS5jO0xsYihiLmIsbmV3IFJlYyhkKSl9CmZ1bmN0aW9uIGNuYygpe2NuYz1aY2I7YW5jPW5ldyBlbmMoJ0xBWUVSX1NXRUVQJywwKTtfbWM9bmV3IGVuYyhvd2UsMSk7Ym5jPW5ldyBlbmMoeXZlLDIpfQpmdW5jdGlvbiBxQWMoKXtxQWM9WmNiO3BBYz1FOWMoRTljKEU5YyhuZXcgSjljLChDUWIoKSx4UWIpLCh1NWIoKSxCNGIpKSx5UWIsJDRiKSx6UWIsWjRiKX0KZnVuY3Rpb24gQkFjKCl7QkFjPVpjYjtBQWM9RTljKEU5YyhFOWMobmV3IEo5YywoQ1FiKCkseFFiKSwodTViKCksQjRiKSkseVFiLCQ0YikselFiLFo0Yil9CmZ1bmN0aW9uIFZBYygpe1ZBYz1aY2I7VUFjPUU5YyhFOWMoRTljKG5ldyBKOWMsKENRYigpLHhRYiksKHU1YigpLEI0YikpLHlRYiwkNGIpLHpRYixaNGIpfQpmdW5jdGlvbiBvQmMoKXtvQmM9WmNiO25CYz1FOWMoRTljKEU5YyhuZXcgSjljLChDUWIoKSx4UWIpLCh1NWIoKSxCNGIpKSx5UWIsJDRiKSx6UWIsWjRiKX0KZnVuY3Rpb24gd0JjKCl7d0JjPVpjYjt2QmM9RTljKEU5YyhFOWMobmV3IEo5YywoQ1FiKCkseFFiKSwodTViKCksQjRiKSkseVFiLCQ0YikselFiLFo0Yil9CmZ1bmN0aW9uIFVCYygpe1VCYz1aY2I7VEJjPUU5YyhFOWMoRTljKG5ldyBKOWMsKENRYigpLHhRYiksKHU1YigpLEI0YikpLHlRYiwkNGIpLHpRYixaNGIpfQpmdW5jdGlvbiBfRGMoKXtfRGM9WmNiOyREYz1DOWMoRTljKEU5YyhuZXcgSjljLChDUWIoKSx6UWIpLCh1NWIoKSxiNWIpKSxBUWIsVDRiKSxCUWIsYTViKX0KZnVuY3Rpb24gbmZiKCl7bmZiPVpjYjttZmI9V0MoT0MoY0UsMSksaXNlLDMwLDE1LFswLDgsNCwxMiwyLDEwLDYsMTQsMSw5LDUsMTMsMywxMSw3LDE1XSl9CmZ1bmN0aW9uIEJ4ZChhLGIpe3ZhciBjO2M9YS5iO2EuYj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsMCxjLGEuYikpfQpmdW5jdGlvbiBDeGQoYSxiKXt2YXIgYztjPWEuYzthLmM9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDEsYyxhLmMpKX0KZnVuY3Rpb24gaVpkKGEsYil7dmFyIGM7Yz1hLmM7YS5jPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSw0LGMsYS5jKSl9CmZ1bmN0aW9uIFBzZChhLGIpe3ZhciBjO2M9YS5rO2Euaz1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsMixjLGEuaykpfQpmdW5jdGlvbiBjVGQoYSxiKXt2YXIgYztjPWEuRDthLkQ9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDIsYyxhLkQpKX0KZnVuY3Rpb24gbXVkKGEsYil7dmFyIGM7Yz1hLmY7YS5mPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSw4LGMsYS5mKSl9CmZ1bmN0aW9uIG51ZChhLGIpe3ZhciBjO2M9YS5pO2EuaT1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsNyxjLGEuaSkpfQpmdW5jdGlvbiBKd2QoYSxiKXt2YXIgYztjPWEuYTthLmE9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDgsYyxhLmEpKX0KZnVuY3Rpb24gSVFkKGEsYil7dmFyIGM7Yz1hLmQ7YS5kPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSwxLGMsYS5kKSl9CmZ1bmN0aW9uIE8xZChhLGIpe3ZhciBjO2M9YS5jO2EuYz1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsMSxjLGEuYykpfQpmdW5jdGlvbiBOMWQoYSxiKXt2YXIgYztjPWEuYjthLmI9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDAsYyxhLmIpKX0KZnVuY3Rpb24gWG9lKGEsYixjKXt2YXIgZDthLmI9YjthLmE9YztkPShhLmEmNTEyKT09NTEyP25ldyBfbWU6bmV3IG1tZTthLmM9Z21lKGQsYS5iLGEuYSl9CmZ1bmN0aW9uIF9iZShhLGIpe3JldHVybiBMZmUoYS5lLGIpPyhJZmUoKSxSUmQoYik/bmV3IEpnZShiLGEpOm5ldyBaZmUoYixhKSk6bmV3IFdnZShiLGEpfQpmdW5jdGlvbiAkVmMoYSxiKXtVVmMoKTtyZXR1cm4gSkQoV01iKGIsKGtWYygpLFpVYykpLDE3KS5hPGEuZ2MoKSYmSkQoV01iKGIsWlVjKSwxNykuYT49MH0KZnVuY3Rpb24geG5iKGEsYil7cG5iKCk7dmFyIGM7Yz1uZXcgSnJiKDEpO1ZEKGEpP1JpYihjLGEsYik6Z3NiKGMuZixhLGIpO3JldHVybiBuZXcga3BiKGMpfQpmdW5jdGlvbiBoQmIoYSl7dmFyIGIsYztpZigwPmEpe3JldHVybiBuZXcgcUJifWI9YSsxO2M9bmV3IGpCYihiLGEpO3JldHVybiBuZXcgbkJiKG51bGwsYyl9CmZ1bmN0aW9uIFRPYigpe1RPYj1aY2I7Uk9iPW5ldyBLQmQoZXZlKTtTT2I9bmV3IEtCZChmdmUpO1FPYj1uZXcgS0JkKGd2ZSk7UE9iPW5ldyBLQmQoaHZlKX0KZnVuY3Rpb24gQVljKCl7QVljPVpjYjt5WWM9bmV3IENZYygnUDFfTk9ERV9QTEFDRU1FTlQnLDApO3pZYz1uZXcgQ1ljKCdQMl9FREdFX1JPVVRJTkcnLDEpfQpmdW5jdGlvbiBJaGMoKXtJaGM9WmNiO0hoYz1uZXcgSmhjKCdTVEFSVCcsMCk7R2hjPW5ldyBKaGMoJ01JRERMRScsMSk7RmhjPW5ldyBKaGMoJ0VORCcsMil9CmZ1bmN0aW9uIGw4YyhhLGIpe3ZhciBjO2M9bmV3IHVNYjtKRChiLmIsNjgpO0pEKGIuYiw2OCk7SkQoYi5iLDY4KTtMbGIoYi5hLG5ldyByOGMoYSxjLGIpKX0KZnVuY3Rpb24gRkpkKGEsYil7dmFyIGMsZDtmb3IoZD1iLnZjKCkuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSw0Myk7RUpkKGEsYy5qZCgpLGMua2QoKSl9fQpmdW5jdGlvbiBsdWQoYSxiKXt2YXIgYztjPWEuZDthLmQ9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDExLGMsYS5kKSl9CmZ1bmN0aW9uIFVSZChhLGIpe3ZhciBjO2M9YS5qO2Euaj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsMTMsYyxhLmopKX0KZnVuY3Rpb24gdzFkKGEsYil7dmFyIGM7Yz1hLmI7YS5iPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSwyMSxjLGEuYikpfQpmdW5jdGlvbiBxbGQoYSxiKXtpZihhLnI+MCYmYS5jPGEucil7YS5jKz1iOyEhYS5pJiZhLmkuZD4wJiZhLmchPTAmJnFsZChhLmksYi9hLnIqYS5pLmQpfX0KZnVuY3Rpb24gcmRkKGEsYil7dmFyIGM7aWYoUkQoYiw4KSl7Yz1KRChiLDgpO3JldHVybiBhLmE9PWMuYSYmYS5iPT1jLmJ9ZWxzZXtyZXR1cm4gZmFsc2V9fQpmdW5jdGlvbiBqX2IoYSl7dmFyIGI7Yj1XTWIoYSwoSXFjKCksa3FjKSk7aWYoUkQoYiwxNzMpKXtyZXR1cm4gaV9iKEpEKGIsMTczKSl9cmV0dXJuIG51bGx9CmZ1bmN0aW9uIFNwKGEpe3ZhciBiO2E9JHduZC5NYXRoLm1heChhLDIpO2I9ZGZiKGEpO2lmKGE+Yil7Yjw8PTE7cmV0dXJuIGI+MD9iOkNyZX1yZXR1cm4gYn0KZnVuY3Rpb24ga2piKGEpe3ZhciBiO3FEYihhLmYuZyxhLmQpO3JEYihhLmIpO2EuYz1hLmE7Yj1KRChhLmEuUGIoKSw0Myk7YS5iPWpqYihhKTtyZXR1cm4gYn0KZnVuY3Rpb24gaSRkKGEpe3ZhciBiO2lmKGEuYj09bnVsbCl7cmV0dXJuIEUkZCgpLEUkZCgpLEQkZH1iPWEucmwoKT9hLnFsKCk6YS5wbCgpO3JldHVybiBifQpmdW5jdGlvbiBidmIoYSxiKXt2YXIgYztjPWI9PW51bGw/LTE6TmxiKGEuYixiLDApO2lmKGM8MCl7cmV0dXJuIGZhbHNlfWN2YihhLGMpO3JldHVybiB0cnVlfQpmdW5jdGlvbiBvcmIoYSxiKXt2YXIgYzt0RGIoYik7Yz1iLmc7aWYoIWEuYltjXSl7VkMoYS5iLGMsYik7KythLmM7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBReGIoYSxiKXt2YXIgYyxkO2M9MS1iO2Q9YS5hW2NdO2EuYVtjXT1kLmFbYl07ZC5hW2JdPWE7YS5iPXRydWU7ZC5iPWZhbHNlO3JldHVybiBkfQpmdW5jdGlvbiBjdmIoYSxiKXt2YXIgYztjPU9sYihhLmIsYS5iLmMubGVuZ3RoLTEpO2lmKGI8YS5iLmMubGVuZ3RoKXtSbGIoYS5iLGIsYyk7JHViKGEsYil9fQpmdW5jdGlvbiBNemIoYSxiKXsoKFd6YigpLFR6Yik/bnVsbDpiLmMpLmxlbmd0aD09MCYmWXpiKGIsbmV3IGZBYik7UmliKGEuYSxUemI/bnVsbDpiLmMsYil9CmZ1bmN0aW9uIE53YyhhLGIpe0VCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIobmV3IE9qYihhLmIpLDEpKSxuZXcgT21kKGEsYikpLG5ldyBTbWQoYSxiKSl9CmZ1bmN0aW9uIHlGYyhhLGIsYyl7WENjLmNhbGwodGhpcyxhLGIsYyk7dGhpcy5hPW5ldyBJcmI7dGhpcy5iPW5ldyBJcmI7dGhpcy5kPW5ldyBCRmModGhpcyl9CmZ1bmN0aW9uIGNjYyhhKXtlRmIuY2FsbCh0aGlzKTt0aGlzLmI9QmViKE1EKFdNYihhLChCd2MoKSxXdmMpKSkpO3RoaXMuYT1KRChXTWIoYSx5dWMpLDIyMCl9CmZ1bmN0aW9uIHliYyhhLGIpe3ZhciBjLGQ7Yz1KRChXTWIoYSwoQndjKCksTHZjKSksOCk7ZD1KRChXTWIoYixMdmMpLDgpO3JldHVybiBIZWIoYy5iLGQuYil9CmZ1bmN0aW9uIFNPYyhhLGIpe3ZhciBjLGQ7ZD1uZXcgVWxiO2M9Yjtkb3tZQ2IoZC5jLGMpO2M9SkQoTmliKGEuayxjKSwxOCl9d2hpbGUoYyk7cmV0dXJuIGR9CmZ1bmN0aW9uIHVHYyhhLGIsYyl7dmFyIGQ7ZD1uZXcgVWxiO3ZHYyhhLGIsZCxjLHRydWUsdHJ1ZSk7YS5iPW5ldyBjR2MoZC5jLmxlbmd0aCk7cmV0dXJuIGR9CmZ1bmN0aW9uIFFLYyhhLGIpe3ZhciBjO2M9SkQoTmliKGEuYyxiKSw0NTMpO2lmKCFjKXtjPW5ldyBYS2M7Yy5jPWI7UWliKGEuYyxjLmMsYyl9cmV0dXJuIGN9CmZ1bmN0aW9uIGdDKGUsYSl7dmFyIGI9ZS5hO3ZhciBjPTA7Zm9yKHZhciBkIGluIGIpe2IuaGFzT3duUHJvcGVydHkoZCkmJihhW2MrK109ZCl9cmV0dXJuIGF9CmZ1bmN0aW9uIHhjKGEpe1ViKGEuZSE9Myk7c3dpdGNoKGEuZSl7Y2FzZSAyOnJldHVybiBmYWxzZTtjYXNlIDA6cmV0dXJuIHRydWU7fXJldHVybiB6YyhhKX0KZnVuY3Rpb24gWHEoYSxiKXt2YXIgYztpZihSRChiLDE2KSl7Yz1KRChiLDE2KTtyZXR1cm4gYS5GYyhjKX1yZXR1cm4gdHIoYSxKRChRYihiKSwyMCkuSmMoKSl9CmZ1bmN0aW9uIFI0YyhhKXt2YXIgYixjO2ZvcihjPW5ldyBDSGQoYSk7Yy5lIT1jLmkuZ2MoKTspe2I9SkQoQUhkKGMpLDI3KTtodGQoYiwwKTtpdGQoYiwwKX19CmZ1bmN0aW9uIGh1YihhLGIpe3ZhciBjLGQ7Yz1hLk5jKCk7Tm1iKGMsMCxjLmxlbmd0aCxiKTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKXthLmZkKGQsY1tkXSl9fQpmdW5jdGlvbiBjbGIoYSxiLGMpe3ZhciBkLGUsZjtmPWEuYS5sZW5ndGgtMTtmb3IoZT1hLmIsZD0wO2Q8YztlPWUrMSZmLCsrZCl7VkMoYixkLGEuYVtlXSl9fQpmdW5jdGlvbiBBRWMoYSl7dmFyIGIsYztmb3IoYz1hLmMuYS5lYygpLkpjKCk7Yy5PYigpOyl7Yj1KRChjLlBiKCksMjE3KTtHRGMoYixuZXcgUUZjKGIuZikpfX0KZnVuY3Rpb24gQkVjKGEpe3ZhciBiLGM7Zm9yKGM9YS5jLmEuZWMoKS5KYygpO2MuT2IoKTspe2I9SkQoYy5QYigpLDIxNyk7SERjKGIsbmV3IFJGYyhiLmUpKX19CmZ1bmN0aW9uIHRiKGEpe3JldHVybiBWRChhKT9mZ2IoYSk6VEQoYSk/RWViKGEpOlNEKGEpP0FkYihhKTpRRChhKT9hLkhiKCk6VUMoYSk/akRiKGEpOkF6KGEpfQpmdW5jdGlvbiByX2IoYSxiKXtiLlNnKFh2ZSwxKTtFQmIoREJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYiwxNikpLG5ldyB2X2IpLG5ldyB4X2IpO2IuVGcoKX0KZnVuY3Rpb24gTXZkKGEsYil7dmFyIGMsZDtjPShkPW5ldyBIU2QsZCk7Yy5uPWI7dENkKCghYS5zJiYoYS5zPW5ldyBYMGQocTYsYSwyMSwxNykpLGEucyksYyl9CmZ1bmN0aW9uIFN2ZChhLGIpe3ZhciBjLGQ7ZD0oYz1uZXcgeTFkLGMpO2Qubj1iO3RDZCgoIWEucyYmKGEucz1uZXcgWDBkKHE2LGEsMjEsMTcpKSxhLnMpLGQpfQpmdW5jdGlvbiBydmQoYSxiKXt2YXIgYztjPWEuemI7YS56Yj1iOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsMSxjLGEuemIpKX0KZnVuY3Rpb24gZXdkKGEsYil7dmFyIGM7Yz1hLnhiO2EueGI9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDMsYyxhLnhiKSl9CmZ1bmN0aW9uIGZ3ZChhLGIpe3ZhciBjO2M9YS55YjthLnliPWI7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSwyLGMsYS55YikpfQpmdW5jdGlvbiBjR2MoYSl7dGhpcy5iPWE7dGhpcy5hPVNDKGNFLGlzZSwzMCxhKzEsMTUsMSk7dGhpcy5jPVNDKGNFLGlzZSwzMCxhLDE1LDEpO3RoaXMuZD0wfQpmdW5jdGlvbiB4dShhKXt0aGlzLmU9YTt0aGlzLmQ9bmV3IFJyYihPdihFYyh0aGlzLmUpLmdjKCkpKTt0aGlzLmM9dGhpcy5lLmE7dGhpcy5iPXRoaXMuZS5jfQpmdW5jdGlvbiBjMGMoKXt0aGlzLmM9bmV3IFdZYygwKTt0aGlzLmI9bmV3IFdZYyhBemUpO3RoaXMuZD1uZXcgV1ljKHl6ZSk7dGhpcy5hPW5ldyBXWWMoenplKX0KZnVuY3Rpb24gXzFiKCl7XzFiPVpjYjskMWI9bmV3IGEyYignVE9fSU5URVJOQUxfTFRSJywwKTtaMWI9bmV3IGEyYignVE9fSU5QVVRfRElSRUNUSU9OJywxKX0KZnVuY3Rpb24gazZiKCl7azZiPVpjYjtqNmI9bmV3IExCZCgnZWRnZWxhYmVsY2VudGVyZWRuZXNzYW5hbHlzaXMuaW5jbHVkZWxhYmVsJywoeGRiKCksdmRiKSl9CmZ1bmN0aW9uIG9oYihhKXtpZihhLmE8NTQpe3JldHVybiBhLmY8MD8tMTphLmY+MD8xOjB9cmV0dXJuICghYS5jJiYoYS5jPWZpYih6Y2IoYS5mKSkpLGEuYykuZX0KZnVuY3Rpb24gX1NkKGEsYil7aWYoYil7aWYoYS5CPT1udWxsKXthLkI9YS5EO2EuRD1udWxsfX1lbHNlIGlmKGEuQiE9bnVsbCl7YS5EPWEuQjthLkI9bnVsbH19CmZ1bmN0aW9uIFdjYihhLGIpe3R5cGVvZiB3aW5kb3c9PT1DcWUmJnR5cGVvZiB3aW5kb3dbJyRnd3QnXT09PUNxZSYmKHdpbmRvd1snJGd3dCddW2FdPWIpfQpmdW5jdGlvbiBCU2IoYSxiKXt4U2IoKTtyZXR1cm4gYT09dFNiJiZiPT13U2J8fGE9PXdTYiYmYj09dFNifHxhPT12U2ImJmI9PXVTYnx8YT09dVNiJiZiPT12U2J9CmZ1bmN0aW9uIENTYihhLGIpe3hTYigpO3JldHVybiBhPT10U2ImJmI9PXVTYnx8YT09dFNiJiZiPT12U2J8fGE9PXdTYiYmYj09dlNifHxhPT13U2ImJmI9PXVTYn0KZnVuY3Rpb24gS0piKGEsYil7cmV0dXJuIFJ5KCksVnkoZnVlKSwkd25kLk1hdGguYWJzKDAtYik8PWZ1ZXx8MD09Ynx8aXNOYU4oMCkmJmlzTmFOKGIpPzA6YS9ifQpmdW5jdGlvbiBhbWMoYSxiKXtyZXR1cm4gQmViKE1EKHp1YihMQmIoRkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYy5iLDE2KSksbmV3IHNtYyhhKSksYikpKSl9CmZ1bmN0aW9uIGRtYyhhLGIpe3JldHVybiBCZWIoTUQoenViKExCYihGQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5jLmIsMTYpKSxuZXcgcW1jKGEpKSxiKSkpKX0KZnVuY3Rpb24gYnBjKCl7JG9jKCk7cmV0dXJuIFdDKE9DKFhWLDEpLEVyZSwyNTksMCxbUm9jLFRvYyxVb2MsVm9jLFdvYyxYb2MsWm9jLFFvYyxTb2MsWW9jXSl9CmZ1bmN0aW9uIGd5Yygpe2R5YygpO3JldHVybiBXQyhPQyhqVywxKSxFcmUsMjQyLDAsW2J5YyxZeGMsX3hjLFp4YywkeGMsVnhjLGF5YyxjeWMsV3hjLFh4Y10pfQpmdW5jdGlvbiBYdmQoYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSl7Y3dkKGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG0pO0ZTZChhLGZhbHNlKTtyZXR1cm4gYX0KZnVuY3Rpb24gbXliKGEsYixjLGQsZSxmKXt2YXIgZzt0aGlzLmM9YTtnPW5ldyBVbGI7R3hiKGEsZyxiLGEuYixjLGQsZSxmKTt0aGlzLmE9bmV3IEFqYihnLDApfQpmdW5jdGlvbiBaeWQoYSxiLGMsZCl7dmFyIGU7ZT1uZXcgbUM7VXhkKGUsJ3gnLHN5ZChhLGIsZC5hKSk7VXhkKGUsJ3knLHR5ZChhLGIsZC5iKSk7U3hkKGMsZSl9CmZ1bmN0aW9uIGF6ZChhLGIsYyxkKXt2YXIgZTtlPW5ldyBtQztVeGQoZSwneCcsc3lkKGEsYixkLmEpKTtVeGQoZSwneScsdHlkKGEsYixkLmIpKTtTeGQoYyxlKX0KZnVuY3Rpb24gT2RkKGEsYixjKXt2YXIgZCxlO2ZvcihlPUd0YihhLDApO2UuYiE9ZS5kLmM7KXtkPUpEKFV0YihlKSw4KTtkLmErPWI7ZC5iKz1jfXJldHVybiBhfQpmdW5jdGlvbiBDbyhhLGIsYyl7dmFyIGQ7Zm9yKGQ9YS5iW2MmYS5mXTtkO2Q9ZC5iKXtpZihjPT1kLmEmJkhiKGIsZC5nKSl7cmV0dXJuIGR9fXJldHVybiBudWxsfQpmdW5jdGlvbiBEbyhhLGIsYyl7dmFyIGQ7Zm9yKGQ9YS5jW2MmYS5mXTtkO2Q9ZC5kKXtpZihjPT1kLmYmJkhiKGIsZC5pKSl7cmV0dXJuIGR9fXJldHVybiBudWxsfQpmdW5jdGlvbiBPeChhKXt2YXIgYixjLGQ7Yj0wO2ZvcihkPWEuSmMoKTtkLk9iKCk7KXtjPWQuUGIoKTtiKz1jIT1udWxsP3RiKGMpOjA7Yj1+fmJ9cmV0dXJuIGJ9CmZ1bmN0aW9uIHhlKGEsYil7dmFyIGMsZCxlO3REYihiKTtjPWZhbHNlO2ZvcihlPWIuSmMoKTtlLk9iKCk7KXtkPWUuUGIoKTtjPWN8YS5FYyhkKX1yZXR1cm4gY30KZnVuY3Rpb24gV19jKGEsYil7dmFyIGMsZDtjPUpEKGtzZChhLChiX2MoKSxTJGMpKSwxNyk7ZD1KRChrc2QoYixTJGMpLDE3KTtyZXR1cm4gJGViKGMuYSxkLmEpfQpmdW5jdGlvbiBDWmMoYSxiKXt2YXIgYztiLlNnKCdHZW5lcmFsIENvbXBhY3RvcicsMSk7Yz1rJGMoSkQoa3NkKGEsKGJfYygpLEwkYykpLDM4NCkpO2MuQWcoYSl9CmZ1bmN0aW9uIFBWYyhhLGIsYyl7Yy5TZygnREZTIFRyZWVpZnlpbmcgcGhhc2UnLDEpO09WYyhhLGIpO01WYyhhLGIpO2EuYT1udWxsO2EuYj1udWxsO2MuVGcoKX0KZnVuY3Rpb24gdkpiKGEsYixjLGQsZSxmLGcpe21zLmNhbGwodGhpcyxhLGIpO3RoaXMuZD1jO3RoaXMuZT1kO3RoaXMuYz1lO3RoaXMuYj1mO3RoaXMuYT1fdShnKX0KZnVuY3Rpb24gamliKGEsYixjKXt2YXIgZCxlLGY7ZD0wO2ZvcihlPTA7ZTxjO2UrKyl7Zj1iW2VdO2FbZV09Zjw8MXxkO2Q9Zj4+PjMxfWQhPTAmJihhW2NdPWQpfQpmdW5jdGlvbiAkQShhKXt2YXIgYjtpZihhPT0wKXtyZXR1cm4gJ1VUQyd9aWYoYTwwKXthPS1hO2I9J1VUQysnfWVsc2V7Yj0nVVRDLSd9cmV0dXJuIGIrYUIoYSl9CmZ1bmN0aW9uIFJBYihhKXt2YXIgYjtiPVFBYihhKTtpZih5Y2IoYi5hLDApKXtyZXR1cm4gSHViKCksSHViKCksR3VifXJldHVybiBIdWIoKSxuZXcgTXViKGIuYil9CmZ1bmN0aW9uIFNBYihhKXt2YXIgYjtiPVFBYihhKTtpZih5Y2IoYi5hLDApKXtyZXR1cm4gSHViKCksSHViKCksR3VifXJldHVybiBIdWIoKSxuZXcgTXViKGIuYyl9CmZ1bmN0aW9uIG1CYihhKXt2YXIgYjtiPWxCYihhKTtpZih5Y2IoYi5hLDApKXtyZXR1cm4gUnViKCksUnViKCksUXVifXJldHVybiBSdWIoKSxuZXcgVXViKGIuYil9CmZ1bmN0aW9uIFJWYihhKXtpZihhLmIuYy5pLms9PShEWWIoKSx3WWIpKXtyZXR1cm4gSkQoV01iKGEuYi5jLmksKElxYygpLGtxYykpLDExKX1yZXR1cm4gYS5iLmN9CmZ1bmN0aW9uIFNWYihhKXtpZihhLmIuZC5pLms9PShEWWIoKSx3WWIpKXtyZXR1cm4gSkQoV01iKGEuYi5kLmksKElxYygpLGtxYykpLDExKX1yZXR1cm4gYS5iLmR9CmZ1bmN0aW9uIEExYihhKXtzd2l0Y2goYS5nKXtjYXNlIDI6cmV0dXJuIFJqZCgpLFFqZDtjYXNlIDQ6cmV0dXJuIFJqZCgpLHdqZDtkZWZhdWx0OnJldHVybiBhO319CmZ1bmN0aW9uIEIxYihhKXtzd2l0Y2goYS5nKXtjYXNlIDE6cmV0dXJuIFJqZCgpLE9qZDtjYXNlIDM6cmV0dXJuIFJqZCgpLHhqZDtkZWZhdWx0OnJldHVybiBhO319CmZ1bmN0aW9uIF9tZChhLGIpe3ZhciBjO2M9ZW5kKGEpO3JldHVybiAkbWQobmV3IEVkZChjLmMsYy5kKSxuZXcgRWRkKGMuYixjLmEpLGEuS2YoKSxiLGEuJGYoKSl9CmZ1bmN0aW9uIE8zYihhLGIpe2IuU2coWHZlLDEpO1dHYihWR2IobmV3ICRHYigoc1diKCksbmV3IERXYihhLGZhbHNlLGZhbHNlLG5ldyBqWGIpKSkpKTtiLlRnKCl9CmZ1bmN0aW9uIFZZYigpe1ZZYj1aY2I7U1liPW5ldyBEWmI7UVliPW5ldyBJWmI7UlliPW5ldyBNWmI7UFliPW5ldyBRWmI7VFliPW5ldyBVWmI7VVliPW5ldyBZWmJ9CmZ1bmN0aW9uIEdUZCgpe0dUZD1aY2I7RFRkPW5ldyBEWWQ7RlRkPVdDKE9DKHE2LDEpLG1GZSwxNzgsMCxbXSk7RVRkPVdDKE9DKGs2LDEpLG5GZSw2MiwwLFtdKX0KZnVuY3Rpb24gR0ZjKCl7R0ZjPVpjYjtGRmM9QjljKEY5YyhFOWMoRTljKG5ldyBKOWMsKENRYigpLHpRYiksKHU1YigpLGI1YikpLEFRYixUNGIpLEJRYiksYTViKX0KZnVuY3Rpb24gbUVjKCl7bUVjPVpjYjtsRWM9QjljKEY5YyhFOWMoRTljKG5ldyBKOWMsKENRYigpLHpRYiksKHU1YigpLGI1YikpLEFRYixUNGIpLEJRYiksYTViKX0KZnVuY3Rpb24gQ2RiKGEsYil7eGRiKCk7cmV0dXJuIFZEKGEpP2FnYihhLE9EKGIpKTpURChhKT9BZWIoYSxNRChiKSk6U0QoYSk/emRiKGEsTEQoYikpOmEuRGQoYil9CmZ1bmN0aW9uIExkKGEsYil7dmFyIGMsZDt0RGIoYik7Zm9yKGQ9Yi52YygpLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksNDMpO2EueWMoYy5qZCgpLGMua2QoKSl9fQpmdW5jdGlvbiB6YmUoYSxiLGMpe3ZhciBkO2ZvcihkPWMuSmMoKTtkLk9iKCk7KXtpZigheGJlKGEsYixkLlBiKCkpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiB2cihhLGIpe3ZhciBjO1FiKGIpO3doaWxlKGEuT2IoKSl7Yz1hLlBiKCk7aWYoIXJNYyhKRChjLDkpKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gbDJkKGEsYixjLGQsZSl7dmFyIGY7aWYoYyl7Zj1XVGQoYi56aCgpLGEuYyk7ZT1jLk5oKGIsLTEtKGY9PS0xP2Q6ZiksbnVsbCxlKX1yZXR1cm4gZX0KZnVuY3Rpb24gbTJkKGEsYixjLGQsZSl7dmFyIGY7aWYoYyl7Zj1XVGQoYi56aCgpLGEuYyk7ZT1jLlBoKGIsLTEtKGY9PS0xP2Q6ZiksbnVsbCxlKX1yZXR1cm4gZX0KZnVuY3Rpb24gTGhiKGEpe3ZhciBiO2lmKGEuYj09LTIpe2lmKGEuZT09MCl7Yj0tMX1lbHNle2ZvcihiPTA7YS5hW2JdPT0wO2IrKyk7fWEuYj1ifXJldHVybiBhLmJ9CmZ1bmN0aW9uIFloYihhKXt0RGIoYSk7aWYoYS5sZW5ndGg9PTApe3Rocm93IHNjYihuZXcgTWZiKCdaZXJvIGxlbmd0aCBCaWdJbnRlZ2VyJykpfWRpYih0aGlzLGEpfQpmdW5jdGlvbiB4RGQoYSl7dGhpcy5pPWEuZ2MoKTtpZih0aGlzLmk+MCl7dGhpcy5nPXRoaXMuWmkodGhpcy5pKyh0aGlzLmkvOHwwKSsxKTthLk9jKHRoaXMuZyl9fQpmdW5jdGlvbiBDZmMoYSxiLGMpe3RoaXMuZz1hO3RoaXMuZD1iO3RoaXMuZT1jO3RoaXMuYT1uZXcgVWxiO0FmYyh0aGlzKTtwbmIoKTtTbGIodGhpcy5hLG51bGwpfQpmdW5jdGlvbiBHa2MoYSxiLGMpe3RoaXMuYj1uZXcgSXJiO3RoaXMuZj1uZXcgSXJiO3RoaXMuYz0ob3hjKCksbnhjKTt0aGlzLmQ9YTt0aGlzLmM9Yjt0aGlzLmE9Y30KZnVuY3Rpb24gRmtjKGEsYixjLGQpe0drYy5jYWxsKHRoaXMsYixjLGQpO3RoaXMuZT1TQyhSUCxKdmUsOSxhLmEuYy5sZW5ndGgsMCwxKTtUbGIoYS5hLHRoaXMuZSl9CmZ1bmN0aW9uIHE0YyhhLGIpe2IucT1hO2EuZD0kd25kLk1hdGgubWF4KGEuZCxiLnIpO2EuYis9Yi5kKyhhLmEuYy5sZW5ndGg9PTA/MDphLmMpO0lsYihhLmEsYil9CmZ1bmN0aW9uIE1jZChhLGIpe3ZhciBjLGQsZSxmO2U9YS5jO2M9YS5jK2EuYjtmPWEuZDtkPWEuZCthLmE7cmV0dXJuIGIuYT5lJiZiLmE8YyYmYi5iPmYmJmIuYjxkfQpmdW5jdGlvbiBQZGQoYSxiKXt2YXIgYyxkO2ZvcihkPUd0YihhLDApO2QuYiE9ZC5kLmM7KXtjPUpEKFV0YihkKSw4KTtjLmErPWIuYTtjLmIrPWIuYn1yZXR1cm4gYX0KZnVuY3Rpb24gbDZiKGEpe3ZhciBiLGMsZDtkPTA7Zm9yKGM9bmV3IHJtYihhLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwyNSk7Yi5wPWQ7KytkfX0KZnVuY3Rpb24gcWhjKGEpe3ZhciBiLGMsZDtyZXR1cm4gYS5qPT0oUmpkKCkseGpkKSYmKGI9c2hjKGEpLGM9cnJiKGIsd2pkKSxkPXJyYihiLFFqZCksZHx8ZCYmYyl9CmZ1bmN0aW9uIHB1YihhLGIpe3ZhciBjLGQ7dERiKGIpO2ZvcihkPWEudmMoKS5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDQzKTtiLldkKGMuamQoKSxjLmtkKCkpfX0KZnVuY3Rpb24gWFFkKGEsYil7dmFyIGM7aWYoUkQoYiw5MSkpe0pEKGEuYyw3NikuRGsoKTtjPUpEKGIsOTEpO0ZKZChhLGMpfWVsc2V7SkQoYS5jLDc2KS5XYihiKX19CmZ1bmN0aW9uICR2ZChhLGIsYyxkKXtSRChhLkNiLDE4NCkmJihKRChhLkNiLDE4NCkudGI9bnVsbCk7cnZkKGEsYyk7ISFiJiZhVGQoYSxiKTtkJiZhLmRsKHRydWUpfQpmdW5jdGlvbiBKNmIoYSxiKXtyZXR1cm4gYjxhLmIuZ2MoKT9KRChhLmIuWGIoYiksOSk6Yj09YS5iLmdjKCk/YS5hOkpEKE1sYihhLmUsYi1hLmIuZ2MoKS0xKSw5KX0KZnVuY3Rpb24gZ2RiKGEsYixjLGQpe3ZhciBlO2U9YS5hLmxlbmd0aDtjPmU/KGM9ZSk6QURiKGIsYysxKTthLmE9cWdiKGEuYSwwLGIpKygnJytkKStwZ2IoYS5hLGMpfQpmdW5jdGlvbiBRX2IoYSxiKXt2YXIgYztiLlNnKCdFZGdlIGFuZCBsYXllciBjb25zdHJhaW50IGVkZ2UgcmV2ZXJzYWwnLDEpO2M9UF9iKGEpO09fYihjKTtiLlRnKCl9CmZ1bmN0aW9uIG82YihhLGIpe3ZhciBjLGQ7Zm9yKGQ9bmV3IHJtYihiLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwyNSk7YS5hW2MucF09clhiKGMpfX0KZnVuY3Rpb24gbWpiKGEpe3RoaXMuZj1hO3RoaXMuZT1uZXcgRnNiKHRoaXMuZi5pKTt0aGlzLmE9dGhpcy5lO3RoaXMuYj1qamIodGhpcyk7dGhpcy5kPXRoaXMuZi5nfQpmdW5jdGlvbiBuY2UoYSxiKXtkYmUuY2FsbCh0aGlzLEFhYixhLGIpO3RoaXMuYj10aGlzO3RoaXMuYT1LZmUoYS56aCgpLFFUZCh0aGlzLmUuemgoKSx0aGlzLmMpKX0KZnVuY3Rpb24gcmFkKGEsYil7dmFyIGM7Yz1IYWQoTmFkKCksYSk7aWYoYyl7bXNkKGIsKExnZCgpLGlnZCksYyk7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fQpmdW5jdGlvbiBZaShhLGIsYyl7dmFyIGQsZTtlPUpEKEJuKGEuZCxiKSwxNyk7ZD1KRChCbihhLmIsYyksMTcpO3JldHVybiAhZXx8IWQ/bnVsbDpTaShhLGUuYSxkLmEpfQpmdW5jdGlvbiBEOWMoYSxiKXt2YXIgYztmb3IoYz0wO2M8Yi5qLmMubGVuZ3RoO2MrKyl7SkQoXzhjKGEsYyksMjIpLkZjKEpEKF84YyhiLGMpLDE2KSl9cmV0dXJuIGF9CmZ1bmN0aW9uIFB6Yigpe3ZhciBhO2lmKCFMemIpe0x6Yj1uZXcgT3piO2E9bmV3IGNBYignJyk7YUFiKGEsKEd6YigpLEZ6YikpO016YihMemIsYSl9cmV0dXJuIEx6Yn0KZnVuY3Rpb24gY0tiKGEpe2FLYigpO2lmKGEuQS5HYygoeWtkKCksdWtkKSkpe2lmKCFhLkIuR2MoKE5rZCgpLElrZCkpKXtyZXR1cm4gYktiKGEpfX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gRE5iKCl7dGhpcy5hPUpEKEpCZCgoSU9iKCksa09iKSksMTcpLmE7dGhpcy5jPUJlYihNRChKQmQoQk9iKSkpO3RoaXMuYj1CZWIoTUQoSkJkKHhPYikpKX0KZnVuY3Rpb24gSVliKCl7SVliPVpjYjtIWWI9b3MoKERZYigpLFdDKE9DKFBQLDEpLEVyZSwyNDcsMCxbQVliLHlZYix3WWIsQlliLHhZYix2WWIsQ1liLHpZYl0pKSl9CmZ1bmN0aW9uIElpYygpe0lpYz1aY2I7SGljPW9zKChEaWMoKSxXQyhPQyhUVSwxKSxFcmUsMjcyLDAsW3dpYyx6aWMsdmljLENpYyx5aWMseGljLEJpYyxBaWNdKSkpfQpmdW5jdGlvbiBFY2QoKXtFY2Q9WmNiO0RjZD1vcygoemNkKCksV0MoT0MoVzEsMSksRXJlLDI4MiwwLFt5Y2QscmNkLHZjZCx4Y2Qsc2NkLHRjZCx1Y2Qsd2NkXSkpKX0KZnVuY3Rpb24gR0JkKCl7R0JkPVpjYjtGQmQ9b3MoKEJCZCgpLFdDKE9DKEw0LDEpLEVyZSwyNDMsMCxbQUJkLHhCZCx5QmQsd0JkLHpCZCx1QmQsdEJkLHZCZF0pKSl9CmZ1bmN0aW9uIGJUYygpe1pTYygpO3JldHVybiBXQyhPQyhpJCwxKSxFcmUsMjYyLDAsW1lTYyxSU2MsVlNjLFdTYyxVU2MsUVNjLFhTYyxPU2MsVFNjLFNTYyxQU2NdKX0KZnVuY3Rpb24gdVJjKGEsYixjKXtyZXR1cm4gSGViKHFkZChtUWMoYSksbmV3IEVkZChiLmUuYSxiLmUuYikpLHFkZChtUWMoYSksbmV3IEVkZChjLmUuYSxjLmUuYikpKX0KZnVuY3Rpb24gWkRjKGEsYixjKXtyZXR1cm4gYT09KFVFYygpLFRFYyk/bmV3IFNEYzp5dmIoYiwxKSE9MD9uZXcgTEZjKGMubGVuZ3RoKTpuZXcgc0ZjKGMubGVuZ3RoKX0KZnVuY3Rpb24gV3BkKGEsYil7dmFyIGMsZCxlO2M9YS5waCgpO2lmKGMhPW51bGwmJmEuc2goKSl7Zm9yKGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2NbZF0uYWooYil9fX0KZnVuY3Rpb24geFhiKGEsYil7dmFyIGMsZDtjPWE7ZD1nWWIoYykuZTt3aGlsZShkKXtjPWQ7aWYoYz09Yil7cmV0dXJuIHRydWV9ZD1nWWIoYykuZX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIHdjYihhKXt2YXIgYjtiPWEuaDtpZihiPT0wKXtyZXR1cm4gYS5sK2EubSpDc2V9aWYoYj09QXNlKXtyZXR1cm4gYS5sK2EubSpDc2UtRHNlfXJldHVybiBhfQpmdW5jdGlvbiBPQmMoYSxiLGMpe3ZhciBkLGU7ZD1hLmEuZltiLnBdO2U9YS5hLmZbYy5wXTtpZihkPGUpe3JldHVybiAtMX1pZihkPT1lKXtyZXR1cm4gMH1yZXR1cm4gMX0KZnVuY3Rpb24gdGdjKGEsYil7dmFyIGMsZDtmb3IoZD1uZXcgcm1iKGIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw3Mik7SWxiKGEuZCxjKTt4Z2MoYSxjKX19CmZ1bmN0aW9uIHFKZChhKXt2YXIgYjtpZihhLmQ9PW51bGwpeysrYS5lO2EuZj0wO3BKZChudWxsKX1lbHNleysrYS5lO2I9YS5kO2EuZD1udWxsO2EuZj0wO3BKZChiKX19CmZ1bmN0aW9uIFVzKGEpe3ZhciBiO2lmKGEuYT09YS5iLmEpe3Rocm93IHNjYihuZXcgcXViKX1iPWEuYTthLmM9YjthLmE9SkQodnViKGEuYS5lKSwyMjYpO3JldHVybiBifQpmdW5jdGlvbiBOTGMoYSl7SUxjKCk7dmFyIGI7aWYoIUpxYihITGMsYSkpe2I9bmV3IEtMYztiLmE9YTtNcWIoSExjLGEsYil9cmV0dXJuIEpEKEtxYihITGMsYSksNjMwKX0KZnVuY3Rpb24gd19jKCl7d19jPVpjYjt1X2M9bmV3IHlfYyh5dmUsMCk7dl9jPW5ldyB5X2MoJ1BPTEFSX0NPT1JESU5BVEUnLDEpO3RfYz1uZXcgeV9jKCdJRCcsMil9CmZ1bmN0aW9uIGhwYygpe2hwYz1aY2I7ZnBjPW5ldyBpcGMoJ09ORV9TSURFRCcsMCk7Z3BjPW5ldyBpcGMoJ1RXT19TSURFRCcsMSk7ZXBjPW5ldyBpcGMoJ09GRicsMil9CmZ1bmN0aW9uIFlMYigpe1lMYj1aY2I7V0xiPW5ldyBMQmQoJ2RlYnVnU1ZHJywoeGRiKCksZmFsc2UpKTtYTGI9bmV3IExCZCgnb3ZlcmxhcHNFeGlzdGVkJyx0cnVlKX0KZnVuY3Rpb24gS2lkKCl7S2lkPVpjYjtKaWQ9b3MoKEVpZCgpLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFt3aWQsdmlkLHlpZCxEaWQsQ2lkLEJpZCx6aWQsQWlkLHhpZF0pKSl9CmZ1bmN0aW9uIHAwYyhhLGIpe3ZhciBjLGQ7Zm9yKGQ9bmV3IENIZChhKTtkLmUhPWQuaS5nYygpOyl7Yz1KRChBSGQoZCksMjcpO2Z0ZChjLGMuaStiLmIsYy5qK2IuZCl9fQpmdW5jdGlvbiBOdmQoYSxiKXt2YXIgYyxkO2M9KGQ9bmV3IGFVZCxkKTtjLkc9YjshYS5yYiYmKGEucmI9bmV3IGMxZChhLGE2LGEpKTt0Q2QoYS5yYixjKTtyZXR1cm4gY30KZnVuY3Rpb24gT3ZkKGEsYil7dmFyIGMsZDtjPShkPW5ldyBGWWQsZCk7Yy5HPWI7IWEucmImJihhLnJiPW5ldyBjMWQoYSxhNixhKSk7dENkKGEucmIsYyk7cmV0dXJuIGN9CmZ1bmN0aW9uIF94KGEpe3ZhciBiLGMsZDtkPTA7Zm9yKGM9bmV3IERyYihhLmEpO2MuYTxjLmMuYS5sZW5ndGg7KXtiPUNyYihjKTthLmIuR2MoYikmJisrZH1yZXR1cm4gZH0KZnVuY3Rpb24gWHUoYSl7dmFyIGIsYyxkO2I9MTtmb3IoZD1hLkpjKCk7ZC5PYigpOyl7Yz1kLlBiKCk7Yj0zMSpiKyhjPT1udWxsPzA6dGIoYykpO2I9fn5ifXJldHVybiBifQpmdW5jdGlvbiAkZGIoYSl7dmFyIGI7aWYoYTwxMjgpe3JldHVybiBhZWIoKSxiPV9kYlthXSwhYiYmKGI9X2RiW2FdPW5ldyBVZGIoYSkpLGJ9cmV0dXJuIG5ldyBVZGIoYSl9CmZ1bmN0aW9uIHpjYihhKXtpZihGc2U8YSYmYTxEc2Upe3JldHVybiBhPDA/JHduZC5NYXRoLmNlaWwoYSk6JHduZC5NYXRoLmZsb29yKGEpfXJldHVybiB3Y2IobkQoYSkpfQpmdW5jdGlvbiBfcmIoYSxiKXthLmE9dGNiKGEuYSwxKTthLmM9JHduZC5NYXRoLm1pbihhLmMsYik7YS5iPSR3bmQuTWF0aC5tYXgoYS5iLGIpO2EuZD10Y2IoYS5kLGIpfQpmdW5jdGlvbiBCc2IoYSxiKXt2YXIgYztjPWEuYS5nZXQoYik7aWYoYz09PXVuZGVmaW5lZCl7KythLmR9ZWxzZXtyc2IoYS5hLGIpOy0tYS5jOysrYS5iLmd9cmV0dXJuIGN9CmZ1bmN0aW9uIENyZChhLGIpe3ZhciBjO2lmKChhLkRiJmIpIT0wKXtjPUJyZChhLGIpO3JldHVybiBjPT0tMT9hLkViOktEKGEuRWIpW2NdfWVsc2V7cmV0dXJuIG51bGx9fQpmdW5jdGlvbiBGJGQoYSl7dmFyIGI7aWYoYS5nPjF8fGEuT2IoKSl7KythLmE7YS5nPTA7Yj1hLmk7YS5PYigpO3JldHVybiBifWVsc2V7dGhyb3cgc2NiKG5ldyBxdWIpfX0KZnVuY3Rpb24gT0FiKGIsYyl7dmFyIGQ7dHJ5e2MuYmUoKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDgwKSl7ZD1hO1lDYihiLmMsZCl9ZWxzZSB0aHJvdyBzY2IoYSl9fQpmdW5jdGlvbiBVTWIoYSxiKXt2YXIgYztpZighYil7cmV0dXJuIGF9Yz1iLmxmKCk7Yy5kYygpfHwoIWEucT8oYS5xPW5ldyBLcmIoYykpOkxkKGEucSxjKSk7cmV0dXJuIGF9CmZ1bmN0aW9uIGtWYihhLGIpe3ZhciBjLGQsZTtjPWIucC1hLnA7aWYoYz09MCl7ZD1hLmYuYSphLmYuYjtlPWIuZi5hKmIuZi5iO3JldHVybiBIZWIoZCxlKX1yZXR1cm4gY30KZnVuY3Rpb24gTmNiKGEpe3ZhciBiLGMsZCxlO2U9YTtkPTA7aWYoZTwwKXtlKz1Ec2U7ZD1Bc2V9Yz1ZRChlL0NzZSk7Yj1ZRChlLWMqQ3NlKTtyZXR1cm4gX0MoYixjLGQpfQpmdW5jdGlvbiBhV2IoYSl7aWYoYS5iLmMubGVuZ3RoIT0wJiYhIUpEKE1sYihhLmIsMCksNzIpLmEpe3JldHVybiBKRChNbGIoYS5iLDApLDcyKS5hfXJldHVybiBfVmIoYSl9CmZ1bmN0aW9uIExzZChhLGIpe3N3aXRjaChiKXtjYXNlIDE6cmV0dXJuICEhYS5uJiZhLm4uaSE9MDtjYXNlIDI6cmV0dXJuIGEuayE9bnVsbDt9cmV0dXJuIGdzZChhLGIpfQpmdW5jdGlvbiBKTGMoYSl7c3dpdGNoKGEuYS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBvTWM7Y2FzZSAzOnJldHVybiBuZXcgWU9jO2RlZmF1bHQ6cmV0dXJuIG5ldyBaTGM7fX0KZnVuY3Rpb24gcURjKGEsYil7aWYoYS5jKXtyRGMoYSxiLHRydWUpO0VCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLDE2KSksbmV3IEVEYyhhKSl9ckRjKGEsYixmYWxzZSl9CmZ1bmN0aW9uIHh4YihhLGIsYyl7dGhpcy5iPSh0RGIoYSksYSk7dGhpcy5kPSh0RGIoYiksYik7dGhpcy5lPSh0RGIoYyksYyk7dGhpcy5jPXRoaXMuZCsoJycrdGhpcy5lKX0KZnVuY3Rpb24gaWRlKGEsYil7dGhpcy5iPWE7dGhpcy5lPWI7dGhpcy5kPWIuajt0aGlzLmY9KElmZSgpLEpEKGEsNjkpLnVrKCkpO3RoaXMuaz1LZmUoYi5lLnpoKCksYSl9CmZ1bmN0aW9uIFhNYyhhKXt0aGlzLm49bmV3IFVsYjt0aGlzLmU9bmV3IE10Yjt0aGlzLmo9bmV3IE10Yjt0aGlzLms9bmV3IFVsYjt0aGlzLmY9bmV3IFVsYjt0aGlzLnA9YX0KZnVuY3Rpb24gdVBjKGEpe2Eucj1uZXcgUXJiO2Eudz1uZXcgUXJiO2EudD1uZXcgVWxiO2EuaT1uZXcgVWxiO2EuZD1uZXcgUXJiO2EuYT1uZXcgZmRkO2EuYz1uZXcgSXJifQpmdW5jdGlvbiB4TGIoKXt4TGI9WmNiO3dMYj1uZXcgeUxiKCdVUCcsMCk7dExiPW5ldyB5TGIobHVlLDEpO3VMYj1uZXcgeUxiKF90ZSwyKTt2TGI9bmV3IHlMYihhdWUsMyl9CmZ1bmN0aW9uIE55Yygpe055Yz1aY2I7S3ljPW5ldyBPeWMoJ0VRVUFMTFknLDApO0x5Yz1uZXcgT3ljKCdOT1JUSCcsMSk7TXljPW5ldyBPeWMoJ05PUlRIX1NPVVRIJywyKX0KZnVuY3Rpb24ga3hjKCl7a3hjPVpjYjtqeGM9b3MoKGN4YygpLFdDKE9DKGZXLDEpLEVyZSwyNjUsMCxbYXhjLFp3Yywkd2MsV3djLFl3YyxieGMsX3djLFZ3YyxYd2NdKSkpfQpmdW5jdGlvbiBTa2QoKXtTa2Q9WmNiO1JrZD1vcygoTmtkKCksV0MoT0MoQTIsMSksRXJlLDI2NCwwLFtHa2QsSWtkLEZrZCxKa2QsS2tkLE1rZCxMa2QsSGtkLEVrZF0pKSl9CmZ1bmN0aW9uIERnYygpe0RnYz1aY2I7emdjPW5ldyBFZ2MoWXRlLDApO0FnYz1uZXcgRWdjKF90ZSwxKTtCZ2M9bmV3IEVnYyhhdWUsMik7Q2djPW5ldyBFZ2MoJ1RPUCcsMyl9CmZ1bmN0aW9uIEd6Yygpe0d6Yz1aY2I7RXpjPW5ldyBIemMoJ09GRicsMCk7RnpjPW5ldyBIemMoJ1NJTkdMRV9FREdFJywxKTtEemM9bmV3IEh6YygnTVVMVElfRURHRScsMil9CmZ1bmN0aW9uIGd6YyhhLGIsYyxkLGUpe1ZDKGEuY1tiLmddLGMuZyxkKTtWQyhhLmNbYy5nXSxiLmcsZCk7VkMoYS5iW2IuZ10sYy5nLGUpO1ZDKGEuYltjLmddLGIuZyxlKX0KZnVuY3Rpb24gY1liKGEsYixjKXt2YXIgZCxlLGYsZztnPWdZYihhKTtkPWcuZDtlPWcuYztmPWEubjtiJiYoZi5hPWYuYS1kLmItZS5hKTtjJiYoZi5iPWYuYi1kLmQtZS5iKX0KZnVuY3Rpb24gWDhiKGEsYil7dmFyIGMsZDtjPWEuajtkPWIuajtyZXR1cm4gYyE9ZD9jLmctZC5nOmEucD09Yi5wPzA6Yz09KFJqZCgpLHhqZCk/YS5wLWIucDpiLnAtYS5wfQpmdW5jdGlvbiBnamMoYSl7dmFyIGIsYztlamMoYSk7Zm9yKGM9bmV3IHJtYihhLmQpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwxMDUpOyEhYi5pJiZmamMoYil9fQpmdW5jdGlvbiByTWMoYSl7dmFyIGI7Yj1KRChXTWIoYSwoSXFjKCksVHBjKSksNjQpO3JldHVybiBhLms9PShEWWIoKSx3WWIpJiYoYj09KFJqZCgpLFFqZCl8fGI9PXdqZCl9CmZ1bmN0aW9uIHRWYihhLGIsYyl7dmFyIGQsZTtlPUpEKFdNYihhLChCd2MoKSxSdWMpKSw3Nyk7aWYoZSl7ZD1uZXcgUmRkO05kZChkLDAsZSk7UGRkKGQsYyk7eGUoYixkKX19CmZ1bmN0aW9uIHB6ZChhLGIsYyl7dmFyIGQsZSxmLGc7Zj1udWxsO2c9YjtlPSR4ZChnLGpEZSk7ZD1uZXcgQnpkKGEsYyk7Zj0oenlkKGQuYSxkLmIsZSksZSk7cmV0dXJuIGZ9CmZ1bmN0aW9uIEl2ZChhLGIpe3ZhciBjLGQ7ZD0oYz1uZXcgdTVkLGMpO3J2ZChkLGIpO3RDZCgoIWEuQSYmKGEuQT1uZXcgRGRlKHI2LGEsNykpLGEuQSksZCk7cmV0dXJuIGR9CmZ1bmN0aW9uIEtzZChhLGIsYyxkKXtpZihjPT0xKXtyZXR1cm4gIWEubiYmKGEubj1uZXcgWDBkKHozLGEsMSw3KSksUUdkKGEubixiLGQpfXJldHVybiBmc2QoYSxiLGMsZCl9CmZ1bmN0aW9uIGU4YyhhLGIsYyxkKXtKRChjLmIsNjgpO0pEKGMuYiw2OCk7SkQoZC5iLDY4KTtKRChkLmIsNjgpO0pEKGQuYiw2OCk7TGxiKGQuYSxuZXcgajhjKGEsYixkKSl9CmZ1bmN0aW9uIE1FYihhLGIpe2EuZD09KFRnZCgpLFBnZCl8fGEuZD09U2dkP0pEKGIuYSw2MCkuYy5FYyhKRChiLmIsNjApKTpKRChiLmIsNjApLmMuRWMoSkQoYi5hLDYwKSl9CmZ1bmN0aW9uIEFlKGEsYil7dmFyIGMsZDt0RGIoYik7Zm9yKGQ9Yi5KYygpO2QuT2IoKTspe2M9ZC5QYigpO2lmKCFhLkdjKGMpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBrRChhLGIpe3ZhciBjLGQsZTtjPWEubCtiLmw7ZD1hLm0rYi5tKyhjPj4yMik7ZT1hLmgrYi5oKyhkPj4yMik7cmV0dXJuIF9DKGMmenNlLGQmenNlLGUmQXNlKX0KZnVuY3Rpb24gdkQoYSxiKXt2YXIgYyxkLGU7Yz1hLmwtYi5sO2Q9YS5tLWIubSsoYz4+MjIpO2U9YS5oLWIuaCsoZD4+MjIpO3JldHVybiBfQyhjJnpzZSxkJnpzZSxlJkFzZSl9CmZ1bmN0aW9uIGJyKGEpe3ZhciBiO2lmKGEpe2I9YTtpZihiLmRjKCkpe3Rocm93IHNjYihuZXcgcXViKX1yZXR1cm4gYi5YYihiLmdjKCktMSl9cmV0dXJuIEJyKGEuSmMoKSl9CmZ1bmN0aW9uIERTZChhKXt2YXIgYjtpZighYS5hfHwoYS5CYiYxKT09MCYmYS5hLlJoKCkpe2I9cFJkKGEpO1JEKGIsMTU1KSYmKGEuYT1KRChiLDE1NSkpfXJldHVybiBhLmF9CmZ1bmN0aW9uIHJjYihhKXt2YXIgYjtpZihSRChhLDgwKSl7cmV0dXJuIGF9Yj1hJiZhLl9famF2YSRleGNlcHRpb247aWYoIWIpe2I9bmV3IHV6KGEpOyR6KGIpfXJldHVybiBifQpmdW5jdGlvbiBhQ2QoYSl7aWYoUkQoYSwxOTMpKXtyZXR1cm4gSkQoYSwxMjQpfWVsc2UgaWYoIWEpe3Rocm93IHNjYihuZXcgRmZiKElEZSkpfWVsc2V7cmV0dXJuIG51bGx9fQpmdW5jdGlvbiBTM2MoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBuZXcgSDNjO2Nhc2UgMTpyZXR1cm4gbmV3IE0zYztjYXNlIDI6ZGVmYXVsdDpyZXR1cm4gbnVsbDt9fQpmdW5jdGlvbiB6N2IoYSl7c3dpdGNoKEpEKFdNYihhLChCd2MoKSxVdWMpKSwxNzEpLmcpe2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIHRydWU7ZGVmYXVsdDpyZXR1cm4gZmFsc2U7fX0KZnVuY3Rpb24gYmxiKGEsYil7aWYoYj09bnVsbCl7cmV0dXJuIGZhbHNlfXdoaWxlKGEuYSE9YS5iKXtpZihwYihiLHpsYihhKSkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIGpqYihhKXtpZihhLmEuT2IoKSl7cmV0dXJuIHRydWV9aWYoYS5hIT1hLmUpe3JldHVybiBmYWxzZX1hLmE9bmV3IGxzYihhLmYuZik7cmV0dXJuIGEuYS5PYigpfQpmdW5jdGlvbiBLbGIoYSxiKXt2YXIgYyxkO2M9Yi5OYygpO2Q9Yy5sZW5ndGg7aWYoZD09MCl7cmV0dXJuIGZhbHNlfVhDYihhLmMsYS5jLmxlbmd0aCxjKTtyZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gcktjKGEsYil7dmFyIGMsZDtjPWEuYztkPWIuZVthLnBdO2lmKGQ8Yy5hLmMubGVuZ3RoLTEpe3JldHVybiBKRChNbGIoYy5hLGQrMSksOSl9cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGE3YihhLGIpe3ZhciBjLGQ7Zm9yKGQ9bmV3IHJtYihhLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw3Mik7Wk1iKGMsKElxYygpLGNxYyksYil9fQpmdW5jdGlvbiBfM2MoYSxiLGMpe3ZhciBkLGU7Zm9yKGU9bmV3IHJtYihhLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwyNyk7ZnRkKGQsZC5pK2IsZC5qK2MpfX0KZnVuY3Rpb24gYlJjKGEpe3ZhciBiLGMsZDtiPW5ldyBNdGI7Zm9yKGQ9R3RiKGEuZCwwKTtkLmIhPWQuZC5jOyl7Yz1KRChVdGIoZCksNjUpO0F0YihiLGMuYyl9cmV0dXJuIGJ9CmZ1bmN0aW9uIEJDZChhKXt2YXIgYixjLGQsZTtiPTE7Zm9yKGM9MCxlPWEuZ2MoKTtjPGU7KytjKXtkPWEuU2koYyk7Yj0zMSpiKyhkPT1udWxsPzA6dGIoZCkpfXJldHVybiBifQpmdW5jdGlvbiBKdmQoYSl7dmFyIGIsYztjPShiPW5ldyB1NWQsYik7cnZkKGMsJ1QnKTt0Q2QoKCFhLmQmJihhLmQ9bmV3IERkZShyNixhLDExKSksYS5kKSxjKTtyZXR1cm4gY30KZnVuY3Rpb24gaDljKGEsYil7dmFyIGM7Yz1hdihiLmEuZ2MoKSk7RUJiKE9CYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLDEpKSxhLmkpLG5ldyB1OWMoYSxjKSk7cmV0dXJuIGN9CmZ1bmN0aW9uIGFqKGEsYixjLGQpe3ZhciBlO1BiKGIsYS5lLlBkKCkuZ2MoKSk7UGIoYyxhLmMuUGQoKS5nYygpKTtlPWEuYVtiXVtjXTtWQyhhLmFbYl0sYyxkKTtyZXR1cm4gZX0KZnVuY3Rpb24gV0MoYSxiLGMsZCxlKXtlLk9tPWE7ZS5QbT1iO2UuUW09YmRiO2UuX19lbGVtZW50VHlwZUlkJD1jO2UuX19lbGVtZW50VHlwZUNhdGVnb3J5JD1kO3JldHVybiBlfQpmdW5jdGlvbiBPY2QoYSxiLGMsZCxlKXtJY2QoKTtyZXR1cm4gJHduZC5NYXRoLm1pbihZY2QoYSxiLGMsZCxlKSxZY2QoYyxkLGEsYix0ZGQobmV3IEVkZChlLmEsZS5iKSkpKX0KZnVuY3Rpb24gY0ZiKGEsYil7aWYoIWF8fCFifHxhPT1iKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHNFYihhLmQuYyxiLmQuYytiLmQuYikmJnNFYihiLmQuYyxhLmQuYythLmQuYil9CmZ1bmN0aW9uIGRBYigpe1d6YigpO2lmKFR6Yil7cmV0dXJuIG5ldyBjQWIobnVsbCl9cmV0dXJuIE56YihQemIoKSwnY29tLmdvb2dsZS5jb21tb24uYmFzZS5TdHJpbmdzJyl9CmZ1bmN0aW9uIE5iKGEsYil7aWYoIWEpe3Rocm93IHNjYihuZXcgVGViKGhjKCd2YWx1ZSBhbHJlYWR5IHByZXNlbnQ6ICVzJyxXQyhPQyhhSiwxKSxOcWUsMSw1LFtiXSkpKSl9fQpmdW5jdGlvbiBRN2MoYSxiLGMpe3ZhciBkO1RpYihhLmEpO0xsYihjLmksbmV3IF83YyhhKSk7ZD1uZXcgWkRiKEpEKE5pYihhLmEsYi5iKSw2OCkpO1A3YyhhLGQsYik7Yy5mPWR9CmZ1bmN0aW9uIHA5YihhKXt2YXIgYjtmV2IoYSx0cnVlKTtiPVZyZTtYTWIoYSwoQndjKCksTnZjKSkmJihiKz1KRChXTWIoYSxOdmMpLDE3KS5hKTtaTWIoYSxOdmMsamZiKGIpKX0KZnVuY3Rpb24gUVljKGEpe3ZhciBiLGMsZCxlO2U9bmV3IFVsYjtmb3IoZD1hLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksMjcpO2I9VFljKGMpO0tsYihlLGIpfXJldHVybiBlfQpmdW5jdGlvbiBTTmQoYSxiKXt2YXIgYyxkO2Q9MDtpZihhPDY0JiZhPD1iKXtiPWI8NjQ/Yjo2Mztmb3IoYz1hO2M8PWI7YysrKXtkPUljYihkLEpjYigxLGMpKX19cmV0dXJuIGR9CmZ1bmN0aW9uIEZyKGEsYil7dmFyIGMsZDtSYihiLCdwcmVkaWNhdGUnKTtmb3IoZD0wO2EuT2IoKTtkKyspe2M9YS5QYigpO2lmKGIuTGIoYykpe3JldHVybiBkfX1yZXR1cm4gLTF9CmZ1bmN0aW9uIGlzZChhLGIpe3N3aXRjaChiKXtjYXNlIDA6IWEubyYmKGEubz1uZXcgWVFkKChWcGQoKSxTcGQpLE8zLGEsMCkpO2Euby5jLiRiKCk7cmV0dXJuO31FcWQoYSxiKX0KZnVuY3Rpb24gcGlkKGEpe3N3aXRjaChhLmcpe2Nhc2UgMTpyZXR1cm4gbGlkO2Nhc2UgMjpyZXR1cm4ga2lkO2Nhc2UgMzpyZXR1cm4gbWlkO2RlZmF1bHQ6cmV0dXJuIG5pZDt9fQpmdW5jdGlvbiBkQ2QoYSl7dmFyIGIsYztjPShIcGQoKSxiPW5ldyB0dWQsYik7ISFhJiZ0Q2QoKCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSksYyk7cmV0dXJuIGN9CmZ1bmN0aW9uIF9BKGEpe3ZhciBiO2I9bmV3IFhBO2IuYT1hO2IuYj1aQShhKTtiLmM9U0MoaEosaHJlLDIsMiw2LDEpO2IuY1swXT0kQShhKTtiLmNbMV09JEEoYSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIHNuYihhKXtwbmIoKTt2YXIgYixjLGQ7ZD0wO2ZvcihjPWEuSmMoKTtjLk9iKCk7KXtiPWMuUGIoKTtkPWQrKGIhPW51bGw/dGIoYik6MCk7ZD1kfDB9cmV0dXJuIGR9CmZ1bmN0aW9uIGoxYihhKXt2YXIgYixjLGQ7Yz1hLm47ZD1hLm87Yj1hLmQ7cmV0dXJuIG5ldyBnZGQoYy5hLWIuYixjLmItYi5kLGQuYSsoYi5iK2IuYyksZC5iKyhiLmQrYi5hKSl9CmZ1bmN0aW9uIGNNYihhLGIpe2lmKCFhfHwhYnx8YT09Yil7cmV0dXJuIGZhbHNlfXJldHVybiBTeShhLmIuYyxiLmIuYytiLmIuYik8MCYmU3koYi5iLmMsYS5iLmMrYS5iLmIpPDB9CmZ1bmN0aW9uIF9FYihhLGIsYyl7c3dpdGNoKGMuZyl7Y2FzZSAyOmEuYj1iO2JyZWFrO2Nhc2UgMTphLmM9YjticmVhaztjYXNlIDQ6YS5kPWI7YnJlYWs7Y2FzZSAzOmEuYT1iO319CmZ1bmN0aW9uIG5qKGEsYil7dGhpcy5jPWE7dGhpcy5kPWI7dGhpcy5iPXRoaXMuZC90aGlzLmMuYy5QZCgpLmdjKCl8MDt0aGlzLmE9dGhpcy5kJXRoaXMuYy5jLlBkKCkuZ2MoKX0KZnVuY3Rpb24gVmliKGEsYil7bERiKGE+PTAsJ05lZ2F0aXZlIGluaXRpYWwgY2FwYWNpdHknKTtsRGIoYj49MCwnTm9uLXBvc2l0aXZlIGxvYWQgZmFjdG9yJyk7VGliKHRoaXMpfQpmdW5jdGlvbiBhNWMoYSxiKXt2YXIgYyxkO2M9SkQoSkQoTmliKGEuZyxiLmEpLDQ3KS5hLDY4KTtkPUpEKEpEKE5pYihhLmcsYi5iKSw0NykuYSw2OCk7cmV0dXJuIGFNYihjLGQpfQpmdW5jdGlvbiBKY2QoYSl7SWNkKCk7dmFyIGIsYyxkO2M9U0MoYjIsaHJlLDgsMiwwLDEpO2Q9MDtmb3IoYj0wO2I8MjtiKyspe2QrPTAuNTtjW2JdPVFjZChkLGEpfXJldHVybiBjfQpmdW5jdGlvbiB1Q2QoYSxiLGMpe3ZhciBkO2Q9YS5nYygpO2lmKGI+ZCl0aHJvdyBzY2IobmV3IHpIZChiLGQpKTthLlBpKCkmJihjPUFDZChhLGMpKTtyZXR1cm4gYS5CaShiLGMpfQpmdW5jdGlvbiBVTmQoYSxiLGMpe2lmKGE+PTEyOClyZXR1cm4gZmFsc2U7cmV0dXJuIGE8NjQ/SGNiKHVjYihKY2IoMSxhKSxjKSwwKTpIY2IodWNiKEpjYigxLGEtNjQpLGIpLDApfQpmdW5jdGlvbiB6cWUoYSxiKXt3aGlsZShhLmc9PW51bGwmJiFhLmM/UkRkKGEpOmEuZz09bnVsbHx8YS5pIT0wJiZKRChhLmdbYS5pLTFdLDQ5KS5PYigpKXtiLkFpKFNEZChhKSl9fQpmdW5jdGlvbiBnZWIoKXsrK2JlYjt0aGlzLm89bnVsbDt0aGlzLms9bnVsbDt0aGlzLmo9bnVsbDt0aGlzLmQ9bnVsbDt0aGlzLmI9bnVsbDt0aGlzLm49bnVsbDt0aGlzLmE9bnVsbH0KZnVuY3Rpb24geFNiKCl7eFNiPVpjYjt0U2I9bmV3IEFTYignUTEnLDApO3dTYj1uZXcgQVNiKCdRNCcsMSk7dVNiPW5ldyBBU2IoJ1EyJywyKTt2U2I9bmV3IEFTYignUTMnLDMpfQpmdW5jdGlvbiBJN2IoKXtJN2I9WmNiO0g3Yj1uZXcgSzdiKHl2ZSwwKTtGN2I9bmV3IEs3Yihid2UsMSk7RzdiPW5ldyBLN2IoY3dlLDIpO0U3Yj1uZXcgSzdiKCdCT1RIJywzKX0KZnVuY3Rpb24gVG5jKCl7VG5jPVpjYjtSbmM9bmV3IFVuYyh5dmUsMCk7UW5jPW5ldyBVbmMoJ0lOQ09NSU5HX09OTFknLDEpO1NuYz1uZXcgVW5jKCdPVVRHT0lOR19PTkxZJywyKX0KZnVuY3Rpb24gQTdjKCl7QTdjPVpjYjt6N2M9bmV3IEM3YygnTUlOSU1VTV9TUEFOTklOR19UUkVFJywwKTt5N2M9bmV3IEM3YygnTUFYSU1VTV9TUEFOTklOR19UUkVFJywxKX0KZnVuY3Rpb24gdzhjKCl7dzhjPVpjYjtuZXcgS0JkKCdvcmcuZWNsaXBzZS5lbGsuYWRkTGF5b3V0Q29uZmlnJyk7dThjPW5ldyBLOGM7dDhjPW5ldyBGOGM7djhjPW5ldyBJOGN9CmZ1bmN0aW9uIGRwYygpe2RwYz1aY2I7Y3BjPW9zKCgkb2MoKSxXQyhPQyhYViwxKSxFcmUsMjU5LDAsW1JvYyxUb2MsVW9jLFZvYyxXb2MsWG9jLFpvYyxRb2MsU29jLFlvY10pKSl9CmZ1bmN0aW9uIGl5Yygpe2l5Yz1aY2I7aHljPW9zKChkeWMoKSxXQyhPQyhqVywxKSxFcmUsMjQyLDAsW2J5YyxZeGMsX3hjLFp4YywkeGMsVnhjLGF5YyxjeWMsV3hjLFh4Y10pKSl9CmZ1bmN0aW9uIHpDKCl7ekM9WmNiO3lDPXsnYm9vbGVhbic6QUMsJ251bWJlcic6QkMsJ3N0cmluZyc6REMsJ29iamVjdCc6Q0MsJ2Z1bmN0aW9uJzpDQywndW5kZWZpbmVkJzpFQ319CmZ1bmN0aW9uIGJnYyhhKXt2YXIgYixjLGQsZTtmb3IoYz1hLmEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO2dnYyhhLGIsKFJqZCgpLE9qZCkpO2dnYyhhLGIseGpkKX19CmZ1bmN0aW9uIFBmYyhhLGIpe3ZhciBjLGQsZSxmO2M9ZmFsc2U7ZD1hLmFbYl0ubGVuZ3RoO2ZvcihmPTA7ZjxkLTE7ZisrKXtlPWYrMTtjPWN8UWZjKGEsYixmLGUpfXJldHVybiBjfQpmdW5jdGlvbiB0MWQoYSl7dmFyIGI7aWYoIWEuY3x8KGEuQmImMSk9PTAmJihhLmMuRGImNjQpIT0wKXtiPXBSZChhKTtSRChiLDg4KSYmKGEuYz1KRChiLDI5KSl9cmV0dXJuIGEuY30KZnVuY3Rpb24gZGZiKGEpe3ZhciBiO2lmKGE8MCl7cmV0dXJuIExyZX1lbHNlIGlmKGE9PTApe3JldHVybiAwfWVsc2V7Zm9yKGI9Q3JlOyhiJmEpPT0wO2I+Pj0xKTtyZXR1cm4gYn19CmZ1bmN0aW9uIFpBKGEpe3ZhciBiO2lmKGE9PTApe3JldHVybiAnRXRjL0dNVCd9aWYoYTwwKXthPS1hO2I9J0V0Yy9HTVQtJ31lbHNle2I9J0V0Yy9HTVQrJ31yZXR1cm4gYithQihhKX0KZnVuY3Rpb24gcEQoYSl7dmFyIGIsYyxkO2I9fmEubCsxJnpzZTtjPX5hLm0rKGI9PTA/MTowKSZ6c2U7ZD1+YS5oKyhiPT0wJiZjPT0wPzE6MCkmQXNlO3JldHVybiBfQyhiLGMsZCl9CmZ1bmN0aW9uIGZEKGEpe3ZhciBiLGMsZDtiPX5hLmwrMSZ6c2U7Yz1+YS5tKyhiPT0wPzE6MCkmenNlO2Q9fmEuaCsoYj09MCYmYz09MD8xOjApJkFzZTthLmw9YjthLm09YzthLmg9ZH0KZnVuY3Rpb24gZkNjKGEpe3ZhciBiLGM7Yj1hLnQtYS5rW2Euby5wXSphLmQrYS5qW2Euby5wXT5hLmY7Yz1hLnUrYS5lW2Euby5wXSphLmQ+YS5mKmEucyphLmQ7cmV0dXJuIGJ8fGN9CmZ1bmN0aW9uIGZsYihhKXt2YXIgYjtiPWEuYVthLmJdO2lmKGI9PW51bGwpe3JldHVybiBudWxsfVZDKGEuYSxhLmIsbnVsbCk7YS5iPWEuYisxJmEuYS5sZW5ndGgtMTtyZXR1cm4gYn0KZnVuY3Rpb24gSk1iKGEpe3ZhciBiLGM7Yz1uZXcgcU5iO1VNYihjLGEpO1pNYihjLChUT2IoKSxST2IpLGEpO2I9bmV3IElyYjtMTWIoYSxjLGIpO0tNYihhLGMsYik7cmV0dXJuIGN9CmZ1bmN0aW9uIFpNYihhLGIsYyl7Yz09bnVsbD8oIWEucSYmKGEucT1uZXcgSXJiKSxTaWIoYS5xLGIpKTooIWEucSYmKGEucT1uZXcgSXJiKSxRaWIoYS5xLGIsYykpO3JldHVybiBhfQpmdW5jdGlvbiBZTWIoYSxiLGMpe3JldHVybiBjPT1udWxsPyghYS5xJiYoYS5xPW5ldyBJcmIpLFNpYihhLnEsYikpOighYS5xJiYoYS5xPW5ldyBJcmIpLFFpYihhLnEsYixjKSksYX0KZnVuY3Rpb24gcFFjKGEsYil7cmV0dXJuIHFkZChtUWMoSkQoV01iKGIsKGtWYygpLEtVYykpLDg2KSksbmV3IEVkZChhLmMuZS5hLWEuYi5lLmEsYS5jLmUuYi1hLmIuZS5iKSk8PTB9CmZ1bmN0aW9uIEt4YihhLGIsYyl7dmFyIGQsZTtkPW5ldyB0eWIoYixjKTtlPW5ldyB1eWI7YS5iPUl4YihhLGEuYixkLGUpO2UuYnx8KythLmM7YS5iLmI9ZmFsc2U7cmV0dXJuIGUuZH0KZnVuY3Rpb24gZ0QoYSl7dmFyIGIsYztjPWVmYihhLmgpO2lmKGM9PTMyKXtiPWVmYihhLm0pO3JldHVybiBiPT0zMj9lZmIoYS5sKSszMjpiKzIwLTEwfWVsc2V7cmV0dXJuIGMtMTJ9fQpmdW5jdGlvbiBKUmIoYSl7dmFyIGIsYztmb3IoYz1uZXcgcm1iKGEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksODIpO2IuZy5jPS1iLmcuYy1iLmcuYn1FUmIoYSl9CmZ1bmN0aW9uIE5FYihhKXt2YXIgYixjO2ZvcihjPW5ldyBybWIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSw2MCk7Yi5kLmM9LWIuZC5jLWIuZC5ifUhFYihhKX0KZnVuY3Rpb24gbHJiKGEpe3ZhciBiLGMsZDtiPUpEKGEuZSYmYS5lKCksMTApO2Q9KGM9Yi5zbGljZSgpLEpEKFhDKGMsYiksMTApKTtyZXR1cm4gbmV3IHVyYihiLGQsYi5sZW5ndGgpfQpmdW5jdGlvbiBnZ2MoYSxiLGMpe3ZhciBkLGUsZixnO2c9ZEdjKGIsYyk7Zj0wO2ZvcihlPWcuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwxMSk7UWliKGEuYyxkLGpmYihmKyspKX19CmZ1bmN0aW9uIHFuYihhLGIpe3BuYigpO3ZhciBjLGQsZSxmLGc7Zz1mYWxzZTtmb3IoZD1iLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTtnPWd8YS5FYyhjKX1yZXR1cm4gZ30KZnVuY3Rpb24gS2RkKGEpe3ZhciBiLGMsZCxlLGY7Yj1uZXcgQ2RkO2ZvcihkPWEsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2IuYSs9Yy5hO2IuYis9Yy5ifXJldHVybiBifQpmdW5jdGlvbiB1emQoYSxiLGMpe3ZhciBkLGUsZixnO2Y9bnVsbDtnPWI7ZT0keGQoZywnbGFiZWxzJyk7ZD1uZXcgckFkKGEsYyk7Zj0oUnlkKGQuYSxkLmIsZSksZSk7cmV0dXJuIGZ9CmZ1bmN0aW9uIHRHYyhhLGIsYyl7dmFyIGQ7ZD1uZXcgVWxiO3ZHYyhhLGIsZCwoUmpkKCksd2pkKSx0cnVlLGZhbHNlKTt2R2MoYSxjLGQsUWpkLGZhbHNlLGZhbHNlKTtyZXR1cm4gZH0KZnVuY3Rpb24gZmFlKGEsYixjLGQpe3ZhciBlO2U9bGFlKGEsYixjLGQpO2lmKCFlKXtlPWVhZShhLGMsZCk7aWYoISFlJiYhWjlkKGEsYixlKSl7cmV0dXJuIG51bGx9fXJldHVybiBlfQpmdW5jdGlvbiBjYWUoYSxiLGMsZCl7dmFyIGU7ZT1rYWUoYSxiLGMsZCk7aWYoIWUpe2U9YmFlKGEsYyxkKTtpZighIWUmJiFaOWQoYSxiLGUpKXtyZXR1cm4gbnVsbH19cmV0dXJuIGV9CmZ1bmN0aW9uIFhiKGEsYil7dmFyIGM7Zm9yKGM9MDtjPGEuYS5hLmxlbmd0aDtjKyspe2lmKCFKRChibmIoYS5hLGMpLDE3NykuTGIoYikpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIENiKGEsYixjKXtRYihiKTtpZihjLk9iKCkpe01nYihiLEZiKGMuUGIoKSkpO3doaWxlKGMuT2IoKSl7TWdiKGIsYS5hKTtNZ2IoYixGYihjLlBiKCkpKX19cmV0dXJuIGJ9CmZ1bmN0aW9uIGNEKGEsYixjLGQsZSl7dmFyIGY7Zj10RChhLGIpO2MmJmZEKGYpO2lmKGUpe2E9ZUQoYSxiKTtkPyhZQz1wRChhKSk6KFlDPV9DKGEubCxhLm0sYS5oKSl9cmV0dXJuIGZ9CmZ1bmN0aW9uIHRuYihhKXtwbmIoKTt2YXIgYixjLGQ7ZD0xO2ZvcihjPWEuSmMoKTtjLk9iKCk7KXtiPWMuUGIoKTtkPTMxKmQrKGIhPW51bGw/dGIoYik6MCk7ZD1kfDB9cmV0dXJuIGR9CmZ1bmN0aW9uIENCYihhKXt2YXIgYjtLQWIoYSk7Yj1uZXcgSENiO2lmKGEuYS56ZChiKSl7cmV0dXJuIHl1YigpLG5ldyBDdWIodERiKGIuYSkpfXJldHVybiB5dWIoKSx5dWIoKSx4dWJ9CmZ1bmN0aW9uIENSYihhKXt2YXIgYixjO2ZvcihjPW5ldyBybWIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSw4Mik7Yi5mLiRiKCl9WFJiKGEuYixhKTtEUmIoYSl9CmZ1bmN0aW9uIFJNYihhLGIpe3N3aXRjaChiLmcpe2Nhc2UgMDpSRChhLmIsNjI2KXx8KGEuYj1uZXcgRE5iKTticmVhaztjYXNlIDE6UkQoYS5iLDYyNyl8fChhLmI9bmV3IEpOYik7fX0KZnVuY3Rpb24genRkKGEsYil7c3dpdGNoKGIpe2Nhc2UgNzpyZXR1cm4gISFhLmUmJmEuZS5pIT0wO2Nhc2UgODpyZXR1cm4gISFhLmQmJmEuZC5pIT0wO31yZXR1cm4gYXRkKGEsYil9CmZ1bmN0aW9uIG5mYyhhLGIsYyl7YS5nPXRmYyhhLGIsKFJqZCgpLHdqZCksYS5iKTthLmQ9dGZjKGEsYyx3amQsYS5iKTtpZihhLmcuYz09MHx8YS5kLmM9PTApe3JldHVybn1xZmMoYSl9CmZ1bmN0aW9uIG9mYyhhLGIsYyl7YS5nPXRmYyhhLGIsKFJqZCgpLFFqZCksYS5qKTthLmQ9dGZjKGEsYyxRamQsYS5qKTtpZihhLmcuYz09MHx8YS5kLmM9PTApe3JldHVybn1xZmMoYSl9CmZ1bmN0aW9uIE93YyhhLGIsYyl7cmV0dXJuICFQQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYywxNikpLG5ldyBEemIobmV3IFFtZChiLGMpKSkpLnpkKCh3QmIoKSx2QmIpKX0KZnVuY3Rpb24gRzliKCl7RzliPVpjYjtFOWI9bmV3IFI5YjtGOWI9bmV3IFQ5YjtEOWI9bmV3IFY5YjtDOWI9bmV3IFo5YjtCOWI9bmV3IGJhYztBOWI9KHREYihCOWIpLG5ldyBjcWIpfQpmdW5jdGlvbiBlUmMoYSxiLGMpe3RoaXMuZz1hO3RoaXMuZT1uZXcgQ2RkO3RoaXMuZj1uZXcgQ2RkO3RoaXMuZD1uZXcgTXRiO3RoaXMuYj1uZXcgTXRiO3RoaXMuYT1iO3RoaXMuYz1jfQpmdW5jdGlvbiBqNGMoYSxiLGMsZCl7dGhpcy5iPW5ldyBVbGI7dGhpcy5uPW5ldyBVbGI7dGhpcy5pPWQ7dGhpcy5qPWM7dGhpcy5zPWE7dGhpcy50PWI7dGhpcy5yPTA7dGhpcy5kPTB9CmZ1bmN0aW9uIG5CKGEsYixjKXt0aGlzLnE9bmV3ICR3bmQuRGF0ZTt0aGlzLnEuc2V0RnVsbFllYXIoYStoc2UsYixjKTt0aGlzLnEuc2V0SG91cnMoMCwwLDAsMCk7ZUIodGhpcywwKX0KZnVuY3Rpb24ga1dkKGEsYil7dGhpcy5iPWE7Z1dkLmNhbGwodGhpcywoSkQobkRkKFNUZCgoR09kKCksRk9kKS5vKSwxMCksMTkpLGIuaSksYi5nKTt0aGlzLmE9KEdUZCgpLEZUZCl9CmZ1bmN0aW9uIGhzZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgMDohYS5vJiYoYS5vPW5ldyBZUWQoKFZwZCgpLFNwZCksTzMsYSwwKSk7WFFkKGEubyxjKTtyZXR1cm47fUFxZChhLGIsYyl9CmZ1bmN0aW9uIEo1YyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBvOGM7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYihiQmUrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319CmZ1bmN0aW9uIHE3YyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBLN2M7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYihiQmUrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319CmZ1bmN0aW9uIEFvZSgpe29vZSgpO3ZhciBhO2lmKFhuZSlyZXR1cm4gWG5lO2E9c29lKENvZSgnTScsdHJ1ZSkpO2E9dG9lKENvZSgnTScsZmFsc2UpLGEpO1huZT1hO3JldHVybiBYbmV9CmZ1bmN0aW9uIHZBKGEpe3ZhciBiO2lmKGEuYjw9MCl7cmV0dXJuIGZhbHNlfWI9aGdiKCdNTHlkaEhtc1NEa0snLHdnYihfZmIoYS5jLDApKSk7cmV0dXJuIGI+MXx8Yj49MCYmYS5iPDN9CmZ1bmN0aW9uICR6YihhKXtpZihUemIpe3JldHVybiBTQyhBTCxydGUsNTYzLDAsMCwxKX1yZXR1cm4gSkQoVGxiKGEuYSxTQyhBTCxydGUsNTYzLGEuYS5jLmxlbmd0aCwwLDEpKSw4MzUpfQpmdW5jdGlvbiBHX2IoYSl7dmFyIGIsYztiPUpEKFdNYihhLChJcWMoKSxzcWMpKSw5KTtpZihiKXtjPWIuYztQbGIoYy5hLGIpO2MuYS5jLmxlbmd0aD09MCYmUGxiKGdZYihiKS5iLGMpfX0KZnVuY3Rpb24gZmdiKGEpe3ZhciBiLGM7Yj0wO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspe2I9KGI8PDUpLWIrKEFEYihjLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoYykpfDB9cmV0dXJuIGJ9CmZ1bmN0aW9uIFZkZChhKXt2YXIgYixjLGQ7Yj1uZXcgUmRkO2ZvcihkPUd0YihhLDApO2QuYiE9ZC5kLmM7KXtjPUpEKFV0YihkKSw4KTtkdShiLDAsbmV3IEZkZChjKSl9cmV0dXJuIGJ9CmZ1bmN0aW9uIEF4YihhLGIpe3ZhciBjLGQsZTtlPWEuYjt3aGlsZShlKXtjPWEuYS5MZShiLGUuZCk7aWYoYz09MCl7cmV0dXJuIGV9ZD1jPDA/MDoxO2U9ZS5hW2RdfXJldHVybiBudWxsfQpmdW5jdGlvbiBMYWQoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihkPWIsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2c9bmV3IFZhZChhKTtjLnRmKGcpO1FhZChnKX1UaWIoYS5mKX0KZnVuY3Rpb24gX2diKGEsYixjLGQsZSl7dmFyIGYsZztnPWEubGVuZ3RoO2Y9Yy5sZW5ndGg7aWYoYjwwfHxkPDB8fGU8MHx8YitlPmd8fGQrZT5mKXt0aHJvdyBzY2IobmV3IGxkYil9fQpmdW5jdGlvbiB0MGMoYSxiKXt2YXIgYyxkO2M9SkQoa3NkKGEsKGsyYygpLE8xYykpLDE3KS5hO2Q9SkQoa3NkKGIsTzFjKSwxNykuYTtyZXR1cm4gYz09ZD8tMTpjPGQ/LTE6Yz5kPzE6MH0KZnVuY3Rpb24gTHdjKGEpe0lsYihhLmMsKHc4YygpLHU4YykpO2lmKFR5KGEuYSxCZWIoTUQoSkJkKChUd2MoKSxSd2MpKSkpKSl7cmV0dXJuIG5ldyBLbWR9cmV0dXJuIG5ldyBNbWQoYSl9CmZ1bmN0aW9uIGJzKGEpe3doaWxlKCFhLmR8fCFhLmQuT2IoKSl7aWYoISFhLmImJiFlbGIoYS5iKSl7YS5kPUpEKGpsYihhLmIpLDQ5KX1lbHNle3JldHVybiBudWxsfX1yZXR1cm4gYS5kfQpmdW5jdGlvbiBFUGMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiB5emU7ZGVmYXVsdDpjYXNlIDI6cmV0dXJuIDA7Y2FzZSAzOnJldHVybiB6emU7Y2FzZSA0OnJldHVybiBBemU7fX0KZnVuY3Rpb24gJFViKGEsYil7aWYoX1ViKGEsYikpe1JjKGEuYixKRChXTWIoYiwoSXFjKCksUXBjKSksMjIpLGIpO0F0YihhLmEsYik7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fQpmdW5jdGlvbiB0dyhhLGIpe3ZhciBjO2lmKGI9PT1hKXtyZXR1cm4gdHJ1ZX1pZihSRChiLDIyOCkpe2M9SkQoYiwyMjgpO3JldHVybiBwYihhLlpiKCksYy5aYigpKX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIHE4YihhLGIpe2lmKFhNYihhLChJcWMoKSxqcWMpKSYmWE1iKGIsanFjKSl7cmV0dXJuIEpEKFdNYihiLGpxYyksMTcpLmEtSkQoV01iKGEsanFjKSwxNykuYX1yZXR1cm4gMH0KZnVuY3Rpb24gdjhiKGEsYil7aWYoWE1iKGEsKElxYygpLGpxYykpJiZYTWIoYixqcWMpKXtyZXR1cm4gSkQoV01iKGEsanFjKSwxNykuYS1KRChXTWIoYixqcWMpLDE3KS5hfXJldHVybiAwfQpmdW5jdGlvbiBGQ2QoYSxiKXtpZighYS5JaSgpJiZiPT1udWxsKXt0aHJvdyBzY2IobmV3IFRlYigiVGhlICdubyBudWxsJyBjb25zdHJhaW50IGlzIHZpb2xhdGVkIikpfXJldHVybiBifQpmdW5jdGlvbiBGdmQoYSxiLGMpe3ZhciBkLGU7ZT0oZD1uZXcgTF9kLGQpO2F3ZChlLGIsYyk7dENkKCghYS5xJiYoYS5xPW5ldyBYMGQoazYsYSwxMSwxMCkpLGEucSksZSk7cmV0dXJuIGV9CmZ1bmN0aW9uIF91ZChhKXt2YXIgYixjLGQsZTtlPWRkYihUdWQsYSk7Yz1lLmxlbmd0aDtkPVNDKGhKLGhyZSwyLGMsNiwxKTtmb3IoYj0wO2I8YzsrK2Ipe2RbYl09ZVtiXX1yZXR1cm4gZH0KZnVuY3Rpb24gZXQoYSxiLGMpe3ZhciBkLGU7dGhpcy5nPWE7dGhpcy5jPWI7dGhpcy5hPXRoaXM7dGhpcy5kPXRoaXM7ZT1TcChjKTtkPVNDKE1HLEFyZSwyMjYsZSwwLDEpO3RoaXMuYj1kfQpmdW5jdGlvbiB2aWIoYSxiLGMpe3ZhciBkO2ZvcihkPWMtMTtkPj0wJiZhW2RdPT09YltkXTtkLS0pO3JldHVybiBkPDA/MDpEY2IodWNiKGFbZF0sVXNlKSx1Y2IoYltkXSxVc2UpKT8tMToxfQpmdW5jdGlvbiBadWIoYSxiKXt2YXIgYztpZihiKjIrMT49YS5iLmMubGVuZ3RoKXtyZXR1cm59WnViKGEsMipiKzEpO2M9MipiKzI7YzxhLmIuYy5sZW5ndGgmJlp1YihhLGMpOyR1YihhLGIpfQpmdW5jdGlvbiB2RWMoYSxiKXt2YXIgYyxkO2ZvcihkPUd0YihhLDApO2QuYiE9ZC5kLmM7KXtjPUpEKFV0YihkKSwyMTcpO2lmKGMuZS5sZW5ndGg+MCl7Yi5BZChjKTtjLmkmJkNFYyhjKX19fQpmdW5jdGlvbiB5R2MoYSxiKXt2YXIgYztpZighYXx8YT09Ynx8IVhNYihiLChJcWMoKSxfcGMpKSl7cmV0dXJuIGZhbHNlfWM9SkQoV01iKGIsKElxYygpLF9wYykpLDkpO3JldHVybiBjIT1hfQpmdW5jdGlvbiBXY2UoYSl7c3dpdGNoKGEuaSl7Y2FzZSAyOntyZXR1cm4gdHJ1ZX1jYXNlIDE6e3JldHVybiBmYWxzZX1jYXNlIC0xOnsrK2EuY31kZWZhdWx0OntyZXR1cm4gYS5YbCgpfX19CmZ1bmN0aW9uIEtmYyhhLGIsYyl7aWYoIWEuZFtiLnBdW2MucF0pe0pmYyhhLGIsYyk7YS5kW2IucF1bYy5wXT10cnVlO2EuZFtjLnBdW2IucF09dHJ1ZX1yZXR1cm4gYS5hW2IucF1bYy5wXX0KZnVuY3Rpb24gVFNkKGEsYil7aWYoYS5EPT1udWxsJiZhLkIhPW51bGwpe2EuRD1hLkI7YS5CPW51bGx9Y1RkKGEsYj09bnVsbD9udWxsOih0RGIoYiksYikpOyEhYS5DJiZhLmVsKG51bGwpfQpmdW5jdGlvbiBDTmQoYSxiKXt2YXIgYztjPW5ldyBHTmQoKGEuZiYyNTYpIT0wLGEuaSxhLmEsYS5kLChhLmYmMTYpIT0wLGEuaixhLmcsYik7YS5lIT1udWxsfHwoYy5jPWEpO3JldHVybiBjfQpmdW5jdGlvbiBrSWQoYSxiKXt2YXIgYyxkO2Q9SkQoQ3JkKGEuYSw0KSwxMjgpO2M9U0MoWDQsSkVlLDQxMixiLDAsMSk7ZCE9bnVsbCYmJGdiKGQsMCxjLDAsZC5sZW5ndGgpO3JldHVybiBjfQpmdW5jdGlvbiBEYyhhLGIpe3ZhciBjLGQ7Zm9yKGQ9YS5aYigpLkJjKCkuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwxNik7aWYoYy5HYyhiKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gZXUoYSxiLGMpe3ZhciBkLGUsZixnO3REYihjKTtnPWZhbHNlO2Y9YS5kZChiKTtmb3IoZT1jLkpjKCk7ZS5PYigpOyl7ZD1lLlBiKCk7Zi5SYihkKTtnPXRydWV9cmV0dXJuIGd9CmZ1bmN0aW9uIFB2KGEsYil7dmFyIGM7aWYoYT09PWIpe3JldHVybiB0cnVlfWVsc2UgaWYoUkQoYiw5MSkpe2M9SkQoYiw5MSk7cmV0dXJuIE54KGRuKGEpLGMudmMoKSl9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBNaWIoYSxiLGMpe3ZhciBkLGU7Zm9yKGU9Yy5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDQzKTtpZihhLnplKGIsZC5rZCgpKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gdW4oYSxiLGMsZCl7Y24oKTtyZXR1cm4gbmV3IEp4KFdDKE9DKExLLDEpLHRyZSw0MywwLFsoYWsoYSxiKSxuZXcgY3AoYSxiKSksKGFrKGMsZCksbmV3IGNwKGMsZCkpXSkpfQpmdW5jdGlvbiBYUWIoKXtYUWI9WmNiO1ZRYj1TeChXQyhPQyhpMiwxKSxFcmUsODYsMCxbKFRnZCgpLFBnZCksUWdkXSkpO1dRYj1TeChXQyhPQyhpMiwxKSxFcmUsODYsMCxbU2dkLE9nZF0pKX0KZnVuY3Rpb24gV2hkKCl7V2hkPVpjYjtVaGQ9bmV3IE1ZYigxNSk7VGhkPW5ldyBOQmQoKExnZCgpLEtmZCksVWhkKTtWaGQ9ZmdkO1BoZD1SZWQ7UWhkPUJmZDtTaGQ9RWZkO1JoZD1EZmR9CmZ1bmN0aW9uIGJvZCgpe2JvZD1aY2I7JG5kPW5ldyBjb2QoJ0VMSycsMCk7X25kPW5ldyBjb2QoJ0pTT04nLDEpO1puZD1uZXcgY29kKCdET1QnLDIpO2FvZD1uZXcgY29kKCdTVkcnLDMpfQpmdW5jdGlvbiB2VmMoKXt2VmM9WmNiO3VWYz1uZXcgd1ZjKHp2ZSwwKTtzVmM9bmV3IHdWYyhMemUsMSk7dFZjPW5ldyB3VmMoJ0ZBTicsMik7clZjPW5ldyB3VmMoJ0NPTlNUUkFJTlQnLDMpfQpmdW5jdGlvbiBPVGMoKXtPVGM9WmNiO05UYz1uZXcgUFRjKHl2ZSwwKTtNVGM9bmV3IFBUYygnTUlERExFX1RPX01JRERMRScsMSk7TFRjPW5ldyBQVGMoJ0FWT0lEX09WRVJMQVAnLDIpfQpmdW5jdGlvbiBqJGMoKXtqJGM9WmNiO2ckYz1uZXcgbCRjKHl2ZSwwKTtoJGM9bmV3IGwkYygnUkFESUFMX0NPTVBBQ1RJT04nLDEpO2kkYz1uZXcgbCRjKCdXRURHRV9DT01QQUNUSU9OJywyKX0KZnVuY3Rpb24gV3ljKCl7V3ljPVpjYjtWeWM9bmV3IFh5YygnU1RBQ0tFRCcsMCk7VHljPW5ldyBYeWMoJ1JFVkVSU0VfU1RBQ0tFRCcsMSk7VXljPW5ldyBYeWMoJ1NFUVVFTkNFRCcsMil9CmZ1bmN0aW9uIGxBYigpe2xBYj1aY2I7aUFiPW5ldyBtQWIoJ0NPTkNVUlJFTlQnLDApO2pBYj1uZXcgbUFiKCdJREVOVElUWV9GSU5JU0gnLDEpO2tBYj1uZXcgbUFiKCdVTk9SREVSRUQnLDIpfQpmdW5jdGlvbiBlaWQoKXtlaWQ9WmNiO2NpZD1uZXcgZmlkKHBDZSwwKTtiaWQ9bmV3IGZpZCgnSU5DTFVERV9DSElMRFJFTicsMSk7ZGlkPW5ldyBmaWQoJ1NFUEFSQVRFX0NISUxEUkVOJywyKX0KZnVuY3Rpb24gTmRkKGEsYixjKXt2YXIgZCxlLGY7ZD1uZXcgTXRiO2ZvcihmPUd0YihjLDApO2YuYiE9Zi5kLmM7KXtlPUpEKFV0YihmKSw4KTtBdGIoZCxuZXcgRmRkKGUpKX1ldShhLGIsZCl9CmZ1bmN0aW9uIFFkZChhKXt2YXIgYixjLGQ7Yj0wO2Q9U0MoYjIsaHJlLDgsYS5iLDAsMSk7Yz1HdGIoYSwwKTt3aGlsZShjLmIhPWMuZC5jKXtkW2IrK109SkQoVXRiKGMpLDgpfXJldHVybiBkfQpmdW5jdGlvbiBrZShhLGIpe3ZhciBjLGQ7Yz1KRChhLmQuQWMoYiksMTYpO2lmKCFjKXtyZXR1cm4gbnVsbH1kPWEuZS5oYygpO2QuRmMoYyk7YS5lLmQtPWMuZ2MoKTtjLiRiKCk7cmV0dXJuIGR9CmZ1bmN0aW9uIHJ4YihhKXt2YXIgYjtiPWEuYS5jLmxlbmd0aDtpZihiPjApe3JldHVybiBfd2IoYi0xLGEuYS5jLmxlbmd0aCksT2xiKGEuYSxiLTEpfWVsc2V7dGhyb3cgc2NiKG5ldyBIcWIpfX0KZnVuY3Rpb24gYkdjKGEsYil7dmFyIGMsZDtkPWEuY1tiXTtpZihkPT0wKXtyZXR1cm59YS5jW2JdPTA7YS5kLT1kO2M9YisxO3doaWxlKGM8YS5hLmxlbmd0aCl7YS5hW2NdLT1kO2MrPWMmLWN9fQpmdW5jdGlvbiBOMGMoYSxiKXt2YXIgYztiLlNnKCdNaW4gU2l6ZSBQcmVwcm9jZXNzaW5nJywxKTtjPWRuZChhKTttc2QoYSwoaDFjKCksZTFjKSxjLmEpO21zZChhLGIxYyxjLmIpO2IuVGcoKX0KZnVuY3Rpb24gTXdjKGEsYil7dmFyIGM7Yz1KQmQoKFR3YygpLFJ3YykpIT1udWxsJiZiLlFnKCkhPW51bGw/QmViKE1EKGIuUWcoKSkpL0JlYihNRChKQmQoUndjKSkpOjE7UWliKGEuYixiLGMpfQpmdW5jdGlvbiBVeShhLGIpe3ZhciBjO2M9dGNiKGEsYik7aWYoRGNiKFJjYihhLGIpLDApfEJjYihSY2IoYSxjKSwwKSl7cmV0dXJuIGN9cmV0dXJuIHRjYihtcmUsUmNiKExjYihjLDYzKSwxKSl9CmZ1bmN0aW9uIFRZZChhKXt2YXIgYjtiPSghYS5hJiYoYS5hPW5ldyBYMGQoZDYsYSw5LDUpKSxhLmEpO2lmKGIuaSE9MCl7cmV0dXJuIGdaZChKRChuRGQoYiwwKSw2NzkpKX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gc0RkKGEpe3ZhciBiOysrYS5qO2lmKGEuaT09MCl7YS5nPW51bGx9ZWxzZSBpZihhLmk8YS5nLmxlbmd0aCl7Yj1hLmc7YS5nPWEuWmkoYS5pKTskZ2IoYiwwLGEuZywwLGEuaSl9fQpmdW5jdGlvbiBhOWMoYSxiLGMpe2lmKGI8MCl7dGhyb3cgc2NiKG5ldyBtZGIod0JlK2IpKX1pZihiPGEuai5jLmxlbmd0aCl7UmxiKGEuaixiLGMpfWVsc2V7JDhjKGEsYik7SWxiKGEuaixjKX19CmZ1bmN0aW9uIG1EYihhLGIsYyl7aWYoYT5iKXt0aHJvdyBzY2IobmV3IFRlYih2dGUrYSt3dGUrYikpfWlmKGE8MHx8Yj5jKXt0aHJvdyBzY2IobmV3IG9kYih2dGUrYSt4dGUrYitrdGUrYykpfX0KZnVuY3Rpb24gSmJkKGEpe2lmKCFhLmF8fChhLmEuaSY4KT09MCl7dGhyb3cgc2NiKG5ldyBXZWIoJ0VudW1lcmF0aW9uIGNsYXNzIGV4cGVjdGVkIGZvciBsYXlvdXQgb3B0aW9uICcrYS5mKSl9fQpmdW5jdGlvbiBVZWIoYSl7Z3ouY2FsbCh0aGlzLCdUaGUgZ2l2ZW4gc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQgZm9yIGluZGl2aWR1YWwgc3BhY2luZ3MuJyxhKX0KZnVuY3Rpb24gR3MoKXtGcy5jYWxsKHRoaXMsbmV3IFlzYihPdigxNikpKTtiaygyLGdyZSk7dGhpcy5iPTI7dGhpcy5hPW5ldyAkcyhudWxsLG51bGwsMCxudWxsKTtPcyh0aGlzLmEsdGhpcy5hKX0KZnVuY3Rpb24gdXooYSl7c3ooKTtZeSh0aGlzKTskeSh0aGlzKTt0aGlzLmU9YTtfeSh0aGlzLGEpO3RoaXMuZz1hPT1udWxsP1JxZTphZGIoYSk7dGhpcy5hPScnO3RoaXMuYj1hO3RoaXMuYT0nJ30KZnVuY3Rpb24gWGtjKGEsYixjLGQpe1JrYyh0aGlzKTt0aGlzLmM9U0MoUlAsSnZlLDksYS5hLmMubGVuZ3RoLDAsMSk7dGhpcy5lPWI7VGxiKGEuYSx0aGlzLmMpO3RoaXMuZj1jO3RoaXMuYj1kfQpmdW5jdGlvbiBKbGIoYSxiLGMpe3ZhciBkLGU7dkRiKGIsYS5jLmxlbmd0aCk7ZD1jLk5jKCk7ZT1kLmxlbmd0aDtpZihlPT0wKXtyZXR1cm4gZmFsc2V9WENiKGEuYyxiLGQpO3JldHVybiB0cnVlfQpmdW5jdGlvbiBtbGIoYSxiKXt2YXIgYyxkO2M9YS5hLmxlbmd0aC0xO3doaWxlKGIhPWEuYil7ZD1iLTEmYztWQyhhLmEsYixhLmFbZF0pO2I9ZH1WQyhhLmEsYS5iLG51bGwpO2EuYj1hLmIrMSZjfQpmdW5jdGlvbiBsbGIoYSxiKXt2YXIgYyxkO2M9YS5hLmxlbmd0aC0xO2EuYz1hLmMtMSZjO3doaWxlKGIhPWEuYyl7ZD1iKzEmYztWQyhhLmEsYixhLmFbZF0pO2I9ZH1WQyhhLmEsYS5jLG51bGwpfQpmdW5jdGlvbiBPTmQoYSl7dmFyIGIsYztpZihhPT1udWxsKXJldHVybiBudWxsO2ZvcihiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXtpZighX05kKGFbYl0pKXJldHVybiBhW2JdfXJldHVybiBudWxsfQpmdW5jdGlvbiBLbWIoYSl7dmFyIGIsYyxkLGUsZjtmPTE7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07Zj0zMSpmKyhiIT1udWxsP3RiKGIpOjApO2Y9ZnwwfXJldHVybiBmfQpmdW5jdGlvbiBvcyhhKXt2YXIgYixjLGQsZSxmO2I9e307Zm9yKGQ9YSxlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07YlsnOicrKGMuZiE9bnVsbD9jLmY6JycrYy5nKV09Y31yZXR1cm4gYn0KZnVuY3Rpb24gZHNiKGEsYixjKXt2YXIgZCxlLGYsZztmb3IoZT1jLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtpZihhLmIuemUoYixkLmpkKCkpKXtyZXR1cm4gZH19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIHJIYihhLGIpe2lmKCFhKXtyZXR1cm4gMH1pZihiJiYhYS5qKXtyZXR1cm4gMH1pZihSRChhLDEyNikpe2lmKEpEKGEsMTI2KS5hLmI9PTApe3JldHVybiAwfX1yZXR1cm4gYS5mZigpfQpmdW5jdGlvbiBzSGIoYSxiKXtpZighYSl7cmV0dXJuIDB9aWYoYiYmIWEuayl7cmV0dXJuIDB9aWYoUkQoYSwxMjYpKXtpZihKRChhLDEyNikuYS5hPT0wKXtyZXR1cm4gMH19cmV0dXJuIGEuZ2YoKX0KZnVuY3Rpb24gT0ZiKGEpe2lmKGEuYyE9YS5iLmJ8fGEuaSE9YS5nLmIpe19DYihhLmEuYywwKTtLbGIoYS5hLGEuYik7S2xiKGEuYSxhLmcpO2EuYz1hLmIuYjthLmk9YS5nLmJ9cmV0dXJuIGEuYX0KZnVuY3Rpb24gSEJjKGEpe3ZhciBiLGMsZDtkPTA7Zm9yKGM9bmV3IGVzKElyKGEuYS5KYygpLG5ldyBlcikpO2NzKGMpOyl7Yj1KRChkcyhjKSwxOCk7Yi5jLmk9PWIuZC5pfHwrK2R9cmV0dXJuIGR9CmZ1bmN0aW9uIHVyKGEpe3ZhciBiO1FiKGEpO01iKHRydWUsJ251bWJlclRvQWR2YW5jZSBtdXN0IGJlIG5vbm5lZ2F0aXZlJyk7Zm9yKGI9MDtiPDAmJmNzKGEpO2IrKyl7ZHMoYSl9cmV0dXJuIGJ9CmZ1bmN0aW9uIFNrYyhhLGIpe2lmKFhNYihhLChJcWMoKSxqcWMpKSYmWE1iKGIsanFjKSl7cmV0dXJuICRlYihKRChXTWIoYSxqcWMpLDE3KS5hLEpEKFdNYihiLGpxYyksMTcpLmEpfXJldHVybiAwfQpmdW5jdGlvbiBaVmIoYSxiKXt2YXIgYyxkLGU7Yz1hO2U9MDtkb3tpZihjPT1iKXtyZXR1cm4gZX1kPWMuZTtpZighZCl7dGhyb3cgc2NiKG5ldyBTZWIpfWM9Z1liKGQpOysrZX13aGlsZSh0cnVlKX0KZnVuY3Rpb24gVzRjKGEsYil7dmFyIGMsZCxlO2U9Yi1hLmY7Zm9yKGQ9bmV3IHJtYihhLmQpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwzMTYpO3Y0YyhjLGMuZSxjLmYrZSl9YS5mPWJ9CmZ1bmN0aW9uIHJSZChhLGIpe3ZhciBjLGQsZTtkPWEuVmsoYixudWxsKTtlPW51bGw7aWYoYil7ZT0oRU9kKCksYz1uZXcgTlpkLGMpO0daZChlLGEucil9ZD1xUmQoYSxlLGQpOyEhZCYmZC5saigpfQpmdW5jdGlvbiBOU2IoYSl7dmFyIGI7Yj1uZXcgZlRiKGEpO0RUYihhLmEsTFNiLG5ldyBkbmIoV0MoT0MoY1AsMSksTnFlLDM3NCwwLFtiXSkpKTshIWIuZCYmSWxiKGIuZixiLmQpO3JldHVybiBiLmZ9CmZ1bmN0aW9uIFdYYihhLGIpe3ZhciBjO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2lmKGE9PShBRGIoYyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGMpKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gV05kKGEsYil7cmV0dXJuIGI8YS5sZW5ndGgmJihBRGIoYixhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGIpIT02MykmJihBRGIoYixhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGIpIT0zNSl9CmZ1bmN0aW9uIHJiKGEpe3JldHVybiBWRChhKT9oSjpURChhKT9MSTpTRChhKT9HSTpRRChhKT9hLk9tOlVDKGEpP2EuT206YS5PbXx8QXJyYXkuaXNBcnJheShhKSYmT0MoWkgsMSl8fFpIfQpmdW5jdGlvbiBqZmUoYSl7cmV0dXJuICFhP251bGw6KGEuaSYxKSE9MD9hPT1wY2I/R0k6YT09Y0U/VUk6YT09YkU/UUk6YT09YUU/TEk6YT09ZEU/WEk6YT09b2NiP2NKOmE9PSREP0hJOklJOmF9CmZ1bmN0aW9uIHdFYyhhLGIpe3ZhciBjLGQ7ZD15dmIoYS5kLDEpIT0wO2M9dHJ1ZTt3aGlsZShjKXtjPWZhbHNlO2M9Yi5jLmtnKGIuZSxkKTtjPWN8R0VjKGEsYixkLGZhbHNlKTtkPSFkfUJFYyhhKX0KZnVuY3Rpb24gTmZjKGEsYixjLGQpe3ZhciBlLGY7YS5hPWI7Zj1kPzA6MTthLmY9KGU9bmV3IExmYyhhLmMsYS5hLGMsZiksbmV3IG1nYyhjLGEuYSxlLGEuZSxhLmIsYS5jPT0oVUVjKCksU0VjKSkpfQpmdW5jdGlvbiBfMmMoYSxiKXt2YXIgYyxkLGU7ZD1mYWxzZTtjPWIucS5kO2lmKGIuZDxhLmIpe2U9dDRjKGIucSxhLmIpO2lmKGIucS5kPmUpe3U0YyhiLnEsZSk7ZD1jIT1iLnEuZH19cmV0dXJuIGR9CmZ1bmN0aW9uIEZaYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aT1iLmk7aj1iLmo7ZD1hLmY7ZT1kLmk7Zj1kLmo7Zz1pLWU7aD1qLWY7Yz0kd25kLk1hdGguc3FydChnKmcraCpoKTtyZXR1cm4gY30KZnVuY3Rpb24gSWRkKGEsYil7dmFyIGM7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyl7aWYoYT09KEFEYihjLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoYykpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBrQ2MoYSl7dmFyIGIsYztmb3IoYz1uZXcgcm1iKGEucik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDkpO2lmKGEubltiLnBdPD0wKXtyZXR1cm4gYn19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGFPZChhKXt2YXIgYixjO2lmKGE9PW51bGwpcmV0dXJuIGZhbHNlO2ZvcihiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXtpZighX05kKGFbYl0pKXJldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gaXFlKGEpe3ZhciBiO2lmKCEoYS5jLmM8MD9hLmE+PWEuYy5iOmEuYTw9YS5jLmIpKXt0aHJvdyBzY2IobmV3IHF1Yil9Yj1hLmE7YS5hKz1hLmMuYzsrK2EuYjtyZXR1cm4gamZiKGIpfQpmdW5jdGlvbiBTYyhhLGIpe3ZhciBjLGQ7Yz1KRChhLmMuQWMoYiksMTYpO2lmKCFjKXtyZXR1cm4gYS5qYygpfWQ9YS5oYygpO2QuRmMoYyk7YS5kLT1jLmdjKCk7Yy4kYigpO3JldHVybiBhLm1jKGQpfQpmdW5jdGlvbiBUdmQoYSxiKXt2YXIgYyxkO2Q9bHFkKGEpO2lmKCFkKXshQ3ZkJiYoQ3ZkPW5ldyBlMWQpO2M9KEJOZCgpLElOZChiKSk7ZD1uZXcgbDlkKGMpO3RDZChkLkJsKCksYSl9cmV0dXJuIGR9CmZ1bmN0aW9uIGVoZCgpe2VoZD1aY2I7YmhkPW5ldyBmaGQocENlLDApO2FoZD1uZXcgZmhkKCdDT05UQUlORVInLDEpO2NoZD1uZXcgZmhkKCdQQVJFTlQnLDIpO2RoZD1uZXcgZmhkKCdST09UJywzKX0KZnVuY3Rpb24gb3pjKCl7b3pjPVpjYjtsemM9bmV3IHB6YygnQ09OU0VSVkFUSVZFJywwKTttemM9bmV3IHB6YygnQ09OU0VSVkFUSVZFX1NPRlQnLDEpO256Yz1uZXcgcHpjKCdTTE9QUFknLDIpfQpmdW5jdGlvbiBveGMoKXtveGM9WmNiO2x4Yz1uZXcgcXhjKCdEVU1NWV9OT0RFX09WRVInLDApO214Yz1uZXcgcXhjKCdEVU1NWV9OT0RFX1VOREVSJywxKTtueGM9bmV3IHF4YygnRVFVQUwnLDIpfQpmdW5jdGlvbiBkNWMoKXt0aGlzLmE9bmV3IGU1Yzt0aGlzLmY9bmV3IGc1Yyh0aGlzKTt0aGlzLmI9bmV3IGk1Yyh0aGlzKTt0aGlzLmk9bmV3IGs1Yyh0aGlzKTt0aGlzLmU9bmV3IG01Yyh0aGlzKX0KZnVuY3Rpb24gRkMoYSl7ekMoKTt0aHJvdyBzY2IobmV3IFVCKCJVbmV4cGVjdGVkIHR5cGVvZiByZXN1bHQgJyIrYSsiJzsgcGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyB0byB0aGUgR1dUIHRlYW0iKSl9CmZ1bmN0aW9uIFhjZShhKXtzd2l0Y2goYS5pKXtjYXNlIC0yOntyZXR1cm4gdHJ1ZX1jYXNlIC0xOntyZXR1cm4gZmFsc2V9Y2FzZSAxOnstLWEuY31kZWZhdWx0OntyZXR1cm4gYS5ZbCgpfX19CmZ1bmN0aW9uIE1oYihhKXt2YXIgYjtpZihhLmMhPTApe3JldHVybiBhLmN9Zm9yKGI9MDtiPGEuYS5sZW5ndGg7YisrKXthLmM9YS5jKjMzKyhhLmFbYl0mLTEpfWEuYz1hLmMqYS5lO3JldHVybiBhLmN9CmZ1bmN0aW9uIHpsYihhKXt2YXIgYjtyRGIoYS5hIT1hLmIpO2I9YS5kLmFbYS5hXTtxbGIoYS5iPT1hLmQuYyYmYiE9bnVsbCk7YS5jPWEuYTthLmE9YS5hKzEmYS5kLmEubGVuZ3RoLTE7cmV0dXJuIGJ9CmZ1bmN0aW9uIHQkYihhKXt2YXIgYjtiPW5ldyBJWGIoYS5hKTtVTWIoYixhKTtaTWIoYiwoSXFjKCksa3FjKSxhKTtiLm8uYT1hLmc7Yi5vLmI9YS5mO2Iubi5hPWEuaTtiLm4uYj1hLmo7cmV0dXJuIGJ9CmZ1bmN0aW9uIGFFYyhhKXt2YXIgYjtiPUs5YygkRGMpO0pEKFdNYihhLChJcWMoKSxXcGMpKSwyMikuR2MoKCRvYygpLFdvYykpJiZFOWMoYiwoQ1FiKCkselFiKSwodTViKCksajViKSk7cmV0dXJuIGJ9CmZ1bmN0aW9uIFBZYyhhKXt2YXIgYixjLGQsZTtlPW5ldyBRcmI7Zm9yKGQ9bmV3IHJtYihhKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMjcpO2I9U1ljKGMpO3hlKGUsYil9cmV0dXJuIGV9CmZ1bmN0aW9uIEtFYihhLGIsYyl7dmFyIGQsZTtmb3IoZT1iLmEuYS5lYygpLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksNjApO2lmKExFYihhLGQsYykpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIGM2YihhLGIsYyxkKXt2YXIgZSxmO2ZvcihmPWEuSmMoKTtmLk9iKCk7KXtlPUpEKGYuUGIoKSw3Mik7ZS5uLmE9Yi5hKyhkLmEtZS5vLmEpLzI7ZS5uLmI9Yi5iO2IuYis9ZS5vLmIrY319CmZ1bmN0aW9uIHNLYihhLGIsYyl7dmFyIGQ7ZD1uZXcgQ0piKGEsYik7UmMoYS5yLGIuJGYoKSxkKTtpZihjJiYhcWpkKGEudSkpe2QuYz1uZXcgY0liKGEuZCk7TGxiKGIuUGYoKSxuZXcgdktiKGQpKX19CmZ1bmN0aW9uIHZjYihhLGIpe3ZhciBjO2lmKENjYihhKSYmQ2NiKGIpKXtjPWEtYjtpZighaXNOYU4oYykpe3JldHVybiBjfX1yZXR1cm4gbUQoQ2NiKGEpP05jYihhKTphLENjYihiKT9OY2IoYik6Yil9CmZ1bmN0aW9uIERQYyhhLGIsYyl7aWYoJHduZC5NYXRoLmFicyhiLWEpPHh6ZXx8JHduZC5NYXRoLmFicyhjLWEpPHh6ZSl7cmV0dXJuIHRydWV9cmV0dXJuIGItYT54emU/YS1jPnh6ZTpjLWE+eHplfQpmdW5jdGlvbiBUdihiLGMpe1FiKGIpO3RyeXtyZXR1cm4gYi54YyhjKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDIxMSl8fFJEKGEsMTY5KSl7cmV0dXJuIG51bGx9ZWxzZSB0aHJvdyBzY2IoYSl9fQpmdW5jdGlvbiBVdihiLGMpe1FiKGIpO3RyeXtyZXR1cm4gYi5BYyhjKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDIxMSl8fFJEKGEsMTY5KSl7cmV0dXJuIG51bGx9ZWxzZSB0aHJvdyBzY2IoYSl9fQpmdW5jdGlvbiByM2MoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBuZXcgZTNjO2Nhc2UgMTpyZXR1cm4gbmV3IEQzYztjYXNlIDI6cmV0dXJuIG5ldyBrM2M7ZGVmYXVsdDpyZXR1cm4gbnVsbDt9fQpmdW5jdGlvbiBWY2QoYSxiKXt2YXIgYyxkLGU7ZT0xO2M9YTtkPWI+PTA/YjotYjt3aGlsZShkPjApe2lmKGQlMj09MCl7Yyo9YztkPWQvMnwwfWVsc2V7ZSo9YztkLT0xfX1yZXR1cm4gYjwwPzEvZTplfQpmdW5jdGlvbiBXY2QoYSxiKXt2YXIgYyxkLGU7ZT0xO2M9YTtkPWI+PTA/YjotYjt3aGlsZShkPjApe2lmKGQlMj09MCl7Yyo9YztkPWQvMnwwfWVsc2V7ZSo9YztkLT0xfX1yZXR1cm4gYjwwPzEvZTplfQpmdW5jdGlvbiB6cWQoYSxiKXt2YXIgYyxkLGUsZjtmPShlPWE/bHFkKGEpOm51bGwsaWZlKChkPWIsZT9lLkRsKCk6bnVsbCxkKSkpO2lmKGY9PWIpe2M9bHFkKGEpOyEhYyYmYy5EbCgpfXJldHVybiBmfQpmdW5jdGlvbiB6WmQoYSxiLGMpe3ZhciBkLGU7ZT1hLmI7YS5iPWI7aWYoKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wKXtkPW5ldyBnX2QoYSwxLDMsZSxiKTshYz8oYz1kKTpjLmtqKGQpfXJldHVybiBjfQpmdW5jdGlvbiBCWmQoYSxiLGMpe3ZhciBkLGU7ZT1hLmY7YS5mPWI7aWYoKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wKXtkPW5ldyBnX2QoYSwxLDAsZSxiKTshYz8oYz1kKTpjLmtqKGQpfXJldHVybiBjfQpmdW5jdGlvbiBWdWQoYSxiLGMpe3ZhciBkLGU7ZT1hLmE7YS5hPWI7aWYoKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wKXtkPW5ldyBnX2QoYSwxLDEsZSxiKTshYz8oYz1kKTpjLmtqKGQpfXJldHVybiBjfQpmdW5jdGlvbiBUa2MoYSxiLGMpe3ZhciBkLGU7Zm9yKGU9YS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDkpO2lmKGQ9PWIpe3JldHVybiAtMX1lbHNlIGlmKGQ9PWMpe3JldHVybiAxfX1yZXR1cm4gMH0KZnVuY3Rpb24gYmxjKGEsYil7dmFyIGM7Yz1uZXcgdFliKGEpO3JZYihjLChEWWIoKSx5WWIpKTtaTWIoYywoSXFjKCksa3FjKSxiKTtaTWIoYywoQndjKCksRXZjKSwoYWpkKCksWGlkKSk7cmV0dXJuIGN9CmZ1bmN0aW9uIHdQYyhhKXtyZXR1cm4gKFJqZCgpLElqZCkuR2MoYS5qKT9CZWIoTUQoV01iKGEsKElxYygpLENxYykpKSk6S2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2EuaS5uLGEubixhLmFdKSkuYn0KZnVuY3Rpb24gRWliKGEsYixjLGQsZSl7aWYoYj09MHx8ZD09MCl7cmV0dXJufWI9PTE/KGVbZF09R2liKGUsYyxkLGFbMF0pKTpkPT0xPyhlW2JdPUdpYihlLGEsYixjWzBdKSk6RmliKGEsYyxlLGIsZCl9CmZ1bmN0aW9uIE1tYihhLGIsYyxkLGUsZixnLGgpe3ZhciBpO2k9Yzt3aGlsZShmPGcpe2k+PWR8fGI8YyYmaC5MZShhW2JdLGFbaV0pPD0wP1ZDKGUsZisrLGFbYisrXSk6VkMoZSxmKyssYVtpKytdKX19CmZ1bmN0aW9uIEwzYyhhLGIsYyl7dmFyIGQsZSxmLGc7ZD1jL2EuZ2MoKTtlPTA7Zm9yKGc9YS5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDE4Nik7VzRjKGYsZi5mK2QqZSk7VDRjKGYsYixkKTsrK2V9fQpmdW5jdGlvbiBzNGMoYSl7dmFyIGIsYyxkO2Q9MDtmb3IoYz1uZXcgcm1iKGEuYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDE3Mik7ZD0kd25kLk1hdGgubWF4KGQsYi5nKX1yZXR1cm4gZH0KZnVuY3Rpb24gSEVjKGEpe3ZhciBiLGMsZDtmb3IoZD1uZXcgcm1iKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDIxNyk7Yj1jLmMuaWcoKT9jLmY6Yy5hOyEhYiYmUEZjKGIsYy5qKX19CmZ1bmN0aW9uIHBKZChhKXt2YXIgYixjLGQsZTtpZihhIT1udWxsKXtmb3IoYz0wO2M8YS5sZW5ndGg7KytjKXtiPWFbY107aWYoYil7SkQoYi5nLDM3MSk7ZT1iLmk7Zm9yKGQ9MDtkPGU7KytkKTt9fX19CmZ1bmN0aW9uIE1tKGEpe3ZhciBiO3N3aXRjaChhLmdjKCkpe2Nhc2UgMDpyZXR1cm4gcG07Y2FzZSAxOnJldHVybiBuZXcgdnkoUWIoYS5YYigwKSkpO2RlZmF1bHQ6Yj1hO3JldHVybiBuZXcgR3goYik7fX0KZnVuY3Rpb24gYm8oYSl7WWwoKTtzd2l0Y2goYS5nYygpKXtjYXNlIDA6cmV0dXJuIEx4KCksS3g7Y2FzZSAxOnJldHVybiBuZXcgeHkoYS5KYygpLlBiKCkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBNeChhKTt9fQpmdW5jdGlvbiBhcShhKXtZbCgpO3N3aXRjaChhLmMpe2Nhc2UgMDpyZXR1cm4gTHgoKSxLeDtjYXNlIDE6cmV0dXJuIG5ldyB4eShFcihuZXcgRHJiKGEpKSk7ZGVmYXVsdDpyZXR1cm4gbmV3IF9wKGEpO319CmZ1bmN0aW9uIGpmYihhKXt2YXIgYixjO2lmKGE+LTEyOSYmYTwxMjgpe3JldHVybiBsZmIoKSxiPWErMTI4LGM9a2ZiW2JdLCFjJiYoYz1rZmJbYl09bmV3IFllYihhKSksY31yZXR1cm4gbmV3IFllYihhKX0KZnVuY3Rpb24gVWZiKGEpe3ZhciBiLGM7aWYoYT4tMTI5JiZhPDEyOCl7cmV0dXJuIFdmYigpLGI9YSsxMjgsYz1WZmJbYl0sIWMmJihjPVZmYltiXT1uZXcgT2ZiKGEpKSxjfXJldHVybiBuZXcgT2ZiKGEpfQpmdW5jdGlvbiBGMmIoYSxiKXt2YXIgYztpZihhLmMubGVuZ3RoPT0wKXtyZXR1cm59Yz1KRChUbGIoYSxTQyhSUCxKdmUsOSxhLmMubGVuZ3RoLDAsMSkpLDE5OSk7UW1iKGMsbmV3IFIyYik7QzJiKGMsYil9CmZ1bmN0aW9uIEwyYihhLGIpe3ZhciBjO2lmKGEuYy5sZW5ndGg9PTApe3JldHVybn1jPUpEKFRsYihhLFNDKFJQLEp2ZSw5LGEuYy5sZW5ndGgsMCwxKSksMTk5KTtRbWIoYyxuZXcgVzJiKTtDMmIoYyxiKX0KZnVuY3Rpb24gV1RiKGEsYil7dmFyIGM7aWYoYS5hLmMubGVuZ3RoPjApe2M9SkQoTWxiKGEuYSxhLmEuYy5sZW5ndGgtMSksNTYxKTtpZigkVWIoYyxiKSl7cmV0dXJufX1JbGIoYS5hLG5ldyBhVmIoYikpfQpmdW5jdGlvbiBVZGMoYSl7QWRjKCk7dmFyIGIsYztiPWEuZC5jLWEuZS5jO2M9SkQoYS5nLDE1Mik7TGxiKGMuYixuZXcgbmVjKGIpKTtMbGIoYy5jLG5ldyBwZWMoYikpO29mYihjLmksbmV3IHJlYyhiKSl9CmZ1bmN0aW9uIGpmYyhhKXt2YXIgYjtiPW5ldyBVZ2I7Yi5hKz0nVmVydGljYWxTZWdtZW50ICc7UGdiKGIsYS5lKTtiLmErPScgJztRZ2IoYixFYihuZXcgR2IsbmV3IHJtYihhLmspKSk7cmV0dXJuIGIuYX0KZnVuY3Rpb24gbmhiKGEsYil7dmFyIGM7YS5jPWI7YS5hPWdpYihiKTthLmE8NTQmJihhLmY9KGM9Yi5kPjE/Q0RiKGIuYVswXSxiLmFbMV0pOkNEYihiLmFbMF0sMCksT2NiKGIuZT4wP2M6R2NiKGMpKSkpfQpmdW5jdGlvbiBjZ2MoYSxiKXt2YXIgYyxkLGU7Yz0wO2ZvcihlPWxZYihhLGIpLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksMTEpO2MrPVdNYihkLChJcWMoKSxzcWMpKSE9bnVsbD8xOjB9cmV0dXJuIGN9CmZ1bmN0aW9uIFlOYyhhLGIsYyl7dmFyIGQsZSxmO2Q9MDtmb3IoZj1HdGIoYSwwKTtmLmIhPWYuZC5jOyl7ZT1CZWIoTUQoVXRiKGYpKSk7aWYoZT5jKXticmVha31lbHNlIGU+PWImJisrZH1yZXR1cm4gZH0KZnVuY3Rpb24gVWFkKGEpe3ZhciBiO2I9SkQoVHNiKGEuYy5jLCcnKSwyMzIpO2lmKCFiKXtiPW5ldyB1YWQoRGFkKENhZChuZXcgRWFkLCcnKSwnT3RoZXInKSk7VXNiKGEuYy5jLCcnLGIpfXJldHVybiBifQpmdW5jdGlvbiBzdmQoYSl7dmFyIGI7aWYoKGEuRGImNjQpIT0wKXJldHVybiBHcWQoYSk7Yj1uZXcgSmdiKEdxZChhKSk7Yi5hKz0nIChuYW1lOiAnO0VnYihiLGEuemIpO2IuYSs9JyknO3JldHVybiBiLmF9CmZ1bmN0aW9uIEx2ZChhLGIsYyl7dmFyIGQsZTtlPWEuc2I7YS5zYj1iO2lmKChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCl7ZD1uZXcgZ19kKGEsMSw0LGUsYik7IWM/KGM9ZCk6Yy5raihkKX1yZXR1cm4gY30KZnVuY3Rpb24gaERkKGEsYixjKXt2YXIgZDthLllpKGEuaSsxKTtkPWEuV2koYixjKTtiIT1hLmkmJiRnYihhLmcsYixhLmcsYisxLGEuaS1iKTtWQyhhLmcsYixkKTsrK2EuaTthLkppKGIsYyk7YS5LaSgpfQpmdW5jdGlvbiBzUmQoYSxiLGMpe3ZhciBkLGU7ZT1hLnI7YS5yPWI7aWYoKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wKXtkPW5ldyBnX2QoYSwxLDgsZSxhLnIpOyFjPyhjPWQpOmMua2ooZCl9cmV0dXJuIGN9CmZ1bmN0aW9uIEswZChhLGIsYyl7dmFyIGQsZTtkPW5ldyBpX2QoYS5lLDMsMTMsbnVsbCwoZT1iLmMsZT9lOihjUGQoKSxST2QpKSxBVWQoYSxiKSxmYWxzZSk7IWM/KGM9ZCk6Yy5raihkKTtyZXR1cm4gY30KZnVuY3Rpb24gTDBkKGEsYixjKXt2YXIgZCxlO2Q9bmV3IGlfZChhLmUsNCwxMywoZT1iLmMsZT9lOihjUGQoKSxST2QpKSxudWxsLEFVZChhLGIpLGZhbHNlKTshYz8oYz1kKTpjLmtqKGQpO3JldHVybiBjfQpmdW5jdGlvbiBVOGQoYSxiKXt2YXIgYyxkLGUsZjtiLmJqKGEuYSk7Zj1KRChDcmQoYS5hLDgpLDE5ODEpO2lmKGYhPW51bGwpe2ZvcihjPWYsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7bnVsbC5SbSgpfX19CmZ1bmN0aW9uIGhhZShhLGIpe3ZhciBjLGQ7Yz1KRChiLDY3Nik7ZD1jLmJsKCk7IWQmJmMuY2woZD1SRChiLDg4KT9uZXcgdmFlKGEsSkQoYiwyOSkpOm5ldyBIYWUoYSxKRChiLDE1NSkpKTtyZXR1cm4gZH0KZnVuY3Rpb24gWmViKGEpe2EtPWE+PjEmMTQzMTY1NTc2NTthPShhPj4yJjg1ODk5MzQ1OSkrKGEmODU4OTkzNDU5KTthPShhPj40KSthJjI1MjY0NTEzNTthKz1hPj44O2ErPWE+PjE2O3JldHVybiBhJjYzfQpmdW5jdGlvbiBOc2QoYSxiKXtzd2l0Y2goYil7Y2FzZSAxOiFhLm4mJihhLm49bmV3IFgwZCh6MyxhLDEsNykpO1JHZChhLm4pO3JldHVybjtjYXNlIDI6UHNkKGEsbnVsbCk7cmV0dXJuO31pc2QoYSxiKX0KZnVuY3Rpb24gZEdjKGEsYil7c3dpdGNoKGIuZyl7Y2FzZSAyOmNhc2UgMTpyZXR1cm4gbFliKGEsYik7Y2FzZSAzOmNhc2UgNDpyZXR1cm4gZHYobFliKGEsYikpO31yZXR1cm4gcG5iKCkscG5iKCksbW5ifQpmdW5jdGlvbiBMQmIoYSxiKXt2YXIgYztjPW5ldyBIQ2I7aWYoIWEuYS56ZChjKSl7S0FiKGEpO3JldHVybiB5dWIoKSx5dWIoKSx4dWJ9cmV0dXJuIHl1YigpLG5ldyBDdWIodERiKEtCYihhLGMuYSxiKSkpfQpmdW5jdGlvbiB1aGIoYSl7dmFyIGI7dmNiKGEsMCk8MCYmKGE9d2NiKHFEKENjYihhKT9OY2IoYSk6YSkpKTtyZXR1cm4gYj1QY2IoTGNiKGEsMzIpKSw2NC0oYiE9MD9lZmIoYik6ZWZiKFBjYihhKSkrMzIpfQpmdW5jdGlvbiBwYihhLGIpe3JldHVybiBWRChhKT9jZ2IoYSxiKTpURChhKT9DZWIoYSxiKTpTRChhKT8odERiKGEpLFhEKGEpPT09WEQoYikpOlFEKGEpP2EuRmIoYik6VUMoYSk/bWIoYSxiKTp6eihhLGIpfQpmdW5jdGlvbiB2eGIoYSxiKXt2YXIgYztpZihiLmEpe2M9Yi5hLmEubGVuZ3RoOyFhLmE/KGEuYT1uZXcgV2diKGEuZCkpOlFnYihhLmEsYS5iKTtPZ2IoYS5hLGIuYSxiLmQubGVuZ3RoLGMpfXJldHVybiBhfQpmdW5jdGlvbiB3SmIoYSl7c0piKCk7dmFyIGIsYyxkLGU7Zm9yKGM9eUpiKCksZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO2lmKE5sYihiLmEsYSwwKSE9LTEpe3JldHVybiBifX1yZXR1cm4gckpifQpmdW5jdGlvbiBTdihiLGMpe1FiKGIpO3RyeXtyZXR1cm4gYi5fYihjKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDIxMSl8fFJEKGEsMTY5KSl7cmV0dXJuIGZhbHNlfWVsc2UgdGhyb3cgc2NiKGEpfX0KZnVuY3Rpb24gTGsoYixjKXtRYihiKTt0cnl7cmV0dXJuIGIuR2MoYyl9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwyMTEpfHxSRChhLDE2OSkpe3JldHVybiBmYWxzZX1lbHNlIHRocm93IHNjYihhKX19CmZ1bmN0aW9uIE1rKGIsYyl7UWIoYik7dHJ5e3JldHVybiBiLktjKGMpfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMjExKXx8UkQoYSwxNjkpKXtyZXR1cm4gZmFsc2V9ZWxzZSB0aHJvdyBzY2IoYSl9fQpmdW5jdGlvbiBJc2QoYSxiLGMsZCl7c3dpdGNoKGIpe2Nhc2UgMTpyZXR1cm4gIWEubiYmKGEubj1uZXcgWDBkKHozLGEsMSw3KSksYS5uO2Nhc2UgMjpyZXR1cm4gYS5rO31yZXR1cm4gZXNkKGEsYixjLGQpfQpmdW5jdGlvbiBncWQoYSxiLGMpe2lmKGI8MCl7eHFkKGEsYyl9ZWxzZXtpZighYy5vaygpKXt0aHJvdyBzY2IobmV3IFRlYihMQ2UrYy52ZSgpK01DZSkpfUpEKGMsNjkpLnRrKCkuQmsoYSxhLmRpKCksYil9fQpmdW5jdGlvbiB3RGIoYSxiLGMpe2lmKGE8MHx8Yj5jKXt0aHJvdyBzY2IobmV3IG1kYih2dGUrYSt4dGUrYisnLCBzaXplOiAnK2MpKX1pZihhPmIpe3Rocm93IHNjYihuZXcgVGViKHZ0ZSthK3d0ZStiKSl9fQpmdW5jdGlvbiB1UmQoYSxiKXt2YXIgYztjPShhLkJiJjI1NikhPTA7Yj8oYS5CYnw9MjU2KTooYS5CYiY9LTI1Nyk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSwyLGMsYikpfQpmdW5jdGlvbiBaVGQoYSxiKXt2YXIgYztjPShhLkJiJjI1NikhPTA7Yj8oYS5CYnw9MjU2KTooYS5CYiY9LTI1Nyk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSw4LGMsYikpfQpmdW5jdGlvbiAkVGQoYSxiKXt2YXIgYztjPShhLkJiJjUxMikhPTA7Yj8oYS5CYnw9NTEyKTooYS5CYiY9LTUxMyk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSw5LGMsYikpfQpmdW5jdGlvbiB2UmQoYSxiKXt2YXIgYztjPShhLkJiJjUxMikhPTA7Yj8oYS5CYnw9NTEyKTooYS5CYiY9LTUxMyk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSwzLGMsYikpfQpmdW5jdGlvbiBFWWQoYSxiKXt2YXIgYztjPShhLkJiJjI1NikhPTA7Yj8oYS5CYnw9MjU2KTooYS5CYiY9LTI1Nyk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSw4LGMsYikpfQpmdW5jdGlvbiBIWmQoYSxiLGMpe3ZhciBkLGU7ZT1hLmE7YS5hPWI7aWYoKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wKXtkPW5ldyBnX2QoYSwxLDUsZSxhLmEpOyFjPyhjPWQpOk5GZChjLGQpfXJldHVybiBjfQpmdW5jdGlvbiBKUWQoYSl7dmFyIGI7aWYoKGEuRGImNjQpIT0wKXJldHVybiBHcWQoYSk7Yj1uZXcgSmdiKEdxZChhKSk7Yi5hKz0nIChzb3VyY2U6ICc7RWdiKGIsYS5kKTtiLmErPScpJztyZXR1cm4gYi5hfQpmdW5jdGlvbiBGZ2UoYSxiKXt2YXIgYztpZihhLmI9PS0xJiYhIWEuYSl7Yz1hLmEubWsoKTthLmI9IWM/V1RkKGEuYy56aCgpLGEuYSk6YS5jLkRoKGEuYS5JaigpLGMpfXJldHVybiBhLmMudWgoYS5iLGIpfQpmdW5jdGlvbiBPWGQoYSxiKXt2YXIgYyxkO2ZvcihkPW5ldyBDSGQoYSk7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoQUhkKGQpLDI5KTtpZihYRChiKT09PVhEKGMpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBtMmIoYSl7dmFyIGIsYztiPWEuaztpZihiPT0oRFliKCksd1liKSl7Yz1KRChXTWIoYSwoSXFjKCksVHBjKSksNjQpO3JldHVybiBjPT0oUmpkKCkseGpkKXx8Yz09T2pkfXJldHVybiBmYWxzZX0KZnVuY3Rpb24gUEFiKGEpe3ZhciBiO2I9UUFiKGEpO2lmKHljYihiLmEsMCkpe3JldHVybiBIdWIoKSxIdWIoKSxHdWJ9cmV0dXJuIEh1YigpLG5ldyBNdWIoQWNiKGIuYSwwKT9EcWIoYikvT2NiKGIuYSk6MCl9CmZ1bmN0aW9uIHJoYihhLGIpe3RoaXMuZT1iO3RoaXMuYT11aGIoYSk7dGhpcy5hPDU0Pyh0aGlzLmY9T2NiKGEpKToodGhpcy5jPShHaGIoKSx2Y2IoYSwwKT49MD9haWIoYSk6T2hiKGFpYihHY2IoYSkpKSkpfQpmdW5jdGlvbiBRVmIoYSxiLGMsZCxlLGYpe3RoaXMuZT1uZXcgVWxiO3RoaXMuZj0oRXljKCksRHljKTtJbGIodGhpcy5lLGEpO3RoaXMuZD1iO3RoaXMuYT1jO3RoaXMuYj1kO3RoaXMuZj1lO3RoaXMuYz1mfQpmdW5jdGlvbiBzQ2QoYSxiLGMpe3ZhciBkO2Q9YS5nYygpO2lmKGI+ZCl0aHJvdyBzY2IobmV3IHpIZChiLGQpKTtpZihhLlBpKCkmJmEuR2MoYykpe3Rocm93IHNjYihuZXcgVGViKE1EZSkpfWEuRGkoYixjKX0KZnVuY3Rpb24gWF9kKGEsYil7dmFyIGMsZDtmb3IoZD1uZXcgQ0hkKGEpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSwxNDEpO2lmKFhEKGIpPT09WEQoYykpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIGJhZShhLGIsYyl7dmFyIGQsZSxmO2Y9KGU9ZzFkKGEuYixiKSxlKTtpZihmKXtkPUpEKE9hZShpYWUoYSxmKSwnJyksMjkpO2lmKGQpe3JldHVybiBrYWUoYSxkLGIsYyl9fXJldHVybiBudWxsfQpmdW5jdGlvbiBlYWUoYSxiLGMpe3ZhciBkLGUsZjtmPShlPWcxZChhLmIsYiksZSk7aWYoZil7ZD1KRChPYWUoaWFlKGEsZiksJycpLDI5KTtpZihkKXtyZXR1cm4gbGFlKGEsZCxiLGMpfX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gWWxlKGEpe3ZhciBiLGMsZDtkPTA7Yz1hLmxlbmd0aDtmb3IoYj0wO2I8YztiKyspe2FbYl09PTMyfHxhW2JdPT0xM3x8YVtiXT09MTB8fGFbYl09PTl8fChhW2QrK109YVtiXSl9cmV0dXJuIGR9CmZ1bmN0aW9uIENFYyhhKXt2YXIgYjtpZihhLmcpe2I9YS5jLmlnKCk/YS5mOmEuYTtFRWMoYi5hLGEubyx0cnVlKTtFRWMoYi5hLGEubyxmYWxzZSk7Wk1iKGEubywoQndjKCksRXZjKSwoYWpkKCksV2lkKSl9fQpmdW5jdGlvbiBnbGIoYSl7dmFyIGI7Yj1hLmFbYS5jLTEmYS5hLmxlbmd0aC0xXTtpZihiPT1udWxsKXtyZXR1cm4gbnVsbH1hLmM9YS5jLTEmYS5hLmxlbmd0aC0xO1ZDKGEuYSxhLmMsbnVsbCk7cmV0dXJuIGJ9CmZ1bmN0aW9uIEJHYihhKXt2YXIgYixjO2ZvcihjPWEucC5hLmVjKCkuSmMoKTtjLk9iKCk7KXtiPUpEKGMuUGIoKSwyMTYpO2lmKGIuZiYmYS5iW2IuY108LTEuMEUtMTApe3JldHVybiBifX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gY09kKGEpe2lmKGE+PTY1JiZhPD03MCl7cmV0dXJuIGEtNjUrMTB9aWYoYT49OTcmJmE8PTEwMil7cmV0dXJuIGEtOTcrMTB9aWYoYT49NDgmJmE8PTU3KXtyZXR1cm4gYS00OH1yZXR1cm4gMH0KZnVuY3Rpb24gSGViKGEsYil7aWYoYTxiKXtyZXR1cm4gLTF9aWYoYT5iKXtyZXR1cm4gMX1pZihhPT1iKXtyZXR1cm4gYT09MD9IZWIoMS9hLDEvYik6MH1yZXR1cm4gaXNOYU4oYSk/aXNOYU4oYik/MDoxOi0xfQpmdW5jdGlvbiBhcWQoYSxiKXt2YXIgYztjPVJUZChhLGIpO2lmKFJEKGMsMzMwKSl7cmV0dXJuIEpEKGMsMzUpfXRocm93IHNjYihuZXcgVGViKExDZStiKyInIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSIpKX0KZnVuY3Rpb24gZExiKGEsYil7c3dpdGNoKGEuYi5nKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBiO2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG5ldyBnZGQoYi5kLDAsYi5hLGIuYik7ZGVmYXVsdDpyZXR1cm4gbnVsbDt9fQpmdW5jdGlvbiBlT2MoYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gbmV3IHBPYztjYXNlIDE6cmV0dXJuIG5ldyBmT2M7Y2FzZSAyOnJldHVybiBuZXcga09jO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBTZWIpO319CmZ1bmN0aW9uIFdnZChhKXtzd2l0Y2goYS5nKXtjYXNlIDI6cmV0dXJuIFFnZDtjYXNlIDE6cmV0dXJuIFBnZDtjYXNlIDQ6cmV0dXJuIE9nZDtjYXNlIDM6cmV0dXJuIFNnZDtkZWZhdWx0OnJldHVybiBSZ2Q7fX0KZnVuY3Rpb24gRTFiKGEpe3N3aXRjaChKRChXTWIoYSwoSXFjKCksJHBjKSksMzEyKS5nKXtjYXNlIDE6Wk1iKGEsJHBjLChxcGMoKSxucGMpKTticmVhaztjYXNlIDI6Wk1iKGEsJHBjLChxcGMoKSxwcGMpKTt9fQpmdW5jdGlvbiB1V2MoKXt1V2M9WmNiO3RXYz1COWMoQjljKEc5YyhCOWMoQjljKEc5YyhFOWMobmV3IEo5YywoX1BjKCksWVBjKSwoWlNjKCksWVNjKSksWlBjKSxVU2MpLFdTYyksJFBjKSxRU2MpLFhTYyl9CmZ1bmN0aW9uIHc1Yygpe3c1Yz1aY2I7dDVjPW5ldyB4NWMoJ1AxX1NUUlVDVFVSRScsMCk7dTVjPW5ldyB4NWMoJ1AyX1BST0NFU1NJTkdfT1JERVInLDEpO3Y1Yz1uZXcgeDVjKCdQM19FWEVDVVRJT04nLDIpfQpmdW5jdGlvbiBSM2MoKXtSM2M9WmNiO08zYz1uZXcgVDNjKCdFUVVBTF9CRVRXRUVOX1NUUlVDVFVSRVMnLDApO1EzYz1uZXcgVDNjKCdUT19BU1BFQ1RfUkFUSU8nLDEpO1AzYz1uZXcgVDNjKHl2ZSwyKX0KZnVuY3Rpb24gV2tkKCl7V2tkPVpjYjtVa2Q9bmV3IFhrZCgnUEFSQUxMRUxfTk9ERScsMCk7VGtkPW5ldyBYa2QoJ0hJRVJBUkNISUNBTF9OT0RFJywxKTtWa2Q9bmV3IFhrZCgnUk9PVF9OT0RFJywyKX0KZnVuY3Rpb24geGhkKCl7eGhkPVpjYjt3aGQ9bmV3IHloZChldWUsMCk7dWhkPW5ldyB5aGQoJ1BPTFlMSU5FJywxKTt0aGQ9bmV3IHloZCgnT1JUSE9HT05BTCcsMik7dmhkPW5ldyB5aGQoJ1NQTElORVMnLDMpfQpmdW5jdGlvbiBUZ2QoKXtUZ2Q9WmNiO1JnZD1uZXcgWGdkKGV1ZSwwKTtRZ2Q9bmV3IFhnZChhdWUsMSk7UGdkPW5ldyBYZ2QoX3RlLDIpO09nZD1uZXcgWGdkKGx1ZSwzKTtTZ2Q9bmV3IFhnZCgnVVAnLDQpfQpmdW5jdGlvbiBJMGIoYSxiKXtiLlNnKCdTb3J0IGVuZCBsYWJlbHMnLDEpO0VCYihCQmIoREJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYiwxNikpLG5ldyBUMGIpLG5ldyBWMGIpLG5ldyBYMGIpO2IuVGcoKX0KZnVuY3Rpb24gU1JkKGEsYil7dmFyIGM7Yz0oYS5CYiZORWUpIT0wO2I/KGEuQmJ8PU5FZSk6KGEuQmImPS0xMDI1KTsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBqX2QoYSwxLDEwLGMsYikpfQpmdW5jdGlvbiBZUmQoYSxiKXt2YXIgYztjPShhLkJiJk1zZSkhPTA7Yj8oYS5CYnw9TXNlKTooYS5CYiY9LTQwOTcpOyhhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGpfZChhLDEsMTIsYyxiKSl9CmZ1bmN0aW9uICRSZChhLGIpe3ZhciBjO2M9KGEuQmImd3NlKSE9MDtiPyhhLkJifD13c2UpOihhLkJiJj0tMjA0OSk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSwxMSxjLGIpKX0KZnVuY3Rpb24gWlJkKGEsYil7dmFyIGM7Yz0oYS5CYiZkRmUpIT0wO2I/KGEuQmJ8PWRGZSk6KGEuQmImPS04MTkzKTsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBqX2QoYSwxLDE1LGMsYikpfQpmdW5jdGlvbiBzSmQoYSxiKXt2YXIgYyxkLGU7aWYoYS5kPT1udWxsKXsrK2EuZTstLWEuZn1lbHNle2U9Yi5qZCgpO2M9Yi54aSgpO2Q9KGMmSHFlKSVhLmQubGVuZ3RoO0hKZChhLGQsdUpkKGEsZCxjLGUpKX19CmZ1bmN0aW9uIFRHZChhLGIsYyl7dmFyIGQsZTtpZihhLk1qKCkpe2U9YS5OaigpO2Q9cERkKGEsYixjKTthLkdqKGEuRmooNyxqZmIoYyksZCxiLGUpKTtyZXR1cm4gZH1lbHNle3JldHVybiBwRGQoYSxiLGMpfX0KZnVuY3Rpb24gY2ZlKGEpe3ZhciBiLGM7Zm9yKGM9ZGZlKFdTZChhKSkuSmMoKTtjLk9iKCk7KXtiPU9EKGMuUGIoKSk7aWYoRnVkKGEsYikpe3JldHVybiBuT2QoKG1PZCgpLGxPZCksYil9fXJldHVybiBudWxsfQpmdW5jdGlvbiB5VWIoYSl7dmFyIGIsYyxkO2I9bmV3IFVsYjtmb3IoZD1uZXcgcm1iKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDU4Nik7S2xiKGIsSkQoYy5BZigpLDE2KSl9cmV0dXJuIGJ9CmZ1bmN0aW9uIGJSYihhLGIpe3ZhciBjLGQ7Zm9yKGQ9bmV3IHJtYihiKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksNDcpO1BsYihhLmIuYixjLmIpO3JSYihKRChjLmEsMTk0KSxKRChjLmIsODIpKX19CmZ1bmN0aW9uIEhyKGEpe3ZhciBiLGM7Yz1LZ2IobmV3IFVnYiw5MSk7Yj10cnVlO3doaWxlKGEuT2IoKSl7Ynx8KGMuYSs9THFlLGMpO2I9ZmFsc2U7UGdiKGMsYS5QYigpKX1yZXR1cm4gKGMuYSs9J10nLGMpLmF9CmZ1bmN0aW9uIGtNYihhLGIpe3ZhciBjO2M9SGViKGEuYi5jLGIuYi5jKTtpZihjIT0wKXtyZXR1cm4gY31jPUhlYihhLmEuYSxiLmEuYSk7aWYoYyE9MCl7cmV0dXJuIGN9cmV0dXJuIEhlYihhLmEuYixiLmEuYil9CmZ1bmN0aW9uIHNYYihhKXt2YXIgYixjO2M9SkQoV01iKGEsKEJ3YygpLHJ1YykpLDg2KTtpZihjPT0oVGdkKCksUmdkKSl7Yj1CZWIoTUQoV01iKGEsVHRjKSkpO3JldHVybiBiPj0xP1FnZDpPZ2R9cmV0dXJuIGN9CmZ1bmN0aW9uIGpiYyhhKXtzd2l0Y2goSkQoV01iKGEsKEJ3YygpLHl1YykpLDIyMCkuZyl7Y2FzZSAxOnJldHVybiBuZXcgSWpjO2Nhc2UgMzpyZXR1cm4gbmV3IHprYztkZWZhdWx0OnJldHVybiBuZXcgQ2pjO319CmZ1bmN0aW9uIFNqZChhKXtzd2l0Y2goYS5nKXtjYXNlIDE6cmV0dXJuIFFqZDtjYXNlIDI6cmV0dXJuIHhqZDtjYXNlIDM6cmV0dXJuIHdqZDtjYXNlIDQ6cmV0dXJuIE9qZDtkZWZhdWx0OnJldHVybiBQamQ7fX0KZnVuY3Rpb24gVGpkKGEpe3N3aXRjaChhLmcpe2Nhc2UgMTpyZXR1cm4gT2pkO2Nhc2UgMjpyZXR1cm4gUWpkO2Nhc2UgMzpyZXR1cm4geGpkO2Nhc2UgNDpyZXR1cm4gd2pkO2RlZmF1bHQ6cmV0dXJuIFBqZDt9fQpmdW5jdGlvbiBVamQoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiB3amQ7Y2FzZSAyOnJldHVybiBPamQ7Y2FzZSAzOnJldHVybiBRamQ7Y2FzZSA0OnJldHVybiB4amQ7ZGVmYXVsdDpyZXR1cm4gUGpkO319CmZ1bmN0aW9uIExBYihhKXtpZihhLmMpe0xBYihhLmMpfWVsc2UgaWYoYS5kKXt0aHJvdyBzY2IobmV3IFdlYigiU3RyZWFtIGFscmVhZHkgdGVybWluYXRlZCwgY2FuJ3QgYmUgbW9kaWZpZWQgb3IgdXNlZCIpKX19CmZ1bmN0aW9uIHlsYyhhKXt2YXIgYjtpZighYS5hKXt0aHJvdyBzY2IobmV3IFdlYignQ2Fubm90IG9mZnNldCBhbiB1bmFzc2lnbmVkIGN1dC4nKSl9Yj1hLmMtYS5iO2EuYis9YjtBbGMoYSxiKTtCbGMoYSxiKX0KZnVuY3Rpb24gZ21kKGEsYixjKXt2YXIgZCxlO2lmKGEuYyl7cW5kKGEuYyxiLGMpfWVsc2V7Zm9yKGU9bmV3IHJtYihhLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxNjIpO2dtZChkLGIsYyl9fX0KZnVuY3Rpb24gQmUoYSxiKXt2YXIgYyxkLGU7dERiKGIpO2M9ZmFsc2U7Zm9yKGQ9bmV3IHJtYihhKTtkLmE8ZC5jLmMubGVuZ3RoOyl7ZT1wbWIoZCk7aWYoYi5HYyhlKSl7cW1iKGQpO2M9dHJ1ZX19cmV0dXJuIGN9CmZ1bmN0aW9uIGdjZShhLGIpe3ZhciBjLGQsZSxmLGc7Zz1LZmUoYS5lLnpoKCksYik7Zj0wO2M9SkQoYS5nLDEyMik7Zm9yKGU9MDtlPGEuaTsrK2Upe2Q9Y1tlXTtnLlpsKGQuSWsoKSkmJisrZn1yZXR1cm4gZn0KZnVuY3Rpb24gQXNiKGEsYixjKXt2YXIgZDtkPWEuYS5nZXQoYik7YS5hLnNldChiLGM9PT11bmRlZmluZWQ/bnVsbDpjKTtpZihkPT09dW5kZWZpbmVkKXsrK2EuYzsrK2EuYi5nfWVsc2V7KythLmR9cmV0dXJuIGR9CmZ1bmN0aW9uIEtCYyhhLGIsYyl7dmFyIGQsZTtmb3IoZT1hLmEuZWMoKS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDkpO2lmKEFlKGMsSkQoTWxiKGIsZC5wKSwxNikpKXtyZXR1cm4gZH19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIE9iZShhLGIsYyl7dmFyIGQsZTtlPVJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTA/bmV3IGxkZShiLGEpOm5ldyBpZGUoYixhKTtmb3IoZD0wO2Q8YzsrK2Qpe1ljZShlKX1yZXR1cm4gZX0KZnVuY3Rpb24geFdjKGEsYixjKXt2YXIgZDtkPTA7ISFiJiYoVmdkKGEuYSk/KGQrPWIuZi5hLzIpOihkKz1iLmYuYi8yKSk7ISFjJiYoVmdkKGEuYSk/KGQrPWMuZi5hLzIpOihkKz1jLmYuYi8yKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIFZQYihhLGIsYyl7dmFyIGQ7ZD1jOyFkJiYoZD12bGQobmV3IHdsZCwwKSk7ZC5TZyhydmUsMik7SVZiKGEuYixiLGQuYmgoMSkpO1hQYihhLGIsZC5iaCgxKSk7clZiKGIsZC5iaCgxKSk7ZC5UZygpfQpmdW5jdGlvbiBiQ2QoYSxiLGMpe3ZhciBkLGU7ZD0oSHBkKCksZT1uZXcgQnNkLGUpO3pzZChkLGIpO0FzZChkLGMpOyEhYSYmdENkKCghYS5hJiYoYS5hPW5ldyBxVmQodTMsYSw1KSksYS5hKSxkKTtyZXR1cm4gZH0KZnVuY3Rpb24gVUJkKGEsYixjKXt2YXIgZCxlO2Q9SkQoYi5tZihhLmEpLDM0KTtlPUpEKGMubWYoYS5hKSwzNCk7cmV0dXJuIGQhPW51bGwmJmUhPW51bGw/Q2RiKGQsZSk6ZCE9bnVsbD8tMTplIT1udWxsPzE6MH0KZnVuY3Rpb24gbFliKGEsYil7dmFyIGM7YS5pfHxkWWIoYSk7Yz1KRChLcWIoYS5nLGIpLDQ3KTtyZXR1cm4gIWM/KHBuYigpLHBuYigpLG1uYik6bmV3IElqYihhLmosSkQoYy5hLDE3KS5hLEpEKGMuYiwxNykuYSl9CmZ1bmN0aW9uIHRjYihhLGIpe3ZhciBjO2lmKENjYihhKSYmQ2NiKGIpKXtjPWErYjtpZihGc2U8YyYmYzxEc2Upe3JldHVybiBjfX1yZXR1cm4gd2NiKGtEKENjYihhKT9OY2IoYSk6YSxDY2IoYik/TmNiKGIpOmIpKX0KZnVuY3Rpb24gRmNiKGEsYil7dmFyIGM7aWYoQ2NiKGEpJiZDY2IoYikpe2M9YSpiO2lmKEZzZTxjJiZjPERzZSl7cmV0dXJuIGN9fXJldHVybiB3Y2Iob0QoQ2NiKGEpP05jYihhKTphLENjYihiKT9OY2IoYik6YikpfQpmdW5jdGlvbiBNY2IoYSxiKXt2YXIgYztpZihDY2IoYSkmJkNjYihiKSl7Yz1hLWI7aWYoRnNlPGMmJmM8RHNlKXtyZXR1cm4gY319cmV0dXJuIHdjYih2RChDY2IoYSk/TmNiKGEpOmEsQ2NiKGIpP05jYihiKTpiKSl9CmZ1bmN0aW9uIERiKGIsYyxkKXt2YXIgZTt0cnl7Q2IoYixjLGQpfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsNTkwKSl7ZT1hO3Rocm93IHNjYihuZXcgdWRiKGUpKX1lbHNlIHRocm93IHNjYihhKX1yZXR1cm4gY30KZnVuY3Rpb24gTG5lKGEpe3ZhciBiO2I9U0MoX0QsVXJlLDMwLDIsMTUsMSk7YS09UHNlO2JbMF09KGE+PjEwKStRc2UmV3JlO2JbMV09KGEmMTAyMykrNTYzMjAmV3JlO3JldHVybiB6Z2IoYiwwLGIubGVuZ3RoKX0KZnVuY3Rpb24gVlJkKGEsYil7dmFyIGM7Yz0oYS5CYiZpcmUpIT0wO2I/KGEuQmJ8PWlyZSk6KGEuQmImPS0xNjM4NSk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSwxNixjLGIpKX0KZnVuY3Rpb24gRlNkKGEsYil7dmFyIGM7Yz0oYS5CYiZSQ2UpIT0wO2I/KGEuQmJ8PVJDZSk6KGEuQmImPS0zMjc2OSk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSwxOCxjLGIpKX0KZnVuY3Rpb24gdjFkKGEsYil7dmFyIGM7Yz0oYS5CYiZSQ2UpIT0wO2I/KGEuQmJ8PVJDZSk6KGEuQmImPS0zMjc2OSk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSwxOCxjLGIpKX0KZnVuY3Rpb24geDFkKGEsYil7dmFyIGM7Yz0oYS5CYiZQc2UpIT0wO2I/KGEuQmJ8PVBzZSk6KGEuQmImPS02NTUzNyk7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgal9kKGEsMSwyMCxjLGIpKX0KZnVuY3Rpb24gUXNkKGEpe3ZhciBiO2lmKChhLkRiJjY0KSE9MClyZXR1cm4gR3FkKGEpO2I9bmV3IEpnYihHcWQoYSkpO2IuYSs9JyAoaWRlbnRpZmllcjogJztFZ2IoYixhLmspO2IuYSs9JyknO3JldHVybiBiLmF9CmZ1bmN0aW9uIGVZYihhKXt2YXIgYixjLGQ7Yj1uZXcgVWxiO2ZvcihkPW5ldyBybWIoYS5qKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMTEpO0lsYihiLGMuYil9cmV0dXJuIFFiKGIpLG5ldyBCbChiKX0KZnVuY3Rpb24gaFliKGEpe3ZhciBiLGMsZDtiPW5ldyBVbGI7Zm9yKGQ9bmV3IHJtYihhLmopO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxMSk7SWxiKGIsYy5lKX1yZXR1cm4gUWIoYiksbmV3IEJsKGIpfQpmdW5jdGlvbiBrWWIoYSl7dmFyIGIsYyxkO2I9bmV3IFVsYjtmb3IoZD1uZXcgcm1iKGEuaik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDExKTtJbGIoYixjLmcpfXJldHVybiBRYihiKSxuZXcgQmwoYil9CmZ1bmN0aW9uIGZmZShhKXt2YXIgYixjO2ZvcihjPWdmZShXU2QoUFJkKGEpKSkuSmMoKTtjLk9iKCk7KXtiPU9EKGMuUGIoKSk7aWYoRnVkKGEsYikpcmV0dXJuIHlPZCgoeE9kKCksd09kKSxiKX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gRm0oYSl7dmFyIGIsYyxkO2ZvcihjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKXtpZihhW2NdPT1udWxsKXt0aHJvdyBzY2IobmV3IEZmYignYXQgaW5kZXggJytjKSl9fWI9YTtyZXR1cm4gbmV3IGRuYihiKX0KZnVuY3Rpb24gUXYoYSl7dmFyIGIsYyxkLGU7Yj1uZXcga3EoYS5QZCgpLmdjKCkpO2U9MDtmb3IoZD1KcihhLlBkKCkuSmMoKSk7ZC5PYigpOyl7Yz1kLlBiKCk7anEoYixjLGpmYihlKyspKX1yZXR1cm4gcG4oYi5hKX0KZnVuY3Rpb24gUWViKGEpe3ZhciBiO2I9RWRiKGEpO2lmKGI+My40MDI4MjM0NjYzODUyODg2RTM4KXtyZXR1cm4gS3NlfWVsc2UgaWYoYjwtMy40MDI4MjM0NjYzODUyODg2RTM4KXtyZXR1cm4gTHNlfXJldHVybiBifQpmdW5jdGlvbiBtcmIoYSl7dmFyIGIsYyxkLGU7Yz0oYj1KRChkZWIoKGQ9YS5PbSxlPWQuZixlPT1NST9kOmUpKSwxMCksbmV3IHVyYihiLEpEKFZDYihiLGIubGVuZ3RoKSwxMCksMCkpO29yYihjLGEpO3JldHVybiBjfQpmdW5jdGlvbiAkM2MoYSxiKXthLm4uYy5sZW5ndGg9PTAmJklsYihhLm4sbmV3IHA0YyhhLnMsYS50LGEuaSkpO0lsYihhLmIsYik7azRjKEpEKE1sYihhLm4sYS5uLmMubGVuZ3RoLTEpLDIwOCksYik7YTRjKGEsYil9CmZ1bmN0aW9uIE9fYyhhLGIsYyl7dmFyIGQ7Yy5TZygnU3RyYWlnaHQgTGluZSBFZGdlIFJvdXRpbmcnLDEpO2MuYWgoYixfemUpO2Q9SkQoa3NkKGIsKHhZYygpLHdZYykpLDI3KTtQX2MoYSxkKTtjLmFoKGIsYkFlKX0KZnVuY3Rpb24gUTliKGEsYil7dmFyIGMsZCxlO2U9MDtmb3IoZD1KRChiLktiKGEpLDIwKS5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDE4KTt5ZGIoTEQoV01iKGMsKElxYygpLHhxYykpKSl8fCsrZX1yZXR1cm4gZX0KZnVuY3Rpb24gWmJjKGEsYil7dmFyIGMsZCxlO2Q9bWRjKGIpO2U9QmViKE1EKGt6YyhkLChCd2MoKSxXdmMpKSkpO2M9JHduZC5NYXRoLm1heCgwLGUvMi0wLjUpO1hiYyhiLGMsMSk7SWxiKGEsbmV3IHdjYyhiLGMpKX0KZnVuY3Rpb24gc1FjKGEsYil7cmV0dXJuIGNnYighIWIuYiYmISFiLmM/ZFJjKGIuYikrJy0+JytkUmMoYi5jKTonZV8nK3RiKGIpLCEhYS5iJiYhIWEuYz9kUmMoYS5iKSsnLT4nK2RSYyhhLmMpOidlXycrdGIoYSkpfQpmdW5jdGlvbiB1UWMoYSxiKXtyZXR1cm4gY2diKCEhYi5iJiYhIWIuYz9kUmMoYi5iKSsnLT4nK2RSYyhiLmMpOidlXycrdGIoYiksISFhLmImJiEhYS5jP2RSYyhhLmIpKyctPicrZFJjKGEuYyk6J2VfJyt0YihhKSl9CmZ1bmN0aW9uIFN5KGEsYil7UnkoKTtyZXR1cm4gVnkoS3JlKSwkd25kLk1hdGguYWJzKGEtYik8PUtyZXx8YT09Ynx8aXNOYU4oYSkmJmlzTmFOKGIpPzA6YTxiPy0xOmE+Yj8xOld5KGlzTmFOKGEpLGlzTmFOKGIpKX0KZnVuY3Rpb24gaFJiKGEpe1hRYigpO3JldHVybiB4ZGIoKSxTUmIoSkQoYS5hLDgyKS5qLEpEKGEuYiw4NikpfHxKRChhLmEsODIpLmQuZSE9MCYmU1JiKEpEKGEuYSw4MikuaixKRChhLmIsODYpKT90cnVlOmZhbHNlfQpmdW5jdGlvbiBDdmIoKXt2dmIoKTt2YXIgYSxiLGM7Yz11dmIrKytEYXRlLm5vdygpO2E9WUQoJHduZC5NYXRoLmZsb29yKGMqaHRlKSkmanRlO2I9WUQoYy1hKml0ZSk7dGhpcy5hPWFeMTUwMjt0aGlzLmI9Yl5ndGV9CmZ1bmN0aW9uIExtYihhLGIsYyxkKXt2YXIgZSxmLGc7Zm9yKGU9YisxO2U8YzsrK2Upe2ZvcihmPWU7Zj5iJiZkLkxlKGFbZi0xXSxhW2ZdKT4wOy0tZil7Zz1hW2ZdO1ZDKGEsZixhW2YtMV0pO1ZDKGEsZi0xLGcpfX19CmZ1bmN0aW9uIFRhZChhLGIpe3ZhciBjLGQsZSxmLGc7Yz1iLmY7VXNiKGEuYy5kLGMsYik7aWYoYi5nIT1udWxsKXtmb3IoZT1iLmcsZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdO1VzYihhLmMuZSxkLGIpfX19CmZ1bmN0aW9uIF9NYyhhLGIpe3ZhciBjLGQ7Yz1HdGIoYSwwKTt3aGlsZShjLmIhPWMuZC5jKXtkPURlYihNRChVdGIoYykpKTtpZihkPT1iKXtyZXR1cm59ZWxzZSBpZihkPmIpe1Z0YihjKTticmVha319U3RiKGMsYil9CmZ1bmN0aW9uIHlxZChhLGIpe3ZhciBjO2M9UlRkKGEuemgoKSxiKTtpZihSRChjLDEwMSkpe3JldHVybiBKRChjLDE5KX10aHJvdyBzY2IobmV3IFRlYihMQ2UrYisiJyBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiKSl9CmZ1bmN0aW9uIEFGYihhLGIpe2lmKGI9PWEuZCl7cmV0dXJuIGEuZX1lbHNlIGlmKGI9PWEuZSl7cmV0dXJuIGEuZH1lbHNle3Rocm93IHNjYihuZXcgVGViKCdOb2RlICcrYisnIG5vdCBwYXJ0IG9mIGVkZ2UgJythKSl9fQpmdW5jdGlvbiAkRWIoYSxiKXtzd2l0Y2goYi5nKXtjYXNlIDI6cmV0dXJuIGEuYjtjYXNlIDE6cmV0dXJuIGEuYztjYXNlIDQ6cmV0dXJuIGEuZDtjYXNlIDM6cmV0dXJuIGEuYTtkZWZhdWx0OnJldHVybiBmYWxzZTt9fQpmdW5jdGlvbiBTUmIoYSxiKXtzd2l0Y2goYi5nKXtjYXNlIDI6cmV0dXJuIGEuYjtjYXNlIDE6cmV0dXJuIGEuYztjYXNlIDQ6cmV0dXJuIGEuZDtjYXNlIDM6cmV0dXJuIGEuYTtkZWZhdWx0OnJldHVybiBmYWxzZTt9fQpmdW5jdGlvbiBfc2QoYSxiLGMsZCl7c3dpdGNoKGIpe2Nhc2UgMzpyZXR1cm4gYS5mO2Nhc2UgNDpyZXR1cm4gYS5nO2Nhc2UgNTpyZXR1cm4gYS5pO2Nhc2UgNjpyZXR1cm4gYS5qO31yZXR1cm4gSXNkKGEsYixjLGQpfQpmdW5jdGlvbiBmcWQoYSxiLGMsZCl7aWYoYjwwKXt3cWQoYSxjLGQpfWVsc2V7aWYoIWMub2soKSl7dGhyb3cgc2NiKG5ldyBUZWIoTENlK2MudmUoKStNQ2UpKX1KRChjLDY5KS50aygpLnprKGEsYS5kaSgpLGIsZCl9fQpmdW5jdGlvbiBnZyhhKXt2YXIgYjtpZihhLmIpe2dnKGEuYik7aWYoYS5iLmQhPWEuYyl7dGhyb3cgc2NiKG5ldyB5cWIpfX1lbHNlIGlmKGEuZC5kYygpKXtiPUpEKGEuZi5jLnhjKGEuZSksMTYpOyEhYiYmKGEuZD1iKX19CmZ1bmN0aW9uIE9nYyhhKXtpZihhLmshPShEWWIoKSxBWWIpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHhCYihuZXcgUkJiKG51bGwsbmV3IEh2YihuZXcgZXMoSXIoa1liKGEpLmEuSmMoKSxuZXcgZXIpKSkpLG5ldyBQZ2MpfQpmdW5jdGlvbiBGTmQoYSl7aWYoYS5lPT1udWxsKXtyZXR1cm4gYX1lbHNlICFhLmMmJihhLmM9bmV3IEdOZCgoYS5mJjI1NikhPTAsYS5pLGEuYSxhLmQsKGEuZiYxNikhPTAsYS5qLGEuZyxudWxsKSk7cmV0dXJuIGEuY30KZnVuY3Rpb24gYkQoYSxiKXtpZihhLmg9PUJzZSYmYS5tPT0wJiZhLmw9PTApe2ImJihZQz1fQygwLDAsMCkpO3JldHVybiAkQygoRUQoKSxDRCkpfWImJihZQz1fQyhhLmwsYS5tLGEuaCkpO3JldHVybiBfQygwLDAsMCl9CmZ1bmN0aW9uIGFkYihhKXt2YXIgYjtpZihBcnJheS5pc0FycmF5KGEpJiZhLlFtPT09YmRiKXtyZXR1cm4gZWViKHJiKGEpKSsnQCcrKGI9dGIoYSk+Pj4wLGIudG9TdHJpbmcoMTYpKX1yZXR1cm4gYS50b1N0cmluZygpfQpmdW5jdGlvbiBPcWIoYSl7dmFyIGI7dGhpcy5hPShiPUpEKGEuZSYmYS5lKCksMTApLG5ldyB1cmIoYixKRChWQ2IoYixiLmxlbmd0aCksMTApLDApKTt0aGlzLmI9U0MoYUosTnFlLDEsdGhpcy5hLmEubGVuZ3RoLDUsMSl9CmZ1bmN0aW9uIFV3YyhhKXtUd2MoKTt0aGlzLmM9X3UoV0MoT0MoWTAsMSksTnFlLDgyNCwwLFtJd2NdKSk7dGhpcy5iPW5ldyBJcmI7dGhpcy5hPWE7UWliKHRoaXMuYixSd2MsMSk7TGxiKFN3YyxuZXcgSW1kKHRoaXMpKX0KZnVuY3Rpb24gT3FjKCl7T3FjPVpjYjtOcWM9bmV3IFBxYyh5dmUsMCk7SnFjPW5ldyBQcWMoJ0ZJUlNUJywxKTtLcWM9bmV3IFBxYyhid2UsMik7THFjPW5ldyBQcWMoJ0xBU1QnLDMpO01xYz1uZXcgUHFjKGN3ZSw0KX0KZnVuY3Rpb24gb21kKCl7b21kPVpjYjtubWQ9bmV3IHBtZChmemUsMCk7a21kPW5ldyBwbWQoJ0dST1VQX0RFQycsMSk7bW1kPW5ldyBwbWQoJ0dST1VQX01JWEVEJywyKTtsbWQ9bmV3IHBtZCgnR1JPVVBfSU5DJywzKX0KZnVuY3Rpb24gbDFjKCl7bDFjPVpjYjtqMWM9bmV3IG0xYygnQVNQRUNUX1JBVElPX0RSSVZFTicsMCk7azFjPW5ldyBtMWMoJ01BWF9TQ0FMRV9EUklWRU4nLDEpO2kxYz1uZXcgbTFjKCdBUkVBX0RSSVZFTicsMil9CmZ1bmN0aW9uIHJHYyhhLGIsYyxkLGUpe3ZhciBmLGcsaDtnPWU7d2hpbGUoYi5iIT1iLmMpe2Y9SkQoamxiKGIpLDkpO2g9SkQobFliKGYsZCkuWGIoMCksMTEpO2EuZFtoLnBdPWcrKztZQ2IoYy5jLGgpfXJldHVybiBnfQpmdW5jdGlvbiBlQmQoYSl7dmFyIGIsYyxkLGUsZjtmPWdCZChhKTtjPXlxZShhLmMpO2Q9IWM7aWYoZCl7ZT1uZXcgRUI7a0MoZiwna25vd25MYXlvdXRlcnMnLGUpO2I9bmV3IHBCZChlKTtvZmIoYS5jLGIpfXJldHVybiBmfQpmdW5jdGlvbiBHSGIoYSxiKXt2YXIgYyxkLGUsZixnLGg7ZD0wO2M9MDtmb3IoZj1iLGc9MCxoPWYubGVuZ3RoO2c8aDsrK2cpe2U9ZltnXTtpZihlPjApe2QrPWU7KytjfX1jPjEmJihkKz1hLmQqKGMtMSkpO3JldHVybiBkfQpmdW5jdGlvbiBFQ2QoYSl7dmFyIGIsYyxkO2Q9bmV3IEhnYjtkLmErPSdbJztmb3IoYj0wLGM9YS5nYygpO2I8Yzspe0VnYihkLHhnYihhLlNpKGIpKSk7KytiPGMmJihkLmErPUxxZSxkKX1kLmErPSddJztyZXR1cm4gZC5hfQpmdW5jdGlvbiBITmQoYSxiLGMpe3ZhciBkLGU7Zm9yKGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspe2lmKFVOZCgoQURiKGQsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChkKSksYixjKSlyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uICROZChhKXt2YXIgYjtpZihhPT1udWxsKXJldHVybiB0cnVlO2I9YS5sZW5ndGg7cmV0dXJuIGI+MCYmKEFEYihiLTEsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChiLTEpPT01OCkmJiFITmQoYSx2TmQsd05kKX0KZnVuY3Rpb24gSmhiKGEsYil7dmFyIGM7aWYoWEQoYSk9PT1YRChiKSl7cmV0dXJuIHRydWV9aWYoUkQoYiw5MCkpe2M9SkQoYiw5MCk7cmV0dXJuIGEuZT09Yy5lJiZhLmQ9PWMuZCYmS2hiKGEsYy5hKX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIFdqZChhKXtSamQoKTtzd2l0Y2goYS5nKXtjYXNlIDQ6cmV0dXJuIHhqZDtjYXNlIDE6cmV0dXJuIHdqZDtjYXNlIDM6cmV0dXJuIE9qZDtjYXNlIDI6cmV0dXJuIFFqZDtkZWZhdWx0OnJldHVybiBQamQ7fX0KZnVuY3Rpb24gWnpiKGEpe3ZhciBiLGM7aWYoYS5iKXtyZXR1cm4gYS5ifWM9VHpiP251bGw6YS5kO3doaWxlKGMpe2I9VHpiP251bGw6Yy5iO2lmKGIpe3JldHVybiBifWM9VHpiP251bGw6Yy5kfXJldHVybiBHemIoKSxGemJ9CmZ1bmN0aW9uIHM2YihhLGIpe3ZhciBjLGQsZTtkPXA2YihhLGIpO2U9ZFtkLmxlbmd0aC0xXS8yO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGRbY10+PWUpe3JldHVybiBiLmMrY319cmV0dXJuIGIuYytiLmIuZ2MoKX0KZnVuY3Rpb24gSUxkKGEsYil7R0xkKCk7dmFyIGMsZCxlLGY7ZD1EVWQoYSk7ZT1iO05tYihkLDAsZC5sZW5ndGgsZSk7Zm9yKGM9MDtjPGQubGVuZ3RoO2MrKyl7Zj1ITGQoYSxkW2NdLGMpO2MhPWYmJlRHZChhLGMsZil9fQpmdW5jdGlvbiBXR2IoYSl7dmFyIGIsYyxkO2Q9QmViKE1EKGEuYS5tZigoTGdkKCksdGdkKSkpKTtmb3IoYz1uZXcgcm1iKGEuYS5RZigpKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksNjgwKTtaR2IoYSxiLGQpfX0KZnVuY3Rpb24gZUtiKGEpe2FLYigpO3ZhciBiLGMsZCxlO2I9YS5vLmI7Zm9yKGQ9SkQoSkQoUWMoYS5yLChSamQoKSxPamQpKSwyMiksODMpLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksMTE1KTtlPWMuZTtlLmIrPWJ9fQpmdW5jdGlvbiBxQmMoYSxiLGMpe3ZhciBkLGU7ZT1hLmEuYjtmb3IoZD1lLmMubGVuZ3RoO2Q8YztkKyspe0hsYihlLDAsbmV3IGIkYihhLmEpKX1xWWIoYixKRChNbGIoZSxlLmMubGVuZ3RoLWMpLDI1KSk7YS5iW2IucF09Y30KZnVuY3Rpb24gWVFiKGEsYil7dmFyIGMsZDtmb3IoZD1uZXcgcm1iKGIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw0Nyk7SWxiKGEuYi5iLEpEKGMuYiw4MikpO3FSYihKRChjLmEsMTk0KSxKRChjLmIsODIpKX19CmZ1bmN0aW9uIGc5YyhhLGIpe3ZhciBjO2lmKGEuZCl7aWYoTGliKGEuYixiKSl7cmV0dXJuIEpEKE5pYihhLmIsYiksNDQpfWVsc2V7Yz1iLmJnKCk7UWliKGEuYixiLGMpO3JldHVybiBjfX1lbHNle3JldHVybiBiLmJnKCl9fQpmdW5jdGlvbiBnRGIoYil7dmFyIGM9Yi5lO2Z1bmN0aW9uIGQoYSl7aWYoIWF8fGEubGVuZ3RoPT0wKXtyZXR1cm4gJyd9cmV0dXJuICdcdCcrYS5qb2luKCdcblx0Jyl9CnJldHVybiBjJiYoYy5zdGFja3x8ZChiW1NyZV0pKX0KZnVuY3Rpb24gZHYoYSl7dmFyIGIsYztpZihSRChhLDMwOCkpe2M9c20oSkQoYSwzMDgpKTtiPWM7cmV0dXJuIGJ9ZWxzZSByZXR1cm4gUkQoYSw0MjkpP0pEKGEsNDI5KS5hOlJEKGEsNTkpP25ldyBCdihhKTpuZXcgcXYoYSl9CmZ1bmN0aW9uIEhJYyhhLGIsYyxkLGUpe2dJYygpO0RGYihHRmIoRkZiKEVGYihIRmIobmV3IElGYiwwKSxlLmQuZS1hKSxiKSxlLmQpKTtERmIoR0ZiKEZGYihFRmIoSEZiKG5ldyBJRmIsMCksYy1lLmEuZSksZS5hKSxkKSl9CmZ1bmN0aW9uIFN5ZChhLGIpe3ZhciBjLGQsZSxmO2lmKGIpe2U9WnhkKGIsJ3gnKTtjPW5ldyBQQWQoYSk7cXVkKGMuYSwodERiKGUpLGUpKTtmPVp4ZChiLCd5Jyk7ZD1uZXcgVkFkKGEpO3J1ZChkLmEsKHREYihmKSxmKSl9fQpmdW5jdGlvbiBiemQoYSxiKXt2YXIgYyxkLGUsZjtpZihiKXtlPVp4ZChiLCd4Jyk7Yz1uZXcgWkFkKGEpO2p1ZChjLmEsKHREYihlKSxlKSk7Zj1aeGQoYiwneScpO2Q9bmV3IF9BZChhKTtrdWQoZC5hLCh0RGIoZiksZikpfX0KZnVuY3Rpb24gbGZlKGEsYil7dmFyIGMsZCxlLGY7ZT1uZXcgVmxiKGIuZ2MoKSk7Zm9yKGQ9Yi5KYygpO2QuT2IoKTspe2M9ZC5QYigpO2Y9a2ZlKGEsSkQoYyw1NykpOyEhZiYmKFlDYihlLmMsZiksdHJ1ZSl9cmV0dXJuIGV9CmZ1bmN0aW9uIHllKGEsYixjKXt2YXIgZCxlO2ZvcihlPWEuSmMoKTtlLk9iKCk7KXtkPWUuUGIoKTtpZihYRChiKT09PVhEKGQpfHxiIT1udWxsJiZwYihiLGQpKXtjJiZlLlFiKCk7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gd0VkKGEsYixjKXt2YXIgZCxlOysrYS5qO2lmKGMuZGMoKSl7cmV0dXJuIGZhbHNlfWVsc2V7Zm9yKGU9Yy5KYygpO2UuT2IoKTspe2Q9ZS5QYigpO2EubmooYixhLldpKGIsZCkpOysrYn1yZXR1cm4gdHJ1ZX19CmZ1bmN0aW9uIEdBKGEsYixjLGQpe3ZhciBlLGY7Zj1jLWI7aWYoZjwzKXt3aGlsZShmPDMpe2EqPTEwOysrZn19ZWxzZXtlPTE7d2hpbGUoZj4zKXtlKj0xMDstLWZ9YT0oYSsoZT4+MSkpL2V8MH1kLmk9YTtyZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gZ2liKGEpe3ZhciBiLGMsZDtpZihhLmU9PTApe3JldHVybiAwfWI9YS5kPDw1O2M9YS5hW2EuZC0xXTtpZihhLmU8MCl7ZD1MaGIoYSk7aWYoZD09YS5kLTEpey0tYztjPWN8MH19Yi09ZWZiKGMpO3JldHVybiBifQpmdW5jdGlvbiBiaWIoYSl7dmFyIGIsYyxkO2lmKGE8RWhiLmxlbmd0aCl7cmV0dXJuIEVoYlthXX1jPWE+PjU7Yj1hJjMxO2Q9U0MoY0UsaXNlLDMwLGMrMSwxNSwxKTtkW2NdPTE8PGI7cmV0dXJuIG5ldyBWaGIoMSxjKzEsZCl9CmZ1bmN0aW9uIGlfYihhKXt2YXIgYixjLGQ7Yz1hLmhoKCk7aWYoYyl7Yj1hLkFoKCk7aWYoUkQoYiwxNzMpKXtkPWlfYihKRChiLDE3MykpO2lmKGQhPW51bGwpe3JldHVybiBkKycuJytjfX1yZXR1cm4gY31yZXR1cm4gbnVsbH0KZnVuY3Rpb24gZUxiKGEpe3ZhciBiOyFhLmMmJihhLmM9bmV3IFhLYik7U2xiKGEuZCxuZXcgbExiKTtiTGIoYSk7Yj1XS2IoYSk7RUJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuZCwxNikpLG5ldyBFTGIoYSkpO3JldHVybiBifQpmdW5jdGlvbiBVX2IoYSxiKXtiLlNnKCdFbmQgbGFiZWwgcG9zdC1wcm9jZXNzaW5nJywxKTtFQmIoQkJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLmIsMTYpKSxuZXcgWl9iKSxuZXcgX19iKSxuZXcgYjBiKTtiLlRnKCl9CmZ1bmN0aW9uIGJ6KGEpe3ZhciBiLGMsZCxlO2ZvcihiPShhLmo9PW51bGwmJihhLmo9KFp6KCksZT1Zei5rZShhKSxfeihlKSkpLGEuaiksYz0wLGQ9Yi5sZW5ndGg7YzxkOysrYyl7U3RyaW5nLmZyb21DaGFyQ29kZSgxMCl9fQpmdW5jdGlvbiBtRWQoYSl7dmFyIGIsYyxkLGU7Yj1uZXcgRUI7Zm9yKGU9bmV3IEZvYihhLmIuSmMoKSk7ZS5iLk9iKCk7KXtkPUpEKGUuYi5QYigpLDY4NSk7Yz1rQmQoZCk7Q0IoYixiLmEubGVuZ3RoLGMpfXJldHVybiBiLmF9CmZ1bmN0aW9uIERHZChhLGIpe3ZhciBjLGQ7aWYoIWIpe3JldHVybiBmYWxzZX1lbHNle2ZvcihjPTA7YzxhLmk7KytjKXtkPUpEKGEuZ1tjXSwzNzApO2lmKGQuamooYikpe3JldHVybiBmYWxzZX19cmV0dXJuIHRDZChhLGIpfX0KZnVuY3Rpb24gYXRkKGEsYil7c3dpdGNoKGIpe2Nhc2UgMzpyZXR1cm4gYS5mIT0wO2Nhc2UgNDpyZXR1cm4gYS5nIT0wO2Nhc2UgNTpyZXR1cm4gYS5pIT0wO2Nhc2UgNjpyZXR1cm4gYS5qIT0wO31yZXR1cm4gTHNkKGEsYil9CmZ1bmN0aW9uIGN0ZChhLGIpe3N3aXRjaChiKXtjYXNlIDM6ZXRkKGEsMCk7cmV0dXJuO2Nhc2UgNDpndGQoYSwwKTtyZXR1cm47Y2FzZSA1Omh0ZChhLDApO3JldHVybjtjYXNlIDY6aXRkKGEsMCk7cmV0dXJuO31Oc2QoYSxiKX0KZnVuY3Rpb24gQlljKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEdfYztjYXNlIDE6cmV0dXJuIG5ldyBRX2M7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYigkdmUrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319CmZ1bmN0aW9uIGEkYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBKX2M7Y2FzZSAxOnJldHVybiBuZXcgTV9jO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoaEFlKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fQpmdW5jdGlvbiBrJGMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAxOnJldHVybiBuZXcgSVpjO2Nhc2UgMjpyZXR1cm4gbmV3IEFaYztkZWZhdWx0OnRocm93IHNjYihuZXcgVGViKGhBZSsoYS5mIT1udWxsP2EuZjonJythLmcpKSk7fX0KZnVuY3Rpb24gQjdjKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IFM3YztjYXNlIDE6cmV0dXJuIG5ldyBXN2M7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYihiQmUrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319CmZ1bmN0aW9uIHdtKGEpe3FtKCk7dmFyIGI7Yj1hLk5jKCk7c3dpdGNoKGIubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHBtO2Nhc2UgMTpyZXR1cm4gbmV3IHZ5KFFiKGJbMF0pKTtkZWZhdWx0OnJldHVybiBuZXcgR3goRm0oYikpO319CmZ1bmN0aW9uIG1ZYihhLGIpe3N3aXRjaChiLmcpe2Nhc2UgMTpyZXR1cm4gX3EoYS5qLChWWWIoKSxRWWIpKTtjYXNlIDI6cmV0dXJuIF9xKGEuaiwoVlliKCksU1liKSk7ZGVmYXVsdDpyZXR1cm4gcG5iKCkscG5iKCksbW5iO319CmZ1bmN0aW9uIFFCYihhLGIpe3ZhciBjO2M9SkQoeUJiKGEsaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbKGxBYigpLGpBYildKSkpLDE1KTtyZXR1cm4gYy5PYyhjV2MoYy5nYygpKSl9CmZ1bmN0aW9uIHFSYyhhLGIpe3ZhciBjLGQ7ZD1uZXcgbnpiKGEuYS4kYyhiLHRydWUpKTtpZihkLmEuZ2MoKTw9MSl7dGhyb3cgc2NiKG5ldyBFZmIpfWM9ZC5hLmVjKCkuSmMoKTtjLlBiKCk7cmV0dXJuIEpEKGMuUGIoKSwzOSl9CmZ1bmN0aW9uIFdUZChhLGIpe3ZhciBjLGQsZTtjPShhLmk9PW51bGwmJk1UZChhKSxhLmkpO2Q9Yi5JaigpO2lmKGQhPS0xKXtmb3IoZT1jLmxlbmd0aDtkPGU7KytkKXtpZihjW2RdPT1iKXtyZXR1cm4gZH19fXJldHVybiAtMX0KZnVuY3Rpb24gbkpkKGEsYil7dmFyIGMsZCxlO2lmKGEuZj4wKXthLllqKCk7ZD1iPT1udWxsPzA6dGIoYik7ZT0oZCZIcWUpJWEuZC5sZW5ndGg7Yz11SmQoYSxlLGQsYik7cmV0dXJuIGMhPS0xfWVsc2V7cmV0dXJuIGZhbHNlfX0KZnVuY3Rpb24gdURkKGEsYil7dmFyIGM7aWYoYS5pPjApe2lmKGIubGVuZ3RoPGEuaSl7Yz1mSWQocmIoYikuYyxhLmkpO2I9Y30kZ2IoYS5nLDAsYiwwLGEuaSl9Yi5sZW5ndGg+YS5pJiZWQyhiLGEuaSxudWxsKTtyZXR1cm4gYn0KZnVuY3Rpb24gZlRkKGEpe3ZhciBiO2lmKChhLkRiJjY0KSE9MClyZXR1cm4gc3ZkKGEpO2I9bmV3IEpnYihzdmQoYSkpO2IuYSs9JyAoaW5zdGFuY2VDbGFzc05hbWU6ICc7RWdiKGIsYS5EKTtiLmErPScpJztyZXR1cm4gYi5hfQpmdW5jdGlvbiBBNmIoYSl7dmFyIGIsYztiPWEuZD09KE5tYygpLEltYyk7Yz13NmIoYSk7YiYmIWN8fCFiJiZjP1pNYihhLmEsKEJ3YygpLFJ0YyksKGNlZCgpLGFlZCkpOlpNYihhLmEsKEJ3YygpLFJ0YyksKGNlZCgpLF9kZCkpfQpmdW5jdGlvbiBTOWMoYSl7UDljKCk7aWYoSkQoYS5tZigoTGdkKCksR2ZkKSksMTgxKS5HYygoTmtkKCksTGtkKSkpe0pEKGEubWYoYWdkKSwxODEpLkVjKChvamQoKSxuamQpKTtKRChhLm1mKEdmZCksMTgxKS5LYyhMa2QpfX0KZnVuY3Rpb24gVHdjKCl7VHdjPVpjYjtKd2MoKTtSd2M9KEJ3YygpLGV3Yyk7U3djPV91KFdDKE9DKE40LDEpLGR6ZSwxNDQsMCxbVnZjLFd2YyxZdmMsWnZjLGF3Yyxid2MsY3djLGR3Yyxnd2MsaXdjLFh2YywkdmMsZndjXSkpfQpmdW5jdGlvbiBtV2QoYSl7dmFyIGIsYyxkLGUsZjtjPUpEKGEuZyw2NzQpO2ZvcihkPWEuaS0xO2Q+PTA7LS1kKXtiPWNbZF07Zm9yKGU9MDtlPGQ7KytlKXtmPWNbZV07aWYobldkKGEsYixmKSl7cURkKGEsZCk7YnJlYWt9fX19CmZ1bmN0aW9uIEtiZShhLGIpe3ZhciBjLGQsZSxmO2Y9S2ZlKGEuZS56aCgpLGIpO2M9SkQoYS5nLDEyMik7Zm9yKGU9MDtlPGEuaTsrK2Upe2Q9Y1tlXTtpZihmLlpsKGQuSWsoKSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIG9LYyhhLGIsYyl7dmFyIGQsZTtkPUJlYihhLnBbYi5pLnBdKStCZWIoYS5kW2IuaS5wXSkrYi5uLmIrYi5hLmI7ZT1CZWIoYS5wW2MuaS5wXSkrQmViKGEuZFtjLmkucF0pK2Mubi5iK2MuYS5iO3JldHVybiBlLWR9CmZ1bmN0aW9uIHdpYihhLGIsYyl7dmFyIGQsZTtkPXVjYihjLFVzZSk7Zm9yKGU9MDt2Y2IoZCwwKSE9MCYmZTxiO2UrKyl7ZD10Y2IoZCx1Y2IoYVtlXSxVc2UpKTthW2VdPVBjYihkKTtkPUtjYihkLDMyKX1yZXR1cm4gUGNiKGQpfQpmdW5jdGlvbiBUTmQoYSl7dmFyIGIsYyxkLGU7ZT0wO2ZvcihjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKXtiPShBRGIoYyxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGMpKTtiPDY0JiYoZT1JY2IoZSxKY2IoMSxiKSkpfXJldHVybiBlfQpmdW5jdGlvbiBQR2QoYSxiLGMpe3ZhciBkLGUsZjtpZihhLk1qKCkpe2Q9YS5pO2Y9YS5OaigpO2hEZChhLGQsYik7ZT1hLkZqKDMsbnVsbCxiLGQsZik7IWM/KGM9ZSk6Yy5raihlKX1lbHNle2hEZChhLGEuaSxiKX1yZXR1cm4gY30KZnVuY3Rpb24gelZkKGEsYixjKXt2YXIgZCxlO2Q9bmV3IGlfZChhLmUsMywxMCxudWxsLChlPWIuYyxSRChlLDg4KT9KRChlLDI5KTooY1BkKCksVU9kKSksQVVkKGEsYiksZmFsc2UpOyFjPyhjPWQpOmMua2ooZCk7cmV0dXJuIGN9CmZ1bmN0aW9uIEFWZChhLGIsYyl7dmFyIGQsZTtkPW5ldyBpX2QoYS5lLDQsMTAsKGU9Yi5jLFJEKGUsODgpP0pEKGUsMjkpOihjUGQoKSxVT2QpKSxudWxsLEFVZChhLGIpLGZhbHNlKTshYz8oYz1kKTpjLmtqKGQpO3JldHVybiBjfQpmdW5jdGlvbiBiS2IoYSl7YUtiKCk7dmFyIGI7Yj1uZXcgRmRkKEpEKGEuZS5tZigoTGdkKCksRWZkKSksOCkpO2lmKGEuQi5HYygoTmtkKCksR2tkKSkpe2IuYTw9MCYmKGIuYT0yMCk7Yi5iPD0wJiYoYi5iPTIwKX1yZXR1cm4gYn0KZnVuY3Rpb24gUUEoYSxiKXtPQSgpO3ZhciBjLGQ7Yz1UQSgoU0EoKSxTQSgpLFJBKSk7ZD1udWxsO2I9PWMmJihkPUpEKE9pYihOQSxhKSw2MDkpKTtpZighZCl7ZD1uZXcgUEEoYSk7Yj09YyYmUmliKE5BLGEsZCl9cmV0dXJuIGR9CmZ1bmN0aW9uIEN4YyhhKXt6eGMoKTt2YXIgYjsoIWEucT8ocG5iKCkscG5iKCksbm5iKTphLnEpLl9iKChCd2MoKSxsdmMpKT8oYj1KRChXTWIoYSxsdmMpLDIwMykpOihiPUpEKFdNYihnWWIoYSksbXZjKSwyMDMpKTtyZXR1cm4gYn0KZnVuY3Rpb24gYWliKGEpe0doYigpO3ZhciBiLGM7Yz1QY2IoYSk7Yj1QY2IoTGNiKGEsMzIpKTtpZihiIT0wKXtyZXR1cm4gbmV3IFVoYihjLGIpfWlmKGM+MTB8fGM8MCl7cmV0dXJuIG5ldyBUaGIoMSxjKX1yZXR1cm4gQ2hiW2NdfQpmdW5jdGlvbiB4SmQoYSxiKXt2YXIgYyxkLGU7aWYoYS5mPjApe2EuWWooKTtkPWI9PW51bGw/MDp0YihiKTtlPShkJkhxZSklYS5kLmxlbmd0aDtjPXRKZChhLGUsZCxiKTtpZihjKXtyZXR1cm4gYy5rZCgpfX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gWGUoYSxiKXt2YXIgYyxkLGU7aWYoUkQoYiw0Mykpe2M9SkQoYiw0Myk7ZD1jLmpkKCk7ZT1UdihhLlBjKCksZCk7cmV0dXJuIEhiKGUsYy5rZCgpKSYmKGUhPW51bGx8fGEuUGMoKS5fYihkKSl9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiB0ZmUoYSl7aWYoYS5iPT1udWxsKXt3aGlsZShhLmEuT2IoKSl7YS5iPWEuYS5QYigpO2lmKCFKRChhLmIsNTIpLkZoKCkpe3JldHVybiB0cnVlfX1hLmI9bnVsbDtyZXR1cm4gZmFsc2V9ZWxzZXtyZXR1cm4gdHJ1ZX19CmZ1bmN0aW9uIEhIYihhLGIsYyl7dkhiKCk7cUhiLmNhbGwodGhpcyk7dGhpcy5hPVFDKGdOLFtocmUsJHRlXSxbNTg3LDIxNV0sMCxbdUhiLHRIYl0sMik7dGhpcy5jPW5ldyBmZGQ7dGhpcy5nPWE7dGhpcy5mPWI7dGhpcy5kPWN9CmZ1bmN0aW9uIFVGYyhhKXt0aGlzLmU9U0MoY0UsaXNlLDMwLGEubGVuZ3RoLDE1LDEpO3RoaXMuYz1TQyhwY2IsVnRlLDMwLGEubGVuZ3RoLDE2LDEpO3RoaXMuYj1TQyhwY2IsVnRlLDMwLGEubGVuZ3RoLDE2LDEpO3RoaXMuZj0wfQpmdW5jdGlvbiBjQ2MoYSl7dmFyIGIsYzthLmo9U0MoYUUsUnNlLDMwLGEucC5jLmxlbmd0aCwxNSwxKTtmb3IoYz1uZXcgcm1iKGEucCk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDkpO2EualtiLnBdPWIuby5iL2EuaX19CmZ1bmN0aW9uIEswYihhKXt2YXIgYixjLGQsZTtkPUYwYihhKTtTbGIoZCxEMGIpO2U9YS5kO2UuYy5sZW5ndGg9MDtmb3IoYz1uZXcgcm1iKGQpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSw0NTIpO0tsYihlLGIuYil9fQpmdW5jdGlvbiBKbmUoYSxiKXt2YXIgYyxkO2Q9Yi5sZW5ndGg7Zm9yKGM9MDtjPGQ7Yys9MilNb2UoYSwoQURiKGMsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChjKSksKEFEYihjKzEsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChjKzEpKSl9CmZ1bmN0aW9uIENxYihhLGIpe3ZhciBjLGQ7YS5hPXRjYihhLmEsMSk7YS5jPSR3bmQuTWF0aC5taW4oYS5jLGIpO2EuYj0kd25kLk1hdGgubWF4KGEuYixiKTthLmQrPWI7Yz1iLWEuZjtkPWEuZStjO2EuZj1kLWEuZS1jO2EuZT1kfQpmdW5jdGlvbiBLMGMoYSxiKXtiLlNnKCdNaW4gU2l6ZSBQb3N0cHJvY2Vzc2luZycsMSk7bXNkKGEsKGgxYygpLGcxYyksJHduZC5NYXRoLm1heChCZWIoTUQoa3NkKGEsZzFjKSkpLEJlYihNRChrc2QoYSxlMWMpKSkpKTtiLlRnKCl9CmZ1bmN0aW9uIEpIZChiLGMpe2IuVWooKTt0cnl7Yi5kLl9jKGIuZSsrLGMpO2IuZj1iLmQuajtiLmc9LTF9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSw5Nykpe3Rocm93IHNjYihuZXcgeXFiKX1lbHNlIHRocm93IHNjYihhKX19CmZ1bmN0aW9uIHYzZCgpe3YzZD1aY2I7dDNkPW5ldyB3M2Q7bTNkPW5ldyB6M2Q7bjNkPW5ldyBDM2Q7bzNkPW5ldyBGM2Q7cDNkPW5ldyBJM2Q7cTNkPW5ldyBMM2Q7cjNkPW5ldyBPM2Q7czNkPW5ldyBSM2Q7dTNkPW5ldyBVM2R9CmZ1bmN0aW9uIGVrZCgpe2VrZD1aY2I7YmtkPW5ldyBNWWIoMTUpO2FrZD1uZXcgTkJkKChMZ2QoKSxLZmQpLGJrZCk7ZGtkPW5ldyBOQmQod2dkLDE1KTtja2Q9bmV3IE5CZChoZ2QsamZiKDApKTtfamQ9bmV3IE5CZChRZWQsSnVlKX0KZnVuY3Rpb24gZEEoKXtpZihFcnJvci5zdGFja1RyYWNlTGltaXQ+MCl7JHduZC5FcnJvci5zdGFja1RyYWNlTGltaXQ9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTY0O3JldHVybiB0cnVlfXJldHVybiAnc3RhY2snIGluIG5ldyBFcnJvcn0KZnVuY3Rpb24gRWNiKGEsYil7dmFyIGM7aWYoQ2NiKGEpJiZDY2IoYikpe2M9YSViO2lmKEZzZTxjJiZjPERzZSl7cmV0dXJuIGN9fXJldHVybiB3Y2IoKGFEKENjYihhKT9OY2IoYSk6YSxDY2IoYik/TmNiKGIpOmIsdHJ1ZSksWUMpKX0KZnVuY3Rpb24gUzFiKGEsYil7dmFyIGM7UDFiKGIpO2M9SkQoV01iKGEsKEJ3YygpLHh1YykpLDI4MSk7ISFjJiZaTWIoYSx4dWMsZW9jKGMpKTtRMWIoYS5jKTtRMWIoYS5mKTtSMWIoYS5kKTtSMWIoSkQoV01iKGEsZnZjKSwyMTMpKX0KZnVuY3Rpb24ga3pjKGEsYil7dmFyIGMsZDtkPW51bGw7aWYoWE1iKGEsKEJ3YygpLF92YykpKXtjPUpEKFdNYihhLF92YyksMTAyKTtjLm5mKGIpJiYoZD1jLm1mKGIpKX1kPT1udWxsJiYoZD1XTWIoZ1liKGEpLGIpKTtyZXR1cm4gZH0KZnVuY3Rpb24gT1ZjKGEsYil7dmFyIGMsZCxlLGY7Zj1iLmIuYjthLmE9bmV3IE10YjthLmI9U0MoY0UsaXNlLDMwLGYsMTUsMSk7Yz0wO2ZvcihlPUd0YihiLmIsMCk7ZS5iIT1lLmQuYzspe2Q9SkQoVXRiKGUpLDM5KTtkLmc9YysrfX0KZnVuY3Rpb24gdjRjKGEsYixjKXt2YXIgZCxlLGYsZztmPWItYS5lO2c9Yy1hLmY7Zm9yKGU9bmV3IHJtYihhLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxNzIpO2k0YyhkLGQucytmLGQudCtnKX1hLmU9YjthLmY9Y30KZnVuY3Rpb24gY3pjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2c9YS5rO2g9Yi5rO2Q9Y1tnLmddW2guZ107ZT1NRChremMoYSxkKSk7Zj1NRChremMoYixkKSk7cmV0dXJuICR3bmQuTWF0aC5tYXgoKHREYihlKSxlKSwodERiKGYpLGYpKX0KZnVuY3Rpb24gR29lKGEsYixjKXt2YXIgZCxlO2Q9SkQoT2liKFJuZSxiKSwxMjEpO2U9SkQoT2liKFNuZSxiKSwxMjEpO2lmKGMpe1JpYihSbmUsYSxkKTtSaWIoU25lLGEsZSl9ZWxzZXtSaWIoU25lLGEsZCk7UmliKFJuZSxhLGUpfX0KZnVuY3Rpb24gaGliKGEsYil7dmFyIGMsZCxlLGY7Yz1iPj41O2ImPTMxO2U9YS5kK2MrKGI9PTA/MDoxKTtkPVNDKGNFLGlzZSwzMCxlLDE1LDEpO2lpYihkLGEuYSxjLGIpO2Y9bmV3IFZoYihhLmUsZSxkKTtJaGIoZik7cmV0dXJuIGZ9CmZ1bmN0aW9uIER4YihhLGIsYyl7dmFyIGQsZSxmO2U9bnVsbDtmPWEuYjt3aGlsZShmKXtkPWEuYS5MZShiLGYuZCk7aWYoYyYmZD09MCl7cmV0dXJuIGZ9aWYoZD49MCl7Zj1mLmFbMV19ZWxzZXtlPWY7Zj1mLmFbMF19fXJldHVybiBlfQpmdW5jdGlvbiBFeGIoYSxiLGMpe3ZhciBkLGUsZjtlPW51bGw7Zj1hLmI7d2hpbGUoZil7ZD1hLmEuTGUoYixmLmQpO2lmKGMmJmQ9PTApe3JldHVybiBmfWlmKGQ8PTApe2Y9Zi5hWzBdfWVsc2V7ZT1mO2Y9Zi5hWzFdfX1yZXR1cm4gZX0KZnVuY3Rpb24gUWZjKGEsYixjLGQpe3ZhciBlLGYsZztlPWZhbHNlO2lmKGlnYyhhLmYsYyxkKSl7bGdjKGEuZixhLmFbYl1bY10sYS5hW2JdW2RdKTtmPWEuYVtiXTtnPWZbZF07ZltkXT1mW2NdO2ZbY109ZztlPXRydWV9cmV0dXJuIGV9CmZ1bmN0aW9uIGtrYyhhLGIsYyl7dmFyIGQsZSxmLGc7ZT1KRChOaWIoYS5iLGMpLDE4Myk7ZD0wO2ZvcihnPW5ldyBybWIoYi5qKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTEyKTtlW2YuZC5wXSYmKytkfXJldHVybiBkfQpmdW5jdGlvbiB2ZWIoYSxiKXt2YXIgYz0wO3doaWxlKCFiW2NdfHxiW2NdPT0nJyl7YysrfXZhciBkPWJbYysrXTtmb3IoO2M8Yi5sZW5ndGg7YysrKXtpZighYltjXXx8YltjXT09Jycpe2NvbnRpbnVlfWQrPWErYltjXX1yZXR1cm4gZH0KZnVuY3Rpb24gckViKGEsYil7cmV0dXJuIFJ5KCksUnkoKSxWeShLcmUpLCgkd25kLk1hdGguYWJzKGEtYik8PUtyZXx8YT09Ynx8aXNOYU4oYSkmJmlzTmFOKGIpPzA6YTxiPy0xOmE+Yj8xOld5KGlzTmFOKGEpLGlzTmFOKGIpKSk+MH0KZnVuY3Rpb24gdEViKGEsYil7cmV0dXJuIFJ5KCksUnkoKSxWeShLcmUpLCgkd25kLk1hdGguYWJzKGEtYik8PUtyZXx8YT09Ynx8aXNOYU4oYSkmJmlzTmFOKGIpPzA6YTxiPy0xOmE+Yj8xOld5KGlzTmFOKGEpLGlzTmFOKGIpKSk8MH0KZnVuY3Rpb24gc0ViKGEsYil7cmV0dXJuIFJ5KCksUnkoKSxWeShLcmUpLCgkd25kLk1hdGguYWJzKGEtYik8PUtyZXx8YT09Ynx8aXNOYU4oYSkmJmlzTmFOKGIpPzA6YTxiPy0xOmE+Yj8xOld5KGlzTmFOKGEpLGlzTmFOKGIpKSk8PTB9CmZ1bmN0aW9uIEk2YihhKXt2YXIgYjtiPWEuYTtkb3tiPUpEKGRzKG5ldyBlcyhJcihrWWIoYikuYS5KYygpLG5ldyBlcikpKSwxOCkuZC5pO2Iuaz09KERZYigpLHlZYikmJklsYihhLmUsYil9d2hpbGUoYi5rPT0oRFliKCkseVliKSl9CmZ1bmN0aW9uIENBYyhhLGIpe3ZhciBjLGQsZTtmb3IoZD1uZXcgZXMoSXIoa1liKGEpLmEuSmMoKSxuZXcgZXIpKTtjcyhkKTspe2M9SkQoZHMoZCksMTgpO2U9Yy5kLmk7aWYoZS5jPT1iKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBqSWQoYSl7dmFyIGIsYztiPUpEKENyZChhLmEsNCksMTI4KTtpZihiIT1udWxsKXtjPVNDKFg0LEpFZSw0MTIsYi5sZW5ndGgsMCwxKTskZ2IoYiwwLGMsMCxiLmxlbmd0aCk7cmV0dXJuIGN9ZWxzZXtyZXR1cm4gZ0lkfX0KZnVuY3Rpb24gRmllKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtmPW5ldyBVbGI7Zm9yKGM9X3VkKGEpLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtJbGIoZixJcGUoYix0cnVlKSl9cmV0dXJuIGZ9CmZ1bmN0aW9uIElpZShhKXt2YXIgYixjLGQsZSxmO2lmKGE9PW51bGwpcmV0dXJuIG51bGw7Zj1uZXcgVWxiO2ZvcihjPV91ZChhKSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07SWxiKGYsSXBlKGIsdHJ1ZSkpfXJldHVybiBmfQpmdW5jdGlvbiBKaWUoYSl7dmFyIGIsYyxkLGUsZjtpZihhPT1udWxsKXJldHVybiBudWxsO2Y9bmV3IFVsYjtmb3IoYz1fdWQoYSksZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO0lsYihmLElwZShiLHRydWUpKX1yZXR1cm4gZn0KZnVuY3Rpb24gemdiKGEsYixjKXt2YXIgZCxlLGYsZztmPWIrYzt6RGIoYixmLGEubGVuZ3RoKTtnPScnO2ZvcihlPWI7ZTxmOyl7ZD0kd25kLk1hdGgubWluKGUrMTAwMDAsZik7Zys9dmdiKGEuc2xpY2UoZSxkKSk7ZT1kfXJldHVybiBnfQpmdW5jdGlvbiBCZmMoYSl7dmFyIGI7aWYoYS5jPT0wKXtyZXR1cm59Yj1KRChNbGIoYS5hLGEuYiksMjkyKTtiLmI9PTE/KCsrYS5iLGEuYjxhLmEuYy5sZW5ndGgmJkZmYyhKRChNbGIoYS5hLGEuYiksMjkyKSkpOi0tYi5iOy0tYS5jfQpmdW5jdGlvbiBpMGMoKXtpMGM9WmNiO2YwYz1uZXcgajBjKCdQMV9XSURUSF9BUFBST1hJTUFUSU9OJywwKTtnMGM9bmV3IGowYygnUDJfUEFDS0lORycsMSk7aDBjPW5ldyBqMGMoJ1AzX1dISVRFU1BBQ0VfRUxJTUlOQVRJT04nLDIpfQpmdW5jdGlvbiBueWMoKXtueWM9WmNiO2t5Yz1uZXcgb3ljKHl2ZSwwKTtqeWM9bmV3IG95YygnTk9ERVNfQU5EX0VER0VTJywxKTtseWM9bmV3IG95YygnUFJFRkVSX0VER0VTJywyKTtteWM9bmV3IG95YygnUFJFRkVSX05PREVTJywzKX0KZnVuY3Rpb24geWtkKCl7eWtkPVpjYjt3a2Q9bmV3IHprZCgnUE9SVFMnLDApO3hrZD1uZXcgemtkKCdQT1JUX0xBQkVMUycsMSk7dmtkPW5ldyB6a2QoJ05PREVfTEFCRUxTJywyKTt1a2Q9bmV3IHprZCgnTUlOSU1VTV9TSVpFJywzKX0KZnVuY3Rpb24gem5jKCl7em5jPVpjYjt2bmM9bmV3IEJuYyhwd2UsMCk7dW5jPW5ldyBCbmMocXdlLDEpO3huYz1uZXcgQm5jKG93ZSwyKTt5bmM9bmV3IEJuYyh6dmUsMyk7d25jPW5ldyBCbmMoJ0dSRUVEWV9NT0RFTF9PUkRFUicsNCl9CmZ1bmN0aW9uIHVKYihhKXtzd2l0Y2goYS5nKXtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpyZXR1cm4gdHJ1ZTtkZWZhdWx0OnJldHVybiBmYWxzZTt9fQpmdW5jdGlvbiBDNGMoYSxiLGMsZCxlLGYpe3RoaXMuYT1hO3RoaXMuYz1iO3RoaXMuYj1jO3RoaXMuZj1kO3RoaXMuZD1lO3RoaXMuZT1mO3RoaXMuYz4wJiZ0aGlzLmI+MCYmKHRoaXMuZz1RNGModGhpcy5jLHRoaXMuYix0aGlzLmEpKX0KZnVuY3Rpb24gakMoZixhKXt2YXIgYj1mLmE7dmFyIGM7YT1TdHJpbmcoYSk7Yi5oYXNPd25Qcm9wZXJ0eShhKSYmKGM9YlthXSk7dmFyIGQ9KHpDKCkseUMpW3R5cGVvZiBjXTt2YXIgZT1kP2QoYyk6RkModHlwZW9mIGMpO3JldHVybiBlfQpmdW5jdGlvbiBZeGQoYSl7dmFyIGIsYyxkO2Q9bnVsbDtiPXZEZSBpbiBhLmE7Yz0hYjtpZihjKXt0aHJvdyBzY2IobmV3IGV5ZCgnRXZlcnkgZWxlbWVudCBtdXN0IGhhdmUgYW4gaWQuJykpfWQ9WHhkKGlDKGEsdkRlKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIGptZShhKXt2YXIgYixjO2M9a21lKGEpO2I9bnVsbDt3aGlsZShhLmM9PTIpe2ZtZShhKTtpZighYil7Yj0ob29lKCksb29lKCksKytub2UsbmV3IERwZSgyKSk7Q3BlKGIsYyk7Yz1ifWMuR20oa21lKGEpKX1yZXR1cm4gY30KZnVuY3Rpb24gSUpkKGEsYil7dmFyIGMsZCxlO2EuWWooKTtkPWI9PW51bGw/MDp0YihiKTtlPShkJkhxZSklYS5kLmxlbmd0aDtjPXRKZChhLGUsZCxiKTtpZihjKXtHSmQoYSxjKTtyZXR1cm4gYy5rZCgpfWVsc2V7cmV0dXJuIG51bGx9fQpmdW5jdGlvbiBlbWQoYSxiKXt2YXIgYyxkLGU7aWYoYS5jKXtndGQoYS5jLGIpfWVsc2V7Yz1iLWNtZChhKTtmb3IoZT1uZXcgcm1iKGEuZCk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE2Mik7ZW1kKGQsY21kKGQpK2MpfX19CmZ1bmN0aW9uIGRtZChhLGIpe3ZhciBjLGQsZTtpZihhLmMpe2V0ZChhLmMsYil9ZWxzZXtjPWItYm1kKGEpO2ZvcihlPW5ldyBybWIoYS5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTYyKTtkbWQoZCxibWQoZCkrYyl9fX0KZnVuY3Rpb24gd05jKGEsYixjLGQpe3ZhciBlLGY7aWYoYi5jLmxlbmd0aD09MCl7cmV0dXJufWU9c05jKGMsZCk7Zj1yTmMoYik7RUJiKE9CYihuZXcgUkJiKG51bGwsbmV3IEd2YihmLDEpKSxuZXcgRk5jKSxuZXcgSk5jKGEsYyxlLGQpKX0KZnVuY3Rpb24gWEJjKGEsYil7aWYoYi5jPT1hKXtyZXR1cm4gYi5kfWVsc2UgaWYoYi5kPT1hKXtyZXR1cm4gYi5jfXRocm93IHNjYihuZXcgVGViKCdJbnB1dCBlZGdlIGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIGlucHV0IHBvcnQuJykpfQpmdW5jdGlvbiBIaGIoYSxiKXtpZihhLmU+Yi5lKXtyZXR1cm4gMX1pZihhLmU8Yi5lKXtyZXR1cm4gLTF9aWYoYS5kPmIuZCl7cmV0dXJuIGEuZX1pZihhLmQ8Yi5kKXtyZXR1cm4gLWIuZX1yZXR1cm4gYS5lKnZpYihhLmEsYi5hLGEuZCl9CmZ1bmN0aW9uIFdkYihhKXtpZihhPj00OCYmYTw0OCskd25kLk1hdGgubWluKDEwLDEwKSl7cmV0dXJuIGEtNDh9aWYoYT49OTcmJmE8OTcpe3JldHVybiBhLTk3KzEwfWlmKGE+PTY1JiZhPDY1KXtyZXR1cm4gYS02NSsxMH1yZXR1cm4gLTF9CmZ1bmN0aW9uIEI5YyhhLGIpe2lmKGEuYTwwKXt0aHJvdyBzY2IobmV3IFdlYignRGlkIG5vdCBjYWxsIGJlZm9yZSguLi4pIG9yIGFmdGVyKC4uLikgYmVmb3JlIGNhbGxpbmcgYWRkKC4uLikuJykpfUk5YyhhLGEuYSxiKTtyZXR1cm4gYX0KZnVuY3Rpb24gY0VkKGEpe2JFZCgpO2lmKFJEKGEsMTYxKSl7cmV0dXJuIEpEKE5pYihfRGQscUspLDI5MykuUGcoYSl9aWYoTGliKF9EZCxyYihhKSkpe3JldHVybiBKRChOaWIoX0RkLHJiKGEpKSwyOTMpLlBnKGEpfXJldHVybiBudWxsfQpmdW5jdGlvbiBBcmQoYSl7dmFyIGIsYztpZigoYS5EYiYzMik9PTApe2M9KGI9SkQoQ3JkKGEsMTYpLDI5KSxWVGQoIWI/YS5laSgpOmIpLVZUZChhLmVpKCkpKTtjIT0wJiZFcmQoYSwzMixTQyhhSixOcWUsMSxjLDUsMSkpfXJldHVybiBhfQpmdW5jdGlvbiBFcmQoYSxiLGMpe3ZhciBkO2lmKChhLkRiJmIpIT0wKXtpZihjPT1udWxsKXtEcmQoYSxiKX1lbHNle2Q9QnJkKGEsYik7ZD09LTE/KGEuRWI9Yyk6VkMoS0QoYS5FYiksZCxjKX19ZWxzZSBjIT1udWxsJiZ4cmQoYSxiLGMpfQpmdW5jdGlvbiB5ZmIoYSl7dmFyIGIsYztpZih2Y2IoYSwtMTI5KT4wJiZ2Y2IoYSwxMjgpPDApe3JldHVybiBBZmIoKSxiPVBjYihhKSsxMjgsYz16ZmJbYl0sIWMmJihjPXpmYltiXT1uZXcgcWZiKGEpKSxjfXJldHVybiBuZXcgcWZiKGEpfQpmdW5jdGlvbiBTZShhLGIpe3ZhciBjO2lmKFhEKGIpPT09WEQoYSkpe3JldHVybiB0cnVlfWlmKCFSRChiLDIyKSl7cmV0dXJuIGZhbHNlfWM9SkQoYiwyMik7aWYoYy5nYygpIT1hLmdjKCkpe3JldHVybiBmYWxzZX1yZXR1cm4gYS5IYyhjKX0KZnVuY3Rpb24gbHFkKGEpe3ZhciBiLGMsZDtkPWEuRmgoKTtpZighZCl7Yj0wO2ZvcihjPWEuTGgoKTtjO2M9Yy5MaCgpKXtpZigrK2I+U3NlKXtyZXR1cm4gYy5NaCgpfWQ9Yy5GaCgpO2lmKCEhZHx8Yz09YSl7YnJlYWt9fX1yZXR1cm4gZH0KZnVuY3Rpb24gaWxiKGEsYil7dmFyIGMsZCxlLGY7ZD1hLmEubGVuZ3RoLTE7Yz1iLWEuYiZkO2Y9YS5jLWImZDtlPWEuYy1hLmImZDtxbGIoYzxlKTtpZihjPj1mKXtsbGIoYSxiKTtyZXR1cm4gLTF9ZWxzZXttbGIoYSxiKTtyZXR1cm4gMX19CmZ1bmN0aW9uIFlfZChhLGIsYyl7dmFyIGQsZSxmO2Q9SkQobkRkKEpfZChhLmEpLGIpLDg3KTtmPShlPWQuYyxlP2U6KGNQZCgpLFJPZCkpOyhmLlJoKCk/enFkKGEuYixKRChmLDUyKSk6Zik9PWM/RFpkKGQpOkdaZChkLGMpO3JldHVybiBmfQpmdW5jdGlvbiBpRGIoYSl7c3dpdGNoKHR5cGVvZihhKSl7Y2FzZSBGcWU6cmV0dXJuIGZnYihhKTtjYXNlIEVxZTpyZXR1cm4gRWViKGEpO2Nhc2UgRHFlOnJldHVybiBBZGIoYSk7ZGVmYXVsdDpyZXR1cm4gYT09bnVsbD8wOmpEYihhKTt9fQpmdW5jdGlvbiBuSGMoYSxiKXtpZihhLmU8Yi5lKXtyZXR1cm4gLTF9ZWxzZSBpZihhLmU+Yi5lKXtyZXR1cm4gMX1lbHNlIGlmKGEuZjxiLmYpe3JldHVybiAtMX1lbHNlIGlmKGEuZj5iLmYpe3JldHVybiAxfXJldHVybiB0YihhKS10YihiKX0KZnVuY3Rpb24gZGdiKGEsYil7dERiKGEpO2lmKGI9PW51bGwpe3JldHVybiBmYWxzZX1pZihjZ2IoYSxiKSl7cmV0dXJuIHRydWV9cmV0dXJuIGEubGVuZ3RoPT1iLmxlbmd0aCYmY2diKGEudG9Mb3dlckNhc2UoKSxiLnRvTG93ZXJDYXNlKCkpfQpmdW5jdGlvbiAkNWQoYSl7aWYoZGdiKENCZSxhKSl7cmV0dXJuIHhkYigpLHdkYn1lbHNlIGlmKGRnYihEQmUsYSkpe3JldHVybiB4ZGIoKSx2ZGJ9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYignRXhwZWN0aW5nIHRydWUgb3IgZmFsc2UnKSl9fQpmdW5jdGlvbiBjVWIoKXtjVWI9WmNiO2JVYj1uZXcgZFViKHl2ZSwwKTtfVGI9bmV3IGRVYignSU5TSURFX1BPUlRfU0lERV9HUk9VUFMnLDEpOyRUYj1uZXcgZFViKCdHUk9VUF9NT0RFTF9PUkRFUicsMik7YVViPW5ldyBkVWIoenZlLDMpfQpmdW5jdGlvbiBQYWUoYSl7dmFyIGI7YS5ifHxRYWUoYSwoYj1hYWUoYS5lLGEuYSksIWJ8fCFjZ2IoREJlLHhKZCgoIWIuYiYmKGIuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LGIpKSxiLmIpLCdxdWFsaWZpZWQnKSkpKTtyZXR1cm4gYS5jfQpmdW5jdGlvbiB0QShhLGIpe3ZhciBjLGQ7Yz0oQURiKGIsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChiKSk7ZD1iKzE7d2hpbGUoZDxhLmxlbmd0aCYmKEFEYihkLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoZCk9PWMpKXsrK2R9cmV0dXJuIGQtYn0KZnVuY3Rpb24gY0RiKGEsYil7KCFiJiZjb25zb2xlLmdyb3VwQ29sbGFwc2VkIT1udWxsP2NvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ6Y29uc29sZS5ncm91cCE9bnVsbD9jb25zb2xlLmdyb3VwOmNvbnNvbGUubG9nKS5jYWxsKGNvbnNvbGUsYSl9CmZ1bmN0aW9uIE9MYihhLGIsYyxkKXtkPT1hPyhKRChjLmIsNjgpLEpEKGMuYiw2OCksSkQoZC5iLDY4KSxKRChkLmIsNjgpLmMuYik6KEpEKGMuYiw2OCksSkQoYy5iLDY4KSxKRChkLmIsNjgpLEpEKGQuYiw2OCkuYy5iKTtMTGIoZCxiLGEpfQpmdW5jdGlvbiBCamMoYSxiLGMpe2IuYj0kd25kLk1hdGgubWF4KGIuYiwtYy5hKTtiLmM9JHduZC5NYXRoLm1heChiLmMsYy5hLWEuYSk7Yi5kPSR3bmQuTWF0aC5tYXgoYi5kLC1jLmIpO2IuYT0kd25kLk1hdGgubWF4KGIuYSxjLmItYS5iKX0KZnVuY3Rpb24gVFFiKGEsYixjKXt0aGlzLmM9YTt0aGlzLmY9bmV3IFVsYjt0aGlzLmU9bmV3IENkZDt0aGlzLmo9bmV3IFVSYjt0aGlzLm49bmV3IFVSYjt0aGlzLmI9Yjt0aGlzLmc9bmV3IGdkZChiLmMsYi5kLGIuYixiLmEpO3RoaXMuYT1jfQpmdW5jdGlvbiBzUmIoYSl7dmFyIGIsYyxkLGU7dGhpcy5hPW5ldyB3dGI7dGhpcy5kPW5ldyBRcmI7dGhpcy5lPTA7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07IXRoaXMuZiYmKHRoaXMuZj1iKTtxUmIodGhpcyxiKX19CmZ1bmN0aW9uIFdoYihhKXtHaGIoKTtpZihhLmxlbmd0aD09MCl7dGhpcy5lPTA7dGhpcy5kPTE7dGhpcy5hPVdDKE9DKGNFLDEpLGlzZSwzMCwxNSxbMF0pfWVsc2V7dGhpcy5lPTE7dGhpcy5kPWEubGVuZ3RoO3RoaXMuYT1hO0loYih0aGlzKX19CmZ1bmN0aW9uIE04YihhKXt2YXIgYixjLGQsZSxmLGc7Zz1KRChXTWIoYSwoSXFjKCksa3FjKSksMTEpO1pNYihnLENxYyxhLmkubi5iKTtiPUNYYihhLmUpO2ZvcihkPWIsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2hXYihjLGcpfX0KZnVuY3Rpb24gTjhiKGEpe3ZhciBiLGMsZCxlLGYsZztjPUpEKFdNYihhLChJcWMoKSxrcWMpKSwxMSk7Wk1iKGMsQ3FjLGEuaS5uLmIpO2I9Q1hiKGEuZyk7Zm9yKGU9YixmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07Z1diKGQsYyl9fQpmdW5jdGlvbiBwRGMoYSxiLGMpe3ZhciBkLGUsZjtkPWIuYy5wO2Y9Yi5wO2EuYltkXVtmXT1uZXcgQkRjKGEsYik7aWYoYyl7YS5hW2RdW2ZdPW5ldyBnRGMoYik7ZT1KRChXTWIoYiwoSXFjKCksX3BjKSksOSk7ISFlJiZSYyhhLmQsZSxiKX19CmZ1bmN0aW9uIFA3YyhhLGIsYyl7dmFyIGQsZSxmO2ZvcihmPW5ldyBybWIoYy5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjI0KTtkPW5ldyBaRGIoSkQoTmliKGEuYSxlLmIpLDY4KSk7SWxiKGIuYSxkKTtQN2MoYSxkLGUpfX0KZnVuY3Rpb24gZ0xjKGEsYil7WktjKCk7dmFyIGMsZDtmb3IoZD1uZXcgZXMoSXIoZVliKGEpLmEuSmMoKSxuZXcgZXIpKTtjcyhkKTspe2M9SkQoZHMoZCksMTgpO2lmKGMuZC5pPT1ifHxjLmMuaT09Yil7cmV0dXJuIGN9fXJldHVybiBudWxsfQpmdW5jdGlvbiBVOWQoYSxiKXt2YXIgYyxkO2M9Yi5taShhLmEpO2lmKGMpe2Q9T0QoeEpkKCghYy5iJiYoYy5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsYykpLGMuYiksSERlKSk7aWYoZCE9bnVsbCl7cmV0dXJuIGR9fXJldHVybiBiLnZlKCl9CmZ1bmN0aW9uIFY5ZChhLGIpe3ZhciBjLGQ7Yz1iLm1pKGEuYSk7aWYoYyl7ZD1PRCh4SmQoKCFjLmImJihjLmI9bmV3IGxSZCgoY1BkKCksJE9kKSx1NyxjKSksYy5iKSxIRGUpKTtpZihkIT1udWxsKXtyZXR1cm4gZH19cmV0dXJuIGIudmUoKX0KZnVuY3Rpb24gTjBiKGEsYil7dmFyIGMsZDtjPSRlYihhLmEuYy5wLGIuYS5jLnApO2lmKGMhPTApe3JldHVybiBjfWQ9JGViKGEuYS5kLmkucCxiLmEuZC5pLnApO2lmKGQhPTApe3JldHVybiBkfXJldHVybiAkZWIoYi5hLmQucCxhLmEuZC5wKX0KZnVuY3Rpb24gcGZlKGEsYil7dmFyIGMsZCxlLGY7Zm9yKGQ9MCxlPWIuZ2MoKTtkPGU7KytkKXtjPWIuUWwoZCk7aWYoUkQoYywxMDEpJiYoSkQoYywxOSkuQmImUkNlKSE9MCl7Zj1iLlJsKGQpO2YhPW51bGwmJmtmZShhLEpEKGYsNTcpKX19fQpmdW5jdGlvbiBLeigpe3ZhciBhO2lmKEZ6IT0wKXthPURhdGUubm93KCk7aWYoYS1Hej4yMDAwKXtHej1hO0h6PSR3bmQuc2V0VGltZW91dChReiwxMCl9fWlmKEZ6Kys9PTApe1R6KChTeigpLFJ6KSk7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBfemIoYSxiLGMpe3ZhciBkOyhSemI/KFp6YihhKSx0cnVlKTpTemI/KEd6YigpLHRydWUpOlZ6Yj8oR3piKCksdHJ1ZSk6VXpiJiYoR3piKCksZmFsc2UpKSYmKGQ9bmV3IFF6YihiKSxkLmI9YyxYemIoYSxkKSx1bmRlZmluZWQpfQpmdW5jdGlvbiBvSWIoYSxiLGMpe3FIYi5jYWxsKHRoaXMpO3RoaXMuYT1TQyhnTiwkdGUsMjE1LChpSGIoKSxXQyhPQyhoTiwxKSxFcmUsMjM2LDAsW2ZIYixnSGIsaEhiXSkpLmxlbmd0aCwwLDEpO3RoaXMuYj1hO3RoaXMuZD1iO3RoaXMuYz1jfQpmdW5jdGlvbiBOZ2MoYSl7dGhpcy5kPW5ldyBVbGI7dGhpcy5lPW5ldyBYc2I7dGhpcy5jPVNDKGNFLGlzZSwzMCwoUmpkKCksV0MoT0ModjIsMSksQXZlLDY0LDAsW1BqZCx4amQsd2pkLE9qZCxRamRdKSkubGVuZ3RoLDE1LDEpO3RoaXMuYj1hfQpmdW5jdGlvbiB5Z2MoYSl7dmFyIGI7dGhpcy5kPW5ldyBVbGI7dGhpcy5qPW5ldyBDZGQ7dGhpcy5nPW5ldyBDZGQ7Yj1hLmcuYjt0aGlzLmY9SkQoV01iKGdZYihiKSwoQndjKCkscnVjKSksODYpO3RoaXMuZT1CZWIoTUQodVhiKGIsYXdjKSkpfQpmdW5jdGlvbiB6S2IoYSxiKXt2YXIgYztjPSFhLkEuR2MoKHlrZCgpLHhrZCkpfHxhLnE9PShhamQoKSxYaWQpO2EudS5HYygob2pkKCksa2pkKSk/Yz94S2IoYSxiKTpCS2IoYSxiKTphLnUuR2MobWpkKSYmKGM/eUtiKGEsYik6Q0tiKGEsYikpfQpmdW5jdGlvbiBROGMoYSl7dmFyIGI7aWYoWEQoa3NkKGEsKExnZCgpLGlmZCkpKT09PVhEKChlaWQoKSxjaWQpKSl7aWYoIVp3ZChhKSl7bXNkKGEsaWZkLGRpZCl9ZWxzZXtiPUpEKGtzZChad2QoYSksaWZkKSwzNDIpO21zZChhLGlmZCxiKX19fQpmdW5jdGlvbiBsZ2MoYSxiLGMpe3ZhciBkLGU7RUdjKGEuZSxiLGMsKFJqZCgpLFFqZCkpO0VHYyhhLmksYixjLHdqZCk7aWYoYS5hKXtlPUpEKFdNYihiLChJcWMoKSxrcWMpKSwxMSk7ZD1KRChXTWIoYyxrcWMpLDExKTtGR2MoYS5nLGUsZCl9fQpmdW5jdGlvbiBuOWIoYSl7dmFyIGIsYztpZihYTWIoYS5kLmksKEJ3YygpLHd2YykpKXtiPUpEKFdNYihhLmMuaSx3dmMpLDE3KTtjPUpEKFdNYihhLmQuaSx3dmMpLDE3KTtyZXR1cm4gJGViKGIuYSxjLmEpPjB9ZWxzZXtyZXR1cm4gZmFsc2V9fQpmdW5jdGlvbiBxVWIoYSxiLGMpe3JldHVybiBuZXcgZ2RkKCR3bmQuTWF0aC5taW4oYS5hLGIuYSktYy8yLCR3bmQuTWF0aC5taW4oYS5iLGIuYiktYy8yLCR3bmQuTWF0aC5hYnMoYS5hLWIuYSkrYywkd25kLk1hdGguYWJzKGEuYi1iLmIpK2MpfQpmdW5jdGlvbiB4amMoYSxiLGMpe3ZhciBkO2Q9Y1thLmddW2JdO3N3aXRjaChhLmcpe2Nhc2UgMTpjYXNlIDM6cmV0dXJuIG5ldyBFZGQoMCxkKTtjYXNlIDI6Y2FzZSA0OnJldHVybiBuZXcgRWRkKGQsMCk7ZGVmYXVsdDpyZXR1cm4gbnVsbDt9fQpmdW5jdGlvbiBveWQoYSxiKXt2YXIgYztjPXdvKGEubyxiKTtpZihjPT1udWxsKXt0aHJvdyBzY2IobmV3IGV5ZCgnTm9kZSBkaWQgbm90IGV4aXN0IGluIGlucHV0LicpKX1lemQoYSxiKTtkemQoYSxiKTtvemQoYSxiLGMpO3JldHVybiBudWxsfQpmdW5jdGlvbiBXOGQoYSxiKXt2YXIgYyxkOysrYS5qO2lmKGIhPW51bGwpe2M9KGQ9YS5hLkNiLFJEKGQsOTgpP0pEKGQsOTgpLnBoKCk6bnVsbCk7aWYoQW1iKGIsYykpe0VyZChhLmEsNCxjKTtyZXR1cm59fUVyZChhLmEsNCxKRChiLDEyOCkpfQpmdW5jdGlvbiBDQ2MoYSxiLGMpe3ZhciBkLGUsZixnO2Y9Yi5qO2c9Yy5qO2lmKGYhPWcpe3JldHVybiBmLmctZy5nfWVsc2V7ZD1hLmZbYi5wXTtlPWEuZltjLnBdO3JldHVybiBkPT0wJiZlPT0wPzA6ZD09MD8tMTplPT0wPzE6SGViKGQsZSl9fQpmdW5jdGlvbiBLRmIoYSxiLGMpe3ZhciBkLGUsZjtpZihjW2IuZF0pe3JldHVybn1jW2IuZF09dHJ1ZTtmb3IoZT1uZXcgcm1iKE9GYihiKSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDIxNik7Zj1BRmIoZCxiKTtLRmIoYSxmLGMpfX0KZnVuY3Rpb24gY21jKGEsYil7dmFyIGMsZCxlLGY7Yz0wO2ZvcihlPW5ldyBybWIoYi5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksOSk7Zj1kLm8uYStkLmQuYytkLmQuYithLmo7Yz0kd25kLk1hdGgubWF4KGMsZil9cmV0dXJuIGN9CmZ1bmN0aW9uIGNuYihhLGIpe3ZhciBjLGQ7ZD1hLmEubGVuZ3RoO2IubGVuZ3RoPGQmJihiPWJEYihuZXcgQXJyYXkoZCksYikpO2ZvcihjPTA7YzxkOysrYyl7VkMoYixjLGEuYVtjXSl9Yi5sZW5ndGg+ZCYmVkMoYixkLG51bGwpO3JldHVybiBifQpmdW5jdGlvbiBUbGIoYSxiKXt2YXIgYyxkO2Q9YS5jLmxlbmd0aDtiLmxlbmd0aDxkJiYoYj1iRGIobmV3IEFycmF5KGQpLGIpKTtmb3IoYz0wO2M8ZDsrK2Mpe1ZDKGIsYyxhLmNbY10pfWIubGVuZ3RoPmQmJlZDKGIsZCxudWxsKTtyZXR1cm4gYn0KZnVuY3Rpb24gTk5kKGEsYixjLGQpe3ZhciBlO2U9YS5sZW5ndGg7aWYoYj49ZSlyZXR1cm4gZTtmb3IoYj1iPjA/YjowO2I8ZTtiKyspe2lmKFVOZCgoQURiKGIsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChiKSksYyxkKSlicmVha31yZXR1cm4gYn0KZnVuY3Rpb24gTTBkKGEsYixjLGQpe3ZhciBlLGYsZztlPW5ldyBpX2QoYS5lLDEsMTMsKGc9Yi5jLGc/ZzooY1BkKCksUk9kKSksKGY9Yy5jLGY/ZjooY1BkKCksUk9kKSksQVVkKGEsYiksZmFsc2UpOyFkPyhkPWUpOmQua2ooZSk7cmV0dXJuIGR9CmZ1bmN0aW9uIGp6ZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2Q9bnVsbDtoPUthZChOYWQoKSxiKTtmPW51bGw7aWYoaCl7ZT1udWxsO2k9T2JkKGgsYyk7Zz1udWxsO2khPW51bGwmJihnPWEub2YoaCxpKSk7ZT1nO2Y9ZX1kPWY7cmV0dXJuIGR9CmZ1bmN0aW9uIFVzYihhLGIsYyl7dmFyIGQsZSxmO2U9SkQoTmliKGEuZSxiKSwzOTEpO2lmKCFlKXtkPW5ldyBpdGIoYSxiLGMpO1FpYihhLmUsYixkKTtmdGIoZCk7cmV0dXJuIG51bGx9ZWxzZXtmPWhrYihlLGMpO1ZzYihhLGUpO3JldHVybiBmfX0KZnVuY3Rpb24gcHlkKGEsYil7dmFyIGM7Yz1OaWIoYS5xLGIpO2lmKGM9PW51bGwpe3Rocm93IHNjYihuZXcgZXlkKCdQb3J0IGRpZCBub3QgZXhpc3QgaW4gaW5wdXQuJykpfWV6ZChhLGIpO2R6ZChhLGIpO296ZChhLGIsYyk7cmV0dXJuIG51bGx9CmZ1bmN0aW9uIFI4YyhiLGMsZCl7dmFyIGUsZjtmPUpEKFZuZChjLmYpLDIyMik7dHJ5e2Yua2YoYixkKTtXbmQoYy5mLGYpfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTAzKSl7ZT1hO3Rocm93IHNjYihlKX1lbHNlIHRocm93IHNjYihhKX19CmZ1bmN0aW9uIEhpZShhKXt2YXIgYjtpZihhPT1udWxsKXJldHVybiBudWxsO2I9YW1lKElwZShhLHRydWUpKTtpZihiPT1udWxsKXt0aHJvdyBzY2IobmV3IGZoZSgiSW52YWxpZCBoZXhCaW5hcnkgdmFsdWU6ICciK2ErIiciKSl9cmV0dXJuIGJ9CmZ1bmN0aW9uIG9BKGEsYixjKXt2YXIgZDtpZihiLmEubGVuZ3RoPjApe0lsYihhLmIsbmV3IGNCKGIuYSxjKSk7ZD1iLmEubGVuZ3RoOzA8ZD8oYi5hPXFnYihiLmEsMCwwKSk6MD5kJiYoYi5hKz15Z2IoU0MoX0QsVXJlLDMwLC1kLDE1LDEpKSl9fQpmdW5jdGlvbiB5SmIoKXtzSmIoKTtyZXR1cm4gV0MoT0Modk4sMSksRXJlLDE2NiwwLFtwSmIsb0piLHFKYixnSmIsZkpiLGhKYixrSmIsakpiLGlKYixuSmIsbUpiLGxKYixkSmIsY0piLGVKYixhSmIsX0liLGJKYixaSWIsWUliLCRJYixySmJdKX0KZnVuY3Rpb24gbVFjKGEpe3N3aXRjaChhLmcpe2Nhc2UgNDpyZXR1cm4gbmV3IEVkZCgwLC0xKTtjYXNlIDE6cmV0dXJuIG5ldyBFZGQoMSwwKTtjYXNlIDI6cmV0dXJuIG5ldyBFZGQoLTEsMCk7ZGVmYXVsdDpyZXR1cm4gbmV3IEVkZCgwLDEpO319CmZ1bmN0aW9uIHBVYihhKXtzd2l0Y2goYS5nKXtjYXNlIDE6cmV0dXJuIFRnZCgpLFNnZDtjYXNlIDQ6cmV0dXJuIFRnZCgpLFBnZDtjYXNlIDI6cmV0dXJuIFRnZCgpLFFnZDtjYXNlIDM6cmV0dXJuIFRnZCgpLE9nZDt9cmV0dXJuIFRnZCgpLFJnZH0KZnVuY3Rpb24gTlZkKGEpe3ZhciBiO2I9YS5laihudWxsKTtzd2l0Y2goYil7Y2FzZSAxMDpyZXR1cm4gMDtjYXNlIDE1OnJldHVybiAxO2Nhc2UgMTQ6cmV0dXJuIDI7Y2FzZSAxMTpyZXR1cm4gMztjYXNlIDIxOnJldHVybiA0O31yZXR1cm4gLTF9CmZ1bmN0aW9uIGxjZCgpe2xjZD1aY2I7amNkPW5ldyBtY2QoJ1BBUkVOVFMnLDApO2ljZD1uZXcgbWNkKCdOT0RFUycsMSk7Z2NkPW5ldyBtY2QoJ0VER0VTJywyKTtrY2Q9bmV3IG1jZCgnUE9SVFMnLDMpO2hjZD1uZXcgbWNkKCdMQUJFTFMnLDQpfQpmdW5jdGlvbiBRaWQoKXtRaWQ9WmNiO05pZD1uZXcgUmlkKCdESVNUUklCVVRFRCcsMCk7UGlkPW5ldyBSaWQoJ0pVU1RJRklFRCcsMSk7TGlkPW5ldyBSaWQoJ0JFR0lOJywyKTtNaWQ9bmV3IFJpZChZdGUsMyk7T2lkPW5ldyBSaWQoJ0VORCcsNCl9CmZ1bmN0aW9uIHNBKGEsYixjKXt2YXIgZDtkPWMucS5nZXRGdWxsWWVhcigpLWhzZStoc2U7ZDwwJiYoZD0tZCk7c3dpdGNoKGIpe2Nhc2UgMTphLmErPWQ7YnJlYWs7Y2FzZSAyOk1BKGEsZCUxMDAsMik7YnJlYWs7ZGVmYXVsdDpNQShhLGQsYik7fX0KZnVuY3Rpb24gR3RiKGEsYil7dmFyIGMsZDt2RGIoYixhLmIpO2lmKGI+PWEuYj4+MSl7ZD1hLmM7Zm9yKGM9YS5iO2M+YjstLWMpe2Q9ZC5ifX1lbHNle2Q9YS5hLmE7Zm9yKGM9MDtjPGI7KytjKXtkPWQuYX19cmV0dXJuIG5ldyBYdGIoYSxiLGQpfQpmdW5jdGlvbiBTZ2MoYSl7dGhpcy5iPW5ldyBVbGI7dGhpcy5lPW5ldyBVbGI7dGhpcy5kPWE7dGhpcy5hPSFQQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgSHZiKG5ldyB4WmIoYS5iKSkpLG5ldyBEemIobmV3IFRnYykpKS56ZCgod0JiKCksdkJiKSl9CmZ1bmN0aW9uIFJPYyhhLGIpe3ZhciBjLGQsZTtlPWIuZC5pO2Q9ZS5rO2lmKGQ9PShEWWIoKSxBWWIpfHxkPT12WWIpe3JldHVybn1jPW5ldyBlcyhJcihrWWIoZSkuYS5KYygpLG5ldyBlcikpO2NzKGMpJiZRaWIoYS5rLGIsSkQoZHMoYyksMTgpKX0KZnVuY3Rpb24gUldjKGEsYil7RVdjKCk7cmV0dXJuIEhlYigoYS5hLmI9PTA/bmV3IEVkZChhLmMuZS5hLGEuYy5lLmIpOkpEKEV0YihhLmEpLDgpKS5iLChiLmEuYj09MD9uZXcgRWRkKGIuYy5lLmEsYi5jLmUuYik6SkQoRXRiKGIuYSksOCkpLmIpfQpmdW5jdGlvbiBTV2MoYSxiKXtFV2MoKTtyZXR1cm4gSGViKChhLmEuYj09MD9uZXcgRWRkKGEuYy5lLmEsYS5jLmUuYik6SkQoRXRiKGEuYSksOCkpLmEsKGIuYS5iPT0wP25ldyBFZGQoYi5jLmUuYSxiLmMuZS5iKTpKRChFdGIoYi5hKSw4KSkuYSl9CmZ1bmN0aW9uIFZXYyhhLGIpe0VXYygpO3JldHVybiBIZWIoKGEuYS5iPT0wP25ldyBFZGQoYS5iLmUuYSxhLmIuZS5iKTpKRChGdGIoYS5hKSw4KSkuYSwoYi5hLmI9PTA/bmV3IEVkZChiLmIuZS5hLGIuYi5lLmIpOkpEKEZ0YihiLmEpLDgpKS5hKX0KZnVuY3Rpb24gVFdjKGEsYil7RVdjKCk7cmV0dXJuIEhlYigoYS5hLmI9PTA/bmV3IEVkZChhLmIuZS5hLGEuYi5lLmIpOkpEKEZ0YihhLmEpLDgpKS5iLChiLmEuYj09MD9uZXcgRWRkKGIuYi5lLmEsYi5iLmUuYik6SkQoRnRiKGIuYSksOCkpLmIpfQpmdW5jdGlvbiBvcWQoYSxiKXt2YXIgYyxkLGU7ZD1RVGQoYS56aCgpLGIpO2M9Yi1hLmZpKCk7cmV0dXJuIGM8MD8oZT1hLkVoKGQpLGU+PTA/YS5TaChlKTp2cWQoYSxkKSk6YzwwP3ZxZChhLGQpOkpEKGQsNjkpLnRrKCkueWsoYSxhLmRpKCksYyl9CmZ1bmN0aW9uIGpzZChhKXt2YXIgYixjLGQ7ZD0oIWEubyYmKGEubz1uZXcgWVFkKChWcGQoKSxTcGQpLE8zLGEsMCkpLGEubyk7Zm9yKGM9ZC5jLkpjKCk7Yy5lIT1jLmkuZ2MoKTspe2I9SkQoYy5WaigpLDQzKTtiLmtkKCl9cmV0dXJuIENKZChkKX0KZnVuY3Rpb24gSkJkKGEpe3ZhciBiO2lmKFJEKGEuYSw0KSl7Yj1jRWQoYS5hKTtpZihiPT1udWxsKXt0aHJvdyBzY2IobmV3IFdlYihFQmUrYS5iKyInLiAiK0FCZSsoY2ViKFY0KSxWNC5rKStCQmUpKX1yZXR1cm4gYn1lbHNle3JldHVybiBhLmF9fQpmdW5jdGlvbiBEaWUoYSl7dmFyIGI7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtiPVZsZShJcGUoYSx0cnVlKSk7aWYoYj09bnVsbCl7dGhyb3cgc2NiKG5ldyBmaGUoIkludmFsaWQgYmFzZTY0QmluYXJ5IHZhbHVlOiAnIithKyInIikpfXJldHVybiBifQpmdW5jdGlvbiBBSGQoYil7dmFyIGM7dHJ5e2M9Yi5pLlhiKGIuZSk7Yi5VaigpO2IuZz1iLmUrKztyZXR1cm4gY31jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDk3KSl7Yi5VaigpO3Rocm93IHNjYihuZXcgcXViKX1lbHNlIHRocm93IHNjYihhKX19CmZ1bmN0aW9uIFdIZChiKXt2YXIgYzt0cnl7Yz1iLmMuU2koYi5lKTtiLlVqKCk7Yi5nPWIuZSsrO3JldHVybiBjfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsOTcpKXtiLlVqKCk7dGhyb3cgc2NiKG5ldyBxdWIpfWVsc2UgdGhyb3cgc2NiKGEpfX0KZnVuY3Rpb24gUU5kKGEpe3ZhciBiLGMsZCxlO2U9MDtmb3IoYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl7Yj0oQURiKGMsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChjKSk7Yj49NjQmJmI8MTI4JiYoZT1JY2IoZSxKY2IoMSxiLTY0KSkpfXJldHVybiBlfQpmdW5jdGlvbiB1WGIoYSxiKXt2YXIgYyxkO2Q9bnVsbDtpZihYTWIoYSwoTGdkKCkscmdkKSkpe2M9SkQoV01iKGEscmdkKSwxMDIpO2MubmYoYikmJihkPWMubWYoYikpfWQ9PW51bGwmJiEhZ1liKGEpJiYoZD1XTWIoZ1liKGEpLGIpKTtyZXR1cm4gZH0KZnVuY3Rpb24geDZiKGEsYil7dmFyIGMsZCxlO2U9bmV3IFZsYihiLmdjKCkpO2ZvcihkPWIuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwyOTEpO2MuYz09Yy5mP202YihhLGMsYy5jKTpuNmIoYSxjKXx8KFlDYihlLmMsYyksdHJ1ZSl9cmV0dXJuIGV9CmZ1bmN0aW9uIExLYihhLGIpe3ZhciBjLGQsZTtjPWEubztmb3IoZT1KRChKRChRYyhhLnIsYiksMjIpLDgzKS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDExNSk7ZC5lLmE9RktiKGQsYy5hKTtkLmUuYj1jLmIqQmViKE1EKGQuYi5tZihES2IpKSl9fQpmdW5jdGlvbiB0MmIoYSxiKXt2YXIgYyxkLGUsZjtlPWEuaztjPUJlYihNRChXTWIoYSwoSXFjKCksdHFjKSkpKTtmPWIuaztkPUJlYihNRChXTWIoYix0cWMpKSk7cmV0dXJuIGYhPShEWWIoKSx3WWIpPy0xOmUhPXdZYj8xOmM9PWQ/MDpjPGQ/LTE6MX0KZnVuY3Rpb24gXzRjKGEsYil7dmFyIGMsZDtjPUpEKEpEKE5pYihhLmcsYi5hKSw0NykuYSw2OCk7ZD1KRChKRChOaWIoYS5nLGIuYiksNDcpLmEsNjgpO3JldHVybiBwZGQoYi5hLGIuYiktcGRkKGIuYSxiZGQoYy5iKSktcGRkKGIuYixiZGQoZC5iKSl9CmZ1bmN0aW9uIFpTYihhKXtYU2IoKTt0aGlzLmM9bmV3IFVsYjt0aGlzLmQ9YTtzd2l0Y2goYS5nKXtjYXNlIDA6Y2FzZSAyOnRoaXMuYT13bmIoV1NiKTt0aGlzLmI9S3NlO2JyZWFrO2Nhc2UgMzpjYXNlIDE6dGhpcy5hPVdTYjt0aGlzLmI9THNlO319CmZ1bmN0aW9uIG8yYihhKXt2YXIgYjtpZighYmpkKEpEKFdNYihhLChCd2MoKSxFdmMpKSwxMDApKSl7cmV0dXJufWI9YS5iO3AyYigoc0RiKDAsYi5jLmxlbmd0aCksSkQoYi5jWzBdLDI1KSkpO3AyYihKRChNbGIoYixiLmMubGVuZ3RoLTEpLDI1KSl9CmZ1bmN0aW9uIENhYyhhLGIpe2IuU2coJ1NlbGYtTG9vcCBwb3N0LXByb2Nlc3NpbmcnLDEpO0VCYihCQmIoQkJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLmIsMTYpKSxuZXcgSWFjKSxuZXcgS2FjKSxuZXcgTWFjKSxuZXcgT2FjKTtiLlRnKCl9CmZ1bmN0aW9uIGZtZChhLGIsYyl7dmFyIGQsZTtpZihhLmMpe2h0ZChhLmMsYS5jLmkrYik7aXRkKGEuYyxhLmMuaitjKX1lbHNle2ZvcihlPW5ldyBybWIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTYyKTtmbWQoZCxiLGMpfX19CmZ1bmN0aW9uIGRDYyhhKXt2YXIgYixjLGQ7ZD1hLmMuYTthLnA9KFFiKGQpLG5ldyBXbGIoZCkpO2ZvcihjPW5ldyBybWIoZCk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDkpO2IucD1oQ2MoYikuYX1wbmIoKTtTbGIoYS5wLG5ldyBxQ2MpfQpmdW5jdGlvbiBETmQoYSxiKXt2YXIgYyxkO2lmKGEuai5sZW5ndGghPWIuai5sZW5ndGgpcmV0dXJuIGZhbHNlO2ZvcihjPTAsZD1hLmoubGVuZ3RoO2M8ZDtjKyspe2lmKCFjZ2IoYS5qW2NdLGIualtjXSkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfQpmdW5jdGlvbiBybmIoYSxiKXtwbmIoKTt2YXIgYyxkLGUsZjtjPWE7Zj1iO2lmKFJEKGEsMjIpJiYhUkQoYiwyMikpe2M9YjtmPWF9Zm9yKGU9Yy5KYygpO2UuT2IoKTspe2Q9ZS5QYigpO2lmKGYuR2MoZCkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIHROYyhhLGIsYyxkKXtpZihiLmE8ZC5hKXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKGIuYT09ZC5hKXtpZihiLmI8ZC5iKXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKGIuYj09ZC5iKXtpZihhLmI+Yy5iKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gc1ZiKGEsYil7dmFyIGM7Yz1KRChXTWIoYSwoQndjKCksUnVjKSksNzcpO2lmKFpxKGIscFZiKSl7aWYoIWMpe2M9bmV3IFJkZDtaTWIoYSxSdWMsYyl9ZWxzZXtMdGIoYyl9fWVsc2UgISFjJiZaTWIoYSxSdWMsbnVsbCk7cmV0dXJuIGN9CmZ1bmN0aW9uIHNZYihhKXt2YXIgYjtiPW5ldyBVZ2I7Yi5hKz0nbic7YS5rIT0oRFliKCksQVliKSYmUWdiKFFnYigoYi5hKz0nKCcsYiksbHMoYS5rKS50b0xvd2VyQ2FzZSgpKSwnKScpO1FnYigoYi5hKz0nXycsYiksZlliKGEpKTtyZXR1cm4gYi5hfQpmdW5jdGlvbiBNeGMoKXtNeGM9WmNiO0x4Yz1uZXcgT3hjKGZ6ZSwwKTtJeGM9bmV3IE94Yyhvd2UsMSk7SnhjPW5ldyBPeGMoJ0xJTkVBUl9TRUdNRU5UUycsMik7SHhjPW5ldyBPeGMoJ0JSQU5ERVNfS09FUEYnLDMpO0t4Yz1uZXcgT3hjKGV6ZSw0KX0KZnVuY3Rpb24gbXFkKGEsYixjLGQpe3ZhciBlO2lmKGM+PTApe3JldHVybiBhLk9oKGIsYyxkKX1lbHNleyEhYS5MaCgpJiYoZD0oZT1hLkJoKCksZT49MD9hLndoKGQpOmEuTGgoKS5QaChhLC0xLWUsbnVsbCxkKSkpO3JldHVybiBhLnloKGIsYyxkKX19CmZ1bmN0aW9uIEJ0ZChhLGIpe3N3aXRjaChiKXtjYXNlIDc6IWEuZSYmKGEuZT1uZXcgcmVlKHgzLGEsNyw0KSk7UkdkKGEuZSk7cmV0dXJuO2Nhc2UgODohYS5kJiYoYS5kPW5ldyByZWUoeDMsYSw4LDUpKTtSR2QoYS5kKTtyZXR1cm47fWN0ZChhLGIpfQpmdW5jdGlvbiBtc2QoYSxiLGMpe2M9PW51bGw/KCFhLm8mJihhLm89bmV3IFlRZCgoVnBkKCksU3BkKSxPMyxhLDApKSxJSmQoYS5vLGIpKTooIWEubyYmKGEubz1uZXcgWVFkKChWcGQoKSxTcGQpLE8zLGEsMCkpLEVKZChhLm8sYixjKSk7cmV0dXJuIGF9CmZ1bmN0aW9uIGZ1KGIsYyl7dmFyIGQ7ZD1iLmRkKGMpO3RyeXtyZXR1cm4gZC5QYigpfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTExKSl7dGhyb3cgc2NiKG5ldyBtZGIoIkNhbid0IGdldCBlbGVtZW50ICIrYykpfWVsc2UgdGhyb3cgc2NiKGEpfX0KZnVuY3Rpb24gUkpiKGEsYil7dmFyIGM7Yz1KRChLcWIoYS5iLGIpLDEyNikubjtzd2l0Y2goYi5nKXtjYXNlIDE6YS50Pj0wJiYoYy5kPWEudCk7YnJlYWs7Y2FzZSAzOmEudD49MCYmKGMuYT1hLnQpO31pZihhLkMpe2MuYj1hLkMuYjtjLmM9YS5DLmN9fQpmdW5jdGlvbiBINmIoYSl7dmFyIGI7Yj1hLmE7ZG97Yj1KRChkcyhuZXcgZXMoSXIoaFliKGIpLmEuSmMoKSxuZXcgZXIpKSksMTgpLmMuaTtiLms9PShEWWIoKSx5WWIpJiZhLmIuRWMoYil9d2hpbGUoYi5rPT0oRFliKCkseVliKSk7YS5iPWR2KGEuYil9CmZ1bmN0aW9uIFhBYyhhLGIpe3ZhciBjLGQsZTtlPWE7Zm9yKGQ9bmV3IGVzKElyKGhZYihiKS5hLkpjKCksbmV3IGVyKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDE4KTshIWMuYy5pLmMmJihlPSR3bmQuTWF0aC5tYXgoZSxjLmMuaS5jLnApKX1yZXR1cm4gZX0KZnVuY3Rpb24gVEtiKGEsYil7dmFyIGMsZCxlO2U9MDtkPUpEKEpEKFFjKGEucixiKSwyMiksODMpLkpjKCk7d2hpbGUoZC5PYigpKXtjPUpEKGQuUGIoKSwxMTUpO2UrPWMuZC5kK2MuYi5LZigpLmIrYy5kLmE7ZC5PYigpJiYoZSs9YS53KX1yZXR1cm4gZX0KZnVuY3Rpb24gTEpiKGEsYil7dmFyIGMsZCxlO2U9MDtkPUpEKEpEKFFjKGEucixiKSwyMiksODMpLkpjKCk7d2hpbGUoZC5PYigpKXtjPUpEKGQuUGIoKSwxMTUpO2UrPWMuZC5iK2MuYi5LZigpLmErYy5kLmM7ZC5PYigpJiYoZSs9YS53KX1yZXR1cm4gZX0KZnVuY3Rpb24gUlljKGEpe3ZhciBiLGMsZCxlO2Q9MDtlPVRZYyhhKTtpZihlLmMubGVuZ3RoPT0wKXtyZXR1cm4gMX1lbHNle2ZvcihjPW5ldyBybWIoZSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI3KTtkKz1SWWMoYil9fXJldHVybiBkfQpmdW5jdGlvbiB6VWIoYSl7dmFyIGIsYzt0aGlzLmI9bmV3IFVsYjt0aGlzLmM9YTt0aGlzLmE9ZmFsc2U7Zm9yKGM9bmV3IHJtYihhLmEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSw5KTt0aGlzLmE9dGhpcy5hfGIuaz09KERZYigpLEFZYil9fQpmdW5jdGlvbiByRmQoYSxiLGMpe3ZhciBkLGUsZixnO2Q9YS5iZChiKTtpZihkIT0tMSl7aWYoYS5NaigpKXtmPWEuTmooKTtnPUJFZChhLGQpO2U9YS5Gaig0LGcsbnVsbCxkLGYpOyFjPyhjPWUpOmMua2ooZSl9ZWxzZXtCRWQoYSxkKX19cmV0dXJuIGN9CmZ1bmN0aW9uIFFHZChhLGIsYyl7dmFyIGQsZSxmLGc7ZD1hLmJkKGIpO2lmKGQhPS0xKXtpZihhLk1qKCkpe2Y9YS5OaigpO2c9cURkKGEsZCk7ZT1hLkZqKDQsZyxudWxsLGQsZik7IWM/KGM9ZSk6Yy5raihlKX1lbHNle3FEZChhLGQpfX1yZXR1cm4gY30KZnVuY3Rpb24gbWZlKGEsYixjLGQpe3ZhciBlLGYsZztpZihjLlRoKGIpKXtJZmUoKTtpZihSUmQoYikpe2U9SkQoYy5JaChiKSwxNTkpO3BmZShhLGUpfWVsc2V7Zj0oZz1iLCFnP251bGw6SkQoZCw1MikuY2koZykpOyEhZiYmbmZlKGMuSWgoYiksZil9fX0KZnVuY3Rpb24gaHFkKGEsYixjLGQpe3ZhciBlLGYsZztmPVFUZChhLnpoKCksYik7ZT1iLWEuZmkoKTtyZXR1cm4gZTwwPyhnPWEuRWgoZiksZz49MD9hLkhoKGcsYyx0cnVlKTp1cWQoYSxmLGMpKTpKRChmLDY5KS50aygpLnZrKGEsYS5kaSgpLGUsYyxkKX0KZnVuY3Rpb24gbEtiKGEsYixjLGQpe3ZhciBlLGY7Zj1iLm5mKChMZ2QoKSx6ZmQpKT9KRChiLm1mKHpmZCksMjIpOmEuajtlPXdKYihmKTtpZihlPT0oc0piKCksckpiKSl7cmV0dXJufWlmKGMmJiF1SmIoZSkpe3JldHVybn1XSGIobktiKGEsZSxkKSxiKX0KZnVuY3Rpb24gSUQoYSxiKXtpZihWRChhKSl7cmV0dXJuICEhSERbYl19ZWxzZSBpZihhLlBtKXtyZXR1cm4gISFhLlBtW2JdfWVsc2UgaWYoVEQoYSkpe3JldHVybiAhIUdEW2JdfWVsc2UgaWYoU0QoYSkpe3JldHVybiAhIUZEW2JdfXJldHVybiBmYWxzZX0KZnVuY3Rpb24gaTBiKGEpe3N3aXRjaChhLmcpe2Nhc2UgMTpyZXR1cm4geExiKCksd0xiO2Nhc2UgMzpyZXR1cm4geExiKCksdExiO2Nhc2UgMjpyZXR1cm4geExiKCksdkxiO2Nhc2UgNDpyZXR1cm4geExiKCksdUxiO2RlZmF1bHQ6cmV0dXJuIG51bGw7fX0KZnVuY3Rpb24gSmZjKGEsYixjKXtpZihhLmUpe3N3aXRjaChhLmIpe2Nhc2UgMTpyZmMoYS5jLGIsYyk7YnJlYWs7Y2FzZSAwOnNmYyhhLmMsYixjKTt9fWVsc2V7cGZjKGEuYyxiLGMpfWEuYVtiLnBdW2MucF09YS5jLmk7YS5hW2MucF1bYi5wXT1hLmMuZX0KZnVuY3Rpb24gT0ZjKGEpe3ZhciBiLGM7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9Yz1TQyhSUCxocmUsMTk5LGEubGVuZ3RoLDAsMik7Zm9yKGI9MDtiPGMubGVuZ3RoO2IrKyl7Y1tiXT1KRCh4bWIoYVtiXSxhW2JdLmxlbmd0aCksMTk5KX1yZXR1cm4gY30KZnVuY3Rpb24gRlBjKGEpe3ZhciBiO2I9SkQoV01iKGEsKGtWYygpLFdVYykpLDEwNyk7Wk1iKGEsKHRVYygpLFZUYyksbmV3IEVkZCgwLDApKTtJUGMobmV3IF9RYyxhLGIuYi1CZWIoTUQoV01iKGEsYVVjKSkpLGIuZC1CZWIoTUQoV01iKGEsY1VjKSkpKX0KZnVuY3Rpb24gWWNlKGEpe3ZhciBiO2lmKFdjZShhKSl7VmNlKGEpO2lmKGEucmwoKSl7Yj1XYmUoYS5lLGEuYixhLmMsYS5hLGEuaik7YS5qPWJ9YS5nPWEuYTsrK2EuYTsrK2EuYzthLmk9MDtyZXR1cm4gYS5qfWVsc2V7dGhyb3cgc2NiKG5ldyBxdWIpfX0KZnVuY3Rpb24gSVZiKGEsYixjKXtjLlNnKCdDb21wb3VuZCBncmFwaCBwcmVwcm9jZXNzb3InLDEpO2EuYT1uZXcgUHA7TlZiKGEsYixudWxsKTtIVmIoYSxiKTtNVmIoYSk7Wk1iKGIsKElxYygpLExwYyksYS5hKTthLmE9bnVsbDtUaWIoYS5iKTtjLlRnKCl9CmZ1bmN0aW9uIG43YihhLGIsYyl7dmFyIGQsZSxmO2ZvcihlPW5ldyBlcyhJcigoYj9oWWIoYSk6a1liKGEpKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDE4KTtmPWI/ZC5jLmk6ZC5kLmk7Zi5rPT0oRFliKCkseFliKSYmcVliKGYsYyl9fQpmdW5jdGlvbiB6eGMoKXt6eGM9WmNiO3h4Yz1uZXcgQnhjKHl2ZSwwKTt5eGM9bmV3IEJ4YygnUE9SVF9QT1NJVElPTicsMSk7d3hjPW5ldyBCeGMoJ05PREVfU0laRV9XSEVSRV9TUEFDRV9QRVJNSVRTJywyKTt2eGM9bmV3IEJ4YygnTk9ERV9TSVpFJywzKX0KZnVuY3Rpb24gSVRjKGEsYil7dmFyIGMsZCxlO2IuU2coJ1VudHJlZWlmeScsMSk7Yz1KRChXTWIoYSwodFVjKCksblVjKSksMTUpO2ZvcihlPWMuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSw2NSk7QXRiKGQuYi5kLGQpO0F0YihkLmMuYixkKX1iLlRnKCl9CmZ1bmN0aW9uIGNlZCgpe2NlZD1aY2I7WWRkPW5ldyBkZWQoJ0FVVE9NQVRJQycsMCk7X2RkPW5ldyBkZWQoX3RlLDEpO2FlZD1uZXcgZGVkKGF1ZSwyKTtiZWQ9bmV3IGRlZCgnVE9QJywzKTtaZGQ9bmV3IGRlZChjdWUsNCk7JGRkPW5ldyBkZWQoWXRlLDUpfQpmdW5jdGlvbiBEQ2QoYSxiLGMpe3ZhciBkLGU7ZT1hLmdjKCk7aWYoYj49ZSl0aHJvdyBzY2IobmV3IHpIZChiLGUpKTtpZihhLlBpKCkpe2Q9YS5iZChjKTtpZihkPj0wJiZkIT1iKXt0aHJvdyBzY2IobmV3IFRlYihNRGUpKX19cmV0dXJuIGEuVWkoYixjKX0KZnVuY3Rpb24gQVVkKGEsYil7dmFyIGMsZCxlO2U9b0RkKGEsYik7aWYoZT49MClyZXR1cm4gZTtpZihhLmxsKCkpe2ZvcihkPTA7ZDxhLmk7KytkKXtjPWEubWwoSkQoYS5nW2RdLDU3KSk7aWYoWEQoYyk9PT1YRChiKSl7cmV0dXJuIGR9fX1yZXR1cm4gLTF9CmZ1bmN0aW9uIHN4KGEsYil7dGhpcy5hPUpEKFFiKGEpLDI1Mik7dGhpcy5iPUpEKFFiKGIpLDI1Mik7aWYoYS5DZChiKT4wfHxhPT0oVWsoKSxUayl8fGI9PShpbCgpLGhsKSl7dGhyb3cgc2NiKG5ldyBUZWIoJ0ludmFsaWQgcmFuZ2U6ICcrengoYSxiKSkpfX0KZnVuY3Rpb24gR2liKGEsYixjLGQpe0NpYigpO3ZhciBlLGY7ZT0wO2ZvcihmPTA7ZjxjO2YrKyl7ZT10Y2IoRmNiKHVjYihiW2ZdLFVzZSksdWNiKGQsVXNlKSksdWNiKFBjYihlKSxVc2UpKTthW2ZdPVBjYihlKTtlPUxjYihlLDMyKX1yZXR1cm4gUGNiKGUpfQpmdW5jdGlvbiBCSGIoYSxiLGMpe3ZhciBkLGU7ZT0wO2ZvcihkPTA7ZDx0SGI7ZCsrKXtlPSR3bmQuTWF0aC5tYXgoZSxySGIoYS5hW2IuZ11bZF0sYykpfWI9PShpSGIoKSxnSGIpJiYhIWEuYiYmKGU9JHduZC5NYXRoLm1heChlLGEuYi5iKSk7cmV0dXJuIGV9CmZ1bmN0aW9uIHh2YihhLGIpe3ZhciBjLGQ7a0RiKGI+MCk7aWYoKGImLWIpPT1iKXtyZXR1cm4gWUQoYip5dmIoYSwzMSkqNC42NTY2MTI4NzMwNzczOTI2RS0xMCl9ZG97Yz15dmIoYSwzMSk7ZD1jJWJ9d2hpbGUoYy1kKyhiLTEpPDApO3JldHVybiBZRChkKX0KZnVuY3Rpb24gSkZiKGEsYil7dmFyIGMsZCxlO2M9cEdiKG5ldyByR2IsYSk7Zm9yKGU9bmV3IHJtYihiKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTIzKTtERmIoR0ZiKEZGYihIRmIoRUZiKG5ldyBJRmIsMCksMCksYyksZCkpfXJldHVybiBjfQpmdW5jdGlvbiBpNGMoYSxiLGMpe3ZhciBkLGU7XzNjKGEsYi1hLnMsYy1hLnQpO2ZvcihlPW5ldyBybWIoYS5uKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjA4KTttNGMoZCxkLmUrYi1hLnMpO240YyhkLGQuZitjLWEudCl9YS5zPWI7YS50PWN9CmZ1bmN0aW9uIG5YYihhLGIsYyl7c3dpdGNoKGMuZyl7Y2FzZSAxOmEuYT1iLmEvMjthLmI9MDticmVhaztjYXNlIDI6YS5hPWIuYTthLmI9Yi5iLzI7YnJlYWs7Y2FzZSAzOmEuYT1iLmEvMjthLmI9Yi5iO2JyZWFrO2Nhc2UgNDphLmE9MDthLmI9Yi5iLzI7fX0KZnVuY3Rpb24gbGhjKGEsYixjLGQpe3ZhciBlLGY7Zm9yKGU9YjtlPGEuYy5sZW5ndGg7ZSsrKXtmPShzRGIoZSxhLmMubGVuZ3RoKSxKRChhLmNbZV0sMTEpKTtpZihjLk1iKGYpKXtZQ2IoZC5jLGYpfWVsc2V7cmV0dXJuIGV9fXJldHVybiBhLmMubGVuZ3RofQpmdW5jdGlvbiB3aGMoYSl7dmFyIGIsYyxkO2ZvcihkPUpEKFFjKGEuYSwoJGdjKCksWWdjKSksMTUpLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksMTA1KTtiPUVoYyhjKTtuaGMoYSxjLGJbMF0sKEloYygpLEZoYyksMCk7bmhjKGEsYyxiWzFdLEhoYywxKX19CmZ1bmN0aW9uIHhoYyhhKXt2YXIgYixjLGQ7Zm9yKGQ9SkQoUWMoYS5hLCgkZ2MoKSxaZ2MpKSwxNSkuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwxMDUpO2I9RWhjKGMpO25oYyhhLGMsYlswXSwoSWhjKCksRmhjKSwwKTtuaGMoYSxjLGJbMV0sSGhjLDEpfX0KZnVuY3Rpb24geF9jKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIG5ldyBjMGM7Y2FzZSAyOnJldHVybiBuZXcgVV9jO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoaEFlKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fQpmdW5jdGlvbiBnbGQoYSl7dmFyIGI7Yj1CZWIoTUQoa3NkKGEsKExnZCgpLENnZCkpKSkqJHduZC5NYXRoLnNxcnQoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKS5pKTtyZXR1cm4gbmV3IEVkZChiLGIvQmViKE1EKGtzZChhLEJnZCkpKSl9CmZ1bmN0aW9uIGZ1ZChhKXt2YXIgYjtpZighIWEuZiYmYS5mLlJoKCkpe2I9SkQoYS5mLDUyKTthLmY9SkQoenFkKGEsYiksODQpO2EuZiE9YiYmKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsOSw4LGIsYS5mKSl9cmV0dXJuIGEuZn0KZnVuY3Rpb24gZ3VkKGEpe3ZhciBiO2lmKCEhYS5pJiZhLmkuUmgoKSl7Yj1KRChhLmksNTIpO2EuaT1KRCh6cWQoYSxiKSw4NCk7YS5pIT1iJiYoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSw5LDcsYixhLmkpKX1yZXR1cm4gYS5pfQpmdW5jdGlvbiBzMWQoYSl7dmFyIGI7aWYoISFhLmImJihhLmIuRGImNjQpIT0wKXtiPWEuYjthLmI9SkQoenFkKGEsYiksMTkpO2EuYiE9YiYmKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsOSwyMSxiLGEuYikpfXJldHVybiBhLmJ9CmZ1bmN0aW9uIHJKZChhLGIpe3ZhciBjLGQsZTtpZihhLmQ9PW51bGwpeysrYS5lOysrYS5mfWVsc2V7ZD1iLnhpKCk7eUpkKGEsYS5mKzEpO2U9KGQmSHFlKSVhLmQubGVuZ3RoO2M9YS5kW2VdOyFjJiYoYz1hLmRbZV09YS5haygpKTtjLkVjKGIpOysrYS5mfX0KZnVuY3Rpb24gZmNlKGEsYixjKXt2YXIgZDtpZihiLnFrKCkpe3JldHVybiBmYWxzZX1lbHNlIGlmKGIuRmsoKSE9LTIpe2Q9Yi5maygpO3JldHVybiBkPT1udWxsP2M9PW51bGw6cGIoZCxjKX1lbHNlIHJldHVybiBiLm5rKCk9PWEuZS56aCgpJiZjPT1udWxsfQpmdW5jdGlvbiBFbygpe3ZhciBhO2JrKDE2LEJyZSk7YT1TcCgxNik7dGhpcy5iPVNDKFBGLEFyZSwzMDQsYSwwLDEpO3RoaXMuYz1TQyhQRixBcmUsMzA0LGEsMCwxKTt0aGlzLmE9bnVsbDt0aGlzLmU9bnVsbDt0aGlzLmk9MDt0aGlzLmY9YS0xO3RoaXMuZz0wfQpmdW5jdGlvbiB0WWIoYSl7RlhiLmNhbGwodGhpcyk7dGhpcy5rPShEWWIoKSxBWWIpO3RoaXMuaj0oYmsoNixEcmUpLG5ldyBWbGIoNikpO3RoaXMuYj0oYmsoMixEcmUpLG5ldyBWbGIoMikpO3RoaXMuZD1uZXcgYlliO3RoaXMuZj1uZXcgT1liO3RoaXMuYT1hfQpmdW5jdGlvbiBNRmIoYSl7dmFyIGIsYyxkLGUsZjtjPTA7Zm9yKGU9bmV3IHJtYihhLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxMjMpO2QuZD1jKyt9Yj1MRmIoYSk7Zj1udWxsO2IuYy5sZW5ndGg+MSYmKGY9SkZiKGEsYikpO3JldHVybiBmfQpmdW5jdGlvbiBnQ2MoYSl7dmFyIGIsYyxkO2I9MDtmb3IoZD1uZXcgcm1iKGEuYy5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksOSk7Yis9R3IobmV3IGVzKElyKGtZYihjKS5hLkpjKCksbmV3IGVyKSkpfXJldHVybiBiL2EuYy5hLmMubGVuZ3RofQpmdW5jdGlvbiBOVmMoYSxiKXt2YXIgYyxkLGU7YS5iW2IuZ109MTtmb3IoZD1HdGIoYi5kLDApO2QuYiE9ZC5kLmM7KXtjPUpEKFV0YihkKSw2NSk7ZT1jLmM7YS5iW2UuZ109PTE/QXRiKGEuYSxjKTphLmJbZS5nXT09Mj8oYS5iW2UuZ109MSk6TlZjKGEsZSl9fQpmdW5jdGlvbiBLOWIoYSl7dmFyIGIsYztpZihhLmMubGVuZ3RoPD0xKXtyZXR1cm59Yj1IOWIoYSwoUmpkKCksT2pkKSk7SjliKGEsSkQoYi5hLDE3KS5hLEpEKGIuYiwxNykuYSk7Yz1IOWIoYSxRamQpO0o5YihhLEpEKGMuYSwxNykuYSxKRChjLmIsMTcpLmEpfQpmdW5jdGlvbiB5QmMoYSxiLGMpe3ZhciBkLGU7ZT1hLmEuYjtmb3IoZD1lLmMubGVuZ3RoO2Q8YztkKyspe0hsYihlLGUuYy5sZW5ndGgsbmV3IGIkYihhLmEpKX1xWWIoYiwoc0RiKGMtMSxlLmMubGVuZ3RoKSxKRChlLmNbYy0xXSwyNSkpKTthLmJbYi5wXT1jfQpmdW5jdGlvbiB4WmMoYSxiLGMsZCl7dmFyIGUsZixnO2U9ZD9KRChRYyhhLmEsYiksMjIpOkpEKFFjKGEuYixiKSwyMik7Zm9yKGc9ZS5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDI3KTtpZihyWmMoYSxjLGYpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiB5VmQoYSl7dmFyIGIsYztmb3IoYz1uZXcgQ0hkKGEpO2MuZSE9Yy5pLmdjKCk7KXtiPUpEKEFIZChjKSw4Nyk7aWYoISFiLmV8fCghYi5kJiYoYi5kPW5ldyBxVmQoZzYsYiwxKSksYi5kKS5pIT0wKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBKMGQoYSl7dmFyIGIsYztmb3IoYz1uZXcgQ0hkKGEpO2MuZSE9Yy5pLmdjKCk7KXtiPUpEKEFIZChjKSw4Nyk7aWYoISFiLmV8fCghYi5kJiYoYi5kPW5ldyBxVmQoZzYsYiwxKSksYi5kKS5pIT0wKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBoN2MoKXtoN2M9WmNiO2c3Yz0oJDZjKCksWjZjKTtlN2M9bmV3IE1ZYig4KTtuZXcgTkJkKChMZ2QoKSxLZmQpLGU3Yyk7bmV3IE5CZCh3Z2QsOCk7ZjdjPVg2YztjN2M9TjZjO2Q3Yz1PNmM7YjdjPW5ldyBOQmQoWmVkLCh4ZGIoKSxmYWxzZSkpfQpmdW5jdGlvbiBuOGMoYSxiLGMpe3ZhciBkO2MuU2coJ1Nocmlua2luZyB0cmVlIGNvbXBhY3Rpb24nLDEpO2lmKHlkYihMRChXTWIoYiwoWUxiKCksV0xiKSkpKSl7bDhjKGEsYi5mKTtKTGIoYi5mLChkPWIuYyxkKSl9ZWxzZXtKTGIoYi5mLGIuYyl9Yy5UZygpfQpmdW5jdGlvbiB3dGQoYSxiLGMsZCl7c3dpdGNoKGIpe2Nhc2UgNzpyZXR1cm4gIWEuZSYmKGEuZT1uZXcgcmVlKHgzLGEsNyw0KSksYS5lO2Nhc2UgODpyZXR1cm4gIWEuZCYmKGEuZD1uZXcgcmVlKHgzLGEsOCw1KSksYS5kO31yZXR1cm4gX3NkKGEsYixjLGQpfQpmdW5jdGlvbiBDWmQoYSl7dmFyIGI7aWYoISFhLmEmJmEuYS5SaCgpKXtiPUpEKGEuYSw1Mik7YS5hPUpEKHpxZChhLGIpLDE0MSk7YS5hIT1iJiYoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSw5LDUsYixhLmEpKX1yZXR1cm4gYS5hfQpmdW5jdGlvbiBxbWUoYSl7aWYoYTw0OClyZXR1cm4gLTE7aWYoYT4xMDIpcmV0dXJuIC0xO2lmKGE8PTU3KXJldHVybiBhLTQ4O2lmKGE8NjUpcmV0dXJuIC0xO2lmKGE8PTcwKXJldHVybiBhLTY1KzEwO2lmKGE8OTcpcmV0dXJuIC0xO3JldHVybiBhLTk3KzEwfQpmdW5jdGlvbiBhayhhLGIpe2lmKGE9PW51bGwpe3Rocm93IHNjYihuZXcgRmZiKCdudWxsIGtleSBpbiBlbnRyeTogbnVsbD0nK2IpKX1lbHNlIGlmKGI9PW51bGwpe3Rocm93IHNjYihuZXcgRmZiKCdudWxsIHZhbHVlIGluIGVudHJ5OiAnK2ErJz1udWxsJykpfX0KZnVuY3Rpb24geXIoYSxiKXt2YXIgYyxkO3doaWxlKGEuT2IoKSl7aWYoIWIuT2IoKSl7cmV0dXJuIGZhbHNlfWM9YS5QYigpO2Q9Yi5QYigpO2lmKCEoWEQoYyk9PT1YRChkKXx8YyE9bnVsbCYmcGIoYyxkKSkpe3JldHVybiBmYWxzZX19cmV0dXJuICFiLk9iKCl9CmZ1bmN0aW9uIGxJYihhLGIpe3ZhciBjO2M9V0MoT0MoYUUsMSksUnNlLDMwLDE1LFtySGIoYS5hWzBdLGIpLHJIYihhLmFbMV0sYiksckhiKGEuYVsyXSxiKV0pO2lmKGEuZCl7Y1swXT0kd25kLk1hdGgubWF4KGNbMF0sY1syXSk7Y1syXT1jWzBdfXJldHVybiBjfQpmdW5jdGlvbiBtSWIoYSxiKXt2YXIgYztjPVdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbc0hiKGEuYVswXSxiKSxzSGIoYS5hWzFdLGIpLHNIYihhLmFbMl0sYildKTtpZihhLmQpe2NbMF09JHduZC5NYXRoLm1heChjWzBdLGNbMl0pO2NbMl09Y1swXX1yZXR1cm4gY30KZnVuY3Rpb24geUNjKGEsYixjKXtpZighYmpkKEpEKFdNYihiLChCd2MoKSxFdmMpKSwxMDApKSl7eENjKGEsYixvWWIoYixjKSk7eENjKGEsYixvWWIoYiwoUmpkKCksT2pkKSkpO3hDYyhhLGIsb1liKGIseGpkKSk7cG5iKCk7U2xiKGIuaixuZXcgTUNjKGEpKX19CmZ1bmN0aW9uIHZPYyhhKXt2YXIgYixjO2EuY3x8eU9jKGEpO2M9bmV3IFJkZDtiPW5ldyBybWIoYS5hKTtwbWIoYik7d2hpbGUoYi5hPGIuYy5jLmxlbmd0aCl7QXRiKGMsSkQocG1iKGIpLDQwNykuYSl9ckRiKGMuYiE9MCk7S3RiKGMsYy5jLmIpO3JldHVybiBjfQpmdW5jdGlvbiBjNGMoYSxiLGMpe3ZhciBkLGUsZixnLGg7aD1hLnIrYjthLnIrPWI7YS5kKz1jO2Q9Yy9hLm4uYy5sZW5ndGg7ZT0wO2ZvcihnPW5ldyBybWIoYS5uKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMjA4KTtsNGMoZixoLGQsZSk7KytlfX0KZnVuY3Rpb24gakZiKGEpe3ZhciBiLGMsZDthLmIuYS4kYigpO2EuYT1TQyhMTSxOcWUsNjAsYS5jLmMuYS5iLmMubGVuZ3RoLDAsMSk7Yj0wO2ZvcihkPW5ldyBybWIoYS5jLmMuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksNjApO2MuZj1iKyt9fQpmdW5jdGlvbiBiU2IoYSl7dmFyIGIsYyxkO2EuYi5hLiRiKCk7YS5hPVNDKEpPLE5xZSw4MixhLmMuYS5hLmIuYy5sZW5ndGgsMCwxKTtiPTA7Zm9yKGQ9bmV3IHJtYihhLmMuYS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw4Mik7Yy5pPWIrK319CmZ1bmN0aW9uIGkxYihhKXt2YXIgYixjLGQsZSxmO2ZvcihkPW5ldyBybWIoYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMjUpO2I9MDtmb3IoZj1uZXcgcm1iKGMuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO2UucD1iKyt9fX0KZnVuY3Rpb24gcjRjKGEsYixjKXt2YXIgZCxlLGYsZztnPTA7ZD1jL2EuYS5jLmxlbmd0aDtmb3IoZj1uZXcgcm1iKGEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDE3Mik7aTRjKGUsZS5zLGUudCtnKmQpO2M0YyhlLGEuZC1lLnIrYixkKTsrK2d9fQpmdW5jdGlvbiBBcihhKXt2YXIgYjtiPXVyKGEpO2lmKCFjcyhhKSl7dGhyb3cgc2NiKG5ldyBtZGIoJ3Bvc2l0aW9uICgwKSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgcmVtYWluZWQgKCcrYisnKScpKX1yZXR1cm4gZHMoYSl9CmZ1bmN0aW9uIFlBYihhLGIpe3ZhciBjO2lmKCFhLmEpe2M9U0MoYUUsUnNlLDMwLDAsMTUsMSk7WXZiKGEuYi5hLG5ldyBhQmIoYykpO2FEYihjLCRjYihfbWIucHJvdG90eXBlLktlLF9tYixbXSkpO2EuYT1uZXcgendiKGMsYS5kKX1yZXR1cm4gbndiKGEuYSxiKX0KZnVuY3Rpb24gVjFiKGEpe3N3aXRjaChhLmcpe2Nhc2UgMTpyZXR1cm4gUmpkKCksUWpkO2Nhc2UgNDpyZXR1cm4gUmpkKCkseGpkO2Nhc2UgMzpyZXR1cm4gUmpkKCksd2pkO2Nhc2UgMjpyZXR1cm4gUmpkKCksT2pkO2RlZmF1bHQ6cmV0dXJuIFJqZCgpLFBqZDt9fQpmdW5jdGlvbiBmZ2MoYSxiLGMpe2lmKGIuaz09KERZYigpLEFZYikmJmMuaz09eVliKXthLmQ9Y2djKGIsKFJqZCgpLE9qZCkpO2EuYj1jZ2MoYix4amQpfWlmKGMuaz09QVliJiZiLms9PXlZYil7YS5kPWNnYyhjLChSamQoKSx4amQpKTthLmI9Y2djKGMsT2pkKX19CmZ1bmN0aW9uIGpnYyhhLGIpe3ZhciBjLGQsZTtlPWxZYihhLGIpO2ZvcihkPWUuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwxMSk7aWYoV01iKGMsKElxYygpLHNxYykpIT1udWxsfHx3WmIobmV3IHhaYihjLmIpKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gVUhjKGEsYixjKXtjLlNnKCdMaW5lYXIgc2VnbWVudHMgbm9kZSBwbGFjZW1lbnQnLDEpO2EuYj1KRChXTWIoYiwoSXFjKCksQXFjKSksMzEzKTtWSGMoYSxiKTtRSGMoYSxiKTtOSGMoYSxiKTtUSGMoYSk7YS5hPW51bGw7YS5iPW51bGw7Yy5UZygpfQpmdW5jdGlvbiBrNGMoYSxiKXtodGQoYixhLmUrYS5kKyhhLmMuYy5sZW5ndGg9PTA/MDphLmIpKTtpdGQoYixhLmYpO2EuYT0kd25kLk1hdGgubWF4KGEuYSxiLmYpO2EuZCs9Yi5nKyhhLmMuYy5sZW5ndGg9PTA/MDphLmIpO0lsYihhLmMsYik7cmV0dXJuIHRydWV9CmZ1bmN0aW9uIFFjZChhLGIpe3ZhciBjLGQsZSxmLGcsaDtlPWIubGVuZ3RoLTE7Zz0wO2g9MDtmb3IoZD0wO2Q8PWU7ZCsrKXtmPWJbZF07Yz1LY2QoZSxkKSpWY2QoMS1hLGUtZCkqVmNkKGEsZCk7Zys9Zi5hKmM7aCs9Zi5iKmN9cmV0dXJuIG5ldyBFZGQoZyxoKX0KZnVuY3Rpb24gZ0RkKGEsYil7dmFyIGMsZCxlLGYsZztjPWIuZ2MoKTthLllpKGEuaStjKTtmPWIuSmMoKTtnPWEuaTthLmkrPWM7Zm9yKGQ9ZztkPGEuaTsrK2Qpe2U9Zi5QYigpO2pEZChhLGQsYS5XaShkLGUpKTthLkppKGQsZSk7YS5LaSgpfXJldHVybiBjIT0wfQpmdW5jdGlvbiBxRmQoYSxiLGMpe3ZhciBkLGUsZjtpZihhLk1qKCkpe2Q9YS5CaigpO2Y9YS5OaigpOysrYS5qO2EubmooZCxhLldpKGQsYikpO2U9YS5GaigzLG51bGwsYixkLGYpOyFjPyhjPWUpOmMua2ooZSl9ZWxzZXt4RWQoYSxhLkJqKCksYil9cmV0dXJuIGN9CmZ1bmN0aW9uIFBYZChhLGIsYyl7dmFyIGQsZSxmO2Q9SkQobkRkKE9UZChhLmEpLGIpLDg3KTtmPShlPWQuYyxSRChlLDg4KT9KRChlLDI5KTooY1BkKCksVU9kKSk7KChmLkRiJjY0KSE9MD96cWQoYS5iLGYpOmYpPT1jP0RaZChkKTpHWmQoZCxjKTtyZXR1cm4gZn0KZnVuY3Rpb24gS2llKGEpe3ZhciBiO3JldHVybiBhPT1udWxsP251bGw6bmV3IFhoYigoYj1JcGUoYSx0cnVlKSxiLmxlbmd0aD4wJiYoQURiKDAsYi5sZW5ndGgpLGIuY2hhckNvZGVBdCgwKT09NDMpPyhBRGIoMSxiLmxlbmd0aCsxKSxiLnN1YnN0cigxKSk6YikpfQpmdW5jdGlvbiBMaWUoYSl7dmFyIGI7cmV0dXJuIGE9PW51bGw/bnVsbDpuZXcgWGhiKChiPUlwZShhLHRydWUpLGIubGVuZ3RoPjAmJihBRGIoMCxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KDApPT00Myk/KEFEYigxLGIubGVuZ3RoKzEpLGIuc3Vic3RyKDEpKTpiKSl9CmZ1bmN0aW9uIEd4YihhLGIsYyxkLGUsZixnLGgpe3ZhciBpLGo7aWYoIWQpe3JldHVybn1pPWQuYVswXTshIWkmJkd4YihhLGIsYyxpLGUsZixnLGgpO0h4YihhLGMsZC5kLGUsZixnLGgpJiZiLkVjKGQpO2o9ZC5hWzFdOyEhaiYmR3hiKGEsYixjLGosZSxmLGcsaCl9CmZ1bmN0aW9uIERlKGEsYil7dmFyIGMsZCxlLGY7Zj1hLmdjKCk7Yi5sZW5ndGg8ZiYmKGI9YkRiKG5ldyBBcnJheShmKSxiKSk7ZT1iO2Q9YS5KYygpO2ZvcihjPTA7YzxmOysrYyl7VkMoZSxjLGQuUGIoKSl9Yi5sZW5ndGg+ZiYmVkMoYixmLG51bGwpO3JldHVybiBifQpmdW5jdGlvbiBZdShhLGIpe3ZhciBjLGQ7ZD1hLmdjKCk7aWYoYj09bnVsbCl7Zm9yKGM9MDtjPGQ7YysrKXtpZihhLlhiKGMpPT1udWxsKXtyZXR1cm4gY319fWVsc2V7Zm9yKGM9MDtjPGQ7YysrKXtpZihwYihiLGEuWGIoYykpKXtyZXR1cm4gY319fXJldHVybiAtMX0KZnVuY3Rpb24gSmQoYSxiKXt2YXIgYyxkLGU7Yz1iLmpkKCk7ZT1iLmtkKCk7ZD1hLnhjKGMpO2lmKCEoWEQoZSk9PT1YRChkKXx8ZSE9bnVsbCYmcGIoZSxkKSkpe3JldHVybiBmYWxzZX1pZihkPT1udWxsJiYhYS5fYihjKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfQpmdW5jdGlvbiBlRChhLGIpe3ZhciBjLGQsZTtpZihiPD0yMil7Yz1hLmwmKDE8PGIpLTE7ZD1lPTB9ZWxzZSBpZihiPD00NCl7Yz1hLmw7ZD1hLm0mKDE8PGItMjIpLTE7ZT0wfWVsc2V7Yz1hLmw7ZD1hLm07ZT1hLmgmKDE8PGItNDQpLTF9cmV0dXJuIF9DKGMsZCxlKX0KZnVuY3Rpb24gQUtiKGEsYil7c3dpdGNoKGIuZyl7Y2FzZSAxOnJldHVybiBhLmYubi5kK2EudDtjYXNlIDM6cmV0dXJuIGEuZi5uLmErYS50O2Nhc2UgMjpyZXR1cm4gYS5mLm4uYythLnM7Y2FzZSA0OnJldHVybiBhLmYubi5iK2EucztkZWZhdWx0OnJldHVybiAwO319CmZ1bmN0aW9uIGNMYihhLGIpe3ZhciBjLGQ7ZD1iLmM7Yz1iLmE7c3dpdGNoKGEuYi5nKXtjYXNlIDA6Yy5kPWEuZS1kLmEtZC5kO2JyZWFrO2Nhc2UgMTpjLmQrPWEuZTticmVhaztjYXNlIDI6Yy5jPWEuZS1kLmEtZC5kO2JyZWFrO2Nhc2UgMzpjLmM9YS5lK2QuZDt9fQpmdW5jdGlvbiBtX2MoKXttX2M9WmNiO2xfYz1uZXcgb19jKHl2ZSwwKTtqX2M9bmV3IG9fYyhyd2UsMSk7a19jPW5ldyBvX2MoJ0VER0VfTEVOR1RIX0JZX1BPU0lUSU9OJywyKTtpX2M9bmV3IG9fYygnQ1JPU1NJTkdfTUlOSU1JWkFUSU9OX0JZX1BPU0lUSU9OJywzKX0KZnVuY3Rpb24gbHpkKGEsYil7dmFyIGMsZDtjPUpEKHdvKGEubixiKSwyNyk7aWYoYyl7cmV0dXJuIGN9ZD1KRCh3byhhLnAsYiksMTI0KTtpZihkKXtyZXR1cm4gZH10aHJvdyBzY2IobmV3IGV5ZCgnUmVmZXJlbmNlZCBzaGFwZSBkb2VzIG5vdCBleGlzdDogJytiKSl9CmZ1bmN0aW9uIEtIZChiLGMpe2lmKGIuZz09LTEpe3Rocm93IHNjYihuZXcgVmViKX1iLlVqKCk7dHJ5e2IuZC5mZChiLmcsYyk7Yi5mPWIuZC5qfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsOTcpKXt0aHJvdyBzY2IobmV3IHlxYil9ZWxzZSB0aHJvdyBzY2IoYSl9fQpmdW5jdGlvbiBOayhiLGMpe3ZhciBkLGU7aWYoUkQoYywyNTIpKXtlPUpEKGMsMjUyKTt0cnl7ZD1iLkNkKGUpO3JldHVybiBkPT0wfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMjExKSl7cmV0dXJuIGZhbHNlfWVsc2UgdGhyb3cgc2NiKGEpfX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIERQYihhLGIpe2lmKGEuYz09Yil7cmV0dXJuIGEuZH1lbHNlIGlmKGEuZD09Yil7cmV0dXJuIGEuY31lbHNle3Rocm93IHNjYihuZXcgVGViKCJOb2RlICdvbmUnIG11c3QgYmUgZWl0aGVyIHNvdXJjZSBvciB0YXJnZXQgb2YgZWRnZSAnZWRnZScuIikpfX0KZnVuY3Rpb24gdUxjKGEsYil7aWYoYS5jLmk9PWIpe3JldHVybiBhLmQuaX1lbHNlIGlmKGEuZC5pPT1iKXtyZXR1cm4gYS5jLml9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYignTm9kZSAnK2IrJyBpcyBuZWl0aGVyIHNvdXJjZSBub3IgdGFyZ2V0IG9mIGVkZ2UgJythKSl9fQpmdW5jdGlvbiBtYWMoYSxiLGMpe2MuU2coJ1NlbGYtTG9vcCBvcmRlcmluZycsMSk7RUJiKEZCYihCQmIoQkJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmIsMTYpKSxuZXcgcWFjKSxuZXcgc2FjKSxuZXcgdWFjKSxuZXcgd2FjKSxuZXcgeWFjKGEpKTtjLlRnKCl9CmZ1bmN0aW9uIGNqYyhhLGIpe3ZhciBjO3N3aXRjaChiLmcpe2Nhc2UgMjpjYXNlIDQ6Yz1hLmE7YS5jLmQubi5iPGMuZC5uLmImJihjPWEuYyk7ZGpjKGEsYiwoRGdjKCksQ2djKSxjKTticmVhaztjYXNlIDE6Y2FzZSAzOmRqYyhhLGIsKERnYygpLHpnYyksbnVsbCk7fX0KZnVuY3Rpb24gdmpjKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrO2c9dGpjKGIsYyxmKTtoPWM9PShSamQoKSx4amQpfHxjPT1RamQ/LTE6MTtqPWFbYy5nXTtmb3Ioaz0wO2s8ai5sZW5ndGg7aysrKXtpPWpba107aT4wJiYoaSs9ZSk7altrXT1nO2crPWgqKGkrZCl9fQpmdW5jdGlvbiBmbWMoYSl7dmFyIGIsYyxkO2Q9YS5mO2Eubj1TQyhhRSxSc2UsMzAsZCwxNSwxKTthLmQ9U0MoYUUsUnNlLDMwLGQsMTUsMSk7Zm9yKGI9MDtiPGQ7YisrKXtjPUpEKE1sYihhLmMuYixiKSwyNSk7YS5uW2JdPWNtYyhhLGMpO2EuZFtiXT1ibWMoYSxjKX19CmZ1bmN0aW9uIGxZYyhhLGIsYyxkKXt2YXIgZTt0aGlzLmM9YTt0aGlzLmQ9YjtlPW5ldyBNdGI7RHRiKGUsYyxlLmMuYixlLmMpO3RoaXMuYT1lO3RoaXMuYj1KRChXTWIoZCwoa1ZjKCksS1VjKSksODYpO3RoaXMuZT1CZWIoTUQoV01iKGQsYlZjKSkpO2tZYyh0aGlzKX0KZnVuY3Rpb24gQnJkKGEsYil7dmFyIGMsZCxlO2U9MDtmb3IoZD0yO2Q8YjtkPDw9MSl7KGEuRGImZCkhPTAmJisrZX1pZihlPT0wKXtmb3IoYz1iPDw9MTtjPD0xMjg7Yzw8PTEpe2lmKChhLkRiJmMpIT0wKXtyZXR1cm4gMH19cmV0dXJuIC0xfWVsc2V7cmV0dXJuIGV9fQpmdW5jdGlvbiBsY2UoYSxiKXt2YXIgYyxkLGUsZixnO2c9S2ZlKGEuZS56aCgpLGIpO2Y9bnVsbDtjPUpEKGEuZywxMjIpO2ZvcihlPTA7ZTxhLmk7KytlKXtkPWNbZV07aWYoZy5abChkLklrKCkpKXshZiYmKGY9bmV3IHZEZCk7dENkKGYsZCl9fSEhZiYmVkdkKGEsZil9CmZ1bmN0aW9uIHppZShhKXt2YXIgYixjLGQ7aWYoIWEpcmV0dXJuIG51bGw7aWYoYS5kYygpKXJldHVybiAnJztkPW5ldyBIZ2I7Zm9yKGM9YS5KYygpO2MuT2IoKTspe2I9Yy5QYigpO0VnYihkLE9EKGIpKTtkLmErPScgJ31yZXR1cm4gaGRiKGQsZC5hLmxlbmd0aC0xKX0KZnVuY3Rpb24gVEMoYSxiKXt2YXIgYz1uZXcgQXJyYXkoYik7dmFyIGQ7c3dpdGNoKGEpe2Nhc2UgMTQ6Y2FzZSAxNTpkPTA7YnJlYWs7Y2FzZSAxNjpkPWZhbHNlO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIGM7fWZvcih2YXIgZT0wO2U8YjsrK2Upe2NbZV09ZH1yZXR1cm4gY30KZnVuY3Rpb24gRkViKGEpe3ZhciBiLGMsZDtmb3IoYz1uZXcgcm1iKGEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksNjApO2IuYy4kYigpfVVnZChhLmQpPyhkPWEuYS5jKTooZD1hLmEuZCk7TGxiKGQsbmV3IFZFYihhKSk7YS5jLmJmKGEpO0dFYihhKX0KZnVuY3Rpb24geU5iKGEpe3ZhciBiLGMsZCxlO2ZvcihjPW5ldyBybWIoYS5lLmMpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwyODgpO2ZvcihlPW5ldyBybWIoYi5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksNDQyKTtyTmIoZCl9Z05iKGIpfX0KZnVuY3Rpb24gdlhiKGEpe3ZhciBiLGMsZDtkPUhxZTtmb3IoYz1uZXcgcm1iKGEuYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDkpO1hNYihiLChJcWMoKSxqcWMpKSYmKGQ9JHduZC5NYXRoLm1pbihkLEpEKFdNYihiLGpxYyksMTcpLmEpKX1yZXR1cm4gZH0KZnVuY3Rpb24gdzRjKGEpe3ZhciBiLGMsZCxlLGY7ZD0wO2Y9MDtlPTA7Zm9yKGM9bmV3IHJtYihhLmEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwxNzIpO2Y9JHduZC5NYXRoLm1heChmLGIucik7ZCs9Yi5kKyhlPjA/YS5jOjApOysrZX1hLmI9ZDthLmQ9Zn0KZnVuY3Rpb24gQ0hiKGEsYil7dmFyIGM7Yz1XQyhPQyhhRSwxKSxSc2UsMzAsMTUsW0JIYihhLChpSGIoKSxmSGIpLGIpLEJIYihhLGdIYixiKSxCSGIoYSxoSGIsYildKTtpZihhLmYpe2NbMF09JHduZC5NYXRoLm1heChjWzBdLGNbMl0pO2NbMl09Y1swXX1yZXR1cm4gY30KZnVuY3Rpb24gRzFiKGEpe3ZhciBiO2lmKCFYTWIoYSwoQndjKCksZ3ZjKSkpe3JldHVybn1iPUpEKFdNYihhLGd2YyksMjIpO2lmKGIuR2MoKEVpZCgpLHdpZCkpKXtiLktjKHdpZCk7Yi5FYyh5aWQpfWVsc2UgaWYoYi5HYyh5aWQpKXtiLktjKHlpZCk7Yi5FYyh3aWQpfX0KZnVuY3Rpb24gSDFiKGEpe3ZhciBiO2lmKCFYTWIoYSwoQndjKCksZ3ZjKSkpe3JldHVybn1iPUpEKFdNYihhLGd2YyksMjIpO2lmKGIuR2MoKEVpZCgpLERpZCkpKXtiLktjKERpZCk7Yi5FYyhCaWQpfWVsc2UgaWYoYi5HYyhCaWQpKXtiLktjKEJpZCk7Yi5FYyhEaWQpfX0KZnVuY3Rpb24gTmpjKGEsYixjLGQpe3ZhciBlLGYsZyxoO2EuYT09bnVsbCYmUWpjKGEsYik7Zz1iLmIuai5jLmxlbmd0aDtmPWMuZC5wO2g9ZC5kLnA7ZT1oLTE7ZTwwJiYoZT1nLTEpO3JldHVybiBmPD1lP2EuYVtlXS1hLmFbZl06YS5hW2ctMV0tYS5hW2ZdK2EuYVtlXX0KZnVuY3Rpb24gZGxjKGEpe3ZhciBiO2ZvcihiPTA7YjxhLmEuYy5sZW5ndGg7YisrKXtpZihYTWIoSkQoTWxiKGEuYSxiKSw5KSwoQndjKCksYXZjKSkpe2lmKCF5ZGIoTEQoV01iKEpEKE1sYihhLmEsYiksOSksYXZjKSkpKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gSGxjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2Y9YS5jO2g9Yz9iOmE7ZD1jP2E6Yjtmb3IoZT1oLnArMTtlPGQucDsrK2Upe2c9SkQoTWxiKGYuYSxlKSw5KTtpZighKGcuaz09KERZYigpLHZZYil8fElsYyhnKSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIGdwZChhKXt2YXIgYixjO2lmKCFhLmIpe2EuYj1idihKRChhLmYsMjcpLmloKCkuaSk7Zm9yKGM9bmV3IENIZChKRChhLmYsMjcpLmloKCkpO2MuZSE9Yy5pLmdjKCk7KXtiPUpEKEFIZChjKSwxNTMpO0lsYihhLmIsbmV3IGZwZChiKSl9fXJldHVybiBhLmJ9CmZ1bmN0aW9uIGhwZChhKXt2YXIgYixjO2lmKCFhLmUpe2EuZT1idigkd2QoSkQoYS5mLDI3KSkuaSk7Zm9yKGM9bmV3IENIZCgkd2QoSkQoYS5mLDI3KSkpO2MuZSE9Yy5pLmdjKCk7KXtiPUpEKEFIZChjKSwxMjQpO0lsYihhLmUsbmV3IHZwZChiKSl9fXJldHVybiBhLmV9CmZ1bmN0aW9uIGNwZChhKXt2YXIgYixjO2lmKCFhLmEpe2EuYT1idihYd2QoSkQoYS5mLDI3KSkuaSk7Zm9yKGM9bmV3IENIZChYd2QoSkQoYS5mLDI3KSkpO2MuZSE9Yy5pLmdjKCk7KXtiPUpEKEFIZChjKSwyNyk7SWxiKGEuYSxuZXcganBkKGEsYikpfX1yZXR1cm4gYS5hfQpmdW5jdGlvbiBZU2QoYil7dmFyIGM7aWYoIWIuQyYmKGIuRCE9bnVsbHx8Yi5CIT1udWxsKSl7Yz1aU2QoYik7aWYoYyl7Yi5lbChjKX1lbHNle3RyeXtiLmVsKG51bGwpfWNhdGNoKGEpe2E9cmNiKGEpO2lmKCFSRChhLDYzKSl0aHJvdyBzY2IoYSl9fX1yZXR1cm4gYi5DfQpmdW5jdGlvbiBJSmIoYSl7c3dpdGNoKGEucS5nKXtjYXNlIDU6RkpiKGEsKFJqZCgpLHhqZCkpO0ZKYihhLE9qZCk7YnJlYWs7Y2FzZSA0OkdKYihhLChSamQoKSx4amQpKTtHSmIoYSxPamQpO2JyZWFrO2RlZmF1bHQ6SEpiKGEsKFJqZCgpLHhqZCkpO0hKYihhLE9qZCk7fX0KZnVuY3Rpb24gUktiKGEpe3N3aXRjaChhLnEuZyl7Y2FzZSA1Ok9LYihhLChSamQoKSx3amQpKTtPS2IoYSxRamQpO2JyZWFrO2Nhc2UgNDpQS2IoYSwoUmpkKCksd2pkKSk7UEtiKGEsUWpkKTticmVhaztkZWZhdWx0OlFLYihhLChSamQoKSx3amQpKTtRS2IoYSxRamQpO319CmZ1bmN0aW9uIFFUYihhLGIpe3ZhciBjLGQsZTtlPW5ldyBDZGQ7Zm9yKGQ9YS5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDM2KTtHVGIoYyxlLmEsMCk7ZS5hKz1jLmYuYStiO2UuYj0kd25kLk1hdGgubWF4KGUuYixjLmYuYil9ZS5iPjAmJihlLmIrPWIpO3JldHVybiBlfQpmdW5jdGlvbiBTVGIoYSxiKXt2YXIgYyxkLGU7ZT1uZXcgQ2RkO2ZvcihkPWEuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwzNik7R1RiKGMsMCxlLmIpO2UuYis9Yy5mLmIrYjtlLmE9JHduZC5NYXRoLm1heChlLmEsYy5mLmEpfWUuYT4wJiYoZS5hKz1iKTtyZXR1cm4gZX0KZnVuY3Rpb24gU0ZjKGEsYil7dmFyIGMsZDtpZihiLmxlbmd0aD09MCl7cmV0dXJuIDB9Yz1vR2MoYS5hLGJbMF0sKFJqZCgpLFFqZCkpO2MrPW9HYyhhLmEsYltiLmxlbmd0aC0xXSx3amQpO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspe2MrPVRGYyhhLGQsYil9cmV0dXJuIGN9CmZ1bmN0aW9uIFlPYygpe0tPYygpO3RoaXMuYz1uZXcgVWxiO3RoaXMuaT1uZXcgVWxiO3RoaXMuZT1uZXcgd3RiO3RoaXMuZj1uZXcgd3RiO3RoaXMuZz1uZXcgd3RiO3RoaXMuaj1uZXcgVWxiO3RoaXMuYT1uZXcgVWxiO3RoaXMuYj1uZXcgSXJiO3RoaXMuaz1uZXcgSXJifQpmdW5jdGlvbiBWU2QoYSxiKXt2YXIgYyxkO2lmKGEuRGI+PjE2PT02KXtyZXR1cm4gYS5DYi5QaChhLDUsbDYsYil9cmV0dXJuIGQ9czFkKEpEKFFUZCgoYz1KRChDcmQoYSwxNiksMjkpLCFjP2EuZWkoKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gY0EoYSl7WnooKTt2YXIgYj1hLmU7aWYoYiYmYi5zdGFjayl7dmFyIGM9Yi5zdGFjazt2YXIgZD1iKydcbic7Yy5zdWJzdHJpbmcoMCxkLmxlbmd0aCk9PWQmJihjPWMuc3Vic3RyaW5nKGQubGVuZ3RoKSk7cmV0dXJuIGMuc3BsaXQoJ1xuJyl9cmV0dXJuIFtdfQpmdW5jdGlvbiBnZmIoYSl7dmFyIGI7Yj0obmZiKCksbWZiKTtyZXR1cm4gYlthPj4+MjhdfGJbYT4+MjQmMTVdPDw0fGJbYT4+MjAmMTVdPDw4fGJbYT4+MTYmMTVdPDwxMnxiW2E+PjEyJjE1XTw8MTZ8YlthPj44JjE1XTw8MjB8YlthPj40JjE1XTw8MjR8YlthJjE1XTw8Mjh9CmZ1bmN0aW9uIGRsYihhKXt2YXIgYixjLGQ7aWYoYS5iIT1hLmMpe3JldHVybn1kPWEuYS5sZW5ndGg7Yz1kZmIoJHduZC5NYXRoLm1heCg4LGQpKTw8MTtpZihhLmIhPTApe2I9VkNiKGEuYSxjKTtjbGIoYSxiLGQpO2EuYT1iO2EuYj0wfWVsc2V7X0NiKGEuYSxjKX1hLmM9ZH0KZnVuY3Rpb24gRktiKGEsYil7dmFyIGM7Yz1hLmI7cmV0dXJuIGMubmYoKExnZCgpLFhmZCkpP2MuJGYoKT09KFJqZCgpLFFqZCk/LWMuS2YoKS5hLUJlYihNRChjLm1mKFhmZCkpKTpiK0JlYihNRChjLm1mKFhmZCkpKTpjLiRmKCk9PShSamQoKSxRamQpPy1jLktmKCkuYTpifQpmdW5jdGlvbiBmWWIoYSl7dmFyIGI7aWYoYS5iLmMubGVuZ3RoIT0wJiYhIUpEKE1sYihhLmIsMCksNzIpLmEpe3JldHVybiBKRChNbGIoYS5iLDApLDcyKS5hfWI9X1ZiKGEpO2lmKGIhPW51bGwpe3JldHVybiBifXJldHVybiAnJysoIWEuYz8tMTpObGIoYS5jLmEsYSwwKSl9CmZ1bmN0aW9uIFlZYihhKXt2YXIgYjtpZihhLmYuYy5sZW5ndGghPTAmJiEhSkQoTWxiKGEuZiwwKSw3MikuYSl7cmV0dXJuIEpEKE1sYihhLmYsMCksNzIpLmF9Yj1fVmIoYSk7aWYoYiE9bnVsbCl7cmV0dXJuIGJ9cmV0dXJuICcnKyghYS5pPy0xOk5sYihhLmkuaixhLDApKX0KZnVuY3Rpb24gSGRjKGEsYil7dmFyIGMsZDtpZihiPDB8fGI+PWEuZ2MoKSl7cmV0dXJuIG51bGx9Zm9yKGM9YjtjPGEuZ2MoKTsrK2Mpe2Q9SkQoYS5YYihjKSwxMzIpO2lmKGM9PWEuZ2MoKS0xfHwhZC5vKXtyZXR1cm4gbmV3IHhvZChqZmIoYyksZCl9fXJldHVybiBudWxsfQpmdW5jdGlvbiBVNGMoYSl7dmFyIGIsYyxkLGUsZjtmPTA7ZT1Mc2U7ZD0wO2ZvcihjPW5ldyBybWIoYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMTcyKTtmKz1iLnIrKGQ+MD9hLmM6MCk7ZT0kd25kLk1hdGgubWF4KGUsYi5kKTsrK2R9YS5lPWY7YS5iPWV9CmZ1bmN0aW9uIHVwZChhKXt2YXIgYixjO2lmKCFhLmIpe2EuYj1idihKRChhLmYsMTI0KS5paCgpLmkpO2ZvcihjPW5ldyBDSGQoSkQoYS5mLDEyNCkuaWgoKSk7Yy5lIT1jLmkuZ2MoKTspe2I9SkQoQUhkKGMpLDE1Myk7SWxiKGEuYixuZXcgZnBkKGIpKX19cmV0dXJuIGEuYn0KZnVuY3Rpb24gekNkKGEsYil7dmFyIGMsZCxlO2lmKGIuZGMoKSl7cmV0dXJuIEdMZCgpLEdMZCgpLEZMZH1lbHNle2M9bmV3IHdIZChhLGIuZ2MoKSk7Zm9yKGU9bmV3IENIZChhKTtlLmUhPWUuaS5nYygpOyl7ZD1BSGQoZSk7Yi5HYyhkKSYmdENkKGMsZCl9cmV0dXJuIGN9fQpmdW5jdGlvbiBlc2QoYSxiLGMsZCl7aWYoYj09MCl7cmV0dXJuIGQ/KCFhLm8mJihhLm89bmV3IFlRZCgoVnBkKCksU3BkKSxPMyxhLDApKSxhLm8pOighYS5vJiYoYS5vPW5ldyBZUWQoKFZwZCgpLFNwZCksTzMsYSwwKSksQ0pkKGEubykpfXJldHVybiBocWQoYSxiLGMsZCl9CmZ1bmN0aW9uIFZ2ZChhKXt2YXIgYixjO2lmKGEucmIpe2ZvcihiPTAsYz1hLnJiLmk7YjxjOysrYil7RXVkKG5EZChhLnJiLGIpKX19aWYoYS52Yil7Zm9yKGI9MCxjPWEudmIuaTtiPGM7KytiKXtFdWQobkRkKGEudmIsYikpfX1uYWUoKEdmZSgpLEVmZSksYSk7YS5CYnw9MX0KZnVuY3Rpb24gYndkKGEsYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbil7Y3dkKGEsYixkLG51bGwsZSxmLGcsaCxpLGosbSx0cnVlLG4pO3YxZChhLGspO1JEKGEuQ2IsODgpJiZRVmQoVFRkKEpEKGEuQ2IsODgpKSwyKTshIWMmJncxZChhLGMpO3gxZChhLGwpO3JldHVybiBhfQpmdW5jdGlvbiBjNmQoYil7dmFyIGMsZDtpZihiPT1udWxsKXtyZXR1cm4gbnVsbH1kPTA7dHJ5e2Q9RmRiKGIsTHJlLEhxZSkmV3JlfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTMwKSl7Yz1yZ2IoYik7ZD1jWzBdfWVsc2UgdGhyb3cgc2NiKGEpfXJldHVybiAkZGIoZCl9CmZ1bmN0aW9uIGQ2ZChiKXt2YXIgYyxkO2lmKGI9PW51bGwpe3JldHVybiBudWxsfWQ9MDt0cnl7ZD1GZGIoYixMcmUsSHFlKSZXcmV9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwxMzApKXtjPXJnYihiKTtkPWNbMF19ZWxzZSB0aHJvdyBzY2IoYSl9cmV0dXJuICRkYihkKX0KZnVuY3Rpb24gakQoYSxiKXt2YXIgYyxkLGU7ZT1hLmgtYi5oO2lmKGU8MCl7cmV0dXJuIGZhbHNlfWM9YS5sLWIubDtkPWEubS1iLm0rKGM+PjIyKTtlKz1kPj4yMjtpZihlPDApe3JldHVybiBmYWxzZX1hLmw9YyZ6c2U7YS5tPWQmenNlO2EuaD1lJkFzZTtyZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gSHhiKGEsYixjLGQsZSxmLGcpe3ZhciBoLGk7aWYoYi5SZSgpJiYoaT1hLmEuTGUoYyxkKSxpPDB8fCFlJiZpPT0wKSl7cmV0dXJuIGZhbHNlfWlmKGIuU2UoKSYmKGg9YS5hLkxlKGMsZiksaD4wfHwhZyYmaD09MCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gTjliKGEsYil7RzliKCk7dmFyIGM7Yz1hLmouZy1iLmouZztpZihjIT0wKXtyZXR1cm4gMH1zd2l0Y2goYS5qLmcpe2Nhc2UgMjpyZXR1cm4gUTliKGIsRjliKS1ROWIoYSxGOWIpO2Nhc2UgNDpyZXR1cm4gUTliKGEsRTliKS1ROWIoYixFOWIpO31yZXR1cm4gMH0KZnVuY3Rpb24gZW9jKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gWm5jO2Nhc2UgMTpyZXR1cm4gJG5jO2Nhc2UgMjpyZXR1cm4gX25jO2Nhc2UgMzpyZXR1cm4gYW9jO2Nhc2UgNDpyZXR1cm4gYm9jO2Nhc2UgNTpyZXR1cm4gY29jO2RlZmF1bHQ6cmV0dXJuIG51bGw7fX0KZnVuY3Rpb24gR3ZkKGEsYixjKXt2YXIgZCxlO2Q9KGU9bmV3IGsxZCxyUmQoZSxiKSxydmQoZSxjKSx0Q2QoKCFhLmMmJihhLmM9bmV3IFgwZChtNixhLDEyLDEwKSksYS5jKSxlKSxlKTt0UmQoZCwwKTt3UmQoZCwxKTt2UmQoZCx0cnVlKTt1UmQoZCx0cnVlKTtyZXR1cm4gZH0KZnVuY3Rpb24gcURkKGEsYil7dmFyIGMsZDtpZihiPj1hLmkpdGhyb3cgc2NiKG5ldyBYSWQoYixhLmkpKTsrK2EuajtjPWEuZ1tiXTtkPWEuaS1iLTE7ZD4wJiYkZ2IoYS5nLGIrMSxhLmcsYixkKTtWQyhhLmcsLS1hLmksbnVsbCk7YS5OaShiLGMpO2EuS2koKTtyZXR1cm4gY30KZnVuY3Rpb24gTlJkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09MTcpe3JldHVybiBhLkNiLlBoKGEsMjEsXzUsYil9cmV0dXJuIGQ9czFkKEpEKFFUZCgoYz1KRChDcmQoYSwxNiksMjkpLCFjP2EuZWkoKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gJERiKGEpe3ZhciBiLGMsZCxlO3BuYigpO1NsYihhLmMsYS5hKTtmb3IoZT1uZXcgcm1iKGEuYyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9cG1iKGUpO2ZvcihjPW5ldyBybWIoYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksNjc4KTtiLl9lKGQpfX19CmZ1bmN0aW9uIEJUYihhKXt2YXIgYixjLGQsZTtwbmIoKTtTbGIoYS5jLGEuYSk7Zm9yKGU9bmV3IHJtYihhLmMpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPXBtYihlKTtmb3IoYz1uZXcgcm1iKGEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDM3NCk7Yi5fZShkKX19fQpmdW5jdGlvbiBDR2IoYSl7dmFyIGIsYyxkLGUsZjtlPUhxZTtmPW51bGw7Zm9yKGQ9bmV3IHJtYihhLmQpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwyMTYpO2lmKGMuZC5qXmMuZS5qKXtiPWMuZS5lLWMuZC5lLWMuYTtpZihiPGUpe2U9YjtmPWN9fX1yZXR1cm4gZn0KZnVuY3Rpb24gJE9iKCl7JE9iPVpjYjtZT2I9bmV3IE1CZChpdmUsKHhkYigpLGZhbHNlKSk7VU9iPW5ldyBNQmQoanZlLDEwMCk7V09iPShLUGIoKSxJUGIpO1ZPYj1uZXcgTUJkKGt2ZSxXT2IpO1hPYj1uZXcgTUJkKGx2ZSxGdWUpO1pPYj1uZXcgTUJkKG12ZSxqZmIoSHFlKSl9CmZ1bmN0aW9uIFMzYihhLGIpe3ZhciBjLGQsZTtmb3IoZD1uZXcgZXMoSXIoZVliKGEpLmEuSmMoKSxuZXcgZXIpKTtjcyhkKTspe2M9SkQoZHMoZCksMTgpO2U9SkQoYi5LYihjKSw5KTtyZXR1cm4gbmV3IGNjKFFiKGUubi5iK2Uuby5iLzIpKX1yZXR1cm4gd2IoKSx3YigpLHZifQpmdW5jdGlvbiB1ZmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7aj0wO2ZvcihlPWEuYVtiXSxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07az1kR2MoZCxjKTtmb3IoaT1rLkpjKCk7aS5PYigpOyl7aD1KRChpLlBiKCksMTEpO1FpYihhLmYsaCxqZmIoaisrKSl9fX0KZnVuY3Rpb24gSXlkKGEsYixjKXt2YXIgZCxlLGYsZztpZihjKXtlPWMuYS5sZW5ndGg7ZD1uZXcgUnBlKGUpO2ZvcihnPShkLmItZC5hKSpkLmM8MD8oUXBlKCksUHBlKTpuZXcgbHFlKGQpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDE3KTtSYyhhLGIsWHhkKEJCKGMsZi5hKSkpfX19CmZ1bmN0aW9uIEp5ZChhLGIsYyl7dmFyIGQsZSxmLGc7aWYoYyl7ZT1jLmEubGVuZ3RoO2Q9bmV3IFJwZShlKTtmb3IoZz0oZC5iLWQuYSkqZC5jPDA/KFFwZSgpLFBwZSk6bmV3IGxxZShkKTtnLk9iKCk7KXtmPUpEKGcuUGIoKSwxNyk7UmMoYSxiLFh4ZChCQihjLGYuYSkpKX19fQpmdW5jdGlvbiBFaGMoYSl7amhjKCk7dmFyIGI7Yj1KRChEZShFYyhhLmspLFNDKHYyLEF2ZSw2NCwyLDAsMSkpLDEyNSk7Tm1iKGIsMCxiLmxlbmd0aCxudWxsKTtpZihiWzBdPT0oUmpkKCkseGpkKSYmYlsxXT09UWpkKXtWQyhiLDAsUWpkKTtWQyhiLDEseGpkKX1yZXR1cm4gYn0KZnVuY3Rpb24ga0djKGEsYixjKXt2YXIgZCxlLGY7ZT1pR2MoYSxiLGMpO2Y9bEdjKGEsZSk7X0ZjKGEuYik7RkdjKGEsYixjKTtwbmIoKTtTbGIoZSxuZXcgS0djKGEpKTtkPWxHYyhhLGUpO19GYyhhLmIpO0ZHYyhhLGMsYik7cmV0dXJuIG5ldyB4b2QoamZiKGYpLGpmYihkKSl9CmZ1bmN0aW9uIE1IYygpe01IYz1aY2I7SkhjPUU5YyhuZXcgSjljLChDUWIoKSxCUWIpLCh1NWIoKSxMNGIpKTtLSGM9bmV3IExCZCgnbGluZWFyU2VnbWVudHMuaW5wdXRQcmlvJyxqZmIoMCkpO0xIYz1uZXcgTEJkKCdsaW5lYXJTZWdtZW50cy5vdXRwdXRQcmlvJyxqZmIoMCkpfQpmdW5jdGlvbiBfUGMoKXtfUGM9WmNiO1hQYz1uZXcgYlFjKCdQMV9UUkVFSUZJQ0FUSU9OJywwKTtZUGM9bmV3IGJRYygnUDJfTk9ERV9PUkRFUklORycsMSk7WlBjPW5ldyBiUWMoJ1AzX05PREVfUExBQ0VNRU5UJywyKTskUGM9bmV3IGJRYygnUDRfRURHRV9ST1VUSU5HJywzKX0KZnVuY3Rpb24gTzRjKGEpe3ZhciBiLGMsZCxlO2M9MDtiPTA7Zm9yKGU9bmV3IENIZChhKTtlLmUhPWUuaS5nYygpOyl7ZD1KRChBSGQoZSksMjcpO2M9JHduZC5NYXRoLm1heChkLmcrZC5pLGMpO2I9JHduZC5NYXRoLm1heChkLmYrZC5qLGIpfXJldHVybiBuZXcgRWRkKGMsYil9CmZ1bmN0aW9uIEtsZChhLGIpe3ZhciBjLGQsZSxmO2Y9MDtmb3IoZD1uZXcgcm1iKGEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwyNyk7Zis9JHduZC5NYXRoLnBvdyhjLmcqYy5mLWIsMil9ZT0kd25kLk1hdGguc3FydChmLyhhLmMubGVuZ3RoLTEpKTtyZXR1cm4gZX0KZnVuY3Rpb24gb2lkKCl7b2lkPVpjYjtuaWQ9bmV3IHFpZCgnVU5LTk9XTicsMCk7a2lkPW5ldyBxaWQoJ0FCT1ZFJywxKTtsaWQ9bmV3IHFpZCgnQkVMT1cnLDIpO21pZD1uZXcgcWlkKCdJTkxJTkUnLDMpO25ldyBMQmQoJ29yZy5lY2xpcHNlLmVsay5sYWJlbFNpZGUnLG5pZCl9CmZ1bmN0aW9uIGt6ZChhLGIpe2lmKFJEKGIsMjY4KSl7cmV0dXJuIG55ZChhLEpEKGIsODUpKX1lbHNlIGlmKFJEKGIsMjczKSl7cmV0dXJuIEpEKGIsMjczKX1lbHNle3Rocm93IHNjYihuZXcgVGViKHhEZStFZShuZXcgZG5iKFdDKE9DKGFKLDEpLE5xZSwxLDUsW2JdKSkpKSl9fQpmdW5jdGlvbiBvRGQoYSxiKXt2YXIgYztpZihhLlZpKCkmJmIhPW51bGwpe2ZvcihjPTA7YzxhLmk7KytjKXtpZihwYihiLGEuZ1tjXSkpe3JldHVybiBjfX19ZWxzZXtmb3IoYz0wO2M8YS5pOysrYyl7aWYoWEQoYS5nW2NdKT09PVhEKGIpKXtyZXR1cm4gY319fXJldHVybiAtMX0KZnVuY3Rpb24gVlZiKGEsYixjKXt2YXIgZCxlO2lmKGIuYz09KEV5YygpLEN5YykmJmMuYz09QnljKXtyZXR1cm4gLTF9ZWxzZSBpZihiLmM9PUJ5YyYmYy5jPT1DeWMpe3JldHVybiAxfWQ9WlZiKGIuYSxhLmEpO2U9WlZiKGMuYSxhLmEpO3JldHVybiBiLmM9PUN5Yz9lLWQ6ZC1lfQpmdW5jdGlvbiBwWWIoYSxiLGMpe2lmKCEhYyYmKGI8MHx8Yj5jLmEuYy5sZW5ndGgpKXt0aHJvdyBzY2IobmV3IFRlYignaW5kZXggbXVzdCBiZSA+PSAwIGFuZCA8PSBsYXllciBub2RlIGNvdW50JykpfSEhYS5jJiZQbGIoYS5jLmEsYSk7YS5jPWM7ISFjJiZIbGIoYy5hLGIsYSl9CmZ1bmN0aW9uIFVLYyhhLGIpe3RoaXMuYz1uZXcgSXJiO3RoaXMuYT1hO3RoaXMuYj1iO3RoaXMuZD1KRChXTWIoYSwoSXFjKCksQXFjKSksMzEzKTtYRChXTWIoYSwoQndjKCksaHZjKSkpPT09WEQoKG1vYygpLGtvYykpPyh0aGlzLmU9bmV3IEVMYyk6KHRoaXMuZT1uZXcgeExjKX0KZnVuY3Rpb24gZ3UoYixjKXt2YXIgZCxlO2Q9Yi5kZChjKTt0cnl7ZT1kLlBiKCk7ZC5RYigpO3JldHVybiBlfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTExKSl7dGhyb3cgc2NiKG5ldyBtZGIoIkNhbid0IHJlbW92ZSBlbGVtZW50ICIrYykpfWVsc2UgdGhyb3cgc2NiKGEpfX0KZnVuY3Rpb24geUEoYSxiKXt2YXIgYyxkLGU7ZD1uZXcgbUI7ZT1uZXcgbkIoZC5xLmdldEZ1bGxZZWFyKCktaHNlLGQucS5nZXRNb250aCgpLGQucS5nZXREYXRlKCkpO2M9eEEoYSxiLGUpO2lmKGM9PTB8fGM8Yi5sZW5ndGgpe3Rocm93IHNjYihuZXcgVGViKGIpKX1yZXR1cm4gZX0KZnVuY3Rpb24gWXViKGEsYil7dmFyIGMsZCxlO3REYihiKTtrRGIoYiE9YSk7ZT1hLmIuYy5sZW5ndGg7Zm9yKGQ9Yi5KYygpO2QuT2IoKTspe2M9ZC5QYigpO0lsYihhLmIsdERiKGMpKX1pZihlIT1hLmIuYy5sZW5ndGgpe1p1YihhLDApO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX0KZnVuY3Rpb24gblBiKCl7blBiPVpjYjtmUGI9KExnZCgpLG5mZCk7bmV3IE5CZChhZmQsKHhkYigpLHRydWUpKTtpUGI9QmZkO2pQYj1FZmQ7a1BiPUdmZDtoUGI9emZkO2xQYj1KZmQ7bVBiPWFnZDtlUGI9KCRPYigpLFlPYik7Y1BiPVZPYjtkUGI9WE9iO2dQYj1aT2I7YlBiPVVPYn0KZnVuY3Rpb24gY1diKGEsYil7aWYoYj09YS5jKXtyZXR1cm4gYS5kfWVsc2UgaWYoYj09YS5kKXtyZXR1cm4gYS5jfWVsc2V7dGhyb3cgc2NiKG5ldyBUZWIoIidwb3J0JyBtdXN0IGJlIGVpdGhlciB0aGUgc291cmNlIHBvcnQgb3IgdGFyZ2V0IHBvcnQgb2YgdGhlIGVkZ2UuIikpfX0KZnVuY3Rpb24gZDBiKGEsYixjKXt2YXIgZCxlO2U9YS5vO2Q9YS5kO3N3aXRjaChiLmcpe2Nhc2UgMTpyZXR1cm4gLWQuZC1jO2Nhc2UgMzpyZXR1cm4gZS5iK2QuYStjO2Nhc2UgMjpyZXR1cm4gZS5hK2QuYytjO2Nhc2UgNDpyZXR1cm4gLWQuYi1jO2RlZmF1bHQ6cmV0dXJuIDA7fX0KZnVuY3Rpb24gaTNiKGEsYixjLGQpe3ZhciBlLGYsZyxoO3FZYihiLEpEKGQuWGIoMCksMjUpKTtoPWQuaGQoMSxkLmdjKCkpO2ZvcihmPUpEKGMuS2IoYiksMjApLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksMTgpO2c9ZS5jLmk9PWI/ZS5kLmk6ZS5jLmk7aTNiKGEsZyxjLGgpfX0KZnVuY3Rpb24gUWJjKGEpe3ZhciBiO2I9bmV3IElyYjtpZihYTWIoYSwoSXFjKCksRnFjKSkpe3JldHVybiBKRChXTWIoYSxGcWMpLDkxKX1FQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuaiwxNikpLG5ldyBTYmMpLG5ldyBVYmMoYikpO1pNYihhLEZxYyxiKTtyZXR1cm4gYn0KZnVuY3Rpb24gUDRjKGEsYil7dmFyIGMsZCxlLGYsZztkPTA7ZT0wO2M9MDtmb3IoZz1uZXcgcm1iKGEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwxODYpO2Q9JHduZC5NYXRoLm1heChkLGYuZSk7ZSs9Zi5iKyhjPjA/YjowKTsrK2N9cmV0dXJuIG5ldyBFZGQoZCxlKX0KZnVuY3Rpb24gUG5kKGEsYil7dmFyIGMsZDtkPW51bGw7aWYoYS5uZigoTGdkKCkscmdkKSkpe2M9SkQoYS5tZihyZ2QpLDEwMik7Yy5uZihiKSYmKGQ9Yy5tZihiKSl9ZD09bnVsbCYmISFhLlJmKCkmJihkPWEuUmYoKS5tZihiKSk7ZD09bnVsbCYmKGQ9SkJkKGIpKTtyZXR1cm4gZH0KZnVuY3Rpb24gZXVkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09Nil7cmV0dXJuIGEuQ2IuUGgoYSw2LHgzLGIpfXJldHVybiBkPXMxZChKRChRVGQoKGM9SkQoQ3JkKGEsMTYpLDI5KSwhYz8oVnBkKCksTnBkKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gR3dkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09Nyl7cmV0dXJuIGEuQ2IuUGgoYSwxLHkzLGIpfXJldHVybiBkPXMxZChKRChRVGQoKGM9SkQoQ3JkKGEsMTYpLDI5KSwhYz8oVnBkKCksUHBkKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gbnhkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09OSl7cmV0dXJuIGEuQ2IuUGgoYSw5LEEzLGIpfXJldHVybiBkPXMxZChKRChRVGQoKGM9SkQoQ3JkKGEsMTYpLDI5KSwhYz8oVnBkKCksUnBkKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gZlpkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09NSl7cmV0dXJuIGEuQ2IuUGgoYSw5LGU2LGIpfXJldHVybiBkPXMxZChKRChRVGQoKGM9SkQoQ3JkKGEsMTYpLDI5KSwhYz8oY1BkKCksT09kKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gVXZkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09Nyl7cmV0dXJuIGEuQ2IuUGgoYSw2LGw2LGIpfXJldHVybiBkPXMxZChKRChRVGQoKGM9SkQoQ3JkKGEsMTYpLDI5KSwhYz8oY1BkKCksWE9kKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gRFFkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09Myl7cmV0dXJuIGEuQ2IuUGgoYSwwLGg2LGIpfXJldHVybiBkPXMxZChKRChRVGQoKGM9SkQoQ3JkKGEsMTYpLDI5KSwhYz8oY1BkKCksSE9kKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gTnRkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09Myl7cmV0dXJuIGEuQ2IuUGgoYSwxMixBMyxiKX1yZXR1cm4gZD1zMWQoSkQoUVRkKChjPUpEKENyZChhLDE2KSwyOSksIWM/KFZwZCgpLE1wZCk6YyksYS5EYj4+MTYpLDE5KSksYS5DYi5QaChhLGQubixkLmYsYil9CmZ1bmN0aW9uIEhMZChhLGIsYyl7dmFyIGQsZSxmO2M8MCYmKGM9MCk7Zj1hLmk7Zm9yKGU9YztlPGY7ZSsrKXtkPW5EZChhLGUpO2lmKGI9PW51bGwpe2lmKGQ9PW51bGwpe3JldHVybiBlfX1lbHNlIGlmKFhEKGIpPT09WEQoZCl8fHBiKGIsZCkpe3JldHVybiBlfX1yZXR1cm4gLTF9CmZ1bmN0aW9uIFc5ZChhLGIpe3ZhciBjLGQ7Yz1iLm1pKGEuYSk7aWYoIWMpe3JldHVybiBudWxsfWVsc2V7ZD1PRCh4SmQoKCFjLmImJihjLmI9bmV3IGxSZCgoY1BkKCksJE9kKSx1NyxjKSksYy5iKSxhR2UpKTtyZXR1cm4gY2diKGJHZSxkKT9uYWUoYSxXU2QoYi5uaygpKSk6ZH19CmZ1bmN0aW9uIGhmZShhLGIpe3ZhciBjLGQ7aWYoYil7aWYoYj09YSl7cmV0dXJuIHRydWV9Yz0wO2ZvcihkPUpEKGIsNTIpLkxoKCk7ISFkJiZkIT1iO2Q9ZC5MaCgpKXtpZigrK2M+U3NlKXtyZXR1cm4gaGZlKGEsZCl9aWYoZD09YSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIEpLYihhKXtFS2IoKTtzd2l0Y2goYS5xLmcpe2Nhc2UgNTpHS2IoYSwoUmpkKCkseGpkKSk7R0tiKGEsT2pkKTticmVhaztjYXNlIDQ6SEtiKGEsKFJqZCgpLHhqZCkpO0hLYihhLE9qZCk7YnJlYWs7ZGVmYXVsdDpJS2IoYSwoUmpkKCkseGpkKSk7SUtiKGEsT2pkKTt9fQpmdW5jdGlvbiBOS2IoYSl7RUtiKCk7c3dpdGNoKGEucS5nKXtjYXNlIDU6S0tiKGEsKFJqZCgpLHdqZCkpO0tLYihhLFFqZCk7YnJlYWs7Y2FzZSA0OkxLYihhLChSamQoKSx3amQpKTtMS2IoYSxRamQpO2JyZWFrO2RlZmF1bHQ6TUtiKGEsKFJqZCgpLHdqZCkpO01LYihhLFFqZCk7fX0KZnVuY3Rpb24gUU1iKGEpe3ZhciBiLGM7Yj1KRChXTWIoYSwoSU9iKCksd09iKSksMTcpO2lmKGIpe2M9Yi5hO2M9PTA/Wk1iKGEsKFRPYigpLFNPYiksbmV3IEN2Yik6Wk1iKGEsKFRPYigpLFNPYiksbmV3IER2YihjKSl9ZWxzZXtaTWIoYSwoVE9iKCksU09iKSxuZXcgRHZiKDEpKX19CmZ1bmN0aW9uIGxYYihhLGIpe3ZhciBjO2M9YS5pO3N3aXRjaChiLmcpe2Nhc2UgMTpyZXR1cm4gLShhLm4uYithLm8uYik7Y2FzZSAyOnJldHVybiBhLm4uYS1jLm8uYTtjYXNlIDM6cmV0dXJuIGEubi5iLWMuby5iO2Nhc2UgNDpyZXR1cm4gLShhLm4uYSthLm8uYSk7fXJldHVybiAwfQpmdW5jdGlvbiBKN2IoYSxiKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIGI9PShPcWMoKSxLcWMpP0Y3YjpHN2I7Y2FzZSAxOnJldHVybiBiPT0oT3FjKCksS3FjKT9GN2I6RTdiO2Nhc2UgMjpyZXR1cm4gYj09KE9xYygpLEtxYyk/RTdiOkc3YjtkZWZhdWx0OnJldHVybiBFN2I7fX0KZnVuY3Rpb24gVjRjKGEsYil7dmFyIGMsZCxlO1BsYihhLmEsYik7YS5lLT1iLnIrKGEuYS5jLmxlbmd0aD09MD8wOmEuYyk7ZT1hQWU7Zm9yKGQ9bmV3IHJtYihhLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxNzIpO2U9JHduZC5NYXRoLm1heChlLGMuZCl9YS5iPWV9CmZ1bmN0aW9uIGd5ZChhLGIsYyl7dmFyIGQsZSxmO2Y9SkQoTmliKGEucixiKSwyOTcpO2U9bnVsbDtpZihmKXtzd2l0Y2goZi5nKXtjYXNlIDI6ZD1NRChOaWIoYS5pLGIpKTtlPSh0RGIoYyksYykrKHREYihkKSxkKTticmVhaztkZWZhdWx0OmU9Yzt9fWVsc2V7ZT1jfXJldHVybiBlfQpmdW5jdGlvbiBpeWQoYSxiLGMpe3ZhciBkLGUsZjtmPUpEKE5pYihhLnIsYiksMjk3KTtlPW51bGw7aWYoZil7c3dpdGNoKGYuZyl7Y2FzZSAyOmQ9TUQoTmliKGEuaixiKSk7ZT0odERiKGMpLGMpKyh0RGIoZCksZCk7YnJlYWs7ZGVmYXVsdDplPWM7fX1lbHNle2U9Y31yZXR1cm4gZX0KZnVuY3Rpb24gcFJkKGEpe3ZhciBiO2lmKChhLkJiJjEpPT0wJiYhIWEuciYmYS5yLlJoKCkpe2I9SkQoYS5yLDUyKTthLnI9SkQoenFkKGEsYiksMTQxKTthLnIhPWImJihhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDksOCxiLGEucikpfXJldHVybiBhLnJ9CmZ1bmN0aW9uIEFIYihhLGIsYyl7dmFyIGQ7ZD1XQyhPQyhhRSwxKSxSc2UsMzAsMTUsW0RIYihhLChpSGIoKSxmSGIpLGIsYyksREhiKGEsZ0hiLGIsYyksREhiKGEsaEhiLGIsYyldKTtpZihhLmYpe2RbMF09JHduZC5NYXRoLm1heChkWzBdLGRbMl0pO2RbMl09ZFswXX1yZXR1cm4gZH0KZnVuY3Rpb24gcTZiKGEsYil7dmFyIGMsZCxlO2U9eDZiKGEsYik7aWYoZS5jLmxlbmd0aD09MCl7cmV0dXJufVNsYihlLG5ldyBUNmIpO2M9ZS5jLmxlbmd0aDtmb3IoZD0wO2Q8YztkKyspe202YihhLChzRGIoZCxlLmMubGVuZ3RoKSxKRChlLmNbZF0sMjkxKSksdDZiKGEsZSxkKSl9fQpmdW5jdGlvbiBYYmMoYSxiLGMpe3ZhciBkLGU7ZD1iKmM7aWYoUkQoYS5nLDE1Mikpe2U9bmRjKGEpO2lmKGUuZi5kKXtlLmYuYXx8KGEuZC5hKz1kK2Z1ZSl9ZWxzZXthLmQuZC09ZCtmdWU7YS5kLmErPWQrZnVlfX1lbHNlIGlmKFJEKGEuZyw5KSl7YS5kLmQtPWQ7YS5kLmErPTIqZH19CmZ1bmN0aW9uIHRoYyhhKXt2YXIgYixjLGQsZTtmb3IoZT1KRChRYyhhLmEsKCRnYygpLFZnYykpLDE1KS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDEwNSk7Zm9yKGM9RWMoZC5rKS5KYygpO2MuT2IoKTspe2I9SkQoYy5QYigpLDY0KTtuaGMoYSxkLGIsKEloYygpLEdoYyksMSl9fX0KZnVuY3Rpb24gSWxjKGEpe3ZhciBiLGM7aWYoYS5rPT0oRFliKCkseVliKSl7Zm9yKGM9bmV3IGVzKElyKGVZYihhKS5hLkpjKCksbmV3IGVyKSk7Y3MoYyk7KXtiPUpEKGRzKGMpLDE4KTtpZighZVdiKGIpJiZhLmM9PWJXYihiLGEpLmMpe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBrTWMoYSl7dmFyIGIsYztpZihhLms9PShEWWIoKSx5WWIpKXtmb3IoYz1uZXcgZXMoSXIoZVliKGEpLmEuSmMoKSxuZXcgZXIpKTtjcyhjKTspe2I9SkQoZHMoYyksMTgpO2lmKCFlV2IoYikmJmIuYy5pLmM9PWIuZC5pLmMpe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBXd2QoYSxiKXt2YXIgYyxkO2lmKGEuRGI+PjE2PT0xMSl7cmV0dXJuIGEuQ2IuUGgoYSwxMCxBMyxiKX1yZXR1cm4gZD1zMWQoSkQoUVRkKChjPUpEKENyZChhLDE2KSwyOSksIWM/KFZwZCgpLFFwZCk6YyksYS5EYj4+MTYpLDE5KSksYS5DYi5QaChhLGQubixkLmYsYil9CmZ1bmN0aW9uIElfZChhLGIpe3ZhciBjLGQ7aWYoYS5EYj4+MTY9PTEwKXtyZXR1cm4gYS5DYi5QaChhLDExLF81LGIpfXJldHVybiBkPXMxZChKRChRVGQoKGM9SkQoQ3JkKGEsMTYpLDI5KSwhYz8oY1BkKCksVk9kKTpjKSxhLkRiPj4xNiksMTkpKSxhLkNiLlBoKGEsZC5uLGQuZixiKX0KZnVuY3Rpb24gajFkKGEsYil7dmFyIGMsZDtpZihhLkRiPj4xNj09MTApe3JldHVybiBhLkNiLlBoKGEsMTIsazYsYil9cmV0dXJuIGQ9czFkKEpEKFFUZCgoYz1KRChDcmQoYSwxNiksMjkpLCFjPyhjUGQoKSxZT2QpOmMpLGEuRGI+PjE2KSwxOSkpLGEuQ2IuUGgoYSxkLm4sZC5mLGIpfQpmdW5jdGlvbiBMeWQoYSxiKXt2YXIgYyxkLGUsZixnO2lmKGIpe2U9Yi5hLmxlbmd0aDtjPW5ldyBScGUoZSk7Zm9yKGc9KGMuYi1jLmEpKmMuYzwwPyhRcGUoKSxQcGUpOm5ldyBscWUoYyk7Zy5PYigpOyl7Zj1KRChnLlBiKCksMTcpO2Q9X3hkKGIsZi5hKTshIWQmJnN6ZChhLGQpfX19CmZ1bmN0aW9uIHc2ZCgpe202ZCgpO3ZhciBhLGI7cTZkKChHT2QoKSxGT2QpKTtwNmQoRk9kKTtWdmQoRk9kKTt5WmQ9KGNQZCgpLFJPZCk7Zm9yKGI9bmV3IHJtYihrNmQpO2IuYTxiLmMuYy5sZW5ndGg7KXthPUpEKHBtYihiKSwyNDYpO0paZChhLFJPZCxudWxsKX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gbUQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2k9YS5oPj4xOTtqPWIuaD4+MTk7aWYoaSE9ail7cmV0dXJuIGotaX1lPWEuaDtoPWIuaDtpZihlIT1oKXtyZXR1cm4gZS1ofWQ9YS5tO2c9Yi5tO2lmKGQhPWcpe3JldHVybiBkLWd9Yz1hLmw7Zj1iLmw7cmV0dXJuIGMtZn0KZnVuY3Rpb24geWpjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2U9YVtjLmddO2ZvcihoPW5ldyBybWIoYi5kKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTA1KTtmPWcuaTtpZighIWYmJmYuaT09Yyl7ZD1nLmRbYy5nXTtlW2RdPSR3bmQuTWF0aC5tYXgoZVtkXSxmLmouYil9fX0KZnVuY3Rpb24gejNjKGEsYil7dmFyIGMsZCxlLGYsZztkPTA7ZT0wO2M9MDtmb3IoZz1uZXcgcm1iKGIuZCk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDMxNik7dzRjKGYpO2Q9JHduZC5NYXRoLm1heChkLGYuYik7ZSs9Zi5kKyhjPjA/YS5iOjApOysrY31iLmI9ZDtiLmU9ZX0KZnVuY3Rpb24gQm8oYSl7dmFyIGIsYyxkO2Q9YS5iO2lmKFRwKGEuaSxkLmxlbmd0aCkpe2M9ZC5sZW5ndGgqMjthLmI9U0MoUEYsQXJlLDMwNCxjLDAsMSk7YS5jPVNDKFBGLEFyZSwzMDQsYywwLDEpO2EuZj1jLTE7YS5pPTA7Zm9yKGI9YS5hO2I7Yj1iLmMpe3hvKGEsYixiKX0rK2EuZ319CmZ1bmN0aW9uIHVVYihhLGIpe2EuYi5hPSR3bmQuTWF0aC5taW4oYS5iLmEsYi5jKTthLmIuYj0kd25kLk1hdGgubWluKGEuYi5iLGIuZCk7YS5hLmE9JHduZC5NYXRoLm1heChhLmEuYSxiLmMpO2EuYS5iPSR3bmQuTWF0aC5tYXgoYS5hLmIsYi5kKTtyZXR1cm4gWUNiKGEuYyxiKSx0cnVlfQpmdW5jdGlvbiBfbGMoYSxiLGMpe3ZhciBkO2Q9Yi5jLmk7aWYoZC5rPT0oRFliKCkseVliKSl7Wk1iKGEsKElxYygpLGZxYyksSkQoV01iKGQsZnFjKSwxMSkpO1pNYihhLGdxYyxKRChXTWIoZCxncWMpLDExKSl9ZWxzZXtaTWIoYSwoSXFjKCksZnFjKSxiLmMpO1pNYihhLGdxYyxjLmQpfX0KZnVuY3Rpb24gTGNkKGEsYixjKXtJY2QoKTt2YXIgZCxlLGYsZyxoLGk7Zz1iLzI7Zj1jLzI7ZD0kd25kLk1hdGguYWJzKGEuYSk7ZT0kd25kLk1hdGguYWJzKGEuYik7aD0xO2k9MTtkPmcmJihoPWcvZCk7ZT5mJiYoaT1mL2UpO3dkZChhLCR3bmQuTWF0aC5taW4oaCxpKSk7cmV0dXJuIGF9CmZ1bmN0aW9uIHF2ZCgpe1V1ZCgpO3ZhciBiLGM7dHJ5e2M9SkQoZjFkKChyT2QoKSxxT2QpLF9DZSksMjA1OSk7aWYoYyl7cmV0dXJuIGN9fWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTAzKSl7Yj1hO3JFZCgoYTlkKCksYikpfWVsc2UgdGhyb3cgc2NiKGEpfXJldHVybiBuZXcgbXZkfQpmdW5jdGlvbiBqNmQoKXtVdWQoKTt2YXIgYixjO3RyeXtjPUpEKGYxZCgock9kKCkscU9kKSxCRmUpLDE5ODYpO2lmKGMpe3JldHVybiBjfX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDEwMykpe2I9YTtyRWQoKGE5ZCgpLGIpKX1lbHNlIHRocm93IHNjYihhKX1yZXR1cm4gbmV3IGY2ZH0KZnVuY3Rpb24gUWllKCl7c2llKCk7dmFyIGIsYzt0cnl7Yz1KRChmMWQoKHJPZCgpLHFPZCksZUdlKSwyMDY4KTtpZihjKXtyZXR1cm4gY319Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwxMDMpKXtiPWE7ckVkKChhOWQoKSxiKSl9ZWxzZSB0aHJvdyBzY2IoYSl9cmV0dXJuIG5ldyBNaWV9CmZ1bmN0aW9uIEFaZChhLGIsYyl7dmFyIGQsZTtlPWEuZTthLmU9YjtpZigoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTApe2Q9bmV3IGdfZChhLDEsNCxlLGIpOyFjPyhjPWQpOmMua2ooZCl9ZSE9YiYmKGI/KGM9SlpkKGEsRlpkKGEsYiksYykpOihjPUpaZChhLGEuYSxjKSkpO3JldHVybiBjfQpmdW5jdGlvbiB2Qigpe21CLmNhbGwodGhpcyk7dGhpcy5lPS0xO3RoaXMuYT1mYWxzZTt0aGlzLnA9THJlO3RoaXMuaz0tMTt0aGlzLmM9LTE7dGhpcy5iPS0xO3RoaXMuZz1mYWxzZTt0aGlzLmY9LTE7dGhpcy5qPS0xO3RoaXMubj0tMTt0aGlzLmk9LTE7dGhpcy5kPS0xO3RoaXMubz1McmV9CmZ1bmN0aW9uIGdGYihhLGIpe3ZhciBjLGQsZTtkPWEuYi5kLmQ7YS5hfHwoZCs9YS5iLmQuYSk7ZT1iLmIuZC5kO2IuYXx8KGUrPWIuYi5kLmEpO2M9SGViKGQsZSk7aWYoYz09MCl7aWYoIWEuYSYmYi5hKXtyZXR1cm4gLTF9ZWxzZSBpZighYi5hJiZhLmEpe3JldHVybiAxfX1yZXR1cm4gY30KZnVuY3Rpb24gZk1iKGEsYil7dmFyIGMsZCxlO2Q9YS5iLmIuZDthLmF8fChkKz1hLmIuYi5hKTtlPWIuYi5iLmQ7Yi5hfHwoZSs9Yi5iLmIuYSk7Yz1IZWIoZCxlKTtpZihjPT0wKXtpZighYS5hJiZiLmEpe3JldHVybiAtMX1lbHNlIGlmKCFiLmEmJmEuYSl7cmV0dXJuIDF9fXJldHVybiBjfQpmdW5jdGlvbiBfUmIoYSxiKXt2YXIgYyxkLGU7ZD1hLmIuZy5kO2EuYXx8KGQrPWEuYi5nLmEpO2U9Yi5iLmcuZDtiLmF8fChlKz1iLmIuZy5hKTtjPUhlYihkLGUpO2lmKGM9PTApe2lmKCFhLmEmJmIuYSl7cmV0dXJuIC0xfWVsc2UgaWYoIWIuYSYmYS5hKXtyZXR1cm4gMX19cmV0dXJuIGN9CmZ1bmN0aW9uIGpRYigpe2pRYj1aY2I7Z1FiPUM5YyhFOWMoRTljKEU5YyhuZXcgSjljLChDUWIoKSxBUWIpLCh1NWIoKSxRNGIpKSxBUWIsVTRiKSxCUWIsXzRiKSxCUWIsRTRiKTtpUWI9RTljKEU5YyhuZXcgSjljLEFRYix1NGIpLEFRYixGNGIpO2hRYj1DOWMobmV3IEo5YyxCUWIsSDRiKX0KZnVuY3Rpb24gVl9iKGEpe3ZhciBiLGMsZCxlLGY7Yj1KRChXTWIoYSwoSXFjKCksT3BjKSksOTEpO2Y9YS5uO2ZvcihkPWIuQmMoKS5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDMxNSk7ZT1jLmk7ZS5jKz1mLmE7ZS5kKz1mLmI7Yy5jP1hIYihjKTpaSGIoYyl9Wk1iKGEsT3BjLG51bGwpfQpmdW5jdGlvbiB0amMoYSxiLGMpe3ZhciBkLGU7ZT1hLmI7ZD1lLmQ7c3dpdGNoKGIuZyl7Y2FzZSAxOnJldHVybiAtZC5kLWM7Y2FzZSAyOnJldHVybiBlLm8uYStkLmMrYztjYXNlIDM6cmV0dXJuIGUuby5iK2QuYStjO2Nhc2UgNDpyZXR1cm4gLWQuYi1jO2RlZmF1bHQ6cmV0dXJuIC0xO319CmZ1bmN0aW9uIFVDYyhhLGIpe3ZhciBjLGQ7Zm9yKGQ9bmV3IHJtYihiKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksOSk7YS5jW2MuYy5wXVtjLnBdLmE9d3ZiKGEuaSk7YS5jW2MuYy5wXVtjLnBdLmQ9QmViKGEuY1tjLmMucF1bYy5wXS5hKTthLmNbYy5jLnBdW2MucF0uYj0xfX0KZnVuY3Rpb24gTGxkKGEsYil7dmFyIGMsZCxlLGY7Zj0wO2ZvcihkPW5ldyBybWIoYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDE2Mik7Zis9JHduZC5NYXRoLnBvdyhjbWQoYykqYm1kKGMpLWIsMil9ZT0kd25kLk1hdGguc3FydChmLyhhLmMubGVuZ3RoLTEpKTtyZXR1cm4gZX0KZnVuY3Rpb24gRkhjKGEsYixjKXt2YXIgZCxlO2MuU2coJ0ludGVyYWN0aXZlIG5vZGUgcGxhY2VtZW50JywxKTthLmE9SkQoV01iKGIsKElxYygpLEFxYykpLDMxMyk7Zm9yKGU9bmV3IHJtYihiLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwyNSk7RUhjKGEsZCl9Yy5UZygpfQpmdW5jdGlvbiBGX2MoYSl7dmFyIGIsYyxkLGUsZjtkPTA7ZT1temU7aWYoYS5iKXtmb3IoYj0wO2I8MzYwO2IrKyl7Yz1iKjAuMDE3NDUzMjkyNTE5OTQzMjk1O0RfYyhhLGEuZCwwLDAsJHplLGMpO2Y9YS5iLkJnKGEuZCk7aWYoZjxlKXtkPWM7ZT1mfX19RF9jKGEsYS5kLDAsMCwkemUsZCl9CmZ1bmN0aW9uIGM1YyhhLGIpe3ZhciBjLGQsZSxmO2Y9bmV3IElyYjtiLmU9bnVsbDtiLmY9bnVsbDtmb3IoZD1uZXcgcm1iKGIuaSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDY4KTtlPUpEKE5pYihhLmcsYy5hKSw0Nyk7Yy5hPV9jZChjLmIpO1FpYihmLGMuYSxlKX1hLmc9Zn0KZnVuY3Rpb24gVDRjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZT1iLWEuZTtmPWUvYS5kLmMubGVuZ3RoO2c9MDtmb3IoaT1uZXcgcm1iKGEuZCk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDMxNik7ZD1hLmItaC5iK2M7djRjKGgsaC5lK2cqZixoLmYpO3I0YyhoLGYsZCk7KytnfX0KZnVuY3Rpb24gVUtkKGEpe3ZhciBiO2EuZi5ZaigpO2lmKGEuYiE9LTEpeysrYS5iO2I9YS5mLmRbYS5hXTtpZihhLmI8Yi5pKXtyZXR1cm59KythLmF9Zm9yKDthLmE8YS5mLmQubGVuZ3RoOysrYS5hKXtiPWEuZi5kW2EuYV07aWYoISFiJiZiLmkhPTApe2EuYj0wO3JldHVybn19YS5iPS0xfQpmdW5jdGlvbiBjOWQoYSxiKXt2YXIgYyxkLGU7ZT1iLmMubGVuZ3RoO2M9ZTlkKGEsZT09MD8nJzooc0RiKDAsYi5jLmxlbmd0aCksT0QoYi5jWzBdKSkpO2ZvcihkPTE7ZDxlJiYhIWM7KytkKXtjPUpEKGMsNTIpLlZoKChzRGIoZCxiLmMubGVuZ3RoKSxPRChiLmNbZF0pKSl9cmV0dXJuIGN9CmZ1bmN0aW9uIG1HYyhhLGIsYyxkKXt2YXIgZSxmLGc7Zj1oR2MoYSxiLGMsZCk7Zz1uR2MoYSxmKTtFR2MoYSxiLGMsZCk7X0ZjKGEuYik7cG5iKCk7U2xiKGYsbmV3IE9HYyhhKSk7ZT1uR2MoYSxmKTtFR2MoYSxjLGIsZCk7X0ZjKGEuYik7cmV0dXJuIG5ldyB4b2QoamZiKGcpLGpmYihlKSl9CmZ1bmN0aW9uIEo3YyhhLGIpe3ZhciBjO2IuU2coJ0RlbGF1bmF5IHRyaWFuZ3VsYXRpb24nLDEpO2M9bmV3IFVsYjtMbGIoYS5pLG5ldyBON2MoYykpO3lkYihMRChXTWIoYSwoWUxiKCksV0xiKSkpKSYmJ251bGwxMGJ3JzshYS5lPyhhLmU9RERiKGMpKTp4ZShhLmUsRERiKGMpKTtiLlRnKCl9CmZ1bmN0aW9uIHBuZChhLGIsYyl7dmFyIGQsZTtwdWQoYSxhLmorYixhLmsrYyk7Zm9yKGU9bmV3IENIZCgoIWEuYSYmKGEuYT1uZXcgcVZkKHUzLGEsNSkpLGEuYSkpO2UuZSE9ZS5pLmdjKCk7KXtkPUpEKEFIZChlKSwzNjkpO3lzZChkLGQuYStiLGQuYitjKX1pdWQoYSxhLmIrYixhLmMrYyl9CmZ1bmN0aW9uIHh0ZChhLGIsYyxkKXtzd2l0Y2goYyl7Y2FzZSA3OnJldHVybiAhYS5lJiYoYS5lPW5ldyByZWUoeDMsYSw3LDQpKSxQR2QoYS5lLGIsZCk7Y2FzZSA4OnJldHVybiAhYS5kJiYoYS5kPW5ldyByZWUoeDMsYSw4LDUpKSxQR2QoYS5kLGIsZCk7fXJldHVybiBKc2QoYSxiLGMsZCl9CmZ1bmN0aW9uIHl0ZChhLGIsYyxkKXtzd2l0Y2goYyl7Y2FzZSA3OnJldHVybiAhYS5lJiYoYS5lPW5ldyByZWUoeDMsYSw3LDQpKSxRR2QoYS5lLGIsZCk7Y2FzZSA4OnJldHVybiAhYS5kJiYoYS5kPW5ldyByZWUoeDMsYSw4LDUpKSxRR2QoYS5kLGIsZCk7fXJldHVybiBLc2QoYSxiLGMsZCl9CmZ1bmN0aW9uIHp5ZChhLGIsYyl7dmFyIGQsZSxmLGcsaDtpZihjKXtmPWMuYS5sZW5ndGg7ZD1uZXcgUnBlKGYpO2ZvcihoPShkLmItZC5hKSpkLmM8MD8oUXBlKCksUHBlKTpuZXcgbHFlKGQpO2guT2IoKTspe2c9SkQoaC5QYigpLDE3KTtlPV94ZChjLGcuYSk7ISFlJiZ2emQoYSxlLGIpfX19CmZ1bmN0aW9uIEVKZChhLGIsYyl7dmFyIGQsZSxmLGcsaDthLllqKCk7Zj1iPT1udWxsPzA6dGIoYik7aWYoYS5mPjApe2c9KGYmSHFlKSVhLmQubGVuZ3RoO2U9dEpkKGEsZyxmLGIpO2lmKGUpe2g9ZS5sZChjKTtyZXR1cm4gaH19ZD1hLl9qKGYsYixjKTthLmMuRWMoZCk7cmV0dXJuIG51bGx9CmZ1bmN0aW9uIG1hZShhLGIpe3ZhciBjLGQsZSxmO3N3aXRjaChoYWUoYSxiKS5IbCgpKXtjYXNlIDM6Y2FzZSAyOntjPUhUZChiKTtmb3IoZT0wLGY9Yy5pO2U8ZjsrK2Upe2Q9SkQobkRkKGMsZSksMzUpO2lmKFRhZShqYWUoYSxkKSk9PTUpe3JldHVybiBkfX1icmVha319cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGN0KGEpe3ZhciBiLGMsZCxlLGY7aWYoVHAoYS5mLGEuYi5sZW5ndGgpKXtkPVNDKE1HLEFyZSwyMjYsYS5iLmxlbmd0aCoyLDAsMSk7YS5iPWQ7ZT1kLmxlbmd0aC0xO2ZvcihjPWEuYTtjIT1hO2M9Yy5aZCgpKXtmPUpEKGMsMjI2KTtiPWYuZCZlO2YuYT1kW2JdO2RbYl09Zn19fQpmdW5jdGlvbiBGSmIoYSxiKXt2YXIgYyxkLGUsZjtmPTA7Zm9yKGU9SkQoSkQoUWMoYS5yLGIpLDIyKSw4MykuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwxMTUpO2Y9JHduZC5NYXRoLm1heChmLGQuZS5hK2QuYi5LZigpLmEpfWM9SkQoS3FiKGEuYixiKSwxMjYpO2Mubi5iPTA7Yy5hLmE9Zn0KZnVuY3Rpb24gT0tiKGEsYil7dmFyIGMsZCxlLGY7Yz0wO2ZvcihmPUpEKEpEKFFjKGEucixiKSwyMiksODMpLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksMTE1KTtjPSR3bmQuTWF0aC5tYXgoYyxlLmUuYitlLmIuS2YoKS5iKX1kPUpEKEtxYihhLmIsYiksMTI2KTtkLm4uZD0wO2QuYS5iPWN9CmZ1bmN0aW9uIGlDYyhhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IHJtYihhLnApO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSw5KTtpZihiLmshPShEWWIoKSxBWWIpKXtjb250aW51ZX1kPWIuby5iO2EuaT0kd25kLk1hdGgubWluKGEuaSxkKTthLmc9JHduZC5NYXRoLm1heChhLmcsZCl9fQpmdW5jdGlvbiBSQ2MoYSxiLGMpe3ZhciBkLGUsZjtmb3IoZj1uZXcgcm1iKGIpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihmKSw5KTthLmNbZC5jLnBdW2QucF0uZT1mYWxzZX1mb3IoZT1uZXcgcm1iKGIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSw5KTtRQ2MoYSxkLGMpfX0KZnVuY3Rpb24gak1jKGEpe3ZhciBiLGM7Yz1KRChXTWIoYSwoSXFjKCksV3BjKSksMjIpO2I9SzljKGFNYyk7Yy5HYygoJG9jKCksWG9jKSkmJkQ5YyhiLGRNYyk7Yy5HYyhab2MpJiZEOWMoYixmTWMpO2MuR2MoUW9jKSYmRDljKGIsYk1jKTtjLkdjKFNvYykmJkQ5YyhiLGNNYyk7cmV0dXJuIGJ9CmZ1bmN0aW9uIFBjZChhKXtpZihhPDApe3Rocm93IHNjYihuZXcgVGViKCdUaGUgaW5wdXQgbXVzdCBiZSBwb3NpdGl2ZScpKX1lbHNlIHJldHVybiBhPEhjZC5sZW5ndGg/T2NiKEhjZFthXSk6JHduZC5NYXRoLnNxcnQoJHplKmEpKihXY2QoYSxhKS9WY2QoMi43MTgyODE4Mjg0NTkwNDUsYSkpfQpmdW5jdGlvbiBtRGQoYSxiKXt2YXIgYztpZihhLlZpKCkmJmIhPW51bGwpe2ZvcihjPTA7YzxhLmk7KytjKXtpZihwYihiLGEuZ1tjXSkpe3JldHVybiB0cnVlfX19ZWxzZXtmb3IoYz0wO2M8YS5pOysrYyl7aWYoWEQoYS5nW2NdKT09PVhEKGIpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBmYWxzZX0KZnVuY3Rpb24geHIoYSxiKXtpZihiPT1udWxsKXt3aGlsZShhLmEuT2IoKSl7aWYoSkQoYS5hLlBiKCksNDMpLmtkKCk9PW51bGwpe3JldHVybiB0cnVlfX19ZWxzZXt3aGlsZShhLmEuT2IoKSl7aWYocGIoYixKRChhLmEuUGIoKSw0Mykua2QoKSkpe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBJeShhLGIpe3ZhciBjLGQsZTtpZihiPT09YSl7cmV0dXJuIHRydWV9ZWxzZSBpZihSRChiLDY2Mykpe2U9SkQoYiwxOTkyKTtyZXR1cm4gU2UoKGQ9YS5nLCFkPyhhLmc9bmV3IEJpKGEpKTpkKSwoYz1lLmcsIWM/KGUuZz1uZXcgQmkoZSkpOmMpKX1lbHNle3JldHVybiBmYWxzZX19CmZ1bmN0aW9uIF96KGEpe3ZhciBiLGMsZCxlO2I9JyR6JztjPSdueic7ZT0kd25kLk1hdGgubWluKGEubGVuZ3RoLDUpO2ZvcihkPWUtMTtkPj0wO2QtLSl7aWYoY2diKGFbZF0uZCxiKXx8Y2diKGFbZF0uZCxjKSl7YS5sZW5ndGg+PWQrMSYmYS5zcGxpY2UoMCxkKzEpO2JyZWFrfX1yZXR1cm4gYX0KZnVuY3Rpb24geGNiKGEsYil7dmFyIGM7aWYoQ2NiKGEpJiZDY2IoYikpe2M9YS9iO2lmKEZzZTxjJiZjPERzZSl7cmV0dXJuIGM8MD8kd25kLk1hdGguY2VpbChjKTokd25kLk1hdGguZmxvb3IoYyl9fXJldHVybiB3Y2IoYUQoQ2NiKGEpP05jYihhKTphLENjYihiKT9OY2IoYik6YixmYWxzZSkpfQpmdW5jdGlvbiBiV2IoYSxiKXtpZihiPT1hLmMuaSl7cmV0dXJuIGEuZC5pfWVsc2UgaWYoYj09YS5kLmkpe3JldHVybiBhLmMuaX1lbHNle3Rocm93IHNjYihuZXcgVGViKCInbm9kZScgbXVzdCBlaXRoZXIgYmUgdGhlIHNvdXJjZSBub2RlIG9yIHRhcmdldCBub2RlIG9mIHRoZSBlZGdlLiIpKX19CmZ1bmN0aW9uIFkkYihhKXt2YXIgYixjLGQsZTtlPUpEKFdNYihhLChJcWMoKSxKcGMpKSwzNik7aWYoZSl7ZD1uZXcgQ2RkO2I9Z1liKGEuYy5pKTt3aGlsZShiIT1lKXtjPWIuZTtiPWdZYihjKTtsZGQobWRkKG1kZChkLGMubiksYi5jKSxiLmQuYixiLmQuZCl9cmV0dXJuIGR9cmV0dXJuIFMkYn0KZnVuY3Rpb24gRGFjKGEpe3ZhciBiO2I9SkQoV01iKGEsKElxYygpLHpxYykpLDMzMyk7RUJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmQsMTYpKSxuZXcgUWFjKSxuZXcgU2FjKGEpKTtFQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIuZCwxNikpLG5ldyBVYWMpLG5ldyBXYWMoYSkpfQpmdW5jdGlvbiBKbGMoYSxiKXt2YXIgYyxkLGUsZjtlPWI/a1liKGEpOmhZYihhKTtmb3IoZD1uZXcgZXMoSXIoZS5hLkpjKCksbmV3IGVyKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDE4KTtmPWJXYihjLGEpO2lmKGYuaz09KERZYigpLHlZYikmJmYuYyE9YS5jKXtyZXR1cm4gZn19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIHhOYyhhLGIsYyl7dmFyIGQsZTtkPVlOYyhiLmosYy5zLGMuYykrWU5jKGMuZSxiLnMsYi5jKTtlPVlOYyhjLmosYi5zLGIuYykrWU5jKGIuZSxjLnMsYy5jKTtpZihkPT1lKXtpZihkPjApe2EuYis9MjthLmErPWR9fWVsc2V7YS5iKz0xO2EuYSs9JHduZC5NYXRoLm1pbihkLGUpfX0KZnVuY3Rpb24gVHhkKGEsYil7dmFyIGMsZDtkPWZhbHNlO2lmKFZEKGIpKXtkPXRydWU7U3hkKGEsbmV3IEdDKE9EKGIpKSl9aWYoIWQpe2lmKFJEKGIsMjQxKSl7ZD10cnVlO1N4ZChhLChjPUhkYihKRChiLDI0MSkpLG5ldyBfQihjKSkpfX1pZighZCl7dGhyb3cgc2NiKG5ldyByZGIodURlKSl9fQpmdW5jdGlvbiBCVmQoYSxiLGMsZCl7dmFyIGUsZixnO2U9bmV3IGlfZChhLmUsMSwxMCwoZz1iLmMsUkQoZyw4OCk/SkQoZywyOSk6KGNQZCgpLFVPZCkpLChmPWMuYyxSRChmLDg4KT9KRChmLDI5KTooY1BkKCksVU9kKSksQVVkKGEsYiksZmFsc2UpOyFkPyhkPWUpOmQua2ooZSk7cmV0dXJuIGR9CmZ1bmN0aW9uIGpZYihhKXt2YXIgYixjO3N3aXRjaChKRChXTWIoZ1liKGEpLChCd2MoKSxRdWMpKSw0MTcpLmcpe2Nhc2UgMDpiPWEubjtjPWEubztyZXR1cm4gbmV3IEVkZChiLmErYy5hLzIsYi5iK2MuYi8yKTtjYXNlIDE6cmV0dXJuIG5ldyBGZGQoYS5uKTtkZWZhdWx0OnJldHVybiBudWxsO319CmZ1bmN0aW9uIHlvYygpe3lvYz1aY2I7dm9jPW5ldyB6b2MoeXZlLDApO3VvYz1uZXcgem9jKCdMRUZUVVAnLDEpO3hvYz1uZXcgem9jKCdSSUdIVFVQJywyKTt0b2M9bmV3IHpvYygnTEVGVERPV04nLDMpO3dvYz1uZXcgem9jKCdSSUdIVERPV04nLDQpO3NvYz1uZXcgem9jKCdCQUxBTkNFRCcsNSl9CmZ1bmN0aW9uIGdFYyhhLGIsYyl7dmFyIGQsZSxmO2Q9SGViKGEuYVtiLnBdLGEuYVtjLnBdKTtpZihkPT0wKXtlPUpEKFdNYihiLChJcWMoKSxhcWMpKSwxNSk7Zj1KRChXTWIoYyxhcWMpLDE1KTtpZihlLkdjKGMpKXtyZXR1cm4gLTF9ZWxzZSBpZihmLkdjKGIpKXtyZXR1cm4gMX19cmV0dXJuIGR9CmZ1bmN0aW9uIG5fYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDE6cmV0dXJuIG5ldyBOWmM7Y2FzZSAyOnJldHVybiBuZXcgUFpjO2Nhc2UgMzpyZXR1cm4gbmV3IExaYztjYXNlIDA6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYihoQWUrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319CmZ1bmN0aW9uIE1zZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgMTohYS5uJiYoYS5uPW5ldyBYMGQoejMsYSwxLDcpKTtSR2QoYS5uKTshYS5uJiYoYS5uPW5ldyBYMGQoejMsYSwxLDcpKTt2Q2QoYS5uLEpEKGMsMTYpKTtyZXR1cm47Y2FzZSAyOlBzZChhLE9EKGMpKTtyZXR1cm47fWhzZChhLGIsYyl9CmZ1bmN0aW9uIGJ0ZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgMzpldGQoYSxCZWIoTUQoYykpKTtyZXR1cm47Y2FzZSA0Omd0ZChhLEJlYihNRChjKSkpO3JldHVybjtjYXNlIDU6aHRkKGEsQmViKE1EKGMpKSk7cmV0dXJuO2Nhc2UgNjppdGQoYSxCZWIoTUQoYykpKTtyZXR1cm47fU1zZChhLGIsYyl9CmZ1bmN0aW9uIEh2ZChhLGIsYyl7dmFyIGQsZSxmO2Y9KGQ9bmV3IGsxZCxkKTtlPXFSZChmLGIsbnVsbCk7ISFlJiZlLmxqKCk7cnZkKGYsYyk7dENkKCghYS5jJiYoYS5jPW5ldyBYMGQobTYsYSwxMiwxMCkpLGEuYyksZik7dFJkKGYsMCk7d1JkKGYsMSk7dlJkKGYsdHJ1ZSk7dVJkKGYsdHJ1ZSl9CmZ1bmN0aW9uIGYxZChhLGIpe3ZhciBjLGQsZTtjPXpzYihhLmksYik7aWYoUkQoYywyNDApKXtlPUpEKGMsMjQwKTtlLnZpKCk9PW51bGwmJnVuZGVmaW5lZDtyZXR1cm4gZS5zaSgpfWVsc2UgaWYoUkQoYyw0OTEpKXtkPUpEKGMsMTk4Myk7ZT1kLmI7cmV0dXJuIGV9ZWxzZXtyZXR1cm4gbnVsbH19CmZ1bmN0aW9uICRpKGEsYixjLGQpe3ZhciBlLGY7UWIoYik7UWIoYyk7Zj1KRChCbihhLmQsYiksMTcpO09iKCEhZiwnUm93ICVzIG5vdCBpbiAlcycsYixhLmUpO2U9SkQoQm4oYS5iLGMpLDE3KTtPYighIWUsJ0NvbHVtbiAlcyBub3QgaW4gJXMnLGMsYS5jKTtyZXR1cm4gYWooYSxmLmEsZS5hLGQpfQpmdW5jdGlvbiBSQyhhLGIsYyxkLGUsZixnKXt2YXIgaCxpLGosayxsO2s9ZVtmXTtqPWY9PWctMTtoPWo/ZDowO2w9VEMoaCxrKTtkIT0xMCYmV0MoT0MoYSxnLWYpLGJbZl0sY1tmXSxoLGwpO2lmKCFqKXsrK2Y7Zm9yKGk9MDtpPGs7KytpKXtsW2ldPVJDKGEsYixjLGQsZSxmLGcpfX1yZXR1cm4gbH0KZnVuY3Rpb24gRGRjKGEpe3ZhciBiLGMsZCxlLGY7Zm9yKGQ9bmV3IG1qYigobmV3IGRqYihhLmIpKS5hKTtkLmI7KXtjPWtqYihkKTtiPUpEKGMuamQoKSw5KTtmPUpEKEpEKGMua2QoKSw0NykuYSw5KTtlPUpEKEpEKGMua2QoKSw0NykuYiw4KTttZGQodmRkKGIubiksbWRkKG9kZChmLm4pLGUpKX19CmZ1bmN0aW9uIElBYyhhLGIpe3ZhciBjLGQsZSxmO2ZvcihmPW5ldyBybWIoYi5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksOSk7RW1iKGEuZCk7Zm9yKGQ9bmV3IGVzKElyKGtZYihlKS5hLkpjKCksbmV3IGVyKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDE4KTtGQWMoYSxlLGMuZC5pKX19fQpmdW5jdGlvbiBCSGQoYil7aWYoYi5nPT0tMSl7dGhyb3cgc2NiKG5ldyBWZWIpfWIuVWooKTt0cnl7Yi5pLmVkKGIuZyk7Yi5mPWIuaS5qO2IuZzxiLmUmJi0tYi5lO2IuZz0tMX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDk3KSl7dGhyb3cgc2NiKG5ldyB5cWIpfWVsc2UgdGhyb3cgc2NiKGEpfX0KZnVuY3Rpb24gRlZiKGEpe3ZhciBiLGMsZCxlO2U9LTE7ZD0wO2ZvcihjPW5ldyBybWIoYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI0OCk7aWYoYi5jPT0oRXljKCksQnljKSl7ZT1kPT0wPzA6ZC0xO2JyZWFrfWVsc2UgZD09YS5jLmxlbmd0aC0xJiYoZT1kKTtkKz0xfXJldHVybiBlfQpmdW5jdGlvbiBvNGMoYSl7dmFyIGIsYyxkLGU7ZT0wO2I9MDtmb3IoZD1uZXcgcm1iKGEuYyk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDI3KTtodGQoYyxhLmUrZSk7aXRkKGMsYS5mKTtlKz1jLmcrYS5iO2I9JHduZC5NYXRoLm1heChiLGMuZithLmIpfWEuZD1lLWEuYjthLmE9Yi1hLmJ9CmZ1bmN0aW9uIFRFYihhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IHJtYihhLmEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDYwKTtkPWIuZC5jO2IuZC5jPWIuZC5kO2IuZC5kPWQ7ZD1iLmQuYjtiLmQuYj1iLmQuYTtiLmQuYT1kO2Q9Yi5iLmE7Yi5iLmE9Yi5iLmI7Yi5iLmI9ZH1IRWIoYSl9CmZ1bmN0aW9uIE5SYihhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IHJtYihhLmEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDgyKTtkPWIuZy5jO2IuZy5jPWIuZy5kO2IuZy5kPWQ7ZD1iLmcuYjtiLmcuYj1iLmcuYTtiLmcuYT1kO2Q9Yi5lLmE7Yi5lLmE9Yi5lLmI7Yi5lLmI9ZH1FUmIoYSl9CmZ1bmN0aW9uIE9qYyhhKXt2YXIgYixjLGQsZSxmO2Y9RWMoYS5rKTtmb3IoYz0oUmpkKCksV0MoT0ModjIsMSksQXZlLDY0LDAsW1BqZCx4amQsd2pkLE9qZCxRamRdKSksZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO2lmKGIhPVBqZCYmIWYuR2MoYikpe3JldHVybiBifX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gQ2tjKGEsYil7dmFyIGMsZDtkPUpEKEJ1YihDQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIuaiwxNikpLG5ldyBMa2MpKSksMTEpO2lmKGQpe2M9SkQoTWxiKGQuZSwwKSwxOCk7aWYoYyl7cmV0dXJuIEpEKFdNYihjLChJcWMoKSxqcWMpKSwxNykuYX19cmV0dXJuIHB4YyhhLmMpfQpmdW5jdGlvbiBVWWMoYSl7dmFyIGIsYztjPVpCZChhKTtpZihjcihjKSl7cmV0dXJuIG51bGx9ZWxzZXtiPShRYihjKSxKRChBcihuZXcgZXMoSXIoYy5hLkpjKCksbmV3IGVyKSkpLDg1KSk7cmV0dXJuIF9CZChKRChuRGQoKCFiLmImJihiLmI9bmV3IHJlZSh2MyxiLDQsNykpLGIuYiksMCksODQpKX19CmZ1bmN0aW9uIFFSZChhKXt2YXIgYjtpZighYS5vKXtiPWEucmsoKTtiPyhhLm89bmV3IFk0ZChhLGEsbnVsbCkpOmEuWmsoKT8oYS5vPW5ldyBuMmQoYSxudWxsKSk6VGFlKGphZSgoR2ZlKCksRWZlKSxhKSk9PTE/KGEubz1uZXcgZzVkKGEpKTooYS5vPW5ldyBsNWQoYSxudWxsKSl9cmV0dXJuIGEub30KZnVuY3Rpb24gb2ZlKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aWYoYy5UaChiKSl7ZT0oZz1iLCFnP251bGw6SkQoZCw1MikuY2koZykpO2lmKGUpe2k9Yy5JaChiKTtoPWIudDtpZihoPjF8fGg9PS0xKXtmPUpEKGksMTUpO2UuV2IobGZlKGEsZikpfWVsc2V7ZS5XYihrZmUoYSxKRChpLDU3KSkpfX19fQpmdW5jdGlvbiBWY2IoYixjLGQsZSl7VWNiKCk7dmFyIGY9U2NiOyRtb2R1bGVOYW1lPWM7JG1vZHVsZUJhc2U9ZDtxY2I9ZTtmdW5jdGlvbiBnKCl7Zm9yKHZhciBhPTA7YTxmLmxlbmd0aDthKyspe2ZbYV0oKX19CmlmKGIpe3RyeXtCcWUoZykoKX1jYXRjaChhKXtiKGMsYSl9fWVsc2V7QnFlKGcpKCl9fQpmdW5jdGlvbiBtX2IoYSxiKXt2YXIgYyxkLGUsZjtmb3IoZT0oZj0obmV3IE9qYihhLmIpKS5hLnZjKCkuSmMoKSxuZXcgVWpiKGYpKTtlLmEuT2IoKTspe2Q9KGM9SkQoZS5hLlBiKCksNDMpLEpEKGMuamQoKSwzNCkpO2lmKFhlYihiLEpEKGQsMTcpKTwwKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBuX2IoYSxiKXt2YXIgYyxkLGUsZjtmb3IoZT0oZj0obmV3IE9qYihhLmIpKS5hLnZjKCkuSmMoKSxuZXcgVWpiKGYpKTtlLmEuT2IoKTspe2Q9KGM9SkQoZS5hLlBiKCksNDMpLEpEKGMuamQoKSwzNCkpO2lmKFhlYihiLEpEKGQsMTcpKT4wKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBvaWMoYSl7c3dpdGNoKEpEKFdNYihhLmIsKEJ3YygpLEJ1YykpLDM3OSkuZyl7Y2FzZSAxOkVCYihGQmIoREJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuZCwxNikpLG5ldyBKaWMpLG5ldyBMaWMpLG5ldyBOaWMpO2JyZWFrO2Nhc2UgMjpxaWMoYSk7YnJlYWs7Y2FzZSAwOnBpYyhhKTt9fQpmdW5jdGlvbiBWUGMoYSxiLGMpe3ZhciBkLGUsZjtkPWM7IWQmJihkPW5ldyB3bGQpO2QuU2coJ0xheW91dCcsYS5hLmMubGVuZ3RoKTtmb3IoZj1uZXcgcm1iKGEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDQ0KTtpZihkLllnKCkpe3JldHVybn1lLklmKGIsZC5iaCgxKSl9ZC5UZygpfQpmdW5jdGlvbiBoNGMoYSxiKXt2YXIgYyxkO1BsYihhLmIsYik7Zm9yKGQ9bmV3IHJtYihhLm4pO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwyMDgpO2lmKE5sYihjLmMsYiwwKSE9LTEpe1BsYihjLmMsYik7bzRjKGMpO2MuYy5jLmxlbmd0aD09MCYmUGxiKGEubixjKTticmVha319YjRjKGEpfQpmdW5jdGlvbiB1NGMoYSxiKXt2YXIgYyxkLGUsZixnO2c9YS5mO2U9MDtmPTA7Zm9yKGQ9bmV3IHJtYihhLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxNzIpO2k0YyhjLGEuZSxnKTtlNGMoYyxiKTtmPSR3bmQuTWF0aC5tYXgoZixjLnIpO2crPWMuZCthLmM7ZT1nfWEuZD1mO2EuYj1lfQpmdW5jdGlvbiBIZWQoKXtIZWQ9WmNiO0dlZD1uZXcgSWVkKCdWX1RPUCcsMCk7RmVkPW5ldyBJZWQoJ1ZfQ0VOVEVSJywxKTtFZWQ9bmV3IEllZCgnVl9CT1RUT00nLDIpO0NlZD1uZXcgSWVkKCdIX0xFRlQnLDMpO0JlZD1uZXcgSWVkKCdIX0NFTlRFUicsNCk7RGVkPW5ldyBJZWQoJ0hfUklHSFQnLDUpfQpmdW5jdGlvbiBfVGQoYSl7dmFyIGI7aWYoKGEuRGImNjQpIT0wKXJldHVybiBmVGQoYSk7Yj1uZXcgSmdiKGZUZChhKSk7Yi5hKz0nIChhYnN0cmFjdDogJztGZ2IoYiwoYS5CYiYyNTYpIT0wKTtiLmErPScsIGludGVyZmFjZTogJztGZ2IoYiwoYS5CYiY1MTIpIT0wKTtiLmErPScpJztyZXR1cm4gYi5hfQpmdW5jdGlvbiB0eihhKXt2YXIgYjtpZihhLmM9PW51bGwpe2I9WEQoYS5iKT09PVhEKHJ6KT9udWxsOmEuYjthLmQ9Yj09bnVsbD9ScWU6VUQoYik/d3ooTkQoYikpOlZEKGIpP1ByZTplZWIocmIoYikpO2EuYT1hLmErJzogJysoVUQoYik/dnooTkQoYikpOmIrJycpO2EuYz0nKCcrYS5kKycpICcrYS5hfX0KZnVuY3Rpb24gdnNiKCl7ZnVuY3Rpb24gYigpe3RyeXtyZXR1cm4gKG5ldyBNYXApLmVudHJpZXMoKS5uZXh0KCkuZG9uZX1jYXRjaChhKXtyZXR1cm4gZmFsc2V9fQppZih0eXBlb2YgTWFwPT09R3FlJiZNYXAucHJvdG90eXBlLmVudHJpZXMmJmIoKSl7cmV0dXJuIE1hcH1lbHNle3JldHVybiB3c2IoKX19CmZ1bmN0aW9uIHdPYyhhLGIpe3ZhciBjLGQsZSxmO2Y9bmV3IEFqYihhLmUsMCk7Yz0wO3doaWxlKGYuYjxmLmQuZ2MoKSl7ZD1CZWIoKHJEYihmLmI8Zi5kLmdjKCkpLE1EKGYuZC5YYihmLmM9Zi5iKyspKSkpO2U9ZC1iO2lmKGU+dXplKXtyZXR1cm4gY31lbHNlIGU+LTEuMEUtNiYmKytjfXJldHVybiBjfQpmdW5jdGlvbiBzeWQoYSxiLGMpe2lmKFJEKGIsMjY4KSl7cmV0dXJuIGZ5ZChhLEpEKGIsODUpLGMpfWVsc2UgaWYoUkQoYiwyNzMpKXtyZXR1cm4gZ3lkKGEsSkQoYiwyNzMpLGMpfWVsc2V7dGhyb3cgc2NiKG5ldyBUZWIoeERlK0VlKG5ldyBkbmIoV0MoT0MoYUosMSksTnFlLDEsNSxbYixjXSkpKSkpfX0KZnVuY3Rpb24gdHlkKGEsYixjKXtpZihSRChiLDI2OCkpe3JldHVybiBoeWQoYSxKRChiLDg1KSxjKX1lbHNlIGlmKFJEKGIsMjczKSl7cmV0dXJuIGl5ZChhLEpEKGIsMjczKSxjKX1lbHNle3Rocm93IHNjYihuZXcgVGViKHhEZStFZShuZXcgZG5iKFdDKE9DKGFKLDEpLE5xZSwxLDUsW2IsY10pKSkpKX19CmZ1bmN0aW9uIElaZChhLGIpe3ZhciBjO2lmKGIhPWEuYil7Yz1udWxsOyEhYS5iJiYoYz1ucWQoYS5iLGEsLTQsYykpOyEhYiYmKGM9bXFkKGIsYSwtNCxjKSk7Yz16WmQoYSxiLGMpOyEhYyYmYy5saigpfWVsc2UgKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSwzLGIsYikpfQpmdW5jdGlvbiBMWmQoYSxiKXt2YXIgYztpZihiIT1hLmYpe2M9bnVsbDshIWEuZiYmKGM9bnFkKGEuZixhLC0xLGMpKTshIWImJihjPW1xZChiLGEsLTEsYykpO2M9QlpkKGEsYixjKTshIWMmJmMubGooKX1lbHNlIChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsMCxiLGIpKX0KZnVuY3Rpb24gZWNlKGEsYixjLGQpe3ZhciBlLGYsZyxoO2lmKHFxZChhLmUpKXtlPWIuSWsoKTtoPWIua2QoKTtmPWMua2QoKTtnPUFiZShhLDEsZSxoLGYsZS5HaygpP0ZiZShhLGUsZixSRChlLDEwMSkmJihKRChlLDE5KS5CYiZQc2UpIT0wKTotMSx0cnVlKTtkP2Qua2ooZyk6KGQ9Zyl9cmV0dXJuIGR9CmZ1bmN0aW9uIHdpZShhKXt2YXIgYixjLGQ7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtjPUpEKGEsMTUpO2lmKGMuZGMoKSlyZXR1cm4gJyc7ZD1uZXcgSGdiO2ZvcihiPWMuSmMoKTtiLk9iKCk7KXtFZ2IoZCwoSWhlKCksT0QoYi5QYigpKSkpO2QuYSs9JyAnfXJldHVybiBoZGIoZCxkLmEubGVuZ3RoLTEpfQpmdW5jdGlvbiBBaWUoYSl7dmFyIGIsYyxkO2lmKGE9PW51bGwpcmV0dXJuIG51bGw7Yz1KRChhLDE1KTtpZihjLmRjKCkpcmV0dXJuICcnO2Q9bmV3IEhnYjtmb3IoYj1jLkpjKCk7Yi5PYigpOyl7RWdiKGQsKEloZSgpLE9EKGIuUGIoKSkpKTtkLmErPScgJ31yZXR1cm4gaGRiKGQsZC5hLmxlbmd0aC0xKX0KZnVuY3Rpb24gbENjKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoZj1uZXcgcm1iKGIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO2ZvcihkPW5ldyBlcyhJcihoWWIoZSkuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7Zz1jLmMuaS5wO2EubltnXT1hLm5bZ10tMX19fQpmdW5jdGlvbiBUQ2MoYSxiLGMpe3ZhciBkLGU7ZD1hLmNbYi5jLnBdW2IucF07ZT1hLmNbYy5jLnBdW2MucF07aWYoZC5hIT1udWxsJiZlLmEhPW51bGwpe3JldHVybiBBZWIoZC5hLGUuYSl9ZWxzZSBpZihkLmEhPW51bGwpe3JldHVybiAtMX1lbHNlIGlmKGUuYSE9bnVsbCl7cmV0dXJuIDF9cmV0dXJuIDB9CmZ1bmN0aW9uIFVQYyhhLGIsYyl7Yy5TZygnVHJlZSBsYXlvdXQnLDEpO2Y5YyhhLmIpO2k5YyhhLmIsKF9QYygpLFhQYyksWFBjKTtpOWMoYS5iLFlQYyxZUGMpO2k5YyhhLmIsWlBjLFpQYyk7aTljKGEuYiwkUGMsJFBjKTthLmE9ZDljKGEuYixiKTtWUGMoYSxiLGMuYmgoMSkpO2MuVGcoKTtyZXR1cm4gYn0KZnVuY3Rpb24gTnlkKGEsYil7dmFyIGMsZCxlLGYsZyxoO2lmKGIpe2Y9Yi5hLmxlbmd0aDtjPW5ldyBScGUoZik7Zm9yKGg9KGMuYi1jLmEpKmMuYzwwPyhRcGUoKSxQcGUpOm5ldyBscWUoYyk7aC5PYigpOyl7Zz1KRChoLlBiKCksMTcpO2U9X3hkKGIsZy5hKTtkPW5ldyBsQWQoYSk7T3lkKGQuYSxlKX19fQpmdW5jdGlvbiBjemQoYSxiKXt2YXIgYyxkLGUsZixnLGg7aWYoYil7Zj1iLmEubGVuZ3RoO2M9bmV3IFJwZShmKTtmb3IoaD0oYy5iLWMuYSkqYy5jPDA/KFFwZSgpLFBwZSk6bmV3IGxxZShjKTtoLk9iKCk7KXtnPUpEKGguUGIoKSwxNyk7ZT1feGQoYixnLmEpO2Q9bmV3IEZ6ZChhKTtCeWQoZC5hLGUpfX19CmZ1bmN0aW9uIFpOZChiKXt2YXIgYztpZihiIT1udWxsJiZiLmxlbmd0aD4wJiZfZmIoYixiLmxlbmd0aC0xKT09MzMpe3RyeXtjPUlOZChxZ2IoYiwwLGIubGVuZ3RoLTEpKTtyZXR1cm4gYy5lPT1udWxsfWNhdGNoKGEpe2E9cmNiKGEpO2lmKCFSRChhLDMyKSl0aHJvdyBzY2IoYSl9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gRVZiKGEsYixjKXt2YXIgZCxlLGY7ZD1nWWIoYik7ZT1zWGIoZCk7Zj1uZXcgYlpiO19ZYihmLGIpO3N3aXRjaChjLmcpe2Nhc2UgMTphWmIoZixUamQoV2pkKGUpKSk7YnJlYWs7Y2FzZSAyOmFaYihmLFdqZChlKSk7fVpNYihmLChCd2MoKSxEdmMpLE1EKFdNYihhLER2YykpKTtyZXR1cm4gZn0KZnVuY3Rpb24gdzZiKGEpe3ZhciBiLGM7Yj1KRChkcyhuZXcgZXMoSXIoaFliKGEuYSkuYS5KYygpLG5ldyBlcikpKSwxOCk7Yz1KRChkcyhuZXcgZXMoSXIoa1liKGEuYSkuYS5KYygpLG5ldyBlcikpKSwxOCk7cmV0dXJuIHlkYihMRChXTWIoYiwoSXFjKCkseHFjKSkpKXx8eWRiKExEKFdNYihjLHhxYykpKX0KZnVuY3Rpb24gJGdjKCl7JGdjPVpjYjtXZ2M9bmV3IF9nYygnT05FX1NJREUnLDApO1lnYz1uZXcgX2djKCdUV09fU0lERVNfQ09STkVSJywxKTtaZ2M9bmV3IF9nYygnVFdPX1NJREVTX09QUE9TSU5HJywyKTtYZ2M9bmV3IF9nYygnVEhSRUVfU0lERVMnLDMpO1ZnYz1uZXcgX2djKCdGT1VSX1NJREVTJyw0KX0KZnVuY3Rpb24gRW1jKGEsYil7dmFyIGMsZCxlLGY7Zj1uZXcgVWxiO2U9MDtkPWIuSmMoKTt3aGlsZShkLk9iKCkpe2M9amZiKEpEKGQuUGIoKSwxNykuYStlKTt3aGlsZShjLmE8YS5mJiYhZ21jKGEsYy5hKSl7Yz1qZmIoYy5hKzEpOysrZX1pZihjLmE+PWEuZil7YnJlYWt9WUNiKGYuYyxjKX1yZXR1cm4gZn0KZnVuY3Rpb24gaUljKGEpe3ZhciBiLGM7Zm9yKGM9bmV3IHJtYihhLmUuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI1KTt6SWMoYSxiKX1FQmIoQkJiKERCYihEQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5lLmIsMTYpKSxuZXcgekpjKSxuZXcgV0pjKSxuZXcgWUpjKSxuZXcgJEpjKGEpKX0KZnVuY3Rpb24gTkZkKGEsYil7aWYoIWIpe3JldHVybiBmYWxzZX1lbHNle2lmKGEuamooYikpe3JldHVybiBmYWxzZX1pZighYS5pKXtpZihSRChiLDE1MCkpe2EuaT1KRChiLDE1MCk7cmV0dXJuIHRydWV9ZWxzZXthLmk9bmV3IEVHZDtyZXR1cm4gYS5pLmtqKGIpfX1lbHNle3JldHVybiBhLmkua2ooYil9fX0KZnVuY3Rpb24gYWNlKGEsYixjKXt2YXIgZCxlLGY7ZD1iLklrKCk7Zj1iLmtkKCk7ZT1kLkdrKCk/QWJlKGEsMyxkLG51bGwsZixGYmUoYSxkLGYsUkQoZCwxMDEpJiYoSkQoZCwxOSkuQmImUHNlKSE9MCksdHJ1ZSk6QWJlKGEsMSxkLGQuZmsoKSxmLC0xLHRydWUpO2M/Yy5raihlKTooYz1lKTtyZXR1cm4gY30KZnVuY3Rpb24gdGllKGEpe2E9SXBlKGEsdHJ1ZSk7aWYoY2diKENCZSxhKXx8Y2diKCcxJyxhKSl7cmV0dXJuIHhkYigpLHdkYn1lbHNlIGlmKGNnYihEQmUsYSl8fGNnYignMCcsYSkpe3JldHVybiB4ZGIoKSx2ZGJ9dGhyb3cgc2NiKG5ldyBmaGUoIkludmFsaWQgYm9vbGVhbiB2YWx1ZTogJyIrYSsiJyIpKX0KZnVuY3Rpb24gS2QoYSxiLGMpe3ZhciBkLGUsZjtmb3IoZT1hLnZjKCkuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSw0Myk7Zj1kLmpkKCk7aWYoWEQoYik9PT1YRChmKXx8YiE9bnVsbCYmcGIoYixmKSl7aWYoYyl7ZD1uZXcgb2tiKGQuamQoKSxkLmtkKCkpO2UuUWIoKX1yZXR1cm4gZH19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGZLYihhKXthS2IoKTt2YXIgYixjLGQ7aWYoIWEuQi5HYygoTmtkKCksRmtkKSkpe3JldHVybn1kPWEuZi5pO2I9bmV3IGhkZChhLmEuYyk7Yz1uZXcgTFliO2MuYj1iLmMtZC5jO2MuZD1iLmQtZC5kO2MuYz1kLmMrZC5iLShiLmMrYi5iKTtjLmE9ZC5kK2QuYS0oYi5kK2IuYSk7YS5lLllmKGMpfQpmdW5jdGlvbiBNTGIoYSxiLGMsZCl7dmFyIGUsZixnO2c9JHduZC5NYXRoLm1pbihjLFBMYihKRChhLmIsNjgpLGIsYyxkKSk7Zm9yKGY9bmV3IHJtYihhLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwyMjQpO2UhPWImJihnPSR3bmQuTWF0aC5taW4oZyxNTGIoZSxiLGcsZCkpKX1yZXR1cm4gZ30KZnVuY3Rpb24gbVdiKGEpe3ZhciBiLGMsZCxlO2U9U0MoUlAsaHJlLDE5OSxhLmIuYy5sZW5ndGgsMCwyKTtkPW5ldyBBamIoYS5iLDApO3doaWxlKGQuYjxkLmQuZ2MoKSl7Yj0ockRiKGQuYjxkLmQuZ2MoKSksSkQoZC5kLlhiKGQuYz1kLmIrKyksMjUpKTtjPWQuYi0xO2VbY109RFhiKGIuYSl9cmV0dXJuIGV9CmZ1bmN0aW9uIG9fYihhLGIsYyl7dmFyIGQsZSxmO2Q9SkQoVHNiKGEuYSxjKSwzNCk7aWYoZCE9bnVsbCl7Zj1KRChUc2IoYS5iLGQpLDY3KTt5ZShmLGMsdHJ1ZSl9ZT1KRChUc2IoYS5iLGIpLDY3KTtpZighZSl7ZT1uZXcgTXRiO1VzYihhLmIsYixlKX1EdGIoZSxjLGUuYy5iLGUuYyk7VXNiKGEuYSxjLGIpfQpmdW5jdGlvbiBsMGIoYSxiLGMsZCxlKXt2YXIgZixnLGgsaTtnPWdMYihmTGIoa0xiKGkwYihjKSksZCksZDBiKGEsYyxlKSk7Zm9yKGk9b1liKGEsYykuSmMoKTtpLk9iKCk7KXtoPUpEKGkuUGIoKSwxMSk7aWYoYltoLnBdKXtmPWJbaC5wXS5pO0lsYihnLmQsbmV3IERMYihmLGRMYihnLGYpKSl9fWVMYihnKX0KZnVuY3Rpb24gdmZjKGEsYil7dGhpcy5mPW5ldyBJcmI7dGhpcy5iPW5ldyBJcmI7dGhpcy5qPW5ldyBJcmI7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5jPjAmJnVmYyh0aGlzLHRoaXMuYy0xLChSamQoKSx3amQpKTt0aGlzLmM8dGhpcy5hLmxlbmd0aC0xJiZ1ZmModGhpcyx0aGlzLmMrMSwoUmpkKCksUWpkKSl9CmZ1bmN0aW9uIGZrYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGY9bmV3IHJtYihiLmQpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwxMDUpO2c9SkQoTmliKGEuYyxlKSwxMTYpLm87Zm9yKGQ9bmV3IERyYihlLmIpO2QuYTxkLmMuYS5sZW5ndGg7KXtjPUpEKENyYihkKSw2NCk7cmdjKGUsYyxnKX19fQpmdW5jdGlvbiB0RGMoYSl7YS5sZW5ndGg+MCYmYVswXS5sZW5ndGg+MCYmKHRoaXMuYz15ZGIoTEQoV01iKGdZYihhWzBdWzBdKSwoSXFjKCksYnFjKSkpKSk7dGhpcy5hPVNDKFFXLGhyZSwyMDYzLGEubGVuZ3RoLDAsMik7dGhpcy5iPVNDKFRXLGhyZSwyMDY0LGEubGVuZ3RoLDAsMik7dGhpcy5kPW5ldyBHc30KZnVuY3Rpb24gV0ljKGEpe2lmKGEuYy5sZW5ndGg9PTApe3JldHVybiBmYWxzZX1pZigoc0RiKDAsYS5jLmxlbmd0aCksSkQoYS5jWzBdLDE4KSkuYy5pLms9PShEWWIoKSx5WWIpKXtyZXR1cm4gdHJ1ZX1yZXR1cm4geEJiKEZCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLDE2KSksbmV3IFpJYyksbmV3IF9JYyl9CmZ1bmN0aW9uIExfYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2g9VFljKGIpO2Y9Yi5mO2k9Yi5nO2c9JHduZC5NYXRoLnNxcnQoZipmK2kqaSk7ZT0wO2ZvcihkPW5ldyBybWIoaCk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDI3KTtlKz1MX2MoYSxjKX1yZXR1cm4gJHduZC5NYXRoLm1heChlLGcpfQpmdW5jdGlvbiBhamQoKXthamQ9WmNiO19pZD1uZXcgZGpkKGV1ZSwwKTskaWQ9bmV3IGRqZCgnRlJFRScsMSk7WmlkPW5ldyBkamQoJ0ZJWEVEX1NJREUnLDIpO1dpZD1uZXcgZGpkKCdGSVhFRF9PUkRFUicsMyk7WWlkPW5ldyBkamQoJ0ZJWEVEX1JBVElPJyw0KTtYaWQ9bmV3IGRqZCgnRklYRURfUE9TJyw1KX0KZnVuY3Rpb24gWDlkKGEsYil7dmFyIGMsZCxlO2M9Yi5taShhLmEpO2lmKGMpe2U9T0QoeEpkKCghYy5iJiYoYy5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsYykpLGMuYiksY0dlKSk7Zm9yKGQ9MTtkPChHZmUoKSxGZmUpLmxlbmd0aDsrK2Qpe2lmKGNnYihGZmVbZF0sZSkpe3JldHVybiBkfX19cmV0dXJuIDB9CmZ1bmN0aW9uIFRtYihhKXt2YXIgYixjLGQsZSxmO2lmKGE9PW51bGwpe3JldHVybiBScWV9Zj1uZXcgeHhiKExxZSwnWycsJ10nKTtmb3IoYz1hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTt1eGIoZiwnJytiKX1yZXR1cm4gIWYuYT9mLmM6Zi5lLmxlbmd0aD09MD9mLmEuYTpmLmEuYSsoJycrZi5lKX0KZnVuY3Rpb24gWm1iKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbCl7cmV0dXJuIFJxZX1mPW5ldyB4eGIoTHFlLCdbJywnXScpO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO3V4YihmLCcnK2IpfXJldHVybiAhZi5hP2YuYzpmLmUubGVuZ3RoPT0wP2YuYS5hOmYuYS5hKygnJytmLmUpfQpmdW5jdGlvbiBNZChhKXt2YXIgYixjLGQ7ZD1uZXcgeHhiKExxZSwneycsJ30nKTtmb3IoYz1hLnZjKCkuSmMoKTtjLk9iKCk7KXtiPUpEKGMuUGIoKSw0Myk7dXhiKGQsTmQoYSxiLmpkKCkpKyc9JytOZChhLGIua2QoKSkpfXJldHVybiAhZC5hP2QuYzpkLmUubGVuZ3RoPT0wP2QuYS5hOmQuYS5hKygnJytkLmUpfQpmdW5jdGlvbiBHR2IoYSl7dmFyIGIsYyxkLGU7d2hpbGUoIWVsYihhLm8pKXtjPUpEKGpsYihhLm8pLDQ3KTtkPUpEKGMuYSwxMjMpO2I9SkQoYy5iLDIxNik7ZT1BRmIoYixkKTtpZihiLmU9PWQpe1FGYihlLmcsYik7ZC5lPWUuZStiLmF9ZWxzZXtRRmIoZS5iLGIpO2QuZT1lLmUtYi5hfUlsYihhLmUuYSxkKX19CmZ1bmN0aW9uIGczYihhLGIpe3ZhciBjLGQsZTtjPW51bGw7Zm9yKGU9SkQoYi5LYihhKSwyMCkuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwxOCk7aWYoIWMpe2M9ZC5jLmk9PWE/ZC5kLmk6ZC5jLml9ZWxzZXtpZigoZC5jLmk9PWE/ZC5kLmk6ZC5jLmkpIT1jKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gWE5jKGEsYil7dmFyIGMsZCxlLGYsZztjPXhNYyhhLGZhbHNlLGIpO2ZvcihlPW5ldyBybWIoYyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDEzMyk7ZC5kPT0wPyhjTmMoZCxudWxsKSxkTmMoZCxudWxsKSk6KGY9ZC5hLGc9ZC5iLGNOYyhkLGcpLGROYyhkLGYpLHVuZGVmaW5lZCl9fQpmdW5jdGlvbiBUT2MoYSl7dmFyIGIsYztiPW5ldyBKOWM7RDljKGIsRk9jKTtjPUpEKFdNYihhLChJcWMoKSxXcGMpKSwyMik7Yy5HYygoJG9jKCksWm9jKSkmJkQ5YyhiLEpPYyk7Yy5HYyhRb2MpJiZEOWMoYixHT2MpO2MuR2MoWG9jKSYmRDljKGIsSU9jKTtjLkdjKFNvYykmJkQ5YyhiLEhPYyk7cmV0dXJuIGJ9CmZ1bmN0aW9uIGF6KGEsYixjKXt2YXIgZCxlLGYsZyxoO1N0cmluZy5mcm9tQ2hhckNvZGUoMTApO2J6KGEpO2ZvcihlPShhLms9PW51bGwmJihhLms9U0MoaUosaHJlLDgwLDAsMCwxKSksYS5rKSxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07YXooZCxiLCdcdCcrYyl9aD1hLmY7ISFoJiZheihoLGIsYyl9CmZ1bmN0aW9uIHg3YihhKXt2YXIgYixjLGQsZTt3N2IoYSk7Zm9yKGM9bmV3IGVzKElyKGVZYihhKS5hLkpjKCksbmV3IGVyKSk7Y3MoYyk7KXtiPUpEKGRzKGMpLDE4KTtkPWIuYy5pPT1hO2U9ZD9iLmQ6Yi5jO2Q/aFdiKGIsbnVsbCk6Z1diKGIsbnVsbCk7Wk1iKGIsKElxYygpLG9xYyksZSk7QjdiKGEsZS5pKX19CmZ1bmN0aW9uIHpqYyhhLGIsYyxkKXt2YXIgZSxmO2Y9Yi5pO2U9Y1tmLmddW2EuZFtmLmddXTtzd2l0Y2goZi5nKXtjYXNlIDE6ZS09ZCtiLmouYjtiLmcuYj1lO2JyZWFrO2Nhc2UgMzplKz1kO2IuZy5iPWU7YnJlYWs7Y2FzZSA0OmUtPWQrYi5qLmE7Yi5nLmE9ZTticmVhaztjYXNlIDI6ZSs9ZDtiLmcuYT1lO319CmZ1bmN0aW9uIF9IYyhhLGIsYyl7dmFyIGQsZSxmLGc7Zz1ObGIoYS5lLGIsMCk7Zj1uZXcgYUljO2YuYj1jO2Q9bmV3IEFqYihhLmUsZyk7d2hpbGUoZC5iPGQuZC5nYygpKXtlPShyRGIoZC5iPGQuZC5nYygpKSxKRChkLmQuWGIoZC5jPWQuYisrKSw5KSk7ZS5wPWM7SWxiKGYuZSxlKTt0amIoZCl9cmV0dXJuIGZ9CmZ1bmN0aW9uIE5ZYyhhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IENIZCgoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpKTtjLmUhPWMuaS5nYygpOyl7Yj1KRChBSGQoYyksMjcpO2Q9WkJkKGIpO2lmKCFjcyhuZXcgZXMoSXIoZC5hLkpjKCksbmV3IGVyKSkpKXtyZXR1cm4gYn19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGpaYygpe2paYz1aY2I7aFpjPW5ldyBrWmMoJ09WRVJMQVBfUkVNT1ZBTCcsMCk7ZVpjPW5ldyBrWmMoZEFlLDEpO2laYz1uZXcga1pjKCdST1RBVElPTicsMik7ZlpjPW5ldyBrWmMoJ0dSQVBIX1NJWkVfQ0FMQ1VMQVRJT04nLDMpO2daYz1uZXcga1pjKCdPVVRHT0lOR19FREdFX0FOR0xFUycsNCl9CmZ1bmN0aW9uIEV3ZCgpe3ZhciBhO2lmKEF3ZClyZXR1cm4gSkQoZzFkKChyT2QoKSxxT2QpLF9DZSksMjA2MSk7YT1KRChSRChPaWIoKHJPZCgpLHFPZCksX0NlKSw1NTIpP09pYihxT2QsX0NlKTpuZXcgRHdkLDU1Mik7QXdkPXRydWU7QndkKGEpO0N3ZChhKTtWdmQoYSk7UmliKHFPZCxfQ2UsYSk7cmV0dXJuIGF9CmZ1bmN0aW9uIG1jZShhLGIsYyl7dmFyIGQsZTtpZihhLmo9PTApcmV0dXJuIGM7ZT1KRChFVWQoYSxiLGMpLDc0KTtkPWMuSWsoKTtpZighZC5vaygpfHwhYS5hLlpsKGQpKXt0aHJvdyBzY2IobmV3IHF6KCJJbnZhbGlkIGVudHJ5IGZlYXR1cmUgJyIrZC5uaygpLnpiKycuJytkLnZlKCkrIiciKSl9cmV0dXJuIGV9CmZ1bmN0aW9uIFdpKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtmb3IoaD1hLmEsaT0wLGo9aC5sZW5ndGg7aTxqOysraSl7Zz1oW2ldO2ZvcihkPWcsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2lmKFhEKGIpPT09WEQoYyl8fGIhPW51bGwmJnBiKGIsYykpe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBwaWIoYSl7dmFyIGIsYyxkO2lmKHZjYihhLDApPj0wKXtjPXhjYihhLEVzZSk7ZD1FY2IoYSxFc2UpfWVsc2V7Yj1MY2IoYSwxKTtjPXhjYihiLDUwMDAwMDAwMCk7ZD1FY2IoYiw1MDAwMDAwMDApO2Q9dGNiKEpjYihkLDEpLHVjYihhLDEpKX1yZXR1cm4gSWNiKEpjYihkLDMyKSx1Y2IoYyxVc2UpKX0KZnVuY3Rpb24gc2pjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aT1hLmI7Zj1iLmQ7Zz1mLmo7aD14amMoZyxpLmRbZy5nXSxjKTtlPW1kZChvZGQoZi5uKSxmLmEpO3N3aXRjaChmLmouZyl7Y2FzZSAxOmNhc2UgMzpoLmErPWUuYTticmVhaztjYXNlIDI6Y2FzZSA0OmguYis9ZS5iO31EdGIoZCxoLGQuYy5iLGQuYyl9CmZ1bmN0aW9uIEEyYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2U9bnVsbDtmPTA7Zm9yKGg9bmV3IHJtYihiKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMjcpO2k9Zy5pK2cuZztpZihhPGcuaitnLmYrZCl7IWU/KGU9Zyk6Yy5pLWk8Yy5pLWYmJihlPWcpO2Y9ZS5pK2UuZ319cmV0dXJuICFlPzA6ZitkfQpmdW5jdGlvbiBCMmMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtmPW51bGw7ZT0wO2ZvcihoPW5ldyBybWIoYik7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDI3KTtpPWcuaitnLmY7aWYoYTxnLmkrZy5nK2QpeyFmPyhmPWcpOmMuai1pPGMuai1lJiYoZj1nKTtlPWYuaitmLmZ9fXJldHVybiAhZj8wOmUrZH0KZnVuY3Rpb24gdUEoYSl7dmFyIGIsYyxkO2I9ZmFsc2U7ZD1hLmIuYy5sZW5ndGg7Zm9yKGM9MDtjPGQ7YysrKXtpZih2QShKRChNbGIoYS5iLGMpLDQzMSkpKXtpZighYiYmYysxPGQmJnZBKEpEKE1sYihhLmIsYysxKSw0MzEpKSl7Yj10cnVlO0pEKE1sYihhLmIsYyksNDMxKS5hPXRydWV9fWVsc2V7Yj1mYWxzZX19fQpmdW5jdGlvbiB6aWIoYSxiLGMsZCxlKXt2YXIgZixnO2Y9MDtmb3IoZz0wO2c8ZTtnKyspe2Y9dGNiKGYsTWNiKHVjYihiW2ddLFVzZSksdWNiKGRbZ10sVXNlKSkpO2FbZ109UGNiKGYpO2Y9S2NiKGYsMzIpfWZvcig7ZzxjO2crKyl7Zj10Y2IoZix1Y2IoYltnXSxVc2UpKTthW2ddPVBjYihmKTtmPUtjYihmLDMyKX19CmZ1bmN0aW9uIElpYihhLGIpe0NpYigpO3ZhciBjLGQ7ZD0oR2hiKCksQmhiKTtjPWE7Zm9yKDtiPjE7Yj4+PTEpeyhiJjEpIT0wJiYoZD1OaGIoZCxjKSk7Yy5kPT0xPyhjPU5oYihjLGMpKTooYz1uZXcgV2hiKEtpYihjLmEsYy5kLFNDKGNFLGlzZSwzMCxjLmQ8PDEsMTUsMSkpKSl9ZD1OaGIoZCxjKTtyZXR1cm4gZH0KZnVuY3Rpb24gdnZiKCl7dnZiPVpjYjt2YXIgYSxiLGMsZDtzdmI9U0MoYUUsUnNlLDMwLDI1LDE1LDEpO3R2Yj1TQyhhRSxSc2UsMzAsMzMsMTUsMSk7ZD0xLjUyNTg3ODkwNjI1RS01O2ZvcihiPTMyO2I+PTA7Yi0tKXt0dmJbYl09ZDtkKj0wLjV9Yz0xO2ZvcihhPTI0O2E+PTA7YS0tKXtzdmJbYV09YztjKj0wLjV9fQpmdW5jdGlvbiBtJGIoYSl7dmFyIGIsYztpZih5ZGIoTEQoa3NkKGEsKEJ3YygpLE51YykpKSkpe2ZvcihjPW5ldyBlcyhJcigkQmQoYSkuYS5KYygpLG5ldyBlcikpO2NzKGMpOyl7Yj1KRChkcyhjKSw4NSk7aWYoU3RkKGIpKXtpZih5ZGIoTEQoa3NkKGIsT3VjKSkpKXtyZXR1cm4gdHJ1ZX19fX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIFQ4YihhKXt2YXIgYixjLGQsZTtiPW5ldyBNdGI7Yz1uZXcgTXRiO2ZvcihlPUd0YihhLDApO2UuYiE9ZS5kLmM7KXtkPUpEKFV0YihlKSwxMSk7ZC5lLmMubGVuZ3RoPT0wPyhEdGIoYyxkLGMuYy5iLGMuYyksdHJ1ZSk6KER0YihiLGQsYi5jLmIsYi5jKSx0cnVlKX1kdihiKS5GYyhjKTtyZXR1cm4gYn0KZnVuY3Rpb24gbmdjKGEsYil7dmFyIGMsZCxlO2lmKE5yYihhLmYsYikpe2IuYj1hO2Q9Yi5jO05sYihhLmosZCwwKSE9LTF8fElsYihhLmosZCk7ZT1iLmQ7TmxiKGEuaixlLDApIT0tMXx8SWxiKGEuaixlKTtjPWIuYS5iO2lmKGMuYy5sZW5ndGghPTApeyFhLmkmJihhLmk9bmV3IHlnYyhhKSk7dGdjKGEuaSxjKX19fQpmdW5jdGlvbiB1amMoYSl7dmFyIGIsYyxkLGUsZjtjPWEuYy5kO2Q9Yy5qO2U9YS5kLmQ7Zj1lLmo7aWYoZD09Zil7cmV0dXJuIGMucDxlLnA/MDoxfWVsc2UgaWYoVWpkKGQpPT1mKXtyZXR1cm4gMH1lbHNlIGlmKFNqZChkKT09Zil7cmV0dXJuIDF9ZWxzZXtiPWEuYjtyZXR1cm4gcnJiKGIuYixVamQoZCkpPzA6MX19CmZ1bmN0aW9uIHl6ZChhLGIpe3ZhciBjLGQsZSxmLGcsaDtlPWE7Zz1heWQoZSwnbGF5b3V0T3B0aW9ucycpOyFnJiYoZz1heWQoZSxkRGUpKTtpZihnKXtoPWc7ZD1udWxsOyEhaCYmKGQ9KGY9Z0MoaCxTQyhoSixocmUsMiwwLDYsMSkpLG5ldyB1QyhoLGYpKSk7aWYoZCl7Yz1uZXcgbkFkKGgsYik7b2ZiKGQsYyl9fX0KZnVuY3Rpb24gX0JkKGEpe2lmKFJEKGEsMjA2KSl7cmV0dXJuIEpEKGEsMjcpfWVsc2UgaWYoUkQoYSwxOTMpKXtyZXR1cm4gb3hkKEpEKGEsMTI0KSl9ZWxzZSBpZighYSl7dGhyb3cgc2NiKG5ldyBGZmIoSURlKSl9ZWxzZXt0aHJvdyBzY2IobmV3IGJoYignT25seSBzdXBwb3J0IG5vZGVzIGFuZCBwb3J0cy4nKSl9fQpmdW5jdGlvbiBLQShhLGIsYyxkKXtpZihiPj0wJiZjZ2IoYS5zdWJzdHIoYiwnR01UJy5sZW5ndGgpLCdHTVQnKSl7Y1swXT1iKzM7cmV0dXJuIEJBKGEsYyxkKX1pZihiPj0wJiZjZ2IoYS5zdWJzdHIoYiwnVVRDJy5sZW5ndGgpLCdVVEMnKSl7Y1swXT1iKzM7cmV0dXJuIEJBKGEsYyxkKX1yZXR1cm4gQkEoYSxjLGQpfQpmdW5jdGlvbiB3Z2MoYSxiKXt2YXIgYyxkLGUsZixnO2Y9YS5nLmE7Zz1hLmcuYjtmb3IoZD1uZXcgcm1iKGEuZCk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDcyKTtlPWMubjtlLmE9ZjthLmk9PShSamQoKSx4amQpPyhlLmI9ZythLmouYi1jLm8uYik6KGUuYj1nKTttZGQoZSxiKTtmKz1jLm8uYSthLmV9fQpmdW5jdGlvbiBubGQoYSxiLGMpe2lmKGEuYil7dGhyb3cgc2NiKG5ldyBXZWIoJ1RoZSB0YXNrIGlzIGFscmVhZHkgZG9uZS4nKSl9ZWxzZSBpZihhLnAhPW51bGwpe3JldHVybiBmYWxzZX1lbHNle2EucD1iO2Eucj1jO2EuayYmKGEubz0oWmdiKCksRmNiKHpjYihEYXRlLm5vdygpKSxWcmUpKSk7cmV0dXJuIHRydWV9fQpmdW5jdGlvbiBnQmQoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD1uZXcgbUM7Yz1hLk5nKCk7ZT1jIT1udWxsO2UmJld4ZChoLHZEZSxhLk5nKCkpO2Q9YS52ZSgpO2Y9ZCE9bnVsbDtmJiZXeGQoaCxIRGUsYS52ZSgpKTtiPWEuTWcoKTtnPWIhPW51bGw7ZyYmV3hkKGgsJ2Rlc2NyaXB0aW9uJyxhLk1nKCkpO3JldHVybiBofQpmdW5jdGlvbiBuUmQoYSxiLGMpe3ZhciBkLGUsZjtmPWEucTthLnE9YjtpZigoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTApe2U9bmV3IGdfZChhLDEsOSxmLGIpOyFjPyhjPWUpOmMua2ooZSl9aWYoIWIpeyEhYS5yJiYoYz1hLlZrKG51bGwsYykpfWVsc2V7ZD1iLmM7ZCE9YS5yJiYoYz1hLlZrKGQsYykpfXJldHVybiBjfQpmdW5jdGlvbiBCNWQoYSxiLGMpe3ZhciBkLGUsZixnLGg7Yz0oaD1iLG1xZChoLGEuZSwtMS1hLmMsYykpO2c9dDVkKGEuYSk7Zm9yKGY9KGQ9bmV3IG1qYigobmV3IGRqYihnLmEpKS5hKSxuZXcgUzVkKGQpKTtmLmEuYjspe2U9SkQoa2piKGYuYSkuamQoKSw4Nyk7Yz1KWmQoZSxGWmQoZSxhLmEpLGMpfXJldHVybiBjfQpmdW5jdGlvbiBDNWQoYSxiLGMpe3ZhciBkLGUsZixnLGg7Yz0oaD1iLG5xZChoLGEuZSwtMS1hLmMsYykpO2c9dDVkKGEuYSk7Zm9yKGY9KGQ9bmV3IG1qYigobmV3IGRqYihnLmEpKS5hKSxuZXcgUzVkKGQpKTtmLmEuYjspe2U9SkQoa2piKGYuYSkuamQoKSw4Nyk7Yz1KWmQoZSxGWmQoZSxhLmEpLGMpfXJldHVybiBjfQpmdW5jdGlvbiBpaWIoYSxiLGMsZCl7dmFyIGUsZixnO2lmKGQ9PTApeyRnYihiLDAsYSxjLGEubGVuZ3RoLWMpfWVsc2V7Zz0zMi1kO2FbYS5sZW5ndGgtMV09MDtmb3IoZj1hLmxlbmd0aC0xO2Y+YztmLS0pe2FbZl18PWJbZi1jLTFdPj4+ZzthW2YtMV09YltmLWMtMV08PGR9fWZvcihlPTA7ZTxjO2UrKyl7YVtlXT0wfX0KZnVuY3Rpb24gTkpiKGEpe3ZhciBiLGMsZCxlLGY7Yj0wO2M9MDtmb3IoZj1hLkpjKCk7Zi5PYigpOyl7ZD1KRChmLlBiKCksMTE1KTtiPSR3bmQuTWF0aC5tYXgoYixkLmQuYik7Yz0kd25kLk1hdGgubWF4KGMsZC5kLmMpfWZvcihlPWEuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwxMTUpO2QuZC5iPWI7ZC5kLmM9Y319CmZ1bmN0aW9uIFZLYihhKXt2YXIgYixjLGQsZSxmO2M9MDtiPTA7Zm9yKGY9YS5KYygpO2YuT2IoKTspe2Q9SkQoZi5QYigpLDExNSk7Yz0kd25kLk1hdGgubWF4KGMsZC5kLmQpO2I9JHduZC5NYXRoLm1heChiLGQuZC5hKX1mb3IoZT1hLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksMTE1KTtkLmQuZD1jO2QuZC5hPWJ9fQpmdW5jdGlvbiBtaGMoYSxiLGMsZCxlKXt2YXIgZixnO2Y9SkQoeUJiKEJCYihiLk1jKCksbmV3IGNpYyksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbKGxBYigpLGpBYildKSkpLDE1KTt2bmIoZik7Zz1KRChZaShhLmIsYyxkKSwxNSk7ZT09MD9nLmFkKDAsZik6Zy5GYyhmKX0KZnVuY3Rpb24gZjhjKGEsYixjKXtjLlNnKCdHcm93IFRyZWUnLDEpO2EuYj1iLmY7aWYoeWRiKExEKFdNYihiLChZTGIoKSxXTGIpKSkpKXthLmM9bmV3IHVNYjtiOGMoYSxudWxsKX1lbHNle2EuYz1uZXcgdU1ifWEuYT1mYWxzZTtkOGMoYSxiLmYpO1pNYihiLFhMYiwoeGRiKCksYS5hP3RydWU6ZmFsc2UpKTtjLlRnKCl9CmZ1bmN0aW9uIGNhZChhKXt2YXIgYjt0aGlzLmQ9bmV3IElyYjt0aGlzLmM9YS5jO3RoaXMuZT1hLmQ7dGhpcy5iPWEuYjt0aGlzLmY9bmV3IFhuZChhLmUpO3RoaXMuYT1hLmE7IWEuZj8odGhpcy5nPShiPUpEKGRlYihMNCksMTApLG5ldyB1cmIoYixKRChWQ2IoYixiLmxlbmd0aCksMTApLDApKSk6KHRoaXMuZz1hLmYpfQpmdW5jdGlvbiBlbmQoYSl7dmFyIGIsYyxkLGU7Yj1udWxsO2ZvcihlPW5ldyBybWIoYS5QZigpKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTg3KTtjPW5ldyBnZGQoZC5KZigpLmEsZC5KZigpLmIsZC5LZigpLmEsZC5LZigpLmIpOyFiPyhiPWMpOmVkZChiLGMpfSFiJiYoYj1uZXcgZmRkKTtyZXR1cm4gYn0KZnVuY3Rpb24gSnNkKGEsYixjLGQpe3ZhciBlLGY7aWYoYz09MSl7cmV0dXJuICFhLm4mJihhLm49bmV3IFgwZCh6MyxhLDEsNykpLFBHZChhLm4sYixkKX1yZXR1cm4gZj1KRChRVGQoKGU9SkQoQ3JkKGEsMTYpLDI5KSwhZT9hLmVpKCk6ZSksYyksNjkpLGYudGsoKS53ayhhLEFyZChhKSxjLVZUZChhLmVpKCkpLGIsZCl9CmZ1bmN0aW9uIGZEZChhLGIsYyl7dmFyIGQsZSxmLGcsaDtkPWMuZ2MoKTthLllpKGEuaStkKTtoPWEuaS1iO2g+MCYmJGdiKGEuZyxiLGEuZyxiK2QsaCk7Zz1jLkpjKCk7YS5pKz1kO2ZvcihlPTA7ZTxkOysrZSl7Zj1nLlBiKCk7akRkKGEsYixhLldpKGIsZikpO2EuSmkoYixmKTthLktpKCk7KytifXJldHVybiBkIT0wfQpmdW5jdGlvbiBxUmQoYSxiLGMpe3ZhciBkO2lmKGIhPWEucSl7ISFhLnEmJihjPW5xZChhLnEsYSwtMTAsYykpOyEhYiYmKGM9bXFkKGIsYSwtMTAsYykpO2M9blJkKGEsYixjKX1lbHNlIGlmKChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCl7ZD1uZXcgZ19kKGEsMSw5LGIsYik7IWM/KGM9ZCk6Yy5raihkKX1yZXR1cm4gY30KZnVuY3Rpb24gY2soYSxiLGMsZCl7TWIoKGMmaXJlKT09MCwnZmxhdE1hcCBkb2VzIG5vdCBzdXBwb3J0IFNVQlNJWkVEIGNoYXJhY3RlcmlzdGljJyk7TWIoKGMmNCk9PTAsJ2ZsYXRNYXAgZG9lcyBub3Qgc3VwcG9ydCBTT1JURUQgY2hhcmFjdGVyaXN0aWMnKTtRYihhKTtRYihiKTtyZXR1cm4gbmV3IEtrKGEsYixjLGQpfQpmdW5jdGlvbiBaeShhLGIpe3VEYihiLCdDYW5ub3Qgc3VwcHJlc3MgYSBudWxsIGV4Y2VwdGlvbi4nKTtsRGIoYiE9YSwnRXhjZXB0aW9uIGNhbiBub3Qgc3VwcHJlc3MgaXRzZWxmLicpO2lmKGEuaSl7cmV0dXJufWEuaz09bnVsbD8oYS5rPVdDKE9DKGlKLDEpLGhyZSw4MCwwLFtiXSkpOihhLmtbYS5rLmxlbmd0aF09Yil9CmZ1bmN0aW9uIE9JYihhLGIpe3ZhciBjO2M9UEliKGEuYi4kZigpLGIuYi4kZigpKTtpZihjIT0wKXtyZXR1cm4gY31zd2l0Y2goYS5iLiRmKCkuZyl7Y2FzZSAxOmNhc2UgMjpyZXR1cm4gJGViKGEuYi5MZigpLGIuYi5MZigpKTtjYXNlIDM6Y2FzZSA0OnJldHVybiAkZWIoYi5iLkxmKCksYS5iLkxmKCkpO31yZXR1cm4gMH0KZnVuY3Rpb24gb05iKGEpe3ZhciBiLGMsZDtkPWEuZS5jLmxlbmd0aDthLmE9UUMoY0UsW2hyZSxpc2VdLFs1NCwzMF0sMTUsW2QsZF0sMik7Zm9yKGM9bmV3IHJtYihhLmMpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwyODgpO2EuYVtiLmMuYV1bYi5kLmFdKz1KRChXTWIoYiwoSU9iKCksdk9iKSksMTcpLmF9fQpmdW5jdGlvbiBXdWQoYSxiKXt2YXIgYyxkLGUsZixnO2lmKGE9PW51bGwpe3JldHVybiBudWxsfWVsc2V7Zz1TQyhfRCxVcmUsMzAsMipiLDE1LDEpO2ZvcihkPTAsZT0wO2Q8YjsrK2Qpe2M9YVtkXT4+NCYxNTtmPWFbZF0mMTU7Z1tlKytdPVN1ZFtjXTtnW2UrK109U3VkW2ZdfXJldHVybiB6Z2IoZywwLGcubGVuZ3RoKX19CmZ1bmN0aW9uIHdnYihhKXt2YXIgYixjO2lmKGE+PVBzZSl7Yj1Rc2UrKGEtUHNlPj4xMCYxMDIzKSZXcmU7Yz01NjMyMCsoYS1Qc2UmMTAyMykmV3JlO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpKygnJytTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKX1lbHNle3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGEmV3JlKX19CmZ1bmN0aW9uIGRLYihhLGIpe2FLYigpO3ZhciBjLGQsZSxmO2U9SkQoSkQoUWMoYS5yLGIpLDIyKSw4Myk7aWYoZS5nYygpPj0yKXtkPUpEKGUuSmMoKS5QYigpLDExNSk7Yz1hLnUuR2MoKG9qZCgpLGpqZCkpO2Y9YS51LkdjKG5qZCk7cmV0dXJuICFkLmEmJiFjJiYoZS5nYygpPT0yfHxmKX1lbHNle3JldHVybiBmYWxzZX19CmZ1bmN0aW9uIHlaYyhhLGIsYyxkLGUpe3ZhciBmLGcsaDtmPXpaYyhhLGIsYyxkLGUpO2g9ZmFsc2U7d2hpbGUoIWYpe3FaYyhhLGUsdHJ1ZSk7aD10cnVlO2Y9elpjKGEsYixjLGQsZSl9aCYmcVpjKGEsZSxmYWxzZSk7Zz1RWWMoZSk7aWYoZy5jLmxlbmd0aCE9MCl7ISFhLmQmJmEuZC5FZyhnKTt5WmMoYSxlLGMsZCxnKX19CmZ1bmN0aW9uIEQwYygpe0QwYz1aY2I7QzBjPW5ldyBFMGMoJ05PREVfU0laRV9SRU9SREVSRVInLDApO3owYz1uZXcgRTBjKCdJTlRFUkFDVElWRV9OT0RFX1JFT1JERVJFUicsMSk7QjBjPW5ldyBFMGMoJ01JTl9TSVpFX1BSRV9QUk9DRVNTT1InLDIpO0EwYz1uZXcgRTBjKCdNSU5fU0laRV9QT1NUX1BST0NFU1NPUicsMyl9CmZ1bmN0aW9uIEpoZCgpe0poZD1aY2I7SGhkPW5ldyBLaGQoeXZlLDApO0ZoZD1uZXcgS2hkKCdESVJFQ1RFRCcsMSk7SWhkPW5ldyBLaGQoJ1VORElSRUNURUQnLDIpO0RoZD1uZXcgS2hkKCdBU1NPQ0lBVElPTicsMyk7R2hkPW5ldyBLaGQoJ0dFTkVSQUxJWkFUSU9OJyw0KTtFaGQ9bmV3IEtoZCgnREVQRU5ERU5DWScsNSl9CmZ1bmN0aW9uIFhtZChhLGIpe3ZhciBjO2lmKCFveGQoYSkpe3Rocm93IHNjYihuZXcgV2ViKHRDZSkpfWM9b3hkKGEpO3N3aXRjaChiLmcpe2Nhc2UgMTpyZXR1cm4gLShhLmorYS5mKTtjYXNlIDI6cmV0dXJuIGEuaS1jLmc7Y2FzZSAzOnJldHVybiBhLmotYy5mO2Nhc2UgNDpyZXR1cm4gLShhLmkrYS5nKTt9cmV0dXJuIDB9CmZ1bmN0aW9uIGNjZShhLGIsYyl7dmFyIGQsZSxmO2Q9Yi5JaygpO2Y9Yi5rZCgpO2U9ZC5HaygpP0FiZShhLDQsZCxmLG51bGwsRmJlKGEsZCxmLFJEKGQsMTAxKSYmKEpEKGQsMTkpLkJiJlBzZSkhPTApLHRydWUpOkFiZShhLGQucWsoKT8yOjEsZCxmLGQuZmsoKSwtMSx0cnVlKTtjP2Mua2ooZSk6KGM9ZSk7cmV0dXJuIGN9CmZ1bmN0aW9uIF91YihhLGIpe3ZhciBjLGQ7dERiKGIpO2Q9YS5iLmMubGVuZ3RoO0lsYihhLmIsYik7d2hpbGUoZD4wKXtjPWQ7ZD0oZC0xKS8yfDA7aWYoYS5hLkxlKE1sYihhLmIsZCksYik8PTApe1JsYihhLmIsYyxiKTtyZXR1cm4gdHJ1ZX1SbGIoYS5iLGMsTWxiKGEuYixkKSl9UmxiKGEuYixkLGIpO3JldHVybiB0cnVlfQpmdW5jdGlvbiBESGIoYSxiLGMsZCl7dmFyIGUsZjtlPTA7aWYoIWMpe2ZvcihmPTA7Zjx1SGI7ZisrKXtlPSR3bmQuTWF0aC5tYXgoZSxzSGIoYS5hW2ZdW2IuZ10sZCkpfX1lbHNle2U9c0hiKGEuYVtjLmddW2IuZ10sZCl9Yj09KGlIYigpLGdIYikmJiEhYS5iJiYoZT0kd25kLk1hdGgubWF4KGUsYS5iLmEpKTtyZXR1cm4gZX0KZnVuY3Rpb24gbmtjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2U9YS5pO2Y9Yi5pO2lmKCFlfHwhZil7cmV0dXJuIGZhbHNlfWlmKGUuaSE9Zi5pfHxlLmk9PShSamQoKSx3amQpfHxlLmk9PShSamQoKSxRamQpKXtyZXR1cm4gZmFsc2V9Zz1lLmcuYTtjPWcrZS5qLmE7aD1mLmcuYTtkPWgrZi5qLmE7cmV0dXJuIGc8PWQmJmM+PWh9CmZ1bmN0aW9uIFAyYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBEMmM7Y2FzZSAxOnJldHVybiBuZXcgSjJjO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJ05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHdpZHRoIGFwcHJveGltYXRvciAnKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fQpmdW5jdGlvbiBWeGQoYSxiLGMsZCl7dmFyIGU7ZT1mYWxzZTtpZihWRChkKSl7ZT10cnVlO1d4ZChiLGMsT0QoZCkpfWlmKCFlKXtpZihTRChkKSl7ZT10cnVlO1Z4ZChhLGIsYyxkKX19aWYoIWUpe2lmKFJEKGQsMjQxKSl7ZT10cnVlO1V4ZChiLGMsSkQoZCwyNDEpKX19aWYoIWUpe3Rocm93IHNjYihuZXcgcmRiKHVEZSkpfX0KZnVuY3Rpb24gUDlkKGEsYil7dmFyIGMsZCxlO2M9Yi5taShhLmEpO2lmKGMpe2U9eEpkKCghYy5iJiYoYy5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsYykpLGMuYiksc0ZlKTtpZihlIT1udWxsKXtmb3IoZD0xO2Q8KEdmZSgpLENmZSkubGVuZ3RoOysrZCl7aWYoY2diKENmZVtkXSxlKSl7cmV0dXJuIGR9fX19cmV0dXJuIDB9CmZ1bmN0aW9uIFE5ZChhLGIpe3ZhciBjLGQsZTtjPWIubWkoYS5hKTtpZihjKXtlPXhKZCgoIWMuYiYmKGMuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LGMpKSxjLmIpLHNGZSk7aWYoZSE9bnVsbCl7Zm9yKGQ9MTtkPChHZmUoKSxEZmUpLmxlbmd0aDsrK2Qpe2lmKGNnYihEZmVbZF0sZSkpe3JldHVybiBkfX19fXJldHVybiAwfQpmdW5jdGlvbiBUZShhLGIpe3ZhciBjLGQsZSxmO3REYihiKTtmPWEuYS5nYygpO2lmKGY8Yi5nYygpKXtmb3IoYz1hLmEuZWMoKS5KYygpO2MuT2IoKTspe2Q9Yy5QYigpO2IuR2MoZCkmJmMuUWIoKX19ZWxzZXtmb3IoZT1iLkpjKCk7ZS5PYigpOyl7ZD1lLlBiKCk7YS5hLkFjKGQpIT1udWxsfX1yZXR1cm4gZiE9YS5hLmdjKCl9CmZ1bmN0aW9uIG9VYihhKXt2YXIgYixjO2M9b2RkKEtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFthLmkubixhLm4sYS5hXSkpKTtiPWEuaS5kO3N3aXRjaChhLmouZyl7Y2FzZSAxOmMuYi09Yi5kO2JyZWFrO2Nhc2UgMjpjLmErPWIuYzticmVhaztjYXNlIDM6Yy5iKz1iLmE7YnJlYWs7Y2FzZSA0OmMuYS09Yi5iO31yZXR1cm4gY30KZnVuY3Rpb24gcjZiKGEpe3ZhciBiO2I9KGs2YigpLEpEKGRzKG5ldyBlcyhJcihoWWIoYSkuYS5KYygpLG5ldyBlcikpKSwxOCkuYy5pKTt3aGlsZShiLms9PShEWWIoKSx5WWIpKXtaTWIoYiwoSXFjKCksZHFjKSwoeGRiKCksdHJ1ZSkpO2I9SkQoZHMobmV3IGVzKElyKGhZYihiKS5hLkpjKCksbmV3IGVyKSkpLDE4KS5jLml9fQpmdW5jdGlvbiBFR2MoYSxiLGMsZCl7dmFyIGUsZixnLGg7aD1kR2MoYixkKTtmb3IoZz1oLkpjKCk7Zy5PYigpOyl7ZT1KRChnLlBiKCksMTEpO2EuZFtlLnBdPWEuZFtlLnBdK2EuY1tjLnBdfWg9ZEdjKGMsZCk7Zm9yKGY9aC5KYygpO2YuT2IoKTspe2U9SkQoZi5QYigpLDExKTthLmRbZS5wXT1hLmRbZS5wXS1hLmNbYi5wXX19CmZ1bmN0aW9uIHFuZChhLGIsYyl7dmFyIGQsZTtmb3IoZT1uZXcgQ0hkKCghYS5hJiYoYS5hPW5ldyBYMGQoQTMsYSwxMCwxMSkpLGEuYSkpO2UuZSE9ZS5pLmdjKCk7KXtkPUpEKEFIZChlKSwyNyk7ZnRkKGQsZC5pK2IsZC5qK2MpfW9mYigoIWEuYiYmKGEuYj1uZXcgWDBkKHgzLGEsMTIsMykpLGEuYiksbmV3IHduZChiLGMpKX0KZnVuY3Rpb24gT3hiKGEsYixjLGQpe3ZhciBlLGY7Zj1iO2U9Zi5kPT1udWxsfHxhLmEuTGUoYy5kLGYuZCk+MD8xOjA7d2hpbGUoZi5hW2VdIT1jKXtmPWYuYVtlXTtlPWEuYS5MZShjLmQsZi5kKT4wPzE6MH1mLmFbZV09ZDtkLmI9Yy5iO2QuYVswXT1jLmFbMF07ZC5hWzFdPWMuYVsxXTtjLmFbMF09bnVsbDtjLmFbMV09bnVsbH0KZnVuY3Rpb24gTEZiKGEpe3ZhciBiLGMsZCxlO2I9bmV3IFVsYjtjPVNDKHBjYixWdGUsMzAsYS5hLmMubGVuZ3RoLDE2LDEpO0ptYihjLGMubGVuZ3RoKTtmb3IoZT1uZXcgcm1iKGEuYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDEyMyk7aWYoIWNbZC5kXSl7WUNiKGIuYyxkKTtLRmIoYSxkLGMpfX1yZXR1cm4gYn0KZnVuY3Rpb24gY1JiKGEsYil7dmFyIGMsZCxlLGYsZztlPWI9PTE/V1FiOlZRYjtmb3IoZD1lLmEuZWMoKS5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDg2KTtmb3IoZz1KRChRYyhhLmYuYyxjKSwyMikuSmMoKTtnLk9iKCk7KXtmPUpEKGcuUGIoKSw0Nyk7UGxiKGEuYi5iLGYuYik7UGxiKGEuYi5hLEpEKGYuYiw4MikuZCl9fX0KZnVuY3Rpb24gXzJiKGEsYil7dmFyIGM7Yi5TZygnSGllcmFyY2hpY2FsIHBvcnQgcG9zaXRpb24gcHJvY2Vzc2luZycsMSk7Yz1hLmI7Yy5jLmxlbmd0aD4wJiYkMmIoKHNEYigwLGMuYy5sZW5ndGgpLEpEKGMuY1swXSwyNSkpLGEpO2MuYy5sZW5ndGg+MSYmJDJiKEpEKE1sYihjLGMuYy5sZW5ndGgtMSksMjUpLGEpO2IuVGcoKX0KZnVuY3Rpb24gcmpkKGEpe29qZCgpO3ZhciBiLGM7Yj1ucmIoa2pkLFdDKE9DKHUyLDEpLEVyZSwyNzcsMCxbbWpkXSkpO2lmKF94KFB4KGIsYSkpPjEpe3JldHVybiBmYWxzZX1jPW5yYihqamQsV0MoT0ModTIsMSksRXJlLDI3NywwLFtpamQsbmpkXSkpO2lmKF94KFB4KGMsYSkpPjEpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gaHdkKGEsYil7dmFyIGM7Yz1PaWIoKHJPZCgpLHFPZCksYSk7UkQoYyw0OTEpP1JpYihxT2QsYSxuZXcgVzBkKHRoaXMsYikpOlJpYihxT2QsYSx0aGlzKTtkd2QodGhpcyxiKTtpZihiPT0oRU9kKCksRE9kKSl7dGhpcy53Yj1KRCh0aGlzLDE5ODQpO0pEKGIsMTk4Nil9ZWxzZXt0aGlzLndiPShHT2QoKSxGT2QpfX0KZnVuY3Rpb24gZTZkKGIpe3ZhciBjLGQsZTtpZihiPT1udWxsKXtyZXR1cm4gbnVsbH1jPW51bGw7Zm9yKGQ9MDtkPFJ1ZC5sZW5ndGg7KytkKXt0cnl7cmV0dXJuIHdaZChSdWRbZF0sYil9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwzMikpe2U9YTtjPWV9ZWxzZSB0aHJvdyBzY2IoYSl9fXRocm93IHNjYihuZXcga09kKGMpKX0KZnVuY3Rpb24gQnFiKCl7QnFiPVpjYjt6cWI9V0MoT0MoaEosMSksaHJlLDIsNixbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddKTtBcWI9V0MoT0MoaEosMSksaHJlLDIsNixbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsX3JlLCdKdW4nLCdKdWwnLCdBdWcnLCdTZXAnLCdPY3QnLCdOb3YnLCdEZWMnXSl9CmZ1bmN0aW9uIFdNYihhLGIpe3ZhciBjLGQ7ZD0oIWEucSYmKGEucT1uZXcgSXJiKSxOaWIoYS5xLGIpKTtpZihkIT1udWxsKXtyZXR1cm4gZH1jPWIuUWcoKTtSRChjLDQpJiYoYz09bnVsbD8oIWEucSYmKGEucT1uZXcgSXJiKSxTaWIoYS5xLGIpKTooIWEucSYmKGEucT1uZXcgSXJiKSxRaWIoYS5xLGIsYykpLGEpO3JldHVybiBjfQpmdW5jdGlvbiBDUWIoKXtDUWI9WmNiO3hRYj1uZXcgRFFiKCdQMV9DWUNMRV9CUkVBS0lORycsMCk7eVFiPW5ldyBEUWIoJ1AyX0xBWUVSSU5HJywxKTt6UWI9bmV3IERRYignUDNfTk9ERV9PUkRFUklORycsMik7QVFiPW5ldyBEUWIoJ1A0X05PREVfUExBQ0VNRU5UJywzKTtCUWI9bmV3IERRYignUDVfRURHRV9ST1VUSU5HJyw0KX0KZnVuY3Rpb24gVVNiKGEsYil7TVNiKCk7dmFyIGM7aWYoYS5jPT1iLmMpe2lmKGEuYj09Yi5ifHxCU2IoYS5iLGIuYikpe2M9eVNiKGEuYik/MTotMTtpZihhLmEmJiFiLmEpe3JldHVybiBjfWVsc2UgaWYoIWEuYSYmYi5hKXtyZXR1cm4gLWN9fXJldHVybiAkZWIoYS5iLmcsYi5iLmcpfWVsc2V7cmV0dXJuIEhlYihhLmMsYi5jKX19CmZ1bmN0aW9uIFJEYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2c9a0djKGEuYSxiLGMpO2g9SkQoZy5hLDE3KS5hO2Y9SkQoZy5iLDE3KS5hO2lmKGQpe2k9SkQoV01iKGIsKElxYygpLHNxYykpLDkpO2U9SkQoV01iKGMsc3FjKSw5KTtpZighIWkmJiEhZSl7cGZjKGEuYixpLGUpO2grPWEuYi5pO2YrPWEuYi5lfX1yZXR1cm4gaD5mfQpmdW5jdGlvbiBIWmMoYSxiKXt2YXIgYyxkLGU7aWYoc1pjKGEsYikpe3JldHVybiB0cnVlfWZvcihkPW5ldyBybWIoYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDI3KTtlPVVZYyhjKTtpZihyWmMoYSxjLGUpKXtyZXR1cm4gdHJ1ZX1pZihGWmMoYSxjKS1hLmc8PWEuYSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gRDZjKCl7RDZjPVpjYjtDNmM9KCQ2YygpLFo2Yyk7ejZjPVY2Yzt5NmM9VDZjO3c2Yz1QNmM7eDZjPVI2Yzt2NmM9bmV3IE1ZYig4KTt1NmM9bmV3IE5CZCgoTGdkKCksS2ZkKSx2NmMpO0E2Yz1uZXcgTkJkKHdnZCw4KTtCNmM9WDZjO3I2Yz1LNmM7czZjPU02Yzt0NmM9bmV3IE5CZChaZWQsKHhkYigpLGZhbHNlKSl9CmZ1bmN0aW9uIHVlZCgpe3VlZD1aY2I7cmVkPW5ldyBNWWIoMTUpO3FlZD1uZXcgTkJkKChMZ2QoKSxLZmQpLHJlZCk7dGVkPW5ldyBOQmQod2dkLDE1KTtzZWQ9bmV3IE5CZChnZ2QsamZiKDApKTtsZWQ9aGZkO25lZD1CZmQ7cGVkPUdmZDtpZWQ9bmV3IE5CZChRZWQsSEJlKTttZWQ9bmZkO29lZD1FZmQ7amVkPVNlZDtrZWQ9WGVkfQpmdW5jdGlvbiBtemQoYSxiKXtpZihSRChiLDIwNikpe3JldHVybiBveWQoYSxKRChiLDI3KSl9ZWxzZSBpZihSRChiLDE5Mykpe3JldHVybiBweWQoYSxKRChiLDEyNCkpfWVsc2UgaWYoYil7cmV0dXJuIG51bGx9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYih4RGUrRWUobmV3IGRuYihXQyhPQyhhSiwxKSxOcWUsMSw1LFtiXSkpKSkpfX0KZnVuY3Rpb24gbnpkKGEsYil7aWYoUkQoYiwzNTkpKXtyZXR1cm4gcnlkKGEsSkQoYiwxNTMpKX1lbHNlIGlmKFJEKGIsMjY4KSl7cmV0dXJuIHF5ZChhLEpEKGIsODUpKX1lbHNlIGlmKGIpe3JldHVybiBudWxsfWVsc2V7dGhyb3cgc2NiKG5ldyBUZWIoeERlK0VlKG5ldyBkbmIoV0MoT0MoYUosMSksTnFlLDEsNSxbYl0pKSkpKX19CmZ1bmN0aW9uIGlDZChhKXtpZigoIWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSksYS5iKS5pIT0xfHwoIWEuYyYmKGEuYz1uZXcgcmVlKHYzLGEsNSw4KSksYS5jKS5pIT0xKXt0aHJvdyBzY2IobmV3IFRlYihLRGUpKX1yZXR1cm4gX0JkKEpEKG5EZCgoIWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSksYS5iKSwwKSw4NCkpfQpmdW5jdGlvbiBqQ2QoYSl7aWYoKCFhLmImJihhLmI9bmV3IHJlZSh2MyxhLDQsNykpLGEuYikuaSE9MXx8KCFhLmMmJihhLmM9bmV3IHJlZSh2MyxhLDUsOCkpLGEuYykuaSE9MSl7dGhyb3cgc2NiKG5ldyBUZWIoS0RlKSl9cmV0dXJuIF9CZChKRChuRGQoKCFhLmMmJihhLmM9bmV3IHJlZSh2MyxhLDUsOCkpLGEuYyksMCksODQpKX0KZnVuY3Rpb24gQUVkKGEsYixjKXt2YXIgZCxlLGY7KythLmo7ZT1hLkJqKCk7aWYoYj49ZXx8YjwwKXRocm93IHNjYihuZXcgbWRiKE5EZStiK09EZStlKSk7aWYoYz49ZXx8YzwwKXRocm93IHNjYihuZXcgbWRiKFBEZStjK09EZStlKSk7YiE9Yz8oZD0oZj1hLnpqKGMpLGEubmooYixmKSxmKSk6KGQ9YS51aihjKSk7cmV0dXJuIGR9CmZ1bmN0aW9uIGVmZShhKXt2YXIgYixjLGQ7ZD1hO2lmKGEpe2I9MDtmb3IoYz1hLkFoKCk7YztjPWMuQWgoKSl7aWYoKytiPlNzZSl7cmV0dXJuIGVmZShjKX1kPWM7aWYoYz09YSl7dGhyb3cgc2NiKG5ldyBXZWIoJ1RoZXJlIGlzIGEgY3ljbGUgaW4gdGhlIGNvbnRhaW5tZW50IGhpZXJhcmNoeSBvZiAnK2EpKX19fXJldHVybiBkfQpmdW5jdGlvbiBFZShhKXt2YXIgYixjLGQ7ZD1uZXcgeHhiKExxZSwnWycsJ10nKTtmb3IoYz1hLkpjKCk7Yy5PYigpOyl7Yj1jLlBiKCk7dXhiKGQsWEQoYik9PT1YRChhKT8nKHRoaXMgQ29sbGVjdGlvbiknOmI9PW51bGw/UnFlOmFkYihiKSl9cmV0dXJuICFkLmE/ZC5jOmQuZS5sZW5ndGg9PTA/ZC5hLmE6ZC5hLmErKCcnK2QuZSl9CmZ1bmN0aW9uIHNaYyhhLGIpe3ZhciBjLGQ7ZD1mYWxzZTtpZihiLmdjKCk8Mil7cmV0dXJuIGZhbHNlfWZvcihjPTA7YzxiLmdjKCk7YysrKXtjPGIuZ2MoKS0xPyhkPWR8clpjKGEsSkQoYi5YYihjKSwyNyksSkQoYi5YYihjKzEpLDI3KSkpOihkPWR8clpjKGEsSkQoYi5YYihjKSwyNyksSkQoYi5YYigwKSwyNykpKX1yZXR1cm4gZH0KZnVuY3Rpb24gJHVkKGEsYil7dmFyIGM7aWYoYiE9YS5hKXtjPW51bGw7ISFhLmEmJihjPUpEKGEuYSw1MikuUGgoYSw0LGw2LGMpKTshIWImJihjPUpEKGIsNTIpLk5oKGEsNCxsNixjKSk7Yz1WdWQoYSxiLGMpOyEhYyYmYy5saigpfWVsc2UgKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSwxLGIsYikpfQpmdW5jdGlvbiBLWmQoYSxiKXt2YXIgYztpZihiIT1hLmUpeyEhYS5lJiZKNWQodDVkKGEuZSksYSk7ISFiJiYoIWIuYiYmKGIuYj1uZXcgSzVkKG5ldyBHNWQpKSxJNWQoYi5iLGEpKTtjPUFaZChhLGIsbnVsbCk7ISFjJiZjLmxqKCl9ZWxzZSAoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDQsYixiKSl9CmZ1bmN0aW9uIHJYYihhKXt2YXIgYixjLGQsZTtpZihWZ2QoSkQoV01iKGEuYiwoQndjKCkscnVjKSksODYpKSl7cmV0dXJuIDB9Yj0wO2ZvcihkPW5ldyBybWIoYS5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksOSk7aWYoYy5rPT0oRFliKCksQVliKSl7ZT1jLm8uYTtiPSR3bmQuTWF0aC5tYXgoYixlKX19cmV0dXJuIGJ9CmZ1bmN0aW9uIHhnYyhhLGIpe3ZhciBjO2M9Yi5vO2lmKFVnZChhLmYpKXthLmouYT0kd25kLk1hdGgubWF4KGEuai5hLGMuYSk7YS5qLmIrPWMuYjthLmQuYy5sZW5ndGg+MSYmKGEuai5iKz1hLmUpfWVsc2V7YS5qLmErPWMuYTthLmouYj0kd25kLk1hdGgubWF4KGEuai5iLGMuYik7YS5kLmMubGVuZ3RoPjEmJihhLmouYSs9YS5lKX19CmZ1bmN0aW9uIGpoYygpe2poYz1aY2I7Z2hjPVdDKE9DKHYyLDEpLEF2ZSw2NCwwLFsoUmpkKCkseGpkKSx3amQsT2pkXSk7ZmhjPVdDKE9DKHYyLDEpLEF2ZSw2NCwwLFt3amQsT2pkLFFqZF0pO2hoYz1XQyhPQyh2MiwxKSxBdmUsNjQsMCxbT2pkLFFqZCx4amRdKTtpaGM9V0MoT0ModjIsMSksQXZlLDY0LDAsW1FqZCx4amQsd2pkXSl9CmZ1bmN0aW9uIHJqYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztnPWEuYy5kO2g9YS5kLmQ7aWYoZy5qPT1oLmope3JldHVybn1rPWEuYjtlPWcuajtpPW51bGw7d2hpbGUoZSE9aC5qKXtpPWI9PTA/VWpkKGUpOlNqZChlKTtmPXhqYyhlLGsuZFtlLmddLGMpO2o9eGpjKGksay5kW2kuZ10sYyk7QXRiKGQsbWRkKGYsaikpO2U9aX19CmZ1bmN0aW9uIFJGYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo7dGhpcy5hPU9GYyhhKTt0aGlzLmI9bmV3IFVsYjtmb3IoYz1hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTtmPW5ldyBVbGI7SWxiKHRoaXMuYixmKTtmb3IoaD1iLGk9MCxqPWgubGVuZ3RoO2k8ajsrK2kpe2c9aFtpXTtJbGIoZixuZXcgV2xiKGcuaikpfX19CmZ1bmN0aW9uIFRGYyhhLGIsYyl7dmFyIGQsZSxmO2Y9MDtkPWNbYl07aWYoYjxjLmxlbmd0aC0xKXtlPWNbYisxXTtpZihhLmJbYl0pe2Y9bEhjKGEuZCxkLGUpO2YrPW9HYyhhLmEsZCwoUmpkKCksd2pkKSk7Zis9b0djKGEuYSxlLFFqZCl9ZWxzZXtmPWpHYyhhLmEsZCxlKX19YS5jW2JdJiYoZis9cUdjKGEuYSxkKSk7cmV0dXJuIGZ9CmZ1bmN0aW9uIEJWYihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpO2k9bnVsbDtmb3IoaD1uZXcgcm1iKGQpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSw0NDEpO2lmKGchPWMmJk5sYihnLmUsZSwwKSE9LTEpe2k9ZzticmVha319Zj1DVmIoZSk7Z1diKGYsYy5iKTtoV2IoZixpLmIpO1JjKGEuYSxlLG5ldyBUVmIoZixiLGMuZikpfQpmdW5jdGlvbiBxZmMoYSl7d2hpbGUoYS5nLmMhPTAmJmEuZC5jIT0wKXtpZih6ZmMoYS5nKS5jPnpmYyhhLmQpLmMpe2EuaSs9YS5nLmM7QmZjKGEuZCl9ZWxzZSBpZih6ZmMoYS5kKS5jPnpmYyhhLmcpLmMpe2EuZSs9YS5kLmM7QmZjKGEuZyl9ZWxzZXthLmkrPXlmYyhhLmcpO2EuZSs9eWZjKGEuZCk7QmZjKGEuZyk7QmZjKGEuZCl9fX0KZnVuY3Rpb24geU5jKGEsYixjKXt2YXIgZCxlLGYsZztmPWIucTtnPWIucjtuZXcgZU5jKChpTmMoKSxnTmMpLGIsZiwxKTtuZXcgZU5jKGdOYyxmLGcsMSk7Zm9yKGU9bmV3IHJtYihjKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTE2KTtpZihkIT1mJiZkIT1iJiZkIT1nKXtTTmMoYS5hLGQsYik7U05jKGEuYSxkLGcpfX19CmZ1bmN0aW9uIHlQYyhhLGIsYyxkKXthLmEuZD0kd25kLk1hdGgubWluKGIsYyk7YS5hLmE9JHduZC5NYXRoLm1heChiLGQpLWEuYS5kO2lmKGI8Yyl7YS5iPTAuNSooYitjKTthLmc9d3plKmEuYiswLjkqYjthLmY9d3plKmEuYiswLjkqY31lbHNle2EuYj0wLjUqKGIrZCk7YS5nPXd6ZSphLmIrMC45KmQ7YS5mPXd6ZSphLmIrMC45KmJ9fQpmdW5jdGlvbiBDVGMoYSl7dmFyIGIsYyxkLGU7aWYoYS5iIT0wKXtiPW5ldyBNdGI7Zm9yKGU9R3RiKGEsMCk7ZS5iIT1lLmQuYzspe2Q9SkQoVXRiKGUpLDM5KTt4ZShiLGJSYyhkKSk7Yz1kLmU7Yy5hPUpEKFdNYihkLCh0VWMoKSxyVWMpKSwxNykuYTtjLmI9SkQoV01iKGQsc1VjKSwxNykuYX1yZXR1cm4gYn1yZXR1cm4gbmV3IE10Yn0KZnVuY3Rpb24gRjFiKGEpe3N3aXRjaChKRChXTWIoYSwoQndjKCksVXVjKSksMTcxKS5nKXtjYXNlIDE6Wk1iKGEsVXVjLChPcWMoKSxMcWMpKTticmVhaztjYXNlIDI6Wk1iKGEsVXVjLChPcWMoKSxNcWMpKTticmVhaztjYXNlIDM6Wk1iKGEsVXVjLChPcWMoKSxKcWMpKTticmVhaztjYXNlIDQ6Wk1iKGEsVXVjLChPcWMoKSxLcWMpKTt9fQpmdW5jdGlvbiBpYmMoYSxiLGMpe3ZhciBkO2MuU2coJ1NlbGYtTG9vcCByb3V0aW5nJywxKTtkPWpiYyhiKTtaRChXTWIoYiwoR2NkKCksRmNkKSkpO0VCYihGQmIoQkJiKEJCYihEQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYi5iLDE2KSksbmV3IG1iYyksbmV3IG9iYyksbmV3IHFiYyksbmV3IHNiYyksbmV3IHViYyhhLGQpKTtjLlRnKCl9CmZ1bmN0aW9uIEtvYygpe0tvYz1aY2I7SW9jPW5ldyBMb2MoeXZlLDApO0ZvYz1uZXcgTG9jKF90ZSwxKTtKb2M9bmV3IExvYyhhdWUsMik7SG9jPW5ldyBMb2MoJ0xFRlRfUklHSFRfQ09OU1RSQUlOVF9MT0NLSU5HJywzKTtHb2M9bmV3IExvYygnTEVGVF9SSUdIVF9DT05ORUNUSU9OX0xPQ0tJTkcnLDQpO0VvYz1uZXcgTG9jKHJ3ZSw1KX0KZnVuY3Rpb24gd1FjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksajtoPWMuYS8yO2Y9Yy5iLzI7ZD0kd25kLk1hdGguYWJzKGIuYS1hLmEpO2U9JHduZC5NYXRoLmFicyhiLmItYS5iKTtpPTE7aj0xO2Q+aCYmKGk9aC9kKTtlPmYmJihqPWYvZSk7Zz0kd25kLk1hdGgubWluKGksaik7YS5hKz1nKihiLmEtYS5hKTthLmIrPWcqKGIuYi1hLmIpfQpmdW5jdGlvbiBYMmMoYSxiLGMsZCxlKXt2YXIgZixnO2c9ZmFsc2U7Zj1KRChNbGIoYy5iLDApLDI3KTt3aGlsZShpM2MoYSxiLGYsZCxlKSl7Zz10cnVlO2g0YyhjLGYpO2lmKGMuYi5jLmxlbmd0aD09MCl7YnJlYWt9Zj1KRChNbGIoYy5iLDApLDI3KX1jLmIuYy5sZW5ndGg9PTAmJlY0YyhjLmosYyk7ZyYmdzRjKGIucSk7cmV0dXJuIGd9CmZ1bmN0aW9uIGZzZChhLGIsYyxkKXt2YXIgZSxmO2lmKGM9PTApe3JldHVybiAhYS5vJiYoYS5vPW5ldyBZUWQoKFZwZCgpLFNwZCksTzMsYSwwKSksV1FkKGEubyxiLGQpfXJldHVybiBmPUpEKFFUZCgoZT1KRChDcmQoYSwxNiksMjkpLCFlP2EuZWkoKTplKSxjKSw2OSksZi50aygpLnhrKGEsQXJkKGEpLGMtVlRkKGEuZWkoKSksYixkKX0KZnVuY3Rpb24gZHdkKGEsYil7dmFyIGM7aWYoYiE9YS5zYil7Yz1udWxsOyEhYS5zYiYmKGM9SkQoYS5zYiw1MikuUGgoYSwxLGY2LGMpKTshIWImJihjPUpEKGIsNTIpLk5oKGEsMSxmNixjKSk7Yz1MdmQoYSxiLGMpOyEhYyYmYy5saigpfWVsc2UgKGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSw0LGIsYikpfQpmdW5jdGlvbiBNeWQoYSxiKXt2YXIgYyxkLGUsZjtpZihiKXtlPVp4ZChiLCd4Jyk7Yz1uZXcgZkFkKGEpO2p1ZChjLmEsKHREYihlKSxlKSk7Zj1aeGQoYiwneScpO2Q9bmV3IGhBZChhKTtrdWQoZC5hLCh0RGIoZiksZikpfWVsc2V7dGhyb3cgc2NiKG5ldyBleWQoJ0FsbCBlZGdlIHNlY3Rpb25zIG5lZWQgYW4gZW5kIHBvaW50LicpKX19CmZ1bmN0aW9uIEt5ZChhLGIpe3ZhciBjLGQsZSxmO2lmKGIpe2U9WnhkKGIsJ3gnKTtjPW5ldyBfemQoYSk7cXVkKGMuYSwodERiKGUpLGUpKTtmPVp4ZChiLCd5Jyk7ZD1uZXcgYkFkKGEpO3J1ZChkLmEsKHREYihmKSxmKSl9ZWxzZXt0aHJvdyBzY2IobmV3IGV5ZCgnQWxsIGVkZ2Ugc2VjdGlvbnMgbmVlZCBhIHN0YXJ0IHBvaW50LicpKX19CmZ1bmN0aW9uIFh6YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2ZvcihkPSR6YihhKSxmPTAsaD1kLmxlbmd0aDtmPGg7KytmKXtlQWIoYil9aT0hVHpiJiZhLmU/VHpiP251bGw6YS5kOm51bGw7d2hpbGUoaSl7Zm9yKGM9JHpiKGkpLGU9MCxnPWMubGVuZ3RoO2U8ZzsrK2Upe2VBYihiKX1pPSFUemImJmkuZT9UemI/bnVsbDppLmQ6bnVsbH19CmZ1bmN0aW9uIGtRYihhLGIpe3ZhciBjLGQ7ZD1KRChXTWIoYiwoQndjKCksRXZjKSksMTAwKTtaTWIoYiwoSXFjKCkscHFjKSxkKTtjPWIuZTshIWMmJihFQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYy5hLDE2KSksbmV3IHBRYihhKSksRUJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihjLmIsMTYpKSxuZXcgclFiKSxuZXcgdFFiKGEpKSl9CmZ1bmN0aW9uIEowYihhKXt2YXIgYixjLGQsZTtiPWZhbHNlO2lmKFhNYihhLChJcWMoKSxPcGMpKSl7Yz1KRChXTWIoYSxPcGMpLDkxKTtmb3IoZT1uZXcgcm1iKGEuaik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDExKTtpZihIMGIoZCkpe2lmKCFiKXtHMGIoZ1liKGEpKTtiPXRydWV9SzBiKEpEKGMueGMoZCksMzE1KSl9fX19CmZ1bmN0aW9uIGZCZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo7aj1nQmQoYSk7Yz1hLmU7Zj1jIT1udWxsO2YmJld4ZChqLEdEZSxhLmUpO2g9YS5rO2c9ISFoO2cmJld4ZChqLCd0eXBlJyxscyhhLmspKTtkPXlxZShhLmopO2U9IWQ7aWYoZSl7aT1uZXcgRUI7a0MoaixtRGUsaSk7Yj1uZXcgckJkKGkpO29mYihhLmosYil9cmV0dXJuIGp9CmZ1bmN0aW9uIFZ2KGEpe3ZhciBiLGMsZCxlO2U9S2diKChiayhhLmdjKCksJ3NpemUnKSxuZXcgVmdiKSwxMjMpO2Q9dHJ1ZTtmb3IoYz1kbihhKS5KYygpO2MuT2IoKTspe2I9SkQoYy5QYigpLDQzKTtkfHwoZS5hKz1McWUsZSk7ZD1mYWxzZTtQZ2IoS2diKFBnYihlLGIuamQoKSksNjEpLGIua2QoKSl9cmV0dXJuIChlLmErPSd9JyxlKS5hfQpmdW5jdGlvbiBzRChhLGIpe3ZhciBjLGQsZTtiJj02MztpZihiPDIyKXtjPWEubDw8YjtkPWEubTw8YnxhLmw+PjIyLWI7ZT1hLmg8PGJ8YS5tPj4yMi1ifWVsc2UgaWYoYjw0NCl7Yz0wO2Q9YS5sPDxiLTIyO2U9YS5tPDxiLTIyfGEubD4+NDQtYn1lbHNle2M9MDtkPTA7ZT1hLmw8PGItNDR9cmV0dXJuIF9DKGMmenNlLGQmenNlLGUmQXNlKX0KZnVuY3Rpb24gRWRiKGEpe0RkYj09bnVsbCYmKERkYj1uZXcgUmVnRXhwKCdeXFxzKlsrLV0/KE5hTnxJbmZpbml0eXwoKFxcZCtcXC4/XFxkKil8KFxcLlxcZCspKShbZUVdWystXT9cXGQrKT9bZERmRl0/KVxccyokJykpO2lmKCFEZGIudGVzdChhKSl7dGhyb3cgc2NiKG5ldyBNZmIoSnNlK2ErJyInKSl9cmV0dXJuIHBhcnNlRmxvYXQoYSl9CmZ1bmN0aW9uIGVBYihhKXt2YXIgYixjLGQ7Yj1jZ2IodHlwZW9mKGNvbnNvbGUpLHN0ZSk/bnVsbDpuZXcgZkRiO2lmKCFiKXtyZXR1cm59R3piKCk7Yz0oZD05MDAsZD49VnJlPydlcnJvcic6ZD49OTAwPyd3YXJuJzpkPj04MDA/J2luZm8nOidsb2cnKTtkRGIoYyxhLmEpOyEhYS5iJiZlRGIoYixjLGEuYiwnRXhjZXB0aW9uOiAnLHRydWUpfQpmdW5jdGlvbiBaUWIoYSxiKXt2YXIgYyxkLGUsZixnO2U9Yj09MT9XUWI6VlFiO2ZvcihkPWUuYS5lYygpLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksODYpO2ZvcihnPUpEKFFjKGEuZi5jLGMpLDIyKS5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDQ3KTtJbGIoYS5iLmIsSkQoZi5iLDgyKSk7SWxiKGEuYi5hLEpEKGYuYiw4MikuZCl9fX0KZnVuY3Rpb24gUWpjKGEsYil7dmFyIGMsZCxlLGY7Zj1iLmIuajthLmE9U0MoY0UsaXNlLDMwLGYuYy5sZW5ndGgsMTUsMSk7ZT0wO2ZvcihkPTA7ZDxmLmMubGVuZ3RoO2QrKyl7Yz0oc0RiKGQsZi5jLmxlbmd0aCksSkQoZi5jW2RdLDExKSk7Yy5lLmMubGVuZ3RoPT0wJiZjLmcuYy5sZW5ndGg9PTA/KGUrPTEpOihlKz0zKTthLmFbZF09ZX19CmZ1bmN0aW9uIGRvYygpe2RvYz1aY2I7JG5jPW5ldyBmb2MoJ0FMV0FZU19VUCcsMCk7Wm5jPW5ldyBmb2MoJ0FMV0FZU19ET1dOJywxKTthb2M9bmV3IGZvYygnRElSRUNUSU9OX1VQJywyKTtfbmM9bmV3IGZvYygnRElSRUNUSU9OX0RPV04nLDMpO2NvYz1uZXcgZm9jKCdTTUFSVF9VUCcsNCk7Ym9jPW5ldyBmb2MoJ1NNQVJUX0RPV04nLDUpfQpmdW5jdGlvbiBLY2QoYSxiKXtpZihhPDB8fGI8MCl7dGhyb3cgc2NiKG5ldyBUZWIoJ2sgYW5kIG4gbXVzdCBiZSBwb3NpdGl2ZScpKX1lbHNlIGlmKGI+YSl7dGhyb3cgc2NiKG5ldyBUZWIoJ2sgbXVzdCBiZSBzbWFsbGVyIHRoYW4gbicpKX1lbHNlIHJldHVybiBiPT0wfHxiPT1hPzE6YT09MD8wOlBjZChhKS8oUGNkKGIpKlBjZChhLWIpKX0KZnVuY3Rpb24gV21kKGEsYil7dmFyIGMsZCxlLGY7Yz1uZXcgWURkKGEpO3doaWxlKGMuZz09bnVsbCYmIWMuYz9SRGQoYyk6Yy5nPT1udWxsfHxjLmkhPTAmJkpEKGMuZ1tjLmktMV0sNDkpLk9iKCkpe2Y9SkQoU0RkKGMpLDU3KTtpZihSRChmLDE3Mykpe2Q9SkQoZiwxNzMpO2ZvcihlPTA7ZTxiLmxlbmd0aDtlKyspe2JbZV0uSWcoZCl9fX19CmZ1bmN0aW9uIGp0ZChhKXt2YXIgYjtpZigoYS5EYiY2NCkhPTApcmV0dXJuIFFzZChhKTtiPW5ldyBKZ2IoUXNkKGEpKTtiLmErPScgKGhlaWdodDogJztCZ2IoYixhLmYpO2IuYSs9Jywgd2lkdGg6ICc7QmdiKGIsYS5nKTtiLmErPScsIHg6ICc7QmdiKGIsYS5pKTtiLmErPScsIHk6ICc7QmdiKGIsYS5qKTtiLmErPScpJztyZXR1cm4gYi5hfQpmdW5jdGlvbiBDbihhKXt2YXIgYixjLGQsZSxmLGcsaDtiPW5ldyBYc2I7Zm9yKGQ9YSxlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07Zz1RYihjLmpkKCkpO2g9VXNiKGIsZyxRYihjLmtkKCkpKTtpZihoIT1udWxsKXt0aHJvdyBzY2IobmV3IFRlYignZHVwbGljYXRlIGtleTogJytnKSl9fXRoaXMuYj0ocG5iKCksbmV3IGtwYihiKSl9CmZ1bmN0aW9uIFVtYihhKXt2YXIgYixjLGQsZSxmO2lmKGE9PW51bGwpe3JldHVybiBScWV9Zj1uZXcgeHhiKExxZSwnWycsJ10nKTtmb3IoYz1hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTt1eGIoZixTdHJpbmcuZnJvbUNoYXJDb2RlKGIpKX1yZXR1cm4gIWYuYT9mLmM6Zi5lLmxlbmd0aD09MD9mLmEuYTpmLmEuYSsoJycrZi5lKX0KZnVuY3Rpb24gWU5iKCl7WU5iPVpjYjtTTmI9KGJPYigpLGFPYik7Uk5iPW5ldyBNQmQoQnVlLFNOYik7amZiKDEpO1FOYj1uZXcgTUJkKEN1ZSxqZmIoMzAwKSk7amZiKDApO1ZOYj1uZXcgTUJkKER1ZSxqZmIoMCkpO25ldyBGbmQ7V05iPW5ldyBNQmQoRXVlLEZ1ZSk7bmV3IEZuZDtUTmI9bmV3IE1CZChHdWUsNSk7WE5iPWFPYjtVTmI9X05ifQpmdW5jdGlvbiBkMmQoYSxiKXt2YXIgYztpZihiIT1udWxsJiYhYS5jLkVrKCkuY2soYikpe2M9UkQoYiw1Nyk/SkQoYiw1NykuemgoKS56YjplZWIocmIoYikpO3Rocm93IHNjYihuZXcgemViKExDZSthLmMudmUoKSsiJ3MgdHlwZSAnIithLmMuRWsoKS52ZSgpKyInIGRvZXMgbm90IHBlcm1pdCBhIHZhbHVlIG9mIHR5cGUgJyIrYysiJyIpKX19CmZ1bmN0aW9uIHVWYihhLGIsYyl7dmFyIGQsZTtlPW5ldyBBamIoYS5iLDApO3doaWxlKGUuYjxlLmQuZ2MoKSl7ZD0ockRiKGUuYjxlLmQuZ2MoKSksSkQoZS5kLlhiKGUuYz1lLmIrKyksNzIpKTtpZihYRChXTWIoZCwoSXFjKCksbnFjKSkpIT09WEQoYikpe2NvbnRpbnVlfW9YYihkLm4sZ1liKGEuYy5pKSxjKTt0amIoZSk7SWxiKGIuYixkKX19CmZ1bmN0aW9uIGtsYyhhKXt2YXIgYixjO2M9JHduZC5NYXRoLnNxcnQoKGEuaz09bnVsbCYmKGEuaz1kbWMoYSxuZXcgb21jKSksQmViKGEuaykvKGEuYiooYS5nPT1udWxsJiYoYS5nPWFtYyhhLG5ldyBtbWMpKSxCZWIoYS5nKSkpKSk7Yj1QY2IoemNiKCR3bmQuTWF0aC5yb3VuZChjKSkpO2I9JHduZC5NYXRoLm1pbihiLGEuZik7cmV0dXJuIGJ9CmZ1bmN0aW9uIE5uZSgpe3ZhciBhLGIsYztiPTA7Zm9yKGE9MDthPCdYJy5sZW5ndGg7YSsrKXtjPU1uZSgoQURiKGEsJ1gnLmxlbmd0aCksJ1gnLmNoYXJDb2RlQXQoYSkpKTtpZihjPT0wKXRocm93IHNjYihuZXcgZW1lKChBRGIoYSwnWCcubGVuZ3RoKzEpLCdVbmtub3duIE9wdGlvbjogJysnWCcuc3Vic3RyKGEpKSkpO2J8PWN9cmV0dXJuIGJ9CmZ1bmN0aW9uIFVQYihhKXt2YXIgYixjLGQsZSxmLGc7Yj1uZXcgbmxiO2M9bmV3IG5sYjska2IoYixhKTska2IoYyxhKTt3aGlsZShjLmIhPWMuYyl7ZT1KRChqbGIoYyksMzYpO2ZvcihnPW5ldyBybWIoZS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksOSk7aWYoZi5lKXtkPWYuZTska2IoYixkKTska2IoYyxkKX19fXJldHVybiBifQpmdW5jdGlvbiBiWmIoKXtWWWIoKTtGWGIuY2FsbCh0aGlzKTt0aGlzLmo9KFJqZCgpLFBqZCk7dGhpcy5hPW5ldyBDZGQ7bmV3IGJZYjt0aGlzLmY9KGJrKDIsRHJlKSxuZXcgVmxiKDIpKTt0aGlzLmU9KGJrKDQsRHJlKSxuZXcgVmxiKDQpKTt0aGlzLmc9KGJrKDQsRHJlKSxuZXcgVmxiKDQpKTt0aGlzLmI9bmV3IHRaYih0aGlzLmUsdGhpcy5nKX0KZnVuY3Rpb24gTV9iKGEsYil7dmFyIGMsZDtpZih5ZGIoTEQoV01iKGIsKElxYygpLHhxYykpKSkpe3JldHVybiBmYWxzZX1kPWIuYy5pO2lmKGE9PShPcWMoKSxKcWMpKXtpZihkLms9PShEWWIoKSx4WWIpKXtyZXR1cm4gZmFsc2V9fWM9SkQoV01iKGQsKEJ3YygpLFV1YykpLDE3MSk7aWYoYz09S3FjKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9CmZ1bmN0aW9uIE5fYihhLGIpe3ZhciBjLGQ7aWYoeWRiKExEKFdNYihiLChJcWMoKSx4cWMpKSkpKXtyZXR1cm4gZmFsc2V9ZD1iLmQuaTtpZihhPT0oT3FjKCksTHFjKSl7aWYoZC5rPT0oRFliKCkseFliKSl7cmV0dXJuIGZhbHNlfX1jPUpEKFdNYihkLChCd2MoKSxVdWMpKSwxNzEpO2lmKGM9PU1xYyl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfQpmdW5jdGlvbiBtMGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtnPWEuZDtpPWEubztoPW5ldyBnZGQoLWcuYiwtZy5kLGcuYitpLmErZy5jLGcuZCtpLmIrZy5hKTtmb3IoZD1iLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTshIWMmJmVkZChoLGMuaSl9Zy5iPS1oLmM7Zy5kPS1oLmQ7Zy5jPWguYi1nLmItaS5hO2cuYT1oLmEtZy5kLWkuYn0KZnVuY3Rpb24gbmFjKGEsYil7aWYoYi5hKXtzd2l0Y2goSkQoV01iKGIuYiwoSXFjKCkscHFjKSksMTAwKS5nKXtjYXNlIDA6Y2FzZSAxOm9pYyhiKTtjYXNlIDI6RUJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIuZCwxNikpLG5ldyBBYWMpO3poYyhhLmEsYik7fX1lbHNle0VCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmQsMTYpKSxuZXcgQWFjKX19CmZ1bmN0aW9uIGw2Yygpe2w2Yz1aY2I7ZzZjPW5ldyBtNmMoJ0NFTlRFUl9ESVNUQU5DRScsMCk7aDZjPW5ldyBtNmMoJ0NJUkNMRV9VTkRFUkxBUCcsMSk7azZjPW5ldyBtNmMoJ1JFQ1RBTkdMRV9VTkRFUkxBUCcsMik7aTZjPW5ldyBtNmMoJ0lOVkVSVEVEX09WRVJMQVAnLDMpO2o2Yz1uZXcgbTZjKCdNSU5JTVVNX1JPT1RfRElTVEFOQ0UnLDQpfQpmdW5jdGlvbiBibWUoYSl7X2xlKCk7dmFyIGIsYyxkLGUsZjtpZihhPT1udWxsKXJldHVybiBudWxsO2Q9YS5sZW5ndGg7ZT1kKjI7Yj1TQyhfRCxVcmUsMzAsZSwxNSwxKTtmb3IoYz0wO2M8ZDtjKyspe2Y9YVtjXTtmPDAmJihmKz0yNTYpO2JbYyoyXT0kbGVbZj4+NF07YltjKjIrMV09JGxlW2YmMTVdfXJldHVybiB6Z2IoYiwwLGIubGVuZ3RoKX0KZnVuY3Rpb24gcG4oYSl7Y24oKTt2YXIgYixjLGQ7ZD1hLmMubGVuZ3RoO3N3aXRjaChkKXtjYXNlIDA6cmV0dXJuIGJuO2Nhc2UgMTpiPUpEKEVyKG5ldyBybWIoYSkpLDQzKTtyZXR1cm4gdG4oYi5qZCgpLGIua2QoKSk7ZGVmYXVsdDpjPUpEKFRsYihhLFNDKExLLHRyZSw0MyxhLmMubGVuZ3RoLDAsMSkpLDE3NCk7cmV0dXJuIG5ldyBJeChjKTt9fQpmdW5jdGlvbiBvWWIoYSxiKXtzd2l0Y2goYi5nKXtjYXNlIDE6cmV0dXJuIF9xKGEuaiwoVlliKCksUlliKSk7Y2FzZSAyOnJldHVybiBfcShhLmosKFZZYigpLFBZYikpO2Nhc2UgMzpyZXR1cm4gX3EoYS5qLChWWWIoKSxUWWIpKTtjYXNlIDQ6cmV0dXJuIF9xKGEuaiwoVlliKCksVVliKSk7ZGVmYXVsdDpyZXR1cm4gcG5iKCkscG5iKCksbW5iO319CmZ1bmN0aW9uIHdmYyhhLGIpe3ZhciBjLGQsZTtjPXhmYyhiLGEuZSk7ZD1KRChOaWIoYS5nLmYsYyksMTcpLmE7ZT1hLmEuYy5sZW5ndGgtMTtpZihhLmEuYy5sZW5ndGghPTAmJkpEKE1sYihhLmEsZSksMjkyKS5jPT1kKXsrK0pEKE1sYihhLmEsZSksMjkyKS5hOysrSkQoTWxiKGEuYSxlKSwyOTIpLmJ9ZWxzZXtJbGIoYS5hLG5ldyBHZmMoZCkpfX0KZnVuY3Rpb24gd0ZjKGEsYixjKXt2YXIgZCxlO2Q9dkZjKGEsYixjKTtpZihkIT0wKXtyZXR1cm4gZH1pZihYTWIoYiwoSXFjKCksanFjKSkmJlhNYihjLGpxYykpe2U9JGViKEpEKFdNYihiLGpxYyksMTcpLmEsSkQoV01iKGMsanFjKSwxNykuYSk7ZTwwP3hGYyhhLGIsYyk6ZT4wJiZ4RmMoYSxjLGIpO3JldHVybiBlfXJldHVybiB1RmMoYSxiLGMpfQpmdW5jdGlvbiBiX2MoKXtiX2M9WmNiO1UkYz0oTGdkKCksZmdkKTtfJGM9d2dkO04kYz1CZmQ7TyRjPUVmZDtQJGM9R2ZkO00kYz16ZmQ7USRjPUpmZDtUJGM9YWdkO0skYz0oRyRjKCksciRjKTtMJGM9cyRjO1ckYz15JGM7WiRjPUIkYztYJGM9eiRjO1kkYz1BJGM7UiRjPXUkYztTJGM9dyRjO1YkYz14JGM7JCRjPUMkYzthX2M9RSRjO0okYz1xJGN9CmZ1bmN0aW9uIGQ0YyhhLGIpe3ZhciBjLGQsZSxmLGc7aWYoYS5lPD1iKXtyZXR1cm4gYS5nfWlmKGY0YyhhLGEuZyxiKSl7cmV0dXJuIGEuZ31mPWEucjtkPWEuZztnPWEucjtlPShmLWQpLzIrZDt3aGlsZShkKzE8Zil7Yz1nNGMoYSxlLGZhbHNlKTtpZihjLmI8PWUmJmMuYTw9Yil7Zz1lO2Y9ZX1lbHNle2Q9ZX1lPShmLWQpLzIrZH1yZXR1cm4gZ30KZnVuY3Rpb24gVDhjKGEsYixjKXt2YXIgZDtkPU84YyhhLGIsdHJ1ZSk7bmxkKGMsJ1JlY3Vyc2l2ZSBHcmFwaCBMYXlvdXQnLGQpO1dtZChiLFdDKE9DKGIzLDEpLE5xZSw1MjEsMCxbbmV3IFE5Y10pKTtsc2QoYiwoTGdkKCksaWdkKSl8fFdtZChiLFdDKE9DKGIzLDEpLE5xZSw1MjEsMCxbbmV3IHNhZF0pKTtVOGMoYSxiLG51bGwsYyk7cGxkKGMpfQpmdW5jdGlvbiBwbGQoYSl7dmFyIGI7aWYoYS5wPT1udWxsKXt0aHJvdyBzY2IobmV3IFdlYignVGhlIHRhc2sgaGFzIG5vdCBiZWd1biB5ZXQuJykpfWlmKCFhLmIpe2lmKGEuayl7Yj0oWmdiKCksRmNiKHpjYihEYXRlLm5vdygpKSxWcmUpKTthLnE9T2NiKE1jYihiLGEubykpKjEuMEUtOX1hLmM8YS5yJiZxbGQoYSxhLnItYS5jKTthLmI9dHJ1ZX19CmZ1bmN0aW9uIGFuZChhKXt2YXIgYixjLGQ7ZD1uZXcgUmRkO0F0YihkLG5ldyBFZGQoYS5qLGEuaykpO2ZvcihjPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IHFWZCh1MyxhLDUpKSxhLmEpKTtjLmUhPWMuaS5nYygpOyl7Yj1KRChBSGQoYyksMzY5KTtBdGIoZCxuZXcgRWRkKGIuYSxiLmIpKX1BdGIoZCxuZXcgRWRkKGEuYixhLmMpKTtyZXR1cm4gZH0KZnVuY3Rpb24gRXlkKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrO2lmKGUpe2k9ZS5hLmxlbmd0aDtmPW5ldyBScGUoaSk7Zm9yKGs9KGYuYi1mLmEpKmYuYzwwPyhRcGUoKSxQcGUpOm5ldyBscWUoZik7ay5PYigpOyl7aj1KRChrLlBiKCksMTcpO2g9X3hkKGUsai5hKTtnPW5ldyBOemQoYSxiLGMsZCk7RnlkKGcuYSxnLmIsZy5jLGcuZCxoKX19fQpmdW5jdGlvbiBOeChiLGMpe3ZhciBkO2lmKFhEKGIpPT09WEQoYykpe3JldHVybiB0cnVlfWlmKFJEKGMsMjIpKXtkPUpEKGMsMjIpO3RyeXtyZXR1cm4gYi5nYygpPT1kLmdjKCkmJmIuSGMoZCl9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwxNjkpfHxSRChhLDIxMSkpe3JldHVybiBmYWxzZX1lbHNlIHRocm93IHNjYihhKX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiB5eWIoYSxiLGMsZCxlLGYpe3RoaXMuYz1hO3N3aXRjaChiLmcpe2Nhc2UgMjppZihhLmEuTGUoZSxjKTwwKXt0aHJvdyBzY2IobmV3IFRlYihtdGUrZStudGUrYykpfWJyZWFrO2Nhc2UgMTphLmEuTGUoZSxlKTticmVhaztjYXNlIDM6YS5hLkxlKGMsYyk7fXRoaXMuZj1iO3RoaXMuYj1jO3RoaXMuYT1kO3RoaXMuZT1lO3RoaXMuZD1mfQpmdW5jdGlvbiBXSGIoYSxiKXt2YXIgYztJbGIoYS5kLGIpO2M9Yi5LZigpO2lmKGEuYyl7YS5lLmE9JHduZC5NYXRoLm1heChhLmUuYSxjLmEpO2EuZS5iKz1jLmI7YS5kLmMubGVuZ3RoPjEmJihhLmUuYis9YS5hKX1lbHNle2EuZS5hKz1jLmE7YS5lLmI9JHduZC5NYXRoLm1heChhLmUuYixjLmIpO2EuZC5jLmxlbmd0aD4xJiYoYS5lLmErPWEuYSl9fQpmdW5jdGlvbiBmamMoYSl7dmFyIGIsYyxkLGU7ZT1hLmk7Yj1lLmI7ZD1lLmo7Yz1lLmc7c3dpdGNoKGUuYS5nKXtjYXNlIDA6Yy5hPShhLmcuYi5vLmEtZC5hKS8yO2JyZWFrO2Nhc2UgMTpjLmE9Yi5kLm4uYStiLmQuYS5hO2JyZWFrO2Nhc2UgMjpjLmE9Yi5kLm4uYStiLmQuYS5hLWQuYTticmVhaztjYXNlIDM6Yy5iPWIuZC5uLmIrYi5kLmEuYjt9fQpmdW5jdGlvbiBySWMoYSxiLGMpe3ZhciBkLGUsZjtmb3IoZT1uZXcgZXMoSXIoZVliKGMpLmEuSmMoKSxuZXcgZXIpKTtjcyhlKTspe2Q9SkQoZHMoZSksMTgpO2lmKCEoIWVXYihkKSYmISghZVdiKGQpJiZkLmMuaS5jPT1kLmQuaS5jKSkpe2NvbnRpbnVlfWY9akljKGEsZCxjLG5ldyBZSWMpO2YuYy5sZW5ndGg+MSYmKFlDYihiLmMsZiksdHJ1ZSl9fQpmdW5jdGlvbiBuZGQoYSxiLGMsZCxlKXtpZihkPGJ8fGU8Yyl7dGhyb3cgc2NiKG5ldyBUZWIoJ1RoZSBoaWdoeCBtdXN0IGJlIGJpZ2dlciB0aGVuIGxvd3ggYW5kIHRoZSBoaWdoeSBtdXN0IGJlIGJpZ2dlciB0aGVuIGxvd3knKSl9YS5hPGI/KGEuYT1iKTphLmE+ZCYmKGEuYT1kKTthLmI8Yz8oYS5iPWMpOmEuYj5lJiYoYS5iPWUpO3JldHVybiBhfQpmdW5jdGlvbiBrQmQoYSl7aWYoUkQoYSwxNDkpKXtyZXR1cm4gZEJkKEpEKGEsMTQ5KSl9ZWxzZSBpZihSRChhLDIzMikpe3JldHVybiBlQmQoSkQoYSwyMzIpKX1lbHNlIGlmKFJEKGEsMjEpKXtyZXR1cm4gZkJkKEpEKGEsMjEpKX1lbHNle3Rocm93IHNjYihuZXcgVGViKHhEZStFZShuZXcgZG5iKFdDKE9DKGFKLDEpLE5xZSwxLDUsW2FdKSkpKSl9fQpmdW5jdGlvbiBsaWIoYSxiLGMsZCxlKXt2YXIgZixnLGg7Zj10cnVlO2ZvcihnPTA7ZzxkO2crKyl7Zj1mJmNbZ109PTB9aWYoZT09MCl7JGdiKGMsZCxhLDAsYik7Zz1ifWVsc2V7aD0zMi1lO2Y9ZiZjW2ddPDxoPT0wO2ZvcihnPTA7ZzxiLTE7ZysrKXthW2ddPWNbZytkXT4+PmV8Y1tnK2QrMV08PGh9YVtnXT1jW2crZF0+Pj5lOysrZ31yZXR1cm4gZn0KZnVuY3Rpb24gYUxjKGEsYixjLGQpe3ZhciBlLGYsZztpZihiLms9PShEWWIoKSx5WWIpKXtmb3IoZj1uZXcgZXMoSXIoaFliKGIpLmEuSmMoKSxuZXcgZXIpKTtjcyhmKTspe2U9SkQoZHMoZiksMTgpO2c9ZS5jLmkuaztpZihnPT15WWImJmEuYy5hW2UuYy5pLmMucF09PWQmJmEuYy5hW2IuYy5wXT09Yyl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIHVEKGEsYil7dmFyIGMsZCxlLGY7YiY9NjM7Yz1hLmgmQXNlO2lmKGI8MjIpe2Y9Yz4+PmI7ZT1hLm0+PmJ8Yzw8MjItYjtkPWEubD4+YnxhLm08PDIyLWJ9ZWxzZSBpZihiPDQ0KXtmPTA7ZT1jPj4+Yi0yMjtkPWEubT4+Yi0yMnxhLmg8PDQ0LWJ9ZWxzZXtmPTA7ZT0wO2Q9Yz4+PmItNDR9cmV0dXJuIF9DKGQmenNlLGUmenNlLGYmQXNlKX0KZnVuY3Rpb24gTGZjKGEsYixjLGQpe3ZhciBlO3RoaXMuYj1kO3RoaXMuZT1hPT0oVUVjKCksU0VjKTtlPWJbY107dGhpcy5kPVFDKHBjYixbaHJlLFZ0ZV0sWzE4MywzMF0sMTYsW2UubGVuZ3RoLGUubGVuZ3RoXSwyKTt0aGlzLmE9UUMoY0UsW2hyZSxpc2VdLFs1NCwzMF0sMTUsW2UubGVuZ3RoLGUubGVuZ3RoXSwyKTt0aGlzLmM9bmV3IHZmYyhiLGMpfQpmdW5jdGlvbiBvZ2MoYSl7dmFyIGIsYyxkO2Euaz1uZXcgUWkoKFJqZCgpLFdDKE9DKHYyLDEpLEF2ZSw2NCwwLFtQamQseGpkLHdqZCxPamQsUWpkXSkpLmxlbmd0aCxhLmouYy5sZW5ndGgpO2ZvcihkPW5ldyBybWIoYS5qKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMTEyKTtiPWMuZC5qO1JjKGEuayxiLGMpfWEuZT1haGMoRWMoYS5rKSl9CmZ1bmN0aW9uIHZQYyhhLGIpe3ZhciBjLGQsZTtOcmIoYS5kLGIpO2M9bmV3IENQYztRaWIoYS5jLGIsYyk7Yy5mPXdQYyhiLmMpO2MuYT13UGMoYi5kKTtjLmQ9KEtPYygpLGU9Yi5jLmkuayxlPT0oRFliKCksQVliKXx8ZT09dlliKTtjLmU9KGQ9Yi5kLmkuayxkPT1BWWJ8fGQ9PXZZYik7Yy5iPWIuYy5qPT0oUmpkKCksUWpkKTtjLmM9Yi5kLmo9PXdqZH0KZnVuY3Rpb24gREdiKGEpe3ZhciBiLGMsZCxlLGY7Zj1IcWU7ZT1IcWU7Zm9yKGQ9bmV3IHJtYihPRmIoYSkpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwyMTYpO2I9Yy5lLmUtYy5kLmU7Yy5lPT1hJiZiPGU/KGU9Yik6YjxmJiYoZj1iKX1lPT1IcWUmJihlPS0xKTtmPT1IcWUmJihmPS0xKTtyZXR1cm4gbmV3IHhvZChqZmIoZSksamZiKGYpKX0KZnVuY3Rpb24gbjZiKGEsYil7dmFyIGMsZCxlLGY7Yz1iLmEuby5hO2Y9bmV3IElqYihnWWIoYi5hKS5iLGIuYyxiLmYrMSk7Zm9yKGU9bmV3IHVqYihmKTtlLmI8ZS5kLmdjKCk7KXtkPShyRGIoZS5iPGUuZC5nYygpKSxKRChlLmQuWGIoZS5jPWUuYisrKSwyNSkpO2lmKGQuYy5hPj1jKXttNmIoYSxiLGQucCk7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gd0EoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2c9Yy5sZW5ndGg7Zj0wO2U9LTE7aj1zZ2IoKEFEYihiLGEubGVuZ3RoKzEpLGEuc3Vic3RyKGIpKSwoa3ViKCksaXViKSk7Zm9yKGg9MDtoPGc7KytoKXtpPWNbaF0ubGVuZ3RoO2lmKGk+ZiYmbmdiKGosc2diKGNbaF0saXViKSkpe2U9aDtmPWl9fWU+PTAmJihkWzBdPWIrZik7cmV0dXJuIGV9CmZ1bmN0aW9uIGtnYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztmPWEuZC5wO2g9Zi5lO2k9Zi5yO2EuZz1uZXcgR0djKGkpO2c9YS5kLm8uYy5wO2Q9Zz4wP2hbZy0xXTpTQyhSUCxKdmUsOSwwLDAsMSk7ZT1oW2ddO2o9ZzxoLmxlbmd0aC0xP2hbZysxXTpTQyhSUCxKdmUsOSwwLDAsMSk7az1iPT1jLTE7az9zR2MoYS5nLGUsaik6c0djKGEuZyxkLGUpfQpmdW5jdGlvbiBLd2QoYSl7dmFyIGI7aWYoKGEuRGImNjQpIT0wKXJldHVybiBqdGQoYSk7Yj1uZXcgV2diKEdDZSk7IWEuYXx8UWdiKFFnYigoYi5hKz0nICInLGIpLGEuYSksJyInKTtRZ2IoTGdiKFFnYihMZ2IoUWdiKExnYihRZ2IoTGdiKChiLmErPScgKCcsYiksYS5pKSwnLCcpLGEuaiksJyB8ICcpLGEuZyksJywnKSxhLmYpLCcpJyk7cmV0dXJuIGIuYX0KZnVuY3Rpb24gU2JlKGEsYixjKXt2YXIgZCxlLGYsZyxoO2g9S2ZlKGEuZS56aCgpLGIpO2U9SkQoYS5nLDEyMik7ZD0wO2ZvcihnPTA7ZzxhLmk7KytnKXtmPWVbZ107aWYoaC5abChmLklrKCkpKXtpZihkPT1jKXtVR2QoYSxnKTtyZXR1cm4gSWZlKCksSkQoYiw2OSkudWsoKT9mOmYua2QoKX0rK2R9fXRocm93IHNjYihuZXcgbWRiKElFZStjK09EZStkKSl9CmZ1bmN0aW9uIGttZShhKXt2YXIgYixjLGQ7Yj1hLmM7aWYoYj09Mnx8Yj09N3x8Yj09MSl7cmV0dXJuIG9vZSgpLG9vZSgpLFpuZX1lbHNle2Q9aW1lKGEpO2M9bnVsbDt3aGlsZSgoYj1hLmMpIT0yJiZiIT03JiZiIT0xKXtpZighYyl7Yz0ob29lKCksb29lKCksKytub2UsbmV3IERwZSgxKSk7Q3BlKGMsZCk7ZD1jfUNwZShjLGltZShhKSl9cmV0dXJuIGR9fQpmdW5jdGlvbiBLYihhLGIsYyl7aWYoYTwwfHxhPmMpe3JldHVybiBKYihhLGMsJ3N0YXJ0IGluZGV4Jyl9aWYoYjwwfHxiPmMpe3JldHVybiBKYihiLGMsJ2VuZCBpbmRleCcpfXJldHVybiBoYygnZW5kIGluZGV4ICglcykgbXVzdCBub3QgYmUgbGVzcyB0aGFuIHN0YXJ0IGluZGV4ICglcyknLFdDKE9DKGFKLDEpLE5xZSwxLDUsW2pmYihiKSxqZmIoYSldKSl9CmZ1bmN0aW9uIFh6KGIsYyl7dmFyIGQsZSxmLGc7Zm9yKGU9MCxmPWIubGVuZ3RoO2U8ZjtlKyspe2c9YltlXTt0cnl7Z1sxXT9nWzBdLlJtKCkmJihjPVd6KGMsZykpOmdbMF0uUm0oKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDgwKSl7ZD1hO0l6KCk7T3ooUkQoZCw0NzIpP0pEKGQsNDcyKS5pZSgpOmQpfWVsc2UgdGhyb3cgc2NiKGEpfX1yZXR1cm4gY30KZnVuY3Rpb24gbTZiKGEsYixjKXt2YXIgZCxlLGY7YyE9Yi5jK2IuYi5nYygpJiZCNmIoYi5hLEo2YihiLGMtYi5jKSk7Zj1iLmEuYy5wO2EuYVtmXT0kd25kLk1hdGgubWF4KGEuYVtmXSxiLmEuby5hKTtmb3IoZT1KRChXTWIoYi5hLChJcWMoKSx3cWMpKSwxNSkuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSw3Mik7Wk1iKGQsajZiLCh4ZGIoKSx0cnVlKSl9fQpmdW5jdGlvbiBQYmMoYSxiKXt2YXIgYyxkLGU7ZT1OYmMoYik7Wk1iKGIsKElxYygpLGhxYyksZSk7aWYoZSl7ZD1IcWU7ISFmc2IoYS5mLGUpJiYoZD1KRChXZChmc2IoYS5mLGUpKSwxNykuYSk7Yz1KRChNbGIoYi5nLDApLDE4KTt5ZGIoTEQoV01iKGMseHFjKSkpfHxRaWIoYSxlLGpmYigkd25kLk1hdGgubWluKEpEKFdNYihjLGpxYyksMTcpLmEsZCkpKX19CmZ1bmN0aW9uIGNsYyhhKXt2YXIgYixjLGQsZTtjPUhxZTtlPXRydWU7Zm9yKGI9MDtiPGEuYS5jLmxlbmd0aDtiKyspe2lmKFhNYihKRChNbGIoYS5hLGIpLDkpLChCd2MoKSxfdWMpKSl7ZT1mYWxzZTtkPUpEKFdNYihKRChNbGIoYS5hLGIpLDkpLF91YyksMTcpLmE7Yz1jPGQ/YzpkfX1lJiYoYz1KRChKQmQoKEJ3YygpLF91YykpLDE3KS5hKTtyZXR1cm4gY30KZnVuY3Rpb24gZEFjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2IucD0tMTtmb3IoaD1tWWIoYiwoRXljKCksQ3ljKSkuSmMoKTtoLk9iKCk7KXtnPUpEKGguUGIoKSwxMSk7Zm9yKGU9bmV3IHJtYihnLmcpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxOCk7Zj1kLmQuaTtiIT1mJiYoZi5wPDA/Yy5FYyhkKTpmLnA+MCYmZEFjKGEsZixjKSl9fWIucD0wfQpmdW5jdGlvbiBXYihhKXt2YXIgYixjLGQsZTtiPUtnYihRZ2IobmV3IFdnYignUHJlZGljYXRlcy4nKSwnYW5kJyksNDApO2M9dHJ1ZTtmb3IoZT1uZXcgdWpiKGEpO2UuYjxlLmQuZ2MoKTspe2Q9KHJEYihlLmI8ZS5kLmdjKCkpLGUuZC5YYihlLmM9ZS5iKyspKTtjfHwoYi5hKz0nLCcsYik7Yi5hKz0nJytkO2M9ZmFsc2V9cmV0dXJuIChiLmErPScpJyxiKS5hfQpmdW5jdGlvbiBKOWIoYSxiLGMpe3ZhciBkLGUsZjtpZihjPD1iKzIpe3JldHVybn1lPShjLWIpLzJ8MDtmb3IoZD0wO2Q8ZTsrK2Qpe2Y9KHNEYihiK2QsYS5jLmxlbmd0aCksSkQoYS5jW2IrZF0sMTEpKTtSbGIoYSxiK2QsKHNEYihjLWQtMSxhLmMubGVuZ3RoKSxKRChhLmNbYy1kLTFdLDExKSkpO3NEYihjLWQtMSxhLmMubGVuZ3RoKTthLmNbYy1kLTFdPWZ9fQpmdW5jdGlvbiBHWmMoYSxiKXt2YXIgYyxkLGU7aWYoYi5jLmxlbmd0aCE9MCl7Yz1IWmMoYSxiKTtlPWZhbHNlO3doaWxlKCFjKXtxWmMoYSxiLHRydWUpO2U9dHJ1ZTtjPUhaYyhhLGIpfWUmJnFaYyhhLGIsZmFsc2UpO2Q9UVljKGIpOyEhYS5iJiZhLmIuRWcoZCk7YS5hPUZaYyhhLChzRGIoMCxiLmMubGVuZ3RoKSxKRChiLmNbMF0sMjcpKSk7R1pjKGEsZCl9fQpmdW5jdGlvbiBFcWQoYSxiKXt2YXIgYyxkLGU7ZD1RVGQoYS56aCgpLGIpO2M9Yi1hLmZpKCk7aWYoYzwwKXtpZighZCl7dGhyb3cgc2NiKG5ldyBUZWIoUENlK2IrUUNlKSl9ZWxzZSBpZihkLm9rKCkpe2U9YS5FaChkKTtlPj0wP2EuZ2koZSk6eHFkKGEsZCl9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYihMQ2UrZC52ZSgpK01DZSkpfX1lbHNle2dxZChhLGMsZCl9fQpmdW5jdGlvbiBjeWQoYSl7dmFyIGIsYztjPW51bGw7Yj1mYWxzZTtpZihSRChhLDIxMCkpe2I9dHJ1ZTtjPUpEKGEsMjEwKS5hfWlmKCFiKXtpZihSRChhLDI2Mykpe2I9dHJ1ZTtjPScnK0pEKGEsMjYzKS5hfX1pZighYil7aWYoUkQoYSw0NzcpKXtiPXRydWU7Yz0nJytKRChhLDQ3NykuYX19aWYoIWIpe3Rocm93IHNjYihuZXcgcmRiKHVEZSkpfXJldHVybiBjfQpmdW5jdGlvbiBCYmUoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtpPUtmZShhLmUuemgoKSxiKTtkPTA7aD1hLmk7ZT1KRChhLmcsMTIyKTtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2lmKGkuWmwoZi5JaygpKSl7aWYoYz09ZCl7cmV0dXJuIGd9KytkO2g9ZysxfX1pZihjPT1kKXtyZXR1cm4gaH1lbHNle3Rocm93IHNjYihuZXcgbWRiKElFZStjK09EZStkKSl9fQpmdW5jdGlvbiBINWIoYSxiKXt2YXIgYyxkLGUsZjtpZihhLmYuYy5sZW5ndGg9PTApe3JldHVybiBudWxsfWVsc2V7Zj1uZXcgZmRkO2ZvcihkPW5ldyBybWIoYS5mKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksNzIpO2U9Yy5vO2YuYj0kd25kLk1hdGgubWF4KGYuYixlLmEpO2YuYSs9ZS5ifWYuYSs9KGEuZi5jLmxlbmd0aC0xKSpiO3JldHVybiBmfX0KZnVuY3Rpb24gWkFjKGEpe3ZhciBiLGMsZCxlO2EuZT0wO2ZvcihlPUd0YihhLmYsMCk7ZS5iIT1lLmQuYzspe2Q9SkQoVXRiKGUpLDkpO2lmKGQucD49YS5kLmIuYy5sZW5ndGgpe2I9bmV3IGIkYihhLmQpO2IucD1kLnAtMTtJbGIoYS5kLmIsYik7Yz1uZXcgYiRiKGEuZCk7Yy5wPWQucDtJbGIoYS5kLmIsYyl9cVliKGQsSkQoTWxiKGEuZC5iLGQucCksMjUpKX19CmZ1bmN0aW9uIHVJYyhhKXt2YXIgYixjLGQsZTtjPW5ldyBNdGI7eGUoYyxhLm8pO2Q9bmV3IHR4Yjt3aGlsZShjLmIhPTApe2I9SkQoYy5iPT0wP251bGw6KHJEYihjLmIhPTApLEt0YihjLGMuYS5hKSksNDk5KTtlPWxJYyhhLGIsdHJ1ZSk7ZSYmSWxiKGQuYSxiKX13aGlsZShkLmEuYy5sZW5ndGghPTApe2I9SkQocnhiKGQpLDQ5OSk7bEljKGEsYixmYWxzZSl9fQpmdW5jdGlvbiBQYmQoYSl7dmFyIGI7dGhpcy5jPW5ldyBNdGI7dGhpcy5mPWEuZTt0aGlzLmU9YS5kO3RoaXMuaT1hLmc7dGhpcy5kPWEuYzt0aGlzLmI9YS5iO3RoaXMuaz1hLmo7dGhpcy5hPWEuYTshYS5pPyh0aGlzLmo9KGI9SkQoZGViKFYxKSwxMCksbmV3IHVyYihiLEpEKFZDYihiLGIubGVuZ3RoKSwxMCksMCkpKToodGhpcy5qPWEuaSk7dGhpcy5nPWEuZn0KZnVuY3Rpb24gemNkKCl7emNkPVpjYjt5Y2Q9bmV3IEFjZChldWUsMCk7cmNkPW5ldyBBY2QoJ0JPT0xFQU4nLDEpO3ZjZD1uZXcgQWNkKCdJTlQnLDIpO3hjZD1uZXcgQWNkKCdTVFJJTkcnLDMpO3NjZD1uZXcgQWNkKCdET1VCTEUnLDQpO3RjZD1uZXcgQWNkKCdFTlVNJyw1KTt1Y2Q9bmV3IEFjZCgnRU5VTVNFVCcsNik7d2NkPW5ldyBBY2QoJ09CSkVDVCcsNyl9CmZ1bmN0aW9uIGVkZChhLGIpe3ZhciBjLGQsZSxmLGc7ZD0kd25kLk1hdGgubWluKGEuYyxiLmMpO2Y9JHduZC5NYXRoLm1pbihhLmQsYi5kKTtlPSR3bmQuTWF0aC5tYXgoYS5jK2EuYixiLmMrYi5iKTtnPSR3bmQuTWF0aC5tYXgoYS5kK2EuYSxiLmQrYi5hKTtpZihlPGQpe2M9ZDtkPWU7ZT1jfWlmKGc8Zil7Yz1mO2Y9ZztnPWN9ZGRkKGEsZCxmLGUtZCxnLWYpfQpmdW5jdGlvbiBIJGQoYSxiKXt2YXIgYyxkO2lmKGEuZil7d2hpbGUoYi5PYigpKXtjPUpEKGIuUGIoKSw3NCk7ZD1jLklrKCk7aWYoUkQoZCwxMDEpJiYoSkQoZCwxOSkuQmImUkNlKSE9MCYmKCFhLmV8fGQubWsoKSE9dDN8fGQuSWooKSE9MCkmJmMua2QoKSE9bnVsbCl7Yi5VYigpO3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZWxzZXtyZXR1cm4gYi5PYigpfX0KZnVuY3Rpb24gSiRkKGEsYil7dmFyIGMsZDtpZihhLmYpe3doaWxlKGIuU2IoKSl7Yz1KRChiLlViKCksNzQpO2Q9Yy5JaygpO2lmKFJEKGQsMTAxKSYmKEpEKGQsMTkpLkJiJlJDZSkhPTAmJighYS5lfHxkLm1rKCkhPXQzfHxkLklqKCkhPTApJiZjLmtkKCkhPW51bGwpe2IuUGIoKTtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfWVsc2V7cmV0dXJuIGIuU2IoKX19CmZ1bmN0aW9uIEdmZSgpe0dmZT1aY2I7RGZlPVdDKE9DKGhKLDEpLGhyZSwyLDYsW1VGZSxWRmUsV0ZlLFhGZSxZRmUsWkZlLEdEZV0pO0NmZT1XQyhPQyhoSiwxKSxocmUsMiw2LFtVRmUsJ2VtcHR5JyxWRmUscUZlLCdlbGVtZW50T25seSddKTtGZmU9V0MoT0MoaEosMSksaHJlLDIsNixbVUZlLCdwcmVzZXJ2ZScsJ3JlcGxhY2UnLCRGZV0pO0VmZT1uZXcgcmFlfQpmdW5jdGlvbiBvWGIoYSxiLGMpe3ZhciBkLGUsZjtpZihiPT1jKXtyZXR1cm59ZD1iO2Rve21kZChhLGQuYyk7ZT1kLmU7aWYoZSl7Zj1kLmQ7bGRkKGEsZi5iLGYuZCk7bWRkKGEsZS5uKTtkPWdZYihlKX19d2hpbGUoZSk7ZD1jO2Rve0JkZChhLGQuYyk7ZT1kLmU7aWYoZSl7Zj1kLmQ7QWRkKGEsZi5iLGYuZCk7QmRkKGEsZS5uKTtkPWdZYihlKX19d2hpbGUoZSl9CmZ1bmN0aW9uIHRmYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2lmKGQuZi5jK2QuaS5jPT0wKXtmb3IoZz1hLmFbYS5jXSxoPTAsaT1nLmxlbmd0aDtoPGk7KytoKXtmPWdbaF07UWliKGQsZixuZXcgQ2ZjKGEsZixjKSl9fWU9SkQoV2QoZnNiKGQuZixiKSksNjYyKTtlLmI9MDtlLmM9ZS5mO2UuYz09MHx8RmZjKEpEKE1sYihlLmEsZS5iKSwyOTIpKTtyZXR1cm4gZX0KZnVuY3Rpb24gc2djKGEpe3ZhciBiO3RoaXMuaj1uZXcgVWxiO3RoaXMuZj1uZXcgUXJiO3RoaXMuYj0oYj1KRChkZWIodjIpLDEwKSxuZXcgdXJiKGIsSkQoVkNiKGIsYi5sZW5ndGgpLDEwKSwwKSk7dGhpcy5kPVNDKGNFLGlzZSwzMCwoUmpkKCksV0MoT0ModjIsMSksQXZlLDY0LDAsW1BqZCx4amQsd2pkLE9qZCxRamRdKSkubGVuZ3RoLDE1LDEpO3RoaXMuZz1hfQpmdW5jdGlvbiBObWMoKXtObWM9WmNiO0ptYz1uZXcgT21jKCdNRURJQU5fTEFZRVInLDApO0xtYz1uZXcgT21jKCdUQUlMX0xBWUVSJywxKTtJbWM9bmV3IE9tYygnSEVBRF9MQVlFUicsMik7S21jPW5ldyBPbWMoJ1NQQUNFX0VGRklDSUVOVF9MQVlFUicsMyk7TW1jPW5ldyBPbWMoJ1dJREVTVF9MQVlFUicsNCk7SG1jPW5ldyBPbWMoJ0NFTlRFUl9MQVlFUicsNSl9CmZ1bmN0aW9uIEdQYyhhLGIsYyl7dmFyIGQsZSxmO2lmKCFhLmJbYi5nXSl7YS5iW2IuZ109dHJ1ZTtkPWM7IWQmJihkPW5ldyBfUWMpO0F0YihkLmIsYik7Zm9yKGY9YS5hW2IuZ10uSmMoKTtmLk9iKCk7KXtlPUpEKGYuUGIoKSw2NSk7ZS5iIT1iJiZHUGMoYSxlLmIsZCk7ZS5jIT1iJiZHUGMoYSxlLmMsZCk7QXRiKGQuYSxlKX1yZXR1cm4gZH1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gdEpiKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOnJldHVybiBSamQoKSx4amQ7Y2FzZSAzOmNhc2UgNDpjYXNlIDU6cmV0dXJuIFJqZCgpLE9qZDtjYXNlIDY6Y2FzZSA3OmNhc2UgODpyZXR1cm4gUmpkKCksUWpkO2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6cmV0dXJuIFJqZCgpLHdqZDtkZWZhdWx0OnJldHVybiBSamQoKSxQamQ7fX0KZnVuY3Rpb24gVkljKGEsYil7dmFyIGM7aWYoYS5jLmxlbmd0aD09MCl7cmV0dXJuIGZhbHNlfWM9Q3hjKChzRGIoMCxhLmMubGVuZ3RoKSxKRChhLmNbMF0sMTgpKS5jLmkpO2dJYygpO2lmKGM9PSh6eGMoKSx3eGMpfHxjPT12eGMpe3JldHVybiB0cnVlfXJldHVybiB4QmIoRkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEsMTYpKSxuZXcgYkpjKSxuZXcgZEpjKGIpKX0KZnVuY3Rpb24geHlkKGEsYil7aWYoUkQoYiwyMDYpKXtyZXR1cm4ga3lkKGEsSkQoYiwyNykpfWVsc2UgaWYoUkQoYiwxOTMpKXtyZXR1cm4gbHlkKGEsSkQoYiwxMjQpKX1lbHNlIGlmKFJEKGIsNDQwKSl7cmV0dXJuIGp5ZChhLEpEKGIsMTY4KSl9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYih4RGUrRWUobmV3IGRuYihXQyhPQyhhSiwxKSxOcWUsMSw1LFtiXSkpKSkpfX0KZnVuY3Rpb24gS3UoYSxiLGMpe3ZhciBkLGU7dGhpcy5mPWE7ZD1KRChOaWIoYS5iLGIpLDI2MCk7ZT0hZD8wOmQuYTtTYihjLGUpO2lmKGM+PShlLzJ8MCkpe3RoaXMuZT0hZD9udWxsOmQuYzt0aGlzLmQ9ZTt3aGlsZShjKys8ZSl7SXUodGhpcyl9fWVsc2V7dGhpcy5jPSFkP251bGw6ZC5iO3doaWxlKGMtLT4wKXtIdSh0aGlzKX19dGhpcy5iPWI7dGhpcy5hPW51bGx9CmZ1bmN0aW9uIGhGYihhLGIpe3ZhciBjLGQ7Yi5hP2lGYihhLGIpOihjPUpEKGp6YihhLmIsYi5iKSw2MCksISFjJiZjPT1hLmFbYi5iLmZdJiYhIWMuYSYmYy5hIT1iLmIuYSYmYy5jLkVjKGIuYiksZD1KRChpemIoYS5iLGIuYiksNjApLCEhZCYmYS5hW2QuZl09PWIuYiYmISFkLmEmJmQuYSE9Yi5iLmEmJmIuYi5jLkVjKGQpLGt6YihhLmIsYi5iKSx1bmRlZmluZWQpfQpmdW5jdGlvbiBISmIoYSxiKXt2YXIgYyxkO2M9SkQoS3FiKGEuYixiKSwxMjYpO2lmKEpEKEpEKFFjKGEucixiKSwyMiksODMpLmRjKCkpe2Mubi5iPTA7Yy5uLmM9MDtyZXR1cm59Yy5uLmI9YS5DLmI7Yy5uLmM9YS5DLmM7YS5BLkdjKCh5a2QoKSx4a2QpKSYmTUpiKGEsYik7ZD1MSmIoYSxiKTtNSWIoYSxiKT09KFFpZCgpLE5pZCkmJihkKz0yKmEudyk7Yy5hLmE9ZH0KZnVuY3Rpb24gUUtiKGEsYil7dmFyIGMsZDtjPUpEKEtxYihhLmIsYiksMTI2KTtpZihKRChKRChRYyhhLnIsYiksMjIpLDgzKS5kYygpKXtjLm4uZD0wO2Mubi5hPTA7cmV0dXJufWMubi5kPWEuQy5kO2Mubi5hPWEuQy5hO2EuQS5HYygoeWtkKCkseGtkKSkmJlVLYihhLGIpO2Q9VEtiKGEsYik7TUliKGEsYik9PShRaWQoKSxOaWQpJiYoZCs9MiphLncpO2MuYS5iPWR9CmZ1bmN0aW9uIGRNYihhLGIpe3ZhciBjLGQsZSxmO2Y9bmV3IFVsYjtmb3IoZD1uZXcgcm1iKGIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw2OCk7SWxiKGYsbmV3IHBNYihjLHRydWUpKTtJbGIoZixuZXcgcE1iKGMsZmFsc2UpKX1lPW5ldyBpTWIoYSk7ZS5hLmEuJGIoKTthRWIoZixhLmIsbmV3IGRuYihXQyhPQyhGTSwxKSxOcWUsNjc4LDAsW2VdKSkpfQpmdW5jdGlvbiBqMGIoYSxiKXt2YXIgYyxkLGU7Yi5TZygnRW5kIGxhYmVsIHByZS1wcm9jZXNzaW5nJywxKTtjPUJlYihNRChXTWIoYSwoQndjKCksWXZjKSkpKTtkPUJlYihNRChXTWIoYSxhd2MpKSk7ZT1WZ2QoSkQoV01iKGEscnVjKSw4NikpO0VCYihEQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5iLDE2KSksbmV3IHIwYiksbmV3IHQwYihjLGQsZSkpO2IuVGcoKX0KZnVuY3Rpb24gT3pjKGEsYil7dmFyIGMsZCxlO2lmKGEuZFtiLnBdKXtyZXR1cm59YS5kW2IucF09dHJ1ZTthLmFbYi5wXT10cnVlO2ZvcihkPW5ldyBlcyhJcihrWWIoYikuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7aWYoZVdiKGMpKXtjb250aW51ZX1lPWMuZC5pO2EuYVtlLnBdP0lsYihhLmIsYyk6T3pjKGEsZSl9YS5hW2IucF09ZmFsc2V9CmZ1bmN0aW9uIGtBYyhhLGIsYyl7dmFyIGQ7ZD0wO3N3aXRjaChKRChXTWIoYiwoQndjKCksVXVjKSksMTcxKS5nKXtjYXNlIDI6ZD0yKi1jK2EuYTsrK2EuYTticmVhaztjYXNlIDE6ZD0tYzticmVhaztjYXNlIDM6ZD1jO2JyZWFrO2Nhc2UgNDpkPTIqYythLmI7KythLmI7fVhNYihiLChJcWMoKSxqcWMpKSYmKGQrPUpEKFdNYihiLGpxYyksMTcpLmEpO3JldHVybiBkfQpmdW5jdGlvbiBNTWMoYSxiLGMpe3ZhciBkLGUsZjtjLnljKGIsYSk7SWxiKGEubixiKTtmPWEucC54ZyhiKTtiLmo9PWEucC55ZygpP19NYyhhLmUsZik6X01jKGEuaixmKTtPTWMoYSk7Zm9yKGU9RGwoeWwoV0MoT0MoVkksMSksTnFlLDIwLDAsW25ldyBkWmIoYiksbmV3IGxaYihiKV0pKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDExKTtjLl9iKGQpfHxNTWMoYSxkLGMpfX0KZnVuY3Rpb24gdVRjKGEsYixjKXt2YXIgZCxlLGY7Yy5TZygnUHJvY2Vzc29yIHNldCBuZWlnaGJvcnMnLDEpO2EuYT1iLmIuYj09MD8xOmIuYi5iO2U9bnVsbDtkPUd0YihiLmIsMCk7d2hpbGUoIWUmJmQuYiE9ZC5kLmMpe2Y9SkQoVXRiKGQpLDM5KTt5ZGIoTEQoV01iKGYsKHRVYygpLHFVYykpKSkmJihlPWYpfSEhZSYmdlRjKGEsbmV3IGdSYyhlKSxjKTtjLlRnKCl9CmZ1bmN0aW9uIGRuZChhKXt2YXIgYixjLGQ7Yz1KRChrc2QoYSwoTGdkKCksQmZkKSksMjIpO2lmKGMuR2MoKHlrZCgpLHVrZCkpKXtkPUpEKGtzZChhLEdmZCksMjIpO2I9bmV3IEZkZChKRChrc2QoYSxFZmQpLDgpKTtpZihkLkdjKChOa2QoKSxHa2QpKSl7Yi5hPD0wJiYoYi5hPTIwKTtiLmI8PTAmJihiLmI9MjApfXJldHVybiBifWVsc2V7cmV0dXJuIG5ldyBDZGR9fQpmdW5jdGlvbiBJVGQoYSl7dmFyIGIsYyxkO2lmKCFhLmIpe2Q9bmV3IFRXZDtmb3IoYz1uZXcgWEhkKExUZChhKSk7Yy5lIT1jLmkuZ2MoKTspe2I9SkQoV0hkKGMpLDE5KTsoYi5CYiZSQ2UpIT0wJiZ0Q2QoZCxiKX1zRGQoZCk7YS5iPW5ldyBnV2QoKEpEKG5EZChTVGQoKEdPZCgpLEZPZCkubyksOCksMTkpLGQuaSksZC5nKTtUVGQoYSkuYiY9LTl9cmV0dXJuIGEuYn0KZnVuY3Rpb24gdWdiKGEpe3ZhciBiLGMsZDtjPWEubGVuZ3RoO2Q9MDt3aGlsZShkPGMmJihBRGIoZCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGQpPD0zMikpeysrZH1iPWM7d2hpbGUoYj5kJiYoQURiKGItMSxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGItMSk8PTMyKSl7LS1ifXJldHVybiBkPjB8fGI8Yz8oekRiKGQsYixhLmxlbmd0aCksYS5zdWJzdHIoZCxiLWQpKTphfQpmdW5jdGlvbiBVamMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2k9SkQoRGUoRWMoYi5rKSxTQyh2MixBdmUsNjQsMiwwLDEpKSwxMjUpO2o9Yi5nO2M9V2pjKGIsaVswXSk7ZT1WamMoYixpWzFdKTtkPU5qYyhhLGosYyxlKTtmPVdqYyhiLGlbMV0pO2g9VmpjKGIsaVswXSk7Zz1OamMoYSxqLGYsaCk7aWYoZDw9Zyl7Yi5hPWM7Yi5jPWV9ZWxzZXtiLmE9ZjtiLmM9aH19CmZ1bmN0aW9uIFROYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGo7aWYoYil7Zm9yKGg9Yi5KYygpO2guT2IoKTspe2c9SkQoaC5QYigpLDkpO2ZvcihqPW5ZYihnLChFeWMoKSxDeWMpLGMpLkpjKCk7ai5PYigpOyl7aT1KRChqLlBiKCksMTEpO2Y9SkQoV2QoZnNiKGUuZixpKSksMTE2KTtpZighZil7Zj1uZXcgWE1jKGEuZCk7WUNiKGQuYyxmKTtNTWMoZixpLGUpfX19fX0KZnVuY3Rpb24gdm5iKGEpe3ZhciBoO3BuYigpO3ZhciBiLGMsZCxlLGYsZztpZihSRChhLDU5KSl7Zm9yKGU9MCxkPWEuZ2MoKS0xO2U8ZDsrK2UsLS1kKXtoPWEuWGIoZSk7YS5mZChlLGEuWGIoZCkpO2EuZmQoZCxoKX19ZWxzZXtiPWEuY2QoKTtmPWEuZGQoYS5nYygpKTt3aGlsZShiLlRiKCk8Zi5WYigpKXtjPWIuUGIoKTtnPWYuVWIoKTtiLldiKGcpO2YuV2IoYyl9fX0KZnVuY3Rpb24gb0VjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2g9MDtmPW5ldyBubGI7JGtiKGYsYik7d2hpbGUoZi5iIT1mLmMpe2c9SkQoamxiKGYpLDIxNyk7aCs9U0ZjKGcuZCxnLmUpO2ZvcihlPW5ldyBybWIoZy5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMzYpO2M9SkQoTWxiKGEuYixkLnApLDIxNyk7Yy5zfHwoaCs9b0VjKGEsYykpfX1yZXR1cm4gaH0KZnVuY3Rpb24gelBjKGEsYixjKXt2YXIgZCxlO3VQYyh0aGlzKTtiPT0oZ1BjKCksZVBjKT9OcmIodGhpcy5yLGEuYyk6TnJiKHRoaXMudyxhLmMpO2M9PWVQYz9OcmIodGhpcy5yLGEuZCk6TnJiKHRoaXMudyxhLmQpO3ZQYyh0aGlzLGEpO2Q9d1BjKGEuYyk7ZT13UGMoYS5kKTt5UGModGhpcyxkLGUsZSk7dGhpcy5vPShLT2MoKSwkd25kLk1hdGguYWJzKGQtZSk8MC4yKX0KZnVuY3Rpb24gVjhkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aD1KRChDcmQoYS5hLDgpLDE5ODEpO2lmKGghPW51bGwpe2ZvcihlPWgsZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7bnVsbC5SbSgpfX1kPWM7aWYoKGEuYS5EYiYxKT09MCl7aT1uZXcgJDhkKGEsYyxiKTtkLmFqKGkpfVJEKGQsNjcxKT9KRChkLDY3MSkuY2ooYS5hKTpkLl9pKCk9PWEuYSYmZC5iaihudWxsKX0KZnVuY3Rpb24gWGllKCl7dmFyIGE7aWYoUmllKXJldHVybiBKRChnMWQoKHJPZCgpLHFPZCksZUdlKSwxOTkwKTtZaWUoKTthPUpEKFJEKE9pYigock9kKCkscU9kKSxlR2UpLDU3Nyk/T2liKHFPZCxlR2UpOm5ldyBXaWUsNTc3KTtSaWU9dHJ1ZTtVaWUoYSk7VmllKGEpO1FpYigoQ09kKCksQk9kKSxhLG5ldyBaaWUpO1Z2ZChhKTtSaWIocU9kLGVHZSxhKTtyZXR1cm4gYX0KZnVuY3Rpb24gRkEoYSxiLGMsZCl7dmFyIGU7ZT13QShhLGMsV0MoT0MoaEosMSksaHJlLDIsNixbbHNlLG1zZSxuc2Usb3NlLHBzZSxxc2UscnNlXSksYik7ZTwwJiYoZT13QShhLGMsV0MoT0MoaEosMSksaHJlLDIsNixbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddKSxiKSk7aWYoZTwwKXtyZXR1cm4gZmFsc2V9ZC5kPWU7cmV0dXJuIHRydWV9CmZ1bmN0aW9uIElBKGEsYixjLGQpe3ZhciBlO2U9d0EoYSxjLFdDKE9DKGhKLDEpLGhyZSwyLDYsW2xzZSxtc2UsbnNlLG9zZSxwc2UscXNlLHJzZV0pLGIpO2U8MCYmKGU9d0EoYSxjLFdDKE9DKGhKLDEpLGhyZSwyLDYsWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXSksYikpO2lmKGU8MCl7cmV0dXJuIGZhbHNlfWQuZD1lO3JldHVybiB0cnVlfQpmdW5jdGlvbiBnc2IoYSxiLGMpe3ZhciBkLGUsZixnO2c9YS5iLkFlKGIpO2U9KGQ9YS5hLmdldChnKSxkPT1udWxsP1NDKGFKLE5xZSwxLDAsNSwxKTpkKTtpZihlLmxlbmd0aD09MCl7YS5hLnNldChnLGUpfWVsc2V7Zj1kc2IoYSxiLGUpO2lmKGYpe3JldHVybiBmLmxkKGMpfX1WQyhlLGUubGVuZ3RoLG5ldyBva2IoYixjKSk7KythLmM7KythLmIuZztyZXR1cm4gbnVsbH0KZnVuY3Rpb24gWlJiKGEpe3ZhciBiLGMsZDtXUmIoYSk7ZD1uZXcgVWxiO2ZvcihjPW5ldyBybWIoYS5hLmEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDgyKTtJbGIoZCxuZXcgalNiKGIsdHJ1ZSkpO0lsYihkLG5ldyBqU2IoYixmYWxzZSkpfWJTYihhLmMpO0RUYihkLGEuYixuZXcgZG5iKFdDKE9DKGNQLDEpLE5xZSwzNzQsMCxbYS5jXSkpKTtZUmIoYSl9CmZ1bmN0aW9uIGRGYihhLGIpe3ZhciBjLGQsZTtlPW5ldyBVbGI7Zm9yKGQ9bmV3IHJtYihhLmMuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksNjApO2lmKGIuTGIoYykpe0lsYihlLG5ldyByRmIoYyx0cnVlKSk7SWxiKGUsbmV3IHJGYihjLGZhbHNlKSl9fWpGYihhLmUpO2FFYihlLGEuZCxuZXcgZG5iKFdDKE9DKEZNLDEpLE5xZSw2NzgsMCxbYS5lXSkpKX0KZnVuY3Rpb24gRjBiKGEpe3ZhciBiLGMsZCxlO2M9bmV3IElyYjtmb3IoZT1uZXcgcm1iKGEuZCk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE4Nyk7Yj1KRChkLm1mKChJcWMoKSxQcGMpKSwxOCk7ISFmc2IoYy5mLGIpfHxRaWIoYyxiLG5ldyBTMGIoYikpO0lsYihKRChXZChmc2IoYy5mLGIpKSw0NTIpLmIsZCl9cmV0dXJuIG5ldyBXbGIobmV3IFpqYihjKSl9CmZ1bmN0aW9uIGk3YihhLGIpe3ZhciBjLGQsZSxmLGc7ZD1uZXcgb2xiKGEuai5jLmxlbmd0aCk7Yz1udWxsO2ZvcihmPW5ldyBybWIoYS5qKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMTEpO2lmKGUuaiE9Yyl7ZC5iPT1kLmN8fGo3YihkLGMsYik7YWxiKGQpO2M9ZS5qfWc9bzBiKGUpOyEhZyYmKF9rYihkLGcpLHRydWUpfWQuYj09ZC5jfHxqN2IoZCxjLGIpfQpmdW5jdGlvbiBZN2IoYSxiKXt2YXIgYyxkLGU7ZD1uZXcgQWpiKGEuYiwwKTt3aGlsZShkLmI8ZC5kLmdjKCkpe2M9KHJEYihkLmI8ZC5kLmdjKCkpLEpEKGQuZC5YYihkLmM9ZC5iKyspLDcyKSk7ZT1KRChXTWIoYywoQndjKCksd3VjKSksMjc2KTtpZihlPT0obmhkKCksbGhkKSl7dGpiKGQpO0lsYihiLmIsYyk7WE1iKGMsKElxYygpLFBwYykpfHxaTWIoYyxQcGMsYSl9fX0KZnVuY3Rpb24gaENjKGEpe3ZhciBiLGMsZCxlLGY7Yj1HcihuZXcgZXMoSXIoa1liKGEpLmEuSmMoKSxuZXcgZXIpKSk7Zm9yKGU9bmV3IGVzKElyKGhZYihhKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDE4KTtjPWQuYy5pO2Y9R3IobmV3IGVzKElyKGtZYihjKS5hLkpjKCksbmV3IGVyKSkpO2I9JHduZC5NYXRoLm1heChiLGYpfXJldHVybiBqZmIoYil9CmZ1bmN0aW9uIHJuZChhLGIsYyl7dmFyIGQsZSxmO2Q9SkQoa3NkKGEsKExnZCgpLFhlZCkpLDIyKTtlPTA7Zj0wO2IuYT5jLmEmJihkLkdjKChIZWQoKSxCZWQpKT8oZT0oYi5hLWMuYSkvMik6ZC5HYyhEZWQpJiYoZT1iLmEtYy5hKSk7Yi5iPmMuYiYmKGQuR2MoKEhlZCgpLEZlZCkpPyhmPShiLmItYy5iKS8yKTpkLkdjKEVlZCkmJihmPWIuYi1jLmIpKTtxbmQoYSxlLGYpfQpmdW5jdGlvbiBjd2QoYSxiLGMsZCxlLGYsZyxoLGksaixrLGwsbSl7UkQoYS5DYiw4OCkmJlFWZChUVGQoSkQoYS5DYiw4OCkpLDQpO3J2ZChhLGMpO2EuZj1nO1lSZChhLGgpOyRSZChhLGkpO1NSZChhLGopO1pSZChhLGspO3ZSZChhLGwpO1ZSZChhLG0pO3VSZChhLHRydWUpO3RSZChhLGUpO2EuV2soZik7clJkKGEsYik7ZCE9bnVsbCYmKGEuaT1udWxsLFVSZChhLGQpKX0KZnVuY3Rpb24gSmIoYSxiLGMpe2lmKGE8MCl7cmV0dXJuIGhjKE1xZSxXQyhPQyhhSiwxKSxOcWUsMSw1LFtjLGpmYihhKV0pKX1lbHNlIGlmKGI8MCl7dGhyb3cgc2NiKG5ldyBUZWIoT3FlK2IpKX1lbHNle3JldHVybiBoYygnJXMgKCVzKSBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gc2l6ZSAoJXMpJyxXQyhPQyhhSiwxKSxOcWUsMSw1LFtjLGpmYihhKSxqZmIoYildKSl9fQpmdW5jdGlvbiBPbWIoYSxiLGMsZCxlLGYpe3ZhciBnLGgsaSxqO2c9ZC1jO2lmKGc8Nyl7TG1iKGIsYyxkLGYpO3JldHVybn1pPWMrZTtoPWQrZTtqPWkrKGgtaT4+MSk7T21iKGIsYSxpLGosLWUsZik7T21iKGIsYSxqLGgsLWUsZik7aWYoZi5MZShhW2otMV0sYVtqXSk8PTApe3doaWxlKGM8ZCl7VkMoYixjKyssYVtpKytdKX1yZXR1cm59TW1iKGEsaSxqLGgsYixjLGQsZil9CmZ1bmN0aW9uIGprYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2k9Yi5kO2U9Yi5iLmo7Zm9yKGg9bmV3IHJtYihpKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTA1KTtmPVNDKHBjYixWdGUsMzAsZS5jLmxlbmd0aCwxNiwxKTtRaWIoYS5iLGcsZik7Yz1nLmEuZC5wLTE7ZD1nLmMuZC5wO3doaWxlKGMhPWQpe2M9KGMrMSklZS5jLmxlbmd0aDtmW2NdPXRydWV9fX0KZnVuY3Rpb24gdUFjKGEsYil7cUFjKCk7aWYoWE1iKGEsKElxYygpLGpxYykpJiZYTWIoYixqcWMpKXtyZXR1cm4gJGViKEpEKFdNYihhLGpxYyksMTcpLmEsSkQoV01iKGIsanFjKSwxNykuYSl9dGhyb3cgc2NiKG5ldyBaOGMoJ1RoZSBCRiBtb2RlbCBvcmRlciBsYXllciBhc3NpZ25lciByZXF1aXJlcyBhbGwgcmVhbCBub2RlcyB0byBoYXZlIGEgbW9kZWwgb3JkZXIuJykpfQpmdW5jdGlvbiBiQmMoYSxiKXtWQWMoKTtpZihYTWIoYSwoSXFjKCksanFjKSkmJlhNYihiLGpxYykpe3JldHVybiAkZWIoSkQoV01iKGEsanFjKSwxNykuYSxKRChXTWIoYixqcWMpLDE3KS5hKX10aHJvdyBzY2IobmV3IFo4YygnVGhlIERGIG1vZGVsIG9yZGVyIGxheWVyIGFzc2lnbmVyIHJlcXVpcmVzIGFsbCByZWFsIG5vZGVzIHRvIGhhdmUgYSBtb2RlbCBvcmRlci4nKSl9CmZ1bmN0aW9uIFdNYyhhLGIpe2Eucj1uZXcgWE1jKGEucCk7Vk1jKGEucixhKTt4ZShhLnIuaixhLmopO0x0YihhLmopO0F0YihhLmosYik7QXRiKGEuci5lLGIpO09NYyhhKTtPTWMoYS5yKTt3aGlsZShhLmYuYy5sZW5ndGghPTApe2JOYyhKRChNbGIoYS5mLDApLDEzMykpfXdoaWxlKGEuay5jLmxlbmd0aCE9MCl7Yk5jKEpEKE1sYihhLmssMCksMTMzKSl9cmV0dXJuIGEucn0KZnVuY3Rpb24gQXFkKGEsYixjKXt2YXIgZCxlLGY7ZT1RVGQoYS56aCgpLGIpO2Q9Yi1hLmZpKCk7aWYoZDwwKXtpZighZSl7dGhyb3cgc2NiKG5ldyBUZWIoUENlK2IrUUNlKSl9ZWxzZSBpZihlLm9rKCkpe2Y9YS5FaChlKTtmPj0wP2EuWmgoZixjKTp3cWQoYSxlLGMpfWVsc2V7dGhyb3cgc2NiKG5ldyBUZWIoTENlK2UudmUoKStNQ2UpKX19ZWxzZXtmcWQoYSxkLGUsYyl9fQpmdW5jdGlvbiBJJGQoYSl7dmFyIGIsYztpZihhLmYpe3doaWxlKGEubj4wKXtiPUpEKGEuay5YYihhLm4tMSksNzQpO2M9Yi5JaygpO2lmKFJEKGMsMTAxKSYmKEpEKGMsMTkpLkJiJlJDZSkhPTAmJighYS5lfHxjLm1rKCkhPXQzfHxjLklqKCkhPTApJiZiLmtkKCkhPW51bGwpe3JldHVybiB0cnVlfWVsc2V7LS1hLm59fXJldHVybiBmYWxzZX1lbHNle3JldHVybiBhLm4+MH19CmZ1bmN0aW9uIGlmZShiKXt2YXIgYyxkLGUsZjtkPUpEKGIsNTIpLlhoKCk7aWYoZCl7dHJ5e2U9bnVsbDtjPWcxZCgock9kKCkscU9kKSxFTmQoRk5kKGQpKSk7aWYoYyl7Zj1jLlloKCk7ISFmJiYoZT1mLkNsKHRnYihkLmUpKSl9aWYoISFlJiZlIT1iKXtyZXR1cm4gaWZlKGUpfX1jYXRjaChhKXthPXJjYihhKTtpZighUkQoYSw2MykpdGhyb3cgc2NiKGEpfX1yZXR1cm4gYn0KZnVuY3Rpb24gU1pjKGEsYixjKXt2YXIgZCxlLGY7Yy5TZygnUmVtb3ZlIG92ZXJsYXBzJywxKTtjLmFoKGIsX3plKTtkPUpEKGtzZChiLCh4WWMoKSx3WWMpKSwyNyk7YS5mPWQ7YS5hPXhfYyhKRChrc2QoYiwoYl9jKCksJCRjKSksMjk5KSk7ZT1NRChrc2QoYiwoTGdkKCksd2dkKSkpO3ZaYyhhLCh0RGIoZSksZSkpO2Y9VFljKGQpO1JaYyhhLGIsZixjKTtjLmFoKGIsYkFlKX0KZnVuY3Rpb24gUzhjKGEpe3ZhciBiLGMsZDtpZih5ZGIoTEQoa3NkKGEsKExnZCgpLGxmZCkpKSkpe2Q9bmV3IFVsYjtmb3IoYz1uZXcgZXMoSXIoJEJkKGEpLmEuSmMoKSxuZXcgZXIpKTtjcyhjKTspe2I9SkQoZHMoYyksODUpO1N0ZChiKSYmeWRiKExEKGtzZChiLG1mZCkpKSYmKFlDYihkLmMsYiksdHJ1ZSl9cmV0dXJuIGR9ZWxzZXtyZXR1cm4gcG5iKCkscG5iKCksbW5ifX0KZnVuY3Rpb24gQ0MoYSl7aWYoIWEpe3JldHVybiBXQigpLFZCfXZhciBiPWEudmFsdWVPZj9hLnZhbHVlT2YoKTphO2lmKGIhPT1hKXt2YXIgYz15Q1t0eXBlb2YgYl07cmV0dXJuIGM/YyhiKTpGQyh0eXBlb2YgYil9ZWxzZSBpZihhIGluc3RhbmNlb2YgQXJyYXl8fGEgaW5zdGFuY2VvZiAkd25kLkFycmF5KXtyZXR1cm4gbmV3IEZCKGEpfWVsc2V7cmV0dXJuIG5ldyBuQyhhKX19CmZ1bmN0aW9uIFRKYihhLGIsYyl7dmFyIGQsZSxmO2Y9YS5vO2Q9SkQoS3FiKGEucCxjKSwyNTEpO2U9ZC5pO2UuYj1pSWIoZCk7ZS5hPWhJYihkKTtlLmI9JHduZC5NYXRoLm1heChlLmIsZi5hKTtlLmI+Zi5hJiYhYiYmKGUuYj1mLmEpO2UuYz0tKGUuYi1mLmEpLzI7c3dpdGNoKGMuZyl7Y2FzZSAxOmUuZD0tZS5hO2JyZWFrO2Nhc2UgMzplLmQ9Zi5iO31qSWIoZCk7a0liKGQpfQpmdW5jdGlvbiBVSmIoYSxiLGMpe3ZhciBkLGUsZjtmPWEubztkPUpEKEtxYihhLnAsYyksMjUxKTtlPWQuaTtlLmI9aUliKGQpO2UuYT1oSWIoZCk7ZS5hPSR3bmQuTWF0aC5tYXgoZS5hLGYuYik7ZS5hPmYuYiYmIWImJihlLmE9Zi5iKTtlLmQ9LShlLmEtZi5iKS8yO3N3aXRjaChjLmcpe2Nhc2UgNDplLmM9LWUuYjticmVhaztjYXNlIDI6ZS5jPWYuYTt9akliKGQpO2tJYihkKX0KZnVuY3Rpb24gWWJjKGEsYil7dmFyIGMsZCxlO2lmKFJEKGIuZyw5KSYmSkQoYi5nLDkpLms9PShEWWIoKSx3WWIpKXtyZXR1cm4gS3NlfWU9bmRjKGIpO2lmKGUpe3JldHVybiAkd25kLk1hdGgubWF4KDAsYS5iLzItMC41KX1jPW1kYyhiKTtpZihjKXtkPUJlYihNRChremMoYywoQndjKCksZXdjKSkpKTtyZXR1cm4gJHduZC5NYXRoLm1heCgwLGQvMi0wLjUpfXJldHVybiBLc2V9CmZ1bmN0aW9uICRiYyhhLGIpe3ZhciBjLGQsZTtpZihSRChiLmcsOSkmJkpEKGIuZyw5KS5rPT0oRFliKCksd1liKSl7cmV0dXJuIEtzZX1lPW5kYyhiKTtpZihlKXtyZXR1cm4gJHduZC5NYXRoLm1heCgwLGEuYi8yLTAuNSl9Yz1tZGMoYik7aWYoYyl7ZD1CZWIoTUQoa3pjKGMsKEJ3YygpLGV3YykpKSk7cmV0dXJuICR3bmQuTWF0aC5tYXgoMCxkLzItMC41KX1yZXR1cm4gS3NlfQpmdW5jdGlvbiBDZGMoYSxiKXt2YXIgYyxkLGUsZixnO2lmKGIuZGMoKSl7cmV0dXJufWU9SkQoYi5YYigwKSwxMzIpO2lmKGIuZ2MoKT09MSl7QmRjKGEsZSxlLDEsMCxiKTtyZXR1cm59Yz0xO3doaWxlKGM8Yi5nYygpKXtpZihlLmp8fCFlLm8pe2Y9SGRjKGIsYyk7aWYoZil7ZD1KRChmLmEsMTcpLmE7Zz1KRChmLmIsMTMyKTtCZGMoYSxlLGcsYyxkLGIpO2M9ZCsxO2U9Z319fX0KZnVuY3Rpb24gcGljKGEpe3ZhciBiLGMsZCxlLGYsZztnPW5ldyBXbGIoYS5kKTtTbGIoZyxuZXcgVGljKTtiPShEaWMoKSxXQyhPQyhUVSwxKSxFcmUsMjcyLDAsW3dpYyx6aWMsdmljLENpYyx5aWMseGljLEJpYyxBaWNdKSk7Yz0wO2ZvcihmPW5ldyBybWIoZyk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDEwNSk7ZD1iW2MlYi5sZW5ndGhdO3JpYyhlLGQpOysrY319CmZ1bmN0aW9uIHp6ZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2s9bnVsbDtsPWE7Zz1aeGQobCwneCcpO2M9bmV3IHhBZChiKTtVeWQoYy5hLGcpO2g9WnhkKGwsJ3knKTtkPW5ldyB6QWQoYik7VnlkKGQuYSxoKTtpPVp4ZChsLGdEZSk7ZT1uZXcgQkFkKGIpO1d5ZChlLmEsaSk7aj1aeGQobCxmRGUpO2Y9bmV3IERBZChiKTtrPShYeWQoZi5hLGopLGopO3JldHVybiBrfQpmdW5jdGlvbiBRVmQoYSxiKXtNVmQoYSxiKTsoYS5iJjEpIT0wJiYoYS5hLmE9bnVsbCk7KGEuYiYyKSE9MCYmKGEuYS5mPW51bGwpO2lmKChhLmImNCkhPTApe2EuYS5nPW51bGw7YS5hLmk9bnVsbH1pZigoYS5iJjE2KSE9MCl7YS5hLmQ9bnVsbDthLmEuZT1udWxsfShhLmImOCkhPTAmJihhLmEuYj1udWxsKTtpZigoYS5iJjMyKSE9MCl7YS5hLmo9bnVsbDthLmEuYz1udWxsfX0KZnVuY3Rpb24gZTlkKGIsYyl7dmFyIGQsZSxmO2Y9MDtpZihjLmxlbmd0aD4wKXt0cnl7Zj1GZGIoYyxMcmUsSHFlKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDEzMCkpe2U9YTt0aHJvdyBzY2IobmV3IGtPZChlKSl9ZWxzZSB0aHJvdyBzY2IoYSl9fWQ9KCFiLmEmJihiLmE9bmV3IHM5ZChiKSksYi5hKTtyZXR1cm4gZjxkLmkmJmY+PTA/SkQobkRkKGQsZiksNTcpOm51bGx9CmZ1bmN0aW9uIEliKGEsYil7aWYoYTwwKXtyZXR1cm4gaGMoTXFlLFdDKE9DKGFKLDEpLE5xZSwxLDUsWydpbmRleCcsamZiKGEpXSkpfWVsc2UgaWYoYjwwKXt0aHJvdyBzY2IobmV3IFRlYihPcWUrYikpfWVsc2V7cmV0dXJuIGhjKCclcyAoJXMpIG11c3QgYmUgbGVzcyB0aGFuIHNpemUgKCVzKScsV0MoT0MoYUosMSksTnFlLDEsNSxbJ2luZGV4JyxqZmIoYSksamZiKGIpXSkpfX0KZnVuY3Rpb24gVm1iKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbCl7cmV0dXJuIFJxZX1mPW5ldyB4eGIoTHFlLCdbJywnXScpO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdOyFmLmE/KGYuYT1uZXcgV2diKGYuZCkpOlFnYihmLmEsZi5iKTtOZ2IoZi5hLCcnK2IpfXJldHVybiAhZi5hP2YuYzpmLmUubGVuZ3RoPT0wP2YuYS5hOmYuYS5hKygnJytmLmUpfQpmdW5jdGlvbiBXbWIoYSl7dmFyIGIsYyxkLGUsZjtpZihhPT1udWxsKXtyZXR1cm4gUnFlfWY9bmV3IHh4YihMcWUsJ1snLCddJyk7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07IWYuYT8oZi5hPW5ldyBXZ2IoZi5kKSk6UWdiKGYuYSxmLmIpO05nYihmLmEsJycrYil9cmV0dXJuICFmLmE/Zi5jOmYuZS5sZW5ndGg9PTA/Zi5hLmE6Zi5hLmErKCcnK2YuZSl9CmZ1bmN0aW9uIFhtYihhKXt2YXIgYixjLGQsZSxmO2lmKGE9PW51bGwpe3JldHVybiBScWV9Zj1uZXcgeHhiKExxZSwnWycsJ10nKTtmb3IoYz1hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTshZi5hPyhmLmE9bmV3IFdnYihmLmQpKTpRZ2IoZi5hLGYuYik7TmdiKGYuYSwnJytiKX1yZXR1cm4gIWYuYT9mLmM6Zi5lLmxlbmd0aD09MD9mLmEuYTpmLmEuYSsoJycrZi5lKX0KZnVuY3Rpb24gJG1iKGEpe3ZhciBiLGMsZCxlLGY7aWYoYT09bnVsbCl7cmV0dXJuIFJxZX1mPW5ldyB4eGIoTHFlLCdbJywnXScpO2ZvcihjPWEsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdOyFmLmE/KGYuYT1uZXcgV2diKGYuZCkpOlFnYihmLmEsZi5iKTtOZ2IoZi5hLCcnK2IpfXJldHVybiAhZi5hP2YuYzpmLmUubGVuZ3RoPT0wP2YuYS5hOmYuYS5hKygnJytmLmUpfQpmdW5jdGlvbiAkdWIoYSxiKXt2YXIgYyxkLGUsZixnLGg7Yz1hLmIuYy5sZW5ndGg7ZT1NbGIoYS5iLGIpO3doaWxlKGIqMisxPGMpe2Q9KGY9MipiKzEsZz1mKzEsaD1mLGc8YyYmYS5hLkxlKE1sYihhLmIsZyksTWxiKGEuYixmKSk8MCYmKGg9ZyksaCk7aWYoYS5hLkxlKGUsTWxiKGEuYixkKSk8MCl7YnJlYWt9UmxiKGEuYixiLE1sYihhLmIsZCkpO2I9ZH1SbGIoYS5iLGIsZSl9CmZ1bmN0aW9uIHpHYihhLGIsYyl7dmFyIGQsZTtkPWMuZDtlPWMuZTtpZihhLmdbZC5kXTw9YS5pW2IuZF0mJmEuaVtiLmRdPD1hLmlbZC5kXSYmYS5nW2UuZF08PWEuaVtiLmRdJiZhLmlbYi5kXTw9YS5pW2UuZF0pe2lmKGEuaVtkLmRdPGEuaVtlLmRdKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9aWYoYS5pW2QuZF08YS5pW2UuZF0pe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX0KZnVuY3Rpb24gYVFiKGEsYil7dmFyIGM7Yz1KRChXTWIoYiwoQndjKCksb3VjKSksMzIzKTtpZihjIT1hKXt0aHJvdyBzY2IobmV3IFo4YygnVGhlIGhpZXJhcmNoeSBhd2FyZSBwcm9jZXNzb3IgJytjKycgaW4gY2hpbGQgbm9kZSAnK2IrJyBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIHJvb3Qgbm9kZSBzcGVjaWZpZXMgdGhlIHNhbWUgaGllcmFyY2hpY2FsIHByb2Nlc3Nvci4nKSl9fQpmdW5jdGlvbiBkYWUoYSxiKXt2YXIgYyxkLGUsZixnO2Q9KCFiLnMmJihiLnM9bmV3IFgwZChxNixiLDIxLDE3KSksYi5zKTtmPW51bGw7Zm9yKGU9MCxnPWQuaTtlPGc7KytlKXtjPUpEKG5EZChkLGUpLDE3OCk7c3dpdGNoKFRhZShqYWUoYSxjKSkpe2Nhc2UgMjpjYXNlIDM6eyFmJiYoZj1uZXcgVWxiKTtZQ2IoZi5jLGMpfX19cmV0dXJuICFmPyhwbmIoKSxwbmIoKSxtbmIpOmZ9CmZ1bmN0aW9uIFpMYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2k9S3NlO2ZvcihmPW5ldyBybWIodk1iKGEuYikpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwxNzYpO2ZvcihoPW5ldyBybWIodk1iKGIuYikpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxNzYpO2Q9T2NkKGUuYSxlLmIsZy5hLGcuYixjKTtpPSR3bmQuTWF0aC5taW4oaSxkKX19cmV0dXJuIGl9CmZ1bmN0aW9uIGFaYihhLGIpe2lmKCFiKXt0aHJvdyBzY2IobmV3IEVmYil9YS5qPWI7aWYoIWEuZCl7c3dpdGNoKGEuai5nKXtjYXNlIDE6YS5hLmE9YS5vLmEvMjthLmEuYj0wO2JyZWFrO2Nhc2UgMjphLmEuYT1hLm8uYTthLmEuYj1hLm8uYi8yO2JyZWFrO2Nhc2UgMzphLmEuYT1hLm8uYS8yO2EuYS5iPWEuby5iO2JyZWFrO2Nhc2UgNDphLmEuYT0wO2EuYS5iPWEuby5iLzI7fX19CmZ1bmN0aW9uIEcwYihhKXt2YXIgYixjLGQsZSxmLGcsaDtkPTA7Zm9yKGM9bmV3IHJtYihhLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwyNSk7Zm9yKGY9bmV3IHJtYihiLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSw5KTtlLnA9ZCsrO2ZvcihoPW5ldyBybWIoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTEpO2cucD1kKyt9fX19CmZ1bmN0aW9uICRkYyhhLGIpe0FkYygpO3ZhciBjLGQsZSxmLGcsaDtjPW51bGw7Zm9yKGc9Yi5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDEzMik7aWYoZi5vKXtjb250aW51ZX1kPWNkZChmLmEpO2U9JGNkKGYuYSk7aD1uZXcga2ZjKGQsZSxudWxsLEpEKGYuZC5hLmVjKCkuSmMoKS5QYigpLDE4KSk7SWxiKGguYyxmLmEpO1lDYihhLmMsaCk7ISFjJiZJbGIoYy5kLGgpO2M9aH19CmZ1bmN0aW9uIEFmYyhhKXt2YXIgYixjLGQsZSxmLGc7Zz1kR2MoYS5kLGEuZSk7Zm9yKGY9Zy5KYygpO2YuT2IoKTspe2U9SkQoZi5QYigpLDExKTtkPWEuZT09KFJqZCgpLFFqZCk/ZS5lOmUuZztmb3IoYz1uZXcgcm1iKGQpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwxOCk7aWYoIWVXYihiKSYmYi5jLmkuYyE9Yi5kLmkuYyl7d2ZjKGEsYik7KythLmY7KythLmN9fX19CmZ1bmN0aW9uIEdtYyhhLGIpe3ZhciBjLGQ7aWYoYi5kYygpKXtyZXR1cm4gcG5iKCkscG5iKCksbW5ifWQ9bmV3IFVsYjtJbGIoZCxqZmIoTHJlKSk7Zm9yKGM9MTtjPGEuZjsrK2Mpe2EuYT09bnVsbCYmZW1jKGEpO2EuYVtjXSYmSWxiKGQsamZiKGMpKX1pZihkLmMubGVuZ3RoPT0xKXtyZXR1cm4gcG5iKCkscG5iKCksbW5ifUlsYihkLGpmYihIcWUpKTtyZXR1cm4gRm1jKGIsZCl9CmZ1bmN0aW9uIG5JYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2c9Yi5jLmkuayE9KERZYigpLEFZYik7aT1nP2IuZDpiLmM7Yz1jV2IoYixpKS5pO2U9SkQoTmliKGEuayxpKSwxMjMpO2Q9YS5pW2MucF0uYTtpZihpWWIoaS5pKTwoIWMuYz8tMTpObGIoYy5jLmEsYywwKSkpe2Y9ZTtoPWR9ZWxzZXtmPWQ7aD1lfURGYihHRmIoRkZiKEhGYihFRmIobmV3IElGYiwwKSw0KSxmKSxoKSl9CmZ1bmN0aW9uIEN5ZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKGMpe2U9Yy5hLmxlbmd0aDtkPW5ldyBScGUoZSk7Zm9yKGg9KGQuYi1kLmEpKmQuYzwwPyhRcGUoKSxQcGUpOm5ldyBscWUoZCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMTcpO2k9bHpkKGEsWHhkKEJCKGMsZy5hKSkpO2lmKGkpe2Y9KCFiLmImJihiLmI9bmV3IHJlZSh2MyxiLDQsNykpLGIuYik7dENkKGYsaSl9fX19CmZ1bmN0aW9uIER5ZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKGMpe2U9Yy5hLmxlbmd0aDtkPW5ldyBScGUoZSk7Zm9yKGg9KGQuYi1kLmEpKmQuYzwwPyhRcGUoKSxQcGUpOm5ldyBscWUoZCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMTcpO2k9bHpkKGEsWHhkKEJCKGMsZy5hKSkpO2lmKGkpe2Y9KCFiLmMmJihiLmM9bmV3IHJlZSh2MyxiLDUsOCkpLGIuYyk7dENkKGYsaSl9fX19CmZ1bmN0aW9uIHhvKGEsYixjKXt2YXIgZCxlO2Q9Yi5hJmEuZjtiLmI9YS5iW2RdO2EuYltkXT1iO2U9Yi5mJmEuZjtiLmQ9YS5jW2VdO2EuY1tlXT1iO2lmKCFjKXtiLmU9YS5lO2IuYz1udWxsOyFhLmU/KGEuYT1iKTooYS5lLmM9Yik7YS5lPWJ9ZWxzZXtiLmU9Yy5lOyFiLmU/KGEuYT1iKTooYi5lLmM9Yik7Yi5jPWMuYzshYi5jPyhhLmU9Yik6KGIuYy5lPWIpfSsrYS5pOysrYS5nfQpmdW5jdGlvbiBFcihhKXt2YXIgYixjLGQ7Yj1hLlBiKCk7aWYoIWEuT2IoKSl7cmV0dXJuIGJ9ZD1QZ2IoUWdiKG5ldyBVZ2IsJ2V4cGVjdGVkIG9uZSBlbGVtZW50IGJ1dCB3YXM6IDwnKSxiKTtmb3IoYz0wO2M8NCYmYS5PYigpO2MrKyl7UGdiKChkLmErPUxxZSxkKSxhLlBiKCkpfWEuT2IoKSYmKGQuYSs9JywgLi4uJyxkKTtkLmErPSc+Jzt0aHJvdyBzY2IobmV3IFRlYihkLmEpKX0KZnVuY3Rpb24gV0EoYSl7dmFyIGIsYztjPS1hLmE7Yj1XQyhPQyhfRCwxKSxVcmUsMzAsMTUsWzQzLDQ4LDQ4LDQ4LDQ4XSk7aWYoYzwwKXtiWzBdPTQ1O2M9LWN9YlsxXT1iWzFdKygoYy82MHwwKS8xMHwwKSZXcmU7YlsyXT1iWzJdKyhjLzYwfDApJTEwJldyZTtiWzNdPWJbM10rKGMlNjAvMTB8MCkmV3JlO2JbNF09Yls0XStjJTEwJldyZTtyZXR1cm4gemdiKGIsMCxiLmxlbmd0aCl9CmZ1bmN0aW9uIGRZYihhKXt2YXIgYixjLGQsZTthLmc9bmV3IE9xYihKRChRYih2MiksMjk1KSk7ZD0wO2M9KFJqZCgpLHhqZCk7Yj0wO2Zvcig7YjxhLmouYy5sZW5ndGg7YisrKXtlPUpEKE1sYihhLmosYiksMTEpO2lmKGUuaiE9Yyl7ZCE9YiYmTHFiKGEuZyxjLG5ldyB4b2QoamZiKGQpLGpmYihiKSkpO2M9ZS5qO2Q9Yn19THFiKGEuZyxjLG5ldyB4b2QoamZiKGQpLGpmYihiKSkpfQpmdW5jdGlvbiB4cWQoYSxiKXt2YXIgYyxkLGU7ZT1aOWQoKEdmZSgpLEVmZSksYS56aCgpLGIpO2lmKGUpe0lmZSgpO0pEKGUsNjkpLnVrKCl8fChlPVVhZShqYWUoRWZlLGUpKSk7ZD0oYz1hLkVoKGUpLEpEKGM+PTA/YS5IaChjLHRydWUsdHJ1ZSk6dXFkKGEsZSx0cnVlKSwxNTkpKTtKRChkLDIxOCkuV2woYil9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYihMQ2UrYi52ZSgpK01DZSkpfX0KZnVuY3Rpb24gdGhiKGEpe3ZhciBiLGM7aWYoYT4tMTQwNzM3NDg4MzU1MzI4JiZhPDE0MDczNzQ4ODM1NTMyOCl7aWYoYT09MCl7cmV0dXJuIDB9Yj1hPDA7YiYmKGE9LWEpO2M9WUQoJHduZC5NYXRoLmZsb29yKCR3bmQuTWF0aC5sb2coYSkvMC42OTMxNDcxODA1NTk5NDUzKSk7KCFifHxhIT0kd25kLk1hdGgucG93KDIsYykpJiYrK2M7cmV0dXJuIGN9cmV0dXJuIHVoYih6Y2IoYSkpfQpmdW5jdGlvbiByTmMoYSl7dmFyIGIsYyxkLGUsZixnLGg7Zj1uZXcgd3RiO2ZvcihjPW5ldyBybWIoYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDEzMyk7Zz1iLmE7aD1iLmI7aWYoZi5hLl9iKGcpfHxmLmEuX2IoaCkpe2NvbnRpbnVlfWU9ZztkPWg7aWYoZy5lLmIrZy5qLmI+MiYmaC5lLmIraC5qLmI8PTIpe2U9aDtkPWd9Zi5hLnljKGUsZik7ZS5xPWR9cmV0dXJuIGZ9CmZ1bmN0aW9uIEVfYyhhLGIsYyl7Yy5TZygnRWFkZXMgcmFkaWFsJywxKTtjLmFoKGIsYkFlKTthLmQ9SkQoa3NkKGIsKHhZYygpLHdZYykpLDI3KTthLmM9QmViKE1EKGtzZChiLChiX2MoKSxWJGMpKSkpO2EuZT14X2MoSkQoa3NkKGIsJCRjKSwyOTkpKTthLmE9YSRjKEpEKGtzZChiLGFfYyksNDIzKSk7YS5iPW5fYyhKRChrc2QoYixSJGMpLDM1MSkpO0ZfYyhhKTtjLmFoKGIsYkFlKX0KZnVuY3Rpb24gSTJjKGEsYil7Yi5TZygnVGFyZ2V0IFdpZHRoIFNldHRlcicsMSk7aWYobHNkKGEsKGsyYygpLGoyYykpKXttc2QoYSwoaDFjKCksZzFjKSxNRChrc2QoYSxqMmMpKSl9ZWxzZXt0aHJvdyBzY2IobmV3IFk4YygnQSB0YXJnZXQgd2lkdGggaGFzIHRvIGJlIHNldCBpZiB0aGUgVGFyZ2V0V2lkdGhXaWR0aEFwcHJveGltYXRvciBzaG91bGQgYmUgdXNlZC4nKSl9Yi5UZygpfQpmdW5jdGlvbiBsMmIoYSxiKXt2YXIgYyxkLGU7ZD1uZXcgdFliKGEpO1VNYihkLGIpO1pNYihkLChJcWMoKSxTcGMpLGIpO1pNYihkLChCd2MoKSxFdmMpLChhamQoKSxYaWQpKTtaTWIoZCxSdGMsKGNlZCgpLCRkZCkpO3JZYihkLChEWWIoKSx3WWIpKTtjPW5ldyBiWmI7X1liKGMsZCk7YVpiKGMsKFJqZCgpLFFqZCkpO2U9bmV3IGJaYjtfWWIoZSxkKTthWmIoZSx3amQpO3JldHVybiBkfQpmdW5jdGlvbiBkbmMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBuZXcgSUVjKChVRWMoKSxSRWMpKTtjYXNlIDE6cmV0dXJuIG5ldyBkRWM7Y2FzZSAyOnJldHVybiBuZXcgSUZjO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJ05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGNyb3NzaW5nIG1pbmltaXplciAnKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fQpmdW5jdGlvbiBXQmMoYSxiKXt2YXIgYyxkLGUsZixnO2EuY1tiLnBdPXRydWU7SWxiKGEuYSxiKTtmb3IoZz1uZXcgcm1iKGIuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDExKTtmb3IoZD1uZXcgeFpiKGYuYik7b21iKGQuYSl8fG9tYihkLmIpOyl7Yz1KRChvbWIoZC5hKT9wbWIoZC5hKTpwbWIoZC5iKSwxOCk7ZT1YQmMoZixjKS5pO2EuY1tlLnBdfHxXQmMoYSxlKX19fQpmdW5jdGlvbiBNWWMoYSl7dmFyIGIsYyxkLGUsZixnLGg7Zz0wO2ZvcihjPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7Yy5lIT1jLmkuZ2MoKTspe2I9SkQoQUhkKGMpLDI3KTtoPWIuZztlPWIuZjtkPSR3bmQuTWF0aC5zcXJ0KGgqaCtlKmUpO2c9JHduZC5NYXRoLm1heChkLGcpO2Y9TVljKGIpO2c9JHduZC5NYXRoLm1heChmLGcpfXJldHVybiBnfQpmdW5jdGlvbiBvamQoKXtvamQ9WmNiO21qZD1uZXcgcGpkKCdPVVRTSURFJywwKTtramQ9bmV3IHBqZCgnSU5TSURFJywxKTtsamQ9bmV3IHBqZCgnTkVYVF9UT19QT1JUX0lGX1BPU1NJQkxFJywyKTtqamQ9bmV3IHBqZCgnQUxXQVlTX1NBTUVfU0lERScsMyk7aWpkPW5ldyBwamQoJ0FMV0FZU19PVEhFUl9TQU1FX1NJREUnLDQpO25qZD1uZXcgcGpkKCdTUEFDRV9FRkZJQ0lFTlQnLDUpfQpmdW5jdGlvbiB2emQoYSxiLGMpe3ZhciBkLGUsZixoLGksajtkPWh6ZChhLChlPShIcGQoKSxmPW5ldyBjeGQsZiksISFjJiZheGQoZSxjKSxlKSxiKTtQc2QoZCxieWQoYix2RGUpKTt5emQoYixkKTt0emQoYixkKTt6emQoYixkKTtnPW51bGw7aD1iO2k9JHhkKGgsJ3BvcnRzJyk7aj1uZXcgdkFkKGEsZCk7VHlkKGouYSxqLmIsaSk7dXpkKGEsYixkKTtwemQoYSxiLGQpO3JldHVybiBkfQpmdW5jdGlvbiBWQShhKXt2YXIgYixjO2M9LWEuYTtiPVdDKE9DKF9ELDEpLFVyZSwzMCwxNSxbNDMsNDgsNDgsNTgsNDgsNDhdKTtpZihjPDApe2JbMF09NDU7Yz0tY31iWzFdPWJbMV0rKChjLzYwfDApLzEwfDApJldyZTtiWzJdPWJbMl0rKGMvNjB8MCklMTAmV3JlO2JbNF09Yls0XSsoYyU2MC8xMHwwKSZXcmU7Yls1XT1iWzVdK2MlMTAmV3JlO3JldHVybiB6Z2IoYiwwLGIubGVuZ3RoKX0KZnVuY3Rpb24gWUEoYSl7dmFyIGI7Yj1XQyhPQyhfRCwxKSxVcmUsMzAsMTUsWzcxLDc3LDg0LDQ1LDQ4LDQ4LDU4LDQ4LDQ4XSk7aWYoYTw9MCl7YlszXT00MzthPS1hfWJbNF09Yls0XSsoKGEvNjB8MCkvMTB8MCkmV3JlO2JbNV09Yls1XSsoYS82MHwwKSUxMCZXcmU7Yls3XT1iWzddKyhhJTYwLzEwfDApJldyZTtiWzhdPWJbOF0rYSUxMCZXcmU7cmV0dXJuIHpnYihiLDAsYi5sZW5ndGgpfQpmdW5jdGlvbiBZbWIoYSl7dmFyIGIsYyxkLGUsZjtpZihhPT1udWxsKXtyZXR1cm4gUnFlfWY9bmV3IHh4YihMcWUsJ1snLCddJyk7Zm9yKGM9YSxkPTAsZT1jLmxlbmd0aDtkPGU7KytkKXtiPWNbZF07IWYuYT8oZi5hPW5ldyBXZ2IoZi5kKSk6UWdiKGYuYSxmLmIpO05nYihmLmEsJycrUWNiKGIpKX1yZXR1cm4gIWYuYT9mLmM6Zi5lLmxlbmd0aD09MD9mLmEuYTpmLmEuYSsoJycrZi5lKX0KZnVuY3Rpb24gRkdiKGEsYil7dmFyIGMsZCxlO2U9SHFlO2ZvcihkPW5ldyBybWIoT0ZiKGIpKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMjE2KTtpZihjLmYmJiFhLmNbYy5jXSl7YS5jW2MuY109dHJ1ZTtlPSR3bmQuTWF0aC5taW4oZSxGR2IoYSxBRmIoYyxiKSkpfX1hLmlbYi5kXT1hLmo7YS5nW2IuZF09JHduZC5NYXRoLm1pbihlLGEuaisrKTtyZXR1cm4gYS5nW2IuZF19CmZ1bmN0aW9uIEdLYihhLGIpe3ZhciBjLGQsZTtmb3IoZT1KRChKRChRYyhhLnIsYiksMjIpLDgzKS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDExNSk7ZC5lLmI9KGM9ZC5iLGMubmYoKExnZCgpLFhmZCkpP2MuJGYoKT09KFJqZCgpLHhqZCk/LWMuS2YoKS5iLUJlYihNRChjLm1mKFhmZCkpKTpCZWIoTUQoYy5tZihYZmQpKSk6Yy4kZigpPT0oUmpkKCkseGpkKT8tYy5LZigpLmI6MCl9fQpmdW5jdGlvbiBLV2MoYSl7dmFyIGIsYyxkLGUsZjtiPWEuYTtjPWEuYjtlPWEuYztkPW5ldyBFZGQoYy5lLmErYy5mLmEvMixjLmUuYitjLmYuYi8yKTtmPW5ldyBFZGQoZS5lLmErZS5mLmEvMixlLmUuYitlLmYuYi8yKTtEdGIoYixkLGIuYSxiLmEuYSk7RHRiKGIsZixiLmMuYixiLmMpO3dRYyhkLEpEKGZ1KGIsMSksOCksYS5iLmYpO3dRYyhmLEpEKGZ1KGIsYi5iLTIpLDgpLGEuYy5mKX0KZnVuY3Rpb24gWHhkKGEpe3ZhciBiLGM7Yz1mYWxzZTtpZihSRChhLDIxMCkpe2M9dHJ1ZTtyZXR1cm4gSkQoYSwyMTApLmF9aWYoIWMpe2lmKFJEKGEsMjYzKSl7Yj1KRChhLDI2MykuYSUxPT0wO2lmKGIpe2M9dHJ1ZTtyZXR1cm4gamZiKEZlYihKRChhLDI2MykuYSkpfX19dGhyb3cgc2NiKG5ldyBleWQoIklkIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gaW50ZWdlcjogJyIrYSsiJy4iKSl9CmZ1bmN0aW9uIGQ5ZChhLGIpe3ZhciBjLGQsZSxmLGcsaDtmPW51bGw7Zm9yKGU9bmV3IHE5ZCgoIWEuYSYmKGEuYT1uZXcgczlkKGEpKSxhLmEpKTtuOWQoZSk7KXtjPUpEKFNEZChlKSw1Nyk7ZD0oZz1jLnpoKCksaD0oSFRkKGcpLGcubyksIWh8fCFjLlRoKGgpP251bGw6YWZlKERTZChoKSxjLkloKGgpKSk7aWYoZCE9bnVsbCl7aWYoY2diKGQsYikpe2Y9YzticmVha319fXJldHVybiBmfQpmdW5jdGlvbiBOdyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtiayhjLCdvY2N1cnJlbmNlcycpO2lmKGM9PTApe3JldHVybiBoPUpEKFR2KG5kKGEuYSksYiksMTYpLCFoPzA6aC5nYygpfWc9SkQoVHYobmQoYS5hKSxiKSwxNik7aWYoIWcpe3JldHVybiAwfWY9Zy5nYygpO2lmKGM+PWYpe2cuJGIoKX1lbHNle2U9Zy5KYygpO2ZvcihkPTA7ZDxjO2QrKyl7ZS5QYigpO2UuUWIoKX19cmV0dXJuIGZ9CmZ1bmN0aW9uIG14KGEsYixjKXt2YXIgZCxlLGYsZztiayhjLCdvbGRDb3VudCcpO2JrKDAsJ25ld0NvdW50Jyk7ZD1KRChUdihuZChhLmEpLGIpLDE2KTtpZigoIWQ/MDpkLmdjKCkpPT1jKXtiaygwLCdjb3VudCcpO2U9KGY9SkQoVHYobmQoYS5hKSxiKSwxNiksIWY/MDpmLmdjKCkpO2c9LWU7Zz4wP0ZoKCk6ZzwwJiZOdyhhLGIsLWcpO3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX0KZnVuY3Rpb24gaEliKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2g9MDtpZihhLmI9PTApe2c9bEliKGEsdHJ1ZSk7Yj0wO2ZvcihkPWcsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2lmKGM+MCl7aCs9YzsrK2J9fWI+MSYmKGgrPWEuYyooYi0xKSl9ZWxzZXtoPUp1YihSQWIoR0JiKEJCYihTbWIoYS5hKSxuZXcgekliKSxuZXcgQkliKSkpfXJldHVybiBoPjA/aCthLm4uZCthLm4uYTowfQpmdW5jdGlvbiBpSWIoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD0wO2lmKGEuYj09MCl7aD1KdWIoUkFiKEdCYihCQmIoU21iKGEuYSksbmV3IHZJYiksbmV3IHhJYikpKX1lbHNle2c9bUliKGEsdHJ1ZSk7Yj0wO2ZvcihkPWcsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2lmKGM+MCl7aCs9YzsrK2J9fWI+MSYmKGgrPWEuYyooYi0xKSl9cmV0dXJuIGg+MD9oK2Eubi5iK2Eubi5jOjB9CmZ1bmN0aW9uIFhJYyhhKXt2YXIgYixjO2lmKGEuYy5sZW5ndGghPTIpe3Rocm93IHNjYihuZXcgV2ViKCdPcmRlciBvbmx5IGFsbG93ZWQgZm9yIHR3byBwYXRocy4nKSl9Yj0oc0RiKDAsYS5jLmxlbmd0aCksSkQoYS5jWzBdLDE4KSk7Yz0oc0RiKDEsYS5jLmxlbmd0aCksSkQoYS5jWzFdLDE4KSk7aWYoYi5kLmkhPWMuYy5pKXthLmMubGVuZ3RoPTA7WUNiKGEuYyxjKTtZQ2IoYS5jLGIpfX0KZnVuY3Rpb24gYjNjKGEsYixjKXt2YXIgZDtkdGQoYyxiLmcsYi5mKTtmdGQoYyxiLmksYi5qKTtmb3IoZD0wO2Q8KCFiLmEmJihiLmE9bmV3IFgwZChBMyxiLDEwLDExKSksYi5hKS5pO2QrKyl7YjNjKGEsSkQobkRkKCghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSksZCksMjcpLEpEKG5EZCgoIWMuYSYmKGMuYT1uZXcgWDBkKEEzLGMsMTAsMTEpKSxjLmEpLGQpLDI3KSl9fQpmdW5jdGlvbiBPSmIoYSxiKXt2YXIgYyxkLGUsZjtmPUpEKEtxYihhLmIsYiksMTI2KTtjPWYuYTtmb3IoZT1KRChKRChRYyhhLnIsYiksMjIpLDgzKS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDExNSk7ISFkLmMmJihjLmE9JHduZC5NYXRoLm1heChjLmEsX0hiKGQuYykpKX1pZihjLmE+MCl7c3dpdGNoKGIuZyl7Y2FzZSAyOmYubi5jPWEuczticmVhaztjYXNlIDQ6Zi5uLmI9YS5zO319fQpmdW5jdGlvbiBETWIoYSxiKXt2YXIgYyxkLGU7Yz1KRChXTWIoYiwoSU9iKCksdk9iKSksMTcpLmEtSkQoV01iKGEsdk9iKSwxNykuYTtpZihjPT0wKXtkPUJkZChvZGQoSkQoV01iKGEsKFRPYigpLFBPYikpLDgpKSxKRChXTWIoYSxRT2IpLDgpKTtlPUJkZChvZGQoSkQoV01iKGIsUE9iKSw4KSksSkQoV01iKGIsUU9iKSw4KSk7cmV0dXJuIEhlYihkLmEqZC5iLGUuYSplLmIpfXJldHVybiBjfQpmdW5jdGlvbiBNUGMoYSxiKXt2YXIgYyxkLGU7Yz1KRChXTWIoYiwoa1ZjKCksJFVjKSksMTcpLmEtSkQoV01iKGEsJFVjKSwxNykuYTtpZihjPT0wKXtkPUJkZChvZGQoSkQoV01iKGEsKHRVYygpLFVUYykpLDgpKSxKRChXTWIoYSxWVGMpLDgpKTtlPUJkZChvZGQoSkQoV01iKGIsVVRjKSw4KSksSkQoV01iKGIsVlRjKSw4KSk7cmV0dXJuIEhlYihkLmEqZC5iLGUuYSplLmIpfXJldHVybiBjfQpmdW5jdGlvbiBqV2IoYSl7dmFyIGIsYztjPW5ldyBVZ2I7Yy5hKz0nZV8nO2I9YVdiKGEpO2IhPW51bGwmJihjLmErPScnK2IsYyk7aWYoISFhLmMmJiEhYS5kKXtRZ2IoKGMuYSs9JyAnLGMpLFlZYihhLmMpKTtRZ2IoUGdiKChjLmErPSdbJyxjKSxhLmMuaSksJ10nKTtRZ2IoKGMuYSs9RnZlLGMpLFlZYihhLmQpKTtRZ2IoUGdiKChjLmErPSdbJyxjKSxhLmQuaSksJ10nKX1yZXR1cm4gYy5hfQpmdW5jdGlvbiBhUWMoYSl7c3dpdGNoKGEuZyl7Y2FzZSAwOnJldHVybiBuZXcgUVZjO2Nhc2UgMTpyZXR1cm4gbmV3IFlWYztjYXNlIDI6cmV0dXJuIG5ldyBBV2M7Y2FzZSAzOnJldHVybiBuZXcgTVdjO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJ05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBwaGFzZSAnKyhhLmYhPW51bGw/YS5mOicnK2EuZykpKTt9fQpmdW5jdGlvbiAkbWQoYSxiLGMsZCxlKXt2YXIgZjtmPTA7c3dpdGNoKGUuZyl7Y2FzZSAxOmY9JHduZC5NYXRoLm1heCgwLGIuYithLmItKGMuYitkKSk7YnJlYWs7Y2FzZSAzOmY9JHduZC5NYXRoLm1heCgwLC1hLmItZCk7YnJlYWs7Y2FzZSAyOmY9JHduZC5NYXRoLm1heCgwLC1hLmEtZCk7YnJlYWs7Y2FzZSA0OmY9JHduZC5NYXRoLm1heCgwLGIuYSthLmEtKGMuYStkKSk7fXJldHVybiBmfQpmdW5jdGlvbiBBeWQoYSxiLGMpe3ZhciBkLGUsZixnLGg7aWYoYyl7ZT1jLmEubGVuZ3RoO2Q9bmV3IFJwZShlKTtmb3IoaD0oZC5iLWQuYSkqZC5jPDA/KFFwZSgpLFBwZSk6bmV3IGxxZShkKTtoLk9iKCk7KXtnPUpEKGguUGIoKSwxNyk7Zj1feGQoYyxnLmEpO2xEZSBpbiBmLmF8fG1EZSBpbiBmLmE/cXpkKGEsZixiKTp3emQoYSxmLGIpO2xDZChKRChOaWIoYS5jLFl4ZChmKSksODUpKX19fQpmdW5jdGlvbiBFU2QoYSl7dmFyIGIsYztzd2l0Y2goYS5iKXtjYXNlIC0xOntyZXR1cm4gdHJ1ZX1jYXNlIDA6e2M9YS50O2lmKGM+MXx8Yz09LTEpe2EuYj0tMTtyZXR1cm4gdHJ1ZX1lbHNle2I9cFJkKGEpO2lmKCEhYiYmKElmZSgpLGIuaWsoKT09Y0ZlKSl7YS5iPS0xO3JldHVybiB0cnVlfWVsc2V7YS5iPTE7cmV0dXJuIGZhbHNlfX19ZGVmYXVsdDpjYXNlIDE6e3JldHVybiBmYWxzZX19fQpmdW5jdGlvbiBsbWUoYSxiKXt2YXIgYyxkLGUsZjtmbWUoYSk7aWYoYS5jIT0wfHxhLmEhPTEyMyl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLGZFZSkpKSk7Zj1iPT0xMTI7ZD1hLmQ7Yz1nZ2IoYS5pLDEyNSxkKTtpZihjPDApdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxnRWUpKSkpO2U9cWdiKGEuaSxkLGMpO2EuZD1jKzE7cmV0dXJuIERvZShlLGYsKGEuZSY1MTIpPT01MTIpfQpmdW5jdGlvbiBJQmMoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD1hdihhLmMubGVuZ3RoKTtmb3IoZT1uZXcgcm1iKGEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSw5KTtnPW5ldyBRcmI7Zj1rWWIoZCk7Zm9yKGM9bmV3IGVzKElyKGYuYS5KYygpLG5ldyBlcikpO2NzKGMpOyl7Yj1KRChkcyhjKSwxOCk7Yi5jLmk9PWIuZC5pfHxOcmIoZyxiLmQuaSl9WUNiKGguYyxnKX1yZXR1cm4gaH0KZnVuY3Rpb24gYVRkKGEsYil7dmFyIGMsZCxlO2lmKCFiKXtjVGQoYSxudWxsKTtVU2QoYSxudWxsKX1lbHNlIGlmKChiLmkmNCkhPTApe2Q9J1tdJztmb3IoYz1iLmM7O2M9Yy5jKXtpZigoYy5pJjQpPT0wKXtlPWpnYigoY2ViKGMpLGMubytkKSk7Y1RkKGEsZSk7VVNkKGEsZSk7YnJlYWt9ZCs9J1tdJ319ZWxzZXtlPWpnYigoY2ViKGIpLGIubykpO2NUZChhLGUpO1VTZChhLGUpfWEuZWwoYil9CmZ1bmN0aW9uIFdiZShhLGIsYyxkLGUpe3ZhciBmLGcsaCxpO2k9VmJlKGEsSkQoZSw1NykpO2lmKFhEKGkpIT09WEQoZSkpe2g9SkQoYS5nW2NdLDc0KTtmPUpmZShiLGkpO2pEZChhLGMsbWNlKGEsYyxmKSk7aWYocXFkKGEuZSkpe2c9QWJlKGEsOSxmLklrKCksZSxpLGQsZmFsc2UpO05GZChnLG5ldyBpX2QoYS5lLDksYS5jLGgsZixkLGZhbHNlKSk7T0ZkKGcpfXJldHVybiBpfXJldHVybiBlfQpmdW5jdGlvbiBEQWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtkPUpEKFFjKGEuYyxiKSwxNSk7ZT1KRChRYyhhLmMsYyksMTUpO2Y9ZC5kZChkLmdjKCkpO2c9ZS5kZChlLmdjKCkpO3doaWxlKGYuU2IoKSYmZy5TYigpKXtoPUpEKGYuVWIoKSwxNyk7aT1KRChnLlViKCksMTcpO2lmKGghPWkpe3JldHVybiAkZWIoaC5hLGkuYSl9fXJldHVybiAhZi5PYigpJiYhZy5PYigpPzA6Zi5PYigpPzE6LTF9CmZ1bmN0aW9uIE1iZChjLGQpe3ZhciBlLGYsZzt0cnl7Zz10cyhjLmEsZCk7cmV0dXJuIGd9Y2F0Y2goYil7Yj1yY2IoYik7aWYoUkQoYiwzMikpe3RyeXtmPUZkYihkLExyZSxIcWUpO2U9ZGViKGMuYSk7aWYoZj49MCYmZjxlLmxlbmd0aCl7cmV0dXJuIGVbZl19fWNhdGNoKGEpe2E9cmNiKGEpO2lmKCFSRChhLDEzMCkpdGhyb3cgc2NiKGEpfXJldHVybiBudWxsfWVsc2UgdGhyb3cgc2NiKGIpfX0KZnVuY3Rpb24gdnFkKGEsYil7dmFyIGMsZCxlO2U9WjlkKChHZmUoKSxFZmUpLGEuemgoKSxiKTtpZihlKXtJZmUoKTtKRChlLDY5KS51aygpfHwoZT1VYWUoamFlKEVmZSxlKSkpO2Q9KGM9YS5FaChlKSxKRChjPj0wP2EuSGgoYyx0cnVlLHRydWUpOnVxZChhLGUsdHJ1ZSksMTU5KSk7cmV0dXJuIEpEKGQsMjE4KS5UbChiKX1lbHNle3Rocm93IHNjYihuZXcgVGViKExDZStiLnZlKCkrT0NlKSl9fQpmdW5jdGlvbiB1NmQoKXttNmQoKTt2YXIgYTtpZihsNmQpcmV0dXJuIEpEKGcxZCgock9kKCkscU9kKSxCRmUpLDE5ODQpO2tOZChMSyxuZXcgQzhkKTt2NmQoKTthPUpEKFJEKE9pYigock9kKCkscU9kKSxCRmUpLDU0NSk/T2liKHFPZCxCRmUpOm5ldyB0NmQsNTQ1KTtsNmQ9dHJ1ZTtyNmQoYSk7czZkKGEpO1FpYigoQ09kKCksQk9kKSxhLG5ldyB4NmQpO1JpYihxT2QsQkZlLGEpO3JldHVybiBhfQpmdW5jdGlvbiBvYmUoYSxiKXt2YXIgYyxkLGUsZjthLmo9LTE7aWYocXFkKGEuZSkpe2M9YS5pO2Y9YS5pIT0wO2lEZChhLGIpO2Q9bmV3IGlfZChhLmUsMyxhLmMsbnVsbCxiLGMsZik7ZT1iLndsKGEuZSxhLmMsbnVsbCk7ZT1hY2UoYSxiLGUpO2lmKCFlKXtXcGQoYS5lLGQpfWVsc2V7ZS5raihkKTtlLmxqKCl9fWVsc2V7aURkKGEsYik7ZT1iLndsKGEuZSxhLmMsbnVsbCk7ISFlJiZlLmxqKCl9fQpmdW5jdGlvbiB6QShhLGIpe3ZhciBjLGQsZTtlPTA7ZD1iWzBdO2lmKGQ+PWEubGVuZ3RoKXtyZXR1cm4gLTF9Yz0oQURiKGQsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChkKSk7d2hpbGUoYz49NDgmJmM8PTU3KXtlPWUqMTArKGMtNDgpOysrZDtpZihkPj1hLmxlbmd0aCl7YnJlYWt9Yz0oQURiKGQsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChkKSl9ZD5iWzBdPyhiWzBdPWQpOihlPS0xKTtyZXR1cm4gZX0KZnVuY3Rpb24gbU1jKGEsYixjKXt2YXIgZCxlLGYsZyxoO2c9YS5jO2g9YS5kO2Y9S2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2cuaS5uLGcubixnLmFdKSkuYjtlPShmK0tkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtoLmkubixoLm4saC5hXSkpLmIpLzI7ZD1udWxsO2cuaj09KFJqZCgpLHdqZCk/KGQ9bmV3IEVkZChiK2cuaS5jLmMuYStjLGUpKTooZD1uZXcgRWRkKGItYyxlKSk7ZHUoYS5hLDAsZCl9CmZ1bmN0aW9uIFN0ZChhKXt2YXIgYixjLGQsZTtiPW51bGw7Zm9yKGQ9RGwoeWwoV0MoT0MoVkksMSksTnFlLDIwLDAsWyghYS5iJiYoYS5iPW5ldyByZWUodjMsYSw0LDcpKSxhLmIpLCghYS5jJiYoYS5jPW5ldyByZWUodjMsYSw1LDgpKSxhLmMpXSkpKTtjcyhkKTspe2M9SkQoZHMoZCksODQpO2U9X0JkKGMpO2lmKCFiKXtiPWV9ZWxzZSBpZihiIT1lKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBwRGQoYSxiLGMpe3ZhciBkOysrYS5qO2lmKGI+PWEuaSl0aHJvdyBzY2IobmV3IG1kYihORGUrYitPRGUrYS5pKSk7aWYoYz49YS5pKXRocm93IHNjYihuZXcgbWRiKFBEZStjK09EZSthLmkpKTtkPWEuZ1tjXTtpZihiIT1jKXtiPGM/JGdiKGEuZyxiLGEuZyxiKzEsYy1iKTokZ2IoYS5nLGMrMSxhLmcsYyxiLWMpO1ZDKGEuZyxiLGQpO2EuTWkoYixkLGMpO2EuS2koKX1yZXR1cm4gZH0KZnVuY3Rpb24gUmMoYSxiLGMpe3ZhciBkO2Q9SkQoYS5jLnhjKGIpLDE2KTtpZighZCl7ZD1hLmljKGIpO2lmKGQuRWMoYykpeysrYS5kO2EuYy55YyhiLGQpO3JldHVybiB0cnVlfWVsc2V7dGhyb3cgc2NiKG5ldyB1ZGIoJ05ldyBDb2xsZWN0aW9uIHZpb2xhdGVkIHRoZSBDb2xsZWN0aW9uIHNwZWMnKSl9fWVsc2UgaWYoZC5FYyhjKSl7KythLmQ7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fQpmdW5jdGlvbiBlZmIoYSl7dmFyIGIsYyxkO2lmKGE8MCl7cmV0dXJuIDB9ZWxzZSBpZihhPT0wKXtyZXR1cm4gMzJ9ZWxzZXtkPS0oYT4+MTYpO2I9ZD4+MTYmMTY7Yz0xNi1iO2E9YT4+YjtkPWEtMjU2O2I9ZD4+MTYmODtjKz1iO2E8PD1iO2Q9YS1Nc2U7Yj1kPj4xNiY0O2MrPWI7YTw8PWI7ZD1hLWlyZTtiPWQ+PjE2JjI7Yys9YjthPDw9YjtkPWE+PjE0O2I9ZCZ+KGQ+PjEpO3JldHVybiBjKzItYn19CmZ1bmN0aW9uIGtRYyhhLGIpe3ZhciBjLGQsZTtlPW5ldyBVbGI7Zm9yKGQ9R3RiKGIuYSwwKTtkLmIhPWQuZC5jOyl7Yz1KRChVdGIoZCksNjUpO2MuYy5nPT1hLmcmJlhEKFdNYihjLmIsKGtWYygpLGlWYykpKSE9PVhEKFdNYihjLmMsaVZjKSkmJiF4QmIobmV3IFJCYihudWxsLG5ldyBHdmIoZSwxNikpLG5ldyBMUWMoYykpJiYoWUNiKGUuYyxjKSx0cnVlKX1TbGIoZSxuZXcgTlFjKTtyZXR1cm4gZX0KZnVuY3Rpb24gcE5iKGEsYixjKXt2YXIgZCxlLGYsZztpZihSRChiLDE1MSkmJlJEKGMsMTUxKSl7Zj1KRChiLDE1MSk7Zz1KRChjLDE1MSk7cmV0dXJuIGEuYVtmLmFdW2cuYV0rYS5hW2cuYV1bZi5hXX1lbHNlIGlmKFJEKGIsMjQ5KSYmUkQoYywyNDkpKXtkPUpEKGIsMjQ5KTtlPUpEKGMsMjQ5KTtpZihkLmE9PWUuYSl7cmV0dXJuIEpEKFdNYihlLmEsKElPYigpLHZPYikpLDE3KS5hfX1yZXR1cm4gMH0KZnVuY3Rpb24gQzJiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtqPUJlYihNRChXTWIoYiwoQndjKCksaXdjKSkpKTtpPWFbMF0ubi5hK2FbMF0uby5hK2FbMF0uZC5jK2o7Zm9yKGg9MTtoPGEubGVuZ3RoO2grKyl7ZD1hW2hdLm47ZT1hW2hdLm87Yz1hW2hdLmQ7Zj1kLmEtYy5iLWk7ZjwwJiYoZC5hLT1mKTtnPWIuZjtnLmE9JHduZC5NYXRoLm1heChnLmEsZC5hK2UuYSk7aT1kLmErZS5hK2MuYytqfX0KZnVuY3Rpb24gYjVjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2Q9SkQoSkQoTmliKGEuZyxiLmEpLDQ3KS5hLDY4KTtlPUpEKEpEKE5pYihhLmcsYi5iKSw0NykuYSw2OCk7Zj1kLmI7Zz1lLmI7Yz1YY2QoZixnKTtpZihjPj0wKXtyZXR1cm4gY31oPXNkZChCZGQobmV3IEVkZChnLmMrZy5iLzIsZy5kK2cuYS8yKSxuZXcgRWRkKGYuYytmLmIvMixmLmQrZi5hLzIpKSk7cmV0dXJuIC0od01iKGYsZyktMSkqaH0KZnVuY3Rpb24gZ25kKGEsYixjKXt2YXIgZDtFQmIobmV3IFJCYihudWxsLCghYy5hJiYoYy5hPW5ldyBYMGQodzMsYyw2LDYpKSxuZXcgR3ZiKGMuYSwxNikpKSxuZXcgeW5kKGEsYikpO0VCYihuZXcgUkJiKG51bGwsKCFjLm4mJihjLm49bmV3IFgwZCh6MyxjLDEsNykpLG5ldyBHdmIoYy5uLDE2KSkpLG5ldyBBbmQoYSxiKSk7ZD1KRChrc2QoYywoTGdkKCksdGZkKSksNzcpOyEhZCYmT2RkKGQsYSxiKX0KZnVuY3Rpb24gdXFkKGEsYixjKXt2YXIgZCxlLGY7Zj1aOWQoKEdmZSgpLEVmZSksYS56aCgpLGIpO2lmKGYpe0lmZSgpO0pEKGYsNjkpLnVrKCl8fChmPVVhZShqYWUoRWZlLGYpKSk7ZT0oZD1hLkVoKGYpLEpEKGQ+PTA/YS5IaChkLHRydWUsdHJ1ZSk6dXFkKGEsZix0cnVlKSwxNTkpKTtyZXR1cm4gSkQoZSwyMTgpLlBsKGIsYyl9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYihMQ2UrYi52ZSgpK09DZSkpfX0KZnVuY3Rpb24gdEpkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7ZT1hLmRbYl07aWYoZSl7Zj1lLmc7aT1lLmk7aWYoZCE9bnVsbCl7Zm9yKGg9MDtoPGk7KytoKXtnPUpEKGZbaF0sMTM1KTtpZihnLnhpKCk9PWMmJnBiKGQsZy5qZCgpKSl7cmV0dXJuIGd9fX1lbHNle2ZvcihoPTA7aDxpOysraCl7Zz1KRChmW2hdLDEzNSk7aWYoWEQoZy5qZCgpKT09PVhEKGQpKXtyZXR1cm4gZ319fX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gZ2FlKGEsYil7dmFyIGMsZCxlLGYsZztkPSghYi5zJiYoYi5zPW5ldyBYMGQocTYsYiwyMSwxNykpLGIucyk7Zj1udWxsO2ZvcihlPTAsZz1kLmk7ZTxnOysrZSl7Yz1KRChuRGQoZCxlKSwxNzgpO3N3aXRjaChUYWUoamFlKGEsYykpKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjp7IWYmJihmPW5ldyBVbGIpO1lDYihmLmMsYyk7YnJlYWt9fX1yZXR1cm4gIWY/KHBuYigpLHBuYigpLG1uYik6Zn0KZnVuY3Rpb24gUGhiKGEsYil7dmFyIGM7aWYoYjwwKXt0aHJvdyBzY2IobmV3IGtkYignTmVnYXRpdmUgZXhwb25lbnQnKSl9aWYoYj09MCl7cmV0dXJuIEJoYn1lbHNlIGlmKGI9PTF8fEpoYihhLEJoYil8fEpoYihhLEZoYikpe3JldHVybiBhfWlmKCFTaGIoYSwwKSl7Yz0xO3doaWxlKCFTaGIoYSxjKSl7KytjfXJldHVybiBOaGIoYmliKGMqYiksUGhiKFJoYihhLGMpLGIpKX1yZXR1cm4gSWliKGEsYil9CmZ1bmN0aW9uIEFtYihhLGIpe3ZhciBjLGQsZTtpZihYRChhKT09PVhEKGIpKXtyZXR1cm4gdHJ1ZX1pZihhPT1udWxsfHxiPT1udWxsKXtyZXR1cm4gZmFsc2V9aWYoYS5sZW5ndGghPWIubGVuZ3RoKXtyZXR1cm4gZmFsc2V9Zm9yKGM9MDtjPGEubGVuZ3RoOysrYyl7ZD1hW2NdO2U9YltjXTtpZighKFhEKGQpPT09WEQoZSl8fGQhPW51bGwmJnBiKGQsZSkpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBPUmIoYSl7elJiKCk7dmFyIGIsYyxkO3RoaXMuYj15UmI7dGhpcy5jPShUZ2QoKSxSZ2QpO3RoaXMuZj0odVJiKCksdFJiKTt0aGlzLmE9YTtMUmIodGhpcyxuZXcgUFJiKTtFUmIodGhpcyk7Zm9yKGQ9bmV3IHJtYihhLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw4Mik7aWYoIWMuZCl7Yj1uZXcgc1JiKFdDKE9DKEpPLDEpLE5xZSw4MiwwLFtjXSkpO0lsYihhLmEsYil9fX0KZnVuY3Rpb24gZTBiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWF8fGEuYy5sZW5ndGg9PTApe3JldHVybiBudWxsfWY9bmV3IGVJYihiLCFjKTtmb3IoZT1uZXcgcm1iKGEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSw3Mik7V0hiKGYsKHNXYigpLG5ldyBOV2IoZCkpKX1nPWYuaTtnLmE9KGk9Zi5uLGYuZS5iK2kuZCtpLmEpO2cuYj0oaD1mLm4sZi5lLmEraC5iK2guYyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIHAyYihhKXt2YXIgYixjLGQsZSxmLGcsaDtoPURYYihhLmEpO1FtYihoLG5ldyB1MmIpO2M9bnVsbDtmb3IoZT1oLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtpZihkLmshPShEWWIoKSx3WWIpKXticmVha31iPUpEKFdNYihkLChJcWMoKSxUcGMpKSw2NCk7aWYoYiE9KFJqZCgpLFFqZCkmJmIhPXdqZCl7Y29udGludWV9ISFjJiZKRChXTWIoYyxhcWMpLDE1KS5FYyhkKTtjPWR9fQpmdW5jdGlvbiB6TmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqO2k9KHNEYihiLGEuYy5sZW5ndGgpLEpEKGEuY1tiXSwzMzUpKTtPbGIoYSxiKTtpZihpLmIvMj49Yyl7ZD1iO2o9KGkuYytpLmEpLzI7Zz1qLWM7aWYoaS5jPD1qLWMpe2U9bmV3IEVOYyhpLmMsZyk7SGxiKGEsZCsrLGUpfWg9aitjO2lmKGg8PWkuYSl7Zj1uZXcgRU5jKGgsaS5hKTt2RGIoZCxhLmMubGVuZ3RoKTtXQ2IoYS5jLGQsZil9fX0KZnVuY3Rpb24gcFRjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWIuZGMoKSl7ZT1uZXcgTXRiO2ZvcihpPWIuSmMoKTtpLk9iKCk7KXtoPUpEKGkuUGIoKSwzOSk7UWliKGEuYSxqZmIoaC5nKSxqZmIoYykpO2ZvcihnPShkPUd0YigobmV3IGdSYyhoKSkuYS5kLDApLG5ldyBqUmMoZCkpO1R0YihnLmEpOyl7Zj1KRChVdGIoZy5hKSw2NSkuYztEdGIoZSxmLGUuYy5iLGUuYyl9fXBUYyhhLGUsYysxKX19CmZ1bmN0aW9uIG45ZChhKXt2YXIgYjtpZighYS5jJiZhLmc9PW51bGwpe2EuZD1hLiRpKGEuZik7dENkKGEsYS5kKTtiPWEuZH1lbHNle2lmKGEuZz09bnVsbCl7cmV0dXJuIHRydWV9ZWxzZSBpZihhLmk9PTApe3JldHVybiBmYWxzZX1lbHNle2I9SkQoYS5nW2EuaS0xXSw0OSl9fWlmKGI9PWEuYiYmbnVsbC5TbT49bnVsbC5SbSgpKXtTRGQoYSk7cmV0dXJuIG45ZChhKX1lbHNle3JldHVybiBiLk9iKCl9fQpmdW5jdGlvbiBEVWIoYSl7dGhpcy5hPWE7aWYoYS5jLmkuaz09KERZYigpLHdZYikpe3RoaXMuYz1hLmM7dGhpcy5kPUpEKFdNYihhLmMuaSwoSXFjKCksVHBjKSksNjQpfWVsc2UgaWYoYS5kLmkuaz09d1liKXt0aGlzLmM9YS5kO3RoaXMuZD1KRChXTWIoYS5kLmksKElxYygpLFRwYykpLDY0KX1lbHNle3Rocm93IHNjYihuZXcgVGViKCdFZGdlICcrYSsnIGlzIG5vdCBhbiBleHRlcm5hbCBlZGdlLicpKX19CmZ1bmN0aW9uIGhaZChhLGIpe3ZhciBjLGQsZTtlPWEuYjthLmI9YjsoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDMsZSxhLmIpKTtpZighYil7cnZkKGEsbnVsbCk7alpkKGEsMCk7aVpkKGEsbnVsbCl9ZWxzZSBpZihiIT1hKXtydmQoYSxiLnpiKTtqWmQoYSxiLmQpO2M9KGQ9Yi5jLGQ9PW51bGw/Yi56YjpkKTtpWmQoYSxjPT1udWxsfHxjZ2IoYyxiLnpiKT9udWxsOmMpfX0KZnVuY3Rpb24gZmooYSxiKXt2YXIgYzt0aGlzLmU9KHFtKCksUWIoYSkscW0oKSx3bShhKSk7dGhpcy5jPShRYihiKSx3bShiKSk7TGIodGhpcy5lLlBkKCkuZGMoKT09dGhpcy5jLlBkKCkuZGMoKSk7dGhpcy5kPVF2KHRoaXMuZSk7dGhpcy5iPVF2KHRoaXMuYyk7Yz1RQyhhSixbaHJlLE5xZV0sWzUsMV0sNSxbdGhpcy5lLlBkKCkuZ2MoKSx0aGlzLmMuUGQoKS5nYygpXSwyKTt0aGlzLmE9YztYaSh0aGlzKX0KZnVuY3Rpb24gRHooYil7dmFyIGM9KCFCeiYmKEJ6PUV6KCkpLEJ6KTt2YXIgZD1iLnJlcGxhY2UoL1tceDAwLVx4MWZceGFkXHUwNjAwLVx1MDYwM1x1MDZkZFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYi1cdTIwMGZcdTIwMjgtXHUyMDJlXHUyMDYwLVx1MjA2NFx1MjA2YS1cdTIwNmZcdWZlZmZcdWZmZjktXHVmZmZiIlxcXS9nLGZ1bmN0aW9uKGEpe3JldHVybiBDeihhLGMpfSk7cmV0dXJuICciJytkKyciJ30KZnVuY3Rpb24gVUNiKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrO2lmKGU9PTApe3JldHVybn1pZihYRChhKT09PVhEKGMpKXthPWEuc2xpY2UoYixiK2UpO2I9MH1pPWM7Zm9yKGg9YixqPWIrZTtoPGo7KXtnPSR3bmQuTWF0aC5taW4oaCsxMDAwMCxqKTtlPWctaDtrPWEuc2xpY2UoaCxnKTtrLnNwbGljZSgwLDAsZCxmP2U6MCk7QXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShpLGspO2g9ZztkKz1lfX0KZnVuY3Rpb24gVUViKGEpe0VFYigpO3ZhciBiLGM7dGhpcy5iPUJFYjt0aGlzLmM9REViO3RoaXMuZz0odkViKCksdUViKTt0aGlzLmQ9KFRnZCgpLFJnZCk7dGhpcy5hPWE7SEViKHRoaXMpO2ZvcihjPW5ldyBybWIoYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksNjApOyFiLmEmJmZFYihoRWIobmV3IGlFYixXQyhPQyhMTSwxKSxOcWUsNjAsMCxbYl0pKSxhKTtiLmU9bmV3IGhkZChiLmQpfX0KZnVuY3Rpb24geE1iKGEpe3ZhciBiLGMsZCxlLGYsZztlPWEuZS5jLmxlbmd0aDtkPVNDKEhLLG51ZSwxNSxlLDAsMSk7Zm9yKGc9bmV3IHJtYihhLmUpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwxNTEpO2RbZi5hXT1uZXcgTXRifWZvcihjPW5ldyBybWIoYS5jKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMjg4KTtkW2IuYy5hXS5FYyhiKTtkW2IuZC5hXS5FYyhiKX1yZXR1cm4gZH0KZnVuY3Rpb24gbElkKGEsYil7dmFyIGMsZCxlLGYsZztjPUpEKENyZChhLmEsNCksMTI4KTtnPWM9PW51bGw/MDpjLmxlbmd0aDtpZihiPj1nKXRocm93IHNjYihuZXcgekhkKGIsZykpO2U9Y1tiXTtpZihnPT0xKXtkPW51bGx9ZWxzZXtkPVNDKFg0LEpFZSw0MTIsZy0xLDAsMSk7JGdiKGMsMCxkLDAsYik7Zj1nLWItMTtmPjAmJiRnYihjLGIrMSxkLGIsZil9VzhkKGEsZCk7VjhkKGEsYixlKTtyZXR1cm4gZX0KZnVuY3Rpb24gRyRkKGEpe3ZhciBiLGM7aWYoYS5mKXt3aGlsZShhLm48YS5vKXtiPUpEKCFhLmo/YS5rLlhiKGEubik6YS5qLlhpKGEubiksNzQpO2M9Yi5JaygpO2lmKFJEKGMsMTAxKSYmKEpEKGMsMTkpLkJiJlJDZSkhPTAmJighYS5lfHxjLm1rKCkhPXQzfHxjLklqKCkhPTApJiZiLmtkKCkhPW51bGwpe3JldHVybiB0cnVlfWVsc2V7KythLm59fXJldHVybiBmYWxzZX1lbHNle3JldHVybiBhLm48YS5vfX0KZnVuY3Rpb24gZWhlKCl7ZWhlPVpjYjtjaGU9SkQobkRkKFNUZCgoamhlKCksaWhlKS5xYiksNiksMzUpO19nZT1KRChuRGQoU1RkKGloZS5xYiksMyksMzUpO2FoZT1KRChuRGQoU1RkKGloZS5xYiksNCksMzUpO2JoZT1KRChuRGQoU1RkKGloZS5xYiksNSksMTkpO1FSZChjaGUpO1FSZChfZ2UpO1FSZChhaGUpO1FSZChiaGUpO2RoZT1uZXcgZG5iKFdDKE9DKHE2LDEpLG1GZSwxNzgsMCxbY2hlLF9nZV0pKX0KZnVuY3Rpb24gQ0piKGEsYil7dmFyIGM7dGhpcy5kPW5ldyBaWGI7dGhpcy5iPWI7dGhpcy5lPW5ldyBGZGQoYi5KZigpKTtjPWEudS5HYygob2pkKCksbGpkKSk7YS51LkdjKGtqZCk/YS5GPyh0aGlzLmE9YyYmIWIuX2YoKSk6KHRoaXMuYT10cnVlKTphLnUuR2MobWpkKT9jPyh0aGlzLmE9IShiLlNmKCkuSmMoKS5PYigpfHxiLlVmKCkuSmMoKS5PYigpKSk6KHRoaXMuYT1mYWxzZSk6KHRoaXMuYT1mYWxzZSl9CmZ1bmN0aW9uIEtLYihhLGIpe3ZhciBjLGQsZSxmO2M9YS5vLmE7Zm9yKGY9SkQoSkQoUWMoYS5yLGIpLDIyKSw4MykuSmMoKTtmLk9iKCk7KXtlPUpEKGYuUGIoKSwxMTUpO2UuZS5hPShkPWUuYixkLm5mKChMZ2QoKSxYZmQpKT9kLiRmKCk9PShSamQoKSxRamQpPy1kLktmKCkuYS1CZWIoTUQoZC5tZihYZmQpKSk6YytCZWIoTUQoZC5tZihYZmQpKSk6ZC4kZigpPT0oUmpkKCksUWpkKT8tZC5LZigpLmE6Yyl9fQpmdW5jdGlvbiBnTmIoYSl7dmFyIGIsYyxkLGUsZixnLGg7ZD1hLmEuYy5sZW5ndGg7aWYoZD4wKXtnPWEuYy5kO2g9YS5kLmQ7ZT13ZGQoQmRkKG5ldyBFZGQoaC5hLGguYiksZyksMS8oZCsxKSk7Zj1uZXcgRWRkKGcuYSxnLmIpO2ZvcihjPW5ldyBybWIoYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMjQ5KTtiLmQuYT1mLmErZS5hO2IuZC5iPWYuYitlLmI7Zi5hKz1lLmE7Zi5iKz1lLmJ9fX0KZnVuY3Rpb24gayRiKGEsYil7dmFyIGMsZCxlLGY7Yz1KRChXTWIoYSwoQndjKCkscnVjKSksODYpO2Y9SkQoa3NkKGIsSnZjKSw2NCk7ZT1KRChXTWIoYSxFdmMpLDEwMCk7aWYoZSE9KGFqZCgpLCRpZCkmJmUhPV9pZCl7aWYoZj09KFJqZCgpLFBqZCkpe2Y9WW1kKGIsYyk7Zj09UGpkJiYoZj1XamQoYykpfX1lbHNle2Q9ZyRiKGIpO2Q+MD8oZj1XamQoYykpOihmPVRqZChXamQoYykpKX1tc2QoYixKdmMsZil9CmZ1bmN0aW9uIGM3YihhLGIpe3ZhciBjLGQ7aWYoYS5jLmxlbmd0aCE9MCl7aWYoYS5jLmxlbmd0aD09Mil7YjdiKChzRGIoMCxhLmMubGVuZ3RoKSxKRChhLmNbMF0sOSkpLChvaWQoKSxraWQpKTtiN2IoKHNEYigxLGEuYy5sZW5ndGgpLEpEKGEuY1sxXSw5KSksbGlkKX1lbHNle2ZvcihkPW5ldyBybWIoYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDkpO2I3YihjLGIpfX1hLmMubGVuZ3RoPTB9fQpmdW5jdGlvbiBvOWIoYSxiKXt2YXIgYztiLlNnKCdQYXJ0aXRpb24gcHJlcHJvY2Vzc2luZycsMSk7Yz1KRCh5QmIoQkJiKERCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5hLDE2KSksbmV3IHM5YiksbmV3IHU5YiksbmV3IHc5YiksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbKGxBYigpLGpBYildKSkpLDE1KTtFQmIoYy5NYygpLG5ldyB5OWIpO2IuVGcoKX0KZnVuY3Rpb24gcmljKGEsYil7dmFyIGMsZCxlLGYsZztnPWEuajtiLmEhPWIuYiYmU2xiKGcsbmV3IFhpYyk7ZT1nLmMubGVuZ3RoLzJ8MDtmb3IoZD0wO2Q8ZTtkKyspe2Y9KHNEYihkLGcuYy5sZW5ndGgpLEpEKGcuY1tkXSwxMTIpKTtmLmMmJmFaYihmLmQsYi5hKX1mb3IoYz1lO2M8Zy5jLmxlbmd0aDtjKyspe2Y9KHNEYihjLGcuYy5sZW5ndGgpLEpEKGcuY1tjXSwxMTIpKTtmLmMmJmFaYihmLmQsYi5iKX19CmZ1bmN0aW9uIHVGYyhhLGIsYyl7dmFyIGQsZSxmO2Q9YS5jW2IuYy5wXVtiLnBdO2U9YS5jW2MuYy5wXVtjLnBdO2lmKGQuYSE9bnVsbCYmZS5hIT1udWxsKXtmPUFlYihkLmEsZS5hKTtmPDA/eEZjKGEsYixjKTpmPjAmJnhGYyhhLGMsYik7cmV0dXJuIGZ9ZWxzZSBpZihkLmEhPW51bGwpe3hGYyhhLGIsYyk7cmV0dXJuIC0xfWVsc2UgaWYoZS5hIT1udWxsKXt4RmMoYSxjLGIpO3JldHVybiAxfXJldHVybiAwfQpmdW5jdGlvbiBlTGMoYSl7WktjKCk7dmFyIGIsYyxkLGUsZixnLGg7Yz1uZXcgWHNiO2ZvcihlPW5ldyBybWIoYS5lLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwyNSk7Zm9yKGc9bmV3IHJtYihkLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSw5KTtoPWEuZ1tmLnBdO2I9SkQoVHNiKGMsaCksMTUpO2lmKCFiKXtiPW5ldyBVbGI7VXNiKGMsaCxiKX1iLkVjKGYpfX1yZXR1cm4gY30KZnVuY3Rpb24gSFBjKGEsYil7dmFyIGMsZCxlLGYsZztlPWIuYi5iO2EuYT1TQyhISyxudWUsMTUsZSwwLDEpO2EuYj1TQyhwY2IsVnRlLDMwLGUsMTYsMSk7Zm9yKGc9R3RiKGIuYiwwKTtnLmIhPWcuZC5jOyl7Zj1KRChVdGIoZyksMzkpO2EuYVtmLmddPW5ldyBNdGJ9Zm9yKGQ9R3RiKGIuYSwwKTtkLmIhPWQuZC5jOyl7Yz1KRChVdGIoZCksNjUpO2EuYVtjLmIuZ10uRWMoYyk7YS5hW2MuYy5nXS5FYyhjKX19CmZ1bmN0aW9uIHBGZChhLGIpe3ZhciBjLGQsZSxmO2lmKGEuTWooKSl7Yz1hLkJqKCk7Zj1hLk5qKCk7KythLmo7YS5uaihjLGEuV2koYyxiKSk7ZD1hLkZqKDMsbnVsbCxiLGMsZik7aWYoYS5KaigpKXtlPWEuS2ooYixudWxsKTtpZighZSl7YS5HaihkKX1lbHNle2Uua2ooZCk7ZS5saigpfX1lbHNle2EuR2ooZCl9fWVsc2V7eUVkKGEsYik7aWYoYS5KaigpKXtlPWEuS2ooYixudWxsKTshIWUmJmUubGooKX19fQpmdW5jdGlvbiBOR2QoYSxiLGMpe3ZhciBkLGUsZjtpZihhLk1qKCkpe2Y9YS5OaigpO2hEZChhLGIsYyk7ZD1hLkZqKDMsbnVsbCxjLGIsZik7aWYoYS5KaigpKXtlPWEuS2ooYyxudWxsKTthLlFqKCkmJihlPWEuUmooYyxlKSk7aWYoIWUpe2EuR2ooZCl9ZWxzZXtlLmtqKGQpO2UubGooKX19ZWxzZXthLkdqKGQpfX1lbHNle2hEZChhLGIsYyk7aWYoYS5KaigpKXtlPWEuS2ooYyxudWxsKTshIWUmJmUubGooKX19fQpmdW5jdGlvbiB3YmUoYSxiKXt2YXIgYyxkLGUsZixnO2c9S2ZlKGEuZS56aCgpLGIpO2U9bmV3IHZEZDtjPUpEKGEuZywxMjIpO2ZvcihmPWEuaTstLWY+PTA7KXtkPWNbZl07Zy5abChkLklrKCkpJiZ0Q2QoZSxkKX0hVkdkKGEsZSkmJnFxZChhLmUpJiZ6VWQoYSxiLkdrKCk/QWJlKGEsNixiLChwbmIoKSxtbmIpLG51bGwsLTEsZmFsc2UpOkFiZShhLGIucWsoKT8yOjEsYixudWxsLG51bGwsLTEsZmFsc2UpKX0KZnVuY3Rpb24gbDFiKGEsYil7dmFyIGMsZCxlLGYsZztpZihhLmE9PShLb2MoKSxJb2MpKXtyZXR1cm4gdHJ1ZX1mPWIuYS5jO2M9Yi5hLmMrYi5hLmI7aWYoYi5qKXtkPWIuQTtnPWQuYy5jLmEtZC5vLmEvMjtlPWYtKGQubi5hK2Quby5hKTtpZihlPmcpe3JldHVybiBmYWxzZX19aWYoYi5xKXtkPWIuQztnPWQuYy5jLmEtZC5vLmEvMjtlPWQubi5hLWM7aWYoZT5nKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiB6MmIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtkPTA7aT1jO2lmKCFiKXtkPWMqKGEuYy5sZW5ndGgtMSk7aSo9LTF9Zm9yKGY9bmV3IHJtYihhKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksOSk7Wk1iKGUsKEJ3YygpLFJ0YyksKGNlZCgpLCRkZCkpO2Uuby5hPWQ7Zm9yKGg9b1liKGUsKFJqZCgpLHdqZCkpLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMTEpO2cubi5hPWR9ZCs9aX19CmZ1bmN0aW9uIHN1ZChhKXt2YXIgYjtpZigoYS5EYiY2NCkhPTApcmV0dXJuIEdxZChhKTtiPW5ldyBKZ2IoR3FkKGEpKTtiLmErPScgKHN0YXJ0WDogJztCZ2IoYixhLmopO2IuYSs9Jywgc3RhcnRZOiAnO0JnYihiLGEuayk7Yi5hKz0nLCBlbmRYOiAnO0JnYihiLGEuYik7Yi5hKz0nLCBlbmRZOiAnO0JnYihiLGEuYyk7Yi5hKz0nLCBpZGVudGlmaWVyOiAnO0VnYihiLGEuZCk7Yi5hKz0nKSc7cmV0dXJuIGIuYX0KZnVuY3Rpb24geFJkKGEpe3ZhciBiO2lmKChhLkRiJjY0KSE9MClyZXR1cm4gc3ZkKGEpO2I9bmV3IEpnYihzdmQoYSkpO2IuYSs9JyAob3JkZXJlZDogJztGZ2IoYiwoYS5CYiYyNTYpIT0wKTtiLmErPScsIHVuaXF1ZTogJztGZ2IoYiwoYS5CYiY1MTIpIT0wKTtiLmErPScsIGxvd2VyQm91bmQ6ICc7Q2diKGIsYS5zKTtiLmErPScsIHVwcGVyQm91bmQ6ICc7Q2diKGIsYS50KTtiLmErPScpJztyZXR1cm4gYi5hfQpmdW5jdGlvbiBZdmQoYSxiLGMsZCxlLGYsZyxoKXt2YXIgaTtSRChhLkNiLDg4KSYmUVZkKFRUZChKRChhLkNiLDg4KSksNCk7cnZkKGEsYyk7YS5mPWQ7WVJkKGEsZSk7JFJkKGEsZik7U1JkKGEsZyk7WlJkKGEsZmFsc2UpO3ZSZChhLHRydWUpO1ZSZChhLGgpO3VSZChhLHRydWUpO3RSZChhLDApO2EuYj0wO3dSZChhLDEpO2k9cVJkKGEsYixudWxsKTshIWkmJmkubGooKTtGU2QoYSxmYWxzZSk7cmV0dXJuIGF9CmZ1bmN0aW9uIE56YihhLGIpe3ZhciBjLGQsZSxmO2M9SkQoT2liKGEuYSxiKSw1MDkpO2lmKCFjKXtkPW5ldyBjQWIoYik7ZT0oV3piKCksVHpiKT9udWxsOmQuYztmPXFnYihlLDAsJHduZC5NYXRoLm1heCgwLGtnYihlLHdnYig0NikpKSk7YkFiKGQsTnpiKGEsZikpOyhUemI/bnVsbDpkLmMpLmxlbmd0aD09MCYmWXpiKGQsbmV3IGZBYik7UmliKGEuYSxUemI/bnVsbDpkLmMsZCk7cmV0dXJuIGR9cmV0dXJuIGN9CmZ1bmN0aW9uIEF6ZCgpe3RoaXMuYT1uZXcgZHlkO3RoaXMubj1uZXcgRW87dGhpcy5wPW5ldyBFbzt0aGlzLmM9bmV3IElyYjt0aGlzLmY9bmV3IEVvO3RoaXMubz1uZXcgRW87dGhpcy5xPW5ldyBJcmI7dGhpcy5kPW5ldyBJcmI7dGhpcy5nPW5ldyBJcmI7dGhpcy5rPW5ldyBJcmI7dGhpcy5lPW5ldyBJcmI7dGhpcy5pPW5ldyBJcmI7dGhpcy5qPW5ldyBJcmI7dGhpcy5yPW5ldyBJcmI7dGhpcy5iPW5ldyBJcmJ9CmZ1bmN0aW9uIEJVZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2g9YS5tbChjKTtpZihoIT1jKXtnPWEuZ1tiXTtpPWg7akRkKGEsYixhLldpKGIsaSkpO2Y9ZzthLk9pKGIsaSxmKTtpZihhLlprKCkpe2Q9YztlPWEuTGooZCxudWxsKTshSkQoaCw1MikuTGgoKSYmKGU9YS5LaihpLGUpKTshIWUmJmUubGooKX1xcWQoYS5lKSYmelVkKGEsYS5Gaig5LGMsaCxiLGZhbHNlKSk7cmV0dXJuIGh9ZWxzZXtyZXR1cm4gY319CmZ1bmN0aW9uIEJSYihhLGIpe3ZhciBjLGQsZSxmO2ZvcihkPW5ldyBybWIoYS5hLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxOTQpO2MuZz10cnVlfWZvcihmPW5ldyBybWIoYS5hLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSw4Mik7ZS5rPXlkYihMRChhLmUuS2IobmV3IHhvZChlLGIpKSkpO2UuZC5nPWUuZC5nJnlkYihMRChhLmUuS2IobmV3IHhvZChlLGIpKSkpfXJldHVybiBhfQpmdW5jdGlvbiBGQWMoYSxiLGMpe3ZhciBkLGUsZixnLGg7aWYoYS5kW2MucF0pe3JldHVybn1mb3IoZT1uZXcgZXMoSXIoa1liKGMpLmEuSmMoKSxuZXcgZXIpKTtjcyhlKTspe2Q9SkQoZHMoZSksMTgpO2g9ZC5kLmk7Zm9yKGc9bmV3IGVzKElyKGhZYihoKS5hLkpjKCksbmV3IGVyKSk7Y3MoZyk7KXtmPUpEKGRzKGcpLDE4KTtmLmMuaT09YiYmKGEuYVtmLnBdPXRydWUpfUZBYyhhLGIsaCl9YS5kW2MucF09dHJ1ZX0KZnVuY3Rpb24gRHJkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7ZD1aZWIoYS5EYiYyNTQpO2lmKGQ9PTEpe2EuRWI9bnVsbH1lbHNle2Y9S0QoYS5FYik7aWYoZD09Mil7ZT1CcmQoYSxiKTthLkViPWZbZT09MD8xOjBdfWVsc2V7Zz1TQyhhSixOcWUsMSxkLTEsNSwxKTtmb3IoYz0yLGg9MCxpPTA7Yzw9MTI4O2M8PD0xKXtjPT1iPysraDooYS5EYiZjKSE9MCYmKGdbaSsrXT1mW2grK10pfWEuRWI9Z319YS5EYiY9fmJ9CmZ1bmN0aW9uIE1uZShhKXt2YXIgYjtiPTA7c3dpdGNoKGEpe2Nhc2UgMTA1OmI9MjticmVhaztjYXNlIDEwOTpiPTg7YnJlYWs7Y2FzZSAxMTU6Yj00O2JyZWFrO2Nhc2UgMTIwOmI9MTY7YnJlYWs7Y2FzZSAxMTc6Yj0zMjticmVhaztjYXNlIDExOTpiPTY0O2JyZWFrO2Nhc2UgNzA6Yj0yNTY7YnJlYWs7Y2FzZSA3MjpiPTEyODticmVhaztjYXNlIDg4OmI9NTEyO2JyZWFrO2Nhc2UgNDQ6Yj1ORWU7fXJldHVybiBifQpmdW5jdGlvbiBGaWIoYSxiLGMsZCxlKXt2YXIgZixnLGgsaTtpZihYRChhKT09PVhEKGIpJiZkPT1lKXtLaWIoYSxkLGMpO3JldHVybn1mb3IoaD0wO2g8ZDtoKyspe2c9MDtmPWFbaF07Zm9yKGk9MDtpPGU7aSsrKXtnPXRjYih0Y2IoRmNiKHVjYihmLFVzZSksdWNiKGJbaV0sVXNlKSksdWNiKGNbaCtpXSxVc2UpKSx1Y2IoUGNiKGcpLFVzZSkpO2NbaCtpXT1QY2IoZyk7Zz1MY2IoZywzMil9Y1toK2VdPVBjYihnKX19CmZ1bmN0aW9uIHNoYyhhKXt2YXIgYixjLGQsZSxmO2M9KGI9SkQoZGViKHYyKSwxMCksbmV3IHVyYihiLEpEKFZDYihiLGIubGVuZ3RoKSwxMCksMCkpO2Y9SkQoV01iKGEsKElxYygpLHNxYykpLDkpO2lmKGYpe2ZvcihlPW5ldyBybWIoZi5qKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTEpO1hEKFdNYihkLGtxYykpPT09WEQoYSkmJndaYihuZXcgeFpiKGQuYikpJiZvcmIoYyxkLmopfX1yZXR1cm4gY30KZnVuY3Rpb24gUE1jKGEsYil7aWYoYi5iIT0wKXtpc05hTihhLnMpPyhhLnM9QmViKChyRGIoYi5iIT0wKSxNRChiLmEuYS5jKSkpKTooYS5zPSR3bmQuTWF0aC5taW4oYS5zLEJlYigockRiKGIuYiE9MCksTUQoYi5hLmEuYykpKSkpO2lzTmFOKGEuYyk/KGEuYz1CZWIoKHJEYihiLmIhPTApLE1EKGIuYy5iLmMpKSkpOihhLmM9JHduZC5NYXRoLm1heChhLmMsQmViKChyRGIoYi5iIT0wKSxNRChiLmMuYi5jKSkpKSl9fQpmdW5jdGlvbiBSdGQoYSl7dmFyIGIsYyxkLGU7Yj1udWxsO2ZvcihkPURsKHlsKFdDKE9DKFZJLDEpLE5xZSwyMCwwLFsoIWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSksYS5iKSwoIWEuYyYmKGEuYz1uZXcgcmVlKHYzLGEsNSw4KSksYS5jKV0pKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDg0KTtlPV9CZChjKTtpZighYil7Yj1ad2QoZSl9ZWxzZSBpZihiIT1ad2QoZSkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIE9HZChhLGIpe3ZhciBjLGQsZSxmO2lmKGEuTWooKSl7Yz1hLmk7Zj1hLk5qKCk7aURkKGEsYik7ZD1hLkZqKDMsbnVsbCxiLGMsZik7aWYoYS5KaigpKXtlPWEuS2ooYixudWxsKTthLlFqKCkmJihlPWEuUmooYixlKSk7aWYoIWUpe2EuR2ooZCl9ZWxzZXtlLmtqKGQpO2UubGooKX19ZWxzZXthLkdqKGQpfX1lbHNle2lEZChhLGIpO2lmKGEuSmooKSl7ZT1hLktqKGIsbnVsbCk7ISFlJiZlLmxqKCl9fX0KZnVuY3Rpb24gaE1iKGEsYil7dmFyIGMsZCxlLGY7Zj1memIoYS5hLGIuYik7aWYoIWYpe3Rocm93IHNjYihuZXcgV2ViKCdJbnZhbGlkIGhpdGJveGVzIGZvciBzY2FubGluZSBvdmVybGFwIGNhbGN1bGF0aW9uLicpKX1lPWZhbHNlO2ZvcihkPWEuYS5hLmVjKCkuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSw2OCk7aWYoY01iKGIuYixjKSl7cjVjKGEuYi5hLGIuYixjKTtlPXRydWV9ZWxzZXtpZihlKXticmVha319fX0KZnVuY3Rpb24gTGJkKGEpe3ZhciBiO2lmKCFhLmEpe3Rocm93IHNjYihuZXcgV2ViKCdJRGF0YVR5cGUgY2xhc3MgZXhwZWN0ZWQgZm9yIGxheW91dCBvcHRpb24gJythLmYpKX1iPWRFZChhLmEpO2lmKGI9PW51bGwpe3Rocm93IHNjYihuZXcgV2ViKCJDb3VsZG4ndCBjcmVhdGUgbmV3IGluc3RhbmNlIG9mIHByb3BlcnR5ICciK2EuZisiJy4gIitBQmUrKGNlYihWNCksVjQuaykrQkJlKSl9cmV0dXJuIEpEKGIsNDExKX0KZnVuY3Rpb24gY3FkKGEpe3ZhciBiLGMsZCxlLGY7Zj1hLkxoKCk7aWYoZil7aWYoZi5SaCgpKXtlPXpxZChhLGYpO2lmKGUhPWYpe2M9YS5CaCgpO2Q9KGI9YS5CaCgpLGI+PTA/YS53aChudWxsKTphLkxoKCkuUGgoYSwtMS1iLG51bGwsbnVsbCkpO2EueGgoSkQoZSw1MiksYyk7ISFkJiZkLmxqKCk7YS5yaCgpJiZhLnNoKCkmJmM+LTEmJldwZChhLG5ldyBnX2QoYSw5LGMsZixlKSk7cmV0dXJuIGV9fX1yZXR1cm4gZn0KZnVuY3Rpb24gaHNiKGEsYil7dmFyIGMsZCxlLGYsZztmPWEuYi5BZShiKTtkPShjPWEuYS5nZXQoZiksYz09bnVsbD9TQyhhSixOcWUsMSwwLDUsMSk6Yyk7Zm9yKGc9MDtnPGQubGVuZ3RoO2crKyl7ZT1kW2ddO2lmKGEuYi56ZShiLGUuamQoKSkpe2lmKGQubGVuZ3RoPT0xKXtkLmxlbmd0aD0wO3FzYihhLmEsZil9ZWxzZXtkLnNwbGljZShnLDEpfS0tYS5jOysrYS5iLmc7cmV0dXJuIGUua2QoKX19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIHpQYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2c9MDtmPWEuZi5lO2ZvcihkPTA7ZDxmLmMubGVuZ3RoOysrZCl7aD0oc0RiKGQsZi5jLmxlbmd0aCksSkQoZi5jW2RdLDE1MSkpO2ZvcihlPWQrMTtlPGYuYy5sZW5ndGg7KytlKXtpPShzRGIoZSxmLmMubGVuZ3RoKSxKRChmLmNbZV0sMTUxKSk7Yz1wZGQoaC5kLGkuZCk7Yj1jLWEuYVtoLmFdW2kuYV07Zys9YS5pW2guYV1baS5hXSpiKmJ9fXJldHVybiBnfQpmdW5jdGlvbiBCN2IoYSxiKXt2YXIgYztpZihYTWIoYiwoQndjKCksVXVjKSkpe3JldHVybn1jPUo3YihKRChXTWIoYix1N2IpLDM2NCksSkQoV01iKGEsVXVjKSwxNzEpKTtaTWIoYix1N2IsYyk7aWYoY3MobmV3IGVzKElyKGVZYihiKS5hLkpjKCksbmV3IGVyKSkpKXtyZXR1cm59c3dpdGNoKGMuZyl7Y2FzZSAxOlpNYihiLFV1YywoT3FjKCksSnFjKSk7YnJlYWs7Y2FzZSAyOlpNYihiLFV1YywoT3FjKCksTHFjKSk7fX0KZnVuY3Rpb24gemhjKGEsYil7dmFyIGM7cGhjKGEpO2EuYT0oYz1uZXcgUGksRUJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIuZCwxNikpLG5ldyBZaGMoYykpLGMpO3VoYyhhLEpEKFdNYihiLmIsKEJ3YygpLEN1YykpLDM0NSkpO3doYyhhKTt2aGMoYSk7dGhjKGEpO3hoYyhhKTt5aGMoYSxiKTtFQmIoREJiKG5ldyBSQmIobnVsbCxlaihjaihhLmIpLmEpKSxuZXcgT2hjKSxuZXcgUWhjKTtiLmE9ZmFsc2U7YS5hPW51bGx9CmZ1bmN0aW9uIEVVYygpe0VVYz1aY2I7dVVjPW5ldyBNQmQoTXplLCh4ZGIoKSxmYWxzZSkpO3ZVYz1uZXcgTUJkKE56ZSw3KTtqZmIoMCk7QlVjPW5ldyBNQmQoT3plLGpmYigwKSk7eVVjPW5ldyBNQmQoUHplLGpmYigtMSkpO0RVYz0odlZjKCksdVZjKTtDVWM9bmV3IE1CZChRemUsRFVjKTt4VWM9KE9UYygpLExUYyk7d1VjPW5ldyBNQmQoUnplLHhVYyk7QVVjPShEVmMoKSxDVmMpO3pVYz1uZXcgTUJkKFN6ZSxBVWMpfQpmdW5jdGlvbiBEd2QoKXtod2QuY2FsbCh0aGlzLF9DZSwoSHBkKCksR3BkKSk7dGhpcy5wPW51bGw7dGhpcy5hPW51bGw7dGhpcy5mPW51bGw7dGhpcy5uPW51bGw7dGhpcy5nPW51bGw7dGhpcy5jPW51bGw7dGhpcy5pPW51bGw7dGhpcy5qPW51bGw7dGhpcy5kPW51bGw7dGhpcy5iPW51bGw7dGhpcy5lPW51bGw7dGhpcy5rPW51bGw7dGhpcy5vPW51bGw7dGhpcy5zPW51bGw7dGhpcy5xPWZhbHNlO3RoaXMucj1mYWxzZX0KZnVuY3Rpb24gQkJkKCl7QkJkPVpjYjtBQmQ9bmV3IENCZChzd2UsMCk7eEJkPW5ldyBDQmQoJ0lOU0lERV9TRUxGX0xPT1BTJywxKTt5QmQ9bmV3IENCZCgnTVVMVElfRURHRVMnLDIpO3dCZD1uZXcgQ0JkKCdFREdFX0xBQkVMUycsMyk7ekJkPW5ldyBDQmQoJ1BPUlRTJyw0KTt1QmQ9bmV3IENCZCgnQ09NUE9VTkQnLDUpO3RCZD1uZXcgQ0JkKCdDTFVTVEVSUycsNik7dkJkPW5ldyBDQmQoJ0RJU0NPTk5FQ1RFRCcsNyl9CmZ1bmN0aW9uIG9GZChhLGIsYyl7dmFyIGQsZSxmO2lmKGEuTWooKSl7Zj1hLk5qKCk7KythLmo7YS5uaihiLGEuV2koYixjKSk7ZD1hLkZqKDMsbnVsbCxjLGIsZik7aWYoYS5KaigpKXtlPWEuS2ooYyxudWxsKTtpZighZSl7YS5HaihkKX1lbHNle2Uua2ooZCk7ZS5saigpfX1lbHNle2EuR2ooZCl9fWVsc2V7KythLmo7YS5uaihiLGEuV2koYixjKSk7aWYoYS5KaigpKXtlPWEuS2ooYyxudWxsKTshIWUmJmUubGooKX19fQpmdW5jdGlvbiBTaGIoYSxiKXt2YXIgYyxkLGU7aWYoYj09MCl7cmV0dXJuIChhLmFbMF0mMSkhPTB9aWYoYjwwKXt0aHJvdyBzY2IobmV3IGtkYignTmVnYXRpdmUgYml0IGFkZHJlc3MnKSl9ZT1iPj41O2lmKGU+PWEuZCl7cmV0dXJuIGEuZTwwfWM9YS5hW2VdO2I9MTw8KGImMzEpO2lmKGEuZTwwKXtkPUxoYihhKTtpZihlPGQpe3JldHVybiBmYWxzZX1lbHNlIGQ9PWU/KGM9LWMpOihjPX5jKX1yZXR1cm4gKGMmYikhPTB9CmZ1bmN0aW9uIG8wYihhKXt2YXIgYixjLGQsZSxmO2U9bmV3IFVsYjtmPXAwYihhLGUpO2I9SkQoV01iKGEsKElxYygpLHNxYykpLDkpO2lmKGIpe2ZvcihkPW5ldyBybWIoYi5qKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMTEpO1hEKFdNYihjLGtxYykpPT09WEQoYSkmJihmPSR3bmQuTWF0aC5tYXgoZixwMGIoYyxlKSkpfX1lLmMubGVuZ3RoPT0wfHxaTWIoYSxpcWMsZik7cmV0dXJuIGYhPS0xP2U6bnVsbH0KZnVuY3Rpb24gbThjKGEsYixjLGQpe3ZhciBlO0pEKGMuYiw2OCk7SkQoYy5iLDY4KTtKRChkLmIsNjgpO0pEKGQuYiw2OCk7ZT1CZGQob2RkKEpEKGMuYiw2OCkuYyksSkQoZC5iLDY4KS5jKTt4ZGQoZSxaTGIoSkQoYy5iLDY4KSxKRChkLmIsNjgpLGUpKTtKRChkLmIsNjgpO0pEKGQuYiw2OCk7SkQoZC5iLDY4KS5jLmErZS5hO0pEKGQuYiw2OCkuYy5iK2UuYjtKRChkLmIsNjgpO0xsYihkLmEsbmV3IHI4YyhhLGIsZCkpfQpmdW5jdGlvbiBvV2QoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtmPWIuZTtpZihmKXtjPWNxZChmKTtkPUpEKGEuZyw2NzQpO2ZvcihnPTA7ZzxhLmk7KytnKXtpPWRbZ107aWYoQ1pkKGkpPT1jKXtlPSghaS5kJiYoaS5kPW5ldyBxVmQoZzYsaSwxKSksaS5kKTtoPUpEKGMuSWgoUHFkKGYsZi5DYixmLkRiPj4xNikpLDE1KS5iZChmKTtpZihoPGUuaSl7cmV0dXJuIG9XZChhLEpEKG5EZChlLGgpLDg3KSl9fX19cmV0dXJuIGJ9CmZ1bmN0aW9uIFljYihhLGIsYyl7dmFyIGQ9WGNiLGg7dmFyIGU9ZFthXTt2YXIgZj1lIGluc3RhbmNlb2YgQXJyYXk/ZVswXTpudWxsO2lmKGUmJiFmKXtfPWV9ZWxzZXtfPShoPWImJmIucHJvdG90eXBlLCFoJiYoaD1YY2JbYl0pLF9jYihoKSk7Xy5QbT1jOyFiJiYoXy5RbT1iZGIpO2RbYV09X31mb3IodmFyIGc9MztnPGFyZ3VtZW50cy5sZW5ndGg7KytnKXthcmd1bWVudHNbZ10ucHJvdG90eXBlPV99ZiYmKF8uT209Zil9CmZ1bmN0aW9uIGNzKGEpe3ZhciBiO3doaWxlKCFKRChRYihhLmEpLDQ5KS5PYigpKXthLmQ9YnMoYSk7aWYoIWEuZCl7cmV0dXJuIGZhbHNlfWEuYT1KRChhLmQuUGIoKSw0OSk7aWYoUkQoYS5hLDM3KSl7Yj1KRChhLmEsMzcpO2EuYT1iLmE7IWEuYiYmKGEuYj1uZXcgbmxiKTska2IoYS5iLGEuZCk7aWYoYi5iKXt3aGlsZSghZWxiKGIuYikpeyRrYihhLmIsSkQoa2xiKGIuYiksNDkpKX19YS5kPWIuZH19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIElHYihhLGIpe3ZhciBjLGQsZSxmO2U9MTtiLmo9dHJ1ZTtmPW51bGw7Zm9yKGQ9bmV3IHJtYihPRmIoYikpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwyMTYpO2lmKCFhLmNbYy5jXSl7YS5jW2MuY109dHJ1ZTtmPUFGYihjLGIpO2lmKGMuZil7ZSs9SUdiKGEsZil9ZWxzZSBpZighZi5qJiZjLmE9PWMuZS5lLWMuZC5lKXtjLmY9dHJ1ZTtOcmIoYS5wLGMpO2UrPUlHYihhLGYpfX19cmV0dXJuIGV9CmZ1bmN0aW9uIFlSYihhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IHJtYihhLmEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksODIpO2Q9KHREYigwKSwwKTtpZihkPjApeyEoVWdkKGEuYS5jKSYmYi5uLmQpJiYhKFZnZChhLmEuYykmJmIubi5iKSYmKGIuZy5kKz0kd25kLk1hdGgubWF4KDAsZC8yLTAuNSkpOyEoVWdkKGEuYS5jKSYmYi5uLmEpJiYhKFZnZChhLmEuYykmJmIubi5jKSYmKGIuZy5hLT1kLTEpfX19CmZ1bmN0aW9uIEU1YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2Y9SkQoTWxiKGIuZSwwKSwxOCkuYztkPWYuaTtlPWQuaztpPUpEKE1sYihjLmcsMCksMTgpLmQ7Zz1pLmk7aD1nLms7ZT09KERZYigpLHlZYik/Wk1iKGEsKElxYygpLGZxYyksSkQoV01iKGQsZnFjKSwxMSkpOlpNYihhLChJcWMoKSxmcWMpLGYpO2g9PXlZYj9aTWIoYSwoSXFjKCksZ3FjKSxKRChXTWIoZyxncWMpLDExKSk6Wk1iKGEsKElxYygpLGdxYyksaSl9CmZ1bmN0aW9uIGY3YihhLGIpe3ZhciBjLGQsZSxmLGcsaDtmb3IoZj1uZXcgcm1iKGEuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDI1KTtmb3IoaD1uZXcgcm1iKGUuYSk7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDkpO2cuaz09KERZYigpLHhZYikmJmI3YihnLGIpO2ZvcihkPW5ldyBlcyhJcihrWWIoZykuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7YTdiKGMsYil9fX19CmZ1bmN0aW9uIEE3YihhLGIpe3ZhciBjLGQsZTtiLlNnKCdMYXllciBjb25zdHJhaW50IHByZXByb2Nlc3NpbmcnLDEpO2M9bmV3IFVsYjtlPW5ldyBBamIoYS5hLDApO3doaWxlKGUuYjxlLmQuZ2MoKSl7ZD0ockRiKGUuYjxlLmQuZ2MoKSksSkQoZS5kLlhiKGUuYz1lLmIrKyksOSkpO2lmKHo3YihkKSl7eDdiKGQpO1lDYihjLmMsZCk7dGpiKGUpfX1jLmMubGVuZ3RoPT0wfHxaTWIoYSwoSXFjKCksWHBjKSxjKTtiLlRnKCl9CmZ1bmN0aW9uIGltYyhhKXt2YXIgYixjLGQ7dGhpcy5jPWE7ZD1KRChXTWIoYSwoQndjKCkscnVjKSksODYpO2I9QmViKE1EKFdNYihhLFR0YykpKTtjPUJlYihNRChXTWIoYSxyd2MpKSk7ZD09KFRnZCgpLFBnZCl8fGQ9PVFnZHx8ZD09UmdkPyh0aGlzLmI9YipjKToodGhpcy5iPTEvKGIqYykpO3RoaXMuaj1CZWIoTUQoV01iKGEsZndjKSkpO3RoaXMuZT1CZWIoTUQoV01iKGEsZXdjKSkpO3RoaXMuZj1hLmIuYy5sZW5ndGh9CmZ1bmN0aW9uIGJDYyhhKXt2YXIgYixjO2EuZT1TQyhjRSxpc2UsMzAsYS5wLmMubGVuZ3RoLDE1LDEpO2Euaz1TQyhjRSxpc2UsMzAsYS5wLmMubGVuZ3RoLDE1LDEpO2ZvcihjPW5ldyBybWIoYS5wKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksOSk7YS5lW2IucF09R3IobmV3IGVzKElyKGhZYihiKS5hLkpjKCksbmV3IGVyKSkpO2Eua1tiLnBdPUdyKG5ldyBlcyhJcihrWWIoYikuYS5KYygpLG5ldyBlcikpKX19CmZ1bmN0aW9uIGVDYyhhKXt2YXIgYixjLGQsZSxmLGc7ZT0wO2EucT1uZXcgVWxiO2I9bmV3IFFyYjtmb3IoZz1uZXcgcm1iKGEucCk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDkpO2YucD1lO2ZvcihkPW5ldyBlcyhJcihrWWIoZikuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7TnJiKGIsYy5kLmkpfWIuYS5BYyhmKSE9bnVsbDtJbGIoYS5xLG5ldyBTcmIoYikpO2IuYS4kYigpOysrZX19CmZ1bmN0aW9uIHREKGEsYil7dmFyIGMsZCxlLGYsZztiJj02MztjPWEuaDtkPShjJkJzZSkhPTA7ZCYmKGN8PS0xMDQ4NTc2KTtpZihiPDIyKXtnPWM+PmI7Zj1hLm0+PmJ8Yzw8MjItYjtlPWEubD4+YnxhLm08PDIyLWJ9ZWxzZSBpZihiPDQ0KXtnPWQ/QXNlOjA7Zj1jPj5iLTIyO2U9YS5tPj5iLTIyfGM8PDQ0LWJ9ZWxzZXtnPWQ/QXNlOjA7Zj1kP3pzZTowO2U9Yz4+Yi00NH1yZXR1cm4gX0MoZSZ6c2UsZiZ6c2UsZyZBc2UpfQpmdW5jdGlvbiBOS2QoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYS5hLmY+MCYmUkQoYiw0Mykpe2EuYS5ZaigpO2o9SkQoYiw0Myk7aT1qLmpkKCk7Zj1pPT1udWxsPzA6dGIoaSk7Zz1BSmQoYS5hLGYpO2M9YS5hLmRbZ107aWYoYyl7ZD1KRChjLmcsMzcxKTtrPWMuaTtmb3IoaD0wO2g8azsrK2gpe2U9ZFtoXTtpZihlLnhpKCk9PWYmJmUuRmIoaikpe05LZChhLGopO3JldHVybiB0cnVlfX19fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gZ2ZlKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2I9YS5taShCRmUpO2lmKGIpe2g9T0QoeEpkKCghYi5iJiYoYi5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsYikpLGIuYiksJ3NldHRpbmdEZWxlZ2F0ZXMnKSk7aWYoaCE9bnVsbCl7Yz1uZXcgVWxiO2ZvcihlPW1nYihoLCdcXHcrJyksZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdO1lDYihjLmMsZCl9cmV0dXJuIGN9fXJldHVybiBwbmIoKSxwbmIoKSxtbmJ9CmZ1bmN0aW9uIHZoYyhhKXt2YXIgYixjLGQsZTtmb3IoZT1KRChRYyhhLmEsKCRnYygpLFhnYykpLDE1KS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDEwNSk7Yz0oYj1FYyhkLmspLGIuR2MoKFJqZCgpLHhqZCkpP2IuR2Mod2pkKT9iLkdjKE9qZCk/Yi5HYyhRamQpP251bGw6Z2hjOmloYzpoaGM6ZmhjKTtuaGMoYSxkLGNbMF0sKEloYygpLEZoYyksMCk7bmhjKGEsZCxjWzFdLEdoYywxKTtuaGMoYSxkLGNbMl0sSGhjLDEpfX0KZnVuY3Rpb24gaGtjKGEsYil7dmFyIGMsZDtjPWlrYyhiKTtsa2MoYSxiLGMpO1hOYyhhLmEsSkQoV01iKGdZYihiLmIpLChJcWMoKSx2cWMpKSwyMzMpKTtna2MoYSk7ZmtjKGEsYik7ZD1TQyhjRSxpc2UsMzAsYi5iLmouYy5sZW5ndGgsMTUsMSk7b2tjKGEsYiwoUmpkKCkseGpkKSxkLGMpO29rYyhhLGIsd2pkLGQsYyk7b2tjKGEsYixPamQsZCxjKTtva2MoYSxiLFFqZCxkLGMpO2EuYT1udWxsO2EuYz1udWxsO2EuYj1udWxsfQpmdW5jdGlvbiBBdGQoYSxiLGMpe3N3aXRjaChiKXtjYXNlIDc6IWEuZSYmKGEuZT1uZXcgcmVlKHgzLGEsNyw0KSk7UkdkKGEuZSk7IWEuZSYmKGEuZT1uZXcgcmVlKHgzLGEsNyw0KSk7dkNkKGEuZSxKRChjLDE2KSk7cmV0dXJuO2Nhc2UgODohYS5kJiYoYS5kPW5ldyByZWUoeDMsYSw4LDUpKTtSR2QoYS5kKTshYS5kJiYoYS5kPW5ldyByZWUoeDMsYSw4LDUpKTt2Q2QoYS5kLEpEKGMsMTYpKTtyZXR1cm47fWJ0ZChhLGIsYyl9CmZ1bmN0aW9uIE50KGEsYil7dmFyIGMsZCxlLGYsZztpZihYRChiKT09PVhEKGEpKXtyZXR1cm4gdHJ1ZX1pZighUkQoYiwxNSkpe3JldHVybiBmYWxzZX1nPUpEKGIsMTUpO2lmKGEuZ2MoKSE9Zy5nYygpKXtyZXR1cm4gZmFsc2V9Zj1nLkpjKCk7Zm9yKGQ9YS5KYygpO2QuT2IoKTspe2M9ZC5QYigpO2U9Zi5QYigpO2lmKCEoWEQoYyk9PT1YRChlKXx8YyE9bnVsbCYmcGIoYyxlKSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9CmZ1bmN0aW9uIHYzYihhLGIpe3ZhciBjLGQsZSxmO2Y9SkQoeUJiKERCYihEQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYi5iLDE2KSksbmV3IEIzYiksbmV3IEQzYiksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbKGxBYigpLGpBYildKSkpLDE1KTtmLkljKG5ldyBGM2IpO2M9MDtmb3IoZT1mLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksMTEpO2QucD09LTEmJnUzYihhLGQsYysrKX19CmZ1bmN0aW9uIGZhYyhhLGIpe3ZhciBjLGQsZSxmLGc7Yi5TZygnUG9ydCBzaWRlIHByb2Nlc3NpbmcnLDEpO2ZvcihnPW5ldyBybWIoYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZyksOSk7Z2FjKGUpfWZvcihkPW5ldyBybWIoYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMjUpO2ZvcihmPW5ldyBybWIoYy5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksOSk7Z2FjKGUpfX1iLlRnKCl9CmZ1bmN0aW9uIE54YyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBsS2M7Y2FzZSAxOnJldHVybiBuZXcgR0hjO2Nhc2UgMjpyZXR1cm4gbmV3IFdIYztjYXNlIDM6cmV0dXJuIG5ldyBkTGM7Y2FzZSA0OnJldHVybiBuZXcgQkljO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJ05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIG5vZGUgcGxhY2VyICcrKGEuZiE9bnVsbD9hLmY6JycrYS5nKSkpO319CmZ1bmN0aW9uIEFuYyhhKXtzd2l0Y2goYS5nKXtjYXNlIDA6cmV0dXJuIG5ldyBYemM7Y2FzZSAxOnJldHVybiBuZXcgUXpjO2Nhc2UgMjpyZXR1cm4gbmV3IGZBYztjYXNlIDM6cmV0dXJuIG5ldyBtQWM7Y2FzZSA0OnJldHVybiBuZXcgX3pjO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJ05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGN5Y2xlIGJyZWFrZXIgJysoYS5mIT1udWxsP2EuZjonJythLmcpKSk7fX0KZnVuY3Rpb24gZkxjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2Q9bmV3IFhzYjtnPVR4KG5ldyBkbmIoYS5nKSk7Zm9yKGY9Zy5hLmVjKCkuSmMoKTtmLk9iKCk7KXtlPUpEKGYuUGIoKSw5KTtpZighZSl7Yi5fZygnVGhlcmUgYXJlIG5vIGNsYXNzZXMgaW4gYSBiYWxhbmNlZCBsYXlvdXQuJyk7YnJlYWt9aD1hLmpbZS5wXTtjPUpEKFRzYihkLGgpLDE1KTtpZighYyl7Yz1uZXcgVWxiO1VzYihkLGgsYyl9Yy5FYyhlKX1yZXR1cm4gZH0KZnVuY3Rpb24gTFZjKGEsYil7dmFyIGMsZCxlLGYsZztkPW5ldyBNdGI7RHRiKGQsYixkLmMuYixkLmMpO2Rve2M9KHJEYihkLmIhPTApLEpEKEt0YihkLGQuYS5hKSwzOSkpO2EuYltjLmddPTE7Zm9yKGY9R3RiKGMuZCwwKTtmLmIhPWYuZC5jOyl7ZT1KRChVdGIoZiksNjUpO2c9ZS5jO2EuYltnLmddPT0xP0F0YihhLmEsZSk6YS5iW2cuZ109PTI/KGEuYltnLmddPTEpOkR0YihkLGcsZC5jLmIsZC5jKX19d2hpbGUoZC5iIT0wKX0KZnVuY3Rpb24geXlkKGEsYil7aWYoUkQoYiwyMDYpKXtyZXR1cm4gWndkKEpEKGIsMjcpKX1lbHNlIGlmKFJEKGIsMTkzKSl7cmV0dXJuIG94ZChKRChiLDEyNCkpfWVsc2UgaWYoUkQoYiwzNTkpKXtyZXR1cm4gSHdkKEpEKGIsMTUzKSl9ZWxzZSBpZihSRChiLDI2OCkpe3JldHVybiBteWQoYSxKRChiLDg1KSl9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYih4RGUrRWUobmV3IGRuYihXQyhPQyhhSiwxKSxOcWUsMSw1LFtiXSkpKSkpfX0KZnVuY3Rpb24gaVViKGEsYixjKXt2YXIgZDtkPW51bGw7ISFiJiYoZD1iLmQpO3VVYihhLG5ldyBvU2IoYi5uLmEtZC5iK2MuYSxiLm4uYi1kLmQrYy5iKSk7dVViKGEsbmV3IG9TYihiLm4uYS1kLmIrYy5hLGIubi5iK2Iuby5iK2QuYStjLmIpKTt1VWIoYSxuZXcgb1NiKGIubi5hK2Iuby5hK2QuYytjLmEsYi5uLmItZC5kK2MuYikpO3VVYihhLG5ldyBvU2IoYi5uLmErYi5vLmErZC5jK2MuYSxiLm4uYitiLm8uYitkLmErYy5iKSl9CmZ1bmN0aW9uIHUzYihhLGIsYyl7dmFyIGQsZSxmO2IucD1jO2ZvcihmPURsKHlsKFdDKE9DKFZJLDEpLE5xZSwyMCwwLFtuZXcgZFpiKGIpLG5ldyBsWmIoYildKSkpO2NzKGYpOyl7ZD1KRChkcyhmKSwxMSk7ZC5wPT0tMSYmdTNiKGEsZCxjKX1pZihiLmkuaz09KERZYigpLHlZYikpe2ZvcihlPW5ldyBybWIoYi5pLmopO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxMSk7ZCE9YiYmZC5wPT0tMSYmdTNiKGEsZCxjKX19fQpmdW5jdGlvbiBVTmMoYSl7dmFyIGIsYyxkLGUsZjtlPUpEKHlCYihBQmIoTkJiKGEpKSxoQWIobmV3IHpBYixuZXcgeEFiLG5ldyBGQWIsV0MoT0MoSEwsMSksRXJlLDEzMSwwLFsobEFiKCksakFiKV0pKSksMTUpO2Q9bXplO2lmKGUuZ2MoKT49Mil7Yz1lLkpjKCk7Yj1NRChjLlBiKCkpO3doaWxlKGMuT2IoKSl7Zj1iO2I9TUQoYy5QYigpKTtkPSR3bmQuTWF0aC5taW4oZCwodERiKGIpLGIpLSh0RGIoZiksZikpfX1yZXR1cm4gZH0KZnVuY3Rpb24gbFFjKGEsYil7dmFyIGMsZCxlO2U9bmV3IFVsYjtmb3IoZD1HdGIoYi5hLDApO2QuYiE9ZC5kLmM7KXtjPUpEKFV0YihkKSw2NSk7Yy5iLmc9PWEuZyYmIWNnYihjLmIuYyxEemUpJiZYRChXTWIoYy5iLChrVmMoKSxpVmMpKSkhPT1YRChXTWIoYy5jLGlWYykpJiYheEJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGUsMTYpKSxuZXcgUlFjKGMpKSYmKFlDYihlLmMsYyksdHJ1ZSl9U2xiKGUsbmV3IFRRYyk7cmV0dXJuIGV9CmZ1bmN0aW9uIFd1KGEsYil7dmFyIGMsZCxlO2lmKFhEKGIpPT09WEQoUWIoYSkpKXtyZXR1cm4gdHJ1ZX1pZighUkQoYiwxNSkpe3JldHVybiBmYWxzZX1kPUpEKGIsMTUpO2U9YS5nYygpO2lmKGUhPWQuZ2MoKSl7cmV0dXJuIGZhbHNlfWlmKFJEKGQsNTkpKXtmb3IoYz0wO2M8ZTtjKyspe2lmKCFIYihhLlhiKGMpLGQuWGIoYykpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfWVsc2V7cmV0dXJuIHlyKGEuSmMoKSxkLkpjKCkpfX0KZnVuY3Rpb24gZDZiKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksajtoPSFQQmIoQkJiKGEuTWMoKSxuZXcgRHpiKG5ldyBoNmIpKSkuemQoKHdCYigpLHZCYikpO2c9YTtmPT0oVGdkKCksU2dkKSYmKGc9ZHYoZykpO2ZvcihqPWcuSmMoKTtqLk9iKCk7KXtpPUpEKGouUGIoKSw3Mik7aS5uLmE9Yi5hO2g/KGkubi5iPWIuYisoZC5iLWkuby5iKS8yKTplPyhpLm4uYj1iLmIpOihpLm4uYj1iLmIrZC5iLWkuby5iKTtiLmErPWkuby5hK2N9fQpmdW5jdGlvbiBSeWQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqO2lmKGMpe2Y9Yy5hLmxlbmd0aDtkPW5ldyBScGUoZik7Zm9yKGg9KGQuYi1kLmEpKmQuYzwwPyhRcGUoKSxQcGUpOm5ldyBscWUoZCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMTcpO2k9X3hkKGMsZy5hKTtpZihpKXtqPWVDZChieWQoaSxpRGUpLGIpO1FpYihhLmssaixpKTtlPXZEZSBpbiBpLmE7ZSYmUHNkKGosYnlkKGksdkRlKSk7eXpkKGksaik7enpkKGksail9fX19CmZ1bmN0aW9uIFdQYihhLGIsYyl7dmFyIGQsZSxmLGcsaDtoPWM7IWgmJihoPXZsZChuZXcgd2xkLDApKTtoLlNnKHJ2ZSwxKTttUWIoYS5jLGIpO2c9UlViKGEuYSxiKTtpZihnLmdjKCk9PTEpe1lQYihKRChnLlhiKDApLDM2KSxoKX1lbHNle2Y9MS9nLmdjKCk7Zm9yKGU9Zy5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDM2KTtpZihjLllnKCkpe3JldHVybn1ZUGIoZCxoLmJoKGYpKX19UFViKGEuYSxnLGIpO1pQYihiKTtoLlRnKCl9CmZ1bmN0aW9uIFdiYyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtlPWEuZjshZSYmKGU9SkQoYS5hLmEuZWMoKS5KYygpLlBiKCksNjApKTtYYmMoZSxiLGMpO2lmKGEuYS5hLmdjKCk9PTEpe3JldHVybn1kPWIqYztmb3IoZz1hLmEuYS5lYygpLkpjKCk7Zy5PYigpOyl7Zj1KRChnLlBiKCksNjApO2lmKGYhPWUpe2g9bmRjKGYpO2lmKGguZi5kKXtmLmQuZCs9ZCtmdWU7Zi5kLmEtPWQrZnVlfWVsc2UgaC5mLmEmJihmLmQuYS09ZCtmdWUpfX19CmZ1bmN0aW9uIHBLYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsO2U9YztrPWI7Zj1rO2Rve2Y9YS5hW2YucF07aD0obD1hLmdbZi5wXSxCZWIoYS5wW2wucF0pK0JlYihhLmRbZi5wXSktZi5kLmQpO2k9c0tjKGYsZCk7aWYoaSl7Zz0oaj1hLmdbaS5wXSxCZWIoYS5wW2oucF0pK0JlYihhLmRbaS5wXSkraS5vLmIraS5kLmEpO2U9JHduZC5NYXRoLm1pbihlLGgtKGcrZXpjKGEuayxmLGkpKSl9fXdoaWxlKGshPWYpO3JldHVybiBlfQpmdW5jdGlvbiBxS2MoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbDtlPWM7az1iO2Y9aztkb3tmPWEuYVtmLnBdO2c9KGw9YS5nW2YucF0sQmViKGEucFtsLnBdKStCZWIoYS5kW2YucF0pK2Yuby5iK2YuZC5hKTtpPXJLYyhmLGQpO2lmKGkpe2g9KGo9YS5nW2kucF0sQmViKGEucFtqLnBdKStCZWIoYS5kW2kucF0pLWkuZC5kKTtlPSR3bmQuTWF0aC5taW4oZSxoLShnK2V6YyhhLmssZixpKSkpfX13aGlsZShrIT1mKTtyZXR1cm4gZX0KZnVuY3Rpb24gRzNjKGEsYil7dmFyIGM7Yi5TZygnRXF1YWwgV2hpdGVzcGFjZSBFbGltaW5hdG9yJywxKTtpZihsc2QoYSwoaDFjKCksZjFjKSkpe0wzYyhKRChrc2QoYSxmMWMpLDE1KSxCZWIoTUQoa3NkKGEsJDBjKSkpLChjPUJlYihNRChrc2QoYSxZMGMpKSksQmViKE1EKGtzZChhLChrMmMoKSxkMmMpKSkpLGMpKX1lbHNle3Rocm93IHNjYihuZXcgWThjKCdUaGUgZ3JhcGggZG9lcyBub3QgY29udGFpbiByb3dzLicpKX1iLlRnKCl9CmZ1bmN0aW9uIGtzZChhLGIpe3ZhciBjLGQ7ZD0oIWEubyYmKGEubz1uZXcgWVFkKChWcGQoKSxTcGQpLE8zLGEsMCkpLHhKZChhLm8sYikpO2lmKGQhPW51bGwpe3JldHVybiBkfWM9Yi5RZygpO1JEKGMsNCkmJihjPT1udWxsPyghYS5vJiYoYS5vPW5ldyBZUWQoKFZwZCgpLFNwZCksTzMsYSwwKSksSUpkKGEubyxiKSk6KCFhLm8mJihhLm89bmV3IFlRZCgoVnBkKCksU3BkKSxPMyxhLDApKSxFSmQoYS5vLGIsYykpLGEpO3JldHVybiBjfQpmdW5jdGlvbiBFaWQoKXtFaWQ9WmNiO3dpZD1uZXcgRmlkKCdIX0xFRlQnLDApO3ZpZD1uZXcgRmlkKCdIX0NFTlRFUicsMSk7eWlkPW5ldyBGaWQoJ0hfUklHSFQnLDIpO0RpZD1uZXcgRmlkKCdWX1RPUCcsMyk7Q2lkPW5ldyBGaWQoJ1ZfQ0VOVEVSJyw0KTtCaWQ9bmV3IEZpZCgnVl9CT1RUT00nLDUpO3ppZD1uZXcgRmlkKCdJTlNJREUnLDYpO0FpZD1uZXcgRmlkKCdPVVRTSURFJyw3KTt4aWQ9bmV3IEZpZCgnSF9QUklPUklUWScsOCl9CmZ1bmN0aW9uIHVHYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKCFiLmYpe3Rocm93IHNjYihuZXcgVGViKCdUaGUgaW5wdXQgZWRnZSBpcyBub3QgYSB0cmVlIGVkZ2UuJykpfWY9bnVsbDtlPUhxZTtmb3IoZD1uZXcgcm1iKGEuZCk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDIxNik7aD1jLmQ7aT1jLmU7aWYoekdiKGEsaCxiKSYmIXpHYihhLGksYikpe2c9aS5lLWguZS1jLmE7aWYoZzxlKXtlPWc7Zj1jfX19cmV0dXJuIGZ9CmZ1bmN0aW9uIENQYihhKXt2YXIgYixjLGQsZSxmLGc7aWYoYS5mLmUuYy5sZW5ndGg8PTEpe3JldHVybn1iPTA7ZT16UGIoYSk7Yz1Lc2U7ZG97Yj4wJiYoZT1jKTtmb3IoZz1uZXcgcm1iKGEuZi5lKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTUxKTtpZih5ZGIoTEQoV01iKGYsKG5QYigpLGVQYikpKSkpe2NvbnRpbnVlfWQ9eVBiKGEsZik7bWRkKHZkZChmLmQpLGQpfWM9elBiKGEpfXdoaWxlKCFCUGIoYSxiKyssZSxjKSl9CmZ1bmN0aW9uIHZnYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zj1hLmcuYTtnPWEuZy5iO2ZvcihkPW5ldyBybWIoYS5kKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksNzIpO2U9Yy5uO2EuYT09KERnYygpLEFnYyl8fGEuaT09KFJqZCgpLHdqZCk/KGUuYT1mKTphLmE9PUJnY3x8YS5pPT0oUmpkKCksUWpkKT8oZS5hPWYrYS5qLmEtYy5vLmEpOihlLmE9ZisoYS5qLmEtYy5vLmEpLzIpO2UuYj1nO21kZChlLGIpO2crPWMuby5iK2EuZX19CmZ1bmN0aW9uIHR6ZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2o9YTtpPWF5ZChqLCdpbmRpdmlkdWFsU3BhY2luZ3MnKTtpZihpKXtkPWxzZChiLChMZ2QoKSxyZ2QpKTtnPSFkO2lmKGcpe2U9bmV3IE5uZDttc2QoYixyZ2QsZSl9aD1KRChrc2QoYixyZ2QpLDM3Nyk7bD1pO2Y9bnVsbDshIWwmJihmPShrPWdDKGwsU0MoaEosaHJlLDIsMCw2LDEpKSxuZXcgdUMobCxrKSkpO2lmKGYpe2M9bmV3IHBBZChsLGgpO29mYihmLGMpfX19CmZ1bmN0aW9uIHh6ZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07aT1udWxsO2w9YTtrPW51bGw7aWYoRURlIGluIGwuYXx8RkRlIGluIGwuYXx8b0RlIGluIGwuYSl7aj1udWxsO209ZENkKGIpO2c9YXlkKGwsRURlKTtjPW5ldyB0QWQobSk7U3lkKGMuYSxnKTtoPWF5ZChsLEZEZSk7ZD1uZXcgWEFkKG0pO2J6ZChkLmEsaCk7Zj0keGQobCxvRGUpO2U9bmV3IGJCZChtKTtqPShjemQoZS5hLGYpLGYpO2s9an1pPWs7cmV0dXJuIGl9CmZ1bmN0aW9uIGt4KGEsYil7dmFyIGMsZCxlO2lmKGI9PT1hKXtyZXR1cm4gdHJ1ZX1pZihSRChiLDUzNykpe2U9SkQoYiw4MjgpO2lmKGEuYS5kIT1lLmEuZHx8R2goYSkuZ2MoKSE9R2goZSkuZ2MoKSl7cmV0dXJuIGZhbHNlfWZvcihkPUdoKGUpLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksNDEzKTtpZihNdyhhLGMuYS5qZCgpKSE9SkQoYy5hLmtkKCksMTYpLmdjKCkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBxSGMoYSxiKXtpZihhLmM8Yi5jKXtyZXR1cm4gLTF9ZWxzZSBpZihhLmM+Yi5jKXtyZXR1cm4gMX1lbHNlIGlmKGEuYjxiLmIpe3JldHVybiAtMX1lbHNlIGlmKGEuYj5iLmIpe3JldHVybiAxfWVsc2UgaWYoYS5hIT1iLmEpe3JldHVybiB0YihhLmEpLXRiKGIuYSl9ZWxzZSBpZihhLmQ9PSh2SGMoKSx1SGMpJiZiLmQ9PXRIYyl7cmV0dXJuIC0xfWVsc2UgaWYoYS5kPT10SGMmJmIuZD09dUhjKXtyZXR1cm4gMX1yZXR1cm4gMH0KZnVuY3Rpb24gdEtjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7ZT1Lc2U7ZD1Mc2U7Zm9yKGM9bmV3IHJtYihhLmUuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI1KTtmb3IoZz1uZXcgcm1iKGIuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDkpO2k9QmViKGEucFtmLnBdKTtoPWkrQmViKGEuYlthLmdbZi5wXS5wXSk7ZT0kd25kLk1hdGgubWluKGUsaSk7ZD0kd25kLk1hdGgubWF4KGQsaCl9fXJldHVybiBkLWV9CmZ1bmN0aW9uIERMYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zj1iLmE7Zi5jLmk9PWIuYj8oZz1mLmQpOihnPWYuYyk7Zi5jLmk9PWIuYj8oZD1mLmMpOihkPWYuZCk7ZT1vS2MoYS5hLGcsZCk7aWYoZT4wJiZlPG16ZSl7Yz1wS2MoYS5hLGQuaSxlLGEuYyk7dUtjKGEuYSxkLmksLWMpO3JldHVybiBjPjB9ZWxzZSBpZihlPDAmJi1lPG16ZSl7Yz1xS2MoYS5hLGQuaSwtZSxhLmMpO3VLYyhhLmEsZC5pLGMpO3JldHVybiBjPjB9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBsNGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbDtlPShiLWEuZCkvYS5jLmMubGVuZ3RoO2Y9MDthLmErPWM7YS5kPWI7Zm9yKGw9bmV3IHJtYihhLmMpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihsKSwyNyk7aj1rLmc7aT1rLmY7aHRkKGssay5pK2YqZSk7aXRkKGssay5qK2QqYyk7Z3RkKGssay5nK2UpO2V0ZChrLGEuYSk7KytmO2g9ay5nO2c9ay5mO3JuZChrLG5ldyBFZGQoaCxnKSxuZXcgRWRkKGosaSkpfX0KZnVuY3Rpb24gWnVkKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKGE9PW51bGwpe3JldHVybiBudWxsfWg9YS5sZW5ndGg7ZT0oaCsxKS8yfDA7Zz1TQygkRCxaQ2UsMzAsZSwxNSwxKTtoJTIhPTAmJihnWy0tZV09bHZkKChBRGIoaC0xLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaC0xKSkpKTtmb3IoYz0wLGQ9MDtjPGU7KytjKXtiPWx2ZChfZmIoYSxkKyspKTtmPWx2ZChfZmIoYSxkKyspKTtnW2NdPShiPDw0fGYpPDwyND4+MjR9cmV0dXJuIGd9CmZ1bmN0aW9uIHNlYihhKXtpZihhLnhlKCkpe3ZhciBiPWEuYztiLnllKCk/KGEubz0nWycrYi5uKTohYi54ZSgpPyhhLm89J1tMJytiLnZlKCkrJzsnKTooYS5vPSdbJytiLnZlKCkpO2EuYj1iLnVlKCkrJ1tdJzthLms9Yi53ZSgpKydbXSc7cmV0dXJufXZhciBjPWEuajt2YXIgZD1hLmQ7ZD1kLnNwbGl0KCcvJyk7YS5vPXZlYignLicsW2MsdmViKCckJyxkKV0pO2EuYj12ZWIoJy4nLFtjLHZlYignLicsZCldKTthLms9ZFtkLmxlbmd0aC0xXX0KZnVuY3Rpb24gc0diKGEsYil7dmFyIGMsZCxlLGYsZztnPW51bGw7Zm9yKGY9bmV3IHJtYihhLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDEyMyk7aWYoZS5iLmEuYy5sZW5ndGg9PWUuZy5hLmMubGVuZ3RoKXtkPWUuZTtnPURHYihlKTtmb3IoYz1lLmUtSkQoZy5hLDE3KS5hKzE7YzxlLmUrSkQoZy5iLDE3KS5hO2MrKyl7YltjXTxiW2RdJiYoZD1jKX1pZihiW2RdPGJbZS5lXSl7LS1iW2UuZV07KytiW2RdO2UuZT1kfX19fQpmdW5jdGlvbiBvemQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7aj1KRChjLDE0Nyk7az15eWQoYSxiKTtmPW51bGw7ZD1udWxsOyEhayYmKGQ9c3lkKGEsayxiLmkpKTtpZihkIT1udWxsKXtmPWR9ZWxzZXtoPWIuaTtmPWh9VXhkKGosJ3gnLGYpO2c9bnVsbDtlPW51bGw7ISFrJiYoZT10eWQoYSxrLGIuaikpO2lmKGUhPW51bGwpe2c9ZX1lbHNle2k9Yi5qO2c9aX1VeGQoaiwneScsZyk7VXhkKGosZ0RlLGIuZyk7VXhkKGosZkRlLGIuZil9CmZ1bmN0aW9uIElOZChhKXtCTmQoKTt2YXIgYixjLGQsZTtkPWhnYihhLHdnYigzNSkpO2I9ZD09LTE/YTooekRiKDAsZCxhLmxlbmd0aCksYS5zdWJzdHIoMCxkKSk7Yz1kPT0tMT9udWxsOihBRGIoZCsxLGEubGVuZ3RoKzEpLGEuc3Vic3RyKGQrMSkpO2U9ZE9kKEFOZCxiKTtpZighZSl7ZT1WTmQoYik7ZU9kKEFOZCxiLGUpO2MhPW51bGwmJihlPUNOZChlLGMpKX1lbHNlIGMhPW51bGwmJihlPUNOZChlLCh0RGIoYyksYykpKTtyZXR1cm4gZX0KZnVuY3Rpb24ga2FlKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtpPW51bGw7ZT0kOWQoYSxiKTtmb3IoaD0wLGo9ZS5nYygpO2g8ajsrK2gpe2Y9SkQoZS5YYihoKSwxNzgpO2lmKGNnYihkLFZhZShqYWUoYSxmKSkpKXtnPVdhZShqYWUoYSxmKSk7aWYoYz09bnVsbCl7aWYoZz09bnVsbCl7cmV0dXJuIGZ9ZWxzZSAhaSYmKGk9Zil9ZWxzZSBpZihjZ2IoYyxnKSl7cmV0dXJuIGZ9ZWxzZSBnPT1udWxsJiYhaSYmKGk9Zil9fXJldHVybiBudWxsfQpmdW5jdGlvbiBsYWUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2k9bnVsbDtlPV85ZChhLGIpO2ZvcihoPTAsaj1lLmdjKCk7aDxqOysraCl7Zj1KRChlLlhiKGgpLDE3OCk7aWYoY2diKGQsVmFlKGphZShhLGYpKSkpe2c9V2FlKGphZShhLGYpKTtpZihjPT1udWxsKXtpZihnPT1udWxsKXtyZXR1cm4gZn1lbHNlICFpJiYoaT1mKX1lbHNlIGlmKGNnYihjLGcpKXtyZXR1cm4gZn1lbHNlIGc9PW51bGwmJiFpJiYoaT1mKX19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGljZShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2c9bmV3IHZEZDtoPUtmZShhLmUuemgoKSxiKTtkPUpEKGEuZywxMjIpO0lmZSgpO2lmKEpEKGIsNjkpLnVrKCkpe2ZvcihmPTA7ZjxhLmk7KytmKXtlPWRbZl07aC5abChlLklrKCkpJiZ0Q2QoZyxlKX19ZWxzZXtmb3IoZj0wO2Y8YS5pOysrZil7ZT1kW2ZdO2lmKGguWmwoZS5JaygpKSl7aT1lLmtkKCk7dENkKGcsYz9XYmUoYSxiLGYsZy5pLGkpOmkpfX19cmV0dXJuIHREZChnKX0KZnVuY3Rpb24gZGZlKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKGEpe2I9YS5taShCRmUpO2lmKGIpe2c9T0QoeEpkKCghYi5iJiYoYi5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsYikpLGIuYiksJ2NvbnZlcnNpb25EZWxlZ2F0ZXMnKSk7aWYoZyE9bnVsbCl7aD1uZXcgVWxiO2ZvcihkPW1nYihnLCdcXHcrJyksZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO1lDYihoLmMsYyl9cmV0dXJuIGh9fX1yZXR1cm4gcG5iKCkscG5iKCksbW5ifQpmdW5jdGlvbiBlUmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2c9Yj09MT9XUWI6VlFiO2ZvcihmPWcuYS5lYygpLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksODYpO2ZvcihpPUpEKFFjKGEuZi5jLGUpLDIyKS5KYygpO2kuT2IoKTspe2g9SkQoaS5QYigpLDQ3KTtkPUpEKGguYiw4Mik7aj1KRChoLmEsMTk0KTtjPWouYztzd2l0Y2goZS5nKXtjYXNlIDI6Y2FzZSAxOmQuZy5kKz1jO2JyZWFrO2Nhc2UgNDpjYXNlIDM6ZC5nLmMrPWM7fX19fQpmdW5jdGlvbiB2NmIoYSxiKXt2YXIgYyxkLGUsZixnO2M9bmV3IE9xYihNVik7Zm9yKGU9KE5tYygpLFdDKE9DKE1WLDEpLEVyZSwyMzEsMCxbSm1jLExtYyxJbWMsS21jLE1tYyxIbWNdKSksZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdO01xYihjLGQsbmV3IFVsYil9RUJiKEZCYihCQmIoREJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYiwxNikpLG5ldyBMNmIpLG5ldyBONmIpLG5ldyBQNmIoYikpLG5ldyBSNmIoYykpO3JldHVybiBjfQpmdW5jdGlvbiBPYmMoYSxiKXt2YXIgYyxkLGU7Zm9yKGM9MTtjPGEuYy5sZW5ndGg7YysrKXtlPShzRGIoYyxhLmMubGVuZ3RoKSxKRChhLmNbY10sOSkpO2Q9Yzt3aGlsZShkPjAmJkJrYyhiLChzRGIoZC0xLGEuYy5sZW5ndGgpLEpEKGEuY1tkLTFdLDkpKSxlKT4wKXtSbGIoYSxkLChzRGIoZC0xLGEuYy5sZW5ndGgpLEpEKGEuY1tkLTFdLDkpKSk7LS1kfXNEYihkLGEuYy5sZW5ndGgpO2EuY1tkXT1lfWIuYj1uZXcgSXJiO2IuZj1uZXcgSXJifQpmdW5jdGlvbiB6RmMoYSxiLGMpe3ZhciBkLGUsZjtmb3IoZD0xO2Q8YS5jLmxlbmd0aDtkKyspe2Y9KHNEYihkLGEuYy5sZW5ndGgpLEpEKGEuY1tkXSw5KSk7ZT1kO3doaWxlKGU+MCYmYi5MZSgoc0RiKGUtMSxhLmMubGVuZ3RoKSxKRChhLmNbZS0xXSw5KSksZik+MCl7UmxiKGEsZSwoc0RiKGUtMSxhLmMubGVuZ3RoKSxKRChhLmNbZS0xXSw5KSkpOy0tZX1zRGIoZSxhLmMubGVuZ3RoKTthLmNbZV09Zn1jLmE9bmV3IElyYjtjLmI9bmV3IElyYn0KZnVuY3Rpb24gcVpjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbTtmb3IoZj1iLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksMjcpO2s9ZS5pK2UuZy8yO209ZS5qK2UuZi8yO2k9YS5mO2c9aS5pK2kuZy8yO2g9aS5qK2kuZi8yO2o9ay1nO2w9bS1oO2Q9JHduZC5NYXRoLnNxcnQoaipqK2wqbCk7aio9YS5lL2Q7bCo9YS5lL2Q7aWYoYyl7ay09ajttLT1sfWVsc2V7ays9ajttKz1sfWh0ZChlLGstZS5nLzIpO2l0ZChlLG0tZS5mLzIpfX0KZnVuY3Rpb24gUW9lKGEpe3ZhciBiLGMsZDtpZihhLmMpcmV0dXJuO2lmKGEuYj09bnVsbClyZXR1cm47Zm9yKGI9YS5iLmxlbmd0aC00O2I+PTA7Yi09Mil7Zm9yKGM9MDtjPD1iO2MrPTIpe2lmKGEuYltjXT5hLmJbYysyXXx8YS5iW2NdPT09YS5iW2MrMl0mJmEuYltjKzFdPmEuYltjKzNdKXtkPWEuYltjKzJdO2EuYltjKzJdPWEuYltjXTthLmJbY109ZDtkPWEuYltjKzNdO2EuYltjKzNdPWEuYltjKzFdO2EuYltjKzFdPWR9fX1hLmM9dHJ1ZX0KZnVuY3Rpb24gcUVjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2o9LTE7az0wO2ZvcihnPWEsaD0wLGk9Zy5sZW5ndGg7aDxpOysraCl7Zj1nW2hdO2M9bmV3IEhrYyhqPT0tMT9hWzBdOmFbal0sYiwob3hjKCksbnhjKSk7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKyl7Zm9yKGU9ZCsxO2U8Zi5sZW5ndGg7ZSsrKXtYTWIoZltkXSwoSXFjKCksanFjKSkmJlhNYihmW2VdLGpxYykmJkJrYyhjLGZbZF0sZltlXSk+MCYmKytrfX0rK2p9cmV0dXJuIGt9CmZ1bmN0aW9uIEdxZChhKXt2YXIgYixjO2M9bmV3IFdnYihlZWIoYS5PbSkpO2MuYSs9J0AnO1FnYihjLChiPXRiKGEpPj4+MCxiLnRvU3RyaW5nKDE2KSkpO2lmKGEuUmgoKSl7Yy5hKz0nIChlUHJveHlVUkk6ICc7UGdiKGMsYS5YaCgpKTtpZihhLkdoKCkpe2MuYSs9JyBlQ2xhc3M6ICc7UGdiKGMsYS5HaCgpKX1jLmErPScpJ31lbHNlIGlmKGEuR2goKSl7Yy5hKz0nIChlQ2xhc3M6ICc7UGdiKGMsYS5HaCgpKTtjLmErPScpJ31yZXR1cm4gYy5hfQpmdW5jdGlvbiBKRWIoYSl7dmFyIGIsYyxkLGU7aWYoYS5lKXt0aHJvdyBzY2IobmV3IFdlYigoY2ViKFBNKSxIdGUrUE0uaytJdGUpKSl9YS5kPT0oVGdkKCksUmdkKSYmSUViKGEsUGdkKTtmb3IoYz1uZXcgcm1iKGEuYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMzE3KTtiLmc9Yi5pfWZvcihlPW5ldyBybWIoYS5hLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSw2MCk7ZC5pPUxzZX1hLmIuYWYoYSk7cmV0dXJuIGF9CmZ1bmN0aW9uICQ2YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztpPWF2KGEuYy1hLmImYS5hLmxlbmd0aC0xKTtqPW51bGw7az1udWxsO2ZvcihmPW5ldyBCbGIoYSk7Zi5hIT1mLmI7KXtlPUpEKHpsYihmKSw5KTtjPShoPUpEKFdNYihlLChJcWMoKSxmcWMpKSwxMSksIWg/bnVsbDpoLmkpO2Q9KGc9SkQoV01iKGUsZ3FjKSwxMSksIWc/bnVsbDpnLmkpO2lmKGohPWN8fGshPWQpe2M3YihpLGIpO2o9YztrPWR9WUNiKGkuYyxlKX1jN2IoaSxiKX0KZnVuY3Rpb24gdU9jKGEsYil7dmFyIGMsZCxlLGYsZztpZihiPDIqYS5iKXt0aHJvdyBzY2IobmV3IFRlYignVGhlIGtub3QgdmVjdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gdGltZSB0aGUgZGltZW5zaW9uIGVsZW1lbnRzLicpKX1hLmY9MTtmb3IoZT0wO2U8YS5iO2UrKyl7SWxiKGEuZSwwKX1nPWIrMS0yKmEuYjtjPWc7Zm9yKGY9MTtmPGc7ZisrKXtJbGIoYS5lLGYvYyl9aWYoYS5kKXtmb3IoZD0wO2Q8YS5iO2QrKyl7SWxiKGEuZSwxKX19fQpmdW5jdGlvbiBzemQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aj1iO2s9SkQoaHAoeW8oYS5vKSxqKSwyNyk7aWYoIWspe2U9YnlkKGosdkRlKTtoPSJVbmFibGUgdG8gZmluZCBlbGsgbm9kZSBmb3IganNvbiBvYmplY3QgJyIrZTtpPWgrIicgUGFuaWMhIjt0aHJvdyBzY2IobmV3IGV5ZChpKSl9Zj0keGQoaiwnZWRnZXMnKTtjPW5ldyBEemQoYSxrKTtBeWQoYy5hLGMuYixmKTtnPSR4ZChqLGpEZSk7ZD1uZXcgWnpkKGEpO0x5ZChkLmEsZyl9CmZ1bmN0aW9uIHVKZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2lmKGQhPW51bGwpe2U9YS5kW2JdO2lmKGUpe2Y9ZS5nO2k9ZS5pO2ZvcihoPTA7aDxpOysraCl7Zz1KRChmW2hdLDEzNSk7aWYoZy54aSgpPT1jJiZwYihkLGcuamQoKSkpe3JldHVybiBofX19fWVsc2V7ZT1hLmRbYl07aWYoZSl7Zj1lLmc7aT1lLmk7Zm9yKGg9MDtoPGk7KytoKXtnPUpEKGZbaF0sMTM1KTtpZihYRChnLmpkKCkpPT09WEQoZCkpe3JldHVybiBofX19fXJldHVybiAtMX0KZnVuY3Rpb24gZzFkKGEsYil7dmFyIGMsZCxlO2M9Yj09bnVsbD9XZChmc2IoYS5mLG51bGwpKTp6c2IoYS5pLGIpO2lmKFJEKGMsMjQwKSl7ZT1KRChjLDI0MCk7ZS52aSgpPT1udWxsJiZ1bmRlZmluZWQ7cmV0dXJuIGV9ZWxzZSBpZihSRChjLDQ5MSkpe2Q9SkQoYywxOTgzKTtlPWQuYTshIWUmJihlLnliPT1udWxsP3VuZGVmaW5lZDpiPT1udWxsP2dzYihhLmYsbnVsbCxlKTpBc2IoYS5pLGIsZSkpO3JldHVybiBlfWVsc2V7cmV0dXJuIG51bGx9fQpmdW5jdGlvbiBhbWUoYSl7X2xlKCk7dmFyIGIsYyxkLGUsZixnLGg7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtlPWEubGVuZ3RoO2lmKGUlMiE9MClyZXR1cm4gbnVsbDtiPXJnYihhKTtmPWUvMnwwO2M9U0MoJEQsWkNlLDMwLGYsMTUsMSk7Zm9yKGQ9MDtkPGY7ZCsrKXtnPVpsZVtiW2QqMl1dO2lmKGc9PS0xKXJldHVybiBudWxsO2g9WmxlW2JbZCoyKzFdXTtpZihoPT0tMSlyZXR1cm4gbnVsbDtjW2RdPShnPDw0fGgpPDwyND4+MjR9cmV0dXJuIGN9CmZ1bmN0aW9uIG5LYihhLGIsYyl7dmFyIGQsZSxmO2U9SkQoS3FiKGEuaSxiKSwzMTUpO2lmKCFlKXtlPW5ldyBkSWIoYS5kLGIsYyk7THFiKGEuaSxiLGUpO2lmKHVKYihiKSl7RUhiKGEuYSxiLmMsYi5iLGUpfWVsc2V7Zj10SmIoYik7ZD1KRChLcWIoYS5wLGYpLDI1MSk7c3dpdGNoKGYuZyl7Y2FzZSAxOmNhc2UgMzplLmo9dHJ1ZTtuSWIoZCxiLmIsZSk7YnJlYWs7Y2FzZSA0OmNhc2UgMjplLms9dHJ1ZTtuSWIoZCxiLmMsZSk7fX19cmV0dXJuIGV9CmZ1bmN0aW9uIGtjZShhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo7aD1uZXcgdkRkO2k9S2ZlKGEuZS56aCgpLGIpO2U9SkQoYS5nLDEyMik7SWZlKCk7aWYoSkQoYiw2OSkudWsoKSl7Zm9yKGc9MDtnPGEuaTsrK2cpe2Y9ZVtnXTtpLlpsKGYuSWsoKSkmJnRDZChoLGYpfX1lbHNle2ZvcihnPTA7ZzxhLmk7KytnKXtmPWVbZ107aWYoaS5abChmLklrKCkpKXtqPWYua2QoKTt0Q2QoaCxkP1diZShhLGIsZyxoLmksaik6ail9fX1yZXR1cm4gdURkKGgsYyl9CmZ1bmN0aW9uIHJCYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7ZT1hLmJbYi5wXTtpZihlPj0wKXtyZXR1cm4gZX1lbHNle2Y9MTtmb3IoaD1uZXcgcm1iKGIuaik7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDExKTtmb3IoZD1uZXcgcm1iKGcuZyk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDE4KTtqPWMuZC5pO2lmKGIhPWope2k9ckJjKGEsaik7Zj0kd25kLk1hdGgubWF4KGYsaSsxKX19fXFCYyhhLGIsZik7cmV0dXJuIGZ9fQpmdW5jdGlvbiB6QmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2U9YS5iW2IucF07aWYoZT49MCl7cmV0dXJuIGV9ZWxzZXtmPTE7Zm9yKGg9bmV3IHJtYihiLmopO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxMSk7Zm9yKGQ9bmV3IHJtYihnLmUpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxOCk7aj1jLmMuaTtpZihiIT1qKXtpPXpCYyhhLGopO2Y9JHduZC5NYXRoLm1heChmLGkrMSl9fX15QmMoYSxiLGYpO3JldHVybiBmfX0KZnVuY3Rpb24gT25lKGEpe3ZhciBiLGMsZCxlO2U9YS5sZW5ndGg7Yj1udWxsO2ZvcihkPTA7ZDxlO2QrKyl7Yz0oQURiKGQsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChkKSk7aWYoaGdiKCcuKis/e1soKXxcXF4kJyx3Z2IoYykpPj0wKXtpZighYil7Yj1uZXcgSWdiO2Q+MCYmRWdiKGIsKHpEYigwLGQsYS5sZW5ndGgpLGEuc3Vic3RyKDAsZCkpKX1iLmErPSdcXCc7QWdiKGIsYyZXcmUpfWVsc2UgISFiJiZBZ2IoYixjJldyZSl9cmV0dXJuIGI/Yi5hOmF9CmZ1bmN0aW9uIFdSYihhKXt2YXIgYixjLGQ7Zm9yKGM9bmV3IHJtYihhLmEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksODIpO2Q9KHREYigwKSwwKTtpZihkPjApeyEoVWdkKGEuYS5jKSYmYi5uLmQpJiYhKFZnZChhLmEuYykmJmIubi5iKSYmKGIuZy5kLT0kd25kLk1hdGgubWF4KDAsZC8yLTAuNSkpOyEoVWdkKGEuYS5jKSYmYi5uLmEpJiYhKFZnZChhLmEuYykmJmIubi5jKSYmKGIuZy5hKz0kd25kLk1hdGgubWF4KDAsZC0xKSl9fX0KZnVuY3Rpb24gajdiKGEsYixjKXt2YXIgZCxlO2lmKChhLmMtYS5iJmEuYS5sZW5ndGgtMSk9PTIpe2lmKGI9PShSamQoKSx4amQpfHxiPT13amQpe182YihKRChmbGIoYSksMTUpLChvaWQoKSxraWQpKTtfNmIoSkQoZmxiKGEpLDE1KSxsaWQpfWVsc2V7XzZiKEpEKGZsYihhKSwxNSksKG9pZCgpLGxpZCkpO182YihKRChmbGIoYSksMTUpLGtpZCl9fWVsc2V7Zm9yKGU9bmV3IEJsYihhKTtlLmEhPWUuYjspe2Q9SkQoemxiKGUpLDE1KTtfNmIoZCxjKX19fQpmdW5jdGlvbiBnQ2QoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtlPSR1KG5ldyBuQ2QoYSkpO2g9bmV3IEFqYihlLGUuYy5sZW5ndGgpO2Y9JHUobmV3IG5DZChiKSk7aT1uZXcgQWpiKGYsZi5jLmxlbmd0aCk7Zz1udWxsO3doaWxlKGguYj4wJiZpLmI+MCl7Yz0ockRiKGguYj4wKSxKRChoLmEuWGIoaC5jPS0taC5iKSwyNykpO2Q9KHJEYihpLmI+MCksSkQoaS5hLlhiKGkuYz0tLWkuYiksMjcpKTtpZihjPT1kKXtnPWN9ZWxzZXticmVha319cmV0dXJuIGd9CmZ1bmN0aW9uICRhYyhhLGIpe3ZhciBjLGQsZSxmO2IuU2coJ1NlbGYtTG9vcCBwcmUtcHJvY2Vzc2luZycsMSk7Zm9yKGQ9bmV3IHJtYihhLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw5KTtpZihPZ2MoYykpe2U9KGY9bmV3IE5nYyhjKSxaTWIoYywoSXFjKCksenFjKSxmKSxLZ2MoZiksZik7RUJiKEZCYihEQmIobmV3IFJCYihudWxsLG5ldyBHdmIoZS5kLDE2KSksbmV3IGJiYyksbmV3IGRiYyksbmV3IGZiYyk7WWFjKGUpfX1iLlRnKCl9CmZ1bmN0aW9uIGFnYyhhLGIsYyl7dmFyIGQsZSxmLGc7aWYoZWdjKGEsYik+ZWdjKGEsYykpe2Q9bFliKGMsKFJqZCgpLHdqZCkpO2EuZD1kLmRjKCk/MDpYWWIoSkQoZC5YYigwKSwxMSkpO2c9bFliKGIsUWpkKTthLmI9Zy5kYygpPzA6WFliKEpEKGcuWGIoMCksMTEpKX1lbHNle2U9bFliKGMsKFJqZCgpLFFqZCkpO2EuZD1lLmRjKCk/MDpYWWIoSkQoZS5YYigwKSwxMSkpO2Y9bFliKGIsd2pkKTthLmI9Zi5kYygpPzA6WFliKEpEKGYuWGIoMCksMTEpKX19CmZ1bmN0aW9uIGhtYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2I9dHJ1ZTtlPW51bGw7Zj1udWxsO2o6Zm9yKGk9bmV3IHJtYihhLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSw5KTtmb3IoZD1uZXcgZXMoSXIoaFliKGgpLmEuSmMoKSxuZXcgZXIpKTtjcyhkKTspe2M9SkQoZHMoZCksMTgpO2lmKCEhZSYmZSE9aCl7Yj1mYWxzZTticmVhayBqfWU9aDtnPWMuYy5pO2lmKCEhZiYmZiE9Zyl7Yj1mYWxzZTticmVhayBqfWY9Z319cmV0dXJuIGJ9CmZ1bmN0aW9uIE5iZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztrPShkPUpEKGIuZSYmYi5lKCksMTApLG5ldyB1cmIoZCxKRChWQ2IoZCxkLmxlbmd0aCksMTApLDApKTtpPW1nYihjLCdbXFxbXFxdXFxzLF0rJyk7Zm9yKGY9aSxnPTAsaD1mLmxlbmd0aDtnPGg7KytnKXtlPWZbZ107aWYodWdiKGUpLmxlbmd0aD09MCl7Y29udGludWV9aj1NYmQoYSxlKTtpZihqPT1udWxsKXtyZXR1cm4gbnVsbH1lbHNle29yYihrLEpEKGosMjMpKX19cmV0dXJuIGt9CmZ1bmN0aW9uIEhLYihhLGIpe3ZhciBjLGQsZSxmO2M9YS5vLmE7Zm9yKGY9SkQoSkQoUWMoYS5yLGIpLDIyKSw4MykuSmMoKTtmLk9iKCk7KXtlPUpEKGYuUGIoKSwxMTUpO2UuZS5hPWMqQmViKE1EKGUuYi5tZihES2IpKSk7ZS5lLmI9KGQ9ZS5iLGQubmYoKExnZCgpLFhmZCkpP2QuJGYoKT09KFJqZCgpLHhqZCk/LWQuS2YoKS5iLUJlYihNRChkLm1mKFhmZCkpKTpCZWIoTUQoZC5tZihYZmQpKSk6ZC4kZigpPT0oUmpkKCkseGpkKT8tZC5LZigpLmI6MCl9fQpmdW5jdGlvbiBwTmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtmPS0xO2g9LTE7Zm9yKGc9MDtnPGIuYy5sZW5ndGg7ZysrKXtlPShzRGIoZyxiLmMubGVuZ3RoKSxKRChiLmNbZ10sMzM1KSk7aWYoZS5jPmEuYyl7YnJlYWt9ZWxzZSBpZihlLmE+PWEucyl7ZjwwJiYoZj1nKTtoPWd9fWk9KGEucythLmMpLzI7aWYoZj49MCl7ZD1vTmMoYSxiLGYsaCk7aT1CTmMoKHNEYihkLGIuYy5sZW5ndGgpLEpEKGIuY1tkXSwzMzUpKSk7ek5jKGIsZCxjKX1yZXR1cm4gaX0KZnVuY3Rpb24gRHZkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksajtnPShmPW5ldyBLUWQsZik7SVFkKGcsKHREYihiKSxiKSk7aj0oIWcuYiYmKGcuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LGcpKSxnLmIpO2ZvcihpPTE7aTxjLmxlbmd0aDtpKz0yKXtFSmQoaixjW2ktMV0sY1tpXSl9ZD0oIWEuQWImJihhLkFiPW5ldyBYMGQoWjUsYSwwLDMpKSxhLkFiKTtmb3IoaD0wO2g8MDsrK2gpe2U9RVFkKEpEKG5EZChkLGQuaS0xKSw1ODIpKTtkPWV9dENkKGQsZyl9CmZ1bmN0aW9uIHlNYihhLGIsYyxkLGUsZil7dmFyIGcsaCxpO2lmKCFlW2IuYV0pe2VbYi5hXT10cnVlO2c9ZDshZyYmKGc9bmV3IHFOYik7SWxiKGcuZSxiKTtmb3IoaT1mW2IuYV0uSmMoKTtpLk9iKCk7KXtoPUpEKGkuUGIoKSwyODgpO2lmKGguZD09Y3x8aC5jPT1jKXtjb250aW51ZX1oLmMhPWImJnlNYihhLGguYyxiLGcsZSxmKTtoLmQhPWImJnlNYihhLGguZCxiLGcsZSxmKTtJbGIoZy5jLGgpO0tsYihnLmQsaC5iKX1yZXR1cm4gZ31yZXR1cm4gbnVsbH0KZnVuY3Rpb24gSDBiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2I9MDtmb3IoZT1uZXcgcm1iKGEuZSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE4KTtjPXhCYihuZXcgUkJiKG51bGwsbmV3IEd2YihkLmIsMTYpKSxuZXcgWjBiKTtjJiYrK2J9Zm9yKGc9bmV3IHJtYihhLmcpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwxOCk7aD14QmIobmV3IFJCYihudWxsLG5ldyBHdmIoZi5iLDE2KSksbmV3IF8wYik7aCYmKytifXJldHVybiBiPj0yfQpmdW5jdGlvbiB5a2MoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGs7Zj1hLmMuZC5qO2c9SkQoZnUoYywwKSw4KTtmb3Ioaz0xO2s8Yy5iO2srKyl7aj1KRChmdShjLGspLDgpO0R0YihkLGcsZC5jLmIsZC5jKTtoPXdkZChtZGQobmV3IEZkZChnKSxqKSwwLjUpO2k9d2RkKG5ldyBEZGQoRVBjKGYpKSxlKTttZGQoaCxpKTtEdGIoZCxoLGQuYy5iLGQuYyk7Zz1qO2Y9Yj09MD9VamQoZik6U2pkKGYpfUF0YihkLChyRGIoYy5iIT0wKSxKRChjLmMuYi5jLDgpKSl9CmZ1bmN0aW9uIEdpZChhKXtFaWQoKTt2YXIgYixjLGQ7Yz1ucmIoemlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtBaWRdKSk7aWYoX3goUHgoYyxhKSk+MSl7cmV0dXJuIGZhbHNlfWI9bnJiKHdpZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbdmlkLHlpZF0pKTtpZihfeChQeChiLGEpKT4xKXtyZXR1cm4gZmFsc2V9ZD1ucmIoRGlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtDaWQsQmlkXSkpO2lmKF94KFB4KGQsYSkpPjEpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gaU1jKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2I9MDtmb3IoZD1uZXcgcm1iKGEuYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDkpO2ZvcihmPW5ldyBlcyhJcihrWWIoYykuYS5KYygpLG5ldyBlcikpO2NzKGYpOyl7ZT1KRChkcyhmKSwxOCk7aWYoYT09ZS5kLmkuYyYmZS5jLmo9PShSamQoKSxRamQpKXtnPVdZYihlLmMpLmI7aD1XWWIoZS5kKS5iO2I9JHduZC5NYXRoLm1heChiLCR3bmQuTWF0aC5hYnMoaC1nKSl9fX1yZXR1cm4gYn0KZnVuY3Rpb24gYlBjKGEsYixjKXt2YXIgZCxlLGY7Zm9yKGY9bmV3IHJtYihhLnQpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihmKSwyNzApO2lmKGQuYi5zPDAmJmQuYz4wKXtkLmIubi09ZC5jO2QuYi5uPD0wJiZkLmIudT4wJiZBdGIoYixkLmIpfX1mb3IoZT1uZXcgcm1iKGEuaSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDI3MCk7aWYoZC5hLnM8MCYmZC5jPjApe2QuYS51LT1kLmM7ZC5hLnU8PTAmJmQuYS5uPjAmJkF0YihjLGQuYSl9fX0KZnVuY3Rpb24gU0RkKGEpe3ZhciBiLGMsZCxlLGY7aWYoYS5nPT1udWxsKXthLmQ9YS4kaShhLmYpO3RDZChhLGEuZCk7aWYoYS5jKXtmPWEuZjtyZXR1cm4gZn19Yj1KRChhLmdbYS5pLTFdLDQ5KTtlPWIuUGIoKTthLmU9YjtjPWEuJGkoZSk7aWYoYy5PYigpKXthLmQ9Yzt0Q2QoYSxjKX1lbHNle2EuZD1udWxsO3doaWxlKCFiLk9iKCkpe1ZDKGEuZywtLWEuaSxudWxsKTtpZihhLmk9PTApe2JyZWFrfWQ9SkQoYS5nW2EuaS0xXSw0OSk7Yj1kfX1yZXR1cm4gZX0KZnVuY3Rpb24ga2JlKGEsYil7dmFyIGMsZCxlLGYsZyxoO2Q9YjtlPWQuSWsoKTtpZihMZmUoYS5lLGUpKXtpZihlLlBpKCkmJnhiZShhLGUsZC5rZCgpKSl7cmV0dXJuIGZhbHNlfX1lbHNle2g9S2ZlKGEuZS56aCgpLGUpO2M9SkQoYS5nLDEyMik7Zm9yKGY9MDtmPGEuaTsrK2Ype2c9Y1tmXTtpZihoLlpsKGcuSWsoKSkpe2lmKHBiKGcsZCkpe3JldHVybiBmYWxzZX1lbHNle0pEKERDZChhLGYsYiksNzQpO3JldHVybiB0cnVlfX19fXJldHVybiB0Q2QoYSxiKX0KZnVuY3Rpb24gRFliKCl7RFliPVpjYjtBWWI9bmV3IEVZYignTk9STUFMJywwKTt5WWI9bmV3IEVZYignTE9OR19FREdFJywxKTt3WWI9bmV3IEVZYignRVhURVJOQUxfUE9SVCcsMik7QlliPW5ldyBFWWIoJ05PUlRIX1NPVVRIX1BPUlQnLDMpO3hZYj1uZXcgRVliKCdMQUJFTCcsNCk7dlliPW5ldyBFWWIoJ0JSRUFLSU5HX1BPSU5UJyw1KTtDWWI9bmV3IEVZYignUExBQ0VIT0xERVInLDYpO3pZYj1uZXcgRVliKCdOT05TSElGVElOR19QTEFDRUhPTERFUicsNyl9CmZ1bmN0aW9uIFY1YihhLGIsYyxkKXt2YXIgZSxmLGcsaDtlPW5ldyB0WWIoYSk7clliKGUsKERZYigpLHhZYikpO1pNYihlLChJcWMoKSxrcWMpLGIpO1pNYihlLHdxYyxkKTtaTWIoZSwoQndjKCksRXZjKSwoYWpkKCksWGlkKSk7Wk1iKGUsZnFjLGIuYyk7Wk1iKGUsZ3FjLGIuZCk7XzdiKGIsZSk7aD0kd25kLk1hdGguZmxvb3IoYy8yKTtmb3IoZz1uZXcgcm1iKGUuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDExKTtmLm4uYj1ofXJldHVybiBlfQpmdW5jdGlvbiBQTWIoYSxiLGMpe3ZhciBkLGUsZixnLGg7Yy5TZygnRUxLIEZvcmNlJywxKTt5ZGIoTEQoa3NkKGIsKElPYigpLHFPYikpKSl8fFFEYigoZD1uZXcgUkRiKChSb2QoKSxuZXcgZHBkKGIpKSksZCkpO2g9Sk1iKGIpO1FNYihoKTtSTWIoYSxKRChXTWIoaCxsT2IpLDQyMSkpO2c9Qk1iKGEuYSxoKTtmb3IoZj1nLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksMjM0KTt6TmIoYS5iLGUsYy5iaCgxL2cuZ2MoKSkpfWg9QU1iKGcpO0lNYihoKTtjLlRnKCl9CmZ1bmN0aW9uIG5VYihhLGIsYyl7c3dpdGNoKGMuZyl7Y2FzZSAxOnJldHVybiBuZXcgRWRkKGIuYSwkd25kLk1hdGgubWluKGEuZC5iLGIuYikpO2Nhc2UgMjpyZXR1cm4gbmV3IEVkZCgkd25kLk1hdGgubWF4KGEuYy5hLGIuYSksYi5iKTtjYXNlIDM6cmV0dXJuIG5ldyBFZGQoYi5hLCR3bmQuTWF0aC5tYXgoYS5jLmIsYi5iKSk7Y2FzZSA0OnJldHVybiBuZXcgRWRkKCR3bmQuTWF0aC5taW4oYi5hLGEuZC5hKSxiLmIpO31yZXR1cm4gbmV3IEVkZChiLmEsYi5iKX0KZnVuY3Rpb24gTGxjKGEsYil7dmFyIGMsZCxlLGYsZztiLlNnKCdCcmVha2luZyBQb2ludCBQcm9jZXNzb3InLDEpO0tsYyhhKTtpZih5ZGIoTEQoV01iKGEsKEJ3YygpLHh3YykpKSkpe2ZvcihlPW5ldyBybWIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjUpO2M9MDtmb3IoZz1uZXcgcm1iKGQuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDkpO2YucD1jKyt9fUZsYyhhKTtHbGMoYSx0cnVlKTtHbGMoYSxmYWxzZSl9Yi5UZygpfQpmdW5jdGlvbiBaQmQoYSl7dmFyIGIsYyxkO2I9YXYoMSsoIWEuYyYmKGEuYz1uZXcgWDBkKEIzLGEsOSw5KSksYS5jKS5pKTtJbGIoYiwoIWEuZCYmKGEuZD1uZXcgcmVlKHgzLGEsOCw1KSksYS5kKSk7Zm9yKGQ9bmV3IENIZCgoIWEuYyYmKGEuYz1uZXcgWDBkKEIzLGEsOSw5KSksYS5jKSk7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoQUhkKGQpLDEyNCk7SWxiKGIsKCFjLmQmJihjLmQ9bmV3IHJlZSh4MyxjLDgsNSkpLGMuZCkpfXJldHVybiBRYihiKSxuZXcgQmwoYil9CmZ1bmN0aW9uICRCZChhKXt2YXIgYixjLGQ7Yj1hdigxKyghYS5jJiYoYS5jPW5ldyBYMGQoQjMsYSw5LDkpKSxhLmMpLmkpO0lsYihiLCghYS5lJiYoYS5lPW5ldyByZWUoeDMsYSw3LDQpKSxhLmUpKTtmb3IoZD1uZXcgQ0hkKCghYS5jJiYoYS5jPW5ldyBYMGQoQjMsYSw5LDkpKSxhLmMpKTtkLmUhPWQuaS5nYygpOyl7Yz1KRChBSGQoZCksMTI0KTtJbGIoYiwoIWMuZSYmKGMuZT1uZXcgcmVlKHgzLGMsNyw0KSksYy5lKSl9cmV0dXJuIFFiKGIpLG5ldyBCbChiKX0KZnVuY3Rpb24gRWllKGEpe3ZhciBiLGMsZCxlO2lmKGE9PW51bGwpe3JldHVybiBudWxsfWVsc2V7ZD1JcGUoYSx0cnVlKTtlPW5HZS5sZW5ndGg7aWYoY2diKGQuc3Vic3RyKGQubGVuZ3RoLWUsZSksbkdlKSl7Yz1kLmxlbmd0aDtpZihjPT00KXtiPShBRGIoMCxkLmxlbmd0aCksZC5jaGFyQ29kZUF0KDApKTtpZihiPT00Myl7cmV0dXJuIHBpZX1lbHNlIGlmKGI9PTQ1KXtyZXR1cm4gb2llfX1lbHNlIGlmKGM9PTMpe3JldHVybiBwaWV9fXJldHVybiBFZGIoZCl9fQpmdW5jdGlvbiBQRGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtO2w9ZD8oUmpkKCksUWpkKTooUmpkKCksd2pkKTtlPWZhbHNlO2ZvcihpPWJbY10saj0wLGs9aS5sZW5ndGg7ajxrOysrail7aD1pW2pdO2lmKGJqZChKRChXTWIoaCwoQndjKCksRXZjKSksMTAwKSkpe2NvbnRpbnVlfWc9aC5lO209IWxZYihoLGwpLmRjKCkmJiEhZztpZihtKXtmPW1XYihnKTthLmI9bmV3IHZmYyhmLGQ/MDpmLmxlbmd0aC0xKX1lPWV8UURjKGEsaCxsLG0pfXJldHVybiBlfQpmdW5jdGlvbiBqSWMoYSxiLGMsZCl7dmFyIGUsZixnO2c9YldiKGIsYyk7WUNiKGQuYyxiKTtpZihhLmpbZy5wXT09LTF8fGEualtnLnBdPT0yfHxhLmFbYi5wXSl7cmV0dXJuIGR9YS5qW2cucF09LTE7Zm9yKGY9bmV3IGVzKElyKGVZYihnKS5hLkpjKCksbmV3IGVyKSk7Y3MoZik7KXtlPUpEKGRzKGYpLDE4KTtpZighKCFlV2IoZSkmJiEoIWVXYihlKSYmZS5jLmkuYz09ZS5kLmkuYykpfHxlPT1iKXtjb250aW51ZX1yZXR1cm4gakljKGEsZSxnLGQpfXJldHVybiBkfQpmdW5jdGlvbiBESWMoYSl7dmFyIGIsYyxkLGU7Yj0wO2M9MDtmb3IoZT1uZXcgcm1iKGEuaik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDExKTtiPVBjYih0Y2IoYix6QmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGQuZSwxNikpLG5ldyBRSmMpKSkpO2M9UGNiKHRjYihjLHpCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoZC5nLDE2KSksbmV3IFNKYykpKSk7aWYoYj4xfHxjPjEpe3JldHVybiAyfX1pZihiK2M9PTEpe3JldHVybiAyfXJldHVybiAwfQpmdW5jdGlvbiB5dmIoYSxiKXt2YXIgYyxkLGUsZixnLGg7Zj1hLmEqZ3RlK2EuYioxNTAyO2g9YS5iKmd0ZSsxMTtjPSR3bmQuTWF0aC5mbG9vcihoKmh0ZSk7Zis9YztoLT1jKml0ZTtmJT1pdGU7YS5hPWY7YS5iPWg7aWYoYjw9MjQpe3JldHVybiAkd25kLk1hdGguZmxvb3IoYS5hKnN2YltiXSl9ZWxzZXtlPWEuYSooMTw8Yi0yNCk7Zz0kd25kLk1hdGguZmxvb3IoYS5iKnR2YltiXSk7ZD1lK2c7ZD49MjE0NzQ4MzY0OCYmKGQtPTQyOTQ5NjcyOTYpO3JldHVybiBkfX0KZnVuY3Rpb24geE1jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksajtmPW5ldyBVbGI7aj1uZXcgTXRiO2c9bmV3IE10Yjt5TWMoYSxqLGcsYik7d01jKGEsaixnLGIsYyk7Zm9yKGk9bmV3IHJtYihhKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMTE2KTtmb3IoZT1uZXcgcm1iKGguayk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDEzMyk7KCFifHxkLmM9PShpTmMoKSxnTmMpKSYmaC5nPmQuYi5nJiYoWUNiKGYuYyxkKSx0cnVlKX19cmV0dXJuIGZ9CmZ1bmN0aW9uIHk4YyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2g9YS5jO2ZvcihnPSghYy5xPyhwbmIoKSxwbmIoKSxubmIpOmMucSkudmMoKS5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDQzKTtkPSFQQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGgsMTYpKSxuZXcgRHpiKG5ldyBNOGMoYixmKSkpKS56ZCgod0JiKCksdkJiKSk7aWYoZCl7aT1mLmtkKCk7aWYoUkQoaSw0KSl7ZT1jRWQoaSk7ZSE9bnVsbCYmKGk9ZSl9Yi5vZihKRChmLmpkKCksMTQ0KSxpKX19fQpmdW5jdGlvbiBnMmIoYSxiKXt2YXIgYyxkLGUsZjtiLlNnKCdSZXNpemUgY2hpbGQgZ3JhcGggdG8gZml0IHBhcmVudC4nLDEpO2ZvcihkPW5ldyBybWIoYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMjUpO0tsYihhLmEsYy5hKTtjLmEuYy5sZW5ndGg9MH1mb3IoZj1uZXcgcm1iKGEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO3FZYihlLG51bGwpfWEuYi5jLmxlbmd0aD0wO2gyYihhKTshIWEuZSYmZjJiKGEuZSxhKTtiLlRnKCl9CmZ1bmN0aW9uIFM3YihhLGIpe3ZhciBjLGQsZSxmLGc7Yi5TZygnRWRnZSBqb2luaW5nJywxKTtjPXlkYihMRChXTWIoYSwoQndjKCkscHdjKSkpKTtmb3IoZT1uZXcgcm1iKGEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDI1KTtnPW5ldyBBamIoZC5hLDApO3doaWxlKGcuYjxnLmQuZ2MoKSl7Zj0ockRiKGcuYjxnLmQuZ2MoKSksSkQoZy5kLlhiKGcuYz1nLmIrKyksOSkpO2lmKGYuaz09KERZYigpLHlZYikpe1U3YihmLGMpO3RqYihnKX19fWIuVGcoKX0KZnVuY3Rpb24gQzVjKGEsYixjKXt2YXIgZCxlO2Y5YyhhLmIpO2k5YyhhLmIsKHc1YygpLHQ1YyksKHA3YygpLG83YykpO2k5YyhhLmIsdTVjLGIuZyk7aTljKGEuYix2NWMsYi5hKTthLmE9ZDljKGEuYixiKTtjLlNnKCdDb21wYWN0aW9uIGJ5IHNocmlua2luZyBhIHRyZWUnLGEuYS5jLmxlbmd0aCk7aWYoYi5pLmMubGVuZ3RoPjEpe2ZvcihlPW5ldyBybWIoYS5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksNDQpO2QuSWYoYixjLmJoKDEpKX19Yy5UZygpfQpmdW5jdGlvbiB3cWQoYSxiLGMpe3ZhciBkLGUsZjtmPVo5ZCgoR2ZlKCksRWZlKSxhLnpoKCksYik7aWYoZil7SWZlKCk7aWYoIUpEKGYsNjkpLnVrKCkpe2Y9VWFlKGphZShFZmUsZikpO2lmKCFmKXt0aHJvdyBzY2IobmV3IFRlYihMQ2UrYi52ZSgpK01DZSkpfX1lPShkPWEuRWgoZiksSkQoZD49MD9hLkhoKGQsdHJ1ZSx0cnVlKTp1cWQoYSxmLHRydWUpLDE1OSkpO0pEKGUsMjE4KS5VbChiLGMpfWVsc2V7dGhyb3cgc2NiKG5ldyBUZWIoTENlK2IudmUoKStNQ2UpKX19CmZ1bmN0aW9uIGZ5ZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2k9dXlkKGEsSkQoTmliKGEuZSxiKSwyNykpO2g9bnVsbDtpZihpKXtzd2l0Y2goaS5nKXtjYXNlIDM6ZD12eWQoYSxPdGQoYikpO2g9KHREYihjKSxjKSsodERiKGQpLGQpO2JyZWFrO2Nhc2UgMjplPXZ5ZChhLE90ZChiKSk7Zz0odERiKGMpLGMpKyh0RGIoZSksZSk7Zj12eWQoYSxKRChOaWIoYS5lLGIpLDI3KSk7aD1nLSh0RGIoZiksZik7YnJlYWs7ZGVmYXVsdDpoPWM7fX1lbHNle2g9Y31yZXR1cm4gaH0KZnVuY3Rpb24gaHlkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aT11eWQoYSxKRChOaWIoYS5lLGIpLDI3KSk7aD1udWxsO2lmKGkpe3N3aXRjaChpLmcpe2Nhc2UgMzpkPXd5ZChhLE90ZChiKSk7aD0odERiKGMpLGMpKyh0RGIoZCksZCk7YnJlYWs7Y2FzZSAyOmU9d3lkKGEsT3RkKGIpKTtnPSh0RGIoYyksYykrKHREYihlKSxlKTtmPXd5ZChhLEpEKE5pYihhLmUsYiksMjcpKTtoPWctKHREYihmKSxmKTticmVhaztkZWZhdWx0Omg9Yzt9fWVsc2V7aD1jfXJldHVybiBofQpmdW5jdGlvbiBGWmQoYSxiKXt2YXIgYyxkLGUsZixnO2lmKCFiKXtyZXR1cm4gbnVsbH1lbHNle2Y9UkQoYS5DYiw4OCl8fFJEKGEuQ2IsMTAxKTtnPSFmJiZSRChhLkNiLDMzMCk7Zm9yKGQ9bmV3IENIZCgoIWIuYSYmKGIuYT1uZXcgRDVkKGIsZzYsYikpLGIuYSkpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSw4Nyk7ZT1EWmQoYyk7aWYoZj9SRChlLDg4KTpnP1JEKGUsMTU1KTohIWUpe3JldHVybiBlfX1yZXR1cm4gZj8oY1BkKCksVU9kKTooY1BkKCksUk9kKX19CmZ1bmN0aW9uIHNOYyhhLGIpe3ZhciBjLGQsZSxmLGc7Yz1uZXcgVWxiO2U9REJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEsMTYpKSxuZXcgTE5jKTtmPURCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLDE2KSksbmV3IE5OYyk7Zz1VQWIoVEFiKEdCYihEeShXQyhPQyhzTSwxKSxOcWUsODI3LDAsW2UsZl0pKSxuZXcgUE5jKSkpO2ZvcihkPTE7ZDxnLmxlbmd0aDtkKyspe2dbZF0tZ1tkLTFdPj0yKmImJklsYihjLG5ldyBFTmMoZ1tkLTFdK2IsZ1tkXS1iKSl9cmV0dXJuIGN9CmZ1bmN0aW9uIFR5ZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxqLGssbDtpZihjKXtmPWMuYS5sZW5ndGg7ZD1uZXcgUnBlKGYpO2ZvcihoPShkLmItZC5hKSpkLmM8MD8oUXBlKCksUHBlKTpuZXcgbHFlKGQpO2guT2IoKTspe2c9SkQoaC5QYigpLDE3KTtlPV94ZChjLGcuYSk7ISFlJiYoaT1udWxsLGo9aXpkKGEsKGs9KEhwZCgpLGw9bmV3IHJ4ZCxsKSwhIWImJnB4ZChrLGIpLGspLGUpLFBzZChqLGJ5ZChlLHZEZSkpLHl6ZChlLGopLHp6ZChlLGopLHV6ZChhLGUsaikpfX19CmZ1bmN0aW9uIE5UZChhKXt2YXIgYixjLGQsZSxmLGc7aWYoIWEuail7Zz1uZXcgQVlkO2I9RFRkO2Y9Yi5hLnljKGEsYik7aWYoZj09bnVsbCl7Zm9yKGQ9bmV3IENIZChVVGQoYSkpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSwyOSk7ZT1OVGQoYyk7dkNkKGcsZSk7dENkKGcsYyl9Yi5hLkFjKGEpIT1udWxsfXNEZChnKTthLmo9bmV3IGdXZCgoSkQobkRkKFNUZCgoR09kKCksRk9kKS5vKSwxMSksMTkpLGcuaSksZy5nKTtUVGQoYSkuYiY9LTMzfXJldHVybiBhLmp9CmZ1bmN0aW9uIEdpZShhKXt2YXIgYixjLGQsZTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH1lbHNle2Q9SXBlKGEsdHJ1ZSk7ZT1uR2UubGVuZ3RoO2lmKGNnYihkLnN1YnN0cihkLmxlbmd0aC1lLGUpLG5HZSkpe2M9ZC5sZW5ndGg7aWYoYz09NCl7Yj0oQURiKDAsZC5sZW5ndGgpLGQuY2hhckNvZGVBdCgwKSk7aWYoYj09NDMpe3JldHVybiByaWV9ZWxzZSBpZihiPT00NSl7cmV0dXJuIHFpZX19ZWxzZSBpZihjPT0zKXtyZXR1cm4gcmllfX1yZXR1cm4gbmV3IExlYihkKX19CmZ1bmN0aW9uIGhEKGEpe3ZhciBiLGMsZDtjPWEubDtpZigoYyZjLTEpIT0wKXtyZXR1cm4gLTF9ZD1hLm07aWYoKGQmZC0xKSE9MCl7cmV0dXJuIC0xfWI9YS5oO2lmKChiJmItMSkhPTApe3JldHVybiAtMX1pZihiPT0wJiZkPT0wJiZjPT0wKXtyZXR1cm4gLTF9aWYoYj09MCYmZD09MCYmYyE9MCl7cmV0dXJuIGZmYihjKX1pZihiPT0wJiZkIT0wJiZjPT0wKXtyZXR1cm4gZmZiKGQpKzIyfWlmKGIhPTAmJmQ9PTAmJmM9PTApe3JldHVybiBmZmIoYikrNDR9cmV0dXJuIC0xfQpmdW5jdGlvbiB1byhhLGIpe3ZhciBjLGQsZSxmLGc7ZT1iLmEmYS5mO2Y9bnVsbDtmb3IoZD1hLmJbZV07dHJ1ZTtkPWQuYil7aWYoZD09Yil7IWY/KGEuYltlXT1iLmIpOihmLmI9Yi5iKTticmVha31mPWR9Zz1iLmYmYS5mO2Y9bnVsbDtmb3IoYz1hLmNbZ107dHJ1ZTtjPWMuZCl7aWYoYz09Yil7IWY/KGEuY1tnXT1iLmQpOihmLmQ9Yi5kKTticmVha31mPWN9IWIuZT8oYS5hPWIuYyk6KGIuZS5jPWIuYyk7IWIuYz8oYS5lPWIuZSk6KGIuYy5lPWIuZSk7LS1hLmk7KythLmd9CmZ1bmN0aW9uIHp0KGEsYil7dmFyIGM7Yi5kPyhiLmQuYj1iLmIpOihhLmE9Yi5iKTtiLmI/KGIuYi5kPWIuZCk6KGEuZT1iLmQpO2lmKCFiLmUmJiFiLmMpe2M9SkQodnViKEpEKFNpYihhLmIsYi5hKSwyNjApKSwyNjApO2MuYT0wOysrYS5jfWVsc2V7Yz1KRCh2dWIoSkQoTmliKGEuYixiLmEpLDI2MCkpLDI2MCk7LS1jLmE7IWIuZT8oYy5iPUpEKHZ1YihiLmMpLDQ5NSkpOihiLmUuYz1iLmMpOyFiLmM/KGMuYz1KRCh2dWIoYi5lKSw0OTUpKTooYi5jLmU9Yi5lKX0tLWEuZH0KZnVuY3Rpb24gUFNiKGEsYil7dmFyIGMsZCxlLGY7Zj1uZXcgQWpiKGEsMCk7Yz0ockRiKGYuYjxmLmQuZ2MoKSksSkQoZi5kLlhiKGYuYz1mLmIrKyksMTQzKSk7d2hpbGUoZi5iPGYuZC5nYygpKXtkPShyRGIoZi5iPGYuZC5nYygpKSxKRChmLmQuWGIoZi5jPWYuYisrKSwxNDMpKTtlPW5ldyBwU2IoZC5jLGMuZCxiKTtyRGIoZi5iPjApO2YuYS5YYihmLmM9LS1mLmIpO3pqYihmLGUpO3JEYihmLmI8Zi5kLmdjKCkpO2YuZC5YYihmLmM9Zi5iKyspO2UuYT1mYWxzZTtjPWR9fQpmdW5jdGlvbiB6X2IoYSl7dmFyIGIsYyxkLGUsZixnO2U9SkQoV01iKGEsKElxYygpLEhwYykpLDExKTtmb3IoZz1uZXcgcm1iKGEuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDExKTtmb3IoZD1uZXcgcm1iKGYuZyk7ZC5hPGQuYy5jLmxlbmd0aDspe2I9SkQocG1iKGQpLDE4KTtoV2IoYixlKTtyZXR1cm4gZn1mb3IoYz1uZXcgcm1iKGYuZSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDE4KTtnV2IoYixlKTtyZXR1cm4gZn19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGk4YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2k9SkQoa19iKGEuYSxiKSwxNykuYTtjP29fYihhLmEsamZiKGkrMSksYik6b19iKGEuYSxqZmIoaS0xKSxiKTtnPW5ldyB3dGI7Zm9yKGU9bmV3IGVzKElyKChjP2tZYihiKTpoWWIoYikpLmEuSmMoKSxuZXcgZXIpKTtjcyhlKTspe2Q9SkQoZHMoZSksMTgpO2M/KGY9ZC5kLmkpOihmPWQuYy5pKTtYRChrX2IoYS5hLGYpKT09PVhEKGtfYihhLmEsYikpJiYoaD1nLmEueWMoZixnKSxoPT1udWxsKX1yZXR1cm4gZ30KZnVuY3Rpb24gcUEoYSxiLGMpe3ZhciBkLGU7ZD16Y2IoYy5xLmdldFRpbWUoKSk7aWYodmNiKGQsMCk8MCl7ZT1WcmUtUGNiKEVjYihHY2IoZCksVnJlKSk7ZT09VnJlJiYoZT0wKX1lbHNle2U9UGNiKEVjYihkLFZyZSkpfWlmKGI9PTEpe2U9JHduZC5NYXRoLm1pbigoZSs1MCkvMTAwfDAsOSk7S2diKGEsNDgrZSZXcmUpfWVsc2UgaWYoYj09Mil7ZT0kd25kLk1hdGgubWluKChlKzUpLzEwfDAsOTkpO01BKGEsZSwyKX1lbHNle01BKGEsZSwzKTtiPjMmJk1BKGEsMCxiLTMpfX0KZnVuY3Rpb24gb1FiKGEpe3ZhciBiLGMsZCxlO2lmKFhEKFdNYihhLChCd2MoKSxJdWMpKSk9PT1YRCgoZWlkKCksYmlkKSkpe3JldHVybiAhYS5lJiZYRChXTWIoYSxndWMpKSE9PVhEKChocGMoKSxlcGMpKX1kPUpEKFdNYihhLGh1YyksMjk4KTtlPXlkYihMRChXTWIoYSxudWMpKSl8fFhEKFdNYihhLG91YykpPT09WEQoKGNuYygpLF9tYykpO2I9SkQoV01iKGEsZnVjKSwxNykuYTtjPWEuYS5jLmxlbmd0aDtyZXR1cm4gIWUmJmQhPShocGMoKSxlcGMpJiYoYj09MHx8Yj5jKX0KZnVuY3Rpb24gYjliKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7Zm9yKGU9YS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDkpO2g9bmV3IGJaYjtfWWIoaCxkKTthWmIoaCwoUmpkKCksd2pkKSk7Wk1iKGgsKElxYygpLHJxYyksKHhkYigpLHRydWUpKTtmb3IoZz1iLkpjKCk7Zy5PYigpOyl7Zj1KRChnLlBiKCksOSk7aT1uZXcgYlpiO19ZYihpLGYpO2FaYihpLFFqZCk7Wk1iKGkscnFjLHRydWUpO2M9bmV3IGtXYjtaTWIoYyxycWMsdHJ1ZSk7Z1diKGMsaCk7aFdiKGMsaSl9fX0KZnVuY3Rpb24gb2hjKGEpe3ZhciBiLGM7Yz0wO2Zvcig7YzxhLmMubGVuZ3RoO2MrKyl7aWYoUmdjKChzRGIoYyxhLmMubGVuZ3RoKSxKRChhLmNbY10sMTEyKSkpPjApe2JyZWFrfX1pZihjPjAmJmM8YS5jLmxlbmd0aC0xKXtyZXR1cm4gY31iPTA7Zm9yKDtiPGEuYy5sZW5ndGg7YisrKXtpZihSZ2MoKHNEYihiLGEuYy5sZW5ndGgpLEpEKGEuY1tiXSwxMTIpKSk+MCl7YnJlYWt9fWlmKGI+MCYmYzxhLmMubGVuZ3RoLTEpe3JldHVybiBifXJldHVybiBhLmMubGVuZ3RoLzJ8MH0KZnVuY3Rpb24gYm1jKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7ZT0wO2ZvcihnPW5ldyBybWIoYi5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksOSk7ZSs9Zi5vLmIrZi5kLmErZi5kLmQrYS5lO2ZvcihkPW5ldyBlcyhJcihoWWIoZikuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7aWYoYy5jLmkuaz09KERZYigpLEJZYikpe2k9Yy5jLmk7aD1KRChXTWIoaSwoSXFjKCksa3FjKSksOSk7ZSs9aC5vLmIraC5kLmEraC5kLmR9fX1yZXR1cm4gZX0KZnVuY3Rpb24gb3VkKGEsYil7dmFyIGMsZDtpZihiIT1hLkNifHxhLkRiPj4xNiE9NiYmISFiKXtpZihoZmUoYSxiKSl0aHJvdyBzY2IobmV3IFRlYihWQ2Urc3VkKGEpKSk7ZD1udWxsOyEhYS5DYiYmKGQ9KGM9YS5EYj4+MTYsYz49MD9ldWQoYSxkKTphLkNiLlBoKGEsLTEtYyxudWxsLGQpKSk7ISFiJiYoZD1tcWQoYixhLDYsZCkpO2Q9ZHVkKGEsYixkKTshIWQmJmQubGooKX1lbHNlIChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsNixiLGIpKX0KZnVuY3Rpb24gcHhkKGEsYil7dmFyIGMsZDtpZihiIT1hLkNifHxhLkRiPj4xNiE9OSYmISFiKXtpZihoZmUoYSxiKSl0aHJvdyBzY2IobmV3IFRlYihWQ2UrcXhkKGEpKSk7ZD1udWxsOyEhYS5DYiYmKGQ9KGM9YS5EYj4+MTYsYz49MD9ueGQoYSxkKTphLkNiLlBoKGEsLTEtYyxudWxsLGQpKSk7ISFiJiYoZD1tcWQoYixhLDksZCkpO2Q9bXhkKGEsYixkKTshIWQmJmQubGooKX1lbHNlIChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsOSxiLGIpKX0KZnVuY3Rpb24gVHRkKGEsYil7dmFyIGMsZDtpZihiIT1hLkNifHxhLkRiPj4xNiE9MyYmISFiKXtpZihoZmUoYSxiKSl0aHJvdyBzY2IobmV3IFRlYihWQ2UrVXRkKGEpKSk7ZD1udWxsOyEhYS5DYiYmKGQ9KGM9YS5EYj4+MTYsYz49MD9OdGQoYSxkKTphLkNiLlBoKGEsLTEtYyxudWxsLGQpKSk7ISFiJiYoZD1tcWQoYixhLDEyLGQpKTtkPU10ZChhLGIsZCk7ISFkJiZkLmxqKCl9ZWxzZSAoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDMsYixiKSl9CmZ1bmN0aW9uIGF4ZChhLGIpe3ZhciBjLGQ7aWYoYiE9YS5DYnx8YS5EYj4+MTYhPTExJiYhIWIpe2lmKGhmZShhLGIpKXRocm93IHNjYihuZXcgVGViKFZDZStieGQoYSkpKTtkPW51bGw7ISFhLkNiJiYoZD0oYz1hLkRiPj4xNixjPj0wP1d3ZChhLGQpOmEuQ2IuUGgoYSwtMS1jLG51bGwsZCkpKTshIWImJihkPW1xZChiLGEsMTAsZCkpO2Q9VndkKGEsYixkKTshIWQmJmQubGooKX1lbHNlIChhLkRiJjQpIT0wJiYoYS5EYiYxKT09MCYmV3BkKGEsbmV3IGdfZChhLDEsMTEsYixiKSl9CmZ1bmN0aW9uIE9SZChiKXt2YXIgYyxkLGUsZixnO2U9cFJkKGIpO2c9Yi5qO2lmKGc9PW51bGwmJiEhZSl7cmV0dXJuIGIuR2soKT9udWxsOmUuZmsoKX1lbHNlIGlmKFJEKGUsMTU1KSl7ZD1lLmdrKCk7aWYoZCl7Zj1kLnNpKCk7aWYoZiE9Yi5pKXtjPUpEKGUsMTU1KTtpZihjLmtrKCkpe3RyeXtiLmc9Zi5waShjLGcpfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsODApKXtiLmc9bnVsbH1lbHNlIHRocm93IHNjYihhKX19Yi5pPWZ9fXJldHVybiBiLmd9cmV0dXJuIG51bGx9CmZ1bmN0aW9uIHZNYihhKXt2YXIgYjtiPW5ldyBVbGI7SWxiKGIsbmV3IFNEYihuZXcgRWRkKGEuYyxhLmQpLG5ldyBFZGQoYS5jK2EuYixhLmQpKSk7SWxiKGIsbmV3IFNEYihuZXcgRWRkKGEuYyxhLmQpLG5ldyBFZGQoYS5jLGEuZCthLmEpKSk7SWxiKGIsbmV3IFNEYihuZXcgRWRkKGEuYythLmIsYS5kK2EuYSksbmV3IEVkZChhLmMrYS5iLGEuZCkpKTtJbGIoYixuZXcgU0RiKG5ldyBFZGQoYS5jK2EuYixhLmQrYS5hKSxuZXcgRWRkKGEuYyxhLmQrYS5hKSkpO3JldHVybiBifQpmdW5jdGlvbiBpYyhiKXt2YXIgYyxkLGU7aWYoYj09bnVsbCl7cmV0dXJuIFJxZX10cnl7cmV0dXJuIGFkYihiKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDEwMykpe2M9YTtlPWVlYihyYihiKSkrJ0AnKyhkPShaZ2IoKSxpRGIoYikpPj4+MCxkLnRvU3RyaW5nKDE2KSk7X3piKGRBYigpLChHemIoKSwnRXhjZXB0aW9uIGR1cmluZyBsZW5pZW50Rm9ybWF0IGZvciAnK2UpLGMpO3JldHVybiAnPCcrZSsnIHRocmV3ICcrZWViKGMuT20pKyc+J31lbHNlIHRocm93IHNjYihhKX19CmZ1bmN0aW9uIG1rYyhhLGIsYyxkKXt2YXIgZSxmLGcsaDtlPWtrYyhhLGIsYyk7Zj1ra2MoYSxjLGIpO2c9SkQoTmliKGEuYyxiKSwxMTYpO2g9SkQoTmliKGEuYyxjKSwxMTYpO2lmKGU8Zil7bmV3IGVOYygoaU5jKCksaE5jKSxnLGgsZi1lKX1lbHNlIGlmKGY8ZSl7bmV3IGVOYygoaU5jKCksaE5jKSxoLGcsZS1mKX1lbHNlIGlmKGUhPTB8fCEoIWIuaXx8IWMuaSkmJmRbYi5pLmNdW2MuaS5jXSl7bmV3IGVOYygoaU5jKCksaE5jKSxnLGgsMCk7bmV3IGVOYyhoTmMsaCxnLDApfX0KZnVuY3Rpb24gVWxjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2MuU2coJ0JyZWFraW5nIFBvaW50IFJlbW92aW5nJywxKTthLmE9SkQoV01iKGIsKEJ3YygpLHl1YykpLDIyMCk7Zm9yKGY9bmV3IHJtYihiLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwyNSk7Zm9yKGg9bmV3IHJtYihadShlLmEpKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7aWYodWxjKGcpKXtkPUpEKFdNYihnLChJcWMoKSxHcGMpKSwzMTQpOyFkLmQmJlZsYyhhLGQpfX19Yy5UZygpfQpmdW5jdGlvbiBJNGMoKXtJNGM9WmNiO0U0Yz1uZXcgSjRjKCdDQU5ESURBVEVfUE9TSVRJT05fTEFTVF9QTEFDRURfUklHSFQnLDApO0Q0Yz1uZXcgSjRjKCdDQU5ESURBVEVfUE9TSVRJT05fTEFTVF9QTEFDRURfQkVMT1cnLDEpO0c0Yz1uZXcgSjRjKCdDQU5ESURBVEVfUE9TSVRJT05fV0hPTEVfRFJBV0lOR19SSUdIVCcsMik7RjRjPW5ldyBKNGMoJ0NBTkRJREFURV9QT1NJVElPTl9XSE9MRV9EUkFXSU5HX0JFTE9XJywzKTtINGM9bmV3IEo0YygnV0hPTEVfRFJBV0lORycsNCl9CmZ1bmN0aW9uIE1WYihhKXt2YXIgYixjLGQsZTtmb3IoZD1uZXcgbWpiKChuZXcgZGpiKGEuYikpLmEpO2QuYjspe2M9a2piKGQpO2U9SkQoYy5qZCgpLDExKTtiPUpEKGMua2QoKSw5KTtaTWIoYiwoSXFjKCksa3FjKSxlKTtaTWIoZSxzcWMsYik7Wk1iKGUsWnBjLCh4ZGIoKSx0cnVlKSk7YVpiKGUsSkQoV01iKGIsVHBjKSw2NCkpO1dNYihiLFRwYyk7Wk1iKGUuaSwoQndjKCksRXZjKSwoYWpkKCksWmlkKSk7SkQoV01iKGdZYihlLmkpLFdwYyksMjIpLkVjKCgkb2MoKSxXb2MpKX19CmZ1bmN0aW9uIGRmYyhhKXt2YXIgYixjLGQsZSxmLGcsaDtmPW5ldyBNdGI7Zm9yKGU9bmV3IHJtYihhLmQuYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDEyMyk7ZC5iLmEuYy5sZW5ndGg9PTAmJihEdGIoZixkLGYuYy5iLGYuYyksdHJ1ZSl9aWYoZi5iPjEpe2I9cEdiKChjPW5ldyByR2IsKythLmIsYyksYS5kKTtmb3IoaD1HdGIoZiwwKTtoLmIhPWguZC5jOyl7Zz1KRChVdGIoaCksMTIzKTtERmIoR0ZiKEZGYihIRmIoRUZiKG5ldyBJRmIsMSksMCksYiksZykpfX19CmZ1bmN0aW9uIGgxYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2Y9MDtnPTA7aWYoYS5jKXtmb3IoaT1uZXcgcm1iKGEuZC5pLmopO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSwxMSk7Zis9aC5lLmMubGVuZ3RofX1lbHNle2Y9MX1pZihhLmQpe2ZvcihpPW5ldyBybWIoYS5jLmkuaik7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDExKTtnKz1oLmcuYy5sZW5ndGh9fWVsc2V7Zz0xfWU9WUQoQ2ZiKGctZikpO2Q9KGMrYikvMisoYy1iKSooMC40KmUpO3JldHVybiBkfQpmdW5jdGlvbiBrOWIoYSxiKXt2YXIgYyxkLGUsZixnLGg7Yi5TZygnUGFydGl0aW9uIHBvc3Rwcm9jZXNzaW5nJywxKTtmb3IoZD1uZXcgcm1iKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDI1KTtmb3IoZj1uZXcgcm1iKGMuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO2g9bmV3IHJtYihlLmopO3doaWxlKGguYTxoLmMuYy5sZW5ndGgpe2c9SkQocG1iKGgpLDExKTt5ZGIoTEQoV01iKGcsKElxYygpLHJxYykpKSkmJnFtYihoKX19fWIuVGcoKX0KZnVuY3Rpb24gYWhjKGEpeyRnYygpO3ZhciBiLGM7aWYoYS5HYygoUmpkKCksUGpkKSkpe3Rocm93IHNjYihuZXcgVGViKCdQb3J0IHNpZGVzIG11c3Qgbm90IGNvbnRhaW4gVU5ERUZJTkVEJykpfXN3aXRjaChhLmdjKCkpe2Nhc2UgMTpyZXR1cm4gV2djO2Nhc2UgMjpiPWEuR2Mod2pkKSYmYS5HYyhRamQpO2M9YS5HYyh4amQpJiZhLkdjKE9qZCk7cmV0dXJuIGJ8fGM/WmdjOllnYztjYXNlIDM6cmV0dXJuIFhnYztjYXNlIDQ6cmV0dXJuIFZnYztkZWZhdWx0OnJldHVybiBudWxsO319CmZ1bmN0aW9uIFJjZChhLGIsYyl7SWNkKCk7aWYoTWNkKGEsYikmJk1jZChhLGMpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIFNjZChuZXcgRWRkKGEuYyxhLmQpLG5ldyBFZGQoYS5jK2EuYixhLmQpLGIsYyl8fFNjZChuZXcgRWRkKGEuYythLmIsYS5kKSxuZXcgRWRkKGEuYythLmIsYS5kK2EuYSksYixjKXx8U2NkKG5ldyBFZGQoYS5jK2EuYixhLmQrYS5hKSxuZXcgRWRkKGEuYyxhLmQrYS5hKSxiLGMpfHxTY2QobmV3IEVkZChhLmMsYS5kK2EuYSksbmV3IEVkZChhLmMsYS5kKSxiLGMpfQpmdW5jdGlvbiBxYWUoYSxiKXt2YXIgYyxkLGUsZjtpZighYS5kYygpKXtmb3IoYz0wLGQ9YS5nYygpO2M8ZDsrK2Mpe2Y9T0QoYS5YYihjKSk7aWYoZj09bnVsbD9iPT1udWxsOmNnYihmLnN1YnN0cigwLDMpLCchIyMnKT9iIT1udWxsJiYoZT1iLmxlbmd0aCwhY2diKGYuc3Vic3RyKGYubGVuZ3RoLWUsZSksYil8fGYubGVuZ3RoIT1iLmxlbmd0aCszKSYmIWNnYihlR2UsYik6Y2diKGYsZkdlKSYmIWNnYihlR2UsYil8fGNnYihmLGIpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gazBiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtnPWEuai5jLmxlbmd0aDtpPVNDKGxOLCR0ZSwzMTUsZywwLDEpO2ZvcihoPTA7aDxnO2grKyl7Zj1KRChNbGIoYS5qLGgpLDExKTtmLnA9aDtpW2hdPWUwYihvMGIoZiksYyxkKX1nMGIoYSxpLGMsYixkKTtqPW5ldyBJcmI7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKyl7ISFpW2VdJiZRaWIoaixKRChNbGIoYS5qLGUpLDExKSxpW2VdKX1pZihqLmYuYytqLmkuYyE9MCl7Wk1iKGEsKElxYygpLE9wYyksaik7bTBiKGEsaSl9fQpmdW5jdGlvbiBFZGMoYSxiLGMpe3ZhciBkLGUsZjtmb3IoZT1uZXcgcm1iKGEuYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksNjApO2Y9bWRjKGQpO2lmKGYpe2lmKGYuaz09KERZYigpLHdZYikpe3N3aXRjaChKRChXTWIoZiwoSXFjKCksVHBjKSksNjQpLmcpe2Nhc2UgNDpmLm4uYT1iLmE7YnJlYWs7Y2FzZSAyOmYubi5hPWMuYS0oZi5vLmErZi5kLmMpO2JyZWFrO2Nhc2UgMTpmLm4uYj1iLmI7YnJlYWs7Y2FzZSAzOmYubi5iPWMuYi0oZi5vLmIrZi5kLmEpO319fX19CmZ1bmN0aW9uIGhUYyhhLGIsYyl7dmFyIGQsZSxmO2MuU2coJ1Byb2Nlc3NvciBkZXRlcm1pbmUgdGhlIGhlaWdodCBmb3IgZWFjaCBsZXZlbCcsMSk7YS5hPWIuYi5iPT0wPzE6Yi5iLmI7ZT1udWxsO2Q9R3RiKGIuYiwwKTt3aGlsZSghZSYmZC5iIT1kLmQuYyl7Zj1KRChVdGIoZCksMzkpO3lkYihMRChXTWIoZiwodFVjKCkscVVjKSkpKSYmKGU9Zil9ISFlJiZpVGMoYSxfdShXQyhPQyhOWiwxKSxJemUsMzksMCxbZV0pKSxjLEpEKFdNYihiLChrVmMoKSxLVWMpKSw4NikpO2MuVGcoKX0KZnVuY3Rpb24gYTNjKGEpe3ZhciBiLGMsZCxlLGYsZztkPShIcGQoKSxmPW5ldyBjeGQsZik7ZHNkKGQsYSk7Zm9yKGM9bmV3IENIZCgoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpKTtjLmUhPWMuaS5nYygpOyl7Yj1KRChBSGQoYyksMjcpO2c9KGU9bmV3IGN4ZCxlKTtheGQoZyxkKTtkdGQoZyxiLmcsYi5mKTtQc2QoZyxiLmspO2Z0ZChnLGIuaSxiLmopO3RDZCgoIWQuYSYmKGQuYT1uZXcgWDBkKEEzLGQsMTAsMTEpKSxkLmEpLGcpO2RzZChnLGIpfXJldHVybiBkfQpmdW5jdGlvbiBZbGQoYSxiLGMpe3ZhciBkLGUsZixnLGg7ZT1KRChrc2QoYiwodWVkKCksc2VkKSksMTcpOyFlJiYoZT1qZmIoMCkpO2Y9SkQoa3NkKGMsc2VkKSwxNyk7IWYmJihmPWpmYigwKSk7aWYoZS5hPmYuYSl7cmV0dXJuIC0xfWVsc2UgaWYoZS5hPGYuYSl7cmV0dXJuIDF9ZWxzZXtpZihhLmEpe2Q9SGViKGIuaixjLmopO2lmKGQhPTApe3JldHVybiBkfWQ9SGViKGIuaSxjLmkpO2lmKGQhPTApe3JldHVybiBkfX1nPWIuZypiLmY7aD1jLmcqYy5mO3JldHVybiBIZWIoZyxoKX19CmZ1bmN0aW9uIHlKZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsOysrYS5lO2k9YS5kPT1udWxsPzA6YS5kLmxlbmd0aDtpZihiPmkpe2s9YS5kO2EuZD1TQyh2NSxMRWUsNjYsMippKzQsMCwxKTtmb3IoZj0wO2Y8aTsrK2Ype2o9a1tmXTtpZihqKXtkPWouZztsPWouaTtmb3IoaD0wO2g8bDsrK2gpe2U9SkQoZFtoXSwxMzUpO2c9QUpkKGEsZS54aSgpKTtjPWEuZFtnXTshYyYmKGM9YS5kW2ddPWEuYWsoKSk7Yy5FYyhlKX19fXJldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX0KZnVuY3Rpb24gaGJlKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZT1jO2Y9ZS5JaygpO2lmKExmZShhLmUsZikpe2lmKGYuUGkoKSl7ZD1KRChhLmcsMTIyKTtmb3IoZz0wO2c8YS5pOysrZyl7aD1kW2ddO2lmKHBiKGgsZSkmJmchPWIpe3Rocm93IHNjYihuZXcgVGViKE1EZSkpfX19fWVsc2V7aT1LZmUoYS5lLnpoKCksZik7ZD1KRChhLmcsMTIyKTtmb3IoZz0wO2c8YS5pOysrZyl7aD1kW2ddO2lmKGkuWmwoaC5JaygpKSl7dGhyb3cgc2NiKG5ldyBUZWIoaEdlKSl9fX1zQ2QoYSxiLGMpfQpmdW5jdGlvbiBfVWIoYSxiKXt2YXIgYyxkLGUsZixnLGg7Yz1KRChXTWIoYiwoSXFjKCksUXBjKSksMjIpO2c9SkQoUWMoKEpUYigpLElUYiksYyksMjIpO2g9SkQoUWMoWVViLGMpLDIyKTtmb3IoZj1nLkpjKCk7Zi5PYigpOyl7ZD1KRChmLlBiKCksMjIpO2lmKCFKRChRYyhhLmIsZCksMTUpLmRjKCkpe3JldHVybiBmYWxzZX19Zm9yKGU9aC5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDIyKTtpZighSkQoUWMoYS5iLGQpLDE1KS5kYygpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBfZmMoYSxiLGMpe2EuZD0wO2EuYj0wO2Iuaz09KERZYigpLEJZYikmJmMuaz09QlliJiZKRChXTWIoYiwoSXFjKCksa3FjKSksOSk9PUpEKFdNYihjLGtxYyksOSkmJihkZ2MoYikuaj09KFJqZCgpLHhqZCk/YWdjKGEsYixjKTphZ2MoYSxjLGIpKTtiLms9PUJZYiYmYy5rPT15WWI/ZGdjKGIpLmo9PShSamQoKSx4amQpPyhhLmQ9MSk6KGEuYj0xKTpjLms9PUJZYiYmYi5rPT15WWImJihkZ2MoYykuaj09KFJqZCgpLHhqZCk/KGEuYj0xKTooYS5kPTEpKTtmZ2MoYSxiLGMpfQpmdW5jdGlvbiB0NGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYS5hLmMubGVuZ3RoPT0xKXtyZXR1cm4gZDRjKEpEKE1sYihhLmEsMCksMTcyKSxiKX1nPXM0YyhhKTtpPTA7aj1hLmQ7Zj1nO2s9YS5kO2g9KGotZikvMitmO3doaWxlKGYrMTxqKXtpPTA7Zm9yKGQ9bmV3IHJtYihhLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxNzIpO2krPShlPWc0YyhjLGgsZmFsc2UpLGUuYSl9aWYoaTxiKXtrPWg7aj1ofWVsc2V7Zj1ofWg9KGotZikvMitmfXJldHVybiBrfQpmdW5jdGlvbiBkc2QoYSxiKXt2YXIgYyxkLGUsZixnO2lmKCFiKXtyZXR1cm4gYX1pZihSRChiLDMzOCkpe2U9SkQoYiwzMzgpO2Y9KCFhLm8mJihhLm89bmV3IFlRZCgoVnBkKCksU3BkKSxPMyxhLDApKSxhLm8pO2ZvcihkPWUuZWgoKS5jLkpjKCk7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoZC5WaigpLDQzKTtnPWMua2QoKTtFSmQoZixKRChjLmpkKCksMTQ0KSxnKX19ZWxzZXshYS5vJiYoYS5vPW5ldyBZUWQoKFZwZCgpLFNwZCksTzMsYSwwKSk7RkpkKGEubyxiLmxmKCkpfXJldHVybiBhfQpmdW5jdGlvbiBlemQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2s9bnVsbDtvPXl5ZChhLGIpO2k9bnVsbDshIW8mJihpPWt6ZChhLG8pKTtwPWk7Yz1udWxsO2U9TUQoTmliKGEuaSxwKSk7ZSE9bnVsbD8oYz1lKTooYz1qZmIoMCkpO209YztkPW51bGw7Zj1NRChOaWIoYS5qLHApKTtmIT1udWxsPyhkPWYpOihkPWpmYigwKSk7bj1kO2o9Yi5pO2c9T3BlKGosbSk7UWliKGEuaSxiLGcpO2w9Yi5qO2g9T3BlKGwsbik7az1NRChRaWIoYS5qLGIsaCkpO3JldHVybiBrfQpmdW5jdGlvbiBuRChhKXt2YXIgYixjLGQsZSxmO2lmKGlzTmFOKGEpKXtyZXR1cm4gRUQoKSxERH1pZihhPC05MjIzMzcyMDM2ODU0Nzc1ODA4KXtyZXR1cm4gRUQoKSxCRH1pZihhPj05MjIzMzcyMDM2ODU0Nzc1ODA3KXtyZXR1cm4gRUQoKSxBRH1lPWZhbHNlO2lmKGE8MCl7ZT10cnVlO2E9LWF9ZD0wO2lmKGE+PURzZSl7ZD1ZRChhL0RzZSk7YS09ZCpEc2V9Yz0wO2lmKGE+PUNzZSl7Yz1ZRChhL0NzZSk7YS09YypDc2V9Yj1ZRChhKTtmPV9DKGIsYyxkKTtlJiZmRChmKTtyZXR1cm4gZn0KZnVuY3Rpb24gSkFiKGEpe3ZhciBiLGMsZCxlLGY7Zj1uZXcgVWxiO0xsYihhLmIsbmV3IFJDYihmKSk7YS5iLmMubGVuZ3RoPTA7aWYoZi5jLmxlbmd0aCE9MCl7Yj0oc0RiKDAsZi5jLmxlbmd0aCksSkQoZi5jWzBdLDgwKSk7Zm9yKGM9MSxkPWYuYy5sZW5ndGg7YzxkOysrYyl7ZT0oc0RiKGMsZi5jLmxlbmd0aCksSkQoZi5jW2NdLDgwKSk7ZSE9YiYmWnkoYixlKX1pZihSRChiLDYzKSl7dGhyb3cgc2NiKEpEKGIsNjMpKX1pZihSRChiLDI5NCkpe3Rocm93IHNjYihKRChiLDI5NCkpfX19CmZ1bmN0aW9uIHRLYihhLGIpe3ZhciBjLGQsZSxmO2M9IWJ8fCFhLnUuR2MoKG9qZCgpLGtqZCkpO2Y9MDtmb3IoZT1uZXcgcm1iKGEuZS5WZigpKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksODMxKTtpZihkLiRmKCk9PShSamQoKSxQamQpKXt0aHJvdyBzY2IobmV3IFRlYignTGFiZWwgYW5kIG5vZGUgc2l6ZSBjYWxjdWxhdG9yIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBwb3J0cyB0aGF0IGhhdmUgcG9ydCBzaWRlcyBhc3NpZ25lZC4nKSl9ZC5PZihmKyspO3NLYihhLGQsYyl9fQpmdW5jdGlvbiBIRWIoYSl7dmFyIGIsYyxkLGUsZjtmb3IoYz1uZXcgcm1iKGEuYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMzE3KTtiLmo9bnVsbDtmb3IoZj1iLmEuYS5lYygpLkpjKCk7Zi5PYigpOyl7ZD1KRChmLlBiKCksNjApO3ZkZChkLmIpOyghYi5qfHxkLmQuYzxiLmouZC5jKSYmKGIuaj1kKX1mb3IoZT1iLmEuYS5lYygpLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksNjApO2QuYi5hPWQuZC5jLWIuai5kLmM7ZC5iLmI9ZC5kLmQtYi5qLmQuZH19cmV0dXJuIGF9CmZ1bmN0aW9uIEVSYihhKXt2YXIgYixjLGQsZSxmO2ZvcihjPW5ldyBybWIoYS5hLmEpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwxOTQpO2IuZj1udWxsO2ZvcihmPWIuYS5hLmVjKCkuSmMoKTtmLk9iKCk7KXtkPUpEKGYuUGIoKSw4Mik7dmRkKGQuZSk7KCFiLmZ8fGQuZy5jPGIuZi5nLmMpJiYoYi5mPWQpfWZvcihlPWIuYS5hLmVjKCkuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSw4Mik7ZC5lLmE9ZC5nLmMtYi5mLmcuYztkLmUuYj1kLmcuZC1iLmYuZy5kfX1yZXR1cm4gYX0KZnVuY3Rpb24gREVjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2c9ZEdjKGEsYyk7aD1TQyhSUCxKdmUsOSxiLmxlbmd0aCwwLDEpO2Q9MDtmb3IoZj1nLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksMTEpO3lkYihMRChXTWIoZSwoSXFjKCksWnBjKSkpKSYmKGhbZCsrXT1KRChXTWIoZSxzcWMpLDkpKX1pZihkPGIubGVuZ3RoKXt0aHJvdyBzY2IobmV3IFdlYignRXhwZWN0ZWQgJytiLmxlbmd0aCsnIGhpZXJhcmNoaWNhbCBwb3J0cywgYnV0IGZvdW5kIG9ubHkgJytkKycuJykpfXJldHVybiBofQpmdW5jdGlvbiBkQmQoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbDtsPWdCZChhKTtiPWEuYTtpPWIhPW51bGw7aSYmV3hkKGwsJ2NhdGVnb3J5JyxhLmEpO2U9eXFlKG5ldyBPamIoYS5kKSk7Zz0hZTtpZihnKXtqPW5ldyBFQjtrQyhsLCdrbm93bk9wdGlvbnMnLGopO2M9bmV3IGxCZChqKTtvZmIobmV3IE9qYihhLmQpLGMpfWY9eXFlKGEuZyk7aD0hZjtpZihoKXtrPW5ldyBFQjtrQyhsLCdzdXBwb3J0ZWRGZWF0dXJlcycsayk7ZD1uZXcgbkJkKGspO29mYihhLmcsZCl9cmV0dXJuIGx9CmZ1bmN0aW9uIER5KGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajtkPWZhbHNlO2I9MzM2O2M9MDtmPW5ldyBkcShhLmxlbmd0aCk7Zm9yKGg9YSxpPTAsaj1oLmxlbmd0aDtpPGo7KytpKXtnPWhbaV07ZD1kfChMQWIoZyksZmFsc2UpO2U9KEtBYihnKSxnLmEpO0lsYihmLmEsUWIoZSkpO2ImPWUud2QoKTtjPVV5KGMsZS54ZCgpKX1yZXR1cm4gSkQoSkQoSUFiKG5ldyBSQmIobnVsbCxjayhuZXcgR3ZiKChxbSgpLHdtKGYuYSkpLDE2KSxuZXcgRXksYixjKSksbmV3IEd5KGEpKSw2NzIpLDgyNyl9CmZ1bmN0aW9uIGVUYihhLGIpe3ZhciBjO2lmKCEhYS5kJiYoYi5jIT1hLmUuY3x8Q1NiKGEuZS5iLGIuYikpKXtJbGIoYS5mLGEuZCk7YS5hPWEuZC5jK2EuZC5iO2EuZD1udWxsO2EuZT1udWxsfXpTYihiLmIpPyhhLmM9Yik6KGEuYj1iKTtpZihiLmI9PSh4U2IoKSx0U2IpJiYhYi5hfHxiLmI9PXVTYiYmYi5hfHxiLmI9PXZTYiYmYi5hfHxiLmI9PXdTYiYmIWIuYSl7aWYoISFhLmMmJiEhYS5iKXtjPW5ldyBnZGQoYS5hLGEuYy5kLGIuYy1hLmEsYS5iLmQtYS5jLmQpO2EuZD1jO2EuZT1ifX19CmZ1bmN0aW9uIEl3ZChhLGIpe3ZhciBjLGQ7aWYoYiE9YS5DYnx8YS5EYj4+MTYhPTcmJiEhYil7aWYoaGZlKGEsYikpdGhyb3cgc2NiKG5ldyBUZWIoVkNlK0t3ZChhKSkpO2Q9bnVsbDshIWEuQ2ImJihkPShjPWEuRGI+PjE2LGM+PTA/R3dkKGEsZCk6YS5DYi5QaChhLC0xLWMsbnVsbCxkKSkpOyEhYiYmKGQ9SkQoYiw1MikuTmgoYSwxLHkzLGQpKTtkPUZ3ZChhLGIsZCk7ISFkJiZkLmxqKCl9ZWxzZSAoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDcsYixiKSl9CmZ1bmN0aW9uIEdRZChhLGIpe3ZhciBjLGQ7aWYoYiE9YS5DYnx8YS5EYj4+MTYhPTMmJiEhYil7aWYoaGZlKGEsYikpdGhyb3cgc2NiKG5ldyBUZWIoVkNlK0pRZChhKSkpO2Q9bnVsbDshIWEuQ2ImJihkPShjPWEuRGI+PjE2LGM+PTA/RFFkKGEsZCk6YS5DYi5QaChhLC0xLWMsbnVsbCxkKSkpOyEhYiYmKGQ9SkQoYiw1MikuTmgoYSwwLGg2LGQpKTtkPUNRZChhLGIsZCk7ISFkJiZkLmxqKCl9ZWxzZSAoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTAmJldwZChhLG5ldyBnX2QoYSwxLDMsYixiKSl9CmZ1bmN0aW9uIERpYihhLGIpe0NpYigpO3ZhciBjLGQsZSxmLGcsaCxpLGosaztpZihiLmQ+YS5kKXtoPWE7YT1iO2I9aH1pZihiLmQ8NjMpe3JldHVybiBIaWIoYSxiKX1nPShhLmQmLTIpPDw0O2o9UmhiKGEsZyk7az1SaGIoYixnKTtkPXhpYihhLFFoYihqLGcpKTtlPXhpYihiLFFoYihrLGcpKTtpPURpYihqLGspO2M9RGliKGQsZSk7Zj1EaWIoeGliKGosZCkseGliKGUsaykpO2Y9c2liKHNpYihmLGkpLGMpO2Y9UWhiKGYsZyk7aT1RaGIoaSxnPDwxKTtyZXR1cm4gc2liKHNpYihpLGYpLGMpfQpmdW5jdGlvbiBjeGMoKXtjeGM9WmNiO2F4Yz1uZXcgZXhjKGV6ZSwwKTtad2M9bmV3IGV4YygnTE9OR0VTVF9QQVRIJywxKTskd2M9bmV3IGV4YygnTE9OR0VTVF9QQVRIX1NPVVJDRScsMik7V3djPW5ldyBleGMoJ0NPRkZNQU5fR1JBSEFNJywzKTtZd2M9bmV3IGV4Yyhvd2UsNCk7YnhjPW5ldyBleGMoJ1NUUkVUQ0hfV0lEVEgnLDUpO193Yz1uZXcgZXhjKCdNSU5fV0lEVEgnLDYpO1Z3Yz1uZXcgZXhjKCdCRl9NT0RFTF9PUkRFUicsNyk7WHdjPW5ldyBleGMoJ0RGX01PREVMX09SREVSJyw4KX0KZnVuY3Rpb24gV3ZkKGEsYil7dmFyIGMsZCxlLGYsZyxoO2lmKCFhLnRiKXtmPSghYS5yYiYmKGEucmI9bmV3IGMxZChhLGE2LGEpKSxhLnJiKTtoPW5ldyBKcmIoZi5pKTtmb3IoZT1uZXcgQ0hkKGYpO2UuZSE9ZS5pLmdjKCk7KXtkPUpEKEFIZChlKSwxNDEpO2c9ZC52ZSgpO2M9SkQoZz09bnVsbD9nc2IoaC5mLG51bGwsZCk6QXNiKGguaSxnLGQpLDE0MSk7ISFjJiYoZz09bnVsbD9nc2IoaC5mLG51bGwsYyk6QXNiKGguaSxnLGMpKX1hLnRiPWh9cmV0dXJuIEpEKE9pYihhLnRiLGIpLDE0MSl9CmZ1bmN0aW9uIFJUZChhLGIpe3ZhciBjLGQsZSxmLGc7KGEuaT09bnVsbCYmTVRkKGEpLGEuaSkubGVuZ3RoO2lmKCFhLnApe2c9bmV3IEpyYigoMyphLmcuaS8yfDApKzEpO2ZvcihlPW5ldyBYSGQoYS5nKTtlLmUhPWUuaS5nYygpOyl7ZD1KRChXSGQoZSksMTc4KTtmPWQudmUoKTtjPUpEKGY9PW51bGw/Z3NiKGcuZixudWxsLGQpOkFzYihnLmksZixkKSwxNzgpOyEhYyYmKGY9PW51bGw/Z3NiKGcuZixudWxsLGMpOkFzYihnLmksZixjKSl9YS5wPWd9cmV0dXJuIEpEKE9pYihhLnAsYiksMTc4KX0KZnVuY3Rpb24gZURiKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksajtjRGIoZCtkeihjLGMuZ2UoKSksZSk7ZERiKGIsZ0RiKGMpKTtmPWMuZjshIWYmJmVEYihhLGIsZiwnQ2F1c2VkIGJ5OiAnLGZhbHNlKTtmb3IoaD0oYy5rPT1udWxsJiYoYy5rPVNDKGlKLGhyZSw4MCwwLDAsMSkpLGMuayksaT0wLGo9aC5sZW5ndGg7aTxqOysraSl7Zz1oW2ldO2VEYihhLGIsZywnU3VwcHJlc3NlZDogJyxmYWxzZSl9Y29uc29sZS5ncm91cEVuZCE9bnVsbCYmY29uc29sZS5ncm91cEVuZC5jYWxsKGNvbnNvbGUpfQpmdW5jdGlvbiBHRWMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtpPWIuZTtoPWkubGVuZ3RoO2c9Yi5xLnNnKGksYz8wOmgtMSxjKTtlPWlbYz8wOmgtMV07Zz1nfEZFYyhhLGUsYyxkKTtmb3IoZj1jPzE6aC0yO2M/ZjxoOmY+PTA7Zis9Yz8xOi0xKXtnPWd8Yi5jLmpnKGksZixjLGQmJiF5ZGIoTEQoV01iKGIuaiwoSXFjKCksVnBjKSkpKSYmIXlkYihMRChXTWIoYi5qLChJcWMoKSx5cWMpKSkpKTtnPWd8Yi5xLnNnKGksZixjKTtnPWd8RkVjKGEsaVtmXSxjLGQpfU5yYihhLmMsYik7cmV0dXJuIGd9CmZ1bmN0aW9uIFJfYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07Zm9yKGs9RVhiKGEuaiksbD0wLG09ay5sZW5ndGg7bDxtOysrbCl7aj1rW2xdO2lmKGM9PShFeWMoKSxCeWMpfHxjPT1EeWMpe2k9Q1hiKGouZyk7Zm9yKGU9aSxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07Tl9iKGIsZCkmJmZXYihkLHRydWUpfX1pZihjPT1DeWN8fGM9PUR5Yyl7aD1DWGIoai5lKTtmb3IoZT1oLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtNX2IoYixkKSYmZldiKGQsdHJ1ZSl9fX19CmZ1bmN0aW9uIHk1Yigpe3U1YigpO3JldHVybiBXQyhPQyhFUiwxKSxFcmUsNzksMCxbQTRiLHg0YixCNGIsUjRiLGk1YixWNGIsbzViLCQ0YixnNWIsTTRiLGM1YixaNGIsaDViLEk0YixxNWIscjRiLGI1YixrNWIsUzRiLGo1YixzNWIsZTViLHM0YixmNWIsdDViLG01YixxNGIscjViLFQ0YixGNGIsVTRiLFE0YixwNWIsdjRiLEQ0YixYNGIsdTRiLFk0YixPNGIsSjRiLF80YixMNGIseTRiLHc0YixQNGIsSzRiLGE1YixuNWIsdDRiLGQ1YixONGIsVzRiLEc0YixFNGIsbDViLEM0YixINGIsejRiXSl9CmZ1bmN0aW9uIFRqYyhhKXt2YXIgYixjO2I9bnVsbDtjPW51bGw7c3dpdGNoKE9qYyhhKS5nKXtjYXNlIDE6Yj0oUmpkKCksd2pkKTtjPVFqZDticmVhaztjYXNlIDI6Yj0oUmpkKCksT2pkKTtjPXhqZDticmVhaztjYXNlIDM6Yj0oUmpkKCksUWpkKTtjPXdqZDticmVhaztjYXNlIDQ6Yj0oUmpkKCkseGpkKTtjPU9qZDt9cGdjKGEsSkQoenViKEpCYihKRChRYyhhLmssYiksMTUpLk1jKCksS2pjKSksMTEyKSk7cWdjKGEsSkQoenViKElCYihKRChRYyhhLmssYyksMTUpLk1jKCksS2pjKSksMTEyKSl9CmZ1bmN0aW9uIGo5YyhhKXt2YXIgYjtiOWMuY2FsbCh0aGlzKTt0aGlzLmk9bmV3IHg5Yzt0aGlzLmc9YTt0aGlzLmY9SkQoYS5lJiZhLmUoKSwxMCkubGVuZ3RoO2lmKHRoaXMuZj09MCl7dGhyb3cgc2NiKG5ldyBUZWIoJ1RoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIHBoYXNlIGluIHRoZSBwaGFzZSBlbnVtZXJhdGlvbi4nKSl9dGhpcy5jPShiPUpEKGRlYih0aGlzLmcpLDEwKSxuZXcgdXJiKGIsSkQoVkNiKGIsYi5sZW5ndGgpLDEwKSwwKSk7dGhpcy5hPW5ldyBKOWM7dGhpcy5iPW5ldyBJcmJ9CmZ1bmN0aW9uIEQyYihhKXt2YXIgYixjLGQsZSxmLGc7ZT1KRChNbGIoYS5qLDApLDExKTtpZihlLmUuYy5sZW5ndGgrZS5nLmMubGVuZ3RoPT0wKXthLm4uYT0wfWVsc2V7Zz0wO2ZvcihkPURsKHlsKFdDKE9DKFZJLDEpLE5xZSwyMCwwLFtuZXcgZFpiKGUpLG5ldyBsWmIoZSldKSkpO2NzKGQpOyl7Yz1KRChkcyhkKSwxMSk7Zys9Yy5pLm4uYStjLm4uYStjLmEuYX1iPUpEKFdNYihhLChCd2MoKSxDdmMpKSw4KTtmPSFiPzA6Yi5hO2Eubi5hPWcvKGUuZS5jLmxlbmd0aCtlLmcuYy5sZW5ndGgpLWZ9fQpmdW5jdGlvbiBkOGMoYSxiKXt2YXIgYyxkLGU7Zm9yKGQ9bmV3IHJtYihiLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwyMjQpO19MYihKRChjLmIsNjgpLEJkZChvZGQoSkQoYi5iLDY4KS5jKSxKRChiLmIsNjgpLmEpKTtlPXdNYihKRChiLmIsNjgpLmIsSkQoYy5iLDY4KS5iKTtlPjEmJihhLmE9dHJ1ZSk7JExiKEpEKGMuYiw2OCksbWRkKG9kZChKRChiLmIsNjgpLmMpLHdkZChCZGQob2RkKEpEKGMuYiw2OCkuYSksSkQoYi5iLDY4KS5hKSxlKSkpO2I4YyhhLGIpO2Q4YyhhLGMpfX0KZnVuY3Rpb24gRFJiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2ZvcihmPW5ldyBybWIoYS5hLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihmKSwxOTQpO2QuZT0wO2QuZC5hLiRiKCl9Zm9yKGU9bmV3IHJtYihhLmEuYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE5NCk7Zm9yKGM9ZC5hLmEuZWMoKS5KYygpO2MuT2IoKTspe2I9SkQoYy5QYigpLDgyKTtmb3IoaD1iLmYuSmMoKTtoLk9iKCk7KXtnPUpEKGguUGIoKSw4Mik7aWYoZy5kIT1kKXtOcmIoZC5kLGcpOysrZy5kLmV9fX19fQpmdW5jdGlvbiBKX2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtiLlNnKCdDb25zdHJhaW50cyBQb3N0cHJvY2Vzc29yJywxKTtnPTA7Zm9yKGY9bmV3IHJtYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwyNSk7aT0wO2g9ZmFsc2U7Zm9yKGQ9bmV3IHJtYihlLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw5KTtpZihjLms9PShEWWIoKSxBWWIpKXtoPXRydWU7Wk1iKGMsKEJ3YygpLFZ1YyksamZiKGcpKTtaTWIoYyxtdWMsamZiKGkpKTsrK2l9fWgmJisrZ31iLlRnKCl9CmZ1bmN0aW9uIFY4YihhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2k9YS5qLmMubGVuZ3RoO2M9MDtiPWk7ZT0yKmk7Zm9yKGg9bmV3IHJtYihhLmopO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxMSk7c3dpdGNoKGcuai5nKXtjYXNlIDI6Y2FzZSA0OmcucD0tMTticmVhaztjYXNlIDE6Y2FzZSAzOmQ9Zy5lLmMubGVuZ3RoO2Y9Zy5nLmMubGVuZ3RoO2Q+MCYmZj4wPyhnLnA9YisrKTpkPjA/KGcucD1jKyspOmY+MD8oZy5wPWUrKyk6KGcucD1jKyspO319cG5iKCk7U2xiKGEuaixuZXcgWjhiKX0KZnVuY3Rpb24gTmJjKGEpe3ZhciBiLGM7Yz1udWxsO2I9SkQoTWxiKGEuZywwKSwxOCk7ZG97Yz1iLmQuaTtpZihYTWIoYywoSXFjKCksZ3FjKSkpe3JldHVybiBKRChXTWIoYyxncWMpLDExKS5pfWlmKGMuayE9KERZYigpLEFZYikmJmNzKG5ldyBlcyhJcihrWWIoYykuYS5KYygpLG5ldyBlcikpKSl7Yj1KRChkcyhuZXcgZXMoSXIoa1liKGMpLmEuSmMoKSxuZXcgZXIpKSksMTgpfWVsc2UgaWYoYy5rIT1BWWIpe3JldHVybiBudWxsfX13aGlsZSghIWMmJmMuayE9KERZYigpLEFZYikpO3JldHVybiBjfQpmdW5jdGlvbiBSamMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aD1iLmo7Zz1iLmc7aT1KRChNbGIoaCxoLmMubGVuZ3RoLTEpLDExMik7az0oc0RiKDAsaC5jLmxlbmd0aCksSkQoaC5jWzBdLDExMikpO2o9TmpjKGEsZyxpLGspO2ZvcihmPTE7ZjxoLmMubGVuZ3RoO2YrKyl7Yz0oc0RiKGYtMSxoLmMubGVuZ3RoKSxKRChoLmNbZi0xXSwxMTIpKTtlPShzRGIoZixoLmMubGVuZ3RoKSxKRChoLmNbZl0sMTEyKSk7ZD1OamMoYSxnLGMsZSk7aWYoZD5qKXtpPWM7az1lO2o9ZH19Yi5hPWs7Yi5jPWl9CmZ1bmN0aW9uIGlHYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7aj1uZXcgbXpiKG5ldyBXR2MoYSkpO2ZvcihnPVdDKE9DKGRRLDEpLEt2ZSwxMSwwLFtiLGNdKSxoPTAsaT1nLmxlbmd0aDtoPGk7KytoKXtmPWdbaF07ai5hLnljKGYsKHhkYigpLHZkYikpPT1udWxsO2ZvcihlPW5ldyB4WmIoZi5iKTtvbWIoZS5hKXx8b21iKGUuYik7KXtkPUpEKG9tYihlLmEpP3BtYihlLmEpOnBtYihlLmIpLDE4KTtkLmM9PWQuZHx8ZnpiKGosZj09ZC5jP2QuZDpkLmMpfX1yZXR1cm4gUWIoaiksbmV3IFdsYihqKX0KZnVuY3Rpb24gREZiKGEpe2lmKCFhLmEuZHx8IWEuYS5lKXt0aHJvdyBzY2IobmV3IFdlYigoY2ViKFpNKSxaTS5rKycgbXVzdCBoYXZlIGEgc291cmNlIGFuZCB0YXJnZXQgJysoY2ViKGJOKSxiTi5rKSsnIHNwZWNpZmllZC4nKSkpfWlmKGEuYS5kPT1hLmEuZSl7dGhyb3cgc2NiKG5ldyBXZWIoJ05ldHdvcmsgc2ltcGxleCBkb2VzIG5vdCBzdXBwb3J0IHNlbGYtbG9vcHM6ICcrYS5hKycgJythLmEuZCsnICcrYS5hLmUpKX1RRmIoYS5hLmQuZyxhLmEpO1FGYihhLmEuZS5iLGEuYSk7cmV0dXJuIGEuYX0KZnVuY3Rpb24gcEJjKGEsYixjKXt2YXIgZCxlLGYsZyxoO2MuU2coJ0xvbmdlc3QgcGF0aCBsYXllcmluZycsMSk7YS5hPWI7aD1hLmEuYTthLmI9U0MoY0UsaXNlLDMwLGguYy5sZW5ndGgsMTUsMSk7ZD0wO2ZvcihnPW5ldyBybWIoaCk7Zy5hPGcuYy5jLmxlbmd0aDspe2U9SkQocG1iKGcpLDkpO2UucD1kO2EuYltkXT0tMTsrK2R9Zm9yKGY9bmV3IHJtYihoKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksOSk7ckJjKGEsZSl9aC5jLmxlbmd0aD0wO2EuYT1udWxsO2EuYj1udWxsO2MuVGcoKX0KZnVuY3Rpb24gUk5jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZD0wO2lmKGIuYiE9MCYmYy5iIT0wKXtmPUd0YihiLDApO2c9R3RiKGMsMCk7aD1CZWIoTUQoVXRiKGYpKSk7aT1CZWIoTUQoVXRiKGcpKSk7ZT10cnVlO2Rve2lmKGg+aS1hLmImJmg8aSthLmIpe3JldHVybiAtMX1lbHNlIGg+aS1hLmEmJmg8aSthLmEmJisrZDtoPD1pJiZmLmIhPWYuZC5jPyhoPUJlYihNRChVdGIoZikpKSk6aTw9aCYmZy5iIT1nLmQuYz8oaT1CZWIoTUQoVXRiKGcpKSkpOihlPWZhbHNlKX13aGlsZShlKX1yZXR1cm4gZH0KZnVuY3Rpb24gSlljKGEsYil7dmFyIGMsZDtmOWMoYS5hKTtpOWMoYS5hLChBWWMoKSx5WWMpLHlZYyk7aTljKGEuYSx6WWMselljKTtkPW5ldyBKOWM7RTljKGQselljLChqWmMoKSxoWmMpKTtYRChrc2QoYiwoYl9jKCksTCRjKSkpIT09WEQoKGokYygpLGckYykpJiZFOWMoZCx6WWMsZVpjKTt5ZGIoTEQoa3NkKGIsVyRjKSkpJiZFOWMoZCx6WWMsaVpjKTtFOWMoZCx6WWMsZlpjKTt5ZGIoTEQoa3NkKGIsWSRjKSkpJiZDOWMoZCx6WWMsZ1pjKTtjOWMoYS5hLGQpO2M9ZDljKGEuYSxiKTtyZXR1cm4gY30KZnVuY3Rpb24gTU9jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbTtpPTA7Zm9yKGs9bmV3IHJtYihhLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtqPUpEKHBtYihrKSw5KTtoPTA7Zm9yKGY9bmV3IGVzKElyKGhZYihqKS5hLkpjKCksbmV3IGVyKSk7Y3MoZik7KXtlPUpEKGRzKGYpLDE4KTtsPVdZYihlLmMpLmI7bT1XWWIoZS5kKS5iO2g9JHduZC5NYXRoLm1heChoLCR3bmQuTWF0aC5hYnMobS1sKSl9aT0kd25kLk1hdGgubWF4KGksaCl9Zz1kKiR3bmQuTWF0aC5taW4oMSxiL2MpKmk7cmV0dXJuIGd9CmZ1bmN0aW9uIHI3YihhKXt2YXIgYixjO2ZvcihjPW5ldyBlcyhJcihrWWIoYSkuYS5KYygpLG5ldyBlcikpO2NzKGMpOyl7Yj1KRChkcyhjKSwxOCk7aWYoYi5kLmkuayE9KERZYigpLHhZYikpe3Rocm93IHNjYihuZXcgWThjKGF3ZStmWWIoYSkrIicgaGFzIGl0cyBsYXllciBjb25zdHJhaW50IHNldCB0byBMQVNULCBidXQgaGFzIGF0IGxlYXN0IG9uZSBvdXRnb2luZyBlZGdlIHRoYXQgIisnIGRvZXMgbm90IGdvIHRvIGEgTEFTVF9TRVBBUkFURSBub2RlLiBUaGF0IG11c3Qgbm90IGhhcHBlbi4nKSl9fX0KZnVuY3Rpb24gTVZjKGEsYil7dmFyIGMsZCxlLGYsZztnPUpEKFdNYihiLChrVmMoKSxfVWMpKSw0MjIpO2ZvcihmPUd0YihiLmIsMCk7Zi5iIT1mLmQuYzspe2U9SkQoVXRiKGYpLDM5KTtpZihhLmJbZS5nXT09MCl7c3dpdGNoKGcuZyl7Y2FzZSAwOk5WYyhhLGUpO2JyZWFrO2Nhc2UgMTpMVmMoYSxlKTt9YS5iW2UuZ109Mn19Zm9yKGQ9R3RiKGEuYSwwKTtkLmIhPWQuZC5jOyl7Yz1KRChVdGIoZCksNjUpO3llKGMuYi5kLGMsdHJ1ZSk7eWUoYy5jLmIsYyx0cnVlKX1aTWIoYiwodFVjKCksblVjKSxhLmEpfQpmdW5jdGlvbiBLbmUoYSl7dmFyIGI7Yj1uZXcgSWdiOyhhJjI1NikhPTAmJihiLmErPSdGJyxiKTsoYSYxMjgpIT0wJiYoYi5hKz0nSCcsYik7KGEmNTEyKSE9MCYmKGIuYSs9J1gnLGIpOyhhJjIpIT0wJiYoYi5hKz0naScsYik7KGEmOCkhPTAmJihiLmErPSdtJyxiKTsoYSY0KSE9MCYmKGIuYSs9J3MnLGIpOyhhJjMyKSE9MCYmKGIuYSs9J3UnLGIpOyhhJjY0KSE9MCYmKGIuYSs9J3cnLGIpOyhhJjE2KSE9MCYmKGIuYSs9J3gnLGIpOyhhJk5FZSkhPTAmJihiLmErPScsJyxiKTtyZXR1cm4gamdiKGIuYSl9CmZ1bmN0aW9uIGcwYihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpO2k9KGY9SkQoZGViKHYyKSwxMCksbmV3IHVyYihmLEpEKFZDYihmLGYubGVuZ3RoKSwxMCksMCkpO2ZvcihoPW5ldyBybWIoYS5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTEpO2lmKGJbZy5wXSl7aDBiKGcsYltnLnBdLGQpO29yYihpLGcuail9fWlmKGUpe2wwYihhLGIsKFJqZCgpLHdqZCksMipjLGQpO2wwYihhLGIsUWpkLDIqYyxkKX1lbHNle2wwYihhLGIsKFJqZCgpLHhqZCksMipjLGQpO2wwYihhLGIsT2pkLDIqYyxkKX19CmZ1bmN0aW9uIGs4YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2U9bmV3IFVsYjtmb3IoYz0wO2M8PWEuajtjKyspe2Q9bmV3IGIkYihiKTtkLnA9YS5qLWM7WUNiKGUuYyxkKX1mb3IoaD1uZXcgcm1iKGEucCk7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDkpO3FZYihnLEpEKE1sYihlLGEuai1hLmdbZy5wXSksMjUpKX1mPW5ldyBybWIoZSk7d2hpbGUoZi5hPGYuYy5jLmxlbmd0aCl7aT1KRChwbWIoZiksMjUpO2kuYS5jLmxlbmd0aD09MCYmcW1iKGYpfWIuYi5jLmxlbmd0aD0wO0tsYihiLmIsZSl9CmZ1bmN0aW9uIGozYyhhLGIpe3ZhciBjLGQsZSxmLGcsaDtiLlNnKCRBZSwxKTtlPUpEKGtzZChhLChrMmMoKSxhMmMpKSwxMDcpO2Y9KCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKTtnPU80YyhmKTtoPSR3bmQuTWF0aC5tYXgoZy5hLEJlYihNRChrc2QoYSwoaDFjKCksZTFjKSkpKS0oZS5iK2UuYykpO2Q9JHduZC5NYXRoLm1heChnLmIsQmViKE1EKGtzZChhLGIxYykpKS0oZS5kK2UuYSkpO2M9ZC1nLmI7bXNkKGEsWTBjLGMpO21zZChhLCQwYyxoKTttc2QoYSxaMGMsZCtjKTtiLlRnKCl9CmZ1bmN0aW9uIGhDZChhKXt2YXIgYixjO2lmKCghYS5hJiYoYS5hPW5ldyBYMGQodzMsYSw2LDYpKSxhLmEpLmk9PTApe3JldHVybiBkQ2QoYSl9ZWxzZXtiPUpEKG5EZCgoIWEuYSYmKGEuYT1uZXcgWDBkKHczLGEsNiw2KSksYS5hKSwwKSwxNjgpO1JHZCgoIWIuYSYmKGIuYT1uZXcgcVZkKHUzLGIsNSkpLGIuYSkpO3F1ZChiLDApO3J1ZChiLDApO2p1ZChiLDApO2t1ZChiLDApO2M9KCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSk7d2hpbGUoYy5pPjEpe1VHZChjLGMuaS0xKX1yZXR1cm4gYn19CmZ1bmN0aW9uIEtmZShhLGIpe0lmZSgpO3ZhciBjLGQsZSxmO2lmKCFiKXtyZXR1cm4gSGZlfWVsc2UgaWYoYj09KEloZSgpLEZoZSl8fChiPT1uaGV8fGI9PWxoZXx8Yj09bWhlKSYmYSE9a2hlKXtyZXR1cm4gbmV3IFJmZShhLGIpfWVsc2V7ZD1KRChiLDY3Nyk7Yz1kLlhrKCk7aWYoIWMpe1ZhZShqYWUoKEdmZSgpLEVmZSksYikpO2M9ZC5YaygpfWY9KCFjLmkmJihjLmk9bmV3IElyYiksYy5pKTtlPUpEKFdkKGZzYihmLmYsYSkpLDE5ODcpOyFlJiZRaWIoZixhLGU9bmV3IFJmZShhLGIpKTtyZXR1cm4gZX19CmZ1bmN0aW9uIGlGYihhLGIpe3ZhciBjLGQ7ZD1memIoYS5iLGIuYik7aWYoIWQpe3Rocm93IHNjYihuZXcgV2ViKCdJbnZhbGlkIGhpdGJveGVzIGZvciBzY2FubGluZSBjb25zdHJhaW50IGNhbGN1bGF0aW9uLicpKX0oY0ZiKGIuYixKRChoemIoYS5iLGIuYiksNjApKXx8Y0ZiKGIuYixKRChnemIoYS5iLGIuYiksNjApKSkmJihaZ2IoKSxTdHJpbmcuZnJvbUNoYXJDb2RlKDEwKSk7YS5hW2IuYi5mXT1KRChqemIoYS5iLGIuYiksNjApO2M9SkQoaXpiKGEuYixiLmIpLDYwKTshIWMmJihhLmFbYy5mXT1iLmIpfQpmdW5jdGlvbiBLOGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aT1KRChXTWIoYSwoSXFjKCksa3FjKSksMTEpO2o9S2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2kuaS5uLGkubixpLmFdKSkuYTtrPWEuaS5uLmI7Yz1DWGIoYS5lKTtmb3IoZT1jLGY9MCxnPWUubGVuZ3RoO2Y8ZzsrK2Ype2Q9ZVtmXTtoV2IoZCxpKTtDdGIoZC5hLG5ldyBFZGQoaixrKSk7aWYoYil7aD1KRChXTWIoZCwoQndjKCksUnVjKSksNzcpO2lmKCFoKXtoPW5ldyBSZGQ7Wk1iKGQsUnVjLGgpfUF0YihoLG5ldyBFZGQoaixrKSl9fX0KZnVuY3Rpb24gTDhiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2U9SkQoV01iKGEsKElxYygpLGtxYykpLDExKTtqPUtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtlLmkubixlLm4sZS5hXSkpLmE7az1hLmkubi5iO2M9Q1hiKGEuZyk7Zm9yKGc9YyxoPTAsaT1nLmxlbmd0aDtoPGk7KytoKXtmPWdbaF07Z1diKGYsZSk7QnRiKGYuYSxuZXcgRWRkKGosaykpO2lmKGIpe2Q9SkQoV01iKGYsKEJ3YygpLFJ1YykpLDc3KTtpZighZCl7ZD1uZXcgUmRkO1pNYihmLFJ1YyxkKX1BdGIoZCxuZXcgRWRkKGosaykpfX19CmZ1bmN0aW9uIFlhYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo7ZD1hLmI7Zj1kLmU7Zz1iamQoSkQoV01iKGQsKEJ3YygpLEV2YykpLDEwMCkpO2M9ISFmJiZKRChXTWIoZiwoSXFjKCksV3BjKSksMjIpLkdjKCgkb2MoKSxUb2MpKTtpZihnfHxjKXtyZXR1cm59Zm9yKGo9KGg9KG5ldyBaamIoYS5lKSkuYS52YygpLkpjKCksbmV3IGNrYihoKSk7ai5hLk9iKCk7KXtpPShiPUpEKGouYS5QYigpLDQzKSxKRChiLmtkKCksMTEyKSk7aWYoaS5hKXtlPWkuZDtfWWIoZSxudWxsKTtpLmM9dHJ1ZTthLmE9dHJ1ZX19fQpmdW5jdGlvbiB3YmMoYSxiKXt2YXIgYyxkLGUsZjtiLlNnKCdTZW1pLUludGVyYWN0aXZlIENyb3NzaW5nIE1pbmltaXphdGlvbiBQcm9jZXNzb3InLDEpO2M9ZmFsc2U7Zm9yKGU9bmV3IHJtYihhLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwyNSk7Zj1MQmIoT0JiKEJCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoZC5hLDE2KSksbmV3IEJiYyksbmV3IERiYyksbmV3IEZiYyksbmV3IEpiYyk7Yz1jfGYuYSE9bnVsbH1jJiZaTWIoYSwoSXFjKCksYnFjKSwoeGRiKCksdHJ1ZSkpO2IuVGcoKX0KZnVuY3Rpb24gdUVjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2EuYj1uZXcgVWxiO2EuZD1KRChXTWIoYiwoSXFjKCksdnFjKSksMjMzKTthLmU9enZiKGEuZCk7Zj1uZXcgTXRiO2U9X3UoV0MoT0MoTVAsMSksQnZlLDM2LDAsW2JdKSk7Zz0wO3doaWxlKGc8ZS5jLmxlbmd0aCl7ZD0oc0RiKGcsZS5jLmxlbmd0aCksSkQoZS5jW2ddLDM2KSk7ZC5wPWcrKztjPW5ldyBJRGMoZCxhLmEsYS5iKTtLbGIoZSxjLmIpO0lsYihhLmIsYyk7Yy5zJiYoaD1HdGIoZiwwKSxTdGIoaCxjKSl9YS5jPW5ldyBRcmI7cmV0dXJuIGZ9CmZ1bmN0aW9uIEpKYihhLGIpe3ZhciBjLGQsZSxmLGcsaDtmb3IoZz1KRChKRChRYyhhLnIsYiksMjIpLDgzKS5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDExNSk7Yz1mLmM/X0hiKGYuYyk6MDtpZihjPjApe2lmKGYuYSl7aD1mLmIuS2YoKS5hO2lmKGM+aCl7ZT0oYy1oKS8yO2YuZC5iPWU7Zi5kLmM9ZX19ZWxzZXtmLmQuYz1hLnMrY319ZWxzZSBpZihxamQoYS51KSl7ZD1lbmQoZi5iKTtkLmM8MCYmKGYuZC5iPS1kLmMpO2QuYytkLmI+Zi5iLktmKCkuYSYmKGYuZC5jPWQuYytkLmItZi5iLktmKCkuYSl9fX0KZnVuY3Rpb24gVU9jKGEsYil7dmFyIGMsZCxlLGYsZztnPW5ldyBVbGI7Yz1iO2Rve2Y9SkQoTmliKGEuYixjKSwxMzIpO2YuQj1jLmM7Zi5EPWMuZDtZQ2IoZy5jLGYpO2M9SkQoTmliKGEuayxjKSwxOCl9d2hpbGUoYyk7ZD0oc0RiKDAsZy5jLmxlbmd0aCksSkQoZy5jWzBdLDEzMikpO2Quaj10cnVlO2QuQT1KRChkLmQuYS5lYygpLkpjKCkuUGIoKSwxOCkuYy5pO2U9SkQoTWxiKGcsZy5jLmxlbmd0aC0xKSwxMzIpO2UucT10cnVlO2UuQz1KRChlLmQuYS5lYygpLkpjKCkuUGIoKSwxOCkuZC5pO3JldHVybiBnfQpmdW5jdGlvbiBUMWIoYSl7dmFyIGIsYztjPUpEKFdNYihhLChCd2MoKSxVdWMpKSwxNzEpO2I9SkQoV01iKGEsKElxYygpLCRwYykpLDMxMik7aWYoYz09KE9xYygpLEtxYykpe1pNYihhLFV1YyxOcWMpO1pNYihhLCRwYywocXBjKCkscHBjKSl9ZWxzZSBpZihjPT1NcWMpe1pNYihhLFV1YyxOcWMpO1pNYihhLCRwYywocXBjKCksbnBjKSl9ZWxzZSBpZihiPT0ocXBjKCkscHBjKSl7Wk1iKGEsVXVjLEtxYyk7Wk1iKGEsJHBjLG9wYyl9ZWxzZSBpZihiPT1ucGMpe1pNYihhLFV1YyxNcWMpO1pNYihhLCRwYyxvcGMpfX0KZnVuY3Rpb24gZ01jKCl7Z01jPVpjYjtlTWM9bmV3IHNNYzthTWM9RTljKG5ldyBKOWMsKENRYigpLHpRYiksKHU1YigpLFM0YikpO2RNYz1DOWMoRTljKG5ldyBKOWMselFiLGU1YiksQlFiLGQ1Yik7Zk1jPUI5YyhCOWMoRzljKEM5YyhFOWMobmV3IEo5Yyx4UWIsbzViKSxCUWIsbjViKSxBUWIpLG01YikscDViKTtiTWM9QzljKEU5YyhFOWMoRTljKG5ldyBKOWMseVFiLFY0YiksQVFiLFg0YiksQVFiLFk0YiksQlFiLFc0Yik7Y01jPUM5YyhFOWMoRTljKG5ldyBKOWMsQVFiLFk0YiksQVFiLEQ0YiksQlFiLEM0Yil9CmZ1bmN0aW9uIEtPYygpe0tPYz1aY2I7Rk9jPUU5YyhDOWMobmV3IEo5YywoQ1FiKCksQlFiKSwodTViKCksRzRiKSkselFiLFM0Yik7Sk9jPUI5YyhCOWMoRzljKEM5YyhFOWMobmV3IEo5Yyx4UWIsbzViKSxCUWIsbjViKSxBUWIpLG01YikscDViKTtHT2M9QzljKEU5YyhFOWMoRTljKG5ldyBKOWMseVFiLFY0YiksQVFiLFg0YiksQVFiLFk0YiksQlFiLFc0Yik7SU9jPUU5YyhFOWMobmV3IEo5Yyx6UWIsZTViKSxCUWIsZDViKTtIT2M9QzljKEU5YyhFOWMobmV3IEo5YyxBUWIsWTRiKSxBUWIsRDRiKSxCUWIsQzRiKX0KZnVuY3Rpb24gaE1jKGEsYixjLGQsZSl7dmFyIGYsZztpZigoIWVXYihiKSYmYi5jLmkuYz09Yi5kLmkuY3x8IXJkZChLZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbZS5pLm4sZS5uLGUuYV0pKSxjKSkmJiFlV2IoYikpe2IuYz09ZT9kdShiLmEsMCxuZXcgRmRkKGMpKTpBdGIoYi5hLG5ldyBGZGQoYykpO2lmKGQmJiFPcmIoYS5hLGMpKXtnPUpEKFdNYihiLChCd2MoKSxSdWMpKSw3Nyk7aWYoIWcpe2c9bmV3IFJkZDtaTWIoYixSdWMsZyl9Zj1uZXcgRmRkKGMpO0R0YihnLGYsZy5jLmIsZy5jKTtOcmIoYS5hLGYpfX19CmZ1bmN0aW9uIGR0KGEsYil7dmFyIGMsZCxlLGY7Zj1QY2IoRmNiKHlyZSxoZmIoUGNiKEZjYihiPT1udWxsPzA6dGIoYiksenJlKSksMTUpKSk7Yz1mJmEuYi5sZW5ndGgtMTtlPW51bGw7Zm9yKGQ9YS5iW2NdO2Q7ZT1kLGQ9ZC5hKXtpZihkLmQ9PWYmJkhiKGQuaSxiKSl7IWU/KGEuYltjXT1kLmEpOihlLmE9ZC5hKTtQcyhKRCh2dWIoZC5jKSw1ODgpLEpEKHZ1YihkLmYpLDU4OCkpO09zKEpEKHZ1YihkLmIpLDIyNiksSkQodnViKGQuZSksMjI2KSk7LS1hLmY7KythLmU7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gcTdiKGEpe3ZhciBiLGM7Zm9yKGM9bmV3IGVzKElyKGhZYihhKS5hLkpjKCksbmV3IGVyKSk7Y3MoYyk7KXtiPUpEKGRzKGMpLDE4KTtpZihiLmMuaS5rIT0oRFliKCkseFliKSl7dGhyb3cgc2NiKG5ldyBZOGMoYXdlK2ZZYihhKSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIEZJUlNULCBidXQgaGFzIGF0IGxlYXN0IG9uZSBpbmNvbWluZyBlZGdlIHRoYXQgIisnIGRvZXMgbm90IGNvbWUgZnJvbSBhIEZJUlNUX1NFUEFSQVRFIG5vZGUuIFRoYXQgbXVzdCBub3QgaGFwcGVuLicpKX19fQpmdW5jdGlvbiBHbGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO2U9Yj9uZXcgUGxjOm5ldyBSbGM7Zj1mYWxzZTtkb3tmPWZhbHNlO2o9Yj9kdihhLmIpOmEuYjtmb3IoaT1qLkpjKCk7aS5PYigpOyl7aD1KRChpLlBiKCksMjUpO209WnUoaC5hKTtifHxkdihtKTtmb3IobD1uZXcgcm1iKG0pO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihsKSw5KTtpZihlLk1iKGspKXtkPWs7Yz1KRChXTWIoaywoSXFjKCksR3BjKSksMzE0KTtnPWI/Yy5iOmMuaztmPUVsYyhkLGcsYixmYWxzZSl9fX19d2hpbGUoZil9CmZ1bmN0aW9uIHhyZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7ZT1aZWIoYS5EYiYyNTQpO2lmKGU9PTApe2EuRWI9Y31lbHNle2lmKGU9PTEpe2g9U0MoYUosTnFlLDEsMiw1LDEpO2Y9QnJkKGEsYik7aWYoZj09MCl7aFswXT1jO2hbMV09YS5FYn1lbHNle2hbMF09YS5FYjtoWzFdPWN9fWVsc2V7aD1TQyhhSixOcWUsMSxlKzEsNSwxKTtnPUtEKGEuRWIpO2ZvcihkPTIsaT0wLGo9MDtkPD0xMjg7ZDw8PTEpe2Q9PWI/KGhbaisrXT1jKTooYS5EYiZkKSE9MCYmKGhbaisrXT1nW2krK10pfX1hLkViPWh9YS5EYnw9Yn0KZnVuY3Rpb24gQmRjKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrLGwsbSxuLG8scCxxLHI7az1kO2lmKGIuaiYmYi5vKXtuPUpEKE5pYihhLmYsYi5BKSw2MCk7cD1uLmQuYytuLmQuYjstLWt9ZWxzZXtwPWIuYS5jK2IuYS5ifWw9ZTtpZihjLnEmJmMubyl7bj1KRChOaWIoYS5mLGMuQyksNjApO2o9bi5kLmM7KytsfWVsc2V7aj1jLmEuY31xPWotcDtpPSR3bmQuTWF0aC5tYXgoMixsLWspO2g9cS9pO289cCtoO2ZvcihtPWs7bTxsOysrbSl7Zz1KRChmLlhiKG0pLDEzMik7cj1nLmEuYjtnLmEuYz1vLXIvMjtvKz1ofX0KZnVuY3Rpb24gdkdjKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrLGw7aj1jLmMubGVuZ3RoO2YmJihhLmM9U0MoY0UsaXNlLDMwLGIubGVuZ3RoLDE1LDEpKTtmb3IoZz1lPzA6Yi5sZW5ndGgtMTtlP2c8Yi5sZW5ndGg6Zz49MDtnKz1lPzE6LTEpe2g9YltnXTtpPWQ9PShSamQoKSx3amQpP2U/bFliKGgsZCk6ZHYobFliKGgsZCkpOmU/ZHYobFliKGgsZCkpOmxZYihoLGQpO2YmJihhLmNbaC5wXT1pLmdjKCkpO2ZvcihsPWkuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSwxMSk7YS5kW2sucF09aisrfUtsYihjLGkpfX0KZnVuY3Rpb24gRE9jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO2Y9QmViKE1EKGEuYi5KYygpLlBiKCkpKTtqPUJlYihNRChicihiLmIpKSk7ZD13ZGQob2RkKGEuYSksai1jKTtlPXdkZChvZGQoYi5hKSxjLWYpO2s9bWRkKGQsZSk7d2RkKGssMS8oai1mKSk7dGhpcy5hPWs7dGhpcy5iPW5ldyBVbGI7aD10cnVlO2c9YS5iLkpjKCk7Zy5QYigpO3doaWxlKGcuT2IoKSl7aT1CZWIoTUQoZy5QYigpKSk7aWYoaCYmaS1jPnV6ZSl7dGhpcy5iLkVjKGMpO2g9ZmFsc2V9dGhpcy5iLkVjKGkpfWgmJnRoaXMuYi5FYyhjKX0KZnVuY3Rpb24geEdiKGEpe3ZhciBiLGMsZCxlO0FHYihhLGEubik7aWYoYS5kLmMubGVuZ3RoPjApe0VtYihhLmMpO3doaWxlKElHYihhLEpEKHBtYihuZXcgcm1iKGEuZS5hKSksMTIzKSk8YS5lLmEuYy5sZW5ndGgpe2I9Q0diKGEpO2U9Yi5lLmUtYi5kLmUtYi5hO2IuZS5qJiYoZT0tZSk7Zm9yKGQ9bmV3IHJtYihhLmUuYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDEyMyk7Yy5qJiYoYy5lKz1lKX1FbWIoYS5jKX1FbWIoYS5jKTtGR2IoYSxKRChwbWIobmV3IHJtYihhLmUuYSkpLDEyMykpO3RHYihhKX19CmZ1bmN0aW9uIHhCYyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtjLlNnKCdMb25nZXN0IHBhdGggdG8gc291cmNlIGxheWVyaW5nJywxKTthLmE9YjtoPWEuYS5hO2EuYj1TQyhjRSxpc2UsMzAsaC5jLmxlbmd0aCwxNSwxKTtkPTA7Zm9yKGc9bmV3IHJtYihoKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZyksOSk7ZS5wPWQ7YS5iW2RdPS0xOysrZH1mb3IoZj1uZXcgcm1iKGgpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSw5KTt6QmMoYSxlKX1oLmMubGVuZ3RoPTA7YS5hPW51bGw7YS5iPW51bGw7Yy5UZygpfQpmdW5jdGlvbiBDOGMoYSxiKXt3OGMoKTt2YXIgYyxkO2M9SmFkKE5hZCgpLGIuTmcoKSk7aWYoYyl7ZD1jLmo7aWYoUkQoYSwyMDYpKXtyZXR1cm4gX3dkKEpEKGEsMjcpKT9ycmIoZCwobGNkKCksaWNkKSl8fHJyYihkLGpjZCk6cnJiKGQsKGxjZCgpLGljZCkpfWVsc2UgaWYoUkQoYSwyNjgpKXtyZXR1cm4gcnJiKGQsKGxjZCgpLGdjZCkpfWVsc2UgaWYoUkQoYSwxOTMpKXtyZXR1cm4gcnJiKGQsKGxjZCgpLGtjZCkpfWVsc2UgaWYoUkQoYSwzNTkpKXtyZXR1cm4gcnJiKGQsKGxjZCgpLGhjZCkpfX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gWGJlKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZT1jO2Y9ZS5JaygpO2lmKExmZShhLmUsZikpe2lmKGYuUGkoKSl7ZD1KRChhLmcsMTIyKTtmb3IoZz0wO2c8YS5pOysrZyl7aD1kW2ddO2lmKHBiKGgsZSkmJmchPWIpe3Rocm93IHNjYihuZXcgVGViKE1EZSkpfX19fWVsc2V7aT1LZmUoYS5lLnpoKCksZik7ZD1KRChhLmcsMTIyKTtmb3IoZz0wO2c8YS5pOysrZyl7aD1kW2ddO2lmKGkuWmwoaC5JaygpKSYmZyE9Yil7dGhyb3cgc2NiKG5ldyBUZWIoaEdlKSl9fX1yZXR1cm4gSkQoRENkKGEsYixjKSw3NCl9CmZ1bmN0aW9uIF95KGQsYil7aWYoYiBpbnN0YW5jZW9mIE9iamVjdCl7dHJ5e2IuX19qYXZhJGV4Y2VwdGlvbj1kO2lmKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdtc2llJykhPS0xJiYkZG9jLmRvY3VtZW50TW9kZTw5KXtyZXR1cm59dmFyIGM9ZDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiLHtjYXVzZTp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGE9Yy5mZSgpO3JldHVybiBhJiZhLmRlKCl9fSxzdXBwcmVzc2VkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5lZSgpfX19KX1jYXRjaChhKXt9fX0KZnVuY3Rpb24ga2liKGEsYil7dmFyIGMsZCxlLGYsZztkPWI+PjU7YiY9MzE7aWYoZD49YS5kKXtyZXR1cm4gYS5lPDA/KEdoYigpLEFoYik6KEdoYigpLEZoYil9Zj1hLmQtZDtlPVNDKGNFLGlzZSwzMCxmKzEsMTUsMSk7bGliKGUsZixhLmEsZCxiKTtpZihhLmU8MCl7Zm9yKGM9MDtjPGQmJmEuYVtjXT09MDtjKyspO2lmKGM8ZHx8Yj4wJiZhLmFbY108PDMyLWIhPTApe2ZvcihjPTA7YzxmJiZlW2NdPT0tMTtjKyspe2VbY109MH1jPT1mJiYrK2Y7KytlW2NdfX1nPW5ldyBWaGIoYS5lLGYsZSk7SWhiKGcpO3JldHVybiBnfQpmdW5jdGlvbiBsJGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtoPV9CZChKRChuRGQoKCFiLmImJihiLmI9bmV3IHJlZSh2MyxiLDQsNykpLGIuYiksMCksODQpKTtpPV9CZChKRChuRGQoKCFiLmMmJihiLmM9bmV3IHJlZSh2MyxiLDUsOCkpLGIuYyksMCksODQpKTtpZihad2QoaCk9PVp3ZChpKSl7cmV0dXJuIG51bGx9aWYoa0NkKGksaCkpe3JldHVybiBudWxsfWc9T3RkKGIpO2lmKGc9PWMpe3JldHVybiBkfWVsc2V7Zj1KRChOaWIoYS5hLGcpLDkpO2lmKGYpe2U9Zi5lO2lmKGUpe3JldHVybiBlfX19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIGU3YihhLGIpe3ZhciBjO2M9SkQoV01iKGEsKEJ3YygpLHh1YykpLDI4MSk7Yi5TZygnTGFiZWwgc2lkZSBzZWxlY3Rpb24gKCcrYysnKScsMSk7c3dpdGNoKGMuZyl7Y2FzZSAwOmY3YihhLChvaWQoKSxraWQpKTticmVhaztjYXNlIDE6ZjdiKGEsKG9pZCgpLGxpZCkpO2JyZWFrO2Nhc2UgMjpkN2IoYSwob2lkKCksa2lkKSk7YnJlYWs7Y2FzZSAzOmQ3YihhLChvaWQoKSxsaWQpKTticmVhaztjYXNlIDQ6ZzdiKGEsKG9pZCgpLGtpZCkpO2JyZWFrO2Nhc2UgNTpnN2IoYSwob2lkKCksbGlkKSk7fWIuVGcoKX0KZnVuY3Rpb24gTGZlKGEsYil7SWZlKCk7dmFyIGMsZCxlO2lmKGIuR2soKSl7cmV0dXJuIHRydWV9ZWxzZSBpZihiLkZrKCk9PS0yKXtpZihiPT0oZWhlKCksY2hlKXx8Yj09X2dlfHxiPT1haGV8fGI9PWJoZSl7cmV0dXJuIHRydWV9ZWxzZXtlPWEuemgoKTtpZihXVGQoZSxiKT49MCl7cmV0dXJuIGZhbHNlfWVsc2V7Yz1aOWQoKEdmZSgpLEVmZSksZSxiKTtpZighYyl7cmV0dXJuIHRydWV9ZWxzZXtkPWMuRmsoKTtyZXR1cm4gKGQ+MXx8ZD09LTEpJiZUYWUoamFlKEVmZSxjKSkhPTN9fX19ZWxzZXtyZXR1cm4gZmFsc2V9fQpmdW5jdGlvbiBFRWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtkPXNFYyhjLGEubGVuZ3RoKTtnPWFbZF07Zj10RWMoYyxnLmxlbmd0aCk7aWYoZ1tmXS5rIT0oRFliKCksd1liKSl7cmV0dXJufWk9Yi5qO2ZvcihlPTA7ZTxpLmMubGVuZ3RoO2UrKyl7aD0oc0RiKGUsaS5jLmxlbmd0aCksSkQoaS5jW2VdLDExKSk7aWYoKGM/aC5qPT0oUmpkKCksd2pkKTpoLmo9PShSamQoKSxRamQpKSYmeWRiKExEKFdNYihoLChJcWMoKSxacGMpKSkpKXtSbGIoaSxlLEpEKFdNYihnW2ZdLChJcWMoKSxrcWMpKSwxMSkpO2YrPWM/MTotMX19fQpmdW5jdGlvbiBDMmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2IuU2coJ0dyZWVkeSBXaWR0aCBBcHByb3hpbWF0b3InLDEpO2M9QmViKE1EKGtzZChhLChrMmMoKSxMMWMpKSkpO2k9SkQoa3NkKGEsYTJjKSwxMDcpO2Y9SkQoa3NkKGEsaDJjKSwzODUpO2c9eWRiKExEKGtzZChhLGcyYykpKTtoPUJlYihNRChrc2QoYSxkMmMpKSk7aj0oIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpO1I0YyhqKTtlPW5ldyB2MmMoYyxmLGcpO2Q9cjJjKGUsaixoLGkpO21zZChhLChoMWMoKSxnMWMpLGQuYyk7Yi5UZygpfQpmdW5jdGlvbiBYRmQoYSl7aWYoYS5nPT1udWxsKXtzd2l0Y2goYS5wKXtjYXNlIDA6YS5nPVBGZChhKT8oeGRiKCksd2RiKTooeGRiKCksdmRiKTticmVhaztjYXNlIDE6YS5nPVJkYihRRmQoYSkpO2JyZWFrO2Nhc2UgMjphLmc9JGRiKFJGZChhKSk7YnJlYWs7Y2FzZSAzOmEuZz1TRmQoYSk7YnJlYWs7Y2FzZSA0OmEuZz1uZXcgS2ViKFRGZChhKSk7YnJlYWs7Y2FzZSA2OmEuZz15ZmIoVkZkKGEpKTticmVhaztjYXNlIDU6YS5nPWpmYihVRmQoYSkpO2JyZWFrO2Nhc2UgNzphLmc9VWZiKFdGZChhKSk7fX1yZXR1cm4gYS5nfQpmdW5jdGlvbiBlR2QoYSl7aWYoYS5uPT1udWxsKXtzd2l0Y2goYS5wKXtjYXNlIDA6YS5uPVlGZChhKT8oeGRiKCksd2RiKTooeGRiKCksdmRiKTticmVhaztjYXNlIDE6YS5uPVJkYihaRmQoYSkpO2JyZWFrO2Nhc2UgMjphLm49JGRiKCRGZChhKSk7YnJlYWs7Y2FzZSAzOmEubj1fRmQoYSk7YnJlYWs7Y2FzZSA0OmEubj1uZXcgS2ViKGFHZChhKSk7YnJlYWs7Y2FzZSA2OmEubj15ZmIoY0dkKGEpKTticmVhaztjYXNlIDU6YS5uPWpmYihiR2QoYSkpO2JyZWFrO2Nhc2UgNzphLm49VWZiKGRHZChhKSk7fX1yZXR1cm4gYS5ufQpmdW5jdGlvbiBpYmUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtoPShJZmUoKSxKRChiLDY5KS51aygpKTtpZihMZmUoYS5lLGIpKXtpZihiLlBpKCkmJnliZShhLGIsZCxSRChiLDEwMSkmJihKRChiLDE5KS5CYiZQc2UpIT0wKSl7dGhyb3cgc2NiKG5ldyBUZWIoTURlKSl9fWVsc2V7aT1LZmUoYS5lLnpoKCksYik7ZT1KRChhLmcsMTIyKTtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2lmKGkuWmwoZi5JaygpKSl7dGhyb3cgc2NiKG5ldyBUZWIoaEdlKSl9fX1zQ2QoYSxCYmUoYSxiLGMpLGg/SkQoZCw3NCk6SmZlKGIsZCkpfQpmdW5jdGlvbiBHRWIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Zm9yKGY9bmV3IHJtYihhLmEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGYpLDMxNyk7ZC5nPTA7ZC5pPTA7ZC5lLmEuJGIoKX1mb3IoZT1uZXcgcm1iKGEuYS5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMzE3KTtmb3IoYz1kLmEuYS5lYygpLkpjKCk7Yy5PYigpOyl7Yj1KRChjLlBiKCksNjApO2ZvcihoPWIuYy5KYygpO2guT2IoKTspe2c9SkQoaC5QYigpLDYwKTtpZihnLmEhPWQpe05yYihkLmUsZyk7KytnLmEuZzsrK2cuYS5pfX19fX0KZnVuY3Rpb24gaDJiKGEpe3ZhciBiLGMsZCxlLGY7ZT1KRChXTWIoYSwoQndjKCksb3ZjKSksMjIpO2Y9SkQoV01iKGEscnZjKSwyMik7Yz1uZXcgRWRkKGEuZi5hK2EuZC5iK2EuZC5jLGEuZi5iK2EuZC5kK2EuZC5hKTtiPW5ldyBGZGQoYyk7aWYoZS5HYygoeWtkKCksdWtkKSkpe2Q9SkQoV01iKGEscXZjKSw4KTtpZihmLkdjKChOa2QoKSxHa2QpKSl7ZC5hPD0wJiYoZC5hPTIwKTtkLmI8PTAmJihkLmI9MjApfWIuYT0kd25kLk1hdGgubWF4KGMuYSxkLmEpO2IuYj0kd25kLk1hdGgubWF4KGMuYixkLmIpfWkyYihhLGMsYil9CmZ1bmN0aW9uIGFTYihhLGIpe3ZhciBjLGQsZTtiLmE/KGZ6YihhLmIsYi5iKSxhLmFbYi5iLmldPUpEKGp6YihhLmIsYi5iKSw4MiksYz1KRChpemIoYS5iLGIuYiksODIpLCEhYyYmKGEuYVtjLmldPWIuYiksdW5kZWZpbmVkKTooZD1KRChqemIoYS5iLGIuYiksODIpLCEhZCYmZD09YS5hW2IuYi5pXSYmISFkLmQmJmQuZCE9Yi5iLmQmJmQuZi5FYyhiLmIpLGU9SkQoaXpiKGEuYixiLmIpLDgyKSwhIWUmJmEuYVtlLmldPT1iLmImJiEhZS5kJiZlLmQhPWIuYi5kJiZiLmIuZi5FYyhlKSxremIoYS5iLGIuYiksdW5kZWZpbmVkKX0KZnVuY3Rpb24gXzdiKGEsYil7dmFyIGMsZCxlLGYsZyxoO2Y9YS5kO2g9QmViKE1EKFdNYihhLChCd2MoKSxGdWMpKSkpO2lmKGg8MCl7aD0wO1pNYihhLEZ1YyxoKX1iLm8uYj1oO2c9JHduZC5NYXRoLmZsb29yKGgvMik7ZD1uZXcgYlpiO2FaYihkLChSamQoKSxRamQpKTtfWWIoZCxiKTtkLm4uYj1nO2U9bmV3IGJaYjthWmIoZSx3amQpO19ZYihlLGIpO2Uubi5iPWc7aFdiKGEsZCk7Yz1uZXcga1diO1VNYihjLGEpO1pNYihjLFJ1YyxudWxsKTtnV2IoYyxlKTtoV2IoYyxmKTskN2IoYixhLGMpO1k3YihhLGMpO3JldHVybiBjfQpmdW5jdGlvbiBYTGMoYSl7dmFyIGIsYztjPUpEKFdNYihhLChJcWMoKSxXcGMpKSwyMik7Yj1uZXcgSjljO2lmKGMuR2MoKCRvYygpLFVvYykpKXtEOWMoYixSTGMpO0Q5YyhiLFRMYyl9aWYoYy5HYyhXb2MpfHx5ZGIoTEQoV01iKGEsKEJ3YygpLEd1YykpKSkpe0Q5YyhiLFRMYyk7Yy5HYyhYb2MpJiZEOWMoYixVTGMpfWMuR2MoVG9jKSYmRDljKGIsUUxjKTtjLkdjKFpvYykmJkQ5YyhiLFZMYyk7Yy5HYyhWb2MpJiZEOWMoYixTTGMpO2MuR2MoUW9jKSYmRDljKGIsT0xjKTtjLkdjKFNvYykmJkQ5YyhiLFBMYyk7cmV0dXJuIGJ9CmZ1bmN0aW9uIEhpYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07ZD1hLmQ7Zj1iLmQ7aD1kK2Y7aT1hLmUhPWIuZT8tMToxO2lmKGg9PTIpe2s9RmNiKHVjYihhLmFbMF0sVXNlKSx1Y2IoYi5hWzBdLFVzZSkpO209UGNiKGspO2w9UGNiKExjYihrLDMyKSk7cmV0dXJuIGw9PTA/bmV3IFRoYihpLG0pOm5ldyBWaGIoaSwyLFdDKE9DKGNFLDEpLGlzZSwzMCwxNSxbbSxsXSkpfWM9YS5hO2U9Yi5hO2c9U0MoY0UsaXNlLDMwLGgsMTUsMSk7RWliKGMsZCxlLGYsZyk7aj1uZXcgVmhiKGksaCxnKTtJaGIoaik7cmV0dXJuIGp9CmZ1bmN0aW9uIEl4YihhLGIsYyxkKXt2YXIgZSxmO2lmKCFiKXtyZXR1cm4gY31lbHNle2U9YS5hLkxlKGMuZCxiLmQpO2lmKGU9PTApe2QuZD1oa2IoYixjLmUpO2QuYj10cnVlO3JldHVybiBifWY9ZTwwPzA6MTtiLmFbZl09SXhiKGEsYi5hW2ZdLGMsZCk7aWYoSnhiKGIuYVtmXSkpe2lmKEp4YihiLmFbMS1mXSkpe2IuYj10cnVlO2IuYVswXS5iPWZhbHNlO2IuYVsxXS5iPWZhbHNlfWVsc2V7SnhiKGIuYVtmXS5hW2ZdKT8oYj1ReGIoYiwxLWYpKTpKeGIoYi5hW2ZdLmFbMS1mXSkmJihiPVB4YihiLDEtZikpfX19cmV0dXJuIGJ9CmZ1bmN0aW9uIHlIYihhLGIsYyl7dmFyIGQsZSxmLGc7ZT1hLmk7ZD1hLm47eEhiKGEsKGlIYigpLGZIYiksZS5jK2QuYixjKTt4SGIoYSxoSGIsZS5jK2UuYi1kLmMtY1syXSxjKTtnPWUuYi1kLmItZC5jO2lmKGNbMF0+MCl7Y1swXSs9YS5kO2ctPWNbMF19aWYoY1syXT4wKXtjWzJdKz1hLmQ7Zy09Y1syXX1mPSR3bmQuTWF0aC5tYXgoMCxnKTtjWzFdPSR3bmQuTWF0aC5tYXgoY1sxXSxnKTt4SGIoYSxnSGIsZS5jK2QuYitjWzBdLShjWzFdLWcpLzIsYyk7aWYoYj09Z0hiKXthLmMuYj1mO2EuYy5jPWUuYytkLmIrKGYtZykvMn19CmZ1bmN0aW9uIE5VYigpe3RoaXMuYz1TQyhhRSxSc2UsMzAsKFJqZCgpLFdDKE9DKHYyLDEpLEF2ZSw2NCwwLFtQamQseGpkLHdqZCxPamQsUWpkXSkpLmxlbmd0aCwxNSwxKTt0aGlzLmI9U0MoYUUsUnNlLDMwLFdDKE9DKHYyLDEpLEF2ZSw2NCwwLFtQamQseGpkLHdqZCxPamQsUWpkXSkubGVuZ3RoLDE1LDEpO3RoaXMuYT1TQyhhRSxSc2UsMzAsV0MoT0ModjIsMSksQXZlLDY0LDAsW1BqZCx4amQsd2pkLE9qZCxRamRdKS5sZW5ndGgsMTUsMSk7Q21iKHRoaXMuYyxLc2UpO0NtYih0aGlzLmIsTHNlKTtDbWIodGhpcy5hLExzZSl9CmZ1bmN0aW9uIE1vZShhLGIsYyl7dmFyIGQsZSxmLGc7aWYoYjw9Yyl7ZT1iO2Y9Y31lbHNle2U9YztmPWJ9ZD0wO2lmKGEuYj09bnVsbCl7YS5iPVNDKGNFLGlzZSwzMCwyLDE1LDEpO2EuYlswXT1lO2EuYlsxXT1mO2EuYz10cnVlfWVsc2V7ZD1hLmIubGVuZ3RoO2lmKGEuYltkLTFdKzE9PWUpe2EuYltkLTFdPWY7cmV0dXJufWc9U0MoY0UsaXNlLDMwLGQrMiwxNSwxKTskZ2IoYS5iLDAsZywwLGQpO2EuYj1nO2EuYltkLTFdPj1lJiYoYS5jPWZhbHNlLGEuYT1mYWxzZSk7YS5iW2QrK109ZTthLmJbZF09ZjthLmN8fFFvZShhKX19CmZ1bmN0aW9uIGxrYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7aj1iLmQ7YS5hPW5ldyBWbGIoai5jLmxlbmd0aCk7YS5jPW5ldyBJcmI7Zm9yKGg9bmV3IHJtYihqKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTA1KTtmPW5ldyBYTWMobnVsbCk7SWxiKGEuYSxmKTtRaWIoYS5jLGcsZil9YS5iPW5ldyBJcmI7amtjKGEsYik7Zm9yKGQ9MDtkPGouYy5sZW5ndGgtMTtkKyspe2k9SkQoTWxiKGIuZCxkKSwxMDUpO2ZvcihlPWQrMTtlPGouYy5sZW5ndGg7ZSsrKXtta2MoYSxpLEpEKE1sYihiLmQsZSksMTA1KSxjKX19fQpmdW5jdGlvbiBFSGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtjPUxzZTtoPShEWWIoKSxBWWIpO2ZvcihlPW5ldyBybWIoYi5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksOSk7Zj1kLms7aWYoZiE9QVliKXtnPU1EKFdNYihkLChJcWMoKSxtcWMpKSk7aWYoZz09bnVsbCl7Yz0kd25kLk1hdGgubWF4KGMsMCk7ZC5uLmI9YytkemMoYS5hLGYsaCl9ZWxzZXtkLm4uYj0odERiKGcpLGcpfX1pPWR6YyhhLmEsZixoKTtkLm4uYjxjK2krZC5kLmQmJihkLm4uYj1jK2krZC5kLmQpO2M9ZC5uLmIrZC5vLmIrZC5kLmE7aD1mfX0KZnVuY3Rpb24gVFljKGEpe3ZhciBiLGMsZCxlLGY7ZT1uZXcgVWxiO2I9bmV3IFNyYigoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpKTtmb3IoZD1uZXcgZXMoSXIoJEJkKGEpLmEuSmMoKSxuZXcgZXIpKTtjcyhkKTspe2M9SkQoZHMoZCksODUpO2lmKCFSRChuRGQoKCFjLmImJihjLmI9bmV3IHJlZSh2MyxjLDQsNykpLGMuYiksMCksMTkzKSl7Zj1fQmQoSkQobkRkKCghYy5jJiYoYy5jPW5ldyByZWUodjMsYyw1LDgpKSxjLmMpLDApLDg0KSk7Yi5hLl9iKGYpfHwoWUNiKGUuYyxmKSx0cnVlKX19cmV0dXJuIGV9CmZ1bmN0aW9uIGdtZShhLGIsYyl7dmFyIGQsZSxmO2EuZT1jO2EuZD0wO2EuYj0wO2EuZj0xO2EuaT1iOyhhLmUmMTYpPT0xNiYmKGEuaT1QbmUoYS5pKSk7YS5qPWEuaS5sZW5ndGg7Zm1lKGEpO2Y9am1lKGEpO2lmKGEuZCE9YS5qKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksVURlKSkpKTtpZihhLmcpe2ZvcihkPTA7ZDxhLmcuYS5jLmxlbmd0aDtkKyspe2U9SkQoVXdiKGEuZyxkKSw1NzUpO2lmKGEuZjw9ZS5hKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksVkRlKSkpKX1hLmcuYS5jLmxlbmd0aD0wfXJldHVybiBmfQpmdW5jdGlvbiBBX2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtiLlNnKCdDb21tZW50IHBvc3QtcHJvY2Vzc2luZycsMSk7Zm9yKGY9bmV3IHJtYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwyNSk7ZD1uZXcgVWxiO2ZvcihoPW5ldyBybWIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7aT1KRChXTWIoZywoSXFjKCksSHFjKSksMTUpO2M9SkQoV01iKGcsRnBjKSwxNSk7aWYoISFpfHwhIWMpe0JfYihnLGksYyk7ISFpJiZLbGIoZCxpKTshIWMmJktsYihkLGMpfX1LbGIoZS5hLGQpfWIuVGcoKX0KZnVuY3Rpb24gelpjKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrOyEhYS5kJiZhLmQuRWcoZSk7Zj1KRChlLlhiKDApLDI3KTtpZih4WmMoYSxjLGYsZmFsc2UpKXtyZXR1cm4gdHJ1ZX1nPUpEKGUuWGIoZS5nYygpLTEpLDI3KTtpZih4WmMoYSxkLGcsdHJ1ZSkpe3JldHVybiB0cnVlfWlmKHNaYyhhLGUpKXtyZXR1cm4gdHJ1ZX1mb3Ioaz1lLkpjKCk7ay5PYigpOyl7aj1KRChrLlBiKCksMjcpO2ZvcihpPWIuSmMoKTtpLk9iKCk7KXtoPUpEKGkuUGIoKSwyNyk7aWYoclpjKGEsaixoKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIHNxZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07bT1iLmMubGVuZ3RoO2w9KGo9YS5FaChjKSxKRChqPj0wP2EuSGgoaixmYWxzZSx0cnVlKTp1cWQoYSxjLGZhbHNlKSw2MSkpO246Zm9yKGY9bC5KYygpO2YuT2IoKTspe2U9SkQoZi5QYigpLDU3KTtmb3Ioaz0wO2s8bTsrK2spe2c9KHNEYihrLGIuYy5sZW5ndGgpLEpEKGIuY1trXSw3NCkpO2k9Zy5rZCgpO2g9Zy5JaygpO2Q9ZS5KaChoLGZhbHNlKTtpZihpPT1udWxsP2QhPW51bGw6IXBiKGksZCkpe2NvbnRpbnVlIG59fXJldHVybiBlfXJldHVybiBudWxsfQpmdW5jdGlvbiB3M2IoYSxiLGMsZCl7dmFyIGUsZixnLGg7ZT1KRChvWWIoYiwoUmpkKCksUWpkKSkuSmMoKS5QYigpLDExKTtmPUpEKG9ZYihiLHdqZCkuSmMoKS5QYigpLDExKTtmb3IoaD1uZXcgcm1iKGEuaik7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDExKTt3aGlsZShnLmUuYy5sZW5ndGghPTApe2hXYihKRChNbGIoZy5lLDApLDE4KSxlKX13aGlsZShnLmcuYy5sZW5ndGghPTApe2dXYihKRChNbGIoZy5nLDApLDE4KSxmKX19Y3x8Wk1iKGIsKElxYygpLGZxYyksbnVsbCk7ZHx8Wk1iKGIsKElxYygpLGdxYyksbnVsbCl9CmZ1bmN0aW9uIGc3YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2M9bmV3IG5sYjtmb3IoZj1uZXcgcm1iKGEuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDI1KTtpPXRydWU7ZD0wO2ZvcihoPW5ldyBybWIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7c3dpdGNoKGcuay5nKXtjYXNlIDQ6KytkO2Nhc2UgMTpfa2IoYyxnKTticmVhaztjYXNlIDA6aTdiKGcsYik7ZGVmYXVsdDpjLmI9PWMuY3x8aDdiKGMsZCxpLGZhbHNlLGIpO2k9ZmFsc2U7ZD0wO319Yy5iPT1jLmN8fGg3YihjLGQsaSx0cnVlLGIpfX0KZnVuY3Rpb24gZjhiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajthLmE9bmV3IHFfYjtqPTA7ZT0wO2ZvcihkPW5ldyBybWIoYS5pLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihkKSwyNSk7Yi5wPWU7Zm9yKGk9bmV3IHJtYihiLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSw5KTtoLnA9ajsrK2p9KytlfWY9YS5yPT0oZHljKCksV3hjKTtnPWY/YjhiOmE4Yjtmb3IoYz1uZXcgcm1iKGEuaS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMjUpO1NsYihiLmEsZyk7cF9iKGEuYSxqZmIoYi5wKSxiLmEpfX0KZnVuY3Rpb24gbEdjKGEsYil7dmFyIGMsZCxlLGYsZyxoO2M9MDtmb3IoaD1uZXcgcm1iKGIpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxMSk7YkdjKGEuYixhLmRbZy5wXSk7Zm9yKGU9bmV3IHhaYihnLmIpO29tYihlLmEpfHxvbWIoZS5iKTspe2Q9SkQob21iKGUuYSk/cG1iKGUuYSk6cG1iKGUuYiksMTgpO2Y9REdjKGEsZz09ZC5jP2QuZDpkLmMpO2lmKGY+YS5kW2cucF0pe2MrPWFHYyhhLmIsZik7JGtiKGEuYSxqZmIoZikpfX13aGlsZSghZWxiKGEuYSkpeyRGYyhhLmIsSkQoamxiKGEuYSksMTcpLmEpfX1yZXR1cm4gY30KZnVuY3Rpb24gTzhjKGEsYixjKXt2YXIgZCxlLGYsZztmPSghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSkuaTtmb3IoZT1uZXcgQ0hkKCghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSkpO2UuZSE9ZS5pLmdjKCk7KXtkPUpEKEFIZChlKSwyNyk7KCFkLmEmJihkLmE9bmV3IFgwZChBMyxkLDEwLDExKSksZC5hKS5pPT0wfHwoZis9TzhjKGEsZCxmYWxzZSkpfWlmKGMpe2c9WndkKGIpO3doaWxlKGcpe2YrPSghZy5hJiYoZy5hPW5ldyBYMGQoQTMsZywxMCwxMSkpLGcuYSkuaTtnPVp3ZChnKX19cmV0dXJuIGZ9CmZ1bmN0aW9uIFVHZChhLGIpe3ZhciBjLGQsZSxmO2lmKGEuTWooKSl7ZD1udWxsO2U9YS5OaigpO2EuUWooKSYmKGQ9YS5TaihhLlhpKGIpLG51bGwpKTtjPWEuRmooNCxmPXFEZChhLGIpLG51bGwsYixlKTtpZihhLkpqKCkmJmYhPW51bGwpe2Q9YS5MaihmLGQpO2lmKCFkKXthLkdqKGMpfWVsc2V7ZC5raihjKTtkLmxqKCl9fWVsc2V7aWYoIWQpe2EuR2ooYyl9ZWxzZXtkLmtqKGMpO2QubGooKX19cmV0dXJuIGZ9ZWxzZXtmPXFEZChhLGIpO2lmKGEuSmooKSYmZiE9bnVsbCl7ZD1hLkxqKGYsbnVsbCk7ISFkJiZkLmxqKCl9cmV0dXJuIGZ9fQpmdW5jdGlvbiBXS2IoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGs7aj1hLmE7Yj1uZXcgUXJiO2k9MDtmb3IoZD1uZXcgcm1iKGEuZCk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDIyNSk7az0wO2h1YihjLmIsbmV3IFpLYik7Zm9yKGc9R3RiKGMuYiwwKTtnLmIhPWcuZC5jOyl7Zj1KRChVdGIoZyksMjI1KTtpZihiLmEuX2IoZikpe2U9Yy5jO2g9Zi5jO2s8aC5kK2guYStqJiZrK2UuYStqPmguZCYmKGs9aC5kK2guYStqKX19Yy5jLmQ9aztiLmEueWMoYyxiKTtpPSR3bmQuTWF0aC5tYXgoaSxjLmMuZCtjLmMuYSl9cmV0dXJuIGl9CmZ1bmN0aW9uIHA3YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2ZvcihnPUpEKFdNYihhLChJcWMoKSxYcGMpKSwxNSkuSmMoKTtnLk9iKCk7KXtmPUpEKGcuUGIoKSw5KTtzd2l0Y2goSkQoV01iKGYsKEJ3YygpLFV1YykpLDE3MSkuZyl7Y2FzZSAyOnFZYihmLGIpO2JyZWFrO2Nhc2UgNDpxWWIoZixjKTt9Zm9yKGU9bmV3IGVzKElyKGVZYihmKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDE4KTtpZighIWQuYyYmISFkLmQpe2NvbnRpbnVlfWg9IWQuZDtpPUpEKFdNYihkLG9xYyksMTEpO2g/aFdiKGQsaSk6Z1diKGQsaSl9fX0KZnVuY3Rpb24gJG9jKCl7JG9jPVpjYjtSb2M9bmV3IF9vYygnQ09NTUVOVFMnLDApO1RvYz1uZXcgX29jKCdFWFRFUk5BTF9QT1JUUycsMSk7VW9jPW5ldyBfb2MoJ0hZUEVSRURHRVMnLDIpO1ZvYz1uZXcgX29jKCdIWVBFUk5PREVTJywzKTtXb2M9bmV3IF9vYygnTk9OX0ZSRUVfUE9SVFMnLDQpO1hvYz1uZXcgX29jKCdOT1JUSF9TT1VUSF9QT1JUUycsNSk7Wm9jPW5ldyBfb2Moc3dlLDYpO1FvYz1uZXcgX29jKCdDRU5URVJfTEFCRUxTJyw3KTtTb2M9bmV3IF9vYygnRU5EX0xBQkVMUycsOCk7WW9jPW5ldyBfb2MoJ1BBUlRJVElPTlMnLDkpfQpmdW5jdGlvbiBIQShhLGIsYyxkLGUpe2lmKGQ8MCl7ZD13QShhLGUsV0MoT0MoaEosMSksaHJlLDIsNixbWHJlLFlyZSxacmUsJHJlLF9yZSxhc2UsYnNlLGNzZSxkc2UsZXNlLGZzZSxnc2VdKSxiKTtkPDAmJihkPXdBKGEsZSxXQyhPQyhoSiwxKSxocmUsMiw2LFsnSmFuJywnRmViJywnTWFyJywnQXByJyxfcmUsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddKSxiKSk7aWYoZDwwKXtyZXR1cm4gZmFsc2V9Yy5rPWQ7cmV0dXJuIHRydWV9ZWxzZSBpZihkPjApe2Muaz1kLTE7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBKQShhLGIsYyxkLGUpe2lmKGQ8MCl7ZD13QShhLGUsV0MoT0MoaEosMSksaHJlLDIsNixbWHJlLFlyZSxacmUsJHJlLF9yZSxhc2UsYnNlLGNzZSxkc2UsZXNlLGZzZSxnc2VdKSxiKTtkPDAmJihkPXdBKGEsZSxXQyhPQyhoSiwxKSxocmUsMiw2LFsnSmFuJywnRmViJywnTWFyJywnQXByJyxfcmUsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddKSxiKSk7aWYoZDwwKXtyZXR1cm4gZmFsc2V9Yy5rPWQ7cmV0dXJuIHRydWV9ZWxzZSBpZihkPjApe2Muaz1kLTE7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBMQShhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGo7aD0zMjtpZihkPDApe2lmKGJbMF0+PWEubGVuZ3RoKXtyZXR1cm4gZmFsc2V9aD1fZmIoYSxiWzBdKTtpZihoIT00MyYmaCE9NDUpe3JldHVybiBmYWxzZX0rK2JbMF07ZD16QShhLGIpO2lmKGQ8MCl7cmV0dXJuIGZhbHNlfWg9PTQ1JiYoZD0tZCl9aWYoaD09MzImJmJbMF0tYz09MiYmZS5iPT0yKXtpPW5ldyBtQjtqPWkucS5nZXRGdWxsWWVhcigpLWhzZStoc2UtODA7Zz1qJTEwMDtmLmE9ZD09ZztkKz0oai8xMDB8MCkqMTAwKyhkPGc/MTAwOjApfWYucD1kO3JldHVybiB0cnVlfQpmdW5jdGlvbiBmJGIoYSxiKXt2YXIgYyxkLGUsZixnO2lmKCFad2QoYSkpe3JldHVybn1nPUpEKFdNYihiLChCd2MoKSxvdmMpKSwxODEpO1hEKGtzZChhLEV2YykpPT09WEQoKGFqZCgpLF9pZCkpJiZtc2QoYSxFdmMsJGlkKTtkPShSb2QoKSxuZXcgZHBkKFp3ZChhKSkpO2Y9bmV3IGpwZCghWndkKGEpP251bGw6bmV3IGRwZChad2QoYSkpLGEpO2U9UkdiKGQsZixmYWxzZSx0cnVlKTtvcmIoZywoeWtkKCksdWtkKSk7Yz1KRChXTWIoYixxdmMpLDgpO2MuYT0kd25kLk1hdGgubWF4KGUuYSxjLmEpO2MuYj0kd25kLk1hdGgubWF4KGUuYixjLmIpfQpmdW5jdGlvbiBTWWMoYSl7dmFyIGIsYyxkLGUsZixnO2Y9bmV3IFFyYjtiPW5ldyBTcmIoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7Zm9yKGU9bmV3IGVzKElyKCRCZChhKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDg1KTtpZighUkQobkRkKCghZC5iJiYoZC5iPW5ldyByZWUodjMsZCw0LDcpKSxkLmIpLDApLDE5Mykpe2c9X0JkKEpEKG5EZCgoIWQuYyYmKGQuYz1uZXcgcmVlKHYzLGQsNSw4KSksZC5jKSwwKSw4NCkpO2IuYS5fYihnKXx8KGM9Zi5hLnljKGcsZiksYz09bnVsbCl9fXJldHVybiBmfQpmdW5jdGlvbiBJY2QoKXtJY2Q9WmNiO0hjZD1XQyhPQyhkRSwxKSxOc2UsMzAsMTQsWzEsMSwyLDYsMjQsMTIwLDcyMCw1MDQwLDQwMzIwLDM2Mjg4MCwzNjI4ODAwLDM5OTE2ODAwLDQ3OTAwMTYwMCw2MjI3MDIwODAwLDg3MTc4MjkxMjAwLDEzMDc2NzQzNjgwMDAse2w6MzUwNjE3NixtOjc5NDA3NyxoOjF9LHtsOjg4NDczNixtOjkxNjQxMSxoOjIwfSx7bDozMzQyMzM2LG06MzkxMjQ4OSxoOjM2M30se2w6NTg5ODI0LG06MzAzNDEzOCxoOjY5MTR9LHtsOjM0MDc4NzIsbToxOTYyNTA2LGg6MTM4Mjk0fV0pOyR3bmQuTWF0aC5wb3coMiwtNjUpfQpmdW5jdGlvbiBDaWIoKXtDaWI9WmNiO3ZhciBhLGI7QWliPVNDKGxKLGhyZSw5MCwzMiwwLDEpO0JpYj1TQyhsSixocmUsOTAsMzIsMCwxKTthPTE7Zm9yKGI9MDtiPD0xODtiKyspe0FpYltiXT0oR2hiKCksdmNiKGEsMCk+PTA/YWliKGEpOk9oYihhaWIoR2NiKGEpKSkpO0JpYltiXT1CY2IoSmNiKGEsYiksMCk/YWliKEpjYihhLGIpKTpPaGIoYWliKEdjYihKY2IoYSxiKSkpKTthPUZjYihhLDUpfWZvcig7YjxCaWIubGVuZ3RoO2IrKyl7QWliW2JdPU5oYihBaWJbYi0xXSxBaWJbMV0pO0JpYltiXT1OaGIoQmliW2ItMV0sKEdoYigpLERoYikpfX0KZnVuY3Rpb24gSDliKGEsYil7dmFyIGMsZCxlLGYsZztpZihhLmMubGVuZ3RoPT0wKXtyZXR1cm4gbmV3IHhvZChqZmIoMCksamZiKDApKX1jPShzRGIoMCxhLmMubGVuZ3RoKSxKRChhLmNbMF0sMTEpKS5qO2c9MDtmPWIuZztkPWIuZysxO3doaWxlKGc8YS5jLmxlbmd0aC0xJiZjLmc8Zil7KytnO2M9KHNEYihnLGEuYy5sZW5ndGgpLEpEKGEuY1tnXSwxMSkpLmp9ZT1nO3doaWxlKGU8YS5jLmxlbmd0aC0xJiZjLmc8ZCl7KytlO2M9KHNEYihnLGEuYy5sZW5ndGgpLEpEKGEuY1tnXSwxMSkpLmp9cmV0dXJuIG5ldyB4b2QoamZiKGcpLGpmYihlKSl9CmZ1bmN0aW9uIFFEYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztpPWxZYihiLGMpOyhjPT0oUmpkKCksT2pkKXx8Yz09UWpkKSYmKGk9ZHYoaSkpO2c9ZmFsc2U7ZG97ZT1mYWxzZTtmb3IoZj0wO2Y8aS5nYygpLTE7ZisrKXtqPUpEKGkuWGIoZiksMTEpO2g9SkQoaS5YYihmKzEpLDExKTtpZihSRGMoYSxqLGgsZCkpe2c9dHJ1ZTtGR2MoYS5hLEpEKGkuWGIoZiksMTEpLEpEKGkuWGIoZisxKSwxMSkpO2s9SkQoaS5YYihmKzEpLDExKTtpLmZkKGYrMSxKRChpLlhiKGYpLDExKSk7aS5mZChmLGspO2U9dHJ1ZX19fXdoaWxlKGUpO3JldHVybiBnfQpmdW5jdGlvbiBvVGMoYSxiLGMpe3ZhciBkLGUsZixnO2MuU2coSHplLDEpO2U9SkQoeUJiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmIsMTYpKSxuZXcgc1RjKSxoQWIobmV3IHpBYixuZXcgeEFiLG5ldyBGQWIsV0MoT0MoSEwsMSksRXJlLDEzMSwwLFsobEFiKCksakFiKV0pKSksMTUpO3BUYyhhLGUsMCk7Zm9yKGc9R3RiKGIuYiwwKTtnLmIhPWcuZC5jOyl7Zj1KRChVdGIoZyksMzkpO2Q9TmliKGEuYSxqZmIoZi5nKSkhPW51bGw/SkQoTmliKGEuYSxqZmIoZi5nKSksMTcpLmE6MDtaTWIoZiwoa1ZjKCksaVZjKSxqZmIoZCkpfWMuVGcoKX0KZnVuY3Rpb24gclpjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO2g9Yi5pLWEuZy8yO2k9Yy5pLWEuZy8yO2o9Yi5qLWEuZy8yO2s9Yy5qLWEuZy8yO2Y9Yi5nK2EuZztnPWMuZythLmc7ZD1iLmYrYS5nO2U9Yy5mK2EuZztpZihoPGkrZyYmaTxoJiZqPGsrZSYmazxqKXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKGk8aCtmJiZoPGkmJms8aitkJiZqPGspe3JldHVybiB0cnVlfWVsc2UgaWYoaDxpK2cmJmk8aCYmajxrJiZrPGorZCl7cmV0dXJuIHRydWV9ZWxzZSBpZihpPGgrZiYmaDxpJiZqPGsrZSYmazxqKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIHQ2YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07Zj1iLmMubGVuZ3RoO2c9KHNEYihjLGIuYy5sZW5ndGgpLEpEKGIuY1tjXSwyOTEpKTtoPWcuYS5vLmE7bD1nLmM7bT0wO2ZvcihqPWcuYztqPD1nLmY7aisrKXtpZihoPD1hLmFbal0pe3JldHVybiBqfWs9YS5hW2pdO2k9bnVsbDtmb3IoZT1jKzE7ZTxmO2UrKyl7ZD0oc0RiKGUsYi5jLmxlbmd0aCksSkQoYi5jW2VdLDI5MSkpO2QuYzw9aiYmZC5mPj1qJiYoaT1kKX0hIWkmJihrPSR3bmQuTWF0aC5tYXgoayxpLmEuby5hKSk7aWYoaz5tKXtsPWo7bT1rfX1yZXR1cm4gbH0KZnVuY3Rpb24gZmxjKGEpe3ZhciBiLGMsZCxlLGYsZztmb3IoYz1uZXcgcm1iKGEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI1KTtmPWZhbHNlO2c9ZmFsc2U7Zm9yKGU9bmV3IHJtYihiLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSw5KTtpZighZiYmWE1iKGQsKEJ3YygpLF91YykpKXtaTWIoYiwoQndjKCksX3VjKSxKRChXTWIoZCxfdWMpLDE3KSk7Zj10cnVlfWlmKCFnJiZYTWIoZCwoQndjKCksYXZjKSkpe1pNYihiLChCd2MoKSxhdmMpLExEKFdNYihkLGF2YykpKTtnPXRydWV9aWYoZiYmZyl7cmV0dXJufX19fQpmdW5jdGlvbiBiTGIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Zj1uZXcgbXpiKEpEKFFiKG5ldyBwTGIpLDUxKSk7aD1Mc2U7Zm9yKGM9bmV3IHJtYihhLmQpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwyMjUpO2g9Yi5jLmM7d2hpbGUoZi5hLmdjKCkhPTApe2c9SkQoZi5hLlJjKCksMjI1KTtpZihnLmMuYytnLmMuYjxoKXtmLmEuQWMoZykhPW51bGx9ZWxzZXticmVha319Zm9yKGU9Zi5hLmVjKCkuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwyMjUpO0F0YihkLmIsYik7QXRiKGIuYixkKX1mLmEueWMoYiwoeGRiKCksdmRiKSk9PW51bGx9fQpmdW5jdGlvbiB2VGMoYSxiLGMpe3ZhciBkLGUsZixnLGg7aWYoIWNyKGIpKXtoPWMuYmgoKFJEKGIsMTYpP0pEKGIsMTYpLmdjKCk6R3IoYi5KYygpKSkvYS5hfDApO2guU2coSnplLDEpO2c9bmV3IHlUYztmPW51bGw7Zm9yKGU9Yi5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDM5KTtnPXlsKFdDKE9DKFZJLDEpLE5xZSwyMCwwLFtnLG5ldyBnUmMoZCldKSk7aWYoZil7Wk1iKGYsKHRVYygpLG9VYyksZCk7Wk1iKGQsZVVjLGYpO2lmKGNSYyhkKT09Y1JjKGYpKXtaTWIoZixwVWMsZCk7Wk1iKGQsZlVjLGYpfX1mPWR9aC5UZygpO3ZUYyhhLGcsYyl9fQpmdW5jdGlvbiBVWWQoYSxiKXt2YXIgYyxkLGU7aWYoYj09bnVsbCl7Zm9yKGQ9KCFhLmEmJihhLmE9bmV3IFgwZChkNixhLDksNSkpLG5ldyBDSGQoYS5hKSk7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoQUhkKGQpLDY3OSk7ZT1jLmM7aWYoKGU9PW51bGw/Yy56YjplKT09bnVsbCl7cmV0dXJuIGN9fX1lbHNle2ZvcihkPSghYS5hJiYoYS5hPW5ldyBYMGQoZDYsYSw5LDUpKSxuZXcgQ0hkKGEuYSkpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSw2NzkpO2lmKGNnYihiLChlPWMuYyxlPT1udWxsP2MuemI6ZSkpKXtyZXR1cm4gY319fXJldHVybiBudWxsfQpmdW5jdGlvbiBNSWIoYSxiKXt2YXIgYztjPW51bGw7c3dpdGNoKGIuZyl7Y2FzZSAxOmEuZS5uZigoTGdkKCksVGZkKSkmJihjPUpEKGEuZS5tZihUZmQpLDI1NSkpO2JyZWFrO2Nhc2UgMzphLmUubmYoKExnZCgpLFVmZCkpJiYoYz1KRChhLmUubWYoVWZkKSwyNTUpKTticmVhaztjYXNlIDI6YS5lLm5mKChMZ2QoKSxTZmQpKSYmKGM9SkQoYS5lLm1mKFNmZCksMjU1KSk7YnJlYWs7Y2FzZSA0OmEuZS5uZigoTGdkKCksVmZkKSkmJihjPUpEKGEuZS5tZihWZmQpLDI1NSkpO30hYyYmKGM9SkQoYS5lLm1mKChMZ2QoKSxRZmQpKSwyNTUpKTtyZXR1cm4gY30KZnVuY3Rpb24gYjBjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZT1jO2Y9MDtmb3IoaD1uZXcgcm1iKGIpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwyNyk7bXNkKGcsKGJfYygpLFMkYyksamZiKGUrKykpO2k9VFljKGcpO2Q9JHduZC5NYXRoLmF0YW4yKGcuaitnLmYvMixnLmkrZy5nLzIpO2QrPWQ8MD8kemU6MDtkPDAuNzg1Mzk4MTYzMzk3NDQ4M3x8ZD5CQWU/U2xiKGksYS5iKTpkPD1CQWUmJmQ+Q0FlP1NsYihpLGEuZCk6ZDw9Q0FlJiZkPkRBZT9TbGIoaSxhLmMpOmQ8PURBZSYmU2xiKGksYS5hKTtmPWIwYyhhLGksZil9cmV0dXJuIGV9CmZ1bmN0aW9uIHZOYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo7ZT0oZC5jK2QuYSkvMjtMdGIoYi5qKTtBdGIoYi5qLGUpO0x0YihjLmUpO0F0YihjLmUsZSk7aj1uZXcgRE5jO2ZvcihoPW5ldyBybWIoYS5mKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoaCksMTMzKTtpPWYuYTt4TmMoaixiLGkpO3hOYyhqLGMsaSl9Zm9yKGc9bmV3IHJtYihhLmspO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwxMzMpO2k9Zi5iO3hOYyhqLGIsaSk7eE5jKGosYyxpKX1qLmIrPTI7ai5hKz1xTmMoYixhLnEpO2ouYSs9cU5jKGEucSxjKTtyZXR1cm4gan0KZnVuY3Rpb24gWFZjKGEsYixjKXt2YXIgZDtjLlNnKCdQcm9jZXNzb3IgYXJyYW5nZSBub2RlJywxKTt5ZGIoTEQoV01iKGIsKGtWYygpLEpVYykpKSk7ZD1KRCh6dWIoQ0JiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmIsMTYpKSxuZXcgZldjKSkpLDM5KTthLmE9SkQoV01iKGIsalZjKSwzNTApO2EuYT09KHZWYygpLHRWYyl8fGEuYT09c1ZjP1dWYyhhLG5ldyBkbmIoV0MoT0MoTlosMSksSXplLDM5LDAsW2RdKSksYy5iaCgxKSk6YS5hPT1yVmMmJlZWYyhhLG5ldyBkbmIoV0MoT0MoTlosMSksSXplLDM5LDAsW2RdKSksYy5iaCgxKSk7Yy5UZygpfQpmdW5jdGlvbiBYSGIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Yz1hLmk7Yj1hLm47aD1jLmQ7YS5mPT0oR0liKCksRUliKT8oaCs9KGMuYS1hLmUuYikvMik6YS5mPT1ESWImJihoKz1jLmEtYS5lLmIpO2ZvcihlPW5ldyBybWIoYS5kKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTg3KTtnPWQuS2YoKTtmPW5ldyBDZGQ7Zi5iPWg7aCs9Zy5iK2EuYTtzd2l0Y2goYS5iLmcpe2Nhc2UgMDpmLmE9Yy5jK2IuYjticmVhaztjYXNlIDE6Zi5hPWMuYytiLmIrKGMuYi1nLmEpLzI7YnJlYWs7Y2FzZSAyOmYuYT1jLmMrYy5iLWIuYy1nLmE7fWQuTWYoZil9fQpmdW5jdGlvbiBaSGIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Yz1hLmk7Yj1hLm47aD1jLmM7YS5iPT0oUEhiKCksTUhiKT8oaCs9KGMuYi1hLmUuYSkvMik6YS5iPT1PSGImJihoKz1jLmItYS5lLmEpO2ZvcihlPW5ldyBybWIoYS5kKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTg3KTtnPWQuS2YoKTtmPW5ldyBDZGQ7Zi5hPWg7aCs9Zy5hK2EuYTtzd2l0Y2goYS5mLmcpe2Nhc2UgMDpmLmI9Yy5kK2IuZDticmVhaztjYXNlIDE6Zi5iPWMuZCtiLmQrKGMuYS1nLmIpLzI7YnJlYWs7Y2FzZSAyOmYuYj1jLmQrYy5hLWIuYS1nLmI7fWQuTWYoZil9fQpmdW5jdGlvbiBlMWIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbztrPWMuYS5jO2c9Yy5hLmMrYy5hLmI7Zj1KRChOaWIoYy5jLGIpLDQ1NCk7bj1mLmY7bz1mLmE7aT1uZXcgRWRkKGssbik7bD1uZXcgRWRkKGcsbyk7ZT1rO2MucHx8KGUrPWEuYyk7ZSs9Yy5GK2MudiphLmI7aj1uZXcgRWRkKGUsbik7bT1uZXcgRWRkKGUsbyk7TWRkKGIuYSxXQyhPQyhiMiwxKSxocmUsOCwwLFtpLGpdKSk7aD1jLmQuYS5nYygpPjE7aWYoaCl7ZD1uZXcgRWRkKGUsYy5iKTtBdGIoYi5hLGQpfU1kZChiLmEsV0MoT0MoYjIsMSksaHJlLDgsMCxbbSxsXSkpfQpmdW5jdGlvbiBXQWMoYSxiLGMpe3ZhciBkLGU7aWYoYjxhLmQuYi5jLmxlbmd0aCl7YS5iPUpEKE1sYihhLmQuYixiKSwyNSk7YS5hPUpEKE1sYihhLmQuYixiLTEpLDI1KTthLmM9Yn1lbHNle2EuYT1uZXcgYiRiKGEuZCk7YS5hLnA9Yi0xO0lsYihhLmQuYixhLmEpO2EuYj1uZXcgYiRiKGEuZCk7YS5iLnA9YjtJbGIoYS5kLmIsYS5iKTthLmM9Yn1xWWIoYyxhLmIpO2ZvcihlPW5ldyBlcyhJcihoWWIoYykuYS5KYygpLG5ldyBlcikpO2NzKGUpOyl7ZD1KRChkcyhlKSwxOCk7IWQuYy5pLmMmJmQuYy5pLms9PShEWWIoKSx4WWIpJiZxWWIoZC5jLmksYS5hKX19CmZ1bmN0aW9uIG9JYyhhLGIpe3ZhciBjLGQsZSxmO2ZvcihmPWxZYihiLChSamQoKSxPamQpKS5KYygpO2YuT2IoKTspe2Q9SkQoZi5QYigpLDExKTtjPUpEKFdNYihkLChJcWMoKSxzcWMpKSw5KTshIWMmJkRGYihHRmIoRkZiKEhGYihFRmIobmV3IElGYiwwKSwwLjEpLGEuaVtiLnBdLmQpLGEuaVtjLnBdLmEpKX1mb3IoZT1sWWIoYix4amQpLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksMTEpO2M9SkQoV01iKGQsKElxYygpLHNxYykpLDkpOyEhYyYmREZiKEdGYihGRmIoSEZiKEVGYihuZXcgSUZiLDApLDAuMSksYS5pW2MucF0uZCksYS5pW2IucF0uYSkpfX0KZnVuY3Rpb24gZmtkKGEpe1JhZChhLG5ldyBjYWQobmFkKGthZChtYWQobGFkKG5ldyBwYWQsckNlKSwnRUxLIFJhbmRvbWl6ZXInKSwnRGlzdHJpYnV0ZXMgdGhlIG5vZGVzIHJhbmRvbWx5IG9uIHRoZSBwbGFuZSwgbGVhZGluZyB0byB2ZXJ5IG9iZnVzY2F0aW5nIGxheW91dHMuIENhbiBiZSB1c2VmdWwgdG8gZGVtb25zdHJhdGUgdGhlIHBvd2VyIG9mICJyZWFsIiBsYXlvdXQgYWxnb3JpdGhtcy4nKSxuZXcgaWtkKSkpO1BhZChhLHJDZSxSdWUsYmtkKTtQYWQoYSxyQ2UsTXVlLDE1KTtQYWQoYSxyQ2UsUHVlLGpmYigwKSk7UGFkKGEsckNlLE91ZSxKdWUpfQpmdW5jdGlvbiBfbGUoKXtfbGU9WmNiO3ZhciBhLGIsYyxkLGUsZjtabGU9U0MoJEQsWkNlLDMwLDI1NSwxNSwxKTskbGU9U0MoX0QsVXJlLDMwLDE2LDE1LDEpO2ZvcihiPTA7YjwyNTU7YisrKXtabGVbYl09LTF9Zm9yKGM9NTc7Yz49NDg7Yy0tKXtabGVbY109Yy00ODw8MjQ+PjI0fWZvcihkPTcwO2Q+PTY1O2QtLSl7WmxlW2RdPWQtNjUrMTA8PDI0Pj4yNH1mb3IoZT0xMDI7ZT49OTc7ZS0tKXtabGVbZV09ZS05NysxMDw8MjQ+PjI0fWZvcihmPTA7ZjwxMDtmKyspJGxlW2ZdPTQ4K2YmV3JlO2ZvcihhPTEwO2E8PTE1O2ErKykkbGVbYV09NjUrYS0xMCZXcmV9CmZ1bmN0aW9uIEJTYyhhLGIpe2IuU2coJ1Byb2Nlc3MgZ3JhcGggYm91bmRzJywxKTtaTWIoYSwodFVjKCksYVVjKSxJdWIoU0FiKEdCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLmIsMTYpKSxuZXcgR1NjKSkpKTtaTWIoYSxjVWMsSXViKFNBYihHQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5iLDE2KSksbmV3IElTYykpKSk7Wk1iKGEsX1RjLEl1YihSQWIoR0JiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYiwxNikpLG5ldyBLU2MpKSkpO1pNYihhLGJVYyxJdWIoUkFiKEdCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLmIsMTYpKSxuZXcgTVNjKSkpKTtiLlRnKCl9CmZ1bmN0aW9uIFpQYihhKXt2YXIgYixjLGQsZSxmO2U9SkQoV01iKGEsKEJ3YygpLG92YykpLDIyKTtmPUpEKFdNYihhLHJ2YyksMjIpO2M9bmV3IEVkZChhLmYuYSthLmQuYithLmQuYyxhLmYuYithLmQuZCthLmQuYSk7Yj1uZXcgRmRkKGMpO2lmKGUuR2MoKHlrZCgpLHVrZCkpKXtkPUpEKFdNYihhLHF2YyksOCk7aWYoZi5HYygoTmtkKCksR2tkKSkpe2QuYTw9MCYmKGQuYT0yMCk7ZC5iPD0wJiYoZC5iPTIwKX1iLmE9JHduZC5NYXRoLm1heChjLmEsZC5hKTtiLmI9JHduZC5NYXRoLm1heChjLmIsZC5iKX15ZGIoTEQoV01iKGEscHZjKSkpfHwkUGIoYSxjLGIpfQpmdW5jdGlvbiBJZGMoYSl7dmFyIGIsYyxkLGUsZixnLGg7Yj1mYWxzZTtjPTA7Zm9yKGU9bmV3IHJtYihhLmQuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDI1KTtkLnA9YysrO2ZvcihnPW5ldyBybWIoZC5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksOSk7IWImJiFjcihlWWIoZikpJiYoYj10cnVlKX19aD1ucmIoKFRnZCgpLFJnZCksV0MoT0MoaTIsMSksRXJlLDg2LDAsW1BnZCxRZ2RdKSk7aWYoIWIpe29yYihoLFNnZCk7b3JiKGgsT2dkKX1hLmE9bmV3IGNFYihoKTtUaWIoYS5mKTtUaWIoYS5iKTtUaWIoYS5lKTtUaWIoYS5nKX0KZnVuY3Rpb24gSlRkKGEpe3ZhciBiLGMsZCxlLGYsZztpZighYS5jKXtnPW5ldyBwV2Q7Yj1EVGQ7Zj1iLmEueWMoYSxiKTtpZihmPT1udWxsKXtmb3IoZD1uZXcgQ0hkKE9UZChhKSk7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoQUhkKGQpLDg3KTtlPURaZChjKTtSRChlLDg4KSYmdkNkKGcsSlRkKEpEKGUsMjkpKSk7dENkKGcsYyl9Yi5hLkFjKGEpIT1udWxsO2IuYS5nYygpPT0wJiZ1bmRlZmluZWR9bVdkKGcpO3NEZChnKTthLmM9bmV3IGdXZCgoSkQobkRkKFNUZCgoR09kKCksRk9kKS5vKSwxNSksMTkpLGcuaSksZy5nKTtUVGQoYSkuYiY9LTMzfXJldHVybiBhLmN9CmZ1bmN0aW9uIFltZShhKXt2YXIgYjtpZihhLmMhPTEwKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksV0RlKSkpKTtiPWEuYTtzd2l0Y2goYil7Y2FzZSAxMTA6Yj0xMDticmVhaztjYXNlIDExNDpiPTEzO2JyZWFrO2Nhc2UgMTE2OmI9OTticmVhaztjYXNlIDkyOmNhc2UgMTI0OmNhc2UgNDY6Y2FzZSA5NDpjYXNlIDQ1OmNhc2UgNjM6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDkxOmNhc2UgOTM6YnJlYWs7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHlFZSkpKSk7fXJldHVybiBifQpmdW5jdGlvbiB5RChhKXt2YXIgYixjLGQsZSxmO2lmKGEubD09MCYmYS5tPT0wJiZhLmg9PTApe3JldHVybiAnMCd9aWYoYS5oPT1Cc2UmJmEubT09MCYmYS5sPT0wKXtyZXR1cm4gJy05MjIzMzcyMDM2ODU0Nzc1ODA4J31pZihhLmg+PjE5IT0wKXtyZXR1cm4gJy0nK3lEKHBEKGEpKX1jPWE7ZD0nJzt3aGlsZSghKGMubD09MCYmYy5tPT0wJiZjLmg9PTApKXtlPVpDKEVzZSk7Yz1hRChjLGUsdHJ1ZSk7Yj0nJyt4RChZQyk7aWYoIShjLmw9PTAmJmMubT09MCYmYy5oPT0wKSl7Zj05LWIubGVuZ3RoO2Zvcig7Zj4wO2YtLSl7Yj0nMCcrYn19ZD1iK2R9cmV0dXJuIGR9CmZ1bmN0aW9uIHVzYigpe2lmKCFPYmplY3QuY3JlYXRlfHwhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpe3JldHVybiBmYWxzZX12YXIgYT0nX19wcm90b19fJzt2YXIgYj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGJbYV0hPT11bmRlZmluZWQpe3JldHVybiBmYWxzZX12YXIgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKTtpZihjLmxlbmd0aCE9MCl7cmV0dXJuIGZhbHNlfWJbYV09NDI7aWYoYlthXSE9PTQyKXtyZXR1cm4gZmFsc2V9aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYikubGVuZ3RoPT0wKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9CmZ1bmN0aW9uIG1VYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsO2Q9Yy5jO2U9Yy5kO2g9V1liKGIuYyk7aT1XWWIoYi5kKTtpZihkPT1iLmMpe2g9blViKGEsaCxlKTtpPW9VYihiLmQpfWVsc2V7aD1vVWIoYi5jKTtpPW5VYihhLGksZSl9aj1uZXcgU2RkKGIuYSk7RHRiKGosaCxqLmEsai5hLmEpO0R0YihqLGksai5jLmIsai5jKTtnPWIuYz09ZDtsPW5ldyBPVWI7Zm9yKGY9MDtmPGouYi0xOysrZil7az1uZXcgeG9kKEpEKGZ1KGosZiksOCksSkQoZnUoaixmKzEpLDgpKTtnJiZmPT0wfHwhZyYmZj09ai5iLTI/KGwuYj1rKTpJbGIobC5hLGspfXJldHVybiBsfQpmdW5jdGlvbiBlWGIoYSxiKXt2YXIgYyxkLGUsZjtmPWEuai5nLWIuai5nO2lmKGYhPTApe3JldHVybiBmfWM9SkQoV01iKGEsKEJ3YygpLEZ2YykpLDE3KTtkPUpEKFdNYihiLEZ2YyksMTcpO2lmKCEhYyYmISFkKXtlPWMuYS1kLmE7aWYoZSE9MCl7cmV0dXJuIGV9fXN3aXRjaChhLmouZyl7Y2FzZSAxOnJldHVybiBIZWIoYS5uLmEsYi5uLmEpO2Nhc2UgMjpyZXR1cm4gSGViKGEubi5iLGIubi5iKTtjYXNlIDM6cmV0dXJuIEhlYihiLm4uYSxhLm4uYSk7Y2FzZSA0OnJldHVybiBIZWIoYi5uLmIsYS5uLmIpO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBXZWIoSHZlKSk7fX0KZnVuY3Rpb24gaDNiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aWYoR3IoKGUzYigpLG5ldyBlcyhJcihlWWIoYikuYS5KYygpLG5ldyBlcikpKSk+PWEuYSl7cmV0dXJuIC0xfWlmKCFnM2IoYixjKSl7cmV0dXJuIC0xfWlmKGNyKEpEKGQuS2IoYiksMjApKSl7cmV0dXJuIDF9ZT0wO2ZvcihnPUpEKGQuS2IoYiksMjApLkpjKCk7Zy5PYigpOyl7Zj1KRChnLlBiKCksMTgpO2k9Zi5jLmk9PWI/Zi5kLmk6Zi5jLmk7aD1oM2IoYSxpLGMsZCk7aWYoaD09LTEpe3JldHVybiAtMX1lPSR3bmQuTWF0aC5tYXgoZSxoKTtpZihlPmEuYy0xKXtyZXR1cm4gLTF9fXJldHVybiBlKzF9CmZ1bmN0aW9uIGsyYygpe2syYz1aY2I7TDFjPW5ldyBOQmQoKExnZCgpLFFlZCksMS4zKTtVMWM9bmV3IE5CZChEZmQsKHhkYigpLGZhbHNlKSk7YjJjPW5ldyBNWWIoMTUpO2EyYz1uZXcgTkJkKEtmZCxiMmMpO2QyYz1uZXcgTkJkKHdnZCwxNSk7TTFjPVhlZDtUMWM9QmZkO1YxYz1FZmQ7VzFjPUdmZDtTMWM9emZkO1gxYz1KZmQ7YzJjPWFnZDtoMmM9KEkxYygpLEQxYyk7ZzJjPUMxYztqMmM9SDFjO2kyYz1GMWM7XzFjPXgxYzskMWM9dzFjO1oxYz12MWM7ZjJjPUExYztQMWM9bmZkO1ExYz1vZmQ7TzFjPXMxYztOMWM9cjFjO1IxYz10MWM7ZTJjPXoxYztZMWM9dTFjfQpmdW5jdGlvbiB5Q2QoYSxiKXt2YXIgYyxkLGUsZixnLGg7aWYoWEQoYik9PT1YRChhKSl7cmV0dXJuIHRydWV9aWYoIVJEKGIsMTUpKXtyZXR1cm4gZmFsc2V9ZD1KRChiLDE1KTtoPWEuZ2MoKTtpZihkLmdjKCkhPWgpe3JldHVybiBmYWxzZX1nPWQuSmMoKTtpZihhLlZpKCkpe2ZvcihjPTA7YzxoOysrYyl7ZT1hLlNpKGMpO2Y9Zy5QYigpO2lmKGU9PW51bGw/ZiE9bnVsbDohcGIoZSxmKSl7cmV0dXJuIGZhbHNlfX19ZWxzZXtmb3IoYz0wO2M8aDsrK2Mpe2U9YS5TaShjKTtmPWcuUGIoKTtpZihYRChlKSE9PVhEKGYpKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gb0pkKGEsYil7dmFyIGMsZCxlLGYsZyxoO2lmKGEuZj4wKXthLllqKCk7aWYoYiE9bnVsbCl7Zm9yKGY9MDtmPGEuZC5sZW5ndGg7KytmKXtjPWEuZFtmXTtpZihjKXtkPUpEKGMuZywzNzEpO2g9Yy5pO2ZvcihnPTA7ZzxoOysrZyl7ZT1kW2ddO2lmKHBiKGIsZS5rZCgpKSl7cmV0dXJuIHRydWV9fX19fWVsc2V7Zm9yKGY9MDtmPGEuZC5sZW5ndGg7KytmKXtjPWEuZFtmXTtpZihjKXtkPUpEKGMuZywzNzEpO2g9Yy5pO2ZvcihnPTA7ZzxoOysrZyl7ZT1kW2ddO2lmKFhEKGIpPT09WEQoZS5rZCgpKSl7cmV0dXJuIHRydWV9fX19fX1yZXR1cm4gZmFsc2V9CmZ1bmN0aW9uIE45ZChhLGIpe3ZhciBjLGQsZTtjPWIubWkoYS5hKTtpZihjKXtlPU9EKHhKZCgoIWMuYiYmKGMuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LGMpKSxjLmIpLCdhZmZpbGlhdGlvbicpKTtpZihlIT1udWxsKXtkPWtnYihlLHdnYigzNSkpO3JldHVybiBkPT0tMT9lYWUoYSxuYWUoYSxXU2QoYi5uaygpKSksZSk6ZD09MD9lYWUoYSxudWxsLChBRGIoMSxlLmxlbmd0aCsxKSxlLnN1YnN0cigxKSkpOmVhZShhLCh6RGIoMCxkLGUubGVuZ3RoKSxlLnN1YnN0cigwLGQpKSwoQURiKGQrMSxlLmxlbmd0aCsxKSxlLnN1YnN0cihkKzEpKSl9fXJldHVybiBudWxsfQpmdW5jdGlvbiBEaWMoKXtEaWM9WmNiO3dpYz1uZXcgRWljKCdOT1JUSCcsMCwoUmpkKCkseGpkKSx4amQpO3ppYz1uZXcgRWljKCdTT1VUSCcsMSxPamQsT2pkKTt2aWM9bmV3IEVpYygnRUFTVCcsMix3amQsd2pkKTtDaWM9bmV3IEVpYygnV0VTVCcsMyxRamQsUWpkKTt5aWM9bmV3IEVpYygnTk9SVEhfV0VTVF9DT1JORVInLDQsUWpkLHhqZCk7eGljPW5ldyBFaWMoJ05PUlRIX0VBU1RfQ09STkVSJyw1LHhqZCx3amQpO0JpYz1uZXcgRWljKCdTT1VUSF9XRVNUX0NPUk5FUicsNixPamQsUWpkKTtBaWM9bmV3IEVpYygnU09VVEhfRUFTVF9DT1JORVInLDcsd2pkLE9qZCl9CmZ1bmN0aW9uIEgyYihhLGIsYyl7dmFyIGQsZSxmLGc7Yy5TZygnT3J0aG9nb25hbGx5IHJvdXRpbmcgaGllcmFyY2hpY2FsIHBvcnQgZWRnZXMnLDEpO2EuYT0wO2Q9SzJiKGIpO04yYihiLGQpO00yYihhLGIsZCk7STJiKGIpO2U9SkQoV01iKGIsKEJ3YygpLEV2YykpLDEwMCk7Zj1iLmI7RzJiKChzRGIoMCxmLmMubGVuZ3RoKSxKRChmLmNbMF0sMjUpKSxlLGIpO0cyYihKRChNbGIoZixmLmMubGVuZ3RoLTEpLDI1KSxlLGIpO2c9Yi5iO0UyYigoc0RiKDAsZy5jLmxlbmd0aCksSkQoZy5jWzBdLDI1KSkpO0UyYihKRChNbGIoZyxnLmMubGVuZ3RoLTEpLDI1KSk7Yy5UZygpfQpmdW5jdGlvbiBsdmQoYSl7c3dpdGNoKGEpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6e3JldHVybiBhLTQ4PDwyND4+MjR9Y2FzZSA5NzpjYXNlIDk4OmNhc2UgOTk6Y2FzZSAxMDA6Y2FzZSAxMDE6Y2FzZSAxMDI6e3JldHVybiBhLTk3KzEwPDwyND4+MjR9Y2FzZSA2NTpjYXNlIDY2OmNhc2UgNjc6Y2FzZSA2ODpjYXNlIDY5OmNhc2UgNzA6e3JldHVybiBhLTY1KzEwPDwyND4+MjR9ZGVmYXVsdDp7dGhyb3cgc2NiKG5ldyBNZmIoJ0ludmFsaWQgaGV4YWRlY2ltYWwnKSl9fX0KZnVuY3Rpb24gRWxjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtpPUpsYyhhLGMpO2o9SmxjKGIsYyk7ZT1mYWxzZTt3aGlsZSghIWkmJiEhail7aWYoZHx8SGxjKGksaixjKSl7Zz1KbGMoaSxjKTtoPUpsYyhqLGMpO01sYyhiKTtNbGMoYSk7Zj1pLmM7VTdiKGksZmFsc2UpO1U3YihqLGZhbHNlKTtpZihjKXtwWWIoYixqLnAsZik7Yi5wPWoucDtwWWIoYSxpLnArMSxmKTthLnA9aS5wfWVsc2V7cFliKGEsaS5wLGYpO2EucD1pLnA7cFliKGIsai5wKzEsZik7Yi5wPWoucH1xWWIoaSxudWxsKTtxWWIoaixudWxsKTtpPWc7aj1oO2U9dHJ1ZX1lbHNle2JyZWFrfX1yZXR1cm4gZX0KZnVuY3Rpb24gZHhjKGEpe3N3aXRjaChhLmcpe2Nhc2UgMDpyZXR1cm4gbmV3ICRCYztjYXNlIDE6cmV0dXJuIG5ldyBzQmM7Y2FzZSAzOnJldHVybiBuZXcgSkFjO2Nhc2UgNDpyZXR1cm4gbmV3IGpCYztjYXNlIDU6cmV0dXJuIG5ldyBtQ2M7Y2FzZSA2OnJldHVybiBuZXcgTEJjO2Nhc2UgMjpyZXR1cm4gbmV3IEFCYztjYXNlIDc6cmV0dXJuIG5ldyBzQWM7Y2FzZSA4OnJldHVybiBuZXcgX0FjO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJ05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheWVyZXIgJysoYS5mIT1udWxsP2EuZjonJythLmcpKSk7fX0KZnVuY3Rpb24gd0NjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7ZT1mYWxzZTtmPWZhbHNlO2ZvcihoPW5ldyBybWIoZC5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTEpO1hEKFdNYihnLChJcWMoKSxrcWMpKSk9PT1YRChjKSYmKGcuZy5jLmxlbmd0aD09MD9nLmUuYy5sZW5ndGg9PTB8fChlPXRydWUpOihmPXRydWUpKX1pPTA7ZSYmZV5mPyhpPWMuaj09KFJqZCgpLHhqZCk/LWEuZVtkLmMucF1bZC5wXTpiLWEuZVtkLmMucF1bZC5wXSk6ZiYmZV5mPyhpPWEuZVtkLmMucF1bZC5wXSsxKTplJiZmJiYoaT1jLmo9PShSamQoKSx4amQpPzA6Yi8yKTtyZXR1cm4gaX0KZnVuY3Rpb24gR05kKGEsYixjLGQsZSxmLGcsaCl7dmFyIGksaixrO2k9MDtiIT1udWxsJiYoaV49ZmdiKGIudG9Mb3dlckNhc2UoKSkpO2MhPW51bGwmJihpXj1mZ2IoYykpO2QhPW51bGwmJihpXj1mZ2IoZCkpO2chPW51bGwmJihpXj1mZ2IoZykpO2ghPW51bGwmJihpXj1mZ2IoaCkpO2ZvcihqPTAsaz1mLmxlbmd0aDtqPGs7aisrKXtpXj1mZ2IoZltqXSl9YT8oaXw9MjU2KTooaSY9LTI1Nyk7ZT8oaXw9MTYpOihpJj0tMTcpO3RoaXMuZj1pO3RoaXMuaT1iPT1udWxsP251bGw6KHREYihiKSxiKTt0aGlzLmE9Yzt0aGlzLmQ9ZDt0aGlzLmo9Zjt0aGlzLmc9Zzt0aGlzLmU9aH0KZnVuY3Rpb24gblliKGEsYixjKXt2YXIgZCxlO2U9bnVsbDtzd2l0Y2goYi5nKXtjYXNlIDE6ZT0oVlliKCksUVliKTticmVhaztjYXNlIDI6ZT0oVlliKCksU1liKTt9ZD1udWxsO3N3aXRjaChjLmcpe2Nhc2UgMTpkPShWWWIoKSxSWWIpO2JyZWFrO2Nhc2UgMjpkPShWWWIoKSxQWWIpO2JyZWFrO2Nhc2UgMzpkPShWWWIoKSxUWWIpO2JyZWFrO2Nhc2UgNDpkPShWWWIoKSxVWWIpO31yZXR1cm4gISFlJiYhIWQ/X3EoYS5qLG5ldyBZYihuZXcgZG5iKFdDKE9DKGhFLDEpLE5xZSwxNzcsMCxbSkQoUWIoZSksMTc3KSxKRChRYihkKSwxNzcpXSkpKSk6KHBuYigpLHBuYigpLG1uYil9CmZ1bmN0aW9uIFcxYihhKXt2YXIgYixjLGQ7Yj1KRChXTWIoYSwoQndjKCkscXZjKSksOCk7Wk1iKGEscXZjLG5ldyBFZGQoYi5iLGIuYSkpO3N3aXRjaChKRChXTWIoYSxSdGMpLDI1NCkuZyl7Y2FzZSAxOlpNYihhLFJ0YywoY2VkKCksYmVkKSk7YnJlYWs7Y2FzZSAyOlpNYihhLFJ0YywoY2VkKCksWmRkKSk7YnJlYWs7Y2FzZSAzOlpNYihhLFJ0YywoY2VkKCksX2RkKSk7YnJlYWs7Y2FzZSA0OlpNYihhLFJ0YywoY2VkKCksYWVkKSk7fWlmKCghYS5xPyhwbmIoKSxwbmIoKSxubmIpOmEucSkuX2IoTHZjKSl7Yz1KRChXTWIoYSxMdmMpLDgpO2Q9Yy5hO2MuYT1jLmI7Yy5iPWR9fQpmdW5jdGlvbiBtZ2MoYSxiLGMsZCxlLGYpe3RoaXMuYj1jO3RoaXMuZD1lO2lmKGE+PWIubGVuZ3RoKXt0aHJvdyBzY2IobmV3IG1kYignR3JlZWR5IFN3aXRjaERlY2lkZXI6IEZyZWUgbGF5ZXIgbm90IGluIGdyYXBoLicpKX10aGlzLmM9YlthXTt0aGlzLmU9bmV3IEdHYyhkKTt1R2ModGhpcy5lLHRoaXMuYywoUmpkKCksUWpkKSk7dGhpcy5pPW5ldyBHR2MoZCk7dUdjKHRoaXMuaSx0aGlzLmMsd2pkKTt0aGlzLmY9bmV3IGhnYyh0aGlzLmMpO3RoaXMuYT0hZiYmZS5pJiYhZS5zJiZ0aGlzLmNbMF0uaz09KERZYigpLHdZYik7dGhpcy5hJiZrZ2ModGhpcyxhLGIubGVuZ3RoKX0KZnVuY3Rpb24gaktiKGEsYil7dmFyIGMsZCxlLGYsZyxoO2Y9IWEuQi5HYygoTmtkKCksRWtkKSk7Zz1hLkIuR2MoSGtkKTthLmE9bmV3IEhIYihnLGYsYS5jKTshIWEubiYmTVhiKGEuYS5uLGEubik7bkliKGEuZywoaUhiKCksZ0hiKSxhLmEpO2lmKCFiKXtkPW5ldyBvSWIoMSxmLGEuYyk7ZC5uLmE9YS5rO0xxYihhLnAsKFJqZCgpLHhqZCksZCk7ZT1uZXcgb0liKDEsZixhLmMpO2Uubi5kPWEuaztMcWIoYS5wLE9qZCxlKTtoPW5ldyBvSWIoMCxmLGEuYyk7aC5uLmM9YS5rO0xxYihhLnAsUWpkLGgpO2M9bmV3IG9JYigwLGYsYS5jKTtjLm4uYj1hLms7THFiKGEucCx3amQsYyl9fQpmdW5jdGlvbiBQZGMoYSl7dmFyIGIsYyxkO2I9SkQoV01iKGEuZCwoQndjKCkseXVjKSksMjIwKTtzd2l0Y2goYi5nKXtjYXNlIDI6Yz1HZGMoYSk7YnJlYWs7Y2FzZSAzOmM9KGQ9bmV3IFVsYixFQmIoQkJiKEZCYihEQmIoREJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuZC5iLDE2KSksbmV3IFZlYyksbmV3IFhlYyksbmV3IFplYyksbmV3IF9kYyksbmV3IF9lYyhkKSksZCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFdlYignQ29tcGFjdGlvbiBub3Qgc3VwcG9ydGVkIGZvciAnK2IrJyBlZGdlcy4nKSk7fU9kYyhhLGMpO29mYihuZXcgT2piKGEuZyksbmV3IHplYyhhKSl9CmZ1bmN0aW9uIHRTYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2IuU2coJ1Byb2Nlc3MgZGlyZWN0aW9ucycsMSk7Yz1KRChXTWIoYSwoa1ZjKCksS1VjKSksODYpO2lmKGMhPShUZ2QoKSxPZ2QpKXtmb3IoZT1HdGIoYS5iLDApO2UuYiE9ZS5kLmM7KXtkPUpEKFV0YihlKSwzOSk7aD1KRChXTWIoZCwodFVjKCksclVjKSksMTcpLmE7aT1KRChXTWIoZCxzVWMpLDE3KS5hO3N3aXRjaChjLmcpe2Nhc2UgNDppKj0tMTticmVhaztjYXNlIDE6Zj1oO2g9aTtpPWY7YnJlYWs7Y2FzZSAyOmc9aDtoPS1pO2k9Zzt9Wk1iKGQsclVjLGpmYihoKSk7Wk1iKGQsc1VjLGpmYihpKSl9fWIuVGcoKX0KZnVuY3Rpb24ga1ViKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7aT1uZXcgd1ViO2ZvcihoPW5ldyBybWIoYS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7aWYoZy5rPT0oRFliKCksd1liKSl7Y29udGludWV9aVViKGksZyxuZXcgQ2RkKTtmb3IoZj1uZXcgZXMoSXIoa1liKGcpLmEuSmMoKSxuZXcgZXIpKTtjcyhmKTspe2U9SkQoZHMoZiksMTgpO2lmKGUuYy5pLms9PXdZYnx8ZS5kLmkuaz09d1liKXtjb250aW51ZX1mb3IoZD1HdGIoZS5hLDApO2QuYiE9ZC5kLmM7KXtjPUpEKFV0YihkKSw4KTtiPWM7dVViKGksbmV3IG9TYihiLmEsYi5iKSl9fX1yZXR1cm4gaX0KZnVuY3Rpb24gJDZjKCl7JDZjPVpjYjtaNmM9bmV3IEtCZChmQmUpO1k2Yz0ocDdjKCksbzdjKTtYNmM9bmV3IE1CZChrQmUsWTZjKTtXNmM9KEE3YygpLHo3Yyk7VjZjPW5ldyBNQmQoZ0JlLFc2Yyk7VTZjPShsNmMoKSxoNmMpO1Q2Yz1uZXcgTUJkKGhCZSxVNmMpO1A2Yz1uZXcgTUJkKGlCZSxudWxsKTtTNmM9KGE2YygpLCQ1Yyk7UjZjPW5ldyBNQmQoakJlLFM2Yyk7TDZjPShJNWMoKSxINWMpO0s2Yz1uZXcgTUJkKGxCZSxMNmMpO002Yz1uZXcgTUJkKG1CZSwoeGRiKCksZmFsc2UpKTtONmM9bmV3IE1CZChuQmUsamZiKDY0KSk7TzZjPW5ldyBNQmQob0JlLHRydWUpO1E2Yz1fNWN9CmZ1bmN0aW9uIGhCYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2EucD0xO2U9YS5jO2w9bmV3IHd0Yjtmb3Ioaz1tWWIoYSwoRXljKCksQ3ljKSkuSmMoKTtrLk9iKCk7KXtqPUpEKGsuUGIoKSwxMSk7Zm9yKGQ9bmV3IHJtYihqLmcpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxOCk7aT1jLmQuaTtpZihhIT1pKXtmPWkuYztpZihmLnA8PWUucCl7Zz1lLnArMTtpZihnPT1iLmIuYy5sZW5ndGgpe2g9bmV3IGIkYihiKTtoLnA9ZztJbGIoYi5iLGgpO3FZYihpLGgpfWVsc2V7aD1KRChNbGIoYi5iLGcpLDI1KTtxWWIoaSxoKX1sLmEueWMoaSxsKX19fX1yZXR1cm4gbH0KZnVuY3Rpb24gcFJjKGEsYil7dmFyIGMsZDtjPUpEKFdNYihhLCh0VWMoKSxXVGMpKSwxNSk7aWYoIWN8fGMuZ2MoKTwxKXtyZXR1cm4gbnVsbH1lbHNlIGlmKGMuZ2MoKT09MSl7cmV0dXJuIEpEKGMuWGIoMCksMzkpfWQ9bnVsbDtzd2l0Y2goYi5nKXtjYXNlIDI6ZD1KRCh6dWIoSkJiKGMuTWMoKSxuZXcgcFNjKSksMzkpO2JyZWFrO2Nhc2UgMTpkPUpEKHp1YihJQmIoYy5NYygpLG5ldyBOUmMpKSwzOSk7YnJlYWs7Y2FzZSA0OmQ9SkQoenViKEpCYihjLk1jKCksbmV3IFJSYykpLDM5KTticmVhaztjYXNlIDM6ZD1KRCh6dWIoSUJiKGMuTWMoKSxuZXcgVlJjKSksMzkpO31yZXR1cm4gZH0KZnVuY3Rpb24gZW1jKGEpe3ZhciBiLGMsZCxlLGYsZztpZihhLmEhPW51bGwpe3JldHVybn1hLmE9U0MocGNiLFZ0ZSwzMCxhLmMuYi5jLmxlbmd0aCwxNiwxKTthLmFbMF09ZmFsc2U7aWYoWE1iKGEuYywoQndjKCksendjKSkpe2Q9SkQoV01iKGEuYyx6d2MpLDE1KTtmb3IoYz1kLkpjKCk7Yy5PYigpOyl7Yj1KRChjLlBiKCksMTcpLmE7Yj4wJiZiPGEuYS5sZW5ndGgmJihhLmFbYl09ZmFsc2UpfX1lbHNle2c9bmV3IHJtYihhLmMuYik7Zy5hPGcuYy5jLmxlbmd0aCYmcG1iKGcpO2U9MTt3aGlsZShnLmE8Zy5jLmMubGVuZ3RoKXtmPUpEKHBtYihnKSwyNSk7YS5hW2UrK109aG1jKGYpfX19CmZ1bmN0aW9uIGgxYygpe2gxYz1aY2I7WTBjPW5ldyBLQmQoJ2FkZGl0aW9uYWxIZWlnaHQnKTtaMGM9bmV3IEtCZCgnZHJhd2luZ0hlaWdodCcpOyQwYz1uZXcgS0JkKCdkcmF3aW5nV2lkdGgnKTtiMWM9bmV3IEtCZCgnbWluSGVpZ2h0Jyk7ZTFjPW5ldyBLQmQoJ21pbldpZHRoJyk7ZjFjPW5ldyBLQmQoJ3Jvd3MnKTtnMWM9bmV3IEtCZCgndGFyZ2V0V2lkdGgnKTtkMWM9bmV3IExCZCgnbWluUm93SW5jcmVhc2UnLDApO2ExYz1uZXcgTEJkKCdtYXhSb3dJbmNyZWFzZScsMCk7YzFjPW5ldyBMQmQoJ21pblJvd0RlY3JlYXNlJywwKTtfMGM9bmV3IExCZCgnbWF4Um93RGVjcmVhc2UnLDApfQpmdW5jdGlvbiBNVmQoYSxiKXt2YXIgYyxkLGUsZjtlPWEuYjtzd2l0Y2goYil7Y2FzZSAxOnthLmJ8PTE7YS5ifD00O2EuYnw9ODticmVha31jYXNlIDI6e2EuYnw9MjthLmJ8PTQ7YS5ifD04O2JyZWFrfWNhc2UgNDp7YS5ifD0xO2EuYnw9MjthLmJ8PTQ7YS5ifD04O2JyZWFrfWNhc2UgMzp7YS5ifD0xNjthLmJ8PTg7YnJlYWt9Y2FzZSAwOnthLmJ8PTMyO2EuYnw9MTY7YS5ifD04O2EuYnw9MTthLmJ8PTI7YS5ifD00O2JyZWFrfX1pZihhLmIhPWUmJiEhYS5jKXtmb3IoZD1uZXcgQ0hkKGEuYyk7ZC5lIT1kLmkuZ2MoKTspe2Y9SkQoQUhkKGQpLDQ2OCk7Yz1UVGQoZik7UVZkKGMsYil9fX0KZnVuY3Rpb24gRkVjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG87ZT1mYWxzZTtmb3IoZz1iLGg9MCxpPWcubGVuZ3RoO2g8aTsrK2gpe2Y9Z1toXTt5ZGIoKHhkYigpLGYuZT90cnVlOmZhbHNlKSkmJiFKRChNbGIoYS5iLGYuZS5wKSwyMTcpLnMmJihlPWV8KGo9Zi5lLGs9SkQoTWxiKGEuYixqLnApLDIxNyksbD1rLmUsbT10RWMoYyxsLmxlbmd0aCksbj1sW21dWzBdLG4uaz09KERZYigpLHdZYik/KGxbbV09REVjKGYsbFttXSxjPyhSamQoKSxRamQpOihSamQoKSx3amQpKSk6ay5jLmtnKGwsYyksbz1HRWMoYSxrLGMsZCksRUVjKGsuZSxrLm8sYyksbykpfXJldHVybiBlfQpmdW5jdGlvbiBQOGMoYSxiKXt2YXIgYyxkLGUsZixnO2Y9KCFiLmEmJihiLmE9bmV3IFgwZChBMyxiLDEwLDExKSksYi5hKS5pO2ZvcihlPW5ldyBDSGQoKCFiLmEmJihiLmE9bmV3IFgwZChBMyxiLDEwLDExKSksYi5hKSk7ZS5lIT1lLmkuZ2MoKTspe2Q9SkQoQUhkKGUpLDI3KTtpZihYRChrc2QoZCwoTGdkKCksaWZkKSkpIT09WEQoKGVpZCgpLGRpZCkpKXtnPUpEKGtzZChiLGlnZCksMTQ5KTtjPUpEKGtzZChkLGlnZCksMTQ5KTsoZz09Y3x8ISFnJiZhYWQoZyxjKSkmJighZC5hJiYoZC5hPW5ldyBYMGQoQTMsZCwxMCwxMSkpLGQuYSkuaSE9MCYmKGYrPVA4YyhhLGQpKX19cmV0dXJuIGZ9CmZ1bmN0aW9uIFBfYihhKXt2YXIgYixjLGQsZSxmO2Y9bmV3IFZsYihhLmEuYy5sZW5ndGgpO2ZvcihlPW5ldyBybWIoYS5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksOSk7Yz1KRChXTWIoZCwoQndjKCksVXVjKSksMTcxKTtiPW51bGw7c3dpdGNoKGMuZyl7Y2FzZSAxOmNhc2UgMjpiPShUbmMoKSxTbmMpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Yj0oVG5jKCksUW5jKTt9aWYoYil7Wk1iKGQsKElxYygpLE5wYyksKFRuYygpLFNuYykpO2I9PVFuYz9SX2IoZCxjLChFeWMoKSxCeWMpKTpiPT1TbmMmJlJfYihkLGMsKEV5YygpLEN5YykpfWVsc2V7WUNiKGYuYyxkKX19cmV0dXJuIGZ9CmZ1bmN0aW9uIHFpYyhhKXt2YXIgYixjLGQsZSxmLGcsaDtkPTA7aD0wO2ZvcihnPW5ldyBybWIoYS5kKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTA1KTtlPUpEKHlCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoZi5qLDE2KSksbmV3IF9pYyksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbKGxBYigpLGpBYildKSkpLDE1KTtjPW51bGw7aWYoZDw9aCl7Yz0oUmpkKCkseGpkKTtkKz1lLmdjKCl9ZWxzZSBpZihoPGQpe2M9KFJqZCgpLE9qZCk7aCs9ZS5nYygpfWI9YztFQmIoRkJiKGUuTWMoKSxuZXcgUGljKSxuZXcgUmljKGIpKX19CmZ1bmN0aW9uIEE4YyhhLGIpe3ZhciBjO2M9bmV3ICRNYjshIWImJlVNYihjLEpEKE5pYihhLmEseTMpLDEwMikpO1JEKGIsMjczKSYmVU1iKGMsSkQoTmliKGEuYSxDMyksMTAyKSk7aWYoUkQoYiwzNTkpKXtVTWIoYyxKRChOaWIoYS5hLHozKSwxMDIpKTtyZXR1cm4gY31SRChiLDg0KSYmVU1iKGMsSkQoTmliKGEuYSx2MyksMTAyKSk7aWYoUkQoYiwyMDYpKXtVTWIoYyxKRChOaWIoYS5hLEEzKSwxMDIpKTtyZXR1cm4gY31pZihSRChiLDE5Mykpe1VNYihjLEpEKE5pYihhLmEsQjMpLDEwMikpO3JldHVybiBjfVJEKGIsMjY4KSYmVU1iKGMsSkQoTmliKGEuYSx4MyksMTAyKSk7cmV0dXJuIGN9CmZ1bmN0aW9uIHBoYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2EuYj1uZXcgZmoobmV3IGRuYigoUmpkKCksV0MoT0ModjIsMSksQXZlLDY0LDAsW1BqZCx4amQsd2pkLE9qZCxRamRdKSkpLG5ldyBkbmIoKEloYygpLFdDKE9DKEVVLDEpLEVyZSwzNjUsMCxbSGhjLEdoYyxGaGNdKSkpKTtmb3IoZz1XQyhPQyh2MiwxKSxBdmUsNjQsMCxbUGpkLHhqZCx3amQsT2pkLFFqZF0pLGg9MCxpPWcubGVuZ3RoO2g8aTsrK2gpe2Y9Z1toXTtmb3IoYz1XQyhPQyhFVSwxKSxFcmUsMzY1LDAsW0hoYyxHaGMsRmhjXSksZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdOyRpKGEuYixmLGIsbmV3IFVsYil9fX0KZnVuY3Rpb24gTUpiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7Zz1KRChKRChRYyhhLnIsYiksMjIpLDgzKTtoPWEudS5HYygob2pkKCksbWpkKSk7Yz1hLnUuR2MoampkKTtkPWEudS5HYyhpamQpO2o9YS51LkdjKG5qZCk7bD1hLkIuR2MoKE5rZCgpLE1rZCkpO2s9IWMmJiFkJiYoanx8Zy5nYygpPT0yKTtKSmIoYSxiKTtlPW51bGw7aT1udWxsO2lmKGgpe2Y9Zy5KYygpO2U9SkQoZi5QYigpLDExNSk7aT1lO3doaWxlKGYuT2IoKSl7aT1KRChmLlBiKCksMTE1KX1lLmQuYj0wO2kuZC5jPTA7ayYmIWUuYSYmKGUuZC5jPTApfWlmKGwpe05KYihnKTtpZihoKXtlLmQuYj0wO2kuZC5jPTB9fX0KZnVuY3Rpb24gVUtiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7Zz1KRChKRChRYyhhLnIsYiksMjIpLDgzKTtoPWEudS5HYygob2pkKCksbWpkKSk7Yz1hLnUuR2MoampkKTtkPWEudS5HYyhpamQpO2k9YS51LkdjKG5qZCk7bD1hLkIuR2MoKE5rZCgpLE1rZCkpO2o9IWMmJiFkJiYoaXx8Zy5nYygpPT0yKTtTS2IoYSxiKTtrPW51bGw7ZT1udWxsO2lmKGgpe2Y9Zy5KYygpO2s9SkQoZi5QYigpLDExNSk7ZT1rO3doaWxlKGYuT2IoKSl7ZT1KRChmLlBiKCksMTE1KX1rLmQuZD0wO2UuZC5hPTA7aiYmIWsuYSYmKGsuZC5hPTApfWlmKGwpe1ZLYihnKTtpZihoKXtrLmQuZD0wO2UuZC5hPTB9fX0KZnVuY3Rpb24gUkhjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO2U9Yi5rO2lmKGIucD49MCl7cmV0dXJuIGZhbHNlfWVsc2V7Yi5wPWMuYjtJbGIoYy5lLGIpfWlmKGU9PShEWWIoKSx5WWIpfHxlPT1CWWIpe2ZvcihnPW5ldyBybWIoYi5qKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTEpO2ZvcihrPShkPW5ldyBybWIoKG5ldyBsWmIoZikpLmEuZyksbmV3IG9aYihkKSk7b21iKGsuYSk7KXtqPUpEKHBtYihrLmEpLDE4KS5kO2g9ai5pO2k9aC5rO2lmKGIuYyE9aC5jKXtpZihpPT15WWJ8fGk9PUJZYil7aWYoUkhjKGEsaCxjKSl7cmV0dXJuIHRydWV9fX19fX1yZXR1cm4gdHJ1ZX0KZnVuY3Rpb24gX1JkKGEpe3ZhciBiO2lmKChhLkRiJjY0KSE9MClyZXR1cm4geFJkKGEpO2I9bmV3IEpnYih4UmQoYSkpO2IuYSs9JyAoY2hhbmdlYWJsZTogJztGZ2IoYiwoYS5CYiZORWUpIT0wKTtiLmErPScsIHZvbGF0aWxlOiAnO0ZnYihiLChhLkJiJndzZSkhPTApO2IuYSs9JywgdHJhbnNpZW50OiAnO0ZnYihiLChhLkJiJk1zZSkhPTApO2IuYSs9JywgZGVmYXVsdFZhbHVlTGl0ZXJhbDogJztFZ2IoYixhLmopO2IuYSs9JywgdW5zZXR0YWJsZTogJztGZ2IoYiwoYS5CYiZkRmUpIT0wKTtiLmErPScsIGRlcml2ZWQ6ICc7RmdiKGIsKGEuQmImaXJlKSE9MCk7Yi5hKz0nKSc7cmV0dXJuIGIuYX0KZnVuY3Rpb24gTzlkKGEsYil7dmFyIGMsZCxlLGYsZztlPWIubWkoYS5hKTtpZihlKXtkPSghZS5iJiYoZS5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsZSkpLGUuYik7Yz1PRCh4SmQoZCxFRmUpKTtpZihjIT1udWxsKXtmPWMubGFzdEluZGV4T2YoJyMnKTtnPWY9PS0xP3BhZShhLGIuZ2soKSxjKTpmPT0wP29hZShhLG51bGwsKEFEYigxLGMubGVuZ3RoKzEpLGMuc3Vic3RyKDEpKSk6b2FlKGEsKHpEYigwLGYsYy5sZW5ndGgpLGMuc3Vic3RyKDAsZikpLChBRGIoZisxLGMubGVuZ3RoKzEpLGMuc3Vic3RyKGYrMSkpKTtpZihSRChnLDE1NSkpe3JldHVybiBKRChnLDE1NSl9fX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gUzlkKGEsYil7dmFyIGMsZCxlLGYsZztkPWIubWkoYS5hKTtpZihkKXtjPSghZC5iJiYoZC5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsZCkpLGQuYik7Zj1PRCh4SmQoYyxfRmUpKTtpZihmIT1udWxsKXtlPWYubGFzdEluZGV4T2YoJyMnKTtnPWU9PS0xP3BhZShhLGIuZ2soKSxmKTplPT0wP29hZShhLG51bGwsKEFEYigxLGYubGVuZ3RoKzEpLGYuc3Vic3RyKDEpKSk6b2FlKGEsKHpEYigwLGUsZi5sZW5ndGgpLGYuc3Vic3RyKDAsZSkpLChBRGIoZSsxLGYubGVuZ3RoKzEpLGYuc3Vic3RyKGUrMSkpKTtpZihSRChnLDE1NSkpe3JldHVybiBKRChnLDE1NSl9fX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gamFjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbTtiLlNnKCdSZXN0b3JpbmcgcmV2ZXJzZWQgZWRnZXMnLDEpO2ZvcihpPW5ldyBybWIoYS5iKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMjUpO2ZvcihrPW5ldyBybWIoaC5hKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksOSk7Zm9yKG09bmV3IHJtYihqLmopO20uYTxtLmMuYy5sZW5ndGg7KXtsPUpEKHBtYihtKSwxMSk7Zz1DWGIobC5nKTtmb3IoZD1nLGU9MCxmPWQubGVuZ3RoO2U8ZjsrK2Upe2M9ZFtlXTt5ZGIoTEQoV01iKGMsKElxYygpLHhxYykpKSkmJmZXYihjLGZhbHNlKX19fX1iLlRnKCl9CmZ1bmN0aW9uIHdqYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpO2k9U0MoYUUsaHJlLDEwOCwoUmpkKCksV0MoT0ModjIsMSksQXZlLDY0LDAsW1BqZCx4amQsd2pkLE9qZCxRamRdKSkubGVuZ3RoLDAsMik7Zm9yKGY9V0MoT0ModjIsMSksQXZlLDY0LDAsW1BqZCx4amQsd2pkLE9qZCxRamRdKSxnPTAsaD1mLmxlbmd0aDtnPGg7KytnKXtlPWZbZ107aVtlLmddPVNDKGFFLFJzZSwzMCxhLmNbZS5nXSwxNSwxKX15amMoaSxhLHhqZCk7eWpjKGksYSxPamQpO3ZqYyhpLGEseGpkLGIsYyxkKTt2amMoaSxhLHdqZCxiLGMsZCk7dmpjKGksYSxPamQsYixjLGQpO3ZqYyhpLGEsUWpkLGIsYyxkKTtyZXR1cm4gaX0KZnVuY3Rpb24gdkZjKGEsYixjKXtpZihMaWIoYS5hLGIpKXtpZihPcmIoSkQoTmliKGEuYSxiKSw1MCksYykpe3JldHVybiAxfX1lbHNle1FpYihhLmEsYixuZXcgUXJiKX1pZihMaWIoYS5hLGMpKXtpZihPcmIoSkQoTmliKGEuYSxjKSw1MCksYikpe3JldHVybiAtMX19ZWxzZXtRaWIoYS5hLGMsbmV3IFFyYil9aWYoTGliKGEuYixiKSl7aWYoT3JiKEpEKE5pYihhLmIsYiksNTApLGMpKXtyZXR1cm4gLTF9fWVsc2V7UWliKGEuYixiLG5ldyBRcmIpfWlmKExpYihhLmIsYykpe2lmKE9yYihKRChOaWIoYS5iLGMpLDUwKSxiKSl7cmV0dXJuIDF9fWVsc2V7UWliKGEuYixjLG5ldyBRcmIpfXJldHVybiAwfQpmdW5jdGlvbiBFSmIoYSl7dmFyIGIsYyxkLGUsZixnO2lmKGEucT09KGFqZCgpLFlpZCl8fGEucT09WGlkKXtyZXR1cm59ZT1hLmYubi5kK2JIYihKRChLcWIoYS5iLChSamQoKSx4amQpKSwxMjYpKSthLmM7Yj1hLmYubi5hK2JIYihKRChLcWIoYS5iLE9qZCksMTI2KSkrYS5jO2Q9SkQoS3FiKGEuYix3amQpLDEyNik7Zz1KRChLcWIoYS5iLFFqZCksMTI2KTtmPSR3bmQuTWF0aC5tYXgoMCxkLm4uZC1lKTtmPSR3bmQuTWF0aC5tYXgoZixnLm4uZC1lKTtjPSR3bmQuTWF0aC5tYXgoMCxkLm4uYS1iKTtjPSR3bmQuTWF0aC5tYXgoYyxnLm4uYS1iKTtkLm4uZD1mO2cubi5kPWY7ZC5uLmE9YztnLm4uYT1jfQpmdW5jdGlvbiBxYmUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2lmKGM9PW51bGwpe2U9SkQoYS5nLDEyMik7Zm9yKGg9MDtoPGEuaTsrK2gpe2c9ZVtoXTtpZihnLklrKCk9PWIpe3JldHVybiBRR2QoYSxnLGQpfX19Zj0oSWZlKCksSkQoYiw2OSkudWsoKT9KRChjLDc0KTpKZmUoYixjKSk7aWYocXFkKGEuZSkpe2o9IUtiZShhLGIpO2Q9UEdkKGEsZixkKTtpPWIuR2soKT9BYmUoYSwzLGIsbnVsbCxjLEZiZShhLGIsYyxSRChiLDEwMSkmJihKRChiLDE5KS5CYiZQc2UpIT0wKSxqKTpBYmUoYSwxLGIsYi5maygpLGMsLTEsaik7ZD9kLmtqKGkpOihkPWkpfWVsc2V7ZD1QR2QoYSxmLGQpfXJldHVybiBkfQpmdW5jdGlvbiBNYWQoKXt0aGlzLmI9bmV3IFhzYjt0aGlzLmQ9bmV3IFhzYjt0aGlzLmU9bmV3IFhzYjt0aGlzLmM9bmV3IFhzYjt0aGlzLmE9bmV3IElyYjt0aGlzLmY9bmV3IElyYjtlRWQoYjIsbmV3IFhhZCxuZXcgWmFkKTtlRWQoYTIsbmV3IHRiZCxuZXcgdmJkKTtlRWQoWjEsbmV3IHhiZCxuZXcgemJkKTtlRWQoJDEsbmV3IEJiZCxuZXcgRGJkKTtlRWQoZDMsbmV3IEZiZCxuZXcgSGJkKTtlRWQoTUosbmV3IF9hZCxuZXcgYmJkKTtlRWQoR0ssbmV3IGRiZCxuZXcgZmJkKTtlRWQoc0ssbmV3IGhiZCxuZXcgamJkKTtlRWQoREssbmV3IGxiZCxuZXcgbmJkKTtlRWQodUwsbmV3IHBiZCxuZXcgcmJkKX0KZnVuY3Rpb24gaGMoYSxiKXt2YXIgYyxkLGUsZixnO2E9YT09bnVsbD9ScWU6KHREYihhKSxhKTtmb3IoZT0wO2U8Yi5sZW5ndGg7ZSsrKXtiW2VdPWljKGJbZV0pfWM9bmV3IFZnYjtnPTA7ZD0wO3doaWxlKGQ8Yi5sZW5ndGgpe2Y9YS5pbmRleE9mKCclcycsZyk7aWYoZj09LTEpe2JyZWFrfWMuYSs9JycrcWdiKGE9PW51bGw/UnFlOih0RGIoYSksYSksZyxmKTtQZ2IoYyxiW2QrK10pO2c9ZisyfU9nYihjLGEsZyxhLmxlbmd0aCk7aWYoZDxiLmxlbmd0aCl7Yy5hKz0nIFsnO1BnYihjLGJbZCsrXSk7d2hpbGUoZDxiLmxlbmd0aCl7Yy5hKz1McWU7UGdiKGMsYltkKytdKX1jLmErPSddJ31yZXR1cm4gYy5hfQpmdW5jdGlvbiBuR2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtjPTA7Zm9yKGk9bmV3IHJtYihiKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMTEpO2JHYyhhLmIsYS5kW2gucF0pO2c9MDtmb3IoZT1uZXcgeFpiKGguYik7b21iKGUuYSl8fG9tYihlLmIpOyl7ZD1KRChvbWIoZS5hKT9wbWIoZS5hKTpwbWIoZS5iKSwxOCk7aWYoeEdjKGQpKXtmPURHYyhhLGg9PWQuYz9kLmQ6ZC5jKTtpZihmPmEuZFtoLnBdKXtjKz1hR2MoYS5iLGYpOyRrYihhLmEsamZiKGYpKX19ZWxzZXsrK2d9fWMrPWEuYi5kKmc7d2hpbGUoIWVsYihhLmEpKXskRmMoYS5iLEpEKGpsYihhLmEpLDE3KS5hKX19cmV0dXJuIGN9CmZ1bmN0aW9uIEtlZShhKXt2YXIgYixjLGQsZSxmLGc7Zj0wO2I9cFJkKGEpOyEhYi5oaygpJiYoZnw9NCk7KGEuQmImZEZlKSE9MCYmKGZ8PTIpO2lmKFJEKGEsMTAxKSl7Yz1KRChhLDE5KTtlPXMxZChjKTsoYy5CYiZSQ2UpIT0wJiYoZnw9MzIpO2lmKGUpe1ZUZChQUmQoZSkpO2Z8PTg7Zz1lLnQ7KGc+MXx8Zz09LTEpJiYoZnw9MTYpOyhlLkJiJlJDZSkhPTAmJihmfD02NCl9KGMuQmImUHNlKSE9MCYmKGZ8PXdzZSk7Znw9TkVlfWVsc2V7aWYoUkQoYiw0NTUpKXtmfD01MTJ9ZWxzZXtkPWIuaGsoKTshIWQmJihkLmkmMSkhPTAmJihmfD0yNTYpfX0oYS5CYiY1MTIpIT0wJiYoZnw9MTI4KTtyZXR1cm4gZn0KZnVuY3Rpb24gUWZlKGEsYil7dmFyIGM7aWYoYS5mPT1PZmUpe2M9VGFlKGphZSgoR2ZlKCksRWZlKSxiKSk7cmV0dXJuIGEuZT9jPT00JiZiIT0oZWhlKCksY2hlKSYmYiE9KGVoZSgpLF9nZSkmJmIhPShlaGUoKSxhaGUpJiZiIT0oZWhlKCksYmhlKTpjPT0yfWlmKCEhYS5kJiYoYS5kLkdjKGIpfHxhLmQuR2MoVWFlKGphZSgoR2ZlKCksRWZlKSxiKSkpfHxhLmQuR2MoWjlkKChHZmUoKSxFZmUpLGEuYixiKSkpKXtyZXR1cm4gdHJ1ZX1pZihhLmYpe2lmKHFhZSgoR2ZlKCksYS5mKSxXYWUoamFlKEVmZSxiKSkpKXtjPVRhZShqYWUoRWZlLGIpKTtyZXR1cm4gYS5lP2M9PTQ6Yz09Mn19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBsOGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2Y9bmV3IFVsYjtiLmIuYy5sZW5ndGg9MDtjPUpEKHlCYihOQmIobmV3IFJCYihudWxsLG5ldyBHdmIobmV3IE9qYihhLmEuYiksMSkpKSxoQWIobmV3IHpBYixuZXcgeEFiLG5ldyBGQWIsV0MoT0MoSEwsMSksRXJlLDEzMSwwLFsobEFiKCksakFiKV0pKSksMTUpO2ZvcihlPWMuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwxNyk7Zz1sX2IoYS5hLGQpO2lmKGcuYiE9MCl7aD1uZXcgYiRiKGIpO1lDYihmLmMsaCk7aC5wPWQuYTtmb3Ioaj1HdGIoZywwKTtqLmIhPWouZC5jOyl7aT1KRChVdGIoaiksOSk7cVliKGksaCl9fX1LbGIoYi5iLGYpfQpmdW5jdGlvbiByRWMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG47bT0tMTtuPTA7Zm9yKGo9YSxrPTAsbD1qLmxlbmd0aDtrPGw7KytrKXtpPWpba107Zm9yKGY9aSxnPTAsaD1mLmxlbmd0aDtnPGg7KytnKXtlPWZbZ107Yj1uZXcgWWtjKG09PS0xP2FbMF06YVttXSxKRChXTWIoZ1liKGUpLChCd2MoKSxjdWMpKSwyNjYpLFFiYyhlKSx5ZGIoTEQoV01iKGdZYihlKSxidWMpKSkpO2ZvcihjPTA7YzxlLmouYy5sZW5ndGg7YysrKXtmb3IoZD1jKzE7ZDxlLmouYy5sZW5ndGg7ZCsrKXtVa2MoYixKRChNbGIoZS5qLGMpLDExKSxKRChNbGIoZS5qLGQpLDExKSk+MCYmKytufX19KyttfXJldHVybiBufQpmdW5jdGlvbiBWWWMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbDtnPUpEKGtzZChjLChMZ2QoKSxmZ2QpKSw4KTtpPWcuYTtrPWcuYithO2U9JHduZC5NYXRoLmF0YW4yKGssaSk7ZTwwJiYoZSs9JHplKTtlKz1iO2U+JHplJiYoZS09JHplKTtoPUpEKGtzZChkLGZnZCksOCk7aj1oLmE7bD1oLmIrYTtmPSR3bmQuTWF0aC5hdGFuMihsLGopO2Y8MCYmKGYrPSR6ZSk7Zis9YjtmPiR6ZSYmKGYtPSR6ZSk7cmV0dXJuIFJ5KCksVnkoMS4wRS0xMCksJHduZC5NYXRoLmFicyhlLWYpPD0xLjBFLTEwfHxlPT1mfHxpc05hTihlKSYmaXNOYU4oZik/MDplPGY/LTE6ZT5mPzE6V3koaXNOYU4oZSksaXNOYU4oZikpfQpmdW5jdGlvbiBPRWIoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD1uZXcgSXJiO2ZvcihkPW5ldyBybWIoYS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihkKSw2MCk7UWliKGgsYixuZXcgVWxiKX1mb3IoZT1uZXcgcm1iKGEuYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoZSksNjApO2IuaT1Mc2U7Zm9yKGc9Yi5jLkpjKCk7Zy5PYigpOyl7Zj1KRChnLlBiKCksNjApO0pEKFdkKGZzYihoLmYsZikpLDE1KS5FYyhiKX19Zm9yKGM9bmV3IHJtYihhLmEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDYwKTtiLmMuJGIoKTtiLmM9SkQoV2QoZnNiKGguZixiKSksMTUpfUdFYihhKX0KZnVuY3Rpb24gS1JiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2g9bmV3IElyYjtmb3IoZD1uZXcgcm1iKGEuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoZCksODIpO1FpYihoLGIsbmV3IFVsYil9Zm9yKGU9bmV3IHJtYihhLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2I9SkQocG1iKGUpLDgyKTtiLm89THNlO2ZvcihnPWIuZi5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDgyKTtKRChXZChmc2IoaC5mLGYpKSwxNSkuRWMoYil9fWZvcihjPW5ldyBybWIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSw4Mik7Yi5mLiRiKCk7Yi5mPUpEKFdkKGZzYihoLmYsYikpLDE1KX1EUmIoYSl9CmZ1bmN0aW9uIHA2YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07aT1nWWIoYi5hKTtlPUJlYihNRChXTWIoaSwoQndjKCksJHZjKSkpKSoyO2s9QmViKE1EKFdNYihpLGZ3YykpKTtqPSR3bmQuTWF0aC5tYXgoZSxrKTtmPVNDKGFFLFJzZSwzMCxiLmYtYi5jKzEsMTUsMSk7ZD0tajtjPTA7Zm9yKGg9Yi5iLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksOSk7ZCs9YS5hW2cuYy5wXStqO2ZbYysrXT1kfWQrPWEuYVtiLmEuYy5wXStqO2ZbYysrXT1kO2ZvcihtPW5ldyBybWIoYi5lKTttLmE8bS5jLmMubGVuZ3RoOyl7bD1KRChwbWIobSksOSk7ZCs9YS5hW2wuYy5wXStqO2ZbYysrXT1kfXJldHVybiBmfQpmdW5jdGlvbiBoR2MoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtO209bmV3IG16YihuZXcgU0djKGEpKTtmb3IoaD1XQyhPQyhSUCwxKSxKdmUsOSwwLFtiLGNdKSxpPTAsaj1oLmxlbmd0aDtpPGo7KytpKXtnPWhbaV07Zm9yKGw9ZEdjKGcsZCkuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSwxMSk7Zm9yKGY9bmV3IHhaYihrLmIpO29tYihmLmEpfHxvbWIoZi5iKTspe2U9SkQob21iKGYuYSk/cG1iKGYuYSk6cG1iKGYuYiksMTgpO2lmKCFlV2IoZSkpe20uYS55YyhrLCh4ZGIoKSx2ZGIpKT09bnVsbDt4R2MoZSkmJmZ6YihtLGs9PWUuYz9lLmQ6ZS5jKX19fX1yZXR1cm4gUWIobSksbmV3IFdsYihtKX0KZnVuY3Rpb24geldjKGEsYixjLGQpe3ZhciBlLGYsZztpZihiKXtmPUJlYihNRChXTWIoYiwodFVjKCksbVVjKSkpKStkO2c9YytCZWIoTUQoV01iKGIsZ1VjKSkpLzI7Wk1iKGIsclVjLGpmYihQY2IoemNiKCR3bmQuTWF0aC5yb3VuZChmKSkpKSk7Wk1iKGIsc1VjLGpmYihQY2IoemNiKCR3bmQuTWF0aC5yb3VuZChnKSkpKSk7Yi5kLmI9PTB8fHpXYyhhLEpEKERyKChlPUd0YigobmV3IGdSYyhiKSkuYS5kLDApLG5ldyBqUmMoZSkpKSwzOSksYytCZWIoTUQoV01iKGIsZ1VjKSkpK2EuYixkK0JlYihNRChXTWIoYixqVWMpKSkpO1dNYihiLHBVYykhPW51bGwmJnpXYyhhLEpEKFdNYihiLHBVYyksMzkpLGMsZCl9fQpmdW5jdGlvbiBCcGQoYSxiKXt2YXIgYyxkLGUsZjtmPUpEKGtzZChhLChMZ2QoKSxkZ2QpKSw2NCkuZy1KRChrc2QoYixkZ2QpLDY0KS5nO2lmKGYhPTApe3JldHVybiBmfWM9SkQoa3NkKGEsJGZkKSwxNyk7ZD1KRChrc2QoYiwkZmQpLDE3KTtpZighIWMmJiEhZCl7ZT1jLmEtZC5hO2lmKGUhPTApe3JldHVybiBlfX1zd2l0Y2goSkQoa3NkKGEsZGdkKSw2NCkuZyl7Y2FzZSAxOnJldHVybiBIZWIoYS5pLGIuaSk7Y2FzZSAyOnJldHVybiBIZWIoYS5qLGIuaik7Y2FzZSAzOnJldHVybiBIZWIoYi5pLGEuaSk7Y2FzZSA0OnJldHVybiBIZWIoYi5qLGEuaik7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFdlYihIdmUpKTt9fQpmdW5jdGlvbiBieGQoYSl7dmFyIGIsYyxkO2lmKChhLkRiJjY0KSE9MClyZXR1cm4ganRkKGEpO2I9bmV3IFdnYihIQ2UpO2M9YS5rO2lmKCFjKXshYS5uJiYoYS5uPW5ldyBYMGQoejMsYSwxLDcpKTtpZihhLm4uaT4wKXtkPSghYS5uJiYoYS5uPW5ldyBYMGQoejMsYSwxLDcpKSxKRChuRGQoYS5uLDApLDE1MykpLmE7IWR8fFFnYihRZ2IoKGIuYSs9JyAiJyxiKSxkKSwnIicpfX1lbHNle1FnYihRZ2IoKGIuYSs9JyAiJyxiKSxjKSwnIicpfVFnYihMZ2IoUWdiKExnYihRZ2IoTGdiKFFnYihMZ2IoKGIuYSs9JyAoJyxiKSxhLmkpLCcsJyksYS5qKSwnIHwgJyksYS5nKSwnLCcpLGEuZiksJyknKTtyZXR1cm4gYi5hfQpmdW5jdGlvbiBxeGQoYSl7dmFyIGIsYyxkO2lmKChhLkRiJjY0KSE9MClyZXR1cm4ganRkKGEpO2I9bmV3IFdnYihJQ2UpO2M9YS5rO2lmKCFjKXshYS5uJiYoYS5uPW5ldyBYMGQoejMsYSwxLDcpKTtpZihhLm4uaT4wKXtkPSghYS5uJiYoYS5uPW5ldyBYMGQoejMsYSwxLDcpKSxKRChuRGQoYS5uLDApLDE1MykpLmE7IWR8fFFnYihRZ2IoKGIuYSs9JyAiJyxiKSxkKSwnIicpfX1lbHNle1FnYihRZ2IoKGIuYSs9JyAiJyxiKSxjKSwnIicpfVFnYihMZ2IoUWdiKExnYihRZ2IoTGdiKFFnYihMZ2IoKGIuYSs9JyAoJyxiKSxhLmkpLCcsJyksYS5qKSwnIHwgJyksYS5nKSwnLCcpLGEuZiksJyknKTtyZXR1cm4gYi5hfQpmdW5jdGlvbiB1aGMoYSxiKXt2YXIgYyxkLGUsZixnO2I9PShXeWMoKSxUeWMpJiZ2bmIoSkQoUWMoYS5hLCgkZ2MoKSxXZ2MpKSwxNSkpO2ZvcihlPUpEKFFjKGEuYSwoJGdjKCksV2djKSksMTUpLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksMTA1KTtjPUpEKE1sYihkLmosMCksMTEyKS5kLmo7Zj1uZXcgV2xiKGQuaik7U2xiKGYsbmV3ICRoYyk7c3dpdGNoKGIuZyl7Y2FzZSAyOm1oYyhhLGYsYywoSWhjKCksR2hjKSwxKTticmVhaztjYXNlIDE6Y2FzZSAwOmc9b2hjKGYpO21oYyhhLG5ldyBJamIoZiwwLGcpLGMsKEloYygpLEdoYyksMCk7bWhjKGEsbmV3IElqYihmLGcsZi5jLmxlbmd0aCksYyxHaGMsMSk7fX19CmZ1bmN0aW9uIE5GYyhhKXt2YXIgYixjLGQsZSxmLGcsaDtlPUpEKFdNYihhLChJcWMoKSxfcGMpKSw5KTtkPWEuajtjPShzRGIoMCxkLmMubGVuZ3RoKSxKRChkLmNbMF0sMTEpKTtmb3IoZz1uZXcgcm1iKGUuaik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDExKTtpZihYRChmKT09PVhEKFdNYihjLGtxYykpKXtpZihmLmo9PShSamQoKSx4amQpJiZhLnA+ZS5wKXthWmIoZixPamQpO2lmKGYuZCl7aD1mLm8uYjtiPWYuYS5iO2YuYS5iPWgtYn19ZWxzZSBpZihmLmo9PU9qZCYmZS5wPmEucCl7YVpiKGYseGpkKTtpZihmLmQpe2g9Zi5vLmI7Yj1mLmEuYjtmLmEuYj0tKGgtYil9fWJyZWFrfX1yZXR1cm4gZX0KZnVuY3Rpb24gSGFkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7aWYoYj09bnVsbHx8Yi5sZW5ndGg9PTApe3JldHVybiBudWxsfWU9SkQoT2liKGEuYSxiKSwxNDkpO2lmKCFlKXtmb3IoZD0oaD0obmV3IFpqYihhLmIpKS5hLnZjKCkuSmMoKSxuZXcgY2tiKGgpKTtkLmEuT2IoKTspe2M9KGY9SkQoZC5hLlBiKCksNDMpLEpEKGYua2QoKSwxNDkpKTtnPWMuYztpPWIubGVuZ3RoO2lmKGNnYihnLnN1YnN0cihnLmxlbmd0aC1pLGkpLGIpJiYoYi5sZW5ndGg9PWcubGVuZ3RofHxfZmIoZyxnLmxlbmd0aC1iLmxlbmd0aC0xKT09NDYpKXtpZihlKXtyZXR1cm4gbnVsbH1lPWN9fSEhZSYmUmliKGEuYSxiLGUpfXJldHVybiBlfQpmdW5jdGlvbiBHVGIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2Y9bmV3IEVkZChiLGMpO2ZvcihrPW5ldyBybWIoYS5hKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksOSk7bWRkKGoubixmKTtmb3IobT1uZXcgcm1iKGouaik7bS5hPG0uYy5jLmxlbmd0aDspe2w9SkQocG1iKG0pLDExKTtmb3IoZT1uZXcgcm1iKGwuZyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE4KTtQZGQoZC5hLGYpO2c9SkQoV01iKGQsKEJ3YygpLFJ1YykpLDc3KTshIWcmJlBkZChnLGYpO2ZvcihpPW5ldyBybWIoZC5iKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksNzIpO21kZChoLm4sZil9fX19fQpmdW5jdGlvbiB5WGIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2Y9bmV3IEVkZChiLGMpO2ZvcihrPW5ldyBybWIoYS5hKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksOSk7bWRkKGoubixmKTtmb3IobT1uZXcgcm1iKGouaik7bS5hPG0uYy5jLmxlbmd0aDspe2w9SkQocG1iKG0pLDExKTtmb3IoZT1uZXcgcm1iKGwuZyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE4KTtQZGQoZC5hLGYpO2c9SkQoV01iKGQsKEJ3YygpLFJ1YykpLDc3KTshIWcmJlBkZChnLGYpO2ZvcihpPW5ldyBybWIoZC5iKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksNzIpO21kZChoLm4sZil9fX19fQpmdW5jdGlvbiBoJGIoYSl7aWYoKCFhLmImJihhLmI9bmV3IHJlZSh2MyxhLDQsNykpLGEuYikuaT09MCl7dGhyb3cgc2NiKG5ldyBaOGMoJ0VkZ2VzIG11c3QgaGF2ZSBhIHNvdXJjZS4nKSl9ZWxzZSBpZigoIWEuYyYmKGEuYz1uZXcgcmVlKHYzLGEsNSw4KSksYS5jKS5pPT0wKXt0aHJvdyBzY2IobmV3IFo4YygnRWRnZXMgbXVzdCBoYXZlIGEgdGFyZ2V0LicpKX1lbHNleyFhLmImJihhLmI9bmV3IHJlZSh2MyxhLDQsNykpO2lmKCEoYS5iLmk8PTEmJighYS5jJiYoYS5jPW5ldyByZWUodjMsYSw1LDgpKSxhLmMuaTw9MSkpKXt0aHJvdyBzY2IobmV3IFo4YygnSHlwZXJlZGdlcyBhcmUgbm90IHN1cHBvcnRlZC4nKSl9fX0KZnVuY3Rpb24gcEVjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7bD0wO2Y9bmV3IG5sYjska2IoZixiKTt3aGlsZShmLmIhPWYuYyl7aT1KRChqbGIoZiksMjE3KTtqPTA7az1KRChXTWIoYi5qLChCd2MoKSxjdWMpKSwyNjYpO2c9QmViKE1EKFdNYihiLmosWnRjKSkpO2g9QmViKE1EKFdNYihiLmosJHRjKSkpO2lmKGshPShueWMoKSxreWMpKXtqKz1nKnFFYyhpLmUsayk7ais9aCpyRWMoaS5lKX1sKz1TRmMoaS5kLGkuZSkrajtmb3IoZT1uZXcgcm1iKGkuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDM2KTtjPUpEKE1sYihhLmIsZC5wKSwyMTcpO2Muc3x8KGwrPW9FYyhhLGMpKX19cmV0dXJuIGx9CmZ1bmN0aW9uIFUxYihhKXt2YXIgYixjLGQ7aWYoIVhNYihhLChCd2MoKSxndmMpKSl7cmV0dXJufWQ9SkQoV01iKGEsZ3ZjKSwyMik7aWYoZC5kYygpKXtyZXR1cm59Yz0oYj1KRChkZWIocjIpLDEwKSxuZXcgdXJiKGIsSkQoVkNiKGIsYi5sZW5ndGgpLDEwKSwwKSk7ZC5HYygoRWlkKCksemlkKSk/b3JiKGMsemlkKTpvcmIoYyxBaWQpO2QuR2MoeGlkKXx8b3JiKGMseGlkKTtkLkdjKHdpZCk/b3JiKGMsRGlkKTpkLkdjKHZpZCk/b3JiKGMsQ2lkKTpkLkdjKHlpZCkmJm9yYihjLEJpZCk7ZC5HYyhEaWQpP29yYihjLHdpZCk6ZC5HYyhDaWQpP29yYihjLHZpZCk6ZC5HYyhCaWQpJiZvcmIoYyx5aWQpO1pNYihhLGd2YyxjKX0KZnVuY3Rpb24gSzZiKGEsYil7dmFyIGMsZDt0aGlzLmI9bmV3IFVsYjt0aGlzLmU9bmV3IFVsYjt0aGlzLmE9YTt0aGlzLmQ9YjtINmIodGhpcyk7STZiKHRoaXMpO3RoaXMuYi5kYygpPyh0aGlzLmM9YS5jLnApOih0aGlzLmM9SkQodGhpcy5iLlhiKDApLDkpLmMucCk7dGhpcy5lLmMubGVuZ3RoPT0wPyh0aGlzLmY9YS5jLnApOih0aGlzLmY9SkQoTWxiKHRoaXMuZSx0aGlzLmUuYy5sZW5ndGgtMSksOSkuYy5wKTtmb3IoZD1KRChXTWIoYSwoSXFjKCksd3FjKSksMTUpLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksNzIpO2lmKFhNYihjLChCd2MoKSx1dWMpKSl7dGhpcy5kPUpEKFdNYihjLHV1YyksMjMxKTticmVha319fQpmdW5jdGlvbiBFa2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7ZD1KRChOaWIoYS5iLGIpLDUwKTtmPUpEKE5pYihhLmIsYyksNTApO2U9SkQoTmliKGEuZixiKSw1MCk7Zz1KRChOaWIoYS5mLGMpLDUwKTtkLmEueWMoYyxkKTtnLmEueWMoYixnKTtmb3Ioaz1mLmEuZWMoKS5KYygpO2suT2IoKTspe2o9SkQoay5QYigpLDkpO2QuYS55YyhqLGQpO05yYihKRChOaWIoYS5mLGopLDUwKSxiKTt4ZShKRChOaWIoYS5mLGopLDUwKSxlKX1mb3IoaT1lLmEuZWMoKS5KYygpO2kuT2IoKTspe2g9SkQoaS5QYigpLDkpO2cuYS55YyhoLGcpO05yYihKRChOaWIoYS5iLGgpLDUwKSxjKTt4ZShKRChOaWIoYS5iLGgpLDUwKSxmKX19CmZ1bmN0aW9uIHhGYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztkPUpEKE5pYihhLmEsYiksNTApO2Y9SkQoTmliKGEuYSxjKSw1MCk7ZT1KRChOaWIoYS5iLGIpLDUwKTtnPUpEKE5pYihhLmIsYyksNTApO2QuYS55YyhjLGQpO2cuYS55YyhiLGcpO2ZvcihrPWYuYS5lYygpLkpjKCk7ay5PYigpOyl7aj1KRChrLlBiKCksOSk7ZC5hLnljKGosZCk7TnJiKEpEKE5pYihhLmIsaiksNTApLGIpO3hlKEpEKE5pYihhLmIsaiksNTApLGUpfWZvcihpPWUuYS5lYygpLkpjKCk7aS5PYigpOyl7aD1KRChpLlBiKCksOSk7Zy5hLnljKGgsZyk7TnJiKEpEKE5pYihhLmEsaCksNTApLGMpO3hlKEpEKE5pYihhLmEsaCksNTApLGYpfX0KZnVuY3Rpb24gR2hiKCl7R2hiPVpjYjt2YXIgYTtCaGI9bmV3IFRoYigxLDEpO0RoYj1uZXcgVGhiKDEsMTApO0ZoYj1uZXcgVGhiKDAsMCk7QWhiPW5ldyBUaGIoLTEsMSk7Q2hiPVdDKE9DKGxKLDEpLGhyZSw5MCwwLFtGaGIsQmhiLG5ldyBUaGIoMSwyKSxuZXcgVGhiKDEsMyksbmV3IFRoYigxLDQpLG5ldyBUaGIoMSw1KSxuZXcgVGhiKDEsNiksbmV3IFRoYigxLDcpLG5ldyBUaGIoMSw4KSxuZXcgVGhiKDEsOSksRGhiXSk7RWhiPVNDKGxKLGhyZSw5MCwzMiwwLDEpO2ZvcihhPTA7YTxFaGIubGVuZ3RoO2ErKyl7RWhiW2FdPUJjYihKY2IoMSxhKSwwKT9haWIoSmNiKDEsYSkpOk9oYihhaWIoR2NiKEpjYigxLGEpKSkpfX0KZnVuY3Rpb24gVUdiKGEsYixjLGQsZSxmLGcpe2EuYz1kLkpmKCkuYTthLmQ9ZC5KZigpLmI7aWYoZSl7YS5jKz1lLkpmKCkuYTthLmQrPWUuSmYoKS5ifWEuYj1iLktmKCkuYTthLmE9Yi5LZigpLmI7aWYoIWUpe2M/KGEuYy09ZytiLktmKCkuYSk6KGEuYys9ZC5LZigpLmErZyl9ZWxzZXtzd2l0Y2goZS4kZigpLmcpe2Nhc2UgMDpjYXNlIDI6YS5jKz1lLktmKCkuYStnK2YuYStnO2JyZWFrO2Nhc2UgNDphLmMtPWcrZi5hK2crYi5LZigpLmE7YnJlYWs7Y2FzZSAxOmEuYys9ZS5LZigpLmErZzthLmQtPWcrZi5iK2crYi5LZigpLmI7YnJlYWs7Y2FzZSAzOmEuYys9ZS5LZigpLmErZzthLmQrPWUuS2YoKS5iK2crZi5iK2c7fX19CmZ1bmN0aW9uIG9OYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvO2Y9YztpZihjPGQpe209KG49bmV3IFhNYyhhLnApLG89bmV3IFhNYyhhLnApLHhlKG4uZSxhLmUpLG4ucT1hLnEsbi5yPW8sT01jKG4pLHhlKG8uaixhLmopLG8ucj1uLE9NYyhvKSxuZXcgeG9kKG4sbykpO2w9SkQobS5hLDExNik7az1KRChtLmIsMTE2KTtlPShzRGIoZixiLmMubGVuZ3RoKSxKRChiLmNbZl0sMzM1KSk7Zz12TmMoYSxsLGssZSk7Zm9yKGo9YysxO2o8PWQ7aisrKXtoPShzRGIoaixiLmMubGVuZ3RoKSxKRChiLmNbal0sMzM1KSk7aT12TmMoYSxsLGssaCk7aWYodE5jKGgsaSxlLGcpKXtlPWg7Zz1pO2Y9an19fXJldHVybiBmfQpmdW5jdGlvbiByMmMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbztnPUpEKG5EZChiLDApLDI3KTtodGQoZywwKTtpdGQoZywwKTttPW5ldyBVbGI7WUNiKG0uYyxnKTtoPWc7Zj1uZXcgQjRjKGEuYSxnLmcsZy5mLChJNGMoKSxINGMpKTtmb3Iobj0xO248Yi5pO24rKyl7bz1KRChuRGQoYixuKSwyNyk7aT1zMmMoYSxFNGMsbyxoLGYsbSxjKTtqPXMyYyhhLEQ0YyxvLGgsZixtLGMpO2s9czJjKGEsRzRjLG8saCxmLG0sYyk7bD1zMmMoYSxGNGMsbyxoLGYsbSxjKTtlPXUyYyhhLGksaixrLGwsbyxoLGQpO2h0ZChvLGUuZCk7aXRkKG8sZS5lKTtBNGMoZSxINGMpO2Y9ZTtoPW87WUNiKG0uYyxvKX1yZXR1cm4gZn0KZnVuY3Rpb24gcXpkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbTtrPW51bGw7bT1iO2w9ZnpkKGEsY0NkKGMpLG0pO1BzZChsLGJ5ZChtLHZEZSkpO2c9JHhkKG0sbERlKTtkPW5ldyBIemQoYSxsKTtDeWQoZC5hLGQuYixnKTtoPSR4ZChtLG1EZSk7ZT1uZXcgSnpkKGEsbCk7RHlkKGUuYSxlLmIsaCk7aWYoKCFsLmImJihsLmI9bmV3IHJlZSh2MyxsLDQsNykpLGwuYikuaT09MHx8KCFsLmMmJihsLmM9bmV3IHJlZSh2MyxsLDUsOCkpLGwuYykuaT09MCl7Zj1ieWQobSx2RGUpO2k9ekRlK2Y7aj1pK0FEZTt0aHJvdyBzY2IobmV3IGV5ZChqKSl9eXpkKG0sbCk7cnpkKGEsbSxsKTtrPXV6ZChhLG0sbCk7cmV0dXJuIGt9CmZ1bmN0aW9uIEFHYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2U9U0MoY0UsaXNlLDMwLGEuZS5hLmMubGVuZ3RoLDE1LDEpO2ZvcihnPW5ldyBybWIoYS5lLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwxMjMpO2VbZi5kXSs9Zi5iLmEuYy5sZW5ndGh9aD1jdihiKTt3aGlsZShoLmIhPTApe2Y9SkQoaC5iPT0wP251bGw6KHJEYihoLmIhPTApLEt0YihoLGguYS5hKSksMTIzKTtmb3IoZD1KcihuZXcgcm1iKGYuZy5hKSk7ZC5PYigpOyl7Yz1KRChkLlBiKCksMjE2KTtpPWMuZTtpLmU9JHduZC5NYXRoLm1heChpLmUsZi5lK2MuYSk7LS1lW2kuZF07ZVtpLmRdPT0wJiYoRHRiKGgsaSxoLmMuYixoLmMpLHRydWUpfX19CmZ1bmN0aW9uIEVHYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsO2M9THJlO2U9SHFlO2ZvcihoPW5ldyBybWIoYS5lLmEpO2guYTxoLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihoKSwxMjMpO2U9JHduZC5NYXRoLm1pbihlLGYuZSk7Yz0kd25kLk1hdGgubWF4KGMsZi5lKX1iPVNDKGNFLGlzZSwzMCxjLWUrMSwxNSwxKTtmb3IoZz1uZXcgcm1iKGEuZS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTIzKTtmLmUtPWU7KytiW2YuZV19ZD0wO2lmKGEuayE9bnVsbCl7Zm9yKGo9YS5rLGs9MCxsPWoubGVuZ3RoO2s8bDsrK2spe2k9altrXTtiW2QrK10rPWk7aWYoYi5sZW5ndGg9PWQpe2JyZWFrfX19cmV0dXJuIGJ9CmZ1bmN0aW9uIExXYyhhLGIpe3ZhciBjLGQsZSxmLGcsaDtiLlNnKCdFZGdlIHJvdXRpbmcnLDEpO2U9SkQoV01iKGEsKGtWYygpLE5VYykpLDM4Myk7aWYoZT09KE9UYygpLE1UYykpe0pXYyhhKX1lbHNlIGlmKGU9PUxUYyl7SkQoenViKENCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5iLDE2KSksbmV3IERRYykpKSwzOSk7Zj1CZWIoTUQoV01iKGEsYlZjKSkpO2c9QmViKE1EKFdNYihhLE1VYykpKTtoPUpEKFdNYihhLEtVYyksODYpO0hXYyhhLGgsZik7SVdjKGEsaCxmLGcpO0dXYyhhLGgsZixnKTtmb3IoZD1HdGIoYS5hLDApO2QuYiE9ZC5kLmM7KXtjPUpEKFV0YihkKSw2NSk7Yy5hLmI8MiYmS1djKGMpfX1iLlRnKCl9CmZ1bmN0aW9uIGZHZChhKXtzd2l0Y2goYS5kKXtjYXNlIDk6Y2FzZSA4OntyZXR1cm4gdHJ1ZX1jYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6e3JldHVybiBmYWxzZX1jYXNlIDc6e3JldHVybiBKRChlR2QoYSksMTcpLmE9PWEub31jYXNlIDE6Y2FzZSAyOntpZihhLm89PS0yKXtyZXR1cm4gZmFsc2V9ZWxzZXtzd2l0Y2goYS5wKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDY6Y2FzZSA1OmNhc2UgNzp7cmV0dXJuIHljYihhLmssYS5mKX1jYXNlIDM6Y2FzZSA0OntyZXR1cm4gYS5qPT1hLmV9ZGVmYXVsdDp7cmV0dXJuIGEubj09bnVsbD9hLmc9PW51bGw6cGIoYS5uLGEuZyl9fX19ZGVmYXVsdDp7cmV0dXJuIGZhbHNlfX19CmZ1bmN0aW9uIHJEYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsO2Y9bmV3IFZsYihiLmMubGVuZ3RoKTtmb3Ioaj1uZXcgcm1iKGIpO2ouYTxqLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihqKSw5KTtJbGIoZixhLmJbZy5jLnBdW2cucF0pfW1EYyhhLGYsYyk7bD1udWxsO3doaWxlKGw9bkRjKGYpKXtvRGMoYSxKRChsLmEsMjM4KSxKRChsLmIsMjM4KSxmKX1iLmMubGVuZ3RoPTA7Zm9yKGU9bmV3IHJtYihmKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjM4KTtmb3IoaD1kLmQsaT0wLGs9aC5sZW5ndGg7aTxrOysraSl7Zz1oW2ldO1lDYihiLmMsZyk7YS5hW2cuYy5wXVtnLnBdLmE9c0RjKGQuZyxkLmRbMF0pLmF9fX0KZnVuY3Rpb24gcWxjKGEsYil7dmFyIGMsZCxlO2IuU2coJ0JyZWFraW5nIFBvaW50IEluc2VydGlvbicsMSk7ZD1uZXcgaW1jKGEpO3N3aXRjaChKRChXTWIoYSwoQndjKCksdXdjKSksMzQ3KS5nKXtjYXNlIDI6ZT1uZXcgdW1jO2JyZWFrO2Nhc2UgMDplPW5ldyBqbGM7YnJlYWs7ZGVmYXVsdDplPW5ldyB4bWM7fWM9ZS5tZyhhLGQpO3lkYihMRChXTWIoYSx3d2MpKSkmJihjPXBsYyhhLGMpKTtpZighZS5uZygpJiZYTWIoYSxBd2MpKXtzd2l0Y2goSkQoV01iKGEsQXdjKSwzNDgpLmcpe2Nhc2UgMjpjPUdtYyhkLGMpO2JyZWFrO2Nhc2UgMTpjPUVtYyhkLGMpO319aWYoYy5kYygpKXtiLlRnKCk7cmV0dXJufW5sYyhhLGMpO2IuVGcoKX0KZnVuY3Rpb24gWGhkKGEpe1JhZChhLG5ldyBjYWQobmFkKGthZChtYWQobGFkKG5ldyBwYWQscUNlKSwnRUxLIEZpeGVkJyksJ0tlZXBzIHRoZSBjdXJyZW50IGxheW91dCBhcyBpdCBpcywgd2l0aG91dCBhbnkgYXV0b21hdGljIG1vZGlmaWNhdGlvbi4gT3B0aW9uYWwgY29vcmRpbmF0ZXMgY2FuIGJlIGdpdmVuIGZvciBub2RlcyBhbmQgZWRnZSBiZW5kIHBvaW50cy4nKSxuZXcgJGhkKSkpO1BhZChhLHFDZSxSdWUsVWhkKTtQYWQoYSxxQ2UsJHllLEpCZChWaGQpKTtQYWQoYSxxQ2UsTkJlLEpCZChQaGQpKTtQYWQoYSxxQ2UsWXVlLEpCZChRaGQpKTtQYWQoYSxxQ2UscHZlLEpCZChTaGQpKTtQYWQoYSxxQ2UsV3VlLEpCZChSaGQpKX0KZnVuY3Rpb24gem8oYSxiLGMpe3ZhciBkLGUsZixnLGg7ZD1QY2IoRmNiKHlyZSxoZmIoUGNiKEZjYihiPT1udWxsPzA6dGIoYiksenJlKSksMTUpKSk7aD1QY2IoRmNiKHlyZSxoZmIoUGNiKEZjYihjPT1udWxsPzA6dGIoYyksenJlKSksMTUpKSk7Zj1DbyhhLGIsZCk7aWYoISFmJiZoPT1mLmYmJkhiKGMsZi5pKSl7cmV0dXJuIGN9Zz1EbyhhLGMsaCk7aWYoZyl7dGhyb3cgc2NiKG5ldyBUZWIoJ3ZhbHVlIGFscmVhZHkgcHJlc2VudDogJytjKSl9ZT1uZXcgZ3AoYixkLGMsaCk7aWYoZil7dW8oYSxmKTt4byhhLGUsZik7Zi5lPW51bGw7Zi5jPW51bGw7cmV0dXJuIGYuaX1lbHNle3hvKGEsZSxudWxsKTtCbyhhKTtyZXR1cm4gbnVsbH19CmZ1bmN0aW9uIGYxYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2s9Yy5hLmM7Zz1jLmEuYytjLmEuYjtmPUpEKE5pYihjLmMsYiksNDU0KTtuPWYuZjtvPWYuYTtmLmI/KGk9bmV3IEVkZChnLG4pKTooaT1uZXcgRWRkKGssbikpO2YuYz8obD1uZXcgRWRkKGssbykpOihsPW5ldyBFZGQoZyxvKSk7ZT1rO2MucHx8KGUrPWEuYyk7ZSs9Yy5GK2MudiphLmI7aj1uZXcgRWRkKGUsbik7bT1uZXcgRWRkKGUsbyk7TWRkKGIuYSxXQyhPQyhiMiwxKSxocmUsOCwwLFtpLGpdKSk7aD1jLmQuYS5nYygpPjE7aWYoaCl7ZD1uZXcgRWRkKGUsYy5iKTtBdGIoYi5hLGQpfU1kZChiLmEsV0MoT0MoYjIsMSksaHJlLDgsMCxbbSxsXSkpfQpmdW5jdGlvbiBkeWMoKXtkeWM9WmNiO2J5Yz1uZXcgZXljKHl2ZSwwKTtZeGM9bmV3IGV5YygnTklLT0xPVicsMSk7X3hjPW5ldyBleWMoJ05JS09MT1ZfUElYRUwnLDIpO1p4Yz1uZXcgZXljKCdOSUtPTE9WX0lNUFJPVkVEJywzKTskeGM9bmV3IGV5YygnTklLT0xPVl9JTVBST1ZFRF9QSVhFTCcsNCk7VnhjPW5ldyBleWMoJ0RVTU1ZTk9ERV9QRVJDRU5UQUdFJyw1KTtheWM9bmV3IGV5YygnTk9ERUNPVU5UX1BFUkNFTlRBR0UnLDYpO2N5Yz1uZXcgZXljKCdOT19CT1VOREFSWScsNyk7V3hjPW5ldyBleWMoJ01PREVMX09SREVSX0xFRlRfVE9fUklHSFQnLDgpO1h4Yz1uZXcgZXljKCdNT0RFTF9PUkRFUl9SSUdIVF9UT19MRUZUJyw5KX0KZnVuY3Rpb24gZHpkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2s9bnVsbDttPXl5ZChhLGIpO2Q9bnVsbDtoPUpEKGtzZChiLChMZ2QoKSxyZmQpKSwyOTcpO2g/KGQ9aCk6KGQ9KG9rZCgpLGxrZCkpO249ZDtpZihuPT0ob2tkKCksbGtkKSl7ZT1udWxsO2o9SkQoTmliKGEucixtKSwyOTcpO2o/KGU9aik6KGU9bWtkKTtuPWV9UWliKGEucixiLG4pO2Y9bnVsbDtpPUpEKGtzZChiLHBmZCksMjc1KTtpPyhmPWkpOihmPShlaGQoKSxiaGQpKTtsPWY7aWYobD09KGVoZCgpLGJoZCkpe2c9bnVsbDtjPUpEKE5pYihhLmIsbSksMjc1KTtjPyhnPWMpOihnPWFoZCk7bD1nfWs9SkQoUWliKGEuYixiLGwpLDI3NSk7cmV0dXJuIGt9CmZ1bmN0aW9uIFBuZShhKXt2YXIgYixjLGQsZSxmO2Q9YS5sZW5ndGg7Yj1uZXcgSWdiO2Y9MDt3aGlsZShmPGQpe2M9X2ZiKGEsZisrKTtpZihjPT05fHxjPT0xMHx8Yz09MTJ8fGM9PTEzfHxjPT0zMiljb250aW51ZTtpZihjPT0zNSl7d2hpbGUoZjxkKXtjPV9mYihhLGYrKyk7aWYoYz09MTN8fGM9PTEwKWJyZWFrfWNvbnRpbnVlfWlmKGM9PTkyJiZmPGQpe2lmKChlPShBRGIoZixhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGYpKSk9PTM1fHxlPT05fHxlPT0xMHx8ZT09MTJ8fGU9PTEzfHxlPT0zMil7QWdiKGIsZSZXcmUpOysrZn1lbHNle2IuYSs9J1xcJztBZ2IoYixlJldyZSk7KytmfX1lbHNlIEFnYihiLGMmV3JlKX1yZXR1cm4gYi5hfQpmdW5jdGlvbiBHJGMoKXtHJGM9WmNiO3EkYz1uZXcgTUJkKGtBZSwoeGRiKCksZmFsc2UpKTt3JGM9bmV3IE1CZChsQWUsamZiKDApKTt4JGM9bmV3IE1CZChtQWUsMCk7eSRjPW5ldyBNQmQobkFlLGZhbHNlKTt0JGM9KGokYygpLGckYyk7cyRjPW5ldyBNQmQob0FlLHQkYyk7amZiKDApO3IkYz1uZXcgTUJkKHBBZSxqZmIoMSkpO0QkYz0od19jKCksdV9jKTtDJGM9bmV3IE1CZChxQWUsRCRjKTtGJGM9KF9aYygpLCRaYyk7RSRjPW5ldyBNQmQockFlLEYkYyk7diRjPShtX2MoKSxsX2MpO3UkYz1uZXcgTUJkKHNBZSx2JGMpO0IkYz1uZXcgTUJkKHRBZSwwKTt6JGM9bmV3IE1CZCh1QWUsZmFsc2UpO0EkYz1uZXcgTUJkKHZBZSxmYWxzZSl9CmZ1bmN0aW9uIHdaYyhhLGIpe3ZhciBjLGQsZTtmb3IoZD1uZXcgcm1iKGIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwyNyk7UmMoYS5hLGMsYyk7UmMoYS5iLGMsYyk7ZT1UWWMoYyk7aWYoZS5jLmxlbmd0aCE9MCl7ISFhLmQmJmEuZC5FZyhlKTtSYyhhLmEsYywoc0RiKDAsZS5jLmxlbmd0aCksSkQoZS5jWzBdLDI3KSkpO1JjKGEuYixjLEpEKE1sYihlLGUuYy5sZW5ndGgtMSksMjcpKTt3aGlsZShRWWMoZSkuYy5sZW5ndGghPTApe2U9UVljKGUpOyEhYS5kJiZhLmQuRWcoZSk7UmMoYS5hLGMsKHNEYigwLGUuYy5sZW5ndGgpLEpEKGUuY1swXSwyNykpKTtSYyhhLmIsYyxKRChNbGIoZSxlLmMubGVuZ3RoLTEpLDI3KSl9fX19CmZ1bmN0aW9uIFBxZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKCFiKXtyZXR1cm4gbnVsbH1lbHNle2lmKGM8PS0xKXtkPVFUZChiLnpoKCksLTEtYyk7aWYoUkQoZCwxMDEpKXtyZXR1cm4gSkQoZCwxOSl9ZWxzZXtnPUpEKGIuSWgoZCksMTU5KTtmb3IoaD0wLGk9Zy5nYygpO2g8aTsrK2gpe2lmKFhEKGcuUmwoaCkpPT09WEQoYSkpe2U9Zy5RbChoKTtpZihSRChlLDEwMSkpe2Y9SkQoZSwxOSk7aWYoKGYuQmImUkNlKSE9MCl7cmV0dXJuIGZ9fX19dGhyb3cgc2NiKG5ldyBXZWIoJ1RoZSBjb250YWlubWVudCBmZWF0dXJlIGNvdWxkIG5vdCBiZSBsb2NhdGVkJykpfX1lbHNle3JldHVybiBzMWQoSkQoUVRkKGEuemgoKSxjKSwxOSkpfX19CmZ1bmN0aW9uIGlrYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosaztjPTA7Zm9yKGg9bmV3IHJtYihhLmQpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxMDUpOyEhZy5pJiYoZy5pLmM9YysrKX1iPVFDKHBjYixbaHJlLFZ0ZV0sWzE4MywzMF0sMTYsW2MsY10sMik7az1hLmQ7Zm9yKGU9MDtlPGsuYy5sZW5ndGg7ZSsrKXtpPShzRGIoZSxrLmMubGVuZ3RoKSxKRChrLmNbZV0sMTA1KSk7aWYoaS5pKXtmb3IoZj1lKzE7ZjxrLmMubGVuZ3RoO2YrKyl7aj0oc0RiKGYsay5jLmxlbmd0aCksSkQoay5jW2ZdLDEwNSkpO2lmKGouaSl7ZD1ua2MoaSxqKTtiW2kuaS5jXVtqLmkuY109ZDtiW2ouaS5jXVtpLmkuY109ZH19fX1yZXR1cm4gYn0KZnVuY3Rpb24gWlNjKCl7WlNjPVpjYjtZU2M9bmV3ICRTYygnUk9PVF9QUk9DJywwKTtSU2M9bmV3ICRTYygnRkFOX1BST0MnLDEpO1ZTYz1uZXcgJFNjKCdMRVZFTF9QUk9DJywyKTtXU2M9bmV3ICRTYygnTkVJR0hCT1JTX1BST0MnLDMpO1VTYz1uZXcgJFNjKCdMRVZFTF9IRUlHSFQnLDQpO1FTYz1uZXcgJFNjKCdESVJFQ1RJT05fUFJPQycsNSk7WFNjPW5ldyAkU2MoJ05PREVfUE9TSVRJT05fUFJPQycsNik7T1NjPW5ldyAkU2MoJ0NPTVBBQ1RJT05fUFJPQycsNyk7VFNjPW5ldyAkU2MoJ0xFVkVMX0NPT1JEUycsOCk7U1NjPW5ldyAkU2MoJ0dSQVBIX0JPVU5EU19QUk9DJyw5KTtQU2M9bmV3ICRTYygnREVUUkVFSUZZSU5HX1BST0MnLDEwKX0KZnVuY3Rpb24gJDlkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7bD1VVGQoYik7aj1udWxsO2U9ZmFsc2U7Zm9yKGg9MCxrPU9UZChsLmEpLmk7aDxrOysraCl7Zz1KRChnWGQobCxoLChmPUpEKG5EZChPVGQobC5hKSxoKSw4NyksaT1mLmMsUkQoaSw4OCk/SkQoaSwyOSk6KGNQZCgpLFVPZCkpKSwyOSk7Yz0kOWQoYSxnKTtpZighYy5kYygpKXtpZighail7aj1jfWVsc2V7aWYoIWUpe2U9dHJ1ZTtqPW5ldyBpT2Qoail9ai5GYyhjKX19fWQ9ZGFlKGEsYik7aWYoZC5kYygpKXtyZXR1cm4gIWo/KHBuYigpLHBuYigpLG1uYik6an1lbHNle2lmKCFqKXtyZXR1cm4gZH1lbHNle2V8fChqPW5ldyBpT2QoaikpO2ouRmMoZCk7cmV0dXJuIGp9fX0KZnVuY3Rpb24gXzlkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7bD1VVGQoYik7aj1udWxsO2Q9ZmFsc2U7Zm9yKGg9MCxrPU9UZChsLmEpLmk7aDxrOysraCl7Zj1KRChnWGQobCxoLChlPUpEKG5EZChPVGQobC5hKSxoKSw4NyksaT1lLmMsUkQoaSw4OCk/SkQoaSwyOSk6KGNQZCgpLFVPZCkpKSwyOSk7Yz1fOWQoYSxmKTtpZighYy5kYygpKXtpZighail7aj1jfWVsc2V7aWYoIWQpe2Q9dHJ1ZTtqPW5ldyBpT2Qoail9ai5GYyhjKX19fWc9Z2FlKGEsYik7aWYoZy5kYygpKXtyZXR1cm4gIWo/KHBuYigpLHBuYigpLG1uYik6an1lbHNle2lmKCFqKXtyZXR1cm4gZ31lbHNle2R8fChqPW5ldyBpT2QoaikpO2ouRmMoZyk7cmV0dXJuIGp9fX0KZnVuY3Rpb24gVkJjKGEsYil7dmFyIGMsZCxlLGYsZzthLmM9PW51bGx8fGEuYy5sZW5ndGg8Yi5jLmxlbmd0aD8oYS5jPVNDKHBjYixWdGUsMzAsYi5jLmxlbmd0aCwxNiwxKSk6RW1iKGEuYyk7YS5hPW5ldyBVbGI7ZD0wO2ZvcihnPW5ldyBybWIoYik7Zy5hPGcuYy5jLmxlbmd0aDspe2U9SkQocG1iKGcpLDkpO2UucD1kKyt9Yz1uZXcgTXRiO2ZvcihmPW5ldyBybWIoYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO2lmKCFhLmNbZS5wXSl7V0JjKGEsZSk7Yy5iPT0wfHwockRiKGMuYiE9MCksSkQoYy5hLmEuYywxNSkpLmdjKCk8YS5hLmMubGVuZ3RoP0J0YihjLGEuYSk6Q3RiKGMsYS5hKTthLmE9bmV3IFVsYn19cmV0dXJuIGN9CmZ1bmN0aW9uIHViZShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKFJEKGIsNzQpKXtyZXR1cm4gUUdkKGEsYixjKX1lbHNle2g9bnVsbDtmPW51bGw7ZD1KRChhLmcsMTIyKTtmb3IoZz0wO2c8YS5pOysrZyl7ZT1kW2ddO2lmKHBiKGIsZS5rZCgpKSl7Zj1lLklrKCk7aWYoUkQoZiwxMDEpJiYoSkQoZiwxOSkuQmImUkNlKSE9MCl7aD1lO2JyZWFrfX19aWYoaCl7aWYocXFkKGEuZSkpe2k9Zi5HaygpP0FiZShhLDQsZixiLG51bGwsRmJlKGEsZixiLFJEKGYsMTAxKSYmKEpEKGYsMTkpLkJiJlBzZSkhPTApLHRydWUpOkFiZShhLGYucWsoKT8yOjEsZixiLGYuZmsoKSwtMSx0cnVlKTtjP2Mua2ooaSk6KGM9aSl9Yz11YmUoYSxoLGMpfXJldHVybiBjfX0KZnVuY3Rpb24gVGJlKGEsYixjKXt2YXIgZCxlLGYsZztnPUtmZShhLmUuemgoKSxiKTtkPUpEKGEuZywxMjIpO0lmZSgpO2lmKEpEKGIsNjkpLnVrKCkpe2ZvcihmPTA7ZjxhLmk7KytmKXtlPWRbZl07aWYoZy5abChlLklrKCkpKXtpZihwYihlLGMpKXtVR2QoYSxmKTtyZXR1cm4gdHJ1ZX19fX1lbHNlIGlmKGMhPW51bGwpe2ZvcihmPTA7ZjxhLmk7KytmKXtlPWRbZl07aWYoZy5abChlLklrKCkpKXtpZihwYihjLGUua2QoKSkpe1VHZChhLGYpO3JldHVybiB0cnVlfX19fWVsc2V7Zm9yKGY9MDtmPGEuaTsrK2Ype2U9ZFtmXTtpZihnLlpsKGUuSWsoKSkpe2lmKGUua2QoKT09bnVsbCl7VUdkKGEsZik7cmV0dXJuIHRydWV9fX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBFVGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG47Zz1sZGQoYi5jLGMsZCk7Zm9yKGw9bmV3IHJtYihiLmEpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihsKSw5KTttZGQoay5uLGcpO2ZvcihuPW5ldyBybWIoay5qKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1KRChwbWIobiksMTEpO2ZvcihmPW5ldyBybWIobS5nKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMTgpO1BkZChlLmEsZyk7aD1KRChXTWIoZSwoQndjKCksUnVjKSksNzcpOyEhaCYmUGRkKGgsZyk7Zm9yKGo9bmV3IHJtYihlLmIpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSw3Mik7bWRkKGkubixnKX19fUlsYihhLmEsayk7ay5hPWF9fQpmdW5jdGlvbiBLNWIoYSxiKXt2YXIgYyxkLGUsZixnO2IuU2coJ05vZGUgYW5kIFBvcnQgTGFiZWwgUGxhY2VtZW50IGFuZCBOb2RlIFNpemluZycsMSk7T0diKChzV2IoKSxuZXcgRFdiKGEsdHJ1ZSx0cnVlLG5ldyBONWIpKSk7aWYoSkQoV01iKGEsKElxYygpLFdwYykpLDIyKS5HYygoJG9jKCksVG9jKSkpe2Y9SkQoV01iKGEsKEJ3YygpLEh2YykpLDIyKTtlPWYuR2MoKG9qZCgpLGxqZCkpO2c9eWRiKExEKFdNYihhLEl2YykpKTtmb3IoZD1uZXcgcm1iKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDI1KTtFQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGMuYSwxNikpLG5ldyBQNWIpLG5ldyBSNWIoZixlLGcpKX19Yi5UZygpfQpmdW5jdGlvbiBpN2MoYSl7UmFkKGEsbmV3IGNhZChuYWQoa2FkKG1hZChsYWQobmV3IHBhZCxyQmUpLCdFTEsgU1BPckUgT3ZlcmxhcCBSZW1vdmFsJyksJ0Egbm9kZSBvdmVybGFwIHJlbW92YWwgYWxnb3JpdGhtIHByb3Bvc2VkIGJ5IE5hY2htYW5zb24gZXQgYWwuIGluICJOb2RlIG92ZXJsYXAgcmVtb3ZhbCBieSBncm93aW5nIGEgdHJlZSIuJyksbmV3IGw3YykpKTtQYWQoYSxyQmUsZkJlLEpCZChnN2MpKTtQYWQoYSxyQmUsUnVlLGU3Yyk7UGFkKGEsckJlLE11ZSw4KTtQYWQoYSxyQmUsa0JlLEpCZChmN2MpKTtQYWQoYSxyQmUsbkJlLEpCZChjN2MpKTtQYWQoYSxyQmUsb0JlLEpCZChkN2MpKTtQYWQoYSxyQmUsRHllLCh4ZGIoKSxmYWxzZSkpfQpmdW5jdGlvbiBZOWQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtjPWIubWkoYS5hKTtpZihjKXtpPU9EKHhKZCgoIWMuYiYmKGMuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LGMpKSxjLmIpLGRHZSkpO2lmKGkhPW51bGwpe2Q9bmV3IFVsYjtmb3IoZj1tZ2IoaSwnXFx3JyksZz0wLGg9Zi5sZW5ndGg7ZzxoOysrZyl7ZT1mW2ddO2NnYihlLCcjI290aGVyJyk/SWxiKGQsJyEjIycrbmFlKGEsV1NkKGIubmsoKSkpKTpjZ2IoZSwnIyNsb2NhbCcpPyhkLmMucHVzaChudWxsKSx1bmRlZmluZWQsdHJ1ZSk6Y2diKGUsYkdlKT9JbGIoZCxuYWUoYSxXU2QoYi5uaygpKSkpOihZQ2IoZC5jLGUpLHRydWUpfXJldHVybiBkfX1yZXR1cm4gcG5iKCkscG5iKCksbW5ifQpmdW5jdGlvbiB2S2MoYSxiLGMsZCl7dGhpcy5lPWE7dGhpcy5rPUpEKFdNYihhLChJcWMoKSxBcWMpKSwzMTMpO3RoaXMuZz1TQyhSUCxKdmUsOSxiLDAsMSk7dGhpcy5iPVNDKExJLGhyZSwzNDEsYiw3LDEpO3RoaXMuYT1TQyhSUCxKdmUsOSxiLDAsMSk7dGhpcy5kPVNDKExJLGhyZSwzNDEsYiw3LDEpO3RoaXMuaj1TQyhSUCxKdmUsOSxiLDAsMSk7dGhpcy5pPVNDKExJLGhyZSwzNDEsYiw3LDEpO3RoaXMucD1TQyhMSSxocmUsMzQxLGIsNywxKTt0aGlzLm49U0MoR0ksaHJlLDQ3MSxiLDgsMSk7RG1iKHRoaXMubiwoeGRiKCksZmFsc2UpKTt0aGlzLmY9U0MoR0ksaHJlLDQ3MSxiLDgsMSk7RG1iKHRoaXMuZix0cnVlKTt0aGlzLm89Yzt0aGlzLmM9ZH0KZnVuY3Rpb24gR1JiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7aWYoYS5kKXt0aHJvdyBzY2IobmV3IFdlYigoY2ViKE1PKSxIdGUrTU8uaytJdGUpKSl9YS5jPT0oVGdkKCksUmdkKSYmRlJiKGEsUGdkKTtmb3IoYz1uZXcgcm1iKGEuYS5hKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMTk0KTtiLmU9MH1mb3IoZz1uZXcgcm1iKGEuYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksODIpO2Yubz1Mc2U7Zm9yKGU9Zi5mLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksODIpOysrZC5kLmV9fVZSYihhKTtmb3IoaT1uZXcgcm1iKGEuYS5iKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksODIpO2guaz10cnVlfXJldHVybiBhfQpmdW5jdGlvbiBMZ2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2g9bmV3IHNnYyhhKTtjPW5ldyBNdGI7RHRiKGMsYixjLmMuYixjLmMpO3doaWxlKGMuYiE9MCl7ZD1KRChjLmI9PTA/bnVsbDoockRiKGMuYiE9MCksS3RiKGMsYy5hLmEpKSwxMTIpO2QuZC5wPTE7Zm9yKGc9bmV3IHJtYihkLmUpO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihnKSwzMzYpO25nYyhoLGUpO2o9ZS5kO2ouZC5wPT0wJiYoRHRiKGMsaixjLmMuYixjLmMpLHRydWUpfWZvcihmPW5ldyBybWIoZC5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMzM2KTtuZ2MoaCxlKTtpPWUuYztpLmQucD09MCYmKER0YihjLGksYy5jLmIsYy5jKSx0cnVlKX19cmV0dXJuIGh9CmZ1bmN0aW9uIFVtZChhKXt2YXIgYixjLGQsZSxmO2Q9QmViKE1EKGtzZChhLChMZ2QoKSxqZ2QpKSkpO2lmKGQ9PTEpe3JldHVybn1kdGQoYSxkKmEuZyxkKmEuZik7Yz0kcShkcigoIWEuYyYmKGEuYz1uZXcgWDBkKEIzLGEsOSw5KSksYS5jKSxuZXcgdG5kKSk7Zm9yKGY9RGwoeWwoV0MoT0MoVkksMSksTnFlLDIwLDAsWyghYS5uJiYoYS5uPW5ldyBYMGQoejMsYSwxLDcpKSxhLm4pLCghYS5jJiYoYS5jPW5ldyBYMGQoQjMsYSw5LDkpKSxhLmMpLGNdKSkpO2NzKGYpOyl7ZT1KRChkcyhmKSwyNzMpO2Uub2goZCplLmxoKCksZCplLm1oKCkpO2UubmgoZCplLmtoKCksZCplLmpoKCkpO2I9SkQoZS5tZihXZmQpLDgpO2lmKGIpe2IuYSo9ZDtiLmIqPWR9fX0KZnVuY3Rpb24gamJlKGEsYixjKXt2YXIgZCxlLGYsZyxoO2c9KElmZSgpLEpEKGIsNjkpLnVrKCkpO2lmKExmZShhLmUsYikpe2lmKGIuUGkoKSYmeWJlKGEsYixjLFJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTApKXtyZXR1cm4gZmFsc2V9fWVsc2V7aD1LZmUoYS5lLnpoKCksYik7ZD1KRChhLmcsMTIyKTtmb3IoZj0wO2Y8YS5pOysrZil7ZT1kW2ZdO2lmKGguWmwoZS5JaygpKSl7aWYoZz9wYihlLGMpOmM9PW51bGw/ZS5rZCgpPT1udWxsOnBiKGMsZS5rZCgpKSl7cmV0dXJuIGZhbHNlfWVsc2V7SkQoRENkKGEsZixnP0pEKGMsNzQpOkpmZShiLGMpKSw3NCk7cmV0dXJuIHRydWV9fX19cmV0dXJuIHRDZChhLGc/SkQoYyw3NCk6SmZlKGIsYykpfQpmdW5jdGlvbiBtN2IoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtO2ZvcihnPW5ldyBybWIoYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMjUpO209RFhiKGYuYSk7Zm9yKGo9bSxrPTAsbD1qLmxlbmd0aDtrPGw7KytrKXtpPWpba107c3dpdGNoKEpEKFdNYihpLChCd2MoKSxVdWMpKSwxNzEpLmcpe2Nhc2UgMTpxN2IoaSk7cVliKGksYik7bjdiKGksdHJ1ZSxkKTticmVhaztjYXNlIDM6cjdiKGkpO3FZYihpLGMpO243YihpLGZhbHNlLGUpO319fWg9bmV3IEFqYihhLmIsMCk7d2hpbGUoaC5iPGguZC5nYygpKXsockRiKGguYjxoLmQuZ2MoKSksSkQoaC5kLlhiKGguYz1oLmIrKyksMjUpKS5hLmMubGVuZ3RoPT0wJiZ0amIoaCl9fQpmdW5jdGlvbiBkaWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7bj1iLmxlbmd0aDtpPW47QURiKDAsYi5sZW5ndGgpO2lmKGIuY2hhckNvZGVBdCgwKT09NDUpe2w9LTE7bT0xOy0tbn1lbHNle2w9MTttPTB9Zj0ob2liKCksbmliKVsxMF07ZT1uL2Z8MDtxPW4lZjtxIT0wJiYrK2U7aD1TQyhjRSxpc2UsMzAsZSwxNSwxKTtjPW1pYls4XTtnPTA7bz1tKyhxPT0wP2Y6cSk7Zm9yKHA9bTtwPGk7cD1vLG89cCtmKXtkPUZkYigoekRiKHAsbyxiLmxlbmd0aCksYi5zdWJzdHIocCxvLXApKSxMcmUsSHFlKTtqPShDaWIoKSxHaWIoaCxoLGcsYykpO2orPXdpYihoLGcsZCk7aFtnKytdPWp9az1nO2EuZT1sO2EuZD1rO2EuYT1oO0loYihhKX0KZnVuY3Rpb24gelZiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbTtoPWEuaTtlPXlkYihMRChXTWIoaCwoQndjKCksTnVjKSkpKTtrPTA7ZD0wO2ZvcihqPW5ldyBybWIoYS5nKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksMTgpO2c9ZVdiKGkpO2Y9ZyYmZSYmeWRiKExEKFdNYihpLE91YykpKTttPWkuZC5pO2cmJmY/KytkOmcmJiFmPysrazpnWWIobSkuZT09aD8rK2Q6KytrfWZvcihjPW5ldyBybWIoYS5lKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMTgpO2c9ZVdiKGIpO2Y9ZyYmZSYmeWRiKExEKFdNYihiLE91YykpKTtsPWIuYy5pO2cmJmY/KytrOmcmJiFmPysrZDpnWWIobCkuZT09aD8rK2s6KytkfXJldHVybiBrLWR9CmZ1bmN0aW9uIHo2YihhLGIpe3ZhciBjLGQsZSxmLGcsaDtpZihiLmRjKCkpe3JldHVybn1pZihKRChiLlhiKDApLDI5MSkuZD09KE5tYygpLEttYykpe3E2YihhLGIpfWVsc2V7Zm9yKGQ9Yi5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDI5MSk7c3dpdGNoKGMuZC5nKXtjYXNlIDU6bTZiKGEsYyxzNmIoYSxjKSk7YnJlYWs7Y2FzZSAwOm02YihhLGMsKGc9Yy5mLWMuYysxLGg9KGctMSkvMnwwLGMuYytoKSk7YnJlYWs7Y2FzZSA0Om02YihhLGMsdTZiKGEsYykpO2JyZWFrO2Nhc2UgMjpBNmIoYyk7bTZiKGEsYywoZj13NmIoYyksZj9jLmM6Yy5mKSk7YnJlYWs7Y2FzZSAxOkE2YihjKTttNmIoYSxjLChlPXc2YihjKSxlP2MuZjpjLmMpKTt9cjZiKGMuYSl9fX0KZnVuY3Rpb24gdnQoYSxiLGMsZCl7dmFyIGUsZixnO2c9bmV3IER1KGIsYyk7aWYoIWEuYSl7YS5hPWEuZT1nO1FpYihhLmIsYixuZXcgQ3UoZykpOysrYS5jfWVsc2UgaWYoIWQpe0pEKHZ1YihhLmUpLDQ5NSkuYj1nO2cuZD1hLmU7YS5lPWc7ZT1KRChOaWIoYS5iLGIpLDI2MCk7aWYoIWUpe1FpYihhLmIsYixlPW5ldyBDdShnKSk7KythLmN9ZWxzZXsrK2UuYTtmPWUuYztmLmM9ZztnLmU9ZjtlLmM9Z319ZWxzZXtlPUpEKHZ1YihKRChOaWIoYS5iLGIpLDI2MCkpLDI2MCk7KytlLmE7Zy5kPWQuZDtnLmU9ZC5lO2cuYj1kO2cuYz1kOyFkLmU/KGUuYj1nKTooZC5lLmM9Zyk7IWQuZD8oYS5hPWcpOihkLmQuYj1nKTtkLmQ9ZztkLmU9Z30rK2EuZDtyZXR1cm4gZ30KZnVuY3Rpb24gd0diKGEsYil7dmFyIGMsZCxlLGYsZztiLlNnKCdOZXR3b3JrIHNpbXBsZXgnLDEpO2lmKGEuZS5hLmMubGVuZ3RoPDEpe2IuVGcoKTtyZXR1cm59Zm9yKGY9bmV3IHJtYihhLmUuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDEyMyk7ZS5lPTB9Zz1hLmUuYS5jLmxlbmd0aD49NDA7ZyYmSEdiKGEpO3lHYihhKTt4R2IoYSk7Yz1CR2IoYSk7ZD0wO3doaWxlKCEhYyYmZDxhLmYpe3ZHYihhLGMsdUdiKGEsYykpO2M9QkdiKGEpOysrZH1nJiZHR2IoYSk7YS5hP3NHYihhLEVHYihhKSk6RUdiKGEpO2EuYj1udWxsO2EuZD1udWxsO2EucD1udWxsO2EuYz1udWxsO2EuZz1udWxsO2EuaT1udWxsO2Eubj1udWxsO2Eubz1udWxsO2IuVGcoKX0KZnVuY3Rpb24gZDFiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7aWYoYi5lKXtyZXR1cm59Yi5lPXRydWU7Zm9yKGQ9Yi5kLmEuZWMoKS5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDE4KTtpZihiLm8mJmIuZC5hLmdjKCk8PTEpe2c9Yi5hLmM7aD1iLmEuYytiLmEuYjtpPW5ldyBFZGQoZysoaC1nKS8yLGIuYik7QXRiKEpEKGIuZC5hLmVjKCkuSmMoKS5QYigpLDE4KS5hLGkpO2NvbnRpbnVlfWU9SkQoTmliKGIuYyxjKSw0NTQpO2lmKGUuYnx8ZS5jKXtmMWIoYSxjLGIpO2NvbnRpbnVlfWY9YS5kPT0ob3pjKCksbnpjKSYmKGUuZHx8ZS5lKSYmbDFiKGEsYikmJmIuZC5hLmdjKCk8PTE7Zj9nMWIoYyxiKTplMWIoYSxjLGIpfWIuayYmb2ZiKGIuZCxuZXcgeTFiKX0KZnVuY3Rpb24gRF9jKGEsYixjLGQsZSxmKXt2YXIgZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O209ZjtoPShkK2UpLzIrbTtxPWMqJHduZC5NYXRoLmNvcyhoKTtyPWMqJHduZC5NYXRoLnNpbihoKTtzPXEtYi5nLzI7dD1yLWIuZi8yO2h0ZChiLHMpO2l0ZChiLHQpO2w9YS5hLkNnKGIpO3A9Miokd25kLk1hdGguYWNvcyhjL2MrYS5jKTtpZihwPGUtZCl7bj1wL2w7Zz0oZCtlLXApLzJ9ZWxzZXtuPShlLWQpL2w7Zz1kfW89VFljKGIpO2lmKGEuZSl7YS5lLkRnKGEuZCk7YS5lLkVnKG8pfWZvcihqPW5ldyBybWIobyk7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDI3KTtrPWEuYS5DZyhpKTtEX2MoYSxpLGMrYS5jLGcsZytuKmssZik7Zys9biprfX0KZnVuY3Rpb24gckEoYSxiLGMpe3ZhciBkO2Q9Yy5xLmdldE1vbnRoKCk7c3dpdGNoKGIpe2Nhc2UgNTpRZ2IoYSxXQyhPQyhoSiwxKSxocmUsMiw2LFsnSicsJ0YnLCdNJywnQScsJ00nLCdKJywnSicsJ0EnLCdTJywnTycsJ04nLCdEJ10pW2RdKTticmVhaztjYXNlIDQ6UWdiKGEsV0MoT0MoaEosMSksaHJlLDIsNixbWHJlLFlyZSxacmUsJHJlLF9yZSxhc2UsYnNlLGNzZSxkc2UsZXNlLGZzZSxnc2VdKVtkXSk7YnJlYWs7Y2FzZSAzOlFnYihhLFdDKE9DKGhKLDEpLGhyZSwyLDYsWydKYW4nLCdGZWInLCdNYXInLCdBcHInLF9yZSwnSnVuJywnSnVsJywnQXVnJywnU2VwJywnT2N0JywnTm92JywnRGVjJ10pW2RdKTticmVhaztkZWZhdWx0Ok1BKGEsZCsxLGIpO319CmZ1bmN0aW9uIHpNYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG07aT1uZXcgRWRkKGMsZCk7QmRkKGksSkQoV01iKGIsKFRPYigpLFFPYikpLDgpKTtmb3IobT1uZXcgcm1iKGIuZSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9SkQocG1iKG0pLDE1MSk7bWRkKGwuZCxpKTtJbGIoYS5lLGwpfWZvcihoPW5ldyBybWIoYi5jKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMjg4KTtmb3IoZj1uZXcgcm1iKGcuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDI0OSk7bWRkKGUuZCxpKX1JbGIoYS5jLGcpfWZvcihrPW5ldyBybWIoYi5kKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksNDQyKTttZGQoai5kLGkpO0lsYihhLmQsail9fQpmdW5jdGlvbiBXemMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2ZvcihpPW5ldyBybWIoYi5qKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMTEpO2ZvcihlPW5ldyB4WmIoaC5iKTtvbWIoZS5hKXx8b21iKGUuYik7KXtkPUpEKG9tYihlLmEpP3BtYihlLmEpOnBtYihlLmIpLDE4KTtjPWQuYz09aD9kLmQ6ZC5jO2Y9Yy5pO2lmKGI9PWYpe2NvbnRpbnVlfWo9SkQoV01iKGQsKEJ3YygpLE52YykpLDE3KS5hO2o8MCYmKGo9MCk7Zz1mLnA7aWYoYS5iW2ddPT0wKXtpZihkLmQ9PWMpe2EuYVtnXS09aisxO2EuYVtnXTw9MCYmYS5jW2ddPjAmJkF0YihhLmYsZil9ZWxzZXthLmNbZ10tPWorMTthLmNbZ108PTAmJmEuYVtnXT4wJiZBdGIoYS5lLGYpfX19fX0KZnVuY3Rpb24gSVBjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2k9bmV3IEVkZChjLGQpO0JkZChpLEpEKFdNYihiLCh0VWMoKSxWVGMpKSw4KSk7Zm9yKGs9R3RiKGIuYiwwKTtrLmIhPWsuZC5jOyl7aj1KRChVdGIoayksMzkpO21kZChqLmUsaSk7QXRiKGEuYixqKX1mb3IoaD1KRCh5QmIoQUJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIuYSwxNikpKSxoQWIobmV3IHpBYixuZXcgeEFiLG5ldyBGQWIsV0MoT0MoSEwsMSksRXJlLDEzMSwwLFsobEFiKCksakFiKV0pKSksMTUpLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksNjUpO2ZvcihmPUd0YihnLmEsMCk7Zi5iIT1mLmQuYzspe2U9SkQoVXRiKGYpLDgpO2UuYSs9aS5hO2UuYis9aS5ifUF0YihhLmEsZyl9fQpmdW5jdGlvbiBuUWMoYSxiKXt2YXIgYyxkLGUsZjtpZigwPChSRChhLDE2KT9KRChhLDE2KS5nYygpOkdyKGEuSmMoKSkpKXtlPWI7aWYoMTxlKXstLWU7Zj1uZXcgeFFjO2ZvcihkPWEuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwzOSk7Zj15bChXQyhPQyhWSSwxKSxOcWUsMjAsMCxbZixuZXcgZ1JjKGMpXSkpfXJldHVybiBuUWMoZixlKX1pZihlPDApe2Y9bmV3IEFRYztmb3IoZD1hLkpjKCk7ZC5PYigpOyl7Yz1KRChkLlBiKCksMzkpO2Y9eWwoV0MoT0MoVkksMSksTnFlLDIwLDAsW2YsbmV3IGdSYyhjKV0pKX1pZigwPChSRChmLDE2KT9KRChmLDE2KS5nYygpOkdyKGYuSmMoKSkpKXtyZXR1cm4gblFjKGYsZSl9fX1yZXR1cm4gSkQoRHIoYS5KYygpKSwzOSl9CmZ1bmN0aW9uIHlXYyhhLGIsYyl7dmFyIGQsZSxmLGc7Yy5TZygnUHJvY2Vzc29yIG9yZGVyIG5vZGVzJywyKTthLmI9QmViKE1EKFdNYihiLChrVmMoKSxjVmMpKSkpO2EuYT1KRChXTWIoYixLVWMpLDg2KTtpZihhLmE9PShUZ2QoKSxSZ2QpKXthLmE9T2dkO1pNYihiLEtVYyxhLmEpfWU9bmV3IE10Yjtmb3IoZz1HdGIoYi5iLDApO2cuYiE9Zy5kLmM7KXtmPUpEKFV0YihnKSwzOSk7eWRiKExEKFdNYihmLCh0VWMoKSxxVWMpKSkpJiYoRHRiKGUsZixlLmMuYixlLmMpLHRydWUpfWQ9KHJEYihlLmIhPTApLEpEKGUuYS5hLmMsMzkpKTt3V2MoYSxkKTtjLmRoKDEpO3pXYyhhLGQsMC1CZWIoTUQoV01iKGQsKHRVYygpLGdVYykpKSkvMiwwKTtjLmRoKDEpO2MuVGcoKX0KZnVuY3Rpb24gTmtkKCl7TmtkPVpjYjtHa2Q9bmV3IE9rZCgnREVGQVVMVF9NSU5JTVVNX1NJWkUnLDApO0lrZD1uZXcgT2tkKCdNSU5JTVVNX1NJWkVfQUNDT1VOVFNfRk9SX1BBRERJTkcnLDEpO0ZrZD1uZXcgT2tkKCdDT01QVVRFX1BBRERJTkcnLDIpO0prZD1uZXcgT2tkKCdPVVRTSURFX05PREVfTEFCRUxTX09WRVJIQU5HJywzKTtLa2Q9bmV3IE9rZCgnUE9SVFNfT1ZFUkhBTkcnLDQpO01rZD1uZXcgT2tkKCdVTklGT1JNX1BPUlRfU1BBQ0lORycsNSk7TGtkPW5ldyBPa2QoJ1NQQUNFX0VGRklDSUVOVF9QT1JUX0xBQkVMUycsNik7SGtkPW5ldyBPa2QoJ0ZPUkNFX1RBQlVMQVJfTk9ERV9MQUJFTFMnLDcpO0VrZD1uZXcgT2tkKCdBU1lNTUVUUklDQUwnLDgpfQpmdW5jdGlvbiBrZmUoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2lmKCFiKXtyZXR1cm4gbnVsbH1lbHNle2M9KGY9Yi56aCgpLCFmP251bGw6V1NkKGYpLnNpKCkub2koZikpO2lmKGMpe1VzYihhLGIsYyk7ZT1iLnpoKCk7Zm9yKGk9MCxqPShlLmk9PW51bGwmJk1UZChlKSxlLmkpLmxlbmd0aDtpPGo7KytpKXtoPShkPShlLmk9PW51bGwmJk1UZChlKSxlLmkpLGk+PTAmJmk8ZC5sZW5ndGg/ZFtpXTpudWxsKTtpZihoLm9rKCkmJiFoLnBrKCkpe2lmKFJEKGgsMzMwKSl7bWZlKGEsSkQoaCwzNSksYixjKX1lbHNle2c9SkQoaCwxOSk7KGcuQmImUkNlKSE9MCYmb2ZlKGEsZyxiLGMpfX19Yi5SaCgpJiZKRChjLDUyKS5haShKRChiLDUyKS5YaCgpKX1yZXR1cm4gY319CmZ1bmN0aW9uIHZHYihhLGIsYyl7dmFyIGQsZSxmO2lmKCFiLmYpe3Rocm93IHNjYihuZXcgVGViKCdHaXZlbiBsZWF2ZSBlZGdlIGlzIG5vIHRyZWUgZWRnZS4nKSl9aWYoYy5mKXt0aHJvdyBzY2IobmV3IFRlYignR2l2ZW4gZW50ZXIgZWRnZSBpcyBhIHRyZWUgZWRnZSBhbHJlYWR5LicpKX1iLmY9ZmFsc2U7UHJiKGEucCxiKTtjLmY9dHJ1ZTtOcmIoYS5wLGMpO2Q9Yy5lLmUtYy5kLmUtYy5hO3pHYihhLGMuZSxiKXx8KGQ9LWQpO2ZvcihmPW5ldyBybWIoYS5lLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwxMjMpO3pHYihhLGUsYil8fChlLmUrPWQpfWEuaj0xO0VtYihhLmMpO0ZHYihhLEpEKHBtYihuZXcgcm1iKGEuZS5hKSksMTIzKSk7dEdiKGEpfQpmdW5jdGlvbiAkMmIoYSxiKXt2YXIgYyxkLGUsZixnLGg7aD1KRChXTWIoYiwoQndjKCksRXZjKSksMTAwKTtpZighKGg9PShhamQoKSxZaWQpfHxoPT1YaWQpKXtyZXR1cm59ZT0obmV3IEVkZChiLmYuYStiLmQuYitiLmQuYyxiLmYuYitiLmQuZCtiLmQuYSkpLmI7Zm9yKGc9bmV3IHJtYihhLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSw5KTtpZihmLmshPShEWWIoKSx3WWIpKXtjb250aW51ZX1jPUpEKFdNYihmLChJcWMoKSxUcGMpKSw2NCk7aWYoYyE9KFJqZCgpLHdqZCkmJmMhPVFqZCl7Y29udGludWV9ZD1CZWIoTUQoV01iKGYsdHFjKSkpO2g9PVlpZCYmKGQqPWUpO2Yubi5iPWQtSkQoV01iKGYsQ3ZjKSw4KS5iO2NZYihmLGZhbHNlLHRydWUpfX0KZnVuY3Rpb24gaDdiKGEsYixjLGQsZSl7aWYoYyYmKCFkfHwoYS5jLWEuYiZhLmEubGVuZ3RoLTEpPjEpJiZiPT0xJiZKRChhLmFbYS5iXSw5KS5rPT0oRFliKCkseFliKSl7YjdiKEpEKGEuYVthLmJdLDkpLChvaWQoKSxraWQpKX1lbHNlIGlmKGQmJighY3x8KGEuYy1hLmImYS5hLmxlbmd0aC0xKT4xKSYmYj09MSYmSkQoYS5hW2EuYy0xJmEuYS5sZW5ndGgtMV0sOSkuaz09KERZYigpLHhZYikpe2I3YihKRChhLmFbYS5jLTEmYS5hLmxlbmd0aC0xXSw5KSwob2lkKCksbGlkKSl9ZWxzZSBpZigoYS5jLWEuYiZhLmEubGVuZ3RoLTEpPT0yKXtiN2IoSkQoZmxiKGEpLDkpLChvaWQoKSxraWQpKTtiN2IoSkQoZmxiKGEpLDkpLGxpZCl9ZWxzZXskNmIoYSxlKX1hbGIoYSl9CmZ1bmN0aW9uIFlCYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2k9bmV3IElyYjtiPW5ldyBORmI7Zm9yKGc9YS5KYygpO2cuT2IoKTspe2U9SkQoZy5QYigpLDkpO2g9cEdiKHFHYihuZXcgckdiLGUpLGIpO2dzYihpLmYsZSxoKX1mb3IoZj1hLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksOSk7Zm9yKGQ9bmV3IGVzKElyKGtZYihlKS5hLkpjKCksbmV3IGVyKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDE4KTtpZihlV2IoYykpe2NvbnRpbnVlfURGYihHRmIoRkZiKEVGYihIRmIobmV3IElGYiwkd25kLk1hdGgubWF4KDEsSkQoV01iKGMsKEJ3YygpLE92YykpLDE3KS5hKSksMSksSkQoTmliKGksYy5jLmkpLDEyMykpLEpEKE5pYihpLGMuZC5pKSwxMjMpKSl9fXJldHVybiBifQpmdW5jdGlvbiB6Q2MoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG47RUNjKGEsYixjKTtmPWJbY107bj1kPyhSamQoKSxRamQpOihSamQoKSx3amQpO2lmKEFDYyhiLmxlbmd0aCxjLGQpKXtlPWJbZD9jLTE6YysxXTt2Q2MoYSxlLGQ/KEV5YygpLEN5Yyk6KEV5YygpLEJ5YykpO2ZvcihpPWYsaz0wLG09aS5sZW5ndGg7azxtOysrayl7Zz1pW2tdO3lDYyhhLGcsbil9dkNjKGEsZixkPyhFeWMoKSxCeWMpOihFeWMoKSxDeWMpKTtmb3IoaD1lLGo9MCxsPWgubGVuZ3RoO2o8bDsrK2ope2c9aFtqXTshIWcuZXx8eUNjKGEsZyxUamQobikpfX1lbHNle2ZvcihoPWYsaj0wLGw9aC5sZW5ndGg7ajxsOysrail7Zz1oW2pdO3lDYyhhLGcsbil9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gT2xkKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGw7cG5iKCk7U2xiKGEsbmV3IENtZCk7aD1uZXcgQWpiKGEsMCk7bD1uZXcgVWxiO2Y9MDt3aGlsZShoLmI8aC5kLmdjKCkpe2c9KHJEYihoLmI8aC5kLmdjKCkpLEpEKGguZC5YYihoLmM9aC5iKyspLDE2MikpO2lmKGwuYy5sZW5ndGghPTAmJmNtZChnKSpibWQoZyk+ZioyKXtrPW5ldyBobWQobCk7aj1jbWQoZykvYm1kKGcpO2k9U2xkKGssYixuZXcgTFliLGMsZCxlLGopO21kZCh2ZGQoay5lKSxpKTtsLmMubGVuZ3RoPTA7Zj0wO1lDYihsLmMsayk7WUNiKGwuYyxnKTtmPWNtZChrKSpibWQoaykrY21kKGcpKmJtZChnKX1lbHNle1lDYihsLmMsZyk7Zis9Y21kKGcpKmJtZChnKX19cmV0dXJuIGx9CmZ1bmN0aW9uIEk5YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2IuU2coJ1BvcnQgb3JkZXIgcHJvY2Vzc2luZycsMSk7aT1KRChXTWIoYSwoQndjKCksS3ZjKSksNDE4KTtmb3IoZD1uZXcgcm1iKGEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDI1KTtmb3IoZj1uZXcgcm1iKGMuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO2c9SkQoV01iKGUsRXZjKSwxMDApO2g9ZS5qO2lmKGc9PShhamQoKSxXaWQpfHxnPT1ZaWR8fGc9PVhpZCl7cG5iKCk7U2xiKGgsQTliKX1lbHNlIGlmKGchPSRpZCYmZyE9X2lkKXtwbmIoKTtTbGIoaCxEOWIpO0s5YihoKTtpPT0odnljKCksdXljKSYmU2xiKGgsQzliKX1lLmk9dHJ1ZTtkWWIoZSl9fWIuVGcoKX0KZnVuY3Rpb24gUGJlKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG87aWYocXFkKGEuZSkpe2lmKGIhPWMpe2U9SkQoYS5nLDEyMik7bj1lW2NdO2c9bi5JaygpO2lmKExmZShhLmUsZykpe289S2ZlKGEuZS56aCgpLGcpO2k9LTE7aD0tMTtkPTA7Zm9yKGo9MCxsPWI+Yz9iOmM7ajw9bDsrK2ope2lmKGo9PWMpe2g9ZCsrfWVsc2V7Zj1lW2pdO2s9by5abChmLklrKCkpO2o9PWImJihpPWo9PWwmJiFrP2QtMTpkKTtrJiYrK2R9fW09SkQoVEdkKGEsYixjKSw3NCk7aCE9aSYmelVkKGEsbmV3IHhfZChhLmUsNyxnLGpmYihoKSxuLmtkKCksaSkpO3JldHVybiBtfX19ZWxzZXtyZXR1cm4gSkQocERkKGEsYixjKSw3NCl9cmV0dXJuIEpEKFRHZChhLGIsYyksNzQpfQpmdW5jdGlvbiBXTGMoKXtXTGM9WmNiO1JMYz1FOWMobmV3IEo5YywoQ1FiKCksQVFiKSwodTViKCksTzRiKSk7VExjPUU5YyhuZXcgSjljLHpRYixTNGIpO1VMYz1DOWMoRTljKG5ldyBKOWMselFiLGU1YiksQlFiLGQ1Yik7UUxjPUM5YyhFOWMoRTljKG5ldyBKOWMselFiLEk0YiksQVFiLEo0YiksQlFiLEs0Yik7VkxjPUI5YyhCOWMoRzljKEM5YyhFOWMobmV3IEo5Yyx4UWIsbzViKSxCUWIsbjViKSxBUWIpLG01YikscDViKTtTTGM9QzljKG5ldyBKOWMsQlFiLFA0Yik7T0xjPUM5YyhFOWMoRTljKEU5YyhuZXcgSjljLHlRYixWNGIpLEFRYixYNGIpLEFRYixZNGIpLEJRYixXNGIpO1BMYz1DOWMoRTljKEU5YyhuZXcgSjljLEFRYixZNGIpLEFRYixENGIpLEJRYixDNGIpfQpmdW5jdGlvbiBkRChhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGosayxsLG07aj1nRChiKS1nRChhKTtnPXNEKGIsaik7aT1fQygwLDAsMCk7d2hpbGUoaj49MCl7aD1qRChhLGcpO2lmKGgpe2o8MjI/KGkubHw9MTw8aix1bmRlZmluZWQpOmo8NDQ/KGkubXw9MTw8ai0yMix1bmRlZmluZWQpOihpLmh8PTE8PGotNDQsdW5kZWZpbmVkKTtpZihhLmw9PTAmJmEubT09MCYmYS5oPT0wKXticmVha319az1nLm07bD1nLmg7bT1nLmw7Zy5oPWw+Pj4xO2cubT1rPj4+MXwobCYxKTw8MjE7Zy5sPW0+Pj4xfChrJjEpPDwyMTstLWp9YyYmZkQoaSk7aWYoZil7aWYoZCl7WUM9cEQoYSk7ZSYmKFlDPXZEKFlDLChFRCgpLENEKSkpfWVsc2V7WUM9X0MoYS5sLGEubSxhLmgpfX1yZXR1cm4gaX0KZnVuY3Rpb24gdUNjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7aj1hLmVbYi5jLnBdW2IucF0rMTtpPWIuYy5hLmMubGVuZ3RoKzE7Zm9yKGg9bmV3IHJtYihhLmEpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxMSk7bD0wO2Y9MDtmb3IoZT1EbCh5bChXQyhPQyhWSSwxKSxOcWUsMjAsMCxbbmV3IGRaYihnKSxuZXcgbFpiKGcpXSkpKTtjcyhlKTspe2Q9SkQoZHMoZSksMTEpO2lmKGQuaS5jPT1iLmMpe2wrPURDYyhhLGQuaSkrMTsrK2Z9fWM9bC9mO2s9Zy5qO2s9PShSamQoKSx3amQpP2M8aj8oYS5mW2cucF09YS5jLWMpOihhLmZbZy5wXT1hLmIrKGktYykpOms9PVFqZCYmKGM8aj8oYS5mW2cucF09YS5iK2MpOihhLmZbZy5wXT1hLmMtKGktYykpKX19CmZ1bmN0aW9uIEZkYihhLGIsYyl7dmFyIGQsZSxmLGcsaDtpZihhPT1udWxsKXt0aHJvdyBzY2IobmV3IE1mYihScWUpKX1mPWEubGVuZ3RoO2c9Zj4wJiYoQURiKDAsYS5sZW5ndGgpLGEuY2hhckNvZGVBdCgwKT09NDV8fChBRGIoMCxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KDApPT00MykpPzE6MDtmb3IoZD1nO2Q8ZjtkKyspe2lmKFdkYigoQURiKGQsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChkKSkpPT0tMSl7dGhyb3cgc2NiKG5ldyBNZmIoSnNlK2ErJyInKSl9fWg9cGFyc2VJbnQoYSwxMCk7ZT1oPGI7aWYoaXNOYU4oaCkpe3Rocm93IHNjYihuZXcgTWZiKEpzZSthKyciJykpfWVsc2UgaWYoZXx8aD5jKXt0aHJvdyBzY2IobmV3IE1mYihKc2UrYSsnIicpKX1yZXR1cm4gaH0KZnVuY3Rpb24gZ2tjKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2c9bmV3IE10Yjtmb3IoZj1uZXcgcm1iKGEuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDExNik7U01jKGUsZS5mLmMubGVuZ3RoKTtUTWMoZSxlLmsuYy5sZW5ndGgpO2lmKGUuaT09MCl7ZS5vPTA7RHRiKGcsZSxnLmMuYixnLmMpfX13aGlsZShnLmIhPTApe2U9SkQoZy5iPT0wP251bGw6KHJEYihnLmIhPTApLEt0YihnLGcuYS5hKSksMTE2KTtkPWUubysxO2ZvcihjPW5ldyBybWIoZS5mKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMTMzKTtoPWIuYTtVTWMoaCwkd25kLk1hdGgubWF4KGgubyxkKSk7VE1jKGgsaC5pLTEpO2guaT09MCYmKER0YihnLGgsZy5jLmIsZy5jKSx0cnVlKX19fQpmdW5jdGlvbiBWOGMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtmb3IoZz1uZXcgcm1iKGEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSw4NSk7ZD1fQmQoSkQobkRkKCghZi5iJiYoZi5iPW5ldyByZWUodjMsZiw0LDcpKSxmLmIpLDApLDg0KSk7aD1kLmk7aT1kLmo7ZT1KRChuRGQoKCFmLmEmJihmLmE9bmV3IFgwZCh3MyxmLDYsNikpLGYuYSksMCksMTY4KTtwdWQoZSxlLmoraCxlLmsraSk7aXVkKGUsZS5iK2gsZS5jK2kpO2ZvcihjPW5ldyBDSGQoKCFlLmEmJihlLmE9bmV3IHFWZCh1MyxlLDUpKSxlLmEpKTtjLmUhPWMuaS5nYygpOyl7Yj1KRChBSGQoYyksMzY5KTt5c2QoYixiLmEraCxiLmIraSl9T2RkKEpEKGtzZChmLChMZ2QoKSx0ZmQpKSw3NyksaCxpKX19CmZ1bmN0aW9uIFptZShhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAxMDA6cmV0dXJuIGNuZShQR2UsdHJ1ZSk7Y2FzZSA2ODpyZXR1cm4gY25lKFBHZSxmYWxzZSk7Y2FzZSAxMTk6cmV0dXJuIGNuZShRR2UsdHJ1ZSk7Y2FzZSA4NzpyZXR1cm4gY25lKFFHZSxmYWxzZSk7Y2FzZSAxMTU6cmV0dXJuIGNuZShSR2UsdHJ1ZSk7Y2FzZSA4MzpyZXR1cm4gY25lKFJHZSxmYWxzZSk7Y2FzZSA5OTpyZXR1cm4gY25lKFNHZSx0cnVlKTtjYXNlIDY3OnJldHVybiBjbmUoU0dlLGZhbHNlKTtjYXNlIDEwNTpyZXR1cm4gY25lKFRHZSx0cnVlKTtjYXNlIDczOnJldHVybiBjbmUoVEdlLGZhbHNlKTtkZWZhdWx0OnRocm93IHNjYihuZXcgcXooKGI9YSxPR2UrYi50b1N0cmluZygxNikpKSk7fX0KZnVuY3Rpb24gbFViKGEpe3ZhciBiLGMsZCxlLGY7ZT1KRChNbGIoYS5hLDApLDkpO2I9bmV3IHRZYihhKTtJbGIoYS5hLGIpO2Iuby5hPSR3bmQuTWF0aC5tYXgoMSxlLm8uYSk7Yi5vLmI9JHduZC5NYXRoLm1heCgxLGUuby5iKTtiLm4uYT1lLm4uYTtiLm4uYj1lLm4uYjtzd2l0Y2goSkQoV01iKGUsKElxYygpLFRwYykpLDY0KS5nKXtjYXNlIDQ6Yi5uLmErPTI7YnJlYWs7Y2FzZSAxOmIubi5iKz0yO2JyZWFrO2Nhc2UgMjpiLm4uYS09MjticmVhaztjYXNlIDM6Yi5uLmItPTI7fWQ9bmV3IGJaYjtfWWIoZCxiKTtjPW5ldyBrV2I7Zj1KRChNbGIoZS5qLDApLDExKTtnV2IoYyxmKTtoV2IoYyxkKTttZGQodmRkKGQubiksZi5uKTttZGQodmRkKGQuYSksZi5hKTtyZXR1cm4gYn0KZnVuY3Rpb24gV2tjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuO2U9YjtoPWM7aWYoZDwwKXtlPWM7aD1ifWY9SkQoTmliKGEuYSxlKSw1MCk7aT1KRChOaWIoYS5hLGgpLDUwKTtnPUpEKE5pYihhLmQsZSksNTApO2o9SkQoTmliKGEuZCxoKSw1MCk7Zi5hLnljKGgsZik7ai5hLnljKGUsaik7Zm9yKG49aS5hLmVjKCkuSmMoKTtuLk9iKCk7KXttPUpEKG4uUGIoKSwxMSk7Zi5hLnljKG0sZik7TnJiKEpEKE5pYihhLmQsbSksNTApLGUpO3hlKEpEKE5pYihhLmQsbSksNTApLGcpfWZvcihsPWcuYS5lYygpLkpjKCk7bC5PYigpOyl7az1KRChsLlBiKCksMTEpO2ouYS55YyhrLGopO05yYihKRChOaWIoYS5hLGspLDUwKSxoKTt4ZShKRChOaWIoYS5hLGspLDUwKSxpKX19CmZ1bmN0aW9uIFRQYyhhLGIsYyl7dmFyIGQsZSxmLGcsaDtmPTA7Zm9yKGU9bmV3IENIZCgoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpKTtlLmUhPWUuaS5nYygpOyl7ZD1KRChBSGQoZSksMjcpO2c9Jyc7KCFkLm4mJihkLm49bmV3IFgwZCh6MyxkLDEsNykpLGQubikuaT09MHx8KGc9SkQobkRkKCghZC5uJiYoZC5uPW5ldyBYMGQoejMsZCwxLDcpKSxkLm4pLDApLDE1MykuYSk7aD1uZXcgZVJjKGYrKyxiLGcpO1VNYihoLGQpO1pNYihoLCh0VWMoKSxrVWMpLGQpO2guZS5iPWQuaitkLmYvMjtoLmYuYT0kd25kLk1hdGgubWF4KGQuZywxKTtoLmUuYT1kLmkrZC5nLzI7aC5mLmI9JHduZC5NYXRoLm1heChkLmYsMSk7QXRiKGIuYixoKTtnc2IoYy5mLGQsaCl9fQpmdW5jdGlvbiBCQShhLGIsYyl7dmFyIGQsZSxmLGc7aWYoYlswXT49YS5sZW5ndGgpe2Mubz0wO3JldHVybiB0cnVlfXN3aXRjaChfZmIoYSxiWzBdKSl7Y2FzZSA0MzplPTE7YnJlYWs7Y2FzZSA0NTplPS0xO2JyZWFrO2RlZmF1bHQ6Yy5vPTA7cmV0dXJuIHRydWU7fSsrYlswXTtmPWJbMF07Zz16QShhLGIpO2lmKGc9PTAmJmJbMF09PWYpe3JldHVybiBmYWxzZX1pZihiWzBdPGEubGVuZ3RoJiZfZmIoYSxiWzBdKT09NTgpe2Q9Zyo2MDsrK2JbMF07Zj1iWzBdO2c9ekEoYSxiKTtpZihnPT0wJiZiWzBdPT1mKXtyZXR1cm4gZmFsc2V9ZCs9Z31lbHNle2Q9ZztkPDI0JiZiWzBdLWY8PTI/KGQqPTYwKTooZD1kJTEwMCsoZC8xMDB8MCkqNjApfWQqPWU7Yy5vPS1kO3JldHVybiB0cnVlfQpmdW5jdGlvbiBLZ2MoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqO2c9bmV3IFVsYjtmb3IoZD1uZXcgZXMoSXIoa1liKGEuYikuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7ZVdiKGMpJiZJbGIoZyxuZXcgSmdjKGMsTWdjKGEsYy5jKSxNZ2MoYSxjLmQpKSl9Zm9yKGo9KGY9KG5ldyBaamIoYS5lKSkuYS52YygpLkpjKCksbmV3IGNrYihmKSk7ai5hLk9iKCk7KXtoPShiPUpEKGouYS5QYigpLDQzKSxKRChiLmtkKCksMTEyKSk7aC5kLnA9MH1mb3IoaT0oZT0obmV3IFpqYihhLmUpKS5hLnZjKCkuSmMoKSxuZXcgY2tiKGUpKTtpLmEuT2IoKTspe2g9KGI9SkQoaS5hLlBiKCksNDMpLEpEKGIua2QoKSwxMTIpKTtoLmQucD09MCYmSWxiKGEuZCxMZ2MoYSxoKSl9fQpmdW5jdGlvbiBtTGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Zm9yKGc9bmV3IHJtYihiLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwyNSk7Zm9yKGo9bmV3IHJtYihmLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSw5KTtrPW5ldyBVbGI7aD0wO2ZvcihkPW5ldyBlcyhJcihoWWIoaSkuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7aWYoZVdiKGMpfHwhZVdiKGMpJiZjLmMuaS5jPT1jLmQuaS5jKXtjb250aW51ZX1lPUpEKFdNYihjLChCd2MoKSxQdmMpKSwxNykuYTtpZihlPmgpe2g9ZTtrLmMubGVuZ3RoPTB9ZT09aCYmSWxiKGssbmV3IHhvZChjLmMuaSxjKSl9cG5iKCk7U2xiKGssYS5jKTtIbGIoYS5iLGkucCxrKX19fQpmdW5jdGlvbiBuTGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Zm9yKGc9bmV3IHJtYihiLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwyNSk7Zm9yKGo9bmV3IHJtYihmLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSw5KTtrPW5ldyBVbGI7aD0wO2ZvcihkPW5ldyBlcyhJcihrWWIoaSkuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7aWYoZVdiKGMpfHwhZVdiKGMpJiZjLmMuaS5jPT1jLmQuaS5jKXtjb250aW51ZX1lPUpEKFdNYihjLChCd2MoKSxQdmMpKSwxNykuYTtpZihlPmgpe2g9ZTtrLmMubGVuZ3RoPTB9ZT09aCYmSWxiKGssbmV3IHhvZChjLmQuaSxjKSl9cG5iKCk7U2xiKGssYS5jKTtIbGIoYS5mLGkucCxrKX19fQpmdW5jdGlvbiBxJGIoYSl7dmFyIGIsYyxkLGUsZixnLGg7Zj1veGQoYSk7Zm9yKGU9bmV3IENIZCgoIWEuZSYmKGEuZT1uZXcgcmVlKHgzLGEsNyw0KSksYS5lKSk7ZS5lIT1lLmkuZ2MoKTspe2Q9SkQoQUhkKGUpLDg1KTtoPV9CZChKRChuRGQoKCFkLmMmJihkLmM9bmV3IHJlZSh2MyxkLDUsOCkpLGQuYyksMCksODQpKTtpZigha0NkKGgsZikpe3JldHVybiB0cnVlfX1mb3IoYz1uZXcgQ0hkKCghYS5kJiYoYS5kPW5ldyByZWUoeDMsYSw4LDUpKSxhLmQpKTtjLmUhPWMuaS5nYygpOyl7Yj1KRChBSGQoYyksODUpO2c9X0JkKEpEKG5EZCgoIWIuYiYmKGIuYj1uZXcgcmVlKHYzLGIsNCw3KSksYi5iKSwwKSw4NCkpO2lmKCFrQ2QoZyxmKSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gWCRiKGEpe3ZhciBiLGMsZCxlLGY7ZD1KRChXTWIoYSwoSXFjKCksa3FjKSksMjcpO2Y9SkQoa3NkKGQsKEJ3YygpLG92YykpLDE4MSkuR2MoKHlrZCgpLHhrZCkpO2lmKCFhLmUpe2U9SkQoV01iKGEsV3BjKSwyMik7Yj1uZXcgRWRkKGEuZi5hK2EuZC5iK2EuZC5jLGEuZi5iK2EuZC5kK2EuZC5hKTtpZihlLkdjKCgkb2MoKSxUb2MpKSl7bXNkKGQsRXZjLChhamQoKSxYaWQpKTttbmQoZCxiLmEsYi5iLGZhbHNlLHRydWUpfWVsc2V7eWRiKExEKGtzZChkLHB2YykpKXx8bW5kKGQsYi5hLGIuYix0cnVlLHRydWUpfX1mP21zZChkLG92YyxtcmIoeGtkKSk6bXNkKGQsb3ZjLChjPUpEKGRlYih6MiksMTApLG5ldyB1cmIoYyxKRChWQ2IoYyxjLmxlbmd0aCksMTApLDApKSl9CmZ1bmN0aW9uIEtQYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aj1MRChXTWIoYiwoa1ZjKCksYVZjKSkpO2lmKGo9PW51bGx8fCh0RGIoaiksaikpe0hQYyhhLGIpO2U9bmV3IFVsYjtmb3IoaT1HdGIoYi5iLDApO2kuYiE9aS5kLmM7KXtnPUpEKFV0YihpKSwzOSk7Yz1HUGMoYSxnLG51bGwpO2lmKGMpe1VNYihjLGIpO1lDYihlLmMsYyl9fWEuYT1udWxsO2EuYj1udWxsO2lmKGUuYy5sZW5ndGg+MSl7Zm9yKGQ9bmV3IHJtYihlKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMTIwKTtmPTA7Zm9yKGg9R3RiKGMuYiwwKTtoLmIhPWguZC5jOyl7Zz1KRChVdGIoaCksMzkpO2cuZz1mKyt9fX1yZXR1cm4gZX1yZXR1cm4gX3UoV0MoT0MoS1osMSksb3VlLDEyMCwwLFtiXSkpfQpmdW5jdGlvbiBmMmIoYSxiKXt2YXIgYyxkLGUsZixnLGg7Zm9yKGU9bmV3IHJtYihiLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSw5KTtmPVdNYihkLChJcWMoKSxrcWMpKTtpZihSRChmLDExKSl7Zz1KRChmLDExKTtoPXRYYihiLGQsZy5vLmEsZy5vLmIpO2cubi5hPWguYTtnLm4uYj1oLmI7YVpiKGcsSkQoV01iKGQsVHBjKSw2NCkpfX1jPW5ldyBFZGQoYi5mLmErYi5kLmIrYi5kLmMsYi5mLmIrYi5kLmQrYi5kLmEpO2lmKEpEKFdNYihiLChJcWMoKSxXcGMpKSwyMikuR2MoKCRvYygpLFRvYykpKXtaTWIoYSwoQndjKCksRXZjKSwoYWpkKCksWGlkKSk7SkQoV01iKGdZYihhKSxXcGMpLDIyKS5FYyhXb2MpO0JYYihhLGMsZmFsc2UpfWVsc2V7QlhiKGEsYyx0cnVlKX19CmZ1bmN0aW9uIEdqYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2k9bmV3IFJkZDtiPUd0YihhLDApO2g9bnVsbDtjPUpEKFV0YihiKSw4KTtlPUpEKFV0YihiKSw4KTt3aGlsZShiLmIhPWIuZC5jKXtoPWM7Yz1lO2U9SkQoVXRiKGIpLDgpO2Y9SGpjKEJkZChuZXcgRWRkKGguYSxoLmIpLGMpKTtnPUhqYyhCZGQobmV3IEVkZChlLmEsZS5iKSxjKSk7ZD0xMDtkPSR3bmQuTWF0aC5taW4oZCwkd25kLk1hdGguYWJzKGYuYStmLmIpLzIpO2Q9JHduZC5NYXRoLm1pbihkLCR3bmQuTWF0aC5hYnMoZy5hK2cuYikvMik7Zi5hPUNmYihmLmEpKmQ7Zi5iPUNmYihmLmIpKmQ7Zy5hPUNmYihnLmEpKmQ7Zy5iPUNmYihnLmIpKmQ7QXRiKGksbWRkKGYsYykpO0F0YihpLG1kZChnLGMpKX1yZXR1cm4gaX0KZnVuY3Rpb24gekVjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7Yy5TZygnTWluaW1pemUgQ3Jvc3NpbmdzICcrYS5hLDEpO2Q9Yi5iLmMubGVuZ3RoPT0wfHwhUEJiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmIsMTYpKSxuZXcgRHpiKG5ldyAkRWMpKSkuemQoKHdCYigpLHZCYikpO2k9Yi5iLmMubGVuZ3RoPT0xJiZKRChNbGIoYi5iLDApLDI1KS5hLmMubGVuZ3RoPT0xO2Y9WEQoV01iKGIsKEJ3YygpLEl1YykpKT09PVhEKChlaWQoKSxiaWQpKTtpZihkfHxpJiYhZil7Yy5UZygpO3JldHVybn1lPXVFYyhhLGIpO2c9KGg9SkQoZnUoZSwwKSwyMTcpLGguYy5pZygpP2guYy5jZygpP25ldyBORWMoYSk6bmV3IFBFYyhhKTpuZXcgTEVjKGEpKTt2RWMoZSxnKTtIRWMoYSk7Yy5UZygpfQpmdW5jdGlvbiBicWQoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtnPWEuTGgoKTtpPWEuRmgoKTtlPW51bGw7aWYoaSl7aWYoISFiJiYoUHFkKGEsYixjKS5CYiZQc2UpPT0wKXtkPVFHZChpLkJsKCksYSxkKTthLl9oKG51bGwpO2U9Yi5NaCgpfWVsc2V7aT1udWxsfX1lbHNleyEhZyYmKGk9Zy5NaCgpKTshIWImJihlPWIuTWgoKSl9aSE9ZSYmISFpJiZpLkZsKGEpO2g9YS5CaCgpO2EueGgoYixjKTtpIT1lJiYhIWUmJmUuRWwoYSk7aWYoYS5yaCgpJiZhLnNoKCkpe2lmKCEhZyYmaD49MCYmaCE9Yyl7Zj1uZXcgZ19kKGEsMSxoLGcsbnVsbCk7IWQ/KGQ9Zik6ZC5raihmKX1pZihjPj0wKXtmPW5ldyBnX2QoYSwxLGMsaD09Yz9nOm51bGwsYik7IWQ/KGQ9Zik6ZC5raihmKX19cmV0dXJuIGR9CmZ1bmN0aW9uIEVOZChhKXt2YXIgYixjLGQ7aWYoYS5iPT1udWxsKXtkPW5ldyBIZ2I7aWYoYS5pIT1udWxsKXtFZ2IoZCxhLmkpO2QuYSs9JzonfWlmKChhLmYmMjU2KSE9MCl7aWYoKGEuZiYyNTYpIT0wJiZhLmEhPW51bGwpe1JOZChhLmkpfHwoZC5hKz0nLy8nLGQpO0VnYihkLGEuYSl9aWYoYS5kIT1udWxsKXtkLmErPScvJztFZ2IoZCxhLmQpfShhLmYmMTYpIT0wJiYoZC5hKz0nLycsZCk7Zm9yKGI9MCxjPWEuai5sZW5ndGg7YjxjO2IrKyl7YiE9MCYmKGQuYSs9Jy8nLGQpO0VnYihkLGEualtiXSl9aWYoYS5nIT1udWxsKXtkLmErPSc/JztFZ2IoZCxhLmcpfX1lbHNle0VnYihkLGEuYSl9aWYoYS5lIT1udWxsKXtkLmErPScjJztFZ2IoZCxhLmUpfWEuYj1kLmF9cmV0dXJuIGEuYn0KZnVuY3Rpb24gUzhiKGEsYixjLGQsZSl7dmFyIGYsZyxoLGk7Zj1uZXcgdFliKGEpO3JZYihmLChEWWIoKSxCWWIpKTtaTWIoZiwoQndjKCksRXZjKSwoYWpkKCksWGlkKSk7Wk1iKGYsKElxYygpLGtxYyksYi5jLmkpO2c9bmV3IGJaYjtaTWIoZyxrcWMsYi5jKTthWmIoZyxlKTtfWWIoZyxmKTtaTWIoYi5jLHNxYyxmKTtoPW5ldyB0WWIoYSk7clliKGgsQlliKTtaTWIoaCxFdmMsWGlkKTtaTWIoaCxrcWMsYi5kLmkpO2k9bmV3IGJaYjtaTWIoaSxrcWMsYi5kKTthWmIoaSxlKTtfWWIoaSxoKTtaTWIoYi5kLHNxYyxoKTtnV2IoYixnKTtoV2IoYixpKTt2RGIoMCxjLmMubGVuZ3RoKTtXQ2IoYy5jLDAsZik7WUNiKGQuYyxoKTtaTWIoZixLcGMsamZiKDEpKTtaTWIoaCxLcGMsamZiKDEpKX0KZnVuY3Rpb24gQW8oYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtpPVBjYihGY2IoeXJlLGhmYihQY2IoRmNiKGI9PW51bGw/MDp0YihiKSx6cmUpKSwxNSkpKTtlPVBjYihGY2IoeXJlLGhmYihQY2IoRmNiKGM9PW51bGw/MDp0YihjKSx6cmUpKSwxNSkpKTtoPURvKGEsYixpKTtnPUNvKGEsYyxlKTtpZighIWgmJmU9PWguYSYmSGIoYyxoLmcpKXtyZXR1cm4gY31lbHNlIGlmKCEhZyYmIWQpe3Rocm93IHNjYihuZXcgVGViKCdrZXkgYWxyZWFkeSBwcmVzZW50OiAnK2MpKX0hIWgmJnVvKGEsaCk7ISFnJiZ1byhhLGcpO2Y9bmV3IGdwKGMsZSxiLGkpO3hvKGEsZixnKTtpZihnKXtnLmU9bnVsbDtnLmM9bnVsbH1pZihoKXtoLmU9bnVsbDtoLmM9bnVsbH1CbyhhKTtyZXR1cm4gIWg/bnVsbDpoLmd9CmZ1bmN0aW9uIEtpYihhLGIsYyl7dmFyIGQsZSxmLGcsaDtmb3IoZj0wO2Y8YjtmKyspe2Q9MDtmb3IoaD1mKzE7aDxiO2grKyl7ZD10Y2IodGNiKEZjYih1Y2IoYVtmXSxVc2UpLHVjYihhW2hdLFVzZSkpLHVjYihjW2YraF0sVXNlKSksdWNiKFBjYihkKSxVc2UpKTtjW2YraF09UGNiKGQpO2Q9TGNiKGQsMzIpfWNbZitiXT1QY2IoZCl9amliKGMsYyxiPDwxKTtkPTA7Zm9yKGU9MCxnPTA7ZTxiOysrZSxnKyspe2Q9dGNiKHRjYihGY2IodWNiKGFbZV0sVXNlKSx1Y2IoYVtlXSxVc2UpKSx1Y2IoY1tnXSxVc2UpKSx1Y2IoUGNiKGQpLFVzZSkpO2NbZ109UGNiKGQpO2Q9TGNiKGQsMzIpOysrZztkPXRjYihkLHVjYihjW2ddLFVzZSkpO2NbZ109UGNiKGQpO2Q9TGNiKGQsMzIpfXJldHVybiBjfQpmdW5jdGlvbiBBSWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7aWYoY3IoYikpe3JldHVybn1pPUJlYihNRChremMoYy5jLChCd2MoKSxpd2MpKSkpO2o9SkQoa3pjKGMuYyxod2MpLDEzOSk7IWomJihqPW5ldyBaWGIpO2Q9Yy5hO2U9bnVsbDtmb3IoaD1iLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMTEpO2s9MDtpZighZSl7az1qLmR9ZWxzZXtrPWk7ays9ZS5vLmJ9Zj1wR2IocUdiKG5ldyByR2IsZyksYS5mKTtRaWIoYS5rLGcsZik7REZiKEdGYihGRmIoRUZiKEhGYihuZXcgSUZiLDApLFlEKCR3bmQuTWF0aC5jZWlsKGspKSksZCksZikpO2U9ZztkPWZ9REZiKEdGYihGRmIoRUZiKEhGYihuZXcgSUZiLDApLFlEKCR3bmQuTWF0aC5jZWlsKGouYStlLm8uYikpKSxkKSxjLmQpKX0KZnVuY3Rpb24gWjJjKGEsYixjLGQsZSxmLGcsaCl7dmFyIGksaixrLGwsbSxuO249ZmFsc2U7bT1mLWMucztrPWMudC1iLmYrKGo9ZzRjKGMsbSxmYWxzZSksai5hKTtpZihkLmcraD5tKXtyZXR1cm4gZmFsc2V9bD0oaT1nNGMoZCxtLGZhbHNlKSxpLmEpO2lmKGsraCtsPD1iLmIpe2U0YyhjLGYtYy5zKTtjLmM9dHJ1ZTtlNGMoZCxmLWMucyk7aTRjKGQsYy5zLGMudCtjLmQraCk7ZC5rPXRydWU7cTRjKGMucSxkKTtuPXRydWU7aWYoZSl7UzRjKGIsZCk7ZC5qPWI7aWYoYS5jLmxlbmd0aD5nKXtWNGMoKHNEYihnLGEuYy5sZW5ndGgpLEpEKGEuY1tnXSwxODYpKSxkKTsoc0RiKGcsYS5jLmxlbmd0aCksSkQoYS5jW2ddLDE4NikpLmEuYy5sZW5ndGg9PTAmJk9sYihhLGcpfX19cmV0dXJuIG59CmZ1bmN0aW9uIGM5YihhLGIpe3ZhciBjLGQsZSxmLGcsaDtiLlNnKCdQYXJ0aXRpb24gbWlkcHJvY2Vzc2luZycsMSk7ZT1uZXcgUHA7RUJiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLmEsMTYpKSxuZXcgZzliKSxuZXcgaTliKGUpKTtpZihlLmQ9PTApe3JldHVybn1oPUpEKHlCYihOQmIoKGY9ZS5pLG5ldyBSQmIobnVsbCwoIWY/KGUuaT1uZXcgeGYoZSxlLmMpKTpmKS5MYygpKSkpLGhBYihuZXcgekFiLG5ldyB4QWIsbmV3IEZBYixXQyhPQyhITCwxKSxFcmUsMTMxLDAsWyhsQWIoKSxqQWIpXSkpKSwxNSk7ZD1oLkpjKCk7Yz1KRChkLlBiKCksMTcpO3doaWxlKGQuT2IoKSl7Zz1KRChkLlBiKCksMTcpO2I5YihKRChRYyhlLGMpLDIyKSxKRChRYyhlLGcpLDIyKSk7Yz1nfWIuVGcoKX0KZnVuY3Rpb24gRnVkKGEsYil7dmFyIGMsZCxlLGYsZztpZihhLkFiKXtpZihhLkFiKXtnPWEuQWIuaTtpZihnPjApe2U9SkQoYS5BYi5nLDE5NzkpO2lmKGI9PW51bGwpe2ZvcihmPTA7ZjxnOysrZil7Yz1lW2ZdO2lmKGMuZD09bnVsbCl7cmV0dXJuIGN9fX1lbHNle2ZvcihmPTA7ZjxnOysrZil7Yz1lW2ZdO2lmKGNnYihiLGMuZCkpe3JldHVybiBjfX19fX1lbHNle2lmKGI9PW51bGwpe2ZvcihkPW5ldyBDSGQoYS5BYik7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoQUhkKGQpLDU4Mik7aWYoYy5kPT1udWxsKXtyZXR1cm4gY319fWVsc2V7Zm9yKGQ9bmV3IENIZChhLkFiKTtkLmUhPWQuaS5nYygpOyl7Yz1KRChBSGQoZCksNTgyKTtpZihjZ2IoYixjLmQpKXtyZXR1cm4gY319fX19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIEZ5ZChhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixwLHEscixzLHQsdSx2O249Z3pkKGEsZENkKGIpLGUpO2x1ZChuLGJ5ZChlLHZEZSkpO289bnVsbDtwPWU7cT1heWQocCx5RGUpO3I9bmV3IFh6ZChuKTtLeWQoci5hLHEpO3M9YXlkKHAsJ2VuZFBvaW50Jyk7dD1uZXcgZEFkKG4pO015ZCh0LmEscyk7dT0keGQocCxvRGUpO3Y9bmV3IGpBZChuKTtOeWQodi5hLHUpO2w9YnlkKGUscURlKTtmPW5ldyBQemQoYSxuKTtHeWQoZi5hLGYuYixsKTttPWJ5ZChlLHBEZSk7Zz1uZXcgUnpkKGEsbik7SHlkKGcuYSxnLmIsbSk7aj0keGQoZSxzRGUpO2g9bmV3IFR6ZChjLG4pO0l5ZChoLmIsaC5hLGopO2s9JHhkKGUsckRlKTtpPW5ldyBWemQoZCxuKTtKeWQoaS5iLGkuYSxrKX0KZnVuY3Rpb24gUVViKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO2lmKGIucD09MCl7Yi5wPTE7Zz1jO2lmKCFnKXtlPW5ldyBVbGI7Zj0oZD1KRChkZWIodjIpLDEwKSxuZXcgdXJiKGQsSkQoVkNiKGQsZC5sZW5ndGgpLDEwKSwwKSk7Zz1uZXcgeG9kKGUsZil9SkQoZy5hLDE1KS5FYyhiKTtiLms9PShEWWIoKSx3WWIpJiZKRChnLmIsMjIpLkVjKEpEKFdNYihiLChJcWMoKSxUcGMpKSw2NCkpO2ZvcihpPW5ldyBybWIoYi5qKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMTEpO2ZvcihrPURsKHlsKFdDKE9DKFZJLDEpLE5xZSwyMCwwLFtuZXcgZFpiKGgpLG5ldyBsWmIoaCldKSkpO2NzKGspOyl7aj1KRChkcyhrKSwxMSk7UVViKGEsai5pLGcpfX1yZXR1cm4gZ31yZXR1cm4gbnVsbH0KZnVuY3Rpb24gQVhiKGEsYixjKXt2YXIgZCxlLGYsZyxoO2g9bnVsbDtzd2l0Y2goYi5nKXtjYXNlIDE6Zm9yKGU9bmV3IHJtYihhLmopO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxMSk7aWYoeWRiKExEKFdNYihkLChJcWMoKSxZcGMpKSkpKXtyZXR1cm4gZH19aD1uZXcgYlpiO1pNYihoLChJcWMoKSxZcGMpLCh4ZGIoKSx0cnVlKSk7YnJlYWs7Y2FzZSAyOmZvcihnPW5ldyBybWIoYS5qKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTEpO2lmKHlkYihMRChXTWIoZiwoSXFjKCkscXFjKSkpKSl7cmV0dXJuIGZ9fWg9bmV3IGJaYjtaTWIoaCwoSXFjKCkscXFjKSwoeGRiKCksdHJ1ZSkpO31pZihoKXtfWWIoaCxhKTthWmIoaCxjKTtuWGIoaC5uLGEubyxjKX1yZXR1cm4gaH0KZnVuY3Rpb24gcDBiKGEsYil7dmFyIGMsZCxlLGYsZyxoO2g9LTE7Zz1uZXcgTXRiO2ZvcihkPW5ldyB4WmIoYS5iKTtvbWIoZC5hKXx8b21iKGQuYik7KXtjPUpEKG9tYihkLmEpP3BtYihkLmEpOnBtYihkLmIpLDE4KTtoPSR3bmQuTWF0aC5tYXgoaCxCZWIoTUQoV01iKGMsKEJ3YygpLEZ1YykpKSkpO2MuYz09YT9FQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGMuYiwxNikpLG5ldyB2MGIpLG5ldyB4MGIoZykpOkVCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYy5iLDE2KSksbmV3IHowYiksbmV3IEIwYihnKSk7Zm9yKGY9R3RiKGcsMCk7Zi5iIT1mLmQuYzspe2U9SkQoVXRiKGYpLDcyKTtYTWIoZSwoSXFjKCksUHBjKSl8fFpNYihlLFBwYyxjKX1LbGIoYixnKTtMdGIoZyl9cmV0dXJuIGh9CmZ1bmN0aW9uIGNPYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGo7aD1lP2QuYjpkLmE7aWYoT3JiKGEuYSxkKSl7cmV0dXJufWo9aD5jLnMmJmg8Yy5jO2k9ZmFsc2U7aWYoYy5lLmIhPTAmJmMuai5iIT0wKXtpPWl8KCR3bmQuTWF0aC5hYnMoaC1CZWIoTUQoRXRiKGMuZSkpKSk8RnVlJiYkd25kLk1hdGguYWJzKGgtQmViKE1EKEV0YihjLmopKSkpPEZ1ZSk7aT1pfCgkd25kLk1hdGguYWJzKGgtQmViKE1EKEZ0YihjLmUpKSkpPEZ1ZSYmJHduZC5NYXRoLmFicyhoLUJlYihNRChGdGIoYy5qKSkpKTxGdWUpfWlmKGp8fGkpe2c9SkQoV01iKGIsKEJ3YygpLFJ1YykpLDc3KTtpZighZyl7Zz1uZXcgUmRkO1pNYihiLFJ1YyxnKX1mPW5ldyBGZGQoZCk7RHRiKGcsZixnLmMuYixnLmMpO05yYihhLmEsZil9fQpmdW5jdGlvbiBCVGMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtjLlNnKCdQcm9jZXNzb3Igc2V0IGNvb3JkaW5hdGVzJywxKTthLmE9Yi5iLmI9PTA/MTpiLmIuYjtqPW51bGw7ZD1HdGIoYi5iLDApO3doaWxlKCFqJiZkLmIhPWQuZC5jKXtsPUpEKFV0YihkKSwzOSk7aWYoeWRiKExEKFdNYihsLCh0VWMoKSxxVWMpKSkpKXtqPWw7aT1sLmU7aS5hPUpEKFdNYihsLHJVYyksMTcpLmE7aS5iPUpEKFdNYihsLHNVYyksMTcpLmF9fWg9YlJjKGopO2s9MTtkb3toPUNUYygoZT1oLGMuYmgoayksZSkpO2s9aC5iL2EuYXwwfXdoaWxlKGguYiE9MCk7Zm9yKGc9R3RiKGIuYiwwKTtnLmIhPWcuZC5jOyl7Zj1KRChVdGIoZyksMzkpO0JkZChmLmUsbmV3IEVkZChmLmYuYS8yLGYuZi5iLzIpKX1jLlRnKCl9CmZ1bmN0aW9uIFNIYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7Yz1mYWxzZTtrPUJlYihNRChXTWIoYiwoQndjKCksZXdjKSkpKTtvPUtyZSprO2ZvcihlPW5ldyBybWIoYi5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjUpO2o9bmV3IHJtYihkLmEpO2Y9SkQocG1iKGopLDkpO2w9JEhjKGEuYVtmLnBdKTt3aGlsZShqLmE8ai5jLmMubGVuZ3RoKXtoPUpEKHBtYihqKSw5KTttPSRIYyhhLmFbaC5wXSk7aWYobCE9bSl7bj1lemMoYS5iLGYsaCk7Zz1mLm4uYitmLm8uYitmLmQuYStsLmErbjtpPWgubi5iLWguZC5kK20uYTtpZihnPmkrbyl7cD1sLmcrbS5nO20uYT0obS5nKm0uYStsLmcqbC5hKS9wO20uZz1wO2wuZj1tO2M9dHJ1ZX19Zj1oO2w9bX19cmV0dXJuIGN9CmZ1bmN0aW9uIHhTYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztjLlNnKEh6ZSwxKTtUaWIoYS5iKTtUaWIoYS5hKTtoPW51bGw7Zj1HdGIoYi5iLDApO3doaWxlKCFoJiZmLmIhPWYuZC5jKXtqPUpEKFV0YihmKSwzOSk7eWRiKExEKFdNYihqLCh0VWMoKSxxVWMpKSkpJiYoaD1qKX1pPW5ldyBNdGI7RHRiKGksaCxpLmMuYixpLmMpO3dTYyhhLGkpO2ZvcihrPUd0YihiLmIsMCk7ay5iIT1rLmQuYzspe2o9SkQoVXRiKGspLDM5KTtnPU9EKFdNYihqLCh0VWMoKSxkVWMpKSk7ZT1PaWIoYS5iLGcpIT1udWxsP0pEKE9pYihhLmIsZyksMTcpLmE6MDtaTWIoaiwkVGMsamZiKGUpKTtkPTErKE9pYihhLmEsZykhPW51bGw/SkQoT2liKGEuYSxnKSwxNykuYTowKTtaTWIoaixZVGMsamZiKGQpKX1jLlRnKCl9CmZ1bmN0aW9uIHZlZChhKXtSYWQoYSxuZXcgY2FkKG5hZChrYWQobWFkKGxhZChuZXcgcGFkLElCZSksJ0VMSyBCb3gnKSwnQWxnb3JpdGhtIGZvciBwYWNraW5nIG9mIHVuY29ubmVjdGVkIGJveGVzLCBpLmUuIGdyYXBocyB3aXRob3V0IGVkZ2VzLicpLG5ldyB5ZWQpKSk7UGFkKGEsSUJlLFJ1ZSxyZWQpO1BhZChhLElCZSxNdWUsMTUpO1BhZChhLElCZSxMdWUsamZiKDApKTtQYWQoYSxJQmUsSkJlLEpCZChsZWQpKTtQYWQoYSxJQmUsWXVlLEpCZChuZWQpKTtQYWQoYSxJQmUsWHVlLEpCZChwZWQpKTtQYWQoYSxJQmUsT3VlLEhCZSk7UGFkKGEsSUJlLFN1ZSxKQmQobWVkKSk7UGFkKGEsSUJlLHB2ZSxKQmQob2VkKSk7UGFkKGEsSUJlLEtCZSxKQmQoamVkKSk7UGFkKGEsSUJlLFF5ZSxKQmQoa2VkKSl9CmZ1bmN0aW9uIG1YYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztlPWEuaTtnPWUuby5hO2Y9ZS5vLmI7aWYoZzw9MCYmZjw9MCl7cmV0dXJuIFJqZCgpLFBqZH1qPWEubi5hO2s9YS5uLmI7aD1hLm8uYTtjPWEuby5iO3N3aXRjaChiLmcpe2Nhc2UgMjpjYXNlIDE6aWYoajwwKXtyZXR1cm4gUmpkKCksUWpkfWVsc2UgaWYoaitoPmcpe3JldHVybiBSamQoKSx3amR9YnJlYWs7Y2FzZSA0OmNhc2UgMzppZihrPDApe3JldHVybiBSamQoKSx4amR9ZWxzZSBpZihrK2M+Zil7cmV0dXJuIFJqZCgpLE9qZH19aT0oaitoLzIpL2c7ZD0oaytjLzIpL2Y7cmV0dXJuIGkrZDw9MSYmaS1kPD0wPyhSamQoKSxRamQpOmkrZD49MSYmaS1kPj0wPyhSamQoKSx3amQpOmQ8MC41PyhSamQoKSx4amQpOihSamQoKSxPamQpfQpmdW5jdGlvbiBYR2IoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbCxtO209bmV3IGZkZDtmb3Ioaj1iLkpjKCk7ai5PYigpOyl7aD1KRChqLlBiKCksODMyKTtmb3IobD1uZXcgcm1iKGguUGYoKSk7bC5hPGwuYy5jLmxlbmd0aDspe2s9SkQocG1iKGwpLDE4Nyk7aWYoWEQoay5tZigoTGdkKCksYmZkKSkpPT09WEQoKG5oZCgpLG1oZCkpKXtVR2IobSxrLGZhbHNlLGQsZSxmLGcpO2VkZChhLG0pfX19Zm9yKGk9Yy5KYygpO2kuT2IoKTspe2g9SkQoaS5QYigpLDgzMik7Zm9yKGw9bmV3IHJtYihoLlBmKCkpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihsKSwxODcpO2lmKFhEKGsubWYoKExnZCgpLGJmZCkpKT09PVhEKChuaGQoKSxsaGQpKSl7VUdiKG0sayx0cnVlLGQsZSxmLGcpO2VkZChhLG0pfX19fQpmdW5jdGlvbiBTUGMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqO2ZvcihnPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7Zy5lIT1nLmkuZ2MoKTspe2Y9SkQoQUhkKGcpLDI3KTtmb3IoZT1uZXcgZXMoSXIoJEJkKGYpLmEuSmMoKSxuZXcgZXIpKTtjcyhlKTspe2Q9SkQoZHMoZSksODUpO2lmKCFSdGQoZCkmJiFSdGQoZCkmJiFTdGQoZCkpe2k9SkQoV2QoZnNiKGMuZixmKSksMzkpO2o9SkQoTmliKGMsX0JkKEpEKG5EZCgoIWQuYyYmKGQuYz1uZXcgcmVlKHYzLGQsNSw4KSksZC5jKSwwKSw4NCkpKSwzOSk7aWYoISFpJiYhIWope2g9bmV3IFpRYyhpLGopO1pNYihoLCh0VWMoKSxrVWMpLGQpO1VNYihoLGQpO0F0YihpLmQsaCk7QXRiKGouYixoKTtBdGIoYi5hLGgpfX19fX0KZnVuY3Rpb24gU0tiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtmb3IoaT1KRChKRChRYyhhLnIsYiksMjIpLDgzKS5KYygpO2kuT2IoKTspe2g9SkQoaS5QYigpLDExNSk7ZT1oLmM/JEhiKGguYyk6MDtpZihlPjApe2lmKGguYSl7aj1oLmIuS2YoKS5iO2lmKGU+ail7aWYoYS52fHxoLmMuZC5jLmxlbmd0aD09MSl7Zz0oZS1qKS8yO2guZC5kPWc7aC5kLmE9Z31lbHNle2M9SkQoTWxiKGguYy5kLDApLDE4NykuS2YoKS5iO2Q9KGMtaikvMjtoLmQuZD0kd25kLk1hdGgubWF4KDAsZCk7aC5kLmE9ZS1kLWp9fX1lbHNle2guZC5hPWEudCtlfX1lbHNlIGlmKHFqZChhLnUpKXtmPWVuZChoLmIpO2YuZDwwJiYoaC5kLmQ9LWYuZCk7Zi5kK2YuYT5oLmIuS2YoKS5iJiYoaC5kLmE9Zi5kK2YuYS1oLmIuS2YoKS5iKX19fQpmdW5jdGlvbiBJT2IoKXtJT2I9WmNiO3ZPYj1uZXcgTkJkKChMZ2QoKSxnZ2QpLGpmYigxKSk7Qk9iPW5ldyBOQmQod2dkLDgwKTtBT2I9bmV3IE5CZChwZ2QsNSk7aE9iPW5ldyBOQmQoUWVkLEp1ZSk7d09iPW5ldyBOQmQoaGdkLGpmYigxKSk7ek9iPW5ldyBOQmQoa2dkLCh4ZGIoKSx0cnVlKSk7c09iPW5ldyBNWWIoNTApO3JPYj1uZXcgTkJkKEtmZCxzT2IpO2pPYj1uZmQ7dE9iPVlmZDtpT2I9bmV3IE5CZChhZmQsZmFsc2UpO3FPYj1KZmQ7b09iPURmZDtwT2I9R2ZkO25PYj1CZmQ7bU9iPXpmZDt1T2I9YWdkO2xPYj0oWU5iKCksUk5iKTtDT2I9V05iO2tPYj1RTmI7eE9iPVROYjt5T2I9Vk5iO0ZPYj1EZ2Q7SE9iPUhnZDtFT2I9Q2dkO0RPYj1CZ2Q7R09iPShXa2QoKSxUa2QpO25ldyBOQmQoRWdkLEdPYil9CmZ1bmN0aW9uIE5DKGEsYil7dmFyIGM7c3dpdGNoKFBDKGEpKXtjYXNlIDY6cmV0dXJuIFZEKGIpO2Nhc2UgNzpyZXR1cm4gVEQoYik7Y2FzZSA4OnJldHVybiBTRChiKTtjYXNlIDM6cmV0dXJuIEFycmF5LmlzQXJyYXkoYikmJihjPVBDKGIpLCEoYz49MTQmJmM8PTE2KSk7Y2FzZSAxMTpyZXR1cm4gYiE9bnVsbCYmdHlwZW9mIGI9PT1HcWU7Y2FzZSAxMjpyZXR1cm4gYiE9bnVsbCYmKHR5cGVvZiBiPT09Q3FlfHx0eXBlb2YgYj09R3FlKTtjYXNlIDA6cmV0dXJuIElEKGIsYS5fX2VsZW1lbnRUeXBlSWQkKTtjYXNlIDI6cmV0dXJuIFdEKGIpJiYhKGIuUW09PT1iZGIpO2Nhc2UgMTpyZXR1cm4gV0QoYikmJiEoYi5RbT09PWJkYil8fElEKGIsYS5fX2VsZW1lbnRUeXBlSWQkKTtkZWZhdWx0OnJldHVybiB0cnVlO319CmZ1bmN0aW9uIHJLYihhKXt2YXIgYixjLGQsZTtkPWEubzthS2IoKTtpZihhLkEuZGMoKXx8cGIoYS5BLF9KYikpe2U9ZC5hfWVsc2V7YS5EPyhlPSR3bmQuTWF0aC5tYXgoZC5hLGlJYihhLmYpKSk6KGU9aUliKGEuZikpO2lmKGEuQS5HYygoeWtkKCksdmtkKSkmJiFhLkIuR2MoKE5rZCgpLEprZCkpKXtlPSR3bmQuTWF0aC5tYXgoZSxpSWIoSkQoS3FiKGEucCwoUmpkKCkseGpkKSksMjUxKSkpO2U9JHduZC5NYXRoLm1heChlLGlJYihKRChLcWIoYS5wLE9qZCksMjUxKSkpfWI9Y0tiKGEpOyEhYiYmKGU9JHduZC5NYXRoLm1heChlLGIuYSkpfXlkYihMRChhLmUuUmYoKS5tZigoTGdkKCksRGZkKSkpKT8oZC5hPSR3bmQuTWF0aC5tYXgoZC5hLGUpKTooZC5hPWUpO2M9YS5mLmk7Yy5jPTA7Yy5iPWU7akliKGEuZil9CmZ1bmN0aW9uIHdNYihhLGIpe3ZhciBjLGQsZSxmO2Q9JHduZC5NYXRoLm1pbigkd25kLk1hdGguYWJzKGEuYy0oYi5jK2IuYikpLCR3bmQuTWF0aC5hYnMoYS5jK2EuYi1iLmMpKTtmPSR3bmQuTWF0aC5taW4oJHduZC5NYXRoLmFicyhhLmQtKGIuZCtiLmEpKSwkd25kLk1hdGguYWJzKGEuZCthLmEtYi5kKSk7Yz0kd25kLk1hdGguYWJzKGEuYythLmIvMi0oYi5jK2IuYi8yKSk7aWYoYz5hLmIvMitiLmIvMil7cmV0dXJuIDF9ZT0kd25kLk1hdGguYWJzKGEuZCthLmEvMi0oYi5kK2IuYS8yKSk7aWYoZT5hLmEvMitiLmEvMil7cmV0dXJuIDF9aWYoYz09MCYmZT09MCl7cmV0dXJuIDB9aWYoYz09MCl7cmV0dXJuIGYvZSsxfWlmKGU9PTApe3JldHVybiBkL2MrMX1yZXR1cm4gJHduZC5NYXRoLm1pbihkL2MsZi9lKSsxfQpmdW5jdGlvbiB5UGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtmPTA7aD0wO2k9MDtmb3IoZT1uZXcgcm1iKGEuZi5lKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTUxKTtpZihiPT1kKXtjb250aW51ZX1nPWEuaVtiLmFdW2QuYV07Zis9ZztjPXBkZChiLmQsZC5kKTtjPjAmJmEuZCE9KEtQYigpLEpQYikmJihoKz1nKihkLmQuYSthLmFbYi5hXVtkLmFdKihiLmQuYS1kLmQuYSkvYykpO2M+MCYmYS5kIT0oS1BiKCksSFBiKSYmKGkrPWcqKGQuZC5iK2EuYVtiLmFdW2QuYV0qKGIuZC5iLWQuZC5iKS9jKSl9c3dpdGNoKGEuZC5nKXtjYXNlIDE6cmV0dXJuIG5ldyBFZGQoaC9mLGIuZC5iKTtjYXNlIDI6cmV0dXJuIG5ldyBFZGQoYi5kLmEsaS9mKTtkZWZhdWx0OnJldHVybiBuZXcgRWRkKGgvZixpL2YpO319CmZ1bmN0aW9uIGZuZChhKXt2YXIgYixjLGQsZSxmLGc7Yz0oIWEuYSYmKGEuYT1uZXcgcVZkKHUzLGEsNSkpLGEuYSkuaSsyO2c9bmV3IFZsYihjKTtJbGIoZyxuZXcgRWRkKGEuaixhLmspKTtFQmIobmV3IFJCYihudWxsLCghYS5hJiYoYS5hPW5ldyBxVmQodTMsYSw1KSksbmV3IEd2YihhLmEsMTYpKSksbmV3IENuZChnKSk7SWxiKGcsbmV3IEVkZChhLmIsYS5jKSk7Yj0xO3doaWxlKGI8Zy5jLmxlbmd0aC0xKXtkPShzRGIoYi0xLGcuYy5sZW5ndGgpLEpEKGcuY1tiLTFdLDgpKTtlPShzRGIoYixnLmMubGVuZ3RoKSxKRChnLmNbYl0sOCkpO2Y9KHNEYihiKzEsZy5jLmxlbmd0aCksSkQoZy5jW2IrMV0sOCkpO2QuYT09ZS5hJiZlLmE9PWYuYXx8ZC5iPT1lLmImJmUuYj09Zi5iP09sYihnLGIpOisrYn1yZXR1cm4gZ30KZnVuY3Rpb24gTzliKGEsYil7RzliKCk7dmFyIGMsZCxlLGYsZztnPUpEKFdNYihhLmksKEJ3YygpLEV2YykpLDEwMCk7Zj1hLmouZy1iLmouZztpZihmIT0wfHwhKGc9PShhamQoKSxXaWQpfHxnPT1ZaWR8fGc9PVhpZCkpe3JldHVybiAwfWlmKGc9PShhamQoKSxXaWQpKXtjPUpEKFdNYihhLEZ2YyksMTcpO2Q9SkQoV01iKGIsRnZjKSwxNyk7aWYoISFjJiYhIWQpe2U9Yy5hLWQuYTtpZihlIT0wKXtyZXR1cm4gZX19fXN3aXRjaChhLmouZyl7Y2FzZSAxOnJldHVybiBIZWIoYS5uLmEsYi5uLmEpO2Nhc2UgMjpyZXR1cm4gSGViKGEubi5iLGIubi5iKTtjYXNlIDM6cmV0dXJuIEhlYihiLm4uYSxhLm4uYSk7Y2FzZSA0OnJldHVybiBIZWIoYi5uLmIsYS5uLmIpO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBXZWIoSHZlKSk7fX0KZnVuY3Rpb24gUmRjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7Yz1sRWIob0ViKG1FYihuRWIobmV3IHBFYixiKSxuZXcgaGRkKGIuZSkpLHpkYyksYS5hKTtiLmouYy5sZW5ndGg9PTB8fGRFYihKRChNbGIoYi5qLDApLDYwKS5hLGMpO2k9bmV3IGJGYjtRaWIoYS5lLGMsaSk7Zz1uZXcgUXJiO2g9bmV3IFFyYjtmb3IoZj1uZXcgcm1iKGIuayk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDE4KTtOcmIoZyxlLmMpO05yYihoLGUuZCl9ZD1nLmEuZ2MoKS1oLmEuZ2MoKTtpZihkPDApe19FYihpLHRydWUsKFRnZCgpLFBnZCkpO19FYihpLGZhbHNlLFFnZCl9ZWxzZSBpZihkPjApe19FYihpLGZhbHNlLChUZ2QoKSxQZ2QpKTtfRWIoaSx0cnVlLFFnZCl9TGxiKGIuZyxuZXcgYmZjKGEsYykpO1FpYihhLmcsYixjKX0KZnVuY3Rpb24gSTFjKCl7STFjPVpjYjt6MWM9bmV3IE1CZChIQWUsKHhkYigpLGZhbHNlKSk7amZiKC0xKTtyMWM9bmV3IE1CZChJQWUsamZiKC0xKSk7amZiKC0xKTtzMWM9bmV3IE1CZChKQWUsamZiKC0xKSk7dDFjPW5ldyBNQmQoS0FlLGZhbHNlKTt1MWM9bmV3IE1CZChMQWUsZmFsc2UpO0cxYz0oTzJjKCksTTJjKTtGMWM9bmV3IE1CZChNQWUsRzFjKTtIMWM9bmV3IE1CZChOQWUsLTEpO0UxYz0obDFjKCksazFjKTtEMWM9bmV3IE1CZChPQWUsRTFjKTtDMWM9bmV3IE1CZChQQWUsdHJ1ZSk7eTFjPShxM2MoKSxuM2MpO3gxYz1uZXcgTUJkKFFBZSx5MWMpO3cxYz1uZXcgTUJkKFJBZSxmYWxzZSk7amZiKDEpO3YxYz1uZXcgTUJkKFNBZSxqZmIoMSkpO0IxYz0oUjNjKCksUDNjKTtBMWM9bmV3IE1CZChUQWUsQjFjKX0KZnVuY3Rpb24gTGZiKCl7TGZiPVpjYjt2YXIgYTtIZmI9V0MoT0MoY0UsMSksaXNlLDMwLDE1LFstMSwtMSwzMCwxOSwxNSwxMywxMSwxMSwxMCw5LDksOCw4LDgsOCw3LDcsNyw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw1XSk7SWZiPVNDKGNFLGlzZSwzMCwzNywxNSwxKTtKZmI9V0MoT0MoY0UsMSksaXNlLDMwLDE1LFstMSwtMSw2Myw0MCwzMiwyOCwyNSwyMywyMSwyMCwxOSwxOSwxOCwxOCwxNywxNywxNiwxNiwxNiwxNSwxNSwxNSwxNSwxNCwxNCwxNCwxNCwxNCwxNCwxMywxMywxMywxMywxMywxMywxMywxM10pO0tmYj1TQyhkRSxOc2UsMzAsMzcsMTQsMSk7Zm9yKGE9MjthPD0zNjthKyspe0lmYlthXT1ZRCgkd25kLk1hdGgucG93KGEsSGZiW2FdKSk7S2ZiW2FdPXhjYihtcmUsSWZiW2FdKX19CmZ1bmN0aW9uIGJuZChhKXt2YXIgYjtpZigoIWEuYSYmKGEuYT1uZXcgWDBkKHczLGEsNiw2KSksYS5hKS5pIT0xKXt0aHJvdyBzY2IobmV3IFRlYih1Q2UrKCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSkuaSkpfWI9bmV3IFJkZDshIWFDZChKRChuRGQoKCFhLmImJihhLmI9bmV3IHJlZSh2MyxhLDQsNykpLGEuYiksMCksODQpKSYmeGUoYixjbmQoYSxhQ2QoSkQobkRkKCghYS5iJiYoYS5iPW5ldyByZWUodjMsYSw0LDcpKSxhLmIpLDApLDg0KSksZmFsc2UpKTshIWFDZChKRChuRGQoKCFhLmMmJihhLmM9bmV3IHJlZSh2MyxhLDUsOCkpLGEuYyksMCksODQpKSYmeGUoYixjbmQoYSxhQ2QoSkQobkRkKCghYS5jJiYoYS5jPW5ldyByZWUodjMsYSw1LDgpKSxhLmMpLDApLDg0KSksdHJ1ZSkpO3JldHVybiBifQpmdW5jdGlvbiBDTGMoYSxiKXt2YXIgYyxkLGUsZixnO2IuZD8oZT1hLmEuYz09KHpLYygpLHlLYyk/aFliKGIuYik6a1liKGIuYikpOihlPWEuYS5jPT0oektjKCkseEtjKT9oWWIoYi5iKTprWWIoYi5iKSk7Zj1mYWxzZTtmb3IoZD1uZXcgZXMoSXIoZS5hLkpjKCksbmV3IGVyKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDE4KTtnPXlkYihhLmEuZlthLmEuZ1tiLmIucF0ucF0pO2lmKCFnJiYhZVdiKGMpJiZjLmMuaS5jPT1jLmQuaS5jKXtjb250aW51ZX1pZih5ZGIoYS5hLm5bYS5hLmdbYi5iLnBdLnBdKXx8eWRiKGEuYS5uW2EuYS5nW2IuYi5wXS5wXSkpe2NvbnRpbnVlfWY9dHJ1ZTtpZihPcmIoYS5iLGEuYS5nW3VMYyhjLGIuYikucF0pKXtiLmM9dHJ1ZTtiLmE9YztyZXR1cm4gYn19Yi5jPWY7Yi5hPW51bGw7cmV0dXJuIGJ9CmZ1bmN0aW9uIG5GZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGo7ZD1jLmdjKCk7aWYoZD09MCl7cmV0dXJuIGZhbHNlfWVsc2V7aWYoYS5NaigpKXtpPWEuTmooKTt3RWQoYSxiLGMpO2c9ZD09MT9hLkZqKDMsbnVsbCxjLkpjKCkuUGIoKSxiLGkpOmEuRmooNSxudWxsLGMsYixpKTtpZihhLkpqKCkpe2g9ZDwxMDA/bnVsbDpuZXcgRkdkKGQpO2Y9YitkO2ZvcihlPWI7ZTxmOysrZSl7aj1hLnVqKGUpO2g9YS5LaihqLGgpO2g9aH1pZighaCl7YS5HaihnKX1lbHNle2gua2ooZyk7aC5saigpfX1lbHNle2EuR2ooZyl9fWVsc2V7d0VkKGEsYixjKTtpZihhLkpqKCkpe2g9ZDwxMDA/bnVsbDpuZXcgRkdkKGQpO2Y9YitkO2ZvcihlPWI7ZTxmOysrZSl7aD1hLktqKGEudWooZSksaCl9ISFoJiZoLmxqKCl9fXJldHVybiB0cnVlfX0KZnVuY3Rpb24gdEZkKGEsYixjKXt2YXIgZCxlLGYsZyxoO2lmKGEuTWooKSl7ZT1udWxsO2Y9YS5OaigpO2Q9YS5GaigxLGg9KGc9YS5BaihiLGEuV2koYixjKSksZyksYyxiLGYpO2lmKGEuSmooKSYmIShhLlZpKCkmJiEhaD9wYihoLGMpOlhEKGgpPT09WEQoYykpKXshIWgmJihlPWEuTGooaCxlKSk7ZT1hLktqKGMsZSk7aWYoIWUpe2EuR2ooZCl9ZWxzZXtlLmtqKGQpO2UubGooKX19ZWxzZXtpZighZSl7YS5HaihkKX1lbHNle2Uua2ooZCk7ZS5saigpfX1yZXR1cm4gaH1lbHNle2g9KGc9YS5BaihiLGEuV2koYixjKSksZyk7aWYoYS5KaigpJiYhKGEuVmkoKSYmISFoP3BiKGgsYyk6WEQoaCk9PT1YRChjKSkpe2U9bnVsbDshIWgmJihlPWEuTGooaCxudWxsKSk7ZT1hLktqKGMsZSk7ISFlJiZlLmxqKCl9cmV0dXJuIGh9fQpmdW5jdGlvbiB4TmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7YS5lPWI7YS5mPUpEKFdNYihiLChUT2IoKSxTT2IpKSwyMzMpO29OYihiKTthLmQ9JHduZC5NYXRoLm1heChiLmUuYy5sZW5ndGgqMTYrYi5jLmMubGVuZ3RoLDI1Nik7aWYoIXlkYihMRChXTWIoYiwoSU9iKCksak9iKSkpKSl7az1hLmUuZS5jLmxlbmd0aDtmb3IoaT1uZXcgcm1iKGIuZSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDE1MSk7aj1oLmQ7ai5hPXd2YihhLmYpKms7ai5iPXd2YihhLmYpKmt9fWM9Yi5iO2ZvcihmPW5ldyBybWIoYi5jKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjg4KTtkPUpEKFdNYihlLHlPYiksMTcpLmE7aWYoZD4wKXtmb3IoZz0wO2c8ZDtnKyspe0lsYihjLG5ldyBlTmIoZSkpfWdOYihlKX19fQpmdW5jdGlvbiBJM2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtiLlNnKCdIeXBlcm5vZGVzIHByb2Nlc3NpbmcnLDEpO2ZvcihlPW5ldyBybWIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjUpO2ZvcihoPW5ldyBybWIoZC5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7aWYoeWRiKExEKFdNYihnLChCd2MoKSxNdWMpKSkpJiZnLmouYy5sZW5ndGg8PTIpe2w9MDtrPTA7Yz0wO2Y9MDtmb3Ioaj1uZXcgcm1iKGcuaik7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDExKTtzd2l0Y2goaS5qLmcpe2Nhc2UgMTorK2w7YnJlYWs7Y2FzZSAyOisrazticmVhaztjYXNlIDM6KytjO2JyZWFrO2Nhc2UgNDorK2Y7fX1sPT0wJiZjPT0wJiZIM2IoYSxnLGY8PWspfX19Yi5UZygpfQpmdW5jdGlvbiBrRWQoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbzttPW5ldyBHQyhhLlhnKCkpO2tDKGIsSERlLG0pO2lmKGMmJiFhLlZnKCkuYS5kYygpKXtrPW5ldyBFQjtrQyhiLCdsb2dzJyxrKTtoPTA7Zm9yKG89bmV3IEZvYihhLlZnKCkuYi5KYygpKTtvLmIuT2IoKTspe249T0Qoby5iLlBiKCkpO2w9bmV3IEdDKG4pO0JCKGssaCk7REIoayxoLGwpOysraH19aWYoZCl7aj1uZXcgX0IoYS5VZygpKTtrQyhiLCdleGVjdXRpb25UaW1lJyxqKX1pZighYS5XZygpLmEuZGMoKSl7Zz1uZXcgRUI7a0MoYixqRGUsZyk7aD0wO2ZvcihmPW5ldyBGb2IoYS5XZygpLmIuSmMoKSk7Zi5iLk9iKCk7KXtlPUpEKGYuYi5QYigpLDg0Nyk7aT1uZXcgbUM7QkIoZyxoKTtEQihnLGgsaSk7a0VkKGUsaSxjLGQpOysraH19fQpmdW5jdGlvbiBNcGUoKXtNcGU9WmNiO19kZSgpO0xwZT1uZXcgTnBlO1dDKE9DKHQ2LDIpLGhyZSwzNzMsMCxbV0MoT0ModDYsMSksYUhlLDU4NCwwLFtuZXcgSnBlKHhHZSldKV0pO1dDKE9DKHQ2LDIpLGhyZSwzNzMsMCxbV0MoT0ModDYsMSksYUhlLDU4NCwwLFtuZXcgSnBlKHlHZSldKV0pO1dDKE9DKHQ2LDIpLGhyZSwzNzMsMCxbV0MoT0ModDYsMSksYUhlLDU4NCwwLFtuZXcgSnBlKHpHZSldKSxXQyhPQyh0NiwxKSxhSGUsNTg0LDAsW25ldyBKcGUoeUdlKV0pXSk7bmV3IFhoYignLTEnKTtXQyhPQyh0NiwyKSxocmUsMzczLDAsW1dDKE9DKHQ2LDEpLGFIZSw1ODQsMCxbbmV3IEpwZSgnXFxjKycpXSldKTtuZXcgWGhiKCcwJyk7bmV3IFhoYignMCcpO25ldyBYaGIoJzEnKTtuZXcgWGhiKCcwJyk7bmV3IFhoYihKR2UpfQpmdW5jdGlvbiB4M2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtjLlNnKCdIeXBlcmVkZ2UgbWVyZ2luZycsMSk7djNiKGEsYik7aT1uZXcgQWpiKGIuYiwwKTt3aGlsZShpLmI8aS5kLmdjKCkpe2g9KHJEYihpLmI8aS5kLmdjKCkpLEpEKGkuZC5YYihpLmM9aS5iKyspLDI1KSk7az1oLmE7aWYoay5jLmxlbmd0aD09MCl7Y29udGludWV9ZD1udWxsO2U9bnVsbDtmPW51bGw7Zz1udWxsO2ZvcihqPTA7ajxrLmMubGVuZ3RoO2orKyl7ZD0oc0RiKGosay5jLmxlbmd0aCksSkQoay5jW2pdLDkpKTtlPWQuaztpZihlPT0oRFliKCkseVliKSYmZz09eVliKXtsPXQzYihkLGYpO2lmKGwuYSl7dzNiKGQsZixsLmIsbC5jKTtzRGIoaixrLmMubGVuZ3RoKTtaQ2Ioay5jLGosMSk7LS1qO2Q9ZjtlPWd9fWY9ZDtnPWV9fWMuVGcoKX0KZnVuY3Rpb24gUE9jKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGw7Zm9yKGc9bmV3IHJtYihiKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTgpO2k9Zi5jO2lmKGMuYS5fYihpKSl7aj0oZ1BjKCksZVBjKX1lbHNlIGlmKGQuYS5fYihpKSl7aj0oZ1BjKCksZlBjKX1lbHNle3Rocm93IHNjYihuZXcgVGViKCdTb3VyY2UgcG9ydCBtdXN0IGJlIGluIG9uZSBvZiB0aGUgcG9ydCBzZXRzLicpKX1rPWYuZDtpZihjLmEuX2Ioaykpe2w9KGdQYygpLGVQYyl9ZWxzZSBpZihkLmEuX2Ioaykpe2w9KGdQYygpLGZQYyl9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYignVGFyZ2V0IHBvcnQgbXVzdCBiZSBpbiBvbmUgb2YgdGhlIHBvcnQgc2V0cy4nKSl9aD1uZXcgelBjKGYsaixsKTtRaWIoYS5iLGYsaCk7WUNiKGUuYyxoKX19CmZ1bmN0aW9uIERaZChhKXt2YXIgYixjO2lmKCEhYS5jJiZhLmMuUmgoKSl7Yz1KRChhLmMsNTIpO2EuYz1KRCh6cWQoYSxjKSwxNDEpO2lmKGEuYyE9Yyl7KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsOSwyLGMsYS5jKSk7aWYoUkQoYS5DYiw0MDApKXthLkRiPj4xNj09LTE1JiZhLkNiLlVoKCkmJk9GZChuZXcgaF9kKGEuQ2IsOSwxMyxjLGEuYyxBVWQoSl9kKEpEKGEuQ2IsNjIpKSxhKSkpfWVsc2UgaWYoUkQoYS5DYiw4OCkpe2lmKGEuRGI+PjE2PT0tMjMmJmEuQ2IuVWgoKSl7Yj1hLmM7UkQoYiw4OCl8fChiPShjUGQoKSxVT2QpKTtSRChjLDg4KXx8KGM9KGNQZCgpLFVPZCkpO09GZChuZXcgaF9kKGEuQ2IsOSwxMCxjLGIsQVVkKE9UZChKRChhLkNiLDI5KSksYSkpKX19fX1yZXR1cm4gYS5jfQpmdW5jdGlvbiBuV2QoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbztpZihiPT1jKXtyZXR1cm4gdHJ1ZX1lbHNle2I9b1dkKGEsYik7Yz1vV2QoYSxjKTtkPUNaZChiKTtpZihkKXtrPUNaZChjKTtpZihrIT1kKXtpZighayl7cmV0dXJuIGZhbHNlfWVsc2V7aT1kLmprKCk7bz1rLmprKCk7cmV0dXJuIGk9PW8mJmkhPW51bGx9fWVsc2V7Zz0oIWIuZCYmKGIuZD1uZXcgcVZkKGc2LGIsMSkpLGIuZCk7Zj1nLmk7bT0oIWMuZCYmKGMuZD1uZXcgcVZkKGc2LGMsMSkpLGMuZCk7aWYoZj09bS5pKXtmb3Ioaj0wO2o8ZjsrK2ope2U9SkQobkRkKGcsaiksODcpO2w9SkQobkRkKG0saiksODcpO2lmKCFuV2QoYSxlLGwpKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX19ZWxzZXtoPWIuZTtuPWMuZTtyZXR1cm4gaD09bn19fQpmdW5jdGlvbiBRYmUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbDtpZihMZmUoYS5lLGIpKXtsPUtmZShhLmUuemgoKSxiKTtmPUpEKGEuZywxMjIpO2s9bnVsbDtpPS0xO2g9LTE7ZT0wO2ZvcihqPTA7ajxhLmk7KytqKXtnPWZbal07aWYobC5abChnLklrKCkpKXtlPT1jJiYoaT1qKTtpZihlPT1kKXtoPWo7az1nLmtkKCl9KytlfX1pZihpPT0tMSl7dGhyb3cgc2NiKG5ldyBtZGIoTkRlK2MrT0RlK2UpKX1pZihoPT0tMSl7dGhyb3cgc2NiKG5ldyBtZGIoUERlK2QrT0RlK2UpKX1UR2QoYSxpLGgpO3FxZChhLmUpJiZ6VWQoYSxBYmUoYSw3LGIsamZiKGQpLGssYyx0cnVlKSk7cmV0dXJuIGt9ZWxzZXt0aHJvdyBzY2IobmV3IFRlYignVGhlIGZlYXR1cmUgbXVzdCBiZSBtYW55LXZhbHVlZCB0byBzdXBwb3J0IG1vdmUnKSl9fQpmdW5jdGlvbiB0WGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtpPW5ldyBGZGQoYi5uKTtpLmErPWIuby5hLzI7aS5iKz1iLm8uYi8yO2g9QmViKE1EKFdNYihiLChCd2MoKSxEdmMpKSkpO2Y9YS5mO2c9YS5kO2U9YS5jO3N3aXRjaChKRChXTWIoYiwoSXFjKCksVHBjKSksNjQpLmcpe2Nhc2UgMTppLmErPWcuYitlLmEtYy8yO2kuYj0tZC1oO2Iubi5iPS0oZy5kK2grZS5iKTticmVhaztjYXNlIDI6aS5hPWYuYStnLmIrZy5jK2g7aS5iKz1nLmQrZS5iLWQvMjtiLm4uYT1mLmErZy5jK2gtZS5hO2JyZWFrO2Nhc2UgMzppLmErPWcuYitlLmEtYy8yO2kuYj1mLmIrZy5kK2cuYStoO2Iubi5iPWYuYitnLmEraC1lLmI7YnJlYWs7Y2FzZSA0OmkuYT0tYy1oO2kuYis9Zy5kK2UuYi1kLzI7Yi5uLmE9LShnLmIraCtlLmEpO31yZXR1cm4gaX0KZnVuY3Rpb24gJDdiKGEsYixjKXt2YXIgZCxlO2Q9Yi5jLmk7ZT1jLmQuaTtpZihkLms9PShEWWIoKSx5WWIpKXtaTWIoYSwoSXFjKCksZnFjKSxKRChXTWIoZCxmcWMpLDExKSk7Wk1iKGEsZ3FjLEpEKFdNYihkLGdxYyksMTEpKTtaTWIoYSxlcWMsTEQoV01iKGQsZXFjKSkpfWVsc2UgaWYoZC5rPT14WWIpe1pNYihhLChJcWMoKSxmcWMpLEpEKFdNYihkLGZxYyksMTEpKTtaTWIoYSxncWMsSkQoV01iKGQsZ3FjKSwxMSkpO1pNYihhLGVxYywoeGRiKCksdHJ1ZSkpfWVsc2UgaWYoZS5rPT14WWIpe1pNYihhLChJcWMoKSxmcWMpLEpEKFdNYihlLGZxYyksMTEpKTtaTWIoYSxncWMsSkQoV01iKGUsZ3FjKSwxMSkpO1pNYihhLGVxYywoeGRiKCksdHJ1ZSkpfWVsc2V7Wk1iKGEsKElxYygpLGZxYyksYi5jKTtaTWIoYSxncWMsYy5kKX19CmZ1bmN0aW9uIEhHYihhKXt2YXIgYixjLGQsZSxmLGcsaDthLm89bmV3IG5sYjtkPW5ldyBNdGI7Zm9yKGc9bmV3IHJtYihhLmUuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDEyMyk7T0ZiKGYpLmMubGVuZ3RoPT0xJiYoRHRiKGQsZixkLmMuYixkLmMpLHRydWUpfXdoaWxlKGQuYiE9MCl7Zj1KRChkLmI9PTA/bnVsbDoockRiKGQuYiE9MCksS3RiKGQsZC5hLmEpKSwxMjMpO2lmKE9GYihmKS5jLmxlbmd0aD09MCl7Y29udGludWV9Yj1KRChNbGIoT0ZiKGYpLDApLDIxNik7Yz1mLmcuYS5jLmxlbmd0aD4wO2g9QUZiKGIsZik7Yz9SRmIoaC5iLGIpOlJGYihoLmcsYik7T0ZiKGgpLmMubGVuZ3RoPT0xJiYoRHRiKGQsaCxkLmMuYixkLmMpLHRydWUpO2U9bmV3IHhvZChmLGIpOyRrYihhLm8sZSk7UGxiKGEuZS5hLGYpfX0KZnVuY3Rpb24gYU1iKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7ZD0kd25kLk1hdGguYWJzKF9jZChhLmIpLmEtX2NkKGIuYikuYSk7aD0kd25kLk1hdGguYWJzKF9jZChhLmIpLmItX2NkKGIuYikuYik7ZT0wO2k9MDtjPTE7Zz0xO2lmKGQ+YS5iLmIvMitiLmIuYi8yKXtlPSR3bmQuTWF0aC5taW4oJHduZC5NYXRoLmFicyhhLmIuYy0oYi5iLmMrYi5iLmIpKSwkd25kLk1hdGguYWJzKGEuYi5jK2EuYi5iLWIuYi5jKSk7Yz0xLWUvZH1pZihoPmEuYi5hLzIrYi5iLmEvMil7aT0kd25kLk1hdGgubWluKCR3bmQuTWF0aC5hYnMoYS5iLmQtKGIuYi5kK2IuYi5hKSksJHduZC5NYXRoLmFicyhhLmIuZCthLmIuYS1iLmIuZCkpO2c9MS1pL2h9Zj0kd25kLk1hdGgubWluKGMsZyk7cmV0dXJuICgxLWYpKiR3bmQuTWF0aC5zcXJ0KGQqZCtoKmgpfQpmdW5jdGlvbiBPT2MoYSl7dmFyIGIsYyxkLGU7UU9jKGEsYS5lLGEuZiwoZ1BjKCksZVBjKSx0cnVlLGEuYyxhLmkpO1FPYyhhLGEuZSxhLmYsZVBjLGZhbHNlLGEuYyxhLmkpO1FPYyhhLGEuZSxhLmYsZlBjLHRydWUsYS5jLGEuaSk7UU9jKGEsYS5lLGEuZixmUGMsZmFsc2UsYS5jLGEuaSk7UE9jKGEsYS5jLGEuZSxhLmYsYS5pKTtkPW5ldyBBamIoYS5pLDApO3doaWxlKGQuYjxkLmQuZ2MoKSl7Yj0ockRiKGQuYjxkLmQuZ2MoKSksSkQoZC5kLlhiKGQuYz1kLmIrKyksMTMyKSk7ZT1uZXcgQWpiKGEuaSxkLmIpO3doaWxlKGUuYjxlLmQuZ2MoKSl7Yz0ockRiKGUuYjxlLmQuZ2MoKSksSkQoZS5kLlhiKGUuYz1lLmIrKyksMTMyKSk7Tk9jKGIsYyl9fVpPYyhhLmksSkQoV01iKGEuZCwoSXFjKCksdnFjKSksMjMzKSk7YVBjKGEuaSl9CmZ1bmN0aW9uICRTZChhLGIpe3ZhciBjLGQ7aWYoYiE9bnVsbCl7ZD1ZU2QoYSk7aWYoZCl7aWYoKGQuaSYxKSE9MCl7aWYoZD09cGNiKXtyZXR1cm4gU0QoYil9ZWxzZSBpZihkPT1jRSl7cmV0dXJuIFJEKGIsMTcpfWVsc2UgaWYoZD09YkUpe3JldHVybiBSRChiLDE2MCl9ZWxzZSBpZihkPT0kRCl7cmV0dXJuIFJEKGIsMjE5KX1lbHNlIGlmKGQ9PV9EKXtyZXR1cm4gUkQoYiwxNzkpfWVsc2UgaWYoZD09YUUpe3JldHVybiBURChiKX1lbHNlIGlmKGQ9PW9jYil7cmV0dXJuIFJEKGIsMTkxKX1lbHNlIGlmKGQ9PWRFKXtyZXR1cm4gUkQoYiwxOTApfX1lbHNle3JldHVybiBpTmQoKSxjPUpEKE5pYihoTmQsZCksNTgpLCFjfHxjLmNrKGIpfX1lbHNlIGlmKFJEKGIsNTcpKXtyZXR1cm4gYS5hbChKRChiLDU3KSl9fXJldHVybiBmYWxzZX0KZnVuY3Rpb24gVWxlKCl7VWxlPVpjYjt2YXIgYSxiLGMsZCxlLGYsZyxoLGk7U2xlPVNDKCRELFpDZSwzMCwyNTUsMTUsMSk7VGxlPVNDKF9ELFVyZSwzMCw2NCwxNSwxKTtmb3IoYj0wO2I8MjU1O2IrKyl7U2xlW2JdPS0xfWZvcihjPTkwO2M+PTY1O2MtLSl7U2xlW2NdPWMtNjU8PDI0Pj4yNH1mb3IoZD0xMjI7ZD49OTc7ZC0tKXtTbGVbZF09ZC05NysyNjw8MjQ+PjI0fWZvcihlPTU3O2U+PTQ4O2UtLSl7U2xlW2VdPWUtNDgrNTI8PDI0Pj4yNH1TbGVbNDNdPTYyO1NsZVs0N109NjM7Zm9yKGY9MDtmPD0yNTtmKyspVGxlW2ZdPTY1K2YmV3JlO2ZvcihnPTI2LGk9MDtnPD01MTsrK2csaSsrKVRsZVtnXT05NytpJldyZTtmb3IoYT01MixoPTA7YTw9NjE7KythLGgrKylUbGVbYV09NDgraCZXcmU7VGxlWzYyXT00MztUbGVbNjNdPTQ3fQpmdW5jdGlvbiBsaGIoYSxiKXt2YXIgYyxkLGUsZixnLGg7ZT1vaGIoYSk7aD1vaGIoYik7aWYoZT09aCl7aWYoYS5lPT1iLmUmJmEuYTw1NCYmYi5hPDU0KXtyZXR1cm4gYS5mPGIuZj8tMTphLmY+Yi5mPzE6MH1kPWEuZS1iLmU7Yz0oYS5kPjA/YS5kOiR3bmQuTWF0aC5mbG9vcigoYS5hLTEpKlRzZSkrMSktKGIuZD4wP2IuZDokd25kLk1hdGguZmxvb3IoKGIuYS0xKSpUc2UpKzEpO2lmKGM+ZCsxKXtyZXR1cm4gZX1lbHNlIGlmKGM8ZC0xKXtyZXR1cm4gLWV9ZWxzZXtmPSghYS5jJiYoYS5jPWZpYih6Y2IoYS5mKSkpLGEuYyk7Zz0oIWIuYyYmKGIuYz1maWIoemNiKGIuZikpKSxiLmMpO2Q8MD8oZj1OaGIoZixKaWIoLWQpKSk6ZD4wJiYoZz1OaGIoZyxKaWIoZCkpKTtyZXR1cm4gSGhiKGYsZyl9fWVsc2UgcmV0dXJuIGU8aD8tMToxfQpmdW5jdGlvbiBqJGIoYSl7dmFyIGIsYyxkLGUsZixnO2Q9bmV3IG5XYjtVTWIoZCxhKTtYRChXTWIoZCwoQndjKCkscnVjKSkpPT09WEQoKFRnZCgpLFJnZCkpJiZaTWIoZCxydWMsc1hiKGQpKTtpZihXTWIoZCwoR2NkKCksRmNkKSk9PW51bGwpe2c9SkQoZWZlKGEpLDE3Myk7Wk1iKGQsRmNkLFpEKGcubWYoRmNkKSkpfVpNYihkLChJcWMoKSxrcWMpLGEpO1pNYihkLFdwYywoYj1KRChkZWIoWFYpLDEwKSxuZXcgdXJiKGIsSkQoVkNiKGIsYi5sZW5ndGgpLDEwKSwwKSkpO2U9UUdiKCghWndkKGEpP251bGw6KFJvZCgpLG5ldyBkcGQoWndkKGEpKSksUm9kKCksbmV3IGpwZCghWndkKGEpP251bGw6bmV3IGRwZChad2QoYSkpLGEpKSxRZ2QpO2Y9SkQoV01iKGQsdHZjKSwxMDcpO2M9ZC5kO0xYYihjLGYpO0xYYihjLGUpO3JldHVybiBkfQpmdW5jdGlvbiB6TmIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7Yy5TZyh5dWUsMSk7YS5xZihiKTtmPTA7d2hpbGUoYS5zZihmKSYmIWMuWWcoKSl7YS5yZigpO2ZvcihrPURsKHlsKFdDKE9DKFZJLDEpLE5xZSwyMCwwLFtiLmUsYi5kLGIuYl0pKSk7Y3Moayk7KXtpPUpEKGRzKGspLDMxMCk7Zm9yKGg9RGwoeWwoV0MoT0MoVkksMSksTnFlLDIwLDAsW2IuZSxiLmQsYi5iXSkpKTtjcyhoKTspe2c9SkQoZHMoaCksMzEwKTtpZihnIT1pKXtlPWEucGYoZyxpKTshIWUmJm1kZChpLmMsZSl9fX1mb3Ioaj1EbCh5bChXQyhPQyhWSSwxKSxOcWUsMjAsMCxbYi5lLGIuZCxiLmJdKSkpO2NzKGopOyl7aT1KRChkcyhqKSwzMTApO2Q9aS5jO25kZChkLC1hLmQsLWEuZCxhLmQsYS5kKTttZGQoaS5kLGQpO2QuYT0wO2QuYj0wfSsrZn1jLlRnKCl9CmZ1bmN0aW9uIFJUYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbjtpZihhLmRjKCkpe3JldHVybiBuZXcgQ2RkfWo9MDtsPTA7Zm9yKGU9YS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDM2KTtmPWQuZjtqPSR3bmQuTWF0aC5tYXgoaixmLmEpO2wrPWYuYSpmLmJ9aj0kd25kLk1hdGgubWF4KGosJHduZC5NYXRoLnNxcnQobCkqQmViKE1EKFdNYihKRChhLkpjKCkuUGIoKSwzNiksKEJ3YygpLFR0YykpKSkpO209MDtuPTA7aT0wO2M9Yjtmb3IoaD1hLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMzYpO2s9Zy5mO2lmKG0ray5hPmope209MDtuKz1pK2I7aT0wfUdUYihnLG0sbik7Yz0kd25kLk1hdGgubWF4KGMsbStrLmEpO2k9JHduZC5NYXRoLm1heChpLGsuYik7bSs9ay5hK2J9cmV0dXJuIG5ldyBFZGQoYytiLG4raStiKX0KZnVuY3Rpb24gWW1kKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7aWYoIW94ZChhKSl7dGhyb3cgc2NiKG5ldyBXZWIodENlKSl9ZD1veGQoYSk7Zj1kLmc7ZT1kLmY7aWYoZjw9MCYmZTw9MCl7cmV0dXJuIFJqZCgpLFBqZH1oPWEuaTtpPWEuajtzd2l0Y2goYi5nKXtjYXNlIDI6Y2FzZSAxOmlmKGg8MCl7cmV0dXJuIFJqZCgpLFFqZH1lbHNlIGlmKGgrYS5nPmYpe3JldHVybiBSamQoKSx3amR9YnJlYWs7Y2FzZSA0OmNhc2UgMzppZihpPDApe3JldHVybiBSamQoKSx4amR9ZWxzZSBpZihpK2EuZj5lKXtyZXR1cm4gUmpkKCksT2pkfX1nPShoK2EuZy8yKS9mO2M9KGkrYS5mLzIpL2U7cmV0dXJuIGcrYzw9MSYmZy1jPD0wPyhSamQoKSxRamQpOmcrYz49MSYmZy1jPj0wPyhSamQoKSx3amQpOmM8MC41PyhSamQoKSx4amQpOihSamQoKSxPamQpfQpmdW5jdGlvbiB1aWIoYSxiLGMsZCxlKXt2YXIgZixnO2Y9dGNiKHVjYihiWzBdLFVzZSksdWNiKGRbMF0sVXNlKSk7YVswXT1QY2IoZik7Zj1LY2IoZiwzMik7aWYoYz49ZSl7Zm9yKGc9MTtnPGU7ZysrKXtmPXRjYihmLHRjYih1Y2IoYltnXSxVc2UpLHVjYihkW2ddLFVzZSkpKTthW2ddPVBjYihmKTtmPUtjYihmLDMyKX1mb3IoO2c8YztnKyspe2Y9dGNiKGYsdWNiKGJbZ10sVXNlKSk7YVtnXT1QY2IoZik7Zj1LY2IoZiwzMil9fWVsc2V7Zm9yKGc9MTtnPGM7ZysrKXtmPXRjYihmLHRjYih1Y2IoYltnXSxVc2UpLHVjYihkW2ddLFVzZSkpKTthW2ddPVBjYihmKTtmPUtjYihmLDMyKX1mb3IoO2c8ZTtnKyspe2Y9dGNiKGYsdWNiKGRbZ10sVXNlKSk7YVtnXT1QY2IoZik7Zj1LY2IoZiwzMil9fXZjYihmLDApIT0wJiYoYVtnXT1QY2IoZikpfQpmdW5jdGlvbiBMM2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Yi5TZygnTGF5ZXIgY29uc3RyYWludCBlZGdlIHJldmVyc2FsJywxKTtmb3IoZz1uZXcgcm1iKGEuYik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDI1KTtrPS0xO2M9bmV3IFVsYjtqPURYYihmLmEpO2ZvcihlPTA7ZTxqLmxlbmd0aDtlKyspe2Q9SkQoV01iKGpbZV0sKElxYygpLCRwYykpLDMxMik7aWYoaz09LTEpe2QhPShxcGMoKSxwcGMpJiYoaz1lKX1lbHNle2lmKGQ9PShxcGMoKSxwcGMpKXtxWWIoaltlXSxudWxsKTtwWWIoaltlXSxrKyssZil9fWQ9PShxcGMoKSxucGMpJiYoWUNiKGMuYyxqW2VdKSx0cnVlKX1mb3IoaT1uZXcgcm1iKGMpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSw5KTtxWWIoaCxudWxsKTtxWWIoaCxmKX19Yi5UZygpfQpmdW5jdGlvbiBUb2UoYSl7b29lKCk7dmFyIGIsYyxkLGUsZixnO2lmKGEuZSE9NCYmYS5lIT01KXRocm93IHNjYihuZXcgVGViKCdUb2tlbiNjb21wbGVtZW50UmFuZ2VzKCk6IG11c3QgYmUgUkFOR0U6ICcrYS5lKSk7Zj1hO1FvZShmKTtOb2UoZik7ZD1mLmIubGVuZ3RoKzI7Zi5iWzBdPT0wJiYoZC09Mik7Yz1mLmJbZi5iLmxlbmd0aC0xXTtjPT1OR2UmJihkLT0yKTtlPSgrK25vZSxuZXcgU29lKDQpKTtlLmI9U0MoY0UsaXNlLDMwLGQsMTUsMSk7Zz0wO2lmKGYuYlswXT4wKXtlLmJbZysrXT0wO2UuYltnKytdPWYuYlswXS0xfWZvcihiPTE7YjxmLmIubGVuZ3RoLTI7Yis9Mil7ZS5iW2crK109Zi5iW2JdKzE7ZS5iW2crK109Zi5iW2IrMV0tMX1pZihjIT1OR2Upe2UuYltnKytdPWMrMTtlLmJbZ109TkdlfWUuYT10cnVlO3JldHVybiBlfQpmdW5jdGlvbiB5MmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Yi5TZygnSGllcmFyY2hpY2FsIHBvcnQgZHVtbXkgc2l6ZSBwcm9jZXNzaW5nJywxKTtpPW5ldyBVbGI7az1uZXcgVWxiO2Q9QmViKE1EKFdNYihhLChCd2MoKSxYdmMpKSkpO2M9ZCoyO2ZvcihmPW5ldyBybWIoYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjUpO2kuYy5sZW5ndGg9MDtrLmMubGVuZ3RoPTA7Zm9yKGg9bmV3IHJtYihlLmEpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSw5KTtpZihnLms9PShEWWIoKSx3WWIpKXtqPUpEKFdNYihnLChJcWMoKSxUcGMpKSw2NCk7aj09KFJqZCgpLHhqZCk/KFlDYihpLmMsZyksdHJ1ZSk6aj09T2pkJiYoWUNiKGsuYyxnKSx0cnVlKX19ejJiKGksdHJ1ZSxjKTt6MmIoayxmYWxzZSxjKX1iLlRnKCl9CmZ1bmN0aW9uIE1HZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztkPWMuZ2MoKTtpZihkPT0wKXtyZXR1cm4gZmFsc2V9ZWxzZXtpZihhLk1qKCkpe2o9YS5OaigpO2ZEZChhLGIsYyk7Zz1kPT0xP2EuRmooMyxudWxsLGMuSmMoKS5QYigpLGIsaik6YS5Gaig1LG51bGwsYyxiLGopO2lmKGEuSmooKSl7aD1kPDEwMD9udWxsOm5ldyBGR2QoZCk7Zj1iK2Q7Zm9yKGU9YjtlPGY7KytlKXtrPWEuZ1tlXTtoPWEuS2ooayxoKTtoPWEuUmooayxoKX1pZighaCl7YS5HaihnKX1lbHNle2gua2ooZyk7aC5saigpfX1lbHNle2EuR2ooZyl9fWVsc2V7ZkRkKGEsYixjKTtpZihhLkpqKCkpe2g9ZDwxMDA/bnVsbDpuZXcgRkdkKGQpO2Y9YitkO2ZvcihlPWI7ZTxmOysrZSl7aT1hLmdbZV07aD1hLktqKGksaCl9ISFoJiZoLmxqKCl9fXJldHVybiB0cnVlfX0KZnVuY3Rpb24gek1jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7Zm9yKGc9bmV3IHJtYihhLmspO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihnKSwxMzMpO2lmKCFkfHxlLmM9PShpTmMoKSxnTmMpKXtpPWUuYjtpZihpLmc8MCYmZS5kPjApe1NNYyhpLGkuZC1lLmQpO2UuYz09KGlOYygpLGdOYykmJlFNYyhpLGkuYS1lLmQpO2kuZDw9MCYmaS5pPjAmJihEdGIoYixpLGIuYy5iLGIuYyksdHJ1ZSl9fX1mb3IoZj1uZXcgcm1iKGEuZik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDEzMyk7aWYoIWR8fGUuYz09KGlOYygpLGdOYykpe2g9ZS5hO2lmKGguZzwwJiZlLmQ+MCl7VE1jKGgsaC5pLWUuZCk7ZS5jPT0oaU5jKCksZ05jKSYmUk1jKGgsaC5iLWUuZCk7aC5pPD0wJiZoLmQ+MCYmKER0YihjLGgsYy5jLmIsYy5jKSx0cnVlKX19fX0KZnVuY3Rpb24gTmxkKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuO3BuYigpO1NsYihhLG5ldyB1bWQpO2c9Y3YoYSk7bj1uZXcgVWxiO209bmV3IFVsYjtoPW51bGw7aT0wO3doaWxlKGcuYiE9MCl7Zj1KRChnLmI9PTA/bnVsbDoockRiKGcuYiE9MCksS3RiKGcsZy5hLmEpKSwxNjIpO2lmKCFofHxjbWQoaCkqYm1kKGgpLzI8Y21kKGYpKmJtZChmKSl7aD1mO1lDYihuLmMsZil9ZWxzZXtpKz1jbWQoZikqYm1kKGYpO1lDYihtLmMsZik7aWYobS5jLmxlbmd0aD4xJiYoaT5jbWQoaCkqYm1kKGgpLzJ8fGcuYj09MCkpe2w9bmV3IGhtZChtKTtrPWNtZChoKS9ibWQoaCk7aj1TbGQobCxiLG5ldyBMWWIsYyxkLGUsayk7bWRkKHZkZChsLmUpLGopO2g9bDtZQ2Iobi5jLGwpO2k9MDttLmMubGVuZ3RoPTB9fX1LbGIobixtKTtyZXR1cm4gbn0KZnVuY3Rpb24gJGdiKGEsYixjLGQsZSl7WmdiKCk7dmFyIGYsZyxoLGksaixrLGw7dURiKGEsJ3NyYycpO3VEYihjLCdkZXN0Jyk7bD1yYihhKTtpPXJiKGMpO3BEYigobC5pJjQpIT0wLCdzcmNUeXBlIGlzIG5vdCBhbiBhcnJheScpO3BEYigoaS5pJjQpIT0wLCdkZXN0VHlwZSBpcyBub3QgYW4gYXJyYXknKTtrPWwuYztnPWkuYztwRGIoKGsuaSYxKSE9MD9rPT1nOihnLmkmMSk9PTAsIkFycmF5IHR5cGVzIGRvbid0IG1hdGNoIik7X2diKGEsYixjLGQsZSk7aWYoKGsuaSYxKT09MCYmbCE9aSl7aj1LRChhKTtmPUtEKGMpO2lmKFhEKGEpPT09WEQoYykmJmI8ZCl7Yis9ZTtmb3IoaD1kK2U7aC0tPmQ7KXtWQyhmLGgsalstLWJdKX19ZWxzZXtmb3IoaD1kK2U7ZDxoOyl7VkMoZixkKyssaltiKytdKX19fWVsc2V7VUNiKGEsYixjLGQsZSx0cnVlKX19CmZ1bmN0aW9uIE1sZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztiLlNnKCdCb3ggbGF5b3V0JywyKTtlPURlYihNRChrc2QoYSwodWVkKCksdGVkKSkpKTtmPUpEKGtzZChhLHFlZCksMTA3KTtjPXlkYihMRChrc2QoYSxsZWQpKSk7ZD15ZGIoTEQoa3NkKGEsbWVkKSkpO3N3aXRjaChKRChrc2QoYSxqZWQpLDMyMSkuZyl7Y2FzZSAwOmc9KGs9bmV3IFdsYigoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpKSxwbmIoKSxTbGIoayxuZXcgWmxkKGQpKSxrKTtoPWRuZChhKTtpPU1EKGtzZChhLGllZCkpOyhpPT1udWxsfHwodERiKGkpLGkpPD0wKSYmKGk9MS4zKTtqPVFsZChnLGUsZixoLmEsaC5iLGMsKHREYihpKSxpKSk7bW5kKGEsai5hLGouYixmYWxzZSx0cnVlKTticmVhaztkZWZhdWx0OlJsZChhLGUsZixjKTt9Yi5UZygpfQpmdW5jdGlvbiB4T2MoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbzttPXdPYyhhLGMpO2ZvcihpPTA7aTxiO2krKyl7empiKGUsYyk7bj1uZXcgVWxiO289KHJEYihkLmI8ZC5kLmdjKCkpLEpEKGQuZC5YYihkLmM9ZC5iKyspLDQwNykpO2ZvcihrPW0raTtrPGEuYjtrKyspe2g9bztvPShyRGIoZC5iPGQuZC5nYygpKSxKRChkLmQuWGIoZC5jPWQuYisrKSw0MDcpKTtJbGIobixuZXcgRE9jKGgsbyxjKSl9Zm9yKGw9bStpO2w8YS5iO2wrKyl7ckRiKGQuYj4wKTtkLmEuWGIoZC5jPS0tZC5iKTtsPm0raSYmdGpiKGQpfWZvcihnPW5ldyBybWIobik7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDQwNyk7empiKGQsZil9aWYoaTxiLTEpe2ZvcihqPW0raTtqPGEuYjtqKyspe3JEYihkLmI+MCk7ZC5hLlhiKGQuYz0tLWQuYil9fX19CmZ1bmN0aW9uIEJvZSgpe29vZSgpO3ZhciBhLGIsYyxkLGUsZjtpZigkbmUpcmV0dXJuICRuZTthPSgrK25vZSxuZXcgU29lKDQpKTtQb2UoYSxDb2UoWEdlLHRydWUpKTtSb2UoYSxDb2UoJ00nLHRydWUpKTtSb2UoYSxDb2UoJ0MnLHRydWUpKTtmPSgrK25vZSxuZXcgU29lKDQpKTtmb3IoZD0wO2Q8MTE7ZCsrKXtNb2UoZixkLGQpfWI9KCsrbm9lLG5ldyBTb2UoNCkpO1BvZShiLENvZSgnTScsdHJ1ZSkpO01vZShiLDQ0NDgsNDYwNyk7TW9lKGIsNjU0MzgsNjU0MzkpO2U9KCsrbm9lLG5ldyBEcGUoMikpO0NwZShlLGEpO0NwZShlLFpuZSk7Yz0oKytub2UsbmV3IERwZSgyKSk7Yy5HbSh0b2UoZixDb2UoJ0wnLHRydWUpKSk7Yy5HbShiKTtjPSgrK25vZSxuZXcgZHBlKDMsYykpO2M9KCsrbm9lLG5ldyBqcGUoZSxjKSk7JG5lPWM7cmV0dXJuICRuZX0KZnVuY3Rpb24gbWdiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtjPW5ldyBSZWdFeHAoYiwnZycpO2k9U0MoaEosaHJlLDIsMCw2LDEpO2Q9MDtqPWE7Zj1udWxsO3doaWxlKHRydWUpe2g9Yy5leGVjKGopO2lmKGg9PW51bGx8fGo9PScnKXtpW2RdPWo7YnJlYWt9ZWxzZXtnPWguaW5kZXg7aVtkXT0oekRiKDAsZyxqLmxlbmd0aCksai5zdWJzdHIoMCxnKSk7aj1xZ2IoaixnK2hbMF0ubGVuZ3RoLGoubGVuZ3RoKTtjLmxhc3RJbmRleD0wO2lmKGY9PWope2lbZF09KHpEYigwLDEsai5sZW5ndGgpLGouc3Vic3RyKDAsMSkpO2o9KEFEYigxLGoubGVuZ3RoKzEpLGouc3Vic3RyKDEpKX1mPWo7KytkfX1pZihhLmxlbmd0aD4wKXtlPWkubGVuZ3RoO3doaWxlKGU+MCYmaVtlLTFdPT0nJyl7LS1lfWU8aS5sZW5ndGgmJihpLmxlbmd0aD1lKX1yZXR1cm4gaX0KZnVuY3Rpb24ga1ZjKCl7a1ZjPVpjYjtYVWM9bmV3IE1ZYigyMCk7V1VjPW5ldyBOQmQoKExnZCgpLEtmZCksWFVjKTtjVmM9bmV3IE5CZCh3Z2QsMjApO2JWYz1uZXcgTkJkKHFnZCwzKTtIVWM9bmV3IE5CZChRZWQsSnVlKTskVWM9bmV3IE5CZChnZ2QsamZiKDEpKTthVmM9bmV3IE5CZChrZ2QsKHhkYigpLHRydWUpKTtKVWM9WmVkO0xVYz0oVGdkKCksUmdkKTtLVWM9bmV3IE5CZCgkZWQsTFVjKTtPVWM9bmZkO1BVYz1vZmQ7UlVjPUJmZDtTVWM9RGZkO1RVYz1FZmQ7VVVjPUdmZDtRVWM9emZkO1ZVYz1KZmQ7WVVjPWFnZDtqVmM9KEVVYygpLENVYyk7X1VjPXpVYztmVmM9RGdkO2hWYz1IZ2Q7ZVZjPUNnZDtkVmM9QmdkO2dWYz0oV2tkKCksVGtkKTtuZXcgTkJkKEVnZCxnVmMpO1pVYz15VWM7TlVjPXdVYztpVmM9QlVjO0lVYz11VWM7TVVjPXZVY30KZnVuY3Rpb24gbExjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGw7bD1uZXcga0xjO2wuZD0wO2ZvcihnPW5ldyBybWIoYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMjUpO2wuZCs9Zi5hLmMubGVuZ3RofWQ9MDtlPTA7bC5hPVNDKGNFLGlzZSwzMCxhLmIuYy5sZW5ndGgsMTUsMSk7aj0wO2s9MDtsLmU9U0MoY0UsaXNlLDMwLGwuZCwxNSwxKTtmb3IoYz1uZXcgcm1iKGEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI1KTtiLnA9ZCsrO2wuYVtiLnBdPWUrKztrPTA7Zm9yKGk9bmV3IHJtYihiLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSw5KTtoLnA9aisrO2wuZVtoLnBdPWsrK319bC5jPW5ldyBwTGMobCk7bC5iPWF2KGwuZCk7bUxjKGwsYSk7bC5mPWF2KGwuZCk7bkxjKGwsYSk7cmV0dXJuIGx9CmZ1bmN0aW9uIHFhZChhKXt2YXIgYixjO2I9T0Qoa3NkKGEsKExnZCgpLE5lZCkpKTtpZihyYWQoYixhKSl7cmV0dXJufWlmKCFsc2QoYSxpZ2QpJiYoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKS5pIT0wfHx5ZGIoTEQoa3NkKGEsbGZkKSkpKSl7aWYoYj09bnVsbHx8dWdiKGIpLmxlbmd0aD09MCl7aWYoIXJhZChPc2UsYSkpe2M9UWdiKFFnYihuZXcgV2diKCdVbmFibGUgdG8gbG9hZCBkZWZhdWx0IGxheW91dCBhbGdvcml0aG0gJyksT3NlKSwnIGZvciB1bmNvbmZpZ3VyZWQgbm9kZSAnKTtrbmQoYSxjKTt0aHJvdyBzY2IobmV3IFk4YyhjLmEpKX19ZWxzZXtjPVFnYihRZ2IobmV3IFdnYigiTGF5b3V0IGFsZ29yaXRobSAnIiksYiksIicgbm90IGZvdW5kIGZvciAiKTtrbmQoYSxjKTt0aHJvdyBzY2IobmV3IFk4YyhjLmEpKX19fQpmdW5jdGlvbiBqSWIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG47Yz1hLmk7Yj1hLm47aWYoYS5iPT0wKXtuPWMuYytiLmI7bT1jLmItYi5iLWIuYztmb3IoZz1hLmEsaT0wLGs9Zy5sZW5ndGg7aTxrOysraSl7ZT1nW2ldO29IYihlLG4sbSl9fWVsc2V7ZD1tSWIoYSxmYWxzZSk7b0hiKGEuYVswXSxjLmMrYi5iLGRbMF0pO29IYihhLmFbMl0sYy5jK2MuYi1iLmMtZFsyXSxkWzJdKTtsPWMuYi1iLmItYi5jO2lmKGRbMF0+MCl7bC09ZFswXSthLmM7ZFswXSs9YS5jfWRbMl0+MCYmKGwtPWRbMl0rYS5jKTtkWzFdPSR3bmQuTWF0aC5tYXgoZFsxXSxsKTtvSGIoYS5hWzFdLGMuYytiLmIrZFswXS0oZFsxXS1sKS8yLGRbMV0pfWZvcihmPWEuYSxoPTAsaj1mLmxlbmd0aDtoPGo7KytoKXtlPWZbaF07UkQoZSwzMzIpJiZKRChlLDMzMikuaGYoKX19CmZ1bmN0aW9uIG9sYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosaztrPVNDKGNFLGlzZSwzMCxhLmIuYy5sZW5ndGgrMSwxNSwxKTtqPW5ldyBRcmI7ZD0wO2ZvcihmPW5ldyBybWIoYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjUpO2tbZCsrXT1qLmEuZ2MoKTtmb3IoaT1uZXcgcm1iKGUuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2c9SkQocG1iKGkpLDkpO2ZvcihjPW5ldyBlcyhJcihrWWIoZykuYS5KYygpLG5ldyBlcikpO2NzKGMpOyl7Yj1KRChkcyhjKSwxOCk7ai5hLnljKGIsail9fWZvcihoPW5ldyBybWIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7Zm9yKGM9bmV3IGVzKElyKGhZYihnKS5hLkpjKCksbmV3IGVyKSk7Y3MoYyk7KXtiPUpEKGRzKGMpLDE4KTtqLmEuQWMoYikhPW51bGx9fX1yZXR1cm4ga30KZnVuY3Rpb24gYTRjKGEsYil7dmFyIGMsZCxlLGY7Zj1KRChNbGIoYS5uLGEubi5jLmxlbmd0aC0xKSwyMDgpLmQ7YS5wPSR3bmQuTWF0aC5taW4oYS5wLGIuZyk7YS5yPSR3bmQuTWF0aC5tYXgoYS5yLGYpO2EuZz0kd25kLk1hdGgubWF4KGEuZyxiLmcrKGEuYi5jLmxlbmd0aD09MT8wOmEuaSkpO2Eubz0kd25kLk1hdGgubWluKGEubyxiLmYpO2EuZSs9Yi5mKyhhLmIuYy5sZW5ndGg9PTE/MDphLmkpO2EuZj0kd25kLk1hdGgubWF4KGEuZixiLmYpO2U9YS5uLmMubGVuZ3RoPjA/KGEubi5jLmxlbmd0aC0xKSphLmk6MDtmb3IoZD1uZXcgcm1iKGEubik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDIwOCk7ZSs9Yy5hfWEuZD1lO2EuYT1hLmUvYS5iLmMubGVuZ3RoLWEuaSooKGEuYi5jLmxlbmd0aC0xKS9hLmIuYy5sZW5ndGgpO1U0YyhhLmopfQpmdW5jdGlvbiBCTWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtrPUxEKFdNYihiLChJT2IoKSx6T2IpKSk7aWYoaz09bnVsbHx8KHREYihrKSxrKSl7bD1TQyhwY2IsVnRlLDMwLGIuZS5jLmxlbmd0aCwxNiwxKTtnPXhNYihiKTtlPW5ldyBNdGI7Zm9yKGo9bmV3IHJtYihiLmUpO2ouYTxqLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihqKSwxNTEpO2M9eU1iKGEsaCxudWxsLG51bGwsbCxnKTtpZihjKXtVTWIoYyxiKTtEdGIoZSxjLGUuYy5iLGUuYyl9fWlmKGUuYj4xKXtmb3IoZD1HdGIoZSwwKTtkLmIhPWQuZC5jOyl7Yz1KRChVdGIoZCksMjM0KTtmPTA7Zm9yKGk9bmV3IHJtYihjLmUpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSwxNTEpO2guYT1mKyt9fX1yZXR1cm4gZX1yZXR1cm4gX3UoV0MoT0MoX04sMSksb3VlLDIzNCwwLFtiXSkpfQpmdW5jdGlvbiBNVGQoYSl7dmFyIGIsYyxkLGUsZixnLGg7aWYoIWEuZyl7aD1uZXcgc1dkO2I9RFRkO2c9Yi5hLnljKGEsYik7aWYoZz09bnVsbCl7Zm9yKGQ9bmV3IENIZChVVGQoYSkpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSwyOSk7dkNkKGgsTVRkKGMpKX1iLmEuQWMoYSkhPW51bGw7Yi5hLmdjKCk9PTAmJnVuZGVmaW5lZH1lPWguaTtmb3IoZj0oIWEucyYmKGEucz1uZXcgWDBkKHE2LGEsMjEsMTcpKSxuZXcgQ0hkKGEucykpO2YuZSE9Zi5pLmdjKCk7KytlKXtXUmQoSkQoQUhkKGYpLDQ0OCksZSl9dkNkKGgsKCFhLnMmJihhLnM9bmV3IFgwZChxNixhLDIxLDE3KSksYS5zKSk7c0RkKGgpO2EuZz1uZXcga1dkKGEsaCk7YS5pPUpEKGguZywyNTMpO2EuaT09bnVsbCYmKGEuaT1GVGQpO2EucD1udWxsO1RUZChhKS5iJj0tNX1yZXR1cm4gYS5nfQpmdW5jdGlvbiBUOWQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Yz1iLm1pKGEuYSk7aWYoYyl7aT1PRCh4SmQoKCFjLmImJihjLmI9bmV3IGxSZCgoY1BkKCksJE9kKSx1NyxjKSksYy5iKSwnbWVtYmVyVHlwZXMnKSk7aWYoaSE9bnVsbCl7aj1uZXcgVWxiO2ZvcihmPW1nYihpLCdcXHcnKSxnPTAsaD1mLmxlbmd0aDtnPGg7KytnKXtlPWZbZ107ZD1lLmxhc3RJbmRleE9mKCcjJyk7az1kPT0tMT9wYWUoYSxiLmdrKCksZSk6ZD09MD9vYWUoYSxudWxsLChBRGIoMSxlLmxlbmd0aCsxKSxlLnN1YnN0cigxKSkpOm9hZShhLCh6RGIoMCxkLGUubGVuZ3RoKSxlLnN1YnN0cigwLGQpKSwoQURiKGQrMSxlLmxlbmd0aCsxKSxlLnN1YnN0cihkKzEpKSk7UkQoaywxNTUpJiZJbGIoaixKRChrLDE1NSkpfXJldHVybiBqfX1yZXR1cm4gcG5iKCkscG5iKCksbW5ifQpmdW5jdGlvbiBrSWIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbztkPWEuaTtjPWEubjtpZihhLmI9PTApe2I9bEliKGEsZmFsc2UpO3BIYihhLmFbMF0sZC5kK2MuZCxiWzBdKTtwSGIoYS5hWzJdLGQuZCtkLmEtYy5hLWJbMl0sYlsyXSk7bT1kLmEtYy5kLWMuYTtsPW07aWYoYlswXT4wKXtiWzBdKz1hLmM7bC09YlswXX1iWzJdPjAmJihsLT1iWzJdK2EuYyk7YlsxXT0kd25kLk1hdGgubWF4KGJbMV0sbCk7cEhiKGEuYVsxXSxkLmQrYy5kK2JbMF0tKGJbMV0tbCkvMixiWzFdKX1lbHNle289ZC5kK2MuZDtuPWQuYS1jLmQtYy5hO2ZvcihnPWEuYSxpPTAsaz1nLmxlbmd0aDtpPGs7KytpKXtlPWdbaV07cEhiKGUsbyxuKX19Zm9yKGY9YS5hLGg9MCxqPWYubGVuZ3RoO2g8ajsrK2gpe2U9ZltoXTtSRChlLDMzMikmJkpEKGUsMzMyKS5qZigpfX0KZnVuY3Rpb24geWJlKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aT1LZmUoYS5lLnpoKCksYik7ZT1KRChhLmcsMTIyKTtJZmUoKTtpZihKRChiLDY5KS51aygpKXtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2lmKGkuWmwoZi5JaygpKSYmcGIoZixjKSl7cmV0dXJuIHRydWV9fX1lbHNlIGlmKGMhPW51bGwpe2ZvcihoPTA7aDxhLmk7KytoKXtmPWVbaF07aWYoaS5abChmLklrKCkpJiZwYihjLGYua2QoKSkpe3JldHVybiB0cnVlfX1pZihkKXtmb3IoZz0wO2c8YS5pOysrZyl7Zj1lW2ddO2lmKGkuWmwoZi5JaygpKSYmWEQoYyk9PT1YRChWYmUoYSxKRChmLmtkKCksNTcpKSkpe3JldHVybiB0cnVlfX19fWVsc2V7Zm9yKGc9MDtnPGEuaTsrK2cpe2Y9ZVtnXTtpZihpLlpsKGYuSWsoKSkmJmYua2QoKT09bnVsbCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBSOWQoYSxiKXt2YXIgYyxkLGUsZixnLGg7Yz1iLm1pKGEuYSk7aWYoYyl7aD1PRCh4SmQoKCFjLmImJihjLmI9bmV3IGxSZCgoY1BkKCksJE9kKSx1NyxjKSksYy5iKSxHRGUpKTtpZihoIT1udWxsKXtlPWtnYihoLHdnYigzNSkpO2Q9Yi5uaygpO2lmKGU9PS0xKXtnPW5hZShhLFdTZChkKSk7Zj1ofWVsc2UgaWYoZT09MCl7Zz1udWxsO2Y9KEFEYigxLGgubGVuZ3RoKzEpLGguc3Vic3RyKDEpKX1lbHNle2c9KHpEYigwLGUsaC5sZW5ndGgpLGguc3Vic3RyKDAsZSkpO2Y9KEFEYihlKzEsaC5sZW5ndGgrMSksaC5zdWJzdHIoZSsxKSl9c3dpdGNoKFRhZShqYWUoYSxiKSkpe2Nhc2UgMjpjYXNlIDM6e3JldHVybiBjYWUoYSxkLGcsZil9Y2FzZSAwOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OntyZXR1cm4gZmFlKGEsZCxnLGYpfX19fXJldHVybiBudWxsfQpmdW5jdGlvbiBQTGIoYSxiLGMsZCl7dmFyIGUsZixnLGg7aD1jO2ZvcihnPW5ldyBybWIoYi5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMjI0KTtlPUpEKGYuYiw2OCk7aWYoU3koYS5iLmMsZS5iLmMrZS5iLmIpPD0wJiZTeShlLmIuYyxhLmIuYythLmIuYik8PTAmJlN5KGEuYi5kLGUuYi5kK2UuYi5hKTw9MCYmU3koZS5iLmQsYS5iLmQrYS5iLmEpPD0wKXtpZihTeShlLmIuYyxhLmIuYythLmIuYik9PTAmJmQuYTwwfHxTeShlLmIuYytlLmIuYixhLmIuYyk9PTAmJmQuYT4wfHxTeShlLmIuZCxhLmIuZCthLmIuYSk9PTAmJmQuYjwwfHxTeShlLmIuZCtlLmIuYSxhLmIuZCk9PTAmJmQuYj4wKXtoPTA7YnJlYWt9fWVsc2V7aD0kd25kLk1hdGgubWluKGgsWkxiKGEsZSxkKSl9aD0kd25kLk1hdGgubWluKGgsUExiKGEsZixoLGQpKX1yZXR1cm4gaH0KZnVuY3Rpb24gVm1kKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7aWYoYS5iPDIpe3Rocm93IHNjYihuZXcgVGViKCdUaGUgdmVjdG9yIGNoYWluIG11c3QgY29udGFpbiBhdCBsZWFzdCBhIHNvdXJjZSBhbmQgYSB0YXJnZXQgcG9pbnQuJykpfWU9KHJEYihhLmIhPTApLEpEKGEuYS5hLmMsOCkpO3B1ZChiLGUuYSxlLmIpO2k9bmV3IExIZCgoIWIuYSYmKGIuYT1uZXcgcVZkKHUzLGIsNSkpLGIuYSkpO2c9R3RiKGEsMSk7d2hpbGUoZy5hPGEuYi0xKXtoPUpEKFV0YihnKSw4KTtpZihpLmUhPWkuaS5nYygpKXtjPUpEKEFIZChpKSwzNjkpfWVsc2V7Yz0oSHBkKCksZD1uZXcgQnNkLGQpO0pIZChpLGMpfXlzZChjLGguYSxoLmIpfXdoaWxlKGkuZSE9aS5pLmdjKCkpe0FIZChpKTtCSGQoaSl9Zj0ockRiKGEuYiE9MCksSkQoYS5jLmIuYyw4KSk7aXVkKGIsZi5hLGYuYil9CmZ1bmN0aW9uIFpiZShhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo7aj1LZmUoYS5lLnpoKCksYik7Zz1KRChhLmcsMTIyKTtpZihMZmUoYS5lLGIpKXtpZihiLlBpKCkpe2Y9RmJlKGEsYixkLFJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTApO2lmKGY+PTAmJmYhPWMpe3Rocm93IHNjYihuZXcgVGViKE1EZSkpfX1lPTA7Zm9yKGk9MDtpPGEuaTsrK2kpe2g9Z1tpXTtpZihqLlpsKGguSWsoKSkpe2lmKGU9PWMpe3JldHVybiBKRChEQ2QoYSxpLChJZmUoKSxKRChiLDY5KS51aygpP0pEKGQsNzQpOkpmZShiLGQpKSksNzQpfSsrZX19dGhyb3cgc2NiKG5ldyBtZGIoSUVlK2MrT0RlK2UpKX1lbHNle2ZvcihpPTA7aTxhLmk7KytpKXtoPWdbaV07aWYoai5abChoLklrKCkpKXtyZXR1cm4gSWZlKCksSkQoYiw2OSkudWsoKT9oOmgua2QoKX19cmV0dXJuIG51bGx9fQpmdW5jdGlvbiBiamMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Yz0wO2ZvcihlPW5ldyBybWIoKHNEYigwLGEuYy5sZW5ndGgpLEpEKGEuY1swXSwxMDUpKS5nLmIuaik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDExKTtkLnA9YysrfWI9PShSamQoKSx4amQpP1NsYihhLG5ldyBqamMpOlNsYihhLG5ldyBuamMpO2g9MDtrPWEuYy5sZW5ndGgtMTt3aGlsZShoPGspe2c9KHNEYihoLGEuYy5sZW5ndGgpLEpEKGEuY1toXSwxMDUpKTtqPShzRGIoayxhLmMubGVuZ3RoKSxKRChhLmNba10sMTA1KSk7Zj1iPT14amQ/Zy5jOmcuYTtpPWI9PXhqZD9qLmE6ai5jO2RqYyhnLGIsKERnYygpLEJnYyksZik7ZGpjKGosYixBZ2MsaSk7KytoOy0ta31oPT1rJiZkamMoKHNEYihoLGEuYy5sZW5ndGgpLEpEKGEuY1toXSwxMDUpKSxiLChEZ2MoKSx6Z2MpLG51bGwpfQpmdW5jdGlvbiBvRGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2c9bmV3IENEYyhhLGIsYyk7aT1uZXcgQWpiKGQsMCk7ZT1mYWxzZTt3aGlsZShpLmI8aS5kLmdjKCkpe2g9KHJEYihpLmI8aS5kLmdjKCkpLEpEKGkuZC5YYihpLmM9aS5iKyspLDIzOCkpO2lmKGg9PWJ8fGg9PWMpe3RqYihpKX1lbHNlIGlmKCFlJiZCZWIoc0RjKGguZyxoLmRbMF0pLmEpPkJlYihzRGMoZy5nLGcuZFswXSkuYSkpe3JEYihpLmI+MCk7aS5hLlhiKGkuYz0tLWkuYik7empiKGksZyk7ZT10cnVlfWVsc2UgaWYoISFoLmUmJmguZS5nYygpPjApe2Y9KCFoLmUmJihoLmU9bmV3IFVsYiksaC5lKS5LYyhiKTtqPSghaC5lJiYoaC5lPW5ldyBVbGIpLGguZSkuS2MoYyk7aWYoZnx8ail7KCFoLmUmJihoLmU9bmV3IFVsYiksaC5lKS5FYyhnKTsrK2cuY319fWV8fChZQ2IoZC5jLGcpLHRydWUpfQpmdW5jdGlvbiBLWmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtsPWEuYS5pK2EuYS5nLzI7bT1hLmEuaSthLmEuZy8yO289Yi5pK2IuZy8yO3E9Yi5qK2IuZi8yO2g9bmV3IEVkZChvLHEpO2o9SkQoa3NkKGIsKExnZCgpLGZnZCkpLDgpO2ouYT1qLmErbDtqLmI9ai5iK207Zj0oaC5iLWouYikvKGguYS1qLmEpO2Q9aC5iLWYqaC5hO3A9Yy5pK2MuZy8yO3I9Yy5qK2MuZi8yO2k9bmV3IEVkZChwLHIpO2s9SkQoa3NkKGMsZmdkKSw4KTtrLmE9ay5hK2w7ay5iPWsuYittO2c9KGkuYi1rLmIpLyhpLmEtay5hKTtlPWkuYi1nKmkuYTtuPShkLWUpLyhnLWYpO2lmKGouYTxuJiZoLmE8bnx8bjxqLmEmJm48aC5hKXtyZXR1cm4gZmFsc2V9ZWxzZSBpZihrLmE8biYmaS5hPG58fG48ay5hJiZuPGkuYSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfQpmdW5jdGlvbiBpVGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2lmKCFjcihiKSl7aj1jLmJoKChSRChiLDE2KT9KRChiLDE2KS5nYygpOkdyKGIuSmMoKSkpL2EuYXwwKTtqLlNnKEp6ZSwxKTtpPW5ldyBsVGM7aD0wO2lmKGQ9PShUZ2QoKSxQZ2QpfHxkPT1RZ2Qpe2ZvcihnPWIuSmMoKTtnLk9iKCk7KXtlPUpEKGcuUGIoKSwzOSk7aT15bChXQyhPQyhWSSwxKSxOcWUsMjAsMCxbaSxuZXcgZ1JjKGUpXSkpO2g8ZS5mLmEmJihoPWUuZi5hKX19ZWxzZXtmb3IoZz1iLkpjKCk7Zy5PYigpOyl7ZT1KRChnLlBiKCksMzkpO2k9eWwoV0MoT0MoVkksMSksTnFlLDIwLDAsW2ksbmV3IGdSYyhlKV0pKTtoPGUuZi5iJiYoaD1lLmYuYil9fWZvcihmPWIuSmMoKTtmLk9iKCk7KXtlPUpEKGYuUGIoKSwzOSk7Wk1iKGUsKHRVYygpLGdVYyksaCl9ai5UZygpO2lUYyhhLGksYyxkKX19CmZ1bmN0aW9uIFdEYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosazt0aGlzLmE9YTt0aGlzLmI9Yjt0aGlzLmM9Yzt0aGlzLmU9X3UoV0MoT0MoQ00sMSksTnFlLDE3NiwwLFtuZXcgU0RiKGEsYiksbmV3IFNEYihiLGMpLG5ldyBTRGIoYyxhKV0pKTt0aGlzLmY9X3UoV0MoT0MoYjIsMSksaHJlLDgsMCxbYSxiLGNdKSk7dGhpcy5kPShkPUJkZChvZGQodGhpcy5iKSx0aGlzLmEpLGU9QmRkKG9kZCh0aGlzLmMpLHRoaXMuYSksZj1CZGQob2RkKHRoaXMuYyksdGhpcy5iKSxnPWQuYSoodGhpcy5hLmErdGhpcy5iLmEpK2QuYioodGhpcy5hLmIrdGhpcy5iLmIpLGg9ZS5hKih0aGlzLmEuYSt0aGlzLmMuYSkrZS5iKih0aGlzLmEuYit0aGlzLmMuYiksaT0yKihkLmEqZi5iLWQuYipmLmEpLGo9KGUuYipnLWQuYipoKS9pLGs9KGQuYSpoLWUuYSpnKS9pLG5ldyBFZGQoaixrKSl9CmZ1bmN0aW9uIGZXYihhLGIpe3ZhciBjLGQsZSxmLGcsaDtmPWEuYztnPWEuZDtnV2IoYSxudWxsKTtoV2IoYSxudWxsKTtiJiZ5ZGIoTEQoV01iKGcsKElxYygpLFlwYykpKSk/Z1diKGEsQVhiKGcuaSwoRXljKCksQ3ljKSwoUmpkKCksd2pkKSkpOmdXYihhLGcpO2ImJnlkYihMRChXTWIoZiwoSXFjKCkscXFjKSkpKT9oV2IoYSxBWGIoZi5pLChFeWMoKSxCeWMpLChSamQoKSxRamQpKSk6aFdiKGEsZik7Zm9yKGQ9bmV3IHJtYihhLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw3Mik7ZT1KRChXTWIoYywoQndjKCksd3VjKSksMjc2KTtlPT0obmhkKCksbWhkKT9aTWIoYyx3dWMsbGhkKTplPT1saGQmJlpNYihjLHd1YyxtaGQpfWg9eWRiKExEKFdNYihhLChJcWMoKSx4cWMpKSkpO1pNYihhLHhxYywoeGRiKCksaD9mYWxzZTp0cnVlKSk7YS5hPVZkZChhLmEpfQpmdW5jdGlvbiBvUWMoYSxiKXt2YXIgYyxkLGUsZixnO2M9bVFjKEpEKFdNYihiLChrVmMoKSxLVWMpKSw4NikpO2lmKGEuYi5iPT0wKXtyZXR1cm4gbnVsbH1nPUpEKHlCYihGQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5iLDE2KSksbmV3IFhRYyksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbKGxBYigpLGpBYildKSkpLDE1KTtmPUpEKHlCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYi5iLDE2KSksbmV3IEZRYyhnKSksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbakFiXSkpKSwxNSk7ZT1NRCh6dWIoSUJiKEZCYihmLk1jKCksbmV3IEhRYyhjKSksKGpxYigpLGpxYigpLGhxYikpKSk7ZD1KRCh6dWIoQ0JiKEJCYihmLk1jKCksbmV3IEpRYyhjLGUpKSkpLDM5KTtyZXR1cm4gZH0KZnVuY3Rpb24geUljKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2M9cEdiKG5ldyByR2IsYS5mKTtqPWEuaVtiLmMuaS5wXTtuPWEuaVtiLmQuaS5wXTtpPWIuYzttPWIuZDtoPWkuYS5iO2w9bS5hLmI7ai5ifHwoaCs9aS5uLmIpO24uYnx8KGwrPW0ubi5iKTtrPVlEKCR3bmQuTWF0aC5tYXgoMCxoLWwpKTtnPVlEKCR3bmQuTWF0aC5tYXgoMCxsLWgpKTtvPShwPSR3bmQuTWF0aC5tYXgoMSxKRChXTWIoYiwoQndjKCksUHZjKSksMTcpLmEpLHE9a0ljKGIuYy5pLmssYi5kLmkuaykscCpxKTtlPURGYihHRmIoRkZiKEVGYihIRmIobmV3IElGYixvKSxnKSxjKSxKRChOaWIoYS5rLGIuYyksMTIzKSkpO2Y9REZiKEdGYihGRmIoRUZiKEhGYihuZXcgSUZiLG8pLGspLGMpLEpEKE5pYihhLmssYi5kKSwxMjMpKSk7ZD1uZXcgVEljKGUsZik7YS5jW2IucF09ZH0KZnVuY3Rpb24gTE1iKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7ZD0wO2ZvcihmPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7Zi5lIT1mLmkuZ2MoKTspe2U9SkQoQUhkKGYpLDI3KTtnPScnOyghZS5uJiYoZS5uPW5ldyBYMGQoejMsZSwxLDcpKSxlLm4pLmk9PTB8fChnPUpEKG5EZCgoIWUubiYmKGUubj1uZXcgWDBkKHozLGUsMSw3KSksZS5uKSwwKSwxNTMpLmEpO2g9bmV3IHZOYihnKTtVTWIoaCxlKTtaTWIoaCwoVE9iKCksUk9iKSxlKTtoLmE9ZCsrO2guZC5hPWUuaStlLmcvMjtoLmQuYj1lLmorZS5mLzI7aC5lLmE9JHduZC5NYXRoLm1heChlLmcsMSk7aC5lLmI9JHduZC5NYXRoLm1heChlLmYsMSk7SWxiKGIuZSxoKTtnc2IoYy5mLGUsaCk7aT1KRChrc2QoZSwoSU9iKCksdE9iKSksMTAwKTtpPT0oYWpkKCksX2lkKSYmKGk9JGlkKX19CmZ1bmN0aW9uIGdhYyhhKXt2YXIgYixjLGQ7aWYoY2pkKEpEKFdNYihhLChCd2MoKSxFdmMpKSwxMDApKSl7Zm9yKGM9bmV3IHJtYihhLmopO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwxMSk7Yi5qPT0oUmpkKCksUGpkKSYmKGQ9SkQoV01iKGIsKElxYygpLHNxYykpLDkpLGQ/YVpiKGIsSkQoV01iKGQsVHBjKSw2NCkpOmIuZS5jLmxlbmd0aC1iLmcuYy5sZW5ndGg8MD9hWmIoYix3amQpOmFaYihiLFFqZCkpfX1lbHNle2ZvcihjPW5ldyBybWIoYS5qKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMTEpO2Q9SkQoV01iKGIsKElxYygpLHNxYykpLDkpO2Q/YVpiKGIsSkQoV01iKGQsVHBjKSw2NCkpOmIuZS5jLmxlbmd0aC1iLmcuYy5sZW5ndGg8MD9hWmIoYiwoUmpkKCksd2pkKSk6YVpiKGIsKFJqZCgpLFFqZCkpfVpNYihhLEV2YywoYWpkKCksWmlkKSl9fQpmdW5jdGlvbiBvN2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtiLlNnKCdMYXllciBjb25zdHJhaW50IHBvc3Rwcm9jZXNzaW5nJywxKTtpPWEuYjtpZihpLmMubGVuZ3RoIT0wKXtkPShzRGIoMCxpLmMubGVuZ3RoKSxKRChpLmNbMF0sMjUpKTtnPUpEKE1sYihpLGkuYy5sZW5ndGgtMSksMjUpO2M9bmV3IGIkYihhKTtmPW5ldyBiJGIoYSk7bTdiKGEsZCxnLGMsZik7Yy5hLmMubGVuZ3RoPT0wfHwodkRiKDAsaS5jLmxlbmd0aCksV0NiKGkuYywwLGMpKTtmLmEuYy5sZW5ndGg9PTB8fChZQ2IoaS5jLGYpLHRydWUpfWlmKFhNYihhLChJcWMoKSxYcGMpKSl7ZT1uZXcgYiRiKGEpO2g9bmV3IGIkYihhKTtwN2IoYSxlLGgpO2UuYS5jLmxlbmd0aD09MHx8KHZEYigwLGkuYy5sZW5ndGgpLFdDYihpLmMsMCxlKSk7aC5hLmMubGVuZ3RoPT0wfHwoWUNiKGkuYyxoKSx0cnVlKX1iLlRnKCl9CmZ1bmN0aW9uIFVvZShhKXt2YXIgYixjLGQ7c3dpdGNoKGEpe2Nhc2UgOTE6Y2FzZSA5MzpjYXNlIDQ1OmNhc2UgOTQ6Y2FzZSA0NDpjYXNlIDkyOmQ9J1xcJytTdHJpbmcuZnJvbUNoYXJDb2RlKGEmV3JlKTticmVhaztjYXNlIDEyOmQ9J1xcZic7YnJlYWs7Y2FzZSAxMDpkPSdcXG4nO2JyZWFrO2Nhc2UgMTM6ZD0nXFxyJzticmVhaztjYXNlIDk6ZD0nXFx0JzticmVhaztjYXNlIDI3OmQ9J1xcZSc7YnJlYWs7ZGVmYXVsdDppZihhPDMyKXtjPShiPWE+Pj4wLCcwJytiLnRvU3RyaW5nKDE2KSk7ZD0nXFx4JytxZ2IoYyxjLmxlbmd0aC0yLGMubGVuZ3RoKX1lbHNlIGlmKGE+PVBzZSl7Yz0oYj1hPj4+MCwnMCcrYi50b1N0cmluZygxNikpO2Q9J1xcdicrcWdiKGMsYy5sZW5ndGgtNixjLmxlbmd0aCl9ZWxzZSBkPScnK1N0cmluZy5mcm9tQ2hhckNvZGUoYSZXcmUpO31yZXR1cm4gZH0KZnVuY3Rpb24gZDdiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2ZvcihmPW5ldyBybWIoYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjUpO2ZvcihoPW5ldyBybWIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7aWYoZy5rPT0oRFliKCkseFliKSl7aT0oaj1KRChkcyhuZXcgZXMoSXIoaFliKGcpLmEuSmMoKSxuZXcgZXIpKSksMTgpLGs9SkQoZHMobmV3IGVzKElyKGtZYihnKS5hLkpjKCksbmV3IGVyKSkpLDE4KSwheWRiKExEKFdNYihqLChJcWMoKSx4cWMpKSkpfHwheWRiKExEKFdNYihrLHhxYykpKSk/YjpwaWQoYik7YjdiKGcsaSl9Zm9yKGQ9bmV3IGVzKElyKGtZYihnKS5hLkpjKCksbmV3IGVyKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDE4KTtpPXlkYihMRChXTWIoYywoSXFjKCkseHFjKSkpKT9waWQoYik6YjthN2IoYyxpKX19fX0KZnVuY3Rpb24gek9jKGEpe3ZhciBiLGMsZCxlLGYsZzt0aGlzLmU9bmV3IFVsYjt0aGlzLmE9bmV3IFVsYjtmb3IoYz1hLmItMTtjPDM7YysrKXtkdShhLDAsSkQoZnUoYSwwKSw4KSl9aWYoYS5iPDQpe3Rocm93IHNjYihuZXcgVGViKCdBdCAobGVhc3QgZGltZW5zaW9uICsgMSkgY29udHJvbCBwb2ludHMgYXJlIG5lY2Vzc2FyeSEnKSl9ZWxzZXt0aGlzLmI9Mzt0aGlzLmQ9dHJ1ZTt0aGlzLmM9ZmFsc2U7dU9jKHRoaXMsYS5iK3RoaXMuYi0xKTtnPW5ldyBVbGI7Zj1uZXcgcm1iKHRoaXMuZSk7Zm9yKGI9MDtiPHRoaXMuYi0xO2IrKyl7SWxiKGcsTUQocG1iKGYpKSl9Zm9yKGU9R3RiKGEsMCk7ZS5iIT1lLmQuYzspe2Q9SkQoVXRiKGUpLDgpO0lsYihnLE1EKHBtYihmKSkpO0lsYih0aGlzLmEsbmV3IEVPYyhkLGcpKTtzRGIoMCxnLmMubGVuZ3RoKTtnLmMuc3BsaWNlKDAsMSl9fX0KZnVuY3Rpb24gaTNjKGEsYixjLGQsZSl7dmFyIGYsZyxoO2lmKGMuZj49Yi5vJiZjLmY8PWIuZnx8Yi5hKjAuNTw9Yy5mJiZiLmEqMS41Pj1jLmYpe2c9SkQoTWxiKGIubixiLm4uYy5sZW5ndGgtMSksMjA4KTtpZihnLmUrZy5kK2MuZytlPD1kJiYoZj1KRChNbGIoYi5uLGIubi5jLmxlbmd0aC0xKSwyMDgpLGYuZi1hLmYrYy5mPD1hLmJ8fGEuYS5jLmxlbmd0aD09MSkpeyQzYyhiLGMpO3JldHVybiB0cnVlfWVsc2UgaWYoYi5zK2MuZzw9ZCYmKGIudCtiLmQrYy5mK2U8PWEuYnx8YS5hLmMubGVuZ3RoPT0xKSl7SWxiKGIuYixjKTtoPUpEKE1sYihiLm4sYi5uLmMubGVuZ3RoLTEpLDIwOCk7SWxiKGIubixuZXcgcDRjKGIucyxoLmYraC5hK2IuaSxiLmkpKTtrNGMoSkQoTWxiKGIubixiLm4uYy5sZW5ndGgtMSksMjA4KSxjKTthNGMoYixjKTtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBXR2QoYSxiLGMpe3ZhciBkLGUsZixnO2lmKGEuTWooKSl7ZT1udWxsO2Y9YS5OaigpO2Q9YS5GaigxLGc9ckRkKGEsYixjKSxjLGIsZik7aWYoYS5KaigpJiYhKGEuVmkoKSYmZyE9bnVsbD9wYihnLGMpOlhEKGcpPT09WEQoYykpKXtnIT1udWxsJiYoZT1hLkxqKGcsZSkpO2U9YS5LaihjLGUpO2EuUWooKSYmKGU9YS5UaihnLGMsZSkpO2lmKCFlKXthLkdqKGQpfWVsc2V7ZS5raihkKTtlLmxqKCl9fWVsc2V7YS5RaigpJiYoZT1hLlRqKGcsYyxlKSk7aWYoIWUpe2EuR2ooZCl9ZWxzZXtlLmtqKGQpO2UubGooKX19cmV0dXJuIGd9ZWxzZXtnPXJEZChhLGIsYyk7aWYoYS5KaigpJiYhKGEuVmkoKSYmZyE9bnVsbD9wYihnLGMpOlhEKGcpPT09WEQoYykpKXtlPW51bGw7ZyE9bnVsbCYmKGU9YS5MaihnLG51bGwpKTtlPWEuS2ooYyxlKTshIWUmJmUubGooKX1yZXR1cm4gZ319CmZ1bmN0aW9uIEJtYyhhLGIpe3ZhciBjLGQsZSxmLGc7Yi5TZygnUGF0aC1MaWtlIEdyYXBoIFdyYXBwaW5nJywxKTtpZihhLmIuYy5sZW5ndGg9PTApe2IuVGcoKTtyZXR1cm59ZT1uZXcgaW1jKGEpO2c9KGUuaT09bnVsbCYmKGUuaT1kbWMoZSxuZXcga21jKSksQmViKGUuaSkqZS5mKTtjPWcvKGUuaT09bnVsbCYmKGUuaT1kbWMoZSxuZXcga21jKSksQmViKGUuaSkpO2lmKGUuYj5jKXtiLlRnKCk7cmV0dXJufXN3aXRjaChKRChXTWIoYSwoQndjKCksdXdjKSksMzQ3KS5nKXtjYXNlIDI6Zj1uZXcgdW1jO2JyZWFrO2Nhc2UgMDpmPW5ldyBqbGM7YnJlYWs7ZGVmYXVsdDpmPW5ldyB4bWM7fWQ9Zi5tZyhhLGUpO2lmKCFmLm5nKCkpe3N3aXRjaChKRChXTWIoYSxBd2MpLDM0OCkuZyl7Y2FzZSAyOmQ9R21jKGUsZCk7YnJlYWs7Y2FzZSAxOmQ9RW1jKGUsZCk7fX1BbWMoYSxlLGQpO2IuVGcoKX0KZnVuY3Rpb24gZUIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2IlPTI0O2lmKGEucS5nZXRIb3VycygpIT1iKXtkPW5ldyAkd25kLkRhdGUoYS5xLmdldFRpbWUoKSk7ZC5zZXREYXRlKGQuZ2V0RGF0ZSgpKzEpO2g9YS5xLmdldFRpbWV6b25lT2Zmc2V0KCktZC5nZXRUaW1lem9uZU9mZnNldCgpO2lmKGg+MCl7aT1oLzYwfDA7aj1oJTYwO2U9YS5xLmdldERhdGUoKTtjPWEucS5nZXRIb3VycygpO2MraT49MjQmJisrZTtmPW5ldyAkd25kLkRhdGUoYS5xLmdldEZ1bGxZZWFyKCksYS5xLmdldE1vbnRoKCksZSxiK2ksYS5xLmdldE1pbnV0ZXMoKStqLGEucS5nZXRTZWNvbmRzKCksYS5xLmdldE1pbGxpc2Vjb25kcygpKTthLnEuc2V0VGltZShmLmdldFRpbWUoKSl9fWc9YS5xLmdldFRpbWUoKTthLnEuc2V0VGltZShnKzM2MDAwMDApO2EucS5nZXRIb3VycygpIT1iJiZhLnEuc2V0VGltZShnKX0KZnVuY3Rpb24gbkVjKGEsYil7dmFyIGMsZCxlLGY7QnZiKGEuZCxhLmUpO2EuYy5hLiRiKCk7aWYoQmViKE1EKFdNYihiLmosKEJ3YygpLFp0YykpKSkhPTB8fEJlYihNRChXTWIoYi5qLFp0YykpKSE9MCl7Yz1temU7WEQoV01iKGIuaixjdWMpKSE9PVhEKChueWMoKSxreWMpKSYmWk1iKGIuaiwoSXFjKCksVnBjKSwoeGRiKCksdHJ1ZSkpO2Y9SkQoV01iKGIuaixqd2MpLDE3KS5hO2ZvcihlPTA7ZTxmO2UrKyl7ZD14RWMoYSxiKTtpZihkPGMpe2M9ZDtBRWMoYSk7aWYoYz09MCl7YnJlYWt9fX19ZWxzZXtjPUhxZTtYRChXTWIoYi5qLGN1YykpIT09WEQoKG55YygpLGt5YykpJiZaTWIoYi5qLChJcWMoKSxWcGMpLCh4ZGIoKSx0cnVlKSk7Zj1KRChXTWIoYi5qLGp3YyksMTcpLmE7Zm9yKGU9MDtlPGY7ZSsrKXtkPXlFYyhhLGIpO2lmKGQ8Yyl7Yz1kO0FFYyhhKTtpZihjPT0wKXticmVha319fX19CmZ1bmN0aW9uIEZtYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7Zz1uZXcgVWxiO2g9MDtjPTA7aT0wO3doaWxlKGg8Yi5jLmxlbmd0aC0xJiZjPGEuZ2MoKSl7ZD1KRChhLlhiKGMpLDE3KS5hK2k7d2hpbGUoKHNEYihoKzEsYi5jLmxlbmd0aCksSkQoYi5jW2grMV0sMTcpKS5hPGQpeysraH1qPTA7Zj1kLShzRGIoaCxiLmMubGVuZ3RoKSxKRChiLmNbaF0sMTcpKS5hO2U9KHNEYihoKzEsYi5jLmxlbmd0aCksSkQoYi5jW2grMV0sMTcpKS5hLWQ7Zj5lJiYrK2o7SWxiKGcsKHNEYihoK2osYi5jLmxlbmd0aCksSkQoYi5jW2gral0sMTcpKSk7aSs9KHNEYihoK2osYi5jLmxlbmd0aCksSkQoYi5jW2gral0sMTcpKS5hLWQ7KytjO3doaWxlKGM8YS5nYygpJiZKRChhLlhiKGMpLDE3KS5hK2k8PShzRGIoaCtqLGIuYy5sZW5ndGgpLEpEKGIuY1toK2pdLDE3KSkuYSl7KytjfWgrPTEran1yZXR1cm4gZ30KZnVuY3Rpb24gWUFjKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoZz1uZXcgZXMoSXIoaFliKGIpLmEuSmMoKSxuZXcgZXIpKTtjcyhnKTspe2Y9SkQoZHMoZyksMTgpO2lmKGEuZi5iPT0wKXtlPWYuYy5pLms9PShEWWIoKSxBWWIpJiYhIWYuYy5pLmMmJmYuYy5pLmMucD09YS5jO2lmKGNzKG5ldyBlcyhJcihoWWIoZi5jLmkpLmEuSmMoKSxuZXcgZXIpKSkpe2M9SkQoZHMobmV3IGVzKElyKGhZYihmLmMuaSkuYS5KYygpLG5ldyBlcikpKSwxOCkuYy5pLmM7ZD1mLmMuaS5rPT14WWImJiEhYyYmYy5wPT1hLmN9ZWxzZXtkPWZhbHNlfX1lbHNle2U9Zi5jLmkuaz09KERZYigpLEFZYikmJmYuYy5pLnA9PWEuYztkPWYuYy5pLms9PXhZYiYmSkQoZHMobmV3IGVzKElyKGhZYihmLmMuaSkuYS5KYygpLG5ldyBlcikpKSwxOCkuYy5pLnA9PWEuY31pZihlfHxkKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfQpmdW5jdGlvbiBHQmMoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7bT1uZXcgVWxiO3I9VHgoZCk7cT1iKmEuYTtsPTA7bz0wO2Y9bmV3IFFyYjtnPW5ldyBRcmI7aD1uZXcgVWxiO3M9MDt0PTA7bj0wO3A9MDtqPTA7az0wO3doaWxlKHIuYS5nYygpIT0wKXtpPUtCYyhyLGUsZyk7aWYoaSl7ci5hLkFjKGkpIT1udWxsO1lDYihoLmMsaSk7Zi5hLnljKGksZik7bz1hLmZbaS5wXTtzKz1hLmVbaS5wXS1vKmEuYjtsPWEuY1tpLnBdO3QrPWwqYS5iO2srPW8qYS5iO3ArPWEuZVtpLnBdfWlmKCFpfHxyLmEuZ2MoKT09MHx8cz49cSYmYS5lW2kucF0+byphLmJ8fHQ+PWMqcSl7WUNiKG0uYyxoKTtoPW5ldyBVbGI7eGUoZyxmKTtmLmEuJGIoKTtqLT1rO249JHduZC5NYXRoLm1heChuLGoqYS5iK3ApO2orPXQ7cz10O3Q9MDtrPTA7cD0wfX1yZXR1cm4gbmV3IHhvZChuLG0pfQpmdW5jdGlvbiBLVGQoYSl7dmFyIGIsYyxkLGUsZixnLGg7aWYoIWEuZCl7aD1uZXcgUVdkO2I9RFRkO2Y9Yi5hLnljKGEsYik7aWYoZj09bnVsbCl7Zm9yKGQ9bmV3IENIZChVVGQoYSkpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSwyOSk7dkNkKGgsS1RkKGMpKX1iLmEuQWMoYSkhPW51bGw7Yi5hLmdjKCk9PTAmJnVuZGVmaW5lZH1nPWguaTtmb3IoZT0oIWEucSYmKGEucT1uZXcgWDBkKGs2LGEsMTEsMTApKSxuZXcgQ0hkKGEucSkpO2UuZSE9ZS5pLmdjKCk7KytnKXtKRChBSGQoZSksNDAwKX12Q2QoaCwoIWEucSYmKGEucT1uZXcgWDBkKGs2LGEsMTEsMTApKSxhLnEpKTtzRGQoaCk7YS5kPW5ldyBnV2QoKEpEKG5EZChTVGQoKEdPZCgpLEZPZCkubyksOSksMTkpLGguaSksaC5nKTthLmU9SkQoaC5nLDY3Myk7YS5lPT1udWxsJiYoYS5lPUVUZCk7VFRkKGEpLmImPS0xN31yZXR1cm4gYS5kfQpmdW5jdGlvbiBGYmUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2o9S2ZlKGEuZS56aCgpLGIpO2k9MDtlPUpEKGEuZywxMjIpO0lmZSgpO2lmKEpEKGIsNjkpLnVrKCkpe2ZvcihnPTA7ZzxhLmk7KytnKXtmPWVbZ107aWYoai5abChmLklrKCkpKXtpZihwYihmLGMpKXtyZXR1cm4gaX0rK2l9fX1lbHNlIGlmKGMhPW51bGwpe2ZvcihoPTA7aDxhLmk7KytoKXtmPWVbaF07aWYoai5abChmLklrKCkpKXtpZihwYihjLGYua2QoKSkpe3JldHVybiBpfSsraX19aWYoZCl7aT0wO2ZvcihnPTA7ZzxhLmk7KytnKXtmPWVbZ107aWYoai5abChmLklrKCkpKXtpZihYRChjKT09PVhEKFZiZShhLEpEKGYua2QoKSw1NykpKSl7cmV0dXJuIGl9KytpfX19fWVsc2V7Zm9yKGc9MDtnPGEuaTsrK2cpe2Y9ZVtnXTtpZihqLlpsKGYuSWsoKSkpe2lmKGYua2QoKT09bnVsbCl7cmV0dXJuIGl9KytpfX19cmV0dXJuIC0xfQpmdW5jdGlvbiBxZmUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2lmKGMuVGgoYikpe2s9KG49Yiwhbj9udWxsOkpEKGQsNTIpLmNpKG4pKTtpZihrKXtwPWMuSmgoYixhLmEpO289Yi50O2lmKG8+MXx8bz09LTEpe2w9SkQocCw3MSk7bT1KRChrLDcxKTtpZihsLmRjKCkpe20uJGIoKX1lbHNle2c9ISFzMWQoYik7Zj0wO2ZvcihoPWEuYT9sLkpjKCk6bC5GaSgpO2guT2IoKTspe2o9SkQoaC5QYigpLDU3KTtlPUpEKFRzYihhLGopLDU3KTtpZighZSl7aWYoYS5iJiYhZyl7bS5EaShmLGopOysrZn19ZWxzZXtpZihnKXtpPW0uYmQoZSk7aT09LTE/bS5EaShmLGUpOmYhPWkmJm0uUmkoZixlKX1lbHNle20uRGkoZixlKX0rK2Z9fX19ZWxzZXtpZihwPT1udWxsKXtrLldiKG51bGwpfWVsc2V7ZT1Uc2IoYSxwKTtlPT1udWxsP2EuYiYmIXMxZChiKSYmay5XYihwKTprLldiKGUpfX19fX0KZnVuY3Rpb24gZjNiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtjPW5ldyBtM2I7Zm9yKGU9bmV3IGVzKElyKGhZYihiKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDE4KTtpZihlV2IoZCkpe2NvbnRpbnVlfWg9ZC5jLmk7aWYoZzNiKGgsZDNiKSl7aj1oM2IoYSxoLGQzYixjM2IpO2lmKGo9PS0xKXtjb250aW51ZX1jLmI9JHduZC5NYXRoLm1heChjLmIsaik7IWMuYSYmKGMuYT1uZXcgVWxiKTtJbGIoYy5hLGgpfX1mb3IoZz1uZXcgZXMoSXIoa1liKGIpLmEuSmMoKSxuZXcgZXIpKTtjcyhnKTspe2Y9SkQoZHMoZyksMTgpO2lmKGVXYihmKSl7Y29udGludWV9aT1mLmQuaTtpZihnM2IoaSxjM2IpKXtqPWgzYihhLGksYzNiLGQzYik7aWYoaj09LTEpe2NvbnRpbnVlfWMuZD0kd25kLk1hdGgubWF4KGMuZCxqKTshYy5jJiYoYy5jPW5ldyBVbGIpO0lsYihjLmMsaSl9fXJldHVybiBjfQpmdW5jdGlvbiBDNWIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7aWYoYy5kLmk9PWIuaSl7cmV0dXJufWU9bmV3IHRZYihhKTtyWWIoZSwoRFliKCkseVliKSk7Wk1iKGUsKElxYygpLGtxYyksYyk7Wk1iKGUsKEJ3YygpLEV2YyksKGFqZCgpLFhpZCkpO1lDYihkLmMsZSk7Zz1uZXcgYlpiO19ZYihnLGUpO2FaYihnLChSamQoKSxRamQpKTtoPW5ldyBiWmI7X1liKGgsZSk7YVpiKGgsd2pkKTtrPWMuZDtoV2IoYyxnKTtmPW5ldyBrV2I7VU1iKGYsYyk7Wk1iKGYsUnVjLG51bGwpO2dXYihmLGgpO2hXYihmLGspO2o9bmV3IEFqYihjLmIsMCk7d2hpbGUoai5iPGouZC5nYygpKXtpPShyRGIoai5iPGouZC5nYygpKSxKRChqLmQuWGIoai5jPWouYisrKSw3MikpO2lmKFhEKFdNYihpLHd1YykpPT09WEQoKG5oZCgpLGxoZCkpKXtaTWIoaSxQcGMsYyk7dGpiKGopO0lsYihmLmIsaSl9fUU1YihlLGcsaCl9CmZ1bmN0aW9uIEI1YihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztpZihjLmMuaT09Yi5pKXtyZXR1cm59ZT1uZXcgdFliKGEpO3JZYihlLChEWWIoKSx5WWIpKTtaTWIoZSwoSXFjKCksa3FjKSxjKTtaTWIoZSwoQndjKCksRXZjKSwoYWpkKCksWGlkKSk7WUNiKGQuYyxlKTtnPW5ldyBiWmI7X1liKGcsZSk7YVpiKGcsKFJqZCgpLFFqZCkpO2g9bmV3IGJaYjtfWWIoaCxlKTthWmIoaCx3amQpO2hXYihjLGcpO2Y9bmV3IGtXYjtVTWIoZixjKTtaTWIoZixSdWMsbnVsbCk7Z1diKGYsaCk7aFdiKGYsYik7RTViKGUsZyxoKTtqPW5ldyBBamIoYy5iLDApO3doaWxlKGouYjxqLmQuZ2MoKSl7aT0ockRiKGouYjxqLmQuZ2MoKSksSkQoai5kLlhiKGouYz1qLmIrKyksNzIpKTtrPUpEKFdNYihpLHd1YyksMjc2KTtpZihrPT0obmhkKCksbGhkKSl7WE1iKGksUHBjKXx8Wk1iKGksUHBjLGMpO3RqYihqKTtJbGIoZi5iLGkpfX19CmZ1bmN0aW9uIEppYihhKXtDaWIoKTt2YXIgYixjLGQsZTtiPVlEKGEpO2lmKGE8QmliLmxlbmd0aCl7cmV0dXJuIEJpYltiXX1lbHNlIGlmKGE8PTUwKXtyZXR1cm4gUGhiKChHaGIoKSxEaGIpLGIpfWVsc2UgaWYoYTw9VnJlKXtyZXR1cm4gUWhiKFBoYihBaWJbMV0sYiksYil9aWYoYT4xMDAwMDAwKXt0aHJvdyBzY2IobmV3IGtkYigncG93ZXIgb2YgdGVuIHRvbyBiaWcnKSl9aWYoYTw9SHFlKXtyZXR1cm4gUWhiKFBoYihBaWJbMV0sYiksYil9ZD1QaGIoQWliWzFdLEhxZSk7ZT1kO2M9emNiKGEtSHFlKTtiPVlEKGElSHFlKTt3aGlsZSh2Y2IoYyxIcWUpPjApe2U9TmhiKGUsZCk7Yz1NY2IoYyxIcWUpfWU9TmhiKGUsUGhiKEFpYlsxXSxiKSk7ZT1RaGIoZSxIcWUpO2M9emNiKGEtSHFlKTt3aGlsZSh2Y2IoYyxIcWUpPjApe2U9UWhiKGUsSHFlKTtjPU1jYihjLEhxZSl9ZT1RaGIoZSxiKTtyZXR1cm4gZX0KZnVuY3Rpb24gRTJiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrO2ZvcihpPW5ldyBybWIoYS5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksOSk7aWYoaC5rIT0oRFliKCksd1liKSl7Y29udGludWV9ZT1KRChXTWIoaCwoSXFjKCksVHBjKSksNjQpO2lmKGU9PShSamQoKSx3amQpfHxlPT1RamQpe2ZvcihkPW5ldyBlcyhJcihlWWIoaCkuYS5KYygpLG5ldyBlcikpO2NzKGQpOyl7Yz1KRChkcyhkKSwxOCk7Yj1jLmE7aWYoYi5iPT0wKXtjb250aW51ZX1qPWMuYztpZihqLmk9PWgpe2Y9KHJEYihiLmIhPTApLEpEKGIuYS5hLmMsOCkpO2YuYj1LZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbai5pLm4sai5uLGouYV0pKS5ifWs9Yy5kO2lmKGsuaT09aCl7Zz0ockRiKGIuYiE9MCksSkQoYi5jLmIuYyw4KSk7Zy5iPUtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtrLmkubixrLm4say5hXSkpLmJ9fX19fQpmdW5jdGlvbiBrZmMoYSxiLGMsZCl7dmFyIGUsZixnO3RoaXMuaj1uZXcgVWxiO3RoaXMuaz1uZXcgVWxiO3RoaXMuYj1uZXcgVWxiO3RoaXMuYz1uZXcgVWxiO3RoaXMuZT1uZXcgZmRkO3RoaXMuaT1uZXcgUmRkO3RoaXMuZj1uZXcgYkZiO3RoaXMuZD1uZXcgVWxiO3RoaXMuZz1uZXcgVWxiO0lsYih0aGlzLmIsYSk7SWxiKHRoaXMuYixiKTt0aGlzLmUuYz0kd25kLk1hdGgubWluKGEuYSxiLmEpO3RoaXMuZS5kPSR3bmQuTWF0aC5taW4oYS5iLGIuYik7dGhpcy5lLmI9JHduZC5NYXRoLmFicyhhLmEtYi5hKTt0aGlzLmUuYT0kd25kLk1hdGguYWJzKGEuYi1iLmIpO2U9SkQoV01iKGQsKEJ3YygpLFJ1YykpLDc3KTtpZihlKXtmb3IoZz1HdGIoZSwwKTtnLmIhPWcuZC5jOyl7Zj1KRChVdGIoZyksOCk7cUViKGYuYSxhLmEpJiZBdGIodGhpcy5pLGYpfX0hIWMmJklsYih0aGlzLmosYyk7SWxiKHRoaXMuayxkKX0KZnVuY3Rpb24geU1jKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrO2g9LTE7Zm9yKGs9bmV3IHJtYihhKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksMTE2KTtqLmc9aC0tO2U9UGNiKGxCYihIQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGouZiwxNikpLG5ldyBBTWMpLG5ldyBDTWMpKS5kKTtmPVBjYihsQmIoSEJiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihqLmssMTYpKSxuZXcgRU1jKSxuZXcgR01jKSkuZCk7Zz1lO2k9ZjtpZighZCl7Zz1QY2IobEJiKEhCYihuZXcgUkJiKG51bGwsbmV3IEd2YihqLmYsMTYpKSxuZXcgSU1jKSkuZCk7aT1QY2IobEJiKEhCYihuZXcgUkJiKG51bGwsbmV3IEd2YihqLmssMTYpKSxuZXcgS01jKSkuZCl9ai5kPWc7ai5hPWU7ai5pPWk7ai5iPWY7aT09MD8oRHRiKGMsaixjLmMuYixjLmMpLHRydWUpOmc9PTAmJihEdGIoYixqLGIuYy5iLGIuYyksdHJ1ZSl9fQpmdW5jdGlvbiBiN2IoYSxiKXt2YXIgYyxkLGUsZixnLGg7aWYoYS5rPT0oRFliKCkseFliKSl7Yz1hLms9PXhZYiYmIVBCYihCQmIoSkQoV01iKGEsKElxYygpLHdxYykpLDE1KS5NYygpLG5ldyBEemIobmV3IEpZYikpKS56ZCgod0JiKCksdkJiKSk/KG9pZCgpLG1pZCk6YjtaTWIoYSwoSXFjKCksY3FjKSxjKTtpZihjIT0ob2lkKCksbGlkKSl7ZD1KRChXTWIoYSxrcWMpLDE4KTtoPUJlYihNRChXTWIoZCwoQndjKCksRnVjKSkpKTtnPTA7aWYoYz09a2lkKXtnPWEuby5iLSR3bmQuTWF0aC5jZWlsKGgvMil9ZWxzZSBpZihjPT1taWQpe2c9JHduZC5NYXRoLmNlaWwoYS5vLmItQmViKE1EKFdNYihnWWIoYSksWXZjKSkpLWgpLzI7YS5vLmItPUJlYihNRChXTWIoZ1liKGEpLFl2YykpKTthLm8uYi09aH1mb3IoZj1uZXcgcm1iKGEuaik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDExKTtlLm4uYj1nfX19fQpmdW5jdGlvbiAkS2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtlPXRydWU7Zm9yKGc9bmV3IHJtYihhLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwyNSk7aj1Mc2U7az1udWxsO2ZvcihpPW5ldyBybWIoZi5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksOSk7bD1CZWIoYi5wW2gucF0pK0JlYihiLmRbaC5wXSktaC5kLmQ7ZD1CZWIoYi5wW2gucF0pK0JlYihiLmRbaC5wXSkraC5vLmIraC5kLmE7aWYobD5qJiZkPmope2s9aDtqPUJlYihiLnBbaC5wXSkrQmViKGIuZFtoLnBdKStoLm8uYitoLmQuYX1lbHNle2U9ZmFsc2U7Yy5aZygpJiZjLl9nKCdiayBub2RlIHBsYWNlbWVudCBicmVha3Mgb24gJytoKycgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBhZnRlciAnK2spO2JyZWFrfX1pZighZSl7YnJlYWt9fWMuWmcoKSYmYy5fZyhiKycgaXMgZmVhc2libGU6ICcrZSk7cmV0dXJuIGV9CmZ1bmN0aW9uIFE4YihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG07Zj1uZXcgdFliKGEpO3JZYihmLChEWWIoKSxCWWIpKTtaTWIoZiwoQndjKCksRXZjKSwoYWpkKCksWGlkKSk7ZT0wO2lmKGIpe2c9bmV3IGJaYjtaTWIoZywoSXFjKCksa3FjKSxiKTtaTWIoZixrcWMsYi5pKTthWmIoZywoUmpkKCksUWpkKSk7X1liKGcsZik7bT1DWGIoYi5lKTtmb3Ioaj1tLGs9MCxsPWoubGVuZ3RoO2s8bDsrK2spe2k9altrXTtoV2IoaSxnKX1aTWIoYixzcWMsZik7KytlfWlmKGMpe2g9bmV3IGJaYjtaTWIoZiwoSXFjKCksa3FjKSxjLmkpO1pNYihoLGtxYyxjKTthWmIoaCwoUmpkKCksd2pkKSk7X1liKGgsZik7bT1DWGIoYy5nKTtmb3Ioaj1tLGs9MCxsPWoubGVuZ3RoO2s8bDsrK2spe2k9altrXTtnV2IoaSxoKX1aTWIoYyxzcWMsZik7KytlfVpNYihmLChJcWMoKSxLcGMpLGpmYihlKSk7WUNiKGQuYyxmKTtyZXR1cm4gZn0KZnVuY3Rpb24gUWFkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2ZvcihjPShqPShuZXcgWmpiKGEuYy5iKSkuYS52YygpLkpjKCksbmV3IGNrYihqKSk7Yy5hLk9iKCk7KXtiPShoPUpEKGMuYS5QYigpLDQzKSxKRChoLmtkKCksMTQ5KSk7ZT1iLmE7ZT09bnVsbCYmKGU9JycpO2Q9SWFkKGEuYyxlKTshZCYmZS5sZW5ndGg9PTAmJihkPVVhZChhKSk7ISFkJiYheWUoZC5jLGIsZmFsc2UpJiZBdGIoZC5jLGIpfWZvcihnPUd0YihhLmEsMCk7Zy5iIT1nLmQuYzspe2Y9SkQoVXRiKGcpLDQ3Myk7az1KYWQoYS5jLGYuYSk7bj1KYWQoYS5jLGYuYik7ISFrJiYhIW4mJkF0YihrLmMsbmV3IHhvZChuLGYuYykpfUx0YihhLmEpO2ZvcihtPUd0YihhLmIsMCk7bS5iIT1tLmQuYzspe2w9SkQoVXRiKG0pLDQ3Myk7Yj1HYWQoYS5jLGwuYSk7aT1KYWQoYS5jLGwuYik7ISFiJiYhIWkmJl85YyhiLGksbC5jKX1MdGIoYS5iKX0KZnVuY3Rpb24geEEoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtnPW5ldyB2QjtqPVdDKE9DKGNFLDEpLGlzZSwzMCwxNSxbMF0pO2U9LTE7Zj0wO2Q9MDtmb3IoaT0wO2k8YS5iLmMubGVuZ3RoOysraSl7az1KRChNbGIoYS5iLGkpLDQzMSk7aWYoay5iPjApe2lmKGU8MCYmay5hKXtlPWk7Zj1qWzBdO2Q9MH1pZihlPj0wKXtoPWsuYjtpZihpPT1lKXtoLT1kKys7aWYoaD09MCl7cmV0dXJuIDB9fWlmKCFFQShiLGosayxoLGcpKXtpPWUtMTtqWzBdPWY7Y29udGludWV9fWVsc2V7ZT0tMTtpZighRUEoYixqLGssMCxnKSl7cmV0dXJuIDB9fX1lbHNle2U9LTE7aWYoX2ZiKGsuYywwKT09MzIpe2w9alswXTtDQShiLGopO2lmKGpbMF0+bCl7Y29udGludWV9fWVsc2UgaWYob2diKGIsay5jLGpbMF0pKXtqWzBdKz1rLmMubGVuZ3RoO2NvbnRpbnVlfXJldHVybiAwfX1pZighdUIoZyxjKSl7cmV0dXJuIDB9cmV0dXJuIGpbMF19CmZ1bmN0aW9uIEFQYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07az1uZXcgZHZiKG5ldyBRUGIoYykpO2g9U0MocGNiLFZ0ZSwzMCxhLmYuZS5jLmxlbmd0aCwxNiwxKTtKbWIoaCxoLmxlbmd0aCk7Y1tiLmFdPTA7Zm9yKGo9bmV3IHJtYihhLmYuZSk7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDE1MSk7aS5hIT1iLmEmJihjW2kuYV09SHFlKTt5RGIoX3ViKGssaSksWHNlKX13aGlsZShrLmIuYy5sZW5ndGghPTApe2w9SkQoYXZiKGspLDE1MSk7aFtsLmFdPXRydWU7Zm9yKGY9bnUobmV3IG91KGEuYixsKSwwKTtmLmM7KXtlPUpEKEh1KGYpLDI4OCk7bT1EUGIoZSxsKTtpZihoW20uYV0pe2NvbnRpbnVlfVhNYihlLChuUGIoKSxiUGIpKT8oZz1CZWIoTUQoV01iKGUsYlBiKSkpKTooZz1hLmMpO2Q9Y1tsLmFdK2c7aWYoZDxjW20uYV0pe2NbbS5hXT1kO2J2YihrLG0pO3lEYihfdWIoayxtKSxYc2UpfX19fQpmdW5jdGlvbiByTmIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtjPXlkYihMRChXTWIoYSwoSU9iKCksaU9iKSkpKTtmPWEuYS5jLmQ7aD1hLmEuZC5kO2lmKGMpe2c9d2RkKEJkZChuZXcgRWRkKGguYSxoLmIpLGYpLDAuNSk7aT13ZGQob2RkKGEuZSksMC41KTtiPUJkZChtZGQobmV3IEVkZChmLmEsZi5iKSxnKSxpKTt6ZGQoYS5kLGIpfWVsc2V7ZT1CZWIoTUQoV01iKGEuYSxBT2IpKSk7ZD1hLmQ7aWYoZi5hPj1oLmEpe2lmKGYuYj49aC5iKXtkLmE9aC5hKyhmLmEtaC5hKS8yK2U7ZC5iPWguYisoZi5iLWguYikvMi1lLWEuZS5ifWVsc2V7ZC5hPWguYSsoZi5hLWguYSkvMitlO2QuYj1mLmIrKGguYi1mLmIpLzIrZX19ZWxzZXtpZihmLmI+PWguYil7ZC5hPWYuYSsoaC5hLWYuYSkvMitlO2QuYj1oLmIrKGYuYi1oLmIpLzIrZX1lbHNle2QuYT1mLmErKGguYS1mLmEpLzIrZTtkLmI9Zi5iKyhoLmItZi5iKS8yLWUtYS5lLmJ9fX19CmZ1bmN0aW9uIExUZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpO2lmKCFhLmYpe2k9bmV3IHZXZDtoPW5ldyB2V2Q7Yj1EVGQ7Zz1iLmEueWMoYSxiKTtpZihnPT1udWxsKXtmb3IoZj1uZXcgQ0hkKFVUZChhKSk7Zi5lIT1mLmkuZ2MoKTspe2U9SkQoQUhkKGYpLDI5KTt2Q2QoaSxMVGQoZSkpfWIuYS5BYyhhKSE9bnVsbDtiLmEuZ2MoKT09MCYmdW5kZWZpbmVkfWZvcihkPSghYS5zJiYoYS5zPW5ldyBYMGQocTYsYSwyMSwxNykpLG5ldyBDSGQoYS5zKSk7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoQUhkKGQpLDE3OCk7UkQoYywxMDEpJiZ0Q2QoaCxKRChjLDE5KSl9c0RkKGgpO2Eucj1uZXcgTldkKGEsKEpEKG5EZChTVGQoKEdPZCgpLEZPZCkubyksNiksMTkpLGguaSksaC5nKTt2Q2QoaSxhLnIpO3NEZChpKTthLmY9bmV3IGdXZCgoSkQobkRkKFNUZChGT2QubyksNSksMTkpLGkuaSksaS5nKTtUVGQoYSkuYiY9LTN9cmV0dXJuIGEuZn0KZnVuY3Rpb24gSFRkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7aWYoIWEuYSl7YS5vPW51bGw7aT1uZXcgeldkKGEpO2I9bmV3IERXZDtjPURUZDtoPWMuYS55YyhhLGMpO2lmKGg9PW51bGwpe2ZvcihnPW5ldyBDSGQoVVRkKGEpKTtnLmUhPWcuaS5nYygpOyl7Zj1KRChBSGQoZyksMjkpO3ZDZChpLEhUZChmKSl9Yy5hLkFjKGEpIT1udWxsO2MuYS5nYygpPT0wJiZ1bmRlZmluZWR9Zm9yKGU9KCFhLnMmJihhLnM9bmV3IFgwZChxNixhLDIxLDE3KSksbmV3IENIZChhLnMpKTtlLmUhPWUuaS5nYygpOyl7ZD1KRChBSGQoZSksMTc4KTtSRChkLDMzMCkmJnRDZChiLEpEKGQsMzUpKX1zRGQoYik7YS5rPW5ldyBJV2QoYSwoSkQobkRkKFNUZCgoR09kKCksRk9kKS5vKSw3KSwxOSksYi5pKSxiLmcpO3ZDZChpLGEuayk7c0RkKGkpO2EuYT1uZXcgZ1dkKChKRChuRGQoU1RkKEZPZC5vKSw0KSwxOSksaS5pKSxpLmcpO1RUZChhKS5iJj0tMn1yZXR1cm4gYS5hfQpmdW5jdGlvbiBVdWQoKXtVdWQ9WmNiO1N1ZD1XQyhPQyhfRCwxKSxVcmUsMzAsMTUsWzQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDY1LDY2LDY3LDY4LDY5LDcwXSk7VHVkPW5ldyBSZWdFeHAoJ1sgXHRcblxyXGZdKycpO3RyeXtSdWQ9V0MoT0MoXzYsMSksTnFlLDIwNjAsMCxbbmV3IHhaZCgoT0EoKSxRQSgieXl5eS1NTS1kZCdUJ0hIOm1tOnNzJy4nU1NTWiIsVEEoKFNBKCksU0EoKSxSQSkpKSkpLG5ldyB4WmQoUUEoInl5eXktTU0tZGQnVCdISDptbTpzcycuJ1NTUyIsVEEoKG51bGwsUkEpKSkpLG5ldyB4WmQoUUEoInl5eXktTU0tZGQnVCdISDptbTpzcyIsVEEoKG51bGwsUkEpKSkpLG5ldyB4WmQoUUEoInl5eXktTU0tZGQnVCdISDptbSIsVEEoKG51bGwsUkEpKSkpLG5ldyB4WmQoUUEoJ3l5eXktTU0tZGQnLFRBKChudWxsLFJBKSkpKV0pfWNhdGNoKGEpe2E9cmNiKGEpO2lmKCFSRChhLDgwKSl0aHJvdyBzY2IoYSl9fQpmdW5jdGlvbiB4RWMoYSxiKXt2YXIgYyxkLGUsZjtlPXl2YihhLmQsMSkhPTA7ZD1wRWMoYSxiKTtpZihkPT0wJiZ5ZGIoTEQoV01iKGIuaiwoSXFjKCksVnBjKSkpKSl7cmV0dXJuIDB9IXlkYihMRChXTWIoYi5qLChJcWMoKSxWcGMpKSkpJiYheWRiKExEKFdNYihiLmoseXFjKSkpfHxYRChXTWIoYi5qLChCd2MoKSxjdWMpKSk9PT1YRCgobnljKCksa3ljKSk/Yi5jLmtnKGIuZSxlKTooZT15ZGIoTEQoV01iKGIuaixWcGMpKSkpO0dFYyhhLGIsZSx0cnVlKTt5ZGIoTEQoV01iKGIuaix5cWMpKSkmJlpNYihiLmoseXFjLCh4ZGIoKSxmYWxzZSkpO2lmKHlkYihMRChXTWIoYi5qLFZwYykpKSl7Wk1iKGIuaixWcGMsKHhkYigpLGZhbHNlKSk7Wk1iKGIuaix5cWMsdHJ1ZSl9Yz1wRWMoYSxiKTtkb3tCRWMoYSk7aWYoYz09MCl7cmV0dXJuIDB9ZT0hZTtmPWM7R0VjKGEsYixlLGZhbHNlKTtjPXBFYyhhLGIpfXdoaWxlKGY+Yyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIHlFYyhhLGIpe3ZhciBjLGQsZSxmO2U9eXZiKGEuZCwxKSE9MDtkPW9FYyhhLGIpO2lmKGQ9PTAmJnlkYihMRChXTWIoYi5qLChJcWMoKSxWcGMpKSkpKXtyZXR1cm4gMH0heWRiKExEKFdNYihiLmosKElxYygpLFZwYykpKSkmJiF5ZGIoTEQoV01iKGIuaix5cWMpKSl8fFhEKFdNYihiLmosKEJ3YygpLGN1YykpKT09PVhEKChueWMoKSxreWMpKT9iLmMua2coYi5lLGUpOihlPXlkYihMRChXTWIoYi5qLFZwYykpKSk7R0VjKGEsYixlLHRydWUpO3lkYihMRChXTWIoYi5qLHlxYykpKSYmWk1iKGIuaix5cWMsKHhkYigpLGZhbHNlKSk7aWYoeWRiKExEKFdNYihiLmosVnBjKSkpKXtaTWIoYi5qLFZwYywoeGRiKCksZmFsc2UpKTtaTWIoYi5qLHlxYyx0cnVlKX1jPW9FYyhhLGIpO2Rve0JFYyhhKTtpZihjPT0wKXtyZXR1cm4gMH1lPSFlO2Y9YztHRWMoYSxiLGUsZmFsc2UpO2M9b0VjKGEsYil9d2hpbGUoZj5jKTtyZXR1cm4gZn0KZnVuY3Rpb24gJFBiKGEsYixjKXt2YXIgZCxlLGYsZyxoO2Q9SkQoV01iKGEsKEJ3YygpLGR1YykpLDIyKTtjLmE+Yi5hJiYoZC5HYygoSGVkKCksQmVkKSk/KGEuYy5hKz0oYy5hLWIuYSkvMik6ZC5HYyhEZWQpJiYoYS5jLmErPWMuYS1iLmEpKTtjLmI+Yi5iJiYoZC5HYygoSGVkKCksRmVkKSk/KGEuYy5iKz0oYy5iLWIuYikvMik6ZC5HYyhFZWQpJiYoYS5jLmIrPWMuYi1iLmIpKTtpZihKRChXTWIoYSwoSXFjKCksV3BjKSksMjIpLkdjKCgkb2MoKSxUb2MpKSYmKGMuYT5iLmF8fGMuYj5iLmIpKXtmb3IoaD1uZXcgcm1iKGEuYSk7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDkpO2lmKGcuaz09KERZYigpLHdZYikpe2U9SkQoV01iKGcsVHBjKSw2NCk7ZT09KFJqZCgpLHdqZCk/KGcubi5hKz1jLmEtYi5hKTplPT1PamQmJihnLm4uYis9Yy5iLWIuYil9fX1mPWEuZDthLmYuYT1jLmEtZi5iLWYuYzthLmYuYj1jLmItZi5kLWYuYX0KZnVuY3Rpb24gaTJiKGEsYixjKXt2YXIgZCxlLGYsZyxoO2Q9SkQoV01iKGEsKEJ3YygpLGR1YykpLDIyKTtjLmE+Yi5hJiYoZC5HYygoSGVkKCksQmVkKSk/KGEuYy5hKz0oYy5hLWIuYSkvMik6ZC5HYyhEZWQpJiYoYS5jLmErPWMuYS1iLmEpKTtjLmI+Yi5iJiYoZC5HYygoSGVkKCksRmVkKSk/KGEuYy5iKz0oYy5iLWIuYikvMik6ZC5HYyhFZWQpJiYoYS5jLmIrPWMuYi1iLmIpKTtpZihKRChXTWIoYSwoSXFjKCksV3BjKSksMjIpLkdjKCgkb2MoKSxUb2MpKSYmKGMuYT5iLmF8fGMuYj5iLmIpKXtmb3IoZz1uZXcgcm1iKGEuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDkpO2lmKGYuaz09KERZYigpLHdZYikpe2U9SkQoV01iKGYsVHBjKSw2NCk7ZT09KFJqZCgpLHdqZCk/KGYubi5hKz1jLmEtYi5hKTplPT1PamQmJihmLm4uYis9Yy5iLWIuYil9fX1oPWEuZDthLmYuYT1jLmEtaC5iLWguYzthLmYuYj1jLmItaC5kLWguYX0KZnVuY3Rpb24gTktjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbTtiPWVMYyhhKTtmb3Ioaz0oaD0obmV3IE9qYihiKSkuYS52YygpLkpjKCksbmV3IFVqYihoKSk7ay5hLk9iKCk7KXtqPShlPUpEKGsuYS5QYigpLDQzKSxKRChlLmpkKCksOSkpO2w9MDttPTA7bD1qLmQuZDttPWouby5iK2ouZC5hO2EuZFtqLnBdPTA7Yz1qO3doaWxlKChmPWEuYVtjLnBdKSE9ail7ZD1nTGMoYyxmKTtpPTA7YS5jPT0oektjKCkseEtjKT8oaT1kLmQubi5iK2QuZC5hLmItZC5jLm4uYi1kLmMuYS5iKTooaT1kLmMubi5iK2QuYy5hLmItZC5kLm4uYi1kLmQuYS5iKTtnPUJlYihhLmRbYy5wXSkraTthLmRbZi5wXT1nO2w9JHduZC5NYXRoLm1heChsLGYuZC5kLWcpO209JHduZC5NYXRoLm1heChtLGcrZi5vLmIrZi5kLmEpO2M9Zn1jPWo7ZG97YS5kW2MucF09QmViKGEuZFtjLnBdKStsO2M9YS5hW2MucF19d2hpbGUoYyE9aik7YS5iW2oucF09bCttfX0KZnVuY3Rpb24gVGNkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbTtpPUJkZChuZXcgRWRkKGMuYSxjLmIpLGEpO2o9aS5hKmIuYi1pLmIqYi5hO2s9Yi5hKmQuYi1iLmIqZC5hO2w9KGkuYSpkLmItaS5iKmQuYSkvazttPWovaztpZihrPT0wKXtpZihqPT0wKXtlPW1kZChuZXcgRWRkKGMuYSxjLmIpLHdkZChuZXcgRWRkKGQuYSxkLmIpLDAuNSkpO2Y9cGRkKGEsZSk7Zz1wZGQobWRkKG5ldyBFZGQoYS5hLGEuYiksYiksZSk7aD0kd25kLk1hdGguc3FydChkLmEqZC5hK2QuYipkLmIpKjAuNTtpZihmPGcmJmY8PWgpe3JldHVybiBuZXcgRWRkKGEuYSxhLmIpfWlmKGc8PWgpe3JldHVybiBtZGQobmV3IEVkZChhLmEsYS5iKSxiKX1yZXR1cm4gbnVsbH1lbHNle3JldHVybiBudWxsfX1lbHNle3JldHVybiBsPj0wJiZsPD0xJiZtPj0wJiZtPD0xP21kZChuZXcgRWRkKGEuYSxhLmIpLHdkZChuZXcgRWRkKGIuYSxiLmIpLGwpKTpudWxsfX0KZnVuY3Rpb24gZzRjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbTtmPTA7Zz1hLnQ7ZT0wO2Q9MDtpPTA7bT0wO2w9MDtpZihjKXthLm4uYy5sZW5ndGg9MDtJbGIoYS5uLG5ldyBwNGMoYS5zLGEudCxhLmkpKX1oPTA7Zm9yKGs9bmV3IHJtYihhLmIpO2suYTxrLmMuYy5sZW5ndGg7KXtqPUpEKHBtYihrKSwyNyk7aWYoZitqLmcrKGg+MD9hLmk6MCk+YiYmaT4wKXtmPTA7Zys9aSthLmk7ZT0kd25kLk1hdGgubWF4KGUsbSk7ZCs9aSthLmk7aT0wO209MDtpZihjKXsrK2w7SWxiKGEubixuZXcgcDRjKGEucyxnLGEuaSkpfWg9MH1tKz1qLmcrKGg+MD9hLmk6MCk7aT0kd25kLk1hdGgubWF4KGksai5mKTtjJiZrNGMoSkQoTWxiKGEubixsKSwyMDgpLGopO2YrPWouZysoaD4wP2EuaTowKTsrK2h9ZT0kd25kLk1hdGgubWF4KGUsbSk7ZCs9aTtpZihjKXthLnI9ZTthLmQ9ZDtVNGMoYS5qKX1yZXR1cm4gbmV3IGdkZChhLnMsYS50LGUsZCl9CmZ1bmN0aW9uIHNfYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG07aD1hLmQ7bD1KRChXTWIoYSwoSXFjKCksSHFjKSksMTUpO2I9SkQoV01iKGEsRnBjKSwxNSk7aWYoIWwmJiFiKXtyZXR1cm59Zj1CZWIoTUQoa3pjKGEsKEJ3YygpLFR2YykpKSk7Zz1CZWIoTUQoa3pjKGEsVXZjKSkpO209MDtpZihsKXtqPTA7Zm9yKGU9bC5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDkpO2o9JHduZC5NYXRoLm1heChqLGQuby5iKTttKz1kLm8uYX1tKz1mKihsLmdjKCktMSk7aC5kKz1qK2d9Yz0wO2lmKGIpe2o9MDtmb3IoZT1iLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksOSk7aj0kd25kLk1hdGgubWF4KGosZC5vLmIpO2MrPWQuby5hfWMrPWYqKGIuZ2MoKS0xKTtoLmErPWorZ31pPSR3bmQuTWF0aC5tYXgobSxjKTtpZihpPmEuby5hKXtrPShpLWEuby5hKS8yO2guYj0kd25kLk1hdGgubWF4KGguYixrKTtoLmM9JHduZC5NYXRoLm1heChoLmMsayl9fQpmdW5jdGlvbiB2YmUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7az1LZmUoYS5lLnpoKCksYik7ZT0wO2Y9SkQoYS5nLDEyMik7aT1udWxsO0lmZSgpO2lmKEpEKGIsNjkpLnVrKCkpe2ZvcihoPTA7aDxhLmk7KytoKXtnPWZbaF07aWYoay5abChnLklrKCkpKXtpZihwYihnLGMpKXtpPWc7YnJlYWt9KytlfX19ZWxzZSBpZihjIT1udWxsKXtmb3IoaD0wO2g8YS5pOysraCl7Zz1mW2hdO2lmKGsuWmwoZy5JaygpKSl7aWYocGIoYyxnLmtkKCkpKXtpPWc7YnJlYWt9KytlfX19ZWxzZXtmb3IoaD0wO2g8YS5pOysraCl7Zz1mW2hdO2lmKGsuWmwoZy5JaygpKSl7aWYoZy5rZCgpPT1udWxsKXtpPWc7YnJlYWt9KytlfX19aWYoaSl7aWYocXFkKGEuZSkpe2o9Yi5HaygpP25ldyBHZ2UoYS5lLDQsYixjLG51bGwsZSx0cnVlKTpBYmUoYSxiLnFrKCk/MjoxLGIsYyxiLmZrKCksLTEsdHJ1ZSk7ZD9kLmtqKGopOihkPWopfWQ9dWJlKGEsaSxkKX1yZXR1cm4gZH0KZnVuY3Rpb24gczJjKGEsYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scDtvPTA7cD0wO2k9ZS5jO2g9ZS5iO2s9Yy5mO249Yy5nO3N3aXRjaChiLmcpe2Nhc2UgMDpvPWQuaStkLmcrZzthLmM/KHA9QjJjKG8sZixkLGcpKToocD1kLmopO209JHduZC5NYXRoLm1heChpLG8rbik7aj0kd25kLk1hdGgubWF4KGgscCtrKTticmVhaztjYXNlIDE6cD1kLmorZC5mK2c7YS5jPyhvPUEyYyhwLGYsZCxnKSk6KG89ZC5pKTttPSR3bmQuTWF0aC5tYXgoaSxvK24pO2o9JHduZC5NYXRoLm1heChoLHArayk7YnJlYWs7Y2FzZSAyOm89aStnO3A9MDttPWkrZytuO2o9JHduZC5NYXRoLm1heChoLGspO2JyZWFrO2Nhc2UgMzpvPTA7cD1oK2c7bT0kd25kLk1hdGgubWF4KGksbik7aj1oK2crazticmVhaztkZWZhdWx0OnRocm93IHNjYihuZXcgVGViKCdJbGxlZ2FsUGxhY2VtZW50T3B0aW9uLicpKTt9bD1uZXcgQzRjKGEuYSxtLGosYixvLHApO3JldHVybiBsfQpmdW5jdGlvbiBvRWQoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtmPW5ldyBCOGM7eDhjKGYsKHc4YygpLHQ4YykpO2ZvcihkPShlPWdDKGEsU0MoaEosaHJlLDIsMCw2LDEpKSxuZXcgdWpiKG5ldyBkbmIoKG5ldyB1QyhhLGUpKS5iKSkpO2QuYjxkLmQuZ2MoKTspe2M9KHJEYihkLmI8ZC5kLmdjKCkpLE9EKGQuZC5YYihkLmM9ZC5iKyspKSk7Zz1LYWQoaUVkLGMpO2lmKGcpe2I9aUMoYSxjKTtiLnJlKCk/KGg9Yi5yZSgpLmEpOmIub2UoKT8oaD0nJytiLm9lKCkuYSk6Yi5wZSgpPyhoPScnK2IucGUoKS5hKTooaD1iLkliKCkpO2k9T2JkKGcsaCk7aWYoaSE9bnVsbCl7KHJyYihnLmosKGxjZCgpLGljZCkpfHxycmIoZy5qLGpjZCkpJiZZTWIoejhjKGYsQTMpLGcsaSk7cnJiKGcuaixnY2QpJiZZTWIoejhjKGYseDMpLGcsaSk7cnJiKGcuaixrY2QpJiZZTWIoejhjKGYsQjMpLGcsaSk7cnJiKGcuaixoY2QpJiZZTWIoejhjKGYsejMpLGcsaSl9fX1yZXR1cm4gZn0KZnVuY3Rpb24gRGJlKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO2U9SkQoYS5nLDEyMik7aWYoTGZlKGEuZSxiKSl7cmV0dXJuIElmZSgpLEpEKGIsNjkpLnVrKCk/bmV3IEpnZShiLGEpOm5ldyBaZmUoYixhKX1lbHNle2o9S2ZlKGEuZS56aCgpLGIpO2Q9MDtmb3IoaD0wO2g8YS5pOysraCl7Zj1lW2hdO2c9Zi5JaygpO2lmKGouWmwoZykpe0lmZSgpO2lmKEpEKGIsNjkpLnVrKCkpe3JldHVybiBmfWVsc2UgaWYoZz09KGVoZSgpLGNoZSl8fGc9PV9nZSl7aT1uZXcgV2diKGFkYihmLmtkKCkpKTt3aGlsZSgrK2g8YS5pKXtmPWVbaF07Zz1mLklrKCk7KGc9PWNoZXx8Zz09X2dlKSYmUWdiKGksYWRiKGYua2QoKSkpfXJldHVybiBiZmUoSkQoYi5FaygpLDE1NSksaS5hKX1lbHNle2s9Zi5rZCgpO2shPW51bGwmJmMmJlJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTAmJihrPVdiZShhLGIsaCxkLGspKTtyZXR1cm4ga319KytkfXJldHVybiBiLmZrKCl9fQpmdW5jdGlvbiBGbGMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtmb3IoZT1uZXcgcm1iKGEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDI1KTtmb3IoZz1uZXcgcm1iKFp1KGQuYSkpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSw5KTtpZih2bGMoZikpe2M9SkQoV01iKGYsKElxYygpLEdwYykpLDMxNCk7aWYoIWMuZyYmISFjLmQpe2I9YztpPWMuZDt3aGlsZShpKXtFbGMoaS5pLGkuayxmYWxzZSx0cnVlKTtNbGMoYi5hKTtNbGMoaS5pKTtNbGMoaS5rKTtNbGMoaS5iKTtoV2IoaS5jLGIuYy5kKTtoV2IoYi5jLG51bGwpO3FZYihiLmEsbnVsbCk7cVliKGkuaSxudWxsKTtxWWIoaS5rLG51bGwpO3FZYihpLmIsbnVsbCk7aD1uZXcgdGxjKGIuaSxpLmEsYi5lLGkuaixpLmYpO2guaz1iLms7aC5uPWIubjtoLmI9Yi5iO2guYz1pLmM7aC5nPWIuZztoLmQ9aS5kO1pNYihiLmksR3BjLGgpO1pNYihpLmEsR3BjLGgpO2k9aS5kO2I9aH19fX19fQpmdW5jdGlvbiBDYmUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqO2k9S2ZlKGEuZS56aCgpLGIpO2Y9SkQoYS5nLDEyMik7aWYoTGZlKGEuZSxiKSl7ZT0wO2ZvcihoPTA7aDxhLmk7KytoKXtnPWZbaF07aWYoaS5abChnLklrKCkpKXtpZihlPT1jKXtJZmUoKTtpZihKRChiLDY5KS51aygpKXtyZXR1cm4gZ31lbHNle2o9Zy5rZCgpO2ohPW51bGwmJmQmJlJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTAmJihqPVdiZShhLGIsaCxlLGopKTtyZXR1cm4gan19KytlfX10aHJvdyBzY2IobmV3IG1kYihJRWUrYytPRGUrZSkpfWVsc2V7ZT0wO2ZvcihoPTA7aDxhLmk7KytoKXtnPWZbaF07aWYoaS5abChnLklrKCkpKXtJZmUoKTtpZihKRChiLDY5KS51aygpKXtyZXR1cm4gZ31lbHNle2o9Zy5rZCgpO2ohPW51bGwmJmQmJlJEKGIsMTAxKSYmKEpEKGIsMTkpLkJiJlBzZSkhPTAmJihqPVdiZShhLGIsaCxlLGopKTtyZXR1cm4gan19KytlfXJldHVybiBiLmZrKCl9fQpmdW5jdGlvbiBvaWIoKXtvaWI9WmNiO21pYj1XQyhPQyhjRSwxKSxpc2UsMzAsMTUsW0xyZSwxMTYyMjYxNDY3LENyZSwxMjIwNzAzMTI1LDM2Mjc5NzA1NiwxOTc3MzI2NzQzLENyZSwzODc0MjA0ODksRXNlLDIxNDM1ODg4MSw0Mjk5ODE2OTYsODE1NzMwNzIxLDE0NzU3ODkwNTYsMTcwODU5Mzc1LDI2ODQzNTQ1Niw0MTAzMzg2NzMsNjEyMjIwMDMyLDg5Mzg3MTczOSwxMjgwMDAwMDAwLDE4MDEwODg1NDEsMTEzMzc5OTA0LDE0ODAzNTg4OSwxOTExMDI5NzYsMjQ0MTQwNjI1LDMwODkxNTc3NiwzODc0MjA0ODksNDgxODkwMzA0LDU5NDgyMzMyMSw3MjkwMDAwMDAsODg3NTAzNjgxLENyZSwxMjkxNDY3OTY5LDE1NDQ4MDQ0MTYsMTgzODI2NTYyNSw2MDQ2NjE3Nl0pO25pYj1XQyhPQyhjRSwxKSxpc2UsMzAsMTUsWy0xLC0xLDMxLDE5LDE1LDEzLDExLDExLDEwLDksOSw4LDgsOCw4LDcsNyw3LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDYsNiw2LDVdKX0KZnVuY3Rpb24geGliKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7Zz1hLmU7aT1iLmU7aWYoaT09MCl7cmV0dXJuIGF9aWYoZz09MCl7cmV0dXJuIGIuZT09MD9iOm5ldyBWaGIoLWIuZSxiLmQsYi5hKX1mPWEuZDtoPWIuZDtpZihmK2g9PTIpe2M9dWNiKGEuYVswXSxVc2UpO2Q9dWNiKGIuYVswXSxVc2UpO2c8MCYmKGM9R2NiKGMpKTtpPDAmJihkPUdjYihkKSk7cmV0dXJuIEdoYigpLEJjYihNY2IoYyxkKSwwKT9haWIoTWNiKGMsZCkpOk9oYihhaWIoR2NiKE1jYihjLGQpKSkpfWU9ZiE9aD9mPmg/MTotMTp2aWIoYS5hLGIuYSxmKTtpZihlPT0tMSl7bD0taTtrPWc9PWk/eWliKGIuYSxoLGEuYSxmKTp0aWIoYi5hLGgsYS5hLGYpfWVsc2V7bD1nO2lmKGc9PWkpe2lmKGU9PTApe3JldHVybiBHaGIoKSxGaGJ9az15aWIoYS5hLGYsYi5hLGgpfWVsc2V7az10aWIoYS5hLGYsYi5hLGgpfX1qPW5ldyBWaGIobCxrLmxlbmd0aCxrKTtJaGIoaik7cmV0dXJuIGp9CmZ1bmN0aW9uIG8kYihhLGIpe3ZhciBjLGQsZSxmO2Y9aiRiKGIpOyFiLmMmJihiLmM9bmV3IFgwZChCMyxiLDksOSkpO0VCYihuZXcgUkJiKG51bGwsKCFiLmMmJihiLmM9bmV3IFgwZChCMyxiLDksOSkpLG5ldyBHdmIoYi5jLDE2KSkpLG5ldyBFJGIoZikpO2U9SkQoV01iKGYsKElxYygpLFdwYykpLDIyKTtpJGIoYixlKTtpZihlLkdjKCgkb2MoKSxUb2MpKSl7Zm9yKGQ9bmV3IENIZCgoIWIuYyYmKGIuYz1uZXcgWDBkKEIzLGIsOSw5KSksYi5jKSk7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoQUhkKGQpLDEyNCk7cyRiKGEsYixmLGMpfX1KRChrc2QoYiwoQndjKCksb3ZjKSksMTgxKS5nYygpIT0wJiZmJGIoYixmKTt5ZGIoTEQoV01iKGYsdnZjKSkpJiZlLkVjKFlvYyk7WE1iKGYsU3ZjKSYmS3djKG5ldyBVd2MoQmViKE1EKFdNYihmLFN2YykpKSksZik7WEQoa3NkKGIsSXVjKSk9PT1YRCgoZWlkKCksYmlkKSk/cCRiKGEsYixmKTpuJGIoYSxiLGYpO3JldHVybiBmfQpmdW5jdGlvbiBJcGUoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH1mPWEubGVuZ3RoO2lmKGY9PTApe3JldHVybiAnJ31pPVNDKF9ELFVyZSwzMCxmLDE1LDEpO3pEYigwLGYsYS5sZW5ndGgpO3pEYigwLGYsaS5sZW5ndGgpO2VnYihhLDAsZixpLDApO2M9bnVsbDtoPWI7Zm9yKGU9MCxnPTA7ZTxmO2UrKyl7ZD1pW2VdO2RtZSgpO2lmKGQ8PTMyJiYoY21lW2RdJjIpIT0wKXtpZihoKXshYyYmKGM9bmV3IEpnYihhKSk7R2diKGMsZS1nKyspfWVsc2V7aD1iO2lmKGQhPTMyKXshYyYmKGM9bmV3IEpnYihhKSk7Z2RiKGMsZS1nLGUtZysxLFN0cmluZy5mcm9tQ2hhckNvZGUoMzIpKX19fWVsc2V7aD1mYWxzZX19aWYoaCl7aWYoIWMpe3JldHVybiB6RGIoMCxmLTEsYS5sZW5ndGgpLGEuc3Vic3RyKDAsZi0xKX1lbHNle2Y9Yy5hLmxlbmd0aDtyZXR1cm4gZj4wP3FnYihjLmEsMCxmLTEpOicnfX1lbHNle3JldHVybiAhYz9hOmMuYX19CmZ1bmN0aW9uIFBfYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07Zm9yKGQ9bmV3IGVzKElyKCRCZChiKS5hLkpjKCksbmV3IGVyKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDg1KTtpZighUkQobkRkKCghYy5iJiYoYy5iPW5ldyByZWUodjMsYyw0LDcpKSxjLmIpLDApLDE5Mykpe2k9X0JkKEpEKG5EZCgoIWMuYyYmKGMuYz1uZXcgcmVlKHYzLGMsNSw4KSksYy5jKSwwKSw4NCkpO2lmKCFSdGQoYykpe2c9Yi5pK2IuZy8yO2g9Yi5qK2IuZi8yO2s9aS5pK2kuZy8yO2w9aS5qK2kuZi8yO209bmV3IENkZDttLmE9ay1nO20uYj1sLWg7Zj1uZXcgRWRkKG0uYSxtLmIpO0xjZChmLGIuZyxiLmYpO20uYS09Zi5hO20uYi09Zi5iO2c9ay1tLmE7aD1sLW0uYjtqPW5ldyBFZGQobS5hLG0uYik7TGNkKGosaS5nLGkuZik7bS5hLT1qLmE7bS5iLT1qLmI7az1nK20uYTtsPWgrbS5iO2U9aENkKGMpO3F1ZChlLGcpO3J1ZChlLGgpO2p1ZChlLGspO2t1ZChlLGwpO1BfYyhhLGkpfX19fQpmdW5jdGlvbiBQb2UoYSxiKXt2YXIgYyxkLGUsZixnO2c9SkQoYiwxMzYpO1FvZShhKTtRb2UoZyk7aWYoZy5iPT1udWxsKXJldHVybjthLmM9dHJ1ZTtpZihhLmI9PW51bGwpe2EuYj1TQyhjRSxpc2UsMzAsZy5iLmxlbmd0aCwxNSwxKTskZ2IoZy5iLDAsYS5iLDAsZy5iLmxlbmd0aCk7cmV0dXJufWY9U0MoY0UsaXNlLDMwLGEuYi5sZW5ndGgrZy5iLmxlbmd0aCwxNSwxKTtmb3IoYz0wLGQ9MCxlPTA7YzxhLmIubGVuZ3RofHxkPGcuYi5sZW5ndGg7KXtpZihjPj1hLmIubGVuZ3RoKXtmW2UrK109Zy5iW2QrK107ZltlKytdPWcuYltkKytdfWVsc2UgaWYoZD49Zy5iLmxlbmd0aCl7ZltlKytdPWEuYltjKytdO2ZbZSsrXT1hLmJbYysrXX1lbHNlIGlmKGcuYltkXTxhLmJbY118fGcuYltkXT09PWEuYltjXSYmZy5iW2QrMV08YS5iW2MrMV0pe2ZbZSsrXT1nLmJbZCsrXTtmW2UrK109Zy5iW2QrK119ZWxzZXtmW2UrK109YS5iW2MrK107ZltlKytdPWEuYltjKytdfX1hLmI9Zn0KZnVuY3Rpb24gdDNiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7Yz15ZGIoTEQoV01iKGEsKElxYygpLGVxYykpKSk7aD15ZGIoTEQoV01iKGIsZXFjKSkpO2Q9SkQoV01iKGEsZnFjKSwxMSk7aT1KRChXTWIoYixmcWMpLDExKTtlPUpEKFdNYihhLGdxYyksMTEpO2o9SkQoV01iKGIsZ3FjKSwxMSk7az0hIWQmJmQ9PWk7bD0hIWUmJmU9PWo7aWYoIWMmJiFoKXtyZXR1cm4gbmV3IEEzYihKRChwbWIobmV3IHJtYihhLmopKSwxMSkucD09SkQocG1iKG5ldyBybWIoYi5qKSksMTEpLnAsayxsKX1mPSgheWRiKExEKFdNYihhLGVxYykpKXx8eWRiKExEKFdNYihhLGRxYykpKSkmJigheWRiKExEKFdNYihiLGVxYykpKXx8eWRiKExEKFdNYihiLGRxYykpKSk7Zz0oIXlkYihMRChXTWIoYSxlcWMpKSl8fCF5ZGIoTEQoV01iKGEsZHFjKSkpKSYmKCF5ZGIoTEQoV01iKGIsZXFjKSkpfHwheWRiKExEKFdNYihiLGRxYykpKSk7cmV0dXJuIG5ldyBBM2IoayYmZnx8bCYmZyxrLGwpfQpmdW5jdGlvbiBiNGMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtkPTA7Yz0wO2k9bmV3IE10YjtiPTA7Zm9yKGg9bmV3IHJtYihhLm4pO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwyMDgpO2lmKGcuYy5jLmxlbmd0aD09MCl7RHRiKGksZyxpLmMuYixpLmMpfWVsc2V7ZD0kd25kLk1hdGgubWF4KGQsZy5kKTtjKz1nLmErKGI+MD9hLmk6MCl9KytifUJlKGEubixpKTthLmQ9YzthLnI9ZDthLmc9MDthLmY9MDthLmU9MDthLm89S3NlO2EucD1Lc2U7Zm9yKGY9bmV3IHJtYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwyNyk7YS5wPSR3bmQuTWF0aC5taW4oYS5wLGUuZyk7YS5nPSR3bmQuTWF0aC5tYXgoYS5nLGUuZyk7YS5mPSR3bmQuTWF0aC5tYXgoYS5mLGUuZik7YS5vPSR3bmQuTWF0aC5taW4oYS5vLGUuZik7YS5lKz1lLmYrYS5pfWEuYT1hLmUvYS5iLmMubGVuZ3RoLWEuaSooKGEuYi5jLmxlbmd0aC0xKS9hLmIuYy5sZW5ndGgpO1U0YyhhLmopfQpmdW5jdGlvbiBVdGQoYSl7dmFyIGIsYyxkLGU7aWYoKGEuRGImNjQpIT0wKXJldHVybiBRc2QoYSk7Yj1uZXcgV2diKENDZSk7ZD1hLms7aWYoIWQpeyFhLm4mJihhLm49bmV3IFgwZCh6MyxhLDEsNykpO2lmKGEubi5pPjApe2U9KCFhLm4mJihhLm49bmV3IFgwZCh6MyxhLDEsNykpLEpEKG5EZChhLm4sMCksMTUzKSkuYTshZXx8UWdiKFFnYigoYi5hKz0nICInLGIpLGUpLCciJyl9fWVsc2V7UWdiKFFnYigoYi5hKz0nICInLGIpLGQpLCciJyl9Yz0oIWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSksIShhLmIuaTw9MSYmKCFhLmMmJihhLmM9bmV3IHJlZSh2MyxhLDUsOCkpLGEuYy5pPD0xKSkpO2M/KGIuYSs9JyBbJyxiKTooYi5hKz0nICcsYik7UWdiKGIsRWIobmV3IEdiLG5ldyBDSGQoYS5iKSkpO2MmJihiLmErPSddJyxiKTtiLmErPUZ2ZTtjJiYoYi5hKz0nWycsYik7UWdiKGIsRWIobmV3IEdiLG5ldyBDSGQoYS5jKSkpO2MmJihiLmErPSddJyxiKTtyZXR1cm4gYi5hfQpmdW5jdGlvbiBCNmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRDt2PWEuYzt3PWIuYztjPU5sYih2LmEsYSwwKTtkPU5sYih3LmEsYiwwKTt0PUpEKG1ZYihhLChFeWMoKSxCeWMpKS5KYygpLlBiKCksMTEpO0M9SkQobVliKGEsQ3ljKS5KYygpLlBiKCksMTEpO3U9SkQobVliKGIsQnljKS5KYygpLlBiKCksMTEpO0Q9SkQobVliKGIsQ3ljKS5KYygpLlBiKCksMTEpO3I9Q1hiKHQuZSk7QT1DWGIoQy5nKTtzPUNYYih1LmUpO0I9Q1hiKEQuZyk7cFliKGEsZCx3KTtmb3IoZz1zLGs9MCxvPWcubGVuZ3RoO2s8bzsrK2spe2U9Z1trXTtoV2IoZSx0KX1mb3IoaD1CLGw9MCxwPWgubGVuZ3RoO2w8cDsrK2wpe2U9aFtsXTtnV2IoZSxDKX1wWWIoYixjLHYpO2ZvcihpPXIsbT0wLHE9aS5sZW5ndGg7bTxxOysrbSl7ZT1pW21dO2hXYihlLHUpfWZvcihmPUEsaj0wLG49Zi5sZW5ndGg7ajxuOysrail7ZT1mW2pdO2dXYihlLEQpfX0KZnVuY3Rpb24gYlpjKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2c9SkQoa3NkKGEsKHhZYygpLHdZYykpLDI3KTtmb3IoZD1uZXcgQ0hkKCghZy5lJiYoZy5lPW5ldyByZWUoeDMsZyw3LDQpKSxnLmUpKTtkLmUhPWQuaS5nYygpOyl7Yz1KRChBSGQoZCksODUpO2g9bmV3IEVkZChKRChuRGQoKCFjLmEmJihjLmE9bmV3IFgwZCh3MyxjLDYsNikpLGMuYSksMCksMTY4KS5qLEpEKG5EZCgoIWMuYSYmKGMuYT1uZXcgWDBkKHczLGMsNiw2KSksYy5hKSwwKSwxNjgpLmspO2Y9bmV3IEVkZChKRChuRGQoKCFjLmEmJihjLmE9bmV3IFgwZCh3MyxjLDYsNikpLGMuYSksMCksMTY4KS5iLEpEKG5EZCgoIWMuYSYmKGMuYT1uZXcgWDBkKHczLGMsNiw2KSksYy5hKSwwKSwxNjgpLmMpO2U9bmV3IEVkZChmLmEtaC5hLGYuYi1oLmIpO2I9JHduZC5NYXRoLmF0YW4yKGUuYixlLmEpO0pEKG5EZCgoIWMuYyYmKGMuYz1uZXcgcmVlKHYzLGMsNSw4KSksYy5jKSwwKSw4NCkub2YoKGJfYygpLFokYyksYil9fQpmdW5jdGlvbiByMGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Yi5TZygnSW50ZXJhY3RpdmUgTm9kZSBSZW9yZGVyZXInLDEpO2s9KCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKTtoPW5ldyBVbGI7Zm9yKGU9bmV3IENIZChrKTtlLmUhPWUuaS5nYygpOyl7Yz1KRChBSGQoZSksMjcpO2xzZChjLChrMmMoKSxPMWMpKSYmKFlDYihoLmMsYyksdHJ1ZSl9Zm9yKGY9bmV3IHJtYihoKTtmLmE8Zi5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZiksMjcpO0NDZChrLGMpfXBuYigpO1NsYihoLG5ldyB2MGMpO2ZvcihnPW5ldyBybWIoaCk7Zy5hPGcuYy5jLmxlbmd0aDspe2M9SkQocG1iKGcpLDI3KTtqPUpEKGtzZChjLChrMmMoKSxPMWMpKSwxNykuYTtqPSR3bmQuTWF0aC5taW4oaixrLmkpO3NDZChrLGosYyl9aT0wO2ZvcihkPW5ldyBDSGQoayk7ZC5lIT1kLmkuZ2MoKTspe2M9SkQoQUhkKGQpLDI3KTttc2QoYywoazJjKCksTjFjKSxqZmIoaSkpOysraX1iLlRnKCl9CmZ1bmN0aW9uIFFIYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7aD1TQyhjRSxpc2UsMzAsYi5iLmMubGVuZ3RoLDE1LDEpO2o9U0MoUFAsRXJlLDI0NyxiLmIuYy5sZW5ndGgsMCwxKTtpPVNDKFJQLEp2ZSw5LGIuYi5jLmxlbmd0aCwwLDEpO2ZvcihsPWEuYSxtPTAsbj1sLmxlbmd0aDttPG47KyttKXtrPWxbbV07cD0wO2ZvcihnPW5ldyBybWIoay5lKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZyksOSk7ZD1hJGIoZS5jKTsrK2hbZF07bz1CZWIoTUQoV01iKGIsKEJ3YygpLFd2YykpKSk7aFtkXT4wJiYhIWlbZF0mJihvPWV6YyhhLmIsaVtkXSxlKSk7cD0kd25kLk1hdGgubWF4KHAsZS5jLmMuYitvKX1mb3IoZj1uZXcgcm1iKGsuZSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO2Uubi5iPXArZS5kLmQ7Yz1lLmM7Yy5jLmI9cCtlLmQuZCtlLm8uYitlLmQuYTtqW05sYihjLmIuYixjLDApXT1lLms7aVtObGIoYy5iLmIsYywwKV09ZX19fQpmdW5jdGlvbiBTTmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs7aWYoJHduZC5NYXRoLmFicyhiLnMtYi5jKTxGdWV8fCR3bmQuTWF0aC5hYnMoYy5zLWMuYyk8RnVlKXtyZXR1cm4gMH1kPVJOYyhhLGIuaixjLmUpO2U9Uk5jKGEsYy5qLGIuZSk7Zj1kPT0tMXx8ZT09LTE7Zz0wO2lmKGYpe2lmKGQ9PS0xKXtuZXcgZU5jKChpTmMoKSxnTmMpLGMsYiwxKTsrK2d9aWYoZT09LTEpe25ldyBlTmMoKGlOYygpLGdOYyksYixjLDEpOysrZ319ZWxzZXtoPVlOYyhiLmosYy5zLGMuYyk7aCs9WU5jKGMuZSxiLnMsYi5jKTtpPVlOYyhjLmosYi5zLGIuYyk7aSs9WU5jKGIuZSxjLnMsYy5jKTtqPWQrMTYqaDtrPWUrMTYqaTtpZihqPGspe25ldyBlTmMoKGlOYygpLGhOYyksYixjLGstail9ZWxzZSBpZihqPmspe25ldyBlTmMoKGlOYygpLGhOYyksYyxiLGotayl9ZWxzZSBpZihqPjAmJms+MCl7bmV3IGVOYygoaU5jKCksaE5jKSxiLGMsMCk7bmV3IGVOYyhoTmMsYyxiLDApfX1yZXR1cm4gZ30KZnVuY3Rpb24gc1JjKGEsYixjKXt2YXIgZCxlLGY7YS5hPW5ldyBVbGI7Zm9yKGY9R3RiKGIuYiwwKTtmLmIhPWYuZC5jOyl7ZT1KRChVdGIoZiksMzkpO3doaWxlKEpEKFdNYihlLChrVmMoKSxpVmMpKSwxNykuYT5hLmEuYy5sZW5ndGgtMSl7SWxiKGEuYSxuZXcgeG9kKG16ZSxGemUpKX1kPUpEKFdNYihlLGlWYyksMTcpLmE7aWYoYz09KFRnZCgpLFBnZCl8fGM9PVFnZCl7ZS5lLmE8QmViKE1EKEpEKE1sYihhLmEsZCksNDcpLmEpKSYmdm9kKEpEKE1sYihhLmEsZCksNDcpLGUuZS5hKTtlLmUuYStlLmYuYT5CZWIoTUQoSkQoTWxiKGEuYSxkKSw0NykuYikpJiZ3b2QoSkQoTWxiKGEuYSxkKSw0NyksZS5lLmErZS5mLmEpfWVsc2V7ZS5lLmI8QmViKE1EKEpEKE1sYihhLmEsZCksNDcpLmEpKSYmdm9kKEpEKE1sYihhLmEsZCksNDcpLGUuZS5iKTtlLmUuYitlLmYuYj5CZWIoTUQoSkQoTWxiKGEuYSxkKSw0NykuYikpJiZ3b2QoSkQoTWxiKGEuYSxkKSw0NyksZS5lLmIrZS5mLmIpfX19CmZ1bmN0aW9uIHFYYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosaztmPXNYYihkKTtoPXlkYihMRChXTWIoZCwoQndjKCksZHZjKSkpKTtpZigoaHx8eWRiKExEKFdNYihhLE11YykpKSkmJiFjamQoSkQoV01iKGEsRXZjKSwxMDApKSl7ZT1XamQoZik7aT1BWGIoYSxjLGM9PShFeWMoKSxDeWMpP2U6VGpkKGUpKX1lbHNle2k9bmV3IGJaYjtfWWIoaSxhKTtpZihiKXtrPWkubjtrLmE9Yi5hLWEubi5hO2suYj1iLmItYS5uLmI7bmRkKGssMCwwLGEuby5hLGEuby5iKTthWmIoaSxtWGIoaSxmKSl9ZWxzZXtlPVdqZChmKTthWmIoaSxjPT0oRXljKCksQ3ljKT9lOlRqZChlKSl9Zz1KRChXTWIoZCwoSXFjKCksV3BjKSksMjIpO2o9aS5qO3N3aXRjaChmLmcpe2Nhc2UgMjpjYXNlIDE6KGo9PShSamQoKSx4amQpfHxqPT1PamQpJiZnLkVjKCgkb2MoKSxYb2MpKTticmVhaztjYXNlIDQ6Y2FzZSAzOihqPT0oUmpkKCksd2pkKXx8aj09UWpkKSYmZy5FYygoJG9jKCksWG9jKSk7fX1yZXR1cm4gaX0KZnVuY3Rpb24gZFJiKGEsYil7dmFyIGMsZCxlLGYsZyxoO2ZvcihnPW5ldyBtamIoKG5ldyBkamIoYS5mLmIpKS5hKTtnLmI7KXtmPWtqYihnKTtlPUpEKGYuamQoKSw1ODYpO2lmKGI9PTEpe2lmKGUueWYoKSE9KFRnZCgpLFNnZCkmJmUueWYoKSE9T2dkKXtjb250aW51ZX19ZWxzZXtpZihlLnlmKCkhPShUZ2QoKSxQZ2QpJiZlLnlmKCkhPVFnZCl7Y29udGludWV9fWQ9SkQoSkQoZi5rZCgpLDQ3KS5iLDgyKTtoPUpEKEpEKGYua2QoKSw0NykuYSwxOTQpO2M9aC5jO3N3aXRjaChlLnlmKCkuZyl7Y2FzZSAyOmQuZy5jPWEuZS5hO2QuZy5iPSR3bmQuTWF0aC5tYXgoMSxkLmcuYitjKTticmVhaztjYXNlIDE6ZC5nLmM9ZC5nLmMrYztkLmcuYj0kd25kLk1hdGgubWF4KDEsZC5nLmItYyk7YnJlYWs7Y2FzZSA0OmQuZy5kPWEuZS5iO2QuZy5hPSR3bmQuTWF0aC5tYXgoMSxkLmcuYStjKTticmVhaztjYXNlIDM6ZC5nLmQ9ZC5nLmQrYztkLmcuYT0kd25kLk1hdGgubWF4KDEsZC5nLmEtYyk7fX19CmZ1bmN0aW9uIGtLYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsO2IuU2coJ1NpbXBsZSBub2RlIHBsYWNlbWVudCcsMSk7bD1KRChXTWIoYSwoSXFjKCksQXFjKSksMzEzKTtoPTA7Zm9yKGY9bmV3IHJtYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihmKSwyNSk7Zz1kLmM7Zy5iPTA7Yz1udWxsO2ZvcihqPW5ldyBybWIoZC5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksOSk7ISFjJiYoZy5iKz1jemMoaSxjLGwuYykpO2cuYis9aS5kLmQraS5vLmIraS5kLmE7Yz1pfWg9JHduZC5NYXRoLm1heChoLGcuYil9Zm9yKGU9bmV3IHJtYihhLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwyNSk7Zz1kLmM7az0oaC1nLmIpLzI7Yz1udWxsO2ZvcihqPW5ldyBybWIoZC5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksOSk7ISFjJiYoays9Y3pjKGksYyxsLmMpKTtrKz1pLmQuZDtpLm4uYj1rO2srPWkuby5iK2kuZC5hO2M9aX19Yi5UZygpfQpmdW5jdGlvbiBFNmMoYSl7UmFkKGEsbmV3IGNhZChuYWQoa2FkKG1hZChsYWQobmV3IHBhZCxlQmUpLCdFTEsgU1BPckUgQ29tcGFjdGlvbicpLCdTaHJpbmtUcmVlIGlzIGEgY29tcGFjdGlvbiBhbGdvcml0aG0gdGhhdCBtYWludGFpbnMgdGhlIHRvcG9sb2d5IG9mIGEgbGF5b3V0LiBUaGUgcmVsb2NhdGlvbiBvZiBkaWFncmFtIGVsZW1lbnRzIGlzIGJhc2VkIG9uIGNvbnRyYWN0aW5nIGEgc3Bhbm5pbmcgdHJlZS4nKSxuZXcgSDZjKSkpO1BhZChhLGVCZSxmQmUsSkJkKEM2YykpO1BhZChhLGVCZSxnQmUsSkJkKHo2YykpO1BhZChhLGVCZSxoQmUsSkJkKHk2YykpO1BhZChhLGVCZSxpQmUsSkJkKHc2YykpO1BhZChhLGVCZSxqQmUsSkJkKHg2YykpO1BhZChhLGVCZSxSdWUsdjZjKTtQYWQoYSxlQmUsTXVlLDgpO1BhZChhLGVCZSxrQmUsSkJkKEI2YykpO1BhZChhLGVCZSxsQmUsSkJkKHI2YykpO1BhZChhLGVCZSxtQmUsSkJkKHM2YykpO1BhZChhLGVCZSxEeWUsKHhkYigpLGZhbHNlKSl9CmZ1bmN0aW9uIFNqYyhhLGIpe3ZhciBjLGQsZSxmO01qYyhiLmIuaik7RUJiKEZCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmQsMTYpKSxuZXcgYmtjKSxuZXcgZGtjKTtmb3IoZj1uZXcgcm1iKGIuZCk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDEwNSk7c3dpdGNoKGUuZS5nKXtjYXNlIDA6Yz1KRChNbGIoZS5qLDApLDExMikuZC5qO3BnYyhlLEpEKHp1YihKQmIoSkQoUWMoZS5rLGMpLDE1KS5NYygpLEtqYykpLDExMikpO3FnYyhlLEpEKHp1YihJQmIoSkQoUWMoZS5rLGMpLDE1KS5NYygpLEtqYykpLDExMikpO2JyZWFrO2Nhc2UgMTpkPUVoYyhlKTtwZ2MoZSxKRCh6dWIoSkJiKEpEKFFjKGUuayxkWzBdKSwxNSkuTWMoKSxLamMpKSwxMTIpKTtxZ2MoZSxKRCh6dWIoSUJiKEpEKFFjKGUuayxkWzFdKSwxNSkuTWMoKSxLamMpKSwxMTIpKTticmVhaztjYXNlIDI6VWpjKGEsZSk7YnJlYWs7Y2FzZSAzOlRqYyhlKTticmVhaztjYXNlIDQ6UmpjKGEsZSk7fVBqYyhlKX1hLmE9bnVsbH0KZnVuY3Rpb24gQkxjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrO2Q9YS5hLm89PShIS2MoKSxHS2MpP0tzZTpMc2U7aD1DTGMoYSxuZXcgQUxjKGIsYykpO2lmKCFoLmEmJmguYyl7QXRiKGEuZCxoKTtyZXR1cm4gZH1lbHNlIGlmKGguYSl7ZT1oLmEuYztpPWguYS5kO2lmKGMpe2o9YS5hLmM9PSh6S2MoKSx5S2MpP2k6ZTtmPWEuYS5jPT15S2M/ZTppO2c9YS5hLmdbZi5pLnBdO2s9QmViKGEuYS5wW2cucF0pK0JlYihhLmEuZFtmLmkucF0pK2Yubi5iK2YuYS5iLUJlYihhLmEuZFtqLmkucF0pLWoubi5iLWouYS5ifWVsc2V7aj1hLmEuYz09KHpLYygpLHhLYyk/aTplO2Y9YS5hLmM9PXhLYz9lOmk7az1CZWIoYS5hLnBbYS5hLmdbZi5pLnBdLnBdKStCZWIoYS5hLmRbZi5pLnBdKStmLm4uYitmLmEuYi1CZWIoYS5hLmRbai5pLnBdKS1qLm4uYi1qLmEuYn1hLmEublthLmEuZ1tlLmkucF0ucF09KHhkYigpLHRydWUpO2EuYS5uW2EuYS5nW2kuaS5wXS5wXT10cnVlO3JldHVybiBrfXJldHVybiBkfQpmdW5jdGlvbiBsYmUoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbDtpZihkLmdjKCk9PTApe3JldHVybiBmYWxzZX1pPShJZmUoKSxKRChiLDY5KS51aygpKTtnPWk/ZDpuZXcgd0RkKGQuZ2MoKSk7aWYoTGZlKGEuZSxiKSl7aWYoYi5QaSgpKXtmb3Ioaz1kLkpjKCk7ay5PYigpOyl7aj1rLlBiKCk7aWYoIXliZShhLGIsaixSRChiLDEwMSkmJihKRChiLDE5KS5CYiZQc2UpIT0wKSl7Zj1KZmUoYixqKTtnLkVjKGYpfX19ZWxzZSBpZighaSl7Zm9yKGs9ZC5KYygpO2suT2IoKTspe2o9ay5QYigpO2Y9SmZlKGIsaik7Zy5FYyhmKX19fWVsc2V7bD1LZmUoYS5lLnpoKCksYik7ZT1KRChhLmcsMTIyKTtmb3IoaD0wO2g8YS5pOysraCl7Zj1lW2hdO2lmKGwuWmwoZi5JaygpKSl7dGhyb3cgc2NiKG5ldyBUZWIoaEdlKSl9fWlmKGQuZ2MoKT4xKXt0aHJvdyBzY2IobmV3IFRlYihoR2UpKX1pZighaSl7Zj1KZmUoYixkLkpjKCkuUGIoKSk7Zy5FYyhmKX19cmV0dXJuIHVDZChhLEJiZShhLGIsYyksZyl9CmZ1bmN0aW9uICRiZShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztpZihMZmUoYS5lLGIpKXtpPShJZmUoKSxKRChiLDY5KS51aygpP25ldyBKZ2UoYixhKTpuZXcgWmZlKGIsYSkpO3diZShpLmMsaS5iKTtWZmUoaSxKRChjLDE2KSl9ZWxzZXtrPUtmZShhLmUuemgoKSxiKTtkPUpEKGEuZywxMjIpO2ZvcihnPTA7ZzxhLmk7KytnKXtlPWRbZ107Zj1lLklrKCk7aWYoay5abChmKSl7aWYoZj09KGVoZSgpLGNoZSl8fGY9PV9nZSl7aj1mY2UoYSxiLGMpO2g9ZztqP1VHZChhLGcpOisrZzt3aGlsZShnPGEuaSl7ZT1kW2ddO2Y9ZS5JaygpO2Y9PWNoZXx8Zj09X2dlP1VHZChhLGcpOisrZ31qfHxKRChEQ2QoYSxoLEpmZShiLGMpKSw3NCl9ZWxzZSBmY2UoYSxiLGMpP1VHZChhLGcpOkpEKERDZChhLGcsKElmZSgpLEpEKGIsNjkpLnVrKCk/SkQoYyw3NCk6SmZlKGIsYykpKSw3NCk7cmV0dXJufX1mY2UoYSxiLGMpfHx0Q2QoYSwoSWZlKCksSkQoYiw2OSkudWsoKT9KRChjLDc0KTpKZmUoYixjKSkpfX0KZnVuY3Rpb24gQkhjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtmb3IobD0wO2w8Yi5sZW5ndGg7bCsrKXtmb3IoaD1hLkpjKCk7aC5PYigpOyl7Zj1KRChoLlBiKCksMjI5KTtmLmZnKGwsYil9Zm9yKG09MDttPGJbbF0ubGVuZ3RoO20rKyl7Zm9yKGk9YS5KYygpO2kuT2IoKTspe2Y9SkQoaS5QYigpLDIyOSk7Zi5nZyhsLG0sYil9cD1iW2xdW21dLmo7Zm9yKG49MDtuPHAuYy5sZW5ndGg7bisrKXtmb3Ioaj1hLkpjKCk7ai5PYigpOyl7Zj1KRChqLlBiKCksMjI5KTtmLmhnKGwsbSxuLGIpfW89KHNEYihuLHAuYy5sZW5ndGgpLEpEKHAuY1tuXSwxMSkpO2M9MDtmb3IoZT1uZXcgeFpiKG8uYik7b21iKGUuYSl8fG9tYihlLmIpOyl7ZD1KRChvbWIoZS5hKT9wbWIoZS5hKTpwbWIoZS5iKSwxOCk7Zm9yKGs9YS5KYygpO2suT2IoKTspe2Y9SkQoay5QYigpLDIyOSk7Zi5lZyhsLG0sbixjKyssZCxiKX19fX19Zm9yKGc9YS5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDIyOSk7Zi5kZygpfX0KZnVuY3Rpb24gcXlkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtvPUpEKE5pYihhLmQsYiksMTQ3KTtpZighbyl7dGhyb3cgc2NiKG5ldyBleWQoJ0VkZ2UgZGlkIG5vdCBleGlzdCBpbiBpbnB1dC4nKSl9ZHpkKGEsYik7bD1ZeGQobyk7Zz15cWUoKCFiLmEmJihiLmE9bmV3IFgwZCh3MyxiLDYsNikpLGIuYSkpO2k9IWc7aWYoaSl7cD1uZXcgRUI7ZD1uZXcgS0FkKGEsbCxwLGIpO3dxZSgoIWIuYSYmKGIuYT1uZXcgWDBkKHczLGIsNiw2KSksYi5hKSxkKTtrQyhvLG5EZSxudWxsKTtrQyhvLG5EZSxwKX1mPWxzZChiLChMZ2QoKSx0ZmQpKTtpZihmKXttPUpEKGtzZChiLHRmZCksNzcpO2g9IW18fHhxZShtKTtqPSFoO2lmKGope249bmV3IEVCO2U9bmV3IFRBZChhLGIsbik7b2ZiKG0sZSk7a0MobywnanVuY3Rpb25Qb2ludHMnLG4pfX1jPXV5ZChhLEpEKE5pYihhLmUsYiksMjcpKTtrPWM9PShlaGQoKSxhaGQpO2smJld4ZChvLCdjb250YWluZXInLE90ZChiKS5rKTtyZXR1cm4gbnVsbH0KZnVuY3Rpb24gazFiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7YS5iPUJlYihNRChXTWIoYiwoQndjKCksWHZjKSkpKTthLmM9QmViKE1EKFdNYihiLCR2YykpKTthLmQ9SkQoV01iKGIsRHVjKSwzNDYpO2EuYT1KRChXTWIoYixYdGMpLDI4MCk7aTFiKGIpO2g9SkQoeUJiKEJCYihCQmIoREJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmIsMTYpKSxuZXcgbzFiKSxuZXcgcTFiKSxuZXcgczFiKSxuZXcgdTFiKSxoQWIobmV3IHpBYixuZXcgeEFiLG5ldyBGQWIsV0MoT0MoSEwsMSksRXJlLDEzMSwwLFsobEFiKCksakFiKV0pKSksMTUpO2ZvcihlPWguSmMoKTtlLk9iKCk7KXtjPUpEKGUuUGIoKSwxOCk7Zz1KRChXTWIoYywoSXFjKCksRHFjKSksMTUpO2cuSWMobmV3IHcxYihhKSk7Wk1iKGMsRHFjLG51bGwpfWZvcihkPWguSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwxOCk7aT1KRChXTWIoYywoSXFjKCksRXFjKSksMTgpO2Y9SkQoV01iKGMsQnFjKSwxNSk7YzFiKGEsZixpKTtaTWIoYyxCcWMsbnVsbCl9fQpmdW5jdGlvbiBNWmQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtpZihhLmEpe2g9YS5hLnZlKCk7aT1udWxsO2lmKGghPW51bGwpe2IuYSs9JycraH1lbHNle2c9YS5hLmprKCk7aWYoZyE9bnVsbCl7Zj1oZ2IoZyx3Z2IoOTEpKTtpZihmIT0tMSl7aT0oQURiKGYsZy5sZW5ndGgrMSksZy5zdWJzdHIoZikpO2IuYSs9JycrcWdiKGc9PW51bGw/UnFlOih0RGIoZyksZyksMCxmKX1lbHNle2IuYSs9JycrZ319fWlmKCEhYS5kJiZhLmQuaSE9MCl7ZT10cnVlO2IuYSs9JzwnO2ZvcihkPW5ldyBDSGQoYS5kKTtkLmUhPWQuaS5nYygpOyl7Yz1KRChBSGQoZCksODcpO2U/KGU9ZmFsc2UpOihiLmErPUxxZSxiKTtNWmQoYyxiKX1iLmErPSc+J31pIT1udWxsJiYoYi5hKz0nJytpLGIpfWVsc2UgaWYoYS5lKXtoPWEuZS56YjtoIT1udWxsJiYoYi5hKz0nJytoLGIpfWVsc2V7Yi5hKz0nPyc7aWYoYS5iKXtiLmErPScgc3VwZXIgJztNWmQoYS5iLGIpfWVsc2V7aWYoYS5mKXtiLmErPScgZXh0ZW5kcyAnO01aZChhLmYsYil9fX19CmZ1bmN0aW9uIG42ZChhKXthLmI9bnVsbDthLmE9bnVsbDthLm89bnVsbDthLnE9bnVsbDthLnY9bnVsbDthLnc9bnVsbDthLkI9bnVsbDthLnA9bnVsbDthLlE9bnVsbDthLlI9bnVsbDthLlM9bnVsbDthLlQ9bnVsbDthLlU9bnVsbDthLlY9bnVsbDthLlc9bnVsbDthLmJiPW51bGw7YS5lYj1udWxsO2EuYWI9bnVsbDthLkg9bnVsbDthLmRiPW51bGw7YS5jPW51bGw7YS5kPW51bGw7YS5mPW51bGw7YS5uPW51bGw7YS5yPW51bGw7YS5zPW51bGw7YS51PW51bGw7YS5HPW51bGw7YS5KPW51bGw7YS5lPW51bGw7YS5qPW51bGw7YS5pPW51bGw7YS5nPW51bGw7YS5rPW51bGw7YS50PW51bGw7YS5GPW51bGw7YS5JPW51bGw7YS5MPW51bGw7YS5NPW51bGw7YS5PPW51bGw7YS5QPW51bGw7YS4kPW51bGw7YS5OPW51bGw7YS5aPW51bGw7YS5jYj1udWxsO2EuSz1udWxsO2EuRD1udWxsO2EuQT1udWxsO2EuQz1udWxsO2EuXz1udWxsO2EuZmI9bnVsbDthLlg9bnVsbDthLlk9bnVsbDthLmdiPWZhbHNlO2EuaGI9ZmFsc2V9CmZ1bmN0aW9uIHBoYihhKXt2YXIgYixjLGQsZTtkPXJpYigoIWEuYyYmKGEuYz1maWIoemNiKGEuZikpKSxhLmMpLDApO2lmKGEuZT09MHx8YS5hPT0wJiZhLmYhPS0xJiZhLmU8MCl7cmV0dXJuIGR9Yj1vaGIoYSk8MD8xOjA7Yz1hLmU7ZT0oZC5sZW5ndGgrMSskd25kLk1hdGguYWJzKFlEKGEuZSkpLG5ldyBWZ2IpO2I9PTEmJihlLmErPSctJyxlKTtpZihhLmU+MCl7Yy09ZC5sZW5ndGgtYjtpZihjPj0wKXtlLmErPScwLic7Zm9yKDtjPmRoYi5sZW5ndGg7Yy09ZGhiLmxlbmd0aCl7UmdiKGUsZGhiKX1TZ2IoZSxkaGIsWUQoYykpO1FnYihlLChBRGIoYixkLmxlbmd0aCsxKSxkLnN1YnN0cihiKSkpfWVsc2V7Yz1iLWM7UWdiKGUscWdiKGQsYixZRChjKSkpO2UuYSs9Jy4nO1FnYihlLHBnYihkLFlEKGMpKSl9fWVsc2V7UWdiKGUsKEFEYihiLGQubGVuZ3RoKzEpLGQuc3Vic3RyKGIpKSk7Zm9yKDtjPC1kaGIubGVuZ3RoO2MrPWRoYi5sZW5ndGgpe1JnYihlLGRoYil9U2diKGUsZGhiLFlEKC1jKSl9cmV0dXJuIGUuYX0KZnVuY3Rpb24gRUljKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajtpZihhLmshPShEWWIoKSxBWWIpKXtyZXR1cm4gZmFsc2V9aWYoYS5qLmMubGVuZ3RoPD0xKXtyZXR1cm4gZmFsc2V9Zj1KRChXTWIoYSwoQndjKCksRXZjKSksMTAwKTtpZihmPT0oYWpkKCksWGlkKSl7cmV0dXJuIGZhbHNlfWU9KHp4YygpLCghYS5xPyhwbmIoKSxwbmIoKSxubmIpOmEucSkuX2IobHZjKT8oZD1KRChXTWIoYSxsdmMpLDIwMykpOihkPUpEKFdNYihnWWIoYSksbXZjKSwyMDMpKSxkKTtpZihlPT14eGMpe3JldHVybiBmYWxzZX1pZighKGU9PXd4Y3x8ZT09dnhjKSl7Zz1CZWIoTUQoa3pjKGEsaXdjKSkpO2I9SkQoV01iKGEsaHdjKSwxMzkpOyFiJiYoYj1uZXcgX1hiKGcsZyxnLGcpKTtqPWxZYihhLChSamQoKSxRamQpKTtpPWIuZCtiLmErKGouZ2MoKS0xKSpnO2lmKGk+YS5vLmIpe3JldHVybiBmYWxzZX1jPWxZYihhLHdqZCk7aD1iLmQrYi5hKyhjLmdjKCktMSkqZztpZihoPmEuby5iKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfQpmdW5jdGlvbiBZTGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7Yi5TZygnT3J0aG9nb25hbCBlZGdlIHJvdXRpbmcnLDEpO2o9QmViKE1EKFdNYihhLChCd2MoKSxmd2MpKSkpO2M9QmViKE1EKFdNYihhLFh2YykpKTtkPUJlYihNRChXTWIoYSwkdmMpKSk7bT1uZXcgV05jKDAsYyk7cT0wO2c9bmV3IEFqYihhLmIsMCk7aD1udWxsO2s9bnVsbDtpPW51bGw7bD1udWxsO2Rve2s9Zy5iPGcuZC5nYygpPyhyRGIoZy5iPGcuZC5nYygpKSxKRChnLmQuWGIoZy5jPWcuYisrKSwyNSkpOm51bGw7bD0haz9udWxsOmsuYTtpZihoKXt6WGIoaCxxKTtxKz1oLmMuYX1wPSFoP3E6cStkO289Vk5jKG0sYSxpLGwscCk7ZT0haHx8WXEoaSwoZ01jKCksZU1jKSk7Zj0ha3x8WXEobCwoZ01jKCksZU1jKSk7aWYobz4wKXtuPShvLTEpKmM7ISFoJiYobis9ZCk7ISFrJiYobis9ZCk7bjxqJiYhZSYmIWYmJihuPWopO3ErPW59ZWxzZSAhZSYmIWYmJihxKz1qKTtoPWs7aT1sfXdoaWxlKGspO2EuZi5hPXE7Yi5UZygpfQpmdW5jdGlvbiBPYWUoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtrPW51bGw7ISFhLmQmJihrPUpEKE9pYihhLmQsYiksMTQxKSk7aWYoIWspe2Y9YS5hLnJpKCk7bD1mLmk7aWYoIWEuZHx8VWliKGEuZCkhPWwpe2k9bmV3IElyYjshIWEuZCYmTGQoaSxhLmQpO2o9aS5mLmMraS5pLmM7Zm9yKGg9ajtoPGw7KytoKXtkPUpEKG5EZChmLGgpLDE0MSk7ZT1oYWUoYS5lLGQpLnZlKCk7Yz1KRChlPT1udWxsP2dzYihpLmYsbnVsbCxkKTpBc2IoaS5pLGUsZCksMTQxKTshIWMmJmMhPWQmJihlPT1udWxsP2dzYihpLmYsbnVsbCxjKTpBc2IoaS5pLGUsYykpfWlmKGkuZi5jK2kuaS5jIT1sKXtmb3IoZz0wO2c8ajsrK2cpe2Q9SkQobkRkKGYsZyksMTQxKTtlPWhhZShhLmUsZCkudmUoKTtjPUpEKGU9PW51bGw/Z3NiKGkuZixudWxsLGQpOkFzYihpLmksZSxkKSwxNDEpOyEhYyYmYyE9ZCYmKGU9PW51bGw/Z3NiKGkuZixudWxsLGMpOkFzYihpLmksZSxjKSl9fWEuZD1pfWs9SkQoT2liKGEuZCxiKSwxNDEpfXJldHVybiBrfQpmdW5jdGlvbiBHVmIoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbCxtLG47bD15ZGIoTEQoV01iKGIsKEJ3YygpLGV2YykpKSk7bT1udWxsO2Y9PShFeWMoKSxCeWMpJiZkLmMuaT09Yz8obT1kLmMpOmY9PUN5YyYmZC5kLmk9PWMmJihtPWQuZCk7aj1nO2lmKCFqfHwhbHx8ISFtKXtrPShSamQoKSxQamQpO20/KGs9bS5qKTpjamQoSkQoV01iKGMsRXZjKSwxMDApKSYmKGs9Zj09QnljP1FqZDp3amQpO2k9RFZiKGEsYixjLGYsayxkKTtoPUNWYigoZ1liKGMpLGQpKTtpZihmPT1CeWMpe2dXYihoLEpEKE1sYihpLmosMCksMTEpKTtoV2IoaCxlKX1lbHNle2dXYihoLGUpO2hXYihoLEpEKE1sYihpLmosMCksMTEpKX1qPW5ldyBRVmIoZCxoLGksSkQoV01iKGksKElxYygpLGtxYykpLDExKSxmLCFtKX1lbHNle0lsYihqLmUsZCk7bj0kd25kLk1hdGgubWF4KEJlYihNRChXTWIoai5kLEZ1YykpKSxCZWIoTUQoV01iKGQsRnVjKSkpKTtaTWIoai5kLEZ1YyxuKX1SYyhhLmEsZCxuZXcgVFZiKGouZCxiLGYpKTtyZXR1cm4gan0KZnVuY3Rpb24gQk5kKCl7Qk5kPVpjYjt2YXIgYTtBTmQ9bmV3IGZPZDt1TmQ9U0MoaEosaHJlLDIsMCw2LDEpO25OZD1JY2IoU05kKDMzLDU4KSxTTmQoMSwyNikpO29OZD1JY2IoU05kKDk3LDEyMiksU05kKDY1LDkwKSk7cE5kPVNOZCg0OCw1Nyk7bE5kPUljYihuTmQsMCk7bU5kPUljYihvTmQscE5kKTtxTmQ9SWNiKEljYigwLFNOZCgxLDYpKSxTTmQoMzMsMzgpKTtyTmQ9SWNiKEljYihwTmQsU05kKDY1LDcwKSksU05kKDk3LDEwMikpO3hOZD1JY2IobE5kLFFOZCgiLV8uIX4qJygpIikpO3lOZD1JY2IobU5kLFROZCgiLV8uIX4qJygpIikpO1FOZChPRWUpO1ROZChPRWUpO0ljYih4TmQsUU5kKCc7OkAmPSskLCcpKTtJY2IoeU5kLFROZCgnOzpAJj0rJCwnKSk7c05kPVFOZCgnOi8/IycpO3ROZD1UTmQoJzovPyMnKTt2TmQ9UU5kKCcvPyMnKTt3TmQ9VE5kKCcvPyMnKTthPW5ldyBRcmI7YS5hLnljKCdqYXInLGEpO2EuYS55YygnemlwJyxhKTthLmEueWMoJ2FyY2hpdmUnLGEpO3pOZD0ocG5iKCksbmV3IEFwYihhKSl9CmZ1bmN0aW9uIERWYihhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGosayxsO2c9bnVsbDtqPWQ9PShFeWMoKSxCeWMpP2YuYzpmLmQ7aT1zWGIoYik7aWYoai5pPT1jKXtnPUpEKE5pYihhLmIsaiksOSk7aWYoIWcpe2c9cFhiKGosSkQoV01iKGMsKEJ3YygpLEV2YykpLDEwMCksZSx6VmIoaiksbnVsbCxqLm4sai5vLGksYik7Wk1iKGcsKElxYygpLGtxYyksaik7UWliKGEuYixqLGcpfX1lbHNle2c9cFhiKChrPW5ldyAkTWIsbD1CZWIoTUQoV01iKGIsKEJ3YygpLFd2YykpKSkvMixZTWIoayxEdmMsbCksayksSkQoV01iKGMsRXZjKSwxMDApLGUsZD09QnljPy0xOjEsbnVsbCxuZXcgQ2RkLG5ldyBFZGQoMCwwKSxpLGIpO2g9RVZiKGcsYyxkKTtaTWIoZywoSXFjKCksa3FjKSxoKTtRaWIoYS5iLGgsZyl9SkQoV01iKGIsKElxYygpLFdwYykpLDIyKS5FYygoJG9jKCksVG9jKSk7Y2pkKEpEKFdNYihiLChCd2MoKSxFdmMpKSwxMDApKT9aTWIoYixFdmMsKGFqZCgpLFppZCkpOlpNYihiLEV2YywoYWpkKCksJGlkKSk7cmV0dXJuIGd9CmZ1bmN0aW9uIGo4YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2g9MDtvPTA7aT13bWIoYS5nLGEuZy5sZW5ndGgpO2Y9YS5lO2c9YS5qO2Q9YS5iO2U9YS5jO2Rve249MDtmb3Ioaz1uZXcgcm1iKGEucSk7ay5hPGsuYy5jLmxlbmd0aDspe2o9SkQocG1iKGspLDkpO209aDhiKGEsaik7Yz10cnVlOyhhLnI9PShkeWMoKSxZeGMpfHxhLnI9PV94YykmJihjPXlkYihMRChtLmIpKSk7aWYoSkQobS5hLDE3KS5hPDAmJmMpeysrbjtpPXdtYihhLmcsYS5nLmxlbmd0aCk7YS5lPWEuZStKRChtLmEsMTcpLmE7bys9Zi1hLmU7Zj1hLmUrSkQobS5hLDE3KS5hO2c9YS5qO2Q9WnUoYS5iKTtlPVp1KGEuYyl9ZWxzZXthLmc9d21iKGksaS5sZW5ndGgpO2EuZT1mO2EuYj0oUWIoZCksZD9uZXcgV2xiKGQpOiR1KG5ldyBybWIoZCkpKTthLmM9KFFiKGUpLGU/bmV3IFdsYihlKTokdShuZXcgcm1iKGUpKSk7YS5qPWd9fSsraDtsPW4hPTAmJnlkYihMRChiLktiKG5ldyB4b2QoamZiKG8pLGpmYihoKSkpKSl9d2hpbGUobCl9CmZ1bmN0aW9uIHQyYyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQztnPWEuZjttPWIuZjtoPWc9PShJNGMoKSxENGMpfHxnPT1GNGM7bj1tPT1ENGN8fG09PUY0YztpPWc9PUU0Y3x8Zz09RzRjO289bT09RTRjfHxtPT1HNGM7aj1nPT1FNGN8fGc9PUQ0YztwPW09PUU0Y3x8bT09RDRjO2lmKGgmJm4pe3JldHVybiBhLmY9PUY0Yz9hOmJ9ZWxzZSBpZihpJiZvKXtyZXR1cm4gYS5mPT1HNGM/YTpifWVsc2UgaWYoaiYmcCl7aWYoZz09RTRjKXtsPWE7az1ifWVsc2V7bD1iO2s9YX1mPShxPWMuaitjLmYscj1sLmUrZC5mLHM9JHduZC5NYXRoLm1heChxLHIpLHQ9cy0kd25kLk1hdGgubWluKGMuaixsLmUpLHU9bC5kK2QuZy1jLmksdSp0KTtlPSh2PWMuaStjLmcsdz1rLmQrZC5nLEE9JHduZC5NYXRoLm1heCh2LHcpLEI9QS0kd25kLk1hdGgubWluKGMuaSxrLmQpLEM9ay5lK2QuZi1jLmosQipDKTtyZXR1cm4gZjw9ZT9hLmY9PUU0Yz9hOmI6YS5mPT1ENGM/YTpifXJldHVybiBhfQpmdW5jdGlvbiB3V2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtaTWIoYiwodFVjKCksalVjKSwwKTtpPUpEKFdNYihiLGZVYyksMzkpO2lmKGIuZC5iPT0wKXtpZihpKXtrPUJlYihNRChXTWIoaSxtVWMpKSkrYS5iK3hXYyhhLGksYik7Wk1iKGIsbVVjLGspfWVsc2V7Wk1iKGIsbVVjLDApfX1lbHNle2ZvcihkPShmPUd0YigobmV3IGdSYyhiKSkuYS5kLDApLG5ldyBqUmMoZikpO1R0YihkLmEpOyl7Yz1KRChVdGIoZC5hKSw2NSkuYzt3V2MoYSxjKX1oPUpEKERyKChnPUd0YigobmV3IGdSYyhiKSkuYS5kLDApLG5ldyBqUmMoZykpKSwzOSk7bD1KRChDcigoZT1HdGIoKG5ldyBnUmMoYikpLmEuZCwwKSxuZXcgalJjKGUpKSksMzkpO2o9KEJlYihNRChXTWIobCxtVWMpKSkrQmViKE1EKFdNYihoLG1VYykpKSkvMjtpZihpKXtrPUJlYihNRChXTWIoaSxtVWMpKSkrYS5iK3hXYyhhLGksYik7Wk1iKGIsbVVjLGspO1pNYihiLGpVYyxCZWIoTUQoV01iKGIsbVVjKSkpLWopO3ZXYyhhLGIpfWVsc2V7Wk1iKGIsbVVjLGopfX19CmZ1bmN0aW9uIEsyYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbjtqPW5ldyBVbGI7aWYoIVhNYihhLChJcWMoKSxScGMpKSl7cmV0dXJuIGp9Zm9yKGQ9SkQoV01iKGEsUnBjKSwxNSkuSmMoKTtkLk9iKCk7KXtiPUpEKGQuUGIoKSw5KTtKMmIoYixhKTtZQ2Ioai5jLGIpfWZvcihmPW5ldyBybWIoYS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjUpO2ZvcihoPW5ldyBybWIoZS5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7aWYoZy5rIT0oRFliKCksd1liKSl7Y29udGludWV9aT1KRChXTWIoZyxTcGMpLDkpOyEhaSYmKGs9bmV3IGJaYixfWWIoayxnKSxsPUpEKFdNYihnLFRwYyksNjQpLGFaYihrLGwpLG09SkQoTWxiKGkuaiwwKSwxMSksbj1uZXcga1diLGdXYihuLGspLGhXYihuLG0pLHVuZGVmaW5lZCl9fWZvcihjPW5ldyBybWIoaik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDkpO3FZYihiLEpEKE1sYihhLmIsYS5iLmMubGVuZ3RoLTEpLDI1KSl9cmV0dXJuIGp9CmZ1bmN0aW9uIHlHYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsO2s9YS5lLmEuYy5sZW5ndGg7Zm9yKGc9bmV3IHJtYihhLmUuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGcpLDEyMyk7Zi5qPWZhbHNlfWEuaT1TQyhjRSxpc2UsMzAsaywxNSwxKTthLmc9U0MoY0UsaXNlLDMwLGssMTUsMSk7YS5uPW5ldyBVbGI7ZT0wO2w9bmV3IFVsYjtmb3IoaT1uZXcgcm1iKGEuZS5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMTIzKTtoLmQ9ZSsrO2guYi5hLmMubGVuZ3RoPT0wJiZJbGIoYS5uLGgpO0tsYihsLGguZyl9Yj0wO2ZvcihkPW5ldyBybWIobCk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDIxNik7Yy5jPWIrKztjLmY9ZmFsc2V9aj1sLmMubGVuZ3RoO2lmKGEuYj09bnVsbHx8YS5iLmxlbmd0aDxqKXthLmI9U0MoYUUsUnNlLDMwLGosMTUsMSk7YS5jPVNDKHBjYixWdGUsMzAsaiwxNiwxKX1lbHNle0VtYihhLmMpfWEuZD1sO2EucD1uZXcgeHRiKE92KGEuZC5jLmxlbmd0aCkpO2Euaj0xfQpmdW5jdGlvbiBFUGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aWYoYi5lLmMubGVuZ3RoPD0xKXtyZXR1cm59YS5mPWI7YS5kPUpEKFdNYihhLmYsKG5QYigpLGNQYikpLDM4Mik7YS5nPUpEKFdNYihhLmYsZ1BiKSwxNykuYTthLmU9QmViKE1EKFdNYihhLmYsZFBiKSkpO2EuYz1CZWIoTUQoV01iKGEuZixiUGIpKSk7d3QoYS5iKTtmb3IoZT1uZXcgcm1iKGEuZi5jKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjg4KTt2dChhLmIsZC5jLGQsbnVsbCk7dnQoYS5iLGQuZCxkLG51bGwpfWg9YS5mLmUuYy5sZW5ndGg7YS5hPVFDKGFFLFtocmUsUnNlXSxbMTA4LDMwXSwxNSxbaCxoXSwyKTtmb3Ioaj1uZXcgcm1iKGEuZi5lKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksMTUxKTtBUGIoYSxpLGEuYVtpLmFdKX1hLmk9UUMoYUUsW2hyZSxSc2VdLFsxMDgsMzBdLDE1LFtoLGhdLDIpO2ZvcihmPTA7ZjxoOysrZil7Zm9yKGc9MDtnPGg7KytnKXtjPWEuYVtmXVtnXTtrPTEvKGMqYyk7YS5pW2ZdW2ddPWt9fX0KZnVuY3Rpb24gWVBiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87aD1iLiRnKCk7aHx8Yi5TZyh5dWUsMSk7Yz1KRChXTWIoYSwoSXFjKCksdXFjKSksMTUpO2c9MS9jLmdjKCk7aWYoYi5aZygpKXtiLl9nKCdFTEsgTGF5ZXJlZCB1c2VzIHRoZSBmb2xsb3dpbmcgJytjLmdjKCkrJyBtb2R1bGVzOicpO249MDtmb3IobT1jLkpjKCk7bS5PYigpOyl7az1KRChtLlBiKCksNDQpO2Q9KG48MTA/JzAnOicnKStuKys7Yi5fZygnICAgU2xvdCAnK2QrJzogJytlZWIocmIoaykpKX19bz0wO2ZvcihsPWMuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSw0NCk7aWYoYi5ZZygpKXtyZXR1cm59ay5JZihhLGIuYmgoZykpOysrb31mb3IoZj1uZXcgcm1iKGEuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDI1KTtLbGIoYS5hLGUuYSk7ZS5hLmMubGVuZ3RoPTB9Zm9yKGo9bmV3IHJtYihhLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSw5KTtxWWIoaSxudWxsKX1hLmIuYy5sZW5ndGg9MDtofHxiLlRnKCl9CmZ1bmN0aW9uIGgzYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsO2w9bmV3IFVsYjtrPW5ldyBYNGMoMCxjKTtmPTA7UzRjKGssbmV3IGo0YygwLDAsayxjKSk7ZT0wO2ZvcihqPW5ldyBDSGQoYSk7ai5lIT1qLmkuZ2MoKTspe2k9SkQoQUhkKGopLDI3KTtkPUpEKE1sYihrLmEsay5hLmMubGVuZ3RoLTEpLDE3Mik7aD1lK2kuZysoSkQoTWxiKGsuYSwwKSwxNzIpLmIuYy5sZW5ndGg9PTA/MDpjKTtpZihoPmJ8fHlkYihMRChrc2QoaSwoazJjKCksUjFjKSkpKSl7ZT0wO2YrPWsuYitjO1lDYihsLmMsayk7az1uZXcgWDRjKGYsYyk7ZD1uZXcgajRjKDAsay5mLGssYyk7UzRjKGssZCk7ZT0wfWlmKGQuYi5jLmxlbmd0aD09MHx8IXlkYihMRChrc2QoWndkKGkpLChrMmMoKSwkMWMpKSkpJiYoaS5mPj1kLm8mJmkuZjw9ZC5mfHxkLmEqMC41PD1pLmYmJmQuYSoxLjU+PWkuZikpeyQzYyhkLGkpfWVsc2V7Zz1uZXcgajRjKGQucytkLnIrYyxrLmYsayxjKTtTNGMoayxnKTskM2MoZyxpKX1lPWkuaStpLmd9WUNiKGwuYyxrKTtyZXR1cm4gbH0KZnVuY3Rpb24gTm9lKGEpe3ZhciBiLGMsZCxlO2lmKGEuYj09bnVsbHx8YS5iLmxlbmd0aDw9MilyZXR1cm47aWYoYS5hKXJldHVybjtiPTA7ZT0wO3doaWxlKGU8YS5iLmxlbmd0aCl7aWYoYiE9ZSl7YS5iW2JdPWEuYltlKytdO2EuYltiKzFdPWEuYltlKytdfWVsc2UgZSs9MjtjPWEuYltiKzFdO3doaWxlKGU8YS5iLmxlbmd0aCl7aWYoYysxPGEuYltlXSlicmVhaztpZihjKzE9PWEuYltlXSl7YS5iW2IrMV09YS5iW2UrMV07Yz1hLmJbYisxXTtlKz0yfWVsc2UgaWYoYz49YS5iW2UrMV0pe2UrPTJ9ZWxzZSBpZihjPGEuYltlKzFdKXthLmJbYisxXT1hLmJbZSsxXTtjPWEuYltiKzFdO2UrPTJ9ZWxzZXt0aHJvdyBzY2IobmV3IHF6KCdUb2tlbiNjb21wYWN0UmFuZ2VzKCk6IEludGVybmVsIEVycm9yOiBbJythLmJbYl0rJywnK2EuYltiKzFdKyddIFsnK2EuYltlXSsnLCcrYS5iW2UrMV0rJ10nKSl9fWIrPTJ9aWYoYiE9YS5iLmxlbmd0aCl7ZD1TQyhjRSxpc2UsMzAsYiwxNSwxKTskZ2IoYS5iLDAsZCwwLGIpO2EuYj1kfWEuYT10cnVlfQpmdW5jdGlvbiBIVmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaTtmb3IoZz1FYyhhLmEpLkpjKCk7Zy5PYigpOyl7Zj1KRChnLlBiKCksMTgpO2lmKGYuYi5jLmxlbmd0aD4wKXtkPW5ldyBXbGIoSkQoUWMoYS5hLGYpLDIyKSk7cG5iKCk7U2xiKGQsbmV3IFdWYihiKSk7ZT1uZXcgQWpiKGYuYiwwKTt3aGlsZShlLmI8ZS5kLmdjKCkpe2M9KHJEYihlLmI8ZS5kLmdjKCkpLEpEKGUuZC5YYihlLmM9ZS5iKyspLDcyKSk7aD0tMTtzd2l0Y2goSkQoV01iKGMsKEJ3YygpLHd1YykpLDI3NikuZyl7Y2FzZSAxOmg9ZC5jLmxlbmd0aC0xO2JyZWFrO2Nhc2UgMDpoPUZWYihkKTticmVhaztjYXNlIDI6aD0wO31pZihoIT0tMSl7aT0oc0RiKGgsZC5jLmxlbmd0aCksSkQoZC5jW2hdLDI0OCkpO0lsYihpLmIuYixjKTtKRChXTWIoZ1liKGkuYi5jLmkpLChJcWMoKSxXcGMpKSwyMikuRWMoKCRvYygpLFNvYykpO0pEKFdNYihnWWIoaS5iLmMuaSksV3BjKSwyMikuRWMoUW9jKTt0amIoZSk7Wk1iKGMsbnFjLGYpfX19Z1diKGYsbnVsbCk7aFdiKGYsbnVsbCl9fQpmdW5jdGlvbiBQRmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO2s9bmV3IFVsYjttPW5ldyBRcmI7Zz1iLmI7Zm9yKGU9MDtlPGcuYy5sZW5ndGg7ZSsrKXtqPShzRGIoZSxnLmMubGVuZ3RoKSxKRChnLmNbZV0sMjUpKS5hO2suYy5sZW5ndGg9MDtmb3IoZj0wO2Y8ai5jLmxlbmd0aDtmKyspe2g9YS5hW2VdW2ZdO2gucD1mO2guaz09KERZYigpLEJZYikmJihZQ2Ioay5jLGgpLHRydWUpO1JsYihKRChNbGIoYi5iLGUpLDI1KS5hLGYsaCk7aC5qLmMubGVuZ3RoPTA7S2xiKGguaixKRChKRChNbGIoYS5iLGUpLDE1KS5YYihmKSwxNikpO2JqZChKRChXTWIoaCwoQndjKCksRXZjKSksMTAwKSl8fFpNYihoLEV2YywoYWpkKCksV2lkKSl9Zm9yKGQ9bmV3IHJtYihrKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksOSk7bD1ORmMoYyk7bS5hLnljKGwsbSk7bS5hLnljKGMsbSl9fWZvcihpPW0uYS5lYygpLkpjKCk7aS5PYigpOyl7aD1KRChpLlBiKCksOSk7cG5iKCk7U2xiKGguaiwoRzliKCksQTliKSk7aC5pPXRydWU7ZFliKGgpfX0KZnVuY3Rpb24gVzdiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2IuU2coJ0VkZ2Ugc3BsaXR0aW5nJywxKTtpZihhLmIuYy5sZW5ndGg8PTIpe2IuVGcoKTtyZXR1cm59Zj1uZXcgQWpiKGEuYiwwKTtnPShyRGIoZi5iPGYuZC5nYygpKSxKRChmLmQuWGIoZi5jPWYuYisrKSwyNSkpO3doaWxlKGYuYjxmLmQuZ2MoKSl7ZT1nO2c9KHJEYihmLmI8Zi5kLmdjKCkpLEpEKGYuZC5YYihmLmM9Zi5iKyspLDI1KSk7Zm9yKGk9bmV3IHJtYihlLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSw5KTtmb3Ioaz1uZXcgcm1iKGguaik7ay5hPGsuYy5jLmxlbmd0aDspe2o9SkQocG1iKGspLDExKTtmb3IoZD1uZXcgcm1iKGouZyk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDE4KTttPWMuZDtsPW0uaS5jO2whPWUmJmwhPWcmJl83YihjLChuPW5ldyB0WWIoYSksclliKG4sKERZYigpLHlZYikpLFpNYihuLChJcWMoKSxrcWMpLGMpLFpNYihuLChCd2MoKSxFdmMpLChhamQoKSxYaWQpKSxxWWIobixnKSxuKSl9fX19Yi5UZygpfQpmdW5jdGlvbiBnJGIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtO2I9b3hkKGEpO2Y9eWRiKExEKGtzZChiLChCd2MoKSxOdWMpKSkpO2s9MDtlPTA7Zm9yKGo9bmV3IENIZCgoIWEuZSYmKGEuZT1uZXcgcmVlKHgzLGEsNyw0KSksYS5lKSk7ai5lIT1qLmkuZ2MoKTspe2k9SkQoQUhkKGopLDg1KTtoPVN0ZChpKTtnPWgmJmYmJnlkYihMRChrc2QoaSxPdWMpKSk7bT1fQmQoSkQobkRkKCghaS5jJiYoaS5jPW5ldyByZWUodjMsaSw1LDgpKSxpLmMpLDApLDg0KSk7aCYmZz8rK2U6aCYmIWc/KytrOlp3ZChtKT09Ynx8bT09Yj8rK2U6KytrfWZvcihkPW5ldyBDSGQoKCFhLmQmJihhLmQ9bmV3IHJlZSh4MyxhLDgsNSkpLGEuZCkpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSw4NSk7aD1TdGQoYyk7Zz1oJiZmJiZ5ZGIoTEQoa3NkKGMsT3VjKSkpO2w9X0JkKEpEKG5EZCgoIWMuYiYmKGMuYj1uZXcgcmVlKHYzLGMsNCw3KSksYy5iKSwwKSw4NCkpO2gmJmc/KytrOmgmJiFnPysrZTpad2QobCk9PWJ8fGw9PWI/KytrOisrZX1yZXR1cm4gay1lfQpmdW5jdGlvbiBQemMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG47Yy5TZygnRGVwdGgtZmlyc3QgY3ljbGUgcmVtb3ZhbCcsMSk7bD1iLmE7az1sLmMubGVuZ3RoO2EuYz1uZXcgVWxiO2EuZD1TQyhwY2IsVnRlLDMwLGssMTYsMSk7YS5hPVNDKHBjYixWdGUsMzAsaywxNiwxKTthLmI9bmV3IFVsYjtnPTA7Zm9yKGo9bmV3IHJtYihsKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksOSk7aS5wPWc7Y3IoaFliKGkpKSYmSWxiKGEuYyxpKTsrK2d9Zm9yKG49bmV3IHJtYihhLmMpO24uYTxuLmMuYy5sZW5ndGg7KXttPUpEKHBtYihuKSw5KTtPemMoYSxtKX1mb3IoZj0wO2Y8aztmKyspe2lmKCFhLmRbZl0pe2g9KHNEYihmLGwuYy5sZW5ndGgpLEpEKGwuY1tmXSw5KSk7T3pjKGEsaCl9fWZvcihlPW5ldyBybWIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTgpO2ZXYihkLHRydWUpO1pNYihiLChJcWMoKSxNcGMpLCh4ZGIoKSx0cnVlKSl9YS5jPW51bGw7YS5kPW51bGw7YS5hPW51bGw7YS5iPW51bGw7Yy5UZygpfQpmdW5jdGlvbiBxaGIoYSl7dmFyIGIsYyxkLGUsZjtpZihhLmchPW51bGwpe3JldHVybiBhLmd9aWYoYS5hPDMyKXthLmc9cWliKHpjYihhLmYpLFlEKGEuZSkpO3JldHVybiBhLmd9ZT1yaWIoKCFhLmMmJihhLmM9ZmliKHpjYihhLmYpKSksYS5jKSwwKTtpZihhLmU9PTApe3JldHVybiBlfWI9KCFhLmMmJihhLmM9ZmliKHpjYihhLmYpKSksYS5jKS5lPDA/MjoxO2M9ZS5sZW5ndGg7ZD0tYS5lK2MtYjtmPW5ldyBVZ2I7Zi5hKz0nJytlO2lmKGEuZT4wJiZkPj0tNil7aWYoZD49MCl7VGdiKGYsYy1ZRChhLmUpLFN0cmluZy5mcm9tQ2hhckNvZGUoNDYpKX1lbHNle2dkYihmLGItMSxiLTEsJzAuJyk7VGdiKGYsYisxLHpnYihkaGIsMCwtWUQoZCktMSkpfX1lbHNle2lmKGMtYj49MSl7VGdiKGYsYixTdHJpbmcuZnJvbUNoYXJDb2RlKDQ2KSk7KytjfVRnYihmLGMsU3RyaW5nLmZyb21DaGFyQ29kZSg2OSkpO2Q+MCYmVGdiKGYsKytjLFN0cmluZy5mcm9tQ2hhckNvZGUoNDMpKTtUZ2IoZiwrK2MsJycrUWNiKHpjYihkKSkpfWEuZz1mLmE7cmV0dXJuIGEuZ30KZnVuY3Rpb24gTkhjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEE7ZD1CZWIoTUQoV01iKGIsKEJ3YygpLGt2YykpKSk7dj1KRChXTWIoYixqd2MpLDE3KS5hO209NDtlPTM7dz0yMC92O249ZmFsc2U7aT0wO2c9SHFlO2Rve2Y9aSE9MTtsPWkhPTA7QT0wO2ZvcihxPWEuYSxzPTAsdT1xLmxlbmd0aDtzPHU7KytzKXtvPXFbc107by5mPW51bGw7T0hjKGEsbyxmLGwsZCk7QSs9JHduZC5NYXRoLmFicyhvLmEpfWRve2g9U0hjKGEsYil9d2hpbGUoaCk7Zm9yKHA9YS5hLHI9MCx0PXAubGVuZ3RoO3I8dDsrK3Ipe289cFtyXTtjPSRIYyhvKS5hO2lmKGMhPTApe2ZvcihrPW5ldyBybWIoby5lKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksOSk7ai5uLmIrPWN9fX1pZihpPT0wfHxpPT0xKXstLW07aWYobTw9MCYmKEE8Z3x8LW0+dikpe2k9MjtnPUhxZX1lbHNlIGlmKGk9PTApe2k9MTtnPUF9ZWxzZXtpPTA7Zz1BfX1lbHNle249QT49Z3x8Zy1BPHc7Zz1BO24mJi0tZX19d2hpbGUoIShuJiZlPD0wKSl9CmZ1bmN0aW9uIEtEYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvO289bmV3IElyYjtmb3IoZj1hLmEuZWMoKS5KYygpO2YuT2IoKTspe2Q9SkQoZi5QYigpLDE3Nik7UWliKG8sZCxjLiRlKGQpKX1nPShRYihhKSxhP25ldyBXbGIoYSk6JHUoYS5hLmVjKCkuSmMoKSkpO1NsYihnLG5ldyBNRGIobykpO2g9VHgoZyk7aT1uZXcgWkRiKGIpO249bmV3IElyYjtnc2Iobi5mLGIsaSk7d2hpbGUoaC5hLmdjKCkhPTApe2o9bnVsbDtrPW51bGw7bD1udWxsO2ZvcihlPWguYS5lYygpLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksMTc2KTtpZihCZWIoTUQoV2QoZnNiKG8uZixkKSkpKTw9S3NlKXtpZihMaWIobixkLmEpJiYhTGliKG4sZC5iKSl7az1kLmI7bD1kLmE7aj1kO2JyZWFrfWlmKExpYihuLGQuYikpe2lmKCFMaWIobixkLmEpKXtrPWQuYTtsPWQuYjtqPWQ7YnJlYWt9fX19aWYoIWope2JyZWFrfW09bmV3IFpEYihrKTtJbGIoSkQoV2QoZnNiKG4uZixsKSksMjI0KS5hLG0pO2dzYihuLmYsayxtKTtoLmEuQWMoaikhPW51bGx9cmV0dXJuIGl9CmZ1bmN0aW9uIFhjZChhLGIpe0ljZCgpO3ZhciBjLGQsZSxmLGcsaDtmPWIuYy0oYS5jK2EuYik7ZT1hLmMtKGIuYytiLmIpO2c9YS5kLShiLmQrYi5hKTtjPWIuZC0oYS5kK2EuYSk7ZD0kd25kLk1hdGgubWF4KGUsZik7aD0kd25kLk1hdGgubWF4KGcsYyk7UnkoKTtWeShwemUpO2lmKCgkd25kLk1hdGguYWJzKGQpPD1wemV8fGQ9PTB8fGlzTmFOKGQpJiZpc05hTigwKT8wOmQ8MD8tMTpkPjA/MTpXeShpc05hTihkKSxpc05hTigwKSkpPj0wXihudWxsLFZ5KHB6ZSksKCR3bmQuTWF0aC5hYnMoaCk8PXB6ZXx8aD09MHx8aXNOYU4oaCkmJmlzTmFOKDApPzA6aDwwPy0xOmg+MD8xOld5KGlzTmFOKGgpLGlzTmFOKDApKSk+PTApKXtyZXR1cm4gJHduZC5NYXRoLm1heChoLGQpfVZ5KHB6ZSk7aWYoKCR3bmQuTWF0aC5hYnMoZCk8PXB6ZXx8ZD09MHx8aXNOYU4oZCkmJmlzTmFOKDApPzA6ZDwwPy0xOmQ+MD8xOld5KGlzTmFOKGQpLGlzTmFOKDApKSk+MCl7cmV0dXJuICR3bmQuTWF0aC5zcXJ0KGgqaCtkKmQpfXJldHVybiAtJHduZC5NYXRoLnNxcnQoaCpoK2QqZCl9CmZ1bmN0aW9uIENwZShhLGIpe3ZhciBjLGQsZSxmLGcsaDtpZighYilyZXR1cm47IWEuYSYmKGEuYT1uZXcgV3diKTtpZihhLmU9PTIpe1R3YihhLmEsYik7cmV0dXJufWlmKGIuZT09MSl7Zm9yKGU9MDtlPGIuTW0oKTtlKyspQ3BlKGEsYi5JbShlKSk7cmV0dXJufWg9YS5hLmEuYy5sZW5ndGg7aWYoaD09MCl7VHdiKGEuYSxiKTtyZXR1cm59Zz1KRChVd2IoYS5hLGgtMSksMTIxKTtpZighKChnLmU9PTB8fGcuZT09MTApJiYoYi5lPT0wfHxiLmU9PTEwKSkpe1R3YihhLmEsYik7cmV0dXJufWY9Yi5lPT0wPzI6Yi5KbSgpLmxlbmd0aDtpZihnLmU9PTApe2M9bmV3IElnYjtkPWcuSG0oKTtkPj1Qc2U/RWdiKGMsTG5lKGQpKTpBZ2IoYyxkJldyZSk7Zz0oKytub2UsbmV3IHpwZSgxMCxudWxsLDApKTtWd2IoYS5hLGcsaC0xKX1lbHNle2M9KGcuSm0oKS5sZW5ndGgrZixuZXcgSWdiKTtFZ2IoYyxnLkptKCkpfWlmKGIuZT09MCl7ZD1iLkhtKCk7ZD49UHNlP0VnYihjLExuZShkKSk6QWdiKGMsZCZXcmUpfWVsc2V7RWdiKGMsYi5KbSgpKX1KRChnLDUxNSkuYj1jLmF9CmZ1bmN0aW9uIEFtYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtpZihjLmRjKCkpe3JldHVybn1oPTA7bT0wO2Q9Yy5KYygpO289SkQoZC5QYigpLDE3KS5hO3doaWxlKGg8Yi5mKXtpZihoPT1vKXttPTA7ZC5PYigpPyhvPUpEKGQuUGIoKSwxNykuYSk6KG89Yi5mKzEpfWlmKGghPW0pe3E9SkQoTWxiKGEuYixoKSwyNSk7bj1KRChNbGIoYS5iLG0pLDI1KTtwPVp1KHEuYSk7Zm9yKGw9bmV3IHJtYihwKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1KRChwbWIobCksOSk7cFliKGssbi5hLmMubGVuZ3RoLG4pO2lmKG09PTApe2c9WnUoaFliKGspKTtmb3IoZj1uZXcgcm1iKGcpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwxOCk7ZldiKGUsdHJ1ZSk7Wk1iKGEsKElxYygpLE1wYyksKHhkYigpLHRydWUpKTskbGMoYSxlLDEpfX19fSsrbTsrK2h9aT1uZXcgQWpiKGEuYiwwKTt3aGlsZShpLmI8aS5kLmdjKCkpe2o9KHJEYihpLmI8aS5kLmdjKCkpLEpEKGkuZC5YYihpLmM9aS5iKyspLDI1KSk7ai5hLmMubGVuZ3RoPT0wJiZ0amIoaSl9fQpmdW5jdGlvbiBrZGMoYSxiLGMpe3ZhciBkLGUsZjtlPUpEKFdNYihiLChCd2MoKSxYdGMpKSwyODApO2lmKGU9PShLb2MoKSxJb2MpKXtyZXR1cm59Yy5TZygnSG9yaXpvbnRhbCBDb21wYWN0aW9uJywxKTthLmE9YjtmPW5ldyBTZGM7ZD1uZXcgVUViKChmLmQ9YixmLmM9SkQoV01iKGYuZCx5dWMpLDIyMCksSWRjKGYpLFFkYyhmKSxQZGMoZiksZi5hKSk7U0ViKGQsYS5iKTtzd2l0Y2goSkQoV01iKGIsV3RjKSw0MTkpLmcpe2Nhc2UgMTpRRWIoZCxuZXcgY2NjKGEuYSkpO2JyZWFrO2RlZmF1bHQ6UUViKGQsKEVFYigpLENFYikpO31zd2l0Y2goZS5nKXtjYXNlIDE6SkViKGQpO2JyZWFrO2Nhc2UgMjpKRWIoSUViKGQsKFRnZCgpLFFnZCkpKTticmVhaztjYXNlIDM6SkViKFJFYihJRWIoSkViKGQpLChUZ2QoKSxRZ2QpKSxuZXcgdWRjKSk7YnJlYWs7Y2FzZSA0OkpFYihSRWIoSUViKEpFYihkKSwoVGdkKCksUWdkKSksbmV3IHdkYyhmKSkpO2JyZWFrO2Nhc2UgNTpKRWIoUEViKGQsaWRjKSk7fUlFYihkLChUZ2QoKSxQZ2QpKTtkLmU9dHJ1ZTtGZGMoZik7Yy5UZygpfQpmdW5jdGlvbiBBamMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7Zz1iLmI7az1nLm87aT1nLmQ7ZD1CZWIoTUQodVhiKGcsKEJ3YygpLFd2YykpKSk7ZT1CZWIoTUQodVhiKGcsWXZjKSkpO2o9QmViKE1EKHVYYihnLGd3YykpKTtoPW5ldyBiWWI7TlhiKGgsaS5kLGkuYyxpLmEsaS5iKTttPXdqYyhiLGQsZSxqKTtmb3Iocj1uZXcgcm1iKGIuZCk7ci5hPHIuYy5jLmxlbmd0aDspe3E9SkQocG1iKHIpLDEwNSk7Zm9yKG89cS5mLmEuZWMoKS5KYygpO28uT2IoKTspe249SkQoby5QYigpLDMzNik7Zj1uLmE7bD11amMobik7Yz0ocz1uZXcgUmRkLHNqYyhuLG4uYyxtLHMpLHJqYyhuLGwsbSxzKSxzamMobixuLmQsbSxzKSxzKTtjPWEubGcobixsLGMpO0x0YihmLmEpO3hlKGYuYSxjKTtFQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYywxNikpLG5ldyBFamMoayxoKSl9cD1xLmk7aWYocCl7empjKHEscCxtLGUpO3Q9bmV3IEZkZChwLmcpO0JqYyhrLGgsdCk7bWRkKHQscC5qKTtCamMoayxoLHQpfX1OWGIoaSxoLmQsaC5jLGguYSxoLmIpfQpmdW5jdGlvbiBxS2IoYSl7dmFyIGIsYyxkLGU7ZT1hLm87YUtiKCk7aWYoYS5BLmRjKCl8fHBiKGEuQSxfSmIpKXtiPWUuYn1lbHNle2EuRD8oYj0kd25kLk1hdGgubWF4KGUuYixoSWIoYS5mKSkpOihiPWhJYihhLmYpKTtpZihhLkEuR2MoKHlrZCgpLHZrZCkpJiYhYS5CLkdjKChOa2QoKSxKa2QpKSl7Yj0kd25kLk1hdGgubWF4KGIsaEliKEpEKEtxYihhLnAsKFJqZCgpLHdqZCkpLDI1MSkpKTtiPSR3bmQuTWF0aC5tYXgoYixoSWIoSkQoS3FiKGEucCxRamQpLDI1MSkpKX1jPWNLYihhKTshIWMmJihiPSR3bmQuTWF0aC5tYXgoYixjLmIpKTtpZihhLkEuR2Mod2tkKSl7aWYoYS5xPT0oYWpkKCksWWlkKXx8YS5xPT1YaWQpe2I9JHduZC5NYXRoLm1heChiLGJIYihKRChLcWIoYS5iLChSamQoKSx3amQpKSwxMjYpKSk7Yj0kd25kLk1hdGgubWF4KGIsYkhiKEpEKEtxYihhLmIsUWpkKSwxMjYpKSl9fX15ZGIoTEQoYS5lLlJmKCkubWYoKExnZCgpLERmZCkpKSk/KGUuYj0kd25kLk1hdGgubWF4KGUuYixiKSk6KGUuYj1iKTtkPWEuZi5pO2QuZD0wO2QuYT1iO2tJYihhLmYpfQpmdW5jdGlvbiB1MmMoYSxiLGMsZCxlLGYsZyxoKXt2YXIgaSxqLGssbDtpPV91KFdDKE9DKG8wLDEpLE5xZSwyMzcsMCxbYixjLGQsZV0pKTtsPW51bGw7c3dpdGNoKGEuYi5nKXtjYXNlIDE6bD1fdShXQyhPQyhaXywxKSxOcWUsNTIwLDAsW25ldyBHMmMsbmV3IHcyYyxuZXcgeTJjXSkpO2JyZWFrO2Nhc2UgMDpsPV91KFdDKE9DKFpfLDEpLE5xZSw1MjAsMCxbbmV3IHkyYyxuZXcgdzJjLG5ldyBHMmNdKSk7YnJlYWs7Y2FzZSAyOmw9X3UoV0MoT0MoWl8sMSksTnFlLDUyMCwwLFtuZXcgdzJjLG5ldyBHMmMsbmV3IHkyY10pKTt9Zm9yKGs9bmV3IHJtYihsKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksNTIwKTtpLmMubGVuZ3RoPjEmJihpPWouRmcoaSxhLmEsaCkpfWlmKGkuYy5sZW5ndGg9PTEpe3JldHVybiBKRChNbGIoaSxpLmMubGVuZ3RoLTEpLDIzNyl9aWYoaS5jLmxlbmd0aD09Mil7cmV0dXJuIHQyYygoc0RiKDAsaS5jLmxlbmd0aCksSkQoaS5jWzBdLDIzNykpLChzRGIoMSxpLmMubGVuZ3RoKSxKRChpLmNbMV0sMjM3KSksZyxmKX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gbkVkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG87ZT1uZXcgbkMoYSk7Zj1uZXcgQXpkO2Q9KHNvKGYubiksc28oZi5wKSxUaWIoZi5jKSxzbyhmLmYpLHNvKGYubyksVGliKGYucSksVGliKGYuZCksVGliKGYuZyksVGliKGYuayksVGliKGYuZSksVGliKGYuaSksVGliKGYuaiksVGliKGYuciksVGliKGYuYiksbT12emQoZixlLG51bGwpLHN6ZChmLGUpLG0pO2lmKGIpe2k9bmV3IG5DKGIpO2c9b0VkKGkpO1dtZChkLFdDKE9DKGIzLDEpLE5xZSw1MjEsMCxbZ10pKX1sPWZhbHNlO2s9ZmFsc2U7aWYoYyl7aT1uZXcgbkMoYyk7U0RlIGluIGkuYSYmKGw9aUMoaSxTRGUpLm9lKCkuYSk7VERlIGluIGkuYSYmKGs9aUMoaSxURGUpLm9lKCkuYSl9aj1zbGQodWxkKG5ldyB3bGQsbCksayk7VDhjKG5ldyBXOGMsZCxqKTtTRGUgaW4gZS5hJiZrQyhlLFNEZSxudWxsKTtpZihsfHxrKXtoPW5ldyBtQztrRWQoaixoLGwsayk7a0MoZSxTRGUsaCl9bj1uZXcgRkFkKGYpO3pxZShuZXcgWURkKGQpLG4pO289bmV3IEhBZChmKTt6cWUobmV3IFlEZChkKSxvKX0KZnVuY3Rpb24gRlRjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksajtjLlNnKCdGaW5kIHJvb3RzJywxKTthLmEuYy5sZW5ndGg9MDtmb3IoZT1HdGIoYi5iLDApO2UuYiE9ZS5kLmM7KXtkPUpEKFV0YihlKSwzOSk7aWYoZC5iLmI9PTApe1pNYihkLCh0VWMoKSxxVWMpLCh4ZGIoKSx0cnVlKSk7SWxiKGEuYSxkKX19c3dpdGNoKGEuYS5jLmxlbmd0aCl7Y2FzZSAwOmY9bmV3IGVSYygwLGIsJ0RVTU1ZX1JPT1QnKTtaTWIoZiwodFVjKCkscVVjKSwoeGRiKCksdHJ1ZSkpO1pNYihmLFpUYyx0cnVlKTtBdGIoYi5iLGYpO2JyZWFrO2Nhc2UgMTpicmVhaztkZWZhdWx0Omc9bmV3IGVSYygwLGIsRHplKTtmb3IoaT1uZXcgcm1iKGEuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDM5KTtqPW5ldyBaUWMoZyxoKTtaTWIoaiwodFVjKCksWlRjKSwoeGRiKCksdHJ1ZSkpO0F0YihnLmEuYSxqKTtBdGIoZy5kLGopO0F0YihoLmIsaik7Wk1iKGgscVVjLGZhbHNlKX1aTWIoZywodFVjKCkscVVjKSwoeGRiKCksdHJ1ZSkpO1pNYihnLFpUYyx0cnVlKTtBdGIoYi5iLGcpO31jLlRnKCl9CmZ1bmN0aW9uIEtMYihhKXt2YXIgYixjLGQsZSxmLGc7TGxiKGEuYSxuZXcgUUxiKTtmb3IoYz1uZXcgcm1iKGEuYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDIyNCk7ZD1CZGQob2RkKEpEKGEuYiw2OCkuYyksSkQoYi5iLDY4KS5jKTtpZihHTGIpe2c9SkQoYS5iLDY4KS5iO2Y9SkQoYi5iLDY4KS5iO2lmKCR3bmQuTWF0aC5hYnMoZC5hKT49JHduZC5NYXRoLmFicyhkLmIpKXtkLmI9MDtmLmQrZi5hPmcuZCYmZi5kPGcuZCtnLmEmJnhkZChkLCR3bmQuTWF0aC5tYXgoZy5jLShmLmMrZi5iKSxmLmMtKGcuYytnLmIpKSl9ZWxzZXtkLmE9MDtmLmMrZi5iPmcuYyYmZi5jPGcuYytnLmImJnhkZChkLCR3bmQuTWF0aC5tYXgoZy5kLShmLmQrZi5hKSxmLmQtKGcuZCtnLmEpKSl9fWVsc2V7eGRkKGQsYU1iKEpEKGEuYiw2OCksSkQoYi5iLDY4KSkpfWU9JHduZC5NYXRoLnNxcnQoZC5hKmQuYStkLmIqZC5iKTtlPU1MYihITGIsYixlLGQpO3hkZChkLGUpO19MYihKRChiLmIsNjgpLGQpO0xsYihiLmEsbmV3IFNMYihkKSk7SkQoSExiLmIsNjgpO0xMYihITGIsSUxiLGIpfX0KZnVuY3Rpb24gd0ljKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87YS5mPW5ldyBORmI7aj0wO2U9MDtmb3IoZz1uZXcgcm1iKGEuZS5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMjUpO2ZvcihpPW5ldyBybWIoZi5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksOSk7aC5wPWorKztmb3IoZD1uZXcgZXMoSXIoa1liKGgpLmEuSmMoKSxuZXcgZXIpKTtjcyhkKTspe2M9SkQoZHMoZCksMTgpO2MucD1lKyt9Yj1FSWMoaCk7Zm9yKG09bmV3IHJtYihoLmopO20uYTxtLmMuYy5sZW5ndGg7KXtsPUpEKHBtYihtKSwxMSk7aWYoYil7bz1sLmEuYjtpZihvIT0kd25kLk1hdGguZmxvb3Iobykpe2s9by1PY2IoemNiKCR3bmQuTWF0aC5yb3VuZChvKSkpO2wuYS5iLT1rfX1uPWwubi5iK2wuYS5iO2lmKG4hPSR3bmQuTWF0aC5mbG9vcihuKSl7az1uLU9jYih6Y2IoJHduZC5NYXRoLnJvdW5kKG4pKSk7bC5uLmItPWt9fX19YS5nPWo7YS5iPWU7YS5pPVNDKExYLE5xZSw0MDEsaiwwLDEpO2EuYz1TQyhLWCxOcWUsNjM5LGUsMCwxKTthLmQuYS4kYigpfQpmdW5jdGlvbiBSR2QoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqO2lmKGEuTWooKSl7aT1hLk5qKCk7aWYoYS5pPjApe2I9bmV3IFlJZChhLmksYS5nKTtjPWEuaTtmPWM8MTAwP251bGw6bmV3IEZHZChjKTtpZihhLlFqKCkpe2ZvcihkPTA7ZDxhLmk7KytkKXtnPWEuZ1tkXTtmPWEuU2ooZyxmKX19bERkKGEpO2U9Yz09MT9hLkZqKDQsbkRkKGIsMCksbnVsbCwwLGkpOmEuRmooNixiLG51bGwsLTEsaSk7aWYoYS5KaigpKXtmb3IoZD1uZXcgWEhkKGIpO2QuZSE9ZC5pLmdjKCk7KXtmPWEuTGooV0hkKGQpLGYpfWlmKCFmKXthLkdqKGUpfWVsc2V7Zi5raihlKTtmLmxqKCl9fWVsc2V7aWYoIWYpe2EuR2ooZSl9ZWxzZXtmLmtqKGUpO2YubGooKX19fWVsc2V7bERkKGEpO2EuR2ooYS5Gaig2LChwbmIoKSxtbmIpLG51bGwsLTEsaSkpfX1lbHNlIGlmKGEuSmooKSl7aWYoYS5pPjApe2g9YS5nO2o9YS5pO2xEZChhKTtmPWo8MTAwP251bGw6bmV3IEZHZChqKTtmb3IoZD0wO2Q8ajsrK2Qpe2c9aFtkXTtmPWEuTGooZyxmKX0hIWYmJmYubGooKX1lbHNle2xEZChhKX19ZWxzZXtsRGQoYSl9fQpmdW5jdGlvbiBBUGMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO3VQYyh0aGlzKTtjPT0oZ1BjKCksZVBjKT9OcmIodGhpcy5yLGEpOk5yYih0aGlzLncsYSk7az1Lc2U7aj1Mc2U7Zm9yKGc9Yi5hLmVjKCkuSmMoKTtnLk9iKCk7KXtlPUpEKGcuUGIoKSw0Nyk7aD1KRChlLmEsNDUxKTtkPUpEKGUuYiwxOCk7aT1kLmM7aT09YSYmKGk9ZC5kKTtoPT1lUGM/TnJiKHRoaXMucixpKTpOcmIodGhpcy53LGkpO209KFJqZCgpLElqZCkuR2MoaS5qKT9CZWIoTUQoV01iKGksKElxYygpLENxYykpKSk6S2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2kuaS5uLGkubixpLmFdKSkuYjtrPSR3bmQuTWF0aC5taW4oayxtKTtqPSR3bmQuTWF0aC5tYXgoaixtKX1sPShSamQoKSxJamQpLkdjKGEuaik/QmViKE1EKFdNYihhLChJcWMoKSxDcWMpKSkpOktkZChXQyhPQyhiMiwxKSxocmUsOCwwLFthLmkubixhLm4sYS5hXSkpLmI7eVBjKHRoaXMsbCxrLGopO2ZvcihmPWIuYS5lYygpLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksNDcpO3ZQYyh0aGlzLEpEKGUuYiwxOCkpfXRoaXMubz1mYWxzZX0KZnVuY3Rpb24gb0QoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEc7Yz1hLmwmODE5MTtkPWEubD4+MTN8KGEubSYxNSk8PDk7ZT1hLm0+PjQmODE5MTtmPWEubT4+MTd8KGEuaCYyNTUpPDw1O2c9KGEuaCYxMDQ4MzIwKT4+ODtoPWIubCY4MTkxO2k9Yi5sPj4xM3woYi5tJjE1KTw8OTtqPWIubT4+NCY4MTkxO2s9Yi5tPj4xN3woYi5oJjI1NSk8PDU7bD0oYi5oJjEwNDgzMjApPj44O0I9YypoO0M9ZCpoO0Q9ZSpoO0Y9ZipoO0c9ZypoO2lmKGkhPTApe0MrPWMqaTtEKz1kKmk7Ris9ZSppO0crPWYqaX1pZihqIT0wKXtEKz1jKmo7Ris9ZCpqO0crPWUqan1pZihrIT0wKXtGKz1jKms7Rys9ZCprfWwhPTAmJihHKz1jKmwpO249QiZ6c2U7bz0oQyY1MTEpPDwxMzttPW4rbztxPUI+PjIyO3I9Qz4+OTtzPShEJjI2MjE0Myk8PDQ7dD0oRiYzMSk8PDE3O3A9cStyK3MrdDt2PUQ+PjE4O3c9Rj4+NTtBPShHJjQwOTUpPDw4O3U9dit3K0E7cCs9bT4+MjI7bSY9enNlO3UrPXA+PjIyO3AmPXpzZTt1Jj1Bc2U7cmV0dXJuIF9DKG0scCx1KX0KZnVuY3Rpb24gUjNiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2g9SkQoTWxiKGEuaiwwKSwxMSk7aWYoaC5nLmMubGVuZ3RoIT0wJiZoLmUuYy5sZW5ndGghPTApe3Rocm93IHNjYihuZXcgV2ViKCdJbnRlcmFjdGl2ZSBsYXlvdXQgZG9lcyBub3Qgc3VwcG9ydCBOT1JUSC9TT1VUSCBwb3J0cyB3aXRoIGluY29taW5nIF9hbmRfIG91dGdvaW5nIGVkZ2VzLicpKX1pZihoLmcuYy5sZW5ndGghPTApe2Y9S3NlO2ZvcihjPW5ldyBybWIoaC5nKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksMTgpO2c9Yi5kLmk7ZD1KRChXTWIoZywoQndjKCksY3ZjKSksMTM5KTtmPSR3bmQuTWF0aC5taW4oZixnLm4uYS1kLmIpfXJldHVybiBuZXcgY2MoUWIoZikpfWlmKGguZS5jLmxlbmd0aCE9MCl7ZT1Mc2U7Zm9yKGM9bmV3IHJtYihoLmUpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwxOCk7Zz1iLmMuaTtkPUpEKFdNYihnLChCd2MoKSxjdmMpKSwxMzkpO2U9JHduZC5NYXRoLm1heChlLGcubi5hK2cuby5hK2QuYyl9cmV0dXJuIG5ldyBjYyhRYihlKSl9cmV0dXJuIHdiKCksd2IoKSx2Yn0KZnVuY3Rpb24gZUFjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2MuU2coJ0ludGVyYWN0aXZlIGN5Y2xlIGJyZWFraW5nJywxKTtsPW5ldyBVbGI7Zm9yKG49bmV3IHJtYihiLmEpO24uYTxuLmMuYy5sZW5ndGg7KXttPUpEKHBtYihuKSw5KTttLnA9MTtvPWpZYihtKS5hO2ZvcihrPW1ZYihtLChFeWMoKSxDeWMpKS5KYygpO2suT2IoKTspe2o9SkQoay5QYigpLDExKTtmb3IoZj1uZXcgcm1iKGouZyk7Zi5hPGYuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGYpLDE4KTtwPWQuZC5pO2lmKHAhPW0pe3E9alliKHApLmE7cTxvJiYoWUNiKGwuYyxkKSx0cnVlKX19fX1mb3IoZz1uZXcgcm1iKGwpO2cuYTxnLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihnKSwxOCk7ZldiKGQsdHJ1ZSl9bC5jLmxlbmd0aD0wO2ZvcihpPW5ldyBybWIoYi5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksOSk7aC5wPjAmJmRBYyhhLGgsbCl9Zm9yKGU9bmV3IHJtYihsKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTgpO2ZXYihkLHRydWUpfWwuYy5sZW5ndGg9MDtjLlRnKCl9CmZ1bmN0aW9uIHhVZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKGEubGwoKSl7aWYoYS5pPjQpe2lmKGEuY2soYikpe2lmKGEuWmsoKSl7ZT1KRChiLDUyKTtkPWUuQWgoKTtpPWQ9PWEuZSYmKGEuamwoKT9lLnVoKGUuQmgoKSxhLmZsKCkpPT1hLmdsKCk6LTEtZS5CaCgpPT1hLklqKCkpO2lmKGEua2woKSYmIWkmJiFkJiYhIWUuRmgoKSl7Zm9yKGY9MDtmPGEuaTsrK2Ype2M9YS5tbChKRChhLmdbZl0sNTcpKTtpZihYRChjKT09PVhEKGIpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBpfWVsc2UgaWYoYS5qbCgpJiYhYS5pbCgpKXtnPUpEKGIsNTcpLkloKHMxZChKRChhLklrKCksMTkpKSk7aWYoWEQoZyk9PT1YRChhLmUpKXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKGc9PW51bGx8fCFKRChnLDU3KS5SaCgpKXtyZXR1cm4gZmFsc2V9fX1lbHNle3JldHVybiBmYWxzZX19aD1tRGQoYSxiKTtpZihhLmtsKCkmJiFoKXtmb3IoZj0wO2Y8YS5pOysrZil7ZT1hLm1sKEpEKGEuZ1tmXSw1NykpO2lmKFhEKGUpPT09WEQoYikpe3JldHVybiB0cnVlfX19cmV0dXJuIGh9ZWxzZXtyZXR1cm4gbURkKGEsYil9fQpmdW5jdGlvbiBwR2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7Yz0wO2s9bmV3IFVsYjtmb3IoaD1uZXcgcm1iKGIpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxMSk7YkdjKGEuYixhLmRbZy5wXSk7ay5jLmxlbmd0aD0wO3N3aXRjaChnLmkuay5nKXtjYXNlIDA6ZD1KRChXTWIoZywoSXFjKCksc3FjKSksOSk7TGxiKGQuaixuZXcgJEdjKGspKTticmVhaztjYXNlIDE6QXViKENCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoZy5pLmosMTYpKSxuZXcgYUhjKGcpKSksbmV3IGRIYyhrKSk7YnJlYWs7Y2FzZSAzOmU9SkQoV01iKGcsKElxYygpLGtxYykpLDExKTtJbGIoayxuZXcgeG9kKGUsamZiKGcuZS5jLmxlbmd0aCtnLmcuYy5sZW5ndGgpKSk7fWZvcihqPW5ldyBybWIoayk7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDQ3KTtmPURHYyhhLEpEKGkuYSwxMSkpO2lmKGY+YS5kW2cucF0pe2MrPWFHYyhhLmIsZikqSkQoaS5iLDE3KS5hOyRrYihhLmEsamZiKGYpKX19d2hpbGUoIWVsYihhLmEpKXskRmMoYS5iLEpEKGpsYihhLmEpLDE3KS5hKX19cmV0dXJuIGN9CmZ1bmN0aW9uIHBFZChhKXt2YXIgYixjLGQ7TGFkKGlFZCxXQyhPQyhyMSwxKSxOcWUsMTQ2LDAsW25ldyBNZ2RdKSk7Yz1uZXcgRkIoYSk7Zm9yKGQ9MDtkPGMuYS5sZW5ndGg7KytkKXtiPUJCKGMsZCkucmUoKS5hO2NnYihiLCdsYXllcmVkJyk/TGFkKGlFZCxXQyhPQyhyMSwxKSxOcWUsMTQ2LDAsW25ldyBQdGNdKSk6Y2diKGIsJ2ZvcmNlJyk/TGFkKGlFZCxXQyhPQyhyMSwxKSxOcWUsMTQ2LDAsW25ldyBaTmJdKSk6Y2diKGIsJ3N0cmVzcycpP0xhZChpRWQsV0MoT0MocjEsMSksTnFlLDE0NiwwLFtuZXcgX09iXSkpOmNnYihiLCdtcnRyZWUnKT9MYWQoaUVkLFdDKE9DKHIxLDEpLE5xZSwxNDYsMCxbbmV3IEZVY10pKTpjZ2IoYiwncmFkaWFsJyk/TGFkKGlFZCxXQyhPQyhyMSwxKSxOcWUsMTQ2LDAsW25ldyBIJGNdKSk6Y2diKGIsJ3Nwb3JlT3ZlcmxhcCcpfHxjZ2IoYiwnc3BvcmVDb21wYWN0aW9uJyk/TGFkKGlFZCxXQyhPQyhyMSwxKSxOcWUsMTQ2LDAsW25ldyBfNmNdKSk6Y2diKGIsJ3JlY3RwYWNraW5nJykmJkxhZChpRWQsV0MoT0MocjEsMSksTnFlLDE0NiwwLFtuZXcgSjFjXSkpfX0KZnVuY3Rpb24gSjJiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7az1KRChXTWIoYSwoSXFjKCksVHBjKSksNjQpO2Q9SkQoTWxiKGEuaiwwKSwxMSk7az09KFJqZCgpLHhqZCk/YVpiKGQsT2pkKTprPT1PamQmJmFaYihkLHhqZCk7aWYoSkQoV01iKGIsKEJ3YygpLG92YykpLDE4MSkuR2MoKHlrZCgpLHhrZCkpKXtpPUJlYihNRChXTWIoYSxjd2MpKSk7aj1CZWIoTUQoV01iKGEsZHdjKSkpO2c9QmViKE1EKFdNYihhLGF3YykpKTtoPUpEKFdNYihiLEh2YyksMjIpO2lmKGguR2MoKG9qZCgpLGtqZCkpKXtjPWo7bD1hLm8uYS8yLWQubi5hO2ZvcihmPW5ldyBybWIoZC5mKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksNzIpO2Uubi5iPWM7ZS5uLmE9bC1lLm8uYS8yO2MrPWUuby5iK2d9fWVsc2UgaWYoaC5HYyhtamQpKXtmb3IoZj1uZXcgcm1iKGQuZik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDcyKTtlLm4uYT1pK2Euby5hLWQubi5hfX1ZR2IobmV3ICRHYigoc1diKCksbmV3IERXYihiLGZhbHNlLGZhbHNlLG5ldyBqWGIpKSksbmV3IFBXYihudWxsLGEsZmFsc2UpKX19CmZ1bmN0aW9uIE9kYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztpZihiLmMubGVuZ3RoPT0wKXtyZXR1cm59cG5iKCk7UG1iKGIuYyxiLmMubGVuZ3RoLG51bGwpO2U9bmV3IHJtYihiKTtkPUpEKHBtYihlKSwxNTIpO3doaWxlKGUuYTxlLmMuYy5sZW5ndGgpe2M9SkQocG1iKGUpLDE1Mik7aWYocUViKGQuZS5jLGMuZS5jKSYmISh0RWIoWmNkKGQuZSkuYixjLmUuZCl8fHRFYihaY2QoYy5lKS5iLGQuZS5kKSkpe2Q9KEtsYihkLmssYy5rKSxLbGIoZC5iLGMuYiksS2xiKGQuYyxjLmMpLHhlKGQuaSxjLmkpLEtsYihkLmQsYy5kKSxLbGIoZC5qLGMuaiksZj0kd25kLk1hdGgubWluKGQuZS5jLGMuZS5jKSxnPSR3bmQuTWF0aC5taW4oZC5lLmQsYy5lLmQpLGg9JHduZC5NYXRoLm1heChkLmUuYytkLmUuYixjLmUuYytjLmUuYiksaT1oLWYsaj0kd25kLk1hdGgubWF4KGQuZS5kK2QuZS5hLGMuZS5kK2MuZS5hKSxrPWotZyxkZGQoZC5lLGYsZyxpLGspLFpFYihkLmYsYy5mKSwhZC5hJiYoZC5hPWMuYSksS2xiKGQuZyxjLmcpLElsYihkLmcsYyksZCl9ZWxzZXtSZGMoYSxkKTtkPWN9fVJkYyhhLGQpfQpmdW5jdGlvbiBMVmIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2O2k9bmV3IFVsYjtmb3IoZj1uZXcgcm1iKGIuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO2ZvcihoPW5ldyBybWIoZS5qKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTEpO2s9bnVsbDtmb3IodD1DWGIoZy5nKSx1PTAsdj10Lmxlbmd0aDt1PHY7Kyt1KXtzPXRbdV07aWYoIXhYYihzLmQuaSxjKSl7cj1HVmIoYSxiLGMscyxzLmMsKEV5YygpLEN5Yyksayk7ciE9ayYmKFlDYihpLmMsciksdHJ1ZSk7ci5jJiYoaz1yKX19aj1udWxsO2ZvcihvPUNYYihnLmUpLHA9MCxxPW8ubGVuZ3RoO3A8cTsrK3Ape249b1twXTtpZigheFhiKG4uYy5pLGMpKXtyPUdWYihhLGIsYyxuLG4uZCwoRXljKCksQnljKSxqKTtyIT1qJiYoWUNiKGkuYyxyKSx0cnVlKTtyLmMmJihqPXIpfX19fWZvcihtPW5ldyBybWIoaSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9SkQocG1iKG0pLDQ0MSk7TmxiKGIuYSxsLmEsMCkhPS0xfHxJbGIoYi5hLGwuYSk7bC5jJiYoWUNiKGQuYyxsKSx0cnVlKX19CmZ1bmN0aW9uIG1EYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbjtmb3IoaD1uZXcgcm1iKGIpO2guYTxoLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihoKSwyMzgpO2YuZT1udWxsO2YuYz0wfWk9bnVsbDtmb3IoZz1uZXcgcm1iKGIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwyMzgpO2w9Zi5kWzBdO2lmKGMmJmwuayE9KERZYigpLEFZYikpe2NvbnRpbnVlfWZvcihuPUpEKFdNYihsLChJcWMoKSxhcWMpKSwxNSkuSmMoKTtuLk9iKCk7KXttPUpEKG4uUGIoKSw5KTtpZighY3x8bS5rPT0oRFliKCksQVliKSl7KCFmLmUmJihmLmU9bmV3IFVsYiksZi5lKS5FYyhhLmJbbS5jLnBdW20ucF0pOysrYS5iW20uYy5wXVttLnBdLmN9fWlmKCFjJiZsLms9PShEWWIoKSxBWWIpKXtpZihpKXtmb3Ioaz1KRChRYyhhLmQsaSksMjIpLkpjKCk7ay5PYigpOyl7aj1KRChrLlBiKCksOSk7Zm9yKGU9SkQoUWMoYS5kLGwpLDIyKS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDkpO3pEYyhhLmJbai5jLnBdW2oucF0pLkVjKGEuYltkLmMucF1bZC5wXSk7KythLmJbZC5jLnBdW2QucF0uY319fWk9bH19fQpmdW5jdGlvbiBSbGQoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7bD1uZXcgRmRkKEpEKGtzZChhLCh1ZWQoKSxvZWQpKSw4KSk7bC5hPSR3bmQuTWF0aC5tYXgobC5hLWMuYi1jLmMsMCk7bC5iPSR3bmQuTWF0aC5tYXgobC5iLWMuZC1jLmEsMCk7ZT1NRChrc2QoYSxpZWQpKTsoZT09bnVsbHx8KHREYihlKSxlKTw9MCkmJihlPTEuMyk7aD1uZXcgVWxiO2ZvcihvPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7by5lIT1vLmkuZ2MoKTspe249SkQoQUhkKG8pLDI3KTtnPW5ldyBpbWQobik7WUNiKGguYyxnKX1tPUpEKGtzZChhLGplZCksMzIxKTtzd2l0Y2gobS5nKXtjYXNlIDM6cT1PbGQoaCxiLGwuYSxsLmIsKGo9ZCx0RGIoZSksZSxqKSk7YnJlYWs7Y2FzZSAxOnE9TmxkKGgsYixsLmEsbC5iLChrPWQsdERiKGUpLGUsaykpO2JyZWFrO2RlZmF1bHQ6cT1QbGQoaCxiLGwuYSxsLmIsKGk9ZCx0RGIoZSksZSxpKSk7fWY9bmV3IGhtZChxKTtwPVNsZChmLGIsYyxsLmEsbC5iLGQsKHREYihlKSxlKSk7bW5kKGEscC5hLHAuYixmYWxzZSx0cnVlKX0KZnVuY3Rpb24gd1hiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksajtoPWEuajtpZihoPT0oUmpkKCksUGpkKSYmYiE9KGFqZCgpLCRpZCkmJmIhPShhamQoKSxfaWQpKXtoPW1YYihhLGMpO2FaYihhLGgpOyEoIWEucT8ocG5iKCkscG5iKCksbm5iKTphLnEpLl9iKChCd2MoKSxEdmMpKSYmaCE9UGpkJiYoYS5uLmEhPTB8fGEubi5iIT0wKSYmWk1iKGEsRHZjLGxYYihhLGgpKX1pZihiPT0oYWpkKCksWWlkKSl7aj0wO3N3aXRjaChoLmcpe2Nhc2UgMTpjYXNlIDM6Zj1hLmkuby5hO2Y+MCYmKGo9YS5uLmEvZik7YnJlYWs7Y2FzZSAyOmNhc2UgNDplPWEuaS5vLmI7ZT4wJiYoaj1hLm4uYi9lKTt9Wk1iKGEsKElxYygpLHRxYyksail9aT1hLm87Zz1hLmE7aWYoZCl7Zy5hPWQuYTtnLmI9ZC5iO2EuZD10cnVlfWVsc2UgaWYoYiE9JGlkJiZiIT1faWQmJmghPVBqZCl7c3dpdGNoKGguZyl7Y2FzZSAxOmcuYT1pLmEvMjticmVhaztjYXNlIDI6Zy5hPWkuYTtnLmI9aS5iLzI7YnJlYWs7Y2FzZSAzOmcuYT1pLmEvMjtnLmI9aS5iO2JyZWFrO2Nhc2UgNDpnLmI9aS5iLzI7fX1lbHNle2cuYT1pLmEvMjtnLmI9aS5iLzJ9fQpmdW5jdGlvbiBzRmQoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGs7aWYoYS5NaigpKXtrPWEuQmooKTtpPWEuTmooKTtpZihrPjApe2I9bmV3IHhEZChhLm1qKCkpO2M9aztmPWM8MTAwP251bGw6bmV3IEZHZChjKTt6RWQoYSxjLGIuZyk7ZT1jPT0xP2EuRmooNCxuRGQoYiwwKSxudWxsLDAsaSk6YS5Gaig2LGIsbnVsbCwtMSxpKTtpZihhLkpqKCkpe2ZvcihkPW5ldyBDSGQoYik7ZC5lIT1kLmkuZ2MoKTspe2Y9YS5MaihBSGQoZCksZil9aWYoIWYpe2EuR2ooZSl9ZWxzZXtmLmtqKGUpO2YubGooKX19ZWxzZXtpZighZil7YS5HaihlKX1lbHNle2Yua2ooZSk7Zi5saigpfX19ZWxzZXt6RWQoYSxhLkJqKCksYS5DaigpKTthLkdqKGEuRmooNiwocG5iKCksbW5iKSxudWxsLC0xLGkpKX19ZWxzZSBpZihhLkpqKCkpe2s9YS5CaigpO2lmKGs+MCl7aD1hLkNqKCk7aj1rO3pFZChhLGssaCk7Zj1qPDEwMD9udWxsOm5ldyBGR2Qoaik7Zm9yKGQ9MDtkPGo7KytkKXtnPWhbZF07Zj1hLkxqKGcsZil9ISFmJiZmLmxqKCl9ZWxzZXt6RWQoYSxhLkJqKCksYS5DaigpKX19ZWxzZXt6RWQoYSxhLkJqKCksYS5DaigpKX19CmZ1bmN0aW9uIExiYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7Yi5TZygnU29ydCBCeSBJbnB1dCBNb2RlbCAnK1dNYihhLChCd2MoKSxjdWMpKSwxKTtmPTA7Zm9yKGU9bmV3IHJtYihhLmIpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwyNSk7ZC5wPWY7aj1mPT0wPzA6Zi0xO2k9SkQoTWxiKGEuYixqKSwyNSk7Yz1uZXcgRmtjKGksSkQoV01iKGEsY3VjKSwyNjYpLEpEKFdNYihhLF90YyksMzQ5KSx0cnVlKTtPYmMoZC5hLGMpO2ZvcihoPW5ldyBybWIoZC5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksOSk7aWYoWEQoV01iKGcsRXZjKSkhPT1YRCgoYWpkKCksV2lkKSkmJlhEKFdNYihnLEV2YykpIT09WEQoWGlkKSl7cG5iKCk7U2xiKGcuaixuZXcgWGtjKGksSkQoV01iKGEsY3VjKSwyNjYpLFFiYyhnKSx5ZGIoTEQoV01iKGEsYnVjKSkpKSk7Yi5fZygnTm9kZSAnK2crJyBwb3J0czogJytnLmopfX1jPW5ldyBGa2MoaSxKRChXTWIoYSxjdWMpLDI2NiksSkQoV01iKGEsX3RjKSwzNDkpLGZhbHNlKTtPYmMoZC5hLGMpO2IuX2coJ0xheWVyICcrZisnOiAnK2QpOysrZn1iLlRnKCl9CmZ1bmN0aW9uIFBsZChhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscTtoPVNDKGFFLFJzZSwzMCxhLmMubGVuZ3RoLDE1LDEpO209bmV3IGR2YihuZXcgeW1kKTtZdWIobSxhKTtqPTA7cD1uZXcgVWxiO3doaWxlKG0uYi5jLmxlbmd0aCE9MCl7Zz1KRChtLmIuYy5sZW5ndGg9PTA/bnVsbDpNbGIobS5iLDApLDE2Mik7aWYoaj4xJiZjbWQoZykqYm1kKGcpLzI+aFswXSl7Zj0wO3doaWxlKGY8cC5jLmxlbmd0aC0xJiZjbWQoZykqYm1kKGcpLzI+aFtmXSl7KytmfW89bmV3IElqYihwLDAsZisxKTtsPW5ldyBobWQobyk7az1jbWQoZykvYm1kKGcpO2k9U2xkKGwsYixuZXcgTFliLGMsZCxlLGspO21kZCh2ZGQobC5lKSxpKTt5RGIoX3ViKG0sbCksWHNlKTtuPW5ldyBJamIocCxmKzEscC5jLmxlbmd0aCk7WXViKG0sbik7cC5jLmxlbmd0aD0wO2o9MDtHbWIoaCxoLmxlbmd0aCwwKX1lbHNle3E9bS5iLmMubGVuZ3RoPT0wP251bGw6TWxiKG0uYiwwKTtxIT1udWxsJiZjdmIobSwwKTtqPjAmJihoW2pdPWhbai0xXSk7aFtqXSs9Y21kKGcpKmJtZChnKTsrK2o7WUNiKHAuYyxnKX19cmV0dXJuIHB9CmZ1bmN0aW9uIHloYyhhLGIpe3ZhciBjLGQsZSxmO2M9Yi5iO2Y9bmV3IFdsYihjLmopO2U9MDtkPWMuajtkLmMubGVuZ3RoPTA7a2hjKEpEKFlpKGEuYiwoUmpkKCkseGpkKSwoSWhjKCksSGhjKSksMTUpLGMpO2U9bGhjKGYsZSxuZXcgZWljLGQpO2toYyhKRChZaShhLmIseGpkLEdoYyksMTUpLGMpO2U9bGhjKGYsZSxuZXcgZ2ljLGQpO2toYyhKRChZaShhLmIseGpkLEZoYyksMTUpLGMpO2toYyhKRChZaShhLmIsd2pkLEhoYyksMTUpLGMpO2toYyhKRChZaShhLmIsd2pkLEdoYyksMTUpLGMpO2U9bGhjKGYsZSxuZXcgaWljLGQpO2toYyhKRChZaShhLmIsd2pkLEZoYyksMTUpLGMpO2toYyhKRChZaShhLmIsT2pkLEhoYyksMTUpLGMpO2U9bGhjKGYsZSxuZXcga2ljLGQpO2toYyhKRChZaShhLmIsT2pkLEdoYyksMTUpLGMpO2U9bGhjKGYsZSxuZXcgbWljLGQpO2toYyhKRChZaShhLmIsT2pkLEZoYyksMTUpLGMpO2toYyhKRChZaShhLmIsUWpkLEhoYyksMTUpLGMpO2U9bGhjKGYsZSxuZXcgU2hjLGQpO2toYyhKRChZaShhLmIsUWpkLEdoYyksMTUpLGMpO2toYyhKRChZaShhLmIsUWpkLEZoYyksMTUpLGMpfQpmdW5jdGlvbiBsQWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7Yy5TZygnTW9kZWwgb3JkZXIgY3ljbGUgYnJlYWtpbmcnLDEpO2EuYT0wO2EuYj0wO249bmV3IFVsYjtrPWIuYS5jLmxlbmd0aDtmb3Ioaj1uZXcgcm1iKGIuYSk7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDkpO1hNYihpLChJcWMoKSxqcWMpKSYmKGs9JHduZC5NYXRoLm1heChrLEpEKFdNYihpLGpxYyksMTcpLmErMSkpfWZvcihwPW5ldyBybWIoYi5hKTtwLmE8cC5jLmMubGVuZ3RoOyl7bz1KRChwbWIocCksOSk7Zz1rQWMoYSxvLGspO2ZvcihtPW1ZYihvLChFeWMoKSxDeWMpKS5KYygpO20uT2IoKTspe2w9SkQobS5QYigpLDExKTtmb3IoZj1uZXcgcm1iKGwuZyk7Zi5hPGYuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGYpLDE4KTtxPWQuZC5pO2g9a0FjKGEscSxrKTtoPGcmJihZQ2Iobi5jLGQpLHRydWUpfX19Zm9yKGU9bmV3IHJtYihuKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTgpO2ZXYihkLHRydWUpO1pNYihiLChJcWMoKSxNcGMpLCh4ZGIoKSx0cnVlKSl9bi5jLmxlbmd0aD0wO2MuVGcoKX0KZnVuY3Rpb24gUDdiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtiLlNnKCdMYXllciBzaXplIGNhbGN1bGF0aW9uJywxKTtrPUtzZTtqPUxzZTtlPWZhbHNlO2ZvcihoPW5ldyBybWIoYS5iKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMjUpO2k9Zy5jO2kuYT0wO2kuYj0wO2lmKGcuYS5jLmxlbmd0aD09MCl7Y29udGludWV9ZT10cnVlO2ZvcihtPW5ldyBybWIoZy5hKTttLmE8bS5jLmMubGVuZ3RoOyl7bD1KRChwbWIobSksOSk7bz1sLm87bj1sLmQ7aS5hPSR3bmQuTWF0aC5tYXgoaS5hLG8uYStuLmIrbi5jKX1kPUpEKE1sYihnLmEsMCksOSk7cD1kLm4uYi1kLmQuZDtkLms9PShEWWIoKSx3WWIpJiYocC09SkQoV01iKGEsKEJ3YygpLGh3YykpLDEzOSkuZCk7Zj1KRChNbGIoZy5hLGcuYS5jLmxlbmd0aC0xKSw5KTtjPWYubi5iK2Yuby5iK2YuZC5hO2Yuaz09d1liJiYoYys9SkQoV01iKGEsKEJ3YygpLGh3YykpLDEzOSkuYSk7aS5iPWMtcDtrPSR3bmQuTWF0aC5taW4oayxwKTtqPSR3bmQuTWF0aC5tYXgoaixjKX1pZighZSl7az0wO2o9MH1hLmYuYj1qLWs7YS5jLmItPWs7Yi5UZygpfQpmdW5jdGlvbiBBTmIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2c9Yi5kO2g9Yy5kO3doaWxlKGcuYS1oLmE9PTAmJmcuYi1oLmI9PTApe2k9ZmFsc2U7aWYoUkQoYiwyNDkpJiZSRChjLDI0OSkmJiFpKXtqPUpEKGIsMjQ5KS5hO2s9QmRkKG5ldyBGZGQoaU5iKGopKSxoTmIoaikpO2Q9MjtlPW5ldyBFZGQoay5hLyR3bmQuTWF0aC5zcXJ0KGsuYSprLmEray5iKmsuYikqZCwtay5iLyR3bmQuTWF0aC5zcXJ0KGsuYSprLmEray5iKmsuYikqZCk7bWRkKGcsZSk7bD1KRChjLDI0OSkuYTttPUJkZChuZXcgRmRkKGlOYihsKSksaE5iKGwpKTtkPWs9PW0/LTI6MjtmPW5ldyBFZGQobS5hLyR3bmQuTWF0aC5zcXJ0KG0uYSptLmErbS5iKm0uYikqZCwtKG0uYi8kd25kLk1hdGguc3FydChtLmEqbS5hK20uYiptLmIpKSpkKTttZGQoZyxmKTtpPXRydWV9ZWxzZXtnLmErPXl2YihhLDI2KSpldGUreXZiKGEsMjcpKmZ0ZS0wLjU7Zy5iKz15dmIoYSwyNikqZXRlK3l2YihhLDI3KSpmdGUtMC41O2guYSs9eXZiKGEsMjYpKmV0ZSt5dmIoYSwyNykqZnRlLTAuNTtoLmIrPXl2YihhLDI2KSpldGUreXZiKGEsMjcpKmZ0ZS0wLjV9fX0KZnVuY3Rpb24gWFBiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7aj1VUGIoYik7cT1KRChXTWIoYiwoQndjKCksb3VjKSksMzIzKTtvZmIoaixuZXcgY1FiKHEpKTtyPUpEKFdNYihiLGd1YyksMjk4KTtvZmIoaixuZXcgZVFiKHIpKTtwPTA7az1uZXcgVWxiO2ZvcihmPW5ldyBCbGIoaik7Zi5hIT1mLmI7KXtlPUpEKHpsYihmKSwzNik7bVFiKGEuYyxlKTttPUpEKFdNYihlLChJcWMoKSx1cWMpKSwxNSk7cCs9bS5nYygpO2Q9bS5KYygpO0lsYihrLG5ldyB4b2QoZSxkKSl9Yy5TZygnUmVjdXJzaXZlIGhpZXJhcmNoaWNhbCBsYXlvdXQnLHApO289MDtuPUpEKEpEKE1sYihrLGsuYy5sZW5ndGgtMSksNDcpLmIsNDkpO3doaWxlKG4uT2IoKSl7Zm9yKGk9bmV3IHJtYihrKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksNDcpO209SkQoaC5iLDQ5KTtnPUpEKGguYSwzNik7d2hpbGUobS5PYigpKXtsPUpEKG0uUGIoKSw0NCk7aWYoUkQobCw0OTgpKXtpZighZy5lKXtsLklmKGcsYy5iaCgxKSk7KytvO2JyZWFrfWVsc2V7YnJlYWt9fWVsc2V7bC5JZihnLGMuYmgoMSkpOysrb319fX1jLlRnKCl9CmZ1bmN0aW9uIHpYYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO2Y9MDtnPTA7Zm9yKGo9bmV3IHJtYihhLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihqKSw5KTtmPSR3bmQuTWF0aC5tYXgoZixoLmQuYik7Zz0kd25kLk1hdGgubWF4KGcsaC5kLmMpfWZvcihpPW5ldyBybWIoYS5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksOSk7Yz1KRChXTWIoaCwoQndjKCksUnRjKSksMjU0KTtzd2l0Y2goYy5nKXtjYXNlIDE6bz0wO2JyZWFrO2Nhc2UgMjpvPTE7YnJlYWs7Y2FzZSA1Om89MC41O2JyZWFrO2RlZmF1bHQ6ZD0wO2w9MDtmb3Iobj1uZXcgcm1iKGguaik7bi5hPG4uYy5jLmxlbmd0aDspe209SkQocG1iKG4pLDExKTttLmUuYy5sZW5ndGg9PTB8fCsrZDttLmcuYy5sZW5ndGg9PTB8fCsrbH1kK2w9PTA/KG89MC41KToobz1sLyhkK2wpKTt9cT1hLmM7az1oLm8uYTtyPShxLmEtaykqbztvPjAuNT8oci09ZyoyKihvLTAuNSkpOm88MC41JiYocis9ZioyKigwLjUtbykpO2U9aC5kLmI7cjxlJiYocj1lKTtwPWguZC5jO3I+cS5hLXAtayYmKHI9cS5hLXAtayk7aC5uLmE9YityfX0KZnVuY3Rpb24gdzdiKGEpe3ZhciBiLGMsZCxlLGY7ZD1KRChXTWIoYSwoQndjKCksVXVjKSksMTcxKTtpZihkPT0oT3FjKCksS3FjKSl7Zm9yKGM9bmV3IGVzKElyKGhZYihhKS5hLkpjKCksbmV3IGVyKSk7Y3MoYyk7KXtiPUpEKGRzKGMpLDE4KTtpZigheTdiKGIpKXt0aHJvdyBzY2IobmV3IFk4Yyhhd2UrZlliKGEpKyInIGhhcyBpdHMgbGF5ZXIgY29uc3RyYWludCBzZXQgdG8gRklSU1RfU0VQQVJBVEUsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIGluY29taW5nIGVkZ2UuICIrJ0ZJUlNUX1NFUEFSQVRFIG5vZGVzIG11c3Qgbm90IGhhdmUgaW5jb21pbmcgZWRnZXMuJykpfX19ZWxzZSBpZihkPT1NcWMpe2ZvcihmPW5ldyBlcyhJcihrWWIoYSkuYS5KYygpLG5ldyBlcikpO2NzKGYpOyl7ZT1KRChkcyhmKSwxOCk7aWYoIXk3YihlKSl7dGhyb3cgc2NiKG5ldyBZOGMoYXdlK2ZZYihhKSsiJyBoYXMgaXRzIGxheWVyIGNvbnN0cmFpbnQgc2V0IHRvIExBU1RfU0VQQVJBVEUsIGJ1dCBoYXMgYXQgbGVhc3Qgb25lIG91dGdvaW5nIGVkZ2UuICIrJ0xBU1RfU0VQQVJBVEUgbm9kZXMgbXVzdCBub3QgaGF2ZSBvdXRnb2luZyBlZGdlcy4nKSl9fX19CmZ1bmN0aW9uIHBsYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O209bmV3IFVsYjtlPW5ldyBVbGI7cD1udWxsO2ZvcihoPWIuSmMoKTtoLk9iKCk7KXtnPUpEKGguUGIoKSwxNyk7Zj1uZXcgRGxjKGcuYSk7WUNiKGUuYyxmKTtpZihwKXtmLmQ9cDtwLmU9Zn1wPWZ9dD1vbGMoYSk7Zm9yKGs9MDtrPGUuYy5sZW5ndGg7KytrKXtuPW51bGw7cT1DbGMoKHNEYigwLGUuYy5sZW5ndGgpLEpEKGUuY1swXSw2NDUpKSk7Yz1udWxsO2Q9S3NlO2ZvcihsPTE7bDxhLmIuYy5sZW5ndGg7KytsKXtyPXE/JHduZC5NYXRoLmFicyhxLmItbCk6JHduZC5NYXRoLmFicyhsLW4uYikrMTtvPW4/JHduZC5NYXRoLmFicyhsLW4uYik6cisxO2lmKG88cil7aj1uO2k9b31lbHNle2o9cTtpPXJ9cz0odT1CZWIoTUQoV01iKGEsKEJ3YygpLHZ3YykpKSksdFtsXSskd25kLk1hdGgucG93KGksdSkpO2lmKHM8ZCl7ZD1zO2M9ajtjLmM9bH1pZighIXEmJmw9PXEuYil7bj1xO3E9eGxjKHEpfX1pZihjKXtJbGIobSxqZmIoYy5jKSk7Yy5hPXRydWU7eWxjKGMpfX1wbmIoKTtQbWIobS5jLG0uYy5sZW5ndGgsbnVsbCk7cmV0dXJuIG19CmZ1bmN0aW9uIGQ5YyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2lmKGEuZSYmYS5jLmM8YS5mKXt0aHJvdyBzY2IobmV3IFdlYignRXhwZWN0ZWQgJythLmYrJyBwaGFzZXMgdG8gYmUgY29uZmlndXJlZDsgJysnb25seSBmb3VuZCAnK2EuYy5jKSl9az1KRChkZWIoYS5nKSwxMCk7bj1hdihhLmYpO2ZvcihmPWssaD0wLGo9Zi5sZW5ndGg7aDxqOysraCl7ZD1mW2hdO2w9SkQoXzhjKGEsZC5nKSwxODgpO2w/SWxiKG4sSkQoZzljKGEsbCksMTA2KSk6KG4uYy5wdXNoKG51bGwpLHVuZGVmaW5lZCx0cnVlKX1vPW5ldyBKOWM7RUJiKEJCYihGQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKG4sMTYpKSxuZXcgbTljKSxuZXcgbzljKGIpKSxuZXcgcTljKSxuZXcgczljKG8pKTtEOWMobyxhLmEpO2M9bmV3IFVsYjtmb3IoZT1rLGc9MCxpPWUubGVuZ3RoO2c8aTsrK2cpe2Q9ZVtnXTtLbGIoYyxoOWMoYSxReChKRChfOGMobyxkLmcpLDIwKSkpKTttPUpEKE1sYihuLGQuZyksMTA2KTshIW0mJihZQ2IoYy5jLG0pLHRydWUpfUtsYihjLGg5YyhhLFF4KEpEKF84YyhvLGtbay5sZW5ndGgtMV0uZysxKSwyMCkpKSk7cmV0dXJuIGN9CmZ1bmN0aW9uIGFEKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoYi5sPT0wJiZiLm09PTAmJmIuaD09MCl7dGhyb3cgc2NiKG5ldyBrZGIoJ2RpdmlkZSBieSB6ZXJvJykpfWlmKGEubD09MCYmYS5tPT0wJiZhLmg9PTApe2MmJihZQz1fQygwLDAsMCkpO3JldHVybiBfQygwLDAsMCl9aWYoYi5oPT1Cc2UmJmIubT09MCYmYi5sPT0wKXtyZXR1cm4gYkQoYSxjKX1pPWZhbHNlO2lmKGIuaD4+MTkhPTApe2I9cEQoYik7aT0haX1nPWhEKGIpO2Y9ZmFsc2U7ZT1mYWxzZTtkPWZhbHNlO2lmKGEuaD09QnNlJiZhLm09PTAmJmEubD09MCl7ZT10cnVlO2Y9dHJ1ZTtpZihnPT0tMSl7YT0kQygoRUQoKSxBRCkpO2Q9dHJ1ZTtpPSFpfWVsc2V7aD10RChhLGcpO2kmJmZEKGgpO2MmJihZQz1fQygwLDAsMCkpO3JldHVybiBofX1lbHNlIGlmKGEuaD4+MTkhPTApe2Y9dHJ1ZTthPXBEKGEpO2Q9dHJ1ZTtpPSFpfWlmKGchPS0xKXtyZXR1cm4gY0QoYSxnLGksZixjKX1pZihtRChhLGIpPDApe2MmJihmPyhZQz1wRChhKSk6KFlDPV9DKGEubCxhLm0sYS5oKSkpO3JldHVybiBfQygwLDAsMCl9cmV0dXJuIGREKGQ/YTpfQyhhLmwsYS5tLGEuaCksYixpLGYsZSxjKX0KZnVuY3Rpb24gc2liKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87Zz1hLmU7aT1iLmU7aWYoZz09MCl7cmV0dXJuIGJ9aWYoaT09MCl7cmV0dXJuIGF9Zj1hLmQ7aD1iLmQ7aWYoZitoPT0yKXtjPXVjYihhLmFbMF0sVXNlKTtkPXVjYihiLmFbMF0sVXNlKTtpZihnPT1pKXtrPXRjYihjLGQpO289UGNiKGspO249UGNiKExjYihrLDMyKSk7cmV0dXJuIG49PTA/bmV3IFRoYihnLG8pOm5ldyBWaGIoZywyLFdDKE9DKGNFLDEpLGlzZSwzMCwxNSxbbyxuXSkpfXJldHVybiBHaGIoKSxCY2IoZzwwP01jYihkLGMpOk1jYihjLGQpLDApP2FpYihnPDA/TWNiKGQsYyk6TWNiKGMsZCkpOk9oYihhaWIoR2NiKGc8MD9NY2IoZCxjKTpNY2IoYyxkKSkpKX1lbHNlIGlmKGc9PWkpe209ZztsPWY+PWg/dGliKGEuYSxmLGIuYSxoKTp0aWIoYi5hLGgsYS5hLGYpfWVsc2V7ZT1mIT1oP2Y+aD8xOi0xOnZpYihhLmEsYi5hLGYpO2lmKGU9PTApe3JldHVybiBHaGIoKSxGaGJ9aWYoZT09MSl7bT1nO2w9eWliKGEuYSxmLGIuYSxoKX1lbHNle209aTtsPXlpYihiLmEsaCxhLmEsZil9fWo9bmV3IFZoYihtLGwubGVuZ3RoLGwpO0loYihqKTtyZXR1cm4gan0KZnVuY3Rpb24gTk9jKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7aWYoYS5nPmIuZnx8Yi5nPmEuZil7cmV0dXJufWM9MDtkPTA7Zm9yKGc9YS53LmEuZWMoKS5KYygpO2cuT2IoKTspe2U9SkQoZy5QYigpLDExKTtEUGMoS2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2UuaS5uLGUubixlLmFdKSkuYixiLmcsYi5mKSYmKytjfWZvcihoPWEuci5hLmVjKCkuSmMoKTtoLk9iKCk7KXtlPUpEKGguUGIoKSwxMSk7RFBjKEtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtlLmkubixlLm4sZS5hXSkpLmIsYi5nLGIuZikmJi0tY31mb3IoaT1iLncuYS5lYygpLkpjKCk7aS5PYigpOyl7ZT1KRChpLlBiKCksMTEpO0RQYyhLZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbZS5pLm4sZS5uLGUuYV0pKS5iLGEuZyxhLmYpJiYrK2R9Zm9yKGY9Yi5yLmEuZWMoKS5KYygpO2YuT2IoKTspe2U9SkQoZi5QYigpLDExKTtEUGMoS2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2UuaS5uLGUubixlLmFdKSkuYixhLmcsYS5mKSYmLS1kfWlmKGM8ZCl7bmV3IGNQYyhhLGIsZC1jKX1lbHNlIGlmKGQ8Yyl7bmV3IGNQYyhiLGEsYy1kKX1lbHNle25ldyBjUGMoYixhLDApO25ldyBjUGMoYSxiLDApfX0KZnVuY3Rpb24galdkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrO2I9bmV3IHNXZDtjPW5ldyBzV2Q7aj1jZ2IocUZlLChlPUZ1ZChhLmIsckZlKSwhZT9udWxsOk9EKHhKZCgoIWUuYiYmKGUuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LGUpKSxlLmIpLHNGZSkpKSk7Zm9yKGk9MDtpPGEuaTsrK2kpe2g9SkQoYS5nW2ldLDE3OCk7aWYoUkQoaCwxMDEpKXtnPUpEKGgsMTkpOyhnLkJiJlJDZSkhPTA/KChnLkJiJmlyZSk9PTB8fCFqJiYoZj1GdWQoZyxyRmUpLCghZj9udWxsOk9EKHhKZCgoIWYuYiYmKGYuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LGYpKSxmLmIpLEdEZSkpKT09bnVsbCkpJiZ0Q2QoYixnKTooaz1zMWQoZyksISFrJiYoay5CYiZSQ2UpIT0wfHwoKGcuQmImaXJlKT09MHx8IWomJihkPUZ1ZChnLHJGZSksKCFkP251bGw6T0QoeEpkKCghZC5iJiYoZC5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsZCkpLGQuYiksR0RlKSkpPT1udWxsKSkmJnRDZChjLGcpKX1lbHNle0lmZSgpO2lmKEpEKGgsNjkpLnVrKCkpe2lmKCFoLnBrKCkpe3RDZChiLGgpO3RDZChjLGgpfX19fXNEZChiKTtzRGQoYyk7YS5hPUpEKGIuZywyNTMpO0pEKGMuZywyNTMpfQpmdW5jdGlvbiBaOWQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtpZihXVGQoYixjKT49MCl7cmV0dXJuIGN9c3dpdGNoKFRhZShqYWUoYSxjKSkpe2Nhc2UgMjp7aWYoY2diKCcnLGhhZShhLGMubmsoKSkudmUoKSkpe2k9V2FlKGphZShhLGMpKTtoPVZhZShqYWUoYSxjKSk7az1rYWUoYSxiLGksaCk7aWYoayl7cmV0dXJuIGt9ZT0kOWQoYSxiKTtmb3IoZz0wLGw9ZS5nYygpO2c8bDsrK2cpe2s9SkQoZS5YYihnKSwxNzgpO2lmKHFhZShYYWUoamFlKGEsaykpLGkpKXtyZXR1cm4ga319fXJldHVybiBudWxsfWNhc2UgNDp7aWYoY2diKCcnLGhhZShhLGMubmsoKSkudmUoKSkpe2ZvcihkPWM7ZDtkPVNhZShqYWUoYSxkKSkpe2o9V2FlKGphZShhLGQpKTtoPVZhZShqYWUoYSxkKSk7az1sYWUoYSxiLGosaCk7aWYoayl7cmV0dXJuIGt9fWk9V2FlKGphZShhLGMpKTtpZihjZ2IoZUdlLGkpKXtyZXR1cm4gbWFlKGEsYil9ZWxzZXtmPV85ZChhLGIpO2ZvcihnPTAsbD1mLmdjKCk7ZzxsOysrZyl7az1KRChmLlhiKGcpLDE3OCk7aWYocWFlKFhhZShqYWUoYSxrKSksaSkpe3JldHVybiBrfX19fXJldHVybiBudWxsfWRlZmF1bHQ6e3JldHVybiBudWxsfX19CmZ1bmN0aW9uIG1iZShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztpZihjLmdjKCk9PTApe3JldHVybiBmYWxzZX1oPShJZmUoKSxKRChiLDY5KS51aygpKTtmPWg/YzpuZXcgd0RkKGMuZ2MoKSk7aWYoTGZlKGEuZSxiKSl7aWYoYi5QaSgpKXtmb3Ioaj1jLkpjKCk7ai5PYigpOyl7aT1qLlBiKCk7aWYoIXliZShhLGIsaSxSRChiLDEwMSkmJihKRChiLDE5KS5CYiZQc2UpIT0wKSl7ZT1KZmUoYixpKTtmLkdjKGUpfHxmLkVjKGUpfX19ZWxzZSBpZighaCl7Zm9yKGo9Yy5KYygpO2ouT2IoKTspe2k9ai5QYigpO2U9SmZlKGIsaSk7Zi5FYyhlKX19fWVsc2V7aWYoYy5nYygpPjEpe3Rocm93IHNjYihuZXcgVGViKGhHZSkpfWs9S2ZlKGEuZS56aCgpLGIpO2Q9SkQoYS5nLDEyMik7Zm9yKGc9MDtnPGEuaTsrK2cpe2U9ZFtnXTtpZihrLlpsKGUuSWsoKSkpe2lmKGMuR2MoaD9lOmUua2QoKSkpe3JldHVybiBmYWxzZX1lbHNle2ZvcihqPWMuSmMoKTtqLk9iKCk7KXtpPWouUGIoKTtKRChEQ2QoYSxnLGg/SkQoaSw3NCk6SmZlKGIsaSkpLDc0KX1yZXR1cm4gdHJ1ZX19fWlmKCFoKXtlPUpmZShiLGMuSmMoKS5QYigpKTtmLkVjKGUpfX1yZXR1cm4gdkNkKGEsZil9CmZ1bmN0aW9uIFRLYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosaztrPW5ldyBNdGI7Zm9yKGg9KGo9KG5ldyBaamIoYS5jKSkuYS52YygpLkpjKCksbmV3IGNrYihqKSk7aC5hLk9iKCk7KXtmPShlPUpEKGguYS5QYigpLDQzKSxKRChlLmtkKCksNDUzKSk7Zi5iPT0wJiYoRHRiKGssZixrLmMuYixrLmMpLHRydWUpfXdoaWxlKGsuYiE9MCl7Zj1KRChrLmI9PTA/bnVsbDoockRiKGsuYiE9MCksS3RiKGssay5hLmEpKSw0NTMpO2YuYT09bnVsbCYmKGYuYT0wKTtmb3IoZD1uZXcgcm1iKGYuZCk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDY0Nyk7Yy5iLmE9PW51bGw/KGMuYi5hPUJlYihmLmEpK2MuYSk6Yi5vPT0oSEtjKCksRktjKT8oYy5iLmE9JHduZC5NYXRoLm1pbihCZWIoYy5iLmEpLEJlYihmLmEpK2MuYSkpOihjLmIuYT0kd25kLk1hdGgubWF4KEJlYihjLmIuYSksQmViKGYuYSkrYy5hKSk7LS1jLmIuYjtjLmIuYj09MCYmQXRiKGssYy5iKX19Zm9yKGc9KGk9KG5ldyBaamIoYS5jKSkuYS52YygpLkpjKCksbmV3IGNrYihpKSk7Zy5hLk9iKCk7KXtmPShlPUpEKGcuYS5QYigpLDQzKSxKRChlLmtkKCksNDUzKSk7Yi5pW2YuYy5wXT1mLmF9fQpmdW5jdGlvbiBuTWMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbztrPWMrYi5jLmMuYTtmb3Iobj1uZXcgcm1iKGIuaik7bi5hPG4uYy5jLmxlbmd0aDspe209SkQocG1iKG4pLDExKTtlPUtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFttLmkubixtLm4sbS5hXSkpO2lmKGIuaz09KERZYigpLEJZYikpe2g9SkQoV01iKG0sKElxYygpLGtxYykpLDExKTtlLmE9S2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2guaS5uLGgubixoLmFdKSkuYTtiLm4uYT1lLmF9Zz1uZXcgRWRkKDAsZS5iKTtpZihtLmo9PShSamQoKSx3amQpKXtnLmE9a31lbHNlIGlmKG0uaj09UWpkKXtnLmE9Y31lbHNle2NvbnRpbnVlfW89JHduZC5NYXRoLmFicyhlLmEtZy5hKTtpZihvPD1kJiYha01jKGIpKXtjb250aW51ZX1mPW0uZy5jLmxlbmd0aCttLmUuYy5sZW5ndGg+MTtmb3Ioaj1uZXcgeFpiKG0uYik7b21iKGouYSl8fG9tYihqLmIpOyl7aT1KRChvbWIoai5hKT9wbWIoai5hKTpwbWIoai5iKSwxOCk7bD1pLmM9PW0/aS5kOmkuYzskd25kLk1hdGguYWJzKEtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtsLmkubixsLm4sbC5hXSkpLmItZy5iKT4xJiZoTWMoYSxpLGcsZixtKX19fQpmdW5jdGlvbiB5T2MoYSl7dmFyIGIsYyxkLGUsZixnO2U9bmV3IEFqYihhLmUsMCk7ZD1uZXcgQWpiKGEuYSwwKTtpZihhLmQpe2ZvcihjPTA7YzxhLmI7YysrKXtyRGIoZS5iPGUuZC5nYygpKTtlLmQuWGIoZS5jPWUuYisrKX19ZWxzZXtmb3IoYz0wO2M8YS5iLTE7YysrKXtyRGIoZS5iPGUuZC5nYygpKTtlLmQuWGIoZS5jPWUuYisrKTt0amIoZSl9fWI9QmViKChyRGIoZS5iPGUuZC5nYygpKSxNRChlLmQuWGIoZS5jPWUuYisrKSkpKTt3aGlsZShhLmYtYj51emUpe2Y9YjtnPTA7d2hpbGUoJHduZC5NYXRoLmFicyhiLWYpPHV6ZSl7KytnO2I9QmViKChyRGIoZS5iPGUuZC5nYygpKSxNRChlLmQuWGIoZS5jPWUuYisrKSkpKTtyRGIoZC5iPGQuZC5nYygpKTtkLmQuWGIoZC5jPWQuYisrKX1pZihnPGEuYil7ckRiKGUuYj4wKTtlLmEuWGIoZS5jPS0tZS5iKTt4T2MoYSxhLmItZyxmLGQsZSk7ckRiKGUuYjxlLmQuZ2MoKSk7ZS5kLlhiKGUuYz1lLmIrKyl9ckRiKGQuYj4wKTtkLmEuWGIoZC5jPS0tZC5iKX1pZighYS5kKXtmb3IoYz0wO2M8YS5iLTE7YysrKXtyRGIoZS5iPGUuZC5nYygpKTtlLmQuWGIoZS5jPWUuYisrKTt0amIoZSl9fWEuZD10cnVlO2EuYz10cnVlfQpmdW5jdGlvbiBJaGUoKXtJaGU9WmNiO2toZT0oamhlKCksaWhlKS5iO25oZT1KRChuRGQoU1RkKGloZS5iKSwwKSwzNSk7bGhlPUpEKG5EZChTVGQoaWhlLmIpLDEpLDM1KTttaGU9SkQobkRkKFNUZChpaGUuYiksMiksMzUpO3hoZT1paGUuYmI7SkQobkRkKFNUZChpaGUuYmIpLDApLDM1KTtKRChuRGQoU1RkKGloZS5iYiksMSksMzUpO3poZT1paGUuZmI7QWhlPUpEKG5EZChTVGQoaWhlLmZiKSwwKSwzNSk7SkQobkRkKFNUZChpaGUuZmIpLDEpLDM1KTtKRChuRGQoU1RkKGloZS5mYiksMiksMTkpO0NoZT1paGUucWI7RmhlPUpEKG5EZChTVGQoaWhlLnFiKSwwKSwzNSk7SkQobkRkKFNUZChpaGUucWIpLDEpLDE5KTtKRChuRGQoU1RkKGloZS5xYiksMiksMTkpO0RoZT1KRChuRGQoU1RkKGloZS5xYiksMyksMzUpO0VoZT1KRChuRGQoU1RkKGloZS5xYiksNCksMzUpO0hoZT1KRChuRGQoU1RkKGloZS5xYiksNiksMzUpO0doZT1KRChuRGQoU1RkKGloZS5xYiksNSksMTkpO29oZT1paGUuajtwaGU9aWhlLms7cWhlPWloZS5xO3JoZT1paGUudztzaGU9aWhlLkI7dGhlPWloZS5BO3VoZT1paGUuQzt2aGU9aWhlLkQ7d2hlPWloZS5fO3loZT1paGUuY2I7QmhlPWloZS5oYn0KZnVuY3Rpb24gQkNjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuO2EuYz0wO2EuYj0wO2Q9MipiLmMuYS5jLmxlbmd0aCsxO286Zm9yKGw9Yy5KYygpO2wuT2IoKTspe2s9SkQobC5QYigpLDExKTtoPWsuaj09KFJqZCgpLHhqZCl8fGsuaj09T2pkO249MDtpZihoKXttPUpEKFdNYihrLChJcWMoKSxzcWMpKSw5KTtpZighbSl7Y29udGludWV9bis9d0NjKGEsZCxrLG0pfWVsc2V7Zm9yKGo9bmV3IHJtYihrLmcpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSwxOCk7ZT1pLmQ7aWYoZS5pLmM9PWIuYyl7SWxiKGEuYSxrKTtjb250aW51ZSBvfWVsc2V7bis9YS5nW2UucF19fWZvcihnPW5ldyBybWIoay5lKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTgpO2U9Zi5jO2lmKGUuaS5jPT1iLmMpe0lsYihhLmEsayk7Y29udGludWUgb31lbHNle24tPWEuZ1tlLnBdfX19aWYoay5lLmMubGVuZ3RoK2suZy5jLmxlbmd0aD4wKXthLmZbay5wXT1uLyhrLmUuYy5sZW5ndGgray5nLmMubGVuZ3RoKTthLmM9JHduZC5NYXRoLm1pbihhLmMsYS5mW2sucF0pO2EuYj0kd25kLk1hdGgubWF4KGEuYixhLmZbay5wXSl9ZWxzZSBoJiYoYS5mW2sucF09bil9fQpmdW5jdGlvbiBTaWUoYSl7YS5iPW51bGw7YS5iYj1udWxsO2EuZmI9bnVsbDthLnFiPW51bGw7YS5hPW51bGw7YS5jPW51bGw7YS5kPW51bGw7YS5lPW51bGw7YS5mPW51bGw7YS5uPW51bGw7YS5NPW51bGw7YS5MPW51bGw7YS5RPW51bGw7YS5SPW51bGw7YS5LPW51bGw7YS5kYj1udWxsO2EuZWI9bnVsbDthLmc9bnVsbDthLmk9bnVsbDthLmo9bnVsbDthLms9bnVsbDthLmdiPW51bGw7YS5vPW51bGw7YS5wPW51bGw7YS5xPW51bGw7YS5yPW51bGw7YS4kPW51bGw7YS5pYj1udWxsO2EuUz1udWxsO2EuVD1udWxsO2EudD1udWxsO2Eucz1udWxsO2EudT1udWxsO2Eudj1udWxsO2Eudz1udWxsO2EuQj1udWxsO2EuQT1udWxsO2EuQz1udWxsO2EuRD1udWxsO2EuRj1udWxsO2EuRz1udWxsO2EuSD1udWxsO2EuST1udWxsO2EuSj1udWxsO2EuUD1udWxsO2EuWj1udWxsO2EuVT1udWxsO2EuVj1udWxsO2EuVz1udWxsO2EuWD1udWxsO2EuWT1udWxsO2EuXz1udWxsO2EuYWI9bnVsbDthLmNiPW51bGw7YS5oYj1udWxsO2EubmI9bnVsbDthLmxiPW51bGw7YS5tYj1udWxsO2Eub2I9bnVsbDthLnBiPW51bGw7YS5qYj1udWxsO2Eua2I9bnVsbDthLk49ZmFsc2U7YS5PPWZhbHNlfQpmdW5jdGlvbiBPMWIoYSxiLGMpe3ZhciBkLGUsZixnO2MuU2coJ0dyYXBoIHRyYW5zZm9ybWF0aW9uICgnK2EuYSsnKScsMSk7Zz1adShiLmEpO2ZvcihmPW5ldyBybWIoYi5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjUpO0tsYihnLGUuYSl9ZD1KRChXTWIoYiwoQndjKCksc3VjKSksNDE2KTtpZihkPT0oS25jKCksSW5jKSl7c3dpdGNoKEpEKFdNYihiLHJ1YyksODYpLmcpe2Nhc2UgMjpDMWIoYixnKTticmVhaztjYXNlIDM6UzFiKGIsZyk7YnJlYWs7Y2FzZSA0OmlmKGEuYT09KF8xYigpLCQxYikpe1MxYihiLGcpO0QxYihiLGcpfWVsc2V7RDFiKGIsZyk7UzFiKGIsZyl9fX1lbHNle2lmKGEuYT09KF8xYigpLCQxYikpe3N3aXRjaChKRChXTWIoYixydWMpLDg2KS5nKXtjYXNlIDI6QzFiKGIsZyk7RDFiKGIsZyk7YnJlYWs7Y2FzZSAzOlMxYihiLGcpO0MxYihiLGcpO2JyZWFrO2Nhc2UgNDpDMWIoYixnKTtTMWIoYixnKTt9fWVsc2V7c3dpdGNoKEpEKFdNYihiLHJ1YyksODYpLmcpe2Nhc2UgMjpDMWIoYixnKTtEMWIoYixnKTticmVhaztjYXNlIDM6QzFiKGIsZyk7UzFiKGIsZyk7YnJlYWs7Y2FzZSA0OlMxYihiLGcpO0MxYihiLGcpO319fWMuVGcoKX0KZnVuY3Rpb24gS1FiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7Zm9yKGY9bmV3IHJtYihhLmEuYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDgyKTtlLmIuYz1lLmcuYztlLmIuZD1lLmcuZH1pPW5ldyBFZGQoS3NlLEtzZSk7Yj1uZXcgRWRkKExzZSxMc2UpO2ZvcihkPW5ldyBybWIoYS5hLmIpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw4Mik7aS5hPSR3bmQuTWF0aC5taW4oaS5hLGMuZy5jKTtpLmI9JHduZC5NYXRoLm1pbihpLmIsYy5nLmQpO2IuYT0kd25kLk1hdGgubWF4KGIuYSxjLmcuYytjLmcuYik7Yi5iPSR3bmQuTWF0aC5tYXgoYi5iLGMuZy5kK2MuZy5hKX1mb3IoaD1VYyhhLmMpLmEubmMoKTtoLk9iKCk7KXtnPUpEKGguUGIoKSw0Nyk7Yz1KRChnLmIsODIpO2kuYT0kd25kLk1hdGgubWluKGkuYSxjLmcuYyk7aS5iPSR3bmQuTWF0aC5taW4oaS5iLGMuZy5kKTtiLmE9JHduZC5NYXRoLm1heChiLmEsYy5nLmMrYy5nLmIpO2IuYj0kd25kLk1hdGgubWF4KGIuYixjLmcuZCtjLmcuYSl9YS5kPXRkZChuZXcgRWRkKGkuYSxpLmIpKTthLmU9QmRkKG5ldyBFZGQoYi5hLGIuYiksaSk7YS5hLmEuYy5sZW5ndGg9MDthLmEuYi5jLmxlbmd0aD0wfQpmdW5jdGlvbiBWU2IoYSl7TVNiKCk7dmFyIGIsYyxkLGUsZixnLGg7aD1uZXcgT1NiO2ZvcihjPW5ldyBybWIoYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDE0Myk7KCFoLmJ8fGIuYz49aC5iLmMpJiYoaC5iPWIpO2lmKCFoLmN8fGIuYzw9aC5jLmMpe2guZD1oLmM7aC5jPWJ9KCFoLmV8fGIuZD49aC5lLmQpJiYoaC5lPWIpOyghaC5mfHxiLmQ8PWguZi5kKSYmKGguZj1iKX1kPW5ldyBaU2IoKHhTYigpLHRTYikpO0RUYihhLEtTYixuZXcgZG5iKFdDKE9DKGNQLDEpLE5xZSwzNzQsMCxbZF0pKSk7Zz1uZXcgWlNiKHdTYik7RFRiKGEsSlNiLG5ldyBkbmIoV0MoT0MoY1AsMSksTnFlLDM3NCwwLFtnXSkpKTtlPW5ldyBaU2IodVNiKTtEVGIoYSxJU2IsbmV3IGRuYihXQyhPQyhjUCwxKSxOcWUsMzc0LDAsW2VdKSkpO2Y9bmV3IFpTYih2U2IpO0RUYihhLEhTYixuZXcgZG5iKFdDKE9DKGNQLDEpLE5xZSwzNzQsMCxbZl0pKSk7UFNiKGQuYyx0U2IpO1BTYihlLmMsdVNiKTtQU2IoZi5jLHZTYik7UFNiKGcuYyx3U2IpO2guYS5jLmxlbmd0aD0wO0tsYihoLmEsZC5jKTtLbGIoaC5hLGR2KGUuYykpO0tsYihoLmEsZi5jKTtLbGIoaC5hLGR2KGcuYykpO3JldHVybiBofQpmdW5jdGlvbiBDM2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbztiLlNnKCRBZSwxKTtuPUJlYihNRChrc2QoYSwoaDFjKCksZzFjKSkpKTtnPUJlYihNRChrc2QoYSwoazJjKCksZDJjKSkpKTtoPUpEKGtzZChhLGEyYyksMTA3KTtSNGMoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7az1oM2MoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSxuLGcpOyFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSk7Zm9yKGo9bmV3IHJtYihrKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksMTg2KTtmb3IoZT1uZXcgcm1iKGkuYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE3Mik7bT1uZXcgeDRjKGQucyxkLnQsQmViKE1EKGtzZChhLGQyYykpKSk7cTRjKG0sZCk7SWxiKGkuZCxtKX19bD1QNGMoayxnKTtvPSR3bmQuTWF0aC5tYXgobC5hLEJlYihNRChrc2QoYSxlMWMpKSktKGguYitoLmMpKTtmPSR3bmQuTWF0aC5tYXgobC5iLEJlYihNRChrc2QoYSxiMWMpKSktKGguZCtoLmEpKTtjPWYtbC5iO21zZChhLFkwYyxjKTttc2QoYSwkMGMsbyk7bXNkKGEsWjBjLGYrYyk7bXNkKGEsZjFjLGspO2IuVGcoKX0KZnVuY3Rpb24gTTJiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtqPW5ldyB3dGI7az1uZXcgd3RiO289bmV3IHd0YjtwPW5ldyB3dGI7aT1CZWIoTUQoV01iKGIsKEJ3YygpLGV3YykpKSk7Zj1CZWIoTUQoV01iKGIsV3ZjKSkpO2ZvcihoPW5ldyBybWIoYyk7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDkpO2w9SkQoV01iKGcsKElxYygpLFRwYykpLDY0KTtpZihsPT0oUmpkKCkseGpkKSl7ay5hLnljKGcsayk7Zm9yKGU9bmV3IGVzKElyKGhZYihnKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDE4KTtOcmIoaixkLmMuaSl9fWVsc2UgaWYobD09T2pkKXtwLmEueWMoZyxwKTtmb3IoZT1uZXcgZXMoSXIoaFliKGcpLmEuSmMoKSxuZXcgZXIpKTtjcyhlKTspe2Q9SkQoZHMoZSksMTgpO05yYihvLGQuYy5pKX19fWlmKGouYS5nYygpIT0wKXttPW5ldyBXTmMoMixmKTtuPVZOYyhtLGIsaixrLC1pLWIuYy5iKTtpZihuPjApe2EuYT1pKyhuLTEpKmY7Yi5jLmIrPWEuYTtiLmYuYis9YS5hfX1pZihvLmEuZ2MoKSE9MCl7bT1uZXcgV05jKDEsZik7bj1WTmMobSxiLG8scCxiLmYuYitpLWIuYy5iKTtuPjAmJihiLmYuYis9aSsobi0xKSpmKX19CmZ1bmN0aW9uICRsYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O2s9QmViKE1EKFdNYihhLChCd2MoKSxadmMpKSkpO2Q9QmViKE1EKFdNYihhLHF3YykpKTttPW5ldyBObmQ7Wk1iKG0sWnZjLGsrZCk7aj1iO3I9ai5kO3A9ai5jLmk7cz1qLmQuaTtxPWEkYihwLmMpO3Q9YSRiKHMuYyk7ZT1uZXcgVWxiO2ZvcihsPXE7bDw9dDtsKyspe2g9bmV3IHRZYihhKTtyWWIoaCwoRFliKCkseVliKSk7Wk1iKGgsKElxYygpLGtxYyksaik7Wk1iKGgsRXZjLChhamQoKSxYaWQpKTtaTWIoaCxfdmMsbSk7bj1KRChNbGIoYS5iLGwpLDI1KTtsPT1xP3BZYihoLG4uYS5jLmxlbmd0aC1jLG4pOnFZYihoLG4pO3U9QmViKE1EKFdNYihqLEZ1YykpKTtpZih1PDApe3U9MDtaTWIoaixGdWMsdSl9aC5vLmI9dTtvPSR3bmQuTWF0aC5mbG9vcih1LzIpO2c9bmV3IGJaYjthWmIoZywoUmpkKCksUWpkKSk7X1liKGcsaCk7Zy5uLmI9bztpPW5ldyBiWmI7YVpiKGksd2pkKTtfWWIoaSxoKTtpLm4uYj1vO2hXYihqLGcpO2Y9bmV3IGtXYjtVTWIoZixqKTtaTWIoZixSdWMsbnVsbCk7Z1diKGYsaSk7aFdiKGYscik7X2xjKGgsaixmKTtZQ2IoZS5jLGYpO2o9Zn1yZXR1cm4gZX0KZnVuY3Rpb24gYkxjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O3A9Yi5iLmMubGVuZ3RoO2lmKHA8Myl7cmV0dXJufW49U0MoY0UsaXNlLDMwLHAsMTUsMSk7bD0wO2ZvcihrPW5ldyBybWIoYi5iKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksMjUpO25bbCsrXT1qLmEuYy5sZW5ndGh9bT1uZXcgQWpiKGIuYiwyKTtmb3IoZD0xO2Q8cC0xO2QrKyl7Yz0ockRiKG0uYjxtLmQuZ2MoKSksSkQobS5kLlhiKG0uYz1tLmIrKyksMjUpKTtvPW5ldyBybWIoYy5hKTtmPTA7aD0wO2ZvcihpPTA7aTxuW2QrMV07aSsrKXt0PUpEKHBtYihvKSw5KTtpZihpPT1uW2QrMV0tMXx8YUxjKGEsdCxkKzEsZCkpe2c9bltkXS0xO2FMYyhhLHQsZCsxLGQpJiYoZz1hLmMuZVtKRChKRChKRChNbGIoYS5jLmIsdC5wKSwxNSkuWGIoMCksNDcpLmEsOSkucF0pO3doaWxlKGg8PWkpe3M9SkQoTWxiKGMuYSxoKSw5KTtpZighYUxjKGEscyxkKzEsZCkpe2ZvcihyPUpEKE1sYihhLmMuYixzLnApLDE1KS5KYygpO3IuT2IoKTspe3E9SkQoci5QYigpLDQ3KTtlPWEuYy5lW0pEKHEuYSw5KS5wXTsoZTxmfHxlPmcpJiZOcmIoYS5iLEpEKHEuYiwxOCkpfX0rK2h9Zj1nfX19fQpmdW5jdGlvbiBVN2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7aT1KRChvWWIoYSwoUmpkKCksUWpkKSkuSmMoKS5QYigpLDExKS5lO249SkQob1liKGEsd2pkKS5KYygpLlBiKCksMTEpLmc7aD1pLmMubGVuZ3RoO3Q9V1liKEpEKE1sYihhLmosMCksMTEpKTt3aGlsZShoLS0+MCl7cD0oc0RiKDAsaS5jLmxlbmd0aCksSkQoaS5jWzBdLDE4KSk7ZT0oc0RiKDAsbi5jLmxlbmd0aCksSkQobi5jWzBdLDE4KSk7cz1lLmQuZTtmPU5sYihzLGUsMCk7aVdiKHAsZS5kLGYpO2dXYihlLG51bGwpO2hXYihlLG51bGwpO289cC5hO2ImJkF0YihvLG5ldyBGZGQodCkpO2ZvcihkPUd0YihlLmEsMCk7ZC5iIT1kLmQuYzspe2M9SkQoVXRiKGQpLDgpO0F0YihvLG5ldyBGZGQoYykpfXI9cC5iO2ZvcihtPW5ldyBybWIoZS5iKTttLmE8bS5jLmMubGVuZ3RoOyl7bD1KRChwbWIobSksNzIpO1lDYihyLmMsbCl9cT1KRChXTWIocCwoQndjKCksUnVjKSksNzcpO2c9SkQoV01iKGUsUnVjKSw3Nyk7aWYoZyl7aWYoIXEpe3E9bmV3IFJkZDtaTWIocCxSdWMscSl9Zm9yKGs9R3RiKGcsMCk7ay5iIT1rLmQuYzspe2o9SkQoVXRiKGspLDgpO0F0YihxLG5ldyBGZGQoaikpfX19fQpmdW5jdGlvbiBPYmQoYixjKXt2YXIgZDtpZihjPT1udWxsfHxjZ2IoYyxScWUpKXtyZXR1cm4gbnVsbH1pZihjLmxlbmd0aD09MCYmYi5rIT0oemNkKCksdWNkKSl7cmV0dXJuIG51bGx9c3dpdGNoKGIuay5nKXtjYXNlIDE6cmV0dXJuIGRnYihjLENCZSk/KHhkYigpLHdkYik6ZGdiKGMsREJlKT8oeGRiKCksdmRiKTpudWxsO2Nhc2UgMjp0cnl7cmV0dXJuIGpmYihGZGIoYyxMcmUsSHFlKSl9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwxMzApKXtyZXR1cm4gbnVsbH1lbHNlIHRocm93IHNjYihhKX1jYXNlIDQ6dHJ5e3JldHVybiBFZGIoYyl9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwxMzApKXtyZXR1cm4gbnVsbH1lbHNlIHRocm93IHNjYihhKX1jYXNlIDM6cmV0dXJuIGM7Y2FzZSA1OkpiZChiKTtyZXR1cm4gTWJkKGIsYyk7Y2FzZSA2OkpiZChiKTtyZXR1cm4gTmJkKGIsYi5hLGMpO2Nhc2UgNzp0cnl7ZD1MYmQoYik7ZC5hZyhjKTtyZXR1cm4gZH1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDMyKSl7cmV0dXJuIG51bGx9ZWxzZSB0aHJvdyBzY2IoYSl9ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFdlYignSW52YWxpZCB0eXBlIHNldCBmb3IgdGhpcyBsYXlvdXQgb3B0aW9uLicpKTt9fQpmdW5jdGlvbiBnR2QoYSl7dmFyIGI7c3dpdGNoKGEuZCl7Y2FzZSAxOntpZihhLlBqKCkpe3JldHVybiBhLm8hPS0yfWJyZWFrfWNhc2UgMjp7aWYoYS5QaigpKXtyZXR1cm4gYS5vPT0tMn1icmVha31jYXNlIDM6Y2FzZSA1OmNhc2UgNDpjYXNlIDY6Y2FzZSA3OntyZXR1cm4gYS5vPi0yfWRlZmF1bHQ6e3JldHVybiBmYWxzZX19Yj1hLk9qKCk7c3dpdGNoKGEucCl7Y2FzZSAwOnJldHVybiBiIT1udWxsJiZ5ZGIoTEQoYikpIT1IY2IoYS5rLDApO2Nhc2UgMTpyZXR1cm4gYiE9bnVsbCYmSkQoYiwyMTkpLmEhPVBjYihhLmspPDwyND4+MjQ7Y2FzZSAyOnJldHVybiBiIT1udWxsJiZKRChiLDE3OSkuYSE9KFBjYihhLmspJldyZSk7Y2FzZSA2OnJldHVybiBiIT1udWxsJiZIY2IoSkQoYiwxOTApLmEsYS5rKTtjYXNlIDU6cmV0dXJuIGIhPW51bGwmJkpEKGIsMTcpLmEhPVBjYihhLmspO2Nhc2UgNzpyZXR1cm4gYiE9bnVsbCYmSkQoYiwxOTEpLmEhPVBjYihhLmspPDwxNj4+MTY7Y2FzZSAzOnJldHVybiBiIT1udWxsJiZCZWIoTUQoYikpIT1hLmo7Y2FzZSA0OnJldHVybiBiIT1udWxsJiZKRChiLDE2MCkuYSE9YS5qO2RlZmF1bHQ6cmV0dXJuIGI9PW51bGw/YS5uIT1udWxsOiFwYihiLGEubik7fX0KZnVuY3Rpb24gZ1hkKGEsYixjKXt2YXIgZCxlLGYsZztpZihhLmxsKCkmJmEua2woKSl7Zz1oWGQoYSxKRChjLDU3KSk7aWYoWEQoZykhPT1YRChjKSl7YS51aihiKTthLkFqKGIsaVhkKGEsYixnKSk7aWYoYS5aaygpKXtmPShlPUpEKGMsNTIpLGEuamwoKT9hLmhsKCk/ZS5QaChhLmIsczFkKEpEKFFUZCh5cmQoYS5iKSxhLklqKCkpLDE5KSkubixKRChRVGQoeXJkKGEuYiksYS5JaigpKS5FaygpLDI5KS5oaygpLG51bGwpOmUuUGgoYS5iLFdUZChlLnpoKCksczFkKEpEKFFUZCh5cmQoYS5iKSxhLklqKCkpLDE5KSkpLG51bGwsbnVsbCk6ZS5QaChhLmIsLTEtYS5JaigpLG51bGwsbnVsbCkpOyFKRChnLDUyKS5MaCgpJiYoZj0oZD1KRChnLDUyKSxhLmpsKCk/YS5obCgpP2QuTmgoYS5iLHMxZChKRChRVGQoeXJkKGEuYiksYS5JaigpKSwxOSkpLm4sSkQoUVRkKHlyZChhLmIpLGEuSWooKSkuRWsoKSwyOSkuaGsoKSxmKTpkLk5oKGEuYixXVGQoZC56aCgpLHMxZChKRChRVGQoeXJkKGEuYiksYS5JaigpKSwxOSkpKSxudWxsLGYpOmQuTmgoYS5iLC0xLWEuSWooKSxudWxsLGYpKSk7ISFmJiZmLmxqKCl9cXFkKGEuYikmJmEuR2ooYS5Gaig5LGMsZyxiLGZhbHNlKSk7cmV0dXJuIGd9fXJldHVybiBjfQpmdW5jdGlvbiB0R2IoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGs7ZD1uZXcgVWxiO2ZvcihnPW5ldyBybWIoYS5lLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihnKSwxMjMpO2s9MDtlLmsuYy5sZW5ndGg9MDtmb3IoYz1uZXcgcm1iKE9GYihlKSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDIxNik7aWYoYi5mKXtJbGIoZS5rLGIpOysra319az09MSYmKFlDYihkLmMsZSksdHJ1ZSl9Zm9yKGY9bmV3IHJtYihkKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMTIzKTt3aGlsZShlLmsuYy5sZW5ndGg9PTEpe2o9SkQocG1iKG5ldyBybWIoZS5rKSksMjE2KTthLmJbai5jXT1qLmc7aD1qLmQ7aT1qLmU7Zm9yKGM9bmV3IHJtYihPRmIoZSkpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwyMTYpO3BiKGIsail8fChiLmY/aD09Yi5kfHxpPT1iLmU/KGEuYltqLmNdLT1hLmJbYi5jXS1iLmcpOihhLmJbai5jXSs9YS5iW2IuY10tYi5nKTplPT1oP2IuZD09ZT8oYS5iW2ouY10rPWIuZyk6KGEuYltqLmNdLT1iLmcpOmIuZD09ZT8oYS5iW2ouY10tPWIuZyk6KGEuYltqLmNdKz1iLmcpKX1QbGIoaC5rLGopO1BsYihpLmssaik7aD09ZT8oZT1qLmUpOihlPWouZCl9fX0KZnVuY3Rpb24gR0piKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2M9SkQoS3FiKGEuYixiKSwxMjYpO2k9SkQoSkQoUWMoYS5yLGIpLDIyKSw4Myk7aWYoaS5kYygpKXtjLm4uYj0wO2Mubi5jPTA7cmV0dXJufWo9YS51LkdjKChvamQoKSxramQpKTtnPTA7aD1pLkpjKCk7az1udWxsO2w9MDttPTA7d2hpbGUoaC5PYigpKXtkPUpEKGguUGIoKSwxMTUpO2U9QmViKE1EKGQuYi5tZigoRUtiKCksREtiKSkpKTtmPWQuYi5LZigpLmE7YS5BLkdjKCh5a2QoKSx4a2QpKSYmTUpiKGEsYik7aWYoIWspeyEhYS5DJiZhLkMuYj4wJiYoZz0kd25kLk1hdGgubWF4KGcsS0piKGEuQy5iK2QuZC5iLGUpKSl9ZWxzZXtuPW0ray5kLmMrYS53K2QuZC5iO2c9JHduZC5NYXRoLm1heChnLChSeSgpLFZ5KGZ1ZSksJHduZC5NYXRoLmFicyhsLWUpPD1mdWV8fGw9PWV8fGlzTmFOKGwpJiZpc05hTihlKT8wOm4vKGUtbCkpKX1rPWQ7bD1lO209Zn1pZighIWEuQyYmYS5DLmM+MCl7bj1tK2EuQy5jO2omJihuKz1rLmQuYyk7Zz0kd25kLk1hdGgubWF4KGcsKFJ5KCksVnkoZnVlKSwkd25kLk1hdGguYWJzKGwtMSk8PWZ1ZXx8bD09MXx8aXNOYU4obCkmJmlzTmFOKDEpPzA6bi8oMS1sKSkpfWMubi5iPTA7Yy5hLmE9Z30KZnVuY3Rpb24gUEtiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2M9SkQoS3FiKGEuYixiKSwxMjYpO2k9SkQoSkQoUWMoYS5yLGIpLDIyKSw4Myk7aWYoaS5kYygpKXtjLm4uZD0wO2Mubi5hPTA7cmV0dXJufWo9YS51LkdjKChvamQoKSxramQpKTtnPTA7YS5BLkdjKCh5a2QoKSx4a2QpKSYmVUtiKGEsYik7aD1pLkpjKCk7az1udWxsO209MDtsPTA7d2hpbGUoaC5PYigpKXtkPUpEKGguUGIoKSwxMTUpO2Y9QmViKE1EKGQuYi5tZigoRUtiKCksREtiKSkpKTtlPWQuYi5LZigpLmI7aWYoIWspeyEhYS5DJiZhLkMuZD4wJiYoZz0kd25kLk1hdGgubWF4KGcsS0piKGEuQy5kK2QuZC5kLGYpKSl9ZWxzZXtuPWwray5kLmErYS53K2QuZC5kO2c9JHduZC5NYXRoLm1heChnLChSeSgpLFZ5KGZ1ZSksJHduZC5NYXRoLmFicyhtLWYpPD1mdWV8fG09PWZ8fGlzTmFOKG0pJiZpc05hTihmKT8wOm4vKGYtbSkpKX1rPWQ7bT1mO2w9ZX1pZighIWEuQyYmYS5DLmE+MCl7bj1sK2EuQy5hO2omJihuKz1rLmQuYSk7Zz0kd25kLk1hdGgubWF4KGcsKFJ5KCksVnkoZnVlKSwkd25kLk1hdGguYWJzKG0tMSk8PWZ1ZXx8bT09MXx8aXNOYU4obSkmJmlzTmFOKDEpPzA6bi8oMS1tKSkpfWMubi5kPTA7Yy5hLmI9Z30KZnVuY3Rpb24gQ0RjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7dGhpcy5nPWE7aD1iLmQubGVuZ3RoO2k9Yy5kLmxlbmd0aDt0aGlzLmQ9U0MoUlAsSnZlLDksaCtpLDAsMSk7Zm9yKGc9MDtnPGg7ZysrKXt0aGlzLmRbZ109Yi5kW2ddfWZvcihmPTA7ZjxpO2YrKyl7dGhpcy5kW2grZl09Yy5kW2ZdfWlmKGIuZSl7dGhpcy5lPWN2KGIuZSk7dGhpcy5lLktjKGMpO2lmKGMuZSl7Zm9yKGU9Yy5lLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksMjM4KTtpZihkPT1iKXtjb250aW51ZX1lbHNlIHRoaXMuZS5HYyhkKT8tLWQuYzp0aGlzLmUuRWMoZCl9fX1lbHNlIGlmKGMuZSl7dGhpcy5lPWN2KGMuZSk7dGhpcy5lLktjKGIpfXRoaXMuZj1iLmYrYy5mO3RoaXMuYT1iLmErYy5hO3RoaXMuYT4wP0FEYyh0aGlzLHRoaXMuZi90aGlzLmEpOnNEYyhiLmcsYi5kWzBdKS5hIT1udWxsJiZzRGMoYy5nLGMuZFswXSkuYSE9bnVsbD9BRGModGhpcywoQmViKHNEYyhiLmcsYi5kWzBdKS5hKStCZWIoc0RjKGMuZyxjLmRbMF0pLmEpKS8yKTpzRGMoYi5nLGIuZFswXSkuYSE9bnVsbD9BRGModGhpcyxzRGMoYi5nLGIuZFswXSkuYSk6c0RjKGMuZyxjLmRbMF0pLmEhPW51bGwmJkFEYyh0aGlzLHNEYyhjLmcsYy5kWzBdKS5hKX0KZnVuY3Rpb24gJDJjKGEsYixjLGQsZSxmLGcsaCl7dmFyIGksaixrLGwsbSxuLG8scCxxLHI7bz1mYWxzZTtqPXQ0YyhjLnEsYi5mK2IuYi1jLnEuZik7bj1kLmY+Yi5iJiZoO3I9ZS0oYy5xLmUrai1nKTtsPShpPWc0YyhkLHIsZmFsc2UpLGkuYSk7aWYobiYmbD5kLmYpe3JldHVybiBmYWxzZX1pZihuKXttPTA7Zm9yKHE9bmV3IHJtYihiLmQpO3EuYTxxLmMuYy5sZW5ndGg7KXtwPUpEKHBtYihxKSwzMTYpO20rPXQ0YyhwLGQuZikrZ31yPWUtbX1pZihyPGQuZyl7cmV0dXJuIGZhbHNlfWs9Zj09YS5jLmxlbmd0aC0xJiZyPj0oc0RiKGYsYS5jLmxlbmd0aCksSkQoYS5jW2ZdLDE4NikpLmU7aWYoIW4mJmw+Yi5iJiYhayl7cmV0dXJuIGZhbHNlfWlmKGt8fG58fGw8PWIuYil7aWYoayYmbD5iLmIpe2MuZD1sO2U0YyhjLGQ0YyhjLGwpKX1lbHNle3U0YyhjLnEsaik7Yy5jPXRydWV9ZTRjKGQsZS0oYy5zK2MucikpO2k0YyhkLGMucS5lK2MucS5kLGIuZik7UzRjKGIsZCk7aWYoYS5jLmxlbmd0aD5mKXtWNGMoKHNEYihmLGEuYy5sZW5ndGgpLEpEKGEuY1tmXSwxODYpKSxkKTsoc0RiKGYsYS5jLmxlbmd0aCksSkQoYS5jW2ZdLDE4NikpLmEuYy5sZW5ndGg9PTAmJk9sYihhLGYpfW89dHJ1ZX1yZXR1cm4gb30KZnVuY3Rpb24gTlFiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGw7YS5hPW5ldyBwUmIobHJiKGkyKSk7Zm9yKGQ9bmV3IHJtYihiLmEpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSw4MzQpO2g9bmV3IHNSYihXQyhPQyhKTywxKSxOcWUsODIsMCxbXSkpO0lsYihhLmEuYSxoKTtmb3Ioaj1uZXcgcm1iKGMuZCk7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDExOSk7az1uZXcgU1FiKGEsaSk7TVFiKGssSkQoV01iKGMuYywoSXFjKCksUXBjKSksMjIpKTtpZighTGliKGEuZyxjKSl7UWliKGEuZyxjLG5ldyBFZGQoaS5jLGkuZCkpO1FpYihhLmYsYyxrKX1JbGIoYS5hLmIsayk7cVJiKGgsayl9Zm9yKGc9bmV3IHJtYihjLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSw1ODYpO2s9bmV3IFNRYihhLGYuQmYoKSk7UWliKGEuYixmLG5ldyB4b2QoaCxrKSk7TVFiKGssSkQoV01iKGMuYywoSXFjKCksUXBjKSksMjIpKTtpZihmLnpmKCkpe2w9bmV3IFRRYihhLGYuemYoKSwxKTtNUWIobCxKRChXTWIoYy5jLFFwYyksMjIpKTtlPW5ldyBzUmIoV0MoT0MoSk8sMSksTnFlLDgyLDAsW10pKTtxUmIoZSxsKTtSYyhhLmMsZi55ZigpLG5ldyB4b2QoaCxsKSl9fX1yZXR1cm4gYS5hfQpmdW5jdGlvbiBVYmUoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7Zz1jLklrKCk7aWYoUkQoZywxMDEpJiYoSkQoZywxOSkuQmImUHNlKSE9MCl7bT1KRChjLmtkKCksNTIpO3A9enFkKGEuZSxtKTtpZihwIT1tKXtrPUpmZShnLHApO2pEZChhLGIsbWNlKGEsYixrKSk7bD1udWxsO2lmKHFxZChhLmUpKXtkPVo5ZCgoR2ZlKCksRWZlKSxhLmUuemgoKSxnKTtpZihkIT1RVGQoYS5lLnpoKCksYS5jKSl7cT1LZmUoYS5lLnpoKCksZyk7aD0wO2Y9SkQoYS5nLDEyMik7Zm9yKGk9MDtpPGI7KytpKXtlPWZbaV07cS5abChlLklrKCkpJiYrK2h9bD1uZXcgR2dlKGEuZSw5LGQsbSxwLGgsZmFsc2UpO2wua2oobmV3IGlfZChhLmUsOSxhLmMsYyxrLGIsZmFsc2UpKX19bz1KRChnLDE5KTtuPXMxZChvKTtpZihuKXtsPW0uUGgoYS5lLFdUZChtLnpoKCksbiksbnVsbCxsKTtsPUpEKHAsNTIpLk5oKGEuZSxXVGQocC56aCgpLG4pLG51bGwsbCl9ZWxzZSBpZigoby5CYiZSQ2UpIT0wKXtqPS0xLVdUZChhLmUuemgoKSxvKTtsPW0uUGgoYS5lLGosbnVsbCxudWxsKTshSkQocCw1MikuTGgoKSYmKGw9SkQocCw1MikuTmgoYS5lLGosbnVsbCxsKSl9ISFsJiZsLmxqKCk7cmV0dXJuIGt9fXJldHVybiBjfQpmdW5jdGlvbiBqemMoYSl7dmFyIGI7dGhpcy5hPWE7Yj0oRFliKCksV0MoT0MoUFAsMSksRXJlLDI0NywwLFtBWWIseVliLHdZYixCWWIseFliLHZZYixDWWIselliXSkpLmxlbmd0aDt0aGlzLmI9UUMoTjQsW2hyZSxkemVdLFs1ODUsMTQ0XSwwLFtiLGJdLDIpO3RoaXMuYz1RQyhONCxbaHJlLGR6ZV0sWzU4NSwxNDRdLDAsW2IsYl0sMik7aXpjKHRoaXMsQVliLChCd2MoKSxld2MpLGZ3Yyk7Z3pjKHRoaXMsQVliLHlZYixadmMsJHZjKTtmemModGhpcyxBWWIsQlliLFp2Yyk7ZnpjKHRoaXMsQVliLHdZYixadmMpO2d6Yyh0aGlzLEFZYix4WWIsZXdjLGZ3Yyk7aXpjKHRoaXMseVliLFd2YyxYdmMpO2Z6Yyh0aGlzLHlZYixCWWIsV3ZjKTtmemModGhpcyx5WWIsd1liLFd2Yyk7Z3pjKHRoaXMseVliLHhZYixadmMsJHZjKTtoemModGhpcyxCWWIsV3ZjKTtmemModGhpcyxCWWIsd1liLFd2Yyk7ZnpjKHRoaXMsQlliLHhZYixid2MpO2h6Yyh0aGlzLHdZYixpd2MpO2d6Yyh0aGlzLHdZYix4WWIsZHdjLGN3Yyk7aXpjKHRoaXMseFliLFd2YyxXdmMpO2l6Yyh0aGlzLHZZYixXdmMsWHZjKTtnemModGhpcyx2WWIsQVliLFp2YywkdmMpO2d6Yyh0aGlzLHZZYix4WWIsWnZjLCR2Yyk7Z3pjKHRoaXMsdlliLHlZYixadmMsJHZjKX0KZnVuY3Rpb24gYk9kKGEsYixjLGQsZSxmKXt2YXIgZztpZighKGI9PW51bGx8fCFITmQoYixzTmQsdE5kKSkpe3Rocm93IHNjYihuZXcgVGViKCdpbnZhbGlkIHNjaGVtZTogJytiKSl9aWYoIWEmJiEoYyE9bnVsbCYmaGdiKGMsd2diKDM1KSk9PS0xJiZjLmxlbmd0aD4wJiYoQURiKDAsYy5sZW5ndGgpLGMuY2hhckNvZGVBdCgwKSE9NDcpKSl7dGhyb3cgc2NiKG5ldyBUZWIoJ2ludmFsaWQgb3BhcXVlUGFydDogJytjKSl9aWYoYSYmIShiIT1udWxsJiZrb2Ioek5kLGIudG9Mb3dlckNhc2UoKSkpJiYhKGM9PW51bGx8fCFITmQoYyx2TmQsd05kKSkpe3Rocm93IHNjYihuZXcgVGViKFBFZStjKSl9aWYoYSYmYiE9bnVsbCYma29iKHpOZCxiLnRvTG93ZXJDYXNlKCkpJiYhWk5kKGMpKXt0aHJvdyBzY2IobmV3IFRlYihQRWUrYykpfWlmKCEkTmQoZCkpe3Rocm93IHNjYihuZXcgVGViKCdpbnZhbGlkIGRldmljZTogJytkKSl9aWYoIWFPZChlKSl7Zz1lPT1udWxsPydpbnZhbGlkIHNlZ21lbnRzOiBudWxsJzonaW52YWxpZCBzZWdtZW50OiAnK09OZChlKTt0aHJvdyBzY2IobmV3IFRlYihnKSl9aWYoIShmPT1udWxsfHxoZ2IoZix3Z2IoMzUpKT09LTEpKXt0aHJvdyBzY2IobmV3IFRlYignaW52YWxpZCBxdWVyeTogJytmKSl9fQpmdW5jdGlvbiBCWGIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjttPW5ldyBGZGQoYS5vKTtyPWIuYS9tLmE7aD1iLmIvbS5iO3A9Yi5hLW0uYTtmPWIuYi1tLmI7aWYoYyl7ZT1YRChXTWIoYSwoQndjKCksRXZjKSkpPT09WEQoKGFqZCgpLFhpZCkpO2ZvcihvPW5ldyBybWIoYS5qKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1KRChwbWIobyksMTEpO3N3aXRjaChuLmouZyl7Y2FzZSAxOmV8fChuLm4uYSo9cik7YnJlYWs7Y2FzZSAyOm4ubi5hKz1wO2V8fChuLm4uYio9aCk7YnJlYWs7Y2FzZSAzOmV8fChuLm4uYSo9cik7bi5uLmIrPWY7YnJlYWs7Y2FzZSA0OmV8fChuLm4uYio9aCk7fX19Zm9yKGo9bmV3IHJtYihhLmIpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSw3Mik7az1pLm4uYStpLm8uYS8yO2w9aS5uLmIraS5vLmIvMjtxPWsvbS5hO2c9bC9tLmI7aWYocStnPj0xKXtpZihxLWc+MCYmbD49MCl7aS5uLmErPXA7aS5uLmIrPWYqZ31lbHNlIGlmKHEtZzwwJiZrPj0wKXtpLm4uYSs9cCpxO2kubi5iKz1mfX19YS5vLmE9Yi5hO2Euby5iPWIuYjtaTWIoYSwoQndjKCksb3ZjKSwoeWtkKCksZD1KRChkZWIoejIpLDEwKSxuZXcgdXJiKGQsSkQoVkNiKGQsZC5sZW5ndGgpLDEwKSwwKSkpfQpmdW5jdGlvbiBaQmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtjLlNnKCdOZXR3b3JrIHNpbXBsZXggbGF5ZXJpbmcnLDEpO2EuYj1iO3I9SkQoV01iKGIsKEJ3YygpLGp3YykpLDE3KS5hKjQ7cT1hLmIuYTtpZihxLmMubGVuZ3RoPDEpe2MuVGcoKTtyZXR1cm59Zj1WQmMoYSxxKTtwPW51bGw7Zm9yKGU9R3RiKGYsMCk7ZS5iIT1lLmQuYzspe2Q9SkQoVXRiKGUpLDE1KTtoPXIqWUQoJHduZC5NYXRoLnNxcnQoZC5nYygpKSk7Zz1ZQmMoZCk7d0diKEpHYihMR2IoS0diKE5HYihnKSxoKSxwKSx0cnVlKSxjLmJoKDEpKTttPWEuYi5iO2ZvcihvPW5ldyBybWIoZy5hKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1KRChwbWIobyksMTIzKTt3aGlsZShtLmMubGVuZ3RoPD1uLmUpe0hsYihtLG0uYy5sZW5ndGgsbmV3IGIkYihhLmIpKX1rPUpEKG4uZiw5KTtxWWIoayxKRChNbGIobSxuLmUpLDI1KSl9aWYoZi5iPjEpe3A9U0MoY0UsaXNlLDMwLGEuYi5iLmMubGVuZ3RoLDE1LDEpO2w9MDtmb3Ioaj1uZXcgcm1iKGEuYi5iKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksMjUpO3BbbCsrXT1pLmEuYy5sZW5ndGh9fX1xLmMubGVuZ3RoPTA7YS5hPW51bGw7YS5iPW51bGw7YS5jPW51bGw7Yy5UZygpfQpmdW5jdGlvbiB3R2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtrPW5ldyBVbGI7bD1uZXcgbmxiO2Y9bnVsbDtlPTA7Zm9yKGQ9MDtkPGIubGVuZ3RoOysrZCl7Yz1iW2RdO3lHYyhmLGMpJiYoZT1yR2MoYSxsLGssZkdjLGUpKTtYTWIoYywoSXFjKCksX3BjKSkmJihmPUpEKFdNYihjLF9wYyksOSkpO3N3aXRjaChjLmsuZyl7Y2FzZSAwOmZvcihpPWhyKF9xKGxZYihjLChSamQoKSx4amQpKSxuZXcgaEhjKSk7eGMoaSk7KXtnPUpEKHljKGkpLDExKTthLmRbZy5wXT1lKys7WUNiKGsuYyxnKX1lPXJHYyhhLGwsayxmR2MsZSk7Zm9yKGo9aHIoX3EobFliKGMsT2pkKSxuZXcgaEhjKSk7eGMoaik7KXtnPUpEKHljKGopLDExKTthLmRbZy5wXT1lKys7WUNiKGsuYyxnKX1icmVhaztjYXNlIDM6aWYoIWxZYihjLGVHYykuZGMoKSl7Zz1KRChsWWIoYyxlR2MpLlhiKDApLDExKTthLmRbZy5wXT1lKys7WUNiKGsuYyxnKX1sWWIoYyxmR2MpLmRjKCl8fCRrYihsLGMpO2JyZWFrO2Nhc2UgMTpmb3IoaD1sWWIoYywoUmpkKCksUWpkKSkuSmMoKTtoLk9iKCk7KXtnPUpEKGguUGIoKSwxMSk7YS5kW2cucF09ZSsrO1lDYihrLmMsZyl9bFliKGMsd2pkKS5JYyhuZXcgZkhjKGwsYykpO319ckdjKGEsbCxrLGZHYyxlKTtyZXR1cm4ga30KZnVuY3Rpb24gS2FkKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87aWYoYj09bnVsbHx8Yi5sZW5ndGg9PTApe3JldHVybiBudWxsfWY9SkQoT2liKGEuZixiKSwyMSk7aWYoIWYpe2ZvcihlPShuPShuZXcgWmpiKGEuZCkpLmEudmMoKS5KYygpLG5ldyBja2IobikpO2UuYS5PYigpOyl7Yz0oZz1KRChlLmEuUGIoKSw0MyksSkQoZy5rZCgpLDIxKSk7aD1jLmY7bz1iLmxlbmd0aDtpZihjZ2IoaC5zdWJzdHIoaC5sZW5ndGgtbyxvKSxiKSYmKGIubGVuZ3RoPT1oLmxlbmd0aHx8X2ZiKGgsaC5sZW5ndGgtYi5sZW5ndGgtMSk9PTQ2KSl7aWYoZil7cmV0dXJuIG51bGx9Zj1jfX1pZighZil7Zm9yKGQ9KG09KG5ldyBaamIoYS5kKSkuYS52YygpLkpjKCksbmV3IGNrYihtKSk7ZC5hLk9iKCk7KXtjPShnPUpEKGQuYS5QYigpLDQzKSxKRChnLmtkKCksMjEpKTtsPWMuZztpZihsIT1udWxsKXtmb3IoaT1sLGo9MCxrPWkubGVuZ3RoO2o8azsrK2ope2g9aVtqXTtvPWIubGVuZ3RoO2lmKGNnYihoLnN1YnN0cihoLmxlbmd0aC1vLG8pLGIpJiYoYi5sZW5ndGg9PWgubGVuZ3RofHxfZmIoaCxoLmxlbmd0aC1iLmxlbmd0aC0xKT09NDYpKXtpZihmKXtyZXR1cm4gbnVsbH1mPWN9fX19fSEhZiYmUmliKGEuZixiLGYpfXJldHVybiBmfQpmdW5jdGlvbiBBQShhLGIpe3ZhciBjLGQsZSxmLGc7Yz1uZXcgVmdiO2c9ZmFsc2U7Zm9yKGY9MDtmPGIubGVuZ3RoO2YrKyl7ZD0oQURiKGYsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChmKSk7aWYoZD09MzIpe29BKGEsYywwKTtjLmErPScgJztvQShhLGMsMCk7d2hpbGUoZisxPGIubGVuZ3RoJiYoQURiKGYrMSxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGYrMSk9PTMyKSl7KytmfWNvbnRpbnVlfWlmKGcpe2lmKGQ9PTM5KXtpZihmKzE8Yi5sZW5ndGgmJihBRGIoZisxLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZisxKT09MzkpKXtjLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZCk7KytmfWVsc2V7Zz1mYWxzZX19ZWxzZXtjLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZCl9Y29udGludWV9aWYoaGdiKCdHeU1MZGtIbXNTRWNEYWhLelp2Jyx3Z2IoZCkpPjApe29BKGEsYywwKTtjLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZCk7ZT10QShiLGYpO29BKGEsYyxlKTtmKz1lLTE7Y29udGludWV9aWYoZD09Mzkpe2lmKGYrMTxiLmxlbmd0aCYmKEFEYihmKzEsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChmKzEpPT0zOSkpe2MuYSs9IiciOysrZn1lbHNle2c9dHJ1ZX19ZWxzZXtjLmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZCl9fW9BKGEsYywwKTt1QShhKX0KZnVuY3Rpb24gd01jKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O3Q9VXgoYSk7aT1uZXcgVWxiO2Y9YS5jLmxlbmd0aDtqPWYtMTtrPWYrMTt3aGlsZSh0LmEuZ2MoKSE9MCl7d2hpbGUoYy5iIT0wKXtyPShyRGIoYy5iIT0wKSxKRChLdGIoYyxjLmEuYSksMTE2KSk7dC5hLkFjKHIpIT1udWxsO3IuZz1qLS07ek1jKHIsYixjLGQpfXdoaWxlKGIuYiE9MCl7cz0ockRiKGIuYiE9MCksSkQoS3RiKGIsYi5hLmEpLDExNikpO3QuYS5BYyhzKSE9bnVsbDtzLmc9aysrO3pNYyhzLGIsYyxkKX1oPUxyZTtmb3IocD10LmEuZWMoKS5KYygpO3AuT2IoKTspe289SkQocC5QYigpLDExNik7aWYoIWQmJm8uYj4wJiZvLmE8PTApe2kuYy5sZW5ndGg9MDtZQ2IoaS5jLG8pO2JyZWFrfW49by5pLW8uZDtpZihuPj1oKXtpZihuPmgpe2kuYy5sZW5ndGg9MDtoPW59WUNiKGkuYyxvKX19aWYoaS5jLmxlbmd0aCE9MCl7Zz1KRChNbGIoaSx4dmIoZSxpLmMubGVuZ3RoKSksMTE2KTt0LmEuQWMoZykhPW51bGw7Zy5nPWsrKzt6TWMoZyxiLGMsZCk7aS5jLmxlbmd0aD0wfX1xPWEuYy5sZW5ndGgrMTtmb3IobT1uZXcgcm1iKGEpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUpEKHBtYihtKSwxMTYpO2wuZzxmJiYobC5nPWwuZytxKX19CmZ1bmN0aW9uIElEYyhhLGIsYyl7dmFyIGQsZSxmLGc7dGhpcy5qPWE7dGhpcy5lPW1XYihhKTt0aGlzLm89dGhpcy5qLmU7dGhpcy5pPSEhdGhpcy5vO3RoaXMucD10aGlzLmk/SkQoTWxiKGMsZ1liKHRoaXMubykucCksMjE3KTpudWxsO2U9SkQoV01iKGEsKElxYygpLFdwYykpLDIyKTt0aGlzLmc9ZS5HYygoJG9jKCksVG9jKSk7dGhpcy5iPW5ldyBVbGI7dGhpcy5kPW5ldyBVRmModGhpcy5lKTtnPUpEKFdNYih0aGlzLmosdnFjKSwyMzMpO3RoaXMucT1aRGMoYixnLHRoaXMuZSk7dGhpcy5rPW5ldyBjRmModGhpcyk7Zj1fdShXQyhPQyhFWCwxKSxOcWUsMjI5LDAsW3RoaXMsdGhpcy5kLHRoaXMuayx0aGlzLnFdKSk7aWYoYj09KFVFYygpLFJFYykmJiF5ZGIoTEQoV01iKGEsKEJ3YygpLGV1YykpKSkpe2Q9bmV3IHREYyh0aGlzLmUpO1lDYihmLmMsZCk7dGhpcy5jPW5ldyBYQ2MoZCxnLEpEKHRoaXMucSw0MDIpKX1lbHNlIGlmKGI9PVJFYyYmeWRiKExEKFdNYihhLChCd2MoKSxldWMpKSkpKXtkPW5ldyB0RGModGhpcy5lKTtZQ2IoZi5jLGQpO3RoaXMuYz1uZXcgeUZjKGQsZyxKRCh0aGlzLnEsNDAyKSl9ZWxzZXt0aGlzLmM9bmV3IFJmYyhiLHRoaXMpfUlsYihmLHRoaXMuYyk7QkhjKGYsdGhpcy5lKTt0aGlzLnM9YkZjKHRoaXMuayl9CmZ1bmN0aW9uIFJLYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07Zm9yKGU9bmV3IHJtYihhLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2M9SkQocG1iKGUpLDI1KTtmb3IoaT1uZXcgcm1iKGMuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDkpO2IualtoLnBdPWg7Yi5pW2gucF09Yi5vPT0oSEtjKCksR0tjKT9Mc2U6S3NlfX1UaWIoYS5jKTtnPWEuYS5iO2IuYz09KHpLYygpLHhLYykmJihnPWR2KGcpKTt2TGMoYS5lLGIsYS5iKTtEbWIoYi5wLG51bGwpO2ZvcihmPWcuSmMoKTtmLk9iKCk7KXtjPUpEKGYuUGIoKSwyNSk7aj1jLmE7Yi5vPT0oSEtjKCksR0tjKSYmKGo9ZHYoaikpO2ZvcihtPWouSmMoKTttLk9iKCk7KXtsPUpEKG0uUGIoKSw5KTtiLmdbbC5wXT09bCYmU0tjKGEsbCxiKX19VEtjKGEsYik7Zm9yKGQ9Zy5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDI1KTtmb3IobT1uZXcgcm1iKGMuYSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9SkQocG1iKG0pLDkpO2IucFtsLnBdPWIucFtiLmdbbC5wXS5wXTtpZihsPT1iLmdbbC5wXSl7az1CZWIoYi5pW2IualtsLnBdLnBdKTsoYi5vPT0oSEtjKCksR0tjKSYmaz5Mc2V8fGIubz09RktjJiZrPEtzZSkmJihiLnBbbC5wXT1CZWIoYi5wW2wucF0pK2spfX19YS5lLnZnKCl9CmZ1bmN0aW9uIEtWYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtpZigheWRiKExEKFdNYihjLChCd2MoKSxOdWMpKSkpKXtyZXR1cm59Zm9yKGg9bmV3IHJtYihjLmopO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxMSk7bT1DWGIoZy5nKTtmb3Ioaj1tLGs9MCxsPWoubGVuZ3RoO2s8bDsrK2spe2k9altrXTtmPWkuZC5pPT1jO2U9ZiYmeWRiKExEKFdNYihpLE91YykpKTtpZihlKXtvPWkuYztuPUpEKE5pYihhLmIsbyksOSk7aWYoIW4pe249cFhiKG8sKGFqZCgpLCRpZCksby5qLC0xLG51bGwsbnVsbCxvLm8sSkQoV01iKGIscnVjKSw4NiksYik7Wk1iKG4sKElxYygpLGtxYyksbyk7UWliKGEuYixvLG4pO0lsYihiLmEsbil9cT1pLmQ7cD1KRChOaWIoYS5iLHEpLDkpO2lmKCFwKXtwPXBYYihxLChhamQoKSwkaWQpLHEuaiwxLG51bGwsbnVsbCxxLm8sSkQoV01iKGIscnVjKSw4NiksYik7Wk1iKHAsKElxYygpLGtxYykscSk7UWliKGEuYixxLHApO0lsYihiLmEscCl9ZD1DVmIoaSk7Z1diKGQsSkQoTWxiKG4uaiwwKSwxMSkpO2hXYihkLEpEKE1sYihwLmosMCksMTEpKTtSYyhhLmEsaSxuZXcgVFZiKGQsYiwoRXljKCksQ3ljKSkpO0pEKFdNYihiLChJcWMoKSxXcGMpKSwyMikuRWMoKCRvYygpLFRvYykpfX19fQpmdW5jdGlvbiBKVmIoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7Zj1uZXcgVWxiO2ZvcihqPW5ldyBybWIoZCk7ai5hPGouYy5jLmxlbmd0aDspe2g9SkQocG1iKGopLDQ0MSk7Zz1udWxsO2lmKGguZj09KEV5YygpLEN5Yykpe2ZvcihvPW5ldyBybWIoaC5lKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1KRChwbWIobyksMTgpO3E9bi5kLmk7aWYoZ1liKHEpPT1iKXtBVmIoYSxiLGgsbixoLmIsbi5kKX1lbHNlIGlmKCFjfHx4WGIocSxjKSl7QlZiKGEsYixoLGQsbil9ZWxzZXttPUdWYihhLGIsYyxuLGguYixDeWMsZyk7bSE9ZyYmKFlDYihmLmMsbSksdHJ1ZSk7bS5jJiYoZz1tKX19fWVsc2V7Zm9yKGw9bmV3IHJtYihoLmUpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihsKSwxOCk7cD1rLmMuaTtpZihnWWIocCk9PWIpe0FWYihhLGIsaCxrLGsuYyxoLmIpfWVsc2UgaWYoIWN8fHhYYihwLGMpKXtjb250aW51ZX1lbHNle209R1ZiKGEsYixjLGssaC5iLEJ5YyxnKTttIT1nJiYoWUNiKGYuYyxtKSx0cnVlKTttLmMmJihnPW0pfX19fWZvcihpPW5ldyBybWIoZik7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDQ0MSk7TmxiKGIuYSxoLmEsMCkhPS0xfHxJbGIoYi5hLGguYSk7aC5jJiYoWUNiKGUuYyxoKSx0cnVlKX19CmZ1bmN0aW9uIFJQYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O2U9SkQoV01iKGEsKHRVYygpLGtVYykpLDI3KTtqPUhxZTtrPUhxZTtoPUxyZTtpPUxyZTtmb3IodD1HdGIoYS5iLDApO3QuYiE9dC5kLmM7KXtyPUpEKFV0Yih0KSwzOSk7bj1yLmU7bz1yLmY7aj0kd25kLk1hdGgubWluKGosbi5hLW8uYS8yKTtrPSR3bmQuTWF0aC5taW4oayxuLmItby5iLzIpO2g9JHduZC5NYXRoLm1heChoLG4uYStvLmEvMik7aT0kd25kLk1hdGgubWF4KGksbi5iK28uYi8yKX1tPUpEKGtzZChlLChrVmMoKSxXVWMpKSwxMDcpO2ZvcihzPUd0YihhLmIsMCk7cy5iIT1zLmQuYzspe3I9SkQoVXRiKHMpLDM5KTtsPVdNYihyLGtVYyk7aWYoUkQobCwyMDYpKXtmPUpEKGwsMjcpO2Z0ZChmLHIuZS5hLHIuZS5iKTtkc2QoZixyKX19Zm9yKHE9R3RiKGEuYSwwKTtxLmIhPXEuZC5jOyl7cD1KRChVdGIocSksNjUpO2Q9SkQoV01iKHAsa1VjKSw4NSk7aWYoZCl7Yj1wLmE7Yz1oQ2QoZCk7Vm1kKGIsYyl9fXU9aC1qKyhtLmIrbS5jKTtnPWktaysobS5kK20uYSk7eWRiKExEKGtzZChlLChMZ2QoKSxEZmQpKSkpfHxtbmQoZSx1LGcsZmFsc2UsZmFsc2UpO21zZChlLFZlZCx1LShtLmIrbS5jKSk7bXNkKGUsVWVkLGctKG0uZCttLmEpKX0KZnVuY3Rpb24gJFFiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2I9MDtmb3IoZj1uZXcgcm1iKGEuYi5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZiksMTk0KTtkLmI9MDtkLmM9MH1aUWIoYSwwKTtZUWIoYSxhLmcpO0VSYihhLmMpO0lSYihhLmMpO2M9KFRnZCgpLFBnZCk7R1JiKEFSYihGUmIoR1JiKEFSYihGUmIoR1JiKEZSYihhLmMsYykpLFdnZChjKSkpKSxjKSkpO0ZSYihhLmMsUGdkKTtiUmIoYSxhLmcpO2NSYihhLDApO2RSYihhLDApO2VSYihhLDEpO1pRYihhLDEpO1lRYihhLGEuZCk7RVJiKGEuYyk7Zm9yKGc9bmV3IHJtYihhLmIuYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGcpLDE5NCk7Yis9JHduZC5NYXRoLmFicyhkLmMpfWZvcihoPW5ldyBybWIoYS5iLmEpO2guYTxoLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihoKSwxOTQpO2QuYj0wO2QuYz0wfWM9U2dkO0dSYihBUmIoRlJiKEdSYihBUmIoRlJiKEdSYihJUmIoRlJiKGEuYyxjKSkpLFdnZChjKSkpKSxjKSkpO0ZSYihhLmMsUGdkKTtiUmIoYSxhLmQpO2NSYihhLDEpO2RSYihhLDEpO2VSYihhLDApO0lSYihhLmMpO2ZvcihlPW5ldyBybWIoYS5iLmEpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxOTQpO2IrPSR3bmQuTWF0aC5hYnMoZC5jKX1yZXR1cm4gYn0KZnVuY3Rpb24gTjJiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtjPUpEKFdNYihhLChCd2MoKSxFdmMpKSwxMDApO2c9YS5mO2Y9YS5kO2g9Zy5hK2YuYitmLmM7aT0wLWYuZC1hLmMuYjtrPWcuYitmLmQrZi5hLWEuYy5iO2o9bmV3IFVsYjtsPW5ldyBVbGI7Zm9yKGU9bmV3IHJtYihiKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksOSk7c3dpdGNoKGMuZyl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6RDJiKGQpO2JyZWFrO2Nhc2UgNDptPUpEKFdNYihkLEN2YyksOCk7bj0hbT8wOm0uYTtkLm4uYT1oKkJlYihNRChXTWIoZCwoSXFjKCksdHFjKSkpKS1uO2NZYihkLHRydWUsZmFsc2UpO2JyZWFrO2Nhc2UgNTpvPUpEKFdNYihkLEN2YyksOCk7cD0hbz8wOm8uYTtkLm4uYT1CZWIoTUQoV01iKGQsKElxYygpLHRxYykpKSktcDtjWWIoZCx0cnVlLGZhbHNlKTtnLmE9JHduZC5NYXRoLm1heChnLmEsZC5uLmErZC5vLmEvMik7fXN3aXRjaChKRChXTWIoZCwoSXFjKCksVHBjKSksNjQpLmcpe2Nhc2UgMTpkLm4uYj1pO1lDYihqLmMsZCk7YnJlYWs7Y2FzZSAzOmQubi5iPWs7WUNiKGwuYyxkKTt9fXN3aXRjaChjLmcpe2Nhc2UgMTpjYXNlIDI6RjJiKGosYSk7RjJiKGwsYSk7YnJlYWs7Y2FzZSAzOkwyYihqLGEpO0wyYihsLGEpO319CmZ1bmN0aW9uIHk2YihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2MuU2coJ0xhYmVsIGR1bW15IHN3aXRjaGluZycsMSk7ZD1KRChXTWIoYiwoQndjKCksdXVjKSksMjMxKTtsNmIoYik7ZT12NmIoYixkKTthLmE9U0MoYUUsUnNlLDMwLGIuYi5jLmxlbmd0aCwxNSwxKTtmb3IoaD0oTm1jKCksV0MoT0MoTVYsMSksRXJlLDIzMSwwLFtKbWMsTG1jLEltYyxLbWMsTW1jLEhtY10pKSxrPTAsbj1oLmxlbmd0aDtrPG47KytrKXtmPWhba107aWYoKGY9PU1tY3x8Zj09SG1jfHxmPT1LbWMpJiYhSkQocnJiKGUuYSxmKT9lLmJbZi5nXTpudWxsLDE1KS5kYygpKXtvNmIoYSxiKTticmVha319Zm9yKGk9V0MoT0MoTVYsMSksRXJlLDIzMSwwLFtKbWMsTG1jLEltYyxLbWMsTW1jLEhtY10pLGw9MCxvPWkubGVuZ3RoO2w8bzsrK2wpe2Y9aVtsXTtmPT1NbWN8fGY9PUhtY3x8Zj09S21jfHx6NmIoYSxKRChycmIoZS5hLGYpP2UuYltmLmddOm51bGwsMTUpKX1mb3IoZz1XQyhPQyhNViwxKSxFcmUsMjMxLDAsW0ptYyxMbWMsSW1jLEttYyxNbWMsSG1jXSksaj0wLG09Zy5sZW5ndGg7ajxtOysrail7Zj1nW2pdOyhmPT1NbWN8fGY9PUhtY3x8Zj09S21jKSYmejZiKGEsSkQocnJiKGUuYSxmKT9lLmJbZi5nXTpudWxsLDE1KSl9YS5hPW51bGw7Yy5UZygpfQpmdW5jdGlvbiBPb2UoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGs7aj1iO2lmKGouYj09bnVsbHx8YS5iPT1udWxsKXJldHVybjtRb2UoYSk7Tm9lKGEpO1FvZShqKTtOb2Uoaik7Yz1TQyhjRSxpc2UsMzAsYS5iLmxlbmd0aCtqLmIubGVuZ3RoLDE1LDEpO2s9MDtkPTA7Zz0wO3doaWxlKGQ8YS5iLmxlbmd0aCYmZzxqLmIubGVuZ3RoKXtlPWEuYltkXTtmPWEuYltkKzFdO2g9ai5iW2ddO2k9ai5iW2crMV07aWYoZjxoKXtkKz0yfWVsc2UgaWYoZj49aCYmZTw9aSl7aWYoaDw9ZSYmZjw9aSl7Y1trKytdPWU7Y1trKytdPWY7ZCs9Mn1lbHNlIGlmKGg8PWUpe2NbaysrXT1lO2NbaysrXT1pO2EuYltkXT1pKzE7Zys9Mn1lbHNlIGlmKGY8PWkpe2NbaysrXT1oO2NbaysrXT1mO2QrPTJ9ZWxzZXtjW2srK109aDtjW2srK109aTthLmJbZF09aSsxfX1lbHNlIGlmKGk8ZSl7Zys9Mn1lbHNle3Rocm93IHNjYihuZXcgcXooJ1Rva2VuI2ludGVyc2VjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWycrYS5iW2RdKycsJythLmJbZCsxXSsnXSAmIFsnK2ouYltnXSsnLCcrai5iW2crMV0rJ10nKSl9fXdoaWxlKGQ8YS5iLmxlbmd0aCl7Y1trKytdPWEuYltkKytdO2NbaysrXT1hLmJbZCsrXX1hLmI9U0MoY0UsaXNlLDMwLGssMTUsMSk7JGdiKGMsMCxhLmIsMCxrKX0KZnVuY3Rpb24gX1FiKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2I9bmV3IFVsYjthLmc9bmV3IFVsYjthLmQ9bmV3IFVsYjtmb3IoZz1uZXcgbWpiKChuZXcgZGpiKGEuZi5iKSkuYSk7Zy5iOyl7Zj1ramIoZyk7SWxiKGIsSkQoSkQoZi5rZCgpLDQ3KS5iLDgyKSk7VWdkKEpEKGYuamQoKSw1ODYpLnlmKCkpP0lsYihhLmQsSkQoZi5rZCgpLDQ3KSk6SWxiKGEuZyxKRChmLmtkKCksNDcpKX1ZUWIoYSxhLmQpO1lRYihhLGEuZyk7YS5jPW5ldyBPUmIoYS5iKTtNUmIoYS5jLChKUWIoKSxJUWIpKTtiUmIoYSxhLmQpO2JSYihhLGEuZyk7S2xiKGIsYS5jLmEuYik7YS5lPW5ldyBFZGQoS3NlLEtzZSk7YS5hPW5ldyBFZGQoTHNlLExzZSk7Zm9yKGQ9bmV3IHJtYihiKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksODIpO2EuZS5hPSR3bmQuTWF0aC5taW4oYS5lLmEsYy5nLmMpO2EuZS5iPSR3bmQuTWF0aC5taW4oYS5lLmIsYy5nLmQpO2EuYS5hPSR3bmQuTWF0aC5tYXgoYS5hLmEsYy5nLmMrYy5nLmIpO2EuYS5iPSR3bmQuTWF0aC5tYXgoYS5hLmIsYy5nLmQrYy5nLmEpfUxSYihhLmMsbmV3IGlSYik7aD0wO2Rve2U9JFFiKGEpOysraH13aGlsZSgoaDwyfHxlPktyZSkmJmg8MTApO0xSYihhLmMsbmV3IGxSYik7JFFiKGEpO0hSYihhLmMpO0tRYihhLmYpfQpmdW5jdGlvbiBiRWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO3N3aXRjaChhLmsuZyl7Y2FzZSAxOmQ9SkQoV01iKGEsKElxYygpLGtxYykpLDE4KTtjPUpEKFdNYihkLGxxYyksNzcpOyFjPyhjPW5ldyBSZGQpOnlkYihMRChXTWIoZCx4cWMpKSkmJihjPVZkZChjKSk7aj1KRChXTWIoYSxmcWMpLDExKTtpZihqKXtrPUtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtqLmkubixqLm4sai5hXSkpO2lmKGI8PWsuYSl7cmV0dXJuIGsuYn1EdGIoYyxrLGMuYSxjLmEuYSl9bD1KRChXTWIoYSxncWMpLDExKTtpZihsKXttPUtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtsLmkubixsLm4sbC5hXSkpO2lmKG0uYTw9Yil7cmV0dXJuIG0uYn1EdGIoYyxtLGMuYy5iLGMuYyl9aWYoYy5iPj0yKXtpPUd0YihjLDApO2c9SkQoVXRiKGkpLDgpO2g9SkQoVXRiKGkpLDgpO3doaWxlKGguYTxiJiZpLmIhPWkuZC5jKXtnPWg7aD1KRChVdGIoaSksOCl9cmV0dXJuIGcuYisoYi1nLmEpLyhoLmEtZy5hKSooaC5iLWcuYil9YnJlYWs7Y2FzZSAzOmY9SkQoV01iKEpEKE1sYihhLmosMCksMTEpLChJcWMoKSxrcWMpKSwxMSk7ZT1mLmk7c3dpdGNoKGYuai5nKXtjYXNlIDE6cmV0dXJuIGUubi5iO2Nhc2UgMzpyZXR1cm4gZS5uLmIrZS5vLmI7fX1yZXR1cm4galliKGEpLmJ9CmZ1bmN0aW9uIFFkYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsO2ZvcihnPW5ldyBybWIoYS5kLmIpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwyNSk7Zm9yKGk9bmV3IHJtYihmLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSw5KTtpZih5ZGIoTEQoV01iKGgsKEJ3YygpLFV0YykpKSkpe2lmKCFjcihlWWIoaCkpKXtkPUpEKGFyKGVZYihoKSksMTgpO2s9ZC5jLmk7az09aCYmKGs9ZC5kLmkpO2w9bmV3IHhvZChrLEJkZChvZGQoaC5uKSxrLm4pKTtRaWIoYS5iLGgsbCk7Y29udGludWV9fWU9bmV3IGdkZChoLm4uYS1oLmQuYixoLm4uYi1oLmQuZCxoLm8uYStoLmQuYitoLmQuYyxoLm8uYitoLmQuZCtoLmQuYSk7Yj1sRWIob0ViKG1FYihuRWIobmV3IHBFYixoKSxlKSx5ZGMpLGEuYSk7ZkViKGdFYihoRWIobmV3IGlFYixXQyhPQyhMTSwxKSxOcWUsNjAsMCxbYl0pKSxiKSxhLmEpO2o9bmV3IGJGYjtRaWIoYS5lLGIsaik7Yz1HcihuZXcgZXMoSXIoaFliKGgpLmEuSmMoKSxuZXcgZXIpKSktR3IobmV3IGVzKElyKGtZYihoKS5hLkpjKCksbmV3IGVyKSkpO2M8MD9fRWIoaix0cnVlLChUZ2QoKSxQZ2QpKTpjPjAmJl9FYihqLHRydWUsKFRnZCgpLFFnZCkpO2guaz09KERZYigpLHdZYikmJmFGYihqKTtRaWIoYS5mLGgsYil9fX0KZnVuY3Rpb24gWTRjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscztqPUtzZTtrPUtzZTtoPUxzZTtpPUxzZTtmb3IobT1uZXcgcm1iKGIuaSk7bS5hPG0uYy5jLmxlbmd0aDspe2w9SkQocG1iKG0pLDY4KTtlPUpEKEpEKE5pYihhLmcsbC5hKSw0NykuYiwyNyk7ZnRkKGUsbC5iLmMsbC5iLmQpO2o9JHduZC5NYXRoLm1pbihqLGUuaSk7az0kd25kLk1hdGgubWluKGssZS5qKTtoPSR3bmQuTWF0aC5tYXgoaCxlLmkrZS5nKTtpPSR3bmQuTWF0aC5tYXgoaSxlLmorZS5mKX1uPUpEKGtzZChhLmMsKEQ2YygpLHU2YykpLDEwNyk7bW5kKGEuYyxoLWorKG4uYituLmMpLGktaysobi5kK24uYSksdHJ1ZSx0cnVlKTtxbmQoYS5jLC1qK24uYiwtaytuLmQpO2ZvcihkPW5ldyBDSGQoWXdkKGEuYykpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSw4NSk7Zz1oQ2QoYyk7bz1pQ2QoYyk7cT1qQ2QoYyk7cD1uZXcgRWRkKG8uaStvLmcvMixvLmorby5mLzIpO2Y9bmV3IEVkZChxLmkrcS5nLzIscS5qK3EuZi8yKTtyPUJkZChuZXcgRWRkKGYuYSxmLmIpLHApO0xjZChyLG8uZyxvLmYpO21kZChwLHIpO3M9QmRkKG5ldyBFZGQocC5hLHAuYiksZik7TGNkKHMscS5nLHEuZik7bWRkKGYscyk7cHVkKGcscC5hLHAuYik7aXVkKGcsZi5hLGYuYil9fQpmdW5jdGlvbiBoOGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbDtpPXRydWU7ZT0wO2o9YS5nW2IucF07az1iLm8uYithLm87Yz1hLmRbYi5wXVsyXTtSbGIoYS5iLGosamZiKEpEKE1sYihhLmIsaiksMTcpLmEtMStjKSk7UmxiKGEuYyxqLEJlYihNRChNbGIoYS5jLGopKSktaytjKmEuZik7KytqO2lmKGo+PWEuail7KythLmo7SWxiKGEuYixqZmIoMSkpO0lsYihhLmMsayl9ZWxzZXtkPWEuZFtiLnBdWzFdO1JsYihhLmIsaixqZmIoSkQoTWxiKGEuYixqKSwxNykuYSsxLWQpKTtSbGIoYS5jLGosQmViKE1EKE1sYihhLmMsaikpKStrLWQqYS5mKX0oYS5yPT0oZHljKCksWXhjKSYmKEpEKE1sYihhLmIsaiksMTcpLmE+YS5rfHxKRChNbGIoYS5iLGotMSksMTcpLmE+YS5rKXx8YS5yPT1feGMmJihCZWIoTUQoTWxiKGEuYyxqKSkpPmEubnx8QmViKE1EKE1sYihhLmMsai0xKSkpPmEubikpJiYoaT1mYWxzZSk7Zm9yKGc9bmV3IGVzKElyKGhZYihiKS5hLkpjKCksbmV3IGVyKSk7Y3MoZyk7KXtmPUpEKGRzKGcpLDE4KTtoPWYuYy5pO2lmKGEuZ1toLnBdPT1qKXtsPWg4YihhLGgpO2U9ZStKRChsLmEsMTcpLmE7aT1pJiZ5ZGIoTEQobC5iKSl9fWEuZ1tiLnBdPWo7ZT1lK2EuZFtiLnBdWzBdO3JldHVybiBuZXcgeG9kKGpmYihlKSwoeGRiKCksaT90cnVlOmZhbHNlKSl9CmZ1bmN0aW9uIGlnYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdztpZihtPWEuY1tiXSxuPWEuY1tjXSwobz1KRChXTWIobSwoSXFjKCksYXFjKSksMTUpLCEhbyYmby5nYygpIT0wJiZvLkdjKG4pKXx8KHA9bS5rIT0oRFliKCkseVliKSYmbi5rIT15WWIscT1KRChXTWIobSxfcGMpLDkpLHI9SkQoV01iKG4sX3BjKSw5KSxzPXEhPXIsdD0hIXEmJnEhPW18fCEhciYmciE9bix1PWpnYyhtLChSamQoKSx4amQpKSx2PWpnYyhuLE9qZCksdD10fChqZ2MobSxPamQpfHxqZ2Mobix4amQpKSx3PXQmJnN8fHV8fHYscCYmdyl8fG0uaz09KERZYigpLEJZYikmJm4uaz09QVlifHxuLms9PShEWWIoKSxCWWIpJiZtLms9PUFZYil7cmV0dXJuIGZhbHNlfWs9YS5jW2JdO2Y9YS5jW2NdO2U9bUdjKGEuZSxrLGYsKFJqZCgpLFFqZCkpO2k9bUdjKGEuaSxrLGYsd2pkKTtfZmMoYS5mLGssZik7aj1LZmMoYS5iLGssZikrSkQoZS5hLDE3KS5hK0pEKGkuYSwxNykuYSthLmYuZDtoPUtmYyhhLmIsZixrKStKRChlLmIsMTcpLmErSkQoaS5iLDE3KS5hK2EuZi5iO2lmKGEuYSl7bD1KRChXTWIoayxrcWMpLDExKTtnPUpEKFdNYihmLGtxYyksMTEpO2Q9a0djKGEuZyxsLGcpO2orPUpEKGQuYSwxNykuYTtoKz1KRChkLmIsMTcpLmF9cmV0dXJuIGo+aH0KZnVuY3Rpb24gbVFiKGEsYil7dmFyIGMsZCxlLGYsZztjPUJlYihNRChXTWIoYiwoQndjKCksV3ZjKSkpKTtjPDImJlpNYihiLFd2YywyKTtkPUpEKFdNYihiLHJ1YyksODYpO2Q9PShUZ2QoKSxSZ2QpJiZaTWIoYixydWMsc1hiKGIpKTtlPUpEKFdNYihiLFF2YyksMTcpO2UuYT09MD9aTWIoYiwoSXFjKCksdnFjKSxuZXcgQ3ZiKTpaTWIoYiwoSXFjKCksdnFjKSxuZXcgRHZiKGUuYSkpO2Y9TEQoV01iKGIsanZjKSk7Zj09bnVsbCYmWk1iKGIsanZjLCh4ZGIoKSxYRChXTWIoYix5dWMpKT09PVhEKCh4aGQoKSx0aGQpKT90cnVlOmZhbHNlKSk7RUJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIuYSwxNikpLG5ldyBwUWIoYSkpO0VCYihEQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYi5iLDE2KSksbmV3IHJRYiksbmV3IHRRYihhKSk7Zz1uZXcganpjKGIpO1pNYihiLChJcWMoKSxBcWMpLGcpO2Y5YyhhLmEpO2k5YyhhLmEsKENRYigpLHhRYiksSkQoV01iKGIscHVjKSwxODgpKTtpOWMoYS5hLHlRYixKRChXTWIoYiwkdWMpLDE4OCkpO2k5YyhhLmEselFiLEpEKFdNYihiLG91YyksMTg4KSk7aTljKGEuYSxBUWIsSkQoV01iKGIsbnZjKSwxODgpKTtpOWMoYS5hLEJRYixOTGMoSkQoV01iKGIseXVjKSwyMjApKSk7YzljKGEuYSxsUWIoYikpO1pNYihiLHVxYyxkOWMoYS5hLGIpKX0KZnVuY3Rpb24gVk5jKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7bD1uZXcgSXJiO2c9bmV3IFVsYjtUTmMoYSxjLGEuZC55ZygpLGcsbCk7VE5jKGEsZCxhLmQuemcoKSxnLGwpO2EuYj0wLjIqKHA9VU5jKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihnLDE2KSksbmV3ICROYykpLHE9VU5jKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihnLDE2KSksbmV3IGFPYykpLCR3bmQuTWF0aC5taW4ocCxxKSk7Zj0wO2ZvcihoPTA7aDxnLmMubGVuZ3RoLTE7aCsrKXtpPShzRGIoaCxnLmMubGVuZ3RoKSxKRChnLmNbaF0sMTE2KSk7Zm9yKG89aCsxO288Zy5jLmxlbmd0aDtvKyspe2YrPVNOYyhhLGksKHNEYihvLGcuYy5sZW5ndGgpLEpEKGcuY1tvXSwxMTYpKSl9fW09SkQoV01iKGIsKElxYygpLHZxYykpLDIzMyk7Zj49MiYmKHI9eE1jKGcsdHJ1ZSxtKSwhYS5lJiYoYS5lPW5ldyBBTmMoYSkpLHdOYyhhLmUscixnLGEuYiksdW5kZWZpbmVkKTtYTmMoZyxtKTtaTmMoZyk7bj0tMTtmb3Ioaz1uZXcgcm1iKGcpO2suYTxrLmMuYy5sZW5ndGg7KXtqPUpEKHBtYihrKSwxMTYpO2lmKCR3bmQuTWF0aC5hYnMoai5zLWouYyk8RnVlKXtjb250aW51ZX1uPSR3bmQuTWF0aC5tYXgobixqLm8pO2EuZC53ZyhqLGUsYS5jKX1hLmQuYS5hLiRiKCk7cmV0dXJuIG4rMX0KZnVuY3Rpb24gdldjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7bD1KRChEcigoZz1HdGIoKG5ldyBnUmMoYikpLmEuZCwwKSxuZXcgalJjKGcpKSksMzkpO289bD9KRChXTWIobCwodFVjKCksZVVjKSksMzkpOm51bGw7ZT0xO3doaWxlKCEhbCYmISFvKXtpPTA7dT0wO2M9bDtkPW87Zm9yKGg9MDtoPGU7aCsrKXtjPWNSYyhjKTtkPWNSYyhkKTt1Kz1CZWIoTUQoV01iKGMsKHRVYygpLGpVYykpKSk7aSs9QmViKE1EKFdNYihkLGpVYykpKX10PUJlYihNRChXTWIobywodFVjKCksbVVjKSkpKTtzPUJlYihNRChXTWIobCxtVWMpKSk7bT14V2MoYSxsLG8pO249dCtpK2EuYittLXMtdTtpZigwPG4pe2o9YjtrPTA7d2hpbGUoISFqJiZqIT1kKXsrK2s7aj1KRChXTWIoaixmVWMpLDM5KX1pZihqKXtyPW4vaztqPWI7d2hpbGUoaiE9ZCl7cT1CZWIoTUQoV01iKGosbVVjKSkpK247Wk1iKGosbVVjLHEpO3A9QmViKE1EKFdNYihqLGpVYykpKStuO1pNYihqLGpVYyxwKTtuLT1yO2o9SkQoV01iKGosZlVjKSwzOSl9fWVsc2V7cmV0dXJufX0rK2U7bC5kLmI9PTA/KGw9blFjKG5ldyBnUmMoYiksZSkpOihsPUpEKERyKChmPUd0YigobmV3IGdSYyhsKSkuYS5kLDApLG5ldyBqUmMoZikpKSwzOSkpO289bD9KRChXTWIobCxlVWMpLDM5KTpudWxsfX0KZnVuY3Rpb24gZTZiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87Yi5TZygnTGFiZWwgZHVtbXkgcmVtb3ZhbCcsMSk7ZD1CZWIoTUQoV01iKGEsKEJ3YygpLFl2YykpKSk7ZT1CZWIoTUQoV01iKGEsYXdjKSkpO2o9SkQoV01iKGEscnVjKSw4Nik7Zm9yKGk9bmV3IHJtYihhLmIpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSwyNSk7bD1uZXcgQWpiKGguYSwwKTt3aGlsZShsLmI8bC5kLmdjKCkpe2s9KHJEYihsLmI8bC5kLmdjKCkpLEpEKGwuZC5YYihsLmM9bC5iKyspLDkpKTtpZihrLms9PShEWWIoKSx4WWIpKXttPUpEKFdNYihrLChJcWMoKSxrcWMpKSwxOCk7bz1CZWIoTUQoV01iKG0sRnVjKSkpO2c9WEQoV01iKGssY3FjKSk9PT1YRCgob2lkKCksbGlkKSk7Yz1uZXcgRmRkKGsubik7ZyYmKGMuYis9bytkKTtmPW5ldyBFZGQoay5vLmEsay5vLmIrKGsuaz09eFliJiYhUEJiKEJCYihKRChXTWIoayx3cWMpLDE1KS5NYygpLG5ldyBEemIobmV3IEpZYikpKS56ZCgod0JiKCksdkJiKSk/MDotby1kKSk7bj1KRChXTWIoayx3cWMpLDE1KTtqPT0oVGdkKCksU2dkKXx8aj09T2dkP2Q2YihuLGMsZSxmLGcsaik6YzZiKG4sYyxlLGYpO0tsYihtLmIsbik7VTdiKGssWEQoV01iKGEseXVjKSk9PT1YRCgoeGhkKCksdWhkKSkpO3RqYihsKX19fWIuVGcoKX0KZnVuY3Rpb24gQndkKGEpe2lmKGEucSlyZXR1cm47YS5xPXRydWU7YS5wPU52ZChhLDApO2EuYT1OdmQoYSwxKTtTdmQoYS5hLDApO2EuZj1OdmQoYSwyKTtTdmQoYS5mLDEpO012ZChhLmYsMik7YS5uPU52ZChhLDMpO012ZChhLm4sMyk7TXZkKGEubiw0KTtNdmQoYS5uLDUpO012ZChhLm4sNik7YS5nPU52ZChhLDQpO1N2ZChhLmcsNyk7TXZkKGEuZyw4KTthLmM9TnZkKGEsNSk7U3ZkKGEuYyw3KTtTdmQoYS5jLDgpO2EuaT1OdmQoYSw2KTtTdmQoYS5pLDkpO1N2ZChhLmksMTApO1N2ZChhLmksMTEpO1N2ZChhLmksMTIpO012ZChhLmksMTMpO2Euaj1OdmQoYSw3KTtTdmQoYS5qLDkpO2EuZD1OdmQoYSw4KTtTdmQoYS5kLDMpO1N2ZChhLmQsNCk7U3ZkKGEuZCw1KTtTdmQoYS5kLDYpO012ZChhLmQsNyk7TXZkKGEuZCw4KTtNdmQoYS5kLDkpO012ZChhLmQsMTApO2EuYj1OdmQoYSw5KTtNdmQoYS5iLDApO012ZChhLmIsMSk7YS5lPU52ZChhLDEwKTtNdmQoYS5lLDEpO012ZChhLmUsMik7TXZkKGEuZSwzKTtNdmQoYS5lLDQpO1N2ZChhLmUsNSk7U3ZkKGEuZSw2KTtTdmQoYS5lLDcpO1N2ZChhLmUsOCk7U3ZkKGEuZSw5KTtTdmQoYS5lLDEwKTtNdmQoYS5lLDExKTthLms9TnZkKGEsMTEpO012ZChhLmssMCk7TXZkKGEuaywxKTthLm89T3ZkKGEsMTIpO2Eucz1PdmQoYSwxMyl9CmZ1bmN0aW9uIE1RYihhLGIpe2IuZGMoKSYmVFJiKGEuaix0cnVlLHRydWUsdHJ1ZSx0cnVlKTtwYihiLChSamQoKSxEamQpKSYmVFJiKGEuaix0cnVlLHRydWUsdHJ1ZSxmYWxzZSk7cGIoYix5amQpJiZUUmIoYS5qLGZhbHNlLHRydWUsdHJ1ZSx0cnVlKTtwYihiLExqZCkmJlRSYihhLmosdHJ1ZSx0cnVlLGZhbHNlLHRydWUpO3BiKGIsTmpkKSYmVFJiKGEuaix0cnVlLGZhbHNlLHRydWUsdHJ1ZSk7cGIoYixFamQpJiZUUmIoYS5qLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSk7cGIoYix6amQpJiZUUmIoYS5qLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7cGIoYixNamQpJiZUUmIoYS5qLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSk7cGIoYixLamQpJiZUUmIoYS5qLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7cGIoYixJamQpJiZUUmIoYS5qLHRydWUsdHJ1ZSx0cnVlLHRydWUpO3BiKGIsQmpkKSYmVFJiKGEuaix0cnVlLHRydWUsdHJ1ZSx0cnVlKTtwYihiLElqZCkmJlRSYihhLmosdHJ1ZSx0cnVlLHRydWUsdHJ1ZSk7cGIoYixBamQpJiZUUmIoYS5qLHRydWUsdHJ1ZSx0cnVlLHRydWUpO3BiKGIsSmpkKSYmVFJiKGEuaix0cnVlLHRydWUsdHJ1ZSx0cnVlKTtwYihiLEhqZCkmJlRSYihhLmosdHJ1ZSx0cnVlLHRydWUsdHJ1ZSk7cGIoYixHamQpJiZUUmIoYS5qLHRydWUsdHJ1ZSx0cnVlLHRydWUpfQpmdW5jdGlvbiBYdWQoYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbTtpZihiLmEhPWMuZ2soKSl7dGhyb3cgc2NiKG5ldyBUZWIoV0NlK2MudmUoKStYQ2UpKX1lPWhhZSgoR2ZlKCksRWZlKSxjKS5HbCgpO2lmKGUpe3JldHVybiBlLmdrKCkuc2koKS5uaShlLGQpfWg9aGFlKEVmZSxjKS5JbCgpO2lmKGgpe2lmKGQ9PW51bGwpe3JldHVybiBudWxsfWk9SkQoZCwxNSk7aWYoaS5kYygpKXtyZXR1cm4gJyd9bT1uZXcgSGdiO2ZvcihnPWkuSmMoKTtnLk9iKCk7KXtmPWcuUGIoKTtFZ2IobSxoLmdrKCkuc2koKS5uaShoLGYpKTttLmErPScgJ31yZXR1cm4gaGRiKG0sbS5hLmxlbmd0aC0xKX1sPWhhZShFZmUsYykuSmwoKTtpZighbC5kYygpKXtmb3Ioaz1sLkpjKCk7ay5PYigpOyl7aj1KRChrLlBiKCksMTU1KTtpZihqLmNrKGQpKXt0cnl7bT1qLmdrKCkuc2koKS5uaShqLGQpO2lmKG0hPW51bGwpe3JldHVybiBtfX1jYXRjaChhKXthPXJjYihhKTtpZighUkQoYSwxMDMpKXRocm93IHNjYihhKX19fXRocm93IHNjYihuZXcgVGViKCJJbnZhbGlkIHZhbHVlOiAnIitkKyInIGZvciBkYXRhdHlwZSA6IitjLnZlKCkpKX1KRChjLDgyNikubGsoKTtyZXR1cm4gZD09bnVsbD9udWxsOlJEKGQsMTc5KT8nJytKRChkLDE3OSkuYTpyYihkKT09aEs/dlpkKFJ1ZFswXSxKRChkLDIwNSkpOmFkYihkKX0KZnVuY3Rpb24gY0VjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7Yi5TZygnSW50ZXJhY3RpdmUgY3Jvc3NpbmcgbWluaW1pemF0aW9uJywxKTtnPTA7Zm9yKGY9bmV3IHJtYihhLmIpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihmKSwyNSk7ZC5wPWcrK31tPW1XYihhKTtxPW5ldyBMRmMobS5sZW5ndGgpO0JIYyhuZXcgZG5iKFdDKE9DKEVYLDEpLE5xZSwyMjksMCxbcV0pKSxtKTtwPTA7Zz0wO2ZvcihlPW5ldyBybWIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjUpO2M9MDtsPTA7Zm9yKGs9bmV3IHJtYihkLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihrKSw5KTtpZihpLm4uYT4wKXtjKz1pLm4uYStpLm8uYS8yOysrbH1mb3Iobz1uZXcgcm1iKGkuaik7by5hPG8uYy5jLmxlbmd0aDspe249SkQocG1iKG8pLDExKTtuLnA9cCsrfX1sPjAmJihjLz1sKTtyPVNDKGFFLFJzZSwzMCxkLmEuYy5sZW5ndGgsMTUsMSk7aD0wO2ZvcihqPW5ldyBybWIoZC5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksOSk7aS5wPWgrKztyW2kucF09YkVjKGksYyk7aS5rPT0oRFliKCkseVliKSYmWk1iKGksKElxYygpLG1xYykscltpLnBdKX1wbmIoKTtTbGIoZC5hLG5ldyBoRWMocikpO3pDYyhxLG0sZyx0cnVlKTsrK2d9Yi5UZygpfQpmdW5jdGlvbiBhUGMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGs7aj1uZXcgTXRiO2g9bmV3IE10Yjtmb3IoZj1uZXcgcm1iKGEpO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihmKSwxMzIpO2Qudj0wO2Qubj1kLmkuYy5sZW5ndGg7ZC51PWQudC5jLmxlbmd0aDtkLm49PTAmJihEdGIoaixkLGouYy5iLGouYyksdHJ1ZSk7ZC51PT0wJiZkLnIuYS5nYygpPT0wJiYoRHRiKGgsZCxoLmMuYixoLmMpLHRydWUpfWc9LTE7d2hpbGUoai5iIT0wKXtkPUpEKGd1KGosMCksMTMyKTtmb3IoYz1uZXcgcm1iKGQudCk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI3MCk7az1iLmI7ay52PSR3bmQuTWF0aC5tYXgoay52LGQudisxKTtnPSR3bmQuTWF0aC5tYXgoZyxrLnYpOy0tay5uO2subj09MCYmKER0YihqLGssai5jLmIsai5jKSx0cnVlKX19aWYoZz4tMSl7Zm9yKGU9R3RiKGgsMCk7ZS5iIT1lLmQuYzspe2Q9SkQoVXRiKGUpLDEzMik7ZC52PWd9d2hpbGUoaC5iIT0wKXtkPUpEKGd1KGgsMCksMTMyKTtmb3IoYz1uZXcgcm1iKGQuaSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI3MCk7aT1iLmE7aWYoaS5yLmEuZ2MoKSE9MCl7Y29udGludWV9aS52PSR3bmQuTWF0aC5taW4oaS52LGQudi0xKTstLWkudTtpLnU9PTAmJihEdGIoaCxpLGguYy5iLGguYyksdHJ1ZSl9fX19CmZ1bmN0aW9uIFpOYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosaztqPW5ldyBVbGI7aD1uZXcgVWxiO2ZvcihnPW5ldyBybWIoYSk7Zy5hPGcuYy5jLmxlbmd0aDspe2U9SkQocG1iKGcpLDExNik7U01jKGUsZS5mLmMubGVuZ3RoKTtUTWMoZSxlLmsuYy5sZW5ndGgpO2UuZD09MCYmKFlDYihqLmMsZSksdHJ1ZSk7ZS5pPT0wJiZlLmUuYj09MCYmKFlDYihoLmMsZSksdHJ1ZSl9ZD0tMTt3aGlsZShqLmMubGVuZ3RoIT0wKXtlPUpEKE9sYihqLDApLDExNik7Zm9yKGM9bmV3IHJtYihlLmspO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwxMzMpO2s9Yi5iO1VNYyhrLCR3bmQuTWF0aC5tYXgoay5vLGUubysxKSk7ZD0kd25kLk1hdGgubWF4KGQsay5vKTtTTWMoayxrLmQtMSk7ay5kPT0wJiYoWUNiKGouYyxrKSx0cnVlKX19aWYoZD4tMSl7Zm9yKGY9bmV3IHJtYihoKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMTE2KTtlLm89ZH13aGlsZShoLmMubGVuZ3RoIT0wKXtlPUpEKE9sYihoLDApLDExNik7Zm9yKGM9bmV3IHJtYihlLmYpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSwxMzMpO2k9Yi5hO2lmKGkuZS5iPjApe2NvbnRpbnVlfVVNYyhpLCR3bmQuTWF0aC5taW4oaS5vLGUuby0xKSk7VE1jKGksaS5pLTEpO2kuaT09MCYmKFlDYihoLmMsaSksdHJ1ZSl9fX19CmZ1bmN0aW9uIFljZChhLGIsYyxkLGUpe3ZhciBmLGcsaCxpO2k9S3NlO2c9ZmFsc2U7aD1UY2QoYSxCZGQobmV3IEVkZChiLmEsYi5iKSxhKSxtZGQobmV3IEVkZChjLmEsYy5iKSxlKSxCZGQobmV3IEVkZChkLmEsZC5iKSxjKSk7Zj0hIWgmJiEoJHduZC5NYXRoLmFicyhoLmEtYS5hKTw9RkJlJiYkd25kLk1hdGguYWJzKGguYi1hLmIpPD1GQmV8fCR3bmQuTWF0aC5hYnMoaC5hLWIuYSk8PUZCZSYmJHduZC5NYXRoLmFicyhoLmItYi5iKTw9RkJlKTtoPVRjZChhLEJkZChuZXcgRWRkKGIuYSxiLmIpLGEpLGMsZSk7ISFoJiYoKCR3bmQuTWF0aC5hYnMoaC5hLWEuYSk8PUZCZSYmJHduZC5NYXRoLmFicyhoLmItYS5iKTw9RkJlKT09KCR3bmQuTWF0aC5hYnMoaC5hLWIuYSk8PUZCZSYmJHduZC5NYXRoLmFicyhoLmItYi5iKTw9RkJlKXx8Zj8oaT0kd25kLk1hdGgubWluKGksc2RkKEJkZChoLGMpKSkpOihnPXRydWUpKTtoPVRjZChhLEJkZChuZXcgRWRkKGIuYSxiLmIpLGEpLGQsZSk7ISFoJiYoZ3x8KCR3bmQuTWF0aC5hYnMoaC5hLWEuYSk8PUZCZSYmJHduZC5NYXRoLmFicyhoLmItYS5iKTw9RkJlKT09KCR3bmQuTWF0aC5hYnMoaC5hLWIuYSk8PUZCZSYmJHduZC5NYXRoLmFicyhoLmItYi5iKTw9RkJlKXx8ZikmJihpPSR3bmQuTWF0aC5taW4oaSxzZGQoQmRkKGgsZCkpKSk7cmV0dXJuIGl9CmZ1bmN0aW9uIG9QYihhKXtSYWQoYSxuZXcgY2FkKGphZChuYWQoa2FkKG1hZChsYWQobmV3IHBhZCxudmUpLG92ZSksIk1pbmltaXplcyB0aGUgc3RyZXNzIHdpdGhpbiBhIGxheW91dCB1c2luZyBzdHJlc3MgbWFqb3JpemF0aW9uLiBTdHJlc3MgZXhpc3RzIGlmIHRoZSBldWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBhIHBhaXIgb2Ygbm9kZXMgZG9lc24ndCBtYXRjaCB0aGVpciBncmFwaCB0aGVvcmV0aWMgZGlzdGFuY2UsIHRoYXQgaXMsIHRoZSBzaG9ydGVzdCBwYXRoIGJldHdlZW4gdGhlIHR3byBub2Rlcy4gVGhlIG1ldGhvZCBhbGxvd3MgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIGVkZ2UgbGVuZ3Rocy4iKSxuZXcgclBiKSxLdWUpKSk7UGFkKGEsbnZlLFN1ZSxKQmQoZlBiKSk7UGFkKGEsbnZlLFV1ZSwoeGRiKCksdHJ1ZSkpO1BhZChhLG52ZSxZdWUsSkJkKGlQYikpO1BhZChhLG52ZSxwdmUsSkJkKGpQYikpO1BhZChhLG52ZSxYdWUsSkJkKGtQYikpO1BhZChhLG52ZSxadWUsSkJkKGhQYikpO1BhZChhLG52ZSxWdWUsSkJkKGxQYikpO1BhZChhLG52ZSwkdWUsSkJkKG1QYikpO1BhZChhLG52ZSxpdmUsSkJkKGVQYikpO1BhZChhLG52ZSxrdmUsSkJkKGNQYikpO1BhZChhLG52ZSxsdmUsSkJkKGRQYikpO1BhZChhLG52ZSxtdmUsSkJkKGdQYikpO1BhZChhLG52ZSxqdmUsSkJkKGJQYikpfQpmdW5jdGlvbiBuRGMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtiPW51bGw7Zm9yKGQ9bmV3IHJtYihhKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMjM4KTtCZWIoc0RjKGMuZyxjLmRbMF0pLmEpO2MuYj1udWxsO2lmKCEhYy5lJiZjLmUuZ2MoKT4wJiZjLmM9PTApeyFiJiYoYj1uZXcgVWxiKTtZQ2IoYi5jLGMpfX1pZihiKXt3aGlsZShiLmMubGVuZ3RoIT0wKXtjPUpEKE9sYihiLDApLDIzOCk7aWYoISFjLmImJmMuYi5jLmxlbmd0aD4wKXtmb3IoZj0oIWMuYiYmKGMuYj1uZXcgVWxiKSxuZXcgcm1iKGMuYikpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwyMzgpO2lmKERlYihzRGMoZS5nLGUuZFswXSkuYSk9PURlYihzRGMoYy5nLGMuZFswXSkuYSkpe2lmKE5sYihhLGUsMCk+TmxiKGEsYywwKSl7cmV0dXJuIG5ldyB4b2QoZSxjKX19ZWxzZSBpZihCZWIoc0RjKGUuZyxlLmRbMF0pLmEpPkJlYihzRGMoYy5nLGMuZFswXSkuYSkpe3JldHVybiBuZXcgeG9kKGUsYyl9fX1mb3IoaD0oIWMuZSYmKGMuZT1uZXcgVWxiKSxjLmUpLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMjM4KTtpPSghZy5iJiYoZy5iPW5ldyBVbGIpLGcuYik7dkRiKDAsaS5jLmxlbmd0aCk7V0NiKGkuYywwLGMpO2cuYz09aS5jLmxlbmd0aCYmKFlDYihiLmMsZyksdHJ1ZSl9fX1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gUm9lKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2lmKGIuZT09NSl7T29lKGEsYik7cmV0dXJufWo9YjtpZihqLmI9PW51bGx8fGEuYj09bnVsbClyZXR1cm47UW9lKGEpO05vZShhKTtRb2Uoaik7Tm9lKGopO2M9U0MoY0UsaXNlLDMwLGEuYi5sZW5ndGgrai5iLmxlbmd0aCwxNSwxKTtrPTA7ZD0wO2c9MDt3aGlsZShkPGEuYi5sZW5ndGgmJmc8ai5iLmxlbmd0aCl7ZT1hLmJbZF07Zj1hLmJbZCsxXTtoPWouYltnXTtpPWouYltnKzFdO2lmKGY8aCl7Y1trKytdPWEuYltkKytdO2NbaysrXT1hLmJbZCsrXX1lbHNlIGlmKGY+PWgmJmU8PWkpe2lmKGg8PWUmJmY8PWkpe2QrPTJ9ZWxzZSBpZihoPD1lKXthLmJbZF09aSsxO2crPTJ9ZWxzZSBpZihmPD1pKXtjW2srK109ZTtjW2srK109aC0xO2QrPTJ9ZWxzZXtjW2srK109ZTtjW2srK109aC0xO2EuYltkXT1pKzE7Zys9Mn19ZWxzZSBpZihpPGUpe2crPTJ9ZWxzZXt0aHJvdyBzY2IobmV3IHF6KCdUb2tlbiNzdWJ0cmFjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWycrYS5iW2RdKycsJythLmJbZCsxXSsnXSAtIFsnK2ouYltnXSsnLCcrai5iW2crMV0rJ10nKSl9fXdoaWxlKGQ8YS5iLmxlbmd0aCl7Y1trKytdPWEuYltkKytdO2NbaysrXT1hLmJbZCsrXX1hLmI9U0MoY0UsaXNlLDMwLGssMTUsMSk7JGdiKGMsMCxhLmIsMCxrKX0KZnVuY3Rpb24gaEljKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7Zm9yKGQ9bmV3IHJtYihhLmUuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDI1KTtmb3IoZj1uZXcgcm1iKGMuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO249YS5pW2UucF07aj1uLmEuZTtpPW4uZC5lO2Uubi5iPWo7cj1pLWotZS5vLmI7Yj1FSWMoZSk7bT0oenhjKCksKCFlLnE/KHBuYigpLHBuYigpLG5uYik6ZS5xKS5fYigoQndjKCksbHZjKSk/KGw9SkQoV01iKGUsbHZjKSwyMDMpKToobD1KRChXTWIoZ1liKGUpLG12YyksMjAzKSksbCk7YiYmKG09PXd4Y3x8bT09dnhjKSYmKGUuby5iKz1yKTtpZihiJiYobT09eXhjfHxtPT13eGN8fG09PXZ4Yykpe2ZvcihwPW5ldyBybWIoZS5qKTtwLmE8cC5jLmMubGVuZ3RoOyl7bz1KRChwbWIocCksMTEpO2lmKChSamQoKSxCamQpLkdjKG8uaikpe2s9SkQoTmliKGEuayxvKSwxMjMpO28ubi5iPWsuZS1qfX1mb3IoaD1uZXcgcm1iKGUuYik7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDcyKTtxPUpEKFdNYihlLGd2YyksMjIpO3EuR2MoKEVpZCgpLEJpZCkpPyhnLm4uYis9cik6cS5HYyhDaWQpJiYoZy5uLmIrPXIvMil9KG09PXd4Y3x8bT09dnhjKSYmbFliKGUsKFJqZCgpLE9qZCkpLkljKG5ldyBCSmMocikpfX19fQpmdW5jdGlvbiBESmIoYSl7dmFyIGIsYyxkLGUsZixnLGg7aWYoYS5BLmRjKCkpe3JldHVybn1pZihhLkEuR2MoKHlrZCgpLHdrZCkpKXtKRChLcWIoYS5iLChSamQoKSx4amQpKSwxMjYpLms9dHJ1ZTtKRChLcWIoYS5iLE9qZCksMTI2KS5rPXRydWU7Yj1hLnEhPShhamQoKSxZaWQpJiZhLnEhPVhpZDtfR2IoSkQoS3FiKGEuYix3amQpLDEyNiksYik7X0diKEpEKEtxYihhLmIsUWpkKSwxMjYpLGIpO19HYihhLmcsYik7aWYoYS5BLkdjKHhrZCkpe0pEKEtxYihhLmIseGpkKSwxMjYpLmo9dHJ1ZTtKRChLcWIoYS5iLE9qZCksMTI2KS5qPXRydWU7SkQoS3FiKGEuYix3amQpLDEyNikuaz10cnVlO0pEKEtxYihhLmIsUWpkKSwxMjYpLms9dHJ1ZTthLmcuaz10cnVlfX1pZihhLkEuR2ModmtkKSl7YS5hLmo9dHJ1ZTthLmEuaz10cnVlO2EuZy5qPXRydWU7YS5nLms9dHJ1ZTtoPWEuQi5HYygoTmtkKCksSmtkKSk7Zm9yKGU9eUpiKCksZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdO2M9SkQoS3FiKGEuaSxkKSwzMTUpO2lmKGMpe2lmKHVKYihkKSl7Yy5qPXRydWU7Yy5rPXRydWV9ZWxzZXtjLmo9IWg7Yy5rPSFofX19fWlmKGEuQS5HYyh1a2QpJiZhLkIuR2MoKE5rZCgpLElrZCkpKXthLmcuaj10cnVlO2EuZy5qPXRydWU7aWYoIWEuYS5qKXthLmEuaj10cnVlO2EuYS5rPXRydWU7YS5hLmU9dHJ1ZX19fQpmdW5jdGlvbiB0SWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2o9bmV3IFVsYjtmb3IoaT1uZXcgcm1iKGIuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2c9SkQocG1iKGkpLDkpO2ZvcihtPWxZYihnLChSamQoKSx3amQpKS5KYygpO20uT2IoKTspe2w9SkQobS5QYigpLDExKTtmb3IoZT1uZXcgcm1iKGwuZyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE4KTtpZighZVdiKGQpJiZkLmMuaS5jPT1kLmQuaS5jfHxlV2IoZCl8fGQuZC5pLmMhPWMpe2NvbnRpbnVlfVlDYihqLmMsZCl9fX1mb3IoaD1kdihjLmEpLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksOSk7Zm9yKG09bFliKGcsKFJqZCgpLFFqZCkpLkpjKCk7bS5PYigpOyl7bD1KRChtLlBiKCksMTEpO2ZvcihlPW5ldyBybWIobC5lKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTgpO2lmKCFlV2IoZCkmJmQuYy5pLmM9PWQuZC5pLmN8fGVXYihkKXx8ZC5jLmkuYyE9Yil7Y29udGludWV9aWYoai5jLmxlbmd0aCE9MCl7az1uZXcgQWpiKGosai5jLmxlbmd0aCk7Zj0ockRiKGsuYj4wKSxKRChrLmEuWGIoay5jPS0tay5iKSwxOCkpO3doaWxlKGYhPWQmJmsuYj4wKXthLmFbZi5wXT10cnVlO2EuYVtkLnBdPXRydWU7Zj0ockRiKGsuYj4wKSxKRChrLmEuWGIoay5jPS0tay5iKSwxOCkpfWsuYj4wJiZ0amIoayl9fX19fQpmdW5jdGlvbiBTQ2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2lmKGMpe2Q9LTE7az1uZXcgQWpiKGIsMCk7d2hpbGUoay5iPGsuZC5nYygpKXtoPShyRGIoay5iPGsuZC5nYygpKSxKRChrLmQuWGIoay5jPWsuYisrKSw5KSk7bD1hLmNbaC5jLnBdW2gucF0uYTtpZihsPT1udWxsKXtnPWQrMTtmPW5ldyBBamIoYixrLmIpO3doaWxlKGYuYjxmLmQuZ2MoKSl7bT1XQ2MoYSwockRiKGYuYjxmLmQuZ2MoKSksSkQoZi5kLlhiKGYuYz1mLmIrKyksOSkpKS5hO2lmKG0hPW51bGwpe2c9KHREYihtKSxtKTticmVha319bD0oZCtnKS8yO2EuY1toLmMucF1baC5wXS5hPWw7YS5jW2guYy5wXVtoLnBdLmQ9KHREYihsKSxsKTthLmNbaC5jLnBdW2gucF0uYj0xfWQ9KHREYihsKSxsKX19ZWxzZXtlPTA7Zm9yKGo9bmV3IHJtYihiKTtqLmE8ai5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaiksOSk7YS5jW2guYy5wXVtoLnBdLmEhPW51bGwmJihlPSR3bmQuTWF0aC5tYXgoZSxCZWIoYS5jW2guYy5wXVtoLnBdLmEpKSl9ZSs9Mjtmb3IoaT1uZXcgcm1iKGIpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSw5KTtpZihhLmNbaC5jLnBdW2gucF0uYT09bnVsbCl7bD15dmIoYS5pLDI0KSpodGUqZS0xO2EuY1toLmMucF1baC5wXS5hPWw7YS5jW2guYy5wXVtoLnBdLmQ9bDthLmNbaC5jLnBdW2gucF0uYj0xfX19fQpmdW5jdGlvbiBmZmMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtO2ZvcihlPW5ldyBybWIoYS5hLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDYwKTtmb3IoaT1kLmMuSmMoKTtpLk9iKCk7KXtoPUpEKGkuUGIoKSw2MCk7aWYoZC5hPT1oLmEpe2NvbnRpbnVlfVVnZChhLmEuZCk/KGw9YS5hLmcuZGYoZCxoKSk6KGw9YS5hLmcuZWYoZCxoKSk7Zj1kLmIuYStkLmQuYitsLWguYi5hO2Y9JHduZC5NYXRoLmNlaWwoZik7Zj0kd25kLk1hdGgubWF4KDAsZik7aWYob2RjKGQsaCkpe2c9cEdiKG5ldyByR2IsYS5kKTtqPVlEKCR3bmQuTWF0aC5jZWlsKGguYi5hLWQuYi5hKSk7Yj1qLShoLmIuYS1kLmIuYSk7az1uZGMoZCkuYTtjPWQ7aWYoIWspe2s9bmRjKGgpLmE7Yj0tYjtjPWh9aWYoayl7Yy5iLmEtPWI7ay5uLmEtPWJ9REZiKEdGYihGRmIoSEZiKEVGYihuZXcgSUZiLCR3bmQuTWF0aC5tYXgoMCxqKSksMSksZyksYS5jW2QuYS5kXSkpO0RGYihHRmIoRkZiKEhGYihFRmIobmV3IElGYiwkd25kLk1hdGgubWF4KDAsLWopKSwxKSxnKSxhLmNbaC5hLmRdKSl9ZWxzZXttPTE7KFJEKGQuZywxNTIpJiZSRChoLmcsOSl8fFJEKGguZywxNTIpJiZSRChkLmcsOSkpJiYobT0yKTtERmIoR0ZiKEZGYihIRmIoRUZiKG5ldyBJRmIsWUQoZikpLG0pLGEuY1tkLmEuZF0pLGEuY1toLmEuZF0pKX19fX0KZnVuY3Rpb24gTnhiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuO2lmKCFhLmIpe3JldHVybiBmYWxzZX1nPW51bGw7bT1udWxsO2k9bmV3IHR5YihudWxsLG51bGwpO2U9MTtpLmFbMV09YS5iO2w9aTt3aGlsZShsLmFbZV0pe2o9ZTtoPW07bT1sO2w9bC5hW2VdO2Q9YS5hLkxlKGIsbC5kKTtlPWQ8MD8wOjE7ZD09MCYmKCFjLmN8fHR1YihsLmUsYy5kKSkmJihnPWwpO2lmKCEoISFsJiZsLmIpJiYhSnhiKGwuYVtlXSkpe2lmKEp4YihsLmFbMS1lXSkpe209bS5hW2pdPVF4YihsLGUpfWVsc2UgaWYoIUp4YihsLmFbMS1lXSkpe249bS5hWzEtal07aWYobil7aWYoIUp4YihuLmFbMS1qXSkmJiFKeGIobi5hW2pdKSl7bS5iPWZhbHNlO24uYj10cnVlO2wuYj10cnVlfWVsc2V7Zj1oLmFbMV09PW0/MTowO0p4YihuLmFbal0pPyhoLmFbZl09UHhiKG0saikpOkp4YihuLmFbMS1qXSkmJihoLmFbZl09UXhiKG0saikpO2wuYj1oLmFbZl0uYj10cnVlO2guYVtmXS5hWzBdLmI9ZmFsc2U7aC5hW2ZdLmFbMV0uYj1mYWxzZX19fX19aWYoZyl7Yy5iPXRydWU7Yy5kPWcuZTtpZihsIT1nKXtrPW5ldyB0eWIobC5kLGwuZSk7T3hiKGEsaSxnLGspO209PWcmJihtPWspfW0uYVttLmFbMV09PWw/MTowXT1sLmFbIWwuYVswXT8xOjBdOy0tYS5jfWEuYj1pLmFbMV07ISFhLmImJihhLmIuYj1mYWxzZSk7cmV0dXJuIGMuYn0KZnVuY3Rpb24gcEEoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDshYyYmKGM9X0EoYi5xLmdldFRpbWV6b25lT2Zmc2V0KCkpKTtlPShiLnEuZ2V0VGltZXpvbmVPZmZzZXQoKS1jLmEpKjYwMDAwO2g9bmV3IG9CKHRjYih6Y2IoYi5xLmdldFRpbWUoKSksZSkpO2k9aDtpZihoLnEuZ2V0VGltZXpvbmVPZmZzZXQoKSE9Yi5xLmdldFRpbWV6b25lT2Zmc2V0KCkpe2U+MD8oZS09ODY0MDAwMDApOihlKz04NjQwMDAwMCk7aT1uZXcgb0IodGNiKHpjYihiLnEuZ2V0VGltZSgpKSxlKSl9az1uZXcgVmdiO2o9YS5hLmxlbmd0aDtmb3IoZj0wO2Y8ajspe2Q9X2ZiKGEuYSxmKTtpZihkPj05NyYmZDw9MTIyfHxkPj02NSYmZDw9OTApe2ZvcihnPWYrMTtnPGomJl9mYihhLmEsZyk9PWQ7KytnKTtEQShrLGQsZy1mLGgsaSxjKTtmPWd9ZWxzZSBpZihkPT0zOSl7KytmO2lmKGY8aiYmX2ZiKGEuYSxmKT09Mzkpe2suYSs9IiciOysrZjtjb250aW51ZX1sPWZhbHNlO3doaWxlKCFsKXtnPWY7d2hpbGUoZzxqJiZfZmIoYS5hLGcpIT0zOSl7KytnfWlmKGc+PWope3Rocm93IHNjYihuZXcgVGViKCJNaXNzaW5nIHRyYWlsaW5nICciKSl9ZysxPGomJl9mYihhLmEsZysxKT09Mzk/KytnOihsPXRydWUpO1FnYihrLHFnYihhLmEsZixnKSk7Zj1nKzF9fWVsc2V7ay5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGQpOysrZn19cmV0dXJuIGsuYX0KZnVuY3Rpb24gdjZkKCl7a05kKCQ1LG5ldyBiN2QpO2tOZChaNSxuZXcgSTdkKTtrTmQoXzUsbmV3IG44ZCk7a05kKGE2LG5ldyBGOGQpO2tOZChjNixuZXcgSThkKTtrTmQoZTYsbmV3IEw4ZCk7a05kKGQ2LG5ldyBPOGQpO2tOZChmNixuZXcgUjhkKTtrTmQoaDYsbmV3IHo2ZCk7a05kKGk2LG5ldyBDNmQpO2tOZChqNixuZXcgRjZkKTtrTmQoazYsbmV3IEk2ZCk7a05kKGw2LG5ldyBMNmQpO2tOZChtNixuZXcgTzZkKTtrTmQobjYsbmV3IFI2ZCk7a05kKHE2LG5ldyBVNmQpO2tOZChzNixuZXcgWDZkKTtrTmQodTcsbmV3ICQ2ZCk7a05kKGc2LG5ldyBlN2QpO2tOZChyNixuZXcgaDdkKTtrTmQoR0ksbmV3IGs3ZCk7a05kKE9DKCRELDEpLG5ldyBuN2QpO2tOZChISSxuZXcgcTdkKTtrTmQoSUksbmV3IHQ3ZCk7a05kKGhLLG5ldyB3N2QpO2tOZChMNSxuZXcgejdkKTtrTmQoTEksbmV3IEM3ZCk7a05kKFE1LG5ldyBGN2QpO2tOZChSNSxuZXcgTDdkKTtrTmQoTGFiLG5ldyBPN2QpO2tOZChCYWIsbmV3IFI3ZCk7a05kKFFJLG5ldyBVN2QpO2tOZChVSSxuZXcgWDdkKTtrTmQoS0ksbmV3ICQ3ZCk7a05kKFhJLG5ldyBiOGQpO2tOZChNSyxuZXcgZThkKTtrTmQoczksbmV3IGg4ZCk7a05kKHI5LG5ldyBrOGQpO2tOZChjSixuZXcgcThkKTtrTmQoaEosbmV3IHQ4ZCk7a05kKFU1LG5ldyB3OGQpO2tOZChTNSxuZXcgejhkKX0KZnVuY3Rpb24gem1iKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2lmKGE9PW51bGwpe3JldHVybiBScWV9aT1iLmEueWMoYSxiKTtpZihpIT1udWxsKXtyZXR1cm4gJ1suLi5dJ31jPW5ldyB4eGIoTHFlLCdbJywnXScpO2ZvcihlPWEsZj0wLGc9ZS5sZW5ndGg7ZjxnOysrZil7ZD1lW2ZdO2lmKGQhPW51bGwmJihyYihkKS5pJjQpIT0wKXtpZihBcnJheS5pc0FycmF5KGQpJiYoaz1QQyhkKSwhKGs+PTE0JiZrPD0xNikpKXtpZihiLmEuX2IoZCkpeyFjLmE/KGMuYT1uZXcgV2diKGMuZCkpOlFnYihjLmEsYy5iKTtOZ2IoYy5hLCdbLi4uXScpfWVsc2V7aD1LRChkKTtqPW5ldyBTcmIoYik7dXhiKGMsem1iKGgsaikpfX1lbHNlIFJEKGQsMTgzKT91eGIoYywkbWIoSkQoZCwxODMpKSk6UkQoZCwxOTUpP3V4YihjLFRtYihKRChkLDE5NSkpKTpSRChkLDIwMSk/dXhiKGMsVW1iKEpEKGQsMjAxKSkpOlJEKGQsMjA1Nyk/dXhiKGMsWm1iKEpEKGQsMjA1NykpKTpSRChkLDU0KT91eGIoYyxYbWIoSkQoZCw1NCkpKTpSRChkLDU3OSk/dXhiKGMsWW1iKEpEKGQsNTc5KSkpOlJEKGQsODI1KT91eGIoYyxXbWIoSkQoZCw4MjUpKSk6UkQoZCwxMDgpJiZ1eGIoYyxWbWIoSkQoZCwxMDgpKSl9ZWxzZXt1eGIoYyxkPT1udWxsP1JxZTphZGIoZCkpfX1yZXR1cm4gIWMuYT9jLmM6Yy5lLmxlbmd0aD09MD9jLmEuYTpjLmEuYSsoJycrYy5lKX0KZnVuY3Rpb24gZFRkKGEsYil7dmFyIGMsZCxlLGY7Zj1hLkY7aWYoYj09bnVsbCl7YS5GPW51bGw7VFNkKGEsbnVsbCl9ZWxzZXthLkY9KHREYihiKSxiKTtkPWhnYihiLHdnYig2MCkpO2lmKGQhPS0xKXtlPSh6RGIoMCxkLGIubGVuZ3RoKSxiLnN1YnN0cigwLGQpKTtoZ2IoYix3Z2IoNDYpKT09LTEmJiFjZ2IoZSxEcWUpJiYhY2diKGUsZUZlKSYmIWNnYihlLGZGZSkmJiFjZ2IoZSxnRmUpJiYhY2diKGUsaEZlKSYmIWNnYihlLGlGZSkmJiFjZ2IoZSxqRmUpJiYhY2diKGUsa0ZlKSYmKGU9bEZlKTtjPWtnYihiLHdnYig2MikpO2MhPS0xJiYoZSs9JycrKEFEYihjKzEsYi5sZW5ndGgrMSksYi5zdWJzdHIoYysxKSkpO1RTZChhLGUpfWVsc2V7ZT1iO2lmKGhnYihiLHdnYig0NikpPT0tMSl7ZD1oZ2IoYix3Z2IoOTEpKTtkIT0tMSYmKGU9KHpEYigwLGQsYi5sZW5ndGgpLGIuc3Vic3RyKDAsZCkpKTtpZighY2diKGUsRHFlKSYmIWNnYihlLGVGZSkmJiFjZ2IoZSxmRmUpJiYhY2diKGUsZ0ZlKSYmIWNnYihlLGhGZSkmJiFjZ2IoZSxpRmUpJiYhY2diKGUsakZlKSYmIWNnYihlLGtGZSkpe2U9bEZlO2QhPS0xJiYoZSs9JycrKEFEYihkLGIubGVuZ3RoKzEpLGIuc3Vic3RyKGQpKSl9ZWxzZXtlPWJ9fVRTZChhLGUpO2U9PWImJihhLkY9YS5EKX19KGEuRGImNCkhPTAmJihhLkRiJjEpPT0wJiZXcGQoYSxuZXcgZ19kKGEsMSw1LGYsYikpfQpmdW5jdGlvbiBSVWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbzthLmM9YS5lO289TEQoV01iKGIsKEJ3YygpLFJ2YykpKTtuPW89PW51bGx8fCh0RGIobyksbyk7Zj1KRChXTWIoYiwoSXFjKCksV3BjKSksMjIpLkdjKCgkb2MoKSxUb2MpKTtlPUpEKFdNYihiLEV2YyksMTAwKTtjPSEoZT09KGFqZCgpLFdpZCl8fGU9PVlpZHx8ZT09WGlkKTtpZihuJiYoY3x8IWYpKXtmb3IobD1uZXcgcm1iKGIuYSk7bC5hPGwuYy5jLmxlbmd0aDspe2o9SkQocG1iKGwpLDkpO2oucD0wfW09bmV3IFVsYjtmb3Ioaz1uZXcgcm1iKGIuYSk7ay5hPGsuYy5jLmxlbmd0aDspe2o9SkQocG1iKGspLDkpO2Q9UVViKGEsaixudWxsKTtpZihkKXtpPW5ldyBuV2I7VU1iKGksYik7Wk1iKGksUXBjLEpEKGQuYiwyMikpO01YYihpLmQsYi5kKTtaTWIoaSxxdmMsbnVsbCk7Zm9yKGg9SkQoZC5hLDE1KS5KYygpO2guT2IoKTspe2c9SkQoaC5QYigpLDkpO0lsYihpLmEsZyk7Zy5hPWl9bS5FYyhpKX19ZiYmKFhEKFdNYihiLFl0YykpPT09WEQoKGNVYigpLCRUYikpPyhhLmM9YS5iKTpYRChXTWIoYixZdGMpKT09PVhEKGFVYik/KGEuYz1hLmQpOihhLmM9YS5hKSl9ZWxzZXttPW5ldyBkbmIoV0MoT0MoTVAsMSksQnZlLDM2LDAsW2JdKSl9WEQoV01iKGIsWXRjKSkhPT1YRCgoY1ViKCksYlViKSkmJihwbmIoKSxtLmdkKG5ldyBVVWIpKTtyZXR1cm4gbX0KZnVuY3Rpb24gdHFkKGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07aj1jLmxlbmd0aC0xO2k9KEFEYihqLGMubGVuZ3RoKSxjLmNoYXJDb2RlQXQoaikpO2lmKGk9PTkzKXtoPWhnYihjLHdnYig5MSkpO2lmKGg+PTApe2Y9eXFkKGIsKHpEYigxLGgsYy5sZW5ndGgpLGMuc3Vic3RyKDEsaC0xKSkpO2w9KHpEYihoKzEsaixjLmxlbmd0aCksYy5zdWJzdHIoaCsxLGotKGgrMSkpKTtyZXR1cm4gcnFkKGIsbCxmKX19ZWxzZXtkPS0xO1NkYj09bnVsbCYmKFNkYj1uZXcgUmVnRXhwKCdcXGQnKSk7aWYoU2RiLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpKSkpe2Q9bGdiKGMsd2diKDQ2KSxqLTEpO2lmKGQ+PTApe2U9SkQoanFkKGIsRHFkKGIsKHpEYigxLGQsYy5sZW5ndGgpLGMuc3Vic3RyKDEsZC0xKSkpLGZhbHNlKSw2MSk7az0wO3RyeXtrPUZkYigoQURiKGQrMSxjLmxlbmd0aCsxKSxjLnN1YnN0cihkKzEpKSxMcmUsSHFlKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDEzMCkpe2c9YTt0aHJvdyBzY2IobmV3IGtPZChnKSl9ZWxzZSB0aHJvdyBzY2IoYSl9aWYoazxlLmdjKCkpe209ZS5YYihrKTtSRChtLDc0KSYmKG09SkQobSw3NCkua2QoKSk7cmV0dXJuIEpEKG0sNTcpfX19aWYoZDwwKXtyZXR1cm4gSkQoanFkKGIsRHFkKGIsKEFEYigxLGMubGVuZ3RoKzEpLGMuc3Vic3RyKDEpKSksZmFsc2UpLDU3KX19cmV0dXJuIG51bGx9CmZ1bmN0aW9uIFc1YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7Yi5TZygnTGFiZWwgZHVtbXkgaW5zZXJ0aW9ucycsMSk7bD1uZXcgVWxiO2c9QmViKE1EKFdNYihhLChCd2MoKSxZdmMpKSkpO2o9QmViKE1EKFdNYihhLGF3YykpKTtrPUpEKFdNYihhLHJ1YyksODYpO2ZvcihuPW5ldyBybWIoYS5hKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1KRChwbWIobiksOSk7Zm9yKGY9bmV3IGVzKElyKGtZYihtKS5hLkpjKCksbmV3IGVyKSk7Y3MoZik7KXtlPUpEKGRzKGYpLDE4KTtpZihlLmMuaSE9ZS5kLmkmJlpxKGUuYixUNWIpKXtwPVg1YihlKTtvPWF2KGUuYi5jLmxlbmd0aCk7Yz1WNWIoYSxlLHAsbyk7WUNiKGwuYyxjKTtkPWMubztoPW5ldyBBamIoZS5iLDApO3doaWxlKGguYjxoLmQuZ2MoKSl7aT0ockRiKGguYjxoLmQuZ2MoKSksSkQoaC5kLlhiKGguYz1oLmIrKyksNzIpKTtpZihYRChXTWIoaSx3dWMpKT09PVhEKChuaGQoKSxraGQpKSl7aWYoaz09KFRnZCgpLFNnZCl8fGs9PU9nZCl7ZC5hKz1pLm8uYStqO2QuYj0kd25kLk1hdGgubWF4KGQuYixpLm8uYil9ZWxzZXtkLmE9JHduZC5NYXRoLm1heChkLmEsaS5vLmEpO2QuYis9aS5vLmIran1ZQ2Ioby5jLGkpO3RqYihoKX19aWYoaz09KFRnZCgpLFNnZCl8fGs9PU9nZCl7ZC5hLT1qO2QuYis9ZytwfWVsc2V7ZC5iKz1nLWorcH19fX1LbGIoYS5hLGwpO2IuVGcoKX0KZnVuY3Rpb24gSlpkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksajtqPWEuYzshYiYmKGI9eVpkKTthLmM9YjtpZigoYS5EYiY0KSE9MCYmKGEuRGImMSk9PTApe2k9bmV3IGdfZChhLDEsMixqLGEuYyk7IWM/KGM9aSk6Yy5raihpKX1pZihqIT1iKXtpZihSRChhLkNiLDI5MCkpe2lmKGEuRGI+PjE2PT0tMTApe2M9SkQoYS5DYiwyOTApLlZrKGIsYyl9ZWxzZSBpZihhLkRiPj4xNj09LTE1KXshYiYmKGI9KGNQZCgpLFJPZCkpOyFqJiYoaj0oY1BkKCksUk9kKSk7aWYoYS5DYi5VaCgpKXtpPW5ldyBpX2QoYS5DYiwxLDEzLGosYixBVWQoSl9kKEpEKGEuQ2IsNjIpKSxhKSxmYWxzZSk7IWM/KGM9aSk6Yy5raihpKX19fWVsc2UgaWYoUkQoYS5DYiw4OCkpe2lmKGEuRGI+PjE2PT0tMjMpe1JEKGIsODgpfHwoYj0oY1BkKCksVU9kKSk7UkQoaiw4OCl8fChqPShjUGQoKSxVT2QpKTtpZihhLkNiLlVoKCkpe2k9bmV3IGlfZChhLkNiLDEsMTAsaixiLEFVZChPVGQoSkQoYS5DYiwyOSkpLGEpLGZhbHNlKTshYz8oYz1pKTpjLmtqKGkpfX19ZWxzZSBpZihSRChhLkNiLDQ0Mykpe2g9SkQoYS5DYiw4MjkpO2c9KCFoLmImJihoLmI9bmV3IEs1ZChuZXcgRzVkKSksaC5iKTtmb3IoZj0oZD1uZXcgbWpiKChuZXcgZGpiKGcuYSkpLmEpLG5ldyBTNWQoZCkpO2YuYS5iOyl7ZT1KRChramIoZi5hKS5qZCgpLDg3KTtjPUpaZChlLEZaZChlLGgpLGMpfX19cmV0dXJuIGN9CmZ1bmN0aW9uIGkkYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07Zz15ZGIoTEQoa3NkKGEsKEJ3YygpLE51YykpKSk7bT1KRChrc2QoYSxIdmMpLDIyKTtpPWZhbHNlO2o9ZmFsc2U7bD1uZXcgQ0hkKCghYS5jJiYoYS5jPW5ldyBYMGQoQjMsYSw5LDkpKSxhLmMpKTt3aGlsZShsLmUhPWwuaS5nYygpJiYoIWl8fCFqKSl7Zj1KRChBSGQobCksMTI0KTtoPTA7Zm9yKGU9RGwoeWwoV0MoT0MoVkksMSksTnFlLDIwLDAsWyghZi5kJiYoZi5kPW5ldyByZWUoeDMsZiw4LDUpKSxmLmQpLCghZi5lJiYoZi5lPW5ldyByZWUoeDMsZiw3LDQpKSxmLmUpXSkpKTtjcyhlKTspe2Q9SkQoZHMoZSksODUpO2s9ZyYmU3RkKGQpJiZ5ZGIoTEQoa3NkKGQsT3VjKSkpO2M9eFVkKCghZC5iJiYoZC5iPW5ldyByZWUodjMsZCw0LDcpKSxkLmIpLGYpP2E9PVp3ZChfQmQoSkQobkRkKCghZC5jJiYoZC5jPW5ldyByZWUodjMsZCw1LDgpKSxkLmMpLDApLDg0KSkpOmE9PVp3ZChfQmQoSkQobkRkKCghZC5iJiYoZC5iPW5ldyByZWUodjMsZCw0LDcpKSxkLmIpLDApLDg0KSkpO2lmKGt8fGMpeysraDtpZihoPjEpe2JyZWFrfX19aD4wPyhpPXRydWUpOm0uR2MoKG9qZCgpLGtqZCkpJiYoIWYubiYmKGYubj1uZXcgWDBkKHozLGYsMSw3KSksZi5uKS5pPjAmJihpPXRydWUpO2g+MSYmKGo9dHJ1ZSl9aSYmYi5FYygoJG9jKCksVG9jKSk7aiYmYi5FYygoJG9jKCksVW9jKSl9CmZ1bmN0aW9uIGxuZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG07bT1KRChrc2QoYSwoTGdkKCksQmZkKSksMjIpO2lmKG0uZGMoKSl7cmV0dXJuIG51bGx9aD0wO2c9MDtpZihtLkdjKCh5a2QoKSx3a2QpKSl7az1KRChrc2QoYSxZZmQpLDEwMCk7ZD0yO2M9MjtlPTI7Zj0yO2I9IVp3ZChhKT9KRChrc2QoYSwkZWQpLDg2KTpKRChrc2QoWndkKGEpLCRlZCksODYpO2ZvcihqPW5ldyBDSGQoKCFhLmMmJihhLmM9bmV3IFgwZChCMyxhLDksOSkpLGEuYykpO2ouZSE9ai5pLmdjKCk7KXtpPUpEKEFIZChqKSwxMjQpO2w9SkQoa3NkKGksZGdkKSw2NCk7aWYobD09KFJqZCgpLFBqZCkpe2w9WW1kKGksYik7bXNkKGksZGdkLGwpfWlmKGs9PShhamQoKSxYaWQpKXtzd2l0Y2gobC5nKXtjYXNlIDE6ZD0kd25kLk1hdGgubWF4KGQsaS5pK2kuZyk7YnJlYWs7Y2FzZSAyOmM9JHduZC5NYXRoLm1heChjLGkuaitpLmYpO2JyZWFrO2Nhc2UgMzplPSR3bmQuTWF0aC5tYXgoZSxpLmkraS5nKTticmVhaztjYXNlIDQ6Zj0kd25kLk1hdGgubWF4KGYsaS5qK2kuZik7fX1lbHNle3N3aXRjaChsLmcpe2Nhc2UgMTpkKz1pLmcrMjticmVhaztjYXNlIDI6Yys9aS5mKzI7YnJlYWs7Y2FzZSAzOmUrPWkuZysyO2JyZWFrO2Nhc2UgNDpmKz1pLmYrMjt9fX1oPSR3bmQuTWF0aC5tYXgoZCxlKTtnPSR3bmQuTWF0aC5tYXgoYyxmKX1yZXR1cm4gbW5kKGEsaCxnLHRydWUsdHJ1ZSl9CmZ1bmN0aW9uIHpJYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7ZT1udWxsO2ZvcihkPW5ldyBybWIoYi5hKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksOSk7RUljKGMpPyhmPShoPXBHYihxR2IobmV3IHJHYixjKSxhLmYpLGk9cEdiKHFHYihuZXcgckdiLGMpLGEuZiksaj1uZXcgVUljKGMsdHJ1ZSxoLGkpLGs9Yy5vLmIsbD0oenhjKCksKCFjLnE/KHBuYigpLHBuYigpLG5uYik6Yy5xKS5fYigoQndjKCksbHZjKSk/KG09SkQoV01iKGMsbHZjKSwyMDMpKToobT1KRChXTWIoZ1liKGMpLG12YyksMjAzKSksbSksbj0xMDAwMCxsPT12eGMmJihuPTEpLG89REZiKEdGYihGRmIoRUZiKEhGYihuZXcgSUZiLG4pLFlEKCR3bmQuTWF0aC5jZWlsKGspKSksaCksaSkpLGw9PXd4YyYmTnJiKGEuZCxvKSxBSWMoYSxkdihsWWIoYywoUmpkKCksUWpkKSkpLGopLEFJYyhhLGxZYihjLHdqZCksaiksaikpOihmPShwPXBHYihxR2IobmV3IHJHYixjKSxhLmYpLEVCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYy5qLDE2KSksbmV3IGZKYyksbmV3IGhKYyhhLHApKSxuZXcgVUljKGMsZmFsc2UscCxwKSkpO2EuaVtjLnBdPWY7aWYoZSl7Zz1lLmMuZC5hK2V6YyhhLm4sZS5jLGMpK2MuZC5kO2UuYnx8KGcrPWUuYy5vLmIpO0RGYihHRmIoRkZiKEhGYihFRmIobmV3IElGYixZRCgkd25kLk1hdGguY2VpbChnKSkpLDApLGUuZCksZi5hKSl9ZT1mfX0KZnVuY3Rpb24gb2tjKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7cz1KRCh5QmIoT0JiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmQsMTYpKSxuZXcgc2tjKGMpKSxuZXcgdWtjKGMpKSxoQWIobmV3IHpBYixuZXcgeEFiLG5ldyBGQWIsV0MoT0MoSEwsMSksRXJlLDEzMSwwLFsobEFiKCksakFiKV0pKSksMTUpO2w9SHFlO2s9THJlO2ZvcihpPW5ldyBybWIoYi5iLmopO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSwxMSk7aWYoaC5qPT1jKXtsPSR3bmQuTWF0aC5taW4obCxoLnApO2s9JHduZC5NYXRoLm1heChrLGgucCl9fWlmKGw9PUhxZSl7Zm9yKGc9MDtnPHMuZ2MoKTtnKyspe3JnYyhKRChzLlhiKGcpLDEwNSksYyxnKX19ZWxzZXt0PVNDKGNFLGlzZSwzMCxlLmxlbmd0aCwxNSwxKTtIbWIodCx0Lmxlbmd0aCk7Zm9yKHI9cy5KYygpO3IuT2IoKTspe3E9SkQoci5QYigpLDEwNSk7Zj1KRChOaWIoYS5iLHEpLDE4Myk7aj0wO2ZvcihwPWw7cDw9aztwKyspe2ZbcF0mJihqPSR3bmQuTWF0aC5tYXgoaixkW3BdKSl9aWYocS5pKXtuPXEuaS5jO3U9bmV3IFFyYjtmb3IobT0wO208ZS5sZW5ndGg7bSsrKXtlW25dW21dJiZOcmIodSxqZmIodFttXSkpfXdoaWxlKE9yYih1LGpmYihqKSkpeysran19cmdjKHEsYyxqKTtmb3Iobz1sO288PWs7bysrKXtmW29dJiYoZFtvXT1qKzEpfSEhcS5pJiYodFtxLmkuY109ail9fX0KZnVuY3Rpb24gclViKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuO2Y9bmV3IERVYihiKTtsPW1VYihhLGIsZik7bj0kd25kLk1hdGgubWF4KEJlYihNRChXTWIoYiwoQndjKCksRnVjKSkpKSwxKTtmb3Ioaz1uZXcgcm1iKGwuYSk7ay5hPGsuYy5jLmxlbmd0aDspe2o9SkQocG1iKGspLDQ3KTtpPXFVYihKRChqLmEsOCksSkQoai5iLDgpLG4pO289dHJ1ZTtvPW8mdlViKGMsbmV3IEVkZChpLmMsaS5kKSk7bz1vJnZVYihjLGxkZChuZXcgRWRkKGkuYyxpLmQpLGkuYiwwKSk7bz1vJnZVYihjLGxkZChuZXcgRWRkKGkuYyxpLmQpLDAsaS5hKSk7byZ2VWIoYyxsZGQobmV3IEVkZChpLmMsaS5kKSxpLmIsaS5hKSl9bT1mLmQ7aD1xVWIoSkQobC5iLmEsOCksSkQobC5iLmIsOCksbik7aWYobT09KFJqZCgpLFFqZCl8fG09PXdqZCl7ZC5jW20uZ109JHduZC5NYXRoLm1pbihkLmNbbS5nXSxoLmQpO2QuYlttLmddPSR3bmQuTWF0aC5tYXgoZC5iW20uZ10saC5kK2guYSl9ZWxzZXtkLmNbbS5nXT0kd25kLk1hdGgubWluKGQuY1ttLmddLGguYyk7ZC5iW20uZ109JHduZC5NYXRoLm1heChkLmJbbS5nXSxoLmMraC5iKX1lPUxzZTtnPWYuYy5pLmQ7c3dpdGNoKG0uZyl7Y2FzZSA0OmU9Zy5jO2JyZWFrO2Nhc2UgMjplPWcuYjticmVhaztjYXNlIDE6ZT1nLmE7YnJlYWs7Y2FzZSAzOmU9Zy5kO31kLmFbbS5nXT0kd25kLk1hdGgubWF4KGQuYVttLmddLGUpO3JldHVybiBmfQpmdW5jdGlvbiBVJGIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG47Zj1KRChXTWIoYSwoSXFjKCksa3FjKSksODUpO2lmKCFmKXtyZXR1cm59ZD1hLmE7ZT1uZXcgRmRkKGMpO21kZChlLFkkYihhKSk7aWYoeFhiKGEuZC5pLGEuYy5pKSl7bT1hLmM7bD1LZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbbS5uLG0uYV0pKTtCZGQobCxjKX1lbHNle2w9V1liKGEuYyl9RHRiKGQsbCxkLmEsZC5hLmEpO249V1liKGEuZCk7V01iKGEsR3FjKSE9bnVsbCYmbWRkKG4sSkQoV01iKGEsR3FjKSw4KSk7RHRiKGQsbixkLmMuYixkLmMpO1BkZChkLGUpO2c9aENkKGYpO211ZChnLEpEKG5EZCgoIWYuYiYmKGYuYj1uZXcgcmVlKHYzLGYsNCw3KSksZi5iKSwwKSw4NCkpO251ZChnLEpEKG5EZCgoIWYuYyYmKGYuYz1uZXcgcmVlKHYzLGYsNSw4KSksZi5jKSwwKSw4NCkpO1ZtZChkLGcpO2ZvcihrPW5ldyBybWIoYS5iKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksNzIpO2g9SkQoV01iKGosa3FjKSwxNTMpO2d0ZChoLGouby5hKTtldGQoaCxqLm8uYik7ZnRkKGgsai5uLmErZS5hLGoubi5iK2UuYik7bXNkKGgsKGs2YigpLGo2YiksTEQoV01iKGosajZiKSkpfWk9SkQoV01iKGEsKEJ3YygpLFJ1YykpLDc3KTtpZihpKXtQZGQoaSxlKTttc2QoZixSdWMsaSl9ZWxzZXttc2QoZixSdWMsbnVsbCl9Yj09KHhoZCgpLHZoZCk/bXNkKGYseXVjLHZoZCk6bXNkKGYseXVjLG51bGwpfQpmdW5jdGlvbiBQSGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzO249Yi5jLmxlbmd0aDttPTA7Zm9yKGw9bmV3IHJtYihhLmIpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihsKSwyNSk7cj1rLmE7aWYoci5jLmxlbmd0aD09MCl7Y29udGludWV9cT1uZXcgcm1iKHIpO2o9MDtzPW51bGw7ZT1KRChwbWIocSksOSk7Zj1udWxsO3doaWxlKGUpe2Y9SkQoTWxiKGIsZS5wKSwyNjEpO2lmKGYuYz49MCl7aT1udWxsO2g9bmV3IEFqYihrLmEsaisxKTt3aGlsZShoLmI8aC5kLmdjKCkpe2c9KHJEYihoLmI8aC5kLmdjKCkpLEpEKGguZC5YYihoLmM9aC5iKyspLDkpKTtpPUpEKE1sYihiLGcucCksMjYxKTtpZihpLmQ9PWYuZCYmaS5jPGYuYyl7YnJlYWt9ZWxzZXtpPW51bGx9fWlmKGkpe2lmKHMpe1JsYihkLGUucCxqZmIoSkQoTWxiKGQsZS5wKSwxNykuYS0xKSk7SkQoTWxiKGMscy5wKSwxNSkuS2MoZil9Zj1fSGMoZixlLG4rKyk7WUNiKGIuYyxmKTtJbGIoYyxuZXcgVWxiKTtpZihzKXtKRChNbGIoYyxzLnApLDE1KS5FYyhmKTtJbGIoZCxqZmIoMSkpfWVsc2V7SWxiKGQsamZiKDApKX19fW89bnVsbDtpZihxLmE8cS5jLmMubGVuZ3RoKXtvPUpEKHBtYihxKSw5KTtwPUpEKE1sYihiLG8ucCksMjYxKTtKRChNbGIoYyxlLnApLDE1KS5FYyhwKTtSbGIoZCxvLnAsamZiKEpEKE1sYihkLG8ucCksMTcpLmErMSkpfWYuZD1tO2YuYz1qKys7cz1lO2U9b30rK219fQpmdW5jdGlvbiBnMWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRDtoPUpEKE5pYihiLmMsYSksNDU0KTtzPWIuYS5jO2k9Yi5hLmMrYi5hLmI7Qz1oLmY7RD1oLmE7Zz1DPEQ7cD1uZXcgRWRkKHMsQyk7dD1uZXcgRWRkKGksRCk7ZT0ocytpKS8yO3E9bmV3IEVkZChlLEMpO3U9bmV3IEVkZChlLEQpO2Y9aDFiKGEsQyxEKTt3PVdZYihiLkIpO0E9bmV3IEVkZChlLGYpO0I9V1liKGIuRCk7Yz1KY2QoV0MoT0MoYjIsMSksaHJlLDgsMCxbdyxBLEJdKSk7bj1mYWxzZTtyPWIuQi5pO2lmKCEhciYmISFyLmMmJmguZCl7aj1nJiZyLnA8ci5jLmEuYy5sZW5ndGgtMXx8IWcmJnIucD4wO2lmKGope2lmKGope209ci5wO2c/KyttOi0tbTtsPUpEKE1sYihyLmMuYSxtKSw5KTtkPWoxYihsKTtuPSEoUmNkKGQsdyxjWzBdKXx8TmNkKGQsdyxjWzBdKSl9fWVsc2V7bj10cnVlfX1vPWZhbHNlO3Y9Yi5ELmk7aWYoISF2JiYhIXYuYyYmaC5lKXtrPWcmJnYucD4wfHwhZyYmdi5wPHYuYy5hLmMubGVuZ3RoLTE7aWYoayl7bT12LnA7Zz8tLW06KyttO2w9SkQoTWxiKHYuYy5hLG0pLDkpO2Q9ajFiKGwpO289IShSY2QoZCxjWzBdLEIpfHxOY2QoZCxjWzBdLEIpKX1lbHNle289dHJ1ZX19biYmbyYmQXRiKGEuYSxBKTtufHxNZGQoYS5hLFdDKE9DKGIyLDEpLGhyZSw4LDAsW3AscV0pKTtvfHxNZGQoYS5hLFdDKE9DKGIyLDEpLGhyZSw4LDAsW3UsdF0pKX0KZnVuY3Rpb24gUlpjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQjtpZihjLmMubGVuZ3RoIT0wKXtvPW5ldyBVbGI7Zm9yKG49bmV3IHJtYihjKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1KRChwbWIobiksMjcpO0lsYihvLG5ldyBFZGQobS5pLG0uaikpfWQuYWgoYiwnQmVmb3JlIHJlbW92aW5nIG92ZXJsYXBzJyk7d2hpbGUoc1pjKGEsYykpe3FaYyhhLGMsZmFsc2UpfWQuYWgoYiwnQWZ0ZXIgcmVtb3Zpbmcgb3ZlcmxhcHMnKTtoPTA7aT0wO2U9bnVsbDtpZihjLmMubGVuZ3RoIT0wKXtlPShzRGIoMCxjLmMubGVuZ3RoKSxKRChjLmNbMF0sMjcpKTtoPWUuaS0oc0RiKDAsby5jLmxlbmd0aCksSkQoby5jWzBdLDgpKS5hO2k9ZS5qLShzRGIoMCxvLmMubGVuZ3RoKSxKRChvLmNbMF0sOCkpLmJ9Zz0kd25kLk1hdGguc3FydChoKmgraSppKTtsPVBZYyhjKTtmPTE7aWYobC5hLmdjKCkhPTApe2ZvcihrPWwuYS5lYygpLkpjKCk7ay5PYigpOyl7aj1KRChrLlBiKCksMjcpO3A9YS5mO3E9cC5pK3AuZy8yO3I9cC5qK3AuZi8yO3M9ai5pK2ouZy8yO3Q9ai5qK2ouZi8yO3U9cy1xO3Y9dC1yO3c9JHduZC5NYXRoLnNxcnQodSp1K3Yqdik7QT11L3c7Qj12L3c7aHRkKGosai5pK0EqZyk7aXRkKGosai5qK0IqZyl9ZC5haChiLCdDaGlsZCBtb3ZlbWVudCAnK2YpOysrZn0hIWEuYSYmYS5hLkVnKG5ldyBXbGIobCkpO1JaYyhhLGIsbmV3IFdsYihsKSxkKX19CmZ1bmN0aW9uIFNjZChhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdDtpPWE7az1CZGQobmV3IEVkZChiLmEsYi5iKSxhKTtqPWM7bD1CZGQobmV3IEVkZChkLmEsZC5iKSxjKTttPWkuYTtxPWkuYjtvPWouYTtzPWouYjtuPWsuYTtyPWsuYjtwPWwuYTt0PWwuYjtlPXAqci1uKnQ7UnkoKTtWeShwemUpO2lmKCR3bmQuTWF0aC5hYnMoMC1lKTw9cHplfHwwPT1lfHxpc05hTigwKSYmaXNOYU4oZSkpe3JldHVybiBmYWxzZX1nPTEvZSooKG0tbykqci0ocS1zKSpuKTtoPTEvZSotKC0obS1vKSp0KyhxLXMpKnApO2Y9KG51bGwsVnkocHplKSwoJHduZC5NYXRoLmFicygwLWcpPD1wemV8fDA9PWd8fGlzTmFOKDApJiZpc05hTihnKT8wOjA8Zz8tMTowPmc/MTpXeShpc05hTigwKSxpc05hTihnKSkpPDAmJihudWxsLFZ5KHB6ZSksKCR3bmQuTWF0aC5hYnMoZy0xKTw9cHplfHxnPT0xfHxpc05hTihnKSYmaXNOYU4oMSk/MDpnPDE/LTE6Zz4xPzE6V3koaXNOYU4oZyksaXNOYU4oMSkpKTwwKSYmKG51bGwsVnkocHplKSwoJHduZC5NYXRoLmFicygwLWgpPD1wemV8fDA9PWh8fGlzTmFOKDApJiZpc05hTihoKT8wOjA8aD8tMTowPmg/MTpXeShpc05hTigwKSxpc05hTihoKSkpPDApJiYobnVsbCxWeShwemUpLCgkd25kLk1hdGguYWJzKGgtMSk8PXB6ZXx8aD09MXx8aXNOYU4oaCkmJmlzTmFOKDEpPzA6aDwxPy0xOmg+MT8xOld5KGlzTmFOKGgpLGlzTmFOKDEpKSk8MCkpO3JldHVybiBmfQpmdW5jdGlvbiBaU2QoYil7dmFyIGMsZCxlLGY7ZD1iLkQhPW51bGw/Yi5EOmIuQjtjPWhnYihkLHdnYig5MSkpO2lmKGMhPS0xKXtlPSh6RGIoMCxjLGQubGVuZ3RoKSxkLnN1YnN0cigwLGMpKTtmPW5ldyBIZ2I7ZG8gZi5hKz0nWyc7d2hpbGUoKGM9Z2diKGQsOTEsKytjKSkhPS0xKTtpZihjZ2IoZSxEcWUpKWYuYSs9J1onO2Vsc2UgaWYoY2diKGUsZUZlKSlmLmErPSdCJztlbHNlIGlmKGNnYihlLGZGZSkpZi5hKz0nQyc7ZWxzZSBpZihjZ2IoZSxnRmUpKWYuYSs9J0QnO2Vsc2UgaWYoY2diKGUsaEZlKSlmLmErPSdGJztlbHNlIGlmKGNnYihlLGlGZSkpZi5hKz0nSSc7ZWxzZSBpZihjZ2IoZSxqRmUpKWYuYSs9J0onO2Vsc2UgaWYoY2diKGUsa0ZlKSlmLmErPSdTJztlbHNle2YuYSs9J0wnO2YuYSs9JycrZTtmLmErPSc7J310cnl7cmV0dXJuIG51bGx9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoIVJEKGEsNjMpKXRocm93IHNjYihhKX19ZWxzZSBpZihoZ2IoZCx3Z2IoNDYpKT09LTEpe2lmKGNnYihkLERxZSkpcmV0dXJuIHBjYjtlbHNlIGlmKGNnYihkLGVGZSkpcmV0dXJuICREO2Vsc2UgaWYoY2diKGQsZkZlKSlyZXR1cm4gX0Q7ZWxzZSBpZihjZ2IoZCxnRmUpKXJldHVybiBhRTtlbHNlIGlmKGNnYihkLGhGZSkpcmV0dXJuIGJFO2Vsc2UgaWYoY2diKGQsaUZlKSlyZXR1cm4gY0U7ZWxzZSBpZihjZ2IoZCxqRmUpKXJldHVybiBkRTtlbHNlIGlmKGNnYihkLGtGZSkpcmV0dXJuIG9jYn1yZXR1cm4gbnVsbH0KZnVuY3Rpb24gcmZlKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3O2ZvcihsPW5ldyBydGIobmV3IGt0YihhKSk7bC5jIT1sLmQuYS5kOyl7az1xdGIobCk7aD1KRChrLmQsNTcpO2I9SkQoay5lLDU3KTtnPWguemgoKTtmb3IocD0wLHU9KGcuaT09bnVsbCYmTVRkKGcpLGcuaSkubGVuZ3RoO3A8dTsrK3Ape2o9KGY9KGcuaT09bnVsbCYmTVRkKGcpLGcuaSkscD49MCYmcDxmLmxlbmd0aD9mW3BdOm51bGwpO2lmKGoub2soKSYmIWoucGsoKSl7aWYoUkQoaiwxMDEpKXtpPUpEKGosMTkpOyhpLkJiJlJDZSk9PTAmJih3PXMxZChpKSwhKCEhdyYmKHcuQmImUkNlKSE9MCkpJiZxZmUoYSxpLGgsYil9ZWxzZXtJZmUoKTtpZihKRChqLDY5KS51aygpKXtjPSh2PWosSkQoIXY/bnVsbDpKRChiLDUyKS5jaSh2KSwxNTkpKTtpZihjKXtuPUpEKGguSWgoaiksMTU5KTtkPWMuZ2MoKTtmb3IocT0wLG89bi5nYygpO3E8bzsrK3Epe209bi5RbChxKTtpZihSRChtLDEwMSkpe3Q9bi5SbChxKTtlPVRzYihhLHQpO2lmKGU9PW51bGwmJnQhPW51bGwpe3M9SkQobSwxOSk7aWYoIWEuYnx8KHMuQmImUkNlKSE9MHx8ISFzMWQocykpe2NvbnRpbnVlfWU9dH1pZighYy5MbChtLGUpKXtmb3Iocj0wO3I8ZDsrK3Ipe2lmKGMuUWwocik9PW0mJlhEKGMuUmwocikpPT09WEQoZSkpe2MuUWkoYy5nYygpLTEscik7LS1kO2JyZWFrfX19fWVsc2V7Yy5MbChuLlFsKHEpLG4uUmwocSkpfX19fX19fX19CmZ1bmN0aW9uIGpDYyhhLGIsYyl7dmFyIGQ7Yy5TZygnU3RyZXRjaFdpZHRoIGxheWVyaW5nJywxKTtpZihiLmEuYy5sZW5ndGg9PTApe2MuVGcoKTtyZXR1cm59YS5jPWI7YS50PTA7YS51PTA7YS5pPUtzZTthLmc9THNlO2EuZD1CZWIoTUQoV01iKGIsKEJ3YygpLFd2YykpKSk7ZENjKGEpO2VDYyhhKTtiQ2MoYSk7aUNjKGEpO2NDYyhhKTthLmk9JHduZC5NYXRoLm1heCgxLGEuaSk7YS5nPSR3bmQuTWF0aC5tYXgoMSxhLmcpO2EuZD1hLmQvYS5pO2EuZj1hLmcvYS5pO2Eucz1nQ2MoYSk7ZD1uZXcgYiRiKGEuYyk7SWxiKGEuYy5iLGQpO2Eucj1adShhLnApO2Eubj13bWIoYS5rLGEuay5sZW5ndGgpO3doaWxlKGEuci5jLmxlbmd0aCE9MCl7YS5vPWtDYyhhKTtpZighYS5vfHxmQ2MoYSkmJmEuYi5hLmdjKCkhPTApe2xDYyhhLGQpO2Q9bmV3IGIkYihhLmMpO0lsYihhLmMuYixkKTt4ZShhLmEsYS5iKTthLmIuYS4kYigpO2EudD1hLnU7YS51PTB9ZWxzZXtpZihmQ2MoYSkpe2EuYy5iLmMubGVuZ3RoPTA7ZD1uZXcgYiRiKGEuYyk7SWxiKGEuYy5iLGQpO2EudD0wO2EudT0wO2EuYi5hLiRiKCk7YS5hLmEuJGIoKTsrK2EuZjthLnI9WnUoYS5wKTthLm49d21iKGEuayxhLmsubGVuZ3RoKX1lbHNle3FZYihhLm8sZCk7UGxiKGEucixhLm8pO05yYihhLmIsYS5vKTthLnQ9YS50LWEua1thLm8ucF0qYS5kK2EualthLm8ucF07YS51Kz1hLmVbYS5vLnBdKmEuZH19fWIuYS5jLmxlbmd0aD0wO3ZuYihiLmIpO2MuVGcoKX0KZnVuY3Rpb24gdkljKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGw7YS5qPVNDKGNFLGlzZSwzMCxhLmcsMTUsMSk7YS5vPW5ldyBVbGI7RUJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLmUuYiwxNikpLG5ldyBESmMpLG5ldyBGSmMoYSkpO2EuYT1TQyhwY2IsVnRlLDMwLGEuYiwxNiwxKTtMQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5lLmIsMTYpKSxuZXcgVUpjKGEpKTtkPShsPW5ldyBVbGIsRUJiKEJCYihEQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5lLmIsMTYpKSxuZXcgS0pjKSxuZXcgTUpjKGEpKSxuZXcgT0pjKGEsbCkpLGwpO2ZvcihpPW5ldyBybWIoZCk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDQ5OSk7aWYoaC5jLmxlbmd0aDw9MSl7Y29udGludWV9aWYoaC5jLmxlbmd0aD09Mil7WEljKGgpO0VJYygoc0RiKDAsaC5jLmxlbmd0aCksSkQoaC5jWzBdLDE4KSkuZC5pKXx8SWxiKGEubyxoKTtjb250aW51ZX1pZihXSWMoaCl8fFZJYyhoLG5ldyBJSmMpKXtjb250aW51ZX1qPW5ldyBybWIoaCk7ZT1udWxsO3doaWxlKGouYTxqLmMuYy5sZW5ndGgpe2I9SkQocG1iKGopLDE4KTtjPWEuY1tiLnBdOyFlfHxqLmE+PWouYy5jLmxlbmd0aD8oaz1rSWMoKERZYigpLEFZYikseVliKSk6KGs9a0ljKChEWWIoKSx5WWIpLHlZYikpO2sqPTI7Zj1jLmEuZztjLmEuZz0kd25kLk1hdGgubWF4KGYsZisoay1mKSk7Zz1jLmIuZztjLmIuZz0kd25kLk1hdGgubWF4KGcsZysoay1nKSk7ZT1ifX19CmZ1bmN0aW9uIElFYihhLGIpe3ZhciBjO2lmKGEuZSl7dGhyb3cgc2NiKG5ldyBXZWIoKGNlYihQTSksSHRlK1BNLmsrSXRlKSkpfWlmKCFiRWIoYS5hLGIpKXt0aHJvdyBzY2IobmV3IHF6KEp0ZStiK0t0ZSkpfWlmKGI9PWEuZCl7cmV0dXJuIGF9Yz1hLmQ7YS5kPWI7c3dpdGNoKGMuZyl7Y2FzZSAwOnN3aXRjaChiLmcpe2Nhc2UgMjpGRWIoYSk7YnJlYWs7Y2FzZSAxOk5FYihhKTtGRWIoYSk7YnJlYWs7Y2FzZSA0OlRFYihhKTtGRWIoYSk7YnJlYWs7Y2FzZSAzOlRFYihhKTtORWIoYSk7RkViKGEpO31icmVhaztjYXNlIDI6c3dpdGNoKGIuZyl7Y2FzZSAxOk5FYihhKTtPRWIoYSk7YnJlYWs7Y2FzZSA0OlRFYihhKTtGRWIoYSk7YnJlYWs7Y2FzZSAzOlRFYihhKTtORWIoYSk7RkViKGEpO31icmVhaztjYXNlIDE6c3dpdGNoKGIuZyl7Y2FzZSAyOk5FYihhKTtPRWIoYSk7YnJlYWs7Y2FzZSA0Ok5FYihhKTtURWIoYSk7RkViKGEpO2JyZWFrO2Nhc2UgMzpORWIoYSk7VEViKGEpO05FYihhKTtGRWIoYSk7fWJyZWFrO2Nhc2UgNDpzd2l0Y2goYi5nKXtjYXNlIDI6VEViKGEpO0ZFYihhKTticmVhaztjYXNlIDE6VEViKGEpO05FYihhKTtGRWIoYSk7YnJlYWs7Y2FzZSAzOk5FYihhKTtPRWIoYSk7fWJyZWFrO2Nhc2UgMzpzd2l0Y2goYi5nKXtjYXNlIDI6TkViKGEpO1RFYihhKTtGRWIoYSk7YnJlYWs7Y2FzZSAxOk5FYihhKTtURWIoYSk7TkViKGEpO0ZFYihhKTticmVhaztjYXNlIDQ6TkViKGEpO09FYihhKTt9fXJldHVybiBhfQpmdW5jdGlvbiBGUmIoYSxiKXt2YXIgYztpZihhLmQpe3Rocm93IHNjYihuZXcgV2ViKChjZWIoTU8pLEh0ZStNTy5rK0l0ZSkpKX1pZighb1JiKGEuYSxiKSl7dGhyb3cgc2NiKG5ldyBxeihKdGUrYitLdGUpKX1pZihiPT1hLmMpe3JldHVybiBhfWM9YS5jO2EuYz1iO3N3aXRjaChjLmcpe2Nhc2UgMDpzd2l0Y2goYi5nKXtjYXNlIDI6Q1JiKGEpO2JyZWFrO2Nhc2UgMTpKUmIoYSk7Q1JiKGEpO2JyZWFrO2Nhc2UgNDpOUmIoYSk7Q1JiKGEpO2JyZWFrO2Nhc2UgMzpOUmIoYSk7SlJiKGEpO0NSYihhKTt9YnJlYWs7Y2FzZSAyOnN3aXRjaChiLmcpe2Nhc2UgMTpKUmIoYSk7S1JiKGEpO2JyZWFrO2Nhc2UgNDpOUmIoYSk7Q1JiKGEpO2JyZWFrO2Nhc2UgMzpOUmIoYSk7SlJiKGEpO0NSYihhKTt9YnJlYWs7Y2FzZSAxOnN3aXRjaChiLmcpe2Nhc2UgMjpKUmIoYSk7S1JiKGEpO2JyZWFrO2Nhc2UgNDpKUmIoYSk7TlJiKGEpO0NSYihhKTticmVhaztjYXNlIDM6SlJiKGEpO05SYihhKTtKUmIoYSk7Q1JiKGEpO31icmVhaztjYXNlIDQ6c3dpdGNoKGIuZyl7Y2FzZSAyOk5SYihhKTtDUmIoYSk7YnJlYWs7Y2FzZSAxOk5SYihhKTtKUmIoYSk7Q1JiKGEpO2JyZWFrO2Nhc2UgMzpKUmIoYSk7S1JiKGEpO31icmVhaztjYXNlIDM6c3dpdGNoKGIuZyl7Y2FzZSAyOkpSYihhKTtOUmIoYSk7Q1JiKGEpO2JyZWFrO2Nhc2UgMTpKUmIoYSk7TlJiKGEpO0pSYihhKTtDUmIoYSk7YnJlYWs7Y2FzZSA0OkpSYihhKTtLUmIoYSk7fX1yZXR1cm4gYX0KZnVuY3Rpb24gS2xjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O2w9YS5iO2s9bmV3IEFqYihsLDApO3pqYihrLG5ldyBiJGIoYSkpO3M9ZmFsc2U7Zz0xO3doaWxlKGsuYjxrLmQuZ2MoKSl7aj0ockRiKGsuYjxrLmQuZ2MoKSksSkQoay5kLlhiKGsuYz1rLmIrKyksMjUpKTtwPShzRGIoZyxsLmMubGVuZ3RoKSxKRChsLmNbZ10sMjUpKTtxPVp1KGouYSk7cj1xLmMubGVuZ3RoO2ZvcihvPW5ldyBybWIocSk7by5hPG8uYy5jLmxlbmd0aDspe209SkQocG1iKG8pLDkpO3FZYihtLHApfWlmKHMpe2ZvcihuPWR2KHEpLkpjKCk7bi5PYigpOyl7bT1KRChuLlBiKCksOSk7Zm9yKGY9bmV3IHJtYihadShoWWIobSkpKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMTgpO2ZXYihlLHRydWUpO1pNYihhLChJcWMoKSxNcGMpLCh4ZGIoKSx0cnVlKSk7ZD0kbGMoYSxlLHIpO2M9SkQoV01iKG0sR3BjKSwzMTQpO3Q9SkQoTWxiKGQsZC5jLmxlbmd0aC0xKSwxOCk7Yy5rPXQuYy5pO2Mubj10O2MuYj1lLmQuaTtjLmM9ZX19cz1mYWxzZX1lbHNle2lmKHEuYy5sZW5ndGghPTApe2I9KHNEYigwLHEuYy5sZW5ndGgpLEpEKHEuY1swXSw5KSk7aWYoYi5rPT0oRFliKCksdlliKSl7cz10cnVlO2c9LTF9fX0rK2d9aD1uZXcgQWpiKGEuYiwwKTt3aGlsZShoLmI8aC5kLmdjKCkpe2k9KHJEYihoLmI8aC5kLmdjKCkpLEpEKGguZC5YYihoLmM9aC5iKyspLDI1KSk7aS5hLmMubGVuZ3RoPT0wJiZ0amIoaCl9fQpmdW5jdGlvbiBrbmQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2lmKFJEKGEuQWgoKSwxNzMpKXtrbmQoSkQoYS5BaCgpLDE3MyksYik7Yi5hKz0nID4gJ31lbHNle2IuYSs9J1Jvb3QgJ31jPWEuemgoKS56YjtjZ2IoYy5zdWJzdHIoMCwzKSwnRWxrJyk/UWdiKGIsKEFEYigzLGMubGVuZ3RoKzEpLGMuc3Vic3RyKDMpKSk6KGIuYSs9JycrYyxiKTtlPWEuaGgoKTtpZihlKXtRZ2IoKGIuYSs9JyAnLGIpLGUpO3JldHVybn1pZihSRChhLDM1OSkpe2o9SkQoYSwxNTMpLmE7aWYoail7UWdiKChiLmErPScgJyxiKSxqKTtyZXR1cm59fWZvcihnPW5ldyBDSGQoYS5paCgpKTtnLmUhPWcuaS5nYygpOyl7Zj1KRChBSGQoZyksMTUzKTtqPWYuYTtpZihqKXtRZ2IoKGIuYSs9JyAnLGIpLGopO3JldHVybn19aWYoUkQoYSwyNjgpKXtkPUpEKGEsODUpOyFkLmImJihkLmI9bmV3IHJlZSh2MyxkLDQsNykpO2lmKGQuYi5pIT0wJiYoIWQuYyYmKGQuYz1uZXcgcmVlKHYzLGQsNSw4KSksZC5jLmkhPTApKXtiLmErPScgKCc7aD1uZXcgTEhkKCghZC5iJiYoZC5iPW5ldyByZWUodjMsZCw0LDcpKSxkLmIpKTt3aGlsZShoLmUhPWguaS5nYygpKXtoLmU+MCYmKGIuYSs9THFlLGIpO2tuZChKRChBSGQoaCksMTczKSxiKX1iLmErPUZ2ZTtpPW5ldyBMSGQoKCFkLmMmJihkLmM9bmV3IHJlZSh2MyxkLDUsOCkpLGQuYykpO3doaWxlKGkuZSE9aS5pLmdjKCkpe2kuZT4wJiYoYi5hKz1McWUsYik7a25kKEpEKEFIZChpKSwxNzMpLGIpfWIuYSs9JyknfX19CmZ1bmN0aW9uIEtNYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaztmb3IoaT1uZXcgQ0hkKCghYS5hJiYoYS5hPW5ldyBYMGQoQTMsYSwxMCwxMSkpLGEuYSkpO2kuZSE9aS5pLmdjKCk7KXtoPUpEKEFIZChpKSwyNyk7Zm9yKGU9bmV3IGVzKElyKCRCZChoKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDg1KTshZC5iJiYoZC5iPW5ldyByZWUodjMsZCw0LDcpKTtpZighKGQuYi5pPD0xJiYoIWQuYyYmKGQuYz1uZXcgcmVlKHYzLGQsNSw4KSksZC5jLmk8PTEpKSl7dGhyb3cgc2NiKG5ldyBaOGMoJ0dyYXBoIG11c3Qgbm90IGNvbnRhaW4gaHlwZXJlZGdlcy4nKSl9aWYoIVJ0ZChkKSYmaCE9X0JkKEpEKG5EZCgoIWQuYyYmKGQuYz1uZXcgcmVlKHYzLGQsNSw4KSksZC5jKSwwKSw4NCkpKXtqPW5ldyBtTmI7VU1iKGosZCk7Wk1iKGosKFRPYigpLFJPYiksZCk7ak5iKGosSkQoV2QoZnNiKGMuZixoKSksMTUxKSk7a05iKGosSkQoTmliKGMsX0JkKEpEKG5EZCgoIWQuYyYmKGQuYz1uZXcgcmVlKHYzLGQsNSw4KSksZC5jKSwwKSw4NCkpKSwxNTEpKTtJbGIoYi5jLGopO2ZvcihnPW5ldyBDSGQoKCFkLm4mJihkLm49bmV3IFgwZCh6MyxkLDEsNykpLGQubikpO2cuZSE9Zy5pLmdjKCk7KXtmPUpEKEFIZChnKSwxNTMpO2s9bmV3IHNOYihqLGYuYSk7VU1iKGssZik7Wk1iKGssUk9iLGYpO2suZS5hPSR3bmQuTWF0aC5tYXgoZi5nLDEpO2suZS5iPSR3bmQuTWF0aC5tYXgoZi5mLDEpO3JOYihrKTtJbGIoYi5kLGspfX19fX0KZnVuY3Rpb24gZzhiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbTtjLlNnKCdOb2RlIHByb21vdGlvbiBoZXVyaXN0aWMnLDEpO2EuaT1iO2Eucj1KRChXTWIoYiwoQndjKCksWnVjKSksMjQyKTthLnIhPShkeWMoKSxXeGMpJiZhLnIhPVh4Yz9lOGIoYSk6ZjhiKGEpO2s9SkQoV01iKGEuaSxZdWMpLDE3KS5hO2Y9bmV3IEE4Yjtzd2l0Y2goYS5yLmcpe2Nhc2UgMjpjYXNlIDE6ajhiKGEsZik7YnJlYWs7Y2FzZSAzOmEucj1jeWM7ajhiKGEsZik7aT0wO2ZvcihoPW5ldyBybWIoYS5iKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTcpO2k9JHduZC5NYXRoLm1heChpLGcuYSl9aWYoaT5hLmspe2Eucj1ZeGM7ajhiKGEsZil9YnJlYWs7Y2FzZSA0OmEucj1jeWM7ajhiKGEsZik7aj0wO2ZvcihlPW5ldyBybWIoYS5jKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1NRChwbWIoZSkpO2o9JHduZC5NYXRoLm1heChqLCh0RGIoZCksZCkpfWlmKGo+YS5uKXthLnI9X3hjO2o4YihhLGYpfWJyZWFrO2Nhc2UgNjptPVlEKCR3bmQuTWF0aC5jZWlsKGEuZy5sZW5ndGgqay8xMDApKTtqOGIoYSxuZXcgRDhiKG0pKTticmVhaztjYXNlIDU6bD1ZRCgkd25kLk1hdGguY2VpbChhLmUqay8xMDApKTtqOGIoYSxuZXcgRzhiKGwpKTticmVhaztjYXNlIDg6ZDhiKGEsdHJ1ZSk7YnJlYWs7Y2FzZSA5OmQ4YihhLGZhbHNlKTticmVhaztkZWZhdWx0Omo4YihhLGYpO31hLnIhPVd4YyYmYS5yIT1YeGM/azhiKGEsYik6bDhiKGEsYik7Yy5UZygpfQpmdW5jdGlvbiBRR2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7bD1uZXcgTkliKGEpO2tLYihsLCEoYj09KFRnZCgpLFNnZCl8fGI9PU9nZCkpO2s9bC5hO209bmV3IExZYjtmb3IoZT0oaUhiKCksV0MoT0MoaE4sMSksRXJlLDIzNiwwLFtmSGIsZ0hiLGhIYl0pKSxnPTAsaT1lLmxlbmd0aDtnPGk7KytnKXtjPWVbZ107aj16SGIoayxmSGIsYyk7ISFqJiYobS5kPSR3bmQuTWF0aC5tYXgobS5kLGouZmYoKSkpfWZvcihkPVdDKE9DKGhOLDEpLEVyZSwyMzYsMCxbZkhiLGdIYixoSGJdKSxmPTAsaD1kLmxlbmd0aDtmPGg7KytmKXtjPWRbZl07aj16SGIoayxoSGIsYyk7ISFqJiYobS5hPSR3bmQuTWF0aC5tYXgobS5hLGouZmYoKSkpfWZvcihwPVdDKE9DKGhOLDEpLEVyZSwyMzYsMCxbZkhiLGdIYixoSGJdKSxyPTAsdD1wLmxlbmd0aDtyPHQ7KytyKXtuPXBbcl07aj16SGIoayxuLGZIYik7ISFqJiYobS5iPSR3bmQuTWF0aC5tYXgobS5iLGouZ2YoKSkpfWZvcihvPVdDKE9DKGhOLDEpLEVyZSwyMzYsMCxbZkhiLGdIYixoSGJdKSxxPTAscz1vLmxlbmd0aDtxPHM7KytxKXtuPW9bcV07aj16SGIoayxuLGhIYik7ISFqJiYobS5jPSR3bmQuTWF0aC5tYXgobS5jLGouZ2YoKSkpfWlmKG0uZD4wKXttLmQrPWsubi5kO20uZCs9ay5kfWlmKG0uYT4wKXttLmErPWsubi5hO20uYSs9ay5kfWlmKG0uYj4wKXttLmIrPWsubi5iO20uYis9ay5kfWlmKG0uYz4wKXttLmMrPWsubi5jO20uYys9ay5kfXJldHVybiBtfQpmdW5jdGlvbiBHMmIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbzttPWMuZDtsPWMuYztmPW5ldyBFZGQoYy5mLmErYy5kLmIrYy5kLmMsYy5mLmIrYy5kLmQrYy5kLmEpO2c9Zi5iO2ZvcihqPW5ldyBybWIoYS5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaiksOSk7aWYoaC5rIT0oRFliKCksd1liKSl7Y29udGludWV9ZD1KRChXTWIoaCwoSXFjKCksVHBjKSksNjQpO2U9SkQoV01iKGgsVXBjKSw4KTtrPWgubjtzd2l0Y2goZC5nKXtjYXNlIDI6ay5hPWMuZi5hK20uYy1sLmE7YnJlYWs7Y2FzZSA0OmsuYT0tbC5hLW0uYjt9bz0wO3N3aXRjaChkLmcpe2Nhc2UgMjpjYXNlIDQ6aWYoYj09KGFqZCgpLFlpZCkpe249QmViKE1EKFdNYihoLHRxYykpKTtrLmI9Zi5iKm4tSkQoV01iKGgsKEJ3YygpLEN2YykpLDgpLmI7bz1rLmIrZS5iO2NZYihoLGZhbHNlLHRydWUpfWVsc2UgaWYoYj09WGlkKXtrLmI9QmViKE1EKFdNYihoLHRxYykpKS1KRChXTWIoaCwoQndjKCksQ3ZjKSksOCkuYjtvPWsuYitlLmI7Y1liKGgsZmFsc2UsdHJ1ZSl9fWc9JHduZC5NYXRoLm1heChnLG8pfWMuZi5iKz1nLWYuYjtmb3IoaT1uZXcgcm1iKGEuYSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDkpO2lmKGguayE9KERZYigpLHdZYikpe2NvbnRpbnVlfWQ9SkQoV01iKGgsKElxYygpLFRwYykpLDY0KTtrPWgubjtzd2l0Y2goZC5nKXtjYXNlIDE6ay5iPS1sLmItbS5kO2JyZWFrO2Nhc2UgMzprLmI9Yy5mLmIrbS5hLWwuYjt9fX0KZnVuY3Rpb24geUtiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7az1KRChKRChRYyhhLnIsYiksMjIpLDgzKTtpZihrLmdjKCk8PTJ8fGI9PShSamQoKSx3amQpfHxiPT0oUmpkKCksUWpkKSl7Q0tiKGEsYik7cmV0dXJufXA9YS51LkdjKChvamQoKSxuamQpKTtjPWI9PShSamQoKSx4amQpPyh4TGIoKSx3TGIpOih4TGIoKSx0TGIpO3I9Yj09eGpkPyhHSWIoKSxESWIpOihHSWIoKSxGSWIpO2Q9ZkxiKGtMYihjKSxhLnMpO3E9Yj09eGpkP0tzZTpMc2U7Zm9yKGo9ay5KYygpO2ouT2IoKTspe2g9SkQoai5QYigpLDExNSk7aWYoIWguY3x8aC5jLmQuYy5sZW5ndGg8PTApe2NvbnRpbnVlfW89aC5iLktmKCk7bj1oLmU7bD1oLmM7bT1sLmk7bS5iPShmPWwubixsLmUuYStmLmIrZi5jKTttLmE9KGc9bC5uLGwuZS5iK2cuZCtnLmEpO2lmKHApe20uYz1uLmEtKGU9bC5uLGwuZS5hK2UuYitlLmMpLWEucztwPWZhbHNlfWVsc2V7bS5jPW4uYStvLmErYS5zfXd1YihyLGJ1ZSk7bC5mPXI7YUliKGwsKFBIYigpLE9IYikpO0lsYihkLmQsbmV3IERMYihtLGRMYihkLG0pKSk7cT1iPT14amQ/JHduZC5NYXRoLm1pbihxLG4uYik6JHduZC5NYXRoLm1heChxLG4uYitoLmIuS2YoKS5iKX1xKz1iPT14amQ/LWEudDphLnQ7ZUxiKChkLmU9cSxkKSk7Zm9yKGk9ay5KYygpO2kuT2IoKTspe2g9SkQoaS5QYigpLDExNSk7aWYoIWguY3x8aC5jLmQuYy5sZW5ndGg8PTApe2NvbnRpbnVlfW09aC5jLmk7bS5jLT1oLmUuYTttLmQtPWguZS5ifX0KZnVuY3Rpb24gZWxjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7ZmxjKGEpO2Q9MTtrPW5ldyBVbGI7Zm9yKGM9MDtjPGEuYi5jLmxlbmd0aDtjKyspe2I9Y2xjKEpEKE1sYihhLmIsYyksMjUpKTtwPWRsYyhKRChNbGIoYS5iLGMpLDI1KSk7aWYoSkQoTWxiKGEuYixjKSwyNSkuYS5jLmxlbmd0aD5iKXtxPW5ldyBVbGI7SWxiKHEsSkQoTWxiKGEuYixjKSwyNSkpO2ZvcihmPTA7ZjxiLTE7ZisrKXtpPW5ldyBiJGIoYSk7SWxiKGssbmV3IHhvZChpLGpmYihjK2YrZCkpKTtZQ2IocS5jLGkpfWQrPWItMTtvPShzRGIoMCxxLmMubGVuZ3RoKSxKRChxLmNbMF0sMjUpKS5hLmMubGVuZ3RoO2ZvcihlPTAsbT0wLHI9MDtlPG87KytlLCsrbSxyKyspe2w9SkQoTWxiKChzRGIoMCxxLmMubGVuZ3RoKSxKRChxLmNbMF0sMjUpKS5hLG0pLDkpO2lmKGwuayE9KERZYigpLHpZYikpe20rPWdsYyhhLHEsciViLG0pfWVsc2V7ZS09MTtyLT0xfXAmJmwuaz09eVliJiYocj0tMSl9fX1mb3Ioaj1uZXcgcm1iKGspO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSw0Nyk7SGxiKGEuYixKRChpLmIsMTcpLmEsSkQoaS5hLDI1KSl9Zm9yKGg9bmV3IHJtYihhLmIpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwyNSk7bj1uZXcgQWpiKGcuYSwwKTt3aGlsZShuLmI8bi5kLmdjKCkpe2w9KHJEYihuLmI8bi5kLmdjKCkpLEpEKG4uZC5YYihuLmM9bi5iKyspLDkpKTsobC5rPT0oRFliKCksQ1liKXx8bC5rPT16WWIpJiZ0amIobil9fX0KZnVuY3Rpb24gTlZiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O2U9bmV3IFVsYjtmb3IocD1uZXcgcm1iKGIuYSk7cC5hPHAuYy5jLmxlbmd0aDspe289SkQocG1iKHApLDkpO249by5lO2lmKG4pe2Q9TlZiKGEsbixvKTtLbGIoZSxkKTtLVmIoYSxuLG8pO2lmKEpEKFdNYihuLChJcWMoKSxXcGMpKSwyMikuR2MoKCRvYygpLFRvYykpKXtzPUpEKFdNYihvLChCd2MoKSxFdmMpKSwxMDApO209SkQoV01iKG8sSHZjKSwxODEpLkdjKChvamQoKSxramQpKTtmb3Iocj1uZXcgcm1iKG8uaik7ci5hPHIuYy5jLmxlbmd0aDspe3E9SkQocG1iKHIpLDExKTtmPUpEKE5pYihhLmIscSksOSk7aWYoIWYpe2Y9cFhiKHEscyxxLmosLShxLmUuYy5sZW5ndGgtcS5nLmMubGVuZ3RoKSxudWxsLG5ldyBDZGQscS5vLEpEKFdNYihuLHJ1YyksODYpLG4pO1pNYihmLGtxYyxxKTtRaWIoYS5iLHEsZik7SWxiKG4uYSxmKX1nPUpEKE1sYihmLmosMCksMTEpO2ZvcihrPW5ldyBybWIocS5mKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksNzIpO2g9bmV3IEhYYjtoLm8uYT1qLm8uYTtoLm8uYj1qLm8uYjtJbGIoZy5mLGgpO2lmKCFtKXt0PXEuajtsPTA7cWpkKEpEKFdNYihvLEh2YyksMjIpKSYmKGw9JG1kKGoubixqLm8scS5vLDAsdCkpO3M9PShhamQoKSwkaWQpfHwoUmpkKCksQmpkKS5HYyh0KT8oaC5vLmE9bCk6KGguby5iPWwpfX19fX19aT1uZXcgVWxiO0pWYihhLGIsYyxlLGkpOyEhYyYmTFZiKGEsYixjLGkpO3JldHVybiBpfQpmdW5jdGlvbiBRQ2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbDtpZihhLmNbYi5jLnBdW2IucF0uZSl7cmV0dXJufWVsc2V7YS5jW2IuYy5wXVtiLnBdLmU9dHJ1ZX1hLmNbYi5jLnBdW2IucF0uYj0wO2EuY1tiLmMucF1bYi5wXS5kPTA7YS5jW2IuYy5wXVtiLnBdLmE9bnVsbDtmb3Ioaz1uZXcgcm1iKGIuaik7ay5hPGsuYy5jLmxlbmd0aDspe2o9SkQocG1iKGspLDExKTtsPWM/bmV3IGRaYihqKTpuZXcgbFpiKGopO2ZvcihpPWwuSmMoKTtpLk9iKCk7KXtoPUpEKGkuUGIoKSwxMSk7Zz1oLmk7aWYoZy5jPT1iLmMpe2lmKGchPWIpe1FDYyhhLGcsYyk7YS5jW2IuYy5wXVtiLnBdLmIrPWEuY1tnLmMucF1bZy5wXS5iO2EuY1tiLmMucF1bYi5wXS5kKz1hLmNbZy5jLnBdW2cucF0uZH19ZWxzZXthLmNbYi5jLnBdW2IucF0uZCs9YS5nW2gucF07KythLmNbYi5jLnBdW2IucF0uYn19fWY9SkQoV01iKGIsKElxYygpLEVwYykpLDE1KTtpZihmKXtmb3IoZT1mLkpjKCk7ZS5PYigpOyl7ZD1KRChlLlBiKCksOSk7aWYoYi5jPT1kLmMpe1FDYyhhLGQsYyk7YS5jW2IuYy5wXVtiLnBdLmIrPWEuY1tkLmMucF1bZC5wXS5iO2EuY1tiLmMucF1bYi5wXS5kKz1hLmNbZC5jLnBdW2QucF0uZH19fWlmKGEuY1tiLmMucF1bYi5wXS5iPjApe2EuY1tiLmMucF1bYi5wXS5kKz15dmIoYS5pLDI0KSpodGUqMC4wNzAwMDAwMDAyOTgwMjMyMi0wLjAzNTAwMDAwMDE0OTAxMTYxO2EuY1tiLmMucF1bYi5wXS5hPWEuY1tiLmMucF1bYi5wXS5kL2EuY1tiLmMucF1bYi5wXS5ifX0KZnVuY3Rpb24gUDFiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2ZvcihvPW5ldyBybWIoYSk7by5hPG8uYy5jLmxlbmd0aDspe249SkQocG1iKG8pLDkpO1ExYihuLm4pO1ExYihuLm8pO1IxYihuLmYpO1UxYihuKTtXMWIobik7Zm9yKHE9bmV3IHJtYihuLmopO3EuYTxxLmMuYy5sZW5ndGg7KXtwPUpEKHBtYihxKSwxMSk7UTFiKHAubik7UTFiKHAuYSk7UTFiKHAubyk7YVpiKHAsVjFiKHAuaikpO2Y9SkQoV01iKHAsKEJ3YygpLEZ2YykpLDE3KTshIWYmJlpNYihwLEZ2YyxqZmIoLWYuYSkpO2ZvcihlPW5ldyBybWIocC5nKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMTgpO2ZvcihjPUd0YihkLmEsMCk7Yy5iIT1jLmQuYzspe2I9SkQoVXRiKGMpLDgpO1ExYihiKX1pPUpEKFdNYihkLFJ1YyksNzcpO2lmKGkpe2ZvcihoPUd0YihpLDApO2guYiE9aC5kLmM7KXtnPUpEKFV0YihoKSw4KTtRMWIoZyl9fWZvcihsPW5ldyBybWIoZC5iKTtsLmE8bC5jLmMubGVuZ3RoOyl7aj1KRChwbWIobCksNzIpO1ExYihqLm4pO1ExYihqLm8pfX1mb3IobT1uZXcgcm1iKHAuZik7bS5hPG0uYy5jLmxlbmd0aDspe2o9SkQocG1iKG0pLDcyKTtRMWIoai5uKTtRMWIoai5vKX19aWYobi5rPT0oRFliKCksd1liKSl7Wk1iKG4sKElxYygpLFRwYyksVjFiKEpEKFdNYihuLFRwYyksNjQpKSk7VDFiKG4pfWZvcihrPW5ldyBybWIobi5iKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksNzIpO1UxYihqKTtRMWIoai5vKTtRMWIoai5uKX19fQpmdW5jdGlvbiBnS2IoYSl7YUtiKCk7dmFyIGIsYyxkLGUsZixnLGg7ZD1hLmYubjtmb3IoZz1paShhLnIpLmEubmMoKTtnLk9iKCk7KXtmPUpEKGcuUGIoKSwxMTUpO2U9MDtpZihmLmIubmYoKExnZCgpLFhmZCkpKXtlPUJlYihNRChmLmIubWYoWGZkKSkpO2lmKGU8MCl7c3dpdGNoKGYuYi4kZigpLmcpe2Nhc2UgMTpkLmQ9JHduZC5NYXRoLm1heChkLmQsLWUpO2JyZWFrO2Nhc2UgMzpkLmE9JHduZC5NYXRoLm1heChkLmEsLWUpO2JyZWFrO2Nhc2UgMjpkLmM9JHduZC5NYXRoLm1heChkLmMsLWUpO2JyZWFrO2Nhc2UgNDpkLmI9JHduZC5NYXRoLm1heChkLmIsLWUpO319fWlmKHFqZChhLnUpKXtiPV9tZChmLmIsZSk7aD0hSkQoYS5lLm1mKEdmZCksMTgxKS5HYygoTmtkKCksRWtkKSk7Yz1mYWxzZTtzd2l0Y2goZi5iLiRmKCkuZyl7Y2FzZSAxOmM9Yj5kLmQ7ZC5kPSR3bmQuTWF0aC5tYXgoZC5kLGIpO2lmKGgmJmMpe2QuZD0kd25kLk1hdGgubWF4KGQuZCxkLmEpO2QuYT1kLmQrZX1icmVhaztjYXNlIDM6Yz1iPmQuYTtkLmE9JHduZC5NYXRoLm1heChkLmEsYik7aWYoaCYmYyl7ZC5hPSR3bmQuTWF0aC5tYXgoZC5hLGQuZCk7ZC5kPWQuYStlfWJyZWFrO2Nhc2UgMjpjPWI+ZC5jO2QuYz0kd25kLk1hdGgubWF4KGQuYyxiKTtpZihoJiZjKXtkLmM9JHduZC5NYXRoLm1heChkLmIsZC5jKTtkLmI9ZC5jK2V9YnJlYWs7Y2FzZSA0OmM9Yj5kLmI7ZC5iPSR3bmQuTWF0aC5tYXgoZC5iLGIpO2lmKGgmJmMpe2QuYj0kd25kLk1hdGgubWF4KGQuYixkLmMpO2QuYz1kLmIrZX19fX19CmZ1bmN0aW9uIGhBKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2o9Jyc7aWYoYi5sZW5ndGg9PTApe3JldHVybiBhLmxlKFRyZSxScmUsLTEsLTEpfWs9dWdiKGIpO2NnYihrLnN1YnN0cigwLDMpLCdhdCAnKSYmKGs9KEFEYigzLGsubGVuZ3RoKzEpLGsuc3Vic3RyKDMpKSk7az1rLnJlcGxhY2UoL1xbLio/XF0vZywnJyk7Zz1rLmluZGV4T2YoJygnKTtpZihnPT0tMSl7Zz1rLmluZGV4T2YoJ0AnKTtpZihnPT0tMSl7aj1rO2s9Jyd9ZWxzZXtqPXVnYigoQURiKGcrMSxrLmxlbmd0aCsxKSxrLnN1YnN0cihnKzEpKSk7az11Z2IoKHpEYigwLGcsay5sZW5ndGgpLGsuc3Vic3RyKDAsZykpKX19ZWxzZXtjPWsuaW5kZXhPZignKScsZyk7aj0oekRiKGcrMSxjLGsubGVuZ3RoKSxrLnN1YnN0cihnKzEsYy0oZysxKSkpO2s9dWdiKCh6RGIoMCxnLGsubGVuZ3RoKSxrLnN1YnN0cigwLGcpKSl9Zz1oZ2Ioayx3Z2IoNDYpKTtnIT0tMSYmKGs9KEFEYihnKzEsay5sZW5ndGgrMSksay5zdWJzdHIoZysxKSkpOyhrLmxlbmd0aD09MHx8Y2diKGssJ0Fub255bW91cyBmdW5jdGlvbicpKSYmKGs9UnJlKTtoPWtnYihqLHdnYig1OCkpO2U9bGdiKGosd2diKDU4KSxoLTEpO2k9LTE7ZD0tMTtmPVRyZTtpZihoIT0tMSYmZSE9LTEpe2Y9KHpEYigwLGUsai5sZW5ndGgpLGouc3Vic3RyKDAsZSkpO2k9YkEoKHpEYihlKzEsaCxqLmxlbmd0aCksai5zdWJzdHIoZSsxLGgtKGUrMSkpKSk7ZD1iQSgoQURiKGgrMSxqLmxlbmd0aCsxKSxqLnN1YnN0cihoKzEpKSl9cmV0dXJuIGEubGUoZixrLGksZCl9CmZ1bmN0aW9uIE9fYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsO2ZvcihqPW5ldyBybWIoYSk7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDkpO2c9SkQoV01iKGksKEJ3YygpLFV1YykpLDE3MSk7Zj1udWxsO3N3aXRjaChnLmcpe2Nhc2UgMTpjYXNlIDI6Zj0oVG5jKCksU25jKTticmVhaztjYXNlIDM6Y2FzZSA0OmY9KFRuYygpLFFuYyk7fWlmKGYpe1pNYihpLChJcWMoKSxOcGMpLChUbmMoKSxTbmMpKTtmPT1RbmM/Ul9iKGksZywoRXljKCksQnljKSk6Zj09U25jJiZSX2IoaSxnLChFeWMoKSxDeWMpKX1lbHNle2lmKGNqZChKRChXTWIoaSxFdmMpLDEwMCkpJiZpLmouYy5sZW5ndGghPTApe2I9dHJ1ZTtmb3IobD1uZXcgcm1iKGkuaik7bC5hPGwuYy5jLmxlbmd0aDspe2s9SkQocG1iKGwpLDExKTtpZighKGsuaj09KFJqZCgpLHdqZCkmJmsuZS5jLmxlbmd0aC1rLmcuYy5sZW5ndGg+MHx8ay5qPT1RamQmJmsuZS5jLmxlbmd0aC1rLmcuYy5sZW5ndGg8MCkpe2I9ZmFsc2U7YnJlYWt9Zm9yKGU9bmV3IHJtYihrLmcpO2UuYTxlLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihlKSwxOCk7aD1KRChXTWIoYy5kLmksVXVjKSwxNzEpO2lmKGg9PShPcWMoKSxMcWMpfHxoPT1NcWMpe2I9ZmFsc2U7YnJlYWt9fWZvcihkPW5ldyBybWIoay5lKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMTgpO2g9SkQoV01iKGMuYy5pLFV1YyksMTcxKTtpZihoPT0oT3FjKCksSnFjKXx8aD09S3FjKXtiPWZhbHNlO2JyZWFrfX19YiYmUl9iKGksZywoRXljKCksRHljKSl9fX19CmZ1bmN0aW9uIE9IYyhhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdzt3PTA7bj0wO2ZvcihsPW5ldyBybWIoYi5lKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1KRChwbWIobCksOSk7bT0wO2g9MDtpPWM/SkQoV01iKGssS0hjKSwxNykuYTpMcmU7cj1kP0pEKFdNYihrLExIYyksMTcpLmE6THJlO2o9JHduZC5NYXRoLm1heChpLHIpO2Zvcih0PW5ldyBybWIoay5qKTt0LmE8dC5jLmMubGVuZ3RoOyl7cz1KRChwbWIodCksMTEpO3U9ay5uLmIrcy5uLmIrcy5hLmI7aWYoZCl7Zm9yKGc9bmV3IHJtYihzLmcpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwxOCk7cD1mLmQ7bz1wLmk7aWYoYiE9YS5hW28ucF0pe3E9JHduZC5NYXRoLm1heChKRChXTWIobyxLSGMpLDE3KS5hLEpEKFdNYihvLExIYyksMTcpLmEpO3Y9SkQoV01iKGYsKEJ3YygpLFB2YykpLDE3KS5hO2lmKHY+PWomJnY+PXEpe20rPW8ubi5iK3Aubi5iK3AuYS5iLXU7KytofX19fWlmKGMpe2ZvcihnPW5ldyBybWIocy5lKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTgpO3A9Zi5jO289cC5pO2lmKGIhPWEuYVtvLnBdKXtxPSR3bmQuTWF0aC5tYXgoSkQoV01iKG8sS0hjKSwxNykuYSxKRChXTWIobyxMSGMpLDE3KS5hKTt2PUpEKFdNYihmLChCd2MoKSxQdmMpKSwxNykuYTtpZih2Pj1qJiZ2Pj1xKXttKz1vLm4uYitwLm4uYitwLmEuYi11OysraH19fX19aWYoaD4wKXt3Kz1tL2g7KytufX1pZihuPjApe2IuYT1lKncvbjtiLmc9bn1lbHNle2IuYT0wO2IuZz0wfX0KZnVuY3Rpb24gUkdiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aD1uZXcgTkliKGIpO3RLYihoLGQpO2U9dHJ1ZTtpZighIWEmJmEubmYoKExnZCgpLCRlZCkpKXtmPUpEKGEubWYoKExnZCgpLCRlZCkpLDg2KTtlPWY9PShUZ2QoKSxSZ2QpfHxmPT1QZ2R8fGY9PVFnZH1qS2IoaCxmYWxzZSk7TGxiKGguZS5QZigpLG5ldyBvS2IoaCxmYWxzZSxlKSk7UEpiKGgsaC5mLChpSGIoKSxmSGIpLChSamQoKSx4amQpKTtQSmIoaCxoLmYsaEhiLE9qZCk7UEpiKGgsaC5nLGZIYixRamQpO1BKYihoLGguZyxoSGIsd2pkKTtSSmIoaCx4amQpO1JKYihoLE9qZCk7UUpiKGgsd2pkKTtRSmIoaCxRamQpO2FLYigpO2c9aC5BLkdjKCh5a2QoKSx1a2QpKSYmaC5CLkdjKChOa2QoKSxJa2QpKT9iS2IoaCk6bnVsbDshIWcmJkZIYihoLmEsZyk7Z0tiKGgpO0lKYihoKTtSS2IoaCk7REpiKGgpO3JLYihoKTtKS2IoaCk7ektiKGgseGpkKTt6S2IoaCxPamQpO0VKYihoKTtxS2IoaCk7aWYoIWMpe3JldHVybiBoLm99ZUtiKGgpO05LYihoKTt6S2IoaCx3amQpO3pLYihoLFFqZCk7aT1oLkIuR2MoKE5rZCgpLEprZCkpO1RKYihoLGkseGpkKTtUSmIoaCxpLE9qZCk7VUpiKGgsaSx3amQpO1VKYihoLGksUWpkKTtFQmIobmV3IFJCYihudWxsLG5ldyBHdmIobmV3IFpqYihoLmkpLDApKSxuZXcgVkpiKTtFQmIoQkJiKG5ldyBSQmIobnVsbCxpaShoLnIpLmEub2MoKSksbmV3IFhKYiksbmV3IFpKYik7ZktiKGgpO2guZS5OZihoLm8pO0VCYihuZXcgUkJiKG51bGwsaWkoaC5yKS5hLm9jKCkpLG5ldyBoS2IpO3JldHVybiBoLm99CmZ1bmN0aW9uIFZSYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7aj1Lc2U7Zm9yKGQ9bmV3IHJtYihhLmEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2I9SkQocG1iKGQpLDgyKTtqPSR3bmQuTWF0aC5taW4oaixiLmQuZi5nLmMrYi5lLmEpfW49bmV3IE10Yjtmb3IoZz1uZXcgcm1iKGEuYS5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTk0KTtmLmk9ajtmLmU9PTAmJihEdGIobixmLG4uYy5iLG4uYyksdHJ1ZSl9d2hpbGUobi5iIT0wKXtmPUpEKG4uYj09MD9udWxsOihyRGIobi5iIT0wKSxLdGIobixuLmEuYSkpLDE5NCk7ZT1mLmYuZy5jO2ZvcihtPWYuYS5hLmVjKCkuSmMoKTttLk9iKCk7KXtrPUpEKG0uUGIoKSw4Mik7cD1mLmkray5lLmE7ay5kLmd8fGsuZy5jPHA/KGsubz1wKTooay5vPWsuZy5jKX1lLT1mLmYubztmLmIrPWU7YS5jPT0oVGdkKCksUWdkKXx8YS5jPT1PZ2Q/KGYuYys9ZSk6KGYuYy09ZSk7Zm9yKGw9Zi5hLmEuZWMoKS5KYygpO2wuT2IoKTspe2s9SkQobC5QYigpLDgyKTtmb3IoaT1rLmYuSmMoKTtpLk9iKCk7KXtoPUpEKGkuUGIoKSw4Mik7VWdkKGEuYyk/KG89YS5mLndmKGssaCkpOihvPWEuZi54ZihrLGgpKTtoLmQuaT0kd25kLk1hdGgubWF4KGguZC5pLGsubytrLmcuYitvLWguZS5hKTtoLmt8fChoLmQuaT0kd25kLk1hdGgubWF4KGguZC5pLGguZy5jLWguZS5hKSk7LS1oLmQuZTtoLmQuZT09MCYmQXRiKG4saC5kKX19fWZvcihjPW5ldyBybWIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSw4Mik7Yi5nLmM9Yi5vfX0KZnVuY3Rpb24gV1ZjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3O2MuU2coV3plLDEpO209KHRVYygpLCRUYyk7YS5hPT0odlZjKCksc1ZjKSYmKG09WVRjKTtrPTA7cG5iKCk7Yi5nZChuZXcgVkJkKG0pKTtmPWIuZ2MoKTtoPWIuZGQoYi5nYygpKTtqPXRydWU7d2hpbGUoaiYmaC5TYigpKXtzPUpEKGguVWIoKSwzOSk7SkQoV01iKHMsbSksMTcpLmE9PTA/LS1mOihqPWZhbHNlKX13PWIuaGQoMCxmKTtnPW5ldyBOdGIodyk7dz1iLmhkKGYsYi5nYygpKTtpPW5ldyBOdGIodyk7aWYoZy5iPT0wKXtmb3IocD1HdGIoaSwwKTtwLmIhPXAuZC5jOyl7bz1KRChVdGIocCksMzkpO1pNYihvLGxVYyxqZmIoaysrKSl9fWVsc2V7bD1nLmI7Zm9yKHY9R3RiKGcsMCk7di5iIT12LmQuYzspe3U9SkQoVXRiKHYpLDM5KTtaTWIodSxsVWMsamZiKGsrKykpO2Q9YlJjKHUpO1dWYyhhLGQsYy5iaCgxL2x8MCkpO2h1YihkLHduYihuZXcgVkJkKGxVYykpKTtuPW5ldyBNdGI7Zm9yKHQ9R3RiKGQsMCk7dC5iIT10LmQuYzspe3M9SkQoVXRiKHQpLDM5KTtmb3Iocj1HdGIodS5kLDApO3IuYiE9ci5kLmM7KXtxPUpEKFV0YihyKSw2NSk7cS5jPT1zJiYoRHRiKG4scSxuLmMuYixuLmMpLHRydWUpfX1MdGIodS5kKTt4ZSh1LmQsbik7aD1HdGIoaSxpLmIpO2U9dS5kLmI7aj10cnVlO3doaWxlKDA8ZSYmaiYmaC5TYigpKXtzPUpEKGguVWIoKSwzOSk7aWYoSkQoV01iKHMsbSksMTcpLmE9PTApe1pNYihzLGxVYyxqZmIoaysrKSk7LS1lO2guUWIoKX1lbHNle2o9ZmFsc2V9fX19Yy5UZygpfQpmdW5jdGlvbiBENWIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7Yi5TZygnSW52ZXJ0ZWQgcG9ydCBwcmVwcm9jZXNzaW5nJywxKTtrPWEuYjtqPW5ldyBBamIoaywwKTtjPW51bGw7dD1uZXcgVWxiO3doaWxlKGouYjxqLmQuZ2MoKSl7cz1jO2M9KHJEYihqLmI8ai5kLmdjKCkpLEpEKGouZC5YYihqLmM9ai5iKyspLDI1KSk7Zm9yKG49bmV3IHJtYih0KTtuLmE8bi5jLmMubGVuZ3RoOyl7bD1KRChwbWIobiksOSk7cVliKGwscyl9dC5jLmxlbmd0aD0wO2ZvcihvPW5ldyBybWIoYy5hKTtvLmE8by5jLmMubGVuZ3RoOyl7bD1KRChwbWIobyksOSk7aWYobC5rIT0oRFliKCksQVliKSl7Y29udGludWV9aWYoIWNqZChKRChXTWIobCwoQndjKCksRXZjKSksMTAwKSkpe2NvbnRpbnVlfWZvcihyPW5ZYihsLChFeWMoKSxCeWMpLChSamQoKSx3amQpKS5KYygpO3IuT2IoKTspe3A9SkQoci5QYigpLDExKTtpPXAuZTtoPUpEKFRsYihpLFNDKENQLEl2ZSwxOCxpLmMubGVuZ3RoLDAsMSkpLDQ2OSk7Zm9yKGU9aCxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07QjViKGEscCxkLHQpfX1mb3IocT1uWWIobCxDeWMsUWpkKS5KYygpO3EuT2IoKTspe3A9SkQocS5QYigpLDExKTtpPXAuZztoPUpEKFRsYihpLFNDKENQLEl2ZSwxOCxpLmMubGVuZ3RoLDAsMSkpLDQ2OSk7Zm9yKGU9aCxmPTAsZz1lLmxlbmd0aDtmPGc7KytmKXtkPWVbZl07QzViKGEscCxkLHQpfX19fWZvcihtPW5ldyBybWIodCk7bS5hPG0uYy5jLmxlbmd0aDspe2w9SkQocG1iKG0pLDkpO3FZYihsLGMpfWIuVGcoKX0KZnVuY3Rpb24gVlpjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2w9QmViKE1EKGtzZChhLChiX2MoKSxaJGMpKSkpO2lmKHlkYihMRChrc2QoYSxYJGMpKSkpe2s9SkQoa3NkKGEsKHhZYygpLHdZYykpLDI3KTtmPUpEKG5EZChRdGQoSkQobkRkKCghay5lJiYoay5lPW5ldyByZWUoeDMsayw3LDQpKSxrLmUpLCghay5lJiYoay5lPW5ldyByZWUoeDMsayw3LDQpKSxrLmUpLmktMSksODUpKSwwKSwyNyk7ZD1KRChuRGQoUXRkKEpEKG5EZCgoIWsuZSYmKGsuZT1uZXcgcmVlKHgzLGssNyw0KSksay5lKSwwKSw4NSkpLDApLDI3KTtnPW5ldyBFZGQoZi5pK2YuZy8yLGYuaitmLmYvMik7ZT1uZXcgRWRkKGQuaStkLmcvMixkLmorZC5mLzIpO2M9bDtjPD0wJiYoYys9JHplKTttPSR3bmQuTWF0aC5hY29zKChnLmEqZS5hK2cuYiplLmIpLygkd25kLk1hdGguc3FydChnLmEqZy5hK2cuYipnLmIpKiR3bmQuTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYikpKTttPD0wJiYobSs9JHplKTtiPSR3bmQuTWF0aC5hdGFuMihnLmIsZy5hKTtiPD0wJiYoYis9JHplKTtsPUF6ZS0oYi1jK20vMil9Zm9yKGk9bmV3IENIZCgoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpKTtpLmUhPWkuaS5nYygpOyl7aD1KRChBSGQoaSksMjcpO2o9bmV3IEVkZChoLmkraC5nLzIsaC5qK2guZi8yKTtuPWouYSokd25kLk1hdGguY29zKGwpLWouYiokd25kLk1hdGguc2luKGwpO2ouYj1qLmEqJHduZC5NYXRoLnNpbihsKStqLmIqJHduZC5NYXRoLmNvcyhsKTtqLmE9bjtmdGQoaCxqLmEtaC5nLzIsai5iLWguZi8yKX19CmZ1bmN0aW9uIEJfYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO3A9YS5uO3E9YS5vO209YS5kO2w9QmViKE1EKGt6YyhhLChCd2MoKSxUdmMpKSkpO2lmKGIpe2s9bCooYi5nYygpLTEpO249MDtmb3IoaT1iLkpjKCk7aS5PYigpOyl7Zz1KRChpLlBiKCksOSk7ays9Zy5vLmE7bj0kd25kLk1hdGgubWF4KG4sZy5vLmIpfXI9cC5hLShrLXEuYSkvMjtmPXAuYi1tLmQrbjtkPXEuYS8oYi5nYygpKzEpO2U9ZDtmb3IoaD1iLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksOSk7Zy5uLmE9cjtnLm4uYj1mLWcuby5iO3IrPWcuby5hK2w7aj16X2IoZyk7ai5uLmE9Zy5vLmEvMi1qLmEuYTtqLm4uYj1nLm8uYjtvPUpEKFdNYihnLChJcWMoKSxIcGMpKSwxMSk7aWYoby5lLmMubGVuZ3RoK28uZy5jLmxlbmd0aD09MSl7by5uLmE9ZS1vLmEuYTtvLm4uYj0wO19ZYihvLGEpfWUrPWR9fWlmKGMpe2s9bCooYy5nYygpLTEpO249MDtmb3IoaT1jLkpjKCk7aS5PYigpOyl7Zz1KRChpLlBiKCksOSk7ays9Zy5vLmE7bj0kd25kLk1hdGgubWF4KG4sZy5vLmIpfXI9cC5hLShrLXEuYSkvMjtmPXAuYitxLmIrbS5hLW47ZD1xLmEvKGMuZ2MoKSsxKTtlPWQ7Zm9yKGg9Yy5KYygpO2guT2IoKTspe2c9SkQoaC5QYigpLDkpO2cubi5hPXI7Zy5uLmI9ZjtyKz1nLm8uYStsO2o9el9iKGcpO2oubi5hPWcuby5hLzItai5hLmE7ai5uLmI9MDtvPUpEKFdNYihnLChJcWMoKSxIcGMpKSwxMSk7aWYoby5lLmMubGVuZ3RoK28uZy5jLmxlbmd0aD09MSl7by5uLmE9ZS1vLmEuYTtvLm4uYj1xLmI7X1liKG8sYSl9ZSs9ZH19fQpmdW5jdGlvbiBRT2MoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7bT1udWxsO2Q9PShnUGMoKSxlUGMpPyhtPWIpOmQ9PWZQYyYmKG09Yyk7Zm9yKHA9bS5hLmVjKCkuSmMoKTtwLk9iKCk7KXtvPUpEKHAuUGIoKSwxMSk7cT1LZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbby5pLm4sby5uLG8uYV0pKS5iO3Q9bmV3IFFyYjtoPW5ldyBRcmI7Zm9yKGo9bmV3IHhaYihvLmIpO29tYihqLmEpfHxvbWIoai5iKTspe2k9SkQob21iKGouYSk/cG1iKGouYSk6cG1iKGouYiksMTgpO2lmKHlkYihMRChXTWIoaSwoSXFjKCkseHFjKSkpKSE9ZSl7Y29udGludWV9aWYoTmxiKGYsaSwwKSE9LTEpe2kuZD09bz8ocj1pLmMpOihyPWkuZCk7cz1LZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbci5pLm4sci5uLHIuYV0pKS5iO2lmKCR3bmQuTWF0aC5hYnMocy1xKTwwLjIpe2NvbnRpbnVlfXM8cT9iLmEuX2Iocik/TnJiKHQsbmV3IHhvZChlUGMsaSkpOk5yYih0LG5ldyB4b2QoZlBjLGkpKTpiLmEuX2Iocik/TnJiKGgsbmV3IHhvZChlUGMsaSkpOk5yYihoLG5ldyB4b2QoZlBjLGkpKX19aWYodC5hLmdjKCk+MSl7bj1uZXcgQVBjKG8sdCxkKTtvZmIodCxuZXcgcVBjKGEsbikpO1lDYihnLmMsbik7Zm9yKGw9dC5hLmVjKCkuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSw0Nyk7UGxiKGYsay5iKX19aWYoaC5hLmdjKCk+MSl7bj1uZXcgQVBjKG8saCxkKTtvZmIoaCxuZXcgc1BjKGEsbikpO1lDYihnLmMsbik7Zm9yKGw9aC5hLmVjKCkuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSw0Nyk7UGxiKGYsay5iKX19fX0KZnVuY3Rpb24gVDNiKGEsYil7dmFyIGMsZCxlLGYsZyxoO2lmKCFKRChXTWIoYiwoSXFjKCksV3BjKSksMjIpLkdjKCgkb2MoKSxUb2MpKSl7cmV0dXJufWZvcihoPW5ldyBybWIoYi5hKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoaCksOSk7aWYoZi5rPT0oRFliKCksQVliKSl7ZT1KRChXTWIoZiwoQndjKCksY3ZjKSksMTM5KTthLmM9JHduZC5NYXRoLm1pbihhLmMsZi5uLmEtZS5iKTthLmE9JHduZC5NYXRoLm1heChhLmEsZi5uLmErZi5vLmErZS5jKTthLmQ9JHduZC5NYXRoLm1pbihhLmQsZi5uLmItZS5kKTthLmI9JHduZC5NYXRoLm1heChhLmIsZi5uLmIrZi5vLmIrZS5hKX19Zm9yKGc9bmV3IHJtYihiLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSw5KTtpZihmLmshPShEWWIoKSxBWWIpKXtzd2l0Y2goZi5rLmcpe2Nhc2UgMjpkPUpEKFdNYihmLChCd2MoKSxVdWMpKSwxNzEpO2lmKGQ9PShPcWMoKSxLcWMpKXtmLm4uYT1hLmMtMTA7UzNiKGYsbmV3ICQzYikuSmIobmV3IGI0YihmKSk7YnJlYWt9aWYoZD09TXFjKXtmLm4uYT1hLmErMTA7UzNiKGYsbmV3IGU0YikuSmIobmV3IGg0YihmKSk7YnJlYWt9Yz1KRChXTWIoZiwkcGMpLDMxMik7aWYoYz09KHFwYygpLHBwYykpe1IzYihmKS5KYihuZXcgazRiKGYpKTtmLm4uYj1hLmQtMTA7YnJlYWt9aWYoYz09bnBjKXtSM2IoZikuSmIobmV3IG40YihmKSk7Zi5uLmI9YS5iKzEwO2JyZWFrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJ1RoZSBub2RlIHR5cGUgJytmLmsrJyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAnK0RSKSk7fX19fQpmdW5jdGlvbiBzJGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7aT1uZXcgRWRkKGQuaStkLmcvMixkLmorZC5mLzIpO249ZyRiKGQpO289SkQoa3NkKGIsKEJ3YygpLEV2YykpLDEwMCk7cT1KRChrc2QoZCxKdmMpLDY0KTtpZighZExkKGpzZChkKSxEdmMpKXtkLmk9PTAmJmQuaj09MD8ocD0wKToocD1YbWQoZCxxKSk7bXNkKGQsRHZjLHApfWo9bmV3IEVkZChiLmcsYi5mKTtlPXBYYihkLG8scSxuLGosaSxuZXcgRWRkKGQuZyxkLmYpLEpEKFdNYihjLHJ1YyksODYpLGMpO1pNYihlLChJcWMoKSxrcWMpLGQpO2Y9SkQoTWxiKGUuaiwwKSwxMSk7JFliKGYscSRiKGQpKTtaTWIoZSxIdmMsKG9qZCgpLG1yYihtamQpKSk7bD1KRChrc2QoYixIdmMpLDE4MSkuR2Moa2pkKTtmb3IoaD1uZXcgQ0hkKCghZC5uJiYoZC5uPW5ldyBYMGQoejMsZCwxLDcpKSxkLm4pKTtoLmUhPWguaS5nYygpOyl7Zz1KRChBSGQoaCksMTUzKTtpZigheWRiKExEKGtzZChnLHN2YykpKSYmISFnLmEpe209dCRiKGcpO0lsYihmLmYsbSk7aWYoIWwpe2s9MDtxamQoSkQoa3NkKGIsSHZjKSwyMikpJiYoaz0kbWQobmV3IEVkZChnLmksZy5qKSxuZXcgRWRkKGcuZyxnLmYpLG5ldyBFZGQoZC5nLGQuZiksMCxxKSk7c3dpdGNoKHEuZyl7Y2FzZSAyOmNhc2UgNDptLm8uYT1rO2JyZWFrO2Nhc2UgMTpjYXNlIDM6bS5vLmI9azt9fX19Wk1iKGUsY3djLE1EKGtzZChad2QoYiksY3djKSkpO1pNYihlLGR3YyxNRChrc2QoWndkKGIpLGR3YykpKTtaTWIoZSxhd2MsTUQoa3NkKFp3ZChiKSxhd2MpKSk7SWxiKGMuYSxlKTtRaWIoYS5hLGQsZSl9CmZ1bmN0aW9uIHYkYihhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGosayxsO2o9bmV3IGJaYjtVTWIoaixiKTthWmIoaixKRChrc2QoYiwoQndjKCksSnZjKSksNjQpKTtaTWIoaiwoSXFjKCksa3FjKSxiKTtfWWIoaixjKTtsPWoubztsLmE9Yi5nO2wuYj1iLmY7az1qLm47ay5hPWIuaTtrLmI9Yi5qO1FpYihhLmEsYixqKTtnPXhCYihGQmIoREJiKG5ldyBSQmIobnVsbCwoIWIuZSYmKGIuZT1uZXcgcmVlKHgzLGIsNyw0KSksbmV3IEd2YihiLmUsMTYpKSksbmV3IEkkYiksbmV3IEEkYiksbmV3IEskYihiKSk7Z3x8KGc9eEJiKEZCYihEQmIobmV3IFJCYihudWxsLCghYi5kJiYoYi5kPW5ldyByZWUoeDMsYiw4LDUpKSxuZXcgR3ZiKGIuZCwxNikpKSxuZXcgTSRiKSxuZXcgQyRiKSxuZXcgTyRiKGIpKSk7Z3x8KGc9eEJiKG5ldyBSQmIobnVsbCwoIWIuZSYmKGIuZT1uZXcgcmVlKHgzLGIsNyw0KSksbmV3IEd2YihiLmUsMTYpKSksbmV3IFEkYikpO1pNYihqLFpwYywoeGRiKCksZz90cnVlOmZhbHNlKSk7d1hiKGosZixlLEpEKGtzZChiLEN2YyksOCkpO2ZvcihpPW5ldyBDSGQoKCFiLm4mJihiLm49bmV3IFgwZCh6MyxiLDEsNykpLGIubikpO2kuZSE9aS5pLmdjKCk7KXtoPUpEKEFIZChpKSwxNTMpOyF5ZGIoTEQoa3NkKGgsc3ZjKSkpJiYhIWguYSYmSWxiKGouZix0JGIoaCkpfXN3aXRjaChlLmcpe2Nhc2UgMjpjYXNlIDE6KGouaj09KFJqZCgpLHhqZCl8fGouaj09T2pkKSYmZC5FYygoJG9jKCksWG9jKSk7YnJlYWs7Y2FzZSA0OmNhc2UgMzooai5qPT0oUmpkKCksd2pkKXx8ai5qPT1RamQpJiZkLkVjKCgkb2MoKSxYb2MpKTt9cmV0dXJuIGp9CmZ1bmN0aW9uIFl5ZChhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRyxIO0Y9TmliKGEuZyxlKTtpZihGPT1udWxsKXtGPW5ldyBtQztvPUpEKEYsMTQ3KTt0PWIrJ19zJzt1PXQrZjtuPW5ldyBHQyh1KTtrQyhvLHZEZSxuKX1EPUpEKEYsMTQ3KTtTeGQoYyxEKTtIPW5ldyBtQztVeGQoSCwneCcsc3lkKGEsZCxlLmopKTtVeGQoSCwneScsdHlkKGEsZCxlLmspKTtrQyhELHlEZSxIKTtCPW5ldyBtQztVeGQoQiwneCcsc3lkKGEsZCxlLmIpKTtVeGQoQiwneScsdHlkKGEsZCxlLmMpKTtrQyhELCdlbmRQb2ludCcsQik7bT15cWUoKCFlLmEmJihlLmE9bmV3IHFWZCh1MyxlLDUpKSxlLmEpKTtwPSFtO2lmKHApe0E9bmV3IEVCO2c9bmV3IExBZChhLGQsQSk7b2ZiKCghZS5hJiYoZS5hPW5ldyBxVmQodTMsZSw1KSksZS5hKSxnKTtrQyhELG9EZSxBKX1qPWZ1ZChlKTt2PSEhajt2JiZWeGQoYS5hLEQscURlLHh5ZChhLGZ1ZChlKSkpO3M9Z3VkKGUpO3c9ISFzO3cmJlZ4ZChhLmEsRCxwRGUseHlkKGEsZ3VkKGUpKSk7az0oIWUuZSYmKGUuZT1uZXcgcmVlKHczLGUsMTAsOSkpLGUuZSkuaT09MDtxPSFrO2lmKHEpe0M9bmV3IEVCO2g9bmV3IE5BZChhLEMpO29mYigoIWUuZSYmKGUuZT1uZXcgcmVlKHczLGUsMTAsOSkpLGUuZSksaCk7a0MoRCxzRGUsQyl9bD0oIWUuZyYmKGUuZz1uZXcgcmVlKHczLGUsOSwxMCkpLGUuZykuaT09MDtyPSFsO2lmKHIpe0c9bmV3IEVCO2k9bmV3IFJBZChhLEcpO29mYigoIWUuZyYmKGUuZz1uZXcgcmVlKHczLGUsOSwxMCkpLGUuZyksaSk7a0MoRCxyRGUsRyl9fQpmdW5jdGlvbiBFX2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtiLlNnKCdDb21tZW50IHByZS1wcm9jZXNzaW5nJywxKTtjPTA7aT1uZXcgcm1iKGEuYSk7d2hpbGUoaS5hPGkuYy5jLmxlbmd0aCl7aD1KRChwbWIoaSksOSk7aWYoeWRiKExEKFdNYihoLChCd2MoKSxVdGMpKSkpKXsrK2M7ZT0wO2Q9bnVsbDtqPW51bGw7Zm9yKG89bmV3IHJtYihoLmopO28uYTxvLmMuYy5sZW5ndGg7KXttPUpEKHBtYihvKSwxMSk7ZSs9bS5lLmMubGVuZ3RoK20uZy5jLmxlbmd0aDtpZihtLmUuYy5sZW5ndGg9PTEpe2Q9SkQoTWxiKG0uZSwwKSwxOCk7aj1kLmN9aWYobS5nLmMubGVuZ3RoPT0xKXtkPUpEKE1sYihtLmcsMCksMTgpO2o9ZC5kfX1pZihlPT0xJiZqLmUuYy5sZW5ndGgrai5nLmMubGVuZ3RoPT0xJiYheWRiKExEKFdNYihqLmksVXRjKSkpKXtGX2IoaCxkLGosai5pKTtxbWIoaSl9ZWxzZXtyPW5ldyBVbGI7Zm9yKG49bmV3IHJtYihoLmopO24uYTxuLmMuYy5sZW5ndGg7KXttPUpEKHBtYihuKSwxMSk7Zm9yKGw9bmV3IHJtYihtLmcpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihsKSwxOCk7ay5kLmcuYy5sZW5ndGg9PTB8fChZQ2Ioci5jLGspLHRydWUpfWZvcihnPW5ldyBybWIobS5lKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTgpO2YuYy5lLmMubGVuZ3RoPT0wfHwoWUNiKHIuYyxmKSx0cnVlKX19Zm9yKHE9bmV3IHJtYihyKTtxLmE8cS5jLmMubGVuZ3RoOyl7cD1KRChwbWIocSksMTgpO2ZXYihwLHRydWUpfX19fWIuWmcoKSYmYi5fZygnRm91bmQgJytjKycgY29tbWVudCBib3hlcycpO2IuVGcoKX0KZnVuY3Rpb24gSm9kKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7dD0wO289MDtuPTA7bT0xO2ZvcihzPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7cy5lIT1zLmkuZ2MoKTspe3E9SkQoQUhkKHMpLDI3KTttKz1HcihuZXcgZXMoSXIoJEJkKHEpLmEuSmMoKSxuZXcgZXIpKSk7Qj1xLmc7bz0kd25kLk1hdGgubWF4KG8sQik7bD1xLmY7bj0kd25kLk1hdGgubWF4KG4sbCk7dCs9QipsfXA9KCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKS5pO2c9dCsyKmQqZCptKnA7Zj0kd25kLk1hdGguc3FydChnKTtpPSR3bmQuTWF0aC5tYXgoZipjLG8pO2g9JHduZC5NYXRoLm1heChmL2Msbik7Zm9yKHI9bmV3IENIZCgoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpKTtyLmUhPXIuaS5nYygpOyl7cT1KRChBSGQociksMjcpO0M9ZS5iKyh5dmIoYiwyNikqZXRlK3l2YihiLDI3KSpmdGUpKihpLXEuZyk7RD1lLmIrKHl2YihiLDI2KSpldGUreXZiKGIsMjcpKmZ0ZSkqKGgtcS5mKTtodGQocSxDKTtpdGQocSxEKX1BPWkrKGUuYitlLmMpO3c9aCsoZS5kK2UuYSk7Zm9yKHY9bmV3IENIZCgoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpKTt2LmUhPXYuaS5nYygpOyl7dT1KRChBSGQodiksMjcpO2ZvcihrPW5ldyBlcyhJcigkQmQodSkuYS5KYygpLG5ldyBlcikpO2NzKGspOyl7aj1KRChkcyhrKSw4NSk7UnRkKGopfHxJb2QoaixiLEEsdyl9fUErPWUuYitlLmM7dys9ZS5kK2UuYTttbmQoYSxBLHcsZmFsc2UsdHJ1ZSl9CmZ1bmN0aW9uIEZkYyhhKXt2YXIgYixjLGQsZTtFQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYS5iLDE2KSksbmV3IGZlYyksbmV3IGhlYyk7RGRjKGEpO0VCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5hLmIsMTYpKSxuZXcgamVjKSxuZXcgbGVjKTtpZihhLmM9PSh4aGQoKSx2aGQpKXtFQmIoQkJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihuZXcgT2piKGEuZiksMSkpLG5ldyB0ZWMpLG5ldyB2ZWMpLG5ldyB4ZWMoYSkpO0VCYihCQmIoRkJiKERCYihEQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5kLmIsMTYpKSxuZXcgQmVjKSxuZXcgRGVjKSxuZXcgRmVjKSxuZXcgSGVjKSxuZXcgSmVjKGEpKX1FQmIoQkJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihuZXcgT2piKGEuZiksMSkpLG5ldyBMZWMpLG5ldyBOZWMpLG5ldyBQZWMoYSkpO2U9bmV3IEVkZChLc2UsS3NlKTtiPW5ldyBFZGQoTHNlLExzZSk7Zm9yKGQ9bmV3IHJtYihhLmEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDYwKTtlLmE9JHduZC5NYXRoLm1pbihlLmEsYy5kLmMpO2UuYj0kd25kLk1hdGgubWluKGUuYixjLmQuZCk7Yi5hPSR3bmQuTWF0aC5tYXgoYi5hLGMuZC5jK2MuZC5iKTtiLmI9JHduZC5NYXRoLm1heChiLmIsYy5kLmQrYy5kLmEpfW1kZCh2ZGQoYS5kLmMpLHRkZChuZXcgRWRkKGUuYSxlLmIpKSk7bWRkKHZkZChhLmQuZiksQmRkKG5ldyBFZGQoYi5hLGIuYiksZSkpO0VkYyhhLGUsYik7VGliKGEuZik7VGliKGEuYik7VGliKGEuZyk7VGliKGEuZSk7YS5hLmEuYy5sZW5ndGg9MDthLmEuYi5jLmxlbmd0aD0wO2EuYT1udWxsO2EuZD1udWxsfQpmdW5jdGlvbiBSZmUoYSxiKXtQZmUoKTt2YXIgYyxkLGUsZixnLGgsaTt0aGlzLmE9bmV3IFVmZSh0aGlzKTt0aGlzLmI9YTt0aGlzLmM9Yjt0aGlzLmY9WGFlKGphZSgoR2ZlKCksRWZlKSxiKSk7aWYodGhpcy5mLmRjKCkpe2lmKChoPW1hZShFZmUsYSkpPT1iKXt0aGlzLmU9dHJ1ZTt0aGlzLmQ9bmV3IFVsYjt0aGlzLmY9bmV3IGhPZDt0aGlzLmYuRWMoZUdlKTtKRChPYWUoaWFlKEVmZSxXU2QoYSkpLCcnKSwyOSk9PWEmJnRoaXMuZi5FYyhuYWUoRWZlLFdTZChhKSkpO2ZvcihlPV85ZChFZmUsYSkuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwxNzgpO3N3aXRjaChUYWUoamFlKEVmZSxkKSkpe2Nhc2UgNDp7dGhpcy5kLkVjKGQpO2JyZWFrfWNhc2UgNTp7dGhpcy5mLkZjKFhhZShqYWUoRWZlLGQpKSk7YnJlYWt9fX19ZWxzZXtJZmUoKTtpZihKRChiLDY5KS51aygpKXt0aGlzLmU9dHJ1ZTt0aGlzLmY9bnVsbDt0aGlzLmQ9bmV3IFVsYjtmb3IoZz0wLGk9KGEuaT09bnVsbCYmTVRkKGEpLGEuaSkubGVuZ3RoO2c8aTsrK2cpe2Q9KGM9KGEuaT09bnVsbCYmTVRkKGEpLGEuaSksZz49MCYmZzxjLmxlbmd0aD9jW2ddOm51bGwpO2ZvcihmPVVhZShqYWUoRWZlLGQpKTtmO2Y9VWFlKGphZShFZmUsZikpKXtmPT1iJiZ0aGlzLmQuRWMoZCl9fX1lbHNlIGlmKFRhZShqYWUoRWZlLGIpKT09MSYmISFoKXt0aGlzLmY9bnVsbDt0aGlzLmQ9KGVoZSgpLGRoZSl9ZWxzZXt0aGlzLmY9bnVsbDt0aGlzLmU9dHJ1ZTt0aGlzLmQ9KHBuYigpLG5ldyBkb2IoYikpfX19ZWxzZXt0aGlzLmU9VGFlKGphZShFZmUsYikpPT01O3RoaXMuZi5GYihPZmUpJiYodGhpcy5mPU9mZSl9fQpmdW5jdGlvbiBCS2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbztjPTA7ZD1BS2IoYSxiKTttPWEucztuPWEudDtmb3Ioaj1KRChKRChRYyhhLnIsYiksMjIpLDgzKS5KYygpO2ouT2IoKTspe2k9SkQoai5QYigpLDExNSk7aWYoIWkuY3x8aS5jLmQuYy5sZW5ndGg8PTApe2NvbnRpbnVlfW89aS5iLktmKCk7aD1pLmIubmYoKExnZCgpLFhmZCkpP0JlYihNRChpLmIubWYoWGZkKSkpOjA7az1pLmM7bD1rLmk7bC5iPShnPWsubixrLmUuYStnLmIrZy5jKTtsLmE9KGY9ay5uLGsuZS5iK2YuZCtmLmEpO3N3aXRjaChiLmcpe2Nhc2UgMTpsLmM9aS5hPyhvLmEtbC5iKS8yOm8uYSttO2wuZD1vLmIraCtkO2FJYihrLChQSGIoKSxNSGIpKTtiSWIoaywoR0liKCksRkliKSk7YnJlYWs7Y2FzZSAzOmwuYz1pLmE/KG8uYS1sLmIpLzI6by5hK207bC5kPS1oLWQtbC5hO2FJYihrLChQSGIoKSxNSGIpKTtiSWIoaywoR0liKCksREliKSk7YnJlYWs7Y2FzZSAyOmwuYz0taC1kLWwuYjtpZihpLmEpe2U9YS52P2wuYTpKRChNbGIoay5kLDApLDE4NykuS2YoKS5iO2wuZD0oby5iLWUpLzJ9ZWxzZXtsLmQ9by5iK259YUliKGssKFBIYigpLE9IYikpO2JJYihrLChHSWIoKSxFSWIpKTticmVhaztjYXNlIDQ6bC5jPW8uYStoK2Q7aWYoaS5hKXtlPWEudj9sLmE6SkQoTWxiKGsuZCwwKSwxODcpLktmKCkuYjtsLmQ9KG8uYi1lKS8yfWVsc2V7bC5kPW8uYitufWFJYihrLChQSGIoKSxOSGIpKTtiSWIoaywoR0liKCksRUliKSk7fShiPT0oUmpkKCkseGpkKXx8Yj09T2pkKSYmKGM9JHduZC5NYXRoLm1heChjLGwuYSkpfWM+MCYmKEpEKEtxYihhLmIsYiksMTI2KS5hLmI9Yyl9CmZ1bmN0aW9uIEkyYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEY7dz1uZXcgVWxiO2ZvcihvPW5ldyBybWIoYS5iKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1KRChwbWIobyksMjUpO2ZvcihyPW5ldyBybWIobi5hKTtyLmE8ci5jLmMubGVuZ3RoOyl7cD1KRChwbWIociksOSk7aWYocC5rIT0oRFliKCksd1liKSl7Y29udGludWV9aWYoIVhNYihwLChJcWMoKSxTcGMpKSl7Y29udGludWV9cz1udWxsO3U9bnVsbDt0PW51bGw7Zm9yKEM9bmV3IHJtYihwLmopO0MuYTxDLmMuYy5sZW5ndGg7KXtCPUpEKHBtYihDKSwxMSk7c3dpdGNoKEIuai5nKXtjYXNlIDQ6cz1CO2JyZWFrO2Nhc2UgMjp1PUI7YnJlYWs7ZGVmYXVsdDp0PUI7fX12PUpEKE1sYih0LmcsMCksMTgpO2s9bmV3IFNkZCh2LmEpO2o9bmV3IEZkZCh0Lm4pO21kZChqLHAubik7bD1HdGIoaywwKTtTdGIobCxqKTtBPVZkZCh2LmEpO209bmV3IEZkZCh0Lm4pO21kZChtLHAubik7RHRiKEEsbSxBLmMuYixBLmMpO0Q9SkQoV01iKHAsU3BjKSw5KTtGPUpEKE1sYihELmosMCksMTEpO2k9SkQoVGxiKHMuZSxTQyhDUCxJdmUsMTgsMCwwLDEpKSw0NjkpO2ZvcihkPWksZj0wLGg9ZC5sZW5ndGg7ZjxoOysrZil7Yj1kW2ZdO2hXYihiLEYpO05kZChiLmEsYi5hLmIsayl9aT1DWGIodS5nKTtmb3IoYz1pLGU9MCxnPWMubGVuZ3RoO2U8ZzsrK2Upe2I9Y1tlXTtnV2IoYixGKTtOZGQoYi5hLDAsQSl9Z1diKHYsbnVsbCk7aFdiKHYsbnVsbCk7WUNiKHcuYyxwKX19Zm9yKHE9bmV3IHJtYih3KTtxLmE8cS5jLmMubGVuZ3RoOyl7cD1KRChwbWIocSksOSk7cVliKHAsbnVsbCl9fQpmdW5jdGlvbiBKNWIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO209QmViKE1EKFdNYihhLChCd2MoKSxjd2MpKSkpO249QmViKE1EKFdNYihhLGR3YykpKTtsPUJlYihNRChXTWIoYSxhd2MpKSk7aD1hLm87Zj1KRChNbGIoYS5qLDApLDExKTtnPWYubjtwPUg1YihmLGwpO2lmKCFwKXtyZXR1cm59aWYoYi5HYygob2pkKCksa2pkKSkpe3N3aXRjaChKRChXTWIoYSwoSXFjKCksVHBjKSksNjQpLmcpe2Nhc2UgMTpwLmM9KGguYS1wLmIpLzItZy5hO3AuZD1uO2JyZWFrO2Nhc2UgMzpwLmM9KGguYS1wLmIpLzItZy5hO3AuZD0tbi1wLmE7YnJlYWs7Y2FzZSAyOmlmKGMmJmYuZS5jLmxlbmd0aD09MCYmZi5nLmMubGVuZ3RoPT0wKXtrPWQ/cC5hOkpEKE1sYihmLmYsMCksNzIpLm8uYjtwLmQ9KGguYi1rKS8yLWcuYn1lbHNle3AuZD1oLmIrbi1nLmJ9cC5jPS1tLXAuYjticmVhaztjYXNlIDQ6aWYoYyYmZi5lLmMubGVuZ3RoPT0wJiZmLmcuYy5sZW5ndGg9PTApe2s9ZD9wLmE6SkQoTWxiKGYuZiwwKSw3Mikuby5iO3AuZD0oaC5iLWspLzItZy5ifWVsc2V7cC5kPWguYituLWcuYn1wLmM9bTt9fWVsc2UgaWYoYi5HYyhtamQpKXtzd2l0Y2goSkQoV01iKGEsKElxYygpLFRwYykpLDY0KS5nKXtjYXNlIDE6Y2FzZSAzOnAuYz1nLmErbTticmVhaztjYXNlIDI6Y2FzZSA0OmlmKGMmJiFmLmMpe2s9ZD9wLmE6SkQoTWxiKGYuZiwwKSw3Mikuby5iO3AuZD0oaC5iLWspLzItZy5ifWVsc2V7cC5kPWcuYitufX19ZT1wLmQ7Zm9yKGo9bmV3IHJtYihmLmYpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSw3Mik7bz1pLm47by5hPXAuYztvLmI9ZTtlKz1pLm8uYitsfX0KZnVuY3Rpb24gTkliKGEpe3ZhciBiO3RoaXMucj1MeShuZXcgUUliLG5ldyBVSWIpO3RoaXMuYj1uZXcgT3FiKEpEKFFiKHYyKSwyOTUpKTt0aGlzLnA9bmV3IE9xYihKRChRYih2MiksMjk1KSk7dGhpcy5pPW5ldyBPcWIoSkQoUWIodk4pLDI5NSkpO3RoaXMuZT1hO3RoaXMubz1uZXcgRmRkKGEuS2YoKSk7dGhpcy5EPXlkYihMRChhLm1mKChMZ2QoKSxEZ2QpKSkpO3RoaXMuRj1hLldmKCl8fHlkYihMRChhLm1mKGxmZCkpKTt0aGlzLkE9SkQoYS5tZihCZmQpLDIyKTt0aGlzLkI9SkQoYS5tZihHZmQpLDIyKTt0aGlzLnE9SkQoYS5tZihZZmQpLDEwMCk7dGhpcy51PUpEKGEubWYoYWdkKSwyMik7aWYoIXJqZCh0aGlzLnUpKXt0aHJvdyBzY2IobmV3IFk4YygnSW52YWxpZCBwb3J0IGxhYmVsIHBsYWNlbWVudDogJyt0aGlzLnUpKX10aGlzLnY9eWRiKExEKGEubWYoY2dkKSkpO3RoaXMuaj1KRChhLm1mKHpmZCksMjIpO2lmKCFHaWQodGhpcy5qKSl7dGhyb3cgc2NiKG5ldyBZOGMoJ0ludmFsaWQgbm9kZSBsYWJlbCBwbGFjZW1lbnQ6ICcrdGhpcy5qKSl9dGhpcy5uPUpEKFBuZChhLHhmZCksMTA3KTt0aGlzLms9QmViKE1EKFBuZChhLHRnZCkpKTt0aGlzLmQ9QmViKE1EKFBuZChhLHNnZCkpKTt0aGlzLnc9QmViKE1EKFBuZChhLEFnZCkpKTt0aGlzLnM9QmViKE1EKFBuZChhLHVnZCkpKTt0aGlzLnQ9QmViKE1EKFBuZChhLHZnZCkpKTt0aGlzLkM9SkQoUG5kKGEseWdkKSwxMzkpO3RoaXMuYz0yKnRoaXMuZDtiPSF0aGlzLkIuR2MoKE5rZCgpLEVrZCkpO3RoaXMuZj1uZXcgb0liKDAsYiwwKTt0aGlzLmc9bmV3IG9JYigxLGIsMCk7bkliKHRoaXMuZiwoaUhiKCksZ0hiKSx0aGlzLmcpfQpmdW5jdGlvbiBZaWUoKXtrTmQoTmFiLG5ldyBEamUpO2tOZChQYWIsbmV3IGlrZSk7a05kKFFhYixuZXcgUGtlKTtrTmQoUmFiLG5ldyB1bGUpO2tOZChoSixuZXcgR2xlKTtrTmQoT0MoJEQsMSksbmV3IEpsZSk7a05kKEdJLG5ldyBNbGUpO2tOZChISSxuZXcgUGxlKTtrTmQoaEosbmV3IF9pZSk7a05kKGhKLG5ldyBjamUpO2tOZChoSixuZXcgZmplKTtrTmQoTEksbmV3IGlqZSk7a05kKGhKLG5ldyBsamUpO2tOZChISyxuZXcgb2plKTtrTmQoSEssbmV3IHJqZSk7a05kKGhKLG5ldyB1amUpO2tOZChRSSxuZXcgeGplKTtrTmQoaEosbmV3IEFqZSk7a05kKGhKLG5ldyBHamUpO2tOZChoSixuZXcgSmplKTtrTmQoaEosbmV3IE1qZSk7a05kKGhKLG5ldyBQamUpO2tOZChPQygkRCwxKSxuZXcgU2plKTtrTmQoaEosbmV3IFZqZSk7a05kKGhKLG5ldyBZamUpO2tOZChISyxuZXcgX2plKTtrTmQoSEssbmV3IGNrZSk7a05kKGhKLG5ldyBma2UpO2tOZChVSSxuZXcgbGtlKTtrTmQoaEosbmV3IG9rZSk7a05kKFhJLG5ldyBya2UpO2tOZChoSixuZXcgdWtlKTtrTmQoaEosbmV3IHhrZSk7a05kKGhKLG5ldyBBa2UpO2tOZChoSixuZXcgRGtlKTtrTmQoSEssbmV3IEdrZSk7a05kKEhLLG5ldyBKa2UpO2tOZChoSixuZXcgTWtlKTtrTmQoaEosbmV3IFNrZSk7a05kKGhKLG5ldyBWa2UpO2tOZChoSixuZXcgWWtlKTtrTmQoaEosbmV3IF9rZSk7a05kKGhKLG5ldyBjbGUpO2tOZChjSixuZXcgZmxlKTtrTmQoaEosbmV3IGlsZSk7a05kKGhKLG5ldyBsbGUpO2tOZChoSixuZXcgb2xlKTtrTmQoY0osbmV3IHJsZSk7a05kKFhJLG5ldyB4bGUpO2tOZChoSixuZXcgQWxlKTtrTmQoVUksbmV3IERsZSl9CmZ1bmN0aW9uIFZsYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2s9bmV3IFJkZDtzd2l0Y2goYS5hLmcpe2Nhc2UgMzptPUpEKFdNYihiLmUsKElxYygpLERxYykpLDE1KTtuPUpEKFdNYihiLmosRHFjKSwxNSk7bz1KRChXTWIoYi5mLERxYyksMTUpO2M9SkQoV01iKGIuZSxCcWMpLDE1KTtkPUpEKFdNYihiLmosQnFjKSwxNSk7ZT1KRChXTWIoYi5mLEJxYyksMTUpO2c9bmV3IFVsYjtLbGIoZyxtKTtuLkljKG5ldyBZbGMpO0tsYihnLGR2KG4pKTtLbGIoZyxvKTtmPW5ldyBVbGI7S2xiKGYsYyk7S2xiKGYsZHYoZCkpO0tsYihmLGUpO1pNYihiLmYsRHFjLGcpO1pNYihiLmYsQnFjLGYpO1pNYihiLmYsRXFjLGIuZik7Wk1iKGIuZSxEcWMsbnVsbCk7Wk1iKGIuZSxCcWMsbnVsbCk7Wk1iKGIuaixEcWMsbnVsbCk7Wk1iKGIuaixCcWMsbnVsbCk7YnJlYWs7Y2FzZSAxOnhlKGssYi5lLmEpO0F0YihrLGIuaS5uKTt4ZShrLGR2KGIuai5hKSk7QXRiKGssYi5hLm4pO3hlKGssYi5mLmEpO2JyZWFrO2RlZmF1bHQ6eGUoayxiLmUuYSk7eGUoayxkdihiLmouYSkpO3hlKGssYi5mLmEpO31MdGIoYi5mLmEpO3hlKGIuZi5hLGspO2dXYihiLmYsYi5lLmMpO2g9SkQoV01iKGIuZSwoQndjKCksUnVjKSksNzcpO2o9SkQoV01iKGIuaixSdWMpLDc3KTtpPUpEKFdNYihiLmYsUnVjKSw3Nyk7aWYoISFofHwhIWp8fCEhaSl7bD1uZXcgUmRkO1RsYyhsLGkpO1RsYyhsLGopO1RsYyhsLGgpO1pNYihiLmYsUnVjLGwpfWdXYihiLmosbnVsbCk7aFdiKGIuaixudWxsKTtnV2IoYi5lLG51bGwpO2hXYihiLmUsbnVsbCk7cVliKGIuYSxudWxsKTtxWWIoYi5pLG51bGwpOyEhYi5nJiZWbGMoYSxiLmcpfQpmdW5jdGlvbiBraGIoKXtraGI9WmNiO3ZhciBhLGIsYztuZXcgcmhiKDEsMCk7bmV3IHJoYigxMCwwKTtuZXcgcmhiKDAsMCk7Y2hiPVNDKGtKLGhyZSwyNDUsMTEsMCwxKTtkaGI9U0MoX0QsVXJlLDMwLDEwMCwxNSwxKTtlaGI9V0MoT0MoYUUsMSksUnNlLDMwLDE1LFsxLDUsMjUsMTI1LDYyNSwzMTI1LDE1NjI1LDc4MTI1LDM5MDYyNSwxOTUzMTI1LDk3NjU2MjUsNDg4MjgxMjUsMjQ0MTQwNjI1LDEyMjA3MDMxMjUsNjEwMzUxNTYyNSwzMDUxNzU3ODEyNSwxNTI1ODc4OTA2MjUsNzYyOTM5NDUzMTI1LDM4MTQ2OTcyNjU2MjUsMTkwNzM0ODYzMjgxMjUsOTUzNjc0MzE2NDA2MjUsNDc2ODM3MTU4MjAzMTI1LDIzODQxODU3OTEwMTU2MjVdKTtmaGI9U0MoY0UsaXNlLDMwLGVoYi5sZW5ndGgsMTUsMSk7Z2hiPVdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbMSwxMCwxMDAsVnJlLDEwMDAwLFNzZSwxMDAwMDAwLDEwMDAwMDAwLDEwMDAwMDAwMCxFc2UsMTAwMDAwMDAwMDAsMTAwMDAwMDAwMDAwLDEwMDAwMDAwMDAwMDAsMTAwMDAwMDAwMDAwMDAsMTAwMDAwMDAwMDAwMDAwLDEwMDAwMDAwMDAwMDAwMDAsMTAwMDAwMDAwMDAwMDAwMDBdKTtoaGI9U0MoY0UsaXNlLDMwLGdoYi5sZW5ndGgsMTUsMSk7aWhiPVNDKGtKLGhyZSwyNDUsMTEsMCwxKTthPTA7Zm9yKDthPGloYi5sZW5ndGg7YSsrKXtjaGJbYV09bmV3IHJoYihhLDApO2loYlthXT1uZXcgcmhiKDAsYSk7ZGhiW2FdPTQ4fWZvcig7YTxkaGIubGVuZ3RoO2ErKyl7ZGhiW2FdPTQ4fWZvcihjPTA7YzxmaGIubGVuZ3RoO2MrKyl7ZmhiW2NdPXRoYihlaGJbY10pfWZvcihiPTA7YjxoaGIubGVuZ3RoO2IrKyl7aGhiW2JdPXRoYihnaGJbYl0pfUNpYigpfQpmdW5jdGlvbiB3c2IoKXtmdW5jdGlvbiBlKCl7dGhpcy5vYmo9dGhpcy5jcmVhdGVPYmplY3QoKX0KO2UucHJvdG90eXBlLmNyZWF0ZU9iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKX07ZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9ialthXX07ZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5vYmpbYV09Yn07ZS5wcm90b3R5cGVbZHRlXT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5vYmpbYV19O2UucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5vYmopfTtlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5rZXlzKCk7dmFyIGM9dGhpczt2YXIgZD0wO3JldHVybiB7bmV4dDpmdW5jdGlvbigpe2lmKGQ+PWIubGVuZ3RoKXJldHVybiB7ZG9uZTp0cnVlfTt2YXIgYT1iW2QrK107cmV0dXJuIHt2YWx1ZTpbYSxjLmdldChhKV0sZG9uZTpmYWxzZX19fX07aWYoIXVzYigpKXtlLnByb3RvdHlwZS5jcmVhdGVPYmplY3Q9ZnVuY3Rpb24oKXtyZXR1cm4ge319O2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vYmpbJzonK2FdfTtlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLm9ialsnOicrYV09Yn07ZS5wcm90b3R5cGVbZHRlXT1mdW5jdGlvbihhKXtkZWxldGUgdGhpcy5vYmpbJzonK2FdfTtlLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIGE9W107Zm9yKHZhciBiIGluIHRoaXMub2JqKXtiLmNoYXJDb2RlQXQoMCk9PTU4JiZhLnB1c2goYi5zdWJzdHJpbmcoMSkpfXJldHVybiBhfX1yZXR1cm4gZX0KZnVuY3Rpb24gdFVjKCl7dFVjPVpjYjtrVWM9bmV3IEtCZChldmUpO25ldyBLQmQoZnZlKTtuZXcgTEJkKCdERVBUSCcsamZiKDApKTskVGM9bmV3IExCZCgnRkFOJyxqZmIoMCkpO1lUYz1uZXcgTEJkKEx6ZSxqZmIoMCkpO3FVYz1uZXcgTEJkKCdST09UJywoeGRiKCksZmFsc2UpKTtlVWM9bmV3IExCZCgnTEVGVE5FSUdIQk9SJyxudWxsKTtvVWM9bmV3IExCZCgnUklHSFRORUlHSEJPUicsbnVsbCk7ZlVjPW5ldyBMQmQoJ0xFRlRTSUJMSU5HJyxudWxsKTtwVWM9bmV3IExCZCgnUklHSFRTSUJMSU5HJyxudWxsKTtaVGM9bmV3IExCZCgnRFVNTVknLGZhbHNlKTtuZXcgTEJkKCdMRVZFTCcsamZiKDApKTtuVWM9bmV3IExCZCgnUkVNT1ZBQkxFX0VER0VTJyxuZXcgTXRiKTtyVWM9bmV3IExCZCgnWENPT1InLGpmYigwKSk7c1VjPW5ldyBMQmQoJ1lDT09SJyxqZmIoMCkpO2dVYz1uZXcgTEJkKCdMRVZFTEhFSUdIVCcsMCk7aVVjPW5ldyBMQmQoJ0xFVkVMTUlOJywwKTtoVWM9bmV3IExCZCgnTEVWRUxNQVgnLDApO2FVYz1uZXcgTEJkKCdHUkFQSF9YTUlOJywwKTtjVWM9bmV3IExCZCgnR1JBUEhfWU1JTicsMCk7X1RjPW5ldyBMQmQoJ0dSQVBIX1hNQVgnLDApO2JVYz1uZXcgTEJkKCdHUkFQSF9ZTUFYJywwKTtYVGM9bmV3IExCZCgnQ09NUEFDVF9MRVZFTF9BU0NFTlNJT04nLGZhbHNlKTtXVGM9bmV3IExCZCgnQ09NUEFDVF9DT05TVFJBSU5UUycsbmV3IFVsYik7ZFVjPW5ldyBMQmQoJ0lEJywnJyk7bFVjPW5ldyBMQmQoJ1BPU0lUSU9OJyxqZmIoMCkpO21VYz1uZXcgTEJkKCdQUkVMSU0nLDApO2pVYz1uZXcgTEJkKCdNT0RJRklFUicsMCk7VlRjPW5ldyBLQmQoZ3ZlKTtVVGM9bmV3IEtCZChodmUpfQpmdW5jdGlvbiBXbGUoYSl7VWxlKCk7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7aWYoYT09bnVsbClyZXR1cm4gbnVsbDtsPWEubGVuZ3RoKjg7aWYobD09MCl7cmV0dXJuICcnfWg9bCUyNDtuPWwvMjR8MDttPWghPTA/bisxOm47Zj1udWxsO2Y9U0MoX0QsVXJlLDMwLG0qNCwxNSwxKTtqPTA7az0wO2I9MDtjPTA7ZD0wO2c9MDtlPTA7Zm9yKGk9MDtpPG47aSsrKXtiPWFbZSsrXTtjPWFbZSsrXTtkPWFbZSsrXTtrPShjJjE1KTw8MjQ+PjI0O2o9KGImMyk8PDI0Pj4yNDtvPShiJi0xMjgpPT0wP2I+PjI8PDI0Pj4yNDooYj4+Ml4xOTIpPDwyND4+MjQ7cD0oYyYtMTI4KT09MD9jPj40PDwyND4+MjQ6KGM+PjReMjQwKTw8MjQ+PjI0O3E9KGQmLTEyOCk9PTA/ZD4+Njw8MjQ+PjI0OihkPj42XjI1Mik8PDI0Pj4yNDtmW2crK109VGxlW29dO2ZbZysrXT1UbGVbcHxqPDw0XTtmW2crK109VGxlW2s8PDJ8cV07ZltnKytdPVRsZVtkJjYzXX1pZihoPT04KXtiPWFbZV07aj0oYiYzKTw8MjQ+PjI0O289KGImLTEyOCk9PTA/Yj4+Mjw8MjQ+PjI0OihiPj4yXjE5Mik8PDI0Pj4yNDtmW2crK109VGxlW29dO2ZbZysrXT1UbGVbajw8NF07ZltnKytdPTYxO2ZbZysrXT02MX1lbHNlIGlmKGg9PTE2KXtiPWFbZV07Yz1hW2UrMV07az0oYyYxNSk8PDI0Pj4yNDtqPShiJjMpPDwyND4+MjQ7bz0oYiYtMTI4KT09MD9iPj4yPDwyND4+MjQ6KGI+PjJeMTkyKTw8MjQ+PjI0O3A9KGMmLTEyOCk9PTA/Yz4+NDw8MjQ+PjI0OihjPj40XjI0MCk8PDI0Pj4yNDtmW2crK109VGxlW29dO2ZbZysrXT1UbGVbcHxqPDw0XTtmW2crK109VGxlW2s8PDJdO2ZbZysrXT02MX1yZXR1cm4gemdiKGYsMCxmLmxlbmd0aCl9CmZ1bmN0aW9uIHVCKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk7YS5lPT0wJiZhLnA+MCYmKGEucD0tKGEucC0xKSk7YS5wPkxyZSYmbEIoYixhLnAtaHNlKTtnPWIucS5nZXREYXRlKCk7ZkIoYiwxKTthLms+PTAmJmlCKGIsYS5rKTtpZihhLmM+PTApe2ZCKGIsYS5jKX1lbHNlIGlmKGEuaz49MCl7aT1uZXcgbkIoYi5xLmdldEZ1bGxZZWFyKCktaHNlLGIucS5nZXRNb250aCgpLDM1KTtkPTM1LWkucS5nZXREYXRlKCk7ZkIoYiwkd25kLk1hdGgubWluKGQsZykpfWVsc2V7ZkIoYixnKX1hLmY8MCYmKGEuZj1iLnEuZ2V0SG91cnMoKSk7YS5iPjAmJmEuZjwxMiYmKGEuZis9MTIpO2dCKGIsYS5mPT0yNCYmYS5nPzA6YS5mKTthLmo+PTAmJmhCKGIsYS5qKTthLm4+PTAmJmpCKGIsYS5uKTthLmk+PTAmJmtCKGIsdGNiKEZjYih4Y2IoemNiKGIucS5nZXRUaW1lKCkpLFZyZSksVnJlKSxhLmkpKTtpZihhLmEpe2U9bmV3IG1CO2xCKGUsZS5xLmdldEZ1bGxZZWFyKCktaHNlLTgwKTtEY2IoemNiKGIucS5nZXRUaW1lKCkpLHpjYihlLnEuZ2V0VGltZSgpKSkmJmxCKGIsZS5xLmdldEZ1bGxZZWFyKCktaHNlKzEwMCl9aWYoYS5kPj0wKXtpZihhLmM9PS0xKXtjPSg3K2EuZC1iLnEuZ2V0RGF5KCkpJTc7Yz4zJiYoYy09Nyk7aD1iLnEuZ2V0TW9udGgoKTtmQihiLGIucS5nZXREYXRlKCkrYyk7Yi5xLmdldE1vbnRoKCkhPWgmJmZCKGIsYi5xLmdldERhdGUoKSsoYz4wPy03OjcpKX1lbHNle2lmKGIucS5nZXREYXkoKSE9YS5kKXtyZXR1cm4gZmFsc2V9fX1pZihhLm8+THJlKXtmPWIucS5nZXRUaW1lem9uZU9mZnNldCgpO2tCKGIsdGNiKHpjYihiLnEuZ2V0VGltZSgpKSwoYS5vLWYpKjYwKlZyZSkpfXJldHVybiB0cnVlfQpmdW5jdGlvbiBWJGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdTtlPVdNYihiLChJcWMoKSxrcWMpKTtpZighUkQoZSwyMDYpKXtyZXR1cm59bz1KRChlLDI3KTtwPWIuZTttPW5ldyBGZGQoYi5jKTtmPWIuZDttLmErPWYuYjttLmIrPWYuZDt1PUpEKGtzZChvLChCd2MoKSxydmMpKSwxODEpO2lmKHJyYih1LChOa2QoKSxGa2QpKSl7bj1KRChrc2Qobyx0dmMpLDEwNyk7T1hiKG4sZi5hKTtSWGIobixmLmQpO1BYYihuLGYuYik7UVhiKG4sZi5jKX1jPW5ldyBVbGI7Zm9yKGs9bmV3IHJtYihiLmEpO2suYTxrLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihrKSw5KTtpZihSRChXTWIoaSxrcWMpLDIwNikpe1ckYihpLG0pfWVsc2UgaWYoUkQoV01iKGksa3FjKSwxOTMpJiYhcCl7ZD1KRChXTWIoaSxrcWMpLDEyNCk7cz10WGIoYixpLGQuZyxkLmYpO2Z0ZChkLHMuYSxzLmIpfWZvcihyPW5ldyBybWIoaS5qKTtyLmE8ci5jLmMubGVuZ3RoOyl7cT1KRChwbWIociksMTEpO0VCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIocS5nLDE2KSksbmV3IGFfYihpKSksbmV3IGNfYihjKSl9fWlmKHApe2ZvcihyPW5ldyBybWIocC5qKTtyLmE8ci5jLmMubGVuZ3RoOyl7cT1KRChwbWIociksMTEpO0VCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIocS5nLDE2KSksbmV3IGVfYihwKSksbmV3IGdfYihjKSl9fXQ9SkQoa3NkKG8seXVjKSwyMjApO2ZvcihoPW5ldyBybWIoYyk7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDE4KTtVJGIoZyx0LG0pfVgkYihiKTtmb3Ioaj1uZXcgcm1iKGIuYSk7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDkpO2w9aS5lOyEhbCYmViRiKGEsbCl9fQpmdW5jdGlvbiBJS2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG47aWYoSkQoSkQoUWMoYS5yLGIpLDIyKSw4MykuZGMoKSl7cmV0dXJufWc9SkQoS3FiKGEuYixiKSwxMjYpO2k9Zy5pO2g9Zy5uO2s9TUliKGEsYik7ZD1pLmItaC5iLWguYztlPWcuYS5hO2Y9aS5jK2guYjtuPWEudztpZigoaz09KFFpZCgpLE5pZCl8fGs9PVBpZCkmJkpEKEpEKFFjKGEucixiKSwyMiksODMpLmdjKCk9PTEpe2U9az09TmlkP2UtMiphLnc6ZTtrPU1pZH1pZihkPGUmJiFhLkIuR2MoKE5rZCgpLEtrZCkpKXtpZihrPT1OaWQpe24rPShkLWUpLyhKRChKRChRYyhhLnIsYiksMjIpLDgzKS5nYygpKzEpO2YrPW59ZWxzZXtuKz0oZC1lKS8oSkQoSkQoUWMoYS5yLGIpLDIyKSw4MykuZ2MoKS0xKX19ZWxzZXtpZihkPGUpe2U9az09TmlkP2UtMiphLnc6ZTtrPU1pZH1zd2l0Y2goay5nKXtjYXNlIDM6Zis9KGQtZSkvMjticmVhaztjYXNlIDQ6Zis9ZC1lO2JyZWFrO2Nhc2UgMDpjPShkLWUpLyhKRChKRChRYyhhLnIsYiksMjIpLDgzKS5nYygpKzEpO24rPSR3bmQuTWF0aC5tYXgoMCxjKTtmKz1uO2JyZWFrO2Nhc2UgMTpjPShkLWUpLyhKRChKRChRYyhhLnIsYiksMjIpLDgzKS5nYygpLTEpO24rPSR3bmQuTWF0aC5tYXgoMCxjKTt9fWZvcihtPUpEKEpEKFFjKGEucixiKSwyMiksODMpLkpjKCk7bS5PYigpOyl7bD1KRChtLlBiKCksMTE1KTtsLmUuYT1mK2wuZC5iO2wuZS5iPShqPWwuYixqLm5mKChMZ2QoKSxYZmQpKT9qLiRmKCk9PShSamQoKSx4amQpPy1qLktmKCkuYi1CZWIoTUQoai5tZihYZmQpKSk6QmViKE1EKGoubWYoWGZkKSkpOmouJGYoKT09KFJqZCgpLHhqZCk/LWouS2YoKS5iOjApO2YrPWwuZC5iK2wuYi5LZigpLmErbC5kLmMrbn19CmZ1bmN0aW9uIE1LYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2lmKEpEKEpEKFFjKGEucixiKSwyMiksODMpLmRjKCkpe3JldHVybn1nPUpEKEtxYihhLmIsYiksMTI2KTtpPWcuaTtoPWcubjtsPU1JYihhLGIpO2Q9aS5hLWguZC1oLmE7ZT1nLmEuYjtmPWkuZCtoLmQ7bz1hLnc7aj1hLm8uYTtpZigobD09KFFpZCgpLE5pZCl8fGw9PVBpZCkmJkpEKEpEKFFjKGEucixiKSwyMiksODMpLmdjKCk9PTEpe2U9bD09TmlkP2UtMiphLnc6ZTtsPU1pZH1pZihkPGUmJiFhLkIuR2MoKE5rZCgpLEtrZCkpKXtpZihsPT1OaWQpe28rPShkLWUpLyhKRChKRChRYyhhLnIsYiksMjIpLDgzKS5nYygpKzEpO2YrPW99ZWxzZXtvKz0oZC1lKS8oSkQoSkQoUWMoYS5yLGIpLDIyKSw4MykuZ2MoKS0xKX19ZWxzZXtpZihkPGUpe2U9bD09TmlkP2UtMiphLnc6ZTtsPU1pZH1zd2l0Y2gobC5nKXtjYXNlIDM6Zis9KGQtZSkvMjticmVhaztjYXNlIDQ6Zis9ZC1lO2JyZWFrO2Nhc2UgMDpjPShkLWUpLyhKRChKRChRYyhhLnIsYiksMjIpLDgzKS5nYygpKzEpO28rPSR3bmQuTWF0aC5tYXgoMCxjKTtmKz1vO2JyZWFrO2Nhc2UgMTpjPShkLWUpLyhKRChKRChRYyhhLnIsYiksMjIpLDgzKS5nYygpLTEpO28rPSR3bmQuTWF0aC5tYXgoMCxjKTt9fWZvcihuPUpEKEpEKFFjKGEucixiKSwyMiksODMpLkpjKCk7bi5PYigpOyl7bT1KRChuLlBiKCksMTE1KTttLmUuYT0oaz1tLmIsay5uZigoTGdkKCksWGZkKSk/ay4kZigpPT0oUmpkKCksUWpkKT8tay5LZigpLmEtQmViKE1EKGsubWYoWGZkKSkpOmorQmViKE1EKGsubWYoWGZkKSkpOmsuJGYoKT09KFJqZCgpLFFqZCk/LWsuS2YoKS5hOmopO20uZS5iPWYrbS5kLmQ7Zis9bS5kLmQrbS5iLktmKCkuYittLmQuYStvfX0KZnVuY3Rpb24gZVRjKGEsYil7dmFyIGMsZCxlLGYsZztiLlNnKCdQcm9jZXNzb3IgZGV0ZXJtaW5lIHRoZSBjb29yZHMgZm9yIGVhY2ggbGV2ZWwnLDEpO2Q9bmV3IFVsYjtmb3IoZz1HdGIoYS5iLDApO2cuYiE9Zy5kLmM7KXtlPUpEKFV0YihnKSwzOSk7d2hpbGUoSkQoV01iKGUsKGtWYygpLGlWYykpLDE3KS5hPmQuYy5sZW5ndGgtMSl7SWxiKGQsbmV3IHhvZChtemUsRnplKSl9Yz1KRChXTWIoZSxpVmMpLDE3KS5hO2lmKFVnZChKRChXTWIoYSxLVWMpLDg2KSkpe2UuZS5hPEJlYihNRCgoc0RiKGMsZC5jLmxlbmd0aCksSkQoZC5jW2NdLDQ3KSkuYSkpJiZ2b2QoKHNEYihjLGQuYy5sZW5ndGgpLEpEKGQuY1tjXSw0NykpLGUuZS5hKTtlLmUuYStlLmYuYT5CZWIoTUQoKHNEYihjLGQuYy5sZW5ndGgpLEpEKGQuY1tjXSw0NykpLmIpKSYmd29kKChzRGIoYyxkLmMubGVuZ3RoKSxKRChkLmNbY10sNDcpKSxlLmUuYStlLmYuYSl9ZWxzZXtlLmUuYjxCZWIoTUQoKHNEYihjLGQuYy5sZW5ndGgpLEpEKGQuY1tjXSw0NykpLmEpKSYmdm9kKChzRGIoYyxkLmMubGVuZ3RoKSxKRChkLmNbY10sNDcpKSxlLmUuYik7ZS5lLmIrZS5mLmI+QmViKE1EKChzRGIoYyxkLmMubGVuZ3RoKSxKRChkLmNbY10sNDcpKS5iKSkmJndvZCgoc0RiKGMsZC5jLmxlbmd0aCksSkQoZC5jW2NdLDQ3KSksZS5lLmIrZS5mLmIpfX1mb3IoZj1HdGIoYS5iLDApO2YuYiE9Zi5kLmM7KXtlPUpEKFV0YihmKSwzOSk7Yz1KRChXTWIoZSwoa1ZjKCksaVZjKSksMTcpLmE7Wk1iKGUsKHRVYygpLGlVYyksTUQoKHNEYihjLGQuYy5sZW5ndGgpLEpEKGQuY1tjXSw0NykpLmEpKTtaTWIoZSxoVWMsTUQoKHNEYihjLGQuYy5sZW5ndGgpLEpEKGQuY1tjXSw0NykpLmIpKX1iLlRnKCl9CmZ1bmN0aW9uIGU4YihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7YS5vPUJlYihNRChXTWIoYS5pLChCd2MoKSxld2MpKSkpO2EuZj1CZWIoTUQoV01iKGEuaSwkdmMpKSk7YS5qPWEuaS5iLmMubGVuZ3RoO2g9YS5qLTE7bT0wO2Euaz0wO2Eubj0wO2EuYj1fdShTQyhVSSxocmUsMTcsYS5qLDAsMSkpO2EuYz1fdShTQyhMSSxocmUsMzQxLGEuaiw3LDEpKTtmb3IoZz1uZXcgcm1iKGEuaS5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZyksMjUpO2UucD1oO2ZvcihsPW5ldyBybWIoZS5hKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1KRChwbWIobCksOSk7ay5wPW07KyttfS0taH1hLmc9U0MoY0UsaXNlLDMwLG0sMTUsMSk7YS5kPVFDKGNFLFtocmUsaXNlXSxbNTQsMzBdLDE1LFttLDNdLDIpO2EucD1uZXcgVWxiO2EucT1uZXcgVWxiO2I9MDthLmU9MDtmb3IoZj1uZXcgcm1iKGEuaS5iKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjUpO2g9ZS5wO2Q9MDtwPTA7aT1lLmEuYy5sZW5ndGg7aj0wO2ZvcihsPW5ldyBybWIoZS5hKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1KRChwbWIobCksOSk7bT1rLnA7YS5nW21dPWsuYy5wO2orPWsuby5iK2EubztjPUdyKG5ldyBlcyhJcihoWWIoaykuYS5KYygpLG5ldyBlcikpKTtvPUdyKG5ldyBlcyhJcihrWWIoaykuYS5KYygpLG5ldyBlcikpKTthLmRbbV1bMF09by1jO2EuZFttXVsxXT1jO2EuZFttXVsyXT1vO2QrPWM7cCs9bztjPjAmJklsYihhLnEsayk7SWxiKGEucCxrKX1iLT1kO249aStiO2orPWIqYS5mO1JsYihhLmIsaCxqZmIobikpO1JsYihhLmMsaCxqKTthLms9JHduZC5NYXRoLm1heChhLmssbik7YS5uPSR3bmQuTWF0aC5tYXgoYS5uLGopO2EuZSs9YjtiKz1wfX0KZnVuY3Rpb24gd1NjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O2lmKGIuYiE9MCl7bj1uZXcgTXRiO2g9bnVsbDtvPW51bGw7ZD1ZRCgkd25kLk1hdGguZmxvb3IoJHduZC5NYXRoLmxvZyhiLmIpKiR3bmQuTWF0aC5MT0cxMEUpKzEpO2k9MDtmb3IodD1HdGIoYiwwKTt0LmIhPXQuZC5jOyl7cj1KRChVdGIodCksMzkpO2lmKFhEKG8pIT09WEQoV01iKHIsKHRVYygpLGRVYykpKSl7bz1PRChXTWIocixkVWMpKTtpPTB9byE9bnVsbD8oaD1vK3pTYyhpKyssZCkpOihoPXpTYyhpKyssZCkpO1pNYihyLGRVYyxoKTtmb3IocT0oZT1HdGIoKG5ldyBnUmMocikpLmEuZCwwKSxuZXcgalJjKGUpKTtUdGIocS5hKTspe3A9SkQoVXRiKHEuYSksNjUpLmM7RHRiKG4scCxuLmMuYixuLmMpO1pNYihwLGRVYyxoKX19bT1uZXcgSXJiO2ZvcihnPTA7ZzxoLmxlbmd0aC1kO2crKyl7Zm9yKHM9R3RiKGIsMCk7cy5iIT1zLmQuYzspe3I9SkQoVXRiKHMpLDM5KTtqPXFnYihPRChXTWIociwodFVjKCksZFVjKSkpLDAsZysxKTtjPShqPT1udWxsP1dkKGZzYihtLmYsbnVsbCkpOnpzYihtLmksaikpIT1udWxsP0pEKGo9PW51bGw/V2QoZnNiKG0uZixudWxsKSk6enNiKG0uaSxqKSwxNykuYSsxOjE7UmliKG0saixqZmIoYykpfX1mb3IobD1uZXcgbWpiKChuZXcgZGpiKG0pKS5hKTtsLmI7KXtrPWtqYihsKTtmPWpmYihOaWIoYS5hLGsuamQoKSkhPW51bGw/SkQoTmliKGEuYSxrLmpkKCkpLDE3KS5hOjApO1JpYihhLmEsT0Qoay5qZCgpKSxqZmIoSkQoay5rZCgpLDE3KS5hK2YuYSkpO2Y9SkQoTmliKGEuYixrLmpkKCkpLDE3KTsoIWZ8fGYuYTxKRChrLmtkKCksMTcpLmEpJiZSaWIoYS5iLE9EKGsuamQoKSksSkQoay5rZCgpLDE3KSl9d1NjKGEsbil9fQpmdW5jdGlvbiBlamMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtO2M9bnVsbDtpPW51bGw7ZT1KRChXTWIoYS5iLChCd2MoKSxDdWMpKSwzNDUpO2lmKGU9PShXeWMoKSxVeWMpKXtjPW5ldyBVbGI7aT1uZXcgVWxifWZvcihoPW5ldyBybWIoYS5kKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTA1KTtmPWcuaTtpZighZil7Y29udGludWV9c3dpdGNoKGcuZS5nKXtjYXNlIDA6Yj1KRChDcmIobmV3IERyYihnLmIpKSw2NCk7ZT09VXljJiZiPT0oUmpkKCkseGpkKT8oWUNiKGMuYyxnKSx0cnVlKTplPT1VeWMmJmI9PShSamQoKSxPamQpPyhZQ2IoaS5jLGcpLHRydWUpOmNqYyhnLGIpO2JyZWFrO2Nhc2UgMTpqPWcuYS5kLmo7az1nLmMuZC5qO2o9PShSamQoKSx4amQpP2RqYyhnLHhqZCwoRGdjKCksQWdjKSxnLmEpOms9PXhqZD9kamMoZyx4amQsKERnYygpLEJnYyksZy5jKTpqPT1PamQ/ZGpjKGcsT2pkLChEZ2MoKSxCZ2MpLGcuYSk6az09T2pkJiZkamMoZyxPamQsKERnYygpLEFnYyksZy5jKTticmVhaztjYXNlIDI6Y2FzZSAzOmQ9Zy5iO3JyYihkLChSamQoKSx4amQpKT9ycmIoZCxPamQpP3JyYihkLFFqZCk/cnJiKGQsd2pkKXx8ZGpjKGcseGpkLChEZ2MoKSxCZ2MpLGcuYyk6ZGpjKGcseGpkLChEZ2MoKSxBZ2MpLGcuYSk6ZGpjKGcseGpkLChEZ2MoKSx6Z2MpLG51bGwpOmRqYyhnLE9qZCwoRGdjKCksemdjKSxudWxsKTticmVhaztjYXNlIDQ6bD1nLmEuZC5qO209Zy5hLmQuajtsPT0oUmpkKCkseGpkKXx8bT09eGpkP2RqYyhnLE9qZCwoRGdjKCksemdjKSxudWxsKTpkamMoZyx4amQsKERnYygpLHpnYyksbnVsbCk7fX1pZihjKXtjLmMubGVuZ3RoPT0wfHxiamMoYywoUmpkKCkseGpkKSk7aS5jLmxlbmd0aD09MHx8YmpjKGksKFJqZCgpLE9qZCkpfX0KZnVuY3Rpb24gckFjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7Yy5TZygnQnJlYWR0aCBmaXJzdCBtb2RlbCBvcmRlciBsYXllcmluZycsMSk7YS5hPWI7cT1uZXcgVWxiO2ZvcihwPW5ldyBybWIoYS5hLmEpO3AuYTxwLmMuYy5sZW5ndGg7KXtuPUpEKHBtYihwKSw5KTtuLms9PShEWWIoKSxBWWIpJiYoWUNiKHEuYyxuKSx0cnVlKX1wbmIoKTtTbGIocSxuZXcgd0FjKTtpPXRydWU7ZT1uZXcgYiRiKGEuYSk7ZD1udWxsO0lsYihhLmEuYixlKTtmb3Iobz1uZXcgcm1iKHEpO28uYTxvLmMuYy5sZW5ndGg7KXtuPUpEKHBtYihvKSw5KTtpZihpKXtxWWIobixlKTtpPWZhbHNlfWVsc2V7Zm9yKGg9bmV3IGVzKElyKGhZYihuKS5hLkpjKCksbmV3IGVyKSk7Y3MoaCk7KXtmPUpEKGRzKGgpLDE4KTtpZihmLmMuaS5rPT0oRFliKCksQVliKSYmZi5jLmkuYz09ZXx8Zi5jLmkuaz09eFliJiZKRChkcyhuZXcgZXMoSXIoaFliKGYuYy5pKS5hLkpjKCksbmV3IGVyKSkpLDE4KS5jLmkuYz09ZSl7ZD1uZXcgYiRiKGEuYSk7SWxiKGEuYS5iLGQpO2U9bmV3IGIkYihhLmEpO0lsYihhLmEuYixlKX19Zm9yKGc9bmV3IGVzKElyKGhZYihuKS5hLkpjKCksbmV3IGVyKSk7Y3MoZyk7KXtmPUpEKGRzKGcpLDE4KTtmLmMuaS5rPT0oRFliKCkseFliKSYmIWYuYy5pLmMmJnFZYihmLmMuaSxkKX1xWWIobixlKX19YS5hLmEuYy5sZW5ndGg9MDtyPW5ldyBVbGI7Zm9yKGw9bmV3IHJtYihhLmEuYik7bC5hPGwuYy5jLmxlbmd0aDspe2o9SkQocG1iKGwpLDI1KTtqLmEuYy5sZW5ndGg9PTAmJihZQ2Ioci5jLGopLHRydWUpfUJlKGEuYS5iLHIpO209MDtmb3Ioaz1uZXcgcm1iKGEuYS5iKTtrLmE8ay5jLmMubGVuZ3RoOyl7aj1KRChwbWIoayksMjUpO2oucD1tOysrbX1jLlRnKCl9CmZ1bmN0aW9uIFJqZCgpe1JqZD1aY2I7dmFyIGE7UGpkPW5ldyBWamQoZXVlLDApO3hqZD1uZXcgVmpkKCdOT1JUSCcsMSk7d2pkPW5ldyBWamQoJ0VBU1QnLDIpO09qZD1uZXcgVmpkKCdTT1VUSCcsMyk7UWpkPW5ldyBWamQoJ1dFU1QnLDQpO0NqZD0ocG5iKCksbmV3IEFwYigoYT1KRChkZWIodjIpLDEwKSxuZXcgdXJiKGEsSkQoVkNiKGEsYS5sZW5ndGgpLDEwKSwwKSkpKTtEamQ9YXEobnJiKHhqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbXSkpKTt5amQ9YXEobnJiKHdqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbXSkpKTtMamQ9YXEobnJiKE9qZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbXSkpKTtOamQ9YXEobnJiKFFqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbXSkpKTtJamQ9YXEobnJiKHhqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbT2pkXSkpKTtCamQ9YXEobnJiKHdqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbUWpkXSkpKTtLamQ9YXEobnJiKHhqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbUWpkXSkpKTtFamQ9YXEobnJiKHhqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbd2pkXSkpKTtNamQ9YXEobnJiKE9qZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbUWpkXSkpKTt6amQ9YXEobnJiKHdqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbT2pkXSkpKTtIamQ9YXEobnJiKHhqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbd2pkLFFqZF0pKSk7QWpkPWFxKG5yYih3amQsV0MoT0ModjIsMSksQXZlLDY0LDAsW09qZCxRamRdKSkpO0pqZD1hcShucmIoeGpkLFdDKE9DKHYyLDEpLEF2ZSw2NCwwLFtPamQsUWpkXSkpKTtGamQ9YXEobnJiKHhqZCxXQyhPQyh2MiwxKSxBdmUsNjQsMCxbd2pkLE9qZF0pKSk7R2pkPWFxKG5yYih4amQsV0MoT0ModjIsMSksQXZlLDY0LDAsW3dqZCxPamQsUWpkXSkpKX0KZnVuY3Rpb24gVyRiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtkPUpEKFdNYihhLChJcWMoKSxrcWMpKSwyNyk7bz1KRChXTWIoYSwoQndjKCksbXVjKSksMTcpLmE7Zj1KRChXTWIoYSxWdWMpLDE3KS5hO21zZChkLG11YyxqZmIobykpO21zZChkLFZ1YyxqZmIoZikpO2h0ZChkLGEubi5hK2IuYSk7aXRkKGQsYS5uLmIrYi5iKTtpZihKRChrc2QoZCxvdmMpLDE4MSkuZ2MoKSE9MHx8ISFhLmV8fFhEKFdNYihnWWIoYSksbnZjKSk9PT1YRCgoTXhjKCksS3hjKSkmJkF4YygoenhjKCksKCFhLnE/KHBuYigpLHBuYigpLG5uYik6YS5xKS5fYihsdmMpPyhtPUpEKFdNYihhLGx2YyksMjAzKSk6KG09SkQoV01iKGdZYihhKSxtdmMpLDIwMykpLG0pKSl7Z3RkKGQsYS5vLmEpO2V0ZChkLGEuby5iKX1mb3IobD1uZXcgcm1iKGEuaik7bC5hPGwuYy5jLmxlbmd0aDspe2o9SkQocG1iKGwpLDExKTtwPVdNYihqLGtxYyk7aWYoUkQocCwxOTMpKXtlPUpEKHAsMTI0KTtmdGQoZSxqLm4uYSxqLm4uYik7bXNkKGUsSnZjLGouail9fW49SkQoV01iKGEsZ3ZjKSwxODEpLmdjKCkhPTA7Zm9yKGk9bmV3IHJtYihhLmIpO2kuYTxpLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihpKSw3Mik7aWYobnx8SkQoV01iKGcsZ3ZjKSwxODEpLmdjKCkhPTApe2M9SkQoV01iKGcsa3FjKSwxNTMpO2R0ZChjLGcuby5hLGcuby5iKTtmdGQoYyxnLm4uYSxnLm4uYil9fWlmKCFxamQoSkQoV01iKGEsSHZjKSwyMikpKXtmb3Ioaz1uZXcgcm1iKGEuaik7ay5hPGsuYy5jLmxlbmd0aDspe2o9SkQocG1iKGspLDExKTtmb3IoaD1uZXcgcm1iKGouZik7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDcyKTtjPUpEKFdNYihnLGtxYyksMTUzKTtndGQoYyxnLm8uYSk7ZXRkKGMsZy5vLmIpO2Z0ZChjLGcubi5hLGcubi5iKX19fX0KZnVuY3Rpb24gJFljKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDO2IuU2coJ0NhbGN1bGF0ZSBHcmFwaCBTaXplJywxKTtiLmFoKGEsX3plKTtsPW16ZTttPW16ZTtqPWFBZTtrPWFBZTtmb3IocD1uZXcgQ0hkKCghYS5hJiYoYS5hPW5ldyBYMGQoQTMsYSwxMCwxMSkpLGEuYSkpO3AuZSE9cC5pLmdjKCk7KXtuPUpEKEFIZChwKSwyNyk7cz1uLmk7dD1uLmo7Qz1uLmc7aD1uLmY7aT1KRChrc2QobiwoTGdkKCksdmZkKSksMTM5KTtsPSR3bmQuTWF0aC5taW4obCxzLWkuYik7bT0kd25kLk1hdGgubWluKG0sdC1pLmQpO2o9JHduZC5NYXRoLm1heChqLHMrQytpLmMpO2s9JHduZC5NYXRoLm1heChrLHQraCtpLmEpfXI9SkQoa3NkKGEsKExnZCgpLEtmZCkpLDEwNyk7cT1uZXcgRWRkKGwtci5iLG0tci5kKTtCPWotbCsoci5iK3IuYyk7Zz1rLW0rKHIuZCtyLmEpO2lmKHlkYihMRChrc2QoYSwoYl9jKCksSiRjKSkpKSl7dT1KRChrc2QoYSwoeFljKCksd1ljKSksMjcpO3Y9SkQoa3NkKHUsdmZkKSwxMzkpO3c9dS5pK3UuZy8yKyh2LmIrdi5jKS8yLXEuYTtBPXUuait1LmYvMisodi5kK3YuYSkvMi1xLmI7ZT1CLXc7Zj1nLUE7aWYoZTxCLzIpe2M9ZS13O0IrPWM7cS5hLT1jfWVsc2V7Yz13LWU7Qis9Y31pZihmPGcvMil7ZD1mLUE7Zys9ZDtxLmItPWR9ZWxzZXtkPUEtZjtnKz1kfX1mb3Iobz1uZXcgQ0hkKCghYS5hJiYoYS5hPW5ldyBYMGQoQTMsYSwxMCwxMSkpLGEuYSkpO28uZSE9by5pLmdjKCk7KXtuPUpEKEFIZChvKSwyNyk7aHRkKG4sbi5pLXEuYSk7aXRkKG4sbi5qLXEuYil9aWYoIXlkYihMRChrc2QoYSxEZmQpKSkpe2d0ZChhLEIpO2V0ZChhLGcpfW1zZChhLFZlZCxCLShyLmIrci5jKSk7bXNkKGEsVWVkLGctKHIuZCtyLmEpKTtiLmFoKGEsYkFlKX0KZnVuY3Rpb24gTE9jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuO2EuZS5hLiRiKCk7YS5mLmEuJGIoKTthLmMuYy5sZW5ndGg9MDthLmkuYy5sZW5ndGg9MDthLmcuYS4kYigpO2lmKGIpe2ZvcihnPW5ldyBybWIoYi5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksOSk7Zm9yKGw9b1liKGYsKFJqZCgpLHdqZCkpLkpjKCk7bC5PYigpOyl7az1KRChsLlBiKCksMTEpO05yYihhLmUsayk7Zm9yKGU9bmV3IHJtYihrLmcpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxOCk7aWYoZVdiKGQpKXtjb250aW51ZX1JbGIoYS5jLGQpO1JPYyhhLGQpO2g9ZC5jLmkuazsoaD09KERZYigpLEFZYil8fGg9PUJZYnx8aD09d1lifHxoPT12WWIpJiZJbGIoYS5qLGQpO249ZC5kO209bi5pLmM7bT09Yz9OcmIoYS5mLG4pOm09PWI/TnJiKGEuZSxuKTpQbGIoYS5jLGQpfX19fWlmKGMpe2ZvcihnPW5ldyBybWIoYy5hKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksOSk7Zm9yKGo9bmV3IHJtYihmLmopO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSwxMSk7Zm9yKGU9bmV3IHJtYihpLmcpO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxOCk7ZVdiKGQpJiZOcmIoYS5nLGQpfX1mb3IobD1vWWIoZiwoUmpkKCksUWpkKSkuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSwxMSk7TnJiKGEuZixrKTtmb3IoZT1uZXcgcm1iKGsuZyk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDE4KTtpZihlV2IoZCkpe2NvbnRpbnVlfUlsYihhLmMsZCk7Uk9jKGEsZCk7aD1kLmMuaS5rOyhoPT0oRFliKCksQVliKXx8aD09QllifHxoPT13WWJ8fGg9PXZZYikmJklsYihhLmosZCk7bj1kLmQ7bT1uLmkuYzttPT1jP05yYihhLmYsbik6bT09Yj9OcmIoYS5lLG4pOlBsYihhLmMsZCl9fX19fQpmdW5jdGlvbiBsTWMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdTtjLlNnKCdQb2x5bGluZSBlZGdlIHJvdXRpbmcnLDEpO3E9QmViKE1EKFdNYihiLChCd2MoKSxBdWMpKSkpO249QmViKE1EKFdNYihiLGZ3YykpKTtlPUJlYihNRChXTWIoYixYdmMpKSk7ZD0kd25kLk1hdGgubWluKDEsZS9uKTt0PTA7aT0wO2lmKGIuYi5jLmxlbmd0aCE9MCl7dT1pTWMoSkQoTWxiKGIuYiwwKSwyNSkpO3Q9MC40KmQqdX1oPW5ldyBBamIoYi5iLDApO3doaWxlKGguYjxoLmQuZ2MoKSl7Zz0ockRiKGguYjxoLmQuZ2MoKSksSkQoaC5kLlhiKGguYz1oLmIrKyksMjUpKTtmPVlxKGcsZU1jKTtmJiZ0PjAmJih0LT1uKTt6WGIoZyx0KTtrPTA7Zm9yKG09bmV3IHJtYihnLmEpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUpEKHBtYihtKSw5KTtqPTA7Zm9yKHA9bmV3IGVzKElyKGtZYihsKS5hLkpjKCksbmV3IGVyKSk7Y3MocCk7KXtvPUpEKGRzKHApLDE4KTtyPVdZYihvLmMpLmI7cz1XWWIoby5kKS5iO2lmKGc9PW8uZC5pLmMmJiFlV2Iobykpe21NYyhvLHQsMC40KmQqJHduZC5NYXRoLmFicyhyLXMpKTtpZihvLmMuaj09KFJqZCgpLFFqZCkpe3I9MDtzPTB9fWo9JHduZC5NYXRoLm1heChqLCR3bmQuTWF0aC5hYnMocy1yKSl9c3dpdGNoKGwuay5nKXtjYXNlIDA6Y2FzZSA0OmNhc2UgMTpjYXNlIDM6Y2FzZSA1Om5NYyhhLGwsdCxxKTt9az0kd25kLk1hdGgubWF4KGssail9aWYoaC5iPGguZC5nYygpKXt1PWlNYygockRiKGguYjxoLmQuZ2MoKSksSkQoaC5kLlhiKGguYz1oLmIrKyksMjUpKSk7az0kd25kLk1hdGgubWF4KGssdSk7ckRiKGguYj4wKTtoLmEuWGIoaC5jPS0taC5iKX1pPTAuNCpkKms7IWYmJmguYjxoLmQuZ2MoKSYmKGkrPW4pO3QrPWcuYy5hK2l9YS5hLmEuJGIoKTtiLmYuYT10O2MuVGcoKX0KZnVuY3Rpb24gZkNkKGEpe3ZhciBiLGMsZCxlLGY7d3ViKGEsSkRlKTtzd2l0Y2goKCFhLmImJihhLmI9bmV3IHJlZSh2MyxhLDQsNykpLGEuYikuaSsoIWEuYyYmKGEuYz1uZXcgcmVlKHYzLGEsNSw4KSksYS5jKS5pKXtjYXNlIDA6dGhyb3cgc2NiKG5ldyBUZWIoJ1RoZSBlZGdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc291cmNlIG9yIHRhcmdldC4nKSk7Y2FzZSAxOnJldHVybiAoIWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSksYS5iKS5pPT0wP1p3ZChfQmQoSkQobkRkKCghYS5jJiYoYS5jPW5ldyByZWUodjMsYSw1LDgpKSxhLmMpLDApLDg0KSkpOlp3ZChfQmQoSkQobkRkKCghYS5iJiYoYS5iPW5ldyByZWUodjMsYSw0LDcpKSxhLmIpLDApLDg0KSkpO31pZigoIWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSksYS5iKS5pPT0xJiYoIWEuYyYmKGEuYz1uZXcgcmVlKHYzLGEsNSw4KSksYS5jKS5pPT0xKXtlPV9CZChKRChuRGQoKCFhLmImJihhLmI9bmV3IHJlZSh2MyxhLDQsNykpLGEuYiksMCksODQpKTtmPV9CZChKRChuRGQoKCFhLmMmJihhLmM9bmV3IHJlZSh2MyxhLDUsOCkpLGEuYyksMCksODQpKTtpZihad2QoZSk9PVp3ZChmKSl7cmV0dXJuIFp3ZChlKX1lbHNlIGlmKGU9PVp3ZChmKSl7cmV0dXJuIGV9ZWxzZSBpZihmPT1ad2QoZSkpe3JldHVybiBmfX1kPURsKHlsKFdDKE9DKFZJLDEpLE5xZSwyMCwwLFsoIWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSksYS5iKSwoIWEuYyYmKGEuYz1uZXcgcmVlKHYzLGEsNSw4KSksYS5jKV0pKSk7Yj1fQmQoSkQoZHMoZCksODQpKTt3aGlsZShjcyhkKSl7Yz1fQmQoSkQoZHMoZCksODQpKTtpZihjIT1iJiYha0NkKGMsYikpe2lmKFp3ZChjKT09WndkKGIpKXtiPVp3ZChjKX1lbHNle2I9Z0NkKGIsYyk7aWYoIWIpe3JldHVybiBudWxsfX19fXJldHVybiBifQpmdW5jdGlvbiBEdWQoYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7bj1jLmxlbmd0aDtpZihuPjApe2o9KEFEYigwLGMubGVuZ3RoKSxjLmNoYXJDb2RlQXQoMCkpO2lmKGohPTY0KXtpZihqPT0zNyl7bT1jLmxhc3RJbmRleE9mKCclJyk7az1mYWxzZTtpZihtIT0wJiYobT09bi0xfHwoaz0oQURiKG0rMSxjLmxlbmd0aCksYy5jaGFyQ29kZUF0KG0rMSk9PTQ2KSkpKXtoPSh6RGIoMSxtLGMubGVuZ3RoKSxjLnN1YnN0cigxLG0tMSkpO3U9Y2diKCclJyxoKT9udWxsOkpOZChoKTtlPTA7aWYoayl7dHJ5e2U9RmRiKChBRGIobSsyLGMubGVuZ3RoKzEpLGMuc3Vic3RyKG0rMikpLExyZSxIcWUpfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTMwKSl7aT1hO3Rocm93IHNjYihuZXcga09kKGkpKX1lbHNlIHRocm93IHNjYihhKX19Zm9yKHI9aSRkKGIuQ2goKSk7ci5PYigpOyl7cD1GJGQocik7aWYoUkQocCw1MDMpKXtmPUpEKHAsNTgyKTt0PWYuZDtpZigodT09bnVsbD90PT1udWxsOmNnYih1LHQpKSYmZS0tPT0wKXtyZXR1cm4gZn19fXJldHVybiBudWxsfX1sPWMubGFzdEluZGV4T2YoJy4nKTtvPWw9PS0xP2M6KHpEYigwLGwsYy5sZW5ndGgpLGMuc3Vic3RyKDAsbCkpO2Q9MDtpZihsIT0tMSl7dHJ5e2Q9RmRiKChBRGIobCsxLGMubGVuZ3RoKzEpLGMuc3Vic3RyKGwrMSkpLExyZSxIcWUpfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTMwKSl7bz1jfWVsc2UgdGhyb3cgc2NiKGEpfX1vPWNnYignJScsbyk/bnVsbDpKTmQobyk7Zm9yKHE9aSRkKGIuQ2goKSk7cS5PYigpOyl7cD1GJGQocSk7aWYoUkQocCwxOTcpKXtnPUpEKHAsMTk3KTtzPWcudmUoKTtpZigobz09bnVsbD9zPT1udWxsOmNnYihvLHMpKSYmZC0tPT0wKXtyZXR1cm4gZ319fXJldHVybiBudWxsfX1yZXR1cm4gdHFkKGIsYyl9CmZ1bmN0aW9uIGVmYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7az1uZXcgSXJiO2k9bmV3IFBwO2ZvcihkPW5ldyBybWIoYS5hLmEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2I9SkQocG1iKGQpLDYwKTtqPW1kYyhiKTtpZihqKXtnc2Ioay5mLGosYil9ZWxzZXtzPW5kYyhiKTtpZihzKXtmb3IoZj1uZXcgcm1iKHMuayk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDE4KTtSYyhpLGUsYil9fX19Zm9yKGM9bmV3IHJtYihhLmEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksNjApO2o9bWRjKGIpO2lmKGope2ZvcihoPW5ldyBlcyhJcihrWWIoaikuYS5KYygpLG5ldyBlcikpO2NzKGgpOyl7Zz1KRChkcyhoKSwxOCk7aWYoZVdiKGcpKXtjb250aW51ZX1vPWcuYztyPWcuZDtpZigoUmpkKCksSWpkKS5HYyhnLmMuaikmJklqZC5HYyhnLmQuaikpe2NvbnRpbnVlfXA9SkQoTmliKGssZy5kLmkpLDYwKTtERmIoR0ZiKEZGYihIRmIoRUZiKG5ldyBJRmIsMCksMTAwKSxhLmNbYi5hLmRdKSxhLmNbcC5hLmRdKSk7aWYoby5qPT1RamQmJkNaYigoVlliKCksU1liLG8pKSl7Zm9yKG09SkQoUWMoaSxnKSwyMikuSmMoKTttLk9iKCk7KXtsPUpEKG0uUGIoKSw2MCk7aWYobC5kLmM8Yi5kLmMpe249YS5jW2wuYS5kXTtxPWEuY1tiLmEuZF07aWYobj09cSl7Y29udGludWV9REZiKEdGYihGRmIoSEZiKEVGYihuZXcgSUZiLDEpLDEwMCksbikscSkpfX19aWYoci5qPT13amQmJkhaYigoVlliKCksUVliLHIpKSl7Zm9yKG09SkQoUWMoaSxnKSwyMikuSmMoKTttLk9iKCk7KXtsPUpEKG0uUGIoKSw2MCk7aWYobC5kLmM+Yi5kLmMpe249YS5jW2IuYS5kXTtxPWEuY1tsLmEuZF07aWYobj09cSl7Y29udGludWV9REZiKEdGYihGRmIoSEZiKEVGYihuZXcgSUZiLDEpLDEwMCksbikscSkpfX19fX19fQpmdW5jdGlvbiB4S2IoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHc7bT1KRChKRChRYyhhLnIsYiksMjIpLDgzKTtpZihiPT0oUmpkKCksd2pkKXx8Yj09UWpkKXtCS2IoYSxiKTtyZXR1cm59Zj1iPT14amQ/KHhMYigpLHRMYik6KHhMYigpLHdMYik7dT1iPT14amQ/KEdJYigpLEZJYik6KEdJYigpLERJYik7Yz1KRChLcWIoYS5iLGIpLDEyNik7ZD1jLmk7ZT1kLmMrVWNkKFdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbYy5uLmIsYS5DLmIsYS5rXSkpO3I9ZC5jK2QuYi1VY2QoV0MoT0MoYUUsMSksUnNlLDMwLDE1LFtjLm4uYyxhLkMuYyxhLmtdKSk7Zz1mTGIoa0xiKGYpLGEudCk7cz1iPT14amQ/THNlOktzZTtmb3IobD1tLkpjKCk7bC5PYigpOyl7aj1KRChsLlBiKCksMTE1KTtpZighai5jfHxqLmMuZC5jLmxlbmd0aDw9MCl7Y29udGludWV9cT1qLmIuS2YoKTtwPWouZTtuPWouYztvPW4uaTtvLmI9KGk9bi5uLG4uZS5hK2kuYitpLmMpO28uYT0oaD1uLm4sbi5lLmIraC5kK2guYSk7d3ViKHUsYnVlKTtuLmY9dTthSWIobiwoUEhiKCksT0hiKSk7by5jPXAuYS0oby5iLXEuYSkvMjt2PSR3bmQuTWF0aC5taW4oZSxwLmEpO3c9JHduZC5NYXRoLm1heChyLHAuYStxLmEpO28uYzx2PyhvLmM9dik6by5jK28uYj53JiYoby5jPXctby5iKTtJbGIoZy5kLG5ldyBETGIobyxkTGIoZyxvKSkpO3M9Yj09eGpkPyR3bmQuTWF0aC5tYXgocyxwLmIrai5iLktmKCkuYik6JHduZC5NYXRoLm1pbihzLHAuYil9cys9Yj09eGpkP2EudDotYS50O3Q9ZUxiKChnLmU9cyxnKSk7dD4wJiYoSkQoS3FiKGEuYixiKSwxMjYpLmEuYj10KTtmb3Ioaz1tLkpjKCk7ay5PYigpOyl7aj1KRChrLlBiKCksMTE1KTtpZighai5jfHxqLmMuZC5jLmxlbmd0aDw9MCl7Y29udGludWV9bz1qLmMuaTtvLmMtPWouZS5hO28uZC09ai5lLmJ9fQpmdW5jdGlvbiBxaWIoYSxiKXtvaWIoKTt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2k9dmNiKGEsMCk8MDtpJiYoYT1HY2IoYSkpO2lmKHZjYihhLDApPT0wKXtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAnMCc7Y2FzZSAxOnJldHVybiBWc2U7Y2FzZSAyOnJldHVybiAnMC4wMCc7Y2FzZSAzOnJldHVybiAnMC4wMDAnO2Nhc2UgNDpyZXR1cm4gJzAuMDAwMCc7Y2FzZSA1OnJldHVybiAnMC4wMDAwMCc7Y2FzZSA2OnJldHVybiAnMC4wMDAwMDAnO2RlZmF1bHQ6bj1uZXcgVWdiO2I8MD8obi5hKz0nMEUrJyxuKToobi5hKz0nMEUnLG4pO24uYSs9Yj09THJlPycyMTQ3NDgzNjQ4JzonJystYjtyZXR1cm4gbi5hO319az0xODtsPVNDKF9ELFVyZSwzMCxrKzEsMTUsMSk7Yz1rO3A9YTtkb3tqPXA7cD14Y2IocCwxMCk7bFstLWNdPVBjYih0Y2IoNDgsTWNiKGosRmNiKHAsMTApKSkpJldyZX13aGlsZSh2Y2IocCwwKSE9MCk7ZT1NY2IoTWNiKE1jYihrLGMpLGIpLDEpO2lmKGI9PTApe2kmJihsWy0tY109NDUpO3JldHVybiB6Z2IobCxjLGstYyl9aWYoYj4wJiZ2Y2IoZSwtNik+PTApe2lmKHZjYihlLDApPj0wKXtmPWMrUGNiKGUpO2ZvcihoPWstMTtoPj1mO2gtLSl7bFtoKzFdPWxbaF19bFsrK2ZdPTQ2O2kmJihsWy0tY109NDUpO3JldHVybiB6Z2IobCxjLGstYysxKX1mb3IoZz0yO0RjYihnLHRjYihHY2IoZSksMSkpO2crKyl7bFstLWNdPTQ4fWxbLS1jXT00NjtsWy0tY109NDg7aSYmKGxbLS1jXT00NSk7cmV0dXJuIHpnYihsLGMsay1jKX1vPWMrMTtkPWs7bT1uZXcgVmdiO2kmJihtLmErPSctJyxtKTtpZihkLW8+PTEpe0tnYihtLGxbY10pO20uYSs9Jy4nO20uYSs9emdiKGwsYysxLGstYy0xKX1lbHNle20uYSs9emdiKGwsYyxrLWMpfW0uYSs9J0UnO3ZjYihlLDApPjAmJihtLmErPScrJyxtKTttLmErPScnK1FjYihlKTtyZXR1cm4gbS5hfQpmdW5jdGlvbiBjX2MoYSl7UmFkKGEsbmV3IGNhZChqYWQobmFkKGthZChtYWQobGFkKG5ldyBwYWQseUFlKSwnRUxLIFJhZGlhbCcpLCdBIHJhZGlhbCBsYXlvdXQgcHJvdmlkZXIgd2hpY2ggaXMgYmFzZWQgb24gdGhlIGFsZ29yaXRobSBvZiBQZXRlciBFYWRlcyBwdWJsaXNoZWQgaW4gIkRyYXdpbmcgZnJlZSB0cmVlcy4iLCBwdWJsaXNoZWQgYnkgSW50ZXJuYXRpb25hbCBJbnN0aXR1dGUgZm9yIEFkdmFuY2VkIFN0dWR5IG9mIFNvY2lhbCBJbmZvcm1hdGlvbiBTY2llbmNlLCBGdWppdHN1IExpbWl0ZWQgaW4gMTk5MS4gVGhlIHJhZGlhbCBsYXlvdXRlciB0YWtlcyBhIHRyZWUgYW5kIHBsYWNlcyB0aGUgbm9kZXMgaW4gcmFkaWFsIG9yZGVyIGFyb3VuZCB0aGUgcm9vdC4gVGhlIG5vZGVzIG9mIHRoZSBzYW1lIHRyZWUgbGV2ZWwgYXJlIHBsYWNlZCBvbiB0aGUgc2FtZSByYWRpdXMuJyksbmV3IGZfYykseUFlKSkpO1BhZChhLHlBZSwkeWUsSkJkKFUkYykpO1BhZChhLHlBZSxNdWUsSkJkKF8kYykpO1BhZChhLHlBZSxZdWUsSkJkKE4kYykpO1BhZChhLHlBZSxwdmUsSkJkKE8kYykpO1BhZChhLHlBZSxYdWUsSkJkKFAkYykpO1BhZChhLHlBZSxadWUsSkJkKE0kYykpO1BhZChhLHlBZSxWdWUsSkJkKFEkYykpO1BhZChhLHlBZSwkdWUsSkJkKFQkYykpO1BhZChhLHlBZSxwQWUsSkJkKEskYykpO1BhZChhLHlBZSxvQWUsSkJkKEwkYykpO1BhZChhLHlBZSxuQWUsSkJkKFckYykpO1BhZChhLHlBZSx0QWUsSkJkKFokYykpO1BhZChhLHlBZSx1QWUsSkJkKFgkYykpO1BhZChhLHlBZSx2QWUsSkJkKFkkYykpO1BhZChhLHlBZSxzQWUsSkJkKFIkYykpO1BhZChhLHlBZSxsQWUsSkJkKFMkYykpO1BhZChhLHlBZSxtQWUsSkJkKFYkYykpO1BhZChhLHlBZSxxQWUsSkJkKCQkYykpO1BhZChhLHlBZSxyQWUsSkJkKGFfYykpO1BhZChhLHlBZSxrQWUsSkJkKEokYykpfQpmdW5jdGlvbiBtbmQoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHc7cT1uZXcgRWRkKGEuZyxhLmYpO3A9ZG5kKGEpO3AuYT0kd25kLk1hdGgubWF4KHAuYSxiKTtwLmI9JHduZC5NYXRoLm1heChwLmIsYyk7dz1wLmEvcS5hO2s9cC5iL3EuYjt1PXAuYS1xLmE7aT1wLmItcS5iO2lmKGQpe2c9IVp3ZChhKT9KRChrc2QoYSwoTGdkKCksJGVkKSksODYpOkpEKGtzZChad2QoYSksKExnZCgpLCRlZCkpLDg2KTtoPVhEKGtzZChhLChMZ2QoKSxZZmQpKSk9PT1YRCgoYWpkKCksWGlkKSk7Zm9yKHM9bmV3IENIZCgoIWEuYyYmKGEuYz1uZXcgWDBkKEIzLGEsOSw5KSksYS5jKSk7cy5lIT1zLmkuZ2MoKTspe3I9SkQoQUhkKHMpLDEyNCk7dD1KRChrc2QocixkZ2QpLDY0KTtpZih0PT0oUmpkKCksUGpkKSl7dD1ZbWQocixnKTttc2QocixkZ2QsdCl9c3dpdGNoKHQuZyl7Y2FzZSAxOmh8fGh0ZChyLHIuaSp3KTticmVhaztjYXNlIDI6aHRkKHIsci5pK3UpO2h8fGl0ZChyLHIuaiprKTticmVhaztjYXNlIDM6aHx8aHRkKHIsci5pKncpO2l0ZChyLHIuaitpKTticmVhaztjYXNlIDQ6aHx8aXRkKHIsci5qKmspO319fWR0ZChhLHAuYSxwLmIpO2lmKGUpe2ZvcihtPW5ldyBDSGQoKCFhLm4mJihhLm49bmV3IFgwZCh6MyxhLDEsNykpLGEubikpO20uZSE9bS5pLmdjKCk7KXtsPUpEKEFIZChtKSwxNTMpO249bC5pK2wuZy8yO289bC5qK2wuZi8yO3Y9bi9xLmE7aj1vL3EuYjtpZih2K2o+PTEpe2lmKHYtaj4wJiZvPj0wKXtodGQobCxsLmkrdSk7aXRkKGwsbC5qK2kqail9ZWxzZSBpZih2LWo8MCYmbj49MCl7aHRkKGwsbC5pK3Uqdik7aXRkKGwsbC5qK2kpfX19fW1zZChhLChMZ2QoKSxCZmQpLCh5a2QoKSxmPUpEKGRlYih6MiksMTApLG5ldyB1cmIoZixKRChWQ2IoZixmLmxlbmd0aCksMTApLDApKSk7cmV0dXJuIG5ldyBFZGQodyxrKX0KZnVuY3Rpb24gR2RiKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGw7aWYoYT09bnVsbCl7dGhyb3cgc2NiKG5ldyBNZmIoUnFlKSl9aj1hO2Y9YS5sZW5ndGg7aT1mYWxzZTtpZihmPjApe2I9KEFEYigwLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoMCkpO2lmKGI9PTQ1fHxiPT00Myl7YT0oQURiKDEsYS5sZW5ndGgrMSksYS5zdWJzdHIoMSkpOy0tZjtpPWI9PTQ1fX1pZihmPT0wKXt0aHJvdyBzY2IobmV3IE1mYihKc2UraisnIicpKX13aGlsZShhLmxlbmd0aD4wJiYoQURiKDAsYS5sZW5ndGgpLGEuY2hhckNvZGVBdCgwKT09NDgpKXthPShBRGIoMSxhLmxlbmd0aCsxKSxhLnN1YnN0cigxKSk7LS1mfWlmKGY+KExmYigpLEpmYilbMTBdKXt0aHJvdyBzY2IobmV3IE1mYihKc2UraisnIicpKX1mb3IoZT0wO2U8ZjtlKyspe2lmKFdkYigoQURiKGUsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChlKSkpPT0tMSl7dGhyb3cgc2NiKG5ldyBNZmIoSnNlK2orJyInKSl9fWw9MDtnPUhmYlsxMF07az1JZmJbMTBdO2g9R2NiKEtmYlsxMF0pO2M9dHJ1ZTtkPWYlZztpZihkPjApe2w9LXBhcnNlSW50KCh6RGIoMCxkLGEubGVuZ3RoKSxhLnN1YnN0cigwLGQpKSwxMCk7YT0oQURiKGQsYS5sZW5ndGgrMSksYS5zdWJzdHIoZCkpO2YtPWQ7Yz1mYWxzZX13aGlsZShmPj1nKXtkPXBhcnNlSW50KCh6RGIoMCxnLGEubGVuZ3RoKSxhLnN1YnN0cigwLGcpKSwxMCk7YT0oQURiKGcsYS5sZW5ndGgrMSksYS5zdWJzdHIoZykpO2YtPWc7aWYoYyl7Yz1mYWxzZX1lbHNle2lmKHZjYihsLGgpPDApe3Rocm93IHNjYihuZXcgTWZiKEpzZStqKyciJykpfWw9RmNiKGwsayl9bD1NY2IobCxkKX1pZih2Y2IobCwwKT4wKXt0aHJvdyBzY2IobmV3IE1mYihKc2UraisnIicpKX1pZighaSl7bD1HY2IobCk7aWYodmNiKGwsMCk8MCl7dGhyb3cgc2NiKG5ldyBNZmIoSnNlK2orJyInKSl9fXJldHVybiBsfQpmdW5jdGlvbiBKTmQoYSl7Qk5kKCk7dmFyIGIsYyxkLGUsZixnLGgsaTtpZihhPT1udWxsKXJldHVybiBudWxsO2U9aGdiKGEsd2diKDM3KSk7aWYoZTwwKXtyZXR1cm4gYX1lbHNle2k9bmV3IFdnYigoekRiKDAsZSxhLmxlbmd0aCksYS5zdWJzdHIoMCxlKSkpO2I9U0MoJEQsWkNlLDMwLDQsMTUsMSk7aD0wO2Q9MDtmb3IoZz1hLmxlbmd0aDtlPGc7ZSsrKXtBRGIoZSxhLmxlbmd0aCk7aWYoYS5jaGFyQ29kZUF0KGUpPT0zNyYmYS5sZW5ndGg+ZSsyJiZVTmQoKEFEYihlKzEsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChlKzEpKSxxTmQsck5kKSYmVU5kKChBRGIoZSsyLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoZSsyKSkscU5kLHJOZCkpe2M9WU5kKChBRGIoZSsxLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoZSsxKSksKEFEYihlKzIsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChlKzIpKSk7ZSs9MjtpZihkPjApeyhjJjE5Mik9PTEyOD8oYltoKytdPWM8PDI0Pj4yNCk6KGQ9MCl9ZWxzZSBpZihjPj0xMjgpe2lmKChjJjIyNCk9PTE5Mil7YltoKytdPWM8PDI0Pj4yNDtkPTJ9ZWxzZSBpZigoYyYyNDApPT0yMjQpe2JbaCsrXT1jPDwyND4+MjQ7ZD0zfWVsc2UgaWYoKGMmMjQ4KT09MjQwKXtiW2grK109Yzw8MjQ+PjI0O2Q9NH19aWYoZD4wKXtpZihoPT1kKXtzd2l0Y2goaCl7Y2FzZSAyOntLZ2IoaSwoKGJbMF0mMzEpPDw2fGJbMV0mNjMpJldyZSk7YnJlYWt9Y2FzZSAzOntLZ2IoaSwoKGJbMF0mMTUpPDwxMnwoYlsxXSY2Myk8PDZ8YlsyXSY2MykmV3JlKTticmVha319aD0wO2Q9MH19ZWxzZXtmb3IoZj0wO2Y8aDsrK2Ype0tnYihpLGJbZl0mV3JlKX1oPTA7aS5hKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpfX1lbHNle2ZvcihmPTA7ZjxoOysrZil7S2diKGksYltmXSZXcmUpfWg9MDtLZ2IoaSwoQURiKGUsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChlKSkpfX1yZXR1cm4gaS5hfX0KZnVuY3Rpb24gS25kKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG87bj1ad2QoX0JkKEpEKG5EZCgoIWEuYiYmKGEuYj1uZXcgcmVlKHYzLGEsNCw3KSksYS5iKSwwKSw4NCkpKTtvPVp3ZChfQmQoSkQobkRkKCghYS5jJiYoYS5jPW5ldyByZWUodjMsYSw1LDgpKSxhLmMpLDApLDg0KSkpO2w9bj09bztoPW5ldyBDZGQ7Yj1KRChrc2QoYSwoV2hkKCksUGhkKSksNzcpO2lmKCEhYiYmYi5iPj0yKXtpZigoIWEuYSYmKGEuYT1uZXcgWDBkKHczLGEsNiw2KSksYS5hKS5pPT0wKXtjPShIcGQoKSxlPW5ldyB0dWQsZSk7dENkKCghYS5hJiYoYS5hPW5ldyBYMGQodzMsYSw2LDYpKSxhLmEpLGMpfWVsc2UgaWYoKCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSkuaT4xKXttPW5ldyBMSGQoKCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSkpO3doaWxlKG0uZSE9bS5pLmdjKCkpe0JIZChtKX19Vm1kKGIsSkQobkRkKCghYS5hJiYoYS5hPW5ldyBYMGQodzMsYSw2LDYpKSxhLmEpLDApLDE2OCkpfWlmKGwpe2ZvcihkPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSkpO2QuZSE9ZC5pLmdjKCk7KXtjPUpEKEFIZChkKSwxNjgpO2ZvcihqPW5ldyBDSGQoKCFjLmEmJihjLmE9bmV3IHFWZCh1MyxjLDUpKSxjLmEpKTtqLmUhPWouaS5nYygpOyl7aT1KRChBSGQoaiksMzY5KTtoLmE9JHduZC5NYXRoLm1heChoLmEsaS5hKTtoLmI9JHduZC5NYXRoLm1heChoLmIsaS5iKX19fWZvcihnPW5ldyBDSGQoKCFhLm4mJihhLm49bmV3IFgwZCh6MyxhLDEsNykpLGEubikpO2cuZSE9Zy5pLmdjKCk7KXtmPUpEKEFIZChnKSwxNTMpO2s9SkQoa3NkKGYsVmhkKSw4KTshIWsmJmZ0ZChmLGsuYSxrLmIpO2lmKGwpe2guYT0kd25kLk1hdGgubWF4KGguYSxmLmkrZi5nKTtoLmI9JHduZC5NYXRoLm1heChoLmIsZi5qK2YuZil9fXJldHVybiBofQpmdW5jdGlvbiBFQShhLGIsYyxkLGUpe3ZhciBmLGcsaDtDQShhLGIpO2c9YlswXTtmPV9mYihjLmMsMCk7aD0tMTtpZih2QShjKSl7aWYoZD4wKXtpZihnK2Q+YS5sZW5ndGgpe3JldHVybiBmYWxzZX1oPXpBKCh6RGIoMCxnK2QsYS5sZW5ndGgpLGEuc3Vic3RyKDAsZytkKSksYil9ZWxzZXtoPXpBKGEsYil9fXN3aXRjaChmKXtjYXNlIDcxOmg9d0EoYSxnLFdDKE9DKGhKLDEpLGhyZSwyLDYsW2pzZSxrc2VdKSxiKTtlLmU9aDtyZXR1cm4gdHJ1ZTtjYXNlIDc3OnJldHVybiBIQShhLGIsZSxoLGcpO2Nhc2UgNzY6cmV0dXJuIEpBKGEsYixlLGgsZyk7Y2FzZSA2OTpyZXR1cm4gRkEoYSxiLGcsZSk7Y2FzZSA5OTpyZXR1cm4gSUEoYSxiLGcsZSk7Y2FzZSA5NzpoPXdBKGEsZyxXQyhPQyhoSiwxKSxocmUsMiw2LFsnQU0nLCdQTSddKSxiKTtlLmI9aDtyZXR1cm4gdHJ1ZTtjYXNlIDEyMTpyZXR1cm4gTEEoYSxiLGcsaCxjLGUpO2Nhc2UgMTAwOmlmKGg8PTApe3JldHVybiBmYWxzZX1lLmM9aDtyZXR1cm4gdHJ1ZTtjYXNlIDgzOmlmKGg8MCl7cmV0dXJuIGZhbHNlfXJldHVybiBHQShoLGcsYlswXSxlKTtjYXNlIDEwNDpoPT0xMiYmKGg9MCk7Y2FzZSA3NTpjYXNlIDcyOmlmKGg8MCl7cmV0dXJuIGZhbHNlfWUuZj1oO2UuZz1mYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlIDEwNzppZihoPDApe3JldHVybiBmYWxzZX1lLmY9aDtlLmc9dHJ1ZTtyZXR1cm4gdHJ1ZTtjYXNlIDEwOTppZihoPDApe3JldHVybiBmYWxzZX1lLmo9aDtyZXR1cm4gdHJ1ZTtjYXNlIDExNTppZihoPDApe3JldHVybiBmYWxzZX1lLm49aDtyZXR1cm4gdHJ1ZTtjYXNlIDkwOmlmKGc8YS5sZW5ndGgmJihBRGIoZyxhLmxlbmd0aCksYS5jaGFyQ29kZUF0KGcpPT05MCkpeysrYlswXTtlLm89MDtyZXR1cm4gdHJ1ZX1jYXNlIDEyMjpjYXNlIDExODpyZXR1cm4gS0EoYSxnLGIsZSk7ZGVmYXVsdDpyZXR1cm4gZmFsc2U7fX0KZnVuY3Rpb24gX0tjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQjt0PWIuYy5sZW5ndGg7ZT1uZXcgdktjKGEuYSxjLG51bGwsbnVsbCk7Qj1TQyhhRSxSc2UsMzAsdCwxNSwxKTtwPVNDKGFFLFJzZSwzMCx0LDE1LDEpO289U0MoYUUsUnNlLDMwLHQsMTUsMSk7cT0wO2ZvcihoPTA7aDx0O2grKyl7cFtoXT1IcWU7b1toXT1McmV9Zm9yKGk9MDtpPHQ7aSsrKXtkPShzRGIoaSxiLmMubGVuZ3RoKSxKRChiLmNbaV0sMTg1KSk7QltpXT10S2MoZCk7QltxXT5CW2ldJiYocT1pKTtmb3IobD1uZXcgcm1iKGEuYS5iKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1KRChwbWIobCksMjUpO2ZvcihzPW5ldyBybWIoay5hKTtzLmE8cy5jLmMubGVuZ3RoOyl7cj1KRChwbWIocyksOSk7dz1CZWIoZC5wW3IucF0pK0JlYihkLmRbci5wXSk7cFtpXT0kd25kLk1hdGgubWluKHBbaV0sdyk7b1tpXT0kd25kLk1hdGgubWF4KG9baV0sdytyLm8uYil9fX1BPVNDKGFFLFJzZSwzMCx0LDE1LDEpO2ZvcihqPTA7ajx0O2orKyl7KHNEYihqLGIuYy5sZW5ndGgpLEpEKGIuY1tqXSwxODUpKS5vPT0oSEtjKCksRktjKT8oQVtqXT1wW3FdLXBbal0pOihBW2pdPW9bcV0tb1tqXSl9Zj1TQyhhRSxSc2UsMzAsdCwxNSwxKTtmb3Iobj1uZXcgcm1iKGEuYS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1KRChwbWIobiksMjUpO2Zvcih2PW5ldyBybWIobS5hKTt2LmE8di5jLmMubGVuZ3RoOyl7dT1KRChwbWIodiksOSk7Zm9yKGc9MDtnPHQ7ZysrKXtmW2ddPUJlYigoc0RiKGcsYi5jLmxlbmd0aCksSkQoYi5jW2ddLDE4NSkpLnBbdS5wXSkrQmViKChzRGIoZyxiLmMubGVuZ3RoKSxKRChiLmNbZ10sMTg1KSkuZFt1LnBdKStBW2ddfWFEYihmLCRjYihfbWIucHJvdG90eXBlLktlLF9tYixbXSkpO2UucFt1LnBdPShmWzFdK2ZbMl0pLzI7ZS5kW3UucF09MH19cmV0dXJuIGV9CmZ1bmN0aW9uIGgwYihhLGIsYyl7dmFyIGQsZSxmLGcsaDtkPWIuaTtmPWEuaS5vO2U9YS5pLmQ7aD1hLm47Zz1LZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbaCxhLmFdKSk7c3dpdGNoKGEuai5nKXtjYXNlIDE6YkliKGIsKEdJYigpLERJYikpO2QuZD0tZS5kLWMtZC5hO2lmKEpEKEpEKE1sYihiLmQsMCksMTg3KS5tZigoSXFjKCksY3FjKSksMjg5KT09KG9pZCgpLGtpZCkpe2FJYihiLChQSGIoKSxPSGIpKTtkLmM9Zy5hLUJlYihNRChXTWIoYSxpcWMpKSktYy1kLmJ9ZWxzZXthSWIoYiwoUEhiKCksTkhiKSk7ZC5jPWcuYStCZWIoTUQoV01iKGEsaXFjKSkpK2N9YnJlYWs7Y2FzZSAyOmFJYihiLChQSGIoKSxOSGIpKTtkLmM9Zi5hK2UuYytjO2lmKEpEKEpEKE1sYihiLmQsMCksMTg3KS5tZigoSXFjKCksY3FjKSksMjg5KT09KG9pZCgpLGtpZCkpe2JJYihiLChHSWIoKSxESWIpKTtkLmQ9Zy5iLUJlYihNRChXTWIoYSxpcWMpKSktYy1kLmF9ZWxzZXtiSWIoYiwoR0liKCksRkliKSk7ZC5kPWcuYitCZWIoTUQoV01iKGEsaXFjKSkpK2N9YnJlYWs7Y2FzZSAzOmJJYihiLChHSWIoKSxGSWIpKTtkLmQ9Zi5iK2UuYStjO2lmKEpEKEpEKE1sYihiLmQsMCksMTg3KS5tZigoSXFjKCksY3FjKSksMjg5KT09KG9pZCgpLGtpZCkpe2FJYihiLChQSGIoKSxPSGIpKTtkLmM9Zy5hLUJlYihNRChXTWIoYSxpcWMpKSktYy1kLmJ9ZWxzZXthSWIoYiwoUEhiKCksTkhiKSk7ZC5jPWcuYStCZWIoTUQoV01iKGEsaXFjKSkpK2N9YnJlYWs7Y2FzZSA0OmFJYihiLChQSGIoKSxPSGIpKTtkLmM9LWUuYi1jLWQuYjtpZihKRChKRChNbGIoYi5kLDApLDE4NykubWYoKElxYygpLGNxYykpLDI4OSk9PShvaWQoKSxraWQpKXtiSWIoYiwoR0liKCksREliKSk7ZC5kPWcuYi1CZWIoTUQoV01iKGEsaXFjKSkpLWMtZC5hfWVsc2V7YkliKGIsKEdJYigpLEZJYikpO2QuZD1nLmIrQmViKE1EKFdNYihhLGlxYykpKStjfX19CmZ1bmN0aW9uIGlCYyhhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7Yi5TZygnSW50ZXJhY3RpdmUgbm9kZSBsYXllcmluZycsMSk7Yz1uZXcgVWxiO2ZvcihtPW5ldyBybWIoYS5hKTttLmE8bS5jLmMubGVuZ3RoOyl7az1KRChwbWIobSksOSk7aT1rLm4uYTtoPWkray5vLmE7aD0kd25kLk1hdGgubWF4KGkrMSxoKTtzPW5ldyBBamIoYywwKTtkPW51bGw7d2hpbGUocy5iPHMuZC5nYygpKXtxPShyRGIocy5iPHMuZC5nYygpKSxKRChzLmQuWGIocy5jPXMuYisrKSw1NjApKTtpZihxLmM+PWgpe3JEYihzLmI+MCk7cy5hLlhiKHMuYz0tLXMuYik7YnJlYWt9ZWxzZSBpZihxLmE+aSl7aWYoIWQpe0lsYihxLmIsayk7cS5jPSR3bmQuTWF0aC5taW4ocS5jLGkpO3EuYT0kd25kLk1hdGgubWF4KHEuYSxoKTtkPXF9ZWxzZXtLbGIoZC5iLHEuYik7ZC5hPSR3bmQuTWF0aC5tYXgoZC5hLHEuYSk7dGpiKHMpfX19aWYoIWQpe2Q9bmV3IG1CYztkLmM9aTtkLmE9aDt6amIocyxkKTtJbGIoZC5iLGspfX1nPWEuYjtqPTA7Zm9yKHI9bmV3IHJtYihjKTtyLmE8ci5jLmMubGVuZ3RoOyl7cT1KRChwbWIociksNTYwKTtlPW5ldyBiJGIoYSk7ZS5wPWorKztZQ2IoZy5jLGUpO2ZvcihuPW5ldyBybWIocS5iKTtuLmE8bi5jLmMubGVuZ3RoOyl7az1KRChwbWIobiksOSk7cVliKGssZSk7ay5wPTB9fWZvcihsPW5ldyBybWIoYS5hKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1KRChwbWIobCksOSk7aWYoay5wPT0wKXtwPWhCYyhrLGEpO3doaWxlKHAuYS5nYygpIT0wKXtvPUpEKHAuYS5lYygpLkpjKCkuUGIoKSw5KTtwLmEuQWMobykhPW51bGw7eGUocCxoQmMobyxhKSl9fX1mPW5ldyBBamIoZywwKTt3aGlsZShmLmI8Zi5kLmdjKCkpeyhyRGIoZi5iPGYuZC5nYygpKSxKRChmLmQuWGIoZi5jPWYuYisrKSwyNSkpLmEuYy5sZW5ndGg9PTAmJnRqYihmKX1hLmEuYy5sZW5ndGg9MDtiLlRnKCl9CmZ1bmN0aW9uIGQzYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7Yy5TZyh3QWUsMSk7IWIuYSYmKGIuYT1uZXcgWDBkKEEzLGIsMTAsMTEpKTtkPUJlYihNRChrc2QoYiwoazJjKCksTDFjKSkpKTtrPUJlYihNRChrc2QoYixkMmMpKSk7bT1KRChrc2QoYixhMmMpLDEwNyk7bj1uZXcgQjNjKGQsayk7Zj1BM2MobixiLG0pO2MzYyhiLG4pO2g9SkQoa3NkKGIsWjFjKSwxNykuYTt3aGlsZShoPjEpe2U9YTNjKGIpO2w9Zi5nO289SkQoa3NkKGIsYTJjKSwxMDcpO3A9QmViKE1EKGtzZChiLEwxYykpKTsoIWIuYSYmKGIuYT1uZXcgWDBkKEEzLGIsMTAsMTEpKSxiLmEpLmk+MSYmQmViKE1EKGtzZChiLChoMWMoKSxkMWMpKSkpIT1Lc2UmJihmLmMrKG8uYitvLmMpKS8oZi5iKyhvLmQrby5hKSk8cD9tc2QoZSwoaDFjKCksZzFjKSxCZWIoTUQoa3NkKGIsZzFjKSkpK0JlYihNRChrc2QoYixkMWMpKSkpOighYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSkuaT4xJiZCZWIoTUQoa3NkKGIsKGgxYygpLGMxYykpKSkhPUtzZSYmKGYuYysoby5iK28uYykpLyhmLmIrKG8uZCtvLmEpKT5wJiZtc2QoZSwoaDFjKCksZzFjKSwkd25kLk1hdGgubWF4KEJlYihNRChrc2QoYixlMWMpKSksQmViKE1EKGtzZChlLGcxYykpKS1CZWIoTUQoa3NkKGIsYzFjKSkpKSk7bj1uZXcgQjNjKGQsayk7aT1BM2MobixlLG0pO2o9aS5nO2lmKGo+PWwmJmo9PWope2ZvcihnPTA7ZzwoIWUuYSYmKGUuYT1uZXcgWDBkKEEzLGUsMTAsMTEpKSxlLmEpLmk7ZysrKXtiM2MoYSxKRChuRGQoKCFlLmEmJihlLmE9bmV3IFgwZChBMyxlLDEwLDExKSksZS5hKSxnKSwyNyksSkQobkRkKCghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSksZyksMjcpKX1jM2MoYixuKTt6NGMoZixpLmMpO3k0YyhmLGkuYil9LS1ofW1zZChiLChoMWMoKSxaMGMpLGYuYik7bXNkKGIsJDBjLGYuYyk7Yy5UZygpfQpmdW5jdGlvbiBRbGQoYSxiLGMsZCxlLGYsZyl7dmFyIGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSCxJO249MDtEPTA7Zm9yKGk9bmV3IHJtYihhKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMjcpO2xuZChoKTtuPSR3bmQuTWF0aC5tYXgobixoLmcpO0QrPWguZypoLmZ9bz1EL2EuYy5sZW5ndGg7Qz1LbGQoYSxvKTtEKz1hLmMubGVuZ3RoKkM7bj0kd25kLk1hdGgubWF4KG4sJHduZC5NYXRoLnNxcnQoRCpnKSkrYy5iO0g9Yy5iO0k9Yy5kO209MDtrPWMuYitjLmM7Qj1uZXcgTXRiO0F0YihCLGpmYigwKSk7dz1uZXcgTXRiO2o9bmV3IEFqYihhLDApO3doaWxlKGouYjxqLmQuZ2MoKSl7aD0ockRiKGouYjxqLmQuZ2MoKSksSkQoai5kLlhiKGouYz1qLmIrKyksMjcpKTtHPWguZztsPWguZjtpZihIK0c+bil7aWYoZil7Q3RiKHcsbSk7Q3RiKEIsamZiKGouYi0xKSl9SD1jLmI7SSs9bStiO209MDtrPSR3bmQuTWF0aC5tYXgoayxjLmIrYy5jK0cpfWh0ZChoLEgpO2l0ZChoLEkpO2s9JHduZC5NYXRoLm1heChrLEgrRytjLmMpO209JHduZC5NYXRoLm1heChtLGwpO0grPUcrYn1rPSR3bmQuTWF0aC5tYXgoayxkKTtGPUkrbStjLmE7aWYoRjxlKXttKz1lLUY7Rj1lfWlmKGYpe0g9Yy5iO2o9bmV3IEFqYihhLDApO0N0YihCLGpmYihhLmMubGVuZ3RoKSk7QT1HdGIoQiwwKTtyPUpEKFV0YihBKSwxNykuYTtDdGIodyxtKTt2PUd0Yih3LDApO3U9MDt3aGlsZShqLmI8ai5kLmdjKCkpe2lmKGouYj09cil7SD1jLmI7dT1CZWIoTUQoVXRiKHYpKSk7cj1KRChVdGIoQSksMTcpLmF9aD0ockRiKGouYjxqLmQuZ2MoKSksSkQoai5kLlhiKGouYz1qLmIrKyksMjcpKTtzPWguZjtldGQoaCx1KTtwPXU7aWYoai5iPT1yKXtxPWstSC1jLmM7dD1oLmc7Z3RkKGgscSk7cm5kKGgsbmV3IEVkZChxLHApLG5ldyBFZGQodCxzKSl9SCs9aC5nK2J9fXJldHVybiBuZXcgRWRkKGssRil9CmZ1bmN0aW9uIHJWYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQztiLlNnKCdDb21wb3VuZCBncmFwaCBwb3N0cHJvY2Vzc29yJywxKTtjPXlkYihMRChXTWIoYSwoQndjKCkscHdjKSkpKTtoPUpEKFdNYihhLChJcWMoKSxMcGMpKSwyMjgpO2s9bmV3IFFyYjtmb3Iocj1oLmVjKCkuSmMoKTtyLk9iKCk7KXtxPUpEKHIuUGIoKSwxOCk7Zz1uZXcgV2xiKGguY2MocSkpO3BuYigpO1NsYihnLG5ldyBXVmIoYSkpO3Y9UlZiKChzRGIoMCxnLmMubGVuZ3RoKSxKRChnLmNbMF0sMjQ4KSkpO0E9U1ZiKEpEKE1sYihnLGcuYy5sZW5ndGgtMSksMjQ4KSk7dD12Lmk7eFhiKEEuaSx0KT8ocz10LmUpOihzPWdZYih0KSk7bD1zVmIocSxnKTtMdGIocS5hKTttPW51bGw7Zm9yKGY9bmV3IHJtYihnKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjQ4KTtwPW5ldyBDZGQ7b1hiKHAsZS5hLHMpO249ZS5iO2Q9bmV3IFJkZDtOZGQoZCwwLG4uYSk7UGRkKGQscCk7dT1uZXcgRmRkKFdZYihuLmMpKTt3PW5ldyBGZGQoV1liKG4uZCkpO21kZCh1LHApO21kZCh3LHApO2lmKG0pe2QuYj09MD8obz13KToobz0ockRiKGQuYiE9MCksSkQoZC5hLmEuYyw4KSkpO0I9JHduZC5NYXRoLmFicyhtLmEtby5hKT5GdWU7Qz0kd25kLk1hdGguYWJzKG0uYi1vLmIpPkZ1ZTsoIWMmJkImJkN8fGMmJihCfHxDKSkmJkF0YihxLmEsdSl9eGUocS5hLGQpO2QuYj09MD8obT11KToobT0ockRiKGQuYiE9MCksSkQoZC5jLmIuYyw4KSkpO3RWYihuLGwscCk7aWYoU1ZiKGUpPT1BKXtpZihnWWIoQS5pKSE9ZS5hKXtwPW5ldyBDZGQ7b1hiKHAsZ1liKEEuaSkscyl9Wk1iKHEsR3FjLHApfXVWYihuLHEscyk7ay5hLnljKG4sayl9Z1diKHEsdik7aFdiKHEsQSl9Zm9yKGo9ay5hLmVjKCkuSmMoKTtqLk9iKCk7KXtpPUpEKGouUGIoKSwxOCk7Z1diKGksbnVsbCk7aFdiKGksbnVsbCl9Yi5UZygpfQpmdW5jdGlvbiBvUmMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO2U9SkQoV01iKGEsKGtWYygpLEtVYykpLDg2KTtrPWU9PShUZ2QoKSxQZ2QpfHxlPT1RZ2Q/T2dkOlFnZDtjPUpEKHlCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5iLDE2KSksbmV3IGJTYyksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbKGxBYigpLGpBYildKSkpLDE1KTtpPUpEKHlCYihGQmIoYy5NYygpLG5ldyBkU2MoYikpLGhBYihuZXcgekFiLG5ldyB4QWIsbmV3IEZBYixXQyhPQyhITCwxKSxFcmUsMTMxLDAsW2pBYl0pKSksMTUpO2kuRmMoSkQoeUJiKEZCYihjLk1jKCksbmV3IGZTYyhiKSksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbakFiXSkpKSwxNikpO2kuZ2QobmV3IGhTYyhrKSk7bT1uZXcgbXpiKG5ldyBsU2MoZSkpO2Q9bmV3IElyYjtmb3IoaD1pLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMjM5KTtqPUpEKGcuYSwzOSk7aWYoeWRiKExEKGcuYykpKXttLmEueWMoaiwoeGRiKCksdmRiKSk9PW51bGw7KG5ldyBuemIobS5hLlhjKGosZmFsc2UpKSkuYS5nYygpPjAmJlFpYihkLGosSkQoKG5ldyBuemIobS5hLlhjKGosZmFsc2UpKSkuYS5UYygpLDM5KSk7KG5ldyBuemIobS5hLiRjKGosdHJ1ZSkpKS5hLmdjKCk+MSYmUWliKGQscVJjKG0saiksail9ZWxzZXtpZigobmV3IG56YihtLmEuWGMoaixmYWxzZSkpKS5hLmdjKCk+MCl7Zj1KRCgobmV3IG56YihtLmEuWGMoaixmYWxzZSkpKS5hLlRjKCksMzkpO1hEKGYpPT09WEQoV2QoZnNiKGQuZixqKSkpJiZKRChXTWIoaiwodFVjKCksV1RjKSksMTUpLkVjKGYpfWlmKChuZXcgbnpiKG0uYS4kYyhqLHRydWUpKSkuYS5nYygpPjEpe2w9cVJjKG0saik7WEQoV2QoZnNiKGQuZixsKSkpPT09WEQoaikmJkpEKFdNYihsLCh0VWMoKSxXVGMpKSwxNSkuRWMoail9bS5hLkFjKGopIT1udWxsfX19CmZ1bmN0aW9uIEFNYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O2lmKGEuZ2MoKT09MSl7cmV0dXJuIEpEKGEuWGIoMCksMjM0KX1lbHNlIGlmKGEuZ2MoKTw9MCl7cmV0dXJuIG5ldyBxTmJ9Zm9yKGU9YS5KYygpO2UuT2IoKTspe2M9SkQoZS5QYigpLDIzNCk7bz0wO2s9SHFlO2w9SHFlO2k9THJlO2o9THJlO2ZvcihuPW5ldyBybWIoYy5lKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1KRChwbWIobiksMTUxKTtvKz1KRChXTWIobSwoSU9iKCksdk9iKSksMTcpLmE7az0kd25kLk1hdGgubWluKGssbS5kLmEtbS5lLmEvMik7bD0kd25kLk1hdGgubWluKGwsbS5kLmItbS5lLmIvMik7aT0kd25kLk1hdGgubWF4KGksbS5kLmErbS5lLmEvMik7aj0kd25kLk1hdGgubWF4KGosbS5kLmIrbS5lLmIvMil9Wk1iKGMsKElPYigpLHZPYiksamZiKG8pKTtaTWIoYywoVE9iKCksUU9iKSxuZXcgRWRkKGssbCkpO1pNYihjLFBPYixuZXcgRWRkKGksaikpfXBuYigpO2EuZ2QobmV3IEVNYik7cD1uZXcgcU5iO1VNYihwLEpEKGEuWGIoMCksMTAyKSk7aD0wO3M9MDtmb3IoZj1hLkpjKCk7Zi5PYigpOyl7Yz1KRChmLlBiKCksMjM0KTtxPUJkZChvZGQoSkQoV01iKGMsKFRPYigpLFBPYikpLDgpKSxKRChXTWIoYyxRT2IpLDgpKTtoPSR3bmQuTWF0aC5tYXgoaCxxLmEpO3MrPXEuYSpxLmJ9aD0kd25kLk1hdGgubWF4KGgsJHduZC5NYXRoLnNxcnQocykqQmViKE1EKFdNYihwLChJT2IoKSxoT2IpKSkpKTtyPUJlYihNRChXTWIocCxCT2IpKSk7dD0wO3U9MDtnPTA7Yj1yO2ZvcihkPWEuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwyMzQpO3E9QmRkKG9kZChKRChXTWIoYywoVE9iKCksUE9iKSksOCkpLEpEKFdNYihjLFFPYiksOCkpO2lmKHQrcS5hPmgpe3Q9MDt1Kz1nK3I7Zz0wfXpNYihwLGMsdCx1KTtiPSR3bmQuTWF0aC5tYXgoYix0K3EuYSk7Zz0kd25kLk1hdGgubWF4KGcscS5iKTt0Kz1xLmErcn1yZXR1cm4gcH0KZnVuY3Rpb24gVmxlKGEpe1VsZSgpO3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO2lmKGE9PW51bGwpcmV0dXJuIG51bGw7Zj1yZ2IoYSk7bz1ZbGUoZik7aWYobyU0IT0wKXtyZXR1cm4gbnVsbH1wPW8vNHwwO2lmKHA9PTApcmV0dXJuIFNDKCRELFpDZSwzMCwwLDE1LDEpO2w9bnVsbDtiPTA7Yz0wO2Q9MDtlPTA7Zz0wO2g9MDtpPTA7aj0wO249MDttPTA7az0wO2w9U0MoJEQsWkNlLDMwLHAqMywxNSwxKTtmb3IoO248cC0xO24rKyl7aWYoIVhsZShnPWZbaysrXSl8fCFYbGUoaD1mW2srK10pfHwhWGxlKGk9ZltrKytdKXx8IVhsZShqPWZbaysrXSkpcmV0dXJuIG51bGw7Yj1TbGVbZ107Yz1TbGVbaF07ZD1TbGVbaV07ZT1TbGVbal07bFttKytdPShiPDwyfGM+PjQpPDwyND4+MjQ7bFttKytdPSgoYyYxNSk8PDR8ZD4+MiYxNSk8PDI0Pj4yNDtsW20rK109KGQ8PDZ8ZSk8PDI0Pj4yNH1pZighWGxlKGc9ZltrKytdKXx8IVhsZShoPWZbaysrXSkpe3JldHVybiBudWxsfWI9U2xlW2ddO2M9U2xlW2hdO2k9ZltrKytdO2o9ZltrKytdO2lmKFNsZVtpXT09LTF8fFNsZVtqXT09LTEpe2lmKGk9PTYxJiZqPT02MSl7aWYoKGMmMTUpIT0wKXJldHVybiBudWxsO3E9U0MoJEQsWkNlLDMwLG4qMysxLDE1LDEpOyRnYihsLDAscSwwLG4qMyk7cVttXT0oYjw8MnxjPj40KTw8MjQ+PjI0O3JldHVybiBxfWVsc2UgaWYoaSE9NjEmJmo9PTYxKXtkPVNsZVtpXTtpZigoZCYzKSE9MClyZXR1cm4gbnVsbDtxPVNDKCRELFpDZSwzMCxuKjMrMiwxNSwxKTskZ2IobCwwLHEsMCxuKjMpO3FbbSsrXT0oYjw8MnxjPj40KTw8MjQ+PjI0O3FbbV09KChjJjE1KTw8NHxkPj4yJjE1KTw8MjQ+PjI0O3JldHVybiBxfWVsc2V7cmV0dXJuIG51bGx9fWVsc2V7ZD1TbGVbaV07ZT1TbGVbal07bFttKytdPShiPDwyfGM+PjQpPDwyND4+MjQ7bFttKytdPSgoYyYxNSk8PDR8ZD4+MiYxNSk8PDI0Pj4yNDtsW20rK109KGQ8PDZ8ZSk8PDI0Pj4yNH1yZXR1cm4gbH0KZnVuY3Rpb24gSjhiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdjtiLlNnKGR3ZSwxKTtvPUpEKFdNYihhLChCd2MoKSx5dWMpKSwyMjApO2ZvcihlPW5ldyBybWIoYS5iKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjUpO2o9RFhiKGQuYSk7Zm9yKGc9aixoPTAsaT1nLmxlbmd0aDtoPGk7KytoKXtmPWdbaF07aWYoZi5rIT0oRFliKCksQlliKSl7Y29udGludWV9aWYobz09KHhoZCgpLHZoZCkpe2ZvcihsPW5ldyBybWIoZi5qKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1KRChwbWIobCksMTEpO2suZS5jLmxlbmd0aD09MHx8TThiKGspO2suZy5jLmxlbmd0aD09MHx8TjhiKGspfX1lbHNlIGlmKFJEKFdNYihmLChJcWMoKSxrcWMpKSwxOCkpe3E9SkQoV01iKGYsa3FjKSwxOCk7cj1KRChvWWIoZiwoUmpkKCksUWpkKSkuSmMoKS5QYigpLDExKTtzPUpEKG9ZYihmLHdqZCkuSmMoKS5QYigpLDExKTt0PUpEKFdNYihyLGtxYyksMTEpO3U9SkQoV01iKHMsa3FjKSwxMSk7Z1diKHEsdSk7aFdiKHEsdCk7dj1uZXcgRmRkKHMuaS5uKTt2LmE9S2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW3UuaS5uLHUubix1LmFdKSkuYTtBdGIocS5hLHYpO3Y9bmV3IEZkZChyLmkubik7di5hPUtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFt0Lmkubix0Lm4sdC5hXSkpLmE7QXRiKHEuYSx2KX1lbHNle2lmKGYuai5jLmxlbmd0aD49Mil7cD10cnVlO209bmV3IHJtYihmLmopO2M9SkQocG1iKG0pLDExKTtuPW51bGw7d2hpbGUobS5hPG0uYy5jLmxlbmd0aCl7bj1jO2M9SkQocG1iKG0pLDExKTtpZighcGIoV01iKG4sa3FjKSxXTWIoYyxrcWMpKSl7cD1mYWxzZTticmVha319fWVsc2V7cD1mYWxzZX1mb3IobD1uZXcgcm1iKGYuaik7bC5hPGwuYy5jLmxlbmd0aDspe2s9SkQocG1iKGwpLDExKTtrLmUuYy5sZW5ndGg9PTB8fEs4YihrLHApO2suZy5jLmxlbmd0aD09MHx8TDhiKGsscCl9fXFZYihmLG51bGwpfX1iLlRnKCl9CmZ1bmN0aW9uIE9LYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHY7Zm9yKGg9bmV3IHJtYihhLmEuYik7aC5hPGguYy5jLmxlbmd0aDspe2Y9SkQocG1iKGgpLDI1KTtmb3IodD1uZXcgcm1iKGYuYSk7dC5hPHQuYy5jLmxlbmd0aDspe3M9SkQocG1iKHQpLDkpO2IuZ1tzLnBdPXM7Yi5hW3MucF09cztiLmRbcy5wXT0wfX1pPWEuYS5iO2IuYz09KHpLYygpLHhLYykmJihpPWR2KGkpKTtmb3IoZz1pLkpjKCk7Zy5PYigpOyl7Zj1KRChnLlBiKCksMjUpO249LTE7bT1mLmE7aWYoYi5vPT0oSEtjKCksR0tjKSl7bj1IcWU7bT1kdihtKX1mb3Iodj1tLkpjKCk7di5PYigpOyl7dT1KRCh2LlBiKCksOSk7bD1udWxsO2IuYz09eEtjPyhsPUpEKE1sYihhLmIuZix1LnApLDE1KSk6KGw9SkQoTWxiKGEuYi5iLHUucCksMTUpKTtpZihsLmdjKCk+MCl7ZD1sLmdjKCk7aj1ZRCgkd25kLk1hdGguZmxvb3IoKGQrMSkvMikpLTE7ZT1ZRCgkd25kLk1hdGguY2VpbCgoZCsxKS8yKSktMTtpZihiLm89PUdLYyl7Zm9yKGs9ZTtrPj1qO2stLSl7aWYoYi5hW3UucF09PXUpe3A9SkQobC5YYihrKSw0Nyk7bz1KRChwLmEsOSk7aWYoIU9yYihjLHAuYikmJm4+YS5iLmVbby5wXSl7Yi5hW28ucF09dTtiLmdbdS5wXT1iLmdbby5wXTtiLmFbdS5wXT1iLmdbdS5wXTtiLmZbYi5nW3UucF0ucF09KHhkYigpLHlkYihiLmZbYi5nW3UucF0ucF0pJnUuaz09KERZYigpLHlZYik/dHJ1ZTpmYWxzZSk7bj1hLmIuZVtvLnBdfX19fWVsc2V7Zm9yKGs9ajtrPD1lO2srKyl7aWYoYi5hW3UucF09PXUpe3I9SkQobC5YYihrKSw0Nyk7cT1KRChyLmEsOSk7aWYoIU9yYihjLHIuYikmJm48YS5iLmVbcS5wXSl7Yi5hW3EucF09dTtiLmdbdS5wXT1iLmdbcS5wXTtiLmFbdS5wXT1iLmdbdS5wXTtiLmZbYi5nW3UucF0ucF09KHhkYigpLHlkYihiLmZbYi5nW3UucF0ucF0pJnUuaz09KERZYigpLHlZYik/dHJ1ZTpmYWxzZSk7bj1hLmIuZVtxLnBdfX19fX19fX0KZnVuY3Rpb24gbEljKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQjt0PWEuY1soc0RiKDAsYi5jLmxlbmd0aCksSkQoYi5jWzBdLDE4KSkucF07QT1hLmNbKHNEYigxLGIuYy5sZW5ndGgpLEpEKGIuY1sxXSwxOCkpLnBdO2lmKHQuYS5lLmUtdC5hLmEtKHQuYi5lLmUtdC5iLmEpPT0wJiZBLmEuZS5lLUEuYS5hLShBLmIuZS5lLUEuYi5hKT09MCl7cmV0dXJuIGZhbHNlfXI9dC5iLmUuZjtpZighUkQociw5KSl7cmV0dXJuIGZhbHNlfXE9SkQociw5KTt2PWEuaVtxLnBdO3c9IXEuYz8tMTpObGIocS5jLmEscSwwKTtmPUtzZTtpZih3PjApe2U9SkQoTWxiKHEuYy5hLHctMSksOSk7Zz1hLmlbZS5wXTtCPSR3bmQuTWF0aC5jZWlsKGV6YyhhLm4sZSxxKSk7Zj12LmEuZS1xLmQuZC0oZy5hLmUrZS5vLmIrZS5kLmEpLUJ9aj1Lc2U7aWYodzxxLmMuYS5jLmxlbmd0aC0xKXtpPUpEKE1sYihxLmMuYSx3KzEpLDkpO2s9YS5pW2kucF07Qj0kd25kLk1hdGguY2VpbChlemMoYS5uLGkscSkpO2o9ay5hLmUtaS5kLmQtKHYuYS5lK3Euby5iK3EuZC5hKS1CfWlmKGMmJihSeSgpLFZ5KHB6ZSksJHduZC5NYXRoLmFicyhmLWopPD1wemV8fGY9PWp8fGlzTmFOKGYpJiZpc05hTihqKSkpe3JldHVybiB0cnVlfWQ9SkljKHQuYSk7aD0tSkljKHQuYik7bD0tSkljKEEuYSk7cz1KSWMoQS5iKTtwPXQuYS5lLmUtdC5hLmEtKHQuYi5lLmUtdC5iLmEpPjAmJkEuYS5lLmUtQS5hLmEtKEEuYi5lLmUtQS5iLmEpPDA7bz10LmEuZS5lLXQuYS5hLSh0LmIuZS5lLXQuYi5hKTwwJiZBLmEuZS5lLUEuYS5hLShBLmIuZS5lLUEuYi5hKT4wO249dC5hLmUuZSt0LmIuYTxBLmIuZS5lK0EuYS5hO209dC5hLmUuZSt0LmIuYT5BLmIuZS5lK0EuYS5hO3U9MDshcCYmIW8mJihtP2YrbD4wPyh1PWwpOmotZD4wJiYodT1kKTpuJiYoZitoPjA/KHU9aCk6ai1zPjAmJih1PXMpKSk7di5hLmUrPXU7di5iJiYodi5kLmUrPXUpO3JldHVybiBmYWxzZX0KZnVuY3Rpb24gWkdiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbTtkPW5ldyBnZGQoYi5KZigpLmEsYi5KZigpLmIsYi5LZigpLmEsYi5LZigpLmIpO2U9bmV3IGZkZDtpZihhLmMpe2ZvcihnPW5ldyBybWIoYi5QZigpKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTg3KTtlLmM9Zi5KZigpLmErYi5KZigpLmE7ZS5kPWYuSmYoKS5iK2IuSmYoKS5iO2UuYj1mLktmKCkuYTtlLmE9Zi5LZigpLmI7ZWRkKGQsZSl9fWZvcihqPW5ldyBybWIoYi5WZigpKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksODMxKTtrPWkuSmYoKS5hK2IuSmYoKS5hO2w9aS5KZigpLmIrYi5KZigpLmI7aWYoYS5lKXtlLmM9aztlLmQ9bDtlLmI9aS5LZigpLmE7ZS5hPWkuS2YoKS5iO2VkZChkLGUpfWlmKGEuZCl7Zm9yKGc9bmV3IHJtYihpLlBmKCkpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwxODcpO2UuYz1mLkpmKCkuYStrO2UuZD1mLkpmKCkuYitsO2UuYj1mLktmKCkuYTtlLmE9Zi5LZigpLmI7ZWRkKGQsZSl9fWlmKGEuYil7bT1uZXcgRWRkKC1jLC1jKTtpZihKRChiLm1mKChMZ2QoKSxhZ2QpKSwxODEpLkdjKChvamQoKSxtamQpKSl7Zm9yKGc9bmV3IHJtYihpLlBmKCkpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwxODcpO20uYSs9Zi5LZigpLmErYzttLmIrPWYuS2YoKS5iK2N9fW0uYT0kd25kLk1hdGgubWF4KG0uYSwwKTttLmI9JHduZC5NYXRoLm1heChtLmIsMCk7WEdiKGQsaS5VZigpLGkuU2YoKSxiLGksbSxjKX19YS5iJiZYR2IoZCxiLlVmKCksYi5TZigpLGIsbnVsbCxudWxsLGMpO2g9bmV3IGFZYihiLlRmKCkpO2guZD0kd25kLk1hdGgubWF4KDAsYi5KZigpLmItZC5kKTtoLmE9JHduZC5NYXRoLm1heCgwLGQuZCtkLmEtKGIuSmYoKS5iK2IuS2YoKS5iKSk7aC5iPSR3bmQuTWF0aC5tYXgoMCxiLkpmKCkuYS1kLmMpO2guYz0kd25kLk1hdGgubWF4KDAsZC5jK2QuYi0oYi5KZigpLmErYi5LZigpLmEpKTtiLlhmKGgpfQpmdW5jdGlvbiBFeigpe3ZhciBhPVsnXFx1MDAwMCcsJ1xcdTAwMDEnLCdcXHUwMDAyJywnXFx1MDAwMycsJ1xcdTAwMDQnLCdcXHUwMDA1JywnXFx1MDAwNicsJ1xcdTAwMDcnLCdcXGInLCdcXHQnLCdcXG4nLCdcXHUwMDBCJywnXFxmJywnXFxyJywnXFx1MDAwRScsJ1xcdTAwMEYnLCdcXHUwMDEwJywnXFx1MDAxMScsJ1xcdTAwMTInLCdcXHUwMDEzJywnXFx1MDAxNCcsJ1xcdTAwMTUnLCdcXHUwMDE2JywnXFx1MDAxNycsJ1xcdTAwMTgnLCdcXHUwMDE5JywnXFx1MDAxQScsJ1xcdTAwMUInLCdcXHUwMDFDJywnXFx1MDAxRCcsJ1xcdTAwMUUnLCdcXHUwMDFGJ107YVszNF09J1xcIic7YVs5Ml09J1xcXFwnO2FbMTczXT0nXFx1MDBhZCc7YVsxNTM2XT0nXFx1MDYwMCc7YVsxNTM3XT0nXFx1MDYwMSc7YVsxNTM4XT0nXFx1MDYwMic7YVsxNTM5XT0nXFx1MDYwMyc7YVsxNzU3XT0nXFx1MDZkZCc7YVsxODA3XT0nXFx1MDcwZic7YVs2MDY4XT0nXFx1MTdiNCc7YVs2MDY5XT0nXFx1MTdiNSc7YVs4MjAzXT0nXFx1MjAwYic7YVs4MjA0XT0nXFx1MjAwYyc7YVs4MjA1XT0nXFx1MjAwZCc7YVs4MjA2XT0nXFx1MjAwZSc7YVs4MjA3XT0nXFx1MjAwZic7YVs4MjMyXT0nXFx1MjAyOCc7YVs4MjMzXT0nXFx1MjAyOSc7YVs4MjM0XT0nXFx1MjAyYSc7YVs4MjM1XT0nXFx1MjAyYic7YVs4MjM2XT0nXFx1MjAyYyc7YVs4MjM3XT0nXFx1MjAyZCc7YVs4MjM4XT0nXFx1MjAyZSc7YVs4Mjg4XT0nXFx1MjA2MCc7YVs4Mjg5XT0nXFx1MjA2MSc7YVs4MjkwXT0nXFx1MjA2Mic7YVs4MjkxXT0nXFx1MjA2Myc7YVs4MjkyXT0nXFx1MjA2NCc7YVs4Mjk4XT0nXFx1MjA2YSc7YVs4Mjk5XT0nXFx1MjA2Yic7YVs4MzAwXT0nXFx1MjA2Yyc7YVs4MzAxXT0nXFx1MjA2ZCc7YVs4MzAyXT0nXFx1MjA2ZSc7YVs4MzAzXT0nXFx1MjA2Zic7YVs2NTI3OV09J1xcdWZlZmYnO2FbNjU1MjldPSdcXHVmZmY5JzthWzY1NTMwXT0nXFx1ZmZmYSc7YVs2NTUzMV09J1xcdWZmZmInO3JldHVybiBhfQpmdW5jdGlvbiBKT2IoYSl7UmFkKGEsbmV3IGNhZChvYWQoamFkKG5hZChrYWQobWFkKGxhZChuZXcgcGFkLEt1ZSksJ0VMSyBGb3JjZScpLCdGb3JjZS1iYXNlZCBhbGdvcml0aG0gcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgTGF5b3V0IEtlcm5lbC4gSW1wbGVtZW50cyBtZXRob2RzIHRoYXQgZm9sbG93IHBoeXNpY2FsIGFuYWxvZ2llcyBieSBzaW11bGF0aW5nIGZvcmNlcyB0aGF0IG1vdmUgdGhlIG5vZGVzIGludG8gYSBiYWxhbmNlZCBkaXN0cmlidXRpb24uIEN1cnJlbnRseSB0aGUgb3JpZ2luYWwgRWFkZXMgbW9kZWwgYW5kIHRoZSBGcnVjaHRlcm1hbiAtIFJlaW5nb2xkIG1vZGVsIGFyZSBzdXBwb3J0ZWQuJyksbmV3IE1PYiksS3VlKSxucmIoKEJCZCgpLHlCZCksV0MoT0MoTDQsMSksRXJlLDI0MywwLFt3QmRdKSkpKSk7UGFkKGEsS3VlLEx1ZSxqZmIoMSkpO1BhZChhLEt1ZSxNdWUsODApO1BhZChhLEt1ZSxOdWUsNSk7UGFkKGEsS3VlLE91ZSxKdWUpO1BhZChhLEt1ZSxQdWUsamZiKDEpKTtQYWQoYSxLdWUsUXVlLCh4ZGIoKSx0cnVlKSk7UGFkKGEsS3VlLFJ1ZSxzT2IpO1BhZChhLEt1ZSxTdWUsSkJkKGpPYikpO1BhZChhLEt1ZSxUdWUsSkJkKHRPYikpO1BhZChhLEt1ZSxVdWUsZmFsc2UpO1BhZChhLEt1ZSxWdWUsSkJkKHFPYikpO1BhZChhLEt1ZSxXdWUsSkJkKG9PYikpO1BhZChhLEt1ZSxYdWUsSkJkKHBPYikpO1BhZChhLEt1ZSxZdWUsSkJkKG5PYikpO1BhZChhLEt1ZSxadWUsSkJkKG1PYikpO1BhZChhLEt1ZSwkdWUsSkJkKHVPYikpO1BhZChhLEt1ZSxCdWUsSkJkKGxPYikpO1BhZChhLEt1ZSxFdWUsSkJkKENPYikpO1BhZChhLEt1ZSxDdWUsSkJkKGtPYikpO1BhZChhLEt1ZSxHdWUsSkJkKHhPYikpO1BhZChhLEt1ZSxEdWUsSkJkKHlPYikpO1BhZChhLEt1ZSxfdWUsSkJkKEZPYikpO1BhZChhLEt1ZSxhdmUsSkJkKEhPYikpO1BhZChhLEt1ZSxidmUsSkJkKEVPYikpO1BhZChhLEt1ZSxjdmUsSkJkKERPYikpO1BhZChhLEt1ZSxkdmUsR09iKX0KZnVuY3Rpb24gZ2xjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7bj1KRChNbGIoKHNEYigwLGIuYy5sZW5ndGgpLEpEKGIuY1swXSwyNSkpLmEsZCksOSk7Yz4wJiZxWWIobiwoc0RiKGMsYi5jLmxlbmd0aCksSkQoYi5jW2NdLDI1KSkpO2Y9MDttPXRydWU7cj1kdihadShoWWIobikpKTtmb3IoaT1yLkpjKCk7aS5PYigpOyl7aD1KRChpLlBiKCksMTgpO209ZmFsc2U7bD1oO2ZvcihqPTA7ajxjO2orKyl7ZT1ibGMoYSxsKTtkK2Y+KHNEYihqLGIuYy5sZW5ndGgpLEpEKGIuY1tqXSwyNSkpLmEuYy5sZW5ndGg/cVliKGUsKHNEYihqLGIuYy5sZW5ndGgpLEpEKGIuY1tqXSwyNSkpKTpwWWIoZSxkK2YsKHNEYihqLGIuYy5sZW5ndGgpLEpEKGIuY1tqXSwyNSkpKTtsPV83YihsLGUpfWM+MCYmKGYrPTEpfWlmKG0pe2ZvcihqPTA7ajxjO2orKyl7ZT1uZXcgdFliKGEpO3JZYihlLChEWWIoKSxDWWIpKTtkK2Y+KHNEYihqLGIuYy5sZW5ndGgpLEpEKGIuY1tqXSwyNSkpLmEuYy5sZW5ndGg/cVliKGUsKHNEYihqLGIuYy5sZW5ndGgpLEpEKGIuY1tqXSwyNSkpKTpwWWIoZSxkK2YsKHNEYihqLGIuYy5sZW5ndGgpLEpEKGIuY1tqXSwyNSkpKX1jPjAmJihmKz0xKX1nPWZhbHNlO2ZvcihwPW5ldyBlcyhJcihrWWIobikuYS5KYygpLG5ldyBlcikpO2NzKHApOyl7bz1KRChkcyhwKSwxOCk7bD1vO2ZvcihrPWMrMTtrPGIuYy5sZW5ndGg7aysrKXtlPWJsYyhhLGwpO3FZYihlLChzRGIoayxiLmMubGVuZ3RoKSxKRChiLmNba10sMjUpKSk7bD1fN2IobCxlKX1mb3Ioaj0wO2o8PWM7aisrKXtpZihnKXtxPW5ldyB0WWIoYSk7clliKHEsKERZYigpLHpZYikpO2QrMT4oc0RiKGosYi5jLmxlbmd0aCksSkQoYi5jW2pdLDI1KSkuYS5jLmxlbmd0aD9xWWIocSwoc0RiKGosYi5jLmxlbmd0aCksSkQoYi5jW2pdLDI1KSkpOnBZYihxLGQrMSwoc0RiKGosYi5jLmxlbmd0aCksSkQoYi5jW2pdLDI1KSkpfX1nJiYoZis9MSk7Zz10cnVlfXJldHVybiBmPjA/Zi0xOjB9CmZ1bmN0aW9uIENvZShhLGIpe29vZSgpO3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO2lmKFVpYihSbmUpPT0wKXtsPVNDKGljYixocmUsMTIxLFRuZS5sZW5ndGgsMCwxKTtmb3IoZz0wO2c8bC5sZW5ndGg7ZysrKXtsW2ddPSgrK25vZSxuZXcgU29lKDQpKX1kPW5ldyBJZ2I7Zm9yKGY9MDtmPFFuZS5sZW5ndGg7ZisrKXtrPSgrK25vZSxuZXcgU29lKDQpKTtpZihmPDg0KXtoPWYqMjtuPShBRGIoaCxZR2UubGVuZ3RoKSxZR2UuY2hhckNvZGVBdChoKSk7bT0oQURiKGgrMSxZR2UubGVuZ3RoKSxZR2UuY2hhckNvZGVBdChoKzEpKTtNb2UoayxuLG0pfWVsc2V7aD0oZi04NCkqMjtNb2UoayxVbmVbaF0sVW5lW2grMV0pfWk9UW5lW2ZdO2NnYihpLCdTcGVjaWFscycpJiZNb2Uoayw2NTUyMCw2NTUzMyk7aWYoY2diKGksV0dlKSl7TW9lKGssOTgzMDQwLDEwNDg1NzMpO01vZShrLDEwNDg1NzYsMTExNDEwOSl9UmliKFJuZSxpLGspO1JpYihTbmUsaSxUb2UoaykpO2o9ZC5hLmxlbmd0aDswPGo/KGQuYT1xZ2IoZC5hLDAsMCkpOjA+aiYmKGQuYSs9eWdiKFNDKF9ELFVyZSwzMCwtaiwxNSwxKSkpO2QuYSs9J0lzJztpZihoZ2IoaSx3Z2IoMzIpKT49MCl7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKyl7QURiKGUsaS5sZW5ndGgpO2kuY2hhckNvZGVBdChlKSE9MzImJkFnYihkLChBRGIoZSxpLmxlbmd0aCksaS5jaGFyQ29kZUF0KGUpKSl9fWVsc2V7ZC5hKz0nJytpfUdvZShkLmEsaSx0cnVlKX1Hb2UoWEdlLCdDbicsZmFsc2UpO0dvZShaR2UsJ0NuJyx0cnVlKTtjPSgrK25vZSxuZXcgU29lKDQpKTtNb2UoYywwLE5HZSk7UmliKFJuZSwnQUxMJyxjKTtSaWIoU25lLCdBTEwnLFRvZShjKSk7IVZuZSYmKFZuZT1uZXcgSXJiKTtSaWIoVm5lLFhHZSxYR2UpOyFWbmUmJihWbmU9bmV3IElyYik7UmliKFZuZSxaR2UsWkdlKTshVm5lJiYoVm5lPW5ldyBJcmIpO1JpYihWbmUsJ0FMTCcsJ0FMTCcpfW89Yj9KRChPaWIoUm5lLGEpLDEzNik6SkQoT2liKFNuZSxhKSwxMzYpO3JldHVybiBvfQpmdW5jdGlvbiBsVmMoYSl7UmFkKGEsbmV3IGNhZChvYWQoamFkKG5hZChrYWQobWFkKGxhZChuZXcgcGFkLFV6ZSksJ0VMSyBNci4gVHJlZScpLCJUcmVlLWJhc2VkIGFsZ29yaXRobSBwcm92aWRlZCBieSB0aGUgRWNsaXBzZSBMYXlvdXQgS2VybmVsLiBDb21wdXRlcyBhIHNwYW5uaW5nIHRyZWUgb2YgdGhlIGlucHV0IGdyYXBoIGFuZCBhcnJhbmdlcyBhbGwgbm9kZXMgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHRpbmcgcGFyZW50LWNoaWxkcmVuIGhpZXJhcmNoeS4gSSBwaXR5IHRoZSBmb29sIHdobyBkb2Vzbid0IHVzZSBNci4gVHJlZSBMYXlvdXQuIiksbmV3IG9WYyksVnplKSxtcmIoKEJCZCgpLHZCZCkpKSkpO1BhZChhLFV6ZSxSdWUsWFVjKTtQYWQoYSxVemUsTXVlLDIwKTtQYWQoYSxVemUsc3llLDMpO1BhZChhLFV6ZSxPdWUsSnVlKTtQYWQoYSxVemUsTHVlLGpmYigxKSk7UGFkKGEsVXplLFF1ZSwoeGRiKCksdHJ1ZSkpO1BhZChhLFV6ZSxEeWUsSkJkKEpVYykpO1BhZChhLFV6ZSxIeWUsTFVjKTtQYWQoYSxVemUsU3VlLEpCZChPVWMpKTtQYWQoYSxVemUsYnplLEpCZChQVWMpKTtQYWQoYSxVemUsWXVlLEpCZChSVWMpKTtQYWQoYSxVemUsV3VlLEpCZChTVWMpKTtQYWQoYSxVemUscHZlLEpCZChUVWMpKTtQYWQoYSxVemUsWHVlLEpCZChVVWMpKTtQYWQoYSxVemUsWnVlLEpCZChRVWMpKTtQYWQoYSxVemUsVnVlLEpCZChWVWMpKTtQYWQoYSxVemUsJHVlLEpCZChZVWMpKTtQYWQoYSxVemUsUXplLEpCZChqVmMpKTtQYWQoYSxVemUsU3plLEpCZChfVWMpKTtQYWQoYSxVemUsX3VlLEpCZChmVmMpKTtQYWQoYSxVemUsYXZlLEpCZChoVmMpKTtQYWQoYSxVemUsYnZlLEpCZChlVmMpKTtQYWQoYSxVemUsY3ZlLEpCZChkVmMpKTtQYWQoYSxVemUsZHZlLGdWYyk7UGFkKGEsVXplLFB6ZSxKQmQoWlVjKSk7UGFkKGEsVXplLFJ6ZSxKQmQoTlVjKSk7UGFkKGEsVXplLE96ZSxKQmQoaVZjKSk7UGFkKGEsVXplLE16ZSxKQmQoSVVjKSk7UGFkKGEsVXplLE56ZSxKQmQoTVVjKSl9CmZ1bmN0aW9uIENLYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG07aj1KRChKRChRYyhhLnIsYiksMjIpLDgzKTtnPWRLYihhLGIpO2M9YS51LkdjKChvamQoKSxpamQpKTtmb3IoaT1qLkpjKCk7aS5PYigpOyl7aD1KRChpLlBiKCksMTE1KTtpZighaC5jfHxoLmMuZC5jLmxlbmd0aDw9MCl7Y29udGludWV9bT1oLmIuS2YoKTtrPWguYztsPWsuaTtsLmI9KGY9ay5uLGsuZS5hK2YuYitmLmMpO2wuYT0oZT1rLm4say5lLmIrZS5kK2UuYSk7c3dpdGNoKGIuZyl7Y2FzZSAxOmlmKGguYSl7bC5jPShtLmEtbC5iKS8yO2FJYihrLChQSGIoKSxNSGIpKX1lbHNlIGlmKGd8fGMpe2wuYz0tbC5iLWEuczthSWIoaywoUEhiKCksT0hiKSl9ZWxzZXtsLmM9bS5hK2EuczthSWIoaywoUEhiKCksTkhiKSl9bC5kPS1sLmEtYS50O2JJYihrLChHSWIoKSxESWIpKTticmVhaztjYXNlIDM6aWYoaC5hKXtsLmM9KG0uYS1sLmIpLzI7YUliKGssKFBIYigpLE1IYikpfWVsc2UgaWYoZ3x8Yyl7bC5jPS1sLmItYS5zO2FJYihrLChQSGIoKSxPSGIpKX1lbHNle2wuYz1tLmErYS5zO2FJYihrLChQSGIoKSxOSGIpKX1sLmQ9bS5iK2EudDtiSWIoaywoR0liKCksRkliKSk7YnJlYWs7Y2FzZSAyOmlmKGguYSl7ZD1hLnY/bC5hOkpEKE1sYihrLmQsMCksMTg3KS5LZigpLmI7bC5kPShtLmItZCkvMjtiSWIoaywoR0liKCksRUliKSl9ZWxzZSBpZihnfHxjKXtsLmQ9LWwuYS1hLnQ7YkliKGssKEdJYigpLERJYikpfWVsc2V7bC5kPW0uYithLnQ7YkliKGssKEdJYigpLEZJYikpfWwuYz1tLmErYS5zO2FJYihrLChQSGIoKSxOSGIpKTticmVhaztjYXNlIDQ6aWYoaC5hKXtkPWEudj9sLmE6SkQoTWxiKGsuZCwwKSwxODcpLktmKCkuYjtsLmQ9KG0uYi1kKS8yO2JJYihrLChHSWIoKSxFSWIpKX1lbHNlIGlmKGd8fGMpe2wuZD0tbC5hLWEudDtiSWIoaywoR0liKCksREliKSl9ZWxzZXtsLmQ9bS5iK2EudDtiSWIoaywoR0liKCksRkliKSl9bC5jPS1sLmItYS5zO2FJYihrLChQSGIoKSxPSGIpKTt9Zz1mYWxzZX19CmZ1bmN0aW9uIEZfYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHM7bT1mYWxzZTtsPWZhbHNlO2lmKGNqZChKRChXTWIoZCwoQndjKCksRXZjKSksMTAwKSkpe2c9ZmFsc2U7aD1mYWxzZTt0OmZvcihvPW5ldyBybWIoZC5qKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1KRChwbWIobyksMTEpO2ZvcihxPURsKHlsKFdDKE9DKFZJLDEpLE5xZSwyMCwwLFtuZXcgZFpiKG4pLG5ldyBsWmIobildKSkpO2NzKHEpOyl7cD1KRChkcyhxKSwxMSk7aWYoIXlkYihMRChXTWIocC5pLFV0YykpKSl7aWYobi5qPT0oUmpkKCkseGpkKSl7Zz10cnVlO2JyZWFrIHR9aWYobi5qPT1PamQpe2g9dHJ1ZTticmVhayB0fX19fW09aCYmIWc7bD1nJiYhaH1pZighbSYmIWwmJmQuYi5jLmxlbmd0aCE9MCl7az0wO2ZvcihqPW5ldyBybWIoZC5iKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksNzIpO2srPWkubi5iK2kuby5iLzJ9ay89ZC5iLmMubGVuZ3RoO3M9az49ZC5vLmIvMn1lbHNle3M9IWx9aWYocyl7cj1KRChXTWIoZCwoSXFjKCksSHFjKSksMTUpO2lmKCFyKXtmPW5ldyBVbGI7Wk1iKGQsSHFjLGYpfWVsc2UgaWYobSl7Zj1yfWVsc2V7ZT1KRChXTWIoZCxGcGMpLDE1KTtpZighZSl7Zj1uZXcgVWxiO1pNYihkLEZwYyxmKX1lbHNle3IuZ2MoKTw9ZS5nYygpPyhmPXIpOihmPWUpfX19ZWxzZXtlPUpEKFdNYihkLChJcWMoKSxGcGMpKSwxNSk7aWYoIWUpe2Y9bmV3IFVsYjtaTWIoZCxGcGMsZil9ZWxzZSBpZihsKXtmPWV9ZWxzZXtyPUpEKFdNYihkLEhxYyksMTUpO2lmKCFyKXtmPW5ldyBVbGI7Wk1iKGQsSHFjLGYpfWVsc2V7ZS5nYygpPD1yLmdjKCk/KGY9ZSk6KGY9cil9fX1mLkVjKGEpO1pNYihhLChJcWMoKSxIcGMpLGMpO2lmKGIuZD09Yyl7aFdiKGIsbnVsbCk7Yy5lLmMubGVuZ3RoK2MuZy5jLmxlbmd0aD09MCYmX1liKGMsbnVsbCk7R19iKGMpfWVsc2V7Z1diKGIsbnVsbCk7Yy5lLmMubGVuZ3RoK2MuZy5jLmxlbmd0aD09MCYmX1liKGMsbnVsbCl9THRiKGIuYSl9CmZ1bmN0aW9uIEpCYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRyxILEk7Yy5TZygnTWluV2lkdGggbGF5ZXJpbmcnLDEpO249Yi5iO0E9Yi5hO0k9SkQoV01iKGIsKEJ3YygpLFd1YykpLDE3KS5hO2g9SkQoV01iKGIsWHVjKSwxNykuYTthLmI9QmViKE1EKFdNYihiLFd2YykpKTthLmQ9S3NlO2Zvcih1PW5ldyBybWIoQSk7dS5hPHUuYy5jLmxlbmd0aDspe3M9SkQocG1iKHUpLDkpO2lmKHMuayE9KERZYigpLEFZYikpe2NvbnRpbnVlfUQ9cy5vLmI7YS5kPSR3bmQuTWF0aC5taW4oYS5kLEQpfWEuZD0kd25kLk1hdGgubWF4KDEsYS5kKTtCPUEuYy5sZW5ndGg7YS5jPVNDKGNFLGlzZSwzMCxCLDE1LDEpO2EuZj1TQyhjRSxpc2UsMzAsQiwxNSwxKTthLmU9U0MoYUUsUnNlLDMwLEIsMTUsMSk7aj0wO2EuYT0wO2Zvcih2PW5ldyBybWIoQSk7di5hPHYuYy5jLmxlbmd0aDspe3M9SkQocG1iKHYpLDkpO3MucD1qKys7YS5jW3MucF09SEJjKGhZYihzKSk7YS5mW3MucF09SEJjKGtZYihzKSk7YS5lW3MucF09cy5vLmIvYS5kO2EuYSs9YS5lW3MucF19YS5iLz1hLmQ7YS5hLz1CO3c9SUJjKEEpO1NsYihBLHduYihuZXcgUEJjKGEpKSk7cD1Lc2U7bz1IcWU7Zz1udWxsO0g9STtHPUk7Zj1oO2U9aDtpZihJPDApe0g9SkQoRUJjLmEuR2QoKSwxNykuYTtHPUpEKEVCYy5iLkdkKCksMTcpLmF9aWYoaDwwKXtmPUpEKERCYy5hLkdkKCksMTcpLmE7ZT1KRChEQmMuYi5HZCgpLDE3KS5hfWZvcihGPUg7Rjw9RztGKyspe2ZvcihkPWY7ZDw9ZTtkKyspe0M9R0JjKGEsRixkLEEsdyk7cj1CZWIoTUQoQy5hKSk7bT1KRChDLmIsMTUpO3E9bS5nYygpO2lmKHI8cHx8cj09cCYmcTxvKXtwPXI7bz1xO2c9bX19fWZvcihsPWcuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSwxNSk7aT1uZXcgYiRiKGIpO2Zvcih0PWsuSmMoKTt0Lk9iKCk7KXtzPUpEKHQuUGIoKSw5KTtxWWIocyxpKX1ZQ2Iobi5jLGkpfXZuYihuKTtBLmMubGVuZ3RoPTA7Yy5UZygpfQpmdW5jdGlvbiBVOGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQTtiLlNnKGR3ZSwxKTtwPW5ldyBVbGI7dz1uZXcgVWxiO2ZvcihqPW5ldyBybWIoYS5iKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksMjUpO3I9LTE7bz1EWGIoaS5hKTtmb3IobD1vLG09MCxuPWwubGVuZ3RoO208bjsrK20pe2s9bFttXTsrK3I7aWYoIShrLms9PShEWWIoKSxBWWIpJiZjamQoSkQoV01iKGssKEJ3YygpLEV2YykpLDEwMCkpKSl7Y29udGludWV9IWJqZChKRChXTWIoaywoQndjKCksRXZjKSksMTAwKSkmJlhEKFdNYihnWWIoayksY3VjKSk9PT1YRCgobnljKCksa3ljKSkmJlY4YihrKTtaTWIoaywoSXFjKCksX3BjKSxrKTtwLmMubGVuZ3RoPTA7dy5jLmxlbmd0aD0wO2M9bmV3IFVsYjt1PW5ldyBNdGI7WHEodSxvWWIoaywoUmpkKCkseGpkKSkpO1hEKFdNYihnWWIoayksY3VjKSkhPT1YRCgobnljKCksa3ljKSkmJih1PVQ4Yih1KSk7UjhiKGEsdSxwLHcsYyk7aD1yO0E9aztmb3IoZj1uZXcgcm1iKHApO2YuYTxmLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihmKSw5KTtwWWIoZCxoLGkpOysrcjtaTWIoZCxfcGMsayk7Zz1KRChNbGIoZC5qLDApLDExKTtxPUpEKFdNYihnLGtxYyksMTEpO3lkYihMRChXTWIocSxTdGMpKSl8fEpEKFdNYihkLGFxYyksMTUpLkVjKEEpfUx0Yih1KTtmb3IodD1vWWIoayxPamQpLkpjKCk7dC5PYigpOyl7cz1KRCh0LlBiKCksMTEpO0R0Yih1LHMsdS5hLHUuYS5hKX1YRChXTWIoZ1liKGspLGN1YykpIT09WEQoa3ljKSYmKHU9VDhiKHUpKTtSOGIoYSx1LHcsbnVsbCxjKTt2PWs7Zm9yKGU9bmV3IHJtYih3KTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksOSk7cFliKGQsKytyLGkpO1pNYihkLF9wYyxrKTtnPUpEKE1sYihkLmosMCksMTEpO3E9SkQoV01iKGcsa3FjKSwxMSk7eWRiKExEKFdNYihxLFN0YykpKXx8SkQoV01iKHYsYXFjKSwxNSkuRWMoZCl9Yy5jLmxlbmd0aD09MHx8Wk1iKGssRXBjLGMpfX1iLlRnKCl9CmZ1bmN0aW9uIFhPYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRztjLlNnKCdTcGxpbmUgZWRnZSByb3V0aW5nJywxKTtpZihiLmIuYy5sZW5ndGg9PTApe2IuZi5hPTA7Yy5UZygpO3JldHVybn1zPUJlYihNRChXTWIoYiwoQndjKCksZndjKSkpKTtoPUJlYihNRChXTWIoYiwkdmMpKSk7Zz1CZWIoTUQoV01iKGIsWHZjKSkpO3I9SkQoV01iKGIsRHVjKSwzNDYpO0I9cj09KG96YygpLG56Yyk7QT1CZWIoTUQoV01iKGIsRXVjKSkpO2EuZD1iO2Euai5jLmxlbmd0aD0wO2EuYS5jLmxlbmd0aD0wO1RpYihhLmspO2k9SkQoTWxiKGIuYiwwKSwyNSk7az1ZcShpLmEsKGdNYygpLGVNYykpO289SkQoTWxiKGIuYixiLmIuYy5sZW5ndGgtMSksMjUpO2w9WXEoby5hLGVNYyk7cD1uZXcgcm1iKGIuYik7cT1udWxsO0c9MDtkb3t0PXAuYTxwLmMuYy5sZW5ndGg/SkQocG1iKHApLDI1KTpudWxsO0xPYyhhLHEsdCk7T09jKGEpO0M9U3ViKG1CYihIQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuaSwxNikpLG5ldyBtUGMpLG5ldyBvUGMpKSk7Rj0wO3U9RzttPSFxfHxrJiZxPT1pO249IXR8fGwmJnQ9PW87aWYoQz4wKXtqPTA7ISFxJiYoais9aCk7ais9KEMtMSkqZzshIXQmJihqKz1oKTtCJiYhIXQmJihqPSR3bmQuTWF0aC5tYXgoaixNT2ModCxnLHMsQSkpKTtpZihqPHMmJiFtJiYhbil7Rj0ocy1qKS8yO2o9c311Kz1qfWVsc2UgIW0mJiFuJiYodSs9cyk7ISF0JiZ6WGIodCx1KTtmb3Iodz1uZXcgcm1iKGEuaSk7dy5hPHcuYy5jLmxlbmd0aDspe3Y9SkQocG1iKHcpLDEzMik7di5hLmM9Rzt2LmEuYj11LUc7di5GPUY7di5wPSFxfUtsYihhLmEsYS5pKTtHPXU7ISF0JiYoRys9dC5jLmEpO3E9dDttPW59d2hpbGUodCk7Zm9yKGU9bmV3IHJtYihhLmopO2UuYTxlLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihlKSwxOCk7Zj1TT2MoYSxkKTtaTWIoZCwoSXFjKCksQnFjKSxmKTtEPVVPYyhhLGQpO1pNYihkLERxYyxEKX1iLmYuYT1HO2EuZD1udWxsO2MuVGcoKX0KZnVuY3Rpb24gajNiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7YS5iPWI7YS5hPUpEKFdNYihiLChCd2MoKSxKdWMpKSwxNykuYTthLmM9SkQoV01iKGIsTHVjKSwxNykuYTthLmM9PTAmJihhLmM9SHFlKTtxPW5ldyBBamIoYi5iLDApO3doaWxlKHEuYjxxLmQuZ2MoKSl7cD0ockRiKHEuYjxxLmQuZ2MoKSksSkQocS5kLlhiKHEuYz1xLmIrKyksMjUpKTtoPW5ldyBVbGI7az0tMTt1PS0xO2Zvcih0PW5ldyBybWIocC5hKTt0LmE8dC5jLmMubGVuZ3RoOyl7cz1KRChwbWIodCksOSk7aWYoR3IoKGUzYigpLG5ldyBlcyhJcihlWWIocykuYS5KYygpLG5ldyBlcikpKSk+PWEuYSl7ZD1mM2IoYSxzKTtrPSR3bmQuTWF0aC5tYXgoayxkLmIpO3U9JHduZC5NYXRoLm1heCh1LGQuZCk7SWxiKGgsbmV3IHhvZChzLGQpKX19Qj1uZXcgVWxiO2ZvcihqPTA7ajxrOysrail7SGxiKEIsMCwockRiKHEuYj4wKSxxLmEuWGIocS5jPS0tcS5iKSxDPW5ldyBiJGIoYS5iKSx6amIocSxDKSxyRGIocS5iPHEuZC5nYygpKSxxLmQuWGIocS5jPXEuYisrKSxDKSl9Zm9yKGc9bmV3IHJtYihoKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZyksNDcpO249SkQoZS5iLDU2MikuYTtpZighbil7Y29udGludWV9Zm9yKG09bmV3IHJtYihuKTttLmE8bS5jLmMubGVuZ3RoOyl7bD1KRChwbWIobSksOSk7aTNiKGEsbCxjM2IsQil9fWM9bmV3IFVsYjtmb3IoaT0wO2k8dTsrK2kpe0lsYihjLChEPW5ldyBiJGIoYS5iKSx6amIocSxEKSxEKSl9Zm9yKGY9bmV3IHJtYihoKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksNDcpO0E9SkQoZS5iLDU2MikuYztpZighQSl7Y29udGludWV9Zm9yKHc9bmV3IHJtYihBKTt3LmE8dy5jLmMubGVuZ3RoOyl7dj1KRChwbWIodyksOSk7aTNiKGEsdixkM2IsYyl9fX1yPW5ldyBBamIoYi5iLDApO3doaWxlKHIuYjxyLmQuZ2MoKSl7bz0ockRiKHIuYjxyLmQuZ2MoKSksSkQoci5kLlhiKHIuYz1yLmIrKyksMjUpKTtvLmEuYy5sZW5ndGg9PTAmJnRqYihyKX19CmZ1bmN0aW9uIFZHZChhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O3A9YS5pIT0wO3Q9ZmFsc2U7cj1udWxsO2lmKHFxZChhLmUpKXtrPWIuZ2MoKTtpZihrPjApe209azwxMDA/bnVsbDpuZXcgRkdkKGspO2o9bmV3IHhEZChiKTtvPWouZztyPVNDKGNFLGlzZSwzMCxrLDE1LDEpO2Q9MDt1PW5ldyB3RGQoayk7Zm9yKGU9MDtlPGEuaTsrK2Upe2g9YS5nW2VdO249aDt2OmZvcihzPTA7czwyOysrcyl7Zm9yKGk9azstLWk+PTA7KXtpZihuIT1udWxsP3BiKG4sb1tpXSk6WEQobik9PT1YRChvW2ldKSl7aWYoci5sZW5ndGg8PWQpe3E9cjtyPVNDKGNFLGlzZSwzMCwyKnIubGVuZ3RoLDE1LDEpOyRnYihxLDAsciwwLGQpfXJbZCsrXT1lO3RDZCh1LG9baV0pO2JyZWFrIHZ9fW49bjtpZihYRChuKT09PVhEKGgpKXticmVha319fWo9dTtvPXUuZztrPWQ7aWYoZD5yLmxlbmd0aCl7cT1yO3I9U0MoY0UsaXNlLDMwLGQsMTUsMSk7JGdiKHEsMCxyLDAsZCl9aWYoZD4wKXt0PXRydWU7Zm9yKGY9MDtmPGQ7KytmKXtuPW9bZl07bT1kY2UoYSxKRChuLDc0KSxtKX1mb3IoZz1kOy0tZz49MDspe3FEZChhLHJbZ10pfWlmKGQhPWspe2ZvcihlPWs7LS1lPj1kOyl7cURkKGosZSl9cT1yO3I9U0MoY0UsaXNlLDMwLGQsMTUsMSk7JGdiKHEsMCxyLDAsZCl9Yj1qfX19ZWxzZXtiPXpDZChhLGIpO2ZvcihlPWEuaTstLWU+PTA7KXtpZihiLkdjKGEuZ1tlXSkpe3FEZChhLGUpO3Q9dHJ1ZX19fWlmKHQpe2lmKHIhPW51bGwpe2M9Yi5nYygpO2w9Yz09MT95VWQoYSw0LGIuSmMoKS5QYigpLG51bGwsclswXSxwKTp5VWQoYSw2LGIscixyWzBdLHApO209YzwxMDA/bnVsbDpuZXcgRkdkKGMpO2ZvcihlPWIuSmMoKTtlLk9iKCk7KXtuPWUuUGIoKTttPUpiZShhLEpEKG4sNzQpLG0pfWlmKCFtKXtXcGQoYS5lLGwpfWVsc2V7bS5raihsKTttLmxqKCl9fWVsc2V7bT1TR2QoYi5nYygpKTtmb3IoZT1iLkpjKCk7ZS5PYigpOyl7bj1lLlBiKCk7bT1KYmUoYSxKRChuLDc0KSxtKX0hIW0mJm0ubGooKX1yZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19CmZ1bmN0aW9uIHNVYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdDtjPW5ldyB6VWIoYik7Yy5hfHxsVWIoYik7aj1rVWIoYik7aT1uZXcgUHA7cT1uZXcgTlViO2ZvcihwPW5ldyBybWIoYi5hKTtwLmE8cC5jLmMubGVuZ3RoOyl7bz1KRChwbWIocCksOSk7Zm9yKGU9bmV3IGVzKElyKGtZYihvKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtkPUpEKGRzKGUpLDE4KTtpZihkLmMuaS5rPT0oRFliKCksd1liKXx8ZC5kLmkuaz09d1liKXtrPXJVYihhLGQsaixxKTtSYyhpLHBVYihrLmQpLGsuYSl9fX1nPW5ldyBVbGI7Zm9yKHQ9SkQoV01iKGMuYywoSXFjKCksUXBjKSksMjIpLkpjKCk7dC5PYigpOyl7cz1KRCh0LlBiKCksNjQpO249cS5jW3MuZ107bT1xLmJbcy5nXTtoPXEuYVtzLmddO2Y9bnVsbDtyPW51bGw7c3dpdGNoKHMuZyl7Y2FzZSA0OmY9bmV3IGdkZChhLmQuYSxuLGouYi5hLWEuZC5hLG0tbik7cj1uZXcgZ2RkKGEuZC5hLG4saCxtLW4pO3ZVYihqLG5ldyBFZGQoZi5jK2YuYixmLmQpKTt2VWIoaixuZXcgRWRkKGYuYytmLmIsZi5kK2YuYSkpO2JyZWFrO2Nhc2UgMjpmPW5ldyBnZGQoai5hLmEsbixhLmMuYS1qLmEuYSxtLW4pO3I9bmV3IGdkZChhLmMuYS1oLG4saCxtLW4pO3ZVYihqLG5ldyBFZGQoZi5jLGYuZCkpO3ZVYihqLG5ldyBFZGQoZi5jLGYuZCtmLmEpKTticmVhaztjYXNlIDE6Zj1uZXcgZ2RkKG4sYS5kLmIsbS1uLGouYi5iLWEuZC5iKTtyPW5ldyBnZGQobixhLmQuYixtLW4saCk7dlViKGosbmV3IEVkZChmLmMsZi5kK2YuYSkpO3ZVYihqLG5ldyBFZGQoZi5jK2YuYixmLmQrZi5hKSk7YnJlYWs7Y2FzZSAzOmY9bmV3IGdkZChuLGouYS5iLG0tbixhLmMuYi1qLmEuYik7cj1uZXcgZ2RkKG4sYS5jLmItaCxtLW4saCk7dlViKGosbmV3IEVkZChmLmMsZi5kKSk7dlViKGosbmV3IEVkZChmLmMrZi5iLGYuZCkpO31pZihmKXtsPW5ldyBJVWI7bC5kPXM7bC5iPWY7bC5jPXI7bC5hPVF4KEpEKFFjKGkscFViKHMpKSwyMikpO1lDYihnLmMsbCl9fUtsYihjLmIsZyk7Yy5kPU5TYihWU2IoaikpO3JldHVybiBjfQpmdW5jdGlvbiBTS2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2lmKGMucFtiLnBdIT1udWxsKXtyZXR1cm59aD10cnVlO2MucFtiLnBdPTA7Zz1iO3A9Yy5vPT0oSEtjKCksRktjKT9Mc2U6S3NlO2Rve2U9YS5iLmVbZy5wXTtmPWcuYy5hLmMubGVuZ3RoO2lmKGMubz09RktjJiZlPjB8fGMubz09R0tjJiZlPGYtMSl7aT1udWxsO2o9bnVsbDtjLm89PUdLYz8oaT1KRChNbGIoZy5jLmEsZSsxKSw5KSk6KGk9SkQoTWxiKGcuYy5hLGUtMSksOSkpO2o9Yy5nW2kucF07U0tjKGEsaixjKTtwPWEuZS51ZyhwLGIsZyk7Yy5qW2IucF09PWImJihjLmpbYi5wXT1jLmpbai5wXSk7aWYoYy5qW2IucF09PWMualtqLnBdKXtvPWV6YyhhLmQsZyxpKTtpZihjLm89PUdLYyl7ZD1CZWIoYy5wW2IucF0pO2w9QmViKGMucFtqLnBdKStCZWIoYy5kW2kucF0pLWkuZC5kLW8tZy5kLmEtZy5vLmItQmViKGMuZFtnLnBdKTtpZihoKXtoPWZhbHNlO2MucFtiLnBdPSR3bmQuTWF0aC5taW4obCxwKX1lbHNle2MucFtiLnBdPSR3bmQuTWF0aC5taW4oZCwkd25kLk1hdGgubWluKGwscCkpfX1lbHNle2Q9QmViKGMucFtiLnBdKTtsPUJlYihjLnBbai5wXSkrQmViKGMuZFtpLnBdKStpLm8uYitpLmQuYStvK2cuZC5kLUJlYihjLmRbZy5wXSk7aWYoaCl7aD1mYWxzZTtjLnBbYi5wXT0kd25kLk1hdGgubWF4KGwscCl9ZWxzZXtjLnBbYi5wXT0kd25kLk1hdGgubWF4KGQsJHduZC5NYXRoLm1heChsLHApKX19fWVsc2V7bz1CZWIoTUQoV01iKGEuYSwoQndjKCksZXdjKSkpKTtuPVFLYyhhLGMualtiLnBdKTtrPVFLYyhhLGMualtqLnBdKTtpZihjLm89PUdLYyl7bT1CZWIoYy5wW2IucF0pK0JlYihjLmRbZy5wXSkrZy5vLmIrZy5kLmErby0oQmViKGMucFtqLnBdKStCZWIoYy5kW2kucF0pLWkuZC5kKTtXS2MobixrLG0pfWVsc2V7bT1CZWIoYy5wW2IucF0pK0JlYihjLmRbZy5wXSktZy5kLmQtQmViKGMucFtqLnBdKS1CZWIoYy5kW2kucF0pLWkuby5iLWkuZC5hLW87V0tjKG4sayxtKX19fWVsc2V7cD1hLmUudWcocCxiLGcpfWc9Yy5hW2cucF19d2hpbGUoZyE9Yik7dExjKGEuZSxiKX0KZnVuY3Rpb24gYkZjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDO2M9QmViKE1EKFdNYihhLmEuaiwoQndjKCksaXVjKSkpKTtpZihjPC0xfHwhYS5hLml8fGJqZChKRChXTWIoYS5hLm8sRXZjKSwxMDApKXx8bFliKGEuYS5vLChSamQoKSx3amQpKS5nYygpPDImJmxZYihhLmEubyxRamQpLmdjKCk8Mil7cmV0dXJuIHRydWV9aWYoYS5hLmMuaWcoKSl7cmV0dXJuIGZhbHNlfXY9MDt1PTA7dD1uZXcgVWxiO2ZvcihpPWEuYS5lLGo9MCxrPWkubGVuZ3RoO2o8azsrK2ope2g9aVtqXTtmb3IobT1oLG49MCxwPW0ubGVuZ3RoO248cDsrK24pe2w9bVtuXTtpZihsLms9PShEWWIoKSxCWWIpKXtZQ2IodC5jLGwpO2NvbnRpbnVlfWQ9YS5iW2wuYy5wXVtsLnBdO2lmKGwuaz09d1liKXtkLmI9MTtKRChXTWIobCwoSXFjKCksa3FjKSksMTEpLmo9PShSamQoKSx3amQpJiYodSs9ZC5hKX1lbHNle0M9bFliKGwsKFJqZCgpLFFqZCkpO0MuZGMoKXx8IVpxKEMsbmV3IG9GYyk/KGQuYz0xKTooZT1sWWIobCx3amQpLChlLmRjKCl8fCFacShlLG5ldyBrRmMpKSYmKHYrPWQuYSkpfWZvcihnPW5ldyBlcyhJcihrWWIobCkuYS5KYygpLG5ldyBlcikpO2NzKGcpOyl7Zj1KRChkcyhnKSwxOCk7dis9ZC5jO3UrPWQuYjtCPWYuZC5pO2FGYyhhLGQsQil9cj15bChXQyhPQyhWSSwxKSxOcWUsMjAsMCxbbFliKGwsKFJqZCgpLHhqZCkpLGxZYihsLE9qZCldKSk7Zm9yKEE9bmV3IGVzKG5ldyBHbChyLmEubGVuZ3RoLHIuYSkpO2NzKEEpOyl7dz1KRChkcyhBKSwxMSk7cz1KRChXTWIodywoSXFjKCksc3FjKSksOSk7aWYocyl7dis9ZC5jO3UrPWQuYjthRmMoYSxkLHMpfX19Zm9yKG89bmV3IHJtYih0KTtvLmE8by5jLmMubGVuZ3RoOyl7bD1KRChwbWIobyksOSk7ZD1hLmJbbC5jLnBdW2wucF07Zm9yKGc9bmV3IGVzKElyKGtZYihsKS5hLkpjKCksbmV3IGVyKSk7Y3MoZyk7KXtmPUpEKGRzKGcpLDE4KTt2Kz1kLmM7dSs9ZC5iO0I9Zi5kLmk7YUZjKGEsZCxCKX19dC5jLmxlbmd0aD0wfWI9dit1O3E9Yj09MD9Lc2U6KHYtdSkvYjtyZXR1cm4gcT49Y30KZnVuY3Rpb24gVEhjKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7Zm9yKHQ9YS5hLHU9MCx2PXQubGVuZ3RoO3U8djsrK3Upe3M9dFt1XTtqPUhxZTtrPUhxZTtmb3Iobz1uZXcgcm1iKHMuZSk7by5hPG8uYy5jLmxlbmd0aDspe209SkQocG1iKG8pLDkpO2c9IW0uYz8tMTpObGIobS5jLmEsbSwwKTtpZihnPjApe2w9SkQoTWxiKG0uYy5hLGctMSksOSk7Qj1lemMoYS5iLG0sbCk7cT1tLm4uYi1tLmQuZC0obC5uLmIrbC5vLmIrbC5kLmErQil9ZWxzZXtxPW0ubi5iLW0uZC5kfWo9JHduZC5NYXRoLm1pbihxLGopO2lmKGc8bS5jLmEuYy5sZW5ndGgtMSl7bD1KRChNbGIobS5jLmEsZysxKSw5KTtCPWV6YyhhLmIsbSxsKTtyPWwubi5iLWwuZC5kLShtLm4uYittLm8uYittLmQuYStCKX1lbHNle3I9MiptLm4uYn1rPSR3bmQuTWF0aC5taW4ocixrKX1pPUhxZTtmPWZhbHNlO2U9SkQoTWxiKHMuZSwwKSw5KTtmb3IoRD1uZXcgcm1iKGUuaik7RC5hPEQuYy5jLmxlbmd0aDspe0M9SkQocG1iKEQpLDExKTtwPWUubi5iK0Mubi5iK0MuYS5iO2ZvcihkPW5ldyBybWIoQy5lKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yz1KRChwbWIoZCksMTgpO3c9Yy5jO2I9dy5pLm4uYit3Lm4uYit3LmEuYi1wO2lmKCR3bmQuTWF0aC5hYnMoYik8JHduZC5NYXRoLmFicyhpKSYmJHduZC5NYXRoLmFicyhiKTwoYjwwP2o6aykpe2k9YjtmPXRydWV9fX1oPUpEKE1sYihzLmUscy5lLmMubGVuZ3RoLTEpLDkpO2ZvcihBPW5ldyBybWIoaC5qKTtBLmE8QS5jLmMubGVuZ3RoOyl7dz1KRChwbWIoQSksMTEpO3A9aC5uLmIrdy5uLmIrdy5hLmI7Zm9yKGQ9bmV3IHJtYih3LmcpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxOCk7Qz1jLmQ7Yj1DLmkubi5iK0Mubi5iK0MuYS5iLXA7aWYoJHduZC5NYXRoLmFicyhiKTwkd25kLk1hdGguYWJzKGkpJiYkd25kLk1hdGguYWJzKGIpPChiPDA/ajprKSl7aT1iO2Y9dHJ1ZX19fWlmKGYmJmkhPTApe2ZvcihuPW5ldyBybWIocy5lKTtuLmE8bi5jLmMubGVuZ3RoOyl7bT1KRChwbWIobiksOSk7bS5uLmIrPWl9fX19CmZ1bmN0aW9uIHJ6ZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRzt0PWI7cz1uZXcgUHA7dT1uZXcgUHA7az0keGQodCxuRGUpO2Q9bmV3IEx6ZChhLGMscyx1KTtFeWQoZC5hLGQuYixkLmMsZC5kLGspO2k9KEE9cy5pLCFBPyhzLmk9bmV3IHhmKHMscy5jKSk6QSk7Zm9yKEM9aS5KYygpO0MuT2IoKTspe0I9SkQoQy5QYigpLDE2OCk7ZT1KRChRYyhzLEIpLDIyKTtmb3IocD1lLkpjKCk7cC5PYigpOyl7bz1wLlBiKCk7dj1KRCh3byhhLmYsbyksMTY4KTtpZih2KXtoPSghQi5lJiYoQi5lPW5ldyByZWUodzMsQiwxMCw5KSksQi5lKTt0Q2QoaCx2KX1lbHNle2c9YnlkKHQsdkRlKTttPUJEZStvK0NEZStnO249bStBRGU7dGhyb3cgc2NiKG5ldyBleWQobikpfX19aj0odz11LmksIXc/KHUuaT1uZXcgeGYodSx1LmMpKTp3KTtmb3IoRj1qLkpjKCk7Ri5PYigpOyl7RD1KRChGLlBiKCksMTY4KTtmPUpEKFFjKHUsRCksMjIpO2ZvcihyPWYuSmMoKTtyLk9iKCk7KXtxPXIuUGIoKTt2PUpEKHdvKGEuZixxKSwxNjgpO2lmKHYpe2w9KCFELmcmJihELmc9bmV3IHJlZSh3MyxELDksMTApKSxELmcpO3RDZChsLHYpfWVsc2V7Zz1ieWQodCx2RGUpO209QkRlK3ErQ0RlK2c7bj1tK0FEZTt0aHJvdyBzY2IobmV3IGV5ZChuKSl9fX0hYy5iJiYoYy5iPW5ldyByZWUodjMsYyw0LDcpKTtpZihjLmIuaSE9MCYmKCFjLmMmJihjLmM9bmV3IHJlZSh2MyxjLDUsOCkpLGMuYy5pIT0wKSYmKCFjLmImJihjLmI9bmV3IHJlZSh2MyxjLDQsNykpLGMuYi5pPD0xJiYoIWMuYyYmKGMuYz1uZXcgcmVlKHYzLGMsNSw4KSksYy5jLmk8PTEpKSYmKCFjLmEmJihjLmE9bmV3IFgwZCh3MyxjLDYsNikpLGMuYSkuaT09MSl7Rz1KRChuRGQoKCFjLmEmJihjLmE9bmV3IFgwZCh3MyxjLDYsNikpLGMuYSksMCksMTY4KTtpZighZnVkKEcpJiYhZ3VkKEcpKXttdWQoRyxKRChuRGQoKCFjLmImJihjLmI9bmV3IHJlZSh2MyxjLDQsNykpLGMuYiksMCksODQpKTtudWQoRyxKRChuRGQoKCFjLmMmJihjLmM9bmV3IHJlZSh2MyxjLDUsOCkpLGMuYyksMCksODQpKX19fQpmdW5jdGlvbiBIM2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtkPW5ldyBVbGI7ZT1IcWU7Zj1IcWU7Zz1IcWU7aWYoYyl7ZT1hLmYuYTtmb3IocD1uZXcgcm1iKGIuaik7cC5hPHAuYy5jLmxlbmd0aDspe289SkQocG1iKHApLDExKTtmb3IoaT1uZXcgcm1iKG8uZyk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDE4KTtpZihoLmEuYiE9MCl7az1KRChFdGIoaC5hKSw4KTtpZihrLmE8ZSl7Zj1lLWsuYTtnPUhxZTtkLmMubGVuZ3RoPTA7ZT1rLmF9aWYoay5hPD1lKXtZQ2IoZC5jLGgpO2guYS5iPjEmJihnPSR3bmQuTWF0aC5taW4oZywkd25kLk1hdGguYWJzKEpEKGZ1KGguYSwxKSw4KS5iLWsuYikpKX19fX19ZWxzZXtmb3IocD1uZXcgcm1iKGIuaik7cC5hPHAuYy5jLmxlbmd0aDspe289SkQocG1iKHApLDExKTtmb3IoaT1uZXcgcm1iKG8uZSk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDE4KTtpZihoLmEuYiE9MCl7bT1KRChGdGIoaC5hKSw4KTtpZihtLmE+ZSl7Zj1tLmEtZTtnPUhxZTtkLmMubGVuZ3RoPTA7ZT1tLmF9aWYobS5hPj1lKXtZQ2IoZC5jLGgpO2guYS5iPjEmJihnPSR3bmQuTWF0aC5taW4oZywkd25kLk1hdGguYWJzKEpEKGZ1KGguYSxoLmEuYi0yKSw4KS5iLW0uYikpKX19fX19aWYoZC5jLmxlbmd0aCE9MCYmZj5iLm8uYS8yJiZnPmIuby5iLzIpe249bmV3IGJaYjtfWWIobixiKTthWmIobiwoUmpkKCkseGpkKSk7bi5uLmE9Yi5vLmEvMjtyPW5ldyBiWmI7X1liKHIsYik7YVpiKHIsT2pkKTtyLm4uYT1iLm8uYS8yO3Iubi5iPWIuby5iO2ZvcihpPW5ldyBybWIoZCk7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDE4KTtpZihjKXtqPUpEKEl0YihoLmEpLDgpO3E9aC5hLmI9PTA/V1liKGguZCk6SkQoRXRiKGguYSksOCk7cS5iPj1qLmI/Z1diKGgscik6Z1diKGgsbil9ZWxzZXtqPUpEKEp0YihoLmEpLDgpO3E9aC5hLmI9PTA/V1liKGguYyk6SkQoRnRiKGguYSksOCk7cS5iPj1qLmI/aFdiKGgscik6aFdiKGgsbil9bD1KRChXTWIoaCwoQndjKCksUnVjKSksNzcpOyEhbCYmeWUobCxqLHRydWUpfWIubi5hPWUtYi5vLmEvMn19CmZ1bmN0aW9uIEhXYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG07Zm9yKGg9R3RiKGEuYiwwKTtoLmIhPWguZC5jOyl7Zz1KRChVdGIoaCksMzkpO2lmKGNnYihnLmMsRHplKSl7Y29udGludWV9aj1sUWMoZyxhKTtiPT0oVGdkKCksUGdkKXx8Yj09UWdkP1NsYihqLG5ldyBHWGMpOlNsYihqLG5ldyBLWGMpO2k9ai5jLmxlbmd0aDtmb3IoZD0wO2Q8aTtkKyspe2s9KHNEYihkLGouYy5sZW5ndGgpLEpEKGouY1tkXSw2NSkpLmM7Y2diKGsuYywnbjExJykmJmNfO2lmKHlkYihMRChXTWIoZywodFVjKCksWFRjKSkpKSYmIXBRYygoc0RiKGQsai5jLmxlbmd0aCksSkQoai5jW2RdLDY1KSksYSkpe2NvbnRpbnVlfWU9aT09MT8wLjU6KGQrMSkvKGkrMSk7aWYoYj09UGdkKXtmPUJlYihNRChXTWIoZyxpVWMpKSk7bT1nLmUuYitnLmYuYiplO0J0Yigoc0RiKGQsai5jLmxlbmd0aCksSkQoai5jW2RdLDY1KSkuYSxuZXcgRWRkKCR3bmQuTWF0aC5taW4oZixnLmUuYS1jKSxtKSk7QnRiKChzRGIoZCxqLmMubGVuZ3RoKSxKRChqLmNbZF0sNjUpKS5hLG5ldyBFZGQoZy5lLmEsbSkpfWVsc2UgaWYoYj09UWdkKXtmPUJlYihNRChXTWIoZyxoVWMpKSkrYzttPWcuZS5iK2cuZi5iKmU7QnRiKChzRGIoZCxqLmMubGVuZ3RoKSxKRChqLmNbZF0sNjUpKS5hLG5ldyBFZGQoZixtKSk7QnRiKChzRGIoZCxqLmMubGVuZ3RoKSxKRChqLmNbZF0sNjUpKS5hLG5ldyBFZGQoZy5lLmErZy5mLmEsbSkpfWVsc2UgaWYoYj09U2dkKXtmPUJlYihNRChXTWIoZyxpVWMpKSk7bD1nLmUuYStnLmYuYSplO0J0Yigoc0RiKGQsai5jLmxlbmd0aCksSkQoai5jW2RdLDY1KSkuYSxuZXcgRWRkKGwsJHduZC5NYXRoLm1pbihnLmUuYi1jLGYpKSk7QnRiKChzRGIoZCxqLmMubGVuZ3RoKSxKRChqLmNbZF0sNjUpKS5hLG5ldyBFZGQobCxnLmUuYikpfWVsc2V7Zj1CZWIoTUQoV01iKGcsaFVjKSkpK2M7bD1nLmUuYStnLmYuYSplO0J0Yigoc0RiKGQsai5jLmxlbmd0aCksSkQoai5jW2RdLDY1KSkuYSxuZXcgRWRkKGwsZikpO0J0Yigoc0RiKGQsai5jLmxlbmd0aCksSkQoai5jW2RdLDY1KSkuYSxuZXcgRWRkKGwsZy5lLmIrZy5mLmIpKX19fX0KZnVuY3Rpb24gcFhiKGEsYixjLGQsZSxmLGcsaCxpKXt2YXIgaixrLGwsbSxuLG8scDtuPWM7az1uZXcgdFliKGkpO3JZYihrLChEWWIoKSx3WWIpKTtaTWIoaywoSXFjKCksVXBjKSxnKTtaTWIoaywoQndjKCksRXZjKSwoYWpkKCksWGlkKSk7cD1CZWIoTUQoYS5tZihEdmMpKSk7Wk1iKGssRHZjLHApO2w9bmV3IGJaYjtfWWIobCxrKTtpZighKGIhPSRpZCYmYiE9X2lkKSl7ZD49MD8obj1XamQoaCkpOihuPVRqZChXamQoaCkpKTthLm9mKEp2YyxuKX1qPW5ldyBDZGQ7bT1mYWxzZTtpZihhLm5mKEN2Yykpe3pkZChqLEpEKGEubWYoQ3ZjKSw4KSk7bT10cnVlfWVsc2V7eWRkKGosZy5hLzIsZy5iLzIpfXN3aXRjaChuLmcpe2Nhc2UgNDpaTWIoayxVdWMsKE9xYygpLEtxYykpO1pNYihrLE5wYywoVG5jKCksU25jKSk7ay5vLmI9Zy5iO3A8MCYmKGsuby5hPS1wKTthWmIobCwoUmpkKCksd2pkKSk7bXx8KGouYT1nLmEpO2ouYS09Zy5hO2JyZWFrO2Nhc2UgMjpaTWIoayxVdWMsKE9xYygpLE1xYykpO1pNYihrLE5wYywoVG5jKCksUW5jKSk7ay5vLmI9Zy5iO3A8MCYmKGsuby5hPS1wKTthWmIobCwoUmpkKCksUWpkKSk7bXx8KGouYT0wKTticmVhaztjYXNlIDE6Wk1iKGssJHBjLChxcGMoKSxwcGMpKTtrLm8uYT1nLmE7cDwwJiYoay5vLmI9LXApO2FaYihsLChSamQoKSxPamQpKTttfHwoai5iPWcuYik7ai5iLT1nLmI7YnJlYWs7Y2FzZSAzOlpNYihrLCRwYywocXBjKCksbnBjKSk7ay5vLmE9Zy5hO3A8MCYmKGsuby5iPS1wKTthWmIobCwoUmpkKCkseGpkKSk7bXx8KGouYj0wKTt9emRkKGwubixqKTtaTWIoayxDdmMsaik7aWYoYj09V2lkfHxiPT1ZaWR8fGI9PVhpZCl7bz0wO2lmKGI9PVdpZCYmYS5uZihGdmMpKXtzd2l0Y2gobi5nKXtjYXNlIDE6Y2FzZSAyOm89SkQoYS5tZihGdmMpLDE3KS5hO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6bz0tSkQoYS5tZihGdmMpLDE3KS5hO319ZWxzZXtzd2l0Y2gobi5nKXtjYXNlIDQ6Y2FzZSAyOm89Zi5iO2I9PVlpZCYmKG8vPWUuYik7YnJlYWs7Y2FzZSAxOmNhc2UgMzpvPWYuYTtiPT1ZaWQmJihvLz1lLmEpO319Wk1iKGssdHFjLG8pfVpNYihrLFRwYyxuKTtyZXR1cm4ga30KZnVuY3Rpb24gbEVkKCl7akVkKCk7ZnVuY3Rpb24gaChmKXt2YXIgZz10aGlzO3RoaXMuZGlzcGF0Y2g9ZnVuY3Rpb24oYSl7dmFyIGI9YS5kYXRhO3N3aXRjaChiLmNtZCl7Y2FzZSAnYWxnb3JpdGhtcyc6dmFyIGM9bUVkKChwbmIoKSxuZXcgb29iKG5ldyBaamIoaUVkLmIpKSkpO2YucG9zdE1lc3NhZ2Uoe2lkOmIuaWQsZGF0YTpjfSk7YnJlYWs7Y2FzZSAnY2F0ZWdvcmllcyc6dmFyIGQ9bUVkKChwbmIoKSxuZXcgb29iKG5ldyBaamIoaUVkLmMpKSkpO2YucG9zdE1lc3NhZ2Uoe2lkOmIuaWQsZGF0YTpkfSk7YnJlYWs7Y2FzZSAnb3B0aW9ucyc6dmFyIGU9bUVkKChwbmIoKSxuZXcgb29iKG5ldyBaamIoaUVkLmQpKSkpO2YucG9zdE1lc3NhZ2Uoe2lkOmIuaWQsZGF0YTplfSk7YnJlYWs7Y2FzZSAncmVnaXN0ZXInOnBFZChiLmFsZ29yaXRobXMpO2YucG9zdE1lc3NhZ2Uoe2lkOmIuaWR9KTticmVhaztjYXNlICdsYXlvdXQnOm5FZChiLmdyYXBoLGIubGF5b3V0T3B0aW9uc3x8e30sYi5vcHRpb25zfHx7fSk7Zi5wb3N0TWVzc2FnZSh7aWQ6Yi5pZCxkYXRhOmIuZ3JhcGh9KTticmVhazt9fTt0aGlzLnNhdmVEaXNwYXRjaD1mdW5jdGlvbihiKXt0cnl7Zy5kaXNwYXRjaChiKX1jYXRjaChhKXtmLnBvc3RNZXNzYWdlKHtpZDpiLmRhdGEuaWQsZXJyb3I6YX0pfX19CmZ1bmN0aW9uIGooYil7dmFyIGM9dGhpczt0aGlzLmRpc3BhdGNoZXI9bmV3IGgoe3Bvc3RNZXNzYWdlOmZ1bmN0aW9uKGEpe2Mub25tZXNzYWdlKHtkYXRhOmF9KX19KTt0aGlzLnBvc3RNZXNzYWdlPWZ1bmN0aW9uKGEpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmRpc3BhdGNoZXIuc2F2ZURpc3BhdGNoKHtkYXRhOmF9KX0sMCl9fQppZih0eXBlb2YgZG9jdW1lbnQ9PT1zdGUmJnR5cGVvZiBzZWxmIT09c3RlKXt2YXIgaT1uZXcgaChzZWxmKTtzZWxmLm9ubWVzc2FnZT1pLnNhdmVEaXNwYXRjaH1lbHNlIGlmKHR5cGVvZiBtb2R1bGUhPT1zdGUmJm1vZHVsZS5leHBvcnRzKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywnX19lc01vZHVsZScse3ZhbHVlOnRydWV9KTttb2R1bGUuZXhwb3J0cz17J2RlZmF1bHQnOmosV29ya2VyOmp9fX0KZnVuY3Rpb24gdSRiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbTtrPW5ldyB0WWIoYyk7VU1iKGssYik7Wk1iKGssKElxYygpLGtxYyksYik7ay5vLmE9Yi5nO2suby5iPWIuZjtrLm4uYT1iLmk7ay5uLmI9Yi5qO0lsYihjLmEsayk7UWliKGEuYSxiLGspOygoIWIuYSYmKGIuYT1uZXcgWDBkKEEzLGIsMTAsMTEpKSxiLmEpLmkhPTB8fHlkYihMRChrc2QoYiwoQndjKCksTnVjKSkpKSkmJlpNYihrLElwYywoeGRiKCksdHJ1ZSkpO2o9SkQoV01iKGMsV3BjKSwyMik7bD1KRChXTWIoaywoQndjKCksRXZjKSksMTAwKTtsPT0oYWpkKCksX2lkKT9aTWIoayxFdmMsJGlkKTpsIT0kaWQmJmouRWMoKCRvYygpLFdvYykpO209MDtkPUpEKFdNYihjLHJ1YyksODYpO2ZvcihpPW5ldyBDSGQoKCFiLmMmJihiLmM9bmV3IFgwZChCMyxiLDksOSkpLGIuYykpO2kuZSE9aS5pLmdjKCk7KXtoPUpEKEFIZChpKSwxMjQpO2U9WndkKGIpOyhYRChrc2QoZSxjdWMpKSE9PVhEKChueWMoKSxreWMpKXx8WEQoa3NkKGUscHVjKSk9PT1YRCgoem5jKCkseW5jKSl8fFhEKGtzZChlLHB1YykpPT09WEQoKHpuYygpLHduYykpfHx5ZGIoTEQoa3NkKGUsZXVjKSkpfHxYRChrc2QoZSxZdGMpKSE9PVhEKChjVWIoKSxiVWIpKXx8WEQoa3NkKGUsWnVjKSk9PT1YRCgoZHljKCksV3hjKSl8fFhEKGtzZChlLFp1YykpPT09WEQoKGR5YygpLFh4YykpfHxYRChrc2QoZSwkdWMpKT09PVhEKChjeGMoKSxWd2MpKXx8WEQoa3NkKGUsJHVjKSk9PT1YRCgoY3hjKCksWHdjKSkpJiYheWRiKExEKGtzZChiLGF1YykpKSYmbXNkKGgsanFjLGpmYihtKyspKTt5ZGIoTEQoa3NkKGgsc3ZjKSkpfHx2JGIoYSxoLGssaixkLGwpfWZvcihnPW5ldyBDSGQoKCFiLm4mJihiLm49bmV3IFgwZCh6MyxiLDEsNykpLGIubikpO2cuZSE9Zy5pLmdjKCk7KXtmPUpEKEFIZChnKSwxNTMpOyF5ZGIoTEQoa3NkKGYsc3ZjKSkpJiYhIWYuYSYmSWxiKGsuYix0JGIoZikpfXlkYihMRChXTWIoayxVdGMpKSkmJmouRWMoKCRvYygpLFJvYykpO2lmKHlkYihMRChXTWIoayxNdWMpKSkpe2ouRWMoKCRvYygpLFZvYykpO2ouRWMoVW9jKTtaTWIoayxFdmMsJGlkKX1yZXR1cm4ga30KZnVuY3Rpb24gU2xkKGEsYixjLGQsZSxmLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSTtwPTA7RD0wO2ZvcihqPW5ldyBybWIoYS5iKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksMTYyKTshIWkuYyYmbG5kKGkuYyk7cD0kd25kLk1hdGgubWF4KHAsY21kKGkpKTtEKz1jbWQoaSkqYm1kKGkpfXE9RC9hLmIuYy5sZW5ndGg7Qz1MbGQoYS5iLHEpO0QrPWEuYi5jLmxlbmd0aCpDO3A9JHduZC5NYXRoLm1heChwLCR3bmQuTWF0aC5zcXJ0KEQqZykpK2MuYjtIPWMuYjtJPWMuZDtuPTA7bD1jLmIrYy5jO0I9bmV3IE10YjtBdGIoQixqZmIoMCkpO3c9bmV3IE10YjtrPW5ldyBBamIoYS5iLDApO289bnVsbDtoPW5ldyBVbGI7d2hpbGUoay5iPGsuZC5nYygpKXtpPShyRGIoay5iPGsuZC5nYygpKSxKRChrLmQuWGIoay5jPWsuYisrKSwxNjIpKTtHPWNtZChpKTttPWJtZChpKTtpZihIK0c+cCl7aWYoZil7Q3RiKHcsbik7Q3RiKEIsamZiKGsuYi0xKSk7SWxiKGEuZCxvKTtoLmMubGVuZ3RoPTB9SD1jLmI7SSs9bitiO249MDtsPSR3bmQuTWF0aC5tYXgobCxjLmIrYy5jK0cpfVlDYihoLmMsaSk7Zm1kKGksSCxJKTtsPSR3bmQuTWF0aC5tYXgobCxIK0crYy5jKTtuPSR3bmQuTWF0aC5tYXgobixtKTtIKz1HK2I7bz1pfUtsYihhLmEsaCk7SWxiKGEuZCxKRChNbGIoaCxoLmMubGVuZ3RoLTEpLDE2MikpO2w9JHduZC5NYXRoLm1heChsLGQpO0Y9SStuK2MuYTtpZihGPGUpe24rPWUtRjtGPWV9aWYoZil7SD1jLmI7az1uZXcgQWpiKGEuYiwwKTtDdGIoQixqZmIoYS5iLmMubGVuZ3RoKSk7QT1HdGIoQiwwKTtzPUpEKFV0YihBKSwxNykuYTtDdGIodyxuKTt2PUd0Yih3LDApO3U9MDt3aGlsZShrLmI8ay5kLmdjKCkpe2lmKGsuYj09cyl7SD1jLmI7dT1CZWIoTUQoVXRiKHYpKSk7cz1KRChVdGIoQSksMTcpLmF9aT0ockRiKGsuYjxrLmQuZ2MoKSksSkQoay5kLlhiKGsuYz1rLmIrKyksMTYyKSk7ZG1kKGksdSk7aWYoay5iPT1zKXtyPWwtSC1jLmM7dD1jbWQoaSk7ZW1kKGkscik7Z21kKGksKHItdCkvMiwwKX1IKz1jbWQoaSkrYn19cmV0dXJuIG5ldyBFZGQobCxGKX0KZnVuY3Rpb24gVWllKGEpe2lmKGEuTilyZXR1cm47YS5OPXRydWU7YS5iPU52ZChhLDApO012ZChhLmIsMCk7TXZkKGEuYiwxKTtNdmQoYS5iLDIpO2EuYmI9TnZkKGEsMSk7TXZkKGEuYmIsMCk7TXZkKGEuYmIsMSk7YS5mYj1OdmQoYSwyKTtNdmQoYS5mYiwzKTtNdmQoYS5mYiw0KTtTdmQoYS5mYiw1KTthLnFiPU52ZChhLDMpO012ZChhLnFiLDApO1N2ZChhLnFiLDEpO1N2ZChhLnFiLDIpO012ZChhLnFiLDMpO012ZChhLnFiLDQpO1N2ZChhLnFiLDUpO012ZChhLnFiLDYpO2EuYT1PdmQoYSw0KTthLmM9T3ZkKGEsNSk7YS5kPU92ZChhLDYpO2EuZT1PdmQoYSw3KTthLmY9T3ZkKGEsOCk7YS5nPU92ZChhLDkpO2EuaT1PdmQoYSwxMCk7YS5qPU92ZChhLDExKTthLms9T3ZkKGEsMTIpO2Eubj1PdmQoYSwxMyk7YS5vPU92ZChhLDE0KTthLnA9T3ZkKGEsMTUpO2EucT1PdmQoYSwxNik7YS5zPU92ZChhLDE3KTthLnI9T3ZkKGEsMTgpO2EudD1PdmQoYSwxOSk7YS51PU92ZChhLDIwKTthLnY9T3ZkKGEsMjEpO2Eudz1PdmQoYSwyMik7YS5CPU92ZChhLDIzKTthLkE9T3ZkKGEsMjQpO2EuQz1PdmQoYSwyNSk7YS5EPU92ZChhLDI2KTthLkY9T3ZkKGEsMjcpO2EuRz1PdmQoYSwyOCk7YS5IPU92ZChhLDI5KTthLko9T3ZkKGEsMzApO2EuST1PdmQoYSwzMSk7YS5LPU92ZChhLDMyKTthLk09T3ZkKGEsMzMpO2EuTD1PdmQoYSwzNCk7YS5QPU92ZChhLDM1KTthLlE9T3ZkKGEsMzYpO2EuUj1PdmQoYSwzNyk7YS5TPU92ZChhLDM4KTthLlQ9T3ZkKGEsMzkpO2EuVT1PdmQoYSw0MCk7YS5WPU92ZChhLDQxKTthLlg9T3ZkKGEsNDIpO2EuVz1PdmQoYSw0Myk7YS5ZPU92ZChhLDQ0KTthLlo9T3ZkKGEsNDUpO2EuJD1PdmQoYSw0Nik7YS5fPU92ZChhLDQ3KTthLmFiPU92ZChhLDQ4KTthLmNiPU92ZChhLDQ5KTthLmRiPU92ZChhLDUwKTthLmViPU92ZChhLDUxKTthLmdiPU92ZChhLDUyKTthLmhiPU92ZChhLDUzKTthLmliPU92ZChhLDU0KTthLmpiPU92ZChhLDU1KTthLmtiPU92ZChhLDU2KTthLmxiPU92ZChhLDU3KTthLm1iPU92ZChhLDU4KTthLm5iPU92ZChhLDU5KTthLm9iPU92ZChhLDYwKTthLnBiPU92ZChhLDYxKX0KZnVuY3Rpb24gSTFiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7cz0wO2lmKGIuZi5hPT0wKXtmb3IocT1uZXcgcm1iKGEpO3EuYTxxLmMuYy5sZW5ndGg7KXtvPUpEKHBtYihxKSw5KTtzPSR3bmQuTWF0aC5tYXgocyxvLm4uYStvLm8uYStvLmQuYyl9fWVsc2V7cz1iLmYuYS1iLmMuYX1zLT1iLmMuYTtmb3IocD1uZXcgcm1iKGEpO3AuYTxwLmMuYy5sZW5ndGg7KXtvPUpEKHBtYihwKSw5KTtKMWIoby5uLHMtby5vLmEpO0sxYihvLmYpO0cxYihvKTsoIW8ucT8ocG5iKCkscG5iKCksbm5iKTpvLnEpLl9iKChCd2MoKSxMdmMpKSYmSjFiKEpEKFdNYihvLEx2YyksOCkscy1vLm8uYSk7c3dpdGNoKEpEKFdNYihvLFJ0YyksMjU0KS5nKXtjYXNlIDE6Wk1iKG8sUnRjLChjZWQoKSxhZWQpKTticmVhaztjYXNlIDI6Wk1iKG8sUnRjLChjZWQoKSxfZGQpKTt9cj1vLm87Zm9yKHU9bmV3IHJtYihvLmopO3UuYTx1LmMuYy5sZW5ndGg7KXt0PUpEKHBtYih1KSwxMSk7SjFiKHQubixyLmEtdC5vLmEpO0oxYih0LmEsdC5vLmEpO2FaYih0LEExYih0LmopKTtnPUpEKFdNYih0LEZ2YyksMTcpOyEhZyYmWk1iKHQsRnZjLGpmYigtZy5hKSk7Zm9yKGY9bmV3IHJtYih0LmcpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSwxOCk7Zm9yKGQ9R3RiKGUuYSwwKTtkLmIhPWQuZC5jOyl7Yz1KRChVdGIoZCksOCk7Yy5hPXMtYy5hfWo9SkQoV01iKGUsUnVjKSw3Nyk7aWYoail7Zm9yKGk9R3RiKGosMCk7aS5iIT1pLmQuYzspe2g9SkQoVXRiKGkpLDgpO2guYT1zLWguYX19Zm9yKG09bmV3IHJtYihlLmIpO20uYTxtLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihtKSw3Mik7SjFiKGsubixzLWsuby5hKX19Zm9yKG49bmV3IHJtYih0LmYpO24uYTxuLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihuKSw3Mik7SjFiKGsubix0Lm8uYS1rLm8uYSl9fWlmKG8uaz09KERZYigpLHdZYikpe1pNYihvLChJcWMoKSxUcGMpLEExYihKRChXTWIobyxUcGMpLDY0KSkpO0YxYihvKX1mb3IobD1uZXcgcm1iKG8uYik7bC5hPGwuYy5jLmxlbmd0aDspe2s9SkQocG1iKGwpLDcyKTtHMWIoayk7SjFiKGsubixyLmEtay5vLmEpfX19CmZ1bmN0aW9uIEwxYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O3M9MDtpZihiLmYuYj09MCl7Zm9yKHE9bmV3IHJtYihhKTtxLmE8cS5jLmMubGVuZ3RoOyl7bz1KRChwbWIocSksOSk7cz0kd25kLk1hdGgubWF4KHMsby5uLmIrby5vLmIrby5kLmEpfX1lbHNle3M9Yi5mLmItYi5jLmJ9cy09Yi5jLmI7Zm9yKHA9bmV3IHJtYihhKTtwLmE8cC5jLmMubGVuZ3RoOyl7bz1KRChwbWIocCksOSk7TTFiKG8ubixzLW8uby5iKTtOMWIoby5mKTtIMWIobyk7KCFvLnE/KHBuYigpLHBuYigpLG5uYik6by5xKS5fYigoQndjKCksTHZjKSkmJk0xYihKRChXTWIobyxMdmMpLDgpLHMtby5vLmIpO3N3aXRjaChKRChXTWIobyxSdGMpLDI1NCkuZyl7Y2FzZSAzOlpNYihvLFJ0YywoY2VkKCksWmRkKSk7YnJlYWs7Y2FzZSA0OlpNYihvLFJ0YywoY2VkKCksYmVkKSk7fXI9by5vO2Zvcih1PW5ldyBybWIoby5qKTt1LmE8dS5jLmMubGVuZ3RoOyl7dD1KRChwbWIodSksMTEpO00xYih0Lm4sci5iLXQuby5iKTtNMWIodC5hLHQuby5iKTthWmIodCxCMWIodC5qKSk7Zz1KRChXTWIodCxGdmMpLDE3KTshIWcmJlpNYih0LEZ2YyxqZmIoLWcuYSkpO2ZvcihmPW5ldyBybWIodC5nKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMTgpO2ZvcihkPUd0YihlLmEsMCk7ZC5iIT1kLmQuYzspe2M9SkQoVXRiKGQpLDgpO2MuYj1zLWMuYn1qPUpEKFdNYihlLFJ1YyksNzcpO2lmKGope2ZvcihpPUd0YihqLDApO2kuYiE9aS5kLmM7KXtoPUpEKFV0YihpKSw4KTtoLmI9cy1oLmJ9fWZvcihtPW5ldyBybWIoZS5iKTttLmE8bS5jLmMubGVuZ3RoOyl7az1KRChwbWIobSksNzIpO00xYihrLm4scy1rLm8uYil9fWZvcihuPW5ldyBybWIodC5mKTtuLmE8bi5jLmMubGVuZ3RoOyl7az1KRChwbWIobiksNzIpO00xYihrLm4sdC5vLmItay5vLmIpfX1pZihvLms9PShEWWIoKSx3WWIpKXtaTWIobywoSXFjKCksVHBjKSxCMWIoSkQoV01iKG8sVHBjKSw2NCkpKTtFMWIobyl9Zm9yKGw9bmV3IHJtYihvLmIpO2wuYTxsLmMuYy5sZW5ndGg7KXtrPUpEKHBtYihsKSw3Mik7SDFiKGspO00xYihrLm4sci5iLWsuby5iKX19fQpmdW5jdGlvbiBubGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSDtzPW5ldyBBamIoYS5iLDApO2s9Yi5KYygpO289MDtqPUpEKGsuUGIoKSwxNykuYTt2PTA7Yz1uZXcgUXJiO0E9bmV3IHd0Yjt3aGlsZShzLmI8cy5kLmdjKCkpe3I9KHJEYihzLmI8cy5kLmdjKCkpLEpEKHMuZC5YYihzLmM9cy5iKyspLDI1KSk7Zm9yKHU9bmV3IHJtYihyLmEpO3UuYTx1LmMuYy5sZW5ndGg7KXt0PUpEKHBtYih1KSw5KTtmb3Iobj1uZXcgZXMoSXIoa1liKHQpLmEuSmMoKSxuZXcgZXIpKTtjcyhuKTspe2w9SkQoZHMobiksMTgpO0EuYS55YyhsLEEpfWZvcihtPW5ldyBlcyhJcihoWWIodCkuYS5KYygpLG5ldyBlcikpO2NzKG0pOyl7bD1KRChkcyhtKSwxOCk7QS5hLkFjKGwpIT1udWxsfX1pZihvKzE9PWope2U9bmV3IGIkYihhKTt6amIocyxlKTtmPW5ldyBiJGIoYSk7empiKHMsZik7Zm9yKEM9QS5hLmVjKCkuSmMoKTtDLk9iKCk7KXtCPUpEKEMuUGIoKSwxOCk7aWYoIWMuYS5fYihCKSl7Kyt2O2MuYS55YyhCLGMpfWc9bmV3IHRZYihhKTtaTWIoZywoQndjKCksRXZjKSwoYWpkKCksWmlkKSk7cVliKGcsZSk7clliKGcsKERZYigpLHZZYikpO3A9bmV3IGJaYjtfWWIocCxnKTthWmIocCwoUmpkKCksUWpkKSk7RD1uZXcgYlpiO19ZYihELGcpO2FaYihELHdqZCk7ZD1uZXcgdFliKGEpO1pNYihkLEV2YyxaaWQpO3FZYihkLGYpO3JZYihkLHZZYik7cT1uZXcgYlpiO19ZYihxLGQpO2FaYihxLFFqZCk7Rj1uZXcgYlpiO19ZYihGLGQpO2FaYihGLHdqZCk7dz1uZXcga1diO2dXYih3LEIuYyk7aFdiKHcscCk7Wk1iKHcsKElxYygpLGpxYyksSkQoV01iKEIsanFjKSwxNykpO0g9bmV3IGtXYjtnV2IoSCxEKTtoV2IoSCxxKTtaTWIoSCxqcWMsSkQoV01iKEIsanFjKSwxNykpO2dXYihCLEYpO2g9bmV3IHRsYyhnLGQsdyxILEIpO1pNYihnLEdwYyxoKTtaTWIoZCxHcGMsaCk7Rz13LmMuaTtpZihHLms9PXZZYil7aT1KRChXTWIoRyxHcGMpLDMxNCk7aS5kPWg7aC5nPWl9fWlmKGsuT2IoKSl7aj1KRChrLlBiKCksMTcpLmF9ZWxzZXticmVha319KytvfXJldHVybiBqZmIodil9CmZ1bmN0aW9uIEdkYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtwPW5ldyBVbGI7Zm9yKG09bmV3IHJtYihhLmQuYik7bS5hPG0uYy5jLmxlbmd0aDspe2w9SkQocG1iKG0pLDI1KTtmb3Iobz1uZXcgcm1iKGwuYSk7by5hPG8uYy5jLmxlbmd0aDspe249SkQocG1iKG8pLDkpO2U9SkQoTmliKGEuZixuKSw2MCk7Zm9yKGk9bmV3IGVzKElyKGtZYihuKS5hLkpjKCksbmV3IGVyKSk7Y3MoaSk7KXtnPUpEKGRzKGkpLDE4KTtkPUd0YihnLmEsMCk7aj10cnVlO2s9bnVsbDtpZihkLmIhPWQuZC5jKXtiPUpEKFV0YihkKSw4KTtjPW51bGw7aWYoZy5jLmo9PShSamQoKSx4amQpKXtxPW5ldyBrZmMoYixuZXcgRWRkKGIuYSxlLmQuZCksZSxnKTtxLmYuYT10cnVlO3EuYT1nLmM7WUNiKHAuYyxxKX1pZihnLmMuaj09T2pkKXtxPW5ldyBrZmMoYixuZXcgRWRkKGIuYSxlLmQuZCtlLmQuYSksZSxnKTtxLmYuZD10cnVlO3EuYT1nLmM7WUNiKHAuYyxxKX13aGlsZShkLmIhPWQuZC5jKXtjPUpEKFV0YihkKSw4KTtpZighcUViKGIuYixjLmIpKXtrPW5ldyBrZmMoYixjLG51bGwsZyk7WUNiKHAuYyxrKTtpZihqKXtqPWZhbHNlO2lmKGMuYjxlLmQuZCl7ay5mLmE9dHJ1ZX1lbHNlIGlmKGMuYj5lLmQuZCtlLmQuYSl7ay5mLmQ9dHJ1ZX1lbHNle2suZi5kPXRydWU7ay5mLmE9dHJ1ZX19fWQuYiE9ZC5kLmMmJihiPWMpfWlmKGspe2Y9SkQoTmliKGEuZixnLmQuaSksNjApO2lmKGIuYjxmLmQuZCl7ay5mLmE9dHJ1ZX1lbHNlIGlmKGIuYj5mLmQuZCtmLmQuYSl7ay5mLmQ9dHJ1ZX1lbHNle2suZi5kPXRydWU7ay5mLmE9dHJ1ZX19fX1mb3IoaD1uZXcgZXMoSXIoaFliKG4pLmEuSmMoKSxuZXcgZXIpKTtjcyhoKTspe2c9SkQoZHMoaCksMTgpO2lmKGcuYS5iIT0wKXtiPUpEKEZ0YihnLmEpLDgpO2lmKGcuZC5qPT0oUmpkKCkseGpkKSl7cT1uZXcga2ZjKGIsbmV3IEVkZChiLmEsZS5kLmQpLGUsZyk7cS5mLmE9dHJ1ZTtxLmE9Zy5kO1lDYihwLmMscSl9aWYoZy5kLmo9PU9qZCl7cT1uZXcga2ZjKGIsbmV3IEVkZChiLmEsZS5kLmQrZS5kLmEpLGUsZyk7cS5mLmQ9dHJ1ZTtxLmE9Zy5kO1lDYihwLmMscSl9fX19fXJldHVybiBwfQpmdW5jdGlvbiBycWQoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtO2k9bmV3IFVsYjtsPWIubGVuZ3RoO2c9dDFkKGMpO2ZvcihqPTA7ajxsOysrail7az1pZ2IoYix3Z2IoNjEpLGopO2Q9YXFkKGcsKHpEYihqLGssYi5sZW5ndGgpLGIuc3Vic3RyKGosay1qKSkpO2U9RFNkKGQpO2Y9ZS5naygpLnNpKCk7c3dpdGNoKF9mYihiLCsraykpe2Nhc2UgMzk6e2g9Z2diKGIsMzksKytrKTtJbGIoaSxuZXcgZFBkKGQsUnFkKCh6RGIoayxoLGIubGVuZ3RoKSxiLnN1YnN0cihrLGgtaykpLGYsZSkpKTtqPWgrMTticmVha31jYXNlIDM0OntoPWdnYihiLDM0LCsrayk7SWxiKGksbmV3IGRQZChkLFJxZCgoekRiKGssaCxiLmxlbmd0aCksYi5zdWJzdHIoayxoLWspKSxmLGUpKSk7aj1oKzE7YnJlYWt9Y2FzZSA5MTp7bT1uZXcgVWxiO0lsYihpLG5ldyBkUGQoZCxtKSk7bjpmb3IoOzspe3N3aXRjaChfZmIoYiwrK2spKXtjYXNlIDM5OntoPWdnYihiLDM5LCsrayk7SWxiKG0sUnFkKCh6RGIoayxoLGIubGVuZ3RoKSxiLnN1YnN0cihrLGgtaykpLGYsZSkpO2s9aCsxO2JyZWFrfWNhc2UgMzQ6e2g9Z2diKGIsMzQsKytrKTtJbGIobSxScWQoKHpEYihrLGgsYi5sZW5ndGgpLGIuc3Vic3RyKGssaC1rKSksZixlKSk7az1oKzE7YnJlYWt9Y2FzZSAxMTA6eysraztpZihiLmluZGV4T2YoJ3VsbCcsayk9PWspe20uYy5wdXNoKG51bGwpfWVsc2V7dGhyb3cgc2NiKG5ldyBxeihOQ2UpKX1rKz0zO2JyZWFrfX1pZihrPGwpe3N3aXRjaChBRGIoayxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGspKXtjYXNlIDQ0OnticmVha31jYXNlIDkzOnticmVhayBufWRlZmF1bHQ6e3Rocm93IHNjYihuZXcgcXooJ0V4cGVjdGluZyAsIG9yIF0nKSl9fX1lbHNle2JyZWFrfX1qPWsrMTticmVha31jYXNlIDExMDp7KytrO2lmKGIuaW5kZXhPZigndWxsJyxrKT09ayl7SWxiKGksbmV3IGRQZChkLG51bGwpKX1lbHNle3Rocm93IHNjYihuZXcgcXooTkNlKSl9aj1rKzM7YnJlYWt9fWlmKGo8bCl7QURiKGosYi5sZW5ndGgpO2lmKGIuY2hhckNvZGVBdChqKSE9NDQpe3Rocm93IHNjYihuZXcgcXooJ0V4cGVjdGluZyAsJykpfX1lbHNle2JyZWFrfX1yZXR1cm4gc3FkKGEsaSxjKX0KZnVuY3Rpb24gaG1lKGEpe3ZhciBiLGMsZCxlLGY7Yj1hLmM7Zj1udWxsO3N3aXRjaChiKXtjYXNlIDY6cmV0dXJuIGEuQm0oKTtjYXNlIDEzOnJldHVybiBhLkNtKCk7Y2FzZSAyMzpyZXR1cm4gYS50bSgpO2Nhc2UgMjI6cmV0dXJuIGEueW0oKTtjYXNlIDE4OnJldHVybiBhLnZtKCk7Y2FzZSA4OmZtZShhKTtmPShvb2UoKSxZbmUpO2JyZWFrO2Nhc2UgOTpyZXR1cm4gYS5ibSh0cnVlKTtjYXNlIDE5OnJldHVybiBhLmNtKCk7Y2FzZSAxMDpzd2l0Y2goYS5hKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4MzpmPWEuYW0oYS5hKTtmbWUoYSk7cmV0dXJuIGY7Y2FzZSAxMDE6Y2FzZSAxMDI6Y2FzZSAxMTA6Y2FzZSAxMTQ6Y2FzZSAxMTY6Y2FzZSAxMTc6Y2FzZSAxMTg6Y2FzZSAxMjA6e2M9YS5fbCgpO2M8UHNlPyhmPShvb2UoKSxvb2UoKSwrK25vZSxuZXcgYXBlKDAsYykpKTooZj14b2UoTG5lKGMpKSl9YnJlYWs7Y2FzZSA5OTpyZXR1cm4gYS5sbSgpO2Nhc2UgNjc6cmV0dXJuIGEuZ20oKTtjYXNlIDEwNTpyZXR1cm4gYS5vbSgpO2Nhc2UgNzM6cmV0dXJuIGEuaG0oKTtjYXNlIDEwMzpyZXR1cm4gYS5tbSgpO2Nhc2UgODg6cmV0dXJuIGEuaW0oKTtjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpyZXR1cm4gYS5kbSgpO2Nhc2UgODA6Y2FzZSAxMTI6Zj1sbWUoYSxhLmEpO2lmKCFmKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksaUVlKSkpKTticmVhaztkZWZhdWx0OmY9cm9lKGEuYSk7fWZtZShhKTticmVhaztjYXNlIDA6aWYoYS5hPT05M3x8YS5hPT0xMjN8fGEuYT09MTI1KXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksaEVlKSkpKTtmPXJvZShhLmEpO2Q9YS5hO2ZtZShhKTtpZigoZCY2NDUxMik9PVFzZSYmYS5jPT0wJiYoYS5hJjY0NTEyKT09NTYzMjApe2U9U0MoX0QsVXJlLDMwLDIsMTUsMSk7ZVswXT1kJldyZTtlWzFdPWEuYSZXcmU7Zj13b2UoeG9lKHpnYihlLDAsZS5sZW5ndGgpKSwwKTtmbWUoYSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLGhFZSkpKSk7fXJldHVybiBmfQpmdW5jdGlvbiBaT2MoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGO0M9bmV3IE10Yjt3PW5ldyBNdGI7cT0tMTtmb3IoaT1uZXcgcm1iKGEpO2kuYTxpLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihpKSwxMzIpO2cucz1xLS07az0wO3Q9MDtmb3IoZj1uZXcgcm1iKGcudCk7Zi5hPGYuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGYpLDI3MCk7dCs9ZC5jfWZvcihlPW5ldyBybWIoZy5pKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksMjcwKTtrKz1kLmN9Zy5uPWs7Zy51PXQ7dD09MD8oRHRiKHcsZyx3LmMuYix3LmMpLHRydWUpOms9PTAmJihEdGIoQyxnLEMuYy5iLEMuYyksdHJ1ZSl9Rj1UeChhKTtsPWEuYy5sZW5ndGg7cD1sKzE7cj1sLTE7bj1uZXcgVWxiO3doaWxlKEYuYS5nYygpIT0wKXt3aGlsZSh3LmIhPTApe3Y9KHJEYih3LmIhPTApLEpEKEt0Yih3LHcuYS5hKSwxMzIpKTtGLmEuQWModikhPW51bGw7di5zPXItLTtiUGModixDLHcpfXdoaWxlKEMuYiE9MCl7QT0ockRiKEMuYiE9MCksSkQoS3RiKEMsQy5hLmEpLDEzMikpO0YuYS5BYyhBKSE9bnVsbDtBLnM9cCsrO2JQYyhBLEMsdyl9bz1McmU7Zm9yKGo9Ri5hLmVjKCkuSmMoKTtqLk9iKCk7KXtnPUpEKGouUGIoKSwxMzIpO3M9Zy51LWcubjtpZihzPj1vKXtpZihzPm8pe24uYy5sZW5ndGg9MDtvPXN9WUNiKG4uYyxnKX19aWYobi5jLmxlbmd0aCE9MCl7bT1KRChNbGIobix4dmIoYixuLmMubGVuZ3RoKSksMTMyKTtGLmEuQWMobSkhPW51bGw7bS5zPXArKztiUGMobSxDLHcpO24uYy5sZW5ndGg9MH19dT1hLmMubGVuZ3RoKzE7Zm9yKGg9bmV3IHJtYihhKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTMyKTtnLnM8bCYmKGcucys9dSl9Zm9yKEI9bmV3IHJtYihhKTtCLmE8Qi5jLmMubGVuZ3RoOyl7QT1KRChwbWIoQiksMTMyKTtjPW5ldyBBamIoQS50LDApO3doaWxlKGMuYjxjLmQuZ2MoKSl7ZD0ockRiKGMuYjxjLmQuZ2MoKSksSkQoYy5kLlhiKGMuYz1jLmIrKyksMjcwKSk7RD1kLmI7aWYoQS5zPkQucyl7dGpiKGMpO1BsYihELmksZCk7aWYoZC5jPjApe2QuYT1EO0lsYihELnQsZCk7ZC5iPUE7SWxiKEEuaSxkKX19fX19CmZ1bmN0aW9uIFI4YihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEY7cD1uZXcgVmxiKGIuYik7dT1uZXcgVmxiKGIuYik7bT1uZXcgVmxiKGIuYik7Qj1uZXcgVmxiKGIuYik7cT1uZXcgVmxiKGIuYik7Zm9yKEE9R3RiKGIsMCk7QS5iIT1BLmQuYzspe3Y9SkQoVXRiKEEpLDExKTtmb3IoaD1uZXcgcm1iKHYuZyk7aC5hPGguYy5jLmxlbmd0aDspe2Y9SkQocG1iKGgpLDE4KTtpZihmLmMuaT09Zi5kLmkpe2lmKHYuaj09Zi5kLmope1lDYihCLmMsZik7Y29udGludWV9ZWxzZSBpZih2Lmo9PShSamQoKSx4amQpJiZmLmQuaj09T2pkKXtZQ2IocS5jLGYpO2NvbnRpbnVlfX19fWZvcihpPW5ldyBybWIocSk7aS5hPGkuYy5jLmxlbmd0aDspe2Y9SkQocG1iKGkpLDE4KTtTOGIoYSxmLGMsZCwoUmpkKCksd2pkKSl9Zm9yKGc9bmV3IHJtYihCKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTgpO0M9bmV3IHRZYihhKTtyWWIoQywoRFliKCksQlliKSk7Wk1iKEMsKEJ3YygpLEV2YyksKGFqZCgpLFhpZCkpO1pNYihDLChJcWMoKSxrcWMpLGYpO0Q9bmV3IGJaYjtaTWIoRCxrcWMsZi5kKTthWmIoRCwoUmpkKCksUWpkKSk7X1liKEQsQyk7Rj1uZXcgYlpiO1pNYihGLGtxYyxmLmMpO2FaYihGLHdqZCk7X1liKEYsQyk7Wk1iKGYuYyxzcWMsQyk7Wk1iKGYuZCxzcWMsQyk7Z1diKGYsbnVsbCk7aFdiKGYsbnVsbCk7WUNiKGMuYyxDKTtaTWIoQyxLcGMsamZiKDIpKX1mb3Iodz1HdGIoYiwwKTt3LmIhPXcuZC5jOyl7dj1KRChVdGIodyksMTEpO2o9di5lLmMubGVuZ3RoPjA7cj12LmcuYy5sZW5ndGg+MDtqJiZyPyhZQ2IobS5jLHYpLHRydWUpOmo/KFlDYihwLmMsdiksdHJ1ZSk6ciYmKFlDYih1LmMsdiksdHJ1ZSl9Zm9yKG89bmV3IHJtYihwKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1KRChwbWIobyksMTEpO0lsYihlLFE4YihhLG4sbnVsbCxjKSl9Zm9yKHQ9bmV3IHJtYih1KTt0LmE8dC5jLmMubGVuZ3RoOyl7cz1KRChwbWIodCksMTEpO0lsYihlLFE4YihhLG51bGwscyxjKSl9Zm9yKGw9bmV3IHJtYihtKTtsLmE8bC5jLmMubGVuZ3RoOyl7az1KRChwbWIobCksMTEpO0lsYihlLFE4YihhLGssayxjKSl9fQpmdW5jdGlvbiBabWQoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ7bT1Lc2U7bj1Lc2U7az0wO2w9MDtpPW5ldyBVbGI7Zm9yKGg9bmV3IENIZCgoIWEuYiYmKGEuYj1uZXcgWDBkKHgzLGEsMTIsMykpLGEuYikpO2guZSE9aC5pLmdjKCk7KXtmPUpEKEFIZChoKSw4NSk7aT15bChXQyhPQyhWSSwxKSxOcWUsMjAsMCxbaSwoIWYubiYmKGYubj1uZXcgWDBkKHozLGYsMSw3KSksZi5uKV0pKX1mb3IodD1EbCh5bChXQyhPQyhWSSwxKSxOcWUsMjAsMCxbKCFhLm4mJihhLm49bmV3IFgwZCh6MyxhLDEsNykpLGEubiksKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSxpXSkpKTtjcyh0KTspe3M9SkQoZHModCksMjczKTtqPUpEKHMubWYoKExnZCgpLHZmZCkpLDEzOSk7bT5zLmxoKCktai5iJiYobT1zLmxoKCktai5iKTtuPnMubWgoKS1qLmQmJihuPXMubWgoKS1qLmQpO2s8cy5saCgpK3Mua2goKStqLmMmJihrPXMubGgoKStzLmtoKCkrai5jKTtsPHMubWgoKStzLmpoKCkrai5hJiYobD1zLm1oKCkrcy5qaCgpK2ouYSl9Zm9yKGc9bmV3IENIZCgoIWEuYiYmKGEuYj1uZXcgWDBkKHgzLGEsMTIsMykpLGEuYikpO2cuZSE9Zy5pLmdjKCk7KXtmPUpEKEFIZChnKSw4NSk7Zm9yKHI9bmV3IENIZCgoIWYuYSYmKGYuYT1uZXcgWDBkKHczLGYsNiw2KSksZi5hKSk7ci5lIT1yLmkuZ2MoKTspe3E9SkQoQUhkKHIpLDE2OCk7bz1xLmo7ZD1xLmI7cD1xLms7ZT1xLmM7bT0kd25kLk1hdGgubWluKG0sbyk7bT0kd25kLk1hdGgubWluKG0sZCk7az0kd25kLk1hdGgubWF4KGssbyk7az0kd25kLk1hdGgubWF4KGssZCk7bj0kd25kLk1hdGgubWluKG4scCk7bj0kd25kLk1hdGgubWluKG4sZSk7bD0kd25kLk1hdGgubWF4KGwscCk7bD0kd25kLk1hdGgubWF4KGwsZSk7Zm9yKGM9bmV3IENIZCgoIXEuYSYmKHEuYT1uZXcgcVZkKHUzLHEsNSkpLHEuYSkpO2MuZSE9Yy5pLmdjKCk7KXtiPUpEKEFIZChjKSwzNjkpO209JHduZC5NYXRoLm1pbihtLGIuYSk7az0kd25kLk1hdGgubWF4KGssYi5hKTtuPSR3bmQuTWF0aC5taW4obixiLmIpO2w9JHduZC5NYXRoLm1heChsLGIuYil9fX1tc2QoYSwoTGdkKCksVmVkKSxrLW0pO21zZChhLFVlZCxsLW4pfQpmdW5jdGlvbiBJTWIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSCxJO249SkQoV01iKGEsKFRPYigpLFJPYikpLDI3KTt0PUhxZTt1PUhxZTtyPUxyZTtzPUxyZTtmb3Iodz1uZXcgcm1iKGEuZSk7dy5hPHcuYy5jLmxlbmd0aDspe3Y9SkQocG1iKHcpLDE1MSk7Rj12LmQ7Rz12LmU7dD0kd25kLk1hdGgubWluKHQsRi5hLUcuYS8yKTt1PSR3bmQuTWF0aC5taW4odSxGLmItRy5iLzIpO3I9JHduZC5NYXRoLm1heChyLEYuYStHLmEvMik7cz0kd25kLk1hdGgubWF4KHMsRi5iK0cuYi8yKX1mb3IoYz1uZXcgcm1iKGEuYik7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDI0OSk7Rj1iLmQ7Rz1iLmU7dD0kd25kLk1hdGgubWluKHQsRi5hLUcuYS8yKTt1PSR3bmQuTWF0aC5taW4odSxGLmItRy5iLzIpO3I9JHduZC5NYXRoLm1heChyLEYuYStHLmEvMik7cz0kd25kLk1hdGgubWF4KHMsRi5iK0cuYi8yKX1EPUpEKGtzZChuLChJT2IoKSxyT2IpKSwxMDcpO0M9bmV3IEVkZChELmItdCxELmQtdSk7Zm9yKGo9bmV3IHJtYihhLmUpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSwxNTEpO0I9V01iKGksUk9iKTtpZihSRChCLDIwNikpe3A9SkQoQiwyNyk7QT1tZGQobmV3IEZkZChpLmQpLEMpO2Z0ZChwLEEuYS1wLmcvMixBLmItcC5mLzIpfX1mb3IoZj1uZXcgcm1iKGEuYyk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDI4OCk7bD1KRChXTWIoZSxST2IpLDg1KTttPWhDZChsKTtIPW5ldyBGZGQoaE5iKGUpKTttZGQoSCxDKTtwdWQobSxILmEsSC5iKTtMbGIoZS5hLG5ldyBOTWIoQyxtKSk7ZD1uZXcgRmRkKGlOYihlKSk7bWRkKGQsQyk7aXVkKG0sZC5hLGQuYil9Zm9yKGg9bmV3IHJtYihhLmQpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSw0NDIpO289SkQoV01iKGcsUk9iKSwxNTMpO3E9bWRkKG5ldyBGZGQoZy5kKSxDKTtmdGQobyxxLmEscS5iKX1JPXItdCsoRC5iK0QuYyk7az1zLXUrKEQuZCtELmEpO3lkYihMRChrc2QobiwoTGdkKCksRGZkKSkpKXx8bW5kKG4sSSxrLGZhbHNlLHRydWUpO21zZChuLFZlZCxJLShELmIrRC5jKSk7bXNkKG4sVWVkLGstKEQuZCtELmEpKX0KZnVuY3Rpb24gJEFjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O2MuU2coJ0RlcHRoIGZpcnN0IG1vZGVsIG9yZGVyIGxheWVyaW5nJywxKTthLmQ9YjtxPW5ldyBVbGI7Zm9yKHA9bmV3IHJtYihhLmQuYSk7cC5hPHAuYy5jLmxlbmd0aDspe249SkQocG1iKHApLDkpO24uaz09KERZYigpLEFZYikmJihZQ2IocS5jLG4pLHRydWUpfXBuYigpO1NsYihxLG5ldyBkQmMpO2c9dHJ1ZTthLmI9bmV3IGIkYihhLmQpO2EuYT1udWxsO0lsYihhLmQuYixhLmIpO2EuYi5wPTA7YS5jPTA7YS5mPW5ldyBNdGI7Zm9yKG89bmV3IHJtYihxKTtvLmE8by5jLmMubGVuZ3RoOyl7bj1KRChwbWIobyksOSk7aWYoZyl7cVliKG4sYS5iKTtnPWZhbHNlfWVsc2V7aWYoWUFjKGEsbikpe209YS5jO209WEFjKG0sbik7ZD1tKzI7az1tLWEuYztpZihhLmYuYj09MCl7V0FjKGEsZCxuKX1lbHNle2lmKGs+MCl7Zm9yKHQ9R3RiKGEuZiwwKTt0LmIhPXQuZC5jOyl7cz1KRChVdGIodCksOSk7cy5wKz1tLWEuZX1aQWMoYSk7THRiKGEuZik7V0FjKGEsZCxuKX1lbHNle0F0YihhLmYsbik7bi5wPWQ7YS5lPSR3bmQuTWF0aC5tYXgoYS5lLGQpO2ZvcihmPW5ldyBlcyhJcihoWWIobikuYS5KYygpLG5ldyBlcikpO2NzKGYpOyl7ZT1KRChkcyhmKSwxOCk7aWYoIWUuYy5pLmMmJmUuYy5pLms9PShEWWIoKSx4WWIpKXtBdGIoYS5mLGUuYy5pKTtlLmMuaS5wPWQtMX19YS5jPWR9fX1lbHNle1pBYyhhKTtMdGIoYS5mKTtkPTA7aWYoY3MobmV3IGVzKElyKGhZYihuKS5hLkpjKCksbmV3IGVyKSkpKXttPTA7bT1YQWMobSxuKTtkPW0rMjtXQWMoYSxkLG4pfWVsc2V7QXRiKGEuZixuKTtuLnA9MDthLmU9JHduZC5NYXRoLm1heChhLmUsMCk7YS5iPUpEKE1sYihhLmQuYiwwKSwyNSk7YS5jPTB9fX19YS5mLmI9PTB8fFpBYyhhKTthLmQuYS5jLmxlbmd0aD0wO3I9bmV3IFVsYjtmb3Ioaj1uZXcgcm1iKGEuZC5iKTtqLmE8ai5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaiksMjUpO2guYS5jLmxlbmd0aD09MCYmKFlDYihyLmMsaCksdHJ1ZSl9QmUoYS5kLmIscik7bD0wO2ZvcihpPW5ldyBybWIoYS5kLmIpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSwyNSk7aC5wPWw7KytsfWMuVGcoKX0KZnVuY3Rpb24geEljKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw7Yy5TZygnTmV0d29yayBzaW1wbGV4IG5vZGUgcGxhY2VtZW50JywxKTthLmU9YjthLm49SkQoV01iKGIsKElxYygpLEFxYykpLDMxMyk7d0ljKGEpO2lJYyhhKTtFQmIoREJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuZS5iLDE2KSksbmV3IGxKYyksbmV3IG5KYyhhKSk7RUJiKEJCYihEQmIoQkJiKERCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLmUuYiwxNikpLG5ldyBhS2MpLG5ldyBjS2MpLG5ldyBlS2MpLG5ldyBnS2MpLG5ldyBqSmMoYSkpO2lmKHlkYihMRChXTWIoYS5lLChCd2MoKSxqdmMpKSkpKXtnPWMuYmgoMSk7Zy5TZygnU3RyYWlnaHQgRWRnZXMgUHJlLVByb2Nlc3NpbmcnLDEpO3ZJYyhhKTtnLlRnKCl9TUZiKGEuZik7Zj1KRChXTWIoYixqd2MpLDE3KS5hKmEuZi5hLmMubGVuZ3RoO3dHYihKR2IoS0diKE5HYihhLmYpLGYpLGZhbHNlKSxjLmJoKDEpKTtpZihhLmQuYS5nYygpIT0wKXtnPWMuYmgoMSk7Zy5TZygnRmxleGlibGUgV2hlcmUgU3BhY2UgUHJvY2Vzc2luZycsMSk7aD1KRCh6dWIoSkJiKEZCYihuZXcgUkJiKG51bGwsbmV3IEd2YihhLmYuYSwxNikpLG5ldyBwSmMpLG5ldyBMSWMpKSwxNykuYTtpPUpEKHp1YihJQmIoRkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuZi5hLDE2KSksbmV3IHJKYyksbmV3IFBJYykpLDE3KS5hO2o9aS1oO2s9cEdiKG5ldyByR2IsYS5mKTtsPXBHYihuZXcgckdiLGEuZik7REZiKEdGYihGRmIoRUZiKEhGYihuZXcgSUZiLDIwMDAwKSxqKSxrKSxsKSk7RUJiKEJCYihCQmIoU21iKGEuaSksbmV3IHRKYyksbmV3IHZKYyksbmV3IHhKYyhoLGssaixsKSk7Zm9yKGU9YS5kLmEuZWMoKS5KYygpO2UuT2IoKTspe2Q9SkQoZS5QYigpLDIxNik7ZC5nPTF9d0diKEpHYihLR2IoTkdiKGEuZiksZiksZmFsc2UpLGcuYmgoMSkpO2cuVGcoKX1pZih5ZGIoTEQoV01iKGIsanZjKSkpKXtnPWMuYmgoMSk7Zy5TZygnU3RyYWlnaHQgRWRnZXMgUG9zdC1Qcm9jZXNzaW5nJywxKTt1SWMoYSk7Zy5UZygpfWhJYyhhKTthLmU9bnVsbDthLmY9bnVsbDthLmk9bnVsbDthLmM9bnVsbDtUaWIoYS5rKTthLmo9bnVsbDthLmE9bnVsbDthLm89bnVsbDthLmQuYS4kYigpO2MuVGcoKX0KZnVuY3Rpb24gd3pkKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSSxKLEs7RD1udWxsO0c9YjtGPWZ6ZChhLGNDZChjKSxHKTtQc2QoRixieWQoRyx2RGUpKTtIPUpEKHdvKGEubixYeGQoaUMoRyxjRGUpKSksMjcpO209aUMoRywnc291cmNlUG9ydCcpO2Q9bnVsbDshIW0mJihkPVh4ZChtKSk7ST1KRCh3byhhLnAsZCksMTI0KTtpZighSCl7aD1ZeGQoRyk7bz0iQW4gZWRnZSBtdXN0IGhhdmUgYSBzb3VyY2Ugbm9kZSAoZWRnZSBpZDogJyIraDtwPW8rQURlO3Rocm93IHNjYihuZXcgZXlkKHApKX1pZighIUkmJiFIYihveGQoSSksSCkpe2k9YnlkKEcsdkRlKTtxPSJUaGUgc291cmNlIHBvcnQgb2YgYW4gZWRnZSBtdXN0IGJlIGEgcG9ydCBvZiB0aGUgZWRnZSdzIHNvdXJjZSBub2RlIChlZGdlIGlkOiAnIitpO3I9cStBRGU7dGhyb3cgc2NiKG5ldyBleWQocikpfUI9KCFGLmImJihGLmI9bmV3IHJlZSh2MyxGLDQsNykpLEYuYik7Zj1udWxsO0k/KGY9SSk6KGY9SCk7dENkKEIsZik7Sj1KRCh3byhhLm4sWHhkKGlDKEcsRERlKSkpLDI3KTtuPWlDKEcsJ3RhcmdldFBvcnQnKTtlPW51bGw7ISFuJiYoZT1YeGQobikpO0s9SkQod28oYS5wLGUpLDEyNCk7aWYoIUope2w9WXhkKEcpO3M9IkFuIGVkZ2UgbXVzdCBoYXZlIGEgdGFyZ2V0IG5vZGUgKGVkZ2UgaWQ6ICciK2w7dD1zK0FEZTt0aHJvdyBzY2IobmV3IGV5ZCh0KSl9aWYoISFLJiYhSGIob3hkKEspLEopKXtqPWJ5ZChHLHZEZSk7dT0iVGhlIHRhcmdldCBwb3J0IG9mIGFuIGVkZ2UgbXVzdCBiZSBhIHBvcnQgb2YgdGhlIGVkZ2UncyB0YXJnZXQgbm9kZSAoZWRnZSBpZDogJyIrajt2PXUrQURlO3Rocm93IHNjYihuZXcgZXlkKHYpKX1DPSghRi5jJiYoRi5jPW5ldyByZWUodjMsRiw1LDgpKSxGLmMpO2c9bnVsbDtLPyhnPUspOihnPUopO3RDZChDLGcpO2lmKCghRi5iJiYoRi5iPW5ldyByZWUodjMsRiw0LDcpKSxGLmIpLmk9PTB8fCghRi5jJiYoRi5jPW5ldyByZWUodjMsRiw1LDgpKSxGLmMpLmk9PTApe2s9YnlkKEcsdkRlKTt3PXpEZStrO0E9dytBRGU7dGhyb3cgc2NiKG5ldyBleWQoQSkpfXl6ZChHLEYpO3h6ZChHLEYpO0Q9dXpkKGEsRyxGKTtyZXR1cm4gRH0KZnVuY3Rpb24gUFRiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7bD1SVGIoTFRiKGEsKFJqZCgpLENqZCkpLGIpO289UVRiKExUYihhLERqZCksYik7dT1RVGIoTFRiKGEsTGpkKSxiKTtCPVNUYihMVGIoYSxOamQpLGIpO209U1RiKExUYihhLHlqZCksYik7cz1RVGIoTFRiKGEsS2pkKSxiKTtwPVFUYihMVGIoYSxFamQpLGIpO3c9UVRiKExUYihhLE1qZCksYik7dj1RVGIoTFRiKGEsempkKSxiKTtDPVNUYihMVGIoYSxCamQpLGIpO3I9UVRiKExUYihhLElqZCksYik7dD1RVGIoTFRiKGEsSGpkKSxiKTtBPVFUYihMVGIoYSxBamQpLGIpO0Q9U1RiKExUYihhLEpqZCksYik7bj1TVGIoTFRiKGEsRmpkKSxiKTtxPVFUYihMVGIoYSxHamQpLGIpO2M9VWNkKFdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbcy5hLEIuYSx3LmEsRC5hXSkpO2Q9VWNkKFdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbby5hLGwuYSx1LmEscS5hXSkpO2U9ci5hO2Y9VWNkKFdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbcC5hLG0uYSx2LmEsbi5hXSkpO2o9VWNkKFdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbcy5iLG8uYixwLmIsdC5iXSkpO2k9VWNkKFdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbQi5iLGwuYixtLmIscS5iXSkpO2s9Qy5iO2g9VWNkKFdDKE9DKGFFLDEpLFJzZSwzMCwxNSxbdy5iLHUuYix2LmIsQS5iXSkpO0hUYihMVGIoYSxDamQpLGMrZSxqK2spO0hUYihMVGIoYSxHamQpLGMrZSxqK2spO0hUYihMVGIoYSxEamQpLGMrZSwwKTtIVGIoTFRiKGEsTGpkKSxjK2UsaitrK2kpO0hUYihMVGIoYSxOamQpLDAsaitrKTtIVGIoTFRiKGEseWpkKSxjK2UrZCxqK2spO0hUYihMVGIoYSxFamQpLGMrZStkLDApO0hUYihMVGIoYSxNamQpLDAsaitrK2kpO0hUYihMVGIoYSx6amQpLGMrZStkLGoraytpKTtIVGIoTFRiKGEsQmpkKSwwLGopO0hUYihMVGIoYSxJamQpLGMsMCk7SFRiKExUYihhLEFqZCksMCxqK2sraSk7SFRiKExUYihhLEZqZCksYytlK2QsMCk7Zz1uZXcgQ2RkO2cuYT1VY2QoV0MoT0MoYUUsMSksUnNlLDMwLDE1LFtjK2QrZStmLEMuYSx0LmEsQS5hXSkpO2cuYj1VY2QoV0MoT0MoYUUsMSksUnNlLDMwLDE1LFtqK2kraytoLHIuYixELmIsbi5iXSkpO3JldHVybiBnfQpmdW5jdGlvbiBERGIoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRDtzPW5ldyBFZGQoS3NlLEtzZSk7Yj1uZXcgRWRkKExzZSxMc2UpO2ZvcihCPW5ldyBybWIoYSk7Qi5hPEIuYy5jLmxlbmd0aDspe0E9SkQocG1iKEIpLDgpO3MuYT0kd25kLk1hdGgubWluKHMuYSxBLmEpO3MuYj0kd25kLk1hdGgubWluKHMuYixBLmIpO2IuYT0kd25kLk1hdGgubWF4KGIuYSxBLmEpO2IuYj0kd25kLk1hdGgubWF4KGIuYixBLmIpfW09bmV3IEVkZChiLmEtcy5hLGIuYi1zLmIpO2o9bmV3IEVkZChzLmEtNTAscy5iLW0uYS01MCk7az1uZXcgRWRkKHMuYS01MCxiLmIrbS5hKzUwKTtsPW5ldyBFZGQoYi5hK20uYi8yKzUwLHMuYittLmIvMik7bj1uZXcgV0RiKGosayxsKTt3PW5ldyBRcmI7Zj1uZXcgVWxiO2M9bmV3IFVsYjt3LmEueWMobix3KTtmb3IoRD1uZXcgcm1iKGEpO0QuYTxELmMuYy5sZW5ndGg7KXtDPUpEKHBtYihEKSw4KTtmLmMubGVuZ3RoPTA7Zm9yKHY9dy5hLmVjKCkuSmMoKTt2Lk9iKCk7KXt0PUpEKHYuUGIoKSwzMTgpO2Q9dC5kO3BkZChkLHQuYSk7U3kocGRkKHQuZCxDKSxwZGQodC5kLHQuYSkpPDAmJihZQ2IoZi5jLHQpLHRydWUpfWMuYy5sZW5ndGg9MDtmb3IodT1uZXcgcm1iKGYpO3UuYTx1LmMuYy5sZW5ndGg7KXt0PUpEKHBtYih1KSwzMTgpO2ZvcihxPW5ldyBybWIodC5lKTtxLmE8cS5jLmMubGVuZ3RoOyl7bz1KRChwbWIocSksMTc2KTtnPXRydWU7Zm9yKGk9bmV3IHJtYihmKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMzE4KTtoIT10JiYodHViKG8sTWxiKGguZSwwKSl8fHR1YihvLE1sYihoLmUsMSkpfHx0dWIobyxNbGIoaC5lLDIpKSkmJihnPWZhbHNlKX1nJiYoWUNiKGMuYyxvKSx0cnVlKX19VGUodyxmKTtvZmIodyxuZXcgRURiKTtmb3IocD1uZXcgcm1iKGMpO3AuYTxwLmMuYy5sZW5ndGg7KXtvPUpEKHBtYihwKSwxNzYpO05yYih3LG5ldyBXRGIoQyxvLmEsby5iKSl9fXI9bmV3IFFyYjtvZmIodyxuZXcgR0RiKHIpKTtlPXIuYS5lYygpLkpjKCk7d2hpbGUoZS5PYigpKXtvPUpEKGUuUGIoKSwxNzYpOyhWRGIobixvLmEpfHxWRGIobixvLmIpKSYmZS5RYigpfW9mYihyLG5ldyBJRGIpO3JldHVybiByfQpmdW5jdGlvbiBWcGQoKXtWcGQ9WmNiO0pwZCgpO1VwZD1JcGQuYTtKRChuRGQoU1RkKElwZC5hKSwwKSwxOSk7T3BkPUlwZC5mO0pEKG5EZChTVGQoSXBkLmYpLDApLDE5KTtKRChuRGQoU1RkKElwZC5mKSwxKSwzNSk7VHBkPUlwZC5uO0pEKG5EZChTVGQoSXBkLm4pLDApLDM1KTtKRChuRGQoU1RkKElwZC5uKSwxKSwzNSk7SkQobkRkKFNUZChJcGQubiksMiksMzUpO0pEKG5EZChTVGQoSXBkLm4pLDMpLDM1KTtQcGQ9SXBkLmc7SkQobkRkKFNUZChJcGQuZyksMCksMTkpO0pEKG5EZChTVGQoSXBkLmcpLDEpLDM1KTtMcGQ9SXBkLmM7SkQobkRkKFNUZChJcGQuYyksMCksMTkpO0pEKG5EZChTVGQoSXBkLmMpLDEpLDE5KTtRcGQ9SXBkLmk7SkQobkRkKFNUZChJcGQuaSksMCksMTkpO0pEKG5EZChTVGQoSXBkLmkpLDEpLDE5KTtKRChuRGQoU1RkKElwZC5pKSwyKSwxOSk7SkQobkRkKFNUZChJcGQuaSksMyksMTkpO0pEKG5EZChTVGQoSXBkLmkpLDQpLDM1KTtScGQ9SXBkLmo7SkQobkRkKFNUZChJcGQuaiksMCksMTkpO01wZD1JcGQuZDtKRChuRGQoU1RkKElwZC5kKSwwKSwxOSk7SkQobkRkKFNUZChJcGQuZCksMSksMTkpO0pEKG5EZChTVGQoSXBkLmQpLDIpLDE5KTtKRChuRGQoU1RkKElwZC5kKSwzKSwxOSk7SkQobkRkKFNUZChJcGQuZCksNCksMzUpO0pEKG5EZChTVGQoSXBkLmQpLDUpLDM1KTtKRChuRGQoU1RkKElwZC5kKSw2KSwzNSk7SkQobkRkKFNUZChJcGQuZCksNyksMzUpO0twZD1JcGQuYjtKRChuRGQoU1RkKElwZC5iKSwwKSwzNSk7SkQobkRkKFNUZChJcGQuYiksMSksMzUpO05wZD1JcGQuZTtKRChuRGQoU1RkKElwZC5lKSwwKSwzNSk7SkQobkRkKFNUZChJcGQuZSksMSksMzUpO0pEKG5EZChTVGQoSXBkLmUpLDIpLDM1KTtKRChuRGQoU1RkKElwZC5lKSwzKSwzNSk7SkQobkRkKFNUZChJcGQuZSksNCksMTkpO0pEKG5EZChTVGQoSXBkLmUpLDUpLDE5KTtKRChuRGQoU1RkKElwZC5lKSw2KSwxOSk7SkQobkRkKFNUZChJcGQuZSksNyksMTkpO0pEKG5EZChTVGQoSXBkLmUpLDgpLDE5KTtKRChuRGQoU1RkKElwZC5lKSw5KSwxOSk7SkQobkRkKFNUZChJcGQuZSksMTApLDM1KTtTcGQ9SXBkLms7SkQobkRkKFNUZChJcGQuayksMCksMzUpO0pEKG5EZChTVGQoSXBkLmspLDEpLDM1KX0KZnVuY3Rpb24gaW1lKGEpe3ZhciBiLGMsZCxlLGY7Yj1hLmM7c3dpdGNoKGIpe2Nhc2UgMTE6cmV0dXJuIGEuc20oKTtjYXNlIDEyOnJldHVybiBhLnVtKCk7Y2FzZSAxNDpyZXR1cm4gYS53bSgpO2Nhc2UgMTU6cmV0dXJuIGEuem0oKTtjYXNlIDE2OnJldHVybiBhLnhtKCk7Y2FzZSAxNzpyZXR1cm4gYS5BbSgpO2Nhc2UgMjE6Zm1lKGEpO3JldHVybiBvb2UoKSxvb2UoKSxabmU7Y2FzZSAxMDpzd2l0Y2goYS5hKXtjYXNlIDY1OnJldHVybiBhLmVtKCk7Y2FzZSA5MDpyZXR1cm4gYS5qbSgpO2Nhc2UgMTIyOnJldHVybiBhLnFtKCk7Y2FzZSA5ODpyZXR1cm4gYS5rbSgpO2Nhc2UgNjY6cmV0dXJuIGEuZm0oKTtjYXNlIDYwOnJldHVybiBhLnBtKCk7Y2FzZSA2MjpyZXR1cm4gYS5ubSgpO319Zj1obWUoYSk7Yj1hLmM7c3dpdGNoKGIpe2Nhc2UgMzpyZXR1cm4gYS5GbShmKTtjYXNlIDQ6cmV0dXJuIGEuRG0oZik7Y2FzZSA1OnJldHVybiBhLkVtKGYpO2Nhc2UgMDppZihhLmE9PTEyMyYmYS5kPGEuail7ZT1hLmQ7ZD0wO2M9LTE7aWYoKGI9X2ZiKGEuaSxlKyspKT49NDgmJmI8PTU3KXtkPWItNDg7d2hpbGUoZTxhLmomJihiPV9mYihhLmksZSsrKSk+PTQ4JiZiPD01Nyl7ZD1kKjEwK2ItNDg7aWYoZDwwKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksREVlKSkpKX19ZWxzZXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHpFZSkpKSl9Yz1kO2lmKGI9PTQ0KXtpZihlPj1hLmope3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksQkVlKSkpKX1lbHNlIGlmKChiPV9mYihhLmksZSsrKSk+PTQ4JiZiPD01Nyl7Yz1iLTQ4O3doaWxlKGU8YS5qJiYoYj1fZmIoYS5pLGUrKykpPj00OCYmYjw9NTcpe2M9YyoxMCtiLTQ4O2lmKGM8MCl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLERFZSkpKSl9aWYoZD5jKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksQ0VlKSkpKX1lbHNle2M9LTF9fWlmKGIhPTEyNSl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLEFFZSkpKSk7aWYoYS4kbChlKSl7Zj0ob29lKCksb29lKCksKytub2UsbmV3IGRwZSg5LGYpKTthLmQ9ZSsxfWVsc2V7Zj0ob29lKCksb29lKCksKytub2UsbmV3IGRwZSgzLGYpKTthLmQ9ZX1mLkxtKGQpO2YuS20oYyk7Zm1lKGEpfX1yZXR1cm4gZn0KZnVuY3Rpb24gWXVkKGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyO2lmKGQ9PW51bGwpe3JldHVybiBudWxsfWlmKGIuYSE9Yy5naygpKXt0aHJvdyBzY2IobmV3IFRlYihXQ2UrYy52ZSgpK1hDZSkpfWlmKFJEKGMsNDU1KSl7cj1VWWQoSkQoYyw2NzApLGQpO2lmKCFyKXt0aHJvdyBzY2IobmV3IFRlYihZQ2UrZCsiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIG9mICciK2MudmUoKSsiJyIpKX1yZXR1cm4gcn1zd2l0Y2goaGFlKChHZmUoKSxFZmUpLGMpLktsKCkpe2Nhc2UgMjp7ZD1JcGUoZCxmYWxzZSk7YnJlYWt9Y2FzZSAzOntkPUlwZShkLHRydWUpO2JyZWFrfX1lPWhhZShFZmUsYykuR2woKTtpZihlKXtyZXR1cm4gZS5naygpLnNpKCkucGkoZSxkKX1uPWhhZShFZmUsYykuSWwoKTtpZihuKXtyPW5ldyBVbGI7Zm9yKGs9X3VkKGQpLGw9MCxtPWsubGVuZ3RoO2w8bTsrK2wpe2o9a1tsXTtJbGIocixuLmdrKCkuc2koKS5waShuLGopKX1yZXR1cm4gcn1xPWhhZShFZmUsYykuSmwoKTtpZighcS5kYygpKXtmb3IocD1xLkpjKCk7cC5PYigpOyl7bz1KRChwLlBiKCksMTU1KTt0cnl7cj1vLmdrKCkuc2koKS5waShvLGQpO2lmKHIhPW51bGwpe3JldHVybiByfX1jYXRjaChhKXthPXJjYihhKTtpZighUkQoYSw2MykpdGhyb3cgc2NiKGEpfX10aHJvdyBzY2IobmV3IFRlYihZQ2UrZCsiJyBkb2VzIG5vdCBtYXRjaCBhbnkgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiBkYXRhdHlwZSAnIitjLnZlKCkrIiciKSl9SkQoYyw4MjYpLmxrKCk7Zj1qZmUoYy5oaygpKTtpZighZilyZXR1cm4gbnVsbDtpZihmPT1JSSl7aD0wO3RyeXtoPUZkYihkLExyZSxIcWUpJldyZX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDEzMCkpe2c9cmdiKGQpO2g9Z1swXX1lbHNlIHRocm93IHNjYihhKX1yZXR1cm4gJGRiKGgpfWlmKGY9PWhLKXtmb3IoaT0wO2k8UnVkLmxlbmd0aDsrK2kpe3RyeXtyZXR1cm4gd1pkKFJ1ZFtpXSxkKX1jYXRjaChhKXthPXJjYihhKTtpZighUkQoYSwzMikpdGhyb3cgc2NiKGEpfX10aHJvdyBzY2IobmV3IFRlYihZQ2UrZCsiJyBpcyBub3QgYSBkYXRlIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIGZvcm0geXl5eS1NTS1kZCdUJ0hIOm1tOnNzJy4nU1NTWiBvciBhIHZhbGlkIHN1YnNldCB0aGVyZW9mIikpfXRocm93IHNjYihuZXcgVGViKFlDZStkKyInIGlzIGludmFsaWQuICIpKX0KZnVuY3Rpb24gSlRiKCl7SlRiPVpjYjtJVGI9bmV3IFBwO1JjKElUYiwoUmpkKCksQ2pkKSxHamQpO1JjKElUYixOamQsR2pkKTtSYyhJVGIsTmpkLEpqZCk7UmMoSVRiLHlqZCxGamQpO1JjKElUYix5amQsR2pkKTtSYyhJVGIsRGpkLEdqZCk7UmMoSVRiLERqZCxIamQpO1JjKElUYixMamQsQWpkKTtSYyhJVGIsTGpkLEdqZCk7UmMoSVRiLElqZCxCamQpO1JjKElUYixJamQsR2pkKTtSYyhJVGIsSWpkLEhqZCk7UmMoSVRiLElqZCxBamQpO1JjKElUYixCamQsSWpkKTtSYyhJVGIsQmpkLEpqZCk7UmMoSVRiLEJqZCxGamQpO1JjKElUYixCamQsR2pkKTtSYyhJVGIsS2pkLEtqZCk7UmMoSVRiLEtqZCxIamQpO1JjKElUYixLamQsSmpkKTtSYyhJVGIsRWpkLEVqZCk7UmMoSVRiLEVqZCxIamQpO1JjKElUYixFamQsRmpkKTtSYyhJVGIsTWpkLE1qZCk7UmMoSVRiLE1qZCxBamQpO1JjKElUYixNamQsSmpkKTtSYyhJVGIsempkLHpqZCk7UmMoSVRiLHpqZCxBamQpO1JjKElUYix6amQsRmpkKTtSYyhJVGIsSGpkLERqZCk7UmMoSVRiLEhqZCxJamQpO1JjKElUYixIamQsS2pkKTtSYyhJVGIsSGpkLEVqZCk7UmMoSVRiLEhqZCxHamQpO1JjKElUYixIamQsSGpkKTtSYyhJVGIsSGpkLEpqZCk7UmMoSVRiLEhqZCxGamQpO1JjKElUYixBamQsTGpkKTtSYyhJVGIsQWpkLElqZCk7UmMoSVRiLEFqZCxNamQpO1JjKElUYixBamQsempkKTtSYyhJVGIsQWpkLEFqZCk7UmMoSVRiLEFqZCxKamQpO1JjKElUYixBamQsRmpkKTtSYyhJVGIsQWpkLEdqZCk7UmMoSVRiLEpqZCxOamQpO1JjKElUYixKamQsQmpkKTtSYyhJVGIsSmpkLEtqZCk7UmMoSVRiLEpqZCxNamQpO1JjKElUYixKamQsSGpkKTtSYyhJVGIsSmpkLEFqZCk7UmMoSVRiLEpqZCxKamQpO1JjKElUYixKamQsR2pkKTtSYyhJVGIsRmpkLHlqZCk7UmMoSVRiLEZqZCxCamQpO1JjKElUYixGamQsRWpkKTtSYyhJVGIsRmpkLHpqZCk7UmMoSVRiLEZqZCxIamQpO1JjKElUYixGamQsQWpkKTtSYyhJVGIsRmpkLEZqZCk7UmMoSVRiLEZqZCxHamQpO1JjKElUYixHamQsQ2pkKTtSYyhJVGIsR2pkLE5qZCk7UmMoSVRiLEdqZCx5amQpO1JjKElUYixHamQsRGpkKTtSYyhJVGIsR2pkLExqZCk7UmMoSVRiLEdqZCxJamQpO1JjKElUYixHamQsQmpkKTtSYyhJVGIsR2pkLEhqZCk7UmMoSVRiLEdqZCxBamQpO1JjKElUYixHamQsSmpkKTtSYyhJVGIsR2pkLEZqZCk7UmMoSVRiLEdqZCxHamQpfQpmdW5jdGlvbiBqVWIoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCO2EuZD1uZXcgRWRkKEtzZSxLc2UpO2EuYz1uZXcgRWRkKExzZSxMc2UpO2ZvcihtPWIuSmMoKTttLk9iKCk7KXtrPUpEKG0uUGIoKSwzNik7Zm9yKHQ9bmV3IHJtYihrLmEpO3QuYTx0LmMuYy5sZW5ndGg7KXtzPUpEKHBtYih0KSw5KTthLmQuYT0kd25kLk1hdGgubWluKGEuZC5hLHMubi5hLXMuZC5iKTthLmQuYj0kd25kLk1hdGgubWluKGEuZC5iLHMubi5iLXMuZC5kKTthLmMuYT0kd25kLk1hdGgubWF4KGEuYy5hLHMubi5hK3Muby5hK3MuZC5jKTthLmMuYj0kd25kLk1hdGgubWF4KGEuYy5iLHMubi5iK3Muby5iK3MuZC5hKX19aD1uZXcgQVViO2ZvcihsPWIuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSwzNik7ZD1zVWIoYSxrKTtJbGIoaC5hLGQpO2QuYT1kLmF8IUpEKFdNYihkLmMsKElxYygpLFFwYykpLDIyKS5kYygpfWEuYj0oWFFiKCksQj1uZXcgZlJiLEIuZj1uZXcgT1FiKGMpLEIuYj1OUWIoQi5mLGgpLEIpO19RYigobz1hLmIsbmV3IHdsZCxvKSk7YS5lPW5ldyBDZGQ7YS5hPWEuYi5mLmU7Zm9yKGc9bmV3IHJtYihoLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihnKSw4MzQpO3U9YVJiKGEuYixlKTt5WGIoZS5jLHUuYSx1LmIpO2ZvcihxPW5ldyBybWIoZS5jLmEpO3EuYTxxLmMuYy5sZW5ndGg7KXtwPUpEKHBtYihxKSw5KTtpZihwLms9PShEWWIoKSx3WWIpKXtyPW5VYihhLHAubixKRChXTWIocCwoSXFjKCksVHBjKSksNjQpKTttZGQodmRkKHAubikscil9fX1mb3IoZj1uZXcgcm1iKGguYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDgzNCk7Zm9yKGo9bmV3IHJtYih5VWIoZSkpO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSwxOCk7QT1uZXcgU2RkKGkuYSk7ZHUoQSwwLFdZYihpLmMpKTtBdGIoQSxXWWIoaS5kKSk7bj1udWxsO2Zvcih3PUd0YihBLDApO3cuYiE9dy5kLmM7KXt2PUpEKFV0Yih3KSw4KTtpZighbil7bj12O2NvbnRpbnVlfWlmKFR5KG4uYSx2LmEpKXthLmUuYT0kd25kLk1hdGgubWluKGEuZS5hLG4uYSk7YS5hLmE9JHduZC5NYXRoLm1heChhLmEuYSxuLmEpfWVsc2UgaWYoVHkobi5iLHYuYikpe2EuZS5iPSR3bmQuTWF0aC5taW4oYS5lLmIsbi5iKTthLmEuYj0kd25kLk1hdGgubWF4KGEuYS5iLG4uYil9bj12fX19dGRkKGEuZSk7bWRkKGEuYSxhLmUpfQpmdW5jdGlvbiBtaGIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2M9MDtnPTA7Zj1iLmxlbmd0aDtoPW51bGw7aj1uZXcgVmdiO2lmKGc8ZiYmKEFEYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZyk9PTQzKSl7KytnOysrYztpZihnPGYmJihBRGIoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpPT00M3x8KEFEYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZyk9PTQ1KSkpe3Rocm93IHNjYihuZXcgTWZiKEpzZStiKyciJykpfX13aGlsZShnPGYmJihBRGIoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpIT00NikmJihBRGIoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpIT0xMDEpJiYoQURiKGcsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChnKSE9NjkpKXsrK2d9ai5hKz0nJytxZ2IoYj09bnVsbD9ScWU6KHREYihiKSxiKSxjLGcpO2lmKGc8ZiYmKEFEYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZyk9PTQ2KSl7KytnO2M9Zzt3aGlsZShnPGYmJihBRGIoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpIT0xMDEpJiYoQURiKGcsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChnKSE9NjkpKXsrK2d9YS5lPWctYztqLmErPScnK3FnYihiPT1udWxsP1JxZToodERiKGIpLGIpLGMsZyl9ZWxzZXthLmU9MH1pZihnPGYmJihBRGIoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpPT0xMDF8fChBRGIoZyxiLmxlbmd0aCksYi5jaGFyQ29kZUF0KGcpPT02OSkpKXsrK2c7Yz1nO2lmKGc8ZiYmKEFEYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZyk9PTQzKSl7KytnO2c8ZiYmKEFEYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZykhPTQ1KSYmKytjfWg9KHpEYihjLGYsYi5sZW5ndGgpLGIuc3Vic3RyKGMsZi1jKSk7YS5lPWEuZS1GZGIoaCxMcmUsSHFlKTtpZihhLmUhPVlEKGEuZSkpe3Rocm93IHNjYihuZXcgTWZiKCdTY2FsZSBvdXQgb2YgcmFuZ2UuJykpfX1pPWouYTtpZihpLmxlbmd0aDwxNil7YS5mPShqaGI9PW51bGwmJihqaGI9bmV3IFJlZ0V4cCgnXlsrLV0/XFxkKiQnLCdpJykpLGpoYi50ZXN0KGkpP3BhcnNlSW50KGksMTApOk5hTik7aWYoaXNOYU4oYS5mKSl7dGhyb3cgc2NiKG5ldyBNZmIoSnNlK2IrJyInKSl9YS5hPXRoYihhLmYpfWVsc2V7bmhiKGEsbmV3IFhoYihpKSl9YS5kPWouYS5sZW5ndGg7Zm9yKGU9MDtlPGouYS5sZW5ndGg7KytlKXtkPV9mYihqLmEsZSk7aWYoZCE9NDUmJmQhPTQ4KXticmVha30tLWEuZH1hLmQ9PTAmJihhLmQ9MSl9CmZ1bmN0aW9uIHA2ZChhKXtEdmQoYS5iLEJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtERmUsJ0NvbnNpc3RlbnRUcmFuc2llbnQnXSkpO0R2ZChhLmEsQkZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0RGZSwnV2VsbEZvcm1lZFNvdXJjZVVSSSddKSk7RHZkKGEubyxCRmUsV0MoT0MoaEosMSksaHJlLDIsNixbREZlLCdJbnRlcmZhY2VJc0Fic3RyYWN0IEF0TW9zdE9uZUlEIFVuaXF1ZUZlYXR1cmVOYW1lcyBVbmlxdWVPcGVyYXRpb25TaWduYXR1cmVzIE5vQ2lyY3VsYXJTdXBlclR5cGVzIFdlbGxGb3JtZWRNYXBFbnRyeUNsYXNzIENvbnNpc3RlbnRTdXBlclR5cGVzIERpc2pvaW50RmVhdHVyZUFuZE9wZXJhdGlvblNpZ25hdHVyZXMnXSkpO0R2ZChhLnAsQkZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0RGZSwnV2VsbEZvcm1lZEluc3RhbmNlVHlwZU5hbWUgVW5pcXVlVHlwZVBhcmFtZXRlck5hbWVzJ10pKTtEdmQoYS52LEJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtERmUsJ1VuaXF1ZUVudW1lcmF0b3JOYW1lcyBVbmlxdWVFbnVtZXJhdG9yTGl0ZXJhbHMnXSkpO0R2ZChhLlIsQkZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0RGZSwnV2VsbEZvcm1lZE5hbWUnXSkpO0R2ZChhLlQsQkZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0RGZSwnVW5pcXVlUGFyYW1ldGVyTmFtZXMgVW5pcXVlVHlwZVBhcmFtZXRlck5hbWVzIE5vUmVwZWF0aW5nVm9pZCddKSk7RHZkKGEuVSxCRmUsV0MoT0MoaEosMSksaHJlLDIsNixbREZlLCdXZWxsRm9ybWVkTnNVUkkgV2VsbEZvcm1lZE5zUHJlZml4IFVuaXF1ZVN1YnBhY2thZ2VOYW1lcyBVbmlxdWVDbGFzc2lmaWVyTmFtZXMgVW5pcXVlTnNVUklzJ10pKTtEdmQoYS5XLEJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtERmUsJ0NvbnNpc3RlbnRPcHBvc2l0ZSBTaW5nbGVDb250YWluZXIgQ29uc2lzdGVudEtleXMgQ29uc2lzdGVudFVuaXF1ZSBDb25zaXN0ZW50Q29udGFpbmVyJ10pKTtEdmQoYS5iYixCRmUsV0MoT0MoaEosMSksaHJlLDIsNixbREZlLCdWYWxpZERlZmF1bHRWYWx1ZUxpdGVyYWwnXSkpO0R2ZChhLmViLEJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtERmUsJ1ZhbGlkTG93ZXJCb3VuZCBWYWxpZFVwcGVyQm91bmQgQ29uc2lzdGVudEJvdW5kcyBWYWxpZFR5cGUnXSkpO0R2ZChhLkgsQkZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0RGZSwnQ29uc2lzdGVudFR5cGUgQ29uc2lzdGVudEJvdW5kcyBDb25zaXN0ZW50QXJndW1lbnRzJ10pKX0KZnVuY3Rpb24gbFFiKGEpe3ZhciBiLGMsZCxlLGY7Yz1KRChXTWIoYSwoSXFjKCksV3BjKSksMjIpO2I9SzljKGdRYik7ZT1KRChXTWIoYSwoQndjKCksSXVjKSksMzQyKTtlPT0oZWlkKCksYmlkKSYmRDljKGIsaFFiKTt5ZGIoTEQoV01iKGEsR3VjKSkpP0U5YyhiLChDUWIoKSx4UWIpLCh1NWIoKSxrNWIpKTpFOWMoYiwoQ1FiKCkselFiKSwodTViKCksazViKSk7V01iKGEsKEdjZCgpLEZjZCkpIT1udWxsJiZEOWMoYixpUWIpOyh5ZGIoTEQoV01iKGEsUHVjKSkpfHx5ZGIoTEQoV01iKGEsSHVjKSkpKSYmQzljKGIsKENRYigpLEJRYiksKHU1YigpLHk0YikpO3N3aXRjaChKRChXTWIoYSxydWMpLDg2KS5nKXtjYXNlIDI6Y2FzZSAzOmNhc2UgNDpDOWMoRTljKGIsKENRYigpLHhRYiksKHU1YigpLEE0YikpLEJRYix6NGIpO31jLkdjKCgkb2MoKSxSb2MpKSYmQzljKEU5YyhFOWMoYiwoQ1FiKCkseFFiKSwodTViKCkseDRiKSksQVFiLHY0YiksQlFiLHc0Yik7WEQoV01iKGEsWnVjKSkhPT1YRCgoZHljKCksYnljKSkmJkU5YyhiLChDUWIoKSx6UWIpLCh1NWIoKSxjNWIpKTtpZihjLkdjKFlvYykpe0U5YyhiLChDUWIoKSx4UWIpLCh1NWIoKSxpNWIpKTtFOWMoYix5UWIsZzViKTtFOWMoYix6UWIsaDViKX1YRChXTWIoYSxYdGMpKSE9PVhEKChLb2MoKSxJb2MpKSYmWEQoV01iKGEseXVjKSkhPT1YRCgoeGhkKCksdWhkKSkmJkM5YyhiLChDUWIoKSxCUWIpLCh1NWIoKSxONGIpKTt5ZGIoTEQoV01iKGEsS3VjKSkpJiZFOWMoYiwoQ1FiKCkselFiKSwodTViKCksTTRiKSk7eWRiKExEKFdNYihhLG51YykpKSYmRTljKGIsKENRYigpLHpRYiksKHU1YigpLHE1YikpO2lmKG9RYihhKSl7WEQoV01iKGEsSXVjKSk9PT1YRChiaWQpPyhkPUpEKFdNYihhLGd1YyksMjk4KSk6KGQ9SkQoV01iKGEsaHVjKSwyOTgpKTtmPWQ9PShocGMoKSxmcGMpPyh1NWIoKSxmNWIpOih1NWIoKSx0NWIpO0U5YyhiLChDUWIoKSxBUWIpLGYpfUpEKFdNYihhLGJ2YyksNDIwKS5nPT0xJiZFOWMoYiwoQ1FiKCksQVFiKSwodTViKCkscTRiKSk7c3dpdGNoKEpEKFdNYihhLHl3YyksMzgwKS5nKXtjYXNlIDE6RTljKGIsKENRYigpLEFRYiksKHU1YigpLHI1YikpO2JyZWFrO2Nhc2UgMjpDOWMoRTljKEU5YyhiLChDUWIoKSx6UWIpLCh1NWIoKSxyNGIpKSxBUWIsczRiKSxCUWIsdDRiKTt9WEQoV01iKGEsY3VjKSkhPT1YRCgobnljKCksa3ljKSkmJkU5YyhiLChDUWIoKSx6UWIpLCh1NWIoKSxzNWIpKTtyZXR1cm4gYn0KZnVuY3Rpb24gYzFiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDO2lmKGIuZGMoKSl7cmV0dXJufWU9bmV3IFJkZDtoPWM/YzpKRChiLlhiKDApLDE4KTtvPWguYztLT2MoKTttPW8uaS5rO2lmKCEobT09KERZYigpLEFZYil8fG09PUJZYnx8bT09d1lifHxtPT12WWIpKXt0aHJvdyBzY2IobmV3IFRlYignVGhlIHRhcmdldCBub2RlIG9mIHRoZSBlZGdlIG11c3QgYmUgYSBub3JtYWwgbm9kZSBvciBhIG5vcnRoU291dGhQb3J0LicpKX1DdGIoZSxLZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbby5pLm4sby5uLG8uYV0pKSk7aWYoKFJqZCgpLElqZCkuR2Moby5qKSl7cT1CZWIoTUQoV01iKG8sKElxYygpLENxYykpKSk7bD1uZXcgRWRkKEtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtvLmkubixvLm4sby5hXSkpLmEscSk7RHRiKGUsbCxlLmMuYixlLmMpfWs9bnVsbDtkPWZhbHNlO2k9Yi5KYygpO3doaWxlKGkuT2IoKSl7Zz1KRChpLlBiKCksMTgpO2Y9Zy5hO2lmKGYuYiE9MCl7aWYoZCl7aj13ZGQobWRkKGssKHJEYihmLmIhPTApLEpEKGYuYS5hLmMsOCkpKSwwLjUpO0R0YihlLGosZS5jLmIsZS5jKTtkPWZhbHNlfWVsc2V7ZD10cnVlfWs9b2RkKChyRGIoZi5iIT0wKSxKRChmLmMuYi5jLDgpKSk7eGUoZSxmKTtMdGIoZil9fXA9aC5kO2lmKElqZC5HYyhwLmopKXtxPUJlYihNRChXTWIocCwoSXFjKCksQ3FjKSkpKTtsPW5ldyBFZGQoS2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW3AuaS5uLHAubixwLmFdKSkuYSxxKTtEdGIoZSxsLGUuYy5iLGUuYyl9Q3RiKGUsS2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW3AuaS5uLHAubixwLmFdKSkpO2EuZD09KG96YygpLGx6YykmJihyPShyRGIoZS5iIT0wKSxKRChlLmEuYS5jLDgpKSxzPUpEKGZ1KGUsMSksOCksdD1uZXcgRGRkKEVQYyhvLmopKSx0LmEqPTUsdC5iKj01LHU9QmRkKG5ldyBFZGQocy5hLHMuYiksciksdj1uZXcgRWRkKGIxYih0LmEsdS5hKSxiMWIodC5iLHUuYikpLG1kZCh2LHIpLHc9R3RiKGUsMSksU3RiKHcsdiksQT0ockRiKGUuYiE9MCksSkQoZS5jLmIuYyw4KSksQj1KRChmdShlLGUuYi0yKSw4KSx0PW5ldyBEZGQoRVBjKHAuaikpLHQuYSo9NSx0LmIqPTUsdT1CZGQobmV3IEVkZChCLmEsQi5iKSxBKSxDPW5ldyBFZGQoYjFiKHQuYSx1LmEpLGIxYih0LmIsdS5iKSksbWRkKEMsQSksZHUoZSxlLmItMSxDKSx1bmRlZmluZWQpO249bmV3IHpPYyhlKTt4ZShoLmEsdk9jKG4pKX0KZnVuY3Rpb24gSW9kKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSSxKLEssTCxNLE4sTyxQO3Q9SkQobkRkKCghYS5iJiYoYS5iPW5ldyByZWUodjMsYSw0LDcpKSxhLmIpLDApLDg0KTt2PXQubGgoKTt3PXQubWgoKTt1PXQua2goKS8yO3A9dC5qaCgpLzI7aWYoUkQodCwxOTMpKXtzPUpEKHQsMTI0KTt2Kz1veGQocykuaTt2Kz1veGQocykuaX12Kz11O3crPXA7Rj1KRChuRGQoKCFhLmImJihhLmI9bmV3IHJlZSh2MyxhLDQsNykpLGEuYiksMCksODQpO0g9Ri5saCgpO0k9Ri5taCgpO0c9Ri5raCgpLzI7QT1GLmpoKCkvMjtpZihSRChGLDE5Mykpe0Q9SkQoRiwxMjQpO0grPW94ZChEKS5pO0grPW94ZChEKS5pfUgrPUc7SSs9QTtpZigoIWEuYSYmKGEuYT1uZXcgWDBkKHczLGEsNiw2KSksYS5hKS5pPT0wKXtoPShIcGQoKSxqPW5ldyB0dWQsaik7dENkKCghYS5hJiYoYS5hPW5ldyBYMGQodzMsYSw2LDYpKSxhLmEpLGgpfWVsc2UgaWYoKCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSkuaT4xKXtvPW5ldyBMSGQoKCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSkpO3doaWxlKG8uZSE9by5pLmdjKCkpe0JIZChvKX19Zz1KRChuRGQoKCFhLmEmJihhLmE9bmV3IFgwZCh3MyxhLDYsNikpLGEuYSksMCksMTY4KTtxPUg7SD52K3U/KHE9dit1KTpIPHYtdSYmKHE9di11KTtyPUk7ST53K3A/KHI9dytwKTpJPHctcCYmKHI9dy1wKTtxPnYtdSYmcTx2K3UmJnI+dy1wJiZyPHcrcCYmKHE9dit1KTtxdWQoZyxxKTtydWQoZyxyKTtCPXY7dj5IK0c/KEI9SCtHKTp2PEgtRyYmKEI9SC1HKTtDPXc7dz5JK0E/KEM9SStBKTp3PEktQSYmKEM9SS1BKTtCPkgtRyYmQjxIK0cmJkM+SS1BJiZDPEkrQSYmKEM9SStBKTtqdWQoZyxCKTtrdWQoZyxDKTtSR2QoKCFnLmEmJihnLmE9bmV3IHFWZCh1MyxnLDUpKSxnLmEpKTtmPXh2YihiLDUpO3Q9PUYmJisrZjtMPUItcTtPPUMtcjtKPSR3bmQuTWF0aC5zcXJ0KEwqTCtPKk8pO2w9SiowLjIwMDAwMDAwMjk4MDIzMjI0O009TC8oZisxKTtQPU8vKGYrMSk7Sz1xO049cjtmb3Ioaz0wO2s8ZjtrKyspe0srPU07Tis9UDttPUsreXZiKGIsMjQpKmh0ZSpsLWwvMjttPDA/KG09MSk6bT5jJiYobT1jLTEpO249Tit5dmIoYiwyNCkqaHRlKmwtbC8yO248MD8obj0xKTpuPmQmJihuPWQtMSk7ZT0oSHBkKCksaT1uZXcgQnNkLGkpO3pzZChlLG0pO0FzZChlLG4pO3RDZCgoIWcuYSYmKGcuYT1uZXcgcVZkKHUzLGcsNSkpLGcuYSksZSl9fQpmdW5jdGlvbiByaWIoYSxiKXtvaWIoKTt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSDtCPWEuZTtvPWEuZDtlPWEuYTtpZihCPT0wKXtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAnMCc7Y2FzZSAxOnJldHVybiBWc2U7Y2FzZSAyOnJldHVybiAnMC4wMCc7Y2FzZSAzOnJldHVybiAnMC4wMDAnO2Nhc2UgNDpyZXR1cm4gJzAuMDAwMCc7Y2FzZSA1OnJldHVybiAnMC4wMDAwMCc7Y2FzZSA2OnJldHVybiAnMC4wMDAwMDAnO2RlZmF1bHQ6dz1uZXcgVWdiO2I8MD8ody5hKz0nMEUrJyx3KToody5hKz0nMEUnLHcpO3cuYSs9LWI7cmV0dXJuIHcuYTt9fXQ9byoxMCsxKzc7dT1TQyhfRCxVcmUsMzAsdCsxLDE1LDEpO2M9dDtpZihvPT0xKXtoPWVbMF07aWYoaDwwKXtIPXVjYihoLFVzZSk7ZG97cD1IO0g9eGNiKEgsMTApO3VbLS1jXT00OCtQY2IoTWNiKHAsRmNiKEgsMTApKSkmV3JlfXdoaWxlKHZjYihILDApIT0wKX1lbHNle0g9aDtkb3twPUg7SD1ILzEwfDA7dVstLWNdPTQ4KyhwLUgqMTApJldyZX13aGlsZShIIT0wKX19ZWxzZXtEPVNDKGNFLGlzZSwzMCxvLDE1LDEpO0c9bzskZ2IoZSwwLEQsMCxHKTtJOndoaWxlKHRydWUpe0E9MDtmb3Ioaj1HLTE7aj49MDtqLS0pe0Y9dGNiKEpjYihBLDMyKSx1Y2IoRFtqXSxVc2UpKTtyPXBpYihGKTtEW2pdPVBjYihyKTtBPVBjYihLY2IociwzMikpfXM9UGNiKEEpO3E9Yztkb3t1Wy0tY109NDgrcyUxMCZXcmV9d2hpbGUoKHM9cy8xMHwwKSE9MCYmYyE9MCk7ZD05LXErYztmb3IoaT0wO2k8ZCYmYz4wO2krKyl7dVstLWNdPTQ4fWw9Ry0xO2Zvcig7RFtsXT09MDtsLS0pe2lmKGw9PTApe2JyZWFrIEl9fUc9bCsxfXdoaWxlKHVbY109PTQ4KXsrK2N9fW49QjwwO2c9dC1jLWItMTtpZihiPT0wKXtuJiYodVstLWNdPTQ1KTtyZXR1cm4gemdiKHUsYyx0LWMpfWlmKGI+MCYmZz49LTYpe2lmKGc+PTApe2s9YytnO2ZvcihtPXQtMTttPj1rO20tLSl7dVttKzFdPXVbbV19dVsrK2tdPTQ2O24mJih1Wy0tY109NDUpO3JldHVybiB6Z2IodSxjLHQtYysxKX1mb3IobD0yO2w8LWcrMTtsKyspe3VbLS1jXT00OH11Wy0tY109NDY7dVstLWNdPTQ4O24mJih1Wy0tY109NDUpO3JldHVybiB6Z2IodSxjLHQtYyl9Qz1jKzE7Zj10O3Y9bmV3IFZnYjtuJiYodi5hKz0nLScsdik7aWYoZi1DPj0xKXtLZ2Iodix1W2NdKTt2LmErPScuJzt2LmErPXpnYih1LGMrMSx0LWMtMSl9ZWxzZXt2LmErPXpnYih1LGMsdC1jKX12LmErPSdFJztnPjAmJih2LmErPScrJyx2KTt2LmErPScnK2c7cmV0dXJuIHYuYX0KZnVuY3Rpb24gWjRjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3O2EuYz1iO2EuZz1uZXcgSXJiO2M9KFJvZCgpLG5ldyBkcGQoYS5jKSk7ZD1uZXcgJEdiKGMpO1dHYihkKTt0PU9EKGtzZChhLmMsKEQ2YygpLHc2YykpKTtpPUpEKGtzZChhLmMseTZjKSwzMjUpO3Y9SkQoa3NkKGEuYyx6NmMpLDQyNCk7Zz1KRChrc2QoYS5jLHI2YyksNDc1KTt1PUpEKGtzZChhLmMseDZjKSw0MjUpO2Euaj1CZWIoTUQoa3NkKGEuYyxBNmMpKSk7aD1hLmE7c3dpdGNoKGkuZyl7Y2FzZSAwOmg9YS5hO2JyZWFrO2Nhc2UgMTpoPWEuYjticmVhaztjYXNlIDI6aD1hLmk7YnJlYWs7Y2FzZSAzOmg9YS5lO2JyZWFrO2Nhc2UgNDpoPWEuZjticmVhaztkZWZhdWx0OnRocm93IHNjYihuZXcgVGViKGJCZSsoaS5mIT1udWxsP2kuZjonJytpLmcpKSk7fWEuZD1uZXcgRzVjKGgsdixnKTtaTWIoYS5kLChZTGIoKSxXTGIpLExEKGtzZChhLmMsdDZjKSkpO2EuZC5jPXlkYihMRChrc2QoYS5jLHM2YykpKTtpZihYd2QoYS5jKS5pPT0wKXtyZXR1cm4gYS5kfWZvcihsPW5ldyBDSGQoWHdkKGEuYykpO2wuZSE9bC5pLmdjKCk7KXtrPUpEKEFIZChsKSwyNyk7bj1rLmcvMjttPWsuZi8yO3c9bmV3IEVkZChrLmkrbixrLmorbSk7d2hpbGUoTGliKGEuZyx3KSl7bGRkKHcsKCR3bmQuTWF0aC5yYW5kb20oKS0wLjUpKkZ1ZSwoJHduZC5NYXRoLnJhbmRvbSgpLTAuNSkqRnVlKX1wPUpEKGtzZChrLChMZ2QoKSx2ZmQpKSwxMzkpO3E9bmV3IGJNYih3LG5ldyBnZGQody5hLW4tYS5qLzItcC5iLHcuYi1tLWEuai8yLXAuZCxrLmcrYS5qKyhwLmIrcC5jKSxrLmYrYS5qKyhwLmQrcC5hKSkpO0lsYihhLmQuaSxxKTtRaWIoYS5nLHcsbmV3IHhvZChxLGspKX1zd2l0Y2godS5nKXtjYXNlIDA6aWYodD09bnVsbCl7YS5kLmQ9SkQoTWxiKGEuZC5pLDApLDY4KX1lbHNle2ZvcihzPW5ldyBybWIoYS5kLmkpO3MuYTxzLmMuYy5sZW5ndGg7KXtxPUpEKHBtYihzKSw2OCk7bz1KRChKRChOaWIoYS5nLHEuYSksNDcpLmIsMjcpLmhoKCk7byE9bnVsbCYmY2diKG8sdCkmJihhLmQuZD1xKX19YnJlYWs7Y2FzZSAxOmU9bmV3IEVkZChhLmMuZyxhLmMuZik7ZS5hKj0wLjU7ZS5iKj0wLjU7bGRkKGUsYS5jLmksYS5jLmopO2Y9S3NlO2ZvcihyPW5ldyBybWIoYS5kLmkpO3IuYTxyLmMuYy5sZW5ndGg7KXtxPUpEKHBtYihyKSw2OCk7aj1wZGQocS5hLGUpO2lmKGo8Zil7Zj1qO2EuZC5kPXF9fWJyZWFrO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoYkJlKyh1LmYhPW51bGw/dS5mOicnK3UuZykpKTt9cmV0dXJuIGEuZH0KZnVuY3Rpb24gbDJjKGEpe1JhZChhLG5ldyBjYWQobmFkKGthZChtYWQobGFkKG5ldyBwYWQsWEFlKSwnRUxLIFJlY3RhbmdsZSBQYWNraW5nJyksJ0FsZ29yaXRobSBmb3IgcGFja2luZyBvZiB1bmNvbm5lY3RlZCBib3hlcywgaS5lLiBncmFwaHMgd2l0aG91dCBlZGdlcy4gVGhlIGdpdmVuIG9yZGVyIG9mIHRoZSBib3hlcyBpcyBhbHdheXMgcHJlc2VydmVkIGFuZCB0aGUgbWFpbiByZWFkaW5nIGRpcmVjdGlvbiBvZiB0aGUgYm94ZXMgaXMgbGVmdCB0byByaWdodC4gVGhlIGFsZ29yaXRobSBpcyBkaXZpZGVkIGludG8gdHdvIHBoYXNlcy4gT25lIHBoYXNlIGFwcHJveGltYXRlcyB0aGUgd2lkdGggaW4gd2hpY2ggdGhlIHJlY3RhbmdsZXMgY2FuIGJlIHBsYWNlZC4gVGhlIG5leHQgcGhhc2UgcGxhY2VzIHRoZSByZWN0YW5nbGVzIGluIHJvd3MgdXNpbmcgdGhlIHByZXZpb3VzbHkgY2FsY3VsYXRlZCB3aWR0aCBhcyBib3VuZGluZyB3aWR0aCBhbmQgYnVuZGxlcyByZWN0YW5nbGVzIHdpdGggYSBzaW1pbGFyIGhlaWdodCBpbiBibG9ja3MuIEEgY29tcGFjdGlvbiBzdGVwIHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlIGRyYXdpbmcuIEZpbmFsbHksIHRoZSByZWN0YW5nbGVzIGFyZSBleHBhbmRlZCB0byBmaWxsIHRoZWlyIGJvdW5kaW5nIGJveCBhbmQgZWxpbWluYXRlIGVtcHR5IHVudXNlZCBzcGFjZXMuJyksbmV3IG8yYykpKTtQYWQoYSxYQWUsT3VlLDEuMyk7UGFkKGEsWEFlLFd1ZSwoeGRiKCksZmFsc2UpKTtQYWQoYSxYQWUsUnVlLGIyYyk7UGFkKGEsWEFlLE11ZSwxNSk7UGFkKGEsWEFlLFF5ZSxKQmQoTTFjKSk7UGFkKGEsWEFlLFl1ZSxKQmQoVDFjKSk7UGFkKGEsWEFlLHB2ZSxKQmQoVjFjKSk7UGFkKGEsWEFlLFh1ZSxKQmQoVzFjKSk7UGFkKGEsWEFlLFp1ZSxKQmQoUzFjKSk7UGFkKGEsWEFlLFZ1ZSxKQmQoWDFjKSk7UGFkKGEsWEFlLCR1ZSxKQmQoYzJjKSk7UGFkKGEsWEFlLE9BZSxKQmQoaDJjKSk7UGFkKGEsWEFlLFBBZSxKQmQoZzJjKSk7UGFkKGEsWEFlLE5BZSxKQmQoajJjKSk7UGFkKGEsWEFlLE1BZSxKQmQoaTJjKSk7UGFkKGEsWEFlLFFBZSxKQmQoXzFjKSk7UGFkKGEsWEFlLFJBZSxKQmQoJDFjKSk7UGFkKGEsWEFlLFNBZSxKQmQoWjFjKSk7UGFkKGEsWEFlLFRBZSxKQmQoZjJjKSk7UGFkKGEsWEFlLFN1ZSxKQmQoUDFjKSk7UGFkKGEsWEFlLGJ6ZSxKQmQoUTFjKSk7UGFkKGEsWEFlLEpBZSxKQmQoTzFjKSk7UGFkKGEsWEFlLElBZSxKQmQoTjFjKSk7UGFkKGEsWEFlLEtBZSxKQmQoUjFjKSk7UGFkKGEsWEFlLEhBZSxKQmQoZTJjKSk7UGFkKGEsWEFlLExBZSxKQmQoWTFjKSl9CmZ1bmN0aW9uIFZ6YyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRyxILEksSixLLEw7Yy5TZygnR3JlZWR5IGN5Y2xlIHJlbW92YWwnLDEpO3Q9Yi5hO0w9dC5jLmxlbmd0aDthLmE9U0MoY0UsaXNlLDMwLEwsMTUsMSk7YS5jPVNDKGNFLGlzZSwzMCxMLDE1LDEpO2EuYj1TQyhjRSxpc2UsMzAsTCwxNSwxKTtqPTA7Zm9yKHI9bmV3IHJtYih0KTtyLmE8ci5jLmMubGVuZ3RoOyl7cD1KRChwbWIociksOSk7cC5wPWo7Zm9yKEM9bmV3IHJtYihwLmopO0MuYTxDLmMuYy5sZW5ndGg7KXt3PUpEKHBtYihDKSwxMSk7Zm9yKGg9bmV3IHJtYih3LmUpO2guYTxoLmMuYy5sZW5ndGg7KXtkPUpEKHBtYihoKSwxOCk7aWYoZC5jLmk9PXApe2NvbnRpbnVlfUc9SkQoV01iKGQsKEJ3YygpLE52YykpLDE3KS5hO2EuYVtqXSs9Rz4wP0crMToxfWZvcihnPW5ldyBybWIody5nKTtnLmE8Zy5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZyksMTgpO2lmKGQuZC5pPT1wKXtjb250aW51ZX1HPUpEKFdNYihkLChCd2MoKSxOdmMpKSwxNykuYTthLmNbal0rPUc+MD9HKzE6MX19YS5jW2pdPT0wP0F0YihhLmUscCk6YS5hW2pdPT0wJiZBdGIoYS5mLHApOysran1vPS0xO249MTtsPW5ldyBVbGI7YS5kPUpEKFdNYihiLChJcWMoKSx2cWMpKSwyMzMpO3doaWxlKEw+MCl7d2hpbGUoYS5lLmIhPTApe0k9SkQoSXRiKGEuZSksOSk7YS5iW0kucF09by0tO1d6YyhhLEkpOy0tTH13aGlsZShhLmYuYiE9MCl7Sj1KRChJdGIoYS5mKSw5KTthLmJbSi5wXT1uKys7V3pjKGEsSik7LS1MfWlmKEw+MCl7bT1McmU7Zm9yKHM9bmV3IHJtYih0KTtzLmE8cy5jLmMubGVuZ3RoOyl7cD1KRChwbWIocyksOSk7aWYoYS5iW3AucF09PTApe3U9YS5jW3AucF0tYS5hW3AucF07aWYodT49bSl7aWYodT5tKXtsLmMubGVuZ3RoPTA7bT11fVlDYihsLmMscCl9fX1rPWEucWcobCk7YS5iW2sucF09bisrO1d6YyhhLGspOy0tTH19SD10LmMubGVuZ3RoKzE7Zm9yKGo9MDtqPHQuYy5sZW5ndGg7aisrKXthLmJbal08MCYmKGEuYltqXSs9SCl9Zm9yKHE9bmV3IHJtYih0KTtxLmE8cS5jLmMubGVuZ3RoOyl7cD1KRChwbWIocSksOSk7Rj1FWGIocC5qKTtmb3IoQT1GLEI9MCxEPUEubGVuZ3RoO0I8RDsrK0Ipe3c9QVtCXTt2PUNYYih3LmcpO2ZvcihlPXYsZj0wLGk9ZS5sZW5ndGg7ZjxpOysrZil7ZD1lW2ZdO0s9ZC5kLmkucDtpZihhLmJbcC5wXT5hLmJbS10pe2ZXYihkLHRydWUpO1pNYihiLE1wYywoeGRiKCksdHJ1ZSkpfX19fWEuYT1udWxsO2EuYz1udWxsO2EuYj1udWxsO0x0YihhLmYpO0x0YihhLmUpO2MuVGcoKX0KZnVuY3Rpb24gbiRiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxO209MDtmb3IoZT1uZXcgQ0hkKCghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSkpO2UuZSE9ZS5pLmdjKCk7KXtkPUpEKEFIZChlKSwyNyk7aWYoIXlkYihMRChrc2QoZCwoQndjKCksc3ZjKSkpKSl7az1ad2QoZCk7aWYoKFhEKGtzZChrLGN1YykpIT09WEQoKG55YygpLGt5YykpfHxYRChrc2QoayxwdWMpKT09PVhEKCh6bmMoKSx5bmMpKXx8WEQoa3NkKGsscHVjKSk9PT1YRCgoem5jKCksd25jKSl8fHlkYihMRChrc2QoayxldWMpKSl8fFhEKGtzZChrLFl0YykpIT09WEQoKGNVYigpLGJVYikpfHxYRChrc2QoayxadWMpKT09PVhEKChkeWMoKSxXeGMpKXx8WEQoa3NkKGssWnVjKSk9PT1YRCgoZHljKCksWHhjKSl8fFhEKGtzZChrLCR1YykpPT09WEQoKGN4YygpLFZ3YykpfHxYRChrc2QoaywkdWMpKT09PVhEKChjeGMoKSxYd2MpKSkmJiF5ZGIoTEQoa3NkKGQsYXVjKSkpKXttc2QoZCwoSXFjKCksanFjKSxqZmIobSkpOysrbX11JGIoYSxkLGMpfX1tPTA7Zm9yKGo9bmV3IENIZCgoIWIuYiYmKGIuYj1uZXcgWDBkKHgzLGIsMTIsMykpLGIuYikpO2ouZSE9ai5pLmdjKCk7KXtoPUpEKEFIZChqKSw4NSk7aWYoWEQoa3NkKGIsKEJ3YygpLGN1YykpKSE9PVhEKChueWMoKSxreWMpKXx8WEQoa3NkKGIscHVjKSk9PT1YRCgoem5jKCkseW5jKSl8fFhEKGtzZChiLHB1YykpPT09WEQoKHpuYygpLHduYykpfHx5ZGIoTEQoa3NkKGIsZXVjKSkpfHxYRChrc2QoYixZdGMpKSE9PVhEKChjVWIoKSxiVWIpKXx8WEQoa3NkKGIsWnVjKSk9PT1YRCgoZHljKCksV3hjKSl8fFhEKGtzZChiLFp1YykpPT09WEQoKGR5YygpLFh4YykpfHxYRChrc2QoYiwkdWMpKT09PVhEKChjeGMoKSxWd2MpKXx8WEQoa3NkKGIsJHVjKSk9PT1YRCgoY3hjKCksWHdjKSkpe21zZChoLChJcWMoKSxqcWMpLGpmYihtKSk7KyttfXA9aUNkKGgpO3E9akNkKGgpO2w9eWRiKExEKGtzZChwLE51YykpKTtvPSF5ZGIoTEQoa3NkKGgsc3ZjKSkpO249bCYmU3RkKGgpJiZ5ZGIoTEQoa3NkKGgsT3VjKSkpO2Y9WndkKHApPT1iJiZad2QocCk9PVp3ZChxKTtnPShad2QocCk9PWImJnE9PWIpXihad2QocSk9PWImJnA9PWIpO28mJiFuJiYoZ3x8ZikmJnIkYihhLGgsYixjKX1pZihad2QoYikpe2ZvcihpPW5ldyBDSGQoWXdkKFp3ZChiKSkpO2kuZSE9aS5pLmdjKCk7KXtoPUpEKEFIZChpKSw4NSk7cD1pQ2QoaCk7aWYocD09YiYmU3RkKGgpKXtuPXlkYihMRChrc2QocCwoQndjKCksTnVjKSkpKSYmeWRiKExEKGtzZChoLE91YykpKTtuJiZyJGIoYSxoLGIsYyl9fX19CmZ1bmN0aW9uIGNuZChhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdzt2PUpEKG5EZCgoIWEuYSYmKGEuYT1uZXcgWDBkKHczLGEsNiw2KSksYS5hKSwwKSwxNjgpO2s9bmV3IFJkZDt1PW5ldyBJcmI7dz1mbmQodik7Z3NiKHUuZix2LHcpO209bmV3IElyYjtkPW5ldyBNdGI7Zm9yKG89RGwoeWwoV0MoT0MoVkksMSksTnFlLDIwLDAsWyghYi5kJiYoYi5kPW5ldyByZWUoeDMsYiw4LDUpKSxiLmQpLCghYi5lJiYoYi5lPW5ldyByZWUoeDMsYiw3LDQpKSxiLmUpXSkpKTtjcyhvKTspe249SkQoZHMobyksODUpO2lmKCghYS5hJiYoYS5hPW5ldyBYMGQodzMsYSw2LDYpKSxhLmEpLmkhPTEpe3Rocm93IHNjYihuZXcgVGViKHVDZSsoIWEuYSYmKGEuYT1uZXcgWDBkKHczLGEsNiw2KSksYS5hKS5pKSl9aWYobiE9YSl7cT1KRChuRGQoKCFuLmEmJihuLmE9bmV3IFgwZCh3MyxuLDYsNikpLG4uYSksMCksMTY4KTtEdGIoZCxxLGQuYy5iLGQuYyk7cD1KRChXZChmc2IodS5mLHEpKSwxMyk7aWYoIXApe3A9Zm5kKHEpO2dzYih1LmYscSxwKX1sPWM/QmRkKG5ldyBGZGQoSkQoTWxiKHcsdy5jLmxlbmd0aC0xKSw4KSksSkQoTWxiKHAscC5jLmxlbmd0aC0xKSw4KSk6QmRkKG5ldyBGZGQoKHNEYigwLHcuYy5sZW5ndGgpLEpEKHcuY1swXSw4KSkpLChzRGIoMCxwLmMubGVuZ3RoKSxKRChwLmNbMF0sOCkpKTtnc2IobS5mLHEsbCl9fWlmKGQuYiE9MCl7cj1KRChNbGIodyxjP3cuYy5sZW5ndGgtMTowKSw4KTtmb3Ioaj0xO2o8dy5jLmxlbmd0aDtqKyspe3M9SkQoTWxiKHcsYz93LmMubGVuZ3RoLTEtajpqKSw4KTtlPUd0YihkLDApO3doaWxlKGUuYiE9ZS5kLmMpe3E9SkQoVXRiKGUpLDE2OCk7cD1KRChXZChmc2IodS5mLHEpKSwxMyk7aWYocC5jLmxlbmd0aDw9ail7V3RiKGUpfWVsc2V7dD1tZGQobmV3IEZkZChKRChNbGIocCxjP3AuYy5sZW5ndGgtMS1qOmopLDgpKSxKRChXZChmc2IobS5mLHEpKSw4KSk7aWYocy5hIT10LmF8fHMuYiE9dC5iKXtmPXMuYS1yLmE7aD1zLmItci5iO2c9dC5hLXIuYTtpPXQuYi1yLmI7ZypoPT1pKmYmJihmPT0wfHxpc05hTihmKT9mOmY8MD8tMToxKT09KGc9PTB8fGlzTmFOKGcpP2c6ZzwwPy0xOjEpJiYoaD09MHx8aXNOYU4oaCk/aDpoPDA/LTE6MSk9PShpPT0wfHxpc05hTihpKT9pOmk8MD8tMToxKT8oJHduZC5NYXRoLmFicyhmKTwkd25kLk1hdGguYWJzKGcpfHwkd25kLk1hdGguYWJzKGgpPCR3bmQuTWF0aC5hYnMoaSkpJiYoRHRiKGsscyxrLmMuYixrLmMpLHRydWUpOmo+MSYmKER0YihrLHIsay5jLmIsay5jKSx0cnVlKTtXdGIoZSl9fX1yPXN9fXJldHVybiBrfQpmdW5jdGlvbiBWVmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRDtjLlNnKFd6ZSwxKTtEPUpEKHlCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYiwxNikpLG5ldyBoV2MpLGhBYihuZXcgekFiLG5ldyB4QWIsbmV3IEZBYixXQyhPQyhITCwxKSxFcmUsMTMxLDAsWyhsQWIoKSxqQWIpXSkpKSwxNSk7az1KRCh5QmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIsMTYpKSxuZXcgaldjKGIpKSxoQWIobmV3IHpBYixuZXcgeEFiLG5ldyBGQWIsV0MoT0MoSEwsMSksRXJlLDEzMSwwLFtqQWJdKSkpLDE1KTtvPUpEKHlCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYiwxNikpLG5ldyBsV2MoYikpLGhBYihuZXcgekFiLG5ldyB4QWIsbmV3IEZBYixXQyhPQyhITCwxKSxFcmUsMTMxLDAsW2pBYl0pKSksMTUpO3A9U0MoTlosSXplLDM5LGIuZ2MoKSwwLDEpO2ZvcihnPTA7ZzxrLmdjKCk7ZysrKXtlPUpEKGsuWGIoZyksMzkpO0M9SkQoV01iKGUsKGtWYygpLFpVYykpLDE3KS5hO2lmKEM+PTAmJkM8ay5nYygpJiYhcFtDXSl7cFtDXT1lO2suZWQoZyk7LS1nfX1mb3IoaD0wO2g8ay5nYygpO2grKyl7ZT1KRChrLlhiKGgpLDM5KTtDPUpEKFdNYihlLChrVmMoKSxaVWMpKSwxNykuYTtmb3IobT0wOzttKyspe249QyttO2lmKG48cC5sZW5ndGgmJm4+PTAmJiFwW25dKXtwW25dPWU7ay5lZChoKTstLWg7YnJlYWt9bj1DLW07aWYobjxwLmxlbmd0aCYmbj49MCYmIXBbbl0pe3Bbbl09ZTtrLmVkKGgpOy0taDticmVha319fW8uZ2QobmV3IG5XYyk7Zm9yKGk9cC5sZW5ndGgtMTtpPj0wO2ktLSl7aWYoIXBbaV0mJiFvLmRjKCkpe3BbaV09SkQoby5YYigwKSwzOSk7by5lZCgwKX19Zm9yKGo9MDtqPHAubGVuZ3RoO2orKyl7aWYoIXBbal0mJiFELmRjKCkpe3Bbal09SkQoRC5YYigwKSwzOSk7RC5lZCgwKX19Zm9yKGY9MDtmPHAubGVuZ3RoO2YrKyl7Wk1iKHBbZl0sKHRVYygpLGxVYyksamZiKGYpKX1sPUpEKFFCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYiwxNikpLG5ldyByV2MpLG5ldyBkV2MpLDUxOSk7Zm9yKHc9bCxBPTAsQj13Lmxlbmd0aDtBPEI7KytBKXt2PXdbQV07ZD1iUmModik7VlZjKGEsZCxjLmJoKDEvbC5sZW5ndGh8MCkpO3BuYigpO2h1YihkLG5ldyBWQmQoKHRVYygpLGxVYykpKTtxPW5ldyBNdGI7Zm9yKHU9R3RiKGQsMCk7dS5iIT11LmQuYzspe3Q9SkQoVXRiKHUpLDM5KTtmb3Iocz1HdGIodi5kLDApO3MuYiE9cy5kLmM7KXtyPUpEKFV0YihzKSw2NSk7ci5jPT10JiYoRHRiKHEscixxLmMuYixxLmMpLHRydWUpfX1MdGIodi5kKTt4ZSh2LmQscSl9Yy5UZygpfQpmdW5jdGlvbiBBM2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdTt0PUJlYihNRChrc2QoYiwoaDFjKCksZzFjKSkpKTtuPUJlYihNRChrc2QoYixlMWMpKSk7bT1CZWIoTUQoa3NkKGIsYjFjKSkpO1I0YygoIWIuYSYmKGIuYT1uZXcgWDBkKEEzLGIsMTAsMTEpKSxiLmEpKTtyPWgzYygoIWIuYSYmKGIuYT1uZXcgWDBkKEEzLGIsMTAsMTEpKSxiLmEpLHQsYS5iKTtmb3IocT0wO3E8ci5jLmxlbmd0aDtxKyspe2k9KHNEYihxLHIuYy5sZW5ndGgpLEpEKHIuY1txXSwxODYpKTtpZihxIT0wKXtvPShzRGIocS0xLHIuYy5sZW5ndGgpLEpEKHIuY1txLTFdLDE4NikpO1c0YyhpLG8uZitvLmIrYS5iKX1wPVkyYyhxLHIsdCxhLmIseWRiKExEKGtzZChiLChrMmMoKSwkMWMpKSkpKTtpZih5ZGIoTEQocC5iKSkpe2ZvcihmPW5ldyBybWIoaS5hKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMTcyKTtlLmM9ZmFsc2U7ZS5rPWZhbHNlO2I0YyhlKX1pLmQ9bmV3IFVsYjtpLmU9dDstLXF9ZWxzZXt6M2MoYSxpKTtpZihxKzE8ci5jLmxlbmd0aCl7YS5lPSR3bmQuTWF0aC5tYXgoaS5lK2EuYitKRChNbGIoKHNEYihxKzEsci5jLmxlbmd0aCksSkQoci5jW3ErMV0sMTg2KSkuYSwwKSwxNzIpLnItdCxhLmMpO2EuZj0kd25kLk1hdGgubWluKGkuZSthLmIrSkQoTWxiKChzRGIocSsxLHIuYy5sZW5ndGgpLEpEKHIuY1txKzFdLDE4NikpLmEsMCksMTcyKS5yLXQsYS5kKTtpZihpLmQuYy5sZW5ndGghPTApe2EuYz0kd25kLk1hdGgubWF4KGEuYyxKRChNbGIoaS5kLGkuZC5jLmxlbmd0aC0xKSwzMTYpLmQrKGkuZC5jLmxlbmd0aDw9MT8wOmEuYikpO2EuZD0kd25kLk1hdGgubWluKGEuYyxKRChNbGIoaS5kLGkuZC5jLmxlbmd0aC0xKSwzMTYpLmQrKGkuZC5jLmxlbmd0aDw9MT8wOmEuYikpfX1pZihyLmMubGVuZ3RoPT0xKXtsPUpEKE1sYihpLmQsaS5kLmMubGVuZ3RoLTEpLDMxNik7az1KRChNbGIobC5hLGwuYS5jLmxlbmd0aC0xKSwxNzIpO2ZvcihoPW5ldyBybWIoay5uKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMjA4KTthLmM9JHduZC5NYXRoLm1heChhLmMsay5yLWcuZCk7YS5kPSR3bmQuTWF0aC5taW4oYS5kLGsuci1nLmQpO2EuZT0kd25kLk1hdGgubWF4KGEuZSxnLmQrYS5iKTthLmY9JHduZC5NYXRoLm1pbihhLmYsZy5kK2EuYil9fX19cz1QNGMocixhLmIpO3U9JHduZC5NYXRoLm1heChzLmEsbi0oYy5iK2MuYykpO2o9JHduZC5NYXRoLm1heChzLmIsbS0oYy5kK2MuYSkpO2Q9ai1zLmI7bXNkKGIsWTBjLGQpO21zZChiLGYxYyxyKTtyZXR1cm4gbmV3IEI0YyhhLmEsdSxzLmIrZCwoSTRjKCksSDRjKSl9CmZ1bmN0aW9uIHEyYihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRztBPUpEKFdNYihhLChCd2MoKSxFdmMpKSwxMDApO2lmKCEoQSE9KGFqZCgpLCRpZCkmJkEhPV9pZCkpe3JldHVybn1vPWEuYjtuPW8uYy5sZW5ndGg7az1uZXcgVmxiKChiayhuKzIsR3JlKSxYeSh0Y2IodGNiKDUsbisyKSwobisyKS8xMHwwKSkpKTtwPW5ldyBWbGIoKGJrKG4rMixHcmUpLFh5KHRjYih0Y2IoNSxuKzIpLChuKzIpLzEwfDApKSkpO0lsYihrLG5ldyBJcmIpO0lsYihrLG5ldyBJcmIpO0lsYihwLG5ldyBVbGIpO0lsYihwLG5ldyBVbGIpO3c9bmV3IFVsYjtmb3IoYj0wO2I8bjtiKyspe2M9KHNEYihiLG8uYy5sZW5ndGgpLEpEKG8uY1tiXSwyNSkpO0I9KHNEYihiLGsuYy5sZW5ndGgpLEpEKGsuY1tiXSw5MSkpO3E9bmV3IElyYjtZQ2Ioay5jLHEpO0Q9KHNEYihiLHAuYy5sZW5ndGgpLEpEKHAuY1tiXSwxNSkpO3M9bmV3IFVsYjtZQ2IocC5jLHMpO2ZvcihlPW5ldyBybWIoYy5hKTtlLmE8ZS5jLmMubGVuZ3RoOyl7ZD1KRChwbWIoZSksOSk7aWYobTJiKGQpKXtZQ2Iody5jLGQpO2NvbnRpbnVlfWZvcihqPW5ldyBlcyhJcihoWWIoZCkuYS5KYygpLG5ldyBlcikpO2NzKGopOyl7aD1KRChkcyhqKSwxOCk7Rj1oLmMuaTtpZighbTJiKEYpKXtjb250aW51ZX1DPUpEKEIueGMoV01iKEYsKElxYygpLGtxYykpKSw5KTtpZighQyl7Qz1sMmIoYSxGKTtCLnljKFdNYihGLGtxYyksQyk7RC5FYyhDKX1nV2IoaCxKRChNbGIoQy5qLDEpLDExKSl9Zm9yKGk9bmV3IGVzKElyKGtZYihkKS5hLkpjKCksbmV3IGVyKSk7Y3MoaSk7KXtoPUpEKGRzKGkpLDE4KTtHPWguZC5pO2lmKCFtMmIoRykpe2NvbnRpbnVlfXI9SkQoTmliKHEsV01iKEcsKElxYygpLGtxYykpKSw5KTtpZighcil7cj1sMmIoYSxHKTtRaWIocSxXTWIoRyxrcWMpLHIpO1lDYihzLmMscil9aFdiKGgsSkQoTWxiKHIuaiwwKSwxMSkpfX19Zm9yKGw9MDtsPHAuYy5sZW5ndGg7bCsrKXt0PShzRGIobCxwLmMubGVuZ3RoKSxKRChwLmNbbF0sMTUpKTtpZih0LmRjKCkpe2NvbnRpbnVlfW09bnVsbDtpZihsPT0wKXttPW5ldyBiJGIoYSk7dkRiKDAsby5jLmxlbmd0aCk7V0NiKG8uYywwLG0pfWVsc2UgaWYobD09ay5jLmxlbmd0aC0xKXttPW5ldyBiJGIoYSk7WUNiKG8uYyxtKX1lbHNle209KHNEYihsLTEsby5jLmxlbmd0aCksSkQoby5jW2wtMV0sMjUpKX1mb3IoZz10LkpjKCk7Zy5PYigpOyl7Zj1KRChnLlBiKCksOSk7cVliKGYsbSl9fWZvcih2PW5ldyBybWIodyk7di5hPHYuYy5jLmxlbmd0aDspe3U9SkQocG1iKHYpLDkpO3FZYih1LG51bGwpfVpNYihhLChJcWMoKSxScGMpLHcpfQpmdW5jdGlvbiBWSGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSCxJLEosSztJPW5ldyBVbGI7Zm9yKG89bmV3IHJtYihiLmIpO28uYTxvLmMuYy5sZW5ndGg7KXttPUpEKHBtYihvKSwyNSk7Zm9yKHY9bmV3IHJtYihtLmEpO3YuYTx2LmMuYy5sZW5ndGg7KXt1PUpEKHBtYih2KSw5KTt1LnA9LTE7bD1McmU7Qj1McmU7Zm9yKEQ9bmV3IHJtYih1LmopO0QuYTxELmMuYy5sZW5ndGg7KXtDPUpEKHBtYihEKSwxMSk7Zm9yKGU9bmV3IHJtYihDLmUpO2UuYTxlLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihlKSwxOCk7Rj1KRChXTWIoYywoQndjKCksUHZjKSksMTcpLmE7bD0kd25kLk1hdGgubWF4KGwsRil9Zm9yKGQ9bmV3IHJtYihDLmcpO2QuYTxkLmMuYy5sZW5ndGg7KXtjPUpEKHBtYihkKSwxOCk7Rj1KRChXTWIoYywoQndjKCksUHZjKSksMTcpLmE7Qj0kd25kLk1hdGgubWF4KEIsRil9fVpNYih1LEtIYyxqZmIobCkpO1pNYih1LExIYyxqZmIoQikpfX1yPTA7Zm9yKG49bmV3IHJtYihiLmIpO24uYTxuLmMuYy5sZW5ndGg7KXttPUpEKHBtYihuKSwyNSk7Zm9yKHY9bmV3IHJtYihtLmEpO3YuYTx2LmMuYy5sZW5ndGg7KXt1PUpEKHBtYih2KSw5KTtpZih1LnA8MCl7SD1uZXcgYUljO0guYj1yKys7UkhjKGEsdSxIKTtZQ2IoSS5jLEgpfX19QT1hdihJLmMubGVuZ3RoKTtrPWF2KEkuYy5sZW5ndGgpO2ZvcihnPTA7ZzxJLmMubGVuZ3RoO2crKyl7SWxiKEEsbmV3IFVsYik7SWxiKGssamZiKDApKX1QSGMoYixJLEEsayk7Sj1KRChUbGIoSSxTQyhHWCxvemUsMjYxLEkuYy5sZW5ndGgsMCwxKSksODMzKTt3PUpEKFRsYihBLFNDKEhLLG51ZSwxNSxBLmMubGVuZ3RoLDAsMSkpLDE5OCk7aj1TQyhjRSxpc2UsMzAsay5jLmxlbmd0aCwxNSwxKTtmb3IoaD0wO2g8ai5sZW5ndGg7aCsrKXtqW2hdPShzRGIoaCxrLmMubGVuZ3RoKSxKRChrLmNbaF0sMTcpKS5hfXM9MDt0PW5ldyBVbGI7Zm9yKGk9MDtpPEoubGVuZ3RoO2krKyl7altpXT09MCYmKFlDYih0LmMsSltpXSksdHJ1ZSl9cT1TQyhjRSxpc2UsMzAsSi5sZW5ndGgsMTUsMSk7d2hpbGUodC5jLmxlbmd0aCE9MCl7SD1KRChPbGIodCwwKSwyNjEpO3FbSC5iXT1zKys7d2hpbGUoIXdbSC5iXS5kYygpKXtLPUpEKHdbSC5iXS5lZCgwKSwyNjEpOy0taltLLmJdO2pbSy5iXT09MCYmKFlDYih0LmMsSyksdHJ1ZSl9fWEuYT1TQyhHWCxvemUsMjYxLEoubGVuZ3RoLDAsMSk7Zm9yKGY9MDtmPEoubGVuZ3RoO2YrKyl7cD1KW2ZdO0c9cVtmXTthLmFbR109cDtwLmI9Rztmb3Iodj1uZXcgcm1iKHAuZSk7di5hPHYuYy5jLmxlbmd0aDspe3U9SkQocG1iKHYpLDkpO3UucD1HfX1yZXR1cm4gYS5hfQpmdW5jdGlvbiBZMmMoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscjtwPWZhbHNlO2k9ZmFsc2U7bT1hKzE7bz0oc0RiKGEsYi5jLmxlbmd0aCksSkQoYi5jW2FdLDE4NikpO2g9by5hO2o9bnVsbDtmb3IoZz0wO2c8by5hLmMubGVuZ3RoO2crKyl7Zj0oc0RiKGcsaC5jLmxlbmd0aCksSkQoaC5jW2ddLDE3MikpO2lmKGYuYyl7Y29udGludWV9aWYoZi5iLmMubGVuZ3RoPT0wKXtaZ2IoKTtTdHJpbmcuZnJvbUNoYXJDb2RlKDEwKTtWNGMobyxmKTstLWc7cD10cnVlO2NvbnRpbnVlfWlmKCFmLmspeyEhaiYmdzRjKGopO2o9bmV3IHg0Yyghaj8wOmouZStqLmQrZCxvLmYsZCk7aTRjKGYsai5lK2ouZCxvLmYpO0lsYihvLmQsaik7cTRjKGosZik7Zi5rPXRydWV9az1udWxsO2s9KHI9bnVsbCxnPG8uYS5jLmxlbmd0aC0xPyhyPUpEKE1sYihvLmEsZysxKSwxNzIpKTptPGIuYy5sZW5ndGgmJihzRGIobSxiLmMubGVuZ3RoKSxKRChiLmNbbV0sMTg2KSkuYS5jLmxlbmd0aCE9MCYmKHI9SkQoTWxiKChzRGIobSxiLmMubGVuZ3RoKSxKRChiLmNbbV0sMTg2KSkuYSwwKSwxNzIpKSxyKTtxPWZhbHNlOyEhayYmKHE9IXBiKGsuaixvKSk7aWYoayl7aWYoay5iLmMubGVuZ3RoIT0wJiYheWRiKExEKEpEKE1sYihrLmIsMCksMjcpLm1mKChrMmMoKSxSMWMpKSkpKXtlNGMoZixjLWYucyk7dzRjKGYucSk7cD1wfFgyYyhvLGYsayxjLGQpfWVsc2V7VjRjKG8sayk7YnJlYWt9aWYoay5iLmMubGVuZ3RoPT0wKXtiLmMubGVuZ3RoPm0mJlY0Yygoc0RiKG0sYi5jLmxlbmd0aCksSkQoYi5jW21dLDE4NikpLGspO2s9bnVsbDt3aGlsZShiLmMubGVuZ3RoPm0mJihzRGIobSxiLmMubGVuZ3RoKSxKRChiLmNbbV0sMTg2KSkuYS5jLmxlbmd0aD09MCl7UGxiKGIsKHNEYihtLGIuYy5sZW5ndGgpLGIuY1ttXSkpfX1pZighayl7LS1nO2NvbnRpbnVlfWlmKCF5ZGIoTEQoSkQoTWxiKGsuYiwwKSwyNykubWYoKGsyYygpLFIxYykpKSkmJloyYyhiLG8sZixrLHEsYyxtLGQpKXtwPXRydWU7Y29udGludWV9aWYocSl7bj1vLmI7bD1rLmY7aWYoIXlkYihMRChKRChNbGIoay5iLDApLDI3KS5tZihSMWMpKSkmJiQyYyhiLG8sZixrLGMsbSxkLGUpKXtwPXRydWU7aWYobjxsKXtpPXRydWU7ay5qPW87YnJlYWt9Y29udGludWV9ZWxzZSBpZihfMmMobyxmKSl7Zi5jPXRydWU7cD10cnVlO2NvbnRpbnVlfX1lbHNlIGlmKF8yYyhvLGYpKXtmLmM9dHJ1ZTtwPXRydWU7Y29udGludWV9aWYocCl7Y29udGludWV9fWlmKF8yYyhvLGYpKXtmLmM9dHJ1ZTtwPXRydWU7ISFrJiYoay5rPWZhbHNlKTtjb250aW51ZX1lbHNle3c0YyhmLnEpfX1yZXR1cm4gbmV3IHhvZCgoeGRiKCkscD90cnVlOmZhbHNlKSxpP3RydWU6ZmFsc2UpfQpmdW5jdGlvbiBmbWUoYSl7dmFyIGIsYyxkO2lmKGEuZD49YS5qKXthLmE9LTE7YS5jPTE7cmV0dXJufWI9X2ZiKGEuaSxhLmQrKyk7YS5hPWI7aWYoYS5iPT0xKXtzd2l0Y2goYil7Y2FzZSA5MjpkPTEwO2lmKGEuZD49YS5qKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksV0RlKSkpKTthLmE9X2ZiKGEuaSxhLmQrKyk7YnJlYWs7Y2FzZSA0NTppZigoYS5lJjUxMik9PTUxMiYmYS5kPGEuaiYmX2ZiKGEuaSxhLmQpPT05MSl7KythLmQ7ZD0yNH1lbHNlIGQ9MDticmVhaztjYXNlIDkxOmlmKChhLmUmNTEyKSE9NTEyJiZhLmQ8YS5qJiZfZmIoYS5pLGEuZCk9PTU4KXsrK2EuZDtkPTIwO2JyZWFrfWRlZmF1bHQ6aWYoKGImNjQ1MTIpPT1Rc2UmJmEuZDxhLmope2M9X2ZiKGEuaSxhLmQpO2lmKChjJjY0NTEyKT09NTYzMjApe2EuYT1Qc2UrKGItUXNlPDwxMCkrYy01NjMyMDsrK2EuZH19ZD0wO31hLmM9ZDtyZXR1cm59c3dpdGNoKGIpe2Nhc2UgMTI0OmQ9MjticmVhaztjYXNlIDQyOmQ9MzticmVhaztjYXNlIDQzOmQ9NDticmVhaztjYXNlIDYzOmQ9NTticmVhaztjYXNlIDQxOmQ9NzticmVhaztjYXNlIDQ2OmQ9ODticmVhaztjYXNlIDkxOmQ9OTticmVhaztjYXNlIDk0OmQ9MTE7YnJlYWs7Y2FzZSAzNjpkPTEyO2JyZWFrO2Nhc2UgNDA6ZD02O2lmKGEuZD49YS5qKWJyZWFrO2lmKF9mYihhLmksYS5kKSE9NjMpYnJlYWs7aWYoKythLmQ+PWEuail0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLFhEZSkpKSk7Yj1fZmIoYS5pLGEuZCsrKTtzd2l0Y2goYil7Y2FzZSA1ODpkPTEzO2JyZWFrO2Nhc2UgNjE6ZD0xNDticmVhaztjYXNlIDMzOmQ9MTU7YnJlYWs7Y2FzZSA5MTpkPTE5O2JyZWFrO2Nhc2UgNjI6ZD0xODticmVhaztjYXNlIDYwOmlmKGEuZD49YS5qKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksWERlKSkpKTtiPV9mYihhLmksYS5kKyspO2lmKGI9PTYxKXtkPTE2fWVsc2UgaWYoYj09MzMpe2Q9MTd9ZWxzZSB0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLFlEZSkpKSk7YnJlYWs7Y2FzZSAzNTp3aGlsZShhLmQ8YS5qKXtiPV9mYihhLmksYS5kKyspO2lmKGI9PTQxKWJyZWFrfWlmKGIhPTQxKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksWkRlKSkpKTtkPTIxO2JyZWFrO2RlZmF1bHQ6aWYoYj09NDV8fDk3PD1iJiZiPD0xMjJ8fDY1PD1iJiZiPD05MCl7LS1hLmQ7ZD0yMjticmVha31lbHNlIGlmKGI9PTQwKXtkPTIzO2JyZWFrfXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksWERlKSkpKTt9YnJlYWs7Y2FzZSA5MjpkPTEwO2lmKGEuZD49YS5qKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksV0RlKSkpKTthLmE9X2ZiKGEuaSxhLmQrKyk7YnJlYWs7ZGVmYXVsdDpkPTA7fWEuYz1kfQpmdW5jdGlvbiByUmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHE7Yy5TZygnUHJvY2VzcyBjb21wYWN0aW9uJywxKTtpZigheWRiKExEKFdNYihiLChrVmMoKSxJVWMpKSkpKXtyZXR1cm59ZT1KRChXTWIoYixLVWMpLDg2KTtuPUJlYihNRChXTWIoYixjVmMpKSk7c1JjKGEsYixlKTtvUmMoYixuLzIvMik7bz1iLmI7aHViKG8sbmV3IEhSYyhlKSk7Zm9yKGo9R3RiKG8sMCk7ai5iIT1qLmQuYzspe2k9SkQoVXRiKGopLDM5KTtpZigheWRiKExEKFdNYihpLCh0VWMoKSxxVWMpKSkpKXtkPXBSYyhpLGUpO3A9b1FjKGksYik7bD0wO209MDtpZihkKXtxPWQuZTtzd2l0Y2goZS5nKXtjYXNlIDI6bD1xLmEtbi1pLmYuYTtwLmUuYS1uLWkuZi5hPGwmJihsPXAuZS5hLW4taS5mLmEpO209bCtpLmYuYTticmVhaztjYXNlIDE6bD1xLmErZC5mLmErbjtwLmUuYStuPmwmJihsPXAuZS5hK3AuZi5hK24pO209bCtpLmYuYTticmVhaztjYXNlIDQ6bD1xLmItbi1pLmYuYjtwLmUuYi1uLWkuZi5iPGwmJihsPXAuZS5iLW4taS5mLmIpO209bCtpLmYuYjticmVhaztjYXNlIDM6bD1xLmIrZC5mLmIrbjtwLmUuYituPmwmJihsPXAuZS5iK3AuZi5iK24pO209bCtpLmYuYjt9fWVsc2UgaWYocCl7c3dpdGNoKGUuZyl7Y2FzZSAyOmw9cC5lLmEtbi1pLmYuYTttPWwraS5mLmE7YnJlYWs7Y2FzZSAxOmw9cC5lLmErcC5mLmErbjttPWwraS5mLmE7YnJlYWs7Y2FzZSA0Omw9cC5lLmItbi1pLmYuYjttPWwraS5mLmI7YnJlYWs7Y2FzZSAzOmw9cC5lLmIrcC5mLmIrbjttPWwraS5mLmI7fX1pZihYRChXTWIoYixOVWMpKT09PVhEKChPVGMoKSxMVGMpKSl7Zj1sO2c9bTtoPUNCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYS5hLDE2KSksbmV3IExSYyhmLGcpKSk7aWYoaC5hIT1udWxsKXtlPT0oVGdkKCksUGdkKXx8ZT09UWdkPyhpLmUuYT1sKTooaS5lLmI9bCl9ZWxzZXtlPT0oVGdkKCksUGdkKXx8ZT09U2dkPyhoPUNCYihCQmIoTUJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYSwxNikpKSxuZXcgWlJjKGYpKSkpOihoPUNCYihCQmIoTUJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYSwxNikpKSxuZXcgX1JjKGYpKSkpO2guYSE9bnVsbCYmKGU9PVBnZHx8ZT09UWdkPyhpLmUuYT1CZWIoTUQoKHJEYihoLmEhPW51bGwpLEpEKGguYSw0NykpLmEpKSk6KGkuZS5iPUJlYihNRCgockRiKGguYSE9bnVsbCksSkQoaC5hLDQ3KSkuYSkpKSl9aWYoaC5hIT1udWxsKXtrPU5sYihhLmEsKHJEYihoLmEhPW51bGwpLGguYSksMCk7aWYoaz4wJiZrIT1KRChXTWIoaSxpVmMpLDE3KS5hKXtaTWIoaSxYVGMsKHhkYigpLHRydWUpKTtaTWIoaSxpVmMsamZiKGspKX19fWVsc2V7ZT09KFRnZCgpLFBnZCl8fGU9PVFnZD8oaS5lLmE9bCk6KGkuZS5iPWwpfX19Yy5UZygpfQpmdW5jdGlvbiBCd2MoKXtCd2M9WmNiO1R2Yz0oTGdkKCksbGdkKTtVdmM9bWdkO1Z2Yz1uZ2Q7V3ZjPW9nZDtZdmM9cGdkO1p2Yz1xZ2Q7YXdjPXNnZDtjd2M9dWdkO2R3Yz12Z2Q7YndjPXRnZDtld2M9d2dkO2d3Yz14Z2Q7aXdjPUFnZDtfdmM9cmdkO1N2Yz0oT3RjKCksZXRjKTtYdmM9ZnRjOyR2Yz1ndGM7ZndjPWh0YztNdmM9bmV3IE5CZChnZ2QsamZiKDApKTtOdmM9YnRjO092Yz1jdGM7UHZjPWR0Yzt5d2M9RnRjO3F3Yz1rdGM7cndjPW50Yzt1d2M9dnRjO3N3Yz1xdGM7dHdjPXN0YztBd2M9S3RjO3p3Yz1IdGM7d3djPUJ0Yzt2d2M9enRjO3h3Yz1EdGM7YnZjPUZzYztfdWM9QXNjO2F2Yz1Dc2M7bHZjPVVzYzttdmM9VnNjO0R1Yz1ZcmM7RXVjPV9yYzttd2M9RGdkO293Yz1IZ2Q7bHdjPUNnZDtrd2M9QmdkO253Yz0oV2tkKCksVGtkKTtuZXcgTkJkKEVnZCxud2MpO3V2Yz1uZXcgTVliKDEyKTt0dmM9bmV3IE5CZChLZmQsdXZjKTt6dWM9KHhoZCgpLHRoZCk7eXVjPW5ldyBOQmQoZGZkLHp1Yyk7RHZjPW5ldyBOQmQoWGZkLDApO1F2Yz1uZXcgTkJkKGhnZCxqZmIoMSkpO1R0Yz1uZXcgTkJkKFFlZCxKdWUpO3N2Yz1JZmQ7RXZjPVlmZDtKdmM9ZGdkO3F1Yz1aZWQ7UnRjPU9lZDtJdWM9aWZkO1J2Yz1uZXcgTkJkKGtnZCwoeGRiKCksdHJ1ZSkpO051Yz1sZmQ7T3VjPW1mZDtvdmM9QmZkO3J2Yz1HZmQ7cHZjPURmZDt0dWM9KFRnZCgpLFJnZCk7cnVjPW5ldyBOQmQoJGVkLHR1Yyk7Z3ZjPXpmZDtmdmM9eGZkO0h2Yz1hZ2Q7R3ZjPV9mZDtJdmM9Y2dkO3h2Yz0oUWlkKCksUGlkKTtuZXcgTkJkKFFmZCx4dmMpO3p2Yz1UZmQ7QXZjPVVmZDtCdmM9VmZkO3l2Yz1TZmQ7cHdjPWp0YzskdWM9eXNjO1p1Yz13c2M7andjPWl0YztVdWM9b3NjO3B1Yz1LcmM7b3VjPUlyYztldWM9cXJjO2Z1Yz1ycmM7aHVjPXhyYztndWM9dHJjO251Yz1HcmM7ZHZjPUhzYztldmM9SXNjO1F1Yz1oc2M7bnZjPVpzYztpdmM9TXNjO0d1Yz1jc2M7a3ZjPVNzYztCdWM9VXJjO0N1Yz1XcmM7ZHVjPVhlZDtodmM9SnNjO1h0Yz1lcmM7V3RjPWNyYztWdGM9YnJjO0t1Yz1mc2M7SnVjPWVzYztMdWM9Z3NjO3F2Yz1FZmQ7UnVjPXRmZDtGdWM9ZmZkO3d1Yz1iZmQ7dnVjPWFmZDtpdWM9QXJjO0Z2Yz0kZmQ7VXRjPVdlZDtNdWM9a2ZkO0N2Yz1XZmQ7dnZjPU1mZDt3dmM9T2ZkO1d1Yz1yc2M7WHVjPXRzYztMdmM9ZmdkO1N0Yz1hcmM7WXVjPXZzYzt4dWM9UXJjO3V1Yz1PcmM7Y3ZjPXZmZDtTdWM9bHNjO2p2Yz1Qc2M7aHdjPXlnZDtzdWM9TXJjO0t2Yz1fc2M7QXVjPVNyYztqdWM9Q3JjO2t1Yz1EcmM7VHVjPW5zYztsdWM9RXJjO1B1Yz1vZmQ7VnVjPXFzYzttdWM9RnJjO2N1Yz1vcmM7X3RjPWtyYztadGM9aXJjOyR0Yz1qcmM7YXVjPW1yYztZdGM9Z3JjO2J1Yz1ucmM7SHVjPWRzY30KZnVuY3Rpb24gSEFjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdjtjLlNnKCdDb2ZmbWFuLUdyYWhhbSBMYXllcmluZycsMSk7aWYoYi5hLmMubGVuZ3RoPT0wKXtjLlRnKCk7cmV0dXJufXY9SkQoV01iKGIsKEJ3YygpLFN1YykpLDE3KS5hO2k9MDtnPTA7Zm9yKG09bmV3IHJtYihiLmEpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUpEKHBtYihtKSw5KTtsLnA9aSsrO2ZvcihmPW5ldyBlcyhJcihrWWIobCkuYS5KYygpLG5ldyBlcikpO2NzKGYpOyl7ZT1KRChkcyhmKSwxOCk7ZS5wPWcrK319YS5kPVNDKHBjYixWdGUsMzAsaSwxNiwxKTthLmE9U0MocGNiLFZ0ZSwzMCxnLDE2LDEpO2EuYj1TQyhjRSxpc2UsMzAsaSwxNSwxKTthLmU9U0MoY0UsaXNlLDMwLGksMTUsMSk7YS5mPVNDKGNFLGlzZSwzMCxpLDE1LDEpO05jKGEuYyk7SUFjKGEsYik7bz1uZXcgZHZiKG5ldyBNQWMoYSkpO2Zvcih1PW5ldyBybWIoYi5hKTt1LmE8dS5jLmMubGVuZ3RoOyl7cz1KRChwbWIodSksOSk7Zm9yKGY9bmV3IGVzKElyKGhZYihzKS5hLkpjKCksbmV3IGVyKSk7Y3MoZik7KXtlPUpEKGRzKGYpLDE4KTthLmFbZS5wXXx8KythLmJbcy5wXX1hLmJbcy5wXT09MCYmKHlEYihfdWIobyxzKSxYc2UpLHRydWUpfWg9MDt3aGlsZShvLmIuYy5sZW5ndGghPTApe3M9SkQoYXZiKG8pLDkpO2EuZltzLnBdPWgrKztmb3IoZj1uZXcgZXMoSXIoa1liKHMpLmEuSmMoKSxuZXcgZXIpKTtjcyhmKTspe2U9SkQoZHMoZiksMTgpO2lmKGEuYVtlLnBdKXtjb250aW51ZX1xPWUuZC5pOy0tYS5iW3EucF07UmMoYS5jLHEsamZiKGEuZltzLnBdKSk7YS5iW3EucF09PTAmJih5RGIoX3ViKG8scSksWHNlKSx0cnVlKX19bj1uZXcgZHZiKG5ldyBRQWMoYSkpO2Zvcih0PW5ldyBybWIoYi5hKTt0LmE8dC5jLmMubGVuZ3RoOyl7cz1KRChwbWIodCksOSk7Zm9yKGY9bmV3IGVzKElyKGtZYihzKS5hLkpjKCksbmV3IGVyKSk7Y3MoZik7KXtlPUpEKGRzKGYpLDE4KTthLmFbZS5wXXx8KythLmVbcy5wXX1hLmVbcy5wXT09MCYmKHlEYihfdWIobixzKSxYc2UpLHRydWUpfWs9bmV3IFVsYjtkPUVBYyhiLGspO3doaWxlKG4uYi5jLmxlbmd0aCE9MCl7cj1KRChhdmIobiksOSk7KGQuYS5jLmxlbmd0aD49dnx8IUNBYyhyLGQpKSYmKGQ9RUFjKGIsaykpO3FZYihyLGQpO2ZvcihmPW5ldyBlcyhJcihoWWIocikuYS5KYygpLG5ldyBlcikpO2NzKGYpOyl7ZT1KRChkcyhmKSwxOCk7aWYoYS5hW2UucF0pe2NvbnRpbnVlfXA9ZS5jLmk7LS1hLmVbcC5wXTthLmVbcC5wXT09MCYmKHlEYihfdWIobixwKSxYc2UpLHRydWUpfX1mb3Ioaj1rLmMubGVuZ3RoLTE7aj49MDstLWope0lsYihiLmIsKHNEYihqLGsuYy5sZW5ndGgpLEpEKGsuY1tqXSwyNSkpKX1iLmEuYy5sZW5ndGg9MDtjLlRnKCl9CmZ1bmN0aW9uICRtZShhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo7YS5iPTE7Zm1lKGEpO2I9bnVsbDtpZihhLmM9PTAmJmEuYT09OTQpe2ZtZShhKTtiPShvb2UoKSxvb2UoKSwrK25vZSxuZXcgU29lKDQpKTtNb2UoYiwwLE5HZSk7aD0obnVsbCwrK25vZSxuZXcgU29lKDQpKX1lbHNle2g9KG9vZSgpLG9vZSgpLCsrbm9lLG5ldyBTb2UoNCkpfWU9dHJ1ZTt3aGlsZSgoaj1hLmMpIT0xKXtpZihqPT0wJiZhLmE9PTkzJiYhZSl7aWYoYil7Um9lKGIsaCk7aD1ifWJyZWFrfWM9YS5hO2Q9ZmFsc2U7aWYoaj09MTApe3N3aXRjaChjKXtjYXNlIDEwMDpjYXNlIDY4OmNhc2UgMTE5OmNhc2UgODc6Y2FzZSAxMTU6Y2FzZSA4MzpQb2UoaCxabWUoYykpO2Q9dHJ1ZTticmVhaztjYXNlIDEwNTpjYXNlIDczOmNhc2UgOTk6Y2FzZSA2NzpjPShQb2UoaCxabWUoYykpLC0xKTtjPDAmJihkPXRydWUpO2JyZWFrO2Nhc2UgMTEyOmNhc2UgODA6aT1sbWUoYSxjKTtpZighaSl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLGlFZSkpKSk7UG9lKGgsaSk7ZD10cnVlO2JyZWFrO2RlZmF1bHQ6Yz1ZbWUoYSk7fX1lbHNlIGlmKGo9PTI0JiYhZSl7aWYoYil7Um9lKGIsaCk7aD1ifWY9JG1lKGEpO1JvZShoLGYpO2lmKGEuYyE9MHx8YS5hIT05Myl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLG1FZSkpKSk7YnJlYWt9Zm1lKGEpO2lmKCFkKXtpZihqPT0wKXtpZihjPT05MSl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLG5FZSkpKSk7aWYoYz09OTMpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxvRWUpKSkpO2lmKGM9PTQ1JiYhZSYmYS5hIT05Myl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHBFZSkpKSl9aWYoYS5jIT0wfHxhLmEhPTQ1fHxjPT00NSYmZSl7TW9lKGgsYyxjKX1lbHNle2ZtZShhKTtpZigoaj1hLmMpPT0xKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksa0VlKSkpKTtpZihqPT0wJiZhLmE9PTkzKXtNb2UoaCxjLGMpO01vZShoLDQ1LDQ1KX1lbHNlIGlmKGo9PTAmJmEuYT09OTN8fGo9PTI0KXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHBFZSkpKSl9ZWxzZXtnPWEuYTtpZihqPT0wKXtpZihnPT05MSl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLG5FZSkpKSk7aWYoZz09OTMpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxvRWUpKSkpO2lmKGc9PTQ1KXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkscEVlKSkpKX1lbHNlIGo9PTEwJiYoZz1ZbWUoYSkpO2ZtZShhKTtpZihjPmcpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxzRWUpKSkpO01vZShoLGMsZyl9fX1lPWZhbHNlfWlmKGEuYz09MSl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLGtFZSkpKSk7UW9lKGgpO05vZShoKTthLmI9MDtmbWUoYSk7cmV0dXJuIGh9CmZ1bmN0aW9uIGQ4YihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1O3U9ZmFsc2U7ZG97dT1mYWxzZTtmb3IoZj1iPyhuZXcgT2piKGEuYS5iKSkuYS5nYygpLTI6MTtiP2Y+PTA6ZjwobmV3IE9qYihhLmEuYikpLmEuZ2MoKTtmKz1iPy0xOjEpe2U9bF9iKGEuYSxqZmIoZikpO2ZvcihuPTA7bjxlLmI7bisrKXtsPUpEKGZ1KGUsbiksOSk7aWYoIVhNYihsLChJcWMoKSxqcWMpKSl7Y29udGludWV9aWYobV9iKGEuYSxqZmIoZikpJiZhLnI9PShkeWMoKSxXeGMpfHxuX2IoYS5hLGpmYihmKSkmJmEucj09KGR5YygpLFh4Yykpe2NvbnRpbnVlfXQ9dHJ1ZTtmb3Iocj0wO3I8ZS5iO3IrKyl7cT1KRChmdShlLHIpLDkpO1hNYihxLGpxYykmJihiJiZKRChXTWIobCxqcWMpLDE3KS5hPEpEKFdNYihxLGpxYyksMTcpLmF8fCFiJiZKRChXTWIobCxqcWMpLDE3KS5hPkpEKFdNYihxLGpxYyksMTcpLmEpJiYodD1mYWxzZSl9aWYoIXQpe2NvbnRpbnVlfWk9Yj9mKzE6Zi0xO2g9bF9iKGEuYSxqZmIoaSkpO2c9ZmFsc2U7cz10cnVlO2Q9ZmFsc2U7Zm9yKGs9R3RiKGgsMCk7ay5iIT1rLmQuYzspe2o9SkQoVXRiKGspLDkpO2lmKFhNYihqLGpxYykpe2lmKGoucCE9bC5wKXtnPWd8KGI/SkQoV01iKGosanFjKSwxNykuYTxKRChXTWIobCxqcWMpLDE3KS5hOkpEKFdNYihqLGpxYyksMTcpLmE+SkQoV01iKGwsanFjKSwxNykuYSk7cz1mYWxzZX19ZWxzZSBpZighZyYmcyl7aWYoai5rPT0oRFliKCkseFliKSl7ZD10cnVlO2I/KG09SkQoZHMobmV3IGVzKElyKGhZYihqKS5hLkpjKCksbmV3IGVyKSkpLDE4KS5jLmkpOihtPUpEKGRzKG5ldyBlcyhJcihrWWIoaikuYS5KYygpLG5ldyBlcikpKSwxOCkuZC5pKTtpZihtPT1sKXtiPyhjPUpEKGRzKG5ldyBlcyhJcihrWWIoaikuYS5KYygpLG5ldyBlcikpKSwxOCkuZC5pKTooYz1KRChkcyhuZXcgZXMoSXIoaFliKGopLmEuSmMoKSxuZXcgZXIpKSksMTgpLmMuaSk7KGI/SkQoa19iKGEuYSxjKSwxNykuYS1KRChrX2IoYS5hLG0pLDE3KS5hOkpEKGtfYihhLmEsbSksMTcpLmEtSkQoa19iKGEuYSxjKSwxNykuYSk8PTImJihzPWZhbHNlKX19fX1pZihkJiZzKXtiPyhjPUpEKGRzKG5ldyBlcyhJcihrWWIobCkuYS5KYygpLG5ldyBlcikpKSwxOCkuZC5pKTooYz1KRChkcyhuZXcgZXMoSXIoaFliKGwpLmEuSmMoKSxuZXcgZXIpKSksMTgpLmMuaSk7KGI/SkQoa19iKGEuYSxjKSwxNykuYS1KRChrX2IoYS5hLGwpLDE3KS5hOkpEKGtfYihhLmEsbCksMTcpLmEtSkQoa19iKGEuYSxjKSwxNykuYSk8PTImJmMuaz09KERZYigpLEFZYikmJihzPWZhbHNlKX1pZihnfHxzKXtwPWk4YihhLGwsYik7d2hpbGUocC5hLmdjKCkhPTApe289SkQocC5hLmVjKCkuSmMoKS5QYigpLDkpO3AuYS5BYyhvKSE9bnVsbDt4ZShwLGk4YihhLG8sYikpfS0tbjt1PXRydWV9fX19d2hpbGUodSl9CmZ1bmN0aW9uIHE2ZChhKXtEdmQoYS5jLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RlY2ltYWwnXSkpO0R2ZChhLmQsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0VGZSwnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaW50ZWdlciddKSk7RHZkKGEuZSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbRUZlLCdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNib29sZWFuJ10pKTtEdmQoYS5mLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ0VCb29sZWFuJyxIRGUsJ0VCb29sZWFuOk9iamVjdCddKSk7RHZkKGEuaSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbRUZlLCdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNieXRlJ10pKTtEdmQoYS5nLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2hleEJpbmFyeSddKSk7RHZkKGEuaixyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbRUZlLCdFQnl0ZScsSERlLCdFQnl0ZTpPYmplY3QnXSkpO0R2ZChhLm4sckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0VGZSwnRUNoYXInLEhEZSwnRUNoYXI6T2JqZWN0J10pKTtEdmQoYS50LHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2RvdWJsZSddKSk7RHZkKGEudSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbRUZlLCdFRG91YmxlJyxIRGUsJ0VEb3VibGU6T2JqZWN0J10pKTtEdmQoYS5GLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2Zsb2F0J10pKTtEdmQoYS5HLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ0VGbG9hdCcsSERlLCdFRmxvYXQ6T2JqZWN0J10pKTtEdmQoYS5JLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludCddKSk7RHZkKGEuSixyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbRUZlLCdFSW50JyxIRGUsJ0VJbnQ6T2JqZWN0J10pKTtEdmQoYS5OLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2xvbmcnXSkpO0R2ZChhLk8sckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0VGZSwnRUxvbmcnLEhEZSwnRUxvbmc6T2JqZWN0J10pKTtEdmQoYS5aLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3Nob3J0J10pKTtEdmQoYS4kLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ0VTaG9ydCcsSERlLCdFU2hvcnQ6T2JqZWN0J10pKTtEdmQoYS5fLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtFRmUsJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyddKSl9CmZ1bmN0aW9uIEZXYyhhLGIsYyxkLGUsZixnKXt2YXIgaCxpLGosayxsLG0sbixvO209SkQoZC5hLDE3KS5hO249SkQoZC5iLDE3KS5hO2w9YS5iO289YS5jO2g9MDtrPTA7aWYoYj09KFRnZCgpLFBnZCl8fGI9PVFnZCl7az1JdWIoUEFiKEdCYihGQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYy5iLDE2KSksbmV3IGVZYyksbmV3IGVYYykpKTtpZihsLmUuYitsLmYuYi8yPmspe2o9KytuO2g9QmViKE1EKHp1YihJQmIoRkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGMuYiwxNikpLG5ldyBnWWMoZSxqKSksbmV3IGdYYykpKSl9ZWxzZXtpPSsrbTtoPUJlYihNRCh6dWIoSkJiKEZCYihuZXcgUkJiKG51bGwsbmV3IEd2YihjLmIsMTYpKSxuZXcgaVljKGUsaSkpLG5ldyBrWGMpKSkpfX1lbHNle2s9SXViKFBBYihHQmIoRkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGMuYiwxNikpLG5ldyBBWGMpLG5ldyBvWGMpKSk7aWYobC5lLmErbC5mLmEvMj5rKXtqPSsrbjtoPUJlYihNRCh6dWIoSUJiKEZCYihuZXcgUkJiKG51bGwsbmV3IEd2YihjLmIsMTYpKSxuZXcgQ1hjKGUsaikpLG5ldyBxWGMpKSkpfWVsc2V7aT0rK207aD1CZWIoTUQoenViKEpCYihGQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYy5iLDE2KSksbmV3IEVYYyhlLGkpKSxuZXcgdVhjKSkpKX19aWYoYj09UGdkKXtDdGIoYS5hLG5ldyBFZGQoQmViKE1EKFdNYihsLCh0VWMoKSxpVWMpKSkpLWUsaCkpO0N0YihhLmEsbmV3IEVkZChvLmUuYStvLmYuYStlK2YsaCkpO0N0YihhLmEsbmV3IEVkZChvLmUuYStvLmYuYStlK2Ysby5lLmIrby5mLmIvMikpO0N0YihhLmEsbmV3IEVkZChvLmUuYStvLmYuYSxvLmUuYitvLmYuYi8yKSl9ZWxzZSBpZihiPT1RZ2Qpe0N0YihhLmEsbmV3IEVkZChCZWIoTUQoV01iKGwsKHRVYygpLGhVYykpKSkrZSxsLmUuYitsLmYuYi8yKSk7Q3RiKGEuYSxuZXcgRWRkKGwuZS5hK2wuZi5hK2UsaCkpO0N0YihhLmEsbmV3IEVkZChvLmUuYS1lLWYsaCkpO0N0YihhLmEsbmV3IEVkZChvLmUuYS1lLWYsby5lLmIrby5mLmIvMikpO0N0YihhLmEsbmV3IEVkZChvLmUuYSxvLmUuYitvLmYuYi8yKSl9ZWxzZSBpZihiPT1TZ2Qpe0N0YihhLmEsbmV3IEVkZChoLEJlYihNRChXTWIobCwodFVjKCksaVVjKSkpKS1lKSk7Q3RiKGEuYSxuZXcgRWRkKGgsby5lLmIrby5mLmIrZStmKSk7Q3RiKGEuYSxuZXcgRWRkKG8uZS5hK28uZi5hLzIsby5lLmIrby5mLmIrZStmKSk7Q3RiKGEuYSxuZXcgRWRkKG8uZS5hK28uZi5hLzIsby5lLmIrby5mLmIrZSkpfWVsc2V7YS5hLmI9PTB8fChKRChGdGIoYS5hKSw4KS5iPUJlYihNRChXTWIobCwodFVjKCksaFVjKSkpKStlKkpEKGcuYiwxNykuYSk7Q3RiKGEuYSxuZXcgRWRkKGgsQmViKE1EKFdNYihsLCh0VWMoKSxoVWMpKSkpK2UqSkQoZy5iLDE3KS5hKSk7Q3RiKGEuYSxuZXcgRWRkKGgsby5lLmItZSpKRChnLmEsMTcpLmEtZikpfXJldHVybiBuZXcgeG9kKGpmYihtKSxqZmIobikpfQpmdW5jdGlvbiBCa2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdTtpZihMaWIoYS5iLGIpKXtpZihPcmIoSkQoTmliKGEuYixiKSw1MCksYykpe3JldHVybiAxfX1lbHNle1FpYihhLmIsYixuZXcgUXJiKX1pZihMaWIoYS5iLGMpKXtpZihPcmIoSkQoTmliKGEuYixjKSw1MCksYikpe3JldHVybiAtMX19ZWxzZXtRaWIoYS5iLGMsbmV3IFFyYil9aWYoTGliKGEuZixiKSl7aWYoT3JiKEpEKE5pYihhLmYsYiksNTApLGMpKXtyZXR1cm4gLTF9fWVsc2V7UWliKGEuZixiLG5ldyBRcmIpfWlmKExpYihhLmYsYykpe2lmKE9yYihKRChOaWIoYS5iLGMpLDUwKSxiKSl7cmV0dXJuIDF9fWVsc2V7UWliKGEuZixjLG5ldyBRcmIpfWlmKGEuZD09KG55YygpLGx5Yyl8fCFYTWIoYiwoSXFjKCksanFjKSl8fCFYTWIoYywoSXFjKCksanFjKSkpe209bnVsbDtmb3Ioaz1uZXcgcm1iKGIuaik7ay5hPGsuYy5jLmxlbmd0aDspe2k9SkQocG1iKGspLDExKTtpLmUuYy5sZW5ndGg9PTB8fEpEKE1sYihpLmUsMCksMTgpLmMuaS5jLnA9PWIuYy5wLTEmJihtPUpEKE1sYihpLmUsMCksMTgpLmMpfW89bnVsbDtmb3Ioaj1uZXcgcm1iKGMuaik7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDExKTtpLmUuYy5sZW5ndGg9PTB8fEpEKE1sYihpLmUsMCksMTgpLmMuaS5jLnA9PWMuYy5wLTEmJihvPUpEKE1sYihpLmUsMCksMTgpLmMpfWlmKCEhbSYmISFvKXtsPW0uaTtuPW8uaTtpZighIWwmJmw9PW4pe2ZvcihxPW5ldyBybWIobC5qKTtxLmE8cS5jLmMubGVuZ3RoOyl7cD1KRChwbWIocSksMTEpO2lmKHA9PW0pe0VrYyhhLGMsYik7cmV0dXJuIC0xfWVsc2UgaWYocD09byl7RWtjKGEsYixjKTtyZXR1cm4gMX19ZT1Da2MoYSxiKTtnPUNrYyhhLGMpO2lmKGU+Zyl7RWtjKGEsYixjKTtyZXR1cm4gMX1lbHNle0VrYyhhLGMsYik7cmV0dXJuIC0xfX1mb3Iocz1hLmUsdD0wLHU9cy5sZW5ndGg7dDx1OysrdCl7cj1zW3RdO2lmKHI9PWwpe0VrYyhhLGMsYik7cmV0dXJuIC0xfWVsc2UgaWYocj09bil7RWtjKGEsYixjKTtyZXR1cm4gMX19fWlmKCEhbSYmIW98fCFtJiYhIW8pe2Q9RGtjKGEsYixjKTtpZihkIT0wKXtkPjA/RWtjKGEsYixjKTpFa2MoYSxjLGIpO3JldHVybiBkfWlmKCFYTWIoYiwoSXFjKCksanFjKSl8fCFYTWIoYyxqcWMpKXtmPUNrYyhhLGIpO2g9Q2tjKGEsYyk7aWYoZj5oKXtFa2MoYSxiLGMpO3JldHVybiAxfWVsc2V7RWtjKGEsYyxiKTtyZXR1cm4gLTF9fX1pZighbSYmIW8pe2Q9RGtjKGEsYixjKTtpZihkIT0wKXtkPjA/RWtjKGEsYixjKTpFa2MoYSxjLGIpO3JldHVybiBkfX19aWYoWE1iKGIsKElxYygpLGpxYykpJiZYTWIoYyxqcWMpKXtmPUpEKFdNYihiLGpxYyksMTcpLmE7aD1KRChXTWIoYyxqcWMpLDE3KS5hO2lmKGY+aCl7RWtjKGEsYixjKTtyZXR1cm4gMX1lbHNle0VrYyhhLGMsYik7cmV0dXJuIC0xfX1lbHNle0VrYyhhLGMsYik7cmV0dXJuIC0xfX0KZnVuY3Rpb24gVk5kKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuO2c9dHJ1ZTtsPW51bGw7ZD1udWxsO2U9bnVsbDtiPWZhbHNlO249dU5kO2o9bnVsbDtmPW51bGw7aD0wO2k9Tk5kKGEsaCxzTmQsdE5kKTtpZihpPGEubGVuZ3RoJiYoQURiKGksYS5sZW5ndGgpLGEuY2hhckNvZGVBdChpKT09NTgpKXtsPSh6RGIoaCxpLGEubGVuZ3RoKSxhLnN1YnN0cihoLGktaCkpO2g9aSsxfWM9bCE9bnVsbCYma29iKHpOZCxsLnRvTG93ZXJDYXNlKCkpO2lmKGMpe2k9YS5sYXN0SW5kZXhPZignIS8nKTtpZihpPT0tMSl7dGhyb3cgc2NiKG5ldyBUZWIoJ25vIGFyY2hpdmUgc2VwYXJhdG9yJykpfWc9dHJ1ZTtkPXFnYihhLGgsKytpKTtoPWl9ZWxzZSBpZihoPj0wJiZjZ2IoYS5zdWJzdHIoaCwnLy8nLmxlbmd0aCksJy8vJykpe2grPTI7aT1OTmQoYSxoLHZOZCx3TmQpO2Q9KHpEYihoLGksYS5sZW5ndGgpLGEuc3Vic3RyKGgsaS1oKSk7aD1pfWVsc2UgaWYobCE9bnVsbCYmKGg9PWEubGVuZ3RofHwoQURiKGgsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChoKSE9NDcpKSl7Zz1mYWxzZTtpPWlnYihhLHdnYigzNSksaCk7aT09LTEmJihpPWEubGVuZ3RoKTtkPSh6RGIoaCxpLGEubGVuZ3RoKSxhLnN1YnN0cihoLGktaCkpO2g9aX1pZighYyYmaDxhLmxlbmd0aCYmKEFEYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCk9PTQ3KSl7aT1OTmQoYSxoKzEsdk5kLHdOZCk7az0oekRiKGgrMSxpLGEubGVuZ3RoKSxhLnN1YnN0cihoKzEsaS0oaCsxKSkpO2lmKGsubGVuZ3RoPjAmJl9mYihrLGsubGVuZ3RoLTEpPT01OCl7ZT1rO2g9aX19aWYoaDxhLmxlbmd0aCYmKEFEYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCk9PTQ3KSl7KytoO2I9dHJ1ZX1pZihoPGEubGVuZ3RoJiYoQURiKGgsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChoKSE9NjMpJiYoQURiKGgsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChoKSE9MzUpKXttPW5ldyBVbGI7d2hpbGUoaDxhLmxlbmd0aCYmKEFEYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCkhPTYzKSYmKEFEYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCkhPTM1KSl7aT1OTmQoYSxoLHZOZCx3TmQpO0lsYihtLCh6RGIoaCxpLGEubGVuZ3RoKSxhLnN1YnN0cihoLGktaCkpKTtoPWk7aDxhLmxlbmd0aCYmKEFEYihoLGEubGVuZ3RoKSxhLmNoYXJDb2RlQXQoaCk9PTQ3KSYmKFdOZChhLCsraCl8fChtLmMucHVzaCgnJyksdW5kZWZpbmVkLHRydWUpKX1uPVNDKGhKLGhyZSwyLG0uYy5sZW5ndGgsNiwxKTtUbGIobSxuKX1pZihoPGEubGVuZ3RoJiYoQURiKGgsYS5sZW5ndGgpLGEuY2hhckNvZGVBdChoKT09NjMpKXtpPWdnYihhLDM1LCsraCk7aT09LTEmJihpPWEubGVuZ3RoKTtqPSh6RGIoaCxpLGEubGVuZ3RoKSxhLnN1YnN0cihoLGktaCkpO2g9aX1oPGEubGVuZ3RoJiYoZj1wZ2IoYSwrK2gpKTtiT2QoZyxsLGQsZSxuLGopO3JldHVybiBuZXcgR05kKGcsbCxkLGUsYixuLGosZil9CmZ1bmN0aW9uIFpVYigpe1pVYj1aY2I7SlRiKCk7WVViPW5ldyBQcDtSYyhZVWIsKFJqZCgpLERqZCksQ2pkKTtSYyhZVWIsTmpkLENqZCk7UmMoWVViLEVqZCxDamQpO1JjKFlVYixLamQsQ2pkKTtSYyhZVWIsSmpkLENqZCk7UmMoWVViLEhqZCxDamQpO1JjKFlVYixLamQsRGpkKTtSYyhZVWIsQ2pkLHlqZCk7UmMoWVViLERqZCx5amQpO1JjKFlVYixOamQseWpkKTtSYyhZVWIsRWpkLHlqZCk7UmMoWVViLElqZCx5amQpO1JjKFlVYixLamQseWpkKTtSYyhZVWIsSmpkLHlqZCk7UmMoWVViLEhqZCx5amQpO1JjKFlVYixCamQseWpkKTtSYyhZVWIsQ2pkLExqZCk7UmMoWVViLERqZCxMamQpO1JjKFlVYix5amQsTGpkKTtSYyhZVWIsTmpkLExqZCk7UmMoWVViLEVqZCxMamQpO1JjKFlVYixJamQsTGpkKTtSYyhZVWIsS2pkLExqZCk7UmMoWVViLEJqZCxMamQpO1JjKFlVYixNamQsTGpkKTtSYyhZVWIsSmpkLExqZCk7UmMoWVViLEZqZCxMamQpO1JjKFlVYixIamQsTGpkKTtSYyhZVWIsRGpkLE5qZCk7UmMoWVViLEVqZCxOamQpO1JjKFlVYixLamQsTmpkKTtSYyhZVWIsSGpkLE5qZCk7UmMoWVViLERqZCxFamQpO1JjKFlVYixOamQsRWpkKTtSYyhZVWIsS2pkLEVqZCk7UmMoWVViLEVqZCxFamQpO1JjKFlVYixKamQsRWpkKTtSYyhZVWIsQ2pkLHpqZCk7UmMoWVViLERqZCx6amQpO1JjKFlVYix5amQsempkKTtSYyhZVWIsTGpkLHpqZCk7UmMoWVViLE5qZCx6amQpO1JjKFlVYixFamQsempkKTtSYyhZVWIsSWpkLHpqZCk7UmMoWVViLEtqZCx6amQpO1JjKFlVYixNamQsempkKTtSYyhZVWIsQmpkLHpqZCk7UmMoWVViLEhqZCx6amQpO1JjKFlVYixKamQsempkKTtSYyhZVWIsR2pkLHpqZCk7UmMoWVViLENqZCxNamQpO1JjKFlVYixEamQsTWpkKTtSYyhZVWIseWpkLE1qZCk7UmMoWVViLE5qZCxNamQpO1JjKFlVYixFamQsTWpkKTtSYyhZVWIsSWpkLE1qZCk7UmMoWVViLEtqZCxNamQpO1JjKFlVYixCamQsTWpkKTtSYyhZVWIsSGpkLE1qZCk7UmMoWVViLEZqZCxNamQpO1JjKFlVYixHamQsTWpkKTtSYyhZVWIsRGpkLEJqZCk7UmMoWVViLE5qZCxCamQpO1JjKFlVYixFamQsQmpkKTtSYyhZVWIsS2pkLEJqZCk7UmMoWVViLE1qZCxCamQpO1JjKFlVYixIamQsQmpkKTtSYyhZVWIsSmpkLEJqZCk7UmMoWVViLENqZCxBamQpO1JjKFlVYixEamQsQWpkKTtSYyhZVWIseWpkLEFqZCk7UmMoWVViLE5qZCxBamQpO1JjKFlVYixFamQsQWpkKTtSYyhZVWIsSWpkLEFqZCk7UmMoWVViLEtqZCxBamQpO1JjKFlVYixCamQsQWpkKTtSYyhZVWIsSGpkLEFqZCk7UmMoWVViLERqZCxKamQpO1JjKFlVYix5amQsSmpkKTtSYyhZVWIsTGpkLEpqZCk7UmMoWVViLEVqZCxKamQpO1JjKFlVYixDamQsRmpkKTtSYyhZVWIsRGpkLEZqZCk7UmMoWVViLExqZCxGamQpO1JjKFlVYixOamQsRmpkKTtSYyhZVWIsRWpkLEZqZCk7UmMoWVViLElqZCxGamQpO1JjKFlVYixLamQsRmpkKTtSYyhZVWIsS2pkLEdqZCk7UmMoWVViLEVqZCxHamQpO1JjKFlVYixCamQsQ2pkKTtSYyhZVWIsQmpkLE5qZCk7UmMoWVViLEJqZCx5amQpO1JjKFlVYixJamQsQ2pkKTtSYyhZVWIsSWpkLERqZCk7UmMoWVViLElqZCxMamQpfQpmdW5jdGlvbiBjTGMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHc7Yy5TZygnQnJhbmRlcyAmIEtvZXBmIG5vZGUgcGxhY2VtZW50JywxKTthLmE9YjthLmM9bExjKGIpO2Q9SkQoV01iKGIsKEJ3YygpLGl2YykpLDI3OSk7bj15ZGIoTEQoV01iKGIsanZjKSkpO2EuZD1kPT0oeW9jKCksdm9jKSYmIW58fGQ9PXNvYztiTGMoYSxiKTt2PW51bGw7dz1udWxsO3I9bnVsbDtzPW51bGw7cT0oYmsoNCxEcmUpLG5ldyBWbGIoNCkpO3N3aXRjaChKRChXTWIoYixpdmMpLDI3OSkuZyl7Y2FzZSAzOnI9bmV3IHZLYyhiLGEuYy5kLChIS2MoKSxGS2MpLCh6S2MoKSx4S2MpKTtZQ2IocS5jLHIpO2JyZWFrO2Nhc2UgMTpzPW5ldyB2S2MoYixhLmMuZCwoSEtjKCksR0tjKSwoektjKCkseEtjKSk7WUNiKHEuYyxzKTticmVhaztjYXNlIDQ6dj1uZXcgdktjKGIsYS5jLmQsKEhLYygpLEZLYyksKHpLYygpLHlLYykpO1lDYihxLmMsdik7YnJlYWs7Y2FzZSAyOnc9bmV3IHZLYyhiLGEuYy5kLChIS2MoKSxHS2MpLCh6S2MoKSx5S2MpKTtZQ2IocS5jLHcpO2JyZWFrO2RlZmF1bHQ6cj1uZXcgdktjKGIsYS5jLmQsKEhLYygpLEZLYyksKHpLYygpLHhLYykpO3M9bmV3IHZLYyhiLGEuYy5kLEdLYyx4S2MpO3Y9bmV3IHZLYyhiLGEuYy5kLEZLYyx5S2MpO3c9bmV3IHZLYyhiLGEuYy5kLEdLYyx5S2MpO1lDYihxLmMsdik7WUNiKHEuYyx3KTtZQ2IocS5jLHIpO1lDYihxLmMscyk7fWU9bmV3IFBLYyhiLGEuYyk7Zm9yKGg9bmV3IHJtYihxKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoaCksMTg1KTtPS2MoZSxmLGEuYik7TktjKGYpfW09bmV3IFVLYyhiLGEuYyk7Zm9yKGk9bmV3IHJtYihxKTtpLmE8aS5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoaSksMTg1KTtSS2MobSxmKX1pZihjLlpnKCkpe2ZvcihqPW5ldyBybWIocSk7ai5hPGouYy5jLmxlbmd0aDspe2Y9SkQocG1iKGopLDE4NSk7Yy5fZyhmKycgc2l6ZSBpcyAnK3RLYyhmKSl9fWw9bnVsbDtpZihhLmQpe2s9X0tjKGEscSxhLmMuZCk7JEtjKGIsayxjKSYmKGw9ayl9aWYoIWwpe2ZvcihqPW5ldyBybWIocSk7ai5hPGouYy5jLmxlbmd0aDspe2Y9SkQocG1iKGopLDE4NSk7JEtjKGIsZixjKSYmKCFsfHx0S2MobCk+dEtjKGYpKSYmKGw9Zil9fSFsJiYobD0oc0RiKDAscS5jLmxlbmd0aCksSkQocS5jWzBdLDE4NSkpKTtmb3IocD1uZXcgcm1iKGIuYik7cC5hPHAuYy5jLmxlbmd0aDspe289SkQocG1iKHApLDI1KTtmb3IodT1uZXcgcm1iKG8uYSk7dS5hPHUuYy5jLmxlbmd0aDspe3Q9SkQocG1iKHUpLDkpO3Qubi5iPUJlYihsLnBbdC5wXSkrQmViKGwuZFt0LnBdKX19aWYoYy5aZygpKXtjLl9nKCdDaG9zZW4gbm9kZSBwbGFjZW1lbnQ6ICcrbCk7Yy5fZygnQmxvY2tzOiAnK2VMYyhsKSk7Yy5fZygnQ2xhc3NlczogJytmTGMobCxjKSk7Yy5fZygnTWFya2VkIGVkZ2VzOiAnK2EuYil9Zm9yKGc9bmV3IHJtYihxKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMTg1KTtmLmc9bnVsbDtmLmI9bnVsbDtmLmE9bnVsbDtmLmQ9bnVsbDtmLmo9bnVsbDtmLmk9bnVsbDtmLnA9bnVsbH1qTGMoYS5jKTthLmIuYS4kYigpO2MuVGcoKX0KZnVuY3Rpb24gRGtjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQ7aWYoYi5rPT0oRFliKCkseVliKSYmYy5rPT1BWWIpe2Y9SkQoTWxiKEpEKEJ1YihDQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIuaiwxNikpLG5ldyBOa2MpKSksMTEpLmUsMCksMTgpLmM7ZT1mLmk7aD1KRChNbGIoSkQoQnViKENCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYi5qLDE2KSksbmV3IFBrYykpKSwxMSkuZywwKSwxOCkuZDtnPWguaTtkPWIuYy5wO2lmKGUuYy5wIT1kJiZnLmMucCE9ZCl7cmV0dXJuIDB9aWYoZT09Yyl7RWtjKGEsYixjKTtyZXR1cm4gMX1lbHNle2lmKGc9PWMpe0VrYyhhLGIsYyk7cmV0dXJuIDF9cmV0dXJuIEJrYyhhLGUsYyl9fWVsc2UgaWYoYi5rPT1BWWImJmMuaz09eVliKXtmPUpEKE1sYihKRChCdWIoQ0JiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihjLmosMTYpKSxuZXcgTmtjKSkpLDExKS5lLDApLDE4KS5jO2U9Zi5pO2g9SkQoTWxiKEpEKEJ1YihDQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGMuaiwxNikpLG5ldyBQa2MpKSksMTEpLmcsMCksMTgpLmQ7Zz1oLmk7ZD1iLmMucDtpZihlLmMucCE9ZCYmZy5jLnAhPWQpe3JldHVybiAwfWlmKGU9PWIpe0VrYyhhLGMsYik7cmV0dXJuIC0xfWVsc2V7aWYoZz09Yil7RWtjKGEsYyxiKTtyZXR1cm4gLTF9cmV0dXJuIEJrYyhhLGIsZSl9fWVsc2UgaWYoYi5rPT15WWImJmMuaz09eVliKXttPUpEKE1sYihKRChCdWIoQ0JiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihiLmosMTYpKSxuZXcgTmtjKSkpLDExKS5lLDApLDE4KS5jO249SkQoTWxiKEpEKEJ1YihDQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGIuaiwxNikpLG5ldyBQa2MpKSksMTEpLmcsMCksMTgpLmQ7bz1tLmk7cD1uLmk7aT1iLmMucDtrPWZhbHNlO2w9ZmFsc2U7dT1KRChNbGIoSkQoQnViKENCYihCQmIobmV3IFJCYihudWxsLG5ldyBHdmIoYy5qLDE2KSksbmV3IE5rYykpKSwxMSkuZSwwKSwxOCkuYzt2PUpEKE1sYihKRChCdWIoQ0JiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihjLmosMTYpKSxuZXcgUGtjKSkpLDExKS5nLDApLDE4KS5kO3c9dS5pO0E9di5pO3E9Yy5jLnA7cz1mYWxzZTt0PWZhbHNlO2o9YjtyPWM7aWYoby5jLnA9PWkpe2s9dHJ1ZTtqPW99ZWxzZSBpZihwLmMucD09aSl7bD10cnVlO2o9cH1pZih3LmMucD09cSl7cz10cnVlO3I9d31lbHNlIGlmKEEuYy5wPT1xKXt0PXRydWU7cj1BfWlmKGo9PXIpe2lmKGEuYSl7aWYoayYmcyl7RD1Wa2MobmV3IFlrYyhhLmUsYS5kLG51bGwsdCksbSx1KTtpZihEPjApe0VrYyhhLGMsYik7cmV0dXJuIDF9ZWxzZXtFa2MoYSxiLGMpO3JldHVybiAtMX19ZWxzZSBpZihrJiZ0KXtFa2MoYSxjLGIpO3JldHVybiAxfWVsc2UgaWYobCYmcyl7RWtjKGEsYixjKTtyZXR1cm4gLTF9ZWxzZSBpZihsJiZ0KXtyZXR1cm4gMH19ZWxzZXtmb3IoQz1uZXcgcm1iKGouaik7Qy5hPEMuYy5jLmxlbmd0aDspe0I9SkQocG1iKEMpLDExKTtpZihtPT1CKXtFa2MoYSxjLGIpO3JldHVybiAtMX1lbHNlIGlmKHU9PUIpe0VrYyhhLGIsYyk7cmV0dXJuIDF9fX19cmV0dXJuIEJrYyhhLGoscil9ZWxzZXtyZXR1cm4gMH19CmZ1bmN0aW9uIEpQYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRztpZihhLmMubGVuZ3RoPT0xKXtGUGMoKHNEYigwLGEuYy5sZW5ndGgpLEpEKGEuY1swXSwxMjApKSk7cmV0dXJuIHNEYigwLGEuYy5sZW5ndGgpLEpEKGEuY1swXSwxMjApfWVsc2UgaWYoYS5jLmxlbmd0aDw9MCl7cmV0dXJuIG5ldyBfUWN9Zm9yKGk9bmV3IHJtYihhKTtpLmE8aS5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaSksMTIwKTtzPTA7bz1IcWU7cD1IcWU7bT1McmU7bj1McmU7Zm9yKHI9R3RiKGcuYiwwKTtyLmIhPXIuZC5jOyl7cT1KRChVdGIociksMzkpO3MrPUpEKFdNYihxLChrVmMoKSwkVWMpKSwxNykuYTtvPSR3bmQuTWF0aC5taW4obyxxLmUuYSk7cD0kd25kLk1hdGgubWluKHAscS5lLmIpO209JHduZC5NYXRoLm1heChtLHEuZS5hK3EuZi5hKTtuPSR3bmQuTWF0aC5tYXgobixxLmUuYitxLmYuYil9Wk1iKGcsKGtWYygpLCRVYyksamZiKHMpKTtaTWIoZywodFVjKCksVlRjKSxuZXcgRWRkKG8scCkpO1pNYihnLFVUYyxuZXcgRWRkKG0sbikpfXBuYigpO1NsYihhLG5ldyBOUGMpO3Y9bmV3IF9RYztVTWIodiwoc0RiKDAsYS5jLmxlbmd0aCksSkQoYS5jWzBdLDEwMikpKTtsPTA7RD0wO2ZvcihqPW5ldyBybWIoYSk7ai5hPGouYy5jLmxlbmd0aDspe2c9SkQocG1iKGopLDEyMCk7dz1CZGQob2RkKEpEKFdNYihnLCh0VWMoKSxVVGMpKSw4KSksSkQoV01iKGcsVlRjKSw4KSk7bD0kd25kLk1hdGgubWF4KGwsdy5hKTtEKz13LmEqdy5ifWw9JHduZC5NYXRoLm1heChsLCR3bmQuTWF0aC5zcXJ0KEQpKkJlYihNRChXTWIodiwoa1ZjKCksSFVjKSkpKSk7QT1CZWIoTUQoV01iKHYsY1ZjKSkpO0Y9MDtHPTA7az0wO2I9QTtmb3IoaD1uZXcgcm1iKGEpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxMjApO3c9QmRkKG9kZChKRChXTWIoZywodFVjKCksVVRjKSksOCkpLEpEKFdNYihnLFZUYyksOCkpO2lmKEYrdy5hPmwpe0Y9MDtHKz1rK0E7az0wfUlQYyh2LGcsRixHKTtiPSR3bmQuTWF0aC5tYXgoYixGK3cuYSk7az0kd25kLk1hdGgubWF4KGssdy5iKTtGKz13LmErQX11PW5ldyBJcmI7Yz1uZXcgSXJiO2ZvcihDPW5ldyBybWIoYSk7Qy5hPEMuYy5jLmxlbmd0aDspe0I9SkQocG1iKEMpLDEyMCk7ZD15ZGIoTEQoV01iKEIsKExnZCgpLFplZCkpKSk7dD0hQi5xPyhudWxsLG5uYik6Qi5xO2ZvcihmPXQudmMoKS5KYygpO2YuT2IoKTspe2U9SkQoZi5QYigpLDQzKTtpZihMaWIodSxlLmpkKCkpKXtpZihYRChKRChlLmpkKCksMTQ0KS5RZygpKSE9PVhEKGUua2QoKSkpe2lmKGQmJkxpYihjLGUuamQoKSkpe1pnYigpOydGb3VuZCBkaWZmZXJlbnQgdmFsdWVzIGZvciBwcm9wZXJ0eSAnK0pEKGUuamQoKSwxNDQpLk5nKCkrJyBpbiBjb21wb25lbnRzLic7U3RyaW5nLmZyb21DaGFyQ29kZSgxMCl9ZWxzZXtRaWIodSxKRChlLmpkKCksMTQ0KSxlLmtkKCkpO1pNYih2LEpEKGUuamQoKSwxNDQpLGUua2QoKSk7ZCYmUWliKGMsSkQoZS5qZCgpLDE0NCksZS5rZCgpKX19fWVsc2V7UWliKHUsSkQoZS5qZCgpLDE0NCksZS5rZCgpKTtaTWIodixKRChlLmpkKCksMTQ0KSxlLmtkKCkpfX19RlBjKHYpO3JldHVybiB2fQpmdW5jdGlvbiBBMmQoYSxiKXtzd2l0Y2goYS5lKXtjYXNlIDA6Y2FzZSAyOmNhc2UgNDpjYXNlIDY6Y2FzZSA0MjpjYXNlIDQ0OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDg6Y2FzZSAxMDpjYXNlIDEyOmNhc2UgMTQ6Y2FzZSAxNjpjYXNlIDE4OmNhc2UgMjA6Y2FzZSAyMjpjYXNlIDI0OmNhc2UgMjY6Y2FzZSAyODpjYXNlIDMwOmNhc2UgMzI6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzg6cmV0dXJuIG5ldyBOZWUoYS5iLGEuYSxiLGEuYyk7Y2FzZSAxOnJldHVybiBuZXcgdVZkKGEuYSxiLFdUZChiLnpoKCksYS5jKSk7Y2FzZSA0MzpyZXR1cm4gbmV3IEdkZShhLmEsYixXVGQoYi56aCgpLGEuYykpO2Nhc2UgMzpyZXR1cm4gbmV3IHFWZChhLmEsYixXVGQoYi56aCgpLGEuYykpO2Nhc2UgNDU6cmV0dXJuIG5ldyBEZGUoYS5hLGIsV1RkKGIuemgoKSxhLmMpKTtjYXNlIDQxOnJldHVybiBuZXcgWVFkKEpEKHBSZChhLmMpLDI5KSxhLmEsYixXVGQoYi56aCgpLGEuYykpO2Nhc2UgNTA6cmV0dXJuIG5ldyBYZWUoSkQocFJkKGEuYyksMjkpLGEuYSxiLFdUZChiLnpoKCksYS5jKSk7Y2FzZSA1OnJldHVybiBuZXcgSmRlKGEuYSxiLFdUZChiLnpoKCksYS5jKSxhLmQubik7Y2FzZSA0NzpyZXR1cm4gbmV3IE5kZShhLmEsYixXVGQoYi56aCgpLGEuYyksYS5kLm4pO2Nhc2UgNzpyZXR1cm4gbmV3IFgwZChhLmEsYixXVGQoYi56aCgpLGEuYyksYS5kLm4pO2Nhc2UgNDk6cmV0dXJuIG5ldyBfMGQoYS5hLGIsV1RkKGIuemgoKSxhLmMpLGEuZC5uKTtjYXNlIDk6cmV0dXJuIG5ldyBCZGUoYS5hLGIsV1RkKGIuemgoKSxhLmMpKTtjYXNlIDExOnJldHVybiBuZXcgemRlKGEuYSxiLFdUZChiLnpoKCksYS5jKSk7Y2FzZSAxMzpyZXR1cm4gbmV3IHZkZShhLmEsYixXVGQoYi56aCgpLGEuYykpO2Nhc2UgMTU6cmV0dXJuIG5ldyBkYmUoYS5hLGIsV1RkKGIuemgoKSxhLmMpKTtjYXNlIDE3OnJldHVybiBuZXcgWGRlKGEuYSxiLFdUZChiLnpoKCksYS5jKSk7Y2FzZSAxOTpyZXR1cm4gbmV3IFVkZShhLmEsYixXVGQoYi56aCgpLGEuYykpO2Nhc2UgMjE6cmV0dXJuIG5ldyBRZGUoYS5hLGIsV1RkKGIuemgoKSxhLmMpKTtjYXNlIDIzOnJldHVybiBuZXcgaVZkKGEuYSxiLFdUZChiLnpoKCksYS5jKSk7Y2FzZSAyNTpyZXR1cm4gbmV3IHdlZShhLmEsYixXVGQoYi56aCgpLGEuYyksYS5kLm4pO2Nhc2UgMjc6cmV0dXJuIG5ldyByZWUoYS5hLGIsV1RkKGIuemgoKSxhLmMpLGEuZC5uKTtjYXNlIDI5OnJldHVybiBuZXcgbWVlKGEuYSxiLFdUZChiLnpoKCksYS5jKSxhLmQubik7Y2FzZSAzMTpyZXR1cm4gbmV3IGdlZShhLmEsYixXVGQoYi56aCgpLGEuYyksYS5kLm4pO2Nhc2UgMzM6cmV0dXJuIG5ldyB0ZWUoYS5hLGIsV1RkKGIuemgoKSxhLmMpLGEuZC5uKTtjYXNlIDM1OnJldHVybiBuZXcgb2VlKGEuYSxiLFdUZChiLnpoKCksYS5jKSxhLmQubik7Y2FzZSAzNzpyZXR1cm4gbmV3IGllZShhLmEsYixXVGQoYi56aCgpLGEuYyksYS5kLm4pO2Nhc2UgMzk6cmV0dXJuIG5ldyBiZWUoYS5hLGIsV1RkKGIuemgoKSxhLmMpLGEuZC5uKTtjYXNlIDQwOnJldHVybiBuZXcgbmNlKGIsV1RkKGIuemgoKSxhLmMpKTtkZWZhdWx0OnRocm93IHNjYihuZXcgcXooJ1Vua25vd24gZmVhdHVyZSBzdHlsZTogJythLmUpKTt9fQpmdW5jdGlvbiBrWWMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtmPTA7ZT1hLmEuYjtmb3IoaT1HdGIoYS5hLDApO2kuYiE9aS5kLmM7KXtoPUpEKFV0YihpKSwyMzkpO2c9KGYrMSkvKGUrMSk7aWYoIWEuYyYmIWEuZCl7cmV0dXJufWVsc2UgaWYoISFhLmMmJiFhLmQpe2EuZz10cnVlO2lmKGEuYj09KFRnZCgpLFBnZCkpe2Q9YS5jLmUuYithLmMuZi5iK2EuZSooZisxKTtiPW5ldyBFZGQoQmViKE1EKFdNYihhLmMsKHRVYygpLGhVYykpKSkrYS5lLGQpO2M9bmV3IEVkZChCZWIoTUQoV01iKGEuYyxpVWMpKSktYS5lLGQpfWVsc2UgaWYoYS5iPT1RZ2Qpe2Q9YS5jLmUuYithLmMuZi5iK2EuZSooZisxKTtiPW5ldyBFZGQoQmViKE1EKFdNYihhLmMsKHRVYygpLGlVYykpKSktYS5lLGQpO2M9bmV3IEVkZChCZWIoTUQoV01iKGEuYyxoVWMpKSkrYS5lLGQpfWVsc2UgaWYoYS5iPT1TZ2Qpe2Q9YS5jLmUuYSthLmMuZi5hK2EuZSooZisxKTtiPW5ldyBFZGQoZCxCZWIoTUQoV01iKGEuYywodFVjKCksaFVjKSkpKSthLmUpO2M9bmV3IEVkZChkLEJlYihNRChXTWIoYS5jLGlVYykpKS1hLmUpfWVsc2V7ZD1hLmMuZS5hK2EuYy5mLmErYS5lKihmKzEpO2I9bmV3IEVkZChkLEJlYihNRChXTWIoYS5jLCh0VWMoKSxpVWMpKSkpLWEuZSk7Yz1uZXcgRWRkKGQsQmViKE1EKFdNYihhLmMsaFVjKSkpK2EuZSl9fWVsc2UgaWYoISFhLmMmJiEhYS5kKXtpZihhLmI9PShUZ2QoKSxQZ2QpKXtkPWEuZC5lLmIqZysoYS5jLmUuYithLmMuZi5iKSooMS1nKTtiPW5ldyBFZGQoQmViKE1EKFdNYihhLmMsKHRVYygpLGhVYykpKSkrYS5lLGQpO2M9bmV3IEVkZChCZWIoTUQoV01iKGEuYyxpVWMpKSktYS5lLGQpfWVsc2UgaWYoYS5iPT1RZ2Qpe2Q9YS5kLmUuYipnKyhhLmMuZS5iK2EuYy5mLmIpKigxLWcpO2I9bmV3IEVkZChCZWIoTUQoV01iKGEuYywodFVjKCksaVVjKSkpKS1hLmUsZCk7Yz1uZXcgRWRkKEJlYihNRChXTWIoYS5jLGhVYykpKSthLmUsZCl9ZWxzZSBpZihhLmI9PVNnZCl7ZD1hLmQuZS5hKmcrKGEuYy5lLmErYS5jLmYuYSkqKDEtZyk7Yj1uZXcgRWRkKGQsQmViKE1EKFdNYihhLmMsKHRVYygpLGhVYykpKSkrYS5lKTtjPW5ldyBFZGQoZCxCZWIoTUQoV01iKGEuYyxpVWMpKSktYS5lKX1lbHNle2Q9YS5kLmUuYSpnKyhhLmMuZS5hK2EuYy5mLmEpKigxLWcpO2I9bmV3IEVkZChkLEJlYihNRChXTWIoYS5jLCh0VWMoKSxpVWMpKSkpLWEuZSk7Yz1uZXcgRWRkKGQsQmViKE1EKFdNYihhLmMsaFVjKSkpK2EuZSl9fWVsc2V7YS5mPXRydWU7aWYoYS5iPT0oVGdkKCksUGdkKSl7ZD1hLmQuZS5iLWEuZSooZisxKTtiPW5ldyBFZGQoQmViKE1EKFdNYihhLmQsKHRVYygpLGhVYykpKSkrYS5lLGQpO2M9bmV3IEVkZChCZWIoTUQoV01iKGEuZCxpVWMpKSktYS5lLGQpfWVsc2UgaWYoYS5iPT1RZ2Qpe2Q9YS5kLmUuYi1hLmUqKGYrMSk7Yj1uZXcgRWRkKEJlYihNRChXTWIoYS5kLCh0VWMoKSxpVWMpKSkpLWEuZSxkKTtjPW5ldyBFZGQoQmViKE1EKFdNYihhLmQsaFVjKSkpK2EuZSxkKX1lbHNlIGlmKGEuYj09U2dkKXtkPWEuZC5lLmEtYS5lKihmKzEpO2I9bmV3IEVkZChkLEJlYihNRChXTWIoYS5kLCh0VWMoKSxoVWMpKSkpK2EuZSk7Yz1uZXcgRWRkKGQsQmViKE1EKFdNYihhLmQsaVVjKSkpLWEuZSl9ZWxzZXtkPWEuZC5lLmEtYS5lKihmKzEpO2I9bmV3IEVkZChkLEJlYihNRChXTWIoYS5kLCh0VWMoKSxpVWMpKSkpLWEuZSk7Yz1uZXcgRWRkKGQsQmViKE1EKFdNYihhLmQsaFVjKSkpK2EuZSl9fUpEKGguYSw4KS5hPWIuYTtKRChoLmEsOCkuYj1iLmI7aC5iLmE9Yy5hO2guYi5iPWMuYjsrK2Z9fQpmdW5jdGlvbiBEQShhLGIsYyxkLGUsZil7dmFyIGcsaCxpLGosayxsLG0sbixvLHAscSxyO3N3aXRjaChiKXtjYXNlIDcxOmg9ZC5xLmdldEZ1bGxZZWFyKCktaHNlPj0tMTkwMD8xOjA7Yz49ND9RZ2IoYSxXQyhPQyhoSiwxKSxocmUsMiw2LFtqc2Usa3NlXSlbaF0pOlFnYihhLFdDKE9DKGhKLDEpLGhyZSwyLDYsWydCQycsJ0FEJ10pW2hdKTticmVhaztjYXNlIDEyMTpzQShhLGMsZCk7YnJlYWs7Y2FzZSA3NzpyQShhLGMsZCk7YnJlYWs7Y2FzZSAxMDc6aT1lLnEuZ2V0SG91cnMoKTtpPT0wP01BKGEsMjQsYyk6TUEoYSxpLGMpO2JyZWFrO2Nhc2UgODM6cUEoYSxjLGUpO2JyZWFrO2Nhc2UgNjk6az1kLnEuZ2V0RGF5KCk7Yz09NT9RZ2IoYSxXQyhPQyhoSiwxKSxocmUsMiw2LFsnUycsJ00nLCdUJywnVycsJ1QnLCdGJywnUyddKVtrXSk6Yz09ND9RZ2IoYSxXQyhPQyhoSiwxKSxocmUsMiw2LFtsc2UsbXNlLG5zZSxvc2UscHNlLHFzZSxyc2VdKVtrXSk6UWdiKGEsV0MoT0MoaEosMSksaHJlLDIsNixbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddKVtrXSk7YnJlYWs7Y2FzZSA5NzplLnEuZ2V0SG91cnMoKT49MTImJmUucS5nZXRIb3VycygpPDI0P1FnYihhLFdDKE9DKGhKLDEpLGhyZSwyLDYsWydBTScsJ1BNJ10pWzFdKTpRZ2IoYSxXQyhPQyhoSiwxKSxocmUsMiw2LFsnQU0nLCdQTSddKVswXSk7YnJlYWs7Y2FzZSAxMDQ6bD1lLnEuZ2V0SG91cnMoKSUxMjtsPT0wP01BKGEsMTIsYyk6TUEoYSxsLGMpO2JyZWFrO2Nhc2UgNzU6bT1lLnEuZ2V0SG91cnMoKSUxMjtNQShhLG0sYyk7YnJlYWs7Y2FzZSA3MjpuPWUucS5nZXRIb3VycygpO01BKGEsbixjKTticmVhaztjYXNlIDk5Om89ZC5xLmdldERheSgpO2M9PTU/UWdiKGEsV0MoT0MoaEosMSksaHJlLDIsNixbJ1MnLCdNJywnVCcsJ1cnLCdUJywnRicsJ1MnXSlbb10pOmM9PTQ/UWdiKGEsV0MoT0MoaEosMSksaHJlLDIsNixbbHNlLG1zZSxuc2Usb3NlLHBzZSxxc2UscnNlXSlbb10pOmM9PTM/UWdiKGEsV0MoT0MoaEosMSksaHJlLDIsNixbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddKVtvXSk6TUEoYSxvLDEpO2JyZWFrO2Nhc2UgNzY6cD1kLnEuZ2V0TW9udGgoKTtjPT01P1FnYihhLFdDKE9DKGhKLDEpLGhyZSwyLDYsWydKJywnRicsJ00nLCdBJywnTScsJ0onLCdKJywnQScsJ1MnLCdPJywnTicsJ0QnXSlbcF0pOmM9PTQ/UWdiKGEsV0MoT0MoaEosMSksaHJlLDIsNixbWHJlLFlyZSxacmUsJHJlLF9yZSxhc2UsYnNlLGNzZSxkc2UsZXNlLGZzZSxnc2VdKVtwXSk6Yz09Mz9RZ2IoYSxXQyhPQyhoSiwxKSxocmUsMiw2LFsnSmFuJywnRmViJywnTWFyJywnQXByJyxfcmUsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddKVtwXSk6TUEoYSxwKzEsYyk7YnJlYWs7Y2FzZSA4MTpxPWQucS5nZXRNb250aCgpLzN8MDtjPDQ/UWdiKGEsV0MoT0MoaEosMSksaHJlLDIsNixbJ1ExJywnUTInLCdRMycsJ1E0J10pW3FdKTpRZ2IoYSxXQyhPQyhoSiwxKSxocmUsMiw2LFsnMXN0IHF1YXJ0ZXInLCcybmQgcXVhcnRlcicsJzNyZCBxdWFydGVyJywnNHRoIHF1YXJ0ZXInXSlbcV0pO2JyZWFrO2Nhc2UgMTAwOnI9ZC5xLmdldERhdGUoKTtNQShhLHIsYyk7YnJlYWs7Y2FzZSAxMDk6aj1lLnEuZ2V0TWludXRlcygpO01BKGEsaixjKTticmVhaztjYXNlIDExNTpnPWUucS5nZXRTZWNvbmRzKCk7TUEoYSxnLGMpO2JyZWFrO2Nhc2UgMTIyOmM8ND9RZ2IoYSxmLmNbMF0pOlFnYihhLGYuY1sxXSk7YnJlYWs7Y2FzZSAxMTg6UWdiKGEsZi5iKTticmVhaztjYXNlIDkwOmM8Mz9RZ2IoYSxXQShmKSk6Yz09Mz9RZ2IoYSxWQShmKSk6UWdiKGEsWUEoZi5hKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gZmFsc2U7fXJldHVybiB0cnVlfQpmdW5jdGlvbiByJGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRCxGLEcsSDtoJGIoYik7aT1KRChuRGQoKCFiLmImJihiLmI9bmV3IHJlZSh2MyxiLDQsNykpLGIuYiksMCksODQpO2s9SkQobkRkKCghYi5jJiYoYi5jPW5ldyByZWUodjMsYiw1LDgpKSxiLmMpLDApLDg0KTtoPV9CZChpKTtqPV9CZChrKTtnPSghYi5hJiYoYi5hPW5ldyBYMGQodzMsYiw2LDYpKSxiLmEpLmk9PTA/bnVsbDpKRChuRGQoKCFiLmEmJihiLmE9bmV3IFgwZCh3MyxiLDYsNikpLGIuYSksMCksMTY4KTtBPUpEKE5pYihhLmEsaCksOSk7Rj1KRChOaWIoYS5hLGopLDkpO0I9bnVsbDtHPW51bGw7aWYoUkQoaSwxOTMpKXt3PUpEKE5pYihhLmEsaSksMzA2KTtpZihSRCh3LDExKSl7Qj1KRCh3LDExKX1lbHNlIGlmKFJEKHcsOSkpe0E9SkQodyw5KTtCPUpEKE1sYihBLmosMCksMTEpfX1pZihSRChrLDE5Mykpe0Q9SkQoTmliKGEuYSxrKSwzMDYpO2lmKFJEKEQsMTEpKXtHPUpEKEQsMTEpfWVsc2UgaWYoUkQoRCw5KSl7Rj1KRChELDkpO0c9SkQoTWxiKEYuaiwwKSwxMSl9fWlmKCFBfHwhRil7dGhyb3cgc2NiKG5ldyBaOGMoJ1RoZSBzb3VyY2Ugb3IgdGhlIHRhcmdldCBvZiBlZGdlICcrYisnIGNvdWxkIG5vdCBiZSBmb3VuZC4gJysnVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hlbiBhbiBlZGdlIGNvbm5lY3RzIGEgbm9kZSBsYWlkIG91dCBieSBFTEsgTGF5ZXJlZCB0byBhIG5vZGUgaW4gJysnYW5vdGhlciBsZXZlbCBvZiBoaWVyYXJjaHkgbGFpZCBvdXQgYnkgZWl0aGVyIGFub3RoZXIgaW5zdGFuY2Ugb2YgRUxLIExheWVyZWQgb3IgYW5vdGhlciAnKydsYXlvdXQgYWxnb3JpdGhtIGFsbHRvZ2V0aGVyLiBUaGUgZm9ybWVyIGNhbiBiZSBzb2x2ZWQgYnkgc2V0dGluZyB0aGUgaGllcmFyY2h5SGFuZGxpbmcgJysnb3B0aW9uIHRvIElOQ0xVREVfQ0hJTERSRU4uJykpfXA9bmV3IGtXYjtVTWIocCxiKTtaTWIocCwoSXFjKCksa3FjKSxiKTtaTWIocCwoQndjKCksUnVjKSxudWxsKTtuPUpEKFdNYihkLFdwYyksMjIpO0E9PUYmJm4uRWMoKCRvYygpLFpvYykpO2lmKCFCKXt2PShFeWMoKSxDeWMpO0M9bnVsbDtpZighIWcmJmNqZChKRChXTWIoQSxFdmMpLDEwMCkpKXtDPW5ldyBFZGQoZy5qLGcuayk7bm5kKEMsT3RkKGIpKTtvbmQoQyxjKTtpZihrQ2QoaixoKSl7dj1CeWM7bWRkKEMsQS5uKX19Qj1xWGIoQSxDLHYsZCl9aWYoIUcpe3Y9KEV5YygpLEJ5Yyk7SD1udWxsO2lmKCEhZyYmY2pkKEpEKFdNYihGLEV2YyksMTAwKSkpe0g9bmV3IEVkZChnLmIsZy5jKTtubmQoSCxPdGQoYikpO29uZChILGMpfUc9cVhiKEYsSCx2LGdZYihGKSl9Z1diKHAsQik7aFdiKHAsRyk7KEIuZS5jLmxlbmd0aD4xfHxCLmcuYy5sZW5ndGg+MXx8Ry5lLmMubGVuZ3RoPjF8fEcuZy5jLmxlbmd0aD4xKSYmbi5FYygoJG9jKCksVW9jKSk7Zm9yKG09bmV3IENIZCgoIWIubiYmKGIubj1uZXcgWDBkKHozLGIsMSw3KSksYi5uKSk7bS5lIT1tLmkuZ2MoKTspe2w9SkQoQUhkKG0pLDE1Myk7aWYoIXlkYihMRChrc2QobCxzdmMpKSkmJiEhbC5hKXtxPXQkYihsKTtJbGIocC5iLHEpO3N3aXRjaChKRChXTWIocSx3dWMpLDI3NikuZyl7Y2FzZSAxOmNhc2UgMjpuLkVjKCgkb2MoKSxTb2MpKTticmVhaztjYXNlIDA6bi5FYygoJG9jKCksUW9jKSk7Wk1iKHEsd3VjLChuaGQoKSxraGQpKTt9fX1mPUpEKFdNYihkLG91YyksMzIzKTtyPUpEKFdNYihkLG52YyksMzI0KTtlPWY9PShjbmMoKSxfbWMpfHxyPT0oTXhjKCksSXhjKTtpZighIWcmJighZy5hJiYoZy5hPW5ldyBxVmQodTMsZyw1KSksZy5hKS5pIT0wJiZlKXtzPWFuZChnKTtvPW5ldyBSZGQ7Zm9yKHU9R3RiKHMsMCk7dS5iIT11LmQuYzspe3Q9SkQoVXRiKHUpLDgpO0F0YihvLG5ldyBGZGQodCkpfVpNYihwLGxxYyxvKX1yZXR1cm4gcH0KZnVuY3Rpb24gSVdjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSTtDPTA7RD0wO0E9bmV3IElyYjt2PUpEKHp1YihJQmIoRkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYiwxNikpLG5ldyB5WGMpLG5ldyBhWGMpKSwxNykuYSsxO0I9U0MoY0UsaXNlLDMwLHYsMTUsMSk7cT1TQyhjRSxpc2UsMzAsdiwxNSwxKTtmb3IocD0wO3A8djtwKyspe0JbcF09MDtxW3BdPTB9aT1KRCh5QmIoQUJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYSwxNikpKSxoQWIobmV3IHpBYixuZXcgeEFiLG5ldyBGQWIsV0MoT0MoSEwsMSksRXJlLDEzMSwwLFsobEFiKCksakFiKV0pKSksMTUpO2ZvcihrPWkuSmMoKTtrLk9iKCk7KXtqPUpEKGsuUGIoKSw2NSk7Rz1KRChXTWIoai5iLChrVmMoKSxpVmMpKSwxNykuYTtJPUpEKFdNYihqLmMsaVZjKSwxNykuYTt1PUktRztpZih1PjEpe2ZvcihoPUcrMTtoPEk7aCsrKXtsPWg7dz1KRCh5QmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKGEuYiwxNikpLG5ldyBTWGMobCkpLGhBYihuZXcgekFiLG5ldyB4QWIsbmV3IEZBYixXQyhPQyhITCwxKSxFcmUsMTMxLDAsW2pBYl0pKSksMTUpO289MDtpZihiPT0oVGdkKCksUGdkKXx8Yj09UWdkKXt3LmdkKG5ldyBZWGMpO2ZvcihvPTA7bzx3LmdjKCk7bysrKXtyPShoLUcpLyhJLUcpO2lmKEpEKHcuWGIobyksMzkpLmUuYj5qLmIuZS5iKigxLXIpK2ouYy5lLmIqcil7YnJlYWt9fWlmKHcuZ2MoKT4wKXtIPWouYS5iPT0wP29kZChqLmIuZSk6SkQoRnRiKGouYSksOCk7dD1tZGQob2RkKEpEKHcuWGIody5nYygpLTEpLDM5KS5lKSxKRCh3LlhiKHcuZ2MoKS0xKSwzOSkuZik7bT1tZGQob2RkKEpEKHcuWGIoMCksMzkpLmUpLEpEKHcuWGIoMCksMzkpLmYpO2lmKG8+PXcuZ2MoKS0xJiZILmI+dC5iJiZqLmMuZS5iPnQuYil7Y29udGludWV9aWYobzw9MCYmSC5iPG0uYSYmai5jLmUuYjxtLmIpe2NvbnRpbnVlfX19ZWxzZXt3LmdkKG5ldyBhWWMpO2ZvcihvPTA7bzx3LmdjKCk7bysrKXtyPShoLUcpLyhJLUcpO2lmKEpEKHcuWGIobyksMzkpLmUuYT5qLmIuZS5hKigxLXIpK2ouYy5lLmEqcil7YnJlYWt9fWlmKHcuZ2MoKT4wKXtIPWouYS5iPT0wP29kZChqLmIuZSk6SkQoRnRiKGouYSksOCk7dD1tZGQob2RkKEpEKHcuWGIody5nYygpLTEpLDM5KS5lKSxKRCh3LlhiKHcuZ2MoKS0xKSwzOSkuZik7bT1tZGQob2RkKEpEKHcuWGIoMCksMzkpLmUpLEpEKHcuWGIoMCksMzkpLmYpO2lmKG8+PXcuZ2MoKS0xJiZILmE+dC5hJiZqLmMuZS5hPnQuYSl7Y29udGludWV9aWYobzw9MCYmSC5hPG0uYSYmai5jLmUuYTxtLmEpe2NvbnRpbnVlfX19ZT1uZXcgQ2RkO2Y9bmV3IENkZDtBdGIoai5hLGUpO0F0YihqLmEsZik7Zz1uZXcgTW9kKGUsZixqKTtzPUljYihKY2IoaCwzMiksdWNiKG8sVXNlKSk7aWYoTGliKEEseWZiKHMpKSl7bj1KRChOaWIoQSx5ZmIocykpLDY2MCk7QXRiKG4uYSxnKTtVZ2Qobi5iKT9odWIobi5hLG5ldyBvWWMpOmh1YihuLmEsbmV3IHNZYyk7a1ljKG4pfWVsc2V7bj1uZXcgbFljKG89PTA/bnVsbDpKRCh3LlhiKG8tMSksMzkpLG89PXcuZ2MoKT9udWxsOkpEKHcuWGIobyksMzkpLGcsYSk7UWliKEEseWZiKHMpLG4pfWlmKGI9PVBnZHx8Yj09UWdkKXtuLmYmJm4uZC5lLmI8PUJlYihNRChXTWIoYSwodFVjKCksY1VjKSkpKSYmKytDO24uZyYmbi5jLmUuYituLmMuZi5iPj1CZWIoTUQoV01iKGEsKHRVYygpLGJVYykpKSkmJisrRH1lbHNle24uZiYmbi5kLmUuYTw9QmViKE1EKFdNYihhLCh0VWMoKSxhVWMpKSkpJiYrK0M7bi5nJiZuLmMuZS5hK24uYy5mLmE+PUJlYihNRChXTWIoYSwodFVjKCksX1RjKSkpKSYmKytEfX19ZWxzZSBpZih1PT0wKXtLV2Moail9ZWxzZSBpZih1PDApeysrQltHXTsrK3FbSV07Rj1GV2MoaixiLGEsbmV3IHhvZChqZmIoQyksamZiKEQpKSxjLGQsbmV3IHhvZChqZmIocVtJXSksamZiKEJbR10pKSk7Qz1KRChGLmEsMTcpLmE7RD1KRChGLmIsMTcpLmF9fX0KZnVuY3Rpb24gcjZkKGEpe2lmKGEuZ2IpcmV0dXJuO2EuZ2I9dHJ1ZTthLmI9TnZkKGEsMCk7TXZkKGEuYiwxOCk7U3ZkKGEuYiwxOSk7YS5hPU52ZChhLDEpO012ZChhLmEsMSk7U3ZkKGEuYSwyKTtTdmQoYS5hLDMpO1N2ZChhLmEsNCk7U3ZkKGEuYSw1KTthLm89TnZkKGEsMik7TXZkKGEubyw4KTtNdmQoYS5vLDkpO1N2ZChhLm8sMTApO1N2ZChhLm8sMTEpO1N2ZChhLm8sMTIpO1N2ZChhLm8sMTMpO1N2ZChhLm8sMTQpO1N2ZChhLm8sMTUpO1N2ZChhLm8sMTYpO1N2ZChhLm8sMTcpO1N2ZChhLm8sMTgpO1N2ZChhLm8sMTkpO1N2ZChhLm8sMjApO1N2ZChhLm8sMjEpO1N2ZChhLm8sMjIpO1N2ZChhLm8sMjMpO1J2ZChhLm8pO1J2ZChhLm8pO1J2ZChhLm8pO1J2ZChhLm8pO1J2ZChhLm8pO1J2ZChhLm8pO1J2ZChhLm8pO1J2ZChhLm8pO1J2ZChhLm8pO1J2ZChhLm8pO2EucD1OdmQoYSwzKTtNdmQoYS5wLDIpO012ZChhLnAsMyk7TXZkKGEucCw0KTtNdmQoYS5wLDUpO1N2ZChhLnAsNik7U3ZkKGEucCw3KTtSdmQoYS5wKTtSdmQoYS5wKTthLnE9TnZkKGEsNCk7TXZkKGEucSw4KTthLnY9TnZkKGEsNSk7U3ZkKGEudiw5KTtSdmQoYS52KTtSdmQoYS52KTtSdmQoYS52KTthLnc9TnZkKGEsNik7TXZkKGEudywyKTtNdmQoYS53LDMpO012ZChhLncsNCk7U3ZkKGEudyw1KTthLkI9TnZkKGEsNyk7U3ZkKGEuQiwxKTtSdmQoYS5CKTtSdmQoYS5CKTtSdmQoYS5CKTthLlE9TnZkKGEsOCk7U3ZkKGEuUSwwKTtSdmQoYS5RKTthLlI9TnZkKGEsOSk7TXZkKGEuUiwxKTthLlM9TnZkKGEsMTApO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO1J2ZChhLlMpO2EuVD1OdmQoYSwxMSk7U3ZkKGEuVCwxMCk7U3ZkKGEuVCwxMSk7U3ZkKGEuVCwxMik7U3ZkKGEuVCwxMyk7U3ZkKGEuVCwxNCk7UnZkKGEuVCk7UnZkKGEuVCk7YS5VPU52ZChhLDEyKTtNdmQoYS5VLDIpO012ZChhLlUsMyk7U3ZkKGEuVSw0KTtTdmQoYS5VLDUpO1N2ZChhLlUsNik7U3ZkKGEuVSw3KTtSdmQoYS5VKTthLlY9TnZkKGEsMTMpO1N2ZChhLlYsMTApO2EuVz1OdmQoYSwxNCk7TXZkKGEuVywxOCk7TXZkKGEuVywxOSk7TXZkKGEuVywyMCk7U3ZkKGEuVywyMSk7U3ZkKGEuVywyMik7U3ZkKGEuVywyMyk7YS5iYj1OdmQoYSwxNSk7TXZkKGEuYmIsMTApO012ZChhLmJiLDExKTtNdmQoYS5iYiwxMik7TXZkKGEuYmIsMTMpO012ZChhLmJiLDE0KTtNdmQoYS5iYiwxNSk7TXZkKGEuYmIsMTYpO1N2ZChhLmJiLDE3KTtSdmQoYS5iYik7UnZkKGEuYmIpO2EuZWI9TnZkKGEsMTYpO012ZChhLmViLDIpO012ZChhLmViLDMpO012ZChhLmViLDQpO012ZChhLmViLDUpO012ZChhLmViLDYpO012ZChhLmViLDcpO1N2ZChhLmViLDgpO1N2ZChhLmViLDkpO2EuYWI9TnZkKGEsMTcpO012ZChhLmFiLDApO012ZChhLmFiLDEpO2EuSD1OdmQoYSwxOCk7U3ZkKGEuSCwwKTtTdmQoYS5ILDEpO1N2ZChhLkgsMik7U3ZkKGEuSCwzKTtTdmQoYS5ILDQpO1N2ZChhLkgsNSk7UnZkKGEuSCk7YS5kYj1OdmQoYSwxOSk7U3ZkKGEuZGIsMik7YS5jPU92ZChhLDIwKTthLmQ9T3ZkKGEsMjEpO2EuZT1PdmQoYSwyMik7YS5mPU92ZChhLDIzKTthLmk9T3ZkKGEsMjQpO2EuZz1PdmQoYSwyNSk7YS5qPU92ZChhLDI2KTthLms9T3ZkKGEsMjcpO2Eubj1PdmQoYSwyOCk7YS5yPU92ZChhLDI5KTthLnM9T3ZkKGEsMzApO2EudD1PdmQoYSwzMSk7YS51PU92ZChhLDMyKTthLmZiPU92ZChhLDMzKTthLkE9T3ZkKGEsMzQpO2EuQz1PdmQoYSwzNSk7YS5EPU92ZChhLDM2KTthLkY9T3ZkKGEsMzcpO2EuRz1PdmQoYSwzOCk7YS5JPU92ZChhLDM5KTthLko9T3ZkKGEsNDApO2EuTD1PdmQoYSw0MSk7YS5NPU92ZChhLDQyKTthLk49T3ZkKGEsNDMpO2EuTz1PdmQoYSw0NCk7YS5QPU92ZChhLDQ1KTthLlg9T3ZkKGEsNDYpO2EuWT1PdmQoYSw0Nyk7YS5aPU92ZChhLDQ4KTthLiQ9T3ZkKGEsNDkpO2EuXz1PdmQoYSw1MCk7YS5jYj1PdmQoYSw1MSk7YS5LPU92ZChhLDUyKX0KZnVuY3Rpb24gcCRiKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHO2c9bmV3IE10Yjt3PUpEKFdNYihjLChCd2MoKSxydWMpKSw4Nik7cD0wO3hlKGcsKCFiLmEmJihiLmE9bmV3IFgwZChBMyxiLDEwLDExKSksYi5hKSk7d2hpbGUoZy5iIT0wKXtrPUpEKGcuYj09MD9udWxsOihyRGIoZy5iIT0wKSxLdGIoZyxnLmEuYSkpLDI3KTtqPVp3ZChrKTsoWEQoa3NkKGosY3VjKSkhPT1YRCgobnljKCksa3ljKSl8fFhEKGtzZChqLHB1YykpPT09WEQoKHpuYygpLHluYykpfHxYRChrc2QoaixwdWMpKT09PVhEKCh6bmMoKSx3bmMpKXx8eWRiKExEKGtzZChqLGV1YykpKXx8WEQoa3NkKGosWXRjKSkhPT1YRCgoY1ViKCksYlViKSl8fFhEKGtzZChqLFp1YykpPT09WEQoKGR5YygpLFd4YykpfHxYRChrc2QoaixadWMpKT09PVhEKChkeWMoKSxYeGMpKXx8WEQoa3NkKGosJHVjKSk9PT1YRCgoY3hjKCksVndjKSl8fFhEKGtzZChqLCR1YykpPT09WEQoKGN4YygpLFh3YykpKSYmIXlkYihMRChrc2QoayxhdWMpKSkmJm1zZChrLChJcWMoKSxqcWMpLGpmYihwKyspKTtyPSF5ZGIoTEQoa3NkKGssc3ZjKSkpO2lmKHIpe209KCFrLmEmJihrLmE9bmV3IFgwZChBMyxrLDEwLDExKSksay5hKS5pIT0wO289bSRiKGspO249WEQoa3NkKGssSXVjKSk9PT1YRCgoZWlkKCksYmlkKSk7Rz0hbHNkKGssKExnZCgpLE5lZCkpfHxiZ2IoT0Qoa3NkKGssTmVkKSkpO3U9bnVsbDtpZihHJiZuJiYobXx8bykpe3U9aiRiKGspO1pNYih1LHJ1Yyx3KTtYTWIodSxTdmMpJiZLd2MobmV3IFV3YyhCZWIoTUQoV01iKHUsU3ZjKSkpKSx1KTtpZihKRChrc2QoayxvdmMpLDE4MSkuZ2MoKSE9MCl7bD11O0VCYihuZXcgUkJiKG51bGwsKCFrLmMmJihrLmM9bmV3IFgwZChCMyxrLDksOSkpLG5ldyBHdmIoay5jLDE2KSkpLG5ldyBHJGIobCkpO2YkYihrLHUpfX1BPWM7Qj1KRChOaWIoYS5hLFp3ZChrKSksOSk7ISFCJiYoQT1CLmUpO3Q9dSRiKGEsayxBKTtpZih1KXt0LmU9dTt1LmU9dDt4ZShnLCghay5hJiYoay5hPW5ldyBYMGQoQTMsaywxMCwxMSkpLGsuYSkpfX19cD0wO0R0YihnLGIsZy5jLmIsZy5jKTt3aGlsZShnLmIhPTApe2Y9SkQoZy5iPT0wP251bGw6KHJEYihnLmIhPTApLEt0YihnLGcuYS5hKSksMjcpO2ZvcihpPW5ldyBDSGQoKCFmLmImJihmLmI9bmV3IFgwZCh4MyxmLDEyLDMpKSxmLmIpKTtpLmUhPWkuaS5nYygpOyl7aD1KRChBSGQoaSksODUpO2gkYihoKTsoWEQoa3NkKGIsY3VjKSkhPT1YRCgobnljKCksa3ljKSl8fFhEKGtzZChiLHB1YykpPT09WEQoKHpuYygpLHluYykpfHxYRChrc2QoYixwdWMpKT09PVhEKCh6bmMoKSx3bmMpKXx8eWRiKExEKGtzZChiLGV1YykpKXx8WEQoa3NkKGIsWXRjKSkhPT1YRCgoY1ViKCksYlViKSl8fFhEKGtzZChiLFp1YykpPT09WEQoKGR5YygpLFd4YykpfHxYRChrc2QoYixadWMpKT09PVhEKChkeWMoKSxYeGMpKXx8WEQoa3NkKGIsJHVjKSk9PT1YRCgoY3hjKCksVndjKSl8fFhEKGtzZChiLCR1YykpPT09WEQoKGN4YygpLFh3YykpKSYmbXNkKGgsKElxYygpLGpxYyksamZiKHArKykpO0Q9X0JkKEpEKG5EZCgoIWguYiYmKGguYj1uZXcgcmVlKHYzLGgsNCw3KSksaC5iKSwwKSw4NCkpO0Y9X0JkKEpEKG5EZCgoIWguYyYmKGguYz1uZXcgcmVlKHYzLGgsNSw4KSksaC5jKSwwKSw4NCkpO2lmKHlkYihMRChrc2QoaCxzdmMpKSl8fHlkYihMRChrc2QoRCxzdmMpKSl8fHlkYihMRChrc2QoRixzdmMpKSkpe2NvbnRpbnVlfXE9U3RkKGgpJiZ5ZGIoTEQoa3NkKEQsTnVjKSkpJiZ5ZGIoTEQoa3NkKGgsT3VjKSkpO3Y9ZjtxfHxrQ2QoRixEKT8odj1EKTprQ2QoRCxGKSYmKHY9Rik7QT1jO0I9SkQoTmliKGEuYSx2KSw5KTshIUImJihBPUIuZSk7cz1yJGIoYSxoLHYsQSk7Wk1iKHMsKElxYygpLEpwYyksbCRiKGEsaCxiLGMpKX1uPVhEKGtzZChmLEl1YykpPT09WEQoKGVpZCgpLGJpZCkpO2lmKG4pe2ZvcihlPW5ldyBDSGQoKCFmLmEmJihmLmE9bmV3IFgwZChBMyxmLDEwLDExKSksZi5hKSk7ZS5lIT1lLmkuZ2MoKTspe2Q9SkQoQUhkKGUpLDI3KTtHPSFsc2QoZCwoTGdkKCksTmVkKSl8fGJnYihPRChrc2QoZCxOZWQpKSk7Qz1YRChrc2QoZCxJdWMpKT09PVhEKGJpZCk7RyYmQyYmKER0YihnLGQsZy5jLmIsZy5jKSx0cnVlKX19fX0KZnVuY3Rpb24gSXFjKCl7SXFjPVpjYjt2YXIgYSxiO2txYz1uZXcgS0JkKGV2ZSk7SnBjPW5ldyBLQmQoJ2Nvb3JkaW5hdGVPcmlnaW4nKTt1cWM9bmV3IEtCZCgncHJvY2Vzc29ycycpO0lwYz1uZXcgTEJkKCdjb21wb3VuZE5vZGUnLCh4ZGIoKSxmYWxzZSkpO1pwYz1uZXcgTEJkKCdpbnNpZGVDb25uZWN0aW9ucycsZmFsc2UpO2xxYz1uZXcgS0JkKCdvcmlnaW5hbEJlbmRwb2ludHMnKTttcWM9bmV3IEtCZCgnb3JpZ2luYWxEdW1teU5vZGVQb3NpdGlvbicpO25xYz1uZXcgS0JkKCdvcmlnaW5hbExhYmVsRWRnZScpO3dxYz1uZXcgS0JkKCdyZXByZXNlbnRlZExhYmVscycpO09wYz1uZXcgS0JkKCdlbmRMYWJlbHMnKTtQcGM9bmV3IEtCZCgnZW5kTGFiZWwub3JpZ2luJyk7Y3FjPW5ldyBMQmQoJ2xhYmVsU2lkZScsKG9pZCgpLG5pZCkpO2lxYz1uZXcgTEJkKCdtYXhFZGdlVGhpY2tuZXNzJywwKTt4cWM9bmV3IExCZCgncmV2ZXJzZWQnLGZhbHNlKTt2cWM9bmV3IEtCZChmdmUpO2ZxYz1uZXcgTEJkKCdsb25nRWRnZVNvdXJjZScsbnVsbCk7Z3FjPW5ldyBMQmQoJ2xvbmdFZGdlVGFyZ2V0JyxudWxsKTtlcWM9bmV3IExCZCgnbG9uZ0VkZ2VIYXNMYWJlbER1bW1pZXMnLGZhbHNlKTtkcWM9bmV3IExCZCgnbG9uZ0VkZ2VCZWZvcmVMYWJlbER1bW15JyxmYWxzZSk7TnBjPW5ldyBMQmQoJ2VkZ2VDb25zdHJhaW50JywoVG5jKCksUm5jKSk7X3BjPW5ldyBLQmQoJ2luTGF5ZXJMYXlvdXRVbml0Jyk7JHBjPW5ldyBMQmQoJ2luTGF5ZXJDb25zdHJhaW50JywocXBjKCksb3BjKSk7YXFjPW5ldyBMQmQoJ2luTGF5ZXJTdWNjZXNzb3JDb25zdHJhaW50JyxuZXcgVWxiKTticWM9bmV3IExCZCgnaW5MYXllclN1Y2Nlc3NvckNvbnN0cmFpbnRCZXR3ZWVuTm9uRHVtbWllcycsZmFsc2UpO3NxYz1uZXcgS0JkKCdwb3J0RHVtbXknKTtLcGM9bmV3IExCZCgnY3Jvc3NpbmdIaW50JyxqZmIoMCkpO1dwYz1uZXcgTEJkKCdncmFwaFByb3BlcnRpZXMnLChiPUpEKGRlYihYViksMTApLG5ldyB1cmIoYixKRChWQ2IoYixiLmxlbmd0aCksMTApLDApKSk7VHBjPW5ldyBMQmQoJ2V4dGVybmFsUG9ydFNpZGUnLChSamQoKSxQamQpKTtVcGM9bmV3IExCZCgnZXh0ZXJuYWxQb3J0U2l6ZScsbmV3IENkZCk7UnBjPW5ldyBLQmQoJ2V4dGVybmFsUG9ydFJlcGxhY2VkRHVtbWllcycpO1NwYz1uZXcgS0JkKCdleHRlcm5hbFBvcnRSZXBsYWNlZER1bW15Jyk7UXBjPW5ldyBMQmQoJ2V4dGVybmFsUG9ydENvbm5lY3Rpb25zJywoYT1KRChkZWIodjIpLDEwKSxuZXcgdXJiKGEsSkQoVkNiKGEsYS5sZW5ndGgpLDEwKSwwKSkpO3RxYz1uZXcgTEJkKGp1ZSwwKTtFcGM9bmV3IEtCZCgnYmFyeWNlbnRlckFzc29jaWF0ZXMnKTtIcWM9bmV3IEtCZCgnVG9wU2lkZUNvbW1lbnRzJyk7RnBjPW5ldyBLQmQoJ0JvdHRvbVNpZGVDb21tZW50cycpO0hwYz1uZXcgS0JkKCdDb21tZW50Q29ubmVjdGlvblBvcnQnKTtZcGM9bmV3IExCZCgnaW5wdXRDb2xsZWN0JyxmYWxzZSk7cXFjPW5ldyBMQmQoJ291dHB1dENvbGxlY3QnLGZhbHNlKTtNcGM9bmV3IExCZCgnY3ljbGljJyxmYWxzZSk7THBjPW5ldyBLQmQoJ2Nyb3NzSGllcmFyY2h5TWFwJyk7R3FjPW5ldyBLQmQoJ3RhcmdldE9mZnNldCcpO25ldyBMQmQoJ3NwbGluZUxhYmVsU2l6ZScsbmV3IENkZCk7QXFjPW5ldyBLQmQoJ3NwYWNpbmdzJyk7cnFjPW5ldyBMQmQoJ3BhcnRpdGlvbkNvbnN0cmFpbnQnLGZhbHNlKTtHcGM9bmV3IEtCZCgnYnJlYWtpbmdQb2ludC5pbmZvJyk7RXFjPW5ldyBLQmQoJ3NwbGluZXMuc3Vydml2aW5nRWRnZScpO0RxYz1uZXcgS0JkKCdzcGxpbmVzLnJvdXRlLnN0YXJ0Jyk7QnFjPW5ldyBLQmQoJ3NwbGluZXMuZWRnZUNoYWluJyk7cHFjPW5ldyBLQmQoJ29yaWdpbmFsUG9ydENvbnN0cmFpbnRzJyk7enFjPW5ldyBLQmQoJ3NlbGZMb29wSG9sZGVyJyk7Q3FjPW5ldyBLQmQoJ3NwbGluZXMubnNQb3J0WScpO2pxYz1uZXcgS0JkKCdtb2RlbE9yZGVyJyk7aHFjPW5ldyBLQmQoJ2xvbmdFZGdlVGFyZ2V0Tm9kZScpO1ZwYz1uZXcgTEJkKHR3ZSxmYWxzZSk7eXFjPW5ldyBMQmQodHdlLGZhbHNlKTtYcGM9bmV3IEtCZCgnbGF5ZXJDb25zdHJhaW50cy5oaWRkZW5Ob2RlcycpO29xYz1uZXcgS0JkKCdsYXllckNvbnN0cmFpbnRzLm9wcG9zaWRlUG9ydCcpO0ZxYz1uZXcgS0JkKCd0YXJnZXROb2RlLm1vZGVsT3JkZXInKX0KZnVuY3Rpb24gVmtjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdjtmPWI7bD1jO2lmKExpYihhLmEsZikpe2lmKE9yYihKRChOaWIoYS5hLGYpLDUwKSxsKSl7cmV0dXJuIDF9fWVsc2V7UWliKGEuYSxmLG5ldyBRcmIpfWlmKExpYihhLmEsbCkpe2lmKE9yYihKRChOaWIoYS5hLGwpLDUwKSxmKSl7cmV0dXJuIC0xfX1lbHNle1FpYihhLmEsbCxuZXcgUXJiKX1pZihMaWIoYS5kLGYpKXtpZihPcmIoSkQoTmliKGEuZCxmKSw1MCksbCkpe3JldHVybiAtMX19ZWxzZXtRaWIoYS5kLGYsbmV3IFFyYil9aWYoTGliKGEuZCxsKSl7aWYoT3JiKEpEKE5pYihhLmEsbCksNTApLGYpKXtyZXR1cm4gMX19ZWxzZXtRaWIoYS5kLGwsbmV3IFFyYil9aWYoZi5qIT1sLmope3U9YWxjKGYuaixsLmopO3U+MD9Xa2MoYSxmLGwsMSk6V2tjKGEsbCxmLDEpO3JldHVybiB1fXY9MTtpZihmLmUuYy5sZW5ndGghPTAmJmwuZS5jLmxlbmd0aCE9MCl7KGYuaj09KFJqZCgpLFFqZCkmJmwuaj09UWpkfHxmLmo9PXhqZCYmbC5qPT14amR8fGYuaj09T2pkJiZsLmo9PU9qZCkmJih2PS12KTtqPUpEKE1sYihmLmUsMCksMTgpLmM7cD1KRChNbGIobC5lLDApLDE4KS5jO2g9ai5pO249cC5pO2lmKGg9PW4pe2ZvcihzPW5ldyBybWIoaC5qKTtzLmE8cy5jLmMubGVuZ3RoOyl7cj1KRChwbWIocyksMTEpO2lmKGo9PXIpe1drYyhhLGwsZix2KTtyZXR1cm4gLXZ9ZWxzZSBpZihwPT1yKXtXa2MoYSxmLGwsdik7cmV0dXJuIHZ9fX1pZihqLmkuaz09KERZYigpLHlZYikmJnAuaS5rPT15WWImJmguYy5wPT1uLmMucCYmaC5jLnA9PWYuaS5jLnApe3Q9aC5jO2U9VGtjKHQsaCxuKTtpZihlIT0wKXtmLmo9PXdqZCYmbC5qPT13amQmJih2PS12KTtpZihlPjApe1drYyhhLGYsbCx2KTtyZXR1cm4gdn1lbHNle1drYyhhLGwsZix2KTtyZXR1cm4gLXZ9fX1kPVRrYyhKRCh5QmIoU21iKGEuYyksaEFiKG5ldyB6QWIsbmV3IHhBYixuZXcgRkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbKGxBYigpLGpBYildKSkpLDIwKSxoLG4pO2lmKGQhPTApe2lmKGQ+MCl7V2tjKGEsZixsLHYpO3JldHVybiB2fWVsc2V7V2tjKGEsbCxmLHYpO3JldHVybiAtdn19aWYoYS5iKXt1PVNrYyhmLGwpO2lmKHUhPTApe2lmKHU+MCl7V2tjKGEsZixsLHYpO3JldHVybiB2fWVsc2V7V2tjKGEsbCxmLHYpO3JldHVybiAtdn19fX1pZihmLmcuYy5sZW5ndGghPTAmJmwuZy5jLmxlbmd0aCE9MCl7KGYuaj09KFJqZCgpLFFqZCkmJmwuaj09UWpkfHxmLmo9PU9qZCYmbC5qPT1PamQpJiYodj0tdik7az1KRChXTWIoZiwoSXFjKCksaHFjKSksOSk7cT1KRChXTWIobCxocWMpLDkpO2lmKGEuZT09KG55YygpLG15YykmJiEhayYmISFxJiZYTWIoayxqcWMpJiZYTWIocSxqcWMpKXtnPUpEKFdNYihrLGpxYyksMTcpLmE7bT1KRChXTWIocSxqcWMpLDE3KS5hO2lmKGc+bSl7V2tjKGEsZixsLHYpO3JldHVybiB2fWVsc2V7V2tjKGEsbCxmLHYpO3JldHVybiAtdn19aWYoYS5iKXt1PVNrYyhmLGwpO2lmKHUhPTApe2lmKHU+MCl7V2tjKGEsZixsLHYpO3JldHVybiB2fWVsc2V7V2tjKGEsbCxmLHYpO3JldHVybiAtdn19fWk9MDtvPTA7WE1iKEpEKE1sYihmLmcsMCksMTgpLGpxYykmJihpPUpEKFdNYihKRChNbGIoZi5nLDApLDE4KSxqcWMpLDE3KS5hKTtYTWIoSkQoTWxiKGwuZywwKSwxOCksanFjKSYmKG89SkQoV01iKEpEKE1sYihsLmcsMCksMTgpLGpxYyksMTcpLmEpO2lmKCEhayYmaz09cSl7aWYoaT5vKXtXa2MoYSxmLGwsdik7cmV0dXJuIHZ9ZWxzZXtXa2MoYSxsLGYsdik7cmV0dXJuIC12fX1pZihhLmYpe2EuZi5fYihrKSYmKGk9SkQoYS5mLnhjKGspLDE3KS5hKTthLmYuX2IocSkmJihvPUpEKGEuZi54YyhxKSwxNykuYSl9aWYoaT5vKXtXa2MoYSxmLGwsdik7cmV0dXJuIHZ9ZWxzZXtXa2MoYSxsLGYsdik7cmV0dXJuIC12fX1pZihmLmUuYy5sZW5ndGghPTAmJmwuZy5jLmxlbmd0aCE9MCl7V2tjKGEsZixsLHYpO3JldHVybiAxfWVsc2UgaWYoZi5nLmMubGVuZ3RoIT0wJiZsLmUuYy5sZW5ndGghPTApe1drYyhhLGwsZix2KTtyZXR1cm4gLTF9ZWxzZSBpZihYTWIoZiwoSXFjKCksanFjKSkmJlhNYihsLGpxYykpe2c9SkQoV01iKGYsanFjKSwxNykuYTttPUpEKFdNYihsLGpxYyksMTcpLmE7KGYuaj09KFJqZCgpLFFqZCkmJmwuaj09UWpkfHxmLmo9PU9qZCYmbC5qPT1PamQpJiYodj0tdik7aWYoZz5tKXtXa2MoYSxmLGwsdik7cmV0dXJuIHZ9ZWxzZXtXa2MoYSxsLGYsdik7cmV0dXJuIC12fX1lbHNle1drYyhhLGwsZix2KTtyZXR1cm4gLXZ9fQpmdW5jdGlvbiBHV2MoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbztmb3IobD1HdGIoYS5iLDApO2wuYiE9bC5kLmM7KXtrPUpEKFV0YihsKSwzOSk7aWYoY2diKGsuYyxEemUpKXtjb250aW51ZX1mPUpEKHlCYihuZXcgUkJiKG51bGwsbmV3IEd2YihrUWMoayxhKSwxNikpLGhBYihuZXcgekFiLG5ldyB4QWIsbmV3IEZBYixXQyhPQyhITCwxKSxFcmUsMTMxLDAsWyhsQWIoKSxqQWIpXSkpKSwxNSk7Yj09KFRnZCgpLFBnZCl8fGI9PVFnZD9mLmdkKG5ldyBPWGMpOmYuZ2QobmV3IFVYYyk7bz1mLmdjKCk7Zm9yKGU9MDtlPG87ZSsrKXtnPW89PTE/MC41OigxK2UpLyhvKzEpO2lmKGI9PVBnZCl7aj1CZWIoTUQoV01iKGssKHRVYygpLGhVYykpKSk7aWYoay5lLmEray5mLmErZDxqKXtDdGIoSkQoZi5YYihlKSw2NSkuYSxuZXcgRWRkKGorYyxrLmUuYitrLmYuYipnKSl9ZWxzZSBpZihKRChmLlhiKGUpLDY1KS5hLmI+MCl7aD1KRChGdGIoSkQoZi5YYihlKSw2NSkuYSksOCkuYTttPWsuZS5hK2suZi5hLzI7aT1KRChGdGIoSkQoZi5YYihlKSw2NSkuYSksOCkuYjtuPWsuZS5iK2suZi5iLzI7ZD4wJiYkd25kLk1hdGguYWJzKGktbikvKCR3bmQuTWF0aC5hYnMoaC1tKS80MCk+NTAmJihuPmk/Q3RiKEpEKGYuWGIoZSksNjUpLmEsbmV3IEVkZChrLmUuYStrLmYuYStkLzUuMyxrLmUuYitrLmYuYipnLWQvMikpOkN0YihKRChmLlhiKGUpLDY1KS5hLG5ldyBFZGQoay5lLmEray5mLmErZC81LjMsay5lLmIray5mLmIqZytkLzIpKSl9Q3RiKEpEKGYuWGIoZSksNjUpLmEsbmV3IEVkZChrLmUuYStrLmYuYSxrLmUuYitrLmYuYipnKSl9ZWxzZSBpZihiPT1RZ2Qpe2o9QmViKE1EKFdNYihrLCh0VWMoKSxpVWMpKSkpO2lmKGsuZS5hLWQ+ail7Q3RiKEpEKGYuWGIoZSksNjUpLmEsbmV3IEVkZChqLWMsay5lLmIray5mLmIqZykpfWVsc2UgaWYoSkQoZi5YYihlKSw2NSkuYS5iPjApe2g9SkQoRnRiKEpEKGYuWGIoZSksNjUpLmEpLDgpLmE7bT1rLmUuYStrLmYuYS8yO2k9SkQoRnRiKEpEKGYuWGIoZSksNjUpLmEpLDgpLmI7bj1rLmUuYitrLmYuYi8yO2Q+MCYmJHduZC5NYXRoLmFicyhpLW4pLygkd25kLk1hdGguYWJzKGgtbSkvNDApPjUwJiYobj5pP0N0YihKRChmLlhiKGUpLDY1KS5hLG5ldyBFZGQoay5lLmEtZC81LjMsay5lLmIray5mLmIqZy1kLzIpKTpDdGIoSkQoZi5YYihlKSw2NSkuYSxuZXcgRWRkKGsuZS5hLWQvNS4zLGsuZS5iK2suZi5iKmcrZC8yKSkpfUN0YihKRChmLlhiKGUpLDY1KS5hLG5ldyBFZGQoay5lLmEsay5lLmIray5mLmIqZykpfWVsc2UgaWYoYj09U2dkKXtqPUJlYihNRChXTWIoaywodFVjKCksaFVjKSkpKTtpZihrLmUuYitrLmYuYitkPGope0N0YihKRChmLlhiKGUpLDY1KS5hLG5ldyBFZGQoay5lLmEray5mLmEqZyxqK2MpKX1lbHNlIGlmKEpEKGYuWGIoZSksNjUpLmEuYj4wKXtoPUpEKEZ0YihKRChmLlhiKGUpLDY1KS5hKSw4KS5hO209ay5lLmEray5mLmEvMjtpPUpEKEZ0YihKRChmLlhiKGUpLDY1KS5hKSw4KS5iO249ay5lLmIray5mLmIvMjtkPjAmJiR3bmQuTWF0aC5hYnMoaC1tKS8oJHduZC5NYXRoLmFicyhpLW4pLzQwKT41MCYmKG0+aD9DdGIoSkQoZi5YYihlKSw2NSkuYSxuZXcgRWRkKGsuZS5hK2suZi5hKmctZC8yLGsuZS5iK2QvNS4zK2suZi5iKSk6Q3RiKEpEKGYuWGIoZSksNjUpLmEsbmV3IEVkZChrLmUuYStrLmYuYSpnK2QvMixrLmUuYitkLzUuMytrLmYuYikpKX1DdGIoSkQoZi5YYihlKSw2NSkuYSxuZXcgRWRkKGsuZS5hK2suZi5hKmcsay5lLmIray5mLmIpKX1lbHNle2o9QmViKE1EKFdNYihrLCh0VWMoKSxpVWMpKSkpO2lmKHBRYyhKRChmLlhiKGUpLDY1KSxhKSl7Q3RiKEpEKGYuWGIoZSksNjUpLmEsbmV3IEVkZChrLmUuYStrLmYuYSpnLEpEKEZ0YihKRChmLlhiKGUpLDY1KS5hKSw4KS5iKSl9ZWxzZSBpZihrLmUuYi1kPmope0N0YihKRChmLlhiKGUpLDY1KS5hLG5ldyBFZGQoay5lLmEray5mLmEqZyxqLWMpKX1lbHNlIGlmKEpEKGYuWGIoZSksNjUpLmEuYj4wKXtoPUpEKEZ0YihKRChmLlhiKGUpLDY1KS5hKSw4KS5hO209ay5lLmEray5mLmEvMjtpPUpEKEZ0YihKRChmLlhiKGUpLDY1KS5hKSw4KS5iO249ay5lLmIray5mLmIvMjtkPjAmJiR3bmQuTWF0aC5hYnMoaC1tKS8oJHduZC5NYXRoLmFicyhpLW4pLzQwKT41MCYmKG0+aD9DdGIoSkQoZi5YYihlKSw2NSkuYSxuZXcgRWRkKGsuZS5hK2suZi5hKmctZC8yLGsuZS5iLWQvNS4zKSk6Q3RiKEpEKGYuWGIoZSksNjUpLmEsbmV3IEVkZChrLmUuYStrLmYuYSpnK2QvMixrLmUuYi1kLzUuMykpKX1DdGIoSkQoZi5YYihlKSw2NSkuYSxuZXcgRWRkKGsuZS5hK2suZi5hKmcsay5lLmIpKX19fX0KZnVuY3Rpb24gTGdkKCl7TGdkPVpjYjt2YXIgYSxiO05lZD1uZXcgS0JkKExCZSk7aWdkPW5ldyBLQmQoTUJlKTtQZWQ9KGNlZCgpLFlkZCk7T2VkPW5ldyBNQmQoRXllLFBlZCk7bmV3IEZuZDtRZWQ9bmV3IE1CZChPdWUsbnVsbCk7UmVkPW5ldyBLQmQoTkJlKTtZZWQ9KEhlZCgpLG5yYihHZWQsV0MoT0MoZzIsMSksRXJlLDI5NiwwLFtDZWRdKSkpO1hlZD1uZXcgTUJkKFF5ZSxZZWQpO1plZD1uZXcgTUJkKER5ZSwoeGRiKCksZmFsc2UpKTtfZWQ9KFRnZCgpLFJnZCk7JGVkPW5ldyBNQmQoSHllLF9lZCk7ZWZkPSh4aGQoKSx3aGQpO2RmZD1uZXcgTUJkKGF5ZSxlZmQpO2hmZD1uZXcgTUJkKEpCZSxmYWxzZSk7amZkPShlaWQoKSxjaWQpO2lmZD1uZXcgTUJkKFh4ZSxqZmQpO0xmZD1uZXcgTVliKDEyKTtLZmQ9bmV3IE1CZChSdWUsTGZkKTtuZmQ9bmV3IE1CZChTdWUsZmFsc2UpO29mZD1uZXcgTUJkKGJ6ZSxmYWxzZSk7SmZkPW5ldyBNQmQoVnVlLGZhbHNlKTtaZmQ9KGFqZCgpLF9pZCk7WWZkPW5ldyBNQmQoVHVlLFpmZCk7ZmdkPW5ldyBLQmQoJHllKTtnZ2Q9bmV3IEtCZChMdWUpO2hnZD1uZXcgS0JkKFB1ZSk7a2dkPW5ldyBLQmQoUXVlKTt1ZmQ9bmV3IFJkZDt0ZmQ9bmV3IE1CZChSeWUsdWZkKTtXZWQ9bmV3IE1CZChWeWUsZmFsc2UpO2tmZD1uZXcgTUJkKFd5ZSxmYWxzZSk7bmV3IEtCZChPQmUpO25ldyBNQmQoUEJlLDApO3dmZD1uZXcgWlhiO3ZmZD1uZXcgTUJkKF95ZSx3ZmQpO0lmZD1uZXcgTUJkKEJ5ZSxmYWxzZSk7bmV3IEZuZDtqZ2Q9bmV3IE1CZChRQmUsMSk7VmVkPW5ldyBLQmQoUkJlKTtVZWQ9bmV3IEtCZChTQmUpO0RnZD1uZXcgTUJkKF91ZSxmYWxzZSk7bmV3IE1CZChUQmUsdHJ1ZSk7amZiKDApO25ldyBNQmQoVUJlLGpmYigxMDApKTtuZXcgTUJkKFZCZSxmYWxzZSk7amZiKDApO25ldyBNQmQoV0JlLGpmYig0MDAwKSk7amZiKDApO25ldyBNQmQoWEJlLGpmYig0MDApKTtuZXcgTUJkKFlCZSxmYWxzZSk7bmV3IE1CZChaQmUsZmFsc2UpO25ldyBNQmQoJEJlLHRydWUpO25ldyBNQmQoX0JlLGZhbHNlKTtUZWQ9KG9tZCgpLG5tZCk7U2VkPW5ldyBNQmQoS0JlLFRlZCk7c2ZkPShva2QoKSxsa2QpO3JmZD1uZXcgTUJkKGFDZSxzZmQpO3FmZD0oZWhkKCksYmhkKTtwZmQ9bmV3IE1CZChiQ2UscWZkKTtsZ2Q9bmV3IE1CZChveWUsMTApO21nZD1uZXcgTUJkKHB5ZSwxMCk7bmdkPW5ldyBNQmQocXllLDIwKTtvZ2Q9bmV3IE1CZChyeWUsMTApO3BnZD1uZXcgTUJkKE51ZSwyKTtxZ2Q9bmV3IE1CZChzeWUsMTApO3NnZD1uZXcgTUJkKHR5ZSwwKTt0Z2Q9bmV3IE1CZCh3eWUsNSk7dWdkPW5ldyBNQmQodXllLDEpO3ZnZD1uZXcgTUJkKHZ5ZSwxKTt3Z2Q9bmV3IE1CZChNdWUsMjApO3hnZD1uZXcgTUJkKHh5ZSwxMCk7QWdkPW5ldyBNQmQoeXllLDEwKTtyZ2Q9bmV3IEtCZCh6eWUpO3pnZD1uZXcgJFhiO3lnZD1uZXcgTUJkKGF6ZSx6Z2QpO09mZD1uZXcgS0JkKFp5ZSk7TmZkPWZhbHNlO01mZD1uZXcgTUJkKFl5ZSxOZmQpO3lmZD1uZXcgTVliKDUpO3hmZD1uZXcgTUJkKEl5ZSx5ZmQpO0FmZD0oRWlkKCksYj1KRChkZWIocjIpLDEwKSxuZXcgdXJiKGIsSkQoVkNiKGIsYi5sZW5ndGgpLDEwKSwwKSk7emZkPW5ldyBNQmQoWnVlLEFmZCk7UmZkPShRaWQoKSxOaWQpO1FmZD1uZXcgTUJkKEx5ZSxSZmQpO1RmZD1uZXcgS0JkKE15ZSk7VWZkPW5ldyBLQmQoTnllKTtWZmQ9bmV3IEtCZChPeWUpO1NmZD1uZXcgS0JkKFB5ZSk7Q2ZkPShhPUpEKGRlYih6MiksMTApLG5ldyB1cmIoYSxKRChWQ2IoYSxhLmxlbmd0aCksMTApLDApKTtCZmQ9bmV3IE1CZChZdWUsQ2ZkKTtIZmQ9bXJiKChOa2QoKSxHa2QpKTtHZmQ9bmV3IE1CZChYdWUsSGZkKTtGZmQ9bmV3IEVkZCgwLDApO0VmZD1uZXcgTUJkKHB2ZSxGZmQpO0RmZD1uZXcgTUJkKFd1ZSxmYWxzZSk7Y2ZkPShuaGQoKSxraGQpO2JmZD1uZXcgTUJkKFR5ZSxjZmQpO2FmZD1uZXcgTUJkKFV1ZSxmYWxzZSk7bmV3IEtCZChjQ2UpO2pmYigxKTtuZXcgTUJkKGRDZSxudWxsKTtXZmQ9bmV3IEtCZChYeWUpOyRmZD1uZXcgS0JkKFV5ZSk7ZWdkPShSamQoKSxQamQpO2RnZD1uZXcgTUJkKEN5ZSxlZ2QpO1hmZD1uZXcgS0JkKEF5ZSk7YmdkPShvamQoKSxtcmIobWpkKSk7YWdkPW5ldyBNQmQoJHVlLGJnZCk7X2ZkPW5ldyBNQmQoSnllLGZhbHNlKTtjZ2Q9bmV3IE1CZChLeWUsdHJ1ZSk7bmV3IEZuZDtIZ2Q9bmV3IE1CZChhdmUsMSk7SmdkPW5ldyBNQmQoZUNlLG51bGwpO0NnZD1uZXcgTUJkKGJ2ZSwxNTApO0JnZD1uZXcgTUJkKGN2ZSwxLjQxNCk7RWdkPW5ldyBNQmQoZHZlLG51bGwpO0ZnZD1uZXcgTUJkKGZDZSwxKTtsZmQ9bmV3IE1CZChGeWUsZmFsc2UpO21mZD1uZXcgTUJkKEd5ZSxmYWxzZSk7ZmZkPW5ldyBNQmQoU3llLDEpO2dmZD0oSmhkKCksSGhkKTtuZXcgTUJkKGdDZSxnZmQpO1BmZD10cnVlO0lnZD0oV2tkKCksVGtkKTtLZ2Q9VGtkO0dnZD1Ua2R9CmZ1bmN0aW9uIHU1Yigpe3U1Yj1aY2I7QTRiPW5ldyB2NWIoJ0RJUkVDVElPTl9QUkVQUk9DRVNTT1InLDApO3g0Yj1uZXcgdjViKCdDT01NRU5UX1BSRVBST0NFU1NPUicsMSk7QjRiPW5ldyB2NWIoJ0VER0VfQU5EX0xBWUVSX0NPTlNUUkFJTlRfRURHRV9SRVZFUlNFUicsMik7UjRiPW5ldyB2NWIoJ0lOVEVSQUNUSVZFX0VYVEVSTkFMX1BPUlRfUE9TSVRJT05FUicsMyk7aTViPW5ldyB2NWIoJ1BBUlRJVElPTl9QUkVQUk9DRVNTT1InLDQpO1Y0Yj1uZXcgdjViKCdMQUJFTF9EVU1NWV9JTlNFUlRFUicsNSk7bzViPW5ldyB2NWIoJ1NFTEZfTE9PUF9QUkVQUk9DRVNTT1InLDYpOyQ0Yj1uZXcgdjViKCdMQVlFUl9DT05TVFJBSU5UX1BSRVBST0NFU1NPUicsNyk7ZzViPW5ldyB2NWIoJ1BBUlRJVElPTl9NSURQUk9DRVNTT1InLDgpO000Yj1uZXcgdjViKCdISUdIX0RFR1JFRV9OT0RFX0xBWUVSX1BST0NFU1NPUicsOSk7YzViPW5ldyB2NWIoJ05PREVfUFJPTU9USU9OJywxMCk7WjRiPW5ldyB2NWIoJ0xBWUVSX0NPTlNUUkFJTlRfUE9TVFBST0NFU1NPUicsMTEpO2g1Yj1uZXcgdjViKCdQQVJUSVRJT05fUE9TVFBST0NFU1NPUicsMTIpO0k0Yj1uZXcgdjViKCdISUVSQVJDSElDQUxfUE9SVF9DT05TVFJBSU5UX1BST0NFU1NPUicsMTMpO3E1Yj1uZXcgdjViKCdTRU1JX0lOVEVSQUNUSVZFX0NST1NTTUlOX1BST0NFU1NPUicsMTQpO3I0Yj1uZXcgdjViKCdCUkVBS0lOR19QT0lOVF9JTlNFUlRFUicsMTUpO2I1Yj1uZXcgdjViKCdMT05HX0VER0VfU1BMSVRURVInLDE2KTtrNWI9bmV3IHY1YignUE9SVF9TSURFX1BST0NFU1NPUicsMTcpO1M0Yj1uZXcgdjViKCdJTlZFUlRFRF9QT1JUX1BST0NFU1NPUicsMTgpO2o1Yj1uZXcgdjViKCdQT1JUX0xJU1RfU09SVEVSJywxOSk7czViPW5ldyB2NWIoJ1NPUlRfQllfSU5QVVRfT1JERVJfT0ZfTU9ERUwnLDIwKTtlNWI9bmV3IHY1YignTk9SVEhfU09VVEhfUE9SVF9QUkVQUk9DRVNTT1InLDIxKTtzNGI9bmV3IHY1YignQlJFQUtJTkdfUE9JTlRfUFJPQ0VTU09SJywyMik7ZjViPW5ldyB2NWIoWXZlLDIzKTt0NWI9bmV3IHY1YihadmUsMjQpO201Yj1uZXcgdjViKCdTRUxGX0xPT1BfUE9SVF9SRVNUT1JFUicsMjUpO3E0Yj1uZXcgdjViKCdBTFRFUk5BVElOR19MQVlFUl9VTlpJUFBFUicsMjYpO3I1Yj1uZXcgdjViKCdTSU5HTEVfRURHRV9HUkFQSF9XUkFQUEVSJywyNyk7VDRiPW5ldyB2NWIoJ0lOX0xBWUVSX0NPTlNUUkFJTlRfUFJPQ0VTU09SJywyOCk7RjRiPW5ldyB2NWIoJ0VORF9OT0RFX1BPUlRfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1InLDI5KTtVNGI9bmV3IHY1YignTEFCRUxfQU5EX05PREVfU0laRV9QUk9DRVNTT1InLDMwKTtRNGI9bmV3IHY1YignSU5ORVJNT1NUX05PREVfTUFSR0lOX0NBTENVTEFUT1InLDMxKTtwNWI9bmV3IHY1YignU0VMRl9MT09QX1JPVVRFUicsMzIpO3Y0Yj1uZXcgdjViKCdDT01NRU5UX05PREVfTUFSR0lOX0NBTENVTEFUT1InLDMzKTtENGI9bmV3IHY1YignRU5EX0xBQkVMX1BSRVBST0NFU1NPUicsMzQpO1g0Yj1uZXcgdjViKCdMQUJFTF9EVU1NWV9TV0lUQ0hFUicsMzUpO3U0Yj1uZXcgdjViKCdDRU5URVJfTEFCRUxfTUFOQUdFTUVOVF9QUk9DRVNTT1InLDM2KTtZNGI9bmV3IHY1YignTEFCRUxfU0lERV9TRUxFQ1RPUicsMzcpO080Yj1uZXcgdjViKCdIWVBFUkVER0VfRFVNTVlfTUVSR0VSJywzOCk7SjRiPW5ldyB2NWIoJ0hJRVJBUkNISUNBTF9QT1JUX0RVTU1ZX1NJWkVfUFJPQ0VTU09SJywzOSk7XzRiPW5ldyB2NWIoJ0xBWUVSX1NJWkVfQU5EX0dSQVBIX0hFSUdIVF9DQUxDVUxBVE9SJyw0MCk7TDRiPW5ldyB2NWIoJ0hJRVJBUkNISUNBTF9QT1JUX1BPU0lUSU9OX1BST0NFU1NPUicsNDEpO3k0Yj1uZXcgdjViKCdDT05TVFJBSU5UU19QT1NUUFJPQ0VTU09SJyw0Mik7dzRiPW5ldyB2NWIoJ0NPTU1FTlRfUE9TVFBST0NFU1NPUicsNDMpO1A0Yj1uZXcgdjViKCdIWVBFUk5PREVfUFJPQ0VTU09SJyw0NCk7SzRiPW5ldyB2NWIoJ0hJRVJBUkNISUNBTF9QT1JUX09SVEhPR09OQUxfRURHRV9ST1VURVInLDQ1KTthNWI9bmV3IHY1YignTE9OR19FREdFX0pPSU5FUicsNDYpO241Yj1uZXcgdjViKCdTRUxGX0xPT1BfUE9TVFBST0NFU1NPUicsNDcpO3Q0Yj1uZXcgdjViKCdCUkVBS0lOR19QT0lOVF9SRU1PVkVSJyw0OCk7ZDViPW5ldyB2NWIoJ05PUlRIX1NPVVRIX1BPUlRfUE9TVFBST0NFU1NPUicsNDkpO040Yj1uZXcgdjViKCdIT1JJWk9OVEFMX0NPTVBBQ1RPUicsNTApO1c0Yj1uZXcgdjViKCdMQUJFTF9EVU1NWV9SRU1PVkVSJyw1MSk7RzRiPW5ldyB2NWIoJ0ZJTkFMX1NQTElORV9CRU5EUE9JTlRTX0NBTENVTEFUT1InLDUyKTtFNGI9bmV3IHY1YignRU5EX0xBQkVMX1NPUlRFUicsNTMpO2w1Yj1uZXcgdjViKCdSRVZFUlNFRF9FREdFX1JFU1RPUkVSJyw1NCk7QzRiPW5ldyB2NWIoJ0VORF9MQUJFTF9QT1NUUFJPQ0VTU09SJyw1NSk7SDRiPW5ldyB2NWIoJ0hJRVJBUkNISUNBTF9OT0RFX1JFU0laRVInLDU2KTt6NGI9bmV3IHY1YignRElSRUNUSU9OX1BPU1RQUk9DRVNTT1InLDU3KX0KZnVuY3Rpb24gbEhjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHUsdix3LEEsQixDLEQsRixHLEgsSSxKLEssTCxNLE4sTyxQLFEsUixTLFQsVSxWLFcsWCxZLFosJCxhYixiYixjYixkYixlYixmYixnYixoYixpYixqYixrYixsYjtjYj0wO2ZvcihIPWIsSz0wLE49SC5sZW5ndGg7SzxOOysrSyl7Rj1IW0tdO2ZvcihWPW5ldyBybWIoRi5qKTtWLmE8Vi5jLmMubGVuZ3RoOyl7VT1KRChwbWIoViksMTEpO1g9MDtmb3IoaD1uZXcgcm1iKFUuZyk7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDE4KTtGLmMhPWcuZC5pLmMmJisrWH1YPjAmJihhLmFbVS5wXT1jYisrKX19aGI9MDtmb3IoST1jLEw9MCxPPUkubGVuZ3RoO0w8TzsrK0wpe0Y9SVtMXTtQPTA7Zm9yKFY9bmV3IHJtYihGLmopO1YuYTxWLmMuYy5sZW5ndGg7KXtVPUpEKHBtYihWKSwxMSk7aWYoVS5qPT0oUmpkKCkseGpkKSl7Zm9yKGg9bmV3IHJtYihVLmUpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxOCk7aWYoRi5jIT1nLmMuaS5jKXsrK1A7YnJlYWt9fX1lbHNle2JyZWFrfX1SPTA7WT1uZXcgQWpiKEYuaixGLmouYy5sZW5ndGgpO3doaWxlKFkuYj4wKXtVPShyRGIoWS5iPjApLEpEKFkuYS5YYihZLmM9LS1ZLmIpLDExKSk7WD0wO2ZvcihoPW5ldyBybWIoVS5lKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTgpO0YuYyE9Zy5jLmkuYyYmKytYfWlmKFg+MCl7aWYoVS5qPT0oUmpkKCkseGpkKSl7YS5hW1UucF09aGI7KytoYn1lbHNle2EuYVtVLnBdPWhiK1ArUjsrK1J9fX1oYis9Un1XPW5ldyBJcmI7bz1uZXcgd3RiO2ZvcihHPWIsSj0wLE09Ry5sZW5ndGg7SjxNOysrSil7Rj1HW0pdO2ZvcihmYj1uZXcgcm1iKEYuaik7ZmIuYTxmYi5jLmMubGVuZ3RoOyl7ZWI9SkQocG1iKGZiKSwxMSk7Zm9yKGg9bmV3IHJtYihlYi5nKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTgpO2piPWcuZDtpZihGLmMhPWpiLmkuYyl7ZGI9SkQoV2QoZnNiKFcuZixlYikpLDQ2NCk7aWI9SkQoV2QoZnNiKFcuZixqYikpLDQ2NCk7aWYoIWRiJiYhaWIpe249bmV3IG9IYztvLmEueWMobixvKTtJbGIobi5hLGcpO0lsYihuLmQsZWIpO2dzYihXLmYsZWIsbik7SWxiKG4uZCxqYik7Z3NiKFcuZixqYixuKX1lbHNlIGlmKCFkYil7SWxiKGliLmEsZyk7SWxiKGliLmQsZWIpO2dzYihXLmYsZWIsaWIpfWVsc2UgaWYoIWliKXtJbGIoZGIuYSxnKTtJbGIoZGIuZCxqYik7Z3NiKFcuZixqYixkYil9ZWxzZSBpZihkYj09aWIpe0lsYihkYi5hLGcpfWVsc2V7SWxiKGRiLmEsZyk7Zm9yKFQ9bmV3IHJtYihpYi5kKTtULmE8VC5jLmMubGVuZ3RoOyl7Uz1KRChwbWIoVCksMTEpO2dzYihXLmYsUyxkYil9S2xiKGRiLmEsaWIuYSk7S2xiKGRiLmQsaWIuZCk7by5hLkFjKGliKSE9bnVsbH19fX19cD1KRChEZShvLFNDKENYLHszOjEsNDoxLDU6MSwxOTkxOjF9LDQ2NCxvLmEuZ2MoKSwwLDEpKSwxOTkxKTtEPWJbMF0uYztiYj1jWzBdLmM7Zm9yKGs9cCxsPTAsbT1rLmxlbmd0aDtsPG07KytsKXtqPWtbbF07ai5lPWNiO2ouZj1oYjtmb3IoVj1uZXcgcm1iKGouZCk7Vi5hPFYuYy5jLmxlbmd0aDspe1U9SkQocG1iKFYpLDExKTtaPWEuYVtVLnBdO2lmKFUuaS5jPT1EKXtaPGouZSYmKGouZT1aKTtaPmouYiYmKGouYj1aKX1lbHNlIGlmKFUuaS5jPT1iYil7WjxqLmYmJihqLmY9Wik7Wj5qLmMmJihqLmM9Wil9fX1ObWIocCwwLHAubGVuZ3RoLG51bGwpO2diPVNDKGNFLGlzZSwzMCxwLmxlbmd0aCwxNSwxKTtkPVNDKGNFLGlzZSwzMCxoYisxLDE1LDEpO2ZvcihyPTA7cjxwLmxlbmd0aDtyKyspe2diW3JdPXBbcl0uZjtkW2diW3JdXT0xfWY9MDtmb3Iocz0wO3M8ZC5sZW5ndGg7cysrKXtkW3NdPT0xPyhkW3NdPWYpOi0tZn0kPTA7Zm9yKHQ9MDt0PGdiLmxlbmd0aDt0Kyspe2diW3RdKz1kW2diW3RdXTskPSR3bmQuTWF0aC5tYXgoJCxnYlt0XSsxKX1pPTE7d2hpbGUoaTwkKXtpKj0yfWxiPTIqaS0xO2ktPTE7a2I9U0MoY0UsaXNlLDMwLGxiLDE1LDEpO2U9MDtmb3IoQj0wO0I8Z2IubGVuZ3RoO0IrKyl7QT1nYltCXStpOysra2JbQV07d2hpbGUoQT4wKXtBJTI+MCYmKGUrPWtiW0ErMV0pO0E9KEEtMSkvMnwwOysra2JbQV19fUM9U0MoQlgsTnFlLDM2NyxwLmxlbmd0aCoyLDAsMSk7Zm9yKHU9MDt1PHAubGVuZ3RoO3UrKyl7Q1syKnVdPW5ldyBySGMocFt1XSxwW3VdLmUscFt1XS5iLCh2SGMoKSx1SGMpKTtDWzIqdSsxXT1uZXcgckhjKHBbdV0scFt1XS5iLHBbdV0uZSx0SGMpfU5tYihDLDAsQy5sZW5ndGgsbnVsbCk7UT0wO2Zvcih2PTA7djxDLmxlbmd0aDt2Kyspe3N3aXRjaChDW3ZdLmQuZyl7Y2FzZSAwOisrUTticmVhaztjYXNlIDE6LS1RO2UrPVE7fX1hYj1TQyhCWCxOcWUsMzY3LHAubGVuZ3RoKjIsMCwxKTtmb3Iodz0wO3c8cC5sZW5ndGg7dysrKXthYlsyKnddPW5ldyBySGMocFt3XSxwW3ddLmYscFt3XS5jLCh2SGMoKSx1SGMpKTthYlsyKncrMV09bmV3IHJIYyhwW3ddLHBbd10uYyxwW3ddLmYsdEhjKX1ObWIoYWIsMCxhYi5sZW5ndGgsbnVsbCk7UT0wO2ZvcihxPTA7cTxhYi5sZW5ndGg7cSsrKXtzd2l0Y2goYWJbcV0uZC5nKXtjYXNlIDA6KytRO2JyZWFrO2Nhc2UgMTotLVE7ZSs9UTt9fXJldHVybiBlfQpmdW5jdGlvbiBPdGMoKXtPdGM9WmNiO05yYz0oS25jKCksSW5jKTtNcmM9bmV3IE1CZCh1d2UsTnJjKTtjc2M9bmV3IE1CZCh2d2UsKHhkYigpLGZhbHNlKSk7aXNjPSh5cGMoKSx3cGMpO2hzYz1uZXcgTUJkKHd3ZSxpc2MpO0hzYz1uZXcgTUJkKHh3ZSxmYWxzZSk7SXNjPW5ldyBNQmQoeXdlLHRydWUpO2FyYz1uZXcgTUJkKHp3ZSxmYWxzZSk7YXRjPSh2eWMoKSx0eWMpO19zYz1uZXcgTUJkKEF3ZSxhdGMpO2pmYigxKTtpdGM9bmV3IE1CZChCd2UsamZiKDcpKTtqdGM9bmV3IE1CZChDd2UsZmFsc2UpO2RzYz1uZXcgTUJkKER3ZSxmYWxzZSk7THJjPSh6bmMoKSx2bmMpO0tyYz1uZXcgTUJkKEV3ZSxMcmMpO3pzYz0oY3hjKCksYXhjKTt5c2M9bmV3IE1CZChGd2UsenNjKTtwc2M9KE9xYygpLE5xYyk7b3NjPW5ldyBNQmQoR3dlLHBzYyk7amZiKC0xKTtuc2M9bmV3IE1CZChId2UsbnVsbCk7amZiKC0xKTtxc2M9bmV3IE1CZChJd2UsamZiKC0xKSk7amZiKC0xKTtyc2M9bmV3IE1CZChKd2UsamZiKDQpKTtqZmIoLTEpO3RzYz1uZXcgTUJkKEt3ZSxqZmIoMikpO3hzYz0oZHljKCksYnljKTt3c2M9bmV3IE1CZChMd2UseHNjKTtqZmIoMCk7dnNjPW5ldyBNQmQoTXdlLGpmYigwKSk7bHNjPW5ldyBNQmQoTndlLGpmYihIcWUpKTtKcmM9KGNuYygpLGFuYyk7SXJjPW5ldyBNQmQoT3dlLEpyYyk7cXJjPW5ldyBNQmQoUHdlLGZhbHNlKTtBcmM9bmV3IE1CZChRd2UsMC4xKTtHcmM9bmV3IE1CZChSd2UsZmFsc2UpO0NyYz1uZXcgTUJkKFN3ZSxudWxsKTtEcmM9bmV3IE1CZChUd2UsbnVsbCk7amZiKC0xKTtFcmM9bmV3IE1CZChVd2UsbnVsbCk7amZiKC0xKTtGcmM9bmV3IE1CZChWd2UsamZiKC0xKSk7amZiKDApO3JyYz1uZXcgTUJkKFd3ZSxqZmIoNDApKTt5cmM9KGhwYygpLGdwYyk7eHJjPW5ldyBNQmQoWHdlLHlyYyk7dXJjPWVwYzt0cmM9bmV3IE1CZChZd2UsdXJjKTskc2M9KE14YygpLEh4Yyk7WnNjPW5ldyBNQmQoWndlLCRzYyk7UHNjPW5ldyBLQmQoJHdlKTtLc2M9KG1vYygpLGtvYyk7SnNjPW5ldyBNQmQoX3dlLEtzYyk7TnNjPSh5b2MoKSx2b2MpO01zYz1uZXcgTUJkKGF4ZSxOc2MpO25ldyBGbmQ7U3NjPW5ldyBNQmQoYnhlLDAuMyk7VXNjPW5ldyBLQmQoY3hlKTtXc2M9KHp4YygpLHh4Yyk7VnNjPW5ldyBNQmQoZHhlLFdzYyk7VnJjPShOeWMoKSxMeWMpO1VyYz1uZXcgTUJkKGV4ZSxWcmMpO1hyYz0oV3ljKCksVnljKTtXcmM9bmV3IE1CZChmeGUsWHJjKTtacmM9KG96YygpLG56Yyk7WXJjPW5ldyBNQmQoZ3hlLFpyYyk7X3JjPW5ldyBNQmQoaHhlLDAuMik7U3JjPW5ldyBNQmQoaXhlLDIpO2V0Yz1uZXcgTUJkKGp4ZSxudWxsKTtndGM9bmV3IE1CZChreGUsMTApO2Z0Yz1uZXcgTUJkKGx4ZSwxMCk7aHRjPW5ldyBNQmQobXhlLDIwKTtqZmIoMCk7YnRjPW5ldyBNQmQobnhlLGpmYigwKSk7amZiKDApO2N0Yz1uZXcgTUJkKG94ZSxqZmIoMCkpO2pmYigwKTtkdGM9bmV3IE1CZChweGUsamZiKDApKTticmM9bmV3IE1CZChxeGUsZmFsc2UpO2ZyYz0oS29jKCksSW9jKTtlcmM9bmV3IE1CZChyeGUsZnJjKTtkcmM9KFZtYygpLFVtYyk7Y3JjPW5ldyBNQmQoc3hlLGRyYyk7ZnNjPW5ldyBNQmQodHhlLGZhbHNlKTtqZmIoMCk7ZXNjPW5ldyBNQmQodXhlLGpmYigxNikpO2pmYigwKTtnc2M9bmV3IE1CZCh2eGUsamZiKDUpKTtHdGM9KEd6YygpLEV6Yyk7RnRjPW5ldyBNQmQod3hlLEd0Yyk7a3RjPW5ldyBNQmQoeHhlLDEwKTtudGM9bmV3IE1CZCh5eGUsMSk7d3RjPShvbmMoKSxubmMpO3Z0Yz1uZXcgTUJkKHp4ZSx3dGMpO3F0Yz1uZXcgS0JkKEF4ZSk7dHRjPWpmYigxKTtqZmIoMCk7c3RjPW5ldyBNQmQoQnhlLHR0Yyk7THRjPSh4emMoKSx1emMpO0t0Yz1uZXcgTUJkKEN4ZSxMdGMpO0h0Yz1uZXcgS0JkKER4ZSk7QnRjPW5ldyBNQmQoRXhlLHRydWUpO3p0Yz1uZXcgTUJkKEZ4ZSwyKTtEdGM9bmV3IE1CZChHeGUsdHJ1ZSk7R3NjPShXcWMoKSxWcWMpO0ZzYz1uZXcgTUJkKEh4ZSxHc2MpO0JzYz1qZmIoMik7amZiKDEpO0FzYz1uZXcgTUJkKEl4ZSxCc2MpO0RzYz10cnVlO0NzYz1uZXcgTUJkKEp4ZSxEc2MpO1JyYz0oZG9jKCksYm9jKTtRcmM9bmV3IE1CZChLeGUsUnJjKTtQcmM9KE5tYygpLEptYyk7T3JjPW5ldyBNQmQoTHhlLFByYyk7cHJjPShueWMoKSxreWMpO29yYz1uZXcgTUJkKE14ZSxwcmMpO25yYz1uZXcgTUJkKE54ZSxmYWxzZSk7bXJjPW5ldyBNQmQoT3hlLGZhbHNlKTtocmM9KGNVYigpLGJVYik7Z3JjPW5ldyBNQmQoUHhlLGhyYyk7bHJjPShveGMoKSxseGMpO2tyYz1uZXcgTUJkKFF4ZSxscmMpO2lyYz1uZXcgTUJkKFJ4ZSwwKTtqcmM9bmV3IE1CZChTeGUsMCk7a3NjPXhuYztqc2M9X21jO3NzYz1fd2M7dXNjPV93Yzttc2M9V3djO0JyYz0oZWlkKCksYmlkKTtIcmM9YW5jO3pyYz1hbmM7dnJjPWFuYzt3cmM9YmlkO1FzYz1LeGM7UnNjPUh4YztMc2M9SHhjO09zYz1IeGM7VHNjPUp4YztZc2M9S3hjO1hzYz1LeGM7JHJjPSh4aGQoKSx2aGQpO2FzYz12aGQ7YnNjPW56YztUcmM9dWhkO2x0Yz1GemM7bXRjPUR6YztvdGM9RnpjO3B0Yz1EemM7eHRjPUZ6Yzt5dGM9RHpjO3J0Yz1tbmM7dXRjPW5uYztNdGM9RnpjO050Yz1EemM7SXRjPUZ6YztKdGM9RHpjO0N0Yz1EemM7QXRjPUR6YztFdGM9RHpjO0VzYz1VcWN9CmZ1bmN0aW9uIG9vZSgpe29vZT1aY2I7Wm5lPW5ldyBwb2UoNyk7X25lPSgrK25vZSxuZXcgYXBlKDgsOTQpKTsrK25vZTtuZXcgYXBlKDgsNjQpO2FvZT0oKytub2UsbmV3IGFwZSg4LDM2KSk7Z29lPSgrK25vZSxuZXcgYXBlKDgsNjUpKTtob2U9KCsrbm9lLG5ldyBhcGUoOCwxMjIpKTtpb2U9KCsrbm9lLG5ldyBhcGUoOCw5MCkpO2xvZT0oKytub2UsbmV3IGFwZSg4LDk4KSk7ZW9lPSgrK25vZSxuZXcgYXBlKDgsNjYpKTtqb2U9KCsrbm9lLG5ldyBhcGUoOCw2MCkpO21vZT0oKytub2UsbmV3IGFwZSg4LDYyKSk7WW5lPW5ldyBwb2UoMTEpO1duZT0oKytub2UsbmV3IFNvZSg0KSk7TW9lKFduZSw0OCw1Nyk7a29lPSgrK25vZSxuZXcgU29lKDQpKTtNb2Uoa29lLDQ4LDU3KTtNb2Uoa29lLDY1LDkwKTtNb2Uoa29lLDk1LDk1KTtNb2Uoa29lLDk3LDEyMik7Zm9lPSgrK25vZSxuZXcgU29lKDQpKTtNb2UoZm9lLDksOSk7TW9lKGZvZSwxMCwxMCk7TW9lKGZvZSwxMiwxMik7TW9lKGZvZSwxMywxMyk7TW9lKGZvZSwzMiwzMik7Ym9lPVRvZShXbmUpO2RvZT1Ub2Uoa29lKTtjb2U9VG9lKGZvZSk7Um5lPW5ldyBJcmI7U25lPW5ldyBJcmI7VG5lPVdDKE9DKGhKLDEpLGhyZSwyLDYsWydDbicsJ0x1JywnTGwnLCdMdCcsJ0xtJywnTG8nLCdNbicsJ01lJywnTWMnLCdOZCcsJ05sJywnTm8nLCdacycsJ1psJywnWnAnLCdDYycsJ0NmJyxudWxsLCdDbycsJ0NzJywnUGQnLCdQcycsJ1BlJywnUGMnLCdQbycsJ1NtJywnU2MnLCdTaycsJ1NvJywnUGknLCdQZicsJ0wnLCdNJywnTicsJ1onLCdDJywnUCcsJ1MnXSk7UW5lPVdDKE9DKGhKLDEpLGhyZSwyLDYsWydCYXNpYyBMYXRpbicsJ0xhdGluLTEgU3VwcGxlbWVudCcsJ0xhdGluIEV4dGVuZGVkLUEnLCdMYXRpbiBFeHRlbmRlZC1CJywnSVBBIEV4dGVuc2lvbnMnLCdTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMnLCdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MnLCdHcmVlaycsJ0N5cmlsbGljJywnQXJtZW5pYW4nLCdIZWJyZXcnLCdBcmFiaWMnLCdTeXJpYWMnLCdUaGFhbmEnLCdEZXZhbmFnYXJpJywnQmVuZ2FsaScsJ0d1cm11a2hpJywnR3VqYXJhdGknLCdPcml5YScsJ1RhbWlsJywnVGVsdWd1JywnS2FubmFkYScsJ01hbGF5YWxhbScsJ1NpbmhhbGEnLCdUaGFpJywnTGFvJywnVGliZXRhbicsJ015YW5tYXInLCdHZW9yZ2lhbicsJ0hhbmd1bCBKYW1vJywnRXRoaW9waWMnLCdDaGVyb2tlZScsJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MnLCdPZ2hhbScsJ1J1bmljJywnS2htZXInLCdNb25nb2xpYW4nLCdMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsJywnR3JlZWsgRXh0ZW5kZWQnLCdHZW5lcmFsIFB1bmN0dWF0aW9uJywnU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzJywnQ3VycmVuY3kgU3ltYm9scycsJ0NvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scycsJ0xldHRlcmxpa2UgU3ltYm9scycsJ051bWJlciBGb3JtcycsJ0Fycm93cycsJ01hdGhlbWF0aWNhbCBPcGVyYXRvcnMnLCdNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCcsJ0NvbnRyb2wgUGljdHVyZXMnLCdPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbicsJ0VuY2xvc2VkIEFscGhhbnVtZXJpY3MnLCdCb3ggRHJhd2luZycsJ0Jsb2NrIEVsZW1lbnRzJywnR2VvbWV0cmljIFNoYXBlcycsJ01pc2NlbGxhbmVvdXMgU3ltYm9scycsJ0RpbmdiYXRzJywnQnJhaWxsZSBQYXR0ZXJucycsJ0NKSyBSYWRpY2FscyBTdXBwbGVtZW50JywnS2FuZ3hpIFJhZGljYWxzJywnSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycycsJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbicsJ0hpcmFnYW5hJywnS2F0YWthbmEnLCdCb3BvbW9mbycsJ0hhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8nLCdLYW5idW4nLCdCb3BvbW9mbyBFeHRlbmRlZCcsJ0VuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMnLCdDSksgQ29tcGF0aWJpbGl0eScsJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEnLCdDSksgVW5pZmllZCBJZGVvZ3JhcGhzJywnWWkgU3lsbGFibGVzJywnWWkgUmFkaWNhbHMnLCdIYW5ndWwgU3lsbGFibGVzJyxXR2UsJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMnLCdBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcycsJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQScsJ0NvbWJpbmluZyBIYWxmIE1hcmtzJywnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnLCdTbWFsbCBGb3JtIFZhcmlhbnRzJywnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJywnU3BlY2lhbHMnLCdIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcycsJ09sZCBJdGFsaWMnLCdHb3RoaWMnLCdEZXNlcmV0JywnQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scycsJ011c2ljYWwgU3ltYm9scycsJ01hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scycsJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEInLCdDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQnLCdUYWdzJ10pO1VuZT1XQyhPQyhjRSwxKSxpc2UsMzAsMTUsWzY2MzA0LDY2MzUxLDY2MzUyLDY2MzgzLDY2NTYwLDY2NjM5LDExODc4NCwxMTkwMzksMTE5MDQwLDExOTI5NSwxMTk4MDgsMTIwODMxLDEzMTA3MiwxNzM3ODIsMTk0NTYwLDE5NTEwMyw5MTc1MDQsOTE3NjMxXSl9CmZ1bmN0aW9uIHNKYigpe3NKYj1aY2I7cEpiPW5ldyB2SmIoJ09VVF9UX0wnLDAsKFBIYigpLE5IYiksKEdJYigpLERJYiksKGlIYigpLGZIYiksZkhiLFdDKE9DKFVLLDEpLE5xZSwyMiwwLFtucmIoKEVpZCgpLEFpZCksV0MoT0MocjIsMSksRXJlLDk0LDAsW0RpZCx3aWRdKSldKSk7b0piPW5ldyB2SmIoJ09VVF9UX0MnLDEsTUhiLERJYixmSGIsZ0hiLFdDKE9DKFVLLDEpLE5xZSwyMiwwLFtucmIoQWlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtEaWQsdmlkXSkpLG5yYihBaWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0RpZCx2aWQseGlkXSkpXSkpO3FKYj1uZXcgdkpiKCdPVVRfVF9SJywyLE9IYixESWIsZkhiLGhIYixXQyhPQyhVSywxKSxOcWUsMjIsMCxbbnJiKEFpZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbRGlkLHlpZF0pKV0pKTtnSmI9bmV3IHZKYignT1VUX0JfTCcsMyxOSGIsRkliLGhIYixmSGIsV0MoT0MoVUssMSksTnFlLDIyLDAsW25yYihBaWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0JpZCx3aWRdKSldKSk7ZkpiPW5ldyB2SmIoJ09VVF9CX0MnLDQsTUhiLEZJYixoSGIsZ0hiLFdDKE9DKFVLLDEpLE5xZSwyMiwwLFtucmIoQWlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtCaWQsdmlkXSkpLG5yYihBaWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0JpZCx2aWQseGlkXSkpXSkpO2hKYj1uZXcgdkpiKCdPVVRfQl9SJyw1LE9IYixGSWIsaEhiLGhIYixXQyhPQyhVSywxKSxOcWUsMjIsMCxbbnJiKEFpZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbQmlkLHlpZF0pKV0pKTtrSmI9bmV3IHZKYignT1VUX0xfVCcsNixPSGIsRkliLGZIYixmSGIsV0MoT0MoVUssMSksTnFlLDIyLDAsW25yYihBaWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW3dpZCxEaWQseGlkXSkpXSkpO2pKYj1uZXcgdkpiKCdPVVRfTF9DJyw3LE9IYixFSWIsZ0hiLGZIYixXQyhPQyhVSywxKSxOcWUsMjIsMCxbbnJiKEFpZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbd2lkLENpZF0pKSxucmIoQWlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFt3aWQsQ2lkLHhpZF0pKV0pKTtpSmI9bmV3IHZKYignT1VUX0xfQicsOCxPSGIsREliLGhIYixmSGIsV0MoT0MoVUssMSksTnFlLDIyLDAsW25yYihBaWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW3dpZCxCaWQseGlkXSkpXSkpO25KYj1uZXcgdkpiKCdPVVRfUl9UJyw5LE5IYixGSWIsZkhiLGhIYixXQyhPQyhVSywxKSxOcWUsMjIsMCxbbnJiKEFpZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbeWlkLERpZCx4aWRdKSldKSk7bUpiPW5ldyB2SmIoJ09VVF9SX0MnLDEwLE5IYixFSWIsZ0hiLGhIYixXQyhPQyhVSywxKSxOcWUsMjIsMCxbbnJiKEFpZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbeWlkLENpZF0pKSxucmIoQWlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFt5aWQsQ2lkLHhpZF0pKV0pKTtsSmI9bmV3IHZKYignT1VUX1JfQicsMTEsTkhiLERJYixoSGIsaEhiLFdDKE9DKFVLLDEpLE5xZSwyMiwwLFtucmIoQWlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFt5aWQsQmlkLHhpZF0pKV0pKTtkSmI9bmV3IHZKYignSU5fVF9MJywxMixOSGIsRkliLGZIYixmSGIsV0MoT0MoVUssMSksTnFlLDIyLDAsW25yYih6aWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0RpZCx3aWRdKSksbnJiKHppZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbRGlkLHdpZCx4aWRdKSldKSk7Y0piPW5ldyB2SmIoJ0lOX1RfQycsMTMsTUhiLEZJYixmSGIsZ0hiLFdDKE9DKFVLLDEpLE5xZSwyMiwwLFtucmIoemlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtEaWQsdmlkXSkpLG5yYih6aWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0RpZCx2aWQseGlkXSkpXSkpO2VKYj1uZXcgdkpiKCdJTl9UX1InLDE0LE9IYixGSWIsZkhiLGhIYixXQyhPQyhVSywxKSxOcWUsMjIsMCxbbnJiKHppZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbRGlkLHlpZF0pKSxucmIoemlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtEaWQseWlkLHhpZF0pKV0pKTthSmI9bmV3IHZKYignSU5fQ19MJywxNSxOSGIsRUliLGdIYixmSGIsV0MoT0MoVUssMSksTnFlLDIyLDAsW25yYih6aWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0NpZCx3aWRdKSksbnJiKHppZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbQ2lkLHdpZCx4aWRdKSldKSk7X0liPW5ldyB2SmIoJ0lOX0NfQycsMTYsTUhiLEVJYixnSGIsZ0hiLFdDKE9DKFVLLDEpLE5xZSwyMiwwLFtucmIoemlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtDaWQsdmlkXSkpLG5yYih6aWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0NpZCx2aWQseGlkXSkpXSkpO2JKYj1uZXcgdkpiKCdJTl9DX1InLDE3LE9IYixFSWIsZ0hiLGhIYixXQyhPQyhVSywxKSxOcWUsMjIsMCxbbnJiKHppZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbQ2lkLHlpZF0pKSxucmIoemlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtDaWQseWlkLHhpZF0pKV0pKTtaSWI9bmV3IHZKYignSU5fQl9MJywxOCxOSGIsREliLGhIYixmSGIsV0MoT0MoVUssMSksTnFlLDIyLDAsW25yYih6aWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0JpZCx3aWRdKSksbnJiKHppZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbQmlkLHdpZCx4aWRdKSldKSk7WUliPW5ldyB2SmIoJ0lOX0JfQycsMTksTUhiLERJYixoSGIsZ0hiLFdDKE9DKFVLLDEpLE5xZSwyMiwwLFtucmIoemlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtCaWQsdmlkXSkpLG5yYih6aWQsV0MoT0MocjIsMSksRXJlLDk0LDAsW0JpZCx2aWQseGlkXSkpXSkpOyRJYj1uZXcgdkpiKCdJTl9CX1InLDIwLE9IYixESWIsaEhiLGhIYixXQyhPQyhVSywxKSxOcWUsMjIsMCxbbnJiKHppZCxXQyhPQyhyMiwxKSxFcmUsOTQsMCxbQmlkLHlpZF0pKSxucmIoemlkLFdDKE9DKHIyLDEpLEVyZSw5NCwwLFtCaWQseWlkLHhpZF0pKV0pKTtySmI9bmV3IHZKYihldWUsMjEsbnVsbCxudWxsLG51bGwsbnVsbCxXQyhPQyhVSywxKSxOcWUsMjIsMCxbXSkpfQpmdW5jdGlvbiBjUGQoKXtjUGQ9WmNiO0lPZD0oR09kKCksRk9kKS5iO0pEKG5EZChTVGQoRk9kLmIpLDApLDM1KTtKRChuRGQoU1RkKEZPZC5iKSwxKSwxOSk7SE9kPUZPZC5hO0pEKG5EZChTVGQoRk9kLmEpLDApLDM1KTtKRChuRGQoU1RkKEZPZC5hKSwxKSwxOSk7SkQobkRkKFNUZChGT2QuYSksMiksMTkpO0pEKG5EZChTVGQoRk9kLmEpLDMpLDE5KTtKRChuRGQoU1RkKEZPZC5hKSw0KSwxOSk7Sk9kPUZPZC5vO0pEKG5EZChTVGQoRk9kLm8pLDApLDM1KTtKRChuRGQoU1RkKEZPZC5vKSwxKSwzNSk7TE9kPUpEKG5EZChTVGQoRk9kLm8pLDIpLDE5KTtKRChuRGQoU1RkKEZPZC5vKSwzKSwxOSk7SkQobkRkKFNUZChGT2QubyksNCksMTkpO0pEKG5EZChTVGQoRk9kLm8pLDUpLDE5KTtKRChuRGQoU1RkKEZPZC5vKSw2KSwxOSk7SkQobkRkKFNUZChGT2QubyksNyksMTkpO0pEKG5EZChTVGQoRk9kLm8pLDgpLDE5KTtKRChuRGQoU1RkKEZPZC5vKSw5KSwxOSk7SkQobkRkKFNUZChGT2QubyksMTApLDE5KTtKRChuRGQoU1RkKEZPZC5vKSwxMSksMTkpO0pEKG5EZChTVGQoRk9kLm8pLDEyKSwxOSk7SkQobkRkKFNUZChGT2QubyksMTMpLDE5KTtKRChuRGQoU1RkKEZPZC5vKSwxNCksMTkpO0pEKG5EZChTVGQoRk9kLm8pLDE1KSwxOSk7SkQobkRkKFBUZChGT2QubyksMCksNjIpO0pEKG5EZChQVGQoRk9kLm8pLDEpLDYyKTtKRChuRGQoUFRkKEZPZC5vKSwyKSw2Mik7SkQobkRkKFBUZChGT2QubyksMyksNjIpO0pEKG5EZChQVGQoRk9kLm8pLDQpLDYyKTtKRChuRGQoUFRkKEZPZC5vKSw1KSw2Mik7SkQobkRkKFBUZChGT2QubyksNiksNjIpO0pEKG5EZChQVGQoRk9kLm8pLDcpLDYyKTtKRChuRGQoUFRkKEZPZC5vKSw4KSw2Mik7SkQobkRkKFBUZChGT2QubyksOSksNjIpO0tPZD1GT2QucDtKRChuRGQoU1RkKEZPZC5wKSwwKSwzNSk7SkQobkRkKFNUZChGT2QucCksMSksMzUpO0pEKG5EZChTVGQoRk9kLnApLDIpLDM1KTtKRChuRGQoU1RkKEZPZC5wKSwzKSwzNSk7SkQobkRkKFNUZChGT2QucCksNCksMTkpO0pEKG5EZChTVGQoRk9kLnApLDUpLDE5KTtKRChuRGQoUFRkKEZPZC5wKSwwKSw2Mik7SkQobkRkKFBUZChGT2QucCksMSksNjIpO01PZD1GT2QucTtKRChuRGQoU1RkKEZPZC5xKSwwKSwzNSk7Tk9kPUZPZC52O0pEKG5EZChTVGQoRk9kLnYpLDApLDE5KTtKRChuRGQoUFRkKEZPZC52KSwwKSw2Mik7SkQobkRkKFBUZChGT2QudiksMSksNjIpO0pEKG5EZChQVGQoRk9kLnYpLDIpLDYyKTtPT2Q9Rk9kLnc7SkQobkRkKFNUZChGT2QudyksMCksMzUpO0pEKG5EZChTVGQoRk9kLncpLDEpLDM1KTtKRChuRGQoU1RkKEZPZC53KSwyKSwzNSk7SkQobkRkKFNUZChGT2QudyksMyksMTkpO1BPZD1GT2QuQjtKRChuRGQoU1RkKEZPZC5CKSwwKSwxOSk7SkQobkRkKFBUZChGT2QuQiksMCksNjIpO0pEKG5EZChQVGQoRk9kLkIpLDEpLDYyKTtKRChuRGQoUFRkKEZPZC5CKSwyKSw2Mik7U09kPUZPZC5RO0pEKG5EZChTVGQoRk9kLlEpLDApLDE5KTtKRChuRGQoUFRkKEZPZC5RKSwwKSw2Mik7VE9kPUZPZC5SO0pEKG5EZChTVGQoRk9kLlIpLDApLDM1KTtVT2Q9Rk9kLlM7SkQobkRkKFBUZChGT2QuUyksMCksNjIpO0pEKG5EZChQVGQoRk9kLlMpLDEpLDYyKTtKRChuRGQoUFRkKEZPZC5TKSwyKSw2Mik7SkQobkRkKFBUZChGT2QuUyksMyksNjIpO0pEKG5EZChQVGQoRk9kLlMpLDQpLDYyKTtKRChuRGQoUFRkKEZPZC5TKSw1KSw2Mik7SkQobkRkKFBUZChGT2QuUyksNiksNjIpO0pEKG5EZChQVGQoRk9kLlMpLDcpLDYyKTtKRChuRGQoUFRkKEZPZC5TKSw4KSw2Mik7SkQobkRkKFBUZChGT2QuUyksOSksNjIpO0pEKG5EZChQVGQoRk9kLlMpLDEwKSw2Mik7SkQobkRkKFBUZChGT2QuUyksMTEpLDYyKTtKRChuRGQoUFRkKEZPZC5TKSwxMiksNjIpO0pEKG5EZChQVGQoRk9kLlMpLDEzKSw2Mik7SkQobkRkKFBUZChGT2QuUyksMTQpLDYyKTtWT2Q9Rk9kLlQ7SkQobkRkKFNUZChGT2QuVCksMCksMTkpO0pEKG5EZChTVGQoRk9kLlQpLDIpLDE5KTtXT2Q9SkQobkRkKFNUZChGT2QuVCksMyksMTkpO0pEKG5EZChTVGQoRk9kLlQpLDQpLDE5KTtKRChuRGQoUFRkKEZPZC5UKSwwKSw2Mik7SkQobkRkKFBUZChGT2QuVCksMSksNjIpO0pEKG5EZChTVGQoRk9kLlQpLDEpLDE5KTtYT2Q9Rk9kLlU7SkQobkRkKFNUZChGT2QuVSksMCksMzUpO0pEKG5EZChTVGQoRk9kLlUpLDEpLDM1KTtKRChuRGQoU1RkKEZPZC5VKSwyKSwxOSk7SkQobkRkKFNUZChGT2QuVSksMyksMTkpO0pEKG5EZChTVGQoRk9kLlUpLDQpLDE5KTtKRChuRGQoU1RkKEZPZC5VKSw1KSwxOSk7SkQobkRkKFBUZChGT2QuVSksMCksNjIpO1lPZD1GT2QuVjtKRChuRGQoU1RkKEZPZC5WKSwwKSwxOSk7Wk9kPUZPZC5XO0pEKG5EZChTVGQoRk9kLlcpLDApLDM1KTtKRChuRGQoU1RkKEZPZC5XKSwxKSwzNSk7SkQobkRkKFNUZChGT2QuVyksMiksMzUpO0pEKG5EZChTVGQoRk9kLlcpLDMpLDE5KTtKRChuRGQoU1RkKEZPZC5XKSw0KSwxOSk7SkQobkRkKFNUZChGT2QuVyksNSksMTkpO19PZD1GT2QuYmI7SkQobkRkKFNUZChGT2QuYmIpLDApLDM1KTtKRChuRGQoU1RkKEZPZC5iYiksMSksMzUpO0pEKG5EZChTVGQoRk9kLmJiKSwyKSwzNSk7SkQobkRkKFNUZChGT2QuYmIpLDMpLDM1KTtKRChuRGQoU1RkKEZPZC5iYiksNCksMzUpO0pEKG5EZChTVGQoRk9kLmJiKSw1KSwzNSk7SkQobkRkKFNUZChGT2QuYmIpLDYpLDM1KTtKRChuRGQoU1RkKEZPZC5iYiksNyksMTkpO0pEKG5EZChQVGQoRk9kLmJiKSwwKSw2Mik7SkQobkRkKFBUZChGT2QuYmIpLDEpLDYyKTthUGQ9Rk9kLmViO0pEKG5EZChTVGQoRk9kLmViKSwwKSwzNSk7SkQobkRkKFNUZChGT2QuZWIpLDEpLDM1KTtKRChuRGQoU1RkKEZPZC5lYiksMiksMzUpO0pEKG5EZChTVGQoRk9kLmViKSwzKSwzNSk7SkQobkRkKFNUZChGT2QuZWIpLDQpLDM1KTtKRChuRGQoU1RkKEZPZC5lYiksNSksMzUpO0pEKG5EZChTVGQoRk9kLmViKSw2KSwxOSk7SkQobkRkKFNUZChGT2QuZWIpLDcpLDE5KTskT2Q9Rk9kLmFiO0pEKG5EZChTVGQoRk9kLmFiKSwwKSwzNSk7SkQobkRkKFNUZChGT2QuYWIpLDEpLDM1KTtRT2Q9Rk9kLkg7SkQobkRkKFNUZChGT2QuSCksMCksMTkpO0pEKG5EZChTVGQoRk9kLkgpLDEpLDE5KTtKRChuRGQoU1RkKEZPZC5IKSwyKSwxOSk7SkQobkRkKFNUZChGT2QuSCksMyksMTkpO0pEKG5EZChTVGQoRk9kLkgpLDQpLDE5KTtKRChuRGQoU1RkKEZPZC5IKSw1KSwxOSk7SkQobkRkKFBUZChGT2QuSCksMCksNjIpO2JQZD1GT2QuZGI7SkQobkRkKFNUZChGT2QuZGIpLDApLDE5KTtST2Q9Rk9kLk19CmZ1bmN0aW9uIFZpZShhKXt2YXIgYjtpZihhLk8pcmV0dXJuO2EuTz10cnVlO3J2ZChhLCd0eXBlJyk7ZXdkKGEsJ2Vjb3JlLnhtbC50eXBlJyk7ZndkKGEsZUdlKTtiPUpEKGcxZCgock9kKCkscU9kKSxlR2UpLDE5OTApO3RDZChVVGQoYS5mYiksYS5iKTtadmQoYS5iLE5hYiwnQW55VHlwZScsZmFsc2UsZmFsc2UsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5iKSwwKSwzNSksYS53Yi5ELHFGZSxudWxsLDAsLTEsTmFiLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuYiksMSksMzUpLGEud2IuRCwnYW55JyxudWxsLDAsLTEsTmFiLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEuYiksMiksMzUpLGEud2IuRCwnYW55QXR0cmlidXRlJyxudWxsLDAsLTEsTmFiLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO1p2ZChhLmJiLFBhYixqR2UsZmFsc2UsZmFsc2UsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5iYiksMCksMzUpLGEuZ2IsJ2RhdGEnLG51bGwsMCwxLFBhYixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuYmIpLDEpLDM1KSxhLmdiLEREZSxudWxsLDEsMSxQYWIsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtadmQoYS5mYixRYWIsa0dlLGZhbHNlLGZhbHNlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEuZmIpLDApLDM1KSxiLmdiLCdyYXdWYWx1ZScsbnVsbCwwLDEsUWFiLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLHRydWUsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5mYiksMSksMzUpLGIuYSxiRGUsbnVsbCwwLDEsUWFiLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLHRydWUsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5mYiksMiksMTkpLGEud2IucSxudWxsLCdpbnN0YW5jZVR5cGUnLDEsMSxRYWIsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7WnZkKGEucWIsUmFiLGxHZSxmYWxzZSxmYWxzZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLnFiKSwwKSwzNSksYS53Yi5ELHFGZSxudWxsLDAsLTEsbnVsbCxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLnFiKSwxKSwxOSksYS53Yi5hYixudWxsLCd4TUxOU1ByZWZpeE1hcCcsMCwtMSxudWxsLHRydWUsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLnFiKSwyKSwxOSksYS53Yi5hYixudWxsLCd4U0lTY2hlbWFMb2NhdGlvbicsMCwtMSxudWxsLHRydWUsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLnFiKSwzKSwzNSksYS5nYiwnY0RBVEEnLG51bGwsMCwtMixudWxsLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEucWIpLDQpLDM1KSxhLmdiLCdjb21tZW50JyxudWxsLDAsLTIsbnVsbCx0cnVlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLnFiKSw1KSwxOSksYS5iYixudWxsLExHZSwwLC0yLG51bGwsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLnFiKSw2KSwzNSksYS5nYixpRGUsbnVsbCwwLC0yLG51bGwsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSk7X3ZkKGEuYSxhSiwnQW55U2ltcGxlVHlwZScsdHJ1ZSk7X3ZkKGEuYyxoSiwnQW55VVJJJyx0cnVlKTtfdmQoYS5kLE9DKCRELDEpLCdCYXNlNjRCaW5hcnknLHRydWUpO192ZChhLmUscGNiLCdCb29sZWFuJyx0cnVlKTtfdmQoYS5mLEdJLCdCb29sZWFuT2JqZWN0Jyx0cnVlKTtfdmQoYS5nLCRELCdCeXRlJyx0cnVlKTtfdmQoYS5pLEhJLCdCeXRlT2JqZWN0Jyx0cnVlKTtfdmQoYS5qLGhKLCdEYXRlJyx0cnVlKTtfdmQoYS5rLGhKLCdEYXRlVGltZScsdHJ1ZSk7X3ZkKGEubixrSiwnRGVjaW1hbCcsdHJ1ZSk7X3ZkKGEubyxhRSwnRG91YmxlJyx0cnVlKTtfdmQoYS5wLExJLCdEb3VibGVPYmplY3QnLHRydWUpO192ZChhLnEsaEosJ0R1cmF0aW9uJyx0cnVlKTtfdmQoYS5zLEhLLCdFTlRJVElFUycsdHJ1ZSk7X3ZkKGEucixISywnRU5USVRJRVNCYXNlJyx0cnVlKTtfdmQoYS50LGhKLHJHZSx0cnVlKTtfdmQoYS51LGJFLCdGbG9hdCcsdHJ1ZSk7X3ZkKGEudixRSSwnRmxvYXRPYmplY3QnLHRydWUpO192ZChhLncsaEosJ0dEYXknLHRydWUpO192ZChhLkIsaEosJ0dNb250aCcsdHJ1ZSk7X3ZkKGEuQSxoSiwnR01vbnRoRGF5Jyx0cnVlKTtfdmQoYS5DLGhKLCdHWWVhcicsdHJ1ZSk7X3ZkKGEuRCxoSiwnR1llYXJNb250aCcsdHJ1ZSk7X3ZkKGEuRixPQygkRCwxKSwnSGV4QmluYXJ5Jyx0cnVlKTtfdmQoYS5HLGhKLCdJRCcsdHJ1ZSk7X3ZkKGEuSCxoSiwnSURSRUYnLHRydWUpO192ZChhLkosSEssJ0lEUkVGUycsdHJ1ZSk7X3ZkKGEuSSxISywnSURSRUZTQmFzZScsdHJ1ZSk7X3ZkKGEuSyxjRSwnSW50Jyx0cnVlKTtfdmQoYS5NLGxKLCdJbnRlZ2VyJyx0cnVlKTtfdmQoYS5MLFVJLCdJbnRPYmplY3QnLHRydWUpO192ZChhLlAsaEosJ0xhbmd1YWdlJyx0cnVlKTtfdmQoYS5RLGRFLCdMb25nJyx0cnVlKTtfdmQoYS5SLFhJLCdMb25nT2JqZWN0Jyx0cnVlKTtfdmQoYS5TLGhKLCdOYW1lJyx0cnVlKTtfdmQoYS5ULGhKLHNHZSx0cnVlKTtfdmQoYS5VLGxKLCdOZWdhdGl2ZUludGVnZXInLHRydWUpO192ZChhLlYsaEosQ0dlLHRydWUpO192ZChhLlgsSEssJ05NVE9LRU5TJyx0cnVlKTtfdmQoYS5XLEhLLCdOTVRPS0VOU0Jhc2UnLHRydWUpO192ZChhLlksbEosJ05vbk5lZ2F0aXZlSW50ZWdlcicsdHJ1ZSk7X3ZkKGEuWixsSiwnTm9uUG9zaXRpdmVJbnRlZ2VyJyx0cnVlKTtfdmQoYS4kLGhKLCdOb3JtYWxpemVkU3RyaW5nJyx0cnVlKTtfdmQoYS5fLGhKLCdOT1RBVElPTicsdHJ1ZSk7X3ZkKGEuYWIsaEosJ1Bvc2l0aXZlSW50ZWdlcicsdHJ1ZSk7X3ZkKGEuY2IsaEosJ1FOYW1lJyx0cnVlKTtfdmQoYS5kYixvY2IsJ1Nob3J0Jyx0cnVlKTtfdmQoYS5lYixjSiwnU2hvcnRPYmplY3QnLHRydWUpO192ZChhLmdiLGhKLFByZSx0cnVlKTtfdmQoYS5oYixoSiwnVGltZScsdHJ1ZSk7X3ZkKGEuaWIsaEosJ1Rva2VuJyx0cnVlKTtfdmQoYS5qYixvY2IsJ1Vuc2lnbmVkQnl0ZScsdHJ1ZSk7X3ZkKGEua2IsY0osJ1Vuc2lnbmVkQnl0ZU9iamVjdCcsdHJ1ZSk7X3ZkKGEubGIsZEUsJ1Vuc2lnbmVkSW50Jyx0cnVlKTtfdmQoYS5tYixYSSwnVW5zaWduZWRJbnRPYmplY3QnLHRydWUpO192ZChhLm5iLGxKLCdVbnNpZ25lZExvbmcnLHRydWUpO192ZChhLm9iLGNFLCdVbnNpZ25lZFNob3J0Jyx0cnVlKTtfdmQoYS5wYixVSSwnVW5zaWduZWRTaG9ydE9iamVjdCcsdHJ1ZSk7VHZkKGEsZUdlKTtUaWUoYSl9CmZ1bmN0aW9uIFU4YyhhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxELEYsRyxILEksSixLLEwsTSxOLE8sUCxRLFIsUyxULFUsVixXLFgsWSxaLCQsYWIsYmI7aWYoZC5ZZygpKXtyZXR1cm4gcG5iKCkscG5iKCksbW5ifWlmKHlkYihMRChrc2QoYiwoTGdkKCksSWZkKSkpKSl7cmV0dXJuIHBuYigpLHBuYigpLG1uYn1BPSghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSkuaSE9MDtDPVM4YyhiKTtCPSFDLmRjKCk7aWYoQXx8Qil7ZT1KRChrc2QoYixpZ2QpLDE0OSk7aWYoIWUpe3Rocm93IHNjYihuZXcgWThjKCdSZXNvbHZlZCBhbGdvcml0aG0gaXMgbm90IHNldDsgYXBwbHkgYSBMYXlvdXRBbGdvcml0aG1SZXNvbHZlciBiZWZvcmUgY29tcHV0aW5nIGxheW91dC4nKSl9Wj1iYWQoZSwoQkJkKCkseEJkKSk7UThjKGIpO2lmKCFBJiZCJiYhWil7cmV0dXJuIHBuYigpLHBuYigpLG1uYn10PW5ldyBVbGI7aWYoWEQoa3NkKGIsaWZkKSk9PT1YRCgoZWlkKCksYmlkKSkmJihiYWQoZSx1QmQpfHxiYWQoZSx0QmQpKSl7aWYoeWRiKExEKGtzZChiLERnZCkpKSl7dGhyb3cgc2NiKG5ldyBZOGMoJ1RvcGRvd24gbGF5b3V0IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggaGllcmFyY2h5IGhhbmRsaW5nLicpKX1NPVA4YyhhLGIpO049bmV3IE10Yjt4ZShOLCghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSkpO3doaWxlKE4uYiE9MCl7Sz1KRChOLmI9PTA/bnVsbDoockRiKE4uYiE9MCksS3RiKE4sTi5hLmEpKSwyNyk7UThjKEspO1k9WEQoa3NkKEssaWZkKSk9PT1YRChkaWQpO2lmKFl8fGxzZChLLE5lZCkmJiFhYWQoZSxrc2QoSyxpZ2QpKSl7cT1VOGMoYSxLLGMsZCk7S2xiKHQscSk7bXNkKEssaWZkLGRpZCk7VW1kKEspfWVsc2V7eGUoTiwoIUsuYSYmKEsuYT1uZXcgWDBkKEEzLEssMTAsMTEpKSxLLmEpKX19fWVsc2V7TT0oIWIuYSYmKGIuYT1uZXcgWDBkKEEzLGIsMTAsMTEpKSxiLmEpLmk7aWYoeWRiKExEKGtzZChiLERnZCkpKSl7JD1kLmJoKDEpOyQuU2codkJlLDEpO2lmKGtzZChiLEVnZCk9PW51bGwpe3Rocm93IHNjYihuZXcgWThjKGIuaysnIGhhcyBub3QgYmVlbiBhc3NpZ25lZCBhIHRvcC1kb3duIG5vZGUgdHlwZS4nKSl9aWYoSkQoa3NkKGIsRWdkKSwyNzgpPT0oV2tkKCksVGtkKXx8SkQoa3NkKGIsRWdkKSwyNzgpPT1Wa2Qpe2ZvcihzPW5ldyBDSGQoKCFiLmEmJihiLmE9bmV3IFgwZChBMyxiLDEwLDExKSksYi5hKSk7cy5lIT1zLmkuZ2MoKTspe3I9SkQoQUhkKHMpLDI3KTtKPUpEKGtzZChyLGlnZCksMTQ5KTtpZigoIXIuYSYmKHIuYT1uZXcgWDBkKEEzLHIsMTAsMTEpKSxyLmEpLmk+MCYmKFZuZChKLmYpLGZhbHNlKSl7aWYoSkQoa3NkKHIsRWdkKSwyNzgpPT1Ua2Qpe3Rocm93IHNjYihuZXcgWThjKCdUb3Bkb3duIExheW91dCBQcm92aWRlcnMgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBwYXJhbGxlbCBub2Rlcy4nKSl9WkQoVm5kKEouZikpO251bGwuUm0oKTtkdGQociwkd25kLk1hdGgubWF4KHIuZyxudWxsLlNtKSwkd25kLk1hdGgubWF4KHIuZixudWxsLlNtKSl9ZWxzZSBpZihrc2QocixKZ2QpIT1udWxsKXtoPUpEKGtzZChyLEpnZCksMzQzKTtYPWguUmcocik7UD1KRChrc2QocixLZmQpLDEwNyk7ZHRkKHIsJHduZC5NYXRoLm1heChyLmcsWC5hK1AuYitQLmMpLCR3bmQuTWF0aC5tYXgoci5mLFguYitQLmQrUC5hKSl9ZWxzZXsoIXIuYSYmKHIuYT1uZXcgWDBkKEEzLHIsMTAsMTEpKSxyLmEpLmkhPTAmJmR0ZChyLEJlYihNRChrc2QocixDZ2QpKSksQmViKE1EKGtzZChyLENnZCkpKS9CZWIoTUQoa3NkKHIsQmdkKSkpKX19fU89SkQoa3NkKGIsS2ZkKSwxMDcpO249Yi5nLShPLmIrTy5jKTttPWIuZi0oTy5kK08uYSk7JC5fZygnQXZhaWxhYmxlIENoaWxkIEFyZWE6ICgnK24rJ3wnK20rJyknKTttc2QoYixRZWQsbi9tKTtSOGMoYixlLGQuYmgoTSkpO2lmKEpEKGtzZChiLEVnZCksMjc4KT09VmtkKXtabWQoYik7ZHRkKGIsTy5iK0JlYihNRChrc2QoYixWZWQpKSkrTy5jLE8uZCtCZWIoTUQoa3NkKGIsVWVkKSkpK08uYSl9JC5fZygnRXhlY3V0ZWQgbGF5b3V0IGFsZ29yaXRobTogJytPRChrc2QoYixOZWQpKSsnIG9uIG5vZGUgJytiLmspO2lmKEpEKGtzZChiLEVnZCksMjc4KT09VGtkKXtpZihuPDB8fG08MCl7dGhyb3cgc2NiKG5ldyBZOGMoJ1RoZSBzaXplIGRlZmluZWQgYnkgdGhlIHBhcmVudCBwYXJhbGxlbCBub2RlIGlzIHRvbyBzbWFsbCBmb3IgdGhlIHNwYWNlIHByb3ZpZGVkIGJ5IHRoZSBwYWRkaW5ncyBvZiB0aGUgY2hpbGQgaGllcmFyY2hpY2FsIG5vZGUuICcrYi5rKSl9bHNkKGIsVmVkKXx8bHNkKGIsVWVkKXx8Wm1kKGIpO3A9QmViKE1EKGtzZChiLFZlZCkpKTtvPUJlYihNRChrc2QoYixVZWQpKSk7JC5fZygnRGVzaXJlZCBDaGlsZCBBcmVhOiAoJytwKyd8JytvKycpJyk7Uj1uL3A7Uz1tL287UT0kd25kLk1hdGgubWluKFIsJHduZC5NYXRoLm1pbihTLEJlYihNRChrc2QoYixGZ2QpKSkpKTttc2QoYixIZ2QsUSk7JC5fZyhiLmsrJyAtLSBMb2NhbCBTY2FsZSBGYWN0b3IgKFh8WSk6ICgnK1IrJ3wnK1MrJyknKTt1PUpEKGtzZChiLFhlZCksMjIpO2Y9MDtnPTA7UTxSJiYodS5HYygoSGVkKCksQmVkKSk/KGY9KG4vMi1wKlEvMikvUSk6dS5HYyhEZWQpJiYoZj0obi1wKlEpL1EpKTtRPFMmJih1LkdjKChIZWQoKSxGZWQpKT8oZz0obS8yLW8qUS8yKS9RKTp1LkdjKEVlZCkmJihnPShtLW8qUSkvUSkpO2FiPWYrKE8uYi9RLU8uYik7YmI9ZysoTy5kL1EtTy5kKTskLl9nKCdTaGlmdDogKCcrYWIrJ3wnK2JiKycpJyk7Zm9yKEw9bmV3IENIZCgoIWIuYSYmKGIuYT1uZXcgWDBkKEEzLGIsMTAsMTEpKSxiLmEpKTtMLmUhPUwuaS5nYygpOyl7Sz1KRChBSGQoTCksMjcpO2h0ZChLLEsuaSthYik7aXRkKEssSy5qK2JiKX1mb3Iodz1uZXcgQ0hkKCghYi5iJiYoYi5iPW5ldyBYMGQoeDMsYiwxMiwzKSksYi5iKSk7dy5lIT13LmkuZ2MoKTspe3Y9SkQoQUhkKHcpLDg1KTtmb3IoVT1uZXcgQ0hkKCghdi5hJiYodi5hPW5ldyBYMGQodzMsdiw2LDYpKSx2LmEpKTtVLmUhPVUuaS5nYygpOyl7VD1KRChBSGQoVSksMTY4KTtwdWQoVCxULmorYWIsVC5rK2JiKTtpdWQoVCxULmIrYWIsVC5jK2JiKTtmb3Ioaj1uZXcgQ0hkKCghVC5hJiYoVC5hPW5ldyBxVmQodTMsVCw1KSksVC5hKSk7ai5lIT1qLmkuZ2MoKTspe2k9SkQoQUhkKGopLDM2OSk7eXNkKGksaS5hK2FiLGkuYitiYil9fWZvcihJPW5ldyBDSGQoKCF2Lm4mJih2Lm49bmV3IFgwZCh6Myx2LDEsNykpLHYubikpO0kuZSE9SS5pLmdjKCk7KXtIPUpEKEFIZChJKSwxNTMpO2Z0ZChILEguaSthYixILmorYmIpfUc9SkQoa3NkKHYsdGZkKSw3Nyk7Zm9yKEY9R3RiKEcsMCk7Ri5iIT1GLmQuYzspe0Q9SkQoVXRiKEYpLDgpO0QuYSs9YWI7RC5iKz1iYn1tc2Qodix0ZmQsRyl9fSQuVGcoKX1mb3IobD1uZXcgQ0hkKCghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSkpO2wuZSE9bC5pLmdjKCk7KXtrPUpEKEFIZChsKSwyNyk7cT1VOGMoYSxrLGMsZCk7S2xiKHQscSk7VW1kKGspfX1pZihkLllnKCkpe3JldHVybiBwbmIoKSxwbmIoKSxtbmJ9Zm9yKFc9bmV3IHJtYih0KTtXLmE8Vy5jLmMubGVuZ3RoOyl7Vj1KRChwbWIoVyksODUpO21zZChWLElmZCwoeGRiKCksdHJ1ZSkpfXlkYihMRChrc2QoYixEZ2QpKSl8fFI4YyhiLGUsZC5iaChNKSk7VjhjKHQpO3JldHVybiBCJiZaP0M6KHBuYigpLHBuYigpLG1uYil9ZWxzZXtyZXR1cm4gcG5iKCkscG5iKCksbW5ifX0KZnVuY3Rpb24gY25lKGEsYil7dmFyIGMsZDtpZighV21lKXtXbWU9bmV3IElyYjtYbWU9bmV3IElyYjtkPShvb2UoKSxvb2UoKSwrK25vZSxuZXcgU29lKDQpKTtKbmUoZCwnXHRcblxyXHIgICcpO1JpYihXbWUsUkdlLGQpO1JpYihYbWUsUkdlLFRvZShkKSk7ZD0obnVsbCwrK25vZSxuZXcgU29lKDQpKTtKbmUoZCxVR2UpO1JpYihXbWUsUEdlLGQpO1JpYihYbWUsUEdlLFRvZShkKSk7ZD0obnVsbCwrK25vZSxuZXcgU29lKDQpKTtKbmUoZCxVR2UpO1JpYihXbWUsUEdlLGQpO1JpYihYbWUsUEdlLFRvZShkKSk7ZD0obnVsbCwrK25vZSxuZXcgU29lKDQpKTtKbmUoZCxWR2UpO1BvZShkLEpEKE9pYihXbWUsUEdlKSwxMjEpKTtSaWIoV21lLFFHZSxkKTtSaWIoWG1lLFFHZSxUb2UoZCkpO2Q9KG51bGwsKytub2UsbmV3IFNvZSg0KSk7Sm5lKGQsJy0uMDpBWl9fYXpceEI3XHhCN1x4QzBceEQ2XHhEOFx4RjZceEY4XHUwMTMxXHUwMTM0XHUwMTNFXHUwMTQxXHUwMTQ4XHUwMTRBXHUwMTdFXHUwMTgwXHUwMUMzXHUwMUNEXHUwMUYwXHUwMUY0XHUwMUY1XHUwMUZBXHUwMjE3XHUwMjUwXHUwMkE4XHUwMkJCXHUwMkMxXHUwMkQwXHUwMkQxXHUwMzAwXHUwMzQ1XHUwMzYwXHUwMzYxXHUwMzg2XHUwMzhBXHUwMzhDXHUwMzhDXHUwMzhFXHUwM0ExXHUwM0EzXHUwM0NFXHUwM0QwXHUwM0Q2XHUwM0RBXHUwM0RBXHUwM0RDXHUwM0RDXHUwM0RFXHUwM0RFXHUwM0UwXHUwM0UwXHUwM0UyXHUwM0YzXHUwNDAxXHUwNDBDXHUwNDBFXHUwNDRGXHUwNDUxXHUwNDVDXHUwNDVFXHUwNDgxXHUwNDgzXHUwNDg2XHUwNDkwXHUwNEM0XHUwNEM3XHUwNEM4XHUwNENCXHUwNENDXHUwNEQwXHUwNEVCXHUwNEVFXHUwNEY1XHUwNEY4XHUwNEY5XHUwNTMxXHUwNTU2XHUwNTU5XHUwNTU5XHUwNTYxXHUwNTg2XHUwNTkxXHUwNUExXHUwNUEzXHUwNUI5XHUwNUJCXHUwNUJEXHUwNUJGXHUwNUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM0XHUwNUQwXHUwNUVBXHUwNUYwXHUwNUYyXHUwNjIxXHUwNjNBXHUwNjQwXHUwNjUyXHUwNjYwXHUwNjY5XHUwNjcwXHUwNkI3XHUwNkJBXHUwNkJFXHUwNkMwXHUwNkNFXHUwNkQwXHUwNkQzXHUwNkQ1XHUwNkU4XHUwNkVBXHUwNkVEXHUwNkYwXHUwNkY5XHUwOTAxXHUwOTAzXHUwOTA1XHUwOTM5XHUwOTNDXHUwOTREXHUwOTUxXHUwOTU0XHUwOTU4XHUwOTYzXHUwOTY2XHUwOTZGXHUwOTgxXHUwOTgzXHUwOTg1XHUwOThDXHUwOThGXHUwOTkwXHUwOTkzXHUwOUE4XHUwOUFBXHUwOUIwXHUwOUIyXHUwOUIyXHUwOUI2XHUwOUI5XHUwOUJDXHUwOUJDXHUwOUJFXHUwOUM0XHUwOUM3XHUwOUM4XHUwOUNCXHUwOUNEXHUwOUQ3XHUwOUQ3XHUwOURDXHUwOUREXHUwOURGXHUwOUUzXHUwOUU2XHUwOUYxXHUwQTAyXHUwQTAyXHUwQTA1XHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzXHUwQTI4XHUwQTJBXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTNDXHUwQTNDXHUwQTNFXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCXHUwQTREXHUwQTU5XHUwQTVDXHUwQTVFXHUwQTVFXHUwQTY2XHUwQTc0XHUwQTgxXHUwQTgzXHUwQTg1XHUwQThCXHUwQThEXHUwQThEXHUwQThGXHUwQTkxXHUwQTkzXHUwQUE4XHUwQUFBXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1XHUwQUI5XHUwQUJDXHUwQUM1XHUwQUM3XHUwQUM5XHUwQUNCXHUwQUNEXHUwQUUwXHUwQUUwXHUwQUU2XHUwQUVGXHUwQjAxXHUwQjAzXHUwQjA1XHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzXHUwQjI4XHUwQjJBXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM2XHUwQjM5XHUwQjNDXHUwQjQzXHUwQjQ3XHUwQjQ4XHUwQjRCXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGXHUwQjYxXHUwQjY2XHUwQjZGXHUwQjgyXHUwQjgzXHUwQjg1XHUwQjhBXHUwQjhFXHUwQjkwXHUwQjkyXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4XHUwQkFBXHUwQkFFXHUwQkI1XHUwQkI3XHUwQkI5XHUwQkJFXHUwQkMyXHUwQkM2XHUwQkM4XHUwQkNBXHUwQkNEXHUwQkQ3XHUwQkQ3XHUwQkU3XHUwQkVGXHUwQzAxXHUwQzAzXHUwQzA1XHUwQzBDXHUwQzBFXHUwQzEwXHUwQzEyXHUwQzI4XHUwQzJBXHUwQzMzXHUwQzM1XHUwQzM5XHUwQzNFXHUwQzQ0XHUwQzQ2XHUwQzQ4XHUwQzRBXHUwQzREXHUwQzU1XHUwQzU2XHUwQzYwXHUwQzYxXHUwQzY2XHUwQzZGXHUwQzgyXHUwQzgzXHUwQzg1XHUwQzhDXHUwQzhFXHUwQzkwXHUwQzkyXHUwQ0E4XHUwQ0FBXHUwQ0IzXHUwQ0I1XHUwQ0I5XHUwQ0JFXHUwQ0M0XHUwQ0M2XHUwQ0M4XHUwQ0NBXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0U2XHUwQ0VGXHUwRDAyXHUwRDAzXHUwRDA1XHUwRDBDXHUwRDBFXHUwRDEwXHUwRDEyXHUwRDI4XHUwRDJBXHUwRDM5XHUwRDNFXHUwRDQzXHUwRDQ2XHUwRDQ4XHUwRDRBXHUwRDREXHUwRDU3XHUwRDU3XHUwRDYwXHUwRDYxXHUwRDY2XHUwRDZGXHUwRTAxXHUwRTJFXHUwRTMwXHUwRTNBXHUwRTQwXHUwRTRFXHUwRTUwXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThBXHUwRThEXHUwRThEXHUwRTk0XHUwRTk3XHUwRTk5XHUwRTlGXHUwRUExXHUwRUEzXHUwRUE1XHUwRUE1XHUwRUE3XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFEXHUwRUFFXHUwRUIwXHUwRUI5XHUwRUJCXHUwRUJEXHUwRUMwXHUwRUM0XHUwRUM2XHUwRUM2XHUwRUM4XHUwRUNEXHUwRUQwXHUwRUQ5XHUwRjE4XHUwRjE5XHUwRjIwXHUwRjI5XHUwRjM1XHUwRjM1XHUwRjM3XHUwRjM3XHUwRjM5XHUwRjM5XHUwRjNFXHUwRjQ3XHUwRjQ5XHUwRjY5XHUwRjcxXHUwRjg0XHUwRjg2XHUwRjhCXHUwRjkwXHUwRjk1XHUwRjk3XHUwRjk3XHUwRjk5XHUwRkFEXHUwRkIxXHUwRkI3XHUwRkI5XHUwRkI5XHUxMEEwXHUxMEM1XHUxMEQwXHUxMEY2XHUxMTAwXHUxMTAwXHUxMTAyXHUxMTAzXHUxMTA1XHUxMTA3XHUxMTA5XHUxMTA5XHUxMTBCXHUxMTBDXHUxMTBFXHUxMTEyXHUxMTNDXHUxMTNDXHUxMTNFXHUxMTNFXHUxMTQwXHUxMTQwXHUxMTRDXHUxMTRDXHUxMTRFXHUxMTRFXHUxMTUwXHUxMTUwXHUxMTU0XHUxMTU1XHUxMTU5XHUxMTU5XHUxMTVGXHUxMTYxXHUxMTYzXHUxMTYzXHUxMTY1XHUxMTY1XHUxMTY3XHUxMTY3XHUxMTY5XHUxMTY5XHUxMTZEXHUxMTZFXHUxMTcyXHUxMTczXHUxMTc1XHUxMTc1XHUxMTlFXHUxMTlFXHUxMUE4XHUxMUE4XHUxMUFCXHUxMUFCXHUxMUFFXHUxMUFGXHUxMUI3XHUxMUI4XHUxMUJBXHUxMUJBXHUxMUJDXHUxMUMyXHUxMUVCXHUxMUVCXHUxMUYwXHUxMUYwXHUxMUY5XHUxMUY5XHUxRTAwXHUxRTlCXHUxRUEwXHUxRUY5XHUxRjAwXHUxRjE1XHUxRjE4XHUxRjFEXHUxRjIwXHUxRjQ1XHUxRjQ4XHUxRjREXHUxRjUwXHUxRjU3XHUxRjU5XHUxRjU5XHUxRjVCXHUxRjVCXHUxRjVEXHUxRjVEXHUxRjVGXHUxRjdEXHUxRjgwXHUxRkI0XHUxRkI2XHUxRkJDXHUxRkJFXHUxRkJFXHUxRkMyXHUxRkM0XHUxRkM2XHUxRkNDXHUxRkQwXHUxRkQzXHUxRkQ2XHUxRkRCXHUxRkUwXHUxRkVDXHUxRkYyXHUxRkY0XHUxRkY2XHUxRkZDXHUyMEQwXHUyMERDXHUyMEUxXHUyMEUxXHUyMTI2XHUyMTI2XHUyMTJBXHUyMTJCXHUyMTJFXHUyMTJFXHUyMTgwXHUyMTgyXHUzMDA1XHUzMDA1XHUzMDA3XHUzMDA3XHUzMDIxXHUzMDJGXHUzMDMxXHUzMDM1XHUzMDQxXHUzMDk0XHUzMDk5XHUzMDlBXHUzMDlEXHUzMDlFXHUzMEExXHUzMEZBXHUzMEZDXHUzMEZFXHUzMTA1XHUzMTJDXHU0RTAwXHU5RkE1XHVBQzAwXHVEN0EzJyk7UmliKFdtZSxTR2UsZCk7UmliKFhtZSxTR2UsVG9lKGQpKTtkPShudWxsLCsrbm9lLG5ldyBTb2UoNCkpO0puZShkLFZHZSk7TW9lKGQsOTUsOTUpO01vZShkLDU4LDU4KTtSaWIoV21lLFRHZSxkKTtSaWIoWG1lLFRHZSxUb2UoZCkpfWM9Yj9KRChPaWIoV21lLGEpLDEzNik6SkQoT2liKFhtZSxhKSwxMzYpO3JldHVybiBjfQpmdW5jdGlvbiBDd2MoYSl7UmFkKGEsbmV3IGNhZChvYWQoamFkKG5hZChrYWQobWFkKGxhZChuZXcgcGFkLE9zZSksJ0VMSyBMYXllcmVkJyksJ0xheWVyLWJhc2VkIGFsZ29yaXRobSBwcm92aWRlZCBieSB0aGUgRWNsaXBzZSBMYXlvdXQgS2VybmVsLiBBcnJhbmdlcyBhcyBtYW55IGVkZ2VzIGFzIHBvc3NpYmxlIGludG8gb25lIGRpcmVjdGlvbiBieSBwbGFjaW5nIG5vZGVzIGludG8gc3Vic2VxdWVudCBsYXllcnMuIFRoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgZGlmZmVyZW50IHJvdXRpbmcgc3R5bGVzIChzdHJhaWdodCwgb3J0aG9nb25hbCwgc3BsaW5lcyk7IGlmIG9ydGhvZ29uYWwgcm91dGluZyBpcyBzZWxlY3RlZCwgYXJiaXRyYXJ5IHBvcnQgY29uc3RyYWludHMgYXJlIHJlc3BlY3RlZCwgdGh1cyBlbmFibGluZyB0aGUgbGF5b3V0IG9mIGJsb2NrIGRpYWdyYW1zIHN1Y2ggYXMgYWN0b3Itb3JpZW50ZWQgbW9kZWxzIG9yIGNpcmN1aXQgc2NoZW1hdGljcy4gRnVydGhlcm1vcmUsIGZ1bGwgbGF5b3V0IG9mIGNvbXBvdW5kIGdyYXBocyB3aXRoIGNyb3NzLWhpZXJhcmNoeSBlZGdlcyBpcyBzdXBwb3J0ZWQgd2hlbiB0aGUgcmVzcGVjdGl2ZSBvcHRpb24gaXMgYWN0aXZhdGVkIG9uIHRoZSB0b3AgbGV2ZWwuJyksbmV3IEZ3YyksT3NlKSxucmIoKEJCZCgpLEFCZCksV0MoT0MoTDQsMSksRXJlLDI0MywwLFt4QmQseUJkLHdCZCx6QmQsdUJkLHRCZF0pKSkpKTtQYWQoYSxPc2Usb3llLEpCZChUdmMpKTtQYWQoYSxPc2UscHllLEpCZChVdmMpKTtQYWQoYSxPc2UscXllLEpCZChWdmMpKTtQYWQoYSxPc2UscnllLEpCZChXdmMpKTtQYWQoYSxPc2UsTnVlLEpCZChZdmMpKTtQYWQoYSxPc2Usc3llLEpCZChadmMpKTtQYWQoYSxPc2UsdHllLEpCZChhd2MpKTtQYWQoYSxPc2UsdXllLEpCZChjd2MpKTtQYWQoYSxPc2UsdnllLEpCZChkd2MpKTtQYWQoYSxPc2Usd3llLEpCZChid2MpKTtQYWQoYSxPc2UsTXVlLEpCZChld2MpKTtQYWQoYSxPc2UseHllLEpCZChnd2MpKTtQYWQoYSxPc2UseXllLEpCZChpd2MpKTtQYWQoYSxPc2UsenllLEpCZChfdmMpKTtQYWQoYSxPc2UsanhlLEpCZChTdmMpKTtQYWQoYSxPc2UsbHhlLEpCZChYdmMpKTtQYWQoYSxPc2Usa3hlLEpCZCgkdmMpKTtQYWQoYSxPc2UsbXhlLEpCZChmd2MpKTtQYWQoYSxPc2UsTHVlLGpmYigwKSk7UGFkKGEsT3NlLG54ZSxKQmQoTnZjKSk7UGFkKGEsT3NlLG94ZSxKQmQoT3ZjKSk7UGFkKGEsT3NlLHB4ZSxKQmQoUHZjKSk7UGFkKGEsT3NlLHd4ZSxKQmQoeXdjKSk7UGFkKGEsT3NlLHh4ZSxKQmQocXdjKSk7UGFkKGEsT3NlLHl4ZSxKQmQocndjKSk7UGFkKGEsT3NlLHp4ZSxKQmQodXdjKSk7UGFkKGEsT3NlLEF4ZSxKQmQoc3djKSk7UGFkKGEsT3NlLEJ4ZSxKQmQodHdjKSk7UGFkKGEsT3NlLEN4ZSxKQmQoQXdjKSk7UGFkKGEsT3NlLER4ZSxKQmQoendjKSk7UGFkKGEsT3NlLEV4ZSxKQmQod3djKSk7UGFkKGEsT3NlLEZ4ZSxKQmQodndjKSk7UGFkKGEsT3NlLEd4ZSxKQmQoeHdjKSk7UGFkKGEsT3NlLEh4ZSxKQmQoYnZjKSk7UGFkKGEsT3NlLEl4ZSxKQmQoX3VjKSk7UGFkKGEsT3NlLEp4ZSxKQmQoYXZjKSk7UGFkKGEsT3NlLGN4ZSxKQmQobHZjKSk7UGFkKGEsT3NlLGR4ZSxKQmQobXZjKSk7UGFkKGEsT3NlLGd4ZSxKQmQoRHVjKSk7UGFkKGEsT3NlLGh4ZSxKQmQoRXVjKSk7UGFkKGEsT3NlLF91ZSxKQmQobXdjKSk7UGFkKGEsT3NlLGF2ZSxKQmQob3djKSk7UGFkKGEsT3NlLGJ2ZSxKQmQobHdjKSk7UGFkKGEsT3NlLGN2ZSxKQmQoa3djKSk7UGFkKGEsT3NlLGR2ZSxud2MpO1BhZChhLE9zZSxSdWUsdXZjKTtQYWQoYSxPc2UsYXllLHp1Yyk7UGFkKGEsT3NlLEF5ZSwwKTtQYWQoYSxPc2UsUHVlLGpmYigxKSk7UGFkKGEsT3NlLE91ZSxKdWUpO1BhZChhLE9zZSxCeWUsSkJkKHN2YykpO1BhZChhLE9zZSxUdWUsSkJkKEV2YykpO1BhZChhLE9zZSxDeWUsSkJkKEp2YykpO1BhZChhLE9zZSxEeWUsSkJkKHF1YykpO1BhZChhLE9zZSxFeWUsSkJkKFJ0YykpO1BhZChhLE9zZSxYeGUsSkJkKEl1YykpO1BhZChhLE9zZSxRdWUsKHhkYigpLHRydWUpKTtQYWQoYSxPc2UsRnllLEpCZChOdWMpKTtQYWQoYSxPc2UsR3llLEpCZChPdWMpKTtQYWQoYSxPc2UsWXVlLEpCZChvdmMpKTtQYWQoYSxPc2UsWHVlLEpCZChydmMpKTtQYWQoYSxPc2UsV3VlLEpCZChwdmMpKTtQYWQoYSxPc2UsSHllLHR1Yyk7UGFkKGEsT3NlLFp1ZSxKQmQoZ3ZjKSk7UGFkKGEsT3NlLEl5ZSxKQmQoZnZjKSk7UGFkKGEsT3NlLCR1ZSxKQmQoSHZjKSk7UGFkKGEsT3NlLEp5ZSxKQmQoR3ZjKSk7UGFkKGEsT3NlLEt5ZSxKQmQoSXZjKSk7UGFkKGEsT3NlLEx5ZSx4dmMpO1BhZChhLE9zZSxNeWUsSkJkKHp2YykpO1BhZChhLE9zZSxOeWUsSkJkKEF2YykpO1BhZChhLE9zZSxPeWUsSkJkKEJ2YykpO1BhZChhLE9zZSxQeWUsSkJkKHl2YykpO1BhZChhLE9zZSxDd2UsSkJkKHB3YykpO1BhZChhLE9zZSxGd2UsSkJkKCR1YykpO1BhZChhLE9zZSxMd2UsSkJkKFp1YykpO1BhZChhLE9zZSxCd2UsSkJkKGp3YykpO1BhZChhLE9zZSxHd2UsSkJkKFV1YykpO1BhZChhLE9zZSxFd2UsSkJkKHB1YykpO1BhZChhLE9zZSxPd2UsSkJkKG91YykpO1BhZChhLE9zZSxQd2UsSkJkKGV1YykpO1BhZChhLE9zZSxXd2UsSkJkKGZ1YykpO1BhZChhLE9zZSxYd2UsSkJkKGh1YykpO1BhZChhLE9zZSxZd2UsSkJkKGd1YykpO1BhZChhLE9zZSxSd2UsSkJkKG51YykpO1BhZChhLE9zZSx4d2UsSkJkKGR2YykpO1BhZChhLE9zZSx5d2UsSkJkKGV2YykpO1BhZChhLE9zZSx3d2UsSkJkKFF1YykpO1BhZChhLE9zZSxad2UsSkJkKG52YykpO1BhZChhLE9zZSxheGUsSkJkKGl2YykpO1BhZChhLE9zZSx2d2UsSkJkKEd1YykpO1BhZChhLE9zZSxieGUsSkJkKGt2YykpO1BhZChhLE9zZSxleGUsSkJkKEJ1YykpO1BhZChhLE9zZSxmeGUsSkJkKEN1YykpO1BhZChhLE9zZSxReWUsSkJkKGR1YykpO1BhZChhLE9zZSxfd2UsSkJkKGh2YykpO1BhZChhLE9zZSxyeGUsSkJkKFh0YykpO1BhZChhLE9zZSxzeGUsSkJkKFd0YykpO1BhZChhLE9zZSxxeGUsSkJkKFZ0YykpO1BhZChhLE9zZSx0eGUsSkJkKEt1YykpO1BhZChhLE9zZSx1eGUsSkJkKEp1YykpO1BhZChhLE9zZSx2eGUsSkJkKEx1YykpO1BhZChhLE9zZSxwdmUsSkJkKHF2YykpO1BhZChhLE9zZSxSeWUsSkJkKFJ1YykpO1BhZChhLE9zZSxTeWUsSkJkKEZ1YykpO1BhZChhLE9zZSxUeWUsSkJkKHd1YykpO1BhZChhLE9zZSxVdWUsSkJkKHZ1YykpO1BhZChhLE9zZSxRd2UsSkJkKGl1YykpO1BhZChhLE9zZSxVeWUsSkJkKEZ2YykpO1BhZChhLE9zZSxWeWUsSkJkKFV0YykpO1BhZChhLE9zZSxXeWUsSkJkKE11YykpO1BhZChhLE9zZSxYeWUsSkJkKEN2YykpO1BhZChhLE9zZSxZeWUsSkJkKHZ2YykpO1BhZChhLE9zZSxaeWUsSkJkKHd2YykpO1BhZChhLE9zZSxKd2UsSkJkKFd1YykpO1BhZChhLE9zZSxLd2UsSkJkKFh1YykpO1BhZChhLE9zZSwkeWUsSkJkKEx2YykpO1BhZChhLE9zZSx6d2UsSkJkKFN0YykpO1BhZChhLE9zZSxNd2UsSkJkKFl1YykpO1BhZChhLE9zZSxLeGUsSkJkKHh1YykpO1BhZChhLE9zZSxMeGUsSkJkKHV1YykpO1BhZChhLE9zZSxfeWUsSkJkKGN2YykpO1BhZChhLE9zZSxOd2UsSkJkKFN1YykpO1BhZChhLE9zZSwkd2UsSkJkKGp2YykpO1BhZChhLE9zZSxhemUsSkJkKGh3YykpO1BhZChhLE9zZSx1d2UsSkJkKHN1YykpO1BhZChhLE9zZSxBd2UsSkJkKEt2YykpO1BhZChhLE9zZSxpeGUsSkJkKEF1YykpO1BhZChhLE9zZSxTd2UsSkJkKGp1YykpO1BhZChhLE9zZSxUd2UsSkJkKGt1YykpO1BhZChhLE9zZSxId2UsSkJkKFR1YykpO1BhZChhLE9zZSxVd2UsSkJkKGx1YykpO1BhZChhLE9zZSxiemUsSkJkKFB1YykpO1BhZChhLE9zZSxJd2UsSkJkKFZ1YykpO1BhZChhLE9zZSxWd2UsSkJkKG11YykpO1BhZChhLE9zZSxNeGUsSkJkKGN1YykpO1BhZChhLE9zZSxReGUsSkJkKF90YykpO1BhZChhLE9zZSxSeGUsSkJkKFp0YykpO1BhZChhLE9zZSxTeGUsSkJkKCR0YykpO1BhZChhLE9zZSxPeGUsSkJkKGF1YykpO1BhZChhLE9zZSxQeGUsSkJkKFl0YykpO1BhZChhLE9zZSxOeGUsSkJkKGJ1YykpO1BhZChhLE9zZSxEd2UsSkJkKEh1YykpfQpmdW5jdGlvbiBUaWUoYSl7RHZkKGEuYSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdhbnlTaW1wbGVUeXBlJ10pKTtEdmQoYS5iLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ2FueVR5cGUnLHNGZSxxRmVdKSk7RHZkKEpEKG5EZChTVGQoYS5iKSwwKSwzNSksckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW3NGZSxaRmUsSERlLCc6bWl4ZWQnXSkpO0R2ZChKRChuRGQoU1RkKGEuYiksMSksMzUpLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtzRmUsWkZlLGRHZSxmR2UsSERlLCc6MScsb0dlLCdsYXgnXSkpO0R2ZChKRChuRGQoU1RkKGEuYiksMiksMzUpLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtzRmUsWEZlLGRHZSxmR2UsSERlLCc6Micsb0dlLCdsYXgnXSkpO0R2ZChhLmMsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnYW55VVJJJyxjR2UsJEZlXSkpO0R2ZChhLmQsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnYmFzZTY0QmluYXJ5JyxjR2UsJEZlXSkpO0R2ZChhLmUsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSxEcWUsY0dlLCRGZV0pKTtEdmQoYS5mLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ2Jvb2xlYW46T2JqZWN0JyxFRmUsRHFlXSkpO0R2ZChhLmcsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSxlRmVdKSk7RHZkKGEuaSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdieXRlOk9iamVjdCcsRUZlLGVGZV0pKTtEdmQoYS5qLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ2RhdGUnLGNHZSwkRmVdKSk7RHZkKGEuayxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdkYXRlVGltZScsY0dlLCRGZV0pKTtEdmQoYS5uLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ2RlY2ltYWwnLGNHZSwkRmVdKSk7RHZkKGEubyxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLGdGZSxjR2UsJEZlXSkpO0R2ZChhLnAsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnZG91YmxlOk9iamVjdCcsRUZlLGdGZV0pKTtEdmQoYS5xLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ2R1cmF0aW9uJyxjR2UsJEZlXSkpO0R2ZChhLnMsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnRU5USVRJRVMnLEVGZSxwR2UscUdlLCcxJ10pKTtEdmQoYS5yLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUscEdlLF9GZSxyR2VdKSk7RHZkKGEudCxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLHJHZSxFRmUsc0dlXSkpO0R2ZChhLnUsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSxoRmUsY0dlLCRGZV0pKTtEdmQoYS52LHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ2Zsb2F0Ok9iamVjdCcsRUZlLGhGZV0pKTtEdmQoYS53LHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ2dEYXknLGNHZSwkRmVdKSk7RHZkKGEuQixyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdnTW9udGgnLGNHZSwkRmVdKSk7RHZkKGEuQSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdnTW9udGhEYXknLGNHZSwkRmVdKSk7RHZkKGEuQyxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdnWWVhcicsY0dlLCRGZV0pKTtEdmQoYS5ELHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ2dZZWFyTW9udGgnLGNHZSwkRmVdKSk7RHZkKGEuRixyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdoZXhCaW5hcnknLGNHZSwkRmVdKSk7RHZkKGEuRyxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdJRCcsRUZlLHNHZV0pKTtEdmQoYS5ILHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ0lEUkVGJyxFRmUsc0dlXSkpO0R2ZChhLkosckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnSURSRUZTJyxFRmUsdEdlLHFHZSwnMSddKSk7RHZkKGEuSSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLHRHZSxfRmUsJ0lEUkVGJ10pKTtEdmQoYS5LLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsaUZlXSkpO0R2ZChhLk0sckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSx1R2VdKSk7RHZkKGEuTCxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdpbnQ6T2JqZWN0JyxFRmUsaUZlXSkpO0R2ZChhLlAsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnbGFuZ3VhZ2UnLEVGZSx2R2Usd0dlLHhHZV0pKTtEdmQoYS5RLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsakZlXSkpO0R2ZChhLlIsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnbG9uZzpPYmplY3QnLEVGZSxqRmVdKSk7RHZkKGEuUyxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdOYW1lJyxFRmUsdkdlLHdHZSx5R2VdKSk7RHZkKGEuVCxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLHNHZSxFRmUsJ05hbWUnLHdHZSx6R2VdKSk7RHZkKGEuVSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCduZWdhdGl2ZUludGVnZXInLEVGZSxBR2UsQkdlLCctMSddKSk7RHZkKGEuVixyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLENHZSxFRmUsdkdlLHdHZSwnXFxjKyddKSk7RHZkKGEuWCxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdOTVRPS0VOUycsRUZlLERHZSxxR2UsJzEnXSkpO0R2ZChhLlcsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSxER2UsX0ZlLENHZV0pKTtEdmQoYS5ZLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsRUdlLEVGZSx1R2UsRkdlLCcwJ10pKTtEdmQoYS5aLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsQUdlLEVGZSx1R2UsQkdlLCcwJ10pKTtEdmQoYS4kLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsR0dlLEVGZSxGcWUsY0dlLCdyZXBsYWNlJ10pKTtEdmQoYS5fLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ05PVEFUSU9OJyxjR2UsJEZlXSkpO0R2ZChhLmFiLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ3Bvc2l0aXZlSW50ZWdlcicsRUZlLEVHZSxGR2UsJzEnXSkpO0R2ZChhLmJiLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ3Byb2Nlc3NpbmdJbnN0cnVjdGlvbl8uX3R5cGUnLHNGZSwnZW1wdHknXSkpO0R2ZChKRChuRGQoU1RkKGEuYmIpLDApLDM1KSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbc0ZlLFdGZSxIRGUsJ2RhdGEnXSkpO0R2ZChKRChuRGQoU1RkKGEuYmIpLDEpLDM1KSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbc0ZlLFdGZSxIRGUsRERlXSkpO0R2ZChhLmNiLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ1FOYW1lJyxjR2UsJEZlXSkpO0R2ZChhLmRiLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsa0ZlXSkpO0R2ZChhLmViLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ3Nob3J0Ok9iamVjdCcsRUZlLGtGZV0pKTtEdmQoYS5mYixyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCdzaW1wbGVBbnlUeXBlJyxzRmUsVkZlXSkpO0R2ZChKRChuRGQoU1RkKGEuZmIpLDApLDM1KSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCc6Mycsc0ZlLFZGZV0pKTtEdmQoSkQobkRkKFNUZChhLmZiKSwxKSwzNSksckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnOjQnLHNGZSxWRmVdKSk7RHZkKEpEKG5EZChTVGQoYS5mYiksMiksMTkpLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJzo1JyxzRmUsVkZlXSkpO0R2ZChhLmdiLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsRnFlLGNHZSwncHJlc2VydmUnXSkpO0R2ZChhLmhiLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ3RpbWUnLGNHZSwkRmVdKSk7RHZkKGEuaWIsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSx2R2UsRUZlLEdHZSxjR2UsJEZlXSkpO0R2ZChhLmpiLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsSEdlLEJHZSwnMjU1JyxGR2UsJzAnXSkpO0R2ZChhLmtiLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ3Vuc2lnbmVkQnl0ZTpPYmplY3QnLEVGZSxIR2VdKSk7RHZkKGEubGIsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSxJR2UsQkdlLCc0Mjk0OTY3Mjk1JyxGR2UsJzAnXSkpO0R2ZChhLm1iLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsJ3Vuc2lnbmVkSW50Ok9iamVjdCcsRUZlLElHZV0pKTtEdmQoYS5uYixyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbSERlLCd1bnNpZ25lZExvbmcnLEVGZSxFR2UsQkdlLEpHZSxGR2UsJzAnXSkpO0R2ZChhLm9iLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtIRGUsS0dlLEJHZSwnNjU1MzUnLEZHZSwnMCddKSk7RHZkKGEucGIsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwndW5zaWduZWRTaG9ydDpPYmplY3QnLEVGZSxLR2VdKSk7RHZkKGEucWIsckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW0hEZSwnJyxzRmUscUZlXSkpO0R2ZChKRChuRGQoU1RkKGEucWIpLDApLDM1KSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbc0ZlLFpGZSxIRGUsJzptaXhlZCddKSk7RHZkKEpEKG5EZChTVGQoYS5xYiksMSksMTkpLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtzRmUsV0ZlLEhEZSwneG1sbnM6cHJlZml4J10pKTtEdmQoSkQobkRkKFNUZChhLnFiKSwyKSwxOSksckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW3NGZSxXRmUsSERlLCd4c2k6c2NoZW1hTG9jYXRpb24nXSkpO0R2ZChKRChuRGQoU1RkKGEucWIpLDMpLDM1KSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbc0ZlLFlGZSxIRGUsJ2NEQVRBJyxhR2UsYkdlXSkpO0R2ZChKRChuRGQoU1RkKGEucWIpLDQpLDM1KSxyRmUsV0MoT0MoaEosMSksaHJlLDIsNixbc0ZlLFlGZSxIRGUsJ2NvbW1lbnQnLGFHZSxiR2VdKSk7RHZkKEpEKG5EZChTVGQoYS5xYiksNSksMTkpLHJGZSxXQyhPQyhoSiwxKSxocmUsMiw2LFtzRmUsWUZlLEhEZSxMR2UsYUdlLGJHZV0pKTtEdmQoSkQobkRkKFNUZChhLnFiKSw2KSwzNSksckZlLFdDKE9DKGhKLDEpLGhyZSwyLDYsW3NGZSxZRmUsSERlLGlEZSxhR2UsYkdlXSkpfQpmdW5jdGlvbiBxRWQoYSl7cmV0dXJuIGNnYignX1VJX0VNRkRpYWdub3N0aWNfbWFya2VyJyxhKT8nRU1GIFByb2JsZW0nOmNnYignX1VJX0NpcmN1bGFyQ29udGFpbm1lbnRfZGlhZ25vc3RpYycsYSk/J0FuIG9iamVjdCBtYXkgbm90IGNpcmN1bGFybHkgY29udGFpbiBpdHNlbGYnOmNnYihVRGUsYSk/J1dyb25nIGNoYXJhY3Rlci4nOmNnYihWRGUsYSk/J0ludmFsaWQgcmVmZXJlbmNlIG51bWJlci4nOmNnYihXRGUsYSk/J0EgY2hhcmFjdGVyIGlzIHJlcXVpcmVkIGFmdGVyIFxcLic6Y2diKFhEZSxhKT8iJz8nIGlzIG5vdCBleHBlY3RlZC4gICcoPzonIG9yICcoPz0nIG9yICcoPyEnIG9yICcoPzwnIG9yICcoPyMnIG9yICcoPz4nPyI6Y2diKFlEZSxhKT8iJyg/PCcgb3IgJyg/PCEnIGlzIGV4cGVjdGVkLiI6Y2diKFpEZSxhKT8nQSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLic6Y2diKCREZSxhKT8iJyknIGlzIGV4cGVjdGVkLiI6Y2diKF9EZSxhKT8nVW5leHBlY3RlZCBlbmQgb2YgdGhlIHBhdHRlcm4gaW4gYSBtb2RpZmllciBncm91cC4nOmNnYihhRWUsYSk/Iic6JyBpcyBleHBlY3RlZC4iOmNnYihiRWUsYSk/J1VuZXhwZWN0ZWQgZW5kIG9mIHRoZSBwYXR0ZXJuIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuJzpjZ2IoY0VlLGEpPydBIGJhY2sgcmVmZXJlbmNlIG9yIGFuIGFuY2hvciBvciBhIGxvb2thaGVhZCBvciBhIGxvb2stYmVoaW5kIGlzIGV4cGVjdGVkIGluIGEgY29uZGl0aW9uYWwgcGF0dGVybi4nOmNnYihkRWUsYSk/J1RoZXJlIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hvaWNlcyBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLic6Y2diKGVFZSxhKT8nQSBjaGFyYWN0ZXIgaW4gVSswMDQwLVUrMDA1ZiBtdXN0IGZvbGxvdyBcXGMuJzpjZ2IoZkVlLGEpPyJBICd7JyBpcyByZXF1aXJlZCBiZWZvcmUgYSBjaGFyYWN0ZXIgY2F0ZWdvcnkuIjpjZ2IoZ0VlLGEpPyJBIHByb3BlcnR5IG5hbWUgaXMgbm90IGNsb3NlZCBieSAnfScuIjpjZ2IoaEVlLGEpPydVbmV4cGVjdGVkIG1ldGEgY2hhcmFjdGVyLic6Y2diKGlFZSxhKT8nVW5rbm93biBwcm9wZXJ0eS4nOmNnYihqRWUsYSk/IkEgUE9TSVggY2hhcmFjdGVyIGNsYXNzIG11c3QgYmUgY2xvc2VkIGJ5ICc6XScuIjpjZ2Ioa0VlLGEpPydVbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4nOmNnYihsRWUsYSk/J1Vua25vd24gbmFtZSBmb3IgYSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MuJzpjZ2IoJ3BhcnNlci5jYy40JyxhKT8iJy0nIGlzIGludmFsaWQgaGVyZS4iOmNnYihtRWUsYSk/IiddJyBpcyBleHBlY3RlZC4iOmNnYihuRWUsYSk/IidbJyBpcyBpbnZhbGlkIGluIGEgY2hhcmFjdGVyIGNsYXNzLiAgV3JpdGUgJ1xcWycuIjpjZ2Iob0VlLGEpPyInXScgaXMgaW52YWxpZCBpbiBhIGNoYXJhY3RlciBjbGFzcy4gIFdyaXRlICdcXF0nLiI6Y2diKHBFZSxhKT8iJy0nIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLiBXcml0ZSAnXFwtJy4iOmNnYihxRWUsYSk/IidbJyBpcyBleHBlY3RlZC4iOmNnYihyRWUsYSk/IicpJyBvciAnLVsnIG9yICcrWycgb3IgJyZbJyBpcyBleHBlY3RlZC4iOmNnYihzRWUsYSk/J1RoZSByYW5nZSBlbmQgY29kZSBwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHN0YXJ0IGNvZGUgcG9pbnQuJzpjZ2IodEVlLGEpPydJbnZhbGlkIFVuaWNvZGUgaGV4IG5vdGF0aW9uLic6Y2diKHVFZSxhKT8nT3ZlcmZsb3cgaW4gYSBoZXggbm90YXRpb24uJzpjZ2IodkVlLGEpPyInXFx4eycgbXVzdCBiZSBjbG9zZWQgYnkgJ30nLiI6Y2diKHdFZSxhKT8nSW52YWxpZCBVbmljb2RlIGNvZGUgcG9pbnQuJzpjZ2IoeEVlLGEpPydBbiBhbmNob3IgbXVzdCBub3QgYmUgaGVyZS4nOmNnYih5RWUsYSk/J1RoaXMgZXhwcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IG9wdGlvbiBzZXR0aW5nLic6Y2diKHpFZSxhKT8nSW52YWxpZCBxdWFudGlmaWVyLiBBIGRpZ2l0IGlzIGV4cGVjdGVkLic6Y2diKEFFZSxhKT8iSW52YWxpZCBxdWFudGlmaWVyLiBJbnZhbGlkIHF1YW50aXR5IG9yIGEgJ30nIGlzIG1pc3NpbmcuIjpjZ2IoQkVlLGEpPyJJbnZhbGlkIHF1YW50aWZpZXIuIEEgZGlnaXQgb3IgJ30nIGlzIGV4cGVjdGVkLiI6Y2diKENFZSxhKT8nSW52YWxpZCBxdWFudGlmaWVyLiBBIG1pbiBxdWFudGl0eSBtdXN0IGJlIDw9IGEgbWF4IHF1YW50aXR5Lic6Y2diKERFZSxhKT8nSW52YWxpZCBxdWFudGlmaWVyLiBBIHF1YW50aXR5IHZhbHVlIG92ZXJmbG93Lic6Y2diKCdfVUlfUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50JyxhKT8nRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgR2VuZXJhdGVkIFBhY2thZ2VzJzpjZ2IoJ19VSV9EeW5hbWljUGFja2FnZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50JyxhKT8nRWNvcmUgUGFja2FnZSBSZWdpc3RyeSBmb3IgRHluYW1pYyBQYWNrYWdlcyc6Y2diKCdfVUlfRmFjdG9yeVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50JyxhKT8nRWNvcmUgRmFjdG9yeSBPdmVycmlkZSBSZWdpc3RyeSc6Y2diKCdfVUlfVVJJRXh0ZW5zaW9uUGFyc2VyUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQnLGEpPydVUkkgRXh0ZW5zaW9uIFBhcnNlciBSZWdpc3RyeSc6Y2diKCdfVUlfVVJJUHJvdG9jb2xQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCcsYSk/J1VSSSBQcm90b2NvbCBQYXJzZXIgUmVnaXN0cnknOmNnYignX1VJX1VSSUNvbnRlbnRQYXJzZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCcsYSk/J1VSSSBDb250ZW50IFBhcnNlciBSZWdpc3RyeSc6Y2diKCdfVUlfQ29udGVudEhhbmRsZXJSZWdpc3RyeV9leHRlbnNpb25wb2ludCcsYSk/J0NvbnRlbnQgSGFuZGxlciBSZWdpc3RyeSc6Y2diKCdfVUlfVVJJTWFwcGluZ1JlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50JyxhKT8nVVJJIENvbnZlcnRlciBNYXBwaW5nIFJlZ2lzdHJ5JzpjZ2IoJ19VSV9QYWNrYWdlUmVnaXN0cnlJbXBsZW1lbnRhdGlvbl9leHRlbnNpb25wb2ludCcsYSk/J0Vjb3JlIFBhY2thZ2UgUmVnaXN0cnkgSW1wbGVtZW50YXRpb24nOmNnYignX1VJX1ZhbGlkYXRpb25EZWxlZ2F0ZVJlZ2lzdHJ5X2V4dGVuc2lvbnBvaW50JyxhKT8nVmFsaWRhdGlvbiBEZWxlZ2F0ZSBSZWdpc3RyeSc6Y2diKCdfVUlfU2V0dGluZ0RlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQnLGEpPydGZWF0dXJlIFNldHRpbmcgRGVsZWdhdGUgRmFjdG9yeSBSZWdpc3RyeSc6Y2diKCdfVUlfSW52b2NhdGlvbkRlbGVnYXRlUmVnaXN0cnlfZXh0ZW5zaW9ucG9pbnQnLGEpPydPcGVyYXRpb24gSW52b2NhdGlvbiBEZWxlZ2F0ZSBGYWN0b3J5IFJlZ2lzdHJ5JzpjZ2IoJ19VSV9FQ2xhc3NJbnRlcmZhY2VOb3RBYnN0cmFjdF9kaWFnbm9zdGljJyxhKT8nQSBjbGFzcyB0aGF0IGlzIGFuIGludGVyZmFjZSBtdXN0IGFsc28gYmUgYWJzdHJhY3QnOmNnYignX1VJX0VDbGFzc05vQ2lyY3VsYXJTdXBlclR5cGVzX2RpYWdub3N0aWMnLGEpPydBIGNsYXNzIG1heSBub3QgYmUgYSBzdXBlciB0eXBlIG9mIGl0c2VsZic6Y2diKCdfVUlfRUNsYXNzTm90V2VsbEZvcm1lZE1hcEVudHJ5Tm9JbnN0YW5jZUNsYXNzTmFtZV9kaWFnbm9zdGljJyxhKT8iQSBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gYSBtYXAgZW50cnkgY2xhc3MgbXVzdCBoYXZlIGluc3RhbmNlIGNsYXNzIG5hbWUgJ2phdmEudXRpbC5NYXAkRW50cnknIjpjZ2IoJ19VSV9FUmVmZXJlbmNlT3Bwb3NpdGVPZk9wcG9zaXRlSW5jb25zaXN0ZW50X2RpYWdub3N0aWMnLGEpPydUaGUgb3Bwb3NpdGUgb2YgdGhlIG9wcG9zaXRlIG1heSBub3QgYmUgYSByZWZlcmVuY2UgZGlmZmVyZW50IGZyb20gdGhpcyBvbmUnOmNnYignX1VJX0VSZWZlcmVuY2VPcHBvc2l0ZU5vdEZlYXR1cmVPZlR5cGVfZGlhZ25vc3RpYycsYSk/IlRoZSBvcHBvc2l0ZSBtdXN0IGJlIGEgZmVhdHVyZSBvZiB0aGUgcmVmZXJlbmNlJ3MgdHlwZSI6Y2diKCdfVUlfRVJlZmVyZW5jZVRyYW5zaWVudE9wcG9zaXRlTm90VHJhbnNpZW50X2RpYWdub3N0aWMnLGEpPydUaGUgb3Bwb3NpdGUgb2YgYSB0cmFuc2llbnQgcmVmZXJlbmNlIG11c3QgYmUgdHJhbnNpZW50IGlmIGl0IGlzIHByb3h5IHJlc29sdmluZyc6Y2diKCdfVUlfRVJlZmVyZW5jZU9wcG9zaXRlQm90aENvbnRhaW5tZW50X2RpYWdub3N0aWMnLGEpPydUaGUgb3Bwb3NpdGUgb2YgYSBjb250YWlubWVudCByZWZlcmVuY2UgbXVzdCBub3QgYmUgYSBjb250YWlubWVudCByZWZlcmVuY2UnOmNnYignX1VJX0VSZWZlcmVuY2VDb25zaXN0ZW50VW5pcXVlX2RpYWdub3N0aWMnLGEpPydBIGNvbnRhaW5tZW50IG9yIGJpZGlyZWN0aW9uYWwgcmVmZXJlbmNlIG11c3QgYmUgdW5pcXVlIGlmIGl0cyB1cHBlciBib3VuZCBpcyBkaWZmZXJlbnQgZnJvbSAxJzpjZ2IoJ19VSV9FVHlwZWRFbGVtZW50Tm9UeXBlX2RpYWdub3N0aWMnLGEpPydUaGUgdHlwZWQgZWxlbWVudCBtdXN0IGhhdmUgYSB0eXBlJzpjZ2IoJ19VSV9FQXR0cmlidXRlTm9EYXRhVHlwZV9kaWFnbm9zdGljJyxhKT8nVGhlIGdlbmVyaWMgYXR0cmlidXRlIHR5cGUgbXVzdCBub3QgcmVmZXIgdG8gYSBjbGFzcyc6Y2diKCdfVUlfRVJlZmVyZW5jZU5vQ2xhc3NfZGlhZ25vc3RpYycsYSk/J1RoZSBnZW5lcmljIHJlZmVyZW5jZSB0eXBlIG11c3Qgbm90IHJlZmVyIHRvIGEgZGF0YSB0eXBlJzpjZ2IoJ19VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJBbmRDbGFzc2lmaWVyX2RpYWdub3N0aWMnLGEpPyJBIGdlbmVyaWMgdHlwZSBjYW4ndCByZWZlciB0byBib3RoIGEgdHlwZSBwYXJhbWV0ZXIgYW5kIGEgY2xhc3NpZmllciI6Y2diKCdfVUlfRUdlbmVyaWNUeXBlTm9DbGFzc19kaWFnbm9zdGljJyxhKT8nQSBnZW5lcmljIHN1cGVyIHR5cGUgbXVzdCByZWZlciB0byBhIGNsYXNzJzpjZ2IoJ19VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJfZGlhZ25vc3RpYycsYSk/J0EgZ2VuZXJpYyB0eXBlIGluIHRoaXMgY29udGV4dCBtdXN0IHJlZmVyIHRvIGEgY2xhc3NpZmllciBvciBhIHR5cGUgcGFyYW1ldGVyJzpjZ2IoJ19VSV9FR2VuZXJpY1R5cGVCb3VuZHNPbmx5Rm9yVHlwZUFyZ3VtZW50X2RpYWdub3N0aWMnLGEpPydBIGdlbmVyaWMgdHlwZSBtYXkgaGF2ZSBib3VuZHMgb25seSB3aGVuIHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50JzpjZ2IoJ19VSV9FR2VuZXJpY1R5cGVOb1VwcGVyQW5kTG93ZXJCb3VuZF9kaWFnbm9zdGljJyxhKT8nQSBnZW5lcmljIHR5cGUgbXVzdCBub3QgaGF2ZSBib3RoIGEgbG93ZXIgYW5kIGFuIHVwcGVyIGJvdW5kJzpjZ2IoJ19VSV9FR2VuZXJpY1R5cGVOb1R5cGVQYXJhbWV0ZXJPckNsYXNzaWZpZXJBbmRCb3VuZF9kaWFnbm9zdGljJyxhKT8nQSBnZW5lcmljIHR5cGUgd2l0aCBib3VuZHMgbXVzdCBub3QgYWxzbyByZWZlciB0byBhIHR5cGUgcGFyYW1ldGVyIG9yIGNsYXNzaWZpZXInOmNnYignX1VJX0VHZW5lcmljVHlwZU5vQXJndW1lbnRzX2RpYWdub3N0aWMnLGEpPydBIGdlbmVyaWMgdHlwZSBtYXkgaGF2ZSBhcmd1bWVudHMgb25seSBpZiBpdCByZWZlcnMgdG8gYSBjbGFzc2lmaWVyJzpjZ2IoJ19VSV9FR2VuZXJpY1R5cGVPdXRPZlNjb3BlVHlwZVBhcmFtZXRlcl9kaWFnbm9zdGljJyxhKT8nQSBnZW5lcmljIHR5cGUgbWF5IG9ubHkgcmVmZXIgdG8gYSB0eXBlIHBhcmFtZXRlciB0aGF0IGlzIGluIHNjb3BlJzphfQpmdW5jdGlvbiBDd2QoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2lmKGEucilyZXR1cm47YS5yPXRydWU7cnZkKGEsJ2dyYXBoJyk7ZXdkKGEsJ2dyYXBoJyk7ZndkKGEsX0NlKTtJdmQoYS5vLCdUJyk7dENkKFVUZChhLmEpLGEucCk7dENkKFVUZChhLmYpLGEuYSk7dENkKFVUZChhLm4pLGEuZik7dENkKFVUZChhLmcpLGEubik7dENkKFVUZChhLmMpLGEubik7dENkKFVUZChhLmkpLGEuYyk7dENkKFVUZChhLmopLGEuYyk7dENkKFVUZChhLmQpLGEuZik7dENkKFVUZChhLmUpLGEuYSk7WnZkKGEucCxNNCx3dWUsdHJ1ZSx0cnVlLGZhbHNlKTtvPUZ2ZChhLnAsYS5wLCdzZXRQcm9wZXJ0eScpO3A9SnZkKG8pO2o9UHZkKGEubyk7az0oYz0oZD1uZXcgTlpkLGQpLGMpO3RDZCgoIWouZCYmKGouZD1uZXcgcVZkKGc2LGosMSkpLGouZCksayk7bD1RdmQocCk7SVpkKGssbCk7SHZkKG8saixhRGUpO2o9UXZkKHApO0h2ZChvLGosYkRlKTtvPUZ2ZChhLnAsbnVsbCwnZ2V0UHJvcGVydHknKTtwPUp2ZChvKTtqPVB2ZChhLm8pO2s9UXZkKHApO3RDZCgoIWouZCYmKGouZD1uZXcgcVZkKGc2LGosMSkpLGouZCksayk7SHZkKG8saixhRGUpO2o9UXZkKHApO249cVJkKG8saixudWxsKTshIW4mJm4ubGooKTtvPUZ2ZChhLnAsYS53Yi5lLCdoYXNQcm9wZXJ0eScpO2o9UHZkKGEubyk7az0oZT0oZj1uZXcgTlpkLGYpLGUpO3RDZCgoIWouZCYmKGouZD1uZXcgcVZkKGc2LGosMSkpLGouZCksayk7SHZkKG8saixhRGUpO289RnZkKGEucCxhLnAsJ2NvcHlQcm9wZXJ0aWVzJyk7R3ZkKG8sYS5wLGNEZSk7bz1GdmQoYS5wLG51bGwsJ2dldEFsbFByb3BlcnRpZXMnKTtqPVB2ZChhLndiLlApO2s9UHZkKGEubyk7dENkKCghai5kJiYoai5kPW5ldyBxVmQoZzYsaiwxKSksai5kKSxrKTtsPShnPShoPW5ldyBOWmQsaCksZyk7dENkKCghay5kJiYoay5kPW5ldyBxVmQoZzYsaywxKSksay5kKSxsKTtrPVB2ZChhLndiLk0pO3RDZCgoIWouZCYmKGouZD1uZXcgcVZkKGc2LGosMSkpLGouZCksayk7bT1xUmQobyxqLG51bGwpOyEhbSYmbS5saigpO1p2ZChhLmEsdDMseUNlLHRydWUsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5hKSwwKSwxOSksYS5rLG51bGwsZERlLDAsLTEsdDMsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtadmQoYS5mLHkzLEFDZSx0cnVlLGZhbHNlLHRydWUpO2J3ZChKRChuRGQoU1RkKGEuZiksMCksMTkpLGEuZyxKRChuRGQoU1RkKGEuZyksMCksMTkpLCdsYWJlbHMnLDAsLTEseTMsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLmYpLDEpLDM1KSxhLndiLl8sZURlLG51bGwsMCwxLHkzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WnZkKGEubixDMywnRWxrU2hhcGUnLHRydWUsZmFsc2UsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5uKSwwKSwzNSksYS53Yi50LGZEZSxWc2UsMSwxLEMzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WHZkKEpEKG5EZChTVGQoYS5uKSwxKSwzNSksYS53Yi50LGdEZSxWc2UsMSwxLEMzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WHZkKEpEKG5EZChTVGQoYS5uKSwyKSwzNSksYS53Yi50LCd4JyxWc2UsMSwxLEMzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WHZkKEpEKG5EZChTVGQoYS5uKSwzKSwzNSksYS53Yi50LCd5JyxWc2UsMSwxLEMzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7bz1GdmQoYS5uLG51bGwsJ3NldERpbWVuc2lvbnMnKTtHdmQobyxhLndiLnQsZ0RlKTtHdmQobyxhLndiLnQsZkRlKTtvPUZ2ZChhLm4sbnVsbCwnc2V0TG9jYXRpb24nKTtHdmQobyxhLndiLnQsJ3gnKTtHdmQobyxhLndiLnQsJ3knKTtadmQoYS5nLHozLEdDZSxmYWxzZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLmcpLDApLDE5KSxhLmYsSkQobkRkKFNUZChhLmYpLDApLDE5KSxoRGUsMCwxLHozLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuZyksMSksMzUpLGEud2IuXyxpRGUsJycsMCwxLHozLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WnZkKGEuYyx2MyxCQ2UsdHJ1ZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLmMpLDApLDE5KSxhLmQsSkQobkRkKFNUZChhLmQpLDEpLDE5KSwnb3V0Z29pbmdFZGdlcycsMCwtMSx2MyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEuYyksMSksMTkpLGEuZCxKRChuRGQoU1RkKGEuZCksMiksMTkpLCdpbmNvbWluZ0VkZ2VzJywwLC0xLHYzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7WnZkKGEuaSxBMyxIQ2UsZmFsc2UsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5pKSwwKSwxOSksYS5qLEpEKG5EZChTVGQoYS5qKSwwKSwxOSksJ3BvcnRzJywwLC0xLEEzLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5pKSwxKSwxOSksYS5pLEpEKG5EZChTVGQoYS5pKSwyKSwxOSksakRlLDAsLTEsQTMsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLmkpLDIpLDE5KSxhLmksSkQobkRkKFNUZChhLmkpLDEpLDE5KSxoRGUsMCwxLEEzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEuaSksMyksMTkpLGEuZCxKRChuRGQoU1RkKGEuZCksMCksMTkpLCdjb250YWluZWRFZGdlcycsMCwtMSxBMyxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuaSksNCksMzUpLGEud2IuZSxrRGUsbnVsbCwwLDEsQTMsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSk7WnZkKGEuaixCMyxJQ2UsZmFsc2UsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5qKSwwKSwxOSksYS5pLEpEKG5EZChTVGQoYS5pKSwwKSwxOSksaERlLDAsMSxCMyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtadmQoYS5kLHgzLENDZSxmYWxzZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLmQpLDApLDE5KSxhLmksSkQobkRkKFNUZChhLmkpLDMpLDE5KSwnY29udGFpbmluZ05vZGUnLDAsMSx4MyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLmQpLDEpLDE5KSxhLmMsSkQobkRkKFNUZChhLmMpLDApLDE5KSxsRGUsMCwtMSx4MyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEuZCksMiksMTkpLGEuYyxKRChuRGQoU1RkKGEuYyksMSksMTkpLG1EZSwwLC0xLHgzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5kKSwzKSwxOSksYS5lLEpEKG5EZChTVGQoYS5lKSw1KSwxOSksbkRlLDAsLTEseDMsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLmQpLDQpLDM1KSxhLndiLmUsJ2h5cGVyZWRnZScsbnVsbCwwLDEseDMsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5kKSw1KSwzNSksYS53Yi5lLGtEZSxudWxsLDAsMSx4Myx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLmQpLDYpLDM1KSxhLndiLmUsJ3NlbGZsb29wJyxudWxsLDAsMSx4Myx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLmQpLDcpLDM1KSxhLndiLmUsJ2Nvbm5lY3RlZCcsbnVsbCwwLDEseDMsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSk7WnZkKGEuYix1Myx6Q2UsZmFsc2UsZmFsc2UsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5iKSwwKSwzNSksYS53Yi50LCd4JyxWc2UsMSwxLHUzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WHZkKEpEKG5EZChTVGQoYS5iKSwxKSwzNSksYS53Yi50LCd5JyxWc2UsMSwxLHUzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7bz1GdmQoYS5iLG51bGwsJ3NldCcpO0d2ZChvLGEud2IudCwneCcpO0d2ZChvLGEud2IudCwneScpO1p2ZChhLmUsdzMsRENlLGZhbHNlLGZhbHNlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEuZSksMCksMzUpLGEud2IudCwnc3RhcnRYJyxudWxsLDAsMSx3MyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuZSksMSksMzUpLGEud2IudCwnc3RhcnRZJyxudWxsLDAsMSx3MyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuZSksMiksMzUpLGEud2IudCwnZW5kWCcsbnVsbCwwLDEsdzMsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLmUpLDMpLDM1KSxhLndiLnQsJ2VuZFknLG51bGwsMCwxLHczLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5lKSw0KSwxOSksYS5iLG51bGwsb0RlLDAsLTEsdzMsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLmUpLDUpLDE5KSxhLmQsSkQobkRkKFNUZChhLmQpLDMpLDE5KSxoRGUsMCwxLHczLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEuZSksNiksMTkpLGEuYyxudWxsLHBEZSwwLDEsdzMsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLmUpLDcpLDE5KSxhLmMsbnVsbCxxRGUsMCwxLHczLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5lKSw4KSwxOSksYS5lLEpEKG5EZChTVGQoYS5lKSw5KSwxOSksckRlLDAsLTEsdzMsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLmUpLDkpLDE5KSxhLmUsSkQobkRkKFNUZChhLmUpLDgpLDE5KSxzRGUsMCwtMSx3MyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuZSksMTApLDM1KSxhLndiLl8sZURlLG51bGwsMCwxLHczLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7bz1GdmQoYS5lLG51bGwsJ3NldFN0YXJ0TG9jYXRpb24nKTtHdmQobyxhLndiLnQsJ3gnKTtHdmQobyxhLndiLnQsJ3knKTtvPUZ2ZChhLmUsbnVsbCwnc2V0RW5kTG9jYXRpb24nKTtHdmQobyxhLndiLnQsJ3gnKTtHdmQobyxhLndiLnQsJ3knKTtadmQoYS5rLExLLCdFbGtQcm9wZXJ0eVRvVmFsdWVNYXBFbnRyeScsZmFsc2UsZmFsc2UsZmFsc2UpO2o9UHZkKGEubyk7az0oaT0oYj1uZXcgTlpkLGIpLGkpO3RDZCgoIWouZCYmKGouZD1uZXcgcVZkKGc2LGosMSkpLGouZCksayk7WXZkKEpEKG5EZChTVGQoYS5rKSwwKSwzNSksaiwna2V5JyxMSyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLmspLDEpLDM1KSxhLnMsYkRlLG51bGwsMCwxLExLLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7X3ZkKGEubyxONCwnSVByb3BlcnR5Jyx0cnVlKTtfdmQoYS5zLGFKLCdQcm9wZXJ0eVZhbHVlJyx0cnVlKTtUdmQoYSxfQ2UpfQpmdW5jdGlvbiBkbWUoKXtkbWU9WmNiO2NtZT1TQygkRCxaQ2UsMzAsUHNlLDE1LDEpO2NtZVs5XT0zNTtjbWVbMTBdPTE5O2NtZVsxM109MTk7Y21lWzMyXT01MTtjbWVbMzNdPTQ5O2NtZVszNF09MzM7Qm1iKGNtZSwzNSwzOCw0OSk7Y21lWzM4XT0xO0JtYihjbWUsMzksNDUsNDkpO0JtYihjbWUsNDUsNDcsLTcxKTtjbWVbNDddPTQ5O0JtYihjbWUsNDgsNTgsLTcxKTtjbWVbNThdPTYxO2NtZVs1OV09NDk7Y21lWzYwXT0xO2NtZVs2MV09NDk7Y21lWzYyXT0zMztCbWIoY21lLDYzLDY1LDQ5KTtCbWIoY21lLDY1LDkxLC0zKTtCbWIoY21lLDkxLDkzLDMzKTtjbWVbOTNdPTE7Y21lWzk0XT0zMztjbWVbOTVdPS0zO2NtZVs5Nl09MzM7Qm1iKGNtZSw5NywxMjMsLTMpO0JtYihjbWUsMTIzLDE4MywzMyk7Y21lWzE4M109LTg3O0JtYihjbWUsMTg0LDE5MiwzMyk7Qm1iKGNtZSwxOTIsMjE1LC0xOSk7Y21lWzIxNV09MzM7Qm1iKGNtZSwyMTYsMjQ3LC0xOSk7Y21lWzI0N109MzM7Qm1iKGNtZSwyNDgsMzA2LC0xOSk7Qm1iKGNtZSwzMDYsMzA4LDMzKTtCbWIoY21lLDMwOCwzMTksLTE5KTtCbWIoY21lLDMxOSwzMjEsMzMpO0JtYihjbWUsMzIxLDMyOSwtMTkpO2NtZVszMjldPTMzO0JtYihjbWUsMzMwLDM4MywtMTkpO2NtZVszODNdPTMzO0JtYihjbWUsMzg0LDQ1MiwtMTkpO0JtYihjbWUsNDUyLDQ2MSwzMyk7Qm1iKGNtZSw0NjEsNDk3LC0xOSk7Qm1iKGNtZSw0OTcsNTAwLDMzKTtCbWIoY21lLDUwMCw1MDIsLTE5KTtCbWIoY21lLDUwMiw1MDYsMzMpO0JtYihjbWUsNTA2LDUzNiwtMTkpO0JtYihjbWUsNTM2LDU5MiwzMyk7Qm1iKGNtZSw1OTIsNjgxLC0xOSk7Qm1iKGNtZSw2ODEsNjk5LDMzKTtCbWIoY21lLDY5OSw3MDYsLTE5KTtCbWIoY21lLDcwNiw3MjAsMzMpO0JtYihjbWUsNzIwLDcyMiwtODcpO0JtYihjbWUsNzIyLDc2OCwzMyk7Qm1iKGNtZSw3NjgsODM4LC04Nyk7Qm1iKGNtZSw4MzgsODY0LDMzKTtCbWIoY21lLDg2NCw4NjYsLTg3KTtCbWIoY21lLDg2Niw5MDIsMzMpO2NtZVs5MDJdPS0xOTtjbWVbOTAzXT0tODc7Qm1iKGNtZSw5MDQsOTA3LC0xOSk7Y21lWzkwN109MzM7Y21lWzkwOF09LTE5O2NtZVs5MDldPTMzO0JtYihjbWUsOTEwLDkzMCwtMTkpO2NtZVs5MzBdPTMzO0JtYihjbWUsOTMxLDk3NSwtMTkpO2NtZVs5NzVdPTMzO0JtYihjbWUsOTc2LDk4MywtMTkpO0JtYihjbWUsOTgzLDk4NiwzMyk7Y21lWzk4Nl09LTE5O2NtZVs5ODddPTMzO2NtZVs5ODhdPS0xOTtjbWVbOTg5XT0zMztjbWVbOTkwXT0tMTk7Y21lWzk5MV09MzM7Y21lWzk5Ml09LTE5O2NtZVs5OTNdPTMzO0JtYihjbWUsOTk0LDEwMTIsLTE5KTtCbWIoY21lLDEwMTIsMTAyNSwzMyk7Qm1iKGNtZSwxMDI1LDEwMzcsLTE5KTtjbWVbMTAzN109MzM7Qm1iKGNtZSwxMDM4LDExMDQsLTE5KTtjbWVbMTEwNF09MzM7Qm1iKGNtZSwxMTA1LDExMTcsLTE5KTtjbWVbMTExN109MzM7Qm1iKGNtZSwxMTE4LDExNTQsLTE5KTtjbWVbMTE1NF09MzM7Qm1iKGNtZSwxMTU1LDExNTksLTg3KTtCbWIoY21lLDExNTksMTE2OCwzMyk7Qm1iKGNtZSwxMTY4LDEyMjEsLTE5KTtCbWIoY21lLDEyMjEsMTIyMywzMyk7Qm1iKGNtZSwxMjIzLDEyMjUsLTE5KTtCbWIoY21lLDEyMjUsMTIyNywzMyk7Qm1iKGNtZSwxMjI3LDEyMjksLTE5KTtCbWIoY21lLDEyMjksMTIzMiwzMyk7Qm1iKGNtZSwxMjMyLDEyNjAsLTE5KTtCbWIoY21lLDEyNjAsMTI2MiwzMyk7Qm1iKGNtZSwxMjYyLDEyNzAsLTE5KTtCbWIoY21lLDEyNzAsMTI3MiwzMyk7Qm1iKGNtZSwxMjcyLDEyNzQsLTE5KTtCbWIoY21lLDEyNzQsMTMyOSwzMyk7Qm1iKGNtZSwxMzI5LDEzNjcsLTE5KTtCbWIoY21lLDEzNjcsMTM2OSwzMyk7Y21lWzEzNjldPS0xOTtCbWIoY21lLDEzNzAsMTM3NywzMyk7Qm1iKGNtZSwxMzc3LDE0MTUsLTE5KTtCbWIoY21lLDE0MTUsMTQyNSwzMyk7Qm1iKGNtZSwxNDI1LDE0NDIsLTg3KTtjbWVbMTQ0Ml09MzM7Qm1iKGNtZSwxNDQzLDE0NjYsLTg3KTtjbWVbMTQ2Nl09MzM7Qm1iKGNtZSwxNDY3LDE0NzAsLTg3KTtjbWVbMTQ3MF09MzM7Y21lWzE0NzFdPS04NztjbWVbMTQ3Ml09MzM7Qm1iKGNtZSwxNDczLDE0NzUsLTg3KTtjbWVbMTQ3NV09MzM7Y21lWzE0NzZdPS04NztCbWIoY21lLDE0NzcsMTQ4OCwzMyk7Qm1iKGNtZSwxNDg4LDE1MTUsLTE5KTtCbWIoY21lLDE1MTUsMTUyMCwzMyk7Qm1iKGNtZSwxNTIwLDE1MjMsLTE5KTtCbWIoY21lLDE1MjMsMTU2OSwzMyk7Qm1iKGNtZSwxNTY5LDE1OTUsLTE5KTtCbWIoY21lLDE1OTUsMTYwMCwzMyk7Y21lWzE2MDBdPS04NztCbWIoY21lLDE2MDEsMTYxMSwtMTkpO0JtYihjbWUsMTYxMSwxNjE5LC04Nyk7Qm1iKGNtZSwxNjE5LDE2MzIsMzMpO0JtYihjbWUsMTYzMiwxNjQyLC04Nyk7Qm1iKGNtZSwxNjQyLDE2NDgsMzMpO2NtZVsxNjQ4XT0tODc7Qm1iKGNtZSwxNjQ5LDE3MjAsLTE5KTtCbWIoY21lLDE3MjAsMTcyMiwzMyk7Qm1iKGNtZSwxNzIyLDE3MjcsLTE5KTtjbWVbMTcyN109MzM7Qm1iKGNtZSwxNzI4LDE3NDMsLTE5KTtjbWVbMTc0M109MzM7Qm1iKGNtZSwxNzQ0LDE3NDgsLTE5KTtjbWVbMTc0OF09MzM7Y21lWzE3NDldPS0xOTtCbWIoY21lLDE3NTAsMTc2NSwtODcpO0JtYihjbWUsMTc2NSwxNzY3LC0xOSk7Qm1iKGNtZSwxNzY3LDE3NjksLTg3KTtjbWVbMTc2OV09MzM7Qm1iKGNtZSwxNzcwLDE3NzQsLTg3KTtCbWIoY21lLDE3NzQsMTc3NiwzMyk7Qm1iKGNtZSwxNzc2LDE3ODYsLTg3KTtCbWIoY21lLDE3ODYsMjMwNSwzMyk7Qm1iKGNtZSwyMzA1LDIzMDgsLTg3KTtjbWVbMjMwOF09MzM7Qm1iKGNtZSwyMzA5LDIzNjIsLTE5KTtCbWIoY21lLDIzNjIsMjM2NCwzMyk7Y21lWzIzNjRdPS04NztjbWVbMjM2NV09LTE5O0JtYihjbWUsMjM2NiwyMzgyLC04Nyk7Qm1iKGNtZSwyMzgyLDIzODUsMzMpO0JtYihjbWUsMjM4NSwyMzg5LC04Nyk7Qm1iKGNtZSwyMzg5LDIzOTIsMzMpO0JtYihjbWUsMjM5MiwyNDAyLC0xOSk7Qm1iKGNtZSwyNDAyLDI0MDQsLTg3KTtCbWIoY21lLDI0MDQsMjQwNiwzMyk7Qm1iKGNtZSwyNDA2LDI0MTYsLTg3KTtCbWIoY21lLDI0MTYsMjQzMywzMyk7Qm1iKGNtZSwyNDMzLDI0MzYsLTg3KTtjbWVbMjQzNl09MzM7Qm1iKGNtZSwyNDM3LDI0NDUsLTE5KTtCbWIoY21lLDI0NDUsMjQ0NywzMyk7Qm1iKGNtZSwyNDQ3LDI0NDksLTE5KTtCbWIoY21lLDI0NDksMjQ1MSwzMyk7Qm1iKGNtZSwyNDUxLDI0NzMsLTE5KTtjbWVbMjQ3M109MzM7Qm1iKGNtZSwyNDc0LDI0ODEsLTE5KTtjbWVbMjQ4MV09MzM7Y21lWzI0ODJdPS0xOTtCbWIoY21lLDI0ODMsMjQ4NiwzMyk7Qm1iKGNtZSwyNDg2LDI0OTAsLTE5KTtCbWIoY21lLDI0OTAsMjQ5MiwzMyk7Y21lWzI0OTJdPS04NztjbWVbMjQ5M109MzM7Qm1iKGNtZSwyNDk0LDI1MDEsLTg3KTtCbWIoY21lLDI1MDEsMjUwMywzMyk7Qm1iKGNtZSwyNTAzLDI1MDUsLTg3KTtCbWIoY21lLDI1MDUsMjUwNywzMyk7Qm1iKGNtZSwyNTA3LDI1MTAsLTg3KTtCbWIoY21lLDI1MTAsMjUxOSwzMyk7Y21lWzI1MTldPS04NztCbWIoY21lLDI1MjAsMjUyNCwzMyk7Qm1iKGNtZSwyNTI0LDI1MjYsLTE5KTtjbWVbMjUyNl09MzM7Qm1iKGNtZSwyNTI3LDI1MzAsLTE5KTtCbWIoY21lLDI1MzAsMjUzMiwtODcpO0JtYihjbWUsMjUzMiwyNTM0LDMzKTtCbWIoY21lLDI1MzQsMjU0NCwtODcpO0JtYihjbWUsMjU0NCwyNTQ2LC0xOSk7Qm1iKGNtZSwyNTQ2LDI1NjIsMzMpO2NtZVsyNTYyXT0tODc7Qm1iKGNtZSwyNTYzLDI1NjUsMzMpO0JtYihjbWUsMjU2NSwyNTcxLC0xOSk7Qm1iKGNtZSwyNTcxLDI1NzUsMzMpO0JtYihjbWUsMjU3NSwyNTc3LC0xOSk7Qm1iKGNtZSwyNTc3LDI1NzksMzMpO0JtYihjbWUsMjU3OSwyNjAxLC0xOSk7Y21lWzI2MDFdPTMzO0JtYihjbWUsMjYwMiwyNjA5LC0xOSk7Y21lWzI2MDldPTMzO0JtYihjbWUsMjYxMCwyNjEyLC0xOSk7Y21lWzI2MTJdPTMzO0JtYihjbWUsMjYxMywyNjE1LC0xOSk7Y21lWzI2MTVdPTMzO0JtYihjbWUsMjYxNiwyNjE4LC0xOSk7Qm1iKGNtZSwyNjE4LDI2MjAsMzMpO2NtZVsyNjIwXT0tODc7Y21lWzI2MjFdPTMzO0JtYihjbWUsMjYyMiwyNjI3LC04Nyk7Qm1iKGNtZSwyNjI3LDI2MzEsMzMpO0JtYihjbWUsMjYzMSwyNjMzLC04Nyk7Qm1iKGNtZSwyNjMzLDI2MzUsMzMpO0JtYihjbWUsMjYzNSwyNjM4LC04Nyk7Qm1iKGNtZSwyNjM4LDI2NDksMzMpO0JtYihjbWUsMjY0OSwyNjUzLC0xOSk7Y21lWzI2NTNdPTMzO2NtZVsyNjU0XT0tMTk7Qm1iKGNtZSwyNjU1LDI2NjIsMzMpO0JtYihjbWUsMjY2MiwyNjc0LC04Nyk7Qm1iKGNtZSwyNjc0LDI2NzcsLTE5KTtCbWIoY21lLDI2NzcsMjY4OSwzMyk7Qm1iKGNtZSwyNjg5LDI2OTIsLTg3KTtjbWVbMjY5Ml09MzM7Qm1iKGNtZSwyNjkzLDI3MDAsLTE5KTtjbWVbMjcwMF09MzM7Y21lWzI3MDFdPS0xOTtjbWVbMjcwMl09MzM7Qm1iKGNtZSwyNzAzLDI3MDYsLTE5KTtjbWVbMjcwNl09MzM7Qm1iKGNtZSwyNzA3LDI3MjksLTE5KTtjbWVbMjcyOV09MzM7Qm1iKGNtZSwyNzMwLDI3MzcsLTE5KTtjbWVbMjczN109MzM7Qm1iKGNtZSwyNzM4LDI3NDAsLTE5KTtjbWVbMjc0MF09MzM7Qm1iKGNtZSwyNzQxLDI3NDYsLTE5KTtCbWIoY21lLDI3NDYsMjc0OCwzMyk7Y21lWzI3NDhdPS04NztjbWVbMjc0OV09LTE5O0JtYihjbWUsMjc1MCwyNzU4LC04Nyk7Y21lWzI3NThdPTMzO0JtYihjbWUsMjc1OSwyNzYyLC04Nyk7Y21lWzI3NjJdPTMzO0JtYihjbWUsMjc2MywyNzY2LC04Nyk7Qm1iKGNtZSwyNzY2LDI3ODQsMzMpO2NtZVsyNzg0XT0tMTk7Qm1iKGNtZSwyNzg1LDI3OTAsMzMpO0JtYihjbWUsMjc5MCwyODAwLC04Nyk7Qm1iKGNtZSwyODAwLDI4MTcsMzMpO0JtYihjbWUsMjgxNywyODIwLC04Nyk7Y21lWzI4MjBdPTMzO0JtYihjbWUsMjgyMSwyODI5LC0xOSk7Qm1iKGNtZSwyODI5LDI4MzEsMzMpO0JtYihjbWUsMjgzMSwyODMzLC0xOSk7Qm1iKGNtZSwyODMzLDI4MzUsMzMpO0JtYihjbWUsMjgzNSwyODU3LC0xOSk7Y21lWzI4NTddPTMzO0JtYihjbWUsMjg1OCwyODY1LC0xOSk7Y21lWzI4NjVdPTMzO0JtYihjbWUsMjg2NiwyODY4LC0xOSk7Qm1iKGNtZSwyODY4LDI4NzAsMzMpO0JtYihjbWUsMjg3MCwyODc0LC0xOSk7Qm1iKGNtZSwyODc0LDI4NzYsMzMpO2NtZVsyODc2XT0tODc7Y21lWzI4NzddPS0xOTtCbWIoY21lLDI4NzgsMjg4NCwtODcpO0JtYihjbWUsMjg4NCwyODg3LDMzKTtCbWIoY21lLDI4ODcsMjg4OSwtODcpO0JtYihjbWUsMjg4OSwyODkxLDMzKTtCbWIoY21lLDI4OTEsMjg5NCwtODcpO0JtYihjbWUsMjg5NCwyOTAyLDMzKTtCbWIoY21lLDI5MDIsMjkwNCwtODcpO0JtYihjbWUsMjkwNCwyOTA4LDMzKTtCbWIoY21lLDI5MDgsMjkxMCwtMTkpO2NtZVsyOTEwXT0zMztCbWIoY21lLDI5MTEsMjkxNCwtMTkpO0JtYihjbWUsMjkxNCwyOTE4LDMzKTtCbWIoY21lLDI5MTgsMjkyOCwtODcpO0JtYihjbWUsMjkyOCwyOTQ2LDMzKTtCbWIoY21lLDI5NDYsMjk0OCwtODcpO2NtZVsyOTQ4XT0zMztCbWIoY21lLDI5NDksMjk1NSwtMTkpO0JtYihjbWUsMjk1NSwyOTU4LDMzKTtCbWIoY21lLDI5NTgsMjk2MSwtMTkpO2NtZVsyOTYxXT0zMztCbWIoY21lLDI5NjIsMjk2NiwtMTkpO0JtYihjbWUsMjk2NiwyOTY5LDMzKTtCbWIoY21lLDI5NjksMjk3MSwtMTkpO2NtZVsyOTcxXT0zMztjbWVbMjk3Ml09LTE5O2NtZVsyOTczXT0zMztCbWIoY21lLDI5NzQsMjk3NiwtMTkpO0JtYihjbWUsMjk3NiwyOTc5LDMzKTtCbWIoY21lLDI5NzksMjk4MSwtMTkpO0JtYihjbWUsMjk4MSwyOTg0LDMzKTtCbWIoY21lLDI5ODQsMjk4NywtMTkpO0JtYihjbWUsMjk4NywyOTkwLDMzKTtCbWIoY21lLDI5OTAsMjk5OCwtMTkpO2NtZVsyOTk4XT0zMztCbWIoY21lLDI5OTksMzAwMiwtMTkpO0JtYihjbWUsMzAwMiwzMDA2LDMzKTtCbWIoY21lLDMwMDYsMzAxMSwtODcpO0JtYihjbWUsMzAxMSwzMDE0LDMzKTtCbWIoY21lLDMwMTQsMzAxNywtODcpO2NtZVszMDE3XT0zMztCbWIoY21lLDMwMTgsMzAyMiwtODcpO0JtYihjbWUsMzAyMiwzMDMxLDMzKTtjbWVbMzAzMV09LTg3O0JtYihjbWUsMzAzMiwzMDQ3LDMzKTtCbWIoY21lLDMwNDcsMzA1NiwtODcpO0JtYihjbWUsMzA1NiwzMDczLDMzKTtCbWIoY21lLDMwNzMsMzA3NiwtODcpO2NtZVszMDc2XT0zMztCbWIoY21lLDMwNzcsMzA4NSwtMTkpO2NtZVszMDg1XT0zMztCbWIoY21lLDMwODYsMzA4OSwtMTkpO2NtZVszMDg5XT0zMztCbWIoY21lLDMwOTAsMzExMywtMTkpO2NtZVszMTEzXT0zMztCbWIoY21lLDMxMTQsMzEyNCwtMTkpO2NtZVszMTI0XT0zMztCbWIoY21lLDMxMjUsMzEzMCwtMTkpO0JtYihjbWUsMzEzMCwzMTM0LDMzKTtCbWIoY21lLDMxMzQsMzE0MSwtODcpO2NtZVszMTQxXT0zMztCbWIoY21lLDMxNDIsMzE0NSwtODcpO2NtZVszMTQ1XT0zMztCbWIoY21lLDMxNDYsMzE1MCwtODcpO0JtYihjbWUsMzE1MCwzMTU3LDMzKTtCbWIoY21lLDMxNTcsMzE1OSwtODcpO0JtYihjbWUsMzE1OSwzMTY4LDMzKTtCbWIoY21lLDMxNjgsMzE3MCwtMTkpO0JtYihjbWUsMzE3MCwzMTc0LDMzKTtCbWIoY21lLDMxNzQsMzE4NCwtODcpO0JtYihjbWUsMzE4NCwzMjAyLDMzKTtCbWIoY21lLDMyMDIsMzIwNCwtODcpO2NtZVszMjA0XT0zMztCbWIoY21lLDMyMDUsMzIxMywtMTkpO2NtZVszMjEzXT0zMztCbWIoY21lLDMyMTQsMzIxNywtMTkpO2NtZVszMjE3XT0zMztCbWIoY21lLDMyMTgsMzI0MSwtMTkpO2NtZVszMjQxXT0zMztCbWIoY21lLDMyNDIsMzI1MiwtMTkpO2NtZVszMjUyXT0zMztCbWIoY21lLDMyNTMsMzI1OCwtMTkpO0JtYihjbWUsMzI1OCwzMjYyLDMzKTtCbWIoY21lLDMyNjIsMzI2OSwtODcpO2NtZVszMjY5XT0zMztCbWIoY21lLDMyNzAsMzI3MywtODcpO2NtZVszMjczXT0zMztCbWIoY21lLDMyNzQsMzI3OCwtODcpO0JtYihjbWUsMzI3OCwzMjg1LDMzKTtCbWIoY21lLDMyODUsMzI4NywtODcpO0JtYihjbWUsMzI4NywzMjk0LDMzKTtjbWVbMzI5NF09LTE5O2NtZVszMjk1XT0zMztCbWIoY21lLDMyOTYsMzI5OCwtMTkpO0JtYihjbWUsMzI5OCwzMzAyLDMzKTtCbWIoY21lLDMzMDIsMzMxMiwtODcpO0JtYihjbWUsMzMxMiwzMzMwLDMzKTtCbWIoY21lLDMzMzAsMzMzMiwtODcpO2NtZVszMzMyXT0zMztCbWIoY21lLDMzMzMsMzM0MSwtMTkpO2NtZVszMzQxXT0zMztCbWIoY21lLDMzNDIsMzM0NSwtMTkpO2NtZVszMzQ1XT0zMztCbWIoY21lLDMzNDYsMzM2OSwtMTkpO2NtZVszMzY5XT0zMztCbWIoY21lLDMzNzAsMzM4NiwtMTkpO0JtYihjbWUsMzM4NiwzMzkwLDMzKTtCbWIoY21lLDMzOTAsMzM5NiwtODcpO0JtYihjbWUsMzM5NiwzMzk4LDMzKTtCbWIoY21lLDMzOTgsMzQwMSwtODcpO2NtZVszNDAxXT0zMztCbWIoY21lLDM0MDIsMzQwNiwtODcpO0JtYihjbWUsMzQwNiwzNDE1LDMzKTtjbWVbMzQxNV09LTg3O0JtYihjbWUsMzQxNiwzNDI0LDMzKTtCbWIoY21lLDM0MjQsMzQyNiwtMTkpO0JtYihjbWUsMzQyNiwzNDMwLDMzKTtCbWIoY21lLDM0MzAsMzQ0MCwtODcpO0JtYihjbWUsMzQ0MCwzNTg1LDMzKTtCbWIoY21lLDM1ODUsMzYzMSwtMTkpO2NtZVszNjMxXT0zMztjbWVbMzYzMl09LTE5O2NtZVszNjMzXT0tODc7Qm1iKGNtZSwzNjM0LDM2MzYsLTE5KTtCbWIoY21lLDM2MzYsMzY0MywtODcpO0JtYihjbWUsMzY0MywzNjQ4LDMzKTtCbWIoY21lLDM2NDgsMzY1NCwtMTkpO0JtYihjbWUsMzY1NCwzNjYzLC04Nyk7Y21lWzM2NjNdPTMzO0JtYihjbWUsMzY2NCwzNjc0LC04Nyk7Qm1iKGNtZSwzNjc0LDM3MTMsMzMpO0JtYihjbWUsMzcxMywzNzE1LC0xOSk7Y21lWzM3MTVdPTMzO2NtZVszNzE2XT0tMTk7Qm1iKGNtZSwzNzE3LDM3MTksMzMpO0JtYihjbWUsMzcxOSwzNzIxLC0xOSk7Y21lWzM3MjFdPTMzO2NtZVszNzIyXT0tMTk7Qm1iKGNtZSwzNzIzLDM3MjUsMzMpO2NtZVszNzI1XT0tMTk7Qm1iKGNtZSwzNzI2LDM3MzIsMzMpO0JtYihjbWUsMzczMiwzNzM2LC0xOSk7Y21lWzM3MzZdPTMzO0JtYihjbWUsMzczNywzNzQ0LC0xOSk7Y21lWzM3NDRdPTMzO0JtYihjbWUsMzc0NSwzNzQ4LC0xOSk7Y21lWzM3NDhdPTMzO2NtZVszNzQ5XT0tMTk7Y21lWzM3NTBdPTMzO2NtZVszNzUxXT0tMTk7Qm1iKGNtZSwzNzUyLDM3NTQsMzMpO0JtYihjbWUsMzc1NCwzNzU2LC0xOSk7Y21lWzM3NTZdPTMzO0JtYihjbWUsMzc1NywzNzU5LC0xOSk7Y21lWzM3NTldPTMzO2NtZVszNzYwXT0tMTk7Y21lWzM3NjFdPS04NztCbWIoY21lLDM3NjIsMzc2NCwtMTkpO0JtYihjbWUsMzc2NCwzNzcwLC04Nyk7Y21lWzM3NzBdPTMzO0JtYihjbWUsMzc3MSwzNzczLC04Nyk7Y21lWzM3NzNdPS0xOTtCbWIoY21lLDM3NzQsMzc3NiwzMyk7Qm1iKGNtZSwzNzc2LDM3ODEsLTE5KTtjbWVbMzc4MV09MzM7Y21lWzM3ODJdPS04NztjbWVbMzc4M109MzM7Qm1iKGNtZSwzNzg0LDM3OTAsLTg3KTtCbWIoY21lLDM3OTAsMzc5MiwzMyk7Qm1iKGNtZSwzNzkyLDM4MDIsLTg3KTtCbWIoY21lLDM4MDIsMzg2NCwzMyk7Qm1iKGNtZSwzODY0LDM4NjYsLTg3KTtCbWIoY21lLDM4NjYsMzg3MiwzMyk7Qm1iKGNtZSwzODcyLDM4ODIsLTg3KTtCbWIoY21lLDM4ODIsMzg5MywzMyk7Y21lWzM4OTNdPS04NztjbWVbMzg5NF09MzM7Y21lWzM4OTVdPS04NztjbWVbMzg5Nl09MzM7Y21lWzM4OTddPS04NztCbWIoY21lLDM4OTgsMzkwMiwzMyk7Qm1iKGNtZSwzOTAyLDM5MDQsLTg3KTtCbWIoY21lLDM5MDQsMzkxMiwtMTkpO2NtZVszOTEyXT0zMztCbWIoY21lLDM5MTMsMzk0NiwtMTkpO0JtYihjbWUsMzk0NiwzOTUzLDMzKTtCbWIoY21lLDM5NTMsMzk3MywtODcpO2NtZVszOTczXT0zMztCbWIoY21lLDM5NzQsMzk4MCwtODcpO0JtYihjbWUsMzk4MCwzOTg0LDMzKTtCbWIoY21lLDM5ODQsMzk5MCwtODcpO2NtZVszOTkwXT0zMztjbWVbMzk5MV09LTg3O2NtZVszOTkyXT0zMztCbWIoY21lLDM5OTMsNDAxNCwtODcpO0JtYihjbWUsNDAxNCw0MDE3LDMzKTtCbWIoY21lLDQwMTcsNDAyNCwtODcpO2NtZVs0MDI0XT0zMztjbWVbNDAyNV09LTg3O0JtYihjbWUsNDAyNiw0MjU2LDMzKTtCbWIoY21lLDQyNTYsNDI5NCwtMTkpO0JtYihjbWUsNDI5NCw0MzA0LDMzKTtCbWIoY21lLDQzMDQsNDM0MywtMTkpO0JtYihjbWUsNDM0Myw0MzUyLDMzKTtjbWVbNDM1Ml09LTE5O2NtZVs0MzUzXT0zMztCbWIoY21lLDQzNTQsNDM1NiwtMTkpO2NtZVs0MzU2XT0zMztCbWIoY21lLDQzNTcsNDM2MCwtMTkpO2NtZVs0MzYwXT0zMztjbWVbNDM2MV09LTE5O2NtZVs0MzYyXT0zMztCbWIoY21lLDQzNjMsNDM2NSwtMTkpO2NtZVs0MzY1XT0zMztCbWIoY21lLDQzNjYsNDM3MSwtMTkpO0JtYihjbWUsNDM3MSw0NDEyLDMzKTtjbWVbNDQxMl09LTE5O2NtZVs0NDEzXT0zMztjbWVbNDQxNF09LTE5O2NtZVs0NDE1XT0zMztjbWVbNDQxNl09LTE5O0JtYihjbWUsNDQxNyw0NDI4LDMzKTtjbWVbNDQyOF09LTE5O2NtZVs0NDI5XT0zMztjbWVbNDQzMF09LTE5O2NtZVs0NDMxXT0zMztjbWVbNDQzMl09LTE5O0JtYihjbWUsNDQzMyw0NDM2LDMzKTtCbWIoY21lLDQ0MzYsNDQzOCwtMTkpO0JtYihjbWUsNDQzOCw0NDQxLDMzKTtjbWVbNDQ0MV09LTE5O0JtYihjbWUsNDQ0Miw0NDQ3LDMzKTtCbWIoY21lLDQ0NDcsNDQ1MCwtMTkpO2NtZVs0NDUwXT0zMztjbWVbNDQ1MV09LTE5O2NtZVs0NDUyXT0zMztjbWVbNDQ1M109LTE5O2NtZVs0NDU0XT0zMztjbWVbNDQ1NV09LTE5O2NtZVs0NDU2XT0zMztjbWVbNDQ1N109LTE5O0JtYihjbWUsNDQ1OCw0NDYxLDMzKTtCbWIoY21lLDQ0NjEsNDQ2MywtMTkpO0JtYihjbWUsNDQ2Myw0NDY2LDMzKTtCbWIoY21lLDQ0NjYsNDQ2OCwtMTkpO2NtZVs0NDY4XT0zMztjbWVbNDQ2OV09LTE5O0JtYihjbWUsNDQ3MCw0NTEwLDMzKTtjbWVbNDUxMF09LTE5O0JtYihjbWUsNDUxMSw0NTIwLDMzKTtjbWVbNDUyMF09LTE5O0JtYihjbWUsNDUyMSw0NTIzLDMzKTtjbWVbNDUyM109LTE5O0JtYihjbWUsNDUyNCw0NTI2LDMzKTtCbWIoY21lLDQ1MjYsNDUyOCwtMTkpO0JtYihjbWUsNDUyOCw0NTM1LDMzKTtCbWIoY21lLDQ1MzUsNDUzNywtMTkpO2NtZVs0NTM3XT0zMztjbWVbNDUzOF09LTE5O2NtZVs0NTM5XT0zMztCbWIoY21lLDQ1NDAsNDU0NywtMTkpO0JtYihjbWUsNDU0Nyw0NTg3LDMzKTtjbWVbNDU4N109LTE5O0JtYihjbWUsNDU4OCw0NTkyLDMzKTtjbWVbNDU5Ml09LTE5O0JtYihjbWUsNDU5Myw0NjAxLDMzKTtjbWVbNDYwMV09LTE5O0JtYihjbWUsNDYwMiw3NjgwLDMzKTtCbWIoY21lLDc2ODAsNzgzNiwtMTkpO0JtYihjbWUsNzgzNiw3ODQwLDMzKTtCbWIoY21lLDc4NDAsNzkzMCwtMTkpO0JtYihjbWUsNzkzMCw3OTM2LDMzKTtCbWIoY21lLDc5MzYsNzk1OCwtMTkpO0JtYihjbWUsNzk1OCw3OTYwLDMzKTtCbWIoY21lLDc5NjAsNzk2NiwtMTkpO0JtYihjbWUsNzk2Niw3OTY4LDMzKTtCbWIoY21lLDc5NjgsODAwNiwtMTkpO0JtYihjbWUsODAwNiw4MDA4LDMzKTtCbWIoY21lLDgwMDgsODAxNCwtMTkpO0JtYihjbWUsODAxNCw4MDE2LDMzKTtCbWIoY21lLDgwMTYsODAyNCwtMTkpO2NtZVs4MDI0XT0zMztjbWVbODAyNV09LTE5O2NtZVs4MDI2XT0zMztjbWVbODAyN109LTE5O2NtZVs4MDI4XT0zMztjbWVbODAyOV09LTE5O2NtZVs4MDMwXT0zMztCbWIoY21lLDgwMzEsODA2MiwtMTkpO0JtYihjbWUsODA2Miw4MDY0LDMzKTtCbWIoY21lLDgwNjQsODExNywtMTkpO2NtZVs4MTE3XT0zMztCbWIoY21lLDgxMTgsODEyNSwtMTkpO2NtZVs4MTI1XT0zMztjbWVbODEyNl09LTE5O0JtYihjbWUsODEyNyw4MTMwLDMzKTtCbWIoY21lLDgxMzAsODEzMywtMTkpO2NtZVs4MTMzXT0zMztCbWIoY21lLDgxMzQsODE0MSwtMTkpO0JtYihjbWUsODE0MSw4MTQ0LDMzKTtCbWIoY21lLDgxNDQsODE0OCwtMTkpO0JtYihjbWUsODE0OCw4MTUwLDMzKTtCbWIoY21lLDgxNTAsODE1NiwtMTkpO0JtYihjbWUsODE1Niw4MTYwLDMzKTtCbWIoY21lLDgxNjAsODE3MywtMTkpO0JtYihjbWUsODE3Myw4MTc4LDMzKTtCbWIoY21lLDgxNzgsODE4MSwtMTkpO2NtZVs4MTgxXT0zMztCbWIoY21lLDgxODIsODE4OSwtMTkpO0JtYihjbWUsODE4OSw4NDAwLDMzKTtCbWIoY21lLDg0MDAsODQxMywtODcpO0JtYihjbWUsODQxMyw4NDE3LDMzKTtjbWVbODQxN109LTg3O0JtYihjbWUsODQxOCw4NDg2LDMzKTtjbWVbODQ4Nl09LTE5O0JtYihjbWUsODQ4Nyw4NDkwLDMzKTtCbWIoY21lLDg0OTAsODQ5MiwtMTkpO0JtYihjbWUsODQ5Miw4NDk0LDMzKTtjbWVbODQ5NF09LTE5O0JtYihjbWUsODQ5NSw4NTc2LDMzKTtCbWIoY21lLDg1NzYsODU3OSwtMTkpO0JtYihjbWUsODU3OSwxMjI5MywzMyk7Y21lWzEyMjkzXT0tODc7Y21lWzEyMjk0XT0zMztjbWVbMTIyOTVdPS0xOTtCbWIoY21lLDEyMjk2LDEyMzIxLDMzKTtCbWIoY21lLDEyMzIxLDEyMzMwLC0xOSk7Qm1iKGNtZSwxMjMzMCwxMjMzNiwtODcpO2NtZVsxMjMzNl09MzM7Qm1iKGNtZSwxMjMzNywxMjM0MiwtODcpO0JtYihjbWUsMTIzNDIsMTIzNTMsMzMpO0JtYihjbWUsMTIzNTMsMTI0MzcsLTE5KTtCbWIoY21lLDEyNDM3LDEyNDQxLDMzKTtCbWIoY21lLDEyNDQxLDEyNDQzLC04Nyk7Qm1iKGNtZSwxMjQ0MywxMjQ0NSwzMyk7Qm1iKGNtZSwxMjQ0NSwxMjQ0NywtODcpO0JtYihjbWUsMTI0NDcsMTI0NDksMzMpO0JtYihjbWUsMTI0NDksMTI1MzksLTE5KTtjbWVbMTI1MzldPTMzO0JtYihjbWUsMTI1NDAsMTI1NDMsLTg3KTtCbWIoY21lLDEyNTQzLDEyNTQ5LDMzKTtCbWIoY21lLDEyNTQ5LDEyNTg5LC0xOSk7Qm1iKGNtZSwxMjU4OSwxOTk2OCwzMyk7Qm1iKGNtZSwxOTk2OCw0MDg3MCwtMTkpO0JtYihjbWUsNDA4NzAsNDQwMzIsMzMpO0JtYihjbWUsNDQwMzIsNTUyMDQsLTE5KTtCbWIoY21lLDU1MjA0LFFzZSwzMyk7Qm1iKGNtZSw1NzM0NCw2NTUzNCwzMyl9CmZ1bmN0aW9uIHM2ZChhKXt2YXIgYixjLGQsZSxmLGcsaDtpZihhLmhiKXJldHVybjthLmhiPXRydWU7cnZkKGEsJ2Vjb3JlJyk7ZXdkKGEsJ2Vjb3JlJyk7ZndkKGEsQkZlKTtJdmQoYS5mYiwnRScpO0l2ZChhLkwsJ1QnKTtJdmQoYS5QLCdLJyk7SXZkKGEuUCwnVicpO0l2ZChhLmNiLCdFJyk7dENkKFVUZChhLmIpLGEuYmIpO3RDZChVVGQoYS5hKSxhLlEpO3RDZChVVGQoYS5vKSxhLnApO3RDZChVVGQoYS5wKSxhLlIpO3RDZChVVGQoYS5xKSxhLnApO3RDZChVVGQoYS52KSxhLnEpO3RDZChVVGQoYS53KSxhLlIpO3RDZChVVGQoYS5CKSxhLlEpO3RDZChVVGQoYS5SKSxhLlEpO3RDZChVVGQoYS5UKSxhLmViKTt0Q2QoVVRkKGEuVSksYS5SKTt0Q2QoVVRkKGEuViksYS5lYik7dENkKFVUZChhLlcpLGEuYmIpO3RDZChVVGQoYS5iYiksYS5lYik7dENkKFVUZChhLmViKSxhLlIpO3RDZChVVGQoYS5kYiksYS5SKTtadmQoYS5iLCQ1LFRFZSxmYWxzZSxmYWxzZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLmIpLDApLDM1KSxhLmUsJ2lEJyxudWxsLDAsMSwkNSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEuYiksMSksMTkpLGEucSxudWxsLCdlQXR0cmlidXRlVHlwZScsMSwxLCQ1LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUpO1p2ZChhLmEsWjUsUUVlLGZhbHNlLGZhbHNlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEuYSksMCksMzUpLGEuXyxjRGUsbnVsbCwwLDEsWjUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLmEpLDEpLDE5KSxhLmFiLG51bGwsJ2RldGFpbHMnLDAsLTEsWjUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLmEpLDIpLDE5KSxhLlEsSkQobkRkKFNUZChhLlEpLDApLDE5KSwnZU1vZGVsRWxlbWVudCcsMCwxLFo1LHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5hKSwzKSwxOSksYS5TLG51bGwsJ2NvbnRlbnRzJywwLC0xLFo1LGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5hKSw0KSwxOSksYS5TLG51bGwsJ3JlZmVyZW5jZXMnLDAsLTEsWjUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtadmQoYS5vLF81LCdFQ2xhc3MnLGZhbHNlLGZhbHNlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEubyksMCksMzUpLGEuZSwnYWJzdHJhY3QnLG51bGwsMCwxLF81LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WHZkKEpEKG5EZChTVGQoYS5vKSwxKSwzNSksYS5lLCdpbnRlcmZhY2UnLG51bGwsMCwxLF81LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5vKSwyKSwxOSksYS5vLG51bGwsJ2VTdXBlclR5cGVzJywwLC0xLF81LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLm8pLDMpLDE5KSxhLlQsSkQobkRkKFNUZChhLlQpLDApLDE5KSwnZU9wZXJhdGlvbnMnLDAsLTEsXzUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLm8pLDQpLDE5KSxhLmIsbnVsbCwnZUFsbEF0dHJpYnV0ZXMnLDAsLTEsXzUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5vKSw1KSwxOSksYS5XLG51bGwsJ2VBbGxSZWZlcmVuY2VzJywwLC0xLF81LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUpO2J3ZChKRChuRGQoU1RkKGEubyksNiksMTkpLGEuVyxudWxsLCdlUmVmZXJlbmNlcycsMCwtMSxfNSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLm8pLDcpLDE5KSxhLmIsbnVsbCwnZUF0dHJpYnV0ZXMnLDAsLTEsXzUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5vKSw4KSwxOSksYS5XLG51bGwsJ2VBbGxDb250YWlubWVudHMnLDAsLTEsXzUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5vKSw5KSwxOSksYS5ULG51bGwsJ2VBbGxPcGVyYXRpb25zJywwLC0xLF81LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUpO2J3ZChKRChuRGQoU1RkKGEubyksMTApLDE5KSxhLmJiLG51bGwsJ2VBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMnLDAsLTEsXzUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5vKSwxMSksMTkpLGEubyxudWxsLCdlQWxsU3VwZXJUeXBlcycsMCwtMSxfNSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLm8pLDEyKSwxOSksYS5iLG51bGwsJ2VJREF0dHJpYnV0ZScsMCwxLF81LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLm8pLDEzKSwxOSksYS5iYixKRChuRGQoU1RkKGEuYmIpLDcpLDE5KSwnZVN0cnVjdHVyYWxGZWF0dXJlcycsMCwtMSxfNSxmYWxzZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEubyksMTQpLDE5KSxhLkgsbnVsbCwnZUdlbmVyaWNTdXBlclR5cGVzJywwLC0xLF81LGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLm8pLDE1KSwxOSksYS5ILG51bGwsJ2VBbGxHZW5lcmljU3VwZXJUeXBlcycsMCwtMSxfNSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlKTtoPWF3ZChKRChuRGQoUFRkKGEubyksMCksNjIpLGEuZSwnaXNTdXBlclR5cGVPZicpO0d2ZChoLGEubywnc29tZUNsYXNzJyk7YXdkKEpEKG5EZChQVGQoYS5vKSwxKSw2MiksYS5JLCdnZXRGZWF0dXJlQ291bnQnKTtoPWF3ZChKRChuRGQoUFRkKGEubyksMiksNjIpLGEuYmIsRkZlKTtHdmQoaCxhLkksJ2ZlYXR1cmVJRCcpO2g9YXdkKEpEKG5EZChQVGQoYS5vKSwzKSw2MiksYS5JLEdGZSk7R3ZkKGgsYS5iYixIRmUpO2g9YXdkKEpEKG5EZChQVGQoYS5vKSw0KSw2MiksYS5iYixGRmUpO0d2ZChoLGEuXywnZmVhdHVyZU5hbWUnKTthd2QoSkQobkRkKFBUZChhLm8pLDUpLDYyKSxhLkksJ2dldE9wZXJhdGlvbkNvdW50Jyk7aD1hd2QoSkQobkRkKFBUZChhLm8pLDYpLDYyKSxhLlQsJ2dldEVPcGVyYXRpb24nKTtHdmQoaCxhLkksJ29wZXJhdGlvbklEJyk7aD1hd2QoSkQobkRkKFBUZChhLm8pLDcpLDYyKSxhLkksSUZlKTtHdmQoaCxhLlQsSkZlKTtoPWF3ZChKRChuRGQoUFRkKGEubyksOCksNjIpLGEuVCwnZ2V0T3ZlcnJpZGUnKTtHdmQoaCxhLlQsSkZlKTtoPWF3ZChKRChuRGQoUFRkKGEubyksOSksNjIpLGEuSCwnZ2V0RmVhdHVyZVR5cGUnKTtHdmQoaCxhLmJiLEhGZSk7WnZkKGEucCxhNixVRWUsdHJ1ZSxmYWxzZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLnApLDApLDM1KSxhLl8sJ2luc3RhbmNlQ2xhc3NOYW1lJyxudWxsLDAsMSxhNixmYWxzZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLGZhbHNlKTtiPVB2ZChhLkwpO2M9bzZkKCk7dENkKCghYi5kJiYoYi5kPW5ldyBxVmQoZzYsYiwxKSksYi5kKSxjKTtZdmQoSkQobkRkKFNUZChhLnApLDEpLDM1KSxiLCdpbnN0YW5jZUNsYXNzJyxhNix0cnVlLHRydWUsZmFsc2UsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5wKSwyKSwzNSksYS5NLEtGZSxudWxsLDAsMSxhNix0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLnApLDMpLDM1KSxhLl8sJ2luc3RhbmNlVHlwZU5hbWUnLG51bGwsMCwxLGE2LGZhbHNlLHRydWUsdHJ1ZSx0cnVlLHRydWUsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEucCksNCksMTkpLGEuVSxKRChuRGQoU1RkKGEuVSksMyksMTkpLCdlUGFja2FnZScsMCwxLGE2LHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5wKSw1KSwxOSksYS5kYixudWxsLExGZSwwLC0xLGE2LGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlKTtoPWF3ZChKRChuRGQoUFRkKGEucCksMCksNjIpLGEuZSxNRmUpO0d2ZChoLGEuTSxDcWUpO2F3ZChKRChuRGQoUFRkKGEucCksMSksNjIpLGEuSSwnZ2V0Q2xhc3NpZmllcklEJyk7WnZkKGEucSxjNiwnRURhdGFUeXBlJyxmYWxzZSxmYWxzZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLnEpLDApLDM1KSxhLmUsJ3NlcmlhbGl6YWJsZScsQ0JlLDAsMSxjNixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1p2ZChhLnYsZTYsJ0VFbnVtJyxmYWxzZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLnYpLDApLDE5KSxhLncsSkQobkRkKFNUZChhLncpLDMpLDE5KSwnZUxpdGVyYWxzJywwLC0xLGU2LGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7aD1hd2QoSkQobkRkKFBUZChhLnYpLDApLDYyKSxhLncsTkZlKTtHdmQoaCxhLl8sSERlKTtoPWF3ZChKRChuRGQoUFRkKGEudiksMSksNjIpLGEudyxORmUpO0d2ZChoLGEuSSxiRGUpO2g9YXdkKEpEKG5EZChQVGQoYS52KSwyKSw2MiksYS53LCdnZXRFRW51bUxpdGVyYWxCeUxpdGVyYWwnKTtHdmQoaCxhLl8sJ2xpdGVyYWwnKTtadmQoYS53LGQ2LFZFZSxmYWxzZSxmYWxzZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLncpLDApLDM1KSxhLkksYkRlLG51bGwsMCwxLGQ2LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WHZkKEpEKG5EZChTVGQoYS53KSwxKSwzNSksYS5BLCdpbnN0YW5jZScsbnVsbCwwLDEsZDYsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEudyksMiksMzUpLGEuXywnbGl0ZXJhbCcsbnVsbCwwLDEsZDYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLncpLDMpLDE5KSxhLnYsSkQobkRkKFNUZChhLnYpLDApLDE5KSwnZUVudW0nLDAsMSxkNix0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtadmQoYS5CLGY2LCdFRmFjdG9yeScsZmFsc2UsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5CKSwwKSwxOSksYS5VLEpEKG5EZChTVGQoYS5VKSwyKSwxOSksJ2VQYWNrYWdlJywxLDEsZjYsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtoPWF3ZChKRChuRGQoUFRkKGEuQiksMCksNjIpLGEuUywnY3JlYXRlJyk7R3ZkKGgsYS5vLCdlQ2xhc3MnKTtoPWF3ZChKRChuRGQoUFRkKGEuQiksMSksNjIpLGEuTSwnY3JlYXRlRnJvbVN0cmluZycpO0d2ZChoLGEucSwnZURhdGFUeXBlJyk7R3ZkKGgsYS5fLCdsaXRlcmFsVmFsdWUnKTtoPWF3ZChKRChuRGQoUFRkKGEuQiksMiksNjIpLGEuXywnY29udmVydFRvU3RyaW5nJyk7R3ZkKGgsYS5xLCdlRGF0YVR5cGUnKTtHdmQoaCxhLk0sJ2luc3RhbmNlVmFsdWUnKTtadmQoYS5RLGg2LEVDZSx0cnVlLGZhbHNlLHRydWUpO2J3ZChKRChuRGQoU1RkKGEuUSksMCksMTkpLGEuYSxKRChuRGQoU1RkKGEuYSksMiksMTkpLCdlQW5ub3RhdGlvbnMnLDAsLTEsaDYsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtoPWF3ZChKRChuRGQoUFRkKGEuUSksMCksNjIpLGEuYSwnZ2V0RUFubm90YXRpb24nKTtHdmQoaCxhLl8sY0RlKTtadmQoYS5SLGk2LEZDZSx0cnVlLGZhbHNlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEuUiksMCksMzUpLGEuXyxIRGUsbnVsbCwwLDEsaTYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtadmQoYS5TLGo2LCdFT2JqZWN0JyxmYWxzZSxmYWxzZSx0cnVlKTthd2QoSkQobkRkKFBUZChhLlMpLDApLDYyKSxhLm8sJ2VDbGFzcycpO2F3ZChKRChuRGQoUFRkKGEuUyksMSksNjIpLGEuZSwnZUlzUHJveHknKTthd2QoSkQobkRkKFBUZChhLlMpLDIpLDYyKSxhLlgsJ2VSZXNvdXJjZScpO2F3ZChKRChuRGQoUFRkKGEuUyksMyksNjIpLGEuUywnZUNvbnRhaW5lcicpO2F3ZChKRChuRGQoUFRkKGEuUyksNCksNjIpLGEuYmIsJ2VDb250YWluaW5nRmVhdHVyZScpO2F3ZChKRChuRGQoUFRkKGEuUyksNSksNjIpLGEuVywnZUNvbnRhaW5tZW50RmVhdHVyZScpO2g9YXdkKEpEKG5EZChQVGQoYS5TKSw2KSw2MiksbnVsbCwnZUNvbnRlbnRzJyk7Yj1QdmQoYS5mYik7Yz1QdmQoYS5TKTt0Q2QoKCFiLmQmJihiLmQ9bmV3IHFWZChnNixiLDEpKSxiLmQpLGMpO2U9cVJkKGgsYixudWxsKTshIWUmJmUubGooKTtoPWF3ZChKRChuRGQoUFRkKGEuUyksNyksNjIpLG51bGwsJ2VBbGxDb250ZW50cycpO2I9UHZkKGEuY2IpO2M9UHZkKGEuUyk7dENkKCghYi5kJiYoYi5kPW5ldyBxVmQoZzYsYiwxKSksYi5kKSxjKTtmPXFSZChoLGIsbnVsbCk7ISFmJiZmLmxqKCk7aD1hd2QoSkQobkRkKFBUZChhLlMpLDgpLDYyKSxudWxsLCdlQ3Jvc3NSZWZlcmVuY2VzJyk7Yj1QdmQoYS5mYik7Yz1QdmQoYS5TKTt0Q2QoKCFiLmQmJihiLmQ9bmV3IHFWZChnNixiLDEpKSxiLmQpLGMpO2c9cVJkKGgsYixudWxsKTshIWcmJmcubGooKTtoPWF3ZChKRChuRGQoUFRkKGEuUyksOSksNjIpLGEuTSwnZUdldCcpO0d2ZChoLGEuYmIsSEZlKTtoPWF3ZChKRChuRGQoUFRkKGEuUyksMTApLDYyKSxhLk0sJ2VHZXQnKTtHdmQoaCxhLmJiLEhGZSk7R3ZkKGgsYS5lLCdyZXNvbHZlJyk7aD1hd2QoSkQobkRkKFBUZChhLlMpLDExKSw2MiksbnVsbCwnZVNldCcpO0d2ZChoLGEuYmIsSEZlKTtHdmQoaCxhLk0sJ25ld1ZhbHVlJyk7aD1hd2QoSkQobkRkKFBUZChhLlMpLDEyKSw2MiksYS5lLCdlSXNTZXQnKTtHdmQoaCxhLmJiLEhGZSk7aD1hd2QoSkQobkRkKFBUZChhLlMpLDEzKSw2MiksbnVsbCwnZVVuc2V0Jyk7R3ZkKGgsYS5iYixIRmUpO2g9YXdkKEpEKG5EZChQVGQoYS5TKSwxNCksNjIpLGEuTSwnZUludm9rZScpO0d2ZChoLGEuVCxKRmUpO2I9UHZkKGEuZmIpO2M9bzZkKCk7dENkKCghYi5kJiYoYi5kPW5ldyBxVmQoZzYsYiwxKSksYi5kKSxjKTtIdmQoaCxiLCdhcmd1bWVudHMnKTtFdmQoaCxhLkspO1p2ZChhLlQsazYsWEVlLGZhbHNlLGZhbHNlLHRydWUpO2J3ZChKRChuRGQoU1RkKGEuVCksMCksMTkpLGEubyxKRChuRGQoU1RkKGEubyksMyksMTkpLE9GZSwwLDEsazYsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5UKSwxKSwxOSksYS5kYixudWxsLExGZSwwLC0xLGs2LGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLlQpLDIpLDE5KSxhLlYsSkQobkRkKFNUZChhLlYpLDApLDE5KSwnZVBhcmFtZXRlcnMnLDAsLTEsazYsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLlQpLDMpLDE5KSxhLnAsbnVsbCwnZUV4Y2VwdGlvbnMnLDAsLTEsazYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEuVCksNCksMTkpLGEuSCxudWxsLCdlR2VuZXJpY0V4Y2VwdGlvbnMnLDAsLTEsazYsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO2F3ZChKRChuRGQoUFRkKGEuVCksMCksNjIpLGEuSSxJRmUpO2g9YXdkKEpEKG5EZChQVGQoYS5UKSwxKSw2MiksYS5lLCdpc092ZXJyaWRlT2YnKTtHdmQoaCxhLlQsJ3NvbWVPcGVyYXRpb24nKTtadmQoYS5VLGw2LCdFUGFja2FnZScsZmFsc2UsZmFsc2UsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5VKSwwKSwzNSksYS5fLCduc1VSSScsbnVsbCwwLDEsbDYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLlUpLDEpLDM1KSxhLl8sJ25zUHJlZml4JyxudWxsLDAsMSxsNixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEuVSksMiksMTkpLGEuQixKRChuRGQoU1RkKGEuQiksMCksMTkpLCdlRmFjdG9yeUluc3RhbmNlJywxLDEsbDYsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLlUpLDMpLDE5KSxhLnAsSkQobkRkKFNUZChhLnApLDQpLDE5KSwnZUNsYXNzaWZpZXJzJywwLC0xLGw2LGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLlUpLDQpLDE5KSxhLlUsSkQobkRkKFNUZChhLlUpLDUpLDE5KSwnZVN1YnBhY2thZ2VzJywwLC0xLGw2LGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLlUpLDUpLDE5KSxhLlUsSkQobkRkKFNUZChhLlUpLDQpLDE5KSwnZVN1cGVyUGFja2FnZScsMCwxLGw2LHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7aD1hd2QoSkQobkRkKFBUZChhLlUpLDApLDYyKSxhLnAsJ2dldEVDbGFzc2lmaWVyJyk7R3ZkKGgsYS5fLEhEZSk7WnZkKGEuVixtNixZRWUsZmFsc2UsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5WKSwwKSwxOSksYS5ULEpEKG5EZChTVGQoYS5UKSwyKSwxOSksJ2VPcGVyYXRpb24nLDAsMSxtNix0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKTtadmQoYS5XLG42LFpFZSxmYWxzZSxmYWxzZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLlcpLDApLDM1KSxhLmUsJ2NvbnRhaW5tZW50JyxudWxsLDAsMSxuNixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuVyksMSksMzUpLGEuZSwnY29udGFpbmVyJyxudWxsLDAsMSxuNix0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLlcpLDIpLDM1KSxhLmUsJ3Jlc29sdmVQcm94aWVzJyxDQmUsMCwxLG42LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5XKSwzKSwxOSksYS5XLG51bGwsJ2VPcHBvc2l0ZScsMCwxLG42LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5XKSw0KSwxOSksYS5vLG51bGwsJ2VSZWZlcmVuY2VUeXBlJywxLDEsbjYsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5XKSw1KSwxOSksYS5iLG51bGwsJ2VLZXlzJywwLC0xLG42LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSk7WnZkKGEuYmIscTYsU0VlLHRydWUsZmFsc2UsdHJ1ZSk7WHZkKEpEKG5EZChTVGQoYS5iYiksMCksMzUpLGEuZSwnY2hhbmdlYWJsZScsQ0JlLDAsMSxxNixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuYmIpLDEpLDM1KSxhLmUsJ3ZvbGF0aWxlJyxudWxsLDAsMSxxNixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuYmIpLDIpLDM1KSxhLmUsJ3RyYW5zaWVudCcsbnVsbCwwLDEscTYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLmJiKSwzKSwzNSksYS5fLCdkZWZhdWx0VmFsdWVMaXRlcmFsJyxudWxsLDAsMSxxNixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuYmIpLDQpLDM1KSxhLk0sS0ZlLG51bGwsMCwxLHE2LHRydWUsdHJ1ZSxmYWxzZSxmYWxzZSx0cnVlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEuYmIpLDUpLDM1KSxhLmUsJ3Vuc2V0dGFibGUnLG51bGwsMCwxLHE2LGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WHZkKEpEKG5EZChTVGQoYS5iYiksNiksMzUpLGEuZSwnZGVyaXZlZCcsbnVsbCwwLDEscTYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLmJiKSw3KSwxOSksYS5vLEpEKG5EZChTVGQoYS5vKSwxMyksMTkpLE9GZSwwLDEscTYsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7YXdkKEpEKG5EZChQVGQoYS5iYiksMCksNjIpLGEuSSxHRmUpO2g9YXdkKEpEKG5EZChQVGQoYS5iYiksMSksNjIpLG51bGwsJ2dldENvbnRhaW5lckNsYXNzJyk7Yj1QdmQoYS5MKTtjPW82ZCgpO3RDZCgoIWIuZCYmKGIuZD1uZXcgcVZkKGc2LGIsMSkpLGIuZCksYyk7ZD1xUmQoaCxiLG51bGwpOyEhZCYmZC5saigpO1p2ZChhLmViLHM2LFJFZSx0cnVlLGZhbHNlLHRydWUpO1h2ZChKRChuRGQoU1RkKGEuZWIpLDApLDM1KSxhLmUsJ29yZGVyZWQnLENCZSwwLDEsczYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLmViKSwxKSwzNSksYS5lLCd1bmlxdWUnLENCZSwwLDEsczYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLmViKSwyKSwzNSksYS5JLCdsb3dlckJvdW5kJyxudWxsLDAsMSxzNixmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuZWIpLDMpLDM1KSxhLkksJ3VwcGVyQm91bmQnLCcxJywwLDEsczYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlKTtYdmQoSkQobkRkKFNUZChhLmViKSw0KSwzNSksYS5lLCdtYW55JyxudWxsLDAsMSxzNix0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlKTtYdmQoSkQobkRkKFNUZChhLmViKSw1KSwzNSksYS5lLCdyZXF1aXJlZCcsbnVsbCwwLDEsczYsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLHRydWUsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5lYiksNiksMTkpLGEucCxudWxsLCdlVHlwZScsMCwxLHM2LGZhbHNlLHRydWUsdHJ1ZSxmYWxzZSx0cnVlLHRydWUsZmFsc2UpO2J3ZChKRChuRGQoU1RkKGEuZWIpLDcpLDE5KSxhLkgsbnVsbCwnZUdlbmVyaWNUeXBlJywwLDEsczYsZmFsc2UsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WnZkKGEuYWIsTEssJ0VTdHJpbmdUb1N0cmluZ01hcEVudHJ5JyxmYWxzZSxmYWxzZSxmYWxzZSk7WHZkKEpEKG5EZChTVGQoYS5hYiksMCksMzUpLGEuXywna2V5JyxudWxsLDAsMSxMSyxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLHRydWUsZmFsc2UpO1h2ZChKRChuRGQoU1RkKGEuYWIpLDEpLDM1KSxhLl8sYkRlLG51bGwsMCwxLExLLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSxmYWxzZSk7WnZkKGEuSCxnNixXRWUsZmFsc2UsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5IKSwwKSwxOSksYS5ILG51bGwsJ2VVcHBlckJvdW5kJywwLDEsZzYsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLkgpLDEpLDE5KSxhLkgsbnVsbCwnZVR5cGVBcmd1bWVudHMnLDAsLTEsZzYsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLkgpLDIpLDE5KSxhLnAsbnVsbCwnZVJhd1R5cGUnLDEsMSxnNix0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSk7YndkKEpEKG5EZChTVGQoYS5IKSwzKSwxOSksYS5ILG51bGwsJ2VMb3dlckJvdW5kJywwLDEsZzYsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtid2QoSkQobkRkKFNUZChhLkgpLDQpLDE5KSxhLmRiLG51bGwsJ2VUeXBlUGFyYW1ldGVyJywwLDEsZzYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7YndkKEpEKG5EZChTVGQoYS5IKSw1KSwxOSksYS5wLG51bGwsJ2VDbGFzc2lmaWVyJywwLDEsZzYsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlKTtoPWF3ZChKRChuRGQoUFRkKGEuSCksMCksNjIpLGEuZSxNRmUpO0d2ZChoLGEuTSxDcWUpO1p2ZChhLmRiLHI2LCRFZSxmYWxzZSxmYWxzZSx0cnVlKTtid2QoSkQobkRkKFNUZChhLmRiKSwwKSwxOSksYS5ILG51bGwsJ2VCb3VuZHMnLDAsLTEscjYsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlKTtfdmQoYS5jLGtKLCdFQmlnRGVjaW1hbCcsdHJ1ZSk7X3ZkKGEuZCxsSiwnRUJpZ0ludGVnZXInLHRydWUpO192ZChhLmUscGNiLCdFQm9vbGVhbicsdHJ1ZSk7X3ZkKGEuZixHSSwnRUJvb2xlYW5PYmplY3QnLHRydWUpO192ZChhLmksJEQsJ0VCeXRlJyx0cnVlKTtfdmQoYS5nLE9DKCRELDEpLCdFQnl0ZUFycmF5Jyx0cnVlKTtfdmQoYS5qLEhJLCdFQnl0ZU9iamVjdCcsdHJ1ZSk7X3ZkKGEuayxfRCwnRUNoYXInLHRydWUpO192ZChhLm4sSUksJ0VDaGFyYWN0ZXJPYmplY3QnLHRydWUpO192ZChhLnIsaEssJ0VEYXRlJyx0cnVlKTtfdmQoYS5zLEw1LCdFRGlhZ25vc3RpY0NoYWluJyxmYWxzZSk7X3ZkKGEudCxhRSwnRURvdWJsZScsdHJ1ZSk7X3ZkKGEudSxMSSwnRURvdWJsZU9iamVjdCcsdHJ1ZSk7X3ZkKGEuZmIsUTUsJ0VFTGlzdCcsZmFsc2UpO192ZChhLkEsUjUsJ0VFbnVtZXJhdG9yJyxmYWxzZSk7X3ZkKGEuQyxMYWIsJ0VGZWF0dXJlTWFwJyxmYWxzZSk7X3ZkKGEuRCxCYWIsJ0VGZWF0dXJlTWFwRW50cnknLGZhbHNlKTtfdmQoYS5GLGJFLCdFRmxvYXQnLHRydWUpO192ZChhLkcsUUksJ0VGbG9hdE9iamVjdCcsdHJ1ZSk7X3ZkKGEuSSxjRSwnRUludCcsdHJ1ZSk7X3ZkKGEuSixVSSwnRUludGVnZXJPYmplY3QnLHRydWUpO192ZChhLkwsS0ksJ0VKYXZhQ2xhc3MnLHRydWUpO192ZChhLk0sYUosJ0VKYXZhT2JqZWN0Jyx0cnVlKTtfdmQoYS5OLGRFLCdFTG9uZycsdHJ1ZSk7X3ZkKGEuTyxYSSwnRUxvbmdPYmplY3QnLHRydWUpO192ZChhLlAsTUssJ0VNYXAnLGZhbHNlKTtfdmQoYS5YLHM5LCdFUmVzb3VyY2UnLGZhbHNlKTtfdmQoYS5ZLHI5LCdFUmVzb3VyY2VTZXQnLGZhbHNlKTtfdmQoYS5aLG9jYiwnRVNob3J0Jyx0cnVlKTtfdmQoYS4kLGNKLCdFU2hvcnRPYmplY3QnLHRydWUpO192ZChhLl8saEosJ0VTdHJpbmcnLHRydWUpO192ZChhLmNiLFU1LCdFVHJlZUl0ZXJhdG9yJyxmYWxzZSk7X3ZkKGEuSyxTNSwnRUludm9jYXRpb25UYXJnZXRFeGNlcHRpb24nLGZhbHNlKTtUdmQoYSxCRmUpfQp2YXIgQ3FlPSdvYmplY3QnLERxZT0nYm9vbGVhbicsRXFlPSdudW1iZXInLEZxZT0nc3RyaW5nJyxHcWU9J2Z1bmN0aW9uJyxIcWU9MjE0NzQ4MzY0NyxJcWU9J2phdmEubGFuZycsSnFlPXszOjF9LEtxZT0nY29tLmdvb2dsZS5jb21tb24uYmFzZScsTHFlPScsICcsTXFlPSclcyAoJXMpIG11c3Qgbm90IGJlIG5lZ2F0aXZlJyxOcWU9ezM6MSw0OjEsNToxfSxPcWU9J25lZ2F0aXZlIHNpemU6ICcsUHFlPSdubyBjYWxscyB0byBuZXh0KCkgc2luY2UgdGhlIGxhc3QgY2FsbCB0byByZW1vdmUoKScsUXFlPSdPcHRpb25hbC5vZignLFJxZT0nbnVsbCcsU3FlPXsyMDQ6MSw0OToxfSxUcWU9J2NvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QnLFVxZT17MjA0OjEsNDk6MSwxMjc6MX0sVnFlPXsyMjg6MSwzOjF9LFdxZT17NDk6MX0sWHFlPSdqYXZhLnV0aWwnLFlxZT17OTE6MX0sWnFlPXsyMDoxLDMxOjEsMTY6MX0sJHFlPTIwMDksX3FlPXsyMDoxLDMxOjEsMTY6MSwyMjoxfSxhcmU9ezkxOjEsMTM3OjEsMTM0OjF9LGJyZT17MjA6MSwzMToxLDE2OjEsMjI6MSw4MzoxfSxjcmU9ezIwOjEsMzE6MSwxNjoxLDI3NDoxLDIyOjEsODM6MX0sZHJlPXs0OToxLDEyNzoxfSxlcmU9ezM1NToxLDQzOjF9LGZyZT0nQWJzdHJhY3RNYXBFbnRyeScsZ3JlPSdleHBlY3RlZFZhbHVlc1BlcktleScsaHJlPXszOjEsNjoxLDQ6MSw1OjF9LGlyZT0xNjM4NCxqcmU9ezE1ODoxfSxrcmU9ezQwOjF9LGxyZT17MjAyOjF9LG1yZT17bDo0MTk0MzAzLG06NDE5NDMwMyxoOjUyNDI4N30sbnJlPXsyNTI6MSwzOjEsMzQ6MX0sb3JlPSdyYW5nZSB1bmJvdW5kZWQgb24gdGhpcyBzaWRlJyxwcmU9ezIwOjF9LHFyZT17MjA6MSwxNjoxfSxycmU9ezM6MSwyMDoxLDMxOjEsMTY6MX0sc3JlPXszMDg6MSwzOjEsMjA6MSwzMToxLDE2OjEsMTU6MSw1OToxfSx0cmU9ezM6MSw0OjEsNToxLDE3NDoxfSx1cmU9ezM6MSw5MToxfSx2cmU9ezIwOjEsMTY6MSwyMjoxfSx3cmU9ezM6MSwyMDoxLDMxOjEsMTY6MSwyMjoxfSx4cmU9ezIwOjEsMTY6MSwyMjoxLDgzOjF9LHlyZT00NjE4NDU5MDcsenJlPS04NjIwNDg5NDMsQXJlPXszOjEsNjoxLDQ6MSw1OjEsMTc0OjF9LEJyZT0nZXhwZWN0ZWRTaXplJyxDcmU9MTA3Mzc0MTgyNCxEcmU9J2luaXRpYWxBcnJheVNpemUnLEVyZT17MzoxLDY6MSw0OjEsMTA6MSw1OjF9LEZyZT17MjA6MSwzMToxLDU1OjEsMTY6MSwxNToxfSxHcmU9J2FycmF5U2l6ZScsSHJlPXsyMDoxLDMxOjEsNTU6MSwxNjoxLDE1OjEsNTk6MX0sSXJlPXs0ODoxfSxKcmU9ezM3MjoxfSxLcmU9MS4wRS00LExyZT0tMjE0NzQ4MzY0OCxNcmU9J19fbm9pbml0X18nLE5yZT17MzoxLDEwMzoxLDYzOjEsODA6MX0sT3JlPSdjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudC5pbXBsJyxQcmU9J1N0cmluZycsUXJlPSdjb20uZ29vZ2xlLmd3dC5jb3JlLmNsaWVudCcsUnJlPSdhbm9ueW1vdXMnLFNyZT0nZm5TdGFjaycsVHJlPSdVbmtub3duJyxVcmU9ezIwMToxLDM6MSw0OjF9LFZyZT0xMDAwLFdyZT02NTUzNSxYcmU9J0phbnVhcnknLFlyZT0nRmVicnVhcnknLFpyZT0nTWFyY2gnLCRyZT0nQXByaWwnLF9yZT0nTWF5Jyxhc2U9J0p1bmUnLGJzZT0nSnVseScsY3NlPSdBdWd1c3QnLGRzZT0nU2VwdGVtYmVyJyxlc2U9J09jdG9iZXInLGZzZT0nTm92ZW1iZXInLGdzZT0nRGVjZW1iZXInLGhzZT0xOTAwLGlzZT17NTQ6MSwzOjEsNDoxfSxqc2U9J0JlZm9yZSBDaHJpc3QnLGtzZT0nQW5ubyBEb21pbmknLGxzZT0nU3VuZGF5Jyxtc2U9J01vbmRheScsbnNlPSdUdWVzZGF5Jyxvc2U9J1dlZG5lc2RheScscHNlPSdUaHVyc2RheScscXNlPSdGcmlkYXknLHJzZT0nU2F0dXJkYXknLHNzZT0nY29tLmdvb2dsZS5nd3QuaTE4bi5zaGFyZWQnLHRzZT0nRGF0ZVRpbWVGb3JtYXQnLHVzZT0nY29tLmdvb2dsZS5nd3QuaTE4bi5jbGllbnQnLHZzZT0nRGVmYXVsdERhdGVUaW1lRm9ybWF0SW5mbycsd3NlPTIwNDgseHNlPXszOjEsNDoxLDM0OjEsMjA1OjF9LHlzZT0nY29tLmdvb2dsZS5nd3QuanNvbi5jbGllbnQnLHpzZT00MTk0MzAzLEFzZT0xMDQ4NTc1LEJzZT01MjQyODgsQ3NlPTQxOTQzMDQsRHNlPTE3NTkyMTg2MDQ0NDE2LEVzZT0xMDAwMDAwMDAwLEZzZT0tMTc1OTIxODYwNDQ0MTYsR3NlPSdqYXZhLmlvJyxIc2U9ezM6MSwxMDM6MSw5NzoxLDYzOjEsODA6MX0sSXNlPXszOjEsMjk0OjEsODA6MX0sSnNlPSdGb3IgaW5wdXQgc3RyaW5nOiAiJyxLc2U9SW5maW5pdHksTHNlPS1JbmZpbml0eSxNc2U9NDA5NixOc2U9ezM6MSw0OjEsNTc5OjF9LE9zZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQnLFBzZT02NTUzNixRc2U9NTUyOTYsUnNlPXsxMDg6MSwzOjEsNDoxfSxTc2U9MTAwMDAwLFRzZT0wLjMwMTAyOTk5NTY2Mzk4MTIsVXNlPTQyOTQ5NjcyOTUsVnNlPScwLjAnLFdzZT17NDM6MX0sWHNlPSdVbmFibGUgdG8gYWRkIGVsZW1lbnQgdG8gcXVldWUnLFlzZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTU6MSwxMzoxLDE2OjEsMTU6MSw1OToxfSxac2U9ezM6MSwyMDoxLDMxOjEsNTU6MSwxNjoxLDE1OjEsNTk6MX0sJHNlPXsyMDoxLDE2OjEsMTU6MX0sX3NlPXszOjEsNTE6MX0sYXRlPXsxODk6MX0sYnRlPXszOjEsNDoxLDkxOjF9LGN0ZT17MzoxLDQ6MSwyMDoxLDMxOjEsMTY6MSw1MDoxLDIyOjF9LGR0ZT0nZGVsZXRlJyxldGU9MS40OTAxMTYxMTkzODQ3NjU2RS04LGZ0ZT0xLjExMDIyMzAyNDYyNTE1NjVFLTE2LGd0ZT0xNTUyNTQ4NSxodGU9NS45NjA0NjQ0Nzc1MzkwNjI1RS04LGl0ZT0xNjc3NzIxNixqdGU9MTY3NzcyMTUsa3RlPScsIGxlbmd0aDogJyxsdGU9ezM6MSw0OjEsMjA6MSwzMToxLDU1OjEsMTY6MSwxNToxLDU5OjF9LG10ZT0nc3ViTWFwOiAnLG50ZT0nIGxlc3MgdGhhbiAnLG90ZT17MzoxLDM0OjEsMjM6MSwzMDU6MX0scHRlPSdqYXZhLnV0aWwuZnVuY3Rpb24nLHF0ZT0namF2YS51dGlsLmxvZ2dpbmcnLHJ0ZT17MzoxLDQ6MSw1OjEsODM1OjF9LHN0ZT0ndW5kZWZpbmVkJyx0dGU9J2phdmEudXRpbC5zdHJlYW0nLHV0ZT17NTE4OjEsNjcyOjF9LHZ0ZT0nZnJvbUluZGV4OiAnLHd0ZT0nID4gdG9JbmRleDogJyx4dGU9JywgdG9JbmRleDogJyx5dGU9J0luZGV4OiAnLHp0ZT0nLCBTaXplOiAnLEF0ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24nLEJ0ZT17NTE6MX0sQ3RlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uJyxEdGU9J1NjYW5saW5lL0V2ZW50SGFuZGxlcicsRXRlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5jb21wYWN0aW9uLm9uZWQnLEZ0ZT0nQ05vZGUgYmVsb25ncyB0byBhbm90aGVyIENHcm91cC4nLEd0ZT0nSVNwYWNpbmdzSGFuZGxlci8xJyxIdGU9J1RoZSAnLEl0ZT0nIGluc3RhbmNlIGhhcyBiZWVuIGZpbmlzaGVkIGFscmVhZHkuJyxKdGU9J1RoZSBkaXJlY3Rpb24gJyxLdGU9JyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDR3JhcGggaW5zdGFuY2UuJyxMdGU9J09uZURpbWVuc2lvbmFsQ29tcGFjdG9yJyxNdGU9J09uZURpbWVuc2lvbmFsQ29tcGFjdG9yL2xhbWJkYSQwJFR5cGUnLE50ZT0nUXVhZHJ1cGxldCcsT3RlPSdTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdG9yJyxQdGU9J1NjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvQ29uc3RyYWludHNTY2FubGluZUhhbmRsZXInLFF0ZT0nU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRvci9Db25zdHJhaW50c1NjYW5saW5lSGFuZGxlci9sYW1iZGEkMCRUeXBlJyxSdGU9J1NjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvVGltZXN0YW1wJyxTdGU9J1NjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvbGFtYmRhJDAkVHlwZScsVHRlPXsxNzc6MSw0ODoxfSxVdGU9J29yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5ldHdvcmtzaW1wbGV4JyxWdGU9ezE4MzoxLDM6MSw0OjF9LFd0ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmcnLFh0ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ubm9kZXNwYWNpbmcuY2VsbHN5c3RlbScsWXRlPSdDRU5URVInLFp0ZT17MjE1OjEsMzMyOjF9LCR0ZT17MzoxLDQ6MSw1OjEsNTg3OjF9LF90ZT0nTEVGVCcsYXVlPSdSSUdIVCcsYnVlPSdWZXJ0aWNhbCBhbGlnbm1lbnQgY2Fubm90IGJlIG51bGwnLGN1ZT0nQk9UVE9NJyxkdWU9J29yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLm5vZGVzcGFjaW5nLmludGVybmFsJyxldWU9J1VOREVGSU5FRCcsZnVlPTAuMDEsZ3VlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5ub2Rlc3BhY2luZy5pbnRlcm5hbC5hbGdvcml0aG0nLGh1ZT0nTGFiZWxQbGFjZXIvbGFtYmRhJDAkVHlwZScsaXVlPSdMYWJlbFBsYWNlci9sYW1iZGEkMSRUeXBlJyxqdWU9J3BvcnRSYXRpb09yUG9zaXRpb24nLGt1ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5jb21tb24ub3ZlcmxhcHMnLGx1ZT0nRE9XTicsbXVlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmNvbW1vbi5zcG9yZScsbnVlPXszOjEsNDoxLDU6MSwxOTg6MX0sb3VlPXszOjEsNjoxLDQ6MSw1OjEsOTk6MSwxMTQ6MX0scHVlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlJyxxdWU9J0NvbXBvbmVudHNQcm9jZXNzb3InLHJ1ZT0nQ29tcG9uZW50c1Byb2Nlc3Nvci8xJyxzdWU9J0Vsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZScsdHVlPXsyMjI6MX0sdXVlPSdvcmcuZWNsaXBzZS5lbGsuY29yZScsdnVlPSdvcmcuZWNsaXBzZS5lbGsuZ3JhcGgucHJvcGVydGllcycsd3VlPSdJUHJvcGVydHlIb2xkZXInLHh1ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5mb3JjZS5ncmFwaCcseXVlPSdDb21wb25lbnQgTGF5b3V0Jyx6dWU9J29yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2UubW9kZWwnLEF1ZT0nb3JnLmVjbGlwc2UuZWxrLmNvcmUuZGF0YScsQnVlPSdvcmcuZWNsaXBzZS5lbGsuZm9yY2UubW9kZWwnLEN1ZT0nb3JnLmVjbGlwc2UuZWxrLmZvcmNlLml0ZXJhdGlvbnMnLER1ZT0nb3JnLmVjbGlwc2UuZWxrLmZvcmNlLnJlcHVsc2l2ZVBvd2VyJyxFdWU9J29yZy5lY2xpcHNlLmVsay5mb3JjZS50ZW1wZXJhdHVyZScsRnVlPTAuMDAxLEd1ZT0nb3JnLmVjbGlwc2UuZWxrLmZvcmNlLnJlcHVsc2lvbicsSHVlPXsxNDY6MX0sSXVlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmZvcmNlLm9wdGlvbnMnLEp1ZT0xLjYwMDAwMDAyMzg0MTg1OCxLdWU9J29yZy5lY2xpcHNlLmVsay5mb3JjZScsTHVlPSdvcmcuZWNsaXBzZS5lbGsucHJpb3JpdHknLE11ZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubm9kZU5vZGUnLE51ZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUxhYmVsJyxPdWU9J29yZy5lY2xpcHNlLmVsay5hc3BlY3RSYXRpbycsUHVlPSdvcmcuZWNsaXBzZS5lbGsucmFuZG9tU2VlZCcsUXVlPSdvcmcuZWNsaXBzZS5lbGsuc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzJyxSdWU9J29yZy5lY2xpcHNlLmVsay5wYWRkaW5nJyxTdWU9J29yZy5lY2xpcHNlLmVsay5pbnRlcmFjdGl2ZScsVHVlPSdvcmcuZWNsaXBzZS5lbGsucG9ydENvbnN0cmFpbnRzJyxVdWU9J29yZy5lY2xpcHNlLmVsay5lZGdlTGFiZWxzLmlubGluZScsVnVlPSdvcmcuZWNsaXBzZS5lbGsub21pdE5vZGVNaWNyb0xheW91dCcsV3VlPSdvcmcuZWNsaXBzZS5lbGsubm9kZVNpemUuZml4ZWRHcmFwaFNpemUnLFh1ZT0nb3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLm9wdGlvbnMnLFl1ZT0nb3JnLmVjbGlwc2UuZWxrLm5vZGVTaXplLmNvbnN0cmFpbnRzJyxadWU9J29yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBsYWNlbWVudCcsJHVlPSdvcmcuZWNsaXBzZS5lbGsucG9ydExhYmVscy5wbGFjZW1lbnQnLF91ZT0nb3JnLmVjbGlwc2UuZWxrLnRvcGRvd25MYXlvdXQnLGF2ZT0nb3JnLmVjbGlwc2UuZWxrLnRvcGRvd24uc2NhbGVGYWN0b3InLGJ2ZT0nb3JnLmVjbGlwc2UuZWxrLnRvcGRvd24uaGllcmFyY2hpY2FsTm9kZVdpZHRoJyxjdmU9J29yZy5lY2xpcHNlLmVsay50b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVBc3BlY3RSYXRpbycsZHZlPSdvcmcuZWNsaXBzZS5lbGsudG9wZG93bi5ub2RlVHlwZScsZXZlPSdvcmlnaW4nLGZ2ZT0ncmFuZG9tJyxndmU9J2JvdW5kaW5nQm94LnVwTGVmdCcsaHZlPSdib3VuZGluZ0JveC5sb3dSaWdodCcsaXZlPSdvcmcuZWNsaXBzZS5lbGsuc3RyZXNzLmZpeGVkJyxqdmU9J29yZy5lY2xpcHNlLmVsay5zdHJlc3MuZGVzaXJlZEVkZ2VMZW5ndGgnLGt2ZT0nb3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5kaW1lbnNpb24nLGx2ZT0nb3JnLmVjbGlwc2UuZWxrLnN0cmVzcy5lcHNpbG9uJyxtdmU9J29yZy5lY2xpcHNlLmVsay5zdHJlc3MuaXRlcmF0aW9uTGltaXQnLG52ZT0nb3JnLmVjbGlwc2UuZWxrLnN0cmVzcycsb3ZlPSdFTEsgU3RyZXNzJyxwdmU9J29yZy5lY2xpcHNlLmVsay5ub2RlU2l6ZS5taW5pbXVtJyxxdmU9J29yZy5lY2xpcHNlLmVsay5hbGcuZm9yY2Uuc3RyZXNzJyxydmU9J0xheWVyZWQgbGF5b3V0JyxzdmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZCcsdHZlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuY29tcGFjdGlvbi5jb21wb25lbnRzJyx1dmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLm9uZWQnLHZ2ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBhY3Rpb24ub25lZC5hbGdzJyx3dmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wYWN0aW9uLnJlY3RodWxsJyx4dmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5jb21wb25lbnRzJyx5dmU9J05PTkUnLHp2ZT0nTU9ERUxfT1JERVInLEF2ZT17MzoxLDY6MSw0OjEsMTA6MSw1OjEsMTI1OjF9LEJ2ZT17MzoxLDY6MSw0OjEsNToxLDE0NToxLDk5OjEsMTE0OjF9LEN2ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmNvbXBvdW5kJyxEdmU9ezQ0OjF9LEV2ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmdyYXBoJyxGdmU9JyAtPiAnLEd2ZT0nTm90IHN1cHBvcnRlZCBieSBMR3JhcGgnLEh2ZT0nUG9ydCBzaWRlIGlzIHVuZGVmaW5lZCcsSXZlPXszOjEsNjoxLDQ6MSw1OjEsNDY5OjEsMTQ1OjEsOTk6MSwxMTQ6MX0sSnZlPXszOjEsNjoxLDQ6MSw1OjEsMTQ1OjEsMTk5OjEsMjA5OjEsOTk6MSwxMTQ6MX0sS3ZlPXszOjEsNjoxLDQ6MSw1OjEsMTQ1OjEsMTk4ODoxLDIwOToxLDk5OjEsMTE0OjF9LEx2ZT0nKFt7IlwnIFx0XHJcbicsTXZlPScpXX0iXCcgXHRcclxuJyxOdmU9J1RoZSBnaXZlbiBzdHJpbmcgY29udGFpbnMgcGFydHMgdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGFzIG51bWJlcnMuJyxPdmU9J29yZy5lY2xpcHNlLmVsay5jb3JlLm1hdGgnLFB2ZT17MzoxLDQ6MSwxMzk6MSwyMTM6MSw0MTE6MX0sUXZlPXszOjEsNDoxLDEwNzoxLDIxMzoxLDQxMToxfSxSdmU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5ncmFwaC50cmFuc2Zvcm0nLFN2ZT0nRWxrR3JhcGhJbXBvcnRlcicsVHZlPSdFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQxJFR5cGUnLFV2ZT0nRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMiRUeXBlJyxWdmU9J0Vsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDQkVHlwZScsV3ZlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlJyxYdmU9J05vZGUgbWFyZ2luIGNhbGN1bGF0aW9uJyxZdmU9J09ORV9TSURFRF9HUkVFRFlfU1dJVENIJyxadmU9J1RXT19TSURFRF9HUkVFRFlfU1dJVENIJywkdmU9J05vIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGxheW91dCBwcm9jZXNzb3IgJyxfdmU9J0ludGVybWVkaWF0ZVByb2Nlc3NvclN0cmF0ZWd5Jyxhd2U9Ik5vZGUgJyIsYndlPSdGSVJTVF9TRVBBUkFURScsY3dlPSdMQVNUX1NFUEFSQVRFJyxkd2U9J09kZCBwb3J0IHNpZGUgcHJvY2Vzc2luZycsZXdlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmNvbXBhY3Rpb24nLGZ3ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5ncmVlZHlzd2l0Y2gnLGd3ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnAzb3JkZXIuY291bnRpbmcnLGh3ZT17MjI5OjF9LGl3ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS5sb29wcycsandlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLmxvb3BzLm9yZGVyaW5nJyxrd2U9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5pbnRlcm1lZGlhdGUubG9vcHMucm91dGluZycsbHdlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQuaW50ZXJtZWRpYXRlLnByZXNlcnZlb3JkZXInLG13ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS53cmFwcGluZycsbndlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQub3B0aW9ucycsb3dlPSdJTlRFUkFDVElWRScscHdlPSdHUkVFRFknLHF3ZT0nREVQVEhfRklSU1QnLHJ3ZT0nRURHRV9MRU5HVEgnLHN3ZT0nU0VMRl9MT09QUycsdHdlPSdmaXJzdFRyeVdpdGhJbml0aWFsT3JkZXInLHV3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZGlyZWN0aW9uQ29uZ3J1ZW5jeScsdndlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5mZWVkYmFja0VkZ2VzJyx3d2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmludGVyYWN0aXZlUmVmZXJlbmNlUG9pbnQnLHh3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubWVyZ2VFZGdlcycseXdlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5tZXJnZUhpZXJhcmNoeUVkZ2VzJyx6d2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmFsbG93Tm9uRmxvd1BvcnRzVG9Td2l0Y2hTaWRlcycsQXdlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wb3J0U29ydGluZ1N0cmF0ZWd5JyxCd2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLnRob3JvdWdobmVzcycsQ3dlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC51bm5lY2Vzc2FyeUJlbmRwb2ludHMnLER3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZ2VuZXJhdGVQb3NpdGlvbkFuZExheWVySWRzJyxFd2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmN5Y2xlQnJlYWtpbmcuc3RyYXRlZ3knLEZ3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcuc3RyYXRlZ3knLEd3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJpbmcubGF5ZXJDb25zdHJhaW50JyxId2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLmxheWVyQ2hvaWNlQ29uc3RyYWludCcsSXdlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5sYXllcklkJyxKd2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyQm91bmRPbldpZHRoJyxLd2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm1pbldpZHRoLnVwcGVyTGF5ZXJFc3RpbWF0aW9uU2NhbGluZ0ZhY3RvcicsTHdlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5ub2RlUHJvbW90aW9uLnN0cmF0ZWd5JyxNd2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyaW5nLm5vZGVQcm9tb3Rpb24ubWF4SXRlcmF0aW9ucycsTndlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5sYXllcmluZy5jb2ZmbWFuR3JhaGFtLmxheWVyQm91bmQnLE93ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uc3RyYXRlZ3knLFB3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZm9yY2VOb2RlTW9kZWxPcmRlcicsUXdlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5oaWVyYXJjaGljYWxTd2VlcGluZXNzJyxSd2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnNlbWlJbnRlcmFjdGl2ZScsU3dlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jcm9zc2luZ01pbmltaXphdGlvbi5pbkxheWVyUHJlZE9mJyxUd2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLmluTGF5ZXJTdWNjT2YnLFV3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24ucG9zaXRpb25DaG9pY2VDb25zdHJhaW50JyxWd2U9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNyb3NzaW5nTWluaW1pemF0aW9uLnBvc2l0aW9uSWQnLFd3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoLmFjdGl2YXRpb25UaHJlc2hvbGQnLFh3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoLnR5cGUnLFl3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsLnR5cGUnLFp3ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5zdHJhdGVneScsJHdlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmZhdm9yU3RyYWlnaHRFZGdlcycsX3dlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5ub2RlUGxhY2VtZW50LmJrLmVkZ2VTdHJhaWdodGVuaW5nJyxheGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQuYmsuZml4ZWRBbGlnbm1lbnQnLGJ4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9kZVBsYWNlbWVudC5saW5lYXJTZWdtZW50cy5kZWZsZWN0aW9uRGFtcGVuaW5nJyxjeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgubm9kZUZsZXhpYmlsaXR5JyxkeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLm5vZGVQbGFjZW1lbnQubmV0d29ya1NpbXBsZXgubm9kZUZsZXhpYmlsaXR5LmRlZmF1bHQnLGV4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc2VsZkxvb3BEaXN0cmlidXRpb24nLGZ4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc2VsZkxvb3BPcmRlcmluZycsZ3hlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlUm91dGluZy5zcGxpbmVzLm1vZGUnLGh4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZVJvdXRpbmcuc3BsaW5lcy5zbG9wcHkubGF5ZXJTcGFjaW5nRmFjdG9yJyxpeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmVkZ2VSb3V0aW5nLnBvbHlsaW5lLnNsb3BlZEVkZ2Vab25lV2lkdGgnLGp4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5iYXNlVmFsdWUnLGt4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlTm9kZUJldHdlZW5MYXllcnMnLGx4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5lZGdlRWRnZUJldHdlZW5MYXllcnMnLG14ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuc3BhY2luZy5ub2RlTm9kZUJldHdlZW5MYXllcnMnLG54ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQucHJpb3JpdHkuZGlyZWN0aW9uJyxveGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLnByaW9yaXR5LnNob3J0bmVzcycscHhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5wcmlvcml0eS5zdHJhaWdodG5lc3MnLHF4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5jb25uZWN0ZWRDb21wb25lbnRzJyxyeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbXBhY3Rpb24ucG9zdENvbXBhY3Rpb24uc3RyYXRlZ3knLHN4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbi5jb25zdHJhaW50cycsdHhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5oaWdoRGVncmVlTm9kZXMudHJlYXRtZW50Jyx1eGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmhpZ2hEZWdyZWVOb2Rlcy50aHJlc2hvbGQnLHZ4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuaGlnaERlZ3JlZU5vZGVzLnRyZWVIZWlnaHQnLHd4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuc3RyYXRlZ3knLHh4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuYWRkaXRpb25hbEVkZ2VTcGFjaW5nJyx5eGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLmNvcnJlY3Rpb25GYWN0b3InLHp4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5zdHJhdGVneScsQXhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5jdXR0aW5nLmN1dHMnLEJ4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQud3JhcHBpbmcuY3V0dGluZy5tc2QuZnJlZWRvbScsQ3hlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5zdHJhdGVneScsRHhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy52YWxpZGlmeS5mb3JiaWRkZW5JbmRpY2VzJyxFeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlQ3V0cycsRnhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC53cmFwcGluZy5tdWx0aUVkZ2UuZGlzdGFuY2VQZW5hbHR5JyxHeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLndyYXBwaW5nLm11bHRpRWRnZS5pbXByb3ZlV3JhcHBlZEVkZ2VzJyxIeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyVW56aXBwaW5nLnN0cmF0ZWd5JyxJeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmxheWVyVW56aXBwaW5nLmxheWVyU3BsaXQnLEp4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubGF5ZXJVbnppcHBpbmcucmVzZXRPbkxvbmdFZGdlcycsS3hlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5lZGdlTGFiZWxzLnNpZGVTZWxlY3Rpb24nLEx4ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuZWRnZUxhYmVscy5jZW50ZXJMYWJlbFBsYWNlbWVudFN0cmF0ZWd5JyxNeGU9J29yZy5lY2xpcHNlLmVsay5sYXllcmVkLmNvbnNpZGVyTW9kZWxPcmRlci5zdHJhdGVneScsTnhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIucG9ydE1vZGVsT3JkZXInLE94ZT0nb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQuY29uc2lkZXJNb2RlbE9yZGVyLm5vTW9kZWxPcmRlcicsUHhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY29tcG9uZW50cycsUXhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIubG9uZ0VkZ2VTdHJhdGVneScsUnhlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyTm9kZUluZmx1ZW5jZScsU3hlPSdvcmcuZWNsaXBzZS5lbGsubGF5ZXJlZC5jb25zaWRlck1vZGVsT3JkZXIuY3Jvc3NpbmdDb3VudGVyUG9ydEluZmx1ZW5jZScsVHhlPSdsYXllcmluZycsVXhlPSdsYXllcmluZy5taW5XaWR0aCcsVnhlPSdsYXllcmluZy5ub2RlUHJvbW90aW9uJyxXeGU9J2Nyb3NzaW5nTWluaW1pemF0aW9uJyxYeGU9J29yZy5lY2xpcHNlLmVsay5oaWVyYXJjaHlIYW5kbGluZycsWXhlPSdjcm9zc2luZ01pbmltaXphdGlvbi5ncmVlZHlTd2l0Y2gnLFp4ZT0nbm9kZVBsYWNlbWVudCcsJHhlPSdub2RlUGxhY2VtZW50LmJrJyxfeGU9J2VkZ2VSb3V0aW5nJyxheWU9J29yZy5lY2xpcHNlLmVsay5lZGdlUm91dGluZycsYnllPSdzcGFjaW5nJyxjeWU9J3ByaW9yaXR5JyxkeWU9J2NvbXBhY3Rpb24nLGV5ZT0nY29tcGFjdGlvbi5wb3N0Q29tcGFjdGlvbicsZnllPSdTcGVjaWZpZXMgd2hldGhlciBhbmQgaG93IHBvc3QtcHJvY2VzcyBjb21wYWN0aW9uIGlzIGFwcGxpZWQuJyxneWU9J2hpZ2hEZWdyZWVOb2RlcycsaHllPSd3cmFwcGluZycsaXllPSd3cmFwcGluZy5jdXR0aW5nJyxqeWU9J3dyYXBwaW5nLnZhbGlkaWZ5JyxreWU9J3dyYXBwaW5nLm11bHRpRWRnZScsbHllPSdsYXllclVuemlwcGluZycsbXllPSdlZGdlTGFiZWxzJyxueWU9J2NvbnNpZGVyTW9kZWxPcmRlcicsb3llPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5jb21tZW50Q29tbWVudCcscHllPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5jb21tZW50Tm9kZScscXllPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5jb21wb25lbnRDb21wb25lbnQnLHJ5ZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZUVkZ2UnLHN5ZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuZWRnZU5vZGUnLHR5ZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcubGFiZWxMYWJlbCcsdXllPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5sYWJlbFBvcnRIb3Jpem9udGFsJyx2eWU9J29yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsUG9ydFZlcnRpY2FsJyx3eWU9J29yZy5lY2xpcHNlLmVsay5zcGFjaW5nLmxhYmVsTm9kZScseHllPSdvcmcuZWNsaXBzZS5lbGsuc3BhY2luZy5ub2RlU2VsZkxvb3AnLHl5ZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcucG9ydFBvcnQnLHp5ZT0nb3JnLmVjbGlwc2UuZWxrLnNwYWNpbmcuaW5kaXZpZHVhbCcsQXllPSdvcmcuZWNsaXBzZS5lbGsucG9ydC5ib3JkZXJPZmZzZXQnLEJ5ZT0nb3JnLmVjbGlwc2UuZWxrLm5vTGF5b3V0JyxDeWU9J29yZy5lY2xpcHNlLmVsay5wb3J0LnNpZGUnLER5ZT0nb3JnLmVjbGlwc2UuZWxrLmRlYnVnTW9kZScsRXllPSdvcmcuZWNsaXBzZS5lbGsuYWxpZ25tZW50JyxGeWU9J29yZy5lY2xpcHNlLmVsay5pbnNpZGVTZWxmTG9vcHMuYWN0aXZhdGUnLEd5ZT0nb3JnLmVjbGlwc2UuZWxrLmluc2lkZVNlbGZMb29wcy55bycsSHllPSdvcmcuZWNsaXBzZS5lbGsuZGlyZWN0aW9uJyxJeWU9J29yZy5lY2xpcHNlLmVsay5ub2RlTGFiZWxzLnBhZGRpbmcnLEp5ZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMubmV4dFRvUG9ydElmUG9zc2libGUnLEt5ZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRMYWJlbHMudHJlYXRBc0dyb3VwJyxMeWU9J29yZy5lY2xpcHNlLmVsay5wb3J0QWxpZ25tZW50LmRlZmF1bHQnLE15ZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQubm9ydGgnLE55ZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQuc291dGgnLE95ZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnRBbGlnbm1lbnQud2VzdCcsUHllPSdvcmcuZWNsaXBzZS5lbGsucG9ydEFsaWdubWVudC5lYXN0JyxReWU9J29yZy5lY2xpcHNlLmVsay5jb250ZW50QWxpZ25tZW50JyxSeWU9J29yZy5lY2xpcHNlLmVsay5qdW5jdGlvblBvaW50cycsU3llPSdvcmcuZWNsaXBzZS5lbGsuZWRnZS50aGlja25lc3MnLFR5ZT0nb3JnLmVjbGlwc2UuZWxrLmVkZ2VMYWJlbHMucGxhY2VtZW50JyxVeWU9J29yZy5lY2xpcHNlLmVsay5wb3J0LmluZGV4JyxWeWU9J29yZy5lY2xpcHNlLmVsay5jb21tZW50Qm94JyxXeWU9J29yZy5lY2xpcHNlLmVsay5oeXBlcm5vZGUnLFh5ZT0nb3JnLmVjbGlwc2UuZWxrLnBvcnQuYW5jaG9yJyxZeWU9J29yZy5lY2xpcHNlLmVsay5wYXJ0aXRpb25pbmcuYWN0aXZhdGUnLFp5ZT0nb3JnLmVjbGlwc2UuZWxrLnBhcnRpdGlvbmluZy5wYXJ0aXRpb24nLCR5ZT0nb3JnLmVjbGlwc2UuZWxrLnBvc2l0aW9uJyxfeWU9J29yZy5lY2xpcHNlLmVsay5tYXJnaW5zJyxhemU9J29yZy5lY2xpcHNlLmVsay5zcGFjaW5nLnBvcnRzU3Vycm91bmRpbmcnLGJ6ZT0nb3JnLmVjbGlwc2UuZWxrLmludGVyYWN0aXZlTGF5b3V0JyxjemU9J29yZy5lY2xpcHNlLmVsay5jb3JlLnV0aWwnLGR6ZT17MzoxLDQ6MSw1OjEsNTg1OjF9LGV6ZT0nTkVUV09SS19TSU1QTEVYJyxmemU9J1NJTVBMRScsZ3plPXsxMDY6MSw0NDoxfSxoemU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wMWN5Y2xlcycsaXplPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDJsYXllcnMnLGp6ZT17NDAyOjEsMjI5OjF9LGt6ZT17ODI1OjEsMzoxLDQ6MX0sbHplPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDNvcmRlcicsbXplPTEuNzk3NjkzMTM0ODYyMzE1N0UzMDgsbnplPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDRub2Rlcycsb3plPXszOjEsNDoxLDU6MSw4MzM6MX0scHplPTEuMEUtNSxxemU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNG5vZGVzLmJrJyxyemU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzJyxzemU9J29yZy5lY2xpcHNlLmVsay5hbGcubGF5ZXJlZC5wNWVkZ2VzLm9ydGhvZ29uYWwnLHR6ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLnA1ZWRnZXMub3J0aG9nb25hbC5kaXJlY3Rpb24nLHV6ZT0xLjBFLTYsdnplPSdvcmcuZWNsaXBzZS5lbGsuYWxnLmxheWVyZWQucDVlZGdlcy5zcGxpbmVzJyx3emU9MC4wOTk5OTk5OTk5OTk5OTk5OCx4emU9MS4wRS04LHl6ZT00LjcxMjM4ODk4MDM4NDY5LHp6ZT0xLjU3MDc5NjMyNjc5NDg5NjYsQXplPTMuMTQxNTkyNjUzNTg5NzkzLEJ6ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUnLEN6ZT0wLjEwMDAwMDAwMTQ5MDExNjEyLER6ZT0nU1VQRVJfUk9PVCcsRXplPSdvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5ncmFwaCcsRnplPS0xLjc5NzY5MzEzNDg2MjMxNTdFMzA4LEd6ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUuaW50ZXJtZWRpYXRlJyxIemU9J1Byb2Nlc3NvciBjb21wdXRlIGZhbm91dCcsSXplPXszOjEsNjoxLDQ6MSw1OjEsNTE5OjEsOTk6MSwxMTQ6MX0sSnplPSdTZXQgbmVpZ2hib3JzIGluIGxldmVsJyxLemU9J29yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLm9wdGlvbnMnLEx6ZT0nREVTQ0VOREFOVFMnLE16ZT0nb3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5jb21wYWN0aW9uJyxOemU9J29yZy5lY2xpcHNlLmVsay5tcnRyZWUuZWRnZUVuZFRleHR1cmVMZW5ndGgnLE96ZT0nb3JnLmVjbGlwc2UuZWxrLm1ydHJlZS50cmVlTGV2ZWwnLFB6ZT0nb3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5wb3NpdGlvbkNvbnN0cmFpbnQnLFF6ZT0nb3JnLmVjbGlwc2UuZWxrLm1ydHJlZS53ZWlnaHRpbmcnLFJ6ZT0nb3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5lZGdlUm91dGluZ01vZGUnLFN6ZT0nb3JnLmVjbGlwc2UuZWxrLm1ydHJlZS5zZWFyY2hPcmRlcicsVHplPSdQb3NpdGlvbiBDb25zdHJhaW50JyxVemU9J29yZy5lY2xpcHNlLmVsay5tcnRyZWUnLFZ6ZT0nb3JnLmVjbGlwc2UuZWxrLnRyZWUnLFd6ZT0nUHJvY2Vzc29yIGFycmFuZ2UgbGV2ZWwnLFh6ZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5tcnRyZWUucDJvcmRlcicsWXplPSdvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5wNHJvdXRlJyxaemU9J29yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsJywkemU9Ni4yODMxODUzMDcxNzk1ODYsX3plPSdCZWZvcmUnLGFBZT00LjlFLTMyNCxiQWU9J0FmdGVyJyxjQWU9J29yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZScsZEFlPSdDT01QQUNUSU9OJyxlQWU9J29yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5jb21wYWN0aW9uJyxmQWU9ezM6MSw0OjEsNToxLDk5OjF9LGdBZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlLm9wdGltaXphdGlvbicsaEFlPSdObyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRoZSBsYXlvdXQgb3B0aW9uICcsaUFlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5vcHRpb25zJyxqQWU9J0NvbXBhY3Rpb25TdHJhdGVneScsa0FlPSdvcmcuZWNsaXBzZS5lbGsucmFkaWFsLmNlbnRlck9uUm9vdCcsbEFlPSdvcmcuZWNsaXBzZS5lbGsucmFkaWFsLm9yZGVySWQnLG1BZT0nb3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5yYWRpdXMnLG5BZT0nb3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5yb3RhdGUnLG9BZT0nb3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5jb21wYWN0b3InLHBBZT0nb3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5jb21wYWN0aW9uU3RlcFNpemUnLHFBZT0nb3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5zb3J0ZXInLHJBZT0nb3JnLmVjbGlwc2UuZWxrLnJhZGlhbC53ZWRnZUNyaXRlcmlhJyxzQWU9J29yZy5lY2xpcHNlLmVsay5yYWRpYWwub3B0aW1pemF0aW9uQ3JpdGVyaWEnLHRBZT0nb3JnLmVjbGlwc2UuZWxrLnJhZGlhbC5yb3RhdGlvbi50YXJnZXRBbmdsZScsdUFlPSdvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJvdGF0aW9uLmNvbXB1dGVBZGRpdGlvbmFsV2VkZ2VTcGFjZScsdkFlPSdvcmcuZWNsaXBzZS5lbGsucmFkaWFsLnJvdGF0aW9uLm91dGdvaW5nRWRnZUFuZ2xlcycsd0FlPSdDb21wYWN0aW9uJyx4QWU9J3JvdGF0aW9uJyx5QWU9J29yZy5lY2xpcHNlLmVsay5yYWRpYWwnLHpBZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwucDFwb3NpdGlvbi53ZWRnZScsQUFlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5zb3J0aW5nJyxCQWU9NS40OTc3ODcxNDM3ODIxMzgsQ0FlPTMuOTI2OTkwODE2OTg3MjQxNCxEQWU9Mi4zNTYxOTQ0OTAxOTIzNDUsRUFlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nJyxGQWU9J29yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcuaW50ZXJtZWRpYXRlJyxHQWU9J29yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcub3B0aW9ucycsSEFlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcudHJ5Ym94JyxJQWU9J29yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy5jdXJyZW50UG9zaXRpb24nLEpBZT0nb3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLmRlc2lyZWRQb3NpdGlvbicsS0FlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcuaW5OZXdSb3cnLExBZT0nb3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLm9yZGVyQnlTaXplJyxNQWU9J29yZy5lY2xpcHNlLmVsay5yZWN0cGFja2luZy53aWR0aEFwcHJveGltYXRpb24uc3RyYXRlZ3knLE5BZT0nb3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLndpZHRoQXBwcm94aW1hdGlvbi50YXJnZXRXaWR0aCcsT0FlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcud2lkdGhBcHByb3hpbWF0aW9uLm9wdGltaXphdGlvbkdvYWwnLFBBZT0nb3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLndpZHRoQXBwcm94aW1hdGlvbi5sYXN0UGxhY2VTaGlmdCcsUUFlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcucGFja2luZy5zdHJhdGVneScsUkFlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcucGFja2luZy5jb21wYWN0aW9uLnJvd0hlaWdodFJlZXZhbHVhdGlvbicsU0FlPSdvcmcuZWNsaXBzZS5lbGsucmVjdHBhY2tpbmcucGFja2luZy5jb21wYWN0aW9uLml0ZXJhdGlvbnMnLFRBZT0nb3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nLndoaXRlU3BhY2VFbGltaW5hdGlvbi5zdHJhdGVneScsVUFlPSd3aWR0aEFwcHJveGltYXRpb24nLFZBZT0nQ29tcGFjdGlvbiBTdHJhdGVneScsV0FlPSdwYWNraW5nLmNvbXBhY3Rpb24nLFhBZT0nb3JnLmVjbGlwc2UuZWxrLnJlY3RwYWNraW5nJyxZQWU9J29yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcucDF3aWR0aGFwcHJveGltYXRpb24nLFpBZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5yZWN0cGFja2luZy5wMnBhY2tpbmcnLCRBZT0nTm8gQ29tcGFjdGlvbicsX0FlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnJlY3RwYWNraW5nLnAzd2hpdGVzcGFjZWVsaW1pbmF0aW9uJyxhQmU9J29yZy5lY2xpcHNlLmVsay5hbGcucmVjdHBhY2tpbmcudXRpbCcsYkJlPSdObyBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yICcsY0JlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlJyxkQmU9J29yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUub3B0aW9ucycsZUJlPSdvcmcuZWNsaXBzZS5lbGsuc3BvcmVDb21wYWN0aW9uJyxmQmU9J29yZy5lY2xpcHNlLmVsay51bmRlcmx5aW5nTGF5b3V0QWxnb3JpdGhtJyxnQmU9J29yZy5lY2xpcHNlLmVsay5wcm9jZXNzaW5nT3JkZXIudHJlZUNvbnN0cnVjdGlvbicsaEJlPSdvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnNwYW5uaW5nVHJlZUNvc3RGdW5jdGlvbicsaUJlPSdvcmcuZWNsaXBzZS5lbGsucHJvY2Vzc2luZ09yZGVyLnByZWZlcnJlZFJvb3QnLGpCZT0nb3JnLmVjbGlwc2UuZWxrLnByb2Nlc3NpbmdPcmRlci5yb290U2VsZWN0aW9uJyxrQmU9J29yZy5lY2xpcHNlLmVsay5zdHJ1Y3R1cmUuc3RydWN0dXJlRXh0cmFjdGlvblN0cmF0ZWd5JyxsQmU9J29yZy5lY2xpcHNlLmVsay5jb21wYWN0aW9uLmNvbXBhY3Rpb25TdHJhdGVneScsbUJlPSdvcmcuZWNsaXBzZS5lbGsuY29tcGFjdGlvbi5vcnRob2dvbmFsJyxuQmU9J29yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5tYXhJdGVyYXRpb25zJyxvQmU9J29yZy5lY2xpcHNlLmVsay5vdmVybGFwUmVtb3ZhbC5ydW5TY2FubGluZScscEJlPSdwcm9jZXNzaW5nT3JkZXInLHFCZT0nb3ZlcmxhcFJlbW92YWwnLHJCZT0nb3JnLmVjbGlwc2UuZWxrLnNwb3JlT3ZlcmxhcCcsc0JlPSdvcmcuZWNsaXBzZS5lbGsuYWxnLnNwb3JlLnAxc3RydWN0dXJlJyx0QmU9J29yZy5lY2xpcHNlLmVsay5hbGcuc3BvcmUucDJwcm9jZXNzaW5nb3JkZXInLHVCZT0nb3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5wM2V4ZWN1dGlvbicsdkJlPSdUb3Bkb3duIExheW91dCcsd0JlPSdJbnZhbGlkIGluZGV4OiAnLHhCZT0nb3JnLmVjbGlwc2UuZWxrLmNvcmUuYWxnJyx5QmU9ezMzNzoxfSx6QmU9ezI5MzoxfSxBQmU9J01ha2Ugc3VyZSBpdHMgdHlwZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlICcsQkJlPScgdXRpbGl0eSBjbGFzcy4nLENCZT0ndHJ1ZScsREJlPSdmYWxzZScsRUJlPSJDb3VsZG4ndCBjbG9uZSBwcm9wZXJ0eSAnIixGQmU9MC4wNSxHQmU9J29yZy5lY2xpcHNlLmVsay5jb3JlLm9wdGlvbnMnLEhCZT0xLjI5OTk5OTk1MjMxNjI4NDIsSUJlPSdvcmcuZWNsaXBzZS5lbGsuYm94JyxKQmU9J29yZy5lY2xpcHNlLmVsay5leHBhbmROb2RlcycsS0JlPSdvcmcuZWNsaXBzZS5lbGsuYm94LnBhY2tpbmdNb2RlJyxMQmU9J29yZy5lY2xpcHNlLmVsay5hbGdvcml0aG0nLE1CZT0nb3JnLmVjbGlwc2UuZWxrLnJlc29sdmVkQWxnb3JpdGhtJyxOQmU9J29yZy5lY2xpcHNlLmVsay5iZW5kUG9pbnRzJyxPQmU9J29yZy5lY2xpcHNlLmVsay5sYWJlbE1hbmFnZXInLFBCZT0nb3JnLmVjbGlwc2UuZWxrLnNvZnR3cmFwcGluZ0Z1enppbmVzcycsUUJlPSdvcmcuZWNsaXBzZS5lbGsuc2NhbGVGYWN0b3InLFJCZT0nb3JnLmVjbGlwc2UuZWxrLmNoaWxkQXJlYVdpZHRoJyxTQmU9J29yZy5lY2xpcHNlLmVsay5jaGlsZEFyZWFIZWlnaHQnLFRCZT0nb3JnLmVjbGlwc2UuZWxrLmFuaW1hdGUnLFVCZT0nb3JnLmVjbGlwc2UuZWxrLmFuaW1UaW1lRmFjdG9yJyxWQmU9J29yZy5lY2xpcHNlLmVsay5sYXlvdXRBbmNlc3RvcnMnLFdCZT0nb3JnLmVjbGlwc2UuZWxrLm1heEFuaW1UaW1lJyxYQmU9J29yZy5lY2xpcHNlLmVsay5taW5BbmltVGltZScsWUJlPSdvcmcuZWNsaXBzZS5lbGsucHJvZ3Jlc3NCYXInLFpCZT0nb3JnLmVjbGlwc2UuZWxrLnZhbGlkYXRlR3JhcGgnLCRCZT0nb3JnLmVjbGlwc2UuZWxrLnZhbGlkYXRlT3B0aW9ucycsX0JlPSdvcmcuZWNsaXBzZS5lbGsuem9vbVRvRml0JyxhQ2U9J29yZy5lY2xpcHNlLmVsay5qc29uLnNoYXBlQ29vcmRzJyxiQ2U9J29yZy5lY2xpcHNlLmVsay5qc29uLmVkZ2VDb29yZHMnLGNDZT0nb3JnLmVjbGlwc2UuZWxrLmZvbnQubmFtZScsZENlPSdvcmcuZWNsaXBzZS5lbGsuZm9udC5zaXplJyxlQ2U9J29yZy5lY2xpcHNlLmVsay50b3Bkb3duLnNpemVBcHByb3hpbWF0b3InLGZDZT0nb3JnLmVjbGlwc2UuZWxrLnRvcGRvd24uc2NhbGVDYXAnLGdDZT0nb3JnLmVjbGlwc2UuZWxrLmVkZ2UudHlwZScsaENlPSdwYXJ0aXRpb25pbmcnLGlDZT0nbm9kZUxhYmVscycsakNlPSdwb3J0QWxpZ25tZW50JyxrQ2U9J25vZGVTaXplJyxsQ2U9J3BvcnQnLG1DZT0ncG9ydExhYmVscycsbkNlPSd0b3Bkb3duJyxvQ2U9J2luc2lkZVNlbGZMb29wcycscENlPSdJTkhFUklUJyxxQ2U9J29yZy5lY2xpcHNlLmVsay5maXhlZCcsckNlPSdvcmcuZWNsaXBzZS5lbGsucmFuZG9tJyxzQ2U9ezM6MSwzNDoxLDIzOjEsMzQzOjF9LHRDZT0ncG9ydCBtdXN0IGhhdmUgYSBwYXJlbnQgbm9kZSB0byBjYWxjdWxhdGUgdGhlIHBvcnQgc2lkZScsdUNlPSdUaGUgZWRnZSBuZWVkcyB0byBoYXZlIGV4YWN0bHkgb25lIGVkZ2Ugc2VjdGlvbi4gRm91bmQ6ICcsdkNlPSdvcmcuZWNsaXBzZS5lbGsuY29yZS51dGlsLmFkYXB0ZXJzJyx3Q2U9J29yZy5lY2xpcHNlLmVtZi5lY29yZScseENlPSdvcmcuZWNsaXBzZS5lbGsuZ3JhcGgnLHlDZT0nRU1hcFByb3BlcnR5SG9sZGVyJyx6Q2U9J0Vsa0JlbmRQb2ludCcsQUNlPSdFbGtHcmFwaEVsZW1lbnQnLEJDZT0nRWxrQ29ubmVjdGFibGVTaGFwZScsQ0NlPSdFbGtFZGdlJyxEQ2U9J0Vsa0VkZ2VTZWN0aW9uJyxFQ2U9J0VNb2RlbEVsZW1lbnQnLEZDZT0nRU5hbWVkRWxlbWVudCcsR0NlPSdFbGtMYWJlbCcsSENlPSdFbGtOb2RlJyxJQ2U9J0Vsa1BvcnQnLEpDZT17OTM6MSw5MjoxfSxLQ2U9J29yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwnLExDZT0iVGhlIGZlYXR1cmUgJyIsTUNlPSInIGlzIG5vdCBhIHZhbGlkIGNoYW5nZWFibGUgZmVhdHVyZSIsTkNlPSdFeHBlY3RpbmcgbnVsbCcsT0NlPSInIGlzIG5vdCBhIHZhbGlkIGZlYXR1cmUiLFBDZT0nVGhlIGZlYXR1cmUgSUQnLFFDZT0nIGlzIG5vdCBhIHZhbGlkIGZlYXR1cmUgSUQnLFJDZT0zMjc2OCxTQ2U9ezEwOToxLDkzOjEsOTI6MSw1NzoxLDUyOjEsOTg6MX0sVENlPSdvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbCcsVUNlPSdvcmcuZWNsaXBzZS5lbGsuZ3JhcGguaW1wbCcsVkNlPSdSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICcsV0NlPSJUaGUgZGF0YXR5cGUgJyIsWENlPSInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiLFlDZT0iVGhlIHZhbHVlICciLFpDZT17MTk1OjEsMzoxLDQ6MX0sJENlPSJUaGUgY2xhc3MgJyIsX0NlPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2Vsay9FbGtHcmFwaCcsYURlPSdwcm9wZXJ0eScsYkRlPSd2YWx1ZScsY0RlPSdzb3VyY2UnLGREZT0ncHJvcGVydGllcycsZURlPSdpZGVudGlmaWVyJyxmRGU9J2hlaWdodCcsZ0RlPSd3aWR0aCcsaERlPSdwYXJlbnQnLGlEZT0ndGV4dCcsakRlPSdjaGlsZHJlbicsa0RlPSdoaWVyYXJjaGljYWwnLGxEZT0nc291cmNlcycsbURlPSd0YXJnZXRzJyxuRGU9J3NlY3Rpb25zJyxvRGU9J2JlbmRQb2ludHMnLHBEZT0nb3V0Z29pbmdTaGFwZScscURlPSdpbmNvbWluZ1NoYXBlJyxyRGU9J291dGdvaW5nU2VjdGlvbnMnLHNEZT0naW5jb21pbmdTZWN0aW9ucycsdERlPSdvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwnLHVEZT0nU2V2ZXJlIGltcGxlbWVudGF0aW9uIGVycm9yIGluIHRoZSBKc29uIHRvIEVsa0dyYXBoIGltcG9ydGVyLicsdkRlPSdpZCcsd0RlPSdvcmcuZWNsaXBzZS5lbGsuZ3JhcGguanNvbicseERlPSdVbmhhbmRsZWQgcGFyYW1ldGVyIHR5cGVzOiAnLHlEZT0nc3RhcnRQb2ludCcsekRlPSJBbiBlZGdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc291cmNlIGFuZCBvbmUgdGFyZ2V0IChlZGdlIGlkOiAnIixBRGU9IicpLiIsQkRlPSdSZWZlcmVuY2VkIGVkZ2Ugc2VjdGlvbiBkb2VzIG5vdCBleGlzdDogJyxDRGU9IiAoZWRnZSBpZDogJyIsRERlPSd0YXJnZXQnLEVEZT0nc291cmNlUG9pbnQnLEZEZT0ndGFyZ2V0UG9pbnQnLEdEZT0nZ3JvdXAnLEhEZT0nbmFtZScsSURlPSdjb25uZWN0YWJsZVNoYXBlIGNhbm5vdCBiZSBudWxsJyxKRGU9J2VkZ2UgY2Fubm90IGJlIG51bGwnLEtEZT0iUGFzc2VkIGVkZ2UgaXMgbm90ICdzaW1wbGUnLiIsTERlPSdvcmcuZWNsaXBzZS5lbGsuZ3JhcGgudXRpbCcsTURlPSJUaGUgJ25vIGR1cGxpY2F0ZXMnIGNvbnN0cmFpbnQgaXMgdmlvbGF0ZWQiLE5EZT0ndGFyZ2V0SW5kZXg9JyxPRGU9Jywgc2l6ZT0nLFBEZT0nc291cmNlSW5kZXg9JyxRRGU9ezM6MSw0OjEsMjA6MSwzMToxLDU1OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjF9LFJEZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTU6MSwxNjoxLDQ5OjEsMTU6MSw1OToxLDcwOjEsNjY6MSw2MToxLDU4MDoxfSxTRGU9J2xvZ2dpbmcnLFREZT0nbWVhc3VyZUV4ZWN1dGlvblRpbWUnLFVEZT0ncGFyc2VyLnBhcnNlLjEnLFZEZT0ncGFyc2VyLnBhcnNlLjInLFdEZT0ncGFyc2VyLm5leHQuMScsWERlPSdwYXJzZXIubmV4dC4yJyxZRGU9J3BhcnNlci5uZXh0LjMnLFpEZT0ncGFyc2VyLm5leHQuNCcsJERlPSdwYXJzZXIuZmFjdG9yLjEnLF9EZT0ncGFyc2VyLmZhY3Rvci4yJyxhRWU9J3BhcnNlci5mYWN0b3IuMycsYkVlPSdwYXJzZXIuZmFjdG9yLjQnLGNFZT0ncGFyc2VyLmZhY3Rvci41JyxkRWU9J3BhcnNlci5mYWN0b3IuNicsZUVlPSdwYXJzZXIuYXRvbS4xJyxmRWU9J3BhcnNlci5hdG9tLjInLGdFZT0ncGFyc2VyLmF0b20uMycsaEVlPSdwYXJzZXIuYXRvbS40JyxpRWU9J3BhcnNlci5hdG9tLjUnLGpFZT0ncGFyc2VyLmNjLjEnLGtFZT0ncGFyc2VyLmNjLjInLGxFZT0ncGFyc2VyLmNjLjMnLG1FZT0ncGFyc2VyLmNjLjUnLG5FZT0ncGFyc2VyLmNjLjYnLG9FZT0ncGFyc2VyLmNjLjcnLHBFZT0ncGFyc2VyLmNjLjgnLHFFZT0ncGFyc2VyLm9wZS4xJyxyRWU9J3BhcnNlci5vcGUuMicsc0VlPSdwYXJzZXIub3BlLjMnLHRFZT0ncGFyc2VyLmRlc2NhcGUuMScsdUVlPSdwYXJzZXIuZGVzY2FwZS4yJyx2RWU9J3BhcnNlci5kZXNjYXBlLjMnLHdFZT0ncGFyc2VyLmRlc2NhcGUuNCcseEVlPSdwYXJzZXIuZGVzY2FwZS41Jyx5RWU9J3BhcnNlci5wcm9jZXNzLjEnLHpFZT0ncGFyc2VyLnF1YW50aWZpZXIuMScsQUVlPSdwYXJzZXIucXVhbnRpZmllci4yJyxCRWU9J3BhcnNlci5xdWFudGlmaWVyLjMnLENFZT0ncGFyc2VyLnF1YW50aWZpZXIuNCcsREVlPSdwYXJzZXIucXVhbnRpZmllci41JyxFRWU9J29yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5JyxGRWU9ezQxMjoxLDY3MToxfSxHRWU9ezM6MSw0OjEsMjA6MSwzMToxLDU1OjEsMTY6MSwxNToxLDcwOjEsNjE6MX0sSEVlPXszNzA6MSwxNTA6MX0sSUVlPSdpbmRleD0nLEpFZT17MzoxLDQ6MSw1OjEsMTI4OjF9LEtFZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTU6MSwxNjoxLDE1OjEsNTk6MSw3MDoxLDYxOjF9LExFZT17MzoxLDY6MSw0OjEsNToxLDE5ODoxfSxNRWU9ezM6MSw0OjEsNToxLDE3NDoxLDM3MToxfSxORWU9MTAyNCxPRWU9JzsvPzpAJj0rJCwnLFBFZT0naW52YWxpZCBhdXRob3JpdHk6ICcsUUVlPSdFQW5ub3RhdGlvbicsUkVlPSdFVHlwZWRFbGVtZW50JyxTRWU9J0VTdHJ1Y3R1cmFsRmVhdHVyZScsVEVlPSdFQXR0cmlidXRlJyxVRWU9J0VDbGFzc2lmaWVyJyxWRWU9J0VFbnVtTGl0ZXJhbCcsV0VlPSdFR2VuZXJpY1R5cGUnLFhFZT0nRU9wZXJhdGlvbicsWUVlPSdFUGFyYW1ldGVyJyxaRWU9J0VSZWZlcmVuY2UnLCRFZT0nRVR5cGVQYXJhbWV0ZXInLF9FZT0nb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwnLGFGZT17NzY6MX0sYkZlPXszOjEsMjA6MSwxNjoxLDE1OjEsNjE6MSw1ODE6MSw3NjoxLDcxOjEsOTY6MX0sY0ZlPSdvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5GZWF0dXJlTWFwJEVudHJ5JyxkRmU9ODE5MixlRmU9J2J5dGUnLGZGZT0nY2hhcicsZ0ZlPSdkb3VibGUnLGhGZT0nZmxvYXQnLGlGZT0naW50JyxqRmU9J2xvbmcnLGtGZT0nc2hvcnQnLGxGZT0namF2YS5sYW5nLk9iamVjdCcsbUZlPXszOjEsNDoxLDU6MSwyNTM6MX0sbkZlPXszOjEsNDoxLDU6MSw2NzM6MX0sb0ZlPXszOjEsNDoxLDIwOjEsMzE6MSw1NToxLDE2OjEsMTU6MSw1OToxLDcwOjEsNjY6MSw2MToxLDcxOjF9LHBGZT17MzoxLDQ6MSwyMDoxLDMxOjEsNTU6MSwxNjoxLDE1OjEsNTk6MSw3MDoxLDY2OjEsNjE6MSw3NjoxLDcxOjEsOTY6MX0scUZlPSdtaXhlZCcsckZlPSdodHRwOi8vL29yZy9lY2xpcHNlL2VtZi9lY29yZS91dGlsL0V4dGVuZGVkTWV0YURhdGEnLHNGZT0na2luZCcsdEZlPXszOjEsNDoxLDU6MSw2NzQ6MX0sdUZlPXszOjEsNDoxLDIwOjEsMzE6MSw1NToxLDE2OjEsMTU6MSw3MDoxLDYxOjEsNzY6MSw3MToxLDk2OjF9LHZGZT17MjA6MSwzMToxLDU1OjEsMTY6MSwxNToxLDYxOjEsNzE6MX0sd0ZlPXs0OToxLDEyNzoxLDI4NDoxfSx4RmU9ezc0OjEsMzM5OjF9LHlGZT0iVGhlIHZhbHVlIG9mIHR5cGUgJyIsekZlPSInIG11c3QgYmUgb2YgdHlwZSAnIixBRmU9MTI5MSxCRmU9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUnLENGZT0tMzI3NjgsREZlPSdjb25zdHJhaW50cycsRUZlPSdiYXNlVHlwZScsRkZlPSdnZXRFU3RydWN0dXJhbEZlYXR1cmUnLEdGZT0nZ2V0RmVhdHVyZUlEJyxIRmU9J2ZlYXR1cmUnLElGZT0nZ2V0T3BlcmF0aW9uSUQnLEpGZT0nb3BlcmF0aW9uJyxLRmU9J2RlZmF1bHRWYWx1ZScsTEZlPSdlVHlwZVBhcmFtZXRlcnMnLE1GZT0naXNJbnN0YW5jZScsTkZlPSdnZXRFRW51bUxpdGVyYWwnLE9GZT0nZUNvbnRhaW5pbmdDbGFzcycsUEZlPXs1ODoxfSxRRmU9ezM6MSw0OjEsNToxLDEyMjoxfSxSRmU9J29yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZScsU0ZlPXs5MzoxLDkyOjEsNTgzOjEsMTk4MDoxfSxURmU9J29yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsJyxVRmU9J3Vuc3BlY2lmaWVkJyxWRmU9J3NpbXBsZScsV0ZlPSdhdHRyaWJ1dGUnLFhGZT0nYXR0cmlidXRlV2lsZGNhcmQnLFlGZT0nZWxlbWVudCcsWkZlPSdlbGVtZW50V2lsZGNhcmQnLCRGZT0nY29sbGFwc2UnLF9GZT0naXRlbVR5cGUnLGFHZT0nbmFtZXNwYWNlJyxiR2U9JyMjdGFyZ2V0TmFtZXNwYWNlJyxjR2U9J3doaXRlU3BhY2UnLGRHZT0nd2lsZGNhcmRzJyxlR2U9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDMvWE1MVHlwZScsZkdlPScjI2FueScsZ0dlPSd1bmluaXRpYWxpemVkJyxoR2U9J1RoZSBtdWx0aXBsaWNpdHkgY29uc3RyYWludCBpcyB2aW9sYXRlZCcsaUdlPSdvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUnLGpHZT0nUHJvY2Vzc2luZ0luc3RydWN0aW9uJyxrR2U9J1NpbXBsZUFueVR5cGUnLGxHZT0nWE1MVHlwZURvY3VtZW50Um9vdCcsbUdlPSdvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1sLnR5cGUuaW1wbCcsbkdlPSdJTkYnLG9HZT0ncHJvY2Vzc2luZycscEdlPSdFTlRJVElFU18uX2Jhc2UnLHFHZT0nbWluTGVuZ3RoJyxyR2U9J0VOVElUWScsc0dlPSdOQ05hbWUnLHRHZT0nSURSRUZTXy5fYmFzZScsdUdlPSdpbnRlZ2VyJyx2R2U9J3Rva2VuJyx3R2U9J3BhdHRlcm4nLHhHZT0nW2EtekEtWl17MSw4fSgtW2EtekEtWjAtOV17MSw4fSkqJyx5R2U9J1xcaVxcYyonLHpHZT0nW1xcaS1bOl1dW1xcYy1bOl1dKicsQUdlPSdub25Qb3NpdGl2ZUludGVnZXInLEJHZT0nbWF4SW5jbHVzaXZlJyxDR2U9J05NVE9LRU4nLERHZT0nTk1UT0tFTlNfLl9iYXNlJyxFR2U9J25vbk5lZ2F0aXZlSW50ZWdlcicsRkdlPSdtaW5JbmNsdXNpdmUnLEdHZT0nbm9ybWFsaXplZFN0cmluZycsSEdlPSd1bnNpZ25lZEJ5dGUnLElHZT0ndW5zaWduZWRJbnQnLEpHZT0nMTg0NDY3NDQwNzM3MDk1NTE2MTUnLEtHZT0ndW5zaWduZWRTaG9ydCcsTEdlPSdwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24nLE1HZT0nb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLmludGVybmFsJyxOR2U9MTExNDExMSxPR2U9J0ludGVybmFsIEVycm9yOiBzaG9ydGhhbmRzOiBcXHUnLFBHZT0neG1sOmlzRGlnaXQnLFFHZT0neG1sOmlzV29yZCcsUkdlPSd4bWw6aXNTcGFjZScsU0dlPSd4bWw6aXNOYW1lQ2hhcicsVEdlPSd4bWw6aXNJbml0aWFsTmFtZUNoYXInLFVHZT0nMDlcdTA2NjBcdTA2NjlcdTA2RjBcdTA2RjlcdTA5NjZcdTA5NkZcdTA5RTZcdTA5RUZcdTBBNjZcdTBBNkZcdTBBRTZcdTBBRUZcdTBCNjZcdTBCNkZcdTBCRTdcdTBCRUZcdTBDNjZcdTBDNkZcdTBDRTZcdTBDRUZcdTBENjZcdTBENkZcdTBFNTBcdTBFNTlcdTBFRDBcdTBFRDlcdTBGMjBcdTBGMjknLFZHZT0nQVphelx4QzBceEQ2XHhEOFx4RjZceEY4XHUwMTMxXHUwMTM0XHUwMTNFXHUwMTQxXHUwMTQ4XHUwMTRBXHUwMTdFXHUwMTgwXHUwMUMzXHUwMUNEXHUwMUYwXHUwMUY0XHUwMUY1XHUwMUZBXHUwMjE3XHUwMjUwXHUwMkE4XHUwMkJCXHUwMkMxXHUwMzg2XHUwMzg2XHUwMzg4XHUwMzhBXHUwMzhDXHUwMzhDXHUwMzhFXHUwM0ExXHUwM0EzXHUwM0NFXHUwM0QwXHUwM0Q2XHUwM0RBXHUwM0RBXHUwM0RDXHUwM0RDXHUwM0RFXHUwM0RFXHUwM0UwXHUwM0UwXHUwM0UyXHUwM0YzXHUwNDAxXHUwNDBDXHUwNDBFXHUwNDRGXHUwNDUxXHUwNDVDXHUwNDVFXHUwNDgxXHUwNDkwXHUwNEM0XHUwNEM3XHUwNEM4XHUwNENCXHUwNENDXHUwNEQwXHUwNEVCXHUwNEVFXHUwNEY1XHUwNEY4XHUwNEY5XHUwNTMxXHUwNTU2XHUwNTU5XHUwNTU5XHUwNTYxXHUwNTg2XHUwNUQwXHUwNUVBXHUwNUYwXHUwNUYyXHUwNjIxXHUwNjNBXHUwNjQxXHUwNjRBXHUwNjcxXHUwNkI3XHUwNkJBXHUwNkJFXHUwNkMwXHUwNkNFXHUwNkQwXHUwNkQzXHUwNkQ1XHUwNkQ1XHUwNkU1XHUwNkU2XHUwOTA1XHUwOTM5XHUwOTNEXHUwOTNEXHUwOTU4XHUwOTYxXHUwOTg1XHUwOThDXHUwOThGXHUwOTkwXHUwOTkzXHUwOUE4XHUwOUFBXHUwOUIwXHUwOUIyXHUwOUIyXHUwOUI2XHUwOUI5XHUwOURDXHUwOUREXHUwOURGXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1XHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzXHUwQTI4XHUwQTJBXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5XHUwQTVDXHUwQTVFXHUwQTVFXHUwQTcyXHUwQTc0XHUwQTg1XHUwQThCXHUwQThEXHUwQThEXHUwQThGXHUwQTkxXHUwQTkzXHUwQUE4XHUwQUFBXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1XHUwQUI5XHUwQUJEXHUwQUJEXHUwQUUwXHUwQUUwXHUwQjA1XHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzXHUwQjI4XHUwQjJBXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM2XHUwQjM5XHUwQjNEXHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGXHUwQjYxXHUwQjg1XHUwQjhBXHUwQjhFXHUwQjkwXHUwQjkyXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4XHUwQkFBXHUwQkFFXHUwQkI1XHUwQkI3XHUwQkI5XHUwQzA1XHUwQzBDXHUwQzBFXHUwQzEwXHUwQzEyXHUwQzI4XHUwQzJBXHUwQzMzXHUwQzM1XHUwQzM5XHUwQzYwXHUwQzYxXHUwQzg1XHUwQzhDXHUwQzhFXHUwQzkwXHUwQzkyXHUwQ0E4XHUwQ0FBXHUwQ0IzXHUwQ0I1XHUwQ0I5XHUwQ0RFXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwRDA1XHUwRDBDXHUwRDBFXHUwRDEwXHUwRDEyXHUwRDI4XHUwRDJBXHUwRDM5XHUwRDYwXHUwRDYxXHUwRTAxXHUwRTJFXHUwRTMwXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwXHUwRTQ1XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThBXHUwRThEXHUwRThEXHUwRTk0XHUwRTk3XHUwRTk5XHUwRTlGXHUwRUExXHUwRUEzXHUwRUE1XHUwRUE1XHUwRUE3XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFEXHUwRUFFXHUwRUIwXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUJEXHUwRUMwXHUwRUM0XHUwRjQwXHUwRjQ3XHUwRjQ5XHUwRjY5XHUxMEEwXHUxMEM1XHUxMEQwXHUxMEY2XHUxMTAwXHUxMTAwXHUxMTAyXHUxMTAzXHUxMTA1XHUxMTA3XHUxMTA5XHUxMTA5XHUxMTBCXHUxMTBDXHUxMTBFXHUxMTEyXHUxMTNDXHUxMTNDXHUxMTNFXHUxMTNFXHUxMTQwXHUxMTQwXHUxMTRDXHUxMTRDXHUxMTRFXHUxMTRFXHUxMTUwXHUxMTUwXHUxMTU0XHUxMTU1XHUxMTU5XHUxMTU5XHUxMTVGXHUxMTYxXHUxMTYzXHUxMTYzXHUxMTY1XHUxMTY1XHUxMTY3XHUxMTY3XHUxMTY5XHUxMTY5XHUxMTZEXHUxMTZFXHUxMTcyXHUxMTczXHUxMTc1XHUxMTc1XHUxMTlFXHUxMTlFXHUxMUE4XHUxMUE4XHUxMUFCXHUxMUFCXHUxMUFFXHUxMUFGXHUxMUI3XHUxMUI4XHUxMUJBXHUxMUJBXHUxMUJDXHUxMUMyXHUxMUVCXHUxMUVCXHUxMUYwXHUxMUYwXHUxMUY5XHUxMUY5XHUxRTAwXHUxRTlCXHUxRUEwXHUxRUY5XHUxRjAwXHUxRjE1XHUxRjE4XHUxRjFEXHUxRjIwXHUxRjQ1XHUxRjQ4XHUxRjREXHUxRjUwXHUxRjU3XHUxRjU5XHUxRjU5XHUxRjVCXHUxRjVCXHUxRjVEXHUxRjVEXHUxRjVGXHUxRjdEXHUxRjgwXHUxRkI0XHUxRkI2XHUxRkJDXHUxRkJFXHUxRkJFXHUxRkMyXHUxRkM0XHUxRkM2XHUxRkNDXHUxRkQwXHUxRkQzXHUxRkQ2XHUxRkRCXHUxRkUwXHUxRkVDXHUxRkYyXHUxRkY0XHUxRkY2XHUxRkZDXHUyMTI2XHUyMTI2XHUyMTJBXHUyMTJCXHUyMTJFXHUyMTJFXHUyMTgwXHUyMTgyXHUzMDA3XHUzMDA3XHUzMDIxXHUzMDI5XHUzMDQxXHUzMDk0XHUzMEExXHUzMEZBXHUzMTA1XHUzMTJDXHU0RTAwXHU5RkE1XHVBQzAwXHVEN0EzJyxXR2U9J1ByaXZhdGUgVXNlJyxYR2U9J0FTU0lHTkVEJyxZR2U9J1x4MDBceDdGXHg4MFx4RkZcdTAxMDBcdTAxN0ZcdTAxODBcdTAyNEZcdTAyNTBcdTAyQUZcdTAyQjBcdTAyRkZcdTAzMDBcdTAzNkZcdTAzNzBcdTAzRkZcdTA0MDBcdTA0RkZcdTA1MzBcdTA1OEZcdTA1OTBcdTA1RkZcdTA2MDBcdTA2RkZcdTA3MDBcdTA3NEZcdTA3ODBcdTA3QkZcdTA5MDBcdTA5N0ZcdTA5ODBcdTA5RkZcdTBBMDBcdTBBN0ZcdTBBODBcdTBBRkZcdTBCMDBcdTBCN0ZcdTBCODBcdTBCRkZcdTBDMDBcdTBDN0ZcdTBDODBcdTBDRkZcdTBEMDBcdTBEN0ZcdTBEODBcdTBERkZcdTBFMDBcdTBFN0ZcdTBFODBcdTBFRkZcdTBGMDBcdTBGRkZcdTEwMDBcdTEwOUZcdTEwQTBcdTEwRkZcdTExMDBcdTExRkZcdTEyMDBcdTEzN0ZcdTEzQTBcdTEzRkZcdTE0MDBcdTE2N0ZcdTE2ODBcdTE2OUZcdTE2QTBcdTE2RkZcdTE3ODBcdTE3RkZcdTE4MDBcdTE4QUZcdTFFMDBcdTFFRkZcdTFGMDBcdTFGRkZcdTIwMDBcdTIwNkZcdTIwNzBcdTIwOUZcdTIwQTBcdTIwQ0ZcdTIwRDBcdTIwRkZcdTIxMDBcdTIxNEZcdTIxNTBcdTIxOEZcdTIxOTBcdTIxRkZcdTIyMDBcdTIyRkZcdTIzMDBcdTIzRkZcdTI0MDBcdTI0M0ZcdTI0NDBcdTI0NUZcdTI0NjBcdTI0RkZcdTI1MDBcdTI1N0ZcdTI1ODBcdTI1OUZcdTI1QTBcdTI1RkZcdTI2MDBcdTI2RkZcdTI3MDBcdTI3QkZcdTI4MDBcdTI4RkZcdTJFODBcdTJFRkZcdTJGMDBcdTJGREZcdTJGRjBcdTJGRkZcdTMwMDBcdTMwM0ZcdTMwNDBcdTMwOUZcdTMwQTBcdTMwRkZcdTMxMDBcdTMxMkZcdTMxMzBcdTMxOEZcdTMxOTBcdTMxOUZcdTMxQTBcdTMxQkZcdTMyMDBcdTMyRkZcdTMzMDBcdTMzRkZcdTM0MDBcdTREQjVcdTRFMDBcdTlGRkZcdUEwMDBcdUE0OEZcdUE0OTBcdUE0Q0ZcdUFDMDBcdUQ3QTNcdUUwMDBcdUY4RkZcdUY5MDBcdUZBRkZcdUZCMDBcdUZCNEZcdUZCNTBcdUZERkZcdUZFMjBcdUZFMkZcdUZFMzBcdUZFNEZcdUZFNTBcdUZFNkZcdUZFNzBcdUZFRkVcdUZFRkZcdUZFRkZcdUZGMDBcdUZGRUYnLFpHZT0nVU5BU1NJR05FRCcsJEdlPXszOjEsMTIxOjF9LF9HZT0nb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtbC50eXBlLnV0aWwnLGFIZT17MzoxLDQ6MSw1OjEsMzczOjF9LGJIZT0nb3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliJyxjSGU9J0Nhbm5vdCBhZGQgZWxlbWVudHMgdG8gYSBSYW5nZScsZEhlPSdDYW5ub3Qgc2V0IGVsZW1lbnRzIGluIGEgUmFuZ2UnLGVIZT0nQ2Fubm90IHJlbW92ZSBlbGVtZW50cyBmcm9tIGEgUmFuZ2UnLGZIZT0ndXNlci5hZ2VudCc7dmFyIF8sWGNiLFNjYixxY2I9LTE7JHduZC5nb29nPSR3bmQuZ29vZ3x8e307JHduZC5nb29nLmdsb2JhbD0kd25kLmdvb2cuZ2xvYmFsfHwkd25kO1hjYj17fTtZY2IoMSxudWxsLHt9LG5iKTtfLkZiPWZ1bmN0aW9uIG9iKGEpe3JldHVybiBtYih0aGlzLGEpfTtfLkdiPWZ1bmN0aW9uIHFiKCl7cmV0dXJuIHRoaXMuT219O18uSGI9ZnVuY3Rpb24gc2IoKXtyZXR1cm4gakRiKHRoaXMpfTtfLkliPWZ1bmN0aW9uIHViKCl7dmFyIGE7cmV0dXJuIGVlYihyYih0aGlzKSkrJ0AnKyhhPXRiKHRoaXMpPj4+MCxhLnRvU3RyaW5nKDE2KSl9O18uZXF1YWxzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLkZiKGEpfTtfLmhhc2hDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSGIoKX07Xy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkliKCl9O3ZhciBGRCxHRCxIRDtZY2IoMjk1LDEsezI5NToxLDIwNzA6MX0sZ2ViKTtfLnRlPWZ1bmN0aW9uIGhlYihhKXt2YXIgYjtiPW5ldyBnZWI7Yi5pPTQ7YT4xPyhiLmM9b2ViKHRoaXMsYS0xKSk6KGIuYz10aGlzKTtyZXR1cm4gYn07Xy51ZT1mdW5jdGlvbiBuZWIoKXtjZWIodGhpcyk7cmV0dXJuIHRoaXMuYn07Xy52ZT1mdW5jdGlvbiBwZWIoKXtyZXR1cm4gZWViKHRoaXMpfTtfLndlPWZ1bmN0aW9uIHJlYigpe3JldHVybiBjZWIodGhpcyksdGhpcy5rfTtfLnhlPWZ1bmN0aW9uIHRlYigpe3JldHVybiAodGhpcy5pJjQpIT0wfTtfLnllPWZ1bmN0aW9uIHVlYigpe3JldHVybiAodGhpcy5pJjEpIT0wfTtfLkliPWZ1bmN0aW9uIHhlYigpe3JldHVybiBmZWIodGhpcyl9O18uaT0wO3ZhciBiZWI9MTt2YXIgYUo9amViKElxZSwnT2JqZWN0JywxKTt2YXIgS0k9amViKElxZSwnQ2xhc3MnLDI5NSk7WWNiKDIwNDIsMSxKcWUpO3ZhciBnRT1qZWIoS3FlLCdPcHRpb25hbCcsMjA0Mik7WWNiKDExNTUsMjA0MixKcWUseGIpO18uRmI9ZnVuY3Rpb24geWIoYSl7cmV0dXJuIGE9PT10aGlzfTtfLkhiPWZ1bmN0aW9uIHpiKCl7cmV0dXJuIDIwNDA3MzIzMzJ9O18uSWI9ZnVuY3Rpb24gQWIoKXtyZXR1cm4gJ09wdGlvbmFsLmFic2VudCgpJ307Xy5KYj1mdW5jdGlvbiBCYihhKXtRYihhKTtyZXR1cm4gd2IoKSx2Yn07dmFyIHZiO3ZhciBlRT1qZWIoS3FlLCdBYnNlbnQnLDExNTUpO1ljYig2MjEsMSx7fSxHYik7dmFyIGZFPWplYihLcWUsJ0pvaW5lcicsNjIxKTt2YXIgaEU9bGViKEtxZSwnUHJlZGljYXRlJyk7WWNiKDU3MiwxLHsxNzc6MSw1NzI6MSwzOjEsNDg6MX0sWWIpO18uTWI9ZnVuY3Rpb24gYWMoYSl7cmV0dXJuIFhiKHRoaXMsYSl9O18uTGI9ZnVuY3Rpb24gWmIoYSl7cmV0dXJuIFhiKHRoaXMsYSl9O18uRmI9ZnVuY3Rpb24gJGIoYSl7dmFyIGI7aWYoUkQoYSw1NzIpKXtiPUpEKGEsNTcyKTtyZXR1cm4gTnQodGhpcy5hLGIuYSl9cmV0dXJuIGZhbHNlfTtfLkhiPWZ1bmN0aW9uIF9iKCl7cmV0dXJuIHRuYih0aGlzLmEpKzMwNjY1NDI1Mn07Xy5JYj1mdW5jdGlvbiBiYygpe3JldHVybiBXYih0aGlzLmEpfTt2YXIgaUU9amViKEtxZSwnUHJlZGljYXRlcy9BbmRQcmVkaWNhdGUnLDU3Mik7WWNiKDQwOCwyMDQyLHs0MDg6MSwzOjF9LGNjKTtfLkZiPWZ1bmN0aW9uIGRjKGEpe3ZhciBiO2lmKFJEKGEsNDA4KSl7Yj1KRChhLDQwOCk7cmV0dXJuIHBiKHRoaXMuYSxiLmEpfXJldHVybiBmYWxzZX07Xy5IYj1mdW5jdGlvbiBlYygpe3JldHVybiAxNTAyNDc2NTcyK3RiKHRoaXMuYSl9O18uSWI9ZnVuY3Rpb24gZmMoKXtyZXR1cm4gUXFlK3RoaXMuYSsnKSd9O18uSmI9ZnVuY3Rpb24gZ2MoYSl7cmV0dXJuIG5ldyBjYyhSYihhLktiKHRoaXMuYSksJ3RoZSBGdW5jdGlvbiBwYXNzZWQgdG8gT3B0aW9uYWwudHJhbnNmb3JtKCkgbXVzdCBub3QgcmV0dXJuIG51bGwuJykpfTt2YXIgakU9amViKEtxZSwnUHJlc2VudCcsNDA4KTtZY2IoMjA0LDEsU3FlKTtfLk5iPWZ1bmN0aW9uIGtjKGEpe09zYih0aGlzLGEpfTtfLlFiPWZ1bmN0aW9uIGxjKCl7amMoKX07dmFyIFdIPWplYihUcWUsJ1VubW9kaWZpYWJsZUl0ZXJhdG9yJywyMDQpO1ljYigyMDIyLDIwNCxVcWUpO18uUWI9ZnVuY3Rpb24gbmMoKXtqYygpfTtfLlJiPWZ1bmN0aW9uIG1jKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5XYj1mdW5jdGlvbiBvYyhhKXt0aHJvdyBzY2IobmV3IGFoYil9O3ZhciBYSD1qZWIoVHFlLCdVbm1vZGlmaWFibGVMaXN0SXRlcmF0b3InLDIwMjIpO1ljYigzOTAsMjAyMixVcWUpO18uT2I9ZnVuY3Rpb24gcmMoKXtyZXR1cm4gdGhpcy5jPHRoaXMuZH07Xy5TYj1mdW5jdGlvbiBzYygpe3JldHVybiB0aGlzLmM+MH07Xy5QYj1mdW5jdGlvbiB0Yygpe2lmKHRoaXMuYz49dGhpcy5kKXt0aHJvdyBzY2IobmV3IHF1Yil9cmV0dXJuIHRoaXMuWGIodGhpcy5jKyspfTtfLlRiPWZ1bmN0aW9uIHVjKCl7cmV0dXJuIHRoaXMuY307Xy5VYj1mdW5jdGlvbiB2Yygpe2lmKHRoaXMuYzw9MCl7dGhyb3cgc2NiKG5ldyBxdWIpfXJldHVybiB0aGlzLlhiKC0tdGhpcy5jKX07Xy5WYj1mdW5jdGlvbiB3Yygpe3JldHVybiB0aGlzLmMtMX07Xy5jPTA7Xy5kPTA7dmFyIGtFPWplYihUcWUsJ0Fic3RyYWN0SW5kZXhlZExpc3RJdGVyYXRvcicsMzkwKTtZY2IoNjk3LDIwNCxTcWUpO18uT2I9ZnVuY3Rpb24gQWMoKXtyZXR1cm4geGModGhpcyl9O18uUGI9ZnVuY3Rpb24gQmMoKXtyZXR1cm4geWModGhpcyl9O18uZT0xO3ZhciBsRT1qZWIoVHFlLCdBYnN0cmFjdEl0ZXJhdG9yJyw2OTcpO1ljYigyMDMwLDEsezIyODoxfSk7Xy5aYj1mdW5jdGlvbiBIYygpe3ZhciBhO3JldHVybiBhPXRoaXMuZiwhYT8odGhpcy5mPXRoaXMuYWMoKSk6YX07Xy5GYj1mdW5jdGlvbiBJYyhhKXtyZXR1cm4gdHcodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBKYygpe3JldHVybiB0Yih0aGlzLlpiKCkpfTtfLmRjPWZ1bmN0aW9uIEtjKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH07Xy5lYz1mdW5jdGlvbiBMYygpe3JldHVybiBFYyh0aGlzKX07Xy5JYj1mdW5jdGlvbiBNYygpe3JldHVybiBhZGIodGhpcy5aYigpKX07dmFyIFFFPWplYihUcWUsJ0Fic3RyYWN0TXVsdGltYXAnLDIwMzApO1ljYig3MjUsMjAzMCxWcWUpO18uJGI9ZnVuY3Rpb24gWGMoKXtOYyh0aGlzKX07Xy5fYj1mdW5jdGlvbiBZYyhhKXtyZXR1cm4gT2ModGhpcyxhKX07Xy5hYz1mdW5jdGlvbiBaYygpe3JldHVybiBuZXcgbWUodGhpcyx0aGlzLmMpfTtfLmljPWZ1bmN0aW9uICRjKGEpe3JldHVybiB0aGlzLmhjKCl9O18uYmM9ZnVuY3Rpb24gX2MoKXtyZXR1cm4gbmV3IHhmKHRoaXMsdGhpcy5jKX07Xy5qYz1mdW5jdGlvbiBhZCgpe3JldHVybiB0aGlzLm1jKHRoaXMuaGMoKSl9O18ua2M9ZnVuY3Rpb24gYmQoKXtyZXR1cm4gbmV3IEhkKHRoaXMpfTtfLmxjPWZ1bmN0aW9uIGNkKCl7cmV0dXJuIGNrKHRoaXMuYy52YygpLkxjKCksbmV3IGZoLDY0LHRoaXMuZCl9O18uY2M9ZnVuY3Rpb24gZGQoYSl7cmV0dXJuIFFjKHRoaXMsYSl9O18uZmM9ZnVuY3Rpb24gZ2QoYSl7cmV0dXJuIFNjKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24gaGQoKXtyZXR1cm4gdGhpcy5kfTtfLm1jPWZ1bmN0aW9uIGpkKGEpe3JldHVybiBwbmIoKSxuZXcgb29iKGEpfTtfLm5jPWZ1bmN0aW9uIGtkKCl7cmV0dXJuIG5ldyBEZCh0aGlzKX07Xy5vYz1mdW5jdGlvbiBsZCgpe3JldHVybiBjayh0aGlzLmMuQmMoKS5MYygpLG5ldyBGZCw2NCx0aGlzLmQpfTtfLnBjPWZ1bmN0aW9uIG1kKGEsYil7cmV0dXJuIG5ldyBqZyh0aGlzLGEsYixudWxsKX07Xy5kPTA7dmFyIExFPWplYihUcWUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcCcsNzI1KTtZY2IoMTYzNyw3MjUsVnFlKTtfLmhjPWZ1bmN0aW9uIHBkKCl7cmV0dXJuIG5ldyBWbGIodGhpcy5hKX07Xy5qYz1mdW5jdGlvbiBxZCgpe3JldHVybiBwbmIoKSxwbmIoKSxtbmJ9O18uY2M9ZnVuY3Rpb24gc2QoYSl7cmV0dXJuIEpEKFFjKHRoaXMsYSksMTUpfTtfLmZjPWZ1bmN0aW9uIHVkKGEpe3JldHVybiBKRChTYyh0aGlzLGEpLDE1KX07Xy5aYj1mdW5jdGlvbiBvZCgpe3JldHVybiBuZCh0aGlzKX07Xy5GYj1mdW5jdGlvbiByZChhKXtyZXR1cm4gdHcodGhpcyxhKX07Xy5xYz1mdW5jdGlvbiB0ZChhKXtyZXR1cm4gSkQoUWModGhpcyxhKSwxNSl9O18ucmM9ZnVuY3Rpb24gdmQoYSl7cmV0dXJuIEpEKFNjKHRoaXMsYSksMTUpfTtfLm1jPWZ1bmN0aW9uIHdkKGEpe3JldHVybiB5bmIoSkQoYSwxNSkpfTtfLnBjPWZ1bmN0aW9uIHhkKGEsYil7cmV0dXJuIFZjKHRoaXMsYSxKRChiLDE1KSxudWxsKX07dmFyIG1FPWplYihUcWUsJ0Fic3RyYWN0TGlzdE11bHRpbWFwJywxNjM3KTtZY2IoNzMxLDEsV3FlKTtfLk5iPWZ1bmN0aW9uIHpkKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIEFkKCl7cmV0dXJuIHRoaXMuYy5PYigpfHx0aGlzLmUuT2IoKX07Xy5QYj1mdW5jdGlvbiBCZCgpe3ZhciBhO2lmKCF0aGlzLmUuT2IoKSl7YT1KRCh0aGlzLmMuUGIoKSw0Myk7dGhpcy5iPWEuamQoKTt0aGlzLmE9SkQoYS5rZCgpLDE2KTt0aGlzLmU9dGhpcy5hLkpjKCl9cmV0dXJuIHRoaXMuc2ModGhpcy5iLHRoaXMuZS5QYigpKX07Xy5RYj1mdW5jdGlvbiBDZCgpe3RoaXMuZS5RYigpO0pEKHZ1Yih0aGlzLmEpLDE2KS5kYygpJiZ0aGlzLmMuUWIoKTstLXRoaXMuZC5kfTt2YXIgdUU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0l0cicsNzMxKTtZY2IoMTA5Myw3MzEsV3FlLERkKTtfLnNjPWZ1bmN0aW9uIEVkKGEsYil7cmV0dXJuIGJ9O3ZhciBuRT1qZWIoVHFlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMScsMTA5Myk7WWNiKDEwOTQsMSx7fSxGZCk7Xy5LYj1mdW5jdGlvbiBHZChhKXtyZXR1cm4gSkQoYSwxNikuTGMoKX07dmFyIG9FPWplYihUcWUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC8xbWV0aG9kcmVmJHNwbGl0ZXJhdG9yJFR5cGUnLDEwOTQpO1ljYigxMDk1LDczMSxXcWUsSGQpO18uc2M9ZnVuY3Rpb24gSWQoYSxiKXtyZXR1cm4gbmV3IGNwKGEsYil9O3ZhciBwRT1qZWIoVHFlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvMicsMTA5NSk7dmFyIE1LPWxlYihYcWUsJ01hcCcpO1ljYigyMDExLDEsWXFlKTtfLndjPWZ1bmN0aW9uIFRkKGEpe3B1Yih0aGlzLGEpfTtfLiRiPWZ1bmN0aW9uIE9kKCl7dGhpcy52YygpLiRiKCl9O18udGM9ZnVuY3Rpb24gUGQoYSl7cmV0dXJuIEpkKHRoaXMsYSl9O18uX2I9ZnVuY3Rpb24gUWQoYSl7cmV0dXJuICEhS2QodGhpcyxhLGZhbHNlKX07Xy51Yz1mdW5jdGlvbiBSZChhKXt2YXIgYixjLGQ7Zm9yKGM9dGhpcy52YygpLkpjKCk7Yy5PYigpOyl7Yj1KRChjLlBiKCksNDMpO2Q9Yi5rZCgpO2lmKFhEKGEpPT09WEQoZCl8fGEhPW51bGwmJnBiKGEsZCkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O18uRmI9ZnVuY3Rpb24gU2QoYSl7dmFyIGIsYyxkO2lmKGE9PT10aGlzKXtyZXR1cm4gdHJ1ZX1pZighUkQoYSw5MSkpe3JldHVybiBmYWxzZX1kPUpEKGEsOTEpO2lmKHRoaXMuZ2MoKSE9ZC5nYygpKXtyZXR1cm4gZmFsc2V9Zm9yKGM9ZC52YygpLkpjKCk7Yy5PYigpOyl7Yj1KRChjLlBiKCksNDMpO2lmKCF0aGlzLnRjKGIpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfTtfLnhjPWZ1bmN0aW9uIFVkKGEpe3JldHVybiBXZChLZCh0aGlzLGEsZmFsc2UpKX07Xy5IYj1mdW5jdGlvbiBYZCgpe3JldHVybiBzbmIodGhpcy52YygpKX07Xy5kYz1mdW5jdGlvbiBZZCgpe3JldHVybiB0aGlzLmdjKCk9PTB9O18uZWM9ZnVuY3Rpb24gWmQoKXtyZXR1cm4gbmV3IE9qYih0aGlzKX07Xy55Yz1mdW5jdGlvbiAkZChhLGIpe3Rocm93IHNjYihuZXcgYmhiKCdQdXQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIG1hcCcpKX07Xy56Yz1mdW5jdGlvbiBfZChhKXtMZCh0aGlzLGEpfTtfLkFjPWZ1bmN0aW9uIGFlKGEpe3JldHVybiBXZChLZCh0aGlzLGEsdHJ1ZSkpfTtfLmdjPWZ1bmN0aW9uIGJlKCl7cmV0dXJuIHRoaXMudmMoKS5nYygpfTtfLkliPWZ1bmN0aW9uIGNlKCl7cmV0dXJuIE1kKHRoaXMpfTtfLkJjPWZ1bmN0aW9uIGRlKCl7cmV0dXJuIG5ldyBaamIodGhpcyl9O3ZhciBCSj1qZWIoWHFlLCdBYnN0cmFjdE1hcCcsMjAxMSk7WWNiKDIwMzEsMjAxMSxZcWUpO18uYmM9ZnVuY3Rpb24gZmUoKXtyZXR1cm4gbmV3IHBmKHRoaXMpfTtfLnZjPWZ1bmN0aW9uIGdlKCl7cmV0dXJuIGVlKHRoaXMpfTtfLmVjPWZ1bmN0aW9uIGhlKCl7dmFyIGE7YT10aGlzLmc7cmV0dXJuICFhPyh0aGlzLmc9dGhpcy5iYygpKTphfTtfLkJjPWZ1bmN0aW9uIGllKCl7dmFyIGE7YT10aGlzLmk7cmV0dXJuICFhPyh0aGlzLmk9bmV3IGp3KHRoaXMpKTphfTt2YXIgbUg9amViKFRxZSwnTWFwcy9WaWV3Q2FjaGluZ0Fic3RyYWN0TWFwJywyMDMxKTtZY2IoMzkzLDIwMzEsWXFlLG1lKTtfLnhjPWZ1bmN0aW9uIHJlKGEpe3JldHVybiBqZSh0aGlzLGEpfTtfLkFjPWZ1bmN0aW9uIHVlKGEpe3JldHVybiBrZSh0aGlzLGEpfTtfLiRiPWZ1bmN0aW9uIG5lKCl7dGhpcy5kPT10aGlzLmUuYz90aGlzLmUuJGIoKTp3cihuZXcga2YodGhpcykpfTtfLl9iPWZ1bmN0aW9uIG9lKGEpe3JldHVybiBTdih0aGlzLmQsYSl9O18uRGM9ZnVuY3Rpb24gcGUoKXtyZXR1cm4gbmV3IGJmKHRoaXMpfTtfLkNjPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRGMoKX07Xy5GYj1mdW5jdGlvbiBxZShhKXtyZXR1cm4gdGhpcz09PWF8fHBiKHRoaXMuZCxhKX07Xy5IYj1mdW5jdGlvbiBzZSgpe3JldHVybiB0Yih0aGlzLmQpfTtfLmVjPWZ1bmN0aW9uIHRlKCl7cmV0dXJuIHRoaXMuZS5lYygpfTtfLmdjPWZ1bmN0aW9uIHZlKCl7cmV0dXJuIHRoaXMuZC5nYygpfTtfLkliPWZ1bmN0aW9uIHdlKCl7cmV0dXJuIGFkYih0aGlzLmQpfTt2YXIgdEU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwJywzOTMpO3ZhciBWST1sZWIoSXFlLCdJdGVyYWJsZScpO1ljYigzMSwxLFpxZSk7Xy5JYz1mdW5jdGlvbiBLZShhKXtvZmIodGhpcyxhKX07Xy5MYz1mdW5jdGlvbiBOZSgpe3JldHVybiBuZXcgR3ZiKHRoaXMsMCl9O18uTWM9ZnVuY3Rpb24gT2UoKXtyZXR1cm4gbmV3IFJCYihudWxsLHRoaXMuTGMoKSl9O18uRWM9ZnVuY3Rpb24gRmUoYSl7dGhyb3cgc2NiKG5ldyBiaGIoJ0FkZCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29sbGVjdGlvbicpKX07Xy5GYz1mdW5jdGlvbiBHZShhKXtyZXR1cm4geGUodGhpcyxhKX07Xy4kYj1mdW5jdGlvbiBIZSgpe3plKHRoaXMpfTtfLkdjPWZ1bmN0aW9uIEllKGEpe3JldHVybiB5ZSh0aGlzLGEsZmFsc2UpfTtfLkhjPWZ1bmN0aW9uIEplKGEpe3JldHVybiBBZSh0aGlzLGEpfTtfLmRjPWZ1bmN0aW9uIExlKCl7cmV0dXJuIHRoaXMuZ2MoKT09MH07Xy5LYz1mdW5jdGlvbiBNZShhKXtyZXR1cm4geWUodGhpcyxhLHRydWUpfTtfLk5jPWZ1bmN0aW9uIFBlKCl7cmV0dXJuIENlKHRoaXMpfTtfLk9jPWZ1bmN0aW9uIFFlKGEpe3JldHVybiBEZSh0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIFJlKCl7cmV0dXJuIEVlKHRoaXMpfTt2YXIgbUo9amViKFhxZSwnQWJzdHJhY3RDb2xsZWN0aW9uJywzMSk7dmFyIFVLPWxlYihYcWUsJ1NldCcpO1ljYigkcWUsMzEsX3FlKTtfLkxjPWZ1bmN0aW9uIFdlKCl7cmV0dXJuIG5ldyBHdmIodGhpcywxKX07Xy5GYj1mdW5jdGlvbiBVZShhKXtyZXR1cm4gU2UodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBWZSgpe3JldHVybiBzbmIodGhpcyl9O3ZhciBJSj1qZWIoWHFlLCdBYnN0cmFjdFNldCcsJHFlKTtZY2IoMjAxNCwkcWUsX3FlKTt2YXIgTEg9amViKFRxZSwnU2V0cy9JbXByb3ZlZEFic3RyYWN0U2V0JywyMDE0KTtZY2IoMjAxNSwyMDE0LF9xZSk7Xy4kYj1mdW5jdGlvbiBZZSgpe3RoaXMuUGMoKS4kYigpfTtfLkdjPWZ1bmN0aW9uIFplKGEpe3JldHVybiBYZSh0aGlzLGEpfTtfLmRjPWZ1bmN0aW9uICRlKCl7cmV0dXJuIHRoaXMuUGMoKS5kYygpfTtfLktjPWZ1bmN0aW9uIF9lKGEpe3ZhciBiO2lmKHRoaXMuR2MoYSkmJlJEKGEsNDMpKXtiPUpEKGEsNDMpO3JldHVybiB0aGlzLlBjKCkuZWMoKS5LYyhiLmpkKCkpfXJldHVybiBmYWxzZX07Xy5nYz1mdW5jdGlvbiBhZigpe3JldHVybiB0aGlzLlBjKCkuZ2MoKX07dmFyIGZIPWplYihUcWUsJ01hcHMvRW50cnlTZXQnLDIwMTUpO1ljYigxMDkxLDIwMTUsX3FlLGJmKTtfLkdjPWZ1bmN0aW9uIGNmKGEpe3JldHVybiBMayh0aGlzLmEuZC52YygpLGEpfTtfLkpjPWZ1bmN0aW9uIGRmKCl7cmV0dXJuIG5ldyBrZih0aGlzLmEpfTtfLlBjPWZ1bmN0aW9uIGVmKCl7cmV0dXJuIHRoaXMuYX07Xy5LYz1mdW5jdGlvbiBmZihhKXt2YXIgYjtpZighTGsodGhpcy5hLmQudmMoKSxhKSl7cmV0dXJuIGZhbHNlfWI9SkQodnViKEpEKGEsNDMpKSw0Myk7VGModGhpcy5hLmUsYi5qZCgpKTtyZXR1cm4gdHJ1ZX07Xy5MYz1mdW5jdGlvbiBnZigpe3JldHVybiBlayh0aGlzLmEuZC52YygpLkxjKCksbmV3IGhmKHRoaXMuYSkpfTt2YXIgckU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0FzTWFwL0FzTWFwRW50cmllcycsMTA5MSk7WWNiKDEwOTIsMSx7fSxoZik7Xy5LYj1mdW5jdGlvbiBqZihhKXtyZXR1cm4gbGUodGhpcy5hLEpEKGEsNDMpKX07dmFyIHFFPWplYihUcWUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Bc01hcC9Bc01hcEVudHJpZXMvMG1ldGhvZHJlZiR3cmFwRW50cnkkVHlwZScsMTA5Mik7WWNiKDcyOSwxLFdxZSxrZik7Xy5OYj1mdW5jdGlvbiBsZihhKXtPc2IodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBuZigpe3ZhciBhO3JldHVybiBhPUpEKHRoaXMuYi5QYigpLDQzKSx0aGlzLmE9SkQoYS5rZCgpLDE2KSxsZSh0aGlzLmMsYSl9O18uT2I9ZnVuY3Rpb24gbWYoKXtyZXR1cm4gdGhpcy5iLk9iKCl9O18uUWI9ZnVuY3Rpb24gb2YoKXtWYighIXRoaXMuYSk7dGhpcy5iLlFiKCk7dGhpcy5jLmUuZC09dGhpcy5hLmdjKCk7dGhpcy5hLiRiKCk7dGhpcy5hPW51bGx9O3ZhciBzRT1qZWIoVHFlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvQXNNYXAvQXNNYXBJdGVyYXRvcicsNzI5KTtZY2IoNTI3LDIwMTQsX3FlLHBmKTtfLiRiPWZ1bmN0aW9uIHFmKCl7dGhpcy5iLiRiKCl9O18uR2M9ZnVuY3Rpb24gcmYoYSl7cmV0dXJuIHRoaXMuYi5fYihhKX07Xy5JYz1mdW5jdGlvbiBzZihhKXtRYihhKTt0aGlzLmIud2MobmV3IGh3KGEpKX07Xy5kYz1mdW5jdGlvbiB0Zigpe3JldHVybiB0aGlzLmIuZGMoKX07Xy5KYz1mdW5jdGlvbiB1Zigpe3JldHVybiBuZXcgWXYodGhpcy5iLnZjKCkuSmMoKSl9O18uS2M9ZnVuY3Rpb24gdmYoYSl7aWYodGhpcy5iLl9iKGEpKXt0aGlzLmIuQWMoYSk7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtfLmdjPWZ1bmN0aW9uIHdmKCl7cmV0dXJuIHRoaXMuYi5nYygpfTt2YXIgakg9amViKFRxZSwnTWFwcy9LZXlTZXQnLDUyNyk7WWNiKDMyNyw1MjcsX3FlLHhmKTtfLiRiPWZ1bmN0aW9uIHlmKCl7dmFyIGE7d3IoKGE9dGhpcy5iLnZjKCkuSmMoKSxuZXcgRmYodGhpcyxhKSkpfTtfLkhjPWZ1bmN0aW9uIHpmKGEpe3JldHVybiB0aGlzLmIuZWMoKS5IYyhhKX07Xy5GYj1mdW5jdGlvbiBBZihhKXtyZXR1cm4gdGhpcz09PWF8fHBiKHRoaXMuYi5lYygpLGEpfTtfLkhiPWZ1bmN0aW9uIEJmKCl7cmV0dXJuIHRiKHRoaXMuYi5lYygpKX07Xy5KYz1mdW5jdGlvbiBDZigpe3ZhciBhO3JldHVybiBhPXRoaXMuYi52YygpLkpjKCksbmV3IEZmKHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gRGYoYSl7dmFyIGIsYztjPTA7Yj1KRCh0aGlzLmIuQWMoYSksMTYpO2lmKGIpe2M9Yi5nYygpO2IuJGIoKTt0aGlzLmEuZC09Y31yZXR1cm4gYz4wfTtfLkxjPWZ1bmN0aW9uIEVmKCl7cmV0dXJuIHRoaXMuYi5lYygpLkxjKCl9O3ZhciB3RT1qZWIoVHFlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvS2V5U2V0JywzMjcpO1ljYig3MzAsMSxXcWUsRmYpO18uTmI9ZnVuY3Rpb24gR2YoYSl7T3NiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gSGYoKXtyZXR1cm4gdGhpcy5jLk9iKCl9O18uUGI9ZnVuY3Rpb24gSWYoKXt0aGlzLmE9SkQodGhpcy5jLlBiKCksNDMpO3JldHVybiB0aGlzLmEuamQoKX07Xy5RYj1mdW5jdGlvbiBKZigpe3ZhciBhO1ZiKCEhdGhpcy5hKTthPUpEKHRoaXMuYS5rZCgpLDE2KTt0aGlzLmMuUWIoKTt0aGlzLmIuYS5kLT1hLmdjKCk7YS4kYigpO3RoaXMuYT1udWxsfTt2YXIgdkU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL0tleVNldC8xJyw3MzApO1ljYig0ODcsMzkzLHs5MToxLDEzNDoxfSxLZik7Xy5iYz1mdW5jdGlvbiBMZigpe3JldHVybiB0aGlzLlFjKCl9O18uZWM9ZnVuY3Rpb24gT2YoKXtyZXR1cm4gdGhpcy5TYygpfTtfLlFjPWZ1bmN0aW9uIE1mKCl7cmV0dXJuIG5ldyBjZyh0aGlzLmMsdGhpcy5VYygpKX07Xy5SYz1mdW5jdGlvbiBOZigpe3JldHVybiB0aGlzLlVjKCkuUmMoKX07Xy5TYz1mdW5jdGlvbiBQZigpe3ZhciBhO3JldHVybiBhPXRoaXMuYiwhYT8odGhpcy5iPXRoaXMuUWMoKSk6YX07Xy5UYz1mdW5jdGlvbiBRZigpe3JldHVybiB0aGlzLlVjKCkuVGMoKX07Xy5VYz1mdW5jdGlvbiBSZigpe3JldHVybiBKRCh0aGlzLmQsMTM0KX07dmFyIEFFPWplYihUcWUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Tb3J0ZWRBc01hcCcsNDg3KTtZY2IoNDM0LDQ4NyxhcmUsU2YpO18uYmM9ZnVuY3Rpb24gVWYoKXtyZXR1cm4gbmV3IGVnKHRoaXMuYSxKRChKRCh0aGlzLmQsMTM0KSwxMzcpKX07Xy5RYz1mdW5jdGlvbiBWZigpe3JldHVybiBuZXcgZWcodGhpcy5hLEpEKEpEKHRoaXMuZCwxMzQpLDEzNykpfTtfLmVjPWZ1bmN0aW9uIFpmKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5iLEpEKCFhPyh0aGlzLmI9bmV3IGVnKHRoaXMuYSxKRChKRCh0aGlzLmQsMTM0KSwxMzcpKSk6YSwyNzQpfTtfLlNjPWZ1bmN0aW9uICRmKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5iLEpEKCFhPyh0aGlzLmI9bmV3IGVnKHRoaXMuYSxKRChKRCh0aGlzLmQsMTM0KSwxMzcpKSk6YSwyNzQpfTtfLlVjPWZ1bmN0aW9uIGFnKCl7cmV0dXJuIEpEKEpEKHRoaXMuZCwxMzQpLDEzNyl9O18uVmM9ZnVuY3Rpb24gVGYoYSl7cmV0dXJuIEpEKEpEKHRoaXMuZCwxMzQpLDEzNykuVmMoYSl9O18uV2M9ZnVuY3Rpb24gV2YoYSl7cmV0dXJuIEpEKEpEKHRoaXMuZCwxMzQpLDEzNykuV2MoYSl9O18uWGM9ZnVuY3Rpb24gWGYoYSxiKXtyZXR1cm4gbmV3IFNmKHRoaXMuYSxKRChKRCh0aGlzLmQsMTM0KSwxMzcpLlhjKGEsYikpfTtfLlljPWZ1bmN0aW9uIFlmKGEpe3JldHVybiBKRChKRCh0aGlzLmQsMTM0KSwxMzcpLlljKGEpfTtfLlpjPWZ1bmN0aW9uIF9mKGEpe3JldHVybiBKRChKRCh0aGlzLmQsMTM0KSwxMzcpLlpjKGEpfTtfLiRjPWZ1bmN0aW9uIGJnKGEsYil7cmV0dXJuIG5ldyBTZih0aGlzLmEsSkQoSkQodGhpcy5kLDEzNCksMTM3KS4kYyhhLGIpKX07dmFyIHhFPWplYihUcWUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9OYXZpZ2FibGVBc01hcCcsNDM0KTtZY2IoNDg2LDMyNyxicmUsY2cpO18uTGM9ZnVuY3Rpb24gZGcoKXtyZXR1cm4gdGhpcy5iLmVjKCkuTGMoKX07dmFyIEJFPWplYihUcWUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9Tb3J0ZWRLZXlTZXQnLDQ4Nik7WWNiKDM5Miw0ODYsY3JlLGVnKTt2YXIgeUU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL05hdmlnYWJsZUtleVNldCcsMzkyKTtZY2IoNTM2LDMxLFpxZSxqZyk7Xy5FYz1mdW5jdGlvbiBrZyhhKXt2YXIgYixjO2dnKHRoaXMpO2M9dGhpcy5kLmRjKCk7Yj10aGlzLmQuRWMoYSk7aWYoYil7Kyt0aGlzLmYuZDtjJiZmZyh0aGlzKX1yZXR1cm4gYn07Xy5GYz1mdW5jdGlvbiBsZyhhKXt2YXIgYixjLGQ7aWYoYS5kYygpKXtyZXR1cm4gZmFsc2V9ZD0oZ2codGhpcyksdGhpcy5kLmdjKCkpO2I9dGhpcy5kLkZjKGEpO2lmKGIpe2M9dGhpcy5kLmdjKCk7dGhpcy5mLmQrPWMtZDtkPT0wJiZmZyh0aGlzKX1yZXR1cm4gYn07Xy4kYj1mdW5jdGlvbiBtZygpe3ZhciBhO2E9KGdnKHRoaXMpLHRoaXMuZC5nYygpKTtpZihhPT0wKXtyZXR1cm59dGhpcy5kLiRiKCk7dGhpcy5mLmQtPWE7aGcodGhpcyl9O18uR2M9ZnVuY3Rpb24gbmcoYSl7Z2codGhpcyk7cmV0dXJuIHRoaXMuZC5HYyhhKX07Xy5IYz1mdW5jdGlvbiBvZyhhKXtnZyh0aGlzKTtyZXR1cm4gdGhpcy5kLkhjKGEpfTtfLkZiPWZ1bmN0aW9uIHBnKGEpe2lmKGE9PT10aGlzKXtyZXR1cm4gdHJ1ZX1nZyh0aGlzKTtyZXR1cm4gcGIodGhpcy5kLGEpfTtfLkhiPWZ1bmN0aW9uIHFnKCl7Z2codGhpcyk7cmV0dXJuIHRiKHRoaXMuZCl9O18uSmM9ZnVuY3Rpb24gcmcoKXtnZyh0aGlzKTtyZXR1cm4gbmV3IE1nKHRoaXMpfTtfLktjPWZ1bmN0aW9uIHNnKGEpe3ZhciBiO2dnKHRoaXMpO2I9dGhpcy5kLktjKGEpO2lmKGIpey0tdGhpcy5mLmQ7aGcodGhpcyl9cmV0dXJuIGJ9O18uZ2M9ZnVuY3Rpb24gdGcoKXtyZXR1cm4gaWcodGhpcyl9O18uTGM9ZnVuY3Rpb24gdWcoKXtyZXR1cm4gZ2codGhpcyksdGhpcy5kLkxjKCl9O18uSWI9ZnVuY3Rpb24gdmcoKXtnZyh0aGlzKTtyZXR1cm4gYWRiKHRoaXMuZCl9O3ZhciBERT1qZWIoVHFlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24nLDUzNik7dmFyIEhLPWxlYihYcWUsJ0xpc3QnKTtZY2IoNzI3LDUzNix7MjA6MSwzMToxLDE2OjEsMTU6MX0sd2cpO18uZ2Q9ZnVuY3Rpb24gRmcoYSl7aHViKHRoaXMsYSl9O18uTGM9ZnVuY3Rpb24gR2coKXtyZXR1cm4gZ2codGhpcyksdGhpcy5kLkxjKCl9O18uX2M9ZnVuY3Rpb24geGcoYSxiKXt2YXIgYztnZyh0aGlzKTtjPXRoaXMuZC5kYygpO0pEKHRoaXMuZCwxNSkuX2MoYSxiKTsrK3RoaXMuYS5kO2MmJmZnKHRoaXMpfTtfLmFkPWZ1bmN0aW9uIHlnKGEsYil7dmFyIGMsZCxlO2lmKGIuZGMoKSl7cmV0dXJuIGZhbHNlfWU9KGdnKHRoaXMpLHRoaXMuZC5nYygpKTtjPUpEKHRoaXMuZCwxNSkuYWQoYSxiKTtpZihjKXtkPXRoaXMuZC5nYygpO3RoaXMuYS5kKz1kLWU7ZT09MCYmZmcodGhpcyl9cmV0dXJuIGN9O18uWGI9ZnVuY3Rpb24gemcoYSl7Z2codGhpcyk7cmV0dXJuIEpEKHRoaXMuZCwxNSkuWGIoYSl9O18uYmQ9ZnVuY3Rpb24gQWcoYSl7Z2codGhpcyk7cmV0dXJuIEpEKHRoaXMuZCwxNSkuYmQoYSl9O18uY2Q9ZnVuY3Rpb24gQmcoKXtnZyh0aGlzKTtyZXR1cm4gbmV3IFNnKHRoaXMpfTtfLmRkPWZ1bmN0aW9uIENnKGEpe2dnKHRoaXMpO3JldHVybiBuZXcgVGcodGhpcyxhKX07Xy5lZD1mdW5jdGlvbiBEZyhhKXt2YXIgYjtnZyh0aGlzKTtiPUpEKHRoaXMuZCwxNSkuZWQoYSk7LS10aGlzLmEuZDtoZyh0aGlzKTtyZXR1cm4gYn07Xy5mZD1mdW5jdGlvbiBFZyhhLGIpe2dnKHRoaXMpO3JldHVybiBKRCh0aGlzLmQsMTUpLmZkKGEsYil9O18uaGQ9ZnVuY3Rpb24gSGcoYSxiKXtnZyh0aGlzKTtyZXR1cm4gVmModGhpcy5hLHRoaXMuZSxKRCh0aGlzLmQsMTUpLmhkKGEsYiksIXRoaXMuYj90aGlzOnRoaXMuYil9O3ZhciBGRT1qZWIoVHFlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZExpc3QnLDcyNyk7WWNiKDEwOTAsNzI3LHsyMDoxLDMxOjEsMTY6MSwxNToxLDU5OjF9LElnKTt2YXIgekU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1JhbmRvbUFjY2Vzc1dyYXBwZWRMaXN0JywxMDkwKTtZY2IoNjEzLDEsV3FlLE1nKTtfLk5iPWZ1bmN0aW9uIE9nKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIFBnKCl7TGcodGhpcyk7cmV0dXJuIHRoaXMuYi5PYigpfTtfLlBiPWZ1bmN0aW9uIFFnKCl7TGcodGhpcyk7cmV0dXJuIHRoaXMuYi5QYigpfTtfLlFiPWZ1bmN0aW9uIFJnKCl7S2codGhpcyl9O3ZhciBDRT1qZWIoVHFlLCdBYnN0cmFjdE1hcEJhc2VkTXVsdGltYXAvV3JhcHBlZENvbGxlY3Rpb24vV3JhcHBlZEl0ZXJhdG9yJyw2MTMpO1ljYig3MjgsNjEzLGRyZSxTZyxUZyk7Xy5RYj1mdW5jdGlvbiBaZygpe0tnKHRoaXMpfTtfLlJiPWZ1bmN0aW9uIFVnKGEpe3ZhciBiO2I9aWcodGhpcy5hKT09MDsoTGcodGhpcyksSkQodGhpcy5iLDEyNykpLlJiKGEpOysrdGhpcy5hLmEuZDtiJiZmZyh0aGlzLmEpfTtfLlNiPWZ1bmN0aW9uIFZnKCl7cmV0dXJuIChMZyh0aGlzKSxKRCh0aGlzLmIsMTI3KSkuU2IoKX07Xy5UYj1mdW5jdGlvbiBXZygpe3JldHVybiAoTGcodGhpcyksSkQodGhpcy5iLDEyNykpLlRiKCl9O18uVWI9ZnVuY3Rpb24gWGcoKXtyZXR1cm4gKExnKHRoaXMpLEpEKHRoaXMuYiwxMjcpKS5VYigpfTtfLlZiPWZ1bmN0aW9uIFlnKCl7cmV0dXJuIChMZyh0aGlzKSxKRCh0aGlzLmIsMTI3KSkuVmIoKX07Xy5XYj1mdW5jdGlvbiAkZyhhKXsoTGcodGhpcyksSkQodGhpcy5iLDEyNykpLldiKGEpfTt2YXIgRUU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRMaXN0L1dyYXBwZWRMaXN0SXRlcmF0b3InLDcyOCk7WWNiKDcyNiw1MzYsYnJlLF9nKTtfLkxjPWZ1bmN0aW9uIGFoKCl7cmV0dXJuIGdnKHRoaXMpLHRoaXMuZC5MYygpfTt2YXIgSUU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTb3J0ZWRTZXQnLDcyNik7WWNiKDEwODksNzI2LGNyZSxiaCk7dmFyIEdFPWplYihUcWUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9XcmFwcGVkTmF2aWdhYmxlU2V0JywxMDg5KTtZY2IoMTA4OCw1MzYsX3FlLGRoKTtfLkxjPWZ1bmN0aW9uIGVoKCl7cmV0dXJuIGdnKHRoaXMpLHRoaXMuZC5MYygpfTt2YXIgSEU9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL1dyYXBwZWRTZXQnLDEwODgpO1ljYigxMDk3LDEse30sZmgpO18uS2I9ZnVuY3Rpb24gZ2goYSl7cmV0dXJuIGZkKEpEKGEsNDMpKX07dmFyIEpFPWplYihUcWUsJ0Fic3RyYWN0TWFwQmFzZWRNdWx0aW1hcC9sYW1iZGEkMSRUeXBlJywxMDk3KTtZY2IoMTA5NiwxLHt9LGhoKTtfLktiPWZ1bmN0aW9uIGloKGEpe3JldHVybiBuZXcgY3AodGhpcy5hLGEpfTt2YXIgS0U9amViKFRxZSwnQWJzdHJhY3RNYXBCYXNlZE11bHRpbWFwL2xhbWJkYSQyJFR5cGUnLDEwOTYpO3ZhciBMSz1sZWIoWHFlLCdNYXAvRW50cnknKTtZY2IoMzU1LDEsZXJlKTtfLkZiPWZ1bmN0aW9uIGpoKGEpe3ZhciBiO2lmKFJEKGEsNDMpKXtiPUpEKGEsNDMpO3JldHVybiBIYih0aGlzLmpkKCksYi5qZCgpKSYmSGIodGhpcy5rZCgpLGIua2QoKSl9cmV0dXJuIGZhbHNlfTtfLkhiPWZ1bmN0aW9uIGtoKCl7dmFyIGEsYjthPXRoaXMuamQoKTtiPXRoaXMua2QoKTtyZXR1cm4gKGE9PW51bGw/MDp0YihhKSleKGI9PW51bGw/MDp0YihiKSl9O18ubGQ9ZnVuY3Rpb24gbGgoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLkliPWZ1bmN0aW9uIG1oKCl7cmV0dXJuIHRoaXMuamQoKSsnPScrdGhpcy5rZCgpfTt2YXIgTUU9amViKFRxZSxmcmUsMzU1KTtZY2IoMjAzMiwzMSxacWUpO18uJGI9ZnVuY3Rpb24gbmgoKXt0aGlzLm1kKCkuJGIoKX07Xy5HYz1mdW5jdGlvbiBvaChhKXt2YXIgYjtpZihSRChhLDQzKSl7Yj1KRChhLDQzKTtyZXR1cm4gQ2ModGhpcy5tZCgpLGIuamQoKSxiLmtkKCkpfXJldHVybiBmYWxzZX07Xy5LYz1mdW5jdGlvbiBwaChhKXt2YXIgYjtpZihSRChhLDQzKSl7Yj1KRChhLDQzKTtyZXR1cm4gR2ModGhpcy5tZCgpLGIuamQoKSxiLmtkKCkpfXJldHVybiBmYWxzZX07Xy5nYz1mdW5jdGlvbiBxaCgpe3JldHVybiB0aGlzLm1kKCkuZH07dmFyIHFIPWplYihUcWUsJ011bHRpbWFwcy9FbnRyaWVzJywyMDMyKTtZY2IoNzMyLDIwMzIsWnFlLHJoKTtfLkpjPWZ1bmN0aW9uIHNoKCl7cmV0dXJuIHRoaXMuYS5rYygpfTtfLm1kPWZ1bmN0aW9uIHRoKCl7cmV0dXJuIHRoaXMuYX07Xy5MYz1mdW5jdGlvbiB1aCgpe3JldHVybiB0aGlzLmEubGMoKX07dmFyIE5FPWplYihUcWUsJ0Fic3RyYWN0TXVsdGltYXAvRW50cmllcycsNzMyKTtZY2IoNzMzLDczMixfcWUsdmgpO18uTGM9ZnVuY3Rpb24geWgoKXtyZXR1cm4gdGhpcy5hLmxjKCl9O18uRmI9ZnVuY3Rpb24gd2goYSl7cmV0dXJuIE54KHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24geGgoKXtyZXR1cm4gT3godGhpcyl9O3ZhciBPRT1qZWIoVHFlLCdBYnN0cmFjdE11bHRpbWFwL0VudHJ5U2V0Jyw3MzMpO1ljYig3MzQsMzEsWnFlLHpoKTtfLiRiPWZ1bmN0aW9uIEFoKCl7dGhpcy5hLiRiKCl9O18uR2M9ZnVuY3Rpb24gQmgoYSl7cmV0dXJuIERjKHRoaXMuYSxhKX07Xy5KYz1mdW5jdGlvbiBDaCgpe3JldHVybiB0aGlzLmEubmMoKX07Xy5nYz1mdW5jdGlvbiBEaCgpe3JldHVybiB0aGlzLmEuZH07Xy5MYz1mdW5jdGlvbiBFaCgpe3JldHVybiB0aGlzLmEub2MoKX07dmFyIFBFPWplYihUcWUsJ0Fic3RyYWN0TXVsdGltYXAvVmFsdWVzJyw3MzQpO1ljYigyMDMzLDMxLHs4Mjg6MSwyMDoxLDMxOjEsMTY6MX0pO18uSWM9ZnVuY3Rpb24gTWgoYSl7UWIoYSk7R2godGhpcykuSWMobmV3IGh4KGEpKX07Xy5MYz1mdW5jdGlvbiBRaCgpe3ZhciBhO3JldHVybiBhPUdoKHRoaXMpLkxjKCksY2soYSxuZXcgb3gsNjR8YS53ZCgpJjEyOTYsdGhpcy5hLmQpfTtfLkVjPWZ1bmN0aW9uIEloKGEpe0ZoKCk7cmV0dXJuIHRydWV9O18uRmM9ZnVuY3Rpb24gSmgoYSl7cmV0dXJuIFFiKHRoaXMpLFFiKGEpLFJEKGEsNTM3KT9qeChKRChhLDgyOCkpOiFhLmRjKCkmJnRyKHRoaXMsYS5KYygpKX07Xy5HYz1mdW5jdGlvbiBLaChhKXt2YXIgYjtyZXR1cm4gYj1KRChUdihuZCh0aGlzLmEpLGEpLDE2KSwoIWI/MDpiLmdjKCkpPjB9O18uRmI9ZnVuY3Rpb24gTGgoYSl7cmV0dXJuIGt4KHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24gTmgoKXtyZXR1cm4gdGIoR2godGhpcykpfTtfLmRjPWZ1bmN0aW9uIE9oKCl7cmV0dXJuIEdoKHRoaXMpLmRjKCl9O18uS2M9ZnVuY3Rpb24gUGgoYSl7cmV0dXJuIE53KHRoaXMsYSwxKT4wfTtfLkliPWZ1bmN0aW9uIFJoKCl7cmV0dXJuIGFkYihHaCh0aGlzKSl9O3ZhciBTRT1qZWIoVHFlLCdBYnN0cmFjdE11bHRpc2V0JywyMDMzKTtZY2IoMjAzNSwyMDE0LF9xZSk7Xy4kYj1mdW5jdGlvbiBTaCgpe05jKHRoaXMuYS5hKX07Xy5HYz1mdW5jdGlvbiBUaChhKXt2YXIgYixjO2lmKFJEKGEsNDg4KSl7Yz1KRChhLDQxMyk7aWYoSkQoYy5hLmtkKCksMTYpLmdjKCk8PTApe3JldHVybiBmYWxzZX1iPU13KHRoaXMuYSxjLmEuamQoKSk7cmV0dXJuIGI9PUpEKGMuYS5rZCgpLDE2KS5nYygpfXJldHVybiBmYWxzZX07Xy5LYz1mdW5jdGlvbiBVaChhKXt2YXIgYixjLGQsZTtpZihSRChhLDQ4OCkpe2M9SkQoYSw0MTMpO2I9Yy5hLmpkKCk7ZD1KRChjLmEua2QoKSwxNikuZ2MoKTtpZihkIT0wKXtlPXRoaXMuYTtyZXR1cm4gbXgoZSxiLGQpfX1yZXR1cm4gZmFsc2V9O3ZhciBBSD1qZWIoVHFlLCdNdWx0aXNldHMvRW50cnlTZXQnLDIwMzUpO1ljYigxMTAzLDIwMzUsX3FlLFZoKTtfLkpjPWZ1bmN0aW9uIFdoKCl7cmV0dXJuIG5ldyBYdyhlZShuZCh0aGlzLmEuYSkpLkpjKCkpfTtfLmdjPWZ1bmN0aW9uIFhoKCl7cmV0dXJuIG5kKHRoaXMuYS5hKS5nYygpfTt2YXIgUkU9amViKFRxZSwnQWJzdHJhY3RNdWx0aXNldC9FbnRyeVNldCcsMTEwMyk7WWNiKDYxMiw3MjUsVnFlKTtfLmhjPWZ1bmN0aW9uICRoKCl7cmV0dXJuIHRoaXMubmQoKX07Xy5qYz1mdW5jdGlvbiBfaCgpe3JldHVybiB0aGlzLm9kKCl9O18uY2M9ZnVuY3Rpb24gY2koYSl7cmV0dXJuIHRoaXMucGQoYSl9O18uZmM9ZnVuY3Rpb24gZWkoYSl7cmV0dXJuIHRoaXMucWQoYSl9O18uWmI9ZnVuY3Rpb24gWmgoKXt2YXIgYTtyZXR1cm4gYT10aGlzLmYsIWE/KHRoaXMuZj10aGlzLmFjKCkpOmF9O18ub2Q9ZnVuY3Rpb24gYWkoKXtyZXR1cm4gcG5iKCkscG5iKCksb25ifTtfLkZiPWZ1bmN0aW9uIGJpKGEpe3JldHVybiB0dyh0aGlzLGEpfTtfLnBkPWZ1bmN0aW9uIGRpKGEpe3JldHVybiBKRChRYyh0aGlzLGEpLDIyKX07Xy5xZD1mdW5jdGlvbiBmaShhKXtyZXR1cm4gSkQoU2ModGhpcyxhKSwyMil9O18ubWM9ZnVuY3Rpb24gZ2koYSl7cmV0dXJuIHBuYigpLG5ldyBBcGIoSkQoYSwyMikpfTtfLnBjPWZ1bmN0aW9uIGhpKGEsYil7cmV0dXJuIG5ldyBkaCh0aGlzLGEsSkQoYiwyMikpfTt2YXIgVEU9amViKFRxZSwnQWJzdHJhY3RTZXRNdWx0aW1hcCcsNjEyKTtZY2IoMTY2NSw2MTIsVnFlKTtfLmhjPWZ1bmN0aW9uIGtpKCl7cmV0dXJuIG5ldyBtemIodGhpcy5iKX07Xy5uZD1mdW5jdGlvbiBsaSgpe3JldHVybiBuZXcgbXpiKHRoaXMuYil9O18uamM9ZnVuY3Rpb24gbWkoKXtyZXR1cm4gVngobmV3IG16Yih0aGlzLmIpKX07Xy5vZD1mdW5jdGlvbiBuaSgpe3JldHVybiBWeChuZXcgbXpiKHRoaXMuYikpfTtfLmNjPWZ1bmN0aW9uIG9pKGEpe3JldHVybiBKRChKRChRYyh0aGlzLGEpLDIyKSw4Myl9O18ucGQ9ZnVuY3Rpb24gcGkoYSl7cmV0dXJuIEpEKEpEKFFjKHRoaXMsYSksMjIpLDgzKX07Xy5mYz1mdW5jdGlvbiBxaShhKXtyZXR1cm4gSkQoSkQoU2ModGhpcyxhKSwyMiksODMpfTtfLnFkPWZ1bmN0aW9uIHJpKGEpe3JldHVybiBKRChKRChTYyh0aGlzLGEpLDIyKSw4Myl9O18ubWM9ZnVuY3Rpb24gc2koYSl7cmV0dXJuIFJEKGEsMjc0KT9WeChKRChhLDI3NCkpOihwbmIoKSxuZXcgJHBiKEpEKGEsODMpKSl9O18uWmI9ZnVuY3Rpb24gamkoKXt2YXIgYTtyZXR1cm4gYT10aGlzLmYsIWE/KHRoaXMuZj1SRCh0aGlzLmMsMTM3KT9uZXcgU2YodGhpcyxKRCh0aGlzLmMsMTM3KSk6UkQodGhpcy5jLDEzNCk/bmV3IEtmKHRoaXMsSkQodGhpcy5jLDEzNCkpOm5ldyBtZSh0aGlzLHRoaXMuYykpOmF9O18ucGM9ZnVuY3Rpb24gdGkoYSxiKXtyZXR1cm4gUkQoYiwyNzQpP25ldyBiaCh0aGlzLGEsSkQoYiwyNzQpKTpuZXcgX2codGhpcyxhLEpEKGIsODMpKX07dmFyIFZFPWplYihUcWUsJ0Fic3RyYWN0U29ydGVkU2V0TXVsdGltYXAnLDE2NjUpO1ljYigxNjY2LDE2NjUsVnFlKTtfLlpiPWZ1bmN0aW9uIHZpKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5mLEpEKEpEKCFhPyh0aGlzLmY9UkQodGhpcy5jLDEzNyk/bmV3IFNmKHRoaXMsSkQodGhpcy5jLDEzNykpOlJEKHRoaXMuYywxMzQpP25ldyBLZih0aGlzLEpEKHRoaXMuYywxMzQpKTpuZXcgbWUodGhpcyx0aGlzLmMpKTphLDEzNCksMTM3KX07Xy5lYz1mdW5jdGlvbiB4aSgpe3ZhciBhO3JldHVybiBhPXRoaXMuaSxKRChKRCghYT8odGhpcy5pPVJEKHRoaXMuYywxMzcpP25ldyBlZyh0aGlzLEpEKHRoaXMuYywxMzcpKTpSRCh0aGlzLmMsMTM0KT9uZXcgY2codGhpcyxKRCh0aGlzLmMsMTM0KSk6bmV3IHhmKHRoaXMsdGhpcy5jKSk6YSw4MyksMjc0KX07Xy5iYz1mdW5jdGlvbiB3aSgpe3JldHVybiBSRCh0aGlzLmMsMTM3KT9uZXcgZWcodGhpcyxKRCh0aGlzLmMsMTM3KSk6UkQodGhpcy5jLDEzNCk/bmV3IGNnKHRoaXMsSkQodGhpcy5jLDEzNCkpOm5ldyB4Zih0aGlzLHRoaXMuYyl9O3ZhciBVRT1qZWIoVHFlLCdBYnN0cmFjdFNvcnRlZEtleVNvcnRlZFNldE11bHRpbWFwJywxNjY2KTtZY2IoMjA1NSwxLHsxOTkyOjF9KTtfLkZiPWZ1bmN0aW9uIHlpKGEpe3JldHVybiBJeSh0aGlzLGEpfTtfLkhiPWZ1bmN0aW9uIHppKCl7dmFyIGE7cmV0dXJuIHNuYigoYT10aGlzLmcsIWE/KHRoaXMuZz1uZXcgQmkodGhpcykpOmEpKX07Xy5JYj1mdW5jdGlvbiBBaSgpe3ZhciBhO3JldHVybiBNZCgoYT10aGlzLmYsIWE/KHRoaXMuZj1uZXcgWGoodGhpcykpOmEpKX07dmFyIFlFPWplYihUcWUsJ0Fic3RyYWN0VGFibGUnLDIwNTUpO1ljYig2NjQsJHFlLF9xZSxCaSk7Xy4kYj1mdW5jdGlvbiBDaSgpe1ZpKCl9O18uR2M9ZnVuY3Rpb24gRGkoYSl7dmFyIGIsYztpZihSRChhLDQ2NSkpe2I9SkQoYSw2ODIpO2M9SkQoVHYoX2kodGhpcy5hKSxObShiLmMuZSxiLmIpKSw5MSk7cmV0dXJuICEhYyYmTGsoYy52YygpLG5ldyBjcChObShiLmMuYyxiLmEpLFNpKGIuYyxiLmIsYi5hKSkpfXJldHVybiBmYWxzZX07Xy5KYz1mdW5jdGlvbiBFaSgpe3JldHVybiBUaSh0aGlzLmEpfTtfLktjPWZ1bmN0aW9uIEZpKGEpe3ZhciBiLGM7aWYoUkQoYSw0NjUpKXtiPUpEKGEsNjgyKTtjPUpEKFR2KF9pKHRoaXMuYSksTm0oYi5jLmUsYi5iKSksOTEpO3JldHVybiAhIWMmJk1rKGMudmMoKSxuZXcgY3AoTm0oYi5jLmMsYi5hKSxTaShiLmMsYi5iLGIuYSkpKX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24gR2koKXtyZXR1cm4gYmoodGhpcy5hKX07Xy5MYz1mdW5jdGlvbiBIaSgpe3JldHVybiBVaSh0aGlzLmEpfTt2YXIgV0U9amViKFRxZSwnQWJzdHJhY3RUYWJsZS9DZWxsU2V0Jyw2NjQpO1ljYigxOTcxLDMxLFpxZSxJaSk7Xy4kYj1mdW5jdGlvbiBKaSgpe1ZpKCl9O18uR2M9ZnVuY3Rpb24gS2koYSl7cmV0dXJuIFdpKHRoaXMuYSxhKX07Xy5KYz1mdW5jdGlvbiBMaSgpe3JldHVybiBkaih0aGlzLmEpfTtfLmdjPWZ1bmN0aW9uIE1pKCl7cmV0dXJuIGJqKHRoaXMuYSl9O18uTGM9ZnVuY3Rpb24gTmkoKXtyZXR1cm4gZWoodGhpcy5hKX07dmFyIFhFPWplYihUcWUsJ0Fic3RyYWN0VGFibGUvVmFsdWVzJywxOTcxKTtZY2IoMTYzOCwxNjM3LFZxZSk7dmFyIFpFPWplYihUcWUsJ0FycmF5TGlzdE11bHRpbWFwR3d0U2VyaWFsaXphdGlvbkRlcGVuZGVuY2llcycsMTYzOCk7WWNiKDUwNCwxNjM4LFZxZSxQaSxRaSk7Xy5oYz1mdW5jdGlvbiBSaSgpe3JldHVybiBuZXcgVmxiKHRoaXMuYSl9O18uYT0wO3ZhciAkRT1qZWIoVHFlLCdBcnJheUxpc3RNdWx0aW1hcCcsNTA0KTtZY2IoNjYzLDIwNTUsezY2MzoxLDE5OTI6MSwzOjF9LGZqKTt2YXIga0Y9amViKFRxZSwnQXJyYXlUYWJsZScsNjYzKTtZY2IoMTk2NywzOTAsVXFlLGdqKTtfLlhiPWZ1bmN0aW9uIGhqKGEpe3JldHVybiBuZXcgbmoodGhpcy5hLGEpfTt2YXIgX0U9amViKFRxZSwnQXJyYXlUYWJsZS8xJywxOTY3KTtZY2IoMTk2OCwxLHt9LGlqKTtfLnJkPWZ1bmN0aW9uIGpqKGEpe3JldHVybiBuZXcgbmoodGhpcy5hLGEpfTt2YXIgYUY9amViKFRxZSwnQXJyYXlUYWJsZS8xbWV0aG9kcmVmJGdldENlbGwkVHlwZScsMTk2OCk7WWNiKDIwNTYsMSx7NjgyOjF9KTtfLkZiPWZ1bmN0aW9uIGtqKGEpe3ZhciBiO2lmKGE9PT10aGlzKXtyZXR1cm4gdHJ1ZX1pZihSRChhLDQ2NSkpe2I9SkQoYSw2ODIpO3JldHVybiBIYihObSh0aGlzLmMuZSx0aGlzLmIpLE5tKGIuYy5lLGIuYikpJiZIYihObSh0aGlzLmMuYyx0aGlzLmEpLE5tKGIuYy5jLGIuYSkpJiZIYihTaSh0aGlzLmMsdGhpcy5iLHRoaXMuYSksU2koYi5jLGIuYixiLmEpKX1yZXR1cm4gZmFsc2V9O18uSGI9ZnVuY3Rpb24gbGooKXtyZXR1cm4gS21iKFdDKE9DKGFKLDEpLE5xZSwxLDUsW05tKHRoaXMuYy5lLHRoaXMuYiksTm0odGhpcy5jLmMsdGhpcy5hKSxTaSh0aGlzLmMsdGhpcy5iLHRoaXMuYSldKSl9O18uSWI9ZnVuY3Rpb24gbWooKXtyZXR1cm4gJygnK05tKHRoaXMuYy5lLHRoaXMuYikrJywnK05tKHRoaXMuYy5jLHRoaXMuYSkrJyk9JytTaSh0aGlzLmMsdGhpcy5iLHRoaXMuYSl9O3ZhciBUSD1qZWIoVHFlLCdUYWJsZXMvQWJzdHJhY3RDZWxsJywyMDU2KTtZY2IoNDY1LDIwNTYsezQ2NToxLDY4MjoxfSxuaik7Xy5hPTA7Xy5iPTA7Xy5kPTA7dmFyIGJGPWplYihUcWUsJ0FycmF5VGFibGUvMicsNDY1KTtZY2IoMTk3MCwxLHt9LG9qKTtfLnJkPWZ1bmN0aW9uIHBqKGEpe3JldHVybiBaaSh0aGlzLmEsYSl9O3ZhciBjRj1qZWIoVHFlLCdBcnJheVRhYmxlLzJtZXRob2RyZWYkZ2V0VmFsdWUkVHlwZScsMTk3MCk7WWNiKDE5NjksMzkwLFVxZSxxaik7Xy5YYj1mdW5jdGlvbiByaihhKXtyZXR1cm4gWmkodGhpcy5hLGEpfTt2YXIgZEY9amViKFRxZSwnQXJyYXlUYWJsZS8zJywxOTY5KTtZY2IoMjAyMywyMDExLFlxZSk7Xy4kYj1mdW5jdGlvbiB0aigpe3dyKHRoaXMua2MoKSl9O18udmM9ZnVuY3Rpb24gdWooKXtyZXR1cm4gbmV3IGN3KHRoaXMpfTtfLmxjPWZ1bmN0aW9uIHZqKCl7cmV0dXJuIG5ldyBJdmIodGhpcy5rYygpLHRoaXMuZ2MoKSl9O3ZhciBoSD1qZWIoVHFlLCdNYXBzL0l0ZXJhdG9yQmFzZWRBYnN0cmFjdE1hcCcsMjAyMyk7WWNiKDgyMSwyMDIzLFlxZSk7Xy4kYj1mdW5jdGlvbiB6aigpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5fYj1mdW5jdGlvbiBBaihhKXtyZXR1cm4gQW4odGhpcy5jLGEpfTtfLmtjPWZ1bmN0aW9uIEJqKCl7cmV0dXJuIG5ldyBQaih0aGlzLHRoaXMuYy5iLmMuZ2MoKSl9O18ubGM9ZnVuY3Rpb24gQ2ooKXtyZXR1cm4gZGsodGhpcy5jLmIuYy5nYygpLDE2LG5ldyBKaih0aGlzKSl9O18ueGM9ZnVuY3Rpb24gRGooYSl7dmFyIGI7Yj1KRChCbih0aGlzLmMsYSksMTcpO3JldHVybiAhYj9udWxsOnRoaXMudGQoYi5hKX07Xy5kYz1mdW5jdGlvbiBFaigpe3JldHVybiB0aGlzLmMuYi5jLmRjKCl9O18uZWM9ZnVuY3Rpb24gRmooKXtyZXR1cm4gZW4odGhpcy5jKX07Xy55Yz1mdW5jdGlvbiBHaihhLGIpe3ZhciBjO2M9SkQoQm4odGhpcy5jLGEpLDE3KTtpZighYyl7dGhyb3cgc2NiKG5ldyBUZWIodGhpcy5zZCgpKycgJythKycgbm90IGluICcrZW4odGhpcy5jKSkpfXJldHVybiB0aGlzLnVkKGMuYSxiKX07Xy5BYz1mdW5jdGlvbiBIaihhKXt0aHJvdyBzY2IobmV3IGFoYil9O18uZ2M9ZnVuY3Rpb24gSWooKXtyZXR1cm4gdGhpcy5jLmIuYy5nYygpfTt2YXIgaEY9amViKFRxZSwnQXJyYXlUYWJsZS9BcnJheU1hcCcsODIxKTtZY2IoMTk2NiwxLHt9LEpqKTtfLnJkPWZ1bmN0aW9uIEtqKGEpe3JldHVybiB3aih0aGlzLmEsYSl9O3ZhciBlRj1qZWIoVHFlLCdBcnJheVRhYmxlL0FycmF5TWFwLzBtZXRob2RyZWYkZ2V0RW50cnkkVHlwZScsMTk2Nik7WWNiKDE5NjQsMzU1LGVyZSxMaik7Xy5qZD1mdW5jdGlvbiBNaigpe3JldHVybiB4aih0aGlzLmEsdGhpcy5iKX07Xy5rZD1mdW5jdGlvbiBOaigpe3JldHVybiB0aGlzLmEudGQodGhpcy5iKX07Xy5sZD1mdW5jdGlvbiBPaihhKXtyZXR1cm4gdGhpcy5hLnVkKHRoaXMuYixhKX07Xy5iPTA7dmFyIGZGPWplYihUcWUsJ0FycmF5VGFibGUvQXJyYXlNYXAvMScsMTk2NCk7WWNiKDE5NjUsMzkwLFVxZSxQaik7Xy5YYj1mdW5jdGlvbiBRaihhKXtyZXR1cm4gd2oodGhpcy5hLGEpfTt2YXIgZ0Y9amViKFRxZSwnQXJyYXlUYWJsZS9BcnJheU1hcC8yJywxOTY1KTtZY2IoMTk2Myw4MjEsWXFlLFJqKTtfLnNkPWZ1bmN0aW9uIFNqKCl7cmV0dXJuICdDb2x1bW4nfTtfLnRkPWZ1bmN0aW9uIFRqKGEpe3JldHVybiBTaSh0aGlzLmIsdGhpcy5hLGEpfTtfLnVkPWZ1bmN0aW9uIFVqKGEsYil7cmV0dXJuIGFqKHRoaXMuYix0aGlzLmEsYSxiKX07Xy5hPTA7dmFyIGpGPWplYihUcWUsJ0FycmF5VGFibGUvUm93JywxOTYzKTtZY2IoODIyLDgyMSxZcWUsWGopO18udGQ9ZnVuY3Rpb24gWmooYSl7cmV0dXJuIG5ldyBSaih0aGlzLmEsYSl9O18ueWM9ZnVuY3Rpb24gJGooYSxiKXtyZXR1cm4gSkQoYiw5MSksVmooKX07Xy51ZD1mdW5jdGlvbiBfaihhLGIpe3JldHVybiBKRChiLDkxKSxXaigpfTtfLnNkPWZ1bmN0aW9uIFlqKCl7cmV0dXJuICdSb3cnfTt2YXIgaUY9amViKFRxZSwnQXJyYXlUYWJsZS9Sb3dNYXAnLDgyMik7WWNiKDExMjEsMSxqcmUsZmspO18ueWQ9ZnVuY3Rpb24gamsoYSl7cmV0dXJuICh0aGlzLmEud2QoKSYtMjYyJmEpIT0wfTtfLndkPWZ1bmN0aW9uIGdrKCl7cmV0dXJuIHRoaXMuYS53ZCgpJi0yNjJ9O18ueGQ9ZnVuY3Rpb24gaGsoKXtyZXR1cm4gdGhpcy5hLnhkKCl9O18uTmI9ZnVuY3Rpb24gaWsoYSl7dGhpcy5hLk5iKG5ldyBuayhhLHRoaXMuYikpfTtfLnpkPWZ1bmN0aW9uIGtrKGEpe3JldHVybiB0aGlzLmEuemQobmV3IGxrKGEsdGhpcy5iKSl9O3ZhciBxRj1qZWIoVHFlLCdDb2xsZWN0U3BsaXRlcmF0b3JzLzEnLDExMjEpO1ljYigxMTIyLDEsa3JlLGxrKTtfLkFkPWZ1bmN0aW9uIG1rKGEpe3RoaXMuYS5BZCh0aGlzLmIuS2IoYSkpfTt2YXIgbEY9amViKFRxZSwnQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQwJFR5cGUnLDExMjIpO1ljYigxMTIzLDEsa3JlLG5rKTtfLkFkPWZ1bmN0aW9uIG9rKGEpe3RoaXMuYS5BZCh0aGlzLmIuS2IoYSkpfTt2YXIgbUY9amViKFRxZSwnQ29sbGVjdFNwbGl0ZXJhdG9ycy8xL2xhbWJkYSQxJFR5cGUnLDExMjMpO1ljYigxMTE4LDEsanJlLHBrKTtfLnlkPWZ1bmN0aW9uIHRrKGEpe3JldHVybiAoKDE2NDY0fHRoaXMuYikmYSkhPTB9O18ud2Q9ZnVuY3Rpb24gcWsoKXtyZXR1cm4gMTY0NjR8dGhpcy5ifTtfLnhkPWZ1bmN0aW9uIHJrKCl7cmV0dXJuIHRoaXMuYS54ZCgpfTtfLk5iPWZ1bmN0aW9uIHNrKGEpe3RoaXMuYS5PZShuZXcgeGsoYSx0aGlzLmMpKX07Xy56ZD1mdW5jdGlvbiB1ayhhKXtyZXR1cm4gdGhpcy5hLlBlKG5ldyB2ayhhLHRoaXMuYykpfTtfLmI9MDt2YXIgcEY9amViKFRxZSwnQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcycsMTExOCk7WWNiKDExMTksMSxscmUsdmspO18uQmQ9ZnVuY3Rpb24gd2soYSl7dGhpcy5hLkFkKHRoaXMuYi5yZChhKSl9O3ZhciBuRj1qZWIoVHFlLCdDb2xsZWN0U3BsaXRlcmF0b3JzLzFXaXRoQ2hhcmFjdGVyaXN0aWNzL2xhbWJkYSQwJFR5cGUnLDExMTkpO1ljYigxMTIwLDEsbHJlLHhrKTtfLkJkPWZ1bmN0aW9uIHlrKGEpe3RoaXMuYS5BZCh0aGlzLmIucmQoYSkpfTt2YXIgb0Y9amViKFRxZSwnQ29sbGVjdFNwbGl0ZXJhdG9ycy8xV2l0aENoYXJhY3RlcmlzdGljcy9sYW1iZGEkMSRUeXBlJywxMTIwKTtZY2IoMTExNCwxLGpyZSk7Xy55ZD1mdW5jdGlvbiBFayhhKXtyZXR1cm4gKHRoaXMuYSZhKSE9MH07Xy53ZD1mdW5jdGlvbiBCaygpe3JldHVybiB0aGlzLmF9O18ueGQ9ZnVuY3Rpb24gQ2soKXshIXRoaXMuZSYmKHRoaXMuYj1CZmIodGhpcy5iLHRoaXMuZS54ZCgpKSk7cmV0dXJuIEJmYih0aGlzLmIsMCl9O18uTmI9ZnVuY3Rpb24gRGsoYSl7aWYodGhpcy5lKXt0aGlzLmUuTmIoYSk7dGhpcy5lPW51bGx9dGhpcy5jLk5iKG5ldyBJayh0aGlzLGEpKTt0aGlzLmI9MH07Xy56ZD1mdW5jdGlvbiBGayhhKXt3aGlsZSh0cnVlKXtpZighIXRoaXMuZSYmdGhpcy5lLnpkKGEpKXtIY2IodGhpcy5iLG1yZSkmJih0aGlzLmI9TWNiKHRoaXMuYiwxKSk7cmV0dXJuIHRydWV9ZWxzZXt0aGlzLmU9bnVsbH1pZighdGhpcy5jLnpkKG5ldyBHayh0aGlzKSkpe3JldHVybiBmYWxzZX19fTtfLmE9MDtfLmI9MDt2YXIgdUY9amViKFRxZSwnQ29sbGVjdFNwbGl0ZXJhdG9ycy9GbGF0TWFwU3BsaXRlcmF0b3InLDExMTQpO1ljYigxMTE2LDEsa3JlLEdrKTtfLkFkPWZ1bmN0aW9uIEhrKGEpe3prKHRoaXMuYSxhKX07dmFyIHJGPWplYihUcWUsJ0NvbGxlY3RTcGxpdGVyYXRvcnMvRmxhdE1hcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUnLDExMTYpO1ljYigxMTE3LDEsa3JlLElrKTtfLkFkPWZ1bmN0aW9uIEprKGEpe0FrKHRoaXMuYSx0aGlzLmIsYSl9O3ZhciBzRj1qZWIoVHFlLCdDb2xsZWN0U3BsaXRlcmF0b3JzL0ZsYXRNYXBTcGxpdGVyYXRvci9sYW1iZGEkMSRUeXBlJywxMTE3KTtZY2IoMTExNSwxMTE0LGpyZSxLayk7dmFyIHRGPWplYihUcWUsJ0NvbGxlY3RTcGxpdGVyYXRvcnMvRmxhdE1hcFNwbGl0ZXJhdG9yT2ZPYmplY3QnLDExMTUpO1ljYigyNTIsMSxucmUpO18uRGQ9ZnVuY3Rpb24gUWsoYSl7cmV0dXJuIHRoaXMuQ2QoSkQoYSwyNTIpKX07Xy5DZD1mdW5jdGlvbiBQayhhKXt2YXIgYjtpZihhPT0oaWwoKSxobCkpe3JldHVybiAxfWlmKGE9PShVaygpLFRrKSl7cmV0dXJuIC0xfWI9KHF4KCksQ2RiKHRoaXMuYSxhLmEpKTtpZihiIT0wKXtyZXR1cm4gYn1yZXR1cm4gUkQodGhpcyw1MTEpPT1SRChhLDUxMSk/MDpSRCh0aGlzLDUxMSk/MTotMX07Xy5HZD1mdW5jdGlvbiBSaygpe3JldHVybiB0aGlzLmF9O18uRmI9ZnVuY3Rpb24gU2soYSl7cmV0dXJuIE5rKHRoaXMsYSl9O3ZhciB6Rj1qZWIoVHFlLCdDdXQnLDI1Mik7WWNiKDE3NjksMjUyLG5yZSxWayk7Xy5DZD1mdW5jdGlvbiBXayhhKXtyZXR1cm4gYT09dGhpcz8wOjF9O18uRWQ9ZnVuY3Rpb24gWGsoYSl7dGhyb3cgc2NiKG5ldyB0ZGIpfTtfLkZkPWZ1bmN0aW9uIFlrKGEpe2EuYSs9JytcdTIyMUUpJ307Xy5HZD1mdW5jdGlvbiBaaygpe3Rocm93IHNjYihuZXcgV2ViKG9yZSkpfTtfLkhiPWZ1bmN0aW9uICRrKCl7cmV0dXJuIFpnYigpLGlEYih0aGlzKX07Xy5IZD1mdW5jdGlvbiBfayhhKXtyZXR1cm4gZmFsc2V9O18uSWI9ZnVuY3Rpb24gYWwoKXtyZXR1cm4gJytcdTIyMUUnfTt2YXIgVGs7dmFyIHZGPWplYihUcWUsJ0N1dC9BYm92ZUFsbCcsMTc2OSk7WWNiKDUxMSwyNTIsezI1MjoxLDUxMToxLDM6MSwzNDoxfSxibCk7Xy5FZD1mdW5jdGlvbiBjbChhKXtQZ2IoKGEuYSs9JygnLGEpLHRoaXMuYSl9O18uRmQ9ZnVuY3Rpb24gZGwoYSl7S2diKFBnYihhLHRoaXMuYSksOTMpfTtfLkhiPWZ1bmN0aW9uIGVsKCl7cmV0dXJuIH50Yih0aGlzLmEpfTtfLkhkPWZ1bmN0aW9uIGZsKGEpe3JldHVybiBxeCgpLENkYih0aGlzLmEsYSk8MH07Xy5JYj1mdW5jdGlvbiBnbCgpe3JldHVybiAnLycrdGhpcy5hKydcXCd9O3ZhciB3Rj1qZWIoVHFlLCdDdXQvQWJvdmVWYWx1ZScsNTExKTtZY2IoMTc2OCwyNTIsbnJlLGpsKTtfLkNkPWZ1bmN0aW9uIGtsKGEpe3JldHVybiBhPT10aGlzPzA6LTF9O18uRWQ9ZnVuY3Rpb24gbGwoYSl7YS5hKz0nKC1cdTIyMUUnfTtfLkZkPWZ1bmN0aW9uIG1sKGEpe3Rocm93IHNjYihuZXcgdGRiKX07Xy5HZD1mdW5jdGlvbiBubCgpe3Rocm93IHNjYihuZXcgV2ViKG9yZSkpfTtfLkhiPWZ1bmN0aW9uIG9sKCl7cmV0dXJuIFpnYigpLGlEYih0aGlzKX07Xy5IZD1mdW5jdGlvbiBwbChhKXtyZXR1cm4gdHJ1ZX07Xy5JYj1mdW5jdGlvbiBxbCgpe3JldHVybiAnLVx1MjIxRSd9O3ZhciBobDt2YXIgeEY9amViKFRxZSwnQ3V0L0JlbG93QWxsJywxNzY4KTtZY2IoMTc3MCwyNTIsbnJlLHJsKTtfLkVkPWZ1bmN0aW9uIHNsKGEpe1BnYigoYS5hKz0nWycsYSksdGhpcy5hKX07Xy5GZD1mdW5jdGlvbiB0bChhKXtLZ2IoUGdiKGEsdGhpcy5hKSw0MSl9O18uSGI9ZnVuY3Rpb24gdWwoKXtyZXR1cm4gdGIodGhpcy5hKX07Xy5IZD1mdW5jdGlvbiB2bChhKXtyZXR1cm4gcXgoKSxDZGIodGhpcy5hLGEpPD0wfTtfLkliPWZ1bmN0aW9uIHdsKCl7cmV0dXJuICdcXCcrdGhpcy5hKycvJ307dmFyIHlGPWplYihUcWUsJ0N1dC9CZWxvd1ZhbHVlJywxNzcwKTtZY2IoNTMyLDEscHJlKTtfLkljPWZ1bmN0aW9uIHpsKGEpe29mYih0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIEFsKCl7cmV0dXJuIEhyKEpEKFJiKHRoaXMsJ3VzZSBPcHRpb25hbC5vck51bGwoKSBpbnN0ZWFkIG9mIE9wdGlvbmFsLm9yKG51bGwpJyksMjApLkpjKCkpfTt2YXIgREY9amViKFRxZSwnRmx1ZW50SXRlcmFibGUnLDUzMik7WWNiKDQzMCw1MzIscHJlLEJsKTtfLkpjPWZ1bmN0aW9uIENsKCl7cmV0dXJuIG5ldyBlcyhJcih0aGlzLmEuSmMoKSxuZXcgZXIpKX07dmFyIEFGPWplYihUcWUsJ0ZsdWVudEl0ZXJhYmxlLzInLDQzMCk7WWNiKDEwMzQsNTMyLHByZSxFbCk7Xy5KYz1mdW5jdGlvbiBGbCgpe3JldHVybiBEbCh0aGlzKX07dmFyIENGPWplYihUcWUsJ0ZsdWVudEl0ZXJhYmxlLzMnLDEwMzQpO1ljYig3MDgsMzkwLFVxZSxHbCk7Xy5YYj1mdW5jdGlvbiBIbChhKXtyZXR1cm4gdGhpcy5hW2FdLkpjKCl9O3ZhciBCRj1qZWIoVHFlLCdGbHVlbnRJdGVyYWJsZS8zLzEnLDcwOCk7WWNiKDIwMTYsMSx7fSk7Xy5JYj1mdW5jdGlvbiBJbCgpe3JldHVybiBhZGIodGhpcy5JZCgpLmIpfTt2YXIgS0Y9amViKFRxZSwnRm9yd2FyZGluZ09iamVjdCcsMjAxNik7WWNiKDIwMTcsMjAxNixxcmUpO18uSWQ9ZnVuY3Rpb24gT2woKXtyZXR1cm4gdGhpcy5KZCgpfTtfLkljPWZ1bmN0aW9uIFBsKGEpe29mYih0aGlzLGEpfTtfLkxjPWZ1bmN0aW9uIFVsKCl7cmV0dXJuIG5ldyBHdmIodGhpcywwKX07Xy5NYz1mdW5jdGlvbiBWbCgpe3JldHVybiBuZXcgUkJiKG51bGwsdGhpcy5MYygpKX07Xy5FYz1mdW5jdGlvbiBKbChhKXtyZXR1cm4gdGhpcy5KZCgpLGhvYigpfTtfLkZjPWZ1bmN0aW9uIEtsKGEpe3JldHVybiB0aGlzLkpkKCksaW9iKCl9O18uJGI9ZnVuY3Rpb24gTGwoKXt0aGlzLkpkKCksam9iKCl9O18uR2M9ZnVuY3Rpb24gTWwoYSl7cmV0dXJuIHRoaXMuSmQoKS5HYyhhKX07Xy5IYz1mdW5jdGlvbiBObChhKXtyZXR1cm4gdGhpcy5KZCgpLkhjKGEpfTtfLmRjPWZ1bmN0aW9uIFFsKCl7cmV0dXJuIHRoaXMuSmQoKS5iLmRjKCl9O18uSmM9ZnVuY3Rpb24gUmwoKXtyZXR1cm4gdGhpcy5KZCgpLkpjKCl9O18uS2M9ZnVuY3Rpb24gU2woYSl7cmV0dXJuIHRoaXMuSmQoKSxtb2IoKX07Xy5nYz1mdW5jdGlvbiBUbCgpe3JldHVybiB0aGlzLkpkKCkuYi5nYygpfTtfLk5jPWZ1bmN0aW9uIFdsKCl7cmV0dXJuIHRoaXMuSmQoKS5OYygpfTtfLk9jPWZ1bmN0aW9uIFhsKGEpe3JldHVybiB0aGlzLkpkKCkuT2MoYSl9O3ZhciBFRj1qZWIoVHFlLCdGb3J3YXJkaW5nQ29sbGVjdGlvbicsMjAxNyk7WWNiKDIwMjQsMzEscnJlKTtfLkpjPWZ1bmN0aW9uIGRtKCl7cmV0dXJuIHRoaXMuTWQoKX07Xy5FYz1mdW5jdGlvbiBabChhKXt0aHJvdyBzY2IobmV3IGFoYil9O18uRmM9ZnVuY3Rpb24gJGwoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLktkPWZ1bmN0aW9uIF9sKCl7dmFyIGE7YT10aGlzLmM7cmV0dXJuICFhPyh0aGlzLmM9dGhpcy5MZCgpKTphfTtfLiRiPWZ1bmN0aW9uIGFtKCl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLkdjPWZ1bmN0aW9uIGJtKGEpe3JldHVybiBhIT1udWxsJiZ5ZSh0aGlzLGEsZmFsc2UpfTtfLkxkPWZ1bmN0aW9uIGNtKCl7c3dpdGNoKHRoaXMuZ2MoKSl7Y2FzZSAwOnJldHVybiBxbSgpLHFtKCkscG07Y2FzZSAxOnJldHVybiBxbSgpLG5ldyB2eShRYih0aGlzLk1kKCkuUGIoKSkpO2RlZmF1bHQ6cmV0dXJuIG5ldyBCeCh0aGlzLHRoaXMuTmMoKSk7fX07Xy5LYz1mdW5jdGlvbiBlbShhKXt0aHJvdyBzY2IobmV3IGFoYil9O3ZhciBkRz1qZWIoVHFlLCdJbW11dGFibGVDb2xsZWN0aW9uJywyMDI0KTtZY2IoNzExLDIwMjQscnJlLGZtKTtfLkpjPWZ1bmN0aW9uIGttKCl7cmV0dXJuIEpyKHRoaXMuYS5KYygpKX07Xy5HYz1mdW5jdGlvbiBnbShhKXtyZXR1cm4gYSE9bnVsbCYmdGhpcy5hLkdjKGEpfTtfLkhjPWZ1bmN0aW9uIGhtKGEpe3JldHVybiB0aGlzLmEuSGMoYSl9O18uZGM9ZnVuY3Rpb24gaW0oKXtyZXR1cm4gdGhpcy5hLmRjKCl9O18uTWQ9ZnVuY3Rpb24gam0oKXtyZXR1cm4gSnIodGhpcy5hLkpjKCkpfTtfLmdjPWZ1bmN0aW9uIGxtKCl7cmV0dXJuIHRoaXMuYS5nYygpfTtfLk5jPWZ1bmN0aW9uIG1tKCl7cmV0dXJuIHRoaXMuYS5OYygpfTtfLk9jPWZ1bmN0aW9uIG5tKGEpe3JldHVybiB0aGlzLmEuT2MoYSl9O18uSWI9ZnVuY3Rpb24gb20oKXtyZXR1cm4gYWRiKHRoaXMuYSl9O3ZhciBGRj1qZWIoVHFlLCdGb3J3YXJkaW5nSW1tdXRhYmxlQ29sbGVjdGlvbicsNzExKTtZY2IoMzA4LDIwMjQsc3JlKTtfLkpjPWZ1bmN0aW9uIEJtKCl7cmV0dXJuIHRoaXMuTWQoKX07Xy5jZD1mdW5jdGlvbiBDbSgpe3JldHVybiB0aGlzLk5kKDApfTtfLmRkPWZ1bmN0aW9uIEVtKGEpe3JldHVybiB0aGlzLk5kKGEpfTtfLmdkPWZ1bmN0aW9uIEltKGEpe2h1Yih0aGlzLGEpfTtfLkxjPWZ1bmN0aW9uIEptKCl7cmV0dXJuIG5ldyBHdmIodGhpcywxNil9O18uaGQ9ZnVuY3Rpb24gTG0oYSxiKXtyZXR1cm4gdGhpcy5PZChhLGIpfTtfLl9jPWZ1bmN0aW9uIHRtKGEsYil7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLmFkPWZ1bmN0aW9uIHVtKGEsYil7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLktkPWZ1bmN0aW9uIHZtKCl7cmV0dXJuIHRoaXN9O18uRmI9ZnVuY3Rpb24geG0oYSl7cmV0dXJuIFd1KHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24geW0oKXtyZXR1cm4gWHUodGhpcyl9O18uYmQ9ZnVuY3Rpb24gem0oYSl7cmV0dXJuIGE9PW51bGw/LTE6WXUodGhpcyxhKX07Xy5NZD1mdW5jdGlvbiBBbSgpe3JldHVybiB0aGlzLk5kKDApfTtfLk5kPWZ1bmN0aW9uIERtKGEpe3JldHVybiBybSh0aGlzLGEpfTtfLmVkPWZ1bmN0aW9uIEdtKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5mZD1mdW5jdGlvbiBIbShhLGIpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5PZD1mdW5jdGlvbiBLbShhLGIpe3ZhciBjO3JldHVybiBNbSgoYz1uZXcgbHYodGhpcyksbmV3IElqYihjLGEsYikpKX07dmFyIHBtO3ZhciBpRz1qZWIoVHFlLCdJbW11dGFibGVMaXN0JywzMDgpO1ljYigyMDUxLDMwOCxzcmUpO18uSmM9ZnVuY3Rpb24gV20oKXtyZXR1cm4gSnIodGhpcy5QZCgpLkpjKCkpfTtfLmhkPWZ1bmN0aW9uIFptKGEsYil7cmV0dXJuIE1tKHRoaXMuUGQoKS5oZChhLGIpKX07Xy5HYz1mdW5jdGlvbiBPbShhKXtyZXR1cm4gYSE9bnVsbCYmdGhpcy5QZCgpLkdjKGEpfTtfLkhjPWZ1bmN0aW9uIFBtKGEpe3JldHVybiB0aGlzLlBkKCkuSGMoYSl9O18uRmI9ZnVuY3Rpb24gUW0oYSl7cmV0dXJuIHBiKHRoaXMuUGQoKSxhKX07Xy5YYj1mdW5jdGlvbiBSbShhKXtyZXR1cm4gTm0odGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBTbSgpe3JldHVybiB0Yih0aGlzLlBkKCkpfTtfLmJkPWZ1bmN0aW9uIFRtKGEpe3JldHVybiB0aGlzLlBkKCkuYmQoYSl9O18uZGM9ZnVuY3Rpb24gVW0oKXtyZXR1cm4gdGhpcy5QZCgpLmRjKCl9O18uTWQ9ZnVuY3Rpb24gVm0oKXtyZXR1cm4gSnIodGhpcy5QZCgpLkpjKCkpfTtfLmdjPWZ1bmN0aW9uIFhtKCl7cmV0dXJuIHRoaXMuUGQoKS5nYygpfTtfLk9kPWZ1bmN0aW9uIFltKGEsYil7cmV0dXJuIE1tKHRoaXMuUGQoKS5oZChhLGIpKX07Xy5OYz1mdW5jdGlvbiAkbSgpe3JldHVybiB0aGlzLlBkKCkuT2MoU0MoYUosTnFlLDEsdGhpcy5QZCgpLmdjKCksNSwxKSl9O18uT2M9ZnVuY3Rpb24gX20oYSl7cmV0dXJuIHRoaXMuUGQoKS5PYyhhKX07Xy5JYj1mdW5jdGlvbiBhbigpe3JldHVybiBhZGIodGhpcy5QZCgpKX07dmFyIEdGPWplYihUcWUsJ0ZvcndhcmRpbmdJbW11dGFibGVMaXN0JywyMDUxKTtZY2IoNzEyLDEsdXJlKTtfLnZjPWZ1bmN0aW9uIG1uKCl7cmV0dXJuIGRuKHRoaXMpfTtfLndjPWZ1bmN0aW9uIG9uKGEpe3B1Yih0aGlzLGEpfTtfLmVjPWZ1bmN0aW9uIHNuKCl7cmV0dXJuIGVuKHRoaXMpfTtfLkJjPWZ1bmN0aW9uIHpuKCl7cmV0dXJuIHRoaXMuVGQoKX07Xy4kYj1mdW5jdGlvbiBnbigpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5fYj1mdW5jdGlvbiBobihhKXtyZXR1cm4gdGhpcy54YyhhKSE9bnVsbH07Xy51Yz1mdW5jdGlvbiBqbihhKXtyZXR1cm4gdGhpcy5UZCgpLkdjKGEpfTtfLlJkPWZ1bmN0aW9uIGtuKCl7cmV0dXJuIG5ldyB0cSh0aGlzKX07Xy5TZD1mdW5jdGlvbiBsbigpe3JldHVybiBuZXcgQ3EodGhpcyl9O18uRmI9ZnVuY3Rpb24gbm4oYSl7cmV0dXJuIFB2KHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24gcW4oKXtyZXR1cm4gZG4odGhpcykuSGIoKX07Xy5kYz1mdW5jdGlvbiBybigpe3JldHVybiB0aGlzLmdjKCk9PTB9O18ueWM9ZnVuY3Rpb24gdm4oYSxiKXtyZXR1cm4gZm4oKX07Xy5BYz1mdW5jdGlvbiB3bihhKXt0aHJvdyBzY2IobmV3IGFoYil9O18uSWI9ZnVuY3Rpb24geG4oKXtyZXR1cm4gVnYodGhpcyl9O18uVGQ9ZnVuY3Rpb24geW4oKXtpZih0aGlzLmUpe3JldHVybiB0aGlzLmV9cmV0dXJuIHRoaXMuZT10aGlzLlNkKCl9O18uYz1udWxsO18uZD1udWxsO18uZT1udWxsO3ZhciBibjt2YXIgc0c9amViKFRxZSwnSW1tdXRhYmxlTWFwJyw3MTIpO1ljYig3MTMsNzEyLHVyZSk7Xy5fYj1mdW5jdGlvbiBEbihhKXtyZXR1cm4gQW4odGhpcyxhKX07Xy51Yz1mdW5jdGlvbiBFbihhKXtyZXR1cm4gZnBiKHRoaXMuYixhKX07Xy5RZD1mdW5jdGlvbiBGbigpe3JldHVybiBibyhuZXcgVG4odGhpcykpfTtfLlJkPWZ1bmN0aW9uIEduKCl7cmV0dXJuIGJvKGlwYih0aGlzLmIpKX07Xy5TZD1mdW5jdGlvbiBIbigpe3JldHVybiBZbCgpLG5ldyBmbShqcGIodGhpcy5iKSl9O18uRmI9ZnVuY3Rpb24gSW4oYSl7cmV0dXJuIGhwYih0aGlzLmIsYSl9O18ueGM9ZnVuY3Rpb24gSm4oYSl7cmV0dXJuIEJuKHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24gS24oKXtyZXR1cm4gdGIodGhpcy5iLmMpfTtfLmRjPWZ1bmN0aW9uIExuKCl7cmV0dXJuIHRoaXMuYi5jLmRjKCl9O18uZ2M9ZnVuY3Rpb24gTW4oKXtyZXR1cm4gdGhpcy5iLmMuZ2MoKX07Xy5JYj1mdW5jdGlvbiBObigpe3JldHVybiBhZGIodGhpcy5iLmMpfTt2YXIgSUY9amViKFRxZSwnRm9yd2FyZGluZ0ltbXV0YWJsZU1hcCcsNzEzKTtZY2IoMjAxOCwyMDE3LHZyZSk7Xy5JZD1mdW5jdGlvbiBPbigpe3JldHVybiB0aGlzLlVkKCl9O18uSmQ9ZnVuY3Rpb24gUG4oKXtyZXR1cm4gdGhpcy5VZCgpfTtfLkxjPWZ1bmN0aW9uIFNuKCl7cmV0dXJuIG5ldyBHdmIodGhpcywxKX07Xy5GYj1mdW5jdGlvbiBRbihhKXtyZXR1cm4gYT09PXRoaXN8fHRoaXMuVWQoKS5GYihhKX07Xy5IYj1mdW5jdGlvbiBSbigpe3JldHVybiB0aGlzLlVkKCkuSGIoKX07dmFyIExGPWplYihUcWUsJ0ZvcndhcmRpbmdTZXQnLDIwMTgpO1ljYigxMDUwLDIwMTgsdnJlLFRuKTtfLklkPWZ1bmN0aW9uIFZuKCl7cmV0dXJuIGdwYih0aGlzLmEuYil9O18uSmQ9ZnVuY3Rpb24gV24oKXtyZXR1cm4gZ3BiKHRoaXMuYS5iKX07Xy5HYz1mdW5jdGlvbiBVbihiKXtpZihSRChiLDQzKSYmSkQoYiw0MykuamQoKT09bnVsbCl7cmV0dXJuIGZhbHNlfXRyeXtyZXR1cm4gRXBiKGdwYih0aGlzLmEuYiksYil9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwyMTEpKXtyZXR1cm4gZmFsc2V9ZWxzZSB0aHJvdyBzY2IoYSl9fTtfLlVkPWZ1bmN0aW9uIFhuKCl7cmV0dXJuIGdwYih0aGlzLmEuYil9O18uT2M9ZnVuY3Rpb24gWW4oYSl7dmFyIGI7Yj1GcGIoZ3BiKHRoaXMuYS5iKSxhKTtncGIodGhpcy5hLmIpLmIuZ2MoKTxiLmxlbmd0aCYmVkMoYixncGIodGhpcy5hLmIpLmIuZ2MoKSxudWxsKTtyZXR1cm4gYn07dmFyIEhGPWplYihUcWUsJ0ZvcndhcmRpbmdJbW11dGFibGVNYXAvMScsMTA1MCk7WWNiKDIwMjUsMjAyNCx3cmUpO18uSmM9ZnVuY3Rpb24gX24oKXtyZXR1cm4gdGhpcy5NZCgpfTtfLkxjPWZ1bmN0aW9uIGFvKCl7cmV0dXJuIG5ldyBHdmIodGhpcywxKX07Xy5GYj1mdW5jdGlvbiBabihhKXtyZXR1cm4gTngodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiAkbigpe3JldHVybiBPeCh0aGlzKX07dmFyIHVHPWplYihUcWUsJ0ltbXV0YWJsZVNldCcsMjAyNSk7WWNiKDcwMywyMDI1LHdyZSk7Xy5KYz1mdW5jdGlvbiBqbygpe3JldHVybiBKcihuZXcgRm9iKHRoaXMuYS5iLkpjKCkpKX07Xy5HYz1mdW5jdGlvbiBlbyhhKXtyZXR1cm4gYSE9bnVsbCYma29iKHRoaXMuYSxhKX07Xy5IYz1mdW5jdGlvbiBmbyhhKXtyZXR1cm4gbG9iKHRoaXMuYSxhKX07Xy5IYj1mdW5jdGlvbiBnbygpe3JldHVybiB0Yih0aGlzLmEuYil9O18uZGM9ZnVuY3Rpb24gaG8oKXtyZXR1cm4gdGhpcy5hLmIuZGMoKX07Xy5NZD1mdW5jdGlvbiBpbygpe3JldHVybiBKcihuZXcgRm9iKHRoaXMuYS5iLkpjKCkpKX07Xy5nYz1mdW5jdGlvbiBrbygpe3JldHVybiB0aGlzLmEuYi5nYygpfTtfLk5jPWZ1bmN0aW9uIGxvKCl7cmV0dXJuIHRoaXMuYS5iLk5jKCl9O18uT2M9ZnVuY3Rpb24gbW8oYSl7cmV0dXJuIG5vYih0aGlzLmEsYSl9O18uSWI9ZnVuY3Rpb24gbm8oKXtyZXR1cm4gYWRiKHRoaXMuYS5iKX07dmFyIEpGPWplYihUcWUsJ0ZvcndhcmRpbmdJbW11dGFibGVTZXQnLDcwMyk7WWNiKDIwMTksMjAxOCx4cmUpO18uSWQ9ZnVuY3Rpb24gb28oKXtyZXR1cm4gdGhpcy5ifTtfLkpkPWZ1bmN0aW9uIHBvKCl7cmV0dXJuIHRoaXMuYn07Xy5VZD1mdW5jdGlvbiBxbygpe3JldHVybiB0aGlzLmJ9O18uTGM9ZnVuY3Rpb24gcm8oKXtyZXR1cm4gbmV3IE92Yih0aGlzKX07dmFyIE1GPWplYihUcWUsJ0ZvcndhcmRpbmdTb3J0ZWRTZXQnLDIwMTkpO1ljYig1MjgsMjAyMyx1cmUsRW8pO18uemM9ZnVuY3Rpb24gTm8oYSl7TGQodGhpcyxhKX07Xy5CYz1mdW5jdGlvbiBRbygpe3ZhciBhO3JldHVybiBhPXRoaXMuZCxuZXcgQ3AoIWE/KHRoaXMuZD1uZXcgaXAodGhpcykpOmEpfTtfLiRiPWZ1bmN0aW9uIEZvKCl7c28odGhpcyl9O18uX2I9ZnVuY3Rpb24gR28oYSl7cmV0dXJuICEhQ28odGhpcyxhLFBjYihGY2IoeXJlLGhmYihQY2IoRmNiKGE9PW51bGw/MDp0YihhKSx6cmUpKSwxNSkpKSl9O18udWM9ZnVuY3Rpb24gSG8oYSl7cmV0dXJuIHRvKHRoaXMsYSl9O18ua2M9ZnVuY3Rpb24gSW8oKXtyZXR1cm4gbmV3IFlvKHRoaXMsdGhpcyl9O18ud2M9ZnVuY3Rpb24gSm8oYSl7dm8odGhpcyxhKX07Xy54Yz1mdW5jdGlvbiBLbyhhKXtyZXR1cm4gd28odGhpcyxhKX07Xy5lYz1mdW5jdGlvbiBMbygpe3JldHVybiBuZXcgSnAodGhpcyl9O18ueWM9ZnVuY3Rpb24gTW8oYSxiKXtyZXR1cm4gem8odGhpcyxhLGIpfTtfLkFjPWZ1bmN0aW9uIE9vKGEpe3ZhciBiO2I9Q28odGhpcyxhLFBjYihGY2IoeXJlLGhmYihQY2IoRmNiKGE9PW51bGw/MDp0YihhKSx6cmUpKSwxNSkpKSk7aWYoIWIpe3JldHVybiBudWxsfWVsc2V7dW8odGhpcyxiKTtiLmU9bnVsbDtiLmM9bnVsbDtyZXR1cm4gYi5pfX07Xy5nYz1mdW5jdGlvbiBQbygpe3JldHVybiB0aGlzLml9O18udmQ9ZnVuY3Rpb24gUm8oKXt2YXIgYTtyZXR1cm4gYT10aGlzLmQsbmV3IENwKCFhPyh0aGlzLmQ9bmV3IGlwKHRoaXMpKTphKX07Xy5mPTA7Xy5nPTA7Xy5pPTA7dmFyIFpGPWplYihUcWUsJ0hhc2hCaU1hcCcsNTI4KTtZY2IoNTI5LDEsV3FlKTtfLk5iPWZ1bmN0aW9uIFVvKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIFZvKCl7cmV0dXJuIFNvKHRoaXMpfTtfLlBiPWZ1bmN0aW9uIFdvKCl7dmFyIGE7aWYoIVNvKHRoaXMpKXt0aHJvdyBzY2IobmV3IHF1Yil9YT1KRCh2dWIodGhpcy5jKSwzMDQpO3RoaXMuYz1hLmM7dGhpcy5mPWE7LS10aGlzLmQ7cmV0dXJuIHRoaXMuVmQoYSl9O18uUWI9ZnVuY3Rpb24gWG8oKXtpZih0aGlzLmUuZyE9dGhpcy5iKXt0aHJvdyBzY2IobmV3IHlxYil9aWYoIXRoaXMuZil7dGhyb3cgc2NiKG5ldyBXZWIoUHFlKSl9dW8odGhpcy5lLHRoaXMuZik7dGhpcy5iPXRoaXMuZS5nO3RoaXMuZj1udWxsfTtfLmI9MDtfLmQ9MDtfLmY9bnVsbDt2YXIgV0Y9amViKFRxZSwnSGFzaEJpTWFwL0l0cicsNTI5KTtZY2IoOTk4LDUyOSxXcWUsWW8pO18uVmQ9ZnVuY3Rpb24gWm8oYSl7cmV0dXJuIG5ldyAkbyh0aGlzLGEpfTt2YXIgT0Y9amViKFRxZSwnSGFzaEJpTWFwLzEnLDk5OCk7WWNiKDk5OSwzNTUsZXJlLCRvKTtfLmpkPWZ1bmN0aW9uIF9vKCl7cmV0dXJuIHRoaXMuYS5nfTtfLmtkPWZ1bmN0aW9uIGFwKCl7cmV0dXJuIHRoaXMuYS5pfTtfLmxkPWZ1bmN0aW9uIGJwKGEpe3ZhciBiLGMsZDtjPXRoaXMuYS5pO2Q9UGNiKEZjYih5cmUsaGZiKFBjYihGY2IoYT09bnVsbD8wOnRiKGEpLHpyZSkpLDE1KSkpO2lmKGQ9PXRoaXMuYS5mJiYoWEQoYSk9PT1YRChjKXx8YSE9bnVsbCYmcGIoYSxjKSkpe3JldHVybiBhfU5iKCFEbyh0aGlzLmIuYSxhLGQpLGEpO3VvKHRoaXMuYi5hLHRoaXMuYSk7Yj1uZXcgZ3AodGhpcy5hLmcsdGhpcy5hLmEsYSxkKTt4byh0aGlzLmIuYSxiLHRoaXMuYSk7dGhpcy5hLmU9bnVsbDt0aGlzLmEuYz1udWxsO3RoaXMuYi5iPXRoaXMuYi5hLmc7dGhpcy5iLmY9PXRoaXMuYSYmKHRoaXMuYi5mPWIpO3RoaXMuYT1iO3JldHVybiBjfTt2YXIgTkY9amViKFRxZSwnSGFzaEJpTWFwLzEvTWFwRW50cnknLDk5OSk7WWNiKDI0NCwzNTUsezM1NToxLDI0NDoxLDM6MSw0MzoxfSxjcCk7Xy5qZD1mdW5jdGlvbiBkcCgpe3JldHVybiB0aGlzLmd9O18ua2Q9ZnVuY3Rpb24gZXAoKXtyZXR1cm4gdGhpcy5pfTtfLmxkPWZ1bmN0aW9uIGZwKGEpe3Rocm93IHNjYihuZXcgYWhiKX07dmFyIGVHPWplYihUcWUsJ0ltbXV0YWJsZUVudHJ5JywyNDQpO1ljYigzMDQsMjQ0LHszNTU6MSwzMDQ6MSwyNDQ6MSwzOjEsNDM6MX0sZ3ApO18uYT0wO18uZj0wO3ZhciBQRj1qZWIoVHFlLCdIYXNoQmlNYXAvQmlFbnRyeScsMzA0KTtZY2IoNjA0LDIwMjMsdXJlLGlwKTtfLnpjPWZ1bmN0aW9uIHJwKGEpe0xkKHRoaXMsYSl9O18uQmM9ZnVuY3Rpb24gdXAoKXtyZXR1cm4gbmV3IEpwKHRoaXMuYSl9O18uJGI9ZnVuY3Rpb24ganAoKXtzbyh0aGlzLmEpfTtfLl9iPWZ1bmN0aW9uIGtwKGEpe3JldHVybiB0byh0aGlzLmEsYSl9O18ua2M9ZnVuY3Rpb24gbHAoKXtyZXR1cm4gbmV3IHdwKHRoaXMsdGhpcy5hKX07Xy53Yz1mdW5jdGlvbiBtcChhKXtRYihhKTt2byh0aGlzLmEsbmV3IEhwKGEpKX07Xy54Yz1mdW5jdGlvbiBucChhKXtyZXR1cm4gaHAodGhpcyxhKX07Xy5lYz1mdW5jdGlvbiBvcCgpe3JldHVybiBuZXcgQ3AodGhpcyl9O18ueWM9ZnVuY3Rpb24gcXAoYSxiKXtyZXR1cm4gQW8odGhpcy5hLGEsYixmYWxzZSl9O18uQWM9ZnVuY3Rpb24gc3AoYSl7dmFyIGI7Yj1Ebyh0aGlzLmEsYSxQY2IoRmNiKHlyZSxoZmIoUGNiKEZjYihhPT1udWxsPzA6dGIoYSksenJlKSksMTUpKSkpO2lmKCFiKXtyZXR1cm4gbnVsbH1lbHNle3VvKHRoaXMuYSxiKTtiLmU9bnVsbDtiLmM9bnVsbDtyZXR1cm4gYi5nfX07Xy5nYz1mdW5jdGlvbiB0cCgpe3JldHVybiB0aGlzLmEuaX07Xy52ZD1mdW5jdGlvbiB2cCgpe3JldHVybiBuZXcgSnAodGhpcy5hKX07dmFyIFZGPWplYihUcWUsJ0hhc2hCaU1hcC9JbnZlcnNlJyw2MDQpO1ljYig5OTUsNTI5LFdxZSx3cCk7Xy5WZD1mdW5jdGlvbiB4cChhKXtyZXR1cm4gbmV3IHlwKHRoaXMsYSl9O3ZhciBSRj1qZWIoVHFlLCdIYXNoQmlNYXAvSW52ZXJzZS8xJyw5OTUpO1ljYig5OTYsMzU1LGVyZSx5cCk7Xy5qZD1mdW5jdGlvbiB6cCgpe3JldHVybiB0aGlzLmEuaX07Xy5rZD1mdW5jdGlvbiBBcCgpe3JldHVybiB0aGlzLmEuZ307Xy5sZD1mdW5jdGlvbiBCcChhKXt2YXIgYixjLGQ7ZD10aGlzLmEuZztiPVBjYihGY2IoeXJlLGhmYihQY2IoRmNiKGE9PW51bGw/MDp0YihhKSx6cmUpKSwxNSkpKTtpZihiPT10aGlzLmEuYSYmKFhEKGEpPT09WEQoZCl8fGEhPW51bGwmJnBiKGEsZCkpKXtyZXR1cm4gYX1OYighQ28odGhpcy5iLmEuYSxhLGIpLGEpO3VvKHRoaXMuYi5hLmEsdGhpcy5hKTtjPW5ldyBncChhLGIsdGhpcy5hLmksdGhpcy5hLmYpO3RoaXMuYT1jO3hvKHRoaXMuYi5hLmEsYyxudWxsKTt0aGlzLmIuYj10aGlzLmIuYS5hLmc7cmV0dXJuIGR9O3ZhciBRRj1qZWIoVHFlLCdIYXNoQmlNYXAvSW52ZXJzZS8xL0ludmVyc2VFbnRyeScsOTk2KTtZY2IoNjA1LDUyNyxfcWUsQ3ApO18uSmM9ZnVuY3Rpb24gRHAoKXtyZXR1cm4gbmV3IEZwKHRoaXMuYS5hKX07Xy5LYz1mdW5jdGlvbiBFcChhKXt2YXIgYjtiPURvKHRoaXMuYS5hLGEsUGNiKEZjYih5cmUsaGZiKFBjYihGY2IoYT09bnVsbD8wOnRiKGEpLHpyZSkpLDE1KSkpKTtpZighYil7cmV0dXJuIGZhbHNlfWVsc2V7dW8odGhpcy5hLmEsYik7cmV0dXJuIHRydWV9fTt2YXIgVEY9amViKFRxZSwnSGFzaEJpTWFwL0ludmVyc2UvSW52ZXJzZUtleVNldCcsNjA1KTtZY2IoOTk0LDUyOSxXcWUsRnApO18uVmQ9ZnVuY3Rpb24gR3AoYSl7cmV0dXJuIGEuaX07dmFyIFNGPWplYihUcWUsJ0hhc2hCaU1hcC9JbnZlcnNlL0ludmVyc2VLZXlTZXQvMScsOTk0KTtZY2IoOTk3LDEse30sSHApO18uV2Q9ZnVuY3Rpb24gSXAoYSxiKXtwcCh0aGlzLmEsYSxiKX07dmFyIFVGPWplYihUcWUsJ0hhc2hCaU1hcC9JbnZlcnNlL2xhbWJkYSQwJFR5cGUnLDk5Nyk7WWNiKDYwMyw1MjcsX3FlLEpwKTtfLkpjPWZ1bmN0aW9uIEtwKCl7cmV0dXJuIG5ldyBNcCh0aGlzLmEpfTtfLktjPWZ1bmN0aW9uIExwKGEpe3ZhciBiO2I9Q28odGhpcy5hLGEsUGNiKEZjYih5cmUsaGZiKFBjYihGY2IoYT09bnVsbD8wOnRiKGEpLHpyZSkpLDE1KSkpKTtpZighYil7cmV0dXJuIGZhbHNlfWVsc2V7dW8odGhpcy5hLGIpO2IuZT1udWxsO2IuYz1udWxsO3JldHVybiB0cnVlfX07dmFyIFlGPWplYihUcWUsJ0hhc2hCaU1hcC9LZXlTZXQnLDYwMyk7WWNiKDk5Myw1MjksV3FlLE1wKTtfLlZkPWZ1bmN0aW9uIE5wKGEpe3JldHVybiBhLmd9O3ZhciBYRj1qZWIoVHFlLCdIYXNoQmlNYXAvS2V5U2V0LzEnLDk5Myk7WWNiKDEwODcsNjEyLFZxZSk7dmFyICRGPWplYihUcWUsJ0hhc2hNdWx0aW1hcEd3dFNlcmlhbGl6YXRpb25EZXBlbmRlbmNpZXMnLDEwODcpO1ljYigyNjksMTA4NyxWcWUsUHApO18uaGM9ZnVuY3Rpb24gUXAoKXtyZXR1cm4gbmV3IFJyYihPdih0aGlzLmEpKX07Xy5uZD1mdW5jdGlvbiBScCgpe3JldHVybiBuZXcgUnJiKE92KHRoaXMuYSkpfTtfLmE9Mjt2YXIgX0Y9amViKFRxZSwnSGFzaE11bHRpbWFwJywyNjkpO1ljYigyMDQzLDMwOCxzcmUpO18uR2M9ZnVuY3Rpb24gVXAoYSl7cmV0dXJuIHRoaXMuWGQoKS5HYyhhKX07Xy5kYz1mdW5jdGlvbiBWcCgpe3JldHVybiB0aGlzLlhkKCkuZGMoKX07Xy5nYz1mdW5jdGlvbiBXcCgpe3JldHVybiB0aGlzLlhkKCkuZ2MoKX07dmFyIGFHPWplYihUcWUsJ0ltbXV0YWJsZUFzTGlzdCcsMjA0Myk7WWNiKDE5NzYsNzEzLHVyZSk7Xy5UZD1mdW5jdGlvbiBZcCgpe3JldHVybiBZbCgpLG5ldyB4eSh0aGlzLmEpfTtfLkJjPWZ1bmN0aW9uIFpwKCl7cmV0dXJuIFlsKCksbmV3IHh5KHRoaXMuYSl9O18udmQ9ZnVuY3Rpb24gJHAoKXtyZXR1cm4gWWwoKSxuZXcgeHkodGhpcy5hKX07dmFyIGJHPWplYihUcWUsJ0ltbXV0YWJsZUJpTWFwJywxOTc2KTtZY2IoMjAyMSwxLHt9KTt2YXIgY0c9amViKFRxZSwnSW1tdXRhYmxlQ29sbGVjdGlvbi9CdWlsZGVyJywyMDIxKTtZY2IoMTAxMCw3MDMsd3JlLF9wKTt2YXIgZkc9amViKFRxZSwnSW1tdXRhYmxlRW51bVNldCcsMTAxMCk7WWNiKDk1NywzOTAsVXFlLGJxKTtfLlhiPWZ1bmN0aW9uIGNxKGEpe3JldHVybiB0aGlzLmEuWGIoYSl9O3ZhciBnRz1qZWIoVHFlLCdJbW11dGFibGVMaXN0LzEnLDk1Nyk7WWNiKDk1NiwyMDIxLHt9LGRxKTt2YXIgaEc9amViKFRxZSwnSW1tdXRhYmxlTGlzdC9CdWlsZGVyJyw5NTYpO1ljYig2MDgsMjA0LFNxZSxlcSk7Xy5PYj1mdW5jdGlvbiBmcSgpe3JldHVybiB0aGlzLmEuT2IoKX07Xy5QYj1mdW5jdGlvbiBncSgpe3JldHVybiBKRCh0aGlzLmEuUGIoKSw0MykuamQoKX07dmFyIGpHPWplYihUcWUsJ0ltbXV0YWJsZU1hcC8xJyw2MDgpO1ljYigxMDI5LDEse30saHEpO18uS2I9ZnVuY3Rpb24gaXEoYSl7cmV0dXJuIEpEKGEsNDMpLmpkKCl9O3ZhciBrRz1qZWIoVHFlLCdJbW11dGFibGVNYXAvMm1ldGhvZHJlZiRnZXRLZXkkVHlwZScsMTAyOSk7WWNiKDEwMjgsMSx7fSxrcSk7dmFyIGxHPWplYihUcWUsJ0ltbXV0YWJsZU1hcC9CdWlsZGVyJywxMDI4KTtZY2IoMjA0NCwyMDI1LHdyZSk7Xy5LZD1mdW5jdGlvbiBscSgpe3ZhciBhO3JldHVybiBhPXRoaXMuYiwhYT8odGhpcy5iPW5ldyBUcSh0aGlzKSk6YX07Xy5MZD1mdW5jdGlvbiBtcSgpe3JldHVybiBuZXcgQngodGhpcyxEZSh0aGlzLFNDKGFKLE5xZSwxLHRoaXMuZ2MoKSw1LDEpKSl9O3ZhciB0Rz1qZWIoVHFlLCdJbW11dGFibGVTZXQvQ2FjaGluZ0FzTGlzdCcsMjA0NCk7WWNiKDIwNDUsMjA0NCx3cmUpO18uSmM9ZnVuY3Rpb24gcXEoKXt2YXIgYTtyZXR1cm4gYT1kbih0aGlzLmEpLk1kKCksbmV3IGVxKGEpfTtfLkxkPWZ1bmN0aW9uIG5xKCl7cmV0dXJuIG5ldyBUcSh0aGlzKX07Xy5JYz1mdW5jdGlvbiBvcShhKXt2YXIgYixjO1FiKGEpO2M9dGhpcy5nYygpO2ZvcihiPTA7YjxjO2IrKyl7YS5BZChKRChkbih0aGlzLmEpLktkKCkuWGIoYiksNDMpLmpkKCkpfX07Xy5NZD1mdW5jdGlvbiBwcSgpe3ZhciBhO3JldHVybiBhPXRoaXMuYixybSghYT8odGhpcy5iPW5ldyBUcSh0aGlzKSk6YSwwKX07Xy5MYz1mdW5jdGlvbiBycSgpe3JldHVybiBkayh0aGlzLmdjKCksMTI5NixuZXcgUnEodGhpcykpfTt2YXIgeEc9amViKFRxZSwnSW5kZXhlZEltbXV0YWJsZVNldCcsMjA0NSk7WWNiKDExOTAsMjA0NSx3cmUsdHEpO18uSmM9ZnVuY3Rpb24geHEoKXt2YXIgYTtyZXR1cm4gYT1kbih0aGlzLmEpLk1kKCksbmV3IGVxKGEpfTtfLkdjPWZ1bmN0aW9uIHVxKGEpe3JldHVybiB0aGlzLmEuX2IoYSl9O18uSWM9ZnVuY3Rpb24gdnEoYSl7UWIoYSk7cHViKHRoaXMuYSxuZXcgQXEoYSkpfTtfLk1kPWZ1bmN0aW9uIHdxKCl7dmFyIGE7cmV0dXJuIGE9ZG4odGhpcy5hKS5NZCgpLG5ldyBlcShhKX07Xy5nYz1mdW5jdGlvbiB5cSgpe3JldHVybiB0aGlzLmEuZ2MoKX07Xy5MYz1mdW5jdGlvbiB6cSgpe3JldHVybiBlayhkbih0aGlzLmEpLkxjKCksbmV3IGhxKX07dmFyIG5HPWplYihUcWUsJ0ltbXV0YWJsZU1hcEtleVNldCcsMTE5MCk7WWNiKDExOTEsMSx7fSxBcSk7Xy5XZD1mdW5jdGlvbiBCcShhLGIpe1lsKCk7dGhpcy5hLkFkKGEpfTt2YXIgbUc9amViKFRxZSwnSW1tdXRhYmxlTWFwS2V5U2V0L2xhbWJkYSQwJFR5cGUnLDExOTEpO1ljYigxMTg3LDIwMjQscnJlLENxKTtfLkpjPWZ1bmN0aW9uIEdxKCl7cmV0dXJuIG5ldyBMcSh0aGlzKX07Xy5LZD1mdW5jdGlvbiBEcSgpe3ZhciBhO2E9ZG4odGhpcy5hKS5LZCgpO3JldHVybiBuZXcgT3EodGhpcyxhKX07Xy5HYz1mdW5jdGlvbiBFcShhKXtyZXR1cm4gYSE9bnVsbCYmeHIobmV3IExxKHRoaXMpLGEpfTtfLk1kPWZ1bmN0aW9uIEZxKCl7cmV0dXJuIG5ldyBMcSh0aGlzKX07Xy5nYz1mdW5jdGlvbiBIcSgpe3JldHVybiB0aGlzLmEuZ2MoKX07Xy5MYz1mdW5jdGlvbiBJcSgpe3JldHVybiBlayhkbih0aGlzLmEpLkxjKCksbmV3IEpxKX07dmFyIHJHPWplYihUcWUsJ0ltbXV0YWJsZU1hcFZhbHVlcycsMTE4Nyk7WWNiKDExODgsMSx7fSxKcSk7Xy5LYj1mdW5jdGlvbiBLcShhKXtyZXR1cm4gSkQoYSw0Mykua2QoKX07dmFyIG9HPWplYihUcWUsJ0ltbXV0YWJsZU1hcFZhbHVlcy8wbWV0aG9kcmVmJGdldFZhbHVlJFR5cGUnLDExODgpO1ljYig2MjIsMjA0LFNxZSxMcSk7Xy5PYj1mdW5jdGlvbiBNcSgpe3JldHVybiB0aGlzLmEuT2IoKX07Xy5QYj1mdW5jdGlvbiBOcSgpe3JldHVybiBKRCh0aGlzLmEuUGIoKSw0Mykua2QoKX07dmFyIHBHPWplYihUcWUsJ0ltbXV0YWJsZU1hcFZhbHVlcy8xJyw2MjIpO1ljYigxMTg5LDIwNDMsc3JlLE9xKTtfLlhkPWZ1bmN0aW9uIFBxKCl7cmV0dXJuIHRoaXMuYX07Xy5YYj1mdW5jdGlvbiBRcShhKXtyZXR1cm4gSkQodGhpcy5iLlhiKGEpLDQzKS5rZCgpfTt2YXIgcUc9amViKFRxZSwnSW1tdXRhYmxlTWFwVmFsdWVzLzInLDExODkpO1ljYigxMTkyLDEse30sUnEpO18ucmQ9ZnVuY3Rpb24gU3EoYSl7cmV0dXJuIHNxKHRoaXMuYSxhKX07dmFyIHZHPWplYihUcWUsJ0luZGV4ZWRJbW11dGFibGVTZXQvMG1ldGhvZHJlZiRnZXQkVHlwZScsMTE5Mik7WWNiKDYyMywyMDQzLHNyZSxUcSk7Xy5YZD1mdW5jdGlvbiBVcSgpe3JldHVybiB0aGlzLmF9O18uWGI9ZnVuY3Rpb24gVnEoYSl7cmV0dXJuIHNxKHRoaXMuYSxhKX07Xy5nYz1mdW5jdGlvbiBXcSgpe3JldHVybiB0aGlzLmEuYS5nYygpfTt2YXIgd0c9amViKFRxZSwnSW5kZXhlZEltbXV0YWJsZVNldC8xJyw2MjMpO1ljYig0MSwxLHt9LGVyKTtfLktiPWZ1bmN0aW9uIGZyKGEpe3JldHVybiBKRChhLDIwKS5KYygpfTtfLkZiPWZ1bmN0aW9uIGdyKGEpe3JldHVybiB0aGlzPT09YX07dmFyIHlHPWplYihUcWUsJ0l0ZXJhYmxlcy8xMCcsNDEpO1ljYigxMDMwLDUzMixwcmUsaXIpO18uSWM9ZnVuY3Rpb24ganIoYSl7UWIoYSk7dGhpcy5iLkljKG5ldyBtcih0aGlzLmEsYSkpfTtfLkpjPWZ1bmN0aW9uIGtyKCl7cmV0dXJuIGhyKHRoaXMpfTt2YXIgQUc9amViKFRxZSwnSXRlcmFibGVzLzQnLDEwMzApO1ljYigxMDMxLDEsa3JlLG1yKTtfLkFkPWZ1bmN0aW9uIG5yKGEpe2xyKHRoaXMuYix0aGlzLmEsYSl9O3ZhciB6Rz1qZWIoVHFlLCdJdGVyYWJsZXMvNC9sYW1iZGEkMCRUeXBlJywxMDMxKTtZY2IoMTAzMiw1MzIscHJlLG9yKTtfLkljPWZ1bmN0aW9uIHByKGEpe1FiKGEpO29mYih0aGlzLmEsbmV3IHJyKGEsdGhpcy5iKSl9O18uSmM9ZnVuY3Rpb24gcXIoKXtyZXR1cm4gSXIobmV3IENIZCh0aGlzLmEpLHRoaXMuYil9O3ZhciBDRz1qZWIoVHFlLCdJdGVyYWJsZXMvNScsMTAzMik7WWNiKDEwMzMsMSxrcmUscnIpO18uQWQ9ZnVuY3Rpb24gc3IoYSl7dGhpcy5hLkFkKHNuZChhKSl9O3ZhciBCRz1qZWIoVHFlLCdJdGVyYWJsZXMvNS9sYW1iZGEkMCRUeXBlJywxMDMzKTtZY2IoMTA1MiwyMDQsU3FlLEtyKTtfLk9iPWZ1bmN0aW9uIExyKCl7cmV0dXJuIHRoaXMuYS5PYigpfTtfLlBiPWZ1bmN0aW9uIE1yKCl7cmV0dXJuIHRoaXMuYS5QYigpfTt2YXIgREc9amViKFRxZSwnSXRlcmF0b3JzLzEnLDEwNTIpO1ljYigxMDUzLDY5NyxTcWUsTnIpO18uWWI9ZnVuY3Rpb24gT3IoKXt2YXIgYTt3aGlsZSh0aGlzLmIuT2IoKSl7YT10aGlzLmIuUGIoKTtpZih0aGlzLmEuTGIoYSkpe3JldHVybiBhfX1yZXR1cm4gdGhpcy5lPTIsbnVsbH07dmFyIEVHPWplYihUcWUsJ0l0ZXJhdG9ycy81JywxMDUzKTtZY2IoNDgxLDEsV3FlKTtfLk5iPWZ1bmN0aW9uIFFyKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIFJyKCl7cmV0dXJuIHRoaXMuYi5PYigpfTtfLlBiPWZ1bmN0aW9uIFNyKCl7cmV0dXJuIHRoaXMuWWQodGhpcy5iLlBiKCkpfTtfLlFiPWZ1bmN0aW9uIFRyKCl7dGhpcy5iLlFiKCl9O3ZhciBVSD1qZWIoVHFlLCdUcmFuc2Zvcm1lZEl0ZXJhdG9yJyw0ODEpO1ljYigxMDU0LDQ4MSxXcWUsVXIpO18uWWQ9ZnVuY3Rpb24gVnIoYSl7cmV0dXJuIHRoaXMuYS5LYihhKX07dmFyIEZHPWplYihUcWUsJ0l0ZXJhdG9ycy82JywxMDU0KTtZY2IoNzE1LDIwNCxTcWUsV3IpO18uT2I9ZnVuY3Rpb24gWHIoKXtyZXR1cm4gIXRoaXMuYX07Xy5QYj1mdW5jdGlvbiBZcigpe2lmKHRoaXMuYSl7dGhyb3cgc2NiKG5ldyBxdWIpfXRoaXMuYT10cnVlO3JldHVybiB0aGlzLmJ9O18uYT1mYWxzZTt2YXIgR0c9amViKFRxZSwnSXRlcmF0b3JzLzknLDcxNSk7WWNiKDEwNTEsMzkwLFVxZSxfcik7Xy5YYj1mdW5jdGlvbiBhcyhhKXtyZXR1cm4gdGhpcy5hW3RoaXMuYithXX07Xy5iPTA7dmFyIFpyO3ZhciBIRz1qZWIoVHFlLCdJdGVyYXRvcnMvQXJyYXlJdHInLDEwNTEpO1ljYigzNywxLHszNzoxLDQ5OjF9LGVzKTtfLk5iPWZ1bmN0aW9uIGZzKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIGdzKCl7cmV0dXJuIGNzKHRoaXMpfTtfLlBiPWZ1bmN0aW9uIGhzKCl7cmV0dXJuIGRzKHRoaXMpfTtfLlFiPWZ1bmN0aW9uIGlzKCl7aWYoIXRoaXMuYyl7dGhyb3cgc2NiKG5ldyBXZWIoUHFlKSl9dGhpcy5jLlFiKCk7dGhpcy5jPW51bGx9O3ZhciBJRz1qZWIoVHFlLCdJdGVyYXRvcnMvQ29uY2F0ZW5hdGVkSXRlcmF0b3InLDM3KTtZY2IoMjMsMSx7MzoxLDM0OjEsMjM6MX0pO18uRGQ9ZnVuY3Rpb24gbnMoYSl7cmV0dXJuIGpzKHRoaXMsSkQoYSwyMykpfTtfLkZiPWZ1bmN0aW9uIHBzKGEpe3JldHVybiB0aGlzPT09YX07Xy5IYj1mdW5jdGlvbiBxcygpe3JldHVybiBqRGIodGhpcyl9O18uSWI9ZnVuY3Rpb24gcnMoKXtyZXR1cm4gbHModGhpcyl9O18uZz0wO3ZhciBNST1qZWIoSXFlLCdFbnVtJywyMyk7WWNiKDUzNCwyMyx7NTM0OjEsMzoxLDM0OjEsMjM6MSw0OToxfSx3cyk7Xy5OYj1mdW5jdGlvbiB4cyhhKXtPc2IodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiB5cygpe3JldHVybiBmYWxzZX07Xy5QYj1mdW5jdGlvbiB6cygpe3Rocm93IHNjYihuZXcgcXViKX07Xy5RYj1mdW5jdGlvbiBBcygpe1ZiKGZhbHNlKX07dmFyIHVzO3ZhciBKRz1rZWIoVHFlLCdJdGVyYXRvcnMvRW1wdHlNb2RpZmlhYmxlSXRlcmF0b3InLDUzNCxNSSxDcyxCcyk7dmFyIERzO1ljYigxODUzLDYxMixWcWUpO3ZhciBQRz1qZWIoVHFlLCdMaW5rZWRIYXNoTXVsdGltYXBHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzJywxODUzKTtZY2IoMTg1NCwxODUzLFZxZSxHcyk7Xy5oYz1mdW5jdGlvbiBJcygpe3JldHVybiBuZXcgeHRiKE92KHRoaXMuYikpfTtfLiRiPWZ1bmN0aW9uIEhzKCl7TmModGhpcyk7T3ModGhpcy5hLHRoaXMuYSl9O18ubmQ9ZnVuY3Rpb24gSnMoKXtyZXR1cm4gbmV3IHh0YihPdih0aGlzLmIpKX07Xy5pYz1mdW5jdGlvbiBLcyhhKXtyZXR1cm4gbmV3IGV0KHRoaXMsYSx0aGlzLmIpfTtfLmtjPWZ1bmN0aW9uIExzKCl7cmV0dXJuIG5ldyBWcyh0aGlzKX07Xy5sYz1mdW5jdGlvbiBNcygpe3ZhciBhO3JldHVybiBuZXcgR3ZiKChhPXRoaXMuZyxKRCghYT8odGhpcy5nPW5ldyB2aCh0aGlzKSk6YSwyMikpLDE3KX07Xy5lYz1mdW5jdGlvbiBOcygpe3ZhciBhO3JldHVybiBhPXRoaXMuaSwhYT8odGhpcy5pPW5ldyB4Zih0aGlzLHRoaXMuYykpOmF9O18ubmM9ZnVuY3Rpb24gUXMoKXtyZXR1cm4gbmV3ICR2KG5ldyBWcyh0aGlzKSl9O18ub2M9ZnVuY3Rpb24gUnMoKXt2YXIgYTtyZXR1cm4gZWsobmV3IEd2YigoYT10aGlzLmcsSkQoIWE/KHRoaXMuZz1uZXcgdmgodGhpcykpOmEsMjIpKSwxNyksbmV3IFNzKX07Xy5iPTI7dmFyIFFHPWplYihUcWUsJ0xpbmtlZEhhc2hNdWx0aW1hcCcsMTg1NCk7WWNiKDE4NTcsMSx7fSxTcyk7Xy5LYj1mdW5jdGlvbiBUcyhhKXtyZXR1cm4gSkQoYSw0Mykua2QoKX07dmFyIEtHPWplYihUcWUsJ0xpbmtlZEhhc2hNdWx0aW1hcC8wbWV0aG9kcmVmJGdldFZhbHVlJFR5cGUnLDE4NTcpO1ljYig4MTMsMSxXcWUsVnMpO18uTmI9ZnVuY3Rpb24gV3MoYSl7T3NiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gWXMoKXtyZXR1cm4gVXModGhpcyl9O18uT2I9ZnVuY3Rpb24gWHMoKXtyZXR1cm4gdGhpcy5hIT10aGlzLmIuYX07Xy5RYj1mdW5jdGlvbiBacygpe1ZiKCEhdGhpcy5jKTtHYyh0aGlzLmIsdGhpcy5jLmcsdGhpcy5jLmkpO3RoaXMuYz1udWxsfTt2YXIgTEc9amViKFRxZSwnTGlua2VkSGFzaE11bHRpbWFwLzEnLDgxMyk7WWNiKDIyNiwyNDQsezM1NToxLDI0NDoxLDIyNjoxLDU4ODoxLDM6MSw0MzoxfSwkcyk7Xy5aZD1mdW5jdGlvbiBfcygpe3JldHVybiBKRCh2dWIodGhpcy5mKSw1ODgpfTtfLiRkPWZ1bmN0aW9uIGF0KGEpe3RoaXMuYz1hfTtfLl9kPWZ1bmN0aW9uIGJ0KGEpe3RoaXMuZj1hfTtfLmQ9MDt2YXIgTUc9amViKFRxZSwnTGlua2VkSGFzaE11bHRpbWFwL1ZhbHVlRW50cnknLDIyNik7WWNiKDE4NTUsMjAxNCx7NTg4OjEsMjA6MSwzMToxLDE2OjEsMjI6MX0sZXQpO18uRWM9ZnVuY3Rpb24gZnQoYSl7dmFyIGIsYyxkLGUsZjtmPVBjYihGY2IoeXJlLGhmYihQY2IoRmNiKGE9PW51bGw/MDp0YihhKSx6cmUpKSwxNSkpKTtiPWYmdGhpcy5iLmxlbmd0aC0xO2U9dGhpcy5iW2JdO2ZvcihjPWU7YztjPWMuYSl7aWYoYy5kPT1mJiZIYihjLmksYSkpe3JldHVybiBmYWxzZX19ZD1uZXcgJHModGhpcy5jLGEsZixlKTtQcyh0aGlzLmQsZCk7ZC5mPXRoaXM7dGhpcy5kPWQ7T3MoSkQodnViKHRoaXMuZy5hLmIpLDIyNiksZCk7T3MoZCx0aGlzLmcuYSk7dGhpcy5iW2JdPWQ7Kyt0aGlzLmY7Kyt0aGlzLmU7Y3QodGhpcyk7cmV0dXJuIHRydWV9O18uJGI9ZnVuY3Rpb24gZ3QoKXt2YXIgYSxiO0RtYih0aGlzLmIsbnVsbCk7dGhpcy5mPTA7Zm9yKGE9dGhpcy5hO2EhPXRoaXM7YT1hLlpkKCkpe2I9SkQoYSwyMjYpO09zKEpEKHZ1YihiLmIpLDIyNiksSkQodnViKGIuZSksMjI2KSl9dGhpcy5hPXRoaXM7dGhpcy5kPXRoaXM7Kyt0aGlzLmV9O18uR2M9ZnVuY3Rpb24gaHQoYSl7dmFyIGIsYztjPVBjYihGY2IoeXJlLGhmYihQY2IoRmNiKGE9PW51bGw/MDp0YihhKSx6cmUpKSwxNSkpKTtmb3IoYj10aGlzLmJbYyZ0aGlzLmIubGVuZ3RoLTFdO2I7Yj1iLmEpe2lmKGIuZD09YyYmSGIoYi5pLGEpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfTtfLkljPWZ1bmN0aW9uIGl0KGEpe3ZhciBiO1FiKGEpO2ZvcihiPXRoaXMuYTtiIT10aGlzO2I9Yi5aZCgpKXthLkFkKEpEKGIsMjI2KS5pKX19O18uWmQ9ZnVuY3Rpb24ganQoKXtyZXR1cm4gdGhpcy5hfTtfLkpjPWZ1bmN0aW9uIGt0KCl7cmV0dXJuIG5ldyBxdCh0aGlzKX07Xy5LYz1mdW5jdGlvbiBsdChhKXtyZXR1cm4gZHQodGhpcyxhKX07Xy4kZD1mdW5jdGlvbiBtdChhKXt0aGlzLmQ9YX07Xy5fZD1mdW5jdGlvbiBudChhKXt0aGlzLmE9YX07Xy5nYz1mdW5jdGlvbiBvdCgpe3JldHVybiB0aGlzLmZ9O18uZT0wO18uZj0wO3ZhciBPRz1qZWIoVHFlLCdMaW5rZWRIYXNoTXVsdGltYXAvVmFsdWVTZXQnLDE4NTUpO1ljYigxODU2LDEsV3FlLHF0KTtfLk5iPWZ1bmN0aW9uIHJ0KGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIHN0KCl7cmV0dXJuIHB0KHRoaXMpLHRoaXMuYiE9dGhpcy5jfTtfLlBiPWZ1bmN0aW9uIHR0KCl7dmFyIGEsYjtwdCh0aGlzKTtpZih0aGlzLmI9PXRoaXMuYyl7dGhyb3cgc2NiKG5ldyBxdWIpfWE9SkQodGhpcy5iLDIyNik7Yj1hLmk7dGhpcy5kPWE7dGhpcy5iPUpEKHZ1YihhLmYpLDU4OCk7cmV0dXJuIGJ9O18uUWI9ZnVuY3Rpb24gdXQoKXtwdCh0aGlzKTtWYighIXRoaXMuZCk7ZHQodGhpcy5jLHRoaXMuZC5pKTt0aGlzLmE9dGhpcy5jLmU7dGhpcy5kPW51bGx9O18uYT0wO3ZhciBORz1qZWIoVHFlLCdMaW5rZWRIYXNoTXVsdGltYXAvVmFsdWVTZXQvMScsMTg1Nik7WWNiKDc2MiwyMDMwLFZxZSxBdCk7Xy5aYj1mdW5jdGlvbiBCdCgpe3ZhciBhO3JldHVybiBhPXRoaXMuZiwhYT8odGhpcy5mPW5ldyB2dyh0aGlzKSk6YX07Xy5GYj1mdW5jdGlvbiBHdChhKXtyZXR1cm4gdHcodGhpcyxhKX07Xy5jYz1mdW5jdGlvbiBIdChhKXtyZXR1cm4gbmV3IG91KHRoaXMsYSl9O18uZmM9ZnVuY3Rpb24gS3QoYSl7cmV0dXJuIHl0KHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gQ3QoKXt3dCh0aGlzKX07Xy5fYj1mdW5jdGlvbiBEdChhKXtyZXR1cm4geHQodGhpcyxhKX07Xy5hYz1mdW5jdGlvbiBFdCgpe3JldHVybiBuZXcgdncodGhpcyl9O18uYmM9ZnVuY3Rpb24gRnQoKXtyZXR1cm4gbmV3IHJ1KHRoaXMpfTtfLnFjPWZ1bmN0aW9uIEl0KGEpe3JldHVybiBuZXcgb3UodGhpcyxhKX07Xy5kYz1mdW5jdGlvbiBKdCgpe3JldHVybiAhdGhpcy5hfTtfLnJjPWZ1bmN0aW9uIEx0KGEpe3JldHVybiB5dCh0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIE10KCl7cmV0dXJuIHRoaXMuZH07Xy5jPTA7Xy5kPTA7dmFyIFhHPWplYihUcWUsJ0xpbmtlZExpc3RNdWx0aW1hcCcsNzYyKTtZY2IoNTUsMzEsRnJlKTtfLmdkPWZ1bmN0aW9uIGF1KGEpe2h1Yih0aGlzLGEpfTtfLkxjPWZ1bmN0aW9uIGJ1KCl7cmV0dXJuIG5ldyBHdmIodGhpcywxNil9O18uX2M9ZnVuY3Rpb24gUHQoYSxiKXt0aHJvdyBzY2IobmV3IGJoYignQWRkIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBsaXN0JykpfTtfLkVjPWZ1bmN0aW9uIFF0KGEpe3RoaXMuX2ModGhpcy5nYygpLGEpO3JldHVybiB0cnVlfTtfLmFkPWZ1bmN0aW9uIFJ0KGEsYil7dmFyIGMsZCxlO3REYihiKTtjPWZhbHNlO2ZvcihlPWIuSmMoKTtlLk9iKCk7KXtkPWUuUGIoKTt0aGlzLl9jKGErKyxkKTtjPXRydWV9cmV0dXJuIGN9O18uJGI9ZnVuY3Rpb24gU3QoKXt0aGlzLmFlKDAsdGhpcy5nYygpKX07Xy5GYj1mdW5jdGlvbiBUdChhKXtyZXR1cm4gTnQodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBVdCgpe3JldHVybiB0bmIodGhpcyl9O18uYmQ9ZnVuY3Rpb24gVnQoYSl7cmV0dXJuIE90KHRoaXMsYSl9O18uSmM9ZnVuY3Rpb24gV3QoKXtyZXR1cm4gbmV3IHVqYih0aGlzKX07Xy5jZD1mdW5jdGlvbiBYdCgpe3JldHVybiB0aGlzLmRkKDApfTtfLmRkPWZ1bmN0aW9uIFl0KGEpe3JldHVybiBuZXcgQWpiKHRoaXMsYSl9O18uZWQ9ZnVuY3Rpb24gWnQoYSl7dGhyb3cgc2NiKG5ldyBiaGIoJ1JlbW92ZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgbGlzdCcpKX07Xy5hZT1mdW5jdGlvbiAkdChhLGIpe3ZhciBjLGQ7ZD10aGlzLmRkKGEpO2ZvcihjPWE7YzxiOysrYyl7ZC5QYigpO2QuUWIoKX19O18uZmQ9ZnVuY3Rpb24gX3QoYSxiKXt0aHJvdyBzY2IobmV3IGJoYignU2V0IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBsaXN0JykpfTtfLmhkPWZ1bmN0aW9uIGN1KGEsYil7cmV0dXJuIG5ldyBJamIodGhpcyxhLGIpfTtfLmo9MDt2YXIgdEo9amViKFhxZSwnQWJzdHJhY3RMaXN0Jyw1NSk7WWNiKDIwMDgsNTUsRnJlKTtfLl9jPWZ1bmN0aW9uIGh1KGEsYil7ZHUodGhpcyxhLGIpfTtfLmFkPWZ1bmN0aW9uIGl1KGEsYil7cmV0dXJuIGV1KHRoaXMsYSxiKX07Xy5YYj1mdW5jdGlvbiBqdShhKXtyZXR1cm4gZnUodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBrdSgpe3JldHVybiB0aGlzLmRkKDApfTtfLmVkPWZ1bmN0aW9uIGx1KGEpe3JldHVybiBndSh0aGlzLGEpfTtfLmZkPWZ1bmN0aW9uIG11KGIsYyl7dmFyIGQsZTtkPXRoaXMuZGQoYik7dHJ5e2U9ZC5QYigpO2QuV2IoYyk7cmV0dXJuIGV9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwxMTEpKXt0aHJvdyBzY2IobmV3IG1kYigiQ2FuJ3Qgc2V0IGVsZW1lbnQgIitiKSl9ZWxzZSB0aHJvdyBzY2IoYSl9fTt2YXIgSEo9amViKFhxZSwnQWJzdHJhY3RTZXF1ZW50aWFsTGlzdCcsMjAwOCk7WWNiKDYzMSwyMDA4LEZyZSxvdSk7Xy5kZD1mdW5jdGlvbiBwdShhKXtyZXR1cm4gbnUodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBxdSgpe3ZhciBhO2E9SkQoTmliKHRoaXMuYS5iLHRoaXMuYiksMjYwKTtyZXR1cm4gIWE/MDphLmF9O3ZhciBTRz1qZWIoVHFlLCdMaW5rZWRMaXN0TXVsdGltYXAvMScsNjMxKTtZY2IoMTI2OSwyMDE0LF9xZSxydSk7Xy5HYz1mdW5jdGlvbiBzdShhKXtyZXR1cm4geHQodGhpcy5hLGEpfTtfLkpjPWZ1bmN0aW9uIHR1KCl7cmV0dXJuIG5ldyB4dSh0aGlzLmEpfTtfLktjPWZ1bmN0aW9uIHV1KGEpe3JldHVybiAheXQodGhpcy5hLGEpLmEuZGMoKX07Xy5nYz1mdW5jdGlvbiB2dSgpe3JldHVybiBVaWIodGhpcy5hLmIpfTt2YXIgUkc9amViKFRxZSwnTGlua2VkTGlzdE11bHRpbWFwLzFLZXlTZXRJbXBsJywxMjY5KTtZY2IoMTI2OCwxLFdxZSx4dSk7Xy5OYj1mdW5jdGlvbiB5dShhKXtPc2IodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiB6dSgpe3d1KHRoaXMpO3JldHVybiAhIXRoaXMuY307Xy5QYj1mdW5jdGlvbiBBdSgpe3d1KHRoaXMpO2lmKCF0aGlzLmMpe3Rocm93IHNjYihuZXcgcXViKX10aGlzLmE9dGhpcy5jO05yYih0aGlzLmQsdGhpcy5hLmEpO2Rve3RoaXMuYz10aGlzLmMuYn13aGlsZSghIXRoaXMuYyYmIU5yYih0aGlzLmQsdGhpcy5jLmEpKTtyZXR1cm4gdGhpcy5hLmF9O18uUWI9ZnVuY3Rpb24gQnUoKXt3dSh0aGlzKTtWYighIXRoaXMuYSk7d3IobmV3IEp1KHRoaXMuZSx0aGlzLmEuYSkpO3RoaXMuYT1udWxsO3RoaXMuYj10aGlzLmUuY307Xy5iPTA7dmFyIFRHPWplYihUcWUsJ0xpbmtlZExpc3RNdWx0aW1hcC9EaXN0aW5jdEtleUl0ZXJhdG9yJywxMjY4KTtZY2IoMjYwLDEsezI2MDoxfSxDdSk7Xy5hPTA7dmFyIFVHPWplYihUcWUsJ0xpbmtlZExpc3RNdWx0aW1hcC9LZXlMaXN0JywyNjApO1ljYig0OTUsMzU1LHszNTU6MSw0OTU6MSw0MzoxfSxEdSk7Xy5qZD1mdW5jdGlvbiBFdSgpe3JldHVybiB0aGlzLmF9O18ua2Q9ZnVuY3Rpb24gRnUoKXtyZXR1cm4gdGhpcy5mfTtfLmxkPWZ1bmN0aW9uIEd1KGEpe3ZhciBiO2I9dGhpcy5mO3RoaXMuZj1hO3JldHVybiBifTt2YXIgVkc9amViKFRxZSwnTGlua2VkTGlzdE11bHRpbWFwL05vZGUnLDQ5NSk7WWNiKDU1MSwxLGRyZSxKdSxLdSk7Xy5OYj1mdW5jdGlvbiBNdShhKXtPc2IodGhpcyxhKX07Xy5SYj1mdW5jdGlvbiBMdShhKXt0aGlzLmU9dnQodGhpcy5mLHRoaXMuYixhLHRoaXMuYyk7Kyt0aGlzLmQ7dGhpcy5hPW51bGx9O18uT2I9ZnVuY3Rpb24gTnUoKXtyZXR1cm4gISF0aGlzLmN9O18uU2I9ZnVuY3Rpb24gT3UoKXtyZXR1cm4gISF0aGlzLmV9O18uUGI9ZnVuY3Rpb24gUHUoKXtyZXR1cm4gSHUodGhpcyl9O18uVGI9ZnVuY3Rpb24gUXUoKXtyZXR1cm4gdGhpcy5kfTtfLlViPWZ1bmN0aW9uIFJ1KCl7cmV0dXJuIEl1KHRoaXMpfTtfLlZiPWZ1bmN0aW9uIFN1KCl7cmV0dXJuIHRoaXMuZC0xfTtfLlFiPWZ1bmN0aW9uIFR1KCl7VmIoISF0aGlzLmEpO2lmKHRoaXMuYSE9dGhpcy5jKXt0aGlzLmU9dGhpcy5hLmU7LS10aGlzLmR9ZWxzZXt0aGlzLmM9dGhpcy5hLmN9enQodGhpcy5mLHRoaXMuYSk7dGhpcy5hPW51bGx9O18uV2I9ZnVuY3Rpb24gVXUoYSl7VWIoISF0aGlzLmEpO3RoaXMuYS5mPWF9O18uZD0wO3ZhciBXRz1qZWIoVHFlLCdMaW5rZWRMaXN0TXVsdGltYXAvVmFsdWVGb3JLZXlJdGVyYXRvcicsNTUxKTtZY2IoMTAwNiw1NSxGcmUpO18uX2M9ZnVuY3Rpb24gZXYoYSxiKXt0aGlzLmEuX2MoYSxiKX07Xy5hZD1mdW5jdGlvbiBmdihhLGIpe3JldHVybiB0aGlzLmEuYWQoYSxiKX07Xy5HYz1mdW5jdGlvbiBndihhKXtyZXR1cm4gdGhpcy5hLkdjKGEpfTtfLlhiPWZ1bmN0aW9uIGh2KGEpe3JldHVybiB0aGlzLmEuWGIoYSl9O18uZWQ9ZnVuY3Rpb24gaXYoYSl7cmV0dXJuIHRoaXMuYS5lZChhKX07Xy5mZD1mdW5jdGlvbiBqdihhLGIpe3JldHVybiB0aGlzLmEuZmQoYSxiKX07Xy5nYz1mdW5jdGlvbiBrdigpe3JldHVybiB0aGlzLmEuZ2MoKX07dmFyIFpHPWplYihUcWUsJ0xpc3RzL0Fic3RyYWN0TGlzdFdyYXBwZXInLDEwMDYpO1ljYigxMDA3LDEwMDYsSHJlKTt2YXIgJEc9amViKFRxZSwnTGlzdHMvUmFuZG9tQWNjZXNzTGlzdFdyYXBwZXInLDEwMDcpO1ljYigxMDA5LDEwMDcsSHJlLGx2KTtfLmRkPWZ1bmN0aW9uIG12KGEpe3JldHVybiB0aGlzLmEuZGQoYSl9O3ZhciBZRz1qZWIoVHFlLCdMaXN0cy8xJywxMDA5KTtZY2IoNDI5LDU1LHs0Mjk6MSwyMDoxLDMxOjEsNTU6MSwxNjoxLDE1OjF9LHF2KTtfLl9jPWZ1bmN0aW9uIHJ2KGEsYil7dGhpcy5hLl9jKHB2KHRoaXMsYSksYil9O18uJGI9ZnVuY3Rpb24gc3YoKXt0aGlzLmEuJGIoKX07Xy5YYj1mdW5jdGlvbiB0dihhKXtyZXR1cm4gdGhpcy5hLlhiKG92KHRoaXMsYSkpfTtfLkpjPWZ1bmN0aW9uIHV2KCl7cmV0dXJuIG52KHRoaXMsMCl9O18uZGQ9ZnVuY3Rpb24gdnYoYSl7cmV0dXJuIG52KHRoaXMsYSl9O18uZWQ9ZnVuY3Rpb24gd3YoYSl7cmV0dXJuIHRoaXMuYS5lZChvdih0aGlzLGEpKX07Xy5hZT1mdW5jdGlvbiB4dihhLGIpeyhUYihhLGIsdGhpcy5hLmdjKCkpLGR2KHRoaXMuYS5oZChwdih0aGlzLGIpLHB2KHRoaXMsYSkpKSkuJGIoKX07Xy5mZD1mdW5jdGlvbiB5dihhLGIpe3JldHVybiB0aGlzLmEuZmQob3YodGhpcyxhKSxiKX07Xy5nYz1mdW5jdGlvbiB6digpe3JldHVybiB0aGlzLmEuZ2MoKX07Xy5oZD1mdW5jdGlvbiBBdihhLGIpe3JldHVybiBUYihhLGIsdGhpcy5hLmdjKCkpLGR2KHRoaXMuYS5oZChwdih0aGlzLGIpLHB2KHRoaXMsYSkpKX07dmFyIGJIPWplYihUcWUsJ0xpc3RzL1JldmVyc2VMaXN0Jyw0MjkpO1ljYigxMDA1LDQyOSx7NDI5OjEsMjA6MSwzMToxLDU1OjEsMTY6MSwxNToxLDU5OjF9LEJ2KTt2YXIgX0c9amViKFRxZSwnTGlzdHMvUmFuZG9tQWNjZXNzUmV2ZXJzZUxpc3QnLDEwMDUpO1ljYigxMDA4LDEsZHJlLEN2KTtfLk5iPWZ1bmN0aW9uIEV2KGEpe09zYih0aGlzLGEpfTtfLlJiPWZ1bmN0aW9uIER2KGEpe3RoaXMuYy5SYihhKTt0aGlzLmMuVWIoKTt0aGlzLmE9ZmFsc2V9O18uT2I9ZnVuY3Rpb24gRnYoKXtyZXR1cm4gdGhpcy5jLlNiKCl9O18uU2I9ZnVuY3Rpb24gR3YoKXtyZXR1cm4gdGhpcy5jLk9iKCl9O18uUGI9ZnVuY3Rpb24gSHYoKXtpZighdGhpcy5jLlNiKCkpe3Rocm93IHNjYihuZXcgcXViKX10aGlzLmE9dHJ1ZTtyZXR1cm4gdGhpcy5jLlViKCl9O18uVGI9ZnVuY3Rpb24gSXYoKXtyZXR1cm4gcHYodGhpcy5iLHRoaXMuYy5UYigpKX07Xy5VYj1mdW5jdGlvbiBKdigpe2lmKCF0aGlzLmMuT2IoKSl7dGhyb3cgc2NiKG5ldyBxdWIpfXRoaXMuYT10cnVlO3JldHVybiB0aGlzLmMuUGIoKX07Xy5WYj1mdW5jdGlvbiBLdigpe3JldHVybiBwdih0aGlzLmIsdGhpcy5jLlRiKCkpLTF9O18uUWI9ZnVuY3Rpb24gTHYoKXtWYih0aGlzLmEpO3RoaXMuYy5RYigpO3RoaXMuYT1mYWxzZX07Xy5XYj1mdW5jdGlvbiBNdihhKXtVYih0aGlzLmEpO3RoaXMuYy5XYihhKX07Xy5hPWZhbHNlO3ZhciBhSD1qZWIoVHFlLCdMaXN0cy9SZXZlcnNlTGlzdC8xJywxMDA4KTtZY2IoNDI4LDQ4MSxXcWUsWXYpO18uWWQ9ZnVuY3Rpb24gWnYoYSl7cmV0dXJuIFh2KGEpfTt2YXIgY0g9amViKFRxZSwnTWFwcy8xJyw0MjgpO1ljYig2OTYsNDgxLFdxZSwkdik7Xy5ZZD1mdW5jdGlvbiBfdihhKXtyZXR1cm4gSkQoYSw0Mykua2QoKX07dmFyIGRIPWplYihUcWUsJ01hcHMvMicsNjk2KTtZY2IoOTUzLDQ4MSxXcWUsYXcpO18uWWQ9ZnVuY3Rpb24gYncoYSl7cmV0dXJuIG5ldyBjcChhLEl3KHRoaXMuYSxhKSl9O3ZhciBlSD1qZWIoVHFlLCdNYXBzLzMnLDk1Myk7WWNiKDk1MCwyMDE1LF9xZSxjdyk7Xy5JYz1mdW5jdGlvbiBkdyhhKXtzaih0aGlzLmEsYSl9O18uSmM9ZnVuY3Rpb24gZXcoKXtyZXR1cm4gdGhpcy5hLmtjKCl9O18uUGM9ZnVuY3Rpb24gZncoKXtyZXR1cm4gdGhpcy5hfTtfLkxjPWZ1bmN0aW9uIGd3KCl7cmV0dXJuIHRoaXMuYS5sYygpfTt2YXIgZ0g9amViKFRxZSwnTWFwcy9JdGVyYXRvckJhc2VkQWJzdHJhY3RNYXAvMScsOTUwKTtZY2IoOTUxLDEse30saHcpO18uV2Q9ZnVuY3Rpb24gaXcoYSxiKXt0aGlzLmEuQWQoYSl9O3ZhciBpSD1qZWIoVHFlLCdNYXBzL0tleVNldC9sYW1iZGEkMCRUeXBlJyw5NTEpO1ljYig5NDksMzEsWnFlLGp3KTtfLiRiPWZ1bmN0aW9uIGt3KCl7dGhpcy5hLiRiKCl9O18uR2M9ZnVuY3Rpb24gbHcoYSl7cmV0dXJuIHRoaXMuYS51YyhhKX07Xy5JYz1mdW5jdGlvbiBtdyhhKXtRYihhKTt0aGlzLmEud2MobmV3IHJ3KGEpKX07Xy5kYz1mdW5jdGlvbiBudygpe3JldHVybiB0aGlzLmEuZGMoKX07Xy5KYz1mdW5jdGlvbiBvdygpe3JldHVybiBuZXcgJHYodGhpcy5hLnZjKCkuSmMoKSl9O18uS2M9ZnVuY3Rpb24gcHcoYil7dmFyIGMsZDt0cnl7cmV0dXJuIHllKHRoaXMsYix0cnVlKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDQ2KSl7Zm9yKGQ9dGhpcy5hLnZjKCkuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSw0Myk7aWYoSGIoYixjLmtkKCkpKXt0aGlzLmEuQWMoYy5qZCgpKTtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfWVsc2UgdGhyb3cgc2NiKGEpfX07Xy5nYz1mdW5jdGlvbiBxdygpe3JldHVybiB0aGlzLmEuZ2MoKX07dmFyIGxIPWplYihUcWUsJ01hcHMvVmFsdWVzJyw5NDkpO1ljYig5NTIsMSx7fSxydyk7Xy5XZD1mdW5jdGlvbiBzdyhhLGIpe3RoaXMuYS5BZChiKX07dmFyIGtIPWplYihUcWUsJ01hcHMvVmFsdWVzL2xhbWJkYSQwJFR5cGUnLDk1Mik7WWNiKDczNSwyMDMxLFlxZSx2dyk7Xy54Yz1mdW5jdGlvbiB6dyhhKXtyZXR1cm4gdGhpcy5hLl9iKGEpP3RoaXMuYS5jYyhhKTpudWxsfTtfLkFjPWZ1bmN0aW9uIEN3KGEpe3JldHVybiB0aGlzLmEuX2IoYSk/dGhpcy5hLmZjKGEpOm51bGx9O18uJGI9ZnVuY3Rpb24gd3coKXt0aGlzLmEuJGIoKX07Xy5fYj1mdW5jdGlvbiB4dyhhKXtyZXR1cm4gdGhpcy5hLl9iKGEpfTtfLkRjPWZ1bmN0aW9uIHl3KCl7cmV0dXJuIG5ldyBFdyh0aGlzKX07Xy5DYz1mdW5jdGlvbigpe3JldHVybiB0aGlzLkRjKCl9O18uZGM9ZnVuY3Rpb24gQXcoKXtyZXR1cm4gdGhpcy5hLmRjKCl9O18uZWM9ZnVuY3Rpb24gQncoKXtyZXR1cm4gdGhpcy5hLmVjKCl9O18uZ2M9ZnVuY3Rpb24gRHcoKXtyZXR1cm4gdGhpcy5hLmVjKCkuZ2MoKX07dmFyIHBIPWplYihUcWUsJ011bHRpbWFwcy9Bc01hcCcsNzM1KTtZY2IoMTA5OCwyMDE1LF9xZSxFdyk7Xy5KYz1mdW5jdGlvbiBGdygpe3JldHVybiBOdih0aGlzLmEuYS5lYygpLG5ldyBKdyh0aGlzKSl9O18uUGM9ZnVuY3Rpb24gR3coKXtyZXR1cm4gdGhpcy5hfTtfLktjPWZ1bmN0aW9uIEh3KGEpe3ZhciBiO2lmKCFYZSh0aGlzLGEpKXtyZXR1cm4gZmFsc2V9Yj1KRCh2dWIoSkQoYSw0MykpLDQzKTt1dyh0aGlzLmEsYi5qZCgpKTtyZXR1cm4gdHJ1ZX07dmFyIG9IPWplYihUcWUsJ011bHRpbWFwcy9Bc01hcC9FbnRyeVNldCcsMTA5OCk7WWNiKDExMDIsMSx7fSxKdyk7Xy5LYj1mdW5jdGlvbiBLdyhhKXtyZXR1cm4gSXcodGhpcyxhKX07Xy5GYj1mdW5jdGlvbiBMdyhhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBuSD1qZWIoVHFlLCdNdWx0aW1hcHMvQXNNYXAvRW50cnlTZXQvMScsMTEwMik7WWNiKDUzNywyMDMzLHs1Mzc6MSw4Mjg6MSwyMDoxLDMxOjEsMTY6MX0sT3cpO18uJGI9ZnVuY3Rpb24gUHcoKXtOYyh0aGlzLmEpfTtfLkdjPWZ1bmN0aW9uIFF3KGEpe3JldHVybiBPYyh0aGlzLmEsYSl9O18uSWM9ZnVuY3Rpb24gUncoYSl7UWIoYSk7b2ZiKFBjKHRoaXMuYSksbmV3IGJ4KGEpKX07Xy5KYz1mdW5jdGlvbiBTdygpe3JldHVybiBuZXcgWXYoUGModGhpcy5hKS5hLmtjKCkpfTtfLmdjPWZ1bmN0aW9uIFR3KCl7cmV0dXJuIHRoaXMuYS5kfTtfLkxjPWZ1bmN0aW9uIFV3KCl7cmV0dXJuIGVrKFBjKHRoaXMuYSkuTGMoKSxuZXcgVncpfTt2YXIgdkg9amViKFRxZSwnTXVsdGltYXBzL0tleXMnLDUzNyk7WWNiKDExMDAsMSx7fSxWdyk7Xy5LYj1mdW5jdGlvbiBXdyhhKXtyZXR1cm4gSkQoYSw0MykuamQoKX07dmFyIHJIPWplYihUcWUsJ011bHRpbWFwcy9LZXlzLzBtZXRob2RyZWYkZ2V0S2V5JFR5cGUnLDExMDApO1ljYigxMDk5LDQ4MSxXcWUsWHcpO18uWWQ9ZnVuY3Rpb24gWXcoYSl7cmV0dXJuIG5ldyBheChKRChhLDQzKSl9O3ZhciB0SD1qZWIoVHFlLCdNdWx0aW1hcHMvS2V5cy8xJywxMDk5KTtZY2IoMjAzNCwxLHs0MTM6MX0pO18uRmI9ZnVuY3Rpb24gWncoYSl7dmFyIGI7aWYoUkQoYSw0ODgpKXtiPUpEKGEsNDEzKTtyZXR1cm4gSkQodGhpcy5hLmtkKCksMTYpLmdjKCk9PUpEKGIuYS5rZCgpLDE2KS5nYygpJiZIYih0aGlzLmEuamQoKSxiLmEuamQoKSl9cmV0dXJuIGZhbHNlfTtfLkhiPWZ1bmN0aW9uICR3KCl7dmFyIGE7YT10aGlzLmEuamQoKTtyZXR1cm4gKGE9PW51bGw/MDp0YihhKSleSkQodGhpcy5hLmtkKCksMTYpLmdjKCl9O18uSWI9ZnVuY3Rpb24gX3coKXt2YXIgYSxiO2I9eGdiKHRoaXMuYS5qZCgpKTthPUpEKHRoaXMuYS5rZCgpLDE2KS5nYygpO3JldHVybiBhPT0xP2I6YisnIHggJythfTt2YXIgekg9amViKFRxZSwnTXVsdGlzZXRzL0Fic3RyYWN0RW50cnknLDIwMzQpO1ljYig0ODgsMjAzNCx7NDg4OjEsNDEzOjF9LGF4KTt2YXIgc0g9amViKFRxZSwnTXVsdGltYXBzL0tleXMvMS8xJyw0ODgpO1ljYigxMTAxLDEsa3JlLGJ4KTtfLkFkPWZ1bmN0aW9uIGN4KGEpe3RoaXMuYS5BZChKRChhLDQzKS5qZCgpKX07dmFyIHVIPWplYihUcWUsJ011bHRpbWFwcy9LZXlzL2xhbWJkYSQxJFR5cGUnLDExMDEpO1ljYigxMTA0LDEsa3JlLGZ4KTtfLkFkPWZ1bmN0aW9uIGd4KGEpe2R4KEpEKGEsNDEzKSl9O3ZhciB3SD1qZWIoVHFlLCdNdWx0aXNldC9sYW1iZGEkMCRUeXBlJywxMTA0KTtZY2IoNzM2LDEsa3JlLGh4KTtfLkFkPWZ1bmN0aW9uIGl4KGEpe2V4KHRoaXMuYSxKRChhLDQxMykpfTt2YXIgeEg9amViKFRxZSwnTXVsdGlzZXQvbGFtYmRhJDEkVHlwZScsNzM2KTtZY2IoMTEwNSwxLHt9LG54KTt2YXIgeUg9amViKFRxZSwnTXVsdGlzZXRzLzBtZXRob2RyZWYkYWRkJFR5cGUnLDExMDUpO1ljYig3MzcsMSx7fSxveCk7Xy5LYj1mdW5jdGlvbiBweChhKXtyZXR1cm4gbHgoSkQoYSw0MTMpKX07dmFyIEJIPWplYihUcWUsJ011bHRpc2V0cy9sYW1iZGEkMSRUeXBlJyw3MzcpO1ljYigyMDUyLDEsSnFlKTt2YXIgQ0g9amViKFRxZSwnUmFuZ2VHd3RTZXJpYWxpemF0aW9uRGVwZW5kZW5jaWVzJywyMDUyKTtZY2IoNTA1LDIwNTIsezE3NzoxLDUwNToxLDM6MSw0ODoxfSxzeCk7Xy5MYj1mdW5jdGlvbiB0eChhKXtyZXR1cm4gcngodGhpcyxKRChhLDM0KSl9O18uTWI9ZnVuY3Rpb24geHgoYSl7cmV0dXJuIHJ4KHRoaXMsSkQoYSwzNCkpfTtfLkZiPWZ1bmN0aW9uIHZ4KGEpe3ZhciBiO2lmKFJEKGEsNTA1KSl7Yj1KRChhLDUwNSk7cmV0dXJuIE5rKHRoaXMuYSxiLmEpJiZOayh0aGlzLmIsYi5iKX1yZXR1cm4gZmFsc2V9O18uSGI9ZnVuY3Rpb24gd3goKXtyZXR1cm4gdGhpcy5hLkhiKCkqMzErdGhpcy5iLkhiKCl9O18uSWI9ZnVuY3Rpb24geXgoKXtyZXR1cm4gengodGhpcy5hLHRoaXMuYil9O3ZhciBESD1qZWIoVHFlLCdSYW5nZScsNTA1KTtZY2IoNjM3LDIwNDMsc3JlLEJ4KTtfLmRkPWZ1bmN0aW9uIEZ4KGEpe3JldHVybiBybSh0aGlzLmIsYSl9O18uWGQ9ZnVuY3Rpb24gQ3goKXtyZXR1cm4gdGhpcy5hfTtfLlhiPWZ1bmN0aW9uIER4KGEpe3JldHVybiBObSh0aGlzLmIsYSl9O18uTmQ9ZnVuY3Rpb24gRXgoYSl7cmV0dXJuIHJtKHRoaXMuYixhKX07dmFyIEVIPWplYihUcWUsJ1JlZ3VsYXJJbW11dGFibGVBc0xpc3QnLDYzNyk7WWNiKDY0MCwyMDUxLHNyZSxHeCk7Xy5QZD1mdW5jdGlvbiBIeCgpe3JldHVybiB0aGlzLmF9O3ZhciBGSD1qZWIoVHFlLCdSZWd1bGFySW1tdXRhYmxlTGlzdCcsNjQwKTtZY2IoNTMzLDcxMyx1cmUsSXgsSngpO3ZhciBHSD1qZWIoVHFlLCdSZWd1bGFySW1tdXRhYmxlTWFwJyw1MzMpO1ljYig3MTQsNzAzLHdyZSxNeCk7dmFyIEt4O3ZhciBISD1qZWIoVHFlLCdSZWd1bGFySW1tdXRhYmxlU2V0Jyw3MTQpO1ljYigyMDIwLCRxZSxfcWUpO18uSmM9ZnVuY3Rpb24gWngoKXtyZXR1cm4gbmV3IGp5KHRoaXMuYSx0aGlzLmIpfTtfLkVjPWZ1bmN0aW9uIFd4KGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5GYz1mdW5jdGlvbiBYeChhKXt0aHJvdyBzY2IobmV3IGFoYil9O18uJGI9ZnVuY3Rpb24gWXgoKXt0aHJvdyBzY2IobmV3IGFoYil9O18uS2M9ZnVuY3Rpb24gJHgoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTt2YXIgTUg9amViKFRxZSwnU2V0cy9TZXRWaWV3JywyMDIwKTtZY2IoOTU0LDIwMjAsX3FlLGF5KTtfLkpjPWZ1bmN0aW9uIGV5KCl7cmV0dXJuIG5ldyBqeSh0aGlzLmEsdGhpcy5iKX07Xy5HYz1mdW5jdGlvbiBieShhKXtyZXR1cm4gcXJiKHRoaXMuYSxhKSYmdGhpcy5iLkdjKGEpfTtfLkhjPWZ1bmN0aW9uIGN5KGEpe3JldHVybiBBZSh0aGlzLmEsYSkmJnRoaXMuYi5IYyhhKX07Xy5kYz1mdW5jdGlvbiBkeSgpe3JldHVybiBybmIodGhpcy5iLHRoaXMuYSl9O18uZ2M9ZnVuY3Rpb24gZnkoKXtyZXR1cm4gX3godGhpcyl9O18uTWM9ZnVuY3Rpb24gZ3koKXtyZXR1cm4gQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKHRoaXMuYSwxKSksbmV3IGh5KHRoaXMuYikpfTt2YXIgS0g9amViKFRxZSwnU2V0cy8yJyw5NTQpO1ljYig5NTUsMSxJcmUsaHkpO18uTWI9ZnVuY3Rpb24gaXkoYSl7cmV0dXJuIHRoaXMuYS5HYyhhKX07dmFyIElIPWplYihUcWUsJ1NldHMvMi8wbWV0aG9kcmVmJGNvbnRhaW5zJFR5cGUnLDk1NSk7WWNiKDY5OCw2OTcsU3FlLGp5KTtfLlliPWZ1bmN0aW9uIGt5KCl7dmFyIGE7d2hpbGUoQnJiKHRoaXMuYSkpe2E9Q3JiKHRoaXMuYSk7aWYodGhpcy5jLkdjKGEpKXtyZXR1cm4gYX19cmV0dXJuIHRoaXMuZT0yLG51bGx9O3ZhciBKSD1qZWIoVHFlLCdTZXRzLzIvMScsNjk4KTtZY2IoNjAxLDIwMTksezYwMToxLDM6MSwyMDoxLDE2OjEsMjc0OjEsMjI6MSw4MzoxfSxseSk7Xy5JZD1mdW5jdGlvbiBteSgpe3JldHVybiB0aGlzLmJ9O18uSmQ9ZnVuY3Rpb24gbnkoKXtyZXR1cm4gdGhpcy5ifTtfLlVkPWZ1bmN0aW9uIG95KCl7cmV0dXJuIHRoaXMuYn07Xy5JYz1mdW5jdGlvbiBweShhKXt0aGlzLmEuSWMoYSl9O18uTWM9ZnVuY3Rpb24gcXkoKXtyZXR1cm4gdGhpcy5hLk1jKCl9O3ZhciBOSD1qZWIoVHFlLCdTZXRzL1VubW9kaWZpYWJsZU5hdmlnYWJsZVNldCcsNjAxKTtZY2IoMTk3NywxOTc2LHVyZSxyeSk7Xy5UZD1mdW5jdGlvbiBzeSgpe3JldHVybiBZbCgpLG5ldyB4eSh0aGlzLmEpfTtfLkJjPWZ1bmN0aW9uIHR5KCl7cmV0dXJuIFlsKCksbmV3IHh5KHRoaXMuYSl9O18udmQ9ZnVuY3Rpb24gdXkoKXtyZXR1cm4gWWwoKSxuZXcgeHkodGhpcy5hKX07dmFyIE9IPWplYihUcWUsJ1NpbmdsZXRvbkltbXV0YWJsZUJpTWFwJywxOTc3KTtZY2IoNjQxLDIwNTEsc3JlLHZ5KTtfLlBkPWZ1bmN0aW9uIHd5KCl7cmV0dXJuIHRoaXMuYX07dmFyIFBIPWplYihUcWUsJ1NpbmdsZXRvbkltbXV0YWJsZUxpc3QnLDY0MSk7WWNiKDM1NiwyMDI1LHdyZSx4eSk7Xy5KYz1mdW5jdGlvbiBBeSgpe3JldHVybiBuZXcgV3IodGhpcy5hKX07Xy5HYz1mdW5jdGlvbiB5eShhKXtyZXR1cm4gcGIodGhpcy5hLGEpfTtfLk1kPWZ1bmN0aW9uIHp5KCl7cmV0dXJuIG5ldyBXcih0aGlzLmEpfTtfLmdjPWZ1bmN0aW9uIEJ5KCl7cmV0dXJuIDF9O3ZhciBRSD1qZWIoVHFlLCdTaW5nbGV0b25JbW11dGFibGVTZXQnLDM1Nik7WWNiKDExMTIsMSx7fSxFeSk7Xy5LYj1mdW5jdGlvbiBGeShhKXtyZXR1cm4gSkQoYSwxNTgpfTt2YXIgUkg9amViKFRxZSwnU3RyZWFtcy9sYW1iZGEkMCRUeXBlJywxMTEyKTtZY2IoMTExMywxLEpyZSxHeSk7Xy5iZT1mdW5jdGlvbiBIeSgpe0N5KHRoaXMuYSl9O3ZhciBTSD1qZWIoVHFlLCdTdHJlYW1zL2xhbWJkYSQxJFR5cGUnLDExMTMpO1ljYigxNjY3LDE2NjYsVnFlLEp5KTtfLlpiPWZ1bmN0aW9uIEt5KCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5mLEpEKEpEKCFhPyh0aGlzLmY9UkQodGhpcy5jLDEzNyk/bmV3IFNmKHRoaXMsSkQodGhpcy5jLDEzNykpOlJEKHRoaXMuYywxMzQpP25ldyBLZih0aGlzLEpEKHRoaXMuYywxMzQpKTpuZXcgbWUodGhpcyx0aGlzLmMpKTphLDEzNCksMTM3KX07Xy5oYz1mdW5jdGlvbiBOeSgpe3JldHVybiBuZXcgbXpiKHRoaXMuYil9O18ubmQ9ZnVuY3Rpb24gT3koKXtyZXR1cm4gbmV3IG16Yih0aGlzLmIpfTtfLmVjPWZ1bmN0aW9uIFF5KCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5pLEpEKEpEKCFhPyh0aGlzLmk9UkQodGhpcy5jLDEzNyk/bmV3IGVnKHRoaXMsSkQodGhpcy5jLDEzNykpOlJEKHRoaXMuYywxMzQpP25ldyBjZyh0aGlzLEpEKHRoaXMuYywxMzQpKTpuZXcgeGYodGhpcyx0aGlzLmMpKTphLDgzKSwyNzQpfTtfLmFjPWZ1bmN0aW9uIE15KCl7cmV0dXJuIFJEKHRoaXMuYywxMzcpP25ldyBTZih0aGlzLEpEKHRoaXMuYywxMzcpKTpSRCh0aGlzLmMsMTM0KT9uZXcgS2YodGhpcyxKRCh0aGlzLmMsMTM0KSk6bmV3IG1lKHRoaXMsdGhpcy5jKX07Xy5pYz1mdW5jdGlvbiBQeShhKXthPT1udWxsJiZ0aGlzLmEuTGUoYSxhKTtyZXR1cm4gbmV3IG16Yih0aGlzLmIpfTt2YXIgVkg9amViKFRxZSwnVHJlZU11bHRpbWFwJywxNjY3KTtZY2IoODAsMSx7MzoxLDgwOjF9KTtfLmNlPWZ1bmN0aW9uIGh6KGEpe3JldHVybiBuZXcgRXJyb3IoYSl9O18uZGU9ZnVuY3Rpb24ganooKXtyZXR1cm4gdGhpcy5lfTtfLmVlPWZ1bmN0aW9uIGt6KCl7dmFyIGEsYixjO2M9KHRoaXMuaz09bnVsbCYmKHRoaXMuaz1TQyhpSixocmUsODAsMCwwLDEpKSx0aGlzLmspO2I9U0MoYUosTnFlLDEsYy5sZW5ndGgsNSwxKTtmb3IoYT0wO2E8Yy5sZW5ndGg7YSsrKXtiW2FdPWNbYV0uZX1yZXR1cm4gYn07Xy5mZT1mdW5jdGlvbiBseigpe3JldHVybiB0aGlzLmZ9O18uZ2U9ZnVuY3Rpb24gbXooKXtyZXR1cm4gdGhpcy5nfTtfLmhlPWZ1bmN0aW9uIG56KCl7Y3oodGhpcyxpeih0aGlzLmNlKGR6KHRoaXMsdGhpcy5nKSkpKTskeih0aGlzKX07Xy5JYj1mdW5jdGlvbiBveigpe3JldHVybiBkeih0aGlzLHRoaXMuZ2UoKSl9O18uZT1NcmU7Xy5pPWZhbHNlO18ubj10cnVlO3ZhciBpSj1qZWIoSXFlLCdUaHJvd2FibGUnLDgwKTtZY2IoMTAzLDgwLHszOjEsMTAzOjEsODA6MX0pO3ZhciBPST1qZWIoSXFlLCdFeGNlcHRpb24nLDEwMyk7WWNiKDYzLDEwMyxOcmUscHoscXopO3ZhciBiSj1qZWIoSXFlLCdSdW50aW1lRXhjZXB0aW9uJyw2Myk7WWNiKDU5MSw2MyxOcmUpO3ZhciBXST1qZWIoSXFlLCdKc0V4Y2VwdGlvbicsNTkxKTtZY2IoODUxLDU5MSxOcmUpO3ZhciBhST1qZWIoT3JlLCdKYXZhU2NyaXB0RXhjZXB0aW9uQmFzZScsODUxKTtZY2IoNDcyLDg1MSx7NDcyOjEsMzoxLDEwMzoxLDYzOjEsODA6MX0sdXopO18uZ2U9ZnVuY3Rpb24geHooKXt0eih0aGlzKTtyZXR1cm4gdGhpcy5jfTtfLmllPWZ1bmN0aW9uIHl6KCl7cmV0dXJuIFhEKHRoaXMuYik9PT1YRChyeik/bnVsbDp0aGlzLmJ9O3ZhciByejt2YXIgWUg9amViKFFyZSwnSmF2YVNjcmlwdEV4Y2VwdGlvbicsNDcyKTt2YXIgWkg9amViKFFyZSwnSmF2YVNjcmlwdE9iamVjdCQnLDApO3ZhciBCejtZY2IoMTk5MywxLHt9KTt2YXIgX0g9amViKFFyZSwnU2NoZWR1bGVyJywxOTkzKTt2YXIgRno9MCxHej0wLEh6PS0xO1ljYig4NzgsMTk5Myx7fSxWeik7dmFyIFJ6O3ZhciBiST1qZWIoT3JlLCdTY2hlZHVsZXJJbXBsJyw4NzgpO3ZhciBZejtZY2IoMjAwNCwxLHt9KTt2YXIgZkk9amViKE9yZSwnU3RhY2tUcmFjZUNyZWF0b3IvQ29sbGVjdG9yJywyMDA0KTtZY2IoODUyLDIwMDQse30sZUEpO18uamU9ZnVuY3Rpb24gZkEoYSl7dmFyIGI9e30sajt2YXIgYz1bXTthW1NyZV09Yzt2YXIgZD1hcmd1bWVudHMuY2FsbGVlLmNhbGxlcjt3aGlsZShkKXt2YXIgZT0oWnooKSxkLm5hbWV8fChkLm5hbWU9YUEoZC50b1N0cmluZygpKSkpO2MucHVzaChlKTt2YXIgZj0nOicrZTt2YXIgZz1iW2ZdO2lmKGcpe3ZhciBoLGk7Zm9yKGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspe2lmKGdbaF09PT1kKXtyZXR1cm59fX0oZ3x8KGJbZl09W10pKS5wdXNoKGQpO2Q9ZC5jYWxsZXJ9fTtfLmtlPWZ1bmN0aW9uIGdBKGEpe3ZhciBiLGMsZCxlO2Q9KFp6KCksYSYmYVtTcmVdP2FbU3JlXTpbXSk7Yz1kLmxlbmd0aDtlPVNDKGRKLGhyZSwzMjAsYywwLDEpO2ZvcihiPTA7YjxjO2IrKyl7ZVtiXT1uZXcgWGZiKGRbYl0sbnVsbCwtMSl9cmV0dXJuIGV9O3ZhciBjST1qZWIoT3JlLCdTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JMZWdhY3knLDg1Mik7WWNiKDIwMDUsMjAwNCx7fSk7Xy5qZT1mdW5jdGlvbiBpQShhKXt9O18ubGU9ZnVuY3Rpb24gakEoYSxiLGMsZCl7cmV0dXJuIG5ldyBYZmIoYixhKydAJytkLGM8MD8tMTpjKX07Xy5rZT1mdW5jdGlvbiBrQShhKXt2YXIgYixjLGQsZSxmLGc7ZT1jQShhKTtmPVNDKGRKLGhyZSwzMjAsMCwwLDEpO2I9MDtkPWUubGVuZ3RoO2lmKGQ9PTApe3JldHVybiBmfWc9aEEodGhpcyxlWzBdKTtjZ2IoZy5kLFJyZSl8fChmW2IrK109Zyk7Zm9yKGM9MTtjPGQ7YysrKXtmW2IrK109aEEodGhpcyxlW2NdKX1yZXR1cm4gZn07dmFyIGVJPWplYihPcmUsJ1N0YWNrVHJhY2VDcmVhdG9yL0NvbGxlY3Rvck1vZGVybicsMjAwNSk7WWNiKDg1MywyMDA1LHt9LGxBKTtfLmxlPWZ1bmN0aW9uIG1BKGEsYixjLGQpe3JldHVybiBuZXcgWGZiKGIsYSwtMSl9O3ZhciBkST1qZWIoT3JlLCdTdGFja1RyYWNlQ3JlYXRvci9Db2xsZWN0b3JNb2Rlcm5Ob1NvdXJjZU1hcCcsODUzKTtZY2IoMTAzOSwxLHt9KTt2YXIgbUk9amViKHNzZSx0c2UsMTAzOSk7WWNiKDYwOSwxMDM5LHs2MDk6MX0sUEEpO3ZhciBOQTt2YXIgZ0k9amViKHVzZSx0c2UsNjA5KTtZY2IoMjA0NywxLHt9KTt2YXIgbkk9amViKHNzZSx2c2UsMjA0Nyk7WWNiKHdzZSwyMDQ3LHt9KTt2YXIgaEk9amViKHVzZSx2c2Usd3NlKTtZY2IoMTA4NCwxLHt9LFVBKTt2YXIgUkE7dmFyIGlJPWplYih1c2UsJ0xvY2FsZUluZm8nLDEwODQpO1ljYigxOTczLDEse30sWEEpO18uYT0wO3ZhciBqST1qZWIodXNlLCdUaW1lWm9uZScsMTk3Myk7WWNiKDEyNDYsd3NlLHt9LGJCKTt2YXIga0k9amViKCdjb20uZ29vZ2xlLmd3dC5pMThuLmNsaWVudC5pbXBsLmNsZHInLCdEYXRlVGltZUZvcm1hdEluZm9JbXBsJywxMjQ2KTtZY2IoNDMxLDEsezQzMToxfSxjQik7Xy5hPWZhbHNlO18uYj0wO3ZhciBsST1qZWIoc3NlLCdEYXRlVGltZUZvcm1hdC9QYXR0ZXJuUGFydCcsNDMxKTtZY2IoMjA1LDEseHNlLG1CLG5CLG9CKTtfLkRkPWZ1bmN0aW9uIHBCKGEpe3JldHVybiBkQih0aGlzLEpEKGEsMjA1KSl9O18uRmI9ZnVuY3Rpb24gcUIoYSl7cmV0dXJuIFJEKGEsMjA1KSYmeWNiKHpjYih0aGlzLnEuZ2V0VGltZSgpKSx6Y2IoSkQoYSwyMDUpLnEuZ2V0VGltZSgpKSl9O18uSGI9ZnVuY3Rpb24gckIoKXt2YXIgYTthPXpjYih0aGlzLnEuZ2V0VGltZSgpKTtyZXR1cm4gUGNiKFJjYihhLExjYihhLDMyKSkpfTtfLkliPWZ1bmN0aW9uIHRCKCl7dmFyIGEsYixjO2M9LXRoaXMucS5nZXRUaW1lem9uZU9mZnNldCgpO2E9KGM+PTA/JysnOicnKSsoYy82MHwwKTtiPXNCKCR3bmQuTWF0aC5hYnMoYyklNjApO3JldHVybiAoQnFiKCksenFiKVt0aGlzLnEuZ2V0RGF5KCldKycgJytBcWJbdGhpcy5xLmdldE1vbnRoKCldKycgJytzQih0aGlzLnEuZ2V0RGF0ZSgpKSsnICcrc0IodGhpcy5xLmdldEhvdXJzKCkpKyc6JytzQih0aGlzLnEuZ2V0TWludXRlcygpKSsnOicrc0IodGhpcy5xLmdldFNlY29uZHMoKSkrJyBHTVQnK2ErYisnICcrdGhpcy5xLmdldEZ1bGxZZWFyKCl9O3ZhciBoSz1qZWIoWHFlLCdEYXRlJywyMDUpO1ljYigxOTYxLDIwNSx4c2UsdkIpO18uYT1mYWxzZTtfLmI9MDtfLmM9MDtfLmQ9MDtfLmU9MDtfLmY9MDtfLmc9ZmFsc2U7Xy5pPTA7Xy5qPTA7Xy5rPTA7Xy5uPTA7Xy5vPTA7Xy5wPTA7dmFyIG9JPWplYignY29tLmdvb2dsZS5nd3QuaTE4bi5zaGFyZWQuaW1wbCcsJ0RhdGVSZWNvcmQnLDE5NjEpO1ljYigyMDEwLDEse30pO18ubmU9ZnVuY3Rpb24gd0IoKXtyZXR1cm4gbnVsbH07Xy5vZT1mdW5jdGlvbiB4Qigpe3JldHVybiBudWxsfTtfLnBlPWZ1bmN0aW9uIHlCKCl7cmV0dXJuIG51bGx9O18ucWU9ZnVuY3Rpb24gekIoKXtyZXR1cm4gbnVsbH07Xy5yZT1mdW5jdGlvbiBBQigpe3JldHVybiBudWxsfTt2YXIgeEk9amViKHlzZSwnSlNPTlZhbHVlJywyMDEwKTtZY2IoMTM4LDIwMTAsezEzODoxfSxFQixGQik7Xy5GYj1mdW5jdGlvbiBHQihhKXtpZighUkQoYSwxMzgpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHp6KHRoaXMuYSxKRChhLDEzOCkuYSl9O18ubWU9ZnVuY3Rpb24gSEIoKXtyZXR1cm4gTEJ9O18uSGI9ZnVuY3Rpb24gSUIoKXtyZXR1cm4gQXoodGhpcy5hKX07Xy5uZT1mdW5jdGlvbiBKQigpe3JldHVybiB0aGlzfTtfLkliPWZ1bmN0aW9uIEtCKCl7dmFyIGEsYixjO2M9bmV3IFdnYignWycpO2ZvcihiPTAsYT10aGlzLmEubGVuZ3RoO2I8YTtiKyspe2I+MCYmKGMuYSs9JywnLGMpO1BnYihjLEJCKHRoaXMsYikpfWMuYSs9J10nO3JldHVybiBjLmF9O3ZhciBwST1qZWIoeXNlLCdKU09OQXJyYXknLDEzOCk7WWNiKDQ3NywyMDEwLHs0Nzc6MX0sUEIpO18ubWU9ZnVuY3Rpb24gUUIoKXtyZXR1cm4gVEJ9O18ub2U9ZnVuY3Rpb24gUkIoKXtyZXR1cm4gdGhpc307Xy5JYj1mdW5jdGlvbiBTQigpe3JldHVybiB4ZGIoKSwnJyt0aGlzLmF9O18uYT1mYWxzZTt2YXIgTUIsTkI7dmFyIHFJPWplYih5c2UsJ0pTT05Cb29sZWFuJyw0NzcpO1ljYig5NzQsNjMsTnJlLFVCKTt2YXIgckk9amViKHlzZSwnSlNPTkV4Y2VwdGlvbicsOTc0KTtZY2IoMTAxMSwyMDEwLHt9LFhCKTtfLm1lPWZ1bmN0aW9uIFlCKCl7cmV0dXJuICRCfTtfLkliPWZ1bmN0aW9uIFpCKCl7cmV0dXJuIFJxZX07dmFyIFZCO3ZhciBzST1qZWIoeXNlLCdKU09OTnVsbCcsMTAxMSk7WWNiKDI2MywyMDEwLHsyNjM6MX0sX0IpO18uRmI9ZnVuY3Rpb24gYUMoYSl7aWYoIVJEKGEsMjYzKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0aGlzLmE9PUpEKGEsMjYzKS5hfTtfLm1lPWZ1bmN0aW9uIGJDKCl7cmV0dXJuIGZDfTtfLkhiPWZ1bmN0aW9uIGNDKCl7cmV0dXJuIEVlYih0aGlzLmEpfTtfLnBlPWZ1bmN0aW9uIGRDKCl7cmV0dXJuIHRoaXN9O18uSWI9ZnVuY3Rpb24gZUMoKXtyZXR1cm4gdGhpcy5hKycnfTtfLmE9MDt2YXIgdEk9amViKHlzZSwnSlNPTk51bWJlcicsMjYzKTtZY2IoMTQ3LDIwMTAsezE0NzoxfSxtQyxuQyk7Xy5GYj1mdW5jdGlvbiBvQyhhKXtpZighUkQoYSwxNDcpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHp6KHRoaXMuYSxKRChhLDE0NykuYSl9O18ubWU9ZnVuY3Rpb24gcEMoKXtyZXR1cm4gdEN9O18uSGI9ZnVuY3Rpb24gcUMoKXtyZXR1cm4gQXoodGhpcy5hKX07Xy5xZT1mdW5jdGlvbiByQygpe3JldHVybiB0aGlzfTtfLkliPWZ1bmN0aW9uIHNDKCl7dmFyIGEsYixjLGQsZSxmLGc7Zz1uZXcgV2diKCd7Jyk7YT10cnVlO2Y9Z0ModGhpcyxTQyhoSixocmUsMiwwLDYsMSkpO2ZvcihjPWYsZD0wLGU9Yy5sZW5ndGg7ZDxlOysrZCl7Yj1jW2RdO2E/KGE9ZmFsc2UpOihnLmErPUxxZSxnKTtRZ2IoZyxEeihiKSk7Zy5hKz0nOic7UGdiKGcsaUModGhpcyxiKSl9Zy5hKz0nfSc7cmV0dXJuIGcuYX07dmFyIHZJPWplYih5c2UsJ0pTT05PYmplY3QnLDE0Nyk7WWNiKDU4OSwkcWUsX3FlLHVDKTtfLkdjPWZ1bmN0aW9uIHZDKGEpe3JldHVybiBWRChhKSYmaEModGhpcy5hLE9EKGEpKX07Xy5KYz1mdW5jdGlvbiB3Qygpe3JldHVybiBuZXcgdWpiKG5ldyBkbmIodGhpcy5iKSl9O18uZ2M9ZnVuY3Rpb24geEMoKXtyZXR1cm4gdGhpcy5iLmxlbmd0aH07dmFyIHVJPWplYih5c2UsJ0pTT05PYmplY3QvMScsNTg5KTt2YXIgeUM7WWNiKDIxMCwyMDEwLHsyMTA6MX0sR0MpO18uRmI9ZnVuY3Rpb24gSEMoYSl7aWYoIVJEKGEsMjEwKSl7cmV0dXJuIGZhbHNlfXJldHVybiBjZ2IodGhpcy5hLEpEKGEsMjEwKS5hKX07Xy5tZT1mdW5jdGlvbiBJQygpe3JldHVybiBNQ307Xy5IYj1mdW5jdGlvbiBKQygpe3JldHVybiBmZ2IodGhpcy5hKX07Xy5yZT1mdW5jdGlvbiBLQygpe3JldHVybiB0aGlzfTtfLkliPWZ1bmN0aW9uIExDKCl7cmV0dXJuIER6KHRoaXMuYSl9O3ZhciB3ST1qZWIoeXNlLCdKU09OU3RyaW5nJywyMTApO3ZhciBZQzt2YXIgQUQsQkQsQ0QsREQ7WWNiKDIwMDYsMSx7NTE4OjF9KTt2YXIgekk9amViKEdzZSwnT3V0cHV0U3RyZWFtJywyMDA2KTtZY2IoMjAwNywyMDA2LHs1MTg6MX0pO3ZhciB5ST1qZWIoR3NlLCdGaWx0ZXJPdXRwdXRTdHJlYW0nLDIwMDcpO1ljYig4NTQsMjAwNyx7NTE4OjF9LGZkYik7dmFyIEFJPWplYihHc2UsJ1ByaW50U3RyZWFtJyw4NTQpO1ljYig0MTUsMSx7NDcwOjF9KTtfLkliPWZ1bmN0aW9uIGpkYigpe3JldHVybiB0aGlzLmF9O3ZhciBCST1qZWIoSXFlLCdBYnN0cmFjdFN0cmluZ0J1aWxkZXInLDQxNSk7WWNiKDUyMyw2MyxOcmUsa2RiKTt2YXIgQ0k9amViKElxZSwnQXJpdGhtZXRpY0V4Y2VwdGlvbicsNTIzKTtZY2IoOTcsNjMsSHNlLGxkYixtZGIpO3ZhciBUST1qZWIoSXFlLCdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uJyw5Nyk7WWNiKDYzOCw5NyxIc2UsbmRiLG9kYik7dmFyIERJPWplYihJcWUsJ0FycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbicsNjM4KTtZY2IoNTIyLDYzLE5yZSxwZGIscWRiKTt2YXIgRUk9amViKElxZSwnQXJyYXlTdG9yZUV4Y2VwdGlvbicsNTIyKTtZY2IoMjk0LDgwLElzZSxyZGIpO3ZhciBOST1qZWIoSXFlLCdFcnJvcicsMjk0KTtZY2IoMjAwLDI5NCxJc2UsdGRiLHVkYik7dmFyIEZJPWplYihJcWUsJ0Fzc2VydGlvbkVycm9yJywyMDApO0ZEPXszOjEsNDcxOjEsMzQ6MX07dmFyIHZkYix3ZGI7dmFyIEdJPWplYihJcWUsJ0Jvb2xlYW4nLDQ3MSk7WWNiKDI0MSwxLHszOjEsMjQxOjF9KTt2YXIgRGRiO3ZhciBfST1qZWIoSXFlLCdOdW1iZXInLDI0MSk7WWNiKDIxOSwyNDEsezM6MSwyMTk6MSwzNDoxLDI0MToxfSxKZGIpO18uRGQ9ZnVuY3Rpb24gS2RiKGEpe3JldHVybiBJZGIodGhpcyxKRChhLDIxOSkpfTtfLnNlPWZ1bmN0aW9uIExkYigpe3JldHVybiB0aGlzLmF9O18uRmI9ZnVuY3Rpb24gTWRiKGEpe3JldHVybiBSRChhLDIxOSkmJkpEKGEsMjE5KS5hPT10aGlzLmF9O18uSGI9ZnVuY3Rpb24gTmRiKCl7cmV0dXJuIHRoaXMuYX07Xy5JYj1mdW5jdGlvbiBPZGIoKXtyZXR1cm4gJycrdGhpcy5hfTtfLmE9MDt2YXIgSEk9amViKElxZSwnQnl0ZScsMjE5KTt2YXIgUGRiO1ljYigxNzksMSx7MzoxLDE3OToxLDM0OjF9LFVkYik7Xy5EZD1mdW5jdGlvbiBWZGIoYSl7cmV0dXJuIFRkYih0aGlzLEpEKGEsMTc5KSl9O18uRmI9ZnVuY3Rpb24gWGRiKGEpe3JldHVybiBSRChhLDE3OSkmJkpEKGEsMTc5KS5hPT10aGlzLmF9O18uSGI9ZnVuY3Rpb24gWWRiKCl7cmV0dXJuIHRoaXMuYX07Xy5JYj1mdW5jdGlvbiBaZGIoKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmEpfTtfLmE9MDt2YXIgU2RiO3ZhciBJST1qZWIoSXFlLCdDaGFyYWN0ZXInLDE3OSk7dmFyIF9kYjtZY2IoMjExLDYzLHszOjEsMjExOjEsMTAzOjEsNjM6MSw4MDoxfSx5ZWIsemViKTt2YXIgSkk9amViKElxZSwnQ2xhc3NDYXN0RXhjZXB0aW9uJywyMTEpO0dEPXszOjEsMzQ6MSwzNDE6MSwyNDE6MX07dmFyIExJPWplYihJcWUsJ0RvdWJsZScsMzQxKTtZY2IoMTYwLDI0MSx7MzoxLDM0OjEsMTYwOjEsMjQxOjF9LEtlYixMZWIpO18uRGQ9ZnVuY3Rpb24gTWViKGEpe3JldHVybiBKZWIodGhpcyxKRChhLDE2MCkpfTtfLnNlPWZ1bmN0aW9uIE5lYigpe3JldHVybiB0aGlzLmF9O18uRmI9ZnVuY3Rpb24gT2ViKGEpe3JldHVybiBSRChhLDE2MCkmJkNlYih0aGlzLmEsSkQoYSwxNjApLmEpfTtfLkhiPWZ1bmN0aW9uIFBlYigpe3JldHVybiBZRCh0aGlzLmEpfTtfLkliPWZ1bmN0aW9uIFJlYigpe3JldHVybiAnJyt0aGlzLmF9O18uYT0wO3ZhciBRST1qZWIoSXFlLCdGbG9hdCcsMTYwKTtZY2IoMzIsNjMsezM6MSwxMDM6MSwzMjoxLDYzOjEsODA6MX0sU2ViLFRlYixVZWIpO3ZhciBSST1qZWIoSXFlLCdJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24nLDMyKTtZY2IoNzMsNjMsTnJlLFZlYixXZWIpO3ZhciBTST1qZWIoSXFlLCdJbGxlZ2FsU3RhdGVFeGNlcHRpb24nLDczKTtZY2IoMTcsMjQxLHszOjEsMzQ6MSwxNzoxLDI0MToxfSxZZWIpO18uRGQ9ZnVuY3Rpb24gX2ViKGEpe3JldHVybiBYZWIodGhpcyxKRChhLDE3KSl9O18uc2U9ZnVuY3Rpb24gYWZiKCl7cmV0dXJuIHRoaXMuYX07Xy5GYj1mdW5jdGlvbiBiZmIoYSl7cmV0dXJuIFJEKGEsMTcpJiZKRChhLDE3KS5hPT10aGlzLmF9O18uSGI9ZnVuY3Rpb24gY2ZiKCl7cmV0dXJuIHRoaXMuYX07Xy5JYj1mdW5jdGlvbiBpZmIoKXtyZXR1cm4gJycrdGhpcy5hfTtfLmE9MDt2YXIgVUk9amViKElxZSwnSW50ZWdlcicsMTcpO3ZhciBrZmI7dmFyIG1mYjtZY2IoMTkwLDI0MSx7MzoxLDM0OjEsMTkwOjEsMjQxOjF9LHFmYik7Xy5EZD1mdW5jdGlvbiBzZmIoYSl7cmV0dXJuIHBmYih0aGlzLEpEKGEsMTkwKSl9O18uc2U9ZnVuY3Rpb24gdGZiKCl7cmV0dXJuIE9jYih0aGlzLmEpfTtfLkZiPWZ1bmN0aW9uIHVmYihhKXtyZXR1cm4gUkQoYSwxOTApJiZ5Y2IoSkQoYSwxOTApLmEsdGhpcy5hKX07Xy5IYj1mdW5jdGlvbiB2ZmIoKXtyZXR1cm4gd2ZiKHRoaXMuYSl9O18uSWI9ZnVuY3Rpb24geGZiKCl7cmV0dXJuICcnK1FjYih0aGlzLmEpfTtfLmE9MDt2YXIgWEk9amViKElxZSwnTG9uZycsMTkwKTt2YXIgemZiO1ljYigyMDg2LDEse30pO1ljYigxODUwLDYzLE5yZSxEZmIpO3ZhciBZST1qZWIoSXFlLCdOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbicsMTg1MCk7WWNiKDE2OSw1OTEsezM6MSwxMDM6MSwxNjk6MSw2MzoxLDgwOjF9LEVmYixGZmIpO18uY2U9ZnVuY3Rpb24gR2ZiKGEpe3JldHVybiBuZXcgVHlwZUVycm9yKGEpfTt2YXIgWkk9amViKElxZSwnTnVsbFBvaW50ZXJFeGNlcHRpb24nLDE2OSk7dmFyIEhmYixJZmIsSmZiLEtmYjtZY2IoMTMwLDMyLHszOjEsMTAzOjEsMzI6MSwxMzA6MSw2MzoxLDgwOjF9LE1mYik7dmFyICRJPWplYihJcWUsJ051bWJlckZvcm1hdEV4Y2VwdGlvbicsMTMwKTtZY2IoMTkxLDI0MSx7MzoxLDM0OjEsMjQxOjEsMTkxOjF9LE9mYik7Xy5EZD1mdW5jdGlvbiBQZmIoYSl7cmV0dXJuIE5mYih0aGlzLEpEKGEsMTkxKSl9O18uc2U9ZnVuY3Rpb24gUWZiKCl7cmV0dXJuIHRoaXMuYX07Xy5GYj1mdW5jdGlvbiBSZmIoYSl7cmV0dXJuIFJEKGEsMTkxKSYmSkQoYSwxOTEpLmE9PXRoaXMuYX07Xy5IYj1mdW5jdGlvbiBTZmIoKXtyZXR1cm4gdGhpcy5hfTtfLkliPWZ1bmN0aW9uIFRmYigpe3JldHVybiAnJyt0aGlzLmF9O18uYT0wO3ZhciBjSj1qZWIoSXFlLCdTaG9ydCcsMTkxKTt2YXIgVmZiO1ljYigzMjAsMSx7MzoxLDMyMDoxfSxYZmIpO18uRmI9ZnVuY3Rpb24gWWZiKGEpe3ZhciBiO2lmKFJEKGEsMzIwKSl7Yj1KRChhLDMyMCk7cmV0dXJuIHRoaXMuYz09Yi5jJiZ0aGlzLmQ9PWIuZCYmdGhpcy5hPT1iLmEmJnRoaXMuYj09Yi5ifXJldHVybiBmYWxzZX07Xy5IYj1mdW5jdGlvbiBaZmIoKXtyZXR1cm4gS21iKFdDKE9DKGFKLDEpLE5xZSwxLDUsW2pmYih0aGlzLmMpLHRoaXMuYSx0aGlzLmQsdGhpcy5iXSkpfTtfLkliPWZ1bmN0aW9uICRmYigpe3JldHVybiB0aGlzLmErJy4nK3RoaXMuZCsnKCcrKHRoaXMuYiE9bnVsbD90aGlzLmI6J1Vua25vd24gU291cmNlJykrKHRoaXMuYz49MD8nOicrdGhpcy5jOicnKSsnKSd9O18uYz0wO3ZhciBkSj1qZWIoSXFlLCdTdGFja1RyYWNlRWxlbWVudCcsMzIwKTtIRD17MzoxLDQ3MDoxLDM0OjEsMjoxfTt2YXIgaEo9amViKElxZSxQcmUsMik7WWNiKDExMCw0MTUsezQ3MDoxfSxIZ2IsSWdiLEpnYik7dmFyIGVKPWplYihJcWUsJ1N0cmluZ0J1ZmZlcicsMTEwKTtZY2IoMTA0LDQxNSx7NDcwOjF9LFVnYixWZ2IsV2diKTt2YXIgZko9amViKElxZSwnU3RyaW5nQnVpbGRlcicsMTA0KTtZY2IoNjg2LDk3LEhzZSxYZ2IpO3ZhciBnSj1qZWIoSXFlLCdTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uJyw2ODYpO1ljYigyMDkxLDEse30pO3ZhciBZZ2I7WWNiKDQ2LDYzLHszOjEsMTAzOjEsNjM6MSw4MDoxLDQ2OjF9LGFoYixiaGIpO3ZhciBqSj1qZWIoSXFlLCdVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbicsNDYpO1ljYigyNDUsMjQxLHszOjEsMzQ6MSwyNDE6MSwyNDU6MX0scmhiLHNoYik7Xy5EZD1mdW5jdGlvbiB2aGIoYSl7cmV0dXJuIGxoYih0aGlzLEpEKGEsMjQ1KSl9O18uc2U9ZnVuY3Rpb24gd2hiKCl7cmV0dXJuIEVkYihxaGIodGhpcykpfTtfLkZiPWZ1bmN0aW9uIHhoYihhKXt2YXIgYjtpZih0aGlzPT09YSl7cmV0dXJuIHRydWV9aWYoUkQoYSwyNDUpKXtiPUpEKGEsMjQ1KTtyZXR1cm4gdGhpcy5lPT1iLmUmJmxoYih0aGlzLGIpPT0wfXJldHVybiBmYWxzZX07Xy5IYj1mdW5jdGlvbiB5aGIoKXt2YXIgYTtpZih0aGlzLmIhPTApe3JldHVybiB0aGlzLmJ9aWYodGhpcy5hPDU0KXthPXpjYih0aGlzLmYpO3RoaXMuYj1QY2IodWNiKGEsLTEpKTt0aGlzLmI9MzMqdGhpcy5iK1BjYih1Y2IoS2NiKGEsMzIpLC0xKSk7dGhpcy5iPTE3KnRoaXMuYitZRCh0aGlzLmUpO3JldHVybiB0aGlzLmJ9dGhpcy5iPTE3Kk1oYih0aGlzLmMpK1lEKHRoaXMuZSk7cmV0dXJuIHRoaXMuYn07Xy5JYj1mdW5jdGlvbiB6aGIoKXtyZXR1cm4gcWhiKHRoaXMpfTtfLmE9MDtfLmI9MDtfLmQ9MDtfLmU9MDtfLmY9MDt2YXIgY2hiLGRoYixlaGIsZmhiLGdoYixoaGIsaWhiLGpoYjt2YXIga0o9amViKCdqYXZhLm1hdGgnLCdCaWdEZWNpbWFsJywyNDUpO1ljYig5MCwyNDEsezM6MSwzNDoxLDI0MToxLDkwOjF9LFRoYixVaGIsVmhiLFdoYixYaGIpO18uRGQ9ZnVuY3Rpb24gWmhiKGEpe3JldHVybiBIaGIodGhpcyxKRChhLDkwKSl9O18uc2U9ZnVuY3Rpb24gJGhiKCl7cmV0dXJuIEVkYihyaWIodGhpcywwKSl9O18uRmI9ZnVuY3Rpb24gX2hiKGEpe3JldHVybiBKaGIodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBjaWIoKXtyZXR1cm4gTWhiKHRoaXMpfTtfLkliPWZ1bmN0aW9uIGVpYigpe3JldHVybiByaWIodGhpcywwKX07Xy5iPS0yO18uYz0wO18uZD0wO18uZT0wO3ZhciBBaGIsQmhiLENoYixEaGIsRWhiLEZoYjt2YXIgbEo9amViKCdqYXZhLm1hdGgnLCdCaWdJbnRlZ2VyJyw5MCk7dmFyIG1pYixuaWI7dmFyIEFpYixCaWI7WWNiKDQ4MiwyMDExLFlxZSk7Xy4kYj1mdW5jdGlvbiBXaWIoKXtUaWIodGhpcyl9O18uX2I9ZnVuY3Rpb24gWGliKGEpe3JldHVybiBMaWIodGhpcyxhKX07Xy51Yz1mdW5jdGlvbiBZaWIoYSl7cmV0dXJuIE1pYih0aGlzLGEsdGhpcy5pKXx8TWliKHRoaXMsYSx0aGlzLmYpfTtfLnZjPWZ1bmN0aW9uIFppYigpe3JldHVybiBuZXcgZGpiKHRoaXMpfTtfLnhjPWZ1bmN0aW9uICRpYihhKXtyZXR1cm4gTmliKHRoaXMsYSl9O18ueWM9ZnVuY3Rpb24gX2liKGEsYil7cmV0dXJuIFFpYih0aGlzLGEsYil9O18uQWM9ZnVuY3Rpb24gYWpiKGEpe3JldHVybiBTaWIodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBiamIoKXtyZXR1cm4gVWliKHRoaXMpfTtfLmc9MDt2YXIgcEo9amViKFhxZSwnQWJzdHJhY3RIYXNoTWFwJyw0ODIpO1ljYigzMDIsJHFlLF9xZSxkamIpO18uJGI9ZnVuY3Rpb24gZWpiKCl7dGhpcy5hLiRiKCl9O18uR2M9ZnVuY3Rpb24gZmpiKGEpe3JldHVybiBjamIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBnamIoKXtyZXR1cm4gbmV3IG1qYih0aGlzLmEpfTtfLktjPWZ1bmN0aW9uIGhqYihhKXt2YXIgYjtpZihjamIodGhpcyxhKSl7Yj1KRChhLDQzKS5qZCgpO3RoaXMuYS5BYyhiKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24gaWpiKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgb0o9amViKFhxZSwnQWJzdHJhY3RIYXNoTWFwL0VudHJ5U2V0JywzMDIpO1ljYigzMDMsMSxXcWUsbWpiKTtfLk5iPWZ1bmN0aW9uIG5qYihhKXtPc2IodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBwamIoKXtyZXR1cm4ga2piKHRoaXMpfTtfLk9iPWZ1bmN0aW9uIG9qYigpe3JldHVybiB0aGlzLmJ9O18uUWI9ZnVuY3Rpb24gcWpiKCl7bGpiKHRoaXMpfTtfLmI9ZmFsc2U7Xy5kPTA7dmFyIG5KPWplYihYcWUsJ0Fic3RyYWN0SGFzaE1hcC9FbnRyeVNldEl0ZXJhdG9yJywzMDMpO1ljYig0MTQsMSxXcWUsdWpiKTtfLk5iPWZ1bmN0aW9uIHZqYihhKXtPc2IodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiB3amIoKXtyZXR1cm4gcmpiKHRoaXMpfTtfLlBiPWZ1bmN0aW9uIHhqYigpe3JldHVybiBzamIodGhpcyl9O18uUWI9ZnVuY3Rpb24geWpiKCl7dGpiKHRoaXMpfTtfLmI9MDtfLmM9LTE7dmFyIHFKPWplYihYcWUsJ0Fic3RyYWN0TGlzdC9JdGVyYXRvckltcGwnLDQxNCk7WWNiKDk1LDQxNCxkcmUsQWpiKTtfLlFiPWZ1bmN0aW9uIEdqYigpe3RqYih0aGlzKX07Xy5SYj1mdW5jdGlvbiBCamIoYSl7empiKHRoaXMsYSl9O18uU2I9ZnVuY3Rpb24gQ2piKCl7cmV0dXJuIHRoaXMuYj4wfTtfLlRiPWZ1bmN0aW9uIERqYigpe3JldHVybiB0aGlzLmJ9O18uVWI9ZnVuY3Rpb24gRWpiKCl7cmV0dXJuIHJEYih0aGlzLmI+MCksdGhpcy5hLlhiKHRoaXMuYz0tLXRoaXMuYil9O18uVmI9ZnVuY3Rpb24gRmpiKCl7cmV0dXJuIHRoaXMuYi0xfTtfLldiPWZ1bmN0aW9uIEhqYihhKXt4RGIodGhpcy5jIT0tMSk7dGhpcy5hLmZkKHRoaXMuYyxhKX07dmFyIHJKPWplYihYcWUsJ0Fic3RyYWN0TGlzdC9MaXN0SXRlcmF0b3JJbXBsJyw5NSk7WWNiKDI1Niw1NSxGcmUsSWpiKTtfLl9jPWZ1bmN0aW9uIEpqYihhLGIpe3ZEYihhLHRoaXMuYik7dGhpcy5jLl9jKHRoaXMuYSthLGIpOysrdGhpcy5ifTtfLlhiPWZ1bmN0aW9uIEtqYihhKXtzRGIoYSx0aGlzLmIpO3JldHVybiB0aGlzLmMuWGIodGhpcy5hK2EpfTtfLmVkPWZ1bmN0aW9uIExqYihhKXt2YXIgYjtzRGIoYSx0aGlzLmIpO2I9dGhpcy5jLmVkKHRoaXMuYSthKTstLXRoaXMuYjtyZXR1cm4gYn07Xy5mZD1mdW5jdGlvbiBNamIoYSxiKXtzRGIoYSx0aGlzLmIpO3JldHVybiB0aGlzLmMuZmQodGhpcy5hK2EsYil9O18uZ2M9ZnVuY3Rpb24gTmpiKCl7cmV0dXJuIHRoaXMuYn07Xy5hPTA7Xy5iPTA7dmFyIHNKPWplYihYcWUsJ0Fic3RyYWN0TGlzdC9TdWJMaXN0JywyNTYpO1ljYigyNTcsJHFlLF9xZSxPamIpO18uJGI9ZnVuY3Rpb24gUGpiKCl7dGhpcy5hLiRiKCl9O18uR2M9ZnVuY3Rpb24gUWpiKGEpe3JldHVybiB0aGlzLmEuX2IoYSl9O18uSmM9ZnVuY3Rpb24gUmpiKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy5hLnZjKCkuSmMoKSxuZXcgVWpiKGEpfTtfLktjPWZ1bmN0aW9uIFNqYihhKXtpZih0aGlzLmEuX2IoYSkpe3RoaXMuYS5BYyhhKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24gVGpiKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgdko9amViKFhxZSwnQWJzdHJhY3RNYXAvMScsMjU3KTtZY2IoNTI2LDEsV3FlLFVqYik7Xy5OYj1mdW5jdGlvbiBWamIoYSl7T3NiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gV2piKCl7cmV0dXJuIHRoaXMuYS5PYigpfTtfLlBiPWZ1bmN0aW9uIFhqYigpe3ZhciBhO3JldHVybiBhPUpEKHRoaXMuYS5QYigpLDQzKSxhLmpkKCl9O18uUWI9ZnVuY3Rpb24gWWpiKCl7dGhpcy5hLlFiKCl9O3ZhciB1Sj1qZWIoWHFlLCdBYnN0cmFjdE1hcC8xLzEnLDUyNik7WWNiKDIzMCwzMSxacWUsWmpiKTtfLiRiPWZ1bmN0aW9uICRqYigpe3RoaXMuYS4kYigpfTtfLkdjPWZ1bmN0aW9uIF9qYihhKXtyZXR1cm4gdGhpcy5hLnVjKGEpfTtfLkpjPWZ1bmN0aW9uIGFrYigpe3ZhciBhO3JldHVybiBhPXRoaXMuYS52YygpLkpjKCksbmV3IGNrYihhKX07Xy5nYz1mdW5jdGlvbiBia2IoKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciB4Sj1qZWIoWHFlLCdBYnN0cmFjdE1hcC8yJywyMzApO1ljYigzMDAsMSxXcWUsY2tiKTtfLk5iPWZ1bmN0aW9uIGRrYihhKXtPc2IodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiBla2IoKXtyZXR1cm4gdGhpcy5hLk9iKCl9O18uUGI9ZnVuY3Rpb24gZmtiKCl7dmFyIGE7cmV0dXJuIGE9SkQodGhpcy5hLlBiKCksNDMpLGEua2QoKX07Xy5RYj1mdW5jdGlvbiBna2IoKXt0aGlzLmEuUWIoKX07dmFyIHdKPWplYihYcWUsJ0Fic3RyYWN0TWFwLzIvMScsMzAwKTtZY2IoNDc4LDEsezQ3ODoxLDQzOjF9KTtfLkZiPWZ1bmN0aW9uIGlrYihhKXt2YXIgYjtpZighUkQoYSw0Mykpe3JldHVybiBmYWxzZX1iPUpEKGEsNDMpO3JldHVybiB0dWIodGhpcy5kLGIuamQoKSkmJnR1Yih0aGlzLmUsYi5rZCgpKX07Xy5qZD1mdW5jdGlvbiBqa2IoKXtyZXR1cm4gdGhpcy5kfTtfLmtkPWZ1bmN0aW9uIGtrYigpe3JldHVybiB0aGlzLmV9O18uSGI9ZnVuY3Rpb24gbGtiKCl7cmV0dXJuIHV1Yih0aGlzLmQpXnV1Yih0aGlzLmUpfTtfLmxkPWZ1bmN0aW9uIG1rYihhKXtyZXR1cm4gaGtiKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gbmtiKCl7cmV0dXJuIHRoaXMuZCsnPScrdGhpcy5lfTt2YXIgeUo9amViKFhxZSwnQWJzdHJhY3RNYXAvQWJzdHJhY3RFbnRyeScsNDc4KTtZY2IoMzg4LDQ3OCx7NDc4OjEsMzg4OjEsNDM6MX0sb2tiKTt2YXIgeko9amViKFhxZSwnQWJzdHJhY3RNYXAvU2ltcGxlRW50cnknLDM4OCk7WWNiKDIwMjgsMSxXc2UpO18uRmI9ZnVuY3Rpb24gcGtiKGEpe3ZhciBiO2lmKCFSRChhLDQzKSl7cmV0dXJuIGZhbHNlfWI9SkQoYSw0Myk7cmV0dXJuIHR1Yih0aGlzLmpkKCksYi5qZCgpKSYmdHViKHRoaXMua2QoKSxiLmtkKCkpfTtfLkhiPWZ1bmN0aW9uIHFrYigpe3JldHVybiB1dWIodGhpcy5qZCgpKV51dWIodGhpcy5rZCgpKX07Xy5JYj1mdW5jdGlvbiBya2IoKXtyZXR1cm4gdGhpcy5qZCgpKyc9Jyt0aGlzLmtkKCl9O3ZhciBBSj1qZWIoWHFlLGZyZSwyMDI4KTtZY2IoMjAzNiwyMDExLGFyZSk7Xy5WYz1mdW5jdGlvbiB1a2IoYSl7cmV0dXJuIFZkKHRoaXMuQ2UoYSkpfTtfLnRjPWZ1bmN0aW9uIHZrYihhKXtyZXR1cm4gc2tiKHRoaXMsYSl9O18uX2I9ZnVuY3Rpb24gd2tiKGEpe3JldHVybiB0a2IodGhpcyxhKX07Xy52Yz1mdW5jdGlvbiB4a2IoKXtyZXR1cm4gbmV3IEdrYih0aGlzKX07Xy5SYz1mdW5jdGlvbiB5a2IoKXtyZXR1cm4gQmtiKHRoaXMuRWUoKSl9O18uV2M9ZnVuY3Rpb24gemtiKGEpe3JldHVybiBWZCh0aGlzLkZlKGEpKX07Xy54Yz1mdW5jdGlvbiBBa2IoYSl7dmFyIGI7Yj1hO3JldHVybiBXZCh0aGlzLkRlKGIpKX07Xy5ZYz1mdW5jdGlvbiBDa2IoYSl7cmV0dXJuIFZkKHRoaXMuR2UoYSkpfTtfLmVjPWZ1bmN0aW9uIERrYigpe3JldHVybiBuZXcgTGtiKHRoaXMpfTtfLlRjPWZ1bmN0aW9uIEVrYigpe3JldHVybiBCa2IodGhpcy5IZSgpKX07Xy5aYz1mdW5jdGlvbiBGa2IoYSl7cmV0dXJuIFZkKHRoaXMuSWUoYSkpfTt2YXIgRko9amViKFhxZSwnQWJzdHJhY3ROYXZpZ2FibGVNYXAnLDIwMzYpO1ljYig2MTQsJHFlLF9xZSxHa2IpO18uR2M9ZnVuY3Rpb24gSGtiKGEpe3JldHVybiBSRChhLDQzKSYmc2tiKHRoaXMuYixKRChhLDQzKSl9O18uSmM9ZnVuY3Rpb24gSWtiKCl7cmV0dXJuIHRoaXMuYi5CZSgpfTtfLktjPWZ1bmN0aW9uIEprYihhKXt2YXIgYjtpZihSRChhLDQzKSl7Yj1KRChhLDQzKTtyZXR1cm4gdGhpcy5iLkplKGIpfXJldHVybiBmYWxzZX07Xy5nYz1mdW5jdGlvbiBLa2IoKXtyZXR1cm4gdGhpcy5iLmdjKCl9O3ZhciBDSj1qZWIoWHFlLCdBYnN0cmFjdE5hdmlnYWJsZU1hcC9FbnRyeVNldCcsNjE0KTtZY2IoMTExMCwkcWUsY3JlLExrYik7Xy5MYz1mdW5jdGlvbiBSa2IoKXtyZXR1cm4gbmV3IE92Yih0aGlzKX07Xy4kYj1mdW5jdGlvbiBNa2IoKXt0aGlzLmEuJGIoKX07Xy5HYz1mdW5jdGlvbiBOa2IoYSl7cmV0dXJuIHRrYih0aGlzLmEsYSl9O18uSmM9ZnVuY3Rpb24gT2tiKCl7dmFyIGE7YT10aGlzLmEudmMoKS5iLkJlKCk7cmV0dXJuIG5ldyBTa2IoYSl9O18uS2M9ZnVuY3Rpb24gUGtiKGEpe2lmKHRrYih0aGlzLmEsYSkpe3RoaXMuYS5BYyhhKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24gUWtiKCl7cmV0dXJuIHRoaXMuYS5nYygpfTt2YXIgRUo9amViKFhxZSwnQWJzdHJhY3ROYXZpZ2FibGVNYXAvTmF2aWdhYmxlS2V5U2V0JywxMTEwKTtZY2IoMTExMSwxLFdxZSxTa2IpO18uTmI9ZnVuY3Rpb24gVGtiKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIFVrYigpe3JldHVybiByamIodGhpcy5hLmEpfTtfLlBiPWZ1bmN0aW9uIFZrYigpe3ZhciBhO2E9anliKHRoaXMuYSk7cmV0dXJuIGEuamQoKX07Xy5RYj1mdW5jdGlvbiBXa2IoKXtreWIodGhpcy5hKX07dmFyIERKPWplYihYcWUsJ0Fic3RyYWN0TmF2aWdhYmxlTWFwL05hdmlnYWJsZUtleVNldC8xJywxMTExKTtZY2IoMjA0OSwzMSxacWUpO18uRWM9ZnVuY3Rpb24gWGtiKGEpe3JldHVybiB5RGIoX3ViKHRoaXMsYSksWHNlKSx0cnVlfTtfLkZjPWZ1bmN0aW9uIFlrYihhKXt0RGIoYSk7bERiKGEhPXRoaXMsIkNhbid0IGFkZCBhIHF1ZXVlIHRvIGl0c2VsZiIpO3JldHVybiB4ZSh0aGlzLGEpfTtfLiRiPWZ1bmN0aW9uIFprYigpe3doaWxlKGF2Yih0aGlzKSE9bnVsbCk7fTt2YXIgR0o9amViKFhxZSwnQWJzdHJhY3RRdWV1ZScsMjA0OSk7WWNiKDMxMSwzMSx7NDoxLDIwOjEsMzE6MSwxNjoxfSxubGIsb2xiKTtfLkVjPWZ1bmN0aW9uIHBsYihhKXtyZXR1cm4gX2tiKHRoaXMsYSksdHJ1ZX07Xy4kYj1mdW5jdGlvbiBybGIoKXthbGIodGhpcyl9O18uR2M9ZnVuY3Rpb24gc2xiKGEpe3JldHVybiBibGIobmV3IEJsYih0aGlzKSxhKX07Xy5kYz1mdW5jdGlvbiB0bGIoKXtyZXR1cm4gZWxiKHRoaXMpfTtfLkpjPWZ1bmN0aW9uIHVsYigpe3JldHVybiBuZXcgQmxiKHRoaXMpfTtfLktjPWZ1bmN0aW9uIHZsYihhKXtyZXR1cm4gaGxiKG5ldyBCbGIodGhpcyksYSl9O18uZ2M9ZnVuY3Rpb24gd2xiKCl7cmV0dXJuIHRoaXMuYy10aGlzLmImdGhpcy5hLmxlbmd0aC0xfTtfLkxjPWZ1bmN0aW9uIHhsYigpe3JldHVybiBuZXcgR3ZiKHRoaXMsMjcyKX07Xy5PYz1mdW5jdGlvbiB5bGIoYSl7dmFyIGI7Yj10aGlzLmMtdGhpcy5iJnRoaXMuYS5sZW5ndGgtMTthLmxlbmd0aDxiJiYoYT1iRGIobmV3IEFycmF5KGIpLGEpKTtjbGIodGhpcyxhLGIpO2EubGVuZ3RoPmImJlZDKGEsYixudWxsKTtyZXR1cm4gYX07Xy5iPTA7Xy5jPTA7dmFyIEtKPWplYihYcWUsJ0FycmF5RGVxdWUnLDMxMSk7WWNiKDQ0NSwxLFdxZSxCbGIpO18uTmI9ZnVuY3Rpb24gQ2xiKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIERsYigpe3JldHVybiB0aGlzLmEhPXRoaXMuYn07Xy5QYj1mdW5jdGlvbiBFbGIoKXtyZXR1cm4gemxiKHRoaXMpfTtfLlFiPWZ1bmN0aW9uIEZsYigpe0FsYih0aGlzKX07Xy5hPTA7Xy5iPTA7Xy5jPS0xO3ZhciBKSj1qZWIoWHFlLCdBcnJheURlcXVlL0l0ZXJhdG9ySW1wbCcsNDQ1KTtZY2IoMTMsNTUsWXNlLFVsYixWbGIsV2xiKTtfLl9jPWZ1bmN0aW9uIFhsYihhLGIpe0hsYih0aGlzLGEsYil9O18uRWM9ZnVuY3Rpb24gWWxiKGEpe3JldHVybiBJbGIodGhpcyxhKX07Xy5hZD1mdW5jdGlvbiBabGIoYSxiKXtyZXR1cm4gSmxiKHRoaXMsYSxiKX07Xy5GYz1mdW5jdGlvbiAkbGIoYSl7cmV0dXJuIEtsYih0aGlzLGEpfTtfLiRiPWZ1bmN0aW9uIF9sYigpe19DYih0aGlzLmMsMCl9O18uR2M9ZnVuY3Rpb24gYW1iKGEpe3JldHVybiBObGIodGhpcyxhLDApIT0tMX07Xy5JYz1mdW5jdGlvbiBibWIoYSl7TGxiKHRoaXMsYSl9O18uWGI9ZnVuY3Rpb24gY21iKGEpe3JldHVybiBNbGIodGhpcyxhKX07Xy5iZD1mdW5jdGlvbiBkbWIoYSl7cmV0dXJuIE5sYih0aGlzLGEsMCl9O18uZGM9ZnVuY3Rpb24gZW1iKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGg9PTB9O18uSmM9ZnVuY3Rpb24gZm1iKCl7cmV0dXJuIG5ldyBybWIodGhpcyl9O18uZWQ9ZnVuY3Rpb24gZ21iKGEpe3JldHVybiBPbGIodGhpcyxhKX07Xy5LYz1mdW5jdGlvbiBobWIoYSl7cmV0dXJuIFBsYih0aGlzLGEpfTtfLmFlPWZ1bmN0aW9uIGltYihhLGIpe1FsYih0aGlzLGEsYil9O18uZmQ9ZnVuY3Rpb24gam1iKGEsYil7cmV0dXJuIFJsYih0aGlzLGEsYil9O18uZ2M9ZnVuY3Rpb24ga21iKCl7cmV0dXJuIHRoaXMuYy5sZW5ndGh9O18uZ2Q9ZnVuY3Rpb24gbG1iKGEpe1NsYih0aGlzLGEpfTtfLk5jPWZ1bmN0aW9uIG1tYigpe3JldHVybiBUQ2IodGhpcy5jKX07Xy5PYz1mdW5jdGlvbiBubWIoYSl7cmV0dXJuIFRsYih0aGlzLGEpfTt2YXIgTUo9amViKFhxZSwnQXJyYXlMaXN0JywxMyk7WWNiKDcsMSxXcWUscm1iKTtfLk5iPWZ1bmN0aW9uIHNtYihhKXtPc2IodGhpcyxhKX07Xy5PYj1mdW5jdGlvbiB0bWIoKXtyZXR1cm4gb21iKHRoaXMpfTtfLlBiPWZ1bmN0aW9uIHVtYigpe3JldHVybiBwbWIodGhpcyl9O18uUWI9ZnVuY3Rpb24gdm1iKCl7cW1iKHRoaXMpfTtfLmE9MDtfLmI9LTE7dmFyIExKPWplYihYcWUsJ0FycmF5TGlzdC8xJyw3KTtZY2IoMjA1OCwkd25kLkZ1bmN0aW9uLHt9LF9tYik7Xy5LZT1mdW5jdGlvbiBhbmIoYSxiKXtyZXR1cm4gSGViKGEsYil9O1ljYigxMjksNTUsWnNlLGRuYik7Xy5HYz1mdW5jdGlvbiBlbmIoYSl7cmV0dXJuIE90KHRoaXMsYSkhPS0xfTtfLkljPWZ1bmN0aW9uIGZuYihhKXt2YXIgYixjLGQsZTt0RGIoYSk7Zm9yKGM9dGhpcy5hLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTthLkFkKGIpfX07Xy5YYj1mdW5jdGlvbiBnbmIoYSl7cmV0dXJuIGJuYih0aGlzLGEpfTtfLmZkPWZ1bmN0aW9uIGhuYihhLGIpe3ZhciBjO2M9KHNEYihhLHRoaXMuYS5sZW5ndGgpLHRoaXMuYVthXSk7VkModGhpcy5hLGEsYik7cmV0dXJuIGN9O18uZ2M9ZnVuY3Rpb24gaW5iKCl7cmV0dXJuIHRoaXMuYS5sZW5ndGh9O18uZ2Q9ZnVuY3Rpb24gam5iKGEpe1BtYih0aGlzLmEsdGhpcy5hLmxlbmd0aCxhKX07Xy5OYz1mdW5jdGlvbiBrbmIoKXtyZXR1cm4gY25iKHRoaXMsU0MoYUosTnFlLDEsdGhpcy5hLmxlbmd0aCw1LDEpKX07Xy5PYz1mdW5jdGlvbiBsbmIoYSl7cmV0dXJuIGNuYih0aGlzLGEpfTt2YXIgTko9amViKFhxZSwnQXJyYXlzL0FycmF5TGlzdCcsMTI5KTt2YXIgbW5iLG5uYixvbmI7WWNiKDkzMSw1NSxac2UsQW5iKTtfLkdjPWZ1bmN0aW9uIEJuYihhKXtyZXR1cm4gZmFsc2V9O18uWGI9ZnVuY3Rpb24gQ25iKGEpe3JldHVybiB6bmIoYSl9O18uSmM9ZnVuY3Rpb24gRG5iKCl7cmV0dXJuIHBuYigpLEhuYigpLEduYn07Xy5jZD1mdW5jdGlvbiBFbmIoKXtyZXR1cm4gcG5iKCksSG5iKCksR25ifTtfLmdjPWZ1bmN0aW9uIEZuYigpe3JldHVybiAwfTt2YXIgUEo9amViKFhxZSwnQ29sbGVjdGlvbnMvRW1wdHlMaXN0Jyw5MzEpO1ljYig5MzIsMSxkcmUsSW5iKTtfLk5iPWZ1bmN0aW9uIEtuYihhKXtPc2IodGhpcyxhKX07Xy5SYj1mdW5jdGlvbiBKbmIoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLk9iPWZ1bmN0aW9uIExuYigpe3JldHVybiBmYWxzZX07Xy5TYj1mdW5jdGlvbiBNbmIoKXtyZXR1cm4gZmFsc2V9O18uUGI9ZnVuY3Rpb24gTm5iKCl7dGhyb3cgc2NiKG5ldyBxdWIpfTtfLlRiPWZ1bmN0aW9uIE9uYigpe3JldHVybiAwfTtfLlViPWZ1bmN0aW9uIFBuYigpe3Rocm93IHNjYihuZXcgcXViKX07Xy5WYj1mdW5jdGlvbiBRbmIoKXtyZXR1cm4gLTF9O18uUWI9ZnVuY3Rpb24gUm5iKCl7dGhyb3cgc2NiKG5ldyBWZWIpfTtfLldiPWZ1bmN0aW9uIFNuYihhKXt0aHJvdyBzY2IobmV3IFZlYil9O3ZhciBHbmI7dmFyIE9KPWplYihYcWUsJ0NvbGxlY3Rpb25zL0VtcHR5TGlzdEl0ZXJhdG9yJyw5MzIpO1ljYig5MzQsMjAxMSx1cmUsVG5iKTtfLl9iPWZ1bmN0aW9uIFVuYihhKXtyZXR1cm4gZmFsc2V9O18udWM9ZnVuY3Rpb24gVm5iKGEpe3JldHVybiBmYWxzZX07Xy52Yz1mdW5jdGlvbiBXbmIoKXtyZXR1cm4gcG5iKCksb25ifTtfLnhjPWZ1bmN0aW9uIFhuYihhKXtyZXR1cm4gbnVsbH07Xy5lYz1mdW5jdGlvbiBZbmIoKXtyZXR1cm4gcG5iKCksb25ifTtfLmdjPWZ1bmN0aW9uIFpuYigpe3JldHVybiAwfTtfLkJjPWZ1bmN0aW9uICRuYigpe3JldHVybiBwbmIoKSxtbmJ9O3ZhciBRSj1qZWIoWHFlLCdDb2xsZWN0aW9ucy9FbXB0eU1hcCcsOTM0KTtZY2IoOTMzLCRxZSx3cmUsX25iKTtfLkdjPWZ1bmN0aW9uIGFvYihhKXtyZXR1cm4gZmFsc2V9O18uSmM9ZnVuY3Rpb24gYm9iKCl7cmV0dXJuIHBuYigpLEhuYigpLEduYn07Xy5nYz1mdW5jdGlvbiBjb2IoKXtyZXR1cm4gMH07dmFyIFJKPWplYihYcWUsJ0NvbGxlY3Rpb25zL0VtcHR5U2V0Jyw5MzMpO1ljYig1OTIsNTUsezM6MSwyMDoxLDMxOjEsNTU6MSwxNjoxLDE1OjF9LGRvYik7Xy5HYz1mdW5jdGlvbiBlb2IoYSl7cmV0dXJuIHR1Yih0aGlzLmEsYSl9O18uWGI9ZnVuY3Rpb24gZm9iKGEpe3NEYihhLDEpO3JldHVybiB0aGlzLmF9O18uZ2M9ZnVuY3Rpb24gZ29iKCl7cmV0dXJuIDF9O3ZhciBTSj1qZWIoWHFlLCdDb2xsZWN0aW9ucy9TaW5nbGV0b25MaXN0Jyw1OTIpO1ljYigzNzYsMSxxcmUsb29iKTtfLkljPWZ1bmN0aW9uIHVvYihhKXtvZmIodGhpcyxhKX07Xy5MYz1mdW5jdGlvbiB6b2IoKXtyZXR1cm4gbmV3IEd2Yih0aGlzLDApfTtfLk1jPWZ1bmN0aW9uIEFvYigpe3JldHVybiBuZXcgUkJiKG51bGwsdGhpcy5MYygpKX07Xy5FYz1mdW5jdGlvbiBwb2IoYSl7cmV0dXJuIGhvYigpfTtfLkZjPWZ1bmN0aW9uIHFvYihhKXtyZXR1cm4gaW9iKCl9O18uJGI9ZnVuY3Rpb24gcm9iKCl7am9iKCl9O18uR2M9ZnVuY3Rpb24gc29iKGEpe3JldHVybiBrb2IodGhpcyxhKX07Xy5IYz1mdW5jdGlvbiB0b2IoYSl7cmV0dXJuIGxvYih0aGlzLGEpfTtfLmRjPWZ1bmN0aW9uIHZvYigpe3JldHVybiB0aGlzLmIuZGMoKX07Xy5KYz1mdW5jdGlvbiB3b2IoKXtyZXR1cm4gbmV3IEZvYih0aGlzLmIuSmMoKSl9O18uS2M9ZnVuY3Rpb24geG9iKGEpe3JldHVybiBtb2IoKX07Xy5nYz1mdW5jdGlvbiB5b2IoKXtyZXR1cm4gdGhpcy5iLmdjKCl9O18uTmM9ZnVuY3Rpb24gQm9iKCl7cmV0dXJuIHRoaXMuYi5OYygpfTtfLk9jPWZ1bmN0aW9uIENvYihhKXtyZXR1cm4gbm9iKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gRG9iKCl7cmV0dXJuIGFkYih0aGlzLmIpfTt2YXIgVUo9amViKFhxZSwnQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlQ29sbGVjdGlvbicsMzc2KTtZY2IoMzc1LDEsV3FlLEZvYik7Xy5OYj1mdW5jdGlvbiBHb2IoYSl7T3NiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gSG9iKCl7cmV0dXJuIHRoaXMuYi5PYigpfTtfLlBiPWZ1bmN0aW9uIElvYigpe3JldHVybiB0aGlzLmIuUGIoKX07Xy5RYj1mdW5jdGlvbiBKb2IoKXtFb2IoKX07dmFyIFRKPWplYihYcWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZUNvbGxlY3Rpb25JdGVyYXRvcicsMzc1KTtZY2IoNTI1LDM3Niwkc2UsS29iKTtfLkxjPWZ1bmN0aW9uIFhvYigpe3JldHVybiBuZXcgR3ZiKHRoaXMsMTYpfTtfLl9jPWZ1bmN0aW9uIExvYihhLGIpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5hZD1mdW5jdGlvbiBNb2IoYSxiKXt0aHJvdyBzY2IobmV3IGFoYil9O18uRmI9ZnVuY3Rpb24gTm9iKGEpe3JldHVybiBwYih0aGlzLmEsYSl9O18uWGI9ZnVuY3Rpb24gT29iKGEpe3JldHVybiB0aGlzLmEuWGIoYSl9O18uSGI9ZnVuY3Rpb24gUG9iKCl7cmV0dXJuIHRiKHRoaXMuYSl9O18uYmQ9ZnVuY3Rpb24gUW9iKGEpe3JldHVybiB0aGlzLmEuYmQoYSl9O18uZGM9ZnVuY3Rpb24gUm9iKCl7cmV0dXJuIHRoaXMuYS5kYygpfTtfLmNkPWZ1bmN0aW9uIFNvYigpe3JldHVybiBuZXcgWm9iKHRoaXMuYS5kZCgwKSl9O18uZGQ9ZnVuY3Rpb24gVG9iKGEpe3JldHVybiBuZXcgWm9iKHRoaXMuYS5kZChhKSl9O18uZWQ9ZnVuY3Rpb24gVW9iKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5mZD1mdW5jdGlvbiBWb2IoYSxiKXt0aHJvdyBzY2IobmV3IGFoYil9O18uZ2Q9ZnVuY3Rpb24gV29iKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5oZD1mdW5jdGlvbiBZb2IoYSxiKXtyZXR1cm4gbmV3IEtvYih0aGlzLmEuaGQoYSxiKSl9O3ZhciBXSj1qZWIoWHFlLCdDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVMaXN0Jyw1MjUpO1ljYig2ODksMzc1LGRyZSxab2IpO18uUWI9ZnVuY3Rpb24gZHBiKCl7RW9iKCl9O18uUmI9ZnVuY3Rpb24gJG9iKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5TYj1mdW5jdGlvbiBfb2IoKXtyZXR1cm4gdGhpcy5hLlNiKCl9O18uVGI9ZnVuY3Rpb24gYXBiKCl7cmV0dXJuIHRoaXMuYS5UYigpfTtfLlViPWZ1bmN0aW9uIGJwYigpe3JldHVybiB0aGlzLmEuVWIoKX07Xy5WYj1mdW5jdGlvbiBjcGIoKXtyZXR1cm4gdGhpcy5hLlZiKCl9O18uV2I9ZnVuY3Rpb24gZXBiKGEpe3Rocm93IHNjYihuZXcgYWhiKX07dmFyIFZKPWplYihYcWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZUxpc3RJdGVyYXRvcicsNjg5KTtZY2IoNTkzLDEsWXFlLGtwYik7Xy53Yz1mdW5jdGlvbiBxcGIoYSl7cHViKHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gbHBiKCl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLl9iPWZ1bmN0aW9uIG1wYihhKXtyZXR1cm4gdGhpcy5jLl9iKGEpfTtfLnVjPWZ1bmN0aW9uIG5wYihhKXtyZXR1cm4gZnBiKHRoaXMsYSl9O18udmM9ZnVuY3Rpb24gb3BiKCl7cmV0dXJuIGdwYih0aGlzKX07Xy5GYj1mdW5jdGlvbiBwcGIoYSl7cmV0dXJuIGhwYih0aGlzLGEpfTtfLnhjPWZ1bmN0aW9uIHJwYihhKXtyZXR1cm4gdGhpcy5jLnhjKGEpfTtfLkhiPWZ1bmN0aW9uIHNwYigpe3JldHVybiB0Yih0aGlzLmMpfTtfLmRjPWZ1bmN0aW9uIHRwYigpe3JldHVybiB0aGlzLmMuZGMoKX07Xy5lYz1mdW5jdGlvbiB1cGIoKXtyZXR1cm4gaXBiKHRoaXMpfTtfLnljPWZ1bmN0aW9uIHZwYihhLGIpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5BYz1mdW5jdGlvbiB3cGIoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLmdjPWZ1bmN0aW9uIHhwYigpe3JldHVybiB0aGlzLmMuZ2MoKX07Xy5JYj1mdW5jdGlvbiB5cGIoKXtyZXR1cm4gYWRiKHRoaXMuYyl9O18uQmM9ZnVuY3Rpb24genBiKCl7cmV0dXJuIGpwYih0aGlzKX07dmFyICRKPWplYihYcWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcCcsNTkzKTtZY2IoMzg3LDM3Nix2cmUsQXBiKTtfLkxjPWZ1bmN0aW9uIERwYigpe3JldHVybiBuZXcgR3ZiKHRoaXMsMSl9O18uRmI9ZnVuY3Rpb24gQnBiKGEpe3JldHVybiBwYih0aGlzLmIsYSl9O18uSGI9ZnVuY3Rpb24gQ3BiKCl7cmV0dXJuIHRiKHRoaXMuYil9O3ZhciBhSz1qZWIoWHFlLCdDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVTZXQnLDM4Nyk7WWNiKDkzNSwzODcsdnJlLEhwYik7Xy5HYz1mdW5jdGlvbiBJcGIoYSl7cmV0dXJuIEVwYih0aGlzLGEpfTtfLkhjPWZ1bmN0aW9uIEpwYihhKXtyZXR1cm4gdGhpcy5iLkhjKGEpfTtfLkpjPWZ1bmN0aW9uIEtwYigpe3ZhciBhO2E9dGhpcy5iLkpjKCk7cmV0dXJuIG5ldyBOcGIoYSl9O18uTmM9ZnVuY3Rpb24gTHBiKCl7dmFyIGE7YT10aGlzLmIuTmMoKTtHcGIoYSxhLmxlbmd0aCk7cmV0dXJuIGF9O18uT2M9ZnVuY3Rpb24gTXBiKGEpe3JldHVybiBGcGIodGhpcyxhKX07dmFyIFpKPWplYihYcWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZU1hcC9Vbm1vZGlmaWFibGVFbnRyeVNldCcsOTM1KTtZY2IoOTM2LDEsV3FlLE5wYik7Xy5OYj1mdW5jdGlvbiBPcGIoYSl7T3NiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gUXBiKCl7cmV0dXJuIG5ldyBTcGIoSkQodGhpcy5hLlBiKCksNDMpKX07Xy5PYj1mdW5jdGlvbiBQcGIoKXtyZXR1cm4gdGhpcy5hLk9iKCl9O18uUWI9ZnVuY3Rpb24gUnBiKCl7dGhyb3cgc2NiKG5ldyBhaGIpfTt2YXIgWEo9amViKFhxZSwnQ29sbGVjdGlvbnMvVW5tb2RpZmlhYmxlTWFwL1VubW9kaWZpYWJsZUVudHJ5U2V0LzEnLDkzNik7WWNiKDY4NywxLFdzZSxTcGIpO18uRmI9ZnVuY3Rpb24gVHBiKGEpe3JldHVybiB0aGlzLmEuRmIoYSl9O18uamQ9ZnVuY3Rpb24gVXBiKCl7cmV0dXJuIHRoaXMuYS5qZCgpfTtfLmtkPWZ1bmN0aW9uIFZwYigpe3JldHVybiB0aGlzLmEua2QoKX07Xy5IYj1mdW5jdGlvbiBXcGIoKXtyZXR1cm4gdGhpcy5hLkhiKCl9O18ubGQ9ZnVuY3Rpb24gWHBiKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5JYj1mdW5jdGlvbiBZcGIoKXtyZXR1cm4gYWRiKHRoaXMuYSl9O3ZhciBZSj1qZWIoWHFlLCdDb2xsZWN0aW9ucy9Vbm1vZGlmaWFibGVNYXAvVW5tb2RpZmlhYmxlRW50cnlTZXQvVW5tb2RpZmlhYmxlRW50cnknLDY4Nyk7WWNiKDU5NCw1MjUsezIwOjEsMTY6MSwxNToxLDU5OjF9LFpwYik7dmFyIF9KPWplYihYcWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVJhbmRvbUFjY2Vzc0xpc3QnLDU5NCk7WWNiKDY4OCwzODcseHJlLCRwYik7Xy5MYz1mdW5jdGlvbiBicWIoKXtyZXR1cm4gbmV3IE92Yih0aGlzKX07Xy5GYj1mdW5jdGlvbiBfcGIoYSl7cmV0dXJuIHBiKHRoaXMuYSxhKX07Xy5IYj1mdW5jdGlvbiBhcWIoKXtyZXR1cm4gdGIodGhpcy5hKX07dmFyIGJLPWplYihYcWUsJ0NvbGxlY3Rpb25zL1VubW9kaWZpYWJsZVNvcnRlZFNldCcsNjg4KTtZY2IoODM3LDEsX3NlLGNxYik7Xy5MZT1mdW5jdGlvbiBkcWIoYSxiKXt2YXIgYztyZXR1cm4gYz1NOWIoSkQoYSwxMSksSkQoYiwxMSkpLGMhPTA/YzpPOWIoSkQoYSwxMSksSkQoYiwxMSkpfTtfLkZiPWZ1bmN0aW9uIGVxYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gZnFiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBjSz1qZWIoWHFlLCdDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUnLDgzNyk7dmFyIGdxYixocWIsaXFiO1ljYig3NTEsMSxfc2UsbHFiKTtfLkxlPWZ1bmN0aW9uIG1xYihhLGIpe3JldHVybiBrcWIoSkQoYSwzNCksSkQoYiwzNCkpfTtfLkZiPWZ1bmN0aW9uIG5xYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gb3FiKCl7cmV0dXJuIGpxYigpLGlxYn07dmFyIGRLPWplYihYcWUsJ0NvbXBhcmF0b3JzL05hdHVyYWxPcmRlckNvbXBhcmF0b3InLDc1MSk7WWNiKDExODYsMSxfc2UscXFiKTtfLkxlPWZ1bmN0aW9uIHJxYihhLGIpe3JldHVybiBwcWIoSkQoYSwzNCksSkQoYiwzNCkpfTtfLkZiPWZ1bmN0aW9uIHNxYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gdHFiKCl7cmV0dXJuIGpxYigpLGhxYn07dmFyIGVLPWplYihYcWUsJ0NvbXBhcmF0b3JzL1JldmVyc2VOYXR1cmFsT3JkZXJDb21wYXJhdG9yJywxMTg2KTtZY2IoNTYsMSxfc2UsdXFiKTtfLkZiPWZ1bmN0aW9uIHdxYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTGU9ZnVuY3Rpb24gdnFiKGEsYil7cmV0dXJuIHRoaXMuYS5MZShiLGEpfTtfLk1lPWZ1bmN0aW9uIHhxYigpe3JldHVybiB0aGlzLmF9O3ZhciBmSz1qZWIoWHFlLCdDb21wYXJhdG9ycy9SZXZlcnNlZENvbXBhcmF0b3InLDU2KTtZY2IoMTc1LDYzLE5yZSx5cWIpO3ZhciBnSz1qZWIoWHFlLCdDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uJywxNzUpO3ZhciB6cWIsQXFiO1ljYigxODk0LDEsYXRlLEVxYik7Xy5OZT1mdW5jdGlvbiBGcWIoYSl7Q3FiKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gR3FiKCl7cmV0dXJuICdEb3VibGVTdW1tYXJ5U3RhdGlzdGljc1tjb3VudCA9ICcrUWNiKHRoaXMuYSkrJywgYXZnID0gJysoQWNiKHRoaXMuYSwwKT9EcWIodGhpcykvT2NiKHRoaXMuYSk6MCkrJywgbWluID0gJyt0aGlzLmMrJywgbWF4ID0gJyt0aGlzLmIrJywgc3VtID0gJytEcWIodGhpcykrJ10nfTtfLmE9MDtfLmI9THNlO18uYz1Lc2U7Xy5kPTA7Xy5lPTA7Xy5mPTA7dmFyIGlLPWplYihYcWUsJ0RvdWJsZVN1bW1hcnlTdGF0aXN0aWNzJywxODk0KTtZY2IoMTgxNCw2MyxOcmUsSHFiKTt2YXIgaks9amViKFhxZSwnRW1wdHlTdGFja0V4Y2VwdGlvbicsMTgxNCk7WWNiKDQ0NywyMDExLFlxZSxPcWIpO18ueWM9ZnVuY3Rpb24gVXFiKGEsYil7cmV0dXJuIE1xYih0aGlzLGEsYil9O18uJGI9ZnVuY3Rpb24gUHFiKCl7SXFiKHRoaXMpfTtfLl9iPWZ1bmN0aW9uIFFxYihhKXtyZXR1cm4gSnFiKHRoaXMsYSl9O18udWM9ZnVuY3Rpb24gUnFiKGEpe3ZhciBiLGM7Zm9yKGM9bmV3IERyYih0aGlzLmEpO2MuYTxjLmMuYS5sZW5ndGg7KXtiPUNyYihjKTtpZih0dWIoYSx0aGlzLmJbYi5nXSkpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O18udmM9ZnVuY3Rpb24gU3FiKCl7cmV0dXJuIG5ldyBZcWIodGhpcyl9O18ueGM9ZnVuY3Rpb24gVHFiKGEpe3JldHVybiBLcWIodGhpcyxhKX07Xy5BYz1mdW5jdGlvbiBWcWIoYSl7cmV0dXJuIE5xYih0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIFdxYigpe3JldHVybiB0aGlzLmEuY307dmFyIG5LPWplYihYcWUsJ0VudW1NYXAnLDQ0Nyk7WWNiKDEyODEsJHFlLF9xZSxZcWIpO18uJGI9ZnVuY3Rpb24gWnFiKCl7SXFiKHRoaXMuYSl9O18uR2M9ZnVuY3Rpb24gJHFiKGEpe3JldHVybiBYcWIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBfcWIoKXtyZXR1cm4gbmV3IGNyYih0aGlzLmEpfTtfLktjPWZ1bmN0aW9uIGFyYihhKXt2YXIgYjtpZihYcWIodGhpcyxhKSl7Yj1KRChhLDQzKS5qZCgpO05xYih0aGlzLmEsYik7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtfLmdjPWZ1bmN0aW9uIGJyYigpe3JldHVybiB0aGlzLmEuYS5jfTt2YXIgbEs9amViKFhxZSwnRW51bU1hcC9FbnRyeVNldCcsMTI4MSk7WWNiKDEyODIsMSxXcWUsY3JiKTtfLk5iPWZ1bmN0aW9uIGRyYihhKXtPc2IodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBmcmIoKXtyZXR1cm4gdGhpcy5iPUNyYih0aGlzLmEpLG5ldyBocmIodGhpcy5jLHRoaXMuYil9O18uT2I9ZnVuY3Rpb24gZXJiKCl7cmV0dXJuIEJyYih0aGlzLmEpfTtfLlFiPWZ1bmN0aW9uIGdyYigpe3hEYighIXRoaXMuYik7TnFiKHRoaXMuYyx0aGlzLmIpO3RoaXMuYj1udWxsfTt2YXIga0s9amViKFhxZSwnRW51bU1hcC9FbnRyeVNldEl0ZXJhdG9yJywxMjgyKTtZY2IoMTI4MywyMDI4LFdzZSxocmIpO18uamQ9ZnVuY3Rpb24gaXJiKCl7cmV0dXJuIHRoaXMuYX07Xy5rZD1mdW5jdGlvbiBqcmIoKXtyZXR1cm4gdGhpcy5iLmJbdGhpcy5hLmddfTtfLmxkPWZ1bmN0aW9uIGtyYihhKXtyZXR1cm4gJENiKHRoaXMuYi5iLHRoaXMuYS5nLGEpfTt2YXIgbUs9amViKFhxZSwnRW51bU1hcC9NYXBFbnRyeScsMTI4Myk7WWNiKDE4MSwkcWUsezIwOjEsMzE6MSwxNjoxLDE4MToxLDIyOjF9KTt2YXIgcUs9amViKFhxZSwnRW51bVNldCcsMTgxKTtZY2IoMTYxLDE4MSx7MjA6MSwzMToxLDE2OjEsMTgxOjEsMTYxOjEsMjI6MX0sdXJiKTtfLkVjPWZ1bmN0aW9uIHZyYihhKXtyZXR1cm4gb3JiKHRoaXMsSkQoYSwyMykpfTtfLkdjPWZ1bmN0aW9uIHdyYihhKXtyZXR1cm4gcXJiKHRoaXMsYSl9O18uSmM9ZnVuY3Rpb24geHJiKCl7cmV0dXJuIG5ldyBEcmIodGhpcyl9O18uS2M9ZnVuY3Rpb24geXJiKGEpe3JldHVybiBzcmIodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiB6cmIoKXtyZXR1cm4gdGhpcy5jfTtfLmM9MDt2YXIgcEs9amViKFhxZSwnRW51bVNldC9FbnVtU2V0SW1wbCcsMTYxKTtZY2IoMzUzLDEsV3FlLERyYik7Xy5OYj1mdW5jdGlvbiBFcmIoYSl7T3NiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gR3JiKCl7cmV0dXJuIENyYih0aGlzKX07Xy5PYj1mdW5jdGlvbiBGcmIoKXtyZXR1cm4gQnJiKHRoaXMpfTtfLlFiPWZ1bmN0aW9uIEhyYigpe3hEYih0aGlzLmIhPS0xKTtWQyh0aGlzLmMuYix0aGlzLmIsbnVsbCk7LS10aGlzLmMuYzt0aGlzLmI9LTF9O18uYT0tMTtfLmI9LTE7dmFyIG9LPWplYihYcWUsJ0VudW1TZXQvRW51bVNldEltcGwvSXRlcmF0b3JJbXBsJywzNTMpO1ljYig0NSw0ODIsYnRlLElyYixKcmIsS3JiKTtfLnplPWZ1bmN0aW9uIExyYihhLGIpe3JldHVybiBYRChhKT09PVhEKGIpfHxhIT1udWxsJiZwYihhLGIpfTtfLkFlPWZ1bmN0aW9uIE1yYihhKXt2YXIgYjtpZihhPT1udWxsKXtyZXR1cm4gMH1iPXRiKGEpO3JldHVybiBifDB9O3ZhciBySz1qZWIoWHFlLCdIYXNoTWFwJyw0NSk7WWNiKDUwLCRxZSxjdGUsUXJiLFJyYixTcmIpO18uRWM9ZnVuY3Rpb24gVXJiKGEpe3JldHVybiBOcmIodGhpcyxhKX07Xy4kYj1mdW5jdGlvbiBWcmIoKXt0aGlzLmEuJGIoKX07Xy5HYz1mdW5jdGlvbiBXcmIoYSl7cmV0dXJuIE9yYih0aGlzLGEpfTtfLmRjPWZ1bmN0aW9uIFhyYigpe3JldHVybiB0aGlzLmEuZ2MoKT09MH07Xy5KYz1mdW5jdGlvbiBZcmIoKXtyZXR1cm4gdGhpcy5hLmVjKCkuSmMoKX07Xy5LYz1mdW5jdGlvbiBacmIoYSl7cmV0dXJuIFByYih0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uICRyYigpe3JldHVybiB0aGlzLmEuZ2MoKX07dmFyIHNLPWplYihYcWUsJ0hhc2hTZXQnLDUwKTtZY2IoMTg0MywxLGxyZSxhc2IpO18uQmQ9ZnVuY3Rpb24gYnNiKGEpe19yYih0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIGNzYigpe3JldHVybiAnSW50U3VtbWFyeVN0YXRpc3RpY3NbY291bnQgPSAnK1FjYih0aGlzLmEpKycsIGF2ZyA9ICcrKEFjYih0aGlzLmEsMCk/T2NiKHRoaXMuZCkvT2NiKHRoaXMuYSk6MCkrJywgbWluID0gJyt0aGlzLmMrJywgbWF4ID0gJyt0aGlzLmIrJywgc3VtID0gJytRY2IodGhpcy5kKSsnXSd9O18uYT0wO18uYj1McmU7Xy5jPUhxZTtfLmQ9MDt2YXIgdEs9amViKFhxZSwnSW50U3VtbWFyeVN0YXRpc3RpY3MnLDE4NDMpO1ljYigxMDM3LDEscHJlLGlzYik7Xy5JYz1mdW5jdGlvbiBqc2IoYSl7b2ZiKHRoaXMsYSl9O18uSmM9ZnVuY3Rpb24ga3NiKCl7cmV0dXJuIG5ldyBsc2IodGhpcyl9O18uYz0wO3ZhciB2Sz1qZWIoWHFlLCdJbnRlcm5hbEhhc2hDb2RlTWFwJywxMDM3KTtZY2IoNzEwLDEsV3FlLGxzYik7Xy5OYj1mdW5jdGlvbiBtc2IoYSl7T3NiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gb3NiKCl7cmV0dXJuIHRoaXMuZD10aGlzLmFbdGhpcy5jKytdLHRoaXMuZH07Xy5PYj1mdW5jdGlvbiBuc2IoKXt2YXIgYTtpZih0aGlzLmM8dGhpcy5hLmxlbmd0aCl7cmV0dXJuIHRydWV9YT10aGlzLmIubmV4dCgpO2lmKCFhLmRvbmUpe3RoaXMuYT1hLnZhbHVlWzFdO3RoaXMuYz0wO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07Xy5RYj1mdW5jdGlvbiBwc2IoKXtoc2IodGhpcy5lLHRoaXMuZC5qZCgpKTt0aGlzLmMhPTAmJi0tdGhpcy5jfTtfLmM9MDtfLmQ9bnVsbDt2YXIgdUs9amViKFhxZSwnSW50ZXJuYWxIYXNoQ29kZU1hcC8xJyw3MTApO3ZhciBzc2I7WWNiKDEwMzUsMSxwcmUsQ3NiKTtfLkljPWZ1bmN0aW9uIERzYihhKXtvZmIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBFc2IoKXtyZXR1cm4gbmV3IEZzYih0aGlzKX07Xy5jPTA7Xy5kPTA7dmFyIHlLPWplYihYcWUsJ0ludGVybmFsU3RyaW5nTWFwJywxMDM1KTtZY2IoNzA5LDEsV3FlLEZzYik7Xy5OYj1mdW5jdGlvbiBHc2IoYSl7T3NiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gSXNiKCl7cmV0dXJuIHRoaXMuYz10aGlzLmEsdGhpcy5hPXRoaXMuYi5uZXh0KCksbmV3IEtzYih0aGlzLmQsdGhpcy5jLHRoaXMuZC5kKX07Xy5PYj1mdW5jdGlvbiBIc2IoKXtyZXR1cm4gIXRoaXMuYS5kb25lfTtfLlFiPWZ1bmN0aW9uIEpzYigpe0JzYih0aGlzLmQsdGhpcy5jLnZhbHVlWzBdKX07dmFyIHdLPWplYihYcWUsJ0ludGVybmFsU3RyaW5nTWFwLzEnLDcwOSk7WWNiKDEwMzYsMjAyOCxXc2UsS3NiKTtfLmpkPWZ1bmN0aW9uIExzYigpe3JldHVybiB0aGlzLmIudmFsdWVbMF19O18ua2Q9ZnVuY3Rpb24gTXNiKCl7aWYodGhpcy5hLmQhPXRoaXMuYyl7cmV0dXJuIHpzYih0aGlzLmEsdGhpcy5iLnZhbHVlWzBdKX1yZXR1cm4gdGhpcy5iLnZhbHVlWzFdfTtfLmxkPWZ1bmN0aW9uIE5zYihhKXtyZXR1cm4gQXNiKHRoaXMuYSx0aGlzLmIudmFsdWVbMF0sYSl9O18uYz0wO3ZhciB4Sz1qZWIoWHFlLCdJbnRlcm5hbFN0cmluZ01hcC8yJywxMDM2KTtZY2IoMjIxLDQ1LGJ0ZSxYc2IsWXNiKTtfLiRiPWZ1bmN0aW9uIFpzYigpe1JzYih0aGlzKX07Xy5fYj1mdW5jdGlvbiAkc2IoYSl7cmV0dXJuIFNzYih0aGlzLGEpfTtfLnVjPWZ1bmN0aW9uIF9zYihhKXt2YXIgYjtiPXRoaXMuZC5hO3doaWxlKGIhPXRoaXMuZCl7aWYodHViKGIuZSxhKSl7cmV0dXJuIHRydWV9Yj1iLmF9cmV0dXJuIGZhbHNlfTtfLnZjPWZ1bmN0aW9uIGF0Yigpe3JldHVybiBuZXcga3RiKHRoaXMpfTtfLnhjPWZ1bmN0aW9uIGJ0YihhKXtyZXR1cm4gVHNiKHRoaXMsYSl9O18ueWM9ZnVuY3Rpb24gY3RiKGEsYil7cmV0dXJuIFVzYih0aGlzLGEsYil9O18uQWM9ZnVuY3Rpb24gZHRiKGEpe3JldHVybiBXc2IodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBldGIoKXtyZXR1cm4gVWliKHRoaXMuZSl9O18uYz1mYWxzZTt2YXIgQ0s9amViKFhxZSwnTGlua2VkSGFzaE1hcCcsMjIxKTtZY2IoMzkxLDM4OCx7NDc4OjEsMzg4OjEsMzkxOjEsNDM6MX0saHRiLGl0Yik7dmFyIHpLPWplYihYcWUsJ0xpbmtlZEhhc2hNYXAvQ2hhaW5FbnRyeScsMzkxKTtZY2IoNjk5LCRxZSxfcWUsa3RiKTtfLiRiPWZ1bmN0aW9uIGx0Yigpe1JzYih0aGlzLmEpfTtfLkdjPWZ1bmN0aW9uIG10YihhKXtyZXR1cm4ganRiKHRoaXMsYSl9O18uSmM9ZnVuY3Rpb24gbnRiKCl7cmV0dXJuIG5ldyBydGIodGhpcyl9O18uS2M9ZnVuY3Rpb24gb3RiKGEpe3ZhciBiO2lmKGp0Yih0aGlzLGEpKXtiPUpEKGEsNDMpLmpkKCk7V3NiKHRoaXMuYSxiKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O18uZ2M9ZnVuY3Rpb24gcHRiKCl7cmV0dXJuIFVpYih0aGlzLmEuZSl9O3ZhciBCSz1qZWIoWHFlLCdMaW5rZWRIYXNoTWFwL0VudHJ5U2V0Jyw2OTkpO1ljYig3MDAsMSxXcWUscnRiKTtfLk5iPWZ1bmN0aW9uIHN0YihhKXtPc2IodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiB1dGIoKXtyZXR1cm4gcXRiKHRoaXMpfTtfLk9iPWZ1bmN0aW9uIHR0Yigpe3JldHVybiB0aGlzLmMhPXRoaXMuZC5hLmR9O18uUWI9ZnVuY3Rpb24gdnRiKCl7eERiKCEhdGhpcy5hKTtxRGIodGhpcy5kLmEuZS5nLHRoaXMuYik7Z3RiKHRoaXMuYSk7U2liKHRoaXMuZC5hLmUsdGhpcy5hLmQpO3RoaXMuYj10aGlzLmQuYS5lLmc7dGhpcy5hPW51bGx9O18uYj0wO3ZhciBBSz1qZWIoWHFlLCdMaW5rZWRIYXNoTWFwL0VudHJ5U2V0L0VudHJ5SXRlcmF0b3InLDcwMCk7WWNiKDE4MCw1MCxjdGUsd3RiLHh0Yix5dGIpO3ZhciBESz1qZWIoWHFlLCdMaW5rZWRIYXNoU2V0JywxODApO1ljYig2NywyMDA4LHszOjEsNDoxLDIwOjEsMzE6MSw1NToxLDE2OjEsNjc6MSwxNToxfSxNdGIsTnRiKTtfLkVjPWZ1bmN0aW9uIE90YihhKXtyZXR1cm4gQXRiKHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gUHRiKCl7THRiKHRoaXMpfTtfLmRkPWZ1bmN0aW9uIFF0YihhKXtyZXR1cm4gR3RiKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24gUnRiKCl7cmV0dXJuIHRoaXMuYn07Xy5iPTA7dmFyIEdLPWplYihYcWUsJ0xpbmtlZExpc3QnLDY3KTtZY2IoOTU4LDEsZHJlLFh0Yik7Xy5OYj1mdW5jdGlvbiBadGIoYSl7T3NiKHRoaXMsYSl9O18uUmI9ZnVuY3Rpb24gWXRiKGEpe1N0Yih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uICR0Yigpe3JldHVybiBUdGIodGhpcyl9O18uU2I9ZnVuY3Rpb24gX3RiKCl7cmV0dXJuIHRoaXMuYi5iIT10aGlzLmQuYX07Xy5QYj1mdW5jdGlvbiBhdWIoKXtyZXR1cm4gVXRiKHRoaXMpfTtfLlRiPWZ1bmN0aW9uIGJ1Yigpe3JldHVybiB0aGlzLmF9O18uVWI9ZnVuY3Rpb24gY3ViKCl7cmV0dXJuIFZ0Yih0aGlzKX07Xy5WYj1mdW5jdGlvbiBkdWIoKXtyZXR1cm4gdGhpcy5hLTF9O18uUWI9ZnVuY3Rpb24gZXViKCl7V3RiKHRoaXMpfTtfLldiPWZ1bmN0aW9uIGZ1YihhKXt4RGIoISF0aGlzLmMpO3RoaXMuYy5jPWF9O18uYT0wO18uYz1udWxsO3ZhciBFSz1qZWIoWHFlLCdMaW5rZWRMaXN0L0xpc3RJdGVyYXRvckltcGwnLDk1OCk7WWNiKDYwMiwxLHt9LGd1Yik7dmFyIEZLPWplYihYcWUsJ0xpbmtlZExpc3QvTm9kZScsNjAyKTtZY2IoMjAwMywxLHt9KTt2YXIgaXViLGp1Yjt2YXIgS0s9amViKFhxZSwnTG9jYWxlJywyMDAzKTtZY2IoODQ5LDIwMDMse30sbHViKTtfLkliPWZ1bmN0aW9uIG11Yigpe3JldHVybiAnJ307dmFyIElLPWplYihYcWUsJ0xvY2FsZS8xJyw4NDkpO1ljYig4NTAsMjAwMyx7fSxudWIpO18uSWI9ZnVuY3Rpb24gb3ViKCl7cmV0dXJuICd1bmtub3duJ307dmFyIEpLPWplYihYcWUsJ0xvY2FsZS80Jyw4NTApO1ljYigxMTEsNjMsezM6MSwxMDM6MSw2MzoxLDgwOjEsMTExOjF9LHF1YixydWIpO3ZhciBOSz1qZWIoWHFlLCdOb1N1Y2hFbGVtZW50RXhjZXB0aW9uJywxMTEpO1ljYig0NjEsMSx7NDYxOjF9LEN1Yik7Xy5GYj1mdW5jdGlvbiBEdWIoYSl7dmFyIGI7aWYoYT09PXRoaXMpe3JldHVybiB0cnVlfWlmKCFSRChhLDQ2MSkpe3JldHVybiBmYWxzZX1iPUpEKGEsNDYxKTtyZXR1cm4gdHViKHRoaXMuYSxiLmEpfTtfLkhiPWZ1bmN0aW9uIEV1Yigpe3JldHVybiB1dWIodGhpcy5hKX07Xy5JYj1mdW5jdGlvbiBGdWIoKXtyZXR1cm4gdGhpcy5hIT1udWxsP1FxZSt4Z2IodGhpcy5hKSsnKSc6J09wdGlvbmFsLmVtcHR5KCknfTt2YXIgeHViO3ZhciBRSz1qZWIoWHFlLCdPcHRpb25hbCcsNDYxKTtZY2IoNDAzLDEsezQwMzoxfSxMdWIsTXViKTtfLkZiPWZ1bmN0aW9uIE51YihhKXt2YXIgYjtpZihhPT09dGhpcyl7cmV0dXJuIHRydWV9aWYoIVJEKGEsNDAzKSl7cmV0dXJuIGZhbHNlfWI9SkQoYSw0MDMpO3JldHVybiB0aGlzLmE9PWIuYSYmSGViKHRoaXMuYixiLmIpPT0wfTtfLkhiPWZ1bmN0aW9uIE91Yigpe3JldHVybiB0aGlzLmE/WUQodGhpcy5iKTowfTtfLkliPWZ1bmN0aW9uIFB1Yigpe3JldHVybiB0aGlzLmE/J09wdGlvbmFsRG91YmxlLm9mKCcrKCcnK3RoaXMuYikrJyknOidPcHRpb25hbERvdWJsZS5lbXB0eSgpJ307Xy5hPWZhbHNlO18uYj0wO3ZhciBHdWI7dmFyIE9LPWplYihYcWUsJ09wdGlvbmFsRG91YmxlJyw0MDMpO1ljYig1MDgsMSx7NTA4OjF9LFR1YixVdWIpO18uRmI9ZnVuY3Rpb24gVnViKGEpe3ZhciBiO2lmKGE9PT10aGlzKXtyZXR1cm4gdHJ1ZX1pZighUkQoYSw1MDgpKXtyZXR1cm4gZmFsc2V9Yj1KRChhLDUwOCk7cmV0dXJuIHRoaXMuYT09Yi5hJiYkZWIodGhpcy5iLGIuYik9PTB9O18uSGI9ZnVuY3Rpb24gV3ViKCl7cmV0dXJuIHRoaXMuYT90aGlzLmI6MH07Xy5JYj1mdW5jdGlvbiBYdWIoKXtyZXR1cm4gdGhpcy5hPydPcHRpb25hbEludC5vZignKygnJyt0aGlzLmIpKycpJzonT3B0aW9uYWxJbnQuZW1wdHkoKSd9O18uYT1mYWxzZTtfLmI9MDt2YXIgUXViO3ZhciBQSz1qZWIoWHFlLCdPcHRpb25hbEludCcsNTA4KTtZY2IoNDk0LDIwNDksWnFlLGR2Yik7Xy5GYz1mdW5jdGlvbiBldmIoYSl7cmV0dXJuIFl1Yih0aGlzLGEpfTtfLiRiPWZ1bmN0aW9uIGZ2Yigpe19DYih0aGlzLmIuYywwKX07Xy5HYz1mdW5jdGlvbiBndmIoYSl7cmV0dXJuIChhPT1udWxsPy0xOk5sYih0aGlzLmIsYSwwKSkhPS0xfTtfLkpjPWZ1bmN0aW9uIGh2Yigpe3JldHVybiBuZXcgbnZiKHRoaXMpfTtfLktjPWZ1bmN0aW9uIGl2YihhKXtyZXR1cm4gYnZiKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24ganZiKCl7cmV0dXJuIHRoaXMuYi5jLmxlbmd0aH07Xy5MYz1mdW5jdGlvbiBrdmIoKXtyZXR1cm4gbmV3IEd2Yih0aGlzLDI1Nil9O18uTmM9ZnVuY3Rpb24gbHZiKCl7cmV0dXJuIFRDYih0aGlzLmIuYyl9O18uT2M9ZnVuY3Rpb24gbXZiKGEpe3JldHVybiBUbGIodGhpcy5iLGEpfTt2YXIgU0s9amViKFhxZSwnUHJpb3JpdHlRdWV1ZScsNDk0KTtZY2IoMTI0OSwxLFdxZSxudmIpO18uTmI9ZnVuY3Rpb24gb3ZiKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIHB2Yigpe3JldHVybiB0aGlzLmE8dGhpcy5jLmIuYy5sZW5ndGh9O18uUGI9ZnVuY3Rpb24gcXZiKCl7ckRiKHRoaXMuYTx0aGlzLmMuYi5jLmxlbmd0aCk7dGhpcy5iPXRoaXMuYSsrO3JldHVybiBNbGIodGhpcy5jLmIsdGhpcy5iKX07Xy5RYj1mdW5jdGlvbiBydmIoKXt4RGIodGhpcy5iIT0tMSk7Y3ZiKHRoaXMuYyx0aGlzLmE9dGhpcy5iKTt0aGlzLmI9LTF9O18uYT0wO18uYj0tMTt2YXIgUks9amViKFhxZSwnUHJpb3JpdHlRdWV1ZS8xJywxMjQ5KTtZY2IoMjMzLDEsezIzMzoxfSxDdmIsRHZiKTtfLmE9MDtfLmI9MDt2YXIgc3ZiLHR2Yix1dmI9MDt2YXIgVEs9amViKFhxZSwnUmFuZG9tJywyMzMpO1ljYigyNiwxLGpyZSxHdmIsSHZiLEl2Yik7Xy55ZD1mdW5jdGlvbiBNdmIoYSl7cmV0dXJuICh0aGlzLmEmYSkhPTB9O18ud2Q9ZnVuY3Rpb24gSnZiKCl7cmV0dXJuIHRoaXMuYX07Xy54ZD1mdW5jdGlvbiBLdmIoKXtFdmIodGhpcyk7cmV0dXJuIHRoaXMuY307Xy5OYj1mdW5jdGlvbiBMdmIoYSl7RXZiKHRoaXMpO3RoaXMuZC5OYihhKX07Xy56ZD1mdW5jdGlvbiBOdmIoYSl7cmV0dXJuIEZ2Yih0aGlzLGEpfTtfLmE9MDtfLmM9MDt2YXIgaEw9amViKFhxZSwnU3BsaXRlcmF0b3JzL0l0ZXJhdG9yU3BsaXRlcmF0b3InLDI2KTtZY2IoNDc5LDI2LGpyZSxPdmIpO3ZhciBWSz1qZWIoWHFlLCdTb3J0ZWRTZXQvMScsNDc5KTtZY2IoNTk1LDEsYXRlLFF2Yik7Xy5OZT1mdW5jdGlvbiBSdmIoYSl7dGhpcy5hLkFkKGEpfTt2YXIgV0s9amViKFhxZSwnU3BsaXRlcmF0b3IvT2ZEb3VibGUvMG1ldGhvZHJlZiRhY2NlcHQkVHlwZScsNTk1KTtZY2IoNTk2LDEsYXRlLFN2Yik7Xy5OZT1mdW5jdGlvbiBUdmIoYSl7dGhpcy5hLkFkKGEpfTt2YXIgWEs9amViKFhxZSwnU3BsaXRlcmF0b3IvT2ZEb3VibGUvMW1ldGhvZHJlZiRhY2NlcHQkVHlwZScsNTk2KTtZY2IoNTk3LDEsbHJlLFV2Yik7Xy5CZD1mdW5jdGlvbiBWdmIoYSl7dGhpcy5hLkFkKGpmYihhKSl9O3ZhciBZSz1qZWIoWHFlLCdTcGxpdGVyYXRvci9PZkludC8ybWV0aG9kcmVmJGFjY2VwdCRUeXBlJyw1OTcpO1ljYig1OTgsMSxscmUsV3ZiKTtfLkJkPWZ1bmN0aW9uIFh2YihhKXt0aGlzLmEuQWQoamZiKGEpKX07dmFyIFpLPWplYihYcWUsJ1NwbGl0ZXJhdG9yL09mSW50LzNtZXRob2RyZWYkYWNjZXB0JFR5cGUnLDU5OCk7WWNiKDYxMCwxLGpyZSk7Xy5OYj1mdW5jdGlvbiBid2IoYSl7UHZiKHRoaXMsYSl9O18ueWQ9ZnVuY3Rpb24gY3diKGEpe3JldHVybiAodGhpcy5kJmEpIT0wfTtfLndkPWZ1bmN0aW9uIF92Yigpe3JldHVybiB0aGlzLmR9O18ueGQ9ZnVuY3Rpb24gYXdiKCl7cmV0dXJuIHRoaXMuZX07Xy5kPTA7Xy5lPTA7dmFyIGRMPWplYihYcWUsJ1NwbGl0ZXJhdG9ycy9CYXNlU3BsaXRlcmF0b3InLDYxMCk7WWNiKDcxOSw2MTAsanJlKTtfLk9lPWZ1bmN0aW9uIGV3YihhKXtZdmIodGhpcyxhKX07Xy5OYj1mdW5jdGlvbiBmd2IoYSl7UkQoYSwxODkpP1l2Yih0aGlzLEpEKGEsMTg5KSk6WXZiKHRoaXMsbmV3IFN2YihhKSl9O18uemQ9ZnVuY3Rpb24gZ3diKGEpe3JldHVybiBSRChhLDE4OSk/dGhpcy5QZShKRChhLDE4OSkpOnRoaXMuUGUobmV3IFF2YihhKSl9O3ZhciAkSz1qZWIoWHFlLCdTcGxpdGVyYXRvcnMvQWJzdHJhY3REb3VibGVTcGxpdGVyYXRvcicsNzE5KTtZY2IoNzE4LDYxMCxqcmUpO18uT2U9ZnVuY3Rpb24gaXdiKGEpe1l2Yih0aGlzLGEpfTtfLk5iPWZ1bmN0aW9uIGp3YihhKXtSRChhLDIwMik/WXZiKHRoaXMsSkQoYSwyMDIpKTpZdmIodGhpcyxuZXcgV3ZiKGEpKX07Xy56ZD1mdW5jdGlvbiBrd2IoYSl7cmV0dXJuIFJEKGEsMjAyKT90aGlzLlBlKEpEKGEsMjAyKSk6dGhpcy5QZShuZXcgVXZiKGEpKX07dmFyIF9LPWplYihYcWUsJ1NwbGl0ZXJhdG9ycy9BYnN0cmFjdEludFNwbGl0ZXJhdG9yJyw3MTgpO1ljYig0ODQsNjEwLGpyZSk7dmFyIGFMPWplYihYcWUsJ1NwbGl0ZXJhdG9ycy9BYnN0cmFjdFNwbGl0ZXJhdG9yJyw0ODQpO1ljYig2OTAsMSxqcmUpO18uTmI9ZnVuY3Rpb24gcndiKGEpe1B2Yih0aGlzLGEpfTtfLnlkPWZ1bmN0aW9uIHN3YihhKXtyZXR1cm4gKHRoaXMuYiZhKSE9MH07Xy53ZD1mdW5jdGlvbiBwd2IoKXtyZXR1cm4gdGhpcy5ifTtfLnhkPWZ1bmN0aW9uIHF3Yigpe3JldHVybiB0aGlzLmQtdGhpcy5jfTtfLmI9MDtfLmM9MDtfLmQ9MDt2YXIgY0w9amViKFhxZSwnU3BsaXRlcmF0b3JzL0Jhc2VBcnJheVNwbGl0ZXJhdG9yJyw2OTApO1ljYig5MzgsNjkwLGpyZSx1d2IpO18uUWU9ZnVuY3Rpb24gdndiKGEsYil7dHdiKHRoaXMsSkQoYSw0MCksYil9O18uTmI9ZnVuY3Rpb24gd3diKGEpe213Yih0aGlzLGEpfTtfLnpkPWZ1bmN0aW9uIHh3YihhKXtyZXR1cm4gbndiKHRoaXMsYSl9O3ZhciBiTD1qZWIoWHFlLCdTcGxpdGVyYXRvcnMvQXJyYXlTcGxpdGVyYXRvcicsOTM4KTtZY2IoNjkxLDY5MCxqcmUsendiKTtfLlFlPWZ1bmN0aW9uIEJ3YihhLGIpe3l3Yih0aGlzLEpEKGEsMTg5KSxiKX07Xy5PZT1mdW5jdGlvbiBDd2IoYSl7bXdiKHRoaXMsYSl9O18uTmI9ZnVuY3Rpb24gRHdiKGEpe1JEKGEsMTg5KT9td2IodGhpcyxKRChhLDE4OSkpOm13Yih0aGlzLG5ldyBTdmIoYSkpfTtfLlBlPWZ1bmN0aW9uIEV3YihhKXtyZXR1cm4gbndiKHRoaXMsYSl9O18uemQ9ZnVuY3Rpb24gRndiKGEpe3JldHVybiBSRChhLDE4OSk/bndiKHRoaXMsSkQoYSwxODkpKTpud2IodGhpcyxuZXcgUXZiKGEpKX07dmFyIGVMPWplYihYcWUsJ1NwbGl0ZXJhdG9ycy9Eb3VibGVBcnJheVNwbGl0ZXJhdG9yJyw2OTEpO1ljYigyMDEyLDEsanJlKTtfLk5iPWZ1bmN0aW9uIEt3YihhKXtQdmIodGhpcyxhKX07Xy55ZD1mdW5jdGlvbiBMd2IoYSl7cmV0dXJuICgxNjQ0OCZhKSE9MH07Xy53ZD1mdW5jdGlvbiBJd2IoKXtyZXR1cm4gMTY0NDh9O18ueGQ9ZnVuY3Rpb24gSndiKCl7cmV0dXJuIDB9O3ZhciBHd2I7dmFyIGdMPWplYihYcWUsJ1NwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yJywyMDEyKTtZY2IoOTM3LDIwMTIsanJlLE93Yik7Xy5PZT1mdW5jdGlvbiBQd2IoYSl7TXdiKGEpfTtfLk5iPWZ1bmN0aW9uIFF3YihhKXtSRChhLDIwMik/TXdiKEpEKGEsMjAyKSk6TXdiKG5ldyBXdmIoYSkpfTtfLlBlPWZ1bmN0aW9uIFJ3YihhKXtyZXR1cm4gTndiKGEpfTtfLnpkPWZ1bmN0aW9uIFN3YihhKXtyZXR1cm4gUkQoYSwyMDIpP053YihKRChhLDIwMikpOk53YihuZXcgVXZiKGEpKX07dmFyIGZMPWplYihYcWUsJ1NwbGl0ZXJhdG9ycy9FbXB0eVNwbGl0ZXJhdG9yL09mSW50Jyw5MzcpO1ljYig1NzEsNTUsbHRlLFd3Yik7Xy5fYz1mdW5jdGlvbiBYd2IoYSxiKXtfd2IoYSx0aGlzLmEuYy5sZW5ndGgrMSk7SGxiKHRoaXMuYSxhLGIpfTtfLkVjPWZ1bmN0aW9uIFl3YihhKXtyZXR1cm4gSWxiKHRoaXMuYSxhKX07Xy5hZD1mdW5jdGlvbiBad2IoYSxiKXtfd2IoYSx0aGlzLmEuYy5sZW5ndGgrMSk7cmV0dXJuIEpsYih0aGlzLmEsYSxiKX07Xy5GYz1mdW5jdGlvbiAkd2IoYSl7cmV0dXJuIEtsYih0aGlzLmEsYSl9O18uJGI9ZnVuY3Rpb24gYXhiKCl7X0NiKHRoaXMuYS5jLDApfTtfLkdjPWZ1bmN0aW9uIGJ4YihhKXtyZXR1cm4gTmxiKHRoaXMuYSxhLDApIT0tMX07Xy5IYz1mdW5jdGlvbiBjeGIoYSl7cmV0dXJuIEFlKHRoaXMuYSxhKX07Xy5JYz1mdW5jdGlvbiBkeGIoYSl7TGxiKHRoaXMuYSxhKX07Xy5YYj1mdW5jdGlvbiBleGIoYSl7cmV0dXJuIF93YihhLHRoaXMuYS5jLmxlbmd0aCksTWxiKHRoaXMuYSxhKX07Xy5iZD1mdW5jdGlvbiBmeGIoYSl7cmV0dXJuIE5sYih0aGlzLmEsYSwwKX07Xy5kYz1mdW5jdGlvbiBneGIoKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RoPT0wfTtfLkpjPWZ1bmN0aW9uIGh4Yigpe3JldHVybiBuZXcgcm1iKHRoaXMuYSl9O18uZWQ9ZnVuY3Rpb24gaXhiKGEpe3JldHVybiBfd2IoYSx0aGlzLmEuYy5sZW5ndGgpLE9sYih0aGlzLmEsYSl9O18uYWU9ZnVuY3Rpb24ganhiKGEsYil7UWxiKHRoaXMuYSxhLGIpfTtfLmZkPWZ1bmN0aW9uIGt4YihhLGIpe3JldHVybiBfd2IoYSx0aGlzLmEuYy5sZW5ndGgpLFJsYih0aGlzLmEsYSxiKX07Xy5nYz1mdW5jdGlvbiBseGIoKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RofTtfLmdkPWZ1bmN0aW9uIG14YihhKXtTbGIodGhpcy5hLGEpfTtfLmhkPWZ1bmN0aW9uIG54YihhLGIpe3JldHVybiBuZXcgSWpiKHRoaXMuYSxhLGIpfTtfLk5jPWZ1bmN0aW9uIG94Yigpe3JldHVybiBUQ2IodGhpcy5hLmMpfTtfLk9jPWZ1bmN0aW9uIHB4YihhKXtyZXR1cm4gVGxiKHRoaXMuYSxhKX07Xy5JYj1mdW5jdGlvbiBxeGIoKXtyZXR1cm4gRWUodGhpcy5hKX07dmFyIHZMPWplYihYcWUsJ1ZlY3RvcicsNTcxKTtZY2IoODAzLDU3MSxsdGUsdHhiKTt2YXIgaUw9amViKFhxZSwnU3RhY2snLDgwMyk7WWNiKDIxMiwxLHsyMTI6MX0seHhiKTtfLkliPWZ1bmN0aW9uIHl4Yigpe3JldHVybiB3eGIodGhpcyl9O3ZhciBqTD1qZWIoWHFlLCdTdHJpbmdKb2luZXInLDIxMik7WWNiKDUzOCwyMDM2LHszOjEsOTE6MSwxMzc6MSwxMzQ6MX0sVHhiLFV4Yik7Xy4kYj1mdW5jdGlvbiBWeGIoKXt6eGIodGhpcyl9O18uQmU9ZnVuY3Rpb24gV3hiKCl7cmV0dXJuIG5ldyBseWIodGhpcyl9O18udmM9ZnVuY3Rpb24gWHhiKCl7cmV0dXJuIG5ldyByeWIodGhpcyl9O18uQ2U9ZnVuY3Rpb24gWXhiKGEpe3JldHVybiBEeGIodGhpcyxhLHRydWUpfTtfLkRlPWZ1bmN0aW9uIFp4YihhKXtyZXR1cm4gQXhiKHRoaXMsYSl9O18uRWU9ZnVuY3Rpb24gJHhiKCl7cmV0dXJuIEJ4Yih0aGlzKX07Xy5GZT1mdW5jdGlvbiBfeGIoYSl7cmV0dXJuIEV4Yih0aGlzLGEsdHJ1ZSl9O18uR2U9ZnVuY3Rpb24gYXliKGEpe3JldHVybiBEeGIodGhpcyxhLGZhbHNlKX07Xy5IZT1mdW5jdGlvbiBieWIoKXtyZXR1cm4gQ3hiKHRoaXMpfTtfLkllPWZ1bmN0aW9uIGN5YihhKXtyZXR1cm4gRXhiKHRoaXMsYSxmYWxzZSl9O18uWGM9ZnVuY3Rpb24gZHliKGEsYil7cmV0dXJuIEZ4Yih0aGlzLGEsYil9O18ueWM9ZnVuY3Rpb24gZXliKGEsYil7cmV0dXJuIEt4Yih0aGlzLGEsYil9O18uQWM9ZnVuY3Rpb24gZnliKGEpe3JldHVybiBMeGIodGhpcyxhKX07Xy5KZT1mdW5jdGlvbiBneWIoYSl7cmV0dXJuIE14Yih0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIGh5Yigpe3JldHVybiB0aGlzLmN9O18uJGM9ZnVuY3Rpb24gaXliKGEsYil7cmV0dXJuIFN4Yih0aGlzLGEsYil9O18uYz0wO3ZhciB0TD1qZWIoWHFlLCdUcmVlTWFwJyw1MzgpO1ljYig1MzksMSxXcWUsbHliLG15Yik7Xy5OYj1mdW5jdGlvbiBueWIoYSl7T3NiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gcHliKCl7cmV0dXJuIGp5Yih0aGlzKX07Xy5PYj1mdW5jdGlvbiBveWIoKXtyZXR1cm4gcmpiKHRoaXMuYSl9O18uUWI9ZnVuY3Rpb24gcXliKCl7a3liKHRoaXMpfTt2YXIga0w9amViKFhxZSwnVHJlZU1hcC9FbnRyeUl0ZXJhdG9yJyw1MzkpO1ljYigxMTA2LDYxNCxfcWUscnliKTtfLiRiPWZ1bmN0aW9uIHN5Yigpe3p4Yih0aGlzLmEpfTt2YXIgbEw9amViKFhxZSwnVHJlZU1hcC9FbnRyeVNldCcsMTEwNik7WWNiKDQzNSwzODgsezQ3ODoxLDM4ODoxLDQzOjEsNDM1OjF9LHR5Yik7Xy5iPWZhbHNlO3ZhciBtTD1qZWIoWHFlLCdUcmVlTWFwL05vZGUnLDQzNSk7WWNiKDYxNSwxLHt9LHV5Yik7Xy5JYj1mdW5jdGlvbiB2eWIoKXtyZXR1cm4gJ1N0YXRlOiBtdj0nK3RoaXMuYysnIHZhbHVlPScrdGhpcy5kKycgZG9uZT0nK3RoaXMuYSsnIGZvdW5kPScrdGhpcy5ifTtfLmE9ZmFsc2U7Xy5iPWZhbHNlO18uYz1mYWxzZTt2YXIgbkw9amViKFhxZSwnVHJlZU1hcC9TdGF0ZScsNjE1KTtZY2IoNjE2LDIwMzYsYXJlLHl5Yik7Xy5CZT1mdW5jdGlvbiB6eWIoKXtyZXR1cm4gbmV3IG15Yih0aGlzLmMsdGhpcy5mLHRoaXMuYix0aGlzLmEsdGhpcy5lLHRoaXMuZCl9O18udmM9ZnVuY3Rpb24gQXliKCl7cmV0dXJuIG5ldyBHa2IodGhpcyl9O18uQ2U9ZnVuY3Rpb24gQnliKGEpe3JldHVybiB3eWIodGhpcyxEeGIodGhpcy5jLGEsdHJ1ZSkpfTtfLkRlPWZ1bmN0aW9uIEN5YihhKXtyZXR1cm4gd3liKHRoaXMsQXhiKHRoaXMuYyxhKSl9O18uRWU9ZnVuY3Rpb24gRHliKCl7dmFyIGE7cmV0dXJuIHRoaXMuZi5SZSgpP3RoaXMuYT8oYT1EeGIodGhpcy5jLHRoaXMuYix0cnVlKSk6KGE9RHhiKHRoaXMuYyx0aGlzLmIsZmFsc2UpKTooYT1CeGIodGhpcy5jKSksISFhJiZ4eWIodGhpcyxhLmQpP2E6bnVsbH07Xy5GZT1mdW5jdGlvbiBFeWIoYSl7cmV0dXJuIHd5Yih0aGlzLEV4Yih0aGlzLmMsYSx0cnVlKSl9O18uR2U9ZnVuY3Rpb24gRnliKGEpe3JldHVybiB3eWIodGhpcyxEeGIodGhpcy5jLGEsZmFsc2UpKX07Xy5IZT1mdW5jdGlvbiBHeWIoKXt2YXIgYTt0aGlzLmYuU2UoKT90aGlzLmQ/KGE9RXhiKHRoaXMuYyx0aGlzLmUsdHJ1ZSkpOihhPUV4Yih0aGlzLmMsdGhpcy5lLGZhbHNlKSk6KGE9Q3hiKHRoaXMuYykpO3JldHVybiAhIWEmJnh5Yih0aGlzLGEuZCk/YTpudWxsfTtfLkllPWZ1bmN0aW9uIEh5YihhKXtyZXR1cm4gd3liKHRoaXMsRXhiKHRoaXMuYyxhLGZhbHNlKSl9O18uWGM9ZnVuY3Rpb24gSXliKGEsYil7aWYodGhpcy5mLlNlKCkmJnRoaXMuYy5hLkxlKGEsdGhpcy5lKT4wKXt0aHJvdyBzY2IobmV3IFRlYihtdGUrYSsnIGdyZWF0ZXIgdGhhbiAnK3RoaXMuZSkpfXJldHVybiB0aGlzLmYuUmUoKT9SeGIodGhpcy5jLHRoaXMuYix0aGlzLmEsYSxiKTpGeGIodGhpcy5jLGEsYil9O18ueWM9ZnVuY3Rpb24gSnliKGEsYil7aWYoIUh4Yih0aGlzLmMsdGhpcy5mLGEsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKSl7dGhyb3cgc2NiKG5ldyBUZWIoYSsnIG91dHNpZGUgdGhlIHJhbmdlICcrdGhpcy5iKycgdG8gJyt0aGlzLmUpKX1yZXR1cm4gS3hiKHRoaXMuYyxhLGIpfTtfLkFjPWZ1bmN0aW9uIEt5YihhKXt2YXIgYjtiPWE7aWYoIUh4Yih0aGlzLmMsdGhpcy5mLGIsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKSl7cmV0dXJuIG51bGx9cmV0dXJuIEx4Yih0aGlzLmMsYil9O18uSmU9ZnVuY3Rpb24gTHliKGEpe3JldHVybiB4eWIodGhpcyxhLmpkKCkpJiZNeGIodGhpcy5jLGEpfTtfLmdjPWZ1bmN0aW9uIE15Yigpe3ZhciBhLGIsYzt0aGlzLmYuUmUoKT90aGlzLmE/KGI9RHhiKHRoaXMuYyx0aGlzLmIsdHJ1ZSkpOihiPUR4Yih0aGlzLmMsdGhpcy5iLGZhbHNlKSk6KGI9QnhiKHRoaXMuYykpO2lmKCEoISFiJiZ4eWIodGhpcyxiLmQpP2I6bnVsbCkpe3JldHVybiAwfWE9MDtmb3IoYz1uZXcgbXliKHRoaXMuYyx0aGlzLmYsdGhpcy5iLHRoaXMuYSx0aGlzLmUsdGhpcy5kKTtyamIoYy5hKTtjLmI9SkQoc2piKGMuYSksNDMpKXsrK2F9cmV0dXJuIGF9O18uJGM9ZnVuY3Rpb24gTnliKGEsYil7aWYodGhpcy5mLlJlKCkmJnRoaXMuYy5hLkxlKGEsdGhpcy5iKTwwKXt0aHJvdyBzY2IobmV3IFRlYihtdGUrYStudGUrdGhpcy5iKSl9cmV0dXJuIHRoaXMuZi5TZSgpP1J4Yih0aGlzLmMsYSxiLHRoaXMuZSx0aGlzLmQpOlN4Yih0aGlzLmMsYSxiKX07Xy5hPWZhbHNlO18uZD1mYWxzZTt2YXIgc0w9amViKFhxZSwnVHJlZU1hcC9TdWJNYXAnLDYxNik7WWNiKDMwNSwyMyxvdGUsVHliKTtfLlJlPWZ1bmN0aW9uIFV5Yigpe3JldHVybiBmYWxzZX07Xy5TZT1mdW5jdGlvbiBWeWIoKXtyZXR1cm4gZmFsc2V9O3ZhciBPeWIsUHliLFF5YixSeWI7dmFyIHJMPWtlYihYcWUsJ1RyZWVNYXAvU3ViTWFwVHlwZScsMzA1LE1JLFh5YixXeWIpO1ljYigxMTA3LDMwNSxvdGUsWXliKTtfLlNlPWZ1bmN0aW9uIFp5Yigpe3JldHVybiB0cnVlfTt2YXIgb0w9a2ViKFhxZSwnVHJlZU1hcC9TdWJNYXBUeXBlLzEnLDExMDcsckwsbnVsbCxudWxsKTtZY2IoMTEwOCwzMDUsb3RlLCR5Yik7Xy5SZT1mdW5jdGlvbiBfeWIoKXtyZXR1cm4gdHJ1ZX07Xy5TZT1mdW5jdGlvbiBhemIoKXtyZXR1cm4gdHJ1ZX07dmFyIHBMPWtlYihYcWUsJ1RyZWVNYXAvU3ViTWFwVHlwZS8yJywxMTA4LHJMLG51bGwsbnVsbCk7WWNiKDExMDksMzA1LG90ZSxiemIpO18uUmU9ZnVuY3Rpb24gY3piKCl7cmV0dXJuIHRydWV9O3ZhciBxTD1rZWIoWHFlLCdUcmVlTWFwL1N1Yk1hcFR5cGUvMycsMTEwOSxyTCxudWxsLG51bGwpO3ZhciBkemI7WWNiKDE1NiwkcWUsezM6MSwyMDoxLDMxOjEsMTY6MSwyNzQ6MSwyMjoxLDgzOjEsMTU2OjF9LGx6YixtemIsbnpiKTtfLkxjPWZ1bmN0aW9uIHV6Yigpe3JldHVybiBuZXcgT3ZiKHRoaXMpfTtfLkVjPWZ1bmN0aW9uIG96YihhKXtyZXR1cm4gZnpiKHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gcHpiKCl7dGhpcy5hLiRiKCl9O18uR2M9ZnVuY3Rpb24gcXpiKGEpe3JldHVybiB0aGlzLmEuX2IoYSl9O18uSmM9ZnVuY3Rpb24gcnpiKCl7cmV0dXJuIHRoaXMuYS5lYygpLkpjKCl9O18uS2M9ZnVuY3Rpb24gc3piKGEpe3JldHVybiBremIodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiB0emIoKXtyZXR1cm4gdGhpcy5hLmdjKCl9O3ZhciB1TD1qZWIoWHFlLCdUcmVlU2V0JywxNTYpO1ljYigxMDQ3LDEse30seHpiKTtfLlRlPWZ1bmN0aW9uIHl6YihhLGIpe3JldHVybiB2emIodGhpcy5hLGEsYil9O3ZhciB3TD1qZWIocHRlLCdCaW5hcnlPcGVyYXRvci9sYW1iZGEkMCRUeXBlJywxMDQ3KTtZY2IoMTA0OCwxLHt9LHp6Yik7Xy5UZT1mdW5jdGlvbiBBemIoYSxiKXtyZXR1cm4gd3piKHRoaXMuYSxhLGIpfTt2YXIgeEw9amViKHB0ZSwnQmluYXJ5T3BlcmF0b3IvbGFtYmRhJDEkVHlwZScsMTA0OCk7WWNiKDkzMCwxLHt9LEJ6Yik7Xy5LYj1mdW5jdGlvbiBDemIoYSl7cmV0dXJuIGF9O3ZhciB5TD1qZWIocHRlLCdGdW5jdGlvbi9sYW1iZGEkMCRUeXBlJyw5MzApO1ljYigzODYsMSxJcmUsRHpiKTtfLk1iPWZ1bmN0aW9uIEV6YihhKXtyZXR1cm4gIXRoaXMuYS5NYihhKX07dmFyIHpMPWplYihwdGUsJ1ByZWRpY2F0ZS9sYW1iZGEkMiRUeXBlJywzODYpO1ljYig1NjMsMSx7NTYzOjF9KTt2YXIgQUw9amViKHF0ZSwnSGFuZGxlcicsNTYzKTtZY2IoMjA1MywxLEpxZSk7Xy52ZT1mdW5jdGlvbiBIemIoKXtyZXR1cm4gJ0RVTU1ZJ307Xy5JYj1mdW5jdGlvbiBJemIoKXtyZXR1cm4gdGhpcy52ZSgpfTt2YXIgRnpiO3ZhciBDTD1qZWIocXRlLCdMZXZlbCcsMjA1Myk7WWNiKDE2NDgsMjA1MyxKcWUsSnpiKTtfLnZlPWZ1bmN0aW9uIEt6Yigpe3JldHVybiAnSU5GTyd9O3ZhciBCTD1qZWIocXRlLCdMZXZlbC9MZXZlbEluZm8nLDE2NDgpO1ljYigxNzg5LDEse30sT3piKTt2YXIgTHpiO3ZhciBETD1qZWIocXRlLCdMb2dNYW5hZ2VyJywxNzg5KTtZY2IoMTg0MiwxLEpxZSxRemIpO18uYj1udWxsO3ZhciBFTD1qZWIocXRlLCdMb2dSZWNvcmQnLDE4NDIpO1ljYig1MDksMSx7NTA5OjF9LGNBYik7Xy5lPWZhbHNlO3ZhciBSemI9ZmFsc2UsU3piPWZhbHNlLFR6Yj1mYWxzZSxVemI9ZmFsc2UsVnpiPWZhbHNlO3ZhciBGTD1qZWIocXRlLCdMb2dnZXInLDUwOSk7WWNiKDgxNCw1NjMsezU2MzoxfSxmQWIpO3ZhciBHTD1qZWIocXRlLCdTaW1wbGVDb25zb2xlTG9nSGFuZGxlcicsODE0KTtZY2IoMTMxLDIzLHszOjEsMzQ6MSwyMzoxLDEzMToxfSxtQWIpO3ZhciBpQWIsakFiLGtBYjt2YXIgSEw9a2ViKHR0ZSwnQ29sbGVjdG9yL0NoYXJhY3RlcmlzdGljcycsMTMxLE1JLG9BYixuQWIpO3ZhciBwQWI7WWNiKDc0MSwxLHt9LHJBYik7dmFyIElMPWplYih0dGUsJ0NvbGxlY3RvckltcGwnLDc0MSk7WWNiKDEwNDUsMSx7fSx0QWIpO18uVGU9ZnVuY3Rpb24gdUFiKGEsYil7cmV0dXJuIHZ4YihKRChhLDIxMiksSkQoYiwyMTIpKX07dmFyIEpMPWplYih0dGUsJ0NvbGxlY3RvcnMvMTBtZXRob2RyZWYkbWVyZ2UkVHlwZScsMTA0NSk7WWNiKDEwNDYsMSx7fSx2QWIpO18uS2I9ZnVuY3Rpb24gd0FiKGEpe3JldHVybiB3eGIoSkQoYSwyMTIpKX07dmFyIEtMPWplYih0dGUsJ0NvbGxlY3RvcnMvMTFtZXRob2RyZWYkdG9TdHJpbmckVHlwZScsMTA0Nik7WWNiKDE2MywxLHt9LHhBYik7Xy5XZD1mdW5jdGlvbiB5QWIoYSxiKXtKRChhLDE2KS5FYyhiKX07dmFyIExMPWplYih0dGUsJ0NvbGxlY3RvcnMvMjBtZXRob2RyZWYkYWRkJFR5cGUnLDE2Myk7WWNiKDE2NSwxLHt9LHpBYik7Xy5WZT1mdW5jdGlvbiBBQWIoKXtyZXR1cm4gbmV3IFVsYn07dmFyIE1MPWplYih0dGUsJ0NvbGxlY3RvcnMvMjFtZXRob2RyZWYkY3RvciRUeXBlJywxNjUpO1ljYigxMDQ0LDEse30sQkFiKTtfLldkPWZ1bmN0aW9uIENBYihhLGIpe3V4YihKRChhLDIxMiksSkQoYiw0NzApKX07dmFyIE5MPWplYih0dGUsJ0NvbGxlY3RvcnMvOW1ldGhvZHJlZiRhZGQkVHlwZScsMTA0NCk7WWNiKDEwNDMsMSx7fSxEQWIpO18uVmU9ZnVuY3Rpb24gRUFiKCl7cmV0dXJuIG5ldyB4eGIodGhpcy5hLHRoaXMuYix0aGlzLmMpfTt2YXIgT0w9amViKHR0ZSwnQ29sbGVjdG9ycy9sYW1iZGEkMTUkVHlwZScsMTA0Myk7WWNiKDE2NCwxLHt9LEZBYik7Xy5UZT1mdW5jdGlvbiBHQWIoYSxiKXtyZXR1cm4gc0FiKEpEKGEsMTYpLEpEKGIsMTYpKX07dmFyIFBMPWplYih0dGUsJ0NvbGxlY3RvcnMvbGFtYmRhJDQ1JFR5cGUnLDE2NCk7WWNiKDUzNSwxLHt9KTtfLlllPWZ1bmN0aW9uIE5BYigpe0hBYih0aGlzKX07Xy5kPWZhbHNlO3ZhciB2TT1qZWIodHRlLCdUZXJtaW5hdGFibGVTdHJlYW0nLDUzNSk7WWNiKDgwNiw1MzUsdXRlLFZBYik7Xy5ZZT1mdW5jdGlvbiBXQWIoKXtIQWIodGhpcyl9O3ZhciBVTD1qZWIodHRlLCdEb3VibGVTdHJlYW1JbXBsJyw4MDYpO1ljYigxNzkzLDcxOSxqcmUsWkFiKTtfLlBlPWZ1bmN0aW9uIF9BYihhKXtyZXR1cm4gWUFiKHRoaXMsSkQoYSwxODkpKX07Xy5hPW51bGw7dmFyIFJMPWplYih0dGUsJ0RvdWJsZVN0cmVhbUltcGwvMicsMTc5Myk7WWNiKDE3OTQsMSxhdGUsYUJiKTtfLk5lPWZ1bmN0aW9uIGJCYihhKXskQWIodGhpcy5hLGEpfTt2YXIgUUw9amViKHR0ZSwnRG91YmxlU3RyZWFtSW1wbC8yL2xhbWJkYSQwJFR5cGUnLDE3OTQpO1ljYigxNzkxLDEsYXRlLGNCYik7Xy5OZT1mdW5jdGlvbiBkQmIoYSl7WEFiKHRoaXMuYSxhKX07dmFyIFNMPWplYih0dGUsJ0RvdWJsZVN0cmVhbUltcGwvbGFtYmRhJDAkVHlwZScsMTc5MSk7WWNiKDE3OTIsMSxhdGUsZUJiKTtfLk5lPWZ1bmN0aW9uIGZCYihhKXtDcWIodGhpcy5hLGEpfTt2YXIgVEw9amViKHR0ZSwnRG91YmxlU3RyZWFtSW1wbC9sYW1iZGEkMiRUeXBlJywxNzkyKTtZY2IoMTMzNiw3MTgsanJlLGpCYik7Xy5QZT1mdW5jdGlvbiBrQmIoYSl7cmV0dXJuIGlCYih0aGlzLEpEKGEsMjAyKSl9O18uYT0wO18uYj0wO18uYz0wO3ZhciBWTD1qZWIodHRlLCdJbnRTdHJlYW0vNScsMTMzNik7WWNiKDc4Niw1MzUsdXRlLG5CYik7Xy5ZZT1mdW5jdGlvbiBvQmIoKXtIQWIodGhpcyl9O18uWmU9ZnVuY3Rpb24gcEJiKCl7cmV0dXJuIEtBYih0aGlzKSx0aGlzLmF9O3ZhciBZTD1qZWIodHRlLCdJbnRTdHJlYW1JbXBsJyw3ODYpO1ljYig3ODcsNTM1LHV0ZSxxQmIpO18uWWU9ZnVuY3Rpb24gckJiKCl7SEFiKHRoaXMpfTtfLlplPWZ1bmN0aW9uIHNCYigpe3JldHVybiBLQWIodGhpcyksSHdiKCksR3difTt2YXIgV0w9amViKHR0ZSwnSW50U3RyZWFtSW1wbC9FbXB0eScsNzg3KTtZY2IoMTYyOCwxLGxyZSx0QmIpO18uQmQ9ZnVuY3Rpb24gdUJiKGEpe19yYih0aGlzLmEsYSl9O3ZhciBYTD1qZWIodHRlLCdJbnRTdHJlYW1JbXBsL2xhbWJkYSQ0JFR5cGUnLDE2MjgpO3ZhciBzTT1sZWIodHRlLCdTdHJlYW0nKTtZY2IoMjgsNTM1LHs1MTg6MSw2NzI6MSw4Mjc6MX0sUkJiKTtfLlllPWZ1bmN0aW9uIFNCYigpe0hBYih0aGlzKX07dmFyIHZCYjt2YXIgck09amViKHR0ZSwnU3RyZWFtSW1wbCcsMjgpO1ljYigxMDY3LDQ4NCxqcmUsWEJiKTtfLnpkPWZ1bmN0aW9uIFlCYihhKXt3aGlsZShWQmIodGhpcykpe2lmKHRoaXMuYS56ZChhKSl7cmV0dXJuIHRydWV9ZWxzZXtIQWIodGhpcy5iKTt0aGlzLmI9bnVsbDt0aGlzLmE9bnVsbH19cmV0dXJuIGZhbHNlfTt2YXIgJEw9amViKHR0ZSwnU3RyZWFtSW1wbC8xJywxMDY3KTtZY2IoMTA2OCwxLGtyZSxaQmIpO18uQWQ9ZnVuY3Rpb24gJEJiKGEpe1dCYih0aGlzLmEsSkQoYSw4MjcpKX07dmFyIFpMPWplYih0dGUsJ1N0cmVhbUltcGwvMS9sYW1iZGEkMCRUeXBlJywxMDY4KTtZY2IoMTA2OSwxLElyZSxfQmIpO18uTWI9ZnVuY3Rpb24gYUNiKGEpe3JldHVybiBOcmIodGhpcy5hLGEpfTt2YXIgX0w9amViKHR0ZSwnU3RyZWFtSW1wbC8xbWV0aG9kcmVmJGFkZCRUeXBlJywxMDY5KTtZY2IoMTA3MCw0ODQsanJlLGJDYik7Xy56ZD1mdW5jdGlvbiBjQ2IoYSl7dmFyIGI7aWYoIXRoaXMuYSl7Yj1uZXcgVWxiO3RoaXMuYi5hLk5iKG5ldyBkQ2IoYikpO3BuYigpO1NsYihiLHRoaXMuYyk7dGhpcy5hPW5ldyBHdmIoYiwxNil9cmV0dXJuIEZ2Yih0aGlzLmEsYSl9O18uYT1udWxsO3ZhciBiTT1qZWIodHRlLCdTdHJlYW1JbXBsLzUnLDEwNzApO1ljYigxMDcxLDEsa3JlLGRDYik7Xy5BZD1mdW5jdGlvbiBlQ2IoYSl7SWxiKHRoaXMuYSxhKX07dmFyIGFNPWplYih0dGUsJ1N0cmVhbUltcGwvNS8ybWV0aG9kcmVmJGFkZCRUeXBlJywxMDcxKTtZY2IoNzIwLDQ4NCxqcmUsZ0NiKTtfLnpkPWZ1bmN0aW9uIGhDYihhKXt0aGlzLmI9ZmFsc2U7d2hpbGUoIXRoaXMuYiYmdGhpcy5jLnpkKG5ldyBpQ2IodGhpcyxhKSkpO3JldHVybiB0aGlzLmJ9O18uYj1mYWxzZTt2YXIgZE09amViKHR0ZSwnU3RyZWFtSW1wbC9GaWx0ZXJTcGxpdGVyYXRvcicsNzIwKTtZY2IoMTA2MSwxLGtyZSxpQ2IpO18uQWQ9ZnVuY3Rpb24gakNiKGEpe2ZDYih0aGlzLmEsdGhpcy5iLGEpfTt2YXIgY009amViKHR0ZSwnU3RyZWFtSW1wbC9GaWx0ZXJTcGxpdGVyYXRvci9sYW1iZGEkMCRUeXBlJywxMDYxKTtZY2IoMTA1Niw3MTksanJlLG1DYik7Xy5QZT1mdW5jdGlvbiBuQ2IoYSl7cmV0dXJuIGxDYih0aGlzLEpEKGEsMTg5KSl9O3ZhciBmTT1qZWIodHRlLCdTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3InLDEwNTYpO1ljYigxMDYwLDEsa3JlLG9DYik7Xy5BZD1mdW5jdGlvbiBwQ2IoYSl7a0NiKHRoaXMuYSx0aGlzLmIsYSl9O3ZhciBlTT1qZWIodHRlLCdTdHJlYW1JbXBsL01hcFRvRG91YmxlU3BsaXRlcmF0b3IvbGFtYmRhJDAkVHlwZScsMTA2MCk7WWNiKDEwNTUsNzE4LGpyZSxzQ2IpO18uUGU9ZnVuY3Rpb24gdENiKGEpe3JldHVybiByQ2IodGhpcyxKRChhLDIwMikpfTt2YXIgaE09amViKHR0ZSwnU3RyZWFtSW1wbC9NYXBUb0ludFNwbGl0ZXJhdG9yJywxMDU1KTtZY2IoMTA1OSwxLGtyZSx1Q2IpO18uQWQ9ZnVuY3Rpb24gdkNiKGEpe3FDYih0aGlzLmEsdGhpcy5iLGEpfTt2YXIgZ009amViKHR0ZSwnU3RyZWFtSW1wbC9NYXBUb0ludFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUnLDEwNTkpO1ljYig3MTcsNDg0LGpyZSx5Q2IpO18uemQ9ZnVuY3Rpb24gekNiKGEpe3JldHVybiB4Q2IodGhpcyxhKX07dmFyIGpNPWplYih0dGUsJ1N0cmVhbUltcGwvTWFwVG9PYmpTcGxpdGVyYXRvcicsNzE3KTtZY2IoMTA1OCwxLGtyZSxBQ2IpO18uQWQ9ZnVuY3Rpb24gQkNiKGEpe3dDYih0aGlzLmEsdGhpcy5iLGEpfTt2YXIgaU09amViKHR0ZSwnU3RyZWFtSW1wbC9NYXBUb09ialNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUnLDEwNTgpO1ljYigxMDU3LDQ4NCxqcmUsQ0NiKTtfLnpkPWZ1bmN0aW9uIERDYihhKXt3aGlsZShBY2IodGhpcy5iLDApKXtpZighdGhpcy5hLnpkKG5ldyBFQ2IpKXtyZXR1cm4gZmFsc2V9dGhpcy5iPU1jYih0aGlzLmIsMSl9cmV0dXJuIHRoaXMuYS56ZChhKX07Xy5iPTA7dmFyIGxNPWplYih0dGUsJ1N0cmVhbUltcGwvU2tpcFNwbGl0ZXJhdG9yJywxMDU3KTtZY2IoMTA2MiwxLGtyZSxFQ2IpO18uQWQ9ZnVuY3Rpb24gRkNiKGEpe307dmFyIGtNPWplYih0dGUsJ1N0cmVhbUltcGwvU2tpcFNwbGl0ZXJhdG9yL2xhbWJkYSQwJFR5cGUnLDEwNjIpO1ljYig2MTEsMSxrcmUsSENiKTtfLkFkPWZ1bmN0aW9uIElDYihhKXtHQ2IodGhpcyxhKX07dmFyIG1NPWplYih0dGUsJ1N0cmVhbUltcGwvVmFsdWVDb25zdW1lcicsNjExKTtZY2IoMTA2MywxLGtyZSxKQ2IpO18uQWQ9ZnVuY3Rpb24gS0NiKGEpe3dCYigpfTt2YXIgbk09amViKHR0ZSwnU3RyZWFtSW1wbC9sYW1iZGEkMCRUeXBlJywxMDYzKTtZY2IoMTA2NCwxLGtyZSxMQ2IpO18uQWQ9ZnVuY3Rpb24gTUNiKGEpe3dCYigpfTt2YXIgb009amViKHR0ZSwnU3RyZWFtSW1wbC9sYW1iZGEkMSRUeXBlJywxMDY0KTtZY2IoMTA2NSwxLHt9LE5DYik7Xy5UZT1mdW5jdGlvbiBPQ2IoYSxiKXtyZXR1cm4gVEJiKHRoaXMuYSxhLGIpfTt2YXIgcE09amViKHR0ZSwnU3RyZWFtSW1wbC9sYW1iZGEkNCRUeXBlJywxMDY1KTtZY2IoMTA2NiwxLGtyZSxQQ2IpO18uQWQ9ZnVuY3Rpb24gUUNiKGEpe1VCYih0aGlzLmIsdGhpcy5hLGEpfTt2YXIgcU09amViKHR0ZSwnU3RyZWFtSW1wbC9sYW1iZGEkNSRUeXBlJywxMDY2KTtZY2IoMTA3MiwxLGtyZSxSQ2IpO18uQWQ9ZnVuY3Rpb24gU0NiKGEpe09BYih0aGlzLmEsSkQoYSwzNzIpKX07dmFyIHVNPWplYih0dGUsJ1Rlcm1pbmF0YWJsZVN0cmVhbS9sYW1iZGEkMCRUeXBlJywxMDcyKTtZY2IoMjA4OCwxLHt9KTtZY2IoMTk2MCwxLHt9LGZEYik7dmFyIHdNPWplYignamF2YWVtdWwuaW50ZXJuYWwnLCdDb25zb2xlTG9nZ2VyJywxOTYwKTt2YXIgaERiPTA7WWNiKDIwODAsMSx7fSk7WWNiKDE3NzYsMSxrcmUsRURiKTtfLkFkPWZ1bmN0aW9uIEZEYihhKXtKRChhLDMxOCl9O3ZhciB4TT1qZWIoQXRlLCdCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQwJFR5cGUnLDE3NzYpO1ljYigxNzc3LDEsa3JlLEdEYik7Xy5BZD1mdW5jdGlvbiBIRGIoYSl7eGUodGhpcy5hLEpEKGEsMzE4KS5lKX07dmFyIHlNPWplYihBdGUsJ0Jvd3llcldhdHNvblRyaWFuZ3VsYXRpb24vbGFtYmRhJDEkVHlwZScsMTc3Nyk7WWNiKDE3NzgsMSxrcmUsSURiKTtfLkFkPWZ1bmN0aW9uIEpEYihhKXtKRChhLDE3Nil9O3ZhciB6TT1qZWIoQXRlLCdCb3d5ZXJXYXRzb25Ucmlhbmd1bGF0aW9uL2xhbWJkYSQyJFR5cGUnLDE3NzgpO1ljYigxNzczLDEsQnRlLE1EYik7Xy5MZT1mdW5jdGlvbiBORGIoYSxiKXtyZXR1cm4gTERiKHRoaXMuYSxKRChhLDE3NiksSkQoYiwxNzYpKX07Xy5GYj1mdW5jdGlvbiBPRGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFBEYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgQU09amViKEF0ZSwnTmFpdmVNaW5TVC9sYW1iZGEkMCRUeXBlJywxNzczKTtZY2IoNDM3LDEse30sUkRiKTt2YXIgQk09amViKEF0ZSwnTm9kZU1pY3JvTGF5b3V0Jyw0MzcpO1ljYigxNzYsMSx7MTc2OjF9LFNEYik7Xy5GYj1mdW5jdGlvbiBURGIoYSl7dmFyIGI7aWYoUkQoYSwxNzYpKXtiPUpEKGEsMTc2KTtyZXR1cm4gdHViKHRoaXMuYSxiLmEpJiZ0dWIodGhpcy5iLGIuYil8fHR1Yih0aGlzLmEsYi5iKSYmdHViKHRoaXMuYixiLmEpfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5IYj1mdW5jdGlvbiBVRGIoKXtyZXR1cm4gdXViKHRoaXMuYSkrdXViKHRoaXMuYil9O3ZhciBDTT1qZWIoQXRlLCdURWRnZScsMTc2KTtZY2IoMzE4LDEsezMxODoxfSxXRGIpO18uRmI9ZnVuY3Rpb24gWERiKGEpe3ZhciBiO2lmKFJEKGEsMzE4KSl7Yj1KRChhLDMxOCk7cmV0dXJuIFZEYih0aGlzLGIuYSkmJlZEYih0aGlzLGIuYikmJlZEYih0aGlzLGIuYyl9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLkhiPWZ1bmN0aW9uIFlEYigpe3JldHVybiB1dWIodGhpcy5hKSt1dWIodGhpcy5iKSt1dWIodGhpcy5jKX07dmFyIERNPWplYihBdGUsJ1RUcmlhbmdsZScsMzE4KTtZY2IoMjI0LDEsezIyNDoxfSxaRGIpO3ZhciBFTT1qZWIoQXRlLCdUcmVlJywyMjQpO1ljYigxMTc4LDEse30sX0RiKTt2YXIgR009amViKEN0ZSwnU2NhbmxpbmUnLDExNzgpO3ZhciBGTT1sZWIoQ3RlLER0ZSk7WWNiKDE3MDQsMSx7fSxjRWIpO3ZhciBITT1qZWIoRXRlLCdDR3JhcGgnLDE3MDQpO1ljYigzMTcsMSx7MzE3OjF9LGVFYik7Xy5iPTA7Xy5jPTA7Xy5kPTA7Xy5nPTA7Xy5pPTA7Xy5rPUxzZTt2YXIgSk09amViKEV0ZSwnQ0dyb3VwJywzMTcpO1ljYig4MDksMSx7fSxpRWIpO3ZhciBJTT1qZWIoRXRlLCdDR3JvdXAvQ0dyb3VwQnVpbGRlcicsODA5KTtZY2IoNjAsMSx7NjA6MX0sakViKTtfLkliPWZ1bmN0aW9uIGtFYigpe3ZhciBhO2lmKHRoaXMuail7cmV0dXJuIE9EKHRoaXMuai5LYih0aGlzKSl9cmV0dXJuIGNlYihMTSksTE0ubysnQCcrKGE9akRiKHRoaXMpPj4+MCxhLnRvU3RyaW5nKDE2KSl9O18uZj0wO18uaT1Mc2U7dmFyIExNPWplYihFdGUsJ0NOb2RlJyw2MCk7WWNiKDgwOCwxLHt9LHBFYik7dmFyIEtNPWplYihFdGUsJ0NOb2RlL0NOb2RlQnVpbGRlcicsODA4KTt2YXIgdUViO1ljYigxNTMwLDEse30sd0ViKTtfLmRmPWZ1bmN0aW9uIHhFYihhLGIpe3JldHVybiAwfTtfLmVmPWZ1bmN0aW9uIHlFYihhLGIpe3JldHVybiAwfTt2YXIgTU09amViKEV0ZSxHdGUsMTUzMCk7WWNiKDE3OTksMSx7fSx6RWIpO18uYWY9ZnVuY3Rpb24gQUViKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtqPUtzZTtmb3IoZD1uZXcgcm1iKGEuYS5iKTtkLmE8ZC5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoZCksNjApO2o9JHduZC5NYXRoLm1pbihqLGIuYS5qLmQuYytiLmIuYSl9bj1uZXcgTXRiO2ZvcihnPW5ldyBybWIoYS5hLmEpO2cuYTxnLmMuYy5sZW5ndGg7KXtmPUpEKHBtYihnKSwzMTcpO2Yuaz1qO2YuZz09MCYmKER0YihuLGYsbi5jLmIsbi5jKSx0cnVlKX13aGlsZShuLmIhPTApe2Y9SkQobi5iPT0wP251bGw6KHJEYihuLmIhPTApLEt0YihuLG4uYS5hKSksMzE3KTtlPWYuai5kLmM7Zm9yKG09Zi5hLmEuZWMoKS5KYygpO20uT2IoKTspe2s9SkQobS5QYigpLDYwKTtwPWYuaytrLmIuYTshS0ViKGEsZixhLmQpfHxrLmQuYzxwPyhrLmk9cCk6KGsuaT1rLmQuYyl9ZS09Zi5qLmk7Zi5iKz1lO2EuZD09KFRnZCgpLFFnZCl8fGEuZD09T2dkPyhmLmMrPWUpOihmLmMtPWUpO2ZvcihsPWYuYS5hLmVjKCkuSmMoKTtsLk9iKCk7KXtrPUpEKGwuUGIoKSw2MCk7Zm9yKGk9ay5jLkpjKCk7aS5PYigpOyl7aD1KRChpLlBiKCksNjApO1VnZChhLmQpPyhvPWEuZy5kZihrLGgpKToobz1hLmcuZWYoayxoKSk7aC5hLms9JHduZC5NYXRoLm1heChoLmEuayxrLmkray5kLmIrby1oLmIuYSk7TEViKGEsaCxhLmQpJiYoaC5hLms9JHduZC5NYXRoLm1heChoLmEuayxoLmQuYy1oLmIuYSkpOy0taC5hLmc7aC5hLmc9PTAmJkF0YihuLGguYSl9fX1mb3IoYz1uZXcgcm1iKGEuYS5iKTtjLmE8Yy5jLmMubGVuZ3RoOyl7Yj1KRChwbWIoYyksNjApO2IuZC5jPWIuaX19O3ZhciBOTT1qZWIoRXRlLCdMb25nZXN0UGF0aENvbXBhY3Rpb24nLDE3OTkpO1ljYigxNzAyLDEse30sVUViKTtfLmU9ZmFsc2U7dmFyIEJFYixDRWIsREViO3ZhciBQTT1qZWIoRXRlLEx0ZSwxNzAyKTtZY2IoMTcwMywxLGtyZSxWRWIpO18uQWQ9ZnVuY3Rpb24gV0ViKGEpe01FYih0aGlzLmEsSkQoYSw0NykpfTt2YXIgT009amViKEV0ZSxNdGUsMTcwMyk7WWNiKDE4MDAsMSx7fSxYRWIpO18uYmY9ZnVuY3Rpb24gWUViKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2ZvcihjPW5ldyBybWIoYS5hLmIpO2MuYTxjLmMuYy5sZW5ndGg7KXtiPUpEKHBtYihjKSw2MCk7Yi5jLiRiKCl9Zm9yKGU9bmV3IHJtYihhLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDYwKTtmb3IoZz1uZXcgcm1iKGEuYS5iKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksNjApO2lmKGQ9PWYpe2NvbnRpbnVlfWlmKCEhZC5hJiZkLmE9PWYuYSl7Y29udGludWV9VWdkKGEuZCk/KGg9YS5nLmVmKGQsZikpOihoPWEuZy5kZihkLGYpKTsoZi5kLmM+ZC5kLmN8fGQuZC5jPT1mLmQuYyYmZC5kLmI8Zi5kLmIpJiZyRWIoZi5kLmQrZi5kLmEraCxkLmQuZCkmJnRFYihmLmQuZCxkLmQuZCtkLmQuYStoKSYmZC5jLkVjKGYpfX19O3ZhciBRTT1qZWIoRXRlLCdRdWFkcmF0aWNDb25zdHJhaW50Q2FsY3VsYXRpb24nLDE4MDApO1ljYig1MTQsMSx7NTE0OjF9LGJGYik7Xy5hPWZhbHNlO18uYj1mYWxzZTtfLmM9ZmFsc2U7Xy5kPWZhbHNlO3ZhciBSTT1qZWIoRXRlLE50ZSw1MTQpO1ljYig3OTcsMSx7fSxlRmIpO18uYmY9ZnVuY3Rpb24gZkZiKGEpe3RoaXMuYz1hO2RGYih0aGlzLG5ldyB3RmIpfTt2YXIgWE09amViKEV0ZSxPdGUsNzk3KTtZY2IoMTczMCwxLHs2Nzg6MX0sa0ZiKTtfLl9lPWZ1bmN0aW9uIGxGYihhKXtoRmIodGhpcyxKRChhLDQ1OSkpfTt2YXIgVE09amViKEV0ZSxQdGUsMTczMCk7WWNiKDE3MzEsMSxCdGUsbkZiKTtfLkxlPWZ1bmN0aW9uIG9GYihhLGIpe3JldHVybiBtRmIoSkQoYSw2MCksSkQoYiw2MCkpfTtfLkZiPWZ1bmN0aW9uIHBGYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gcUZiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBTTT1qZWIoRXRlLFF0ZSwxNzMxKTtZY2IoNDU5LDEsezQ1OToxfSxyRmIpO18uYT1mYWxzZTt2YXIgVU09amViKEV0ZSxSdGUsNDU5KTtZY2IoMTczMiwxLEJ0ZSxzRmIpO18uTGU9ZnVuY3Rpb24gdEZiKGEsYil7cmV0dXJuIGdGYihKRChhLDQ1OSksSkQoYiw0NTkpKX07Xy5GYj1mdW5jdGlvbiB1RmIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIHZGYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgVk09amViKEV0ZSxTdGUsMTczMik7WWNiKDE3MzMsMSxUdGUsd0ZiKTtfLkxiPWZ1bmN0aW9uIHhGYihhKXtyZXR1cm4gSkQoYSw2MCksdHJ1ZX07Xy5GYj1mdW5jdGlvbiB5RmIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIHpGYihhKXtyZXR1cm4gSkQoYSw2MCksdHJ1ZX07dmFyIFdNPWplYihFdGUsJ1NjYW5saW5lQ29uc3RyYWludENhbGN1bGF0b3IvbGFtYmRhJDEkVHlwZScsMTczMyk7WWNiKDIxNiwxLHsyMTY6MX0sQkZiKTtfLkliPWZ1bmN0aW9uIENGYigpe3JldHVybiAnTkVkZ2VbaWQ9Jyt0aGlzLmIrJyB3PScrdGhpcy5nKycgZD0nK3RoaXMuYSsnXSd9O18uYT0xO18uYj0wO18uYz0wO18uZj1mYWxzZTtfLmc9MDt2YXIgWk09amViKFV0ZSwnTkVkZ2UnLDIxNik7WWNiKDE4MiwxLHt9LElGYik7dmFyIFlNPWplYihVdGUsJ05FZGdlL05FZGdlQnVpbGRlcicsMTgyKTtZY2IoNjQ2LDEse30sTkZiKTt2YXIgJE09amViKFV0ZSwnTkdyYXBoJyw2NDYpO1ljYigxMjMsMSx7MTIzOjF9LFBGYik7Xy5jPS0xO18uZD0wO18uZT0wO18uaT0tMTtfLmo9ZmFsc2U7dmFyIGJOPWplYihVdGUsJ05Ob2RlJywxMjMpO1ljYig3ODgsMSwkc2UsU0ZiKTtfLkljPWZ1bmN0aW9uICRGYihhKXtvZmIodGhpcyxhKX07Xy5nZD1mdW5jdGlvbiBqR2IoYSl7aHViKHRoaXMsYSl9O18uTGM9ZnVuY3Rpb24ga0diKCl7cmV0dXJuIG5ldyBHdmIodGhpcywxNil9O18uTWM9ZnVuY3Rpb24gbEdiKCl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgR3ZiKHRoaXMsMTYpKX07Xy5fYz1mdW5jdGlvbiBURmIoYSxiKXsrK3RoaXMuYjtIbGIodGhpcy5hLGEsYil9O18uRWM9ZnVuY3Rpb24gVUZiKGEpe3JldHVybiBRRmIodGhpcyxhKX07Xy5hZD1mdW5jdGlvbiBWRmIoYSxiKXsrK3RoaXMuYjtyZXR1cm4gSmxiKHRoaXMuYSxhLGIpfTtfLkZjPWZ1bmN0aW9uIFdGYihhKXsrK3RoaXMuYjtyZXR1cm4gS2xiKHRoaXMuYSxhKX07Xy4kYj1mdW5jdGlvbiBYRmIoKXsrK3RoaXMuYjtfQ2IodGhpcy5hLmMsMCl9O18uR2M9ZnVuY3Rpb24gWUZiKGEpe3JldHVybiBObGIodGhpcy5hLGEsMCkhPS0xfTtfLkhjPWZ1bmN0aW9uIFpGYihhKXtyZXR1cm4gQWUodGhpcy5hLGEpfTtfLlhiPWZ1bmN0aW9uIF9GYihhKXtyZXR1cm4gTWxiKHRoaXMuYSxhKX07Xy5iZD1mdW5jdGlvbiBhR2IoYSl7cmV0dXJuIE5sYih0aGlzLmEsYSwwKX07Xy5kYz1mdW5jdGlvbiBiR2IoKXtyZXR1cm4gdGhpcy5hLmMubGVuZ3RoPT0wfTtfLkpjPWZ1bmN0aW9uIGNHYigpe3JldHVybiBKcihuZXcgcm1iKHRoaXMuYSkpfTtfLmNkPWZ1bmN0aW9uIGRHYigpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5kZD1mdW5jdGlvbiBlR2IoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLmVkPWZ1bmN0aW9uIGZHYihhKXsrK3RoaXMuYjtyZXR1cm4gT2xiKHRoaXMuYSxhKX07Xy5LYz1mdW5jdGlvbiBnR2IoYSl7cmV0dXJuIFJGYih0aGlzLGEpfTtfLmZkPWZ1bmN0aW9uIGhHYihhLGIpeysrdGhpcy5iO3JldHVybiBSbGIodGhpcy5hLGEsYil9O18uZ2M9ZnVuY3Rpb24gaUdiKCl7cmV0dXJuIHRoaXMuYS5jLmxlbmd0aH07Xy5oZD1mdW5jdGlvbiBtR2IoYSxiKXtyZXR1cm4gbmV3IElqYih0aGlzLmEsYSxiKX07Xy5OYz1mdW5jdGlvbiBuR2IoKXtyZXR1cm4gVENiKHRoaXMuYS5jKX07Xy5PYz1mdW5jdGlvbiBvR2IoYSl7cmV0dXJuIFRsYih0aGlzLmEsYSl9O18uYj0wO3ZhciBfTT1qZWIoVXRlLCdOTm9kZS9DaGFuZ2VBd2FyZUFycmF5TGlzdCcsNzg4KTtZY2IoMjcxLDEse30sckdiKTt2YXIgYU49amViKFV0ZSwnTk5vZGUvTk5vZGVCdWlsZGVyJywyNzEpO1ljYigxNjM2LDEse30sTUdiKTtfLmE9ZmFsc2U7Xy5mPUhxZTtfLmo9MDt2YXIgY049amViKFV0ZSwnTmV0d29ya1NpbXBsZXgnLDE2MzYpO1ljYigxMjY3LDEsa3JlLFNHYik7Xy5BZD1mdW5jdGlvbiBUR2IoYSl7UkdiKHRoaXMuYSxKRChhLDY4MCksdHJ1ZSxmYWxzZSl9O3ZhciBkTj1qZWIoV3RlLCdOb2RlTGFiZWxBbmRTaXplQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlJywxMjY3KTtZY2IoNTUwLDEse30sJEdiKTtfLmI9dHJ1ZTtfLmM9dHJ1ZTtfLmQ9dHJ1ZTtfLmU9dHJ1ZTt2YXIgZU49amViKFd0ZSwnTm9kZU1hcmdpbkNhbGN1bGF0b3InLDU1MCk7WWNiKDIxNSwxLHsyMTU6MX0pO18uaj1mYWxzZTtfLms9ZmFsc2U7dmFyIGdOPWplYihYdGUsJ0NlbGwnLDIxNSk7WWNiKDEyNiwyMTUsezEyNjoxLDIxNToxfSxjSGIpO18uZmY9ZnVuY3Rpb24gZEhiKCl7cmV0dXJuIGJIYih0aGlzKX07Xy5nZj1mdW5jdGlvbiBlSGIoKXt2YXIgYTthPXRoaXMubjtyZXR1cm4gdGhpcy5hLmErYS5iK2EuY307dmFyIGZOPWplYihYdGUsJ0F0b21pY0NlbGwnLDEyNik7WWNiKDIzNiwyMyx7MzoxLDM0OjEsMjM6MSwyMzY6MX0sakhiKTt2YXIgZkhiLGdIYixoSGI7dmFyIGhOPWtlYihYdGUsJ0NvbnRhaW5lckFyZWEnLDIzNixNSSxsSGIsa0hiKTt2YXIgbUhiO1ljYigzMzIsMjE1LFp0ZSk7dmFyIGlOPWplYihYdGUsJ0NvbnRhaW5lckNlbGwnLDMzMik7WWNiKDE0NzgsMzMyLFp0ZSxISGIpO18uZmY9ZnVuY3Rpb24gSUhiKCl7dmFyIGE7YT0wO3RoaXMuZT90aGlzLmI/KGE9dGhpcy5iLmIpOiEhdGhpcy5hWzFdWzFdJiYoYT10aGlzLmFbMV1bMV0uZmYoKSk6KGE9R0hiKHRoaXMsQ0hiKHRoaXMsdHJ1ZSkpKTtyZXR1cm4gYT4wP2ErdGhpcy5uLmQrdGhpcy5uLmE6MH07Xy5nZj1mdW5jdGlvbiBKSGIoKXt2YXIgYSxiLGMsZCxlO2U9MDtpZih0aGlzLmUpe3RoaXMuYj8oZT10aGlzLmIuYSk6ISF0aGlzLmFbMV1bMV0mJihlPXRoaXMuYVsxXVsxXS5nZigpKX1lbHNlIGlmKHRoaXMuZyl7ZT1HSGIodGhpcyxBSGIodGhpcyxudWxsLHRydWUpKX1lbHNle2ZvcihiPShpSGIoKSxXQyhPQyhoTiwxKSxFcmUsMjM2LDAsW2ZIYixnSGIsaEhiXSkpLGM9MCxkPWIubGVuZ3RoO2M8ZDsrK2Mpe2E9YltjXTtlPSR3bmQuTWF0aC5tYXgoZSxHSGIodGhpcyxBSGIodGhpcyxhLHRydWUpKSl9fXJldHVybiBlPjA/ZSt0aGlzLm4uYit0aGlzLm4uYzowfTtfLmhmPWZ1bmN0aW9uIEtIYigpe3ZhciBhLGIsYyxkLGU7aWYodGhpcy5nKXthPUFIYih0aGlzLG51bGwsZmFsc2UpO2ZvcihjPShpSGIoKSxXQyhPQyhoTiwxKSxFcmUsMjM2LDAsW2ZIYixnSGIsaEhiXSkpLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTt5SGIodGhpcyxiLGEpfX1lbHNle2ZvcihjPShpSGIoKSxXQyhPQyhoTiwxKSxFcmUsMjM2LDAsW2ZIYixnSGIsaEhiXSkpLGQ9MCxlPWMubGVuZ3RoO2Q8ZTsrK2Qpe2I9Y1tkXTthPUFIYih0aGlzLGIsZmFsc2UpO3lIYih0aGlzLGIsYSl9fX07Xy5qZj1mdW5jdGlvbiBMSGIoKXt2YXIgYSxiLGMsZDtiPXRoaXMuaTthPXRoaXMubjtkPUNIYih0aGlzLGZhbHNlKTt3SGIodGhpcywoaUhiKCksZkhiKSxiLmQrYS5kLGQpO3dIYih0aGlzLGhIYixiLmQrYi5hLWEuYS1kWzJdLGQpO2M9Yi5hLWEuZC1hLmE7aWYoZFswXT4wKXtkWzBdKz10aGlzLmQ7Yy09ZFswXX1pZihkWzJdPjApe2RbMl0rPXRoaXMuZDtjLT1kWzJdfXRoaXMuYy5hPSR3bmQuTWF0aC5tYXgoMCxjKTt0aGlzLmMuZD1iLmQrYS5kKyh0aGlzLmMuYS1jKS8yO2RbMV09JHduZC5NYXRoLm1heChkWzFdLGMpO3dIYih0aGlzLGdIYixiLmQrYS5kK2RbMF0tKGRbMV0tYykvMixkKX07Xy5iPW51bGw7Xy5kPTA7Xy5lPWZhbHNlO18uZj1mYWxzZTtfLmc9ZmFsc2U7dmFyIHRIYj0wLHVIYj0wO3ZhciBqTj1qZWIoWHRlLCdHcmlkQ29udGFpbmVyQ2VsbCcsMTQ3OCk7WWNiKDQ1NywyMyx7MzoxLDM0OjEsMjM6MSw0NTc6MX0sUUhiKTt2YXIgTUhiLE5IYixPSGI7dmFyIGtOPWtlYihYdGUsJ0hvcml6b250YWxMYWJlbEFsaWdubWVudCcsNDU3LE1JLFNIYixSSGIpO3ZhciBUSGI7WWNiKDMxNSwyMTUsezIxNToxLDMxNToxfSxjSWIsZEliLGVJYik7Xy5mZj1mdW5jdGlvbiBmSWIoKXtyZXR1cm4gJEhiKHRoaXMpfTtfLmdmPWZ1bmN0aW9uIGdJYigpe3JldHVybiBfSGIodGhpcyl9O18uYT0wO18uYz1mYWxzZTt2YXIgbE49amViKFh0ZSwnTGFiZWxDZWxsJywzMTUpO1ljYigyNTEsMzMyLHsyMTU6MSwzMzI6MSwyNTE6MX0sb0liKTtfLmZmPWZ1bmN0aW9uIHBJYigpe3JldHVybiBoSWIodGhpcyl9O18uZ2Y9ZnVuY3Rpb24gcUliKCl7cmV0dXJuIGlJYih0aGlzKX07Xy5oZj1mdW5jdGlvbiB0SWIoKXtqSWIodGhpcyl9O18uamY9ZnVuY3Rpb24gdUliKCl7a0liKHRoaXMpfTtfLmI9MDtfLmM9MDtfLmQ9ZmFsc2U7dmFyIHFOPWplYihYdGUsJ1N0cmlwQ29udGFpbmVyQ2VsbCcsMjUxKTtZY2IoMTYzMiwxLElyZSx2SWIpO18uTWI9ZnVuY3Rpb24gd0liKGEpe3JldHVybiBySWIoSkQoYSwyMTUpKX07dmFyIG1OPWplYihYdGUsJ1N0cmlwQ29udGFpbmVyQ2VsbC9sYW1iZGEkMCRUeXBlJywxNjMyKTtZY2IoMTYzMywxLHt9LHhJYik7Xy5XZT1mdW5jdGlvbiB5SWIoYSl7cmV0dXJuIEpEKGEsMjE1KS5nZigpfTt2YXIgbk49amViKFh0ZSwnU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQxJFR5cGUnLDE2MzMpO1ljYigxNjM0LDEsSXJlLHpJYik7Xy5NYj1mdW5jdGlvbiBBSWIoYSl7cmV0dXJuIHNJYihKRChhLDIxNSkpfTt2YXIgb049amViKFh0ZSwnU3RyaXBDb250YWluZXJDZWxsL2xhbWJkYSQyJFR5cGUnLDE2MzQpO1ljYigxNjM1LDEse30sQkliKTtfLldlPWZ1bmN0aW9uIENJYihhKXtyZXR1cm4gSkQoYSwyMTUpLmZmKCl9O3ZhciBwTj1qZWIoWHRlLCdTdHJpcENvbnRhaW5lckNlbGwvbGFtYmRhJDMkVHlwZScsMTYzNSk7WWNiKDQ1OCwyMyx7MzoxLDM0OjEsMjM6MSw0NTg6MX0sSEliKTt2YXIgREliLEVJYixGSWI7dmFyIHJOPWtlYihYdGUsJ1ZlcnRpY2FsTGFiZWxBbGlnbm1lbnQnLDQ1OCxNSSxKSWIsSUliKTt2YXIgS0liO1ljYig3ODAsMSx7fSxOSWIpO18uYz0wO18uZD0wO18uaz0wO18ucz0wO18udD0wO18udj1mYWxzZTtfLnc9MDtfLkQ9ZmFsc2U7Xy5GPWZhbHNlO3ZhciB1Tj1qZWIoZHVlLCdOb2RlQ29udGV4dCcsNzgwKTtZY2IoMTQ3NiwxLEJ0ZSxRSWIpO18uTGU9ZnVuY3Rpb24gUkliKGEsYil7cmV0dXJuIFBJYihKRChhLDY0KSxKRChiLDY0KSl9O18uRmI9ZnVuY3Rpb24gU0liKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBUSWIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIHNOPWplYihkdWUsJ05vZGVDb250ZXh0LzBtZXRob2RyZWYkY29tcGFyZVBvcnRTaWRlcyRUeXBlJywxNDc2KTtZY2IoMTQ3NywxLEJ0ZSxVSWIpO18uTGU9ZnVuY3Rpb24gVkliKGEsYil7cmV0dXJuIE9JYihKRChhLDExNSksSkQoYiwxMTUpKX07Xy5GYj1mdW5jdGlvbiBXSWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFhJYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgdE49amViKGR1ZSwnTm9kZUNvbnRleHQvMW1ldGhvZHJlZiRjb21wYXJlUG9ydENvbnRleHRzJFR5cGUnLDE0NzcpO1ljYigxNjYsMjMsezM6MSwzNDoxLDIzOjEsMTY2OjF9LHZKYik7dmFyIFlJYixaSWIsJEliLF9JYixhSmIsYkpiLGNKYixkSmIsZUpiLGZKYixnSmIsaEpiLGlKYixqSmIsa0piLGxKYixtSmIsbkpiLG9KYixwSmIscUpiLHJKYjt2YXIgdk49a2ViKGR1ZSwnTm9kZUxhYmVsTG9jYXRpb24nLDE2NixNSSx5SmIseEpiKTt2YXIgekpiO1ljYigxMTUsMSx7MTE1OjF9LENKYik7Xy5hPWZhbHNlO3ZhciB3Tj1qZWIoZHVlLCdQb3J0Q29udGV4dCcsMTE1KTtZY2IoMTQ4MSwxLGtyZSxWSmIpO18uQWQ9ZnVuY3Rpb24gV0piKGEpe1lIYihKRChhLDMxNSkpfTt2YXIgeE49amViKGd1ZSxodWUsMTQ4MSk7WWNiKDE0ODIsMSxJcmUsWEpiKTtfLk1iPWZ1bmN0aW9uIFlKYihhKXtyZXR1cm4gISFKRChhLDExNSkuY307dmFyIHlOPWplYihndWUsaXVlLDE0ODIpO1ljYigxNDgzLDEsa3JlLFpKYik7Xy5BZD1mdW5jdGlvbiAkSmIoYSl7WUhiKEpEKGEsMTE1KS5jKX07dmFyIHpOPWplYihndWUsJ0xhYmVsUGxhY2VyL2xhbWJkYSQyJFR5cGUnLDE0ODMpO3ZhciBfSmI7WWNiKDE0ODAsMSxrcmUsaEtiKTtfLkFkPWZ1bmN0aW9uIGlLYihhKXthS2IoKTtCSmIoSkQoYSwxMTUpKX07dmFyIEFOPWplYihndWUsJ05vZGVMYWJlbEFuZFNpemVVdGlsaXRpZXMvbGFtYmRhJDAkVHlwZScsMTQ4MCk7WWNiKDc4MSwxLGtyZSxvS2IpO18uQWQ9ZnVuY3Rpb24gcEtiKGEpe21LYih0aGlzLmIsdGhpcy5jLHRoaXMuYSxKRChhLDE4NykpfTtfLmE9ZmFsc2U7Xy5jPWZhbHNlO3ZhciBCTj1qZWIoZ3VlLCdOb2RlTGFiZWxDZWxsQ3JlYXRvci9sYW1iZGEkMCRUeXBlJyw3ODEpO1ljYigxNDc5LDEsa3JlLHZLYik7Xy5BZD1mdW5jdGlvbiB3S2IoYSl7dUtiKHRoaXMuYSxKRChhLDE4NykpfTt2YXIgQ049amViKGd1ZSwnUG9ydENvbnRleHRDcmVhdG9yL2xhbWJkYSQwJFR5cGUnLDE0NzkpO3ZhciBES2I7WWNiKDE4NDgsMSx7fSxYS2IpO3ZhciBFTj1qZWIoa3VlLCdHcmVlZHlSZWN0YW5nbGVTdHJpcE92ZXJsYXBSZW1vdmVyJywxODQ4KTtZY2IoMTg0OSwxLEJ0ZSxaS2IpO18uTGU9ZnVuY3Rpb24gJEtiKGEsYil7cmV0dXJuIFlLYihKRChhLDIyNSksSkQoYiwyMjUpKX07Xy5GYj1mdW5jdGlvbiBfS2IoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIGFMYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgRE49amViKGt1ZSwnR3JlZWR5UmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci8wbWV0aG9kcmVmJGNvbXBhcmVCeVlDb29yZGluYXRlJFR5cGUnLDE4NDkpO1ljYigxNzk1LDEse30saExiKTtfLmE9NTtfLmU9MDt2YXIgS049amViKGt1ZSwnUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3ZlcicsMTc5NSk7WWNiKDE3OTYsMSxCdGUsbExiKTtfLkxlPWZ1bmN0aW9uIG1MYihhLGIpe3JldHVybiBpTGIoSkQoYSwyMjUpLEpEKGIsMjI1KSl9O18uRmI9ZnVuY3Rpb24gbkxiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBvTGIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIEZOPWplYihrdWUsJ1JlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMG1ldGhvZHJlZiRjb21wYXJlTGVmdFJlY3RhbmdsZUJvcmRlcnMkVHlwZScsMTc5Nik7WWNiKDE3OTgsMSxCdGUscExiKTtfLkxlPWZ1bmN0aW9uIHFMYihhLGIpe3JldHVybiBqTGIoSkQoYSwyMjUpLEpEKGIsMjI1KSl9O18uRmI9ZnVuY3Rpb24gckxiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBzTGIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIEdOPWplYihrdWUsJ1JlY3RhbmdsZVN0cmlwT3ZlcmxhcFJlbW92ZXIvMW1ldGhvZHJlZiRjb21wYXJlUmlnaHRSZWN0YW5nbGVCb3JkZXJzJFR5cGUnLDE3OTgpO1ljYig0MDYsMjMsezM6MSwzNDoxLDIzOjEsNDA2OjF9LHlMYik7dmFyIHRMYix1TGIsdkxiLHdMYjt2YXIgSE49a2ViKGt1ZSwnUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9PdmVybGFwUmVtb3ZhbERpcmVjdGlvbicsNDA2LE1JLEFMYix6TGIpO3ZhciBCTGI7WWNiKDIyNSwxLHsyMjU6MX0sRExiKTt2YXIgSU49amViKGt1ZSwnUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9SZWN0YW5nbGVOb2RlJywyMjUpO1ljYigxNzk3LDEsa3JlLEVMYik7Xy5BZD1mdW5jdGlvbiBGTGIoYSl7Y0xiKHRoaXMuYSxKRChhLDIyNSkpfTt2YXIgSk49amViKGt1ZSwnUmVjdGFuZ2xlU3RyaXBPdmVybGFwUmVtb3Zlci9sYW1iZGEkMSRUeXBlJywxNzk3KTt2YXIgR0xiPWZhbHNlLEhMYixJTGI7WWNiKDE3NzQsMSxrcmUsUUxiKTtfLkFkPWZ1bmN0aW9uIFJMYihhKXtLTGIoSkQoYSwyMjQpKX07dmFyIExOPWplYihtdWUsJ0RlcHRoRmlyc3RDb21wYWN0aW9uLzBtZXRob2RyZWYkY29tcGFjdFRyZWUkVHlwZScsMTc3NCk7WWNiKDgwNCwxLGtyZSxTTGIpO18uQWQ9ZnVuY3Rpb24gVExiKGEpe05MYih0aGlzLmEsSkQoYSwyMjQpKX07dmFyIE1OPWplYihtdWUsJ0RlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQxJFR5cGUnLDgwNCk7WWNiKDE3NzUsMSxrcmUsVUxiKTtfLkFkPWZ1bmN0aW9uIFZMYihhKXtPTGIodGhpcy5hLHRoaXMuYix0aGlzLmMsSkQoYSwyMjQpKX07dmFyIE5OPWplYihtdWUsJ0RlcHRoRmlyc3RDb21wYWN0aW9uL2xhbWJkYSQyJFR5cGUnLDE3NzUpO3ZhciBXTGIsWExiO1ljYig2OCwxLHs2ODoxfSxiTWIpO3ZhciBPTj1qZWIobXVlLCdOb2RlJyw2OCk7WWNiKDExNzQsMSx7fSxlTWIpO3ZhciBUTj1qZWIobXVlLCdTY2FubGluZU92ZXJsYXBDaGVjaycsMTE3NCk7WWNiKDExNzUsMSx7Njc4OjF9LGlNYik7Xy5fZT1mdW5jdGlvbiBqTWIoYSl7Z01iKHRoaXMsSkQoYSw0MzkpKX07dmFyIFFOPWplYihtdWUsJ1NjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyJywxMTc1KTtZY2IoMTE3NiwxLEJ0ZSxsTWIpO18uTGU9ZnVuY3Rpb24gbU1iKGEsYil7cmV0dXJuIGtNYihKRChhLDY4KSxKRChiLDY4KSl9O18uRmI9ZnVuY3Rpb24gbk1iKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBvTWIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFBOPWplYihtdWUsJ1NjYW5saW5lT3ZlcmxhcENoZWNrL092ZXJsYXBzU2NhbmxpbmVIYW5kbGVyL2xhbWJkYSQwJFR5cGUnLDExNzYpO1ljYig0MzksMSx7NDM5OjF9LHBNYik7Xy5hPWZhbHNlO3ZhciBSTj1qZWIobXVlLCdTY2FubGluZU92ZXJsYXBDaGVjay9UaW1lc3RhbXAnLDQzOSk7WWNiKDExNzcsMSxCdGUscU1iKTtfLkxlPWZ1bmN0aW9uIHJNYihhLGIpe3JldHVybiBmTWIoSkQoYSw0MzkpLEpEKGIsNDM5KSl9O18uRmI9ZnVuY3Rpb24gc01iKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiB0TWIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFNOPWplYihtdWUsJ1NjYW5saW5lT3ZlcmxhcENoZWNrL2xhbWJkYSQwJFR5cGUnLDExNzcpO1ljYig1NDIsMSx7fSx1TWIpO3ZhciBVTj1qZWIoJ29yZy5lY2xpcHNlLmVsay5hbGcuY29tbW9uLnV0aWxzJywnU1ZHSW1hZ2UnLDU0Mik7WWNiKDc0MywxLHt9LENNYik7dmFyIFdOPWplYihwdWUscXVlLDc0Myk7WWNiKDExNTksMSxCdGUsRU1iKTtfLkxlPWZ1bmN0aW9uIEZNYihhLGIpe3JldHVybiBETWIoSkQoYSwyMzQpLEpEKGIsMjM0KSl9O18uRmI9ZnVuY3Rpb24gR01iKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBITWIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFZOPWplYihwdWUscnVlLDExNTkpO1ljYigxMTYwLDEsa3JlLE5NYik7Xy5BZD1mdW5jdGlvbiBPTWIoYSl7TU1iKHRoaXMuYix0aGlzLmEsSkQoYSwyNDkpKX07dmFyIFhOPWplYihwdWUsc3VlLDExNjApO1ljYigyMjIsMSx0dWUpO3ZhciBYMD1qZWIodXVlLCdBYnN0cmFjdExheW91dFByb3ZpZGVyJywyMjIpO1ljYig3MjEsMjIyLHR1ZSxTTWIpO18ua2Y9ZnVuY3Rpb24gVE1iKGEsYil7UE1iKHRoaXMsYSxiKX07dmFyIFlOPWplYihwdWUsJ0ZvcmNlTGF5b3V0UHJvdmlkZXInLDcyMSk7dmFyIE00PWxlYih2dWUsd3VlKTtZY2IoMTQ4LDEsezM6MSwxMDI6MSwxNDg6MX0sJE1iKTtfLm9mPWZ1bmN0aW9uIGNOYihhLGIpe3JldHVybiBZTWIodGhpcyxhLGIpfTtfLmxmPWZ1bmN0aW9uIF9NYigpe3JldHVybiBWTWIodGhpcyl9O18ubWY9ZnVuY3Rpb24gYU5iKGEpe3JldHVybiBXTWIodGhpcyxhKX07Xy5uZj1mdW5jdGlvbiBiTmIoYSl7cmV0dXJuIFhNYih0aGlzLGEpfTt2YXIgTzQ9amViKHZ1ZSwnTWFwUHJvcGVydHlIb2xkZXInLDE0OCk7WWNiKDMxMCwxNDgsezM6MSwzMTA6MSwxMDI6MSwxNDg6MX0pO3ZhciBjTz1qZWIoeHVlLCdGUGFydGljbGUnLDMxMCk7WWNiKDI0OSwzMTAsezM6MSwyNDk6MSwzMTA6MSwxMDI6MSwxNDg6MX0sZU5iKTtfLkliPWZ1bmN0aW9uIGZOYigpe3ZhciBhO2lmKHRoaXMuYSl7YT1ObGIodGhpcy5hLmEsdGhpcywwKTtyZXR1cm4gYT49MD8nYicrYSsnWycrbE5iKHRoaXMuYSkrJ10nOidiWycrbE5iKHRoaXMuYSkrJ10nfXJldHVybiAnYl8nK2pEYih0aGlzKX07dmFyIFpOPWplYih4dWUsJ0ZCZW5kcG9pbnQnLDI0OSk7WWNiKDI4OCwxNDgsezM6MSwyODg6MSwxMDI6MSwxNDg6MX0sbU5iKTtfLkliPWZ1bmN0aW9uIG5OYigpe3JldHVybiBsTmIodGhpcyl9O3ZhciAkTj1qZWIoeHVlLCdGRWRnZScsMjg4KTtZY2IoMjM0LDE0OCx7MzoxLDIzNDoxLDEwMjoxLDE0ODoxfSxxTmIpO3ZhciBfTj1qZWIoeHVlLCdGR3JhcGgnLDIzNCk7WWNiKDQ0MiwzMTAsezM6MSw0NDI6MSwzMTA6MSwxMDI6MSwxNDg6MX0sc05iKTtfLkliPWZ1bmN0aW9uIHROYigpe3JldHVybiB0aGlzLmI9PW51bGx8fHRoaXMuYi5sZW5ndGg9PTA/J2xbJytsTmIodGhpcy5hKSsnXSc6J2xfJyt0aGlzLmJ9O3ZhciBhTz1qZWIoeHVlLCdGTGFiZWwnLDQ0Mik7WWNiKDE1MSwzMTAsezM6MSwxNTE6MSwzMTA6MSwxMDI6MSwxNDg6MX0sdk5iKTtfLkliPWZ1bmN0aW9uIHdOYigpe3JldHVybiB1TmIodGhpcyl9O18uYT0wO3ZhciBiTz1qZWIoeHVlLCdGTm9kZScsMTUxKTtZY2IoMjA0NiwxLHt9KTtfLnFmPWZ1bmN0aW9uIEJOYihhKXt4TmIodGhpcyxhKX07Xy5yZj1mdW5jdGlvbiBDTmIoKXt5TmIodGhpcyl9O18uZD0wO3ZhciBkTz1qZWIoenVlLCdBYnN0cmFjdEZvcmNlTW9kZWwnLDIwNDYpO1ljYig2MjYsMjA0Nix7NjI2OjF9LEROYik7Xy5wZj1mdW5jdGlvbiBGTmIoYSxiKXt2YXIgYyxkLGUsZixnO0FOYih0aGlzLmYsYSxiKTtlPUJkZChvZGQoYi5kKSxhLmQpO2c9JHduZC5NYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKTtkPSR3bmQuTWF0aC5tYXgoMCxnLXNkZChhLmUpLzItc2RkKGIuZSkvMik7Yz1wTmIodGhpcy5lLGEsYik7Yz4wPyhmPS1FTmIoZCx0aGlzLmMpKmMpOihmPUlOYihkLHRoaXMuYikqSkQoV01iKGEsKElPYigpLHZPYikpLDE3KS5hKTtlLmEqPWYvZztlLmIqPWYvZztyZXR1cm4gZX07Xy5xZj1mdW5jdGlvbiBHTmIoYSl7eE5iKHRoaXMsYSk7dGhpcy5hPUpEKFdNYihhLChJT2IoKSxrT2IpKSwxNykuYTt0aGlzLmM9QmViKE1EKFdNYihhLEJPYikpKTt0aGlzLmI9QmViKE1EKFdNYihhLHhPYikpKX07Xy5zZj1mdW5jdGlvbiBITmIoYSl7cmV0dXJuIGE8dGhpcy5hfTtfLmE9MDtfLmI9MDtfLmM9MDt2YXIgZU89amViKHp1ZSwnRWFkZXNNb2RlbCcsNjI2KTtZY2IoNjI3LDIwNDYsezYyNzoxfSxKTmIpO18ucGY9ZnVuY3Rpb24gTE5iKGEsYil7dmFyIGMsZCxlLGYsZztBTmIodGhpcy5mLGEsYik7ZT1CZGQob2RkKGIuZCksYS5kKTtnPSR3bmQuTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYik7ZD0kd25kLk1hdGgubWF4KDAsZy1zZGQoYS5lKS8yLXNkZChiLmUpLzIpO2Y9UE5iKGQsdGhpcy5hKSpKRChXTWIoYSwoSU9iKCksdk9iKSksMTcpLmE7Yz1wTmIodGhpcy5lLGEsYik7Yz4wJiYoZi09S05iKGQsdGhpcy5hKSpjKTt3ZGQoZSxmKnRoaXMuYi9nKTtyZXR1cm4gZX07Xy5xZj1mdW5jdGlvbiBNTmIoYSl7dmFyIGIsYyxkLGUsZixnLGg7eE5iKHRoaXMsYSk7dGhpcy5iPUJlYihNRChXTWIoYSwoSU9iKCksQ09iKSkpKTt0aGlzLmM9dGhpcy5iL0pEKFdNYihhLGtPYiksMTcpLmE7ZD1hLmUuYy5sZW5ndGg7Zj0wO2U9MDtmb3IoaD1uZXcgcm1iKGEuZSk7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDE1MSk7Zis9Zy5lLmE7ZSs9Zy5lLmJ9Yj1mKmU7Yz1CZWIoTUQoV01iKGEsQk9iKSkpKmZ1ZTt0aGlzLmE9JHduZC5NYXRoLnNxcnQoYi8oMipkKSkqY307Xy5yZj1mdW5jdGlvbiBOTmIoKXt5TmIodGhpcyk7dGhpcy5iLT10aGlzLmN9O18uc2Y9ZnVuY3Rpb24gT05iKGEpe3JldHVybiB0aGlzLmI+MH07Xy5hPTA7Xy5iPTA7Xy5jPTA7dmFyIGZPPWplYih6dWUsJ0ZydWNodGVybWFuUmVpbmdvbGRNb2RlbCcsNjI3KTt2YXIgcjE9bGViKEF1ZSwnSUxheW91dE1ldGFEYXRhUHJvdmlkZXInKTtZY2IoODM5LDEsSHVlLFpOYik7Xy50Zj1mdW5jdGlvbiAkTmIoYSl7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsQnVlKSwnJyksJ0ZvcmNlIE1vZGVsJyksJ0RldGVybWluZXMgdGhlIG1vZGVsIGZvciBmb3JjZSBjYWxjdWxhdGlvbi4nKSxTTmIpLCh6Y2QoKSx0Y2QpKSxoTyksbXJiKChsY2QoKSxqY2QpKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxDdWUpLCcnKSwnSXRlcmF0aW9ucycpLCdUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgb24gdGhlIGZvcmNlIG1vZGVsLicpLGpmYigzMDApKSx2Y2QpLFVJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxEdWUpLCcnKSwnUmVwdWxzaXZlIFBvd2VyJyksJ0RldGVybWluZXMgaG93IG1hbnkgYmVuZCBwb2ludHMgYXJlIGFkZGVkIHRvIHRoZSBlZGdlOyBzdWNoIGJlbmQgcG9pbnRzIGFyZSByZWdhcmRlZCBhcyByZXBlbGxpbmcgcGFydGljbGVzIGluIHRoZSBmb3JjZSBtb2RlbCcpLGpmYigwKSksdmNkKSxVSSksbXJiKGdjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsRXVlKSwnJyksJ0ZSIFRlbXBlcmF0dXJlJyksJ1RoZSB0ZW1wZXJhdHVyZSBpcyB1c2VkIGFzIGEgc2NhbGluZyBmYWN0b3IgZm9yIHBhcnRpY2xlIGRpc3BsYWNlbWVudHMuJyksRnVlKSxzY2QpLExJKSxtcmIoamNkKSkpKTtPYWQoYSxFdWUsQnVlLFhOYik7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsR3VlKSwnJyksJ0VhZGVzIFJlcHVsc2lvbicpLCJGYWN0b3IgZm9yIHJlcHVsc2l2ZSBmb3JjZXMgaW4gRWFkZXMnIG1vZGVsLiIpLDUpLHNjZCksTEkpLG1yYihqY2QpKSkpO09hZChhLEd1ZSxCdWUsVU5iKTtKT2IoKG5ldyBLT2IsYSkpfTt2YXIgUU5iLFJOYixTTmIsVE5iLFVOYixWTmIsV05iLFhOYjt2YXIgZ089amViKEl1ZSwnRm9yY2VNZXRhRGF0YVByb3ZpZGVyJyw4MzkpO1ljYig0MjEsMjMsezM6MSwzNDoxLDIzOjEsNDIxOjF9LGNPYik7dmFyIF9OYixhT2I7dmFyIGhPPWtlYihJdWUsJ0ZvcmNlTW9kZWxTdHJhdGVneScsNDIxLE1JLGVPYixkT2IpO3ZhciBmT2I7WWNiKDk3NywxLEh1ZSxLT2IpO18udGY9ZnVuY3Rpb24gTE9iKGEpe0pPYihhKX07dmFyIGhPYixpT2Isak9iLGtPYixsT2IsbU9iLG5PYixvT2IscE9iLHFPYixyT2Isc09iLHRPYix1T2Isdk9iLHdPYix4T2IseU9iLHpPYixBT2IsQk9iLENPYixET2IsRU9iLEZPYixHT2IsSE9iO3ZhciBqTz1qZWIoSXVlLCdGb3JjZU9wdGlvbnMnLDk3Nyk7WWNiKDk3OCwxLHt9LE1PYik7Xy51Zj1mdW5jdGlvbiBOT2IoKXt2YXIgYTtyZXR1cm4gYT1uZXcgU01iLGF9O18udmY9ZnVuY3Rpb24gT09iKGEpe307dmFyIGlPPWplYihJdWUsJ0ZvcmNlT3B0aW9ucy9Gb3JjZUZhY3RvcnknLDk3OCk7dmFyIFBPYixRT2IsUk9iLFNPYjtZY2IoODQwLDEsSHVlLF9PYik7Xy50Zj1mdW5jdGlvbiBhUGIoYSl7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsaXZlKSwnJyksJ0ZpeGVkIFBvc2l0aW9uJyksJ1ByZXZlbnQgdGhhdCB0aGUgbm9kZSBpcyBtb3ZlZCBieSB0aGUgbGF5b3V0IGFsZ29yaXRobS4nKSwoeGRiKCksZmFsc2UpKSwoemNkKCkscmNkKSksR0kpLG1yYigobGNkKCksaWNkKSkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsanZlKSwnJyksJ0Rlc2lyZWQgRWRnZSBMZW5ndGgnKSwnRWl0aGVyIHNwZWNpZmllZCBmb3IgcGFyZW50IG5vZGVzIG9yIGZvciBpbmRpdmlkdWFsIGVkZ2VzLCB3aGVyZSB0aGUgbGF0dGVyIHRha2VzIGhpZ2hlciBwcmVjZWRlbmNlLicpLDEwMCksc2NkKSxMSSksbnJiKGpjZCxXQyhPQyhWMSwxKSxFcmUsMTcwLDAsW2djZF0pKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxrdmUpLCcnKSwnTGF5b3V0IERpbWVuc2lvbicpLCdEaW1lbnNpb25zIHRoYXQgYXJlIHBlcm1pdHRlZCB0byBiZSBhbHRlcmVkIGR1cmluZyBsYXlvdXQuJyksV09iKSx0Y2QpLHBPKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxsdmUpLCcnKSwnU3RyZXNzIEVwc2lsb24nKSwnVGVybWluYXRpb24gY3JpdGVyaW9uIGZvciB0aGUgaXRlcmF0aXZlIHByb2Nlc3MuJyksRnVlKSxzY2QpLExJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxtdmUpLCcnKSwnSXRlcmF0aW9uIExpbWl0JyksIk1heGltdW0gbnVtYmVyIG9mIHBlcmZvcm1lZCBpdGVyYXRpb25zLiBUYWtlcyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuICdlcHNpbG9uJy4iKSxqZmIoSHFlKSksdmNkKSxVSSksbXJiKGpjZCkpKSk7b1BiKChuZXcgcFBiLGEpKX07dmFyIFVPYixWT2IsV09iLFhPYixZT2IsWk9iO3ZhciBrTz1qZWIoSXVlLCdTdHJlc3NNZXRhRGF0YVByb3ZpZGVyJyw4NDApO1ljYig5ODEsMSxIdWUscFBiKTtfLnRmPWZ1bmN0aW9uIHFQYihhKXtvUGIoYSl9O3ZhciBiUGIsY1BiLGRQYixlUGIsZlBiLGdQYixoUGIsaVBiLGpQYixrUGIsbFBiLG1QYjt2YXIgbU89amViKEl1ZSwnU3RyZXNzT3B0aW9ucycsOTgxKTtZY2IoOTgyLDEse30sclBiKTtfLnVmPWZ1bmN0aW9uIHNQYigpe3ZhciBhO3JldHVybiBhPW5ldyB1UGIsYX07Xy52Zj1mdW5jdGlvbiB0UGIoYSl7fTt2YXIgbE89amViKEl1ZSwnU3RyZXNzT3B0aW9ucy9TdHJlc3NGYWN0b3J5Jyw5ODIpO1ljYigxMDc1LDIyMix0dWUsdVBiKTtfLmtmPWZ1bmN0aW9uIHZQYihhLGIpe3ZhciBjLGQsZSxmLGc7Yi5TZyhvdmUsMSk7eWRiKExEKGtzZChhLChuUGIoKSxmUGIpKSkpP3lkYihMRChrc2QoYSxsUGIpKSl8fFFEYigoYz1uZXcgUkRiKChSb2QoKSxuZXcgZHBkKGEpKSksYykpOlBNYihuZXcgU01iLGEsYi5iaCgxKSk7ZT1KTWIoYSk7ZD1CTWIodGhpcy5hLGUpO2ZvcihnPWQuSmMoKTtnLk9iKCk7KXtmPUpEKGcuUGIoKSwyMzQpO2lmKGYuZS5jLmxlbmd0aDw9MSl7Y29udGludWV9RVBiKHRoaXMuYixmKTtDUGIodGhpcy5iKTtMbGIoZi5kLG5ldyB3UGIpfWU9QU1iKGQpO0lNYihlKTtiLlRnKCl9O3ZhciBvTz1qZWIocXZlLCdTdHJlc3NMYXlvdXRQcm92aWRlcicsMTA3NSk7WWNiKDEwNzYsMSxrcmUsd1BiKTtfLkFkPWZ1bmN0aW9uIHhQYihhKXtyTmIoSkQoYSw0NDIpKX07dmFyIG5PPWplYihxdmUsJ1N0cmVzc0xheW91dFByb3ZpZGVyL2xhbWJkYSQwJFR5cGUnLDEwNzYpO1ljYig5NzksMSx7fSxGUGIpO18uYz0wO18uZT0wO18uZz0wO3ZhciByTz1qZWIocXZlLCdTdHJlc3NNYWpvcml6YXRpb24nLDk3OSk7WWNiKDM4MiwyMyx7MzoxLDM0OjEsMjM6MSwzODI6MX0sTFBiKTt2YXIgSFBiLElQYixKUGI7dmFyIHBPPWtlYihxdmUsJ1N0cmVzc01ham9yaXphdGlvbi9EaW1lbnNpb24nLDM4MixNSSxOUGIsTVBiKTt2YXIgT1BiO1ljYig5ODAsMSxCdGUsUVBiKTtfLkxlPWZ1bmN0aW9uIFJQYihhLGIpe3JldHVybiBHUGIodGhpcy5hLEpEKGEsMTUxKSxKRChiLDE1MSkpfTtfLkZiPWZ1bmN0aW9uIFNQYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gVFBiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBxTz1qZWIocXZlLCdTdHJlc3NNYWpvcml6YXRpb24vbGFtYmRhJDAkVHlwZScsOTgwKTtZY2IoMTE1NiwxLHt9LF9QYik7dmFyIHVPPWplYihzdmUsJ0Vsa0xheWVyZWQnLDExNTYpO1ljYigxMTU3LDEsa3JlLGNRYik7Xy5BZD1mdW5jdGlvbiBkUWIoYSl7YVFiKHRoaXMuYSxKRChhLDM2KSl9O3ZhciBzTz1qZWIoc3ZlLCdFbGtMYXllcmVkL2xhbWJkYSQwJFR5cGUnLDExNTcpO1ljYigxMTU4LDEsa3JlLGVRYik7Xy5BZD1mdW5jdGlvbiBmUWIoYSl7YlFiKHRoaXMuYSxKRChhLDM2KSl9O3ZhciB0Tz1qZWIoc3ZlLCdFbGtMYXllcmVkL2xhbWJkYSQxJFR5cGUnLDExNTgpO1ljYigxMjQxLDEse30sblFiKTt2YXIgZ1FiLGhRYixpUWI7dmFyIHlPPWplYihzdmUsJ0dyYXBoQ29uZmlndXJhdG9yJywxMjQxKTtZY2IoNzUyLDEsa3JlLHBRYik7Xy5BZD1mdW5jdGlvbiBxUWIoYSl7a1FiKHRoaXMuYSxKRChhLDkpKX07dmFyIHZPPWplYihzdmUsJ0dyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQwJFR5cGUnLDc1Mik7WWNiKDc1MywxLHt9LHJRYik7Xy5LYj1mdW5jdGlvbiBzUWIoYSl7cmV0dXJuIGpRYigpLG5ldyBSQmIobnVsbCxuZXcgR3ZiKEpEKGEsMjUpLmEsMTYpKX07dmFyIHdPPWplYihzdmUsJ0dyYXBoQ29uZmlndXJhdG9yL2xhbWJkYSQxJFR5cGUnLDc1Myk7WWNiKDc1NCwxLGtyZSx0UWIpO18uQWQ9ZnVuY3Rpb24gdVFiKGEpe2tRYih0aGlzLmEsSkQoYSw5KSl9O3ZhciB4Tz1qZWIoc3ZlLCdHcmFwaENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlJyw3NTQpO1ljYigxMDc0LDIyMix0dWUsdlFiKTtfLmtmPWZ1bmN0aW9uIHdRYihhLGIpe3ZhciBjO2M9byRiKG5ldyB3JGIsYSk7WEQoa3NkKGEsKEJ3YygpLEl1YykpKT09PVhEKChlaWQoKSxiaWQpKT9WUGIodGhpcy5hLGMsYik6V1BiKHRoaXMuYSxjLGIpO2IuWWcoKXx8ViRiKG5ldyBaJGIsYyl9O3ZhciB6Tz1qZWIoc3ZlLCdMYXllcmVkTGF5b3V0UHJvdmlkZXInLDEwNzQpO1ljYigzNjAsMjMsezM6MSwzNDoxLDIzOjEsMzYwOjF9LERRYik7dmFyIHhRYix5UWIselFiLEFRYixCUWI7dmFyIEFPPWtlYihzdmUsJ0xheWVyZWRQaGFzZXMnLDM2MCxNSSxGUWIsRVFiKTt2YXIgR1FiO1ljYigxNjU5LDEse30sT1FiKTtfLmk9MDt2YXIgSVFiO3ZhciBETz1qZWIodHZlLCdDb21wb25lbnRzVG9DR3JhcGhUcmFuc2Zvcm1lcicsMTY1OSk7dmFyIHRSYjtZY2IoMTY2MCwxLHt9LFBRYik7Xy53Zj1mdW5jdGlvbiBRUWIoYSxiKXtyZXR1cm4gJHduZC5NYXRoLm1pbihhLmEhPW51bGw/QmViKGEuYSk6YS5jLmksYi5hIT1udWxsP0JlYihiLmEpOmIuYy5pKX07Xy54Zj1mdW5jdGlvbiBSUWIoYSxiKXtyZXR1cm4gJHduZC5NYXRoLm1pbihhLmEhPW51bGw/QmViKGEuYSk6YS5jLmksYi5hIT1udWxsP0JlYihiLmEpOmIuYy5pKX07dmFyIEJPPWplYih0dmUsJ0NvbXBvbmVudHNUb0NHcmFwaFRyYW5zZm9ybWVyLzEnLDE2NjApO1ljYig4MiwxLHs4MjoxfSk7Xy5pPTA7Xy5rPXRydWU7Xy5vPUxzZTt2YXIgSk89amViKHV2ZSwnQ05vZGUnLDgyKTtZY2IoNDU2LDgyLHs0NTY6MSw4MjoxfSxTUWIsVFFiKTtfLkliPWZ1bmN0aW9uIFVRYigpe3JldHVybiAnJ307dmFyIENPPWplYih0dmUsJ0NvbXBvbmVudHNUb0NHcmFwaFRyYW5zZm9ybWVyL0NSZWN0Tm9kZScsNDU2KTtZY2IoMTYyOSwxLHt9LGZSYik7dmFyIFZRYixXUWI7dmFyIEdPPWplYih0dmUsJ09uZURpbWVuc2lvbmFsQ29tcG9uZW50c0NvbXBhY3Rpb24nLDE2MjkpO1ljYigxNjMwLDEse30saVJiKTtfLktiPWZ1bmN0aW9uIGpSYihhKXtyZXR1cm4gZ1JiKEpEKGEsNDcpKX07Xy5GYj1mdW5jdGlvbiBrUmIoYSl7cmV0dXJuIHRoaXM9PT1hfTt2YXIgRU89amViKHR2ZSwnT25lRGltZW5zaW9uYWxDb21wb25lbnRzQ29tcGFjdGlvbi9sYW1iZGEkMCRUeXBlJywxNjMwKTtZY2IoMTYzMSwxLHt9LGxSYik7Xy5LYj1mdW5jdGlvbiBtUmIoYSl7cmV0dXJuIGhSYihKRChhLDQ3KSl9O18uRmI9ZnVuY3Rpb24gblJiKGEpe3JldHVybiB0aGlzPT09YX07dmFyIEZPPWplYih0dmUsJ09uZURpbWVuc2lvbmFsQ29tcG9uZW50c0NvbXBhY3Rpb24vbGFtYmRhJDEkVHlwZScsMTYzMSk7WWNiKDE2NjIsMSx7fSxwUmIpO3ZhciBITz1qZWIodXZlLCdDR3JhcGgnLDE2NjIpO1ljYigxOTQsMSx7MTk0OjF9LHNSYik7Xy5iPTA7Xy5jPTA7Xy5lPTA7Xy5nPXRydWU7Xy5pPUxzZTt2YXIgSU89amViKHV2ZSwnQ0dyb3VwJywxOTQpO1ljYigxNjYxLDEse30sdlJiKTtfLndmPWZ1bmN0aW9uIHdSYihhLGIpe3JldHVybiAkd25kLk1hdGgubWF4KGEuYSE9bnVsbD9CZWIoYS5hKTphLmMuaSxiLmEhPW51bGw/QmViKGIuYSk6Yi5jLmkpfTtfLnhmPWZ1bmN0aW9uIHhSYihhLGIpe3JldHVybiAkd25kLk1hdGgubWF4KGEuYSE9bnVsbD9CZWIoYS5hKTphLmMuaSxiLmEhPW51bGw/QmViKGIuYSk6Yi5jLmkpfTt2YXIgS089amViKHV2ZSxHdGUsMTY2MSk7WWNiKDE2NjMsMSx7fSxPUmIpO18uZD1mYWxzZTt2YXIgeVJiO3ZhciBNTz1qZWIodXZlLEx0ZSwxNjYzKTtZY2IoMTY2NCwxLHt9LFBSYik7Xy5LYj1mdW5jdGlvbiBRUmIoYSl7cmV0dXJuIHpSYigpLHhkYigpLEpEKEpEKGEsNDcpLmEsODIpLmQuZSE9MD90cnVlOmZhbHNlfTtfLkZiPWZ1bmN0aW9uIFJSYihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBMTz1qZWIodXZlLE10ZSwxNjY0KTtZY2IoODEyLDEse30sVVJiKTtfLmE9ZmFsc2U7Xy5iPWZhbHNlO18uYz1mYWxzZTtfLmQ9ZmFsc2U7dmFyIE5PPWplYih1dmUsTnRlLDgxMik7WWNiKDE4NDQsMSx7fSwkUmIpO3ZhciBTTz1qZWIodnZlLE90ZSwxODQ0KTt2YXIgY1A9bGViKHd2ZSxEdGUpO1ljYigxODQ1LDEsezM3NDoxfSxjU2IpO18uX2U9ZnVuY3Rpb24gZFNiKGEpe2FTYih0aGlzLEpEKGEsNDYyKSl9O3ZhciBQTz1qZWIodnZlLFB0ZSwxODQ1KTtZY2IoMTg0NiwxLEJ0ZSxmU2IpO18uTGU9ZnVuY3Rpb24gZ1NiKGEsYil7cmV0dXJuIGVTYihKRChhLDgyKSxKRChiLDgyKSl9O18uRmI9ZnVuY3Rpb24gaFNiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBpU2IoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIE9PPWplYih2dmUsUXRlLDE4NDYpO1ljYig0NjIsMSx7NDYyOjF9LGpTYik7Xy5hPWZhbHNlO3ZhciBRTz1qZWIodnZlLFJ0ZSw0NjIpO1ljYigxODQ3LDEsQnRlLGtTYik7Xy5MZT1mdW5jdGlvbiBsU2IoYSxiKXtyZXR1cm4gX1JiKEpEKGEsNDYyKSxKRChiLDQ2MikpfTtfLkZiPWZ1bmN0aW9uIG1TYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gblNiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBSTz1qZWIodnZlLFN0ZSwxODQ3KTtZY2IoMTQzLDEsezE0MzoxfSxvU2IscFNiKTtfLkZiPWZ1bmN0aW9uIHFTYihhKXt2YXIgYjtpZihhPT1udWxsKXtyZXR1cm4gZmFsc2V9aWYoVU8hPXJiKGEpKXtyZXR1cm4gZmFsc2V9Yj1KRChhLDE0Myk7cmV0dXJuIHR1Yih0aGlzLmMsYi5jKSYmdHViKHRoaXMuZCxiLmQpfTtfLkhiPWZ1bmN0aW9uIHJTYigpe3JldHVybiBLbWIoV0MoT0MoYUosMSksTnFlLDEsNSxbdGhpcy5jLHRoaXMuZF0pKX07Xy5JYj1mdW5jdGlvbiBzU2IoKXtyZXR1cm4gJygnK3RoaXMuYytMcWUrdGhpcy5kKyh0aGlzLmE/J2N4JzonJykrdGhpcy5iKycpJ307Xy5hPXRydWU7Xy5jPTA7Xy5kPTA7dmFyIFVPPWplYih3dmUsJ1BvaW50JywxNDMpO1ljYig0MDUsMjMsezM6MSwzNDoxLDIzOjEsNDA1OjF9LEFTYik7dmFyIHRTYix1U2IsdlNiLHdTYjt2YXIgVE89a2ViKHd2ZSwnUG9pbnQvUXVhZHJhbnQnLDQwNSxNSSxFU2IsRFNiKTt2YXIgRlNiO1ljYigxNjUwLDEse30sT1NiKTtfLmI9bnVsbDtfLmM9bnVsbDtfLmQ9bnVsbDtfLmU9bnVsbDtfLmY9bnVsbDt2YXIgSFNiLElTYixKU2IsS1NiLExTYjt2YXIgYlA9amViKHd2ZSwnUmVjdGlsaW5lYXJDb252ZXhIdWxsJywxNjUwKTtZY2IoNTY1LDEsezM3NDoxfSxaU2IpO18uX2U9ZnVuY3Rpb24gJFNiKGEpe1lTYih0aGlzLEpEKGEsMTQzKSl9O18uYj0wO3ZhciBXU2I7dmFyIFdPPWplYih3dmUsJ1JlY3RpbGluZWFyQ29udmV4SHVsbC9NYXhpbWFsRWxlbWVudHNFdmVudEhhbmRsZXInLDU2NSk7WWNiKDE2NTIsMSxCdGUsYVRiKTtfLkxlPWZ1bmN0aW9uIGJUYihhLGIpe3JldHVybiBfU2IoTUQoYSksTUQoYikpfTtfLkZiPWZ1bmN0aW9uIGNUYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gZFRiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBWTz1qZWIod3ZlLCdSZWN0aWxpbmVhckNvbnZleEh1bGwvTWF4aW1hbEVsZW1lbnRzRXZlbnRIYW5kbGVyL2xhbWJkYSQwJFR5cGUnLDE2NTIpO1ljYigxNjUxLDEsezM3NDoxfSxmVGIpO18uX2U9ZnVuY3Rpb24gZ1RiKGEpe2VUYih0aGlzLEpEKGEsMTQzKSl9O18uYT0wO18uYj1udWxsO18uYz1udWxsO18uZD1udWxsO18uZT1udWxsO3ZhciBYTz1qZWIod3ZlLCdSZWN0aWxpbmVhckNvbnZleEh1bGwvUmVjdGFuZ2xlRXZlbnRIYW5kbGVyJywxNjUxKTtZY2IoMTY1MywxLEJ0ZSxoVGIpO18uTGU9ZnVuY3Rpb24gaVRiKGEsYil7cmV0dXJuIFFTYihKRChhLDE0MyksSkQoYiwxNDMpKX07Xy5GYj1mdW5jdGlvbiBqVGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIGtUYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgWU89amViKHd2ZSwnUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQwJFR5cGUnLDE2NTMpO1ljYigxNjU0LDEsQnRlLGxUYik7Xy5MZT1mdW5jdGlvbiBtVGIoYSxiKXtyZXR1cm4gUlNiKEpEKGEsMTQzKSxKRChiLDE0MykpfTtfLkZiPWZ1bmN0aW9uIG5UYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gb1RiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBaTz1qZWIod3ZlLCdSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDEkVHlwZScsMTY1NCk7WWNiKDE2NTUsMSxCdGUscFRiKTtfLkxlPWZ1bmN0aW9uIHFUYihhLGIpe3JldHVybiBTU2IoSkQoYSwxNDMpLEpEKGIsMTQzKSl9O18uRmI9ZnVuY3Rpb24gclRiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBzVGIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyICRPPWplYih3dmUsJ1JlY3RpbGluZWFyQ29udmV4SHVsbC9sYW1iZGEkMiRUeXBlJywxNjU1KTtZY2IoMTY1NiwxLEJ0ZSx0VGIpO18uTGU9ZnVuY3Rpb24gdVRiKGEsYil7cmV0dXJuIFRTYihKRChhLDE0MyksSkQoYiwxNDMpKX07Xy5GYj1mdW5jdGlvbiB2VGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIHdUYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgX089amViKHd2ZSwnUmVjdGlsaW5lYXJDb252ZXhIdWxsL2xhbWJkYSQzJFR5cGUnLDE2NTYpO1ljYigxNjU3LDEsQnRlLHhUYik7Xy5MZT1mdW5jdGlvbiB5VGIoYSxiKXtyZXR1cm4gVVNiKEpEKGEsMTQzKSxKRChiLDE0MykpfTtfLkZiPWZ1bmN0aW9uIHpUYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gQVRiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBhUD1qZWIod3ZlLCdSZWN0aWxpbmVhckNvbnZleEh1bGwvbGFtYmRhJDQkVHlwZScsMTY1Nyk7WWNiKDE2NTgsMSx7fSxDVGIpO3ZhciBkUD1qZWIod3ZlLCdTY2FubGluZScsMTY1OCk7WWNiKDIwNTAsMSx7fSk7dmFyIGVQPWplYih4dmUsJ0Fic3RyYWN0R3JhcGhQbGFjZXInLDIwNTApO1ljYigzMzEsMSx7MzMxOjF9LE1UYik7Xy5EZj1mdW5jdGlvbiBOVGIoYSl7aWYodGhpcy5FZihhKSl7UmModGhpcy5iLEpEKFdNYihhLChJcWMoKSxRcGMpKSwyMiksYSk7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLkVmPWZ1bmN0aW9uIE9UYihhKXt2YXIgYixjLGQsZTtiPUpEKFdNYihhLChJcWMoKSxRcGMpKSwyMik7ZT1KRChRYyhJVGIsYiksMjIpO2ZvcihkPWUuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSwyMik7aWYoIUpEKFFjKHRoaXMuYixjKSwxNSkuZGMoKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX07dmFyIElUYjt2YXIgaFA9amViKHh2ZSwnQ29tcG9uZW50R3JvdXAnLDMzMSk7WWNiKDc2MSwyMDUwLHt9LFRUYik7Xy5GZj1mdW5jdGlvbiBVVGIoYSl7dmFyIGIsYztmb3IoYz1uZXcgcm1iKHRoaXMuYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDMzMSk7aWYoYi5EZihhKSl7cmV0dXJufX1JbGIodGhpcy5hLG5ldyBNVGIoYSkpfTtfLkNmPWZ1bmN0aW9uIFZUYihhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvO3RoaXMuYS5jLmxlbmd0aD0wO2IuYS5jLmxlbmd0aD0wO2lmKGEuZGMoKSl7Yi5mLmE9MDtiLmYuYj0wO3JldHVybn1nPUpEKGEuWGIoMCksMzYpO1VNYihiLGcpO2ZvcihlPWEuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwzNik7dGhpcy5GZihkKX1vPW5ldyBDZGQ7Zj1CZWIoTUQoV01iKGcsKEJ3YygpLFZ2YykpKSk7Zm9yKGo9bmV3IHJtYih0aGlzLmEpO2ouYTxqLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihqKSwzMzEpO2s9UFRiKGgsZik7SFRiKFVjKGguYiksby5hLG8uYik7by5hKz1rLmE7by5iKz1rLmJ9Yi5mLmE9by5hLWY7Yi5mLmI9by5iLWY7aWYoeWRiKExEKFdNYihnLFZ0YykpKSYmWEQoV01iKGcseXVjKSk9PT1YRCgoeGhkKCksdGhkKSkpe2ZvcihuPWEuSmMoKTtuLk9iKCk7KXtsPUpEKG4uUGIoKSwzNik7R1RiKGwsbC5jLmEsbC5jLmIpfWM9bmV3IHRVYjtqVWIoYyxhLGYpO2ZvcihtPWEuSmMoKTttLk9iKCk7KXtsPUpEKG0uUGIoKSwzNik7bWRkKHZkZChsLmMpLGMuZSl9bWRkKHZkZChiLmYpLGMuYSl9Zm9yKGk9bmV3IHJtYih0aGlzLmEpO2kuYTxpLmMuYy5sZW5ndGg7KXtoPUpEKHBtYihpKSwzMzEpO0ZUYihiLFVjKGguYikpfX07dmFyIGZQPWplYih4dmUsJ0NvbXBvbmVudEdyb3VwR3JhcGhQbGFjZXInLDc2MSk7WWNiKDEyNjUsNzYxLHt9LFhUYik7Xy5GZj1mdW5jdGlvbiBZVGIoYSl7V1RiKHRoaXMsYSl9O18uQ2Y9ZnVuY3Rpb24gWlRiKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0O3RoaXMuYS5jLmxlbmd0aD0wO2IuYS5jLmxlbmd0aD0wO2lmKGEuZGMoKSl7Yi5mLmE9MDtiLmYuYj0wO3JldHVybn1nPUpEKGEuWGIoMCksMzYpO1VNYihiLGcpO2ZvcihlPWEuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSwzNik7V1RiKHRoaXMsZCl9dD1uZXcgQ2RkO3M9bmV3IENkZDtwPW5ldyBDZGQ7bz1uZXcgQ2RkO2Y9QmViKE1EKFdNYihnLChCd2MoKSxWdmMpKSkpO2ZvcihqPW5ldyBybWIodGhpcy5hKTtqLmE8ai5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaiksMzMxKTtpZihVZ2QoSkQoV01iKGIsKExnZCgpLCRlZCkpLDg2KSkpe3AuYT10LmE7Zm9yKHI9bmV3IFl2KFBjKEZjKGguYikuYSkuYS5rYygpKTtyLmIuT2IoKTspe3E9SkQoWHYoci5iLlBiKCkpLDIyKTtpZihxLkdjKChSamQoKSx4amQpKSl7cC5hPXMuYTticmVha319fWVsc2UgaWYoVmdkKEpEKFdNYihiLCRlZCksODYpKSl7cC5iPXQuYjtmb3Iocj1uZXcgWXYoUGMoRmMoaC5iKS5hKS5hLmtjKCkpO3IuYi5PYigpOyl7cT1KRChYdihyLmIuUGIoKSksMjIpO2lmKHEuR2MoKFJqZCgpLFFqZCkpKXtwLmI9cy5iO2JyZWFrfX19az1QVGIoSkQoaCw1NjEpLGYpO0hUYihVYyhoLmIpLHAuYSxwLmIpO2lmKFVnZChKRChXTWIoYiwkZWQpLDg2KSkpe3MuYT1wLmEray5hO28uYT0kd25kLk1hdGgubWF4KG8uYSxzLmEpO2ZvcihyPW5ldyBZdihQYyhGYyhoLmIpLmEpLmEua2MoKSk7ci5iLk9iKCk7KXtxPUpEKFh2KHIuYi5QYigpKSwyMik7aWYocS5HYygoUmpkKCksT2pkKSkpe3QuYT1wLmEray5hO2JyZWFrfX1zLmI9cC5iK2suYjtwLmI9cy5iO28uYj0kd25kLk1hdGgubWF4KG8uYixwLmIpfWVsc2UgaWYoVmdkKEpEKFdNYihiLCRlZCksODYpKSl7cy5iPXAuYitrLmI7by5iPSR3bmQuTWF0aC5tYXgoby5iLHMuYik7Zm9yKHI9bmV3IFl2KFBjKEZjKGguYikuYSkuYS5rYygpKTtyLmIuT2IoKTspe3E9SkQoWHYoci5iLlBiKCkpLDIyKTtpZihxLkdjKChSamQoKSx3amQpKSl7dC5iPXAuYitrLmI7YnJlYWt9fXMuYT1wLmEray5hO3AuYT1zLmE7by5hPSR3bmQuTWF0aC5tYXgoby5hLHAuYSl9fWIuZi5hPW8uYS1mO2IuZi5iPW8uYi1mO2lmKHlkYihMRChXTWIoZyxWdGMpKSkmJlhEKFdNYihnLHl1YykpPT09WEQoKHhoZCgpLHRoZCkpKXtmb3Iobj1hLkpjKCk7bi5PYigpOyl7bD1KRChuLlBiKCksMzYpO0dUYihsLGwuYy5hLGwuYy5iKX1jPW5ldyB0VWI7alViKGMsYSxmKTtmb3IobT1hLkpjKCk7bS5PYigpOyl7bD1KRChtLlBiKCksMzYpO21kZCh2ZGQobC5jKSxjLmUpfW1kZCh2ZGQoYi5mKSxjLmEpfWZvcihpPW5ldyBybWIodGhpcy5hKTtpLmE8aS5jLmMubGVuZ3RoOyl7aD1KRChwbWIoaSksMzMxKTtGVGIoYixVYyhoLmIpKX19O3ZhciBnUD1qZWIoeHZlLCdDb21wb25lbnRHcm91cE1vZGVsT3JkZXJHcmFwaFBsYWNlcicsMTI2NSk7WWNiKDM4MSwyMyx7MzoxLDM0OjEsMjM6MSwzODE6MX0sZFViKTt2YXIgJFRiLF9UYixhVWIsYlViO3ZhciBpUD1rZWIoeHZlLCdDb21wb25lbnRPcmRlcmluZ1N0cmF0ZWd5JywzODEsTUksZlViLGVVYik7dmFyIGdVYjtZY2IoNjQzLDEse30sdFViKTt2YXIgcVA9amViKHh2ZSwnQ29tcG9uZW50c0NvbXBhY3RvcicsNjQzKTtZY2IoMTQ3MywxMyxZc2Usd1ViKTtfLkVjPWZ1bmN0aW9uIHhVYihhKXtyZXR1cm4gdVViKHRoaXMsSkQoYSwxNDMpKX07dmFyIGpQPWplYih4dmUsJ0NvbXBvbmVudHNDb21wYWN0b3IvSHVsbHBvaW50cycsMTQ3Myk7WWNiKDE0NzAsMSx7ODM0OjF9LHpVYik7Xy5hPWZhbHNlO3ZhciBrUD1qZWIoeHZlLCdDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29tcG9uZW50JywxNDcwKTtZY2IoMTQ2OSwxLHByZSxBVWIpO18uSWM9ZnVuY3Rpb24gQlViKGEpe29mYih0aGlzLGEpfTtfLkpjPWZ1bmN0aW9uIENVYigpe3JldHVybiBuZXcgcm1iKHRoaXMuYSl9O3ZhciBsUD1qZWIoeHZlLCdDb21wb25lbnRzQ29tcGFjdG9yL0ludGVybmFsQ29ubmVjdGVkQ29tcG9uZW50cycsMTQ2OSk7WWNiKDE0NzIsMSx7NTg2OjF9LERVYik7Xy56Zj1mdW5jdGlvbiBGVWIoKXtyZXR1cm4gbnVsbH07Xy5BZj1mdW5jdGlvbiBHVWIoKXtyZXR1cm4gdGhpcy5hfTtfLnlmPWZ1bmN0aW9uIEVVYigpe3JldHVybiBwVWIodGhpcy5kKX07Xy5CZj1mdW5jdGlvbiBIVWIoKXtyZXR1cm4gdGhpcy5ifTt2YXIgbVA9amViKHh2ZSwnQ29tcG9uZW50c0NvbXBhY3Rvci9JbnRlcm5hbEV4dGVybmFsRXh0ZW5zaW9uJywxNDcyKTtZY2IoMTQ3MSwxLHs1ODY6MX0sSVViKTtfLkFmPWZ1bmN0aW9uIExVYigpe3JldHVybiB0aGlzLmF9O18ueWY9ZnVuY3Rpb24gSlViKCl7cmV0dXJuIHBVYih0aGlzLmQpfTtfLnpmPWZ1bmN0aW9uIEtVYigpe3JldHVybiB0aGlzLmN9O18uQmY9ZnVuY3Rpb24gTVViKCl7cmV0dXJuIHRoaXMuYn07dmFyIG5QPWplYih4dmUsJ0NvbXBvbmVudHNDb21wYWN0b3IvSW50ZXJuYWxVbmlvbkV4dGVybmFsRXh0ZW5zaW9uJywxNDcxKTtZY2IoMTQ3NSwxLHt9LE5VYik7dmFyIG9QPWplYih4dmUsJ0NvbXBvbmVudHNDb21wYWN0b3IvT3V0ZXJTZWdtZW50cycsMTQ3NSk7WWNiKDE0NzQsMSx7fSxPVWIpO3ZhciBwUD1qZWIoeHZlLCdDb21wb25lbnRzQ29tcGFjdG9yL1NlZ21lbnRzJywxNDc0KTtZY2IoMTI0MiwxLHt9LFNVYik7dmFyIHNQPWplYih4dmUscXVlLDEyNDIpO1ljYigxMjQzLDEsQnRlLFVVYik7Xy5MZT1mdW5jdGlvbiBWVWIoYSxiKXtyZXR1cm4gVFViKEpEKGEsMzYpLEpEKGIsMzYpKX07Xy5GYj1mdW5jdGlvbiBXVWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFhVYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgclA9amViKHh2ZSwnQ29tcG9uZW50c1Byb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxMjQzKTtZY2IoNTYxLDMzMSx7MzMxOjEsNTYxOjF9LGFWYik7Xy5EZj1mdW5jdGlvbiBiVmIoYSl7cmV0dXJuICRVYih0aGlzLGEpfTtfLkVmPWZ1bmN0aW9uIGNWYihhKXtyZXR1cm4gX1ViKHRoaXMsYSl9O3ZhciBZVWI7dmFyIHRQPWplYih4dmUsJ01vZGVsT3JkZXJDb21wb25lbnRHcm91cCcsNTYxKTtZY2IoMTI2MywyMDUwLHt9LGRWYik7Xy5DZj1mdW5jdGlvbiBlVmIoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO2lmKGEuZ2MoKT09MSl7bD1KRChhLlhiKDApLDM2KTtpZihsIT1iKXtiLmEuYy5sZW5ndGg9MDtFVGIoYixsLDAsMCk7VU1iKGIsbCk7TVhiKGIuZCxsLmQpO2IuZi5hPWwuZi5hO2IuZi5iPWwuZi5ifXJldHVybn1lbHNlIGlmKGEuZGMoKSl7Yi5hLmMubGVuZ3RoPTA7Yi5mLmE9MDtiLmYuYj0wO3JldHVybn10aGlzLkhmKGEsYik7ZT1KRChhLlhiKDApLDM2KTtiLmEuYy5sZW5ndGg9MDtVTWIoYixlKTtqPTA7bT0wO2ZvcihnPWEuSmMoKTtnLk9iKCk7KXtmPUpEKGcuUGIoKSwzNik7az1mLmY7aj0kd25kLk1hdGgubWF4KGosay5hKTttKz1rLmEqay5ifWo9JHduZC5NYXRoLm1heChqLCR3bmQuTWF0aC5zcXJ0KG0pKkJlYihNRChXTWIoYiwoQndjKCksVHRjKSkpKSk7ZD1CZWIoTUQoV01iKGIsVnZjKSkpO3RoaXMuR2YoYSxiLGosZCk7aWYoeWRiKExEKFdNYihlLFZ0YykpKSl7Yz1uZXcgdFViO2pVYihjLGEsZCk7Zm9yKGk9YS5KYygpO2kuT2IoKTspe2g9SkQoaS5QYigpLDM2KTttZGQodmRkKGguYyksYy5lKX1tZGQodmRkKGIuZiksYy5hKX1GVGIoYixhKX07Xy5HZj1mdW5jdGlvbiBmVmIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGssbDtrPTA7bD0wO2g9MDtlPWQ7Zm9yKGc9YS5KYygpO2cuT2IoKTspe2Y9SkQoZy5QYigpLDM2KTtqPWYuZjtpZihrK2ouYT5jKXtrPTA7bCs9aCtkO2g9MH1pPWYuYztHVGIoZixrK2kuYSxsK2kuYik7dmRkKGkpO2U9JHduZC5NYXRoLm1heChlLGsrai5hKTtoPSR3bmQuTWF0aC5tYXgoaCxqLmIpO2srPWouYStkfWIuZi5hPWU7Yi5mLmI9bCtofTtfLkhmPWZ1bmN0aW9uIGdWYihhLGIpe3ZhciBjLGQsZSxmLGc7aWYoWEQoV01iKGIsKEJ3YygpLFl0YykpKT09PVhEKChjVWIoKSxiVWIpKSl7Zm9yKGQ9YS5KYygpO2QuT2IoKTspe2M9SkQoZC5QYigpLDM2KTtnPTA7Zm9yKGY9bmV3IHJtYihjLmEpO2YuYTxmLmMuYy5sZW5ndGg7KXtlPUpEKHBtYihmKSw5KTtnKz1KRChXTWIoZSxNdmMpLDE3KS5hfWMucD1nfXBuYigpO2EuZ2QobmV3IGxWYil9fTt2YXIgd1A9amViKHh2ZSwnU2ltcGxlUm93R3JhcGhQbGFjZXInLDEyNjMpO1ljYigxMjY2LDEyNjMse30saFZiKTtfLkdmPWZ1bmN0aW9uIGlWYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGosayxsLG0sbjttPTA7bj0wO2g9MDtlPWQ7aT1udWxsO2w9MDtmb3IoZz1hLkpjKCk7Zy5PYigpOyl7Zj1KRChnLlBiKCksMzYpO2s9Zi5mO2lmKG0ray5hPmMmJiFKRChXTWIoZiwoSXFjKCksUXBjKSksMjIpLkdjKChSamQoKSx4amQpKXx8ISFpJiZKRChXTWIoaSwoSXFjKCksUXBjKSksMjIpLkdjKChSamQoKSx3amQpKXx8SkQoV01iKGYsKElxYygpLFFwYykpLDIyKS5HYygoUmpkKCksUWpkKSkpe209bDtuKz1oK2Q7aD0wfWo9Zi5jO0pEKFdNYihmLChJcWMoKSxRcGMpKSwyMikuR2MoKFJqZCgpLHhqZCkpJiYobT1lK2QpO0dUYihmLG0rai5hLG4rai5iKTtlPSR3bmQuTWF0aC5tYXgoZSxtK2suYSk7SkQoV01iKGYsUXBjKSwyMikuR2MoT2pkKSYmKGw9JHduZC5NYXRoLm1heChsLG0ray5hK2QpKTt2ZGQoaik7aD0kd25kLk1hdGgubWF4KGgsay5iKTttKz1rLmErZDtpPWZ9Yi5mLmE9ZTtiLmYuYj1uK2h9O18uSGY9ZnVuY3Rpb24galZiKGEsYil7fTt2YXIgdVA9amViKHh2ZSwnTW9kZWxPcmRlclJvd0dyYXBoUGxhY2VyJywxMjY2KTtZY2IoMTI2NCwxLEJ0ZSxsVmIpO18uTGU9ZnVuY3Rpb24gbVZiKGEsYil7cmV0dXJuIGtWYihKRChhLDM2KSxKRChiLDM2KSl9O18uRmI9ZnVuY3Rpb24gblZiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBvVmIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIHZQPWplYih4dmUsJ1NpbXBsZVJvd0dyYXBoUGxhY2VyLzEnLDEyNjQpO3ZhciBwVmI7WWNiKDEyNDAsMSxUdGUsdlZiKTtfLkxiPWZ1bmN0aW9uIHdWYihhKXt2YXIgYjtyZXR1cm4gYj1KRChXTWIoSkQoYSwyNDgpLmIsKEJ3YygpLFJ1YykpLDc3KSwhIWImJmIuYiE9MH07Xy5GYj1mdW5jdGlvbiB4VmIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIHlWYihhKXt2YXIgYjtyZXR1cm4gYj1KRChXTWIoSkQoYSwyNDgpLmIsKEJ3YygpLFJ1YykpLDc3KSwhIWImJmIuYiE9MH07dmFyIHhQPWplYihDdmUsJ0NvbXBvdW5kR3JhcGhQb3N0cHJvY2Vzc29yLzEnLDEyNDApO1ljYigxMjM5LDEsRHZlLE9WYik7Xy5JZj1mdW5jdGlvbiBQVmIoYSxiKXtJVmIodGhpcyxKRChhLDM2KSxiKX07dmFyIHpQPWplYihDdmUsJ0NvbXBvdW5kR3JhcGhQcmVwcm9jZXNzb3InLDEyMzkpO1ljYig0NDEsMSx7NDQxOjF9LFFWYik7Xy5jPWZhbHNlO3ZhciB5UD1qZWIoQ3ZlLCdDb21wb3VuZEdyYXBoUHJlcHJvY2Vzc29yL0V4dGVybmFsUG9ydCcsNDQxKTtZY2IoMjQ4LDEsezI0ODoxfSxUVmIpO18uSWI9ZnVuY3Rpb24gVVZiKCl7cmV0dXJuIGxzKHRoaXMuYykrJzonK2pXYih0aGlzLmIpfTt2YXIgQlA9amViKEN2ZSwnQ3Jvc3NIaWVyYXJjaHlFZGdlJywyNDgpO1ljYig3NTksMSxCdGUsV1ZiKTtfLkxlPWZ1bmN0aW9uIFhWYihhLGIpe3JldHVybiBWVmIodGhpcyxKRChhLDI0OCksSkQoYiwyNDgpKX07Xy5GYj1mdW5jdGlvbiBZVmIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uICRWYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgQVA9amViKEN2ZSwnQ3Jvc3NIaWVyYXJjaHlFZGdlQ29tcGFyYXRvcicsNzU5KTtZY2IoMzA2LDE0OCx7MzoxLDMwNjoxLDEwMjoxLDE0ODoxfSk7Xy5wPTA7dmFyIExQPWplYihFdmUsJ0xHcmFwaEVsZW1lbnQnLDMwNik7WWNiKDE4LDMwNix7MzoxLDE4OjEsMzA2OjEsMTAyOjEsMTQ4OjF9LGtXYik7Xy5JYj1mdW5jdGlvbiBsV2IoKXtyZXR1cm4galdiKHRoaXMpfTt2YXIgQ1A9amViKEV2ZSwnTEVkZ2UnLDE4KTtZY2IoMzYsMzA2LHszOjEsMjA6MSwzNjoxLDMwNjoxLDEwMjoxLDE0ODoxfSxuV2IpO18uSWM9ZnVuY3Rpb24gb1diKGEpe29mYih0aGlzLGEpfTtfLkpjPWZ1bmN0aW9uIHBXYigpe3JldHVybiBuZXcgcm1iKHRoaXMuYil9O18uSWI9ZnVuY3Rpb24gcVdiKCl7aWYodGhpcy5iLmMubGVuZ3RoPT0wKXtyZXR1cm4gJ0ctdW5sYXllcmVkJytFZSh0aGlzLmEpfWVsc2UgaWYodGhpcy5hLmMubGVuZ3RoPT0wKXtyZXR1cm4gJ0ctbGF5ZXJlZCcrRWUodGhpcy5iKX1yZXR1cm4gJ0dbbGF5ZXJsZXNzJytFZSh0aGlzLmEpKycsIGxheWVycycrRWUodGhpcy5iKSsnXSd9O3ZhciBNUD1qZWIoRXZlLCdMR3JhcGgnLDM2KTt2YXIgcldiO1ljYig2NTAsMSx7fSk7Xy5KZj1mdW5jdGlvbiB0V2IoKXtyZXR1cm4gdGhpcy5lLm59O18ubWY9ZnVuY3Rpb24gdVdiKGEpe3JldHVybiBXTWIodGhpcy5lLGEpfTtfLktmPWZ1bmN0aW9uIHZXYigpe3JldHVybiB0aGlzLmUub307Xy5MZj1mdW5jdGlvbiB3V2IoKXtyZXR1cm4gdGhpcy5lLnB9O18ubmY9ZnVuY3Rpb24geFdiKGEpe3JldHVybiBYTWIodGhpcy5lLGEpfTtfLk1mPWZ1bmN0aW9uIHlXYihhKXt0aGlzLmUubi5hPWEuYTt0aGlzLmUubi5iPWEuYn07Xy5OZj1mdW5jdGlvbiB6V2IoYSl7dGhpcy5lLm8uYT1hLmE7dGhpcy5lLm8uYj1hLmJ9O18uT2Y9ZnVuY3Rpb24gQVdiKGEpe3RoaXMuZS5wPWF9O3ZhciBEUD1qZWIoRXZlLCdMR3JhcGhBZGFwdGVycy9BYnN0cmFjdExTaGFwZUFkYXB0ZXInLDY1MCk7WWNiKDQ2MCwxLHs4MzI6MX0sQldiKTtfLlBmPWZ1bmN0aW9uIENXYigpe3ZhciBhLGI7aWYoIXRoaXMuYil7dGhpcy5iPWF2KHRoaXMuYS5iLmMubGVuZ3RoKTtmb3IoYj1uZXcgcm1iKHRoaXMuYS5iKTtiLmE8Yi5jLmMubGVuZ3RoOyl7YT1KRChwbWIoYiksNzIpO0lsYih0aGlzLmIsbmV3IE5XYihhKSl9fXJldHVybiB0aGlzLmJ9O18uYj1udWxsO3ZhciBFUD1qZWIoRXZlLCdMR3JhcGhBZGFwdGVycy9MRWRnZUFkYXB0ZXInLDQ2MCk7WWNiKDY0OSwxLHt9LERXYik7Xy5RZj1mdW5jdGlvbiBFV2IoKXt2YXIgYSxiLGMsZCxlLGY7aWYoIXRoaXMuYil7dGhpcy5iPW5ldyBVbGI7Zm9yKGQ9bmV3IHJtYih0aGlzLmEuYik7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDI1KTtmb3IoZj1uZXcgcm1iKGMuYSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDkpO2lmKHRoaXMuYy5NYihlKSl7SWxiKHRoaXMuYixuZXcgUFdiKHRoaXMsZSx0aGlzLmUpKTtpZih0aGlzLmQpe2lmKFhNYihlLChJcWMoKSxIcWMpKSl7Zm9yKGI9SkQoV01iKGUsSHFjKSwxNSkuSmMoKTtiLk9iKCk7KXthPUpEKGIuUGIoKSw5KTtJbGIodGhpcy5iLG5ldyBQV2IodGhpcyxhLGZhbHNlKSl9fWlmKFhNYihlLEZwYykpe2ZvcihiPUpEKFdNYihlLEZwYyksMTUpLkpjKCk7Yi5PYigpOyl7YT1KRChiLlBiKCksOSk7SWxiKHRoaXMuYixuZXcgUFdiKHRoaXMsYSxmYWxzZSkpfX19fX19fXJldHVybiB0aGlzLmJ9O18uSmY9ZnVuY3Rpb24gRldiKCl7dGhyb3cgc2NiKG5ldyBiaGIoR3ZlKSl9O18ubWY9ZnVuY3Rpb24gR1diKGEpe3JldHVybiBXTWIodGhpcy5hLGEpfTtfLktmPWZ1bmN0aW9uIEhXYigpe3JldHVybiB0aGlzLmEuZn07Xy5MZj1mdW5jdGlvbiBJV2IoKXtyZXR1cm4gdGhpcy5hLnB9O18ubmY9ZnVuY3Rpb24gSldiKGEpe3JldHVybiBYTWIodGhpcy5hLGEpfTtfLk1mPWZ1bmN0aW9uIEtXYihhKXt0aHJvdyBzY2IobmV3IGJoYihHdmUpKX07Xy5OZj1mdW5jdGlvbiBMV2IoYSl7dGhpcy5hLmYuYT1hLmE7dGhpcy5hLmYuYj1hLmJ9O18uT2Y9ZnVuY3Rpb24gTVdiKGEpe3RoaXMuYS5wPWF9O18uYj1udWxsO18uZD1mYWxzZTtfLmU9ZmFsc2U7dmFyIEZQPWplYihFdmUsJ0xHcmFwaEFkYXB0ZXJzL0xHcmFwaEFkYXB0ZXInLDY0OSk7WWNiKDU2Nyw2NTAsezE4NzoxfSxOV2IpO3ZhciBHUD1qZWIoRXZlLCdMR3JhcGhBZGFwdGVycy9MTGFiZWxBZGFwdGVyJyw1NjcpO1ljYig1NjYsNjUwLHs2ODA6MX0sUFdiKTtfLlJmPWZ1bmN0aW9uIFFXYigpe3JldHVybiB0aGlzLmJ9O18uU2Y9ZnVuY3Rpb24gUldiKCl7cmV0dXJuIHBuYigpLHBuYigpLG1uYn07Xy5QZj1mdW5jdGlvbiBTV2IoKXt2YXIgYSxiO2lmKCF0aGlzLmEpe3RoaXMuYT1hdihKRCh0aGlzLmUsOSkuYi5jLmxlbmd0aCk7Zm9yKGI9bmV3IHJtYihKRCh0aGlzLmUsOSkuYik7Yi5hPGIuYy5jLmxlbmd0aDspe2E9SkQocG1iKGIpLDcyKTtJbGIodGhpcy5hLG5ldyBOV2IoYSkpfX1yZXR1cm4gdGhpcy5hfTtfLlRmPWZ1bmN0aW9uIFRXYigpe3ZhciBhO2E9SkQodGhpcy5lLDkpLmQ7cmV0dXJuIG5ldyBfWGIoYS5kLGEuYyxhLmEsYS5iKX07Xy5VZj1mdW5jdGlvbiBVV2IoKXtyZXR1cm4gcG5iKCkscG5iKCksbW5ifTtfLlZmPWZ1bmN0aW9uIFZXYigpe3ZhciBhLGI7aWYoIXRoaXMuYyl7dGhpcy5jPWF2KEpEKHRoaXMuZSw5KS5qLmMubGVuZ3RoKTtmb3IoYj1uZXcgcm1iKEpEKHRoaXMuZSw5KS5qKTtiLmE8Yi5jLmMubGVuZ3RoOyl7YT1KRChwbWIoYiksMTEpO0lsYih0aGlzLmMsbmV3ICRXYihhLHRoaXMuZCkpfX1yZXR1cm4gdGhpcy5jfTtfLldmPWZ1bmN0aW9uIFdXYigpe3JldHVybiB5ZGIoTEQoV01iKEpEKHRoaXMuZSw5KSwoSXFjKCksSXBjKSkpKX07Xy5YZj1mdW5jdGlvbiBYV2IoYSl7SkQodGhpcy5lLDkpLmQuYj1hLmI7SkQodGhpcy5lLDkpLmQuZD1hLmQ7SkQodGhpcy5lLDkpLmQuYz1hLmM7SkQodGhpcy5lLDkpLmQuYT1hLmF9O18uWWY9ZnVuY3Rpb24gWVdiKGEpe0pEKHRoaXMuZSw5KS5mLmI9YS5iO0pEKHRoaXMuZSw5KS5mLmQ9YS5kO0pEKHRoaXMuZSw5KS5mLmM9YS5jO0pEKHRoaXMuZSw5KS5mLmE9YS5hfTtfLlpmPWZ1bmN0aW9uIFpXYigpe09XYih0aGlzLChzV2IoKSxyV2IpKX07Xy5hPW51bGw7Xy5iPW51bGw7Xy5jPW51bGw7Xy5kPWZhbHNlO3ZhciBIUD1qZWIoRXZlLCdMR3JhcGhBZGFwdGVycy9MTm9kZUFkYXB0ZXInLDU2Nik7WWNiKDE3MzQsNjUwLHs4MzE6MX0sJFdiKTtfLlNmPWZ1bmN0aW9uIF9XYigpe3ZhciBhLGIsYyxkLGUsZixnLGg7aWYodGhpcy5kJiZKRCh0aGlzLmUsMTEpLmkuaz09KERZYigpLEJZYikpe3JldHVybiBwbmIoKSxwbmIoKSxtbmJ9ZWxzZSBpZighdGhpcy5hKXt0aGlzLmE9bmV3IFVsYjtmb3IoYz1uZXcgcm1iKEpEKHRoaXMuZSwxMSkuZSk7Yy5hPGMuYy5jLmxlbmd0aDspe2E9SkQocG1iKGMpLDE4KTtJbGIodGhpcy5hLG5ldyBCV2IoYSkpfWlmKHRoaXMuZCl7ZD1KRChXTWIoSkQodGhpcy5lLDExKSwoSXFjKCksc3FjKSksOSk7aWYoZCl7Zm9yKGI9bmV3IGVzKElyKGhZYihkKS5hLkpjKCksbmV3IGVyKSk7Y3MoYik7KXthPUpEKGRzKGIpLDE4KTtJbGIodGhpcy5hLG5ldyBCV2IoYSkpfX19aWYoWE1iKEpEKHRoaXMuZSwxMSkuaSwoSXFjKCksenFjKSkpe2c9SkQoV01iKEpEKHRoaXMuZSwxMSkuaSx6cWMpLDMzMyk7aD1KRChUc2IoZy5lLHRoaXMuZSksMTEyKTtpZihoKXtmb3IoZj1uZXcgcm1iKGguYik7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDMzNik7SWxiKHRoaXMuYSxuZXcgQldiKGUuYSkpfX19fXJldHVybiB0aGlzLmF9O18uUGY9ZnVuY3Rpb24gYVhiKCl7dmFyIGEsYjtpZighdGhpcy5iKXt0aGlzLmI9YXYoSkQodGhpcy5lLDExKS5mLmMubGVuZ3RoKTtmb3IoYj1uZXcgcm1iKEpEKHRoaXMuZSwxMSkuZik7Yi5hPGIuYy5jLmxlbmd0aDspe2E9SkQocG1iKGIpLDcyKTtJbGIodGhpcy5iLG5ldyBOV2IoYSkpfX1yZXR1cm4gdGhpcy5ifTtfLlVmPWZ1bmN0aW9uIGJYYigpe3ZhciBhLGIsYyxkLGUsZixnLGg7aWYodGhpcy5kJiZKRCh0aGlzLmUsMTEpLmkuaz09KERZYigpLEJZYikpe3JldHVybiBwbmIoKSxwbmIoKSxtbmJ9ZWxzZSBpZighdGhpcy5jKXt0aGlzLmM9bmV3IFVsYjtmb3IoYz1uZXcgcm1iKEpEKHRoaXMuZSwxMSkuZyk7Yy5hPGMuYy5jLmxlbmd0aDspe2E9SkQocG1iKGMpLDE4KTtJbGIodGhpcy5jLG5ldyBCV2IoYSkpfWlmKHRoaXMuZCl7ZD1KRChXTWIoSkQodGhpcy5lLDExKSwoSXFjKCksc3FjKSksOSk7aWYoZCl7Zm9yKGI9bmV3IGVzKElyKGtZYihkKS5hLkpjKCksbmV3IGVyKSk7Y3MoYik7KXthPUpEKGRzKGIpLDE4KTtJbGIodGhpcy5jLG5ldyBCV2IoYSkpfX19aWYoWE1iKEpEKHRoaXMuZSwxMSkuaSwoSXFjKCksenFjKSkpe2c9SkQoV01iKEpEKHRoaXMuZSwxMSkuaSx6cWMpLDMzMyk7aD1KRChUc2IoZy5lLHRoaXMuZSksMTEyKTtpZihoKXtmb3IoZj1uZXcgcm1iKGguZSk7Zi5hPGYuYy5jLmxlbmd0aDspe2U9SkQocG1iKGYpLDMzNik7SWxiKHRoaXMuYyxuZXcgQldiKGUuYSkpfX19fXJldHVybiB0aGlzLmN9O18uJGY9ZnVuY3Rpb24gY1hiKCl7cmV0dXJuIEpEKHRoaXMuZSwxMSkuan07Xy5fZj1mdW5jdGlvbiBkWGIoKXtyZXR1cm4geWRiKExEKFdNYihKRCh0aGlzLmUsMTEpLChJcWMoKSxacGMpKSkpfTtfLmE9bnVsbDtfLmI9bnVsbDtfLmM9bnVsbDtfLmQ9ZmFsc2U7dmFyIElQPWplYihFdmUsJ0xHcmFwaEFkYXB0ZXJzL0xQb3J0QWRhcHRlcicsMTczNCk7WWNiKDE3MzUsMSxCdGUsZlhiKTtfLkxlPWZ1bmN0aW9uIGdYYihhLGIpe3JldHVybiBlWGIoSkQoYSwxMSksSkQoYiwxMSkpfTtfLkZiPWZ1bmN0aW9uIGhYYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gaVhiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBKUD1qZWIoRXZlLCdMR3JhcGhBZGFwdGVycy9Qb3J0Q29tcGFyYXRvcicsMTczNSk7WWNiKDc5OCwxLElyZSxqWGIpO18uTWI9ZnVuY3Rpb24ga1hiKGEpe3JldHVybiBKRChhLDkpLHNXYigpLHRydWV9O3ZhciBLUD1qZWIoRXZlLCdMR3JhcGhBZGFwdGVycy9sYW1iZGEkMCRUeXBlJyw3OTgpO1ljYigzOTUsMzA2LHszOjEsMzA2OjEsMzk1OjEsMTAyOjEsMTQ4OjF9KTt2YXIgZVE9amViKEV2ZSwnTFNoYXBlJywzOTUpO1ljYig3MiwzOTUsezM6MSwzMDY6MSw3MjoxLDM5NToxLDEwMjoxLDE0ODoxfSxIWGIsSVhiKTtfLkliPWZ1bmN0aW9uIEpYYigpe3ZhciBhO2E9R1hiKHRoaXMpO3JldHVybiBhPT1udWxsPydsYWJlbCc6J2xfJythfTt2YXIgTlA9amViKEV2ZSwnTExhYmVsJyw3Mik7WWNiKDIxMywxLHszOjEsNDoxLDIxMzoxLDQxMToxfSk7Xy5GYj1mdW5jdGlvbiBVWGIoYSl7dmFyIGI7aWYoUkQoYSwyMTMpKXtiPUpEKGEsMjEzKTtyZXR1cm4gdGhpcy5kPT1iLmQmJnRoaXMuYT09Yi5hJiZ0aGlzLmI9PWIuYiYmdGhpcy5jPT1iLmN9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLkhiPWZ1bmN0aW9uIFZYYigpe3ZhciBhLGI7YT1FZWIodGhpcy5iKTw8MTY7YXw9RWViKHRoaXMuYSkmV3JlO2I9RWViKHRoaXMuYyk8PDE2O2J8PUVlYih0aGlzLmQpJldyZTtyZXR1cm4gYV5ifTtfLmFnPWZ1bmN0aW9uIFhYYihiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO2c9MDt3aGlsZShnPGIubGVuZ3RoJiZXWGIoKEFEYihnLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoZykpLEx2ZSkpeysrZ31jPWIubGVuZ3RoO3doaWxlKGM+MCYmV1hiKChBRGIoYy0xLGIubGVuZ3RoKSxiLmNoYXJDb2RlQXQoYy0xKSksTXZlKSl7LS1jfWlmKGc8Yyl7bD1tZ2IoKHpEYihnLGMsYi5sZW5ndGgpLGIuc3Vic3RyKGcsYy1nKSksJyx8OycpO3RyeXtmb3IoaT1sLGo9MCxrPWkubGVuZ3RoO2o8azsrK2ope2g9aVtqXTtmPW1nYihoLCc9Jyk7aWYoZi5sZW5ndGghPTIpe3Rocm93IHNjYihuZXcgVGViKCdFeHBlY3RpbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycy4nKSl9ZT11Z2IoZlswXSk7bT1FZGIodWdiKGZbMV0pKTtjZ2IoZSwndG9wJyk/KHRoaXMuZD1tKTpjZ2IoZSwnbGVmdCcpPyh0aGlzLmI9bSk6Y2diKGUsJ2JvdHRvbScpPyh0aGlzLmE9bSk6Y2diKGUsJ3JpZ2h0JykmJih0aGlzLmM9bSl9fWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTMwKSl7ZD1hO3Rocm93IHNjYihuZXcgVGViKE52ZStkKSl9ZWxzZSB0aHJvdyBzY2IoYSl9fX07Xy5JYj1mdW5jdGlvbiBZWGIoKXtyZXR1cm4gJ1t0b3A9Jyt0aGlzLmQrJyxsZWZ0PScrdGhpcy5iKycsYm90dG9tPScrdGhpcy5hKycscmlnaHQ9Jyt0aGlzLmMrJ10nfTtfLmE9MDtfLmI9MDtfLmM9MDtfLmQ9MDt2YXIgYzI9amViKE92ZSwnU3BhY2luZycsMjEzKTtZY2IoMTM5LDIxMyxQdmUsWlhiLCRYYixfWGIsYVliKTt2YXIgWjE9amViKE92ZSwnRWxrTWFyZ2luJywxMzkpO1ljYig2NDQsMTM5LFB2ZSxiWWIpO3ZhciBPUD1qZWIoRXZlLCdMTWFyZ2luJyw2NDQpO1ljYig5LDM5NSx7MzoxLDMwNjoxLDk6MSwzOTU6MSwxMDI6MSwxNDg6MX0sdFliKTtfLkliPWZ1bmN0aW9uIHVZYigpe3JldHVybiBzWWIodGhpcyl9O18uaT1mYWxzZTt2YXIgUlA9amViKEV2ZSwnTE5vZGUnLDkpO1ljYigyNDcsMjMsezM6MSwzNDoxLDIzOjEsMjQ3OjF9LEVZYik7dmFyIHZZYix3WWIseFliLHlZYix6WWIsQVliLEJZYixDWWI7dmFyIFBQPWtlYihFdmUsJ0xOb2RlL05vZGVUeXBlJywyNDcsTUksR1liLEZZYik7dmFyIEhZYjtZY2IoNzU3LDEsSXJlLEpZYik7Xy5NYj1mdW5jdGlvbiBLWWIoYSl7cmV0dXJuIHlkYihMRChXTWIoSkQoYSw3MiksKEJ3YygpLHZ1YykpKSl9O3ZhciBRUD1qZWIoRXZlLCdMTm9kZS9sYW1iZGEkMCRUeXBlJyw3NTcpO1ljYigxMDcsMjEzLFF2ZSxMWWIsTVliLE5ZYik7dmFyICQxPWplYihPdmUsJ0Vsa1BhZGRpbmcnLDEwNyk7WWNiKDc2MCwxMDcsUXZlLE9ZYik7dmFyIFNQPWplYihFdmUsJ0xQYWRkaW5nJyw3NjApO1ljYigxMSwzOTUsezM6MSwzMDY6MSwxMToxLDM5NToxLDEwMjoxLDE0ODoxfSxiWmIpO18uSWI9ZnVuY3Rpb24gY1piKCl7dmFyIGEsYixjO2E9bmV3IFVnYjtRZ2IoKGEuYSs9J3BfJyxhKSxZWWIodGhpcykpOyEhdGhpcy5pJiZRZ2IoUGdiKChhLmErPSdbJyxhKSx0aGlzLmkpLCddJyk7aWYodGhpcy5lLmMubGVuZ3RoPT0xJiZ0aGlzLmcuYy5sZW5ndGg9PTAmJkpEKE1sYih0aGlzLmUsMCksMTgpLmMhPXRoaXMpe2I9SkQoTWxiKHRoaXMuZSwwKSwxOCkuYztRZ2IoKGEuYSs9JyA8PCAnLGEpLFlZYihiKSk7UWdiKFBnYigoYS5hKz0nWycsYSksYi5pKSwnXScpfWlmKHRoaXMuZS5jLmxlbmd0aD09MCYmdGhpcy5nLmMubGVuZ3RoPT0xJiZKRChNbGIodGhpcy5nLDApLDE4KS5kIT10aGlzKXtjPUpEKE1sYih0aGlzLmcsMCksMTgpLmQ7UWdiKChhLmErPScgPj4gJyxhKSxZWWIoYykpO1FnYihQZ2IoKGEuYSs9J1snLGEpLGMuaSksJ10nKX1yZXR1cm4gYS5hfTtfLmM9dHJ1ZTtfLmQ9ZmFsc2U7dmFyIFBZYixRWWIsUlliLFNZYixUWWIsVVliO3ZhciBkUT1qZWIoRXZlLCdMUG9ydCcsMTEpO1ljYigzOTcsMSxwcmUsZFpiKTtfLkljPWZ1bmN0aW9uIGVaYihhKXtvZmIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBmWmIoKXt2YXIgYTthPW5ldyBybWIodGhpcy5hLmUpO3JldHVybiBuZXcgZ1piKGEpfTt2YXIgVVA9amViKEV2ZSwnTFBvcnQvMScsMzk3KTtZY2IoMTI2MiwxLFdxZSxnWmIpO18uTmI9ZnVuY3Rpb24gaFpiKGEpe09zYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIGpaYigpe3JldHVybiBKRChwbWIodGhpcy5hKSwxOCkuY307Xy5PYj1mdW5jdGlvbiBpWmIoKXtyZXR1cm4gb21iKHRoaXMuYSl9O18uUWI9ZnVuY3Rpb24ga1piKCl7cW1iKHRoaXMuYSl9O3ZhciBUUD1qZWIoRXZlLCdMUG9ydC8xLzEnLDEyNjIpO1ljYigzNjIsMSxwcmUsbFpiKTtfLkljPWZ1bmN0aW9uIG1aYihhKXtvZmIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBuWmIoKXt2YXIgYTtyZXR1cm4gYT1uZXcgcm1iKHRoaXMuYS5nKSxuZXcgb1piKGEpfTt2YXIgV1A9amViKEV2ZSwnTFBvcnQvMicsMzYyKTtZY2IoNzU4LDEsV3FlLG9aYik7Xy5OYj1mdW5jdGlvbiBwWmIoYSl7T3NiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gclpiKCl7cmV0dXJuIEpEKHBtYih0aGlzLmEpLDE4KS5kfTtfLk9iPWZ1bmN0aW9uIHFaYigpe3JldHVybiBvbWIodGhpcy5hKX07Xy5RYj1mdW5jdGlvbiBzWmIoKXtxbWIodGhpcy5hKX07dmFyIFZQPWplYihFdmUsJ0xQb3J0LzIvMScsNzU4KTtZY2IoMTI1NSwxLHByZSx0WmIpO18uSWM9ZnVuY3Rpb24gdVpiKGEpe29mYih0aGlzLGEpfTtfLkpjPWZ1bmN0aW9uIHZaYigpe3JldHVybiBuZXcgeFpiKHRoaXMpfTt2YXIgWVA9amViKEV2ZSwnTFBvcnQvQ29tYmluZUl0ZXInLDEyNTUpO1ljYigyMDcsMSxXcWUseFpiKTtfLk5iPWZ1bmN0aW9uIHlaYihhKXtPc2IodGhpcyxhKX07Xy5RYj1mdW5jdGlvbiBCWmIoKXtQc2IoKX07Xy5PYj1mdW5jdGlvbiB6WmIoKXtyZXR1cm4gd1piKHRoaXMpfTtfLlBiPWZ1bmN0aW9uIEFaYigpe3JldHVybiBvbWIodGhpcy5hKT9wbWIodGhpcy5hKTpwbWIodGhpcy5iKX07dmFyIFhQPWplYihFdmUsJ0xQb3J0L0NvbWJpbmVJdGVyLzEnLDIwNyk7WWNiKDEyNTYsMSxUdGUsRFpiKTtfLkxiPWZ1bmN0aW9uIEVaYihhKXtyZXR1cm4gQ1piKGEpfTtfLkZiPWZ1bmN0aW9uIEZaYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gR1piKGEpe3JldHVybiBWWWIoKSxKRChhLDExKS5nLmMubGVuZ3RoIT0wfTt2YXIgWlA9amViKEV2ZSwnTFBvcnQvbGFtYmRhJDAkVHlwZScsMTI1Nik7WWNiKDEyNTcsMSxUdGUsSVpiKTtfLkxiPWZ1bmN0aW9uIEpaYihhKXtyZXR1cm4gSFpiKGEpfTtfLkZiPWZ1bmN0aW9uIEtaYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gTFpiKGEpe3JldHVybiBWWWIoKSxKRChhLDExKS5lLmMubGVuZ3RoIT0wfTt2YXIgJFA9amViKEV2ZSwnTFBvcnQvbGFtYmRhJDEkVHlwZScsMTI1Nyk7WWNiKDEyNTgsMSxUdGUsTVpiKTtfLkxiPWZ1bmN0aW9uIE5aYihhKXtyZXR1cm4gVlliKCksSkQoYSwxMSkuaj09KFJqZCgpLHhqZCl9O18uRmI9ZnVuY3Rpb24gT1piKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBQWmIoYSl7cmV0dXJuIFZZYigpLEpEKGEsMTEpLmo9PShSamQoKSx4amQpfTt2YXIgX1A9amViKEV2ZSwnTFBvcnQvbGFtYmRhJDIkVHlwZScsMTI1OCk7WWNiKDEyNTksMSxUdGUsUVpiKTtfLkxiPWZ1bmN0aW9uIFJaYihhKXtyZXR1cm4gVlliKCksSkQoYSwxMSkuaj09KFJqZCgpLHdqZCl9O18uRmI9ZnVuY3Rpb24gU1piKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBUWmIoYSl7cmV0dXJuIFZZYigpLEpEKGEsMTEpLmo9PShSamQoKSx3amQpfTt2YXIgYVE9amViKEV2ZSwnTFBvcnQvbGFtYmRhJDMkVHlwZScsMTI1OSk7WWNiKDEyNjAsMSxUdGUsVVpiKTtfLkxiPWZ1bmN0aW9uIFZaYihhKXtyZXR1cm4gVlliKCksSkQoYSwxMSkuaj09KFJqZCgpLE9qZCl9O18uRmI9ZnVuY3Rpb24gV1piKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBYWmIoYSl7cmV0dXJuIFZZYigpLEpEKGEsMTEpLmo9PShSamQoKSxPamQpfTt2YXIgYlE9amViKEV2ZSwnTFBvcnQvbGFtYmRhJDQkVHlwZScsMTI2MCk7WWNiKDEyNjEsMSxUdGUsWVpiKTtfLkxiPWZ1bmN0aW9uIFpaYihhKXtyZXR1cm4gVlliKCksSkQoYSwxMSkuaj09KFJqZCgpLFFqZCl9O18uRmI9ZnVuY3Rpb24gJFpiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBfWmIoYSl7cmV0dXJuIFZZYigpLEpEKGEsMTEpLmo9PShSamQoKSxRamQpfTt2YXIgY1E9amViKEV2ZSwnTFBvcnQvbGFtYmRhJDUkVHlwZScsMTI2MSk7WWNiKDI1LDMwNix7MzoxLDIwOjEsMzA2OjEsMjU6MSwxMDI6MSwxNDg6MX0sYiRiKTtfLkljPWZ1bmN0aW9uIGMkYihhKXtvZmIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBkJGIoKXtyZXR1cm4gbmV3IHJtYih0aGlzLmEpfTtfLkliPWZ1bmN0aW9uIGUkYigpe3JldHVybiAnTF8nK05sYih0aGlzLmIuYix0aGlzLDApK0VlKHRoaXMuYSl9O3ZhciBmUT1qZWIoRXZlLCdMYXllcicsMjUpO1ljYigxMjcxLDEse30sdyRiKTt2YXIgcFE9amViKFJ2ZSxTdmUsMTI3MSk7WWNiKDEyNzUsMSx7fSxBJGIpO18uS2I9ZnVuY3Rpb24gQiRiKGEpe3JldHVybiBfQmQoSkQoYSw4NCkpfTt2YXIgZ1E9amViKFJ2ZSwnRWxrR3JhcGhJbXBvcnRlci8wbWV0aG9kcmVmJGNvbm5lY3RhYmxlU2hhcGVUb05vZGUkVHlwZScsMTI3NSk7WWNiKDEyNzgsMSx7fSxDJGIpO18uS2I9ZnVuY3Rpb24gRCRiKGEpe3JldHVybiBfQmQoSkQoYSw4NCkpfTt2YXIgaFE9amViKFJ2ZSwnRWxrR3JhcGhJbXBvcnRlci8xbWV0aG9kcmVmJGNvbm5lY3RhYmxlU2hhcGVUb05vZGUkVHlwZScsMTI3OCk7WWNiKDEyNzIsMSxrcmUsRSRiKTtfLkFkPWZ1bmN0aW9uIEYkYihhKXtrJGIodGhpcy5hLEpEKGEsMTI0KSl9O3ZhciBpUT1qZWIoUnZlLHN1ZSwxMjcyKTtZY2IoMTI3MywxLGtyZSxHJGIpO18uQWQ9ZnVuY3Rpb24gSCRiKGEpe2skYih0aGlzLmEsSkQoYSwxMjQpKX07dmFyIGpRPWplYihSdmUsVHZlLDEyNzMpO1ljYigxMjc0LDEse30sSSRiKTtfLktiPWZ1bmN0aW9uIEokYihhKXtyZXR1cm4gbmV3IFJCYihudWxsLG5ldyBHdmIoUXRkKEpEKGEsODUpKSwxNikpfTt2YXIga1E9amViKFJ2ZSxVdmUsMTI3NCk7WWNiKDEyNzYsMSxJcmUsSyRiKTtfLk1iPWZ1bmN0aW9uIEwkYihhKXtyZXR1cm4geCRiKHRoaXMuYSxKRChhLDI3KSl9O3ZhciBsUT1qZWIoUnZlLFZ2ZSwxMjc2KTtZY2IoMTI3NywxLHt9LE0kYik7Xy5LYj1mdW5jdGlvbiBOJGIoYSl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgR3ZiKFB0ZChKRChhLDg1KSksMTYpKX07dmFyIG1RPWplYihSdmUsJ0Vsa0dyYXBoSW1wb3J0ZXIvbGFtYmRhJDUkVHlwZScsMTI3Nyk7WWNiKDEyNzksMSxJcmUsTyRiKTtfLk1iPWZ1bmN0aW9uIFAkYihhKXtyZXR1cm4geSRiKHRoaXMuYSxKRChhLDI3KSl9O3ZhciBuUT1qZWIoUnZlLCdFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQ3JFR5cGUnLDEyNzkpO1ljYigxMjgwLDEsSXJlLFEkYik7Xy5NYj1mdW5jdGlvbiBSJGIoYSl7cmV0dXJuIHokYihKRChhLDg1KSl9O3ZhciBvUT1qZWIoUnZlLCdFbGtHcmFwaEltcG9ydGVyL2xhbWJkYSQ4JFR5cGUnLDEyODApO1ljYigxMjUwLDEse30sWiRiKTt2YXIgUyRiO3ZhciB1UT1qZWIoUnZlLCdFbGtHcmFwaExheW91dFRyYW5zZmVycmVyJywxMjUwKTtZY2IoMTI1MSwxLElyZSxhX2IpO18uTWI9ZnVuY3Rpb24gYl9iKGEpe3JldHVybiAkJGIodGhpcy5hLEpEKGEsMTgpKX07dmFyIHFRPWplYihSdmUsJ0Vsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIvbGFtYmRhJDAkVHlwZScsMTI1MSk7WWNiKDEyNTIsMSxrcmUsY19iKTtfLkFkPWZ1bmN0aW9uIGRfYihhKXtUJGIoKTtJbGIodGhpcy5hLEpEKGEsMTgpKX07dmFyIHJRPWplYihSdmUsJ0Vsa0dyYXBoTGF5b3V0VHJhbnNmZXJyZXIvbGFtYmRhJDEkVHlwZScsMTI1Mik7WWNiKDEyNTMsMSxJcmUsZV9iKTtfLk1iPWZ1bmN0aW9uIGZfYihhKXtyZXR1cm4gXyRiKHRoaXMuYSxKRChhLDE4KSl9O3ZhciBzUT1qZWIoUnZlLCdFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQyJFR5cGUnLDEyNTMpO1ljYigxMjU0LDEsa3JlLGdfYik7Xy5BZD1mdW5jdGlvbiBoX2IoYSl7VCRiKCk7SWxiKHRoaXMuYSxKRChhLDE4KSl9O3ZhciB0UT1qZWIoUnZlLCdFbGtHcmFwaExheW91dFRyYW5zZmVycmVyL2xhbWJkYSQzJFR5cGUnLDEyNTQpO1ljYig3OTksMSx7fSxxX2IpO3ZhciB2UT1qZWIoV3ZlLCdCaUxpbmtlZEhhc2hNdWx0aU1hcCcsNzk5KTtZY2IoMTQ5MCwxLER2ZSx0X2IpO18uSWY9ZnVuY3Rpb24gdV9iKGEsYil7cl9iKEpEKGEsMzYpLGIpfTt2YXIgeVE9amViKFd2ZSwnQ29tbWVudE5vZGVNYXJnaW5DYWxjdWxhdG9yJywxNDkwKTtZY2IoMTQ5MSwxLHt9LHZfYik7Xy5LYj1mdW5jdGlvbiB3X2IoYSl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgR3ZiKEpEKGEsMjUpLmEsMTYpKX07dmFyIHdRPWplYihXdmUsJ0NvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlJywxNDkxKTtZY2IoMTQ5MiwxLGtyZSx4X2IpO18uQWQ9ZnVuY3Rpb24geV9iKGEpe3NfYihKRChhLDkpKX07dmFyIHhRPWplYihXdmUsJ0NvbW1lbnROb2RlTWFyZ2luQ2FsY3VsYXRvci9sYW1iZGEkMSRUeXBlJywxNDkyKTtZY2IoMTQ5MywxLER2ZSxDX2IpO18uSWY9ZnVuY3Rpb24gRF9iKGEsYil7QV9iKEpEKGEsMzYpLGIpfTt2YXIgelE9amViKFd2ZSwnQ29tbWVudFBvc3Rwcm9jZXNzb3InLDE0OTMpO1ljYigxNDk0LDEsRHZlLEhfYik7Xy5JZj1mdW5jdGlvbiBJX2IoYSxiKXtFX2IoSkQoYSwzNiksYil9O3ZhciBBUT1qZWIoV3ZlLCdDb21tZW50UHJlcHJvY2Vzc29yJywxNDk0KTtZY2IoMTQ5NSwxLER2ZSxLX2IpO18uSWY9ZnVuY3Rpb24gTF9iKGEsYil7Sl9iKEpEKGEsMzYpLGIpfTt2YXIgQlE9amViKFd2ZSwnQ29uc3RyYWludHNQb3N0cHJvY2Vzc29yJywxNDk1KTtZY2IoMTQ5NiwxLER2ZSxTX2IpO18uSWY9ZnVuY3Rpb24gVF9iKGEsYil7UV9iKEpEKGEsMzYpLGIpfTt2YXIgQ1E9amViKFd2ZSwnRWRnZUFuZExheWVyQ29uc3RyYWludEVkZ2VSZXZlcnNlcicsMTQ5Nik7WWNiKDE0OTcsMSxEdmUsV19iKTtfLklmPWZ1bmN0aW9uIFlfYihhLGIpe1VfYihKRChhLDM2KSxiKX07dmFyIEdRPWplYihXdmUsJ0VuZExhYmVsUG9zdHByb2Nlc3NvcicsMTQ5Nyk7WWNiKDE0OTgsMSx7fSxaX2IpO18uS2I9ZnVuY3Rpb24gJF9iKGEpe3JldHVybiBuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDI1KS5hLDE2KSl9O3ZhciBEUT1qZWIoV3ZlLCdFbmRMYWJlbFBvc3Rwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTQ5OCk7WWNiKDE0OTksMSxJcmUsX19iKTtfLk1iPWZ1bmN0aW9uIGEwYihhKXtyZXR1cm4gWF9iKEpEKGEsOSkpfTt2YXIgRVE9amViKFd2ZSwnRW5kTGFiZWxQb3N0cHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE0OTkpO1ljYigxNTAwLDEsa3JlLGIwYik7Xy5BZD1mdW5jdGlvbiBjMGIoYSl7Vl9iKEpEKGEsOSkpfTt2YXIgRlE9amViKFd2ZSwnRW5kTGFiZWxQb3N0cHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUnLDE1MDApO1ljYigxNTAxLDEsRHZlLG4wYik7Xy5JZj1mdW5jdGlvbiBxMGIoYSxiKXtqMGIoSkQoYSwzNiksYil9O3ZhciBOUT1qZWIoV3ZlLCdFbmRMYWJlbFByZXByb2Nlc3NvcicsMTUwMSk7WWNiKDE1MDIsMSx7fSxyMGIpO18uS2I9ZnVuY3Rpb24gczBiKGEpe3JldHVybiBuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDI1KS5hLDE2KSl9O3ZhciBIUT1qZWIoV3ZlLCdFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxNTAyKTtZY2IoMTUwMywxLGtyZSx0MGIpO18uQWQ9ZnVuY3Rpb24gdTBiKGEpe2YwYih0aGlzLmEsdGhpcy5iLHRoaXMuYyxKRChhLDkpKX07Xy5hPTA7Xy5iPTA7Xy5jPWZhbHNlO3ZhciBJUT1qZWIoV3ZlLCdFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlJywxNTAzKTtZY2IoMTUwNCwxLElyZSx2MGIpO18uTWI9ZnVuY3Rpb24gdzBiKGEpe3JldHVybiBYRChXTWIoSkQoYSw3MiksKEJ3YygpLHd1YykpKT09PVhEKChuaGQoKSxtaGQpKX07dmFyIEpRPWplYihXdmUsJ0VuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUnLDE1MDQpO1ljYigxNTA1LDEsa3JlLHgwYik7Xy5BZD1mdW5jdGlvbiB5MGIoYSl7QXRiKHRoaXMuYSxKRChhLDcyKSl9O3ZhciBLUT1qZWIoV3ZlLCdFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlJywxNTA1KTtZY2IoMTUwNiwxLElyZSx6MGIpO18uTWI9ZnVuY3Rpb24gQTBiKGEpe3JldHVybiBYRChXTWIoSkQoYSw3MiksKEJ3YygpLHd1YykpKT09PVhEKChuaGQoKSxsaGQpKX07dmFyIExRPWplYihXdmUsJ0VuZExhYmVsUHJlcHJvY2Vzc29yL2xhbWJkYSQ0JFR5cGUnLDE1MDYpO1ljYigxNTA3LDEsa3JlLEIwYik7Xy5BZD1mdW5jdGlvbiBDMGIoYSl7QXRiKHRoaXMuYSxKRChhLDcyKSl9O3ZhciBNUT1qZWIoV3ZlLCdFbmRMYWJlbFByZXByb2Nlc3Nvci9sYW1iZGEkNSRUeXBlJywxNTA3KTtZY2IoMTU1NSwxLER2ZSxMMGIpO18uSWY9ZnVuY3Rpb24gTTBiKGEsYil7STBiKEpEKGEsMzYpLGIpfTt2YXIgRDBiO3ZhciBWUT1qZWIoV3ZlLCdFbmRMYWJlbFNvcnRlcicsMTU1NSk7WWNiKDE1NTYsMSxCdGUsTzBiKTtfLkxlPWZ1bmN0aW9uIFAwYihhLGIpe3JldHVybiBOMGIoSkQoYSw0NTIpLEpEKGIsNDUyKSl9O18uRmI9ZnVuY3Rpb24gUTBiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBSMGIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIE9RPWplYihXdmUsJ0VuZExhYmVsU29ydGVyLzEnLDE1NTYpO1ljYig0NTIsMSx7NDUyOjF9LFMwYik7dmFyIFBRPWplYihXdmUsJ0VuZExhYmVsU29ydGVyL0xhYmVsR3JvdXAnLDQ1Mik7WWNiKDE1NTcsMSx7fSxUMGIpO18uS2I9ZnVuY3Rpb24gVTBiKGEpe3JldHVybiBFMGIoKSxuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDI1KS5hLDE2KSl9O3ZhciBRUT1qZWIoV3ZlLCdFbmRMYWJlbFNvcnRlci9sYW1iZGEkMCRUeXBlJywxNTU3KTtZY2IoMTU1OCwxLElyZSxWMGIpO18uTWI9ZnVuY3Rpb24gVzBiKGEpe3JldHVybiBFMGIoKSxKRChhLDkpLms9PShEWWIoKSxBWWIpfTt2YXIgUlE9amViKFd2ZSwnRW5kTGFiZWxTb3J0ZXIvbGFtYmRhJDEkVHlwZScsMTU1OCk7WWNiKDE1NTksMSxrcmUsWDBiKTtfLkFkPWZ1bmN0aW9uIFkwYihhKXtKMGIoSkQoYSw5KSl9O3ZhciBTUT1qZWIoV3ZlLCdFbmRMYWJlbFNvcnRlci9sYW1iZGEkMiRUeXBlJywxNTU5KTtZY2IoMTU2MCwxLElyZSxaMGIpO18uTWI9ZnVuY3Rpb24gJDBiKGEpe3JldHVybiBFMGIoKSxYRChXTWIoSkQoYSw3MiksKEJ3YygpLHd1YykpKT09PVhEKChuaGQoKSxsaGQpKX07dmFyIFRRPWplYihXdmUsJ0VuZExhYmVsU29ydGVyL2xhbWJkYSQzJFR5cGUnLDE1NjApO1ljYigxNTYxLDEsSXJlLF8wYik7Xy5NYj1mdW5jdGlvbiBhMWIoYSl7cmV0dXJuIEUwYigpLFhEKFdNYihKRChhLDcyKSwoQndjKCksd3VjKSkpPT09WEQoKG5oZCgpLG1oZCkpfTt2YXIgVVE9amViKFd2ZSwnRW5kTGFiZWxTb3J0ZXIvbGFtYmRhJDQkVHlwZScsMTU2MSk7WWNiKDE1MDgsMSxEdmUsbTFiKTtfLklmPWZ1bmN0aW9uIG4xYihhLGIpe2sxYih0aGlzLEpEKGEsMzYpKX07Xy5iPTA7Xy5jPTA7dmFyIGFSPWplYihXdmUsJ0ZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3InLDE1MDgpO1ljYigxNTA5LDEse30sbzFiKTtfLktiPWZ1bmN0aW9uIHAxYihhKXtyZXR1cm4gbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSwyNSkuYSwxNikpfTt2YXIgV1E9amViKFd2ZSwnRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMCRUeXBlJywxNTA5KTtZY2IoMTUxMCwxLHt9LHExYik7Xy5LYj1mdW5jdGlvbiByMWIoYSl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgSHZiKG5ldyBlcyhJcihrWWIoSkQoYSw5KSkuYS5KYygpLG5ldyBlcikpKSl9O3ZhciBYUT1qZWIoV3ZlLCdGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQxJFR5cGUnLDE1MTApO1ljYigxNTExLDEsSXJlLHMxYik7Xy5NYj1mdW5jdGlvbiB0MWIoYSl7cmV0dXJuICFlV2IoSkQoYSwxOCkpfTt2YXIgWVE9amViKFd2ZSwnRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMiRUeXBlJywxNTExKTtZY2IoMTUxMiwxLElyZSx1MWIpO18uTWI9ZnVuY3Rpb24gdjFiKGEpe3JldHVybiBYTWIoSkQoYSwxOCksKElxYygpLERxYykpfTt2YXIgWlE9amViKFd2ZSwnRmluYWxTcGxpbmVCZW5kcG9pbnRzQ2FsY3VsYXRvci9sYW1iZGEkMyRUeXBlJywxNTEyKTtZY2IoMTUxMywxLGtyZSx3MWIpO18uQWQ9ZnVuY3Rpb24geDFiKGEpe2QxYih0aGlzLmEsSkQoYSwxMzIpKX07dmFyICRRPWplYihXdmUsJ0ZpbmFsU3BsaW5lQmVuZHBvaW50c0NhbGN1bGF0b3IvbGFtYmRhJDQkVHlwZScsMTUxMyk7WWNiKDE1MTQsMSxrcmUseTFiKTtfLkFkPWZ1bmN0aW9uIHoxYihhKXt2bmIoSkQoYSwxOCkuYSl9O3ZhciBfUT1qZWIoV3ZlLCdGaW5hbFNwbGluZUJlbmRwb2ludHNDYWxjdWxhdG9yL2xhbWJkYSQ1JFR5cGUnLDE1MTQpO1ljYig3ODMsMSxEdmUsWDFiKTtfLklmPWZ1bmN0aW9uIFkxYihhLGIpe08xYih0aGlzLEpEKGEsMzYpLGIpfTt2YXIgY1I9amViKFd2ZSwnR3JhcGhUcmFuc2Zvcm1lcicsNzgzKTtZY2IoNTAxLDIzLHszOjEsMzQ6MSwyMzoxLDUwMToxfSxhMmIpO3ZhciBaMWIsJDFiO3ZhciBiUj1rZWIoV3ZlLCdHcmFwaFRyYW5zZm9ybWVyL01vZGUnLDUwMSxNSSxjMmIsYjJiKTt2YXIgZDJiO1ljYigxNTE1LDEsRHZlLGoyYik7Xy5JZj1mdW5jdGlvbiBrMmIoYSxiKXtnMmIoSkQoYSwzNiksYil9O3ZhciBkUj1qZWIoV3ZlLCdIaWVyYXJjaGljYWxOb2RlUmVzaXppbmdQcm9jZXNzb3InLDE1MTUpO1ljYigxNTE2LDEsRHZlLHIyYik7Xy5JZj1mdW5jdGlvbiBzMmIoYSxiKXtuMmIoSkQoYSwzNiksYil9O3ZhciBmUj1qZWIoV3ZlLCdIaWVyYXJjaGljYWxQb3J0Q29uc3RyYWludFByb2Nlc3NvcicsMTUxNik7WWNiKDE1MTcsMSxCdGUsdTJiKTtfLkxlPWZ1bmN0aW9uIHYyYihhLGIpe3JldHVybiB0MmIoSkQoYSw5KSxKRChiLDkpKX07Xy5GYj1mdW5jdGlvbiB3MmIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIHgyYigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgZVI9amViKFd2ZSwnSGllcmFyY2hpY2FsUG9ydENvbnN0cmFpbnRQcm9jZXNzb3IvTm9kZUNvbXBhcmF0b3InLDE1MTcpO1ljYigxNTE4LDEsRHZlLEEyYik7Xy5JZj1mdW5jdGlvbiBCMmIoYSxiKXt5MmIoSkQoYSwzNiksYil9O3ZhciBnUj1qZWIoV3ZlLCdIaWVyYXJjaGljYWxQb3J0RHVtbXlTaXplUHJvY2Vzc29yJywxNTE4KTtZY2IoMTUxOSwxLER2ZSxPMmIpO18uSWY9ZnVuY3Rpb24gUDJiKGEsYil7SDJiKHRoaXMsSkQoYSwzNiksYil9O18uYT0wO3ZhciBqUj1qZWIoV3ZlLCdIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXInLDE1MTkpO1ljYigxNTIwLDEsQnRlLFIyYik7Xy5MZT1mdW5jdGlvbiBTMmIoYSxiKXtyZXR1cm4gUTJiKEpEKGEsOSksSkQoYiw5KSl9O18uRmI9ZnVuY3Rpb24gVDJiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBVMmIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIGhSPWplYihXdmUsJ0hpZXJhcmNoaWNhbFBvcnRPcnRob2dvbmFsRWRnZVJvdXRlci8xJywxNTIwKTtZY2IoMTUyMSwxLEJ0ZSxXMmIpO18uTGU9ZnVuY3Rpb24gWDJiKGEsYil7cmV0dXJuIFYyYihKRChhLDkpLEpEKGIsOSkpfTtfLkZiPWZ1bmN0aW9uIFkyYihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gWjJiKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBpUj1qZWIoV3ZlLCdIaWVyYXJjaGljYWxQb3J0T3J0aG9nb25hbEVkZ2VSb3V0ZXIvMicsMTUyMSk7WWNiKDE1MjIsMSxEdmUsYTNiKTtfLklmPWZ1bmN0aW9uIGIzYihhLGIpe18yYihKRChhLDM2KSxiKX07dmFyIGtSPWplYihXdmUsJ0hpZXJhcmNoaWNhbFBvcnRQb3NpdGlvblByb2Nlc3NvcicsMTUyMik7WWNiKDE1MjMsMSxEdmUsazNiKTtfLklmPWZ1bmN0aW9uIGwzYihhLGIpe2ozYih0aGlzLEpEKGEsMzYpKX07Xy5hPTA7Xy5jPTA7dmFyIGMzYixkM2I7dmFyIG9SPWplYihXdmUsJ0hpZ2hEZWdyZWVOb2RlTGF5ZXJpbmdQcm9jZXNzb3InLDE1MjMpO1ljYig1NjIsMSx7NTYyOjF9LG0zYik7Xy5iPS0xO18uZD0tMTt2YXIgbFI9amViKFd2ZSwnSGlnaERlZ3JlZU5vZGVMYXllcmluZ1Byb2Nlc3Nvci9IaWdoRGVncmVlTm9kZUluZm9ybWF0aW9uJyw1NjIpO1ljYigxNTI0LDEse30sbjNiKTtfLktiPWZ1bmN0aW9uIG8zYihhKXtyZXR1cm4gZTNiKCksaFliKEpEKGEsOSkpfTtfLkZiPWZ1bmN0aW9uIHAzYihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBtUj1qZWIoV3ZlLCdIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDE1MjQpO1ljYigxNTI1LDEse30scTNiKTtfLktiPWZ1bmN0aW9uIHIzYihhKXtyZXR1cm4gZTNiKCksa1liKEpEKGEsOSkpfTtfLkZiPWZ1bmN0aW9uIHMzYihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBuUj1qZWIoV3ZlLCdIaWdoRGVncmVlTm9kZUxheWVyaW5nUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE1MjUpO1ljYigxNTMxLDEsRHZlLHkzYik7Xy5JZj1mdW5jdGlvbiB6M2IoYSxiKXt4M2IodGhpcyxKRChhLDM2KSxiKX07dmFyIHRSPWplYihXdmUsJ0h5cGVyZWRnZUR1bW15TWVyZ2VyJywxNTMxKTtZY2IoNzg0LDEse30sQTNiKTtfLmE9ZmFsc2U7Xy5iPWZhbHNlO18uYz1mYWxzZTt2YXIgcFI9amViKFd2ZSwnSHlwZXJlZGdlRHVtbXlNZXJnZXIvTWVyZ2VTdGF0ZScsNzg0KTtZY2IoMTUzMiwxLHt9LEIzYik7Xy5LYj1mdW5jdGlvbiBDM2IoYSl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgR3ZiKEpEKGEsMjUpLmEsMTYpKX07dmFyIHFSPWplYihXdmUsJ0h5cGVyZWRnZUR1bW15TWVyZ2VyL2xhbWJkYSQwJFR5cGUnLDE1MzIpO1ljYigxNTMzLDEse30sRDNiKTtfLktiPWZ1bmN0aW9uIEUzYihhKXtyZXR1cm4gbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSw5KS5qLDE2KSl9O3ZhciByUj1qZWIoV3ZlLCdIeXBlcmVkZ2VEdW1teU1lcmdlci9sYW1iZGEkMSRUeXBlJywxNTMzKTtZY2IoMTUzNCwxLGtyZSxGM2IpO18uQWQ9ZnVuY3Rpb24gRzNiKGEpe0pEKGEsMTEpLnA9LTF9O3ZhciBzUj1qZWIoV3ZlLCdIeXBlcmVkZ2VEdW1teU1lcmdlci9sYW1iZGEkMiRUeXBlJywxNTM0KTtZY2IoMTUzNSwxLER2ZSxKM2IpO18uSWY9ZnVuY3Rpb24gSzNiKGEsYil7STNiKEpEKGEsMzYpLGIpfTt2YXIgdVI9amViKFd2ZSwnSHlwZXJub2Rlc1Byb2Nlc3NvcicsMTUzNSk7WWNiKDE1MzYsMSxEdmUsTTNiKTtfLklmPWZ1bmN0aW9uIE4zYihhLGIpe0wzYihKRChhLDM2KSxiKX07dmFyIHZSPWplYihXdmUsJ0luTGF5ZXJDb25zdHJhaW50UHJvY2Vzc29yJywxNTM2KTtZY2IoMTUzNywxLER2ZSxQM2IpO18uSWY9ZnVuY3Rpb24gUTNiKGEsYil7TzNiKEpEKGEsMzYpLGIpfTt2YXIgd1I9amViKFd2ZSwnSW5uZXJtb3N0Tm9kZU1hcmdpbkNhbGN1bGF0b3InLDE1MzcpO1ljYigxNTM4LDEsRHZlLFUzYik7Xy5JZj1mdW5jdGlvbiBaM2IoYSxiKXtUM2IodGhpcyxKRChhLDM2KSl9O18uYT1Mc2U7Xy5iPUxzZTtfLmM9S3NlO18uZD1Lc2U7dmFyIERSPWplYihXdmUsJ0ludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lcicsMTUzOCk7WWNiKDE1MzksMSx7fSwkM2IpO18uS2I9ZnVuY3Rpb24gXzNiKGEpe3JldHVybiBKRChhLDE4KS5kLml9O18uRmI9ZnVuY3Rpb24gYTRiKGEpe3JldHVybiB0aGlzPT09YX07dmFyIHhSPWplYihXdmUsJ0ludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMCRUeXBlJywxNTM5KTtZY2IoMTU0MCwxLHt9LGI0Yik7Xy5LYj1mdW5jdGlvbiBjNGIoYSl7cmV0dXJuIFYzYih0aGlzLmEsTUQoYSkpfTtfLkZiPWZ1bmN0aW9uIGQ0YihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciB5Uj1qZWIoV3ZlLCdJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDEkVHlwZScsMTU0MCk7WWNiKDE1NDEsMSx7fSxlNGIpO18uS2I9ZnVuY3Rpb24gZjRiKGEpe3JldHVybiBKRChhLDE4KS5jLml9O18uRmI9ZnVuY3Rpb24gZzRiKGEpe3JldHVybiB0aGlzPT09YX07dmFyIHpSPWplYihXdmUsJ0ludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkMiRUeXBlJywxNTQxKTtZY2IoMTU0MiwxLHt9LGg0Yik7Xy5LYj1mdW5jdGlvbiBpNGIoYSl7cmV0dXJuIFczYih0aGlzLmEsTUQoYSkpfTtfLkZiPWZ1bmN0aW9uIGo0YihhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBBUj1qZWIoV3ZlLCdJbnRlcmFjdGl2ZUV4dGVybmFsUG9ydFBvc2l0aW9uZXIvbGFtYmRhJDMkVHlwZScsMTU0Mik7WWNiKDE1NDMsMSx7fSxrNGIpO18uS2I9ZnVuY3Rpb24gbDRiKGEpe3JldHVybiBYM2IodGhpcy5hLE1EKGEpKX07Xy5GYj1mdW5jdGlvbiBtNGIoYSl7cmV0dXJuIHRoaXM9PT1hfTt2YXIgQlI9amViKFd2ZSwnSW50ZXJhY3RpdmVFeHRlcm5hbFBvcnRQb3NpdGlvbmVyL2xhbWJkYSQ0JFR5cGUnLDE1NDMpO1ljYigxNTQ0LDEse30sbjRiKTtfLktiPWZ1bmN0aW9uIG80YihhKXtyZXR1cm4gWTNiKHRoaXMuYSxNRChhKSl9O18uRmI9ZnVuY3Rpb24gcDRiKGEpe3JldHVybiB0aGlzPT09YX07dmFyIENSPWplYihXdmUsJ0ludGVyYWN0aXZlRXh0ZXJuYWxQb3J0UG9zaXRpb25lci9sYW1iZGEkNSRUeXBlJywxNTQ0KTtZY2IoNzksMjMsezM6MSwzNDoxLDIzOjEsNzk6MSwxOTY6MX0sdjViKTtfLmJnPWZ1bmN0aW9uIHc1Yigpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMTU6cmV0dXJuIG5ldyBybGM7Y2FzZSAyMjpyZXR1cm4gbmV3IE5sYztjYXNlIDQ4OnJldHVybiBuZXcgV2xjO2Nhc2UgMjk6Y2FzZSAzNjpyZXR1cm4gbmV3IFk2YjtjYXNlIDMzOnJldHVybiBuZXcgdF9iO2Nhc2UgNDM6cmV0dXJuIG5ldyBDX2I7Y2FzZSAxOnJldHVybiBuZXcgSF9iO2Nhc2UgNDI6cmV0dXJuIG5ldyBLX2I7Y2FzZSA1NzpyZXR1cm4gbmV3IFgxYigoXzFiKCksJDFiKSk7Y2FzZSAwOnJldHVybiBuZXcgWDFiKChfMWIoKSxaMWIpKTtjYXNlIDI6cmV0dXJuIG5ldyBTX2I7Y2FzZSA1NTpyZXR1cm4gbmV3IFdfYjtjYXNlIDM0OnJldHVybiBuZXcgbjBiO2Nhc2UgNTI6cmV0dXJuIG5ldyBtMWI7Y2FzZSA1NjpyZXR1cm4gbmV3IGoyYjtjYXNlIDEzOnJldHVybiBuZXcgcjJiO2Nhc2UgMzk6cmV0dXJuIG5ldyBBMmI7Y2FzZSA0NTpyZXR1cm4gbmV3IE8yYjtjYXNlIDQxOnJldHVybiBuZXcgYTNiO2Nhc2UgOTpyZXR1cm4gbmV3IGszYjtjYXNlIDUwOnJldHVybiBuZXcgbGRjO2Nhc2UgMzg6cmV0dXJuIG5ldyB5M2I7Y2FzZSA0NDpyZXR1cm4gbmV3IEozYjtjYXNlIDI4OnJldHVybiBuZXcgTTNiO2Nhc2UgMzE6cmV0dXJuIG5ldyBQM2I7Y2FzZSAzOnJldHVybiBuZXcgVTNiO2Nhc2UgMTg6cmV0dXJuIG5ldyBGNWI7Y2FzZSAzMDpyZXR1cm4gbmV3IEw1YjtjYXNlIDU6cmV0dXJuIG5ldyBZNWI7Y2FzZSA1MTpyZXR1cm4gbmV3IGY2YjtjYXNlIDM1OnJldHVybiBuZXcgQzZiO2Nhc2UgMzc6cmV0dXJuIG5ldyBrN2I7Y2FzZSA1MzpyZXR1cm4gbmV3IEwwYjtjYXNlIDExOnJldHVybiBuZXcgczdiO2Nhc2UgNzpyZXR1cm4gbmV3IEM3YjtjYXNlIDQwOnJldHVybiBuZXcgUTdiO2Nhc2UgNDY6cmV0dXJuIG5ldyBUN2I7Y2FzZSAxNjpyZXR1cm4gbmV3IFg3YjtjYXNlIDEwOnJldHVybiBuZXcgbThiO2Nhc2UgNDk6cmV0dXJuIG5ldyBPOGI7Y2FzZSAyMTpyZXR1cm4gbmV3IFc4YjtjYXNlIDIzOnJldHVybiBuZXcgSUVjKChVRWMoKSxTRWMpKTtjYXNlIDg6cmV0dXJuIG5ldyBkOWI7Y2FzZSAxMjpyZXR1cm4gbmV3IGw5YjtjYXNlIDQ6cmV0dXJuIG5ldyBxOWI7Y2FzZSAxOTpyZXR1cm4gbmV3IEw5YjtjYXNlIDE3OnJldHVybiBuZXcgaGFjO2Nhc2UgNTQ6cmV0dXJuIG5ldyBrYWM7Y2FzZSA2OnJldHVybiBuZXcgX2FjO2Nhc2UgMjU6cmV0dXJuIG5ldyBvYWM7Y2FzZSAyNjpyZXR1cm4gbmV3IGhsYztjYXNlIDQ3OnJldHVybiBuZXcgRmFjO2Nhc2UgMzI6cmV0dXJuIG5ldyBrYmM7Y2FzZSAxNDpyZXR1cm4gbmV3IHhiYztjYXNlIDI3OnJldHVybiBuZXcgQ21jO2Nhc2UgMjA6cmV0dXJuIG5ldyBNYmM7Y2FzZSAyNDpyZXR1cm4gbmV3IElFYygoVUVjKCksVEVjKSk7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYigkdmUrKHRoaXMuZiE9bnVsbD90aGlzLmY6JycrdGhpcy5nKSkpO319O3ZhciBxNGIscjRiLHM0Yix0NGIsdTRiLHY0Yix3NGIseDRiLHk0Yix6NGIsQTRiLEI0YixDNGIsRDRiLEU0YixGNGIsRzRiLEg0YixJNGIsSjRiLEs0YixMNGIsTTRiLE40YixPNGIsUDRiLFE0YixSNGIsUzRiLFQ0YixVNGIsVjRiLFc0YixYNGIsWTRiLFo0YiwkNGIsXzRiLGE1YixiNWIsYzViLGQ1YixlNWIsZjViLGc1YixoNWIsaTViLGo1YixrNWIsbDViLG01YixuNWIsbzViLHA1YixxNWIscjViLHM1Yix0NWI7dmFyIEVSPWtlYihXdmUsX3ZlLDc5LE1JLHk1Yix4NWIpO3ZhciB6NWI7WWNiKDE1NDUsMSxEdmUsRjViKTtfLklmPWZ1bmN0aW9uIEc1YihhLGIpe0Q1YihKRChhLDM2KSxiKX07dmFyIEZSPWplYihXdmUsJ0ludmVydGVkUG9ydFByb2Nlc3NvcicsMTU0NSk7WWNiKDE1NDYsMSxEdmUsTDViKTtfLklmPWZ1bmN0aW9uIE01YihhLGIpe0s1YihKRChhLDM2KSxiKX07dmFyIEpSPWplYihXdmUsJ0xhYmVsQW5kTm9kZVNpemVQcm9jZXNzb3InLDE1NDYpO1ljYigxNTQ3LDEsSXJlLE41Yik7Xy5NYj1mdW5jdGlvbiBPNWIoYSl7cmV0dXJuIEpEKGEsOSkuaz09KERZYigpLEFZYil9O3ZhciBHUj1qZWIoV3ZlLCdMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDE1NDcpO1ljYigxNTQ4LDEsSXJlLFA1Yik7Xy5NYj1mdW5jdGlvbiBRNWIoYSl7cmV0dXJuIEpEKGEsOSkuaz09KERZYigpLHdZYil9O3ZhciBIUj1qZWIoV3ZlLCdMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE1NDgpO1ljYigxNTQ5LDEsa3JlLFI1Yik7Xy5BZD1mdW5jdGlvbiBTNWIoYSl7STViKHRoaXMuYix0aGlzLmEsdGhpcy5jLEpEKGEsOSkpfTtfLmE9ZmFsc2U7Xy5jPWZhbHNlO3ZhciBJUj1qZWIoV3ZlLCdMYWJlbEFuZE5vZGVTaXplUHJvY2Vzc29yL2xhbWJkYSQyJFR5cGUnLDE1NDkpO1ljYigxNTUwLDEsRHZlLFk1Yik7Xy5JZj1mdW5jdGlvbiBaNWIoYSxiKXtXNWIoSkQoYSwzNiksYil9O3ZhciBUNWI7dmFyIExSPWplYihXdmUsJ0xhYmVsRHVtbXlJbnNlcnRlcicsMTU1MCk7WWNiKDE1NTEsMSxUdGUsJDViKTtfLkxiPWZ1bmN0aW9uIF81YihhKXtyZXR1cm4gWEQoV01iKEpEKGEsNzIpLChCd2MoKSx3dWMpKSk9PT1YRCgobmhkKCksa2hkKSl9O18uRmI9ZnVuY3Rpb24gYTZiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBiNmIoYSl7cmV0dXJuIFhEKFdNYihKRChhLDcyKSwoQndjKCksd3VjKSkpPT09WEQoKG5oZCgpLGtoZCkpfTt2YXIgS1I9amViKFd2ZSwnTGFiZWxEdW1teUluc2VydGVyLzEnLDE1NTEpO1ljYigxNTUyLDEsRHZlLGY2Yik7Xy5JZj1mdW5jdGlvbiBnNmIoYSxiKXtlNmIoSkQoYSwzNiksYil9O3ZhciBOUj1qZWIoV3ZlLCdMYWJlbER1bW15UmVtb3ZlcicsMTU1Mik7WWNiKDE1NTMsMSxJcmUsaDZiKTtfLk1iPWZ1bmN0aW9uIGk2YihhKXtyZXR1cm4geWRiKExEKFdNYihKRChhLDcyKSwoQndjKCksdnVjKSkpKX07dmFyIE1SPWplYihXdmUsJ0xhYmVsRHVtbXlSZW1vdmVyL2xhbWJkYSQwJFR5cGUnLDE1NTMpO1ljYigxMzE3LDEsRHZlLEM2Yik7Xy5JZj1mdW5jdGlvbiBHNmIoYSxiKXt5NmIodGhpcyxKRChhLDM2KSxiKX07Xy5hPW51bGw7dmFyIGo2Yjt2YXIgVVI9amViKFd2ZSwnTGFiZWxEdW1teVN3aXRjaGVyJywxMzE3KTtZY2IoMjkxLDEsezI5MToxfSxLNmIpO18uYz0wO18uZD1udWxsO18uZj0wO3ZhciBPUj1qZWIoV3ZlLCdMYWJlbER1bW15U3dpdGNoZXIvTGFiZWxEdW1teUluZm8nLDI5MSk7WWNiKDEzMTgsMSx7fSxMNmIpO18uS2I9ZnVuY3Rpb24gTTZiKGEpe3JldHVybiBrNmIoKSxuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDI1KS5hLDE2KSl9O3ZhciBQUj1qZWIoV3ZlLCdMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDAkVHlwZScsMTMxOCk7WWNiKDEzMTksMSxJcmUsTjZiKTtfLk1iPWZ1bmN0aW9uIE82YihhKXtyZXR1cm4gazZiKCksSkQoYSw5KS5rPT0oRFliKCkseFliKX07dmFyIFFSPWplYihXdmUsJ0xhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkMSRUeXBlJywxMzE5KTtZY2IoMTMyMCwxLHt9LFA2Yik7Xy5LYj1mdW5jdGlvbiBRNmIoYSl7cmV0dXJuIEQ2Yih0aGlzLmEsSkQoYSw5KSl9O3ZhciBSUj1qZWIoV3ZlLCdMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDIkVHlwZScsMTMyMCk7WWNiKDEzMjEsMSxrcmUsUjZiKTtfLkFkPWZ1bmN0aW9uIFM2YihhKXtFNmIodGhpcy5hLEpEKGEsMjkxKSl9O3ZhciBTUj1qZWIoV3ZlLCdMYWJlbER1bW15U3dpdGNoZXIvbGFtYmRhJDMkVHlwZScsMTMyMSk7WWNiKDEzMjIsMSxCdGUsVDZiKTtfLkxlPWZ1bmN0aW9uIFU2YihhLGIpe3JldHVybiBGNmIoSkQoYSwyOTEpLEpEKGIsMjkxKSl9O18uRmI9ZnVuY3Rpb24gVjZiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBXNmIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFRSPWplYihXdmUsJ0xhYmVsRHVtbXlTd2l0Y2hlci9sYW1iZGEkNCRUeXBlJywxMzIyKTtZY2IoNzgyLDEsRHZlLFk2Yik7Xy5JZj1mdW5jdGlvbiBaNmIoYSxiKXtYNmIoSkQoYSwzNiksYil9O3ZhciBWUj1qZWIoV3ZlLCdMYWJlbE1hbmFnZW1lbnRQcm9jZXNzb3InLDc4Mik7WWNiKDE1NTQsMSxEdmUsazdiKTtfLklmPWZ1bmN0aW9uIGw3YihhLGIpe2U3YihKRChhLDM2KSxiKX07dmFyIFdSPWplYihXdmUsJ0xhYmVsU2lkZVNlbGVjdG9yJywxNTU0KTtZY2IoMTU2MiwxLER2ZSxzN2IpO18uSWY9ZnVuY3Rpb24gdDdiKGEsYil7bzdiKEpEKGEsMzYpLGIpfTt2YXIgWFI9amViKFd2ZSwnTGF5ZXJDb25zdHJhaW50UG9zdHByb2Nlc3NvcicsMTU2Mik7WWNiKDE1NjMsMSxEdmUsQzdiKTtfLklmPWZ1bmN0aW9uIEQ3YihhLGIpe0E3YihKRChhLDM2KSxiKX07dmFyIHU3Yjt2YXIgWlI9amViKFd2ZSwnTGF5ZXJDb25zdHJhaW50UHJlcHJvY2Vzc29yJywxNTYzKTtZY2IoMzY0LDIzLHszOjEsMzQ6MSwyMzoxLDM2NDoxfSxLN2IpO3ZhciBFN2IsRjdiLEc3YixIN2I7dmFyIFlSPWtlYihXdmUsJ0xheWVyQ29uc3RyYWludFByZXByb2Nlc3Nvci9IaWRkZW5Ob2RlQ29ubmVjdGlvbnMnLDM2NCxNSSxNN2IsTDdiKTt2YXIgTjdiO1ljYigxNTY0LDEsRHZlLFE3Yik7Xy5JZj1mdW5jdGlvbiBSN2IoYSxiKXtQN2IoSkQoYSwzNiksYil9O3ZhciAkUj1qZWIoV3ZlLCdMYXllclNpemVBbmRHcmFwaEhlaWdodENhbGN1bGF0b3InLDE1NjQpO1ljYigxNTY1LDEsRHZlLFQ3Yik7Xy5JZj1mdW5jdGlvbiBWN2IoYSxiKXtTN2IoSkQoYSwzNiksYil9O3ZhciBfUj1qZWIoV3ZlLCdMb25nRWRnZUpvaW5lcicsMTU2NSk7WWNiKDE1NjYsMSxEdmUsWDdiKTtfLklmPWZ1bmN0aW9uIFo3YihhLGIpe1c3YihKRChhLDM2KSxiKX07dmFyIGFTPWplYihXdmUsJ0xvbmdFZGdlU3BsaXR0ZXInLDE1NjYpO1ljYigxNTY3LDEsRHZlLG04Yik7Xy5JZj1mdW5jdGlvbiBwOGIoYSxiKXtnOGIodGhpcyxKRChhLDM2KSxiKX07Xy5lPTA7Xy5mPTA7Xy5qPTA7Xy5rPTA7Xy5uPTA7Xy5vPTA7dmFyIGE4YixiOGI7dmFyIGdTPWplYihXdmUsJ05vZGVQcm9tb3Rpb24nLDE1NjcpO1ljYigxNTY4LDEsQnRlLHI4Yik7Xy5MZT1mdW5jdGlvbiBzOGIoYSxiKXtyZXR1cm4gcThiKEpEKGEsOSksSkQoYiw5KSl9O18uRmI9ZnVuY3Rpb24gdDhiKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiB1OGIoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIGJTPWplYihXdmUsJ05vZGVQcm9tb3Rpb24vMScsMTU2OCk7WWNiKDE1NjksMSxCdGUsdzhiKTtfLkxlPWZ1bmN0aW9uIHg4YihhLGIpe3JldHVybiB2OGIoSkQoYSw5KSxKRChiLDkpKX07Xy5GYj1mdW5jdGlvbiB5OGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIHo4Yigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgY1M9amViKFd2ZSwnTm9kZVByb21vdGlvbi8yJywxNTY5KTtZY2IoMTU3MCwxLHt9LEE4Yik7Xy5LYj1mdW5jdGlvbiBCOGIoYSl7cmV0dXJuIEpEKGEsNDcpLGM4YigpLHhkYigpLHRydWV9O18uRmI9ZnVuY3Rpb24gQzhiKGEpe3JldHVybiB0aGlzPT09YX07dmFyIGRTPWplYihXdmUsJ05vZGVQcm9tb3Rpb24vbGFtYmRhJDAkVHlwZScsMTU3MCk7WWNiKDE1NzEsMSx7fSxEOGIpO18uS2I9ZnVuY3Rpb24gRThiKGEpe3JldHVybiBuOGIodGhpcy5hLEpEKGEsNDcpKX07Xy5GYj1mdW5jdGlvbiBGOGIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLmE9MDt2YXIgZVM9amViKFd2ZSwnTm9kZVByb21vdGlvbi9sYW1iZGEkMSRUeXBlJywxNTcxKTtZY2IoMTU3MiwxLHt9LEc4Yik7Xy5LYj1mdW5jdGlvbiBIOGIoYSl7cmV0dXJuIG84Yih0aGlzLmEsSkQoYSw0NykpfTtfLkZiPWZ1bmN0aW9uIEk4YihhKXtyZXR1cm4gdGhpcz09PWF9O18uYT0wO3ZhciBmUz1qZWIoV3ZlLCdOb2RlUHJvbW90aW9uL2xhbWJkYSQyJFR5cGUnLDE1NzIpO1ljYigxNTczLDEsRHZlLE84Yik7Xy5JZj1mdW5jdGlvbiBQOGIoYSxiKXtKOGIoSkQoYSwzNiksYil9O3ZhciBoUz1qZWIoV3ZlLCdOb3J0aFNvdXRoUG9ydFBvc3Rwcm9jZXNzb3InLDE1NzMpO1ljYigxNTc0LDEsRHZlLFc4Yik7Xy5JZj1mdW5jdGlvbiBZOGIoYSxiKXtVOGIoSkQoYSwzNiksYil9O3ZhciBqUz1qZWIoV3ZlLCdOb3J0aFNvdXRoUG9ydFByZXByb2Nlc3NvcicsMTU3NCk7WWNiKDE1NzUsMSxCdGUsWjhiKTtfLkxlPWZ1bmN0aW9uICQ4YihhLGIpe3JldHVybiBYOGIoSkQoYSwxMSksSkQoYiwxMSkpfTtfLkZiPWZ1bmN0aW9uIF84YihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gYTliKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBpUz1qZWIoV3ZlLCdOb3J0aFNvdXRoUG9ydFByZXByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxNTc1KTtZY2IoMTU3NiwxLER2ZSxkOWIpO18uSWY9ZnVuY3Rpb24gZjliKGEsYil7YzliKEpEKGEsMzYpLGIpfTt2YXIgbVM9amViKFd2ZSwnUGFydGl0aW9uTWlkcHJvY2Vzc29yJywxNTc2KTtZY2IoMTU3NywxLElyZSxnOWIpO18uTWI9ZnVuY3Rpb24gaDliKGEpe3JldHVybiBYTWIoSkQoYSw5KSwoQndjKCksd3ZjKSl9O3ZhciBrUz1qZWIoV3ZlLCdQYXJ0aXRpb25NaWRwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTU3Nyk7WWNiKDE1NzgsMSxrcmUsaTliKTtfLkFkPWZ1bmN0aW9uIGo5YihhKXtlOWIodGhpcy5hLEpEKGEsOSkpfTt2YXIgbFM9amViKFd2ZSwnUGFydGl0aW9uTWlkcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE1NzgpO1ljYigxNTc5LDEsRHZlLGw5Yik7Xy5JZj1mdW5jdGlvbiBtOWIoYSxiKXtrOWIoSkQoYSwzNiksYil9O3ZhciBuUz1qZWIoV3ZlLCdQYXJ0aXRpb25Qb3N0cHJvY2Vzc29yJywxNTc5KTtZY2IoMTU4MCwxLER2ZSxxOWIpO18uSWY9ZnVuY3Rpb24gcjliKGEsYil7bzliKEpEKGEsMzYpLGIpfTt2YXIgc1M9amViKFd2ZSwnUGFydGl0aW9uUHJlcHJvY2Vzc29yJywxNTgwKTtZY2IoMTU4MSwxLElyZSxzOWIpO18uTWI9ZnVuY3Rpb24gdDliKGEpe3JldHVybiBYTWIoSkQoYSw5KSwoQndjKCksd3ZjKSl9O3ZhciBvUz1qZWIoV3ZlLCdQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTU4MSk7WWNiKDE1ODIsMSx7fSx1OWIpO18uS2I9ZnVuY3Rpb24gdjliKGEpe3JldHVybiBuZXcgUkJiKG51bGwsbmV3IEh2YihuZXcgZXMoSXIoa1liKEpEKGEsOSkpLmEuSmMoKSxuZXcgZXIpKSkpfTt2YXIgcFM9amViKFd2ZSwnUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE1ODIpO1ljYigxNTgzLDEsSXJlLHc5Yik7Xy5NYj1mdW5jdGlvbiB4OWIoYSl7cmV0dXJuIG45YihKRChhLDE4KSl9O3ZhciBxUz1qZWIoV3ZlLCdQYXJ0aXRpb25QcmVwcm9jZXNzb3IvbGFtYmRhJDIkVHlwZScsMTU4Myk7WWNiKDE1ODQsMSxrcmUseTliKTtfLkFkPWZ1bmN0aW9uIHo5YihhKXtwOWIoSkQoYSwxOCkpfTt2YXIgclM9amViKFd2ZSwnUGFydGl0aW9uUHJlcHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUnLDE1ODQpO1ljYigxNTg1LDEsRHZlLEw5Yik7Xy5JZj1mdW5jdGlvbiBQOWIoYSxiKXtJOWIoSkQoYSwzNiksYil9O3ZhciBBOWIsQjliLEM5YixEOWIsRTliLEY5Yjt2YXIgeVM9amViKFd2ZSwnUG9ydExpc3RTb3J0ZXInLDE1ODUpO1ljYigxNTg2LDEse30sUjliKTtfLktiPWZ1bmN0aW9uIFM5YihhKXtyZXR1cm4gRzliKCksSkQoYSwxMSkuZX07dmFyIHRTPWplYihXdmUsJ1BvcnRMaXN0U29ydGVyL2xhbWJkYSQwJFR5cGUnLDE1ODYpO1ljYigxNTg3LDEse30sVDliKTtfLktiPWZ1bmN0aW9uIFU5YihhKXtyZXR1cm4gRzliKCksSkQoYSwxMSkuZ307dmFyIHVTPWplYihXdmUsJ1BvcnRMaXN0U29ydGVyL2xhbWJkYSQxJFR5cGUnLDE1ODcpO1ljYigxNTg4LDEsQnRlLFY5Yik7Xy5MZT1mdW5jdGlvbiBXOWIoYSxiKXtyZXR1cm4gTTliKEpEKGEsMTEpLEpEKGIsMTEpKX07Xy5GYj1mdW5jdGlvbiBYOWIoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFk5Yigpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgdlM9amViKFd2ZSwnUG9ydExpc3RTb3J0ZXIvbGFtYmRhJDIkVHlwZScsMTU4OCk7WWNiKDE1ODksMSxCdGUsWjliKTtfLkxlPWZ1bmN0aW9uICQ5YihhLGIpe3JldHVybiBOOWIoSkQoYSwxMSksSkQoYiwxMSkpfTtfLkZiPWZ1bmN0aW9uIF85YihhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gYWFjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciB3Uz1qZWIoV3ZlLCdQb3J0TGlzdFNvcnRlci9sYW1iZGEkMyRUeXBlJywxNTg5KTtZY2IoMTU5MCwxLEJ0ZSxiYWMpO18uTGU9ZnVuY3Rpb24gY2FjKGEsYil7cmV0dXJuIE85YihKRChhLDExKSxKRChiLDExKSl9O18uRmI9ZnVuY3Rpb24gZGFjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBlYWMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIHhTPWplYihXdmUsJ1BvcnRMaXN0U29ydGVyL2xhbWJkYSQ0JFR5cGUnLDE1OTApO1ljYigxNTkxLDEsRHZlLGhhYyk7Xy5JZj1mdW5jdGlvbiBpYWMoYSxiKXtmYWMoSkQoYSwzNiksYil9O3ZhciB6Uz1qZWIoV3ZlLCdQb3J0U2lkZVByb2Nlc3NvcicsMTU5MSk7WWNiKDE1OTIsMSxEdmUsa2FjKTtfLklmPWZ1bmN0aW9uIGxhYyhhLGIpe2phYyhKRChhLDM2KSxiKX07dmFyIEFTPWplYihXdmUsJ1JldmVyc2VkRWRnZVJlc3RvcmVyJywxNTkyKTtZY2IoMTU5NywxLER2ZSxvYWMpO18uSWY9ZnVuY3Rpb24gcGFjKGEsYil7bWFjKHRoaXMsSkQoYSwzNiksYil9O3ZhciBIUz1qZWIoV3ZlLCdTZWxmTG9vcFBvcnRSZXN0b3JlcicsMTU5Nyk7WWNiKDE1OTgsMSx7fSxxYWMpO18uS2I9ZnVuY3Rpb24gcmFjKGEpe3JldHVybiBuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDI1KS5hLDE2KSl9O3ZhciBCUz1qZWIoV3ZlLCdTZWxmTG9vcFBvcnRSZXN0b3Jlci9sYW1iZGEkMCRUeXBlJywxNTk4KTtZY2IoMTU5OSwxLElyZSxzYWMpO18uTWI9ZnVuY3Rpb24gdGFjKGEpe3JldHVybiBKRChhLDkpLms9PShEWWIoKSxBWWIpfTt2YXIgQ1M9amViKFd2ZSwnU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZScsMTU5OSk7WWNiKDE2MDAsMSxJcmUsdWFjKTtfLk1iPWZ1bmN0aW9uIHZhYyhhKXtyZXR1cm4gWE1iKEpEKGEsOSksKElxYygpLHpxYykpfTt2YXIgRFM9amViKFd2ZSwnU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDIkVHlwZScsMTYwMCk7WWNiKDE2MDEsMSx7fSx3YWMpO18uS2I9ZnVuY3Rpb24geGFjKGEpe3JldHVybiBKRChXTWIoSkQoYSw5KSwoSXFjKCksenFjKSksMzMzKX07dmFyIEVTPWplYihXdmUsJ1NlbGZMb29wUG9ydFJlc3RvcmVyL2xhbWJkYSQzJFR5cGUnLDE2MDEpO1ljYigxNjAyLDEsa3JlLHlhYyk7Xy5BZD1mdW5jdGlvbiB6YWMoYSl7bmFjKHRoaXMuYSxKRChhLDMzMykpfTt2YXIgRlM9amViKFd2ZSwnU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDQkVHlwZScsMTYwMik7WWNiKDc4NSwxLGtyZSxBYWMpO18uQWQ9ZnVuY3Rpb24gQmFjKGEpe29nYyhKRChhLDEwNSkpfTt2YXIgR1M9amViKFd2ZSwnU2VsZkxvb3BQb3J0UmVzdG9yZXIvbGFtYmRhJDUkVHlwZScsNzg1KTtZY2IoMTYwNCwxLER2ZSxGYWMpO18uSWY9ZnVuY3Rpb24gSGFjKGEsYil7Q2FjKEpEKGEsMzYpLGIpfTt2YXIgUVM9amViKFd2ZSwnU2VsZkxvb3BQb3N0UHJvY2Vzc29yJywxNjA0KTtZY2IoMTYwNSwxLHt9LElhYyk7Xy5LYj1mdW5jdGlvbiBKYWMoYSl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgR3ZiKEpEKGEsMjUpLmEsMTYpKX07dmFyIElTPWplYihXdmUsJ1NlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxNjA1KTtZY2IoMTYwNiwxLElyZSxLYWMpO18uTWI9ZnVuY3Rpb24gTGFjKGEpe3JldHVybiBKRChhLDkpLms9PShEWWIoKSxBWWIpfTt2YXIgSlM9amViKFd2ZSwnU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE2MDYpO1ljYigxNjA3LDEsSXJlLE1hYyk7Xy5NYj1mdW5jdGlvbiBOYWMoYSl7cmV0dXJuIFhNYihKRChhLDkpLChJcWMoKSx6cWMpKX07dmFyIEtTPWplYihXdmUsJ1NlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMiRUeXBlJywxNjA3KTtZY2IoMTYwOCwxLGtyZSxPYWMpO18uQWQ9ZnVuY3Rpb24gUGFjKGEpe0RhYyhKRChhLDkpKX07dmFyIExTPWplYihXdmUsJ1NlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkMyRUeXBlJywxNjA4KTtZY2IoMTYwOSwxLHt9LFFhYyk7Xy5LYj1mdW5jdGlvbiBSYWMoYSl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgR3ZiKEpEKGEsMTA1KS5mLDEpKX07dmFyIE1TPWplYihXdmUsJ1NlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNCRUeXBlJywxNjA5KTtZY2IoMTYxMCwxLGtyZSxTYWMpO18uQWQ9ZnVuY3Rpb24gVGFjKGEpe0VhYyh0aGlzLmEsSkQoYSwzMzYpKX07dmFyIE5TPWplYihXdmUsJ1NlbGZMb29wUG9zdFByb2Nlc3Nvci9sYW1iZGEkNSRUeXBlJywxNjEwKTtZY2IoMTYxMSwxLElyZSxVYWMpO18uTWI9ZnVuY3Rpb24gVmFjKGEpe3JldHVybiAhIUpEKGEsMTA1KS5pfTt2YXIgT1M9amViKFd2ZSwnU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ2JFR5cGUnLDE2MTEpO1ljYigxNjEyLDEsa3JlLFdhYyk7Xy5BZD1mdW5jdGlvbiBYYWMoYSl7R2FjKHRoaXMuYSxKRChhLDEwNSkpfTt2YXIgUFM9amViKFd2ZSwnU2VsZkxvb3BQb3N0UHJvY2Vzc29yL2xhbWJkYSQ3JFR5cGUnLDE2MTIpO1ljYigxNTkzLDEsRHZlLF9hYyk7Xy5JZj1mdW5jdGlvbiBhYmMoYSxiKXskYWMoSkQoYSwzNiksYil9O3ZhciBVUz1qZWIoV3ZlLCdTZWxmTG9vcFByZVByb2Nlc3NvcicsMTU5Myk7WWNiKDE1OTQsMSx7fSxiYmMpO18uS2I9ZnVuY3Rpb24gY2JjKGEpe3JldHVybiBuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDEwNSkuZiwxKSl9O3ZhciBSUz1qZWIoV3ZlLCdTZWxmTG9vcFByZVByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxNTk0KTtZY2IoMTU5NSwxLHt9LGRiYyk7Xy5LYj1mdW5jdGlvbiBlYmMoYSl7cmV0dXJuIEpEKGEsMzM2KS5hfTt2YXIgU1M9amViKFd2ZSwnU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZScsMTU5NSk7WWNiKDE1OTYsMSxrcmUsZmJjKTtfLkFkPWZ1bmN0aW9uIGdiYyhhKXtaYWMoSkQoYSwxOCkpfTt2YXIgVFM9amViKFd2ZSwnU2VsZkxvb3BQcmVQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZScsMTU5Nik7WWNiKDE2MTMsMSxEdmUsa2JjKTtfLklmPWZ1bmN0aW9uIGxiYyhhLGIpe2liYyh0aGlzLEpEKGEsMzYpLGIpfTt2YXIgJFM9amViKFd2ZSwnU2VsZkxvb3BSb3V0ZXInLDE2MTMpO1ljYigxNjE0LDEse30sbWJjKTtfLktiPWZ1bmN0aW9uIG5iYyhhKXtyZXR1cm4gbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSwyNSkuYSwxNikpfTt2YXIgVlM9amViKFd2ZSwnU2VsZkxvb3BSb3V0ZXIvbGFtYmRhJDAkVHlwZScsMTYxNCk7WWNiKDE2MTUsMSxJcmUsb2JjKTtfLk1iPWZ1bmN0aW9uIHBiYyhhKXtyZXR1cm4gSkQoYSw5KS5rPT0oRFliKCksQVliKX07dmFyIFdTPWplYihXdmUsJ1NlbGZMb29wUm91dGVyL2xhbWJkYSQxJFR5cGUnLDE2MTUpO1ljYigxNjE2LDEsSXJlLHFiYyk7Xy5NYj1mdW5jdGlvbiByYmMoYSl7cmV0dXJuIFhNYihKRChhLDkpLChJcWMoKSx6cWMpKX07dmFyIFhTPWplYihXdmUsJ1NlbGZMb29wUm91dGVyL2xhbWJkYSQyJFR5cGUnLDE2MTYpO1ljYigxNjE3LDEse30sc2JjKTtfLktiPWZ1bmN0aW9uIHRiYyhhKXtyZXR1cm4gSkQoV01iKEpEKGEsOSksKElxYygpLHpxYykpLDMzMyl9O3ZhciBZUz1qZWIoV3ZlLCdTZWxmTG9vcFJvdXRlci9sYW1iZGEkMyRUeXBlJywxNjE3KTtZY2IoMTYxOCwxLGtyZSx1YmMpO18uQWQ9ZnVuY3Rpb24gdmJjKGEpe2hiYyh0aGlzLmEsdGhpcy5iLEpEKGEsMzMzKSl9O3ZhciBaUz1qZWIoV3ZlLCdTZWxmTG9vcFJvdXRlci9sYW1iZGEkNCRUeXBlJywxNjE4KTtZY2IoMTYxOSwxLER2ZSx4YmMpO18uSWY9ZnVuY3Rpb24gQWJjKGEsYil7d2JjKEpEKGEsMzYpLGIpfTt2YXIgZFQ9amViKFd2ZSwnU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3InLDE2MTkpO1ljYigxNjIwLDEsSXJlLEJiYyk7Xy5NYj1mdW5jdGlvbiBDYmMoYSl7cmV0dXJuIEpEKGEsOSkuaz09KERZYigpLEFZYil9O3ZhciBfUz1qZWIoV3ZlLCdTZW1pSW50ZXJhY3RpdmVDcm9zc01pblByb2Nlc3Nvci9sYW1iZGEkMCRUeXBlJywxNjIwKTtZY2IoMTYyMSwxLElyZSxEYmMpO18uTWI9ZnVuY3Rpb24gRWJjKGEpe3JldHVybiBWTWIoSkQoYSw5KSkuX2IoKEJ3YygpLEx2YykpfTt2YXIgYVQ9amViKFd2ZSwnU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDEkVHlwZScsMTYyMSk7WWNiKDE2MjIsMSxCdGUsRmJjKTtfLkxlPWZ1bmN0aW9uIEdiYyhhLGIpe3JldHVybiB5YmMoSkQoYSw5KSxKRChiLDkpKX07Xy5GYj1mdW5jdGlvbiBIYmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIEliYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgYlQ9amViKFd2ZSwnU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDIkVHlwZScsMTYyMik7WWNiKDE2MjMsMSx7fSxKYmMpO18uVGU9ZnVuY3Rpb24gS2JjKGEsYil7cmV0dXJuIHpiYyhKRChhLDkpLEpEKGIsOSkpfTt2YXIgY1Q9amViKFd2ZSwnU2VtaUludGVyYWN0aXZlQ3Jvc3NNaW5Qcm9jZXNzb3IvbGFtYmRhJDMkVHlwZScsMTYyMyk7WWNiKDE2MjUsMSxEdmUsTWJjKTtfLklmPWZ1bmN0aW9uIFJiYyhhLGIpe0xiYyhKRChhLDM2KSxiKX07dmFyIGdUPWplYihXdmUsJ1NvcnRCeUlucHV0TW9kZWxQcm9jZXNzb3InLDE2MjUpO1ljYigxNjI2LDEsSXJlLFNiYyk7Xy5NYj1mdW5jdGlvbiBUYmMoYSl7cmV0dXJuIEpEKGEsMTEpLmcuYy5sZW5ndGghPTB9O3ZhciBlVD1qZWIoV3ZlLCdTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDE2MjYpO1ljYigxNjI3LDEsa3JlLFViYyk7Xy5BZD1mdW5jdGlvbiBWYmMoYSl7UGJjKHRoaXMuYSxKRChhLDExKSl9O3ZhciBmVD1qZWIoV3ZlLCdTb3J0QnlJbnB1dE1vZGVsUHJvY2Vzc29yL2xhbWJkYSQxJFR5cGUnLDE2MjcpO1ljYigxNzA1LDc5Nyx7fSxjY2MpO18uYmY9ZnVuY3Rpb24gZGNjKGEpe3ZhciBiLGMsZCxlO3RoaXMuYz1hO3N3aXRjaCh0aGlzLmEuZyl7Y2FzZSAyOmI9bmV3IFVsYjtFQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKHRoaXMuYy5hLmIsMTYpKSxuZXcgZWRjKSxuZXcgZ2RjKHRoaXMsYikpO2RGYih0aGlzLG5ldyBtY2MpO0xsYihiLG5ldyBxY2MpO2IuYy5sZW5ndGg9MDtFQmIoQkJiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKHRoaXMuYy5hLmIsMTYpKSxuZXcgc2NjKSxuZXcgdWNjKGIpKTtkRmIodGhpcyxuZXcgeWNjKTtMbGIoYixuZXcgQ2NjKTtiLmMubGVuZ3RoPTA7Yz1LdWIoU0FiKEdCYihuZXcgUkJiKG51bGwsbmV3IEd2Yih0aGlzLmMuYS5iLDE2KSksbmV3IEVjYyh0aGlzKSkpLG5ldyBHY2MpO0VCYihuZXcgUkJiKG51bGwsbmV3IEd2Yih0aGlzLmMuYS5hLDE2KSksbmV3IEtjYyhjLGIpKTtkRmIodGhpcyxuZXcgT2NjKTtMbGIoYixuZXcgU2NjKTtiLmMubGVuZ3RoPTA7YnJlYWs7Y2FzZSAzOmQ9bmV3IFVsYjtkRmIodGhpcyxuZXcgZWNjKTtlPUt1YihTQWIoR0JiKG5ldyBSQmIobnVsbCxuZXcgR3ZiKHRoaXMuYy5hLmIsMTYpKSxuZXcgaWNjKHRoaXMpKSksbmV3IEljYyk7RUJiKEJCYihuZXcgUkJiKG51bGwsbmV3IEd2Yih0aGlzLmMuYS5iLDE2KSksbmV3IFVjYyksbmV3IFdjYyhlLGQpKTtkRmIodGhpcyxuZXcgJGNjKTtMbGIoZCxuZXcgY2RjKTtkLmMubGVuZ3RoPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFg4Yyk7fX07Xy5iPTA7dmFyIEZUPWplYihld2UsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uJywxNzA1KTtZY2IoMTcwNiwxLFR0ZSxlY2MpO18uTGI9ZnVuY3Rpb24gZmNjKGEpe3JldHVybiBSRChKRChhLDYwKS5nLDE1Mil9O18uRmI9ZnVuY3Rpb24gZ2NjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBoY2MoYSl7cmV0dXJuIFJEKEpEKGEsNjApLmcsMTUyKX07dmFyIGhUPWplYihld2UsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQwJFR5cGUnLDE3MDYpO1ljYigxNzA3LDEse30saWNjKTtfLldlPWZ1bmN0aW9uIGpjYyhhKXtyZXR1cm4gWWJjKHRoaXMuYSxKRChhLDYwKSl9O3ZhciBpVD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMSRUeXBlJywxNzA3KTtZY2IoMTcxNSwxLEpyZSxrY2MpO18uYmU9ZnVuY3Rpb24gbGNjKCl7WGJjKHRoaXMuYSx0aGlzLmIsLTEpfTtfLmI9MDt2YXIgalQ9amViKGV3ZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDEwJFR5cGUnLDE3MTUpO1ljYigxNzE3LDEsVHRlLG1jYyk7Xy5MYj1mdW5jdGlvbiBuY2MoYSl7cmV0dXJuIFJEKEpEKGEsNjApLmcsMTUyKX07Xy5GYj1mdW5jdGlvbiBvY2MoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIHBjYyhhKXtyZXR1cm4gUkQoSkQoYSw2MCkuZywxNTIpfTt2YXIga1Q9amViKGV3ZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDExJFR5cGUnLDE3MTcpO1ljYigxNzE4LDEsa3JlLHFjYyk7Xy5BZD1mdW5jdGlvbiByY2MoYSl7SkQoYSwzNzIpLmJlKCl9O3ZhciBsVD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTIkVHlwZScsMTcxOCk7WWNiKDE3MTksMSxJcmUsc2NjKTtfLk1iPWZ1bmN0aW9uIHRjYyhhKXtyZXR1cm4gUkQoSkQoYSw2MCkuZyw5KX07dmFyIG1UPWplYihld2UsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxMyRUeXBlJywxNzE5KTtZY2IoMTcyMSwxLGtyZSx1Y2MpO18uQWQ9ZnVuY3Rpb24gdmNjKGEpe1piYyh0aGlzLmEsSkQoYSw2MCkpfTt2YXIgblQ9amViKGV3ZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE0JFR5cGUnLDE3MjEpO1ljYigxNzIwLDEsSnJlLHdjYyk7Xy5iZT1mdW5jdGlvbiB4Y2MoKXtYYmModGhpcy5iLHRoaXMuYSwtMSl9O18uYT0wO3ZhciBvVD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTUkVHlwZScsMTcyMCk7WWNiKDE3MjIsMSxUdGUseWNjKTtfLkxiPWZ1bmN0aW9uIHpjYyhhKXtyZXR1cm4gUkQoSkQoYSw2MCkuZyw5KX07Xy5GYj1mdW5jdGlvbiBBY2MoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIEJjYyhhKXtyZXR1cm4gUkQoSkQoYSw2MCkuZyw5KX07dmFyIHBUPWplYihld2UsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQxNiRUeXBlJywxNzIyKTtZY2IoMTcyMywxLGtyZSxDY2MpO18uQWQ9ZnVuY3Rpb24gRGNjKGEpe0pEKGEsMzcyKS5iZSgpfTt2YXIgcVQ9amViKGV3ZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDE3JFR5cGUnLDE3MjMpO1ljYigxNzI0LDEse30sRWNjKTtfLldlPWZ1bmN0aW9uIEZjYyhhKXtyZXR1cm4gJGJjKHRoaXMuYSxKRChhLDYwKSl9O3ZhciByVD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTgkVHlwZScsMTcyNCk7WWNiKDE3MjUsMSx7fSxHY2MpO18uVWU9ZnVuY3Rpb24gSGNjKCl7cmV0dXJuIDB9O3ZhciBzVD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMTkkVHlwZScsMTcyNSk7WWNiKDE3MDgsMSx7fSxJY2MpO18uVWU9ZnVuY3Rpb24gSmNjKCl7cmV0dXJuIDB9O3ZhciB0VD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMiRUeXBlJywxNzA4KTtZY2IoMTcyNywxLGtyZSxLY2MpO18uQWQ9ZnVuY3Rpb24gTGNjKGEpe19iYyh0aGlzLmEsdGhpcy5iLEpEKGEsMzE3KSl9O18uYT0wO3ZhciB1VD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjAkVHlwZScsMTcyNyk7WWNiKDE3MjYsMSxKcmUsTWNjKTtfLmJlPWZ1bmN0aW9uIE5jYygpe1diYyh0aGlzLmEsdGhpcy5iLC0xKX07Xy5iPTA7dmFyIHZUPWplYihld2UsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQyMSRUeXBlJywxNzI2KTtZY2IoMTcyOCwxLFR0ZSxPY2MpO18uTGI9ZnVuY3Rpb24gUGNjKGEpe3JldHVybiBKRChhLDYwKSx0cnVlfTtfLkZiPWZ1bmN0aW9uIFFjYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gUmNjKGEpe3JldHVybiBKRChhLDYwKSx0cnVlfTt2YXIgd1Q9amViKGV3ZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDIyJFR5cGUnLDE3MjgpO1ljYigxNzI5LDEsa3JlLFNjYyk7Xy5BZD1mdW5jdGlvbiBUY2MoYSl7SkQoYSwzNzIpLmJlKCl9O3ZhciB4VD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkMjMkVHlwZScsMTcyOSk7WWNiKDE3MDksMSxJcmUsVWNjKTtfLk1iPWZ1bmN0aW9uIFZjYyhhKXtyZXR1cm4gUkQoSkQoYSw2MCkuZyw5KX07dmFyIHlUPWplYihld2UsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQzJFR5cGUnLDE3MDkpO1ljYigxNzExLDEsa3JlLFdjYyk7Xy5BZD1mdW5jdGlvbiBYY2MoYSl7YWNjKHRoaXMuYSx0aGlzLmIsSkQoYSw2MCkpfTtfLmE9MDt2YXIgelQ9amViKGV3ZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDQkVHlwZScsMTcxMSk7WWNiKDE3MTAsMSxKcmUsWWNjKTtfLmJlPWZ1bmN0aW9uIFpjYygpe1hiYyh0aGlzLmIsdGhpcy5hLC0xKX07Xy5hPTA7dmFyIEFUPWplYihld2UsJ0VkZ2VBd2FyZVNjYW5saW5lQ29uc3RyYWludENhbGN1bGF0aW9uL2xhbWJkYSQ1JFR5cGUnLDE3MTApO1ljYigxNzEyLDEsVHRlLCRjYyk7Xy5MYj1mdW5jdGlvbiBfY2MoYSl7cmV0dXJuIEpEKGEsNjApLHRydWV9O18uRmI9ZnVuY3Rpb24gYWRjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBiZGMoYSl7cmV0dXJuIEpEKGEsNjApLHRydWV9O3ZhciBCVD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkNiRUeXBlJywxNzEyKTtZY2IoMTcxMywxLGtyZSxjZGMpO18uQWQ9ZnVuY3Rpb24gZGRjKGEpe0pEKGEsMzcyKS5iZSgpfTt2YXIgQ1Q9amViKGV3ZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDckVHlwZScsMTcxMyk7WWNiKDE3MTQsMSxJcmUsZWRjKTtfLk1iPWZ1bmN0aW9uIGZkYyhhKXtyZXR1cm4gUkQoSkQoYSw2MCkuZywxNTIpfTt2YXIgRFQ9amViKGV3ZSwnRWRnZUF3YXJlU2NhbmxpbmVDb25zdHJhaW50Q2FsY3VsYXRpb24vbGFtYmRhJDgkVHlwZScsMTcxNCk7WWNiKDE3MTYsMSxrcmUsZ2RjKTtfLkFkPWZ1bmN0aW9uIGhkYyhhKXtiY2ModGhpcy5hLHRoaXMuYixKRChhLDYwKSl9O3ZhciBFVD1qZWIoZXdlLCdFZGdlQXdhcmVTY2FubGluZUNvbnN0cmFpbnRDYWxjdWxhdGlvbi9sYW1iZGEkOSRUeXBlJywxNzE2KTtZY2IoMTUyNiwxLER2ZSxsZGMpO18uSWY9ZnVuY3Rpb24gcWRjKGEsYil7a2RjKHRoaXMsSkQoYSwzNiksYil9O3ZhciBpZGM7dmFyIEpUPWplYihld2UsJ0hvcml6b250YWxHcmFwaENvbXBhY3RvcicsMTUyNik7WWNiKDE1MjcsMSx7fSxyZGMpO18uZGY9ZnVuY3Rpb24gc2RjKGEsYil7dmFyIGMsZCxlO2lmKG9kYyhhLGIpKXtyZXR1cm4gMH1jPW1kYyhhKTtkPW1kYyhiKTtpZighIWMmJmMuaz09KERZYigpLHdZYil8fCEhZCYmZC5rPT0oRFliKCksd1liKSl7cmV0dXJuIDB9ZT1KRChXTWIodGhpcy5hLmEsKElxYygpLEFxYykpLDMxMyk7cmV0dXJuIGF6YyhlLGM/Yy5rOihEWWIoKSx5WWIpLGQ/ZC5rOihEWWIoKSx5WWIpKX07Xy5lZj1mdW5jdGlvbiB0ZGMoYSxiKXt2YXIgYyxkLGU7aWYob2RjKGEsYikpe3JldHVybiAxfWM9bWRjKGEpO2Q9bWRjKGIpO2U9SkQoV01iKHRoaXMuYS5hLChJcWMoKSxBcWMpKSwzMTMpO3JldHVybiBkemMoZSxjP2MuazooRFliKCkseVliKSxkP2QuazooRFliKCkseVliKSl9O3ZhciBHVD1qZWIoZXdlLCdIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvMScsMTUyNyk7WWNiKDE1MjgsMSx7fSx1ZGMpO18uY2Y9ZnVuY3Rpb24gdmRjKGEsYil7cmV0dXJuIGpkYygpLGEuYS5pPT0wfTt2YXIgSFQ9amViKGV3ZSwnSG9yaXpvbnRhbEdyYXBoQ29tcGFjdG9yL2xhbWJkYSQwJFR5cGUnLDE1MjgpO1ljYigxNTI5LDEse30sd2RjKTtfLmNmPWZ1bmN0aW9uIHhkYyhhLGIpe3JldHVybiBwZGModGhpcy5hLGEsYil9O3ZhciBJVD1qZWIoZXdlLCdIb3Jpem9udGFsR3JhcGhDb21wYWN0b3IvbGFtYmRhJDEkVHlwZScsMTUyOSk7WWNiKDE2NzIsMSx7fSxTZGMpO3ZhciB5ZGMsemRjO3ZhciBsVT1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyJywxNjcyKTtZY2IoMTY4MCwxLElyZSxfZGMpO18uTWI9ZnVuY3Rpb24gYWVjKGEpe3JldHVybiBhIT1udWxsfTt2YXIgS1Q9amViKGV3ZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci8wbWV0aG9kcmVmJG5vbk51bGwkVHlwZScsMTY4MCk7WWNiKDE2NzMsMSx7fSxiZWMpO18uS2I9ZnVuY3Rpb24gY2VjKGEpe3JldHVybiBBZGMoKSxhZGIoV01iKEpEKEpEKGEsNjApLmcsOSksKElxYygpLGtxYykpKX07dmFyIExUPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDAkVHlwZScsMTY3Myk7WWNiKDE2NzQsMSx7fSxkZWMpO18uS2I9ZnVuY3Rpb24gZWVjKGEpe3JldHVybiBBZGMoKSxqZmMoSkQoSkQoYSw2MCkuZywxNTIpKX07dmFyIE1UPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEkVHlwZScsMTY3NCk7WWNiKDE2ODMsMSxJcmUsZmVjKTtfLk1iPWZ1bmN0aW9uIGdlYyhhKXtyZXR1cm4gQWRjKCksUkQoSkQoYSw2MCkuZyw5KX07dmFyIE5UPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEwJFR5cGUnLDE2ODMpO1ljYigxNjg0LDEsa3JlLGhlYyk7Xy5BZD1mdW5jdGlvbiBpZWMoYSl7VGRjKEpEKGEsNjApKX07dmFyIE9UPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDExJFR5cGUnLDE2ODQpO1ljYigxNjg1LDEsSXJlLGplYyk7Xy5NYj1mdW5jdGlvbiBrZWMoYSl7cmV0dXJuIEFkYygpLFJEKEpEKGEsNjApLmcsMTUyKX07dmFyIFBUPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEyJFR5cGUnLDE2ODUpO1ljYigxNjg5LDEsa3JlLGxlYyk7Xy5BZD1mdW5jdGlvbiBtZWMoYSl7VWRjKEpEKGEsNjApKX07dmFyIFFUPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDEzJFR5cGUnLDE2ODkpO1ljYigxNjg2LDEsa3JlLG5lYyk7Xy5BZD1mdW5jdGlvbiBvZWMoYSl7VmRjKHRoaXMuYSxKRChhLDgpKX07Xy5hPTA7dmFyIFJUPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE0JFR5cGUnLDE2ODYpO1ljYigxNjg3LDEsa3JlLHBlYyk7Xy5BZD1mdW5jdGlvbiBxZWMoYSl7V2RjKHRoaXMuYSxKRChhLDExOSkpfTtfLmE9MDt2YXIgU1Q9amViKGV3ZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTUkVHlwZScsMTY4Nyk7WWNiKDE2ODgsMSxrcmUscmVjKTtfLkFkPWZ1bmN0aW9uIHNlYyhhKXtYZGModGhpcy5hLEpEKGEsOCkpfTtfLmE9MDt2YXIgVFQ9amViKGV3ZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTYkVHlwZScsMTY4OCk7WWNiKDE2OTAsMSx7fSx0ZWMpO18uS2I9ZnVuY3Rpb24gdWVjKGEpe3JldHVybiBBZGMoKSxuZXcgUkJiKG51bGwsbmV3IEh2YihuZXcgZXMoSXIoa1liKEpEKGEsOSkpLmEuSmMoKSxuZXcgZXIpKSkpfTt2YXIgVVQ9amViKGV3ZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMTckVHlwZScsMTY5MCk7WWNiKDE2OTEsMSxJcmUsdmVjKTtfLk1iPWZ1bmN0aW9uIHdlYyhhKXtyZXR1cm4gQWRjKCksZVdiKEpEKGEsMTgpKX07dmFyIFZUPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDE4JFR5cGUnLDE2OTEpO1ljYigxNjkyLDEsa3JlLHhlYyk7Xy5BZD1mdW5jdGlvbiB5ZWMoYSl7SmRjKHRoaXMuYSxKRChhLDE4KSl9O3ZhciBXVD1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQxOSRUeXBlJywxNjkyKTtZY2IoMTY3NiwxLGtyZSx6ZWMpO18uQWQ9ZnVuY3Rpb24gQWVjKGEpe0tkYyh0aGlzLmEsSkQoYSwxNTIpKX07dmFyIFhUPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIkVHlwZScsMTY3Nik7WWNiKDE2OTMsMSx7fSxCZWMpO18uS2I9ZnVuY3Rpb24gQ2VjKGEpe3JldHVybiBBZGMoKSxuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDI1KS5hLDE2KSl9O3ZhciBZVD1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMCRUeXBlJywxNjkzKTtZY2IoMTY5NCwxLHt9LERlYyk7Xy5LYj1mdW5jdGlvbiBFZWMoYSl7cmV0dXJuIEFkYygpLG5ldyBSQmIobnVsbCxuZXcgSHZiKG5ldyBlcyhJcihrWWIoSkQoYSw5KSkuYS5KYygpLG5ldyBlcikpKSl9O3ZhciBaVD1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyMSRUeXBlJywxNjk0KTtZY2IoMTY5NSwxLHt9LEZlYyk7Xy5LYj1mdW5jdGlvbiBHZWMoYSl7cmV0dXJuIEFkYygpLEpEKFdNYihKRChhLDE4KSwoSXFjKCksRHFjKSksMTUpfTt2YXIgJFQ9amViKGV3ZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjIkVHlwZScsMTY5NSk7WWNiKDE2OTYsMSxJcmUsSGVjKTtfLk1iPWZ1bmN0aW9uIEllYyhhKXtyZXR1cm4gWWRjKEpEKGEsMTUpKX07dmFyIF9UPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDIzJFR5cGUnLDE2OTYpO1ljYigxNjk3LDEsa3JlLEplYyk7Xy5BZD1mdW5jdGlvbiBLZWMoYSl7Q2RjKHRoaXMuYSxKRChhLDE1KSl9O3ZhciBhVT1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyNCRUeXBlJywxNjk3KTtZY2IoMTY5OCwxLHt9LExlYyk7Xy5LYj1mdW5jdGlvbiBNZWMoYSl7cmV0dXJuIEFkYygpLG5ldyBSQmIobnVsbCxuZXcgSHZiKG5ldyBlcyhJcihrWWIoSkQoYSw5KSkuYS5KYygpLG5ldyBlcikpKSl9O3ZhciBiVT1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyNSRUeXBlJywxNjk4KTtZY2IoMTY5OSwxLElyZSxOZWMpO18uTWI9ZnVuY3Rpb24gT2VjKGEpe3JldHVybiBBZGMoKSxlV2IoSkQoYSwxOCkpfTt2YXIgY1U9amViKGV3ZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkMjYkVHlwZScsMTY5OSk7WWNiKDE3MDEsMSxrcmUsUGVjKTtfLkFkPWZ1bmN0aW9uIFFlYyhhKXtMZGModGhpcy5hLEpEKGEsMTgpKX07dmFyIGRVPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDI3JFR5cGUnLDE3MDEpO1ljYigxNzAwLDEsa3JlLFJlYyk7Xy5BZD1mdW5jdGlvbiBTZWMoYSl7WmRjKHRoaXMuYSxKRChhLDcyKSl9O18uYT0wO3ZhciBlVT1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQyOCRUeXBlJywxNzAwKTtZY2IoMTY3NSwxLGtyZSxUZWMpO18uQWQ9ZnVuY3Rpb24gVWVjKGEpe01kYyh0aGlzLmEsdGhpcy5iLEpEKGEsMTUyKSl9O3ZhciBmVT1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQzJFR5cGUnLDE2NzUpO1ljYigxNjc3LDEse30sVmVjKTtfLktiPWZ1bmN0aW9uIFdlYyhhKXtyZXR1cm4gQWRjKCksbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSwyNSkuYSwxNikpfTt2YXIgZ1U9amViKGV3ZSwnTEdyYXBoVG9DR3JhcGhUcmFuc2Zvcm1lci9sYW1iZGEkNCRUeXBlJywxNjc3KTtZY2IoMTY3OCwxLHt9LFhlYyk7Xy5LYj1mdW5jdGlvbiBZZWMoYSl7cmV0dXJuIEFkYygpLG5ldyBSQmIobnVsbCxuZXcgSHZiKG5ldyBlcyhJcihrWWIoSkQoYSw5KSkuYS5KYygpLG5ldyBlcikpKSl9O3ZhciBoVT1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ1JFR5cGUnLDE2NzgpO1ljYigxNjc5LDEse30sWmVjKTtfLktiPWZ1bmN0aW9uICRlYyhhKXtyZXR1cm4gQWRjKCksSkQoV01iKEpEKGEsMTgpLChJcWMoKSxEcWMpKSwxNSl9O3ZhciBpVT1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ2JFR5cGUnLDE2NzkpO1ljYigxNjgxLDEsa3JlLF9lYyk7Xy5BZD1mdW5jdGlvbiBhZmMoYSl7JGRjKHRoaXMuYSxKRChhLDE1KSl9O3ZhciBqVT1qZWIoZXdlLCdMR3JhcGhUb0NHcmFwaFRyYW5zZm9ybWVyL2xhbWJkYSQ4JFR5cGUnLDE2ODEpO1ljYigxNjgyLDEsa3JlLGJmYyk7Xy5BZD1mdW5jdGlvbiBjZmMoYSl7TmRjKHRoaXMuYSx0aGlzLmIsSkQoYSwxNTIpKX07dmFyIGtVPWplYihld2UsJ0xHcmFwaFRvQ0dyYXBoVHJhbnNmb3JtZXIvbGFtYmRhJDkkVHlwZScsMTY4Mik7WWNiKDE2NzEsMSx7fSxnZmMpO18uYWY9ZnVuY3Rpb24gaGZjKGEpe3ZhciBiLGMsZCxlLGY7dGhpcy5hPWE7dGhpcy5kPW5ldyBORmI7dGhpcy5jPVNDKGJOLE5xZSwxMjMsdGhpcy5hLmEuYS5jLmxlbmd0aCwwLDEpO3RoaXMuYj0wO2ZvcihjPW5ldyBybWIodGhpcy5hLmEuYSk7Yy5hPGMuYy5jLmxlbmd0aDspe2I9SkQocG1iKGMpLDMxNyk7Yi5kPXRoaXMuYjtmPXBHYihxR2IobmV3IHJHYixiKSx0aGlzLmQpO3RoaXMuY1t0aGlzLmJdPWY7Kyt0aGlzLmJ9ZmZjKHRoaXMpO2VmYyh0aGlzKTtkZmModGhpcyk7d0diKE5HYih0aGlzLmQpLG5ldyB3bGQpO2ZvcihlPW5ldyBybWIodGhpcy5hLmEuYik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDYwKTtkLmQuYz10aGlzLmNbZC5hLmRdLmUrZC5iLmF9fTtfLmI9MDt2YXIgbVU9amViKGV3ZSwnTmV0d29ya1NpbXBsZXhDb21wYWN0aW9uJywxNjcxKTtZY2IoMTUyLDEsezM0OjEsMTUyOjF9LGtmYyk7Xy5EZD1mdW5jdGlvbiBsZmMoYSl7cmV0dXJuIGlmYyh0aGlzLEpEKGEsMTUyKSl9O18uSWI9ZnVuY3Rpb24gbWZjKCl7cmV0dXJuIGpmYyh0aGlzKX07dmFyIG5VPWplYihld2UsJ1ZlcnRpY2FsU2VnbWVudCcsMTUyKTtZY2IoODIwLDEse30sdmZjKTtfLmM9MDtfLmU9MDtfLmk9MDt2YXIgcVU9amViKGZ3ZSwnQmV0d2VlbkxheWVyRWRnZVR3b05vZGVDcm9zc2luZ3NDb3VudGVyJyw4MjApO1ljYig2NjIsMSx7NjYyOjF9LENmYyk7Xy5JYj1mdW5jdGlvbiBEZmMoKXtyZXR1cm4gJ0FkamFjZW5jeUxpc3QgW25vZGU9Jyt0aGlzLmQrJywgYWRqYWNlbmNpZXM9ICcrdGhpcy5hKyddJ307Xy5iPTA7Xy5jPTA7Xy5mPTA7dmFyIHBVPWplYihmd2UsJ0JldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0Jyw2NjIpO1ljYigyOTIsMSx7MzQ6MSwyOTI6MX0sR2ZjKTtfLkRkPWZ1bmN0aW9uIEhmYyhhKXtyZXR1cm4gRWZjKHRoaXMsSkQoYSwyOTIpKX07Xy5JYj1mdW5jdGlvbiBJZmMoKXtyZXR1cm4gJ0FkamFjZW5jeSBbcG9zaXRpb249Jyt0aGlzLmMrJywgY2FyZGluYWxpdHk9Jyt0aGlzLmErJywgY3VycmVudENhcmRpbmFsaXR5PScrdGhpcy5iKyddJ307Xy5hPTA7Xy5iPTA7Xy5jPTA7dmFyIG9VPWplYihmd2UsJ0JldHdlZW5MYXllckVkZ2VUd29Ob2RlQ3Jvc3NpbmdzQ291bnRlci9BZGphY2VuY3lMaXN0L0FkamFjZW5jeScsMjkyKTtZY2IoMTk3MiwxLHt9LExmYyk7Xy5iPTA7Xy5lPWZhbHNlO3ZhciByVT1qZWIoZndlLCdDcm9zc2luZ01hdHJpeEZpbGxlcicsMTk3Mik7dmFyIEVYPWxlYihnd2UsJ0lJbml0aWFsaXphYmxlJyk7WWNiKDE4MTMsMSxod2UsUmZjKTtfLmVnPWZ1bmN0aW9uIFVmYyhhLGIsYyxkLGUsZil7fTtfLmdnPWZ1bmN0aW9uIFdmYyhhLGIsYyl7fTtfLmNnPWZ1bmN0aW9uIFNmYygpe3JldHVybiB0aGlzLmMhPShVRWMoKSxTRWMpfTtfLmRnPWZ1bmN0aW9uIFRmYygpe3RoaXMuZT1TQyhjRSxpc2UsMzAsdGhpcy5kLDE1LDEpfTtfLmZnPWZ1bmN0aW9uIFZmYyhhLGIpe2JbYV1bMF0uYy5wPWF9O18uaGc9ZnVuY3Rpb24gWGZjKGEsYixjLGQpeysrdGhpcy5kfTtfLmlnPWZ1bmN0aW9uIFlmYygpe3JldHVybiB0cnVlfTtfLmpnPWZ1bmN0aW9uIFpmYyhhLGIsYyxkKXtOZmModGhpcyxhLGIsYyk7cmV0dXJuIE1mYyh0aGlzLGIpfTtfLmtnPWZ1bmN0aW9uICRmYyhhLGIpe3ZhciBjO2M9T2ZjKGIsYS5sZW5ndGgpO05mYyh0aGlzLGEsYyxiKTtyZXR1cm4gUGZjKHRoaXMsYyl9O18uZD0wO3ZhciBzVT1qZWIoZndlLCdHcmVlZHlTd2l0Y2hIZXVyaXN0aWMnLDE4MTMpO1ljYigxOTc1LDEse30saGdjKTtfLmI9MDtfLmQ9MDt2YXIgdFU9amViKGZ3ZSwnTm9ydGhTb3V0aEVkZ2VOZWlnaGJvdXJpbmdOb2RlQ3Jvc3NpbmdzQ291bnRlcicsMTk3NSk7WWNiKDE5NjIsMSx7fSxtZ2MpO18uYT1mYWxzZTt2YXIgdVU9amViKGZ3ZSwnU3dpdGNoRGVjaWRlcicsMTk2Mik7WWNiKDEwNSwxLHsxMDU6MX0sc2djKTtfLmE9bnVsbDtfLmM9bnVsbDtfLmk9bnVsbDt2YXIgeFU9amViKGl3ZSwnU2VsZkh5cGVyTG9vcCcsMTA1KTtZY2IoMTk1OSwxLHt9LHlnYyk7Xy5jPTA7Xy5lPTA7dmFyIHdVPWplYihpd2UsJ1NlbGZIeXBlckxvb3BMYWJlbHMnLDE5NTkpO1ljYig0MTAsMjMsezM6MSwzNDoxLDIzOjEsNDEwOjF9LEVnYyk7dmFyIHpnYyxBZ2MsQmdjLENnYzt2YXIgdlU9a2ViKGl3ZSwnU2VsZkh5cGVyTG9vcExhYmVscy9BbGlnbm1lbnQnLDQxMCxNSSxHZ2MsRmdjKTt2YXIgSGdjO1ljYigzMzYsMSx7MzM2OjF9LEpnYyk7dmFyIHlVPWplYihpd2UsJ1NlbGZMb29wRWRnZScsMzM2KTtZY2IoMzMzLDEsezMzMzoxfSxOZ2MpO18uYT1mYWxzZTt2YXIgQVU9amViKGl3ZSwnU2VsZkxvb3BIb2xkZXInLDMzMyk7WWNiKDE3MzYsMSxJcmUsUGdjKTtfLk1iPWZ1bmN0aW9uIFFnYyhhKXtyZXR1cm4gZVdiKEpEKGEsMTgpKX07dmFyIHpVPWplYihpd2UsJ1NlbGZMb29wSG9sZGVyL2xhbWJkYSQwJFR5cGUnLDE3MzYpO1ljYigxMTIsMSx7MTEyOjF9LFNnYyk7Xy5hPWZhbHNlO18uYz1mYWxzZTt2YXIgQ1U9amViKGl3ZSwnU2VsZkxvb3BQb3J0JywxMTIpO1ljYigxODAxLDEsSXJlLFRnYyk7Xy5NYj1mdW5jdGlvbiBVZ2MoYSl7cmV0dXJuIGVXYihKRChhLDE4KSl9O3ZhciBCVT1qZWIoaXdlLCdTZWxmTG9vcFBvcnQvbGFtYmRhJDAkVHlwZScsMTgwMSk7WWNiKDM2OCwyMyx7MzoxLDM0OjEsMjM6MSwzNjg6MX0sX2djKTt2YXIgVmdjLFdnYyxYZ2MsWWdjLFpnYzt2YXIgRFU9a2ViKGl3ZSwnU2VsZkxvb3BUeXBlJywzNjgsTUksY2hjLGJoYyk7dmFyIGRoYztZY2IoMTc0NCwxLHt9LEFoYyk7dmFyIGZoYyxnaGMsaGhjLGloYzt2YXIgU1U9amViKGp3ZSwnUG9ydFJlc3RvcmVyJywxNzQ0KTtZY2IoMzY1LDIzLHszOjEsMzQ6MSwyMzoxLDM2NToxfSxKaGMpO3ZhciBGaGMsR2hjLEhoYzt2YXIgRVU9a2ViKGp3ZSwnUG9ydFJlc3RvcmVyL1BvcnRTaWRlQXJlYScsMzY1LE1JLExoYyxLaGMpO3ZhciBNaGM7WWNiKDE3NDUsMSx7fSxPaGMpO18uS2I9ZnVuY3Rpb24gUGhjKGEpe3JldHVybiBqaGMoKSxKRChhLDE1KS5NYygpfTt2YXIgRlU9amViKGp3ZSwnUG9ydFJlc3RvcmVyL2xhbWJkYSQwJFR5cGUnLDE3NDUpO1ljYigxNzQ2LDEsa3JlLFFoYyk7Xy5BZD1mdW5jdGlvbiBSaGMoYSl7amhjKCk7SkQoYSwxMTIpLmM9ZmFsc2V9O3ZhciBHVT1qZWIoandlLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDEkVHlwZScsMTc0Nik7WWNiKDE3NTUsMSxJcmUsU2hjKTtfLk1iPWZ1bmN0aW9uIFRoYyhhKXtyZXR1cm4gamhjKCksSkQoYSwxMSkuaj09KFJqZCgpLFFqZCl9O3ZhciBIVT1qZWIoandlLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDEwJFR5cGUnLDE3NTUpO1ljYigxNzU2LDEse30sVWhjKTtfLktiPWZ1bmN0aW9uIFZoYyhhKXtyZXR1cm4gamhjKCksSkQoYSwxMTIpLmR9O3ZhciBJVT1qZWIoandlLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDExJFR5cGUnLDE3NTYpO1ljYigxNzU3LDEsa3JlLFdoYyk7Xy5BZD1mdW5jdGlvbiBYaGMoYSl7QmhjKHRoaXMuYSxKRChhLDExKSl9O3ZhciBKVT1qZWIoandlLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDEyJFR5cGUnLDE3NTcpO1ljYigxNzQ3LDEsa3JlLFloYyk7Xy5BZD1mdW5jdGlvbiBaaGMoYSl7Q2hjKHRoaXMuYSxKRChhLDEwNSkpfTt2YXIgS1U9amViKGp3ZSwnUG9ydFJlc3RvcmVyL2xhbWJkYSQyJFR5cGUnLDE3NDcpO1ljYigxNzQ4LDEsQnRlLCRoYyk7Xy5MZT1mdW5jdGlvbiBfaGMoYSxiKXtyZXR1cm4gRGhjKEpEKGEsMTEyKSxKRChiLDExMikpfTtfLkZiPWZ1bmN0aW9uIGFpYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gYmljKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBMVT1qZWIoandlLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDMkVHlwZScsMTc0OCk7WWNiKDE3NDksMSxJcmUsY2ljKTtfLk1iPWZ1bmN0aW9uIGRpYyhhKXtyZXR1cm4gamhjKCksSkQoYSwxMTIpLmN9O3ZhciBNVT1qZWIoandlLCdQb3J0UmVzdG9yZXIvbGFtYmRhJDQkVHlwZScsMTc0OSk7WWNiKDE3NTAsMSxJcmUsZWljKTtfLk1iPWZ1bmN0aW9uIGZpYyhhKXtyZXR1cm4gcWhjKEpEKGEsMTEpKX07dmFyIE5VPWplYihqd2UsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkNSRUeXBlJywxNzUwKTtZY2IoMTc1MSwxLElyZSxnaWMpO18uTWI9ZnVuY3Rpb24gaGljKGEpe3JldHVybiBqaGMoKSxKRChhLDExKS5qPT0oUmpkKCkseGpkKX07dmFyIE9VPWplYihqd2UsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkNiRUeXBlJywxNzUxKTtZY2IoMTc1MiwxLElyZSxpaWMpO18uTWI9ZnVuY3Rpb24gamljKGEpe3JldHVybiBqaGMoKSxKRChhLDExKS5qPT0oUmpkKCksd2pkKX07dmFyIFBVPWplYihqd2UsJ1BvcnRSZXN0b3Jlci9sYW1iZGEkNyRUeXBlJywxNzUyKTtZY2IoMTc1MywxLElyZSxraWMpO18uTWI9ZnVuY3Rpb24gbGljKGEpe3JldHVybiByaGMoSkQoYSwxMSkpfTt2YXIgUVU9amViKGp3ZSwnUG9ydFJlc3RvcmVyL2xhbWJkYSQ4JFR5cGUnLDE3NTMpO1ljYigxNzU0LDEsSXJlLG1pYyk7Xy5NYj1mdW5jdGlvbiBuaWMoYSl7cmV0dXJuIGpoYygpLEpEKGEsMTEpLmo9PShSamQoKSxPamQpfTt2YXIgUlU9amViKGp3ZSwnUG9ydFJlc3RvcmVyL2xhbWJkYSQ5JFR5cGUnLDE3NTQpO1ljYigyNzIsMjMsezM6MSwzNDoxLDIzOjEsMjcyOjF9LEVpYyk7dmFyIHZpYyx3aWMseGljLHlpYyx6aWMsQWljLEJpYyxDaWM7dmFyIFRVPWtlYihqd2UsJ1BvcnRTaWRlQXNzaWduZXIvVGFyZ2V0JywyNzIsTUksR2ljLEZpYyk7dmFyIEhpYztZY2IoMTczNywxLHt9LEppYyk7Xy5LYj1mdW5jdGlvbiBLaWMoYSl7cmV0dXJuIEJCYihuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDEwNSkuaiwxNikpLG5ldyBfaWMpfTt2YXIgVVU9amViKGp3ZSwnUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMSRUeXBlJywxNzM3KTtZY2IoMTczOCwxLHt9LExpYyk7Xy5LYj1mdW5jdGlvbiBNaWMoYSl7cmV0dXJuIEpEKGEsMTEyKS5kfTt2YXIgVlU9amViKGp3ZSwnUG9ydFNpZGVBc3NpZ25lci9sYW1iZGEkMiRUeXBlJywxNzM4KTtZY2IoMTczOSwxLGtyZSxOaWMpO18uQWQ9ZnVuY3Rpb24gT2ljKGEpe2FaYihKRChhLDExKSwoUmpkKCkseGpkKSl9O3ZhciBXVT1qZWIoandlLCdQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQzJFR5cGUnLDE3MzkpO1ljYigxNzQwLDEse30sUGljKTtfLktiPWZ1bmN0aW9uIFFpYyhhKXtyZXR1cm4gSkQoYSwxMTIpLmR9O3ZhciBYVT1qZWIoandlLCdQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ0JFR5cGUnLDE3NDApO1ljYigxNzQxLDEsa3JlLFJpYyk7Xy5BZD1mdW5jdGlvbiBTaWMoYSl7c2ljKHRoaXMuYSxKRChhLDExKSl9O3ZhciBZVT1qZWIoandlLCdQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ1JFR5cGUnLDE3NDEpO1ljYigxNzQyLDEsQnRlLFRpYyk7Xy5MZT1mdW5jdGlvbiBVaWMoYSxiKXtyZXR1cm4gdGljKEpEKGEsMTA1KSxKRChiLDEwNSkpfTtfLkZiPWZ1bmN0aW9uIFZpYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gV2ljKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBaVT1qZWIoandlLCdQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ2JFR5cGUnLDE3NDIpO1ljYigxNzQzLDEsQnRlLFhpYyk7Xy5MZT1mdW5jdGlvbiBZaWMoYSxiKXtyZXR1cm4gdWljKEpEKGEsMTEyKSxKRChiLDExMikpfTtfLkZiPWZ1bmN0aW9uIFppYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gJGljKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciAkVT1qZWIoandlLCdQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ3JFR5cGUnLDE3NDMpO1ljYig4MDAsMSxJcmUsX2ljKTtfLk1iPWZ1bmN0aW9uIGFqYyhhKXtyZXR1cm4gSkQoYSwxMTIpLmN9O3ZhciBfVT1qZWIoandlLCdQb3J0U2lkZUFzc2lnbmVyL2xhbWJkYSQ4JFR5cGUnLDgwMCk7WWNiKDIwNTQsMSx7fSk7dmFyIGFWPWplYihrd2UsJ0Fic3RyYWN0U2VsZkxvb3BSb3V0ZXInLDIwNTQpO1ljYigxNzYyLDEsQnRlLGpqYyk7Xy5MZT1mdW5jdGlvbiBramMoYSxiKXtyZXR1cm4gaGpjKEpEKGEsMTA1KSxKRChiLDEwNSkpfTtfLkZiPWZ1bmN0aW9uIGxqYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gbWpjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBiVj1qZWIoa3dlLGh1ZSwxNzYyKTtZY2IoMTc2MywxLEJ0ZSxuamMpO18uTGU9ZnVuY3Rpb24gb2pjKGEsYil7cmV0dXJuIGlqYyhKRChhLDEwNSksSkQoYiwxMDUpKX07Xy5GYj1mdW5jdGlvbiBwamMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIHFqYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgY1Y9amViKGt3ZSxpdWUsMTc2Myk7WWNiKDE4MDIsMjA1NCx7fSxDamMpO18ubGc9ZnVuY3Rpb24gRGpjKGEsYixjKXtyZXR1cm4gY307dmFyIGVWPWplYihrd2UsJ09ydGhvZ29uYWxTZWxmTG9vcFJvdXRlcicsMTgwMik7WWNiKDE4MDQsMSxrcmUsRWpjKTtfLkFkPWZ1bmN0aW9uIEZqYyhhKXtCamModGhpcy5iLHRoaXMuYSxKRChhLDgpKX07dmFyIGRWPWplYihrd2UsJ09ydGhvZ29uYWxTZWxmTG9vcFJvdXRlci9sYW1iZGEkMCRUeXBlJywxODA0KTtZY2IoMTgwMywxODAyLHt9LElqYyk7Xy5sZz1mdW5jdGlvbiBKamMoYSxiLGMpe3ZhciBkLGU7ZD1hLmMuZDtkdShjLDAsbWRkKG9kZChkLm4pLGQuYSkpO2U9YS5kLmQ7QXRiKGMsbWRkKG9kZChlLm4pLGUuYSkpO3JldHVybiBHamMoYyl9O3ZhciBmVj1qZWIoa3dlLCdQb2x5bGluZVNlbGZMb29wUm91dGVyJywxODAzKTtZY2IoMTc1OCwxLHt9LFhqYyk7Xy5hPW51bGw7dmFyIEtqYzt2YXIgalY9amViKGt3ZSwnUm91dGluZ0RpcmVjdG9yJywxNzU4KTtZY2IoMTc1OSwxLEJ0ZSxaamMpO18uTGU9ZnVuY3Rpb24gJGpjKGEsYil7cmV0dXJuIFlqYyhKRChhLDExMiksSkQoYiwxMTIpKX07Xy5GYj1mdW5jdGlvbiBfamMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIGFrYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgZ1Y9amViKGt3ZSwnUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQwJFR5cGUnLDE3NTkpO1ljYigxNzYwLDEse30sYmtjKTtfLktiPWZ1bmN0aW9uIGNrYyhhKXtyZXR1cm4gTGpjKCksSkQoYSwxMDUpLmp9O3ZhciBoVj1qZWIoa3dlLCdSb3V0aW5nRGlyZWN0b3IvbGFtYmRhJDEkVHlwZScsMTc2MCk7WWNiKDE3NjEsMSxrcmUsZGtjKTtfLkFkPWZ1bmN0aW9uIGVrYyhhKXtMamMoKTtKRChhLDE1KS5nZChLamMpfTt2YXIgaVY9amViKGt3ZSwnUm91dGluZ0RpcmVjdG9yL2xhbWJkYSQyJFR5cGUnLDE3NjEpO1ljYigxNzY0LDEse30scGtjKTt2YXIgbVY9amViKGt3ZSwnUm91dGluZ1Nsb3RBc3NpZ25lcicsMTc2NCk7WWNiKDE3NjUsMSxJcmUsc2tjKTtfLk1iPWZ1bmN0aW9uIHRrYyhhKXtyZXR1cm4gcWtjKHRoaXMuYSxKRChhLDEwNSkpfTt2YXIga1Y9amViKGt3ZSwnUm91dGluZ1Nsb3RBc3NpZ25lci9sYW1iZGEkMCRUeXBlJywxNzY1KTtZY2IoMTc2NiwxLEJ0ZSx1a2MpO18uTGU9ZnVuY3Rpb24gdmtjKGEsYil7cmV0dXJuIHJrYyh0aGlzLmEsSkQoYSwxMDUpLEpEKGIsMTA1KSl9O18uRmI9ZnVuY3Rpb24gd2tjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiB4a2MoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIGxWPWplYihrd2UsJ1JvdXRpbmdTbG90QXNzaWduZXIvbGFtYmRhJDEkVHlwZScsMTc2Nik7WWNiKDE4MDUsMTgwMix7fSx6a2MpO18ubGc9ZnVuY3Rpb24gQWtjKGEsYixjKXt2YXIgZCxlLGYsZztkPUJlYihNRCh1WGIoYS5iLmcuYiwoQndjKCksWXZjKSkpKTtnPW5ldyBUZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbKGY9YS5jLmQsbWRkKG5ldyBGZGQoZi5uKSxmLmEpKV0pKTt5a2MoYSxiLGMsZyxkKTtBdGIoZywoZT1hLmQuZCxtZGQobmV3IEZkZChlLm4pLGUuYSkpKTtyZXR1cm4gdk9jKG5ldyB6T2MoZykpfTt2YXIgblY9amViKGt3ZSwnU3BsaW5lU2VsZkxvb3BSb3V0ZXInLDE4MDUpO1ljYig1MTAsMSxCdGUsRmtjLEhrYyk7Xy5MZT1mdW5jdGlvbiBJa2MoYSxiKXtyZXR1cm4gQmtjKHRoaXMsSkQoYSw5KSxKRChiLDkpKX07Xy5GYj1mdW5jdGlvbiBKa2MoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIEtrYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTtfLmE9ZmFsc2U7dmFyIHJWPWplYihsd2UsJ01vZGVsT3JkZXJOb2RlQ29tcGFyYXRvcicsNTEwKTtZY2IoMTc2NywxLElyZSxMa2MpO18uTWI9ZnVuY3Rpb24gTWtjKGEpe3JldHVybiBKRChhLDExKS5lLmMubGVuZ3RoIT0wfTt2YXIgb1Y9amViKGx3ZSwnTW9kZWxPcmRlck5vZGVDb21wYXJhdG9yL2xhbWJkYSQwJFR5cGUnLDE3NjcpO1ljYig1NjgsMSxJcmUsTmtjKTtfLk1iPWZ1bmN0aW9uIE9rYyhhKXtyZXR1cm4gSkQoYSwxMSkuZS5jLmxlbmd0aCE9MH07dmFyIHBWPWplYihsd2UsJ01vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMSRUeXBlJyw1NjgpO1ljYig1NjksMSxJcmUsUGtjKTtfLk1iPWZ1bmN0aW9uIFFrYyhhKXtyZXR1cm4gSkQoYSwxMSkuZy5jLmxlbmd0aCE9MH07dmFyIHFWPWplYihsd2UsJ01vZGVsT3JkZXJOb2RlQ29tcGFyYXRvci9sYW1iZGEkMiRUeXBlJyw1NjkpO1ljYig2NTEsMSxCdGUsWGtjLFlrYyk7Xy5MZT1mdW5jdGlvbiBaa2MoYSxiKXtyZXR1cm4gVWtjKHRoaXMsYSxiKX07Xy5GYj1mdW5jdGlvbiAka2MoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIF9rYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTtfLmI9ZmFsc2U7dmFyIHNWPWplYihsd2UsJ01vZGVsT3JkZXJQb3J0Q29tcGFyYXRvcicsNjUxKTtZY2IoMTYwMywxLER2ZSxobGMpO18uSWY9ZnVuY3Rpb24gaWxjKGEsYil7ZWxjKEpEKGEsMzYpKX07dmFyIHRWPWplYignb3JnLmVjbGlwc2UuZWxrLmFsZy5sYXllcmVkLmludGVybWVkaWF0ZS51bnppcHBpbmcnLCdBbHRlcm5hdGluZ0xheWVyVW56aXBwZXInLDE2MDMpO1ljYig3OTUsMSx7fSxqbGMpO18ubWc9ZnVuY3Rpb24gbGxjKGEsYil7dmFyIGMsZCxlLGY7ZT1rbGMoYik7Yz1uZXcgVWxiO2Y9Yi5mL2U7Zm9yKGQ9MTtkPGU7KytkKXtJbGIoYyxqZmIoUGNiKHpjYigkd25kLk1hdGgucm91bmQoZCpmKSkpKSl9cmV0dXJuIGN9O18ubmc9ZnVuY3Rpb24gbWxjKCl7cmV0dXJuIGZhbHNlfTt2YXIgdVY9amViKG13ZSwnQVJEQ3V0SW5kZXhIZXVyaXN0aWMnLDc5NSk7WWNiKDE0ODQsMSxEdmUscmxjKTtfLklmPWZ1bmN0aW9uIHNsYyhhLGIpe3FsYyhKRChhLDM2KSxiKX07dmFyIHhWPWplYihtd2UsJ0JyZWFraW5nUG9pbnRJbnNlcnRlcicsMTQ4NCk7WWNiKDMxNCwxLHszMTQ6MX0sdGxjKTtfLkliPWZ1bmN0aW9uIHdsYygpe3ZhciBhO2E9bmV3IFVnYjthLmErPSdCUEluZm9bJzthLmErPSdcblx0c3RhcnQ9JztQZ2IoYSx0aGlzLmkpO2EuYSs9J1xuXHRlbmQ9JztQZ2IoYSx0aGlzLmEpO2EuYSs9J1xuXHRub2RlU3RhcnRFZGdlPSc7UGdiKGEsdGhpcy5lKTthLmErPSdcblx0c3RhcnRFbmRFZGdlPSc7UGdiKGEsdGhpcy5qKTthLmErPSdcblx0b3JpZ2luYWxFZGdlPSc7UGdiKGEsdGhpcy5mKTthLmErPSdcblx0c3RhcnRJbkxheWVyRHVtbXk9JztQZ2IoYSx0aGlzLmspO2EuYSs9J1xuXHRzdGFydEluTGF5ZXJFZGdlPSc7UGdiKGEsdGhpcy5uKTthLmErPSdcblx0ZW5kSW5MYXllckR1bW15PSc7UGdiKGEsdGhpcy5iKTthLmErPSdcblx0ZW5kSW5MYXllckVkZ2U9JztQZ2IoYSx0aGlzLmMpO3JldHVybiBhLmF9O3ZhciB2Vj1qZWIobXdlLCdCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQlBJbmZvJywzMTQpO1ljYig2NDUsMSx7NjQ1OjF9LERsYyk7Xy5hPWZhbHNlO18uYj0wO18uYz0wO3ZhciB3Vj1qZWIobXdlLCdCcmVha2luZ1BvaW50SW5zZXJ0ZXIvQ3V0Jyw2NDUpO1ljYigxNDg1LDEsRHZlLE5sYyk7Xy5JZj1mdW5jdGlvbiBPbGMoYSxiKXtMbGMoSkQoYSwzNiksYil9O3ZhciBBVj1qZWIobXdlLCdCcmVha2luZ1BvaW50UHJvY2Vzc29yJywxNDg1KTtZY2IoMTQ4NiwxLElyZSxQbGMpO18uTWI9ZnVuY3Rpb24gUWxjKGEpe3JldHVybiB1bGMoSkQoYSw5KSl9O3ZhciB5Vj1qZWIobXdlLCdCcmVha2luZ1BvaW50UHJvY2Vzc29yLzBtZXRob2RyZWYkaXNFbmQkVHlwZScsMTQ4Nik7WWNiKDE0ODcsMSxJcmUsUmxjKTtfLk1iPWZ1bmN0aW9uIFNsYyhhKXtyZXR1cm4gdmxjKEpEKGEsOSkpfTt2YXIgelY9amViKG13ZSwnQnJlYWtpbmdQb2ludFByb2Nlc3Nvci8xbWV0aG9kcmVmJGlzU3RhcnQkVHlwZScsMTQ4Nyk7WWNiKDE0ODgsMSxEdmUsV2xjKTtfLklmPWZ1bmN0aW9uIFhsYyhhLGIpe1VsYyh0aGlzLEpEKGEsMzYpLGIpfTt2YXIgQ1Y9amViKG13ZSwnQnJlYWtpbmdQb2ludFJlbW92ZXInLDE0ODgpO1ljYigxNDg5LDEsa3JlLFlsYyk7Xy5BZD1mdW5jdGlvbiBabGMoYSl7SkQoYSwxMzIpLms9dHJ1ZX07dmFyIEJWPWplYihtd2UsJ0JyZWFraW5nUG9pbnRSZW1vdmVyL2xhbWJkYSQwJFR5cGUnLDE0ODkpO1ljYig3OTEsMSx7fSxpbWMpO18uYj0wO18uZT0wO18uZj0wO18uaj0wO3ZhciBJVj1qZWIobXdlLCdHcmFwaFN0YXRzJyw3OTEpO1ljYig3OTIsMSx7fSxrbWMpO18uVGU9ZnVuY3Rpb24gbG1jKGEsYil7cmV0dXJuICR3bmQuTWF0aC5tYXgoQmViKE1EKGEpKSxCZWIoTUQoYikpKX07dmFyIERWPWplYihtd2UsJ0dyYXBoU3RhdHMvMG1ldGhvZHJlZiRtYXgkVHlwZScsNzkyKTtZY2IoNzkzLDEse30sbW1jKTtfLlRlPWZ1bmN0aW9uIG5tYyhhLGIpe3JldHVybiAkd25kLk1hdGgubWF4KEJlYihNRChhKSksQmViKE1EKGIpKSl9O3ZhciBFVj1qZWIobXdlLCdHcmFwaFN0YXRzLzJtZXRob2RyZWYkbWF4JFR5cGUnLDc5Myk7WWNiKDE2NjgsMSx7fSxvbWMpO18uVGU9ZnVuY3Rpb24gcG1jKGEsYil7cmV0dXJuIGptYyhNRChhKSxNRChiKSl9O3ZhciBGVj1qZWIobXdlLCdHcmFwaFN0YXRzL2xhbWJkYSQxJFR5cGUnLDE2NjgpO1ljYigxNjY5LDEse30scW1jKTtfLktiPWZ1bmN0aW9uIHJtYyhhKXtyZXR1cm4gY21jKHRoaXMuYSxKRChhLDI1KSl9O3ZhciBHVj1qZWIobXdlLCdHcmFwaFN0YXRzL2xhbWJkYSQyJFR5cGUnLDE2NjkpO1ljYigxNjcwLDEse30sc21jKTtfLktiPWZ1bmN0aW9uIHRtYyhhKXtyZXR1cm4gYm1jKHRoaXMuYSxKRChhLDI1KSl9O3ZhciBIVj1qZWIobXdlLCdHcmFwaFN0YXRzL2xhbWJkYSQ2JFR5cGUnLDE2NzApO1ljYig3OTQsMSx7fSx1bWMpO18ubWc9ZnVuY3Rpb24gdm1jKGEsYil7dmFyIGM7Yz1KRChXTWIoYSwoQndjKCksc3djKSksMTUpO3JldHVybiBjP2M6KHBuYigpLHBuYigpLG1uYil9O18ubmc9ZnVuY3Rpb24gd21jKCl7cmV0dXJuIGZhbHNlfTt2YXIgSlY9amViKG13ZSwnSUN1dEluZGV4Q2FsY3VsYXRvci9NYW51YWxDdXRJbmRleENhbGN1bGF0b3InLDc5NCk7WWNiKDc5NiwxLHt9LHhtYyk7Xy5tZz1mdW5jdGlvbiB5bWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdTt1PShiLm49PW51bGwmJmZtYyhiKSxiLm4pO2k9KGIuZD09bnVsbCYmZm1jKGIpLGIuZCk7dD1TQyhhRSxSc2UsMzAsdS5sZW5ndGgsMTUsMSk7dFswXT11WzBdO3I9dVswXTtmb3Ioaj0xO2o8dS5sZW5ndGg7aisrKXt0W2pdPXRbai0xXSt1W2pdO3IrPXVbal19ZT1rbGMoYiktMTtnPUpEKFdNYihhLChCd2MoKSx0d2MpKSwxNykuYTtkPUxzZTtjPW5ldyBVbGI7Zm9yKG09JHduZC5NYXRoLm1heCgwLGUtZyk7bTw9JHduZC5NYXRoLm1pbihiLmYtMSxlK2cpO20rKyl7cD1yLyhtKzEpO3E9MDtrPTE7Zj1uZXcgVWxiO3M9THNlO2w9MDtoPTA7bz1pWzBdO2lmKG09PTApe3M9cjtoPShiLmc9PW51bGwmJihiLmc9YW1jKGIsbmV3IG1tYykpLEJlYihiLmcpKX1lbHNle3doaWxlKGs8Yi5mKXtpZih0W2stMV0tcT49cCl7SWxiKGYsamZiKGspKTtzPSR3bmQuTWF0aC5tYXgocyx0W2stMV0tbCk7aCs9bztxKz10W2stMV0tcTtsPXRbay0xXTtvPWlba119bz0kd25kLk1hdGgubWF4KG8saVtrXSk7KytrfWgrPW99bj0kd25kLk1hdGgubWluKDEvcywxL2IuYi9oKTtpZihuPmQpe2Q9bjtjPWZ9fXJldHVybiBjfTtfLm5nPWZ1bmN0aW9uIHptYygpe3JldHVybiBmYWxzZX07dmFyIEtWPWplYihtd2UsJ01TREN1dEluZGV4SGV1cmlzdGljJyw3OTYpO1ljYigxNjI0LDEsRHZlLENtYyk7Xy5JZj1mdW5jdGlvbiBEbWMoYSxiKXtCbWMoSkQoYSwzNiksYil9O3ZhciBMVj1qZWIobXdlLCdTaW5nbGVFZGdlR3JhcGhXcmFwcGVyJywxNjI0KTtZY2IoMjMxLDIzLHszOjEsMzQ6MSwyMzoxLDIzMToxfSxPbWMpO3ZhciBIbWMsSW1jLEptYyxLbWMsTG1jLE1tYzt2YXIgTVY9a2ViKG53ZSwnQ2VudGVyRWRnZUxhYmVsUGxhY2VtZW50U3RyYXRlZ3knLDIzMSxNSSxRbWMsUG1jKTt2YXIgUm1jO1ljYig0MTksMjMsezM6MSwzNDoxLDIzOjEsNDE5OjF9LFdtYyk7dmFyIFRtYyxVbWM7dmFyIE5WPWtlYihud2UsJ0NvbnN0cmFpbnRDYWxjdWxhdGlvblN0cmF0ZWd5Jyw0MTksTUksWW1jLFhtYyk7dmFyIFptYztZY2IoMzIzLDIzLHszOjEsMzQ6MSwyMzoxLDMyMzoxLDE4ODoxLDE5NjoxfSxlbmMpO18uYmc9ZnVuY3Rpb24gZ25jKCl7cmV0dXJuIGRuYyh0aGlzKX07Xy5vZz1mdW5jdGlvbiBmbmMoKXtyZXR1cm4gZG5jKHRoaXMpfTt2YXIgX21jLGFuYyxibmM7dmFyIE9WPWtlYihud2UsJ0Nyb3NzaW5nTWluaW1pemF0aW9uU3RyYXRlZ3knLDMyMyxNSSxpbmMsaG5jKTt2YXIgam5jO1ljYigzNDcsMjMsezM6MSwzNDoxLDIzOjEsMzQ3OjF9LHBuYyk7dmFyIGxuYyxtbmMsbm5jO3ZhciBQVj1rZWIobndlLCdDdXR0aW5nU3RyYXRlZ3knLDM0NyxNSSxybmMscW5jKTt2YXIgc25jO1ljYigzNDQsMjMsezM6MSwzNDoxLDIzOjEsMzQ0OjEsMTg4OjEsMTk2OjF9LEJuYyk7Xy5iZz1mdW5jdGlvbiBEbmMoKXtyZXR1cm4gQW5jKHRoaXMpfTtfLm9nPWZ1bmN0aW9uIENuYygpe3JldHVybiBBbmModGhpcyl9O3ZhciB1bmMsdm5jLHduYyx4bmMseW5jO3ZhciBRVj1rZWIobndlLCdDeWNsZUJyZWFraW5nU3RyYXRlZ3knLDM0NCxNSSxGbmMsRW5jKTt2YXIgR25jO1ljYig0MTYsMjMsezM6MSwzNDoxLDIzOjEsNDE2OjF9LExuYyk7dmFyIEluYyxKbmM7dmFyIFJWPWtlYihud2UsJ0RpcmVjdGlvbkNvbmdydWVuY3knLDQxNixNSSxObmMsTW5jKTt2YXIgT25jO1ljYig0NDYsMjMsezM6MSwzNDoxLDIzOjEsNDQ2OjF9LFVuYyk7dmFyIFFuYyxSbmMsU25jO3ZhciBTVj1rZWIobndlLCdFZGdlQ29uc3RyYWludCcsNDQ2LE1JLFduYyxWbmMpO3ZhciBYbmM7WWNiKDI4MSwyMyx7MzoxLDM0OjEsMjM6MSwyODE6MX0sZm9jKTt2YXIgWm5jLCRuYyxfbmMsYW9jLGJvYyxjb2M7dmFyIFRWPWtlYihud2UsJ0VkZ2VMYWJlbFNpZGVTZWxlY3Rpb24nLDI4MSxNSSxob2MsZ29jKTt2YXIgaW9jO1ljYig0NzQsMjMsezM6MSwzNDoxLDIzOjEsNDc0OjF9LG5vYyk7dmFyIGtvYyxsb2M7dmFyIFVWPWtlYihud2UsJ0VkZ2VTdHJhaWdodGVuaW5nU3RyYXRlZ3knLDQ3NCxNSSxwb2Msb29jKTt2YXIgcW9jO1ljYigyNzksMjMsezM6MSwzNDoxLDIzOjEsMjc5OjF9LHpvYyk7dmFyIHNvYyx0b2MsdW9jLHZvYyx3b2MseG9jO3ZhciBWVj1rZWIobndlLCdGaXhlZEFsaWdubWVudCcsMjc5LE1JLEJvYyxBb2MpO3ZhciBDb2M7WWNiKDI4MCwyMyx7MzoxLDM0OjEsMjM6MSwyODA6MX0sTG9jKTt2YXIgRW9jLEZvYyxHb2MsSG9jLElvYyxKb2M7dmFyIFdWPWtlYihud2UsJ0dyYXBoQ29tcGFjdGlvblN0cmF0ZWd5JywyODAsTUksTm9jLE1vYyk7dmFyIE9vYztZY2IoMjU5LDIzLHszOjEsMzQ6MSwyMzoxLDI1OToxfSxfb2MpO3ZhciBRb2MsUm9jLFNvYyxUb2MsVW9jLFZvYyxXb2MsWG9jLFlvYyxab2M7dmFyIFhWPWtlYihud2UsJ0dyYXBoUHJvcGVydGllcycsMjU5LE1JLGJwYyxhcGMpO3ZhciBjcGM7WWNiKDI5OCwyMyx7MzoxLDM0OjEsMjM6MSwyOTg6MX0saXBjKTt2YXIgZXBjLGZwYyxncGM7dmFyIFlWPWtlYihud2UsJ0dyZWVkeVN3aXRjaFR5cGUnLDI5OCxNSSxrcGMsanBjKTt2YXIgbHBjO1ljYigzMTIsMjMsezM6MSwzNDoxLDIzOjEsMzEyOjF9LHJwYyk7dmFyIG5wYyxvcGMscHBjO3ZhciBaVj1rZWIobndlLCdJbkxheWVyQ29uc3RyYWludCcsMzEyLE1JLHRwYyxzcGMpO3ZhciB1cGM7WWNiKDQxNywyMyx7MzoxLDM0OjEsMjM6MSw0MTc6MX0senBjKTt2YXIgd3BjLHhwYzt2YXIgJFY9a2ViKG53ZSwnSW50ZXJhY3RpdmVSZWZlcmVuY2VQb2ludCcsNDE3LE1JLEJwYyxBcGMpO3ZhciBDcGM7dmFyIEVwYyxGcGMsR3BjLEhwYyxJcGMsSnBjLEtwYyxMcGMsTXBjLE5wYyxPcGMsUHBjLFFwYyxScGMsU3BjLFRwYyxVcGMsVnBjLFdwYyxYcGMsWXBjLFpwYywkcGMsX3BjLGFxYyxicWMsY3FjLGRxYyxlcWMsZnFjLGdxYyxocWMsaXFjLGpxYyxrcWMsbHFjLG1xYyxucWMsb3FjLHBxYyxxcWMscnFjLHNxYyx0cWMsdXFjLHZxYyx3cWMseHFjLHlxYyx6cWMsQXFjLEJxYyxDcWMsRHFjLEVxYyxGcWMsR3FjLEhxYztZY2IoMTcxLDIzLHszOjEsMzQ6MSwyMzoxLDE3MToxfSxQcWMpO3ZhciBKcWMsS3FjLExxYyxNcWMsTnFjO3ZhciBfVj1rZWIobndlLCdMYXllckNvbnN0cmFpbnQnLDE3MSxNSSxScWMsUXFjKTt2YXIgU3FjO1ljYig0MjAsMjMsezM6MSwzNDoxLDIzOjEsNDIwOjF9LFhxYyk7dmFyIFVxYyxWcWM7dmFyIGFXPWtlYihud2UsJ0xheWVyVW56aXBwaW5nU3RyYXRlZ3knLDQyMCxNSSxacWMsWXFjKTt2YXIgJHFjO1ljYig4MzgsMSxIdWUsUHRjKTtfLnRmPWZ1bmN0aW9uIFF0YyhhKXtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx1d2UpLCcnKSwnRGlyZWN0aW9uIENvbmdydWVuY3knKSwnU3BlY2lmaWVzIGhvdyBkcmF3aW5ncyBvZiB0aGUgc2FtZSBncmFwaCB3aXRoIGRpZmZlcmVudCBsYXlvdXQgZGlyZWN0aW9ucyBjb21wYXJlIHRvIGVhY2ggb3RoZXI6IGVpdGhlciBhIG5hdHVyYWwgcmVhZGluZyBkaXJlY3Rpb24gaXMgcHJlc2VydmVkIG9yIHRoZSBkcmF3aW5ncyBhcmUgcm90YXRlZCB2ZXJzaW9ucyBvZiBlYWNoIG90aGVyLicpLE5yYyksKHpjZCgpLHRjZCkpLFJWKSxtcmIoKGxjZCgpLGpjZCkpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHZ3ZSksJycpLCdGZWVkYmFjayBFZGdlcycpLCdXaGV0aGVyIGZlZWRiYWNrIGVkZ2VzIHNob3VsZCBiZSBoaWdobGlnaHRlZCBieSByb3V0aW5nIGFyb3VuZCB0aGUgbm9kZXMuJyksKHhkYigpLGZhbHNlKSkscmNkKSxHSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2Qsd3dlKSwnJyksJ0ludGVyYWN0aXZlIFJlZmVyZW5jZSBQb2ludCcpLCdEZXRlcm1pbmVzIHdoaWNoIHBvaW50IG9mIGEgbm9kZSBpcyBjb25zaWRlcmVkIGJ5IGludGVyYWN0aXZlIGxheW91dCBwaGFzZXMuJyksaXNjKSx0Y2QpLCRWKSxtcmIoamNkKSkpKTtPYWQoYSx3d2UsRXdlLGtzYyk7T2FkKGEsd3dlLE93ZSxqc2MpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHh3ZSksJycpLCdNZXJnZSBFZGdlcycpLCdFZGdlcyB0aGF0IGhhdmUgbm8gcG9ydHMgYXJlIG1lcmdlZCBzbyB0aGV5IHRvdWNoIHRoZSBjb25uZWN0ZWQgbm9kZXMgYXQgdGhlIHNhbWUgcG9pbnRzLiBXaGVuIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLCBvbmUgcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgZGlyZWN0bHkgY29ubmVjdGVkIHRvIGEgbm9kZS4gV2hlbiBpdCBpcyBlbmFibGVkLCBhbGwgc3VjaCBpbmNvbWluZyBlZGdlcyBzaGFyZSBhbiBpbnB1dCBwb3J0LCBhbmQgYWxsIG91dGdvaW5nIGVkZ2VzIHNoYXJlIGFuIG91dHB1dCBwb3J0LicpLGZhbHNlKSxyY2QpLEdJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx5d2UpLCcnKSwnTWVyZ2UgSGllcmFyY2h5LUNyb3NzaW5nIEVkZ2VzJyksJ0lmIGhpZXJhcmNoaWNhbCBsYXlvdXQgaXMgYWN0aXZlLCBoaWVyYXJjaHktY3Jvc3NpbmcgZWRnZXMgdXNlIGFzIGZldyBoaWVyYXJjaGljYWwgcG9ydHMgYXMgcG9zc2libGUuIFRoZXkgYXJlIGJyb2tlbiBieSB0aGUgYWxnb3JpdGhtLCB3aXRoIGhpZXJhcmNoaWNhbCBwb3J0cyBpbnNlcnRlZCBhcyByZXF1aXJlZC4gVXN1YWxseSwgb25lIHN1Y2ggcG9ydCBpcyBjcmVhdGVkIGZvciBlYWNoIGVkZ2UgYXQgZWFjaCBoaWVyYXJjaHkgY3Jvc3NpbmcgcG9pbnQuIFdpdGggdGhpcyBvcHRpb24gc2V0IHRvIHRydWUsIHdlIHRyeSB0byBjcmVhdGUgYXMgZmV3IGhpZXJhcmNoaWNhbCBwb3J0cyBhcyBwb3NzaWJsZSBpbiB0aGUgcHJvY2Vzcy4gSW4gcGFydGljdWxhciwgYWxsIGVkZ2VzIHRoYXQgZm9ybSBhIGh5cGVyZWRnZSBjYW4gc2hhcmUgYSBwb3J0LicpLHRydWUpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoYWNkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx6d2UpLCcnKSwnQWxsb3cgTm9uLUZsb3cgUG9ydHMgVG8gU3dpdGNoIFNpZGVzJyksIlNwZWNpZmllcyB3aGV0aGVyIG5vbi1mbG93IHBvcnRzIG1heSBzd2l0Y2ggc2lkZXMgaWYgdGhlaXIgbm9kZSdzIHBvcnQgY29uc3RyYWludHMgYXJlIGVpdGhlciBGSVhFRF9TSURFIG9yIEZJWEVEX09SREVSLiBBIG5vbi1mbG93IHBvcnQgaXMgYSBwb3J0IG9uIGEgc2lkZSB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBsYXlvdXQgZmxvdy4gRm9yIGluc3RhbmNlLCBnaXZlbiBhIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbiwgbm9ydGggYW5kIHNvdXRoIHBvcnRzIHdvdWxkIGJlIGNvbnNpZGVyZWQgbm9uLWZsb3cgcG9ydHMuIEZ1cnRoZXIgbm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGNyaXRlcml1bSB3aGV0aGVyIHRvIHN3aXRjaCBzaWRlcyBvciBub3Qgc29sZWx5IHJlbGllcyBvbiB0aGUgbWluaW1pemF0aW9uIG9mIGVkZ2UgY3Jvc3NpbmdzLiBIZW5jZSwgZWRnZSBsZW5ndGggYW5kIG90aGVyIGFlc3RoZXRpY3MgY3JpdGVyaWEgYXJlIG5vdCBhZGRyZXNzZWQuIiksZmFsc2UpLHJjZCksR0kpLG1yYihrY2QpKSxXQyhPQyhoSiwxKSxocmUsMiw2LFsnb3JnLmVjbGlwc2UuZWxrLmxheWVyZWQubm9ydGhPclNvdXRoUG9ydCddKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxBd2UpLCcnKSwnUG9ydCBTb3J0aW5nIFN0cmF0ZWd5JyksIk9ubHkgcmVsZXZhbnQgZm9yIG5vZGVzIHdpdGggRklYRURfU0lERSBwb3J0IGNvbnN0cmFpbnRzLiBEZXRlcm1pbmVzIHRoZSB3YXkgYSBub2RlJ3MgcG9ydHMgYXJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBzaWRlcyBvZiBhIG5vZGUgaWYgdGhlaXIgb3JkZXIgaXMgbm90IHByZXNjcmliZWQuIFRoZSBvcHRpb24gaXMgc2V0IG9uIHBhcmVudCBub2Rlcy4iKSxhdGMpLHRjZCksbFcpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEJ3ZSksJycpLCdUaG9yb3VnaG5lc3MnKSwnSG93IG11Y2ggZWZmb3J0IHNob3VsZCBiZSBzcGVudCB0byBwcm9kdWNlIGEgbmljZSBsYXlvdXQuJyksamZiKDcpKSx2Y2QpLFVJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxDd2UpLCcnKSwnQWRkIFVubmVjZXNzYXJ5IEJlbmRwb2ludHMnKSwnQWRkcyBiZW5kIHBvaW50cyBldmVuIGlmIGFuIGVkZ2UgZG9lcyBub3QgY2hhbmdlIGRpcmVjdGlvbi4gSWYgdHJ1ZSwgZWFjaCBsb25nIGVkZ2UgZHVtbXkgd2lsbCBjb250cmlidXRlIGEgYmVuZCBwb2ludCB0byBpdHMgZWRnZXMgYW5kIGhpZXJhcmNoeS1jcm9zc2luZyBlZGdlcyB3aWxsIGFsd2F5cyBnZXQgYSBiZW5kIHBvaW50IHdoZXJlIHRoZXkgY3Jvc3MgaGllcmFyY2h5IGJvdW5kYXJpZXMuIEJ5IGRlZmF1bHQsIGJlbmQgcG9pbnRzIGFyZSBvbmx5IGFkZGVkIHdoZXJlIGFuIGVkZ2UgY2hhbmdlcyBkaXJlY3Rpb24uJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLER3ZSksJycpLCdHZW5lcmF0ZSBQb3NpdGlvbiBhbmQgTGF5ZXIgSURzJyksJ0lmIGVuYWJsZWQgcG9zaXRpb24gaWQgYW5kIGxheWVyIGlkIGFyZSBnZW5lcmF0ZWQsIHdoaWNoIGFyZSB1c3VhbGx5IG9ubHkgdXNlZCBpbnRlcm5hbGx5IHdoZW4gc2V0dGluZyB0aGUgaW50ZXJhY3RpdmVMYXlvdXQgb3B0aW9uLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkIG9uIHRoZSByb290IG5vZGUuJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEV3ZSksJ2N5Y2xlQnJlYWtpbmcnKSwnQ3ljbGUgQnJlYWtpbmcgU3RyYXRlZ3knKSwnU3RyYXRlZ3kgZm9yIGN5Y2xlIGJyZWFraW5nLiBDeWNsZSBicmVha2luZyBsb29rcyBmb3IgY3ljbGVzIGluIHRoZSBncmFwaCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBlZGdlcyB0byByZXZlcnNlIHRvIGJyZWFrIHRoZSBjeWNsZXMuIFJldmVyc2VkIGVkZ2VzIHdpbGwgZW5kIHVwIHBvaW50aW5nIHRvIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YgcmVndWxhciBlZGdlcyAodGhhdCBpcywgcmV2ZXJzZWQgZWRnZXMgd2lsbCBwb2ludCBsZWZ0IGlmIGVkZ2VzIHVzdWFsbHkgcG9pbnQgcmlnaHQpLicpLExyYyksdGNkKSxRViksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsRndlKSxUeGUpLCdOb2RlIExheWVyaW5nIFN0cmF0ZWd5JyksJ1N0cmF0ZWd5IGZvciBub2RlIGxheWVyaW5nLicpLHpzYyksdGNkKSxmVyksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsR3dlKSxUeGUpLCdMYXllciBDb25zdHJhaW50JyksJ0RldGVybWluZXMgYSBjb25zdHJhaW50IG9uIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5vZGUgcmVnYXJkaW5nIHRoZSBsYXllcmluZy4nKSxwc2MpLHRjZCksX1YpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEh3ZSksVHhlKSwnTGF5ZXIgQ2hvaWNlIENvbnN0cmFpbnQnKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBsYXllciBwbGFjZW1lbnQgb2YgYSBub2RlLiBMZXQgaSBiZSB0aGUgdmFsdWUgb2YgdGVoIGNvbnN0cmFpbnQuIEFzc3VtZWQgdGhlIGRyYXdpbmcgaGFzIG4gbGF5ZXJzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgaW4gaS10aCBsYXllci4gU2hvdWxkIGk+PW4gYmUgdHJ1ZSB0aGVuIHRoZSBub2RlIGlzIHBsYWNlZCBpbiB0aGUgbGFzdCBsYXllciBvZiB0aGUgZHJhd2luZy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGlzIG5vdCBwYXJ0IG9mIGFueSBvZiBFTEsgTGF5ZXJlZCdzIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgYnV0IGlzIG9ubHkgZXZhbHVhdGVkIGFzIHBhcnQgb2YgdGhlIGBJbnRlcmFjdGl2ZUxheWVyZWRHcmFwaFZpc2l0b3JgLCB3aGljaCBtdXN0IGJlIGFwcGxpZWQgbWFudWFsbHkgb3IgdXNlZCB2aWEgdGhlIGBEaWFncmFtTGF5b3V0RW5naW5lLiIpLG51bGwpLHZjZCksVUkpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEl3ZSksVHhlKSwnTGF5ZXIgSUQnKSwnTGF5ZXIgaWRlbnRpZmllciB0aGF0IHdhcyBjYWxjdWxhdGVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LicpLGpmYigtMSkpLHZjZCksVUkpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEp3ZSksVXhlKSwnVXBwZXIgQm91bmQgT24gV2lkdGggW01pbldpZHRoIExheWVyZXJdJyksIkRlZmluZXMgYSBsb29zZSB1cHBlciBib3VuZCBvbiB0aGUgd2lkdGggb2YgdGhlIE1pbldpZHRoIGxheWVyZXIuIElmIHNldCB0byAnLTEnIG11bHRpcGxlIHZhbHVlcyBhcmUgdGVzdGVkIGFuZCB0aGUgYmVzdCByZXN1bHQgaXMgc2VsZWN0ZWQuIiksamZiKDQpKSx2Y2QpLFVJKSxtcmIoamNkKSkpKTtPYWQoYSxKd2UsRndlLHNzYyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsS3dlKSxVeGUpLCdVcHBlciBMYXllciBFc3RpbWF0aW9uIFNjYWxpbmcgRmFjdG9yIFtNaW5XaWR0aCBMYXllcmVyXScpLCJNdWx0aXBsaWVkIHdpdGggVXBwZXIgQm91bmQgT24gV2lkdGggZm9yIGRlZmluaW5nIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB3aWR0aCBvZiBsYXllcnMgd2hpY2ggaGF2ZW4ndCBiZWVuIGRldGVybWluZWQgeWV0LCBidXQgd2hvc2UgbWF4aW11bSB3aWR0aCBoYWQgYmVlbiAocm91Z2hseSkgZXN0aW1hdGVkIGJ5IHRoZSBNaW5XaWR0aCBhbGdvcml0aG0uIENvbXBlbnNhdGVzIGZvciB0b28gaGlnaCBlc3RpbWF0aW9ucy4gSWYgc2V0IHRvICctMScgbXVsdGlwbGUgdmFsdWVzIGFyZSB0ZXN0ZWQgYW5kIHRoZSBiZXN0IHJlc3VsdCBpcyBzZWxlY3RlZC4iKSxqZmIoMikpLHZjZCksVUkpLG1yYihqY2QpKSkpO09hZChhLEt3ZSxGd2UsdXNjKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxMd2UpLFZ4ZSksJ05vZGUgUHJvbW90aW9uIFN0cmF0ZWd5JyksJ1JlZHVjZXMgbnVtYmVyIG9mIGR1bW15IG5vZGVzIGFmdGVyIGxheWVyaW5nIHBoYXNlIChpZiBwb3NzaWJsZSkuJykseHNjKSx0Y2QpLGpXKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxNd2UpLFZ4ZSksJ01heCBOb2RlIFByb21vdGlvbiBJdGVyYXRpb25zJyksJ0xpbWl0cyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIG5vZGUgcHJvbW90aW9uLicpLGpmYigwKSksdmNkKSxVSSksbXJiKGpjZCkpKSk7T2FkKGEsTXdlLEx3ZSxudWxsKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxOd2UpLCdsYXllcmluZy5jb2ZmbWFuR3JhaGFtJyksJ0xheWVyIEJvdW5kJyksJ1RoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBhbGxvd2VkIHBlciBsYXllci4nKSxqZmIoSHFlKSksdmNkKSxVSSksbXJiKGpjZCkpKSk7T2FkKGEsTndlLEZ3ZSxtc2MpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE93ZSksV3hlKSwnQ3Jvc3NpbmcgTWluaW1pemF0aW9uIFN0cmF0ZWd5JyksJ1N0cmF0ZWd5IGZvciBjcm9zc2luZyBtaW5pbWl6YXRpb24uJyksSnJjKSx0Y2QpLE9WKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxQd2UpLFd4ZSksJ0ZvcmNlIE5vZGUgTW9kZWwgT3JkZXInKSwnVGhlIG5vZGUgb3JkZXIgZ2l2ZW4gYnkgdGhlIG1vZGVsIGRvZXMgbm90IGNoYW5nZSB0byBwcm9kdWNlIGEgYmV0dGVyIGxheW91dC4gRS5nLiBpZiBub2RlIEEgaXMgYmVmb3JlIG5vZGUgQiBpbiB0aGUgbW9kZWwgdGhpcyBpcyBub3QgY2hhbmdlZCBkdXJpbmcgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbm9kZSBtb2RlbCBvcmRlciBpcyBhbHJlYWR5IHJlc3BlY3RlZCBiZWZvcmUgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSBzZXR0aW5nIGNvbnNpZGVyTW9kZWxPcmRlci5zdHJhdGVneSB0byBOT0RFU19BTkRfRURHRVMuJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFF3ZSksV3hlKSwnSGllcmFyY2hpY2FsIFN3ZWVwaW5lc3MnKSwnSG93IGxpa2VseSBpdCBpcyB0byB1c2UgY3Jvc3MtaGllcmFyY2h5ICgxKSB2cyBib3R0b20tdXAgKC0xKS4nKSwwLjEpLHNjZCksTEkpLG1yYihqY2QpKSkpO09hZChhLFF3ZSxYeGUsQnJjKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxSd2UpLFd4ZSksJ1NlbWktSW50ZXJhY3RpdmUgQ3Jvc3NpbmcgTWluaW1pemF0aW9uJyksIlByZXNlcnZlcyB0aGUgb3JkZXIgb2Ygbm9kZXMgd2l0aGluIGEgbGF5ZXIgYnV0IHN0aWxsIG1pbmltaXplcyBjcm9zc2luZ3MgYmV0d2VlbiBlZGdlcyBjb25uZWN0aW5nIGxvbmcgZWRnZSBkdW1taWVzLiBEZXJpdmVzIHRoZSBkZXNpcmVkIG9yZGVyIGZyb20gcG9zaXRpb25zIHNwZWNpZmllZCBieSB0aGUgJ29yZy5lY2xpcHNlLmVsay5wb3NpdGlvbicgbGF5b3V0IG9wdGlvbi4gUmVxdWlyZXMgYSBjcm9zc2luZyBtaW5pbWl6YXRpb24gc3RyYXRlZ3kgdGhhdCBpcyBhYmxlIHRvIHByb2Nlc3MgJ2luLWxheWVyJyBjb25zdHJhaW50cy4iKSxmYWxzZSkscmNkKSxHSSksbXJiKGpjZCkpKSk7T2FkKGEsUndlLE93ZSxIcmMpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFN3ZSksV3hlKSwnSW4gTGF5ZXIgUHJlZGVjZXNzb3Igb2YnKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgd2hpY2ggc3BlY2lmaWVzIG9mIHdoaWNoIG5vZGUgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3IuIElmIHNldCB0byAncycgdGhlbiB0aGUgbm9kZSBpcyB0aGUgcHJlZGVjZXNzb3Igb2YgJ3MnIGFuZCBpcyBpbiB0aGUgc2FtZSBsYXllciIpLG51bGwpLHhjZCksaEopLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFR3ZSksV3hlKSwnSW4gTGF5ZXIgU3VjY2Vzc29yIG9mJyksIkFsbG93cyB0byBzZXQgYSBjb25zdHJhaW50IHdoaWNoIHNwZWNpZmllcyBvZiB3aGljaCBub2RlIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhlIHN1Y2Nlc3Nvci4gSWYgc2V0IHRvICdzJyB0aGVuIHRoZSBub2RlIGlzIHRoZSBzdWNjZXNzb3Igb2YgJ3MnIGFuZCBpcyBpbiB0aGUgc2FtZSBsYXllciIpLG51bGwpLHhjZCksaEopLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFV3ZSksV3hlKSwnUG9zaXRpb24gQ2hvaWNlIENvbnN0cmFpbnQnKSwiQWxsb3dzIHRvIHNldCBhIGNvbnN0cmFpbnQgcmVnYXJkaW5nIHRoZSBwb3NpdGlvbiBwbGFjZW1lbnQgb2YgYSBub2RlIGluIGEgbGF5ZXIuIEFzc3VtZWQgdGhlIGxheWVyIGluIHdoaWNoIHRoZSBub2RlIHBsYWNlZCBpbmNsdWRlcyBuIG90aGVyIG5vZGVzIGFuZCBpIDwgbi4gSWYgc2V0IHRvIGksIGl0IGV4cHJlc3NlcyB0aGF0IHRoZSBub2RlIHNob3VsZCBiZSBwbGFjZWQgYXQgdGhlIGktdGggcG9zaXRpb24uIFNob3VsZCBpPj1uIGJlIHRydWUgdGhlbiB0aGUgbm9kZSBpcyBwbGFjZWQgYXQgdGhlIGxhc3QgcG9zaXRpb24gaW4gdGhlIGxheWVyLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgbm90IHBhcnQgb2YgYW55IG9mIEVMSyBMYXllcmVkJ3MgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBidXQgaXMgb25seSBldmFsdWF0ZWQgYXMgcGFydCBvZiB0aGUgYEludGVyYWN0aXZlTGF5ZXJlZEdyYXBoVmlzaXRvcmAsIHdoaWNoIG11c3QgYmUgYXBwbGllZCBtYW51YWxseSBvciB1c2VkIHZpYSB0aGUgYERpYWdyYW1MYXlvdXRFbmdpbmUuIiksbnVsbCksdmNkKSxVSSksbXJiKGljZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsVndlKSxXeGUpLCdQb3NpdGlvbiBJRCcpLCdQb3NpdGlvbiB3aXRoaW4gYSBsYXllciB0aGF0IHdhcyBkZXRlcm1pbmVkIGJ5IEVMSyBMYXllcmVkIGZvciBhIG5vZGUuIFRoaXMgaXMgb25seSBnZW5lcmF0ZWQgaWYgaW50ZXJhY3RpdmVMYXlvdCBvciBnZW5lcmF0ZVBvc2l0aW9uQW5kTGF5ZXJJZHMgaXMgc2V0LicpLGpmYigtMSkpLHZjZCksVUkpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFd3ZSksWXhlKSwnR3JlZWR5IFN3aXRjaCBBY3RpdmF0aW9uIFRocmVzaG9sZCcpLCJCeSBkZWZhdWx0IGl0IGlzIGRlY2lkZWQgYXV0b21hdGljYWxseSBpZiB0aGUgZ3JlZWR5IHN3aXRjaCBpcyBhY3RpdmF0ZWQgb3Igbm90LiBUaGUgZGVjaXNpb24gaXMgYmFzZWQgb24gd2hldGhlciB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgZ3JhcGggKHdpdGhvdXQgZHVtbXkgbm9kZXMpIGlzIHNtYWxsZXIgdGhhbiB0aGUgdmFsdWUgb2YgdGhpcyBvcHRpb24uIEEgJzAnIGVuZm9yY2VzIHRoZSBhY3RpdmF0aW9uLiIpLGpmYig0MCkpLHZjZCksVUkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFh3ZSksWXhlKSwnR3JlZWR5IFN3aXRjaCBDcm9zc2luZyBNaW5pbWl6YXRpb24nKSwiR3JlZWR5IFN3aXRjaCBzdHJhdGVneSBmb3IgY3Jvc3NpbmcgbWluaW1pemF0aW9uLiBUaGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlZ3VsYXIgY3Jvc3NpbmcgbWluaW1pemF0aW9uIGFzIGEgcG9zdC1wcm9jZXNzb3IuIE5vdGUgdGhhdCBpZiAnaGllcmFyY2h5SGFuZGxpbmcnIGlzIHNldCB0byAnSU5DTFVERV9DSElMRFJFTicsIHRoZSAnZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsLnR5cGUnIG9wdGlvbiBtdXN0IGJlIHVzZWQuIikseXJjKSx0Y2QpLFlWKSxtcmIoamNkKSkpKTtPYWQoYSxYd2UsT3dlLHpyYyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsWXdlKSwnY3Jvc3NpbmdNaW5pbWl6YXRpb24uZ3JlZWR5U3dpdGNoSGllcmFyY2hpY2FsJyksJ0dyZWVkeSBTd2l0Y2ggQ3Jvc3NpbmcgTWluaW1pemF0aW9uIChoaWVyYXJjaGljYWwpJyksIkFjdGl2YXRlcyB0aGUgZ3JlZWR5IHN3aXRjaCBoZXVyaXN0aWMgaW4gY2FzZSBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIHVzZWQuIFRoZSBkaWZmZXJlbmNlcyB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCBjYXNlIChzZWUgJ2dyZWVkeVN3aXRjaC50eXBlJykgYXJlOiAxKSBncmVlZHkgc3dpdGNoIGlzIGluYWN0aXZlIGJ5IGRlZmF1bHQsIDMpIG9ubHkgdGhlIG9wdGlvbiB2YWx1ZSBzZXQgb24gdGhlIG5vZGUgYXQgd2hpY2ggaGllcmFyY2hpY2FsIGxheW91dCBzdGFydHMgaXMgcmVsZXZhbnQsIGFuZCAyKSBpZiBpdCdzIGFjdGl2YXRlZCBieSB0aGUgdXNlciwgaXQgcHJvcGVybHkgYWRkcmVzc2VzIGhpZXJhcmNoeS1jcm9zc2luZyBlZGdlcy4iKSx1cmMpLHRjZCksWVYpLG1yYihqY2QpKSkpO09hZChhLFl3ZSxPd2UsdnJjKTtPYWQoYSxZd2UsWHhlLHdyYyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsWndlKSxaeGUpLCdOb2RlIFBsYWNlbWVudCBTdHJhdGVneScpLCdTdHJhdGVneSBmb3Igbm9kZSBwbGFjZW1lbnQuJyksJHNjKSx0Y2QpLGlXKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLCR3ZSksWnhlKSwnRmF2b3IgU3RyYWlnaHQgRWRnZXMgT3ZlciBCYWxhbmNpbmcnKSwiRmF2b3Igc3RyYWlnaHQgZWRnZXMgb3ZlciBhIGJhbGFuY2VkIG5vZGUgcGxhY2VtZW50LiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHVzZWQgJ2VkZ2VSb3V0aW5nJy4gRm9yIGFuIG9ydGhvZ29uYWwgc3R5bGUgaXQgaXMgc2V0IHRvIHRydWUsIGZvciBhbGwgb3RoZXIgc3R5bGVzIHRvIGZhbHNlLiIpLHJjZCksR0kpLG1yYihqY2QpKSkpO09hZChhLCR3ZSxad2UsUXNjKTtPYWQoYSwkd2UsWndlLFJzYyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsX3dlKSwkeGUpLCdCSyBFZGdlIFN0cmFpZ2h0ZW5pbmcnKSwiU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEJyYW5kZXMgS29lcGYgbm9kZSBwbGFjZXIgdHJpZXMgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBzdHJhaWdodCBlZGdlcyBhdCB0aGUgZXhwZW5zZSBvZiBkaWFncmFtIHNpemUuIFRoZXJlIGlzIGEgc3VidGxlIGRpZmZlcmVuY2UgdG8gdGhlICdmYXZvclN0cmFpZ2h0RWRnZXMnIG9wdGlvbiwgd2hpY2ggZGVjaWRlcyB3aGV0aGVyIGEgYmFsYW5jZWQgcGxhY2VtZW50IG9mIHRoZSBub2RlcyBpcyBkZXNpcmVkLCBvciBub3QuIEluIGJrIHRlcm1zIHRoaXMgbWVhbnMgY29tYmluaW5nIHRoZSBmb3VyIGFsaWdubWVudHMgaW50byBhIHNpbmdsZSBiYWxhbmNlZCBvbmUsIG9yIG5vdC4gVGhpcyBvcHRpb24gb24gdGhlIG90aGVyIGhhbmQgdHJpZXMgdG8gc3RyYWlnaHRlbiBhZGRpdGlvbmFsIGVkZ2VzIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgZWFjaCBvZiB0aGUgZm91ciBhbGlnbm1lbnRzLiIpLEtzYyksdGNkKSxVViksbXJiKGpjZCkpKSk7T2FkKGEsX3dlLFp3ZSxMc2MpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGF4ZSksJHhlKSwnQksgRml4ZWQgQWxpZ25tZW50JyksJ1RlbGxzIHRoZSBCSyBub2RlIHBsYWNlciB0byB1c2UgYSBjZXJ0YWluIGFsaWdubWVudCAob3V0IG9mIGl0cyBmb3VyKSBpbnN0ZWFkIG9mIHRoZSBvbmUgcHJvZHVjaW5nIHRoZSBzbWFsbGVzdCBoZWlnaHQsIG9yIHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgZm91ci4nKSxOc2MpLHRjZCksVlYpLG1yYihqY2QpKSkpO09hZChhLGF4ZSxad2UsT3NjKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxieGUpLCdub2RlUGxhY2VtZW50LmxpbmVhclNlZ21lbnRzJyksJ0xpbmVhciBTZWdtZW50cyBEZWZsZWN0aW9uIERhbXBlbmluZycpLCdEYW1wZW5zIHRoZSBtb3ZlbWVudCBvZiBub2RlcyB0byBrZWVwIHRoZSBkaWFncmFtIGZyb20gZ2V0dGluZyB0b28gbGFyZ2UuJyksMC4zKSxzY2QpLExJKSxtcmIoamNkKSkpKTtPYWQoYSxieGUsWndlLFRzYyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxjeGUpLCdub2RlUGxhY2VtZW50Lm5ldHdvcmtTaW1wbGV4JyksJ05vZGUgRmxleGliaWxpdHknKSwiQWltcyBhdCBzaG9ydGVyIGFuZCBzdHJhaWdodGVyIGVkZ2VzLiBUd28gY29uZmlndXJhdGlvbnMgYXJlIHBvc3NpYmxlOiAoYSkgYWxsb3cgcG9ydHMgdG8gbW92ZSBmcmVlbHkgb24gdGhlIHNpZGUgdGhleSBhcmUgYXNzaWduZWQgdG8gKHRoZSBvcmRlciBpcyBhbHdheXMgZGVmaW5lZCBiZWZvcmVoYW5kKSwgKGIpIGFkZGl0aW9uYWxseSBhbGxvdyB0byBlbmxhcmdlIGEgbm9kZSB3aGVyZXZlciBpdCBoZWxwcy4gSWYgdGhpcyBvcHRpb24gaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGEgbm9kZSwgdGhlICdub2RlRmxleGliaWxpdHkuZGVmYXVsdCcgdmFsdWUgaXMgdXNlZCwgd2hpY2ggaXMgc3BlY2lmaWVkIGZvciB0aGUgbm9kZSdzIHBhcmVudC4iKSx0Y2QpLGhXKSxtcmIoaWNkKSkpKTtPYWQoYSxjeGUsWndlLFlzYyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsZHhlKSwnbm9kZVBsYWNlbWVudC5uZXR3b3JrU2ltcGxleC5ub2RlRmxleGliaWxpdHknKSwnTm9kZSBGbGV4aWJpbGl0eSBEZWZhdWx0JyksIkRlZmF1bHQgdmFsdWUgb2YgdGhlICdub2RlRmxleGliaWxpdHknIG9wdGlvbiBmb3IgdGhlIGNoaWxkcmVuIG9mIGEgaGllcmFyY2hpY2FsIG5vZGUuIiksV3NjKSx0Y2QpLGhXKSxtcmIoamNkKSkpKTtPYWQoYSxkeGUsWndlLFhzYyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsZXhlKSxfeGUpLCdTZWxmLUxvb3AgRGlzdHJpYnV0aW9uJyksJ0FsdGVyIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIGxvb3BzIGFyb3VuZCB0aGUgbm9kZS4gSXQgb25seSB0YWtlcyBlZmZlY3QgZm9yIFBvcnRDb25zdHJhaW50cy5GUkVFLicpLFZyYyksdGNkKSxuVyksbXJiKGljZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsZnhlKSxfeGUpLCdTZWxmLUxvb3AgT3JkZXJpbmcnKSwnQWx0ZXIgdGhlIG9yZGVyaW5nIG9mIHRoZSBsb29wcyB0aGV5IGNhbiBlaXRoZXIgYmUgc3RhY2tlZCBvciBzZXF1ZW5jZWQuIEl0IG9ubHkgdGFrZXMgZWZmZWN0IGZvciBQb3J0Q29uc3RyYWludHMuRlJFRS4nKSxYcmMpLHRjZCksb1cpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGd4ZSksJ2VkZ2VSb3V0aW5nLnNwbGluZXMnKSwnU3BsaW5lIFJvdXRpbmcgTW9kZScpLCdTcGVjaWZpZXMgdGhlIHdheSBjb250cm9sIHBvaW50cyBhcmUgYXNzZW1ibGVkIGZvciBlYWNoIGluZGl2aWR1YWwgZWRnZS4gQ09OU0VSVkFUSVZFIGVuc3VyZXMgdGhhdCBlZGdlcyBhcmUgcHJvcGVybHkgcm91dGVkIGFyb3VuZCB0aGUgbm9kZXMgYnV0IGZlZWxzIHJhdGhlciBvcnRob2dvbmFsIGF0IHRpbWVzLiBTTE9QUFkgdXNlcyBmZXdlciBjb250cm9sIHBvaW50cyB0byBvYnRhaW4gY3VydmllciBlZGdlIHJvdXRlcyBidXQgbWF5IHJlc3VsdCBpbiBlZGdlcyBvdmVybGFwcGluZyBub2Rlcy4nKSxacmMpLHRjZCkscVcpLG1yYihqY2QpKSkpO09hZChhLGd4ZSxheWUsJHJjKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxoeGUpLCdlZGdlUm91dGluZy5zcGxpbmVzLnNsb3BweScpLCdTbG9wcHkgU3BsaW5lIExheWVyIFNwYWNpbmcgRmFjdG9yJyksJ1NwYWNpbmcgZmFjdG9yIGZvciByb3V0aW5nIGFyZWEgYmV0d2VlbiBsYXllcnMgd2hlbiB1c2luZyBzbG9wcHkgc3BsaW5lIHJvdXRpbmcuJyksMC4yKSxzY2QpLExJKSxtcmIoamNkKSkpKTtPYWQoYSxoeGUsYXllLGFzYyk7T2FkKGEsaHhlLGd4ZSxic2MpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGl4ZSksJ2VkZ2VSb3V0aW5nLnBvbHlsaW5lJyksJ1Nsb3BlZCBFZGdlIFpvbmUgV2lkdGgnKSwnV2lkdGggb2YgdGhlIHN0cmlwIHRvIHRoZSBsZWZ0IGFuZCB0byB0aGUgcmlnaHQgb2YgZWFjaCBsYXllciB3aGVyZSB0aGUgcG9seWxpbmUgZWRnZSByb3V0ZXIgaXMgYWxsb3dlZCB0byByZWZyYWluIGZyb20gZW5zdXJpbmcgdGhhdCBlZGdlcyBhcmUgcm91dGVkIGhvcml6b250YWxseS4gVGhpcyBwcmV2ZW50cyBhd2t3YXJkIGJlbmQgcG9pbnRzIGZvciBub2RlcyB0aGF0IGV4dGVudCBhbG1vc3QgdG8gdGhlIGVkZ2Ugb2YgdGhlaXIgbGF5ZXIuJyksMiksc2NkKSxMSSksbXJiKGpjZCkpKSk7T2FkKGEsaXhlLGF5ZSxUcmMpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsanhlKSxieWUpLCdTcGFjaW5nIEJhc2UgVmFsdWUnKSwiQW4gb3B0aW9uYWwgYmFzZSB2YWx1ZSBmb3IgYWxsIG90aGVyIGxheW91dCBvcHRpb25zIG9mIHRoZSAnc3BhY2luZycgZ3JvdXAuIEl0IGNhbiBiZSB1c2VkIHRvIGNvbnZlbmllbnRseSBhbHRlciB0aGUgb3ZlcmFsbCAnc3BhY2lvdXNuZXNzJyBvZiB0aGUgZHJhd2luZy4gV2hlbmV2ZXIgYW4gZXhwbGljaXQgdmFsdWUgaXMgc2V0IGZvciB0aGUgb3RoZXIgbGF5b3V0IG9wdGlvbnMsIHRoaXMgYmFzZSB2YWx1ZSB3aWxsIGhhdmUgbm8gZWZmZWN0LiBUaGUgYmFzZSB2YWx1ZSBpcyBub3QgaW5oZXJpdGVkLCBpLmUuIGl0IG11c3QgYmUgc2V0IGZvciBlYWNoIGhpZXJhcmNoaWNhbCBub2RlLiIpLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGt4ZSksYnllKSwnRWRnZSBOb2RlIEJldHdlZW4gTGF5ZXJzIFNwYWNpbmcnKSwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gbm9kZXMgYW5kIGVkZ2VzIHRoYXQgYXJlIHJvdXRlZCBuZXh0IHRvIHRoZSBub2RlJ3MgbGF5ZXIuIEZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIGFuZCBlZGdlcyB0aGF0IGNyb3NzIHRoZSBub2RlJ3MgbGF5ZXIgJ3NwYWNpbmcuZWRnZU5vZGUnIGlzIHVzZWQuIiksMTApLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGx4ZSksYnllKSwnRWRnZSBFZGdlIEJldHdlZW4gTGF5ZXIgU3BhY2luZycpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIHBhaXJzIG9mIGVkZ2VzIHRoYXQgYXJlIHJvdXRlZCBiZXR3ZWVuIHRoZSBzYW1lIHBhaXIgb2YgbGF5ZXJzLiBOb3RlIHRoYXQgJ3NwYWNpbmcuZWRnZUVkZ2UnIGlzIHVzZWQgZm9yIHRoZSBzcGFjaW5nIGJldHdlZW4gcGFpcnMgb2YgZWRnZXMgY3Jvc3NpbmcgdGhlIHNhbWUgbGF5ZXIuIiksMTApLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLG14ZSksYnllKSwnTm9kZSBOb2RlIEJldHdlZW4gTGF5ZXJzIFNwYWNpbmcnKSwiVGhlIHNwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHBhaXIgb2Ygbm9kZXMgb2YgdHdvIGFkamFjZW50IGxheWVycy4gTm90ZSB0aGF0ICdzcGFjaW5nLm5vZGVOb2RlJyBpcyB1c2VkIGZvciB0aGUgc3BhY2luZyBiZXR3ZWVuIG5vZGVzIHdpdGhpbiB0aGUgbGF5ZXIgaXRzZWxmLiIpLDIwKSxzY2QpLExJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxueGUpLGN5ZSksJ0RpcmVjdGlvbiBQcmlvcml0eScpLCdEZWZpbmVzIGhvdyBpbXBvcnRhbnQgaXQgaXMgdG8gaGF2ZSBhIGNlcnRhaW4gZWRnZSBwb2ludCBpbnRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG92ZXJhbGwgbGF5b3V0LiBUaGlzIG9wdGlvbiBpcyBldmFsdWF0ZWQgZHVyaW5nIHRoZSBjeWNsZSBicmVha2luZyBwaGFzZS4nKSxqZmIoMCkpLHZjZCksVUkpLG1yYihnY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLG94ZSksY3llKSwnU2hvcnRuZXNzIFByaW9yaXR5JyksJ0RlZmluZXMgaG93IGltcG9ydGFudCBpdCBpcyB0byBrZWVwIGFuIGVkZ2UgYXMgc2hvcnQgYXMgcG9zc2libGUuIFRoaXMgb3B0aW9uIGlzIGV2YWx1YXRlZCBkdXJpbmcgdGhlIGxheWVyaW5nIHBoYXNlLicpLGpmYigwKSksdmNkKSxVSSksbXJiKGdjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QscHhlKSxjeWUpLCdTdHJhaWdodG5lc3MgUHJpb3JpdHknKSwnRGVmaW5lcyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIGtlZXAgYW4gZWRnZSBzdHJhaWdodCwgaS5lLiBhbGlnbmVkIHdpdGggb25lIG9mIHRoZSB0d28gYXhlcy4gVGhpcyBvcHRpb24gaXMgZXZhbHVhdGVkIGR1cmluZyBub2RlIHBsYWNlbWVudC4nKSxqZmIoMCkpLHZjZCksVUkpLG1yYihnY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHF4ZSksZHllKSwnQ29ubmVjdGVkIENvbXBvbmVudHMgQ29tcGFjdGlvbicpLCdUcmllcyB0byBmdXJ0aGVyIGNvbXBhY3QgY29tcG9uZW50cyAoZGlzY29ubmVjdGVkIHN1Yi1ncmFwaHMpLicpLGZhbHNlKSxyY2QpLEdJKSxtcmIoamNkKSkpKTtPYWQoYSxxeGUsUXVlLHRydWUpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHJ4ZSksZXllKSwnUG9zdCBDb21wYWN0aW9uIFN0cmF0ZWd5JyksZnllKSxmcmMpLHRjZCksV1YpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHN4ZSksZXllKSwnUG9zdCBDb21wYWN0aW9uIENvbnN0cmFpbnQgQ2FsY3VsYXRpb24nKSxmeWUpLGRyYyksdGNkKSxOViksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsdHhlKSxneWUpLCdIaWdoIERlZ3JlZSBOb2RlIFRyZWF0bWVudCcpLCdNYWtlcyByb29tIGFyb3VuZCBoaWdoIGRlZ3JlZSBub2RlcyB0byBwbGFjZSBsZWFmcyBhbmQgdHJlZXMuJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHV4ZSksZ3llKSwnSGlnaCBEZWdyZWUgTm9kZSBUaHJlc2hvbGQnKSwnV2hldGhlciBhIG5vZGUgaXMgY29uc2lkZXJlZCB0byBoYXZlIGEgaGlnaCBkZWdyZWUuJyksamZiKDE2KSksdmNkKSxVSSksbXJiKGpjZCkpKSk7T2FkKGEsdXhlLHR4ZSx0cnVlKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx2eGUpLGd5ZSksJ0hpZ2ggRGVncmVlIE5vZGUgTWF4aW11bSBUcmVlIEhlaWdodCcpLCdNYXhpbXVtIGhlaWdodCBvZiBhIHN1YnRyZWUgY29ubmVjdGVkIHRvIGEgaGlnaCBkZWdyZWUgbm9kZSB0byBiZSBtb3ZlZCB0byBzZXBhcmF0ZSBsYXllcnMuJyksamZiKDUpKSx2Y2QpLFVJKSxtcmIoamNkKSkpKTtPYWQoYSx2eGUsdHhlLHRydWUpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHd4ZSksaHllKSwnR3JhcGggV3JhcHBpbmcgU3RyYXRlZ3knKSwiRm9yIGNlcnRhaW4gZ3JhcGhzIGFuZCBjZXJ0YWluIHByZXNjcmliZWQgZHJhd2luZyBhcmVhcyBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIHNwbGl0IHRoZSBsYWlkIG91dCBncmFwaCBpbnRvIGNodW5rcyB0aGF0IGFyZSBwbGFjZWQgc2lkZSBieSBzaWRlLiBUaGUgZWRnZXMgdGhhdCBjb25uZWN0IGRpZmZlcmVudCBjaHVua3MgYXJlICd3cmFwcGVkJyBhcm91bmQgZnJvbSB0aGUgZW5kIG9mIG9uZSBjaHVuayB0byB0aGUgc3RhcnQgb2YgdGhlIG90aGVyIGNodW5rLiBUaGUgcG9pbnRzIGJldHdlZW4gdGhlIGNodW5rcyBhcmUgcmVmZXJyZWQgdG8gYXMgJ2N1dHMnLiIpLEd0YyksdGNkKSxzVyksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QseHhlKSxoeWUpLCdBZGRpdGlvbmFsIFdyYXBwZWQgRWRnZXMgU3BhY2luZycpLCdUbyB2aXN1YWxseSBzZXBhcmF0ZSBlZGdlcyB0aGF0IGFyZSB3cmFwcGVkIGZyb20gcmVndWxhcmx5IHJvdXRlZCBlZGdlcyBhbiBhZGRpdGlvbmFsIHNwYWNpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtIG9mIHRoaXMgbGF5b3V0IG9wdGlvbi4gVGhlIHNwYWNpbmcgaXMgYWRkZWQgdG8gdGhlIHJlZ3VsYXIgZWRnZU5vZGUgc3BhY2luZy4nKSwxMCksc2NkKSxMSSksbXJiKGpjZCkpKSk7T2FkKGEseHhlLHd4ZSxsdGMpO09hZChhLHh4ZSx3eGUsbXRjKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx5eGUpLGh5ZSksJ0NvcnJlY3Rpb24gRmFjdG9yIGZvciBXcmFwcGluZycpLCJBdCB0aW1lcyBhbmQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgZ3JhcGhzIHRoZSBleGVjdXRlZCB3cmFwcGluZyBtYXkgcHJvZHVjZSByZXN1bHRzIHRoYXQgYXJlIGNvbnNpc3RlbnRseSBiaWFzZWQgaW4gdGhlIHNhbWUgZmFzaGlvbjogZWl0aGVyIHdyYXBwaW5nIHRvIG9mdGVuIG9yIHRvIHJhcmVseS4gVGhpcyBmYWN0b3IgY2FuIGJlIHVzZWQgdG8gY29ycmVjdCB0aGUgYmlhcy4gSW50ZXJuYWxseSwgaXQgaXMgc2ltcGx5IG11bHRpcGxpZWQgd2l0aCB0aGUgJ2FzcGVjdCByYXRpbycgbGF5b3V0IG9wdGlvbi4iKSwxKSxzY2QpLExJKSxtcmIoamNkKSkpKTtPYWQoYSx5eGUsd3hlLG90Yyk7T2FkKGEseXhlLHd4ZSxwdGMpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHp4ZSksaXllKSwnQ3V0dGluZyBTdHJhdGVneScpLCdUaGUgc3RyYXRlZ3kgYnkgd2hpY2ggdGhlIGxheWVyIGluZGV4ZXMgYXJlIGRldGVybWluZWQgYXQgd2hpY2ggdGhlIGxheWVyaW5nIGNydW1ibGVzIGludG8gY2h1bmtzLicpLHd0YyksdGNkKSxQViksbXJiKGpjZCkpKSk7T2FkKGEsenhlLHd4ZSx4dGMpO09hZChhLHp4ZSx3eGUseXRjKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEF4ZSksaXllKSwnTWFudWFsbHkgU3BlY2lmaWVkIEN1dHMnKSwnQWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkgaGVyIG93biBjdXRzIGZvciBhIGNlcnRhaW4gZ3JhcGguJyksd2NkKSxISyksbXJiKGpjZCkpKSk7T2FkKGEsQXhlLHp4ZSxydGMpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEJ4ZSksJ3dyYXBwaW5nLmN1dHRpbmcubXNkJyksJ01TRCBGcmVlZG9tJyksJ1RoZSBNU0QgY3V0dGluZyBzdHJhdGVneSBzdGFydHMgd2l0aCBhbiBpbml0aWFsIGd1ZXNzIG9uIHRoZSBudW1iZXIgb2YgY2h1bmtzIHRoZSBncmFwaCBzaG91bGQgYmUgc3BsaXQgaW50by4gVGhlIGZyZWVkb20gc3BlY2lmaWVzIGhvdyBtdWNoIHRoZSBzdHJhdGVneSBtYXkgZGV2aWF0ZSBmcm9tIHRoaXMgZ3Vlc3MuIEUuZy4gaWYgYW4gaW5pdGlhbCBudW1iZXIgb2YgMyBpcyBjb21wdXRlZCwgYSBmcmVlZG9tIG9mIDEgYWxsb3dzIDIsIDMsIGFuZCA0IGN1dHMuJyksdHRjKSx2Y2QpLFVJKSxtcmIoamNkKSkpKTtPYWQoYSxCeGUsenhlLHV0Yyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsQ3hlKSxqeWUpLCdWYWxpZGlmaWNhdGlvbiBTdHJhdGVneScpLCdXaGVuIHdyYXBwaW5nIGdyYXBocywgb25lIGNhbiBzcGVjaWZ5IGluZGljZXMgdGhhdCBhcmUgbm90IGFsbG93ZWQgYXMgc3BsaXQgcG9pbnRzLiBUaGUgdmFsaWRpZmljYXRpb24gc3RyYXRlZ3kgbWFrZXMgc3VyZSBldmVyeSBjb21wdXRlZCBzcGxpdCBwb2ludCBpcyBhbGxvd2VkLicpLEx0YyksdGNkKSxyVyksbXJiKGpjZCkpKSk7T2FkKGEsQ3hlLHd4ZSxNdGMpO09hZChhLEN4ZSx3eGUsTnRjKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLER4ZSksanllKSwnVmFsaWQgSW5kaWNlcyBmb3IgV3JhcHBpbmcnKSxudWxsKSx3Y2QpLEhLKSxtcmIoamNkKSkpKTtPYWQoYSxEeGUsd3hlLEl0Yyk7T2FkKGEsRHhlLHd4ZSxKdGMpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEV4ZSksa3llKSwnSW1wcm92ZSBDdXRzJyksJ0ZvciBnZW5lcmFsIGdyYXBocyBpdCBpcyBpbXBvcnRhbnQgdGhhdCBub3QgdG9vIG1hbnkgZWRnZXMgd3JhcCBiYWNrd2FyZHMuIFRodXMgYSBjb21wcm9taXNlIGJldHdlZW4gZXZlbmx5LWRpc3RyaWJ1dGVkIGN1dHMgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgY3V0IGVkZ2VzIGlzIHNvdWdodC4nKSx0cnVlKSxyY2QpLEdJKSxtcmIoamNkKSkpKTtPYWQoYSxFeGUsd3hlLEN0Yyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsRnhlKSxreWUpLCdEaXN0YW5jZSBQZW5hbHR5IFdoZW4gSW1wcm92aW5nIEN1dHMnKSxudWxsKSwyKSxzY2QpLExJKSxtcmIoamNkKSkpKTtPYWQoYSxGeGUsd3hlLEF0Yyk7T2FkKGEsRnhlLEV4ZSx0cnVlKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxHeGUpLGt5ZSksJ0ltcHJvdmUgV3JhcHBlZCBFZGdlcycpLCdUaGUgaW5pdGlhbCB3cmFwcGluZyBpcyBwZXJmb3JtZWQgaW4gYSB2ZXJ5IHNpbXBsZSB3YXkuIEFzIGEgY29uc2VxdWVuY2UsIGVkZ2VzIHRoYXQgd3JhcCBmcm9tIG9uZSBjaHVuayB0byBhbm90aGVyIG1heSBiZSB1bm5lY2Vzc2FyaWx5IGxvbmcuIEFjdGl2YXRpbmcgdGhpcyBvcHRpb24gdHJpZXMgdG8gc2hvcnRlbiBzdWNoIGVkZ2VzLicpLHRydWUpLHJjZCksR0kpLG1yYihqY2QpKSkpO09hZChhLEd4ZSx3eGUsRXRjKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxIeGUpLGx5ZSksJ0xheWVyIFVuemlwcGluZyBTdHJhdGVneScpLCJUaGUgc3RyYXRlZ3kgdG8gdXNlIGZvciB1bnppcHBpbmcgYSBsYXllciBpbnRvIG11bHRpcGxlIHN1YmxheWVycyB3aGlsZSBtYWludGFpbmluZyB0aGUgZXhpc3Rpbmcgb3JkZXJpbmcgb2Ygbm9kZXMgYW5kIGVkZ2VzIGFmdGVyIGNyb3NzaW5nIG1pbmltaXphdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ05PTkUnLiIpLEdzYyksdGNkKSxhVyksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsSXhlKSxseWUpLCdVbnppcHBpbmcgTGF5ZXIgU3BsaXQnKSwnRGVmaW5lcyB0aGUgbnVtYmVyIG9mIHN1YmxheWVycyB0byBzcGxpdCBhIGxheWVyIGludG8uIFRoZSBwcm9wZXJ0eSBjYW4gYmUgc2V0IHRvIHRoZSBub2RlcyBpbiBhIGxheWVyLCB3aGljaCB0aGVuIGFwcGxpZXMgdGhlIHByb3BlcnR5IGZvciB0aGUgbGF5ZXIuIElmIG11bHRpcGxlIG5vZGVzIHNldCB0aGUgdmFsdWUgdG8gZGlmZmVyZW50IHZhbHVlcywgdGhlbiB0aGUgbG93ZXN0IHZhbHVlIGlzIGNob3Nlbi4nKSxCc2MpLHZjZCksVUkpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEp4ZSksbHllKSwnUmVzZXQgQWx0ZXJuYXRpb24gb24gTG9uZyBFZGdlcycpLCdJZiBzZXQgdG8gdHJ1ZSwgbm9kZXMgd2lsbCBhbHdheXMgYmUgcGxhY2VkIGluIHRoZSBmaXJzdCBzdWJsYXllciBhZnRlciBhIGxvbmcgZWRnZSB3aGVuIHVzaW5nIHRoZSBBTFRFUk5BVElORyBzdHJhdGVneS4gT3RoZXJ3aXNlIGxvbmcgZWRnZSBkdW1taWVzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzIHJlZ3VsYXIgbm9kZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRydWUuIFRoZSBwcm9wZXJ0eSBjYW4gYmUgc2V0IHRvIHRoZSBub2RlcyBpbiBhIGxheWVyLCB3aGljaCB0aGVuIGFwcGxpZXMgdGhlIHByb3BlcnR5IGZvciB0aGUgbGF5ZXIuIElmIGFueSBub2RlIHNldHMgdGhlIHZhbHVlIHRvIGZhbHNlLCB0aGVuIHRoZSB2YWx1ZSBpcyBzZXQgdG8gZmFsc2UgZm9yIHRoZSBlbnRpcmUgbGF5ZXIuJyksRHNjKSxyY2QpLEdJKSxtcmIoaWNkKSkpKTtPYWQoYSxKeGUsSHhlLEVzYyk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsS3hlKSxteWUpLCdFZGdlIExhYmVsIFNpZGUgU2VsZWN0aW9uJyksJ01ldGhvZCB0byBkZWNpZGUgb24gZWRnZSBsYWJlbCBzaWRlcy4nKSxScmMpLHRjZCksVFYpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEx4ZSksbXllKSwnRWRnZSBDZW50ZXIgTGFiZWwgUGxhY2VtZW50IFN0cmF0ZWd5JyksJ0RldGVybWluZXMgaW4gd2hpY2ggbGF5ZXIgY2VudGVyIGxhYmVscyBvZiBsb25nIGVkZ2VzIHNob3VsZCBiZSBwbGFjZWQuJyksUHJjKSx0Y2QpLE1WKSxucmIoamNkLFdDKE9DKFYxLDEpLEVyZSwxNzAsMCxbaGNkXSkpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE14ZSksbnllKSwnQ29uc2lkZXIgTW9kZWwgT3JkZXInKSwnUHJlc2VydmVzIHRoZSBvcmRlciBvZiBub2RlcyBhbmQgZWRnZXMgaW4gdGhlIG1vZGVsIGZpbGUgaWYgdGhpcyBkb2VzIG5vdCBsZWFkIHRvIGFkZGl0aW9uYWwgZWRnZSBjcm9zc2luZ3MuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhpcyBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHNpbmNlIHRoZSBub2RlIGFuZCBlZGdlIG9yZGVyIG1pZ2h0IGJlIGNvbmZsaWN0aW5nLicpLHByYyksdGNkKSxrVyksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsTnhlKSxueWUpLCdDb25zaWRlciBQb3J0IE9yZGVyJyksJ0lmIGRpc2FibGVkIHRoZSBwb3J0IG9yZGVyIG9mIG91dHB1dCBwb3J0cyBpcyBkZXJpdmVkIGZyb20gdGhlIGVkZ2Ugb3JkZXIgYW5kIGlucHV0IHBvcnRzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIGluY29taW5nIGNvbm5lY3Rpb25zLiBJZiBlbmFibGVkIGFsbCBwb3J0cyBhcmUgb3JkZXJlZCBieSB0aGUgcG9ydCBtb2RlbCBvcmRlci4nKSxmYWxzZSkscmNkKSxHSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsT3hlKSxueWUpLCdObyBNb2RlbCBPcmRlcicpLCdTZXQgb24gYSBub2RlIHRvIG5vdCBzZXQgYSBtb2RlbCBvcmRlciBmb3IgdGhpcyBub2RlIGV2ZW4gdGhvdWdoIGl0IGlzIGEgcmVhbCBub2RlLicpLGZhbHNlKSxyY2QpLEdJKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxQeGUpLG55ZSksJ0NvbnNpZGVyIE1vZGVsIE9yZGVyIGZvciBDb21wb25lbnRzJyksJ0lmIHNldCB0byBOT05FIHRoZSB1c3VhbCBvcmRlcmluZyBzdHJhdGVneSAoYnkgY3VtdWxhdGl2ZSBub2RlIHByaW9yaXR5IGFuZCBzaXplIG9mIG5vZGVzKSBpcyB1c2VkLiBJTlNJREVfUE9SVF9TSURFUyBvcmRlcnMgdGhlIGNvbXBvbmVudHMgd2l0aCBleHRlcm5hbCBwb3J0cyBvbmx5IGluc2lkZSB0aGUgZ3JvdXBzIHdpdGggdGhlIHNhbWUgcG9ydCBzaWRlLiBGT1JDRV9NT0RFTF9PUkRFUiBlbmZvcmNlcyB0aGUgbW9kZSBvcmRlciBvbiBjb21wb25lbnRzLiBUaGlzIG9wdGlvbiBtaWdodCBwcm9kdWNlIGJhZCBhbGlnbm1lbnRzIGFuZCBzdWIgb3B0aW1hbCBkcmF3aW5ncyBpbiB0ZXJtcyBvZiB1c2VkIGFyZWEgc2luY2UgdGhlIG9yZGVyaW5nIHNob3VsZCBiZSByZXNwZWN0ZWQuJyksaHJjKSx0Y2QpLGlQKSxtcmIoamNkKSkpKTtPYWQoYSxQeGUsUXVlLG51bGwpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFF4ZSksbnllKSwnTG9uZyBFZGdlIE9yZGVyaW5nIFN0cmF0ZWd5JyksJ0luZGljYXRlcyB3aGV0aGVyIGxvbmcgZWRnZXMgYXJlIHNvcnRlZCB1bmRlciwgb3Zlciwgb3IgZXF1YWwgdG8gbm9kZXMgdGhhdCBoYXZlIG5vIGNvbm5lY3Rpb24gdG8gYSBwcmV2aW91cyBsYXllciBpbiBhIGxlZnQtdG8tcmlnaHQgb3IgcmlnaHQtdG8tbGVmdCBsYXlvdXQuIFVuZGVyIGFuZCBvdmVyIGNoYW5nZXMgdG8gcmlnaHQgYW5kIGxlZnQgaW4gYSB2ZXJ0aWNhbCBsYXlvdXQuJyksbHJjKSx0Y2QpLGdXKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxSeGUpLG55ZSksJ0Nyb3NzaW5nIENvdW50ZXIgTm9kZSBPcmRlciBJbmZsdWVuY2UnKSwnSW5kaWNhdGVzIHdpdGggd2hhdCBwZXJjZW50YWdlICgxIGZvciAxMDAlKSB2aW9sYXRpb25zIG9mIHRoZSBub2RlIG1vZGVsIG9yZGVyIGFyZSB3ZWlnaHRlZCBhZ2FpbnN0IHRoZSBjcm9zc2luZ3MgZS5nLiBhIHZhbHVlIG9mIDAuNSBtZWFucyB0d28gbW9kZWwgb3JkZXIgdmlvbGF0aW9ucyBhcmUgYXMgaW1wb3J0YW50IGFzIG9uIGVkZ2UgY3Jvc3NpbmcuIFRoaXMgYWxsb3dzIHNvbWUgZWRnZSBjcm9zc2luZ3MgaW4gZmF2b3Igb2YgcHJlc2VydmluZyB0aGUgbW9kZWwgb3JkZXIuIEl0IGlzIGFkdmlzZWQgdG8gc2V0IHRoaXMgdmFsdWUgdG8gYSB2ZXJ5IHNtYWxsIHBvc2l0aXZlIHZhbHVlIChlLmcuIDAuMDAxKSB0byBoYXZlIG1pbmltYWwgY3Jvc3NpbmcgYW5kIGEgb3B0aW1hbCBub2RlIG9yZGVyLiBEZWZhdWx0cyB0byBubyBpbmZsdWVuY2UgKDApLicpLDApLHNjZCksTEkpLG1yYihqY2QpKSkpO09hZChhLFJ4ZSxNeGUsbnVsbCk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsU3hlKSxueWUpLCdDcm9zc2luZyBDb3VudGVyIFBvcnQgT3JkZXIgSW5mbHVlbmNlJyksJ0luZGljYXRlcyB3aXRoIHdoYXQgcGVyY2VudGFnZSAoMSBmb3IgMTAwJSkgdmlvbGF0aW9ucyBvZiB0aGUgcG9ydCBtb2RlbCBvcmRlciBhcmUgd2VpZ2h0ZWQgYWdhaW5zdCB0aGUgY3Jvc3NpbmdzIGUuZy4gYSB2YWx1ZSBvZiAwLjUgbWVhbnMgdHdvIG1vZGVsIG9yZGVyIHZpb2xhdGlvbnMgYXJlIGFzIGltcG9ydGFudCBhcyBvbiBlZGdlIGNyb3NzaW5nLiBUaGlzIGFsbG93cyBzb21lIGVkZ2UgY3Jvc3NpbmdzIGluIGZhdm9yIG9mIHByZXNlcnZpbmcgdGhlIG1vZGVsIG9yZGVyLiBJdCBpcyBhZHZpc2VkIHRvIHNldCB0aGlzIHZhbHVlIHRvIGEgdmVyeSBzbWFsbCBwb3NpdGl2ZSB2YWx1ZSAoZS5nLiAwLjAwMSkgdG8gaGF2ZSBtaW5pbWFsIGNyb3NzaW5nIGFuZCBhIG9wdGltYWwgcG9ydCBvcmRlci4gRGVmYXVsdHMgdG8gbm8gaW5mbHVlbmNlICgwKS4nKSwwKSxzY2QpLExJKSxtcmIoamNkKSkpKTtPYWQoYSxTeGUsTXhlLG51bGwpO0N3YygobmV3IER3YyxhKSl9O3ZhciBhcmMsYnJjLGNyYyxkcmMsZXJjLGZyYyxncmMsaHJjLGlyYyxqcmMsa3JjLGxyYyxtcmMsbnJjLG9yYyxwcmMscXJjLHJyYyx0cmMsdXJjLHZyYyx3cmMseHJjLHlyYyx6cmMsQXJjLEJyYyxDcmMsRHJjLEVyYyxGcmMsR3JjLEhyYyxJcmMsSnJjLEtyYyxMcmMsTXJjLE5yYyxPcmMsUHJjLFFyYyxScmMsU3JjLFRyYyxVcmMsVnJjLFdyYyxYcmMsWXJjLFpyYywkcmMsX3JjLGFzYyxic2MsY3NjLGRzYyxlc2MsZnNjLGdzYyxoc2MsaXNjLGpzYyxrc2MsbHNjLG1zYyxuc2Msb3NjLHBzYyxxc2MscnNjLHNzYyx0c2MsdXNjLHZzYyx3c2MseHNjLHlzYyx6c2MsQXNjLEJzYyxDc2MsRHNjLEVzYyxGc2MsR3NjLEhzYyxJc2MsSnNjLEtzYyxMc2MsTXNjLE5zYyxPc2MsUHNjLFFzYyxSc2MsU3NjLFRzYyxVc2MsVnNjLFdzYyxYc2MsWXNjLFpzYywkc2MsX3NjLGF0YyxidGMsY3RjLGR0YyxldGMsZnRjLGd0YyxodGMsaXRjLGp0YyxrdGMsbHRjLG10YyxudGMsb3RjLHB0YyxxdGMscnRjLHN0Yyx0dGMsdXRjLHZ0Yyx3dGMseHRjLHl0Yyx6dGMsQXRjLEJ0YyxDdGMsRHRjLEV0YyxGdGMsR3RjLEh0YyxJdGMsSnRjLEt0YyxMdGMsTXRjLE50Yzt2YXIgYlc9amViKG53ZSwnTGF5ZXJlZE1ldGFEYXRhUHJvdmlkZXInLDgzOCk7WWNiKDk3NSwxLEh1ZSxEd2MpO18udGY9ZnVuY3Rpb24gRXdjKGEpe0N3YyhhKX07dmFyIFJ0YyxTdGMsVHRjLFV0YyxWdGMsV3RjLFh0YyxZdGMsWnRjLCR0YyxfdGMsYXVjLGJ1YyxjdWMsZHVjLGV1YyxmdWMsZ3VjLGh1YyxpdWMsanVjLGt1YyxsdWMsbXVjLG51YyxvdWMscHVjLHF1YyxydWMsc3VjLHR1Yyx1dWMsdnVjLHd1Yyx4dWMseXVjLHp1YyxBdWMsQnVjLEN1YyxEdWMsRXVjLEZ1YyxHdWMsSHVjLEl1YyxKdWMsS3VjLEx1YyxNdWMsTnVjLE91YyxQdWMsUXVjLFJ1YyxTdWMsVHVjLFV1YyxWdWMsV3VjLFh1YyxZdWMsWnVjLCR1YyxfdWMsYXZjLGJ2YyxjdmMsZHZjLGV2YyxmdmMsZ3ZjLGh2YyxpdmMsanZjLGt2YyxsdmMsbXZjLG52YyxvdmMscHZjLHF2YyxydmMsc3ZjLHR2Yyx1dmMsdnZjLHd2Yyx4dmMseXZjLHp2YyxBdmMsQnZjLEN2YyxEdmMsRXZjLEZ2YyxHdmMsSHZjLEl2YyxKdmMsS3ZjLEx2YyxNdmMsTnZjLE92YyxQdmMsUXZjLFJ2YyxTdmMsVHZjLFV2YyxWdmMsV3ZjLFh2YyxZdmMsWnZjLCR2YyxfdmMsYXdjLGJ3Yyxjd2MsZHdjLGV3Yyxmd2MsZ3djLGh3Yyxpd2MsandjLGt3Yyxsd2MsbXdjLG53Yyxvd2MscHdjLHF3Yyxyd2Msc3djLHR3Yyx1d2MsdndjLHd3Yyx4d2MseXdjLHp3YyxBd2M7dmFyIGRXPWplYihud2UsJ0xheWVyZWRPcHRpb25zJyw5NzUpO1ljYig5NzYsMSx7fSxGd2MpO18udWY9ZnVuY3Rpb24gR3djKCl7dmFyIGE7cmV0dXJuIGE9bmV3IHZRYixhfTtfLnZmPWZ1bmN0aW9uIEh3YyhhKXt9O3ZhciBjVz1qZWIobndlLCdMYXllcmVkT3B0aW9ucy9MYXllcmVkRmFjdG9yeScsOTc2KTtZY2IoMTMzMCwxLHt9KTtfLmE9MDt2YXIgSXdjO3ZhciBWMj1qZWIoY3plLCdFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlcicsMTMzMCk7WWNiKDc3MiwxMzMwLHt9LFV3Yyk7dmFyIFJ3YyxTd2M7dmFyIGVXPWplYihud2UsJ0xheWVyZWRTcGFjaW5ncy9MYXllcmVkU3BhY2luZ3NCdWlsZGVyJyw3NzIpO1ljYigyNjUsMjMsezM6MSwzNDoxLDIzOjEsMjY1OjEsMTg4OjEsMTk2OjF9LGV4Yyk7Xy5iZz1mdW5jdGlvbiBneGMoKXtyZXR1cm4gZHhjKHRoaXMpfTtfLm9nPWZ1bmN0aW9uIGZ4Yygpe3JldHVybiBkeGModGhpcyl9O3ZhciBWd2MsV3djLFh3YyxZd2MsWndjLCR3Yyxfd2MsYXhjLGJ4Yzt2YXIgZlc9a2ViKG53ZSwnTGF5ZXJpbmdTdHJhdGVneScsMjY1LE1JLGl4YyxoeGMpO3ZhciBqeGM7WWNiKDM0OSwyMyx7MzoxLDM0OjEsMjM6MSwzNDk6MX0scXhjKTt2YXIgbHhjLG14YyxueGM7dmFyIGdXPWtlYihud2UsJ0xvbmdFZGdlT3JkZXJpbmdTdHJhdGVneScsMzQ5LE1JLHN4YyxyeGMpO3ZhciB0eGM7WWNiKDIwMywyMyx7MzoxLDM0OjEsMjM6MSwyMDM6MX0sQnhjKTt2YXIgdnhjLHd4Yyx4eGMseXhjO3ZhciBoVz1rZWIobndlLCdOb2RlRmxleGliaWxpdHknLDIwMyxNSSxFeGMsRHhjKTt2YXIgRnhjO1ljYigzMjQsMjMsezM6MSwzNDoxLDIzOjEsMzI0OjEsMTg4OjEsMTk2OjF9LE94Yyk7Xy5iZz1mdW5jdGlvbiBReGMoKXtyZXR1cm4gTnhjKHRoaXMpfTtfLm9nPWZ1bmN0aW9uIFB4Yygpe3JldHVybiBOeGModGhpcyl9O3ZhciBIeGMsSXhjLEp4YyxLeGMsTHhjO3ZhciBpVz1rZWIobndlLCdOb2RlUGxhY2VtZW50U3RyYXRlZ3knLDMyNCxNSSxTeGMsUnhjKTt2YXIgVHhjO1ljYigyNDIsMjMsezM6MSwzNDoxLDIzOjEsMjQyOjF9LGV5Yyk7dmFyIFZ4YyxXeGMsWHhjLFl4YyxaeGMsJHhjLF94YyxheWMsYnljLGN5Yzt2YXIgalc9a2ViKG53ZSwnTm9kZVByb21vdGlvblN0cmF0ZWd5JywyNDIsTUksZ3ljLGZ5Yyk7dmFyIGh5YztZY2IoMjY2LDIzLHszOjEsMzQ6MSwyMzoxLDI2NjoxfSxveWMpO3ZhciBqeWMsa3ljLGx5YyxteWM7dmFyIGtXPWtlYihud2UsJ09yZGVyaW5nU3RyYXRlZ3knLDI2NixNSSxxeWMscHljKTt2YXIgcnljO1ljYig0MTgsMjMsezM6MSwzNDoxLDIzOjEsNDE4OjF9LHd5Yyk7dmFyIHR5Yyx1eWM7dmFyIGxXPWtlYihud2UsJ1BvcnRTb3J0aW5nU3RyYXRlZ3knLDQxOCxNSSx5eWMseHljKTt2YXIgenljO1ljYig0NDksMjMsezM6MSwzNDoxLDIzOjEsNDQ5OjF9LEZ5Yyk7dmFyIEJ5YyxDeWMsRHljO3ZhciBtVz1rZWIobndlLCdQb3J0VHlwZScsNDQ5LE1JLEh5YyxHeWMpO3ZhciBJeWM7WWNiKDM3OSwyMyx7MzoxLDM0OjEsMjM6MSwzNzk6MX0sT3ljKTt2YXIgS3ljLEx5YyxNeWM7dmFyIG5XPWtlYihud2UsJ1NlbGZMb29wRGlzdHJpYnV0aW9uU3RyYXRlZ3knLDM3OSxNSSxReWMsUHljKTt2YXIgUnljO1ljYigzNDUsMjMsezM6MSwzNDoxLDIzOjEsMzQ1OjF9LFh5Yyk7dmFyIFR5YyxVeWMsVnljO3ZhciBvVz1rZWIobndlLCdTZWxmTG9vcE9yZGVyaW5nU3RyYXRlZ3knLDM0NSxNSSxaeWMsWXljKTt2YXIgJHljO1ljYigzMTMsMSx7MzEzOjF9LGp6Yyk7dmFyIHBXPWplYihud2UsJ1NwYWNpbmdzJywzMTMpO1ljYigzNDYsMjMsezM6MSwzNDoxLDIzOjEsMzQ2OjF9LHB6Yyk7dmFyIGx6YyxtemMsbnpjO3ZhciBxVz1rZWIobndlLCdTcGxpbmVSb3V0aW5nTW9kZScsMzQ2LE1JLHJ6YyxxemMpO3ZhciBzemM7WWNiKDM0OCwyMyx7MzoxLDM0OjEsMjM6MSwzNDg6MX0seXpjKTt2YXIgdXpjLHZ6Yyx3emM7dmFyIHJXPWtlYihud2UsJ1ZhbGlkaWZ5U3RyYXRlZ3knLDM0OCxNSSxBemMsenpjKTt2YXIgQnpjO1ljYigzODAsMjMsezM6MSwzNDoxLDIzOjEsMzgwOjF9LEh6Yyk7dmFyIER6YyxFemMsRnpjO3ZhciBzVz1rZWIobndlLCdXcmFwcGluZ1N0cmF0ZWd5JywzODAsTUksSnpjLEl6Yyk7dmFyIEt6YztZY2IoMTMzNywxLGd6ZSxRemMpO18ucGc9ZnVuY3Rpb24gUnpjKGEpe3JldHVybiBKRChhLDM2KSxNemN9O18uSWY9ZnVuY3Rpb24gU3pjKGEsYil7UHpjKHRoaXMsSkQoYSwzNiksYil9O3ZhciBNemM7dmFyIHRXPWplYihoemUsJ0RlcHRoRmlyc3RDeWNsZUJyZWFrZXInLDEzMzcpO1ljYig3NzMsMSxnemUsWHpjKTtfLnBnPWZ1bmN0aW9uIFp6YyhhKXtyZXR1cm4gSkQoYSwzNiksVHpjfTtfLklmPWZ1bmN0aW9uICR6YyhhLGIpe1Z6Yyh0aGlzLEpEKGEsMzYpLGIpfTtfLnFnPWZ1bmN0aW9uIFl6YyhhKXtyZXR1cm4gSkQoTWxiKGEseHZiKHRoaXMuZCxhLmMubGVuZ3RoKSksOSl9O3ZhciBUemM7dmFyIHVXPWplYihoemUsJ0dyZWVkeUN5Y2xlQnJlYWtlcicsNzczKTtZY2IoMTM0MCw3NzMsZ3plLF96Yyk7Xy5xZz1mdW5jdGlvbiBhQWMoYSl7dmFyIGIsYyxkLGU7ZT1udWxsO2I9SHFlO2ZvcihkPW5ldyBybWIoYSk7ZC5hPGQuYy5jLmxlbmd0aDspe2M9SkQocG1iKGQpLDkpO2lmKFhNYihjLChJcWMoKSxqcWMpKSYmSkQoV01iKGMsanFjKSwxNykuYTxiKXtiPUpEKFdNYihjLGpxYyksMTcpLmE7ZT1jfX1pZighZSl7cmV0dXJuIEpEKE1sYihhLHh2Yih0aGlzLmQsYS5jLmxlbmd0aCkpLDkpfXJldHVybiBlfTt2YXIgdlc9amViKGh6ZSwnR3JlZWR5TW9kZWxPcmRlckN5Y2xlQnJlYWtlcicsMTM0MCk7WWNiKDEzMzgsMSxnemUsZkFjKTtfLnBnPWZ1bmN0aW9uIGdBYyhhKXtyZXR1cm4gSkQoYSwzNiksYkFjfTtfLklmPWZ1bmN0aW9uIGhBYyhhLGIpe2VBYyh0aGlzLEpEKGEsMzYpLGIpfTt2YXIgYkFjO3ZhciB3Vz1qZWIoaHplLCdJbnRlcmFjdGl2ZUN5Y2xlQnJlYWtlcicsMTMzOCk7WWNiKDEzMzksMSxnemUsbUFjKTtfLnBnPWZ1bmN0aW9uIG5BYyhhKXtyZXR1cm4gSkQoYSwzNiksaUFjfTtfLklmPWZ1bmN0aW9uIG9BYyhhLGIpe2xBYyh0aGlzLEpEKGEsMzYpLGIpfTtfLmE9MDtfLmI9MDt2YXIgaUFjO3ZhciB4Vz1qZWIoaHplLCdNb2RlbE9yZGVyQ3ljbGVCcmVha2VyJywxMzM5KTtZY2IoMTM1MiwxLGd6ZSxzQWMpO18ucGc9ZnVuY3Rpb24gdEFjKGEpe3JldHVybiBKRChhLDM2KSxwQWN9O18uSWY9ZnVuY3Rpb24gdkFjKGEsYil7ckFjKHRoaXMsSkQoYSwzNiksYil9O3ZhciBwQWM7dmFyIHpXPWplYihpemUsJ0JyZWFkdGhGaXJzdE1vZGVsT3JkZXJMYXllcmVyJywxMzUyKTtZY2IoMTM1MywxLEJ0ZSx3QWMpO18uTGU9ZnVuY3Rpb24geEFjKGEsYil7cmV0dXJuIHVBYyhKRChhLDkpLEpEKGIsOSkpfTtfLkZiPWZ1bmN0aW9uIHlBYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gekFjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciB5Vz1qZWIoaXplLCdCcmVhZHRoRmlyc3RNb2RlbE9yZGVyTGF5ZXJlci9sYW1iZGEkMCRUeXBlJywxMzUzKTtZY2IoMTM0MywxLGd6ZSxKQWMpO18ucGc9ZnVuY3Rpb24gS0FjKGEpe3JldHVybiBKRChhLDM2KSxBQWN9O18uSWY9ZnVuY3Rpb24gTEFjKGEsYil7SEFjKHRoaXMsSkQoYSwzNiksYil9O3ZhciBBQWM7dmFyIENXPWplYihpemUsJ0NvZmZtYW5HcmFoYW1MYXllcmVyJywxMzQzKTtZY2IoMTM0NCwxLEJ0ZSxNQWMpO18uTGU9ZnVuY3Rpb24gTkFjKGEsYil7cmV0dXJuIERBYyh0aGlzLmEsSkQoYSw5KSxKRChiLDkpKX07Xy5GYj1mdW5jdGlvbiBPQWMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFBBYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgQVc9amViKGl6ZSwnQ29mZm1hbkdyYWhhbUxheWVyZXIvMG1ldGhvZHJlZiRjb21wYXJlTm9kZXNJblRvcG8kVHlwZScsMTM0NCk7WWNiKDEzNDUsMSxCdGUsUUFjKTtfLkxlPWZ1bmN0aW9uIFJBYyhhLGIpe3JldHVybiBHQWModGhpcy5hLEpEKGEsOSksSkQoYiw5KSl9O18uRmI9ZnVuY3Rpb24gU0FjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBUQWMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIEJXPWplYihpemUsJ0NvZmZtYW5HcmFoYW1MYXllcmVyL2xhbWJkYSQxJFR5cGUnLDEzNDUpO1ljYigxMzU0LDEsZ3plLF9BYyk7Xy5wZz1mdW5jdGlvbiBhQmMoYSl7cmV0dXJuIEpEKGEsMzYpLFVBY307Xy5JZj1mdW5jdGlvbiBjQmMoYSxiKXskQWModGhpcyxKRChhLDM2KSxiKX07Xy5jPTA7Xy5lPTA7dmFyIFVBYzt2YXIgRVc9amViKGl6ZSwnRGVwdGhGaXJzdE1vZGVsT3JkZXJMYXllcmVyJywxMzU0KTtZY2IoMTM1NSwxLEJ0ZSxkQmMpO18uTGU9ZnVuY3Rpb24gZUJjKGEsYil7cmV0dXJuIGJCYyhKRChhLDkpLEpEKGIsOSkpfTtfLkZiPWZ1bmN0aW9uIGZCYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gZ0JjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBEVz1qZWIoaXplLCdEZXB0aEZpcnN0TW9kZWxPcmRlckxheWVyZXIvbGFtYmRhJDAkVHlwZScsMTM1NSk7WWNiKDEzNDYsMSxnemUsakJjKTtfLnBnPWZ1bmN0aW9uIGtCYyhhKXtyZXR1cm4gSkQoYSwzNiksRTljKEU5YyhFOWMobmV3IEo5YywoQ1FiKCkseFFiKSwodTViKCksUjRiKSkseVFiLCQ0YikselFiLFo0Yil9O18uSWY9ZnVuY3Rpb24gbEJjKGEsYil7aUJjKEpEKGEsMzYpLGIpfTt2YXIgR1c9amViKGl6ZSwnSW50ZXJhY3RpdmVMYXllcmVyJywxMzQ2KTtZY2IoNTYwLDEsezU2MDoxfSxtQmMpO18uYT0wO18uYz0wO3ZhciBGVz1qZWIoaXplLCdJbnRlcmFjdGl2ZUxheWVyZXIvTGF5ZXJTcGFuJyw1NjApO1ljYigxMzQyLDEsZ3plLHNCYyk7Xy5wZz1mdW5jdGlvbiB0QmMoYSl7cmV0dXJuIEpEKGEsMzYpLG5CY307Xy5JZj1mdW5jdGlvbiB1QmMoYSxiKXtwQmModGhpcyxKRChhLDM2KSxiKX07dmFyIG5CYzt2YXIgSFc9amViKGl6ZSwnTG9uZ2VzdFBhdGhMYXllcmVyJywxMzQyKTtZY2IoMTM1MSwxLGd6ZSxBQmMpO18ucGc9ZnVuY3Rpb24gQkJjKGEpe3JldHVybiBKRChhLDM2KSx2QmN9O18uSWY9ZnVuY3Rpb24gQ0JjKGEsYil7eEJjKHRoaXMsSkQoYSwzNiksYil9O3ZhciB2QmM7dmFyIElXPWplYihpemUsJ0xvbmdlc3RQYXRoU291cmNlTGF5ZXJlcicsMTM1MSk7WWNiKDEzNDksMSxnemUsTEJjKTtfLnBnPWZ1bmN0aW9uIE1CYyhhKXtyZXR1cm4gSkQoYSwzNiksRTljKEU5YyhFOWMobmV3IEo5YywoQ1FiKCkseFFiKSwodTViKCksQjRiKSkseVFiLCQ0YikselFiLFo0Yil9O18uSWY9ZnVuY3Rpb24gTkJjKGEsYil7SkJjKHRoaXMsSkQoYSwzNiksYil9O18uYT0wO18uYj0wO18uZD0wO3ZhciBEQmMsRUJjO3ZhciBLVz1qZWIoaXplLCdNaW5XaWR0aExheWVyZXInLDEzNDkpO1ljYigxMzUwLDEsQnRlLFBCYyk7Xy5MZT1mdW5jdGlvbiBRQmMoYSxiKXtyZXR1cm4gT0JjKHRoaXMsSkQoYSw5KSxKRChiLDkpKX07Xy5GYj1mdW5jdGlvbiBSQmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFNCYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgSlc9amViKGl6ZSwnTWluV2lkdGhMYXllcmVyL01pbk91dGdvaW5nRWRnZXNDb21wYXJhdG9yJywxMzUwKTtZY2IoMTM0MSwxLGd6ZSwkQmMpO18ucGc9ZnVuY3Rpb24gX0JjKGEpe3JldHVybiBKRChhLDM2KSxUQmN9O18uSWY9ZnVuY3Rpb24gYUNjKGEsYil7WkJjKHRoaXMsSkQoYSwzNiksYil9O3ZhciBUQmM7dmFyIExXPWplYihpemUsJ05ldHdvcmtTaW1wbGV4TGF5ZXJlcicsMTM0MSk7WWNiKDEzNDcsMSxnemUsbUNjKTtfLnBnPWZ1bmN0aW9uIG5DYyhhKXtyZXR1cm4gSkQoYSwzNiksRTljKEU5YyhFOWMobmV3IEo5YywoQ1FiKCkseFFiKSwodTViKCksQjRiKSkseVFiLCQ0YikselFiLFo0Yil9O18uSWY9ZnVuY3Rpb24gb0NjKGEsYil7akNjKHRoaXMsSkQoYSwzNiksYil9O18uZD0wO18uZj0wO18uZz0wO18uaT0wO18ucz0wO18udD0wO18udT0wO3ZhciBOVz1qZWIoaXplLCdTdHJldGNoV2lkdGhMYXllcmVyJywxMzQ3KTtZY2IoMTM0OCwxLEJ0ZSxxQ2MpO18uTGU9ZnVuY3Rpb24gckNjKGEsYil7cmV0dXJuIHBDYyhKRChhLDkpLEpEKGIsOSkpfTtfLkZiPWZ1bmN0aW9uIHNDYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gdENjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBNVz1qZWIoaXplLCdTdHJldGNoV2lkdGhMYXllcmVyLzEnLDEzNDgpO1ljYig0MDIsMSxqemUpO18uZWc9ZnVuY3Rpb24gSUNjKGEsYixjLGQsZSxmKXt9O18uc2c9ZnVuY3Rpb24gR0NjKGEsYixjKXtyZXR1cm4gekNjKHRoaXMsYSxiLGMpfTtfLmRnPWZ1bmN0aW9uIEhDYygpe3RoaXMuZz1TQyhiRSxremUsMzAsdGhpcy5kLDE1LDEpO3RoaXMuZj1TQyhiRSxremUsMzAsdGhpcy5kLDE1LDEpfTtfLmZnPWZ1bmN0aW9uIEpDYyhhLGIpe3RoaXMuZVthXT1TQyhjRSxpc2UsMzAsYlthXS5sZW5ndGgsMTUsMSl9O18uZ2c9ZnVuY3Rpb24gS0NjKGEsYixjKXt2YXIgZDtkPWNbYV1bYl07ZC5wPWI7dGhpcy5lW2FdW2JdPWJ9O18uaGc9ZnVuY3Rpb24gTENjKGEsYixjLGQpe0pEKE1sYihkW2FdW2JdLmosYyksMTEpLnA9dGhpcy5kKyt9O18uYj0wO18uYz0wO18uZD0wO3ZhciBQVz1qZWIobHplLCdBYnN0cmFjdEJhcnljZW50ZXJQb3J0RGlzdHJpYnV0b3InLDQwMik7WWNiKDE2MzksMSxCdGUsTUNjKTtfLkxlPWZ1bmN0aW9uIE5DYyhhLGIpe3JldHVybiBDQ2ModGhpcy5hLEpEKGEsMTEpLEpEKGIsMTEpKX07Xy5GYj1mdW5jdGlvbiBPQ2MoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFBDYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgT1c9amViKGx6ZSwnQWJzdHJhY3RCYXJ5Y2VudGVyUG9ydERpc3RyaWJ1dG9yL2xhbWJkYSQwJFR5cGUnLDE2MzkpO1ljYig4MTEsMSxod2UsWENjKTtfLmVnPWZ1bmN0aW9uICRDYyhhLGIsYyxkLGUsZil7fTtfLmdnPWZ1bmN0aW9uIGFEYyhhLGIsYyl7fTtfLmhnPWZ1bmN0aW9uIGJEYyhhLGIsYyxkKXt9O18uY2c9ZnVuY3Rpb24gWUNjKCl7cmV0dXJuIGZhbHNlfTtfLmRnPWZ1bmN0aW9uIFpDYygpe3RoaXMuYz10aGlzLmUuYTt0aGlzLmc9dGhpcy5mLmd9O18uZmc9ZnVuY3Rpb24gX0NjKGEsYil7YlthXVswXS5jLnA9YX07Xy5pZz1mdW5jdGlvbiBjRGMoKXtyZXR1cm4gZmFsc2V9O18udGc9ZnVuY3Rpb24gZERjKGEsYixjLGQpe2lmKGMpe1VDYyh0aGlzLGEpfWVsc2V7UkNjKHRoaXMsYSxkKTtTQ2ModGhpcyxhLGIpfWlmKGEuYy5sZW5ndGg+MSl7eWRiKExEKFdNYihnWWIoKHNEYigwLGEuYy5sZW5ndGgpLEpEKGEuY1swXSw5KSkpLChCd2MoKSxldWMpKSkpP3pGYyhhLHRoaXMuZCxKRCh0aGlzLDY1NCkpOihwbmIoKSxTbGIoYSx0aGlzLmQpKTtxRGModGhpcy5lLGEpfX07Xy5qZz1mdW5jdGlvbiBlRGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs7aWYoYiE9VkNjKGMsYS5sZW5ndGgpKXtmPWFbYi0oYz8xOi0xKV07dkNjKHRoaXMuZixmLGM/KEV5YygpLEN5Yyk6KEV5YygpLEJ5YykpfWU9YVtiXVswXTtrPSFkfHxlLms9PShEWWIoKSx3WWIpO2o9X3UoYVtiXSk7dGhpcy50ZyhqLGssZmFsc2UsYyk7Zz0wO2ZvcihpPW5ldyBybWIoaik7aS5hPGkuYy5jLmxlbmd0aDspe2g9SkQocG1iKGkpLDkpO2FbYl1bZysrXT1ofXJldHVybiBmYWxzZX07Xy5rZz1mdW5jdGlvbiBmRGMoYSxiKXt2YXIgYyxkLGUsZixnO2c9VkNjKGIsYS5sZW5ndGgpO2Y9X3UoYVtnXSk7dGhpcy50ZyhmLGZhbHNlLHRydWUsYik7Yz0wO2ZvcihlPW5ldyBybWIoZik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDkpO2FbZ11bYysrXT1kfXJldHVybiBmYWxzZX07dmFyIFNXPWplYihsemUsJ0JhcnljZW50ZXJIZXVyaXN0aWMnLDgxMSk7WWNiKDY1MiwxLHs2NTI6MX0sZ0RjKTtfLkliPWZ1bmN0aW9uIGhEYygpe3JldHVybiAnQmFyeWNlbnRlclN0YXRlIFtub2RlPScrdGhpcy5jKycsIHN1bW1lZFdlaWdodD0nK3RoaXMuZCsnLCBkZWdyZWU9Jyt0aGlzLmIrJywgYmFyeWNlbnRlcj0nK3RoaXMuYSsnLCB2aXNpdGVkPScrdGhpcy5lKyddJ307Xy5iPTA7Xy5kPTA7Xy5lPWZhbHNlO3ZhciBRVz1qZWIobHplLCdCYXJ5Y2VudGVySGV1cmlzdGljL0JhcnljZW50ZXJTdGF0ZScsNjUyKTtZY2IoMTgxMSwxLEJ0ZSxpRGMpO18uTGU9ZnVuY3Rpb24gakRjKGEsYil7cmV0dXJuIFRDYyh0aGlzLmEsSkQoYSw5KSxKRChiLDkpKX07Xy5GYj1mdW5jdGlvbiBrRGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIGxEYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgUlc9amViKGx6ZSwnQmFyeWNlbnRlckhldXJpc3RpYy9sYW1iZGEkMCRUeXBlJywxODExKTtZY2IoODEwLDEsaHdlLHREYyk7Xy5kZz1mdW5jdGlvbiB1RGMoKXt9O18uZWc9ZnVuY3Rpb24gdkRjKGEsYixjLGQsZSxmKXt9O18uaGc9ZnVuY3Rpb24geURjKGEsYixjLGQpe307Xy5mZz1mdW5jdGlvbiB3RGMoYSxiKXt0aGlzLmFbYV09U0MoUVcsezM6MSw0OjEsNToxLDIwNjM6MX0sNjUyLGJbYV0ubGVuZ3RoLDAsMSk7dGhpcy5iW2FdPVNDKFRXLHszOjEsNDoxLDU6MSwyMDY0OjF9LDIzOCxiW2FdLmxlbmd0aCwwLDEpfTtfLmdnPWZ1bmN0aW9uIHhEYyhhLGIsYyl7cERjKHRoaXMsY1thXVtiXSx0cnVlKX07Xy5jPWZhbHNlO3ZhciBWVz1qZWIobHplLCdGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyJyw4MTApO1ljYigyMzgsMSx7MjM4OjF9LEJEYyxDRGMpO18uSWI9ZnVuY3Rpb24gRERjKCl7dmFyIGEsYjtiPW5ldyBVZ2I7Yi5hKz0nWyc7Zm9yKGE9MDthPHRoaXMuZC5sZW5ndGg7YSsrKXtRZ2IoYixzWWIodGhpcy5kW2FdKSk7c0RjKHRoaXMuZyx0aGlzLmRbMF0pLmEhPW51bGwmJlFnYihRZ2IoKGIuYSs9JzwnLGIpLEdlYihzRGModGhpcy5nLHRoaXMuZFswXSkuYSkpLCc+Jyk7YTx0aGlzLmQubGVuZ3RoLTEmJihiLmErPUxxZSxiKX1yZXR1cm4gKGIuYSs9J10nLGIpLmF9O18uYT0wO18uYz0wO18uZj0wO3ZhciBUVz1qZWIobHplLCdGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL0NvbnN0cmFpbnRHcm91cCcsMjM4KTtZY2IoMTgwNiwxLGtyZSxFRGMpO18uQWQ9ZnVuY3Rpb24gRkRjKGEpe3BEYyh0aGlzLmEsSkQoYSw5KSxmYWxzZSl9O3ZhciBVVz1qZWIobHplLCdGb3JzdGVyQ29uc3RyYWludFJlc29sdmVyL2xhbWJkYSQwJFR5cGUnLDE4MDYpO1ljYigyMTcsMSx7MjE3OjEsMjI5OjF9LElEYyk7Xy5lZz1mdW5jdGlvbiBLRGMoYSxiLGMsZCxlLGYpe307Xy5mZz1mdW5jdGlvbiBMRGMoYSxiKXt9O18uZGc9ZnVuY3Rpb24gSkRjKCl7dGhpcy5yPVNDKGNFLGlzZSwzMCx0aGlzLm4sMTUsMSl9O18uZ2c9ZnVuY3Rpb24gTURjKGEsYixjKXt2YXIgZCxlO2U9Y1thXVtiXTtkPWUuZTshIWQmJklsYih0aGlzLmIsZCl9O18uaGc9ZnVuY3Rpb24gTkRjKGEsYixjLGQpeysrdGhpcy5ufTtfLkliPWZ1bmN0aW9uIE9EYygpe3JldHVybiB6bWIodGhpcy5lLG5ldyBRcmIpfTtfLmc9ZmFsc2U7Xy5pPWZhbHNlO18ubj0wO18ucz1mYWxzZTt2YXIgV1c9amViKGx6ZSwnR3JhcGhJbmZvSG9sZGVyJywyMTcpO1ljYigxODUxLDEsaHdlLFNEYyk7Xy5lZz1mdW5jdGlvbiBWRGMoYSxiLGMsZCxlLGYpe307Xy5mZz1mdW5jdGlvbiBXRGMoYSxiKXt9O18uaGc9ZnVuY3Rpb24gWURjKGEsYixjLGQpe307Xy5zZz1mdW5jdGlvbiBURGMoYSxiLGMpe2MmJmI+MD8oc0djKHRoaXMuYSxhW2ItMV0sYVtiXSksdW5kZWZpbmVkKTohYyYmYjxhLmxlbmd0aC0xPyhzR2ModGhpcy5hLGFbYl0sYVtiKzFdKSx1bmRlZmluZWQpOnVHYyh0aGlzLmEsYVtiXSxjPyhSamQoKSxRamQpOihSamQoKSx3amQpKTtyZXR1cm4gUERjKHRoaXMsYSxiLGMpfTtfLmRnPWZ1bmN0aW9uIFVEYygpe3RoaXMuZD1TQyhjRSxpc2UsMzAsdGhpcy5jLDE1LDEpO3RoaXMuYT1uZXcgR0djKHRoaXMuZCl9O18uZ2c9ZnVuY3Rpb24gWERjKGEsYixjKXt2YXIgZDtkPWNbYV1bYl07dGhpcy5jKz1kLmouYy5sZW5ndGh9O18uYz0wO3ZhciBYVz1qZWIobHplLCdHcmVlZHlQb3J0RGlzdHJpYnV0b3InLDE4NTEpO1ljYigxMzYwLDEsZ3plLGRFYyk7Xy5wZz1mdW5jdGlvbiBlRWMoYSl7cmV0dXJuIGFFYyhKRChhLDM2KSl9O18uSWY9ZnVuY3Rpb24gZkVjKGEsYil7Y0VjKEpEKGEsMzYpLGIpfTt2YXIgJERjO3ZhciBaVz1qZWIobHplLCdJbnRlcmFjdGl2ZUNyb3NzaW5nTWluaW1pemVyJywxMzYwKTtZY2IoMTM2MSwxLEJ0ZSxoRWMpO18uTGU9ZnVuY3Rpb24gaUVjKGEsYil7cmV0dXJuIGdFYyh0aGlzLEpEKGEsOSksSkQoYiw5KSl9O18uRmI9ZnVuY3Rpb24gakVjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBrRWMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFlXPWplYihsemUsJ0ludGVyYWN0aXZlQ3Jvc3NpbmdNaW5pbWl6ZXIvMScsMTM2MSk7WWNiKDQ5OCwxLHs0OTg6MSwxMDY6MSw0NDoxfSxJRWMpO18ucGc9ZnVuY3Rpb24gSkVjKGEpe3ZhciBiO3JldHVybiBKRChhLDM2KSxiPUs5YyhsRWMpLEU5YyhiLChDUWIoKSx6UWIpLCh1NWIoKSxqNWIpKSxifTtfLklmPWZ1bmN0aW9uIEtFYyhhLGIpe3pFYyh0aGlzLEpEKGEsMzYpLGIpfTtfLmU9MDt2YXIgbEVjO3ZhciBkWD1qZWIobHplLCdMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXInLDQ5OCk7WWNiKDEzNTcsMSxrcmUsTEVjKTtfLkFkPWZ1bmN0aW9uIE1FYyhhKXtuRWModGhpcy5hLEpEKGEsMjE3KSl9O3ZhciAkVz1qZWIobHplLCdMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMG1ldGhvZHJlZiRjb21wYXJlRGlmZmVyZW50UmFuZG9taXplZExheW91dHMkVHlwZScsMTM1Nyk7WWNiKDEzNTgsMSxrcmUsTkVjKTtfLkFkPWZ1bmN0aW9uIE9FYyhhKXt3RWModGhpcy5hLEpEKGEsMjE3KSl9O3ZhciBfVz1qZWIobHplLCdMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvMW1ldGhvZHJlZiRtaW5pbWl6ZUNyb3NzaW5nc05vQ291bnRlciRUeXBlJywxMzU4KTtZY2IoMTM1OSwxLGtyZSxQRWMpO18uQWQ9ZnVuY3Rpb24gUUVjKGEpe3lFYyh0aGlzLmEsSkQoYSwyMTcpKX07dmFyIGFYPWplYihsemUsJ0xheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci8ybWV0aG9kcmVmJG1pbmltaXplQ3Jvc3NpbmdzV2l0aENvdW50ZXIkVHlwZScsMTM1OSk7WWNiKDQ1MCwyMyx7MzoxLDM0OjEsMjM6MSw0NTA6MX0sVkVjKTt2YXIgUkVjLFNFYyxURWM7dmFyIGJYPWtlYihsemUsJ0xheWVyU3dlZXBDcm9zc2luZ01pbmltaXplci9Dcm9zc01pblR5cGUnLDQ1MCxNSSxYRWMsV0VjKTt2YXIgWUVjO1ljYigxMzU2LDEsSXJlLCRFYyk7Xy5NYj1mdW5jdGlvbiBfRWMoYSl7cmV0dXJuIG1FYygpLEpEKGEsMjUpLmEuYy5sZW5ndGg9PTB9O3ZhciBjWD1qZWIobHplLCdMYXllclN3ZWVwQ3Jvc3NpbmdNaW5pbWl6ZXIvbGFtYmRhJDAkVHlwZScsMTM1Nik7WWNiKDE4MDgsMSxod2UsY0ZjKTtfLmRnPWZ1bmN0aW9uIGRGYygpe307Xy5lZz1mdW5jdGlvbiBlRmMoYSxiLGMsZCxlLGYpe307Xy5oZz1mdW5jdGlvbiBoRmMoYSxiLGMsZCl7fTtfLmZnPWZ1bmN0aW9uIGZGYyhhLGIpe2JbYV1bMF0uYy5wPWE7dGhpcy5iW2FdPVNDKGVYLHszOjEsNDoxLDU6MSwxOTg5OjF9LDY1MyxiW2FdLmxlbmd0aCwwLDEpfTtfLmdnPWZ1bmN0aW9uIGdGYyhhLGIsYyl7dmFyIGQ7ZD1jW2FdW2JdO2QucD1iO1ZDKHRoaXMuYlthXSxiLG5ldyBpRmMpfTt2YXIgaFg9amViKGx6ZSwnTGF5ZXJTd2VlcFR5cGVEZWNpZGVyJywxODA4KTtZY2IoNjUzLDEsezY1MzoxfSxpRmMpO18uSWI9ZnVuY3Rpb24gakZjKCl7cmV0dXJuICdOb2RlSW5mbyBbY29ubmVjdGVkRWRnZXM9Jyt0aGlzLmErJywgaGllcmFyY2hpY2FsSW5mbHVlbmNlPScrdGhpcy5iKycsIHJhbmRvbUluZmx1ZW5jZT0nK3RoaXMuYysnXSd9O18uYT0wO18uYj0wO18uYz0wO3ZhciBlWD1qZWIobHplLCdMYXllclN3ZWVwVHlwZURlY2lkZXIvTm9kZUluZm8nLDY1Myk7WWNiKDE4MDksMSxUdGUsa0ZjKTtfLkxiPWZ1bmN0aW9uIGxGYyhhKXtyZXR1cm4gd1piKG5ldyB4WmIoSkQoYSwxMSkuYikpfTtfLkZiPWZ1bmN0aW9uIG1GYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gbkZjKGEpe3JldHVybiB3WmIobmV3IHhaYihKRChhLDExKS5iKSl9O3ZhciBmWD1qZWIobHplLCdMYXllclN3ZWVwVHlwZURlY2lkZXIvbGFtYmRhJDAkVHlwZScsMTgwOSk7WWNiKDE4MTAsMSxUdGUsb0ZjKTtfLkxiPWZ1bmN0aW9uIHBGYyhhKXtyZXR1cm4gd1piKG5ldyB4WmIoSkQoYSwxMSkuYikpfTtfLkZiPWZ1bmN0aW9uIHFGYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWI9ZnVuY3Rpb24gckZjKGEpe3JldHVybiB3WmIobmV3IHhaYihKRChhLDExKS5iKSl9O3ZhciBnWD1qZWIobHplLCdMYXllclN3ZWVwVHlwZURlY2lkZXIvbGFtYmRhJDEkVHlwZScsMTgxMCk7WWNiKDE4NTIsNDAyLGp6ZSxzRmMpO18ucmc9ZnVuY3Rpb24gdEZjKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw7aj10aGlzLmc7c3dpdGNoKGMuZyl7Y2FzZSAxOntkPTA7ZT0wO2ZvcihpPW5ldyBybWIoYS5qKTtpLmE8aS5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaSksMTEpO2lmKGcuZS5jLmxlbmd0aCE9MCl7KytkO2cuaj09KFJqZCgpLHhqZCkmJisrZX19Zj1iK2U7bD1iK2Q7Zm9yKGg9bVliKGEsKEV5YygpLEJ5YykpLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMTEpO2lmKGcuaj09KFJqZCgpLHhqZCkpe2pbZy5wXT1mOy0tZn1lbHNle2pbZy5wXT1sOy0tbH19cmV0dXJuIGR9Y2FzZSAyOntrPTA7Zm9yKGg9bVliKGEsKEV5YygpLEN5YykpLkpjKCk7aC5PYigpOyl7Zz1KRChoLlBiKCksMTEpOysraztqW2cucF09YitrfXJldHVybiBrfWRlZmF1bHQ6dGhyb3cgc2NiKG5ldyBTZWIpO319O3ZhciBpWD1qZWIobHplLCdMYXllclRvdGFsUG9ydERpc3RyaWJ1dG9yJywxODUyKTtZY2IoNjU0LDgxMSx7NjU0OjEsMjI5OjF9LHlGYyk7Xy50Zz1mdW5jdGlvbiBBRmMoYSxiLGMsZCl7aWYoYyl7VUNjKHRoaXMsYSl9ZWxzZXtSQ2ModGhpcyxhLGQpO1NDYyh0aGlzLGEsYil9aWYoYS5jLmxlbmd0aD4xKXt5ZGIoTEQoV01iKGdZYigoc0RiKDAsYS5jLmxlbmd0aCksSkQoYS5jWzBdLDkpKSksKEJ3YygpLGV1YykpKSk/ekZjKGEsdGhpcy5kLHRoaXMpOihwbmIoKSxTbGIoYSx0aGlzLmQpKTt5ZGIoTEQoV01iKGdZYigoc0RiKDAsYS5jLmxlbmd0aCksSkQoYS5jWzBdLDkpKSksZXVjKSkpfHxxRGModGhpcy5lLGEpfX07dmFyIGtYPWplYihsemUsJ01vZGVsT3JkZXJCYXJ5Y2VudGVySGV1cmlzdGljJyw2NTQpO1ljYigxODEyLDEsQnRlLEJGYyk7Xy5MZT1mdW5jdGlvbiBDRmMoYSxiKXtyZXR1cm4gd0ZjKHRoaXMuYSxKRChhLDkpLEpEKGIsOSkpfTtfLkZiPWZ1bmN0aW9uIERGYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gRUZjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBqWD1qZWIobHplLCdNb2RlbE9yZGVyQmFyeWNlbnRlckhldXJpc3RpYy9sYW1iZGEkMCRUeXBlJywxODEyKTtZY2IoMTM2MiwxLGd6ZSxJRmMpO18ucGc9ZnVuY3Rpb24gSkZjKGEpe3ZhciBiO3JldHVybiBKRChhLDM2KSxiPUs5YyhGRmMpLEU5YyhiLChDUWIoKSx6UWIpLCh1NWIoKSxqNWIpKSxifTtfLklmPWZ1bmN0aW9uIEtGYyhhLGIpe0hGYygoSkQoYSwzNiksYikpfTt2YXIgRkZjO3ZhciBsWD1qZWIobHplLCdOb0Nyb3NzaW5nTWluaW1pemVyJywxMzYyKTtZY2IoNzg5LDQwMixqemUsTEZjKTtfLnJnPWZ1bmN0aW9uIE1GYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbjtsPXRoaXMuZztzd2l0Y2goYy5nKXtjYXNlIDE6e2U9MDtmPTA7Zm9yKGs9bmV3IHJtYihhLmopO2suYTxrLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihrKSwxMSk7aWYoaS5lLmMubGVuZ3RoIT0wKXsrK2U7aS5qPT0oUmpkKCkseGpkKSYmKytmfX1kPTEvKGUrMSk7Zz1iK2YqZDtuPWIrMS1kO2ZvcihqPW1ZYihhLChFeWMoKSxCeWMpKS5KYygpO2ouT2IoKTspe2k9SkQoai5QYigpLDExKTtpZihpLmo9PShSamQoKSx4amQpKXtsW2kucF09ZztnLT1kfWVsc2V7bFtpLnBdPW47bi09ZH19YnJlYWt9Y2FzZSAyOntoPTA7Zm9yKGs9bmV3IHJtYihhLmopO2suYTxrLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihrKSwxMSk7aS5nLmMubGVuZ3RoPT0wfHwrK2h9ZD0xLyhoKzEpO209YitkO2ZvcihqPW1ZYihhLChFeWMoKSxDeWMpKS5KYygpO2ouT2IoKTspe2k9SkQoai5QYigpLDExKTtsW2kucF09bTttKz1kfWJyZWFrfWRlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJ1BvcnQgdHlwZSBpcyB1bmRlZmluZWQnKSk7fXJldHVybiAxfTt2YXIgbVg9amViKGx6ZSwnTm9kZVJlbGF0aXZlUG9ydERpc3RyaWJ1dG9yJyw3ODkpO1ljYig4MDEsMSx7fSxRRmMsUkZjKTt2YXIgblg9amViKGx6ZSwnU3dlZXBDb3B5Jyw4MDEpO1ljYigxODA3LDEsaHdlLFVGYyk7Xy5mZz1mdW5jdGlvbiBYRmMoYSxiKXt9O18uZGc9ZnVuY3Rpb24gVkZjKCl7dmFyIGE7YT1TQyhjRSxpc2UsMzAsdGhpcy5mLDE1LDEpO3RoaXMuZD1uZXcgbUhjKGEpO3RoaXMuYT1uZXcgR0djKGEpfTtfLmVnPWZ1bmN0aW9uIFdGYyhhLGIsYyxkLGUsZil7dmFyIGc7Zz1KRChNbGIoZlthXVtiXS5qLGMpLDExKTtlLmM9PWcmJmUuYy5pLmM9PWUuZC5pLmMmJisrdGhpcy5lW2FdfTtfLmdnPWZ1bmN0aW9uIFlGYyhhLGIsYyl7dmFyIGQ7ZD1jW2FdW2JdO3RoaXMuY1thXT10aGlzLmNbYV18ZC5rPT0oRFliKCksQlliKX07Xy5oZz1mdW5jdGlvbiBaRmMoYSxiLGMsZCl7dmFyIGU7ZT1KRChNbGIoZFthXVtiXS5qLGMpLDExKTtlLnA9dGhpcy5mKys7ZS5nLmMubGVuZ3RoK2UuZS5jLmxlbmd0aD4xJiYoZS5qPT0oUmpkKCksd2pkKT8odGhpcy5iW2FdPXRydWUpOmUuaj09UWpkJiZhPjAmJih0aGlzLmJbYS0xXT10cnVlKSl9O18uZj0wO3ZhciBvWD1qZWIoZ3dlLCdBbGxDcm9zc2luZ3NDb3VudGVyJywxODA3KTtZY2IoNTc4LDEse30sY0djKTtfLmI9MDtfLmQ9MDt2YXIgcFg9amViKGd3ZSwnQmluYXJ5SW5kZXhlZFRyZWUnLDU3OCk7WWNiKDUxNywxLHt9LEdHYyk7dmFyIGVHYyxmR2M7dmFyIHpYPWplYihnd2UsJ0Nyb3NzaW5nc0NvdW50ZXInLDUxNyk7WWNiKDE4OTYsMSxCdGUsS0djKTtfLkxlPWZ1bmN0aW9uIExHYyhhLGIpe3JldHVybiB6R2ModGhpcy5hLEpEKGEsMTEpLEpEKGIsMTEpKX07Xy5GYj1mdW5jdGlvbiBNR2MoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIE5HYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgcVg9amViKGd3ZSwnQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMCRUeXBlJywxODk2KTtZY2IoMTg5NywxLEJ0ZSxPR2MpO18uTGU9ZnVuY3Rpb24gUEdjKGEsYil7cmV0dXJuIEFHYyh0aGlzLmEsSkQoYSwxMSksSkQoYiwxMSkpfTtfLkZiPWZ1bmN0aW9uIFFHYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gUkdjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciByWD1qZWIoZ3dlLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQxJFR5cGUnLDE4OTcpO1ljYigxODk4LDEsQnRlLFNHYyk7Xy5MZT1mdW5jdGlvbiBUR2MoYSxiKXtyZXR1cm4gQkdjKHRoaXMuYSxKRChhLDExKSxKRChiLDExKSl9O18uRmI9ZnVuY3Rpb24gVUdjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBWR2MoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIHNYPWplYihnd2UsJ0Nyb3NzaW5nc0NvdW50ZXIvbGFtYmRhJDIkVHlwZScsMTg5OCk7WWNiKDE4OTksMSxCdGUsV0djKTtfLkxlPWZ1bmN0aW9uIFhHYyhhLGIpe3JldHVybiBDR2ModGhpcy5hLEpEKGEsMTEpLEpEKGIsMTEpKX07Xy5GYj1mdW5jdGlvbiBZR2MoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFpHYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgdFg9amViKGd3ZSwnQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkMyRUeXBlJywxODk5KTtZY2IoaHNlLDEsa3JlLCRHYyk7Xy5BZD1mdW5jdGlvbiBfR2MoYSl7SEdjKHRoaXMuYSxKRChhLDExKSl9O3ZhciB1WD1qZWIoZ3dlLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ0JFR5cGUnLGhzZSk7WWNiKDE5MDEsMSxJcmUsYUhjKTtfLk1iPWZ1bmN0aW9uIGJIYyhhKXtyZXR1cm4gSUdjKHRoaXMuYSxKRChhLDExKSl9O3ZhciB2WD1qZWIoZ3dlLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ1JFR5cGUnLDE5MDEpO1ljYigxOTAyLDEsa3JlLGRIYyk7Xy5BZD1mdW5jdGlvbiBlSGMoYSl7Y0hjKHRoaXMsYSl9O3ZhciB3WD1qZWIoZ3dlLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ2JFR5cGUnLDE5MDIpO1ljYigxOTAzLDEsa3JlLGZIYyk7Xy5BZD1mdW5jdGlvbiBnSGMoYSl7dmFyIGI7Z0djKCk7JGtiKHRoaXMuYiwoYj10aGlzLmEsSkQoYSwxMSksYikpfTt2YXIgeFg9amViKGd3ZSwnQ3Jvc3NpbmdzQ291bnRlci9sYW1iZGEkNyRUeXBlJywxOTAzKTtZY2IoODE4LDEsVHRlLGhIYyk7Xy5MYj1mdW5jdGlvbiBpSGMoYSl7cmV0dXJuIGdHYygpLFhNYihKRChhLDExKSwoSXFjKCksc3FjKSl9O18uRmI9ZnVuY3Rpb24gakhjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NYj1mdW5jdGlvbiBrSGMoYSl7cmV0dXJuIGdHYygpLFhNYihKRChhLDExKSwoSXFjKCksc3FjKSl9O3ZhciB5WD1qZWIoZ3dlLCdDcm9zc2luZ3NDb3VudGVyL2xhbWJkYSQ4JFR5cGUnLDgxOCk7WWNiKDE4OTUsMSx7fSxtSGMpO3ZhciBEWD1qZWIoZ3dlLCdIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyJywxODk1KTtZY2IoNDY0LDEsezM0OjEsNDY0OjF9LG9IYyk7Xy5EZD1mdW5jdGlvbiBwSGMoYSl7cmV0dXJuIG5IYyh0aGlzLEpEKGEsNDY0KSl9O18uYj0wO18uYz0wO18uZT0wO18uZj0wO3ZhciBDWD1qZWIoZ3dlLCdIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZScsNDY0KTtZY2IoMzY3LDEsezM0OjEsMzY3OjF9LHJIYyk7Xy5EZD1mdW5jdGlvbiBzSGMoYSl7cmV0dXJuIHFIYyh0aGlzLEpEKGEsMzY3KSl9O18uYj0wO18uYz0wO3ZhciBCWD1qZWIoZ3dlLCdIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZUNvcm5lcicsMzY3KTtZY2IoNTE2LDIzLHszOjEsMzQ6MSwyMzoxLDUxNjoxfSx3SGMpO3ZhciB0SGMsdUhjO3ZhciBBWD1rZWIoZ3dlLCdIeXBlcmVkZ2VDcm9zc2luZ3NDb3VudGVyL0h5cGVyZWRnZUNvcm5lci9UeXBlJyw1MTYsTUkseUhjLHhIYyk7dmFyIHpIYztZY2IoMTM2NCwxLGd6ZSxHSGMpO18ucGc9ZnVuY3Rpb24gSEhjKGEpe3JldHVybiBKRChXTWIoSkQoYSwzNiksKElxYygpLFdwYykpLDIyKS5HYygoJG9jKCksVG9jKSk/Q0hjOm51bGx9O18uSWY9ZnVuY3Rpb24gSUhjKGEsYil7RkhjKHRoaXMsSkQoYSwzNiksYil9O3ZhciBDSGM7dmFyIEZYPWplYihuemUsJ0ludGVyYWN0aXZlTm9kZVBsYWNlcicsMTM2NCk7WWNiKDEzNjUsMSxnemUsV0hjKTtfLnBnPWZ1bmN0aW9uIFhIYyhhKXtyZXR1cm4gSkQoV01iKEpEKGEsMzYpLChJcWMoKSxXcGMpKSwyMikuR2MoKCRvYygpLFRvYykpP0pIYzpudWxsfTtfLklmPWZ1bmN0aW9uIFlIYyhhLGIpe1VIYyh0aGlzLEpEKGEsMzYpLGIpfTt2YXIgSkhjLEtIYyxMSGM7dmFyIEhYPWplYihuemUsJ0xpbmVhclNlZ21lbnRzTm9kZVBsYWNlcicsMTM2NSk7WWNiKDI2MSwxLHszNDoxLDI2MToxfSxhSWMpO18uRGQ9ZnVuY3Rpb24gYkljKGEpe3JldHVybiBaSGModGhpcyxKRChhLDI2MSkpfTtfLkZiPWZ1bmN0aW9uIGNJYyhhKXt2YXIgYjtpZihSRChhLDI2MSkpe2I9SkQoYSwyNjEpO3JldHVybiB0aGlzLmI9PWIuYn1yZXR1cm4gZmFsc2V9O18uSGI9ZnVuY3Rpb24gZEljKCl7cmV0dXJuIHRoaXMuYn07Xy5JYj1mdW5jdGlvbiBlSWMoKXtyZXR1cm4gJ2xzJytFZSh0aGlzLmUpfTtfLmE9MDtfLmI9MDtfLmM9LTE7Xy5kPS0xO18uZz0wO3ZhciBHWD1qZWIobnplLCdMaW5lYXJTZWdtZW50c05vZGVQbGFjZXIvTGluZWFyU2VnbWVudCcsMjYxKTtZY2IoMTM2NywxLGd6ZSxCSWMpO18ucGc9ZnVuY3Rpb24gQ0ljKGEpe3JldHVybiBKRChXTWIoSkQoYSwzNiksKElxYygpLFdwYykpLDIyKS5HYygoJG9jKCksVG9jKSk/ZkljOm51bGx9O18uSWY9ZnVuY3Rpb24gS0ljKGEsYil7eEljKHRoaXMsSkQoYSwzNiksYil9O18uYj0wO18uZz0wO3ZhciBmSWM7dmFyIHJZPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyJywxMzY3KTtZY2IoMTM4NiwxLEJ0ZSxMSWMpO18uTGU9ZnVuY3Rpb24gTUljKGEsYil7cmV0dXJuICRlYihKRChhLDE3KS5hLEpEKGIsMTcpLmEpfTtfLkZiPWZ1bmN0aW9uIE5JYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gT0ljKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBJWD1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci8wbWV0aG9kcmVmJGNvbXBhcmUkVHlwZScsMTM4Nik7WWNiKDEzODgsMSxCdGUsUEljKTtfLkxlPWZ1bmN0aW9uIFFJYyhhLGIpe3JldHVybiAkZWIoSkQoYSwxNykuYSxKRChiLDE3KS5hKX07Xy5GYj1mdW5jdGlvbiBSSWMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFNJYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgSlg9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvMW1ldGhvZHJlZiRjb21wYXJlJFR5cGUnLDEzODgpO1ljYig2MzksMSx7NjM5OjF9LFRJYyk7dmFyIEtYPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL0VkZ2VSZXAnLDYzOSk7WWNiKDQwMSwxLHs0MDE6MX0sVUljKTtfLmI9ZmFsc2U7dmFyIExYPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL05vZGVSZXAnLDQwMSk7WWNiKDQ5OSwxMyx7MzoxLDQ6MSwyMDoxLDMxOjEsNTU6MSwxMzoxLDE2OjEsMTU6MSw1OToxLDQ5OToxfSxZSWMpO3ZhciBRWD1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoJyw0OTkpO1ljYigxMzY4LDEse30sWkljKTtfLktiPWZ1bmN0aW9uICRJYyhhKXtyZXR1cm4gSkQoYSwxOCkuZC5pLmt9O3ZhciBNWD1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQwJFR5cGUnLDEzNjgpO1ljYigxMzY5LDEsSXJlLF9JYyk7Xy5NYj1mdW5jdGlvbiBhSmMoYSl7cmV0dXJuIEpEKGEsMjQ3KT09KERZYigpLHlZYil9O3ZhciBOWD1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9QYXRoL2xhbWJkYSQxJFR5cGUnLDEzNjkpO1ljYigxMzcwLDEse30sYkpjKTtfLktiPWZ1bmN0aW9uIGNKYyhhKXtyZXR1cm4gSkQoYSwxOCkuZC5pfTt2YXIgT1g9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvUGF0aC9sYW1iZGEkMiRUeXBlJywxMzcwKTtZY2IoMTM3MSwxLElyZSxkSmMpO18uTWI9ZnVuY3Rpb24gZUpjKGEpe3JldHVybiBISmMoQ3hjKEpEKGEsOSkpKX07dmFyIFBYPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL1BhdGgvbGFtYmRhJDMkVHlwZScsMTM3MSk7WWNiKDEzNzIsMSxJcmUsZkpjKTtfLk1iPWZ1bmN0aW9uIGdKYyhhKXtyZXR1cm4gR0ljKEpEKGEsMTEpKX07dmFyIFJYPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQwJFR5cGUnLDEzNzIpO1ljYigxMzczLDEsa3JlLGhKYyk7Xy5BZD1mdW5jdGlvbiBpSmMoYSl7bUljKHRoaXMuYSx0aGlzLmIsSkQoYSwxMSkpfTt2YXIgU1g9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEkVHlwZScsMTM3Myk7WWNiKDEzODIsMSxrcmUsakpjKTtfLkFkPWZ1bmN0aW9uIGtKYyhhKXtuSWModGhpcy5hLEpEKGEsMTgpKX07dmFyIFRYPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMCRUeXBlJywxMzgyKTtZY2IoMTM4MywxLHt9LGxKYyk7Xy5LYj1mdW5jdGlvbiBtSmMoYSl7cmV0dXJuIGdJYygpLG5ldyBSQmIobnVsbCxuZXcgR3ZiKEpEKGEsMjUpLmEsMTYpKX07dmFyIFVYPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxMSRUeXBlJywxMzgzKTtZY2IoMTM4NCwxLGtyZSxuSmMpO18uQWQ9ZnVuY3Rpb24gb0pjKGEpe29JYyh0aGlzLmEsSkQoYSw5KSl9O3ZhciBWWD1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTIkVHlwZScsMTM4NCk7WWNiKDEzODUsMSx7fSxwSmMpO18uS2I9ZnVuY3Rpb24gcUpjKGEpe3JldHVybiBnSWMoKSxqZmIoSkQoYSwxMjMpLmUpfTt2YXIgV1g9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDEzJFR5cGUnLDEzODUpO1ljYigxMzg3LDEse30sckpjKTtfLktiPWZ1bmN0aW9uIHNKYyhhKXtyZXR1cm4gZ0ljKCksamZiKEpEKGEsMTIzKS5lKX07dmFyIFhYPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxNSRUeXBlJywxMzg3KTtZY2IoMTM4OSwxLElyZSx0SmMpO18uTWI9ZnVuY3Rpb24gdUpjKGEpe3JldHVybiBnSWMoKSxKRChhLDQwMSkuYy5rPT0oRFliKCksQVliKX07dmFyIFlYPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQxNyRUeXBlJywxMzg5KTtZY2IoMTM5MCwxLElyZSx2SmMpO18uTWI9ZnVuY3Rpb24gd0pjKGEpe3JldHVybiBnSWMoKSxKRChhLDQwMSkuYy5qLmMubGVuZ3RoPjF9O3ZhciBaWD1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTgkVHlwZScsMTM5MCk7WWNiKDEzOTEsMSxrcmUseEpjKTtfLkFkPWZ1bmN0aW9uIHlKYyhhKXtISWModGhpcy5jLHRoaXMuYix0aGlzLmQsdGhpcy5hLEpEKGEsNDAxKSl9O18uYz0wO18uZD0wO3ZhciAkWD1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMTkkVHlwZScsMTM5MSk7WWNiKDEzNzQsMSx7fSx6SmMpO18uS2I9ZnVuY3Rpb24gQUpjKGEpe3JldHVybiBnSWMoKSxuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDI1KS5hLDE2KSl9O3ZhciBfWD1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMiRUeXBlJywxMzc0KTtZY2IoMTM5MiwxLGtyZSxCSmMpO18uQWQ9ZnVuY3Rpb24gQ0pjKGEpe0lJYyh0aGlzLmEsSkQoYSwxMSkpfTtfLmE9MDt2YXIgYVk9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIwJFR5cGUnLDEzOTIpO1ljYigxMzkzLDEse30sREpjKTtfLktiPWZ1bmN0aW9uIEVKYyhhKXtyZXR1cm4gZ0ljKCksbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSwyNSkuYSwxNikpfTt2YXIgYlk9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDIxJFR5cGUnLDEzOTMpO1ljYigxMzk0LDEsa3JlLEZKYyk7Xy5BZD1mdW5jdGlvbiBHSmMoYSl7cEljKHRoaXMuYSxKRChhLDkpKX07dmFyIGNZPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyMiRUeXBlJywxMzk0KTtZY2IoMTM5NSwxLElyZSxJSmMpO18uTWI9ZnVuY3Rpb24gSkpjKGEpe3JldHVybiBISmMoYSl9O3ZhciBkWT1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjMkVHlwZScsMTM5NSk7WWNiKDEzOTYsMSx7fSxLSmMpO18uS2I9ZnVuY3Rpb24gTEpjKGEpe3JldHVybiBnSWMoKSxuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDI1KS5hLDE2KSl9O3ZhciBlWT1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMjQkVHlwZScsMTM5Nik7WWNiKDEzOTcsMSxJcmUsTUpjKTtfLk1iPWZ1bmN0aW9uIE5KYyhhKXtyZXR1cm4gcUljKHRoaXMuYSxKRChhLDkpKX07dmFyIGZZPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyNSRUeXBlJywxMzk3KTtZY2IoMTM5OCwxLGtyZSxPSmMpO18uQWQ9ZnVuY3Rpb24gUEpjKGEpe3JJYyh0aGlzLmEsdGhpcy5iLEpEKGEsOSkpfTt2YXIgZ1k9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI2JFR5cGUnLDEzOTgpO1ljYigxMzk5LDEsSXJlLFFKYyk7Xy5NYj1mdW5jdGlvbiBSSmMoYSl7cmV0dXJuIGdJYygpLCFlV2IoSkQoYSwxOCkpfTt2YXIgaFk9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI3JFR5cGUnLDEzOTkpO1ljYigxNDAwLDEsSXJlLFNKYyk7Xy5NYj1mdW5jdGlvbiBUSmMoYSl7cmV0dXJuIGdJYygpLCFlV2IoSkQoYSwxOCkpfTt2YXIgaVk9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDI4JFR5cGUnLDE0MDApO1ljYigxNDAxLDEse30sVUpjKTtfLlRlPWZ1bmN0aW9uIFZKYyhhLGIpe3JldHVybiBzSWModGhpcy5hLEpEKGEsMjUpLEpEKGIsMjUpKX07dmFyIGpZPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQyOSRUeXBlJywxNDAxKTtZY2IoMTM3NSwxLHt9LFdKYyk7Xy5LYj1mdW5jdGlvbiBYSmMoYSl7cmV0dXJuIGdJYygpLG5ldyBSQmIobnVsbCxuZXcgSHZiKG5ldyBlcyhJcihrWWIoSkQoYSw5KSkuYS5KYygpLG5ldyBlcikpKSl9O3ZhciBrWT1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkMyRUeXBlJywxMzc1KTtZY2IoMTM3NiwxLElyZSxZSmMpO18uTWI9ZnVuY3Rpb24gWkpjKGEpe3JldHVybiBnSWMoKSxGSWMoSkQoYSwxOCkpfTt2YXIgbFk9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDQkVHlwZScsMTM3Nik7WWNiKDEzNzcsMSxrcmUsJEpjKTtfLkFkPWZ1bmN0aW9uIF9KYyhhKXt5SWModGhpcy5hLEpEKGEsMTgpKX07dmFyIG1ZPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ1JFR5cGUnLDEzNzcpO1ljYigxMzc4LDEse30sYUtjKTtfLktiPWZ1bmN0aW9uIGJLYyhhKXtyZXR1cm4gZ0ljKCksbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSwyNSkuYSwxNikpfTt2YXIgblk9amViKG56ZSwnTmV0d29ya1NpbXBsZXhQbGFjZXIvbGFtYmRhJDYkVHlwZScsMTM3OCk7WWNiKDEzNzksMSxJcmUsY0tjKTtfLk1iPWZ1bmN0aW9uIGRLYyhhKXtyZXR1cm4gZ0ljKCksSkQoYSw5KS5rPT0oRFliKCksQVliKX07dmFyIG9ZPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ3JFR5cGUnLDEzNzkpO1ljYigxMzgwLDEse30sZUtjKTtfLktiPWZ1bmN0aW9uIGZLYyhhKXtyZXR1cm4gZ0ljKCksbmV3IFJCYihudWxsLG5ldyBIdmIobmV3IGVzKElyKGVZYihKRChhLDkpKS5hLkpjKCksbmV3IGVyKSkpKX07dmFyIHBZPWplYihuemUsJ05ldHdvcmtTaW1wbGV4UGxhY2VyL2xhbWJkYSQ4JFR5cGUnLDEzODApO1ljYigxMzgxLDEsSXJlLGdLYyk7Xy5NYj1mdW5jdGlvbiBoS2MoYSl7cmV0dXJuIGdJYygpLGRXYihKRChhLDE4KSl9O3ZhciBxWT1qZWIobnplLCdOZXR3b3JrU2ltcGxleFBsYWNlci9sYW1iZGEkOSRUeXBlJywxMzgxKTtZY2IoMTM2MywxLGd6ZSxsS2MpO18ucGc9ZnVuY3Rpb24gbUtjKGEpe3JldHVybiBKRChXTWIoSkQoYSwzNiksKElxYygpLFdwYykpLDIyKS5HYygoJG9jKCksVG9jKSk/aUtjOm51bGx9O18uSWY9ZnVuY3Rpb24gbktjKGEsYil7a0tjKEpEKGEsMzYpLGIpfTt2YXIgaUtjO3ZhciBzWT1qZWIobnplLCdTaW1wbGVOb2RlUGxhY2VyJywxMzYzKTtZY2IoMTg1LDEsezE4NToxfSx2S2MpO18uSWI9ZnVuY3Rpb24gd0tjKCl7dmFyIGE7YT0nJzt0aGlzLmM9PSh6S2MoKSx5S2MpPyhhKz1hdWUpOnRoaXMuYz09eEtjJiYoYSs9X3RlKTt0aGlzLm89PShIS2MoKSxGS2MpPyhhKz1sdWUpOnRoaXMubz09R0tjPyhhKz0nVVAnKTooYSs9J0JBTEFOQ0VEJyk7cmV0dXJuIGF9O3ZhciB2WT1qZWIocXplLCdCS0FsaWduZWRMYXlvdXQnLDE4NSk7WWNiKDUwNywyMyx7MzoxLDM0OjEsMjM6MSw1MDc6MX0sQUtjKTt2YXIgeEtjLHlLYzt2YXIgdFk9a2ViKHF6ZSwnQktBbGlnbmVkTGF5b3V0L0hEaXJlY3Rpb24nLDUwNyxNSSxDS2MsQktjKTt2YXIgREtjO1ljYig1MDYsMjMsezM6MSwzNDoxLDIzOjEsNTA2OjF9LElLYyk7dmFyIEZLYyxHS2M7dmFyIHVZPWtlYihxemUsJ0JLQWxpZ25lZExheW91dC9WRGlyZWN0aW9uJyw1MDYsTUksS0tjLEpLYyk7dmFyIExLYztZY2IoMTY0MCwxLHt9LFBLYyk7dmFyIHdZPWplYihxemUsJ0JLQWxpZ25lcicsMTY0MCk7WWNiKDE2NDMsMSx7fSxVS2MpO3ZhciB6WT1qZWIocXplLCdCS0NvbXBhY3RvcicsMTY0Myk7WWNiKDY0NywxLHs2NDc6MX0sVktjKTtfLmE9MDt2YXIgeFk9amViKHF6ZSwnQktDb21wYWN0b3IvQ2xhc3NFZGdlJyw2NDcpO1ljYig0NTMsMSx7NDUzOjF9LFhLYyk7Xy5hPW51bGw7Xy5iPTA7dmFyIHlZPWplYihxemUsJ0JLQ29tcGFjdG9yL0NsYXNzTm9kZScsNDUzKTtZY2IoMTM2NiwxLGd6ZSxkTGMpO18ucGc9ZnVuY3Rpb24gaExjKGEpe3JldHVybiBKRChXTWIoSkQoYSwzNiksKElxYygpLFdwYykpLDIyKS5HYygoJG9jKCksVG9jKSk/WUtjOm51bGx9O18uSWY9ZnVuY3Rpb24gaUxjKGEsYil7Y0xjKHRoaXMsSkQoYSwzNiksYil9O18uZD1mYWxzZTt2YXIgWUtjO3ZhciBBWT1qZWIocXplLCdCS05vZGVQbGFjZXInLDEzNjYpO1ljYigxNjQxLDEse30sa0xjKTtfLmQ9MDt2YXIgQ1k9amViKHF6ZSwnTmVpZ2hib3Job29kSW5mb3JtYXRpb24nLDE2NDEpO1ljYigxNjQyLDEsQnRlLHBMYyk7Xy5MZT1mdW5jdGlvbiBxTGMoYSxiKXtyZXR1cm4gb0xjKHRoaXMsSkQoYSw0NyksSkQoYiw0NykpfTtfLkZiPWZ1bmN0aW9uIHJMYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gc0xjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBCWT1qZWIocXplLCdOZWlnaGJvcmhvb2RJbmZvcm1hdGlvbi9OZWlnaGJvckNvbXBhcmF0b3InLDE2NDIpO1ljYig4MDIsMSx7fSk7dmFyIEdZPWplYihxemUsJ1RocmVzaG9sZFN0cmF0ZWd5Jyw4MDIpO1ljYigxNzcxLDgwMix7fSx4TGMpO18udWc9ZnVuY3Rpb24geUxjKGEsYixjKXtyZXR1cm4gdGhpcy5hLm89PShIS2MoKSxHS2MpP0tzZTpMc2V9O18udmc9ZnVuY3Rpb24gekxjKCl7fTt2YXIgRFk9amViKHF6ZSwnVGhyZXNob2xkU3RyYXRlZ3kvTnVsbFRocmVzaG9sZFN0cmF0ZWd5JywxNzcxKTtZY2IoNTcwLDEsezU3MDoxfSxBTGMpO18uYz1mYWxzZTtfLmQ9ZmFsc2U7dmFyIEVZPWplYihxemUsJ1RocmVzaG9sZFN0cmF0ZWd5L1Bvc3Rwcm9jZXNzYWJsZScsNTcwKTtZY2IoMTc3Miw4MDIse30sRUxjKTtfLnVnPWZ1bmN0aW9uIEZMYyhhLGIsYyl7dmFyIGQsZSxmO2U9Yj09YztkPXRoaXMuYS5hW2MucF09PWI7aWYoIShlfHxkKSl7cmV0dXJuIGF9Zj1hO2lmKHRoaXMuYS5jPT0oektjKCkseUtjKSl7ZSYmKGY9QkxjKHRoaXMsYix0cnVlKSk7IWlzTmFOKGYpJiYhaXNGaW5pdGUoZikmJmQmJihmPUJMYyh0aGlzLGMsZmFsc2UpKX1lbHNle2UmJihmPUJMYyh0aGlzLGIsdHJ1ZSkpOyFpc05hTihmKSYmIWlzRmluaXRlKGYpJiZkJiYoZj1CTGModGhpcyxjLGZhbHNlKSl9cmV0dXJuIGZ9O18udmc9ZnVuY3Rpb24gR0xjKCl7dmFyIGEsYixjLGQsZTt3aGlsZSh0aGlzLmQuYiE9MCl7ZT1KRChIdGIodGhpcy5kKSw1NzApO2Q9Q0xjKHRoaXMsZSk7aWYoIWQuYSl7Y29udGludWV9YT1kLmE7Yz15ZGIodGhpcy5hLmZbdGhpcy5hLmdbZS5iLnBdLnBdKTtpZighYyYmIWVXYihhKSYmYS5jLmkuYz09YS5kLmkuYyl7Y29udGludWV9Yj1ETGModGhpcyxlKTtifHxzeGIodGhpcy5lLGUpfXdoaWxlKHRoaXMuZS5hLmMubGVuZ3RoIT0wKXtETGModGhpcyxKRChyeGIodGhpcy5lKSw1NzApKX19O3ZhciBGWT1qZWIocXplLCdUaHJlc2hvbGRTdHJhdGVneS9TaW1wbGVUaHJlc2hvbGRTdHJhdGVneScsMTc3Mik7WWNiKDYzMCwxLHs2MzA6MSwxODg6MSwxOTY6MX0sS0xjKTtfLmJnPWZ1bmN0aW9uIE1MYygpe3JldHVybiBKTGModGhpcyl9O18ub2c9ZnVuY3Rpb24gTExjKCl7cmV0dXJuIEpMYyh0aGlzKX07dmFyIEhMYzt2YXIgSFk9amViKHJ6ZSwnRWRnZVJvdXRlckZhY3RvcnknLDYzMCk7WWNiKDE0MjQsMSxnemUsWkxjKTtfLnBnPWZ1bmN0aW9uICRMYyhhKXtyZXR1cm4gWExjKEpEKGEsMzYpKX07Xy5JZj1mdW5jdGlvbiBfTGMoYSxiKXtZTGMoSkQoYSwzNiksYil9O3ZhciBPTGMsUExjLFFMYyxSTGMsU0xjLFRMYyxVTGMsVkxjO3ZhciBJWT1qZWIocnplLCdPcnRob2dvbmFsRWRnZVJvdXRlcicsMTQyNCk7WWNiKDE0MTcsMSxnemUsb01jKTtfLnBnPWZ1bmN0aW9uIHBNYyhhKXtyZXR1cm4gak1jKEpEKGEsMzYpKX07Xy5JZj1mdW5jdGlvbiBxTWMoYSxiKXtsTWModGhpcyxKRChhLDM2KSxiKX07dmFyIGFNYyxiTWMsY01jLGRNYyxlTWMsZk1jO3ZhciBLWT1qZWIocnplLCdQb2x5bGluZUVkZ2VSb3V0ZXInLDE0MTcpO1ljYigxNDE4LDEsVHRlLHNNYyk7Xy5MYj1mdW5jdGlvbiB0TWMoYSl7cmV0dXJuIHJNYyhKRChhLDkpKX07Xy5GYj1mdW5jdGlvbiB1TWMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1iPWZ1bmN0aW9uIHZNYyhhKXtyZXR1cm4gck1jKEpEKGEsOSkpfTt2YXIgSlk9amViKHJ6ZSwnUG9seWxpbmVFZGdlUm91dGVyLzEnLDE0MTgpO1ljYigxODE4LDEsSXJlLEFNYyk7Xy5NYj1mdW5jdGlvbiBCTWMoYSl7cmV0dXJuIEpEKGEsMTMzKS5jPT0oaU5jKCksZ05jKX07dmFyIExZPWplYihzemUsJ0h5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDAkVHlwZScsMTgxOCk7WWNiKDE4MTksMSx7fSxDTWMpO18uWGU9ZnVuY3Rpb24gRE1jKGEpe3JldHVybiBKRChhLDEzMykuZH07dmFyIE1ZPWplYihzemUsJ0h5cGVyRWRnZUN5Y2xlRGV0ZWN0b3IvbGFtYmRhJDEkVHlwZScsMTgxOSk7WWNiKDE4MjAsMSxJcmUsRU1jKTtfLk1iPWZ1bmN0aW9uIEZNYyhhKXtyZXR1cm4gSkQoYSwxMzMpLmM9PShpTmMoKSxnTmMpfTt2YXIgTlk9amViKHN6ZSwnSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMiRUeXBlJywxODIwKTtZY2IoMTgyMSwxLHt9LEdNYyk7Xy5YZT1mdW5jdGlvbiBITWMoYSl7cmV0dXJuIEpEKGEsMTMzKS5kfTt2YXIgT1k9amViKHN6ZSwnSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkMyRUeXBlJywxODIxKTtZY2IoMTgyMiwxLHt9LElNYyk7Xy5YZT1mdW5jdGlvbiBKTWMoYSl7cmV0dXJuIEpEKGEsMTMzKS5kfTt2YXIgUFk9amViKHN6ZSwnSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNCRUeXBlJywxODIyKTtZY2IoMTgyMywxLHt9LEtNYyk7Xy5YZT1mdW5jdGlvbiBMTWMoYSl7cmV0dXJuIEpEKGEsMTMzKS5kfTt2YXIgUVk9amViKHN6ZSwnSHlwZXJFZGdlQ3ljbGVEZXRlY3Rvci9sYW1iZGEkNSRUeXBlJywxODIzKTtZY2IoMTE2LDEsezM0OjEsMTE2OjF9LFhNYyk7Xy5EZD1mdW5jdGlvbiBZTWMoYSl7cmV0dXJuIE5NYyh0aGlzLEpEKGEsMTE2KSl9O18uRmI9ZnVuY3Rpb24gWk1jKGEpe3ZhciBiO2lmKFJEKGEsMTE2KSl7Yj1KRChhLDExNik7cmV0dXJuIHRoaXMuZz09Yi5nfXJldHVybiBmYWxzZX07Xy5IYj1mdW5jdGlvbiAkTWMoKXtyZXR1cm4gdGhpcy5nfTtfLkliPWZ1bmN0aW9uIGFOYygpe3ZhciBhLGIsYyxkO2E9bmV3IFdnYigneycpO2Q9bmV3IHJtYih0aGlzLm4pO3doaWxlKGQuYTxkLmMuYy5sZW5ndGgpe2M9SkQocG1iKGQpLDExKTtiPWZZYihjLmkpO2I9PW51bGwmJihiPSduJytpWWIoYy5pKSk7YS5hKz0nJytiO2QuYTxkLmMuYy5sZW5ndGgmJihhLmErPScsJyxhKX1hLmErPSd9JztyZXR1cm4gYS5hfTtfLmE9MDtfLmI9MDtfLmM9TmFOO18uZD0wO18uZz0wO18uaT0wO18ubz0wO18ucz1OYU47dmFyIF9ZPWplYihzemUsJ0h5cGVyRWRnZVNlZ21lbnQnLDExNik7WWNiKDEzMywxLHsxMzM6MX0sZU5jKTtfLkliPWZ1bmN0aW9uIGZOYygpe3JldHVybiB0aGlzLmErJy0+Jyt0aGlzLmIrJyAoJytrcyh0aGlzLmMpKycpJ307Xy5kPTA7dmFyIFNZPWplYihzemUsJ0h5cGVyRWRnZVNlZ21lbnREZXBlbmRlbmN5JywxMzMpO1ljYig1MTMsMjMsezM6MSwzNDoxLDIzOjEsNTEzOjF9LGpOYyk7dmFyIGdOYyxoTmM7dmFyIFJZPWtlYihzemUsJ0h5cGVyRWRnZVNlZ21lbnREZXBlbmRlbmN5L0RlcGVuZGVuY3lUeXBlJyw1MTMsTUksbE5jLGtOYyk7dmFyIG1OYztZY2IoMTgyNCwxLHt9LEFOYyk7dmFyICRZPWplYihzemUsJ0h5cGVyRWRnZVNlZ21lbnRTcGxpdHRlcicsMTgyNCk7WWNiKDE4MjUsMSx7fSxETmMpO18uYT0wO18uYj0wO3ZhciBUWT1qZWIoc3plLCdIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvQXJlYVJhdGluZycsMTgyNSk7WWNiKDMzNSwxLHszMzU6MX0sRU5jKTtfLmE9MDtfLmI9MDtfLmM9MDt2YXIgVVk9amViKHN6ZSwnSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL0ZyZWVBcmVhJywzMzUpO1ljYigxODI2LDEsQnRlLEZOYyk7Xy5MZT1mdW5jdGlvbiBHTmMoYSxiKXtyZXR1cm4gQ05jKEpEKGEsMTE2KSxKRChiLDExNikpfTtfLkZiPWZ1bmN0aW9uIEhOYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gSU5jKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBWWT1qZWIoc3plLCdIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDAkVHlwZScsMTgyNik7WWNiKDE4MjcsMSxrcmUsSk5jKTtfLkFkPWZ1bmN0aW9uIEtOYyhhKXt1TmModGhpcy5hLHRoaXMuZCx0aGlzLmMsdGhpcy5iLEpEKGEsMTE2KSl9O18uYj0wO3ZhciBXWT1qZWIoc3plLCdIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDEkVHlwZScsMTgyNyk7WWNiKDE4MjgsMSx7fSxMTmMpO18uS2I9ZnVuY3Rpb24gTU5jKGEpe3JldHVybiBuZXcgUkJiKG51bGwsbmV3IEd2YihKRChhLDExNikuZSwxNikpfTt2YXIgWFk9amViKHN6ZSwnSHlwZXJFZGdlU2VnbWVudFNwbGl0dGVyL2xhbWJkYSQyJFR5cGUnLDE4MjgpO1ljYigxODI5LDEse30sTk5jKTtfLktiPWZ1bmN0aW9uIE9OYyhhKXtyZXR1cm4gbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSwxMTYpLmosMTYpKX07dmFyIFlZPWplYihzemUsJ0h5cGVyRWRnZVNlZ21lbnRTcGxpdHRlci9sYW1iZGEkMyRUeXBlJywxODI5KTtZY2IoMTgzMCwxLHt9LFBOYyk7Xy5XZT1mdW5jdGlvbiBRTmMoYSl7cmV0dXJuIEJlYihNRChhKSl9O3ZhciBaWT1qZWIoc3plLCdIeXBlckVkZ2VTZWdtZW50U3BsaXR0ZXIvbGFtYmRhJDQkVHlwZScsMTgzMCk7WWNiKDY0OCwxLHt9LFdOYyk7Xy5hPTA7Xy5iPTA7Xy5jPTA7dmFyIGNaPWplYihzemUsJ09ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yJyw2NDgpO1ljYigxNjQ0LDEse30sJE5jKTtfLktiPWZ1bmN0aW9uIF9OYyhhKXtyZXR1cm4gbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSwxMTYpLmUsMTYpKX07dmFyIGFaPWplYihzemUsJ09ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yL2xhbWJkYSQwJFR5cGUnLDE2NDQpO1ljYigxNjQ1LDEse30sYU9jKTtfLktiPWZ1bmN0aW9uIGJPYyhhKXtyZXR1cm4gbmV3IFJCYihudWxsLG5ldyBHdmIoSkQoYSwxMTYpLmosMTYpKX07dmFyIGJaPWplYihzemUsJ09ydGhvZ29uYWxSb3V0aW5nR2VuZXJhdG9yL2xhbWJkYSQxJFR5cGUnLDE2NDUpO1ljYig2NTUsMSx7fSk7dmFyIGRaPWplYih0emUsJ0Jhc2VSb3V0aW5nRGlyZWN0aW9uU3RyYXRlZ3knLDY1NSk7WWNiKDE4MTYsNjU1LHt9LGZPYyk7Xy53Zz1mdW5jdGlvbiBnT2MoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwO2lmKCEhYS5yJiYhYS5xKXtyZXR1cm59az1iK2EubypjO2ZvcihqPW5ldyBybWIoYS5uKTtqLmE8ai5jLmMubGVuZ3RoOyl7aT1KRChwbWIoaiksMTEpO2w9S2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW2kuaS5uLGkubixpLmFdKSkuYTtmb3IoaD1uZXcgcm1iKGkuZyk7aC5hPGguYy5jLmxlbmd0aDspe2c9SkQocG1iKGgpLDE4KTtpZighZVdiKGcpKXtvPWcuZDtwPUtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtvLmkubixvLm4sby5hXSkpLmE7aWYoJHduZC5NYXRoLmFicyhsLXApPkZ1ZSl7Zj1rO2U9YTtkPW5ldyBFZGQobCxmKTtBdGIoZy5hLGQpO2NPYyh0aGlzLGcsZSxkLGZhbHNlKTttPWEucjtpZihtKXtuPUJlYihNRChmdShtLmUsMCkpKTtkPW5ldyBFZGQobixmKTtBdGIoZy5hLGQpO2NPYyh0aGlzLGcsZSxkLGZhbHNlKTtmPWIrbS5vKmM7ZT1tO2Q9bmV3IEVkZChuLGYpO0F0YihnLmEsZCk7Y09jKHRoaXMsZyxlLGQsZmFsc2UpfWQ9bmV3IEVkZChwLGYpO0F0YihnLmEsZCk7Y09jKHRoaXMsZyxlLGQsZmFsc2UpfX19fX07Xy54Zz1mdW5jdGlvbiBoT2MoYSl7cmV0dXJuIGEuaS5uLmErYS5uLmErYS5hLmF9O18ueWc9ZnVuY3Rpb24gaU9jKCl7cmV0dXJuIFJqZCgpLE9qZH07Xy56Zz1mdW5jdGlvbiBqT2MoKXtyZXR1cm4gUmpkKCkseGpkfTt2YXIgZVo9amViKHR6ZSwnTm9ydGhUb1NvdXRoUm91dGluZ1N0cmF0ZWd5JywxODE2KTtZY2IoMTgxNyw2NTUse30sa09jKTtfLndnPWZ1bmN0aW9uIGxPYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHA7aWYoISFhLnImJiFhLnEpe3JldHVybn1rPWItYS5vKmM7Zm9yKGo9bmV3IHJtYihhLm4pO2ouYTxqLmMuYy5sZW5ndGg7KXtpPUpEKHBtYihqKSwxMSk7bD1LZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbaS5pLm4saS5uLGkuYV0pKS5hO2ZvcihoPW5ldyBybWIoaS5nKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMTgpO2lmKCFlV2IoZykpe289Zy5kO3A9S2RkKFdDKE9DKGIyLDEpLGhyZSw4LDAsW28uaS5uLG8ubixvLmFdKSkuYTtpZigkd25kLk1hdGguYWJzKGwtcCk+RnVlKXtmPWs7ZT1hO2Q9bmV3IEVkZChsLGYpO0F0YihnLmEsZCk7Y09jKHRoaXMsZyxlLGQsZmFsc2UpO209YS5yO2lmKG0pe249QmViKE1EKGZ1KG0uZSwwKSkpO2Q9bmV3IEVkZChuLGYpO0F0YihnLmEsZCk7Y09jKHRoaXMsZyxlLGQsZmFsc2UpO2Y9Yi1tLm8qYztlPW07ZD1uZXcgRWRkKG4sZik7QXRiKGcuYSxkKTtjT2ModGhpcyxnLGUsZCxmYWxzZSl9ZD1uZXcgRWRkKHAsZik7QXRiKGcuYSxkKTtjT2ModGhpcyxnLGUsZCxmYWxzZSl9fX19fTtfLnhnPWZ1bmN0aW9uIG1PYyhhKXtyZXR1cm4gYS5pLm4uYSthLm4uYSthLmEuYX07Xy55Zz1mdW5jdGlvbiBuT2MoKXtyZXR1cm4gUmpkKCkseGpkfTtfLnpnPWZ1bmN0aW9uIG9PYygpe3JldHVybiBSamQoKSxPamR9O3ZhciBmWj1qZWIodHplLCdTb3V0aFRvTm9ydGhSb3V0aW5nU3RyYXRlZ3knLDE4MTcpO1ljYigxODE1LDY1NSx7fSxwT2MpO18ud2c9ZnVuY3Rpb24gcU9jKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scDtpZighIWEuciYmIWEucSl7cmV0dXJufWs9YithLm8qYztmb3Ioaj1uZXcgcm1iKGEubik7ai5hPGouYy5jLmxlbmd0aDspe2k9SkQocG1iKGopLDExKTtsPUtkZChXQyhPQyhiMiwxKSxocmUsOCwwLFtpLmkubixpLm4saS5hXSkpLmI7Zm9yKGg9bmV3IHJtYihpLmcpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwxOCk7aWYoIWVXYihnKSl7bz1nLmQ7cD1LZGQoV0MoT0MoYjIsMSksaHJlLDgsMCxbby5pLm4sby5uLG8uYV0pKS5iO2lmKCR3bmQuTWF0aC5hYnMobC1wKT5GdWUpe2Y9aztlPWE7ZD1uZXcgRWRkKGYsbCk7QXRiKGcuYSxkKTtjT2ModGhpcyxnLGUsZCx0cnVlKTttPWEucjtpZihtKXtuPUJlYihNRChmdShtLmUsMCkpKTtkPW5ldyBFZGQoZixuKTtBdGIoZy5hLGQpO2NPYyh0aGlzLGcsZSxkLHRydWUpO2Y9YittLm8qYztlPW07ZD1uZXcgRWRkKGYsbik7QXRiKGcuYSxkKTtjT2ModGhpcyxnLGUsZCx0cnVlKX1kPW5ldyBFZGQoZixwKTtBdGIoZy5hLGQpO2NPYyh0aGlzLGcsZSxkLHRydWUpfX19fX07Xy54Zz1mdW5jdGlvbiByT2MoYSl7cmV0dXJuIGEuaS5uLmIrYS5uLmIrYS5hLmJ9O18ueWc9ZnVuY3Rpb24gc09jKCl7cmV0dXJuIFJqZCgpLHdqZH07Xy56Zz1mdW5jdGlvbiB0T2MoKXtyZXR1cm4gUmpkKCksUWpkfTt2YXIgZ1o9amViKHR6ZSwnV2VzdFRvRWFzdFJvdXRpbmdTdHJhdGVneScsMTgxNSk7WWNiKDgwNywxLHt9LHpPYyk7Xy5JYj1mdW5jdGlvbiBBT2MoKXtyZXR1cm4gRWUodGhpcy5hKX07Xy5iPTA7Xy5jPWZhbHNlO18uZD1mYWxzZTtfLmY9MDt2YXIgaVo9amViKHZ6ZSwnTnViU3BsaW5lJyw4MDcpO1ljYig0MDcsMSx7NDA3OjF9LERPYyxFT2MpO3ZhciBoWj1qZWIodnplLCdOdWJTcGxpbmUvUG9sYXJDUCcsNDA3KTtZY2IoMTQxOSwxLGd6ZSxZT2MpO18ucGc9ZnVuY3Rpb24gJE9jKGEpe3JldHVybiBUT2MoSkQoYSwzNikpfTtfLklmPWZ1bmN0aW9uIF9PYyhhLGIpe1hPYyh0aGlzLEpEKGEsMzYpLGIpfTt2YXIgRk9jLEdPYyxIT2MsSU9jLEpPYzt2YXIgcFo9amViKHZ6ZSwnU3BsaW5lRWRnZVJvdXRlcicsMTQxOSk7WWNiKDI3MCwxLHsyNzA6MX0sY1BjKTtfLkliPWZ1bmN0aW9uIGRQYygpe3JldHVybiB0aGlzLmErJyAtPignK3RoaXMuYysnKSAnK3RoaXMuYn07Xy5jPTA7dmFyIGpaPWplYih2emUsJ1NwbGluZUVkZ2VSb3V0ZXIvRGVwZW5kZW5jeScsMjcwKTtZY2IoNDUxLDIzLHszOjEsMzQ6MSwyMzoxLDQ1MToxfSxoUGMpO3ZhciBlUGMsZlBjO3ZhciBrWj1rZWIodnplLCdTcGxpbmVFZGdlUm91dGVyL1NpZGVUb1Byb2Nlc3MnLDQ1MSxNSSxqUGMsaVBjKTt2YXIga1BjO1ljYigxNDIwLDEsSXJlLG1QYyk7Xy5NYj1mdW5jdGlvbiBuUGMoYSl7cmV0dXJuIEtPYygpLCFKRChhLDEzMikub307dmFyIGxaPWplYih2emUsJ1NwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDAkVHlwZScsMTQyMCk7WWNiKDE0MjEsMSx7fSxvUGMpO18uWGU9ZnVuY3Rpb24gcFBjKGEpe3JldHVybiBLT2MoKSxKRChhLDEzMikudisxfTt2YXIgbVo9amViKHZ6ZSwnU3BsaW5lRWRnZVJvdXRlci9sYW1iZGEkMSRUeXBlJywxNDIxKTtZY2IoMTQyMiwxLGtyZSxxUGMpO18uQWQ9ZnVuY3Rpb24gclBjKGEpe1ZPYyh0aGlzLmEsdGhpcy5iLEpEKGEsNDcpKX07dmFyIG5aPWplYih2emUsJ1NwbGluZUVkZ2VSb3V0ZXIvbGFtYmRhJDIkVHlwZScsMTQyMik7WWNiKDE0MjMsMSxrcmUsc1BjKTtfLkFkPWZ1bmN0aW9uIHRQYyhhKXtXT2ModGhpcy5hLHRoaXMuYixKRChhLDQ3KSl9O3ZhciBvWj1qZWIodnplLCdTcGxpbmVFZGdlUm91dGVyL2xhbWJkYSQzJFR5cGUnLDE0MjMpO1ljYigxMzIsMSx7MzQ6MSwxMzI6MX0selBjLEFQYyk7Xy5EZD1mdW5jdGlvbiBCUGMoYSl7cmV0dXJuIHhQYyh0aGlzLEpEKGEsMTMyKSl9O18uYj0wO18uZT1mYWxzZTtfLmY9MDtfLmc9MDtfLmo9ZmFsc2U7Xy5rPWZhbHNlO18ubj0wO18ubz1mYWxzZTtfLnA9ZmFsc2U7Xy5xPWZhbHNlO18ucz0wO18udT0wO18udj0wO18uRj0wO3ZhciByWj1qZWIodnplLCdTcGxpbmVTZWdtZW50JywxMzIpO1ljYig0NTQsMSx7NDU0OjF9LENQYyk7Xy5hPTA7Xy5iPWZhbHNlO18uYz1mYWxzZTtfLmQ9ZmFsc2U7Xy5lPWZhbHNlO18uZj0wO3ZhciBxWj1qZWIodnplLCdTcGxpbmVTZWdtZW50L0VkZ2VJbmZvcm1hdGlvbicsNDU0KTtZY2IoMTE2MiwxLHt9LExQYyk7dmFyIHRaPWplYihCemUscXVlLDExNjIpO1ljYigxMTYzLDEsQnRlLE5QYyk7Xy5MZT1mdW5jdGlvbiBPUGMoYSxiKXtyZXR1cm4gTVBjKEpEKGEsMTIwKSxKRChiLDEyMCkpfTtfLkZiPWZ1bmN0aW9uIFBQYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gUVBjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBzWj1qZWIoQnplLHJ1ZSwxMTYzKTtZY2IoMTE2MSwxLHt9LFdQYyk7dmFyIHVaPWplYihCemUsJ01yVHJlZScsMTE2MSk7WWNiKDM5NiwyMyx7MzoxLDM0OjEsMjM6MSwzOTY6MSwxODg6MSwxOTY6MX0sYlFjKTtfLmJnPWZ1bmN0aW9uIGRRYygpe3JldHVybiBhUWModGhpcyl9O18ub2c9ZnVuY3Rpb24gY1FjKCl7cmV0dXJuIGFRYyh0aGlzKX07dmFyIFhQYyxZUGMsWlBjLCRQYzt2YXIgdlo9a2ViKEJ6ZSwnVHJlZUxheW91dFBoYXNlcycsMzk2LE1JLGZRYyxlUWMpO3ZhciBnUWM7WWNiKDEwNzcsMjIyLHR1ZSxpUWMpO18ua2Y9ZnVuY3Rpb24galFjKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajt5ZGIoTEQoa3NkKGEsKGtWYygpLFZVYykpKSl8fFFEYigoYz1uZXcgUkRiKChSb2QoKSxuZXcgZHBkKGEpKSksYykpO2c9Yi5iaChDemUpO2cuU2coJ2J1aWxkIHRHcmFwaCcsMSk7aD0oaT1uZXcgX1FjLFVNYihpLGEpLFpNYihpLCh0VWMoKSxrVWMpLGEpLGo9bmV3IElyYixUUGMoYSxpLGopLFNQYyhhLGksaiksaSk7Zy5UZygpO2c9Yi5iaChDemUpO2cuU2coJ1NwbGl0IGdyYXBoJywxKTtmPUtQYyh0aGlzLmEsaCk7Zy5UZygpO2ZvcihlPW5ldyBybWIoZik7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDEyMCk7VVBjKHRoaXMuYixkLGIuYmgoMC41OTk5OTk5OTQwMzk1MzU1L2YuYy5sZW5ndGgpKX1nPWIuYmgoQ3plKTtnLlNnKCdQYWNrIGNvbXBvbmVudHMnLDEpO2g9SlBjKGYpO2cuVGcoKTtnPWIuYmgoQ3plKTtnLlNnKCdBcHBseSBsYXlvdXQgcmVzdWx0cycsMSk7UlBjKGgpO2cuVGcoKX07dmFyIHdaPWplYihCemUsJ1RyZWVMYXlvdXRQcm92aWRlcicsMTA3Nyk7WWNiKDE4NDAsMSxwcmUseFFjKTtfLkljPWZ1bmN0aW9uIHlRYyhhKXtvZmIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiB6UWMoKXtyZXR1cm4gcG5iKCksSG5iKCksR25ifTt2YXIgeFo9amViKEJ6ZSwnVHJlZVV0aWwvMScsMTg0MCk7WWNiKDE4NDEsMSxwcmUsQVFjKTtfLkljPWZ1bmN0aW9uIEJRYyhhKXtvZmIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBDUWMoKXtyZXR1cm4gcG5iKCksSG5iKCksR25ifTt2YXIgeVo9amViKEJ6ZSwnVHJlZVV0aWwvMicsMTg0MSk7WWNiKDE4MzEsMSxJcmUsRFFjKTtfLk1iPWZ1bmN0aW9uIEVRYyhhKXtyZXR1cm4geWRiKExEKFdNYihKRChhLDM5KSwodFVjKCkscVVjKSkpKX07dmFyIHpaPWplYihCemUsJ1RyZWVVdGlsL2xhbWJkYSQwJFR5cGUnLDE4MzEpO1ljYigxODM3LDEsSXJlLEZRYyk7Xy5NYj1mdW5jdGlvbiBHUWMoYSl7cmV0dXJuIHRoaXMuYS5HYyhKRChhLDM5KSl9O3ZhciBBWj1qZWIoQnplLCdUcmVlVXRpbC9sYW1iZGEkMTAkVHlwZScsMTgzNyk7WWNiKDE4MzgsMSx7fSxIUWMpO18uS2I9ZnVuY3Rpb24gSVFjKGEpe3JldHVybiBxUWModGhpcy5hLEpEKGEsMzkpKX07dmFyIEJaPWplYihCemUsJ1RyZWVVdGlsL2xhbWJkYSQxMSRUeXBlJywxODM4KTtZY2IoMTgzOSwxLElyZSxKUWMpO18uTWI9ZnVuY3Rpb24gS1FjKGEpe3JldHVybiByUWModGhpcy5hLHRoaXMuYixKRChhLDM5KSl9O3ZhciBDWj1qZWIoQnplLCdUcmVlVXRpbC9sYW1iZGEkMTIkVHlwZScsMTgzOSk7WWNiKDE4MzIsMSxJcmUsTFFjKTtfLk1iPWZ1bmN0aW9uIE1RYyhhKXtyZXR1cm4gc1FjKHRoaXMuYSxKRChhLDY1KSl9O3ZhciBEWj1qZWIoQnplLCdUcmVlVXRpbC9sYW1iZGEkMyRUeXBlJywxODMyKTtZY2IoMTgzMywxLEJ0ZSxOUWMpO18uTGU9ZnVuY3Rpb24gT1FjKGEsYil7cmV0dXJuIHRRYyhKRChhLDY1KSxKRChiLDY1KSl9O18uRmI9ZnVuY3Rpb24gUFFjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBRUWMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIEVaPWplYihCemUsJ1RyZWVVdGlsL2xhbWJkYSQ0JFR5cGUnLDE4MzMpO1ljYigxODM0LDEsSXJlLFJRYyk7Xy5NYj1mdW5jdGlvbiBTUWMoYSl7cmV0dXJuIHVRYyh0aGlzLmEsSkQoYSw2NSkpfTt2YXIgRlo9amViKEJ6ZSwnVHJlZVV0aWwvbGFtYmRhJDckVHlwZScsMTgzNCk7WWNiKDE4MzUsMSxCdGUsVFFjKTtfLkxlPWZ1bmN0aW9uIFVRYyhhLGIpe3JldHVybiB2UWMoSkQoYSw2NSksSkQoYiw2NSkpfTtfLkZiPWZ1bmN0aW9uIFZRYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gV1FjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBHWj1qZWIoQnplLCdUcmVlVXRpbC9sYW1iZGEkOCRUeXBlJywxODM1KTtZY2IoMTgzNiwxLHt9LFhRYyk7Xy5LYj1mdW5jdGlvbiBZUWMoYSl7cmV0dXJuIEpEKGEsNjUpLmJ9O3ZhciBIWj1qZWIoQnplLCdUcmVlVXRpbC9sYW1iZGEkOSRUeXBlJywxODM2KTtZY2IoNDkyLDE0OCx7MzoxLDQ5MjoxLDEwMjoxLDE0ODoxfSk7Xy5nPTA7dmFyIEpaPWplYihFemUsJ1RHcmFwaEVsZW1lbnQnLDQ5Mik7WWNiKDY1LDQ5Mix7MzoxLDY1OjEsNDkyOjEsMTAyOjEsMTQ4OjF9LFpRYyk7Xy5JYj1mdW5jdGlvbiAkUWMoKXtyZXR1cm4gISF0aGlzLmImJiEhdGhpcy5jP2RSYyh0aGlzLmIpKyctPicrZFJjKHRoaXMuYyk6J2VfJyt0Yih0aGlzKX07dmFyIElaPWplYihFemUsJ1RFZGdlJyw2NSk7WWNiKDEyMCwxNDgsezM6MSwxMjA6MSwxMDI6MSwxNDg6MX0sX1FjKTtfLkliPWZ1bmN0aW9uIGFSYygpe3ZhciBhLGIsYyxkLGU7ZT1udWxsO2ZvcihkPUd0Yih0aGlzLmIsMCk7ZC5iIT1kLmQuYzspe2M9SkQoVXRiKGQpLDM5KTtlKz0oYy5jPT1udWxsfHxjLmMubGVuZ3RoPT0wPyduXycrYy5nOiduXycrYy5jKSsnXG4nfWZvcihiPUd0Yih0aGlzLmEsMCk7Yi5iIT1iLmQuYzspe2E9SkQoVXRiKGIpLDY1KTtlKz0oISFhLmImJiEhYS5jP2RSYyhhLmIpKyctPicrZFJjKGEuYyk6J2VfJyt0YihhKSkrJ1xuJ31yZXR1cm4gZX07dmFyIEtaPWplYihFemUsJ1RHcmFwaCcsMTIwKTtZY2IoNjI4LDQ5Mix7MzoxLDQ5MjoxLDYyODoxLDEwMjoxLDE0ODoxfSk7dmFyIE9aPWplYihFemUsJ1RTaGFwZScsNjI4KTtZY2IoMzksNjI4LHszOjEsNDkyOjEsMzk6MSw2Mjg6MSwxMDI6MSwxNDg6MX0sZVJjKTtfLkliPWZ1bmN0aW9uIGZSYygpe3JldHVybiBkUmModGhpcyl9O3ZhciBOWj1qZWIoRXplLCdUTm9kZScsMzkpO1ljYigyMzUsMSxwcmUsZ1JjKTtfLkljPWZ1bmN0aW9uIGhSYyhhKXtvZmIodGhpcyxhKX07Xy5KYz1mdW5jdGlvbiBpUmMoKXt2YXIgYTtyZXR1cm4gYT1HdGIodGhpcy5hLmQsMCksbmV3IGpSYyhhKX07dmFyIE1aPWplYihFemUsJ1ROb2RlLzInLDIzNSk7WWNiKDMyOSwxLFdxZSxqUmMpO18uTmI9ZnVuY3Rpb24ga1JjKGEpe09zYih0aGlzLGEpfTtfLlBiPWZ1bmN0aW9uIG1SYygpe3JldHVybiBKRChVdGIodGhpcy5hKSw2NSkuY307Xy5PYj1mdW5jdGlvbiBsUmMoKXtyZXR1cm4gVHRiKHRoaXMuYSl9O18uUWI9ZnVuY3Rpb24gblJjKCl7V3RiKHRoaXMuYSl9O3ZhciBMWj1qZWIoRXplLCdUTm9kZS8yLzEnLDMyOSk7WWNiKDE4NjksMSxEdmUsdFJjKTtfLklmPWZ1bmN0aW9uIEdSYyhhLGIpe3JSYyh0aGlzLEpEKGEsMTIwKSxiKX07dmFyIGEkPWplYihHemUsJ0NvbXBhY3Rpb25Qcm9jZXNzb3InLDE4NjkpO1ljYigxODcwLDEsQnRlLEhSYyk7Xy5MZT1mdW5jdGlvbiBJUmMoYSxiKXtyZXR1cm4gdVJjKHRoaXMuYSxKRChhLDM5KSxKRChiLDM5KSl9O18uRmI9ZnVuY3Rpb24gSlJjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBLUmMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFBaPWplYihHemUsJ0NvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDAkVHlwZScsMTg3MCk7WWNiKDE4NzEsMSxJcmUsTFJjKTtfLk1iPWZ1bmN0aW9uIE1SYyhhKXtyZXR1cm4gdlJjKHRoaXMuYix0aGlzLmEsSkQoYSw0NykpfTtfLmE9MDtfLmI9MDt2YXIgUVo9amViKEd6ZSwnQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMSRUeXBlJywxODcxKTtZY2IoMTg4MCwxLEJ0ZSxOUmMpO18uTGU9ZnVuY3Rpb24gT1JjKGEsYil7cmV0dXJuIHdSYyhKRChhLDM5KSxKRChiLDM5KSl9O18uRmI9ZnVuY3Rpb24gUFJjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBRUmMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFJaPWplYihHemUsJ0NvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDEwJFR5cGUnLDE4ODApO1ljYigxODgxLDEsQnRlLFJSYyk7Xy5MZT1mdW5jdGlvbiBTUmMoYSxiKXtyZXR1cm4geFJjKEpEKGEsMzkpLEpEKGIsMzkpKX07Xy5GYj1mdW5jdGlvbiBUUmMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFVSYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgU1o9amViKEd6ZSwnQ29tcGFjdGlvblByb2Nlc3Nvci9sYW1iZGEkMTEkVHlwZScsMTg4MSk7WWNiKDE4ODIsMSxCdGUsVlJjKTtfLkxlPWZ1bmN0aW9uIFdSYyhhLGIpe3JldHVybiB5UmMoSkQoYSwzOSksSkQoYiwzOSkpfTtfLkZiPWZ1bmN0aW9uIFhSYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gWVJjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBUWj1qZWIoR3plLCdDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQxMiRUeXBlJywxODgyKTtZY2IoMTg3MiwxLElyZSxaUmMpO18uTWI9ZnVuY3Rpb24gJFJjKGEpe3JldHVybiB6UmModGhpcy5hLEpEKGEsNDcpKX07Xy5hPTA7dmFyIFVaPWplYihHemUsJ0NvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDIkVHlwZScsMTg3Mik7WWNiKDE4NzMsMSxJcmUsX1JjKTtfLk1iPWZ1bmN0aW9uIGFTYyhhKXtyZXR1cm4gQVJjKHRoaXMuYSxKRChhLDQ3KSl9O18uYT0wO3ZhciBWWj1qZWIoR3plLCdDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQzJFR5cGUnLDE4NzMpO1ljYigxODc0LDEsSXJlLGJTYyk7Xy5NYj1mdW5jdGlvbiBjU2MoYSl7cmV0dXJuIEpEKGEsMzkpLmMuaW5kZXhPZihEemUpPT0tMX07dmFyIFdaPWplYihHemUsJ0NvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDQkVHlwZScsMTg3NCk7WWNiKDE4NzUsMSx7fSxkU2MpO18uS2I9ZnVuY3Rpb24gZVNjKGEpe3JldHVybiBCUmModGhpcy5hLEpEKGEsMzkpKX07Xy5hPTA7dmFyIFhaPWplYihHemUsJ0NvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDUkVHlwZScsMTg3NSk7WWNiKDE4NzYsMSx7fSxmU2MpO18uS2I9ZnVuY3Rpb24gZ1NjKGEpe3JldHVybiBDUmModGhpcy5hLEpEKGEsMzkpKX07Xy5hPTA7dmFyIFlaPWplYihHemUsJ0NvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDYkVHlwZScsMTg3Nik7WWNiKDE4NzcsMSxCdGUsaFNjKTtfLkxlPWZ1bmN0aW9uIGlTYyhhLGIpe3JldHVybiBEUmModGhpcy5hLEpEKGEsMjM5KSxKRChiLDIzOSkpfTtfLkZiPWZ1bmN0aW9uIGpTYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24ga1NjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBaWj1qZWIoR3plLCdDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQ3JFR5cGUnLDE4NzcpO1ljYigxODc4LDEsQnRlLGxTYyk7Xy5MZT1mdW5jdGlvbiBtU2MoYSxiKXtyZXR1cm4gRVJjKHRoaXMuYSxKRChhLDM5KSxKRChiLDM5KSl9O18uRmI9ZnVuY3Rpb24gblNjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBvU2MoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyICRaPWplYihHemUsJ0NvbXBhY3Rpb25Qcm9jZXNzb3IvbGFtYmRhJDgkVHlwZScsMTg3OCk7WWNiKDE4NzksMSxCdGUscFNjKTtfLkxlPWZ1bmN0aW9uIHFTYyhhLGIpe3JldHVybiBGUmMoSkQoYSwzOSksSkQoYiwzOSkpfTtfLkZiPWZ1bmN0aW9uIHJTYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gc1NjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBfWj1qZWIoR3plLCdDb21wYWN0aW9uUHJvY2Vzc29yL2xhbWJkYSQ5JFR5cGUnLDE4NzkpO1ljYigxODY3LDEsRHZlLHVTYyk7Xy5JZj1mdW5jdGlvbiB2U2MoYSxiKXt0U2MoSkQoYSwxMjApLGIpfTt2YXIgYiQ9amViKEd6ZSwnRGlyZWN0aW9uUHJvY2Vzc29yJywxODY3KTtZY2IoMTg1OSwxLER2ZSx5U2MpO18uSWY9ZnVuY3Rpb24gQVNjKGEsYil7eFNjKHRoaXMsSkQoYSwxMjApLGIpfTt2YXIgYyQ9amViKEd6ZSwnRmFuUHJvY2Vzc29yJywxODU5KTtZY2IoMTg4MywxLER2ZSxDU2MpO18uSWY9ZnVuY3Rpb24gRlNjKGEsYil7QlNjKEpEKGEsMTIwKSxiKX07dmFyIGgkPWplYihHemUsJ0dyYXBoQm91bmRzUHJvY2Vzc29yJywxODgzKTtZY2IoMTg4NCwxLHt9LEdTYyk7Xy5XZT1mdW5jdGlvbiBIU2MoYSl7cmV0dXJuIEpEKGEsMzkpLmUuYX07dmFyIGQkPWplYihHemUsJ0dyYXBoQm91bmRzUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDE4ODQpO1ljYigxODg1LDEse30sSVNjKTtfLldlPWZ1bmN0aW9uIEpTYyhhKXtyZXR1cm4gSkQoYSwzOSkuZS5ifTt2YXIgZSQ9amViKEd6ZSwnR3JhcGhCb3VuZHNQcm9jZXNzb3IvbGFtYmRhJDEkVHlwZScsMTg4NSk7WWNiKDE4ODYsMSx7fSxLU2MpO18uV2U9ZnVuY3Rpb24gTFNjKGEpe3JldHVybiBEU2MoSkQoYSwzOSkpfTt2YXIgZiQ9amViKEd6ZSwnR3JhcGhCb3VuZHNQcm9jZXNzb3IvbGFtYmRhJDIkVHlwZScsMTg4Nik7WWNiKDE4ODcsMSx7fSxNU2MpO18uV2U9ZnVuY3Rpb24gTlNjKGEpe3JldHVybiBFU2MoSkQoYSwzOSkpfTt2YXIgZyQ9amViKEd6ZSwnR3JhcGhCb3VuZHNQcm9jZXNzb3IvbGFtYmRhJDMkVHlwZScsMTg4Nyk7WWNiKDI2MiwyMyx7MzoxLDM0OjEsMjM6MSwyNjI6MSwxOTY6MX0sJFNjKTtfLmJnPWZ1bmN0aW9uIF9TYygpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IEdUYztjYXNlIDE6cmV0dXJuIG5ldyB5U2M7Y2FzZSAyOnJldHVybiBuZXcgcVRjO2Nhc2UgMzpyZXR1cm4gbmV3IHdUYztjYXNlIDQ6cmV0dXJuIG5ldyBqVGM7Y2FzZSA4OnJldHVybiBuZXcgZlRjO2Nhc2UgNTpyZXR1cm4gbmV3IHVTYztjYXNlIDY6cmV0dXJuIG5ldyBEVGM7Y2FzZSA3OnJldHVybiBuZXcgdFJjO2Nhc2UgOTpyZXR1cm4gbmV3IENTYztjYXNlIDEwOnJldHVybiBuZXcgSlRjO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJHZlKyh0aGlzLmYhPW51bGw/dGhpcy5mOicnK3RoaXMuZykpKTt9fTt2YXIgT1NjLFBTYyxRU2MsUlNjLFNTYyxUU2MsVVNjLFZTYyxXU2MsWFNjLFlTYzt2YXIgaSQ9a2ViKEd6ZSxfdmUsMjYyLE1JLGJUYyxhVGMpO3ZhciBjVGM7WWNiKDE4NjYsMSxEdmUsZlRjKTtfLklmPWZ1bmN0aW9uIGdUYyhhLGIpe2VUYyhKRChhLDEyMCksYil9O3ZhciBqJD1qZWIoR3plLCdMZXZlbENvb3JkaW5hdGVzUHJvY2Vzc29yJywxODY2KTtZY2IoMTg2NCwxLER2ZSxqVGMpO18uSWY9ZnVuY3Rpb24ga1RjKGEsYil7aFRjKHRoaXMsSkQoYSwxMjApLGIpfTtfLmE9MDt2YXIgbCQ9amViKEd6ZSwnTGV2ZWxIZWlnaHRQcm9jZXNzb3InLDE4NjQpO1ljYigxODY1LDEscHJlLGxUYyk7Xy5JYz1mdW5jdGlvbiBtVGMoYSl7b2ZiKHRoaXMsYSl9O18uSmM9ZnVuY3Rpb24gblRjKCl7cmV0dXJuIHBuYigpLEhuYigpLEduYn07dmFyIGskPWplYihHemUsJ0xldmVsSGVpZ2h0UHJvY2Vzc29yLzEnLDE4NjUpO1ljYigxODYwLDEsRHZlLHFUYyk7Xy5JZj1mdW5jdGlvbiByVGMoYSxiKXtvVGModGhpcyxKRChhLDEyMCksYil9O3ZhciBuJD1qZWIoR3plLCdMZXZlbFByb2Nlc3NvcicsMTg2MCk7WWNiKDE4NjEsMSxJcmUsc1RjKTtfLk1iPWZ1bmN0aW9uIHRUYyhhKXtyZXR1cm4geWRiKExEKFdNYihKRChhLDM5KSwodFVjKCkscVVjKSkpKX07dmFyIG0kPWplYihHemUsJ0xldmVsUHJvY2Vzc29yL2xhbWJkYSQwJFR5cGUnLDE4NjEpO1ljYigxODYyLDEsRHZlLHdUYyk7Xy5JZj1mdW5jdGlvbiB4VGMoYSxiKXt1VGModGhpcyxKRChhLDEyMCksYil9O18uYT0wO3ZhciBwJD1qZWIoR3plLCdOZWlnaGJvcnNQcm9jZXNzb3InLDE4NjIpO1ljYigxODYzLDEscHJlLHlUYyk7Xy5JYz1mdW5jdGlvbiB6VGMoYSl7b2ZiKHRoaXMsYSl9O18uSmM9ZnVuY3Rpb24gQVRjKCl7cmV0dXJuIHBuYigpLEhuYigpLEduYn07dmFyIG8kPWplYihHemUsJ05laWdoYm9yc1Byb2Nlc3Nvci8xJywxODYzKTtZY2IoMTg2OCwxLER2ZSxEVGMpO18uSWY9ZnVuY3Rpb24gRVRjKGEsYil7QlRjKHRoaXMsSkQoYSwxMjApLGIpfTtfLmE9MDt2YXIgcSQ9amViKEd6ZSwnTm9kZVBvc2l0aW9uUHJvY2Vzc29yJywxODY4KTtZY2IoMTg1OCwxLER2ZSxHVGMpO18uSWY9ZnVuY3Rpb24gSFRjKGEsYil7RlRjKHRoaXMsSkQoYSwxMjApLGIpfTt2YXIgciQ9amViKEd6ZSwnUm9vdFByb2Nlc3NvcicsMTg1OCk7WWNiKDE4ODgsMSxEdmUsSlRjKTtfLklmPWZ1bmN0aW9uIEtUYyhhLGIpe0lUYyhKRChhLDEyMCksYil9O3ZhciBzJD1qZWIoR3plLCdVbnRyZWVpZnllcicsMTg4OCk7WWNiKDM4MywyMyx7MzoxLDM0OjEsMjM6MSwzODM6MX0sUFRjKTt2YXIgTFRjLE1UYyxOVGM7dmFyIHQkPWtlYihLemUsJ0VkZ2VSb3V0aW5nTW9kZScsMzgzLE1JLFJUYyxRVGMpO3ZhciBTVGM7dmFyIFVUYyxWVGMsV1RjLFhUYyxZVGMsWlRjLCRUYyxfVGMsYVVjLGJVYyxjVWMsZFVjLGVVYyxmVWMsZ1VjLGhVYyxpVWMsalVjLGtVYyxsVWMsbVVjLG5VYyxvVWMscFVjLHFVYyxyVWMsc1VjO1ljYig4NDEsMSxIdWUsRlVjKTtfLnRmPWZ1bmN0aW9uIEdVYyhhKXtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxNemUpLCcnKSxUemUpLCdUdXJucyBvbiBUcmVlIGNvbXBhY3Rpb24gd2hpY2ggZGVjcmVhc2VzIHRoZSBzaXplIG9mIHRoZSB3aG9sZSB0cmVlIGJ5IHBsYWNpbmcgbm9kZXMgb2YgbXVsdGlwbGUgbGV2ZWxzIGluIG9uZSBsYXJnZSBsZXZlbCcpLCh4ZGIoKSxmYWxzZSkpLCh6Y2QoKSxyY2QpKSxHSSksbXJiKChsY2QoKSxqY2QpKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxOemUpLCcnKSwnRWRnZSBFbmQgVGV4dHVyZSBMZW5ndGgnKSwnU2hvdWxkIGJlIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0dXJlIGF0IHRoZSBlbmQgb2YgYW4gZWRnZS4gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSBFZGdlIFJvdXRpbmcuJyksNyksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsT3plKSwnJyksJ1RyZWUgTGV2ZWwnKSwnVGhlIGluZGV4IGZvciB0aGUgdHJlZSBsZXZlbCB0aGUgbm9kZSBpcyBpbicpLGpmYigwKSksdmNkKSxVSSksbXJiKGljZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsUHplKSwnJyksVHplKSwnV2hlbiBzZXQgdG8gYSBwb3NpdGl2ZSBudW1iZXIgdGhpcyBvcHRpb24gd2lsbCBmb3JjZSB0aGUgYWxnb3JpdGhtIHRvIHBsYWNlIHRoZSBub2RlIHRvIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gd2l0aGluIHRoZSB0cmVlcyBsYXllciBpZiB3ZWlnaHRpbmcgaXMgc2V0IHRvIGNvbnN0cmFpbnQnKSxqZmIoLTEpKSx2Y2QpLFVJKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxRemUpLCcnKSwnV2VpZ2h0aW5nIG9mIE5vZGVzJyksJ1doaWNoIHdlaWdodGluZyB0byB1c2Ugd2hlbiBjb21wdXRpbmcgYSBub2RlIG9yZGVyLicpLERVYyksdGNkKSx4JCksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsUnplKSwnJyksJ0VkZ2UgUm91dGluZyBNb2RlJyksJ0Nob29zZXMgYW4gRWRnZSBSb3V0aW5nIGFsZ29yaXRobS4nKSx4VWMpLHRjZCksdCQpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFN6ZSksJycpLCdTZWFyY2ggT3JkZXInKSwnV2hpY2ggc2VhcmNoIG9yZGVyIHRvIHVzZSB3aGVuIGNvbXB1dGluZyBhIHNwYW5uaW5nIHRyZWUuJyksQVVjKSx0Y2QpLHkkKSxtcmIoamNkKSkpKTtsVmMoKG5ldyBtVmMsYSkpfTt2YXIgdVVjLHZVYyx3VWMseFVjLHlVYyx6VWMsQVVjLEJVYyxDVWMsRFVjO3ZhciB1JD1qZWIoS3plLCdNclRyZWVNZXRhRGF0YVByb3ZpZGVyJyw4NDEpO1ljYig5ODMsMSxIdWUsbVZjKTtfLnRmPWZ1bmN0aW9uIG5WYyhhKXtsVmMoYSl9O3ZhciBIVWMsSVVjLEpVYyxLVWMsTFVjLE1VYyxOVWMsT1VjLFBVYyxRVWMsUlVjLFNVYyxUVWMsVVVjLFZVYyxXVWMsWFVjLFlVYyxaVWMsJFVjLF9VYyxhVmMsYlZjLGNWYyxkVmMsZVZjLGZWYyxnVmMsaFZjLGlWYyxqVmM7dmFyIHckPWplYihLemUsJ01yVHJlZU9wdGlvbnMnLDk4Myk7WWNiKDk4NCwxLHt9LG9WYyk7Xy51Zj1mdW5jdGlvbiBwVmMoKXt2YXIgYTtyZXR1cm4gYT1uZXcgaVFjLGF9O18udmY9ZnVuY3Rpb24gcVZjKGEpe307dmFyIHYkPWplYihLemUsJ01yVHJlZU9wdGlvbnMvTXJ0cmVlRmFjdG9yeScsOTg0KTtZY2IoMzUwLDIzLHszOjEsMzQ6MSwyMzoxLDM1MDoxfSx3VmMpO3ZhciByVmMsc1ZjLHRWYyx1VmM7dmFyIHgkPWtlYihLemUsJ09yZGVyV2VpZ2h0aW5nJywzNTAsTUkseVZjLHhWYyk7dmFyIHpWYztZY2IoNDIyLDIzLHszOjEsMzQ6MSwyMzoxLDQyMjoxfSxFVmMpO3ZhciBCVmMsQ1ZjO3ZhciB5JD1rZWIoS3plLCdUcmVlaWZ5aW5nT3JkZXInLDQyMixNSSxHVmMsRlZjKTt2YXIgSFZjO1ljYigxNDI1LDEsZ3plLFFWYyk7Xy5wZz1mdW5jdGlvbiBSVmMoYSl7cmV0dXJuIEpEKGEsMTIwKSxKVmN9O18uSWY9ZnVuY3Rpb24gU1ZjKGEsYil7UFZjKHRoaXMsSkQoYSwxMjApLGIpfTt2YXIgSlZjO3ZhciB6JD1qZWIoJ29yZy5lY2xpcHNlLmVsay5hbGcubXJ0cmVlLnAxdHJlZWlmeScsJ0RGU1RyZWVpZnllcicsMTQyNSk7WWNiKDE0MjYsMSxnemUsWVZjKTtfLnBnPWZ1bmN0aW9uIFpWYyhhKXtyZXR1cm4gSkQoYSwxMjApLFRWY307Xy5JZj1mdW5jdGlvbiBiV2MoYSxiKXtYVmModGhpcyxKRChhLDEyMCksYil9O3ZhciBUVmM7dmFyIEgkPWplYihYemUsJ05vZGVPcmRlcmVyJywxNDI2KTtZY2IoMTQzMywxLHt9LGRXYyk7Xy5yZD1mdW5jdGlvbiBlV2MoYSl7cmV0dXJuIGNXYyhhKX07dmFyIEEkPWplYihYemUsJ05vZGVPcmRlcmVyLzBtZXRob2RyZWYkbGFtYmRhJDYkVHlwZScsMTQzMyk7WWNiKDE0MjcsMSxJcmUsZldjKTtfLk1iPWZ1bmN0aW9uIGdXYyhhKXtyZXR1cm4gVVZjKCkseWRiKExEKFdNYihKRChhLDM5KSwodFVjKCkscVVjKSkpKX07dmFyIEIkPWplYihYemUsJ05vZGVPcmRlcmVyL2xhbWJkYSQwJFR5cGUnLDE0MjcpO1ljYigxNDI4LDEsSXJlLGhXYyk7Xy5NYj1mdW5jdGlvbiBpV2MoYSl7cmV0dXJuIFVWYygpLEpEKFdNYihKRChhLDM5KSwoa1ZjKCksWlVjKSksMTcpLmE8MH07dmFyIEMkPWplYihYemUsJ05vZGVPcmRlcmVyL2xhbWJkYSQxJFR5cGUnLDE0MjgpO1ljYigxNDI5LDEsSXJlLGpXYyk7Xy5NYj1mdW5jdGlvbiBrV2MoYSl7cmV0dXJuICRWYyh0aGlzLmEsSkQoYSwzOSkpfTt2YXIgRCQ9amViKFh6ZSwnTm9kZU9yZGVyZXIvbGFtYmRhJDIkVHlwZScsMTQyOSk7WWNiKDE0MzAsMSxJcmUsbFdjKTtfLk1iPWZ1bmN0aW9uIG1XYyhhKXtyZXR1cm4gX1ZjKHRoaXMuYSxKRChhLDM5KSl9O3ZhciBFJD1qZWIoWHplLCdOb2RlT3JkZXJlci9sYW1iZGEkMyRUeXBlJywxNDMwKTtZY2IoMTQzMSwxLEJ0ZSxuV2MpO18uTGU9ZnVuY3Rpb24gb1djKGEsYil7cmV0dXJuIGFXYyhKRChhLDM5KSxKRChiLDM5KSl9O18uRmI9ZnVuY3Rpb24gcFdjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBxV2MoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIEYkPWplYihYemUsJ05vZGVPcmRlcmVyL2xhbWJkYSQ0JFR5cGUnLDE0MzEpO1ljYigxNDMyLDEsSXJlLHJXYyk7Xy5NYj1mdW5jdGlvbiBzV2MoYSl7cmV0dXJuIFVWYygpLEpEKFdNYihKRChhLDM5KSwodFVjKCksJFRjKSksMTcpLmEhPTB9O3ZhciBHJD1qZWIoWHplLCdOb2RlT3JkZXJlci9sYW1iZGEkNSRUeXBlJywxNDMyKTtZY2IoMTQzNCwxLGd6ZSxBV2MpO18ucGc9ZnVuY3Rpb24gQldjKGEpe3JldHVybiBKRChhLDEyMCksdFdjfTtfLklmPWZ1bmN0aW9uIENXYyhhLGIpe3lXYyh0aGlzLEpEKGEsMTIwKSxiKX07Xy5iPTA7dmFyIHRXYzt2YXIgSSQ9amViKCdvcmcuZWNsaXBzZS5lbGsuYWxnLm1ydHJlZS5wM3BsYWNlJywnTm9kZVBsYWNlcicsMTQzNCk7WWNiKDE0MzUsMSxnemUsTVdjKTtfLnBnPWZ1bmN0aW9uIE5XYyhhKXtyZXR1cm4gSkQoYSwxMjApLERXY307Xy5JZj1mdW5jdGlvbiBfV2MoYSxiKXtMV2MoSkQoYSwxMjApLGIpfTt2YXIgRFdjO3ZhciBjXz1qZWIoWXplLCdFZGdlUm91dGVyJywxNDM1KTtZY2IoMTQzNywxLEJ0ZSxhWGMpO18uTGU9ZnVuY3Rpb24gYlhjKGEsYil7cmV0dXJuICRlYihKRChhLDE3KS5hLEpEKGIsMTcpLmEpfTtfLkZiPWZ1bmN0aW9uIGNYYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gZFhjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBKJD1qZWIoWXplLCdFZGdlUm91dGVyLzBtZXRob2RyZWYkY29tcGFyZSRUeXBlJywxNDM3KTtZY2IoMTQ0MiwxLHt9LGVYYyk7Xy5XZT1mdW5jdGlvbiBmWGMoYSl7cmV0dXJuIEJlYihNRChhKSl9O3ZhciBLJD1qZWIoWXplLCdFZGdlUm91dGVyLzFtZXRob2RyZWYkZG91YmxlVmFsdWUkVHlwZScsMTQ0Mik7WWNiKDE0NDQsMSxCdGUsZ1hjKTtfLkxlPWZ1bmN0aW9uIGhYYyhhLGIpe3JldHVybiBIZWIoQmViKE1EKGEpKSxCZWIoTUQoYikpKX07Xy5GYj1mdW5jdGlvbiBpWGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIGpYYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgTCQ9amViKFl6ZSwnRWRnZVJvdXRlci8ybWV0aG9kcmVmJGNvbXBhcmUkVHlwZScsMTQ0NCk7WWNiKDE0NDYsMSxCdGUsa1hjKTtfLkxlPWZ1bmN0aW9uIGxYYyhhLGIpe3JldHVybiBIZWIoQmViKE1EKGEpKSxCZWIoTUQoYikpKX07Xy5GYj1mdW5jdGlvbiBtWGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIG5YYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgTSQ9amViKFl6ZSwnRWRnZVJvdXRlci8zbWV0aG9kcmVmJGNvbXBhcmUkVHlwZScsMTQ0Nik7WWNiKDE0NDgsMSx7fSxvWGMpO18uV2U9ZnVuY3Rpb24gcFhjKGEpe3JldHVybiBCZWIoTUQoYSkpfTt2YXIgTiQ9amViKFl6ZSwnRWRnZVJvdXRlci80bWV0aG9kcmVmJGRvdWJsZVZhbHVlJFR5cGUnLDE0NDgpO1ljYigxNDUwLDEsQnRlLHFYYyk7Xy5MZT1mdW5jdGlvbiByWGMoYSxiKXtyZXR1cm4gSGViKEJlYihNRChhKSksQmViKE1EKGIpKSl9O18uRmI9ZnVuY3Rpb24gc1hjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiB0WGMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIE8kPWplYihZemUsJ0VkZ2VSb3V0ZXIvNW1ldGhvZHJlZiRjb21wYXJlJFR5cGUnLDE0NTApO1ljYigxNDUyLDEsQnRlLHVYYyk7Xy5MZT1mdW5jdGlvbiB2WGMoYSxiKXtyZXR1cm4gSGViKEJlYihNRChhKSksQmViKE1EKGIpKSl9O18uRmI9ZnVuY3Rpb24gd1hjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiB4WGMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFAkPWplYihZemUsJ0VkZ2VSb3V0ZXIvNm1ldGhvZHJlZiRjb21wYXJlJFR5cGUnLDE0NTIpO1ljYigxNDM2LDEse30seVhjKTtfLktiPWZ1bmN0aW9uIHpYYyhhKXtyZXR1cm4gRVdjKCksSkQoV01iKEpEKGEsMzkpLChrVmMoKSxpVmMpKSwxNyl9O3ZhciBRJD1qZWIoWXplLCdFZGdlUm91dGVyL2xhbWJkYSQwJFR5cGUnLDE0MzYpO1ljYigxNDQ3LDEse30sQVhjKTtfLktiPWZ1bmN0aW9uIEJYYyhhKXtyZXR1cm4gT1djKEpEKGEsMzkpKX07dmFyIFIkPWplYihZemUsJ0VkZ2VSb3V0ZXIvbGFtYmRhJDExJFR5cGUnLDE0NDcpO1ljYigxNDQ5LDEse30sQ1hjKTtfLktiPWZ1bmN0aW9uIERYYyhhKXtyZXR1cm4gUFdjKHRoaXMuYix0aGlzLmEsSkQoYSwzOSkpfTtfLmE9MDtfLmI9MDt2YXIgUyQ9amViKFl6ZSwnRWRnZVJvdXRlci9sYW1iZGEkMTMkVHlwZScsMTQ0OSk7WWNiKDE0NTEsMSx7fSxFWGMpO18uS2I9ZnVuY3Rpb24gRlhjKGEpe3JldHVybiBRV2ModGhpcy5iLHRoaXMuYSxKRChhLDM5KSl9O18uYT0wO18uYj0wO3ZhciBUJD1qZWIoWXplLCdFZGdlUm91dGVyL2xhbWJkYSQxNSRUeXBlJywxNDUxKTtZY2IoMTQ1MywxLEJ0ZSxHWGMpO18uTGU9ZnVuY3Rpb24gSFhjKGEsYil7cmV0dXJuIFJXYyhKRChhLDY1KSxKRChiLDY1KSl9O18uRmI9ZnVuY3Rpb24gSVhjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBKWGMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFUkPWplYihZemUsJ0VkZ2VSb3V0ZXIvbGFtYmRhJDE3JFR5cGUnLDE0NTMpO1ljYigxNDU0LDEsQnRlLEtYYyk7Xy5MZT1mdW5jdGlvbiBMWGMoYSxiKXtyZXR1cm4gU1djKEpEKGEsNjUpLEpEKGIsNjUpKX07Xy5GYj1mdW5jdGlvbiBNWGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIE5YYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgViQ9amViKFl6ZSwnRWRnZVJvdXRlci9sYW1iZGEkMTgkVHlwZScsMTQ1NCk7WWNiKDE0NTUsMSxCdGUsT1hjKTtfLkxlPWZ1bmN0aW9uIFBYYyhhLGIpe3JldHVybiBUV2MoSkQoYSw2NSksSkQoYiw2NSkpfTtfLkZiPWZ1bmN0aW9uIFFYYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gUlhjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBXJD1qZWIoWXplLCdFZGdlUm91dGVyL2xhbWJkYSQxOSRUeXBlJywxNDU1KTtZY2IoMTQzOCwxLElyZSxTWGMpO18uTWI9ZnVuY3Rpb24gVFhjKGEpe3JldHVybiBVV2ModGhpcy5hLEpEKGEsMzkpKX07Xy5hPTA7dmFyIFgkPWplYihZemUsJ0VkZ2VSb3V0ZXIvbGFtYmRhJDIkVHlwZScsMTQzOCk7WWNiKDE0NTYsMSxCdGUsVVhjKTtfLkxlPWZ1bmN0aW9uIFZYYyhhLGIpe3JldHVybiBWV2MoSkQoYSw2NSksSkQoYiw2NSkpfTtfLkZiPWZ1bmN0aW9uIFdYYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gWFhjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBZJD1qZWIoWXplLCdFZGdlUm91dGVyL2xhbWJkYSQyMCRUeXBlJywxNDU2KTtZY2IoMTQzOSwxLEJ0ZSxZWGMpO18uTGU9ZnVuY3Rpb24gWlhjKGEsYil7cmV0dXJuIFdXYyhKRChhLDM5KSxKRChiLDM5KSl9O18uRmI9ZnVuY3Rpb24gJFhjKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBfWGMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFokPWplYihZemUsJ0VkZ2VSb3V0ZXIvbGFtYmRhJDMkVHlwZScsMTQzOSk7WWNiKDE0NDAsMSxCdGUsYVljKTtfLkxlPWZ1bmN0aW9uIGJZYyhhLGIpe3JldHVybiBYV2MoSkQoYSwzOSksSkQoYiwzOSkpfTtfLkZiPWZ1bmN0aW9uIGNZYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gZFljKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciAkJD1qZWIoWXplLCdFZGdlUm91dGVyL2xhbWJkYSQ0JFR5cGUnLDE0NDApO1ljYigxNDQxLDEse30sZVljKTtfLktiPWZ1bmN0aW9uIGZZYyhhKXtyZXR1cm4gWVdjKEpEKGEsMzkpKX07dmFyIF8kPWplYihZemUsJ0VkZ2VSb3V0ZXIvbGFtYmRhJDUkVHlwZScsMTQ0MSk7WWNiKDE0NDMsMSx7fSxnWWMpO18uS2I9ZnVuY3Rpb24gaFljKGEpe3JldHVybiBaV2ModGhpcy5iLHRoaXMuYSxKRChhLDM5KSl9O18uYT0wO18uYj0wO3ZhciBhXz1qZWIoWXplLCdFZGdlUm91dGVyL2xhbWJkYSQ3JFR5cGUnLDE0NDMpO1ljYigxNDQ1LDEse30saVljKTtfLktiPWZ1bmN0aW9uIGpZYyhhKXtyZXR1cm4gJFdjKHRoaXMuYix0aGlzLmEsSkQoYSwzOSkpfTtfLmE9MDtfLmI9MDt2YXIgYl89amViKFl6ZSwnRWRnZVJvdXRlci9sYW1iZGEkOSRUeXBlJywxNDQ1KTtZY2IoNjYwLDEsezY2MDoxfSxsWWMpO18uZT0wO18uZj1mYWxzZTtfLmc9ZmFsc2U7dmFyIGZfPWplYihZemUsJ011bHRpTGV2ZWxFZGdlTm9kZU5vZGVHYXAnLDY2MCk7WWNiKDE4ODksMSxCdGUsb1ljKTtfLkxlPWZ1bmN0aW9uIHBZYyhhLGIpe3JldHVybiBtWWMoSkQoYSwyMzkpLEpEKGIsMjM5KSl9O18uRmI9ZnVuY3Rpb24gcVljKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiByWWMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIGRfPWplYihZemUsJ011bHRpTGV2ZWxFZGdlTm9kZU5vZGVHYXAvbGFtYmRhJDAkVHlwZScsMTg4OSk7WWNiKDE4OTAsMSxCdGUsc1ljKTtfLkxlPWZ1bmN0aW9uIHRZYyhhLGIpe3JldHVybiBuWWMoSkQoYSwyMzkpLEpEKGIsMjM5KSl9O18uRmI9ZnVuY3Rpb24gdVljKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiB2WWMoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIGVfPWplYihZemUsJ011bHRpTGV2ZWxFZGdlTm9kZU5vZGVHYXAvbGFtYmRhJDEkVHlwZScsMTg5MCk7dmFyIHdZYztZY2IoNDg1LDIzLHszOjEsMzQ6MSwyMzoxLDQ4NToxLDE4ODoxLDE5NjoxfSxDWWMpO18uYmc9ZnVuY3Rpb24gRVljKCl7cmV0dXJuIEJZYyh0aGlzKX07Xy5vZz1mdW5jdGlvbiBEWWMoKXtyZXR1cm4gQlljKHRoaXMpfTt2YXIgeVljLHpZYzt2YXIgZ189a2ViKFp6ZSwnUmFkaWFsTGF5b3V0UGhhc2VzJyw0ODUsTUksR1ljLEZZYyk7dmFyIEhZYztZY2IoMTA3OCwyMjIsdHVlLEtZYyk7Xy5rZj1mdW5jdGlvbiBMWWMoYSxiKXt2YXIgYyxkLGUsZixnLGg7Yz1KWWModGhpcyxhKTtiLlNnKCdSYWRpYWwgbGF5b3V0JyxjLmMubGVuZ3RoKTt5ZGIoTEQoa3NkKGEsKGJfYygpLFEkYykpKSl8fFFEYigoZD1uZXcgUkRiKChSb2QoKSxuZXcgZHBkKGEpKSksZCkpO2g9TlljKGEpO21zZChhLCh4WWMoKSx3WWMpLGgpO2lmKCFoKXt0aHJvdyBzY2IobmV3IFRlYignVGhlIGdpdmVuIGdyYXBoIGlzIG5vdCBhIHRyZWUhJykpfWU9QmViKE1EKGtzZChhLFYkYykpKTtlPT0wJiYoZT1NWWMoYSkpO21zZChhLFYkYyxlKTtmb3IoZz1uZXcgcm1iKEpZYyh0aGlzLGEpKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksNDQpO2YuSWYoYSxiLmJoKDEpKX1iLlRnKCl9O3ZhciBoXz1qZWIoWnplLCdSYWRpYWxMYXlvdXRQcm92aWRlcicsMTA3OCk7WWNiKDU0MSwxLEJ0ZSxXWWMpO18uTGU9ZnVuY3Rpb24gWFljKGEsYil7cmV0dXJuIFZZYyh0aGlzLmEsdGhpcy5iLEpEKGEsMjcpLEpEKGIsMjcpKX07Xy5GYj1mdW5jdGlvbiBZWWMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFpZYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTtfLmE9MDtfLmI9MDt2YXIgaV89amViKFp6ZSwnUmFkaWFsVXRpbC9sYW1iZGEkMCRUeXBlJyw1NDEpO1ljYigxMzM0LDEsRHZlLF9ZYyk7Xy5JZj1mdW5jdGlvbiBhWmMoYSxiKXskWWMoSkQoYSwyNyksYil9O3ZhciBqXz1qZWIoY0FlLCdDYWxjdWxhdGVHcmFwaFNpemUnLDEzMzQpO1ljYigxMzM1LDEsRHZlLGNaYyk7Xy5JZj1mdW5jdGlvbiBkWmMoYSxiKXtiWmMoSkQoYSwyNykpfTt2YXIga189amViKGNBZSwnRWRnZUFuZ2xlQ2FsY3VsYXRvcicsMTMzNSk7WWNiKDM2MSwyMyx7MzoxLDM0OjEsMjM6MSwzNjE6MSwxOTY6MX0sa1pjKTtfLmJnPWZ1bmN0aW9uIGxaYygpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IFRaYztjYXNlIDE6cmV0dXJuIG5ldyBEWmM7Y2FzZSAyOnJldHVybiBuZXcgWFpjO2Nhc2UgMzpyZXR1cm4gbmV3IF9ZYztjYXNlIDQ6cmV0dXJuIG5ldyBjWmM7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYigkdmUrKHRoaXMuZiE9bnVsbD90aGlzLmY6JycrdGhpcy5nKSkpO319O3ZhciBlWmMsZlpjLGdaYyxoWmMsaVpjO3ZhciBsXz1rZWIoY0FlLF92ZSwzNjEsTUksblpjLG1aYyk7dmFyIG9aYztZY2IoNjM2LDEse30pO18uZT0xO18uZz0wO3ZhciBtXz1qZWIoZUFlLCdBYnN0cmFjdFJhZGl1c0V4dGVuc2lvbkNvbXBhY3Rpb24nLDYzNik7WWNiKDE3ODAsNjM2LHt9LEFaYyk7Xy5BZz1mdW5jdGlvbiBCWmMoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqO3RoaXMuYz1KRChrc2QoYSwoeFljKCksd1ljKSksMjcpO3VaYyh0aGlzLHRoaXMuYyk7dGhpcy5kPXhfYyhKRChrc2QoYSwoYl9jKCksJCRjKSksMjk5KSk7aT1KRChrc2QoYSxLJGMpLDE3KTshIWkmJnRaYyh0aGlzLGkuYSk7aD1NRChrc2QoYSwoTGdkKCksd2dkKSkpO3ZaYyh0aGlzLCh0RGIoaCksaCkpO2o9VFljKHRoaXMuYyk7ISF0aGlzLmQmJnRoaXMuZC5FZyhqKTt3WmModGhpcyxqKTtnPW5ldyBkbmIoV0MoT0MoQTMsMSksZkFlLDI3LDAsW3RoaXMuY10pKTtmb3IoYz0wO2M8MjtjKyspe2ZvcihiPTA7YjxqLmMubGVuZ3RoO2IrKyl7ZT1uZXcgZG5iKFdDKE9DKEEzLDEpLGZBZSwyNywwLFsoc0RiKGIsai5jLmxlbmd0aCksSkQoai5jW2JdLDI3KSldKSk7Zj1iPGouYy5sZW5ndGgtMT8oc0RiKGIrMSxqLmMubGVuZ3RoKSxKRChqLmNbYisxXSwyNykpOihzRGIoMCxqLmMubGVuZ3RoKSxKRChqLmNbMF0sMjcpKTtkPWI9PTA/SkQoTWxiKGosai5jLmxlbmd0aC0xKSwyNyk6KHNEYihiLTEsai5jLmxlbmd0aCksSkQoai5jW2ItMV0sMjcpKTt5WmModGhpcywoc0RiKGIsai5jLmxlbmd0aCksSkQoai5jW2JdLDI3KSxnKSxkLGYsZSl9fX07dmFyIG5fPWplYihlQWUsJ0FubnVsdXNXZWRnZUNvbXBhY3Rpb24nLDE3ODApO1ljYigxMzMyLDEsRHZlLERaYyk7Xy5JZj1mdW5jdGlvbiBFWmMoYSxiKXtDWmMoSkQoYSwyNyksYil9O3ZhciBvXz1qZWIoZUFlLCdHZW5lcmFsQ29tcGFjdG9yJywxMzMyKTtZY2IoMTc3OSw2MzYse30sSVpjKTtfLkFnPWZ1bmN0aW9uIEpaYyhhKXt2YXIgYixjLGQsZTtjPUpEKGtzZChhLCh4WWMoKSx3WWMpKSwyNyk7dGhpcy5mPWM7dGhpcy5iPXhfYyhKRChrc2QoYSwoYl9jKCksJCRjKSksMjk5KSk7ZT1KRChrc2QoYSxLJGMpLDE3KTshIWUmJnRaYyh0aGlzLGUuYSk7ZD1NRChrc2QoYSwoTGdkKCksd2dkKSkpO3ZaYyh0aGlzLCh0RGIoZCksZCkpO2I9VFljKGMpOyEhdGhpcy5iJiZ0aGlzLmIuRWcoYik7R1pjKHRoaXMsYil9O18uYT0wO3ZhciBwXz1qZWIoZUFlLCdSYWRpYWxDb21wYWN0aW9uJywxNzc5KTtZY2IoMTc4OCwxLHt9LExaYyk7Xy5CZz1mdW5jdGlvbiBNWmMoYSl7dmFyIGIsYyxkLGUsZixnO3RoaXMuYT1hO2I9MDtnPVRZYyhhKTtkPTA7Zm9yKGY9bmV3IHJtYihnKTtmLmE8Zi5jLmMubGVuZ3RoOyl7ZT1KRChwbWIoZiksMjcpOysrZDtmb3IoYz1kO2M8Zy5jLmxlbmd0aDtjKyspe0taYyh0aGlzLGUsKHNEYihjLGcuYy5sZW5ndGgpLEpEKGcuY1tjXSwyNykpKSYmKGIrPTEpfX1yZXR1cm4gYn07dmFyIHFfPWplYihnQWUsJ0Nyb3NzaW5nTWluaW1pemF0aW9uUG9zaXRpb24nLDE3ODgpO1ljYigxNzg2LDEse30sTlpjKTtfLkJnPWZ1bmN0aW9uIE9aYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbjtkPTA7Zm9yKGM9bmV3IGVzKElyKCRCZChhKS5hLkpjKCksbmV3IGVyKSk7Y3MoYyk7KXtiPUpEKGRzKGMpLDg1KTtoPV9CZChKRChuRGQoKCFiLmMmJihiLmM9bmV3IHJlZSh2MyxiLDUsOCkpLGIuYyksMCksODQpKTtqPWguaStoLmcvMjtrPWguaitoLmYvMjtlPWEuaSthLmcvMjtmPWEuaithLmYvMjtsPW5ldyBDZGQ7bC5hPWotZTtsLmI9ay1mO2c9bmV3IEVkZChsLmEsbC5iKTtMY2QoZyxhLmcsYS5mKTtsLmEtPWcuYTtsLmItPWcuYjtlPWotbC5hO2Y9ay1sLmI7aT1uZXcgRWRkKGwuYSxsLmIpO0xjZChpLGguZyxoLmYpO2wuYS09aS5hO2wuYi09aS5iO2o9ZStsLmE7az1mK2wuYjttPWotZTtuPWstZjtkKz0kd25kLk1hdGguc3FydChtKm0rbipuKX1yZXR1cm4gZH07dmFyIHJfPWplYihnQWUsJ0VkZ2VMZW5ndGhPcHRpbWl6YXRpb24nLDE3ODYpO1ljYigxNzg3LDEse30sUFpjKTtfLkJnPWZ1bmN0aW9uIFFaYyhhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsO2Q9MDtmb3IoYz1uZXcgZXMoSXIoJEJkKGEpLmEuSmMoKSxuZXcgZXIpKTtjcyhjKTspe2I9SkQoZHMoYyksODUpO2g9X0JkKEpEKG5EZCgoIWIuYyYmKGIuYz1uZXcgcmVlKHYzLGIsNSw4KSksYi5jKSwwKSw4NCkpO2k9aC5pK2guZy8yO2o9aC5qK2guZi8yO2U9SkQoa3NkKGgsKExnZCgpLGZnZCkpLDgpO2Y9YS5pK2UuYSthLmcvMjtnPWEuaitlLmIrYS5mO2s9aS1mO2w9ai1nO2QrPSR3bmQuTWF0aC5zcXJ0KGsqaytsKmwpfXJldHVybiBkfTt2YXIgc189amViKGdBZSwnRWRnZUxlbmd0aFBvc2l0aW9uT3B0aW1pemF0aW9uJywxNzg3KTtZY2IoMTMzMSw2MzYsRHZlLFRaYyk7Xy5JZj1mdW5jdGlvbiBVWmMoYSxiKXtTWmModGhpcyxKRChhLDI3KSxiKX07dmFyIHRfPWplYignb3JnLmVjbGlwc2UuZWxrLmFsZy5yYWRpYWwuaW50ZXJtZWRpYXRlLm92ZXJsYXBzJywnUmFkaXVzRXh0ZW5zaW9uT3ZlcmxhcFJlbW92YWwnLDEzMzEpO1ljYigxMzMzLDEsRHZlLFhaYyk7Xy5JZj1mdW5jdGlvbiBZWmMoYSxiKXtXWmMoSkQoYSwyNyksYil9O3ZhciB1Xz1qZWIoJ29yZy5lY2xpcHNlLmVsay5hbGcucmFkaWFsLmludGVybWVkaWF0ZS5yb3RhdGlvbicsJ0dlbmVyYWxSb3RhdG9yJywxMzMzKTtZY2IoNDIzLDIzLHszOjEsMzQ6MSwyMzoxLDQyMzoxfSxiJGMpO3ZhciBaWmMsJFpjO3ZhciB2Xz1rZWIoaUFlLCdBbm51bHVzV2VkZ2VDcml0ZXJpYScsNDIzLE1JLGQkYyxjJGMpO3ZhciBlJGM7WWNiKDM4NCwyMyx7MzoxLDM0OjEsMjM6MSwzODQ6MX0sbCRjKTt2YXIgZyRjLGgkYyxpJGM7dmFyIHdfPWtlYihpQWUsakFlLDM4NCxNSSxuJGMsbSRjKTt2YXIgbyRjO1ljYig4NDIsMSxIdWUsSCRjKTtfLnRmPWZ1bmN0aW9uIEkkYyhhKXtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxrQWUpLCcnKSwnQ2VudGVyIE9uIFJvb3QnKSwnQ2VudGVycyB0aGUgbGF5b3V0IG9uIHRoZSByb290IG9mIHRoZSB0cmVlIGkuZS4gc28gdGhhdCB0aGUgY2VudHJhbCBub2RlIGlzIGFsc28gdGhlIGNlbnRlciBub2RlIG9mIHRoZSBmaW5hbCBsYXlvdXQuIFRoaXMgaW50cm9kdWNlcyBhZGRpdGlvbmFsIHdoaXRlc3BhY2UuJyksKHhkYigpLGZhbHNlKSksKHpjZCgpLHJjZCkpLEdJKSxtcmIoKGxjZCgpLGpjZCkpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGxBZSksJycpLCdPcmRlciBJRCcpLCdUaGUgaWQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG9yZGVyIGZvciBub2RlcyBvZiBvbmUgcmFkaXVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNvcnQgdGhlbSBpbiB0aGUgbGF5ZXIgYWNjb3JkaW5nbHkuJyksamZiKDApKSx2Y2QpLFVJKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxtQWUpLCcnKSwnUmFkaXVzJyksJ1RoZSByYWRpdXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCByYWRpdXMgZm9yIHRoZSByYWRpYWwgbGF5b3V0ZXIuJyksMCksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsbkFlKSwnJyksJ1JvdGF0ZScpLCdUaGUgcm90YXRlIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgYSByb3RhdGlvbiBvZiB0aGUgbGF5b3V0IHNob3VsZCBiZSBwZXJmb3JtZWQuJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLG9BZSksJycpLHdBZSksJ1dpdGggdGhlIGNvbXBhY3RlciBvcHRpb24gaXQgY2FuIGJlIGRldGVybWluZWQgaG93IGNvbXBhY3Rpb24gb24gdGhlIGdyYXBoIGlzIGRvbmUuIEl0IGNhbiBiZSBjaG9zZW4gYmV0d2VlbiBub25lLCB0aGUgcmFkaWFsIGNvbXBhY3Rpb24gb3IgdGhlIGNvbXBhY3Rpb24gb2Ygd2VkZ2VzIHNlcGFyYXRlbHkuJyksdCRjKSx0Y2QpLHdfKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxwQWUpLCcnKSwnQ29tcGFjdGlvbiBTdGVwIFNpemUnKSwnRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHN0ZXBzIHdpdGggd2hpY2ggdGhlIGNvbXBhY3Rpb24gaXMgZG9uZS4gU3RlcCBzaXplIDEgY29ycmVsYXRlcyB0byBhIGNvbXBhY3Rpb24gb2YgMSBwaXhlbCBwZXIgSXRlcmF0aW9uLicpLGpmYigxKSksdmNkKSxVSSksbXJiKGpjZCkpKSk7T2FkKGEscEFlLG9BZSxudWxsKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxxQWUpLCcnKSwnU29ydGVyJyksJ1NvcnQgdGhlIG5vZGVzIHBlciByYWRpdXMgYWNjb3JkaW5nIHRvIHRoZSBzb3J0aW5nIGFsZ29yaXRobS4gVGhlIHN0cmF0ZWdpZXMgYXJlIG5vbmUsIGJ5IHRoZSBnaXZlbiBvcmRlciBpZCwgb3Igc29ydGluZyB0aGVtIGJ5IHBvbGFyIGNvb3JkaW5hdGVzLicpLEQkYyksdGNkKSxCXyksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsckFlKSwnJyksJ0FubnVsdXMgV2VkZ2UgQ3JpdGVyaWEnKSwnRGV0ZXJtaW5lIGhvdyB0aGUgd2VkZ2UgZm9yIHRoZSBub2RlIHBsYWNlbWVudCBpcyBjYWxjdWxhdGVkLiBJdCBjYW4gYmUgY2hvc2VuIGJldHdlZW4gd2VkZ2UgZGV0ZXJtaW5hdGlvbiBieSB0aGUgbnVtYmVyIG9mIGxlYXZlcyBvciBieSB0aGUgbWF4aW11bSBzdW0gb2YgZGlhZ29uYWxzLicpLEYkYyksdGNkKSx2XyksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2Qsc0FlKSwnJyksJ1RyYW5zbGF0aW9uIE9wdGltaXphdGlvbicpLCdGaW5kIHRoZSBvcHRpbWFsIHRyYW5zbGF0aW9uIG9mIHRoZSBub2RlcyBvZiB0aGUgZmlyc3QgcmFkaWkgYWNjb3JkaW5nIHRvIHRoaXMgY3JpdGVyaWEuIEZvciBleGFtcGxlIGVkZ2UgY3Jvc3NpbmdzIGNhbiBiZSBtaW5pbWl6ZWQuJyksdiRjKSx0Y2QpLEFfKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx0QWUpLHhBZSksJ1RhcmdldCBBbmdsZScpLCdUaGUgYW5nbGUgaW4gcmFkaWFucyB0aGF0IHRoZSBsYXlvdXQgc2hvdWxkIGJlIHJvdGF0ZWQgdG8gYWZ0ZXIgbGF5b3V0LicpLDApLHNjZCksTEkpLG1yYihqY2QpKSkpO09hZChhLHRBZSxuQWUsbnVsbCk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsdUFlKSx4QWUpLCdBZGRpdGlvbmFsIFdlZGdlIFNwYWNlJyksJ0lmIHNldCB0byB0cnVlLCBtb2RpZmllcyB0aGUgdGFyZ2V0IGFuZ2xlIGJ5IHJvdGF0aW5nIGZ1cnRoZXIgc3VjaCB0aGF0IHNwYWNlIGlzIGxlZnQgZm9yIGFuIGVkZ2UgdG8gcGFzcyBpbiBiZXR3ZWVuIHRoZSBub2Rlcy4gVGhpcyBvcHRpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRvcC1kb3duIGxheW91dC4nKSxmYWxzZSkscmNkKSxHSSksbXJiKGpjZCkpKSk7T2FkKGEsdUFlLG5BZSxudWxsKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx2QWUpLHhBZSksJ091dGdvaW5nIEVkZ2UgQW5nbGVzJyksJ0NhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgYW5nbGUgb2YgY29ubmVjdGVkIG5vZGVzIHRvIGxlYXZlIHNwYWNlIGZvciBhbiBpbmNvbWluZyBlZGdlLiBUaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdG9wLWRvd24gbGF5b3V0LicpLGZhbHNlKSxyY2QpLEdJKSxtcmIoamNkKSkpKTtjX2MoKG5ldyBkX2MsYSkpfTt2YXIgcSRjLHIkYyxzJGMsdCRjLHUkYyx2JGMsdyRjLHgkYyx5JGMseiRjLEEkYyxCJGMsQyRjLEQkYyxFJGMsRiRjO3ZhciB4Xz1qZWIoaUFlLCdSYWRpYWxNZXRhRGF0YVByb3ZpZGVyJyw4NDIpO1ljYig5ODUsMSxIdWUsZF9jKTtfLnRmPWZ1bmN0aW9uIGVfYyhhKXtjX2MoYSl9O3ZhciBKJGMsSyRjLEwkYyxNJGMsTiRjLE8kYyxQJGMsUSRjLFIkYyxTJGMsVCRjLFUkYyxWJGMsVyRjLFgkYyxZJGMsWiRjLCQkYyxfJGMsYV9jO3ZhciB6Xz1qZWIoaUFlLCdSYWRpYWxPcHRpb25zJyw5ODUpO1ljYig5ODYsMSx7fSxmX2MpO18udWY9ZnVuY3Rpb24gZ19jKCl7dmFyIGE7cmV0dXJuIGE9bmV3IEtZYyxhfTtfLnZmPWZ1bmN0aW9uIGhfYyhhKXt9O3ZhciB5Xz1qZWIoaUFlLCdSYWRpYWxPcHRpb25zL1JhZGlhbEZhY3RvcnknLDk4Nik7WWNiKDM1MSwyMyx7MzoxLDM0OjEsMjM6MSwzNTE6MX0sb19jKTt2YXIgaV9jLGpfYyxrX2MsbF9jO3ZhciBBXz1rZWIoaUFlLCdSYWRpYWxUcmFuc2xhdGlvblN0cmF0ZWd5JywzNTEsTUkscV9jLHBfYyk7dmFyIHJfYztZY2IoMjk5LDIzLHszOjEsMzQ6MSwyMzoxLDI5OToxfSx5X2MpO3ZhciB0X2MsdV9jLHZfYzt2YXIgQl89a2ViKGlBZSwnU29ydGluZ1N0cmF0ZWd5JywyOTksTUksQV9jLHpfYyk7dmFyIEJfYztZY2IoMTQxNSwxLGd6ZSxHX2MpO18ucGc9ZnVuY3Rpb24gSF9jKGEpe3JldHVybiBKRChhLDI3KSxudWxsfTtfLklmPWZ1bmN0aW9uIElfYyhhLGIpe0VfYyh0aGlzLEpEKGEsMjcpLGIpfTtfLmM9MDt2YXIgQ189amViKCdvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5wMXBvc2l0aW9uJywnRWFkZXNSYWRpYWwnLDE0MTUpO1ljYigxNzg0LDEse30sSl9jKTtfLkNnPWZ1bmN0aW9uIEtfYyhhKXtyZXR1cm4gUlljKGEpfTt2YXIgRF89amViKHpBZSwnQW5udWx1c1dlZGdlQnlMZWFmcycsMTc4NCk7WWNiKDE3ODUsMSx7fSxNX2MpO18uQ2c9ZnVuY3Rpb24gTl9jKGEpe3JldHVybiBMX2ModGhpcyxhKX07dmFyIEVfPWplYih6QWUsJ0FubnVsdXNXZWRnZUJ5Tm9kZVNwYWNlJywxNzg1KTtZY2IoMTQxNiwxLGd6ZSxRX2MpO18ucGc9ZnVuY3Rpb24gUl9jKGEpe3JldHVybiBKRChhLDI3KSxudWxsfTtfLklmPWZ1bmN0aW9uIFNfYyhhLGIpe09fYyh0aGlzLEpEKGEsMjcpLGIpfTt2YXIgRl89amViKCdvcmcuZWNsaXBzZS5lbGsuYWxnLnJhZGlhbC5wMnJvdXRpbmcnLCdTdHJhaWdodExpbmVFZGdlUm91dGVyJywxNDE2KTtZY2IoODA1LDEse30sVV9jKTtfLkRnPWZ1bmN0aW9uIFZfYyhhKXt9O18uRWc9ZnVuY3Rpb24gWF9jKGEpe1RfYyh0aGlzLGEpfTt2YXIgSF89amViKEFBZSwnSURTb3J0ZXInLDgwNSk7WWNiKDE3ODMsMSxCdGUsWV9jKTtfLkxlPWZ1bmN0aW9uIFpfYyhhLGIpe3JldHVybiBXX2MoSkQoYSwyNyksSkQoYiwyNykpfTtfLkZiPWZ1bmN0aW9uICRfYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gX19jKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBHXz1qZWIoQUFlLCdJRFNvcnRlci9sYW1iZGEkMCRUeXBlJywxNzgzKTtZY2IoMTc4MiwxLHt9LGMwYyk7Xy5EZz1mdW5jdGlvbiBkMGMoYSl7YTBjKHRoaXMsYSl9O18uRWc9ZnVuY3Rpb24gZTBjKGEpe3ZhciBiO2lmKCFhLmRjKCkpe2lmKCF0aGlzLmUpe2I9T1ljKEpEKGEuWGIoMCksMjcpKTthMGModGhpcyxiKX1UX2ModGhpcy5lLGEpfX07dmFyIElfPWplYihBQWUsJ1BvbGFyQ29vcmRpbmF0ZVNvcnRlcicsMTc4Mik7WWNiKDQzMywyMyx7MzoxLDM0OjEsMjM6MSw0MzM6MX0sajBjKTt2YXIgZjBjLGcwYyxoMGM7dmFyIEpfPWtlYihFQWUsJ1JlY3RQYWNraW5nTGF5b3V0UGhhc2VzJyw0MzMsTUksbDBjLGswYyk7dmFyIG0wYztZY2IoMTA4MiwyMjIsdHVlLG8wYyk7Xy5rZj1mdW5jdGlvbiBxMGMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCLEMsRDtiLlNnKCdSZWN0YW5nbGUgUGFja2luZycsMSk7bD1KRChrc2QoYSwoazJjKCksYTJjKSksMTA3KTtpPXlkYihMRChrc2QoYSxVMWMpKSk7az1CZWIoTUQoa3NkKGEsZDJjKSkpO0M9eWRiKExEKGtzZChhLGUyYykpKTt0PSghYS5hJiYoYS5hPW5ldyBYMGQoQTMsYSwxMCwxMSkpLGEuYSk7eWRiKExEKGtzZChhLFgxYykpKXx8UURiKChlPW5ldyBSRGIoKFJvZCgpLG5ldyBkcGQoYSkpKSxlKSk7Qj1mYWxzZTtpZihDJiZ0Lmk+PTMpe3Y9SkQobkRkKHQsMCksMjcpO3c9SkQobkRkKHQsMSksMjcpO2Y9MDt3aGlsZShmKzI8dC5pKXt1PXY7dj13O3c9SkQobkRkKHQsZisyKSwyNyk7aWYodS5mPj12LmYrdy5mK2t8fHcuZj49dS5mK3YuZitrKXtCPXRydWU7YnJlYWt9ZWxzZXsrK2Z9fX1lbHNle0I9dHJ1ZX1pZighQil7bT10Lmk7Zm9yKGg9bmV3IENIZCh0KTtoLmUhPWguaS5nYygpOyl7Zz1KRChBSGQoaCksMjcpO21zZChnLChMZ2QoKSxnZ2QpLGpmYihtKSk7LS1tfU1sZChhLG5ldyB3bGQpO2IuVGcoKTtyZXR1cm59Yz0oZjljKHRoaXMuYSksaTljKHRoaXMuYSwoaTBjKCksZjBjKSxKRChrc2QoYSxpMmMpLDE4OCkpLGk5Yyh0aGlzLmEsZzBjLEpEKGtzZChhLF8xYyksMTg4KSksaTljKHRoaXMuYSxoMGMsSkQoa3NkKGEsZjJjKSwxODgpKSxjOWModGhpcy5hLChEPW5ldyBKOWMsRTljKEQsZjBjLChEMGMoKSxCMGMpKSxFOWMoRCxnMGMsQTBjKSx5ZGIoTEQoa3NkKGEsWTFjKSkpJiZFOWMoRCxmMGMsQzBjKSx5ZGIoTEQoa3NkKGEsUDFjKSkpJiZFOWMoRCxmMGMsejBjKSxEKSksZDljKHRoaXMuYSxhKSk7aj0xL2MuYy5sZW5ndGg7QT0wO2ZvcihvPW5ldyBybWIoYyk7by5hPG8uYy5jLmxlbmd0aDspe249SkQocG1iKG8pLDQ0KTtpZihiLllnKCkpe3JldHVybn1uLklmKGEsYi5iaChqKSk7KytBfXE9MDtwPTA7Zm9yKHM9bmV3IENIZCh0KTtzLmUhPXMuaS5nYygpOyl7cj1KRChBSGQocyksMjcpO3E9JHduZC5NYXRoLm1heChxLHIuaStyLmcpO3A9JHduZC5NYXRoLm1heChwLHIuaityLmYpfXJuZChhLG5ldyBFZGQoQmViKE1EKGtzZChhLChoMWMoKSwkMGMpKSkpLEJlYihNRChrc2QoYSxaMGMpKSkpLG5ldyBFZGQocSxwKSk7cDBjKHQsbCk7aXx8bW5kKGEsQmViKE1EKGtzZChhLCQwYykpKSsobC5iK2wuYyksQmViKE1EKGtzZChhLFowYykpKSsobC5kK2wuYSksZmFsc2UsdHJ1ZSk7eWRiKExEKGtzZChhLFgxYykpKXx8UURiKChkPW5ldyBSRGIoKFJvZCgpLG5ldyBkcGQoYSkpKSxkKSk7Yi5UZygpfTt2YXIgS189amViKEVBZSwnUmVjdFBhY2tpbmdMYXlvdXRQcm92aWRlcicsMTA4Mik7WWNiKDE0NTgsMSxEdmUsczBjKTtfLklmPWZ1bmN0aW9uIHUwYyhhLGIpe3IwYyhKRChhLDI3KSxiKX07dmFyIE1fPWplYihGQWUsJ0ludGVyYWN0aXZlTm9kZVJlb3JkZXJlcicsMTQ1OCk7WWNiKDE0NTksMSxCdGUsdjBjKTtfLkxlPWZ1bmN0aW9uIHcwYyhhLGIpe3JldHVybiB0MGMoSkQoYSwyNyksSkQoYiwyNykpfTtfLkZiPWZ1bmN0aW9uIHgwYyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24geTBjKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBMXz1qZWIoRkFlLCdJbnRlcmFjdGl2ZU5vZGVSZW9yZGVyZXIvbGFtYmRhJDAkVHlwZScsMTQ1OSk7WWNiKDM5OCwyMyx7MzoxLDM0OjEsMjM6MSwzOTg6MSwxOTY6MX0sRTBjKTtfLmJnPWZ1bmN0aW9uIEYwYygpe3N3aXRjaCh0aGlzLmcpe2Nhc2UgMDpyZXR1cm4gbmV3IFcwYztjYXNlIDE6cmV0dXJuIG5ldyBzMGM7Y2FzZSAyOnJldHVybiBuZXcgTzBjO2Nhc2UgMzpyZXR1cm4gbmV3IEwwYzt9cmV0dXJuIG51bGx9O3ZhciB6MGMsQTBjLEIwYyxDMGM7dmFyIE5fPWtlYihGQWUsX3ZlLDM5OCxNSSxIMGMsRzBjKTt2YXIgSTBjO1ljYigxNDYxLDEsRHZlLEwwYyk7Xy5JZj1mdW5jdGlvbiBNMGMoYSxiKXtLMGMoSkQoYSwyNyksYil9O3ZhciBPXz1qZWIoRkFlLCdNaW5TaXplUG9zdFByb2Nlc3NvcicsMTQ2MSk7WWNiKDE0NjAsMSxEdmUsTzBjKTtfLklmPWZ1bmN0aW9uIFAwYyhhLGIpe04wYyhKRChhLDI3KSxiKX07dmFyIFBfPWplYihGQWUsJ01pblNpemVQcmVQcm9jZXNzb3InLDE0NjApO1ljYigxNjQ3LDEsQnRlLFIwYyk7Xy5MZT1mdW5jdGlvbiBTMGMoYSxiKXtyZXR1cm4gUTBjKEpEKGEsMjcpLEpEKGIsMjcpKX07Xy5GYj1mdW5jdGlvbiBUMGMoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIFUwYygpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgUV89amViKEZBZSwnTm9kZVNpemVDb21wYXJhdG9yJywxNjQ3KTtZY2IoMTQ1NywxLER2ZSxXMGMpO18uSWY9ZnVuY3Rpb24gWDBjKGEsYil7VjBjKEpEKGEsMjcpKX07dmFyIFJfPWplYihGQWUsJ05vZGVTaXplUmVvcmRlcmVyJywxNDU3KTt2YXIgWTBjLFowYywkMGMsXzBjLGExYyxiMWMsYzFjLGQxYyxlMWMsZjFjLGcxYztZY2IoMzg1LDIzLHszOjEsMzQ6MSwyMzoxLDM4NToxfSxtMWMpO3ZhciBpMWMsajFjLGsxYzt2YXIgU189a2ViKEdBZSwnT3B0aW1pemF0aW9uR29hbCcsMzg1LE1JLG8xYyxuMWMpO3ZhciBwMWM7WWNiKDg0NCwxLEh1ZSxKMWMpO18udGY9ZnVuY3Rpb24gSzFjKGEpe1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEhBZSksJycpLCdUcnkgYm94IGxheW91dCBmaXJzdCcpLCdXaGV0aGVyIG9uZSBzaG91bGQgY2hlY2sgd2hldGhlciB0aGUgcmVnaW9ucyBhcmUgc3RhY2thYmxlIHRvIHNlZSB3aGV0aGVyIGJveCBsYXlvdXQgd291bGQgZG8gdGhlIGpvYi4gRm9yIGV4YW1wbGUsIG5vZGVzIHdpdGggdGhlIHNhbWUgaGVpZ2h0IGFyZSBub3Qgc3RhY2thYmxlIGluc2lkZSBhIHJvdy4gVGhlcmVmb3JlLCBib3ggbGF5b3V0IHdpbGwgcGVyZm9ybSBiZXR0ZXIgYW5kIGZhc3Rlci4nKSwoeGRiKCksZmFsc2UpKSwoemNkKCkscmNkKSksR0kpLG1yYigobGNkKCksamNkKSkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsSUFlKSwnJyksJ0N1cnJlbnQgcG9zaXRpb24gb2YgYSBub2RlIGluIHRoZSBvcmRlciBvZiBub2RlcycpLCdUaGUgcmVjdGFuZ2xlcyBhcmUgb3JkZXJlZC4gTm9ybWFsbHkgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmluaXRpb24gdGhlIHRoZSBtb2RlbC4gVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIGEgbm9kZS4nKSxqZmIoLTEpKSx2Y2QpLFVJKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxKQWUpLCcnKSwnRGVzaXJlZCBpbmRleCBvZiBub2RlJyksJ1RoZSByZWN0YW5nbGVzIGFyZSBvcmRlcmVkLiBOb3JtYWxseSBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5pdGlvbiB0aGUgdGhlIG1vZGVsLiBUaGlzIG9wdGlvbiBhbGxvd3MgdG8gc3BlY2lmeSBhIGRlc2lyZWQgcG9zaXRpb24gdGhhdCBoYXMgcHJlZmVyZW5jZSBvdmVyIHRoZSBvcmlnaW5hbCBwb3NpdGlvbi4nKSxqZmIoLTEpKSx2Y2QpLFVJKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxLQWUpLCcnKSwnSW4gbmV3IFJvdycpLCdJZiBzZXQgdG8gdHJ1ZSB0aGlzIG5vZGUgYmVnaW5zIGluIGEgbmV3IHJvdy4gQ29uc2VxdWVudGx5IHRoaXMgbm9kZSBjYW5ub3QgYmUgbW92ZWQgaW4gYSBwcmV2aW91cyBsYXllciBkdXJpbmcgY29tcGFjdGlvbi4gV2lkdGggYXBwcm94aW1hdGlvbiBkb2VzIGRvZXMgbm90IHRha2UgdGhpcyBpbnRvIGFjY291bnQuJyksZmFsc2UpLHJjZCksR0kpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLExBZSksJycpLCdPcmRlciBub2RlcyBieSBoZWlnaHQnKSwnSWYgc2V0IHRvIHRydWUgdGhlIG5vZGVzIHdpbGwgYmUgc29ydGVkIGJ5IHRoZWlyIGhlaWdodCBiZWZvcmUgY29tcHV0aW5nIHRoZSBsYXlvdXQuIFRoZSBoaWdoZXN0IG5vZGUgd2lsbCBiZSBpbiB0aGUgZmlyc3QgcG9zaXRpb24uJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE1BZSksVUFlKSwnV2lkdGggQXBwcm94aW1hdGlvbiBTdHJhdGVneScpLCdTdHJhdGVneSBmb3IgZmluZGluZyBhbiBpbml0aWFsIHdpZHRoIG9mIHRoZSBkcmF3aW5nLicpLEcxYyksdGNkKSxiMCksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsTkFlKSxVQWUpLCdUYXJnZXQgV2lkdGgnKSwnT3B0aW9uIHRvIHBsYWNlIHRoZSByZWN0YW5nbGVzIGluIHRoZSBnaXZlbiB0YXJnZXQgd2lkdGggaW5zdGVhZCBvZiBhcHByb3hpbWF0aW5nIHRoZSB3aWR0aCB1c2luZyB0aGUgZGVzaXJlZCBhc3BlY3QgcmF0aW8uIFRoZSBwYWRkaW5nIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzLiBNZWFuaW5nIGEgZHJhd2luZyB3aWxsIGhhdmUgd2lkdGggb2YgdGFyZ2V0d2lkdGggKyBob3Jpem9udGFsIHBhZGRpbmcuJyksLTEpLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE9BZSksVUFlKSwnT3B0aW1pemF0aW9uIEdvYWwnKSwnT3B0aW1pemF0aW9uIGdvYWwgZm9yIGFwcHJveGltYXRpb24gb2YgdGhlIGJvdW5kaW5nIGJveCBnaXZlbiBieSB0aGUgZmlyc3QgaXRlcmF0aW9uLiBEZXRlcm1pbmVzIHdoZXRoZXIgbGF5b3V0IGlzIHNvcnRlZCBieSB0aGUgbWF4aW11bSBzY2FsaW5nLCBhc3BlY3QgcmF0aW8sIG9yIGFyZWEuIERlcGVuZGluZyBvbiB0aGUgc3RyYXRlZ3kgdGhlIGFzcGVjdCByYXRpbyBtaWdodCBiZSBuZWFybHkgaWdub3JlZC4nKSxFMWMpLHRjZCksU18pLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFBBZSksVUFlKSwnU2hpZnQgTGFzdCBQbGFjZWQuJyksJ1doZW4gcGxhY2luZyBhIHJlY3RhbmdsZSBiZWhpbmQgb3IgYmVsb3cgdGhlIGxhc3QgcGxhY2VkIHJlY3RhbmdsZSBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLCBpdCBpcyBzb21ldGltZXMgcG9zc2libGUgdG8gc2hpZnQgdGhlIHJlY3RhbmdsZSBmdXJ0aGVyIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0LCByZXN1bHRpbmcgaW4gbGVzcyB3aGl0ZXNwYWNlLiBUcnVlIChkZWZhdWx0KSBlbmFibGVzIHRoZSBzaGlmdCBhbmQgZmFsc2UgZGlzYWJsZXMgaXQuIERpc2FibGluZyB0aGUgc2hpZnQgcHJvZHVjZXMgYSBncmVhdGVyIGFwcHJveGltYXRlZCBhcmVhIGJ5IHRoZSBmaXJzdCBpdGVyYXRpb24gYW5kIGEgbGF5b3V0LCB3aGVuIHVzaW5nIE9OTFkgdGhlIGZpcnN0IGl0ZXJhdGlvbiAoZGVmYXVsdCBub3QgdGhlIGNhc2UpLCB3aGVyZSBpdCBpcyBzb21ldGltZXMgaW1wb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBzaXplIHRyYW5zZm9ybWF0aW9uIG9mIHJlY3RhbmdsZXMgdGhhdCB3aWxsIGZpbGwgdGhlIGJvdW5kaW5nIGJveCBhbmQgZWxpbWluYXRlIGVtcHR5IHNwYWNlcy4nKSx0cnVlKSxyY2QpLEdJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxRQWUpLCdwYWNraW5nJyksVkFlKSwnU3RyYXRlZ3kgZm9yIGZpbmRpbmcgYW4gaW5pdGlhbCBwbGFjZW1lbnQgb24gbm9kZXMuJykseTFjKSx0Y2QpLGUwKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxSQWUpLFdBZSksJ1JvdyBIZWlnaHQgUmVldmFsdWF0aW9uJyksJ0R1cmluZyB0aGUgY29tcGFjdGlvbiBzdGVwIHRoZSBoZWlnaHQgb2YgYSByb3cgaXMgbm9ybWFsbHkgbm90IGNoYW5nZWQuIElmIHRoaXMgb3B0aW9ucyBpcyBzZXQsIHRoZSBibG9ja3Mgb2Ygb3RoZXIgcm93cyBtaWdodCBiZSBhZGRlZCBpZiB0aGV5IGV4Y2VlZCB0aGUgcm93IGhlaWdodC4gSWYgdGhpcyBpcyB0aGUgY2FzZSB0aGUgd2hvbGUgcm93IGhhcyB0byBiZSBwYWNrZWQgYWdhaW4gdG8gYmUgb3B0aW1hbCByZWdhcmRpbmcgdGhlIG5ldyByb3cgaGVpZ2h0LiBUaGlzIG9wdGlvbiBzaG91bGQsIHRoZXJlZm9yZSwgYmUgdXNlZCB3aXRoIGNhcmUgc2luY2UgaXQgbWlnaHQgYmUgY29tcHV0YXRpb24gaGVhdnkuJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFNBZSksV0FlKSwnQ29tcGFjdGlvbiBpdGVyYXRpb25zJyksJ0RlZmluZXMgdGhlIG51bWJlciBvZiBjb21wYWN0aW9uIGl0ZXJhdGlvbnMuIEUuZy4gaWYgc2V0IHRvIDIgdGhlIHdpZHRoIGlzIGluaXRpYWxseSBhcHByb3hpbWF0ZWQsIHRoZW4gdGhlIGRyYXdpbmcgaXMgY29tcGFjdGVkIGFuZCBiYXNlZCBvbiB0aGUgcmVzdWx0aW5nIGRyYXdpbmcgdGhlIHRhcmdldCB3aWR0aCBpcyBkZWNyZWFzZWQgb3IgaW5jcmVhc2VkIGFuZCBhIHNlY29uZCBjb21wYWN0aW9uIHN0ZXAgaXMgZXhlY3V0ZWQgYW5kIHRoZSByZXN1bHQgY29tcGFyZWQgdG8gdGhlIGZpcnN0IG9uZS4gVGhlIGJlc3QgcnVuIGlzIHVzZWQgYmFzZWQgb24gdGhlIHNjYWxlIG1lYXN1cmUuJyksamZiKDEpKSx2Y2QpLFVJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxUQWUpLCd3aGl0ZVNwYWNlRWxpbWluYXRpb24nKSwnV2hpdGUgU3BhY2UgQXBwcm94aW1hdGlvbiBTdHJhdGVneScpLCdTdHJhdGVneSBmb3IgZXhwYW5kaW5nIG5vZGVzIHN1Y2ggdGhhdCB3aGl0ZXNwYWNlIGluIHRoZSBwYXJlbnQgaXMgZWxpbWluYXRlZC4nKSxCMWMpLHRjZCksajApLG1yYihqY2QpKSkpO2wyYygobmV3IG0yYyxhKSl9O3ZhciByMWMsczFjLHQxYyx1MWMsdjFjLHcxYyx4MWMseTFjLHoxYyxBMWMsQjFjLEMxYyxEMWMsRTFjLEYxYyxHMWMsSDFjO3ZhciBUXz1qZWIoR0FlLCdSZWN0UGFja2luZ01ldGFEYXRhUHJvdmlkZXInLDg0NCk7WWNiKDk5MSwxLEh1ZSxtMmMpO18udGY9ZnVuY3Rpb24gbjJjKGEpe2wyYyhhKX07dmFyIEwxYyxNMWMsTjFjLE8xYyxQMWMsUTFjLFIxYyxTMWMsVDFjLFUxYyxWMWMsVzFjLFgxYyxZMWMsWjFjLCQxYyxfMWMsYTJjLGIyYyxjMmMsZDJjLGUyYyxmMmMsZzJjLGgyYyxpMmMsajJjO3ZhciBWXz1qZWIoR0FlLCdSZWN0UGFja2luZ09wdGlvbnMnLDk5MSk7WWNiKDk5MiwxLHt9LG8yYyk7Xy51Zj1mdW5jdGlvbiBwMmMoKXt2YXIgYTtyZXR1cm4gYT1uZXcgbzBjLGF9O18udmY9ZnVuY3Rpb24gcTJjKGEpe307dmFyIFVfPWplYihHQWUsJ1JlY3RQYWNraW5nT3B0aW9ucy9SZWN0cGFja2luZ0ZhY3RvcnknLDk5Mik7WWNiKDE2NDYsMSx7fSx2MmMpO18uYT0wO18uYz1mYWxzZTt2YXIgV189amViKFlBZSwnQXJlYUFwcHJveGltYXRpb24nLDE2NDYpO3ZhciBaXz1sZWIoWUFlLCdCZXN0Q2FuZGlkYXRlRmlsdGVyJyk7WWNiKDY1OCwxLHs1MjA6MX0sdzJjKTtfLkZnPWZ1bmN0aW9uIHgyYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2k9bmV3IFVsYjtmPUtzZTtmb3IoaD1uZXcgcm1iKGEpO2guYTxoLmMuYy5sZW5ndGg7KXtnPUpEKHBtYihoKSwyMzcpO2Y9JHduZC5NYXRoLm1pbihmLChnLmMrKGMuYitjLmMpKSooZy5iKyhjLmQrYy5hKSkpfWZvcihlPW5ldyBybWIoYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDIzNyk7KGQuYysoYy5iK2MuYykpKihkLmIrKGMuZCtjLmEpKT09ZiYmKFlDYihpLmMsZCksdHJ1ZSl9cmV0dXJuIGl9O3ZhciBYXz1qZWIoWUFlLCdBcmVhRmlsdGVyJyw2NTgpO1ljYig2NTksMSx7NTIwOjF9LHkyYyk7Xy5GZz1mdW5jdGlvbiB6MmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtoPW5ldyBVbGI7aT1Lc2U7Zm9yKGc9bmV3IHJtYihhKTtnLmE8Zy5jLmMubGVuZ3RoOyl7Zj1KRChwbWIoZyksMjM3KTtpPSR3bmQuTWF0aC5taW4oaSwkd25kLk1hdGguYWJzKChmLmMrKGMuYitjLmMpKS8oZi5iKyhjLmQrYy5hKSktYikpfWZvcihlPW5ldyBybWIoYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDIzNyk7JHduZC5NYXRoLmFicygoZC5jKyhjLmIrYy5jKSkvKGQuYisoYy5kK2MuYSkpLWIpPT1pJiYoWUNiKGguYyxkKSx0cnVlKX1yZXR1cm4gaH07dmFyIFlfPWplYihZQWUsJ0FzcGVjdFJhdGlvRmlsdGVyJyw2NTkpO1ljYigxNDA4LDEsZ3plLEQyYyk7Xy5wZz1mdW5jdGlvbiBFMmMoYSl7cmV0dXJuIEpEKGEsMjcpLG51bGx9O18uSWY9ZnVuY3Rpb24gRjJjKGEsYil7QzJjKEpEKGEsMjcpLGIpfTt2YXIgJF89amViKFlBZSwnR3JlZWR5V2lkdGhBcHByb3hpbWF0b3InLDE0MDgpO1ljYig2NTcsMSx7NTIwOjF9LEcyYyk7Xy5GZz1mdW5jdGlvbiBIMmMoYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtpPW5ldyBVbGI7Zj1Mc2U7Zm9yKGg9bmV3IHJtYihhKTtoLmE8aC5jLmMubGVuZ3RoOyl7Zz1KRChwbWIoaCksMjM3KTtmPSR3bmQuTWF0aC5tYXgoZixRNGMoZy5jKyhjLmIrYy5jKSxnLmIrKGMuZCtjLmEpLGcuYSkpfWZvcihlPW5ldyBybWIoYSk7ZS5hPGUuYy5jLmxlbmd0aDspe2Q9SkQocG1iKGUpLDIzNyk7UTRjKGQuYysoYy5iK2MuYyksZC5iKyhjLmQrYy5hKSxkLmEpPT1mJiYoWUNiKGkuYyxkKSx0cnVlKX1yZXR1cm4gaX07dmFyIF9fPWplYihZQWUsJ1NjYWxlTWVhc3VyZUZpbHRlcicsNjU3KTtZY2IoMTQwOSwxLGd6ZSxKMmMpO18ucGc9ZnVuY3Rpb24gSzJjKGEpe3JldHVybiBKRChhLDI3KSxudWxsfTtfLklmPWZ1bmN0aW9uIEwyYyhhLGIpe0kyYyhKRChhLDI3KSxiKX07dmFyIGEwPWplYihZQWUsJ1RhcmdldFdpZHRoV2lkdGhBcHByb3hpbWF0b3InLDE0MDkpO1ljYig0NzYsMjMsezM6MSwzNDoxLDIzOjEsNDc2OjEsMTg4OjEsMTk2OjF9LFEyYyk7Xy5iZz1mdW5jdGlvbiBTMmMoKXtyZXR1cm4gUDJjKHRoaXMpfTtfLm9nPWZ1bmN0aW9uIFIyYygpe3JldHVybiBQMmModGhpcyl9O3ZhciBNMmMsTjJjO3ZhciBiMD1rZWIoWUFlLCdXaWR0aEFwcHJveGltYXRpb25TdHJhdGVneScsNDc2LE1JLFUyYyxUMmMpO3ZhciBWMmM7WWNiKDE0MTAsMSxnemUsZTNjKTtfLnBnPWZ1bmN0aW9uIGYzYyhhKXtyZXR1cm4gSkQoYSwyNyksbnVsbH07Xy5JZj1mdW5jdGlvbiBnM2MoYSxiKXtkM2ModGhpcyxKRChhLDI3KSxiKX07dmFyIGMwPWplYihaQWUsJ0NvbXBhY3RvcicsMTQxMCk7WWNiKDE0MTIsMSxnemUsazNjKTtfLnBnPWZ1bmN0aW9uIGwzYyhhKXtyZXR1cm4gSkQoYSwyNyksbnVsbH07Xy5JZj1mdW5jdGlvbiBtM2MoYSxiKXtqM2MoSkQoYSwyNyksYil9O3ZhciBkMD1qZWIoWkFlLCdOb1BsYWNlbWVudCcsMTQxMik7WWNiKDQyNiwyMyx7MzoxLDM0OjEsMjM6MSw0MjY6MSwxODg6MSwxOTY6MX0sczNjKTtfLmJnPWZ1bmN0aW9uIHUzYygpe3JldHVybiByM2ModGhpcyl9O18ub2c9ZnVuY3Rpb24gdDNjKCl7cmV0dXJuIHIzYyh0aGlzKX07dmFyIG4zYyxvM2MscDNjO3ZhciBlMD1rZWIoWkFlLCdQYWNraW5nU3RyYXRlZ3knLDQyNixNSSx3M2MsdjNjKTt2YXIgeDNjO1ljYig3OTAsMSx7fSxCM2MpO18uYT0wO18uYj0wO18uYz0wO18uZD1Lc2U7Xy5lPTA7Xy5mPUtzZTt2YXIgZjA9amViKFpBZSwnUm93RmlsbGluZ0FuZENvbXBhY3Rpb24nLDc5MCk7WWNiKDE0MTEsMSxnemUsRDNjKTtfLnBnPWZ1bmN0aW9uIEUzYyhhKXtyZXR1cm4gSkQoYSwyNyksbnVsbH07Xy5JZj1mdW5jdGlvbiBGM2MoYSxiKXtDM2MoSkQoYSwyNyksYil9O3ZhciBnMD1qZWIoWkFlLCdTaW1wbGVQbGFjZW1lbnQnLDE0MTEpO1ljYigxNDEzLDEsZ3plLEgzYyk7Xy5wZz1mdW5jdGlvbiBJM2MoYSl7cmV0dXJuIEpEKGEsMjcpLG51bGx9O18uSWY9ZnVuY3Rpb24gSjNjKGEsYil7dGhpcy5HZyhKRChhLDI3KSxiKX07Xy5HZz1mdW5jdGlvbiBLM2MoYSxiKXtHM2MoYSxiKX07dmFyIGgwPWplYihfQWUsJ0VxdWFsV2hpdGVzcGFjZUVsaW1pbmF0b3InLDE0MTMpO1ljYigxNDE0LDE0MTMsZ3plLE0zYyk7Xy5HZz1mdW5jdGlvbiBOM2MoYSxiKXt2YXIgYyxkLGUsZixnO2IuU2coJ1RvIEFzcGVjdCBSYXRpbyBXaGl0ZXNhcGNlIEVsaW1pbmF0b3InLDEpO2c9QmViKE1EKGtzZChhLChoMWMoKSwkMGMpKSkpO2Y9QmViKE1EKGtzZChhLFowYykpKTtlPUJlYihNRChrc2QoYSwoazJjKCksTDFjKSkpKTtjPUJlYihNRChrc2QoYSxZMGMpKSk7ZD1nL2Y7aWYoZDxlKXtnPWYqZTttc2QoYSwkMGMsZyl9ZWxzZXtjKz1nL2UtZjttc2QoYSxZMGMsYyk7bXNkKGEsWjBjLGYrYyl9RzNjKGEsYik7Yi5UZygpfTt2YXIgaTA9amViKF9BZSwnVG9Bc3BlY3RyYXRpb05vZGVFeHBhbmRlcicsMTQxNCk7WWNiKDQyNywyMyx7MzoxLDM0OjEsMjM6MSw0Mjc6MSwxODg6MSwxOTY6MX0sVDNjKTtfLmJnPWZ1bmN0aW9uIFYzYygpe3JldHVybiBTM2ModGhpcyl9O18ub2c9ZnVuY3Rpb24gVTNjKCl7cmV0dXJuIFMzYyh0aGlzKX07dmFyIE8zYyxQM2MsUTNjO3ZhciBqMD1rZWIoX0FlLCdXaGl0ZVNwYWNlRWxpbWluYXRpb25TdHJhdGVneScsNDI3LE1JLFgzYyxXM2MpO3ZhciBZM2M7WWNiKDE3MiwxLHsxNzI6MX0sajRjKTtfLmE9MDtfLmM9ZmFsc2U7Xy5kPTA7Xy5lPTA7Xy5mPTA7Xy5nPTA7Xy5pPTA7Xy5rPWZhbHNlO18ubz1Lc2U7Xy5wPUtzZTtfLnI9MDtfLnM9MDtfLnQ9MDt2YXIgbTA9amViKGFCZSwnQmxvY2snLDE3Mik7WWNiKDIwOCwxLHsyMDg6MX0scDRjKTtfLmE9MDtfLmI9MDtfLmQ9MDtfLmU9MDtfLmY9MDt2YXIgazA9amViKGFCZSwnQmxvY2tSb3cnLDIwOCk7WWNiKDMxNiwxLHszMTY6MX0seDRjKTtfLmI9MDtfLmM9MDtfLmQ9MDtfLmU9MDtfLmY9MDt2YXIgbDA9amViKGFCZSwnQmxvY2tTdGFjaycsMzE2KTtZY2IoMjM3LDEsezIzNzoxfSxCNGMsQzRjKTtfLmE9MDtfLmI9MDtfLmM9MDtfLmQ9MDtfLmU9MDtfLmc9MDt2YXIgbzA9amViKGFCZSwnRHJhd2luZ0RhdGEnLDIzNyk7WWNiKDM2NiwyMyx7MzoxLDM0OjEsMjM6MSwzNjY6MX0sSjRjKTt2YXIgRDRjLEU0YyxGNGMsRzRjLEg0Yzt2YXIgbjA9a2ViKGFCZSwnRHJhd2luZ0RhdGFEZXNjcmlwdG9yJywzNjYsTUksTDRjLEs0Yyk7dmFyIE00YztZY2IoMTg2LDEsezE4NjoxfSxYNGMpO18uYj0wO18uYz0wO18uZT0wO18uZj0wO3ZhciBwMD1qZWIoYUJlLCdSZWN0Um93JywxODYpO1ljYig3NDUsMSx7fSxkNWMpO18uaj0wO3ZhciB2MD1qZWIoY0JlLFN2ZSw3NDUpO1ljYigxMTY5LDEse30sZTVjKTtfLiRlPWZ1bmN0aW9uIGY1YyhhKXtyZXR1cm4gcGRkKGEuYSxhLmIpfTt2YXIgcTA9amViKGNCZSxzdWUsMTE2OSk7WWNiKDExNzAsMSx7fSxnNWMpO18uJGU9ZnVuY3Rpb24gaDVjKGEpe3JldHVybiAkNGModGhpcy5hLGEpfTt2YXIgcjA9amViKGNCZSxUdmUsMTE3MCk7WWNiKDExNzEsMSx7fSxpNWMpO18uJGU9ZnVuY3Rpb24gajVjKGEpe3JldHVybiBfNGModGhpcy5hLGEpfTt2YXIgczA9amViKGNCZSxVdmUsMTE3MSk7WWNiKDExNzIsMSx7fSxrNWMpO18uJGU9ZnVuY3Rpb24gbDVjKGEpe3JldHVybiBhNWModGhpcy5hLGEpfTt2YXIgdDA9amViKGNCZSwnRWxrR3JhcGhJbXBvcnRlci9sYW1iZGEkMyRUeXBlJywxMTcyKTtZY2IoMTE3MywxLHt9LG01Yyk7Xy4kZT1mdW5jdGlvbiBuNWMoYSl7cmV0dXJuIGI1Yyh0aGlzLmEsYSl9O3ZhciB1MD1qZWIoY0JlLFZ2ZSwxMTczKTtZY2IoMTA3OSwyMjIsdHVlLG81Yyk7Xy5rZj1mdW5jdGlvbiBxNWMoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG47aWYobHNkKGEsKEQ2YygpLEM2YykpKXtuPU9EKGtzZChhLChoN2MoKSxnN2MpKSk7Zj1IYWQoTmFkKCksbik7aWYoZil7Zz1KRChWbmQoZi5mKSwyMjIpO2cua2YoYSxiLmJoKDEpKX19bXNkKGEseDZjLChhNmMoKSwkNWMpKTttc2QoYSx5NmMsKGw2YygpLGk2YykpO21zZChhLHo2YywoQTdjKCksejdjKSk7aD1KRChrc2QoYSwoaDdjKCksYzdjKSksMTcpLmE7Yi5TZygnT3ZlcmxhcCByZW1vdmFsJywxKTt5ZGIoTEQoa3NkKGEsYjdjKSkpJiYnbnVsbDQ1c2NhbmxpbmVPdmVybGFwcyc7aT1uZXcgUXJiO2o9bmV3IHM1YyhpKTtkPW5ldyBkNWM7Yz1aNGMoZCxhKTtrPXRydWU7ZT0wO3doaWxlKGU8aCYmayl7aWYoeWRiKExEKGtzZChhLGQ3YykpKSl7aS5hLiRiKCk7ZE1iKG5ldyBlTWIoaiksYy5pKTtpZihpLmEuZ2MoKT09MCl7YnJlYWt9Yy5lPWl9ZjljKHRoaXMuYik7aTljKHRoaXMuYiwodzVjKCksdDVjKSwocDdjKCksbzdjKSk7aTljKHRoaXMuYix1NWMsYy5nKTtpOWModGhpcy5iLHY1YywoUzVjKCksUjVjKSk7dGhpcy5hPWQ5Yyh0aGlzLmIsYyk7Zm9yKG09bmV3IHJtYih0aGlzLmEpO20uYTxtLmMuYy5sZW5ndGg7KXtsPUpEKHBtYihtKSw0NCk7bC5JZihjLGIuYmgoMSkpfWM1YyhkLGMpO2s9eWRiKExEKFdNYihjLChZTGIoKSxYTGIpKSkpOysrZX1ZNGMoZCxjKTtiLlRnKCl9O3ZhciB4MD1qZWIoY0JlLCdPdmVybGFwUmVtb3ZhbExheW91dFByb3ZpZGVyJywxMDc5KTtZY2IoMTA4MCwxLHt9LHM1Yyk7dmFyIHcwPWplYihjQmUsJ092ZXJsYXBSZW1vdmFsTGF5b3V0UHJvdmlkZXIvbGFtYmRhJDAkVHlwZScsMTA4MCk7WWNiKDQzMiwyMyx7MzoxLDM0OjEsMjM6MSw0MzI6MX0seDVjKTt2YXIgdDVjLHU1Yyx2NWM7dmFyIHkwPWtlYihjQmUsJ1NQT3JFUGhhc2VzJyw0MzIsTUksejVjLHk1Yyk7dmFyIEE1YztZY2IoMTE3OSwxLHt9LEQ1Yyk7dmFyIEEwPWplYihjQmUsJ1Nocmlua1RyZWUnLDExNzkpO1ljYigxMDgxLDIyMix0dWUsRTVjKTtfLmtmPWZ1bmN0aW9uIEY1YyhhLGIpe3ZhciBjLGQsZSxmLGc7aWYobHNkKGEsKEQ2YygpLEM2YykpKXtnPU9EKGtzZChhLEM2YykpO2U9SGFkKE5hZCgpLGcpO2lmKGUpe2Y9SkQoVm5kKGUuZiksMjIyKTtmLmtmKGEsYi5iaCgxKSl9fWQ9bmV3IGQ1YztjPVo0YyhkLGEpO0M1Yyh0aGlzLmEsYyxiLmJoKDEpKTtZNGMoZCxjKX07dmFyIHowPWplYihjQmUsJ1Nocmlua1RyZWVMYXlvdXRQcm92aWRlcicsMTA4MSk7WWNiKDMwNywxNDgsezM6MSwzMDc6MSwxMDI6MSwxNDg6MX0sRzVjKTtfLmM9ZmFsc2U7dmFyIEIwPWplYignb3JnLmVjbGlwc2UuZWxrLmFsZy5zcG9yZS5ncmFwaCcsJ0dyYXBoJywzMDcpO1ljYig0NzUsMjMsezM6MSwzNDoxLDIzOjEsNDc1OjEsMTg4OjEsMTk2OjF9LEs1Yyk7Xy5iZz1mdW5jdGlvbiBNNWMoKXtyZXR1cm4gSjVjKHRoaXMpfTtfLm9nPWZ1bmN0aW9uIEw1Yygpe3JldHVybiBKNWModGhpcyl9O3ZhciBINWM7dmFyIEMwPWtlYihkQmUsakFlLDQ3NSxNSSxPNWMsTjVjKTt2YXIgUDVjO1ljYig1NDMsMjMsezM6MSwzNDoxLDIzOjEsNTQzOjEsMTg4OjEsMTk2OjF9LFQ1Yyk7Xy5iZz1mdW5jdGlvbiBWNWMoKXtyZXR1cm4gbmV3IGc4Y307Xy5vZz1mdW5jdGlvbiBVNWMoKXtyZXR1cm4gbmV3IGc4Y307dmFyIFI1Yzt2YXIgRDA9a2ViKGRCZSwnT3ZlcmxhcFJlbW92YWxTdHJhdGVneScsNTQzLE1JLFg1YyxXNWMpO3ZhciBZNWM7WWNiKDQyNSwyMyx7MzoxLDM0OjEsMjM6MSw0MjU6MX0sYjZjKTt2YXIgJDVjLF81Yzt2YXIgRTA9a2ViKGRCZSwnUm9vdFNlbGVjdGlvbicsNDI1LE1JLGQ2YyxjNmMpO3ZhciBlNmM7WWNiKDMyNSwyMyx7MzoxLDM0OjEsMjM6MSwzMjU6MX0sbTZjKTt2YXIgZzZjLGg2YyxpNmMsajZjLGs2Yzt2YXIgRjA9a2ViKGRCZSwnU3Bhbm5pbmdUcmVlQ29zdEZ1bmN0aW9uJywzMjUsTUksbzZjLG42Yyk7dmFyIHA2YztZY2IoOTg5LDEsSHVlLEY2Yyk7Xy50Zj1mdW5jdGlvbiBHNmMoYSl7RTZjKGEpfTt2YXIgcjZjLHM2Yyx0NmMsdTZjLHY2Yyx3NmMseDZjLHk2Yyx6NmMsQTZjLEI2YyxDNmM7dmFyIEgwPWplYihkQmUsJ1Nwb3JlQ29tcGFjdGlvbk9wdGlvbnMnLDk4OSk7WWNiKDk5MCwxLHt9LEg2Yyk7Xy51Zj1mdW5jdGlvbiBJNmMoKXt2YXIgYTtyZXR1cm4gYT1uZXcgRTVjLGF9O18udmY9ZnVuY3Rpb24gSjZjKGEpe307dmFyIEcwPWplYihkQmUsJ1Nwb3JlQ29tcGFjdGlvbk9wdGlvbnMvU3BvcmVDb21wYWN0aW9uRmFjdG9yeScsOTkwKTtZY2IoODQzLDEsSHVlLF82Yyk7Xy50Zj1mdW5jdGlvbiBhN2MoYSl7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxmQmUpLCcnKSwnVW5kZXJseWluZyBMYXlvdXQgQWxnb3JpdGhtJyksJ0EgbGF5b3V0IGFsZ29yaXRobSB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIGdyYXBoIGJlZm9yZSBpdCBpcyBjb21wYWN0ZWQuIElmIHRoaXMgaXMgbnVsbCwgbm90aGluZyBpcyBhcHBsaWVkIGJlZm9yZSBjb21wYWN0aW9uLicpLCh6Y2QoKSx4Y2QpKSxoSiksbXJiKChsY2QoKSxqY2QpKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxrQmUpLCdzdHJ1Y3R1cmUnKSwnU3RydWN0dXJlIEV4dHJhY3Rpb24gU3RyYXRlZ3knKSwnVGhpcyBvcHRpb24gZGVmaW5lcyB3aGF0IGtpbmQgb2YgdHJpYW5ndWxhdGlvbiBvciBvdGhlciBwYXJ0aXRpb25pbmcgb2YgdGhlIHBsYW5lIGlzIGFwcGxpZWQgdG8gdGhlIHZlcnRpY2VzLicpLFk2YyksdGNkKSxMMCksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsZ0JlKSxwQmUpLCdUcmVlIENvbnN0cnVjdGlvbiBTdHJhdGVneScpLCdXaGV0aGVyIGEgbWluaW11bSBzcGFubmluZyB0cmVlIG9yIGEgbWF4aW11bSBzcGFubmluZyB0cmVlIHNob3VsZCBiZSBjb25zdHJ1Y3RlZC4nKSxXNmMpLHRjZCksTTApLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGhCZSkscEJlKSwnQ29zdCBGdW5jdGlvbiBmb3IgU3Bhbm5pbmcgVHJlZScpLCdUaGUgY29zdCBmdW5jdGlvbiBpcyB1c2VkIGluIHRoZSBjcmVhdGlvbiBvZiB0aGUgc3Bhbm5pbmcgdHJlZS4nKSxVNmMpLHRjZCksRjApLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGlCZSkscEJlKSwnUm9vdCBub2RlIGZvciBzcGFubmluZyB0cmVlIGNvbnN0cnVjdGlvbicpLCdUaGUgaWRlbnRpZmllciBvZiB0aGUgbm9kZSB0aGF0IGlzIHByZWZlcnJlZCBhcyB0aGUgcm9vdCBvZiB0aGUgc3Bhbm5pbmcgdHJlZS4gSWYgdGhpcyBpcyBudWxsLCB0aGUgZmlyc3Qgbm9kZSBpcyBjaG9zZW4uJyksbnVsbCkseGNkKSxoSiksbXJiKGpjZCkpKSk7T2FkKGEsaUJlLGpCZSxRNmMpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGpCZSkscEJlKSwnUm9vdCBzZWxlY3Rpb24gZm9yIHNwYW5uaW5nIHRyZWUnKSwnVGhpcyBzZXRzIHRoZSBtZXRob2QgdXNlZCB0byBzZWxlY3QgYSByb290IG5vZGUgZm9yIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYSBzcGFubmluZyB0cmVlJyksUzZjKSx0Y2QpLEUwKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxsQmUpLGR5ZSksVkFlKSwnVGhpcyBvcHRpb24gZGVmaW5lcyBob3cgdGhlIGNvbXBhY3Rpb24gaXMgYXBwbGllZC4nKSxMNmMpLHRjZCksQzApLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLG1CZSksZHllKSwnT3J0aG9nb25hbCBDb21wYWN0aW9uJyksJ1Jlc3RyaWN0cyB0aGUgdHJhbnNsYXRpb24gb2Ygbm9kZXMgdG8gb3J0aG9nb25hbCBkaXJlY3Rpb25zIGluIHRoZSBjb21wYWN0aW9uIHBoYXNlLicpLCh4ZGIoKSxmYWxzZSkpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLG5CZSkscUJlKSwnVXBwZXIgbGltaXQgZm9yIGl0ZXJhdGlvbnMgb2Ygb3ZlcmxhcCByZW1vdmFsJyksbnVsbCksamZiKDY0KSksdmNkKSxVSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2Qsb0JlKSxxQmUpLCdXaGV0aGVyIHRvIHJ1biBhIHN1cHBsZW1lbnRhcnkgc2NhbmxpbmUgb3ZlcmxhcCBjaGVjay4nKSxudWxsKSx0cnVlKSxyY2QpLEdJKSxtcmIoamNkKSkpKTtpN2MoKG5ldyBqN2MsYSkpO0U2YygobmV3IEY2YyxhKSl9O3ZhciBLNmMsTDZjLE02YyxONmMsTzZjLFA2YyxRNmMsUjZjLFM2YyxUNmMsVTZjLFY2YyxXNmMsWDZjLFk2YyxaNmM7dmFyIEkwPWplYihkQmUsJ1Nwb3JlTWV0YURhdGFQcm92aWRlcicsODQzKTtZY2IoOTg3LDEsSHVlLGo3Yyk7Xy50Zj1mdW5jdGlvbiBrN2MoYSl7aTdjKGEpfTt2YXIgYjdjLGM3YyxkN2MsZTdjLGY3YyxnN2M7dmFyIEswPWplYihkQmUsJ1Nwb3JlT3ZlcmxhcFJlbW92YWxPcHRpb25zJyw5ODcpO1ljYig5ODgsMSx7fSxsN2MpO18udWY9ZnVuY3Rpb24gbTdjKCl7dmFyIGE7cmV0dXJuIGE9bmV3IG81YyxhfTtfLnZmPWZ1bmN0aW9uIG43YyhhKXt9O3ZhciBKMD1qZWIoZEJlLCdTcG9yZU92ZXJsYXBSZW1vdmFsT3B0aW9ucy9TcG9yZU92ZXJsYXBGYWN0b3J5Jyw5ODgpO1ljYig1MjQsMjMsezM6MSwzNDoxLDIzOjEsNTI0OjEsMTg4OjEsMTk2OjF9LHI3Yyk7Xy5iZz1mdW5jdGlvbiB0N2MoKXtyZXR1cm4gcTdjKHRoaXMpfTtfLm9nPWZ1bmN0aW9uIHM3Yygpe3JldHVybiBxN2ModGhpcyl9O3ZhciBvN2M7dmFyIEwwPWtlYihkQmUsJ1N0cnVjdHVyZUV4dHJhY3Rpb25TdHJhdGVneScsNTI0LE1JLHY3Yyx1N2MpO3ZhciB3N2M7WWNiKDQyNCwyMyx7MzoxLDM0OjEsMjM6MSw0MjQ6MSwxODg6MSwxOTY6MX0sQzdjKTtfLmJnPWZ1bmN0aW9uIEU3Yygpe3JldHVybiBCN2ModGhpcyl9O18ub2c9ZnVuY3Rpb24gRDdjKCl7cmV0dXJuIEI3Yyh0aGlzKX07dmFyIHk3Yyx6N2M7dmFyIE0wPWtlYihkQmUsJ1RyZWVDb25zdHJ1Y3Rpb25TdHJhdGVneScsNDI0LE1JLEc3YyxGN2MpO3ZhciBIN2M7WWNiKDE0MDIsMSxnemUsSzdjKTtfLnBnPWZ1bmN0aW9uIEw3YyhhKXtyZXR1cm4gSkQoYSwzMDcpLG5ldyBKOWN9O18uSWY9ZnVuY3Rpb24gTTdjKGEsYil7SjdjKEpEKGEsMzA3KSxiKX07dmFyIE8wPWplYihzQmUsJ0RlbGF1bmF5VHJpYW5ndWxhdGlvblBoYXNlJywxNDAyKTtZY2IoMTQwMywxLGtyZSxON2MpO18uQWQ9ZnVuY3Rpb24gTzdjKGEpe0lsYih0aGlzLmEsSkQoYSw2OCkuYSl9O3ZhciBOMD1qZWIoc0JlLCdEZWxhdW5heVRyaWFuZ3VsYXRpb25QaGFzZS9sYW1iZGEkMCRUeXBlJywxNDAzKTtZY2IoNzc0LDEsZ3plLFM3Yyk7Xy5wZz1mdW5jdGlvbiBUN2MoYSl7cmV0dXJuIEpEKGEsMzA3KSxuZXcgSjljfTtfLklmPWZ1bmN0aW9uIFU3YyhhLGIpe3RoaXMuSGcoSkQoYSwzMDcpLGIpfTtfLkhnPWZ1bmN0aW9uIFY3YyhhLGIpe3ZhciBjLGQsZTtiLlNnKCdNaW5pbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uJywxKTthLmQ/KGQ9YS5kLmEpOihkPUpEKE1sYihhLmksMCksNjgpLmEpO3lkYihMRChXTWIoYSwoWUxiKCksV0xiKSkpKT8oZT1LRGIoYS5lLGQsKGM9YS5iLGMpKSk6KGU9S0RiKGEuZSxkLGEuYikpO1E3Yyh0aGlzLGUsYSk7Yi5UZygpfTt2YXIgUzA9amViKHRCZSwnTWluU1RQaGFzZScsNzc0KTtZY2IoMTQwNSw3NzQsZ3plLFc3Yyk7Xy5IZz1mdW5jdGlvbiBZN2MoYSxiKXt2YXIgYyxkLGUsZjtiLlNnKCdNYXhpbXVtIHNwYW5uaW5nIHRyZWUgY29uc3RydWN0aW9uJywxKTtjPW5ldyBaN2MoYSk7YS5kPyhlPWEuZC5jKTooZT1KRChNbGIoYS5pLDApLDY4KS5jKTt5ZGIoTEQoV01iKGEsKFlMYigpLFdMYikpKSk/KGY9S0RiKGEuZSxlLChkPWMsZCkpKTooZj1LRGIoYS5lLGUsYykpO1E3Yyh0aGlzLGYsYSk7Yi5UZygpfTt2YXIgUTA9amViKHRCZSwnTWF4U1RQaGFzZScsMTQwNSk7WWNiKDE0MDYsMSx7fSxaN2MpO18uJGU9ZnVuY3Rpb24gJDdjKGEpe3JldHVybiBYN2ModGhpcy5hLGEpfTt2YXIgUDA9amViKHRCZSwnTWF4U1RQaGFzZS9sYW1iZGEkMCRUeXBlJywxNDA2KTtZY2IoMTQwNCwxLGtyZSxfN2MpO18uQWQ9ZnVuY3Rpb24gYThjKGEpe1I3Yyh0aGlzLmEsSkQoYSw2OCkpfTt2YXIgUjA9amViKHRCZSwnTWluU1RQaGFzZS9sYW1iZGEkMCRUeXBlJywxNDA0KTtZY2IoNzc2LDEsZ3plLGc4Yyk7Xy5wZz1mdW5jdGlvbiBoOGMoYSl7cmV0dXJuIEpEKGEsMzA3KSxuZXcgSjljfTtfLklmPWZ1bmN0aW9uIGk4YyhhLGIpe2Y4Yyh0aGlzLEpEKGEsMzA3KSxiKX07Xy5hPWZhbHNlO3ZhciBVMD1qZWIodUJlLCdHcm93VHJlZVBoYXNlJyw3NzYpO1ljYig3NzcsMSxrcmUsajhjKTtfLkFkPWZ1bmN0aW9uIGs4YyhhKXtlOGModGhpcy5hLHRoaXMuYix0aGlzLmMsSkQoYSwyMjQpKX07dmFyIFQwPWplYih1QmUsJ0dyb3dUcmVlUGhhc2UvbGFtYmRhJDAkVHlwZScsNzc3KTtZY2IoMTQwNywxLGd6ZSxvOGMpO18ucGc9ZnVuY3Rpb24gcDhjKGEpe3JldHVybiBKRChhLDMwNyksbmV3IEo5Y307Xy5JZj1mdW5jdGlvbiBxOGMoYSxiKXtuOGModGhpcyxKRChhLDMwNyksYil9O3ZhciBXMD1qZWIodUJlLCdTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlJywxNDA3KTtZY2IoNzc1LDEsa3JlLHI4Yyk7Xy5BZD1mdW5jdGlvbiBzOGMoYSl7bThjKHRoaXMuYSx0aGlzLmIsdGhpcy5jLEpEKGEsMjI0KSl9O3ZhciBWMD1qZWIodUJlLCdTaHJpbmtUcmVlQ29tcGFjdGlvblBoYXNlL2xhbWJkYSQwJFR5cGUnLDc3NSk7dmFyIGIzPWxlYihjemUsJ0lHcmFwaEVsZW1lbnRWaXNpdG9yJyk7WWNiKDg0OCwxLHs1MjE6MX0sQjhjKTtfLklnPWZ1bmN0aW9uIEU4YyhhKXt2YXIgYjtiPUE4Yyh0aGlzLGEpO1VNYihiLEpEKE5pYih0aGlzLmIsYSksMTAyKSk7eThjKHRoaXMsYSxiKX07dmFyIHQ4Yyx1OGMsdjhjO3ZhciBiMT1qZWIodXVlLCdMYXlvdXRDb25maWd1cmF0b3InLDg0OCk7dmFyIFkwPWxlYih1dWUsJ0xheW91dENvbmZpZ3VyYXRvci9JUHJvcGVydHlIb2xkZXJPcHRpb25GaWx0ZXInKTtZY2IoOTIyLDEsezE5Nzg6MX0sRjhjKTtfLkpnPWZ1bmN0aW9uIEc4YyhhLGIpe3JldHVybiB3OGMoKSwhYS5uZihiKX07dmFyIFowPWplYih1dWUsJ0xheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMCRUeXBlJyw5MjIpO1ljYig5MjMsMSx7MTk3ODoxfSxJOGMpO18uSmc9ZnVuY3Rpb24gSjhjKGEsYil7cmV0dXJuIEg4YyhhLGIpfTt2YXIgJDA9amViKHV1ZSwnTGF5b3V0Q29uZmlndXJhdG9yL2xhbWJkYSQxJFR5cGUnLDkyMyk7WWNiKDkyMSwxLHs4MjQ6MX0sSzhjKTtfLktnPWZ1bmN0aW9uIEw4YyhhLGIpe3JldHVybiB3OGMoKSwhYS5uZihiKX07dmFyIF8wPWplYih1dWUsJ0xheW91dENvbmZpZ3VyYXRvci9sYW1iZGEkMiRUeXBlJyw5MjEpO1ljYig5MjQsMSxJcmUsTThjKTtfLk1iPWZ1bmN0aW9uIE44YyhhKXtyZXR1cm4gRDhjKHRoaXMuYSx0aGlzLmIsSkQoYSwxOTc4KSl9O3ZhciBhMT1qZWIodXVlLCdMYXlvdXRDb25maWd1cmF0b3IvbGFtYmRhJDMkVHlwZScsOTI0KTtZY2IoODQ2LDEse30sVzhjKTt2YXIgYzE9amViKHV1ZSwnUmVjdXJzaXZlR3JhcGhMYXlvdXRFbmdpbmUnLDg0Nik7WWNiKDIyMyw2MyxOcmUsWDhjLFk4Yyk7dmFyIGQxPWplYih1dWUsJ1Vuc3VwcG9ydGVkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbicsMjIzKTtZY2IoMzYzLDYzLE5yZSxaOGMpO3ZhciBlMT1qZWIodXVlLCdVbnN1cHBvcnRlZEdyYXBoRXhjZXB0aW9uJywzNjMpO1ljYig3NDQsMSx7fSk7dmFyIEYyPWplYihjemUsJ0Fic3RyYWN0UmFuZG9tTGlzdEFjY2Vzc29yJyw3NDQpO1ljYig0MzgsNzQ0LHt9LGo5Yyk7Xy5MZz1mdW5jdGlvbiBsOWMoKXtyZXR1cm4gbnVsbH07Xy5kPXRydWU7Xy5lPXRydWU7Xy5mPTA7dmFyIGsxPWplYih4QmUsJ0FsZ29yaXRobUFzc2VtYmxlcicsNDM4KTtZY2IoMTE2NCwxLElyZSxtOWMpO18uTWI9ZnVuY3Rpb24gbjljKGEpe3JldHVybiAhIUpEKGEsMTA2KX07dmFyIGYxPWplYih4QmUsJ0FsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMCRUeXBlJywxMTY0KTtZY2IoMTE2NSwxLHt9LG85Yyk7Xy5LYj1mdW5jdGlvbiBwOWMoYSl7cmV0dXJuIGs5Yyh0aGlzLmEsSkQoYSwxMDYpKX07dmFyIGcxPWplYih4QmUsJ0FsZ29yaXRobUFzc2VtYmxlci9sYW1iZGEkMSRUeXBlJywxMTY1KTtZY2IoMTE2NiwxLElyZSxxOWMpO18uTWI9ZnVuY3Rpb24gcjljKGEpe3JldHVybiAhIUpEKGEsNzgpfTt2YXIgaDE9amViKHhCZSwnQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQyJFR5cGUnLDExNjYpO1ljYigxMTY3LDEsa3JlLHM5Yyk7Xy5BZD1mdW5jdGlvbiB0OWMoYSl7RDljKHRoaXMuYSxKRChhLDc4KSl9O3ZhciBpMT1qZWIoeEJlLCdBbGdvcml0aG1Bc3NlbWJsZXIvbGFtYmRhJDMkVHlwZScsMTE2Nyk7WWNiKDExNjgsMSxrcmUsdTljKTtfLkFkPWZ1bmN0aW9uIHY5YyhhKXtlOWModGhpcy5hLHRoaXMuYixKRChhLDE5NikpfTt2YXIgajE9amViKHhCZSwnQWxnb3JpdGhtQXNzZW1ibGVyL2xhbWJkYSQ0JFR5cGUnLDExNjgpO1ljYigxMjg0LDEsQnRlLHg5Yyk7Xy5MZT1mdW5jdGlvbiB5OWMoYSxiKXtyZXR1cm4gdzljKEpEKGEsMTk2KSxKRChiLDE5NikpfTtfLkZiPWZ1bmN0aW9uIHo5YyhhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24gQTljKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBsMT1qZWIoeEJlLCdFbnVtQmFzZWRGYWN0b3J5Q29tcGFyYXRvcicsMTI4NCk7WWNiKDc4LDc0NCx7Nzg6MX0sSjljKTtfLkxnPWZ1bmN0aW9uIEw5Yygpe3JldHVybiBuZXcgUXJifTtfLmE9MDt2YXIgbTE9amViKHhCZSwnTGF5b3V0UHJvY2Vzc29yQ29uZmlndXJhdGlvbicsNzgpO1ljYihWcmUsMSx7NTIxOjF9LFE5Yyk7Xy5JZz1mdW5jdGlvbiBVOWMoYSl7cHViKE45YyxuZXcgWjljKGEpKX07dmFyIE05YyxOOWMsTzljO3ZhciBxMT1qZWIoQXVlLCdEZXByZWNhdGVkTGF5b3V0T3B0aW9uUmVwbGFjZXInLFZyZSk7WWNiKDEwMDEsMSxrcmUsVjljKTtfLkFkPWZ1bmN0aW9uIFc5YyhhKXtSOWMoSkQoYSwxNzMpKX07dmFyIG4xPWplYihBdWUsJ0RlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMCRUeXBlJywxMDAxKTtZY2IoMTAwMiwxLGtyZSxYOWMpO18uQWQ9ZnVuY3Rpb24gWTljKGEpe1M5YyhKRChhLDE3MykpfTt2YXIgbzE9amViKEF1ZSwnRGVwcmVjYXRlZExheW91dE9wdGlvblJlcGxhY2VyL2xhbWJkYSQxJFR5cGUnLDEwMDIpO1ljYigxMDAzLDEse30sWjljKTtfLldkPWZ1bmN0aW9uICQ5YyhhLGIpe1Q5Yyh0aGlzLmEsSkQoYSwxNDQpLEpEKGIsNDApKX07dmFyIHAxPWplYihBdWUsJ0RlcHJlY2F0ZWRMYXlvdXRPcHRpb25SZXBsYWNlci9sYW1iZGEkMiRUeXBlJywxMDAzKTtZY2IoMTQ5LDEsezY4NToxLDE0OToxfSxjYWQpO18uRmI9ZnVuY3Rpb24gZGFkKGEpe3JldHVybiBhYWQodGhpcyxhKX07Xy5NZz1mdW5jdGlvbiBlYWQoKXtyZXR1cm4gdGhpcy5ifTtfLk5nPWZ1bmN0aW9uIGZhZCgpe3JldHVybiB0aGlzLmN9O18udmU9ZnVuY3Rpb24gZ2FkKCl7cmV0dXJuIHRoaXMuZX07Xy5IYj1mdW5jdGlvbiBoYWQoKXtyZXR1cm4gZmdiKHRoaXMuYyl9O18uSWI9ZnVuY3Rpb24gaWFkKCl7cmV0dXJuICdMYXlvdXQgQWxnb3JpdGhtOiAnK3RoaXMuY307dmFyIHQxPWplYihBdWUsJ0xheW91dEFsZ29yaXRobURhdGEnLDE0OSk7WWNiKDI4NSwxLHt9LHBhZCk7dmFyIHMxPWplYihBdWUsJ0xheW91dEFsZ29yaXRobURhdGEvQnVpbGRlcicsMjg1KTtZY2IoMTAwNCwxLHs1MjE6MX0sc2FkKTtfLklnPWZ1bmN0aW9uIHRhZChhKXtSRChhLDIwNikmJiF5ZGIoTEQoYS5tZigoTGdkKCksSWZkKSkpKSYmcWFkKEpEKGEsMjcpKX07dmFyIHUxPWplYihBdWUsJ0xheW91dEFsZ29yaXRobVJlc29sdmVyJywxMDA0KTtZY2IoMjMyLDEsezY4NToxLDIzMjoxfSx1YWQpO18uRmI9ZnVuY3Rpb24gdmFkKGEpe2lmKFJEKGEsMjMyKSl7cmV0dXJuIGNnYih0aGlzLmIsSkQoYSwyMzIpLmIpfXJldHVybiBmYWxzZX07Xy5NZz1mdW5jdGlvbiB3YWQoKXtyZXR1cm4gdGhpcy5hfTtfLk5nPWZ1bmN0aW9uIHhhZCgpe3JldHVybiB0aGlzLmJ9O18udmU9ZnVuY3Rpb24geWFkKCl7cmV0dXJuIHRoaXMuZH07Xy5IYj1mdW5jdGlvbiB6YWQoKXtyZXR1cm4gZmdiKHRoaXMuYil9O18uSWI9ZnVuY3Rpb24gQWFkKCl7cmV0dXJuICdMYXlvdXQgVHlwZTogJyt0aGlzLmJ9O3ZhciB3MT1qZWIoQXVlLCdMYXlvdXRDYXRlZ29yeURhdGEnLDIzMik7WWNiKDM1NCwxLHt9LEVhZCk7dmFyIHYxPWplYihBdWUsJ0xheW91dENhdGVnb3J5RGF0YS9CdWlsZGVyJywzNTQpO1ljYig4NTUsMSx7fSxNYWQpO3ZhciBGYWQ7dmFyIFQxPWplYihBdWUsJ0xheW91dE1ldGFEYXRhU2VydmljZScsODU1KTtZY2IoODU2LDEse30sVmFkKTt2YXIgeTE9amViKEF1ZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL1JlZ2lzdHJ5Jyw4NTYpO1ljYig0NzMsMSx7NDczOjF9LFdhZCk7dmFyIHgxPWplYihBdWUsJ0xheW91dE1ldGFEYXRhU2VydmljZS9SZWdpc3RyeS9UcmlwbGUnLDQ3Myk7WWNiKDg1NywxLHlCZSxYYWQpO18uT2c9ZnVuY3Rpb24gWWFkKCl7cmV0dXJuIG5ldyBDZGR9O3ZhciB6MT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDAkVHlwZScsODU3KTtZY2IoODU4LDEsekJlLFphZCk7Xy5QZz1mdW5jdGlvbiAkYWQoYSl7cmV0dXJuIG9kZChKRChhLDgpKX07dmFyIEExPWplYihBdWUsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMSRUeXBlJyw4NTgpO1ljYig4NjcsMSx5QmUsX2FkKTtfLk9nPWZ1bmN0aW9uIGFiZCgpe3JldHVybiBuZXcgVWxifTt2YXIgQjE9amViKEF1ZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxMCRUeXBlJyw4NjcpO1ljYig4NjgsMSx6QmUsYmJkKTtfLlBnPWZ1bmN0aW9uIGNiZChhKXtyZXR1cm4gbmV3IFdsYihKRChhLDEzKSl9O3ZhciBDMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDExJFR5cGUnLDg2OCk7WWNiKDg2OSwxLHlCZSxkYmQpO18uT2c9ZnVuY3Rpb24gZWJkKCl7cmV0dXJuIG5ldyBNdGJ9O3ZhciBEMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEyJFR5cGUnLDg2OSk7WWNiKDg3MCwxLHpCZSxmYmQpO18uUGc9ZnVuY3Rpb24gZ2JkKGEpe3JldHVybiBjdihKRChhLDY3KSl9O3ZhciBFMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDEzJFR5cGUnLDg3MCk7WWNiKDg3MSwxLHlCZSxoYmQpO18uT2c9ZnVuY3Rpb24gaWJkKCl7cmV0dXJuIG5ldyBRcmJ9O3ZhciBGMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE0JFR5cGUnLDg3MSk7WWNiKDg3MiwxLHpCZSxqYmQpO18uUGc9ZnVuY3Rpb24ga2JkKGEpe3JldHVybiBReChKRChhLDUwKSl9O3ZhciBHMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE1JFR5cGUnLDg3Mik7WWNiKDg3MywxLHlCZSxsYmQpO18uT2c9ZnVuY3Rpb24gbWJkKCl7cmV0dXJuIG5ldyB3dGJ9O3ZhciBIMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE2JFR5cGUnLDg3Myk7WWNiKDg3NCwxLHpCZSxuYmQpO18uUGc9ZnVuY3Rpb24gb2JkKGEpe3JldHVybiBUeChKRChhLDUwKSl9O3ZhciBJMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE3JFR5cGUnLDg3NCk7WWNiKDg3NSwxLHlCZSxwYmQpO18uT2c9ZnVuY3Rpb24gcWJkKCl7cmV0dXJuIG5ldyBsemJ9O3ZhciBKMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDE4JFR5cGUnLDg3NSk7WWNiKDg3NiwxLHpCZSxyYmQpO18uUGc9ZnVuY3Rpb24gc2JkKGEpe3JldHVybiBVeChKRChhLDE1NikpfTt2YXIgSzE9amViKEF1ZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQxOSRUeXBlJyw4NzYpO1ljYig4NTksMSx5QmUsdGJkKTtfLk9nPWZ1bmN0aW9uIHViZCgpe3JldHVybiBuZXcgUmRkfTt2YXIgTDE9amViKEF1ZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQyJFR5cGUnLDg1OSk7WWNiKDg2MCwxLHpCZSx2YmQpO18uUGc9ZnVuY3Rpb24gd2JkKGEpe3JldHVybiBuZXcgU2RkKEpEKGEsNzcpKX07dmFyIE0xPWplYihBdWUsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkMyRUeXBlJyw4NjApO1ljYig4NjEsMSx5QmUseGJkKTtfLk9nPWZ1bmN0aW9uIHliZCgpe3JldHVybiBuZXcgWlhifTt2YXIgTjE9amViKEF1ZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ0JFR5cGUnLDg2MSk7WWNiKDg2MiwxLHpCZSx6YmQpO18uUGc9ZnVuY3Rpb24gQWJkKGEpe3JldHVybiBuZXcgYVliKEpEKGEsMTM5KSl9O3ZhciBPMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDUkVHlwZScsODYyKTtZY2IoODYzLDEseUJlLEJiZCk7Xy5PZz1mdW5jdGlvbiBDYmQoKXtyZXR1cm4gbmV3IExZYn07dmFyIFAxPWplYihBdWUsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkNiRUeXBlJyw4NjMpO1ljYig4NjQsMSx6QmUsRGJkKTtfLlBnPWZ1bmN0aW9uIEViZChhKXtyZXR1cm4gbmV3IE5ZYihKRChhLDEwNykpfTt2YXIgUTE9amViKEF1ZSwnTGF5b3V0TWV0YURhdGFTZXJ2aWNlL2xhbWJkYSQ3JFR5cGUnLDg2NCk7WWNiKDg2NSwxLHlCZSxGYmQpO18uT2c9ZnVuY3Rpb24gR2JkKCl7cmV0dXJuIG5ldyBObmR9O3ZhciBSMT1qZWIoQXVlLCdMYXlvdXRNZXRhRGF0YVNlcnZpY2UvbGFtYmRhJDgkVHlwZScsODY1KTtZY2IoODY2LDEsekJlLEhiZCk7Xy5QZz1mdW5jdGlvbiBJYmQoYSl7cmV0dXJuIG5ldyBPbmQoSkQoYSwzNzcpKX07dmFyIFMxPWplYihBdWUsJ0xheW91dE1ldGFEYXRhU2VydmljZS9sYW1iZGEkOSRUeXBlJyw4NjYpO3ZhciBOND1sZWIodnVlLCdJUHJvcGVydHknKTtZY2IoMjEsMSx7MzQ6MSw2ODU6MSwyMToxLDE0NDoxfSxQYmQpO18uRGQ9ZnVuY3Rpb24gUWJkKGEpe3JldHVybiBLYmQodGhpcyxKRChhLDE0NCkpfTtfLkZiPWZ1bmN0aW9uIFJiZChhKXtyZXR1cm4gUkQoYSwyMSk/Y2diKHRoaXMuZixKRChhLDIxKS5mKTpSRChhLDE0NCkmJmNnYih0aGlzLmYsSkQoYSwxNDQpLk5nKCkpfTtfLlFnPWZ1bmN0aW9uIFNiZCgpe3ZhciBhO2lmKFJEKHRoaXMuYiw0KSl7YT1jRWQodGhpcy5iKTtpZihhPT1udWxsKXt0aHJvdyBzY2IobmV3IFdlYihFQmUrdGhpcy5mKyInLiAiKyJNYWtlIHN1cmUgaXQncyB0eXBlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgIisoY2ViKFY0KSxWNC5rKStCQmUpKX1yZXR1cm4gYX1lbHNle3JldHVybiB0aGlzLmJ9fTtfLk1nPWZ1bmN0aW9uIFRiZCgpe3JldHVybiB0aGlzLmR9O18uTmc9ZnVuY3Rpb24gVWJkKCl7cmV0dXJuIHRoaXMuZn07Xy52ZT1mdW5jdGlvbiBWYmQoKXtyZXR1cm4gdGhpcy5pfTtfLkhiPWZ1bmN0aW9uIFdiZCgpe3JldHVybiBmZ2IodGhpcy5mKX07Xy5JYj1mdW5jdGlvbiBYYmQoKXtyZXR1cm4gJ0xheW91dCBPcHRpb246ICcrdGhpcy5mfTt2YXIgWDE9amViKEF1ZSwnTGF5b3V0T3B0aW9uRGF0YScsMjEpO1ljYigyNCwxLHt9LGZjZCk7dmFyIFUxPWplYihBdWUsJ0xheW91dE9wdGlvbkRhdGEvQnVpbGRlcicsMjQpO1ljYigxNzAsMjMsezM6MSwzNDoxLDIzOjEsMTcwOjF9LG1jZCk7dmFyIGdjZCxoY2QsaWNkLGpjZCxrY2Q7dmFyIFYxPWtlYihBdWUsJ0xheW91dE9wdGlvbkRhdGEvVGFyZ2V0JywxNzAsTUksb2NkLG5jZCk7dmFyIHBjZDtZY2IoMjgyLDIzLHszOjEsMzQ6MSwyMzoxLDI4MjoxfSxBY2QpO3ZhciByY2Qsc2NkLHRjZCx1Y2QsdmNkLHdjZCx4Y2QseWNkO3ZhciBXMT1rZWIoQXVlLCdMYXlvdXRPcHRpb25EYXRhL1R5cGUnLDI4MixNSSxDY2QsQmNkKTt2YXIgRGNkO3ZhciBGY2Q7dmFyIEhjZDtZY2IoMTE5LDEsezExOToxfSxmZGQsZ2RkLGhkZCk7Xy5GYj1mdW5jdGlvbiBpZGQoYSl7dmFyIGI7aWYoYT09bnVsbHx8IVJEKGEsMTE5KSl7cmV0dXJuIGZhbHNlfWI9SkQoYSwxMTkpO3JldHVybiB0dWIodGhpcy5jLGIuYykmJnR1Yih0aGlzLmQsYi5kKSYmdHViKHRoaXMuYixiLmIpJiZ0dWIodGhpcy5hLGIuYSl9O18uSGI9ZnVuY3Rpb24gamRkKCl7cmV0dXJuIEttYihXQyhPQyhhSiwxKSxOcWUsMSw1LFt0aGlzLmMsdGhpcy5kLHRoaXMuYix0aGlzLmFdKSl9O18uSWI9ZnVuY3Rpb24ga2RkKCl7cmV0dXJuICdSZWN0W3g9Jyt0aGlzLmMrJyx5PScrdGhpcy5kKycsdz0nK3RoaXMuYisnLGg9Jyt0aGlzLmErJ10nfTtfLmE9MDtfLmI9MDtfLmM9MDtfLmQ9MDt2YXIgXzE9amViKE92ZSwnRWxrUmVjdGFuZ2xlJywxMTkpO1ljYig4LDEsezM6MSw0OjEsODoxLDQxMToxfSxDZGQsRGRkLEVkZCxGZGQpO18uRmI9ZnVuY3Rpb24gR2RkKGEpe3JldHVybiByZGQodGhpcyxhKX07Xy5IYj1mdW5jdGlvbiBIZGQoKXtyZXR1cm4gRWViKHRoaXMuYSkrZ2ZiKEVlYih0aGlzLmIpKX07Xy5hZz1mdW5jdGlvbiBKZGQoYil7dmFyIGMsZCxlLGY7ZT0wO3doaWxlKGU8Yi5sZW5ndGgmJklkZCgoQURiKGUsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChlKSksTHZlKSl7KytlfWM9Yi5sZW5ndGg7d2hpbGUoYz4wJiZJZGQoKEFEYihjLTEsYi5sZW5ndGgpLGIuY2hhckNvZGVBdChjLTEpKSxNdmUpKXstLWN9aWYoZT49Yyl7dGhyb3cgc2NiKG5ldyBUZWIoJ1RoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhbnkgbnVtYmVycy4nKSl9Zj1tZ2IoKHpEYihlLGMsYi5sZW5ndGgpLGIuc3Vic3RyKGUsYy1lKSksJyx8O3xccnxcbicpO2lmKGYubGVuZ3RoIT0yKXt0aHJvdyBzY2IobmV3IFRlYignRXhhY3RseSB0d28gbnVtYmVycyBhcmUgZXhwZWN0ZWQsICcrZi5sZW5ndGgrJyB3ZXJlIGZvdW5kLicpKX10cnl7dGhpcy5hPUVkYih1Z2IoZlswXSkpO3RoaXMuYj1FZGIodWdiKGZbMV0pKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDEzMCkpe2Q9YTt0aHJvdyBzY2IobmV3IFRlYihOdmUrZCkpfWVsc2UgdGhyb3cgc2NiKGEpfX07Xy5JYj1mdW5jdGlvbiBMZGQoKXtyZXR1cm4gJygnK3RoaXMuYSsnLCcrdGhpcy5iKycpJ307Xy5hPTA7Xy5iPTA7dmFyIGIyPWplYihPdmUsJ0tWZWN0b3InLDgpO1ljYig3Nyw2Nyx7MzoxLDQ6MSwyMDoxLDMxOjEsNTU6MSwxNjoxLDY3OjEsMTU6MSw3NzoxLDQxMToxfSxSZGQsU2RkLFRkZCk7Xy5OYz1mdW5jdGlvbiBXZGQoKXtyZXR1cm4gUWRkKHRoaXMpfTtfLmFnPWZ1bmN0aW9uIFVkZChiKXt2YXIgYyxkLGUsZixnLGg7ZT1tZ2IoYiwnLHw7fFxcKHxcXCl8XFxbfFxcXXxcXHt8XFx9fCB8XHR8XG4nKTtMdGIodGhpcyk7dHJ5e2Q9MDtnPTA7Zj0wO2g9MDt3aGlsZShkPGUubGVuZ3RoKXtpZihlW2RdIT1udWxsJiZ1Z2IoZVtkXSkubGVuZ3RoPjApe2clMj09MD8oZj1FZGIoZVtkXSkpOihoPUVkYihlW2RdKSk7Zz4wJiZnJTIhPTAmJkF0Yih0aGlzLG5ldyBFZGQoZixoKSk7KytnfSsrZH19Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSwxMzApKXtjPWE7dGhyb3cgc2NiKG5ldyBUZWIoJ1RoZSBnaXZlbiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdCBmb3IgdmVjdG9ycy4nK2MpKX1lbHNlIHRocm93IHNjYihhKX19O18uSWI9ZnVuY3Rpb24gWGRkKCl7dmFyIGEsYixjO2E9bmV3IFdnYignKCcpO2I9R3RiKHRoaXMsMCk7d2hpbGUoYi5iIT1iLmQuYyl7Yz1KRChVdGIoYiksOCk7UWdiKGEsYy5hKycsJytjLmIpO2IuYiE9Yi5kLmMmJihhLmErPSc7ICcsYSl9cmV0dXJuIChhLmErPScpJyxhKS5hfTt2YXIgYTI9amViKE92ZSwnS1ZlY3RvckNoYWluJyw3Nyk7WWNiKDI1NCwyMyx7MzoxLDM0OjEsMjM6MSwyNTQ6MX0sZGVkKTt2YXIgWWRkLFpkZCwkZGQsX2RkLGFlZCxiZWQ7dmFyIGQyPWtlYihHQmUsJ0FsaWdubWVudCcsMjU0LE1JLGZlZCxlZWQpO3ZhciBnZWQ7WWNiKDk2OCwxLEh1ZSx3ZWQpO18udGY9ZnVuY3Rpb24geGVkKGEpe3ZlZChhKX07dmFyIGllZCxqZWQsa2VkLGxlZCxtZWQsbmVkLG9lZCxwZWQscWVkLHJlZCxzZWQsdGVkO3ZhciBmMj1qZWIoR0JlLCdCb3hMYXlvdXRlck9wdGlvbnMnLDk2OCk7WWNiKDk2OSwxLHt9LHllZCk7Xy51Zj1mdW5jdGlvbiB6ZWQoKXt2YXIgYTtyZXR1cm4gYT1uZXcgVGxkLGF9O18udmY9ZnVuY3Rpb24gQWVkKGEpe307dmFyIGUyPWplYihHQmUsJ0JveExheW91dGVyT3B0aW9ucy9Cb3hGYWN0b3J5Jyw5NjkpO1ljYigyOTYsMjMsezM6MSwzNDoxLDIzOjEsMjk2OjF9LEllZCk7dmFyIEJlZCxDZWQsRGVkLEVlZCxGZWQsR2VkO3ZhciBnMj1rZWIoR0JlLCdDb250ZW50QWxpZ25tZW50JywyOTYsTUksS2VkLEplZCk7dmFyIExlZDtZY2IoNjg0LDEsSHVlLE1nZCk7Xy50Zj1mdW5jdGlvbiBOZ2QoYSl7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxMQmUpLCcnKSwnTGF5b3V0IEFsZ29yaXRobScpLCdTZWxlY3QgYSBzcGVjaWZpYyBsYXlvdXQgYWxnb3JpdGhtLicpLCh6Y2QoKSx4Y2QpKSxoSiksbXJiKChsY2QoKSxqY2QpKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE1CZSksJycpLCdSZXNvbHZlZCBMYXlvdXQgQWxnb3JpdGhtJyksJ01ldGEgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIGFsZ29yaXRobS4nKSx3Y2QpLHQxKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxFeWUpLCcnKSwnQWxpZ25tZW50JyksJ0FsaWdubWVudCBvZiB0aGUgc2VsZWN0ZWQgbm9kZSByZWxhdGl2ZSB0byBvdGhlciBub2RlczsgdGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgdXNlZCBhbGdvcml0aG0uJyksUGVkKSx0Y2QpLGQyKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE91ZSksJycpLCdBc3BlY3QgUmF0aW8nKSwnVGhlIGRlc2lyZWQgYXNwZWN0IHJhdGlvIG9mIHRoZSBkcmF3aW5nLCB0aGF0IGlzIHRoZSBxdW90aWVudCBvZiB3aWR0aCBieSBoZWlnaHQuJyksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxOQmUpLCcnKSwnQmVuZCBQb2ludHMnKSwiQSBmaXhlZCBsaXN0IG9mIGJlbmQgcG9pbnRzIGZvciB0aGUgZWRnZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSAnRml4ZWQgTGF5b3V0JyBhbGdvcml0aG0gdG8gc3BlY2lmeSBhIHByZS1kZWZpbmVkIHJvdXRpbmcgZm9yIGFuIGVkZ2UuIFRoZSB2ZWN0b3IgY2hhaW4gbXVzdCBpbmNsdWRlIHRoZSBzb3VyY2UgcG9pbnQsIGFueSBiZW5kIHBvaW50cywgYW5kIHRoZSB0YXJnZXQgcG9pbnQsIHNvIGl0IG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcG9pbnRzLiIpLHdjZCksYTIpLG1yYihnY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFF5ZSksJycpLCdDb250ZW50IEFsaWdubWVudCcpLCdTcGVjaWZpZXMgaG93IHRoZSBjb250ZW50IG9mIGEgbm9kZSBhcmUgYWxpZ25lZC4gRWFjaCBub2RlIGNhbiBpbmRpdmlkdWFsbHkgY29udHJvbCB0aGUgYWxpZ25tZW50IG9mIGl0cyBjb250ZW50cy4gSS5lLiBpZiBhIG5vZGUgc2hvdWxkIGJlIGFsaWduZWQgdG9wIGxlZnQgaW4gaXRzIHBhcmVudCBub2RlLCB0aGUgcGFyZW50IG5vZGUgc2hvdWxkIHNwZWNpZnkgdGhhdCBvcHRpb24uJyksWWVkKSx1Y2QpLGcyKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxEeWUpLCcnKSwnRGVidWcgTW9kZScpLCdXaGV0aGVyIGFkZGl0aW9uYWwgZGVidWcgaW5mb3JtYXRpb24gc2hhbGwgYmUgZ2VuZXJhdGVkLicpLCh4ZGIoKSxmYWxzZSkpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEh5ZSksJycpLCdEaXJlY3Rpb24nKSwnT3ZlcmFsbCBkaXJlY3Rpb24gb2YgZWRnZXM6IGhvcml6b250YWwgKHJpZ2h0IC8gbGVmdCkgb3IgdmVydGljYWwgKGRvd24gLyB1cCkuJyksX2VkKSx0Y2QpLGkyKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxheWUpLCcnKSwnRWRnZSBSb3V0aW5nJyksJ1doYXQga2luZCBvZiBlZGdlIHJvdXRpbmcgc3R5bGUgc2hvdWxkIGJlIGFwcGxpZWQgZm9yIHRoZSBjb250ZW50IG9mIGEgcGFyZW50IG5vZGUuIEFsZ29yaXRobXMgbWF5IGFsc28gc2V0IHRoaXMgb3B0aW9uIHRvIHNpbmdsZSBlZGdlcyBpbiBvcmRlciB0byBtYXJrIHRoZW0gYXMgc3BsaW5lcy4gVGhlIGJlbmQgcG9pbnQgbGlzdCBvZiBlZGdlcyB3aXRoIHRoaXMgb3B0aW9uIHNldCB0byBTUExJTkVTIG11c3QgYmUgaW50ZXJwcmV0ZWQgYXMgY29udHJvbCBwb2ludHMgZm9yIGEgcGllY2V3aXNlIGN1YmljIHNwbGluZS4nKSxlZmQpLHRjZCksbDIpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEpCZSksJycpLCdFeHBhbmQgTm9kZXMnKSwnSWYgYWN0aXZlLCBub2RlcyBhcmUgZXhwYW5kZWQgdG8gZmlsbCB0aGUgYXJlYSBvZiB0aGVpciBwYXJlbnQuJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFh4ZSksJycpLCdIaWVyYXJjaHkgSGFuZGxpbmcnKSwiRGV0ZXJtaW5lcyB3aGV0aGVyIHNlcGFyYXRlIGxheW91dCBydW5zIGFyZSB0cmlnZ2VyZWQgZm9yIGRpZmZlcmVudCBjb21wb3VuZCBub2RlcyBpbiBhIGhpZXJhcmNoaWNhbCBncmFwaC4gU2V0dGluZyBhIG5vZGUncyBoaWVyYXJjaHkgaGFuZGxpbmcgdG8gYElOQ0xVREVfQ0hJTERSRU5gIHdpbGwgbGF5IG91dCB0aGF0IG5vZGUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biwgdW50aWwgYSBkZXNjZW5kYW50IGlzIGVuY291bnRlcmVkIHdoaWNoIGhhcyBpdHMgaGllcmFyY2h5IGhhbmRsaW5nIHNldCB0byBgU0VQQVJBVEVfQ0hJTERSRU5gLiBJbiBnZW5lcmFsLCBgU0VQQVJBVEVfQ0hJTERSRU5gIHdpbGwgZW5zdXJlIHRoYXQgYSBuZXcgbGF5b3V0IHJ1biBpcyB0cmlnZ2VyZWQgZm9yIGEgbm9kZSB3aXRoIHRoYXQgc2V0dGluZy4gSW5jbHVkaW5nIG11bHRpcGxlIGxldmVscyBvZiBoaWVyYXJjaHkgaW4gYSBzaW5nbGUgbGF5b3V0IHJ1biBtYXkgYWxsb3cgY3Jvc3MtaGllcmFyY2hpY2FsIGVkZ2VzIHRvIGJlIGxhaWQgb3V0IHByb3Blcmx5LiBJZiB0aGUgcm9vdCBub2RlIGlzIHNldCB0byBgSU5IRVJJVGAgKG9yIG5vdCBzZXQgYXQgYWxsKSwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgYFNFUEFSQVRFX0NISUxEUkVOYC4iKSxqZmQpLHRjZCkscDIpLG5yYihqY2QsV0MoT0MoVjEsMSksRXJlLDE3MCwwLFtpY2RdKSkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsUnVlKSwnJyksJ1BhZGRpbmcnKSwiVGhlIHBhZGRpbmcgdG8gYmUgbGVmdCB0byBhIHBhcmVudCBlbGVtZW50J3MgYm9yZGVyIHdoZW4gcGxhY2luZyBjaGlsZCBlbGVtZW50cy4gVGhpcyBjYW4gYWxzbyBzZXJ2ZSBhcyBhbiBvdXRwdXQgb3B0aW9uIG9mIGEgbGF5b3V0IGFsZ29yaXRobSBpZiBub2RlIHNpemUgY2FsY3VsYXRpb24gaXMgc2V0dXAgYXBwcm9wcmlhdGVseS4iKSxMZmQpLHdjZCksJDEpLG5yYihqY2QsV0MoT0MoVjEsMSksRXJlLDE3MCwwLFtpY2RdKSkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsU3VlKSwnJyksJ0ludGVyYWN0aXZlJyksJ1doZXRoZXIgdGhlIGFsZ29yaXRobSBzaG91bGQgYmUgcnVuIGluIGludGVyYWN0aXZlIG1vZGUgZm9yIHRoZSBjb250ZW50IG9mIGEgcGFyZW50IG5vZGUuIFdoYXQgdGhpcyBtZWFucyBleGFjdGx5IGRlcGVuZHMgb24gaG93IHRoZSBzcGVjaWZpYyBhbGdvcml0aG0gaW50ZXJwcmV0cyB0aGlzIG9wdGlvbi4gVXN1YWxseSBpbiB0aGUgaW50ZXJhY3RpdmUgbW9kZSBhbGdvcml0aG1zIHRyeSB0byBtb2RpZnkgdGhlIGN1cnJlbnQgbGF5b3V0IGFzIGxpdHRsZSBhcyBwb3NzaWJsZS4nKSxmYWxzZSkscmNkKSxHSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsYnplKSwnJyksJ2ludGVyYWN0aXZlIExheW91dCcpLCdXaGV0aGVyIHRoZSBncmFwaCBzaG91bGQgYmUgY2hhbmdlYWJsZSBpbnRlcmFjdGl2ZWx5IGFuZCBieSBzZXR0aW5nIGNvbnN0cmFpbnRzJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFZ1ZSksJycpLCdPbWl0IE5vZGUgTWljcm8gTGF5b3V0JyksIk5vZGUgbWljcm8gbGF5b3V0IGNvbXByaXNlcyB0aGUgY29tcHV0YXRpb24gb2Ygbm9kZSBkaW1lbnNpb25zIChpZiByZXF1ZXN0ZWQpLCB0aGUgcGxhY2VtZW50IG9mIHBvcnRzIGFuZCB0aGVpciBsYWJlbHMsIGFuZCB0aGUgcGxhY2VtZW50IG9mIG5vZGUgbGFiZWxzLiBUaGUgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCBpbmRlcGVuZGVudCBvZiBhbnkgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobSBhbmQgc2hvdWxkbid0IGhhdmUgYW55IG5lZ2F0aXZlIGltcGFjdCBvbiB0aGUgbGF5b3V0IGFsZ29yaXRobSdzIHBlcmZvcm1hbmNlIGl0c2VsZi4gWWV0LCBpZiBhbnkgdW5mb3Jlc2VlbiBiZWhhdmlvciBvY2N1cnMsIHRoaXMgb3B0aW9uIGFsbG93cyB0byBkZWFjdGl2YXRlIHRoZSBtaWNybyBsYXlvdXQuIiksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFR1ZSksJycpLCdQb3J0IENvbnN0cmFpbnRzJyksJ0RlZmluZXMgY29uc3RyYWludHMgb2YgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3J0cyBvZiBhIG5vZGUuJyksWmZkKSx0Y2QpLHQyKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLCR5ZSksJycpLCdQb3NpdGlvbicpLCJUaGUgcG9zaXRpb24gb2YgYSBub2RlLCBwb3J0LCBvciBsYWJlbC4gVGhpcyBpcyB1c2VkIGJ5IHRoZSAnRml4ZWQgTGF5b3V0JyBhbGdvcml0aG0gdG8gc3BlY2lmeSBhIHByZS1kZWZpbmVkIHBvc2l0aW9uLiIpLHdjZCksYjIpLG5yYihpY2QsV0MoT0MoVjEsMSksRXJlLDE3MCwwLFtrY2QsaGNkXSkpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsTHVlKSwnJyksJ1ByaW9yaXR5JyksJ0RlZmluZXMgdGhlIHByaW9yaXR5IG9mIGFuIG9iamVjdDsgaXRzIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWMgbGF5b3V0IGFsZ29yaXRobSBhbmQgdGhlIGNvbnRleHQgd2hlcmUgaXQgaXMgdXNlZC4nKSx2Y2QpLFVJKSxucmIoaWNkLFdDKE9DKFYxLDEpLEVyZSwxNzAsMCxbZ2NkXSkpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsUHVlKSwnJyksJ1JhbmRvbWl6YXRpb24gU2VlZCcpLCdTZWVkIHVzZWQgZm9yIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgdG8gY29udHJvbCB0aGUgbGF5b3V0IGFsZ29yaXRobS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSBzZWVkIHNoYWxsIGJlIGRldGVybWluZWQgcHNldWRvLXJhbmRvbWx5IChlLmcuIGZyb20gdGhlIHN5c3RlbSB0aW1lKS4nKSx2Y2QpLFVJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFF1ZSksJycpLCdTZXBhcmF0ZSBDb25uZWN0ZWQgQ29tcG9uZW50cycpLCdXaGV0aGVyIGVhY2ggY29ubmVjdGVkIGNvbXBvbmVudCBzaG91bGQgYmUgcHJvY2Vzc2VkIHNlcGFyYXRlbHkuJykscmNkKSxHSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsUnllKSwnJyksJ0p1bmN0aW9uIFBvaW50cycpLCdUaGlzIG9wdGlvbiBpcyBub3QgdXNlZCBhcyBvcHRpb24sIGJ1dCBhcyBvdXRwdXQgb2YgdGhlIGxheW91dCBhbGdvcml0aG1zLiBJdCBpcyBhdHRhY2hlZCB0byBlZGdlcyBhbmQgZGV0ZXJtaW5lcyB0aGUgcG9pbnRzIHdoZXJlIGp1bmN0aW9uIHN5bWJvbHMgc2hvdWxkIGJlIGRyYXduIGluIG9yZGVyIHRvIHJlcHJlc2VudCBoeXBlcmVkZ2VzIHdpdGggb3J0aG9nb25hbCByb3V0aW5nLiBXaGV0aGVyIHN1Y2ggcG9pbnRzIGFyZSBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSBjaG9zZW4gbGF5b3V0IGFsZ29yaXRobSBhbmQgZWRnZSByb3V0aW5nIHN0eWxlLiBUaGUgcG9pbnRzIGFyZSBwdXQgaW50byB0aGUgdmVjdG9yIGNoYWluIHdpdGggbm8gc3BlY2lmaWMgb3JkZXIuJyksdWZkKSx3Y2QpLGEyKSxtcmIoZ2NkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxWeWUpLCcnKSwnQ29tbWVudCBCb3gnKSwnV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgYSBjb21tZW50IGJveCBpbnN0ZWFkIG9mIGEgcmVndWxhciBub2RlLiBJbiB0aGF0IGNhc2UgaXRzIHBsYWNlbWVudCBzaG91bGQgYmUgc2ltaWxhciB0byBob3cgbGFiZWxzIGFyZSBoYW5kbGVkLiBBbnkgZWRnZXMgaW5jaWRlbnQgdG8gYSBjb21tZW50IGJveCBzcGVjaWZ5IHRvIHdoaWNoIGdyYXBoIGVsZW1lbnRzIHRoZSBjb21tZW50IGlzIHJlbGF0ZWQuJyksZmFsc2UpLHJjZCksR0kpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFd5ZSksJycpLCdIeXBlcm5vZGUnKSwnV2hldGhlciB0aGUgbm9kZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBhIGh5cGVybm9kZS4nKSxmYWxzZSkscmNkKSxHSSksbXJiKGljZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxPQmUpLCcnKSwnTGFiZWwgTWFuYWdlcicpLCJMYWJlbCBtYW5hZ2VycyBjYW4gc2hvcnRlbiBsYWJlbHMgdXBvbiBhIGxheW91dCBhbGdvcml0aG0ncyByZXF1ZXN0LiIpLHdjZCksWTEpLG5yYihqY2QsV0MoT0MoVjEsMSksRXJlLDE3MCwwLFtoY2RdKSkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsUEJlKSwnJyksJ1NvZnR3cmFwcGluZyBGdXp6aW5lc3MnKSwnRGV0ZXJtaW5lcyB0aGUgYW1vdW50IG9mIGZ1enppbmVzcyB0byBiZSB1c2VkIHdoZW4gcGVyZm9ybWluZyBzb2Z0d3JhcHBpbmcgb24gbGFiZWxzLiBUaGUgdmFsdWUgZXhwcmVzc2VzIHRoZSBwZXJjZW50IG9mIG92ZXJoYW5nIHRoYXQgaXMgcGVybWl0dGVkIGZvciBlYWNoIGxpbmUuIElmIHRoZSBuZXh0IGxpbmUgd291bGQgdGFrZSB1cCBsZXNzIHNwYWNlIHRoYW4gdGhpcyB0aHJlc2hvbGQsIGl0IGlzIGFwcGVuZGVkIHRvIHRoZSBjdXJyZW50IGxpbmUgaW5zdGVhZCBvZiBiZWluZyBwbGFjZWQgaW4gYSBuZXcgbGluZS4nKSwwKSxzY2QpLExJKSxtcmIoaGNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxfeWUpLCcnKSwnTWFyZ2lucycpLCJNYXJnaW5zIGRlZmluZSBhZGRpdGlvbmFsIHNwYWNlIGFyb3VuZCB0aGUgYWN0dWFsIGJvdW5kcyBvZiBhIGdyYXBoIGVsZW1lbnQuIEZvciBpbnN0YW5jZSwgcG9ydHMgb3IgbGFiZWxzIGJlaW5nIHBsYWNlZCBvbiB0aGUgb3V0c2lkZSBvZiBhIG5vZGUncyBib3JkZXIgbWlnaHQgaW50cm9kdWNlIHN1Y2ggYSBtYXJnaW4uIFRoZSBtYXJnaW4gaXMgdXNlZCB0byBndWFyYW50ZWUgbm9uLW92ZXJsYXAgb2Ygb3RoZXIgZ3JhcGggZWxlbWVudHMgd2l0aCB0aG9zZSBwb3J0cyBvciBsYWJlbHMuIiksd2ZkKSx3Y2QpLFoxKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxCeWUpLCcnKSwnTm8gTGF5b3V0JyksIk5vIGxheW91dCBpcyBkb25lIGZvciB0aGUgYXNzb2NpYXRlZCBlbGVtZW50LiBUaGlzIGlzIHVzZWQgdG8gbWFyayBwYXJ0cyBvZiBhIGRpYWdyYW0gdG8gYXZvaWQgdGhlaXIgaW5jbHVzaW9uIGluIHRoZSBsYXlvdXQgZ3JhcGgsIG9yIHRvIG1hcmsgcGFydHMgb2YgdGhlIGxheW91dCBncmFwaCB0byBwcmV2ZW50IGxheW91dCBlbmdpbmVzIGZyb20gcHJvY2Vzc2luZyB0aGVtLiBJZiB5b3Ugd2lzaCB0byBleGNsdWRlIHRoZSBjb250ZW50cyBvZiBhIGNvbXBvdW5kIG5vZGUgZnJvbSBhdXRvbWF0aWMgbGF5b3V0LCB3aGlsZSB0aGUgbm9kZSBpdHNlbGYgaXMgc3RpbGwgY29uc2lkZXJlZCBvbiBpdHMgb3duIGxheWVyLCB1c2UgdGhlICdGaXhlZCBMYXlvdXQnIGFsZ29yaXRobSBmb3IgdGhhdCBub2RlLiIpLGZhbHNlKSxyY2QpLEdJKSxucmIoaWNkLFdDKE9DKFYxLDEpLEVyZSwxNzAsMCxbZ2NkLGtjZCxoY2RdKSkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsUUJlKSwnJyksJ1NjYWxlIEZhY3RvcicpLCJUaGUgc2NhbGluZyBmYWN0b3IgdG8gYmUgYXBwbGllZCB0byB0aGUgY29ycmVzcG9uZGluZyBub2RlIGluIHJlY3Vyc2l2ZSBsYXlvdXQuIEl0IGNhdXNlcyB0aGUgY29ycmVzcG9uZGluZyBub2RlJ3Mgc2l6ZSB0byBiZSBhZGp1c3RlZCwgYW5kIGl0cyBwb3J0cyBhbmQgbGFiZWxzIHRvIGJlIHNpemVkIGFuZCBwbGFjZWQgYWNjb3JkaW5nbHkgYWZ0ZXIgdGhlIGxheW91dCBvZiB0aGF0IG5vZGUgaGFzIGJlZW4gZGV0ZXJtaW5lZCAoYW5kIGJlZm9yZSB0aGUgbm9kZSBpdHNlbGYgYW5kIGl0cyBzaWJsaW5ncyBhcmUgYXJyYW5nZWQpLiBUaGUgc2NhbGluZyBpcyBub3QgcmV2ZXJ0ZWQgYWZ0ZXJ3YXJkcywgc28gdGhlIHJlc3VsdGluZyBsYXlvdXQgZ3JhcGggY29udGFpbnMgdGhlIGFkanVzdGVkIHNpemUgYW5kIHBvc2l0aW9uIGRhdGEuIFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGlmICdMYXlvdXQgSGllcmFyY2h5JyBpcyBzZXQuIiksMSksc2NkKSxMSSksbXJiKGljZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxSQmUpLCcnKSwnQ2hpbGQgQXJlYSBXaWR0aCcpLCdUaGUgd2lkdGggb2YgdGhlIGFyZWEgb2NjdXBpZWQgYnkgdGhlIGxhaWQgb3V0IGNoaWxkcmVuIG9mIGEgbm9kZS4nKSxzY2QpLExJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFNCZSksJycpLCdDaGlsZCBBcmVhIEhlaWdodCcpLCdUaGUgaGVpZ2h0IG9mIHRoZSBhcmVhIG9jY3VwaWVkIGJ5IHRoZSBsYWlkIG91dCBjaGlsZHJlbiBvZiBhIG5vZGUuJyksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsX3VlKSwnJyksdkJlKSwiVHVybnMgdG9wZG93biBsYXlvdXQgb24gYW5kIG9mZi4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgaGllcmFyY2hpY2FsIGxheW91dCB3aWxsIGJlIGNvbXB1dGVkIGZpcnN0IGZvciB0aGUgcm9vdCBub2RlIGFuZCB0aGVuIGZvciBpdHMgY2hpbGRyZW4gcmVjdXJzaXZlbHkuIExheW91dHMgYXJlIHRoZW4gc2NhbGVkIGRvd24gdG8gZml0IHRoZSBhcmVhIHByb3ZpZGVkIGJ5IHRoZWlyIHBhcmVudHMuIEdyYXBocyBtdXN0IGZvbGxvdyBhIGNlcnRhaW4gc3RydWN0dXJlIGZvciB0b3Bkb3duIGxheW91dCB0byB3b3JrIHByb3Blcmx5LiB7QGxpbmsgVG9wZG93bk5vZGVUeXBlcy5QQVJBTExFTF9OT0RFfSBub2RlcyBtdXN0IGhhdmUgY2hpbGRyZW4gb2YgdHlwZSB7QGxpbmsgVG9wZG93bk5vZGVUeXBlcy5ISUVSQVJDSElDQUxfTk9ERX0gYW5kIG11c3QgZGVmaW5lIHtAbGluayB0b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVXaWR0aH0gYW5kIHtAbGluayB0b3Bkb3duLmhpZXJhcmNoaWNhbE5vZGVBc3BlY3RSYXRpb30gZm9yIHRoZWlyIGNoaWxkcmVuLiBGdXJ0aGVybW9yZSB0aGV5IG5lZWQgdG8gYmUgbGFpZCBvdXQgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgaXMgYSB7QGxpbmsgVG9wZG93bkxheW91dFByb3ZpZGVyfS4gSGllcmFyY2hpY2FsIG5vZGVzIGNhbiBhbHNvIGJlIHBhcmVudHMgb2Ygb3RoZXIgaGllcmFyY2hpY2FsIG5vZGVzIGFuZCBjYW4gb3B0aW9uYWxseSB1c2UgYSB7QGxpbmsgVG9wZG93blNpemVBcHByb3hpbWF0b3J9IHRvIGR5bmFtaWNhbGx5IHNldCBzaXplcyBkdXJpbmcgdG9wZG93biBsYXlvdXQuIEluIHRoaXMgY2FzZSB7QGxpbmsgdG9wZG93bi5oaWVyYXJjaGljYWxOb2RlV2lkdGh9IGFuZCB7QGxpbmsgdG9wZG93bi5oaWVyYXJjaGljYWxOb2RlQXNwZWN0UmF0aW99IHNob3VsZCBiZSBzZXQgb24gdGhlIG5vZGUgaXRzZWxmIHJhdGhlciB0aGFuIHRoZSBwYXJlbnQuIFRoZSB2YWx1ZXMgYXJlIHRoZW4gdXNlZCBieSB0aGUgc2l6ZSBhcHByb3hpbWF0b3IgYXMgYmFzZSB2YWx1ZXMuIEhpZXJhcmNoaWNhbCBub2RlcyByZXF1aXJlIHRoZSBsYXlvdXQgb3B0aW9uIHtAbGluayBub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZX0gdG8gYmUgdHJ1ZSB0byBwcmV2ZW50IHRoZSBhbGdvcml0aG0gdXNlZCB0aGVyZSBmcm9tIHJlc2l6aW5nIHRoZSBoaWVyYXJjaGljYWwgbm9kZS4gVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBpZiAnSGllcmFyY2h5IEhhbmRsaW5nJyBpcyBzZXQgdG8gJ0lOQ0xVREVfQ0hJTERSRU4nIiksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO09hZChhLF91ZSxkdmUsbnVsbCk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsVEJlKSwnJyksJ0FuaW1hdGUnKSwnV2hldGhlciB0aGUgc2hpZnQgZnJvbSB0aGUgb2xkIGxheW91dCB0byB0aGUgbmV3IGNvbXB1dGVkIGxheW91dCBzaGFsbCBiZSBhbmltYXRlZC4nKSx0cnVlKSxyY2QpLEdJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxVQmUpLCcnKSwnQW5pbWF0aW9uIFRpbWUgRmFjdG9yJyksIkZhY3RvciBmb3IgY29tcHV0YXRpb24gb2YgYW5pbWF0aW9uIHRpbWUuIFRoZSBoaWdoZXIgdGhlIHZhbHVlLCB0aGUgbG9uZ2VyIHRoZSBhbmltYXRpb24gdGltZS4gSWYgdGhlIHZhbHVlIGlzIDAsIHRoZSByZXN1bHRpbmcgdGltZSBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1pbmltdW0gZGVmaW5lZCBieSAnTWluaW1hbCBBbmltYXRpb24gVGltZScuIiksamZiKDEwMCkpLHZjZCksVUkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFZCZSksJycpLCdMYXlvdXQgQW5jZXN0b3JzJyksJ1doZXRoZXIgdGhlIGhpZXJhcmNoeSBsZXZlbHMgb24gdGhlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZWxlbWVudCB0byB0aGUgcm9vdCBvZiB0aGUgZGlhZ3JhbSBzaGFsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbGF5b3V0IHByb2Nlc3MuJyksZmFsc2UpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFdCZSksJycpLCdNYXhpbWFsIEFuaW1hdGlvbiBUaW1lJyksJ1RoZSBtYXhpbWFsIHRpbWUgZm9yIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcy4nKSxqZmIoNDAwMCkpLHZjZCksVUkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFhCZSksJycpLCdNaW5pbWFsIEFuaW1hdGlvbiBUaW1lJyksJ1RoZSBtaW5pbWFsIHRpbWUgZm9yIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcy4nKSxqZmIoNDAwKSksdmNkKSxVSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsWUJlKSwnJyksJ1Byb2dyZXNzIEJhcicpLCdXaGV0aGVyIGEgcHJvZ3Jlc3MgYmFyIHNoYWxsIGJlIGRpc3BsYXllZCBkdXJpbmcgbGF5b3V0IGNvbXB1dGF0aW9ucy4nKSxmYWxzZSkscmNkKSxHSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsWkJlKSwnJyksJ1ZhbGlkYXRlIEdyYXBoJyksJ1doZXRoZXIgdGhlIGdyYXBoIHNoYWxsIGJlIHZhbGlkYXRlZCBiZWZvcmUgYW55IGxheW91dCBhbGdvcml0aG0gaXMgYXBwbGllZC4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGVycm9yIGlzIGZvdW5kLCB0aGUgbGF5b3V0IHByb2Nlc3MgaXMgYWJvcnRlZCBhbmQgYSBtZXNzYWdlIGlzIHNob3duIHRvIHRoZSB1c2VyLicpLGZhbHNlKSxyY2QpLEdJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCwkQmUpLCcnKSwnVmFsaWRhdGUgT3B0aW9ucycpLCdXaGV0aGVyIGxheW91dCBvcHRpb25zIHNoYWxsIGJlIHZhbGlkYXRlZCBiZWZvcmUgYW55IGxheW91dCBhbGdvcml0aG0gaXMgYXBwbGllZC4gSWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGVycm9yIGlzIGZvdW5kLCB0aGUgbGF5b3V0IHByb2Nlc3MgaXMgYWJvcnRlZCBhbmQgYSBtZXNzYWdlIGlzIHNob3duIHRvIHRoZSB1c2VyLicpLHRydWUpLHJjZCksR0kpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLF9CZSksJycpLCdab29tIHRvIEZpdCcpLCdXaGV0aGVyIHRoZSB6b29tIGxldmVsIHNoYWxsIGJlIHNldCB0byB2aWV3IHRoZSB3aG9sZSBkaWFncmFtIGFmdGVyIGxheW91dC4nKSxmYWxzZSkscmNkKSxHSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsS0JlKSwnYm94JyksJ0JveCBMYXlvdXQgTW9kZScpLCdDb25maWd1cmVzIHRoZSBwYWNraW5nIG1vZGUgdXNlZCBieSB0aGUge0BsaW5rIEJveExheW91dFByb3ZpZGVyfS4gSWYgU0lNUExFIGlzIG5vdCByZXF1aXJlZCAobmVpdGhlciBwcmlvcml0aWVzIGFyZSB1c2VkIG5vciB0aGUgaW50ZXJhY3RpdmUgbW9kZSksIEdST1VQX0RFQyBjYW4gaW1wcm92ZSB0aGUgcGFja2luZyBhbmQgZGVjcmVhc2UgdGhlIGFyZWEuIEdST1VQX01JWEVEIGFuZCBHUk9VUF9JTkMgbWF5LCBpbiB2ZXJ5IHNwZWNpZmljIHNjZW5hcmlvcywgd29yayBiZXR0ZXIuJyksVGVkKSx0Y2QpLEoyKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxhQ2UpLCdqc29uJyksJ1NoYXBlIENvb3JkcycpLCdGb3IgbGF5b3V0cyB0cmFuc2ZlcnJlZCBpbnRvIEpTT04gZ3JhcGhzLCBzcGVjaWZ5IHRoZSBjb29yZGluYXRlIHN5c3RlbSB0byBiZSB1c2VkIGZvciBub2RlcywgcG9ydHMsIGFuZCBsYWJlbHMgb2Ygbm9kZXMgYW5kIHBvcnRzLicpLHNmZCksdGNkKSx5MiksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsYkNlKSwnanNvbicpLCdFZGdlIENvb3JkcycpLCdGb3IgbGF5b3V0cyB0cmFuc2ZlcnJlZCBpbnRvIEpTT04gZ3JhcGhzLCBzcGVjaWZ5IHRoZSBjb29yZGluYXRlIHN5c3RlbSB0byBiZSB1c2VkIGZvciBlZGdlIHJvdXRlIHBvaW50cyBhbmQgZWRnZSBsYWJlbHMuJykscWZkKSx0Y2QpLGoyKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxveWUpLGJ5ZSksJ0NvbW1lbnQgQ29tbWVudCBTcGFjaW5nJyksJ1NwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBjb21tZW50IGJveCBhbmQgb3RoZXIgY29tbWVudCBib3hlcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbm9kZS4gVGhlIHNwYWNlIGxlZnQgYmV0d2VlbiBjb21tZW50IGJveGVzIG9mIGRpZmZlcmVudCBub2RlcyBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4nKSwxMCksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QscHllKSxieWUpLCdDb21tZW50IE5vZGUgU3BhY2luZycpLCdTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIGNvbm5lY3RlZCBjb21tZW50IGJveGVzLiBUaGUgc3BhY2UgbGVmdCBiZXR3ZWVuIGEgbm9kZSBhbmQgdGhlIGNvbW1lbnRzIG9mIGFub3RoZXIgbm9kZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBub2RlLW5vZGUgc3BhY2luZy4nKSwxMCksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QscXllKSxieWUpLCdDb21wb25lbnRzIFNwYWNpbmcnKSwiU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBwYWlycyBvZiBjb25uZWN0ZWQgY29tcG9uZW50cy4gVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiAnc2VwYXJhdGVDb25uZWN0ZWRDb21wb25lbnRzJyBpcyBhY3RpdmF0ZWQuIiksMjApLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHJ5ZSksYnllKSwnRWRnZSBTcGFjaW5nJyksJ1NwYWNpbmcgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYW55IHR3byBlZGdlcy4gTm90ZSB0aGF0IHdoaWxlIHRoaXMgY2FuIHNvbWV3aGF0IGVhc2lseSBiZSBzYXRpc2ZpZWQgZm9yIHRoZSBzZWdtZW50cyBvZiBvcnRob2dvbmFsbHkgZHJhd24gZWRnZXMsIGl0IGlzIGhhcmRlciBmb3IgZ2VuZXJhbCBwb2x5bGluZXMgb3Igc3BsaW5lcy4nKSwxMCksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsTnVlKSxieWUpLCdFZGdlIExhYmVsIFNwYWNpbmcnKSwiVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gYSBsYWJlbCBhbmQgdGhlIGVkZ2UgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLiBOb3RlIHRoYXQgdGhlIHBsYWNlbWVudCBvZiBhIGxhYmVsIGlzIGluZmx1ZW5jZWQgYnkgdGhlICdlZGdlbGFiZWxzLnBsYWNlbWVudCcgb3B0aW9uLiIpLDIpLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHN5ZSksYnllKSwnRWRnZSBOb2RlIFNwYWNpbmcnKSwnU3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBub2RlcyBhbmQgZWRnZXMuJyksMTApLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHR5ZSksYnllKSwnTGFiZWwgU3BhY2luZycpLCdEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIHR3byBsYWJlbHMgb2YgdGhlIHNhbWUgZ3JhcGggZWxlbWVudC4nKSwwKSxzY2QpLExJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx3eWUpLGJ5ZSksJ0xhYmVsIE5vZGUgU3BhY2luZycpLCJTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGxhYmVscyBhbmQgdGhlIGJvcmRlciBvZiBub2RlIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aC4gTm90ZSB0aGF0IHRoZSBwbGFjZW1lbnQgb2YgYSBsYWJlbCBpcyBpbmZsdWVuY2VkIGJ5IHRoZSAnbm9kZWxhYmVscy5wbGFjZW1lbnQnIG9wdGlvbi4iKSw1KSxzY2QpLExJKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCx1eWUpLGJ5ZSksJ0hvcml6b250YWwgc3BhY2luZyBiZXR3ZWVuIExhYmVsIGFuZCBQb3J0JyksIkhvcml6b250YWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsdnllKSxieWUpLCdWZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gTGFiZWwgYW5kIFBvcnQnKSwiVmVydGljYWwgc3BhY2luZyB0byBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBsYWJlbHMgYW5kIHRoZSBwb3J0cyB0aGV5IGFyZSBhc3NvY2lhdGVkIHdpdGguIE5vdGUgdGhhdCB0aGUgcGxhY2VtZW50IG9mIGEgbGFiZWwgaXMgaW5mbHVlbmNlZCBieSB0aGUgJ3BvcnRsYWJlbHMucGxhY2VtZW50JyBvcHRpb24uIiksMSksc2NkKSxMSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsTXVlKSxieWUpLCdOb2RlIFNwYWNpbmcnKSwnVGhlIG1pbmltYWwgZGlzdGFuY2UgdG8gYmUgcHJlc2VydmVkIGJldHdlZW4gZWFjaCB0d28gbm9kZXMuJyksMjApLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHh5ZSksYnllKSwnTm9kZSBTZWxmIExvb3AgU3BhY2luZycpLCdTcGFjaW5nIHRvIGJlIHByZXNlcnZlZCBiZXR3ZWVuIGEgbm9kZSBhbmQgaXRzIHNlbGYgbG9vcHMuJyksMTApLHNjZCksTEkpLG1yYihqY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLHl5ZSksYnllKSwnUG9ydCBTcGFjaW5nJyksJ1NwYWNpbmcgYmV0d2VlbiBwYWlycyBvZiBwb3J0cyBvZiB0aGUgc2FtZSBub2RlLicpLDEwKSxzY2QpLExJKSxucmIoamNkLFdDKE9DKFYxLDEpLEVyZSwxNzAsMCxbaWNkXSkpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsenllKSxieWUpLCdJbmRpdmlkdWFsIFNwYWNpbmcnKSwiQWxsb3dzIHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzcGFjaW5nIHZhbHVlcyBmb3IgZ3JhcGggZWxlbWVudHMgdGhhdCBzaGFsbCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgZWxlbWVudCdzIHBhcmVudC4iKSx3Y2QpLGQzKSxucmIoaWNkLFdDKE9DKFYxLDEpLEVyZSwxNzAsMCxbZ2NkLGtjZCxoY2RdKSkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsYXplKSxieWUpLCdBZGRpdGlvbmFsIFBvcnQgU3BhY2UnKSwnQWRkaXRpb25hbCBzcGFjZSBhcm91bmQgdGhlIHNldHMgb2YgcG9ydHMgb24gZWFjaCBub2RlIHNpZGUuIEZvciBlYWNoIHNpZGUgb2YgYSBub2RlLCB0aGlzIG9wdGlvbiBjYW4gcmVzZXJ2ZSBhZGRpdGlvbmFsIHNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvcnRzIG9uIGVhY2ggc2lkZS4gRm9yIGV4YW1wbGUsIGEgdG9wIHNwYWNpbmcgb2YgMjAgbWFrZXMgc3VyZSB0aGF0IHRoZSBmaXJzdCBwb3J0IG9uIHRoZSB3ZXN0ZXJuIGFuZCBlYXN0ZXJuIHNpZGUgaXMgMjAgdW5pdHMgYXdheSBmcm9tIHRoZSBub3J0aGVybiBib3JkZXIuJyksemdkKSx3Y2QpLFoxKSxtcmIoamNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFp5ZSksaENlKSwnTGF5b3V0IFBhcnRpdGlvbicpLCdQYXJ0aXRpb24gdG8gd2hpY2ggdGhlIG5vZGUgYmVsb25ncy4gVGhpcyByZXF1aXJlcyBMYXlvdXQgUGFydGl0aW9uaW5nIHRvIGJlIGFjdGl2ZS4gTm9kZXMgd2l0aCBsb3dlciBwYXJ0aXRpb24gSURzIHdpbGwgYXBwZWFyIHRvIHRoZSBsZWZ0IG9mIG5vZGVzIHdpdGggaGlnaGVyIHBhcnRpdGlvbiBJRHMgKGFzc3VtaW5nIGEgbGVmdC10by1yaWdodCBsYXlvdXQgZGlyZWN0aW9uKS4nKSx2Y2QpLFVJKSxucmIoamNkLFdDKE9DKFYxLDEpLEVyZSwxNzAsMCxbaWNkXSkpKSkpO09hZChhLFp5ZSxZeWUsUGZkKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxZeWUpLGhDZSksJ0xheW91dCBQYXJ0aXRpb25pbmcnKSwnV2hldGhlciB0byBhY3RpdmF0ZSBwYXJ0aXRpb25lZCBsYXlvdXQuIFRoaXMgd2lsbCBhbGxvdyB0byBncm91cCBub2RlcyB0aHJvdWdoIHRoZSBMYXlvdXQgUGFydGl0aW9uIG9wdGlvbi4gYSBwYWlyIG9mIG5vZGVzIHdpdGggZGlmZmVyZW50IHBhcnRpdGlvbiBpbmRpY2VzIGlzIHRoZW4gcGxhY2VkIHN1Y2ggdGhhdCB0aGUgbm9kZSB3aXRoIGxvd2VyIGluZGV4IGlzIHBsYWNlZCB0byB0aGUgbGVmdCBvZiB0aGUgb3RoZXIgbm9kZSAod2l0aCBsZWZ0LXRvLXJpZ2h0IGxheW91dCBkaXJlY3Rpb24pLiBEZXBlbmRpbmcgb24gdGhlIGxheW91dCBhbGdvcml0aG0sIHRoaXMgbWF5IG9ubHkgYmUgZ3VhcmFudGVlZCB0byB3b3JrIGlmIGFsbCBub2RlcyBoYXZlIGEgbGF5b3V0IHBhcnRpdGlvbiBjb25maWd1cmVkLCBvciBhdCBsZWFzdCBpZiBlZGdlcyB0aGF0IGNyb3NzIHBhcnRpdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIGEgcGFydGl0aW9uLWNyb3NzaW5nIGN5Y2xlLicpLE5mZCkscmNkKSxHSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsSXllKSxpQ2UpLCdOb2RlIExhYmVsIFBhZGRpbmcnKSwnRGVmaW5lIHBhZGRpbmcgZm9yIG5vZGUgbGFiZWxzIHRoYXQgYXJlIHBsYWNlZCBpbnNpZGUgb2YgYSBub2RlLicpLHlmZCksd2NkKSwkMSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsWnVlKSxpQ2UpLCdOb2RlIExhYmVsIFBsYWNlbWVudCcpLCJIaW50cyBmb3Igd2hlcmUgbm9kZSBsYWJlbHMgYXJlIHRvIGJlIHBsYWNlZDsgaWYgZW1wdHksIHRoZSBub2RlIGxhYmVsJ3MgcG9zaXRpb24gaXMgbm90IG1vZGlmaWVkLiIpLEFmZCksdWNkKSxyMiksbnJiKGljZCxXQyhPQyhWMSwxKSxFcmUsMTcwLDAsW2hjZF0pKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxMeWUpLGpDZSksJ1BvcnQgQWxpZ25tZW50JyksJ0RlZmluZXMgdGhlIGRlZmF1bHQgcG9ydCBkaXN0cmlidXRpb24gZm9yIGEgbm9kZS4gTWF5IGJlIG92ZXJyaWRkZW4gZm9yIGVhY2ggc2lkZSBpbmRpdmlkdWFsbHkuJyksUmZkKSx0Y2QpLHMyKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE15ZSksakNlKSwnUG9ydCBBbGlnbm1lbnQgKE5vcnRoKScpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgbm9ydGhlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSx0Y2QpLHMyKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE55ZSksakNlKSwnUG9ydCBBbGlnbm1lbnQgKFNvdXRoKScpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgc291dGhlcm4gc2lkZSBhcmUgcGxhY2VkLCBvdmVycmlkaW5nIHRoZSBub2RlJ3MgZ2VuZXJhbCBwb3J0IGFsaWdubWVudC4iKSx0Y2QpLHMyKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLE95ZSksakNlKSwnUG9ydCBBbGlnbm1lbnQgKFdlc3QpJyksIkRlZmluZXMgaG93IHBvcnRzIG9uIHRoZSB3ZXN0ZXJuIHNpZGUgYXJlIHBsYWNlZCwgb3ZlcnJpZGluZyB0aGUgbm9kZSdzIGdlbmVyYWwgcG9ydCBhbGlnbm1lbnQuIiksdGNkKSxzMiksbXJiKGljZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxQeWUpLGpDZSksJ1BvcnQgQWxpZ25tZW50IChFYXN0KScpLCJEZWZpbmVzIGhvdyBwb3J0cyBvbiB0aGUgZWFzdGVybiBzaWRlIGFyZSBwbGFjZWQsIG92ZXJyaWRpbmcgdGhlIG5vZGUncyBnZW5lcmFsIHBvcnQgYWxpZ25tZW50LiIpLHRjZCksczIpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFl1ZSksa0NlKSwnTm9kZSBTaXplIENvbnN0cmFpbnRzJyksIldoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIGEgbm9kZSdzIHNpemUuIEVtcHR5IHNpemUgY29uc3RyYWludHMgc3BlY2lmeSB0aGF0IGEgbm9kZSdzIHNpemUgaXMgYWxyZWFkeSBmaXhlZCBhbmQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiIpLENmZCksdWNkKSx6MiksbXJiKGljZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsWHVlKSxrQ2UpLCdOb2RlIFNpemUgT3B0aW9ucycpLCdPcHRpb25zIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIHNpemUgY29uc3RyYWludHMgc2V0IG9uIGEgbm9kZS4gRWFjaCBtZW1iZXIgb2YgdGhlIHNldCBzcGVjaWZpZXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNhbGN1bGF0aW5nIG5vZGUgc2l6ZXMuIFRoZSBlbXB0eSBzZXQgY29ycmVzcG9uZHMgdG8gbm8gZnVydGhlciBtb2RpZmljYXRpb25zLicpLEhmZCksdWNkKSxBMiksbXJiKGljZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QscHZlKSxrQ2UpLCdOb2RlIFNpemUgTWluaW11bScpLCdUaGUgbWluaW1hbCBzaXplIHRvIHdoaWNoIGEgbm9kZSBjYW4gYmUgcmVkdWNlZC4nKSxGZmQpLHdjZCksYjIpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFd1ZSksa0NlKSwnRml4ZWQgR3JhcGggU2l6ZScpLCJCeSBkZWZhdWx0LCB0aGUgZml4ZWQgbGF5b3V0IHByb3ZpZGVyIHdpbGwgZW5sYXJnZSBhIGdyYXBoIHVudGlsIGl0IGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIGl0cyBjaGlsZHJlbi4gSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBpdCB3b24ndCBkbyBzby4iKSxmYWxzZSkscmNkKSxHSSksbXJiKGpjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsVHllKSxteWUpLCdFZGdlIExhYmVsIFBsYWNlbWVudCcpLCdHaXZlcyBhIGhpbnQgb24gd2hlcmUgdG8gcHV0IGVkZ2UgbGFiZWxzLicpLGNmZCksdGNkKSxrMiksbXJiKGhjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsVXVlKSxteWUpLCdJbmxpbmUgRWRnZSBMYWJlbHMnKSwiSWYgdHJ1ZSwgYW4gZWRnZSBsYWJlbCBpcyBwbGFjZWQgZGlyZWN0bHkgb24gaXRzIGVkZ2UuIE1heSBvbmx5IGFwcGx5IHRvIGNlbnRlciBlZGdlIGxhYmVscy4gVGhpcyBraW5kIG9mIGxhYmVsIHBsYWNlbWVudCBpcyBvbmx5IGFkdmlzYWJsZSBpZiB0aGUgbGFiZWwncyByZW5kZXJpbmcgaXMgc3VjaCB0aGF0IGl0IGlzIG5vdCBjcm9zc2VkIGJ5IGl0cyBlZGdlIGFuZCB0aHVzIHN0YXlzIGxlZ2libGUuIiksZmFsc2UpLHJjZCksR0kpLG1yYihoY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsY0NlKSwnZm9udCcpLCdGb250IE5hbWUnKSwnRm9udCBuYW1lIHVzZWQgZm9yIGEgbGFiZWwuJykseGNkKSxoSiksbXJiKGhjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxkQ2UpLCdmb250JyksJ0ZvbnQgU2l6ZScpLCdGb250IHNpemUgdXNlZCBmb3IgYSBsYWJlbC4nKSx2Y2QpLFVJKSxtcmIoaGNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLFh5ZSksbENlKSwnUG9ydCBBbmNob3IgT2Zmc2V0JyksJ1RoZSBvZmZzZXQgdG8gdGhlIHBvcnQgcG9zaXRpb24gd2hlcmUgY29ubmVjdGlvbnMgc2hhbGwgYmUgYXR0YWNoZWQuJyksd2NkKSxiMiksbXJiKGtjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxVeWUpLGxDZSksJ1BvcnQgSW5kZXgnKSwiVGhlIGluZGV4IG9mIGEgcG9ydCBpbiB0aGUgZml4ZWQgb3JkZXIgYXJvdW5kIGEgbm9kZS4gVGhlIG9yZGVyIGlzIGFzc3VtZWQgYXMgY2xvY2t3aXNlLCBzdGFydGluZyB3aXRoIHRoZSBsZWZ0bW9zdCBwb3J0IG9uIHRoZSB0b3Agc2lkZS4gVGhpcyBvcHRpb24gbXVzdCBiZSBzZXQgaWYgJ1BvcnQgQ29uc3RyYWludHMnIGlzIHNldCB0byBGSVhFRF9PUkRFUiBhbmQgbm8gc3BlY2lmaWMgcG9zaXRpb25zIGFyZSBnaXZlbiBmb3IgdGhlIHBvcnRzLiBBZGRpdGlvbmFsbHksIHRoZSBvcHRpb24gJ1BvcnQgU2lkZScgbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgY2FzZS4iKSx2Y2QpLFVJKSxtcmIoa2NkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxDeWUpLGxDZSksJ1BvcnQgU2lkZScpLCJUaGUgc2lkZSBvZiBhIG5vZGUgb24gd2hpY2ggYSBwb3J0IGlzIHNpdHVhdGVkLiBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpZiAnUG9ydCBDb25zdHJhaW50cycgaXMgc2V0IHRvIEZJWEVEX1NJREUgb3IgRklYRURfT1JERVIgYW5kIG5vIHNwZWNpZmljIHBvc2l0aW9ucyBhcmUgZ2l2ZW4gZm9yIHRoZSBwb3J0cy4iKSxlZ2QpLHRjZCksdjIpLG1yYihrY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsQXllKSxsQ2UpLCdQb3J0IEJvcmRlciBPZmZzZXQnKSwiVGhlIG9mZnNldCBvZiBwb3J0cyBvbiB0aGUgbm9kZSBib3JkZXIuIFdpdGggYSBwb3NpdGl2ZSBvZmZzZXQgdGhlIHBvcnQgaXMgbW92ZWQgb3V0c2lkZSBvZiB0aGUgbm9kZSwgd2hpbGUgd2l0aCBhIG5lZ2F0aXZlIG9mZnNldCB0aGUgcG9ydCBpcyBtb3ZlZCB0b3dhcmRzIHRoZSBpbnNpZGUuIEFuIG9mZnNldCBvZiAwIG1lYW5zIHRoYXQgdGhlIHBvcnQgaXMgcGxhY2VkIGRpcmVjdGx5IG9uIHRoZSBub2RlIGJvcmRlciwgaS5lLiBpZiB0aGUgcG9ydCBzaWRlIGlzIG5vcnRoLCB0aGUgcG9ydCdzIHNvdXRoIGJvcmRlciB0b3VjaGVzIHRoZSBub2RlcydzIG5vcnRoIGJvcmRlcjsgaWYgdGhlIHBvcnQgc2lkZSBpcyBlYXN0LCB0aGUgcG9ydCdzIHdlc3QgYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGVzJ3MgZWFzdCBib3JkZXI7IGlmIHRoZSBwb3J0IHNpZGUgaXMgc291dGgsIHRoZSBwb3J0J3Mgbm9ydGggYm9yZGVyIHRvdWNoZXMgdGhlIG5vZGUncyBzb3V0aCBib3JkZXI7IGlmIHRoZSBwb3J0IHNpZGUgaXMgd2VzdCwgdGhlIHBvcnQncyBlYXN0IGJvcmRlciB0b3VjaGVzIHRoZSBub2RlJ3Mgd2VzdCBib3JkZXIuIiksc2NkKSxMSSksbXJiKGtjZCkpKSk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsJHVlKSxtQ2UpLCdQb3J0IExhYmVsIFBsYWNlbWVudCcpLCJEZWNpZGVzIG9uIGEgcGxhY2VtZW50IG1ldGhvZCBmb3IgcG9ydCBsYWJlbHM7IGlmIGVtcHR5LCB0aGUgbm9kZSBsYWJlbCdzIHBvc2l0aW9uIGlzIG5vdCBtb2RpZmllZC4iKSxiZ2QpLHVjZCksdTIpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEp5ZSksbUNlKSwnUG9ydCBMYWJlbHMgTmV4dCB0byBQb3J0JyksIlVzZSAncG9ydExhYmVscy5wbGFjZW1lbnQnOiBORVhUX1RPX1BPUlRfT0ZfUE9TU0lCTEUuIiksZmFsc2UpLHJjZCksR0kpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLEt5ZSksbUNlKSwnVHJlYXQgUG9ydCBMYWJlbHMgYXMgR3JvdXAnKSwnSWYgdGhpcyBvcHRpb24gaXMgdHJ1ZSAoZGVmYXVsdCksIHRoZSBsYWJlbHMgb2YgYSBwb3J0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIGdyb3VwIHdoZW4gaXQgY29tZXMgdG8gY2VudGVyaW5nIHRoZW0gbmV4dCB0byB0aGVpciBwb3J0LiBJZiB0aGlzIG9wdGlvbiBpcyBmYWxzZSwgb25seSB0aGUgZmlyc3QgbGFiZWwgd2lsbCBiZSBjZW50ZXJlZCBuZXh0IHRvIHRoZSBwb3J0LCB3aXRoIHRoZSBvdGhlcnMgYmVpbmcgcGxhY2VkIGJlbG93LiBUaGlzIG9ubHkgYXBwbGllcyB0byBsYWJlbHMgb2YgZWFzdGVybiBhbmQgd2VzdGVybiBwb3J0cyBhbmQgd2lsbCBoYXZlIG5vIGVmZmVjdCBpZiBsYWJlbHMgYXJlIG5vdCBwbGFjZWQgbmV4dCB0byB0aGVpciBwb3J0LicpLHRydWUpLHJjZCksR0kpLG1yYihpY2QpKSkpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGF2ZSksbkNlKSwnVG9wZG93biBTY2FsZSBGYWN0b3InKSwiVGhlIHNjYWxpbmcgZmFjdG9yIHRvIGJlIGFwcGxpZWQgdG8gdGhlIG5vZGVzIGxhaWQgb3V0IHdpdGhpbiB0aGUgbm9kZSBpbiByZWN1cnNpdmUgdG9wZG93biBsYXlvdXQuIFRoZSBkaWZmZXJlbmNlIHRvICdTY2FsZSBGYWN0b3InIGlzIHRoYXQgdGhlIG5vZGUgaXRzZWxmIGlzIG5vdCBzY2FsZWQuIFRoaXMgdmFsdWUgaGFzIHRvIGJlIHNldCBvbiBoaWVyYXJjaGljYWwgbm9kZXMuIiksMSksc2NkKSxMSSksbXJiKGpjZCkpKSk7T2FkKGEsYXZlLGR2ZSxJZ2QpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGVDZSksbkNlKSwnVG9wZG93biBTaXplIEFwcHJveGltYXRvcicpLCdUaGUgc2l6ZSBhcHByb3hpbWF0b3IgdG8gYmUgdXNlZCB0byBzZXQgc2l6ZXMgb2YgaGllcmFyY2hpY2FsIG5vZGVzIGR1cmluZyB0b3Bkb3duIGxheW91dC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgd2hpY2ggcmVzdWx0cyBpbiBub2RlcyBrZWVwaW5nIHdoYXRldmVyIHNpemUgaXMgZGVmaW5lZCBmb3IgdGhlbSBlLmcuIHRocm91Z2ggcGFyZW50IHBhcmFsbGVsIG5vZGUgb3IgYnkgbWFudWFsbHkgc2V0dGluZyB0aGUgc2l6ZS4nKSxudWxsKSx0Y2QpLEUyKSxtcmIoaWNkKSkpKTtPYWQoYSxlQ2UsZHZlLEtnZCk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsYnZlKSxuQ2UpLCdUb3Bkb3duIEhpZXJhcmNoaWNhbCBOb2RlIFdpZHRoJyksJ1RoZSBmaXhlZCBzaXplIG9mIGEgaGllcmFyY2hpY2FsIG5vZGUgd2hlbiB1c2luZyB0b3Bkb3duIGxheW91dC4gSWYgdGhpcyB2YWx1ZSBpcyBzZXQgb24gYSBwYXJhbGxlbCBub2RlIGl0IGFwcGxpZXMgdG8gaXRzIGNoaWxkcmVuLCB3aGVuIHNldCBvbiBhIGhpZXJhcmNoaWNhbCBub2RlIGl0IGFwcGxpZXMgdG8gdGhlIG5vZGUgaXRzZWxmLicpLDE1MCksc2NkKSxMSSksbnJiKGpjZCxXQyhPQyhWMSwxKSxFcmUsMTcwLDAsW2ljZF0pKSkpKTtPYWQoYSxidmUsZHZlLG51bGwpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGN2ZSksbkNlKSwnVG9wZG93biBIaWVyYXJjaGljYWwgTm9kZSBBc3BlY3QgUmF0aW8nKSwnVGhlIGZpeGVkIGFzcGVjdCByYXRpbyBvZiBhIGhpZXJhcmNoaWNhbCBub2RlIHdoZW4gdXNpbmcgdG9wZG93biBsYXlvdXQuIERlZmF1bHQgaXMgMS9zcXJ0KDIpLiBJZiB0aGlzIHZhbHVlIGlzIHNldCBvbiBhIHBhcmFsbGVsIG5vZGUgaXQgYXBwbGllcyB0byBpdHMgY2hpbGRyZW4sIHdoZW4gc2V0IG9uIGEgaGllcmFyY2hpY2FsIG5vZGUgaXQgYXBwbGllcyB0byB0aGUgbm9kZSBpdHNlbGYuJyksMS40MTQpLHNjZCksTEkpLG5yYihqY2QsV0MoT0MoVjEsMSksRXJlLDE3MCwwLFtpY2RdKSkpKSk7T2FkKGEsY3ZlLGR2ZSxudWxsKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxkdmUpLG5DZSksJ1RvcGRvd24gTm9kZSBUeXBlJyksJ1RoZSBkaWZmZXJlbnQgbm9kZSB0eXBlcyB1c2VkIGZvciB0b3Bkb3duIGxheW91dC4gSWYgdGhlIG5vZGUgdHlwZSBpcyBzZXQgdG8ge0BsaW5rIFRvcGRvd25Ob2RlVHlwZXMuUEFSQUxMRUxfTk9ERX0gdGhlIGFsZ29yaXRobSBtdXN0IGJlIHNldCB0byBhIHtAbGluayBUb3Bkb3duTGF5b3V0UHJvdmlkZXJ9IHN1Y2ggYXMge0BsaW5rIFRvcGRvd25QYWNraW5nfS4gVGhlIHtAbGluayBub2RlU2l6ZS5maXhlZEdyYXBoU2l6ZX0gb3B0aW9uIGlzIHRlY2huaWNhbGx5IG9ubHkgcmVxdWlyZWQgZm9yIGhpZXJhcmNoaWNhbCBub2Rlcy4nKSxudWxsKSx0Y2QpLEIyKSxtcmIoaWNkKSkpKTtPYWQoYSxkdmUsV3VlLG51bGwpO1RhZChhLG5ldyBQYmQoZGNkKGNjZChlY2QoWWJkKFpiZChiY2QoJGJkKF9iZChuZXcgZmNkLGZDZSksbkNlKSwnVG9wZG93biBTY2FsZSBDYXAnKSwnRGV0ZXJtaW5lcyB0aGUgdXBwZXIgbGltaXQgZm9yIHRoZSB0b3Bkb3duIHNjYWxlIGZhY3Rvci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4wIHdoaWNoIGVuc3VyZXMgdGhhdCBuZXN0ZWQgY2hpbGRyZW4gbmV2ZXIgZW5kIHVwIGFwcGVhcmluZyBsYXJnZXIgdGhhbiB0aGVpciBwYXJlbnRzIGluIHRlcm1zIG9mIHVuaXQgc2l6ZXMgc3VjaCBhcyB0aGUgZm9udCBzaXplLiBJZiB0aGUgbGltaXQgaXMgbGFyZ2VyLCBub2RlcyB3aWxsIGZ1bGx5IHV0aWxpemUgdGhlIGF2YWlsYWJsZSBzcGFjZSwgYnV0IGl0IGlzIGNvdW50ZXJpbml1aXRpdmUgZm9yIGlubmVyIG5vZGVzIHRvIGhhdmUgYSBsYXJnZXIgc2NhbGUgdGhhbiBvdXRlciBub2Rlcy4nKSwxKSxzY2QpLExJKSxtcmIoamNkKSkpKTtPYWQoYSxmQ2UsZHZlLEdnZCk7VGFkKGEsbmV3IFBiZChkY2QoY2NkKGVjZChZYmQoWmJkKGJjZCgkYmQoX2JkKG5ldyBmY2QsRnllKSxvQ2UpLCdBY3RpdmF0ZSBJbnNpZGUgU2VsZiBMb29wcycpLCJXaGV0aGVyIHRoaXMgbm9kZSBhbGxvd3MgdG8gcm91dGUgc2VsZiBsb29wcyBpbnNpZGUgb2YgaXQgaW5zdGVhZCBvZiBhcm91bmQgaXQuIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgbWFrZSB0aGUgbm9kZSBhIGNvbXBvdW5kIG5vZGUgaWYgaXQgaXNuJ3QgYWxyZWFkeSwgYW5kIHdpbGwgcmVxdWlyZSB0aGUgbGF5b3V0IGFsZ29yaXRobSB0byBzdXBwb3J0IGNvbXBvdW5kIG5vZGVzIHdpdGggaGllcmFyY2hpY2FsIHBvcnRzLiIpLGZhbHNlKSxyY2QpLEdJKSxtcmIoaWNkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxHeWUpLG9DZSksJ0luc2lkZSBTZWxmIExvb3AnKSwnV2hldGhlciBhIHNlbGYgbG9vcCBzaG91bGQgYmUgcm91dGVkIGluc2lkZSBhIG5vZGUgaW5zdGVhZCBvZiBhcm91bmQgdGhhdCBub2RlLicpLGZhbHNlKSxyY2QpLEdJKSxtcmIoZ2NkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxTeWUpLCdlZGdlJyksJ0VkZ2UgVGhpY2tuZXNzJyksJ1RoZSB0aGlja25lc3Mgb2YgYW4gZWRnZS4gVGhpcyBpcyBhIGhpbnQgb24gdGhlIGxpbmUgd2lkdGggdXNlZCB0byBkcmF3IGFuIGVkZ2UsIHBvc3NpYmx5IHJlcXVpcmluZyBtb3JlIHNwYWNlIHRvIGJlIHJlc2VydmVkIGZvciBpdC4nKSwxKSxzY2QpLExJKSxtcmIoZ2NkKSkpKTtUYWQoYSxuZXcgUGJkKGRjZChjY2QoZWNkKFliZChaYmQoYmNkKCRiZChfYmQobmV3IGZjZCxnQ2UpLCdlZGdlJyksJ0VkZ2UgVHlwZScpLCdUaGUgdHlwZSBvZiBhbiBlZGdlLiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBmb3IgVU1MIGNsYXNzIGRpYWdyYW1zLCB3aGVyZSBhc3NvY2lhdGlvbnMgbXVzdCBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IGZyb20gZ2VuZXJhbGl6YXRpb25zLicpLGdmZCksdGNkKSxtMiksbXJiKGdjZCkpKSk7U2FkKGEsbmV3IHVhZChCYWQoRGFkKENhZChuZXcgRWFkLE9zZSksJ0xheWVyZWQnKSwnVGhlIGxheWVyLWJhc2VkIG1ldGhvZCB3YXMgaW50cm9kdWNlZCBieSBTdWdpeWFtYSwgVGFnYXdhIGFuZCBUb2RhIGluIDE5ODEuIEl0IGVtcGhhc2l6ZXMgdGhlIGRpcmVjdGlvbiBvZiBlZGdlcyBieSBwb2ludGluZyBhcyBtYW55IGVkZ2VzIGFzIHBvc3NpYmxlIGludG8gdGhlIHNhbWUgZGlyZWN0aW9uLiBUaGUgbm9kZXMgYXJlIGFycmFuZ2VkIGluIGxheWVycywgd2hpY2ggYXJlIHNvbWV0aW1lcyBjYWxsZWQgImhpZXJhcmNoaWVzIiwgYW5kIHRoZW4gcmVvcmRlcmVkIHN1Y2ggdGhhdCB0aGUgbnVtYmVyIG9mIGVkZ2UgY3Jvc3NpbmdzIGlzIG1pbmltaXplZC4gQWZ0ZXJ3YXJkcywgY29uY3JldGUgY29vcmRpbmF0ZXMgYXJlIGNvbXB1dGVkIGZvciB0aGUgbm9kZXMgYW5kIGVkZ2UgYmVuZCBwb2ludHMuJykpKTtTYWQoYSxuZXcgdWFkKEJhZChEYWQoQ2FkKG5ldyBFYWQsJ29yZy5lY2xpcHNlLmVsay5vcnRob2dvbmFsJyksJ09ydGhvZ29uYWwnKSwnT3J0aG9nb25hbCBtZXRob2RzIHRoYXQgZm9sbG93IHRoZSAidG9wb2xvZ3ktc2hhcGUtbWV0cmljcyIgYXBwcm9hY2ggYnkgQmF0aW5pLCBOYXJkZWxsaSBhbmQgVGFtYXNzaWEgXCc4Ni4gVGhlIGZpcnN0IHBoYXNlIGRldGVybWluZXMgdGhlIHRvcG9sb2d5IG9mIHRoZSBkcmF3aW5nIGJ5IGFwcGx5aW5nIGEgcGxhbmFyaXphdGlvbiB0ZWNobmlxdWUsIHdoaWNoIHJlc3VsdHMgaW4gYSBwbGFuYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoLiBUaGUgb3J0aG9nb25hbCBzaGFwZSBpcyBjb21wdXRlZCBpbiB0aGUgc2Vjb25kIHBoYXNlLCB3aGljaCBhaW1zIGF0IG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBlZGdlIGJlbmRzLCBhbmQgaXMgY2FsbGVkIG9ydGhvZ29uYWxpemF0aW9uLiBUaGUgdGhpcmQgcGhhc2UgbGVhZHMgdG8gY29uY3JldGUgY29vcmRpbmF0ZXMgZm9yIG5vZGVzIGFuZCBlZGdlIGJlbmQgcG9pbnRzIGJ5IGFwcGx5aW5nIGEgY29tcGFjdGlvbiBtZXRob2QsIHRodXMgZGVmaW5pbmcgdGhlIG1ldHJpY3MuJykpKTtTYWQoYSxuZXcgdWFkKEJhZChEYWQoQ2FkKG5ldyBFYWQsS3VlKSwnRm9yY2UnKSwnTGF5b3V0IGFsZ29yaXRobXMgdGhhdCBmb2xsb3cgcGh5c2ljYWwgYW5hbG9naWVzIGJ5IHNpbXVsYXRpbmcgYSBzeXN0ZW0gb2YgYXR0cmFjdGl2ZSBhbmQgcmVwdWxzaXZlIGZvcmNlcy4gVGhlIGZpcnN0IHN1Y2Nlc3NmdWwgbWV0aG9kIG9mIHRoaXMga2luZCB3YXMgcHJvcG9zZWQgYnkgRWFkZXMgaW4gMTk4NC4nKSkpO1NhZChhLG5ldyB1YWQoQmFkKERhZChDYWQobmV3IEVhZCwnb3JnLmVjbGlwc2UuZWxrLmNpcmNsZScpLCdDaXJjbGUnKSwnQ2lyY3VsYXIgbGF5b3V0IGFsZ29yaXRobXMgZW1waGFzaXplIGN5Y2xlcyBvciBiaWNvbm5lY3RlZCBjb21wb25lbnRzIG9mIGEgZ3JhcGggYnkgYXJyYW5naW5nIHRoZW0gaW4gY2lyY2xlcy4gVGhpcyBpcyB1c2VmdWwgaWYgYSBkcmF3aW5nIGlzIGRlc2lyZWQgd2hlcmUgc3VjaCBjb21wb25lbnRzIGFyZSBjbGVhcmx5IGdyb3VwZWQsIG9yIHdoZXJlIGN5Y2xlcyBhcmUgc2hvd24gYXMgcHJvbWluZW50IE9QVElPTlMgb2YgdGhlIGdyYXBoLicpKSk7U2FkKGEsbmV3IHVhZChCYWQoRGFkKENhZChuZXcgRWFkLFZ6ZSksJ1RyZWUnKSwnU3BlY2lhbGl6ZWQgbGF5b3V0IG1ldGhvZHMgZm9yIHRyZWVzLCBpLmUuIGFjeWNsaWMgZ3JhcGhzLiBUaGUgcmVndWxhciBzdHJ1Y3R1cmUgb2YgZ3JhcGhzIHRoYXQgaGF2ZSBubyB1bmRpcmVjdGVkIGN5Y2xlcyBjYW4gYmUgZW1waGFzaXplZCB1c2luZyBhbiBhbGdvcml0aG0gb2YgdGhpcyB0eXBlLicpKSk7U2FkKGEsbmV3IHVhZChCYWQoRGFkKENhZChuZXcgRWFkLCdvcmcuZWNsaXBzZS5lbGsucGxhbmFyJyksJ1BsYW5hcicpLCdBbGdvcml0aG1zIHRoYXQgcmVxdWlyZSBhIHBsYW5hciBvciB1cHdhcmQgcGxhbmFyIGdyYXBoLiBNb3N0IG9mIHRoZXNlIGFsZ29yaXRobXMgYXJlIHRoZW9yZXRpY2FsbHkgaW50ZXJlc3RpbmcsIGJ1dCBub3QgcHJhY3RpY2FsbHkgdXNhYmxlLicpKSk7U2FkKGEsbmV3IHVhZChCYWQoRGFkKENhZChuZXcgRWFkLHlBZSksJ1JhZGlhbCcpLCdSYWRpYWwgbGF5b3V0IGFsZ29yaXRobXMgdXN1YWxseSBwb3NpdGlvbiB0aGUgbm9kZXMgb2YgdGhlIGdyYXBoIG9uIGNvbmNlbnRyaWMgY2lyY2xlcy4nKSkpO1hoZCgobmV3IFloZCxhKSk7dmVkKChuZXcgd2VkLGEpKTtma2QoKG5ldyBna2QsYSkpfTt2YXIgTmVkLE9lZCxQZWQsUWVkLFJlZCxTZWQsVGVkLFVlZCxWZWQsV2VkLFhlZCxZZWQsWmVkLCRlZCxfZWQsYWZkLGJmZCxjZmQsZGZkLGVmZCxmZmQsZ2ZkLGhmZCxpZmQsamZkLGtmZCxsZmQsbWZkLG5mZCxvZmQscGZkLHFmZCxyZmQsc2ZkLHRmZCx1ZmQsdmZkLHdmZCx4ZmQseWZkLHpmZCxBZmQsQmZkLENmZCxEZmQsRWZkLEZmZCxHZmQsSGZkLElmZCxKZmQsS2ZkLExmZCxNZmQsTmZkLE9mZCxQZmQsUWZkLFJmZCxTZmQsVGZkLFVmZCxWZmQsV2ZkLFhmZCxZZmQsWmZkLCRmZCxfZmQsYWdkLGJnZCxjZ2QsZGdkLGVnZCxmZ2QsZ2dkLGhnZCxpZ2QsamdkLGtnZCxsZ2QsbWdkLG5nZCxvZ2QscGdkLHFnZCxyZ2Qsc2dkLHRnZCx1Z2QsdmdkLHdnZCx4Z2QseWdkLHpnZCxBZ2QsQmdkLENnZCxEZ2QsRWdkLEZnZCxHZ2QsSGdkLElnZCxKZ2QsS2dkO3ZhciBoMj1qZWIoR0JlLCdDb3JlT3B0aW9ucycsNjg0KTtZY2IoODYsMjMsezM6MSwzNDoxLDIzOjEsODY6MX0sWGdkKTt2YXIgT2dkLFBnZCxRZ2QsUmdkLFNnZDt2YXIgaTI9a2ViKEdCZSwnRGlyZWN0aW9uJyw4NixNSSxaZ2QsWWdkKTt2YXIgJGdkO1ljYigyNzUsMjMsezM6MSwzNDoxLDIzOjEsMjc1OjF9LGZoZCk7dmFyIGFoZCxiaGQsY2hkLGRoZDt2YXIgajI9a2ViKEdCZSwnRWRnZUNvb3JkcycsMjc1LE1JLGhoZCxnaGQpO3ZhciBpaGQ7WWNiKDI3NiwyMyx7MzoxLDM0OjEsMjM6MSwyNzY6MX0sb2hkKTt2YXIga2hkLGxoZCxtaGQ7dmFyIGsyPWtlYihHQmUsJ0VkZ2VMYWJlbFBsYWNlbWVudCcsMjc2LE1JLHFoZCxwaGQpO3ZhciByaGQ7WWNiKDIyMCwyMyx7MzoxLDM0OjEsMjM6MSwyMjA6MX0seWhkKTt2YXIgdGhkLHVoZCx2aGQsd2hkO3ZhciBsMj1rZWIoR0JlLCdFZGdlUm91dGluZycsMjIwLE1JLEFoZCx6aGQpO3ZhciBCaGQ7WWNiKDMyMiwyMyx7MzoxLDM0OjEsMjM6MSwzMjI6MX0sS2hkKTt2YXIgRGhkLEVoZCxGaGQsR2hkLEhoZCxJaGQ7dmFyIG0yPWtlYihHQmUsJ0VkZ2VUeXBlJywzMjIsTUksTWhkLExoZCk7dmFyIE5oZDtZY2IoOTY2LDEsSHVlLFloZCk7Xy50Zj1mdW5jdGlvbiBaaGQoYSl7WGhkKGEpfTt2YXIgUGhkLFFoZCxSaGQsU2hkLFRoZCxVaGQsVmhkO3ZhciBvMj1qZWIoR0JlLCdGaXhlZExheW91dGVyT3B0aW9ucycsOTY2KTtZY2IoOTY3LDEse30sJGhkKTtfLnVmPWZ1bmN0aW9uIF9oZCgpe3ZhciBhO3JldHVybiBhPW5ldyBMbmQsYX07Xy52Zj1mdW5jdGlvbiBhaWQoYSl7fTt2YXIgbjI9amViKEdCZSwnRml4ZWRMYXlvdXRlck9wdGlvbnMvRml4ZWRGYWN0b3J5Jyw5NjcpO1ljYigzNDIsMjMsezM6MSwzNDoxLDIzOjEsMzQyOjF9LGZpZCk7dmFyIGJpZCxjaWQsZGlkO3ZhciBwMj1rZWIoR0JlLCdIaWVyYXJjaHlIYW5kbGluZycsMzQyLE1JLGhpZCxnaWQpO3ZhciBpaWQ7WWNiKDI4OSwyMyx7MzoxLDM0OjEsMjM6MSwyODk6MX0scWlkKTt2YXIga2lkLGxpZCxtaWQsbmlkO3ZhciBxMj1rZWIoR0JlLCdMYWJlbFNpZGUnLDI4OSxNSSxzaWQscmlkKTt2YXIgdGlkO1ljYig5NCwyMyx7MzoxLDM0OjEsMjM6MSw5NDoxfSxGaWQpO3ZhciB2aWQsd2lkLHhpZCx5aWQsemlkLEFpZCxCaWQsQ2lkLERpZDt2YXIgcjI9a2ViKEdCZSwnTm9kZUxhYmVsUGxhY2VtZW50Jyw5NCxNSSxJaWQsSGlkKTt2YXIgSmlkO1ljYigyNTUsMjMsezM6MSwzNDoxLDIzOjEsMjU1OjF9LFJpZCk7dmFyIExpZCxNaWQsTmlkLE9pZCxQaWQ7dmFyIHMyPWtlYihHQmUsJ1BvcnRBbGlnbm1lbnQnLDI1NSxNSSxUaWQsU2lkKTt2YXIgVWlkO1ljYigxMDAsMjMsezM6MSwzNDoxLDIzOjEsMTAwOjF9LGRqZCk7dmFyIFdpZCxYaWQsWWlkLFppZCwkaWQsX2lkO3ZhciB0Mj1rZWIoR0JlLCdQb3J0Q29uc3RyYWludHMnLDEwMCxNSSxmamQsZWpkKTt2YXIgZ2pkO1ljYigyNzcsMjMsezM6MSwzNDoxLDIzOjEsMjc3OjF9LHBqZCk7dmFyIGlqZCxqamQsa2pkLGxqZCxtamQsbmpkO3ZhciB1Mj1rZWIoR0JlLCdQb3J0TGFiZWxQbGFjZW1lbnQnLDI3NyxNSSx0amQsc2pkKTt2YXIgdWpkO1ljYig2NCwyMyx7MzoxLDM0OjEsMjM6MSw2NDoxfSxWamQpO3ZhciB3amQseGpkLHlqZCx6amQsQWpkLEJqZCxDamQsRGpkLEVqZCxGamQsR2pkLEhqZCxJamQsSmpkLEtqZCxMamQsTWpkLE5qZCxPamQsUGpkLFFqZDt2YXIgdjI9a2ViKEdCZSwnUG9ydFNpZGUnLDY0LE1JLFlqZCxYamQpO3ZhciBaamQ7WWNiKDk3MCwxLEh1ZSxna2QpO18udGY9ZnVuY3Rpb24gaGtkKGEpe2ZrZChhKX07dmFyIF9qZCxha2QsYmtkLGNrZCxka2Q7dmFyIHgyPWplYihHQmUsJ1JhbmRvbUxheW91dGVyT3B0aW9ucycsOTcwKTtZY2IoOTcxLDEse30saWtkKTtfLnVmPWZ1bmN0aW9uIGprZCgpe3ZhciBhO3JldHVybiBhPW5ldyBLb2QsYX07Xy52Zj1mdW5jdGlvbiBra2QoYSl7fTt2YXIgdzI9amViKEdCZSwnUmFuZG9tTGF5b3V0ZXJPcHRpb25zL1JhbmRvbUZhY3RvcnknLDk3MSk7WWNiKDI5NywyMyx7MzoxLDM0OjEsMjM6MSwyOTc6MX0scGtkKTt2YXIgbGtkLG1rZCxua2Q7dmFyIHkyPWtlYihHQmUsJ1NoYXBlQ29vcmRzJywyOTcsTUkscmtkLHFrZCk7dmFyIHNrZDtZY2IoMzc4LDIzLHszOjEsMzQ6MSwyMzoxLDM3ODoxfSx6a2QpO3ZhciB1a2QsdmtkLHdrZCx4a2Q7dmFyIHoyPWtlYihHQmUsJ1NpemVDb25zdHJhaW50JywzNzgsTUksQmtkLEFrZCk7dmFyIENrZDtZY2IoMjY0LDIzLHszOjEsMzQ6MSwyMzoxLDI2NDoxfSxPa2QpO3ZhciBFa2QsRmtkLEdrZCxIa2QsSWtkLEprZCxLa2QsTGtkLE1rZDt2YXIgQTI9a2ViKEdCZSwnU2l6ZU9wdGlvbnMnLDI2NCxNSSxRa2QsUGtkKTt2YXIgUmtkO1ljYigyNzgsMjMsezM6MSwzNDoxLDIzOjEsMjc4OjF9LFhrZCk7dmFyIFRrZCxVa2QsVmtkO3ZhciBCMj1rZWIoR0JlLCdUb3Bkb3duTm9kZVR5cGVzJywyNzgsTUksWmtkLFlrZCk7dmFyICRrZDtZY2IoMzQzLDIzLHNDZSk7dmFyIGFsZCxibGQ7dmFyIEUyPWtlYihHQmUsJ1RvcGRvd25TaXplQXBwcm94aW1hdG9yJywzNDMsTUksZmxkLGVsZCk7WWNiKDk2NCwzNDMsc0NlLGhsZCk7Xy5SZz1mdW5jdGlvbiBpbGQoYSl7cmV0dXJuIGdsZChhKX07dmFyIEMyPWtlYihHQmUsJ1RvcGRvd25TaXplQXBwcm94aW1hdG9yLzEnLDk2NCxFMixudWxsLG51bGwpO1ljYig5NjUsMzQzLHNDZSxqbGQpO18uUmc9ZnVuY3Rpb24ga2xkKGIpe3ZhciBjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1LHYsdyxBLEIsQyxEO2M9SkQoa3NkKGIsKExnZCgpLGlnZCkpLDE0OSk7QT0oSHBkKCksbz1uZXcgY3hkLG8pO2RzZChBLGIpO0I9bmV3IElyYjtmb3IoZz1uZXcgQ0hkKCghYi5hJiYoYi5hPW5ldyBYMGQoQTMsYiwxMCwxMSkpLGIuYSkpO2cuZSE9Zy5pLmdjKCk7KXtlPUpEKEFIZChnKSwyNyk7dD0obj1uZXcgY3hkLG4pO2F4ZCh0LEEpO2RzZCh0LGUpO0Q9Z2xkKGUpO2R0ZCh0LCR3bmQuTWF0aC5tYXgoZS5nLEQuYSksJHduZC5NYXRoLm1heChlLmYsRC5iKSk7Z3NiKEIuZixlLHQpfWZvcihmPW5ldyBDSGQoKCFiLmEmJihiLmE9bmV3IFgwZChBMyxiLDEwLDExKSksYi5hKSk7Zi5lIT1mLmkuZ2MoKTspe2U9SkQoQUhkKGYpLDI3KTtmb3IobD1uZXcgQ0hkKCghZS5lJiYoZS5lPW5ldyByZWUoeDMsZSw3LDQpKSxlLmUpKTtsLmUhPWwuaS5nYygpOyl7az1KRChBSGQobCksODUpO3Y9SkQoV2QoZnNiKEIuZixlKSksMjcpO3c9SkQoTmliKEIsbkRkKCghay5jJiYoay5jPW5ldyByZWUodjMsayw1LDgpKSxrLmMpLDApKSwyNyk7dT0obT1uZXcgVnRkLG0pO3RDZCgoIXUuYiYmKHUuYj1uZXcgcmVlKHYzLHUsNCw3KSksdS5iKSx2KTt0Q2QoKCF1LmMmJih1LmM9bmV3IHJlZSh2Myx1LDUsOCkpLHUuYyksdyk7VHRkKHUsWndkKHYpKTtkc2QodSxrKX19cT1KRChWbmQoYy5mKSwyMjIpO3RyeXtxLmtmKEEsbmV3IGhvZCk7V25kKGMuZixxKX1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDEwMykpe3A9YTt0aHJvdyBzY2IocCl9ZWxzZSB0aHJvdyBzY2IoYSl9bHNkKEEsVmVkKXx8bHNkKEEsVWVkKXx8Wm1kKEEpO2o9QmViKE1EKGtzZChBLFZlZCkpKTtpPUJlYihNRChrc2QoQSxVZWQpKSk7aD1qL2k7ZD1CZWIoTUQoa3NkKEEsQ2dkKSkpKiR3bmQuTWF0aC5zcXJ0KCghQS5hJiYoQS5hPW5ldyBYMGQoQTMsQSwxMCwxMSkpLEEuYSkuaSk7Qz1KRChrc2QoQSxLZmQpLDEwNyk7cz1DLmIrQy5jKzE7cj1DLmQrQy5hKzE7cmV0dXJuIG5ldyBFZGQoJHduZC5NYXRoLm1heChzLGQpLCR3bmQuTWF0aC5tYXgocixkL2gpKX07dmFyIEQyPWtlYihHQmUsJ1RvcGRvd25TaXplQXBwcm94aW1hdG9yLzInLDk2NSxFMixudWxsLG51bGwpO3ZhciBsbGQ7WWNiKDM0MCwxLHs4NDc6MX0sd2xkKTtfLlNnPWZ1bmN0aW9uIHhsZChhLGIpe3JldHVybiBubGQodGhpcyxhLGIpfTtfLlRnPWZ1bmN0aW9uIHlsZCgpe3BsZCh0aGlzKX07Xy5VZz1mdW5jdGlvbiB6bGQoKXtyZXR1cm4gdGhpcy5xfTtfLlZnPWZ1bmN0aW9uIEFsZCgpe3JldHVybiAhdGhpcy5mP251bGw6eW5iKHRoaXMuZil9O18uV2c9ZnVuY3Rpb24gQmxkKCl7cmV0dXJuIHluYih0aGlzLmEpfTtfLlhnPWZ1bmN0aW9uIENsZCgpe3JldHVybiB0aGlzLnB9O18uWWc9ZnVuY3Rpb24gRGxkKCl7cmV0dXJuIGZhbHNlfTtfLlpnPWZ1bmN0aW9uIEVsZCgpe3JldHVybiB0aGlzLm59O18uJGc9ZnVuY3Rpb24gRmxkKCl7cmV0dXJuIHRoaXMucCE9bnVsbCYmIXRoaXMuYn07Xy5fZz1mdW5jdGlvbiBHbGQoYSl7dmFyIGI7aWYodGhpcy5uKXtiPWE7SWxiKHRoaXMuZixiKX19O18uYWg9ZnVuY3Rpb24gSGxkKGEsYil7dmFyIGMsZDt0aGlzLm4mJiEhYSYmcmxkKHRoaXMsKGM9bmV3IHNmZSxkPWtmZShjLGEpLHJmZShjKSxkKSwoYm9kKCksJG5kKSl9O18uYmg9ZnVuY3Rpb24gSWxkKGEpe3ZhciBiO2lmKHRoaXMuYil7cmV0dXJuIG51bGx9ZWxzZXtiPW9sZCh0aGlzLHRoaXMuZyk7QXRiKHRoaXMuYSxiKTtiLmk9dGhpczt0aGlzLmQ9YTtyZXR1cm4gYn19O18uZGg9ZnVuY3Rpb24gSmxkKGEpe2E+MCYmIXRoaXMuYiYmcWxkKHRoaXMsYSl9O18uYj1mYWxzZTtfLmM9MDtfLmQ9LTE7Xy5lPW51bGw7Xy5mPW51bGw7Xy5nPS0xO18uaj1mYWxzZTtfLms9ZmFsc2U7Xy5uPWZhbHNlO18ubz0wO18ucT0wO18ucj0wO3ZhciBHMj1qZWIoY3plLCdCYXNpY1Byb2dyZXNzTW9uaXRvcicsMzQwKTtZY2IoNzAxLDIyMix0dWUsVGxkKTtfLmtmPWZ1bmN0aW9uIFhsZChhLGIpe01sZChhLGIpfTt2YXIgTjI9amViKGN6ZSwnQm94TGF5b3V0UHJvdmlkZXInLDcwMSk7WWNiKDk2MCwxLEJ0ZSxabGQpO18uTGU9ZnVuY3Rpb24gJGxkKGEsYil7cmV0dXJuIFlsZCh0aGlzLEpEKGEsMjcpLEpEKGIsMjcpKX07Xy5GYj1mdW5jdGlvbiBfbGQoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIGFtZCgpe3JldHVybiBuZXcgdXFiKHRoaXMpfTtfLmE9ZmFsc2U7dmFyIEgyPWplYihjemUsJ0JveExheW91dFByb3ZpZGVyLzEnLDk2MCk7WWNiKDE2MiwxLHsxNjI6MX0saG1kLGltZCk7Xy5JYj1mdW5jdGlvbiBqbWQoKXtyZXR1cm4gdGhpcy5jP2J4ZCh0aGlzLmMpOkVlKHRoaXMuYil9O3ZhciBJMj1qZWIoY3plLCdCb3hMYXlvdXRQcm92aWRlci9Hcm91cCcsMTYyKTtZY2IoMzIxLDIzLHszOjEsMzQ6MSwyMzoxLDMyMToxfSxwbWQpO3ZhciBrbWQsbG1kLG1tZCxubWQ7dmFyIEoyPWtlYihjemUsJ0JveExheW91dFByb3ZpZGVyL1BhY2tpbmdNb2RlJywzMjEsTUkscm1kLHFtZCk7dmFyIHNtZDtZY2IoOTYxLDEsQnRlLHVtZCk7Xy5MZT1mdW5jdGlvbiB2bWQoYSxiKXtyZXR1cm4gVWxkKEpEKGEsMTYyKSxKRChiLDE2MikpfTtfLkZiPWZ1bmN0aW9uIHdtZChhKXtyZXR1cm4gdGhpcz09PWF9O18uTWU9ZnVuY3Rpb24geG1kKCl7cmV0dXJuIG5ldyB1cWIodGhpcyl9O3ZhciBLMj1qZWIoY3plLCdCb3hMYXlvdXRQcm92aWRlci9sYW1iZGEkMCRUeXBlJyw5NjEpO1ljYig5NjIsMSxCdGUseW1kKTtfLkxlPWZ1bmN0aW9uIHptZChhLGIpe3JldHVybiBWbGQoSkQoYSwxNjIpLEpEKGIsMTYyKSl9O18uRmI9ZnVuY3Rpb24gQW1kKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBCbWQoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIEwyPWplYihjemUsJ0JveExheW91dFByb3ZpZGVyL2xhbWJkYSQxJFR5cGUnLDk2Mik7WWNiKDk2MywxLEJ0ZSxDbWQpO18uTGU9ZnVuY3Rpb24gRG1kKGEsYil7cmV0dXJuIFdsZChKRChhLDE2MiksSkQoYiwxNjIpKX07Xy5GYj1mdW5jdGlvbiBFbWQoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIEZtZCgpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgTTI9amViKGN6ZSwnQm94TGF5b3V0UHJvdmlkZXIvbGFtYmRhJDIkVHlwZScsOTYzKTtZY2IoMTMyMywxLHs4MjQ6MX0sR21kKTtfLktnPWZ1bmN0aW9uIEhtZChhLGIpe3JldHVybiBKd2MoKSwhUkQoYiwxNzMpfHxIOGMoKHc4YygpLHY4YyxKRChhLDE3MykpLGIpfTt2YXIgTzI9amViKGN6ZSwnRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDAkVHlwZScsMTMyMyk7WWNiKDEzMjQsMSxrcmUsSW1kKTtfLkFkPWZ1bmN0aW9uIEptZChhKXtNd2ModGhpcy5hLEpEKGEsMTQ0KSl9O3ZhciBQMj1qZWIoY3plLCdFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkMSRUeXBlJywxMzI0KTtZY2IoMTMyNSwxLGtyZSxLbWQpO18uQWQ9ZnVuY3Rpb24gTG1kKGEpe0pEKGEsMTAyKTtKd2MoKX07dmFyIFEyPWplYihjemUsJ0Vsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQyJFR5cGUnLDEzMjUpO1ljYigxMzI5LDEsa3JlLE1tZCk7Xy5BZD1mdW5jdGlvbiBObWQoYSl7TndjKHRoaXMuYSxKRChhLDEwMikpfTt2YXIgUjI9amViKGN6ZSwnRWxrU3BhY2luZ3MvQWJzdHJhY3RTcGFjaW5nc0J1aWxkZXIvbGFtYmRhJDMkVHlwZScsMTMyOSk7WWNiKDEzMjcsMSxJcmUsT21kKTtfLk1iPWZ1bmN0aW9uIFBtZChhKXtyZXR1cm4gT3djKHRoaXMuYSx0aGlzLmIsSkQoYSwxNDQpKX07dmFyIFMyPWplYihjemUsJ0Vsa1NwYWNpbmdzL0Fic3RyYWN0U3BhY2luZ3NCdWlsZGVyL2xhbWJkYSQ0JFR5cGUnLDEzMjcpO1ljYigxMzI2LDEsSXJlLFFtZCk7Xy5NYj1mdW5jdGlvbiBSbWQoYSl7cmV0dXJuIFF3Yyh0aGlzLmEsdGhpcy5iLEpEKGEsODI0KSl9O3ZhciBUMj1qZWIoY3plLCdFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkNSRUeXBlJywxMzI2KTtZY2IoMTMyOCwxLGtyZSxTbWQpO18uQWQ9ZnVuY3Rpb24gVG1kKGEpe1B3Yyh0aGlzLmEsdGhpcy5iLEpEKGEsMTQ0KSl9O3ZhciBVMj1qZWIoY3plLCdFbGtTcGFjaW5ncy9BYnN0cmFjdFNwYWNpbmdzQnVpbGRlci9sYW1iZGEkNiRUeXBlJywxMzI4KTtZY2IoOTI1LDEse30sdG5kKTtfLktiPWZ1bmN0aW9uIHVuZChhKXtyZXR1cm4gc25kKGEpfTtfLkZiPWZ1bmN0aW9uIHZuZChhKXtyZXR1cm4gdGhpcz09PWF9O3ZhciBXMj1qZWIoY3plLCdFbGtVdGlsL2xhbWJkYSQwJFR5cGUnLDkyNSk7WWNiKDkyNiwxLGtyZSx3bmQpO18uQWQ9ZnVuY3Rpb24geG5kKGEpe2duZCh0aGlzLmEsdGhpcy5iLEpEKGEsODUpKX07Xy5hPTA7Xy5iPTA7dmFyIFgyPWplYihjemUsJ0Vsa1V0aWwvbGFtYmRhJDEkVHlwZScsOTI2KTtZY2IoOTI3LDEsa3JlLHluZCk7Xy5BZD1mdW5jdGlvbiB6bmQoYSl7aG5kKHRoaXMuYSx0aGlzLmIsSkQoYSwxNjgpKX07Xy5hPTA7Xy5iPTA7dmFyIFkyPWplYihjemUsJ0Vsa1V0aWwvbGFtYmRhJDIkVHlwZScsOTI3KTtZY2IoOTI4LDEsa3JlLEFuZCk7Xy5BZD1mdW5jdGlvbiBCbmQoYSl7aW5kKHRoaXMuYSx0aGlzLmIsSkQoYSwxNTMpKX07Xy5hPTA7Xy5iPTA7dmFyIFoyPWplYihjemUsJ0Vsa1V0aWwvbGFtYmRhJDMkVHlwZScsOTI4KTtZY2IoOTI5LDEsa3JlLENuZCk7Xy5BZD1mdW5jdGlvbiBEbmQoYSl7am5kKHRoaXMuYSxKRChhLDM2OSkpfTt2YXIgJDI9amViKGN6ZSwnRWxrVXRpbC9sYW1iZGEkNCRUeXBlJyw5MjkpO1ljYigzMjYsMSx7MzQ6MSwzMjY6MX0sRm5kKTtfLkRkPWZ1bmN0aW9uIEduZChhKXtyZXR1cm4gRW5kKHRoaXMsSkQoYSwyNDEpKX07Xy5GYj1mdW5jdGlvbiBIbmQoYSl7dmFyIGI7aWYoUkQoYSwzMjYpKXtiPUpEKGEsMzI2KTtyZXR1cm4gdGhpcy5hPT1iLmF9cmV0dXJuIGZhbHNlfTtfLkhiPWZ1bmN0aW9uIEluZCgpe3JldHVybiBZRCh0aGlzLmEpfTtfLkliPWZ1bmN0aW9uIEpuZCgpe3JldHVybiB0aGlzLmErJyAoZXhjbHVzaXZlKSd9O18uYT0wO3ZhciBfMj1qZWIoY3plLCdFeGNsdXNpdmVCb3VuZHMvRXhjbHVzaXZlTG93ZXJCb3VuZCcsMzI2KTtZY2IoMTA4MywyMjIsdHVlLExuZCk7Xy5rZj1mdW5jdGlvbiBNbmQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcsQSxCO2IuU2coJ0ZpeGVkIExheW91dCcsMSk7Zj1KRChrc2QoYSwoTGdkKCksZGZkKSksMjIwKTtsPTA7bT0wO2ZvcihzPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7cy5lIT1zLmkuZ2MoKTspe3E9SkQoQUhkKHMpLDI3KTtCPUpEKGtzZChxLChXaGQoKSxWaGQpKSw4KTtpZihCKXtmdGQocSxCLmEsQi5iKTtpZihKRChrc2QocSxRaGQpLDE4MSkuR2MoKHlrZCgpLHVrZCkpKXtuPUpEKGtzZChxLFNoZCksOCk7bi5hPjAmJm4uYj4wJiZtbmQocSxuLmEsbi5iLHRydWUsdHJ1ZSl9fWw9JHduZC5NYXRoLm1heChsLHEuaStxLmcpO209JHduZC5NYXRoLm1heChtLHEuaitxLmYpO2ZvcihqPW5ldyBDSGQoKCFxLm4mJihxLm49bmV3IFgwZCh6MyxxLDEsNykpLHEubikpO2ouZSE9ai5pLmdjKCk7KXtoPUpEKEFIZChqKSwxNTMpO0I9SkQoa3NkKGgsVmhkKSw4KTshIUImJmZ0ZChoLEIuYSxCLmIpO2w9JHduZC5NYXRoLm1heChsLHEuaStoLmkraC5nKTttPSR3bmQuTWF0aC5tYXgobSxxLmoraC5qK2guZil9Zm9yKHY9bmV3IENIZCgoIXEuYyYmKHEuYz1uZXcgWDBkKEIzLHEsOSw5KSkscS5jKSk7di5lIT12LmkuZ2MoKTspe3U9SkQoQUhkKHYpLDEyNCk7Qj1KRChrc2QodSxWaGQpLDgpOyEhQiYmZnRkKHUsQi5hLEIuYik7dz1xLmkrdS5pO0E9cS5qK3UuajtsPSR3bmQuTWF0aC5tYXgobCx3K3UuZyk7bT0kd25kLk1hdGgubWF4KG0sQSt1LmYpO2ZvcihpPW5ldyBDSGQoKCF1Lm4mJih1Lm49bmV3IFgwZCh6Myx1LDEsNykpLHUubikpO2kuZSE9aS5pLmdjKCk7KXtoPUpEKEFIZChpKSwxNTMpO0I9SkQoa3NkKGgsVmhkKSw4KTshIUImJmZ0ZChoLEIuYSxCLmIpO2w9JHduZC5NYXRoLm1heChsLHcraC5pK2guZyk7bT0kd25kLk1hdGgubWF4KG0sQStoLmoraC5mKX19Zm9yKGU9bmV3IGVzKElyKCRCZChxKS5hLkpjKCksbmV3IGVyKSk7Y3MoZSk7KXtjPUpEKGRzKGUpLDg1KTtrPUtuZChjKTtsPSR3bmQuTWF0aC5tYXgobCxrLmEpO209JHduZC5NYXRoLm1heChtLGsuYil9Zm9yKGQ9bmV3IGVzKElyKFpCZChxKS5hLkpjKCksbmV3IGVyKSk7Y3MoZCk7KXtjPUpEKGRzKGQpLDg1KTtpZihad2QoaUNkKGMpKSE9YSl7az1LbmQoYyk7bD0kd25kLk1hdGgubWF4KGwsay5hKTttPSR3bmQuTWF0aC5tYXgobSxrLmIpfX19aWYoZj09KHhoZCgpLHRoZCkpe2ZvcihyPW5ldyBDSGQoKCFhLmEmJihhLmE9bmV3IFgwZChBMyxhLDEwLDExKSksYS5hKSk7ci5lIT1yLmkuZ2MoKTspe3E9SkQoQUhkKHIpLDI3KTtmb3IoZD1uZXcgZXMoSXIoJEJkKHEpLmEuSmMoKSxuZXcgZXIpKTtjcyhkKTspe2M9SkQoZHMoZCksODUpO2c9Ym5kKGMpO2cuYj09MD9tc2QoYyx0ZmQsbnVsbCk6bXNkKGMsdGZkLGcpfX19aWYoIXlkYihMRChrc2QoYSwoV2hkKCksUmhkKSkpKSl7dD1KRChrc2QoYSxUaGQpLDEwNyk7cD1sK3QuYit0LmM7bz1tK3QuZCt0LmE7bW5kKGEscCxvLHRydWUsdHJ1ZSl9Yi5UZygpfTt2YXIgYTM9amViKGN6ZSwnRml4ZWRMYXlvdXRQcm92aWRlcicsMTA4Myk7WWNiKDM3NywxNDgsezM6MSw0MTE6MSwzNzc6MSwxMDI6MSwxNDg6MX0sTm5kLE9uZCk7Xy5hZz1mdW5jdGlvbiBSbmQoYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2lmKCFiKXtyZXR1cm59dHJ5e2o9bWdiKGIsJzssOycpO2ZvcihnPWosaD0wLGk9Zy5sZW5ndGg7aDxpOysraCl7Zj1nW2hdO2Q9bWdiKGYsJ1xcOicpO2U9S2FkKE5hZCgpLGRbMF0pO2lmKCFlKXt0aHJvdyBzY2IobmV3IFRlYignSW52YWxpZCBvcHRpb24gaWQ6ICcrZFswXSkpfWs9T2JkKGUsZFsxXSk7aWYoaz09bnVsbCl7dGhyb3cgc2NiKG5ldyBUZWIoJ0ludmFsaWQgb3B0aW9uIHZhbHVlOiAnK2RbMV0pKX1rPT1udWxsPyghdGhpcy5xJiYodGhpcy5xPW5ldyBJcmIpLFNpYih0aGlzLnEsZSkpOighdGhpcy5xJiYodGhpcy5xPW5ldyBJcmIpLFFpYih0aGlzLnEsZSxrKSl9fWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsMTAzKSl7Yz1hO3Rocm93IHNjYihuZXcgVWViKGMpKX1lbHNlIHRocm93IHNjYihhKX19O18uSWI9ZnVuY3Rpb24gU25kKCl7dmFyIGE7YT1PRCh5QmIoRkJiKCghdGhpcy5xPyhwbmIoKSxwbmIoKSxubmIpOnRoaXMucSkudmMoKS5NYygpLG5ldyBUbmQpLGdBYihuZXcgREFiLG5ldyBCQWIsbmV3IHRBYixuZXcgdkFiLFdDKE9DKEhMLDEpLEVyZSwxMzEsMCxbXSkpKSk7cmV0dXJuIGF9O3ZhciBkMz1qZWIoY3plLCdJbmRpdmlkdWFsU3BhY2luZ3MnLDM3Nyk7WWNiKDk1OSwxLHt9LFRuZCk7Xy5LYj1mdW5jdGlvbiBVbmQoYSl7cmV0dXJuIFFuZChKRChhLDQzKSl9O3ZhciBjMz1qZWIoY3plLCdJbmRpdmlkdWFsU3BhY2luZ3MvbGFtYmRhJDAkVHlwZScsOTU5KTtZY2IoNzAyLDEse30sWG5kKTtfLmM9MDt2YXIgZTM9amViKGN6ZSwnSW5zdGFuY2VQb29sJyw3MDIpO1ljYigxNzgxLDEse30sWW5kKTt2YXIgZzM9amViKGN6ZSwnTG9nZ2VkR3JhcGgnLDE3ODEpO1ljYig0MDQsMjMsezM6MSwzNDoxLDIzOjEsNDA0OjF9LGNvZCk7dmFyIFpuZCwkbmQsX25kLGFvZDt2YXIgZjM9a2ViKGN6ZSwnTG9nZ2VkR3JhcGgvVHlwZScsNDA0LE1JLGVvZCxkb2QpO3ZhciBmb2Q7WWNiKDEwMzgsMSx7ODQ3OjF9LGhvZCk7Xy5TZz1mdW5jdGlvbiBpb2QoYSxiKXtyZXR1cm4gZmFsc2V9O18uVGc9ZnVuY3Rpb24gam9kKCl7fTtfLlVnPWZ1bmN0aW9uIGtvZCgpe3JldHVybiAwfTtfLlZnPWZ1bmN0aW9uIGxvZCgpe3JldHVybiBudWxsfTtfLldnPWZ1bmN0aW9uIG1vZCgpe3JldHVybiBudWxsfTtfLlhnPWZ1bmN0aW9uIG5vZCgpe3JldHVybiBudWxsfTtfLllnPWZ1bmN0aW9uIG9vZCgpe3JldHVybiBmYWxzZX07Xy5aZz1mdW5jdGlvbiBwb2QoKXtyZXR1cm4gZmFsc2V9O18uJGc9ZnVuY3Rpb24gcW9kKCl7cmV0dXJuIGZhbHNlfTtfLl9nPWZ1bmN0aW9uIHJvZChhKXt9O18uYWg9ZnVuY3Rpb24gc29kKGEsYil7fTtfLmJoPWZ1bmN0aW9uIHRvZChhKXtyZXR1cm4gdGhpc307Xy5kaD1mdW5jdGlvbiB1b2QoYSl7fTt2YXIgaDM9amViKGN6ZSwnTnVsbEVsa1Byb2dyZXNzTW9uaXRvcicsMTAzOCk7WWNiKDQ3LDEsezIwOjEsNDc6MX0seG9kKTtfLkljPWZ1bmN0aW9uIHpvZChhKXtvZmIodGhpcyxhKX07Xy5GYj1mdW5jdGlvbiB5b2QoYSl7dmFyIGIsYyxkO2lmKFJEKGEsNDcpKXtjPUpEKGEsNDcpO2I9dGhpcy5hPT1udWxsP2MuYT09bnVsbDpwYih0aGlzLmEsYy5hKTtkPXRoaXMuYj09bnVsbD9jLmI9PW51bGw6cGIodGhpcy5iLGMuYik7cmV0dXJuIGImJmR9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLkhiPWZ1bmN0aW9uIEFvZCgpe3ZhciBhLGIsYyxkLGUsZjtjPXRoaXMuYT09bnVsbD8wOnRiKHRoaXMuYSk7YT1jJldyZTtiPWMmLTY1NTM2O2Y9dGhpcy5iPT1udWxsPzA6dGIodGhpcy5iKTtkPWYmV3JlO2U9ZiYtNjU1MzY7cmV0dXJuIGFeZT4+MTYmV3JlfGJeZDw8MTZ9O18uSmM9ZnVuY3Rpb24gQm9kKCl7cmV0dXJuIG5ldyBEb2QodGhpcyl9O18uSWI9ZnVuY3Rpb24gQ29kKCl7cmV0dXJuIHRoaXMuYT09bnVsbCYmdGhpcy5iPT1udWxsPydwYWlyKG51bGwsbnVsbCknOnRoaXMuYT09bnVsbD8ncGFpcihudWxsLCcrYWRiKHRoaXMuYikrJyknOnRoaXMuYj09bnVsbD8ncGFpcignK2FkYih0aGlzLmEpKycsbnVsbCknOidwYWlyKCcrYWRiKHRoaXMuYSkrJywnK2FkYih0aGlzLmIpKycpJ307dmFyIGozPWplYihjemUsJ1BhaXInLDQ3KTtZY2IoOTcyLDEsV3FlLERvZCk7Xy5OYj1mdW5jdGlvbiBFb2QoYSl7T3NiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gRm9kKCl7cmV0dXJuICF0aGlzLmMmJighdGhpcy5iJiZ0aGlzLmEuYSE9bnVsbHx8dGhpcy5hLmIhPW51bGwpfTtfLlBiPWZ1bmN0aW9uIEdvZCgpe2lmKCF0aGlzLmMmJiF0aGlzLmImJnRoaXMuYS5hIT1udWxsKXt0aGlzLmI9dHJ1ZTtyZXR1cm4gdGhpcy5hLmF9ZWxzZSBpZighdGhpcy5jJiZ0aGlzLmEuYiE9bnVsbCl7dGhpcy5jPXRydWU7cmV0dXJuIHRoaXMuYS5ifXRocm93IHNjYihuZXcgcXViKX07Xy5RYj1mdW5jdGlvbiBIb2QoKXt0aGlzLmMmJnRoaXMuYS5iIT1udWxsPyh0aGlzLmEuYj1udWxsKTp0aGlzLmImJnRoaXMuYS5hIT1udWxsJiYodGhpcy5hLmE9bnVsbCk7dGhyb3cgc2NiKG5ldyBWZWIpfTtfLmI9ZmFsc2U7Xy5jPWZhbHNlO3ZhciBpMz1qZWIoY3plLCdQYWlyLzEnLDk3Mik7WWNiKDEwNzMsMjIyLHR1ZSxLb2QpO18ua2Y9ZnVuY3Rpb24gTG9kKGEsYil7dmFyIGMsZCxlLGYsZztiLlNnKCdSYW5kb20gTGF5b3V0JywxKTtpZigoIWEuYSYmKGEuYT1uZXcgWDBkKEEzLGEsMTAsMTEpKSxhLmEpLmk9PTApe2IuVGcoKTtyZXR1cm59Zj1KRChrc2QoYSwoZWtkKCksY2tkKSksMTcpOyEhZiYmZi5hIT0wPyhlPW5ldyBEdmIoZi5hKSk6KGU9bmV3IEN2Yik7Yz1EZWIoTUQoa3NkKGEsX2pkKSkpO2c9RGViKE1EKGtzZChhLGRrZCkpKTtkPUpEKGtzZChhLGFrZCksMTA3KTtKb2QoYSxlLGMsZyxkKTtiLlRnKCl9O3ZhciBrMz1qZWIoY3plLCdSYW5kb21MYXlvdXRQcm92aWRlcicsMTA3Myk7WWNiKDIzOSwxLHsyMzk6MX0sTW9kKTtfLkZiPWZ1bmN0aW9uIE5vZChhKXtyZXR1cm4gdHViKHRoaXMuYSxKRChhLDIzOSkuYSkmJnR1Yih0aGlzLmIsSkQoYSwyMzkpLmIpJiZ0dWIodGhpcy5jLEpEKGEsMjM5KS5jKX07Xy5IYj1mdW5jdGlvbiBPb2QoKXtyZXR1cm4gS21iKFdDKE9DKGFKLDEpLE5xZSwxLDUsW3RoaXMuYSx0aGlzLmIsdGhpcy5jXSkpfTtfLkliPWZ1bmN0aW9uIFBvZCgpe3JldHVybiAnKCcrdGhpcy5hK0xxZSt0aGlzLmIrTHFlK3RoaXMuYysnKSd9O3ZhciBsMz1qZWIoY3plLCdUcmlwbGUnLDIzOSk7dmFyIFFvZDtZY2IoNTQ3LDEse30pO18uSmY9ZnVuY3Rpb24gVW9kKCl7cmV0dXJuIG5ldyBFZGQodGhpcy5mLmksdGhpcy5mLmopfTtfLm1mPWZ1bmN0aW9uIFZvZChhKXtpZihJQmQoYSwoTGdkKCksWGZkKSkpe3JldHVybiBrc2QodGhpcy5mLFNvZCl9cmV0dXJuIGtzZCh0aGlzLmYsYSl9O18uS2Y9ZnVuY3Rpb24gV29kKCl7cmV0dXJuIG5ldyBFZGQodGhpcy5mLmcsdGhpcy5mLmYpfTtfLkxmPWZ1bmN0aW9uIFhvZCgpe3JldHVybiB0aGlzLmd9O18ubmY9ZnVuY3Rpb24gWW9kKGEpe3JldHVybiBsc2QodGhpcy5mLGEpfTtfLk1mPWZ1bmN0aW9uIFpvZChhKXtodGQodGhpcy5mLGEuYSk7aXRkKHRoaXMuZixhLmIpfTtfLk5mPWZ1bmN0aW9uICRvZChhKXtndGQodGhpcy5mLGEuYSk7ZXRkKHRoaXMuZixhLmIpfTtfLk9mPWZ1bmN0aW9uIF9vZChhKXt0aGlzLmc9YX07Xy5nPTA7dmFyIFNvZDt2YXIgbTM9amViKHZDZSwnRWxrR3JhcGhBZGFwdGVycy9BYnN0cmFjdEVsa0dyYXBoRWxlbWVudEFkYXB0ZXInLDU0Nyk7WWNiKDU0OCwxLHs4MzI6MX0sYXBkKTtfLlBmPWZ1bmN0aW9uIGJwZCgpe3ZhciBhLGI7aWYoIXRoaXMuYil7dGhpcy5iPWJ2KE9zZCh0aGlzLmEpLmkpO2ZvcihiPW5ldyBDSGQoT3NkKHRoaXMuYSkpO2IuZSE9Yi5pLmdjKCk7KXthPUpEKEFIZChiKSwxNTMpO0lsYih0aGlzLmIsbmV3IGZwZChhKSl9fXJldHVybiB0aGlzLmJ9O18uYj1udWxsO3ZhciBuMz1qZWIodkNlLCdFbGtHcmFwaEFkYXB0ZXJzL0Vsa0VkZ2VBZGFwdGVyJyw1NDgpO1ljYigyODcsNTQ3LHt9LGRwZCk7Xy5RZj1mdW5jdGlvbiBlcGQoKXtyZXR1cm4gY3BkKHRoaXMpfTtfLmE9bnVsbDt2YXIgbzM9amViKHZDZSwnRWxrR3JhcGhBZGFwdGVycy9FbGtHcmFwaEFkYXB0ZXInLDI4Nyk7WWNiKDYyNSw1NDcsezE4NzoxfSxmcGQpO3ZhciBwMz1qZWIodkNlLCdFbGtHcmFwaEFkYXB0ZXJzL0Vsa0xhYmVsQWRhcHRlcicsNjI1KTtZY2IoNjI0LDU0Nyx7NjgwOjF9LGpwZCk7Xy5QZj1mdW5jdGlvbiBtcGQoKXtyZXR1cm4gZ3BkKHRoaXMpfTtfLlRmPWZ1bmN0aW9uIG5wZCgpe3ZhciBhO3JldHVybiBhPUpEKGtzZCh0aGlzLmYsKExnZCgpLHZmZCkpLDEzOSksIWEmJihhPW5ldyBaWGIpLGF9O18uVmY9ZnVuY3Rpb24gcHBkKCl7cmV0dXJuIGhwZCh0aGlzKX07Xy5YZj1mdW5jdGlvbiBycGQoYSl7dmFyIGI7Yj1uZXcgYVliKGEpO21zZCh0aGlzLmYsKExnZCgpLHZmZCksYil9O18uWWY9ZnVuY3Rpb24gc3BkKGEpe21zZCh0aGlzLmYsKExnZCgpLEtmZCksbmV3IE5ZYihhKSl9O18uUmY9ZnVuY3Rpb24ga3BkKCl7cmV0dXJuIHRoaXMuZH07Xy5TZj1mdW5jdGlvbiBscGQoKXt2YXIgYSxiO2lmKCF0aGlzLmEpe3RoaXMuYT1uZXcgVWxiO2ZvcihiPW5ldyBlcyhJcihaQmQoSkQodGhpcy5mLDI3KSkuYS5KYygpLG5ldyBlcikpO2NzKGIpOyl7YT1KRChkcyhiKSw4NSk7SWxiKHRoaXMuYSxuZXcgYXBkKGEpKX19cmV0dXJuIHRoaXMuYX07Xy5VZj1mdW5jdGlvbiBvcGQoKXt2YXIgYSxiO2lmKCF0aGlzLmMpe3RoaXMuYz1uZXcgVWxiO2ZvcihiPW5ldyBlcyhJcigkQmQoSkQodGhpcy5mLDI3KSkuYS5KYygpLG5ldyBlcikpO2NzKGIpOyl7YT1KRChkcyhiKSw4NSk7SWxiKHRoaXMuYyxuZXcgYXBkKGEpKX19cmV0dXJuIHRoaXMuY307Xy5XZj1mdW5jdGlvbiBxcGQoKXtyZXR1cm4gWHdkKEpEKHRoaXMuZiwyNykpLmkhPTB8fHlkYihMRChKRCh0aGlzLmYsMjcpLm1mKChMZ2QoKSxsZmQpKSkpfTtfLlpmPWZ1bmN0aW9uIHRwZCgpe2lwZCh0aGlzLChSb2QoKSxRb2QpKX07Xy5hPW51bGw7Xy5iPW51bGw7Xy5jPW51bGw7Xy5kPW51bGw7Xy5lPW51bGw7dmFyIHEzPWplYih2Q2UsJ0Vsa0dyYXBoQWRhcHRlcnMvRWxrTm9kZUFkYXB0ZXInLDYyNCk7WWNiKDEyNDQsNTQ3LHs4MzE6MX0sdnBkKTtfLlBmPWZ1bmN0aW9uIHhwZCgpe3JldHVybiB1cGQodGhpcyl9O18uU2Y9ZnVuY3Rpb24gd3BkKCl7dmFyIGEsYjtpZighdGhpcy5hKXt0aGlzLmE9YXYoSkQodGhpcy5mLDEyNCkuZmgoKS5pKTtmb3IoYj1uZXcgQ0hkKEpEKHRoaXMuZiwxMjQpLmZoKCkpO2IuZSE9Yi5pLmdjKCk7KXthPUpEKEFIZChiKSw4NSk7SWxiKHRoaXMuYSxuZXcgYXBkKGEpKX19cmV0dXJuIHRoaXMuYX07Xy5VZj1mdW5jdGlvbiB5cGQoKXt2YXIgYSxiO2lmKCF0aGlzLmMpe3RoaXMuYz1hdihKRCh0aGlzLmYsMTI0KS5naCgpLmkpO2ZvcihiPW5ldyBDSGQoSkQodGhpcy5mLDEyNCkuZ2goKSk7Yi5lIT1iLmkuZ2MoKTspe2E9SkQoQUhkKGIpLDg1KTtJbGIodGhpcy5jLG5ldyBhcGQoYSkpfX1yZXR1cm4gdGhpcy5jfTtfLiRmPWZ1bmN0aW9uIHpwZCgpe3JldHVybiBKRChKRCh0aGlzLmYsMTI0KS5tZigoTGdkKCksZGdkKSksNjQpfTtfLl9mPWZ1bmN0aW9uIEFwZCgpe3ZhciBhLGIsYyxkLGUsZixnLGg7ZD1veGQoSkQodGhpcy5mLDEyNCkpO2ZvcihjPW5ldyBDSGQoSkQodGhpcy5mLDEyNCkuZ2goKSk7Yy5lIT1jLmkuZ2MoKTspe2E9SkQoQUhkKGMpLDg1KTtmb3IoaD1uZXcgQ0hkKCghYS5jJiYoYS5jPW5ldyByZWUodjMsYSw1LDgpKSxhLmMpKTtoLmUhPWguaS5nYygpOyl7Zz1KRChBSGQoaCksODQpO2lmKGtDZChfQmQoZyksZCkpe3JldHVybiB0cnVlfWVsc2UgaWYoX0JkKGcpPT1kJiZ5ZGIoTEQoa3NkKGEsKExnZCgpLG1mZCkpKSkpe3JldHVybiB0cnVlfX19Zm9yKGI9bmV3IENIZChKRCh0aGlzLmYsMTI0KS5maCgpKTtiLmUhPWIuaS5nYygpOyl7YT1KRChBSGQoYiksODUpO2ZvcihmPW5ldyBDSGQoKCFhLmImJihhLmI9bmV3IHJlZSh2MyxhLDQsNykpLGEuYikpO2YuZSE9Zi5pLmdjKCk7KXtlPUpEKEFIZChmKSw4NCk7aWYoa0NkKF9CZChlKSxkKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9O18uYT1udWxsO18uYj1udWxsO18uYz1udWxsO3ZhciByMz1qZWIodkNlLCdFbGtHcmFwaEFkYXB0ZXJzL0Vsa1BvcnRBZGFwdGVyJywxMjQ0KTtZY2IoMTI0NSwxLEJ0ZSxDcGQpO18uTGU9ZnVuY3Rpb24gRHBkKGEsYil7cmV0dXJuIEJwZChKRChhLDEyNCksSkQoYiwxMjQpKX07Xy5GYj1mdW5jdGlvbiBFcGQoYSl7cmV0dXJuIHRoaXM9PT1hfTtfLk1lPWZ1bmN0aW9uIEZwZCgpe3JldHVybiBuZXcgdXFiKHRoaXMpfTt2YXIgczM9amViKHZDZSwnRWxrR3JhcGhBZGFwdGVycy9Qb3J0Q29tcGFyYXRvcicsMTI0NSk7dmFyIGo2PWxlYih3Q2UsJ0VPYmplY3QnKTt2YXIgdDM9bGViKHhDZSx5Q2UpO3ZhciB1Mz1sZWIoeENlLHpDZSk7dmFyIHkzPWxlYih4Q2UsQUNlKTt2YXIgQzM9bGViKHhDZSwnRWxrU2hhcGUnKTt2YXIgdjM9bGViKHhDZSxCQ2UpO3ZhciB4Mz1sZWIoeENlLENDZSk7dmFyIHczPWxlYih4Q2UsRENlKTt2YXIgaDY9bGViKHdDZSxFQ2UpO3ZhciBmNj1sZWIod0NlLCdFRmFjdG9yeScpO3ZhciBHcGQ7dmFyIGk2PWxlYih3Q2UsRkNlKTt2YXIgbDY9bGViKHdDZSwnRVBhY2thZ2UnKTt2YXIgSXBkO3ZhciBLcGQsTHBkLE1wZCxOcGQsT3BkLFBwZCxRcGQsUnBkLFNwZCxUcGQsVXBkO3ZhciB6Mz1sZWIoeENlLEdDZSk7dmFyIEEzPWxlYih4Q2UsSENlKTt2YXIgQjM9bGViKHhDZSxJQ2UpO1ljYig5MiwxLEpDZSk7Xy5waD1mdW5jdGlvbiBYcGQoKXt0aGlzLnFoKCk7cmV0dXJuIG51bGx9O18ucWg9ZnVuY3Rpb24gWXBkKCl7cmV0dXJuIG51bGx9O18ucmg9ZnVuY3Rpb24gWnBkKCl7cmV0dXJuIHRoaXMucWgoKSxmYWxzZX07Xy5zaD1mdW5jdGlvbiAkcGQoKXtyZXR1cm4gZmFsc2V9O18udGg9ZnVuY3Rpb24gX3BkKGEpe1dwZCh0aGlzLGEpfTt2YXIgJDQ9amViKEtDZSwnQmFzaWNOb3RpZmllckltcGwnLDkyKTtZY2IoOTgsOTIsU0NlKTtfLlVoPWZ1bmN0aW9uIGhyZCgpe3JldHVybiBxcWQodGhpcyl9O18udWg9ZnVuY3Rpb24gSHFkKGEsYil7cmV0dXJuIGF9O18udmg9ZnVuY3Rpb24gSXFkKCl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLndoPWZ1bmN0aW9uIEpxZChhKXt2YXIgYjtyZXR1cm4gYj1zMWQoSkQoUVRkKHRoaXMuemgoKSx0aGlzLkJoKCkpLDE5KSksdGhpcy5MaCgpLlBoKHRoaXMsYi5uLGIuZixhKX07Xy54aD1mdW5jdGlvbiBLcWQoYSxiKXt0aHJvdyBzY2IobmV3IGFoYil9O18ueWg9ZnVuY3Rpb24gTHFkKGEsYixjKXtyZXR1cm4gYnFkKHRoaXMsYSxiLGMpfTtfLnpoPWZ1bmN0aW9uIE1xZCgpe3ZhciBhO2lmKHRoaXMudmgoKSl7YT10aGlzLnZoKCkuS2soKTtpZihhKXtyZXR1cm4gYX19cmV0dXJuIHRoaXMuZWkoKX07Xy5BaD1mdW5jdGlvbiBOcWQoKXtyZXR1cm4gY3FkKHRoaXMpfTtfLkJoPWZ1bmN0aW9uIE9xZCgpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5DaD1mdW5jdGlvbiBRcWQoKXt2YXIgYSxiO2I9dGhpcy5XaCgpLkxrKCk7IWImJnRoaXMudmgoKS5RayhiPShnJGQoKSxhPWlXZChNVGQodGhpcy56aCgpKSksYT09bnVsbD9mJGQ6bmV3IGokZCh0aGlzLGEpKSk7cmV0dXJuIGJ9O18uRGg9ZnVuY3Rpb24gU3FkKGEsYil7cmV0dXJuIGF9O18uRWg9ZnVuY3Rpb24gVHFkKGEpe3ZhciBiO2I9YS5taygpO3JldHVybiAhYj9XVGQodGhpcy56aCgpLGEpOmEuSWooKX07Xy5GaD1mdW5jdGlvbiBVcWQoKXt2YXIgYTthPXRoaXMudmgoKTtyZXR1cm4gIWE/bnVsbDphLk5rKCl9O18uR2g9ZnVuY3Rpb24gVnFkKCl7cmV0dXJuICF0aGlzLnZoKCk/bnVsbDp0aGlzLnZoKCkuS2soKX07Xy5IaD1mdW5jdGlvbiBXcWQoYSxiLGMpe3JldHVybiBocWQodGhpcyxhLGIsYyl9O18uSWg9ZnVuY3Rpb24gWHFkKGEpe3JldHVybiBpcWQodGhpcyxhKX07Xy5KaD1mdW5jdGlvbiBZcWQoYSxiKXtyZXR1cm4ganFkKHRoaXMsYSxiKX07Xy5LaD1mdW5jdGlvbiBacWQoKXt2YXIgYTthPXRoaXMudmgoKTtyZXR1cm4gISFhJiZhLk9rKCl9O18uTGg9ZnVuY3Rpb24gJHFkKCl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLk1oPWZ1bmN0aW9uIF9xZCgpe3JldHVybiBscWQodGhpcyl9O18uTmg9ZnVuY3Rpb24gYXJkKGEsYixjLGQpe3JldHVybiBtcWQodGhpcyxhLGIsZCl9O18uT2g9ZnVuY3Rpb24gYnJkKGEsYixjKXt2YXIgZDtyZXR1cm4gZD1KRChRVGQodGhpcy56aCgpLGIpLDY5KSxkLnRrKCkud2sodGhpcyx0aGlzLmRpKCksYi10aGlzLmZpKCksYSxjKX07Xy5QaD1mdW5jdGlvbiBjcmQoYSxiLGMsZCl7cmV0dXJuIG5xZCh0aGlzLGEsYixkKX07Xy5RaD1mdW5jdGlvbiBkcmQoYSxiLGMpe3ZhciBkO3JldHVybiBkPUpEKFFUZCh0aGlzLnpoKCksYiksNjkpLGQudGsoKS54ayh0aGlzLHRoaXMuZGkoKSxiLXRoaXMuZmkoKSxhLGMpfTtfLlJoPWZ1bmN0aW9uIGVyZCgpe3JldHVybiAhIXRoaXMudmgoKSYmISF0aGlzLnZoKCkuTWsoKX07Xy5TaD1mdW5jdGlvbiBmcmQoYSl7cmV0dXJuIG9xZCh0aGlzLGEpfTtfLlRoPWZ1bmN0aW9uIGdyZChhKXtyZXR1cm4gcHFkKHRoaXMsYSl9O18uVmg9ZnVuY3Rpb24gaXJkKGEpe3JldHVybiB0cWQodGhpcyxhKX07Xy5XaD1mdW5jdGlvbiBqcmQoKXt0aHJvdyBzY2IobmV3IGFoYil9O18uWGg9ZnVuY3Rpb24ga3JkKCl7cmV0dXJuICF0aGlzLnZoKCk/bnVsbDp0aGlzLnZoKCkuTWsoKX07Xy5ZaD1mdW5jdGlvbiBscmQoKXtyZXR1cm4gbHFkKHRoaXMpfTtfLlpoPWZ1bmN0aW9uIG1yZChhLGIpe0FxZCh0aGlzLGEsYil9O18uJGg9ZnVuY3Rpb24gbnJkKGEpe3RoaXMuV2goKS5QayhhKX07Xy5faD1mdW5jdGlvbiBvcmQoYSl7dGhpcy5XaCgpLlNrKGEpfTtfLmFpPWZ1bmN0aW9uIHByZChhKXt0aGlzLldoKCkuUmsoYSl9O18uYmk9ZnVuY3Rpb24gcXJkKGEsYil7dmFyIGMsZCxlLGY7Zj10aGlzLkZoKCk7aWYoISFmJiYhIWEpe2I9UUdkKGYuQmwoKSx0aGlzLGIpO2YuRmwodGhpcyl9ZD10aGlzLkxoKCk7aWYoZCl7aWYoKFBxZCh0aGlzLHRoaXMuTGgoKSx0aGlzLkJoKCkpLkJiJlBzZSkhPTApe2U9ZC5NaCgpOyEhZSYmKCFhP2UuRWwodGhpcyk6IWYmJmUuRmwodGhpcykpfWVsc2V7Yj0oYz10aGlzLkJoKCksYz49MD90aGlzLndoKGIpOnRoaXMuTGgoKS5QaCh0aGlzLC0xLWMsbnVsbCxiKSk7Yj10aGlzLnloKG51bGwsLTEsYil9fXRoaXMuX2goYSk7cmV0dXJuIGJ9O18uY2k9ZnVuY3Rpb24gcnJkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk7Yz10aGlzLnpoKCk7Zj1XVGQoYyxhKTtiPXRoaXMuZmkoKTtpZihmPj1iKXtyZXR1cm4gSkQoYSw2OSkudGsoKS5Bayh0aGlzLHRoaXMuZGkoKSxmLWIpfWVsc2UgaWYoZjw9LTEpe2c9WjlkKChHZmUoKSxFZmUpLGMsYSk7aWYoZyl7SWZlKCk7SkQoZyw2OSkudWsoKXx8KGc9VWFlKGphZShFZmUsZykpKTtlPShkPXRoaXMuRWgoZyksSkQoZD49MD90aGlzLkhoKGQsdHJ1ZSx0cnVlKTp1cWQodGhpcyxnLHRydWUpLDE1OSkpO2k9Zy5GaygpO2lmKGk+MXx8aT09LTEpe3JldHVybiBKRChKRChlLDIxOCkuUGwoYSxmYWxzZSksNzYpfX1lbHNle3Rocm93IHNjYihuZXcgVGViKExDZSthLnZlKCkrT0NlKSl9fWVsc2UgaWYoYS5HaygpKXtyZXR1cm4gZD10aGlzLkVoKGEpLEpEKGQ+PTA/dGhpcy5IaChkLGZhbHNlLHRydWUpOnVxZCh0aGlzLGEsZmFsc2UpLDc2KX1oPW5ldyBnUGQodGhpcyxhKTtyZXR1cm4gaH07Xy5kaT1mdW5jdGlvbiBzcmQoKXtyZXR1cm4gQ3FkKHRoaXMpfTtfLmVpPWZ1bmN0aW9uIHRyZCgpe3JldHVybiAoR09kKCksRk9kKS5TfTtfLmZpPWZ1bmN0aW9uIHVyZCgpe3JldHVybiBWVGQodGhpcy5laSgpKX07Xy5naT1mdW5jdGlvbiB2cmQoYSl7RXFkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gd3JkKCl7cmV0dXJuIEdxZCh0aGlzKX07dmFyIHk2PWplYihUQ2UsJ0Jhc2ljRU9iamVjdEltcGwnLDk4KTt2YXIgc09kO1ljYigxMTcsOTgsezEwOToxLDkzOjEsOTI6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwxMTc6MX0pO18uaGk9ZnVuY3Rpb24gRnJkKGEpe3ZhciBiO2I9enJkKHRoaXMpO3JldHVybiBiW2FdfTtfLmlpPWZ1bmN0aW9uIEdyZChhLGIpe3ZhciBjO2M9enJkKHRoaXMpO1ZDKGMsYSxiKX07Xy5qaT1mdW5jdGlvbiBIcmQoYSl7dmFyIGI7Yj16cmQodGhpcyk7VkMoYixhLG51bGwpfTtfLnBoPWZ1bmN0aW9uIElyZCgpe3JldHVybiBKRChDcmQodGhpcyw0KSwxMjgpfTtfLnFoPWZ1bmN0aW9uIEpyZCgpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5yaD1mdW5jdGlvbiBLcmQoKXtyZXR1cm4gKHRoaXMuRGImNCkhPTB9O18udmg9ZnVuY3Rpb24gTHJkKCl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLmtpPWZ1bmN0aW9uIE1yZChhKXtFcmQodGhpcywyLGEpfTtfLnhoPWZ1bmN0aW9uIE5yZChhLGIpe3RoaXMuRGI9Yjw8MTZ8dGhpcy5EYiYyNTU7dGhpcy5raShhKX07Xy56aD1mdW5jdGlvbiBPcmQoKXtyZXR1cm4geXJkKHRoaXMpfTtfLkJoPWZ1bmN0aW9uIFByZCgpe3JldHVybiB0aGlzLkRiPj4xNn07Xy5DaD1mdW5jdGlvbiBRcmQoKXt2YXIgYSxiO3JldHVybiBnJGQoKSxiPWlXZChNVGQoKGE9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYT90aGlzLmVpKCk6YSkpKSxiPT1udWxsPyhudWxsLGYkZCk6bmV3IGokZCh0aGlzLGIpfTtfLnNoPWZ1bmN0aW9uIFJyZCgpe3JldHVybiAodGhpcy5EYiYxKT09MH07Xy5GaD1mdW5jdGlvbiBTcmQoKXtyZXR1cm4gSkQoQ3JkKHRoaXMsMTI4KSwxOTgwKX07Xy5HaD1mdW5jdGlvbiBUcmQoKXtyZXR1cm4gSkQoQ3JkKHRoaXMsMTYpLDI5KX07Xy5LaD1mdW5jdGlvbiBVcmQoKXtyZXR1cm4gKHRoaXMuRGImMzIpIT0wfTtfLkxoPWZ1bmN0aW9uIFZyZCgpe3JldHVybiBKRChDcmQodGhpcywyKSw1Mil9O18uUmg9ZnVuY3Rpb24gV3JkKCl7cmV0dXJuICh0aGlzLkRiJjY0KSE9MH07Xy5XaD1mdW5jdGlvbiBYcmQoKXt0aHJvdyBzY2IobmV3IGFoYil9O18uWGg9ZnVuY3Rpb24gWXJkKCl7cmV0dXJuIEpEKENyZCh0aGlzLDY0KSwyODYpfTtfLiRoPWZ1bmN0aW9uIFpyZChhKXtFcmQodGhpcywxNixhKX07Xy5faD1mdW5jdGlvbiAkcmQoYSl7RXJkKHRoaXMsMTI4LGEpfTtfLmFpPWZ1bmN0aW9uIF9yZChhKXtFcmQodGhpcyw2NCxhKX07Xy5kaT1mdW5jdGlvbiBhc2QoKXtyZXR1cm4gQXJkKHRoaXMpfTtfLkRiPTA7dmFyIHA5PWplYihUQ2UsJ01pbmltYWxFT2JqZWN0SW1wbCcsMTE3KTtZY2IoMTE4LDExNyx7MTA5OjEsOTM6MSw5MjoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDExNzoxLDExODoxfSk7Xy5raT1mdW5jdGlvbiBic2QoYSl7dGhpcy5DYj1hfTtfLkxoPWZ1bmN0aW9uIGNzZCgpe3JldHVybiB0aGlzLkNifTt2YXIgbzk9amViKFRDZSwnTWluaW1hbEVPYmplY3RJbXBsL0NvbnRhaW5lcicsMTE4KTtZY2IoMjAyOSwxMTgsezEwOToxLDMzODoxLDEwMjoxLDkzOjEsOTI6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwxMTc6MSwxMTg6MX0pO18uSGg9ZnVuY3Rpb24gbnNkKGEsYixjKXtyZXR1cm4gZXNkKHRoaXMsYSxiLGMpfTtfLlFoPWZ1bmN0aW9uIG9zZChhLGIsYyl7cmV0dXJuIGZzZCh0aGlzLGEsYixjKX07Xy5TaD1mdW5jdGlvbiBwc2QoYSl7cmV0dXJuIGdzZCh0aGlzLGEpfTtfLlpoPWZ1bmN0aW9uIHFzZChhLGIpe2hzZCh0aGlzLGEsYil9O18uZWk9ZnVuY3Rpb24gcnNkKCl7cmV0dXJuIFZwZCgpLFVwZH07Xy5naT1mdW5jdGlvbiBzc2QoYSl7aXNkKHRoaXMsYSl9O18ubGY9ZnVuY3Rpb24gdHNkKCl7cmV0dXJuIGpzZCh0aGlzKX07Xy5laD1mdW5jdGlvbiB1c2QoKXtyZXR1cm4gIXRoaXMubyYmKHRoaXMubz1uZXcgWVFkKChWcGQoKSxTcGQpLE8zLHRoaXMsMCkpLHRoaXMub307Xy5tZj1mdW5jdGlvbiB2c2QoYSl7cmV0dXJuIGtzZCh0aGlzLGEpfTtfLm5mPWZ1bmN0aW9uIHdzZChhKXtyZXR1cm4gbHNkKHRoaXMsYSl9O18ub2Y9ZnVuY3Rpb24geHNkKGEsYil7cmV0dXJuIG1zZCh0aGlzLGEsYil9O3ZhciBEMz1qZWIoVUNlLCdFTWFwUHJvcGVydHlIb2xkZXJJbXBsJywyMDI5KTtZY2IoNTU1LDExOCx7MTA5OjEsMzY5OjEsOTM6MSw5MjoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDExNzoxLDExODoxfSxCc2QpO18uSGg9ZnVuY3Rpb24gQ3NkKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLmE7Y2FzZSAxOnJldHVybiB0aGlzLmI7fXJldHVybiBocWQodGhpcyxhLGIsYyl9O18uU2g9ZnVuY3Rpb24gRHNkKGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHRoaXMuYSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuYiE9MDt9cmV0dXJuIG9xZCh0aGlzLGEpfTtfLlpoPWZ1bmN0aW9uIEVzZChhLGIpe3N3aXRjaChhKXtjYXNlIDA6enNkKHRoaXMsQmViKE1EKGIpKSk7cmV0dXJuO2Nhc2UgMTpBc2QodGhpcyxCZWIoTUQoYikpKTtyZXR1cm47fUFxZCh0aGlzLGEsYil9O18uZWk9ZnVuY3Rpb24gRnNkKCl7cmV0dXJuIFZwZCgpLEtwZH07Xy5naT1mdW5jdGlvbiBHc2QoYSl7c3dpdGNoKGEpe2Nhc2UgMDp6c2QodGhpcywwKTtyZXR1cm47Y2FzZSAxOkFzZCh0aGlzLDApO3JldHVybjt9RXFkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gSHNkKCl7dmFyIGE7aWYoKHRoaXMuRGImNjQpIT0wKXJldHVybiBHcWQodGhpcyk7YT1uZXcgSmdiKEdxZCh0aGlzKSk7YS5hKz0nICh4OiAnO0JnYihhLHRoaXMuYSk7YS5hKz0nLCB5OiAnO0JnYihhLHRoaXMuYik7YS5hKz0nKSc7cmV0dXJuIGEuYX07Xy5hPTA7Xy5iPTA7dmFyIEUzPWplYihVQ2UsJ0Vsa0JlbmRQb2ludEltcGwnLDU1NSk7WWNiKDcyMiwyMDI5LHsxMDk6MSwzMzg6MSwxNzM6MSwxMDI6MSw5MzoxLDkyOjEsNTc6MSwxMTM6MSw1MjoxLDk4OjEsMTE3OjEsMTE4OjF9KTtfLkhoPWZ1bmN0aW9uIFJzZChhLGIsYyl7cmV0dXJuIElzZCh0aGlzLGEsYixjKX07Xy5PaD1mdW5jdGlvbiBTc2QoYSxiLGMpe3JldHVybiBKc2QodGhpcyxhLGIsYyl9O18uUWg9ZnVuY3Rpb24gVHNkKGEsYixjKXtyZXR1cm4gS3NkKHRoaXMsYSxiLGMpfTtfLlNoPWZ1bmN0aW9uIFVzZChhKXtyZXR1cm4gTHNkKHRoaXMsYSl9O18uWmg9ZnVuY3Rpb24gVnNkKGEsYil7TXNkKHRoaXMsYSxiKX07Xy5laT1mdW5jdGlvbiBXc2QoKXtyZXR1cm4gVnBkKCksT3BkfTtfLmdpPWZ1bmN0aW9uIFhzZChhKXtOc2QodGhpcyxhKX07Xy5oaD1mdW5jdGlvbiBZc2QoKXtyZXR1cm4gdGhpcy5rfTtfLmloPWZ1bmN0aW9uIFpzZCgpe3JldHVybiBPc2QodGhpcyl9O18uSWI9ZnVuY3Rpb24gJHNkKCl7cmV0dXJuIFFzZCh0aGlzKX07Xy5rPW51bGw7dmFyIEkzPWplYihVQ2UsJ0Vsa0dyYXBoRWxlbWVudEltcGwnLDcyMik7WWNiKDcyMyw3MjIsezEwOToxLDMzODoxLDE3MzoxLDI3MzoxLDEwMjoxLDkzOjEsOTI6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwxMTc6MSwxMTg6MX0pO18uSGg9ZnVuY3Rpb24ga3RkKGEsYixjKXtyZXR1cm4gX3NkKHRoaXMsYSxiLGMpfTtfLlNoPWZ1bmN0aW9uIGx0ZChhKXtyZXR1cm4gYXRkKHRoaXMsYSl9O18uWmg9ZnVuY3Rpb24gbXRkKGEsYil7YnRkKHRoaXMsYSxiKX07Xy5laT1mdW5jdGlvbiBudGQoKXtyZXR1cm4gVnBkKCksVHBkfTtfLmdpPWZ1bmN0aW9uIG90ZChhKXtjdGQodGhpcyxhKX07Xy5qaD1mdW5jdGlvbiBwdGQoKXtyZXR1cm4gdGhpcy5mfTtfLmtoPWZ1bmN0aW9uIHF0ZCgpe3JldHVybiB0aGlzLmd9O18ubGg9ZnVuY3Rpb24gcnRkKCl7cmV0dXJuIHRoaXMuaX07Xy5taD1mdW5jdGlvbiBzdGQoKXtyZXR1cm4gdGhpcy5qfTtfLm5oPWZ1bmN0aW9uIHR0ZChhLGIpe2R0ZCh0aGlzLGEsYil9O18ub2g9ZnVuY3Rpb24gdXRkKGEsYil7ZnRkKHRoaXMsYSxiKX07Xy5JYj1mdW5jdGlvbiB2dGQoKXtyZXR1cm4ganRkKHRoaXMpfTtfLmY9MDtfLmc9MDtfLmk9MDtfLmo9MDt2YXIgUDM9amViKFVDZSwnRWxrU2hhcGVJbXBsJyw3MjMpO1ljYig3MjQsNzIzLHsxMDk6MSwzMzg6MSw4NDoxLDE3MzoxLDI3MzoxLDEwMjoxLDkzOjEsOTI6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwxMTc6MSwxMTg6MX0pO18uSGg9ZnVuY3Rpb24gRHRkKGEsYixjKXtyZXR1cm4gd3RkKHRoaXMsYSxiLGMpfTtfLk9oPWZ1bmN0aW9uIEV0ZChhLGIsYyl7cmV0dXJuIHh0ZCh0aGlzLGEsYixjKX07Xy5RaD1mdW5jdGlvbiBGdGQoYSxiLGMpe3JldHVybiB5dGQodGhpcyxhLGIsYyl9O18uU2g9ZnVuY3Rpb24gR3RkKGEpe3JldHVybiB6dGQodGhpcyxhKX07Xy5aaD1mdW5jdGlvbiBIdGQoYSxiKXtBdGQodGhpcyxhLGIpfTtfLmVpPWZ1bmN0aW9uIEl0ZCgpe3JldHVybiBWcGQoKSxMcGR9O18uZ2k9ZnVuY3Rpb24gSnRkKGEpe0J0ZCh0aGlzLGEpfTtfLmZoPWZ1bmN0aW9uIEt0ZCgpe3JldHVybiAhdGhpcy5kJiYodGhpcy5kPW5ldyByZWUoeDMsdGhpcyw4LDUpKSx0aGlzLmR9O18uZ2g9ZnVuY3Rpb24gTHRkKCl7cmV0dXJuICF0aGlzLmUmJih0aGlzLmU9bmV3IHJlZSh4Myx0aGlzLDcsNCkpLHRoaXMuZX07dmFyIEYzPWplYihVQ2UsJ0Vsa0Nvbm5lY3RhYmxlU2hhcGVJbXBsJyw3MjQpO1ljYigyNjgsNzIyLHsxMDk6MSwzMzg6MSw4NToxLDE3MzoxLDI2ODoxLDEwMjoxLDkzOjEsOTI6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwxMTc6MSwxMTg6MX0sVnRkKTtfLndoPWZ1bmN0aW9uIFd0ZChhKXtyZXR1cm4gTnRkKHRoaXMsYSl9O18uSGg9ZnVuY3Rpb24gWHRkKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAzOnJldHVybiBPdGQodGhpcyk7Y2FzZSA0OnJldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyByZWUodjMsdGhpcyw0LDcpKSx0aGlzLmI7Y2FzZSA1OnJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyByZWUodjMsdGhpcyw1LDgpKSx0aGlzLmM7Y2FzZSA2OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBYMGQodzMsdGhpcyw2LDYpKSx0aGlzLmE7Y2FzZSA3OnJldHVybiB4ZGIoKSwhdGhpcy5iJiYodGhpcy5iPW5ldyByZWUodjMsdGhpcyw0LDcpKSx0aGlzLmIuaTw9MSYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IHJlZSh2Myx0aGlzLDUsOCkpLHRoaXMuYy5pPD0xKT9mYWxzZTp0cnVlO2Nhc2UgODpyZXR1cm4geGRiKCksUnRkKHRoaXMpP3RydWU6ZmFsc2U7Y2FzZSA5OnJldHVybiB4ZGIoKSxTdGQodGhpcyk/dHJ1ZTpmYWxzZTtjYXNlIDEwOnJldHVybiB4ZGIoKSwhdGhpcy5iJiYodGhpcy5iPW5ldyByZWUodjMsdGhpcyw0LDcpKSx0aGlzLmIuaSE9MCYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IHJlZSh2Myx0aGlzLDUsOCkpLHRoaXMuYy5pIT0wKT90cnVlOmZhbHNlO31yZXR1cm4gSXNkKHRoaXMsYSxiLGMpfTtfLk9oPWZ1bmN0aW9uIFl0ZChhLGIsYyl7dmFyIGQ7c3dpdGNoKGIpe2Nhc2UgMzohIXRoaXMuQ2ImJihjPShkPXRoaXMuRGI+PjE2LGQ+PTA/TnRkKHRoaXMsYyk6dGhpcy5DYi5QaCh0aGlzLC0xLWQsbnVsbCxjKSkpO3JldHVybiBNdGQodGhpcyxKRChhLDI3KSxjKTtjYXNlIDQ6cmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IHJlZSh2Myx0aGlzLDQsNykpLFBHZCh0aGlzLmIsYSxjKTtjYXNlIDU6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IHJlZSh2Myx0aGlzLDUsOCkpLFBHZCh0aGlzLmMsYSxjKTtjYXNlIDY6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IFgwZCh3Myx0aGlzLDYsNikpLFBHZCh0aGlzLmEsYSxjKTt9cmV0dXJuIEpzZCh0aGlzLGEsYixjKX07Xy5RaD1mdW5jdGlvbiBadGQoYSxiLGMpe3N3aXRjaChiKXtjYXNlIDM6cmV0dXJuIE10ZCh0aGlzLG51bGwsYyk7Y2FzZSA0OnJldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyByZWUodjMsdGhpcyw0LDcpKSxRR2QodGhpcy5iLGEsYyk7Y2FzZSA1OnJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyByZWUodjMsdGhpcyw1LDgpKSxRR2QodGhpcy5jLGEsYyk7Y2FzZSA2OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBYMGQodzMsdGhpcyw2LDYpKSxRR2QodGhpcy5hLGEsYyk7fXJldHVybiBLc2QodGhpcyxhLGIsYyl9O18uU2g9ZnVuY3Rpb24gJHRkKGEpe3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuICEhT3RkKHRoaXMpO2Nhc2UgNDpyZXR1cm4gISF0aGlzLmImJnRoaXMuYi5pIT0wO2Nhc2UgNTpyZXR1cm4gISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgNjpyZXR1cm4gISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgNzpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgcmVlKHYzLHRoaXMsNCw3KSksISh0aGlzLmIuaTw9MSYmKCF0aGlzLmMmJih0aGlzLmM9bmV3IHJlZSh2Myx0aGlzLDUsOCkpLHRoaXMuYy5pPD0xKSk7Y2FzZSA4OnJldHVybiBSdGQodGhpcyk7Y2FzZSA5OnJldHVybiBTdGQodGhpcyk7Y2FzZSAxMDpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgcmVlKHYzLHRoaXMsNCw3KSksdGhpcy5iLmkhPTAmJighdGhpcy5jJiYodGhpcy5jPW5ldyByZWUodjMsdGhpcyw1LDgpKSx0aGlzLmMuaSE9MCk7fXJldHVybiBMc2QodGhpcyxhKX07Xy5aaD1mdW5jdGlvbiBfdGQoYSxiKXtzd2l0Y2goYSl7Y2FzZSAzOlR0ZCh0aGlzLEpEKGIsMjcpKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmImJih0aGlzLmI9bmV3IHJlZSh2Myx0aGlzLDQsNykpO1JHZCh0aGlzLmIpOyF0aGlzLmImJih0aGlzLmI9bmV3IHJlZSh2Myx0aGlzLDQsNykpO3ZDZCh0aGlzLmIsSkQoYiwxNikpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgcmVlKHYzLHRoaXMsNSw4KSk7UkdkKHRoaXMuYyk7IXRoaXMuYyYmKHRoaXMuYz1uZXcgcmVlKHYzLHRoaXMsNSw4KSk7dkNkKHRoaXMuYyxKRChiLDE2KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBYMGQodzMsdGhpcyw2LDYpKTtSR2QodGhpcy5hKTshdGhpcy5hJiYodGhpcy5hPW5ldyBYMGQodzMsdGhpcyw2LDYpKTt2Q2QodGhpcy5hLEpEKGIsMTYpKTtyZXR1cm47fU1zZCh0aGlzLGEsYil9O18uZWk9ZnVuY3Rpb24gYXVkKCl7cmV0dXJuIFZwZCgpLE1wZH07Xy5naT1mdW5jdGlvbiBidWQoYSl7c3dpdGNoKGEpe2Nhc2UgMzpUdGQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmImJih0aGlzLmI9bmV3IHJlZSh2Myx0aGlzLDQsNykpO1JHZCh0aGlzLmIpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgcmVlKHYzLHRoaXMsNSw4KSk7UkdkKHRoaXMuYyk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBYMGQodzMsdGhpcyw2LDYpKTtSR2QodGhpcy5hKTtyZXR1cm47fU5zZCh0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIGN1ZCgpe3JldHVybiBVdGQodGhpcyl9O3ZhciBHMz1qZWIoVUNlLCdFbGtFZGdlSW1wbCcsMjY4KTtZY2IoNDQwLDIwMjksezEwOToxLDMzODoxLDE2ODoxLDQ0MDoxLDEwMjoxLDkzOjEsOTI6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwxMTc6MSwxMTg6MX0sdHVkKTtfLndoPWZ1bmN0aW9uIHV1ZChhKXtyZXR1cm4gZXVkKHRoaXMsYSl9O18uSGg9ZnVuY3Rpb24gdnVkKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAxOnJldHVybiB0aGlzLmo7Y2FzZSAyOnJldHVybiB0aGlzLms7Y2FzZSAzOnJldHVybiB0aGlzLmI7Y2FzZSA0OnJldHVybiB0aGlzLmM7Y2FzZSA1OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBxVmQodTMsdGhpcyw1KSksdGhpcy5hO2Nhc2UgNjpyZXR1cm4gaHVkKHRoaXMpO2Nhc2UgNzppZihiKXJldHVybiBndWQodGhpcyk7cmV0dXJuIHRoaXMuaTtjYXNlIDg6aWYoYilyZXR1cm4gZnVkKHRoaXMpO3JldHVybiB0aGlzLmY7Y2FzZSA5OnJldHVybiAhdGhpcy5nJiYodGhpcy5nPW5ldyByZWUodzMsdGhpcyw5LDEwKSksdGhpcy5nO2Nhc2UgMTA6cmV0dXJuICF0aGlzLmUmJih0aGlzLmU9bmV3IHJlZSh3Myx0aGlzLDEwLDkpKSx0aGlzLmU7Y2FzZSAxMTpyZXR1cm4gdGhpcy5kO31yZXR1cm4gZXNkKHRoaXMsYSxiLGMpfTtfLk9oPWZ1bmN0aW9uIHd1ZChhLGIsYyl7dmFyIGQsZSxmO3N3aXRjaChiKXtjYXNlIDY6ISF0aGlzLkNiJiYoYz0oZT10aGlzLkRiPj4xNixlPj0wP2V1ZCh0aGlzLGMpOnRoaXMuQ2IuUGgodGhpcywtMS1lLG51bGwsYykpKTtyZXR1cm4gZHVkKHRoaXMsSkQoYSw4NSksYyk7Y2FzZSA5OnJldHVybiAhdGhpcy5nJiYodGhpcy5nPW5ldyByZWUodzMsdGhpcyw5LDEwKSksUEdkKHRoaXMuZyxhLGMpO2Nhc2UgMTA6cmV0dXJuICF0aGlzLmUmJih0aGlzLmU9bmV3IHJlZSh3Myx0aGlzLDEwLDkpKSxQR2QodGhpcy5lLGEsYyk7fXJldHVybiBmPUpEKFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkPyhWcGQoKSxOcGQpOmQpLGIpLDY5KSxmLnRrKCkud2sodGhpcyxBcmQodGhpcyksYi1WVGQoKFZwZCgpLE5wZCkpLGEsYyl9O18uUWg9ZnVuY3Rpb24geHVkKGEsYixjKXtzd2l0Y2goYil7Y2FzZSA1OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBxVmQodTMsdGhpcyw1KSksUUdkKHRoaXMuYSxhLGMpO2Nhc2UgNjpyZXR1cm4gZHVkKHRoaXMsbnVsbCxjKTtjYXNlIDk6cmV0dXJuICF0aGlzLmcmJih0aGlzLmc9bmV3IHJlZSh3Myx0aGlzLDksMTApKSxRR2QodGhpcy5nLGEsYyk7Y2FzZSAxMDpyZXR1cm4gIXRoaXMuZSYmKHRoaXMuZT1uZXcgcmVlKHczLHRoaXMsMTAsOSkpLFFHZCh0aGlzLmUsYSxjKTt9cmV0dXJuIGZzZCh0aGlzLGEsYixjKX07Xy5TaD1mdW5jdGlvbiB5dWQoYSl7c3dpdGNoKGEpe2Nhc2UgMTpyZXR1cm4gdGhpcy5qIT0wO2Nhc2UgMjpyZXR1cm4gdGhpcy5rIT0wO2Nhc2UgMzpyZXR1cm4gdGhpcy5iIT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5jIT0wO2Nhc2UgNTpyZXR1cm4gISF0aGlzLmEmJnRoaXMuYS5pIT0wO2Nhc2UgNjpyZXR1cm4gISFodWQodGhpcyk7Y2FzZSA3OnJldHVybiAhIXRoaXMuaTtjYXNlIDg6cmV0dXJuICEhdGhpcy5mO2Nhc2UgOTpyZXR1cm4gISF0aGlzLmcmJnRoaXMuZy5pIT0wO2Nhc2UgMTA6cmV0dXJuICEhdGhpcy5lJiZ0aGlzLmUuaSE9MDtjYXNlIDExOnJldHVybiB0aGlzLmQhPW51bGw7fXJldHVybiBnc2QodGhpcyxhKX07Xy5aaD1mdW5jdGlvbiB6dWQoYSxiKXtzd2l0Y2goYSl7Y2FzZSAxOnF1ZCh0aGlzLEJlYihNRChiKSkpO3JldHVybjtjYXNlIDI6cnVkKHRoaXMsQmViKE1EKGIpKSk7cmV0dXJuO2Nhc2UgMzpqdWQodGhpcyxCZWIoTUQoYikpKTtyZXR1cm47Y2FzZSA0Omt1ZCh0aGlzLEJlYihNRChiKSkpO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgcVZkKHUzLHRoaXMsNSkpO1JHZCh0aGlzLmEpOyF0aGlzLmEmJih0aGlzLmE9bmV3IHFWZCh1Myx0aGlzLDUpKTt2Q2QodGhpcy5hLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSA2Om91ZCh0aGlzLEpEKGIsODUpKTtyZXR1cm47Y2FzZSA3Om51ZCh0aGlzLEpEKGIsODQpKTtyZXR1cm47Y2FzZSA4Om11ZCh0aGlzLEpEKGIsODQpKTtyZXR1cm47Y2FzZSA5OiF0aGlzLmcmJih0aGlzLmc9bmV3IHJlZSh3Myx0aGlzLDksMTApKTtSR2QodGhpcy5nKTshdGhpcy5nJiYodGhpcy5nPW5ldyByZWUodzMsdGhpcyw5LDEwKSk7dkNkKHRoaXMuZyxKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuZSYmKHRoaXMuZT1uZXcgcmVlKHczLHRoaXMsMTAsOSkpO1JHZCh0aGlzLmUpOyF0aGlzLmUmJih0aGlzLmU9bmV3IHJlZSh3Myx0aGlzLDEwLDkpKTt2Q2QodGhpcy5lLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAxMTpsdWQodGhpcyxPRChiKSk7cmV0dXJuO31oc2QodGhpcyxhLGIpfTtfLmVpPWZ1bmN0aW9uIEF1ZCgpe3JldHVybiBWcGQoKSxOcGR9O18uZ2k9ZnVuY3Rpb24gQnVkKGEpe3N3aXRjaChhKXtjYXNlIDE6cXVkKHRoaXMsMCk7cmV0dXJuO2Nhc2UgMjpydWQodGhpcywwKTtyZXR1cm47Y2FzZSAzOmp1ZCh0aGlzLDApO3JldHVybjtjYXNlIDQ6a3VkKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBxVmQodTMsdGhpcyw1KSk7UkdkKHRoaXMuYSk7cmV0dXJuO2Nhc2UgNjpvdWQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3Om51ZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDg6bXVkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTohdGhpcy5nJiYodGhpcy5nPW5ldyByZWUodzMsdGhpcyw5LDEwKSk7UkdkKHRoaXMuZyk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuZSYmKHRoaXMuZT1uZXcgcmVlKHczLHRoaXMsMTAsOSkpO1JHZCh0aGlzLmUpO3JldHVybjtjYXNlIDExOmx1ZCh0aGlzLG51bGwpO3JldHVybjt9aXNkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gQ3VkKCl7cmV0dXJuIHN1ZCh0aGlzKX07Xy5iPTA7Xy5jPTA7Xy5kPW51bGw7Xy5qPTA7Xy5rPTA7dmFyIEgzPWplYihVQ2UsJ0Vsa0VkZ2VTZWN0aW9uSW1wbCcsNDQwKTtZY2IoMTU3LDExOCx7MTA5OjEsOTM6MSw5MjoxLDE1NDoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDE1NzoxLDExNzoxLDExODoxfSk7Xy5IaD1mdW5jdGlvbiBHdWQoYSxiLGMpe3ZhciBkO2lmKGE9PTApe3JldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLHRoaXMuQWJ9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKHRoaXMuZWkoKSksUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/dGhpcy5laSgpOmQpLGEpLGIsYyl9O18uT2g9ZnVuY3Rpb24gSHVkKGEsYixjKXt2YXIgZCxlO2lmKGI9PTApe3JldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyl9cmV0dXJuIGU9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/dGhpcy5laSgpOmQpLGIpLDY5KSxlLnRrKCkud2sodGhpcyxBcmQodGhpcyksYi1WVGQodGhpcy5laSgpKSxhLGMpfTtfLlFoPWZ1bmN0aW9uIEl1ZChhLGIsYyl7dmFyIGQsZTtpZihiPT0wKXtyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSxRR2QodGhpcy5BYixhLGMpfXJldHVybiBlPUpEKFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP3RoaXMuZWkoKTpkKSxiKSw2OSksZS50aygpLnhrKHRoaXMsQXJkKHRoaXMpLGItVlRkKHRoaXMuZWkoKSksYSxjKX07Xy5TaD1mdW5jdGlvbiBKdWQoYSl7dmFyIGI7aWYoYT09MCl7cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wfXJldHVybiBlcWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgoYj1KRChDcmQodGhpcywxNiksMjkpLCFiP3RoaXMuZWkoKTpiKSxhKSl9O18uVmg9ZnVuY3Rpb24gS3VkKGEpe3JldHVybiBEdWQodGhpcyxhKX07Xy5aaD1mdW5jdGlvbiBMdWQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7dkNkKHRoaXMuQWIsSkQoYiwxNikpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz90aGlzLmVpKCk6YyksYSksYil9O18uX2g9ZnVuY3Rpb24gTXVkKGEpe0VyZCh0aGlzLDEyOCxhKX07Xy5laT1mdW5jdGlvbiBOdWQoKXtyZXR1cm4gY1BkKCksU09kfTtfLmdpPWZ1bmN0aW9uIE91ZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpO3JldHVybjt9Z3FkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj90aGlzLmVpKCk6YiksYSkpfTtfLmxpPWZ1bmN0aW9uIFB1ZCgpe3RoaXMuQmJ8PTF9O18ubWk9ZnVuY3Rpb24gUXVkKGEpe3JldHVybiBGdWQodGhpcyxhKX07Xy5CYj0wO3ZhciBjNz1qZWIoVENlLCdFTW9kZWxFbGVtZW50SW1wbCcsMTU3KTtZY2IoNzA0LDE1Nyx7MTA5OjEsOTM6MSw5MjoxLDQ2NjoxLDE1NDoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDE1NzoxLDExNzoxLDExODoxfSxhdmQpO18ubmk9ZnVuY3Rpb24gYnZkKGEsYil7cmV0dXJuIFh1ZCh0aGlzLGEsYil9O18ub2k9ZnVuY3Rpb24gY3ZkKGEpe3ZhciBiLGMsZCxlLGY7aWYodGhpcy5hIT1XU2QoYSl8fChhLkJiJjI1NikhPTApe3Rocm93IHNjYihuZXcgVGViKCRDZSthLnpiK1hDZSkpfWZvcihkPVVUZChhKTtPVGQoZC5hKS5pIT0wOyl7Yz1KRChnWGQoZCwwLChiPUpEKG5EZChPVGQoZC5hKSwwKSw4NyksZj1iLmMsUkQoZiw4OCk/SkQoZiwyOSk6KGNQZCgpLFVPZCkpKSwyOSk7aWYoWVNkKGMpKXtlPVdTZChjKS5zaSgpLm9pKGMpO0pEKGUsNTIpLiRoKGEpO3JldHVybiBlfWQ9VVRkKGMpfXJldHVybiAoYS5EIT1udWxsP2EuRDphLkIpPT0namF2YS51dGlsLk1hcCRFbnRyeSc/bmV3IGVRZChhKTpuZXcgVVBkKGEpfTtfLnBpPWZ1bmN0aW9uIGR2ZChhLGIpe3JldHVybiBZdWQodGhpcyxhLGIpfTtfLkhoPWZ1bmN0aW9uIGV2ZChhLGIsYyl7dmFyIGQ7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy5hO31yZXR1cm4gZHFkKHRoaXMsYS1WVGQoKGNQZCgpLFBPZCkpLFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP1BPZDpkKSxhKSxiLGMpfTtfLk9oPWZ1bmN0aW9uIGZ2ZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyk7Y2FzZSAxOiEhdGhpcy5hJiYoYz1KRCh0aGlzLmEsNTIpLlBoKHRoaXMsNCxsNixjKSk7cmV0dXJuIFZ1ZCh0aGlzLEpEKGEsMjQwKSxjKTt9cmV0dXJuIGU9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLFBPZCk6ZCksYiksNjkpLGUudGsoKS53ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksUE9kKSksYSxjKX07Xy5RaD1mdW5jdGlvbiBndmQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSxRR2QodGhpcy5BYixhLGMpO2Nhc2UgMTpyZXR1cm4gVnVkKHRoaXMsbnVsbCxjKTt9cmV0dXJuIGU9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLFBPZCk6ZCksYiksNjkpLGUudGsoKS54ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksUE9kKSksYSxjKX07Xy5TaD1mdW5jdGlvbiBodmQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiAhIXRoaXMuYTt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChjUGQoKSxQT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9QT2Q6YiksYSkpfTtfLlpoPWZ1bmN0aW9uIGl2ZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTt2Q2QodGhpcy5BYixKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTokdWQodGhpcyxKRChiLDI0MCkpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQoKGNQZCgpLFBPZCkpLFFUZCgoYz1KRChDcmQodGhpcywxNiksMjkpLCFjP1BPZDpjKSxhKSxiKX07Xy5laT1mdW5jdGlvbiBqdmQoKXtyZXR1cm4gY1BkKCksUE9kfTtfLmdpPWZ1bmN0aW9uIGt2ZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6JHVkKHRoaXMsbnVsbCk7cmV0dXJuO31ncWQodGhpcyxhLVZUZCgoY1BkKCksUE9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/UE9kOmIpLGEpKX07dmFyIFJ1ZCxTdWQsVHVkO3ZhciBhNz1qZWIoVENlLCdFRmFjdG9yeUltcGwnLDcwNCk7WWNiKDEwMTIsNzA0LHsxMDk6MSwyMDU5OjEsOTM6MSw5MjoxLDQ2NjoxLDE1NDoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDE1NzoxLDExNzoxLDExODoxfSxtdmQpO18ubmk9ZnVuY3Rpb24gbnZkKGEsYil7c3dpdGNoKGEuZWsoKSl7Y2FzZSAxMjpyZXR1cm4gSkQoYiwxNDQpLk5nKCk7Y2FzZSAxMzpyZXR1cm4gYWRiKGIpO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoV0NlK2EudmUoKStYQ2UpKTt9fTtfLm9pPWZ1bmN0aW9uIG92ZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpO3N3aXRjaChhLkc9PS0xJiYoYS5HPShiPVdTZChhKSxiP0FVZChiLnJpKCksYSk6LTEpKSxhLkcpe2Nhc2UgNDpyZXR1cm4gZj1uZXcgTHdkLGY7Y2FzZSA2OnJldHVybiBnPW5ldyBjeGQsZztjYXNlIDc6cmV0dXJuIGg9bmV3IHJ4ZCxoO2Nhc2UgODpyZXR1cm4gZD1uZXcgVnRkLGQ7Y2FzZSA5OnJldHVybiBjPW5ldyBCc2QsYztjYXNlIDEwOnJldHVybiBlPW5ldyB0dWQsZTtjYXNlIDExOnJldHVybiBpPW5ldyBEeGQsaTtkZWZhdWx0OnRocm93IHNjYihuZXcgVGViKCRDZSthLnpiK1hDZSkpO319O18ucGk9ZnVuY3Rpb24gcHZkKGEsYil7c3dpdGNoKGEuZWsoKSl7Y2FzZSAxMzpjYXNlIDEyOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoV0NlK2EudmUoKStYQ2UpKTt9fTt2YXIgSjM9amViKFVDZSwnRWxrR3JhcGhGYWN0b3J5SW1wbCcsMTAxMik7WWNiKDQzNiwxNTcsezEwOToxLDkzOjEsOTI6MSwxNTQ6MSwxOTc6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwxNTc6MSwxMTc6MSwxMTg6MX0pO18uQ2g9ZnVuY3Rpb24gdHZkKCl7dmFyIGEsYjtiPShhPUpEKENyZCh0aGlzLDE2KSwyOSksaVdkKE1UZCghYT90aGlzLmVpKCk6YSkpKTtyZXR1cm4gYj09bnVsbD8oZyRkKCksZyRkKCksZiRkKTpuZXcgeiRkKHRoaXMsYil9O18uSGg9ZnVuY3Rpb24gdXZkKGEsYixjKXt2YXIgZDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnZlKCk7fXJldHVybiBkcWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP3RoaXMuZWkoKTpkKSxhKSxiLGMpfTtfLlNoPWZ1bmN0aW9uIHZ2ZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7fXJldHVybiBlcWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgoYj1KRChDcmQodGhpcywxNiksMjkpLCFiP3RoaXMuZWkoKTpiKSxhKSl9O18uWmg9ZnVuY3Rpb24gd3ZkKGEsYil7dmFyIGM7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO3ZDZCh0aGlzLkFiLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAxOnRoaXMucWkoT0QoYikpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz90aGlzLmVpKCk6YyksYSksYil9O18uZWk9ZnVuY3Rpb24geHZkKCl7cmV0dXJuIGNQZCgpLFRPZH07Xy5naT1mdW5jdGlvbiB5dmQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnRoaXMucWkobnVsbCk7cmV0dXJuO31ncWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgoYj1KRChDcmQodGhpcywxNiksMjkpLCFiP3RoaXMuZWkoKTpiKSxhKSl9O18udmU9ZnVuY3Rpb24genZkKCl7cmV0dXJuIHRoaXMuemJ9O18ucWk9ZnVuY3Rpb24gQXZkKGEpe3J2ZCh0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIEJ2ZCgpe3JldHVybiBzdmQodGhpcyl9O18uemI9bnVsbDt2YXIgZzc9amViKFRDZSwnRU5hbWVkRWxlbWVudEltcGwnLDQzNik7WWNiKDE4NCw0MzYsezEwOToxLDkzOjEsOTI6MSwxNTQ6MSwxOTc6MSw1NzoxLDI0MDoxLDExMzoxLDUyOjEsOTg6MSwxNTc6MSwxODQ6MSwxMTc6MSwxMTg6MSw2NzU6MX0sZ3dkKTtfLndoPWZ1bmN0aW9uIGl3ZChhKXtyZXR1cm4gVXZkKHRoaXMsYSl9O18uSGg9ZnVuY3Rpb24gandkKGEsYixjKXt2YXIgZDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy55YjtjYXNlIDM6cmV0dXJuIHRoaXMueGI7Y2FzZSA0OnJldHVybiB0aGlzLnNiO2Nhc2UgNTpyZXR1cm4gIXRoaXMucmImJih0aGlzLnJiPW5ldyBjMWQodGhpcyxhNix0aGlzKSksdGhpcy5yYjtjYXNlIDY6cmV0dXJuICF0aGlzLnZiJiYodGhpcy52Yj1uZXcgXzBkKGw2LHRoaXMsNiw3KSksdGhpcy52YjtjYXNlIDc6aWYoYilyZXR1cm4gdGhpcy5EYj4+MTY9PTc/SkQodGhpcy5DYiwyNDApOm51bGw7cmV0dXJuIEt2ZCh0aGlzKTt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChjUGQoKSxYT2QpKSxRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD9YT2Q6ZCksYSksYixjKX07Xy5PaD1mdW5jdGlvbiBrd2QoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyk7Y2FzZSA0OiEhdGhpcy5zYiYmKGM9SkQodGhpcy5zYiw1MikuUGgodGhpcywxLGY2LGMpKTtyZXR1cm4gTHZkKHRoaXMsSkQoYSw0NjYpLGMpO2Nhc2UgNTpyZXR1cm4gIXRoaXMucmImJih0aGlzLnJiPW5ldyBjMWQodGhpcyxhNix0aGlzKSksUEdkKHRoaXMucmIsYSxjKTtjYXNlIDY6cmV0dXJuICF0aGlzLnZiJiYodGhpcy52Yj1uZXcgXzBkKGw2LHRoaXMsNiw3KSksUEdkKHRoaXMudmIsYSxjKTtjYXNlIDc6ISF0aGlzLkNiJiYoYz0oZT10aGlzLkRiPj4xNixlPj0wP1V2ZCh0aGlzLGMpOnRoaXMuQ2IuUGgodGhpcywtMS1lLG51bGwsYykpKTtyZXR1cm4gYnFkKHRoaXMsYSw3LGMpO31yZXR1cm4gZj1KRChRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD8oY1BkKCksWE9kKTpkKSxiKSw2OSksZi50aygpLndrKHRoaXMsQXJkKHRoaXMpLGItVlRkKChjUGQoKSxYT2QpKSxhLGMpfTtfLlFoPWZ1bmN0aW9uIGx3ZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFFHZCh0aGlzLkFiLGEsYyk7Y2FzZSA0OnJldHVybiBMdmQodGhpcyxudWxsLGMpO2Nhc2UgNTpyZXR1cm4gIXRoaXMucmImJih0aGlzLnJiPW5ldyBjMWQodGhpcyxhNix0aGlzKSksUUdkKHRoaXMucmIsYSxjKTtjYXNlIDY6cmV0dXJuICF0aGlzLnZiJiYodGhpcy52Yj1uZXcgXzBkKGw2LHRoaXMsNiw3KSksUUdkKHRoaXMudmIsYSxjKTtjYXNlIDc6cmV0dXJuIGJxZCh0aGlzLG51bGwsNyxjKTt9cmV0dXJuIGU9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLFhPZCk6ZCksYiksNjkpLGUudGsoKS54ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksWE9kKSksYSxjKX07Xy5TaD1mdW5jdGlvbiBtd2QoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy55YiE9bnVsbDtjYXNlIDM6cmV0dXJuIHRoaXMueGIhPW51bGw7Y2FzZSA0OnJldHVybiAhIXRoaXMuc2I7Y2FzZSA1OnJldHVybiAhIXRoaXMucmImJnRoaXMucmIuaSE9MDtjYXNlIDY6cmV0dXJuICEhdGhpcy52YiYmdGhpcy52Yi5pIT0wO2Nhc2UgNzpyZXR1cm4gISFLdmQodGhpcyk7fXJldHVybiBlcWQodGhpcyxhLVZUZCgoY1BkKCksWE9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/WE9kOmIpLGEpKX07Xy5WaD1mdW5jdGlvbiBud2QoYSl7dmFyIGI7Yj1XdmQodGhpcyxhKTtyZXR1cm4gYj9iOkR1ZCh0aGlzLGEpfTtfLlpoPWZ1bmN0aW9uIG93ZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTt2Q2QodGhpcy5BYixKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTpydmQodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgMjpmd2QodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgMzpld2QodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgNDpkd2QodGhpcyxKRChiLDQ2NikpO3JldHVybjtjYXNlIDU6IXRoaXMucmImJih0aGlzLnJiPW5ldyBjMWQodGhpcyxhNix0aGlzKSk7UkdkKHRoaXMucmIpOyF0aGlzLnJiJiYodGhpcy5yYj1uZXcgYzFkKHRoaXMsYTYsdGhpcykpO3ZDZCh0aGlzLnJiLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgXzBkKGw2LHRoaXMsNiw3KSk7UkdkKHRoaXMudmIpOyF0aGlzLnZiJiYodGhpcy52Yj1uZXcgXzBkKGw2LHRoaXMsNiw3KSk7dkNkKHRoaXMudmIsSkQoYiwxNikpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQoKGNQZCgpLFhPZCkpLFFUZCgoYz1KRChDcmQodGhpcywxNiksMjkpLCFjP1hPZDpjKSxhKSxiKX07Xy5haT1mdW5jdGlvbiBwd2QoYSl7dmFyIGIsYztpZighIWEmJiEhdGhpcy5yYil7Zm9yKGM9bmV3IENIZCh0aGlzLnJiKTtjLmUhPWMuaS5nYygpOyl7Yj1BSGQoYyk7UkQoYiwzNTcpJiYoSkQoYiwzNTcpLnc9bnVsbCl9fUVyZCh0aGlzLDY0LGEpfTtfLmVpPWZ1bmN0aW9uIHF3ZCgpe3JldHVybiBjUGQoKSxYT2R9O18uZ2k9ZnVuY3Rpb24gcndkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpydmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOmZ3ZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDM6ZXdkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNDpkd2QodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA1OiF0aGlzLnJiJiYodGhpcy5yYj1uZXcgYzFkKHRoaXMsYTYsdGhpcykpO1JHZCh0aGlzLnJiKTtyZXR1cm47Y2FzZSA2OiF0aGlzLnZiJiYodGhpcy52Yj1uZXcgXzBkKGw2LHRoaXMsNiw3KSk7UkdkKHRoaXMudmIpO3JldHVybjt9Z3FkKHRoaXMsYS1WVGQoKGNQZCgpLFhPZCkpLFFUZCgoYj1KRChDcmQodGhpcywxNiksMjkpLCFiP1hPZDpiKSxhKSl9O18ubGk9ZnVuY3Rpb24gc3dkKCl7VnZkKHRoaXMpfTtfLnJpPWZ1bmN0aW9uIHR3ZCgpe3JldHVybiAhdGhpcy5yYiYmKHRoaXMucmI9bmV3IGMxZCh0aGlzLGE2LHRoaXMpKSx0aGlzLnJifTtfLnNpPWZ1bmN0aW9uIHV3ZCgpe3JldHVybiB0aGlzLnNifTtfLnRpPWZ1bmN0aW9uIHZ3ZCgpe3JldHVybiB0aGlzLnVifTtfLnVpPWZ1bmN0aW9uIHd3ZCgpe3JldHVybiB0aGlzLnhifTtfLnZpPWZ1bmN0aW9uIHh3ZCgpe3JldHVybiB0aGlzLnlifTtfLndpPWZ1bmN0aW9uIHl3ZChhKXt0aGlzLnViPWF9O18uSWI9ZnVuY3Rpb24gendkKCl7dmFyIGE7aWYoKHRoaXMuRGImNjQpIT0wKXJldHVybiBzdmQodGhpcyk7YT1uZXcgSmdiKHN2ZCh0aGlzKSk7YS5hKz0nIChuc1VSSTogJztFZ2IoYSx0aGlzLnliKTthLmErPScsIG5zUHJlZml4OiAnO0VnYihhLHRoaXMueGIpO2EuYSs9JyknO3JldHVybiBhLmF9O18ueGI9bnVsbDtfLnliPW51bGw7dmFyIEN2ZDt2YXIgcTc9amViKFRDZSwnRVBhY2thZ2VJbXBsJywxODQpO1ljYig1NTIsMTg0LHsxMDk6MSwyMDYxOjEsNTUyOjEsOTM6MSw5MjoxLDE1NDoxLDE5NzoxLDU3OjEsMjQwOjEsMTEzOjEsNTI6MSw5ODoxLDE1NzoxLDE4NDoxLDExNzoxLDExODoxLDY3NToxfSxEd2QpO18ucT1mYWxzZTtfLnI9ZmFsc2U7dmFyIEF3ZD1mYWxzZTt2YXIgSzM9amViKFVDZSwnRWxrR3JhcGhQYWNrYWdlSW1wbCcsNTUyKTtZY2IoMzU5LDcyMyx7MTA5OjEsMzM4OjEsMTczOjEsMTUzOjEsMjczOjEsMzU5OjEsMTAyOjEsOTM6MSw5MjoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDExNzoxLDExODoxfSxMd2QpO18ud2g9ZnVuY3Rpb24gTXdkKGEpe3JldHVybiBHd2QodGhpcyxhKX07Xy5IaD1mdW5jdGlvbiBOd2QoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDc6cmV0dXJuIEh3ZCh0aGlzKTtjYXNlIDg6cmV0dXJuIHRoaXMuYTt9cmV0dXJuIF9zZCh0aGlzLGEsYixjKX07Xy5PaD1mdW5jdGlvbiBPd2QoYSxiLGMpe3ZhciBkO3N3aXRjaChiKXtjYXNlIDc6ISF0aGlzLkNiJiYoYz0oZD10aGlzLkRiPj4xNixkPj0wP0d3ZCh0aGlzLGMpOnRoaXMuQ2IuUGgodGhpcywtMS1kLG51bGwsYykpKTtyZXR1cm4gRndkKHRoaXMsSkQoYSwxNzMpLGMpO31yZXR1cm4gSnNkKHRoaXMsYSxiLGMpfTtfLlFoPWZ1bmN0aW9uIFB3ZChhLGIsYyl7aWYoYj09Nyl7cmV0dXJuIEZ3ZCh0aGlzLG51bGwsYyl9cmV0dXJuIEtzZCh0aGlzLGEsYixjKX07Xy5TaD1mdW5jdGlvbiBRd2QoYSl7c3dpdGNoKGEpe2Nhc2UgNzpyZXR1cm4gISFId2QodGhpcyk7Y2FzZSA4OnJldHVybiAhY2diKCcnLHRoaXMuYSk7fXJldHVybiBhdGQodGhpcyxhKX07Xy5aaD1mdW5jdGlvbiBSd2QoYSxiKXtzd2l0Y2goYSl7Y2FzZSA3Okl3ZCh0aGlzLEpEKGIsMTczKSk7cmV0dXJuO2Nhc2UgODpKd2QodGhpcyxPRChiKSk7cmV0dXJuO31idGQodGhpcyxhLGIpfTtfLmVpPWZ1bmN0aW9uIFN3ZCgpe3JldHVybiBWcGQoKSxQcGR9O18uZ2k9ZnVuY3Rpb24gVHdkKGEpe3N3aXRjaChhKXtjYXNlIDc6SXdkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgODpKd2QodGhpcywnJyk7cmV0dXJuO31jdGQodGhpcyxhKX07Xy5JYj1mdW5jdGlvbiBVd2QoKXtyZXR1cm4gS3dkKHRoaXMpfTtfLmE9Jyc7dmFyIEwzPWplYihVQ2UsJ0Vsa0xhYmVsSW1wbCcsMzU5KTtZY2IoMjA2LDcyNCx7MTA5OjEsMzM4OjEsODQ6MSwxNzM6MSwyNzoxLDI3MzoxLDIwNjoxLDEwMjoxLDkzOjEsOTI6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwxMTc6MSwxMTg6MX0sY3hkKTtfLndoPWZ1bmN0aW9uIGR4ZChhKXtyZXR1cm4gV3dkKHRoaXMsYSl9O18uSGg9ZnVuY3Rpb24gZXhkKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSA5OnJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBYMGQoQjMsdGhpcyw5LDkpKSx0aGlzLmM7Y2FzZSAxMDpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgWDBkKEEzLHRoaXMsMTAsMTEpKSx0aGlzLmE7Y2FzZSAxMTpyZXR1cm4gWndkKHRoaXMpO2Nhc2UgMTI6cmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IFgwZCh4Myx0aGlzLDEyLDMpKSx0aGlzLmI7Y2FzZSAxMzpyZXR1cm4geGRiKCksIXRoaXMuYSYmKHRoaXMuYT1uZXcgWDBkKEEzLHRoaXMsMTAsMTEpKSx0aGlzLmEuaT4wP3RydWU6ZmFsc2U7fXJldHVybiB3dGQodGhpcyxhLGIsYyl9O18uT2g9ZnVuY3Rpb24gZnhkKGEsYixjKXt2YXIgZDtzd2l0Y2goYil7Y2FzZSA5OnJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBYMGQoQjMsdGhpcyw5LDkpKSxQR2QodGhpcy5jLGEsYyk7Y2FzZSAxMDpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgWDBkKEEzLHRoaXMsMTAsMTEpKSxQR2QodGhpcy5hLGEsYyk7Y2FzZSAxMTohIXRoaXMuQ2ImJihjPShkPXRoaXMuRGI+PjE2LGQ+PTA/V3dkKHRoaXMsYyk6dGhpcy5DYi5QaCh0aGlzLC0xLWQsbnVsbCxjKSkpO3JldHVybiBWd2QodGhpcyxKRChhLDI3KSxjKTtjYXNlIDEyOnJldHVybiAhdGhpcy5iJiYodGhpcy5iPW5ldyBYMGQoeDMsdGhpcywxMiwzKSksUEdkKHRoaXMuYixhLGMpO31yZXR1cm4geHRkKHRoaXMsYSxiLGMpfTtfLlFoPWZ1bmN0aW9uIGd4ZChhLGIsYyl7c3dpdGNoKGIpe2Nhc2UgOTpyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgWDBkKEIzLHRoaXMsOSw5KSksUUdkKHRoaXMuYyxhLGMpO2Nhc2UgMTA6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IFgwZChBMyx0aGlzLDEwLDExKSksUUdkKHRoaXMuYSxhLGMpO2Nhc2UgMTE6cmV0dXJuIFZ3ZCh0aGlzLG51bGwsYyk7Y2FzZSAxMjpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgWDBkKHgzLHRoaXMsMTIsMykpLFFHZCh0aGlzLmIsYSxjKTt9cmV0dXJuIHl0ZCh0aGlzLGEsYixjKX07Xy5TaD1mdW5jdGlvbiBoeGQoYSl7c3dpdGNoKGEpe2Nhc2UgOTpyZXR1cm4gISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTA6cmV0dXJuICEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDExOnJldHVybiAhIVp3ZCh0aGlzKTtjYXNlIDEyOnJldHVybiAhIXRoaXMuYiYmdGhpcy5iLmkhPTA7Y2FzZSAxMzpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgWDBkKEEzLHRoaXMsMTAsMTEpKSx0aGlzLmEuaT4wO31yZXR1cm4genRkKHRoaXMsYSl9O18uWmg9ZnVuY3Rpb24gaXhkKGEsYil7c3dpdGNoKGEpe2Nhc2UgOTohdGhpcy5jJiYodGhpcy5jPW5ldyBYMGQoQjMsdGhpcyw5LDkpKTtSR2QodGhpcy5jKTshdGhpcy5jJiYodGhpcy5jPW5ldyBYMGQoQjMsdGhpcyw5LDkpKTt2Q2QodGhpcy5jLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAxMDohdGhpcy5hJiYodGhpcy5hPW5ldyBYMGQoQTMsdGhpcywxMCwxMSkpO1JHZCh0aGlzLmEpOyF0aGlzLmEmJih0aGlzLmE9bmV3IFgwZChBMyx0aGlzLDEwLDExKSk7dkNkKHRoaXMuYSxKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTE6YXhkKHRoaXMsSkQoYiwyNykpO3JldHVybjtjYXNlIDEyOiF0aGlzLmImJih0aGlzLmI9bmV3IFgwZCh4Myx0aGlzLDEyLDMpKTtSR2QodGhpcy5iKTshdGhpcy5iJiYodGhpcy5iPW5ldyBYMGQoeDMsdGhpcywxMiwzKSk7dkNkKHRoaXMuYixKRChiLDE2KSk7cmV0dXJuO31BdGQodGhpcyxhLGIpfTtfLmVpPWZ1bmN0aW9uIGp4ZCgpe3JldHVybiBWcGQoKSxRcGR9O18uZ2k9ZnVuY3Rpb24ga3hkKGEpe3N3aXRjaChhKXtjYXNlIDk6IXRoaXMuYyYmKHRoaXMuYz1uZXcgWDBkKEIzLHRoaXMsOSw5KSk7UkdkKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTA6IXRoaXMuYSYmKHRoaXMuYT1uZXcgWDBkKEEzLHRoaXMsMTAsMTEpKTtSR2QodGhpcy5hKTtyZXR1cm47Y2FzZSAxMTpheGQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5iJiYodGhpcy5iPW5ldyBYMGQoeDMsdGhpcywxMiwzKSk7UkdkKHRoaXMuYik7cmV0dXJuO31CdGQodGhpcyxhKX07Xy5JYj1mdW5jdGlvbiBseGQoKXtyZXR1cm4gYnhkKHRoaXMpfTt2YXIgTTM9amViKFVDZSwnRWxrTm9kZUltcGwnLDIwNik7WWNiKDE5Myw3MjQsezEwOToxLDMzODoxLDg0OjEsMTczOjEsMTI0OjEsMjczOjEsMTkzOjEsMTAyOjEsOTM6MSw5MjoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDExNzoxLDExODoxfSxyeGQpO18ud2g9ZnVuY3Rpb24gc3hkKGEpe3JldHVybiBueGQodGhpcyxhKX07Xy5IaD1mdW5jdGlvbiB0eGQoYSxiLGMpe2lmKGE9PTkpe3JldHVybiBveGQodGhpcyl9cmV0dXJuIHd0ZCh0aGlzLGEsYixjKX07Xy5PaD1mdW5jdGlvbiB1eGQoYSxiLGMpe3ZhciBkO3N3aXRjaChiKXtjYXNlIDk6ISF0aGlzLkNiJiYoYz0oZD10aGlzLkRiPj4xNixkPj0wP254ZCh0aGlzLGMpOnRoaXMuQ2IuUGgodGhpcywtMS1kLG51bGwsYykpKTtyZXR1cm4gbXhkKHRoaXMsSkQoYSwyNyksYyk7fXJldHVybiB4dGQodGhpcyxhLGIsYyl9O18uUWg9ZnVuY3Rpb24gdnhkKGEsYixjKXtpZihiPT05KXtyZXR1cm4gbXhkKHRoaXMsbnVsbCxjKX1yZXR1cm4geXRkKHRoaXMsYSxiLGMpfTtfLlNoPWZ1bmN0aW9uIHd4ZChhKXtpZihhPT05KXtyZXR1cm4gISFveGQodGhpcyl9cmV0dXJuIHp0ZCh0aGlzLGEpfTtfLlpoPWZ1bmN0aW9uIHh4ZChhLGIpe3N3aXRjaChhKXtjYXNlIDk6cHhkKHRoaXMsSkQoYiwyNykpO3JldHVybjt9QXRkKHRoaXMsYSxiKX07Xy5laT1mdW5jdGlvbiB5eGQoKXtyZXR1cm4gVnBkKCksUnBkfTtfLmdpPWZ1bmN0aW9uIHp4ZChhKXtzd2l0Y2goYSl7Y2FzZSA5OnB4ZCh0aGlzLG51bGwpO3JldHVybjt9QnRkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gQXhkKCl7cmV0dXJuIHF4ZCh0aGlzKX07dmFyIE4zPWplYihVQ2UsJ0Vsa1BvcnRJbXBsJywxOTMpO3ZhciBHNT1sZWIodERlLCdCYXNpY0VNYXAvRW50cnknKTtZY2IoMTA4NiwxMTgsezEwOToxLDQzOjEsOTM6MSw5MjoxLDEzNToxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDExNzoxLDExODoxfSxEeGQpO18uRmI9ZnVuY3Rpb24gSnhkKGEpe3JldHVybiB0aGlzPT09YX07Xy5qZD1mdW5jdGlvbiBMeGQoKXtyZXR1cm4gdGhpcy5ifTtfLkhiPWZ1bmN0aW9uIE54ZCgpe3JldHVybiBqRGIodGhpcyl9O18uemk9ZnVuY3Rpb24gUHhkKGEpe0J4ZCh0aGlzLEpEKGEsMTQ0KSl9O18uSGg9ZnVuY3Rpb24gRXhkKGEsYixjKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLmI7Y2FzZSAxOnJldHVybiB0aGlzLmM7fXJldHVybiBocWQodGhpcyxhLGIsYyl9O18uU2g9ZnVuY3Rpb24gRnhkKGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jIT1udWxsO31yZXR1cm4gb3FkKHRoaXMsYSl9O18uWmg9ZnVuY3Rpb24gR3hkKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDpCeGQodGhpcyxKRChiLDE0NCkpO3JldHVybjtjYXNlIDE6Q3hkKHRoaXMsYik7cmV0dXJuO31BcWQodGhpcyxhLGIpfTtfLmVpPWZ1bmN0aW9uIEh4ZCgpe3JldHVybiBWcGQoKSxTcGR9O18uZ2k9ZnVuY3Rpb24gSXhkKGEpe3N3aXRjaChhKXtjYXNlIDA6QnhkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTpDeGQodGhpcyxudWxsKTtyZXR1cm47fUVxZCh0aGlzLGEpfTtfLnhpPWZ1bmN0aW9uIEt4ZCgpe3ZhciBhO2lmKHRoaXMuYT09LTEpe2E9dGhpcy5iO3RoaXMuYT0hYT8wOnRiKGEpfXJldHVybiB0aGlzLmF9O18ua2Q9ZnVuY3Rpb24gTXhkKCl7cmV0dXJuIHRoaXMuY307Xy55aT1mdW5jdGlvbiBPeGQoYSl7dGhpcy5hPWF9O18ubGQ9ZnVuY3Rpb24gUXhkKGEpe3ZhciBiO2I9dGhpcy5jO0N4ZCh0aGlzLGEpO3JldHVybiBifTtfLkliPWZ1bmN0aW9uIFJ4ZCgpe3ZhciBhO2lmKCh0aGlzLkRiJjY0KSE9MClyZXR1cm4gR3FkKHRoaXMpO2E9bmV3IFVnYjtRZ2IoUWdiKFFnYihhLHRoaXMuYj90aGlzLmIuTmcoKTpScWUpLEZ2ZSkseGdiKHRoaXMuYykpO3JldHVybiBhLmF9O18uYT0tMTtfLmM9bnVsbDt2YXIgTzM9amViKFVDZSwnRWxrUHJvcGVydHlUb1ZhbHVlTWFwRW50cnlJbXBsJywxMDg2KTtZY2IoOTczLDEse30sZHlkKTt2YXIgUTM9amViKHdEZSwnSnNvbkFkYXB0ZXInLDk3Myk7WWNiKDIxNCw2MyxOcmUsZXlkKTt2YXIgUjM9amViKHdEZSwnSnNvbkltcG9ydEV4Y2VwdGlvbicsMjE0KTtZY2IoODQ1LDEse30sQXpkKTt2YXIgRzQ9amViKHdEZSwnSnNvbkltcG9ydGVyJyw4NDUpO1ljYig4NzksMSx7fSxCemQpO18uQWk9ZnVuY3Rpb24gQ3pkKGEpe3p5ZCh0aGlzLmEsdGhpcy5iLEpEKGEsMTM4KSl9O3ZhciBTMz1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDAkVHlwZScsODc5KTtZY2IoODgwLDEse30sRHpkKTtfLkFpPWZ1bmN0aW9uIEV6ZChhKXtBeWQodGhpcy5hLHRoaXMuYixKRChhLDEzOCkpfTt2YXIgVDM9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQxJFR5cGUnLDg4MCk7WWNiKDg4OCwxLHt9LEZ6ZCk7Xy5BaT1mdW5jdGlvbiBHemQoYSl7QnlkKHRoaXMuYSxKRChhLDE0NykpfTt2YXIgVTM9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQxMCRUeXBlJyw4ODgpO1ljYig4OTAsMSx7fSxIemQpO18uQWk9ZnVuY3Rpb24gSXpkKGEpe0N5ZCh0aGlzLmEsdGhpcy5iLEpEKGEsMTM4KSl9O3ZhciBWMz1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDExJFR5cGUnLDg5MCk7WWNiKDg5MSwxLHt9LEp6ZCk7Xy5BaT1mdW5jdGlvbiBLemQoYSl7RHlkKHRoaXMuYSx0aGlzLmIsSkQoYSwxMzgpKX07dmFyIFczPWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMTIkVHlwZScsODkxKTtZY2IoODk3LDEse30sTHpkKTtfLkFpPWZ1bmN0aW9uIE16ZChhKXtFeWQodGhpcy5hLHRoaXMuYix0aGlzLmMsdGhpcy5kLEpEKGEsMTM4KSl9O3ZhciBYMz1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDEzJFR5cGUnLDg5Nyk7WWNiKDg5NiwxLHt9LE56ZCk7Xy5BaT1mdW5jdGlvbiBPemQoYSl7RnlkKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCxKRChhLDE0NykpfTt2YXIgWTM9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQxNCRUeXBlJyw4OTYpO1ljYig4OTIsMSx7fSxQemQpO18uQWk9ZnVuY3Rpb24gUXpkKGEpe0d5ZCh0aGlzLmEsdGhpcy5iLE9EKGEpKX07dmFyIFozPWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMTUkVHlwZScsODkyKTtZY2IoODkzLDEse30sUnpkKTtfLkFpPWZ1bmN0aW9uIFN6ZChhKXtIeWQodGhpcy5hLHRoaXMuYixPRChhKSl9O3ZhciAkMz1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDE2JFR5cGUnLDg5Myk7WWNiKDg5NCwxLHt9LFR6ZCk7Xy5BaT1mdW5jdGlvbiBVemQoYSl7SXlkKHRoaXMuYix0aGlzLmEsSkQoYSwxMzgpKX07dmFyIF8zPWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMTckVHlwZScsODk0KTtZY2IoODk1LDEse30sVnpkKTtfLkFpPWZ1bmN0aW9uIFd6ZChhKXtKeWQodGhpcy5iLHRoaXMuYSxKRChhLDEzOCkpfTt2YXIgYTQ9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQxOCRUeXBlJyw4OTUpO1ljYig5MDAsMSx7fSxYemQpO18uQWk9ZnVuY3Rpb24gWXpkKGEpe0t5ZCh0aGlzLmEsSkQoYSwxNDcpKX07dmFyIGI0PWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMTkkVHlwZScsOTAwKTtZY2IoODgxLDEse30sWnpkKTtfLkFpPWZ1bmN0aW9uICR6ZChhKXtMeWQodGhpcy5hLEpEKGEsMTM4KSl9O3ZhciBjND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDIkVHlwZScsODgxKTtZY2IoODk4LDEse30sX3pkKTtfLkFpPWZ1bmN0aW9uIGFBZChhKXtxdWQodGhpcy5hLEJlYihNRChhKSkpfTt2YXIgZDQ9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQyMCRUeXBlJyw4OTgpO1ljYig4OTksMSx7fSxiQWQpO18uQWk9ZnVuY3Rpb24gY0FkKGEpe3J1ZCh0aGlzLmEsQmViKE1EKGEpKSl9O3ZhciBlND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDIxJFR5cGUnLDg5OSk7WWNiKDkwMywxLHt9LGRBZCk7Xy5BaT1mdW5jdGlvbiBlQWQoYSl7TXlkKHRoaXMuYSxKRChhLDE0NykpfTt2YXIgZjQ9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQyMiRUeXBlJyw5MDMpO1ljYig5MDEsMSx7fSxmQWQpO18uQWk9ZnVuY3Rpb24gZ0FkKGEpe2p1ZCh0aGlzLmEsQmViKE1EKGEpKSl9O3ZhciBnND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDIzJFR5cGUnLDkwMSk7WWNiKDkwMiwxLHt9LGhBZCk7Xy5BaT1mdW5jdGlvbiBpQWQoYSl7a3VkKHRoaXMuYSxCZWIoTUQoYSkpKX07dmFyIGg0PWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMjQkVHlwZScsOTAyKTtZY2IoOTA1LDEse30sakFkKTtfLkFpPWZ1bmN0aW9uIGtBZChhKXtOeWQodGhpcy5hLEpEKGEsMTM4KSl9O3ZhciBpND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDI1JFR5cGUnLDkwNSk7WWNiKDkwNCwxLHt9LGxBZCk7Xy5BaT1mdW5jdGlvbiBtQWQoYSl7T3lkKHRoaXMuYSxKRChhLDE0NykpfTt2YXIgajQ9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQyNiRUeXBlJyw5MDQpO1ljYig5MDYsMSxrcmUsbkFkKTtfLkFkPWZ1bmN0aW9uIG9BZChhKXtQeWQodGhpcy5iLHRoaXMuYSxPRChhKSl9O3ZhciBrND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDI3JFR5cGUnLDkwNik7WWNiKDkwNywxLGtyZSxwQWQpO18uQWQ9ZnVuY3Rpb24gcUFkKGEpe1F5ZCh0aGlzLmIsdGhpcy5hLE9EKGEpKX07dmFyIGw0PWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMjgkVHlwZScsOTA3KTtZY2IoOTA4LDEse30sckFkKTtfLkFpPWZ1bmN0aW9uIHNBZChhKXtSeWQodGhpcy5hLHRoaXMuYixKRChhLDEzOCkpfTt2YXIgbTQ9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQyOSRUeXBlJyw5MDgpO1ljYig4ODQsMSx7fSx0QWQpO18uQWk9ZnVuY3Rpb24gdUFkKGEpe1N5ZCh0aGlzLmEsSkQoYSwxNDcpKX07dmFyIG40PWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMyRUeXBlJyw4ODQpO1ljYig5MDksMSx7fSx2QWQpO18uQWk9ZnVuY3Rpb24gd0FkKGEpe1R5ZCh0aGlzLmEsdGhpcy5iLEpEKGEsMTM4KSl9O3ZhciBvND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDMwJFR5cGUnLDkwOSk7WWNiKDkxMCwxLHt9LHhBZCk7Xy5BaT1mdW5jdGlvbiB5QWQoYSl7VXlkKHRoaXMuYSxNRChhKSl9O3ZhciBwND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDMxJFR5cGUnLDkxMCk7WWNiKDkxMSwxLHt9LHpBZCk7Xy5BaT1mdW5jdGlvbiBBQWQoYSl7VnlkKHRoaXMuYSxNRChhKSl9O3ZhciBxND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDMyJFR5cGUnLDkxMSk7WWNiKDkxMiwxLHt9LEJBZCk7Xy5BaT1mdW5jdGlvbiBDQWQoYSl7V3lkKHRoaXMuYSxNRChhKSl9O3ZhciByND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDMzJFR5cGUnLDkxMik7WWNiKDkxMywxLHt9LERBZCk7Xy5BaT1mdW5jdGlvbiBFQWQoYSl7WHlkKHRoaXMuYSxNRChhKSl9O3ZhciBzND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM0JFR5cGUnLDkxMyk7WWNiKDkxNCwxLHt9LEZBZCk7Xy5BaT1mdW5jdGlvbiBHQWQoYSl7bXpkKHRoaXMuYSxKRChhLDU3KSl9O3ZhciB0ND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM1JFR5cGUnLDkxNCk7WWNiKDkxNSwxLHt9LEhBZCk7Xy5BaT1mdW5jdGlvbiBJQWQoYSl7bnpkKHRoaXMuYSxKRChhLDU3KSl9O3ZhciB1ND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM2JFR5cGUnLDkxNSk7WWNiKDkxOSwxLHt9LEtBZCk7dmFyIHY0PWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkMzckVHlwZScsOTE5KTtZY2IoOTE2LDEsa3JlLExBZCk7Xy5BZD1mdW5jdGlvbiBNQWQoYSl7WnlkKHRoaXMuYSx0aGlzLmMsdGhpcy5iLEpEKGEsMzY5KSl9O3ZhciB3ND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM4JFR5cGUnLDkxNik7WWNiKDkxNywxLGtyZSxOQWQpO18uQWQ9ZnVuY3Rpb24gT0FkKGEpeyR5ZCh0aGlzLmEsdGhpcy5iLEpEKGEsMTY4KSl9O3ZhciB4ND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDM5JFR5cGUnLDkxNyk7WWNiKDg4MiwxLHt9LFBBZCk7Xy5BaT1mdW5jdGlvbiBRQWQoYSl7cXVkKHRoaXMuYSxCZWIoTUQoYSkpKX07dmFyIHk0PWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkNCRUeXBlJyw4ODIpO1ljYig5MTgsMSxrcmUsUkFkKTtfLkFkPWZ1bmN0aW9uIFNBZChhKXtfeWQodGhpcy5hLHRoaXMuYixKRChhLDE2OCkpfTt2YXIgejQ9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQ0MCRUeXBlJyw5MTgpO1ljYig5MjAsMSxrcmUsVEFkKTtfLkFkPWZ1bmN0aW9uIFVBZChhKXthemQodGhpcy5hLHRoaXMuYix0aGlzLmMsSkQoYSw4KSl9O3ZhciBBND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDQxJFR5cGUnLDkyMCk7WWNiKDg4MywxLHt9LFZBZCk7Xy5BaT1mdW5jdGlvbiBXQWQoYSl7cnVkKHRoaXMuYSxCZWIoTUQoYSkpKX07dmFyIEI0PWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkNSRUeXBlJyw4ODMpO1ljYig4ODcsMSx7fSxYQWQpO18uQWk9ZnVuY3Rpb24gWUFkKGEpe2J6ZCh0aGlzLmEsSkQoYSwxNDcpKX07dmFyIEM0PWplYih3RGUsJ0pzb25JbXBvcnRlci9sYW1iZGEkNiRUeXBlJyw4ODcpO1ljYig4ODUsMSx7fSxaQWQpO18uQWk9ZnVuY3Rpb24gJEFkKGEpe2p1ZCh0aGlzLmEsQmViKE1EKGEpKSl9O3ZhciBEND1qZWIod0RlLCdKc29uSW1wb3J0ZXIvbGFtYmRhJDckVHlwZScsODg1KTtZY2IoODg2LDEse30sX0FkKTtfLkFpPWZ1bmN0aW9uIGFCZChhKXtrdWQodGhpcy5hLEJlYihNRChhKSkpfTt2YXIgRTQ9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQ4JFR5cGUnLDg4Nik7WWNiKDg4OSwxLHt9LGJCZCk7Xy5BaT1mdW5jdGlvbiBjQmQoYSl7Y3pkKHRoaXMuYSxKRChhLDEzOCkpfTt2YXIgRjQ9amViKHdEZSwnSnNvbkltcG9ydGVyL2xhbWJkYSQ5JFR5cGUnLDg4OSk7WWNiKDkzOSwxLGtyZSxsQmQpO18uQWQ9ZnVuY3Rpb24gbUJkKGEpe1N4ZCh0aGlzLmEsbmV3IEdDKE9EKGEpKSl9O3ZhciBIND1qZWIod0RlLCdKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDAkVHlwZScsOTM5KTtZY2IoOTQwLDEsa3JlLG5CZCk7Xy5BZD1mdW5jdGlvbiBvQmQoYSl7aEJkKHRoaXMuYSxKRChhLDI0MykpfTt2YXIgSTQ9amViKHdEZSwnSnNvbk1ldGFEYXRhQ29udmVydGVyL2xhbWJkYSQxJFR5cGUnLDk0MCk7WWNiKDk0MSwxLGtyZSxwQmQpO18uQWQ9ZnVuY3Rpb24gcUJkKGEpe2lCZCh0aGlzLmEsSkQoYSwxNDkpKX07dmFyIEo0PWplYih3RGUsJ0pzb25NZXRhRGF0YUNvbnZlcnRlci9sYW1iZGEkMiRUeXBlJyw5NDEpO1ljYig5NDIsMSxrcmUsckJkKTtfLkFkPWZ1bmN0aW9uIHNCZChhKXtqQmQodGhpcy5hLEpEKGEsMTcwKSl9O3ZhciBLND1qZWIod0RlLCdKc29uTWV0YURhdGFDb252ZXJ0ZXIvbGFtYmRhJDMkVHlwZScsOTQyKTtZY2IoMjQzLDIzLHszOjEsMzQ6MSwyMzoxLDI0MzoxfSxDQmQpO3ZhciB0QmQsdUJkLHZCZCx3QmQseEJkLHlCZCx6QmQsQUJkO3ZhciBMND1rZWIodnVlLCdHcmFwaEZlYXR1cmUnLDI0MyxNSSxFQmQsREJkKTt2YXIgRkJkO1ljYigxMiwxLHszNDoxLDE0NDoxfSxLQmQsTEJkLE1CZCxOQmQpO18uRGQ9ZnVuY3Rpb24gT0JkKGEpe3JldHVybiBIQmQodGhpcyxKRChhLDE0NCkpfTtfLkZiPWZ1bmN0aW9uIFBCZChhKXtyZXR1cm4gSUJkKHRoaXMsYSl9O18uUWc9ZnVuY3Rpb24gUUJkKCl7cmV0dXJuIEpCZCh0aGlzKX07Xy5OZz1mdW5jdGlvbiBSQmQoKXtyZXR1cm4gdGhpcy5ifTtfLkhiPWZ1bmN0aW9uIFNCZCgpe3JldHVybiBmZ2IodGhpcy5iKX07Xy5JYj1mdW5jdGlvbiBUQmQoKXtyZXR1cm4gdGhpcy5ifTt2YXIgUTQ9amViKHZ1ZSwnUHJvcGVydHknLDEyKTtZY2IoNjU2LDEsQnRlLFZCZCk7Xy5MZT1mdW5jdGlvbiBXQmQoYSxiKXtyZXR1cm4gVUJkKHRoaXMsSkQoYSwxMDIpLEpEKGIsMTAyKSl9O18uRmI9ZnVuY3Rpb24gWEJkKGEpe3JldHVybiB0aGlzPT09YX07Xy5NZT1mdW5jdGlvbiBZQmQoKXtyZXR1cm4gbmV3IHVxYih0aGlzKX07dmFyIFA0PWplYih2dWUsJ1Byb3BlcnR5SG9sZGVyQ29tcGFyYXRvcicsNjU2KTtZY2IoNjkzLDEsV3FlLG5DZCk7Xy5OYj1mdW5jdGlvbiBvQ2QoYSl7T3NiKHRoaXMsYSl9O18uUGI9ZnVuY3Rpb24gcUNkKCl7cmV0dXJuIG1DZCh0aGlzKX07Xy5RYj1mdW5jdGlvbiByQ2QoKXtQc2IoKX07Xy5PYj1mdW5jdGlvbiBwQ2QoKXtyZXR1cm4gISF0aGlzLmF9O3ZhciBSND1qZWIoTERlLCdFbGtHcmFwaFV0aWwvQW5jZXN0b3JJdGVyYXRvcicsNjkzKTt2YXIgUTU9bGViKHREZSwnRUxpc3QnKTtZY2IoNzAsNTUsezIwOjEsMzE6MSw1NToxLDE2OjEsMTU6MSw3MDoxLDYxOjF9KTtfLl9jPWZ1bmN0aW9uIEdDZChhLGIpe3NDZCh0aGlzLGEsYil9O18uRWM9ZnVuY3Rpb24gSENkKGEpe3JldHVybiB0Q2QodGhpcyxhKX07Xy5hZD1mdW5jdGlvbiBJQ2QoYSxiKXtyZXR1cm4gdUNkKHRoaXMsYSxiKX07Xy5GYz1mdW5jdGlvbiBKQ2QoYSl7cmV0dXJuIHZDZCh0aGlzLGEpfTtfLkZpPWZ1bmN0aW9uIEtDZCgpe3JldHVybiBuZXcgWEhkKHRoaXMpfTtfLkdpPWZ1bmN0aW9uIExDZCgpe3JldHVybiBuZXcgJEhkKHRoaXMpfTtfLkhpPWZ1bmN0aW9uIE1DZChhKXtyZXR1cm4gd0NkKHRoaXMsYSl9O18uSWk9ZnVuY3Rpb24gTkNkKCl7cmV0dXJuIHRydWV9O18uSmk9ZnVuY3Rpb24gT0NkKGEsYil7fTtfLktpPWZ1bmN0aW9uIFBDZCgpe307Xy5MaT1mdW5jdGlvbiBRQ2QoYSxiKXt4Q2QodGhpcyxhLGIpfTtfLk1pPWZ1bmN0aW9uIFJDZChhLGIsYyl7fTtfLk5pPWZ1bmN0aW9uIFNDZChhLGIpe307Xy5PaT1mdW5jdGlvbiBUQ2QoYSxiLGMpe307Xy5GYj1mdW5jdGlvbiBVQ2QoYSl7cmV0dXJuIHlDZCh0aGlzLGEpfTtfLkhiPWZ1bmN0aW9uIFZDZCgpe3JldHVybiBCQ2QodGhpcyl9O18uUGk9ZnVuY3Rpb24gV0NkKCl7cmV0dXJuIGZhbHNlfTtfLkpjPWZ1bmN0aW9uIFhDZCgpe3JldHVybiBuZXcgQ0hkKHRoaXMpfTtfLmNkPWZ1bmN0aW9uIFlDZCgpe3JldHVybiBuZXcgTEhkKHRoaXMpfTtfLmRkPWZ1bmN0aW9uIFpDZChhKXt2YXIgYjtiPXRoaXMuZ2MoKTtpZihhPDB8fGE+Yil0aHJvdyBzY2IobmV3IHpIZChhLGIpKTtyZXR1cm4gbmV3IE1IZCh0aGlzLGEpfTtfLlJpPWZ1bmN0aW9uICRDZChhLGIpe3RoaXMuUWkoYSx0aGlzLmJkKGIpKX07Xy5LYz1mdW5jdGlvbiBfQ2QoYSl7cmV0dXJuIENDZCh0aGlzLGEpfTtfLlRpPWZ1bmN0aW9uIGFEZChhLGIpe3JldHVybiBifTtfLmZkPWZ1bmN0aW9uIGJEZChhLGIpe3JldHVybiBEQ2QodGhpcyxhLGIpfTtfLkliPWZ1bmN0aW9uIGNEZCgpe3JldHVybiBFQ2QodGhpcyl9O18uVmk9ZnVuY3Rpb24gZERkKCl7cmV0dXJuIHRydWV9O18uV2k9ZnVuY3Rpb24gZURkKGEsYil7cmV0dXJuIEZDZCh0aGlzLGIpfTt2YXIgbTU9amViKHREZSwnQWJzdHJhY3RFTGlzdCcsNzApO1ljYig2Niw3MCxRRGUsdkRkLHdEZCx4RGQpO18uQmk9ZnVuY3Rpb24geURkKGEsYil7cmV0dXJuIGZEZCh0aGlzLGEsYil9O18uQ2k9ZnVuY3Rpb24gekRkKGEpe3JldHVybiBnRGQodGhpcyxhKX07Xy5EaT1mdW5jdGlvbiBBRGQoYSxiKXtoRGQodGhpcyxhLGIpfTtfLkVpPWZ1bmN0aW9uIEJEZChhKXtpRGQodGhpcyxhKX07Xy5YaT1mdW5jdGlvbiBDRGQoYSl7cmV0dXJuIGtEZCh0aGlzLGEpfTtfLiRiPWZ1bmN0aW9uIEREZCgpe2xEZCh0aGlzKX07Xy5HYz1mdW5jdGlvbiBFRGQoYSl7cmV0dXJuIG1EZCh0aGlzLGEpfTtfLlhiPWZ1bmN0aW9uIEZEZChhKXtyZXR1cm4gbkRkKHRoaXMsYSl9O18uWWk9ZnVuY3Rpb24gR0RkKGEpe3ZhciBiLGMsZDsrK3RoaXMuajtjPXRoaXMuZz09bnVsbD8wOnRoaXMuZy5sZW5ndGg7aWYoYT5jKXtkPXRoaXMuZztiPWMrKGMvMnwwKSs0O2I8YSYmKGI9YSk7dGhpcy5nPXRoaXMuWmkoYik7ZCE9bnVsbCYmJGdiKGQsMCx0aGlzLmcsMCx0aGlzLmkpfX07Xy5iZD1mdW5jdGlvbiBIRGQoYSl7cmV0dXJuIG9EZCh0aGlzLGEpfTtfLmRjPWZ1bmN0aW9uIElEZCgpe3JldHVybiB0aGlzLmk9PTB9O18uUWk9ZnVuY3Rpb24gSkRkKGEsYil7cmV0dXJuIHBEZCh0aGlzLGEsYil9O18uWmk9ZnVuY3Rpb24gS0RkKGEpe3JldHVybiBTQyhhSixOcWUsMSxhLDUsMSl9O18uU2k9ZnVuY3Rpb24gTERkKGEpe3JldHVybiB0aGlzLmdbYV19O18uZWQ9ZnVuY3Rpb24gTURkKGEpe3JldHVybiBxRGQodGhpcyxhKX07Xy5VaT1mdW5jdGlvbiBORGQoYSxiKXtyZXR1cm4gckRkKHRoaXMsYSxiKX07Xy5nYz1mdW5jdGlvbiBPRGQoKXtyZXR1cm4gdGhpcy5pfTtfLk5jPWZ1bmN0aW9uIFBEZCgpe3JldHVybiB0RGQodGhpcyl9O18uT2M9ZnVuY3Rpb24gUURkKGEpe3JldHVybiB1RGQodGhpcyxhKX07Xy5pPTA7dmFyIHY1PWplYih0RGUsJ0Jhc2ljRUxpc3QnLDY2KTt2YXIgVTU9bGViKHREZSwnVHJlZUl0ZXJhdG9yJyk7WWNiKDY5Miw2NixSRGUpO18uTmI9ZnVuY3Rpb24gVURkKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIFZEZCgpe3JldHVybiB0aGlzLmc9PW51bGwmJiF0aGlzLmM/UkRkKHRoaXMpOnRoaXMuZz09bnVsbHx8dGhpcy5pIT0wJiZKRCh0aGlzLmdbdGhpcy5pLTFdLDQ5KS5PYigpfTtfLlBiPWZ1bmN0aW9uIFdEZCgpe3JldHVybiBTRGQodGhpcyl9O18uUWI9ZnVuY3Rpb24gWERkKCl7aWYoIXRoaXMuZSl7dGhyb3cgc2NiKG5ldyBXZWIoJ1RoZXJlIGlzIG5vIHZhbGlkIG9iamVjdCB0byByZW1vdmUuJykpfXRoaXMuZS5RYigpfTtfLmM9ZmFsc2U7dmFyIG41PWplYih0RGUsJ0Fic3RyYWN0VHJlZUl0ZXJhdG9yJyw2OTIpO1ljYig1OTksNjkyLFJEZSxZRGQpO18uJGk9ZnVuY3Rpb24gWkRkKGEpe3ZhciBiO2I9SkQoYSw1NykuQ2goKS5KYygpO1JEKGIsMjg0KSYmSkQoYiwyODQpLnRsKG5ldyAkRGQpO3JldHVybiBifTt2YXIgVDQ9amViKExEZSwnRWxrR3JhcGhVdGlsL1Byb3BlcnRpZXNTa2lwcGluZ1RyZWVJdGVyYXRvcicsNTk5KTtZY2IoOTQzLDEse30sJERkKTt2YXIgUzQ9amViKExEZSwnRWxrR3JhcGhVdGlsL1Byb3BlcnRpZXNTa2lwcGluZ1RyZWVJdGVyYXRvci8xJyw5NDMpO3ZhciBfRGQsYUVkO3ZhciBWND1qZWIoTERlLCdFbGtSZWZsZWN0JyxudWxsKTtZY2IoODc3LDEsekJlLGdFZCk7Xy5QZz1mdW5jdGlvbiBoRWQoYSl7cmV0dXJuIGJFZCgpLHByYihKRChhLDE4MSkpfTt2YXIgVTQ9amViKExEZSwnRWxrUmVmbGVjdC9sYW1iZGEkMCRUeXBlJyw4NzcpO3ZhciBpRWQ7dmFyIFQ1PWxlYih0RGUsJ1Jlc291cmNlTG9jYXRvcicpO1ljYigxMDQwLDEse30pO3ZhciBLNT1qZWIodERlLCdEZWxlZ2F0aW5nUmVzb3VyY2VMb2NhdG9yJywxMDQwKTtZY2IoMTA0MSwxMDQwLHt9KTt2YXIgVzQ9amViKCdvcmcuZWNsaXBzZS5lbWYuY29tbW9uJywnRU1GUGx1Z2luJywxMDQxKTt2YXIgWDQ9bGViKEVFZSwnQWRhcHRlcicpO3ZhciBZND1sZWIoRUVlLCdOb3RpZmljYXRpb24nKTtZY2IoMTEzOCwxLEZFZSk7Xy5faT1mdW5jdGlvbiBzRWQoKXtyZXR1cm4gdGhpcy5kfTtfLmFqPWZ1bmN0aW9uIHRFZChhKXt9O18uYmo9ZnVuY3Rpb24gdUVkKGEpe3RoaXMuZD1hfTtfLmNqPWZ1bmN0aW9uIHZFZChhKXt0aGlzLmQ9PWEmJih0aGlzLmQ9bnVsbCl9O18uZD1udWxsO3ZhciBaND1qZWIoS0NlLCdBZGFwdGVySW1wbCcsMTEzOCk7WWNiKDIwMzksNzAsR0VlKTtfLkJpPWZ1bmN0aW9uIENFZChhLGIpe3JldHVybiB3RWQodGhpcyxhLGIpfTtfLkNpPWZ1bmN0aW9uIERFZChhKXt2YXIgYixjLGQ7Kyt0aGlzLmo7aWYoYS5kYygpKXtyZXR1cm4gZmFsc2V9ZWxzZXtiPXRoaXMuQmooKTtmb3IoZD1hLkpjKCk7ZC5PYigpOyl7Yz1kLlBiKCk7dGhpcy5vaih0aGlzLldpKGIsYykpOysrYn1yZXR1cm4gdHJ1ZX19O18uRGk9ZnVuY3Rpb24gRUVkKGEsYil7eEVkKHRoaXMsYSxiKX07Xy5FaT1mdW5jdGlvbiBGRWQoYSl7eUVkKHRoaXMsYSl9O18ubWo9ZnVuY3Rpb24gR0VkKCl7cmV0dXJuIHRoaXMucGooKX07Xy4kYj1mdW5jdGlvbiBIRWQoKXt6RWQodGhpcyx0aGlzLkJqKCksdGhpcy5DaigpKX07Xy5HYz1mdW5jdGlvbiBJRWQoYSl7cmV0dXJuIHRoaXMucmooYSl9O18uSGM9ZnVuY3Rpb24gSkVkKGEpe3JldHVybiB0aGlzLnNqKGEpfTtfLm5qPWZ1bmN0aW9uIEtFZChhLGIpe3RoaXMueWooKS5SbSgpfTtfLm9qPWZ1bmN0aW9uIExFZChhKXt0aGlzLnlqKCkuUm0oKX07Xy5waj1mdW5jdGlvbiBNRWQoKXtyZXR1cm4gdGhpcy55aigpfTtfLnFqPWZ1bmN0aW9uIE5FZCgpe3RoaXMueWooKS5SbSgpfTtfLnJqPWZ1bmN0aW9uIE9FZChhKXtyZXR1cm4gdGhpcy55aigpLlJtKCl9O18uc2o9ZnVuY3Rpb24gUEVkKGEpe3JldHVybiB0aGlzLnlqKCkuUm0oKX07Xy50aj1mdW5jdGlvbiBRRWQoYSl7cmV0dXJuIHRoaXMueWooKS5SbSgpfTtfLnVqPWZ1bmN0aW9uIFJFZChhKXtyZXR1cm4gdGhpcy55aigpLlJtKCl9O18udmo9ZnVuY3Rpb24gU0VkKCl7cmV0dXJuIHRoaXMueWooKS5SbSgpfTtfLndqPWZ1bmN0aW9uIFRFZChhKXtyZXR1cm4gdGhpcy55aigpLlJtKCl9O18ueGo9ZnVuY3Rpb24gVUVkKCl7cmV0dXJuIHRoaXMueWooKS5SbSgpfTtfLnpqPWZ1bmN0aW9uIFZFZChhKXtyZXR1cm4gdGhpcy55aigpLlJtKCl9O18uQWo9ZnVuY3Rpb24gV0VkKGEsYil7cmV0dXJuIHRoaXMueWooKS5SbSgpfTtfLkJqPWZ1bmN0aW9uIFhFZCgpe3JldHVybiB0aGlzLnlqKCkuUm0oKX07Xy5Daj1mdW5jdGlvbiBZRWQoKXtyZXR1cm4gdGhpcy55aigpLlJtKCl9O18uRGo9ZnVuY3Rpb24gWkVkKGEpe3JldHVybiB0aGlzLnlqKCkuUm0oKX07Xy5Faj1mdW5jdGlvbiAkRWQoKXtyZXR1cm4gdGhpcy55aigpLlJtKCl9O18uRmI9ZnVuY3Rpb24gX0VkKGEpe3JldHVybiB0aGlzLnRqKGEpfTtfLlhiPWZ1bmN0aW9uIGFGZChhKXtyZXR1cm4gdGhpcy5UaShhLHRoaXMudWooYSkpfTtfLkhiPWZ1bmN0aW9uIGJGZCgpe3JldHVybiB0aGlzLnZqKCl9O18uYmQ9ZnVuY3Rpb24gY0ZkKGEpe3JldHVybiB0aGlzLndqKGEpfTtfLmRjPWZ1bmN0aW9uIGRGZCgpe3JldHVybiB0aGlzLnhqKCl9O18uUWk9ZnVuY3Rpb24gZUZkKGEsYil7cmV0dXJuIEFFZCh0aGlzLGEsYil9O18uU2k9ZnVuY3Rpb24gZkZkKGEpe3JldHVybiB0aGlzLnVqKGEpfTtfLmVkPWZ1bmN0aW9uIGdGZChhKXtyZXR1cm4gQkVkKHRoaXMsYSl9O18uS2M9ZnVuY3Rpb24gaEZkKGEpe3ZhciBiO2I9dGhpcy5iZChhKTtpZihiPj0wKXt0aGlzLmVkKGIpO3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5VaT1mdW5jdGlvbiBpRmQoYSxiKXtyZXR1cm4gdGhpcy5BaihhLHRoaXMuV2koYSxiKSl9O18uZ2M9ZnVuY3Rpb24gakZkKCl7cmV0dXJuIHRoaXMuQmooKX07Xy5OYz1mdW5jdGlvbiBrRmQoKXtyZXR1cm4gdGhpcy5DaigpfTtfLk9jPWZ1bmN0aW9uIGxGZChhKXtyZXR1cm4gdGhpcy5EaihhKX07Xy5JYj1mdW5jdGlvbiBtRmQoKXtyZXR1cm4gdGhpcy5FaigpfTt2YXIgSjU9amViKHREZSwnRGVsZWdhdGluZ0VMaXN0JywyMDM5KTtZY2IoMjA0MCwyMDM5LEdFZSk7Xy5CaT1mdW5jdGlvbiB1RmQoYSxiKXtyZXR1cm4gbkZkKHRoaXMsYSxiKX07Xy5DaT1mdW5jdGlvbiB2RmQoYSl7cmV0dXJuIHRoaXMuQmkodGhpcy5CaigpLGEpfTtfLkRpPWZ1bmN0aW9uIHdGZChhLGIpe29GZCh0aGlzLGEsYil9O18uRWk9ZnVuY3Rpb24geEZkKGEpe3BGZCh0aGlzLGEpfTtfLklpPWZ1bmN0aW9uIHlGZCgpe3JldHVybiAhdGhpcy5KaigpfTtfLiRiPWZ1bmN0aW9uIHpGZCgpe3NGZCh0aGlzKX07Xy5Gaj1mdW5jdGlvbiBBRmQoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IHpHZCh0aGlzLGEsYixjLGQsZSl9O18uR2o9ZnVuY3Rpb24gQkZkKGEpe1dwZCh0aGlzLmdqKCksYSl9O18uSGo9ZnVuY3Rpb24gQ0ZkKCl7cmV0dXJuIG51bGx9O18uSWo9ZnVuY3Rpb24gREZkKCl7cmV0dXJuIC0xfTtfLmdqPWZ1bmN0aW9uIEVGZCgpe3JldHVybiBudWxsfTtfLkpqPWZ1bmN0aW9uIEZGZCgpe3JldHVybiBmYWxzZX07Xy5Laj1mdW5jdGlvbiBHRmQoYSxiKXtyZXR1cm4gYn07Xy5Maj1mdW5jdGlvbiBIRmQoYSxiKXtyZXR1cm4gYn07Xy5Naj1mdW5jdGlvbiBJRmQoKXtyZXR1cm4gZmFsc2V9O18uTmo9ZnVuY3Rpb24gSkZkKCl7cmV0dXJuICF0aGlzLnhqKCl9O18uUWk9ZnVuY3Rpb24gS0ZkKGEsYil7dmFyIGMsZDtpZih0aGlzLk1qKCkpe2Q9dGhpcy5OaigpO2M9QUVkKHRoaXMsYSxiKTt0aGlzLkdqKHRoaXMuRmooNyxqZmIoYiksYyxhLGQpKTtyZXR1cm4gY31lbHNle3JldHVybiBBRWQodGhpcyxhLGIpfX07Xy5lZD1mdW5jdGlvbiBMRmQoYSl7dmFyIGIsYyxkLGU7aWYodGhpcy5NaigpKXtjPW51bGw7ZD10aGlzLk5qKCk7Yj10aGlzLkZqKDQsZT1CRWQodGhpcyxhKSxudWxsLGEsZCk7aWYodGhpcy5KaigpJiYhIWUpe2M9dGhpcy5MaihlLGMpO2lmKCFjKXt0aGlzLkdqKGIpfWVsc2V7Yy5raihiKTtjLmxqKCl9fWVsc2V7aWYoIWMpe3RoaXMuR2ooYil9ZWxzZXtjLmtqKGIpO2MubGooKX19cmV0dXJuIGV9ZWxzZXtlPUJFZCh0aGlzLGEpO2lmKHRoaXMuSmooKSYmISFlKXtjPXRoaXMuTGooZSxudWxsKTshIWMmJmMubGooKX1yZXR1cm4gZX19O18uVWk9ZnVuY3Rpb24gTUZkKGEsYil7cmV0dXJuIHRGZCh0aGlzLGEsYil9O3ZhciBhNT1qZWIoS0NlLCdEZWxlZ2F0aW5nTm90aWZ5aW5nTGlzdEltcGwnLDIwNDApO1ljYigxNTAsMSxIRWUpO18ua2o9ZnVuY3Rpb24gbUdkKGEpe3JldHVybiBORmQodGhpcyxhKX07Xy5saj1mdW5jdGlvbiBuR2QoKXtPRmQodGhpcyl9O18uZGo9ZnVuY3Rpb24gb0dkKCl7cmV0dXJuIHRoaXMuZH07Xy5Iaj1mdW5jdGlvbiBwR2QoKXtyZXR1cm4gbnVsbH07Xy5Paj1mdW5jdGlvbiBxR2QoKXtyZXR1cm4gbnVsbH07Xy5laj1mdW5jdGlvbiByR2QoYSl7cmV0dXJuIC0xfTtfLmZqPWZ1bmN0aW9uIHNHZCgpe3JldHVybiBYRmQodGhpcyl9O18uZ2o9ZnVuY3Rpb24gdEdkKCl7cmV0dXJuIG51bGx9O18uaGo9ZnVuY3Rpb24gdUdkKCl7cmV0dXJuIGVHZCh0aGlzKX07Xy5paj1mdW5jdGlvbiB2R2QoKXtyZXR1cm4gdGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMub307Xy5Qaj1mdW5jdGlvbiB3R2QoKXtyZXR1cm4gZmFsc2V9O18uamo9ZnVuY3Rpb24geEdkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGw7c3dpdGNoKHRoaXMuZCl7Y2FzZSAxOmNhc2UgMjp7ZT1hLmRqKCk7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6e2Y9YS5naigpO2lmKFhEKGYpPT09WEQodGhpcy5naigpKSYmdGhpcy5laihudWxsKT09YS5laihudWxsKSl7dGhpcy5nPWEuZmooKTthLmRqKCk9PTEmJih0aGlzLmQ9MSk7cmV0dXJuIHRydWV9fX19Y2FzZSA0OntlPWEuZGooKTtzd2l0Y2goZSl7Y2FzZSA0OntmPWEuZ2ooKTtpZihYRChmKT09PVhEKHRoaXMuZ2ooKSkmJnRoaXMuZWoobnVsbCk9PWEuZWoobnVsbCkpe2o9Z0dkKHRoaXMpO2k9dGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMubztnPWEuaWooKTt0aGlzLmQ9NjtsPW5ldyB3RGQoMik7aWYoaTw9Zyl7dENkKGwsdGhpcy5uKTt0Q2QobCxhLmhqKCkpO3RoaXMuZz1XQyhPQyhjRSwxKSxpc2UsMzAsMTUsW3RoaXMubz1pLGcrMV0pfWVsc2V7dENkKGwsYS5oaigpKTt0Q2QobCx0aGlzLm4pO3RoaXMuZz1XQyhPQyhjRSwxKSxpc2UsMzAsMTUsW3RoaXMubz1nLGldKX10aGlzLm49bDtqfHwodGhpcy5vPS0yLXRoaXMuby0xKTtyZXR1cm4gdHJ1ZX1icmVha319YnJlYWt9Y2FzZSA2OntlPWEuZGooKTtzd2l0Y2goZSl7Y2FzZSA0OntmPWEuZ2ooKTtpZihYRChmKT09PVhEKHRoaXMuZ2ooKSkmJnRoaXMuZWoobnVsbCk9PWEuZWoobnVsbCkpe2o9Z0dkKHRoaXMpO2c9YS5paigpO2s9SkQodGhpcy5nLDU0KTtkPVNDKGNFLGlzZSwzMCxrLmxlbmd0aCsxLDE1LDEpO2I9MDt3aGlsZShiPGsubGVuZ3RoKXtoPWtbYl07aWYoaDw9Zyl7ZFtiKytdPWg7KytnfWVsc2V7YnJlYWt9fWM9SkQodGhpcy5uLDE1KTtjLl9jKGIsYS5oaigpKTtkW2JdPWc7d2hpbGUoKytiPGQubGVuZ3RoKXtkW2JdPWtbYi0xXX10aGlzLmc9ZDtqfHwodGhpcy5vPS0yLWRbMF0pO3JldHVybiB0cnVlfWJyZWFrfX1icmVha319cmV0dXJuIGZhbHNlfTtfLkliPWZ1bmN0aW9uIHlHZCgpe3ZhciBhLGIsYyxkO2Q9bmV3IEpnYihlZWIodGhpcy5PbSkrJ0AnKyhiPXRiKHRoaXMpPj4+MCxiLnRvU3RyaW5nKDE2KSkpO2QuYSs9JyAoZXZlbnRUeXBlOiAnO3N3aXRjaCh0aGlzLmQpe2Nhc2UgMTp7ZC5hKz0nU0VUJzticmVha31jYXNlIDI6e2QuYSs9J1VOU0VUJzticmVha31jYXNlIDM6e2QuYSs9J0FERCc7YnJlYWt9Y2FzZSA1OntkLmErPSdBRERfTUFOWSc7YnJlYWt9Y2FzZSA0OntkLmErPSdSRU1PVkUnO2JyZWFrfWNhc2UgNjp7ZC5hKz0nUkVNT1ZFX01BTlknO2JyZWFrfWNhc2UgNzp7ZC5hKz0nTU9WRSc7YnJlYWt9Y2FzZSA4OntkLmErPSdSRU1PVklOR19BREFQVEVSJzticmVha31jYXNlIDk6e2QuYSs9J1JFU09MVkUnO2JyZWFrfWRlZmF1bHQ6e0NnYihkLHRoaXMuZCk7YnJlYWt9fWZHZCh0aGlzKSYmKGQuYSs9JywgdG91Y2g6IHRydWUnLGQpO2QuYSs9JywgcG9zaXRpb246ICc7Q2diKGQsdGhpcy5vPDA/dGhpcy5vPC0yPy0yLXRoaXMuby0xOi0xOnRoaXMubyk7ZC5hKz0nLCBub3RpZmllcjogJztEZ2IoZCx0aGlzLmdqKCkpO2QuYSs9JywgZmVhdHVyZTogJztEZ2IoZCx0aGlzLkhqKCkpO2QuYSs9Jywgb2xkVmFsdWU6ICc7RGdiKGQsZUdkKHRoaXMpKTtkLmErPScsIG5ld1ZhbHVlOiAnO2lmKHRoaXMuZD09NiYmUkQodGhpcy5nLDU0KSl7Yz1KRCh0aGlzLmcsNTQpO2QuYSs9J1snO2ZvcihhPTA7YTxjLmxlbmd0aDspe2QuYSs9Y1thXTsrK2E8Yy5sZW5ndGgmJihkLmErPUxxZSxkKX1kLmErPSddJ31lbHNle0RnYihkLFhGZCh0aGlzKSl9ZC5hKz0nLCBpc1RvdWNoOiAnO0ZnYihkLGZHZCh0aGlzKSk7ZC5hKz0nLCB3YXNTZXQ6ICc7RmdiKGQsZ0dkKHRoaXMpKTtkLmErPScpJztyZXR1cm4gZC5hfTtfLmQ9MDtfLmU9MDtfLmY9MDtfLmo9MDtfLms9MDtfLm89MDtfLnA9MDt2YXIgYzU9amViKEtDZSwnTm90aWZpY2F0aW9uSW1wbCcsMTUwKTtZY2IoMTE1MiwxNTAsSEVlLHpHZCk7Xy5Iaj1mdW5jdGlvbiBBR2QoKXtyZXR1cm4gdGhpcy5hLkhqKCl9O18uZWo9ZnVuY3Rpb24gQkdkKGEpe3JldHVybiB0aGlzLmEuSWooKX07Xy5naj1mdW5jdGlvbiBDR2QoKXtyZXR1cm4gdGhpcy5hLmdqKCl9O3ZhciBfND1qZWIoS0NlLCdEZWxlZ2F0aW5nTm90aWZ5aW5nTGlzdEltcGwvMScsMTE1Mik7WWNiKDI1MCw2NixRRGUsRUdkLEZHZCk7Xy5FYz1mdW5jdGlvbiBHR2QoYSl7cmV0dXJuIERHZCh0aGlzLEpEKGEsMzcwKSl9O18ua2o9ZnVuY3Rpb24gSEdkKGEpe3JldHVybiBER2QodGhpcyxhKX07Xy5saj1mdW5jdGlvbiBJR2QoKXt2YXIgYSxiLGM7Zm9yKGE9MDthPHRoaXMuaTsrK2Epe2I9SkQodGhpcy5nW2FdLDM3MCk7Yz1iLmdqKCk7YyE9bnVsbCYmYi5kaigpIT0tMSYmSkQoYyw5MykudGgoYil9fTtfLlppPWZ1bmN0aW9uIEpHZChhKXtyZXR1cm4gU0MoWTQsTnFlLDM3MCxhLDAsMSl9O3ZhciBiNT1qZWIoS0NlLCdOb3RpZmljYXRpb25DaGFpbkltcGwnLDI1MCk7WWNiKDE0NjQsOTIsSkNlKTtfLnFoPWZ1bmN0aW9uIEtHZCgpe3JldHVybiB0aGlzLmV9O18uc2g9ZnVuY3Rpb24gTEdkKCl7cmV0dXJuICh0aGlzLmYmMSkhPTB9O18uZj0xO3ZhciBkNT1qZWIoS0NlLCdOb3RpZmllckltcGwnLDE0NjQpO1ljYigyMDM3LDY2LFFEZSk7Xy5CaT1mdW5jdGlvbiBYR2QoYSxiKXtyZXR1cm4gTUdkKHRoaXMsYSxiKX07Xy5DaT1mdW5jdGlvbiBZR2QoYSl7cmV0dXJuIHRoaXMuQmkodGhpcy5pLGEpfTtfLkRpPWZ1bmN0aW9uIFpHZChhLGIpe05HZCh0aGlzLGEsYil9O18uRWk9ZnVuY3Rpb24gJEdkKGEpe09HZCh0aGlzLGEpfTtfLklpPWZ1bmN0aW9uIF9HZCgpe3JldHVybiAhdGhpcy5KaigpfTtfLiRiPWZ1bmN0aW9uIGFIZCgpe1JHZCh0aGlzKX07Xy5Gaj1mdW5jdGlvbiBiSGQoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IHNIZCh0aGlzLGEsYixjLGQsZSl9O18uR2o9ZnVuY3Rpb24gY0hkKGEpe1dwZCh0aGlzLmdqKCksYSl9O18uSGo9ZnVuY3Rpb24gZEhkKCl7cmV0dXJuIG51bGx9O18uSWo9ZnVuY3Rpb24gZUhkKCl7cmV0dXJuIC0xfTtfLmdqPWZ1bmN0aW9uIGZIZCgpe3JldHVybiBudWxsfTtfLkpqPWZ1bmN0aW9uIGdIZCgpe3JldHVybiBmYWxzZX07Xy5Raj1mdW5jdGlvbiBoSGQoKXtyZXR1cm4gZmFsc2V9O18uS2o9ZnVuY3Rpb24gaUhkKGEsYil7cmV0dXJuIGJ9O18uTGo9ZnVuY3Rpb24gakhkKGEsYil7cmV0dXJuIGJ9O18uTWo9ZnVuY3Rpb24ga0hkKCl7cmV0dXJuIGZhbHNlfTtfLk5qPWZ1bmN0aW9uIGxIZCgpe3JldHVybiB0aGlzLmkhPTB9O18uUWk9ZnVuY3Rpb24gbUhkKGEsYil7cmV0dXJuIFRHZCh0aGlzLGEsYil9O18uZWQ9ZnVuY3Rpb24gbkhkKGEpe3JldHVybiBVR2QodGhpcyxhKX07Xy5VaT1mdW5jdGlvbiBvSGQoYSxiKXtyZXR1cm4gV0dkKHRoaXMsYSxiKX07Xy5Saj1mdW5jdGlvbiBwSGQoYSxiKXtyZXR1cm4gYn07Xy5Taj1mdW5jdGlvbiBxSGQoYSxiKXtyZXR1cm4gYn07Xy5Uaj1mdW5jdGlvbiBySGQoYSxiLGMpe3JldHVybiBjfTt2YXIgZjU9amViKEtDZSwnTm90aWZ5aW5nTGlzdEltcGwnLDIwMzcpO1ljYigxMTUxLDE1MCxIRWUsc0hkKTtfLkhqPWZ1bmN0aW9uIHRIZCgpe3JldHVybiB0aGlzLmEuSGooKX07Xy5laj1mdW5jdGlvbiB1SGQoYSl7cmV0dXJuIHRoaXMuYS5JaigpfTtfLmdqPWZ1bmN0aW9uIHZIZCgpe3JldHVybiB0aGlzLmEuZ2ooKX07dmFyIGU1PWplYihLQ2UsJ05vdGlmeWluZ0xpc3RJbXBsLzEnLDExNTEpO1ljYig5NDQsNjYsUURlLHdIZCk7Xy5HYz1mdW5jdGlvbiB4SGQoYSl7aWYodGhpcy5pPjEwKXtpZighdGhpcy5ifHx0aGlzLmMuaiE9dGhpcy5hKXt0aGlzLmI9bmV3IFNyYih0aGlzKTt0aGlzLmE9dGhpcy5qfXJldHVybiBPcmIodGhpcy5iLGEpfWVsc2V7cmV0dXJuIG1EZCh0aGlzLGEpfX07Xy5WaT1mdW5jdGlvbiB5SGQoKXtyZXR1cm4gdHJ1ZX07Xy5hPTA7dmFyIGc1PWplYih0RGUsJ0Fic3RyYWN0RUxpc3QvMScsOTQ0KTtZY2IoMzAxLDk3LEhzZSx6SGQpO3ZhciBoNT1qZWIodERlLCdBYnN0cmFjdEVMaXN0L0Jhc2ljSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbicsMzAxKTtZY2IoNDIsMSxXcWUsQ0hkKTtfLk5iPWZ1bmN0aW9uIEZIZChhKXtPc2IodGhpcyxhKX07Xy5Vaj1mdW5jdGlvbiBESGQoKXtpZih0aGlzLmkuaiE9dGhpcy5mKXt0aHJvdyBzY2IobmV3IHlxYil9fTtfLlZqPWZ1bmN0aW9uIEVIZCgpe3JldHVybiBBSGQodGhpcyl9O18uT2I9ZnVuY3Rpb24gR0hkKCl7cmV0dXJuIHRoaXMuZSE9dGhpcy5pLmdjKCl9O18uUGI9ZnVuY3Rpb24gSEhkKCl7cmV0dXJuIHRoaXMuVmooKX07Xy5RYj1mdW5jdGlvbiBJSGQoKXtCSGQodGhpcyl9O18uZT0wO18uZj0wO18uZz0tMTt2YXIgaTU9amViKHREZSwnQWJzdHJhY3RFTGlzdC9FSXRlcmF0b3InLDQyKTtZY2IoMjgzLDQyLGRyZSxMSGQsTUhkKTtfLlFiPWZ1bmN0aW9uIFVIZCgpe0JIZCh0aGlzKX07Xy5SYj1mdW5jdGlvbiBOSGQoYSl7SkhkKHRoaXMsYSl9O18uV2o9ZnVuY3Rpb24gT0hkKCl7dmFyIGI7dHJ5e2I9dGhpcy5kLlhiKC0tdGhpcy5lKTt0aGlzLlVqKCk7dGhpcy5nPXRoaXMuZTtyZXR1cm4gYn1jYXRjaChhKXthPXJjYihhKTtpZihSRChhLDk3KSl7dGhpcy5VaigpO3Rocm93IHNjYihuZXcgcXViKX1lbHNlIHRocm93IHNjYihhKX19O18uWGo9ZnVuY3Rpb24gUEhkKGEpe0tIZCh0aGlzLGEpfTtfLlNiPWZ1bmN0aW9uIFFIZCgpe3JldHVybiB0aGlzLmUhPTB9O18uVGI9ZnVuY3Rpb24gUkhkKCl7cmV0dXJuIHRoaXMuZX07Xy5VYj1mdW5jdGlvbiBTSGQoKXtyZXR1cm4gdGhpcy5XaigpfTtfLlZiPWZ1bmN0aW9uIFRIZCgpe3JldHVybiB0aGlzLmUtMX07Xy5XYj1mdW5jdGlvbiBWSGQoYSl7dGhpcy5YaihhKX07dmFyIGo1PWplYih0RGUsJ0Fic3RyYWN0RUxpc3QvRUxpc3RJdGVyYXRvcicsMjgzKTtZY2IoMzUyLDQyLFdxZSxYSGQpO18uVmo9ZnVuY3Rpb24gWUhkKCl7cmV0dXJuIFdIZCh0aGlzKX07Xy5RYj1mdW5jdGlvbiBaSGQoKXt0aHJvdyBzY2IobmV3IGFoYil9O3ZhciBrNT1qZWIodERlLCdBYnN0cmFjdEVMaXN0L05vblJlc29sdmluZ0VJdGVyYXRvcicsMzUyKTtZY2IoMzg5LDI4MyxkcmUsJEhkLF9IZCk7Xy5SYj1mdW5jdGlvbiBhSWQoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLlZqPWZ1bmN0aW9uIGJJZCgpe3ZhciBiO3RyeXtiPXRoaXMuYy5TaSh0aGlzLmUpO3RoaXMuVWooKTt0aGlzLmc9dGhpcy5lKys7cmV0dXJuIGJ9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSw5Nykpe3RoaXMuVWooKTt0aHJvdyBzY2IobmV3IHF1Yil9ZWxzZSB0aHJvdyBzY2IoYSl9fTtfLldqPWZ1bmN0aW9uIGNJZCgpe3ZhciBiO3RyeXtiPXRoaXMuYy5TaSgtLXRoaXMuZSk7dGhpcy5VaigpO3RoaXMuZz10aGlzLmU7cmV0dXJuIGJ9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSw5Nykpe3RoaXMuVWooKTt0aHJvdyBzY2IobmV3IHF1Yil9ZWxzZSB0aHJvdyBzY2IoYSl9fTtfLlFiPWZ1bmN0aW9uIGRJZCgpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5XYj1mdW5jdGlvbiBlSWQoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTt2YXIgbDU9amViKHREZSwnQWJzdHJhY3RFTGlzdC9Ob25SZXNvbHZpbmdFTGlzdEl0ZXJhdG9yJywzODkpO1ljYigyMDI2LDcwLEtFZSk7Xy5CaT1mdW5jdGlvbiBtSWQoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqLGssbCxtO2U9Yi5nYygpO2lmKGUhPTApe2o9SkQoQ3JkKHRoaXMuYSw0KSwxMjgpO2s9aj09bnVsbD8wOmoubGVuZ3RoO209aytlO2Q9a0lkKHRoaXMsbSk7bD1rLWE7bD4wJiYkZ2IoaixhLGQsYStlLGwpO2k9Yi5KYygpO2ZvcihnPTA7ZzxlOysrZyl7aD1pLlBiKCk7Yz1hK2c7aUlkKGQsYyxGQ2QodGhpcyxoKSl9VzhkKHRoaXMsZCk7Zm9yKGY9MDtmPGU7KytmKXtoPWRbYV07dGhpcy5KaShhLGgpOysrYX1yZXR1cm4gdHJ1ZX1lbHNleysrdGhpcy5qO3JldHVybiBmYWxzZX19O18uQ2k9ZnVuY3Rpb24gbklkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajtkPWEuZ2MoKTtpZihkIT0wKXtpPShjPUpEKENyZCh0aGlzLmEsNCksMTI4KSxjPT1udWxsPzA6Yy5sZW5ndGgpO2o9aStkO2I9a0lkKHRoaXMsaik7aD1hLkpjKCk7Zm9yKGY9aTtmPGo7KytmKXtnPWguUGIoKTtpSWQoYixmLEZDZCh0aGlzLGcpKX1XOGQodGhpcyxiKTtmb3IoZT1pO2U8ajsrK2Upe2c9YltlXTt0aGlzLkppKGUsZyl9cmV0dXJuIHRydWV9ZWxzZXsrK3RoaXMuajtyZXR1cm4gZmFsc2V9fTtfLkRpPWZ1bmN0aW9uIG9JZChhLGIpe3ZhciBjLGQsZSxmO2Q9SkQoQ3JkKHRoaXMuYSw0KSwxMjgpO2U9ZD09bnVsbD8wOmQubGVuZ3RoO2M9a0lkKHRoaXMsZSsxKTtmPUZDZCh0aGlzLGIpO2EhPWUmJiRnYihkLGEsYyxhKzEsZS1hKTtWQyhjLGEsZik7VzhkKHRoaXMsYyk7dGhpcy5KaShhLGIpfTtfLkVpPWZ1bmN0aW9uIHBJZChhKXt2YXIgYixjLGQ7ZD0oYz1KRChDcmQodGhpcy5hLDQpLDEyOCksYz09bnVsbD8wOmMubGVuZ3RoKTtiPWtJZCh0aGlzLGQrMSk7aUlkKGIsZCxGQ2QodGhpcyxhKSk7VzhkKHRoaXMsYik7dGhpcy5KaShkLGEpfTtfLkZpPWZ1bmN0aW9uIHFJZCgpe3JldHVybiBuZXcgUklkKHRoaXMpfTtfLkdpPWZ1bmN0aW9uIHJJZCgpe3JldHVybiBuZXcgVUlkKHRoaXMpfTtfLkhpPWZ1bmN0aW9uIHNJZChhKXt2YXIgYixjO2M9KGI9SkQoQ3JkKHRoaXMuYSw0KSwxMjgpLGI9PW51bGw/MDpiLmxlbmd0aCk7aWYoYTwwfHxhPmMpdGhyb3cgc2NiKG5ldyB6SGQoYSxjKSk7cmV0dXJuIG5ldyBWSWQodGhpcyxhKX07Xy4kYj1mdW5jdGlvbiB0SWQoKXt2YXIgYSxiOysrdGhpcy5qO2E9SkQoQ3JkKHRoaXMuYSw0KSwxMjgpO2I9YT09bnVsbD8wOmEubGVuZ3RoO1c4ZCh0aGlzLG51bGwpO3hDZCh0aGlzLGIsYSl9O18uR2M9ZnVuY3Rpb24gdUlkKGEpe3ZhciBiLGMsZCxlLGY7Yj1KRChDcmQodGhpcy5hLDQpLDEyOCk7aWYoYiE9bnVsbCl7aWYoYSE9bnVsbCl7Zm9yKGQ9YixlPTAsZj1kLmxlbmd0aDtlPGY7KytlKXtjPWRbZV07aWYocGIoYSxjKSl7cmV0dXJuIHRydWV9fX1lbHNle2ZvcihkPWIsZT0wLGY9ZC5sZW5ndGg7ZTxmOysrZSl7Yz1kW2VdO2lmKFhEKGMpPT09WEQoYSkpe3JldHVybiB0cnVlfX19fXJldHVybiBmYWxzZX07Xy5YYj1mdW5jdGlvbiB2SWQoYSl7dmFyIGIsYztiPUpEKENyZCh0aGlzLmEsNCksMTI4KTtjPWI9PW51bGw/MDpiLmxlbmd0aDtpZihhPj1jKXRocm93IHNjYihuZXcgekhkKGEsYykpO3JldHVybiBiW2FdfTtfLmJkPWZ1bmN0aW9uIHdJZChhKXt2YXIgYixjLGQ7Yj1KRChDcmQodGhpcy5hLDQpLDEyOCk7aWYoYiE9bnVsbCl7aWYoYSE9bnVsbCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDsrK2Mpe2lmKHBiKGEsYltjXSkpe3JldHVybiBjfX19ZWxzZXtmb3IoYz0wLGQ9Yi5sZW5ndGg7YzxkOysrYyl7aWYoWEQoYltjXSk9PT1YRChhKSl7cmV0dXJuIGN9fX19cmV0dXJuIC0xfTtfLmRjPWZ1bmN0aW9uIHhJZCgpe3JldHVybiBKRChDcmQodGhpcy5hLDQpLDEyOCk9PW51bGx9O18uSmM9ZnVuY3Rpb24geUlkKCl7cmV0dXJuIG5ldyBJSWQodGhpcyl9O18uY2Q9ZnVuY3Rpb24geklkKCl7cmV0dXJuIG5ldyBNSWQodGhpcyl9O18uZGQ9ZnVuY3Rpb24gQUlkKGEpe3ZhciBiLGM7Yz0oYj1KRChDcmQodGhpcy5hLDQpLDEyOCksYj09bnVsbD8wOmIubGVuZ3RoKTtpZihhPDB8fGE+Yyl0aHJvdyBzY2IobmV3IHpIZChhLGMpKTtyZXR1cm4gbmV3IE5JZCh0aGlzLGEpfTtfLlFpPWZ1bmN0aW9uIEJJZChhLGIpe3ZhciBjLGQsZTtjPWpJZCh0aGlzKTtlPWM9PW51bGw/MDpjLmxlbmd0aDtpZihhPj1lKXRocm93IHNjYihuZXcgbWRiKE5EZSthK09EZStlKSk7aWYoYj49ZSl0aHJvdyBzY2IobmV3IG1kYihQRGUrYitPRGUrZSkpO2Q9Y1tiXTtpZihhIT1iKXthPGI/JGdiKGMsYSxjLGErMSxiLWEpOiRnYihjLGIrMSxjLGIsYS1iKTtWQyhjLGEsZCk7VzhkKHRoaXMsYyl9cmV0dXJuIGR9O18uU2k9ZnVuY3Rpb24gQ0lkKGEpe3JldHVybiBKRChDcmQodGhpcy5hLDQpLDEyOClbYV19O18uZWQ9ZnVuY3Rpb24gRElkKGEpe3JldHVybiBsSWQodGhpcyxhKX07Xy5VaT1mdW5jdGlvbiBFSWQoYSxiKXt2YXIgYyxkO2M9aklkKHRoaXMpO2Q9Y1thXTtpSWQoYyxhLEZDZCh0aGlzLGIpKTtXOGQodGhpcyxjKTtyZXR1cm4gZH07Xy5nYz1mdW5jdGlvbiBGSWQoKXt2YXIgYTtyZXR1cm4gYT1KRChDcmQodGhpcy5hLDQpLDEyOCksYT09bnVsbD8wOmEubGVuZ3RofTtfLk5jPWZ1bmN0aW9uIEdJZCgpe3ZhciBhLGIsYzthPUpEKENyZCh0aGlzLmEsNCksMTI4KTtjPWE9PW51bGw/MDphLmxlbmd0aDtiPVNDKFg0LEpFZSw0MTIsYywwLDEpO2M+MCYmJGdiKGEsMCxiLDAsYyk7cmV0dXJuIGJ9O18uT2M9ZnVuY3Rpb24gSElkKGEpe3ZhciBiLGMsZDtiPUpEKENyZCh0aGlzLmEsNCksMTI4KTtkPWI9PW51bGw/MDpiLmxlbmd0aDtpZihkPjApe2lmKGEubGVuZ3RoPGQpe2M9ZklkKHJiKGEpLmMsZCk7YT1jfSRnYihiLDAsYSwwLGQpfWEubGVuZ3RoPmQmJlZDKGEsZCxudWxsKTtyZXR1cm4gYX07dmFyIGdJZDt2YXIgczU9amViKHREZSwnQXJyYXlEZWxlZ2F0aW5nRUxpc3QnLDIwMjYpO1ljYigxMDI2LDQyLFdxZSxJSWQpO18uVWo9ZnVuY3Rpb24gSklkKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8WEQoSkQoQ3JkKHRoaXMuYi5hLDQpLDEyOCkpIT09WEQodGhpcy5hKSl7dGhyb3cgc2NiKG5ldyB5cWIpfX07Xy5RYj1mdW5jdGlvbiBLSWQoKXtCSGQodGhpcyk7dGhpcy5hPUpEKENyZCh0aGlzLmIuYSw0KSwxMjgpfTt2YXIgbzU9amViKHREZSwnQXJyYXlEZWxlZ2F0aW5nRUxpc3QvRUl0ZXJhdG9yJywxMDI2KTtZY2IoNzA2LDI4MyxkcmUsTUlkLE5JZCk7Xy5Vaj1mdW5jdGlvbiBPSWQoKXtpZih0aGlzLmIuaiE9dGhpcy5mfHxYRChKRChDcmQodGhpcy5iLmEsNCksMTI4KSkhPT1YRCh0aGlzLmEpKXt0aHJvdyBzY2IobmV3IHlxYil9fTtfLlhqPWZ1bmN0aW9uIFBJZChhKXtLSGQodGhpcyxhKTt0aGlzLmE9SkQoQ3JkKHRoaXMuYi5hLDQpLDEyOCl9O18uUWI9ZnVuY3Rpb24gUUlkKCl7QkhkKHRoaXMpO3RoaXMuYT1KRChDcmQodGhpcy5iLmEsNCksMTI4KX07dmFyIHA1PWplYih0RGUsJ0FycmF5RGVsZWdhdGluZ0VMaXN0L0VMaXN0SXRlcmF0b3InLDcwNik7WWNiKDEwMjcsMzUyLFdxZSxSSWQpO18uVWo9ZnVuY3Rpb24gU0lkKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8WEQoSkQoQ3JkKHRoaXMuYi5hLDQpLDEyOCkpIT09WEQodGhpcy5hKSl7dGhyb3cgc2NiKG5ldyB5cWIpfX07dmFyIHE1PWplYih0RGUsJ0FycmF5RGVsZWdhdGluZ0VMaXN0L05vblJlc29sdmluZ0VJdGVyYXRvcicsMTAyNyk7WWNiKDcwNywzODksZHJlLFVJZCxWSWQpO18uVWo9ZnVuY3Rpb24gV0lkKCl7aWYodGhpcy5iLmohPXRoaXMuZnx8WEQoSkQoQ3JkKHRoaXMuYi5hLDQpLDEyOCkpIT09WEQodGhpcy5hKSl7dGhyb3cgc2NiKG5ldyB5cWIpfX07dmFyIHI1PWplYih0RGUsJ0FycmF5RGVsZWdhdGluZ0VMaXN0L05vblJlc29sdmluZ0VMaXN0SXRlcmF0b3InLDcwNyk7WWNiKDYwMCwzMDEsSHNlLFhJZCk7dmFyIHQ1PWplYih0RGUsJ0Jhc2ljRUxpc3QvQmFzaWNJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uJyw2MDApO1ljYig2OTQsNjYsUURlLFlJZCk7Xy5fYz1mdW5jdGlvbiBaSWQoYSxiKXt0aHJvdyBzY2IobmV3IGFoYil9O18uRWM9ZnVuY3Rpb24gJElkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5hZD1mdW5jdGlvbiBfSWQoYSxiKXt0aHJvdyBzY2IobmV3IGFoYil9O18uRmM9ZnVuY3Rpb24gYUpkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy4kYj1mdW5jdGlvbiBiSmQoKXt0aHJvdyBzY2IobmV3IGFoYil9O18uWWk9ZnVuY3Rpb24gY0pkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5KYz1mdW5jdGlvbiBkSmQoKXtyZXR1cm4gdGhpcy5GaSgpfTtfLmNkPWZ1bmN0aW9uIGVKZCgpe3JldHVybiB0aGlzLkdpKCl9O18uZGQ9ZnVuY3Rpb24gZkpkKGEpe3JldHVybiB0aGlzLkhpKGEpfTtfLlFpPWZ1bmN0aW9uIGdKZChhLGIpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5SaT1mdW5jdGlvbiBoSmQoYSxiKXt0aHJvdyBzY2IobmV3IGFoYil9O18uZWQ9ZnVuY3Rpb24gaUpkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5LYz1mdW5jdGlvbiBqSmQoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLmZkPWZ1bmN0aW9uIGtKZChhLGIpe3Rocm93IHNjYihuZXcgYWhiKX07dmFyIHU1PWplYih0RGUsJ0Jhc2ljRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QnLDY5NCk7WWNiKDcwNSwxLHszOjEsMjA6MSwxNjoxLDE1OjEsNjE6MSw1ODE6MX0pO18uX2M9ZnVuY3Rpb24gTEpkKGEsYil7bEpkKHRoaXMsYSxKRChiLDQzKSl9O18uRWM9ZnVuY3Rpb24gTUpkKGEpe3JldHVybiBtSmQodGhpcyxKRChhLDQzKSl9O18uSWM9ZnVuY3Rpb24gVUpkKGEpe29mYih0aGlzLGEpfTtfLlhiPWZ1bmN0aW9uIFZKZChhKXtyZXR1cm4gSkQobkRkKHRoaXMuYyxhKSwxMzUpfTtfLlFpPWZ1bmN0aW9uIGNLZChhLGIpe3JldHVybiBKRCh0aGlzLmMuUWkoYSxiKSw0Myl9O18uUmk9ZnVuY3Rpb24gZEtkKGEsYil7REpkKHRoaXMsYSxKRChiLDQzKSl9O18uZWQ9ZnVuY3Rpb24gZ0tkKGEpe3JldHVybiBKRCh0aGlzLmMuZWQoYSksNDMpfTtfLmZkPWZ1bmN0aW9uIGlLZChhLGIpe3JldHVybiBKSmQodGhpcyxhLEpEKGIsNDMpKX07Xy5nZD1mdW5jdGlvbiBrS2QoYSl7aHViKHRoaXMsYSl9O18uTGM9ZnVuY3Rpb24gbEtkKCl7cmV0dXJuIG5ldyBHdmIodGhpcywxNil9O18uTWM9ZnVuY3Rpb24gbUtkKCl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgR3ZiKHRoaXMsMTYpKX07Xy5hZD1mdW5jdGlvbiBOSmQoYSxiKXtyZXR1cm4gdGhpcy5jLmFkKGEsYil9O18uRmM9ZnVuY3Rpb24gT0pkKGEpe3JldHVybiB0aGlzLmMuRmMoYSl9O18uJGI9ZnVuY3Rpb24gUEpkKCl7dGhpcy5jLiRiKCl9O18uR2M9ZnVuY3Rpb24gUUpkKGEpe3JldHVybiB0aGlzLmMuR2MoYSl9O18uSGM9ZnVuY3Rpb24gUkpkKGEpe3JldHVybiBBZSh0aGlzLmMsYSl9O18uWWo9ZnVuY3Rpb24gU0pkKCl7dmFyIGEsYixjO2lmKHRoaXMuZD09bnVsbCl7dGhpcy5kPVNDKHY1LExFZSw2NiwyKnRoaXMuZisxLDAsMSk7Yz10aGlzLmU7dGhpcy5mPTA7Zm9yKGI9dGhpcy5jLkpjKCk7Yi5lIT1iLmkuZ2MoKTspe2E9SkQoYi5WaigpLDEzNSk7ckpkKHRoaXMsYSl9dGhpcy5lPWN9fTtfLkZiPWZ1bmN0aW9uIFRKZChhKXtyZXR1cm4gd0pkKHRoaXMsYSl9O18uSGI9ZnVuY3Rpb24gV0pkKCl7cmV0dXJuIEJDZCh0aGlzLmMpfTtfLmJkPWZ1bmN0aW9uIFhKZChhKXtyZXR1cm4gdGhpcy5jLmJkKGEpfTtfLlpqPWZ1bmN0aW9uIFlKZCgpe3RoaXMuYz1uZXcgdUtkKHRoaXMpfTtfLmRjPWZ1bmN0aW9uIFpKZCgpe3JldHVybiB0aGlzLmY9PTB9O18uSmM9ZnVuY3Rpb24gJEpkKCl7cmV0dXJuIHRoaXMuYy5KYygpfTtfLmNkPWZ1bmN0aW9uIF9KZCgpe3JldHVybiB0aGlzLmMuY2QoKX07Xy5kZD1mdW5jdGlvbiBhS2QoYSl7cmV0dXJuIHRoaXMuYy5kZChhKX07Xy4kaj1mdW5jdGlvbiBiS2QoKXtyZXR1cm4gQ0pkKHRoaXMpfTtfLl9qPWZ1bmN0aW9uIGVLZChhLGIsYyl7cmV0dXJuIG5ldyB1TGQoYSxiLGMpfTtfLmFrPWZ1bmN0aW9uIGZLZCgpe3JldHVybiBuZXcgQUtkfTtfLktjPWZ1bmN0aW9uIGhLZChhKXtyZXR1cm4gR0pkKHRoaXMsYSl9O18uZ2M9ZnVuY3Rpb24gaktkKCl7cmV0dXJuIHRoaXMuZn07Xy5oZD1mdW5jdGlvbiBuS2QoYSxiKXtyZXR1cm4gbmV3IElqYih0aGlzLmMsYSxiKX07Xy5OYz1mdW5jdGlvbiBvS2QoKXtyZXR1cm4gdGhpcy5jLk5jKCl9O18uT2M9ZnVuY3Rpb24gcEtkKGEpe3JldHVybiB0aGlzLmMuT2MoYSl9O18uSWI9ZnVuY3Rpb24gcUtkKCl7cmV0dXJuIEVDZCh0aGlzLmMpfTtfLmU9MDtfLmY9MDt2YXIgSTU9amViKHREZSwnQmFzaWNFTWFwJyw3MDUpO1ljYigxMDIxLDY2LFFEZSx1S2QpO18uSmk9ZnVuY3Rpb24gdktkKGEsYil7cktkKHRoaXMsSkQoYiwxMzUpKX07Xy5NaT1mdW5jdGlvbiB4S2QoYSxiLGMpe3ZhciBkOysrKGQ9dGhpcyxKRChiLDEzNSksZCkuYS5lfTtfLk5pPWZ1bmN0aW9uIHlLZChhLGIpe3NLZCh0aGlzLEpEKGIsMTM1KSl9O18uT2k9ZnVuY3Rpb24gektkKGEsYixjKXt0S2QodGhpcyxKRChiLDEzNSksSkQoYywxMzUpKX07Xy5MaT1mdW5jdGlvbiB3S2QoYSxiKXtxSmQodGhpcy5hKX07dmFyIHc1PWplYih0RGUsJ0Jhc2ljRU1hcC8xJywxMDIxKTtZY2IoMTAyMiw2NixRRGUsQUtkKTtfLlppPWZ1bmN0aW9uIEJLZChhKXtyZXR1cm4gU0MoRjUsTUVlLDYwNixhLDAsMSl9O3ZhciB4NT1qZWIodERlLCdCYXNpY0VNYXAvMicsMTAyMik7WWNiKDEwMjMsJHFlLF9xZSxDS2QpO18uJGI9ZnVuY3Rpb24gREtkKCl7dGhpcy5hLmMuJGIoKX07Xy5HYz1mdW5jdGlvbiBFS2QoYSl7cmV0dXJuIG5KZCh0aGlzLmEsYSl9O18uSmM9ZnVuY3Rpb24gRktkKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhHTGQoKSxGTGQuYSk6bmV3IF9LZCh0aGlzLmEpfTtfLktjPWZ1bmN0aW9uIEdLZChhKXt2YXIgYjtiPXRoaXMuYS5mO0lKZCh0aGlzLmEsYSk7cmV0dXJuIHRoaXMuYS5mIT1ifTtfLmdjPWZ1bmN0aW9uIEhLZCgpe3JldHVybiB0aGlzLmEuZn07dmFyIHk1PWplYih0RGUsJ0Jhc2ljRU1hcC8zJywxMDIzKTtZY2IoTkVlLDMxLFpxZSxJS2QpO18uJGI9ZnVuY3Rpb24gSktkKCl7dGhpcy5hLmMuJGIoKX07Xy5HYz1mdW5jdGlvbiBLS2QoYSl7cmV0dXJuIG9KZCh0aGlzLmEsYSl9O18uSmM9ZnVuY3Rpb24gTEtkKCl7cmV0dXJuIHRoaXMuYS5mPT0wPyhHTGQoKSxGTGQuYSk6bmV3IGJMZCh0aGlzLmEpfTtfLmdjPWZ1bmN0aW9uIE1LZCgpe3JldHVybiB0aGlzLmEuZn07dmFyIHo1PWplYih0RGUsJ0Jhc2ljRU1hcC80JyxORWUpO1ljYigxMDI1LCRxZSxfcWUsT0tkKTtfLiRiPWZ1bmN0aW9uIFBLZCgpe3RoaXMuYS5jLiRiKCl9O18uR2M9ZnVuY3Rpb24gUUtkKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksajtpZih0aGlzLmEuZj4wJiZSRChhLDQzKSl7dGhpcy5hLllqKCk7aT1KRChhLDQzKTtoPWkuamQoKTtlPWg9PW51bGw/MDp0YihoKTtmPUFKZCh0aGlzLmEsZSk7Yj10aGlzLmEuZFtmXTtpZihiKXtjPUpEKGIuZywzNzEpO2o9Yi5pO2ZvcihnPTA7ZzxqOysrZyl7ZD1jW2ddO2lmKGQueGkoKT09ZSYmZC5GYihpKSl7cmV0dXJuIHRydWV9fX19cmV0dXJuIGZhbHNlfTtfLkpjPWZ1bmN0aW9uIFJLZCgpe3JldHVybiB0aGlzLmEuZj09MD8oR0xkKCksRkxkLmEpOm5ldyBWS2QodGhpcy5hKX07Xy5LYz1mdW5jdGlvbiBTS2QoYSl7cmV0dXJuIE5LZCh0aGlzLGEpfTtfLmdjPWZ1bmN0aW9uIFRLZCgpe3JldHVybiB0aGlzLmEuZn07dmFyIEE1PWplYih0RGUsJ0Jhc2ljRU1hcC81JywxMDI1KTtZY2IoNjA3LDEsV3FlLFZLZCk7Xy5OYj1mdW5jdGlvbiBXS2QoYSl7T3NiKHRoaXMsYSl9O18uT2I9ZnVuY3Rpb24gWEtkKCl7cmV0dXJuIHRoaXMuYiE9LTF9O18uUGI9ZnVuY3Rpb24gWUtkKCl7dmFyIGE7aWYodGhpcy5mLmUhPXRoaXMuYyl7dGhyb3cgc2NiKG5ldyB5cWIpfWlmKHRoaXMuYj09LTEpe3Rocm93IHNjYihuZXcgcXViKX10aGlzLmQ9dGhpcy5hO3RoaXMuZT10aGlzLmI7VUtkKHRoaXMpO2E9SkQodGhpcy5mLmRbdGhpcy5kXS5nW3RoaXMuZV0sMTM1KTtyZXR1cm4gdGhpcy5iayhhKX07Xy5RYj1mdW5jdGlvbiBaS2QoKXtpZih0aGlzLmYuZSE9dGhpcy5jKXt0aHJvdyBzY2IobmV3IHlxYil9aWYodGhpcy5lPT0tMSl7dGhyb3cgc2NiKG5ldyBWZWIpfXRoaXMuZi5jLktjKG5EZCh0aGlzLmYuZFt0aGlzLmRdLHRoaXMuZSkpO3RoaXMuYz10aGlzLmYuZTt0aGlzLmU9LTE7dGhpcy5hPT10aGlzLmQmJnRoaXMuYiE9LTEmJi0tdGhpcy5ifTtfLmJrPWZ1bmN0aW9uICRLZChhKXtyZXR1cm4gYX07Xy5hPTA7Xy5iPS0xO18uYz0wO18uZD0wO18uZT0wO3ZhciBCNT1qZWIodERlLCdCYXNpY0VNYXAvQmFzaWNFTWFwSXRlcmF0b3InLDYwNyk7WWNiKDEwMTksNjA3LFdxZSxfS2QpO18uYms9ZnVuY3Rpb24gYUxkKGEpe3JldHVybiBhLmpkKCl9O3ZhciBDNT1qZWIodERlLCdCYXNpY0VNYXAvQmFzaWNFTWFwS2V5SXRlcmF0b3InLDEwMTkpO1ljYigxMDIwLDYwNyxXcWUsYkxkKTtfLmJrPWZ1bmN0aW9uIGNMZChhKXtyZXR1cm4gYS5rZCgpfTt2YXIgRDU9amViKHREZSwnQmFzaWNFTWFwL0Jhc2ljRU1hcFZhbHVlSXRlcmF0b3InLDEwMjApO1ljYigxMDE4LDEsWXFlLGVMZCk7Xy53Yz1mdW5jdGlvbiBrTGQoYSl7cHViKHRoaXMsYSl9O18uJGI9ZnVuY3Rpb24gZkxkKCl7dGhpcy5hLmMuJGIoKX07Xy5fYj1mdW5jdGlvbiBnTGQoYSl7cmV0dXJuIGRMZCh0aGlzLGEpfTtfLnVjPWZ1bmN0aW9uIGhMZChhKXtyZXR1cm4gb0pkKHRoaXMuYSxhKX07Xy52Yz1mdW5jdGlvbiBpTGQoKXtyZXR1cm4gdkpkKHRoaXMuYSl9O18uRmI9ZnVuY3Rpb24gakxkKGEpe3JldHVybiB3SmQodGhpcy5hLGEpfTtfLnhjPWZ1bmN0aW9uIGxMZChhKXtyZXR1cm4geEpkKHRoaXMuYSxhKX07Xy5IYj1mdW5jdGlvbiBtTGQoKXtyZXR1cm4gQkNkKHRoaXMuYS5jKX07Xy5kYz1mdW5jdGlvbiBuTGQoKXtyZXR1cm4gdGhpcy5hLmY9PTB9O18uZWM9ZnVuY3Rpb24gb0xkKCl7cmV0dXJuIEJKZCh0aGlzLmEpfTtfLnljPWZ1bmN0aW9uIHBMZChhLGIpe3JldHVybiBFSmQodGhpcy5hLGEsYil9O18uQWM9ZnVuY3Rpb24gcUxkKGEpe3JldHVybiBJSmQodGhpcy5hLGEpfTtfLmdjPWZ1bmN0aW9uIHJMZCgpe3JldHVybiB0aGlzLmEuZn07Xy5JYj1mdW5jdGlvbiBzTGQoKXtyZXR1cm4gRUNkKHRoaXMuYS5jKX07Xy5CYz1mdW5jdGlvbiB0TGQoKXtyZXR1cm4gS0pkKHRoaXMuYSl9O3ZhciBFNT1qZWIodERlLCdCYXNpY0VNYXAvRGVsZWdhdGluZ01hcCcsMTAxOCk7WWNiKDYwNiwxLHs0MzoxLDEzNToxLDYwNjoxfSx1TGQpO18uRmI9ZnVuY3Rpb24gdkxkKGEpe3ZhciBiO2lmKFJEKGEsNDMpKXtiPUpEKGEsNDMpO3JldHVybiAodGhpcy5iIT1udWxsP3BiKHRoaXMuYixiLmpkKCkpOlhEKHRoaXMuYik9PT1YRChiLmpkKCkpKSYmKHRoaXMuYyE9bnVsbD9wYih0aGlzLmMsYi5rZCgpKTpYRCh0aGlzLmMpPT09WEQoYi5rZCgpKSl9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLnhpPWZ1bmN0aW9uIHdMZCgpe3JldHVybiB0aGlzLmF9O18uamQ9ZnVuY3Rpb24geExkKCl7cmV0dXJuIHRoaXMuYn07Xy5rZD1mdW5jdGlvbiB5TGQoKXtyZXR1cm4gdGhpcy5jfTtfLkhiPWZ1bmN0aW9uIHpMZCgpe3JldHVybiB0aGlzLmFeKHRoaXMuYz09bnVsbD8wOnRiKHRoaXMuYykpfTtfLnlpPWZ1bmN0aW9uIEFMZChhKXt0aGlzLmE9YX07Xy56aT1mdW5jdGlvbiBCTGQoYSl7dGhyb3cgc2NiKG5ldyBweil9O18ubGQ9ZnVuY3Rpb24gQ0xkKGEpe3ZhciBiO2I9dGhpcy5jO3RoaXMuYz1hO3JldHVybiBifTtfLkliPWZ1bmN0aW9uIERMZCgpe3JldHVybiB0aGlzLmIrJy0+Jyt0aGlzLmN9O18uYT0wO3ZhciBGNT1qZWIodERlLCdCYXNpY0VNYXAvRW50cnlJbXBsJyw2MDYpO1ljYig1MzEsMSx7fSxFTGQpO3ZhciBINT1qZWIodERlLCdCYXNpY0VNYXAvVmlldycsNTMxKTt2YXIgRkxkO1ljYig3NjMsMSx7fSk7Xy5GYj1mdW5jdGlvbiBVTGQoYSl7cmV0dXJuIE50KChwbmIoKSxtbmIpLGEpfTtfLkhiPWZ1bmN0aW9uIFZMZCgpe3JldHVybiB0bmIoKHBuYigpLG1uYikpfTtfLkliPWZ1bmN0aW9uIFdMZCgpe3JldHVybiBFZSgocG5iKCksbW5iKSl9O3ZhciBONT1qZWIodERlLCdFQ29sbGVjdGlvbnMvQmFzaWNFbXB0eVVubW9kaWZpYWJsZUVMaXN0Jyw3NjMpO1ljYigxMjg3LDEsZHJlLFhMZCk7Xy5OYj1mdW5jdGlvbiBaTGQoYSl7T3NiKHRoaXMsYSl9O18uUmI9ZnVuY3Rpb24gWUxkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5PYj1mdW5jdGlvbiAkTGQoKXtyZXR1cm4gZmFsc2V9O18uU2I9ZnVuY3Rpb24gX0xkKCl7cmV0dXJuIGZhbHNlfTtfLlBiPWZ1bmN0aW9uIGFNZCgpe3Rocm93IHNjYihuZXcgcXViKX07Xy5UYj1mdW5jdGlvbiBiTWQoKXtyZXR1cm4gMH07Xy5VYj1mdW5jdGlvbiBjTWQoKXt0aHJvdyBzY2IobmV3IHF1Yil9O18uVmI9ZnVuY3Rpb24gZE1kKCl7cmV0dXJuIC0xfTtfLlFiPWZ1bmN0aW9uIGVNZCgpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5XYj1mdW5jdGlvbiBmTWQoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTt2YXIgTTU9amViKHREZSwnRUNvbGxlY3Rpb25zL0Jhc2ljRW1wdHlVbm1vZGlmaWFibGVFTGlzdC8xJywxMjg3KTtZY2IoMTI4NSw3NjMsezIwOjEsMTY6MSwxNToxLDYxOjF9LGdNZCk7Xy5fYz1mdW5jdGlvbiBoTWQoYSxiKXtKTGQoKX07Xy5FYz1mdW5jdGlvbiBpTWQoYSl7cmV0dXJuIEtMZCgpfTtfLmFkPWZ1bmN0aW9uIGpNZChhLGIpe3JldHVybiBMTGQoKX07Xy5GYz1mdW5jdGlvbiBrTWQoYSl7cmV0dXJuIE1MZCgpfTtfLiRiPWZ1bmN0aW9uIGxNZCgpe05MZCgpfTtfLkdjPWZ1bmN0aW9uIG1NZChhKXtyZXR1cm4gZmFsc2V9O18uSGM9ZnVuY3Rpb24gbk1kKGEpe3JldHVybiBmYWxzZX07Xy5JYz1mdW5jdGlvbiBvTWQoYSl7b2ZiKHRoaXMsYSl9O18uWGI9ZnVuY3Rpb24gcE1kKGEpe3JldHVybiB6bmIoKHBuYigpLG1uYixhKSksbnVsbH07Xy5iZD1mdW5jdGlvbiBxTWQoYSl7cmV0dXJuIC0xfTtfLmRjPWZ1bmN0aW9uIHJNZCgpe3JldHVybiB0cnVlfTtfLkpjPWZ1bmN0aW9uIHNNZCgpe3JldHVybiB0aGlzLmF9O18uY2Q9ZnVuY3Rpb24gdE1kKCl7cmV0dXJuIHRoaXMuYX07Xy5kZD1mdW5jdGlvbiB1TWQoYSl7cmV0dXJuIHRoaXMuYX07Xy5RaT1mdW5jdGlvbiB2TWQoYSxiKXtyZXR1cm4gT0xkKCl9O18uUmk9ZnVuY3Rpb24gd01kKGEsYil7UExkKCl9O18uZWQ9ZnVuY3Rpb24geE1kKGEpe3JldHVybiBRTGQoKX07Xy5LYz1mdW5jdGlvbiB5TWQoYSl7cmV0dXJuIFJMZCgpfTtfLmZkPWZ1bmN0aW9uIHpNZChhLGIpe3JldHVybiBTTGQoKX07Xy5nYz1mdW5jdGlvbiBBTWQoKXtyZXR1cm4gMH07Xy5nZD1mdW5jdGlvbiBCTWQoYSl7aHViKHRoaXMsYSl9O18uTGM9ZnVuY3Rpb24gQ01kKCl7cmV0dXJuIG5ldyBHdmIodGhpcywxNil9O18uTWM9ZnVuY3Rpb24gRE1kKCl7cmV0dXJuIG5ldyBSQmIobnVsbCxuZXcgR3ZiKHRoaXMsMTYpKX07Xy5oZD1mdW5jdGlvbiBFTWQoYSxiKXtyZXR1cm4gcG5iKCksbmV3IElqYihtbmIsYSxiKX07Xy5OYz1mdW5jdGlvbiBGTWQoKXtyZXR1cm4gQ2UoKHBuYigpLG1uYikpfTtfLk9jPWZ1bmN0aW9uIEdNZChhKXtyZXR1cm4gcG5iKCksRGUobW5iLGEpfTt2YXIgTzU9amViKHREZSwnRUNvbGxlY3Rpb25zL0VtcHR5VW5tb2RpZmlhYmxlRUxpc3QnLDEyODUpO1ljYigxMjg2LDc2Myx7MjA6MSwxNjoxLDE1OjEsNjE6MSw1ODE6MX0sSE1kKTtfLl9jPWZ1bmN0aW9uIElNZChhLGIpe0pMZCgpfTtfLkVjPWZ1bmN0aW9uIEpNZChhKXtyZXR1cm4gS0xkKCl9O18uYWQ9ZnVuY3Rpb24gS01kKGEsYil7cmV0dXJuIExMZCgpfTtfLkZjPWZ1bmN0aW9uIExNZChhKXtyZXR1cm4gTUxkKCl9O18uJGI9ZnVuY3Rpb24gTU1kKCl7TkxkKCl9O18uR2M9ZnVuY3Rpb24gTk1kKGEpe3JldHVybiBmYWxzZX07Xy5IYz1mdW5jdGlvbiBPTWQoYSl7cmV0dXJuIGZhbHNlfTtfLkljPWZ1bmN0aW9uIFBNZChhKXtvZmIodGhpcyxhKX07Xy5YYj1mdW5jdGlvbiBRTWQoYSl7cmV0dXJuIHpuYigocG5iKCksbW5iLGEpKSxudWxsfTtfLmJkPWZ1bmN0aW9uIFJNZChhKXtyZXR1cm4gLTF9O18uZGM9ZnVuY3Rpb24gU01kKCl7cmV0dXJuIHRydWV9O18uSmM9ZnVuY3Rpb24gVE1kKCl7cmV0dXJuIHRoaXMuYX07Xy5jZD1mdW5jdGlvbiBVTWQoKXtyZXR1cm4gdGhpcy5hfTtfLmRkPWZ1bmN0aW9uIFZNZChhKXtyZXR1cm4gdGhpcy5hfTtfLlFpPWZ1bmN0aW9uIFhNZChhLGIpe3JldHVybiBPTGQoKX07Xy5SaT1mdW5jdGlvbiBZTWQoYSxiKXtQTGQoKX07Xy5lZD1mdW5jdGlvbiBaTWQoYSl7cmV0dXJuIFFMZCgpfTtfLktjPWZ1bmN0aW9uICRNZChhKXtyZXR1cm4gUkxkKCl9O18uZmQ9ZnVuY3Rpb24gX01kKGEsYil7cmV0dXJuIFNMZCgpfTtfLmdjPWZ1bmN0aW9uIGFOZCgpe3JldHVybiAwfTtfLmdkPWZ1bmN0aW9uIGJOZChhKXtodWIodGhpcyxhKX07Xy5MYz1mdW5jdGlvbiBjTmQoKXtyZXR1cm4gbmV3IEd2Yih0aGlzLDE2KX07Xy5NYz1mdW5jdGlvbiBkTmQoKXtyZXR1cm4gbmV3IFJCYihudWxsLG5ldyBHdmIodGhpcywxNikpfTtfLmhkPWZ1bmN0aW9uIGVOZChhLGIpe3JldHVybiBwbmIoKSxuZXcgSWpiKG1uYixhLGIpfTtfLk5jPWZ1bmN0aW9uIGZOZCgpe3JldHVybiBDZSgocG5iKCksbW5iKSl9O18uT2M9ZnVuY3Rpb24gZ05kKGEpe3JldHVybiBwbmIoKSxEZShtbmIsYSl9O18uJGo9ZnVuY3Rpb24gV01kKCl7cmV0dXJuIHBuYigpLHBuYigpLG5uYn07dmFyIFA1PWplYih0RGUsJ0VDb2xsZWN0aW9ucy9FbXB0eVVubW9kaWZpYWJsZUVNYXAnLDEyODYpO3ZhciBSNT1sZWIodERlLCdFbnVtZXJhdG9yJyk7dmFyIGhOZDtZY2IoMjg2LDEsezI4NjoxfSxHTmQpO18uRmI9ZnVuY3Rpb24gS05kKGEpe3ZhciBiO2lmKHRoaXM9PT1hKXJldHVybiB0cnVlO2lmKCFSRChhLDI4NikpcmV0dXJuIGZhbHNlO2I9SkQoYSwyODYpO3JldHVybiB0aGlzLmY9PWIuZiYmTU5kKHRoaXMuaSxiLmkpJiZMTmQodGhpcy5hLCh0aGlzLmYmMjU2KSE9MD8oYi5mJjI1NikhPTA/Yi5hOm51bGw6KGIuZiYyNTYpIT0wP251bGw6Yi5hKSYmTE5kKHRoaXMuZCxiLmQpJiZMTmQodGhpcy5nLGIuZykmJkxOZCh0aGlzLmUsYi5lKSYmRE5kKHRoaXMsYil9O18uSGI9ZnVuY3Rpb24gUE5kKCl7cmV0dXJuIHRoaXMuZn07Xy5JYj1mdW5jdGlvbiBYTmQoKXtyZXR1cm4gRU5kKHRoaXMpfTtfLmY9MDt2YXIgbE5kPTAsbU5kPTAsbk5kPTAsb05kPTAscE5kPTAscU5kPTAsck5kPTAsc05kPTAsdE5kPTAsdU5kLHZOZD0wLHdOZD0wLHhOZD0wLHlOZD0wLHpOZCxBTmQ7dmFyIFc1PWplYih0RGUsJ1VSSScsMjg2KTtZY2IoMTA4NSw0NSxidGUsZk9kKTtfLnljPWZ1bmN0aW9uIGdPZChhLGIpe3JldHVybiBKRChSaWIodGhpcyxPRChhKSxKRChiLDI4NikpLDI4Nil9O3ZhciBWNT1qZWIodERlLCdVUkkvVVJJQ2FjaGUnLDEwODUpO1ljYig0OTAsNjYsUURlLGhPZCxpT2QpO18uUGk9ZnVuY3Rpb24gak9kKCl7cmV0dXJuIHRydWV9O3ZhciBYNT1qZWIodERlLCdVbmlxdWVFTGlzdCcsNDkwKTtZY2IoNTczLDYzLE5yZSxrT2QpO3ZhciBZNT1qZWIodERlLCdXcmFwcGVkRXhjZXB0aW9uJyw1NzMpO3ZhciBaNT1sZWIod0NlLFFFZSk7dmFyIHM2PWxlYih3Q2UsUkVlKTt2YXIgcTY9bGViKHdDZSxTRWUpO3ZhciAkNT1sZWIod0NlLFRFZSk7dmFyIGE2PWxlYih3Q2UsVUVlKTt2YXIgXzU9bGViKHdDZSwnRUNsYXNzJyk7dmFyIGM2PWxlYih3Q2UsJ0VEYXRhVHlwZScpO3ZhciBsT2Q7WWNiKDExOTMsNDUsYnRlLG9PZCk7Xy54Yz1mdW5jdGlvbiBwT2QoYSl7cmV0dXJuIFZEKGEpP09pYih0aGlzLGEpOldkKGZzYih0aGlzLmYsYSkpfTt2YXIgYjY9amViKHdDZSwnRURhdGFUeXBlL0ludGVybmFsL0NvbnZlcnNpb25EZWxlZ2F0ZS9GYWN0b3J5L1JlZ2lzdHJ5L0ltcGwnLDExOTMpO3ZhciBlNj1sZWIod0NlLCdFRW51bScpO3ZhciBkNj1sZWIod0NlLFZFZSk7dmFyIGc2PWxlYih3Q2UsV0VlKTt2YXIgazY9bGViKHdDZSxYRWUpO3ZhciBxT2Q7dmFyIG02PWxlYih3Q2UsWUVlKTt2YXIgbjY9bGViKHdDZSxaRWUpO1ljYigxMDE3LDEse30sdU9kKTtfLkliPWZ1bmN0aW9uIHZPZCgpe3JldHVybiAnTklMJ307dmFyIG82PWplYih3Q2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZS9JbnRlcm5hbC9EeW5hbWljVmFsdWVIb2xkZXIvMScsMTAxNyk7dmFyIHdPZDtZY2IoMTAxNiw0NSxidGUsek9kKTtfLnhjPWZ1bmN0aW9uIEFPZChhKXtyZXR1cm4gVkQoYSk/T2liKHRoaXMsYSk6V2QoZnNiKHRoaXMuZixhKSl9O3ZhciBwNj1qZWIod0NlLCdFU3RydWN0dXJhbEZlYXR1cmUvSW50ZXJuYWwvU2V0dGluZ0RlbGVnYXRlL0ZhY3RvcnkvUmVnaXN0cnkvSW1wbCcsMTAxNik7dmFyIHI2PWxlYih3Q2UsJEVlKTt2YXIgdDY9bGViKHdDZSwnRVZhbGlkYXRvci9QYXR0ZXJuTWF0Y2hlcicpO3ZhciBCT2Q7dmFyIERPZDt2YXIgRk9kO3ZhciBIT2QsSU9kLEpPZCxLT2QsTE9kLE1PZCxOT2QsT09kLFBPZCxRT2QsUk9kLFNPZCxUT2QsVU9kLFZPZCxXT2QsWE9kLFlPZCxaT2QsJE9kLF9PZCxhUGQsYlBkO3ZhciBCYWI9bGViKF9FZSwnRmVhdHVyZU1hcC9FbnRyeScpO1ljYig1MzAsMSx7NzQ6MX0sZFBkKTtfLklrPWZ1bmN0aW9uIGVQZCgpe3JldHVybiB0aGlzLmF9O18ua2Q9ZnVuY3Rpb24gZlBkKCl7cmV0dXJuIHRoaXMuYn07dmFyIHU2PWplYihUQ2UsJ0Jhc2ljRU9iamVjdEltcGwvMScsNTMwKTtZY2IoMTAxNSwxLGFGZSxnUGQpO18uQ2s9ZnVuY3Rpb24gaFBkKGEpe3JldHVybiBqcWQodGhpcy5hLHRoaXMuYixhKX07Xy5Oaj1mdW5jdGlvbiBpUGQoKXtyZXR1cm4gcHFkKHRoaXMuYSx0aGlzLmIpfTtfLldiPWZ1bmN0aW9uIGpQZChhKXtCcWQodGhpcy5hLHRoaXMuYixhKX07Xy5Eaz1mdW5jdGlvbiBrUGQoKXtGcWQodGhpcy5hLHRoaXMuYil9O3ZhciB2Nj1qZWIoVENlLCdCYXNpY0VPYmplY3RJbXBsLzQnLDEwMTUpO1ljYigyMDI3LDEsezExMzoxfSk7Xy5Kaz1mdW5jdGlvbiBuUGQoYSl7dGhpcy5lPWE9PTA/bFBkOlNDKGFKLE5xZSwxLGEsNSwxKX07Xy5oaT1mdW5jdGlvbiBvUGQoYSl7cmV0dXJuIHRoaXMuZVthXX07Xy5paT1mdW5jdGlvbiBwUGQoYSxiKXt0aGlzLmVbYV09Yn07Xy5qaT1mdW5jdGlvbiBxUGQoYSl7dGhpcy5lW2FdPW51bGx9O18uS2s9ZnVuY3Rpb24gclBkKCl7cmV0dXJuIHRoaXMuY307Xy5Maz1mdW5jdGlvbiBzUGQoKXt0aHJvdyBzY2IobmV3IGFoYil9O18uTWs9ZnVuY3Rpb24gdFBkKCl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLk5rPWZ1bmN0aW9uIHVQZCgpe3JldHVybiB0aGlzLmR9O18uT2s9ZnVuY3Rpb24gdlBkKCl7cmV0dXJuIHRoaXMuZSE9bnVsbH07Xy5Qaz1mdW5jdGlvbiB3UGQoYSl7dGhpcy5jPWF9O18uUWs9ZnVuY3Rpb24geFBkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5Saz1mdW5jdGlvbiB5UGQoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLlNrPWZ1bmN0aW9uIHpQZChhKXt0aGlzLmQ9YX07dmFyIGxQZDt2YXIgdzY9amViKFRDZSwnQmFzaWNFT2JqZWN0SW1wbC9FUHJvcGVydGllc0hvbGRlckJhc2VJbXBsJywyMDI3KTtZY2IoMTkyLDIwMjcsezExMzoxfSxBUGQpO18uTGs9ZnVuY3Rpb24gQlBkKCl7cmV0dXJuIHRoaXMuYX07Xy5Naz1mdW5jdGlvbiBDUGQoKXtyZXR1cm4gdGhpcy5ifTtfLlFrPWZ1bmN0aW9uIERQZChhKXt0aGlzLmE9YX07Xy5Saz1mdW5jdGlvbiBFUGQoYSl7dGhpcy5iPWF9O3ZhciB4Nj1qZWIoVENlLCdCYXNpY0VPYmplY3RJbXBsL0VQcm9wZXJ0aWVzSG9sZGVySW1wbCcsMTkyKTtZY2IoNTAwLDk4LFNDZSxGUGQpO18ucWg9ZnVuY3Rpb24gR1BkKCl7cmV0dXJuIHRoaXMuZn07Xy52aD1mdW5jdGlvbiBIUGQoKXtyZXR1cm4gdGhpcy5rfTtfLnhoPWZ1bmN0aW9uIElQZChhLGIpe3RoaXMuZz1hO3RoaXMuaT1ifTtfLnpoPWZ1bmN0aW9uIEpQZCgpe3JldHVybiAodGhpcy5qJjIpPT0wP3RoaXMuZWkoKTp0aGlzLldoKCkuS2soKX07Xy5CaD1mdW5jdGlvbiBLUGQoKXtyZXR1cm4gdGhpcy5pfTtfLnNoPWZ1bmN0aW9uIExQZCgpe3JldHVybiAodGhpcy5qJjEpIT0wfTtfLkxoPWZ1bmN0aW9uIE1QZCgpe3JldHVybiB0aGlzLmd9O18uUmg9ZnVuY3Rpb24gTlBkKCl7cmV0dXJuICh0aGlzLmomNCkhPTB9O18uV2g9ZnVuY3Rpb24gT1BkKCl7cmV0dXJuICF0aGlzLmsmJih0aGlzLms9bmV3IEFQZCksdGhpcy5rfTtfLiRoPWZ1bmN0aW9uIFBQZChhKXt0aGlzLldoKCkuUGsoYSk7YT8odGhpcy5qfD0yKToodGhpcy5qJj0tMyl9O18uYWk9ZnVuY3Rpb24gUVBkKGEpe3RoaXMuV2goKS5SayhhKTthPyh0aGlzLmp8PTQpOih0aGlzLmomPS01KX07Xy5laT1mdW5jdGlvbiBSUGQoKXtyZXR1cm4gKEdPZCgpLEZPZCkuU307Xy5pPTA7Xy5qPTE7dmFyIGk3PWplYihUQ2UsJ0VPYmplY3RJbXBsJyw1MDApO1ljYig3NzgsNTAwLHsxMDk6MSw5MzoxLDkyOjEsNTc6MSwxMTM6MSw1MjoxLDk4OjF9LFVQZCk7Xy5oaT1mdW5jdGlvbiBWUGQoYSl7cmV0dXJuIHRoaXMuZVthXX07Xy5paT1mdW5jdGlvbiBXUGQoYSxiKXt0aGlzLmVbYV09Yn07Xy5qaT1mdW5jdGlvbiBYUGQoYSl7dGhpcy5lW2FdPW51bGx9O18uemg9ZnVuY3Rpb24gWVBkKCl7cmV0dXJuIHRoaXMuZH07Xy5FaD1mdW5jdGlvbiBaUGQoYSl7cmV0dXJuIFdUZCh0aGlzLmQsYSl9O18uR2g9ZnVuY3Rpb24gJFBkKCl7cmV0dXJuIHRoaXMuZH07Xy5LaD1mdW5jdGlvbiBfUGQoKXtyZXR1cm4gdGhpcy5lIT1udWxsfTtfLldoPWZ1bmN0aW9uIGFRZCgpeyF0aGlzLmsmJih0aGlzLms9bmV3IG9RZCk7cmV0dXJuIHRoaXMua307Xy4kaD1mdW5jdGlvbiBiUWQoYSl7dGhpcy5kPWF9O18uZGk9ZnVuY3Rpb24gY1FkKCl7dmFyIGE7aWYodGhpcy5lPT1udWxsKXthPVZUZCh0aGlzLmQpO3RoaXMuZT1hPT0wP1NQZDpTQyhhSixOcWUsMSxhLDUsMSl9cmV0dXJuIHRoaXN9O18uZmk9ZnVuY3Rpb24gZFFkKCl7cmV0dXJuIDB9O3ZhciBTUGQ7dmFyIEI2PWplYihUQ2UsJ0R5bmFtaWNFT2JqZWN0SW1wbCcsNzc4KTtZY2IoMTQ2Miw3NzgsezEwOToxLDQzOjEsOTM6MSw5MjoxLDEzNToxLDU3OjEsMTEzOjEsNTI6MSw5ODoxfSxlUWQpO18uRmI9ZnVuY3Rpb24gZ1FkKGEpe3JldHVybiB0aGlzPT09YX07Xy5IYj1mdW5jdGlvbiBrUWQoKXtyZXR1cm4gakRiKHRoaXMpfTtfLiRoPWZ1bmN0aW9uIGZRZChhKXt0aGlzLmQ9YTt0aGlzLmI9UlRkKGEsJ2tleScpO3RoaXMuYz1SVGQoYSxiRGUpfTtfLnhpPWZ1bmN0aW9uIGhRZCgpe3ZhciBhO2lmKHRoaXMuYT09LTEpe2E9a3FkKHRoaXMsdGhpcy5iKTt0aGlzLmE9YT09bnVsbD8wOnRiKGEpfXJldHVybiB0aGlzLmF9O18uamQ9ZnVuY3Rpb24gaVFkKCl7cmV0dXJuIGtxZCh0aGlzLHRoaXMuYil9O18ua2Q9ZnVuY3Rpb24galFkKCl7cmV0dXJuIGtxZCh0aGlzLHRoaXMuYyl9O18ueWk9ZnVuY3Rpb24gbFFkKGEpe3RoaXMuYT1hfTtfLnppPWZ1bmN0aW9uIG1RZChhKXtCcWQodGhpcyx0aGlzLmIsYSl9O18ubGQ9ZnVuY3Rpb24gblFkKGEpe3ZhciBiO2I9a3FkKHRoaXMsdGhpcy5jKTtCcWQodGhpcyx0aGlzLmMsYSk7cmV0dXJuIGJ9O18uYT0wO3ZhciB6Nj1qZWIoVENlLCdEeW5hbWljRU9iamVjdEltcGwvQmFzaWNFTWFwRW50cnknLDE0NjIpO1ljYigxNDYzLDEsezExMzoxfSxvUWQpO18uSms9ZnVuY3Rpb24gcFFkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5oaT1mdW5jdGlvbiBxUWQoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLmlpPWZ1bmN0aW9uIHJRZChhLGIpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5qaT1mdW5jdGlvbiBzUWQoYSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLktrPWZ1bmN0aW9uIHRRZCgpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5Maz1mdW5jdGlvbiB1UWQoKXtyZXR1cm4gdGhpcy5hfTtfLk1rPWZ1bmN0aW9uIHZRZCgpe3JldHVybiB0aGlzLmJ9O18uTms9ZnVuY3Rpb24gd1FkKCl7cmV0dXJuIHRoaXMuY307Xy5Paz1mdW5jdGlvbiB4UWQoKXt0aHJvdyBzY2IobmV3IGFoYil9O18uUGs9ZnVuY3Rpb24geVFkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5Raz1mdW5jdGlvbiB6UWQoYSl7dGhpcy5hPWF9O18uUms9ZnVuY3Rpb24gQVFkKGEpe3RoaXMuYj1hfTtfLlNrPWZ1bmN0aW9uIEJRZChhKXt0aGlzLmM9YX07dmFyIEE2PWplYihUQ2UsJ0R5bmFtaWNFT2JqZWN0SW1wbC9EeW5hbWljRVByb3BlcnRpZXNIb2xkZXJJbXBsJywxNDYzKTtZY2IoNTAzLDE1Nyx7MTA5OjEsOTM6MSw5MjoxLDU4MjoxLDE1NDoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDUwMzoxLDE1NzoxLDExNzoxLDExODoxfSxLUWQpO18ud2g9ZnVuY3Rpb24gTFFkKGEpe3JldHVybiBEUWQodGhpcyxhKX07Xy5IaD1mdW5jdGlvbiBNUWQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuZDtjYXNlIDI6cmV0dXJuIGM/KCF0aGlzLmImJih0aGlzLmI9bmV3IGxSZCgoY1BkKCksJE9kKSx1Nyx0aGlzKSksdGhpcy5iKTooIXRoaXMuYiYmKHRoaXMuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LHRoaXMpKSxDSmQodGhpcy5iKSk7Y2FzZSAzOnJldHVybiBGUWQodGhpcyk7Y2FzZSA0OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBxVmQoajYsdGhpcyw0KSksdGhpcy5hO2Nhc2UgNTpyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgVWRlKGo2LHRoaXMsNSkpLHRoaXMuYzt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChjUGQoKSxIT2QpKSxRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD9IT2Q6ZCksYSksYixjKX07Xy5PaD1mdW5jdGlvbiBOUWQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyk7Y2FzZSAzOiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9EUWQodGhpcyxjKTp0aGlzLkNiLlBoKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIENRZCh0aGlzLEpEKGEsMTU0KSxjKTt9cmV0dXJuIGY9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLEhPZCk6ZCksYiksNjkpLGYudGsoKS53ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksSE9kKSksYSxjKX07Xy5RaD1mdW5jdGlvbiBPUWQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSxRR2QodGhpcy5BYixhLGMpO2Nhc2UgMjpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgbFJkKChjUGQoKSwkT2QpLHU3LHRoaXMpKSxXUWQodGhpcy5iLGEsYyk7Y2FzZSAzOnJldHVybiBDUWQodGhpcyxudWxsLGMpO2Nhc2UgNDpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgcVZkKGo2LHRoaXMsNCkpLFFHZCh0aGlzLmEsYSxjKTt9cmV0dXJuIGU9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLEhPZCk6ZCksYiksNjkpLGUudGsoKS54ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksSE9kKSksYSxjKX07Xy5TaD1mdW5jdGlvbiBQUWQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLmQhPW51bGw7Y2FzZSAyOnJldHVybiAhIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAzOnJldHVybiAhIUZRZCh0aGlzKTtjYXNlIDQ6cmV0dXJuICEhdGhpcy5hJiZ0aGlzLmEuaSE9MDtjYXNlIDU6cmV0dXJuICEhdGhpcy5jJiZ0aGlzLmMuaSE9MDt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChjUGQoKSxIT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9IT2Q6YiksYSkpfTtfLlpoPWZ1bmN0aW9uIFFRZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTt2Q2QodGhpcy5BYixKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTpIUWQodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBsUmQoKGNQZCgpLCRPZCksdTcsdGhpcykpO1hRZCh0aGlzLmIsYik7cmV0dXJuO2Nhc2UgMzpHUWQodGhpcyxKRChiLDE1NCkpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgcVZkKGo2LHRoaXMsNCkpO1JHZCh0aGlzLmEpOyF0aGlzLmEmJih0aGlzLmE9bmV3IHFWZChqNix0aGlzLDQpKTt2Q2QodGhpcy5hLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSA1OiF0aGlzLmMmJih0aGlzLmM9bmV3IFVkZShqNix0aGlzLDUpKTtSR2QodGhpcy5jKTshdGhpcy5jJiYodGhpcy5jPW5ldyBVZGUoajYsdGhpcyw1KSk7dkNkKHRoaXMuYyxKRChiLDE2KSk7cmV0dXJuO31mcWQodGhpcyxhLVZUZCgoY1BkKCksSE9kKSksUVRkKChjPUpEKENyZCh0aGlzLDE2KSwyOSksIWM/SE9kOmMpLGEpLGIpfTtfLmVpPWZ1bmN0aW9uIFJRZCgpe3JldHVybiBjUGQoKSxIT2R9O18uZ2k9ZnVuY3Rpb24gU1FkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpJUWQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IGxSZCgoY1BkKCksJE9kKSx1Nyx0aGlzKSk7dGhpcy5iLmMuJGIoKTtyZXR1cm47Y2FzZSAzOkdRZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6IXRoaXMuYSYmKHRoaXMuYT1uZXcgcVZkKGo2LHRoaXMsNCkpO1JHZCh0aGlzLmEpO3JldHVybjtjYXNlIDU6IXRoaXMuYyYmKHRoaXMuYz1uZXcgVWRlKGo2LHRoaXMsNSkpO1JHZCh0aGlzLmMpO3JldHVybjt9Z3FkKHRoaXMsYS1WVGQoKGNQZCgpLEhPZCkpLFFUZCgoYj1KRChDcmQodGhpcywxNiksMjkpLCFiP0hPZDpiKSxhKSl9O18uSWI9ZnVuY3Rpb24gVFFkKCl7cmV0dXJuIEpRZCh0aGlzKX07Xy5kPW51bGw7dmFyIEQ2PWplYihUQ2UsJ0VBbm5vdGF0aW9uSW1wbCcsNTAzKTtZY2IoMTQwLDcwNSxiRmUsWVFkKTtfLkRpPWZ1bmN0aW9uIFpRZChhLGIpe1VRZCh0aGlzLGEsSkQoYiw0MykpfTtfLlRrPWZ1bmN0aW9uICRRZChhLGIpe3JldHVybiBWUWQodGhpcyxKRChhLDQzKSxiKX07Xy5YaT1mdW5jdGlvbiBfUWQoYSl7cmV0dXJuIEpEKEpEKHRoaXMuYyw3MSkuWGkoYSksMTM1KX07Xy5GaT1mdW5jdGlvbiBhUmQoKXtyZXR1cm4gSkQodGhpcy5jLDcxKS5GaSgpfTtfLkdpPWZ1bmN0aW9uIGJSZCgpe3JldHVybiBKRCh0aGlzLmMsNzEpLkdpKCl9O18uSGk9ZnVuY3Rpb24gY1JkKGEpe3JldHVybiBKRCh0aGlzLmMsNzEpLkhpKGEpfTtfLlVrPWZ1bmN0aW9uIGRSZChhLGIpe3JldHVybiBXUWQodGhpcyxhLGIpfTtfLkNrPWZ1bmN0aW9uIGVSZChhKXtyZXR1cm4gSkQodGhpcy5jLDc2KS5DayhhKX07Xy5aaj1mdW5jdGlvbiBmUmQoKXt9O18uTmo9ZnVuY3Rpb24gZ1JkKCl7cmV0dXJuIEpEKHRoaXMuYyw3NikuTmooKX07Xy5faj1mdW5jdGlvbiBoUmQoYSxiLGMpe3ZhciBkO2Q9SkQoV1NkKHRoaXMuYikuc2koKS5vaSh0aGlzLmIpLDEzNSk7ZC55aShhKTtkLnppKGIpO2QubGQoYyk7cmV0dXJuIGR9O18uYWs9ZnVuY3Rpb24gaVJkKCl7cmV0dXJuIG5ldyBQZWUodGhpcyl9O18uV2I9ZnVuY3Rpb24galJkKGEpe1hRZCh0aGlzLGEpfTtfLkRrPWZ1bmN0aW9uIGtSZCgpe0pEKHRoaXMuYyw3NikuRGsoKX07dmFyIHZhYj1qZWIoX0VlLCdFY29yZUVNYXAnLDE0MCk7WWNiKDE2NywxNDAsYkZlLGxSZCk7Xy5Zaj1mdW5jdGlvbiBtUmQoKXt2YXIgYSxiLGMsZCxlLGY7aWYodGhpcy5kPT1udWxsKXtmPVNDKHY1LExFZSw2NiwyKnRoaXMuZisxLDAsMSk7Zm9yKGM9dGhpcy5jLkpjKCk7Yy5lIT1jLmkuZ2MoKTspe2I9SkQoYy5WaigpLDEzNSk7ZD1iLnhpKCk7ZT0oZCZIcWUpJWYubGVuZ3RoO2E9ZltlXTshYSYmKGE9ZltlXT1uZXcgUGVlKHRoaXMpKTthLkVjKGIpfXRoaXMuZD1mfX07dmFyIEM2PWplYihUQ2UsJ0VBbm5vdGF0aW9uSW1wbC8xJywxNjcpO1ljYigyOTAsNDM2LHsxMDk6MSw5MzoxLDkyOjEsMTU0OjEsMTk3OjEsNTc6MSwxMTM6MSw0Njc6MSw1MjoxLDk4OjEsMTU3OjEsMjkwOjEsMTE3OjEsMTE4OjF9KTtfLkhoPWZ1bmN0aW9uIHpSZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4geGRiKCksKHRoaXMuQmImMjU2KSE9MD90cnVlOmZhbHNlO2Nhc2UgMzpyZXR1cm4geGRiKCksKHRoaXMuQmImNTEyKSE9MD90cnVlOmZhbHNlO2Nhc2UgNDpyZXR1cm4gamZiKHRoaXMucyk7Y2FzZSA1OnJldHVybiBqZmIodGhpcy50KTtjYXNlIDY6cmV0dXJuIHhkYigpLHRoaXMuR2soKT90cnVlOmZhbHNlO2Nhc2UgNzpyZXR1cm4geGRiKCksZT10aGlzLnMsZT49MT90cnVlOmZhbHNlO2Nhc2UgODppZihiKXJldHVybiBwUmQodGhpcyk7cmV0dXJuIHRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKHRoaXMuZWkoKSksUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/dGhpcy5laSgpOmQpLGEpLGIsYyl9O18uUWg9ZnVuY3Rpb24gQVJkKGEsYixjKXt2YXIgZCxlO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksUUdkKHRoaXMuQWIsYSxjKTtjYXNlIDk6cmV0dXJuIG9SZCh0aGlzLGMpO31yZXR1cm4gZT1KRChRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD90aGlzLmVpKCk6ZCksYiksNjkpLGUudGsoKS54ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCh0aGlzLmVpKCkpLGEsYyl9O18uU2g9ZnVuY3Rpb24gQlJkKGEpe3ZhciBiLGM7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gKHRoaXMuQmImMjU2KT09MDtjYXNlIDM6cmV0dXJuICh0aGlzLkJiJjUxMik9PTA7Y2FzZSA0OnJldHVybiB0aGlzLnMhPTA7Y2FzZSA1OnJldHVybiB0aGlzLnQhPTE7Y2FzZSA2OnJldHVybiB0aGlzLkdrKCk7Y2FzZSA3OnJldHVybiBjPXRoaXMucyxjPj0xO2Nhc2UgODpyZXR1cm4gISF0aGlzLnImJiF0aGlzLnEuZSYmRVpkKHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuICEhdGhpcy5xJiYhKCEhdGhpcy5yJiYhdGhpcy5xLmUmJkVaZCh0aGlzLnEpLmk9PTApO31yZXR1cm4gZXFkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj90aGlzLmVpKCk6YiksYSkpfTtfLlpoPWZ1bmN0aW9uIENSZChhLGIpe3ZhciBjLGQ7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO3ZDZCh0aGlzLkFiLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAxOnRoaXMucWkoT0QoYikpO3JldHVybjtjYXNlIDI6dVJkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgMzp2UmQodGhpcyx5ZGIoTEQoYikpKTtyZXR1cm47Y2FzZSA0OnRSZCh0aGlzLEpEKGIsMTcpLmEpO3JldHVybjtjYXNlIDU6dGhpcy5XayhKRChiLDE3KS5hKTtyZXR1cm47Y2FzZSA4OnJSZCh0aGlzLEpEKGIsMTQxKSk7cmV0dXJuO2Nhc2UgOTpkPXFSZCh0aGlzLEpEKGIsODcpLG51bGwpOyEhZCYmZC5saigpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz90aGlzLmVpKCk6YyksYSksYil9O18uZWk9ZnVuY3Rpb24gRFJkKCl7cmV0dXJuIGNQZCgpLGFQZH07Xy5naT1mdW5jdGlvbiBFUmQoYSl7dmFyIGIsYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6dGhpcy5xaShudWxsKTtyZXR1cm47Y2FzZSAyOnVSZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDM6dlJkKHRoaXMsdHJ1ZSk7cmV0dXJuO2Nhc2UgNDp0UmQodGhpcywwKTtyZXR1cm47Y2FzZSA1OnRoaXMuV2soMSk7cmV0dXJuO2Nhc2UgODpyUmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA5OmM9cVJkKHRoaXMsbnVsbCxudWxsKTshIWMmJmMubGooKTtyZXR1cm47fWdxZCh0aGlzLGEtVlRkKHRoaXMuZWkoKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/dGhpcy5laSgpOmIpLGEpKX07Xy5saT1mdW5jdGlvbiBGUmQoKXtwUmQodGhpcyk7dGhpcy5CYnw9MX07Xy5Faz1mdW5jdGlvbiBHUmQoKXtyZXR1cm4gcFJkKHRoaXMpfTtfLkZrPWZ1bmN0aW9uIEhSZCgpe3JldHVybiB0aGlzLnR9O18uR2s9ZnVuY3Rpb24gSVJkKCl7dmFyIGE7cmV0dXJuIGE9dGhpcy50LGE+MXx8YT09LTF9O18uUGk9ZnVuY3Rpb24gSlJkKCl7cmV0dXJuICh0aGlzLkJiJjUxMikhPTB9O18uVms9ZnVuY3Rpb24gS1JkKGEsYil7cmV0dXJuIHNSZCh0aGlzLGEsYil9O18uV2s9ZnVuY3Rpb24gTFJkKGEpe3dSZCh0aGlzLGEpfTtfLkliPWZ1bmN0aW9uIE1SZCgpe3JldHVybiB4UmQodGhpcyl9O18ucz0wO18udD0xO3ZhciBzOD1qZWIoVENlLCdFVHlwZWRFbGVtZW50SW1wbCcsMjkwKTtZY2IoNDQ4LDI5MCx7MTA5OjEsOTM6MSw5MjoxLDE1NDoxLDE5NzoxLDU3OjEsMTc4OjEsNjk6MSwxMTM6MSw0Njc6MSw1MjoxLDk4OjEsMTU3OjEsNDQ4OjEsMjkwOjEsMTE3OjEsMTE4OjEsNjc3OjF9KTtfLndoPWZ1bmN0aW9uIGJTZChhKXtyZXR1cm4gTlJkKHRoaXMsYSl9O18uSGg9ZnVuY3Rpb24gY1NkKGEsYixjKXt2YXIgZCxlO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB4ZGIoKSwodGhpcy5CYiYyNTYpIT0wP3RydWU6ZmFsc2U7Y2FzZSAzOnJldHVybiB4ZGIoKSwodGhpcy5CYiY1MTIpIT0wP3RydWU6ZmFsc2U7Y2FzZSA0OnJldHVybiBqZmIodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGpmYih0aGlzLnQpO2Nhc2UgNjpyZXR1cm4geGRiKCksdGhpcy5HaygpP3RydWU6ZmFsc2U7Y2FzZSA3OnJldHVybiB4ZGIoKSxlPXRoaXMucyxlPj0xP3RydWU6ZmFsc2U7Y2FzZSA4OmlmKGIpcmV0dXJuIHBSZCh0aGlzKTtyZXR1cm4gdGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHhkYigpLCh0aGlzLkJiJk5FZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDExOnJldHVybiB4ZGIoKSwodGhpcy5CYiZ3c2UpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxMjpyZXR1cm4geGRiKCksKHRoaXMuQmImTXNlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBPUmQodGhpcyk7Y2FzZSAxNTpyZXR1cm4geGRiKCksKHRoaXMuQmImZEZlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTY6cmV0dXJuIHhkYigpLCh0aGlzLkJiJmlyZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDE3OnJldHVybiBQUmQodGhpcyk7fXJldHVybiBkcWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP3RoaXMuZWkoKTpkKSxhKSxiLGMpfTtfLk9oPWZ1bmN0aW9uIGRTZChhLGIsYyl7dmFyIGQsZSxmO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksUEdkKHRoaXMuQWIsYSxjKTtjYXNlIDE3OiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9OUmQodGhpcyxjKTp0aGlzLkNiLlBoKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIGJxZCh0aGlzLGEsMTcsYyk7fXJldHVybiBmPUpEKFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP3RoaXMuZWkoKTpkKSxiKSw2OSksZi50aygpLndrKHRoaXMsQXJkKHRoaXMpLGItVlRkKHRoaXMuZWkoKSksYSxjKX07Xy5RaD1mdW5jdGlvbiBlU2QoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSxRR2QodGhpcy5BYixhLGMpO2Nhc2UgOTpyZXR1cm4gb1JkKHRoaXMsYyk7Y2FzZSAxNzpyZXR1cm4gYnFkKHRoaXMsbnVsbCwxNyxjKTt9cmV0dXJuIGU9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/dGhpcy5laSgpOmQpLGIpLDY5KSxlLnRrKCkueGsodGhpcyxBcmQodGhpcyksYi1WVGQodGhpcy5laSgpKSxhLGMpfTtfLlNoPWZ1bmN0aW9uIGZTZChhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuICh0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybiAodGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gdGhpcy5HaygpO2Nhc2UgNzpyZXR1cm4gYz10aGlzLnMsYz49MTtjYXNlIDg6cmV0dXJuICEhdGhpcy5yJiYhdGhpcy5xLmUmJkVaZCh0aGlzLnEpLmk9PTA7Y2FzZSA5OnJldHVybiAhIXRoaXMucSYmISghIXRoaXMuciYmIXRoaXMucS5lJiZFWmQodGhpcy5xKS5pPT0wKTtjYXNlIDEwOnJldHVybiAodGhpcy5CYiZORWUpPT0wO2Nhc2UgMTE6cmV0dXJuICh0aGlzLkJiJndzZSkhPTA7Y2FzZSAxMjpyZXR1cm4gKHRoaXMuQmImTXNlKSE9MDtjYXNlIDEzOnJldHVybiB0aGlzLmohPW51bGw7Y2FzZSAxNDpyZXR1cm4gT1JkKHRoaXMpIT1udWxsO2Nhc2UgMTU6cmV0dXJuICh0aGlzLkJiJmRGZSkhPTA7Y2FzZSAxNjpyZXR1cm4gKHRoaXMuQmImaXJlKSE9MDtjYXNlIDE3OnJldHVybiAhIVBSZCh0aGlzKTt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKHRoaXMuZWkoKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/dGhpcy5laSgpOmIpLGEpKX07Xy5aaD1mdW5jdGlvbiBnU2QoYSxiKXt2YXIgYyxkO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTt2Q2QodGhpcy5BYixKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTpYUmQodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgMjp1UmQodGhpcyx5ZGIoTEQoYikpKTtyZXR1cm47Y2FzZSAzOnZSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDQ6dFJkKHRoaXMsSkQoYiwxNykuYSk7cmV0dXJuO2Nhc2UgNTp0aGlzLldrKEpEKGIsMTcpLmEpO3JldHVybjtjYXNlIDg6clJkKHRoaXMsSkQoYiwxNDEpKTtyZXR1cm47Y2FzZSA5OmQ9cVJkKHRoaXMsSkQoYiw4NyksbnVsbCk7ISFkJiZkLmxqKCk7cmV0dXJuO2Nhc2UgMTA6U1JkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgMTE6JFJkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgMTI6WVJkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgMTM6VFJkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDE1OlpSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDE2OlZSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz90aGlzLmVpKCk6YyksYSksYil9O18uZWk9ZnVuY3Rpb24gaFNkKCl7cmV0dXJuIGNQZCgpLF9PZH07Xy5naT1mdW5jdGlvbiBpU2QoYSl7dmFyIGIsYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6UkQodGhpcy5DYiw4OCkmJlFWZChUVGQoSkQodGhpcy5DYiw4OCkpLDQpO3J2ZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6dVJkKHRoaXMsdHJ1ZSk7cmV0dXJuO2Nhc2UgMzp2UmQodGhpcyx0cnVlKTtyZXR1cm47Y2FzZSA0OnRSZCh0aGlzLDApO3JldHVybjtjYXNlIDU6dGhpcy5XaygxKTtyZXR1cm47Y2FzZSA4OnJSZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6Yz1xUmQodGhpcyxudWxsLG51bGwpOyEhYyYmYy5saigpO3JldHVybjtjYXNlIDEwOlNSZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDExOiRSZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxMjpZUmQodGhpcyxmYWxzZSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGw7VVJkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6WlJkKHRoaXMsZmFsc2UpO3JldHVybjtjYXNlIDE2OlZSZCh0aGlzLGZhbHNlKTtyZXR1cm47fWdxZCh0aGlzLGEtVlRkKHRoaXMuZWkoKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/dGhpcy5laSgpOmIpLGEpKX07Xy5saT1mdW5jdGlvbiBqU2QoKXtWYWUoamFlKChHZmUoKSxFZmUpLHRoaXMpKTtwUmQodGhpcyk7dGhpcy5CYnw9MX07Xy5taz1mdW5jdGlvbiBrU2QoKXtyZXR1cm4gdGhpcy5mfTtfLmZrPWZ1bmN0aW9uIGxTZCgpe3JldHVybiBPUmQodGhpcyl9O18ubms9ZnVuY3Rpb24gbVNkKCl7cmV0dXJuIFBSZCh0aGlzKX07Xy5yaz1mdW5jdGlvbiBuU2QoKXtyZXR1cm4gbnVsbH07Xy5Yaz1mdW5jdGlvbiBvU2QoKXtyZXR1cm4gdGhpcy5rfTtfLklqPWZ1bmN0aW9uIHBTZCgpe3JldHVybiB0aGlzLm59O18uc2s9ZnVuY3Rpb24gcVNkKCl7cmV0dXJuIFFSZCh0aGlzKX07Xy50az1mdW5jdGlvbiByU2QoKXt2YXIgYSxiLGMsZCxlLGYsZyxoLGk7aWYoIXRoaXMucCl7Yz1QUmQodGhpcyk7KGMuaT09bnVsbCYmTVRkKGMpLGMuaSkubGVuZ3RoO2Q9dGhpcy5yaygpOyEhZCYmVlRkKFBSZChkKSk7ZT1wUmQodGhpcyk7Zz1lLmhrKCk7YT0hZz9udWxsOihnLmkmMSkhPTA/Zz09cGNiP0dJOmc9PWNFP1VJOmc9PWJFP1FJOmc9PWFFP0xJOmc9PWRFP1hJOmc9PW9jYj9jSjpnPT0kRD9ISTpJSTpnO2I9T1JkKHRoaXMpO2g9ZS5maygpO2ZmZSh0aGlzKTsodGhpcy5CYiZpcmUpIT0wJiYoISEoZj1tYWUoKEdmZSgpLEVmZSksYykpJiZmIT10aGlzfHwhIShmPVVhZShqYWUoRWZlLHRoaXMpKSkpPyh0aGlzLnA9bmV3IHMyZCh0aGlzLGYpKTp0aGlzLkdrKCk/dGhpcy5aaygpPyFkPyh0aGlzLkJiJmRGZSkhPTA/IWE/dGhpcy4kaygpPyh0aGlzLnA9bmV3IEQyZCg0Mix0aGlzKSk6KHRoaXMucD1uZXcgRDJkKDAsdGhpcykpOmE9PUxLPyh0aGlzLnA9bmV3IEIyZCg1MCxHNSx0aGlzKSk6dGhpcy4kaygpPyh0aGlzLnA9bmV3IEIyZCg0MyxhLHRoaXMpKToodGhpcy5wPW5ldyBCMmQoMSxhLHRoaXMpKTohYT90aGlzLiRrKCk/KHRoaXMucD1uZXcgRDJkKDQ0LHRoaXMpKToodGhpcy5wPW5ldyBEMmQoMix0aGlzKSk6YT09TEs/KHRoaXMucD1uZXcgQjJkKDQxLEc1LHRoaXMpKTp0aGlzLiRrKCk/KHRoaXMucD1uZXcgQjJkKDQ1LGEsdGhpcykpOih0aGlzLnA9bmV3IEIyZCgzLGEsdGhpcykpOih0aGlzLkJiJmRGZSkhPTA/IWE/dGhpcy4kaygpPyh0aGlzLnA9bmV3IEUyZCg0Nix0aGlzLGQpKToodGhpcy5wPW5ldyBFMmQoNCx0aGlzLGQpKTp0aGlzLiRrKCk/KHRoaXMucD1uZXcgQzJkKDQ3LGEsdGhpcyxkKSk6KHRoaXMucD1uZXcgQzJkKDUsYSx0aGlzLGQpKTohYT90aGlzLiRrKCk/KHRoaXMucD1uZXcgRTJkKDQ4LHRoaXMsZCkpOih0aGlzLnA9bmV3IEUyZCg2LHRoaXMsZCkpOnRoaXMuJGsoKT8odGhpcy5wPW5ldyBDMmQoNDksYSx0aGlzLGQpKToodGhpcy5wPW5ldyBDMmQoNyxhLHRoaXMsZCkpOlJEKGUsMTU1KT9hPT1CYWI/KHRoaXMucD1uZXcgRDJkKDQwLHRoaXMpKToodGhpcy5CYiY1MTIpIT0wPyh0aGlzLkJiJmRGZSkhPTA/IWE/KHRoaXMucD1uZXcgRDJkKDgsdGhpcykpOih0aGlzLnA9bmV3IEIyZCg5LGEsdGhpcykpOiFhPyh0aGlzLnA9bmV3IEQyZCgxMCx0aGlzKSk6KHRoaXMucD1uZXcgQjJkKDExLGEsdGhpcykpOih0aGlzLkJiJmRGZSkhPTA/IWE/KHRoaXMucD1uZXcgRDJkKDEyLHRoaXMpKToodGhpcy5wPW5ldyBCMmQoMTMsYSx0aGlzKSk6IWE/KHRoaXMucD1uZXcgRDJkKDE0LHRoaXMpKToodGhpcy5wPW5ldyBCMmQoMTUsYSx0aGlzKSk6IWQ/dGhpcy4kaygpPyh0aGlzLkJiJmRGZSkhPTA/IWE/KHRoaXMucD1uZXcgRDJkKDE2LHRoaXMpKToodGhpcy5wPW5ldyBCMmQoMTcsYSx0aGlzKSk6IWE/KHRoaXMucD1uZXcgRDJkKDE4LHRoaXMpKToodGhpcy5wPW5ldyBCMmQoMTksYSx0aGlzKSk6KHRoaXMuQmImZEZlKSE9MD8hYT8odGhpcy5wPW5ldyBEMmQoMjAsdGhpcykpOih0aGlzLnA9bmV3IEIyZCgyMSxhLHRoaXMpKTohYT8odGhpcy5wPW5ldyBEMmQoMjIsdGhpcykpOih0aGlzLnA9bmV3IEIyZCgyMyxhLHRoaXMpKTooaT1kLnQsaT4xfHxpPT0tMT90aGlzLiRrKCk/KHRoaXMuQmImZEZlKSE9MD8hYT8odGhpcy5wPW5ldyBFMmQoMjQsdGhpcyxkKSk6KHRoaXMucD1uZXcgQzJkKDI1LGEsdGhpcyxkKSk6IWE/KHRoaXMucD1uZXcgRTJkKDI2LHRoaXMsZCkpOih0aGlzLnA9bmV3IEMyZCgyNyxhLHRoaXMsZCkpOih0aGlzLkJiJmRGZSkhPTA/IWE/KHRoaXMucD1uZXcgRTJkKDI4LHRoaXMsZCkpOih0aGlzLnA9bmV3IEMyZCgyOSxhLHRoaXMsZCkpOiFhPyh0aGlzLnA9bmV3IEUyZCgzMCx0aGlzLGQpKToodGhpcy5wPW5ldyBDMmQoMzEsYSx0aGlzLGQpKTp0aGlzLiRrKCk/KHRoaXMuQmImZEZlKSE9MD8hYT8odGhpcy5wPW5ldyBFMmQoMzIsdGhpcyxkKSk6KHRoaXMucD1uZXcgQzJkKDMzLGEsdGhpcyxkKSk6IWE/KHRoaXMucD1uZXcgRTJkKDM0LHRoaXMsZCkpOih0aGlzLnA9bmV3IEMyZCgzNSxhLHRoaXMsZCkpOih0aGlzLkJiJmRGZSkhPTA/IWE/KHRoaXMucD1uZXcgRTJkKDM2LHRoaXMsZCkpOih0aGlzLnA9bmV3IEMyZCgzNyxhLHRoaXMsZCkpOiFhPyh0aGlzLnA9bmV3IEUyZCgzOCx0aGlzLGQpKToodGhpcy5wPW5ldyBDMmQoMzksYSx0aGlzLGQpKSk6dGhpcy5ZaygpP3RoaXMuJGsoKT8odGhpcy5wPW5ldyBkM2QoSkQoZSwyOSksdGhpcyxkKSk6KHRoaXMucD1uZXcgWDJkKEpEKGUsMjkpLHRoaXMsZCkpOlJEKGUsMTU1KT9hPT1CYWI/KHRoaXMucD1uZXcgRDJkKDQwLHRoaXMpKToodGhpcy5CYiZkRmUpIT0wPyFhPyh0aGlzLnA9bmV3IGM0ZChKRChlLDE1NSksYixoLHRoaXMpKToodGhpcy5wPW5ldyBlNGQoYixoLHRoaXMsKHYzZCgpLGc9PWNFP3IzZDpnPT1wY2I/bTNkOmc9PWRFP3MzZDpnPT1iRT9xM2Q6Zz09YUU/cDNkOmc9PW9jYj91M2Q6Zz09JEQ/bjNkOmc9PV9EP28zZDp0M2QpKSk6IWE/KHRoaXMucD1uZXcgWDNkKEpEKGUsMTU1KSxiLGgsdGhpcykpOih0aGlzLnA9bmV3IFozZChiLGgsdGhpcywodjNkKCksZz09Y0U/cjNkOmc9PXBjYj9tM2Q6Zz09ZEU/czNkOmc9PWJFP3EzZDpnPT1hRT9wM2Q6Zz09b2NiP3UzZDpnPT0kRD9uM2Q6Zz09X0Q/bzNkOnQzZCkpKTp0aGlzLlprKCk/IWQ/KHRoaXMuQmImZEZlKSE9MD90aGlzLiRrKCk/KHRoaXMucD1uZXcgeTRkKEpEKGUsMjkpLHRoaXMpKToodGhpcy5wPW5ldyB3NGQoSkQoZSwyOSksdGhpcykpOnRoaXMuJGsoKT8odGhpcy5wPW5ldyB1NGQoSkQoZSwyOSksdGhpcykpOih0aGlzLnA9bmV3IHM0ZChKRChlLDI5KSx0aGlzKSk6KHRoaXMuQmImZEZlKSE9MD90aGlzLiRrKCk/KHRoaXMucD1uZXcgRzRkKEpEKGUsMjkpLHRoaXMsZCkpOih0aGlzLnA9bmV3IEU0ZChKRChlLDI5KSx0aGlzLGQpKTp0aGlzLiRrKCk/KHRoaXMucD1uZXcgQzRkKEpEKGUsMjkpLHRoaXMsZCkpOih0aGlzLnA9bmV3IEE0ZChKRChlLDI5KSx0aGlzLGQpKTp0aGlzLiRrKCk/IWQ/KHRoaXMuQmImZEZlKSE9MD8odGhpcy5wPW5ldyBLNGQoSkQoZSwyOSksdGhpcykpOih0aGlzLnA9bmV3IEk0ZChKRChlLDI5KSx0aGlzKSk6KHRoaXMuQmImZEZlKSE9MD8odGhpcy5wPW5ldyBPNGQoSkQoZSwyOSksdGhpcyxkKSk6KHRoaXMucD1uZXcgTTRkKEpEKGUsMjkpLHRoaXMsZCkpOiFkPyh0aGlzLkJiJmRGZSkhPTA/KHRoaXMucD1uZXcgUTRkKEpEKGUsMjkpLHRoaXMpKToodGhpcy5wPW5ldyBnNGQoSkQoZSwyOSksdGhpcykpOih0aGlzLkJiJmRGZSkhPTA/KHRoaXMucD1uZXcgVTRkKEpEKGUsMjkpLHRoaXMsZCkpOih0aGlzLnA9bmV3IFM0ZChKRChlLDI5KSx0aGlzLGQpKX1yZXR1cm4gdGhpcy5wfTtfLm9rPWZ1bmN0aW9uIHNTZCgpe3JldHVybiAodGhpcy5CYiZORWUpIT0wfTtfLllrPWZ1bmN0aW9uIHRTZCgpe3JldHVybiBmYWxzZX07Xy5aaz1mdW5jdGlvbiB1U2QoKXtyZXR1cm4gZmFsc2V9O18ucGs9ZnVuY3Rpb24gdlNkKCl7cmV0dXJuICh0aGlzLkJiJmlyZSkhPTB9O18udWs9ZnVuY3Rpb24gd1NkKCl7cmV0dXJuIFJSZCh0aGlzKX07Xy4kaz1mdW5jdGlvbiB4U2QoKXtyZXR1cm4gZmFsc2V9O18ucWs9ZnVuY3Rpb24geVNkKCl7cmV0dXJuICh0aGlzLkJiJmRGZSkhPTB9O18uX2s9ZnVuY3Rpb24gelNkKGEpe3RoaXMuaz1hfTtfLnFpPWZ1bmN0aW9uIEFTZChhKXtYUmQodGhpcyxhKX07Xy5JYj1mdW5jdGlvbiBCU2QoKXtyZXR1cm4gX1JkKHRoaXMpfTtfLmU9ZmFsc2U7Xy5uPTA7dmFyIGs4PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwnLDQ0OCk7WWNiKDMzMCw0NDgsezEwOToxLDkzOjEsOTI6MSwzNToxLDE1NDoxLDE5NzoxLDU3OjEsMTc4OjEsNjk6MSwxMTM6MSw0Njc6MSw1MjoxLDk4OjEsMzMwOjEsMTU3OjEsNDQ4OjEsMjkwOjEsMTE3OjEsMTE4OjEsNjc3OjF9LEhTZCk7Xy5IaD1mdW5jdGlvbiBJU2QoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDM6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDQ6cmV0dXJuIGpmYih0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gamZiKHRoaXMudCk7Y2FzZSA2OnJldHVybiB4ZGIoKSxFU2QodGhpcyk/dHJ1ZTpmYWxzZTtjYXNlIDc6cmV0dXJuIHhkYigpLGU9dGhpcy5zLGU+PTE/dHJ1ZTpmYWxzZTtjYXNlIDg6aWYoYilyZXR1cm4gcFJkKHRoaXMpO3JldHVybiB0aGlzLnI7Y2FzZSA5OnJldHVybiB0aGlzLnE7Y2FzZSAxMDpyZXR1cm4geGRiKCksKHRoaXMuQmImTkVlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTE6cmV0dXJuIHhkYigpLCh0aGlzLkJiJndzZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDEyOnJldHVybiB4ZGIoKSwodGhpcy5CYiZNc2UpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qO2Nhc2UgMTQ6cmV0dXJuIE9SZCh0aGlzKTtjYXNlIDE1OnJldHVybiB4ZGIoKSwodGhpcy5CYiZkRmUpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxNjpyZXR1cm4geGRiKCksKHRoaXMuQmImaXJlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTc6cmV0dXJuIFBSZCh0aGlzKTtjYXNlIDE4OnJldHVybiB4ZGIoKSwodGhpcy5CYiZSQ2UpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxOTppZihiKXJldHVybiBEU2QodGhpcyk7cmV0dXJuIENTZCh0aGlzKTt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChjUGQoKSxJT2QpKSxRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD9JT2Q6ZCksYSksYixjKX07Xy5TaD1mdW5jdGlvbiBKU2QoYSl7dmFyIGIsYztzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiAodGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4gKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIEVTZCh0aGlzKTtjYXNlIDc6cmV0dXJuIGM9dGhpcy5zLGM+PTE7Y2FzZSA4OnJldHVybiAhIXRoaXMuciYmIXRoaXMucS5lJiZFWmQodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4gISF0aGlzLnEmJiEoISF0aGlzLnImJiF0aGlzLnEuZSYmRVpkKHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4gKHRoaXMuQmImTkVlKT09MDtjYXNlIDExOnJldHVybiAodGhpcy5CYiZ3c2UpIT0wO2Nhc2UgMTI6cmV0dXJuICh0aGlzLkJiJk1zZSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIE9SZCh0aGlzKSE9bnVsbDtjYXNlIDE1OnJldHVybiAodGhpcy5CYiZkRmUpIT0wO2Nhc2UgMTY6cmV0dXJuICh0aGlzLkJiJmlyZSkhPTA7Y2FzZSAxNzpyZXR1cm4gISFQUmQodGhpcyk7Y2FzZSAxODpyZXR1cm4gKHRoaXMuQmImUkNlKSE9MDtjYXNlIDE5OnJldHVybiAhIUNTZCh0aGlzKTt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChjUGQoKSxJT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9JT2Q6YiksYSkpfTtfLlpoPWZ1bmN0aW9uIEtTZChhLGIpe3ZhciBjLGQ7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO3ZDZCh0aGlzLkFiLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAxOlhSZCh0aGlzLE9EKGIpKTtyZXR1cm47Y2FzZSAyOnVSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDM6dlJkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgNDp0UmQodGhpcyxKRChiLDE3KS5hKTtyZXR1cm47Y2FzZSA1OkdTZCh0aGlzLEpEKGIsMTcpLmEpO3JldHVybjtjYXNlIDg6clJkKHRoaXMsSkQoYiwxNDEpKTtyZXR1cm47Y2FzZSA5OmQ9cVJkKHRoaXMsSkQoYiw4NyksbnVsbCk7ISFkJiZkLmxqKCk7cmV0dXJuO2Nhc2UgMTA6U1JkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgMTE6JFJkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgMTI6WVJkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgMTM6VFJkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDE1OlpSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDE2OlZSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDE4OkZTZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQoKGNQZCgpLElPZCkpLFFUZCgoYz1KRChDcmQodGhpcywxNiksMjkpLCFjP0lPZDpjKSxhKSxiKX07Xy5laT1mdW5jdGlvbiBMU2QoKXtyZXR1cm4gY1BkKCksSU9kfTtfLmdpPWZ1bmN0aW9uIE1TZChhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpSRCh0aGlzLkNiLDg4KSYmUVZkKFRUZChKRCh0aGlzLkNiLDg4KSksNCk7cnZkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjp1UmQodGhpcyx0cnVlKTtyZXR1cm47Y2FzZSAzOnZSZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDQ6dFJkKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp0aGlzLmI9MDt3UmQodGhpcywxKTtyZXR1cm47Y2FzZSA4OnJSZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6Yz1xUmQodGhpcyxudWxsLG51bGwpOyEhYyYmYy5saigpO3JldHVybjtjYXNlIDEwOlNSZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDExOiRSZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxMjpZUmQodGhpcyxmYWxzZSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGw7VVJkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6WlJkKHRoaXMsZmFsc2UpO3JldHVybjtjYXNlIDE2OlZSZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxODpGU2QodGhpcyxmYWxzZSk7cmV0dXJuO31ncWQodGhpcyxhLVZUZCgoY1BkKCksSU9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/SU9kOmIpLGEpKX07Xy5saT1mdW5jdGlvbiBOU2QoKXtEU2QodGhpcyk7VmFlKGphZSgoR2ZlKCksRWZlKSx0aGlzKSk7cFJkKHRoaXMpO3RoaXMuQmJ8PTF9O18uR2s9ZnVuY3Rpb24gT1NkKCl7cmV0dXJuIEVTZCh0aGlzKX07Xy5Waz1mdW5jdGlvbiBQU2QoYSxiKXt0aGlzLmI9MDt0aGlzLmE9bnVsbDtyZXR1cm4gc1JkKHRoaXMsYSxiKX07Xy5Xaz1mdW5jdGlvbiBRU2QoYSl7R1NkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gUlNkKCl7dmFyIGE7aWYoKHRoaXMuRGImNjQpIT0wKXJldHVybiBfUmQodGhpcyk7YT1uZXcgSmdiKF9SZCh0aGlzKSk7YS5hKz0nIChpRDogJztGZ2IoYSwodGhpcy5CYiZSQ2UpIT0wKTthLmErPScpJztyZXR1cm4gYS5hfTtfLmI9MDt2YXIgRTY9amViKFRDZSwnRUF0dHJpYnV0ZUltcGwnLDMzMCk7WWNiKDM1Nyw0MzYsezEwOToxLDkzOjEsOTI6MSwxNDE6MSwxNTQ6MSwxOTc6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwzNTc6MSwxNTc6MSwxMTc6MSwxMTg6MSw2NzY6MX0pO18uYWw9ZnVuY3Rpb24gZ1RkKGEpe3JldHVybiBhLnpoKCk9PXRoaXN9O18ud2g9ZnVuY3Rpb24gaFRkKGEpe3JldHVybiBWU2QodGhpcyxhKX07Xy54aD1mdW5jdGlvbiBpVGQoYSxiKXt0aGlzLnc9bnVsbDt0aGlzLkRiPWI8PDE2fHRoaXMuRGImMjU1O3RoaXMuQ2I9YX07Xy5IaD1mdW5jdGlvbiBqVGQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIFlTZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuZmsoKTtjYXNlIDU6cmV0dXJuIHRoaXMuRjtjYXNlIDY6aWYoYilyZXR1cm4gV1NkKHRoaXMpO3JldHVybiBTU2QodGhpcyk7Y2FzZSA3OnJldHVybiAhdGhpcy5BJiYodGhpcy5BPW5ldyBEZGUocjYsdGhpcyw3KSksdGhpcy5BO31yZXR1cm4gZHFkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD90aGlzLmVpKCk6ZCksYSksYixjKX07Xy5PaD1mdW5jdGlvbiBrVGQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyk7Y2FzZSA2OiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9WU2QodGhpcyxjKTp0aGlzLkNiLlBoKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIGJxZCh0aGlzLGEsNixjKTt9cmV0dXJuIGY9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/dGhpcy5laSgpOmQpLGIpLDY5KSxmLnRrKCkud2sodGhpcyxBcmQodGhpcyksYi1WVGQodGhpcy5laSgpKSxhLGMpfTtfLlFoPWZ1bmN0aW9uIGxUZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFFHZCh0aGlzLkFiLGEsYyk7Y2FzZSA2OnJldHVybiBicWQodGhpcyxudWxsLDYsYyk7Y2FzZSA3OnJldHVybiAhdGhpcy5BJiYodGhpcy5BPW5ldyBEZGUocjYsdGhpcyw3KSksUUdkKHRoaXMuQSxhLGMpO31yZXR1cm4gZT1KRChRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD90aGlzLmVpKCk6ZCksYiksNjkpLGUudGsoKS54ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCh0aGlzLmVpKCkpLGEsYyl9O18uU2g9ZnVuY3Rpb24gbVRkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiAhIVlTZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIHRoaXMuZmsoKSE9bnVsbDtjYXNlIDU6cmV0dXJuIHRoaXMuRiE9bnVsbCYmdGhpcy5GIT10aGlzLkQmJnRoaXMuRiE9dGhpcy5CO2Nhc2UgNjpyZXR1cm4gISFTU2QodGhpcyk7Y2FzZSA3OnJldHVybiAhIXRoaXMuQSYmdGhpcy5BLmkhPTA7fXJldHVybiBlcWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgoYj1KRChDcmQodGhpcywxNiksMjkpLCFiP3RoaXMuZWkoKTpiKSxhKSl9O18uWmg9ZnVuY3Rpb24gblRkKGEsYil7dmFyIGM7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO3ZDZCh0aGlzLkFiLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAxOmVUZCh0aGlzLE9EKGIpKTtyZXR1cm47Y2FzZSAyOmJUZCh0aGlzLE9EKGIpKTtyZXR1cm47Y2FzZSA1OmRUZCh0aGlzLE9EKGIpKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IERkZShyNix0aGlzLDcpKTtSR2QodGhpcy5BKTshdGhpcy5BJiYodGhpcy5BPW5ldyBEZGUocjYsdGhpcyw3KSk7dkNkKHRoaXMuQSxKRChiLDE2KSk7cmV0dXJuO31mcWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgoYz1KRChDcmQodGhpcywxNiksMjkpLCFjP3RoaXMuZWkoKTpjKSxhKSxiKX07Xy5laT1mdW5jdGlvbiBvVGQoKXtyZXR1cm4gY1BkKCksS09kfTtfLmdpPWZ1bmN0aW9uIHBUZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6UkQodGhpcy5DYiwxODQpJiYoSkQodGhpcy5DYiwxODQpLnRiPW51bGwpO3J2ZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6VFNkKHRoaXMsbnVsbCk7VVNkKHRoaXMsdGhpcy5EKTtyZXR1cm47Y2FzZSA1OmRUZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRGRlKHI2LHRoaXMsNykpO1JHZCh0aGlzLkEpO3JldHVybjt9Z3FkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj90aGlzLmVpKCk6YiksYSkpfTtfLmVrPWZ1bmN0aW9uIHFUZCgpe3ZhciBhO3JldHVybiB0aGlzLkc9PS0xJiYodGhpcy5HPShhPVdTZCh0aGlzKSxhP0FVZChhLnJpKCksdGhpcyk6LTEpKSx0aGlzLkd9O18uZms9ZnVuY3Rpb24gclRkKCl7cmV0dXJuIG51bGx9O18uZ2s9ZnVuY3Rpb24gc1RkKCl7cmV0dXJuIFdTZCh0aGlzKX07Xy5ibD1mdW5jdGlvbiB0VGQoKXtyZXR1cm4gdGhpcy52fTtfLmhrPWZ1bmN0aW9uIHVUZCgpe3JldHVybiBZU2QodGhpcyl9O18uaWs9ZnVuY3Rpb24gdlRkKCl7cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CfTtfLmprPWZ1bmN0aW9uIHdUZCgpe3JldHVybiB0aGlzLkZ9O18uY2s9ZnVuY3Rpb24geFRkKGEpe3JldHVybiAkU2QodGhpcyxhKX07Xy5jbD1mdW5jdGlvbiB5VGQoYSl7dGhpcy52PWF9O18uZGw9ZnVuY3Rpb24gelRkKGEpe19TZCh0aGlzLGEpfTtfLmVsPWZ1bmN0aW9uIEFUZChhKXt0aGlzLkM9YX07Xy5xaT1mdW5jdGlvbiBCVGQoYSl7ZVRkKHRoaXMsYSl9O18uSWI9ZnVuY3Rpb24gQ1RkKCl7cmV0dXJuIGZUZCh0aGlzKX07Xy5DPW51bGw7Xy5EPW51bGw7Xy5HPS0xO3ZhciBXNj1qZWIoVENlLCdFQ2xhc3NpZmllckltcGwnLDM1Nyk7WWNiKDg4LDM1Nyx7MTA5OjEsOTM6MSw5MjoxLDI5OjEsMTQxOjEsMTU0OjEsMTk3OjEsNTc6MSwxMTM6MSw1MjoxLDk4OjEsODg6MSwzNTc6MSwxNTc6MSw0Njg6MSwxMTc6MSwxMTg6MSw2NzY6MX0sYVVkKTtfLmFsPWZ1bmN0aW9uIGJVZChhKXtyZXR1cm4gWVRkKHRoaXMsYS56aCgpKX07Xy5IaD1mdW5jdGlvbiBjVWQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGw/dGhpcy5EOnRoaXMuQjtjYXNlIDM6cmV0dXJuIFlTZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIG51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OmlmKGIpcmV0dXJuIFdTZCh0aGlzKTtyZXR1cm4gU1NkKHRoaXMpO2Nhc2UgNzpyZXR1cm4gIXRoaXMuQSYmKHRoaXMuQT1uZXcgRGRlKHI2LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDk6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDEwOnJldHVybiBVVGQodGhpcyk7Y2FzZSAxMTpyZXR1cm4gIXRoaXMucSYmKHRoaXMucT1uZXcgWDBkKGs2LHRoaXMsMTEsMTApKSx0aGlzLnE7Y2FzZSAxMjpyZXR1cm4gSFRkKHRoaXMpO2Nhc2UgMTM6cmV0dXJuIExUZCh0aGlzKTtjYXNlIDE0OnJldHVybiBMVGQodGhpcyksdGhpcy5yO2Nhc2UgMTU6cmV0dXJuIEhUZCh0aGlzKSx0aGlzLms7Y2FzZSAxNjpyZXR1cm4gSVRkKHRoaXMpO2Nhc2UgMTc6cmV0dXJuIEtUZCh0aGlzKTtjYXNlIDE4OnJldHVybiBNVGQodGhpcyk7Y2FzZSAxOTpyZXR1cm4gTlRkKHRoaXMpO2Nhc2UgMjA6cmV0dXJuIEhUZCh0aGlzKSx0aGlzLm87Y2FzZSAyMTpyZXR1cm4gIXRoaXMucyYmKHRoaXMucz1uZXcgWDBkKHE2LHRoaXMsMjEsMTcpKSx0aGlzLnM7Y2FzZSAyMjpyZXR1cm4gT1RkKHRoaXMpO2Nhc2UgMjM6cmV0dXJuIEpUZCh0aGlzKTt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChjUGQoKSxKT2QpKSxRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD9KT2Q6ZCksYSksYixjKX07Xy5PaD1mdW5jdGlvbiBkVWQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyk7Y2FzZSA2OiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9WU2QodGhpcyxjKTp0aGlzLkNiLlBoKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIGJxZCh0aGlzLGEsNixjKTtjYXNlIDExOnJldHVybiAhdGhpcy5xJiYodGhpcy5xPW5ldyBYMGQoazYsdGhpcywxMSwxMCkpLFBHZCh0aGlzLnEsYSxjKTtjYXNlIDIxOnJldHVybiAhdGhpcy5zJiYodGhpcy5zPW5ldyBYMGQocTYsdGhpcywyMSwxNykpLFBHZCh0aGlzLnMsYSxjKTt9cmV0dXJuIGY9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLEpPZCk6ZCksYiksNjkpLGYudGsoKS53ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksSk9kKSksYSxjKX07Xy5RaD1mdW5jdGlvbiBlVWQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSxRR2QodGhpcy5BYixhLGMpO2Nhc2UgNjpyZXR1cm4gYnFkKHRoaXMsbnVsbCw2LGMpO2Nhc2UgNzpyZXR1cm4gIXRoaXMuQSYmKHRoaXMuQT1uZXcgRGRlKHI2LHRoaXMsNykpLFFHZCh0aGlzLkEsYSxjKTtjYXNlIDExOnJldHVybiAhdGhpcy5xJiYodGhpcy5xPW5ldyBYMGQoazYsdGhpcywxMSwxMCkpLFFHZCh0aGlzLnEsYSxjKTtjYXNlIDIxOnJldHVybiAhdGhpcy5zJiYodGhpcy5zPW5ldyBYMGQocTYsdGhpcywyMSwxNykpLFFHZCh0aGlzLnMsYSxjKTtjYXNlIDIyOnJldHVybiBRR2QoT1RkKHRoaXMpLGEsYyk7fXJldHVybiBlPUpEKFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkPyhjUGQoKSxKT2QpOmQpLGIpLDY5KSxlLnRrKCkueGsodGhpcyxBcmQodGhpcyksYi1WVGQoKGNQZCgpLEpPZCkpLGEsYyl9O18uU2g9ZnVuY3Rpb24gZlVkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbCYmdGhpcy5EPT10aGlzLkY7Y2FzZSAzOnJldHVybiAhIVlTZCh0aGlzKTtjYXNlIDQ6cmV0dXJuIGZhbHNlO2Nhc2UgNTpyZXR1cm4gdGhpcy5GIT1udWxsJiZ0aGlzLkYhPXRoaXMuRCYmdGhpcy5GIT10aGlzLkI7Y2FzZSA2OnJldHVybiAhIVNTZCh0aGlzKTtjYXNlIDc6cmV0dXJuICEhdGhpcy5BJiZ0aGlzLkEuaSE9MDtjYXNlIDg6cmV0dXJuICh0aGlzLkJiJjI1NikhPTA7Y2FzZSA5OnJldHVybiAodGhpcy5CYiY1MTIpIT0wO2Nhc2UgMTA6cmV0dXJuICEhdGhpcy51JiZPVGQodGhpcy51LmEpLmkhPTAmJiEoISF0aGlzLm4mJnlWZCh0aGlzLm4pKTtjYXNlIDExOnJldHVybiAhIXRoaXMucSYmdGhpcy5xLmkhPTA7Y2FzZSAxMjpyZXR1cm4gSFRkKHRoaXMpLmkhPTA7Y2FzZSAxMzpyZXR1cm4gTFRkKHRoaXMpLmkhPTA7Y2FzZSAxNDpyZXR1cm4gTFRkKHRoaXMpLHRoaXMuci5pIT0wO2Nhc2UgMTU6cmV0dXJuIEhUZCh0aGlzKSx0aGlzLmsuaSE9MDtjYXNlIDE2OnJldHVybiBJVGQodGhpcykuaSE9MDtjYXNlIDE3OnJldHVybiBLVGQodGhpcykuaSE9MDtjYXNlIDE4OnJldHVybiBNVGQodGhpcykuaSE9MDtjYXNlIDE5OnJldHVybiBOVGQodGhpcykuaSE9MDtjYXNlIDIwOnJldHVybiBIVGQodGhpcyksISF0aGlzLm87Y2FzZSAyMTpyZXR1cm4gISF0aGlzLnMmJnRoaXMucy5pIT0wO2Nhc2UgMjI6cmV0dXJuICEhdGhpcy5uJiZ5VmQodGhpcy5uKTtjYXNlIDIzOnJldHVybiBKVGQodGhpcykuaSE9MDt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChjUGQoKSxKT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9KT2Q6YiksYSkpfTtfLlZoPWZ1bmN0aW9uIGdVZChhKXt2YXIgYjtiPXRoaXMuaT09bnVsbHx8ISF0aGlzLnEmJnRoaXMucS5pIT0wP251bGw6UlRkKHRoaXMsYSk7cmV0dXJuIGI/YjpEdWQodGhpcyxhKX07Xy5aaD1mdW5jdGlvbiBoVWQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7dkNkKHRoaXMuQWIsSkQoYiwxNikpO3JldHVybjtjYXNlIDE6ZVRkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDI6YlRkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDU6ZFRkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRGRlKHI2LHRoaXMsNykpO1JHZCh0aGlzLkEpOyF0aGlzLkEmJih0aGlzLkE9bmV3IERkZShyNix0aGlzLDcpKTt2Q2QodGhpcy5BLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSA4OlpUZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDk6JFRkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgMTA6c0ZkKFVUZCh0aGlzKSk7dkNkKFVUZCh0aGlzKSxKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMucSYmKHRoaXMucT1uZXcgWDBkKGs2LHRoaXMsMTEsMTApKTtSR2QodGhpcy5xKTshdGhpcy5xJiYodGhpcy5xPW5ldyBYMGQoazYsdGhpcywxMSwxMCkpO3ZDZCh0aGlzLnEsSkQoYiwxNikpO3JldHVybjtjYXNlIDIxOiF0aGlzLnMmJih0aGlzLnM9bmV3IFgwZChxNix0aGlzLDIxLDE3KSk7UkdkKHRoaXMucyk7IXRoaXMucyYmKHRoaXMucz1uZXcgWDBkKHE2LHRoaXMsMjEsMTcpKTt2Q2QodGhpcy5zLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAyMjpSR2QoT1RkKHRoaXMpKTt2Q2QoT1RkKHRoaXMpLEpEKGIsMTYpKTtyZXR1cm47fWZxZCh0aGlzLGEtVlRkKChjUGQoKSxKT2QpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz9KT2Q6YyksYSksYil9O18uZWk9ZnVuY3Rpb24gaVVkKCl7cmV0dXJuIGNQZCgpLEpPZH07Xy5naT1mdW5jdGlvbiBqVWQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOlJEKHRoaXMuQ2IsMTg0KSYmKEpEKHRoaXMuQ2IsMTg0KS50Yj1udWxsKTtydmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlRTZCh0aGlzLG51bGwpO1VTZCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpkVGQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IERkZShyNix0aGlzLDcpKTtSR2QodGhpcy5BKTtyZXR1cm47Y2FzZSA4OlpUZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSA5OiRUZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxMDohIXRoaXMudSYmc0ZkKHRoaXMudSk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMucSYmKHRoaXMucT1uZXcgWDBkKGs2LHRoaXMsMTEsMTApKTtSR2QodGhpcy5xKTtyZXR1cm47Y2FzZSAyMTohdGhpcy5zJiYodGhpcy5zPW5ldyBYMGQocTYsdGhpcywyMSwxNykpO1JHZCh0aGlzLnMpO3JldHVybjtjYXNlIDIyOiEhdGhpcy5uJiZSR2QodGhpcy5uKTtyZXR1cm47fWdxZCh0aGlzLGEtVlRkKChjUGQoKSxKT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9KT2Q6YiksYSkpfTtfLmxpPWZ1bmN0aW9uIGtVZCgpe3ZhciBhLGI7SFRkKHRoaXMpO0xUZCh0aGlzKTtJVGQodGhpcyk7S1RkKHRoaXMpO01UZCh0aGlzKTtOVGQodGhpcyk7SlRkKHRoaXMpO2xEZChMVmQoVFRkKHRoaXMpKSk7aWYodGhpcy5zKXtmb3IoYT0wLGI9dGhpcy5zLmk7YTxiOysrYSl7RXVkKG5EZCh0aGlzLnMsYSkpfX1pZih0aGlzLnEpe2ZvcihhPTAsYj10aGlzLnEuaTthPGI7KythKXtFdWQobkRkKHRoaXMucSxhKSl9fWhhZSgoR2ZlKCksRWZlKSx0aGlzKS52ZSgpO3RoaXMuQmJ8PTF9O18uSWI9ZnVuY3Rpb24gbFVkKCl7cmV0dXJuIF9UZCh0aGlzKX07Xy5rPW51bGw7Xy5yPW51bGw7dmFyIERUZCxFVGQsRlRkO3ZhciBWNj1qZWIoVENlLCdFQ2xhc3NJbXBsJyw4OCk7WWNiKDIwMzgsMjAzNyxvRmUpO18uQmk9ZnVuY3Rpb24gbVVkKGEsYil7cmV0dXJuIE1HZCh0aGlzLGEsYil9O18uQ2k9ZnVuY3Rpb24gblVkKGEpe3JldHVybiBNR2QodGhpcyx0aGlzLmksYSl9O18uRGk9ZnVuY3Rpb24gb1VkKGEsYil7TkdkKHRoaXMsYSxiKX07Xy5FaT1mdW5jdGlvbiBwVWQoYSl7T0dkKHRoaXMsYSl9O18uVGs9ZnVuY3Rpb24gcVVkKGEsYil7cmV0dXJuIFBHZCh0aGlzLGEsYil9O18uWGk9ZnVuY3Rpb24gclVkKGEpe3JldHVybiBrRGQodGhpcyxhKX07Xy5Vaz1mdW5jdGlvbiB2VWQoYSxiKXtyZXR1cm4gUUdkKHRoaXMsYSxiKX07Xy5VaT1mdW5jdGlvbiB3VWQoYSxiKXtyZXR1cm4gV0dkKHRoaXMsYSxiKX07Xy5GaT1mdW5jdGlvbiBzVWQoKXtyZXR1cm4gbmV3IFhIZCh0aGlzKX07Xy5HaT1mdW5jdGlvbiB0VWQoKXtyZXR1cm4gbmV3ICRIZCh0aGlzKX07Xy5IaT1mdW5jdGlvbiB1VWQoYSl7cmV0dXJuIHdDZCh0aGlzLGEpfTt2YXIgTWFiPWplYihfRWUsJ05vdGlmeWluZ0ludGVybmFsRUxpc3RJbXBsJywyMDM4KTtZY2IoNjE3LDIwMzgscEZlKTtfLkdjPWZ1bmN0aW9uIEdVZChhKXtyZXR1cm4geFVkKHRoaXMsYSl9O18uRmo9ZnVuY3Rpb24gSFVkKGEsYixjLGQsZSl7cmV0dXJuIHlVZCh0aGlzLGEsYixjLGQsZSl9O18uR2o9ZnVuY3Rpb24gSVVkKGEpe3pVZCh0aGlzLGEpfTtfLkNrPWZ1bmN0aW9uIEpVZChhKXtyZXR1cm4gdGhpc307Xy5Jaz1mdW5jdGlvbiBLVWQoKXtyZXR1cm4gUVRkKHRoaXMuZS56aCgpLHRoaXMuSWooKSl9O18uSGo9ZnVuY3Rpb24gTFVkKCl7cmV0dXJuIHRoaXMuSWsoKX07Xy5Jaj1mdW5jdGlvbiBNVWQoKXtyZXR1cm4gV1RkKHRoaXMuZS56aCgpLHRoaXMuSWsoKSl9O18uZmw9ZnVuY3Rpb24gTlVkKCl7cmV0dXJuIEpEKHRoaXMuSWsoKS5FaygpLDI5KS5oaygpfTtfLmdsPWZ1bmN0aW9uIE9VZCgpe3JldHVybiBzMWQoSkQodGhpcy5JaygpLDE5KSkubn07Xy5naj1mdW5jdGlvbiBQVWQoKXtyZXR1cm4gdGhpcy5lfTtfLmhsPWZ1bmN0aW9uIFFVZCgpe3JldHVybiB0cnVlfTtfLmlsPWZ1bmN0aW9uIFJVZCgpe3JldHVybiBmYWxzZX07Xy5qbD1mdW5jdGlvbiBTVWQoKXtyZXR1cm4gZmFsc2V9O18ua2w9ZnVuY3Rpb24gVFVkKCl7cmV0dXJuIGZhbHNlfTtfLmJkPWZ1bmN0aW9uIFVVZChhKXtyZXR1cm4gQVVkKHRoaXMsYSl9O18uS2o9ZnVuY3Rpb24gVlVkKGEsYil7dmFyIGM7cmV0dXJuIGM9SkQoYSw1MiksdGhpcy5qbCgpP3RoaXMuaGwoKT9jLk5oKHRoaXMuZSx0aGlzLmdsKCksdGhpcy5mbCgpLGIpOmMuTmgodGhpcy5lLFdUZChjLnpoKCksczFkKEpEKHRoaXMuSWsoKSwxOSkpKSxudWxsLGIpOmMuTmgodGhpcy5lLC0xLXRoaXMuSWooKSxudWxsLGIpfTtfLkxqPWZ1bmN0aW9uIFdVZChhLGIpe3ZhciBjO3JldHVybiBjPUpEKGEsNTIpLHRoaXMuamwoKT90aGlzLmhsKCk/Yy5QaCh0aGlzLmUsdGhpcy5nbCgpLHRoaXMuZmwoKSxiKTpjLlBoKHRoaXMuZSxXVGQoYy56aCgpLHMxZChKRCh0aGlzLklrKCksMTkpKSksbnVsbCxiKTpjLlBoKHRoaXMuZSwtMS10aGlzLklqKCksbnVsbCxiKX07Xy5aaz1mdW5jdGlvbiBYVWQoKXtyZXR1cm4gZmFsc2V9O18ubGw9ZnVuY3Rpb24gWVVkKCl7cmV0dXJuIHRydWV9O18uY2s9ZnVuY3Rpb24gWlVkKGEpe3JldHVybiBqTmQodGhpcy5kLGEpfTtfLk1qPWZ1bmN0aW9uICRVZCgpe3JldHVybiBxcWQodGhpcy5lKX07Xy5Oaj1mdW5jdGlvbiBfVWQoKXtyZXR1cm4gdGhpcy5pIT0wfTtfLlppPWZ1bmN0aW9uIGFWZChhKXtyZXR1cm4gZklkKHRoaXMuZCxhKX07Xy5UaT1mdW5jdGlvbiBiVmQoYSxiKXtyZXR1cm4gdGhpcy5sbCgpJiZ0aGlzLmtsKCk/QlVkKHRoaXMsYSxKRChiLDU3KSk6Yn07Xy5tbD1mdW5jdGlvbiBjVmQoYSl7cmV0dXJuIGEuUmgoKT96cWQodGhpcy5lLEpEKGEsNTIpKTphfTtfLldiPWZ1bmN0aW9uIGRWZChhKXtDVWQodGhpcyxhKX07Xy5OYz1mdW5jdGlvbiBlVmQoKXtyZXR1cm4gRFVkKHRoaXMpfTtfLk9jPWZ1bmN0aW9uIGZWZChhKXt2YXIgYjtpZih0aGlzLmtsKCkpe2ZvcihiPXRoaXMuaS0xO2I+PTA7LS1iKXtuRGQodGhpcyxiKX19cmV0dXJuIHVEZCh0aGlzLGEpfTtfLkRrPWZ1bmN0aW9uIGdWZCgpe1JHZCh0aGlzKX07Xy5XaT1mdW5jdGlvbiBoVmQoYSxiKXtyZXR1cm4gRVVkKHRoaXMsYSxiKX07dmFyIHFhYj1qZWIoX0VlLCdFY29yZUVMaXN0Jyw2MTcpO1ljYig0ODksNjE3LHBGZSxpVmQpO18uSWk9ZnVuY3Rpb24galZkKCl7cmV0dXJuIGZhbHNlfTtfLklqPWZ1bmN0aW9uIGtWZCgpe3JldHVybiB0aGlzLmN9O18uSmo9ZnVuY3Rpb24gbFZkKCl7cmV0dXJuIGZhbHNlfTtfLmxsPWZ1bmN0aW9uIG1WZCgpe3JldHVybiB0cnVlfTtfLlBpPWZ1bmN0aW9uIG5WZCgpe3JldHVybiB0cnVlfTtfLlRpPWZ1bmN0aW9uIG9WZChhLGIpe3JldHVybiBifTtfLlZpPWZ1bmN0aW9uIHBWZCgpe3JldHVybiBmYWxzZX07Xy5jPTA7dmFyIGFhYj1qZWIoX0VlLCdFT2JqZWN0RUxpc3QnLDQ4OSk7WWNiKDgxLDQ4OSxwRmUscVZkKTtfLkpqPWZ1bmN0aW9uIHJWZCgpe3JldHVybiB0cnVlfTtfLmpsPWZ1bmN0aW9uIHNWZCgpe3JldHVybiBmYWxzZX07Xy5aaz1mdW5jdGlvbiB0VmQoKXtyZXR1cm4gdHJ1ZX07dmFyIFc5PWplYihfRWUsJ0VPYmplY3RDb250YWlubWVudEVMaXN0Jyw4MSk7WWNiKDU0MCw4MSxwRmUsdVZkKTtfLktpPWZ1bmN0aW9uIHZWZCgpe3RoaXMuYj10cnVlfTtfLk5qPWZ1bmN0aW9uIHdWZCgpe3JldHVybiB0aGlzLmJ9O18uRGs9ZnVuY3Rpb24geFZkKCl7dmFyIGE7UkdkKHRoaXMpO2lmKHFxZCh0aGlzLmUpKXthPXRoaXMuYjt0aGlzLmI9ZmFsc2U7V3BkKHRoaXMuZSxuZXcgal9kKHRoaXMuZSwyLHRoaXMuYyxhLGZhbHNlKSl9ZWxzZXt0aGlzLmI9ZmFsc2V9fTtfLmI9ZmFsc2U7dmFyIFY5PWplYihfRWUsJ0VPYmplY3RDb250YWlubWVudEVMaXN0L1Vuc2V0dGFibGUnLDU0MCk7WWNiKDExMjUsNTQwLHBGZSxDVmQpO18uUWk9ZnVuY3Rpb24gR1ZkKGEsYil7dmFyIGMsZDtyZXR1cm4gYz1KRChUR2QodGhpcyxhLGIpLDg3KSxxcWQodGhpcy5lKSYmelVkKHRoaXMsbmV3IHhfZCh0aGlzLmEsNywoY1BkKCksTE9kKSxqZmIoYiksKGQ9Yy5jLFJEKGQsODgpP0pEKGQsMjkpOlVPZCksYSkpLGN9O18uUmo9ZnVuY3Rpb24gSFZkKGEsYil7cmV0dXJuIHpWZCh0aGlzLEpEKGEsODcpLGIpfTtfLlNqPWZ1bmN0aW9uIElWZChhLGIpe3JldHVybiBBVmQodGhpcyxKRChhLDg3KSxiKX07Xy5Uaj1mdW5jdGlvbiBKVmQoYSxiLGMpe3JldHVybiBCVmQodGhpcyxKRChhLDg3KSxKRChiLDg3KSxjKX07Xy5Gaj1mdW5jdGlvbiBEVmQoYSxiLGMsZCxlKXtzd2l0Y2goYSl7Y2FzZSAzOntyZXR1cm4geVVkKHRoaXMsYSxiLGMsZCx0aGlzLmk+MSl9Y2FzZSA1OntyZXR1cm4geVVkKHRoaXMsYSxiLGMsZCx0aGlzLmktSkQoYywxNSkuZ2MoKT4wKX1kZWZhdWx0OntyZXR1cm4gbmV3IGlfZCh0aGlzLmUsYSx0aGlzLmMsYixjLGQsdHJ1ZSl9fX07Xy5Raj1mdW5jdGlvbiBFVmQoKXtyZXR1cm4gdHJ1ZX07Xy5Oaj1mdW5jdGlvbiBGVmQoKXtyZXR1cm4geVZkKHRoaXMpfTtfLkRrPWZ1bmN0aW9uIEtWZCgpe1JHZCh0aGlzKX07dmFyIEs2PWplYihUQ2UsJ0VDbGFzc0ltcGwvMScsMTEyNSk7WWNiKDExMzksMTEzOCxGRWUpO18uYWo9ZnVuY3Rpb24gT1ZkKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2M9YS5kaigpO2lmKGMhPTgpe2Q9TlZkKGEpO2lmKGQ9PTApe3N3aXRjaChjKXtjYXNlIDE6Y2FzZSA5OntoPWEuaGooKTtpZihoIT1udWxsKXtiPVRUZChKRChoLDQ2OCkpOyFiLmMmJihiLmM9bmV3IHE1ZCk7Q0NkKGIuYyxhLmdqKCkpfWc9YS5maigpO2lmKGchPW51bGwpe2U9SkQoZyw0NjgpO2lmKChlLkJiJjEpPT0wKXtiPVRUZChlKTshYi5jJiYoYi5jPW5ldyBxNWQpO3RDZChiLmMsSkQoYS5naigpLDI5KSl9fWJyZWFrfWNhc2UgMzp7Zz1hLmZqKCk7aWYoZyE9bnVsbCl7ZT1KRChnLDQ2OCk7aWYoKGUuQmImMSk9PTApe2I9VFRkKGUpOyFiLmMmJihiLmM9bmV3IHE1ZCk7dENkKGIuYyxKRChhLmdqKCksMjkpKX19YnJlYWt9Y2FzZSA1OntnPWEuZmooKTtpZihnIT1udWxsKXtmb3IoZj1KRChnLDE2KS5KYygpO2YuT2IoKTspe2U9SkQoZi5QYigpLDQ2OCk7aWYoKGUuQmImMSk9PTApe2I9VFRkKGUpOyFiLmMmJihiLmM9bmV3IHE1ZCk7dENkKGIuYyxKRChhLmdqKCksMjkpKX19fWJyZWFrfWNhc2UgNDp7aD1hLmhqKCk7aWYoaCE9bnVsbCl7ZT1KRChoLDQ2OCk7aWYoKGUuQmImMSk9PTApe2I9VFRkKGUpOyFiLmMmJihiLmM9bmV3IHE1ZCk7Q0NkKGIuYyxhLmdqKCkpfX1icmVha31jYXNlIDY6e2g9YS5oaigpO2lmKGghPW51bGwpe2ZvcihmPUpEKGgsMTYpLkpjKCk7Zi5PYigpOyl7ZT1KRChmLlBiKCksNDY4KTtpZigoZS5CYiYxKT09MCl7Yj1UVGQoZSk7IWIuYyYmKGIuYz1uZXcgcTVkKTtDQ2QoYi5jLGEuZ2ooKSl9fX1icmVha319fXRoaXMubmwoZCl9fTtfLm5sPWZ1bmN0aW9uIFBWZChhKXtNVmQodGhpcyxhKX07Xy5iPTYzO3ZhciBtOD1qZWIoVENlLCdFU3VwZXJBZGFwdGVyJywxMTM5KTtZY2IoMTE0MCwxMTM5LEZFZSxSVmQpO18ubmw9ZnVuY3Rpb24gU1ZkKGEpe1FWZCh0aGlzLGEpfTt2YXIgRjY9amViKFRDZSwnRUNsYXNzSW1wbC8xMCcsMTE0MCk7WWNiKDExMjksNjk0LHBGZSk7Xy5CaT1mdW5jdGlvbiBUVmQoYSxiKXtyZXR1cm4gZkRkKHRoaXMsYSxiKX07Xy5DaT1mdW5jdGlvbiBVVmQoYSl7cmV0dXJuIGdEZCh0aGlzLGEpfTtfLkRpPWZ1bmN0aW9uIFZWZChhLGIpe2hEZCh0aGlzLGEsYil9O18uRWk9ZnVuY3Rpb24gV1ZkKGEpe2lEZCh0aGlzLGEpfTtfLlhpPWZ1bmN0aW9uIFlWZChhKXtyZXR1cm4ga0RkKHRoaXMsYSl9O18uVWk9ZnVuY3Rpb24gZVdkKGEsYil7cmV0dXJuIHJEZCh0aGlzLGEsYil9O18uVGs9ZnVuY3Rpb24gWFZkKGEsYil7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLkZpPWZ1bmN0aW9uIFpWZCgpe3JldHVybiBuZXcgWEhkKHRoaXMpfTtfLkdpPWZ1bmN0aW9uICRWZCgpe3JldHVybiBuZXcgJEhkKHRoaXMpfTtfLkhpPWZ1bmN0aW9uIF9WZChhKXtyZXR1cm4gd0NkKHRoaXMsYSl9O18uVWs9ZnVuY3Rpb24gYVdkKGEsYil7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLkNrPWZ1bmN0aW9uIGJXZChhKXtyZXR1cm4gdGhpc307Xy5Oaj1mdW5jdGlvbiBjV2QoKXtyZXR1cm4gdGhpcy5pIT0wfTtfLldiPWZ1bmN0aW9uIGRXZChhKXt0aHJvdyBzY2IobmV3IGFoYil9O18uRGs9ZnVuY3Rpb24gZldkKCl7dGhyb3cgc2NiKG5ldyBhaGIpfTt2YXIgcGFiPWplYihfRWUsJ0Vjb3JlRUxpc3QvVW5tb2RpZmlhYmxlRUxpc3QnLDExMjkpO1ljYigzMjgsMTEyOSxwRmUsZ1dkKTtfLlZpPWZ1bmN0aW9uIGhXZCgpe3JldHVybiBmYWxzZX07dmFyIG9hYj1qZWIoX0VlLCdFY29yZUVMaXN0L1VubW9kaWZpYWJsZUVMaXN0L0Zhc3RDb21wYXJlJywzMjgpO1ljYigxMTMyLDMyOCxwRmUsa1dkKTtfLmJkPWZ1bmN0aW9uIGxXZChhKXt2YXIgYixjLGQ7aWYoUkQoYSwxNzgpKXtiPUpEKGEsMTc4KTtjPWIuSWooKTtpZihjIT0tMSl7Zm9yKGQ9dGhpcy5pO2M8ZDsrK2Mpe2lmKFhEKHRoaXMuZ1tjXSk9PT1YRChhKSl7cmV0dXJuIGN9fX19cmV0dXJuIC0xfTt2YXIgRzY9amViKFRDZSwnRUNsYXNzSW1wbC8xRUFsbFN0cnVjdHVyYWxGZWF0dXJlc0xpc3QnLDExMzIpO1ljYigxMTI2LDQ5MCxRRGUscFdkKTtfLlppPWZ1bmN0aW9uIHFXZChhKXtyZXR1cm4gU0MoZzYsdEZlLDg3LGEsMCwxKX07Xy5WaT1mdW5jdGlvbiByV2QoKXtyZXR1cm4gZmFsc2V9O3ZhciBINj1qZWIoVENlLCdFQ2xhc3NJbXBsLzFFR2VuZXJpY1N1cGVyVHlwZUVMaXN0JywxMTI2KTtZY2IoNjE4LDQ5MCxRRGUsc1dkKTtfLlppPWZ1bmN0aW9uIHRXZChhKXtyZXR1cm4gU0MocTYsbUZlLDE3OCxhLDAsMSl9O18uVmk9ZnVuY3Rpb24gdVdkKCl7cmV0dXJuIGZhbHNlfTt2YXIgSTY9amViKFRDZSwnRUNsYXNzSW1wbC8xRVN0cnVjdHVyYWxGZWF0dXJlVW5pcXVlRUxpc3QnLDYxOCk7WWNiKDczOCw0OTAsUURlLHZXZCk7Xy5aaT1mdW5jdGlvbiB3V2QoYSl7cmV0dXJuIFNDKG42LG1GZSwxOSxhLDAsMSl9O18uVmk9ZnVuY3Rpb24geFdkKCl7cmV0dXJuIGZhbHNlfTt2YXIgSjY9amViKFRDZSwnRUNsYXNzSW1wbC8xUmVmZXJlbmNlTGlzdCcsNzM4KTtZY2IoMTEyNyw0OTAsUURlLHpXZCk7Xy5KaT1mdW5jdGlvbiBBV2QoYSxiKXt5V2QodGhpcyxKRChiLDM1KSl9O18uWmk9ZnVuY3Rpb24gQldkKGEpe3JldHVybiBTQygkNSxtRmUsMzUsYSwwLDEpfTtfLlZpPWZ1bmN0aW9uIENXZCgpe3JldHVybiBmYWxzZX07dmFyIEw2PWplYihUQ2UsJ0VDbGFzc0ltcGwvMicsMTEyNyk7WWNiKDExMjgsNDkwLFFEZSxEV2QpO18uWmk9ZnVuY3Rpb24gRVdkKGEpe3JldHVybiBTQygkNSxtRmUsMzUsYSwwLDEpfTtfLlZpPWZ1bmN0aW9uIEZXZCgpe3JldHVybiBmYWxzZX07dmFyIE02PWplYihUQ2UsJ0VDbGFzc0ltcGwvMycsMTEyOCk7WWNiKDExMzAsMzI4LHBGZSxJV2QpO18uRWM9ZnVuY3Rpb24gSldkKGEpe3JldHVybiBHV2QodGhpcyxKRChhLDM1KSl9O18uRWk9ZnVuY3Rpb24gS1dkKGEpe0hXZCh0aGlzLEpEKGEsMzUpKX07dmFyIE42PWplYihUQ2UsJ0VDbGFzc0ltcGwvNCcsMTEzMCk7WWNiKDExMzEsMzI4LHBGZSxOV2QpO18uRWM9ZnVuY3Rpb24gT1dkKGEpe3JldHVybiBMV2QodGhpcyxKRChhLDE5KSl9O18uRWk9ZnVuY3Rpb24gUFdkKGEpe01XZCh0aGlzLEpEKGEsMTkpKX07dmFyIE82PWplYihUQ2UsJ0VDbGFzc0ltcGwvNScsMTEzMSk7WWNiKDExMzMsNDkwLFFEZSxRV2QpO18uWmk9ZnVuY3Rpb24gUldkKGEpe3JldHVybiBTQyhrNixuRmUsNjIsYSwwLDEpfTtfLlZpPWZ1bmN0aW9uIFNXZCgpe3JldHVybiBmYWxzZX07dmFyIFA2PWplYihUQ2UsJ0VDbGFzc0ltcGwvNicsMTEzMyk7WWNiKDExMzQsNDkwLFFEZSxUV2QpO18uWmk9ZnVuY3Rpb24gVVdkKGEpe3JldHVybiBTQyhuNixtRmUsMTksYSwwLDEpfTtfLlZpPWZ1bmN0aW9uIFZXZCgpe3JldHVybiBmYWxzZX07dmFyIFE2PWplYihUQ2UsJ0VDbGFzc0ltcGwvNycsMTEzNCk7WWNiKDIwNDEsMjA0MCx7MzoxLDQ6MSwyMDoxLDMxOjEsNTU6MSwxNjoxLDE1OjEsNzA6MSw2MToxLDcxOjF9KTtfLkJpPWZ1bmN0aW9uIFdXZChhLGIpe3JldHVybiBuRmQodGhpcyxhLGIpfTtfLkNpPWZ1bmN0aW9uIFhXZChhKXtyZXR1cm4gbkZkKHRoaXMsdGhpcy5CaigpLGEpfTtfLkRpPWZ1bmN0aW9uIFlXZChhLGIpe29GZCh0aGlzLGEsYil9O18uRWk9ZnVuY3Rpb24gWldkKGEpe3BGZCh0aGlzLGEpfTtfLlRrPWZ1bmN0aW9uICRXZChhLGIpe3JldHVybiBxRmQodGhpcyxhLGIpfTtfLlVrPWZ1bmN0aW9uIGVYZChhLGIpe3JldHVybiByRmQodGhpcyxhLGIpfTtfLlVpPWZ1bmN0aW9uIGZYZChhLGIpe3JldHVybiB0RmQodGhpcyxhLGIpfTtfLlhpPWZ1bmN0aW9uIF9XZChhKXtyZXR1cm4gdGhpcy51aihhKX07Xy5GaT1mdW5jdGlvbiBhWGQoKXtyZXR1cm4gbmV3IFhIZCh0aGlzKX07Xy5taj1mdW5jdGlvbiBiWGQoKXtyZXR1cm4gdGhpcy5waigpfTtfLkdpPWZ1bmN0aW9uIGNYZCgpe3JldHVybiBuZXcgJEhkKHRoaXMpfTtfLkhpPWZ1bmN0aW9uIGRYZChhKXtyZXR1cm4gd0NkKHRoaXMsYSl9O3ZhciBJOT1qZWIoX0VlLCdEZWxlZ2F0aW5nTm90aWZ5aW5nSW50ZXJuYWxFTGlzdEltcGwnLDIwNDEpO1ljYig3MzksMjA0MSx1RmUpO18uSWk9ZnVuY3Rpb24ga1hkKCl7dmFyIGE7YT1RVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKS5FaygpO3JldHVybiBSRChhLDE1NSkmJiFSRChhLDQ1NSkmJihhLmhrKCkuaSYxKT09MH07Xy5HYz1mdW5jdGlvbiBsWGQoYSl7dmFyIGIsYyxkLGUsZixnLGgsaTtpZih0aGlzLmxsKCkpe2k9dGhpcy5CaigpO2lmKGk+NCl7aWYodGhpcy5jayhhKSl7aWYodGhpcy5aaygpKXtkPUpEKGEsNTIpO2M9ZC5BaCgpO2g9Yz09dGhpcy5iJiYodGhpcy5qbCgpP2QudWgoZC5CaCgpLEpEKFFUZCh5cmQodGhpcy5iKSx0aGlzLklqKCkpLkVrKCksMjkpLmhrKCkpPT1zMWQoSkQoUVRkKHlyZCh0aGlzLmIpLHRoaXMuSWooKSksMTkpKS5uOi0xLWQuQmgoKT09dGhpcy5JaigpKTtpZih0aGlzLmtsKCkmJiFoJiYhYyYmISFkLkZoKCkpe2ZvcihlPTA7ZTxpOysrZSl7Yj1oWGQodGhpcyx0aGlzLnVqKGUpKTtpZihYRChiKT09PVhEKGEpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBofWVsc2UgaWYodGhpcy5qbCgpJiYhdGhpcy5pbCgpKXtmPUpEKGEsNTcpLkloKHMxZChKRChRVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKSwxOSkpKTtpZihYRChmKT09PVhEKHRoaXMuYikpe3JldHVybiB0cnVlfWVsc2UgaWYoZj09bnVsbHx8IUpEKGYsNTcpLlJoKCkpe3JldHVybiBmYWxzZX19fWVsc2V7cmV0dXJuIGZhbHNlfX1nPXRoaXMucmooYSk7aWYodGhpcy5rbCgpJiYhZyl7Zm9yKGU9MDtlPGk7KytlKXtkPWhYZCh0aGlzLHRoaXMudWooZSkpO2lmKFhEKGQpPT09WEQoYSkpe3JldHVybiB0cnVlfX19cmV0dXJuIGd9ZWxzZXtyZXR1cm4gdGhpcy5yaihhKX19O18uRmo9ZnVuY3Rpb24gbVhkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBpX2QodGhpcy5iLGEsdGhpcy5JaigpLGIsYyxkLGUpfTtfLkdqPWZ1bmN0aW9uIG5YZChhKXtXcGQodGhpcy5iLGEpfTtfLkNrPWZ1bmN0aW9uIG9YZChhKXtyZXR1cm4gdGhpc307Xy5Iaj1mdW5jdGlvbiBwWGQoKXtyZXR1cm4gUVRkKHlyZCh0aGlzLmIpLHRoaXMuSWooKSl9O18uSWo9ZnVuY3Rpb24gcVhkKCl7cmV0dXJuIFdUZCh5cmQodGhpcy5iKSxRVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKSl9O18uZ2o9ZnVuY3Rpb24gclhkKCl7cmV0dXJuIHRoaXMuYn07Xy5obD1mdW5jdGlvbiBzWGQoKXtyZXR1cm4gISFRVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKS5FaygpLmhrKCl9O18uSmo9ZnVuY3Rpb24gdFhkKCl7dmFyIGEsYjtiPVFUZCh5cmQodGhpcy5iKSx0aGlzLklqKCkpO2lmKFJEKGIsMTAxKSl7YT1KRChiLDE5KTtyZXR1cm4gKGEuQmImUkNlKSE9MHx8ISFzMWQoSkQoYiwxOSkpfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5pbD1mdW5jdGlvbiB1WGQoKXt2YXIgYSxiLGMsZDtiPVFUZCh5cmQodGhpcy5iKSx0aGlzLklqKCkpO2lmKFJEKGIsMTAxKSl7YT1KRChiLDE5KTtjPXMxZChhKTtyZXR1cm4gISFjJiYoZD1jLnQsZD4xfHxkPT0tMSl9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLmpsPWZ1bmN0aW9uIHZYZCgpe3ZhciBhLGIsYztiPVFUZCh5cmQodGhpcy5iKSx0aGlzLklqKCkpO2lmKFJEKGIsMTAxKSl7YT1KRChiLDE5KTtjPXMxZChhKTtyZXR1cm4gISFjfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5rbD1mdW5jdGlvbiB3WGQoKXt2YXIgYSxiO2I9UVRkKHlyZCh0aGlzLmIpLHRoaXMuSWooKSk7aWYoUkQoYiwxMDEpKXthPUpEKGIsMTkpO3JldHVybiAoYS5CYiZQc2UpIT0wfWVsc2V7cmV0dXJuIGZhbHNlfX07Xy5iZD1mdW5jdGlvbiB4WGQoYSl7dmFyIGIsYyxkLGU7ZD10aGlzLndqKGEpO2lmKGQ+PTApcmV0dXJuIGQ7aWYodGhpcy5sbCgpKXtmb3IoYz0wLGU9dGhpcy5CaigpO2M8ZTsrK2Mpe2I9aFhkKHRoaXMsdGhpcy51aihjKSk7aWYoWEQoYik9PT1YRChhKSl7cmV0dXJuIGN9fX1yZXR1cm4gLTF9O18uS2o9ZnVuY3Rpb24geVhkKGEsYil7dmFyIGM7cmV0dXJuIGM9SkQoYSw1MiksdGhpcy5qbCgpP3RoaXMuaGwoKT9jLk5oKHRoaXMuYixzMWQoSkQoUVRkKHlyZCh0aGlzLmIpLHRoaXMuSWooKSksMTkpKS5uLEpEKFFUZCh5cmQodGhpcy5iKSx0aGlzLklqKCkpLkVrKCksMjkpLmhrKCksYik6Yy5OaCh0aGlzLmIsV1RkKGMuemgoKSxzMWQoSkQoUVRkKHlyZCh0aGlzLmIpLHRoaXMuSWooKSksMTkpKSksbnVsbCxiKTpjLk5oKHRoaXMuYiwtMS10aGlzLklqKCksbnVsbCxiKX07Xy5Maj1mdW5jdGlvbiB6WGQoYSxiKXt2YXIgYztyZXR1cm4gYz1KRChhLDUyKSx0aGlzLmpsKCk/dGhpcy5obCgpP2MuUGgodGhpcy5iLHMxZChKRChRVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKSwxOSkpLm4sSkQoUVRkKHlyZCh0aGlzLmIpLHRoaXMuSWooKSkuRWsoKSwyOSkuaGsoKSxiKTpjLlBoKHRoaXMuYixXVGQoYy56aCgpLHMxZChKRChRVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKSwxOSkpKSxudWxsLGIpOmMuUGgodGhpcy5iLC0xLXRoaXMuSWooKSxudWxsLGIpfTtfLlprPWZ1bmN0aW9uIEFYZCgpe3ZhciBhLGI7Yj1RVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKTtpZihSRChiLDEwMSkpe2E9SkQoYiwxOSk7cmV0dXJuIChhLkJiJlJDZSkhPTB9ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLmxsPWZ1bmN0aW9uIEJYZCgpe3JldHVybiBSRChRVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKS5FaygpLDg4KX07Xy5jaz1mdW5jdGlvbiBDWGQoYSl7cmV0dXJuIFFUZCh5cmQodGhpcy5iKSx0aGlzLklqKCkpLkVrKCkuY2soYSl9O18uTWo9ZnVuY3Rpb24gRFhkKCl7cmV0dXJuIHFxZCh0aGlzLmIpfTtfLk5qPWZ1bmN0aW9uIEVYZCgpe3JldHVybiAhdGhpcy54aigpfTtfLlBpPWZ1bmN0aW9uIEZYZCgpe3JldHVybiBRVGQoeXJkKHRoaXMuYiksdGhpcy5JaigpKS5QaSgpfTtfLlRpPWZ1bmN0aW9uIEdYZChhLGIpe3JldHVybiBnWGQodGhpcyxhLGIpfTtfLldiPWZ1bmN0aW9uIEhYZChhKXtzRmQodGhpcyk7dkNkKHRoaXMsSkQoYSwxNSkpfTtfLk5jPWZ1bmN0aW9uIElYZCgpe3ZhciBhO2lmKHRoaXMua2woKSl7Zm9yKGE9dGhpcy5CaigpLTE7YT49MDstLWEpe2dYZCh0aGlzLGEsdGhpcy51aihhKSl9fXJldHVybiB0aGlzLkNqKCl9O18uT2M9ZnVuY3Rpb24gSlhkKGEpe3ZhciBiO2lmKHRoaXMua2woKSl7Zm9yKGI9dGhpcy5CaigpLTE7Yj49MDstLWIpe2dYZCh0aGlzLGIsdGhpcy51aihiKSl9fXJldHVybiB0aGlzLkRqKGEpfTtfLkRrPWZ1bmN0aW9uIEtYZCgpe3NGZCh0aGlzKX07Xy5XaT1mdW5jdGlvbiBMWGQoYSxiKXtyZXR1cm4gaVhkKHRoaXMsYSxiKX07dmFyIEg5PWplYihfRWUsJ0RlbGVnYXRpbmdFY29yZUVMaXN0Jyw3MzkpO1ljYigxMTM1LDczOSx1RmUsUlhkKTtfLm5qPWZ1bmN0aW9uIFVYZChhLGIpe01YZCh0aGlzLGEsSkQoYiwyOSkpfTtfLm9qPWZ1bmN0aW9uIFZYZChhKXtOWGQodGhpcyxKRChhLDI5KSl9O18udWo9ZnVuY3Rpb24gX1hkKGEpe3ZhciBiLGM7cmV0dXJuIGI9SkQobkRkKE9UZCh0aGlzLmEpLGEpLDg3KSxjPWIuYyxSRChjLDg4KT9KRChjLDI5KTooY1BkKCksVU9kKX07Xy56aj1mdW5jdGlvbiBlWWQoYSl7dmFyIGIsYztyZXR1cm4gYj1KRChVR2QoT1RkKHRoaXMuYSksYSksODcpLGM9Yi5jLFJEKGMsODgpP0pEKGMsMjkpOihjUGQoKSxVT2QpfTtfLkFqPWZ1bmN0aW9uIGZZZChhLGIpe3JldHVybiBQWGQodGhpcyxhLEpEKGIsMjkpKX07Xy5JaT1mdW5jdGlvbiBTWGQoKXtyZXR1cm4gZmFsc2V9O18uRmo9ZnVuY3Rpb24gVFhkKGEsYixjLGQsZSl7cmV0dXJuIG51bGx9O18ucGo9ZnVuY3Rpb24gV1hkKCl7cmV0dXJuIG5ldyB4WWQodGhpcyl9O18ucWo9ZnVuY3Rpb24gWFhkKCl7UkdkKE9UZCh0aGlzLmEpKX07Xy5yaj1mdW5jdGlvbiBZWGQoYSl7cmV0dXJuIE9YZCh0aGlzLGEpfTtfLnNqPWZ1bmN0aW9uIFpYZChhKXt2YXIgYixjO2ZvcihjPWEuSmMoKTtjLk9iKCk7KXtiPWMuUGIoKTtpZighT1hkKHRoaXMsYikpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O18udGo9ZnVuY3Rpb24gJFhkKGEpe3ZhciBiLGMsZDtpZihSRChhLDE1KSl7ZD1KRChhLDE1KTtpZihkLmdjKCk9PU9UZCh0aGlzLmEpLmkpe2ZvcihiPWQuSmMoKSxjPW5ldyBDSGQodGhpcyk7Yi5PYigpOyl7aWYoWEQoYi5QYigpKSE9PVhEKEFIZChjKSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX07Xy52aj1mdW5jdGlvbiBhWWQoKXt2YXIgYSxiLGMsZCxlO2M9MTtmb3IoYj1uZXcgQ0hkKE9UZCh0aGlzLmEpKTtiLmUhPWIuaS5nYygpOyl7YT1KRChBSGQoYiksODcpO2Q9KGU9YS5jLFJEKGUsODgpP0pEKGUsMjkpOihjUGQoKSxVT2QpKTtjPTMxKmMrKCFkPzA6akRiKGQpKX1yZXR1cm4gY307Xy53aj1mdW5jdGlvbiBiWWQoYSl7dmFyIGIsYyxkLGU7ZD0wO2ZvcihjPW5ldyBDSGQoT1RkKHRoaXMuYSkpO2MuZSE9Yy5pLmdjKCk7KXtiPUpEKEFIZChjKSw4Nyk7aWYoWEQoYSk9PT1YRCgoZT1iLmMsUkQoZSw4OCk/SkQoZSwyOSk6KGNQZCgpLFVPZCkpKSl7cmV0dXJuIGR9KytkfXJldHVybiAtMX07Xy54aj1mdW5jdGlvbiBjWWQoKXtyZXR1cm4gT1RkKHRoaXMuYSkuaT09MH07Xy55aj1mdW5jdGlvbiBkWWQoKXtyZXR1cm4gbnVsbH07Xy5Caj1mdW5jdGlvbiBnWWQoKXtyZXR1cm4gT1RkKHRoaXMuYSkuaX07Xy5Daj1mdW5jdGlvbiBoWWQoKXt2YXIgYSxiLGMsZCxlLGY7Zj1PVGQodGhpcy5hKS5pO2U9U0MoYUosTnFlLDEsZiw1LDEpO2M9MDtmb3IoYj1uZXcgQ0hkKE9UZCh0aGlzLmEpKTtiLmUhPWIuaS5nYygpOyl7YT1KRChBSGQoYiksODcpO2VbYysrXT0oZD1hLmMsUkQoZCw4OCk/SkQoZCwyOSk6KGNQZCgpLFVPZCkpfXJldHVybiBlfTtfLkRqPWZ1bmN0aW9uIGlZZChhKXt2YXIgYixjLGQsZSxmLGcsaDtoPU9UZCh0aGlzLmEpLmk7aWYoYS5sZW5ndGg8aCl7ZT1mSWQocmIoYSkuYyxoKTthPWV9YS5sZW5ndGg+aCYmVkMoYSxoLG51bGwpO2Q9MDtmb3IoYz1uZXcgQ0hkKE9UZCh0aGlzLmEpKTtjLmUhPWMuaS5nYygpOyl7Yj1KRChBSGQoYyksODcpO2Y9KGc9Yi5jLFJEKGcsODgpP0pEKGcsMjkpOihjUGQoKSxVT2QpKTtWQyhhLGQrKyxmKX1yZXR1cm4gYX07Xy5Faj1mdW5jdGlvbiBqWWQoKXt2YXIgYSxiLGMsZCxlO2U9bmV3IEhnYjtlLmErPSdbJzthPU9UZCh0aGlzLmEpO2ZvcihiPTAsZD1PVGQodGhpcy5hKS5pO2I8ZDspe0VnYihlLHhnYigoYz1KRChuRGQoYSxiKSw4NykuYyxSRChjLDg4KT9KRChjLDI5KTooY1BkKCksVU9kKSkpKTsrK2I8ZCYmKGUuYSs9THFlLGUpfWUuYSs9J10nO3JldHVybiBlLmF9O18uR2o9ZnVuY3Rpb24ga1lkKGEpe307Xy5Jaj1mdW5jdGlvbiBsWWQoKXtyZXR1cm4gMTB9O18uaGw9ZnVuY3Rpb24gbVlkKCl7cmV0dXJuIHRydWV9O18uSmo9ZnVuY3Rpb24gbllkKCl7cmV0dXJuIGZhbHNlfTtfLmlsPWZ1bmN0aW9uIG9ZZCgpe3JldHVybiBmYWxzZX07Xy5qbD1mdW5jdGlvbiBwWWQoKXtyZXR1cm4gZmFsc2V9O18ua2w9ZnVuY3Rpb24gcVlkKCl7cmV0dXJuIHRydWV9O18uWms9ZnVuY3Rpb24gcllkKCl7cmV0dXJuIGZhbHNlfTtfLmxsPWZ1bmN0aW9uIHNZZCgpe3JldHVybiB0cnVlfTtfLmNrPWZ1bmN0aW9uIHRZZChhKXtyZXR1cm4gUkQoYSw4OCl9O18uTmo9ZnVuY3Rpb24gdVlkKCl7cmV0dXJuIFhUZCh0aGlzLmEpfTtfLlBpPWZ1bmN0aW9uIHZZZCgpe3JldHVybiB0cnVlfTtfLlZpPWZ1bmN0aW9uIHdZZCgpe3JldHVybiB0cnVlfTt2YXIgUzY9amViKFRDZSwnRUNsYXNzSW1wbC84JywxMTM1KTtZY2IoMTEzNiwyMDA4LEZyZSx4WWQpO18uZGQ9ZnVuY3Rpb24geVlkKGEpe3JldHVybiB3Q2QodGhpcy5hLGEpfTtfLmdjPWZ1bmN0aW9uIHpZZCgpe3JldHVybiBPVGQodGhpcy5hLmEpLml9O3ZhciBSNj1qZWIoVENlLCdFQ2xhc3NJbXBsLzgvMScsMTEzNik7WWNiKDExMzcsNDkwLFFEZSxBWWQpO18uWmk9ZnVuY3Rpb24gQllkKGEpe3JldHVybiBTQyhhNixOcWUsMTQxLGEsMCwxKX07Xy5WaT1mdW5jdGlvbiBDWWQoKXtyZXR1cm4gZmFsc2V9O3ZhciBUNj1qZWIoVENlLCdFQ2xhc3NJbXBsLzknLDExMzcpO1ljYigxMTI0LDUwLGN0ZSxEWWQpO3ZhciBVNj1qZWIoVENlLCdFQ2xhc3NJbXBsL015SGFzaFNldCcsMTEyNCk7WWNiKDU1OSwzNTcsezEwOToxLDkzOjEsOTI6MSwxNDE6MSwxNTU6MSw4MjY6MSwxNTQ6MSwxOTc6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSwzNTc6MSwxNTc6MSwxMTc6MSwxMTg6MSw2NzY6MX0sRllkKTtfLkhoPWZ1bmN0aW9uIEdZZChhLGIsYyl7dmFyIGQ7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHRoaXMuRCE9bnVsbD90aGlzLkQ6dGhpcy5CO2Nhc2UgMzpyZXR1cm4gWVNkKHRoaXMpO2Nhc2UgNDpyZXR1cm4gdGhpcy5maygpO2Nhc2UgNTpyZXR1cm4gdGhpcy5GO2Nhc2UgNjppZihiKXJldHVybiBXU2QodGhpcyk7cmV0dXJuIFNTZCh0aGlzKTtjYXNlIDc6cmV0dXJuICF0aGlzLkEmJih0aGlzLkE9bmV3IERkZShyNix0aGlzLDcpKSx0aGlzLkE7Y2FzZSA4OnJldHVybiB4ZGIoKSwodGhpcy5CYiYyNTYpIT0wP3RydWU6ZmFsc2U7fXJldHVybiBkcWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP3RoaXMuZWkoKTpkKSxhKSxiLGMpfTtfLlNoPWZ1bmN0aW9uIEhZZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLkQhPW51bGwmJnRoaXMuRD09dGhpcy5GO2Nhc2UgMzpyZXR1cm4gISFZU2QodGhpcyk7Y2FzZSA0OnJldHVybiB0aGlzLmZrKCkhPW51bGw7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuICEhU1NkKHRoaXMpO2Nhc2UgNzpyZXR1cm4gISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4gKHRoaXMuQmImMjU2KT09MDt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKHRoaXMuZWkoKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/dGhpcy5laSgpOmIpLGEpKX07Xy5aaD1mdW5jdGlvbiBJWWQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7dkNkKHRoaXMuQWIsSkQoYiwxNikpO3JldHVybjtjYXNlIDE6ZVRkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDI6YlRkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDU6ZFRkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDc6IXRoaXMuQSYmKHRoaXMuQT1uZXcgRGRlKHI2LHRoaXMsNykpO1JHZCh0aGlzLkEpOyF0aGlzLkEmJih0aGlzLkE9bmV3IERkZShyNix0aGlzLDcpKTt2Q2QodGhpcy5BLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSA4OkVZZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz90aGlzLmVpKCk6YyksYSksYil9O18uZWk9ZnVuY3Rpb24gSllkKCl7cmV0dXJuIGNQZCgpLE1PZH07Xy5naT1mdW5jdGlvbiBLWWQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOlJEKHRoaXMuQ2IsMTg0KSYmKEpEKHRoaXMuQ2IsMTg0KS50Yj1udWxsKTtydmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlRTZCh0aGlzLG51bGwpO1VTZCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpkVGQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IERkZShyNix0aGlzLDcpKTtSR2QodGhpcy5BKTtyZXR1cm47Y2FzZSA4OkVZZCh0aGlzLHRydWUpO3JldHVybjt9Z3FkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj90aGlzLmVpKCk6YiksYSkpfTtfLmxpPWZ1bmN0aW9uIExZZCgpe2hhZSgoR2ZlKCksRWZlKSx0aGlzKS52ZSgpO3RoaXMuQmJ8PTF9O18ubGs9ZnVuY3Rpb24gTVlkKCl7dmFyIGEsYixjO2lmKCF0aGlzLmMpe2E9ZGZlKFdTZCh0aGlzKSk7aWYoIWEuZGMoKSl7Zm9yKGM9YS5KYygpO2MuT2IoKTspe2I9T0QoYy5QYigpKTshIUZ1ZCh0aGlzLGIpJiZjZmUodGhpcyl9fX1yZXR1cm4gdGhpcy5ifTtfLmZrPWZ1bmN0aW9uIE5ZZCgpe3ZhciBiO2lmKCF0aGlzLmUpe2I9bnVsbDt0cnl7Yj1ZU2QodGhpcyl9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoIVJEKGEsMTAzKSl0aHJvdyBzY2IoYSl9dGhpcy5kPW51bGw7ISFiJiYoYi5pJjEpIT0wJiYoYj09cGNiPyh0aGlzLmQ9KHhkYigpLHZkYikpOmI9PWNFPyh0aGlzLmQ9amZiKDApKTpiPT1iRT8odGhpcy5kPW5ldyBLZWIoMCkpOmI9PWFFPyh0aGlzLmQ9MCk6Yj09ZEU/KHRoaXMuZD15ZmIoMCkpOmI9PW9jYj8odGhpcy5kPVVmYigwKSk6Yj09JEQ/KHRoaXMuZD1SZGIoMCkpOih0aGlzLmQ9JGRiKDApKSk7dGhpcy5lPXRydWV9cmV0dXJuIHRoaXMuZH07Xy5raz1mdW5jdGlvbiBPWWQoKXtyZXR1cm4gKHRoaXMuQmImMjU2KSE9MH07Xy5vbD1mdW5jdGlvbiBQWWQoYSl7YSYmKHRoaXMuRD0nb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkFic3RyYWN0RW51bWVyYXRvcicpfTtfLmRsPWZ1bmN0aW9uIFFZZChhKXtfU2QodGhpcyxhKTt0aGlzLm9sKGEpfTtfLmVsPWZ1bmN0aW9uIFJZZChhKXt0aGlzLkM9YTt0aGlzLmU9ZmFsc2V9O18uSWI9ZnVuY3Rpb24gU1lkKCl7dmFyIGE7aWYoKHRoaXMuRGImNjQpIT0wKXJldHVybiBmVGQodGhpcyk7YT1uZXcgSmdiKGZUZCh0aGlzKSk7YS5hKz0nIChzZXJpYWxpemFibGU6ICc7RmdiKGEsKHRoaXMuQmImMjU2KSE9MCk7YS5hKz0nKSc7cmV0dXJuIGEuYX07Xy5jPWZhbHNlO18uZD1udWxsO18uZT1mYWxzZTt2YXIgWDY9amViKFRDZSwnRURhdGFUeXBlSW1wbCcsNTU5KTtZY2IoNDU1LDU1OSx7MTA5OjEsOTM6MSw5MjoxLDE0MToxLDE1NToxLDgyNjoxLDY3MDoxLDE1NDoxLDE5NzoxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDM1NzoxLDQ1NToxLDE1NzoxLDExNzoxLDExODoxLDY3NjoxfSxWWWQpO18uSGg9ZnVuY3Rpb24gV1lkKGEsYixjKXt2YXIgZDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLHRoaXMuQWI7Y2FzZSAxOnJldHVybiB0aGlzLnpiO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsP3RoaXMuRDp0aGlzLkI7Y2FzZSAzOnJldHVybiBZU2QodGhpcyk7Y2FzZSA0OnJldHVybiBUWWQodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkY7Y2FzZSA2OmlmKGIpcmV0dXJuIFdTZCh0aGlzKTtyZXR1cm4gU1NkKHRoaXMpO2Nhc2UgNzpyZXR1cm4gIXRoaXMuQSYmKHRoaXMuQT1uZXcgRGRlKHI2LHRoaXMsNykpLHRoaXMuQTtjYXNlIDg6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDk6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IFgwZChkNix0aGlzLDksNSkpLHRoaXMuYTt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChjUGQoKSxOT2QpKSxRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD9OT2Q6ZCksYSksYixjKX07Xy5PaD1mdW5jdGlvbiBYWWQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyk7Y2FzZSA2OiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9WU2QodGhpcyxjKTp0aGlzLkNiLlBoKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIGJxZCh0aGlzLGEsNixjKTtjYXNlIDk6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IFgwZChkNix0aGlzLDksNSkpLFBHZCh0aGlzLmEsYSxjKTt9cmV0dXJuIGY9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLE5PZCk6ZCksYiksNjkpLGYudGsoKS53ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksTk9kKSksYSxjKX07Xy5RaD1mdW5jdGlvbiBZWWQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSxRR2QodGhpcy5BYixhLGMpO2Nhc2UgNjpyZXR1cm4gYnFkKHRoaXMsbnVsbCw2LGMpO2Nhc2UgNzpyZXR1cm4gIXRoaXMuQSYmKHRoaXMuQT1uZXcgRGRlKHI2LHRoaXMsNykpLFFHZCh0aGlzLkEsYSxjKTtjYXNlIDk6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IFgwZChkNix0aGlzLDksNSkpLFFHZCh0aGlzLmEsYSxjKTt9cmV0dXJuIGU9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLE5PZCk6ZCksYiksNjkpLGUudGsoKS54ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksTk9kKSksYSxjKX07Xy5TaD1mdW5jdGlvbiBaWWQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLkFiJiZ0aGlzLkFiLmkhPTA7Y2FzZSAxOnJldHVybiB0aGlzLnpiIT1udWxsO2Nhc2UgMjpyZXR1cm4gdGhpcy5EIT1udWxsJiZ0aGlzLkQ9PXRoaXMuRjtjYXNlIDM6cmV0dXJuICEhWVNkKHRoaXMpO2Nhc2UgNDpyZXR1cm4gISFUWWQodGhpcyk7Y2FzZSA1OnJldHVybiB0aGlzLkYhPW51bGwmJnRoaXMuRiE9dGhpcy5EJiZ0aGlzLkYhPXRoaXMuQjtjYXNlIDY6cmV0dXJuICEhU1NkKHRoaXMpO2Nhc2UgNzpyZXR1cm4gISF0aGlzLkEmJnRoaXMuQS5pIT0wO2Nhc2UgODpyZXR1cm4gKHRoaXMuQmImMjU2KT09MDtjYXNlIDk6cmV0dXJuICEhdGhpcy5hJiZ0aGlzLmEuaSE9MDt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChjUGQoKSxOT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9OT2Q6YiksYSkpfTtfLlpoPWZ1bmN0aW9uICRZZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTt2Q2QodGhpcy5BYixKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTplVGQodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgMjpiVGQodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgNTpkVGQodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgNzohdGhpcy5BJiYodGhpcy5BPW5ldyBEZGUocjYsdGhpcyw3KSk7UkdkKHRoaXMuQSk7IXRoaXMuQSYmKHRoaXMuQT1uZXcgRGRlKHI2LHRoaXMsNykpO3ZDZCh0aGlzLkEsSkQoYiwxNikpO3JldHVybjtjYXNlIDg6RVlkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgOTohdGhpcy5hJiYodGhpcy5hPW5ldyBYMGQoZDYsdGhpcyw5LDUpKTtSR2QodGhpcy5hKTshdGhpcy5hJiYodGhpcy5hPW5ldyBYMGQoZDYsdGhpcyw5LDUpKTt2Q2QodGhpcy5hLEpEKGIsMTYpKTtyZXR1cm47fWZxZCh0aGlzLGEtVlRkKChjUGQoKSxOT2QpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz9OT2Q6YyksYSksYil9O18uZWk9ZnVuY3Rpb24gX1lkKCl7cmV0dXJuIGNQZCgpLE5PZH07Xy5naT1mdW5jdGlvbiBhWmQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOlJEKHRoaXMuQ2IsMTg0KSYmKEpEKHRoaXMuQ2IsMTg0KS50Yj1udWxsKTtydmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOlRTZCh0aGlzLG51bGwpO1VTZCh0aGlzLHRoaXMuRCk7cmV0dXJuO2Nhc2UgNTpkVGQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSA3OiF0aGlzLkEmJih0aGlzLkE9bmV3IERkZShyNix0aGlzLDcpKTtSR2QodGhpcy5BKTtyZXR1cm47Y2FzZSA4OkVZZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDk6IXRoaXMuYSYmKHRoaXMuYT1uZXcgWDBkKGQ2LHRoaXMsOSw1KSk7UkdkKHRoaXMuYSk7cmV0dXJuO31ncWQodGhpcyxhLVZUZCgoY1BkKCksTk9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/Tk9kOmIpLGEpKX07Xy5saT1mdW5jdGlvbiBiWmQoKXt2YXIgYSxiO2lmKHRoaXMuYSl7Zm9yKGE9MCxiPXRoaXMuYS5pO2E8YjsrK2Epe0V1ZChuRGQodGhpcy5hLGEpKX19aGFlKChHZmUoKSxFZmUpLHRoaXMpLnZlKCk7dGhpcy5CYnw9MX07Xy5maz1mdW5jdGlvbiBjWmQoKXtyZXR1cm4gVFlkKHRoaXMpfTtfLmNrPWZ1bmN0aW9uIGRaZChhKXtpZihhIT1udWxsKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9O18ub2w9ZnVuY3Rpb24gZVpkKGEpe307dmFyIFk2PWplYihUQ2UsJ0VFbnVtSW1wbCcsNDU1KTtZY2IoNTY0LDQzNix7MTA5OjEsOTM6MSw5MjoxLDE5ODU6MSw2Nzk6MSwxNTQ6MSwxOTc6MSw1NzoxLDExMzoxLDUyOjEsOTg6MSw1NjQ6MSwxNTc6MSwxMTc6MSwxMTg6MX0sa1pkKTtfLnZlPWZ1bmN0aW9uIHRaZCgpe3JldHVybiB0aGlzLnpifTtfLndoPWZ1bmN0aW9uIGxaZChhKXtyZXR1cm4gZlpkKHRoaXMsYSl9O18uSGg9ZnVuY3Rpb24gbVpkKGEsYixjKXt2YXIgZCxlO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiBqZmIodGhpcy5kKTtjYXNlIDM6cmV0dXJuIHRoaXMuYj90aGlzLmI6dGhpcy5hO2Nhc2UgNDpyZXR1cm4gZT10aGlzLmMsZT09bnVsbD90aGlzLnpiOmU7Y2FzZSA1OnJldHVybiB0aGlzLkRiPj4xNj09NT9KRCh0aGlzLkNiLDY3MCk6bnVsbDt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChjUGQoKSxPT2QpKSxRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD9PT2Q6ZCksYSksYixjKX07Xy5PaD1mdW5jdGlvbiBuWmQoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyk7Y2FzZSA1OiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9mWmQodGhpcyxjKTp0aGlzLkNiLlBoKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIGJxZCh0aGlzLGEsNSxjKTt9cmV0dXJuIGY9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLE9PZCk6ZCksYiksNjkpLGYudGsoKS53ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksT09kKSksYSxjKX07Xy5RaD1mdW5jdGlvbiBvWmQoYSxiLGMpe3ZhciBkLGU7c3dpdGNoKGIpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSxRR2QodGhpcy5BYixhLGMpO2Nhc2UgNTpyZXR1cm4gYnFkKHRoaXMsbnVsbCw1LGMpO31yZXR1cm4gZT1KRChRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD8oY1BkKCksT09kKTpkKSxiKSw2OSksZS50aygpLnhrKHRoaXMsQXJkKHRoaXMpLGItVlRkKChjUGQoKSxPT2QpKSxhLGMpfTtfLlNoPWZ1bmN0aW9uIHBaZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiB0aGlzLmQhPTA7Y2FzZSAzOnJldHVybiAhIXRoaXMuYjtjYXNlIDQ6cmV0dXJuIHRoaXMuYyE9bnVsbDtjYXNlIDU6cmV0dXJuICEhKHRoaXMuRGI+PjE2PT01P0pEKHRoaXMuQ2IsNjcwKTpudWxsKTt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChjUGQoKSxPT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9PT2Q6YiksYSkpfTtfLlpoPWZ1bmN0aW9uIHFaZChhLGIpe3ZhciBjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTt2Q2QodGhpcy5BYixKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTpydmQodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgMjpqWmQodGhpcyxKRChiLDE3KS5hKTtyZXR1cm47Y2FzZSAzOmhaZCh0aGlzLEpEKGIsMTk4NSkpO3JldHVybjtjYXNlIDQ6aVpkKHRoaXMsT0QoYikpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQoKGNQZCgpLE9PZCkpLFFUZCgoYz1KRChDcmQodGhpcywxNiksMjkpLCFjP09PZDpjKSxhKSxiKX07Xy5laT1mdW5jdGlvbiByWmQoKXtyZXR1cm4gY1BkKCksT09kfTtfLmdpPWZ1bmN0aW9uIHNaZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpO3JldHVybjtjYXNlIDE6cnZkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjpqWmQodGhpcywwKTtyZXR1cm47Y2FzZSAzOmhaZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6aVpkKHRoaXMsbnVsbCk7cmV0dXJuO31ncWQodGhpcyxhLVZUZCgoY1BkKCksT09kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/T09kOmIpLGEpKX07Xy5JYj1mdW5jdGlvbiB1WmQoKXt2YXIgYTtyZXR1cm4gYT10aGlzLmMsYT09bnVsbD90aGlzLnpiOmF9O18uYj1udWxsO18uYz1udWxsO18uZD0wO3ZhciBaNj1qZWIoVENlLCdFRW51bUxpdGVyYWxJbXBsJyw1NjQpO3ZhciBfNj1sZWIoVENlLCdFRmFjdG9yeUltcGwvSW50ZXJuYWxFRGF0ZVRpbWVGb3JtYXQnKTtZY2IoNDgzLDEsezIwNjA6MX0seFpkKTt2YXIgJDY9amViKFRDZSwnRUZhY3RvcnlJbXBsLzFDbGllbnRJbnRlcm5hbEVEYXRlVGltZUZvcm1hdCcsNDgzKTtZY2IoMjQ2LDExOCx7MTA5OjEsOTM6MSw5MjoxLDg3OjEsNTc6MSwxMTM6MSw1MjoxLDk4OjEsMjQ2OjEsMTE3OjEsMTE4OjF9LE5aZCk7Xy55aD1mdW5jdGlvbiBPWmQoYSxiLGMpe3ZhciBkO2M9YnFkKHRoaXMsYSxiLGMpO2lmKCEhdGhpcy5lJiZSRChhLDE3OCkpe2Q9RlpkKHRoaXMsdGhpcy5lKTtkIT10aGlzLmMmJihjPUpaZCh0aGlzLGQsYykpfXJldHVybiBjfTtfLkhoPWZ1bmN0aW9uIFBaZChhLGIsYyl7dmFyIGQ7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy5mO2Nhc2UgMTpyZXR1cm4gIXRoaXMuZCYmKHRoaXMuZD1uZXcgcVZkKGc2LHRoaXMsMSkpLHRoaXMuZDtjYXNlIDI6aWYoYilyZXR1cm4gRFpkKHRoaXMpO3JldHVybiB0aGlzLmM7Y2FzZSAzOnJldHVybiB0aGlzLmI7Y2FzZSA0OnJldHVybiB0aGlzLmU7Y2FzZSA1OmlmKGIpcmV0dXJuIENaZCh0aGlzKTtyZXR1cm4gdGhpcy5hO31yZXR1cm4gZHFkKHRoaXMsYS1WVGQoKGNQZCgpLFFPZCkpLFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP1FPZDpkKSxhKSxiLGMpfTtfLlFoPWZ1bmN0aW9uIFFaZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiBCWmQodGhpcyxudWxsLGMpO2Nhc2UgMTpyZXR1cm4gIXRoaXMuZCYmKHRoaXMuZD1uZXcgcVZkKGc2LHRoaXMsMSkpLFFHZCh0aGlzLmQsYSxjKTtjYXNlIDM6cmV0dXJuIHpaZCh0aGlzLG51bGwsYyk7fXJldHVybiBlPUpEKFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkPyhjUGQoKSxRT2QpOmQpLGIpLDY5KSxlLnRrKCkueGsodGhpcyxBcmQodGhpcyksYi1WVGQoKGNQZCgpLFFPZCkpLGEsYyl9O18uU2g9ZnVuY3Rpb24gUlpkKGEpe3ZhciBiO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5mO2Nhc2UgMTpyZXR1cm4gISF0aGlzLmQmJnRoaXMuZC5pIT0wO2Nhc2UgMjpyZXR1cm4gISF0aGlzLmM7Y2FzZSAzOnJldHVybiAhIXRoaXMuYjtjYXNlIDQ6cmV0dXJuICEhdGhpcy5lO2Nhc2UgNTpyZXR1cm4gISF0aGlzLmE7fXJldHVybiBlcWQodGhpcyxhLVZUZCgoY1BkKCksUU9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/UU9kOmIpLGEpKX07Xy5aaD1mdW5jdGlvbiBTWmQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOkxaZCh0aGlzLEpEKGIsODcpKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmQmJih0aGlzLmQ9bmV3IHFWZChnNix0aGlzLDEpKTtSR2QodGhpcy5kKTshdGhpcy5kJiYodGhpcy5kPW5ldyBxVmQoZzYsdGhpcywxKSk7dkNkKHRoaXMuZCxKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMzpJWmQodGhpcyxKRChiLDg3KSk7cmV0dXJuO2Nhc2UgNDpLWmQodGhpcyxKRChiLDgyOSkpO3JldHVybjtjYXNlIDU6R1pkKHRoaXMsSkQoYiwxNDEpKTtyZXR1cm47fWZxZCh0aGlzLGEtVlRkKChjUGQoKSxRT2QpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz9RT2Q6YyksYSksYil9O18uZWk9ZnVuY3Rpb24gVFpkKCl7cmV0dXJuIGNQZCgpLFFPZH07Xy5naT1mdW5jdGlvbiBVWmQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDpMWmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmQmJih0aGlzLmQ9bmV3IHFWZChnNix0aGlzLDEpKTtSR2QodGhpcy5kKTtyZXR1cm47Y2FzZSAzOklaZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDQ6S1pkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgNTpHWmQodGhpcyxudWxsKTtyZXR1cm47fWdxZCh0aGlzLGEtVlRkKChjUGQoKSxRT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9RT2Q6YiksYSkpfTtfLkliPWZ1bmN0aW9uIFZaZCgpe3ZhciBhO2E9bmV3IFdnYihHcWQodGhpcykpO2EuYSs9JyAoZXhwcmVzc2lvbjogJztNWmQodGhpcyxhKTthLmErPScpJztyZXR1cm4gYS5hfTt2YXIgeVpkO3ZhciBiNz1qZWIoVENlLCdFR2VuZXJpY1R5cGVJbXBsJywyNDYpO1ljYigyMDEzLDIwMDgsdkZlKTtfLkRpPWZ1bmN0aW9uIFhaZChhLGIpe1daZCh0aGlzLGEsYil9O18uVGs9ZnVuY3Rpb24gWVpkKGEsYil7V1pkKHRoaXMsdGhpcy5nYygpLGEpO3JldHVybiBifTtfLlhpPWZ1bmN0aW9uIFpaZChhKXtyZXR1cm4gZnUodGhpcy5taigpLGEpfTtfLkZpPWZ1bmN0aW9uICRaZCgpe3JldHVybiB0aGlzLkdpKCl9O18ubWo9ZnVuY3Rpb24gX1pkKCl7cmV0dXJuIG5ldyBIOWQodGhpcyl9O18uR2k9ZnVuY3Rpb24gYSRkKCl7cmV0dXJuIHRoaXMuSGkoMCl9O18uSGk9ZnVuY3Rpb24gYiRkKGEpe3JldHVybiB0aGlzLm1qKCkuZGQoYSl9O18uVWs9ZnVuY3Rpb24gYyRkKGEsYil7eWUodGhpcyxhLHRydWUpO3JldHVybiBifTtfLlFpPWZ1bmN0aW9uIGQkZChhLGIpe3ZhciBjLGQ7ZD1ndSh0aGlzLGIpO2M9dGhpcy5kZChhKTtjLlJiKGQpO3JldHVybiBkfTtfLlJpPWZ1bmN0aW9uIGUkZChhLGIpe3ZhciBjO3llKHRoaXMsYix0cnVlKTtjPXRoaXMuZGQoYSk7Yy5SYihiKX07dmFyIHk5PWplYihfRWUsJ0Fic3RyYWN0U2VxdWVudGlhbEludGVybmFsRUxpc3QnLDIwMTMpO1ljYig0ODAsMjAxMyx2RmUsaiRkKTtfLlhpPWZ1bmN0aW9uIGskZChhKXtyZXR1cm4gZnUodGhpcy5taigpLGEpfTtfLkZpPWZ1bmN0aW9uIGwkZCgpe2lmKHRoaXMuYj09bnVsbCl7cmV0dXJuIEUkZCgpLEUkZCgpLEQkZH1yZXR1cm4gdGhpcy5wbCgpfTtfLm1qPWZ1bmN0aW9uIG0kZCgpe3JldHVybiBuZXcgcGRlKHRoaXMuYSx0aGlzLmIpfTtfLkdpPWZ1bmN0aW9uIG4kZCgpe2lmKHRoaXMuYj09bnVsbCl7cmV0dXJuIEUkZCgpLEUkZCgpLEQkZH1yZXR1cm4gdGhpcy5wbCgpfTtfLkhpPWZ1bmN0aW9uIG8kZChhKXt2YXIgYixjO2lmKHRoaXMuYj09bnVsbCl7aWYoYTwwfHxhPjEpe3Rocm93IHNjYihuZXcgbWRiKElFZSthKycsIHNpemU9MCcpKX1yZXR1cm4gRSRkKCksRSRkKCksRCRkfWM9dGhpcy5wbCgpO2ZvcihiPTA7YjxhOysrYil7RiRkKGMpfXJldHVybiBjfTtfLmRjPWZ1bmN0aW9uIHAkZCgpe3ZhciBhLGIsYyxkLGUsZjtpZih0aGlzLmIhPW51bGwpe2ZvcihjPTA7Yzx0aGlzLmIubGVuZ3RoOysrYyl7YT10aGlzLmJbY107aWYoIXRoaXMuc2woKXx8dGhpcy5hLlRoKGEpKXtmPXRoaXMuYS5KaChhLGZhbHNlKTtJZmUoKTtpZihKRChhLDY5KS51aygpKXtiPUpEKGYsMTU5KTtmb3IoZD0wLGU9Yi5nYygpO2Q8ZTsrK2Qpe2lmKGgkZChiLlFsKGQpKSYmYi5SbChkKSE9bnVsbCl7cmV0dXJuIGZhbHNlfX19ZWxzZSBpZihhLkdrKCkpe2lmKCFKRChmLDE2KS5kYygpKXtyZXR1cm4gZmFsc2V9fWVsc2UgaWYoZiE9bnVsbCl7cmV0dXJuIGZhbHNlfX19fXJldHVybiB0cnVlfTtfLkpjPWZ1bmN0aW9uIHEkZCgpe3JldHVybiBpJGQodGhpcyl9O18uZGQ9ZnVuY3Rpb24gciRkKGEpe3ZhciBiLGM7aWYodGhpcy5iPT1udWxsKXtpZihhIT0wKXt0aHJvdyBzY2IobmV3IG1kYihJRWUrYSsnLCBzaXplPTAnKSl9cmV0dXJuIEUkZCgpLEUkZCgpLEQkZH1jPXRoaXMucmwoKT90aGlzLnFsKCk6dGhpcy5wbCgpO2ZvcihiPTA7YjxhOysrYil7RiRkKGMpfXJldHVybiBjfTtfLlFpPWZ1bmN0aW9uIHMkZChhLGIpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5SaT1mdW5jdGlvbiB0JGQoYSxiKXt0aHJvdyBzY2IobmV3IGFoYil9O18ucGw9ZnVuY3Rpb24gdSRkKCl7cmV0dXJuIG5ldyBLJGQodGhpcy5hLHRoaXMuYil9O18ucWw9ZnVuY3Rpb24gdiRkKCl7cmV0dXJuIG5ldyBZJGQodGhpcy5hLHRoaXMuYil9O18ucmw9ZnVuY3Rpb24gdyRkKCl7cmV0dXJuIHRydWV9O18uZ2M9ZnVuY3Rpb24geCRkKCl7dmFyIGEsYixjLGQsZSxmLGc7ZT0wO2lmKHRoaXMuYiE9bnVsbCl7Zm9yKGM9MDtjPHRoaXMuYi5sZW5ndGg7KytjKXthPXRoaXMuYltjXTtpZighdGhpcy5zbCgpfHx0aGlzLmEuVGgoYSkpe2c9dGhpcy5hLkpoKGEsZmFsc2UpO0lmZSgpO2lmKEpEKGEsNjkpLnVrKCkpe2I9SkQoZywxNTkpO2ZvcihkPTAsZj1iLmdjKCk7ZDxmOysrZCl7aCRkKGIuUWwoZCkpJiZiLlJsKGQpIT1udWxsJiYrK2V9fWVsc2UgYS5HaygpPyhlKz1KRChnLDE2KS5nYygpKTpnIT1udWxsJiYrK2V9fX1yZXR1cm4gZX07Xy5zbD1mdW5jdGlvbiB5JGQoKXtyZXR1cm4gdHJ1ZX07dmFyIGYkZDt2YXIgTzk9amViKF9FZSwnRUNvbnRlbnRzRUxpc3QnLDQ4MCk7WWNiKDExNDEsNDgwLHZGZSx6JGQpO18ucGw9ZnVuY3Rpb24gQSRkKCl7cmV0dXJuIG5ldyBhX2QodGhpcy5hLHRoaXMuYil9O18ucWw9ZnVuY3Rpb24gQiRkKCl7cmV0dXJuIG5ldyAkJGQodGhpcy5hLHRoaXMuYil9O18uc2w9ZnVuY3Rpb24gQyRkKCl7cmV0dXJuIGZhbHNlfTt2YXIgZjc9amViKFRDZSwnRU5hbWVkRWxlbWVudEltcGwvMScsMTE0MSk7WWNiKDI4NCwxLHdGZSxLJGQpO18uTmI9ZnVuY3Rpb24gTiRkKGEpe09zYih0aGlzLGEpfTtfLlJiPWZ1bmN0aW9uIEwkZChhKXt0aHJvdyBzY2IobmV3IGFoYil9O18udGw9ZnVuY3Rpb24gTSRkKGEpe2lmKHRoaXMuZyE9MHx8ISF0aGlzLmUpe3Rocm93IHNjYihuZXcgV2ViKCdJdGVyYXRvciBhbHJlYWR5IGluIHVzZSBvciBhbHJlYWR5IGZpbHRlcmVkJykpfXRoaXMuZT1hfTtfLk9iPWZ1bmN0aW9uIE8kZCgpe3ZhciBhLGIsYyxkLGUsZjtzd2l0Y2godGhpcy5nKXtjYXNlIDM6Y2FzZSAyOntyZXR1cm4gdHJ1ZX1jYXNlIDE6e3JldHVybiBmYWxzZX1jYXNlIC0zOnshdGhpcy5wPysrdGhpcy5uOnRoaXMucC5QYigpfWRlZmF1bHQ6e2lmKCF0aGlzLmt8fCghdGhpcy5wPyFHJGQodGhpcyk6IUgkZCh0aGlzLHRoaXMucCkpKXt3aGlsZSh0aGlzLmQ8dGhpcy5jLmxlbmd0aCl7Yj10aGlzLmNbdGhpcy5kKytdO2lmKCghdGhpcy5lfHxiLm1rKCkhPXQzfHxiLklqKCkhPTApJiYoIXRoaXMuc2woKXx8dGhpcy5iLlRoKGIpKSl7Zj10aGlzLmIuSmgoYix0aGlzLnJsKCkpO3RoaXMuZj0oSWZlKCksSkQoYiw2OSkudWsoKSk7aWYodGhpcy5mfHxiLkdrKCkpe2lmKHRoaXMucmwoKSl7ZD1KRChmLDE1KTt0aGlzLms9ZH1lbHNle2Q9SkQoZiw3MSk7dGhpcy5rPXRoaXMuaj1kfWlmKFJEKHRoaXMuayw1OSkpe3RoaXMucD1udWxsO3RoaXMubz10aGlzLmsuZ2MoKTt0aGlzLm49MH1lbHNle3RoaXMucD0hdGhpcy5qP3RoaXMuay5jZCgpOnRoaXMuai5HaSgpfWlmKCF0aGlzLnA/RyRkKHRoaXMpOkgkZCh0aGlzLHRoaXMucCkpe2U9IXRoaXMucD8hdGhpcy5qP3RoaXMuay5YYih0aGlzLm4rKyk6dGhpcy5qLlhpKHRoaXMubisrKTp0aGlzLnAuUGIoKTtpZih0aGlzLmYpe2E9SkQoZSw3NCk7YS5JaygpO2M9YS5rZCgpO3RoaXMuaT1jfWVsc2V7Yz1lO3RoaXMuaT1jfXRoaXMuZz0zO3JldHVybiB0cnVlfX1lbHNlIGlmKGYhPW51bGwpe3RoaXMuaz1udWxsO3RoaXMucD1udWxsO2M9Zjt0aGlzLmk9Yzt0aGlzLmc9MjtyZXR1cm4gdHJ1ZX19fXRoaXMuaz1udWxsO3RoaXMucD1udWxsO3RoaXMuZj1mYWxzZTt0aGlzLmc9MTtyZXR1cm4gZmFsc2V9ZWxzZXtlPSF0aGlzLnA/IXRoaXMuaj90aGlzLmsuWGIodGhpcy5uKyspOnRoaXMuai5YaSh0aGlzLm4rKyk6dGhpcy5wLlBiKCk7aWYodGhpcy5mKXthPUpEKGUsNzQpO2EuSWsoKTtjPWEua2QoKTt0aGlzLmk9Y31lbHNle2M9ZTt0aGlzLmk9Y310aGlzLmc9MztyZXR1cm4gdHJ1ZX19fX07Xy5TYj1mdW5jdGlvbiBQJGQoKXt2YXIgYSxiLGMsZCxlLGY7c3dpdGNoKHRoaXMuZyl7Y2FzZSAtMzpjYXNlIC0yOntyZXR1cm4gdHJ1ZX1jYXNlIC0xOntyZXR1cm4gZmFsc2V9Y2FzZSAzOnshdGhpcy5wPy0tdGhpcy5uOnRoaXMucC5VYigpfWRlZmF1bHQ6e2lmKCF0aGlzLmt8fCghdGhpcy5wPyFJJGQodGhpcyk6IUokZCh0aGlzLHRoaXMucCkpKXt3aGlsZSh0aGlzLmQ+MCl7Yj10aGlzLmNbLS10aGlzLmRdO2lmKCghdGhpcy5lfHxiLm1rKCkhPXQzfHxiLklqKCkhPTApJiYoIXRoaXMuc2woKXx8dGhpcy5iLlRoKGIpKSl7Zj10aGlzLmIuSmgoYix0aGlzLnJsKCkpO3RoaXMuZj0oSWZlKCksSkQoYiw2OSkudWsoKSk7aWYodGhpcy5mfHxiLkdrKCkpe2lmKHRoaXMucmwoKSl7ZD1KRChmLDE1KTt0aGlzLms9ZH1lbHNle2Q9SkQoZiw3MSk7dGhpcy5rPXRoaXMuaj1kfWlmKFJEKHRoaXMuayw1OSkpe3RoaXMubz10aGlzLmsuZ2MoKTt0aGlzLm49dGhpcy5vfWVsc2V7dGhpcy5wPSF0aGlzLmo/dGhpcy5rLmRkKHRoaXMuay5nYygpKTp0aGlzLmouSGkodGhpcy5rLmdjKCkpfWlmKCF0aGlzLnA/SSRkKHRoaXMpOkokZCh0aGlzLHRoaXMucCkpe2U9IXRoaXMucD8hdGhpcy5qP3RoaXMuay5YYigtLXRoaXMubik6dGhpcy5qLlhpKC0tdGhpcy5uKTp0aGlzLnAuVWIoKTtpZih0aGlzLmYpe2E9SkQoZSw3NCk7YS5JaygpO2M9YS5rZCgpO3RoaXMuaT1jfWVsc2V7Yz1lO3RoaXMuaT1jfXRoaXMuZz0tMztyZXR1cm4gdHJ1ZX19ZWxzZSBpZihmIT1udWxsKXt0aGlzLms9bnVsbDt0aGlzLnA9bnVsbDtjPWY7dGhpcy5pPWM7dGhpcy5nPS0yO3JldHVybiB0cnVlfX19dGhpcy5rPW51bGw7dGhpcy5wPW51bGw7dGhpcy5nPS0xO3JldHVybiBmYWxzZX1lbHNle2U9IXRoaXMucD8hdGhpcy5qP3RoaXMuay5YYigtLXRoaXMubik6dGhpcy5qLlhpKC0tdGhpcy5uKTp0aGlzLnAuVWIoKTtpZih0aGlzLmYpe2E9SkQoZSw3NCk7YS5JaygpO2M9YS5rZCgpO3RoaXMuaT1jfWVsc2V7Yz1lO3RoaXMuaT1jfXRoaXMuZz0tMztyZXR1cm4gdHJ1ZX19fX07Xy5QYj1mdW5jdGlvbiBRJGQoKXtyZXR1cm4gRiRkKHRoaXMpfTtfLlRiPWZ1bmN0aW9uIFIkZCgpe3JldHVybiB0aGlzLmF9O18uVWI9ZnVuY3Rpb24gUyRkKCl7dmFyIGE7aWYodGhpcy5nPC0xfHx0aGlzLlNiKCkpey0tdGhpcy5hO3RoaXMuZz0wO2E9dGhpcy5pO3RoaXMuU2IoKTtyZXR1cm4gYX1lbHNle3Rocm93IHNjYihuZXcgcXViKX19O18uVmI9ZnVuY3Rpb24gVCRkKCl7cmV0dXJuIHRoaXMuYS0xfTtfLlFiPWZ1bmN0aW9uIFUkZCgpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5ybD1mdW5jdGlvbiBWJGQoKXtyZXR1cm4gZmFsc2V9O18uV2I9ZnVuY3Rpb24gVyRkKGEpe3Rocm93IHNjYihuZXcgYWhiKX07Xy5zbD1mdW5jdGlvbiBYJGQoKXtyZXR1cm4gdHJ1ZX07Xy5hPTA7Xy5kPTA7Xy5mPWZhbHNlO18uZz0wO18ubj0wO18ubz0wO3ZhciBEJGQ7dmFyIE05PWplYihfRWUsJ0VDb250ZW50c0VMaXN0L0ZlYXR1cmVJdGVyYXRvckltcGwnLDI4NCk7WWNiKDY5NSwyODQsd0ZlLFkkZCk7Xy5ybD1mdW5jdGlvbiBaJGQoKXtyZXR1cm4gdHJ1ZX07dmFyIE45PWplYihfRWUsJ0VDb250ZW50c0VMaXN0L1Jlc29sdmluZ0ZlYXR1cmVJdGVyYXRvckltcGwnLDY5NSk7WWNiKDExNDIsNjk1LHdGZSwkJGQpO18uc2w9ZnVuY3Rpb24gXyRkKCl7cmV0dXJuIGZhbHNlfTt2YXIgZDc9amViKFRDZSwnRU5hbWVkRWxlbWVudEltcGwvMS8xJywxMTQyKTtZY2IoMTE0MywyODQsd0ZlLGFfZCk7Xy5zbD1mdW5jdGlvbiBiX2QoKXtyZXR1cm4gZmFsc2V9O3ZhciBlNz1qZWIoVENlLCdFTmFtZWRFbGVtZW50SW1wbC8xLzInLDExNDMpO1ljYigzOCwxNTAsSEVlLGVfZCxmX2QsZ19kLGhfZCxpX2Qsal9kLGtfZCxsX2QsbV9kLG5fZCxvX2QscF9kLHFfZCxyX2Qsc19kLHRfZCx1X2Qsdl9kLHdfZCx4X2QseV9kLHpfZCxBX2QsQl9kLENfZCk7Xy5Iaj1mdW5jdGlvbiBEX2QoKXtyZXR1cm4gZF9kKHRoaXMpfTtfLk9qPWZ1bmN0aW9uIEVfZCgpe3ZhciBhO2E9ZF9kKHRoaXMpO2lmKGEpe3JldHVybiBhLmZrKCl9cmV0dXJuIG51bGx9O18uZWo9ZnVuY3Rpb24gRl9kKGEpe3RoaXMuYj09LTEmJiEhdGhpcy5hJiYodGhpcy5iPXRoaXMuYy5EaCh0aGlzLmEuSWooKSx0aGlzLmEubWsoKSkpO3JldHVybiB0aGlzLmMudWgodGhpcy5iLGEpfTtfLmdqPWZ1bmN0aW9uIEdfZCgpe3JldHVybiB0aGlzLmN9O18uUGo9ZnVuY3Rpb24gSF9kKCl7dmFyIGE7YT1kX2QodGhpcyk7aWYoYSl7cmV0dXJuIGEucWsoKX1yZXR1cm4gZmFsc2V9O18uYj0tMTt2YXIgaDc9amViKFRDZSwnRU5vdGlmaWNhdGlvbkltcGwnLDM4KTtZY2IoNDAwLDI5MCx7MTA5OjEsOTM6MSw5MjoxLDE1NDoxLDE5NzoxLDU3OjEsNjI6MSwxMTM6MSw0Njc6MSw1MjoxLDk4OjEsMTU3OjEsNDAwOjEsMjkwOjEsMTE3OjEsMTE4OjF9LExfZCk7Xy53aD1mdW5jdGlvbiBNX2QoYSl7cmV0dXJuIElfZCh0aGlzLGEpfTtfLkhoPWZ1bmN0aW9uIE5fZChhLGIsYyl7dmFyIGQsZSxmO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiB4ZGIoKSwodGhpcy5CYiYyNTYpIT0wP3RydWU6ZmFsc2U7Y2FzZSAzOnJldHVybiB4ZGIoKSwodGhpcy5CYiY1MTIpIT0wP3RydWU6ZmFsc2U7Y2FzZSA0OnJldHVybiBqZmIodGhpcy5zKTtjYXNlIDU6cmV0dXJuIGpmYih0aGlzLnQpO2Nhc2UgNjpyZXR1cm4geGRiKCksZj10aGlzLnQsZj4xfHxmPT0tMT90cnVlOmZhbHNlO2Nhc2UgNzpyZXR1cm4geGRiKCksZT10aGlzLnMsZT49MT90cnVlOmZhbHNlO2Nhc2UgODppZihiKXJldHVybiBwUmQodGhpcyk7cmV0dXJuIHRoaXMucjtjYXNlIDk6cmV0dXJuIHRoaXMucTtjYXNlIDEwOnJldHVybiB0aGlzLkRiPj4xNj09MTA/SkQodGhpcy5DYiwyOSk6bnVsbDtjYXNlIDExOnJldHVybiAhdGhpcy5kJiYodGhpcy5kPW5ldyBEZGUocjYsdGhpcywxMSkpLHRoaXMuZDtjYXNlIDEyOnJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBYMGQobTYsdGhpcywxMiwxMCkpLHRoaXMuYztjYXNlIDEzOnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyAkX2QodGhpcyx0aGlzKSksdGhpcy5hO2Nhc2UgMTQ6cmV0dXJuIEpfZCh0aGlzKTt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChjUGQoKSxWT2QpKSxRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD9WT2Q6ZCksYSksYixjKX07Xy5PaD1mdW5jdGlvbiBPX2QoYSxiLGMpe3ZhciBkLGUsZjtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFBHZCh0aGlzLkFiLGEsYyk7Y2FzZSAxMDohIXRoaXMuQ2ImJihjPShlPXRoaXMuRGI+PjE2LGU+PTA/SV9kKHRoaXMsYyk6dGhpcy5DYi5QaCh0aGlzLC0xLWUsbnVsbCxjKSkpO3JldHVybiBicWQodGhpcyxhLDEwLGMpO2Nhc2UgMTI6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IFgwZChtNix0aGlzLDEyLDEwKSksUEdkKHRoaXMuYyxhLGMpO31yZXR1cm4gZj1KRChRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD8oY1BkKCksVk9kKTpkKSxiKSw2OSksZi50aygpLndrKHRoaXMsQXJkKHRoaXMpLGItVlRkKChjUGQoKSxWT2QpKSxhLGMpfTtfLlFoPWZ1bmN0aW9uIFBfZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFFHZCh0aGlzLkFiLGEsYyk7Y2FzZSA5OnJldHVybiBvUmQodGhpcyxjKTtjYXNlIDEwOnJldHVybiBicWQodGhpcyxudWxsLDEwLGMpO2Nhc2UgMTE6cmV0dXJuICF0aGlzLmQmJih0aGlzLmQ9bmV3IERkZShyNix0aGlzLDExKSksUUdkKHRoaXMuZCxhLGMpO2Nhc2UgMTI6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IFgwZChtNix0aGlzLDEyLDEwKSksUUdkKHRoaXMuYyxhLGMpO2Nhc2UgMTQ6cmV0dXJuIFFHZChKX2QodGhpcyksYSxjKTt9cmV0dXJuIGU9SkQoUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/KGNQZCgpLFZPZCk6ZCksYiksNjkpLGUudGsoKS54ayh0aGlzLEFyZCh0aGlzKSxiLVZUZCgoY1BkKCksVk9kKSksYSxjKX07Xy5TaD1mdW5jdGlvbiBRX2QoYSl7dmFyIGIsYyxkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuICh0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybiAodGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gZD10aGlzLnQsZD4xfHxkPT0tMTtjYXNlIDc6cmV0dXJuIGM9dGhpcy5zLGM+PTE7Y2FzZSA4OnJldHVybiAhIXRoaXMuciYmIXRoaXMucS5lJiZFWmQodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4gISF0aGlzLnEmJiEoISF0aGlzLnImJiF0aGlzLnEuZSYmRVpkKHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4gISEodGhpcy5EYj4+MTY9PTEwP0pEKHRoaXMuQ2IsMjkpOm51bGwpO2Nhc2UgMTE6cmV0dXJuICEhdGhpcy5kJiZ0aGlzLmQuaSE9MDtjYXNlIDEyOnJldHVybiAhIXRoaXMuYyYmdGhpcy5jLmkhPTA7Y2FzZSAxMzpyZXR1cm4gISF0aGlzLmEmJkpfZCh0aGlzLmEuYSkuaSE9MCYmISghIXRoaXMuYiYmSjBkKHRoaXMuYikpO2Nhc2UgMTQ6cmV0dXJuICEhdGhpcy5iJiZKMGQodGhpcy5iKTt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChjUGQoKSxWT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9WT2Q6YiksYSkpfTtfLlpoPWZ1bmN0aW9uIFJfZChhLGIpe3ZhciBjLGQ7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTshdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO3ZDZCh0aGlzLkFiLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAxOnJ2ZCh0aGlzLE9EKGIpKTtyZXR1cm47Y2FzZSAyOnVSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDM6dlJkKHRoaXMseWRiKExEKGIpKSk7cmV0dXJuO2Nhc2UgNDp0UmQodGhpcyxKRChiLDE3KS5hKTtyZXR1cm47Y2FzZSA1OndSZCh0aGlzLEpEKGIsMTcpLmEpO3JldHVybjtjYXNlIDg6clJkKHRoaXMsSkQoYiwxNDEpKTtyZXR1cm47Y2FzZSA5OmQ9cVJkKHRoaXMsSkQoYiw4NyksbnVsbCk7ISFkJiZkLmxqKCk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgRGRlKHI2LHRoaXMsMTEpKTtSR2QodGhpcy5kKTshdGhpcy5kJiYodGhpcy5kPW5ldyBEZGUocjYsdGhpcywxMSkpO3ZDZCh0aGlzLmQsSkQoYiwxNikpO3JldHVybjtjYXNlIDEyOiF0aGlzLmMmJih0aGlzLmM9bmV3IFgwZChtNix0aGlzLDEyLDEwKSk7UkdkKHRoaXMuYyk7IXRoaXMuYyYmKHRoaXMuYz1uZXcgWDBkKG02LHRoaXMsMTIsMTApKTt2Q2QodGhpcy5jLEpEKGIsMTYpKTtyZXR1cm47Y2FzZSAxMzohdGhpcy5hJiYodGhpcy5hPW5ldyAkX2QodGhpcyx0aGlzKSk7c0ZkKHRoaXMuYSk7IXRoaXMuYSYmKHRoaXMuYT1uZXcgJF9kKHRoaXMsdGhpcykpO3ZDZCh0aGlzLmEsSkQoYiwxNikpO3JldHVybjtjYXNlIDE0OlJHZChKX2QodGhpcykpO3ZDZChKX2QodGhpcyksSkQoYiwxNikpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQoKGNQZCgpLFZPZCkpLFFUZCgoYz1KRChDcmQodGhpcywxNiksMjkpLCFjP1ZPZDpjKSxhKSxiKX07Xy5laT1mdW5jdGlvbiBTX2QoKXtyZXR1cm4gY1BkKCksVk9kfTtfLmdpPWZ1bmN0aW9uIFRfZChhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpydmQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAyOnVSZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDM6dlJkKHRoaXMsdHJ1ZSk7cmV0dXJuO2Nhc2UgNDp0UmQodGhpcywwKTtyZXR1cm47Y2FzZSA1OndSZCh0aGlzLDEpO3JldHVybjtjYXNlIDg6clJkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgOTpjPXFSZCh0aGlzLG51bGwsbnVsbCk7ISFjJiZjLmxqKCk7cmV0dXJuO2Nhc2UgMTE6IXRoaXMuZCYmKHRoaXMuZD1uZXcgRGRlKHI2LHRoaXMsMTEpKTtSR2QodGhpcy5kKTtyZXR1cm47Y2FzZSAxMjohdGhpcy5jJiYodGhpcy5jPW5ldyBYMGQobTYsdGhpcywxMiwxMCkpO1JHZCh0aGlzLmMpO3JldHVybjtjYXNlIDEzOiEhdGhpcy5hJiZzRmQodGhpcy5hKTtyZXR1cm47Y2FzZSAxNDohIXRoaXMuYiYmUkdkKHRoaXMuYik7cmV0dXJuO31ncWQodGhpcyxhLVZUZCgoY1BkKCksVk9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/Vk9kOmIpLGEpKX07Xy5saT1mdW5jdGlvbiBVX2QoKXt2YXIgYSxiO2lmKHRoaXMuYyl7Zm9yKGE9MCxiPXRoaXMuYy5pO2E8YjsrK2Epe0V1ZChuRGQodGhpcy5jLGEpKX19cFJkKHRoaXMpO3RoaXMuQmJ8PTF9O3ZhciBtNz1qZWIoVENlLCdFT3BlcmF0aW9uSW1wbCcsNDAwKTtZY2IoNDk3LDczOSx1RmUsJF9kKTtfLm5qPWZ1bmN0aW9uIGIwZChhLGIpe1ZfZCh0aGlzLGEsSkQoYiwxNDEpKX07Xy5vaj1mdW5jdGlvbiBjMGQoYSl7V19kKHRoaXMsSkQoYSwxNDEpKX07Xy51aj1mdW5jdGlvbiBpMGQoYSl7dmFyIGIsYztyZXR1cm4gYj1KRChuRGQoSl9kKHRoaXMuYSksYSksODcpLGM9Yi5jLGM/YzooY1BkKCksUk9kKX07Xy56aj1mdW5jdGlvbiBuMGQoYSl7dmFyIGIsYztyZXR1cm4gYj1KRChVR2QoSl9kKHRoaXMuYSksYSksODcpLGM9Yi5jLGM/YzooY1BkKCksUk9kKX07Xy5Baj1mdW5jdGlvbiBvMGQoYSxiKXtyZXR1cm4gWV9kKHRoaXMsYSxKRChiLDE0MSkpfTtfLklpPWZ1bmN0aW9uIF9fZCgpe3JldHVybiBmYWxzZX07Xy5Gaj1mdW5jdGlvbiBhMGQoYSxiLGMsZCxlKXtyZXR1cm4gbnVsbH07Xy5waj1mdW5jdGlvbiBkMGQoKXtyZXR1cm4gbmV3IEcwZCh0aGlzKX07Xy5xaj1mdW5jdGlvbiBlMGQoKXtSR2QoSl9kKHRoaXMuYSkpfTtfLnJqPWZ1bmN0aW9uIGYwZChhKXtyZXR1cm4gWF9kKHRoaXMsYSl9O18uc2o9ZnVuY3Rpb24gZzBkKGEpe3ZhciBiLGM7Zm9yKGM9YS5KYygpO2MuT2IoKTspe2I9Yy5QYigpO2lmKCFYX2QodGhpcyxiKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX07Xy50aj1mdW5jdGlvbiBoMGQoYSl7dmFyIGIsYyxkO2lmKFJEKGEsMTUpKXtkPUpEKGEsMTUpO2lmKGQuZ2MoKT09Sl9kKHRoaXMuYSkuaSl7Zm9yKGI9ZC5KYygpLGM9bmV3IENIZCh0aGlzKTtiLk9iKCk7KXtpZihYRChiLlBiKCkpIT09WEQoQUhkKGMpKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfTtfLnZqPWZ1bmN0aW9uIGowZCgpe3ZhciBhLGIsYyxkLGU7Yz0xO2ZvcihiPW5ldyBDSGQoSl9kKHRoaXMuYSkpO2IuZSE9Yi5pLmdjKCk7KXthPUpEKEFIZChiKSw4Nyk7ZD0oZT1hLmMsZT9lOihjUGQoKSxST2QpKTtjPTMxKmMrKCFkPzA6dGIoZCkpfXJldHVybiBjfTtfLndqPWZ1bmN0aW9uIGswZChhKXt2YXIgYixjLGQsZTtkPTA7Zm9yKGM9bmV3IENIZChKX2QodGhpcy5hKSk7Yy5lIT1jLmkuZ2MoKTspe2I9SkQoQUhkKGMpLDg3KTtpZihYRChhKT09PVhEKChlPWIuYyxlP2U6KGNQZCgpLFJPZCkpKSl7cmV0dXJuIGR9KytkfXJldHVybiAtMX07Xy54aj1mdW5jdGlvbiBsMGQoKXtyZXR1cm4gSl9kKHRoaXMuYSkuaT09MH07Xy55aj1mdW5jdGlvbiBtMGQoKXtyZXR1cm4gbnVsbH07Xy5Caj1mdW5jdGlvbiBwMGQoKXtyZXR1cm4gSl9kKHRoaXMuYSkuaX07Xy5Daj1mdW5jdGlvbiBxMGQoKXt2YXIgYSxiLGMsZCxlLGY7Zj1KX2QodGhpcy5hKS5pO2U9U0MoYUosTnFlLDEsZiw1LDEpO2M9MDtmb3IoYj1uZXcgQ0hkKEpfZCh0aGlzLmEpKTtiLmUhPWIuaS5nYygpOyl7YT1KRChBSGQoYiksODcpO2VbYysrXT0oZD1hLmMsZD9kOihjUGQoKSxST2QpKX1yZXR1cm4gZX07Xy5Eaj1mdW5jdGlvbiByMGQoYSl7dmFyIGIsYyxkLGUsZixnLGg7aD1KX2QodGhpcy5hKS5pO2lmKGEubGVuZ3RoPGgpe2U9ZklkKHJiKGEpLmMsaCk7YT1lfWEubGVuZ3RoPmgmJlZDKGEsaCxudWxsKTtkPTA7Zm9yKGM9bmV3IENIZChKX2QodGhpcy5hKSk7Yy5lIT1jLmkuZ2MoKTspe2I9SkQoQUhkKGMpLDg3KTtmPShnPWIuYyxnP2c6KGNQZCgpLFJPZCkpO1ZDKGEsZCsrLGYpfXJldHVybiBhfTtfLkVqPWZ1bmN0aW9uIHMwZCgpe3ZhciBhLGIsYyxkLGU7ZT1uZXcgSGdiO2UuYSs9J1snO2E9Sl9kKHRoaXMuYSk7Zm9yKGI9MCxkPUpfZCh0aGlzLmEpLmk7YjxkOyl7RWdiKGUseGdiKChjPUpEKG5EZChhLGIpLDg3KS5jLGM/YzooY1BkKCksUk9kKSkpKTsrK2I8ZCYmKGUuYSs9THFlLGUpfWUuYSs9J10nO3JldHVybiBlLmF9O18uR2o9ZnVuY3Rpb24gdDBkKGEpe307Xy5Jaj1mdW5jdGlvbiB1MGQoKXtyZXR1cm4gMTN9O18uaGw9ZnVuY3Rpb24gdjBkKCl7cmV0dXJuIHRydWV9O18uSmo9ZnVuY3Rpb24gdzBkKCl7cmV0dXJuIGZhbHNlfTtfLmlsPWZ1bmN0aW9uIHgwZCgpe3JldHVybiBmYWxzZX07Xy5qbD1mdW5jdGlvbiB5MGQoKXtyZXR1cm4gZmFsc2V9O18ua2w9ZnVuY3Rpb24gejBkKCl7cmV0dXJuIHRydWV9O18uWms9ZnVuY3Rpb24gQTBkKCl7cmV0dXJuIGZhbHNlfTtfLmxsPWZ1bmN0aW9uIEIwZCgpe3JldHVybiB0cnVlfTtfLmNrPWZ1bmN0aW9uIEMwZChhKXtyZXR1cm4gUkQoYSwxNDEpfTtfLk5qPWZ1bmN0aW9uIEQwZCgpe3JldHVybiBLX2QodGhpcy5hKX07Xy5QaT1mdW5jdGlvbiBFMGQoKXtyZXR1cm4gdHJ1ZX07Xy5WaT1mdW5jdGlvbiBGMGQoKXtyZXR1cm4gdHJ1ZX07dmFyIGs3PWplYihUQ2UsJ0VPcGVyYXRpb25JbXBsLzEnLDQ5Nyk7WWNiKDEzMTUsMjAwOCxGcmUsRzBkKTtfLmRkPWZ1bmN0aW9uIEgwZChhKXtyZXR1cm4gd0NkKHRoaXMuYSxhKX07Xy5nYz1mdW5jdGlvbiBJMGQoKXtyZXR1cm4gSl9kKHRoaXMuYS5hKS5pfTt2YXIgajc9amViKFRDZSwnRU9wZXJhdGlvbkltcGwvMS8xJywxMzE1KTtZY2IoMTMxNiw1NDAscEZlLE4wZCk7Xy5RaT1mdW5jdGlvbiBSMGQoYSxiKXt2YXIgYyxkO3JldHVybiBjPUpEKFRHZCh0aGlzLGEsYiksODcpLHFxZCh0aGlzLmUpJiZ6VWQodGhpcyxuZXcgeF9kKHRoaXMuYSw3LChjUGQoKSxXT2QpLGpmYihiKSwoZD1jLmMsZD9kOlJPZCksYSkpLGN9O18uUmo9ZnVuY3Rpb24gUzBkKGEsYil7cmV0dXJuIEswZCh0aGlzLEpEKGEsODcpLGIpfTtfLlNqPWZ1bmN0aW9uIFQwZChhLGIpe3JldHVybiBMMGQodGhpcyxKRChhLDg3KSxiKX07Xy5Uaj1mdW5jdGlvbiBVMGQoYSxiLGMpe3JldHVybiBNMGQodGhpcyxKRChhLDg3KSxKRChiLDg3KSxjKX07Xy5Gaj1mdW5jdGlvbiBPMGQoYSxiLGMsZCxlKXtzd2l0Y2goYSl7Y2FzZSAzOntyZXR1cm4geVVkKHRoaXMsYSxiLGMsZCx0aGlzLmk+MSl9Y2FzZSA1OntyZXR1cm4geVVkKHRoaXMsYSxiLGMsZCx0aGlzLmktSkQoYywxNSkuZ2MoKT4wKX1kZWZhdWx0OntyZXR1cm4gbmV3IGlfZCh0aGlzLmUsYSx0aGlzLmMsYixjLGQsdHJ1ZSl9fX07Xy5Raj1mdW5jdGlvbiBQMGQoKXtyZXR1cm4gdHJ1ZX07Xy5Oaj1mdW5jdGlvbiBRMGQoKXtyZXR1cm4gSjBkKHRoaXMpfTtfLkRrPWZ1bmN0aW9uIFYwZCgpe1JHZCh0aGlzKX07dmFyIGw3PWplYihUQ2UsJ0VPcGVyYXRpb25JbXBsLzInLDEzMTYpO1ljYig0OTEsMSx7MTk4MzoxLDQ5MToxfSxXMGQpO3ZhciBuNz1qZWIoVENlLCdFUGFja2FnZUltcGwvMScsNDkxKTtZY2IoMTQsODEscEZlLFgwZCk7Xy5mbD1mdW5jdGlvbiBZMGQoKXtyZXR1cm4gdGhpcy5kfTtfLmdsPWZ1bmN0aW9uIFowZCgpe3JldHVybiB0aGlzLmJ9O18uamw9ZnVuY3Rpb24gJDBkKCl7cmV0dXJuIHRydWV9O18uYj0wO3ZhciAkOT1qZWIoX0VlLCdFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0JywxNCk7WWNiKDM1OCwxNCxwRmUsXzBkKTtfLmtsPWZ1bmN0aW9uIGExZCgpe3JldHVybiB0cnVlfTtfLlRpPWZ1bmN0aW9uIGIxZChhLGIpe3JldHVybiBCVWQodGhpcyxhLEpEKGIsNTcpKX07dmFyIFg5PWplYihfRWUsJ0VPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvUmVzb2x2aW5nJywzNTgpO1ljYigzMDksMzU4LHBGZSxjMWQpO18uS2k9ZnVuY3Rpb24gZDFkKCl7dGhpcy5hLnRiPW51bGx9O3ZhciBvNz1qZWIoVENlLCdFUGFja2FnZUltcGwvMicsMzA5KTtZY2IoMTIzOCwxLHt9LGUxZCk7dmFyIHA3PWplYihUQ2UsJ0VQYWNrYWdlSW1wbC8zJywxMjM4KTtZY2IoNzE2LDQ1LGJ0ZSxoMWQpO18uX2I9ZnVuY3Rpb24gaTFkKGEpe3JldHVybiBWRChhKT9QaWIodGhpcyxhKTohIWZzYih0aGlzLmYsYSl9O3ZhciByNz1qZWIoVENlLCdFUGFja2FnZVJlZ2lzdHJ5SW1wbCcsNzE2KTtZY2IoNTAyLDI5MCx7MTA5OjEsOTM6MSw5MjoxLDE1NDoxLDE5NzoxLDU3OjEsMjA2MjoxLDExMzoxLDQ2NzoxLDUyOjEsOTg6MSwxNTc6MSw1MDI6MSwyOTA6MSwxMTc6MSwxMTg6MX0sazFkKTtfLndoPWZ1bmN0aW9uIGwxZChhKXtyZXR1cm4gajFkKHRoaXMsYSl9O18uSGg9ZnVuY3Rpb24gbTFkKGEsYixjKXt2YXIgZCxlLGY7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDM6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDQ6cmV0dXJuIGpmYih0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gamZiKHRoaXMudCk7Y2FzZSA2OnJldHVybiB4ZGIoKSxmPXRoaXMudCxmPjF8fGY9PS0xP3RydWU6ZmFsc2U7Y2FzZSA3OnJldHVybiB4ZGIoKSxlPXRoaXMucyxlPj0xP3RydWU6ZmFsc2U7Y2FzZSA4OmlmKGIpcmV0dXJuIHBSZCh0aGlzKTtyZXR1cm4gdGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHRoaXMuRGI+PjE2PT0xMD9KRCh0aGlzLkNiLDYyKTpudWxsO31yZXR1cm4gZHFkKHRoaXMsYS1WVGQoKGNQZCgpLFlPZCkpLFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP1lPZDpkKSxhKSxiLGMpfTtfLk9oPWZ1bmN0aW9uIG4xZChhLGIsYyl7dmFyIGQsZSxmO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksUEdkKHRoaXMuQWIsYSxjKTtjYXNlIDEwOiEhdGhpcy5DYiYmKGM9KGU9dGhpcy5EYj4+MTYsZT49MD9qMWQodGhpcyxjKTp0aGlzLkNiLlBoKHRoaXMsLTEtZSxudWxsLGMpKSk7cmV0dXJuIGJxZCh0aGlzLGEsMTAsYyk7fXJldHVybiBmPUpEKFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkPyhjUGQoKSxZT2QpOmQpLGIpLDY5KSxmLnRrKCkud2sodGhpcyxBcmQodGhpcyksYi1WVGQoKGNQZCgpLFlPZCkpLGEsYyl9O18uUWg9ZnVuY3Rpb24gbzFkKGEsYixjKXt2YXIgZCxlO3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksUUdkKHRoaXMuQWIsYSxjKTtjYXNlIDk6cmV0dXJuIG9SZCh0aGlzLGMpO2Nhc2UgMTA6cmV0dXJuIGJxZCh0aGlzLG51bGwsMTAsYyk7fXJldHVybiBlPUpEKFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkPyhjUGQoKSxZT2QpOmQpLGIpLDY5KSxlLnRrKCkueGsodGhpcyxBcmQodGhpcyksYi1WVGQoKGNQZCgpLFlPZCkpLGEsYyl9O18uU2g9ZnVuY3Rpb24gcDFkKGEpe3ZhciBiLGMsZDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiAodGhpcy5CYiYyNTYpPT0wO2Nhc2UgMzpyZXR1cm4gKHRoaXMuQmImNTEyKT09MDtjYXNlIDQ6cmV0dXJuIHRoaXMucyE9MDtjYXNlIDU6cmV0dXJuIHRoaXMudCE9MTtjYXNlIDY6cmV0dXJuIGQ9dGhpcy50LGQ+MXx8ZD09LTE7Y2FzZSA3OnJldHVybiBjPXRoaXMucyxjPj0xO2Nhc2UgODpyZXR1cm4gISF0aGlzLnImJiF0aGlzLnEuZSYmRVpkKHRoaXMucSkuaT09MDtjYXNlIDk6cmV0dXJuICEhdGhpcy5xJiYhKCEhdGhpcy5yJiYhdGhpcy5xLmUmJkVaZCh0aGlzLnEpLmk9PTApO2Nhc2UgMTA6cmV0dXJuICEhKHRoaXMuRGI+PjE2PT0xMD9KRCh0aGlzLkNiLDYyKTpudWxsKTt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChjUGQoKSxZT2QpKSxRVGQoKGI9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYj9ZT2Q6YiksYSkpfTtfLmVpPWZ1bmN0aW9uIHExZCgpe3JldHVybiBjUGQoKSxZT2R9O3ZhciBzNz1qZWIoVENlLCdFUGFyYW1ldGVySW1wbCcsNTAyKTtZY2IoMTAxLDQ0OCx7MTA5OjEsOTM6MSw5MjoxLDE1NDoxLDE5NzoxLDU3OjEsMTk6MSwxNzg6MSw2OToxLDExMzoxLDQ2NzoxLDUyOjEsOTg6MSwxNTc6MSwxMDE6MSw0NDg6MSwyOTA6MSwxMTc6MSwxMTg6MSw2Nzc6MX0seTFkKTtfLkhoPWZ1bmN0aW9uIHoxZChhLGIsYyl7dmFyIGQsZSxmLGc7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gIXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKSx0aGlzLkFiO2Nhc2UgMTpyZXR1cm4gdGhpcy56YjtjYXNlIDI6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjI1NikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDM6cmV0dXJuIHhkYigpLCh0aGlzLkJiJjUxMikhPTA/dHJ1ZTpmYWxzZTtjYXNlIDQ6cmV0dXJuIGpmYih0aGlzLnMpO2Nhc2UgNTpyZXR1cm4gamZiKHRoaXMudCk7Y2FzZSA2OnJldHVybiB4ZGIoKSxnPXRoaXMudCxnPjF8fGc9PS0xP3RydWU6ZmFsc2U7Y2FzZSA3OnJldHVybiB4ZGIoKSxlPXRoaXMucyxlPj0xP3RydWU6ZmFsc2U7Y2FzZSA4OmlmKGIpcmV0dXJuIHBSZCh0aGlzKTtyZXR1cm4gdGhpcy5yO2Nhc2UgOTpyZXR1cm4gdGhpcy5xO2Nhc2UgMTA6cmV0dXJuIHhkYigpLCh0aGlzLkJiJk5FZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDExOnJldHVybiB4ZGIoKSwodGhpcy5CYiZ3c2UpIT0wP3RydWU6ZmFsc2U7Y2FzZSAxMjpyZXR1cm4geGRiKCksKHRoaXMuQmImTXNlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTM6cmV0dXJuIHRoaXMuajtjYXNlIDE0OnJldHVybiBPUmQodGhpcyk7Y2FzZSAxNTpyZXR1cm4geGRiKCksKHRoaXMuQmImZEZlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTY6cmV0dXJuIHhkYigpLCh0aGlzLkJiJmlyZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDE3OnJldHVybiBQUmQodGhpcyk7Y2FzZSAxODpyZXR1cm4geGRiKCksKHRoaXMuQmImUkNlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMTk6cmV0dXJuIHhkYigpLGY9czFkKHRoaXMpLCEhZiYmKGYuQmImUkNlKSE9MD90cnVlOmZhbHNlO2Nhc2UgMjA6cmV0dXJuIHhkYigpLCh0aGlzLkJiJlBzZSkhPTA/dHJ1ZTpmYWxzZTtjYXNlIDIxOmlmKGIpcmV0dXJuIHMxZCh0aGlzKTtyZXR1cm4gdGhpcy5iO2Nhc2UgMjI6aWYoYilyZXR1cm4gdDFkKHRoaXMpO3JldHVybiByMWQodGhpcyk7Y2FzZSAyMzpyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgVWRlKCQ1LHRoaXMsMjMpKSx0aGlzLmE7fXJldHVybiBkcWQodGhpcyxhLVZUZCgoY1BkKCksWk9kKSksUVRkKChkPUpEKENyZCh0aGlzLDE2KSwyOSksIWQ/Wk9kOmQpLGEpLGIsYyl9O18uU2g9ZnVuY3Rpb24gQTFkKGEpe3ZhciBiLGMsZCxlO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5BYiYmdGhpcy5BYi5pIT0wO2Nhc2UgMTpyZXR1cm4gdGhpcy56YiE9bnVsbDtjYXNlIDI6cmV0dXJuICh0aGlzLkJiJjI1Nik9PTA7Y2FzZSAzOnJldHVybiAodGhpcy5CYiY1MTIpPT0wO2Nhc2UgNDpyZXR1cm4gdGhpcy5zIT0wO2Nhc2UgNTpyZXR1cm4gdGhpcy50IT0xO2Nhc2UgNjpyZXR1cm4gZT10aGlzLnQsZT4xfHxlPT0tMTtjYXNlIDc6cmV0dXJuIGM9dGhpcy5zLGM+PTE7Y2FzZSA4OnJldHVybiAhIXRoaXMuciYmIXRoaXMucS5lJiZFWmQodGhpcy5xKS5pPT0wO2Nhc2UgOTpyZXR1cm4gISF0aGlzLnEmJiEoISF0aGlzLnImJiF0aGlzLnEuZSYmRVpkKHRoaXMucSkuaT09MCk7Y2FzZSAxMDpyZXR1cm4gKHRoaXMuQmImTkVlKT09MDtjYXNlIDExOnJldHVybiAodGhpcy5CYiZ3c2UpIT0wO2Nhc2UgMTI6cmV0dXJuICh0aGlzLkJiJk1zZSkhPTA7Y2FzZSAxMzpyZXR1cm4gdGhpcy5qIT1udWxsO2Nhc2UgMTQ6cmV0dXJuIE9SZCh0aGlzKSE9bnVsbDtjYXNlIDE1OnJldHVybiAodGhpcy5CYiZkRmUpIT0wO2Nhc2UgMTY6cmV0dXJuICh0aGlzLkJiJmlyZSkhPTA7Y2FzZSAxNzpyZXR1cm4gISFQUmQodGhpcyk7Y2FzZSAxODpyZXR1cm4gKHRoaXMuQmImUkNlKSE9MDtjYXNlIDE5OnJldHVybiBkPXMxZCh0aGlzKSwhIWQmJihkLkJiJlJDZSkhPTA7Y2FzZSAyMDpyZXR1cm4gKHRoaXMuQmImUHNlKT09MDtjYXNlIDIxOnJldHVybiAhIXRoaXMuYjtjYXNlIDIyOnJldHVybiAhIXIxZCh0aGlzKTtjYXNlIDIzOnJldHVybiAhIXRoaXMuYSYmdGhpcy5hLmkhPTA7fXJldHVybiBlcWQodGhpcyxhLVZUZCgoY1BkKCksWk9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/Wk9kOmIpLGEpKX07Xy5aaD1mdW5jdGlvbiBCMWQoYSxiKXt2YXIgYyxkO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTt2Q2QodGhpcy5BYixKRChiLDE2KSk7cmV0dXJuO2Nhc2UgMTpYUmQodGhpcyxPRChiKSk7cmV0dXJuO2Nhc2UgMjp1UmQodGhpcyx5ZGIoTEQoYikpKTtyZXR1cm47Y2FzZSAzOnZSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDQ6dFJkKHRoaXMsSkQoYiwxNykuYSk7cmV0dXJuO2Nhc2UgNTp3UmQodGhpcyxKRChiLDE3KS5hKTtyZXR1cm47Y2FzZSA4OnJSZCh0aGlzLEpEKGIsMTQxKSk7cmV0dXJuO2Nhc2UgOTpkPXFSZCh0aGlzLEpEKGIsODcpLG51bGwpOyEhZCYmZC5saigpO3JldHVybjtjYXNlIDEwOlNSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDExOiRSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDEyOllSZCh0aGlzLHlkYihMRChiKSkpO3JldHVybjtjYXNlIDEzOlRSZCh0aGlzLE9EKGIpKTtyZXR1cm47Y2FzZSAxNTpaUmQodGhpcyx5ZGIoTEQoYikpKTtyZXR1cm47Y2FzZSAxNjpWUmQodGhpcyx5ZGIoTEQoYikpKTtyZXR1cm47Y2FzZSAxODp1MWQodGhpcyx5ZGIoTEQoYikpKTtyZXR1cm47Y2FzZSAyMDp4MWQodGhpcyx5ZGIoTEQoYikpKTtyZXR1cm47Y2FzZSAyMTp3MWQodGhpcyxKRChiLDE5KSk7cmV0dXJuO2Nhc2UgMjM6IXRoaXMuYSYmKHRoaXMuYT1uZXcgVWRlKCQ1LHRoaXMsMjMpKTtSR2QodGhpcy5hKTshdGhpcy5hJiYodGhpcy5hPW5ldyBVZGUoJDUsdGhpcywyMykpO3ZDZCh0aGlzLmEsSkQoYiwxNikpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQoKGNQZCgpLFpPZCkpLFFUZCgoYz1KRChDcmQodGhpcywxNiksMjkpLCFjP1pPZDpjKSxhKSxiKX07Xy5laT1mdW5jdGlvbiBDMWQoKXtyZXR1cm4gY1BkKCksWk9kfTtfLmdpPWZ1bmN0aW9uIEQxZChhKXt2YXIgYixjO3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuQWImJih0aGlzLkFiPW5ldyBYMGQoWjUsdGhpcywwLDMpKTtSR2QodGhpcy5BYik7cmV0dXJuO2Nhc2UgMTpSRCh0aGlzLkNiLDg4KSYmUVZkKFRUZChKRCh0aGlzLkNiLDg4KSksNCk7cnZkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMjp1UmQodGhpcyx0cnVlKTtyZXR1cm47Y2FzZSAzOnZSZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDQ6dFJkKHRoaXMsMCk7cmV0dXJuO2Nhc2UgNTp3UmQodGhpcywxKTtyZXR1cm47Y2FzZSA4OnJSZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDk6Yz1xUmQodGhpcyxudWxsLG51bGwpOyEhYyYmYy5saigpO3JldHVybjtjYXNlIDEwOlNSZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDExOiRSZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxMjpZUmQodGhpcyxmYWxzZSk7cmV0dXJuO2Nhc2UgMTM6dGhpcy5pPW51bGw7VVJkKHRoaXMsbnVsbCk7cmV0dXJuO2Nhc2UgMTU6WlJkKHRoaXMsZmFsc2UpO3JldHVybjtjYXNlIDE2OlZSZCh0aGlzLGZhbHNlKTtyZXR1cm47Y2FzZSAxODp2MWQodGhpcyxmYWxzZSk7UkQodGhpcy5DYiw4OCkmJlFWZChUVGQoSkQodGhpcy5DYiw4OCkpLDIpO3JldHVybjtjYXNlIDIwOngxZCh0aGlzLHRydWUpO3JldHVybjtjYXNlIDIxOncxZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDIzOiF0aGlzLmEmJih0aGlzLmE9bmV3IFVkZSgkNSx0aGlzLDIzKSk7UkdkKHRoaXMuYSk7cmV0dXJuO31ncWQodGhpcyxhLVZUZCgoY1BkKCksWk9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/Wk9kOmIpLGEpKX07Xy5saT1mdW5jdGlvbiBFMWQoKXt0MWQodGhpcyk7VmFlKGphZSgoR2ZlKCksRWZlKSx0aGlzKSk7cFJkKHRoaXMpO3RoaXMuQmJ8PTF9O18ucms9ZnVuY3Rpb24gRjFkKCl7cmV0dXJuIHMxZCh0aGlzKX07Xy5Zaz1mdW5jdGlvbiBHMWQoKXt2YXIgYTtyZXR1cm4gYT1zMWQodGhpcyksISFhJiYoYS5CYiZSQ2UpIT0wfTtfLlprPWZ1bmN0aW9uIEgxZCgpe3JldHVybiAodGhpcy5CYiZSQ2UpIT0wfTtfLiRrPWZ1bmN0aW9uIEkxZCgpe3JldHVybiAodGhpcy5CYiZQc2UpIT0wfTtfLlZrPWZ1bmN0aW9uIEoxZChhLGIpe3RoaXMuYz1udWxsO3JldHVybiBzUmQodGhpcyxhLGIpfTtfLkliPWZ1bmN0aW9uIEsxZCgpe3ZhciBhO2lmKCh0aGlzLkRiJjY0KSE9MClyZXR1cm4gX1JkKHRoaXMpO2E9bmV3IEpnYihfUmQodGhpcykpO2EuYSs9JyAoY29udGFpbm1lbnQ6ICc7RmdiKGEsKHRoaXMuQmImUkNlKSE9MCk7YS5hKz0nLCByZXNvbHZlUHJveGllczogJztGZ2IoYSwodGhpcy5CYiZQc2UpIT0wKTthLmErPScpJztyZXR1cm4gYS5hfTt2YXIgdDc9amViKFRDZSwnRVJlZmVyZW5jZUltcGwnLDEwMSk7WWNiKDU0NiwxMTgsezEwOToxLDQzOjEsOTM6MSw5MjoxLDEzNToxLDU3OjEsMTEzOjEsNTI6MSw5ODoxLDU0NjoxLDExNzoxLDExODoxfSxRMWQpO18uRmI9ZnVuY3Rpb24gVzFkKGEpe3JldHVybiB0aGlzPT09YX07Xy5qZD1mdW5jdGlvbiBZMWQoKXtyZXR1cm4gdGhpcy5ifTtfLmtkPWZ1bmN0aW9uIFoxZCgpe3JldHVybiB0aGlzLmN9O18uSGI9ZnVuY3Rpb24gJDFkKCl7cmV0dXJuIGpEYih0aGlzKX07Xy56aT1mdW5jdGlvbiBhMmQoYSl7TDFkKHRoaXMsT0QoYSkpfTtfLmxkPWZ1bmN0aW9uIGIyZChhKXtyZXR1cm4gUDFkKHRoaXMsT0QoYSkpfTtfLkhoPWZ1bmN0aW9uIFIxZChhLGIsYyl7dmFyIGQ7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gdGhpcy5iO2Nhc2UgMTpyZXR1cm4gdGhpcy5jO31yZXR1cm4gZHFkKHRoaXMsYS1WVGQoKGNQZCgpLCRPZCkpLFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkPyRPZDpkKSxhKSxiLGMpfTtfLlNoPWZ1bmN0aW9uIFMxZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiB0aGlzLmIhPW51bGw7Y2FzZSAxOnJldHVybiB0aGlzLmMhPW51bGw7fXJldHVybiBlcWQodGhpcyxhLVZUZCgoY1BkKCksJE9kKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/JE9kOmIpLGEpKX07Xy5aaD1mdW5jdGlvbiBUMWQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOk0xZCh0aGlzLE9EKGIpKTtyZXR1cm47Y2FzZSAxOk8xZCh0aGlzLE9EKGIpKTtyZXR1cm47fWZxZCh0aGlzLGEtVlRkKChjUGQoKSwkT2QpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz8kT2Q6YyksYSksYil9O18uZWk9ZnVuY3Rpb24gVTFkKCl7cmV0dXJuIGNQZCgpLCRPZH07Xy5naT1mdW5jdGlvbiBWMWQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDpOMWQodGhpcyxudWxsKTtyZXR1cm47Y2FzZSAxOk8xZCh0aGlzLG51bGwpO3JldHVybjt9Z3FkKHRoaXMsYS1WVGQoKGNQZCgpLCRPZCkpLFFUZCgoYj1KRChDcmQodGhpcywxNiksMjkpLCFiPyRPZDpiKSxhKSl9O18ueGk9ZnVuY3Rpb24gWDFkKCl7dmFyIGE7aWYodGhpcy5hPT0tMSl7YT10aGlzLmI7dGhpcy5hPWE9PW51bGw/MDpmZ2IoYSl9cmV0dXJuIHRoaXMuYX07Xy55aT1mdW5jdGlvbiBfMWQoYSl7dGhpcy5hPWF9O18uSWI9ZnVuY3Rpb24gYzJkKCl7dmFyIGE7aWYoKHRoaXMuRGImNjQpIT0wKXJldHVybiBHcWQodGhpcyk7YT1uZXcgSmdiKEdxZCh0aGlzKSk7YS5hKz0nIChrZXk6ICc7RWdiKGEsdGhpcy5iKTthLmErPScsIHZhbHVlOiAnO0VnYihhLHRoaXMuYyk7YS5hKz0nKSc7cmV0dXJuIGEuYX07Xy5hPS0xO18uYj1udWxsO18uYz1udWxsO3ZhciB1Nz1qZWIoVENlLCdFU3RyaW5nVG9TdHJpbmdNYXBFbnRyeUltcGwnLDU0Nik7dmFyIEFhYj1sZWIoX0VlLCdGZWF0dXJlTWFwL0VudHJ5L0ludGVybmFsJyk7WWNiKDU1OCwxLHhGZSk7Xy51bD1mdW5jdGlvbiBmMmQoYSl7cmV0dXJuIHRoaXMudmwoSkQoYSw1MikpfTtfLnZsPWZ1bmN0aW9uIGcyZChhKXtyZXR1cm4gdGhpcy51bChhKX07Xy5GYj1mdW5jdGlvbiBoMmQoYSl7dmFyIGIsYztpZih0aGlzPT09YSl7cmV0dXJuIHRydWV9ZWxzZSBpZihSRChhLDc0KSl7Yj1KRChhLDc0KTtpZihiLklrKCk9PXRoaXMuYyl7Yz10aGlzLmtkKCk7cmV0dXJuIGM9PW51bGw/Yi5rZCgpPT1udWxsOnBiKGMsYi5rZCgpKX1lbHNle3JldHVybiBmYWxzZX19ZWxzZXtyZXR1cm4gZmFsc2V9fTtfLklrPWZ1bmN0aW9uIGkyZCgpe3JldHVybiB0aGlzLmN9O18uSGI9ZnVuY3Rpb24gajJkKCl7dmFyIGE7YT10aGlzLmtkKCk7cmV0dXJuIHRiKHRoaXMuYyleKGE9PW51bGw/MDp0YihhKSl9O18uSWI9ZnVuY3Rpb24gazJkKCl7dmFyIGEsYjthPXRoaXMuYztiPVdTZChhLm5rKCkpLnVpKCk7YS52ZSgpO3JldHVybiAoYiE9bnVsbCYmYi5sZW5ndGghPTA/YisnOicrYS52ZSgpOmEudmUoKSkrJz0nK3RoaXMua2QoKX07dmFyIHY3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvQmFzaWNGZWF0dXJlTWFwRW50cnknLDU1OCk7WWNiKDc3MSw1NTgseEZlLG4yZCk7Xy52bD1mdW5jdGlvbiBvMmQoYSl7cmV0dXJuIG5ldyBuMmQodGhpcy5jLGEpfTtfLmtkPWZ1bmN0aW9uIHAyZCgpe3JldHVybiB0aGlzLmF9O18ud2w9ZnVuY3Rpb24gcTJkKGEsYixjKXtyZXR1cm4gbDJkKHRoaXMsYSx0aGlzLmEsYixjKX07Xy54bD1mdW5jdGlvbiByMmQoYSxiLGMpe3JldHVybiBtMmQodGhpcyxhLHRoaXMuYSxiLGMpfTt2YXIgdzc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9Db250YWlubWVudFVwZGF0aW5nRmVhdHVyZU1hcEVudHJ5Jyw3NzEpO1ljYigxMjg5LDEse30sczJkKTtfLnZrPWZ1bmN0aW9uIHQyZChhLGIsYyxkLGUpe3ZhciBmO2Y9SkQoaXFkKGEsdGhpcy5iKSwyMTgpO3JldHVybiBmLlZsKHRoaXMuYSkuQ2soZCl9O18ud2s9ZnVuY3Rpb24gdTJkKGEsYixjLGQsZSl7dmFyIGY7Zj1KRChpcWQoYSx0aGlzLmIpLDIxOCk7cmV0dXJuIGYuTWwodGhpcy5hLGQsZSl9O18ueGs9ZnVuY3Rpb24gdjJkKGEsYixjLGQsZSl7dmFyIGY7Zj1KRChpcWQoYSx0aGlzLmIpLDIxOCk7cmV0dXJuIGYuTmwodGhpcy5hLGQsZSl9O18ueWs9ZnVuY3Rpb24gdzJkKGEsYixjKXt2YXIgZDtkPUpEKGlxZChhLHRoaXMuYiksMjE4KTtyZXR1cm4gZC5WbCh0aGlzLmEpLk5qKCl9O18uems9ZnVuY3Rpb24geDJkKGEsYixjLGQpe3ZhciBlO2U9SkQoaXFkKGEsdGhpcy5iKSwyMTgpO2UuVmwodGhpcy5hKS5XYihkKX07Xy5Baz1mdW5jdGlvbiB5MmQoYSxiLGMpe3JldHVybiBKRChpcWQoYSx0aGlzLmIpLDIxOCkuVmwodGhpcy5hKX07Xy5Caz1mdW5jdGlvbiB6MmQoYSxiLGMpe3ZhciBkO2Q9SkQoaXFkKGEsdGhpcy5iKSwyMTgpO2QuVmwodGhpcy5hKS5EaygpfTt2YXIgeDc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZUZlYXR1cmVNYXBEZWxlZ2F0b3InLDEyODkpO1ljYig4OSwxLHt9LEIyZCxDMmQsRDJkLEUyZCk7Xy52az1mdW5jdGlvbiBGMmQoYSxiLGMsZCxlKXt2YXIgZjtmPWIuaGkoYyk7Zj09bnVsbCYmYi5paShjLGY9QTJkKHRoaXMsYSkpO2lmKCFlKXtzd2l0Y2godGhpcy5lKXtjYXNlIDUwOmNhc2UgNDE6cmV0dXJuIEpEKGYsNTgxKS4kaigpO2Nhc2UgNDA6cmV0dXJuIEpEKGYsMjE4KS5TbCgpO319cmV0dXJuIGZ9O18ud2s9ZnVuY3Rpb24gRzJkKGEsYixjLGQsZSl7dmFyIGYsZztnPWIuaGkoYyk7Zz09bnVsbCYmYi5paShjLGc9QTJkKHRoaXMsYSkpO2Y9SkQoZyw3MSkuVGsoZCxlKTtyZXR1cm4gZn07Xy54az1mdW5jdGlvbiBIMmQoYSxiLGMsZCxlKXt2YXIgZjtmPWIuaGkoYyk7ZiE9bnVsbCYmKGU9SkQoZiw3MSkuVWsoZCxlKSk7cmV0dXJuIGV9O18ueWs9ZnVuY3Rpb24gSTJkKGEsYixjKXt2YXIgZDtkPWIuaGkoYyk7cmV0dXJuIGQhPW51bGwmJkpEKGQsNzYpLk5qKCl9O18uems9ZnVuY3Rpb24gSjJkKGEsYixjLGQpe3ZhciBlO2U9SkQoYi5oaShjKSw3Nik7IWUmJmIuaWkoYyxlPUEyZCh0aGlzLGEpKTtlLldiKGQpfTtfLkFrPWZ1bmN0aW9uIEsyZChhLGIsYyl7dmFyIGQsZTtlPWIuaGkoYyk7ZT09bnVsbCYmYi5paShjLGU9QTJkKHRoaXMsYSkpO2lmKFJEKGUsNzYpKXtyZXR1cm4gSkQoZSw3Nil9ZWxzZXtkPUpEKGIuaGkoYyksMTUpO3JldHVybiBuZXcgYjVkKGQpfX07Xy5Caz1mdW5jdGlvbiBMMmQoYSxiLGMpe3ZhciBkO2Q9SkQoYi5oaShjKSw3Nik7IWQmJmIuaWkoYyxkPUEyZCh0aGlzLGEpKTtkLkRrKCl9O18uYj0wO18uZT0wO3ZhciB5Nz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlTWFueScsODkpO1ljYig0OTYsMSx7fSk7Xy53az1mdW5jdGlvbiBQMmQoYSxiLGMsZCxlKXt0aHJvdyBzY2IobmV3IGFoYil9O18ueGs9ZnVuY3Rpb24gUTJkKGEsYixjLGQsZSl7dGhyb3cgc2NiKG5ldyBhaGIpfTtfLkFrPWZ1bmN0aW9uIFIyZChhLGIsYyl7cmV0dXJuIG5ldyBTMmQodGhpcyxhLGIsYyl9O3ZhciBNMmQ7dmFyIGY4PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGUnLDQ5Nik7WWNiKDEzMDYsMSxhRmUsUzJkKTtfLkNrPWZ1bmN0aW9uIFQyZChhKXtyZXR1cm4gdGhpcy5hLnZrKHRoaXMuYyx0aGlzLmQsdGhpcy5iLGEsdHJ1ZSl9O18uTmo9ZnVuY3Rpb24gVTJkKCl7cmV0dXJuIHRoaXMuYS55ayh0aGlzLmMsdGhpcy5kLHRoaXMuYil9O18uV2I9ZnVuY3Rpb24gVjJkKGEpe3RoaXMuYS56ayh0aGlzLmMsdGhpcy5kLHRoaXMuYixhKX07Xy5Eaz1mdW5jdGlvbiBXMmQoKXt0aGlzLmEuQmsodGhpcy5jLHRoaXMuZCx0aGlzLmIpfTtfLmI9MDt2YXIgejc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZS8xJywxMzA2KTtZY2IoNzY0LDQ5Nix7fSxYMmQpO18udms9ZnVuY3Rpb24gWTJkKGEsYixjLGQsZSl7cmV0dXJuIFBxZChhLGEuTGgoKSxhLkJoKCkpPT10aGlzLmI/dGhpcy4kaygpJiZkP2NxZChhKTphLkxoKCk6bnVsbH07Xy53az1mdW5jdGlvbiBaMmQoYSxiLGMsZCxlKXt2YXIgZixnOyEhYS5MaCgpJiYoZT0oZj1hLkJoKCksZj49MD9hLndoKGUpOmEuTGgoKS5QaChhLC0xLWYsbnVsbCxlKSkpO2c9V1RkKGEuemgoKSx0aGlzLmUpO3JldHVybiBhLnloKGQsZyxlKX07Xy54az1mdW5jdGlvbiAkMmQoYSxiLGMsZCxlKXt2YXIgZjtmPVdUZChhLnpoKCksdGhpcy5lKTtyZXR1cm4gYS55aChudWxsLGYsZSl9O18ueWs9ZnVuY3Rpb24gXzJkKGEsYixjKXt2YXIgZDtkPVdUZChhLnpoKCksdGhpcy5lKTtyZXR1cm4gISFhLkxoKCkmJmEuQmgoKT09ZH07Xy56az1mdW5jdGlvbiBhM2QoYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtpZihkIT1udWxsJiYhJFNkKHRoaXMuYSxkKSl7dGhyb3cgc2NiKG5ldyB6ZWIoeUZlKyhSRChkLDU3KT9fVGQoSkQoZCw1NykuemgoKSk6ZmViKHJiKGQpKSkrekZlK3RoaXMuYSsiJyIpKX1lPWEuTGgoKTtnPVdUZChhLnpoKCksdGhpcy5lKTtpZihYRChkKSE9PVhEKGUpfHxhLkJoKCkhPWcmJmQhPW51bGwpe2lmKGhmZShhLEpEKGQsNTcpKSl0aHJvdyBzY2IobmV3IFRlYihWQ2UrYS5JYigpKSk7aT1udWxsOyEhZSYmKGk9KGY9YS5CaCgpLGY+PTA/YS53aChpKTphLkxoKCkuUGgoYSwtMS1mLG51bGwsaSkpKTtoPUpEKGQsNTIpOyEhaCYmKGk9aC5OaChhLFdUZChoLnpoKCksdGhpcy5iKSxudWxsLGkpKTtpPWEueWgoaCxnLGkpOyEhaSYmaS5saigpfWVsc2V7YS5yaCgpJiZhLnNoKCkmJldwZChhLG5ldyBnX2QoYSwxLGcsZCxkKSl9fTtfLkJrPWZ1bmN0aW9uIGIzZChhLGIsYyl7dmFyIGQsZSxmLGc7ZD1hLkxoKCk7aWYoZCl7Zz0oZT1hLkJoKCksZT49MD9hLndoKG51bGwpOmEuTGgoKS5QaChhLC0xLWUsbnVsbCxudWxsKSk7Zj1XVGQoYS56aCgpLHRoaXMuZSk7Zz1hLnloKG51bGwsZixnKTshIWcmJmcubGooKX1lbHNle2EucmgoKSYmYS5zaCgpJiZXcGQoYSxuZXcgd19kKGEsMSx0aGlzLmUsbnVsbCxudWxsKSl9fTtfLiRrPWZ1bmN0aW9uIGMzZCgpe3JldHVybiBmYWxzZX07dmFyIEI3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVDb250YWluZXInLDc2NCk7WWNiKDEyOTAsNzY0LHt9LGQzZCk7Xy4kaz1mdW5jdGlvbiBlM2QoKXtyZXR1cm4gdHJ1ZX07dmFyIEE3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVDb250YWluZXJSZXNvbHZpbmcnLDEyOTApO1ljYig1NTYsNDk2LHt9KTtfLnZrPWZ1bmN0aW9uIGgzZChhLGIsYyxkLGUpe3ZhciBmO3JldHVybiBmPWIuaGkoYyksZj09bnVsbD90aGlzLmI6WEQoZik9PT1YRChNMmQpP251bGw6Zn07Xy55az1mdW5jdGlvbiBpM2QoYSxiLGMpe3ZhciBkO2Q9Yi5oaShjKTtyZXR1cm4gZCE9bnVsbCYmKFhEKGQpPT09WEQoTTJkKXx8IXBiKGQsdGhpcy5iKSl9O18uems9ZnVuY3Rpb24gajNkKGEsYixjLGQpe3ZhciBlLGY7aWYoYS5yaCgpJiZhLnNoKCkpe2U9KGY9Yi5oaShjKSxmPT1udWxsP3RoaXMuYjpYRChmKT09PVhEKE0yZCk/bnVsbDpmKTtpZihkPT1udWxsKXtpZih0aGlzLmMhPW51bGwpe2IuaWkoYyxudWxsKTtkPXRoaXMuYn1lbHNlIHRoaXMuYiE9bnVsbD9iLmlpKGMsTTJkKTpiLmlpKGMsbnVsbCl9ZWxzZXt0aGlzLnlsKGQpO2IuaWkoYyxkKX1XcGQoYSx0aGlzLmQuemwoYSwxLHRoaXMuZSxlLGQpKX1lbHNle2lmKGQ9PW51bGwpe3RoaXMuYyE9bnVsbD9iLmlpKGMsbnVsbCk6dGhpcy5iIT1udWxsP2IuaWkoYyxNMmQpOmIuaWkoYyxudWxsKX1lbHNle3RoaXMueWwoZCk7Yi5paShjLGQpfX19O18uQms9ZnVuY3Rpb24gazNkKGEsYixjKXt2YXIgZCxlO2lmKGEucmgoKSYmYS5zaCgpKXtkPShlPWIuaGkoYyksZT09bnVsbD90aGlzLmI6WEQoZSk9PT1YRChNMmQpP251bGw6ZSk7Yi5qaShjKTtXcGQoYSx0aGlzLmQuemwoYSwxLHRoaXMuZSxkLHRoaXMuYikpfWVsc2V7Yi5qaShjKX19O18ueWw9ZnVuY3Rpb24gbDNkKGEpe3Rocm93IHNjYihuZXcgeWViKX07dmFyIFE3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhJyw1NTYpO1ljYihBRmUsMSx7fSx3M2QpO18uemw9ZnVuY3Rpb24geDNkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyB3X2QoYSxiLGMsZCxlKX07Xy5BbD1mdW5jdGlvbiB5M2QoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgeV9kKGEsYixjLGQsZSxmKX07dmFyIG0zZCxuM2QsbzNkLHAzZCxxM2QscjNkLHMzZCx0M2QsdTNkO3ZhciBLNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yJyxBRmUpO1ljYigxMzA3LEFGZSx7fSx6M2QpO18uemw9ZnVuY3Rpb24gQTNkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBCX2QoYSxiLGMseWRiKExEKGQpKSx5ZGIoTEQoZSkpKX07Xy5BbD1mdW5jdGlvbiBCM2QoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgQ19kKGEsYixjLHlkYihMRChkKSkseWRiKExEKGUpKSxmKX07dmFyIEM3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMScsMTMwNyk7WWNiKDEzMDgsQUZlLHt9LEMzZCk7Xy56bD1mdW5jdGlvbiBEM2QoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IGtfZChhLGIsYyxKRChkLDIxOSkuYSxKRChlLDIxOSkuYSl9O18uQWw9ZnVuY3Rpb24gRTNkKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IGxfZChhLGIsYyxKRChkLDIxOSkuYSxKRChlLDIxOSkuYSxmKX07dmFyIEQ3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMicsMTMwOCk7WWNiKDEzMDksQUZlLHt9LEYzZCk7Xy56bD1mdW5jdGlvbiBHM2QoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IG1fZChhLGIsYyxKRChkLDE3OSkuYSxKRChlLDE3OSkuYSl9O18uQWw9ZnVuY3Rpb24gSDNkKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IG5fZChhLGIsYyxKRChkLDE3OSkuYSxKRChlLDE3OSkuYSxmKX07dmFyIEU3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhL05vdGlmaWNhdGlvbkNyZWF0b3IvMycsMTMwOSk7WWNiKDEzMTAsQUZlLHt9LEkzZCk7Xy56bD1mdW5jdGlvbiBKM2QoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IG9fZChhLGIsYyxCZWIoTUQoZCkpLEJlYihNRChlKSkpfTtfLkFsPWZ1bmN0aW9uIEszZChhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyBwX2QoYSxiLGMsQmViKE1EKGQpKSxCZWIoTUQoZSkpLGYpfTt2YXIgRjc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci80JywxMzEwKTtZY2IoMTMxMSxBRmUse30sTDNkKTtfLnpsPWZ1bmN0aW9uIE0zZChhLGIsYyxkLGUpe3JldHVybiBuZXcgcV9kKGEsYixjLEpEKGQsMTYwKS5hLEpEKGUsMTYwKS5hKX07Xy5BbD1mdW5jdGlvbiBOM2QoYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgcl9kKGEsYixjLEpEKGQsMTYwKS5hLEpEKGUsMTYwKS5hLGYpfTt2YXIgRzc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGEvTm90aWZpY2F0aW9uQ3JlYXRvci81JywxMzExKTtZY2IoMTMxMixBRmUse30sTzNkKTtfLnpsPWZ1bmN0aW9uIFAzZChhLGIsYyxkLGUpe3JldHVybiBuZXcgc19kKGEsYixjLEpEKGQsMTcpLmEsSkQoZSwxNykuYSl9O18uQWw9ZnVuY3Rpb24gUTNkKGEsYixjLGQsZSxmKXtyZXR1cm4gbmV3IHRfZChhLGIsYyxKRChkLDE3KS5hLEpEKGUsMTcpLmEsZil9O3ZhciBINz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzYnLDEzMTIpO1ljYigxMzEzLEFGZSx7fSxSM2QpO18uemw9ZnVuY3Rpb24gUzNkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyB1X2QoYSxiLGMsSkQoZCwxOTApLmEsSkQoZSwxOTApLmEpfTtfLkFsPWZ1bmN0aW9uIFQzZChhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyB2X2QoYSxiLGMsSkQoZCwxOTApLmEsSkQoZSwxOTApLmEsZil9O3ZhciBJNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzcnLDEzMTMpO1ljYigxMzE0LEFGZSx7fSxVM2QpO18uemw9ZnVuY3Rpb24gVjNkKGEsYixjLGQsZSl7cmV0dXJuIG5ldyB6X2QoYSxiLGMsSkQoZCwxOTEpLmEsSkQoZSwxOTEpLmEpfTtfLkFsPWZ1bmN0aW9uIFczZChhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyBBX2QoYSxiLGMsSkQoZCwxOTEpLmEsSkQoZSwxOTEpLmEsZil9O3ZhciBKNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YS9Ob3RpZmljYXRpb25DcmVhdG9yLzgnLDEzMTQpO1ljYigxMjkyLDU1Nix7fSxYM2QpO18ueWw9ZnVuY3Rpb24gWTNkKGEpe2lmKCF0aGlzLmEuY2soYSkpe3Rocm93IHNjYihuZXcgemViKHlGZStyYihhKSt6RmUrdGhpcy5hKyInIikpfX07dmFyIEw3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhRHluYW1pYycsMTI5Mik7WWNiKDEyOTMsNTU2LHt9LFozZCk7Xy55bD1mdW5jdGlvbiAkM2QoYSl7fTt2YXIgTTc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZURhdGFTdGF0aWMnLDEyOTMpO1ljYig3NjUsNTU2LHt9KTtfLnlrPWZ1bmN0aW9uIF8zZChhLGIsYyl7dmFyIGQ7ZD1iLmhpKGMpO3JldHVybiBkIT1udWxsfTtfLnprPWZ1bmN0aW9uIGE0ZChhLGIsYyxkKXt2YXIgZSxmO2lmKGEucmgoKSYmYS5zaCgpKXtlPXRydWU7Zj1iLmhpKGMpO2lmKGY9PW51bGwpe2U9ZmFsc2U7Zj10aGlzLmJ9ZWxzZSBYRChmKT09PVhEKE0yZCkmJihmPW51bGwpO2lmKGQ9PW51bGwpe2lmKHRoaXMuYyE9bnVsbCl7Yi5paShjLG51bGwpO2Q9dGhpcy5ifWVsc2V7Yi5paShjLE0yZCl9fWVsc2V7dGhpcy55bChkKTtiLmlpKGMsZCl9V3BkKGEsdGhpcy5kLkFsKGEsMSx0aGlzLmUsZixkLCFlKSl9ZWxzZXtpZihkPT1udWxsKXt0aGlzLmMhPW51bGw/Yi5paShjLG51bGwpOmIuaWkoYyxNMmQpfWVsc2V7dGhpcy55bChkKTtiLmlpKGMsZCl9fX07Xy5Caz1mdW5jdGlvbiBiNGQoYSxiLGMpe3ZhciBkLGU7aWYoYS5yaCgpJiZhLnNoKCkpe2Q9dHJ1ZTtlPWIuaGkoYyk7aWYoZT09bnVsbCl7ZD1mYWxzZTtlPXRoaXMuYn1lbHNlIFhEKGUpPT09WEQoTTJkKSYmKGU9bnVsbCk7Yi5qaShjKTtXcGQoYSx0aGlzLmQuQWwoYSwyLHRoaXMuZSxlLHRoaXMuYixkKSl9ZWxzZXtiLmppKGMpfX07dmFyIFA3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVEYXRhVW5zZXR0YWJsZScsNzY1KTtZY2IoMTI5NCw3NjUse30sYzRkKTtfLnlsPWZ1bmN0aW9uIGQ0ZChhKXtpZighdGhpcy5hLmNrKGEpKXt0aHJvdyBzY2IobmV3IHplYih5RmUrcmIoYSkrekZlK3RoaXMuYSsiJyIpKX19O3ZhciBONz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVEeW5hbWljJywxMjk0KTtZY2IoMTI5NSw3NjUse30sZTRkKTtfLnlsPWZ1bmN0aW9uIGY0ZChhKXt9O3ZhciBPNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRGF0YVVuc2V0dGFibGVTdGF0aWMnLDEyOTUpO1ljYigzOTksNDk2LHt9LGc0ZCk7Xy52az1mdW5jdGlvbiBpNGQoYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqO2o9Yi5oaShjKTtpZih0aGlzLnFrKCkmJlhEKGopPT09WEQoTTJkKSl7cmV0dXJuIG51bGx9ZWxzZSBpZih0aGlzLiRrKCkmJmQmJmohPW51bGwpe2g9SkQoaiw1Mik7aWYoaC5SaCgpKXtpPXpxZChhLGgpO2lmKGghPWkpe2lmKCEkU2QodGhpcy5hLGkpKXt0aHJvdyBzY2IobmV3IHplYih5RmUrcmIoaSkrekZlK3RoaXMuYSsiJyIpKX1iLmlpKGMsaj1pKTtpZih0aGlzLlprKCkpe2Y9SkQoaSw1Mik7Zz1oLlBoKGEsIXRoaXMuYj8tMS1XVGQoYS56aCgpLHRoaXMuZSk6V1RkKGguemgoKSx0aGlzLmIpLG51bGwsbnVsbCk7IWYuTGgoKSYmKGc9Zi5OaChhLCF0aGlzLmI/LTEtV1RkKGEuemgoKSx0aGlzLmUpOldUZChmLnpoKCksdGhpcy5iKSxudWxsLGcpKTshIWcmJmcubGooKX1hLnJoKCkmJmEuc2goKSYmV3BkKGEsbmV3IHdfZChhLDksdGhpcy5lLGgsaSkpfX1yZXR1cm4gan1lbHNle3JldHVybiBqfX07Xy53az1mdW5jdGlvbiBqNGQoYSxiLGMsZCxlKXt2YXIgZixnO2c9Yi5oaShjKTtYRChnKT09PVhEKE0yZCkmJihnPW51bGwpO2IuaWkoYyxkKTtpZih0aGlzLkpqKCkpe2lmKFhEKGcpIT09WEQoZCkmJmchPW51bGwpe2Y9SkQoZyw1Mik7ZT1mLlBoKGEsV1RkKGYuemgoKSx0aGlzLmIpLG51bGwsZSl9fWVsc2UgdGhpcy5aaygpJiZnIT1udWxsJiYoZT1KRChnLDUyKS5QaChhLC0xLVdUZChhLnpoKCksdGhpcy5lKSxudWxsLGUpKTtpZihhLnJoKCkmJmEuc2goKSl7IWUmJihlPW5ldyBGR2QoNCkpO2Uua2oobmV3IHdfZChhLDEsdGhpcy5lLGcsZCkpfXJldHVybiBlfTtfLnhrPWZ1bmN0aW9uIGs0ZChhLGIsYyxkLGUpe3ZhciBmO2Y9Yi5oaShjKTtYRChmKT09PVhEKE0yZCkmJihmPW51bGwpO2IuamkoYyk7aWYoYS5yaCgpJiZhLnNoKCkpeyFlJiYoZT1uZXcgRkdkKDQpKTt0aGlzLnFrKCk/ZS5raihuZXcgd19kKGEsMix0aGlzLmUsZixudWxsKSk6ZS5raihuZXcgd19kKGEsMSx0aGlzLmUsZixudWxsKSl9cmV0dXJuIGV9O18ueWs9ZnVuY3Rpb24gbDRkKGEsYixjKXt2YXIgZDtkPWIuaGkoYyk7cmV0dXJuIGQhPW51bGx9O18uems9ZnVuY3Rpb24gbTRkKGEsYixjLGQpe3ZhciBlLGYsZyxoLGk7aWYoZCE9bnVsbCYmISRTZCh0aGlzLmEsZCkpe3Rocm93IHNjYihuZXcgemViKHlGZSsoUkQoZCw1Nyk/X1RkKEpEKGQsNTcpLnpoKCkpOmZlYihyYihkKSkpK3pGZSt0aGlzLmErIiciKSl9aT1iLmhpKGMpO2g9aSE9bnVsbDt0aGlzLnFrKCkmJlhEKGkpPT09WEQoTTJkKSYmKGk9bnVsbCk7Zz1udWxsO2lmKHRoaXMuSmooKSl7aWYoWEQoaSkhPT1YRChkKSl7aWYoaSE9bnVsbCl7ZT1KRChpLDUyKTtnPWUuUGgoYSxXVGQoZS56aCgpLHRoaXMuYiksbnVsbCxnKX1pZihkIT1udWxsKXtlPUpEKGQsNTIpO2c9ZS5OaChhLFdUZChlLnpoKCksdGhpcy5iKSxudWxsLGcpfX19ZWxzZSBpZih0aGlzLlprKCkpe2lmKFhEKGkpIT09WEQoZCkpe2khPW51bGwmJihnPUpEKGksNTIpLlBoKGEsLTEtV1RkKGEuemgoKSx0aGlzLmUpLG51bGwsZykpO2QhPW51bGwmJihnPUpEKGQsNTIpLk5oKGEsLTEtV1RkKGEuemgoKSx0aGlzLmUpLG51bGwsZykpfX1kPT1udWxsJiZ0aGlzLnFrKCk/Yi5paShjLE0yZCk6Yi5paShjLGQpO2lmKGEucmgoKSYmYS5zaCgpKXtmPW5ldyB5X2QoYSwxLHRoaXMuZSxpLGQsdGhpcy5xaygpJiYhaCk7aWYoIWcpe1dwZChhLGYpfWVsc2V7Zy5raihmKTtnLmxqKCl9fWVsc2UgISFnJiZnLmxqKCl9O18uQms9ZnVuY3Rpb24gbjRkKGEsYixjKXt2YXIgZCxlLGYsZyxoO2g9Yi5oaShjKTtnPWghPW51bGw7dGhpcy5xaygpJiZYRChoKT09PVhEKE0yZCkmJihoPW51bGwpO2Y9bnVsbDtpZihoIT1udWxsKXtpZih0aGlzLkpqKCkpe2Q9SkQoaCw1Mik7Zj1kLlBoKGEsV1RkKGQuemgoKSx0aGlzLmIpLG51bGwsZil9ZWxzZSB0aGlzLlprKCkmJihmPUpEKGgsNTIpLlBoKGEsLTEtV1RkKGEuemgoKSx0aGlzLmUpLG51bGwsZikpfWIuamkoYyk7aWYoYS5yaCgpJiZhLnNoKCkpe2U9bmV3IHlfZChhLHRoaXMucWsoKT8yOjEsdGhpcy5lLGgsbnVsbCxnKTtpZighZil7V3BkKGEsZSl9ZWxzZXtmLmtqKGUpO2YubGooKX19ZWxzZSAhIWYmJmYubGooKX07Xy5Kaj1mdW5jdGlvbiBvNGQoKXtyZXR1cm4gZmFsc2V9O18uWms9ZnVuY3Rpb24gcDRkKCl7cmV0dXJuIGZhbHNlfTtfLiRrPWZ1bmN0aW9uIHE0ZCgpe3JldHVybiBmYWxzZX07Xy5xaz1mdW5jdGlvbiByNGQoKXtyZXR1cm4gZmFsc2V9O3ZhciBlOD1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdCcsMzk5KTtZY2IoNTU3LDM5OSx7fSxzNGQpO18uWms9ZnVuY3Rpb24gdDRkKCl7cmV0dXJuIHRydWV9O3ZhciBZNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50Jyw1NTcpO1ljYigxMjk4LDU1Nyx7fSx1NGQpO18uJGs9ZnVuY3Rpb24gdjRkKCl7cmV0dXJuIHRydWV9O3ZhciBSNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50UmVzb2x2aW5nJywxMjk4KTtZY2IoNzY3LDU1Nyx7fSx3NGQpO18ucWs9ZnVuY3Rpb24geDRkKCl7cmV0dXJuIHRydWV9O3ZhciBUNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50VW5zZXR0YWJsZScsNzY3KTtZY2IoMTMwMCw3Njcse30seTRkKTtfLiRrPWZ1bmN0aW9uIHo0ZCgpe3JldHVybiB0cnVlfTt2YXIgUzc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFVuc2V0dGFibGVSZXNvbHZpbmcnLDEzMDApO1ljYig2MzMsNTU3LHt9LEE0ZCk7Xy5Kaj1mdW5jdGlvbiBCNGQoKXtyZXR1cm4gdHJ1ZX07dmFyIFg3PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZScsNjMzKTtZY2IoMTI5OSw2MzMse30sQzRkKTtfLiRrPWZ1bmN0aW9uIEQ0ZCgpe3JldHVybiB0cnVlfTt2YXIgVTc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlUmVzb2x2aW5nJywxMjk5KTtZY2IoNzY4LDYzMyx7fSxFNGQpO18ucWs9ZnVuY3Rpb24gRjRkKCl7cmV0dXJuIHRydWV9O3ZhciBXNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlJyw3NjgpO1ljYigxMzAxLDc2OCx7fSxHNGQpO18uJGs9ZnVuY3Rpb24gSDRkKCl7cmV0dXJuIHRydWV9O3ZhciBWNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VVbnNldHRhYmxlUmVzb2x2aW5nJywxMzAxKTtZY2IoNjM0LDM5OSx7fSxJNGQpO18uJGs9ZnVuY3Rpb24gSjRkKCl7cmV0dXJuIHRydWV9O3ZhciBhOD1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZycsNjM0KTtZY2IoMTMwMiw2MzQse30sSzRkKTtfLnFrPWZ1bmN0aW9uIEw0ZCgpe3JldHVybiB0cnVlfTt2YXIgWjc9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RSZXNvbHZpbmdVbnNldHRhYmxlJywxMzAyKTtZY2IoNzY5LDYzNCx7fSxNNGQpO18uSmo9ZnVuY3Rpb24gTjRkKCl7cmV0dXJuIHRydWV9O3ZhciBfNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZ1dpdGhJbnZlcnNlJyw3NjkpO1ljYigxMzAzLDc2OSx7fSxPNGQpO18ucWs9ZnVuY3Rpb24gUDRkKCl7cmV0dXJuIHRydWV9O3ZhciAkNz1qZWIoVENlLCdFU3RydWN0dXJhbEZlYXR1cmVJbXBsL0ludGVybmFsU2V0dGluZ0RlbGVnYXRlU2luZ2xlRU9iamVjdFJlc29sdmluZ1dpdGhJbnZlcnNlVW5zZXR0YWJsZScsMTMwMyk7WWNiKDEyOTYsMzk5LHt9LFE0ZCk7Xy5xaz1mdW5jdGlvbiBSNGQoKXtyZXR1cm4gdHJ1ZX07dmFyIGI4PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW50ZXJuYWxTZXR0aW5nRGVsZWdhdGVTaW5nbGVFT2JqZWN0VW5zZXR0YWJsZScsMTI5Nik7WWNiKDc2NiwzOTkse30sUzRkKTtfLkpqPWZ1bmN0aW9uIFQ0ZCgpe3JldHVybiB0cnVlfTt2YXIgZDg9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RXaXRoSW52ZXJzZScsNzY2KTtZY2IoMTI5Nyw3NjYse30sVTRkKTtfLnFrPWZ1bmN0aW9uIFY0ZCgpe3JldHVybiB0cnVlfTt2YXIgYzg9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9JbnRlcm5hbFNldHRpbmdEZWxlZ2F0ZVNpbmdsZUVPYmplY3RXaXRoSW52ZXJzZVVuc2V0dGFibGUnLDEyOTcpO1ljYig3NzAsNTU4LHhGZSxZNGQpO18udmw9ZnVuY3Rpb24gWjRkKGEpe3JldHVybiBuZXcgWTRkKHRoaXMuYSx0aGlzLmMsYSl9O18ua2Q9ZnVuY3Rpb24gJDRkKCl7cmV0dXJuIHRoaXMuYn07Xy53bD1mdW5jdGlvbiBfNGQoYSxiLGMpe3JldHVybiBXNGQodGhpcyxhLHRoaXMuYixjKX07Xy54bD1mdW5jdGlvbiBhNWQoYSxiLGMpe3JldHVybiBYNGQodGhpcyxhLHRoaXMuYixjKX07dmFyIGc4PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvSW52ZXJzZVVwZGF0aW5nRmVhdHVyZU1hcEVudHJ5Jyw3NzApO1ljYigxMzA0LDEsYUZlLGI1ZCk7Xy5Daz1mdW5jdGlvbiBjNWQoYSl7cmV0dXJuIHRoaXMuYX07Xy5Oaj1mdW5jdGlvbiBkNWQoKXtyZXR1cm4gUkQodGhpcy5hLDk2KT9KRCh0aGlzLmEsOTYpLk5qKCk6IXRoaXMuYS5kYygpfTtfLldiPWZ1bmN0aW9uIGU1ZChhKXt0aGlzLmEuJGIoKTt0aGlzLmEuRmMoSkQoYSwxNSkpfTtfLkRrPWZ1bmN0aW9uIGY1ZCgpe1JEKHRoaXMuYSw5Nik/SkQodGhpcy5hLDk2KS5EaygpOnRoaXMuYS4kYigpfTt2YXIgaDg9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9TZXR0aW5nTWFueScsMTMwNCk7WWNiKDEzMDUsNTU4LHhGZSxnNWQpO18udWw9ZnVuY3Rpb24gaDVkKGEpe3JldHVybiBuZXcgbDVkKChJaGUoKSxIaGUpLHRoaXMuYi5uaSh0aGlzLmEsYSkpfTtfLmtkPWZ1bmN0aW9uIGk1ZCgpe3JldHVybiBudWxsfTtfLndsPWZ1bmN0aW9uIGo1ZChhLGIsYyl7cmV0dXJuIGN9O18ueGw9ZnVuY3Rpb24gazVkKGEsYixjKXtyZXR1cm4gY307dmFyIGk4PWplYihUQ2UsJ0VTdHJ1Y3R1cmFsRmVhdHVyZUltcGwvU2ltcGxlQ29udGVudEZlYXR1cmVNYXBFbnRyeScsMTMwNSk7WWNiKDYzNSw1NTgseEZlLGw1ZCk7Xy51bD1mdW5jdGlvbiBtNWQoYSl7cmV0dXJuIG5ldyBsNWQodGhpcy5jLGEpfTtfLmtkPWZ1bmN0aW9uIG41ZCgpe3JldHVybiB0aGlzLmF9O18ud2w9ZnVuY3Rpb24gbzVkKGEsYixjKXtyZXR1cm4gY307Xy54bD1mdW5jdGlvbiBwNWQoYSxiLGMpe3JldHVybiBjfTt2YXIgajg9amViKFRDZSwnRVN0cnVjdHVyYWxGZWF0dXJlSW1wbC9TaW1wbGVGZWF0dXJlTWFwRW50cnknLDYzNSk7WWNiKDM5NCw0OTAsUURlLHE1ZCk7Xy5aaT1mdW5jdGlvbiByNWQoYSl7cmV0dXJuIFNDKF81LE5xZSwyOSxhLDAsMSl9O18uVmk9ZnVuY3Rpb24gczVkKCl7cmV0dXJuIGZhbHNlfTt2YXIgbDg9amViKFRDZSwnRVN1cGVyQWRhcHRlci8xJywzOTQpO1ljYig0NDMsNDM2LHsxMDk6MSw5MzoxLDkyOjEsMTU0OjEsMTk3OjEsNTc6MSwxMTM6MSw4Mjk6MSw1MjoxLDk4OjEsMTU3OjEsNDQzOjEsMTE3OjEsMTE4OjF9LHU1ZCk7Xy5IaD1mdW5jdGlvbiB2NWQoYSxiLGMpe3ZhciBkO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSksdGhpcy5BYjtjYXNlIDE6cmV0dXJuIHRoaXMuemI7Y2FzZSAyOnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBENWQodGhpcyxnNix0aGlzKSksdGhpcy5hO31yZXR1cm4gZHFkKHRoaXMsYS1WVGQoKGNQZCgpLGJQZCkpLFFUZCgoZD1KRChDcmQodGhpcywxNiksMjkpLCFkP2JQZDpkKSxhKSxiLGMpfTtfLlFoPWZ1bmN0aW9uIHc1ZChhLGIsYyl7dmFyIGQsZTtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpLFFHZCh0aGlzLkFiLGEsYyk7Y2FzZSAyOnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBENWQodGhpcyxnNix0aGlzKSksUUdkKHRoaXMuYSxhLGMpO31yZXR1cm4gZT1KRChRVGQoKGQ9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhZD8oY1BkKCksYlBkKTpkKSxiKSw2OSksZS50aygpLnhrKHRoaXMsQXJkKHRoaXMpLGItVlRkKChjUGQoKSxiUGQpKSxhLGMpfTtfLlNoPWZ1bmN0aW9uIHg1ZChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuQWImJnRoaXMuQWIuaSE9MDtjYXNlIDE6cmV0dXJuIHRoaXMuemIhPW51bGw7Y2FzZSAyOnJldHVybiAhIXRoaXMuYSYmdGhpcy5hLmkhPTA7fXJldHVybiBlcWQodGhpcyxhLVZUZCgoY1BkKCksYlBkKSksUVRkKChiPUpEKENyZCh0aGlzLDE2KSwyOSksIWI/YlBkOmIpLGEpKX07Xy5aaD1mdW5jdGlvbiB5NWQoYSxiKXt2YXIgYztzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7UkdkKHRoaXMuQWIpOyF0aGlzLkFiJiYodGhpcy5BYj1uZXcgWDBkKFo1LHRoaXMsMCwzKSk7dkNkKHRoaXMuQWIsSkQoYiwxNikpO3JldHVybjtjYXNlIDE6cnZkKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDI6IXRoaXMuYSYmKHRoaXMuYT1uZXcgRDVkKHRoaXMsZzYsdGhpcykpO1JHZCh0aGlzLmEpOyF0aGlzLmEmJih0aGlzLmE9bmV3IEQ1ZCh0aGlzLGc2LHRoaXMpKTt2Q2QodGhpcy5hLEpEKGIsMTYpKTtyZXR1cm47fWZxZCh0aGlzLGEtVlRkKChjUGQoKSxiUGQpKSxRVGQoKGM9SkQoQ3JkKHRoaXMsMTYpLDI5KSwhYz9iUGQ6YyksYSksYil9O18uZWk9ZnVuY3Rpb24gejVkKCl7cmV0dXJuIGNQZCgpLGJQZH07Xy5naT1mdW5jdGlvbiBBNWQoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5BYiYmKHRoaXMuQWI9bmV3IFgwZChaNSx0aGlzLDAsMykpO1JHZCh0aGlzLkFiKTtyZXR1cm47Y2FzZSAxOnJ2ZCh0aGlzLG51bGwpO3JldHVybjtjYXNlIDI6IXRoaXMuYSYmKHRoaXMuYT1uZXcgRDVkKHRoaXMsZzYsdGhpcykpO1JHZCh0aGlzLmEpO3JldHVybjt9Z3FkKHRoaXMsYS1WVGQoKGNQZCgpLGJQZCkpLFFUZCgoYj1KRChDcmQodGhpcywxNiksMjkpLCFiP2JQZDpiKSxhKSl9O3ZhciByOD1qZWIoVENlLCdFVHlwZVBhcmFtZXRlckltcGwnLDQ0Myk7WWNiKDQ0NCw4MSxwRmUsRDVkKTtfLktqPWZ1bmN0aW9uIEU1ZChhLGIpe3JldHVybiBCNWQodGhpcyxKRChhLDg3KSxiKX07Xy5Maj1mdW5jdGlvbiBGNWQoYSxiKXtyZXR1cm4gQzVkKHRoaXMsSkQoYSw4NyksYil9O3ZhciBuOD1qZWIoVENlLCdFVHlwZVBhcmFtZXRlckltcGwvMScsNDQ0KTtZY2IoNjMyLDQ1LGJ0ZSxHNWQpO18uZWM9ZnVuY3Rpb24gSDVkKCl7cmV0dXJuIG5ldyBLNWQodGhpcyl9O3ZhciBxOD1qZWIoVENlLCdFVHlwZVBhcmFtZXRlckltcGwvMicsNjMyKTtZY2IoNTUzLCRxZSxfcWUsSzVkKTtfLkVjPWZ1bmN0aW9uIEw1ZChhKXtyZXR1cm4gSTVkKHRoaXMsSkQoYSw4NykpfTtfLkZjPWZ1bmN0aW9uIE01ZChhKXt2YXIgYixjLGQ7ZD1mYWxzZTtmb3IoYz1hLkpjKCk7Yy5PYigpOyl7Yj1KRChjLlBiKCksODcpO1FpYih0aGlzLmEsYiwnJyk9PW51bGwmJihkPXRydWUpfXJldHVybiBkfTtfLiRiPWZ1bmN0aW9uIE41ZCgpe1RpYih0aGlzLmEpfTtfLkdjPWZ1bmN0aW9uIE81ZChhKXtyZXR1cm4gTGliKHRoaXMuYSxhKX07Xy5KYz1mdW5jdGlvbiBQNWQoKXt2YXIgYTtyZXR1cm4gYT1uZXcgbWpiKChuZXcgZGpiKHRoaXMuYSkpLmEpLG5ldyBTNWQoYSl9O18uS2M9ZnVuY3Rpb24gUTVkKGEpe3JldHVybiBKNWQodGhpcyxhKX07Xy5nYz1mdW5jdGlvbiBSNWQoKXtyZXR1cm4gVWliKHRoaXMuYSl9O3ZhciBwOD1qZWIoVENlLCdFVHlwZVBhcmFtZXRlckltcGwvMi8xJyw1NTMpO1ljYig1NTQsMSxXcWUsUzVkKTtfLk5iPWZ1bmN0aW9uIFQ1ZChhKXtPc2IodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBWNWQoKXtyZXR1cm4gSkQoa2piKHRoaXMuYSkuamQoKSw4Nyl9O18uT2I9ZnVuY3Rpb24gVTVkKCl7cmV0dXJuIHRoaXMuYS5ifTtfLlFiPWZ1bmN0aW9uIFc1ZCgpe2xqYih0aGlzLmEpfTt2YXIgbzg9amViKFRDZSwnRVR5cGVQYXJhbWV0ZXJJbXBsLzIvMS8xJyw1NTQpO1ljYigxMjcwLDQ1LGJ0ZSxYNWQpO18uX2I9ZnVuY3Rpb24gWTVkKGEpe3JldHVybiBWRChhKT9QaWIodGhpcyxhKTohIWZzYih0aGlzLmYsYSl9O18ueGM9ZnVuY3Rpb24gWjVkKGEpe3ZhciBiLGM7Yj1WRChhKT9PaWIodGhpcyxhKTpXZChmc2IodGhpcy5mLGEpKTtpZihSRChiLDgzMCkpe2M9SkQoYiw4MzApO2I9Yy5IaygpO1FpYih0aGlzLEpEKGEsMjQwKSxiKTtyZXR1cm4gYn1lbHNlIHJldHVybiBiIT1udWxsP2I6YT09bnVsbD8oX2RlKCksJGRlKTpudWxsfTt2YXIgdDg9amViKFRDZSwnRVZhbGlkYXRvclJlZ2lzdHJ5SW1wbCcsMTI3MCk7WWNiKDEyODgsNzA0LHsxMDk6MSw5MzoxLDkyOjEsNDY2OjEsMTU0OjEsNTc6MSwxMTM6MSwxOTg2OjEsNTI6MSw5ODoxLDE1NzoxLDExNzoxLDExODoxfSxmNmQpO18ubmk9ZnVuY3Rpb24gZzZkKGEsYil7c3dpdGNoKGEuZWsoKSl7Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNDpjYXNlIDI2OmNhc2UgMzE6Y2FzZSAzMjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ4OmNhc2UgNDk6Y2FzZSAyMDpyZXR1cm4gYj09bnVsbD9udWxsOmFkYihiKTtjYXNlIDI1OnJldHVybiBfNWQoYik7Y2FzZSAyNzpyZXR1cm4gYTZkKGIpO2Nhc2UgMjg6cmV0dXJuIGI2ZChiKTtjYXNlIDI5OnJldHVybiBiPT1udWxsP251bGw6dlpkKFJ1ZFswXSxKRChiLDIwNSkpO2Nhc2UgNDE6cmV0dXJuIGI9PW51bGw/Jyc6ZWViKEpEKGIsMjk1KSk7Y2FzZSA0MjpyZXR1cm4gYWRiKGIpO2Nhc2UgNTA6cmV0dXJuIE9EKGIpO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoV0NlK2EudmUoKStYQ2UpKTt9fTtfLm9pPWZ1bmN0aW9uIGg2ZChhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscTtzd2l0Y2goYS5HPT0tMSYmKGEuRz0obT1XU2QoYSksbT9BVWQobS5yaSgpLGEpOi0xKSksYS5HKXtjYXNlIDA6cmV0dXJuIGM9bmV3IEhTZCxjO2Nhc2UgMTpyZXR1cm4gYj1uZXcgS1FkLGI7Y2FzZSAyOnJldHVybiBkPW5ldyBhVWQsZDtjYXNlIDQ6cmV0dXJuIGU9bmV3IEZZZCxlO2Nhc2UgNTpyZXR1cm4gZj1uZXcgVllkLGY7Y2FzZSA2OnJldHVybiBnPW5ldyBrWmQsZztjYXNlIDc6cmV0dXJuIGg9bmV3IGF2ZCxoO2Nhc2UgMTA6cmV0dXJuIGo9bmV3IEZQZCxqO2Nhc2UgMTE6cmV0dXJuIGs9bmV3IExfZCxrO2Nhc2UgMTI6cmV0dXJuIGw9bmV3IGd3ZCxsO2Nhc2UgMTM6cmV0dXJuIG49bmV3IGsxZCxuO2Nhc2UgMTQ6cmV0dXJuIG89bmV3IHkxZCxvO2Nhc2UgMTc6cmV0dXJuIHA9bmV3IFExZCxwO2Nhc2UgMTg6cmV0dXJuIGk9bmV3IE5aZCxpO2Nhc2UgMTk6cmV0dXJuIHE9bmV3IHU1ZCxxO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoJENlK2EuemIrWENlKSk7fX07Xy5waT1mdW5jdGlvbiBpNmQoYSxiKXtzd2l0Y2goYS5laygpKXtjYXNlIDIwOnJldHVybiBiPT1udWxsP251bGw6bmV3IHNoYihiKTtjYXNlIDIxOnJldHVybiBiPT1udWxsP251bGw6bmV3IFhoYihiKTtjYXNlIDIzOmNhc2UgMjI6cmV0dXJuIGI9PW51bGw/bnVsbDokNWQoYik7Y2FzZSAyNjpjYXNlIDI0OnJldHVybiBiPT1udWxsP251bGw6UmRiKEZkYihiLC0xMjgsMTI3KTw8MjQ+PjI0KTtjYXNlIDI1OnJldHVybiBadWQoYik7Y2FzZSAyNzpyZXR1cm4gYzZkKGIpO2Nhc2UgMjg6cmV0dXJuIGQ2ZChiKTtjYXNlIDI5OnJldHVybiBlNmQoYik7Y2FzZSAzMjpjYXNlIDMxOnJldHVybiBiPT1udWxsP251bGw6RWRiKGIpO2Nhc2UgMzg6Y2FzZSAzNzpyZXR1cm4gYj09bnVsbD9udWxsOm5ldyBMZWIoYik7Y2FzZSA0MDpjYXNlIDM5OnJldHVybiBiPT1udWxsP251bGw6amZiKEZkYihiLExyZSxIcWUpKTtjYXNlIDQxOnJldHVybiBudWxsO2Nhc2UgNDI6cmV0dXJuIGI9PW51bGw/bnVsbDpudWxsO2Nhc2UgNDQ6Y2FzZSA0MzpyZXR1cm4gYj09bnVsbD9udWxsOnlmYihHZGIoYikpO2Nhc2UgNDk6Y2FzZSA0ODpyZXR1cm4gYj09bnVsbD9udWxsOlVmYihGZGIoYixDRmUsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTA6cmV0dXJuIGI7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYihXQ2UrYS52ZSgpK1hDZSkpO319O3ZhciB1OD1qZWIoVENlLCdFY29yZUZhY3RvcnlJbXBsJywxMjg4KTtZY2IoNTQ1LDE4NCx7MTA5OjEsOTM6MSw5MjoxLDE1NDoxLDE5NzoxLDU3OjEsMjQwOjEsMTEzOjEsMTk4NDoxLDUyOjEsOTg6MSwxNTc6MSwxODQ6MSw1NDU6MSwxMTc6MSwxMTg6MSw2NzU6MX0sdDZkKTtfLmdiPWZhbHNlO18uaGI9ZmFsc2U7dmFyIGs2ZCxsNmQ9ZmFsc2U7dmFyIGw5PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwnLDU0NSk7WWNiKDExOTQsMSx7ODMwOjF9LHg2ZCk7Xy5Iaz1mdW5jdGlvbiB5NmQoKXtyZXR1cm4gQWZlKCksemZlfTt2YXIgRjg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8xJywxMTk0KTtZY2IoMTIwMywxLFBGZSx6NmQpO18uY2s9ZnVuY3Rpb24gQTZkKGEpe3JldHVybiBSRChhLDE1NCl9O18uZGs9ZnVuY3Rpb24gQjZkKGEpe3JldHVybiBTQyhoNixOcWUsMTU0LGEsMCwxKX07dmFyIHY4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMTAnLDEyMDMpO1ljYigxMjA0LDEsUEZlLEM2ZCk7Xy5jaz1mdW5jdGlvbiBENmQoYSl7cmV0dXJuIFJEKGEsMTk3KX07Xy5kaz1mdW5jdGlvbiBFNmQoYSl7cmV0dXJuIFNDKGk2LE5xZSwxOTcsYSwwLDEpfTt2YXIgdzg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8xMScsMTIwNCk7WWNiKDEyMDUsMSxQRmUsRjZkKTtfLmNrPWZ1bmN0aW9uIEc2ZChhKXtyZXR1cm4gUkQoYSw1Nyl9O18uZGs9ZnVuY3Rpb24gSDZkKGEpe3JldHVybiBTQyhqNixOcWUsNTcsYSwwLDEpfTt2YXIgeDg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8xMicsMTIwNSk7WWNiKDEyMDYsMSxQRmUsSTZkKTtfLmNrPWZ1bmN0aW9uIEo2ZChhKXtyZXR1cm4gUkQoYSw0MDApfTtfLmRrPWZ1bmN0aW9uIEs2ZChhKXtyZXR1cm4gU0MoazYsbkZlLDYyLGEsMCwxKX07dmFyIHk4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMTMnLDEyMDYpO1ljYigxMjA3LDEsUEZlLEw2ZCk7Xy5jaz1mdW5jdGlvbiBNNmQoYSl7cmV0dXJuIFJEKGEsMjQwKX07Xy5kaz1mdW5jdGlvbiBONmQoYSl7cmV0dXJuIFNDKGw2LE5xZSwyNDAsYSwwLDEpfTt2YXIgejg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8xNCcsMTIwNyk7WWNiKDEyMDgsMSxQRmUsTzZkKTtfLmNrPWZ1bmN0aW9uIFA2ZChhKXtyZXR1cm4gUkQoYSw1MDIpfTtfLmRrPWZ1bmN0aW9uIFE2ZChhKXtyZXR1cm4gU0MobTYsTnFlLDIwNjIsYSwwLDEpfTt2YXIgQTg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8xNScsMTIwOCk7WWNiKDEyMDksMSxQRmUsUjZkKTtfLmNrPWZ1bmN0aW9uIFM2ZChhKXtyZXR1cm4gUkQoYSwxMDEpfTtfLmRrPWZ1bmN0aW9uIFQ2ZChhKXtyZXR1cm4gU0MobjYsbUZlLDE5LGEsMCwxKX07dmFyIEI4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMTYnLDEyMDkpO1ljYigxMjEwLDEsUEZlLFU2ZCk7Xy5jaz1mdW5jdGlvbiBWNmQoYSl7cmV0dXJuIFJEKGEsMTc4KX07Xy5kaz1mdW5jdGlvbiBXNmQoYSl7cmV0dXJuIFNDKHE2LG1GZSwxNzgsYSwwLDEpfTt2YXIgQzg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8xNycsMTIxMCk7WWNiKDEyMTEsMSxQRmUsWDZkKTtfLmNrPWZ1bmN0aW9uIFk2ZChhKXtyZXR1cm4gUkQoYSw0NjcpfTtfLmRrPWZ1bmN0aW9uIFo2ZChhKXtyZXR1cm4gU0MoczYsTnFlLDQ2NyxhLDAsMSl9O3ZhciBEOD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzE4JywxMjExKTtZY2IoMTIxMiwxLFBGZSwkNmQpO18uY2s9ZnVuY3Rpb24gXzZkKGEpe3JldHVybiBSRChhLDU0Nil9O18uZGs9ZnVuY3Rpb24gYTdkKGEpe3JldHVybiBTQyh1NyxNRWUsNTQ2LGEsMCwxKX07dmFyIEU4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMTknLDEyMTIpO1ljYigxMTk1LDEsUEZlLGI3ZCk7Xy5jaz1mdW5jdGlvbiBjN2QoYSl7cmV0dXJuIFJEKGEsMzMwKX07Xy5kaz1mdW5jdGlvbiBkN2QoYSl7cmV0dXJuIFNDKCQ1LG1GZSwzNSxhLDAsMSl9O3ZhciBROD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzInLDExOTUpO1ljYigxMjEzLDEsUEZlLGU3ZCk7Xy5jaz1mdW5jdGlvbiBmN2QoYSl7cmV0dXJuIFJEKGEsMjQ2KX07Xy5kaz1mdW5jdGlvbiBnN2QoYSl7cmV0dXJuIFNDKGc2LHRGZSw4NyxhLDAsMSl9O3ZhciBHOD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzIwJywxMjEzKTtZY2IoMTIxNCwxLFBGZSxoN2QpO18uY2s9ZnVuY3Rpb24gaTdkKGEpe3JldHVybiBSRChhLDQ0Myl9O18uZGs9ZnVuY3Rpb24gajdkKGEpe3JldHVybiBTQyhyNixOcWUsODI5LGEsMCwxKX07dmFyIEg4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMjEnLDEyMTQpO1ljYigxMjE1LDEsUEZlLGs3ZCk7Xy5jaz1mdW5jdGlvbiBsN2QoYSl7cmV0dXJuIFNEKGEpfTtfLmRrPWZ1bmN0aW9uIG03ZChhKXtyZXR1cm4gU0MoR0ksaHJlLDQ3MSxhLDgsMSl9O3ZhciBJOD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzIyJywxMjE1KTtZY2IoMTIxNiwxLFBGZSxuN2QpO18uY2s9ZnVuY3Rpb24gbzdkKGEpe3JldHVybiBSRChhLDE5NSl9O18uZGs9ZnVuY3Rpb24gcDdkKGEpe3JldHVybiBTQygkRCxocmUsMTk1LGEsMCwyKX07dmFyIEo4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMjMnLDEyMTYpO1ljYigxMjE3LDEsUEZlLHE3ZCk7Xy5jaz1mdW5jdGlvbiByN2QoYSl7cmV0dXJuIFJEKGEsMjE5KX07Xy5kaz1mdW5jdGlvbiBzN2QoYSl7cmV0dXJuIFNDKEhJLGhyZSwyMTksYSwwLDEpfTt2YXIgSzg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8yNCcsMTIxNyk7WWNiKDEyMTgsMSxQRmUsdDdkKTtfLmNrPWZ1bmN0aW9uIHU3ZChhKXtyZXR1cm4gUkQoYSwxNzkpfTtfLmRrPWZ1bmN0aW9uIHY3ZChhKXtyZXR1cm4gU0MoSUksaHJlLDE3OSxhLDAsMSl9O3ZhciBMOD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzI1JywxMjE4KTtZY2IoMTIxOSwxLFBGZSx3N2QpO18uY2s9ZnVuY3Rpb24geDdkKGEpe3JldHVybiBSRChhLDIwNSl9O18uZGs9ZnVuY3Rpb24geTdkKGEpe3JldHVybiBTQyhoSyxocmUsMjA1LGEsMCwxKX07dmFyIE04PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMjYnLDEyMTkpO1ljYigxMjIwLDEsUEZlLHo3ZCk7Xy5jaz1mdW5jdGlvbiBBN2QoYSl7cmV0dXJuIGZhbHNlfTtfLmRrPWZ1bmN0aW9uIEI3ZChhKXtyZXR1cm4gU0MoTDUsTnFlLDIxNTksYSwwLDEpfTt2YXIgTjg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8yNycsMTIyMCk7WWNiKDEyMjEsMSxQRmUsQzdkKTtfLmNrPWZ1bmN0aW9uIEQ3ZChhKXtyZXR1cm4gVEQoYSl9O18uZGs9ZnVuY3Rpb24gRTdkKGEpe3JldHVybiBTQyhMSSxocmUsMzQxLGEsNywxKX07dmFyIE84PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMjgnLDEyMjEpO1ljYigxMjIyLDEsUEZlLEY3ZCk7Xy5jaz1mdW5jdGlvbiBHN2QoYSl7cmV0dXJuIFJEKGEsNjEpfTtfLmRrPWZ1bmN0aW9uIEg3ZChhKXtyZXR1cm4gU0MoUTUsbnVlLDYxLGEsMCwxKX07dmFyIFA4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMjknLDEyMjIpO1ljYigxMTk2LDEsUEZlLEk3ZCk7Xy5jaz1mdW5jdGlvbiBKN2QoYSl7cmV0dXJuIFJEKGEsNTAzKX07Xy5kaz1mdW5jdGlvbiBLN2QoYSl7cmV0dXJuIFNDKFo1LHszOjEsNDoxLDU6MSwxOTc5OjF9LDU4MixhLDAsMSl9O3ZhciBfOD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzMnLDExOTYpO1ljYigxMjIzLDEsUEZlLEw3ZCk7Xy5jaz1mdW5jdGlvbiBNN2QoYSl7cmV0dXJuIFJEKGEsNTY0KX07Xy5kaz1mdW5jdGlvbiBON2QoYSl7cmV0dXJuIFNDKFI1LE5xZSwxOTg1LGEsMCwxKX07dmFyIFI4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMzAnLDEyMjMpO1ljYigxMjI0LDEsUEZlLE83ZCk7Xy5jaz1mdW5jdGlvbiBQN2QoYSl7cmV0dXJuIFJEKGEsMTU5KX07Xy5kaz1mdW5jdGlvbiBRN2QoYSl7cmV0dXJuIFNDKExhYixudWUsMTU5LGEsMCwxKX07dmFyIFM4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMzEnLDEyMjQpO1ljYigxMjI1LDEsUEZlLFI3ZCk7Xy5jaz1mdW5jdGlvbiBTN2QoYSl7cmV0dXJuIFJEKGEsNzQpfTtfLmRrPWZ1bmN0aW9uIFQ3ZChhKXtyZXR1cm4gU0MoQmFiLFFGZSw3NCxhLDAsMSl9O3ZhciBUOD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzMyJywxMjI1KTtZY2IoMTIyNiwxLFBGZSxVN2QpO18uY2s9ZnVuY3Rpb24gVjdkKGEpe3JldHVybiBSRChhLDE2MCl9O18uZGs9ZnVuY3Rpb24gVzdkKGEpe3JldHVybiBTQyhRSSxocmUsMTYwLGEsMCwxKX07dmFyIFU4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMzMnLDEyMjYpO1ljYigxMjI3LDEsUEZlLFg3ZCk7Xy5jaz1mdW5jdGlvbiBZN2QoYSl7cmV0dXJuIFJEKGEsMTcpfTtfLmRrPWZ1bmN0aW9uIFo3ZChhKXtyZXR1cm4gU0MoVUksaHJlLDE3LGEsMCwxKX07dmFyIFY4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMzQnLDEyMjcpO1ljYigxMjI4LDEsUEZlLCQ3ZCk7Xy5jaz1mdW5jdGlvbiBfN2QoYSl7cmV0dXJuIFJEKGEsMjk1KX07Xy5kaz1mdW5jdGlvbiBhOGQoYSl7cmV0dXJuIFNDKEtJLE5xZSwyOTUsYSwwLDEpfTt2YXIgVzg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8zNScsMTIyOCk7WWNiKDEyMjksMSxQRmUsYjhkKTtfLmNrPWZ1bmN0aW9uIGM4ZChhKXtyZXR1cm4gUkQoYSwxOTApfTtfLmRrPWZ1bmN0aW9uIGQ4ZChhKXtyZXR1cm4gU0MoWEksaHJlLDE5MCxhLDAsMSl9O3ZhciBYOD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzM2JywxMjI5KTtZY2IoMTIzMCwxLFBGZSxlOGQpO18uY2s9ZnVuY3Rpb24gZjhkKGEpe3JldHVybiBSRChhLDkxKX07Xy5kaz1mdW5jdGlvbiBnOGQoYSl7cmV0dXJuIFNDKE1LLE5xZSw5MSxhLDAsMSl9O3ZhciBZOD1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzM3JywxMjMwKTtZY2IoMTIzMSwxLFBGZSxoOGQpO18uY2s9ZnVuY3Rpb24gaThkKGEpe3JldHVybiBSRChhLDU4Myl9O18uZGs9ZnVuY3Rpb24gajhkKGEpe3JldHVybiBTQyhzOSxOcWUsNTgzLGEsMCwxKX07dmFyIFo4PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvMzgnLDEyMzEpO1ljYigxMjMyLDEsUEZlLGs4ZCk7Xy5jaz1mdW5jdGlvbiBsOGQoYSl7cmV0dXJuIGZhbHNlfTtfLmRrPWZ1bmN0aW9uIG04ZChhKXtyZXR1cm4gU0MocjksTnFlLDIxNjAsYSwwLDEpfTt2YXIgJDg9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC8zOScsMTIzMik7WWNiKDExOTcsMSxQRmUsbjhkKTtfLmNrPWZ1bmN0aW9uIG84ZChhKXtyZXR1cm4gUkQoYSw4OCl9O18uZGs9ZnVuY3Rpb24gcDhkKGEpe3JldHVybiBTQyhfNSxOcWUsMjksYSwwLDEpfTt2YXIgZjk9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC80JywxMTk3KTtZY2IoMTIzMywxLFBGZSxxOGQpO18uY2s9ZnVuY3Rpb24gcjhkKGEpe3JldHVybiBSRChhLDE5MSl9O18uZGs9ZnVuY3Rpb24gczhkKGEpe3JldHVybiBTQyhjSixocmUsMTkxLGEsMCwxKX07dmFyIGE5PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvNDAnLDEyMzMpO1ljYigxMjM0LDEsUEZlLHQ4ZCk7Xy5jaz1mdW5jdGlvbiB1OGQoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIHY4ZChhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgYjk9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC80MScsMTIzNCk7WWNiKDEyMzUsMSxQRmUsdzhkKTtfLmNrPWZ1bmN0aW9uIHg4ZChhKXtyZXR1cm4gUkQoYSw1ODApfTtfLmRrPWZ1bmN0aW9uIHk4ZChhKXtyZXR1cm4gU0MoVTUsTnFlLDU4MCxhLDAsMSl9O3ZhciBjOT1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzQyJywxMjM1KTtZY2IoMTIzNiwxLFBGZSx6OGQpO18uY2s9ZnVuY3Rpb24gQThkKGEpe3JldHVybiBmYWxzZX07Xy5kaz1mdW5jdGlvbiBCOGQoYSl7cmV0dXJuIFNDKFM1LGhyZSwyMTYxLGEsMCwxKX07dmFyIGQ5PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvNDMnLDEyMzYpO1ljYigxMjM3LDEsUEZlLEM4ZCk7Xy5jaz1mdW5jdGlvbiBEOGQoYSl7cmV0dXJuIFJEKGEsNDMpfTtfLmRrPWZ1bmN0aW9uIEU4ZChhKXtyZXR1cm4gU0MoTEssdHJlLDQzLGEsMCwxKX07dmFyIGU5PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvNDQnLDEyMzcpO1ljYigxMTk4LDEsUEZlLEY4ZCk7Xy5jaz1mdW5jdGlvbiBHOGQoYSl7cmV0dXJuIFJEKGEsMTQxKX07Xy5kaz1mdW5jdGlvbiBIOGQoYSl7cmV0dXJuIFNDKGE2LE5xZSwxNDEsYSwwLDEpfTt2YXIgZzk9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC81JywxMTk4KTtZY2IoMTE5OSwxLFBGZSxJOGQpO18uY2s9ZnVuY3Rpb24gSjhkKGEpe3JldHVybiBSRChhLDE1NSl9O18uZGs9ZnVuY3Rpb24gSzhkKGEpe3JldHVybiBTQyhjNixOcWUsMTU1LGEsMCwxKX07dmFyIGg5PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvNicsMTE5OSk7WWNiKDEyMDAsMSxQRmUsTDhkKTtfLmNrPWZ1bmN0aW9uIE04ZChhKXtyZXR1cm4gUkQoYSw0NTUpfTtfLmRrPWZ1bmN0aW9uIE44ZChhKXtyZXR1cm4gU0MoZTYsTnFlLDY3MCxhLDAsMSl9O3ZhciBpOT1qZWIoVENlLCdFY29yZVBhY2thZ2VJbXBsLzcnLDEyMDApO1ljYigxMjAxLDEsUEZlLE84ZCk7Xy5jaz1mdW5jdGlvbiBQOGQoYSl7cmV0dXJuIFJEKGEsNTY0KX07Xy5kaz1mdW5jdGlvbiBROGQoYSl7cmV0dXJuIFNDKGQ2LE5xZSw2NzksYSwwLDEpfTt2YXIgajk9amViKFRDZSwnRWNvcmVQYWNrYWdlSW1wbC84JywxMjAxKTtZY2IoMTIwMiwxLFBGZSxSOGQpO18uY2s9ZnVuY3Rpb24gUzhkKGEpe3JldHVybiBSRChhLDQ2Nil9O18uZGs9ZnVuY3Rpb24gVDhkKGEpe3JldHVybiBTQyhmNixOcWUsNDY2LGEsMCwxKX07dmFyIGs5PWplYihUQ2UsJ0Vjb3JlUGFja2FnZUltcGwvOScsMTIwMik7WWNiKDEwMTMsMjAyNixLRWUsWDhkKTtfLkppPWZ1bmN0aW9uIFk4ZChhLGIpe1U4ZCh0aGlzLEpEKGIsNDEyKSl9O18uTmk9ZnVuY3Rpb24gWjhkKGEsYil7VjhkKHRoaXMsYSxKRChiLDQxMikpfTt2YXIgbjk9amViKFRDZSwnTWluaW1hbEVPYmplY3RJbXBsLzFBcnJheURlbGVnYXRpbmdBZGFwdGVyTGlzdCcsMTAxMyk7WWNiKDEwMTQsMTUwLEhFZSwkOGQpO18uZ2o9ZnVuY3Rpb24gXzhkKCl7cmV0dXJuIHRoaXMuYS5hfTt2YXIgbTk9amViKFRDZSwnTWluaW1hbEVPYmplY3RJbXBsLzFBcnJheURlbGVnYXRpbmdBZGFwdGVyTGlzdC8xJywxMDE0KTtZY2IoMTA0MiwxMDQxLHt9LGI5ZCk7dmFyIHE5PWplYignb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbicsJ0Vjb3JlUGx1Z2luJywxMDQyKTt2YXIgczk9bGViKFJGZSwnUmVzb3VyY2UnKTtZY2IoNzc5LDE0NjQsU0ZlKTtfLkVsPWZ1bmN0aW9uIGY5ZChhKXt9O18uRmw9ZnVuY3Rpb24gZzlkKGEpe307Xy5CbD1mdW5jdGlvbiBoOWQoKXtyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgczlkKHRoaXMpKSx0aGlzLmF9O18uQ2w9ZnVuY3Rpb24gaTlkKGEpe3ZhciBiLGMsZCxlLGY7ZD1hLmxlbmd0aDtpZihkPjApe0FEYigwLGEubGVuZ3RoKTtpZihhLmNoYXJDb2RlQXQoMCk9PTQ3KXtmPW5ldyBWbGIoNCk7ZT0xO2ZvcihiPTE7YjxkOysrYil7QURiKGIsYS5sZW5ndGgpO2lmKGEuY2hhckNvZGVBdChiKT09NDcpe0lsYihmLGU9PWI/Jyc6KHpEYihlLGIsYS5sZW5ndGgpLGEuc3Vic3RyKGUsYi1lKSkpO2U9YisxfX1JbGIoZiwoQURiKGUsYS5sZW5ndGgrMSksYS5zdWJzdHIoZSkpKTtyZXR1cm4gYzlkKHRoaXMsZil9ZWxzZXtBRGIoZC0xLGEubGVuZ3RoKTtpZihhLmNoYXJDb2RlQXQoZC0xKT09NjMpe2M9bGdiKGEsd2diKDYzKSxkLTIpO2M+MCYmKGE9KHpEYigwLGMsYS5sZW5ndGgpLGEuc3Vic3RyKDAsYykpKX19fXJldHVybiBkOWQodGhpcyxhKX07Xy5EbD1mdW5jdGlvbiBqOWQoKXtyZXR1cm4gdGhpcy5jfTtfLkliPWZ1bmN0aW9uIGs5ZCgpe3ZhciBhO3JldHVybiBlZWIodGhpcy5PbSkrJ0AnKyhhPXRiKHRoaXMpPj4+MCxhLnRvU3RyaW5nKDE2KSkrIiB1cmk9JyIrdGhpcy5kKyInIn07Xy5iPWZhbHNlO3ZhciB3OT1qZWIoVEZlLCdSZXNvdXJjZUltcGwnLDc3OSk7WWNiKDE0NjUsNzc5LFNGZSxsOWQpO3ZhciB0OT1qZWIoVEZlLCdCaW5hcnlSZXNvdXJjZUltcGwnLDE0NjUpO1ljYigxMTU0LDY5MixSRGUpO18uJGk9ZnVuY3Rpb24gbzlkKGEpe3JldHVybiBSRChhLDU3KT9tOWQodGhpcyxKRChhLDU3KSk6UkQoYSw1ODMpP25ldyBDSGQoSkQoYSw1ODMpLkJsKCkpOlhEKGEpPT09WEQodGhpcy5mKT9KRChhLDE2KS5KYygpOihHTGQoKSxGTGQuYSl9O18uT2I9ZnVuY3Rpb24gcDlkKCl7cmV0dXJuIG45ZCh0aGlzKX07Xy5hPWZhbHNlO3ZhciB3YWI9amViKF9FZSwnRWNvcmVVdGlsL0NvbnRlbnRUcmVlSXRlcmF0b3InLDExNTQpO1ljYigxNDY2LDExNTQsUkRlLHE5ZCk7Xy4kaT1mdW5jdGlvbiByOWQoYSl7cmV0dXJuIFhEKGEpPT09WEQodGhpcy5mKT9KRChhLDE1KS5KYygpOm5ldyB1ZmUoSkQoYSw1NykpfTt2YXIgdTk9amViKFRGZSwnUmVzb3VyY2VJbXBsLzUnLDE0NjYpO1ljYig2NDIsMjAzOCxvRmUsczlkKTtfLkdjPWZ1bmN0aW9uIHQ5ZChhKXtyZXR1cm4gdGhpcy5pPD00P21EZCh0aGlzLGEpOlJEKGEsNTIpJiZKRChhLDUyKS5GaCgpPT10aGlzLmF9O18uSmk9ZnVuY3Rpb24gdTlkKGEsYil7YT09dGhpcy5pLTEmJih0aGlzLmEuYnx8KHRoaXMuYS5iPXRydWUsbnVsbCkpfTtfLkxpPWZ1bmN0aW9uIHY5ZChhLGIpe2E9PTA/dGhpcy5hLmJ8fCh0aGlzLmEuYj10cnVlLG51bGwpOnhDZCh0aGlzLGEsYil9O18uTmk9ZnVuY3Rpb24gdzlkKGEsYil7fTtfLk9pPWZ1bmN0aW9uIHg5ZChhLGIsYyl7fTtfLklqPWZ1bmN0aW9uIHk5ZCgpe3JldHVybiAyfTtfLmdqPWZ1bmN0aW9uIHo5ZCgpe3JldHVybiB0aGlzLmF9O18uSmo9ZnVuY3Rpb24gQTlkKCl7cmV0dXJuIHRydWV9O18uS2o9ZnVuY3Rpb24gQjlkKGEsYil7dmFyIGM7Yz1KRChhLDUyKTtiPWMuYmkodGhpcy5hLGIpO3JldHVybiBifTtfLkxqPWZ1bmN0aW9uIEM5ZChhLGIpe3ZhciBjO2M9SkQoYSw1Mik7cmV0dXJuIGMuYmkobnVsbCxiKX07Xy5Naj1mdW5jdGlvbiBEOWQoKXtyZXR1cm4gZmFsc2V9O18uUGk9ZnVuY3Rpb24gRTlkKCl7cmV0dXJuIHRydWV9O18uWmk9ZnVuY3Rpb24gRjlkKGEpe3JldHVybiBTQyhqNixOcWUsNTcsYSwwLDEpfTtfLlZpPWZ1bmN0aW9uIEc5ZCgpe3JldHVybiBmYWxzZX07dmFyIHY5PWplYihURmUsJ1Jlc291cmNlSW1wbC9Db250ZW50c0VMaXN0Jyw2NDIpO1ljYig5NDgsMjAwOCxGcmUsSDlkKTtfLmRkPWZ1bmN0aW9uIEk5ZChhKXtyZXR1cm4gdGhpcy5hLkhpKGEpfTtfLmdjPWZ1bmN0aW9uIEo5ZCgpe3JldHVybiB0aGlzLmEuZ2MoKX07dmFyIHg5PWplYihfRWUsJ0Fic3RyYWN0U2VxdWVudGlhbEludGVybmFsRUxpc3QvMScsOTQ4KTt2YXIgQ2ZlLERmZSxFZmUsRmZlO1ljYig2MTksMSx7fSxyYWUpO3ZhciBLOWQsTDlkO3ZhciBEOT1qZWIoX0VlLCdCYXNpY0V4dGVuZGVkTWV0YURhdGEnLDYxOSk7WWNiKDExNDUsMSx7fSx2YWUpO18uR2w9ZnVuY3Rpb24gd2FlKCl7cmV0dXJuIG51bGx9O18uSGw9ZnVuY3Rpb24geGFlKCl7dGhpcy5hPT0tMiYmdGFlKHRoaXMsUDlkKHRoaXMuZCx0aGlzLmIpKTtyZXR1cm4gdGhpcy5hfTtfLklsPWZ1bmN0aW9uIHlhZSgpe3JldHVybiBudWxsfTtfLkpsPWZ1bmN0aW9uIHphZSgpe3JldHVybiBwbmIoKSxwbmIoKSxtbmJ9O18udmU9ZnVuY3Rpb24gQWFlKCl7dGhpcy5jPT1nR2UmJnVhZSh0aGlzLFU5ZCh0aGlzLmQsdGhpcy5iKSk7cmV0dXJuIHRoaXMuY307Xy5LbD1mdW5jdGlvbiBCYWUoKXtyZXR1cm4gMH07Xy5hPS0yO18uYz1nR2U7dmFyIHo5PWplYihfRWUsJ0Jhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FQ2xhc3NFeHRlbmRlZE1ldGFEYXRhSW1wbCcsMTE0NSk7WWNiKDExNDYsMSx7fSxIYWUpO18uR2w9ZnVuY3Rpb24gSWFlKCl7dGhpcy5hPT0oTTlkKCksSzlkKSYmQ2FlKHRoaXMsTzlkKHRoaXMuZix0aGlzLmIpKTtyZXR1cm4gdGhpcy5hfTtfLkhsPWZ1bmN0aW9uIEphZSgpe3JldHVybiAwfTtfLklsPWZ1bmN0aW9uIEthZSgpe3RoaXMuYz09KE05ZCgpLEs5ZCkmJkRhZSh0aGlzLFM5ZCh0aGlzLmYsdGhpcy5iKSk7cmV0dXJuIHRoaXMuY307Xy5KbD1mdW5jdGlvbiBMYWUoKXshdGhpcy5kJiZFYWUodGhpcyxUOWQodGhpcy5mLHRoaXMuYikpO3JldHVybiB0aGlzLmR9O18udmU9ZnVuY3Rpb24gTWFlKCl7dGhpcy5lPT1nR2UmJkZhZSh0aGlzLFU5ZCh0aGlzLmYsdGhpcy5iKSk7cmV0dXJuIHRoaXMuZX07Xy5LbD1mdW5jdGlvbiBOYWUoKXt0aGlzLmc9PS0yJiZHYWUodGhpcyxYOWQodGhpcy5mLHRoaXMuYikpO3JldHVybiB0aGlzLmd9O18uZT1nR2U7Xy5nPS0yO3ZhciBBOT1qZWIoX0VlLCdCYXNpY0V4dGVuZGVkTWV0YURhdGEvRURhdGFUeXBlRXh0ZW5kZWRNZXRhRGF0YUltcGwnLDExNDYpO1ljYigxMTQ0LDEse30sUmFlKTtfLmI9ZmFsc2U7Xy5jPWZhbHNlO3ZhciBCOT1qZWIoX0VlLCdCYXNpY0V4dGVuZGVkTWV0YURhdGEvRVBhY2thZ2VFeHRlbmRlZE1ldGFEYXRhSW1wbCcsMTE0NCk7WWNiKDExNDcsMSx7fSxjYmUpO18uYz0tMjtfLmU9Z0dlO18uZj1nR2U7dmFyIEM5PWplYihfRWUsJ0Jhc2ljRXh0ZW5kZWRNZXRhRGF0YS9FU3RydWN0dXJhbEZlYXR1cmVFeHRlbmRlZE1ldGFEYXRhSW1wbCcsMTE0Nyk7WWNiKDU3Niw2MTcscEZlLGRiZSk7Xy5Jaj1mdW5jdGlvbiBlYmUoKXtyZXR1cm4gdGhpcy5jfTtfLmxsPWZ1bmN0aW9uIGZiZSgpe3JldHVybiBmYWxzZX07Xy5UaT1mdW5jdGlvbiBnYmUoYSxiKXtyZXR1cm4gYn07Xy5jPTA7dmFyIFE5PWplYihfRWUsJ0VEYXRhVHlwZUVMaXN0Jyw1NzYpO3ZhciBMYWI9bGViKF9FZSwnRmVhdHVyZU1hcCcpO1ljYig3NSw1NzYsezM6MSw0OjEsMjA6MSwzMToxLDU1OjEsMTY6MSwxNToxLDU5OjEsNzA6MSw2NjoxLDYxOjEsNzY6MSwxNTk6MSwyMTg6MSwxOTgyOjEsNzE6MSw5NjoxfSxuY2UpO18uX2M9ZnVuY3Rpb24gb2NlKGEsYil7aGJlKHRoaXMsYSxKRChiLDc0KSl9O18uRWM9ZnVuY3Rpb24gcGNlKGEpe3JldHVybiBrYmUodGhpcyxKRChhLDc0KSl9O18uRWk9ZnVuY3Rpb24gdWNlKGEpe3BiZSh0aGlzLEpEKGEsNzQpKX07Xy5Laj1mdW5jdGlvbiBGY2UoYSxiKXtyZXR1cm4gSGJlKHRoaXMsSkQoYSw3NCksYil9O18uTGo9ZnVuY3Rpb24gR2NlKGEsYil7cmV0dXJuIEpiZSh0aGlzLEpEKGEsNzQpLGIpfTtfLlFpPWZ1bmN0aW9uIEljZShhLGIpe3JldHVybiBQYmUodGhpcyxhLGIpfTtfLlRpPWZ1bmN0aW9uIEtjZShhLGIpe3JldHVybiBVYmUodGhpcyxhLEpEKGIsNzQpKX07Xy5mZD1mdW5jdGlvbiBNY2UoYSxiKXtyZXR1cm4gWGJlKHRoaXMsYSxKRChiLDc0KSl9O18uUmo9ZnVuY3Rpb24gUWNlKGEsYil7cmV0dXJuIGJjZSh0aGlzLEpEKGEsNzQpLGIpfTtfLlNqPWZ1bmN0aW9uIFJjZShhLGIpe3JldHVybiBkY2UodGhpcyxKRChhLDc0KSxiKX07Xy5Uaj1mdW5jdGlvbiBTY2UoYSxiLGMpe3JldHVybiBlY2UodGhpcyxKRChhLDc0KSxKRChiLDc0KSxjKX07Xy5XaT1mdW5jdGlvbiBVY2UoYSxiKXtyZXR1cm4gbWNlKHRoaXMsYSxKRChiLDc0KSl9O18uTGw9ZnVuY3Rpb24gcWNlKGEsYil7cmV0dXJuIGpiZSh0aGlzLGEsYil9O18uYWQ9ZnVuY3Rpb24gcmNlKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrO2o9bmV3IHdEZChiLmdjKCkpO2ZvcihlPWIuSmMoKTtlLk9iKCk7KXtkPUpEKGUuUGIoKSw3NCk7Zj1kLklrKCk7aWYoTGZlKHRoaXMuZSxmKSl7KCFmLlBpKCl8fCF4YmUodGhpcyxmLGQua2QoKSkmJiFtRGQoaixkKSkmJnRDZChqLGQpfWVsc2V7az1LZmUodGhpcy5lLnpoKCksZik7Yz1KRCh0aGlzLmcsMTIyKTtnPXRydWU7Zm9yKGg9MDtoPHRoaXMuaTsrK2gpe2k9Y1toXTtpZihrLlpsKGkuSWsoKSkpe0pEKERDZCh0aGlzLGgsZCksNzQpO2c9ZmFsc2U7YnJlYWt9fWcmJnRDZChqLGQpfX1yZXR1cm4gdUNkKHRoaXMsYSxqKX07Xy5GYz1mdW5jdGlvbiBzY2UoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqO2k9bmV3IHdEZChhLmdjKCkpO2ZvcihkPWEuSmMoKTtkLk9iKCk7KXtjPUpEKGQuUGIoKSw3NCk7ZT1jLklrKCk7aWYoTGZlKHRoaXMuZSxlKSl7KCFlLlBpKCl8fCF4YmUodGhpcyxlLGMua2QoKSkmJiFtRGQoaSxjKSkmJnRDZChpLGMpfWVsc2V7aj1LZmUodGhpcy5lLnpoKCksZSk7Yj1KRCh0aGlzLmcsMTIyKTtmPXRydWU7Zm9yKGc9MDtnPHRoaXMuaTsrK2cpe2g9YltnXTtpZihqLlpsKGguSWsoKSkpe0pEKERDZCh0aGlzLGcsYyksNzQpO2Y9ZmFsc2U7YnJlYWt9fWYmJnRDZChpLGMpfX1yZXR1cm4gdkNkKHRoaXMsaSl9O18uQ2k9ZnVuY3Rpb24gdGNlKGEpe3RoaXMuaj0tMTtyZXR1cm4gTUdkKHRoaXMsdGhpcy5pLGEpfTtfLk1sPWZ1bmN0aW9uIHZjZShhLGIsYyl7cmV0dXJuIHFiZSh0aGlzLGEsYixjKX07Xy5Vaz1mdW5jdGlvbiB3Y2UoYSxiKXtyZXR1cm4gdWJlKHRoaXMsYSxiKX07Xy5ObD1mdW5jdGlvbiB4Y2UoYSxiLGMpe3JldHVybiB2YmUodGhpcyxhLGIsYyl9O18uT2w9ZnVuY3Rpb24geWNlKCl7cmV0dXJuIHRoaXN9O18uUGw9ZnVuY3Rpb24gemNlKGEsYil7cmV0dXJuIERiZSh0aGlzLGEsYil9O18uUWw9ZnVuY3Rpb24gQWNlKGEpe3JldHVybiBKRChuRGQodGhpcyxhKSw3NCkuSWsoKX07Xy5SbD1mdW5jdGlvbiBCY2UoYSl7cmV0dXJuIEpEKG5EZCh0aGlzLGEpLDc0KS5rZCgpfTtfLlNsPWZ1bmN0aW9uIENjZSgpe3JldHVybiB0aGlzLmJ9O18uSmo9ZnVuY3Rpb24gRGNlKCl7cmV0dXJuIHRydWV9O18uUWo9ZnVuY3Rpb24gRWNlKCl7cmV0dXJuIHRydWV9O18uVGw9ZnVuY3Rpb24gSGNlKGEpe3JldHVybiAhS2JlKHRoaXMsYSl9O18uWmk9ZnVuY3Rpb24gSmNlKGEpe3JldHVybiBTQyhBYWIsUUZlLDMzOSxhLDAsMSl9O18ubWw9ZnVuY3Rpb24gTGNlKGEpe3JldHVybiBWYmUodGhpcyxhKX07Xy5XYj1mdW5jdGlvbiBOY2UoYSl7WWJlKHRoaXMsYSl9O18uVWw9ZnVuY3Rpb24gT2NlKGEsYil7JGJlKHRoaXMsYSxiKX07Xy5WbD1mdW5jdGlvbiBQY2UoYSl7cmV0dXJuIF9iZSh0aGlzLGEpfTtfLldsPWZ1bmN0aW9uIFRjZShhKXtsY2UodGhpcyxhKX07dmFyIEc5PWplYihfRWUsJ0Jhc2ljRmVhdHVyZU1hcCcsNzUpO1ljYigxOTA2LDEsZHJlKTtfLk5iPWZ1bmN0aW9uICRjZShhKXtPc2IodGhpcyxhKX07Xy5SYj1mdW5jdGlvbiBaY2UoYil7aWYodGhpcy5nPT0tMSl7dGhyb3cgc2NiKG5ldyBWZWIpfVZjZSh0aGlzKTt0cnl7aWJlKHRoaXMuZSx0aGlzLmIsdGhpcy5hLGIpO3RoaXMuZD10aGlzLmUuajtZY2UodGhpcyl9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSw5Nykpe3Rocm93IHNjYihuZXcgeXFiKX1lbHNlIHRocm93IHNjYihhKX19O18uT2I9ZnVuY3Rpb24gX2NlKCl7cmV0dXJuIFdjZSh0aGlzKX07Xy5TYj1mdW5jdGlvbiBhZGUoKXtyZXR1cm4gWGNlKHRoaXMpfTtfLlBiPWZ1bmN0aW9uIGJkZSgpe3JldHVybiBZY2UodGhpcyl9O18uVGI9ZnVuY3Rpb24gY2RlKCl7cmV0dXJuIHRoaXMuYX07Xy5VYj1mdW5jdGlvbiBkZGUoKXt2YXIgYTtpZihYY2UodGhpcykpe1ZjZSh0aGlzKTt0aGlzLmc9LS10aGlzLmE7aWYodGhpcy5ybCgpKXthPVdiZSh0aGlzLmUsdGhpcy5iLHRoaXMuYyx0aGlzLmEsdGhpcy5qKTt0aGlzLmo9YX10aGlzLmk9MDtyZXR1cm4gdGhpcy5qfWVsc2V7dGhyb3cgc2NiKG5ldyBxdWIpfX07Xy5WYj1mdW5jdGlvbiBlZGUoKXtyZXR1cm4gdGhpcy5hLTF9O18uUWI9ZnVuY3Rpb24gZmRlKCl7aWYodGhpcy5nPT0tMSl7dGhyb3cgc2NiKG5ldyBWZWIpfVZjZSh0aGlzKTt0cnl7U2JlKHRoaXMuZSx0aGlzLmIsdGhpcy5nKTt0aGlzLmQ9dGhpcy5lLmo7aWYodGhpcy5nPHRoaXMuYSl7LS10aGlzLmE7LS10aGlzLmN9LS10aGlzLmd9Y2F0Y2goYSl7YT1yY2IoYSk7aWYoUkQoYSw5Nykpe3Rocm93IHNjYihuZXcgeXFiKX1lbHNlIHRocm93IHNjYihhKX19O18ucmw9ZnVuY3Rpb24gZ2RlKCl7cmV0dXJuIGZhbHNlfTtfLldiPWZ1bmN0aW9uIGhkZShiKXtpZih0aGlzLmc9PS0xKXt0aHJvdyBzY2IobmV3IFZlYil9VmNlKHRoaXMpO3RyeXtaYmUodGhpcy5lLHRoaXMuYix0aGlzLmcsYik7dGhpcy5kPXRoaXMuZS5qfWNhdGNoKGEpe2E9cmNiKGEpO2lmKFJEKGEsOTcpKXt0aHJvdyBzY2IobmV3IHlxYil9ZWxzZSB0aHJvdyBzY2IoYSl9fTtfLmE9MDtfLmM9MDtfLmQ9MDtfLmY9ZmFsc2U7Xy5nPTA7Xy5pPTA7dmFyIERhYj1qZWIoX0VlLCdGZWF0dXJlTWFwVXRpbC9CYXNpY0ZlYXR1cmVFSXRlcmF0b3InLDE5MDYpO1ljYig0MDksMTkwNixkcmUsaWRlKTtfLlhsPWZ1bmN0aW9uIGpkZSgpe3ZhciBhLGIsYztjPXRoaXMuZS5pO2E9SkQodGhpcy5lLmcsMTIyKTt3aGlsZSh0aGlzLmM8Yyl7Yj1hW3RoaXMuY107aWYodGhpcy5rLlpsKGIuSWsoKSkpe3RoaXMuaj10aGlzLmY/YjpiLmtkKCk7dGhpcy5pPTI7cmV0dXJuIHRydWV9Kyt0aGlzLmN9dGhpcy5pPTE7dGhpcy5nPS0xO3JldHVybiBmYWxzZX07Xy5ZbD1mdW5jdGlvbiBrZGUoKXt2YXIgYSxiO2E9SkQodGhpcy5lLmcsMTIyKTt3aGlsZSgtLXRoaXMuYz49MCl7Yj1hW3RoaXMuY107aWYodGhpcy5rLlpsKGIuSWsoKSkpe3RoaXMuaj10aGlzLmY/YjpiLmtkKCk7dGhpcy5pPS0yO3JldHVybiB0cnVlfX10aGlzLmk9LTE7dGhpcy5nPS0xO3JldHVybiBmYWxzZX07dmFyIEU5PWplYihfRWUsJ0Jhc2ljRmVhdHVyZU1hcC9GZWF0dXJlRUl0ZXJhdG9yJyw0MDkpO1ljYig2NjEsNDA5LGRyZSxsZGUpO18ucmw9ZnVuY3Rpb24gbWRlKCl7cmV0dXJuIHRydWV9O3ZhciBGOT1qZWIoX0VlLCdCYXNpY0ZlYXR1cmVNYXAvUmVzb2x2aW5nRmVhdHVyZUVJdGVyYXRvcicsNjYxKTtZY2IoOTQ2LDQ4MCx2RmUsbmRlKTtfLm1qPWZ1bmN0aW9uIG9kZSgpe3JldHVybiB0aGlzfTt2YXIgSjk9amViKF9FZSwnRUNvbnRlbnRzRUxpc3QvMScsOTQ2KTtZY2IoOTQ3LDQ4MCx2RmUscGRlKTtfLnJsPWZ1bmN0aW9uIHFkZSgpe3JldHVybiBmYWxzZX07dmFyIEs5PWplYihfRWUsJ0VDb250ZW50c0VMaXN0LzInLDk0Nyk7WWNiKDk0NSwyODQsd0ZlLHJkZSk7Xy50bD1mdW5jdGlvbiBzZGUoYSl7fTtfLk9iPWZ1bmN0aW9uIHRkZSgpe3JldHVybiBmYWxzZX07Xy5TYj1mdW5jdGlvbiB1ZGUoKXtyZXR1cm4gZmFsc2V9O3ZhciBMOT1qZWIoX0VlLCdFQ29udGVudHNFTGlzdC9GZWF0dXJlSXRlcmF0b3JJbXBsLzEnLDk0NSk7WWNiKDgxOSw1NzYscEZlLHZkZSk7Xy5LaT1mdW5jdGlvbiB3ZGUoKXt0aGlzLmE9dHJ1ZX07Xy5Oaj1mdW5jdGlvbiB4ZGUoKXtyZXR1cm4gdGhpcy5hfTtfLkRrPWZ1bmN0aW9uIHlkZSgpe3ZhciBhO1JHZCh0aGlzKTtpZihxcWQodGhpcy5lKSl7YT10aGlzLmE7dGhpcy5hPWZhbHNlO1dwZCh0aGlzLmUsbmV3IGpfZCh0aGlzLmUsMix0aGlzLmMsYSxmYWxzZSkpfWVsc2V7dGhpcy5hPWZhbHNlfX07Xy5hPWZhbHNlO3ZhciBQOT1qZWIoX0VlLCdFRGF0YVR5cGVFTGlzdC9VbnNldHRhYmxlJyw4MTkpO1ljYigxOTA0LDU3NixwRmUsemRlKTtfLlBpPWZ1bmN0aW9uIEFkZSgpe3JldHVybiB0cnVlfTt2YXIgUzk9amViKF9FZSwnRURhdGFUeXBlVW5pcXVlRUxpc3QnLDE5MDQpO1ljYigxOTA1LDgxOSxwRmUsQmRlKTtfLlBpPWZ1bmN0aW9uIENkZSgpe3JldHVybiB0cnVlfTt2YXIgUjk9amViKF9FZSwnRURhdGFUeXBlVW5pcXVlRUxpc3QvVW5zZXR0YWJsZScsMTkwNSk7WWNiKDE0Miw4MSxwRmUsRGRlKTtfLmtsPWZ1bmN0aW9uIEVkZSgpe3JldHVybiB0cnVlfTtfLlRpPWZ1bmN0aW9uIEZkZShhLGIpe3JldHVybiBCVWQodGhpcyxhLEpEKGIsNTcpKX07dmFyIFQ5PWplYihfRWUsJ0VPYmplY3RDb250YWlubWVudEVMaXN0L1Jlc29sdmluZycsMTQyKTtZY2IoMTE0OCw1NDAscEZlLEdkZSk7Xy5rbD1mdW5jdGlvbiBIZGUoKXtyZXR1cm4gdHJ1ZX07Xy5UaT1mdW5jdGlvbiBJZGUoYSxiKXtyZXR1cm4gQlVkKHRoaXMsYSxKRChiLDU3KSl9O3ZhciBVOT1qZWIoX0VlLCdFT2JqZWN0Q29udGFpbm1lbnRFTGlzdC9VbnNldHRhYmxlL1Jlc29sdmluZycsMTE0OCk7WWNiKDc0OCwxNCxwRmUsSmRlKTtfLktpPWZ1bmN0aW9uIEtkZSgpe3RoaXMuYT10cnVlfTtfLk5qPWZ1bmN0aW9uIExkZSgpe3JldHVybiB0aGlzLmF9O18uRGs9ZnVuY3Rpb24gTWRlKCl7dmFyIGE7UkdkKHRoaXMpO2lmKHFxZCh0aGlzLmUpKXthPXRoaXMuYTt0aGlzLmE9ZmFsc2U7V3BkKHRoaXMuZSxuZXcgal9kKHRoaXMuZSwyLHRoaXMuYyxhLGZhbHNlKSl9ZWxzZXt0aGlzLmE9ZmFsc2V9fTtfLmE9ZmFsc2U7dmFyIFo5PWplYihfRWUsJ0VPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZScsNzQ4KTtZY2IoMTE4Miw3NDgscEZlLE5kZSk7Xy5rbD1mdW5jdGlvbiBPZGUoKXtyZXR1cm4gdHJ1ZX07Xy5UaT1mdW5jdGlvbiBQZGUoYSxiKXtyZXR1cm4gQlVkKHRoaXMsYSxKRChiLDU3KSl9O3ZhciBZOT1qZWIoX0VlLCdFT2JqZWN0Q29udGFpbm1lbnRXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUvUmVzb2x2aW5nJywxMTgyKTtZY2IoNzQwLDQ4OSxwRmUsUWRlKTtfLktpPWZ1bmN0aW9uIFJkZSgpe3RoaXMuYT10cnVlfTtfLk5qPWZ1bmN0aW9uIFNkZSgpe3JldHVybiB0aGlzLmF9O18uRGs9ZnVuY3Rpb24gVGRlKCl7dmFyIGE7UkdkKHRoaXMpO2lmKHFxZCh0aGlzLmUpKXthPXRoaXMuYTt0aGlzLmE9ZmFsc2U7V3BkKHRoaXMuZSxuZXcgal9kKHRoaXMuZSwyLHRoaXMuYyxhLGZhbHNlKSl9ZWxzZXt0aGlzLmE9ZmFsc2V9fTtfLmE9ZmFsc2U7dmFyIF85PWplYihfRWUsJ0VPYmplY3RFTGlzdC9VbnNldHRhYmxlJyw3NDApO1ljYigzMzQsNDg5LHBGZSxVZGUpO18ua2w9ZnVuY3Rpb24gVmRlKCl7cmV0dXJuIHRydWV9O18uVGk9ZnVuY3Rpb24gV2RlKGEsYil7cmV0dXJuIEJVZCh0aGlzLGEsSkQoYiw1NykpfTt2YXIgY2FiPWplYihfRWUsJ0VPYmplY3RSZXNvbHZpbmdFTGlzdCcsMzM0KTtZY2IoMTc5MCw3NDAscEZlLFhkZSk7Xy5rbD1mdW5jdGlvbiBZZGUoKXtyZXR1cm4gdHJ1ZX07Xy5UaT1mdW5jdGlvbiBaZGUoYSxiKXtyZXR1cm4gQlVkKHRoaXMsYSxKRChiLDU3KSl9O3ZhciBiYWI9amViKF9FZSwnRU9iamVjdFJlc29sdmluZ0VMaXN0L1Vuc2V0dGFibGUnLDE3OTApO1ljYigxNDY3LDEse30sYWVlKTt2YXIgJGRlO3ZhciBkYWI9amViKF9FZSwnRU9iamVjdFZhbGlkYXRvcicsMTQ2Nyk7WWNiKDU0NCw0ODkscEZlLGJlZSk7Xy5mbD1mdW5jdGlvbiBjZWUoKXtyZXR1cm4gdGhpcy5kfTtfLmdsPWZ1bmN0aW9uIGRlZSgpe3JldHVybiB0aGlzLmJ9O18uSmo9ZnVuY3Rpb24gZWVlKCl7cmV0dXJuIHRydWV9O18uamw9ZnVuY3Rpb24gZmVlKCl7cmV0dXJuIHRydWV9O18uYj0wO3ZhciBoYWI9amViKF9FZSwnRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QnLDU0NCk7WWNiKDExODUsNTQ0LHBGZSxnZWUpO18uaWw9ZnVuY3Rpb24gaGVlKCl7cmV0dXJuIHRydWV9O3ZhciBlYWI9amViKF9FZSwnRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvTWFueUludmVyc2UnLDExODUpO1ljYig2MjAsNTQ0LHBGZSxpZWUpO18uS2k9ZnVuY3Rpb24gamVlKCl7dGhpcy5hPXRydWV9O18uTmo9ZnVuY3Rpb24ga2VlKCl7cmV0dXJuIHRoaXMuYX07Xy5Eaz1mdW5jdGlvbiBsZWUoKXt2YXIgYTtSR2QodGhpcyk7aWYocXFkKHRoaXMuZSkpe2E9dGhpcy5hO3RoaXMuYT1mYWxzZTtXcGQodGhpcy5lLG5ldyBqX2QodGhpcy5lLDIsdGhpcy5jLGEsZmFsc2UpKX1lbHNle3RoaXMuYT1mYWxzZX19O18uYT1mYWxzZTt2YXIgZ2FiPWplYihfRWUsJ0VPYmplY3RXaXRoSW52ZXJzZUVMaXN0L1Vuc2V0dGFibGUnLDYyMCk7WWNiKDExODQsNjIwLHBGZSxtZWUpO18uaWw9ZnVuY3Rpb24gbmVlKCl7cmV0dXJuIHRydWV9O3ZhciBmYWI9amViKF9FZSwnRU9iamVjdFdpdGhJbnZlcnNlRUxpc3QvVW5zZXR0YWJsZS9NYW55SW52ZXJzZScsMTE4NCk7WWNiKDc0OSw1NDQscEZlLG9lZSk7Xy5rbD1mdW5jdGlvbiBwZWUoKXtyZXR1cm4gdHJ1ZX07Xy5UaT1mdW5jdGlvbiBxZWUoYSxiKXtyZXR1cm4gQlVkKHRoaXMsYSxKRChiLDU3KSl9O3ZhciBsYWI9amViKF9FZSwnRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QnLDc0OSk7WWNiKDMzLDc0OSxwRmUscmVlKTtfLmlsPWZ1bmN0aW9uIHNlZSgpe3JldHVybiB0cnVlfTt2YXIgaWFiPWplYihfRWUsJ0VPYmplY3RXaXRoSW52ZXJzZVJlc29sdmluZ0VMaXN0L01hbnlJbnZlcnNlJywzMyk7WWNiKDc1MCw2MjAscEZlLHRlZSk7Xy5rbD1mdW5jdGlvbiB1ZWUoKXtyZXR1cm4gdHJ1ZX07Xy5UaT1mdW5jdGlvbiB2ZWUoYSxiKXtyZXR1cm4gQlVkKHRoaXMsYSxKRChiLDU3KSl9O3ZhciBrYWI9amViKF9FZSwnRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3QvVW5zZXR0YWJsZScsNzUwKTtZY2IoMTE4Myw3NTAscEZlLHdlZSk7Xy5pbD1mdW5jdGlvbiB4ZWUoKXtyZXR1cm4gdHJ1ZX07dmFyIGphYj1qZWIoX0VlLCdFT2JqZWN0V2l0aEludmVyc2VSZXNvbHZpbmdFTGlzdC9VbnNldHRhYmxlL01hbnlJbnZlcnNlJywxMTgzKTtZY2IoMTE0OSw2MTcscEZlKTtfLklpPWZ1bmN0aW9uIHllZSgpe3JldHVybiAodGhpcy5iJjE3OTIpPT0wfTtfLktpPWZ1bmN0aW9uIHplZSgpe3RoaXMuYnw9MX07Xy5obD1mdW5jdGlvbiBBZWUoKXtyZXR1cm4gKHRoaXMuYiY0KSE9MH07Xy5Kaj1mdW5jdGlvbiBCZWUoKXtyZXR1cm4gKHRoaXMuYiY0MCkhPTB9O18uaWw9ZnVuY3Rpb24gQ2VlKCl7cmV0dXJuICh0aGlzLmImMTYpIT0wfTtfLmpsPWZ1bmN0aW9uIERlZSgpe3JldHVybiAodGhpcy5iJjgpIT0wfTtfLmtsPWZ1bmN0aW9uIEVlZSgpe3JldHVybiAodGhpcy5iJndzZSkhPTB9O18uWms9ZnVuY3Rpb24gRmVlKCl7cmV0dXJuICh0aGlzLmImMzIpIT0wfTtfLmxsPWZ1bmN0aW9uIEdlZSgpe3JldHVybiAodGhpcy5iJk5FZSkhPTB9O18uY2s9ZnVuY3Rpb24gSGVlKGEpe3JldHVybiAhdGhpcy5kP3RoaXMuSWsoKS5FaygpLmNrKGEpOmpOZCh0aGlzLmQsYSl9O18uTmo9ZnVuY3Rpb24gSWVlKCl7cmV0dXJuICh0aGlzLmImMikhPTA/KHRoaXMuYiYxKSE9MDp0aGlzLmkhPTB9O18uUGk9ZnVuY3Rpb24gSmVlKCl7cmV0dXJuICh0aGlzLmImMTI4KSE9MH07Xy5Eaz1mdW5jdGlvbiBMZWUoKXt2YXIgYTtSR2QodGhpcyk7aWYoKHRoaXMuYiYyKSE9MCl7aWYocXFkKHRoaXMuZSkpe2E9KHRoaXMuYiYxKSE9MDt0aGlzLmImPS0yO3pVZCh0aGlzLG5ldyBqX2QodGhpcy5lLDIsV1RkKHRoaXMuZS56aCgpLHRoaXMuSWsoKSksYSxmYWxzZSkpfWVsc2V7dGhpcy5iJj0tMn19fTtfLlZpPWZ1bmN0aW9uIE1lZSgpe3JldHVybiAodGhpcy5iJjE1MzYpPT0wfTtfLmI9MDt2YXIgbmFiPWplYihfRWUsJ0Vjb3JlRUxpc3QvR2VuZXJpYycsMTE0OSk7WWNiKDExNTAsMTE0OSxwRmUsTmVlKTtfLklrPWZ1bmN0aW9uIE9lZSgpe3JldHVybiB0aGlzLmF9O3ZhciBtYWI9amViKF9FZSwnRWNvcmVFTGlzdC9EeW5hbWljJywxMTUwKTtZY2IoNzQ3LDY2LFFEZSxQZWUpO18uWmk9ZnVuY3Rpb24gUWVlKGEpe3JldHVybiBmSWQodGhpcy5hLmEsYSl9O3ZhciByYWI9amViKF9FZSwnRWNvcmVFTWFwLzEnLDc0Nyk7WWNiKDc0Niw4MSxwRmUsUmVlKTtfLkppPWZ1bmN0aW9uIFNlZShhLGIpe3JKZCh0aGlzLmIsSkQoYiwxMzUpKX07Xy5MaT1mdW5jdGlvbiBUZWUoYSxiKXtxSmQodGhpcy5iKX07Xy5NaT1mdW5jdGlvbiBVZWUoYSxiLGMpe3ZhciBkOysrKGQ9dGhpcy5iLEpEKGIsMTM1KSxkKS5lfTtfLk5pPWZ1bmN0aW9uIFZlZShhLGIpe3NKZCh0aGlzLmIsSkQoYiwxMzUpKX07Xy5PaT1mdW5jdGlvbiBXZWUoYSxiLGMpe3NKZCh0aGlzLmIsSkQoYywxMzUpKTtYRChjKT09PVhEKGIpJiZKRChjLDEzNSkueWkoekpkKEpEKGIsMTM1KS5qZCgpKSk7ckpkKHRoaXMuYixKRChiLDEzNSkpfTt2YXIgc2FiPWplYihfRWUsJ0Vjb3JlRU1hcC9EZWxlZ2F0ZUVPYmplY3RDb250YWlubWVudEVMaXN0Jyw3NDYpO1ljYigxMTgwLDE0MCxiRmUsWGVlKTt2YXIgdWFiPWplYihfRWUsJ0Vjb3JlRU1hcC9VbnNldHRhYmxlJywxMTgwKTtZY2IoMTE4MSw3NDYscEZlLFllZSk7Xy5LaT1mdW5jdGlvbiBaZWUoKXt0aGlzLmE9dHJ1ZX07Xy5Oaj1mdW5jdGlvbiAkZWUoKXtyZXR1cm4gdGhpcy5hfTtfLkRrPWZ1bmN0aW9uIF9lZSgpe3ZhciBhO1JHZCh0aGlzKTtpZihxcWQodGhpcy5lKSl7YT10aGlzLmE7dGhpcy5hPWZhbHNlO1dwZCh0aGlzLmUsbmV3IGpfZCh0aGlzLmUsMix0aGlzLmMsYSxmYWxzZSkpfWVsc2V7dGhpcy5hPWZhbHNlfX07Xy5hPWZhbHNlO3ZhciB0YWI9amViKF9FZSwnRWNvcmVFTWFwL1Vuc2V0dGFibGUvVW5zZXR0YWJsZURlbGVnYXRlRU9iamVjdENvbnRhaW5tZW50RUxpc3QnLDExODEpO1ljYigxMTUzLDIyMSxidGUsc2ZlKTtfLmE9ZmFsc2U7Xy5iPWZhbHNlO3ZhciB4YWI9amViKF9FZSwnRWNvcmVVdGlsL0NvcGllcicsMTE1Myk7WWNiKDc0MiwxLFdxZSx1ZmUpO18uTmI9ZnVuY3Rpb24gdmZlKGEpe09zYih0aGlzLGEpfTtfLk9iPWZ1bmN0aW9uIHdmZSgpe3JldHVybiB0ZmUodGhpcyl9O18uUGI9ZnVuY3Rpb24geGZlKCl7dmFyIGE7dGZlKHRoaXMpO2E9dGhpcy5iO3RoaXMuYj1udWxsO3JldHVybiBhfTtfLlFiPWZ1bmN0aW9uIHlmZSgpe3RoaXMuYS5RYigpfTt2YXIgeWFiPWplYihfRWUsJ0Vjb3JlVXRpbC9Qcm9wZXJDb250ZW50SXRlcmF0b3InLDc0Mik7WWNiKDE0NjgsMTQ2Nyx7fSxCZmUpO3ZhciB6ZmU7dmFyIHphYj1qZWIoX0VlLCdFY29yZVZhbGlkYXRvcicsMTQ2OCk7dmFyIEhmZTt2YXIgS2FiPWxlYihfRWUsJ0ZlYXR1cmVNYXBVdGlsL1ZhbGlkYXRvcicpO1ljYigxMjQ4LDEsezE5ODc6MX0sTWZlKTtfLlpsPWZ1bmN0aW9uIE5mZShhKXtyZXR1cm4gdHJ1ZX07dmFyIENhYj1qZWIoX0VlLCdGZWF0dXJlTWFwVXRpbC8xJywxMjQ4KTtZY2IoNzU1LDEsezE5ODc6MX0sUmZlKTtfLlpsPWZ1bmN0aW9uIFNmZShhKXt2YXIgYjtpZih0aGlzLmM9PWEpcmV0dXJuIHRydWU7Yj1MRChOaWIodGhpcy5hLGEpKTtpZihiPT1udWxsKXtpZihRZmUodGhpcyxhKSl7VGZlKHRoaXMuYSxhLCh4ZGIoKSx3ZGIpKTtyZXR1cm4gdHJ1ZX1lbHNle1RmZSh0aGlzLmEsYSwoeGRiKCksdmRiKSk7cmV0dXJuIGZhbHNlfX1lbHNle3JldHVybiBiPT0oeGRiKCksd2RiKX19O18uZT1mYWxzZTt2YXIgT2ZlO3ZhciBGYWI9amViKF9FZSwnRmVhdHVyZU1hcFV0aWwvQmFzaWNWYWxpZGF0b3InLDc1NSk7WWNiKDc1Niw0NSxidGUsVWZlKTt2YXIgRWFiPWplYihfRWUsJ0ZlYXR1cmVNYXBVdGlsL0Jhc2ljVmFsaWRhdG9yL0NhY2hlJyw3NTYpO1ljYig0OTMsNTUsezIwOjEsMzE6MSw1NToxLDE2OjEsMTU6MSw2MToxLDc2OjEsNzE6MSw5NjoxfSxaZmUpO18uX2M9ZnVuY3Rpb24gJGZlKGEsYil7aWJlKHRoaXMuYyx0aGlzLmIsYSxiKX07Xy5FYz1mdW5jdGlvbiBfZmUoYSl7cmV0dXJuIGpiZSh0aGlzLmMsdGhpcy5iLGEpfTtfLmFkPWZ1bmN0aW9uIGFnZShhLGIpe3JldHVybiBsYmUodGhpcy5jLHRoaXMuYixhLGIpfTtfLkZjPWZ1bmN0aW9uIGJnZShhKXtyZXR1cm4gVmZlKHRoaXMsYSl9O18uRGk9ZnVuY3Rpb24gY2dlKGEsYil7bmJlKHRoaXMuYyx0aGlzLmIsYSxiKX07Xy5Uaz1mdW5jdGlvbiBkZ2UoYSxiKXtyZXR1cm4gcWJlKHRoaXMuYyx0aGlzLmIsYSxiKX07Xy5YaT1mdW5jdGlvbiBlZ2UoYSl7cmV0dXJuIENiZSh0aGlzLmMsdGhpcy5iLGEsZmFsc2UpfTtfLkZpPWZ1bmN0aW9uIGZnZSgpe3JldHVybiByYmUodGhpcy5jLHRoaXMuYil9O18uR2k9ZnVuY3Rpb24gZ2dlKCl7cmV0dXJuIHNiZSh0aGlzLmMsdGhpcy5iKX07Xy5IaT1mdW5jdGlvbiBoZ2UoYSl7cmV0dXJuIHRiZSh0aGlzLmMsdGhpcy5iLGEpfTtfLlVrPWZ1bmN0aW9uIGlnZShhLGIpe3JldHVybiBXZmUodGhpcyxhLGIpfTtfLiRiPWZ1bmN0aW9uIGpnZSgpe1hmZSh0aGlzKX07Xy5HYz1mdW5jdGlvbiBrZ2UoYSl7cmV0dXJuIHhiZSh0aGlzLmMsdGhpcy5iLGEpfTtfLkhjPWZ1bmN0aW9uIGxnZShhKXtyZXR1cm4gemJlKHRoaXMuYyx0aGlzLmIsYSl9O18uWGI9ZnVuY3Rpb24gbWdlKGEpe3JldHVybiBDYmUodGhpcy5jLHRoaXMuYixhLHRydWUpfTtfLkNrPWZ1bmN0aW9uIG5nZShhKXtyZXR1cm4gdGhpc307Xy5iZD1mdW5jdGlvbiBvZ2UoYSl7cmV0dXJuIEViZSh0aGlzLmMsdGhpcy5iLGEpfTtfLmRjPWZ1bmN0aW9uIHBnZSgpe3JldHVybiBZZmUodGhpcyl9O18uTmo9ZnVuY3Rpb24gcWdlKCl7cmV0dXJuICFLYmUodGhpcy5jLHRoaXMuYil9O18uSmM9ZnVuY3Rpb24gcmdlKCl7cmV0dXJuIExiZSh0aGlzLmMsdGhpcy5iKX07Xy5jZD1mdW5jdGlvbiBzZ2UoKXtyZXR1cm4gTmJlKHRoaXMuYyx0aGlzLmIpfTtfLmRkPWZ1bmN0aW9uIHRnZShhKXtyZXR1cm4gT2JlKHRoaXMuYyx0aGlzLmIsYSl9O18uUWk9ZnVuY3Rpb24gdWdlKGEsYil7cmV0dXJuIFFiZSh0aGlzLmMsdGhpcy5iLGEsYil9O18uUmk9ZnVuY3Rpb24gdmdlKGEsYil7UmJlKHRoaXMuYyx0aGlzLmIsYSxiKX07Xy5lZD1mdW5jdGlvbiB3Z2UoYSl7cmV0dXJuIFNiZSh0aGlzLmMsdGhpcy5iLGEpfTtfLktjPWZ1bmN0aW9uIHhnZShhKXtyZXR1cm4gVGJlKHRoaXMuYyx0aGlzLmIsYSl9O18uZmQ9ZnVuY3Rpb24geWdlKGEsYil7cmV0dXJuIFpiZSh0aGlzLmMsdGhpcy5iLGEsYil9O18uV2I9ZnVuY3Rpb24gemdlKGEpe3diZSh0aGlzLmMsdGhpcy5iKTtWZmUodGhpcyxKRChhLDE1KSl9O18uZ2M9ZnVuY3Rpb24gQWdlKCl7cmV0dXJuIGdjZSh0aGlzLmMsdGhpcy5iKX07Xy5OYz1mdW5jdGlvbiBCZ2UoKXtyZXR1cm4gaGNlKHRoaXMuYyx0aGlzLmIpfTtfLk9jPWZ1bmN0aW9uIENnZShhKXtyZXR1cm4gamNlKHRoaXMuYyx0aGlzLmIsYSl9O18uSWI9ZnVuY3Rpb24gRGdlKCl7dmFyIGEsYjtiPW5ldyBIZ2I7Yi5hKz0nWyc7Zm9yKGE9cmJlKHRoaXMuYyx0aGlzLmIpO1djZShhKTspe0VnYihiLHhnYihZY2UoYSkpKTtXY2UoYSkmJihiLmErPUxxZSxiKX1iLmErPSddJztyZXR1cm4gYi5hfTtfLkRrPWZ1bmN0aW9uIEVnZSgpe3diZSh0aGlzLmMsdGhpcy5iKX07dmFyIEdhYj1qZWIoX0VlLCdGZWF0dXJlTWFwVXRpbC9GZWF0dXJlRUxpc3QnLDQ5Myk7WWNiKDYyOSwzOCxIRWUsR2dlKTtfLmVqPWZ1bmN0aW9uIEhnZShhKXtyZXR1cm4gRmdlKHRoaXMsYSl9O18uamo9ZnVuY3Rpb24gSWdlKGEpe3ZhciBiLGMsZCxlLGYsZyxoO3N3aXRjaCh0aGlzLmQpe2Nhc2UgMTpjYXNlIDI6e2Y9YS5naigpO2lmKFhEKGYpPT09WEQodGhpcy5jKSYmRmdlKHRoaXMsbnVsbCk9PWEuZWoobnVsbCkpe3RoaXMuZz1hLmZqKCk7YS5kaigpPT0xJiYodGhpcy5kPTEpO3JldHVybiB0cnVlfWJyZWFrfWNhc2UgMzp7ZT1hLmRqKCk7c3dpdGNoKGUpe2Nhc2UgMzp7Zj1hLmdqKCk7aWYoWEQoZik9PT1YRCh0aGlzLmMpJiZGZ2UodGhpcyxudWxsKT09YS5laihudWxsKSl7dGhpcy5kPTU7Yj1uZXcgd0RkKDIpO3RDZChiLHRoaXMuZyk7dENkKGIsYS5maigpKTt0aGlzLmc9YjtyZXR1cm4gdHJ1ZX1icmVha319YnJlYWt9Y2FzZSA1OntlPWEuZGooKTtzd2l0Y2goZSl7Y2FzZSAzOntmPWEuZ2ooKTtpZihYRChmKT09PVhEKHRoaXMuYykmJkZnZSh0aGlzLG51bGwpPT1hLmVqKG51bGwpKXtjPUpEKHRoaXMuZywxNik7Yy5FYyhhLmZqKCkpO3JldHVybiB0cnVlfWJyZWFrfX1icmVha31jYXNlIDQ6e2U9YS5kaigpO3N3aXRjaChlKXtjYXNlIDM6e2Y9YS5naigpO2lmKFhEKGYpPT09WEQodGhpcy5jKSYmRmdlKHRoaXMsbnVsbCk9PWEuZWoobnVsbCkpe3RoaXMuZD0xO3RoaXMuZz1hLmZqKCk7cmV0dXJuIHRydWV9YnJlYWt9Y2FzZSA0OntmPWEuZ2ooKTtpZihYRChmKT09PVhEKHRoaXMuYykmJkZnZSh0aGlzLG51bGwpPT1hLmVqKG51bGwpKXt0aGlzLmQ9NjtoPW5ldyB3RGQoMik7dENkKGgsdGhpcy5uKTt0Q2QoaCxhLmhqKCkpO3RoaXMubj1oO2c9V0MoT0MoY0UsMSksaXNlLDMwLDE1LFt0aGlzLm8sYS5paigpXSk7dGhpcy5nPWc7cmV0dXJuIHRydWV9YnJlYWt9fWJyZWFrfWNhc2UgNjp7ZT1hLmRqKCk7c3dpdGNoKGUpe2Nhc2UgNDp7Zj1hLmdqKCk7aWYoWEQoZik9PT1YRCh0aGlzLmMpJiZGZ2UodGhpcyxudWxsKT09YS5laihudWxsKSl7Yz1KRCh0aGlzLm4sMTYpO2MuRWMoYS5oaigpKTtnPUpEKHRoaXMuZyw1NCk7ZD1TQyhjRSxpc2UsMzAsZy5sZW5ndGgrMSwxNSwxKTskZ2IoZywwLGQsMCxnLmxlbmd0aCk7ZFtnLmxlbmd0aF09YS5paigpO3RoaXMuZz1kO3JldHVybiB0cnVlfWJyZWFrfX1icmVha319cmV0dXJuIGZhbHNlfTt2YXIgSGFiPWplYihfRWUsJ0ZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVFTm90aWZpY2F0aW9uSW1wbCcsNjI5KTtZY2IoNTQ5LDQ5Myx7MjA6MSwzMToxLDU1OjEsMTY6MSwxNToxLDYxOjEsNzY6MSwxNTk6MSwyMTg6MSwxOTgyOjEsNzE6MSw5NjoxfSxKZ2UpO18uTGw9ZnVuY3Rpb24gS2dlKGEsYil7cmV0dXJuIGpiZSh0aGlzLmMsYSxiKX07Xy5NbD1mdW5jdGlvbiBMZ2UoYSxiLGMpe3JldHVybiBxYmUodGhpcy5jLGEsYixjKX07Xy5ObD1mdW5jdGlvbiBNZ2UoYSxiLGMpe3JldHVybiB2YmUodGhpcy5jLGEsYixjKX07Xy5PbD1mdW5jdGlvbiBOZ2UoKXtyZXR1cm4gdGhpc307Xy5QbD1mdW5jdGlvbiBPZ2UoYSxiKXtyZXR1cm4gRGJlKHRoaXMuYyxhLGIpfTtfLlFsPWZ1bmN0aW9uIFBnZShhKXtyZXR1cm4gSkQoQ2JlKHRoaXMuYyx0aGlzLmIsYSxmYWxzZSksNzQpLklrKCl9O18uUmw9ZnVuY3Rpb24gUWdlKGEpe3JldHVybiBKRChDYmUodGhpcy5jLHRoaXMuYixhLGZhbHNlKSw3NCkua2QoKX07Xy5TbD1mdW5jdGlvbiBSZ2UoKXtyZXR1cm4gdGhpcy5hfTtfLlRsPWZ1bmN0aW9uIFNnZShhKXtyZXR1cm4gIUtiZSh0aGlzLmMsYSl9O18uVWw9ZnVuY3Rpb24gVGdlKGEsYil7JGJlKHRoaXMuYyxhLGIpfTtfLlZsPWZ1bmN0aW9uIFVnZShhKXtyZXR1cm4gX2JlKHRoaXMuYyxhKX07Xy5XbD1mdW5jdGlvbiBWZ2UoYSl7bGNlKHRoaXMuYyxhKX07dmFyIElhYj1qZWIoX0VlLCdGZWF0dXJlTWFwVXRpbC9GZWF0dXJlRmVhdHVyZU1hcCcsNTQ5KTtZY2IoMTI0NywxLGFGZSxXZ2UpO18uQ2s9ZnVuY3Rpb24gWGdlKGEpe3JldHVybiBDYmUodGhpcy5iLHRoaXMuYSwtMSxhKX07Xy5Oaj1mdW5jdGlvbiBZZ2UoKXtyZXR1cm4gIUtiZSh0aGlzLmIsdGhpcy5hKX07Xy5XYj1mdW5jdGlvbiBaZ2UoYSl7JGJlKHRoaXMuYix0aGlzLmEsYSl9O18uRGs9ZnVuY3Rpb24gJGdlKCl7d2JlKHRoaXMuYix0aGlzLmEpfTt2YXIgSmFiPWplYihfRWUsJ0ZlYXR1cmVNYXBVdGlsL0ZlYXR1cmVWYWx1ZScsMTI0Nyk7dmFyIF9nZSxhaGUsYmhlLGNoZSxkaGU7dmFyIE5hYj1sZWIoaUdlLCdBbnlUeXBlJyk7WWNiKDY2NSw2MyxOcmUsZmhlKTt2YXIgT2FiPWplYihpR2UsJ0ludmFsaWREYXRhdHlwZVZhbHVlRXhjZXB0aW9uJyw2NjUpO3ZhciBQYWI9bGViKGlHZSxqR2UpO3ZhciBRYWI9bGViKGlHZSxrR2UpO3ZhciBSYWI9bGViKGlHZSxsR2UpO3ZhciBnaGU7dmFyIGloZTt2YXIga2hlLGxoZSxtaGUsbmhlLG9oZSxwaGUscWhlLHJoZSxzaGUsdGhlLHVoZSx2aGUsd2hlLHhoZSx5aGUsemhlLEFoZSxCaGUsQ2hlLERoZSxFaGUsRmhlLEdoZSxIaGU7WWNiKDgyMyw1MDAsezEwOToxLDkzOjEsOTI6MSw1NzoxLDUyOjEsOTg6MSw4MzY6MX0sSmhlKTtfLkhoPWZ1bmN0aW9uIEtoZShhLGIsYyl7c3dpdGNoKGEpe2Nhc2UgMDppZihjKXJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSksdGhpcy5jO3JldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSksdGhpcy5jLmI7Y2FzZSAxOmlmKGMpcmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IG5jZSh0aGlzLDApKSxKRChNYmUodGhpcy5jLChJaGUoKSxsaGUpKSwxNTkpO3JldHVybiAoIXRoaXMuYyYmKHRoaXMuYz1uZXcgbmNlKHRoaXMsMCkpLEpEKEpEKE1iZSh0aGlzLmMsKEloZSgpLGxoZSkpLDE1OSksMjE4KSkuU2woKTtjYXNlIDI6aWYoYylyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgbmNlKHRoaXMsMikpLHRoaXMuYjtyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgbmNlKHRoaXMsMikpLHRoaXMuYi5iO31yZXR1cm4gZHFkKHRoaXMsYS1WVGQodGhpcy5laSgpKSxRVGQoKHRoaXMuaiYyKT09MD90aGlzLmVpKCk6KCF0aGlzLmsmJih0aGlzLms9bmV3IEFQZCksdGhpcy5rKS5LaygpLGEpLGIsYyl9O18uUWg9ZnVuY3Rpb24gTGhlKGEsYixjKXt2YXIgZDtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSksdWJlKHRoaXMuYyxhLGMpO2Nhc2UgMTpyZXR1cm4gKCF0aGlzLmMmJih0aGlzLmM9bmV3IG5jZSh0aGlzLDApKSxKRChKRChNYmUodGhpcy5jLChJaGUoKSxsaGUpKSwxNTkpLDcxKSkuVWsoYSxjKTtjYXNlIDI6cmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IG5jZSh0aGlzLDIpKSx1YmUodGhpcy5iLGEsYyk7fXJldHVybiBkPUpEKFFUZCgodGhpcy5qJjIpPT0wP3RoaXMuZWkoKTooIXRoaXMuayYmKHRoaXMuaz1uZXcgQVBkKSx0aGlzLmspLktrKCksYiksNjkpLGQudGsoKS54ayh0aGlzLENxZCh0aGlzKSxiLVZUZCh0aGlzLmVpKCkpLGEsYyl9O18uU2g9ZnVuY3Rpb24gTWhlKGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuICEhdGhpcy5jJiZ0aGlzLmMuaSE9MDtjYXNlIDE6cmV0dXJuICEoIXRoaXMuYyYmKHRoaXMuYz1uZXcgbmNlKHRoaXMsMCkpLEpEKE1iZSh0aGlzLmMsKEloZSgpLGxoZSkpLDE1OSkpLmRjKCk7Y2FzZSAyOnJldHVybiAhIXRoaXMuYiYmdGhpcy5iLmkhPTA7fXJldHVybiBlcWQodGhpcyxhLVZUZCh0aGlzLmVpKCkpLFFUZCgodGhpcy5qJjIpPT0wP3RoaXMuZWkoKTooIXRoaXMuayYmKHRoaXMuaz1uZXcgQVBkKSx0aGlzLmspLktrKCksYSkpfTtfLlpoPWZ1bmN0aW9uIE5oZShhLGIpe3N3aXRjaChhKXtjYXNlIDA6IXRoaXMuYyYmKHRoaXMuYz1uZXcgbmNlKHRoaXMsMCkpO1liZSh0aGlzLmMsYik7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgbmNlKHRoaXMsMCkpLEpEKEpEKE1iZSh0aGlzLmMsKEloZSgpLGxoZSkpLDE1OSksMjE4KSkuV2IoYik7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBuY2UodGhpcywyKSk7WWJlKHRoaXMuYixiKTtyZXR1cm47fWZxZCh0aGlzLGEtVlRkKHRoaXMuZWkoKSksUVRkKCh0aGlzLmomMik9PTA/dGhpcy5laSgpOighdGhpcy5rJiYodGhpcy5rPW5ldyBBUGQpLHRoaXMuaykuS2soKSxhKSxiKX07Xy5laT1mdW5jdGlvbiBPaGUoKXtyZXR1cm4gSWhlKCksa2hlfTtfLmdpPWZ1bmN0aW9uIFBoZShhKXtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLmMmJih0aGlzLmM9bmV3IG5jZSh0aGlzLDApKTtSR2QodGhpcy5jKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSksSkQoTWJlKHRoaXMuYywoSWhlKCksbGhlKSksMTU5KSkuJGIoKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IG5jZSh0aGlzLDIpKTtSR2QodGhpcy5iKTtyZXR1cm47fWdxZCh0aGlzLGEtVlRkKHRoaXMuZWkoKSksUVRkKCh0aGlzLmomMik9PTA/dGhpcy5laSgpOighdGhpcy5rJiYodGhpcy5rPW5ldyBBUGQpLHRoaXMuaykuS2soKSxhKSl9O18uSWI9ZnVuY3Rpb24gUWhlKCl7dmFyIGE7aWYoKHRoaXMuaiY0KSE9MClyZXR1cm4gR3FkKHRoaXMpO2E9bmV3IEpnYihHcWQodGhpcykpO2EuYSs9JyAobWl4ZWQ6ICc7RGdiKGEsdGhpcy5jKTthLmErPScsIGFueUF0dHJpYnV0ZTogJztEZ2IoYSx0aGlzLmIpO2EuYSs9JyknO3JldHVybiBhLmF9O3ZhciBTYWI9amViKG1HZSwnQW55VHlwZUltcGwnLDgyMyk7WWNiKDY2Niw1MDAsezEwOToxLDkzOjEsOTI6MSw1NzoxLDUyOjEsOTg6MSwyMDY1OjEsNjY2OjF9LFRoZSk7Xy5IaD1mdW5jdGlvbiBVaGUoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHRoaXMuYTtjYXNlIDE6cmV0dXJuIHRoaXMuYjt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChJaGUoKSx4aGUpKSxRVGQoKHRoaXMuaiYyKT09MD94aGU6KCF0aGlzLmsmJih0aGlzLms9bmV3IEFQZCksdGhpcy5rKS5LaygpLGEpLGIsYyl9O18uU2g9ZnVuY3Rpb24gVmhlKGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIHRoaXMuYSE9bnVsbDtjYXNlIDE6cmV0dXJuIHRoaXMuYiE9bnVsbDt9cmV0dXJuIGVxZCh0aGlzLGEtVlRkKChJaGUoKSx4aGUpKSxRVGQoKHRoaXMuaiYyKT09MD94aGU6KCF0aGlzLmsmJih0aGlzLms9bmV3IEFQZCksdGhpcy5rKS5LaygpLGEpKX07Xy5aaD1mdW5jdGlvbiBXaGUoYSxiKXtzd2l0Y2goYSl7Y2FzZSAwOlJoZSh0aGlzLE9EKGIpKTtyZXR1cm47Y2FzZSAxOlNoZSh0aGlzLE9EKGIpKTtyZXR1cm47fWZxZCh0aGlzLGEtVlRkKChJaGUoKSx4aGUpKSxRVGQoKHRoaXMuaiYyKT09MD94aGU6KCF0aGlzLmsmJih0aGlzLms9bmV3IEFQZCksdGhpcy5rKS5LaygpLGEpLGIpfTtfLmVpPWZ1bmN0aW9uIFhoZSgpe3JldHVybiBJaGUoKSx4aGV9O18uZ2k9ZnVuY3Rpb24gWWhlKGEpe3N3aXRjaChhKXtjYXNlIDA6dGhpcy5hPW51bGw7cmV0dXJuO2Nhc2UgMTp0aGlzLmI9bnVsbDtyZXR1cm47fWdxZCh0aGlzLGEtVlRkKChJaGUoKSx4aGUpKSxRVGQoKHRoaXMuaiYyKT09MD94aGU6KCF0aGlzLmsmJih0aGlzLms9bmV3IEFQZCksdGhpcy5rKS5LaygpLGEpKX07Xy5JYj1mdW5jdGlvbiBaaGUoKXt2YXIgYTtpZigodGhpcy5qJjQpIT0wKXJldHVybiBHcWQodGhpcyk7YT1uZXcgSmdiKEdxZCh0aGlzKSk7YS5hKz0nIChkYXRhOiAnO0VnYihhLHRoaXMuYSk7YS5hKz0nLCB0YXJnZXQ6ICc7RWdiKGEsdGhpcy5iKTthLmErPScpJztyZXR1cm4gYS5hfTtfLmE9bnVsbDtfLmI9bnVsbDt2YXIgVGFiPWplYihtR2UsJ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGwnLDY2Nik7WWNiKDY2Nyw4MjMsezEwOToxLDkzOjEsOTI6MSw1NzoxLDUyOjEsOTg6MSw4MzY6MSwyMDY2OjEsNjY3OjF9LGFpZSk7Xy5IaD1mdW5jdGlvbiBiaWUoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6aWYoYylyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgbmNlKHRoaXMsMCkpLHRoaXMuYztyZXR1cm4gIXRoaXMuYyYmKHRoaXMuYz1uZXcgbmNlKHRoaXMsMCkpLHRoaXMuYy5iO2Nhc2UgMTppZihjKXJldHVybiAhdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSksSkQoTWJlKHRoaXMuYywoSWhlKCksbGhlKSksMTU5KTtyZXR1cm4gKCF0aGlzLmMmJih0aGlzLmM9bmV3IG5jZSh0aGlzLDApKSxKRChKRChNYmUodGhpcy5jLChJaGUoKSxsaGUpKSwxNTkpLDIxOCkpLlNsKCk7Y2FzZSAyOmlmKGMpcmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IG5jZSh0aGlzLDIpKSx0aGlzLmI7cmV0dXJuICF0aGlzLmImJih0aGlzLmI9bmV3IG5jZSh0aGlzLDIpKSx0aGlzLmIuYjtjYXNlIDM6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IG5jZSh0aGlzLDApKSxPRChEYmUodGhpcy5jLChJaGUoKSxBaGUpLHRydWUpKTtjYXNlIDQ6cmV0dXJuIGJmZSh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IG5jZSh0aGlzLDApKSxPRChEYmUodGhpcy5jLChJaGUoKSxBaGUpLHRydWUpKSkpO2Nhc2UgNTpyZXR1cm4gdGhpcy5hO31yZXR1cm4gZHFkKHRoaXMsYS1WVGQoKEloZSgpLHpoZSkpLFFUZCgodGhpcy5qJjIpPT0wP3poZTooIXRoaXMuayYmKHRoaXMuaz1uZXcgQVBkKSx0aGlzLmspLktrKCksYSksYixjKX07Xy5TaD1mdW5jdGlvbiBjaWUoYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gISF0aGlzLmMmJnRoaXMuYy5pIT0wO2Nhc2UgMTpyZXR1cm4gISghdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSksSkQoTWJlKHRoaXMuYywoSWhlKCksbGhlKSksMTU5KSkuZGMoKTtjYXNlIDI6cmV0dXJuICEhdGhpcy5iJiZ0aGlzLmIuaSE9MDtjYXNlIDM6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IG5jZSh0aGlzLDApKSxPRChEYmUodGhpcy5jLChJaGUoKSxBaGUpLHRydWUpKSE9bnVsbDtjYXNlIDQ6cmV0dXJuIGJmZSh0aGlzLmEsKCF0aGlzLmMmJih0aGlzLmM9bmV3IG5jZSh0aGlzLDApKSxPRChEYmUodGhpcy5jLChJaGUoKSxBaGUpLHRydWUpKSkpIT1udWxsO2Nhc2UgNTpyZXR1cm4gISF0aGlzLmE7fXJldHVybiBlcWQodGhpcyxhLVZUZCgoSWhlKCksemhlKSksUVRkKCh0aGlzLmomMik9PTA/emhlOighdGhpcy5rJiYodGhpcy5rPW5ldyBBUGQpLHRoaXMuaykuS2soKSxhKSl9O18uWmg9ZnVuY3Rpb24gZGllKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSk7WWJlKHRoaXMuYyxiKTtyZXR1cm47Y2FzZSAxOighdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSksSkQoSkQoTWJlKHRoaXMuYywoSWhlKCksbGhlKSksMTU5KSwyMTgpKS5XYihiKTtyZXR1cm47Y2FzZSAyOiF0aGlzLmImJih0aGlzLmI9bmV3IG5jZSh0aGlzLDIpKTtZYmUodGhpcy5iLGIpO3JldHVybjtjYXNlIDM6X2hlKHRoaXMsT0QoYikpO3JldHVybjtjYXNlIDQ6X2hlKHRoaXMsYWZlKHRoaXMuYSxiKSk7cmV0dXJuO2Nhc2UgNTokaGUodGhpcyxKRChiLDE1NSkpO3JldHVybjt9ZnFkKHRoaXMsYS1WVGQoKEloZSgpLHpoZSkpLFFUZCgodGhpcy5qJjIpPT0wP3poZTooIXRoaXMuayYmKHRoaXMuaz1uZXcgQVBkKSx0aGlzLmspLktrKCksYSksYil9O18uZWk9ZnVuY3Rpb24gZWllKCl7cmV0dXJuIEloZSgpLHpoZX07Xy5naT1mdW5jdGlvbiBmaWUoYSl7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSk7UkdkKHRoaXMuYyk7cmV0dXJuO2Nhc2UgMTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgbmNlKHRoaXMsMCkpLEpEKE1iZSh0aGlzLmMsKEloZSgpLGxoZSkpLDE1OSkpLiRiKCk7cmV0dXJuO2Nhc2UgMjohdGhpcy5iJiYodGhpcy5iPW5ldyBuY2UodGhpcywyKSk7UkdkKHRoaXMuYik7cmV0dXJuO2Nhc2UgMzohdGhpcy5jJiYodGhpcy5jPW5ldyBuY2UodGhpcywwKSk7JGJlKHRoaXMuYywoSWhlKCksQWhlKSxudWxsKTtyZXR1cm47Y2FzZSA0Ol9oZSh0aGlzLGFmZSh0aGlzLmEsbnVsbCkpO3JldHVybjtjYXNlIDU6dGhpcy5hPW51bGw7cmV0dXJuO31ncWQodGhpcyxhLVZUZCgoSWhlKCksemhlKSksUVRkKCh0aGlzLmomMik9PTA/emhlOighdGhpcy5rJiYodGhpcy5rPW5ldyBBUGQpLHRoaXMuaykuS2soKSxhKSl9O3ZhciBVYWI9amViKG1HZSwnU2ltcGxlQW55VHlwZUltcGwnLDY2Nyk7WWNiKDY2OCw1MDAsezEwOToxLDkzOjEsOTI6MSw1NzoxLDUyOjEsOTg6MSwyMDY3OjEsNjY4OjF9LGdpZSk7Xy5IaD1mdW5jdGlvbiBoaWUoYSxiLGMpe3N3aXRjaChhKXtjYXNlIDA6aWYoYylyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgbmNlKHRoaXMsMCkpLHRoaXMuYTtyZXR1cm4gIXRoaXMuYSYmKHRoaXMuYT1uZXcgbmNlKHRoaXMsMCkpLHRoaXMuYS5iO2Nhc2UgMTpyZXR1cm4gYz8oIXRoaXMuYiYmKHRoaXMuYj1uZXcgWVFkKChjUGQoKSwkT2QpLHU3LHRoaXMsMSkpLHRoaXMuYik6KCF0aGlzLmImJih0aGlzLmI9bmV3IFlRZCgoY1BkKCksJE9kKSx1Nyx0aGlzLDEpKSxDSmQodGhpcy5iKSk7Y2FzZSAyOnJldHVybiBjPyghdGhpcy5jJiYodGhpcy5jPW5ldyBZUWQoKGNQZCgpLCRPZCksdTcsdGhpcywyKSksdGhpcy5jKTooIXRoaXMuYyYmKHRoaXMuYz1uZXcgWVFkKChjUGQoKSwkT2QpLHU3LHRoaXMsMikpLENKZCh0aGlzLmMpKTtjYXNlIDM6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IG5jZSh0aGlzLDApKSxNYmUodGhpcy5hLChJaGUoKSxEaGUpKTtjYXNlIDQ6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IG5jZSh0aGlzLDApKSxNYmUodGhpcy5hLChJaGUoKSxFaGUpKTtjYXNlIDU6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IG5jZSh0aGlzLDApKSxNYmUodGhpcy5hLChJaGUoKSxHaGUpKTtjYXNlIDY6cmV0dXJuICF0aGlzLmEmJih0aGlzLmE9bmV3IG5jZSh0aGlzLDApKSxNYmUodGhpcy5hLChJaGUoKSxIaGUpKTt9cmV0dXJuIGRxZCh0aGlzLGEtVlRkKChJaGUoKSxDaGUpKSxRVGQoKHRoaXMuaiYyKT09MD9DaGU6KCF0aGlzLmsmJih0aGlzLms9bmV3IEFQZCksdGhpcy5rKS5LaygpLGEpLGIsYyl9O18uUWg9ZnVuY3Rpb24gaWllKGEsYixjKXt2YXIgZDtzd2l0Y2goYil7Y2FzZSAwOnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSksdWJlKHRoaXMuYSxhLGMpO2Nhc2UgMTpyZXR1cm4gIXRoaXMuYiYmKHRoaXMuYj1uZXcgWVFkKChjUGQoKSwkT2QpLHU3LHRoaXMsMSkpLFdRZCh0aGlzLmIsYSxjKTtjYXNlIDI6cmV0dXJuICF0aGlzLmMmJih0aGlzLmM9bmV3IFlRZCgoY1BkKCksJE9kKSx1Nyx0aGlzLDIpKSxXUWQodGhpcy5jLGEsYyk7Y2FzZSA1OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSksV2ZlKE1iZSh0aGlzLmEsKEloZSgpLEdoZSkpLGEsYyk7fXJldHVybiBkPUpEKFFUZCgodGhpcy5qJjIpPT0wPyhJaGUoKSxDaGUpOighdGhpcy5rJiYodGhpcy5rPW5ldyBBUGQpLHRoaXMuaykuS2soKSxiKSw2OSksZC50aygpLnhrKHRoaXMsQ3FkKHRoaXMpLGItVlRkKChJaGUoKSxDaGUpKSxhLGMpfTtfLlNoPWZ1bmN0aW9uIGppZShhKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAhIXRoaXMuYSYmdGhpcy5hLmkhPTA7Y2FzZSAxOnJldHVybiAhIXRoaXMuYiYmdGhpcy5iLmYhPTA7Y2FzZSAyOnJldHVybiAhIXRoaXMuYyYmdGhpcy5jLmYhPTA7Y2FzZSAzOnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSksIVlmZShNYmUodGhpcy5hLChJaGUoKSxEaGUpKSk7Y2FzZSA0OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSksIVlmZShNYmUodGhpcy5hLChJaGUoKSxFaGUpKSk7Y2FzZSA1OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSksIVlmZShNYmUodGhpcy5hLChJaGUoKSxHaGUpKSk7Y2FzZSA2OnJldHVybiAhdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSksIVlmZShNYmUodGhpcy5hLChJaGUoKSxIaGUpKSk7fXJldHVybiBlcWQodGhpcyxhLVZUZCgoSWhlKCksQ2hlKSksUVRkKCh0aGlzLmomMik9PTA/Q2hlOighdGhpcy5rJiYodGhpcy5rPW5ldyBBUGQpLHRoaXMuaykuS2soKSxhKSl9O18uWmg9ZnVuY3Rpb24ga2llKGEsYil7c3dpdGNoKGEpe2Nhc2UgMDohdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7WWJlKHRoaXMuYSxiKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmImJih0aGlzLmI9bmV3IFlRZCgoY1BkKCksJE9kKSx1Nyx0aGlzLDEpKTtYUWQodGhpcy5iLGIpO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgWVFkKChjUGQoKSwkT2QpLHU3LHRoaXMsMikpO1hRZCh0aGlzLmMsYik7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7WGZlKE1iZSh0aGlzLmEsKEloZSgpLERoZSkpKTshdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7VmZlKE1iZSh0aGlzLmEsRGhlKSxKRChiLDE2KSk7cmV0dXJuO2Nhc2UgNDohdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7WGZlKE1iZSh0aGlzLmEsKEloZSgpLEVoZSkpKTshdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7VmZlKE1iZSh0aGlzLmEsRWhlKSxKRChiLDE2KSk7cmV0dXJuO2Nhc2UgNTohdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7WGZlKE1iZSh0aGlzLmEsKEloZSgpLEdoZSkpKTshdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7VmZlKE1iZSh0aGlzLmEsR2hlKSxKRChiLDE2KSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7WGZlKE1iZSh0aGlzLmEsKEloZSgpLEhoZSkpKTshdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7VmZlKE1iZSh0aGlzLmEsSGhlKSxKRChiLDE2KSk7cmV0dXJuO31mcWQodGhpcyxhLVZUZCgoSWhlKCksQ2hlKSksUVRkKCh0aGlzLmomMik9PTA/Q2hlOighdGhpcy5rJiYodGhpcy5rPW5ldyBBUGQpLHRoaXMuaykuS2soKSxhKSxiKX07Xy5laT1mdW5jdGlvbiBsaWUoKXtyZXR1cm4gSWhlKCksQ2hlfTtfLmdpPWZ1bmN0aW9uIG1pZShhKXtzd2l0Y2goYSl7Y2FzZSAwOiF0aGlzLmEmJih0aGlzLmE9bmV3IG5jZSh0aGlzLDApKTtSR2QodGhpcy5hKTtyZXR1cm47Y2FzZSAxOiF0aGlzLmImJih0aGlzLmI9bmV3IFlRZCgoY1BkKCksJE9kKSx1Nyx0aGlzLDEpKTt0aGlzLmIuYy4kYigpO3JldHVybjtjYXNlIDI6IXRoaXMuYyYmKHRoaXMuYz1uZXcgWVFkKChjUGQoKSwkT2QpLHU3LHRoaXMsMikpO3RoaXMuYy5jLiRiKCk7cmV0dXJuO2Nhc2UgMzohdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7WGZlKE1iZSh0aGlzLmEsKEloZSgpLERoZSkpKTtyZXR1cm47Y2FzZSA0OiF0aGlzLmEmJih0aGlzLmE9bmV3IG5jZSh0aGlzLDApKTtYZmUoTWJlKHRoaXMuYSwoSWhlKCksRWhlKSkpO3JldHVybjtjYXNlIDU6IXRoaXMuYSYmKHRoaXMuYT1uZXcgbmNlKHRoaXMsMCkpO1hmZShNYmUodGhpcy5hLChJaGUoKSxHaGUpKSk7cmV0dXJuO2Nhc2UgNjohdGhpcy5hJiYodGhpcy5hPW5ldyBuY2UodGhpcywwKSk7WGZlKE1iZSh0aGlzLmEsKEloZSgpLEhoZSkpKTtyZXR1cm47fWdxZCh0aGlzLGEtVlRkKChJaGUoKSxDaGUpKSxRVGQoKHRoaXMuaiYyKT09MD9DaGU6KCF0aGlzLmsmJih0aGlzLms9bmV3IEFQZCksdGhpcy5rKS5LaygpLGEpKX07Xy5JYj1mdW5jdGlvbiBuaWUoKXt2YXIgYTtpZigodGhpcy5qJjQpIT0wKXJldHVybiBHcWQodGhpcyk7YT1uZXcgSmdiKEdxZCh0aGlzKSk7YS5hKz0nIChtaXhlZDogJztEZ2IoYSx0aGlzLmEpO2EuYSs9JyknO3JldHVybiBhLmF9O3ZhciBWYWI9amViKG1HZSwnWE1MVHlwZURvY3VtZW50Um9vdEltcGwnLDY2OCk7WWNiKDE5NzQsNzA0LHsxMDk6MSw5MzoxLDkyOjEsNDY2OjEsMTU0OjEsNTc6MSwxMTM6MSw1MjoxLDk4OjEsMTU3OjEsMTE3OjEsMTE4OjEsMjA2ODoxfSxNaWUpO18ubmk9ZnVuY3Rpb24gTmllKGEsYil7c3dpdGNoKGEuZWsoKSl7Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDE2OmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAyNjpjYXNlIDMyOmNhc2UgMzM6Y2FzZSAzNDpjYXNlIDM2OmNhc2UgMzc6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUzOmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNTg6Y2FzZSA2MDpjYXNlIDYxOmNhc2UgNDpyZXR1cm4gYj09bnVsbD9udWxsOmFkYihiKTtjYXNlIDE5OmNhc2UgMjg6Y2FzZSAyOTpjYXNlIDM1OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQxOmNhc2UgNDY6Y2FzZSA1MjpjYXNlIDU0OmNhc2UgNTpyZXR1cm4gT0QoYik7Y2FzZSA2OnJldHVybiB1aWUoSkQoYiwxOTUpKTtjYXNlIDEyOmNhc2UgNDc6Y2FzZSA0OTpjYXNlIDExOnJldHVybiBYdWQodGhpcyxhLGIpO2Nhc2UgMTM6cmV0dXJuIGI9PW51bGw/bnVsbDpwaGIoSkQoYiwyNDUpKTtjYXNlIDE1OmNhc2UgMTQ6cmV0dXJuIGI9PW51bGw/bnVsbDp2aWUoQmViKE1EKGIpKSk7Y2FzZSAxNzpyZXR1cm4gd2llKChJaGUoKSxiKSk7Y2FzZSAxODpyZXR1cm4gd2llKGIpO2Nhc2UgMjE6Y2FzZSAyMDpyZXR1cm4gYj09bnVsbD9udWxsOnhpZShKRChiLDE2MCkuYSk7Y2FzZSAyNzpyZXR1cm4geWllKEpEKGIsMTk1KSk7Y2FzZSAzMDpyZXR1cm4gemllKChJaGUoKSxKRChiLDE1KSkpO2Nhc2UgMzE6cmV0dXJuIHppZShKRChiLDE1KSk7Y2FzZSA0MDpyZXR1cm4gQ2llKChJaGUoKSxiKSk7Y2FzZSA0MjpyZXR1cm4gQWllKChJaGUoKSxiKSk7Y2FzZSA0MzpyZXR1cm4gQWllKGIpO2Nhc2UgNTk6Y2FzZSA0ODpyZXR1cm4gQmllKChJaGUoKSxiKSk7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IFRlYihXQ2UrYS52ZSgpK1hDZSkpO319O18ub2k9ZnVuY3Rpb24gT2llKGEpe3ZhciBiLGMsZCxlLGY7c3dpdGNoKGEuRz09LTEmJihhLkc9KGM9V1NkKGEpLGM/QVVkKGMucmkoKSxhKTotMSkpLGEuRyl7Y2FzZSAwOnJldHVybiBiPW5ldyBKaGUsYjtjYXNlIDE6cmV0dXJuIGQ9bmV3IFRoZSxkO2Nhc2UgMjpyZXR1cm4gZT1uZXcgYWllLGU7Y2FzZSAzOnJldHVybiBmPW5ldyBnaWUsZjtkZWZhdWx0OnRocm93IHNjYihuZXcgVGViKCRDZSthLnpiK1hDZSkpO319O18ucGk9ZnVuY3Rpb24gUGllKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHI7c3dpdGNoKGEuZWsoKSl7Y2FzZSA1OmNhc2UgNTI6Y2FzZSA0OnJldHVybiBiO2Nhc2UgNjpyZXR1cm4gRGllKGIpO2Nhc2UgODpjYXNlIDc6cmV0dXJuIGI9PW51bGw/bnVsbDp0aWUoYik7Y2FzZSA5OnJldHVybiBiPT1udWxsP251bGw6UmRiKEZkYigoZD1JcGUoYix0cnVlKSxkLmxlbmd0aD4wJiYoQURiKDAsZC5sZW5ndGgpLGQuY2hhckNvZGVBdCgwKT09NDMpPyhBRGIoMSxkLmxlbmd0aCsxKSxkLnN1YnN0cigxKSk6ZCksLTEyOCwxMjcpPDwyND4+MjQpO2Nhc2UgMTA6cmV0dXJuIGI9PW51bGw/bnVsbDpSZGIoRmRiKChlPUlwZShiLHRydWUpLGUubGVuZ3RoPjAmJihBRGIoMCxlLmxlbmd0aCksZS5jaGFyQ29kZUF0KDApPT00Myk/KEFEYigxLGUubGVuZ3RoKzEpLGUuc3Vic3RyKDEpKTplKSwtMTI4LDEyNyk8PDI0Pj4yNCk7Y2FzZSAxMTpyZXR1cm4gT0QoWXVkKHRoaXMsKEloZSgpLG9oZSksYikpO2Nhc2UgMTI6cmV0dXJuIE9EKFl1ZCh0aGlzLChJaGUoKSxwaGUpLGIpKTtjYXNlIDEzOnJldHVybiBiPT1udWxsP251bGw6bmV3IHNoYihJcGUoYix0cnVlKSk7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiBFaWUoYik7Y2FzZSAxNjpyZXR1cm4gT0QoWXVkKHRoaXMsKEloZSgpLHFoZSksYikpO2Nhc2UgMTc6cmV0dXJuIEZpZSgoSWhlKCksYikpO2Nhc2UgMTg6cmV0dXJuIEZpZShiKTtjYXNlIDI4OmNhc2UgMjk6Y2FzZSAzNTpjYXNlIDM4OmNhc2UgMzk6Y2FzZSA0MTpjYXNlIDU0OmNhc2UgMTk6cmV0dXJuIElwZShiLHRydWUpO2Nhc2UgMjE6Y2FzZSAyMDpyZXR1cm4gR2llKGIpO2Nhc2UgMjI6cmV0dXJuIE9EKFl1ZCh0aGlzLChJaGUoKSxyaGUpLGIpKTtjYXNlIDIzOnJldHVybiBPRChZdWQodGhpcywoSWhlKCksc2hlKSxiKSk7Y2FzZSAyNDpyZXR1cm4gT0QoWXVkKHRoaXMsKEloZSgpLHRoZSksYikpO2Nhc2UgMjU6cmV0dXJuIE9EKFl1ZCh0aGlzLChJaGUoKSx1aGUpLGIpKTtjYXNlIDI2OnJldHVybiBPRChZdWQodGhpcywoSWhlKCksdmhlKSxiKSk7Y2FzZSAyNzpyZXR1cm4gSGllKGIpO2Nhc2UgMzA6cmV0dXJuIElpZSgoSWhlKCksYikpO2Nhc2UgMzE6cmV0dXJuIElpZShiKTtjYXNlIDMyOnJldHVybiBiPT1udWxsP251bGw6amZiKEZkYigoaz1JcGUoYix0cnVlKSxrLmxlbmd0aD4wJiYoQURiKDAsay5sZW5ndGgpLGsuY2hhckNvZGVBdCgwKT09NDMpPyhBRGIoMSxrLmxlbmd0aCsxKSxrLnN1YnN0cigxKSk6ayksTHJlLEhxZSkpO2Nhc2UgMzM6cmV0dXJuIGI9PW51bGw/bnVsbDpuZXcgWGhiKChsPUlwZShiLHRydWUpLGwubGVuZ3RoPjAmJihBRGIoMCxsLmxlbmd0aCksbC5jaGFyQ29kZUF0KDApPT00Myk/KEFEYigxLGwubGVuZ3RoKzEpLGwuc3Vic3RyKDEpKTpsKSk7Y2FzZSAzNDpyZXR1cm4gYj09bnVsbD9udWxsOmpmYihGZGIoKG09SXBlKGIsdHJ1ZSksbS5sZW5ndGg+MCYmKEFEYigwLG0ubGVuZ3RoKSxtLmNoYXJDb2RlQXQoMCk9PTQzKT8oQURiKDEsbS5sZW5ndGgrMSksbS5zdWJzdHIoMSkpOm0pLExyZSxIcWUpKTtjYXNlIDM2OnJldHVybiBiPT1udWxsP251bGw6eWZiKEdkYigobj1JcGUoYix0cnVlKSxuLmxlbmd0aD4wJiYoQURiKDAsbi5sZW5ndGgpLG4uY2hhckNvZGVBdCgwKT09NDMpPyhBRGIoMSxuLmxlbmd0aCsxKSxuLnN1YnN0cigxKSk6bikpKTtjYXNlIDM3OnJldHVybiBiPT1udWxsP251bGw6eWZiKEdkYigobz1JcGUoYix0cnVlKSxvLmxlbmd0aD4wJiYoQURiKDAsby5sZW5ndGgpLG8uY2hhckNvZGVBdCgwKT09NDMpPyhBRGIoMSxvLmxlbmd0aCsxKSxvLnN1YnN0cigxKSk6bykpKTtjYXNlIDQwOnJldHVybiBMaWUoKEloZSgpLGIpKTtjYXNlIDQyOnJldHVybiBKaWUoKEloZSgpLGIpKTtjYXNlIDQzOnJldHVybiBKaWUoYik7Y2FzZSA0NDpyZXR1cm4gYj09bnVsbD9udWxsOm5ldyBYaGIoKHA9SXBlKGIsdHJ1ZSkscC5sZW5ndGg+MCYmKEFEYigwLHAubGVuZ3RoKSxwLmNoYXJDb2RlQXQoMCk9PTQzKT8oQURiKDEscC5sZW5ndGgrMSkscC5zdWJzdHIoMSkpOnApKTtjYXNlIDQ1OnJldHVybiBiPT1udWxsP251bGw6bmV3IFhoYigocT1JcGUoYix0cnVlKSxxLmxlbmd0aD4wJiYoQURiKDAscS5sZW5ndGgpLHEuY2hhckNvZGVBdCgwKT09NDMpPyhBRGIoMSxxLmxlbmd0aCsxKSxxLnN1YnN0cigxKSk6cSkpO2Nhc2UgNDY6cmV0dXJuIElwZShiLGZhbHNlKTtjYXNlIDQ3OnJldHVybiBPRChZdWQodGhpcywoSWhlKCksd2hlKSxiKSk7Y2FzZSA1OTpjYXNlIDQ4OnJldHVybiBLaWUoKEloZSgpLGIpKTtjYXNlIDQ5OnJldHVybiBPRChZdWQodGhpcywoSWhlKCkseWhlKSxiKSk7Y2FzZSA1MDpyZXR1cm4gYj09bnVsbD9udWxsOlVmYihGZGIoKHI9SXBlKGIsdHJ1ZSksci5sZW5ndGg+MCYmKEFEYigwLHIubGVuZ3RoKSxyLmNoYXJDb2RlQXQoMCk9PTQzKT8oQURiKDEsci5sZW5ndGgrMSksci5zdWJzdHIoMSkpOnIpLENGZSwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MTpyZXR1cm4gYj09bnVsbD9udWxsOlVmYihGZGIoKGY9SXBlKGIsdHJ1ZSksZi5sZW5ndGg+MCYmKEFEYigwLGYubGVuZ3RoKSxmLmNoYXJDb2RlQXQoMCk9PTQzKT8oQURiKDEsZi5sZW5ndGgrMSksZi5zdWJzdHIoMSkpOmYpLENGZSwzMjc2Nyk8PDE2Pj4xNik7Y2FzZSA1MzpyZXR1cm4gT0QoWXVkKHRoaXMsKEloZSgpLEJoZSksYikpO2Nhc2UgNTU6cmV0dXJuIGI9PW51bGw/bnVsbDpVZmIoRmRiKChnPUlwZShiLHRydWUpLGcubGVuZ3RoPjAmJihBRGIoMCxnLmxlbmd0aCksZy5jaGFyQ29kZUF0KDApPT00Myk/KEFEYigxLGcubGVuZ3RoKzEpLGcuc3Vic3RyKDEpKTpnKSxDRmUsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTY6cmV0dXJuIGI9PW51bGw/bnVsbDpVZmIoRmRiKChoPUlwZShiLHRydWUpLGgubGVuZ3RoPjAmJihBRGIoMCxoLmxlbmd0aCksaC5jaGFyQ29kZUF0KDApPT00Myk/KEFEYigxLGgubGVuZ3RoKzEpLGguc3Vic3RyKDEpKTpoKSxDRmUsMzI3NjcpPDwxNj4+MTYpO2Nhc2UgNTc6cmV0dXJuIGI9PW51bGw/bnVsbDp5ZmIoR2RiKChpPUlwZShiLHRydWUpLGkubGVuZ3RoPjAmJihBRGIoMCxpLmxlbmd0aCksaS5jaGFyQ29kZUF0KDApPT00Myk/KEFEYigxLGkubGVuZ3RoKzEpLGkuc3Vic3RyKDEpKTppKSkpO2Nhc2UgNTg6cmV0dXJuIGI9PW51bGw/bnVsbDp5ZmIoR2RiKChqPUlwZShiLHRydWUpLGoubGVuZ3RoPjAmJihBRGIoMCxqLmxlbmd0aCksai5jaGFyQ29kZUF0KDApPT00Myk/KEFEYigxLGoubGVuZ3RoKzEpLGouc3Vic3RyKDEpKTpqKSkpO2Nhc2UgNjA6cmV0dXJuIGI9PW51bGw/bnVsbDpqZmIoRmRiKChjPUlwZShiLHRydWUpLGMubGVuZ3RoPjAmJihBRGIoMCxjLmxlbmd0aCksYy5jaGFyQ29kZUF0KDApPT00Myk/KEFEYigxLGMubGVuZ3RoKzEpLGMuc3Vic3RyKDEpKTpjKSxMcmUsSHFlKSk7Y2FzZSA2MTpyZXR1cm4gYj09bnVsbD9udWxsOmpmYihGZGIoSXBlKGIsdHJ1ZSksTHJlLEhxZSkpO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBUZWIoV0NlK2EudmUoKStYQ2UpKTt9fTt2YXIgb2llLHBpZSxxaWUscmllO3ZhciBXYWI9amViKG1HZSwnWE1MVHlwZUZhY3RvcnlJbXBsJywxOTc0KTtZY2IoNTc3LDE4NCx7MTA5OjEsOTM6MSw5MjoxLDE1NDoxLDE5NzoxLDU3OjEsMjQwOjEsMTEzOjEsNTI6MSw5ODoxLDE1NzoxLDE4NDoxLDExNzoxLDExODoxLDY3NToxLDE5OTA6MSw1Nzc6MX0sV2llKTtfLk49ZmFsc2U7Xy5PPWZhbHNlO3ZhciBSaWU9ZmFsc2U7dmFyIFZiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwnLDU3Nyk7WWNiKDE5MDcsMSx7ODMwOjF9LFppZSk7Xy5Iaz1mdW5jdGlvbiAkaWUoKXtyZXR1cm4gTXBlKCksTHBlfTt2YXIgZmJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8xJywxOTA3KTtZY2IoMTkxNiwxLFBGZSxfaWUpO18uY2s9ZnVuY3Rpb24gYWplKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiBiamUoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIFhhYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvMTAnLDE5MTYpO1ljYigxOTE3LDEsUEZlLGNqZSk7Xy5jaz1mdW5jdGlvbiBkamUoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIGVqZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgWWFiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8xMScsMTkxNyk7WWNiKDE5MTgsMSxQRmUsZmplKTtfLmNrPWZ1bmN0aW9uIGdqZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gaGplKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciBaYWI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzEyJywxOTE4KTtZY2IoMTkxOSwxLFBGZSxpamUpO18uY2s9ZnVuY3Rpb24gamplKGEpe3JldHVybiBURChhKX07Xy5kaz1mdW5jdGlvbiBramUoYSl7cmV0dXJuIFNDKExJLGhyZSwzNDEsYSw3LDEpfTt2YXIgJGFiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8xMycsMTkxOSk7WWNiKDE5MjAsMSxQRmUsbGplKTtfLmNrPWZ1bmN0aW9uIG1qZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gbmplKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciBfYWI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzE0JywxOTIwKTtZY2IoMTkyMSwxLFBGZSxvamUpO18uY2s9ZnVuY3Rpb24gcGplKGEpe3JldHVybiBSRChhLDE1KX07Xy5kaz1mdW5jdGlvbiBxamUoYSl7cmV0dXJuIFNDKEhLLG51ZSwxNSxhLDAsMSl9O3ZhciBhYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzE1JywxOTIxKTtZY2IoMTkyMiwxLFBGZSxyamUpO18uY2s9ZnVuY3Rpb24gc2plKGEpe3JldHVybiBSRChhLDE1KX07Xy5kaz1mdW5jdGlvbiB0amUoYSl7cmV0dXJuIFNDKEhLLG51ZSwxNSxhLDAsMSl9O3ZhciBiYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzE2JywxOTIyKTtZY2IoMTkyMywxLFBGZSx1amUpO18uY2s9ZnVuY3Rpb24gdmplKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiB3amUoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIGNiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvMTcnLDE5MjMpO1ljYigxOTI0LDEsUEZlLHhqZSk7Xy5jaz1mdW5jdGlvbiB5amUoYSl7cmV0dXJuIFJEKGEsMTYwKX07Xy5kaz1mdW5jdGlvbiB6amUoYSl7cmV0dXJuIFNDKFFJLGhyZSwxNjAsYSwwLDEpfTt2YXIgZGJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8xOCcsMTkyNCk7WWNiKDE5MjUsMSxQRmUsQWplKTtfLmNrPWZ1bmN0aW9uIEJqZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gQ2plKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciBlYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzE5JywxOTI1KTtZY2IoMTkwOCwxLFBGZSxEamUpO18uY2s9ZnVuY3Rpb24gRWplKGEpe3JldHVybiBSRChhLDgzNil9O18uZGs9ZnVuY3Rpb24gRmplKGEpe3JldHVybiBTQyhOYWIsTnFlLDgzNixhLDAsMSl9O3ZhciBxYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzInLDE5MDgpO1ljYigxOTI2LDEsUEZlLEdqZSk7Xy5jaz1mdW5jdGlvbiBIamUoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIElqZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgZ2JiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yMCcsMTkyNik7WWNiKDE5MjcsMSxQRmUsSmplKTtfLmNrPWZ1bmN0aW9uIEtqZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gTGplKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciBoYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzIxJywxOTI3KTtZY2IoMTkyOCwxLFBGZSxNamUpO18uY2s9ZnVuY3Rpb24gTmplKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiBPamUoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIGliYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvMjInLDE5MjgpO1ljYigxOTI5LDEsUEZlLFBqZSk7Xy5jaz1mdW5jdGlvbiBRamUoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIFJqZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgamJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yMycsMTkyOSk7WWNiKDE5MzAsMSxQRmUsU2plKTtfLmNrPWZ1bmN0aW9uIFRqZShhKXtyZXR1cm4gUkQoYSwxOTUpfTtfLmRrPWZ1bmN0aW9uIFVqZShhKXtyZXR1cm4gU0MoJEQsaHJlLDE5NSxhLDAsMil9O3ZhciBrYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzI0JywxOTMwKTtZY2IoMTkzMSwxLFBGZSxWamUpO18uY2s9ZnVuY3Rpb24gV2plKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiBYamUoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIGxiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvMjUnLDE5MzEpO1ljYigxOTMyLDEsUEZlLFlqZSk7Xy5jaz1mdW5jdGlvbiBaamUoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uICRqZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgbWJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yNicsMTkzMik7WWNiKDE5MzMsMSxQRmUsX2plKTtfLmNrPWZ1bmN0aW9uIGFrZShhKXtyZXR1cm4gUkQoYSwxNSl9O18uZGs9ZnVuY3Rpb24gYmtlKGEpe3JldHVybiBTQyhISyxudWUsMTUsYSwwLDEpfTt2YXIgbmJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yNycsMTkzMyk7WWNiKDE5MzQsMSxQRmUsY2tlKTtfLmNrPWZ1bmN0aW9uIGRrZShhKXtyZXR1cm4gUkQoYSwxNSl9O18uZGs9ZnVuY3Rpb24gZWtlKGEpe3JldHVybiBTQyhISyxudWUsMTUsYSwwLDEpfTt2YXIgb2JiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8yOCcsMTkzNCk7WWNiKDE5MzUsMSxQRmUsZmtlKTtfLmNrPWZ1bmN0aW9uIGdrZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gaGtlKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciBwYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzI5JywxOTM1KTtZY2IoMTkwOSwxLFBGZSxpa2UpO18uY2s9ZnVuY3Rpb24gamtlKGEpe3JldHVybiBSRChhLDY2Nil9O18uZGs9ZnVuY3Rpb24ga2tlKGEpe3JldHVybiBTQyhQYWIsTnFlLDIwNjUsYSwwLDEpfTt2YXIgQmJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8zJywxOTA5KTtZY2IoMTkzNiwxLFBGZSxsa2UpO18uY2s9ZnVuY3Rpb24gbWtlKGEpe3JldHVybiBSRChhLDE3KX07Xy5kaz1mdW5jdGlvbiBua2UoYSl7cmV0dXJuIFNDKFVJLGhyZSwxNyxhLDAsMSl9O3ZhciByYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzMwJywxOTM2KTtZY2IoMTkzNywxLFBGZSxva2UpO18uY2s9ZnVuY3Rpb24gcGtlKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiBxa2UoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIHNiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvMzEnLDE5MzcpO1ljYigxOTM4LDEsUEZlLHJrZSk7Xy5jaz1mdW5jdGlvbiBza2UoYSl7cmV0dXJuIFJEKGEsMTkwKX07Xy5kaz1mdW5jdGlvbiB0a2UoYSl7cmV0dXJuIFNDKFhJLGhyZSwxOTAsYSwwLDEpfTt2YXIgdGJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8zMicsMTkzOCk7WWNiKDE5MzksMSxQRmUsdWtlKTtfLmNrPWZ1bmN0aW9uIHZrZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gd2tlKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciB1YmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzMzJywxOTM5KTtZY2IoMTk0MCwxLFBGZSx4a2UpO18uY2s9ZnVuY3Rpb24geWtlKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiB6a2UoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIHZiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvMzQnLDE5NDApO1ljYigxOTQxLDEsUEZlLEFrZSk7Xy5jaz1mdW5jdGlvbiBCa2UoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIENrZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgd2JiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC8zNScsMTk0MSk7WWNiKDE5NDIsMSxQRmUsRGtlKTtfLmNrPWZ1bmN0aW9uIEVrZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gRmtlKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciB4YmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzM2JywxOTQyKTtZY2IoMTk0MywxLFBGZSxHa2UpO18uY2s9ZnVuY3Rpb24gSGtlKGEpe3JldHVybiBSRChhLDE1KX07Xy5kaz1mdW5jdGlvbiBJa2UoYSl7cmV0dXJuIFNDKEhLLG51ZSwxNSxhLDAsMSl9O3ZhciB5YmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzM3JywxOTQzKTtZY2IoMTk0NCwxLFBGZSxKa2UpO18uY2s9ZnVuY3Rpb24gS2tlKGEpe3JldHVybiBSRChhLDE1KX07Xy5kaz1mdW5jdGlvbiBMa2UoYSl7cmV0dXJuIFNDKEhLLG51ZSwxNSxhLDAsMSl9O3ZhciB6YmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzM4JywxOTQ0KTtZY2IoMTk0NSwxLFBGZSxNa2UpO18uY2s9ZnVuY3Rpb24gTmtlKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiBPa2UoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIEFiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvMzknLDE5NDUpO1ljYigxOTEwLDEsUEZlLFBrZSk7Xy5jaz1mdW5jdGlvbiBRa2UoYSl7cmV0dXJuIFJEKGEsNjY3KX07Xy5kaz1mdW5jdGlvbiBSa2UoYSl7cmV0dXJuIFNDKFFhYixOcWUsMjA2NixhLDAsMSl9O3ZhciBNYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzQnLDE5MTApO1ljYigxOTQ2LDEsUEZlLFNrZSk7Xy5jaz1mdW5jdGlvbiBUa2UoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIFVrZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgQ2JiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC80MCcsMTk0Nik7WWNiKDE5NDcsMSxQRmUsVmtlKTtfLmNrPWZ1bmN0aW9uIFdrZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gWGtlKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciBEYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzQxJywxOTQ3KTtZY2IoMTk0OCwxLFBGZSxZa2UpO18uY2s9ZnVuY3Rpb24gWmtlKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiAka2UoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIEViYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvNDInLDE5NDgpO1ljYigxOTQ5LDEsUEZlLF9rZSk7Xy5jaz1mdW5jdGlvbiBhbGUoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIGJsZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgRmJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC80MycsMTk0OSk7WWNiKDE5NTAsMSxQRmUsY2xlKTtfLmNrPWZ1bmN0aW9uIGRsZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gZWxlKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciBHYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzQ0JywxOTUwKTtZY2IoMTk1MSwxLFBGZSxmbGUpO18uY2s9ZnVuY3Rpb24gZ2xlKGEpe3JldHVybiBSRChhLDE5MSl9O18uZGs9ZnVuY3Rpb24gaGxlKGEpe3JldHVybiBTQyhjSixocmUsMTkxLGEsMCwxKX07dmFyIEhiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvNDUnLDE5NTEpO1ljYigxOTUyLDEsUEZlLGlsZSk7Xy5jaz1mdW5jdGlvbiBqbGUoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIGtsZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgSWJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC80NicsMTk1Mik7WWNiKDE5NTMsMSxQRmUsbGxlKTtfLmNrPWZ1bmN0aW9uIG1sZShhKXtyZXR1cm4gVkQoYSl9O18uZGs9ZnVuY3Rpb24gbmxlKGEpe3JldHVybiBTQyhoSixocmUsMixhLDYsMSl9O3ZhciBKYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzQ3JywxOTUzKTtZY2IoMTk1NCwxLFBGZSxvbGUpO18uY2s9ZnVuY3Rpb24gcGxlKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiBxbGUoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIEtiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvNDgnLDE5NTQpO1ljYigxOTU1LDEsUEZlLHJsZSk7Xy5jaz1mdW5jdGlvbiBzbGUoYSl7cmV0dXJuIFJEKGEsMTkxKX07Xy5kaz1mdW5jdGlvbiB0bGUoYSl7cmV0dXJuIFNDKGNKLGhyZSwxOTEsYSwwLDEpfTt2YXIgTGJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC80OScsMTk1NSk7WWNiKDE5MTEsMSxQRmUsdWxlKTtfLmNrPWZ1bmN0aW9uIHZsZShhKXtyZXR1cm4gUkQoYSw2NjgpfTtfLmRrPWZ1bmN0aW9uIHdsZShhKXtyZXR1cm4gU0MoUmFiLE5xZSwyMDY3LGEsMCwxKX07dmFyIFFiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvNScsMTkxMSk7WWNiKDE5NTYsMSxQRmUseGxlKTtfLmNrPWZ1bmN0aW9uIHlsZShhKXtyZXR1cm4gUkQoYSwxOTApfTtfLmRrPWZ1bmN0aW9uIHpsZShhKXtyZXR1cm4gU0MoWEksaHJlLDE5MCxhLDAsMSl9O3ZhciBOYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzUwJywxOTU2KTtZY2IoMTk1NywxLFBGZSxBbGUpO18uY2s9ZnVuY3Rpb24gQmxlKGEpe3JldHVybiBWRChhKX07Xy5kaz1mdW5jdGlvbiBDbGUoYSl7cmV0dXJuIFNDKGhKLGhyZSwyLGEsNiwxKX07dmFyIE9iYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvNTEnLDE5NTcpO1ljYigxOTU4LDEsUEZlLERsZSk7Xy5jaz1mdW5jdGlvbiBFbGUoYSl7cmV0dXJuIFJEKGEsMTcpfTtfLmRrPWZ1bmN0aW9uIEZsZShhKXtyZXR1cm4gU0MoVUksaHJlLDE3LGEsMCwxKX07dmFyIFBiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvNTInLDE5NTgpO1ljYigxOTEyLDEsUEZlLEdsZSk7Xy5jaz1mdW5jdGlvbiBIbGUoYSl7cmV0dXJuIFZEKGEpfTtfLmRrPWZ1bmN0aW9uIElsZShhKXtyZXR1cm4gU0MoaEosaHJlLDIsYSw2LDEpfTt2YXIgUmJiPWplYihtR2UsJ1hNTFR5cGVQYWNrYWdlSW1wbC82JywxOTEyKTtZY2IoMTkxMywxLFBGZSxKbGUpO18uY2s9ZnVuY3Rpb24gS2xlKGEpe3JldHVybiBSRChhLDE5NSl9O18uZGs9ZnVuY3Rpb24gTGxlKGEpe3JldHVybiBTQygkRCxocmUsMTk1LGEsMCwyKX07dmFyIFNiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvNycsMTkxMyk7WWNiKDE5MTQsMSxQRmUsTWxlKTtfLmNrPWZ1bmN0aW9uIE5sZShhKXtyZXR1cm4gU0QoYSl9O18uZGs9ZnVuY3Rpb24gT2xlKGEpe3JldHVybiBTQyhHSSxocmUsNDcxLGEsOCwxKX07dmFyIFRiYj1qZWIobUdlLCdYTUxUeXBlUGFja2FnZUltcGwvOCcsMTkxNCk7WWNiKDE5MTUsMSxQRmUsUGxlKTtfLmNrPWZ1bmN0aW9uIFFsZShhKXtyZXR1cm4gUkQoYSwyMTkpfTtfLmRrPWZ1bmN0aW9uIFJsZShhKXtyZXR1cm4gU0MoSEksaHJlLDIxOSxhLDAsMSl9O3ZhciBVYmI9amViKG1HZSwnWE1MVHlwZVBhY2thZ2VJbXBsLzknLDE5MTUpO3ZhciBTbGUsVGxlO3ZhciBabGUsJGxlO3ZhciBjbWU7WWNiKDUzLDYzLE5yZSxlbWUpO3ZhciBXYmI9amViKE1HZSwnUmVnRXgvUGFyc2VFeGNlcHRpb24nLDUzKTtZY2IoODE1LDEse30sbW1lKTtfLiRsPWZ1bmN0aW9uIG5tZShhKXtyZXR1cm4gYTx0aGlzLmomJl9mYih0aGlzLmksYSk9PTYzfTtfLl9sPWZ1bmN0aW9uIG9tZSgpe3ZhciBhLGIsYyxkLGU7aWYodGhpcy5jIT0xMCl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLFdEZSkpKSk7YT10aGlzLmE7c3dpdGNoKGEpe2Nhc2UgMTAxOmE9Mjc7YnJlYWs7Y2FzZSAxMDI6YT0xMjticmVhaztjYXNlIDExMDphPTEwO2JyZWFrO2Nhc2UgMTE0OmE9MTM7YnJlYWs7Y2FzZSAxMTY6YT05O2JyZWFrO2Nhc2UgMTIwOmZtZSh0aGlzKTtpZih0aGlzLmMhPTApdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx0RWUpKSkpO2lmKHRoaXMuYT09MTIzKXtlPTA7Yz0wO2Rve2ZtZSh0aGlzKTtpZih0aGlzLmMhPTApdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx0RWUpKSkpO2lmKChlPXFtZSh0aGlzLmEpKTwwKWJyZWFrO2lmKGM+YyoxNil0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHVFZSkpKSk7Yz1jKjE2K2V9d2hpbGUodHJ1ZSk7aWYodGhpcy5hIT0xMjUpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx2RWUpKSkpO2lmKGM+TkdlKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksd0VlKSkpKTthPWN9ZWxzZXtlPTA7aWYodGhpcy5jIT0wfHwoZT1xbWUodGhpcy5hKSk8MCl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHRFZSkpKSk7Yz1lO2ZtZSh0aGlzKTtpZih0aGlzLmMhPTB8fChlPXFtZSh0aGlzLmEpKTwwKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksdEVlKSkpKTtjPWMqMTYrZTthPWN9YnJlYWs7Y2FzZSAxMTc6ZD0wO2ZtZSh0aGlzKTtpZih0aGlzLmMhPTB8fChkPXFtZSh0aGlzLmEpKTwwKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksdEVlKSkpKTtiPWQ7Zm1lKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGQ9cW1lKHRoaXMuYSkpPDApdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx0RWUpKSkpO2I9YioxNitkO2ZtZSh0aGlzKTtpZih0aGlzLmMhPTB8fChkPXFtZSh0aGlzLmEpKTwwKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksdEVlKSkpKTtiPWIqMTYrZDtmbWUodGhpcyk7aWYodGhpcy5jIT0wfHwoZD1xbWUodGhpcy5hKSk8MCl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHRFZSkpKSk7Yj1iKjE2K2Q7YT1iO2JyZWFrO2Nhc2UgMTE4OmZtZSh0aGlzKTtpZih0aGlzLmMhPTB8fChkPXFtZSh0aGlzLmEpKTwwKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksdEVlKSkpKTtiPWQ7Zm1lKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGQ9cW1lKHRoaXMuYSkpPDApdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx0RWUpKSkpO2I9YioxNitkO2ZtZSh0aGlzKTtpZih0aGlzLmMhPTB8fChkPXFtZSh0aGlzLmEpKTwwKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksdEVlKSkpKTtiPWIqMTYrZDtmbWUodGhpcyk7aWYodGhpcy5jIT0wfHwoZD1xbWUodGhpcy5hKSk8MCl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHRFZSkpKSk7Yj1iKjE2K2Q7Zm1lKHRoaXMpO2lmKHRoaXMuYyE9MHx8KGQ9cW1lKHRoaXMuYSkpPDApdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx0RWUpKSkpO2I9YioxNitkO2ZtZSh0aGlzKTtpZih0aGlzLmMhPTB8fChkPXFtZSh0aGlzLmEpKTwwKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksdEVlKSkpKTtiPWIqMTYrZDtpZihiPk5HZSl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLCdwYXJzZXIuZGVzY2FwcGUuNCcpKSkpO2E9YjticmVhaztjYXNlIDY1OmNhc2UgOTA6Y2FzZSAxMjI6dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx4RWUpKSkpO31yZXR1cm4gYX07Xy5hbT1mdW5jdGlvbiBwbWUoYSl7dmFyIGIsYztzd2l0Y2goYSl7Y2FzZSAxMDA6Yz0odGhpcy5lJjMyKT09MzI/Q29lKCdOZCcsdHJ1ZSk6KG9vZSgpLFduZSk7YnJlYWs7Y2FzZSA2ODpjPSh0aGlzLmUmMzIpPT0zMj9Db2UoJ05kJyxmYWxzZSk6KG9vZSgpLGJvZSk7YnJlYWs7Y2FzZSAxMTk6Yz0odGhpcy5lJjMyKT09MzI/Q29lKCdJc1dvcmQnLHRydWUpOihvb2UoKSxrb2UpO2JyZWFrO2Nhc2UgODc6Yz0odGhpcy5lJjMyKT09MzI/Q29lKCdJc1dvcmQnLGZhbHNlKToob29lKCksZG9lKTticmVhaztjYXNlIDExNTpjPSh0aGlzLmUmMzIpPT0zMj9Db2UoJ0lzU3BhY2UnLHRydWUpOihvb2UoKSxmb2UpO2JyZWFrO2Nhc2UgODM6Yz0odGhpcy5lJjMyKT09MzI/Q29lKCdJc1NwYWNlJyxmYWxzZSk6KG9vZSgpLGNvZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBzY2IobmV3IHF6KChiPWEsT0dlK2IudG9TdHJpbmcoMTYpKSkpO31yZXR1cm4gY307Xy5ibT1mdW5jdGlvbiBybWUoYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtO3RoaXMuYj0xO2ZtZSh0aGlzKTtiPW51bGw7aWYodGhpcy5jPT0wJiZ0aGlzLmE9PTk0KXtmbWUodGhpcyk7aWYoYSl7az0ob29lKCksb29lKCksKytub2UsbmV3IFNvZSg1KSl9ZWxzZXtiPShvb2UoKSxvb2UoKSwrK25vZSxuZXcgU29lKDQpKTtNb2UoYiwwLE5HZSk7az0obnVsbCwrK25vZSxuZXcgU29lKDQpKX19ZWxzZXtrPShvb2UoKSxvb2UoKSwrK25vZSxuZXcgU29lKDQpKX1lPXRydWU7d2hpbGUoKG09dGhpcy5jKSE9MSl7aWYobT09MCYmdGhpcy5hPT05MyYmIWUpYnJlYWs7ZT1mYWxzZTtjPXRoaXMuYTtkPWZhbHNlO2lmKG09PTEwKXtzd2l0Y2goYyl7Y2FzZSAxMDA6Y2FzZSA2ODpjYXNlIDExOTpjYXNlIDg3OmNhc2UgMTE1OmNhc2UgODM6UG9lKGssdGhpcy5hbShjKSk7ZD10cnVlO2JyZWFrO2Nhc2UgMTA1OmNhc2UgNzM6Y2FzZSA5OTpjYXNlIDY3OmM9dGhpcy5ybShrLGMpO2M8MCYmKGQ9dHJ1ZSk7YnJlYWs7Y2FzZSAxMTI6Y2FzZSA4MDpsPWxtZSh0aGlzLGMpO2lmKCFsKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksaUVlKSkpKTtQb2UoayxsKTtkPXRydWU7YnJlYWs7ZGVmYXVsdDpjPXRoaXMuX2woKTt9fWVsc2UgaWYobT09MjApe2c9Z2diKHRoaXMuaSw1OCx0aGlzLmQpO2lmKGc8MCl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLGpFZSkpKSk7aD10cnVlO2lmKF9mYih0aGlzLmksdGhpcy5kKT09OTQpeysrdGhpcy5kO2g9ZmFsc2V9Zj1xZ2IodGhpcy5pLHRoaXMuZCxnKTtpPURvZShmLGgsKHRoaXMuZSY1MTIpPT01MTIpO2lmKCFpKXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksbEVlKSkpKTtQb2UoayxpKTtkPXRydWU7aWYoZysxPj10aGlzLmp8fF9mYih0aGlzLmksZysxKSE9OTMpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxqRWUpKSkpO3RoaXMuZD1nKzJ9Zm1lKHRoaXMpO2lmKCFkKXtpZih0aGlzLmMhPTB8fHRoaXMuYSE9NDUpe01vZShrLGMsYyl9ZWxzZXtmbWUodGhpcyk7aWYoKG09dGhpcy5jKT09MSl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLGtFZSkpKSk7aWYobT09MCYmdGhpcy5hPT05Myl7TW9lKGssYyxjKTtNb2Uoayw0NSw0NSl9ZWxzZXtqPXRoaXMuYTttPT0xMCYmKGo9dGhpcy5fbCgpKTtmbWUodGhpcyk7TW9lKGssYyxqKX19fSh0aGlzLmUmTkVlKT09TkVlJiZ0aGlzLmM9PTAmJnRoaXMuYT09NDQmJmZtZSh0aGlzKX1pZih0aGlzLmM9PTEpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxrRWUpKSkpO2lmKGIpe1JvZShiLGspO2s9Yn1Rb2Uoayk7Tm9lKGspO3RoaXMuYj0wO2ZtZSh0aGlzKTtyZXR1cm4ga307Xy5jbT1mdW5jdGlvbiBzbWUoKXt2YXIgYSxiLGMsZDtjPXRoaXMuYm0oZmFsc2UpO3doaWxlKChkPXRoaXMuYykhPTcpe2E9dGhpcy5hO2lmKGQ9PTAmJihhPT00NXx8YT09MzgpfHxkPT00KXtmbWUodGhpcyk7aWYodGhpcy5jIT05KXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkscUVlKSkpKTtiPXRoaXMuYm0oZmFsc2UpO2lmKGQ9PTQpUG9lKGMsYik7ZWxzZSBpZihhPT00NSlSb2UoYyxiKTtlbHNlIGlmKGE9PTM4KU9vZShjLGIpO2Vsc2UgdGhyb3cgc2NiKG5ldyBxeignQVNTRVJUJykpfWVsc2V7dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxyRWUpKSkpfX1mbWUodGhpcyk7cmV0dXJuIGN9O18uZG09ZnVuY3Rpb24gdG1lKCl7dmFyIGEsYjthPXRoaXMuYS00ODtiPShvb2UoKSxvb2UoKSwrK25vZSxuZXcgenBlKDEyLG51bGwsYSkpOyF0aGlzLmcmJih0aGlzLmc9bmV3IFd3Yik7VHdiKHRoaXMuZyxuZXcgV29lKGEpKTtmbWUodGhpcyk7cmV0dXJuIGJ9O18uZW09ZnVuY3Rpb24gdW1lKCl7Zm1lKHRoaXMpO3JldHVybiBvb2UoKSxnb2V9O18uZm09ZnVuY3Rpb24gdm1lKCl7Zm1lKHRoaXMpO3JldHVybiBvb2UoKSxlb2V9O18uZ209ZnVuY3Rpb24gd21lKCl7dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx5RWUpKSkpfTtfLmhtPWZ1bmN0aW9uIHhtZSgpe3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkseUVlKSkpKX07Xy5pbT1mdW5jdGlvbiB5bWUoKXtmbWUodGhpcyk7cmV0dXJuIEFvZSgpfTtfLmptPWZ1bmN0aW9uIHptZSgpe2ZtZSh0aGlzKTtyZXR1cm4gb29lKCksaW9lfTtfLmttPWZ1bmN0aW9uIEFtZSgpe2ZtZSh0aGlzKTtyZXR1cm4gb29lKCksbG9lfTtfLmxtPWZ1bmN0aW9uIEJtZSgpe3ZhciBhO2lmKHRoaXMuZD49dGhpcy5qfHwoKGE9X2ZiKHRoaXMuaSx0aGlzLmQrKykpJjY1NTA0KSE9NjQpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxlRWUpKSkpO2ZtZSh0aGlzKTtyZXR1cm4gb29lKCksb29lKCksKytub2UsbmV3IGFwZSgwLGEtNjQpfTtfLm1tPWZ1bmN0aW9uIENtZSgpe2ZtZSh0aGlzKTtyZXR1cm4gQm9lKCl9O18ubm09ZnVuY3Rpb24gRG1lKCl7Zm1lKHRoaXMpO3JldHVybiBvb2UoKSxtb2V9O18ub209ZnVuY3Rpb24gRW1lKCl7dmFyIGE7YT0ob29lKCksb29lKCksKytub2UsbmV3IGFwZSgwLDEwNSkpO2ZtZSh0aGlzKTtyZXR1cm4gYX07Xy5wbT1mdW5jdGlvbiBGbWUoKXtmbWUodGhpcyk7cmV0dXJuIG9vZSgpLGpvZX07Xy5xbT1mdW5jdGlvbiBHbWUoKXtmbWUodGhpcyk7cmV0dXJuIG9vZSgpLGhvZX07Xy5ybT1mdW5jdGlvbiBIbWUoYSxiKXtyZXR1cm4gdGhpcy5fbCgpfTtfLnNtPWZ1bmN0aW9uIEltZSgpe2ZtZSh0aGlzKTtyZXR1cm4gb29lKCksX25lfTtfLnRtPWZ1bmN0aW9uIEptZSgpe3ZhciBhLGIsYyxkLGU7aWYodGhpcy5kKzE+PXRoaXMuail0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLGJFZSkpKSk7ZD0tMTtiPW51bGw7YT1fZmIodGhpcy5pLHRoaXMuZCk7aWYoNDk8PWEmJmE8PTU3KXtkPWEtNDg7IXRoaXMuZyYmKHRoaXMuZz1uZXcgV3diKTtUd2IodGhpcy5nLG5ldyBXb2UoZCkpOysrdGhpcy5kO2lmKF9mYih0aGlzLmksdGhpcy5kKSE9NDEpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSwkRGUpKSkpOysrdGhpcy5kfWVsc2V7YT09NjMmJi0tdGhpcy5kO2ZtZSh0aGlzKTtiPWltZSh0aGlzKTtzd2l0Y2goYi5lKXtjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMjpjYXNlIDIzOmJyZWFrO2Nhc2UgODppZih0aGlzLmMhPTcpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSwkRGUpKSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxjRWUpKSkpO319Zm1lKHRoaXMpO2U9am1lKHRoaXMpO2M9bnVsbDtpZihlLmU9PTIpe2lmKGUuTW0oKSE9Mil0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLGRFZSkpKSk7Yz1lLkltKDEpO2U9ZS5JbSgwKX1pZih0aGlzLmMhPTcpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSwkRGUpKSkpO2ZtZSh0aGlzKTtyZXR1cm4gb29lKCksb29lKCksKytub2UsbmV3IG5wZShkLGIsZSxjKX07Xy51bT1mdW5jdGlvbiBLbWUoKXtmbWUodGhpcyk7cmV0dXJuIG9vZSgpLGFvZX07Xy52bT1mdW5jdGlvbiBMbWUoKXt2YXIgYTtmbWUodGhpcyk7YT11b2UoMjQsam1lKHRoaXMpKTtpZih0aGlzLmMhPTcpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSwkRGUpKSkpO2ZtZSh0aGlzKTtyZXR1cm4gYX07Xy53bT1mdW5jdGlvbiBNbWUoKXt2YXIgYTtmbWUodGhpcyk7YT11b2UoMjAsam1lKHRoaXMpKTtpZih0aGlzLmMhPTcpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSwkRGUpKSkpO2ZtZSh0aGlzKTtyZXR1cm4gYX07Xy54bT1mdW5jdGlvbiBObWUoKXt2YXIgYTtmbWUodGhpcyk7YT11b2UoMjIsam1lKHRoaXMpKTtpZih0aGlzLmMhPTcpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSwkRGUpKSkpO2ZtZSh0aGlzKTtyZXR1cm4gYX07Xy55bT1mdW5jdGlvbiBPbWUoKXt2YXIgYSxiLGMsZCxlO2E9MDtjPTA7Yj0tMTt3aGlsZSh0aGlzLmQ8dGhpcy5qKXtiPV9mYih0aGlzLmksdGhpcy5kKTtlPU1uZShiKTtpZihlPT0wKWJyZWFrO2F8PWU7Kyt0aGlzLmR9aWYodGhpcy5kPj10aGlzLmopdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxfRGUpKSkpO2lmKGI9PTQ1KXsrK3RoaXMuZDt3aGlsZSh0aGlzLmQ8dGhpcy5qKXtiPV9mYih0aGlzLmksdGhpcy5kKTtlPU1uZShiKTtpZihlPT0wKWJyZWFrO2N8PWU7Kyt0aGlzLmR9aWYodGhpcy5kPj10aGlzLmopdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxfRGUpKSkpfWlmKGI9PTU4KXsrK3RoaXMuZDtmbWUodGhpcyk7ZD12b2Uoam1lKHRoaXMpLGEsYyk7aWYodGhpcy5jIT03KXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksJERlKSkpKTtmbWUodGhpcyl9ZWxzZSBpZihiPT00MSl7Kyt0aGlzLmQ7Zm1lKHRoaXMpO2Q9dm9lKGptZSh0aGlzKSxhLGMpfWVsc2UgdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSxhRWUpKSkpO3JldHVybiBkfTtfLnptPWZ1bmN0aW9uIFBtZSgpe3ZhciBhO2ZtZSh0aGlzKTthPXVvZSgyMSxqbWUodGhpcykpO2lmKHRoaXMuYyE9Nyl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLCREZSkpKSk7Zm1lKHRoaXMpO3JldHVybiBhfTtfLkFtPWZ1bmN0aW9uIFFtZSgpe3ZhciBhO2ZtZSh0aGlzKTthPXVvZSgyMyxqbWUodGhpcykpO2lmKHRoaXMuYyE9Nyl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLCREZSkpKSk7Zm1lKHRoaXMpO3JldHVybiBhfTtfLkJtPWZ1bmN0aW9uIFJtZSgpe3ZhciBhLGI7Zm1lKHRoaXMpO2E9dGhpcy5mKys7Yj13b2Uoam1lKHRoaXMpLGEpO2lmKHRoaXMuYyE9Nyl0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLCREZSkpKSk7Zm1lKHRoaXMpO3JldHVybiBifTtfLkNtPWZ1bmN0aW9uIFNtZSgpe3ZhciBhO2ZtZSh0aGlzKTthPXdvZShqbWUodGhpcyksMCk7aWYodGhpcy5jIT03KXRocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCksJERlKSkpKTtmbWUodGhpcyk7cmV0dXJuIGF9O18uRG09ZnVuY3Rpb24gVG1lKGEpe2ZtZSh0aGlzKTtpZih0aGlzLmM9PTUpe2ZtZSh0aGlzKTtyZXR1cm4gdG9lKGEsKG9vZSgpLG9vZSgpLCsrbm9lLG5ldyBkcGUoOSxhKSkpfWVsc2UgcmV0dXJuIHRvZShhLChvb2UoKSxvb2UoKSwrK25vZSxuZXcgZHBlKDMsYSkpKX07Xy5FbT1mdW5jdGlvbiBVbWUoYSl7dmFyIGI7Zm1lKHRoaXMpO2I9KG9vZSgpLG9vZSgpLCsrbm9lLG5ldyBEcGUoMikpO2lmKHRoaXMuYz09NSl7Zm1lKHRoaXMpO0NwZShiLChudWxsLFpuZSkpO0NwZShiLGEpfWVsc2V7Q3BlKGIsYSk7Q3BlKGIsKG51bGwsWm5lKSl9cmV0dXJuIGJ9O18uRm09ZnVuY3Rpb24gVm1lKGEpe2ZtZSh0aGlzKTtpZih0aGlzLmM9PTUpe2ZtZSh0aGlzKTtyZXR1cm4gb29lKCksb29lKCksKytub2UsbmV3IGRwZSg5LGEpfWVsc2UgcmV0dXJuIG9vZSgpLG9vZSgpLCsrbm9lLG5ldyBkcGUoMyxhKX07Xy5hPTA7Xy5iPTA7Xy5jPTA7Xy5kPTA7Xy5lPTA7Xy5mPTE7Xy5nPW51bGw7Xy5qPTA7dmFyICRiYj1qZWIoTUdlLCdSZWdFeC9SZWdleFBhcnNlcicsODE1KTtZY2IoMTg5Myw4MTUse30sX21lKTtfLiRsPWZ1bmN0aW9uIGFuZShhKXtyZXR1cm4gZmFsc2V9O18uX2w9ZnVuY3Rpb24gYm5lKCl7cmV0dXJuIFltZSh0aGlzKX07Xy5hbT1mdW5jdGlvbiBkbmUoYSl7cmV0dXJuIFptZShhKX07Xy5ibT1mdW5jdGlvbiBlbmUoYSl7cmV0dXJuICRtZSh0aGlzKX07Xy5jbT1mdW5jdGlvbiBmbmUoKXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHlFZSkpKSl9O18uZG09ZnVuY3Rpb24gZ25lKCl7dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx5RWUpKSkpfTtfLmVtPWZ1bmN0aW9uIGhuZSgpe3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkseUVlKSkpKX07Xy5mbT1mdW5jdGlvbiBpbmUoKXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHlFZSkpKSl9O18uZ209ZnVuY3Rpb24gam5lKCl7Zm1lKHRoaXMpO3JldHVybiBabWUoNjcpfTtfLmhtPWZ1bmN0aW9uIGtuZSgpe2ZtZSh0aGlzKTtyZXR1cm4gWm1lKDczKX07Xy5pbT1mdW5jdGlvbiBsbmUoKXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHlFZSkpKSl9O18uam09ZnVuY3Rpb24gbW5lKCl7dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx5RWUpKSkpfTtfLmttPWZ1bmN0aW9uIG5uZSgpe3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkseUVlKSkpKX07Xy5sbT1mdW5jdGlvbiBvbmUoKXtmbWUodGhpcyk7cmV0dXJuIFptZSg5OSl9O18ubW09ZnVuY3Rpb24gcG5lKCl7dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx5RWUpKSkpfTtfLm5tPWZ1bmN0aW9uIHFuZSgpe3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkseUVlKSkpKX07Xy5vbT1mdW5jdGlvbiBybmUoKXtmbWUodGhpcyk7cmV0dXJuIFptZSgxMDUpfTtfLnBtPWZ1bmN0aW9uIHNuZSgpe3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkseUVlKSkpKX07Xy5xbT1mdW5jdGlvbiB0bmUoKXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHlFZSkpKSl9O18ucm09ZnVuY3Rpb24gdW5lKGEsYil7cmV0dXJuIFBvZShhLFptZShiKSksLTF9O18uc209ZnVuY3Rpb24gdm5lKCl7Zm1lKHRoaXMpO3JldHVybiBvb2UoKSxvb2UoKSwrK25vZSxuZXcgYXBlKDAsOTQpfTtfLnRtPWZ1bmN0aW9uIHduZSgpe3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkseUVlKSkpKX07Xy51bT1mdW5jdGlvbiB4bmUoKXtmbWUodGhpcyk7cmV0dXJuIG9vZSgpLG9vZSgpLCsrbm9lLG5ldyBhcGUoMCwzNil9O18udm09ZnVuY3Rpb24geW5lKCl7dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx5RWUpKSkpfTtfLndtPWZ1bmN0aW9uIHpuZSgpe3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkseUVlKSkpKX07Xy54bT1mdW5jdGlvbiBBbmUoKXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHlFZSkpKSl9O18ueW09ZnVuY3Rpb24gQm5lKCl7dGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSx5RWUpKSkpfTtfLnptPWZ1bmN0aW9uIENuZSgpe3Rocm93IHNjYihuZXcgZW1lKHFFZCgoYTlkKCkseUVlKSkpKX07Xy5BbT1mdW5jdGlvbiBEbmUoKXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHlFZSkpKSl9O18uQm09ZnVuY3Rpb24gRW5lKCl7dmFyIGE7Zm1lKHRoaXMpO2E9d29lKGptZSh0aGlzKSwwKTtpZih0aGlzLmMhPTcpdGhyb3cgc2NiKG5ldyBlbWUocUVkKChhOWQoKSwkRGUpKSkpO2ZtZSh0aGlzKTtyZXR1cm4gYX07Xy5DbT1mdW5jdGlvbiBGbmUoKXt0aHJvdyBzY2IobmV3IGVtZShxRWQoKGE5ZCgpLHlFZSkpKSl9O18uRG09ZnVuY3Rpb24gR25lKGEpe2ZtZSh0aGlzKTtyZXR1cm4gdG9lKGEsKG9vZSgpLG9vZSgpLCsrbm9lLG5ldyBkcGUoMyxhKSkpfTtfLkVtPWZ1bmN0aW9uIEhuZShhKXt2YXIgYjtmbWUodGhpcyk7Yj0ob29lKCksb29lKCksKytub2UsbmV3IERwZSgyKSk7Q3BlKGIsYSk7Q3BlKGIsKG51bGwsWm5lKSk7cmV0dXJuIGJ9O18uRm09ZnVuY3Rpb24gSW5lKGEpe2ZtZSh0aGlzKTtyZXR1cm4gb29lKCksb29lKCksKytub2UsbmV3IGRwZSgzLGEpfTt2YXIgV21lPW51bGwsWG1lPW51bGw7dmFyIFhiYj1qZWIoTUdlLCdSZWdFeC9QYXJzZXJGb3JYTUxTY2hlbWEnLDE4OTMpO1ljYigxMjEsMSwkR2UscG9lKTtfLkdtPWZ1bmN0aW9uIHFvZShhKXt0aHJvdyBzY2IobmV3IHF6KCdOb3Qgc3VwcG9ydGVkLicpKX07Xy5IbT1mdW5jdGlvbiB5b2UoKXtyZXR1cm4gLTF9O18uSW09ZnVuY3Rpb24gem9lKGEpe3JldHVybiBudWxsfTtfLkptPWZ1bmN0aW9uIEVvZSgpe3JldHVybiBudWxsfTtfLkttPWZ1bmN0aW9uIEhvZShhKXt9O18uTG09ZnVuY3Rpb24gSW9lKGEpe307Xy5NbT1mdW5jdGlvbiBKb2UoKXtyZXR1cm4gMH07Xy5JYj1mdW5jdGlvbiBLb2UoKXtyZXR1cm4gdGhpcy5ObSgwKX07Xy5ObT1mdW5jdGlvbiBMb2UoYSl7cmV0dXJuIHRoaXMuZT09MTE/Jy4nOicnfTtfLmU9MDt2YXIgUW5lLFJuZSxTbmUsVG5lLFVuZSxWbmU9bnVsbCxXbmUsWG5lPW51bGwsWW5lLFpuZSwkbmU9bnVsbCxfbmUsYW9lLGJvZSxjb2UsZG9lLGVvZSxmb2UsZ29lLGhvZSxpb2Usam9lLGtvZSxsb2UsbW9lLG5vZT0wO3ZhciBpY2I9amViKE1HZSwnUmVnRXgvVG9rZW4nLDEyMSk7WWNiKDEzNiwxMjEsezM6MSwxMzY6MSwxMjE6MX0sU29lKTtfLk5tPWZ1bmN0aW9uIFZvZShhKXt2YXIgYixjLGQ7aWYodGhpcy5lPT00KXtpZih0aGlzPT1ZbmUpYz0nLic7ZWxzZSBpZih0aGlzPT1XbmUpYz0nXFxkJztlbHNlIGlmKHRoaXM9PWtvZSljPSdcXHcnO2Vsc2UgaWYodGhpcz09Zm9lKWM9J1xccyc7ZWxzZXtkPW5ldyBIZ2I7ZC5hKz0nWyc7Zm9yKGI9MDtiPHRoaXMuYi5sZW5ndGg7Yis9Mil7KGEmTkVlKSE9MCYmYj4wJiYoZC5hKz0nLCcsZCk7aWYodGhpcy5iW2JdPT09dGhpcy5iW2IrMV0pe0VnYihkLFVvZSh0aGlzLmJbYl0pKX1lbHNle0VnYihkLFVvZSh0aGlzLmJbYl0pKTtkLmErPSctJztFZ2IoZCxVb2UodGhpcy5iW2IrMV0pKX19ZC5hKz0nXSc7Yz1kLmF9fWVsc2V7aWYodGhpcz09Ym9lKWM9J1xcRCc7ZWxzZSBpZih0aGlzPT1kb2UpYz0nXFxXJztlbHNlIGlmKHRoaXM9PWNvZSljPSdcXFMnO2Vsc2V7ZD1uZXcgSGdiO2QuYSs9J1teJztmb3IoYj0wO2I8dGhpcy5iLmxlbmd0aDtiKz0yKXsoYSZORWUpIT0wJiZiPjAmJihkLmErPScsJyxkKTtpZih0aGlzLmJbYl09PT10aGlzLmJbYisxXSl7RWdiKGQsVW9lKHRoaXMuYltiXSkpfWVsc2V7RWdiKGQsVW9lKHRoaXMuYltiXSkpO2QuYSs9Jy0nO0VnYihkLFVvZSh0aGlzLmJbYisxXSkpfX1kLmErPSddJztjPWQuYX19cmV0dXJuIGN9O18uYT1mYWxzZTtfLmM9ZmFsc2U7dmFyIFliYj1qZWIoTUdlLCdSZWdFeC9SYW5nZVRva2VuJywxMzYpO1ljYig1NzUsMSx7NTc1OjF9LFdvZSk7Xy5hPTA7dmFyIFpiYj1qZWIoTUdlLCdSZWdFeC9SZWdleFBhcnNlci9SZWZlcmVuY2VQb3NpdGlvbicsNTc1KTtZY2IoNTc0LDEsezM6MSw1NzQ6MX0sWW9lKTtfLkZiPWZ1bmN0aW9uIFpvZShhKXt2YXIgYjtpZihhPT1udWxsKXJldHVybiBmYWxzZTtpZighUkQoYSw1NzQpKXJldHVybiBmYWxzZTtiPUpEKGEsNTc0KTtyZXR1cm4gY2diKHRoaXMuYixiLmIpJiZ0aGlzLmE9PWIuYX07Xy5IYj1mdW5jdGlvbiAkb2UoKXtyZXR1cm4gZmdiKHRoaXMuYisnLycrS25lKHRoaXMuYSkpfTtfLkliPWZ1bmN0aW9uIF9vZSgpe3JldHVybiB0aGlzLmMuTm0odGhpcy5hKX07Xy5hPTA7dmFyIF9iYj1qZWIoTUdlLCdSZWdFeC9SZWd1bGFyRXhwcmVzc2lvbicsNTc0KTtZY2IoMjI3LDEyMSwkR2UsYXBlKTtfLkhtPWZ1bmN0aW9uIGJwZSgpe3JldHVybiB0aGlzLmF9O18uTm09ZnVuY3Rpb24gY3BlKGEpe3ZhciBiLGMsZDtzd2l0Y2godGhpcy5lKXtjYXNlIDA6c3dpdGNoKHRoaXMuYSl7Y2FzZSAxMjQ6Y2FzZSA0MjpjYXNlIDQzOmNhc2UgNjM6Y2FzZSA0MDpjYXNlIDQxOmNhc2UgNDY6Y2FzZSA5MTpjYXNlIDEyMzpjYXNlIDkyOmQ9J1xcJytQRCh0aGlzLmEmV3JlKTticmVhaztjYXNlIDEyOmQ9J1xcZic7YnJlYWs7Y2FzZSAxMDpkPSdcXG4nO2JyZWFrO2Nhc2UgMTM6ZD0nXFxyJzticmVhaztjYXNlIDk6ZD0nXFx0JzticmVhaztjYXNlIDI3OmQ9J1xcZSc7YnJlYWs7ZGVmYXVsdDppZih0aGlzLmE+PVBzZSl7Yz0oYj10aGlzLmE+Pj4wLCcwJytiLnRvU3RyaW5nKDE2KSk7ZD0nXFx2JytxZ2IoYyxjLmxlbmd0aC02LGMubGVuZ3RoKX1lbHNlIGQ9JycrUEQodGhpcy5hJldyZSk7fWJyZWFrO2Nhc2UgODp0aGlzPT1fbmV8fHRoaXM9PWFvZT8oZD0nJytQRCh0aGlzLmEmV3JlKSk6KGQ9J1xcJytQRCh0aGlzLmEmV3JlKSk7YnJlYWs7ZGVmYXVsdDpkPW51bGw7fXJldHVybiBkfTtfLmE9MDt2YXIgYWNiPWplYihNR2UsJ1JlZ0V4L1Rva2VuL0NoYXJUb2tlbicsMjI3KTtZY2IoMzE5LDEyMSwkR2UsZHBlKTtfLkltPWZ1bmN0aW9uIGVwZShhKXtyZXR1cm4gdGhpcy5hfTtfLkttPWZ1bmN0aW9uIGZwZShhKXt0aGlzLmI9YX07Xy5MbT1mdW5jdGlvbiBncGUoYSl7dGhpcy5jPWF9O18uTW09ZnVuY3Rpb24gaHBlKCl7cmV0dXJuIDF9O18uTm09ZnVuY3Rpb24gaXBlKGEpe3ZhciBiO2lmKHRoaXMuZT09Myl7aWYodGhpcy5jPDAmJnRoaXMuYjwwKXtiPXRoaXMuYS5ObShhKSsnKid9ZWxzZSBpZih0aGlzLmM9PXRoaXMuYil7Yj10aGlzLmEuTm0oYSkrJ3snK3RoaXMuYysnfSd9ZWxzZSBpZih0aGlzLmM+PTAmJnRoaXMuYj49MCl7Yj10aGlzLmEuTm0oYSkrJ3snK3RoaXMuYysnLCcrdGhpcy5iKyd9J31lbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApe2I9dGhpcy5hLk5tKGEpKyd7Jyt0aGlzLmMrJyx9J31lbHNlIHRocm93IHNjYihuZXcgcXooJ1Rva2VuI3RvU3RyaW5nKCk6IENMT1NVUkUgJyt0aGlzLmMrTHFlK3RoaXMuYikpfWVsc2V7aWYodGhpcy5jPDAmJnRoaXMuYjwwKXtiPXRoaXMuYS5ObShhKSsnKj8nfWVsc2UgaWYodGhpcy5jPT10aGlzLmIpe2I9dGhpcy5hLk5tKGEpKyd7Jyt0aGlzLmMrJ30/J31lbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPj0wKXtiPXRoaXMuYS5ObShhKSsneycrdGhpcy5jKycsJyt0aGlzLmIrJ30/J31lbHNlIGlmKHRoaXMuYz49MCYmdGhpcy5iPDApe2I9dGhpcy5hLk5tKGEpKyd7Jyt0aGlzLmMrJyx9Pyd9ZWxzZSB0aHJvdyBzY2IobmV3IHF6KCdUb2tlbiN0b1N0cmluZygpOiBOT05HUkVFRFlDTE9TVVJFICcrdGhpcy5jK0xxZSt0aGlzLmIpKX1yZXR1cm4gYn07Xy5iPTA7Xy5jPTA7dmFyIGJjYj1qZWIoTUdlLCdSZWdFeC9Ub2tlbi9DbG9zdXJlVG9rZW4nLDMxOSk7WWNiKDgxNiwxMjEsJEdlLGpwZSk7Xy5JbT1mdW5jdGlvbiBrcGUoYSl7cmV0dXJuIGE9PTA/dGhpcy5hOnRoaXMuYn07Xy5NbT1mdW5jdGlvbiBscGUoKXtyZXR1cm4gMn07Xy5ObT1mdW5jdGlvbiBtcGUoYSl7dmFyIGI7dGhpcy5iLmU9PTMmJnRoaXMuYi5JbSgwKT09dGhpcy5hPyhiPXRoaXMuYS5ObShhKSsnKycpOnRoaXMuYi5lPT05JiZ0aGlzLmIuSW0oMCk9PXRoaXMuYT8oYj10aGlzLmEuTm0oYSkrJys/Jyk6KGI9dGhpcy5hLk5tKGEpKygnJyt0aGlzLmIuTm0oYSkpKTtyZXR1cm4gYn07dmFyIGNjYj1qZWIoTUdlLCdSZWdFeC9Ub2tlbi9Db25jYXRUb2tlbicsODE2KTtZY2IoMTg5MSwxMjEsJEdlLG5wZSk7Xy5JbT1mdW5jdGlvbiBvcGUoYSl7aWYoYT09MClyZXR1cm4gdGhpcy5kO2lmKGE9PTEpcmV0dXJuIHRoaXMuYjt0aHJvdyBzY2IobmV3IHF6KCdJbnRlcm5hbCBFcnJvcjogJythKSl9O18uTW09ZnVuY3Rpb24gcHBlKCl7cmV0dXJuICF0aGlzLmI/MToyfTtfLk5tPWZ1bmN0aW9uIHFwZShhKXt2YXIgYjt0aGlzLmM+MD8oYj0nKD8oJyt0aGlzLmMrJyknKTp0aGlzLmEuZT09OD8oYj0nKD8oJyt0aGlzLmErJyknKTooYj0nKD8nK3RoaXMuYSk7IXRoaXMuYj8oYis9dGhpcy5kKycpJyk6KGIrPXRoaXMuZCsnfCcrdGhpcy5iKycpJyk7cmV0dXJuIGJ9O18uYz0wO3ZhciBkY2I9amViKE1HZSwnUmVnRXgvVG9rZW4vQ29uZGl0aW9uVG9rZW4nLDE4OTEpO1ljYigxODkyLDEyMSwkR2UscnBlKTtfLkltPWZ1bmN0aW9uIHNwZShhKXtyZXR1cm4gdGhpcy5ifTtfLk1tPWZ1bmN0aW9uIHRwZSgpe3JldHVybiAxfTtfLk5tPWZ1bmN0aW9uIHVwZShhKXtyZXR1cm4gJyg/JysodGhpcy5hPT0wPycnOktuZSh0aGlzLmEpKSsodGhpcy5jPT0wPycnOktuZSh0aGlzLmMpKSsnOicrdGhpcy5iLk5tKGEpKycpJ307Xy5hPTA7Xy5jPTA7dmFyIGVjYj1qZWIoTUdlLCdSZWdFeC9Ub2tlbi9Nb2RpZmllclRva2VuJywxODkyKTtZY2IoODE3LDEyMSwkR2UsdnBlKTtfLkltPWZ1bmN0aW9uIHdwZShhKXtyZXR1cm4gdGhpcy5hfTtfLk1tPWZ1bmN0aW9uIHhwZSgpe3JldHVybiAxfTtfLk5tPWZ1bmN0aW9uIHlwZShhKXt2YXIgYjtiPW51bGw7c3dpdGNoKHRoaXMuZSl7Y2FzZSA2OnRoaXMuYj09MD8oYj0nKD86Jyt0aGlzLmEuTm0oYSkrJyknKTooYj0nKCcrdGhpcy5hLk5tKGEpKycpJyk7YnJlYWs7Y2FzZSAyMDpiPScoPz0nK3RoaXMuYS5ObShhKSsnKSc7YnJlYWs7Y2FzZSAyMTpiPScoPyEnK3RoaXMuYS5ObShhKSsnKSc7YnJlYWs7Y2FzZSAyMjpiPScoPzw9Jyt0aGlzLmEuTm0oYSkrJyknO2JyZWFrO2Nhc2UgMjM6Yj0nKD88IScrdGhpcy5hLk5tKGEpKycpJzticmVhaztjYXNlIDI0OmI9Jyg/PicrdGhpcy5hLk5tKGEpKycpJzt9cmV0dXJuIGJ9O18uYj0wO3ZhciBmY2I9amViKE1HZSwnUmVnRXgvVG9rZW4vUGFyZW5Ub2tlbicsODE3KTtZY2IoNTE1LDEyMSx7MzoxLDEyMToxLDUxNToxfSx6cGUpO18uSm09ZnVuY3Rpb24gQXBlKCl7cmV0dXJuIHRoaXMuYn07Xy5ObT1mdW5jdGlvbiBCcGUoYSl7cmV0dXJuIHRoaXMuZT09MTI/J1xcJyt0aGlzLmE6T25lKHRoaXMuYil9O18uYT0wO3ZhciBnY2I9amViKE1HZSwnUmVnRXgvVG9rZW4vU3RyaW5nVG9rZW4nLDUxNSk7WWNiKDQ2MywxMjEsJEdlLERwZSk7Xy5HbT1mdW5jdGlvbiBFcGUoYSl7Q3BlKHRoaXMsYSl9O18uSW09ZnVuY3Rpb24gRnBlKGEpe3JldHVybiBKRChVd2IodGhpcy5hLGEpLDEyMSl9O18uTW09ZnVuY3Rpb24gR3BlKCl7cmV0dXJuICF0aGlzLmE/MDp0aGlzLmEuYS5jLmxlbmd0aH07Xy5ObT1mdW5jdGlvbiBIcGUoYSl7dmFyIGIsYyxkLGUsZjtpZih0aGlzLmU9PTEpe2lmKHRoaXMuYS5hLmMubGVuZ3RoPT0yKXtiPUpEKFV3Yih0aGlzLmEsMCksMTIxKTtjPUpEKFV3Yih0aGlzLmEsMSksMTIxKTtjLmU9PTMmJmMuSW0oMCk9PWI/KGU9Yi5ObShhKSsnKycpOmMuZT09OSYmYy5JbSgwKT09Yj8oZT1iLk5tKGEpKycrPycpOihlPWIuTm0oYSkrKCcnK2MuTm0oYSkpKX1lbHNle2Y9bmV3IEhnYjtmb3IoZD0wO2Q8dGhpcy5hLmEuYy5sZW5ndGg7ZCsrKXtFZ2IoZixKRChVd2IodGhpcy5hLGQpLDEyMSkuTm0oYSkpfWU9Zi5hfXJldHVybiBlfWlmKHRoaXMuYS5hLmMubGVuZ3RoPT0yJiZKRChVd2IodGhpcy5hLDEpLDEyMSkuZT09Nyl7ZT1KRChVd2IodGhpcy5hLDApLDEyMSkuTm0oYSkrJz8nfWVsc2UgaWYodGhpcy5hLmEuYy5sZW5ndGg9PTImJkpEKFV3Yih0aGlzLmEsMCksMTIxKS5lPT03KXtlPUpEKFV3Yih0aGlzLmEsMSksMTIxKS5ObShhKSsnPz8nfWVsc2V7Zj1uZXcgSGdiO0VnYihmLEpEKFV3Yih0aGlzLmEsMCksMTIxKS5ObShhKSk7Zm9yKGQ9MTtkPHRoaXMuYS5hLmMubGVuZ3RoO2QrKyl7Zi5hKz0nfCc7RWdiKGYsSkQoVXdiKHRoaXMuYSxkKSwxMjEpLk5tKGEpKX1lPWYuYX1yZXR1cm4gZX07dmFyIGhjYj1qZWIoTUdlLCdSZWdFeC9Ub2tlbi9VbmlvblRva2VuJyw0NjMpO1ljYig1MTIsMSx7NTg0OjF9LEpwZSk7Xy5JYj1mdW5jdGlvbiBLcGUoKXtyZXR1cm4gdGhpcy5hLmJ9O3ZhciBqY2I9amViKF9HZSwnWE1MVHlwZVV0aWwvUGF0dGVybk1hdGNoZXJJbXBsJyw1MTIpO1ljYigxNjQ5LDE0Njcse30sTnBlKTt2YXIgTHBlO3ZhciBrY2I9amViKF9HZSwnWE1MVHlwZVZhbGlkYXRvcicsMTY0OSk7WWNiKDI2NywxLHByZSxScGUpO18uSWM9ZnVuY3Rpb24gU3BlKGEpe29mYih0aGlzLGEpfTtfLkpjPWZ1bmN0aW9uIFRwZSgpe3JldHVybiAodGhpcy5iLXRoaXMuYSkqdGhpcy5jPDA/UHBlOm5ldyBscWUodGhpcyl9O18uYT0wO18uYj0wO18uYz0wO3ZhciBQcGU7dmFyIG5jYj1qZWIoYkhlLCdFeGNsdXNpdmVSYW5nZScsMjY3KTtZY2IoMTA0OSwxLGRyZSxZcGUpO18uUmI9ZnVuY3Rpb24gWnBlKGEpe0pEKGEsMTcpO1VwZSgpfTtfLk5iPWZ1bmN0aW9uICRwZShhKXtPc2IodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBicWUoKXtyZXR1cm4gVnBlKCl9O18uVWI9ZnVuY3Rpb24gZHFlKCl7cmV0dXJuIFdwZSgpfTtfLldiPWZ1bmN0aW9uIGdxZShhKXtKRChhLDE3KTtYcGUoKX07Xy5PYj1mdW5jdGlvbiBfcGUoKXtyZXR1cm4gZmFsc2V9O18uU2I9ZnVuY3Rpb24gYXFlKCl7cmV0dXJuIGZhbHNlfTtfLlRiPWZ1bmN0aW9uIGNxZSgpe3JldHVybiAtMX07Xy5WYj1mdW5jdGlvbiBlcWUoKXtyZXR1cm4gLTF9O18uUWI9ZnVuY3Rpb24gZnFlKCl7dGhyb3cgc2NiKG5ldyBiaGIoZUhlKSl9O3ZhciBsY2I9amViKGJIZSwnRXhjbHVzaXZlUmFuZ2UvMScsMTA0OSk7WWNiKDI1OCwxLGRyZSxscWUpO18uUmI9ZnVuY3Rpb24gbXFlKGEpe0pEKGEsMTcpO2hxZSgpfTtfLk5iPWZ1bmN0aW9uIG5xZShhKXtPc2IodGhpcyxhKX07Xy5QYj1mdW5jdGlvbiBxcWUoKXtyZXR1cm4gaXFlKHRoaXMpfTtfLlViPWZ1bmN0aW9uIHNxZSgpe3JldHVybiBqcWUodGhpcyl9O18uV2I9ZnVuY3Rpb24gdnFlKGEpe0pEKGEsMTcpO2txZSgpfTtfLk9iPWZ1bmN0aW9uIG9xZSgpe3JldHVybiB0aGlzLmMuYzwwP3RoaXMuYT49dGhpcy5jLmI6dGhpcy5hPD10aGlzLmMuYn07Xy5TYj1mdW5jdGlvbiBwcWUoKXtyZXR1cm4gdGhpcy5iPjB9O18uVGI9ZnVuY3Rpb24gcnFlKCl7cmV0dXJuIHRoaXMuYn07Xy5WYj1mdW5jdGlvbiB0cWUoKXtyZXR1cm4gdGhpcy5iLTF9O18uUWI9ZnVuY3Rpb24gdXFlKCl7dGhyb3cgc2NiKG5ldyBiaGIoZUhlKSl9O18uYT0wO18uYj0wO3ZhciBtY2I9amViKGJIZSwnRXhjbHVzaXZlUmFuZ2UvUmFuZ2VJdGVyYXRvcicsMjU4KTt2YXIgX0Q9bWViKGZGZSwnQycpO3ZhciBjRT1tZWIoaUZlLCdJJyk7dmFyIHBjYj1tZWIoRHFlLCdaJyk7dmFyIGRFPW1lYihqRmUsJ0onKTt2YXIgJEQ9bWViKGVGZSwnQicpO3ZhciBhRT1tZWIoZ0ZlLCdEJyk7dmFyIGJFPW1lYihoRmUsJ0YnKTt2YXIgb2NiPW1lYihrRmUsJ1MnKTt2YXIgWTE9bGViKCdvcmcuZWNsaXBzZS5lbGsuY29yZS5sYWJlbHMnLCdJTGFiZWxNYW5hZ2VyJyk7dmFyIEw1PWxlYih0RGUsJ0RpYWdub3N0aWNDaGFpbicpO3ZhciByOT1sZWIoUkZlLCdSZXNvdXJjZVNldCcpO3ZhciBTNT1qZWIodERlLCdJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uJyxudWxsKTt2YXIgQnFlPShJeigpLEx6KTt2YXIgZ3d0T25Mb2FkPWd3dE9uTG9hZD1WY2I7VGNiKGNkYik7V2NiKCdwZXJtUHJvcHMnLFtbWydsb2NhbGUnLCdkZWZhdWx0J10sW2ZIZSwnZ2Vja28xXzgnXV0sW1snbG9jYWxlJywnZGVmYXVsdCddLFtmSGUsJ3NhZmFyaSddXV0pOwovLyAtLS0tLS0tLS0tLS0tLSAgICBSVU4gR1dUIElOSVRJQUxJWkFUSU9OIENPREUgICAgLS0tLS0tLS0tLS0tLS0gCmd3dE9uTG9hZChudWxsLCAnZWxrJywgbnVsbCk7Cg==",self.location).href;return new Worker(Y)}}),elkInstance}{const Y=await import("elkjs/lib/elk.bundled.js");return elkInstance=new Y.default({algorithms:["layered"]}),elkInstance}},elkLayout=(Y,Z,G)=>new PCancelable((async(K,m)=>{const i=await getElk(),h={...defaultLayoutOptions,...G};i.layout({id:"root",...mapInput({nodes:Y,edges:Z,direction:null==h?void 0:h["elk.direction"]})},{layoutOptions:h}).then((Y=>{K({...Y,children:postProcessNode(Y.children)})})).catch(m)})),useLayout=({maxWidth:Y,maxHeight:Z,nodes:G=[],edges:K=[],fit:m,pannable:i,defaultPosition:h,direction:l,layoutOptions:p={},zoom:L,setZoom:S,onLayoutChange:k})=>{const W=useRef(!1),d=useRef(),{observe:y,width:I,height:o}=useDimensions(),[X,s]=useState(null),[b,c]=useState([0,0]),[u,M]=useState([0,0]),x=i?Z:o,E=i?Y:I,V=(Y,Z=!1)=>{d.current.scrollTo({left:Y[0],top:Y[1],behavior:Z?"smooth":"auto"}),M(Y)};useEffect((()=>{const Y=elkLayout(G,K,{"elk.direction":l,...p});return Y.then((Y=>{isEqual(X,Y)||(s(Y),k(Y))})).catch((Y=>{"CancelError"!==Y.name&&console.error("Layout Error:",Y)})),()=>Y.cancel()}),[G,K]);const C=useCallback((Y=>{if(X){const Z=(E-X.width*L)/2,G=(x-X.height*L)/2;switch(Y){case CanvasPosition.CENTER:c([Z,G]);break;case CanvasPosition.TOP:c([Z,0]);break;case CanvasPosition.LEFT:c([0,G]);break;case CanvasPosition.RIGHT:c([E-X.width*L,G]);break;case CanvasPosition.BOTTOM:c([Z,x-X.height*L])}}}),[E,x,X,L]),R=useCallback(((Y,Z=!1)=>{const G=(E-I)/2,K=(x-o)/2;if(i)switch(Y){case CanvasPosition.CENTER:V([G,K],Z);break;case CanvasPosition.TOP:V([G,0],Z);break;case CanvasPosition.LEFT:V([0,K],Z);break;case CanvasPosition.RIGHT:V([E-I,K],Z);break;case CanvasPosition.BOTTOM:V([G,x-o],Z)}}),[E,x,I,o,i]),T=useCallback(((Y,Z=!1)=>{C(Y),R(Y,Z)}),[R,C]);useEffect((()=>{W.current&&h&&C(h)}),[C,L,h]);const a=useCallback(((Y=!1)=>{if(X){const Z=o/X.height,G=I/X.width,K=Math.min(Z,G,1);S(K-1),T(CanvasPosition.CENTER,Y)}}),[o,X,I,S,T]),t=useCallback(((Y,Z=!0)=>{if(X&&X.children){const G=Array.isArray(Y)?Y.map((Y=>findNode(X.children,Y))):[findNode(X.children,Y)];if(G){C(CanvasPosition.CENTER);const Y=calculateZoom({nodes:G,viewportWidth:I,viewportHeight:o,maxViewportCoverage:.9,minViewportCoverage:.2}),K=calculateScrollPosition({nodes:G,viewportWidth:I,viewportHeight:o,canvasWidth:E,canvasHeight:x,chartWidth:X.width,chartHeight:X.height,zoom:Y});S(Y-1),V(K,Z)}}}),[x,E,o,X,C,S,I]);return useLayoutEffect((()=>{d.current&&!W.current&&X&&o&&I&&(m?a():h&&T(h),W.current=!0)}),[E,i,x,X,o,m,I,h,T,a,d]),useLayoutEffect((()=>{function Y(){m?a():h&&T(h)}return window.addEventListener("resize",Y),()=>window.removeEventListener("resize",Y)}),[m,T,h,a]),{xy:b,observe:y,containerRef:d,canvasHeight:x,canvasWidth:E,containerWidth:I,containerHeight:o,layout:X,scrollXY:u,positionCanvas:T,fitCanvas:a,fitNodes:t,setScrollXY:V}},useEdgeDrag=({onNodeLink:Y,onNodeLinkCheck:Z})=>{const[G,K]=useState(null),[m,i]=useState(null),[h,l]=useState(null),[p,L]=useState(null),[S,k]=useState(null),[W,d]=useState(null),y=useCallback(((Y,Z,G,m)=>{l(Y.dragType),K(G),i(m)}),[]),I=useCallback((({memo:[Y],xy:[Z,G]},[K,m])=>{const i=new Point2D(Z,G).transform(Y);k([{startPoint:{x:K,y:m},endPoint:i}])}),[]),o=useCallback((Z=>{G&&p&&W&&Y(Z,G,p,m),K(null),i(null),L(null),k(null)}),[W,G,m,p,Y]),X=useCallback(((Y,K)=>{if(G&&K){L(K);const i=Z(Y,G,K,m),l=(void 0===i||i)&&(G.parent===K.parent||"node"===h);d(l)}}),[G,m,h,Z]),s=useCallback(((Y,Z)=>{G&&Z&&(L(null),d(null))}),[G]);return{dragCoords:S,canLinkNode:W,dragNode:G,dragPort:m,enteredNode:p,onDragStart:y,onDrag:I,onDragEnd:o,onEnter:X,onLeave:s}},limit=(Y,Z,G)=>Y<G?Y>Z?Y:Z:G,useZoom=({disabled:Y=!1,zoom:Z=1,minZoom:G=-.5,maxZoom:K=1,onZoomChange:m})=>{const[i,h]=useState(Z-1),l=useRef(null);useGesture({onPinch:({offset:[Y],event:Z})=>{Z.preventDefault();const i=limit(Y/100,G,K);h(i),m(i+1)}},{enabled:!Y,domTarget:l,eventOptions:{passive:!1}});const p=useCallback((Y=>{const Z=limit(Y,G,K);h(Z),m(Z+1)}),[K,G,m]),L=useCallback(((Y=.1)=>{p(i+Y)}),[i,p]),S=useCallback(((Y=-.1)=>{p(i+Y)}),[i,p]);return{svgRef:l,zoom:i+1,setZoom:p,zoomIn:L,zoomOut:S}},CanvasContext=createContext({}),CanvasProvider=({selections:Y,onNodeLink:Z,readonly:G,children:K,nodes:m,edges:i,maxHeight:h,fit:l,maxWidth:p,direction:L,layoutOptions:S,pannable:k,panType:W,defaultPosition:d,zoomable:y,zoom:I,minZoom:o,maxZoom:X,onNodeLinkCheck:s,onLayoutChange:b,onZoomChange:c})=>{const u=useZoom({zoom:I,minZoom:o,maxZoom:X,disabled:!y,onZoomChange:c}),M=useLayout({nodes:m,edges:i,maxHeight:h,maxWidth:p,direction:L,pannable:k,panType:W,defaultPosition:d,fit:l,layoutOptions:S,zoom:u.zoom,setZoom:u.setZoom,onLayoutChange:b}),x=useEdgeDrag({onNodeLink:Z,onNodeLinkCheck:s});return jsx(CanvasContext.Provider,{value:{selections:Y,readonly:G,pannable:k,panType:W,...M,...u,...x},children:K})},useCanvas=()=>{const Y=useContext(CanvasContext);if(void 0===Y)throw new Error("`useCanvas` hook must be used within a `CanvasContext` component");return Y};function checkNodeLinkable(Y,Z,G){return null!==G&&Z?!(!Z||!Y)&&!(!1===G&&Z.id===Y.id):null}function getCoords({zoom:Y,layoutXY:Z,containerRef:G}){const{top:K,left:m}=G.current.getBoundingClientRect(),i=Z[0]-G.current.scrollLeft+m,h=Z[1]-G.current.scrollTop+K;return(new Matrix2D).translate(i,h).scale(Y).inverse()}function findNestedNode(Y,Z,G){if(!Y||!Z)return{};const K=Z.find((Z=>Z.id===Y));if(K)return K;if(G){const K=Z.find((Y=>Y.id===G));if(null==K?void 0:K.children)return findNestedNode(Y,K.children,G)}const m=Z.filter((Y=>{var Z;return null==(Z=Y.children)?void 0:Z.length}));for(const Z of m){const K=findNestedNode(Y,Z.children,G);if(K&&Object.keys(K).length)return K}return{}}function getDragNodeData(Y,Z=[]){if(!Y)return{};const{parent:G}=Y;return G?findNestedNode(Y.id,Z,G):(null==Z?void 0:Z.find((Z=>Z.id===Y.id)))||{}}const useNodeDrag=({x:Y,y:Z,height:G,width:K,onDrag:m,onDragEnd:i,onDragStart:h,node:l,disabled:p})=>{const L=[K/2+Y,G+Z],S=useRef(null),{zoom:k,xy:W,containerRef:d}=useCanvas();return useDrag((Y=>{if("pointerdown"===Y.event.type&&(S.current=Y.event.currentTarget),Y.intentional&&S.current){if(Y.first){const Z=[getCoords({containerRef:d,zoom:k,layoutXY:W})];return h({...Y,memo:Z},L,l),Z}m(Y,L,l),Y.last&&(S.current=null,i(Y,L,l))}}),{enabled:!p,triggerAllEvents:!0,threshold:5})},port="_port_1r6fw_1",clicker$1="_clicker_1r6fw_9",disabled$2="_disabled_1r6fw_12",css$8={port:port,clicker:clicker$1,disabled:disabled$2},Port=forwardRef((({id:Y,x:Z,y:G,rx:K,ry:m,disabled:i,style:h,children:l,properties:p,offsetX:L,offsetY:S,className:k,active:W,onDrag:d=()=>{},onDragStart:y=()=>{},onDragEnd:I=()=>{},onEnter:o=()=>{},onLeave:X=()=>{},onClick:s=()=>{}},b)=>{const{readonly:c}=useCanvas(),[u,M]=useState(!1),[x,E]=useState(!1),V=Z-p.width/2,C=G-p.height/2,R=useNodeDrag({x:V+L,y:C+S,height:p.height,width:p.width,disabled:i||c||(null==p?void 0:p.disabled),node:p,onDrag:d,onDragStart:(Y,Z)=>{y(Y,Z,p),M(!0)},onDragEnd:(Y,Z)=>{I(Y,Z,p),M(!1)}});if(p.hidden)return null;const T=p.disabled||i,a={port:p,isDragging:u,isHovered:x,isDisabled:T,x:Z,y:G,rx:K,ry:m,offsetX:L,offsetY:S};return jsxs("g",{id:Y,children:[jsx("rect",{...R(),ref:b,height:p.height+14,width:p.width+14,x:V-7,y:C-7,className:classNames(css$8.clicker,{[css$8.disabled]:T}),onMouseEnter:Y=>{Y.stopPropagation(),T||(E(!0),o(Y,p))},onMouseLeave:Y=>{Y.stopPropagation(),T||(E(!1),X(Y,p))},onClick:Y=>{Y.stopPropagation(),T||s(Y,p)}}),jsx(motion.rect,{style:h,className:classNames(css$8.port,k,null==p?void 0:p.className),height:p.height,width:p.width,rx:K,ry:m,initial:{scale:0,opacity:0,x:V,y:C},animate:{x:V,y:C,scale:(u||W||x)&&!T?1.5:1,opacity:1}},`${Z}-${G}`),l&&jsx(Fragment,{children:"function"==typeof l?l(a):l})]})})),text="_text_fhkx6_1",css$7={text:text},Label=({text:Y,x:Z,y:G,style:K,className:m,originalText:i})=>jsxs(Fragment$1,{children:["string"==typeof i&&jsx("title",{children:i}),jsx("g",{transform:`translate(${Z}, ${G})`,children:jsx("text",{className:classNames(css$7.text,m),style:K,children:Y})})]}),deleteX="_deleteX_nxq8k_1",container$2="_container_nxq8k_6",drop$1="_drop_nxq8k_10",rect$2="_rect_nxq8k_15",css$6={deleteX:deleteX,container:container$2,drop:drop$1,rect:rect$2},Remove=({size:Y=15,className:Z,hidden:G,x:K,y:m,onClick:i=()=>{},onEnter:h=()=>{},onLeave:l=()=>{}})=>{if(G)return null;const p=Y/2,L=K-p,S=m-p;return jsxs(motion.g,{className:classNames(Z,css$6.container),initial:{scale:0,opacity:0,translateX:L,translateY:S},animate:{scale:1,opacity:1,translateX:L,translateY:S},whileHover:{scale:1.2},whileTap:{scale:.8},children:[jsx("rect",{height:1.5*Y,width:1.5*Y,className:css$6.drop,onMouseEnter:h,onMouseLeave:l,onClick:Y=>{Y.preventDefault(),Y.stopPropagation(),i(Y)}}),jsx("rect",{height:Y,width:Y,className:css$6.rect}),jsx("line",{x1:"2",y1:Y-2,x2:Y-2,y2:"2",className:css$6.deleteX,strokeWidth:"1"}),jsx("line",{x1:"2",y1:"2",x2:Y-2,y2:Y-2,className:css$6.deleteX,strokeWidth:"1"})]})};function getBezierCenter({sourceX:Y,sourceY:Z,targetX:G,targetY:K}){const m=Math.abs(G-Y)/2,i=G<Y?G+m:G-m,h=Math.abs(K-Z)/2;return[i,K<Z?K+h:K-h,m,h]}function getBezierPath({sourceX:Y,sourceY:Z,sourcePosition:G="bottom",targetX:K,targetY:m,targetPosition:i="top"}){const h=["left","right"],[l,p]=getBezierCenter({sourceX:Y,sourceY:Z,targetX:K,targetY:m});let L=`M${Y},${Z} C${Y},${p} ${K},${p} ${K},${m}`;return h.includes(G)&&h.includes(i)?L=`M${Y},${Z} C${l},${Z} ${l},${m} ${K},${m}`:h.includes(i)?L=`M${Y},${Z} C${Y},${m} ${Y},${m} ${K},${m}`:h.includes(G)&&(L=`M${Y},${Z} C${K},${Z} ${K},${Z} ${K},${m}`),L}function getCenter(Y){const Z=Y.getTotalLength()/2,{x:G,y:K}=Y.getPointAtLength(Z);return{x:G,y:K,angle:180*Math.atan2(G,K)/Math.PI}}function getAngle(Y,Z){const G=Y.x-Z.x,K=Y.y-Z.y;let m=Math.atan2(-K,-G);return m*=180/Math.PI,m<0&&(m+=360),m}function getPathCenter(Y,Z,G){if(!Y)return null;const K=getAngle(Z,G);return{...getCenter(Y),angle:K}}const plus="_plus_1qsm8_1",container$1="_container_1qsm8_6",drop="_drop_1qsm8_10",rect$1="_rect_1qsm8_15",css$5={plus:plus,container:container$1,drop:drop,rect:rect$1},Add=({x:Y,y:Z,className:G,size:K=15,hidden:m=!0,onEnter:i=()=>{},onLeave:h=()=>{},onClick:l=()=>{}})=>{if(m)return null;const p=K/2,L=Y-p,S=Z-p;return jsxs(motion.g,{className:classNames(G,css$5.container),initial:{scale:0,opacity:0,translateX:L,translateY:S},animate:{scale:1,opacity:1,translateX:L,translateY:S},whileHover:{scale:1.2},whileTap:{scale:.8},children:[jsx("rect",{height:2*K,width:2*K,className:css$5.drop,onClick:Y=>{Y.preventDefault(),Y.stopPropagation(),l(Y)},onMouseEnter:i,onMouseLeave:h}),jsx("rect",{height:K,width:K,className:css$5.rect}),jsx("line",{x1:"2",x2:K-2,y1:p,y2:p,className:css$5.plus,strokeWidth:"1"}),jsx("line",{x1:p,x2:p,y1:"2",y2:K-2,className:css$5.plus,strokeWidth:"1"})]})},edge="_edge_v5z62_1",disabled$1="_disabled_v5z62_2",selectionDisabled$1="_selectionDisabled_v5z62_6",path="_path_v5z62_8",active$1="_active_v5z62_11",deleteHovered$1="_deleteHovered_v5z62_15",clicker="_clicker_v5z62_22",css$4={edge:edge,disabled:disabled$1,selectionDisabled:selectionDisabled$1,path:path,active:active$1,deleteHovered:deleteHovered$1,clicker:clicker},Edge=({sections:Y,interpolation:Z="curved",properties:G,labels:K,className:m,containerClassName:i,disabled:h,removable:l=!0,selectable:p=!0,upsertable:L=!0,style:S,children:k,add:W=jsx(Add,{}),remove:d=jsx(Remove,{}),label:y=jsx(Label,{}),onClick:I=()=>{},onKeyDown:o=()=>{},onEnter:X=()=>{},onLeave:s=()=>{},onRemove:b=()=>{},onAdd:c=()=>{}})=>{const u=useRef(null),[M,x]=useState(!1),[E,V]=useState(null),{selections:C,readonly:R}=useCanvas(),T=!!(null==C?void 0:C.length)&&C.includes(null==G?void 0:G.id),a=h||(null==G?void 0:G.disabled),t=p&&!(null==G?void 0:G.selectionDisabled),j=useMemo((()=>{if(!(null==Y?void 0:Y.length))return null;if(Y[0].bendPoints){const G=Y?[Y[0].startPoint,...Y[0].bendPoints||[],Y[0].endPoint]:[];let K=line().x((Y=>Y.x)).y((Y=>Y.y));return"linear"!==Z&&(K="curved"===Z?K.curve(curveBundle.beta(1)):Z),K(G)}return getBezierPath({sourceX:Y[0].startPoint.x,sourceY:Y[0].startPoint.y,targetX:Y[0].endPoint.x,targetY:Y[0].endPoint.y})}),[Z,Y]);useEffect((()=>{(null==Y?void 0:Y.length)>0&&V(getPathCenter(u.current,Y[0].startPoint,Y[0].endPoint))}),[Y]);const g={edge:G,center:E,pathRef:u};return jsxs("g",{className:classNames(css$4.edge,i,{[css$4.disabled]:a,[css$4.selectionDisabled]:!t}),children:[jsx("path",{ref:u,style:S,className:classNames(css$4.path,null==G?void 0:G.className,m,{[css$4.active]:T,[css$4.deleteHovered]:M}),d:j,markerEnd:"url(#end-arrow)"}),jsx("path",{className:css$4.clicker,d:j,tabIndex:-1,onClick:Y=>{Y.preventDefault(),Y.stopPropagation(),!a&&t&&I(Y,G)},onKeyDown:Y=>{Y.preventDefault(),Y.stopPropagation(),a||o(Y,G)},onMouseEnter:Y=>{Y.stopPropagation(),a||X(Y,G)},onMouseLeave:Y=>{Y.stopPropagation(),a||s(Y,G)}}),k&&jsx(Fragment,{children:"function"==typeof k?k(g):k}),(null==K?void 0:K.length)>0&&K.map(((Y,Z)=>jsx(CloneElement,{element:y,edgeChildProps:g,...Y},Z))),!a&&E&&!R&&d&&l&&jsx(CloneElement,{element:d,...E,hidden:void 0!==d.props.hidden?d.props.hidden:!T,onClick:Y=>{Y.preventDefault(),Y.stopPropagation(),b(Y,G),x(!1)},onEnter:()=>x(!0),onLeave:()=>x(!1)}),!a&&E&&!R&&W&&L&&jsx(CloneElement,{element:W,...E,onClick:Y=>{Y.preventDefault(),Y.stopPropagation(),c(Y,G)}})]})},rect="_rect_1b6xi_1",selectionDisabled="_selectionDisabled_1b6xi_8",disabled="_disabled_1b6xi_8",dragging="_dragging_1b6xi_15",active="_active_1b6xi_19",unlinkable="_unlinkable_1b6xi_23",deleteHovered="_deleteHovered_1b6xi_27",children="_children_1b6xi_37",css$3={rect:rect,selectionDisabled:selectionDisabled,disabled:disabled,dragging:dragging,active:active,unlinkable:unlinkable,deleteHovered:deleteHovered,children:children},Node=({id:Y,x:Z,y:G,ports:K,labels:m,height:i,width:h,properties:l,animated:p,className:L,rx:S=2,ry:k=2,offsetX:W=0,offsetY:d=0,icon:y,disabled:I,style:o,children:X,nodes:s,edges:b,draggable:c=!0,linkable:u=!0,selectable:M=!0,removable:x=!0,dragType:E="multiportOnly",dragCursor:V="crosshair",childEdge:C=jsx(Edge,{}),childNode:R=jsx(Node,{}),remove:T=jsx(Remove,{}),port:a=jsx(Port,{}),label:t=jsx(Label,{}),onRemove:j,onDrag:g,onDragStart:Q,onDragEnd:J,onClick:N,onKeyDown:U,onEnter:F,onLeave:n})=>{const O=useRef(null),H=useAnimation(),{canLinkNode:z,enteredNode:B,selections:w,readonly:D,...P}=useCanvas(),[e,f]=useState(!1),[v,r]=useState(!1),[A,q]=useState(!0),_=(null==w?void 0:w.length)?w.includes(l.id):null,$=Y.includes("node-drag"),YY=Z+W,ZY=G+d,GY="multiportOnly"===E&&(null==K?void 0:K.filter((Y=>{var Z;return!(null==(Z=Y.properties)?void 0:Z.hidden)})).length)>1,KY=I||(null==l?void 0:l.disabled),mY=["port","multiportOnly"].includes(E)?u:c,iY=M&&!(null==l?void 0:l.selectionDisabled),hY=useCallback((Y=>{let Z=null;return Y?("all"===E||"port"===E||GY)&&(Z="port"):"all"===E||"node"===E?Z="node":GY||(Z="port"),Z}),[E,GY]),lY=useCallback((Y=>{Y?(document.body.classList.add("dragging"),document.body.style.cursor="node"===Y?"grab":"crosshair"):(document.body.classList.remove("dragging"),document.body.style.cursor="auto")}),[]),pY=useNodeDrag({x:YY,y:ZY,height:i,width:h,disabled:KY||GY||D||!mY||"port"===E,node:l,onDrag:(...Y)=>{!KY&&mY&&(P.onDrag(...Y),null==g||g(...Y))},onDragStart:(Y,Z,G,K)=>{!KY&&mY&&(Y.dragType=hY(!1),lY(Y.dragType),P.onDragStart(Y,Z,G,K),null==Q||Q(Y,Z,G,K),r(!0))},onDragEnd:(Y,Z,G,K)=>{!KY&&mY&&(Y.dragType=hY(!1),Y.srcElement=O.current,P.onDragEnd(Y,Z,G,K),null==J||J(Y,Z,G,K),r(!1),lY(null))}});useEffect((()=>((null==B?void 0:B.id)===l.id&&q(checkNodeLinkable(l,B,z)),()=>q(!0))),[z,B,l]),useEffect((()=>{H.set({opacity:1,translateX:Z,translateY:G})}),[H,Z,G]);const LY={height:i,width:h,x:Z,y:G,node:l,nodes:s,edges:b},SY=useCallback((Y=>{Y.preventDefault(),Y.stopPropagation(),!KY&&iY&&(null==N||N(Y,l))}),[iY,KY,N,l]),kY=useCallback((Y=>{Y.preventDefault(),KY||null==U||U(Y,l)}),[KY,U,l]),WY=useCallback((Y=>{Y.preventDefault(),Y.stopPropagation()}),[]),dY=useCallback((Y=>{Y.stopPropagation(),P.onEnter(Y,l),KY||null==F||F(Y,l)}),[P,KY,F,l]),yY=useCallback((Y=>{Y.stopPropagation(),P.onLeave(Y,l),KY||null==n||n(Y,l)}),[P,KY,n,l]),IY=useCallback(((Y,Z,G)=>{!KY&&u&&(Y.dragType=hY(!0),lY(Y.dragType),P.onDragStart(Y,Z,l,G),null==Q||Q(Y,Z,l,G),r(!0))}),[P,hY,KY,u,Q,l,lY]),oY=useCallback(((Y,Z,G)=>{!KY&&u&&(P.onDrag(Y,Z,l,G),null==g||g(Y,Z,l,G))}),[P,KY,u,g,l]),XY=useCallback(((Y,Z,G)=>{!KY&&u&&(Y.dragType=hY(!0),lY(null),P.onDragEnd(Y,Z,l,G),null==J||J(Y,Z,l,G),r(!1))}),[P,hY,KY,u,J,l,lY]);return jsxs(motion.g,{id:Y,initial:{cursor:"initial",opacity:0,translateX:Z,translateY:G},animate:H,children:[jsx(motion.rect,{...pY(),ref:O,tabIndex:-1,onKeyDown:kY,onClick:SY,onTouchStart:WY,onMouseEnter:dY,onMouseLeave:yY,className:classNames(css$3.rect,L,null==l?void 0:l.className,{[css$3.active]:_,[css$3.disabled]:KY,[css$3.unlinkable]:!1===A&&!$,[css$3.dragging]:v,[css$3.children]:(null==s?void 0:s.length)>0,[css$3.deleteHovered]:e,[css$3.selectionDisabled]:!iY}),style:o,height:i,width:h,rx:S,ry:k,initial:{opacity:0},animate:{opacity:1,transition:p?{}:{type:!1,duration:0}}}),X&&jsx(Fragment,{children:"function"==typeof X?X(LY):X}),y&&l.icon&&jsx(CloneElement,{element:y,...l.icon}),t&&(null==m?void 0:m.length)>0&&m.map(((Y,Z)=>jsx(CloneElement,{element:t,...Y},Z))),a&&(null==K?void 0:K.length)>0&&K.map((Z=>jsx(CloneElement,{element:a,active:!GY&&v,disabled:KY||!u,offsetX:YY,offsetY:ZY,onDragStart:IY,onDrag:oY,onDragEnd:XY,...Z,id:`${Y}-port-${Z.id}`},Z.id))),!KY&&_&&!D&&T&&x&&jsx(CloneElement,{element:T,y:i/2,x:h,onClick:Y=>{Y.preventDefault(),Y.stopPropagation(),null==j||j(Y,l),f(!1)},onEnter:()=>f(!0),onLeave:()=>f(!1)}),jsxs("g",{children:[(null==b?void 0:b.length)>0&&b.map((Z=>{const G="function"==typeof C?C(Z):C;return jsx(CloneElement,{element:G,id:`${Y}-edge-${Z.id}`,disabled:KY,...Z,properties:{...Z.properties,...Z.data?{data:Z.data}:{}}},Z.id)})),(null==s?void 0:s.length)>0&&s.map((({children:Z,...G})=>{var K,m,i,h,l,L;const S="function"==typeof R?R(G):R,k=null!=(null==(K=S.props)?void 0:K.disabled)?S.props.disabled:I,W=null!=(null==(m=S.props)?void 0:m.animated)?S.props.animated:p,d=null!=(null==(i=S.props)?void 0:i.draggable)?S.props.draggable:c,y=null!=(null==(h=S.props)?void 0:h.linkable)?S.props.linkable:u,o=null!=(null==(l=S.props)?void 0:l.selectable)?S.props.selectable:M,X=null!=(null==(L=S.props)?void 0:L.removable)?S.props.removable:x;return jsx(CloneElement,{element:S,id:`${Y}-node-${G.id}`,disabled:k,nodes:Z,offsetX:YY,offsetY:ZY,animated:W,children:S.props.children,childNode:R,dragCursor:V,dragType:E,childEdge:C,draggable:d,linkable:y,selectable:o,removable:X,onDragStart:Q,onDrag:g,onDragEnd:J,onClick:N,onEnter:F,onLeave:n,onKeyDown:U,onRemove:j,...G},G.id)}))]})]})},arrow="_arrow_4r5xg_1",css$2={arrow:arrow},Arrow=({size:Y=8,y:Z=0,x:G=0,angle:K=0,className:m,style:i})=>jsx("path",{style:i,transform:`translate(${G}, ${Z}) rotate(${K})`,className:classNames(css$2.arrow,m),d:`M0,-${Y/2}L${Y},0L0,${Y/2}`}),MarkerArrow=({size:Y=8,className:Z,style:G})=>jsx("marker",{id:"end-arrow",viewBox:`0 -${Y/2} ${Y} ${Y}`,refX:`${Y}`,markerWidth:`${Y}`,markerHeight:`${Y}`,orient:"auto",children:jsx(Arrow,{size:Y,style:G,className:Z})},"end-arrow"),container="_container_1ryvh_1",pannable="_pannable_1ryvh_2",dragNode="_dragNode_1ryvh_20",draggable="_draggable_1ryvh_24",css$1={container:container,pannable:pannable,dragNode:dragNode,draggable:draggable},InternalCanvas=forwardRef((({className:Y,height:Z="100%",width:G="100%",readonly:K,disabled:m=!1,animated:i=!0,arrow:h=jsx(MarkerArrow,{}),node:l=jsx(Node,{}),edge:p=jsx(Edge,{}),dragNode:L=jsx(Node,{}),dragEdge:S=jsx(Edge,{}),onMouseEnter:k=()=>{},onMouseLeave:W=()=>{},onCanvasClick:d=()=>{}},y)=>{var I,o,X,s,b;const c=useId(),{pannable:u,dragCoords:M,dragNode:x,layout:E,containerRef:V,svgRef:C,canvasHeight:R,canvasWidth:T,xy:a,zoom:t,setZoom:j,observe:g,zoomIn:Q,zoomOut:J,positionCanvas:N,fitCanvas:U,setScrollXY:F,panType:n,...O}=useCanvas(),[H,z]=useState(null);useImperativeHandle(y,(()=>({...O,observe:g,zoom:t,xy:a,layout:E,canvasHeight:R,containerRef:V,canvasWidth:T,svgRef:C,positionCanvas:N,setZoom:j,zoomIn:Q,zoomOut:J,fitCanvas:U,setScrollXY:F})));const B=useRef(!1),w=useRef({x:0,y:0}),D=useMemo((()=>getDragNodeData(x,null==E?void 0:E.children)),[x,null==E?void 0:E.children]),[P,e]=useState(D),f=useMemo((()=>"function"==typeof L?L(D):L),[L,D]);useLayoutEffect((()=>{!B.current&&null!==E&&a[0]>0&&a[1]>0&&(B.current=!0)}),[E,a]),useGesture({onDrag:({movement:[Y,Z]})=>{V.current&&!x&&(V.current.scrollLeft=w.current.x-Y,V.current.scrollTop=w.current.y-Z)},onDragStart:()=>{var Y,Z;w.current={x:(null==(Y=V.current)?void 0:Y.scrollLeft)||0,y:(null==(Z=V.current)?void 0:Z.scrollTop)||0}},onWheel:({event:Y,delta:Z,last:G})=>{!G&&Y.preventDefault();const K=-.02*Z[1];Z[1]>0?J(K):Q(K)}},{enabled:u&&"drag"===n,eventOptions:{passive:!1},domTarget:V});const v=useCallback((Y=>{z(Y.dragType)}),[]),r=useCallback((Y=>Y&&Array.isArray(Y)?Y.map((({children:Y,...Z})=>{const G="function"==typeof L?L(Z):L;return jsx(CloneElement,{element:G,disabled:!0,children:G.props.children,animated:i,nodes:Y,childEdge:S,childNode:L,...Z,onDragStart:v,id:`${c}-node-${Z.id}-node-drag`},`${c}-node-${Z.id}-node-drag`)})):[]),[i,c]);return useEffect((()=>{if(D&&Object.keys(D).length>0){const Y={...D};Y.children=r(Y.children),e(Y)}}),[r,D,null==E?void 0:E.children]),jsx("div",{style:{height:Z,width:G},className:classNames(css$1.container,Y,{[css$1.pannable]:u,[css$1.draggable]:"drag"===n}),ref:Y=>{g(Y),V.current=Y},onMouseEnter:k,onMouseLeave:W,children:jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",id:c,ref:C,height:R,width:T,onClick:d,children:[null!==h&&jsx("defs",{children:jsx(CloneElement,{element:h,...h})}),jsxs(motion.g,{initial:{opacity:0,scale:0,transition:{translateX:!1,translateY:!1}},animate:{opacity:1,translateX:a[0],translateY:a[1],scale:t,transition:i?{velocity:100,translateX:{duration:B.current?.3:0},translateY:{duration:B.current?.3:0},opacity:{duration:.8},when:"beforeChildren"}:{type:!1,duration:0,when:"beforeChildren"}},children:[null==(I=null==E?void 0:E.children)?void 0:I.map((({children:Y,...Z})=>{const G="function"==typeof l?l(Z):l;return jsx(CloneElement,{element:G,disabled:m,children:G.props.children,animated:i,nodes:Y,childEdge:p,childNode:l,...Z,onDragStart:v,id:`${c}-node-${Z.id}`},Z.id)})),null==(o=null==E?void 0:E.edges)?void 0:o.map((Y=>{const Z="function"==typeof p?p(Y):p;return jsx(CloneElement,{element:Z,disabled:m,children:Z.props.children,...Y,properties:{...Y.properties,...Y.data?{data:Y.data}:{}},id:`${c}-edge-${Y.id}`},Y.id)})),null!==M&&S&&"port"===H&&!K&&jsx(CloneElement,{element:S,id:`${c}-edge-drag`,disabled:!0,sections:M}),null==(X=null==E?void 0:E.children)?void 0:X.map((({children:Y,ports:Z,...G})=>jsx(Fragment,{children:(null==Z?void 0:Z.length)>0&&jsx(motion.g,{initial:{translateX:G.x,translateY:G.y},animate:{translateX:G.x,translateY:G.y},transition:{duration:0},children:Z.map(((Y,Z)=>jsx("use",{xlinkHref:`#${c}-node-${G.id}-port-${Y.id}`,style:{pointerEvents:"none"}},Z)))},G.id)},G.id))),null!==M&&P&&"node"===H&&!K&&jsx(CloneElement,{...P,element:f,height:(null==(s=null==P?void 0:P.props)?void 0:s.height)||(null==P?void 0:P.height),width:(null==(b=null==P?void 0:P.props)?void 0:b.width)||(null==P?void 0:P.width),id:`${c}-node-drag`,animated:i,className:css$1.dragNode,disabled:!0,x:M[0].endPoint.x,y:M[0].endPoint.y})]})]})})})),Canvas=forwardRef((({selections:Y=[],readonly:Z=!1,fit:G=!1,nodes:K=[],edges:m=[],maxHeight:i=2e3,maxWidth:h=2e3,direction:l="DOWN",pannable:p=!0,panType:L="scroll",zoom:S=1,defaultPosition:k=CanvasPosition.CENTER,zoomable:W=!0,minZoom:d=-.5,maxZoom:y=1,onNodeLink:I=()=>{},onNodeLinkCheck:o=()=>{},onLayoutChange:X=()=>{},onZoomChange:s=()=>{},layoutOptions:b,...c},u)=>jsx(CanvasProvider,{layoutOptions:b,nodes:K,edges:m,zoom:S,defaultPosition:k,minZoom:d,maxZoom:y,fit:G,maxHeight:i,maxWidth:h,direction:l,pannable:p,panType:L,zoomable:W,readonly:Z,onLayoutChange:X,selections:Y,onZoomChange:s,onNodeLink:I,onNodeLinkCheck:o,children:jsx(InternalCanvas,{ref:u,...c})}))),icon="_icon_6o39n_1",css={icon:icon},Icon=({x:Y,y:Z,url:G,style:K,className:m,height:i=40,width:h=40})=>jsx("g",{className:classNames(css.icon,m),transform:`translate(${Y-h/2}, ${Z-i/2})`,children:jsx("image",{style:K,xlinkHref:G,width:h,height:i})});function upsertNode(Y,Z,G,K){const m=Z.findIndex((Y=>Y.id===G.id)),i={...G,id:`${G.from}-${K.id}`,to:K.id},h={...G,id:`${K.id}-${G.to}`,from:K.id};return G.fromPort&&G.toPort&&(i.fromPort=G.fromPort,i.toPort=`${K.id}-to`,h.fromPort=`${K.id}-from`,h.toPort=G.toPort),Z.splice(m,1,i,h),{nodes:[...Y,K],edges:[...Z]}}function removeAndUpsertNodes(Y,Z,G,K){Array.isArray(G)||(G=[G]);const m=G.map((Y=>Y.id)),i=Y.filter((Y=>!m.includes(Y.id))),h=Z.filter((Y=>!m.includes(Y.from)&&!m.includes(Y.to)));for(const G of m){const m=Z.filter((Y=>Y.to===G)),l=Z.filter((Y=>Y.from===G));for(const Z of m)for(const G of l){const m=Y.find((Y=>Y.id===Z.from)),l=Y.find((Y=>Y.id===G.to));if(m&&l){const Y=null==K?void 0:K(i,h,m,l);(void 0===Y||Y)&&h.push({id:`${m.id}-${l.id}`,from:m.id,to:l.id,parent:null==m?void 0:m.parent})}}}return{edges:h,nodes:i}}function removeNode(Y,Z,G){Array.isArray(G)||(G=[G]);const K=[],m=[];for(const Z of Y){G.some((Y=>Y===Z.id))||K.push(Z)}for(const Y of Z){G.some((Z=>Z===Y.from||Z===Y.to))||m.push(Y)}return{nodes:K,edges:m}}function removeEdgesFromNode(Y,Z){return Z.filter((Z=>!(Z.to===Y||Z.from===Y)))}function removeEdge(Y,Z){const G=(Array.isArray(Z)?Z:[Z]).map((Y=>Y.id));return Y.filter((Y=>!G.includes(Y.id)))}function createEdgeFromNodes(Y,Z){return{id:`${Y.id}-${Z.id}`,from:Y.id,to:Z.id,parent:Z.parent}}function addNodeAndEdge(Y,Z,G,K){return{nodes:[...Y,G],edges:[...Z,...K?[createEdgeFromNodes(K,G)]:[]]}}const useSelection=({selections:Y=[],nodes:Z=[],edges:G=[],hotkeys:K=["selectAll","deselect","delete"],disabled:m,onSelection:i,onDataChange:h})=>{const[l,p]=useState(Y),[L,S]=useState(!1),k=Y=>{if(!m){if(!l.includes(Y)){const Z=[...l,Y];null==i||i(Z),p(Z)}}},W=Y=>{if(!m){if(l.includes(Y)){const Z=l.filter((Z=>Z!==Y));null==i||i(Z),p(Z)}}},d=Y=>{l.includes(Y)?W(Y):k(Y)},y=(Y=[])=>{m||(p(Y),null==i||i(Y))};return useHotkeys([{name:"Select All",keys:"mod+a",disabled:!K.includes("selectAll"),category:"Canvas",description:"Select all nodes and edges",callback:Y=>{if(Y.preventDefault(),!m){const Y=Z.map((Y=>Y.id));null==h||h(Z,G),null==i||i(Y),p(Y)}}},{name:"Delete Selections",category:"Canvas",disabled:!K.includes("delete"),description:"Delete selected nodes and edges",keys:"backspace",callback:Y=>{if(!m){Y.preventDefault();const K=removeNode(Z,G,l);null==h||h(K.nodes,K.edges),null==i||i([]),p([])}}},{name:"Deselect Selections",category:"Canvas",disabled:!K.includes("deselect"),description:"Deselect selected nodes and edges",keys:"escape",callback:Y=>{m||(Y.preventDefault(),null==i||i([]),p([]))}}]),{onClick:(Y,Z)=>{Y.preventDefault(),Y.stopPropagation(),L?d(Z.id):y([Z.id]),S(!1)},onKeyDown:Y=>{Y.preventDefault(),S(Y.metaKey||Y.ctrlKey)},onCanvasClick:()=>{y(),S(!1)},selections:l,clearSelections:y,addSelection:k,removeSelection:W,toggleSelection:d,setSelections:p}},useUndo=({nodes:Y,edges:Z,disabled:G,maxHistory:K=20,onUndoRedo:m})=>{const[i,h]=useState(!1),[l,p]=useState(!1),L=useRef(new Undoo({maxLength:K})),S=useRef(m);useEffect((()=>{S.current=m}),[m]),useEffect((()=>{L.current.save({nodes:Y,edges:Z}),h(L.current.canUndo()),p(L.current.canRedo())}),[Y,Z]);const k=useCallback((()=>{L.current.undo((Y=>{const Z=L.current.canUndo(),G=L.current.canRedo();h(Z),p(G),S.current({...Y,type:"undo",canUndo:Z,canRedo:G})}))}),[]),W=useCallback((()=>{L.current.redo((Y=>{const Z=L.current.canUndo(),G=L.current.canRedo();h(Z),p(G),S.current({...Y,type:"redo",canUndo:Z,canRedo:G})}))}),[]),d=useCallback(((Y,Z)=>{L.current.clear(),h(!1),p(!1),S.current({type:"clear",canUndo:!1,canRedo:!1}),L.current.save({nodes:Y,edges:Z})}),[]);return useHotkeys([{name:"Undo",keys:"mod+z",category:"Canvas",description:"Undo changes",callback:Y=>{Y.preventDefault(),!G&&i&&k()}},{name:"Redo",keys:"mod+shift+z",category:"Canvas",description:"Redo changes",callback:Y=>{Y.preventDefault(),!G&&l&&W()}}]),{canUndo:i,canRedo:l,count:()=>L.current.count(),history:()=>L.current.history(),clear:d,redo:W,undo:k}},buildPoints=(Y,Z)=>{var G;const K=[];if(null==Y?void 0:Y.length)for(const m of Y){let Y=m.x,i=m.y;Z&&(Y=Z.x+Y,i=Z.y+i);const h=[new Point2D(Y,i),new Point2D(Y+m.width,i+m.height)];K.push({points:h,node:m}),(null==(G=m.children)?void 0:G.length)&&K.push(...buildPoints(m.children,m))}return K},distanceFromNode=(Y,Z)=>{const[G,K]=Z.points;let m=0,i=0;return Y.x<G.x?m=G.x-Y.x:Y.x>K.x&&(m=K.x-Y.x),Y.y<G.y?i=G.y-Y.y:Y.y>K.y&&(i=K.y-Y.y),Math.floor(Math.sqrt(m*m+i*i))},findNodeIntersection=(Y,Z,G,K)=>{const m=[],i=new Point2D(Y.x,Y.y).transform(Z);for(const Y of G){const Z=IntersectionQuery.pointInRectangle(i,Y.points[0],Y.points[1]),G=distanceFromNode(i,Y);m.push({node:Y.node,minDist:G,intersects:Z})}let h=K,l=null,p=null;for(const Y of m)Y.minDist<h&&!Y.intersects&&(p=Y.node.id,h=Y.minDist),Y.intersects&&(l=Y.node.id);return l&&(p&&p!==l||(p=l,h=0)),{intersectedNodeId:l,foundNodeId:p,foundDist:h}},useProximity=({canvasRef:Y,disabled:Z,minDistance:G=40,...K})=>{const m=useRef(null),i=useRef(null),h=useRef(null),l=useRef(0),p=useRef(K);useEffect((()=>{p.current=K}),[K]);const[L,S]=useState(null),[k,W]=useState(null),[d,y]=useState(null),I=useCallback((()=>{if(Z)return;const G=Y.current;W(getCoords({containerRef:G.containerRef,zoom:G.zoom,layoutXY:G.xy})),y(buildPoints(G.layout.children))}),[Z]),o=useCallback((Y=>{if(!k||Z)return;const{onMatchChange:K,onIntersects:L,onDistanceChange:W}=p.current,{intersectedNodeId:y,foundNodeId:I,foundDist:o}=findNodeIntersection(Y,k,d,G),X=o!==G?o:null;I!==i.current&&(null==K||K(I,o)),y!==m.current&&(null==L||L(y)),W&&X!==h.current&&(cancelAnimationFrame(l.current),l.current=requestAnimationFrame((()=>{W(X)}))),m.current=y,i.current=I,h.current=X,S(I)}),[k,Z,G,d]);useEffect((()=>()=>cancelAnimationFrame(l.current)));return{match:L,onDragStart:I,onDrag:o,onDragEnd:useCallback((()=>{Z||(S(null),W(null),y(null))}),[Z])}};function hasLink(Y,Z,G){return Y.some((Y=>Y.from===Z.id&&Y.to===G.id))}function getSourceNodesForTargetId(Y,Z,G){const K=Z.reduce(((Y,Z)=>(Z.to===G&&Y.push(Z.from),Y)),[]),m=Y.find((Y=>Y.id===G));return(null==m?void 0:m.parent)&&K.push(m.parent),Y.filter((Y=>K.includes(Y.id)))}function detectCircular(Y,Z,G,K){let m=!1;const i=G=>{const h=getSourceNodesForTargetId(Y,Z,G);for(const Y of h){if(Y.id===K.id){m=!0;break}i(Y.id)}};return i(G.id),m}const getParentsForNodeId=(Y,Z,G)=>{const K=[],m=G=>{const i=getSourceNodesForTargetId(Y,Z,G);for(const Y of i){K.find((Z=>Z.id===Y.id))||(K.push(Y),m(Y.id))}};return m(G),K};function getEdgesByNode(Y,Z){const G=[],K=[];for(const m of Y)m.to===Z.id&&G.push(m),m.from===Z.id&&K.push(m);return{to:G,from:K,all:[...G,...K]}}export{Add,Arrow,Canvas,CanvasContext,CanvasPosition,CanvasProvider,Edge,Icon,Label,MarkerArrow,Node,Port,Remove,addNodeAndEdge,calculateScrollPosition,calculateZoom,checkNodeLinkable,createEdgeFromNodes,detectCircular,elkLayout,findNestedNode,findNode,formatText,getChildCount,getCoords,getDragNodeData,getEdgesByNode,getNodesBoundingBox,getParentsForNodeId,hasLink,measureText,parsePadding,removeAndUpsertNodes,removeEdge,removeEdgesFromNode,removeNode,upsertNode,useCanvas,useEdgeDrag,useLayout,useNodeDrag,useProximity,useSelection,useUndo,useZoom};
//# sourceMappingURL=/sm/881fd71aced2cb186e0b2f7d0e4d58f923a1a3a84276a149b952aae2e643444e.map