commit ea191abbcfea2d770501823cae41fcd5944acaed Author: Simon Vieille Date: Wed Mar 13 12:32:42 2019 +0100 Fork of https://github.com/jakearchibald/svgomg (branch gh-pages) diff --git a/.well-known/assetlinks.json b/.well-known/assetlinks.json new file mode 100644 index 0000000..816e976 --- /dev/null +++ b/.well-known/assetlinks.json @@ -0,0 +1,8 @@ +[{ + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "org.chromium.twa.svgomg", + "sha256_cert_fingerprints": ["82:04:C5:DB:19:A8:B9:8A:27:14:F0:3E:F5:23:2C:6B:B6:B9:63:10:F2:F9:CD:44:72:AA:C6:7E:09:E1:1C:47", + "91:45:8F:34:E3:13:E4:58:1C:12:21:7A:FD:1E:BD:5C:BE:9B:DE:2C:1E:57:DC:0D:2B:0E:91:1D:A6:36:CA:E8"]} +}] diff --git a/changelog.json b/changelog.json new file mode 100644 index 0000000..8f248a9 --- /dev/null +++ b/changelog.json @@ -0,0 +1,249 @@ +[ + { + "version": "1.12.0", + "changes": [ + "Adding 'reset settings' button" + ] + }, + { + "version": "1.11.1", + "changes": [ + "Removing multipass until I figure out why it's broken" + ] + }, + { + "version": "1.11.0", + "changes": [ + "Ctrl/cmd-o now opens file picker (thanks Patrick Kettner)" + ] + }, + { + "version": "1.10.3", + "changes": [ + "Improving results output (thanks Pierre Giraud)", + "Renaming 'code' tab 'markup' (thanks Pierre Giraud)" + ] + }, + { + "version": "1.10.2", + "changes": [ + "Fixing remembered-settings regression" + ] + }, + { + "version": "1.10.1", + "changes": [ + "Fixing version tracking regression" + ] + }, + { + "version": "1.10.0", + "changes": [ + "Latest SVGO", + "Minor performance improvements" + ] + }, + { + "version": "1.9.1", + "changes": [ + "Fixed bug if 'show original' setting was saved" + ] + }, + { + "version": "1.9.0", + "changes": [ + "Settings are now remembered (thanks Simon Knox)", + "Fixed drag & drop issue (thanks Simon Knox)", + "Improved keyboard interaction (thanks Ahmad Shadeed)" + ] + }, + { + "version": "1.8.0", + "changes": [ + "New icon (thanks to Anna Debenham)" + ] + }, + { + "version": "1.7.0", + "changes": [ + "Button to change background color (thanks to Una Kravets)" + ] + }, + { + "version": "1.6.1", + "changes": [ + "HTMLmin broke my stuff" + ] + }, + { + "version": "1.6.0", + "changes": [ + "Copy-to-clipboard button" + ] + }, + { + "version": "1.5.1", + "changes": [ + "Minor CSS change" + ] + }, + { + "version": "1.5.0", + "changes": [ + "Updating SVGO" + ] + }, + { + "version": "1.4.3", + "changes": [ + "Fixing layout in Chrome beta." + ] + }, + { + "version": "1.4.2", + "changes": [ + "Better cache cleanup." + ] + }, + { + "version": "1.4.1", + "changes": [ + "Fixes to 'remove hidden items'." + ] + }, + { + "version": "1.4.0", + "changes": [ + "Updated to SVGO v0.5.1, bringing:", + "Remove useless defs option.", + "Round number in number lists.", + "And loads of fixes!" + ] + }, + { + "version": "1.3.0", + "changes": [ + "Using manifest spec for icons etc." + ] + }, + { + "version": "1.2.4", + "changes": [ + "Download button now works in IE." + ] + }, + { + "version": "1.2.3", + "changes": [ + "Fixing bug introduced by browserify." + ] + }, + { + "version": "1.2.2", + "changes": [ + "Better font loading." + ] + }, + { + "version": "1.2.1", + "changes": [ + "Lots of performance improvements." + ] + }, + { + "version": "1.2.0", + "changes": [ + "Code view.", + "Prettify code option." + ] + }, + { + "version": "1.1.7", + "changes": [ + "Performance improvements." + ] + }, + { + "version": "1.1.6", + "changes": [ + "Fix zooming with mouse wheels." + ] + }, + { + "version": "1.1.5", + "changes": [ + "Removing erroneous scrollbars in Firefox." + ] + }, + { + "version": "1.1.4", + "changes": [ + "Fixed 'about' link." + ] + }, + { + "version": "1.1.3", + "changes": [ + "Reverting some painting stuff until I get a handle on the performance.", + "Using simpler demo SVG." + ] + }, + { + "version": "1.1.2", + "changes": [ + "Sharper rendering on desktop Chrome & Safari.", + "Fixed right mouse button issue." + ] + }, + { + "version": "1.1.1", + "changes": [ + "Reset zooming on image load." + ] + }, + { + "version": "1.1.0", + "changes": [ + "Click/touch and drag panning.", + "Pinch zooming.", + "Wheel zooming." + ] + }, + { + "version": "1.0.4", + "changes": [ + "Fixing checkered background in IE.", + "Improving slider touch interaction." + ] + }, + { + "version": "1.0.3", + "changes": [ + "Fixing SVG output in Firefox." + ] + }, + { + "version": "1.0.2", + "changes": [ + "Caching fonts for offline use.", + "Removing tap delay on iPhone/iPad.", + "Fixing iOS add-to-homescreen.", + "Better mobile demo image." + ] + }, + { + "version": "1.0.1", + "changes": [ + "Layout fixes.", + "Better mobile keyboard handling.", + "A lighter demo SVG for mobile.", + "Fixing drag & drop." + ] + }, + { + "version": "1.0.0", + "changes": [ + "First release." + ] + } +] diff --git a/config.json b/config.json new file mode 100644 index 0000000..55ddd4c --- /dev/null +++ b/config.json @@ -0,0 +1,160 @@ +{ + "plugins": [ + { + "id": "removeDoctype", + "name": "Remove doctype" + }, + { + "id": "removeXMLProcInst", + "name": "Remove XML instructions" + }, + { + "id": "removeComments", + "name": "Remove comments" + }, + { + "id": "removeMetadata", + "name": "Remove " + }, + { + "id": "removeXMLNS", + "name": "Remove xmlns" + }, + { + "id": "removeEditorsNSData", + "name": "Remove editor data" + }, + { + "id": "cleanupAttrs", + "name": "Cleanup attribute whitespace" + }, + { + "id": "inlineStyles", + "name": "Inline styles" + }, + { + "id": "minifyStyles", + "name": "Minify styles" + }, + { + "id": "convertStyleToAttrs", + "name": "Style to attributes" + }, + { + "id": "cleanupIDs", + "name": "Clean IDs" + }, + { + "id": "removeRasterImages", + "name": "Remove raster images" + }, + { + "id": "removeUselessDefs", + "name": "Remove unused defs" + }, + { + "id": "cleanupNumericValues", + "name": "Round/rewrite numbers" + }, + { + "id": "cleanupListOfValues", + "name": "Round/rewrite number lists" + }, + { + "id": "convertColors", + "name": "Minify colours" + }, + { + "id": "removeUnknownsAndDefaults", + "name": "Remove unknowns & defaults" + }, + { + "id": "removeNonInheritableGroupAttrs", + "name": "Remove unneeded group attrs" + }, + { + "id": "removeUselessStrokeAndFill", + "name": "Remove useless stroke & fill" + }, + { + "id": "removeViewBox", + "name": "Remove viewBox" + }, + { + "id": "cleanupEnableBackground", + "name": "Remove/tidy enable-background" + }, + { + "id": "removeHiddenElems", + "name": "Remove hidden elements" + }, + { + "id": "removeEmptyText", + "name": "Remove empty text" + }, + { + "id": "convertShapeToPath", + "name": "Shapes to (smaller) paths" + }, + { + "id": "moveElemsAttrsToGroup", + "name": "Move attrs to parent group" + }, + { + "id": "moveGroupAttrsToElems", + "name": "Move group attrs to elements" + }, + { + "id": "collapseGroups", + "name": "Collapse useless groups" + }, + { + "id": "convertPathData", + "name": "Round/rewrite paths" + }, + { + "id": "convertTransform", + "name": "Round/rewrite transforms" + }, + { + "id": "removeEmptyAttrs", + "name": "Remove empty attrs" + }, + { + "id": "removeEmptyContainers", + "name": "Remove empty containers" + }, + { + "id": "mergePaths", + "name": "Merge paths" + }, + { + "id": "removeUnusedNS", + "name": "Remove unused namespaces" + }, + { + "id": "sortAttrs", + "name": "Sort attrs" + }, + { + "id": "removeTitle", + "name": "Remove " + }, + { + "id": "removeDesc", + "name": "Remove <desc>" + }, + { + "id": "removeDimensions", + "name": "Prefer viewBox to width/height" + }, + { + "id": "removeStyleElement", + "name": "Remove style elements" + }, + { + "id": "removeScriptElement", + "name": "Remove script elements" + } + ] +} \ No newline at end of file diff --git a/css/all.css b/css/all.css new file mode 100644 index 0000000..0323367 --- /dev/null +++ b/css/all.css @@ -0,0 +1,3 @@ +.app-output{height:100%;overflow:hidden;display:-webkit-flex;display:flex;-webkit-flex-flow:column;flex-flow:column}.settings{-webkit-flex:0.9 1 0;flex:0.9 1 0;overflow:hidden}@media (min-width: 640px){.settings{-webkit-flex:none;flex:none;min-width:21.1em}}@media (min-width: 900px){.settings{margin:30px;border-radius:2px;border:1px solid #d7d7d7}}.main{-webkit-flex:1;flex:1;display:-webkit-flex;display:flex;-webkit-flex-flow:column;flex-flow:column;overflow:hidden}@media (min-width: 640px){.main{-webkit-flex-flow:row;flex-flow:row}}.output{-webkit-flex:1 1 0;flex:1 1 0;position:relative}.action-button-container{position:absolute;z-index:2;bottom:-28px;right:13px;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.action-button-container .minor-action-container{display:flex}.action-button-container .minor-action-container .minor-floating-action-button{margin-right:10px}@media (min-width: 640px){.action-button-container{right:30px;bottom:30px}.action-button-container .results-container{margin-right:-17px}.action-button-container .minor-action-container{flex-flow:column;position:absolute;bottom:58px;right:8px}.action-button-container .minor-action-container .minor-floating-action-button{margin-bottom:10px;margin-right:0}}@media (min-width: 900px){.action-button-container{right:0;bottom:30px}}.toolbar{z-index:2}.setting{z-index:1}.settings,.toolbar{box-shadow:0 0px 11px rgba(0,0,0,0.4)}@media (min-width: 640px){.settings,.toolbar{box-shadow:0 4px 11px rgba(0,0,0,0.3)}}.toolbar{-webkit-transform:translateY(-110%);transform:translateY(-110%)}.toolbar.transition{-webkit-transition:-webkit-transform 0.2s ease-out;transition:transform 0.2s ease-out}.toolbar.active{-webkit-transform:translateZ(0);transform:translateZ(0)}.settings{-webkit-transform:translateY(110%);transform:translateY(110%)}@media (min-width: 640px){.settings{-webkit-transform:translateX(115%);transform:translateX(115%)}}.settings.transition{-webkit-transition:-webkit-transform 0.3s ease-out 0.05s;transition:transform 0.3s ease-out 0.05s}@media (min-width: 640px) and (max-width: 900px){.settings.transition{-webkit-transition:-webkit-transform 0.3s ease-out 0.2s;transition:transform 0.3s ease-out 0.2s}}.settings.active{-webkit-transform:translateZ(0);transform:translateZ(0)}.action-button-container{-webkit-transform:translateX(168px);transform:translateX(168px)}@media (min-width: 640px){.action-button-container{-webkit-transform:translateY(188px);transform:translateY(188px)}}.action-button-container.transition{-webkit-transition:-webkit-transform 0.2s ease-out 0.2s;transition:transform 0.2s ease-out 0.2s}@media (min-width: 640px) and (max-width: 900px){.action-button-container.transition{-webkit-transition:-webkit-transform 0.2s ease-out 0.4s;transition:transform 0.2s ease-out 0.4s}}.action-button-container.active{-webkit-transform:translateZ(0);transform:translateZ(0)}.output-switcher{-webkit-filter:contrast(0%) brightness(150%) saturate(100%);filter:contrast(0%) brightness(150%) saturate(100%);opacity:0}.output-switcher.transition{-webkit-transition:all 0.5s ease-out 0.5s;transition:all 0.5s ease-out 0.5s}@media (min-width: 640px) and (max-width: 900px){.output-switcher.transition{-webkit-transition:all 0.5s ease-out 0.6s;transition:all 0.5s ease-out 0.6s}}.output-switcher.active{opacity:1;-webkit-filter:none;filter:none}.settings{background:#fff;display:-webkit-flex;display:flex;-webkit-flex-flow:column;flex-flow:column;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.settings-scroller{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;-webkit-flex:1;flex:1;-webkit-transform:translateZ(0);transform:translateZ(0)}.setting-item-toggle{position:relative;display:block;cursor:pointer;padding:0 16px;height:51px;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.setting-item-toggle input[type=checkbox]{position:absolute;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}.setting-item-toggle input:focus+.material-switch .handle{width:25px;height:25px;top:-5px;box-shadow:0 1px 3px rgba(0,0,0,0.5),inset 0 0 0 2px #3F51B5}.setting-item-range{padding:10px 16px 20px;display:-webkit-flex;display:flex;-webkit-flex-flow:column;flex-flow:column;-webkit-justify-content:center;justify-content:center}.setting-item-range .label-text{margin-bottom:0.7em}.settings>section:not(:first-child){border-top:1px solid #e7e7e7}.settings-sub-heading{margin:0;padding:12px 16px 16px;font-weight:normal;font-size:0.9rem;color:#898989}.setting-reset-row{padding:12px 16px 16px;text-align:right}.setting-reset{text-transform:uppercase;color:white;background:#3F51B5;padding:9px 14px;font-size:0.9rem;border-radius:5px;position:relative;overflow:hidden}.setting-reset .ripple{top:-94%;bottom:auto;padding-top:100%}.material-switch{display:block;width:37px;height:14px;position:relative;margin-right:19px}.material-switch .track{border-radius:19px;position:absolute;top:0;bottom:0;left:1px;right:1px;background:rgba(0,0,0,0.26);overflow:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.material-switch .track::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:#9FA8DA;opacity:0;-webkit-transition:opacity 0.15s ease-out;transition:opacity 0.15s ease-out;-webkit-transform:translateZ(0);transform:translateZ(0);border-radius:19px}@supports (transform: none){.material-switch .track::before{border-radius:0}}.material-switch .handle{position:absolute;top:-3px;left:0;width:20px;height:20px;border-radius:20px;background:#fafafa;box-shadow:0 1px 3px rgba(0,0,0,0.5),inset 0 0 0 2px transparent;overflow:hidden;box-sizing:border-box;-webkit-transition:all 0.15s ease-out;transition:all 0.15s ease-out;-webkit-transform:translateZ(0);transform:translateZ(0)}.material-switch .handle::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:#3F51B5;opacity:0;-webkit-transition:opacity 0.15s ease-out;transition:opacity 0.15s ease-out;-webkit-transform:translateZ(0);transform:translateZ(0);border-radius:10px}@supports (transform: none){.material-switch .handle::before{border-radius:0}}:checked+.material-switch .track::before{opacity:1}:checked+.material-switch .handle{-webkit-transform:translate3d(17px, 0, 0);transform:translate3d(17px, 0, 0);box-shadow:0 1px 3px rgba(0,0,0,0.5),inset 0 0 0 2px transparent}:checked+.material-switch .handle::before{opacity:1}.toolbar{background:#3F51B5;color:#fff;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.menu-toolbar-item button{padding:10px 12px}.menu-toolbar-item svg{width:24px;height:24px;fill:#fff}.minor-floating-action-button{width:40px;height:40px;border-radius:20px;background:#fff;box-shadow:0 2px 3px rgba(0,0,0,0.25);position:relative;cursor:pointer;overflow:hidden;z-index:0;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-transition:all 0.1s ease-out;transition:all 0.1s ease-out}@media (min-width: 640px){.minor-floating-action-button{box-shadow:0 4px 11px rgba(0,0,0,0.3)}}.minor-floating-action-button:hover,.minor-floating-action-button.key-focused{-webkit-transform:scale(1.15);transform:scale(1.15);box-shadow:0 2px 10px rgba(0,0,0,0.25)}.minor-floating-action-button:focus{outline:none}.minor-floating-action-button .icon{display:block;width:24px;height:24px;fill:#000;z-index:1}.minor-floating-action-button .spinner{position:absolute;top:0;left:0;width:40px;height:40px;border-color:#00bcd4}.minor-floating-action-button .ripple{background:#00bcd4}.floating-action-button{width:56px;height:56px;border-radius:28px;background:#00BCD4;box-shadow:0 2px 3px rgba(0,0,0,0.25);position:relative;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-transition:all 0.1s ease-out;transition:all 0.1s ease-out}@media (min-width: 640px){.floating-action-button{box-shadow:0 4px 11px rgba(0,0,0,0.3)}}.floating-action-button:hover,.floating-action-button.key-focused{-webkit-transform:scale(1.15);transform:scale(1.15);box-shadow:0 2px 10px rgba(0,0,0,0.25)}.floating-action-button:focus{outline:none}.floating-action-button .icon{display:block;width:24px;height:24px;fill:#fff;z-index:1}.floating-action-button .spinner{position:absolute;top:0;left:0;width:56px;height:56px;border-color:#fff}.floating-action-button .ripple{background:#fff}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@keyframes left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}@keyframes right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}@-webkit-keyframes fade-in{from{opacity:0}to{opacity:1}}@keyframes fade-in{from{opacity:0}to{opacity:1}}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.spinner{display:inline-block;position:relative;width:28px;height:28px;border-color:#4285f4}.spinner .circle{position:absolute;top:0;left:0;right:0;bottom:0;box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%}.spinner .gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.spinner .gap-patch .circle{width:1000%;left:-450%}.spinner .circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.spinner .circle-clipper.left .circle{border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg);-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.spinner .circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg);-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.spinner .circle-clipper .circle{width:200%}.spinner.cooldown{-webkit-animation:fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1) both;animation:fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1) both}.spinner-container{width:100%;height:100%;border-color:inherit;-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}.spinner-layer{position:absolute;width:100%;height:100%;opacity:1;border-color:inherit;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.toasts{position:absolute;z-index:3;bottom:0;left:0;right:0}@media (min-width: 640px){.toasts{bottom:30px;left:30px;right:auto}}.toast{color:#fff;background:#323232;padding:14px 29px;display:-webkit-flex;display:flex;-webkit-animation:fade-in 0.5s ease-out;animation:fade-in 0.5s ease-out;-webkit-transition:opacity 0.3s ease-out;transition:opacity 0.3s ease-out}@media (min-width: 640px){.toast{min-width:288px;max-width:568px;border-radius:2px}}.toast.hide{opacity:0}.toast .toast-content{margin-right:24px}.toast button{margin:0 0 0 auto;color:#00BCD4;text-transform:uppercase;min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content}.toast button:focus{outline:none;color:#fff}.material-slider{display:block;cursor:pointer;position:relative}.material-slider .track{position:relative;height:2px;background:rgba(0,0,0,0.26);pointer-events:none}.material-slider .track-on{position:relative;width:0%;height:100%;background:#3F51B5}.material-slider .handle{background:#3F51B5;width:30px;height:30px;border-radius:50%;position:absolute;top:50%;-webkit-transform:translate(-50%, -50%) scale(0.45) translateZ(0);transform:translate(-50%, -50%) scale(0.45) translateZ(0);display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-transition:-webkit-transform 0.1s ease-out;transition:transform 0.1s ease-out}.material-slider .arrow{background:inherit;width:60%;height:60%;position:absolute;top:14px;left:20%;-webkit-transform:translateY(-35%) rotate(45deg) translateZ(0);transform:translateY(-35%) rotate(45deg) translateZ(0);-webkit-transition:-webkit-transform 0.1s ease-out;transition:transform 0.1s ease-out}.material-slider .val{position:relative;color:#fff;text-align:center;width:100%;line-height:1;font-size:0.8rem;opacity:0;-webkit-transition:opacity 0.1s ease-out;transition:opacity 0.1s ease-out;-webkit-transform:translateZ(0);transform:translateZ(0)}.material-slider input[type=range]{cursor:inherit;position:absolute;top:0;left:0;margin:0;width:100%;height:60px;-webkit-transform:translateY(-50%);transform:translateY(-50%);opacity:0}@supports (width: calc(100% + 10px)){.material-slider input[type=range]{width:calc(100% + 10px);margin-left:-5px}}.material-slider input[type=range]::-ms-tooltip{display:none}.material-slider :focus+.track .handle,.material-slider .active+.track .handle{-webkit-transform:translate(-50%, -145%) translateZ(0);transform:translate(-50%, -145%) translateZ(0)}.material-slider :focus+.track .val,.material-slider .active+.track .val{opacity:1}.material-slider :focus+.track .arrow,.material-slider .active+.track .arrow{-webkit-transform:rotate(45deg) translateZ(0);transform:rotate(45deg) translateZ(0)}.drop-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.7);z-index:3;text-align:center;color:#fff;font-size:4.8rem;font-size:17vw;pointer-events:none;display:none;opacity:0;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center}.drop-overlay.transition{display:-webkit-flex;display:flex;-webkit-transition:opacity 0.2s ease-out;transition:opacity 0.2s ease-out}.drop-overlay.active{display:-webkit-flex;display:flex;opacity:1}.changelog{font-size:0.9rem;color:#898989;padding:12px 16px;opacity:0}.changelog.transition{-webkit-transition:opacity 0.2s ease-out;transition:opacity 0.2s ease-out}.changelog.active{opacity:1}.changelog h1{font-size:0.9rem;margin:0;padding:0;font-weight:normal}.changelog li{display:-webkit-flex;display:flex;margin:0.7em 0;line-height:1.5}.changelog li::before{content:'-';margin:0 1em 0 0}.svg-output{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0}.svg-output.transition{-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.svg-output.active{opacity:1}.svg-container{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateZ(0);transform:translateZ(0)}.svg-frame{border:none;overflow:hidden;position:absolute;top:50%;left:50%;pointer-events:none;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.svg-clickjacker{position:absolute;top:0;left:0;right:0;bottom:0}.material-tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-flex;display:flex;-webkit-align-self:stretch;align-self:stretch;text-transform:uppercase;overflow:hidden;position:relative;line-height:1;font-size:0.9rem}.material-tabs input{position:absolute;height:1px;width:1px;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}.material-tab{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;fill:#fff;padding:0 24px;cursor:pointer;position:relative}.material-tab .selected{position:absolute;bottom:0;left:0;right:0;top:0;border-bottom:2px solid transparent}.material-tab :checked+.selected,.material-tab :focus+.selected{border-color:#00BCD4}.material-tab :focus+.selected{background:rgba(255,255,255,0.1)}.results{background:#3F51B5;color:#fff;padding:12px 16px;z-index:1}@media (min-width: 640px){.results{background:#FFF;color:#000;box-shadow:0 3px 3px rgba(0,0,0,0.2);z-index:4;padding:7px 11px;font-size:0.9rem;padding-right:25px;border-radius:2px}.results .decrease{color:green}.results .increase{color:red}}.results .diff{margin-left:0.5em}.output-switcher{position:absolute;top:0;left:0;right:0;bottom:0}.code-output{position:absolute;top:0;left:0;right:0;bottom:0;overflow:auto;-webkit-overflow-scrolling:touch;color:#f8f8f2;background:rgba(0,0,0,0.8);opacity:0;-webkit-transform:translateZ(0);transform:translateZ(0)}.code-output.transition{-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.code-output.active{opacity:1}.code-output code{font-family:Inconsolata, monospace;line-height:1.5;font-size:0.9rem;display:block;padding:14px}@media (min-width: 900px){.code-output{width:100vw}.code-output code{font-size:1rem;padding-right:380px}}.code-output pre{margin:0;white-space:pre-wrap;word-wrap:break-word}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:slategray}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.property,.token.tag,.token.constant,.token.symbol,.token.deleted{color:#f92672}.token.boolean,.token.number{color:#ae81ff}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:#a6e22e}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value{color:#e6db74}.token.keyword{color:#66d9ef}.token.regex,.token.important{color:#fd971f}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}@-webkit-keyframes ripple-pop{from{-webkit-transform:scale(0);transform:scale(0);opacity:1}20%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:0}}@keyframes ripple-pop{from{-webkit-transform:scale(0);transform:scale(0);opacity:1}20%{opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:0}}.ripple{position:absolute;top:-2px;left:-2px;right:-2px;bottom:-2px;background:#00bcd4;border-radius:100%;opacity:0;pointer-events:none;display:block}.ripple.animate{-webkit-animation:ripple-pop 0.5s cubic-bezier(0.23, 1, 0.32, 1);animation:ripple-pop 0.5s cubic-bezier(0.23, 1, 0.32, 1)} + +/*# sourceMappingURL=all.css.map */ diff --git a/css/all.css.map b/css/all.css.map new file mode 100644 index 0000000..4c9e7ee --- /dev/null +++ b/css/all.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["_main-layout.scss","_utils.scss","components/_settings.scss","components/_material-switch.scss","components/_toolbar.scss","components/_minor-floating-action-button.scss","components/_floating-action-button.scss","components/_spinner.scss","components/_toasts.scss","components/_material-slider.scss","components/_drop-overlay.scss","components/_changelog.scss","components/_svg-output.scss","components/_material-tabs.scss","components/_results.scss","components/_output.scss","components/_code-output.scss","components/_ripple.scss"],"names":[],"mappings":"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","file":"all.css","sourcesContent":[".app-output {\n height: 100%;\n overflow: hidden;\n @include display-flex;\n @include flex-flow(column);\n}\n\n.settings {\n @include flex(0.9 1 0);\n overflow: hidden;\n\n @media (min-width: 640px) {\n @include flex(none);\n min-width: 21.1em;\n }\n\n @media (min-width: 900px) {\n margin: 30px;\n border-radius: 2px;\n border: 1px solid #d7d7d7;\n }\n}\n\n.main {\n @include flex(1);\n @include display-flex;\n @include flex-flow(column);\n // Firefox needs this to limit size of main\n overflow: hidden;\n\n @media (min-width: 640px) {\n @include flex-flow(row);\n }\n}\n\n.output {\n @include flex(1 1 0);\n position: relative;\n}\n\n.action-button-container {\n position: absolute;\n z-index: 2;\n bottom: -28px;\n right: 13px;\n @include display-flex;\n @include align-items(center);\n\n & .minor-action-container {\n display: flex;\n\n & .minor-floating-action-button {\n margin-right: 10px;\n }\n }\n\n @media (min-width: 640px) {\n right: 30px;\n bottom: 30px;\n\n & .results-container {\n margin-right: -17px;\n }\n\n & .minor-action-container {\n flex-flow: column;\n position: absolute;\n bottom: 58px;\n right: 8px;\n\n & .minor-floating-action-button {\n margin-bottom: 10px;\n margin-right: 0;\n }\n }\n }\n\n @media (min-width: 900px) {\n right: 0;\n bottom: 30px;\n }\n\n}\n\n// so these UI elements are above output\n.toolbar {\n z-index: 2;\n}\n.setting {\n z-index: 1;\n}\n\n// shadows\n.settings,\n.toolbar {\n box-shadow: 0 0px 11px rgba(0, 0, 0, 0.4);\n\n @media (min-width: 640px) {\n box-shadow: 0 4px 11px rgba(0, 0, 0, 0.3);\n }\n}\n\n// initial state\n .toolbar {\n @include transform(translateY(-110%));\n\n &.transition {\n @include transition-transform(0.2s ease-out);\n }\n\n &.active {\n // translateZ required to make Safari layer in the right order\n @include transform(translateZ(0));\n }\n }\n\n .settings {\n @include transform(translateY(110%));\n\n @media (min-width: 640px) {\n @include transform(translateX(115%));\n }\n\n &.transition {\n @include transition-transform(0.3s ease-out 0.05s);\n\n @media (min-width: 640px) and (max-width: 900px) {\n @include transition-transform(0.3s ease-out 0.2s);\n }\n }\n\n &.active {\n // translateZ required to make Safari layer in the right order\n @include transform(translateZ(0));\n }\n }\n\n .action-button-container {\n @include transform(translateX(168px));\n\n @media (min-width: 640px) {\n @include transform(translateY(188px));\n }\n\n &.transition {\n @include transition-transform(0.2s ease-out 0.2s);\n\n @media (min-width: 640px) and (max-width: 900px) {\n @include transition-transform(0.2s ease-out 0.4s);\n }\n }\n\n &.active {\n // translateZ required to make Safari layer in the right order\n @include transform(translateZ(0));\n }\n }\n\n .output-switcher {\n @include filter(contrast(0%) brightness(150%) saturate(100%));\n opacity: 0;\n\n &.transition {\n @include transition(all 0.5s ease-out 0.5s);\n\n @media (min-width: 640px) and (max-width: 900px) {\n @include transition(all 0.5s ease-out 0.6s);\n }\n }\n\n &.active {\n opacity: 1;\n @include filter(none);\n }\n }\n","@mixin placeholder {\n &::-webkit-input-placeholder,\n &::-moz-placeholder,\n &:-ms-input-placeholder {\n @content;\n }\n}\n\n@mixin user-select($spec...) {\n -webkit-touch-callout: $spec;\n @each $prefix in -webkit-, -moz-, -ms-, '' {\n #{$prefix}user-select: $spec;\n }\n}\n\n// transition & animation\n $easeInQuad : cubic-bezier(0.550, 0.085, 0.680, 0.530);\n $easeInCubic : cubic-bezier(0.550, 0.055, 0.675, 0.190);\n $easeInQuart : cubic-bezier(0.895, 0.030, 0.685, 0.220);\n $easeInQuint : cubic-bezier(0.755, 0.050, 0.855, 0.060);\n $easeInSine : cubic-bezier(0.470, 0.000, 0.745, 0.715);\n $easeInExpo : cubic-bezier(0.950, 0.050, 0.795, 0.035);\n $easeInCirc : cubic-bezier(0.600, 0.040, 0.980, 0.335);\n $easeInBack : cubic-bezier(0.600, -0.280, 0.735, 0.045);\n\n $easeOutQuad : cubic-bezier(0.250, 0.460, 0.450, 0.940);\n $easeOutCubic : cubic-bezier(0.215, 0.610, 0.355, 1.000);\n $easeOutQuart : cubic-bezier(0.165, 0.840, 0.440, 1.000);\n $easeOutQuint : cubic-bezier(0.230, 1.000, 0.320, 1.000);\n $easeOutSine : cubic-bezier(0.390, 0.575, 0.565, 1.000);\n $easeOutExpo : cubic-bezier(0.190, 1.000, 0.220, 1.000);\n $easeOutCirc : cubic-bezier(0.075, 0.820, 0.165, 1.000);\n $easeOutBack : cubic-bezier(0.175, 0.885, 0.320, 1.275);\n\n $easeInOutQuad : cubic-bezier(0.455, 0.030, 0.515, 0.955);\n $easeInOutCubic : cubic-bezier(0.645, 0.045, 0.355, 1.000);\n $easeInOutQuart : cubic-bezier(0.770, 0.000, 0.175, 1.000);\n $easeInOutQuint : cubic-bezier(0.860, 0.000, 0.070, 1.000);\n $easeInOutSine : cubic-bezier(0.445, 0.050, 0.550, 0.950);\n $easeInOutExpo : cubic-bezier(1.000, 0.000, 0.000, 1.000);\n $easeInOutCirc : cubic-bezier(0.785, 0.135, 0.150, 0.860);\n $easeInOutBack : cubic-bezier(0.680, -0.550, 0.265, 1.550);\n\n @mixin transition($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transition: $spec;\n }\n }\n\n @mixin transition-transform($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transition: #{$prefix}transform $spec;\n }\n }\n\n @mixin transition-property($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transition-property: $spec;\n }\n }\n\n @mixin animation($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}animation: $spec;\n }\n }\n\n @mixin keyframes($name) {\n @-webkit-keyframes #{$name} { @content; }\n @keyframes #{$name} { @content; }\n }\n\n @mixin transform($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transform: $spec;\n }\n }\n\n @mixin transform-origin($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transform-origin: $spec;\n }\n }\n\n @mixin filter($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}filter: $spec;\n }\n }\n\n// flexbox\n @mixin display-flex {\n @each $prefix in -webkit-, '' {\n display: #{$prefix}flex;\n }\n }\n @mixin flex-direction($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}flex-direction: $spec;\n }\n }\n @mixin justify-content($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}justify-content: $spec;\n }\n }\n @mixin flex($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}flex: $spec;\n }\n }\n @mixin flex-flow($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}flex-flow: $spec;\n }\n }\n @mixin flex-shrink($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}flex-shrink: $spec;\n }\n }\n @mixin align-items($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}align-items: $spec;\n }\n }\n @mixin align-self($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}align-self: $spec;\n }\n }\n @mixin order($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}order: $spec;\n }\n }\n @mixin max-height-max-content {\n @each $prefix in -webkit-, -moz-, '' {\n max-height: #{$prefix}max-content;\n }\n }\n @mixin max-height-min-content {\n @each $prefix in -webkit-, -moz-, '' {\n max-height: #{$prefix}max-content;\n }\n }\n @mixin min-height-min-content {\n @each $prefix in -webkit-, -moz-, '' {\n min-height: #{$prefix}min-content;\n }\n }\n @mixin min-width-min-content {\n @each $prefix in -webkit-, -moz-, '' {\n min-width: #{$prefix}min-content;\n }\n }\n",".settings {\n background: #fff;\n @include display-flex;\n @include flex-flow(column);\n @include user-select(none);\n}\n\n.settings-scroller {\n overflow-x: hidden;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n @include flex(1);\n @include transform(translateZ(0));\n}\n\n.setting-item-toggle {\n position: relative;\n display: block;\n cursor: pointer;\n padding: 0 16px;\n height: 51px;\n\n @include display-flex;\n @include align-items(center);\n\n & input[type=checkbox] {\n position: absolute;\n height: 1px;\n width: 1px;\n overflow: hidden;\n clip: rect(1px, 1px, 1px, 1px);\n }\n\n & input:focus + .material-switch {\n .handle {\n width: 25px;\n height: 25px;\n top: -5px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.5),\n inset 0 0 0 2px #3F51B5;\n }\n }\n}\n\n.setting-item-range {\n padding: 10px 16px 20px;\n @include display-flex;\n @include flex-flow(column);\n @include justify-content(center);\n\n & .label-text {\n margin-bottom: 0.7em;\n }\n}\n\n.settings > section:not(:first-child) {\n border-top: 1px solid #e7e7e7;\n}\n\n.settings-sub-heading {\n margin: 0;\n padding: 12px 16px 16px;\n font-weight: normal;\n font-size: 0.9rem;\n color: #898989;\n}\n\n.setting-reset-row {\n padding: 12px 16px 16px;\n text-align: right;\n}\n\n.setting-reset {\n text-transform: uppercase;\n color: white;\n background: #3F51B5;\n padding: 9px 14px;\n font-size: 0.9rem;\n border-radius: 5px;\n position: relative;\n overflow: hidden;\n\n & .ripple {\n top: -94%;\n bottom: auto;\n padding-top: 100%;\n }\n}\n",".material-switch {\n display: block;\n width: 37px;\n height: 14px;\n position: relative;\n margin-right: 19px;\n\n & .track {\n border-radius: 19px;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 1px;\n right: 1px;\n background: rgba(#000, 0.26);\n overflow: hidden;\n @include transform(translateZ(0));\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #9FA8DA;\n opacity: 0;\n @include transition(opacity 0.15s ease-out);\n @include transform(translateZ(0));\n\n // Safari needs this because it hates me & fails to clip properly\n border-radius: 19px;\n\n // But it causes issues in other browsers so:\n @supports (transform: none) {\n border-radius: 0;\n }\n }\n }\n\n & .handle {\n position: absolute;\n top: -3px;\n left: 0;\n width: 20px;\n height: 20px;\n border-radius: 20px;\n background: #fafafa;\n box-shadow: 0 1px 3px rgba(0,0,0,0.5), \n inset 0 0 0 2px transparent;\n overflow: hidden;\n box-sizing: border-box;\n @include transition(all 0.15s ease-out);\n @include transform(translateZ(0));\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #3F51B5;\n opacity: 0;\n @include transition(opacity 0.15s ease-out);\n @include transform(translateZ(0));\n\n // Safari needs this because it hates me & fails to clip properly\n border-radius: 10px;\n\n // But it causes issues in other browsers so:\n @supports (transform: none) {\n border-radius: 0;\n }\n }\n }\n\n :checked + & {\n & .track::before {\n opacity: 1;\n }\n\n & .handle {\n @include transform(translate3d(17px, 0, 0));\n box-shadow: 0 1px 3px rgba(0,0,0,0.5), \n inset 0 0 0 2px transparent;\n\n &::before {\n opacity: 1;\n }\n }\n }\n}",".toolbar {\n background: #3F51B5;\n color: #fff;\n @include display-flex;\n @include align-items(center);\n}\n\n.menu-toolbar-item {\n & button {\n padding: 10px 12px;\n }\n\n & svg {\n width: 24px;\n height: 24px;\n fill: #fff;\n }\n}",".minor-floating-action-button {\n width: 40px;\n height: 40px;\n border-radius: 20px;\n background: #fff;\n box-shadow: 0 2px 3px rgba(0, 0, 0, 0.25);\n position: relative;\n cursor: pointer;\n overflow: hidden;\n z-index: 0;\n\n @include display-flex;\n @include align-items(center);\n @include justify-content(center);\n\n @media (min-width: 640px) {\n box-shadow: 0 4px 11px rgba(0, 0, 0, 0.3);\n }\n\n @include transition(all 0.1s ease-out);\n\n &:hover,\n &.key-focused {\n @include transform(scale(1.15));\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);\n }\n\n &:focus {\n outline: none;\n }\n\n & .icon {\n display: block;\n width: 24px;\n height: 24px;\n fill: #000;\n z-index: 1;\n }\n\n & .spinner {\n position: absolute;\n top: 0;\n left: 0;\n width: 40px;\n height: 40px;\n border-color: #00bcd4;\n }\n\n & .ripple {\n background: #00bcd4;\n }\n}\n",".floating-action-button {\n width: 56px;\n height: 56px;\n border-radius: 28px;\n background: #00BCD4;\n box-shadow: 0 2px 3px rgba(0, 0, 0, 0.25);\n position: relative;\n\n @include display-flex;\n @include align-items(center);\n @include justify-content(center);\n\n @media (min-width: 640px) {\n box-shadow: 0 4px 11px rgba(0, 0, 0, 0.3);\n }\n\n @include transition(all 0.1s ease-out);\n\n &:hover,\n &.key-focused {\n @include transform(scale(1.15));\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.25);\n }\n\n &:focus {\n outline: none;\n }\n\n & .icon {\n display: block;\n width: 24px;\n height: 24px;\n fill: #fff;\n z-index: 1;\n }\n\n & .spinner {\n position: absolute;\n top: 0;\n left: 0;\n width: 56px;\n height: 56px;\n border-color: #fff;\n }\n\n & .ripple {\n background: #fff;\n }\n}\n","@include keyframes(container-rotate) {\n to { @include transform(rotate(360deg)) }\n}\n\n@include keyframes(fill-unfill-rotate) {\n 12.5% { @include transform(rotate(135deg)); } /* 0.5 * ARCSIZE */\n 25% { @include transform(rotate(270deg)); } /* 1 * ARCSIZE */\n 37.5% { @include transform(rotate(405deg)); } /* 1.5 * ARCSIZE */\n 50% { @include transform(rotate(540deg)); } /* 2 * ARCSIZE */\n 62.5% { @include transform(rotate(675deg)); } /* 2.5 * ARCSIZE */\n 75% { @include transform(rotate(810deg)); } /* 3 * ARCSIZE */\n 87.5% { @include transform(rotate(945deg)); } /* 3.5 * ARCSIZE */\n to { @include transform(rotate(1080deg)); } /* 4 * ARCSIZE */\n}\n\n@include keyframes(left-spin) {\n from { @include transform(rotate(130deg)); }\n 50% { @include transform(rotate(-5deg)); }\n to { @include transform(rotate(130deg)); }\n}\n\n@include keyframes(right-spin) {\n from { @include transform(rotate(-130deg)); }\n 50% { @include transform(rotate(5deg)); }\n to { @include transform(rotate(-130deg)); }\n}\n\n@include keyframes(fade-in) {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@include keyframes(fade-out) {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n.spinner {\n display: inline-block;\n position: relative;\n width: 28px;\n height: 28px;\n border-color: #4285f4;\n\n & .circle {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n box-sizing: border-box;\n height: 100%;\n border-width: 3px;\n border-style: solid;\n border-color: inherit;\n border-bottom-color: transparent !important;\n border-radius: 50%;\n }\n\n // Patch the gap that appear between the two adjacent div.circle-clipper while the\n // spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).\n & .gap-patch {\n position: absolute;\n box-sizing: border-box;\n top: 0;\n left: 45%;\n width: 10%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n\n & .circle {\n width: 1000%;\n left: -450%;\n }\n }\n\n & .circle-clipper {\n display: inline-block;\n position: relative;\n width: 50%;\n height: 100%;\n overflow: hidden;\n border-color: inherit;\n\n &.left .circle {\n border-right-color: transparent !important;\n @include transform(rotate(129deg));\n @include animation(left-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both);\n }\n\n &.right .circle {\n left: -100%;\n border-left-color: transparent !important;\n @include transform(rotate(-129deg));\n @include animation(right-spin 1333ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both);\n }\n\n & .circle {\n width: 200%;\n }\n }\n\n &.cooldown {\n /* duration: SHRINK_TIME */\n @include animation(fade-out 400ms cubic-bezier(0.4, 0.0, 0.2, 1) both);\n }\n}\n\n.spinner-container {\n width: 100%;\n height: 100%;\n border-color: inherit;\n\n /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */\n @include animation(container-rotate 1568ms linear infinite);\n}\n\n.spinner-layer {\n position: absolute;\n width: 100%;\n height: 100%;\n opacity: 1;\n border-color: inherit;\n /* durations: 4 * ARCTIME */\n @include animation(fill-unfill-rotate 5332ms cubic-bezier(0.4, 0.0, 0.2, 1) infinite both);\n}",".toasts {\n position: absolute;\n z-index: 3;\n\n bottom: 0;\n left: 0;\n right: 0;\n\n @media (min-width: 640px) {\n bottom: 30px;\n left: 30px;\n right: auto;\n }\n}\n\n.toast {\n color: #fff;\n background: #323232;\n padding: 14px 29px;\n\n @include display-flex;\n @include animation(fade-in 0.5s ease-out);\n @include transition(opacity 0.3s ease-out);\n\n @media (min-width: 640px) {\n min-width: 288px;\n max-width: 568px;\n border-radius: 2px;\n }\n\n &.hide {\n opacity: 0;\n }\n\n & .toast-content {\n margin-right: 24px;\n }\n\n & button {\n margin: 0 0 0 auto;\n color: #00BCD4;\n text-transform: uppercase;\n @include min-width-min-content;\n\n &:focus {\n outline: none;\n color: #fff;\n }\n }\n}",".material-slider {\n display: block;\n cursor: pointer;\n position: relative;\n\n & .track {\n position: relative;\n height: 2px;\n background: rgba(#000, 0.26);\n pointer-events: none;\n }\n\n & .track-on {\n position: relative;\n width: 0%;\n height: 100%;\n background: #3F51B5;\n }\n\n & .handle {\n background: #3F51B5;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n position: absolute;\n top: 50%;\n @include transform(translate(-50%, -50%) scale(0.45) translateZ(0));\n @include display-flex;\n @include align-items(center);\n @include transition-transform(0.1s ease-out);\n }\n\n & .arrow {\n background: inherit;\n width: 60%;\n height: 60%;\n position: absolute;\n top: 14px;\n left: 20%;\n @include transform(translateY(-35%) rotate(45deg) translateZ(0));\n @include transition-transform(0.1s ease-out);\n }\n\n & .val {\n position: relative;\n color: #fff;\n text-align: center;\n width: 100%;\n line-height: 1;\n font-size: 0.8rem;\n opacity: 0;\n @include transition(opacity 0.1s ease-out);\n @include transform(translateZ(0))\n }\n\n & input[type=range] {\n cursor: inherit;\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n width: 100%;\n\n // increase the touch target\n height: 60px;\n\n @supports (width: calc(100% + 10px)) {\n width: calc(100% + 10px);\n margin-left: -5px;\n }\n @include transform(translateY(-50%));\n opacity: 0;\n \n // remove tooltip in IE\n &::-ms-tooltip {\n display: none;\n }\n }\n\n & :focus + .track,\n & .active + .track {\n & .handle {\n @include transform(translate(-50%, -145%) translateZ(0));\n }\n\n & .val {\n opacity: 1;\n }\n\n & .arrow {\n @include transform(rotate(45deg) translateZ(0));\n }\n }\n}",".drop-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(#000, 0.7);\n z-index: 3;\n text-align: center;\n color: #fff;\n font-size: 4.8rem;\n font-size: 17vw;\n\n pointer-events: none;\n display: none;\n opacity: 0;\n\n @include align-items(center);\n @include justify-content(center);\n\n &.transition {\n @include display-flex;\n @include transition(opacity 0.2s ease-out);\n }\n\n &.active {\n @include display-flex;\n opacity: 1;\n }\n}",".changelog {\n font-size: 0.9rem;\n color: #898989;\n padding: 12px 16px;\n opacity: 0;\n\n &.transition {\n @include transition(opacity 0.2s ease-out);\n }\n\n &.active {\n opacity: 1;\n }\n \n & h1 {\n font-size: 0.9rem;\n margin: 0;\n padding: 0;\n font-weight: normal;\n }\n\n & li {\n @include display-flex;\n margin: 0.7em 0;\n line-height: 1.5;\n\n &::before {\n content: '-';\n margin: 0 1em 0 0;\n }\n }\n}",".svg-output {\n @include user-select(none);\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n opacity: 0;\n\n &.transition {\n @include transition(opacity 0.2s ease-in-out);\n }\n\n &.active {\n opacity: 1;\n }\n}\n\n.svg-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n @include transform-origin(0 0);\n @include transform(translateZ(0));\n}\n\n.svg-frame {\n border: none;\n overflow: hidden;\n position: absolute;\n top: 50%;\n left: 50%;\n pointer-events: none;\n @include transform(translate(-50%, -50%));\n}\n\n.svg-clickjacker {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}",".material-tabs {\n @include user-select(none);\n @include display-flex;\n @include align-self(stretch);\n text-transform: uppercase;\n overflow: hidden;\n position: relative;\n line-height: 1;\n font-size: 0.9rem;\n\n & input {\n position: absolute;\n height: 1px;\n width: 1px;\n overflow: hidden;\n clip: rect(1px, 1px, 1px, 1px);\n }\n}\n\n.material-tab {\n @include display-flex;\n @include align-items(center);\n fill: #fff;\n padding: 0 24px;\n cursor: pointer;\n position: relative;\n\n & .selected {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n top: 0;\n border-bottom: 2px solid transparent;\n }\n\n & :checked + .selected,\n & :focus + .selected {\n border-color: #00BCD4;\n }\n\n & :focus + .selected {\n background: transparentize(#fff, 0.9);\n }\n}",".results {\n background: #3F51B5;\n color: #fff;\n padding: 12px 16px;\n z-index: 1;\n\n @media (min-width: 640px) {\n background: #FFF;\n color: #000;\n box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2);\n z-index: 4;\n padding: 7px 11px;\n font-size: 0.9rem;\n padding-right: 25px;\n border-radius: 2px;\n\n .decrease {\n color: green;\n }\n .increase {\n color: red;\n }\n }\n\n .diff {\n margin-left: 0.5em;\n }\n}\n",".output-switcher {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}",".code-output {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n color: #f8f8f2;\n background: rgba(#000, 0.8);\n opacity: 0;\n @include transform(translateZ(0));\n\n &.transition {\n @include transition(opacity 0.2s ease-in-out);\n }\n\n &.active {\n opacity: 1;\n }\n\n & code {\n font-family: Inconsolata, monospace;\n line-height: 1.5;\n font-size: 0.9rem;\n display: block;\n padding: 14px;\n }\n\n @media (min-width: 900px) {\n width: 100vw;\n\n & code {\n font-size: 1rem;\n // This is a hack\n padding-right: 380px;\n }\n }\n\n & pre {\n margin: 0;\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n color: slategray;\n}\n\n.token.punctuation {\n color: #f8f8f2;\n}\n\n.namespace {\n opacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.constant,\n.token.symbol,\n.token.deleted {\n color: #f92672;\n}\n\n.token.boolean,\n.token.number {\n color: #ae81ff;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n color: #a6e22e;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string,\n.token.variable {\n color: #f8f8f2;\n}\n\n.token.atrule,\n.token.attr-value {\n color: #e6db74;\n}\n\n.token.keyword {\n color: #66d9ef;\n}\n\n.token.regex,\n.token.important {\n color: #fd971f;\n}\n\n.token.important,\n.token.bold {\n font-weight: bold;\n}\n.token.italic {\n font-style: italic;\n}","@include keyframes(ripple-pop) {\n from {\n @include transform(scale(0));\n opacity: 1;\n }\n 20% {\n opacity: 1;\n }\n to {\n @include transform(scale(1));\n opacity: 0;\n }\n}\n\n.ripple {\n position: absolute;\n top: -2px;\n left: -2px;\n right: -2px;\n bottom: -2px;\n background: #00bcd4;\n border-radius: 100%;\n opacity: 0;\n\n pointer-events: none;\n display: block;\n\n &.animate {\n @include animation(ripple-pop 0.5s $easeOutQuint);\n }\n}\n"]} \ No newline at end of file diff --git a/css/head.css b/css/head.css new file mode 100644 index 0000000..efb95e3 --- /dev/null +++ b/css/head.css @@ -0,0 +1,3 @@ +html,body{height:100%;margin:0;padding:0;overflow:hidden}html{font-family:roboto, sans-serif;-webkit-tap-highlight-color:rgba(0,0,0,0);background:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%202%202%22%3E%3Cpath%20d%3D%22M1%202V0h1v1H0v1z%22%20fill-opacity%3D%22.05%22%2F%3E%3C%2Fsvg%3E");background-size:16px 16px;background-color:#f2f2f2;transition:background-color 0.2s ease-in-out}pre,code,kbd,samp,tt{font-family:monospace,monospace;font-size:1em}button::-moz-focus-inner,textarea::-moz-focus-inner{border:0;padding:0}.main-menu{position:absolute;top:0;left:0;bottom:0;right:0;z-index:3;font-family:sans-serif}.main-menu.hide-font{color:transparent}.main-menu.hide-font .menu-footer-notes{color:transparent}.main-menu.use-font{font-family:inherit}.main-menu.hidden{pointer-events:none}.main-menu .menu{position:absolute;top:0;left:0;bottom:0;min-width:264px;width:40%;max-width:340px;background:#fff;box-shadow:3px 0 16px rgba(0,0,0,0.4);will-change:transform;overflow-x:hidden;overflow-y:auto;display:-webkit-flex;display:flex;-webkit-flex-flow:column;flex-flow:column}.main-menu .menu.transition{-webkit-transition:-webkit-transform 0.2s ease-out;transition:transform 0.2s ease-out}.main-menu .menu.hidden{-webkit-transform:translateX(-110%);transform:translateX(-110%)}.main-menu .menu>*{min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.main-menu .overlay{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0.4);will-change:opacity}.main-menu .overlay.transition{-webkit-transition:opacity 0.2s ease-in-out;transition:opacity 0.2s ease-in-out}.main-menu .overlay.hidden{opacity:0}.main-menu ul{margin:0;padding:0}.main-menu li{display:block;margin:0;padding:0}.main-menu .menu-item{padding:0 16px;width:100%;height:48px;box-sizing:border-box;display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.main-menu .menu-item:link,.main-menu .menu-item:visited{color:inherit;text-decoration:none}.main-menu .menu-item:focus,.main-menu .menu-item:hover{outline:none;background:rgba(0,0,0,0.1)}.main-menu .menu-item .icon{width:24px;height:24px;opacity:0.54;margin-right:32px;-webkit-flex:none;flex:none}.main-menu .menu-item .spinner{-webkit-flex:none;flex:none;margin:0 0 0 auto}.main-menu .menu-item .menu-item-text{margin-right:28px;overflow:hidden;text-overflow:ellipsis}.main-menu .menu-input{cursor:pointer}.main-menu .menu-input .input-area{position:relative;white-space:nowrap}.main-menu .menu-input .label-txt{position:absolute;left:0;top:0}.main-menu .menu-input textarea,.main-menu .menu-input input{display:block;font:inherit;border:none;background:none;padding:0;margin:0;opacity:0;cursor:inherit;resize:none;width:100%;height:1.3em;overflow:hidden}.main-menu .menu-input textarea:focus,.main-menu .menu-input input:focus{outline:none;opacity:1}.main-menu .menu-input textarea:focus+.label-txt,.main-menu .menu-input input:focus+.label-txt{opacity:0;pointer-events:none}.main-menu .load-file-input{display:none}.menu-footer-notes{padding:0 16px;margin-top:auto;text-align:center;font-size:0.9rem;color:#8E8E8E}.menu-footer-notes a:link,.menu-footer-notes a:visited{color:inherit;text-decoration:underline}.menu-footer-notes a:hover,.menu-footer-notes a:active{color:#000}.preloader{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.7);z-index:3;color:#fff;opacity:0;font-family:sans-serif;display:-webkit-flex;display:flex;-webkit-flex-flow:column;flex-flow:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;-webkit-transition:opacity 0.2s ease-out;transition:opacity 0.2s ease-out}.preloader.active{opacity:1}.preloader.active .spinner{display:block}.preloader .spinner{display:none;border-color:#fff}.unbutton{display:inline-block;background:none;border:none;padding:0;margin:0;font:inherit;cursor:pointer;white-space:nowrap}.toolbar,.main,.drop-overlay{display:none} + +/*# sourceMappingURL=head.css.map */ diff --git a/css/head.css.map b/css/head.css.map new file mode 100644 index 0000000..fcfbb53 --- /dev/null +++ b/css/head.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["_global.scss","components/_main-menu.scss","_utils.scss","components/_preloader.scss","head.scss"],"names":[],"mappings":"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","file":"head.css","sourcesContent":["html, body {\n height: 100%;\n margin: 0;\n padding: 0;\n overflow: hidden;\n}\n\nhtml {\n font-family: roboto, sans-serif;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n\n // <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 2 2\"><path d=\"M1 2V0h1v1H0v1z\" fill-opacity=\".05\"/></svg>\n background: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%202%202%22%3E%3Cpath%20d%3D%22M1%202V0h1v1H0v1z%22%20fill-opacity%3D%22.05%22%2F%3E%3C%2Fsvg%3E');\n background-size: 16px 16px;\n background-color: #f2f2f2;\n\n transition: background-color 0.2s ease-in-out;\n}\n\npre,\ncode,\nkbd,\nsamp,\ntt{\n font-family:monospace,monospace;\n font-size:1em;\n}\n\nbutton, textarea {\n &::-moz-focus-inner {\n border: 0;\n padding: 0;\n }\n}",".main-menu {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 3;\n font-family: sans-serif;\n\n &.hide-font {\n color: transparent;\n & .menu-footer-notes {\n color: transparent;\n }\n }\n\n &.use-font {\n font-family: inherit;\n }\n\n &.hidden {\n pointer-events: none;\n }\n\n & .menu {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n min-width: 264px;\n width: 40%;\n max-width: 340px;\n background: #fff;\n box-shadow: 3px 0 16px rgba(0, 0, 0, 0.4);\n will-change: transform;\n\n overflow-x: hidden;\n overflow-y: auto;\n @include display-flex;\n @include flex-flow(column);\n\n &.transition {\n @include transition-transform(0.2s ease-out);\n }\n &.hidden {\n @include transform(translateX(-110%));\n }\n\n & > * {\n @include min-height-min-content;\n }\n }\n\n & .overlay {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: rgba(#000, 0.4);\n will-change: opacity;\n\n &.transition {\n @include transition(opacity 0.2s ease-in-out);\n }\n &.hidden {\n opacity: 0;\n }\n }\n\n & ul {\n margin: 0;\n padding: 0;\n }\n\n & li {\n display: block;\n margin: 0;\n padding: 0;\n }\n\n & .menu-item {\n padding: 0 16px;\n width: 100%;\n // I want this to be min-height, but IE breaks layout if I do\n height: 48px;\n box-sizing: border-box;\n @include display-flex;\n @include align-items(center);\n\n &:link,\n &:visited {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus,\n &:hover {\n outline: none;\n background: rgba(#000, 0.1);\n }\n\n & .icon {\n width: 24px;\n height: 24px;\n opacity: 0.54;\n margin-right: 32px;\n @include flex(none);\n }\n\n & .spinner {\n @include flex(none);\n margin: 0 0 0 auto;\n }\n\n & .menu-item-text {\n margin-right: 28px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n & .menu-input {\n cursor: pointer;\n\n & .input-area {\n position: relative;\n white-space: nowrap;\n }\n\n & .label-txt {\n position: absolute;\n left: 0;\n top: 0;\n }\n\n & textarea,\n & input {\n display: block;\n font: inherit;\n border: none;\n background: none;\n padding: 0;\n margin: 0;\n opacity: 0;\n cursor: inherit;\n resize: none;\n width: 100%;\n height: 1.3em;\n overflow: hidden;\n\n &:focus {\n outline: none;\n opacity: 1;\n\n & + .label-txt {\n opacity: 0;\n pointer-events: none;\n }\n }\n }\n }\n\n & .load-file-input {\n display: none;\n }\n}\n\n.menu-footer-notes {\n padding: 0 16px;\n margin-top: auto;\n text-align: center;\n font-size: 0.9rem;\n color: #8E8E8E;\n\n & a:link,\n & a:visited {\n color: inherit;\n text-decoration: underline;\n }\n\n & a:hover,\n & a:active {\n color: #000;\n }\n}\n","@mixin placeholder {\n &::-webkit-input-placeholder,\n &::-moz-placeholder,\n &:-ms-input-placeholder {\n @content;\n }\n}\n\n@mixin user-select($spec...) {\n -webkit-touch-callout: $spec;\n @each $prefix in -webkit-, -moz-, -ms-, '' {\n #{$prefix}user-select: $spec;\n }\n}\n\n// transition & animation\n $easeInQuad : cubic-bezier(0.550, 0.085, 0.680, 0.530);\n $easeInCubic : cubic-bezier(0.550, 0.055, 0.675, 0.190);\n $easeInQuart : cubic-bezier(0.895, 0.030, 0.685, 0.220);\n $easeInQuint : cubic-bezier(0.755, 0.050, 0.855, 0.060);\n $easeInSine : cubic-bezier(0.470, 0.000, 0.745, 0.715);\n $easeInExpo : cubic-bezier(0.950, 0.050, 0.795, 0.035);\n $easeInCirc : cubic-bezier(0.600, 0.040, 0.980, 0.335);\n $easeInBack : cubic-bezier(0.600, -0.280, 0.735, 0.045);\n\n $easeOutQuad : cubic-bezier(0.250, 0.460, 0.450, 0.940);\n $easeOutCubic : cubic-bezier(0.215, 0.610, 0.355, 1.000);\n $easeOutQuart : cubic-bezier(0.165, 0.840, 0.440, 1.000);\n $easeOutQuint : cubic-bezier(0.230, 1.000, 0.320, 1.000);\n $easeOutSine : cubic-bezier(0.390, 0.575, 0.565, 1.000);\n $easeOutExpo : cubic-bezier(0.190, 1.000, 0.220, 1.000);\n $easeOutCirc : cubic-bezier(0.075, 0.820, 0.165, 1.000);\n $easeOutBack : cubic-bezier(0.175, 0.885, 0.320, 1.275);\n\n $easeInOutQuad : cubic-bezier(0.455, 0.030, 0.515, 0.955);\n $easeInOutCubic : cubic-bezier(0.645, 0.045, 0.355, 1.000);\n $easeInOutQuart : cubic-bezier(0.770, 0.000, 0.175, 1.000);\n $easeInOutQuint : cubic-bezier(0.860, 0.000, 0.070, 1.000);\n $easeInOutSine : cubic-bezier(0.445, 0.050, 0.550, 0.950);\n $easeInOutExpo : cubic-bezier(1.000, 0.000, 0.000, 1.000);\n $easeInOutCirc : cubic-bezier(0.785, 0.135, 0.150, 0.860);\n $easeInOutBack : cubic-bezier(0.680, -0.550, 0.265, 1.550);\n\n @mixin transition($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transition: $spec;\n }\n }\n\n @mixin transition-transform($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transition: #{$prefix}transform $spec;\n }\n }\n\n @mixin transition-property($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transition-property: $spec;\n }\n }\n\n @mixin animation($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}animation: $spec;\n }\n }\n\n @mixin keyframes($name) {\n @-webkit-keyframes #{$name} { @content; }\n @keyframes #{$name} { @content; }\n }\n\n @mixin transform($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transform: $spec;\n }\n }\n\n @mixin transform-origin($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}transform-origin: $spec;\n }\n }\n\n @mixin filter($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}filter: $spec;\n }\n }\n\n// flexbox\n @mixin display-flex {\n @each $prefix in -webkit-, '' {\n display: #{$prefix}flex;\n }\n }\n @mixin flex-direction($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}flex-direction: $spec;\n }\n }\n @mixin justify-content($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}justify-content: $spec;\n }\n }\n @mixin flex($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}flex: $spec;\n }\n }\n @mixin flex-flow($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}flex-flow: $spec;\n }\n }\n @mixin flex-shrink($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}flex-shrink: $spec;\n }\n }\n @mixin align-items($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}align-items: $spec;\n }\n }\n @mixin align-self($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}align-self: $spec;\n }\n }\n @mixin order($spec...) {\n @each $prefix in -webkit-, '' {\n #{$prefix}order: $spec;\n }\n }\n @mixin max-height-max-content {\n @each $prefix in -webkit-, -moz-, '' {\n max-height: #{$prefix}max-content;\n }\n }\n @mixin max-height-min-content {\n @each $prefix in -webkit-, -moz-, '' {\n max-height: #{$prefix}max-content;\n }\n }\n @mixin min-height-min-content {\n @each $prefix in -webkit-, -moz-, '' {\n min-height: #{$prefix}min-content;\n }\n }\n @mixin min-width-min-content {\n @each $prefix in -webkit-, -moz-, '' {\n min-width: #{$prefix}min-content;\n }\n }\n",".preloader {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(#000, 0.7);\n z-index: 3;\n color: #fff;\n opacity: 0;\n font-family: sans-serif;\n\n @include display-flex;\n @include flex-flow(column);\n @include align-items(center);\n @include justify-content(center);\n\n @include transition(opacity 0.2s ease-out);\n\n &.active {\n opacity: 1;\n\n & .spinner {\n display: block;\n }\n }\n\n & .spinner {\n display: none;\n border-color: #fff;\n }\n}","@import 'utils';\n@import 'global';\n@import 'components/main-menu';\n@import 'components/preloader';\n\n.unbutton {\n display: inline-block;\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n font: inherit;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.toolbar, .main, .drop-overlay {\n display: none;\n}"]} \ No newline at end of file diff --git a/imgs/icon.png b/imgs/icon.png new file mode 100644 index 0000000..8de3421 Binary files /dev/null and b/imgs/icon.png differ diff --git a/imgs/icon.svg b/imgs/icon.svg new file mode 100644 index 0000000..4d85f7e --- /dev/null +++ b/imgs/icon.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 600 600" xmlns="http://www.w3.org/2000/svg"><title>SVGOMG \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..e8d5d7c --- /dev/null +++ b/index.html @@ -0,0 +1,3 @@ +SVGOMG - SVGO's Missing GUI

Global settings

Features

Sorry, wasn't ready…

\ No newline at end of file diff --git a/js/gzip-worker.js b/js/gzip-worker.js new file mode 100644 index 0000000..7f29606 --- /dev/null +++ b/js/gzip-worker.js @@ -0,0 +1,2 @@ +(function(){'use strict';function t(t){for(var e=t.length;0<=--e;)t[e]=0}function e(t,e,a,s,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=n,this.has_stree=t&&t.length}function a(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function n(t){return 256>t?vt[t]:vt[256+(t>>>7)]}function _(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=255&e>>>8}function i(t,e,a){t.bi_valid>dt-a?(t.bi_buf|=65535&e<>dt-t.bi_valid,t.bi_valid+=a-dt):(t.bi_buf|=65535&e<>>=1,a<<=1;while(0<--e);return a>>>1}function d(t){16===t.bi_valid?(_(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function l(t,e){var a,s,n,_,i,r,d=e.dyn_tree,l=e.max_code,h=e.stat_desc.static_tree,o=e.stat_desc.has_stree,u=e.stat_desc.extra_bits,g=e.stat_desc.extra_base,p=e.stat_desc.max_length,c=0;for(_=0;_<=rt;_++)t.bl_count[_]=0;for(d[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;ap&&(_=p,c++),d[2*s+1]=_,!(s>l))&&(t.bl_count[_]++,i=0,s>=g&&(i=u[s-g]),r=d[2*s],t.opt_len+=r*(_+i),o&&(t.static_len+=r*(h[2*s+1]+i)));if(0!=c){do{for(_=p-1;0===t.bl_count[_];)_--;t.bl_count[_]--,t.bl_count[_+1]+=2,t.bl_count[p]--,c-=2}while(0l))&&(d[2*n+1]!==_&&(t.opt_len+=(_-d[2*n+1])*d[2*n],d[2*n+1]=_),s--)}}function h(t,e,a){var _,i,n=Array(rt+1),r=0;for(_=1;_<=rt;_++)n[_]=r=r+a[_-1]<<1;for(i=0;i<=e;i++){var d=t[2*i+1];0!==d&&(t[2*i]=s(n[d]++,d))}}function o(){var t,a,n,_,i,r=Array(rt+1);for(n=0,_=0;__;_++)for(yt[_]=i,t=0;t<1<>=7;_=t;)ft[2*t+1]=8,t++,r[8]++;for(;255>=t;)ft[2*t+1]=9,t++,r[9]++;for(;279>=t;)ft[2*t+1]=7,t++,r[7]++;for(;287>=t;)ft[2*t+1]=8,t++,r[8]++;for(h(ft,st+1,r),t=0;tt.heap_len;)n=t.heap[++t.heap_len]=2>o?++o:0,_[2*n]=1,t.depth[n]=0,t.opt_len--,r&&(t.static_len-=i[2*n+1]);for(e.max_code=o,a=t.heap_len>>1;1<=a;a--)b(t,_,a);n=d;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],b(t,_,1),s=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=s,_[2*n]=_[2*a]+_[2*s],t.depth[n]=(t.depth[a]>=t.depth[s]?t.depth[a]:t.depth[s])+1,_[2*a+1]=_[2*s+1]=n,t.heap[1]=n++,b(t,_,1);while(2<=t.heap_len);t.heap[--t.heap_max]=t.heap[1],l(t,e),h(_,o,t.bl_count)}function w(t,e,a){var s,n,_=-1,i=e[1],r=0,d=7,l=4;for(0===i&&(d=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++){if(n=i,i=e[2*(s+1)+1],++r=r?t.bl_tree[2*ut]++:t.bl_tree[2*gt]++:(n!==_&&t.bl_tree[2*n]++,t.bl_tree[2*ot]++);r=0,_=n,0===i?(d=138,l=3):n===i?(d=6,l=3):(d=7,l=4)}}function v(t,e,a){var s,n,_=-1,d=e[1],l=0,h=7,o=4;for(0===d&&(h=138,o=3),s=0;s<=a;s++){if(n=d,d=e[2*(s+1)+1],++l=l?(r(t,ut,t.bl_tree),i(t,l-3,3)):(r(t,gt,t.bl_tree),i(t,l-11,7)):(n!==_&&(r(t,n,t.bl_tree),l--),r(t,ot,t.bl_tree),i(t,l-3,2));l=0,_=n,0===d?(h=138,o=3):n===d?(h=6,o=3):(h=7,o=4)}}function k(t){var e;for(w(t,t.dyn_ltree,t.l_desc.max_code),w(t,t.dyn_dtree,t.d_desc.max_code),f(t,t.bl_desc),e=_t-1;3<=e&&0===t.bl_tree[2*mt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function z(t,e,a,s){var n;for(i(t,e-257,5),i(t,a-1,5),i(t,s-4,4),n=0;n=e;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return Z;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return $;for(e=32;et.avail_out&&(a=t.avail_out);0===a||(Y.arraySet(t.output,e.pending_buf,e.pending_out,a,t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))}function j(t,e){At._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,A(t.strm)}function E(t,e){t.pending_buf[t.pending++]=e}function D(t,e){t.pending_buf[t.pending++]=255&e>>>8,t.pending_buf[t.pending++]=255&e}function I(t,e,a,s){var n=t.avail_in;return(n>s&&(n=s),0===n)?0:(t.avail_in-=n,Y.arraySet(e,t.input,t.next_in,n,a),1===t.state.wrap?t.adler=jt(t.adler,e,n,a):2===t.state.wrap&&(t.adler=Dt(t.adler,e,n,a)),t.next_in+=n,t.total_in+=n,n)}function T(t,e){var a,s,n=t.max_chain_length,_=t.strstart,i=t.prev_length,r=t.nice_match,d=t.strstart>t.w_size-ee?t.strstart-(t.w_size-ee):0,l=t.window,h=t.w_mask,o=t.prev,u=t.strstart+te,g=l[_+i-1],p=l[_+i];t.prev_length>=t.good_match&&(n>>=2),r>t.lookahead&&(r=t.lookahead);do{if(a=e,l[a+i]!==p||l[a+i-1]!==g||l[a]!==l[_]||l[++a]!==l[_+1])continue;_+=2,a++;do;while(l[++_]===l[++a]&&l[++_]===l[++a]&&l[++_]===l[++a]&&l[++_]===l[++a]&&l[++_]===l[++a]&&l[++_]===l[++a]&&l[++_]===l[++a]&&l[++_]===l[++a]&&_i){if(t.match_start=e,i=s,s>=r)break;g=l[_+i-1],p=l[_+i]}}while((e=o[e&h])>d&&0!=--n);return i<=t.lookahead?i:t.lookahead}function L(t){var e,a,s,n,_,i=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=i+(i-ee)){Y.arraySet(t.window,t.window,i,i,0),t.match_start-=i,t.strstart-=i,t.block_start-=i,a=t.hash_size,e=a;do s=t.head[--e],t.head[e]=s>=i?s-i:0;while(--a);a=i,e=a;do s=t.prev[--e],t.prev[e]=s>=i?s-i:0;while(--a);n+=i}if(0===t.strm.avail_in)break;if(a=I(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=a,t.lookahead+t.insert>=Qt)for(_=t.strstart-t.insert,t.ins_h=t.window[_],t.ins_h=(t.ins_h<=Qt&&(t.ins_h=(t.ins_h<=Qt))s=At._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;else if(s=At._tr_tally(t,t.strstart-t.match_start,t.match_length-Qt),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=Qt){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<=Qt&&(t.ins_h=(t.ins_h<=t.match_length&&(t.strategy===Nt||t.match_length===Qt&&4096=Qt&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-Qt,s=At._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-Qt),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=n&&(t.ins_h=(t.ins_h<=Qt&&0t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=Qt?(a=At._tr_tally(t,1,t.match_length-Qt),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=At._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(j(t,!1),0===t.strm.avail_out))return le}return t.insert=0,e===Mt?(j(t,!0),0===t.strm.avail_out?oe:ue):t.last_lit&&(j(t,!1),0===t.strm.avail_out)?le:he}function P(t,e){for(var a;;){if(0===t.lookahead&&(L(t),0===t.lookahead)){if(e===Lt)return le;break}if(t.match_length=0,a=At._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(j(t,!1),0===t.strm.avail_out))return le}return t.insert=0,e===Mt?(j(t,!0),0===t.strm.avail_out?oe:ue):t.last_lit&&(j(t,!1),0===t.strm.avail_out)?le:he}function K(t,e,a,s,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=n}function O(t){t.window_size=2*t.w_size,C(t.head),t.max_lazy_match=Tt[t.level].max_lazy,t.good_match=Tt[t.level].good_length,t.nice_match=Tt[t.level].nice_length,t.max_chain_length=Tt[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=Qt-1,t.match_available=0,t.ins_h=0}function N(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ut,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Y.Buf16(2*Zt),this.dyn_dtree=new Y.Buf16(2*(2*Xt+1)),this.bl_tree=new Y.Buf16(2*(2*Yt+1)),C(this.dyn_ltree),C(this.dyn_dtree),C(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Y.Buf16($t+1),this.heap=new Y.Buf16(2*Wt+1),C(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Y.Buf16(2*Wt+1),C(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function F(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=Gt,e=t.state,e.pending=0,e.pending_out=0,0>e.wrap&&(e.wrap=-e.wrap),e.status=e.wrap?ae:re,t.adler=2===e.wrap?0:1,e.last_flush=Lt,At._tr_init(e),Rt):B(t,Pt)}function J(t){var e=F(t);return e===Rt&&O(t.state),e}function G(t,e,a,n,_,i){if(!t)return Pt;var r=1;if(e===Ot&&(e=6),0>n?(r=0,n=-n):15_||_>Vt||a!==Ut||8>n||15e||9i||i>Jt)return B(t,Pt);8===n&&(n=9);var d=new N;return t.state=d,d.strm=t,d.wrap=r,d.gzhead=null,d.w_bits=n,d.w_size=1<e&&(t.subarray&&ce||!t.subarray&&pe))return X.apply(null,Y.shrinkBuf(t,e));for(var a='',s=0;se.windowBits&&(e.windowBits+=16),this.err=0,this.msg='',this.ended=!1,this.chunks=[],this.strm=new fe,this.strm.avail_out=0;var a=ge.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==ke)throw new Error(It[a]);if(e.header&&ge.deflateSetHeader(this.strm,e.header),e.dictionary){var s;if(s='string'==typeof e.dictionary?q.string2buf(e.dictionary):'[object ArrayBuffer]'===we.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=ge.deflateSetDictionary(this.strm,s),a!==ke)throw new Error(It[a]);this._dict_set=!0}}function W(t,e){var a=new V(e);if(a.push(t,!0),a.err)throw a.msg||It[a.err];return a.result}var X=String.fromCharCode,Y=function(t,e){return e={exports:{}},t(e,e.exports),e.exports}(function(t,e){function a(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var s='undefined'!=typeof Uint8Array&&'undefined'!=typeof Uint16Array&&'undefined'!=typeof Int32Array;e.assign=function(t){for(var s,e=Array.prototype.slice.call(arguments,1);e.length;)if(s=e.shift(),s){if('object'!=typeof s)throw new TypeError(s+'must be non-object');for(var n in s)a(s,n)&&(t[n]=s[n])}return t},e.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var n={arraySet:function(t,e,a,s,n){if(e.subarray&&t.subarray)return void t.set(e.subarray(a,a+s),n);for(var _=0;_>>3,_=t.static_len+3+7>>>3,_<=n&&(n=_)):n=_=a+5,a+4<=n&&-1!==e?x(t,e,a,s):t.strategy===4||_===n?(i(t,(tt<<1)+(s?1:0),3),m(t,ft,wt)):(i(t,(2<<1)+(s?1:0),3),z(t,t.l_desc.max_code+1,t.d_desc.max_code+1,r+1),m(t,t.dyn_ltree,t.dyn_dtree)),u(t),s&&g(t)},_tr_tally:function(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=255&e>>>8,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(kt[a]+at+1)]++,t.dyn_dtree[2*n(e)]++),t.last_lit===t.lit_bufsize-1},_tr_align:function(t){i(t,tt<<1,3),r(t,ht,ft),d(t)}};var jt=function(t,e,a,s){for(var _=0|65535&t,i=0|65535&t>>>16,r=0;0!==a;){r=2e3a;a++){t=a;for(var s=0;8>s;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}(),Dt=function(t,e,a,s){t^=-1;for(var n=s;n>>8^Et[255&(t^e[n])];return-1^t};var It={0:'',1:'stream end',2:'need dictionary',"-1":'file error',"-2":'stream error',"-3":'data error',"-4":'insufficient memory',"-5":'buffer error',"-6":'incompatible version'};var Tt,Lt=0,Mt=4,Ht=5,Rt=0,qt=1,Pt=-2,Kt=-5,Ot=-1,Nt=1,Ft=2,Jt=4,Gt=2,Ut=8,Vt=9,Wt=256+1+29,Xt=30,Yt=19,Zt=2*Wt+1,$t=15,Qt=3,te=258,ee=te+Qt+1,ae=42,se=69,ne=73,_e=91,ie=103,re=113,de=666,le=1,he=2,oe=3,ue=4;Tt=[new K(0,0,0,0,function(t,e){var a=65535;for(a>t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(1>=t.lookahead){if(L(t),0===t.lookahead&&e===Lt)return le;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var s=t.block_start+a;if((0===t.strstart||t.strstart>=s)&&(t.lookahead=t.strstart-s,t.strstart=s,j(t,!1),0===t.strm.avail_out))return le;if(t.strstart-t.block_start>=t.w_size-ee&&(j(t,!1),0===t.strm.avail_out))return le}return t.insert=0,e===Mt?(j(t,!0),0===t.strm.avail_out?oe:ue):t.strstart>t.block_start&&(j(t,!1),0===t.strm.avail_out)?le:le}),new K(4,4,8,4,M),new K(4,5,16,8,M),new K(4,6,32,32,M),new K(4,4,16,16,H),new K(8,16,32,32,H),new K(8,16,128,128,H),new K(8,32,128,256,H),new K(32,128,258,1024,H),new K(32,258,258,4096,H)];var ge={deflateInit:function(t,e){return G(t,e,Ut,15,8,0)},deflateInit2:G,deflateReset:J,deflateResetKeep:F,deflateSetHeader:function(t,e){return t&&t.state?2===t.state.wrap?(t.state.gzhead=e,Rt):Pt:Pt},deflate:function(t,e){var a,n,s,_;if(!t||!t.state||e>Ht||0>e)return t?B(t,Pt):Pt;if(n=t.state,!t.output||!t.input&&0!==t.avail_in||n.status===de&&e!==Mt)return B(t,0===t.avail_out?Kt:Pt);if(n.strm=t,a=n.last_flush,n.last_flush=e,n.status===ae)if(2===n.wrap)t.adler=0,E(n,31),E(n,139),E(n,8),n.gzhead?(E(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),E(n,255&n.gzhead.time),E(n,255&n.gzhead.time>>8),E(n,255&n.gzhead.time>>16),E(n,255&n.gzhead.time>>24),E(n,9===n.level?2:n.strategy>=Ft||2>n.level?4:0),E(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(E(n,255&n.gzhead.extra.length),E(n,255&n.gzhead.extra.length>>8)),n.gzhead.hcrc&&(t.adler=Dt(t.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=se):(E(n,0),E(n,0),E(n,0),E(n,0),E(n,0),E(n,9===n.level?2:n.strategy>=Ft||2>n.level?4:0),E(n,3),n.status=re);else{var i=Ut+(n.w_bits-8<<4)<<8,r=-1;r=n.strategy>=Ft||2>n.level?0:6>n.level?1:6===n.level?2:3,i|=r<<6,0!==n.strstart&&(i|=32),i+=31-i%31,n.status=re,D(n,i),0!==n.strstart&&(D(n,t.adler>>>16),D(n,65535&t.adler)),t.adler=1}if(n.status===se)if(n.gzhead.extra){for(s=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&!(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>s&&(t.adler=Dt(t.adler,n.pending_buf,n.pending-s,s)),A(t),s=n.pending,n.pending===n.pending_buf_size));)E(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>s&&(t.adler=Dt(t.adler,n.pending_buf,n.pending-s,s)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=ne)}else n.status=ne;if(n.status===ne)if(n.gzhead.name){s=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>s&&(t.adler=Dt(t.adler,n.pending_buf,n.pending-s,s)),A(t),s=n.pending,n.pending===n.pending_buf_size)){_=1;break}_=n.gzindexs&&(t.adler=Dt(t.adler,n.pending_buf,n.pending-s,s)),0===_&&(n.gzindex=0,n.status=_e)}else n.status=_e;if(n.status===_e)if(n.gzhead.comment){s=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>s&&(t.adler=Dt(t.adler,n.pending_buf,n.pending-s,s)),A(t),s=n.pending,n.pending===n.pending_buf_size)){_=1;break}_=n.gzindexs&&(t.adler=Dt(t.adler,n.pending_buf,n.pending-s,s)),0===_&&(n.status=ie)}else n.status=ie;if(n.status===ie&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&A(t),n.pending+2<=n.pending_buf_size&&(E(n,255&t.adler),E(n,255&t.adler>>8),t.adler=0,n.status=re)):n.status=re),0!==n.pending){if(A(t),0===t.avail_out)return n.last_flush=-1,Rt;}else if(0===t.avail_in&&S(e)<=S(a)&&e!==Mt)return B(t,Kt);if(n.status===de&&0!==t.avail_in)return B(t,Kt);if(0!==t.avail_in||0!==n.lookahead||e!==Lt&&n.status!==de){var d=n.strategy===Ft?P(n,e):n.strategy===3?R(n,e):Tt[n.level].func(n,e);if((d===oe||d===ue)&&(n.status=de),d===le||d===oe)return 0===t.avail_out&&(n.last_flush=-1),Rt;if(d===he&&(e===1?At._tr_align(n):e!==Ht&&(At._tr_stored_block(n,0,0,!1),e===3&&(C(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),A(t),0===t.avail_out))return n.last_flush=-1,Rt}return e===Mt?0>=n.wrap?qt:(2===n.wrap?(E(n,255&t.adler),E(n,255&t.adler>>8),E(n,255&t.adler>>16),E(n,255&t.adler>>24),E(n,255&t.total_in),E(n,255&t.total_in>>8),E(n,255&t.total_in>>16),E(n,255&t.total_in>>24)):(D(n,t.adler>>>16),D(n,65535&t.adler)),A(t),0=a.w_size&&(0===n&&(C(a.head),a.strstart=0,a.block_start=0,a.insert=0),l=new Y.Buf8(a.w_size),Y.arraySet(l,e,h-a.w_size,a.w_size,0),e=l,h=a.w_size),i=t.avail_in,r=t.next_in,d=t.input,t.avail_in=h,t.next_in=0,t.input=e,L(a);a.lookahead>=Qt;){s=a.strstart,_=a.lookahead-(Qt-1);do a.ins_h=(a.ins_h<me;me++)be[me]=252<=me?6:248<=me?5:240<=me?4:224<=me?3:192<=me?2:1;be[254]=be[254]=1;var q={string2buf:function(t){var e,a,s,n,_,i=t.length,r=0;for(n=0;na?1:2048>a?2:65536>a?3:4;for(e=new Y.Buf8(r),_=0,n=0;_a?e[_++]=a:2048>a?(e[_++]=192|a>>>6,e[_++]=128|63&a):65536>a?(e[_++]=224|a>>>12,e[_++]=128|63&a>>>6,e[_++]=128|63&a):(e[_++]=240|a>>>18,e[_++]=128|63&a>>>12,e[_++]=128|63&a>>>6,e[_++]=128|63&a);return e},buf2binstring:function(t){return U(t,t.length)},binstring2buf:function(t){for(var e=new Y.Buf8(t.length),a=0,s=e.length;an){r[s++]=n;continue}if(_=be[n],4<_){r[s++]=65533,a+=_-1;continue}for(n&=2===_?31:3===_?15:7;1<_&&an?r[s++]=n:(n-=65536,r[s++]=55296|1023&n>>10,r[s++]=56320|1023&n)}return U(r,s)},utf8border:function(t,e){var a;for(e=e||t.length,e>t.length&&(e=t.length),a=e-1;0<=a&&128==(192&t[a]);)a--;return 0>a?e:0===a?e:a+be[t[a]]>e?a:e}};var fe=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg='',this.state=null,this.data_type=2,this.adler=0};var we=Object.prototype.toString,ve=4,ke=0,ze=1,ye=2,xe=-1,Be=0,Se=8;V.prototype.push=function(t,e){var a,s,n=this.strm,_=this.options.chunkSize;if(this.ended)return!1;s=e===~~e?e:!0===e?ve:0,n.input='string'==typeof t?q.string2buf(t):'[object ArrayBuffer]'===we.call(t)?new Uint8Array(t):t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new Y.Buf8(_),n.next_out=0,n.avail_out=_),a=ge.deflate(n,s),a!==ze&&a!==ke)return this.onEnd(a),this.ended=!0,!1;(0===n.avail_out||0===n.avail_in&&(s===ve||s===ye))&&('string'===this.options.to?this.onData(q.buf2binstring(Y.shrinkBuf(n.output,n.next_out))):this.onData(Y.shrinkBuf(n.output,n.next_out)))}while((0= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar trees = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // use fallback for big arrays to avoid stack overflow\n if (len < 65537) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils = require('./utils/common');\nvar strings = require('./utils/strings');\nvar msg = require('./zlib/messages');\nvar ZStream = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_SYNC_FLUSH = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n","'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","import {gzip} from 'pako/lib/deflate';\n\nself.onmessage = function(event) {\n try {\n var result = gzip(event.data.data).buffer;\n self.postMessage({\n id: event.data.id,\n result: result\n });\n }\n catch (error) {\n self.postMessage({\n id: event.data.id,\n error: error.message\n });\n }\n};"],"names":["length","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","pending_buf","pending","bi_valid","bi_buf","bl_count","heap","heap_max","opt_len","static_len","Array","MAX_BITS","LENGTH_CODES","L_CODES","LITERALS","dyn_ltree","dyn_dtree","bl_tree","last_lit","matches","utils","arraySet","window","heap_len","depth","d_buf","l_buf","l_desc","d_desc","bl_desc","BL_CODES","msg","state","avail_out","output","pending_out","next_out","total_out","_tr_flush_block","block_start","strstart","strm","avail_in","input","next_in","wrap","adler","adler32","crc32","total_in","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","window_size","hash_size","head","insert","ins_h","hash_shift","hash_mask","match_length","_tr_tally","max_lazy_match","prev_match","strategy","match_available","good_length","max_lazy","nice_length","max_chain","func","level","status","pending_buf_size","gzhead","gzindex","method","last_flush","w_bits","hash_bits","Buf16","lit_bufsize","data_type","_tr_init","Buf8","subarray","apply","shrinkBuf","options","assign","chunkSize","windowBits","memLevel","to","raw","gzip","err","ended","chunks","zlib_deflate","deflateInit2","Error","header","deflateSetHeader","dictionary","string2buf","call","Uint8Array","deflateSetDictionary","_dict_set","push","result","String","fromCharCode","Object","prototype","hasOwnProperty","Uint16Array","Int32Array","slice","arguments","shift","TypeError","set","flattenChunks","concat","setTyped","D_CODES","HEAP_SIZE","zero","MAX_MATCH","Z_NO_FLUSH","Z_FINISH","Z_OK","Z_STREAM_END","Z_DEFAULT_COMPRESSION","Z_DEFLATED","text","hcrc","extra","name","comment","time","os","charCodeAt","_tr_align","_tr_stored_block","toString","deflate","onEnd","onData","buf2binstring","deflateEnd","join","self","onmessage","data","buffer","postMessage","id","error","message"],"mappings":"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","preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi90cmVlcy5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9kZWZsYXRlLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9zdHJpbmdzLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL25vZGVfbW9kdWxlcy9wYWtvL2xpYi9kZWZsYXRlLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL25vZGVfbW9kdWxlcy9wYWtvL2xpYi91dGlscy9jb21tb24uanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvbm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvYWRsZXIzMi5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jcmMzMi5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9tZXNzYWdlcy5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9ub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi96c3RyZWFtLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9nemlwLXdvcmtlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvY29tbW9uJyk7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8vdmFyIFpfRklMVEVSRUQgICAgICAgICAgPSAxO1xuLy92YXIgWl9IVUZGTUFOX09OTFkgICAgICA9IDI7XG4vL3ZhciBaX1JMRSAgICAgICAgICAgICAgID0gMztcbnZhciBaX0ZJWEVEICAgICAgICAgICAgICAgPSA0O1xuLy92YXIgWl9ERUZBVUxUX1NUUkFURUdZICA9IDA7XG5cbi8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbnZhciBaX0JJTkFSWSAgICAgICAgICAgICAgPSAwO1xudmFyIFpfVEVYVCAgICAgICAgICAgICAgICA9IDE7XG4vL3ZhciBaX0FTQ0lJICAgICAgICAgICAgID0gMTsgLy8gPSBaX1RFWFRcbnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyO1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbmZ1bmN0aW9uIHplcm8oYnVmKSB7IHZhciBsZW4gPSBidWYubGVuZ3RoOyB3aGlsZSAoLS1sZW4gPj0gMCkgeyBidWZbbGVuXSA9IDA7IH0gfVxuXG4vLyBGcm9tIHp1dGlsLmhcblxudmFyIFNUT1JFRF9CTE9DSyA9IDA7XG52YXIgU1RBVElDX1RSRUVTID0gMTtcbnZhciBEWU5fVFJFRVMgICAgPSAyO1xuLyogVGhlIHRocmVlIGtpbmRzIG9mIGJsb2NrIHR5cGUgKi9cblxudmFyIE1JTl9NQVRDSCAgICA9IDM7XG52YXIgTUFYX01BVENIICAgID0gMjU4O1xuLyogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbWF0Y2ggbGVuZ3RocyAqL1xuXG4vLyBGcm9tIGRlZmxhdGUuaFxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS5cbiAqL1xuXG52YXIgTEVOR1RIX0NPREVTICA9IDI5O1xuLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovXG5cbnZhciBMSVRFUkFMUyAgICAgID0gMjU2O1xuLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovXG5cbnZhciBMX0NPREVTICAgICAgID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTO1xuLyogbnVtYmVyIG9mIExpdGVyYWwgb3IgTGVuZ3RoIGNvZGVzLCBpbmNsdWRpbmcgdGhlIEVORF9CTE9DSyBjb2RlICovXG5cbnZhciBEX0NPREVTICAgICAgID0gMzA7XG4vKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi9cblxudmFyIEJMX0NPREVTICAgICAgPSAxOTtcbi8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqL1xuXG52YXIgSEVBUF9TSVpFICAgICA9IDIgKiBMX0NPREVTICsgMTtcbi8qIG1heGltdW0gaGVhcCBzaXplICovXG5cbnZhciBNQVhfQklUUyAgICAgID0gMTU7XG4vKiBBbGwgY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi9cblxudmFyIEJ1Zl9zaXplICAgICAgPSAxNjtcbi8qIHNpemUgb2YgYml0IGJ1ZmZlciBpbiBiaV9idWYgKi9cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0YW50c1xuICovXG5cbnZhciBNQVhfQkxfQklUUyA9IDc7XG4vKiBCaXQgbGVuZ3RoIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQkxfQklUUyBiaXRzICovXG5cbnZhciBFTkRfQkxPQ0sgICA9IDI1Njtcbi8qIGVuZCBvZiBibG9jayBsaXRlcmFsIGNvZGUgKi9cblxudmFyIFJFUF8zXzYgICAgID0gMTY7XG4vKiByZXBlYXQgcHJldmlvdXMgYml0IGxlbmd0aCAzLTYgdGltZXMgKDIgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbnZhciBSRVBaXzNfMTAgICA9IDE3O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMy0xMCB0aW1lcyAgKDMgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbnZhciBSRVBaXzExXzEzOCA9IDE4O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMTEtMTM4IHRpbWVzICAoNyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi9cblxuLyogZXNsaW50LWRpc2FibGUgY29tbWEtc3BhY2luZyxhcnJheS1icmFja2V0LXNwYWNpbmcgKi9cbnZhciBleHRyYV9sYml0cyA9ICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBsZW5ndGggY29kZSAqL1xuICBbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXTtcblxudmFyIGV4dHJhX2RiaXRzID0gICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGRpc3RhbmNlIGNvZGUgKi9cbiAgWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdO1xuXG52YXIgZXh0cmFfYmxiaXRzID0gIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggYml0IGxlbmd0aCBjb2RlICovXG4gIFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XTtcblxudmFyIGJsX29yZGVyID1cbiAgWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO1xuLyogZXNsaW50LWVuYWJsZSBjb21tYS1zcGFjaW5nLGFycmF5LWJyYWNrZXQtc3BhY2luZyAqL1xuXG4vKiBUaGUgbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcyBhcmUgc2VudCBpbiBvcmRlciBvZiBkZWNyZWFzaW5nXG4gKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy5cbiAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuXG4gKi9cblxuLy8gV2UgcHJlLWZpbGwgYXJyYXlzIHdpdGggMCB0byBhdm9pZCB1bmluaXRpYWxpemVkIGdhcHNcblxudmFyIERJU1RfQ09ERV9MRU4gPSA1MTI7IC8qIHNlZSBkZWZpbml0aW9uIG9mIGFycmF5IGRpc3RfY29kZSBiZWxvdyAqL1xuXG4vLyAhISEhIFVzZSBmbGF0IGFycmF5IGluc3RlYWQgb2Ygc3RydWN0dXJlLCBGcmVxID0gaSoyLCBMZW4gPSBpKjIrMVxudmFyIHN0YXRpY19sdHJlZSAgPSBuZXcgQXJyYXkoKExfQ09ERVMgKyAyKSAqIDIpO1xuemVybyhzdGF0aWNfbHRyZWUpO1xuLyogVGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUuIFNpbmNlIHRoZSBiaXQgbGVuZ3RocyBhcmUgaW1wb3NlZCwgdGhlcmUgaXMgbm9cbiAqIG5lZWQgZm9yIHRoZSBMX0NPREVTIGV4dHJhIGNvZGVzIHVzZWQgZHVyaW5nIGhlYXAgY29uc3RydWN0aW9uLiBIb3dldmVyXG4gKiBUaGUgY29kZXMgMjg2IGFuZCAyODcgYXJlIG5lZWRlZCB0byBidWlsZCBhIGNhbm9uaWNhbCB0cmVlIChzZWUgX3RyX2luaXRcbiAqIGJlbG93KS5cbiAqL1xuXG52YXIgc3RhdGljX2R0cmVlICA9IG5ldyBBcnJheShEX0NPREVTICogMik7XG56ZXJvKHN0YXRpY19kdHJlZSk7XG4vKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUuIChBY3R1YWxseSBhIHRyaXZpYWwgdHJlZSBzaW5jZSBhbGwgY29kZXMgdXNlXG4gKiA1IGJpdHMuKVxuICovXG5cbnZhciBfZGlzdF9jb2RlICAgID0gbmV3IEFycmF5KERJU1RfQ09ERV9MRU4pO1xuemVybyhfZGlzdF9jb2RlKTtcbi8qIERpc3RhbmNlIGNvZGVzLiBUaGUgZmlyc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBkaXN0YW5jZXNcbiAqIDMgLi4gMjU4LCB0aGUgbGFzdCAyNTYgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIHRvcCA4IGJpdHMgb2ZcbiAqIHRoZSAxNSBiaXQgZGlzdGFuY2VzLlxuICovXG5cbnZhciBfbGVuZ3RoX2NvZGUgID0gbmV3IEFycmF5KE1BWF9NQVRDSCAtIE1JTl9NQVRDSCArIDEpO1xuemVybyhfbGVuZ3RoX2NvZGUpO1xuLyogbGVuZ3RoIGNvZGUgZm9yIGVhY2ggbm9ybWFsaXplZCBtYXRjaCBsZW5ndGggKDAgPT0gTUlOX01BVENIKSAqL1xuXG52YXIgYmFzZV9sZW5ndGggICA9IG5ldyBBcnJheShMRU5HVEhfQ09ERVMpO1xuemVybyhiYXNlX2xlbmd0aCk7XG4vKiBGaXJzdCBub3JtYWxpemVkIGxlbmd0aCBmb3IgZWFjaCBjb2RlICgwID0gTUlOX01BVENIKSAqL1xuXG52YXIgYmFzZV9kaXN0ICAgICA9IG5ldyBBcnJheShEX0NPREVTKTtcbnplcm8oYmFzZV9kaXN0KTtcbi8qIEZpcnN0IG5vcm1hbGl6ZWQgZGlzdGFuY2UgZm9yIGVhY2ggY29kZSAoMCA9IGRpc3RhbmNlIG9mIDEpICovXG5cblxuZnVuY3Rpb24gU3RhdGljVHJlZURlc2Moc3RhdGljX3RyZWUsIGV4dHJhX2JpdHMsIGV4dHJhX2Jhc2UsIGVsZW1zLCBtYXhfbGVuZ3RoKSB7XG5cbiAgdGhpcy5zdGF0aWNfdHJlZSAgPSBzdGF0aWNfdHJlZTsgIC8qIHN0YXRpYyB0cmVlIG9yIE5VTEwgKi9cbiAgdGhpcy5leHRyYV9iaXRzICAgPSBleHRyYV9iaXRzOyAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggY29kZSBvciBOVUxMICovXG4gIHRoaXMuZXh0cmFfYmFzZSAgID0gZXh0cmFfYmFzZTsgICAvKiBiYXNlIGluZGV4IGZvciBleHRyYV9iaXRzICovXG4gIHRoaXMuZWxlbXMgICAgICAgID0gZWxlbXM7ICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlICovXG4gIHRoaXMubWF4X2xlbmd0aCAgID0gbWF4X2xlbmd0aDsgICAvKiBtYXggYml0IGxlbmd0aCBmb3IgdGhlIGNvZGVzICovXG5cbiAgLy8gc2hvdyBpZiBgc3RhdGljX3RyZWVgIGhhcyBkYXRhIG9yIGR1bW15IC0gbmVlZGVkIGZvciBtb25vbW9ycGhpYyBvYmplY3RzXG4gIHRoaXMuaGFzX3N0cmVlICAgID0gc3RhdGljX3RyZWUgJiYgc3RhdGljX3RyZWUubGVuZ3RoO1xufVxuXG5cbnZhciBzdGF0aWNfbF9kZXNjO1xudmFyIHN0YXRpY19kX2Rlc2M7XG52YXIgc3RhdGljX2JsX2Rlc2M7XG5cblxuZnVuY3Rpb24gVHJlZURlc2MoZHluX3RyZWUsIHN0YXRfZGVzYykge1xuICB0aGlzLmR5bl90cmVlID0gZHluX3RyZWU7ICAgICAvKiB0aGUgZHluYW1pYyB0cmVlICovXG4gIHRoaXMubWF4X2NvZGUgPSAwOyAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuICB0aGlzLnN0YXRfZGVzYyA9IHN0YXRfZGVzYzsgICAvKiB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdHJlZSAqL1xufVxuXG5cblxuZnVuY3Rpb24gZF9jb2RlKGRpc3QpIHtcbiAgcmV0dXJuIGRpc3QgPCAyNTYgPyBfZGlzdF9jb2RlW2Rpc3RdIDogX2Rpc3RfY29kZVsyNTYgKyAoZGlzdCA+Pj4gNyldO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogT3V0cHV0IGEgc2hvcnQgTFNCIGZpcnN0IG9uIHRoZSBzdHJlYW0uXG4gKiBJTiBhc3NlcnRpb246IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHBlbmRpbmdCdWYuXG4gKi9cbmZ1bmN0aW9uIHB1dF9zaG9ydChzLCB3KSB7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodykgJiAweGZmKSk7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodXNoKSh3KSA+PiA4KSk7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKHcpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAodyA+Pj4gOCkgJiAweGZmO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuXG4gKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBsZW5ndGggYml0cy5cbiAqL1xuZnVuY3Rpb24gc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPiAoQnVmX3NpemUgLSBsZW5ndGgpKSB7XG4gICAgcy5iaV9idWYgfD0gKHZhbHVlIDw8IHMuYmlfdmFsaWQpICYgMHhmZmZmO1xuICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7XG4gICAgcy5iaV9idWYgPSB2YWx1ZSA+PiAoQnVmX3NpemUgLSBzLmJpX3ZhbGlkKTtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aCAtIEJ1Zl9zaXplO1xuICB9IGVsc2Uge1xuICAgIHMuYmlfYnVmIHw9ICh2YWx1ZSA8PCBzLmJpX3ZhbGlkKSAmIDB4ZmZmZjtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHNlbmRfY29kZShzLCBjLCB0cmVlKSB7XG4gIHNlbmRfYml0cyhzLCB0cmVlW2MgKiAyXS8qLkNvZGUqLywgdHJlZVtjICogMiArIDFdLyouTGVuKi8pO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmV2ZXJzZSB0aGUgZmlyc3QgbGVuIGJpdHMgb2YgYSBjb2RlLCB1c2luZyBzdHJhaWdodGZvcndhcmQgY29kZSAoYSBmYXN0ZXJcbiAqIG1ldGhvZCB3b3VsZCB1c2UgYSB0YWJsZSlcbiAqIElOIGFzc2VydGlvbjogMSA8PSBsZW4gPD0gMTVcbiAqL1xuZnVuY3Rpb24gYmlfcmV2ZXJzZShjb2RlLCBsZW4pIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGRvIHtcbiAgICByZXMgfD0gY29kZSAmIDE7XG4gICAgY29kZSA+Pj49IDE7XG4gICAgcmVzIDw8PSAxO1xuICB9IHdoaWxlICgtLWxlbiA+IDApO1xuICByZXR1cm4gcmVzID4+PiAxO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIsIGtlZXBpbmcgYXQgbW9zdCA3IGJpdHMgaW4gaXQuXG4gKi9cbmZ1bmN0aW9uIGJpX2ZsdXNoKHMpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPT09IDE2KSB7XG4gICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTtcbiAgICBzLmJpX2J1ZiA9IDA7XG4gICAgcy5iaV92YWxpZCA9IDA7XG5cbiAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID49IDgpIHtcbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmICYgMHhmZjtcbiAgICBzLmJpX2J1ZiA+Pj0gODtcbiAgICBzLmJpX3ZhbGlkIC09IDg7XG4gIH1cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgZm9yIGEgdHJlZSBhbmQgdXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoXG4gKiBmb3IgdGhlIGN1cnJlbnQgYmxvY2suXG4gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQsIGhlYXBbaGVhcF9tYXhdIGFuZFxuICogICAgYWJvdmUgYXJlIHRoZSB0cmVlIG5vZGVzIHNvcnRlZCBieSBpbmNyZWFzaW5nIGZyZXF1ZW5jeS5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGQgbGVuIGlzIHNldCB0byB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RoLCB0aGVcbiAqICAgICBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgZnJlcXVlbmNpZXMgZm9yIGVhY2ggYml0IGxlbmd0aC5cbiAqICAgICBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpcyBhbHNvIHVwZGF0ZWQgaWYgc3RyZWUgaXNcbiAqICAgICBub3QgbnVsbC5cbiAqL1xuZnVuY3Rpb24gZ2VuX2JpdGxlbihzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgICAgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgICAgICAgID0gZGVzYy5keW5fdHJlZTtcbiAgdmFyIG1heF9jb2RlICAgICAgICA9IGRlc2MubWF4X2NvZGU7XG4gIHZhciBzdHJlZSAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGV4dHJhICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHM7XG4gIHZhciBiYXNlICAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iYXNlO1xuICB2YXIgbWF4X2xlbmd0aCAgICAgID0gZGVzYy5zdGF0X2Rlc2MubWF4X2xlbmd0aDtcbiAgdmFyIGg7ICAgICAgICAgICAgICAvKiBoZWFwIGluZGV4ICovXG4gIHZhciBuLCBtOyAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBiaXRzOyAgICAgICAgICAgLyogYml0IGxlbmd0aCAqL1xuICB2YXIgeGJpdHM7ICAgICAgICAgIC8qIGV4dHJhIGJpdHMgKi9cbiAgdmFyIGY7ICAgICAgICAgICAgICAvKiBmcmVxdWVuY3kgKi9cbiAgdmFyIG92ZXJmbG93ID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBiaXQgbGVuZ3RoIHRvbyBsYXJnZSAqL1xuXG4gIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIHMuYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgLyogSW4gYSBmaXJzdCBwYXNzLCBjb21wdXRlIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhzICh3aGljaCBtYXlcbiAgICogb3ZlcmZsb3cgaW4gdGhlIGNhc2Ugb2YgdGhlIGJpdCBsZW5ndGggdHJlZSkuXG4gICAqL1xuICB0cmVlW3MuaGVhcFtzLmhlYXBfbWF4XSAqIDIgKyAxXS8qLkxlbiovID0gMDsgLyogcm9vdCBvZiB0aGUgaGVhcCAqL1xuXG4gIGZvciAoaCA9IHMuaGVhcF9tYXggKyAxOyBoIDwgSEVBUF9TSVpFOyBoKyspIHtcbiAgICBuID0gcy5oZWFwW2hdO1xuICAgIGJpdHMgPSB0cmVlW3RyZWVbbiAqIDIgKyAxXS8qLkRhZCovICogMiArIDFdLyouTGVuKi8gKyAxO1xuICAgIGlmIChiaXRzID4gbWF4X2xlbmd0aCkge1xuICAgICAgYml0cyA9IG1heF9sZW5ndGg7XG4gICAgICBvdmVyZmxvdysrO1xuICAgIH1cbiAgICB0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IGJpdHM7XG4gICAgLyogV2Ugb3ZlcndyaXRlIHRyZWVbbl0uRGFkIHdoaWNoIGlzIG5vIGxvbmdlciBuZWVkZWQgKi9cblxuICAgIGlmIChuID4gbWF4X2NvZGUpIHsgY29udGludWU7IH0gLyogbm90IGEgbGVhZiBub2RlICovXG5cbiAgICBzLmJsX2NvdW50W2JpdHNdKys7XG4gICAgeGJpdHMgPSAwO1xuICAgIGlmIChuID49IGJhc2UpIHtcbiAgICAgIHhiaXRzID0gZXh0cmFbbiAtIGJhc2VdO1xuICAgIH1cbiAgICBmID0gdHJlZVtuICogMl0vKi5GcmVxKi87XG4gICAgcy5vcHRfbGVuICs9IGYgKiAoYml0cyArIHhiaXRzKTtcbiAgICBpZiAoaGFzX3N0cmVlKSB7XG4gICAgICBzLnN0YXRpY19sZW4gKz0gZiAqIChzdHJlZVtuICogMiArIDFdLyouTGVuKi8gKyB4Yml0cyk7XG4gICAgfVxuICB9XG4gIGlmIChvdmVyZmxvdyA9PT0gMCkgeyByZXR1cm47IH1cblxuICAvLyBUcmFjZSgoc3RkZXJyLFwiXFxuYml0IGxlbmd0aCBvdmVyZmxvd1xcblwiKSk7XG4gIC8qIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSBvbiBvYmoyIGFuZCBwaWMgb2YgdGhlIENhbGdhcnkgY29ycHVzICovXG5cbiAgLyogRmluZCB0aGUgZmlyc3QgYml0IGxlbmd0aCB3aGljaCBjb3VsZCBpbmNyZWFzZTogKi9cbiAgZG8ge1xuICAgIGJpdHMgPSBtYXhfbGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAocy5ibF9jb3VudFtiaXRzXSA9PT0gMCkgeyBiaXRzLS07IH1cbiAgICBzLmJsX2NvdW50W2JpdHNdLS07ICAgICAgLyogbW92ZSBvbmUgbGVhZiBkb3duIHRoZSB0cmVlICovXG4gICAgcy5ibF9jb3VudFtiaXRzICsgMV0gKz0gMjsgLyogbW92ZSBvbmUgb3ZlcmZsb3cgaXRlbSBhcyBpdHMgYnJvdGhlciAqL1xuICAgIHMuYmxfY291bnRbbWF4X2xlbmd0aF0tLTtcbiAgICAvKiBUaGUgYnJvdGhlciBvZiB0aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVwIHVwLFxuICAgICAqIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVjdCBibF9jb3VudFttYXhfbGVuZ3RoXVxuICAgICAqL1xuICAgIG92ZXJmbG93IC09IDI7XG4gIH0gd2hpbGUgKG92ZXJmbG93ID4gMCk7XG5cbiAgLyogTm93IHJlY29tcHV0ZSBhbGwgYml0IGxlbmd0aHMsIHNjYW5uaW5nIGluIGluY3JlYXNpbmcgZnJlcXVlbmN5LlxuICAgKiBoIGlzIHN0aWxsIGVxdWFsIHRvIEhFQVBfU0laRS4gKEl0IGlzIHNpbXBsZXIgdG8gcmVjb25zdHJ1Y3QgYWxsXG4gICAqIGxlbmd0aHMgaW5zdGVhZCBvZiBmaXhpbmcgb25seSB0aGUgd3Jvbmcgb25lcy4gVGhpcyBpZGVhIGlzIHRha2VuXG4gICAqIGZyb20gJ2FyJyB3cml0dGVuIGJ5IEhhcnVoaWtvIE9rdW11cmEuKVxuICAgKi9cbiAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPT0gMDsgYml0cy0tKSB7XG4gICAgbiA9IHMuYmxfY291bnRbYml0c107XG4gICAgd2hpbGUgKG4gIT09IDApIHtcbiAgICAgIG0gPSBzLmhlYXBbLS1oXTtcbiAgICAgIGlmIChtID4gbWF4X2NvZGUpIHsgY29udGludWU7IH1cbiAgICAgIGlmICh0cmVlW20gKiAyICsgMV0vKi5MZW4qLyAhPT0gYml0cykge1xuICAgICAgICAvLyBUcmFjZSgoc3RkZXJyLFwiY29kZSAlZCBiaXRzICVkLT4lZFxcblwiLCBtLCB0cmVlW21dLkxlbiwgYml0cykpO1xuICAgICAgICBzLm9wdF9sZW4gKz0gKGJpdHMgLSB0cmVlW20gKiAyICsgMV0vKi5MZW4qLykgKiB0cmVlW20gKiAyXS8qLkZyZXEqLztcbiAgICAgICAgdHJlZVttICogMiArIDFdLyouTGVuKi8gPSBiaXRzO1xuICAgICAgfVxuICAgICAgbi0tO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogR2VuZXJhdGUgdGhlIGNvZGVzIGZvciBhIGdpdmVuIHRyZWUgYW5kIGJpdCBjb3VudHMgKHdoaWNoIG5lZWQgbm90IGJlXG4gKiBvcHRpbWFsKS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGFycmF5IGJsX2NvdW50IGNvbnRhaW5zIHRoZSBiaXQgbGVuZ3RoIHN0YXRpc3RpY3MgZm9yXG4gKiB0aGUgZ2l2ZW4gdHJlZSBhbmQgdGhlIGZpZWxkIGxlbiBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzLlxuICogT1VUIGFzc2VydGlvbjogdGhlIGZpZWxkIGNvZGUgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cyBvZiBub25cbiAqICAgICB6ZXJvIGNvZGUgbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIGJsX2NvdW50KVxuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAgICAgICAgICAgLyogdGhlIHRyZWUgdG8gZGVjb3JhdGUgKi9cbi8vICAgIGludCBtYXhfY29kZTsgICAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuLy8gICAgdXNoZiAqYmxfY291bnQ7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqL1xue1xuICB2YXIgbmV4dF9jb2RlID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7IC8qIG5leHQgY29kZSB2YWx1ZSBmb3IgZWFjaCBiaXQgbGVuZ3RoICovXG4gIHZhciBjb2RlID0gMDsgICAgICAgICAgICAgIC8qIHJ1bm5pbmcgY29kZSB2YWx1ZSAqL1xuICB2YXIgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi9cbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBpbmRleCAqL1xuXG4gIC8qIFRoZSBkaXN0cmlidXRpb24gY291bnRzIGFyZSBmaXJzdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHZhbHVlc1xuICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC5cbiAgICovXG4gIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIG5leHRfY29kZVtiaXRzXSA9IGNvZGUgPSAoY29kZSArIGJsX2NvdW50W2JpdHMgLSAxXSkgPDwgMTtcbiAgfVxuICAvKiBDaGVjayB0aGF0IHRoZSBiaXQgY291bnRzIGluIGJsX2NvdW50IGFyZSBjb25zaXN0ZW50LiBUaGUgbGFzdCBjb2RlXG4gICAqIG11c3QgYmUgYWxsIG9uZXMuXG4gICAqL1xuICAvL0Fzc2VydCAoY29kZSArIGJsX2NvdW50W01BWF9CSVRTXS0xID09ICgxPDxNQVhfQklUUyktMSxcbiAgLy8gICAgICAgIFwiaW5jb25zaXN0ZW50IGJpdCBjb3VudHNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsXCJcXG5nZW5fY29kZXM6IG1heF9jb2RlICVkIFwiLCBtYXhfY29kZSkpO1xuXG4gIGZvciAobiA9IDA7ICBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICB2YXIgbGVuID0gdHJlZVtuICogMiArIDFdLyouTGVuKi87XG4gICAgaWYgKGxlbiA9PT0gMCkgeyBjb250aW51ZTsgfVxuICAgIC8qIE5vdyByZXZlcnNlIHRoZSBiaXRzICovXG4gICAgdHJlZVtuICogMl0vKi5Db2RlKi8gPSBiaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7XG5cbiAgICAvL1RyYWNlY3YodHJlZSAhPSBzdGF0aWNfbHRyZWUsIChzdGRlcnIsXCJcXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpIFwiLFxuICAgIC8vICAgICBuLCAoaXNncmFwaChuKSA/IG4gOiAnICcpLCBsZW4sIHRyZWVbbl0uQ29kZSwgbmV4dF9jb2RlW2xlbl0tMSkpO1xuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB2YXJpb3VzICdjb25zdGFudCcgdGFibGVzLlxuICovXG5mdW5jdGlvbiB0cl9zdGF0aWNfaW5pdCgpIHtcbiAgdmFyIG47ICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi9cbiAgdmFyIGJpdHM7ICAgICAvKiBiaXQgY291bnRlciAqL1xuICB2YXIgbGVuZ3RoOyAgIC8qIGxlbmd0aCB2YWx1ZSAqL1xuICB2YXIgY29kZTsgICAgIC8qIGNvZGUgdmFsdWUgKi9cbiAgdmFyIGRpc3Q7ICAgICAvKiBkaXN0YW5jZSBpbmRleCAqL1xuICB2YXIgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMgKyAxKTtcbiAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCBmb3IgYW4gb3B0aW1hbCB0cmVlICovXG5cbiAgLy8gZG8gY2hlY2sgaW4gX3RyX2luaXQoKVxuICAvL2lmIChzdGF0aWNfaW5pdF9kb25lKSByZXR1cm47XG5cbiAgLyogRm9yIHNvbWUgZW1iZWRkZWQgdGFyZ2V0cywgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm90IGluaXRpYWxpemVkOiAqL1xuLyojaWZkZWYgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlNcbiAgc3RhdGljX2xfZGVzYy5zdGF0aWNfdHJlZSA9IHN0YXRpY19sdHJlZTtcbiAgc3RhdGljX2xfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfbGJpdHM7XG4gIHN0YXRpY19kX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfZHRyZWU7XG4gIHN0YXRpY19kX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2RiaXRzO1xuICBzdGF0aWNfYmxfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfYmxiaXRzO1xuI2VuZGlmKi9cblxuICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGxlbmd0aCAoMC4uMjU1KSAtPiBsZW5ndGggY29kZSAoMC4uMjgpICovXG4gIGxlbmd0aCA9IDA7XG4gIGZvciAoY29kZSA9IDA7IGNvZGUgPCBMRU5HVEhfQ09ERVMgLSAxOyBjb2RlKyspIHtcbiAgICBiYXNlX2xlbmd0aFtjb2RlXSA9IGxlbmd0aDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgZXh0cmFfbGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSBjb2RlO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAobGVuZ3RoID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogbGVuZ3RoICE9IDI1NlwiKTtcbiAgLyogTm90ZSB0aGF0IHRoZSBsZW5ndGggMjU1IChtYXRjaCBsZW5ndGggMjU4KSBjYW4gYmUgcmVwcmVzZW50ZWRcbiAgICogaW4gdHdvIGRpZmZlcmVudCB3YXlzOiBjb2RlIDI4NCArIDUgYml0cyBvciBjb2RlIDI4NSwgc28gd2VcbiAgICogb3ZlcndyaXRlIGxlbmd0aF9jb2RlWzI1NV0gdG8gdXNlIHRoZSBiZXN0IGVuY29kaW5nOlxuICAgKi9cbiAgX2xlbmd0aF9jb2RlW2xlbmd0aCAtIDFdID0gY29kZTtcblxuICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGRpc3QgKDAuLjMySykgLT4gZGlzdCBjb2RlICgwLi4yOSkgKi9cbiAgZGlzdCA9IDA7XG4gIGZvciAoY29kZSA9IDA7IGNvZGUgPCAxNjsgY29kZSsrKSB7XG4gICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgZXh0cmFfZGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogZGlzdCAhPSAyNTZcIik7XG4gIGRpc3QgPj49IDc7IC8qIGZyb20gbm93IG9uLCBhbGwgZGlzdGFuY2VzIGFyZSBkaXZpZGVkIGJ5IDEyOCAqL1xuICBmb3IgKDsgY29kZSA8IERfQ09ERVM7IGNvZGUrKykge1xuICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3QgPDwgNztcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgKGV4dHJhX2RiaXRzW2NvZGVdIC0gNykpOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyXCIpO1xuXG4gIC8qIENvbnN0cnVjdCB0aGUgY29kZXMgb2YgdGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUgKi9cbiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7XG4gICAgYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgbiA9IDA7XG4gIHdoaWxlIChuIDw9IDE0Mykge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA4O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs4XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI1NSkge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA5O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs5XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI3OSkge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA3O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs3XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI4Nykge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA4O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs4XSsrO1xuICB9XG4gIC8qIENvZGVzIDI4NiBhbmQgMjg3IGRvIG5vdCBleGlzdCwgYnV0IHdlIG11c3QgaW5jbHVkZSB0aGVtIGluIHRoZVxuICAgKiB0cmVlIGNvbnN0cnVjdGlvbiB0byBnZXQgYSBjYW5vbmljYWwgSHVmZm1hbiB0cmVlIChsb25nZXN0IGNvZGVcbiAgICogYWxsIG9uZXMpXG4gICAqL1xuICBnZW5fY29kZXMoc3RhdGljX2x0cmVlLCBMX0NPREVTICsgMSwgYmxfY291bnQpO1xuXG4gIC8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZSBpcyB0cml2aWFsOiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDU7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyXS8qLkNvZGUqLyA9IGJpX3JldmVyc2UobiwgNSk7XG4gIH1cblxuICAvLyBOb3cgZGF0YSByZWFkeSBhbmQgd2UgY2FuIGluaXQgc3RhdGljIHRyZWVzXG4gIHN0YXRpY19sX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2x0cmVlLCBleHRyYV9sYml0cywgTElURVJBTFMgKyAxLCBMX0NPREVTLCBNQVhfQklUUyk7XG4gIHN0YXRpY19kX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgICAgICAgICAgRF9DT0RFUywgTUFYX0JJVFMpO1xuICBzdGF0aWNfYmxfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhuZXcgQXJyYXkoMCksIGV4dHJhX2JsYml0cywgMCwgICAgICAgICBCTF9DT0RFUywgTUFYX0JMX0JJVFMpO1xuXG4gIC8vc3RhdGljX2luaXRfZG9uZSA9IHRydWU7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIGEgbmV3IGJsb2NrLlxuICovXG5mdW5jdGlvbiBpbml0X2Jsb2NrKHMpIHtcbiAgdmFyIG47IC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBlbGVtZW50cyAqL1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIHRyZWVzLiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgTF9DT0RFUzsgIG4rKykgeyBzLmR5bl9sdHJlZVtuICogMl0vKi5GcmVxKi8gPSAwOyB9XG4gIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyAgbisrKSB7IHMuZHluX2R0cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cbiAgZm9yIChuID0gMDsgbiA8IEJMX0NPREVTOyBuKyspIHsgcy5ibF90cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cblxuICBzLmR5bl9sdHJlZVtFTkRfQkxPQ0sgKiAyXS8qLkZyZXEqLyA9IDE7XG4gIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7XG4gIHMubGFzdF9saXQgPSBzLm1hdGNoZXMgPSAwO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIgYW5kIGFsaWduIHRoZSBvdXRwdXQgb24gYSBieXRlIGJvdW5kYXJ5XG4gKi9cbmZ1bmN0aW9uIGJpX3dpbmR1cChzKVxue1xuICBpZiAocy5iaV92YWxpZCA+IDgpIHtcbiAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpO1xuICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPiAwKSB7XG4gICAgLy9wdXRfYnl0ZShzLCAoQnl0ZSlzLT5iaV9idWYpO1xuICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWY7XG4gIH1cbiAgcy5iaV9idWYgPSAwO1xuICBzLmJpX3ZhbGlkID0gMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5IGEgc3RvcmVkIGJsb2NrLCBzdG9yaW5nIGZpcnN0IHRoZSBsZW5ndGggYW5kIGl0c1xuICogb25lJ3MgY29tcGxlbWVudCBpZiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNvcHlfYmxvY2socywgYnVmLCBsZW4sIGhlYWRlcilcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAgICAqYnVmOyAgICAvKiB0aGUgaW5wdXQgZGF0YSAqL1xuLy91bnNpZ25lZCBsZW47ICAgICAvKiBpdHMgbGVuZ3RoICovXG4vL2ludCAgICAgIGhlYWRlcjsgIC8qIHRydWUgaWYgYmxvY2sgaGVhZGVyIG11c3QgYmUgd3JpdHRlbiAqL1xue1xuICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovXG5cbiAgaWYgKGhlYWRlcikge1xuICAgIHB1dF9zaG9ydChzLCBsZW4pO1xuICAgIHB1dF9zaG9ydChzLCB+bGVuKTtcbiAgfVxuLy8gIHdoaWxlIChsZW4tLSkge1xuLy8gICAgcHV0X2J5dGUocywgKmJ1ZisrKTtcbi8vICB9XG4gIHV0aWxzLmFycmF5U2V0KHMucGVuZGluZ19idWYsIHMud2luZG93LCBidWYsIGxlbiwgcy5wZW5kaW5nKTtcbiAgcy5wZW5kaW5nICs9IGxlbjtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb21wYXJlcyB0byBzdWJ0cmVlcywgdXNpbmcgdGhlIHRyZWUgZGVwdGggYXMgdGllIGJyZWFrZXIgd2hlblxuICogdGhlIHN1YnRyZWVzIGhhdmUgZXF1YWwgZnJlcXVlbmN5LiBUaGlzIG1pbmltaXplcyB0aGUgd29yc3QgY2FzZSBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIHNtYWxsZXIodHJlZSwgbiwgbSwgZGVwdGgpIHtcbiAgdmFyIF9uMiA9IG4gKiAyO1xuICB2YXIgX20yID0gbSAqIDI7XG4gIHJldHVybiAodHJlZVtfbjJdLyouRnJlcSovIDwgdHJlZVtfbTJdLyouRnJlcSovIHx8XG4gICAgICAgICAodHJlZVtfbjJdLyouRnJlcSovID09PSB0cmVlW19tMl0vKi5GcmVxKi8gJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV0pKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZXN0b3JlIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1vdmluZyBkb3duIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IG5vZGUgayxcbiAqIGV4Y2hhbmdpbmcgYSBub2RlIHdpdGggdGhlIHNtYWxsZXN0IG9mIGl0cyB0d28gc29ucyBpZiBuZWNlc3NhcnksIHN0b3BwaW5nXG4gKiB3aGVuIHRoZSBoZWFwIHByb3BlcnR5IGlzIHJlLWVzdGFibGlzaGVkIChlYWNoIGZhdGhlciBzbWFsbGVyIHRoYW4gaXRzXG4gKiB0d28gc29ucykuXG4gKi9cbmZ1bmN0aW9uIHBxZG93bmhlYXAocywgdHJlZSwgaylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICBjdF9kYXRhICp0cmVlOyAgLyogdGhlIHRyZWUgdG8gcmVzdG9yZSAqL1xuLy8gICAgaW50IGs7ICAgICAgICAgICAgICAgLyogbm9kZSB0byBtb3ZlIGRvd24gKi9cbntcbiAgdmFyIHYgPSBzLmhlYXBba107XG4gIHZhciBqID0gayA8PCAxOyAgLyogbGVmdCBzb24gb2YgayAqL1xuICB3aGlsZSAoaiA8PSBzLmhlYXBfbGVuKSB7XG4gICAgLyogU2V0IGogdG8gdGhlIHNtYWxsZXN0IG9mIHRoZSB0d28gc29uczogKi9cbiAgICBpZiAoaiA8IHMuaGVhcF9sZW4gJiZcbiAgICAgIHNtYWxsZXIodHJlZSwgcy5oZWFwW2ogKyAxXSwgcy5oZWFwW2pdLCBzLmRlcHRoKSkge1xuICAgICAgaisrO1xuICAgIH1cbiAgICAvKiBFeGl0IGlmIHYgaXMgc21hbGxlciB0aGFuIGJvdGggc29ucyAqL1xuICAgIGlmIChzbWFsbGVyKHRyZWUsIHYsIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsgYnJlYWs7IH1cblxuICAgIC8qIEV4Y2hhbmdlIHYgd2l0aCB0aGUgc21hbGxlc3Qgc29uICovXG4gICAgcy5oZWFwW2tdID0gcy5oZWFwW2pdO1xuICAgIGsgPSBqO1xuXG4gICAgLyogQW5kIGNvbnRpbnVlIGRvd24gdGhlIHRyZWUsIHNldHRpbmcgaiB0byB0aGUgbGVmdCBzb24gb2YgayAqL1xuICAgIGogPDw9IDE7XG4gIH1cbiAgcy5oZWFwW2tdID0gdjtcbn1cblxuXG4vLyBpbmxpbmVkIG1hbnVhbGx5XG4vLyB2YXIgU01BTExFU1QgPSAxO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGJsb2NrIGRhdGEgY29tcHJlc3NlZCB1c2luZyB0aGUgZ2l2ZW4gSHVmZm1hbiB0cmVlc1xuICovXG5mdW5jdGlvbiBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqL1xuLy8gICAgY29uc3QgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbntcbiAgdmFyIGRpc3Q7ICAgICAgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqL1xuICB2YXIgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqL1xuICB2YXIgbHggPSAwOyAgICAgICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gbF9idWYgKi9cbiAgdmFyIGNvZGU7ICAgICAgICAgICAvKiB0aGUgY29kZSB0byBzZW5kICovXG4gIHZhciBleHRyYTsgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gc2VuZCAqL1xuXG4gIGlmIChzLmxhc3RfbGl0ICE9PSAwKSB7XG4gICAgZG8ge1xuICAgICAgZGlzdCA9IChzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDJdIDw8IDgpIHwgKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMiArIDFdKTtcbiAgICAgIGxjID0gcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgbHhdO1xuICAgICAgbHgrKztcblxuICAgICAgaWYgKGRpc3QgPT09IDApIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGxjLCBsdHJlZSk7IC8qIHNlbmQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgICAgLy9UcmFjZWN2KGlzZ3JhcGgobGMpLCAoc3RkZXJyLFwiICclYycgXCIsIGxjKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgICAgIGNvZGUgPSBfbGVuZ3RoX2NvZGVbbGNdO1xuICAgICAgICBzZW5kX2NvZGUocywgY29kZSArIExJVEVSQUxTICsgMSwgbHRyZWUpOyAvKiBzZW5kIHRoZSBsZW5ndGggY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsgICAgICAgLyogc2VuZCB0aGUgZXh0cmEgbGVuZ3RoIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgICBkaXN0LS07IC8qIGRpc3QgaXMgbm93IHRoZSBtYXRjaCBkaXN0YW5jZSAtIDEgKi9cbiAgICAgICAgY29kZSA9IGRfY29kZShkaXN0KTtcbiAgICAgICAgLy9Bc3NlcnQgKGNvZGUgPCBEX0NPREVTLCBcImJhZCBkX2NvZGVcIik7XG5cbiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsgICAgICAgLyogc2VuZCB0aGUgZGlzdGFuY2UgY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2RiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBkaXN0IC09IGJhc2VfZGlzdFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOyAgIC8qIHNlbmQgdGhlIGV4dHJhIGRpc3RhbmNlIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgfSAvKiBsaXRlcmFsIG9yIG1hdGNoIHBhaXIgPyAqL1xuXG4gICAgICAvKiBDaGVjayB0aGF0IHRoZSBvdmVybGF5IGJldHdlZW4gcGVuZGluZ19idWYgYW5kIGRfYnVmK2xfYnVmIGlzIG9rOiAqL1xuICAgICAgLy9Bc3NlcnQoKHVJbnQpKHMtPnBlbmRpbmcpIDwgcy0+bGl0X2J1ZnNpemUgKyAyKmx4LFxuICAgICAgLy8gICAgICAgXCJwZW5kaW5nQnVmIG92ZXJmbG93XCIpO1xuXG4gICAgfSB3aGlsZSAobHggPCBzLmxhc3RfbGl0KTtcbiAgfVxuXG4gIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0cnVjdCBvbmUgSHVmZm1hbiB0cmVlIGFuZCBhc3NpZ25zIHRoZSBjb2RlIGJpdCBzdHJpbmdzIGFuZCBsZW5ndGhzLlxuICogVXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoIGZvciB0aGUgY3VycmVudCBibG9jay5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkIGZyZXEgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGRzIGxlbiBhbmQgY29kZSBhcmUgc2V0IHRvIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhcbiAqICAgICBhbmQgY29ycmVzcG9uZGluZyBjb2RlLiBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpc1xuICogICAgIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcyBub3QgbnVsbC4gVGhlIGZpZWxkIG1heF9jb2RlIGlzIHNldC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRfdHJlZShzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgPSBkZXNjLmR5bl90cmVlO1xuICB2YXIgc3RyZWUgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGVsZW1zICAgID0gZGVzYy5zdGF0X2Rlc2MuZWxlbXM7XG4gIHZhciBuLCBtOyAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgaGVhcCBlbGVtZW50cyAqL1xuICB2YXIgbWF4X2NvZGUgPSAtMTsgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovXG4gIHZhciBub2RlOyAgICAgICAgICAvKiBuZXcgbm9kZSBiZWluZyBjcmVhdGVkICovXG5cbiAgLyogQ29uc3RydWN0IHRoZSBpbml0aWFsIGhlYXAsIHdpdGggbGVhc3QgZnJlcXVlbnQgZWxlbWVudCBpblxuICAgKiBoZWFwW1NNQUxMRVNUXS4gVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS5cbiAgICogaGVhcFswXSBpcyBub3QgdXNlZC5cbiAgICovXG4gIHMuaGVhcF9sZW4gPSAwO1xuICBzLmhlYXBfbWF4ID0gSEVBUF9TSVpFO1xuXG4gIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7XG4gICAgaWYgKHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlID0gbjtcbiAgICAgIHMuZGVwdGhbbl0gPSAwO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiBUaGUgcGt6aXAgZm9ybWF0IHJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIGRpc3RhbmNlIGNvZGUgZXhpc3RzLFxuICAgKiBhbmQgdGhhdCBhdCBsZWFzdCBvbmUgYml0IHNob3VsZCBiZSBzZW50IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmVcbiAgICogcG9zc2libGUgY29kZS4gU28gdG8gYXZvaWQgc3BlY2lhbCBjaGVja3MgbGF0ZXIgb24gd2UgZm9yY2UgYXQgbGVhc3RcbiAgICogdHdvIGNvZGVzIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeS5cbiAgICovXG4gIHdoaWxlIChzLmhlYXBfbGVuIDwgMikge1xuICAgIG5vZGUgPSBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IChtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMCk7XG4gICAgdHJlZVtub2RlICogMl0vKi5GcmVxKi8gPSAxO1xuICAgIHMuZGVwdGhbbm9kZV0gPSAwO1xuICAgIHMub3B0X2xlbi0tO1xuXG4gICAgaWYgKGhhc19zdHJlZSkge1xuICAgICAgcy5zdGF0aWNfbGVuIC09IHN0cmVlW25vZGUgKiAyICsgMV0vKi5MZW4qLztcbiAgICB9XG4gICAgLyogbm9kZSBpcyAwIG9yIDEgc28gaXQgZG9lcyBub3QgaGF2ZSBleHRyYSBiaXRzICovXG4gIH1cbiAgZGVzYy5tYXhfY29kZSA9IG1heF9jb2RlO1xuXG4gIC8qIFRoZSBlbGVtZW50cyBoZWFwW2hlYXBfbGVuLzIrMSAuLiBoZWFwX2xlbl0gYXJlIGxlYXZlcyBvZiB0aGUgdHJlZSxcbiAgICogZXN0YWJsaXNoIHN1Yi1oZWFwcyBvZiBpbmNyZWFzaW5nIGxlbmd0aHM6XG4gICAqL1xuICBmb3IgKG4gPSAocy5oZWFwX2xlbiA+PiAxLyppbnQgLzIqLyk7IG4gPj0gMTsgbi0tKSB7IHBxZG93bmhlYXAocywgdHJlZSwgbik7IH1cblxuICAvKiBDb25zdHJ1Y3QgdGhlIEh1ZmZtYW4gdHJlZSBieSByZXBlYXRlZGx5IGNvbWJpbmluZyB0aGUgbGVhc3QgdHdvXG4gICAqIGZyZXF1ZW50IG5vZGVzLlxuICAgKi9cbiAgbm9kZSA9IGVsZW1zOyAgICAgICAgICAgICAgLyogbmV4dCBpbnRlcm5hbCBub2RlIG9mIHRoZSB0cmVlICovXG4gIGRvIHtcbiAgICAvL3BxcmVtb3ZlKHMsIHRyZWUsIG4pOyAgLyogbiA9IG5vZGUgb2YgbGVhc3QgZnJlcXVlbmN5ICovXG4gICAgLyoqKiBwcXJlbW92ZSAqKiovXG4gICAgbiA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTtcbiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBzLmhlYXBbcy5oZWFwX2xlbi0tXTtcbiAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEvKlNNQUxMRVNUKi8pO1xuICAgIC8qKiovXG5cbiAgICBtID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dOyAvKiBtID0gbm9kZSBvZiBuZXh0IGxlYXN0IGZyZXF1ZW5jeSAqL1xuXG4gICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBuOyAvKiBrZWVwIHRoZSBub2RlcyBzb3J0ZWQgYnkgZnJlcXVlbmN5ICovXG4gICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBtO1xuXG4gICAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgZmF0aGVyIG9mIG4gYW5kIG0gKi9cbiAgICB0cmVlW25vZGUgKiAyXS8qLkZyZXEqLyA9IHRyZWVbbiAqIDJdLyouRnJlcSovICsgdHJlZVttICogMl0vKi5GcmVxKi87XG4gICAgcy5kZXB0aFtub2RlXSA9IChzLmRlcHRoW25dID49IHMuZGVwdGhbbV0gPyBzLmRlcHRoW25dIDogcy5kZXB0aFttXSkgKyAxO1xuICAgIHRyZWVbbiAqIDIgKyAxXS8qLkRhZCovID0gdHJlZVttICogMiArIDFdLyouRGFkKi8gPSBub2RlO1xuXG4gICAgLyogYW5kIGluc2VydCB0aGUgbmV3IG5vZGUgaW4gdGhlIGhlYXAgKi9cbiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBub2RlKys7XG4gICAgcHFkb3duaGVhcChzLCB0cmVlLCAxLypTTUFMTEVTVCovKTtcblxuICB9IHdoaWxlIChzLmhlYXBfbGVuID49IDIpO1xuXG4gIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dO1xuXG4gIC8qIEF0IHRoaXMgcG9pbnQsIHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQuIFdlIGNhbiBub3dcbiAgICogZ2VuZXJhdGUgdGhlIGJpdCBsZW5ndGhzLlxuICAgKi9cbiAgZ2VuX2JpdGxlbihzLCBkZXNjKTtcblxuICAvKiBUaGUgZmllbGQgbGVuIGlzIG5vdyBzZXQsIHdlIGNhbiBnZW5lcmF0ZSB0aGUgYml0IGNvZGVzICovXG4gIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgcy5ibF9jb3VudCk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTY2FuIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIHRvIGRldGVybWluZSB0aGUgZnJlcXVlbmNpZXMgb2YgdGhlIGNvZGVzXG4gKiBpbiB0aGUgYml0IGxlbmd0aCB0cmVlLlxuICovXG5mdW5jdGlvbiBzY2FuX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAvKiB0aGUgdHJlZSB0byBiZSBzY2FubmVkICovXG4vLyAgICBpbnQgbWF4X2NvZGU7ICAgIC8qIGFuZCBpdHMgbGFyZ2VzdCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xue1xuICB2YXIgbjsgICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi9cbiAgdmFyIGN1cmxlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgY29kZSAqL1xuXG4gIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi9cblxuICB2YXIgY291bnQgPSAwOyAgICAgICAgICAgICAvKiByZXBlYXQgY291bnQgb2YgdGhlIGN1cnJlbnQgY29kZSAqL1xuICB2YXIgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovXG4gIHZhciBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi9cblxuICBpZiAobmV4dGxlbiA9PT0gMCkge1xuICAgIG1heF9jb3VudCA9IDEzODtcbiAgICBtaW5fY291bnQgPSAzO1xuICB9XG4gIHRyZWVbKG1heF9jb2RlICsgMSkgKiAyICsgMV0vKi5MZW4qLyA9IDB4ZmZmZjsgLyogZ3VhcmQgKi9cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0vKi5GcmVxKi8gKz0gY291bnQ7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkge1xuXG4gICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7IHMuYmxfdHJlZVtjdXJsZW4gKiAyXS8qLkZyZXEqLysrOyB9XG4gICAgICBzLmJsX3RyZWVbUkVQXzNfNiAqIDJdLyouRnJlcSovKys7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8zXzEwICogMl0vKi5GcmVxKi8rKztcblxuICAgIH0gZWxzZSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8xMV8xMzggKiAyXS8qLkZyZXEqLysrO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuXG4gICAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICAgIG1heF9jb3VudCA9IDEzODtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgbWF4X2NvdW50ID0gNjtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbWF4X2NvdW50ID0gNztcbiAgICAgIG1pbl9jb3VudCA9IDQ7XG4gICAgfVxuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZW5kIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIGluIGNvbXByZXNzZWQgZm9ybSwgdXNpbmcgdGhlIGNvZGVzIGluXG4gKiBibF90cmVlLlxuICovXG5mdW5jdGlvbiBzZW5kX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cbntcbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqL1xuICB2YXIgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVuZ3RoICovXG4gIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi9cblxuICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXS8qLkxlbiovOyAvKiBsZW5ndGggb2YgbmV4dCBjb2RlICovXG5cbiAgdmFyIGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi9cbiAgdmFyIG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJlcGVhdCBjb3VudCAqL1xuICB2YXIgbWluX2NvdW50ID0gNDsgICAgICAgICAvKiBtaW4gcmVwZWF0IGNvdW50ICovXG5cbiAgLyogdHJlZVttYXhfY29kZSsxXS5MZW4gPSAtMTsgKi8gIC8qIGd1YXJkIGFscmVhZHkgc2V0ICovXG4gIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgbWF4X2NvdW50ID0gMTM4O1xuICAgIG1pbl9jb3VudCA9IDM7XG4gIH1cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBkbyB7IHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7IH0gd2hpbGUgKC0tY291bnQgIT09IDApO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHtcbiAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTtcbiAgICAgICAgY291bnQtLTtcbiAgICAgIH1cbiAgICAgIC8vQXNzZXJ0KGNvdW50ID49IDMgJiYgY291bnQgPD0gNiwgXCIgM182P1wiKTtcbiAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMik7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzZW5kX2NvZGUocywgUkVQWl8zXzEwLCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfMTFfMTM4LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMTEsIDcpO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuICAgIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgICBtYXhfY291bnQgPSAxMzg7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHtcbiAgICAgIG1heF9jb3VudCA9IDY7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIG1heF9jb3VudCA9IDc7XG4gICAgICBtaW5fY291bnQgPSA0O1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgZm9yIHRoZSBiaXQgbGVuZ3RocyBhbmQgcmV0dXJuIHRoZSBpbmRleCBpblxuICogYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocykge1xuICB2YXIgbWF4X2JsaW5kZXg7ICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogRGV0ZXJtaW5lIHRoZSBiaXQgbGVuZ3RoIGZyZXF1ZW5jaWVzIGZvciBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICBzY2FuX3RyZWUocywgcy5keW5fbHRyZWUsIHMubF9kZXNjLm1heF9jb2RlKTtcbiAgc2Nhbl90cmVlKHMsIHMuZHluX2R0cmVlLCBzLmRfZGVzYy5tYXhfY29kZSk7XG5cbiAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZTogKi9cbiAgYnVpbGRfdHJlZShzLCBzLmJsX2Rlc2MpO1xuICAvKiBvcHRfbGVuIG5vdyBpbmNsdWRlcyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucywgZXhjZXB0XG4gICAqIHRoZSBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RocyBjb2RlcyBhbmQgdGhlIDUrNSs0IGJpdHMgZm9yIHRoZSBjb3VudHMuXG4gICAqL1xuXG4gIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJpdCBsZW5ndGggY29kZXMgdG8gc2VuZC4gVGhlIHBremlwIGZvcm1hdFxuICAgKiByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IDQgYml0IGxlbmd0aCBjb2RlcyBiZSBzZW50LiAoYXBwbm90ZS50eHQgc2F5c1xuICAgKiAzIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaXMgNC4pXG4gICAqL1xuICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMgLSAxOyBtYXhfYmxpbmRleCA+PSAzOyBtYXhfYmxpbmRleC0tKSB7XG4gICAgaWYgKHMuYmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF0gKiAyICsgMV0vKi5MZW4qLyAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8qIFVwZGF0ZSBvcHRfbGVuIHRvIGluY2x1ZGUgdGhlIGJpdCBsZW5ndGggdHJlZSBhbmQgY291bnRzICovXG4gIHMub3B0X2xlbiArPSAzICogKG1heF9ibGluZGV4ICsgMSkgKyA1ICsgNSArIDQ7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuZHluIHRyZWVzOiBkeW4gJWxkLCBzdGF0ICVsZFwiLFxuICAvLyAgICAgICAgcy0+b3B0X2xlbiwgcy0+c3RhdGljX2xlbikpO1xuXG4gIHJldHVybiBtYXhfYmxpbmRleDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGhlYWRlciBmb3IgYSBibG9jayB1c2luZyBkeW5hbWljIEh1ZmZtYW4gdHJlZXM6IHRoZSBjb3VudHMsIHRoZVxuICogbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUuXG4gKiBJTiBhc3NlcnRpb246IGxjb2RlcyA+PSAyNTcsIGRjb2RlcyA+PSAxLCBibGNvZGVzID49IDQuXG4gKi9cbmZ1bmN0aW9uIHNlbmRfYWxsX3RyZWVzKHMsIGxjb2RlcywgZGNvZGVzLCBibGNvZGVzKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGludCBsY29kZXMsIGRjb2RlcywgYmxjb2RlczsgLyogbnVtYmVyIG9mIGNvZGVzIGZvciBlYWNoIHRyZWUgKi9cbntcbiAgdmFyIHJhbms7ICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBibF9vcmRlciAqL1xuXG4gIC8vQXNzZXJ0IChsY29kZXMgPj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgXCJub3QgZW5vdWdoIGNvZGVzXCIpO1xuICAvL0Fzc2VydCAobGNvZGVzIDw9IExfQ09ERVMgJiYgZGNvZGVzIDw9IERfQ09ERVMgJiYgYmxjb2RlcyA8PSBCTF9DT0RFUyxcbiAgLy8gICAgICAgIFwidG9vIG1hbnkgY29kZXNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgY291bnRzOiBcIikpO1xuICBzZW5kX2JpdHMocywgbGNvZGVzIC0gMjU3LCA1KTsgLyogbm90ICsyNTUgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovXG4gIHNlbmRfYml0cyhzLCBkY29kZXMgLSAxLCAgIDUpO1xuICBzZW5kX2JpdHMocywgYmxjb2RlcyAtIDQsICA0KTsgLyogbm90IC0zIGFzIHN0YXRlZCBpbiBhcHBub3RlLnR4dCAqL1xuICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7XG4gICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5ibCBjb2RlICUyZCBcIiwgYmxfb3JkZXJbcmFua10pKTtcbiAgICBzZW5kX2JpdHMocywgcy5ibF90cmVlW2JsX29yZGVyW3JhbmtdICogMiArIDFdLyouTGVuKi8sIDMpO1xuICB9XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgdHJlZTogc2VudCAlbGRcIiwgcy0+Yml0c19zZW50KSk7XG5cbiAgc2VuZF90cmVlKHMsIHMuZHluX2x0cmVlLCBsY29kZXMgLSAxKTsgLyogbGl0ZXJhbCB0cmVlICovXG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxubGl0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xuXG4gIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzIC0gMSk7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlwZSBpcyBURVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gKiAtIFRFWFQgaWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6XG4gKiAgICBhKSBUaGVyZSBhcmUgbm8gbm9uLXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBiZWxvbmdpbmcgdG8gdGhlXG4gKiAgICAgICBcImJsYWNrIGxpc3RcIiAoMC4uNiwgMTQuLjI1LCAyOC4uMzEpLlxuICogICAgYikgVGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByaW50YWJsZSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIHRoZVxuICogICAgICAgXCJ3aGl0ZSBsaXN0XCIgKDkge1RBQn0sIDEwIHtMRn0sIDEzIHtDUn0sIDMyLi4yNTUpLlxuICogLSBCSU5BUlkgb3RoZXJ3aXNlLlxuICogLSBUaGUgZm9sbG93aW5nIHBhcnRpYWxseS1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgZm9ybSBhXG4gKiAgIFwiZ3JheSBsaXN0XCIgdGhhdCBpcyBpZ25vcmVkIGluIHRoaXMgZGV0ZWN0aW9uIGFsZ29yaXRobTpcbiAqICAgKDcge0JFTH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LlxuICovXG5mdW5jdGlvbiBkZXRlY3RfZGF0YV90eXBlKHMpIHtcbiAgLyogYmxhY2tfbWFzayBpcyB0aGUgYml0IG1hc2sgb2YgYmxhY2stbGlzdGVkIGJ5dGVzXG4gICAqIHNldCBiaXRzIDAuLjYsIDE0Li4yNSwgYW5kIDI4Li4zMVxuICAgKiAweGYzZmZjMDdmID0gYmluYXJ5IDExMTEwMDExMTExMTExMTExMTAwMDAwMDAxMTExMTExXG4gICAqL1xuICB2YXIgYmxhY2tfbWFzayA9IDB4ZjNmZmMwN2Y7XG4gIHZhciBuO1xuXG4gIC8qIENoZWNrIGZvciBub24tdGV4dHVhbCAoXCJibGFjay1saXN0ZWRcIikgYnl0ZXMuICovXG4gIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxhY2tfbWFzayA+Pj49IDEpIHtcbiAgICBpZiAoKGJsYWNrX21hc2sgJiAxKSAmJiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSkge1xuICAgICAgcmV0dXJuIFpfQklOQVJZO1xuICAgIH1cbiAgfVxuXG4gIC8qIENoZWNrIGZvciB0ZXh0dWFsIChcIndoaXRlLWxpc3RlZFwiKSBieXRlcy4gKi9cbiAgaWYgKHMuZHluX2x0cmVlWzkgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMCAqIDJdLyouRnJlcSovICE9PSAwIHx8XG4gICAgICBzLmR5bl9sdHJlZVsxMyAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgcmV0dXJuIFpfVEVYVDtcbiAgfVxuICBmb3IgKG4gPSAzMjsgbiA8IExJVEVSQUxTOyBuKyspIHtcbiAgICBpZiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICByZXR1cm4gWl9URVhUO1xuICAgIH1cbiAgfVxuXG4gIC8qIFRoZXJlIGFyZSBubyBcImJsYWNrLWxpc3RlZFwiIG9yIFwid2hpdGUtbGlzdGVkXCIgYnl0ZXM6XG4gICAqIHRoaXMgc3RyZWFtIGVpdGhlciBpcyBlbXB0eSBvciBoYXMgdG9sZXJhdGVkIChcImdyYXktbGlzdGVkXCIpIGJ5dGVzIG9ubHkuXG4gICAqL1xuICByZXR1cm4gWl9CSU5BUlk7XG59XG5cblxudmFyIHN0YXRpY19pbml0X2RvbmUgPSBmYWxzZTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB0cmVlIGRhdGEgc3RydWN0dXJlcyBmb3IgYSBuZXcgemxpYiBzdHJlYW0uXG4gKi9cbmZ1bmN0aW9uIF90cl9pbml0KHMpXG57XG5cbiAgaWYgKCFzdGF0aWNfaW5pdF9kb25lKSB7XG4gICAgdHJfc3RhdGljX2luaXQoKTtcbiAgICBzdGF0aWNfaW5pdF9kb25lID0gdHJ1ZTtcbiAgfVxuXG4gIHMubF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSwgc3RhdGljX2xfZGVzYyk7XG4gIHMuZF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9kdHJlZSwgc3RhdGljX2RfZGVzYyk7XG4gIHMuYmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmJsX3RyZWUsIHN0YXRpY19ibF9kZXNjKTtcblxuICBzLmJpX2J1ZiA9IDA7XG4gIHMuYmlfdmFsaWQgPSAwO1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBmaXJzdCBmaWxlOiAqL1xuICBpbml0X2Jsb2NrKHMpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHN0b3JlZCBibG9ja1xuICovXG5mdW5jdGlvbiBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdClcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jayAqL1xuLy91bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi9cbi8vaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqL1xue1xuICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsgICAgLyogc2VuZCBibG9jayB0eXBlICovXG4gIGNvcHlfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCB0cnVlKTsgLyogd2l0aCBoZWFkZXIgKi9cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuXG4gKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gX3RyX2FsaWduKHMpIHtcbiAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUyA8PCAxLCAzKTtcbiAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVlKTtcbiAgYmlfZmx1c2gocyk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWNcbiAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgb3V0cHV0IHRoZSBlbmNvZGVkIGJsb2NrIHRvIHRoZSB6aXAgZmlsZS5cbiAqL1xuZnVuY3Rpb24gX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdClcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVMTCBpZiB0b28gb2xkICovXG4vL3VsZyBzdG9yZWRfbGVuOyAgIC8qIGxlbmd0aCBvZiBpbnB1dCBibG9jayAqL1xuLy9pbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovXG57XG4gIHZhciBvcHRfbGVuYiwgc3RhdGljX2xlbmI7ICAvKiBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGluIGJ5dGVzICovXG4gIHZhciBtYXhfYmxpbmRleCA9IDA7ICAgICAgICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogQnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgdW5sZXNzIGEgc3RvcmVkIGJsb2NrIGlzIGZvcmNlZCAqL1xuICBpZiAocy5sZXZlbCA+IDApIHtcblxuICAgIC8qIENoZWNrIGlmIHRoZSBmaWxlIGlzIGJpbmFyeSBvciB0ZXh0ICovXG4gICAgaWYgKHMuc3RybS5kYXRhX3R5cGUgPT09IFpfVU5LTk9XTikge1xuICAgICAgcy5zdHJtLmRhdGFfdHlwZSA9IGRldGVjdF9kYXRhX3R5cGUocyk7XG4gICAgfVxuXG4gICAgLyogQ29uc3RydWN0IHRoZSBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICAgIGJ1aWxkX3RyZWUocywgcy5sX2Rlc2MpO1xuICAgIC8vIFRyYWNldigoc3RkZXJyLCBcIlxcbmxpdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZFwiLCBzLT5vcHRfbGVuLFxuICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7XG5cbiAgICBidWlsZF90cmVlKHMsIHMuZF9kZXNjKTtcbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IGRhdGE6IGR5biAlbGQsIHN0YXQgJWxkXCIsIHMtPm9wdF9sZW4sXG4gICAgLy8gICAgICAgIHMtPnN0YXRpY19sZW4pKTtcbiAgICAvKiBBdCB0aGlzIHBvaW50LCBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGFyZSB0aGUgdG90YWwgYml0IGxlbmd0aHMgb2ZcbiAgICAgKiB0aGUgY29tcHJlc3NlZCBibG9jayBkYXRhLCBleGNsdWRpbmcgdGhlIHRyZWUgcmVwcmVzZW50YXRpb25zLlxuICAgICAqL1xuXG4gICAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZSBmb3IgdGhlIGFib3ZlIHR3byB0cmVlcywgYW5kIGdldCB0aGUgaW5kZXhcbiAgICAgKiBpbiBibF9vcmRlciBvZiB0aGUgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgdG8gc2VuZC5cbiAgICAgKi9cbiAgICBtYXhfYmxpbmRleCA9IGJ1aWxkX2JsX3RyZWUocyk7XG5cbiAgICAvKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcuIENvbXB1dGUgdGhlIGJsb2NrIGxlbmd0aHMgaW4gYnl0ZXMuICovXG4gICAgb3B0X2xlbmIgPSAocy5vcHRfbGVuICsgMyArIDcpID4+PiAzO1xuICAgIHN0YXRpY19sZW5iID0gKHMuc3RhdGljX2xlbiArIDMgKyA3KSA+Pj4gMztcblxuICAgIC8vIFRyYWNldigoc3RkZXJyLCBcIlxcbm9wdCAlbHUoJWx1KSBzdGF0ICVsdSglbHUpIHN0b3JlZCAlbHUgbGl0ICV1IFwiLFxuICAgIC8vICAgICAgICBvcHRfbGVuYiwgcy0+b3B0X2xlbiwgc3RhdGljX2xlbmIsIHMtPnN0YXRpY19sZW4sIHN0b3JlZF9sZW4sXG4gICAgLy8gICAgICAgIHMtPmxhc3RfbGl0KSk7XG5cbiAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0X2xlbmIpIHsgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYjsgfVxuXG4gIH0gZWxzZSB7XG4gICAgLy8gQXNzZXJ0KGJ1ZiAhPSAoY2hhciopMCwgXCJsb3N0IGJ1ZlwiKTtcbiAgICBvcHRfbGVuYiA9IHN0YXRpY19sZW5iID0gc3RvcmVkX2xlbiArIDU7IC8qIGZvcmNlIGEgc3RvcmVkIGJsb2NrICovXG4gIH1cblxuICBpZiAoKHN0b3JlZF9sZW4gKyA0IDw9IG9wdF9sZW5iKSAmJiAoYnVmICE9PSAtMSkpIHtcbiAgICAvKiA0OiB0d28gd29yZHMgZm9yIHRoZSBsZW5ndGhzICovXG5cbiAgICAvKiBUaGUgdGVzdCBidWYgIT0gTlVMTCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBMSVRfQlVGU0laRSA+IFdTSVpFLlxuICAgICAqIE90aGVyd2lzZSB3ZSBjYW4ndCBoYXZlIHByb2Nlc3NlZCBtb3JlIHRoYW4gV1NJWkUgaW5wdXQgYnl0ZXMgc2luY2VcbiAgICAgKiB0aGUgbGFzdCBibG9jayBmbHVzaCwgYmVjYXVzZSBjb21wcmVzc2lvbiB3b3VsZCBoYXZlIGJlZW5cbiAgICAgKiBzdWNjZXNzZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG9cbiAgICAgKiB0cmFuc2Zvcm0gYSBibG9jayBpbnRvIGEgc3RvcmVkIGJsb2NrLlxuICAgICAqL1xuICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTtcblxuICB9IGVsc2UgaWYgKHMuc3RyYXRlZ3kgPT09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7XG5cbiAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzdGF0aWNfbHRyZWUsIHN0YXRpY19kdHJlZSk7XG5cbiAgfSBlbHNlIHtcbiAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBzZW5kX2FsbF90cmVlcyhzLCBzLmxfZGVzYy5tYXhfY29kZSArIDEsIHMuZF9kZXNjLm1heF9jb2RlICsgMSwgbWF4X2JsaW5kZXggKyAxKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzLmR5bl9sdHJlZSwgcy5keW5fZHRyZWUpO1xuICB9XG4gIC8vIEFzc2VydCAocy0+Y29tcHJlc3NlZF9sZW4gPT0gcy0+Yml0c19zZW50LCBcImJhZCBjb21wcmVzc2VkIHNpemVcIik7XG4gIC8qIFRoZSBhYm92ZSBjaGVjayBpcyBtYWRlIG1vZCAyXjMyLCBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gNTEyIE1CXG4gICAqIGFuZCB1TG9uZyBpbXBsZW1lbnRlZCBvbiAzMiBiaXRzLlxuICAgKi9cbiAgaW5pdF9ibG9jayhzKTtcblxuICBpZiAobGFzdCkge1xuICAgIGJpX3dpbmR1cChzKTtcbiAgfVxuICAvLyBUcmFjZXYoKHN0ZGVycixcIlxcbmNvbXBybGVuICVsdSglbHUpIFwiLCBzLT5jb21wcmVzc2VkX2xlbj4+MyxcbiAgLy8gICAgICAgcy0+Y29tcHJlc3NlZF9sZW4tNypsYXN0KSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2F2ZSB0aGUgbWF0Y2ggaW5mbyBhbmQgdGFsbHkgdGhlIGZyZXF1ZW5jeSBjb3VudHMuIFJldHVybiB0cnVlIGlmXG4gKiB0aGUgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQuXG4gKi9cbmZ1bmN0aW9uIF90cl90YWxseShzLCBkaXN0LCBsYylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICB1bnNpZ25lZCBkaXN0OyAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi9cbi8vICAgIHVuc2lnbmVkIGxjOyAgICAvKiBtYXRjaCBsZW5ndGgtTUlOX01BVENIIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0PT0wKSAqL1xue1xuICAvL3ZhciBvdXRfbGVuZ3RoLCBpbl9sZW5ndGgsIGRjb2RlO1xuXG4gIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyXSAgICAgPSAoZGlzdCA+Pj4gOCkgJiAweGZmO1xuICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMiArIDFdID0gZGlzdCAmIDB4ZmY7XG5cbiAgcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgcy5sYXN0X2xpdF0gPSBsYyAmIDB4ZmY7XG4gIHMubGFzdF9saXQrKztcblxuICBpZiAoZGlzdCA9PT0gMCkge1xuICAgIC8qIGxjIGlzIHRoZSB1bm1hdGNoZWQgY2hhciAqL1xuICAgIHMuZHluX2x0cmVlW2xjICogMl0vKi5GcmVxKi8rKztcbiAgfSBlbHNlIHtcbiAgICBzLm1hdGNoZXMrKztcbiAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgZGlzdC0tOyAgICAgICAgICAgICAvKiBkaXN0ID0gbWF0Y2ggZGlzdGFuY2UgLSAxICovXG4gICAgLy9Bc3NlcnQoKHVzaClkaXN0IDwgKHVzaClNQVhfRElTVChzKSAmJlxuICAgIC8vICAgICAgICh1c2gpbGMgPD0gKHVzaCkoTUFYX01BVENILU1JTl9NQVRDSCkgJiZcbiAgICAvLyAgICAgICAodXNoKWRfY29kZShkaXN0KSA8ICh1c2gpRF9DT0RFUywgIFwiX3RyX3RhbGx5OiBiYWQgbWF0Y2hcIik7XG5cbiAgICBzLmR5bl9sdHJlZVsoX2xlbmd0aF9jb2RlW2xjXSArIExJVEVSQUxTICsgMSkgKiAyXS8qLkZyZXEqLysrO1xuICAgIHMuZHluX2R0cmVlW2RfY29kZShkaXN0KSAqIDJdLyouRnJlcSovKys7XG4gIH1cblxuLy8gKCEpIFRoaXMgYmxvY2sgaXMgZGlzYWJsZWQgaW4gemxpYiBkZWZhdWx0cyxcbi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHlcblxuLy8jaWZkZWYgVFJVTkNBVEVfQkxPQ0tcbi8vICAvKiBUcnkgdG8gZ3Vlc3MgaWYgaXQgaXMgcHJvZml0YWJsZSB0byBzdG9wIHRoZSBjdXJyZW50IGJsb2NrIGhlcmUgKi9cbi8vICBpZiAoKHMubGFzdF9saXQgJiAweDFmZmYpID09PSAwICYmIHMubGV2ZWwgPiAyKSB7XG4vLyAgICAvKiBDb21wdXRlIGFuIHVwcGVyIGJvdW5kIGZvciB0aGUgY29tcHJlc3NlZCBsZW5ndGggKi9cbi8vICAgIG91dF9sZW5ndGggPSBzLmxhc3RfbGl0Kjg7XG4vLyAgICBpbl9sZW5ndGggPSBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydDtcbi8vXG4vLyAgICBmb3IgKGRjb2RlID0gMDsgZGNvZGUgPCBEX0NPREVTOyBkY29kZSsrKSB7XG4vLyAgICAgIG91dF9sZW5ndGggKz0gcy5keW5fZHRyZWVbZGNvZGUqMl0vKi5GcmVxKi8gKiAoNSArIGV4dHJhX2RiaXRzW2Rjb2RlXSk7XG4vLyAgICB9XG4vLyAgICBvdXRfbGVuZ3RoID4+Pj0gMztcbi8vICAgIC8vVHJhY2V2KChzdGRlcnIsXCJcXG5sYXN0X2xpdCAldSwgaW4gJWxkLCBvdXQgfiVsZCglbGQlJSkgXCIsXG4vLyAgICAvLyAgICAgICBzLT5sYXN0X2xpdCwgaW5fbGVuZ3RoLCBvdXRfbGVuZ3RoLFxuLy8gICAgLy8gICAgICAgMTAwTCAtIG91dF9sZW5ndGgqMTAwTC9pbl9sZW5ndGgpKTtcbi8vICAgIGlmIChzLm1hdGNoZXMgPCAocy5sYXN0X2xpdD4+MSkvKmludCAvMiovICYmIG91dF9sZW5ndGggPCAoaW5fbGVuZ3RoPj4xKS8qaW50IC8yKi8pIHtcbi8vICAgICAgcmV0dXJuIHRydWU7XG4vLyAgICB9XG4vLyAgfVxuLy8jZW5kaWZcblxuICByZXR1cm4gKHMubGFzdF9saXQgPT09IHMubGl0X2J1ZnNpemUgLSAxKTtcbiAgLyogV2UgYXZvaWQgZXF1YWxpdHkgd2l0aCBsaXRfYnVmc2l6ZSBiZWNhdXNlIG9mIHdyYXBhcm91bmQgYXQgNjRLXG4gICAqIG9uIDE2IGJpdCBtYWNoaW5lcyBhbmQgYmVjYXVzZSBzdG9yZWQgYmxvY2tzIGFyZSByZXN0cmljdGVkIHRvXG4gICAqIDY0Sy0xIGJ5dGVzLlxuICAgKi9cbn1cblxuZXhwb3J0cy5fdHJfaW5pdCAgPSBfdHJfaW5pdDtcbmV4cG9ydHMuX3RyX3N0b3JlZF9ibG9jayA9IF90cl9zdG9yZWRfYmxvY2s7XG5leHBvcnRzLl90cl9mbHVzaF9ibG9jayAgPSBfdHJfZmx1c2hfYmxvY2s7XG5leHBvcnRzLl90cl90YWxseSA9IF90cl90YWxseTtcbmV4cG9ydHMuX3RyX2FsaWduID0gX3RyX2FsaWduO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbnZhciB1dGlscyAgID0gcmVxdWlyZSgnLi4vdXRpbHMvY29tbW9uJyk7XG52YXIgdHJlZXMgICA9IHJlcXVpcmUoJy4vdHJlZXMnKTtcbnZhciBhZGxlcjMyID0gcmVxdWlyZSgnLi9hZGxlcjMyJyk7XG52YXIgY3JjMzIgICA9IHJlcXVpcmUoJy4vY3JjMzInKTtcbnZhciBtc2cgICAgID0gcmVxdWlyZSgnLi9tZXNzYWdlcycpO1xuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovXG52YXIgWl9OT19GTFVTSCAgICAgID0gMDtcbnZhciBaX1BBUlRJQUxfRkxVU0ggPSAxO1xuLy92YXIgWl9TWU5DX0ZMVVNIICAgID0gMjtcbnZhciBaX0ZVTExfRkxVU0ggICAgPSAzO1xudmFyIFpfRklOSVNIICAgICAgICA9IDQ7XG52YXIgWl9CTE9DSyAgICAgICAgID0gNTtcbi8vdmFyIFpfVFJFRVMgICAgICAgICA9IDY7XG5cblxuLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlc1xuICogYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLlxuICovXG52YXIgWl9PSyAgICAgICAgICAgID0gMDtcbnZhciBaX1NUUkVBTV9FTkQgICAgPSAxO1xuLy92YXIgWl9ORUVEX0RJQ1QgICAgID0gMjtcbi8vdmFyIFpfRVJSTk8gICAgICAgICA9IC0xO1xudmFyIFpfU1RSRUFNX0VSUk9SICA9IC0yO1xudmFyIFpfREFUQV9FUlJPUiAgICA9IC0zO1xuLy92YXIgWl9NRU1fRVJST1IgICAgID0gLTQ7XG52YXIgWl9CVUZfRVJST1IgICAgID0gLTU7XG4vL3ZhciBaX1ZFUlNJT05fRVJST1IgPSAtNjtcblxuXG4vKiBjb21wcmVzc2lvbiBsZXZlbHMgKi9cbi8vdmFyIFpfTk9fQ09NUFJFU1NJT04gICAgICA9IDA7XG4vL3ZhciBaX0JFU1RfU1BFRUQgICAgICAgICAgPSAxO1xuLy92YXIgWl9CRVNUX0NPTVBSRVNTSU9OICAgID0gOTtcbnZhciBaX0RFRkFVTFRfQ09NUFJFU1NJT04gPSAtMTtcblxuXG52YXIgWl9GSUxURVJFRCAgICAgICAgICAgID0gMTtcbnZhciBaX0hVRkZNQU5fT05MWSAgICAgICAgPSAyO1xudmFyIFpfUkxFICAgICAgICAgICAgICAgICA9IDM7XG52YXIgWl9GSVhFRCAgICAgICAgICAgICAgID0gNDtcbnZhciBaX0RFRkFVTFRfU1RSQVRFR1kgICAgPSAwO1xuXG4vKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovXG4vL3ZhciBaX0JJTkFSWSAgICAgICAgICAgICAgPSAwO1xuLy92YXIgWl9URVhUICAgICAgICAgICAgICAgID0gMTtcbi8vdmFyIFpfQVNDSUkgICAgICAgICAgICAgICA9IDE7IC8vID0gWl9URVhUXG52YXIgWl9VTktOT1dOICAgICAgICAgICAgID0gMjtcblxuXG4vKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi9cbnZhciBaX0RFRkxBVEVEICA9IDg7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cblxudmFyIE1BWF9NRU1fTEVWRUwgPSA5O1xuLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovXG52YXIgTUFYX1dCSVRTID0gMTU7XG4vKiAzMksgTFo3NyB3aW5kb3cgKi9cbnZhciBERUZfTUVNX0xFVkVMID0gODtcblxuXG52YXIgTEVOR1RIX0NPREVTICA9IDI5O1xuLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovXG52YXIgTElURVJBTFMgICAgICA9IDI1Njtcbi8qIG51bWJlciBvZiBsaXRlcmFsIGJ5dGVzIDAuLjI1NSAqL1xudmFyIExfQ09ERVMgICAgICAgPSBMSVRFUkFMUyArIDEgKyBMRU5HVEhfQ09ERVM7XG4vKiBudW1iZXIgb2YgTGl0ZXJhbCBvciBMZW5ndGggY29kZXMsIGluY2x1ZGluZyB0aGUgRU5EX0JMT0NLIGNvZGUgKi9cbnZhciBEX0NPREVTICAgICAgID0gMzA7XG4vKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi9cbnZhciBCTF9DT0RFUyAgICAgID0gMTk7XG4vKiBudW1iZXIgb2YgY29kZXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgYml0IGxlbmd0aHMgKi9cbnZhciBIRUFQX1NJWkUgICAgID0gMiAqIExfQ09ERVMgKyAxO1xuLyogbWF4aW11bSBoZWFwIHNpemUgKi9cbnZhciBNQVhfQklUUyAgPSAxNTtcbi8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqL1xuXG52YXIgTUlOX01BVENIID0gMztcbnZhciBNQVhfTUFUQ0ggPSAyNTg7XG52YXIgTUlOX0xPT0tBSEVBRCA9IChNQVhfTUFUQ0ggKyBNSU5fTUFUQ0ggKyAxKTtcblxudmFyIFBSRVNFVF9ESUNUID0gMHgyMDtcblxudmFyIElOSVRfU1RBVEUgPSA0MjtcbnZhciBFWFRSQV9TVEFURSA9IDY5O1xudmFyIE5BTUVfU1RBVEUgPSA3MztcbnZhciBDT01NRU5UX1NUQVRFID0gOTE7XG52YXIgSENSQ19TVEFURSA9IDEwMztcbnZhciBCVVNZX1NUQVRFID0gMTEzO1xudmFyIEZJTklTSF9TVEFURSA9IDY2NjtcblxudmFyIEJTX05FRURfTU9SRSAgICAgID0gMTsgLyogYmxvY2sgbm90IGNvbXBsZXRlZCwgbmVlZCBtb3JlIGlucHV0IG9yIG1vcmUgb3V0cHV0ICovXG52YXIgQlNfQkxPQ0tfRE9ORSAgICAgPSAyOyAvKiBibG9jayBmbHVzaCBwZXJmb3JtZWQgKi9cbnZhciBCU19GSU5JU0hfU1RBUlRFRCA9IDM7IC8qIGZpbmlzaCBzdGFydGVkLCBuZWVkIG9ubHkgbW9yZSBvdXRwdXQgYXQgbmV4dCBkZWZsYXRlICovXG52YXIgQlNfRklOSVNIX0RPTkUgICAgPSA0OyAvKiBmaW5pc2ggZG9uZSwgYWNjZXB0IG5vIG1vcmUgaW5wdXQgb3Igb3V0cHV0ICovXG5cbnZhciBPU19DT0RFID0gMHgwMzsgLy8gVW5peCA6KSAuIERvbid0IGRldGVjdCwgdXNlIHRoaXMgZGVmYXVsdC5cblxuZnVuY3Rpb24gZXJyKHN0cm0sIGVycm9yQ29kZSkge1xuICBzdHJtLm1zZyA9IG1zZ1tlcnJvckNvZGVdO1xuICByZXR1cm4gZXJyb3JDb2RlO1xufVxuXG5mdW5jdGlvbiByYW5rKGYpIHtcbiAgcmV0dXJuICgoZikgPDwgMSkgLSAoKGYpID4gNCA/IDkgOiAwKTtcbn1cblxuZnVuY3Rpb24gemVybyhidWYpIHsgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7IHdoaWxlICgtLWxlbiA+PSAwKSB7IGJ1ZltsZW5dID0gMDsgfSB9XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZS4gQWxsIGRlZmxhdGUoKSBvdXRwdXQgZ29lc1xuICogdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHNvIHNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdFxuICogdG8gYXZvaWQgYWxsb2NhdGluZyBhIGxhcmdlIHN0cm0tPm91dHB1dCBidWZmZXIgYW5kIGNvcHlpbmcgaW50byBpdC5cbiAqIChTZWUgYWxzbyByZWFkX2J1ZigpKS5cbiAqL1xuZnVuY3Rpb24gZmx1c2hfcGVuZGluZyhzdHJtKSB7XG4gIHZhciBzID0gc3RybS5zdGF0ZTtcblxuICAvL190cl9mbHVzaF9iaXRzKHMpO1xuICB2YXIgbGVuID0gcy5wZW5kaW5nO1xuICBpZiAobGVuID4gc3RybS5hdmFpbF9vdXQpIHtcbiAgICBsZW4gPSBzdHJtLmF2YWlsX291dDtcbiAgfVxuICBpZiAobGVuID09PSAwKSB7IHJldHVybjsgfVxuXG4gIHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmdfb3V0LCBsZW4sIHN0cm0ubmV4dF9vdXQpO1xuICBzdHJtLm5leHRfb3V0ICs9IGxlbjtcbiAgcy5wZW5kaW5nX291dCArPSBsZW47XG4gIHN0cm0udG90YWxfb3V0ICs9IGxlbjtcbiAgc3RybS5hdmFpbF9vdXQgLT0gbGVuO1xuICBzLnBlbmRpbmcgLT0gbGVuO1xuICBpZiAocy5wZW5kaW5nID09PSAwKSB7XG4gICAgcy5wZW5kaW5nX291dCA9IDA7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBmbHVzaF9ibG9ja19vbmx5KHMsIGxhc3QpIHtcbiAgdHJlZXMuX3RyX2ZsdXNoX2Jsb2NrKHMsIChzLmJsb2NrX3N0YXJ0ID49IDAgPyBzLmJsb2NrX3N0YXJ0IDogLTEpLCBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCwgbGFzdCk7XG4gIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0O1xuICBmbHVzaF9wZW5kaW5nKHMuc3RybSk7XG59XG5cblxuZnVuY3Rpb24gcHV0X2J5dGUocywgYikge1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGI7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUHV0IGEgc2hvcnQgaW4gdGhlIHBlbmRpbmcgYnVmZmVyLiBUaGUgMTYtYml0IHZhbHVlIGlzIHB1dCBpbiBNU0Igb3JkZXIuXG4gKiBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gc3RhdGUgaXMgY29ycmVjdCBhbmQgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW5cbiAqIHBlbmRpbmdfYnVmLlxuICovXG5mdW5jdGlvbiBwdXRTaG9ydE1TQihzLCBiKSB7XG4vLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgPj4gOCkpO1xuLy8gIHB1dF9ieXRlKHMsIChCeXRlKShiICYgMHhmZikpO1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IChiID4+PiA4KSAmIDB4ZmY7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYiAmIDB4ZmY7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZWFkIGEgbmV3IGJ1ZmZlciBmcm9tIHRoZSBjdXJyZW50IGlucHV0IHN0cmVhbSwgdXBkYXRlIHRoZSBhZGxlcjMyXG4gKiBhbmQgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBBbGwgZGVmbGF0ZSgpIGlucHV0IGdvZXMgdGhyb3VnaFxuICogdGhpcyBmdW5jdGlvbiBzbyBzb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkgaXQgdG8gYXZvaWRcbiAqIGFsbG9jYXRpbmcgYSBsYXJnZSBzdHJtLT5pbnB1dCBidWZmZXIgYW5kIGNvcHlpbmcgZnJvbSBpdC5cbiAqIChTZWUgYWxzbyBmbHVzaF9wZW5kaW5nKCkpLlxuICovXG5mdW5jdGlvbiByZWFkX2J1ZihzdHJtLCBidWYsIHN0YXJ0LCBzaXplKSB7XG4gIHZhciBsZW4gPSBzdHJtLmF2YWlsX2luO1xuXG4gIGlmIChsZW4gPiBzaXplKSB7IGxlbiA9IHNpemU7IH1cbiAgaWYgKGxlbiA9PT0gMCkgeyByZXR1cm4gMDsgfVxuXG4gIHN0cm0uYXZhaWxfaW4gLT0gbGVuO1xuXG4gIC8vIHptZW1jcHkoYnVmLCBzdHJtLT5uZXh0X2luLCBsZW4pO1xuICB1dGlscy5hcnJheVNldChidWYsIHN0cm0uaW5wdXQsIHN0cm0ubmV4dF9pbiwgbGVuLCBzdGFydCk7XG4gIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDEpIHtcbiAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBidWYsIGxlbiwgc3RhcnQpO1xuICB9XG5cbiAgZWxzZSBpZiAoc3RybS5zdGF0ZS53cmFwID09PSAyKSB7XG4gICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7XG4gIH1cblxuICBzdHJtLm5leHRfaW4gKz0gbGVuO1xuICBzdHJtLnRvdGFsX2luICs9IGxlbjtcblxuICByZXR1cm4gbGVuO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2V0IG1hdGNoX3N0YXJ0IHRvIHRoZSBsb25nZXN0IG1hdGNoIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBzdHJpbmcgYW5kXG4gKiByZXR1cm4gaXRzIGxlbmd0aC4gTWF0Y2hlcyBzaG9ydGVyIG9yIGVxdWFsIHRvIHByZXZfbGVuZ3RoIGFyZSBkaXNjYXJkZWQsXG4gKiBpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gcHJldl9sZW5ndGggYW5kIG1hdGNoX3N0YXJ0IGlzXG4gKiBnYXJiYWdlLlxuICogSU4gYXNzZXJ0aW9uczogY3VyX21hdGNoIGlzIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluIGZvciB0aGUgY3VycmVudFxuICogICBzdHJpbmcgKHN0cnN0YXJ0KSBhbmQgaXRzIGRpc3RhbmNlIGlzIDw9IE1BWF9ESVNULCBhbmQgcHJldl9sZW5ndGggPj0gMVxuICogT1VUIGFzc2VydGlvbjogdGhlIG1hdGNoIGxlbmd0aCBpcyBub3QgZ3JlYXRlciB0aGFuIHMtPmxvb2thaGVhZC5cbiAqL1xuZnVuY3Rpb24gbG9uZ2VzdF9tYXRjaChzLCBjdXJfbWF0Y2gpIHtcbiAgdmFyIGNoYWluX2xlbmd0aCA9IHMubWF4X2NoYWluX2xlbmd0aDsgICAgICAvKiBtYXggaGFzaCBjaGFpbiBsZW5ndGggKi9cbiAgdmFyIHNjYW4gPSBzLnN0cnN0YXJ0OyAvKiBjdXJyZW50IHN0cmluZyAqL1xuICB2YXIgbWF0Y2g7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVkIHN0cmluZyAqL1xuICB2YXIgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IG1hdGNoICovXG4gIHZhciBiZXN0X2xlbiA9IHMucHJldl9sZW5ndGg7ICAgICAgICAgICAgICAvKiBiZXN0IG1hdGNoIGxlbmd0aCBzbyBmYXIgKi9cbiAgdmFyIG5pY2VfbWF0Y2ggPSBzLm5pY2VfbWF0Y2g7ICAgICAgICAgICAgIC8qIHN0b3AgaWYgbWF0Y2ggbG9uZyBlbm91Z2ggKi9cbiAgdmFyIGxpbWl0ID0gKHMuc3Ryc3RhcnQgPiAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkgP1xuICAgICAgcy5zdHJzdGFydCAtIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIDogMC8qTklMKi87XG5cbiAgdmFyIF93aW4gPSBzLndpbmRvdzsgLy8gc2hvcnRjdXRcblxuICB2YXIgd21hc2sgPSBzLndfbWFzaztcbiAgdmFyIHByZXYgID0gcy5wcmV2O1xuXG4gIC8qIFN0b3Agd2hlbiBjdXJfbWF0Y2ggYmVjb21lcyA8PSBsaW1pdC4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsXG4gICAqIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmcgb2Ygd2luZG93IGluZGV4IDAuXG4gICAqL1xuXG4gIHZhciBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIO1xuICB2YXIgc2Nhbl9lbmQxICA9IF93aW5bc2NhbiArIGJlc3RfbGVuIC0gMV07XG4gIHZhciBzY2FuX2VuZCAgID0gX3dpbltzY2FuICsgYmVzdF9sZW5dO1xuXG4gIC8qIFRoZSBjb2RlIGlzIG9wdGltaXplZCBmb3IgSEFTSF9CSVRTID49IDggYW5kIE1BWF9NQVRDSC0yIG11bHRpcGxlIG9mIDE2LlxuICAgKiBJdCBpcyBlYXN5IHRvIGdldCByaWQgb2YgdGhpcyBvcHRpbWl6YXRpb24gaWYgbmVjZXNzYXJ5LlxuICAgKi9cbiAgLy8gQXNzZXJ0KHMtPmhhc2hfYml0cyA+PSA4ICYmIE1BWF9NQVRDSCA9PSAyNTgsIFwiQ29kZSB0b28gY2xldmVyXCIpO1xuXG4gIC8qIERvIG5vdCB3YXN0ZSB0b28gbXVjaCB0aW1lIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGdvb2QgbWF0Y2g6ICovXG4gIGlmIChzLnByZXZfbGVuZ3RoID49IHMuZ29vZF9tYXRjaCkge1xuICAgIGNoYWluX2xlbmd0aCA+Pj0gMjtcbiAgfVxuICAvKiBEbyBub3QgbG9vayBmb3IgbWF0Y2hlcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuIFRoaXMgaXMgbmVjZXNzYXJ5XG4gICAqIHRvIG1ha2UgZGVmbGF0ZSBkZXRlcm1pbmlzdGljLlxuICAgKi9cbiAgaWYgKG5pY2VfbWF0Y2ggPiBzLmxvb2thaGVhZCkgeyBuaWNlX21hdGNoID0gcy5sb29rYWhlYWQ7IH1cblxuICAvLyBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFELCBcIm5lZWQgbG9va2FoZWFkXCIpO1xuXG4gIGRvIHtcbiAgICAvLyBBc3NlcnQoY3VyX21hdGNoIDwgcy0+c3Ryc3RhcnQsIFwibm8gZnV0dXJlXCIpO1xuICAgIG1hdGNoID0gY3VyX21hdGNoO1xuXG4gICAgLyogU2tpcCB0byBuZXh0IG1hdGNoIGlmIHRoZSBtYXRjaCBsZW5ndGggY2Fubm90IGluY3JlYXNlXG4gICAgICogb3IgaWYgdGhlIG1hdGNoIGxlbmd0aCBpcyBsZXNzIHRoYW4gMi4gIE5vdGUgdGhhdCB0aGUgY2hlY2tzIGJlbG93XG4gICAgICogZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBvY2N1ciBvY2Nhc2lvbmFsbHkgZm9yIHBlcmZvcm1hbmNlXG4gICAgICogcmVhc29ucy4gIFRoZXJlZm9yZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aWxsIGJlIGFjY2Vzc2VkLCBhbmRcbiAgICAgKiBjb25kaXRpb25hbCBqdW1wcyB3aWxsIGJlIG1hZGUgdGhhdCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzLlxuICAgICAqIEhvd2V2ZXIgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaXMgbGltaXRlZCB0byB0aGUgbG9va2FoZWFkLCBzb1xuICAgICAqIHRoZSBvdXRwdXQgb2YgZGVmbGF0ZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuICAgICAqL1xuXG4gICAgaWYgKF93aW5bbWF0Y2ggKyBiZXN0X2xlbl0gICAgICE9PSBzY2FuX2VuZCAgfHxcbiAgICAgICAgX3dpblttYXRjaCArIGJlc3RfbGVuIC0gMV0gIT09IHNjYW5fZW5kMSB8fFxuICAgICAgICBfd2luW21hdGNoXSAgICAgICAgICAgICAgICAhPT0gX3dpbltzY2FuXSB8fFxuICAgICAgICBfd2luWysrbWF0Y2hdICAgICAgICAgICAgICAhPT0gX3dpbltzY2FuICsgMV0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qIFRoZSBjaGVjayBhdCBiZXN0X2xlbi0xIGNhbiBiZSByZW1vdmVkIGJlY2F1c2UgaXQgd2lsbCBiZSBtYWRlXG4gICAgICogYWdhaW4gbGF0ZXIuIChUaGlzIGhldXJpc3RpYyBpcyBub3QgYWx3YXlzIGEgd2luLilcbiAgICAgKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNvbXBhcmUgc2NhblsyXSBhbmQgbWF0Y2hbMl0gc2luY2UgdGhleVxuICAgICAqIGFyZSBhbHdheXMgZXF1YWwgd2hlbiB0aGUgb3RoZXIgYnl0ZXMgbWF0Y2gsIGdpdmVuIHRoYXRcbiAgICAgKiB0aGUgaGFzaCBrZXlzIGFyZSBlcXVhbCBhbmQgdGhhdCBIQVNIX0JJVFMgPj0gOC5cbiAgICAgKi9cbiAgICBzY2FuICs9IDI7XG4gICAgbWF0Y2grKztcbiAgICAvLyBBc3NlcnQoKnNjYW4gPT0gKm1hdGNoLCBcIm1hdGNoWzJdP1wiKTtcblxuICAgIC8qIFdlIGNoZWNrIGZvciBpbnN1ZmZpY2llbnQgbG9va2FoZWFkIG9ubHkgZXZlcnkgOHRoIGNvbXBhcmlzb247XG4gICAgICogdGhlIDI1NnRoIGNoZWNrIHdpbGwgYmUgbWFkZSBhdCBzdHJzdGFydCsyNTguXG4gICAgICovXG4gICAgZG8ge1xuICAgICAgLypqc2hpbnQgbm9lbXB0eTpmYWxzZSovXG4gICAgfSB3aGlsZSAoX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIHNjYW4gPCBzdHJlbmQpO1xuXG4gICAgLy8gQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1bnNpZ25lZCkocy0+d2luZG93X3NpemUtMSksIFwid2lsZCBzY2FuXCIpO1xuXG4gICAgbGVuID0gTUFYX01BVENIIC0gKHN0cmVuZCAtIHNjYW4pO1xuICAgIHNjYW4gPSBzdHJlbmQgLSBNQVhfTUFUQ0g7XG5cbiAgICBpZiAobGVuID4gYmVzdF9sZW4pIHtcbiAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7XG4gICAgICBiZXN0X2xlbiA9IGxlbjtcbiAgICAgIGlmIChsZW4gPj0gbmljZV9tYXRjaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHNjYW5fZW5kMSAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdO1xuICAgICAgc2Nhbl9lbmQgICA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTtcbiAgICB9XG4gIH0gd2hpbGUgKChjdXJfbWF0Y2ggPSBwcmV2W2N1cl9tYXRjaCAmIHdtYXNrXSkgPiBsaW1pdCAmJiAtLWNoYWluX2xlbmd0aCAhPT0gMCk7XG5cbiAgaWYgKGJlc3RfbGVuIDw9IHMubG9va2FoZWFkKSB7XG4gICAgcmV0dXJuIGJlc3RfbGVuO1xuICB9XG4gIHJldHVybiBzLmxvb2thaGVhZDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZpbGwgdGhlIHdpbmRvdyB3aGVuIHRoZSBsb29rYWhlYWQgYmVjb21lcyBpbnN1ZmZpY2llbnQuXG4gKiBVcGRhdGVzIHN0cnN0YXJ0IGFuZCBsb29rYWhlYWQuXG4gKlxuICogSU4gYXNzZXJ0aW9uOiBsb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEXG4gKiBPVVQgYXNzZXJ0aW9uczogc3Ryc3RhcnQgPD0gd2luZG93X3NpemUtTUlOX0xPT0tBSEVBRFxuICogICAgQXQgbGVhc3Qgb25lIGJ5dGUgaGFzIGJlZW4gcmVhZCwgb3IgYXZhaWxfaW4gPT0gMDsgcmVhZHMgYXJlXG4gKiAgICBwZXJmb3JtZWQgZm9yIGF0IGxlYXN0IHR3byBieXRlcyAocmVxdWlyZWQgZm9yIHRoZSB6aXAgdHJhbnNsYXRlX2VvbFxuICogICAgb3B0aW9uIC0tIG5vdCBzdXBwb3J0ZWQgaGVyZSkuXG4gKi9cbmZ1bmN0aW9uIGZpbGxfd2luZG93KHMpIHtcbiAgdmFyIF93X3NpemUgPSBzLndfc2l6ZTtcbiAgdmFyIHAsIG4sIG0sIG1vcmUsIHN0cjtcblxuICAvL0Fzc2VydChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFELCBcImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZFwiKTtcblxuICBkbyB7XG4gICAgbW9yZSA9IHMud2luZG93X3NpemUgLSBzLmxvb2thaGVhZCAtIHMuc3Ryc3RhcnQ7XG5cbiAgICAvLyBKUyBpbnRzIGhhdmUgMzIgYml0LCBibG9jayBiZWxvdyBub3QgbmVlZGVkXG4gICAgLyogRGVhbCB3aXRoICFAIyQlIDY0SyBsaW1pdDogKi9cbiAgICAvL2lmIChzaXplb2YoaW50KSA8PSAyKSB7XG4gICAgLy8gICAgaWYgKG1vcmUgPT0gMCAmJiBzLT5zdHJzdGFydCA9PSAwICYmIHMtPmxvb2thaGVhZCA9PSAwKSB7XG4gICAgLy8gICAgICAgIG1vcmUgPSB3c2l6ZTtcbiAgICAvL1xuICAgIC8vICB9IGVsc2UgaWYgKG1vcmUgPT0gKHVuc2lnbmVkKSgtMSkpIHtcbiAgICAvLyAgICAgICAgLyogVmVyeSB1bmxpa2VseSwgYnV0IHBvc3NpYmxlIG9uIDE2IGJpdCBtYWNoaW5lIGlmXG4gICAgLy8gICAgICAgICAqIHN0cnN0YXJ0ID09IDAgJiYgbG9va2FoZWFkID09IDEgKGlucHV0IGRvbmUgYSBieXRlIGF0IHRpbWUpXG4gICAgLy8gICAgICAgICAqL1xuICAgIC8vICAgICAgICBtb3JlLS07XG4gICAgLy8gICAgfVxuICAgIC8vfVxuXG5cbiAgICAvKiBJZiB0aGUgd2luZG93IGlzIGFsbW9zdCBmdWxsIGFuZCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgbG9va2FoZWFkLFxuICAgICAqIG1vdmUgdGhlIHVwcGVyIGhhbGYgdG8gdGhlIGxvd2VyIG9uZSB0byBtYWtlIHJvb20gaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICovXG4gICAgaWYgKHMuc3Ryc3RhcnQgPj0gX3dfc2l6ZSArIChfd19zaXplIC0gTUlOX0xPT0tBSEVBRCkpIHtcblxuICAgICAgdXRpbHMuYXJyYXlTZXQocy53aW5kb3csIHMud2luZG93LCBfd19zaXplLCBfd19zaXplLCAwKTtcbiAgICAgIHMubWF0Y2hfc3RhcnQgLT0gX3dfc2l6ZTtcbiAgICAgIHMuc3Ryc3RhcnQgLT0gX3dfc2l6ZTtcbiAgICAgIC8qIHdlIG5vdyBoYXZlIHN0cnN0YXJ0ID49IE1BWF9ESVNUICovXG4gICAgICBzLmJsb2NrX3N0YXJ0IC09IF93X3NpemU7XG5cbiAgICAgIC8qIFNsaWRlIHRoZSBoYXNoIHRhYmxlIChjb3VsZCBiZSBhdm9pZGVkIHdpdGggMzIgYml0IHZhbHVlc1xuICAgICAgIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZSkuIFdlIHNsaWRlIGV2ZW4gd2hlbiBsZXZlbCA9PSAwXG4gICAgICAgdG8ga2VlcCB0aGUgaGFzaCB0YWJsZSBjb25zaXN0ZW50IGlmIHdlIHN3aXRjaCBiYWNrIHRvIGxldmVsID4gMFxuICAgICAgIGxhdGVyLiAoVXNpbmcgbGV2ZWwgMCBwZXJtYW5lbnRseSBpcyBub3QgYW4gb3B0aW1hbCB1c2FnZSBvZlxuICAgICAgIHpsaWIsIHNvIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhpcyBwYXRob2xvZ2ljYWwgY2FzZS4pXG4gICAgICAgKi9cblxuICAgICAgbiA9IHMuaGFzaF9zaXplO1xuICAgICAgcCA9IG47XG4gICAgICBkbyB7XG4gICAgICAgIG0gPSBzLmhlYWRbLS1wXTtcbiAgICAgICAgcy5oZWFkW3BdID0gKG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMCk7XG4gICAgICB9IHdoaWxlICgtLW4pO1xuXG4gICAgICBuID0gX3dfc2l6ZTtcbiAgICAgIHAgPSBuO1xuICAgICAgZG8ge1xuICAgICAgICBtID0gcy5wcmV2Wy0tcF07XG4gICAgICAgIHMucHJldltwXSA9IChtID49IF93X3NpemUgPyBtIC0gX3dfc2l6ZSA6IDApO1xuICAgICAgICAvKiBJZiBuIGlzIG5vdCBvbiBhbnkgaGFzaCBjaGFpbiwgcHJldltuXSBpcyBnYXJiYWdlIGJ1dFxuICAgICAgICAgKiBpdHMgdmFsdWUgd2lsbCBuZXZlciBiZSB1c2VkLlxuICAgICAgICAgKi9cbiAgICAgIH0gd2hpbGUgKC0tbik7XG5cbiAgICAgIG1vcmUgKz0gX3dfc2l6ZTtcbiAgICB9XG4gICAgaWYgKHMuc3RybS5hdmFpbF9pbiA9PT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogSWYgdGhlcmUgd2FzIG5vIHNsaWRpbmc6XG4gICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiZcbiAgICAgKiAgICBtb3JlID09IHdpbmRvd19zaXplIC0gbG9va2FoZWFkIC0gc3Ryc3RhcnRcbiAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gKE1JTl9MT09LQUhFQUQtMSArIFdTSVpFICsgTUFYX0RJU1QtMSlcbiAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gMipXU0laRSArIDJcbiAgICAgKiBJbiB0aGUgQklHX01FTSBvciBNTUFQIGNhc2UgKG5vdCB5ZXQgc3VwcG9ydGVkKSxcbiAgICAgKiAgIHdpbmRvd19zaXplID09IGlucHV0X3NpemUgKyBNSU5fTE9PS0FIRUFEICAmJlxuICAgICAqICAgc3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQgPD0gaW5wdXRfc2l6ZSA9PiBtb3JlID49IE1JTl9MT09LQUhFQUQuXG4gICAgICogT3RoZXJ3aXNlLCB3aW5kb3dfc2l6ZSA9PSAyKldTSVpFIHNvIG1vcmUgPj0gMi5cbiAgICAgKiBJZiB0aGVyZSB3YXMgc2xpZGluZywgbW9yZSA+PSBXU0laRS4gU28gaW4gYWxsIGNhc2VzLCBtb3JlID49IDIuXG4gICAgICovXG4gICAgLy9Bc3NlcnQobW9yZSA+PSAyLCBcIm1vcmUgPCAyXCIpO1xuICAgIG4gPSByZWFkX2J1ZihzLnN0cm0sIHMud2luZG93LCBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQsIG1vcmUpO1xuICAgIHMubG9va2FoZWFkICs9IG47XG5cbiAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi9cbiAgICBpZiAocy5sb29rYWhlYWQgKyBzLmluc2VydCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIHN0ciA9IHMuc3Ryc3RhcnQgLSBzLmluc2VydDtcbiAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzdHJdO1xuXG4gICAgICAvKiBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIDFdKTsgKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIDFdKSAmIHMuaGFzaF9tYXNrO1xuLy8jaWYgTUlOX01BVENIICE9IDNcbi8vICAgICAgICBDYWxsIHVwZGF0ZV9oYXNoKCkgTUlOX01BVENILTMgbW9yZSB0aW1lc1xuLy8jZW5kaWZcbiAgICAgIHdoaWxlIChzLmluc2VydCkge1xuICAgICAgICAvKiBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7ICovXG4gICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuXG4gICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjtcbiAgICAgICAgc3RyKys7XG4gICAgICAgIHMuaW5zZXJ0LS07XG4gICAgICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0IDwgTUlOX01BVENIKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyogSWYgdGhlIHdob2xlIGlucHV0IGhhcyBsZXNzIHRoYW4gTUlOX01BVENIIGJ5dGVzLCBpbnNfaCBpcyBnYXJiYWdlLFxuICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBpbXBvcnRhbnQgc2luY2Ugb25seSBsaXRlcmFsIGJ5dGVzIHdpbGwgYmUgZW1pdHRlZC5cbiAgICAgKi9cblxuICB9IHdoaWxlIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgcy5zdHJtLmF2YWlsX2luICE9PSAwKTtcblxuICAvKiBJZiB0aGUgV0lOX0lOSVQgYnl0ZXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBkYXRhIGhhdmUgbmV2ZXIgYmVlblxuICAgKiB3cml0dGVuLCB0aGVuIHplcm8gdGhvc2UgYnl0ZXMgaW4gb3JkZXIgdG8gYXZvaWQgbWVtb3J5IGNoZWNrIHJlcG9ydHMgb2ZcbiAgICogdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIChvciB1bmluaXRpYWxpc2VkIGFzIEp1bGlhbiB3cml0ZXMpIGJ5dGVzIGJ5XG4gICAqIHRoZSBsb25nZXN0IG1hdGNoIHJvdXRpbmVzLiAgVXBkYXRlIHRoZSBoaWdoIHdhdGVyIG1hcmsgZm9yIHRoZSBuZXh0XG4gICAqIHRpbWUgdGhyb3VnaCBoZXJlLiAgV0lOX0lOSVQgaXMgc2V0IHRvIE1BWF9NQVRDSCBzaW5jZSB0aGUgbG9uZ2VzdCBtYXRjaFxuICAgKiByb3V0aW5lcyBhbGxvdyBzY2FubmluZyB0byBzdHJzdGFydCArIE1BWF9NQVRDSCwgaWdub3JpbmcgbG9va2FoZWFkLlxuICAgKi9cbi8vICBpZiAocy5oaWdoX3dhdGVyIDwgcy53aW5kb3dfc2l6ZSkge1xuLy8gICAgdmFyIGN1cnIgPSBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQ7XG4vLyAgICB2YXIgaW5pdCA9IDA7XG4vL1xuLy8gICAgaWYgKHMuaGlnaF93YXRlciA8IGN1cnIpIHtcbi8vICAgICAgLyogUHJldmlvdXMgaGlnaCB3YXRlciBtYXJrIGJlbG93IGN1cnJlbnQgZGF0YSAtLSB6ZXJvIFdJTl9JTklUXG4vLyAgICAgICAqIGJ5dGVzIG9yIHVwIHRvIGVuZCBvZiB3aW5kb3csIHdoaWNoZXZlciBpcyBsZXNzLlxuLy8gICAgICAgKi9cbi8vICAgICAgaW5pdCA9IHMud2luZG93X3NpemUgLSBjdXJyO1xuLy8gICAgICBpZiAoaW5pdCA+IFdJTl9JTklUKVxuLy8gICAgICAgIGluaXQgPSBXSU5fSU5JVDtcbi8vICAgICAgem1lbXplcm8ocy0+d2luZG93ICsgY3VyciwgKHVuc2lnbmVkKWluaXQpO1xuLy8gICAgICBzLT5oaWdoX3dhdGVyID0gY3VyciArIGluaXQ7XG4vLyAgICB9XG4vLyAgICBlbHNlIGlmIChzLT5oaWdoX3dhdGVyIDwgKHVsZyljdXJyICsgV0lOX0lOSVQpIHtcbi8vICAgICAgLyogSGlnaCB3YXRlciBtYXJrIGF0IG9yIGFib3ZlIGN1cnJlbnQgZGF0YSwgYnV0IGJlbG93IGN1cnJlbnQgZGF0YVxuLy8gICAgICAgKiBwbHVzIFdJTl9JTklUIC0tIHplcm8gb3V0IHRvIGN1cnJlbnQgZGF0YSBwbHVzIFdJTl9JTklULCBvciB1cFxuLy8gICAgICAgKiB0byBlbmQgb2Ygd2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy5cbi8vICAgICAgICovXG4vLyAgICAgIGluaXQgPSAodWxnKWN1cnIgKyBXSU5fSU5JVCAtIHMtPmhpZ2hfd2F0ZXI7XG4vLyAgICAgIGlmIChpbml0ID4gcy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyKVxuLy8gICAgICAgIGluaXQgPSBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hfd2F0ZXI7XG4vLyAgICAgIHptZW16ZXJvKHMtPndpbmRvdyArIHMtPmhpZ2hfd2F0ZXIsICh1bnNpZ25lZClpbml0KTtcbi8vICAgICAgcy0+aGlnaF93YXRlciArPSBpbml0O1xuLy8gICAgfVxuLy8gIH1cbi8vXG4vLyAgQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUgLSBNSU5fTE9PS0FIRUFELFxuLy8gICAgXCJub3QgZW5vdWdoIHJvb20gZm9yIHNlYXJjaFwiKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5IHdpdGhvdXQgY29tcHJlc3Npb24gYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHJldHVyblxuICogdGhlIGN1cnJlbnQgYmxvY2sgc3RhdGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgZGljdGlvbmFyeSBzaW5jZVxuICogdW5jb21wcmVzc2libGUgZGF0YSBpcyBwcm9iYWJseSBub3QgdXNlZnVsLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWRcbiAqIG9ubHkgZm9yIHRoZSBsZXZlbD0wIGNvbXByZXNzaW9uIG9wdGlvbi5cbiAqIE5PVEU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG9wdGltaXplZCB0byBhdm9pZCBleHRyYSBjb3B5aW5nIGZyb21cbiAqIHdpbmRvdyB0byBwZW5kaW5nX2J1Zi5cbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZV9zdG9yZWQocywgZmx1c2gpIHtcbiAgLyogU3RvcmVkIGJsb2NrcyBhcmUgbGltaXRlZCB0byAweGZmZmYgYnl0ZXMsIHBlbmRpbmdfYnVmIGlzIGxpbWl0ZWRcbiAgICogdG8gcGVuZGluZ19idWZfc2l6ZSwgYW5kIGVhY2ggc3RvcmVkIGJsb2NrIGhhcyBhIDUgYnl0ZSBoZWFkZXI6XG4gICAqL1xuICB2YXIgbWF4X2Jsb2NrX3NpemUgPSAweGZmZmY7XG5cbiAgaWYgKG1heF9ibG9ja19zaXplID4gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNSkge1xuICAgIG1heF9ibG9ja19zaXplID0gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNTtcbiAgfVxuXG4gIC8qIENvcHkgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIGlucHV0IHRvIG91dHB1dDogKi9cbiAgZm9yICg7Oykge1xuICAgIC8qIEZpbGwgdGhlIHdpbmRvdyBhcyBtdWNoIGFzIHBvc3NpYmxlOiAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8PSAxKSB7XG5cbiAgICAgIC8vQXNzZXJ0KHMtPnN0cnN0YXJ0IDwgcy0+d19zaXplK01BWF9ESVNUKHMpIHx8XG4gICAgICAvLyAgcy0+YmxvY2tfc3RhcnQgPj0gKGxvbmcpcy0+d19zaXplLCBcInNsaWRlIHRvbyBsYXRlXCIpO1xuLy8gICAgICBpZiAoIShzLnN0cnN0YXJ0IDwgcy53X3NpemUgKyAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB8fFxuLy8gICAgICAgIHMuYmxvY2tfc3RhcnQgPj0gcy53X3NpemUpKSB7XG4vLyAgICAgICAgdGhyb3cgIG5ldyBFcnJvcihcInNsaWRlIHRvbyBsYXRlXCIpO1xuLy8gICAgICB9XG5cbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgfVxuICAgIC8vQXNzZXJ0KHMtPmJsb2NrX3N0YXJ0ID49IDBMLCBcImJsb2NrIGdvbmVcIik7XG4vLyAgICBpZiAocy5ibG9ja19zdGFydCA8IDApIHRocm93IG5ldyBFcnJvcihcImJsb2NrIGdvbmVcIik7XG5cbiAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkO1xuICAgIHMubG9va2FoZWFkID0gMDtcblxuICAgIC8qIEVtaXQgYSBzdG9yZWQgYmxvY2sgaWYgcGVuZGluZ19idWYgd2lsbCBiZSBmdWxsOiAqL1xuICAgIHZhciBtYXhfc3RhcnQgPSBzLmJsb2NrX3N0YXJ0ICsgbWF4X2Jsb2NrX3NpemU7XG5cbiAgICBpZiAocy5zdHJzdGFydCA9PT0gMCB8fCBzLnN0cnN0YXJ0ID49IG1heF9zdGFydCkge1xuICAgICAgLyogc3Ryc3RhcnQgPT0gMCBpcyBwb3NzaWJsZSB3aGVuIHdyYXBhcm91bmQgb24gMTYtYml0IG1hY2hpbmUgKi9cbiAgICAgIHMubG9va2FoZWFkID0gcy5zdHJzdGFydCAtIG1heF9zdGFydDtcbiAgICAgIHMuc3Ryc3RhcnQgPSBtYXhfc3RhcnQ7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuXG5cbiAgICB9XG4gICAgLyogRmx1c2ggaWYgd2UgbWF5IGhhdmUgdG8gc2xpZGUsIG90aGVyd2lzZSBibG9ja19zdGFydCBtYXkgYmVjb21lXG4gICAgICogbmVnYXRpdmUgYW5kIHRoZSBkYXRhIHdpbGwgYmUgZ29uZTpcbiAgICAgKi9cbiAgICBpZiAocy5zdHJzdGFydCAtIHMuYmxvY2tfc3RhcnQgPj0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG5cbiAgcy5pbnNlcnQgPSAwO1xuXG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuXG4gIGlmIChzLnN0cnN0YXJ0ID4gcy5ibG9ja19zdGFydCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuXG4gIHJldHVybiBCU19ORUVEX01PUkU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29tcHJlc3MgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHJldHVybiB0aGUgY3VycmVudFxuICogYmxvY2sgc3RhdGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gbGF6eSBldmFsdWF0aW9uIG9mIG1hdGNoZXMgYW5kIGluc2VydHNcbiAqIG5ldyBzdHJpbmdzIGluIHRoZSBkaWN0aW9uYXJ5IG9ubHkgZm9yIHVubWF0Y2hlZCBzdHJpbmdzIG9yIGZvciBzaG9ydFxuICogbWF0Y2hlcy4gSXQgaXMgdXNlZCBvbmx5IGZvciB0aGUgZmFzdCBjb21wcmVzc2lvbiBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlX2Zhc3QocywgZmx1c2gpIHtcbiAgdmFyIGhhc2hfaGVhZDsgICAgICAgIC8qIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gKi9cbiAgdmFyIGJmbHVzaDsgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuXG4gIGZvciAoOzspIHtcbiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHRcbiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlc1xuICAgICAqIGZvciB0aGUgbmV4dCBtYXRjaCwgcGx1cyBNSU5fTUFUQ0ggYnl0ZXMgdG8gaW5zZXJ0IHRoZVxuICAgICAqIHN0cmluZyBmb2xsb3dpbmcgdGhlIG5leHQgbWF0Y2guXG4gICAgICovXG4gICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgICAgYnJlYWs7IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogSW5zZXJ0IHRoZSBzdHJpbmcgd2luZG93W3N0cnN0YXJ0IC4uIHN0cnN0YXJ0KzJdIGluIHRoZVxuICAgICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluOlxuICAgICAqL1xuICAgIGhhc2hfaGVhZCA9IDAvKk5JTCovO1xuICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG4gICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAvKioqL1xuICAgIH1cblxuICAgIC8qIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gsIGRpc2NhcmRpbmcgdGhvc2UgPD0gcHJldl9sZW5ndGguXG4gICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFsd2F5cyBtYXRjaF9sZW5ndGggPCBNSU5fTUFUQ0hcbiAgICAgKi9cbiAgICBpZiAoaGFzaF9oZWFkICE9PSAwLypOSUwqLyAmJiAoKHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQpIDw9IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSkge1xuICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmdcbiAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChpbiBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaFxuICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gocywgaGFzaF9oZWFkKTtcbiAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovXG4gICAgfVxuICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIC8vIGNoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQsIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoKTsgLy8gZm9yIGRlYnVnIG9ubHlcblxuICAgICAgLyoqKiBfdHJfdGFsbHlfZGlzdChzLCBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTtcblxuICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7XG5cbiAgICAgIC8qIEluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBvbmx5IGlmIHRoZSBtYXRjaCBsZW5ndGhcbiAgICAgICAqIGlzIG5vdCB0b28gbGFyZ2UuIFRoaXMgc2F2ZXMgdGltZSBidXQgZGVncmFkZXMgY29tcHJlc3Npb24uXG4gICAgICAgKi9cbiAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSBzLm1heF9sYXp5X21hdGNoLyptYXhfaW5zZXJ0X2xlbmd0aCovICYmIHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgICAgICBzLm1hdGNoX2xlbmd0aC0tOyAvKiBzdHJpbmcgYXQgc3Ryc3RhcnQgYWxyZWFkeSBpbiB0YWJsZSAqL1xuICAgICAgICBkbyB7XG4gICAgICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAgICAgLyoqKi9cbiAgICAgICAgICAvKiBzdHJzdGFydCBuZXZlciBleGNlZWRzIFdTSVpFLU1BWF9NQVRDSCwgc28gdGhlcmUgYXJlXG4gICAgICAgICAgICogYWx3YXlzIE1JTl9NQVRDSCBieXRlcyBhaGVhZC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgfSB3aGlsZSAoLS1zLm1hdGNoX2xlbmd0aCAhPT0gMCk7XG4gICAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgIH0gZWxzZVxuICAgICAge1xuICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubWF0Y2hfbGVuZ3RoO1xuICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzLnN0cnN0YXJ0XTtcbiAgICAgICAgLyogVVBEQVRFX0hBU0gocywgcy5pbnNfaCwgcy53aW5kb3dbcy5zdHJzdGFydCsxXSk7ICovXG4gICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyAxXSkgJiBzLmhhc2hfbWFzaztcblxuLy8jaWYgTUlOX01BVENIICE9IDNcbi8vICAgICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzXG4vLyNlbmRpZlxuICAgICAgICAvKiBJZiBsb29rYWhlYWQgPCBNSU5fTUFUQ0gsIGluc19oIGlzIGdhcmJhZ2UsIGJ1dCBpdCBkb2VzIG5vdFxuICAgICAgICAgKiBtYXR0ZXIgc2luY2UgaXQgd2lsbCBiZSByZWNvbXB1dGVkIGF0IG5leHQgZGVmbGF0ZSBjYWxsLlxuICAgICAgICAgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyogTm8gbWF0Y2gsIG91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqL1xuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSkpO1xuICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pO1xuXG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgICAgcy5zdHJzdGFydCsrO1xuICAgIH1cbiAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuICBzLmluc2VydCA9ICgocy5zdHJzdGFydCA8IChNSU5fTUFUQ0ggLSAxKSkgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMSk7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuICBpZiAocy5sYXN0X2xpdCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuICByZXR1cm4gQlNfQkxPQ0tfRE9ORTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTYW1lIGFzIGFib3ZlLCBidXQgYWNoaWV2ZXMgYmV0dGVyIGNvbXByZXNzaW9uLiBXZSB1c2UgYSBsYXp5XG4gKiBldmFsdWF0aW9uIGZvciBtYXRjaGVzOiBhIG1hdGNoIGlzIGZpbmFsbHkgYWRvcHRlZCBvbmx5IGlmIHRoZXJlIGlzXG4gKiBubyBiZXR0ZXIgbWF0Y2ggYXQgdGhlIG5leHQgd2luZG93IHBvc2l0aW9uLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlX3Nsb3cocywgZmx1c2gpIHtcbiAgdmFyIGhhc2hfaGVhZDsgICAgICAgICAgLyogaGVhZCBvZiBoYXNoIGNoYWluICovXG4gIHZhciBiZmx1c2g7ICAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICB2YXIgbWF4X2luc2VydDtcblxuICAvKiBQcm9jZXNzIHRoZSBpbnB1dCBibG9jay4gKi9cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdFxuICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzXG4gICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlXG4gICAgICogc3RyaW5nIGZvbGxvd2luZyB0aGUgbmV4dCBtYXRjaC5cbiAgICAgKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgeyBicmVhazsgfSAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cblxuICAgIC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0aGVcbiAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjpcbiAgICAgKi9cbiAgICBoYXNoX2hlYWQgPSAwLypOSUwqLztcbiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqL1xuICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0O1xuICAgICAgLyoqKi9cbiAgICB9XG5cbiAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBkaXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLlxuICAgICAqL1xuICAgIHMucHJldl9sZW5ndGggPSBzLm1hdGNoX2xlbmd0aDtcbiAgICBzLnByZXZfbWF0Y2ggPSBzLm1hdGNoX3N0YXJ0O1xuICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcblxuICAgIGlmIChoYXNoX2hlYWQgIT09IDAvKk5JTCovICYmIHMucHJldl9sZW5ndGggPCBzLm1heF9sYXp5X21hdGNoICYmXG4gICAgICAgIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkvKk1BWF9ESVNUKHMpKi8pIHtcbiAgICAgIC8qIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBwcmV2ZW50IG1hdGNoZXMgd2l0aCB0aGUgc3RyaW5nXG4gICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2hcbiAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS5cbiAgICAgICAqL1xuICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7XG4gICAgICAvKiBsb25nZXN0X21hdGNoKCkgc2V0cyBtYXRjaF9zdGFydCAqL1xuXG4gICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gNSAmJlxuICAgICAgICAgKHMuc3RyYXRlZ3kgPT09IFpfRklMVEVSRUQgfHwgKHMubWF0Y2hfbGVuZ3RoID09PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQgPiA0MDk2LypUT09fRkFSKi8pKSkge1xuXG4gICAgICAgIC8qIElmIHByZXZfbWF0Y2ggaXMgYWxzbyBNSU5fTUFUQ0gsIG1hdGNoX3N0YXJ0IGlzIGdhcmJhZ2VcbiAgICAgICAgICogYnV0IHdlIHdpbGwgaWdub3JlIHRoZSBjdXJyZW50IG1hdGNoIGFueXdheS5cbiAgICAgICAgICovXG4gICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogSWYgdGhlcmUgd2FzIGEgbWF0Y2ggYXQgdGhlIHByZXZpb3VzIHN0ZXAgYW5kIHRoZSBjdXJyZW50XG4gICAgICogbWF0Y2ggaXMgbm90IGJldHRlciwgb3V0cHV0IHRoZSBwcmV2aW91cyBtYXRjaDpcbiAgICAgKi9cbiAgICBpZiAocy5wcmV2X2xlbmd0aCA+PSBNSU5fTUFUQ0ggJiYgcy5tYXRjaF9sZW5ndGggPD0gcy5wcmV2X2xlbmd0aCkge1xuICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDtcbiAgICAgIC8qIERvIG5vdCBpbnNlcnQgc3RyaW5ncyBpbiBoYXNoIHRhYmxlIGJleW9uZCB0aGlzLiAqL1xuXG4gICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQtMSwgcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoKTtcblxuICAgICAgLyoqKl90cl90YWxseV9kaXN0KHMsIHMuc3Ryc3RhcnQgLSAxIC0gcy5wcmV2X21hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIDEgLSBzLnByZXZfbWF0Y2gsIHMucHJldl9sZW5ndGggLSBNSU5fTUFUQ0gpO1xuICAgICAgLyogSW5zZXJ0IGluIGhhc2ggdGFibGUgYWxsIHN0cmluZ3MgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbWF0Y2guXG4gICAgICAgKiBzdHJzdGFydC0xIGFuZCBzdHJzdGFydCBhcmUgYWxyZWFkeSBpbnNlcnRlZC4gSWYgdGhlcmUgaXMgbm90XG4gICAgICAgKiBlbm91Z2ggbG9va2FoZWFkLCB0aGUgbGFzdCB0d28gc3RyaW5ncyBhcmUgbm90IGluc2VydGVkIGluXG4gICAgICAgKiB0aGUgaGFzaCB0YWJsZS5cbiAgICAgICAqL1xuICAgICAgcy5sb29rYWhlYWQgLT0gcy5wcmV2X2xlbmd0aCAtIDE7XG4gICAgICBzLnByZXZfbGVuZ3RoIC09IDI7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICgrK3Muc3Ryc3RhcnQgPD0gbWF4X2luc2VydCkge1xuICAgICAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAgICAgLyoqKi9cbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoLS1zLnByZXZfbGVuZ3RoICE9PSAwKTtcbiAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcblxuICAgICAgaWYgKGJmbHVzaCkge1xuICAgICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICAgIH1cbiAgICAgICAgLyoqKi9cbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHtcbiAgICAgIC8qIElmIHRoZXJlIHdhcyBubyBtYXRjaCBhdCB0aGUgcHJldmlvdXMgcG9zaXRpb24sIG91dHB1dCBhXG4gICAgICAgKiBzaW5nbGUgbGl0ZXJhbC4gSWYgdGhlcmUgd2FzIGEgbWF0Y2ggYnV0IHRoZSBjdXJyZW50IG1hdGNoXG4gICAgICAgKiBpcyBsb25nZXIsIHRydW5jYXRlIHRoZSBwcmV2aW91cyBtYXRjaCB0byBhIHNpbmdsZSBsaXRlcmFsLlxuICAgICAgICovXG4gICAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSkpO1xuICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnQtMV0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pO1xuXG4gICAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAgIC8qKiogRkxVU0hfQkxPQ0tfT05MWShzLCAwKSAqKiovXG4gICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgICAvKioqL1xuICAgICAgfVxuICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgcy5sb29rYWhlYWQtLTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFRoZXJlIGlzIG5vIHByZXZpb3VzIG1hdGNoIHRvIGNvbXBhcmUgd2l0aCwgd2FpdCBmb3JcbiAgICAgICAqIHRoZSBuZXh0IHN0ZXAgdG8gZGVjaWRlLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDE7XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAoZmx1c2ggIT0gWl9OT19GTFVTSCwgXCJubyBmbHVzaD9cIik7XG4gIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkge1xuICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0LTFdKSk7XG4gICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnQtMV0sIGJmbHVzaCk7ICoqKi9cbiAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydCAtIDFdKTtcblxuICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgfVxuICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuICBpZiAocy5sYXN0X2xpdCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuXG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRm9yIFpfUkxFLCBzaW1wbHkgbG9vayBmb3IgcnVucyBvZiBieXRlcywgZ2VuZXJhdGUgbWF0Y2hlcyBvbmx5IG9mIGRpc3RhbmNlXG4gKiBvbmUuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLiAgKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2ZcbiAqIGRlZmxhdGUgc3dpdGNoZXMgYXdheSBmcm9tIFpfUkxFLilcbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZV9ybGUocywgZmx1c2gpIHtcbiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cbiAgdmFyIHByZXY7ICAgICAgICAgICAgICAvKiBieXRlIGF0IGRpc3RhbmNlIG9uZSB0byBtYXRjaCAqL1xuICB2YXIgc2Nhbiwgc3RyZW5kOyAgICAgIC8qIHNjYW4gZ29lcyB1cCB0byBzdHJlbmQgZm9yIGxlbmd0aCBvZiBydW4gKi9cblxuICB2YXIgX3dpbiA9IHMud2luZG93O1xuXG4gIGZvciAoOzspIHtcbiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHRcbiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlc1xuICAgICAqIGZvciB0aGUgbG9uZ2VzdCBydW4sIHBsdXMgb25lIGZvciB0aGUgdW5yb2xsZWQgbG9vcC5cbiAgICAgKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPD0gTUFYX01BVENIKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0ggJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgeyBicmVhazsgfSAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cblxuICAgIC8qIFNlZSBob3cgbWFueSB0aW1lcyB0aGUgcHJldmlvdXMgYnl0ZSByZXBlYXRzICovXG4gICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCA+IDApIHtcbiAgICAgIHNjYW4gPSBzLnN0cnN0YXJ0IC0gMTtcbiAgICAgIHByZXYgPSBfd2luW3NjYW5dO1xuICAgICAgaWYgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dKSB7XG4gICAgICAgIHN0cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAvKmpzaGludCBub2VtcHR5OmZhbHNlKi9cbiAgICAgICAgfSB3aGlsZSAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiZcbiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTtcbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7XG4gICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+IHMubG9va2FoZWFkKSB7XG4gICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLmxvb2thaGVhZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy9Bc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVJbnQpKHMtPndpbmRvd19zaXplLTEpLCBcIndpbGQgc2NhblwiKTtcbiAgICB9XG5cbiAgICAvKiBFbWl0IG1hdGNoIGlmIGhhdmUgcnVuIG9mIE1JTl9NQVRDSCBvciBsb25nZXIsIGVsc2UgZW1pdCBsaXRlcmFsICovXG4gICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkge1xuICAgICAgLy9jaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LCBzLnN0cnN0YXJ0IC0gMSwgcy5tYXRjaF9sZW5ndGgpO1xuXG4gICAgICAvKioqIF90cl90YWxseV9kaXN0KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMSwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gpO1xuXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLm1hdGNoX2xlbmd0aDtcbiAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7XG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpO1xuICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pO1xuXG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgICAgcy5zdHJzdGFydCsrO1xuICAgIH1cbiAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuICBzLmluc2VydCA9IDA7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuICBpZiAocy5sYXN0X2xpdCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuICByZXR1cm4gQlNfQkxPQ0tfRE9ORTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGb3IgWl9IVUZGTUFOX09OTFksIGRvIG5vdCBsb29rIGZvciBtYXRjaGVzLiAgRG8gbm90IG1haW50YWluIGEgaGFzaCB0YWJsZS5cbiAqIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVuIG9mIGRlZmxhdGUgc3dpdGNoZXMgYXdheSBmcm9tIEh1ZmZtYW4uKVxuICovXG5mdW5jdGlvbiBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIHtcbiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovXG5cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBsaXRlcmFsIHRvIHdyaXRlLiAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgICAgaWYgKGZsdXNoID09PSBaX05PX0ZMVVNIKSB7XG4gICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgICAgfVxuICAgICAgICBicmVhazsgICAgICAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIE91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqL1xuICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMtPndpbmRvd1tzLT5zdHJzdGFydF0pKTtcbiAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi9cbiAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pO1xuICAgIHMubG9va2FoZWFkLS07XG4gICAgcy5zdHJzdGFydCsrO1xuICAgIGlmIChiZmx1c2gpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG4gIHMuaW5zZXJ0ID0gMDtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG4vKiBWYWx1ZXMgZm9yIG1heF9sYXp5X21hdGNoLCBnb29kX21hdGNoIGFuZCBtYXhfY2hhaW5fbGVuZ3RoLCBkZXBlbmRpbmcgb25cbiAqIHRoZSBkZXNpcmVkIHBhY2sgbGV2ZWwgKDAuLjkpLiBUaGUgdmFsdWVzIGdpdmVuIGJlbG93IGhhdmUgYmVlbiB0dW5lZCB0b1xuICogZXhjbHVkZSB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIGZvciBwYXRob2xvZ2ljYWwgZmlsZXMuIEJldHRlciB2YWx1ZXMgbWF5IGJlXG4gKiBmb3VuZCBmb3Igc3BlY2lmaWMgZmlsZXMuXG4gKi9cbmZ1bmN0aW9uIENvbmZpZyhnb29kX2xlbmd0aCwgbWF4X2xhenksIG5pY2VfbGVuZ3RoLCBtYXhfY2hhaW4sIGZ1bmMpIHtcbiAgdGhpcy5nb29kX2xlbmd0aCA9IGdvb2RfbGVuZ3RoO1xuICB0aGlzLm1heF9sYXp5ID0gbWF4X2xhenk7XG4gIHRoaXMubmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDtcbiAgdGhpcy5tYXhfY2hhaW4gPSBtYXhfY2hhaW47XG4gIHRoaXMuZnVuYyA9IGZ1bmM7XG59XG5cbnZhciBjb25maWd1cmF0aW9uX3RhYmxlO1xuXG5jb25maWd1cmF0aW9uX3RhYmxlID0gW1xuICAvKiAgICAgIGdvb2QgbGF6eSBuaWNlIGNoYWluICovXG4gIG5ldyBDb25maWcoMCwgMCwgMCwgMCwgZGVmbGF0ZV9zdG9yZWQpLCAgICAgICAgICAvKiAwIHN0b3JlIG9ubHkgKi9cbiAgbmV3IENvbmZpZyg0LCA0LCA4LCA0LCBkZWZsYXRlX2Zhc3QpLCAgICAgICAgICAgIC8qIDEgbWF4IHNwZWVkLCBubyBsYXp5IG1hdGNoZXMgKi9cbiAgbmV3IENvbmZpZyg0LCA1LCAxNiwgOCwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgIC8qIDIgKi9cbiAgbmV3IENvbmZpZyg0LCA2LCAzMiwgMzIsIGRlZmxhdGVfZmFzdCksICAgICAgICAgIC8qIDMgKi9cblxuICBuZXcgQ29uZmlnKDQsIDQsIDE2LCAxNiwgZGVmbGF0ZV9zbG93KSwgICAgICAgICAgLyogNCBsYXp5IG1hdGNoZXMgKi9cbiAgbmV3IENvbmZpZyg4LCAxNiwgMzIsIDMyLCBkZWZsYXRlX3Nsb3cpLCAgICAgICAgIC8qIDUgKi9cbiAgbmV3IENvbmZpZyg4LCAxNiwgMTI4LCAxMjgsIGRlZmxhdGVfc2xvdyksICAgICAgIC8qIDYgKi9cbiAgbmV3IENvbmZpZyg4LCAzMiwgMTI4LCAyNTYsIGRlZmxhdGVfc2xvdyksICAgICAgIC8qIDcgKi9cbiAgbmV3IENvbmZpZygzMiwgMTI4LCAyNTgsIDEwMjQsIGRlZmxhdGVfc2xvdyksICAgIC8qIDggKi9cbiAgbmV3IENvbmZpZygzMiwgMjU4LCAyNTgsIDQwOTYsIGRlZmxhdGVfc2xvdykgICAgIC8qIDkgbWF4IGNvbXByZXNzaW9uICovXG5dO1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSB0aGUgXCJsb25nZXN0IG1hdGNoXCIgcm91dGluZXMgZm9yIGEgbmV3IHpsaWIgc3RyZWFtXG4gKi9cbmZ1bmN0aW9uIGxtX2luaXQocykge1xuICBzLndpbmRvd19zaXplID0gMiAqIHMud19zaXplO1xuXG4gIC8qKiogQ0xFQVJfSEFTSChzKTsgKioqL1xuICB6ZXJvKHMuaGVhZCk7IC8vIEZpbGwgd2l0aCBOSUwgKD0gMCk7XG5cbiAgLyogU2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczpcbiAgICovXG4gIHMubWF4X2xhenlfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm1heF9sYXp5O1xuICBzLmdvb2RfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLmdvb2RfbGVuZ3RoO1xuICBzLm5pY2VfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm5pY2VfbGVuZ3RoO1xuICBzLm1heF9jaGFpbl9sZW5ndGggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm1heF9jaGFpbjtcblxuICBzLnN0cnN0YXJ0ID0gMDtcbiAgcy5ibG9ja19zdGFydCA9IDA7XG4gIHMubG9va2FoZWFkID0gMDtcbiAgcy5pbnNlcnQgPSAwO1xuICBzLm1hdGNoX2xlbmd0aCA9IHMucHJldl9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7XG4gIHMuaW5zX2ggPSAwO1xufVxuXG5cbmZ1bmN0aW9uIERlZmxhdGVTdGF0ZSgpIHtcbiAgdGhpcy5zdHJtID0gbnVsbDsgICAgICAgICAgICAvKiBwb2ludGVyIGJhY2sgdG8gdGhpcyB6bGliIHN0cmVhbSAqL1xuICB0aGlzLnN0YXR1cyA9IDA7ICAgICAgICAgICAgLyogYXMgdGhlIG5hbWUgaW1wbGllcyAqL1xuICB0aGlzLnBlbmRpbmdfYnVmID0gbnVsbDsgICAgICAvKiBvdXRwdXQgc3RpbGwgcGVuZGluZyAqL1xuICB0aGlzLnBlbmRpbmdfYnVmX3NpemUgPSAwOyAgLyogc2l6ZSBvZiBwZW5kaW5nX2J1ZiAqL1xuICB0aGlzLnBlbmRpbmdfb3V0ID0gMDsgICAgICAgLyogbmV4dCBwZW5kaW5nIGJ5dGUgdG8gb3V0cHV0IHRvIHRoZSBzdHJlYW0gKi9cbiAgdGhpcy5wZW5kaW5nID0gMDsgICAgICAgICAgIC8qIG5iIG9mIGJ5dGVzIGluIHRoZSBwZW5kaW5nIGJ1ZmZlciAqL1xuICB0aGlzLndyYXAgPSAwOyAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCAqL1xuICB0aGlzLmd6aGVhZCA9IG51bGw7ICAgICAgICAgLyogZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gdG8gd3JpdGUgKi9cbiAgdGhpcy5nemluZGV4ID0gMDsgICAgICAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovXG4gIHRoaXMubWV0aG9kID0gWl9ERUZMQVRFRDsgLyogY2FuIG9ubHkgYmUgREVGTEFURUQgKi9cbiAgdGhpcy5sYXN0X2ZsdXNoID0gLTE7ICAgLyogdmFsdWUgb2YgZmx1c2ggcGFyYW0gZm9yIHByZXZpb3VzIGRlZmxhdGUgY2FsbCAqL1xuXG4gIHRoaXMud19zaXplID0gMDsgIC8qIExaNzcgd2luZG93IHNpemUgKDMySyBieSBkZWZhdWx0KSAqL1xuICB0aGlzLndfYml0cyA9IDA7ICAvKiBsb2cyKHdfc2l6ZSkgICg4Li4xNikgKi9cbiAgdGhpcy53X21hc2sgPSAwOyAgLyogd19zaXplIC0gMSAqL1xuXG4gIHRoaXMud2luZG93ID0gbnVsbDtcbiAgLyogU2xpZGluZyB3aW5kb3cuIElucHV0IGJ5dGVzIGFyZSByZWFkIGludG8gdGhlIHNlY29uZCBoYWxmIG9mIHRoZSB3aW5kb3csXG4gICAqIGFuZCBtb3ZlIHRvIHRoZSBmaXJzdCBoYWxmIGxhdGVyIHRvIGtlZXAgYSBkaWN0aW9uYXJ5IG9mIGF0IGxlYXN0IHdTaXplXG4gICAqIGJ5dGVzLiBXaXRoIHRoaXMgb3JnYW5pemF0aW9uLCBtYXRjaGVzIGFyZSBsaW1pdGVkIHRvIGEgZGlzdGFuY2Ugb2ZcbiAgICogd1NpemUtTUFYX01BVENIIGJ5dGVzLCBidXQgdGhpcyBlbnN1cmVzIHRoYXQgSU8gaXMgYWx3YXlzXG4gICAqIHBlcmZvcm1lZCB3aXRoIGEgbGVuZ3RoIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLlxuICAgKi9cblxuICB0aGlzLndpbmRvd19zaXplID0gMDtcbiAgLyogQWN0dWFsIHNpemUgb2Ygd2luZG93OiAyKndTaXplLCBleGNlcHQgd2hlbiB0aGUgdXNlciBpbnB1dCBidWZmZXJcbiAgICogaXMgZGlyZWN0bHkgdXNlZCBhcyBzbGlkaW5nIHdpbmRvdy5cbiAgICovXG5cbiAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgLyogTGluayB0byBvbGRlciBzdHJpbmcgd2l0aCBzYW1lIGhhc2ggaW5kZXguIFRvIGxpbWl0IHRoZSBzaXplIG9mIHRoaXNcbiAgICogYXJyYXkgdG8gNjRLLCB0aGlzIGxpbmsgaXMgbWFpbnRhaW5lZCBvbmx5IGZvciB0aGUgbGFzdCAzMksgc3RyaW5ncy5cbiAgICogQW4gaW5kZXggaW4gdGhpcyBhcnJheSBpcyB0aHVzIGEgd2luZG93IGluZGV4IG1vZHVsbyAzMksuXG4gICAqL1xuXG4gIHRoaXMuaGVhZCA9IG51bGw7ICAgLyogSGVhZHMgb2YgdGhlIGhhc2ggY2hhaW5zIG9yIE5JTC4gKi9cblxuICB0aGlzLmluc19oID0gMDsgICAgICAgLyogaGFzaCBpbmRleCBvZiBzdHJpbmcgdG8gYmUgaW5zZXJ0ZWQgKi9cbiAgdGhpcy5oYXNoX3NpemUgPSAwOyAgIC8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBoYXNoIHRhYmxlICovXG4gIHRoaXMuaGFzaF9iaXRzID0gMDsgICAvKiBsb2cyKGhhc2hfc2l6ZSkgKi9cbiAgdGhpcy5oYXNoX21hc2sgPSAwOyAgIC8qIGhhc2hfc2l6ZS0xICovXG5cbiAgdGhpcy5oYXNoX3NoaWZ0ID0gMDtcbiAgLyogTnVtYmVyIG9mIGJpdHMgYnkgd2hpY2ggaW5zX2ggbXVzdCBiZSBzaGlmdGVkIGF0IGVhY2ggaW5wdXRcbiAgICogc3RlcC4gSXQgbXVzdCBiZSBzdWNoIHRoYXQgYWZ0ZXIgTUlOX01BVENIIHN0ZXBzLCB0aGUgb2xkZXN0XG4gICAqIGJ5dGUgbm8gbG9uZ2VyIHRha2VzIHBhcnQgaW4gdGhlIGhhc2gga2V5LCB0aGF0IGlzOlxuICAgKiAgIGhhc2hfc2hpZnQgKiBNSU5fTUFUQ0ggPj0gaGFzaF9iaXRzXG4gICAqL1xuXG4gIHRoaXMuYmxvY2tfc3RhcnQgPSAwO1xuICAvKiBXaW5kb3cgcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBvdXRwdXQgYmxvY2suIEdldHNcbiAgICogbmVnYXRpdmUgd2hlbiB0aGUgd2luZG93IGlzIG1vdmVkIGJhY2t3YXJkcy5cbiAgICovXG5cbiAgdGhpcy5tYXRjaF9sZW5ndGggPSAwOyAgICAgIC8qIGxlbmd0aCBvZiBiZXN0IG1hdGNoICovXG4gIHRoaXMucHJldl9tYXRjaCA9IDA7ICAgICAgICAvKiBwcmV2aW91cyBtYXRjaCAqL1xuICB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDA7ICAgLyogc2V0IGlmIHByZXZpb3VzIG1hdGNoIGV4aXN0cyAqL1xuICB0aGlzLnN0cnN0YXJ0ID0gMDsgICAgICAgICAgLyogc3RhcnQgb2Ygc3RyaW5nIHRvIGluc2VydCAqL1xuICB0aGlzLm1hdGNoX3N0YXJ0ID0gMDsgICAgICAgLyogc3RhcnQgb2YgbWF0Y2hpbmcgc3RyaW5nICovXG4gIHRoaXMubG9va2FoZWFkID0gMDsgICAgICAgICAvKiBudW1iZXIgb2YgdmFsaWQgYnl0ZXMgYWhlYWQgaW4gd2luZG93ICovXG5cbiAgdGhpcy5wcmV2X2xlbmd0aCA9IDA7XG4gIC8qIExlbmd0aCBvZiB0aGUgYmVzdCBtYXRjaCBhdCBwcmV2aW91cyBzdGVwLiBNYXRjaGVzIG5vdCBncmVhdGVyIHRoYW4gdGhpc1xuICAgKiBhcmUgZGlzY2FyZGVkLiBUaGlzIGlzIHVzZWQgaW4gdGhlIGxhenkgbWF0Y2ggZXZhbHVhdGlvbi5cbiAgICovXG5cbiAgdGhpcy5tYXhfY2hhaW5fbGVuZ3RoID0gMDtcbiAgLyogVG8gc3BlZWQgdXAgZGVmbGF0aW9uLCBoYXNoIGNoYWlucyBhcmUgbmV2ZXIgc2VhcmNoZWQgYmV5b25kIHRoaXNcbiAgICogbGVuZ3RoLiAgQSBoaWdoZXIgbGltaXQgaW1wcm92ZXMgY29tcHJlc3Npb24gcmF0aW8gYnV0IGRlZ3JhZGVzIHRoZVxuICAgKiBzcGVlZC5cbiAgICovXG5cbiAgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDA7XG4gIC8qIEF0dGVtcHQgdG8gZmluZCBhIGJldHRlciBtYXRjaCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgbWF0Y2ggaXMgc3RyaWN0bHlcbiAgICogc21hbGxlciB0aGFuIHRoaXMgdmFsdWUuIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgb25seSBmb3IgY29tcHJlc3Npb25cbiAgICogbGV2ZWxzID49IDQuXG4gICAqL1xuICAvLyBUaGF0J3MgYWxpYXMgdG8gbWF4X2xhenlfbWF0Y2gsIGRvbid0IHVzZSBkaXJlY3RseVxuICAvL3RoaXMubWF4X2luc2VydF9sZW5ndGggPSAwO1xuICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdFxuICAgKiBncmVhdGVyIHRoYW4gdGhpcyBsZW5ndGguIFRoaXMgc2F2ZXMgdGltZSBidXQgZGVncmFkZXMgY29tcHJlc3Npb24uXG4gICAqIG1heF9pbnNlcnRfbGVuZ3RoIGlzIHVzZWQgb25seSBmb3IgY29tcHJlc3Npb24gbGV2ZWxzIDw9IDMuXG4gICAqL1xuXG4gIHRoaXMubGV2ZWwgPSAwOyAgICAgLyogY29tcHJlc3Npb24gbGV2ZWwgKDEuLjkpICovXG4gIHRoaXMuc3RyYXRlZ3kgPSAwOyAgLyogZmF2b3Igb3IgZm9yY2UgSHVmZm1hbiBjb2RpbmcqL1xuXG4gIHRoaXMuZ29vZF9tYXRjaCA9IDA7XG4gIC8qIFVzZSBhIGZhc3RlciBzZWFyY2ggd2hlbiB0aGUgcHJldmlvdXMgbWF0Y2ggaXMgbG9uZ2VyIHRoYW4gdGhpcyAqL1xuXG4gIHRoaXMubmljZV9tYXRjaCA9IDA7IC8qIFN0b3Agc2VhcmNoaW5nIHdoZW4gY3VycmVudCBtYXRjaCBleGNlZWRzIHRoaXMgKi9cblxuICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovXG5cbiAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqL1xuXG4gIC8vIHN0cnVjdCBjdF9kYXRhX3MgZHluX2x0cmVlW0hFQVBfU0laRV07ICAgLyogbGl0ZXJhbCBhbmQgbGVuZ3RoIHRyZWUgKi9cbiAgLy8gc3RydWN0IGN0X2RhdGFfcyBkeW5fZHRyZWVbMipEX0NPREVTKzFdOyAvKiBkaXN0YW5jZSB0cmVlICovXG4gIC8vIHN0cnVjdCBjdF9kYXRhX3MgYmxfdHJlZVsyKkJMX0NPREVTKzFdOyAgLyogSHVmZm1hbiB0cmVlIGZvciBiaXQgbGVuZ3RocyAqL1xuXG4gIC8vIFVzZSBmbGF0IGFycmF5IG9mIERPVUJMRSBzaXplLCB3aXRoIGludGVybGVhdmVkIGZhdGEsXG4gIC8vIGJlY2F1c2UgSlMgZG9lcyBub3Qgc3VwcG9ydCBlZmZlY3RpdmVcbiAgdGhpcy5keW5fbHRyZWUgID0gbmV3IHV0aWxzLkJ1ZjE2KEhFQVBfU0laRSAqIDIpO1xuICB0aGlzLmR5bl9kdHJlZSAgPSBuZXcgdXRpbHMuQnVmMTYoKDIgKiBEX0NPREVTICsgMSkgKiAyKTtcbiAgdGhpcy5ibF90cmVlICAgID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogQkxfQ09ERVMgKyAxKSAqIDIpO1xuICB6ZXJvKHRoaXMuZHluX2x0cmVlKTtcbiAgemVybyh0aGlzLmR5bl9kdHJlZSk7XG4gIHplcm8odGhpcy5ibF90cmVlKTtcblxuICB0aGlzLmxfZGVzYyAgID0gbnVsbDsgICAgICAgICAvKiBkZXNjLiBmb3IgbGl0ZXJhbCB0cmVlICovXG4gIHRoaXMuZF9kZXNjICAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBkaXN0YW5jZSB0cmVlICovXG4gIHRoaXMuYmxfZGVzYyAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBiaXQgbGVuZ3RoIHRyZWUgKi9cblxuICAvL3VzaCBibF9jb3VudFtNQVhfQklUUysxXTtcbiAgdGhpcy5ibF9jb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhfQklUUyArIDEpO1xuICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBhbiBvcHRpbWFsIHRyZWUgKi9cblxuICAvL2ludCBoZWFwWzIqTF9DT0RFUysxXTsgICAgICAvKiBoZWFwIHVzZWQgdG8gYnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgKi9cbiAgdGhpcy5oZWFwID0gbmV3IHV0aWxzLkJ1ZjE2KDIgKiBMX0NPREVTICsgMSk7ICAvKiBoZWFwIHVzZWQgdG8gYnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgKi9cbiAgemVybyh0aGlzLmhlYXApO1xuXG4gIHRoaXMuaGVhcF9sZW4gPSAwOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGVhcCAqL1xuICB0aGlzLmhlYXBfbWF4ID0gMDsgICAgICAgICAgICAgICAvKiBlbGVtZW50IG9mIGxhcmdlc3QgZnJlcXVlbmN5ICovXG4gIC8qIFRoZSBzb25zIG9mIGhlYXBbbl0gYXJlIGhlYXBbMipuXSBhbmQgaGVhcFsyKm4rMV0uIGhlYXBbMF0gaXMgbm90IHVzZWQuXG4gICAqIFRoZSBzYW1lIGhlYXAgYXJyYXkgaXMgdXNlZCB0byBidWlsZCBhbGwgdHJlZXMuXG4gICAqL1xuXG4gIHRoaXMuZGVwdGggPSBuZXcgdXRpbHMuQnVmMTYoMiAqIExfQ09ERVMgKyAxKTsgLy91Y2ggZGVwdGhbMipMX0NPREVTKzFdO1xuICB6ZXJvKHRoaXMuZGVwdGgpO1xuICAvKiBEZXB0aCBvZiBlYWNoIHN1YnRyZWUgdXNlZCBhcyB0aWUgYnJlYWtlciBmb3IgdHJlZXMgb2YgZXF1YWwgZnJlcXVlbmN5XG4gICAqL1xuXG4gIHRoaXMubF9idWYgPSAwOyAgICAgICAgICAvKiBidWZmZXIgaW5kZXggZm9yIGxpdGVyYWxzIG9yIGxlbmd0aHMgKi9cblxuICB0aGlzLmxpdF9idWZzaXplID0gMDtcbiAgLyogU2l6ZSBvZiBtYXRjaCBidWZmZXIgZm9yIGxpdGVyYWxzL2xlbmd0aHMuICBUaGVyZSBhcmUgNCByZWFzb25zIGZvclxuICAgKiBsaW1pdGluZyBsaXRfYnVmc2l6ZSB0byA2NEs6XG4gICAqICAgLSBmcmVxdWVuY2llcyBjYW4gYmUga2VwdCBpbiAxNiBiaXQgY291bnRlcnNcbiAgICogICAtIGlmIGNvbXByZXNzaW9uIGlzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZmlyc3QgYmxvY2ssIGFsbCBpbnB1dFxuICAgKiAgICAgZGF0YSBpcyBzdGlsbCBpbiB0aGUgd2luZG93IHNvIHdlIGNhbiBzdGlsbCBlbWl0IGEgc3RvcmVkIGJsb2NrIGV2ZW5cbiAgICogICAgIHdoZW4gaW5wdXQgY29tZXMgZnJvbSBzdGFuZGFyZCBpbnB1dC4gIChUaGlzIGNhbiBhbHNvIGJlIGRvbmUgZm9yXG4gICAqICAgICBhbGwgYmxvY2tzIGlmIGxpdF9idWZzaXplIGlzIG5vdCBncmVhdGVyIHRoYW4gMzJLLilcbiAgICogICAtIGlmIGNvbXByZXNzaW9uIGlzIG5vdCBzdWNjZXNzZnVsIGZvciBhIGZpbGUgc21hbGxlciB0aGFuIDY0Sywgd2UgY2FuXG4gICAqICAgICBldmVuIGVtaXQgYSBzdG9yZWQgZmlsZSBpbnN0ZWFkIG9mIGEgc3RvcmVkIGJsb2NrIChzYXZpbmcgNSBieXRlcykuXG4gICAqICAgICBUaGlzIGlzIGFwcGxpY2FibGUgb25seSBmb3IgemlwIChub3QgZ3ppcCBvciB6bGliKS5cbiAgICogICAtIGNyZWF0aW5nIG5ldyBIdWZmbWFuIHRyZWVzIGxlc3MgZnJlcXVlbnRseSBtYXkgbm90IHByb3ZpZGUgZmFzdFxuICAgKiAgICAgYWRhcHRhdGlvbiB0byBjaGFuZ2VzIGluIHRoZSBpbnB1dCBkYXRhIHN0YXRpc3RpY3MuIChUYWtlIGZvclxuICAgKiAgICAgZXhhbXBsZSBhIGJpbmFyeSBmaWxlIHdpdGggcG9vcmx5IGNvbXByZXNzaWJsZSBjb2RlIGZvbGxvd2VkIGJ5XG4gICAqICAgICBhIGhpZ2hseSBjb21wcmVzc2libGUgc3RyaW5nIHRhYmxlLikgU21hbGxlciBidWZmZXIgc2l6ZXMgZ2l2ZVxuICAgKiAgICAgZmFzdCBhZGFwdGF0aW9uIGJ1dCBoYXZlIG9mIGNvdXJzZSB0aGUgb3ZlcmhlYWQgb2YgdHJhbnNtaXR0aW5nXG4gICAqICAgICB0cmVlcyBtb3JlIGZyZXF1ZW50bHkuXG4gICAqICAgLSBJIGNhbid0IGNvdW50IGFib3ZlIDRcbiAgICovXG5cbiAgdGhpcy5sYXN0X2xpdCA9IDA7ICAgICAgLyogcnVubmluZyBpbmRleCBpbiBsX2J1ZiAqL1xuXG4gIHRoaXMuZF9idWYgPSAwO1xuICAvKiBCdWZmZXIgaW5kZXggZm9yIGRpc3RhbmNlcy4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsIGRfYnVmIGFuZCBsX2J1ZiBoYXZlXG4gICAqIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cy4gVG8gdXNlIGRpZmZlcmVudCBsZW5ndGhzLCBhbiBleHRyYSBmbGFnXG4gICAqIGFycmF5IHdvdWxkIGJlIG5lY2Vzc2FyeS5cbiAgICovXG5cbiAgdGhpcy5vcHRfbGVuID0gMDsgICAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggb3B0aW1hbCB0cmVlcyAqL1xuICB0aGlzLnN0YXRpY19sZW4gPSAwOyAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBzdGF0aWMgdHJlZXMgKi9cbiAgdGhpcy5tYXRjaGVzID0gMDsgICAgICAgLyogbnVtYmVyIG9mIHN0cmluZyBtYXRjaGVzIGluIGN1cnJlbnQgYmxvY2sgKi9cbiAgdGhpcy5pbnNlcnQgPSAwOyAgICAgICAgLyogYnl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqL1xuXG5cbiAgdGhpcy5iaV9idWYgPSAwO1xuICAvKiBPdXRwdXQgYnVmZmVyLiBiaXRzIGFyZSBpbnNlcnRlZCBzdGFydGluZyBhdCB0aGUgYm90dG9tIChsZWFzdFxuICAgKiBzaWduaWZpY2FudCBiaXRzKS5cbiAgICovXG4gIHRoaXMuYmlfdmFsaWQgPSAwO1xuICAvKiBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBiaV9idWYuICBBbGwgYml0cyBhYm92ZSB0aGUgbGFzdCB2YWxpZCBiaXRcbiAgICogYXJlIGFsd2F5cyB6ZXJvLlxuICAgKi9cblxuICAvLyBVc2VkIGZvciB3aW5kb3cgbWVtb3J5IGluaXQuIFdlIHNhZmVseSBpZ25vcmUgaXQgZm9yIEpTLiBUaGF0IG1ha2VzXG4gIC8vIHNlbnNlIG9ubHkgZm9yIHBvaW50ZXJzIGFuZCBtZW1vcnkgY2hlY2sgdG9vbHMuXG4gIC8vdGhpcy5oaWdoX3dhdGVyID0gMDtcbiAgLyogSGlnaCB3YXRlciBtYXJrIG9mZnNldCBpbiB3aW5kb3cgZm9yIGluaXRpYWxpemVkIGJ5dGVzIC0tIGJ5dGVzIGFib3ZlXG4gICAqIHRoaXMgYXJlIHNldCB0byB6ZXJvIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBjaGVjayB3YXJuaW5ncyB3aGVuXG4gICAqIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMgYWNjZXNzIGJ5dGVzIHBhc3QgdGhlIGlucHV0LiAgVGhpcyBpcyB0aGVuXG4gICAqIHVwZGF0ZWQgdG8gdGhlIG5ldyBoaWdoIHdhdGVyIG1hcmsuXG4gICAqL1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGVSZXNldEtlZXAoc3RybSkge1xuICB2YXIgcztcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG4gIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IDA7XG4gIHN0cm0uZGF0YV90eXBlID0gWl9VTktOT1dOO1xuXG4gIHMgPSBzdHJtLnN0YXRlO1xuICBzLnBlbmRpbmcgPSAwO1xuICBzLnBlbmRpbmdfb3V0ID0gMDtcblxuICBpZiAocy53cmFwIDwgMCkge1xuICAgIHMud3JhcCA9IC1zLndyYXA7XG4gICAgLyogd2FzIG1hZGUgbmVnYXRpdmUgYnkgZGVmbGF0ZSguLi4sIFpfRklOSVNIKTsgKi9cbiAgfVxuICBzLnN0YXR1cyA9IChzLndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURSk7XG4gIHN0cm0uYWRsZXIgPSAocy53cmFwID09PSAyKSA/XG4gICAgMCAgLy8gY3JjMzIoMCwgWl9OVUxMLCAwKVxuICA6XG4gICAgMTsgLy8gYWRsZXIzMigwLCBaX05VTEwsIDApXG4gIHMubGFzdF9mbHVzaCA9IFpfTk9fRkxVU0g7XG4gIHRyZWVzLl90cl9pbml0KHMpO1xuICByZXR1cm4gWl9PSztcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlUmVzZXQoc3RybSkge1xuICB2YXIgcmV0ID0gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKTtcbiAgaWYgKHJldCA9PT0gWl9PSykge1xuICAgIGxtX2luaXQoc3RybS5zdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlU2V0SGVhZGVyKHN0cm0sIGhlYWQpIHtcbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBpZiAoc3RybS5zdGF0ZS53cmFwICE9PSAyKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdHJtLnN0YXRlLmd6aGVhZCA9IGhlYWQ7XG4gIHJldHVybiBaX09LO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIHtcbiAgaWYgKCFzdHJtKSB7IC8vID09PSBaX05VTExcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cbiAgdmFyIHdyYXAgPSAxO1xuXG4gIGlmIChsZXZlbCA9PT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKSB7XG4gICAgbGV2ZWwgPSA2O1xuICB9XG5cbiAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7IC8qIHN1cHByZXNzIHpsaWIgd3JhcHBlciAqL1xuICAgIHdyYXAgPSAwO1xuICAgIHdpbmRvd0JpdHMgPSAtd2luZG93Qml0cztcbiAgfVxuXG4gIGVsc2UgaWYgKHdpbmRvd0JpdHMgPiAxNSkge1xuICAgIHdyYXAgPSAyOyAgICAgICAgICAgLyogd3JpdGUgZ3ppcCB3cmFwcGVyIGluc3RlYWQgKi9cbiAgICB3aW5kb3dCaXRzIC09IDE2O1xuICB9XG5cblxuICBpZiAobWVtTGV2ZWwgPCAxIHx8IG1lbUxldmVsID4gTUFYX01FTV9MRVZFTCB8fCBtZXRob2QgIT09IFpfREVGTEFURUQgfHxcbiAgICB3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUgfHwgbGV2ZWwgPCAwIHx8IGxldmVsID4gOSB8fFxuICAgIHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG5cbiAgaWYgKHdpbmRvd0JpdHMgPT09IDgpIHtcbiAgICB3aW5kb3dCaXRzID0gOTtcbiAgfVxuICAvKiB1bnRpbCAyNTYtYnl0ZSB3aW5kb3cgYnVnIGZpeGVkICovXG5cbiAgdmFyIHMgPSBuZXcgRGVmbGF0ZVN0YXRlKCk7XG5cbiAgc3RybS5zdGF0ZSA9IHM7XG4gIHMuc3RybSA9IHN0cm07XG5cbiAgcy53cmFwID0gd3JhcDtcbiAgcy5nemhlYWQgPSBudWxsO1xuICBzLndfYml0cyA9IHdpbmRvd0JpdHM7XG4gIHMud19zaXplID0gMSA8PCBzLndfYml0cztcbiAgcy53X21hc2sgPSBzLndfc2l6ZSAtIDE7XG5cbiAgcy5oYXNoX2JpdHMgPSBtZW1MZXZlbCArIDc7XG4gIHMuaGFzaF9zaXplID0gMSA8PCBzLmhhc2hfYml0cztcbiAgcy5oYXNoX21hc2sgPSBzLmhhc2hfc2l6ZSAtIDE7XG4gIHMuaGFzaF9zaGlmdCA9IH5+KChzLmhhc2hfYml0cyArIE1JTl9NQVRDSCAtIDEpIC8gTUlOX01BVENIKTtcblxuICBzLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHMud19zaXplICogMik7XG4gIHMuaGVhZCA9IG5ldyB1dGlscy5CdWYxNihzLmhhc2hfc2l6ZSk7XG4gIHMucHJldiA9IG5ldyB1dGlscy5CdWYxNihzLndfc2l6ZSk7XG5cbiAgLy8gRG9uJ3QgbmVlZCBtZW0gaW5pdCBtYWdpYyBmb3IgSlMuXG4gIC8vcy5oaWdoX3dhdGVyID0gMDsgIC8qIG5vdGhpbmcgd3JpdHRlbiB0byBzLT53aW5kb3cgeWV0ICovXG5cbiAgcy5saXRfYnVmc2l6ZSA9IDEgPDwgKG1lbUxldmVsICsgNik7IC8qIDE2SyBlbGVtZW50cyBieSBkZWZhdWx0ICovXG5cbiAgcy5wZW5kaW5nX2J1Zl9zaXplID0gcy5saXRfYnVmc2l6ZSAqIDQ7XG5cbiAgLy9vdmVybGF5ID0gKHVzaGYgKikgWkFMTE9DKHN0cm0sIHMtPmxpdF9idWZzaXplLCBzaXplb2YodXNoKSsyKTtcbiAgLy9zLT5wZW5kaW5nX2J1ZiA9ICh1Y2hmICopIG92ZXJsYXk7XG4gIHMucGVuZGluZ19idWYgPSBuZXcgdXRpbHMuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpO1xuXG4gIC8vIEl0IGlzIG9mZnNldCBmcm9tIGBzLnBlbmRpbmdfYnVmYCAoc2l6ZSBpcyBgcy5saXRfYnVmc2l6ZSAqIDJgKVxuICAvL3MtPmRfYnVmID0gb3ZlcmxheSArIHMtPmxpdF9idWZzaXplL3NpemVvZih1c2gpO1xuICBzLmRfYnVmID0gMSAqIHMubGl0X2J1ZnNpemU7XG5cbiAgLy9zLT5sX2J1ZiA9IHMtPnBlbmRpbmdfYnVmICsgKDErc2l6ZW9mKHVzaCkpKnMtPmxpdF9idWZzaXplO1xuICBzLmxfYnVmID0gKDEgKyAyKSAqIHMubGl0X2J1ZnNpemU7XG5cbiAgcy5sZXZlbCA9IGxldmVsO1xuICBzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gIHMubWV0aG9kID0gbWV0aG9kO1xuXG4gIHJldHVybiBkZWZsYXRlUmVzZXQoc3RybSk7XG59XG5cbmZ1bmN0aW9uIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSB7XG4gIHJldHVybiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIE1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZKTtcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlKHN0cm0sIGZsdXNoKSB7XG4gIHZhciBvbGRfZmx1c2gsIHM7XG4gIHZhciBiZWcsIHZhbDsgLy8gZm9yIGd6aXAgaGVhZGVyIHdyaXRlIG9ubHlcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHxcbiAgICBmbHVzaCA+IFpfQkxPQ0sgfHwgZmx1c2ggPCAwKSB7XG4gICAgcmV0dXJuIHN0cm0gPyBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpIDogWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICBzID0gc3RybS5zdGF0ZTtcblxuICBpZiAoIXN0cm0ub3V0cHV0IHx8XG4gICAgICAoIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgfHxcbiAgICAgIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9PSBaX0ZJTklTSCkpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIChzdHJtLmF2YWlsX291dCA9PT0gMCkgPyBaX0JVRl9FUlJPUiA6IFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG4gIHMuc3RybSA9IHN0cm07IC8qIGp1c3QgaW4gY2FzZSAqL1xuICBvbGRfZmx1c2ggPSBzLmxhc3RfZmx1c2g7XG4gIHMubGFzdF9mbHVzaCA9IGZsdXNoO1xuXG4gIC8qIFdyaXRlIHRoZSBoZWFkZXIgKi9cbiAgaWYgKHMuc3RhdHVzID09PSBJTklUX1NUQVRFKSB7XG5cbiAgICBpZiAocy53cmFwID09PSAyKSB7IC8vIEdaSVAgaGVhZGVyXG4gICAgICBzdHJtLmFkbGVyID0gMDsgIC8vY3JjMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgICBwdXRfYnl0ZShzLCAzMSk7XG4gICAgICBwdXRfYnl0ZShzLCAxMzkpO1xuICAgICAgcHV0X2J5dGUocywgOCk7XG4gICAgICBpZiAoIXMuZ3poZWFkKSB7IC8vIHMtPmd6aGVhZCA9PSBaX05VTExcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6XG4gICAgICAgICAgICAgICAgICAgIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID9cbiAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7XG4gICAgICAgIHB1dF9ieXRlKHMsIE9TX0NPREUpO1xuICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRleHQgPyAxIDogMCkgK1xuICAgICAgICAgICAgICAgICAgICAocy5nemhlYWQuaGNyYyA/IDIgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQuZXh0cmEgPyAwIDogNCkgK1xuICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLm5hbWUgPyAwIDogOCkgK1xuICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLmNvbW1lbnQgPyAwIDogMTYpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiA4KSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiAxNikgJiAweGZmKTtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gMjQpICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMubGV2ZWwgPT09IDkgPyAyIDpcbiAgICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgP1xuICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQub3MgJiAweGZmKTtcbiAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhICYmIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkge1xuICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDB4ZmYpO1xuICAgICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCkgJiAweGZmKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocy5nemhlYWQuaGNyYykge1xuICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcsIDApO1xuICAgICAgICB9XG4gICAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgICAgIHMuc3RhdHVzID0gRVhUUkFfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgLy8gREVGTEFURSBoZWFkZXJcbiAgICB7XG4gICAgICB2YXIgaGVhZGVyID0gKFpfREVGTEFURUQgKyAoKHMud19iaXRzIC0gOCkgPDwgNCkpIDw8IDg7XG4gICAgICB2YXIgbGV2ZWxfZmxhZ3MgPSAtMTtcblxuICAgICAgaWYgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAwO1xuICAgICAgfSBlbHNlIGlmIChzLmxldmVsIDwgNikge1xuICAgICAgICBsZXZlbF9mbGFncyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPT09IDYpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzO1xuICAgICAgfVxuICAgICAgaGVhZGVyIHw9IChsZXZlbF9mbGFncyA8PCA2KTtcbiAgICAgIGlmIChzLnN0cnN0YXJ0ICE9PSAwKSB7IGhlYWRlciB8PSBQUkVTRVRfRElDVDsgfVxuICAgICAgaGVhZGVyICs9IDMxIC0gKGhlYWRlciAlIDMxKTtcblxuICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTtcblxuICAgICAgLyogU2F2ZSB0aGUgYWRsZXIzMiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovXG4gICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkge1xuICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7XG4gICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpO1xuICAgICAgfVxuICAgICAgc3RybS5hZGxlciA9IDE7IC8vIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgfVxuICB9XG5cbi8vI2lmZGVmIEdaSVBcbiAgaWYgKHMuc3RhdHVzID09PSBFWFRSQV9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5leHRyYS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG5cbiAgICAgIHdoaWxlIChzLmd6aW5kZXggPCAocy5nemhlYWQuZXh0cmEubGVuZ3RoICYgMHhmZmZmKSkge1xuICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgYmVnID0gcy5wZW5kaW5nO1xuICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhW3MuZ3ppbmRleF0gJiAweGZmKTtcbiAgICAgICAgcy5nemluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkge1xuICAgICAgICBzLmd6aW5kZXggPSAwO1xuICAgICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFO1xuICAgIH1cbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IE5BTUVfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQubmFtZS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG4gICAgICAvL2ludCB2YWw7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgICAgIGJlZyA9IHMucGVuZGluZztcbiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICAgIHZhbCA9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSlMgc3BlY2lmaWM6IGxpdHRsZSBtYWdpYyB0byBhZGQgemVybyB0ZXJtaW5hdG9yIHRvIGVuZCBvZiBzdHJpbmdcbiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLm5hbWUubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsID0gcy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDB4ZmY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgfVxuICAgICAgICBwdXRfYnl0ZShzLCB2YWwpO1xuICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTtcblxuICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsID09PSAwKSB7XG4gICAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzLnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7XG4gICAgfVxuICB9XG4gIGlmIChzLnN0YXR1cyA9PT0gQ09NTUVOVF9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5jb21tZW50LyogIT0gWl9OVUxMKi8pIHtcbiAgICAgIGJlZyA9IHMucGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi9cbiAgICAgIC8vaW50IHZhbDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgYmVnID0gcy5wZW5kaW5nO1xuICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgICAgdmFsID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBKUyBzcGVjaWZpYzogbGl0dGxlIG1hZ2ljIHRvIGFkZCB6ZXJvIHRlcm1pbmF0b3IgdG8gZW5kIG9mIHN0cmluZ1xuICAgICAgICBpZiAocy5nemluZGV4IDwgcy5nemhlYWQuY29tbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMHhmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7XG4gICAgICB9IHdoaWxlICh2YWwgIT09IDApO1xuXG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWwgPT09IDApIHtcbiAgICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTtcbiAgICB9XG4gIH1cbiAgaWYgKHMuc3RhdHVzID09PSBIQ1JDX1NUQVRFKSB7XG4gICAgaWYgKHMuZ3poZWFkLmhjcmMpIHtcbiAgICAgIGlmIChzLnBlbmRpbmcgKyAyID4gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICB9XG4gICAgICBpZiAocy5wZW5kaW5nICsgMiA8PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiA4KSAmIDB4ZmYpO1xuICAgICAgICBzdHJtLmFkbGVyID0gMDsgLy9jcmMzMigwTCwgWl9OVUxMLCAwKTtcbiAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTtcbiAgICB9XG4gIH1cbi8vI2VuZGlmXG5cbiAgLyogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZSAqL1xuICBpZiAocy5wZW5kaW5nICE9PSAwKSB7XG4gICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIC8qIFNpbmNlIGF2YWlsX291dCBpcyAwLCBkZWZsYXRlIHdpbGwgYmUgY2FsbGVkIGFnYWluIHdpdGhcbiAgICAgICAqIG1vcmUgb3V0cHV0IHNwYWNlLCBidXQgcG9zc2libHkgd2l0aCBib3RoIHBlbmRpbmcgYW5kXG4gICAgICAgKiBhdmFpbF9pbiBlcXVhbCB0byB6ZXJvLiBUaGVyZSB3b24ndCBiZSBhbnl0aGluZyB0byBkbyxcbiAgICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBhbiBlcnJvciBzaXR1YXRpb24gc28gbWFrZSBzdXJlIHdlXG4gICAgICAgKiByZXR1cm4gT0sgaW5zdGVhZCBvZiBCVUZfRVJST1IgYXQgbmV4dCBjYWxsIG9mIGRlZmxhdGU6XG4gICAgICAgKi9cbiAgICAgIHMubGFzdF9mbHVzaCA9IC0xO1xuICAgICAgcmV0dXJuIFpfT0s7XG4gICAgfVxuXG4gICAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyBhbmQgYXZvaWQgZHVwbGljYXRlIGNvbnNlY3V0aXZlXG4gICAgICogZmx1c2hlcy4gRm9yIHJlcGVhdGVkIGFuZCB1c2VsZXNzIGNhbGxzIHdpdGggWl9GSU5JU0gsIHdlIGtlZXBcbiAgICAgKiByZXR1cm5pbmcgWl9TVFJFQU1fRU5EIGluc3RlYWQgb2YgWl9CVUZfRVJST1IuXG4gICAgICovXG4gIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiZcbiAgICBmbHVzaCAhPT0gWl9GSU5JU0gpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTtcbiAgfVxuXG4gIC8qIFVzZXIgbXVzdCBub3QgcHJvdmlkZSBtb3JlIGlucHV0IGFmdGVyIHRoZSBmaXJzdCBGSU5JU0g6ICovXG4gIGlmIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTtcbiAgfVxuXG4gIC8qIFN0YXJ0IGEgbmV3IGJsb2NrIG9yIGNvbnRpbnVlIHRoZSBjdXJyZW50IG9uZS5cbiAgICovXG4gIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8XG4gICAgKGZsdXNoICE9PSBaX05PX0ZMVVNIICYmIHMuc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpKSB7XG4gICAgdmFyIGJzdGF0ZSA9IChzLnN0cmF0ZWd5ID09PSBaX0hVRkZNQU5fT05MWSkgPyBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIDpcbiAgICAgIChzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6XG4gICAgICAgIGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZnVuYyhzLCBmbHVzaCkpO1xuXG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfRE9ORSkge1xuICAgICAgcy5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7XG4gICAgfVxuICAgIGlmIChic3RhdGUgPT09IEJTX05FRURfTU9SRSB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEKSB7XG4gICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7XG4gICAgICAgIC8qIGF2b2lkIEJVRl9FUlJPUiBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqL1xuICAgICAgfVxuICAgICAgcmV0dXJuIFpfT0s7XG4gICAgICAvKiBJZiBmbHVzaCAhPSBaX05PX0ZMVVNIICYmIGF2YWlsX291dCA9PSAwLCB0aGUgbmV4dCBjYWxsXG4gICAgICAgKiBvZiBkZWZsYXRlIHNob3VsZCB1c2UgdGhlIHNhbWUgZmx1c2ggcGFyYW1ldGVyIHRvIG1ha2Ugc3VyZVxuICAgICAgICogdGhhdCB0aGUgZmx1c2ggaXMgY29tcGxldGUuIFNvIHdlIGRvbid0IGhhdmUgdG8gb3V0cHV0IGFuXG4gICAgICAgKiBlbXB0eSBibG9jayBoZXJlLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCBuZXh0IGNhbGwuIFRoaXMgYWxzb1xuICAgICAgICogZW5zdXJlcyB0aGF0IGZvciBhIHZlcnkgc21hbGwgb3V0cHV0IGJ1ZmZlciwgd2UgZW1pdCBhdCBtb3N0XG4gICAgICAgKiBvbmUgZW1wdHkgYmxvY2suXG4gICAgICAgKi9cbiAgICB9XG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfQkxPQ0tfRE9ORSkge1xuICAgICAgaWYgKGZsdXNoID09PSBaX1BBUlRJQUxfRkxVU0gpIHtcbiAgICAgICAgdHJlZXMuX3RyX2FsaWduKHMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZmx1c2ggIT09IFpfQkxPQ0spIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovXG5cbiAgICAgICAgdHJlZXMuX3RyX3N0b3JlZF9ibG9jayhzLCAwLCAwLCBmYWxzZSk7XG4gICAgICAgIC8qIEZvciBhIGZ1bGwgZmx1c2gsIHRoaXMgZW1wdHkgYmxvY2sgd2lsbCBiZSByZWNvZ25pemVkXG4gICAgICAgICAqIGFzIGEgc3BlY2lhbCBtYXJrZXIgYnkgaW5mbGF0ZV9zeW5jKCkuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfRlVMTF9GTFVTSCkge1xuICAgICAgICAgIC8qKiogQ0xFQVJfSEFTSChzKTsgKioqLyAgICAgICAgICAgICAvKiBmb3JnZXQgaGlzdG9yeSAqL1xuICAgICAgICAgIHplcm8ocy5oZWFkKTsgLy8gRmlsbCB3aXRoIE5JTCAoPSAwKTtcblxuICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICAgICAgcy5zdHJzdGFydCA9IDA7XG4gICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7IC8qIGF2b2lkIEJVRl9FUlJPUiBhdCBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqL1xuICAgICAgICByZXR1cm4gWl9PSztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy9Bc3NlcnQoc3RybS0+YXZhaWxfb3V0ID4gMCwgXCJidWcyXCIpO1xuICAvL2lmIChzdHJtLmF2YWlsX291dCA8PSAwKSB7IHRocm93IG5ldyBFcnJvcihcImJ1ZzJcIik7fVxuXG4gIGlmIChmbHVzaCAhPT0gWl9GSU5JU0gpIHsgcmV0dXJuIFpfT0s7IH1cbiAgaWYgKHMud3JhcCA8PSAwKSB7IHJldHVybiBaX1NUUkVBTV9FTkQ7IH1cblxuICAvKiBXcml0ZSB0aGUgdHJhaWxlciAqL1xuICBpZiAocy53cmFwID09PSAyKSB7XG4gICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDgpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gMTYpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gMjQpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLnRvdGFsX2luID4+IDgpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gMTYpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gMjQpICYgMHhmZik7XG4gIH1cbiAgZWxzZVxuICB7XG4gICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciA+Pj4gMTYpO1xuICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpO1xuICB9XG5cbiAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgLyogSWYgYXZhaWxfb3V0IGlzIHplcm8sIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNhbGwgZGVmbGF0ZSBhZ2FpblxuICAgKiB0byBmbHVzaCB0aGUgcmVzdC5cbiAgICovXG4gIGlmIChzLndyYXAgPiAwKSB7IHMud3JhcCA9IC1zLndyYXA7IH1cbiAgLyogd3JpdGUgdGhlIHRyYWlsZXIgb25seSBvbmNlISAqL1xuICByZXR1cm4gcy5wZW5kaW5nICE9PSAwID8gWl9PSyA6IFpfU1RSRUFNX0VORDtcbn1cblxuZnVuY3Rpb24gZGVmbGF0ZUVuZChzdHJtKSB7XG4gIHZhciBzdGF0dXM7XG5cbiAgaWYgKCFzdHJtLyo9PSBaX05VTEwqLyB8fCAhc3RybS5zdGF0ZS8qPT0gWl9OVUxMKi8pIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICBzdGF0dXMgPSBzdHJtLnN0YXRlLnN0YXR1cztcbiAgaWYgKHN0YXR1cyAhPT0gSU5JVF9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gRVhUUkFfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IE5BTUVfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IENPTU1FTlRfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEhDUkNfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEJVU1lfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEZJTklTSF9TVEFURVxuICApIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG4gIHN0cm0uc3RhdGUgPSBudWxsO1xuXG4gIHJldHVybiBzdGF0dXMgPT09IEJVU1lfU1RBVEUgPyBlcnIoc3RybSwgWl9EQVRBX0VSUk9SKSA6IFpfT0s7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZVxuICogc2VxdWVuY2Ugd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LlxuICovXG5mdW5jdGlvbiBkZWZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5KSB7XG4gIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7XG5cbiAgdmFyIHM7XG4gIHZhciBzdHIsIG47XG4gIHZhciB3cmFwO1xuICB2YXIgYXZhaWw7XG4gIHZhciBuZXh0O1xuICB2YXIgaW5wdXQ7XG4gIHZhciB0bXBEaWN0O1xuXG4gIGlmICghc3RybS8qPT0gWl9OVUxMKi8gfHwgIXN0cm0uc3RhdGUvKj09IFpfTlVMTCovKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgcyA9IHN0cm0uc3RhdGU7XG4gIHdyYXAgPSBzLndyYXA7XG5cbiAgaWYgKHdyYXAgPT09IDIgfHwgKHdyYXAgPT09IDEgJiYgcy5zdGF0dXMgIT09IElOSVRfU1RBVEUpIHx8IHMubG9va2FoZWFkKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgLyogd2hlbiB1c2luZyB6bGliIHdyYXBwZXJzLCBjb21wdXRlIEFkbGVyLTMyIGZvciBwcm92aWRlZCBkaWN0aW9uYXJ5ICovXG4gIGlmICh3cmFwID09PSAxKSB7XG4gICAgLyogYWRsZXIzMihzdHJtLT5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7ICovXG4gICAgc3RybS5hZGxlciA9IGFkbGVyMzIoc3RybS5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgMCk7XG4gIH1cblxuICBzLndyYXAgPSAwOyAgIC8qIGF2b2lkIGNvbXB1dGluZyBBZGxlci0zMiBpbiByZWFkX2J1ZiAqL1xuXG4gIC8qIGlmIGRpY3Rpb25hcnkgd291bGQgZmlsbCB3aW5kb3csIGp1c3QgcmVwbGFjZSB0aGUgaGlzdG9yeSAqL1xuICBpZiAoZGljdExlbmd0aCA+PSBzLndfc2l6ZSkge1xuICAgIGlmICh3cmFwID09PSAwKSB7ICAgICAgICAgICAgLyogYWxyZWFkeSBlbXB0eSBvdGhlcndpc2UgKi9cbiAgICAgIC8qKiogQ0xFQVJfSEFTSChzKTsgKioqL1xuICAgICAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApO1xuICAgICAgcy5zdHJzdGFydCA9IDA7XG4gICAgICBzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgICAgIHMuaW5zZXJ0ID0gMDtcbiAgICB9XG4gICAgLyogdXNlIHRoZSB0YWlsICovXG4gICAgLy8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkuc2xpY2UoZGljdExlbmd0aCAtIHMud19zaXplKTtcbiAgICB0bXBEaWN0ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUpO1xuICAgIHV0aWxzLmFycmF5U2V0KHRtcERpY3QsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGggLSBzLndfc2l6ZSwgcy53X3NpemUsIDApO1xuICAgIGRpY3Rpb25hcnkgPSB0bXBEaWN0O1xuICAgIGRpY3RMZW5ndGggPSBzLndfc2l6ZTtcbiAgfVxuICAvKiBpbnNlcnQgZGljdGlvbmFyeSBpbnRvIHdpbmRvdyBhbmQgaGFzaCAqL1xuICBhdmFpbCA9IHN0cm0uYXZhaWxfaW47XG4gIG5leHQgPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgc3RybS5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7XG4gIHN0cm0ubmV4dF9pbiA9IDA7XG4gIHN0cm0uaW5wdXQgPSBkaWN0aW9uYXJ5O1xuICBmaWxsX3dpbmRvdyhzKTtcbiAgd2hpbGUgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgIHN0ciA9IHMuc3Ryc3RhcnQ7XG4gICAgbiA9IHMubG9va2FoZWFkIC0gKE1JTl9NQVRDSCAtIDEpO1xuICAgIGRvIHtcbiAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsgKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuXG4gICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuXG4gICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzdHI7XG4gICAgICBzdHIrKztcbiAgICB9IHdoaWxlICgtLW4pO1xuICAgIHMuc3Ryc3RhcnQgPSBzdHI7XG4gICAgcy5sb29rYWhlYWQgPSBNSU5fTUFUQ0ggLSAxO1xuICAgIGZpbGxfd2luZG93KHMpO1xuICB9XG4gIHMuc3Ryc3RhcnQgKz0gcy5sb29rYWhlYWQ7XG4gIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0O1xuICBzLmluc2VydCA9IHMubG9va2FoZWFkO1xuICBzLmxvb2thaGVhZCA9IDA7XG4gIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7XG4gIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgc3RybS5pbnB1dCA9IGlucHV0O1xuICBzdHJtLmF2YWlsX2luID0gYXZhaWw7XG4gIHMud3JhcCA9IHdyYXA7XG4gIHJldHVybiBaX09LO1xufVxuXG5cbmV4cG9ydHMuZGVmbGF0ZUluaXQgPSBkZWZsYXRlSW5pdDtcbmV4cG9ydHMuZGVmbGF0ZUluaXQyID0gZGVmbGF0ZUluaXQyO1xuZXhwb3J0cy5kZWZsYXRlUmVzZXQgPSBkZWZsYXRlUmVzZXQ7XG5leHBvcnRzLmRlZmxhdGVSZXNldEtlZXAgPSBkZWZsYXRlUmVzZXRLZWVwO1xuZXhwb3J0cy5kZWZsYXRlU2V0SGVhZGVyID0gZGVmbGF0ZVNldEhlYWRlcjtcbmV4cG9ydHMuZGVmbGF0ZSA9IGRlZmxhdGU7XG5leHBvcnRzLmRlZmxhdGVFbmQgPSBkZWZsYXRlRW5kO1xuZXhwb3J0cy5kZWZsYXRlU2V0RGljdGlvbmFyeSA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5O1xuZXhwb3J0cy5kZWZsYXRlSW5mbyA9ICdwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpJztcblxuLyogTm90IGltcGxlbWVudGVkXG5leHBvcnRzLmRlZmxhdGVCb3VuZCA9IGRlZmxhdGVCb3VuZDtcbmV4cG9ydHMuZGVmbGF0ZUNvcHkgPSBkZWZsYXRlQ29weTtcbmV4cG9ydHMuZGVmbGF0ZVBhcmFtcyA9IGRlZmxhdGVQYXJhbXM7XG5leHBvcnRzLmRlZmxhdGVQZW5kaW5nID0gZGVmbGF0ZVBlbmRpbmc7XG5leHBvcnRzLmRlZmxhdGVQcmltZSA9IGRlZmxhdGVQcmltZTtcbmV4cG9ydHMuZGVmbGF0ZVR1bmUgPSBkZWZsYXRlVHVuZTtcbiovXG4iLCIvLyBTdHJpbmcgZW5jb2RlL2RlY29kZSBoZWxwZXJzXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxuXG4vLyBRdWljayBjaGVjayBpZiB3ZSBjYW4gdXNlIGZhc3QgYXJyYXkgdG8gYmluIHN0cmluZyBjb252ZXJzaW9uXG4vL1xuLy8gLSBhcHBseShBcnJheSkgY2FuIGZhaWwgb24gQW5kcm9pZCAyLjJcbi8vIC0gYXBwbHkoVWludDhBcnJheSkgY2FuIGZhaWwgb24gaU9TIDUuMSBTYWZhcmlcbi8vXG52YXIgU1RSX0FQUExZX09LID0gdHJ1ZTtcbnZhciBTVFJfQVBQTFlfVUlBX09LID0gdHJ1ZTtcblxudHJ5IHsgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBbIDAgXSk7IH0gY2F0Y2ggKF9fKSB7IFNUUl9BUFBMWV9PSyA9IGZhbHNlOyB9XG50cnkgeyBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KDEpKTsgfSBjYXRjaCAoX18pIHsgU1RSX0FQUExZX1VJQV9PSyA9IGZhbHNlOyB9XG5cblxuLy8gVGFibGUgd2l0aCB1dGY4IGxlbmd0aHMgKGNhbGN1bGF0ZWQgYnkgZmlyc3QgYnl0ZSBvZiBzZXF1ZW5jZSlcbi8vIE5vdGUsIHRoYXQgNSAmIDYtYnl0ZSB2YWx1ZXMgYW5kIHNvbWUgNC1ieXRlIHZhbHVlcyBjYW4gbm90IGJlIHJlcHJlc2VudGVkIGluIEpTLFxuLy8gYmVjYXVzZSBtYXggcG9zc2libGUgY29kZXBvaW50IGlzIDB4MTBmZmZmXG52YXIgX3V0ZjhsZW4gPSBuZXcgdXRpbHMuQnVmOCgyNTYpO1xuZm9yICh2YXIgcSA9IDA7IHEgPCAyNTY7IHErKykge1xuICBfdXRmOGxlbltxXSA9IChxID49IDI1MiA/IDYgOiBxID49IDI0OCA/IDUgOiBxID49IDI0MCA/IDQgOiBxID49IDIyNCA/IDMgOiBxID49IDE5MiA/IDIgOiAxKTtcbn1cbl91dGY4bGVuWzI1NF0gPSBfdXRmOGxlblsyNTRdID0gMTsgLy8gSW52YWxpZCBzZXF1ZW5jZSBzdGFydFxuXG5cbi8vIGNvbnZlcnQgc3RyaW5nIHRvIGFycmF5ICh0eXBlZCwgd2hlbiBwb3NzaWJsZSlcbmV4cG9ydHMuc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgdmFyIGJ1ZiwgYywgYzIsIG1fcG9zLCBpLCBzdHJfbGVuID0gc3RyLmxlbmd0aCwgYnVmX2xlbiA9IDA7XG5cbiAgLy8gY291bnQgYmluYXJ5IHNpemVcbiAgZm9yIChtX3BvcyA9IDA7IG1fcG9zIDwgc3RyX2xlbjsgbV9wb3MrKykge1xuICAgIGMgPSBzdHIuY2hhckNvZGVBdChtX3Bvcyk7XG4gICAgaWYgKChjICYgMHhmYzAwKSA9PT0gMHhkODAwICYmIChtX3BvcyArIDEgPCBzdHJfbGVuKSkge1xuICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChtX3BvcyArIDEpO1xuICAgICAgaWYgKChjMiAmIDB4ZmMwMCkgPT09IDB4ZGMwMCkge1xuICAgICAgICBjID0gMHgxMDAwMCArICgoYyAtIDB4ZDgwMCkgPDwgMTApICsgKGMyIC0gMHhkYzAwKTtcbiAgICAgICAgbV9wb3MrKztcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmX2xlbiArPSBjIDwgMHg4MCA/IDEgOiBjIDwgMHg4MDAgPyAyIDogYyA8IDB4MTAwMDAgPyAzIDogNDtcbiAgfVxuXG4gIC8vIGFsbG9jYXRlIGJ1ZmZlclxuICBidWYgPSBuZXcgdXRpbHMuQnVmOChidWZfbGVuKTtcblxuICAvLyBjb252ZXJ0XG4gIGZvciAoaSA9IDAsIG1fcG9zID0gMDsgaSA8IGJ1Zl9sZW47IG1fcG9zKyspIHtcbiAgICBjID0gc3RyLmNoYXJDb2RlQXQobV9wb3MpO1xuICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAobV9wb3MgKyAxIDwgc3RyX2xlbikpIHtcbiAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MgKyAxKTtcbiAgICAgIGlmICgoYzIgJiAweGZjMDApID09PSAweGRjMDApIHtcbiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgLSAweGQ4MDApIDw8IDEwKSArIChjMiAtIDB4ZGMwMCk7XG4gICAgICAgIG1fcG9zKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgLyogb25lIGJ5dGUgKi9cbiAgICAgIGJ1ZltpKytdID0gYztcbiAgICB9IGVsc2UgaWYgKGMgPCAweDgwMCkge1xuICAgICAgLyogdHdvIGJ5dGVzICovXG4gICAgICBidWZbaSsrXSA9IDB4QzAgfCAoYyA+Pj4gNik7XG4gICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyAmIDB4M2YpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4MTAwMDApIHtcbiAgICAgIC8qIHRocmVlIGJ5dGVzICovXG4gICAgICBidWZbaSsrXSA9IDB4RTAgfCAoYyA+Pj4gMTIpO1xuICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDYgJiAweDNmKTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGZvdXIgYnl0ZXMgKi9cbiAgICAgIGJ1ZltpKytdID0gMHhmMCB8IChjID4+PiAxOCk7XG4gICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyA+Pj4gMTIgJiAweDNmKTtcbiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjID4+PiA2ICYgMHgzZik7XG4gICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyAmIDB4M2YpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWY7XG59O1xuXG4vLyBIZWxwZXIgKHVzZWQgaW4gMiBwbGFjZXMpXG5mdW5jdGlvbiBidWYyYmluc3RyaW5nKGJ1ZiwgbGVuKSB7XG4gIC8vIHVzZSBmYWxsYmFjayBmb3IgYmlnIGFycmF5cyB0byBhdm9pZCBzdGFjayBvdmVyZmxvd1xuICBpZiAobGVuIDwgNjU1MzcpIHtcbiAgICBpZiAoKGJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfVUlBX09LKSB8fCAoIWJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfT0spKSB7XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB1dGlscy5zaHJpbmtCdWYoYnVmLCBsZW4pKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cblxuLy8gQ29udmVydCBieXRlIGFycmF5IHRvIGJpbmFyeSBzdHJpbmdcbmV4cG9ydHMuYnVmMmJpbnN0cmluZyA9IGZ1bmN0aW9uIChidWYpIHtcbiAgcmV0dXJuIGJ1ZjJiaW5zdHJpbmcoYnVmLCBidWYubGVuZ3RoKTtcbn07XG5cblxuLy8gQ29udmVydCBiaW5hcnkgc3RyaW5nICh0eXBlZCwgd2hlbiBwb3NzaWJsZSlcbmV4cG9ydHMuYmluc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgdmFyIGJ1ZiA9IG5ldyB1dGlscy5CdWY4KHN0ci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYnVmW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn07XG5cblxuLy8gY29udmVydCBhcnJheSB0byBzdHJpbmdcbmV4cG9ydHMuYnVmMnN0cmluZyA9IGZ1bmN0aW9uIChidWYsIG1heCkge1xuICB2YXIgaSwgb3V0LCBjLCBjX2xlbjtcbiAgdmFyIGxlbiA9IG1heCB8fCBidWYubGVuZ3RoO1xuXG4gIC8vIFJlc2VydmUgbWF4IHBvc3NpYmxlIGxlbmd0aCAoMiB3b3JkcyBwZXIgY2hhcilcbiAgLy8gTkI6IGJ5IHVua25vd24gcmVhc29ucywgQXJyYXkgaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIgZm9yXG4gIC8vICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5IHRoYW4gVWludDE2QXJyYXkuXG4gIHZhciB1dGYxNmJ1ZiA9IG5ldyBBcnJheShsZW4gKiAyKTtcblxuICBmb3IgKG91dCA9IDAsIGkgPSAwOyBpIDwgbGVuOykge1xuICAgIGMgPSBidWZbaSsrXTtcbiAgICAvLyBxdWljayBwcm9jZXNzIGFzY2lpXG4gICAgaWYgKGMgPCAweDgwKSB7IHV0ZjE2YnVmW291dCsrXSA9IGM7IGNvbnRpbnVlOyB9XG5cbiAgICBjX2xlbiA9IF91dGY4bGVuW2NdO1xuICAgIC8vIHNraXAgNSAmIDYgYnl0ZSBjb2Rlc1xuICAgIGlmIChjX2xlbiA+IDQpIHsgdXRmMTZidWZbb3V0KytdID0gMHhmZmZkOyBpICs9IGNfbGVuIC0gMTsgY29udGludWU7IH1cblxuICAgIC8vIGFwcGx5IG1hc2sgb24gZmlyc3QgYnl0ZVxuICAgIGMgJj0gY19sZW4gPT09IDIgPyAweDFmIDogY19sZW4gPT09IDMgPyAweDBmIDogMHgwNztcbiAgICAvLyBqb2luIHRoZSByZXN0XG4gICAgd2hpbGUgKGNfbGVuID4gMSAmJiBpIDwgbGVuKSB7XG4gICAgICBjID0gKGMgPDwgNikgfCAoYnVmW2krK10gJiAweDNmKTtcbiAgICAgIGNfbGVuLS07XG4gICAgfVxuXG4gICAgLy8gdGVybWluYXRlZCBieSBlbmQgb2Ygc3RyaW5nP1xuICAgIGlmIChjX2xlbiA+IDEpIHsgdXRmMTZidWZbb3V0KytdID0gMHhmZmZkOyBjb250aW51ZTsgfVxuXG4gICAgaWYgKGMgPCAweDEwMDAwKSB7XG4gICAgICB1dGYxNmJ1ZltvdXQrK10gPSBjO1xuICAgIH0gZWxzZSB7XG4gICAgICBjIC09IDB4MTAwMDA7XG4gICAgICB1dGYxNmJ1ZltvdXQrK10gPSAweGQ4MDAgfCAoKGMgPj4gMTApICYgMHgzZmYpO1xuICAgICAgdXRmMTZidWZbb3V0KytdID0gMHhkYzAwIHwgKGMgJiAweDNmZik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZjJiaW5zdHJpbmcodXRmMTZidWYsIG91dCk7XG59O1xuXG5cbi8vIENhbGN1bGF0ZSBtYXggcG9zc2libGUgcG9zaXRpb24gaW4gdXRmOCBidWZmZXIsXG4vLyB0aGF0IHdpbGwgbm90IGJyZWFrIHNlcXVlbmNlLiBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlXG4vLyAtICh2ZXJ5IHNtYWxsIGxpbWl0cykgcmV0dXJuIG1heCBzaXplIGFzIGlzLlxuLy9cbi8vIGJ1ZltdIC0gdXRmOCBieXRlcyBhcnJheVxuLy8gbWF4ICAgLSBsZW5ndGggbGltaXQgKG1hbmRhdG9yeSk7XG5leHBvcnRzLnV0Zjhib3JkZXIgPSBmdW5jdGlvbiAoYnVmLCBtYXgpIHtcbiAgdmFyIHBvcztcblxuICBtYXggPSBtYXggfHwgYnVmLmxlbmd0aDtcbiAgaWYgKG1heCA+IGJ1Zi5sZW5ndGgpIHsgbWF4ID0gYnVmLmxlbmd0aDsgfVxuXG4gIC8vIGdvIGJhY2sgZnJvbSBsYXN0IHBvc2l0aW9uLCB1bnRpbCBzdGFydCBvZiBzZXF1ZW5jZSBmb3VuZFxuICBwb3MgPSBtYXggLSAxO1xuICB3aGlsZSAocG9zID49IDAgJiYgKGJ1Zltwb3NdICYgMHhDMCkgPT09IDB4ODApIHsgcG9zLS07IH1cblxuICAvLyBWZXJ5IHNtYWxsIGFuZCBicm9rZW4gc2VxdWVuY2UsXG4gIC8vIHJldHVybiBtYXgsIGJlY2F1c2Ugd2Ugc2hvdWxkIHJldHVybiBzb21ldGhpbmcgYW55d2F5LlxuICBpZiAocG9zIDwgMCkgeyByZXR1cm4gbWF4OyB9XG5cbiAgLy8gSWYgd2UgY2FtZSB0byBzdGFydCBvZiBidWZmZXIgLSB0aGF0IG1lYW5zIGJ1ZmZlciBpcyB0b28gc21hbGwsXG4gIC8vIHJldHVybiBtYXggdG9vLlxuICBpZiAocG9zID09PSAwKSB7IHJldHVybiBtYXg7IH1cblxuICByZXR1cm4gKHBvcyArIF91dGY4bGVuW2J1Zltwb3NdXSA+IG1heCkgPyBwb3MgOiBtYXg7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB6bGliX2RlZmxhdGUgPSByZXF1aXJlKCcuL3psaWIvZGVmbGF0ZScpO1xudmFyIHV0aWxzICAgICAgICA9IHJlcXVpcmUoJy4vdXRpbHMvY29tbW9uJyk7XG52YXIgc3RyaW5ncyAgICAgID0gcmVxdWlyZSgnLi91dGlscy9zdHJpbmdzJyk7XG52YXIgbXNnICAgICAgICAgID0gcmVxdWlyZSgnLi96bGliL21lc3NhZ2VzJyk7XG52YXIgWlN0cmVhbSAgICAgID0gcmVxdWlyZSgnLi96bGliL3pzdHJlYW0nKTtcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyogUHVibGljIGNvbnN0YW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbnZhciBaX05PX0ZMVVNIICAgICAgPSAwO1xudmFyIFpfRklOSVNIICAgICAgICA9IDQ7XG5cbnZhciBaX09LICAgICAgICAgICAgPSAwO1xudmFyIFpfU1RSRUFNX0VORCAgICA9IDE7XG52YXIgWl9TWU5DX0ZMVVNIICAgID0gMjtcblxudmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xO1xuXG52YXIgWl9ERUZBVUxUX1NUUkFURUdZICAgID0gMDtcblxudmFyIFpfREVGTEFURUQgID0gODtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vKipcbiAqIGNsYXNzIERlZmxhdGVcbiAqXG4gKiBHZW5lcmljIEpTLXN0eWxlIHdyYXBwZXIgZm9yIHpsaWIgY2FsbHMuIElmIHlvdSBkb24ndCBuZWVkXG4gKiBzdHJlYW1pbmcgYmVoYXZpb3VyIC0gdXNlIG1vcmUgc2ltcGxlIGZ1bmN0aW9uczogW1tkZWZsYXRlXV0sXG4gKiBbW2RlZmxhdGVSYXddXSBhbmQgW1tnemlwXV0uXG4gKiovXG5cbi8qIGludGVybmFsXG4gKiBEZWZsYXRlLmNodW5rcyAtPiBBcnJheVxuICpcbiAqIENodW5rcyBvZiBvdXRwdXQgZGF0YSwgaWYgW1tEZWZsYXRlI29uRGF0YV1dIG5vdCBvdmVycmlkZGVuLlxuICoqL1xuXG4vKipcbiAqIERlZmxhdGUucmVzdWx0IC0+IFVpbnQ4QXJyYXl8QXJyYXlcbiAqXG4gKiBDb21wcmVzc2VkIHJlc3VsdCwgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgW1tEZWZsYXRlI29uRGF0YV1dXG4gKiBhbmQgW1tEZWZsYXRlI29uRW5kXV0gaGFuZGxlcnMuIEZpbGxlZCBhZnRlciB5b3UgcHVzaCBsYXN0IGNodW5rXG4gKiAoY2FsbCBbW0RlZmxhdGUjcHVzaF1dIHdpdGggYFpfRklOSVNIYCAvIGB0cnVlYCBwYXJhbSkgIG9yIGlmIHlvdVxuICogcHVzaCBhIGNodW5rIHdpdGggZXhwbGljaXQgZmx1c2ggKGNhbGwgW1tEZWZsYXRlI3B1c2hdXSB3aXRoXG4gKiBgWl9TWU5DX0ZMVVNIYCBwYXJhbSkuXG4gKiovXG5cbi8qKlxuICogRGVmbGF0ZS5lcnIgLT4gTnVtYmVyXG4gKlxuICogRXJyb3IgY29kZSBhZnRlciBkZWZsYXRlIGZpbmlzaGVkLiAwIChaX09LKSBvbiBzdWNjZXNzLlxuICogWW91IHdpbGwgbm90IG5lZWQgaXQgaW4gcmVhbCBsaWZlLCBiZWNhdXNlIGRlZmxhdGUgZXJyb3JzXG4gKiBhcmUgcG9zc2libGUgb25seSBvbiB3cm9uZyBvcHRpb25zIG9yIGJhZCBgb25EYXRhYCAvIGBvbkVuZGBcbiAqIGN1c3RvbSBoYW5kbGVycy5cbiAqKi9cblxuLyoqXG4gKiBEZWZsYXRlLm1zZyAtPiBTdHJpbmdcbiAqXG4gKiBFcnJvciBtZXNzYWdlLCBpZiBbW0RlZmxhdGUuZXJyXV0gIT0gMFxuICoqL1xuXG5cbi8qKlxuICogbmV3IERlZmxhdGUob3B0aW9ucylcbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBkZWZsYXRlIG9wdGlvbnMuXG4gKlxuICogQ3JlYXRlcyBuZXcgZGVmbGF0b3IgaW5zdGFuY2Ugd2l0aCBzcGVjaWZpZWQgcGFyYW1zLiBUaHJvd3MgZXhjZXB0aW9uXG4gKiBvbiBiYWQgcGFyYW1zLiBTdXBwb3J0ZWQgb3B0aW9uczpcbiAqXG4gKiAtIGBsZXZlbGBcbiAqIC0gYHdpbmRvd0JpdHNgXG4gKiAtIGBtZW1MZXZlbGBcbiAqIC0gYHN0cmF0ZWd5YFxuICogLSBgZGljdGlvbmFyeWBcbiAqXG4gKiBbaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkXShodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWQpXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZS5cbiAqXG4gKiBBZGRpdGlvbmFsIG9wdGlvbnMsIGZvciBpbnRlcm5hbCBuZWVkczpcbiAqXG4gKiAtIGBjaHVua1NpemVgIC0gc2l6ZSBvZiBnZW5lcmF0ZWQgZGF0YSBjaHVua3MgKDE2SyBieSBkZWZhdWx0KVxuICogLSBgcmF3YCAoQm9vbGVhbikgLSBkbyByYXcgZGVmbGF0ZVxuICogLSBgZ3ppcGAgKEJvb2xlYW4pIC0gY3JlYXRlIGd6aXAgd3JhcHBlclxuICogLSBgdG9gIChTdHJpbmcpIC0gaWYgZXF1YWwgdG8gJ3N0cmluZycsIHRoZW4gcmVzdWx0IHdpbGwgYmUgXCJiaW5hcnkgc3RyaW5nXCJcbiAqICAgIChlYWNoIGNoYXIgY29kZSBbMC4uMjU1XSlcbiAqIC0gYGhlYWRlcmAgKE9iamVjdCkgLSBjdXN0b20gaGVhZGVyIGZvciBnemlwXG4gKiAgIC0gYHRleHRgIChCb29sZWFuKSAtIHRydWUgaWYgY29tcHJlc3NlZCBkYXRhIGJlbGlldmVkIHRvIGJlIHRleHRcbiAqICAgLSBgdGltZWAgKE51bWJlcikgLSBtb2RpZmljYXRpb24gdGltZSwgdW5peCB0aW1lc3RhbXBcbiAqICAgLSBgb3NgIChOdW1iZXIpIC0gb3BlcmF0aW9uIHN5c3RlbSBjb2RlXG4gKiAgIC0gYGV4dHJhYCAoQXJyYXkpIC0gYXJyYXkgb2YgYnl0ZXMgd2l0aCBleHRyYSBkYXRhIChtYXggNjU1MzYpXG4gKiAgIC0gYG5hbWVgIChTdHJpbmcpIC0gZmlsZSBuYW1lIChiaW5hcnkgc3RyaW5nKVxuICogICAtIGBjb21tZW50YCAoU3RyaW5nKSAtIGNvbW1lbnQgKGJpbmFyeSBzdHJpbmcpXG4gKiAgIC0gYGhjcmNgIChCb29sZWFuKSAtIHRydWUgaWYgaGVhZGVyIGNyYyBzaG91bGQgYmUgYWRkZWRcbiAqXG4gKiAjIyMjIyBFeGFtcGxlOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHZhciBwYWtvID0gcmVxdWlyZSgncGFrbycpXG4gKiAgICwgY2h1bmsxID0gVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKVxuICogICAsIGNodW5rMiA9IFVpbnQ4QXJyYXkoWzEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5XSk7XG4gKlxuICogdmFyIGRlZmxhdGUgPSBuZXcgcGFrby5EZWZsYXRlKHsgbGV2ZWw6IDN9KTtcbiAqXG4gKiBkZWZsYXRlLnB1c2goY2h1bmsxLCBmYWxzZSk7XG4gKiBkZWZsYXRlLnB1c2goY2h1bmsyLCB0cnVlKTsgIC8vIHRydWUgLT4gbGFzdCBjaHVua1xuICpcbiAqIGlmIChkZWZsYXRlLmVycikgeyB0aHJvdyBuZXcgRXJyb3IoZGVmbGF0ZS5lcnIpOyB9XG4gKlxuICogY29uc29sZS5sb2coZGVmbGF0ZS5yZXN1bHQpO1xuICogYGBgXG4gKiovXG5mdW5jdGlvbiBEZWZsYXRlKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERlZmxhdGUpKSByZXR1cm4gbmV3IERlZmxhdGUob3B0aW9ucyk7XG5cbiAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHtcbiAgICBsZXZlbDogWl9ERUZBVUxUX0NPTVBSRVNTSU9OLFxuICAgIG1ldGhvZDogWl9ERUZMQVRFRCxcbiAgICBjaHVua1NpemU6IDE2Mzg0LFxuICAgIHdpbmRvd0JpdHM6IDE1LFxuICAgIG1lbUxldmVsOiA4LFxuICAgIHN0cmF0ZWd5OiBaX0RFRkFVTFRfU1RSQVRFR1ksXG4gICAgdG86ICcnXG4gIH0sIG9wdGlvbnMgfHwge30pO1xuXG4gIHZhciBvcHQgPSB0aGlzLm9wdGlvbnM7XG5cbiAgaWYgKG9wdC5yYXcgJiYgKG9wdC53aW5kb3dCaXRzID4gMCkpIHtcbiAgICBvcHQud2luZG93Qml0cyA9IC1vcHQud2luZG93Qml0cztcbiAgfVxuXG4gIGVsc2UgaWYgKG9wdC5nemlwICYmIChvcHQud2luZG93Qml0cyA+IDApICYmIChvcHQud2luZG93Qml0cyA8IDE2KSkge1xuICAgIG9wdC53aW5kb3dCaXRzICs9IDE2O1xuICB9XG5cbiAgdGhpcy5lcnIgICAgPSAwOyAgICAgIC8vIGVycm9yIGNvZGUsIGlmIGhhcHBlbnMgKDAgPSBaX09LKVxuICB0aGlzLm1zZyAgICA9ICcnOyAgICAgLy8gZXJyb3IgbWVzc2FnZVxuICB0aGlzLmVuZGVkICA9IGZhbHNlOyAgLy8gdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBvbkVuZCgpIGNhbGxzXG4gIHRoaXMuY2h1bmtzID0gW107ICAgICAvLyBjaHVua3Mgb2YgY29tcHJlc3NlZCBkYXRhXG5cbiAgdGhpcy5zdHJtID0gbmV3IFpTdHJlYW0oKTtcbiAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7XG5cbiAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlSW5pdDIoXG4gICAgdGhpcy5zdHJtLFxuICAgIG9wdC5sZXZlbCxcbiAgICBvcHQubWV0aG9kLFxuICAgIG9wdC53aW5kb3dCaXRzLFxuICAgIG9wdC5tZW1MZXZlbCxcbiAgICBvcHQuc3RyYXRlZ3lcbiAgKTtcblxuICBpZiAoc3RhdHVzICE9PSBaX09LKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZ1tzdGF0dXNdKTtcbiAgfVxuXG4gIGlmIChvcHQuaGVhZGVyKSB7XG4gICAgemxpYl9kZWZsYXRlLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLCBvcHQuaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChvcHQuZGljdGlvbmFyeSkge1xuICAgIHZhciBkaWN0O1xuICAgIC8vIENvbnZlcnQgZGF0YSBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIG9wdC5kaWN0aW9uYXJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgd2UgbmVlZCB0byBjb21wcmVzcyB0ZXh0LCBjaGFuZ2UgZW5jb2RpbmcgdG8gdXRmOC5cbiAgICAgIGRpY3QgPSBzdHJpbmdzLnN0cmluZzJidWYob3B0LmRpY3Rpb25hcnkpO1xuICAgIH0gZWxzZSBpZiAodG9TdHJpbmcuY2FsbChvcHQuZGljdGlvbmFyeSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcbiAgICAgIGRpY3QgPSBuZXcgVWludDhBcnJheShvcHQuZGljdGlvbmFyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpY3QgPSBvcHQuZGljdGlvbmFyeTtcbiAgICB9XG5cbiAgICBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLCBkaWN0KTtcblxuICAgIGlmIChzdGF0dXMgIT09IFpfT0spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGljdF9zZXQgPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRGVmbGF0ZSNwdXNoKGRhdGFbLCBtb2RlXSkgLT4gQm9vbGVhblxuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fEFycmF5QnVmZmVyfFN0cmluZyk6IGlucHV0IGRhdGEuIFN0cmluZ3Mgd2lsbCBiZVxuICogICBjb252ZXJ0ZWQgdG8gdXRmOCBieXRlIHNlcXVlbmNlLlxuICogLSBtb2RlIChOdW1iZXJ8Qm9vbGVhbik6IDAuLjYgZm9yIGNvcnJlc3BvbmRpbmcgWl9OT19GTFVTSC4uWl9UUkVFIG1vZGVzLlxuICogICBTZWUgY29uc3RhbnRzLiBTa2lwcGVkIG9yIGBmYWxzZWAgbWVhbnMgWl9OT19GTFVTSCwgYHRydWVgIG1lYW5zIFpfRklOSVNILlxuICpcbiAqIFNlbmRzIGlucHV0IGRhdGEgdG8gZGVmbGF0ZSBwaXBlLCBnZW5lcmF0aW5nIFtbRGVmbGF0ZSNvbkRhdGFdXSBjYWxscyB3aXRoXG4gKiBuZXcgY29tcHJlc3NlZCBjaHVua3MuIFJldHVybnMgYHRydWVgIG9uIHN1Y2Nlc3MuIFRoZSBsYXN0IGRhdGEgYmxvY2sgbXVzdCBoYXZlXG4gKiBtb2RlIFpfRklOSVNIIChvciBgdHJ1ZWApLiBUaGF0IHdpbGwgZmx1c2ggaW50ZXJuYWwgcGVuZGluZyBidWZmZXJzIGFuZCBjYWxsXG4gKiBbW0RlZmxhdGUjb25FbmRdXS4gRm9yIGludGVyaW0gZXhwbGljaXQgZmx1c2hlcyAod2l0aG91dCBlbmRpbmcgdGhlIHN0cmVhbSkgeW91XG4gKiBjYW4gdXNlIG1vZGUgWl9TWU5DX0ZMVVNILCBrZWVwaW5nIHRoZSBjb21wcmVzc2lvbiBjb250ZXh0LlxuICpcbiAqIE9uIGZhaWwgY2FsbCBbW0RlZmxhdGUjb25FbmRdXSB3aXRoIGVycm9yIGNvZGUgYW5kIHJldHVybiBmYWxzZS5cbiAqXG4gKiBXZSBzdHJvbmdseSByZWNvbW1lbmQgdG8gdXNlIGBVaW50OEFycmF5YCBvbiBpbnB1dCBmb3IgYmVzdCBzcGVlZCAob3V0cHV0XG4gKiBhcnJheSBmb3JtYXQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSkuIEFsc28sIGRvbid0IHNraXAgbGFzdCBwYXJhbSBhbmQgYWx3YXlzXG4gKiB1c2UgdGhlIHNhbWUgdHlwZSBpbiB5b3VyIGNvZGUgKGJvb2xlYW4gb3IgbnVtYmVyKS4gVGhhdCB3aWxsIGltcHJvdmUgSlMgc3BlZWQuXG4gKlxuICogRm9yIHJlZ3VsYXIgYEFycmF5YC1zIG1ha2Ugc3VyZSBhbGwgZWxlbWVudHMgYXJlIFswLi4yNTVdLlxuICpcbiAqICMjIyMjIEV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBwdXNoKGNodW5rLCBmYWxzZSk7IC8vIHB1c2ggb25lIG9mIGRhdGEgY2h1bmtzXG4gKiAuLi5cbiAqIHB1c2goY2h1bmssIHRydWUpOyAgLy8gcHVzaCBsYXN0IGNodW5rXG4gKiBgYGBcbiAqKi9cbkRlZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSwgbW9kZSkge1xuICB2YXIgc3RybSA9IHRoaXMuc3RybTtcbiAgdmFyIGNodW5rU2l6ZSA9IHRoaXMub3B0aW9ucy5jaHVua1NpemU7XG4gIHZhciBzdGF0dXMsIF9tb2RlO1xuXG4gIGlmICh0aGlzLmVuZGVkKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIF9tb2RlID0gKG1vZGUgPT09IH5+bW9kZSkgPyBtb2RlIDogKChtb2RlID09PSB0cnVlKSA/IFpfRklOSVNIIDogWl9OT19GTFVTSCk7XG5cbiAgLy8gQ29udmVydCBkYXRhIGlmIG5lZWRlZFxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gSWYgd2UgbmVlZCB0byBjb21wcmVzcyB0ZXh0LCBjaGFuZ2UgZW5jb2RpbmcgdG8gdXRmOC5cbiAgICBzdHJtLmlucHV0ID0gc3RyaW5ncy5zdHJpbmcyYnVmKGRhdGEpO1xuICB9IGVsc2UgaWYgKHRvU3RyaW5nLmNhbGwoZGF0YSkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpIHtcbiAgICBzdHJtLmlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgc3RybS5pbnB1dCA9IGRhdGE7XG4gIH1cblxuICBzdHJtLm5leHRfaW4gPSAwO1xuICBzdHJtLmF2YWlsX2luID0gc3RybS5pbnB1dC5sZW5ndGg7XG5cbiAgZG8ge1xuICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgc3RybS5vdXRwdXQgPSBuZXcgdXRpbHMuQnVmOChjaHVua1NpemUpO1xuICAgICAgc3RybS5uZXh0X291dCA9IDA7XG4gICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTtcbiAgICB9XG4gICAgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGUoc3RybSwgX21vZGUpOyAgICAvKiBubyBiYWQgcmV0dXJuIHZhbHVlICovXG5cbiAgICBpZiAoc3RhdHVzICE9PSBaX1NUUkVBTV9FTkQgJiYgc3RhdHVzICE9PSBaX09LKSB7XG4gICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7XG4gICAgICB0aGlzLmVuZGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IChzdHJtLmF2YWlsX2luID09PSAwICYmIChfbW9kZSA9PT0gWl9GSU5JU0ggfHwgX21vZGUgPT09IFpfU1lOQ19GTFVTSCkpKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLm9uRGF0YShzdHJpbmdzLmJ1ZjJiaW5zdHJpbmcodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkRhdGEodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSk7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlICgoc3RybS5hdmFpbF9pbiA+IDAgfHwgc3RybS5hdmFpbF9vdXQgPT09IDApICYmIHN0YXR1cyAhPT0gWl9TVFJFQU1fRU5EKTtcblxuICAvLyBGaW5hbGl6ZSBvbiB0aGUgbGFzdCBjaHVuay5cbiAgaWYgKF9tb2RlID09PSBaX0ZJTklTSCkge1xuICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlRW5kKHRoaXMuc3RybSk7XG4gICAgdGhpcy5vbkVuZChzdGF0dXMpO1xuICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgIHJldHVybiBzdGF0dXMgPT09IFpfT0s7XG4gIH1cblxuICAvLyBjYWxsYmFjayBpbnRlcmltIHJlc3VsdHMgaWYgWl9TWU5DX0ZMVVNILlxuICBpZiAoX21vZGUgPT09IFpfU1lOQ19GTFVTSCkge1xuICAgIHRoaXMub25FbmQoWl9PSyk7XG4gICAgc3RybS5hdmFpbF9vdXQgPSAwO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5cbi8qKlxuICogRGVmbGF0ZSNvbkRhdGEoY2h1bmspIC0+IFZvaWRcbiAqIC0gY2h1bmsgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogb3V0cHV0IGRhdGEuIFR5cGUgb2YgYXJyYXkgZGVwZW5kc1xuICogICBvbiBqcyBlbmdpbmUgc3VwcG9ydC4gV2hlbiBzdHJpbmcgb3V0cHV0IHJlcXVlc3RlZCwgZWFjaCBjaHVua1xuICogICB3aWxsIGJlIHN0cmluZy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBzdG9yZXMgZGF0YSBibG9ja3MgaW4gYGNodW5rc1tdYCBwcm9wZXJ0eSBhbmQgZ2x1ZVxuICogdGhvc2UgaW4gYG9uRW5kYC4gT3ZlcnJpZGUgdGhpcyBoYW5kbGVyLCBpZiB5b3UgbmVlZCBhbm90aGVyIGJlaGF2aW91ci5cbiAqKi9cbkRlZmxhdGUucHJvdG90eXBlLm9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICB0aGlzLmNodW5rcy5wdXNoKGNodW5rKTtcbn07XG5cblxuLyoqXG4gKiBEZWZsYXRlI29uRW5kKHN0YXR1cykgLT4gVm9pZFxuICogLSBzdGF0dXMgKE51bWJlcik6IGRlZmxhdGUgc3RhdHVzLiAwIChaX09LKSBvbiBzdWNjZXNzLFxuICogICBvdGhlciBpZiBub3QuXG4gKlxuICogQ2FsbGVkIG9uY2UgYWZ0ZXIgeW91IHRlbGwgZGVmbGF0ZSB0aGF0IHRoZSBpbnB1dCBzdHJlYW0gaXNcbiAqIGNvbXBsZXRlIChaX0ZJTklTSCkgb3Igc2hvdWxkIGJlIGZsdXNoZWQgKFpfU1lOQ19GTFVTSClcbiAqIG9yIGlmIGFuIGVycm9yIGhhcHBlbmVkLiBCeSBkZWZhdWx0IC0gam9pbiBjb2xsZWN0ZWQgY2h1bmtzLFxuICogZnJlZSBtZW1vcnkgYW5kIGZpbGwgYHJlc3VsdHNgIC8gYGVycmAgcHJvcGVydGllcy5cbiAqKi9cbkRlZmxhdGUucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICAvLyBPbiBzdWNjZXNzIC0gam9pblxuICBpZiAoc3RhdHVzID09PSBaX09LKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5jaHVua3Muam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzdWx0ID0gdXRpbHMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcyk7XG4gICAgfVxuICB9XG4gIHRoaXMuY2h1bmtzID0gW107XG4gIHRoaXMuZXJyID0gc3RhdHVzO1xuICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7XG59O1xuXG5cbi8qKlxuICogZGVmbGF0ZShkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nXG4gKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBjb21wcmVzcy5cbiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBkZWZsYXRlIG9wdGlvbnMuXG4gKlxuICogQ29tcHJlc3MgYGRhdGFgIHdpdGggZGVmbGF0ZSBhbGdvcml0aG0gYW5kIGBvcHRpb25zYC5cbiAqXG4gKiBTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6XG4gKlxuICogLSBsZXZlbFxuICogLSB3aW5kb3dCaXRzXG4gKiAtIG1lbUxldmVsXG4gKiAtIHN0cmF0ZWd5XG4gKiAtIGRpY3Rpb25hcnlcbiAqXG4gKiBbaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkXShodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWQpXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZS5cbiAqXG4gKiBTdWdhciAob3B0aW9ucyk6XG4gKlxuICogLSBgcmF3YCAoQm9vbGVhbikgLSBzYXkgdGhhdCB3ZSB3b3JrIHdpdGggcmF3IHN0cmVhbSwgaWYgeW91IGRvbid0IHdpc2ggdG8gc3BlY2lmeVxuICogICBuZWdhdGl2ZSB3aW5kb3dCaXRzIGltcGxpY2l0bHkuXG4gKiAtIGB0b2AgKFN0cmluZykgLSBpZiBlcXVhbCB0byAnc3RyaW5nJywgdGhlbiByZXN1bHQgd2lsbCBiZSBcImJpbmFyeSBzdHJpbmdcIlxuICogICAgKGVhY2ggY2hhciBjb2RlIFswLi4yNTVdKVxuICpcbiAqICMjIyMjIEV4YW1wbGU6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIHBha28gPSByZXF1aXJlKCdwYWtvJylcbiAqICAgLCBkYXRhID0gVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwYWtvLmRlZmxhdGUoZGF0YSkpO1xuICogYGBgXG4gKiovXG5mdW5jdGlvbiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBkZWZsYXRvciA9IG5ldyBEZWZsYXRlKG9wdGlvbnMpO1xuXG4gIGRlZmxhdG9yLnB1c2goaW5wdXQsIHRydWUpO1xuXG4gIC8vIFRoYXQgd2lsbCBuZXZlciBoYXBwZW5zLCBpZiB5b3UgZG9uJ3QgY2hlYXQgd2l0aCBvcHRpb25zIDopXG4gIGlmIChkZWZsYXRvci5lcnIpIHsgdGhyb3cgZGVmbGF0b3IubXNnIHx8IG1zZ1tkZWZsYXRvci5lcnJdOyB9XG5cbiAgcmV0dXJuIGRlZmxhdG9yLnJlc3VsdDtcbn1cblxuXG4vKipcbiAqIGRlZmxhdGVSYXcoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZ1xuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gY29tcHJlc3MuXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgZGVmbGF0ZSBvcHRpb25zLlxuICpcbiAqIFRoZSBzYW1lIGFzIFtbZGVmbGF0ZV1dLCBidXQgY3JlYXRlcyByYXcgZGF0YSwgd2l0aG91dCB3cmFwcGVyXG4gKiAoaGVhZGVyIGFuZCBhZGxlcjMyIGNyYykuXG4gKiovXG5mdW5jdGlvbiBkZWZsYXRlUmF3KGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLnJhdyA9IHRydWU7XG4gIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKTtcbn1cblxuXG4vKipcbiAqIGd6aXAoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZ1xuICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gY29tcHJlc3MuXG4gKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgZGVmbGF0ZSBvcHRpb25zLlxuICpcbiAqIFRoZSBzYW1lIGFzIFtbZGVmbGF0ZV1dLCBidXQgY3JlYXRlIGd6aXAgd3JhcHBlciBpbnN0ZWFkIG9mXG4gKiBkZWZsYXRlIG9uZS5cbiAqKi9cbmZ1bmN0aW9uIGd6aXAoaW5wdXQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuZ3ppcCA9IHRydWU7XG4gIHJldHVybiBkZWZsYXRlKGlucHV0LCBvcHRpb25zKTtcbn1cblxuXG5leHBvcnRzLkRlZmxhdGUgPSBEZWZsYXRlO1xuZXhwb3J0cy5kZWZsYXRlID0gZGVmbGF0ZTtcbmV4cG9ydHMuZGVmbGF0ZVJhdyA9IGRlZmxhdGVSYXc7XG5leHBvcnRzLmd6aXAgPSBnemlwO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBUWVBFRF9PSyA9ICAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgVWludDE2QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpO1xuXG5mdW5jdGlvbiBfaGFzKG9iaiwga2V5KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufVxuXG5leHBvcnRzLmFzc2lnbiA9IGZ1bmN0aW9uIChvYmogLypmcm9tMSwgZnJvbTIsIGZyb20zLCAuLi4qLykge1xuICB2YXIgc291cmNlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHdoaWxlIChzb3VyY2VzLmxlbmd0aCkge1xuICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzLnNoaWZ0KCk7XG4gICAgaWYgKCFzb3VyY2UpIHsgY29udGludWU7IH1cblxuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzb3VyY2UgKyAnbXVzdCBiZSBub24tb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgcCBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChfaGFzKHNvdXJjZSwgcCkpIHtcbiAgICAgICAgb2JqW3BdID0gc291cmNlW3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5cbi8vIHJlZHVjZSBidWZmZXIgc2l6ZSwgYXZvaWRpbmcgbWVtIGNvcHlcbmV4cG9ydHMuc2hyaW5rQnVmID0gZnVuY3Rpb24gKGJ1Ziwgc2l6ZSkge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gc2l6ZSkgeyByZXR1cm4gYnVmOyB9XG4gIGlmIChidWYuc3ViYXJyYXkpIHsgcmV0dXJuIGJ1Zi5zdWJhcnJheSgwLCBzaXplKTsgfVxuICBidWYubGVuZ3RoID0gc2l6ZTtcbiAgcmV0dXJuIGJ1Zjtcbn07XG5cblxudmFyIGZuVHlwZWQgPSB7XG4gIGFycmF5U2V0OiBmdW5jdGlvbiAoZGVzdCwgc3JjLCBzcmNfb2ZmcywgbGVuLCBkZXN0X29mZnMpIHtcbiAgICBpZiAoc3JjLnN1YmFycmF5ICYmIGRlc3Quc3ViYXJyYXkpIHtcbiAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNfb2Zmcywgc3JjX29mZnMgKyBsZW4pLCBkZXN0X29mZnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBvcmRpbmFyeSBhcnJheVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTtcbiAgICB9XG4gIH0sXG4gIC8vIEpvaW4gYXJyYXkgb2YgY2h1bmtzIHRvIHNpbmdsZSBhcnJheS5cbiAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24gKGNodW5rcykge1xuICAgIHZhciBpLCBsLCBsZW4sIHBvcywgY2h1bmssIHJlc3VsdDtcblxuICAgIC8vIGNhbGN1bGF0ZSBkYXRhIGxlbmd0aFxuICAgIGxlbiA9IDA7XG4gICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGxlbiArPSBjaHVua3NbaV0ubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIGpvaW4gY2h1bmtzXG4gICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBwb3MgPSAwO1xuICAgIGZvciAoaSA9IDAsIGwgPSBjaHVua3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjaHVuayA9IGNodW5rc1tpXTtcbiAgICAgIHJlc3VsdC5zZXQoY2h1bmssIHBvcyk7XG4gICAgICBwb3MgKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbnZhciBmblVudHlwZWQgPSB7XG4gIGFycmF5U2V0OiBmdW5jdGlvbiAoZGVzdCwgc3JjLCBzcmNfb2ZmcywgbGVuLCBkZXN0X29mZnMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0W2Rlc3Rfb2ZmcyArIGldID0gc3JjW3NyY19vZmZzICsgaV07XG4gICAgfVxuICB9LFxuICAvLyBKb2luIGFycmF5IG9mIGNodW5rcyB0byBzaW5nbGUgYXJyYXkuXG4gIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uIChjaHVua3MpIHtcbiAgICByZXR1cm4gW10uY29uY2F0LmFwcGx5KFtdLCBjaHVua3MpO1xuICB9XG59O1xuXG5cbi8vIEVuYWJsZS9EaXNhYmxlIHR5cGVkIGFycmF5cyB1c2UsIGZvciB0ZXN0aW5nXG4vL1xuZXhwb3J0cy5zZXRUeXBlZCA9IGZ1bmN0aW9uIChvbikge1xuICBpZiAob24pIHtcbiAgICBleHBvcnRzLkJ1ZjggID0gVWludDhBcnJheTtcbiAgICBleHBvcnRzLkJ1ZjE2ID0gVWludDE2QXJyYXk7XG4gICAgZXhwb3J0cy5CdWYzMiA9IEludDMyQXJyYXk7XG4gICAgZXhwb3J0cy5hc3NpZ24oZXhwb3J0cywgZm5UeXBlZCk7XG4gIH0gZWxzZSB7XG4gICAgZXhwb3J0cy5CdWY4ICA9IEFycmF5O1xuICAgIGV4cG9ydHMuQnVmMTYgPSBBcnJheTtcbiAgICBleHBvcnRzLkJ1ZjMyID0gQXJyYXk7XG4gICAgZXhwb3J0cy5hc3NpZ24oZXhwb3J0cywgZm5VbnR5cGVkKTtcbiAgfVxufTtcblxuZXhwb3J0cy5zZXRUeXBlZChUWVBFRF9PSyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIE5vdGU6IGFkbGVyMzIgdGFrZXMgMTIlIGZvciBsZXZlbCAwIGFuZCAyJSBmb3IgbGV2ZWwgNi5cbi8vIEl0IGlzbid0IHdvcnRoIGl0IHRvIG1ha2UgYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGFzIGluIG9yaWdpbmFsLlxuLy8gU21hbGwgc2l6ZSBpcyBwcmVmZXJhYmxlLlxuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbmZ1bmN0aW9uIGFkbGVyMzIoYWRsZXIsIGJ1ZiwgbGVuLCBwb3MpIHtcbiAgdmFyIHMxID0gKGFkbGVyICYgMHhmZmZmKSB8MCxcbiAgICAgIHMyID0gKChhZGxlciA+Pj4gMTYpICYgMHhmZmZmKSB8MCxcbiAgICAgIG4gPSAwO1xuXG4gIHdoaWxlIChsZW4gIT09IDApIHtcbiAgICAvLyBTZXQgbGltaXQgfiB0d2ljZSBsZXNzIHRoYW4gNTU1MiwgdG8ga2VlcFxuICAgIC8vIHMyIGluIDMxLWJpdHMsIGJlY2F1c2Ugd2UgZm9yY2Ugc2lnbmVkIGludHMuXG4gICAgLy8gaW4gb3RoZXIgY2FzZSAlPSB3aWxsIGZhaWwuXG4gICAgbiA9IGxlbiA+IDIwMDAgPyAyMDAwIDogbGVuO1xuICAgIGxlbiAtPSBuO1xuXG4gICAgZG8ge1xuICAgICAgczEgPSAoczEgKyBidWZbcG9zKytdKSB8MDtcbiAgICAgIHMyID0gKHMyICsgczEpIHwwO1xuICAgIH0gd2hpbGUgKC0tbik7XG5cbiAgICBzMSAlPSA2NTUyMTtcbiAgICBzMiAlPSA2NTUyMTtcbiAgfVxuXG4gIHJldHVybiAoczEgfCAoczIgPDwgMTYpKSB8MDtcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGFkbGVyMzI7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIE5vdGU6IHdlIGNhbid0IGdldCBzaWduaWZpY2FudCBzcGVlZCBib29zdCBoZXJlLlxuLy8gU28gd3JpdGUgY29kZSB0byBtaW5pbWl6ZSBzaXplIC0gbm8gcHJlZ2VuZXJhdGVkIHRhYmxlc1xuLy8gYW5kIGFycmF5IHRvb2xzIGRlcGVuZGVuY2llcy5cblxuLy8gKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyXG4vLyAoQykgMjAxNC0yMDE3IFZpdGFseSBQdXpyaW4gYW5kIEFuZHJleSBUdXBpdHNpblxuLy9cbi8vIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkXG4vLyB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXNcbi8vIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsXG4vLyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0XG4vLyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6XG4vL1xuLy8gMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3Rcbi8vICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmVcbi8vICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlXG4vLyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuXG4vLyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZVxuLy8gICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuXG4vLyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuXG4vLyBVc2Ugb3JkaW5hcnkgYXJyYXksIHNpbmNlIHVudHlwZWQgbWFrZXMgbm8gYm9vc3QgaGVyZVxuZnVuY3Rpb24gbWFrZVRhYmxlKCkge1xuICB2YXIgYywgdGFibGUgPSBbXTtcblxuICBmb3IgKHZhciBuID0gMDsgbiA8IDI1NjsgbisrKSB7XG4gICAgYyA9IG47XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCA4OyBrKyspIHtcbiAgICAgIGMgPSAoKGMgJiAxKSA/ICgweEVEQjg4MzIwIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG4gICAgfVxuICAgIHRhYmxlW25dID0gYztcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn1cblxuLy8gQ3JlYXRlIHRhYmxlIG9uIGxvYWQuIEp1c3QgMjU1IHNpZ25lZCBsb25ncy4gTm90IGEgcHJvYmxlbS5cbnZhciBjcmNUYWJsZSA9IG1ha2VUYWJsZSgpO1xuXG5cbmZ1bmN0aW9uIGNyYzMyKGNyYywgYnVmLCBsZW4sIHBvcykge1xuICB2YXIgdCA9IGNyY1RhYmxlLFxuICAgICAgZW5kID0gcG9zICsgbGVuO1xuXG4gIGNyYyBePSAtMTtcblxuICBmb3IgKHZhciBpID0gcG9zOyBpIDwgZW5kOyBpKyspIHtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRbKGNyYyBeIGJ1ZltpXSkgJiAweEZGXTtcbiAgfVxuXG4gIHJldHVybiAoY3JjIF4gKC0xKSk7IC8vID4+PiAwO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gY3JjMzI7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlclxuLy8gKEMpIDIwMTQtMjAxNyBWaXRhbHkgUHV6cmluIGFuZCBBbmRyZXkgVHVwaXRzaW5cbi8vXG4vLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZFxuLy8gd2FycmFudHkuIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzXG4vLyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLFxuLy8gaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdFxuLy8gZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOlxuLy9cbi8vIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90XG4vLyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlXG4vLyAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZVxuLy8gICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLlxuLy8gMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmVcbi8vICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLlxuLy8gMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIDI6ICAgICAgJ25lZWQgZGljdGlvbmFyeScsICAgICAvKiBaX05FRURfRElDVCAgICAgICAyICAqL1xuICAxOiAgICAgICdzdHJlYW0gZW5kJywgICAgICAgICAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi9cbiAgMDogICAgICAnJywgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovXG4gICctMSc6ICAgJ2ZpbGUgZXJyb3InLCAgICAgICAgICAvKiBaX0VSUk5PICAgICAgICAgKC0xKSAqL1xuICAnLTInOiAgICdzdHJlYW0gZXJyb3InLCAgICAgICAgLyogWl9TVFJFQU1fRVJST1IgICgtMikgKi9cbiAgJy0zJzogICAnZGF0YSBlcnJvcicsICAgICAgICAgIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovXG4gICctNCc6ICAgJ2luc3VmZmljaWVudCBtZW1vcnknLCAvKiBaX01FTV9FUlJPUiAgICAgKC00KSAqL1xuICAnLTUnOiAgICdidWZmZXIgZXJyb3InLCAgICAgICAgLyogWl9CVUZfRVJST1IgICAgICgtNSkgKi9cbiAgJy02JzogICAnaW5jb21wYXRpYmxlIHZlcnNpb24nIC8qIFpfVkVSU0lPTl9FUlJPUiAoLTYpICovXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXJcbi8vIChDKSAyMDE0LTIwMTcgVml0YWx5IFB1enJpbiBhbmQgQW5kcmV5IFR1cGl0c2luXG4vL1xuLy8gVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWRcbi8vIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlc1xuLy8gYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSxcbi8vIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXRcbi8vIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczpcbi8vXG4vLyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdFxuLy8gICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZVxuLy8gICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmVcbi8vICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC5cbi8vIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlXG4vLyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS5cbi8vIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uXG5cbmZ1bmN0aW9uIFpTdHJlYW0oKSB7XG4gIC8qIG5leHQgaW5wdXQgYnl0ZSAqL1xuICB0aGlzLmlucHV0ID0gbnVsbDsgLy8gSlMgc3BlY2lmaWMsIGJlY2F1c2Ugd2UgaGF2ZSBubyBwb2ludGVyc1xuICB0aGlzLm5leHRfaW4gPSAwO1xuICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IGlucHV0ICovXG4gIHRoaXMuYXZhaWxfaW4gPSAwO1xuICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi9cbiAgdGhpcy50b3RhbF9pbiA9IDA7XG4gIC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZSAqL1xuICB0aGlzLm91dHB1dCA9IG51bGw7IC8vIEpTIHNwZWNpZmljLCBiZWNhdXNlIHdlIGhhdmUgbm8gcG9pbnRlcnNcbiAgdGhpcy5uZXh0X291dCA9IDA7XG4gIC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG91dHB1dCAqL1xuICB0aGlzLmF2YWlsX291dCA9IDA7XG4gIC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovXG4gIHRoaXMudG90YWxfb3V0ID0gMDtcbiAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovXG4gIHRoaXMubXNnID0gJycvKlpfTlVMTCovO1xuICAvKiBub3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMgKi9cbiAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi9cbiAgdGhpcy5kYXRhX3R5cGUgPSAyLypaX1VOS05PV04qLztcbiAgLyogYWRsZXIzMiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi9cbiAgdGhpcy5hZGxlciA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWlN0cmVhbTtcbiIsImltcG9ydCB7Z3ppcH0gZnJvbSAncGFrby9saWIvZGVmbGF0ZSc7XG5cbnNlbGYub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgdHJ5IHtcbiAgICB2YXIgcmVzdWx0ID0gZ3ppcChldmVudC5kYXRhLmRhdGEpLmJ1ZmZlcjtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGlkOiBldmVudC5kYXRhLmlkLFxuICAgICAgcmVzdWx0OiByZXN1bHRcbiAgICB9KTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGlkOiBldmVudC5kYXRhLmlkLFxuICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2VcbiAgICB9KTtcbiAgfVxufTsiXSwibmFtZXMiOlsibGVuZ3RoIiwic3RhdGljX3RyZWUiLCJleHRyYV9iaXRzIiwiZXh0cmFfYmFzZSIsImVsZW1zIiwibWF4X2xlbmd0aCIsImhhc19zdHJlZSIsImR5bl90cmVlIiwibWF4X2NvZGUiLCJzdGF0X2Rlc2MiLCJwZW5kaW5nX2J1ZiIsInBlbmRpbmciLCJiaV92YWxpZCIsImJpX2J1ZiIsImJsX2NvdW50IiwiaGVhcCIsImhlYXBfbWF4Iiwib3B0X2xlbiIsInN0YXRpY19sZW4iLCJBcnJheSIsIk1BWF9CSVRTIiwiTEVOR1RIX0NPREVTIiwiTF9DT0RFUyIsIkxJVEVSQUxTIiwiZHluX2x0cmVlIiwiZHluX2R0cmVlIiwiYmxfdHJlZSIsImxhc3RfbGl0IiwibWF0Y2hlcyIsInV0aWxzIiwiYXJyYXlTZXQiLCJ3aW5kb3ciLCJoZWFwX2xlbiIsImRlcHRoIiwiZF9idWYiLCJsX2J1ZiIsImxfZGVzYyIsImRfZGVzYyIsImJsX2Rlc2MiLCJCTF9DT0RFUyIsIm1zZyIsInN0YXRlIiwiYXZhaWxfb3V0Iiwib3V0cHV0IiwicGVuZGluZ19vdXQiLCJuZXh0X291dCIsInRvdGFsX291dCIsIl90cl9mbHVzaF9ibG9jayIsImJsb2NrX3N0YXJ0Iiwic3Ryc3RhcnQiLCJzdHJtIiwiYXZhaWxfaW4iLCJpbnB1dCIsIm5leHRfaW4iLCJ3cmFwIiwiYWRsZXIiLCJhZGxlcjMyIiwiY3JjMzIiLCJ0b3RhbF9pbiIsIm1heF9jaGFpbl9sZW5ndGgiLCJwcmV2X2xlbmd0aCIsIm5pY2VfbWF0Y2giLCJ3X3NpemUiLCJ3X21hc2siLCJwcmV2IiwiZ29vZF9tYXRjaCIsImxvb2thaGVhZCIsIm1hdGNoX3N0YXJ0Iiwid2luZG93X3NpemUiLCJoYXNoX3NpemUiLCJoZWFkIiwiaW5zZXJ0IiwiaW5zX2giLCJoYXNoX3NoaWZ0IiwiaGFzaF9tYXNrIiwibWF0Y2hfbGVuZ3RoIiwiX3RyX3RhbGx5IiwibWF4X2xhenlfbWF0Y2giLCJwcmV2X21hdGNoIiwic3RyYXRlZ3kiLCJtYXRjaF9hdmFpbGFibGUiLCJnb29kX2xlbmd0aCIsIm1heF9sYXp5IiwibmljZV9sZW5ndGgiLCJtYXhfY2hhaW4iLCJmdW5jIiwibGV2ZWwiLCJzdGF0dXMiLCJwZW5kaW5nX2J1Zl9zaXplIiwiZ3poZWFkIiwiZ3ppbmRleCIsIm1ldGhvZCIsImxhc3RfZmx1c2giLCJ3X2JpdHMiLCJoYXNoX2JpdHMiLCJCdWYxNiIsImxpdF9idWZzaXplIiwiZGF0YV90eXBlIiwiX3RyX2luaXQiLCJCdWY4Iiwic3ViYXJyYXkiLCJhcHBseSIsInNocmlua0J1ZiIsIm9wdGlvbnMiLCJhc3NpZ24iLCJjaHVua1NpemUiLCJ3aW5kb3dCaXRzIiwibWVtTGV2ZWwiLCJ0byIsInJhdyIsImd6aXAiLCJlcnIiLCJlbmRlZCIsImNodW5rcyIsInpsaWJfZGVmbGF0ZSIsImRlZmxhdGVJbml0MiIsIkVycm9yIiwiaGVhZGVyIiwiZGVmbGF0ZVNldEhlYWRlciIsImRpY3Rpb25hcnkiLCJzdHJpbmcyYnVmIiwiY2FsbCIsIlVpbnQ4QXJyYXkiLCJkZWZsYXRlU2V0RGljdGlvbmFyeSIsIl9kaWN0X3NldCIsInB1c2giLCJyZXN1bHQiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsIlVpbnQxNkFycmF5IiwiSW50MzJBcnJheSIsInNsaWNlIiwiYXJndW1lbnRzIiwic2hpZnQiLCJUeXBlRXJyb3IiLCJzZXQiLCJmbGF0dGVuQ2h1bmtzIiwiY29uY2F0Iiwic2V0VHlwZWQiLCJEX0NPREVTIiwiSEVBUF9TSVpFIiwiemVybyIsIk1BWF9NQVRDSCIsIlpfTk9fRkxVU0giLCJaX0ZJTklTSCIsIlpfT0siLCJaX1NUUkVBTV9FTkQiLCJaX0RFRkFVTFRfQ09NUFJFU1NJT04iLCJaX0RFRkxBVEVEIiwidGV4dCIsImhjcmMiLCJleHRyYSIsIm5hbWUiLCJjb21tZW50IiwidGltZSIsIm9zIiwiY2hhckNvZGVBdCIsIl90cl9hbGlnbiIsIl90cl9zdG9yZWRfYmxvY2siLCJ0b1N0cmluZyIsImRlZmxhdGUiLCJvbkVuZCIsIm9uRGF0YSIsImJ1ZjJiaW5zdHJpbmciLCJkZWZsYXRlRW5kIiwiam9pbiIsInNlbGYiLCJvbm1lc3NhZ2UiLCJkYXRhIiwiYnVmZmVyIiwicG9zdE1lc3NhZ2UiLCJpZCIsImVycm9yIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6InlCQTBDQSxhQUFtQixLQUFFLEdBQUksR0FBTSxFQUFJQSxNQUFoQixDQUF3QyxDQUFULEtBQS9CLEVBQTZDLEtBQVcsQ0FBTSxDQTJIakYscUJBQWdGLENBRTlFLEtBQUtDLFdBQUwsRUFGOEUsQ0FHOUUsS0FBS0MsVUFBTCxFQUg4RSxDQUk5RSxLQUFLQyxVQUFMLEVBSjhFLENBSzlFLEtBQUtDLEtBQUwsRUFMOEUsQ0FNOUUsS0FBS0MsVUFBTCxFQU44RSxDQVM5RSxLQUFLQyxTQUFMLENBQW9CLEdBQWUsRUFBWU4sTUFDaEQsQ0FRRCxlQUF1QyxDQUNyQyxLQUFLTyxRQUFMLEVBRHFDLENBRXJDLEtBQUtDLFFBQUwsQ0FBZ0IsQ0FGcUIsQ0FHckMsS0FBS0MsU0FBTCxFQUNELENBSUQsYUFBc0IsQ0FDcEIsTUFBYyxJQUFQLEdBQWEsS0FBYixDQUFnQyxHQUFXLEtBQU8sSUFBUyxDQUFoQixD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"} \ No newline at end of file diff --git a/js/page.js b/js/page.js new file mode 100644 index 0000000..0263f57 --- /dev/null +++ b/js/page.js @@ -0,0 +1,12 @@ +(function(){'use strict';function a(a){const b=B.createContextualFragment(a);return b.children[0]}function b(a){return(a+'').replace(/[&<>"'\/]/g,(a)=>C[a])}function c(a,...c){return c=c.map((a)=>b(a)),a.reduce((a,b,d)=>a+=b+(c[d]||''),'')}function d(a){return new Response(a).text()}function e({removeClass:a=!1}={}){return function(b,c='active',d='transition'){if(a){if(!b.classList.contains(c))return Promise.resolve();}else if(b.classList.contains(c))return Promise.resolve();return new Promise((e)=>{const f=(a)=>{a.target!=b||(b.removeEventListener('webkitTransitionEnd',f),b.removeEventListener('transitionend',f),b.classList.remove(d),e())};b.classList.add(d),requestAnimationFrame(()=>{b.addEventListener('webkitTransitionEnd',f),b.addEventListener('transitionend',f),b.classList[a?'remove':'add'](c)})})}}function f(a){return{x:a.pageX,y:a.pageY}}function g(a,b){var c=Math.abs;const d=c(b.x-a.x),e=c(b.y-a.y);return Math.sqrt(d*d+e*e)}function h(a,b){return{x:(a.x+b.x)/2,y:(a.y+b.y)/2}}function i(a){return a.touches?Array.from(a.touches).map((a)=>f(a)):[f(a)]}function j(a,b){const c=Math.pow(10,b);return Math.floor(Math.round(a*c))/c}function k(a){return 1024>a?a+' bytes':j(a/1024,2)+'k'}function l(){}function m(){m.init.call(this)}function n(a){return void 0===a._maxListeners?m.defaultMaxListeners:a._maxListeners}function o(a,b,c){if(b)a.call(c);else for(var d=a.length,e=y(a,d),f=0;fe)){g.warned=!0;var h=new Error('Possible EventEmitter memory leak detected. '+g.length+' '+b+' listeners added. Use emitter.setMaxListeners() to increase limit');h.name='MaxListenersExceededWarning',h.emitter=a,h.type=b,h.count=g.length,u(h)}return a}function u(a){'function'==typeof console.warn?console.warn(a):console.log(a)}function v(a,b,c){function d(){a.removeListener(b,d),e||(e=!0,c.apply(a,arguments))}var e=!1;return d.listener=c,d}function w(a){var b=this._events;if(b){var c=b[a];if('function'==typeof c)return 1;if(c)return c.length}return 0}function x(a,b){for(var c=b,d=c+1,e=a.length;d{function b(){'loading'!=document.readyState&&a()}document.addEventListener('readystatechange',b),b()}),B=document.createRange();B.selectNode(document.documentElement);const C={"&":'&',"<":'<',">":'>','"':'"',"'":''',"/":'/'},D=e(),E=e({removeClass:!0});let F=(()=>{function a(){return c||(c=new Promise((a,b)=>{const c=indexedDB.open('svgo-keyval',1);c.onerror=()=>{b(c.error)},c.onupgradeneeded=()=>{c.result.createObjectStore('keyval')},c.onsuccess=()=>{a(c.result)}})),c}async function b(b,c){const d=await a();return new Promise((a,e)=>{const f=d.transaction('keyval',b);f.oncomplete=()=>a(),f.onerror=()=>e(f.error),c(f.objectStore('keyval'))})}let c;return{async get(a){let c;return await b('readonly',(b)=>{c=b.get(a)}),c.result},set(a,c){return b('readwrite',(b)=>{b.put(c,a)})},delete(a){return b('readwrite',(b)=>{b.delete(a)})}}})();self.indexedDB||(F={get:(a)=>Promise.resolve(localStorage.getItem(a)),set:(a,b)=>Promise.resolve(localStorage.setItem(a,b)),delete:(a)=>Promise.resolve(localStorage.removeItem(a))}),'use strict';class G{constructor(a){this._requestId=0,this._pending={},this._url=a,this._worker=new Worker(this._url),this._worker.onmessage=(a)=>this._onMessage(a)}async release(){this._worker&&(this._worker.terminate(),this._worker=null);for(const a of Object.keys(this._pending))this._fulfillPending(id,null,new Error('Worker terminated: '+this._url))}_postMessage(a){this._worker.postMessage(a)}_onMessage(a){return a.data.id?void this._fulfillPending(a.data.id,a.data.result,a.data.error):void console.log('Unexpected message',a)}_fulfillPending(a,b,c){const d=this._pending[a];return d?(delete this._pending[a],c?void d[1](new Error(c)):void d[0](b)):void console.log('No resolver for',{id:a,result:b,error:c})}_requestResponse(a){return new Promise((b,c)=>{a.id=++this._requestId,this._pending[a.id]=[b,c],this._postMessage(a)})}}const H=new class extends G{constructor(){super('js/gzip-worker.js')}compress(a){return this._requestResponse({data:a})}};class I{constructor(a,b,c){this.text=a,this._compressedSize=null,this._url='',this._blob=null,this.width=b,this.height=c}async size({compress:a}){return a?(this._compressedSize||(this._compressedSize=H.compress(this.text).then((a)=>a.byteLength)),this._compressedSize):this.text.length}_create(){this._blob=new Blob([this.text],{type:'image/svg+xml'}),this._url=URL.createObjectURL(this._blob)}get blob(){return this._blob||this._create(),this._blob}get url(){return this._url||this._create(),this._url}release(){this._url&&(this._blob=null,URL.revokeObjectURL(this._url))}}class J{constructor(a,{eventArea:b=a,shouldCaptureFunc:c=()=>!0}={}){this._target=a,this._shouldCaptureFunc=c,this._dx=0,this._dy=0,this._scale=1,this._active=0,this._lastPoints=[],['_onPointerDown','_onPointerMove','_onPointerUp'].forEach((a)=>{this[a]=this[a].bind(this)}),b.addEventListener('mousedown',this._onPointerDown),b.addEventListener('touchstart',this._onPointerDown),b.addEventListener('wheel',(a)=>this._onWheel(a))}reset(){this._dx=0,this._dy=0,this._scale=1,this._update()}_onWheel(a){if(!this._shouldCaptureFunc(a.target))return;a.preventDefault();const b=this._target.getBoundingClientRect();let c=a.deltaY;1===a.deltaMode&&(c*=15),c=Math.max(Math.min(c,60),-60);const d=c/300+1;0.05>this._scale*d||(this._scale*=d,this._dx-=(a.pageX-b.left)*(d-1),this._dy-=(a.pageY-b.top)*(d-1),this._update())}_onFirstPointerDown(){document.addEventListener('mousemove',this._onPointerMove),document.addEventListener('mouseup',this._onPointerUp),document.addEventListener('touchmove',this._onPointerMove),document.addEventListener('touchend',this._onPointerUp)}_onPointerDown(a){('mousedown'!=a.type||1==a.which)&&this._shouldCaptureFunc(a.target)&&(a.preventDefault(),this._lastPoints=i(a),this._active++,1===this._active&&this._onFirstPointerDown(a))}_onPointerMove(a){a.preventDefault();const b=i(a),c=b.reduce(h),d=this._lastPoints.reduce(h),e=this._target.getBoundingClientRect();if(this._dx+=c.x-d.x,this._dy+=c.y-d.y,b[1]){const a=g(b[0],b[1])/g(this._lastPoints[0],this._lastPoints[1]);this._scale*=a,this._dx-=(c.x-e.left)*(a-1),this._dy-=(c.y-e.top)*(a-1)}this._update(),this._lastPoints=b}_update(){this._target.style.WebkitTransform=this._target.style.transform=`translate3d(${this._dx}px, ${this._dy}px, 0) scale(${this._scale})`}_onPointerUp(a){return a.preventDefault(),this._active--,this._lastPoints.pop(),this._active?void(this._lastPoints=i(a)):void(document.removeEventListener('mousemove',this._onPointerMove),document.removeEventListener('mouseup',this._onPointerUp),document.removeEventListener('touchmove',this._onPointerMove),document.removeEventListener('touchend',this._onPointerUp))}}class K{constructor(){this.container=a('
'),this._svgFrame=this.container.querySelector('.svg-frame'),this._svgFrame.scrolling='no',this._svgContainer=this.container.querySelector('.svg-container'),A.then(()=>{this._panZoom=new J(this._svgContainer,{eventArea:this.container})})}setSvg(a){const b=this._nextLoadPromise();return this._svgFrame.src='data:image/svg+xml;charset=utf-8,'+encodeURIComponent(a.text),this._svgFrame.width=a.width,this._svgFrame.height=a.height,b}reset(){this._svgFrame.src='about:blank',this._panZoom.reset()}_nextLoadPromise(){return new Promise((a)=>{const b=()=>{this._svgFrame.removeEventListener('load',b),a()};this._svgFrame.addEventListener('load',b)})}}const L=new class extends G{constructor(){super('js/prism-worker.js')}highlight(a){return this._requestResponse({data:a})}};class M{constructor(){this.container=a('
'),this._codeEl=this.container.querySelector('code')}async setSvg(a){this._codeEl.innerHTML=await L.highlight(a.text)}reset(){this._codeEl.innerHTML=''}}class N{constructor(){this.container=a('
'),this._types={image:new K,code:new M},this._svgFile=null,this._switchQueue=Promise.resolve(),this.set('image',{noAnimate:!0})}update(a){return this._svgFile=a,this._types[this._activeType].setSvg(a)}reset(){this._types[this._activeType].reset()}set(a,{noAnimate:b=!1}={}){return this._switchQueue=this._switchQueue.then(async()=>{const c=this._activeType&&this._types[this._activeType].container;this._activeType=a;const d=this._types[this._activeType].container;if(this.container.appendChild(d),this._svgFile&&(await this.update(this._svgFile)),b)d.classList.add('active'),c&&c.classList.remove('active');else{const a=[D(d)];c&&a.push(E(c)),await Promise.all(a)}c&&this.container.removeChild(c)})}}class O{constructor(){this.container=a('
')}animate(){this.container.classList.remove('animate'),this.container.offsetLeft,this.container.classList.add('animate')}}class P{constructor(){this.container=a('
'),this._showTimeout=null,this.container.style.display='none';const b=(a)=>{a.target==this.container&&(this.container.style.display='none')};this.container.addEventListener('webkitAnimationEnd',b),this.container.addEventListener('animationend',b)}show(a=300){clearTimeout(this._showTimeout),this.container.style.display='none',this.container.classList.remove('cooldown'),this._showTimeout=setTimeout(()=>{this.container.style.display=''},a)}hide(){clearTimeout(this._showTimeout),this.container.classList.add('cooldown')}}class Q{constructor({title:b,href:c,iconSvg:d,classList:e,minor:f}){this.container=a((c?'':'')+''),c&&(this.container.href=c),b&&this.container.setAttribute('title',b),this.container.classList.add(f?'minor-floating-action-button':'floating-action-button'),e&&e.forEach((a)=>{this.container.classList.add(a)}),this._ripple=new O,this.container.appendChild(this._ripple.container),this._spinner=new P,this.container.appendChild(this._spinner.container),this.container.addEventListener('click',(a)=>this._onClick(a))}_onClick(){this._ripple.animate()}working(){this._spinner.show(500)}done(){this._spinner.hide()}}class R extends Q{constructor(){const a='Download';super({title:a,href:'./',iconSvg:''+`${a}`+''}),this._svgFile=null}_onClick(a){super._onClick(a),'msSaveBlob'in navigator&&(a.preventDefault(),navigator.msSaveBlob(this._svgFile.blob,this._svgFile.filename))}setDownload(a,b){this.container.download=a,this.container.href=b.url,this._svgFile=b}}const S=document.queryCommandSupported&&document.queryCommandSupported('copy');class T extends Q{constructor(){const a='Copy as text';super({title:a,iconSvg:''+`${a}`+'',minor:!0}),this._text=null,this._pre=document.createElement('pre')}_onClick(a){super._onClick(a),this._pre.textContent=this._text,document.body.appendChild(this._pre),getSelection().removeAllRanges();const b=document.createRange();b.selectNode(this._pre),window.getSelection().addRange(b),document.execCommand('copy'),getSelection().removeAllRanges(),document.body.removeChild(this._pre)}setCopyText(a){this._text=a}}class U extends Q{constructor(){const a='Preview on vivid background';super({title:a,iconSvg:''+`${a}`+'',classList:['fillAB'],minor:!0})}_onClick(a){super._onClick(a),this.container.classList.contains('active')?(this.container.classList.remove('active'),this.setColor('transparent')):(this.container.classList.add('active'),this.setColor('rgba(0, 0, 0, 0.7)'))}setColor(a){document.documentElement.style.backgroundColor=a}}class V{constructor(){this.container=a('
'),this._sizeEl=this.container.querySelector('.size'),this._newSizeEl=this.container.querySelector('.newSize'),this._diffEl=this.container.querySelector('.diff')}update({size:a,comparisonSize:b}){return this._sizeEl.textContent=b?k(b)+' \u2192 '+k(a):k(a),this._diffEl.classList.remove('decrease','increase'),b?void(a===b?this._diffEl.textContent='100%':(this._diffEl.textContent=j(100*(a/b),2)+'%',this._diffEl.classList.add(a>b?'increase':'decrease'))):void(this._diffEl.textContent='')}}var W;l.prototype=Object.create(null),m.EventEmitter=m,m.usingDomains=!1,m.prototype.domain=void 0,m.prototype._events=void 0,m.prototype._maxListeners=void 0,m.defaultMaxListeners=10,m.init=function(){this.domain=null,m.usingDomains&&W.active&&!(this instanceof W.Domain)&&(this.domain=W.active),this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new l,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},m.prototype.setMaxListeners=function(a){if('number'!=typeof a||0>a||isNaN(a))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=a,this},m.prototype.getMaxListeners=function(){return n(this)},m.prototype.emit=function(a){var b,c,d,e,f,g,h,i='error'===a;if(g=this._events,g)i=i&&null==g.error;else if(!i)return!1;if(h=this.domain,i){if(b=arguments[1],h)b||(b=new Error('Uncaught, unspecified "error" event')),b.domainEmitter=this,b.domain=h,b.domainThrown=!1,h.emit('error',b);else if(b instanceof Error)throw b;else{var j=new Error('Uncaught, unspecified "error" event. ('+b+')');throw j.context=b,j}return!1}if(c=g[a],!c)return!1;var k='function'==typeof c;switch(d=arguments.length,d){case 1:o(c,k,this);break;case 2:p(c,k,this,arguments[1]);break;case 3:q(c,k,this,arguments[1],arguments[2]);break;case 4:r(c,k,this,arguments[1],arguments[2],arguments[3]);break;default:for(e=Array(d-1),f=1;fe)return this;if(1===c.length){if(c[0]=void 0,0==--this._eventsCount)return this._events=new l,this;delete d[a]}else x(c,e);d.removeListener&&this.emit('removeListener',a,g||b)}return this},m.prototype.removeAllListeners=function(a){var b,c;if(c=this._events,!c)return this;if(!c.removeListener)return 0===arguments.length?(this._events=new l,this._eventsCount=0):c[a]&&(0==--this._eventsCount?this._events=new l:delete c[a]),this;if(0===arguments.length){for(var d,e=Object.keys(c),f=0;f +
+
+
+
+
+
+
+ + `),this.range=b,this._handle=this.container.querySelector('.handle'),this._trackOn=this.container.querySelector('.track-on'),this._val=this.container.querySelector('.val'),b.parentNode.insertBefore(this.container,b),this.container.insertBefore(b,this.container.firstChild),b.addEventListener('input',()=>this._onInputChange()),this.range.addEventListener('mousedown',()=>this._onRangeMouseDown()),this.range.addEventListener('touchstart',()=>this._onRangeTouchStart()),this.range.addEventListener('touchend',()=>this._onRangeTouchEnd()),this._setPosition()}_onRangeTouchStart(){this.range.focus()}_onRangeTouchEnd(){this.range.blur()}_onRangeMouseDown(){this.range.classList.add('active');const a=()=>{requestAnimationFrame(()=>{this.range.blur()}),this.range.classList.remove('active'),document.removeEventListener('mouseup',a)};document.addEventListener('mouseup',a)}set value(a){this.range.value=a,this._update()}_onInputChange(){this._update()}_update(){requestAnimationFrame(()=>this._setPosition())}_setPosition(){const{min:a,max:b,value:c}=this.range;this._trackOn.style.width=this._handle.style.left=100*((+c-a)/(b-a))+'%',this._val.textContent=c}}class Y extends m{constructor(){super(),this._throttleTimeout=null,A.then(()=>{this._pluginInputs=Array.from(document.querySelectorAll('.settings .plugins input')),this._globalInputs=Array.from(document.querySelectorAll('.settings .global input')),this._resetRipple=new O,this._resetBtn=document.querySelector('.setting-reset'),this._resetBtn.appendChild(this._resetRipple.container),this._sliderMap=new WeakMap,Array.from(document.querySelectorAll('.settings input[type=range]')).forEach((a)=>this._sliderMap.set(a,new X(a))),this.container=document.querySelector('.settings'),this._scroller=document.querySelector('.settings-scroller'),this.container.addEventListener('change',(a)=>this._onChange(a)),this.container.addEventListener('input',(a)=>this._onChange(a)),this._scroller.addEventListener('wheel',(a)=>this._onMouseWheel(a)),this._resetBtn.addEventListener('click',(a)=>this._onReset(a)),this._scroller.addEventListener('mousedown',(a)=>{a.target.closest('input[type=range]')||a.preventDefault()})})}_onMouseWheel(a){a.deltaMode||(a.preventDefault(),a.currentTarget.scrollTop+=a.deltaY)}_onChange(a){clearTimeout(this._throttleTimeout),'range'==a.target.type?this._throttleTimeout=setTimeout(()=>this.emit('change'),150):this.emit('change')}_onReset(){this._resetRipple.animate();const a=this.getSettings();for(const a of this._globalInputs)'checkbox'==a.type?a.checked=a.hasAttribute('checked'):'range'==a.type&&(this._sliderMap.get(a).value=a.getAttribute('value'));for(const a of this._pluginInputs)a.checked=a.hasAttribute('checked');this.emit('reset',a),this.emit('change')}setSettings(a){for(const b of this._globalInputs)b.name in a&&('checkbox'==b.type?b.checked=a[b.name]:'range'==b.type&&(this._sliderMap.get(b).value=a[b.name]));for(const b of this._pluginInputs)b.name in a.plugins&&(b.checked=a.plugins[b.name])}getSettings(){const a=[],b={plugins:{}};return this._globalInputs.forEach((c)=>{'gzip'!=c.name&&'original'!=c.name&&('checkbox'==c.type?a.push(+c.checked):a.push('|'+c.value+'|')),b[c.name]='checkbox'==c.type?c.checked:c.value}),this._pluginInputs.forEach((c)=>{a.push(+c.checked),b.plugins[c.name]=c.checked}),b.fingerprint=a.join(),b}}class Z extends m{constructor(){super(),this.allowHide=!1,this._spinner=new P,A.then(()=>{this.container=document.querySelector('.main-menu'),this._loadFileInput=document.querySelector('.load-file-input'),this._pasteInput=document.querySelector('.paste-input'),this._loadDemoBtn=document.querySelector('.load-demo'),this._loadFileBtn=document.querySelector('.load-file'),this._pasteLabel=document.querySelector('.menu-input'),this._overlay=this.container.querySelector('.overlay'),this._menu=this.container.querySelector('.menu'),document.querySelector('.menu-btn').addEventListener('click',(a)=>this._onMenuButtonClick(a)),this._overlay.addEventListener('click',(a)=>this._onOverlayClick(a)),this._loadFileBtn.addEventListener('click',(a)=>this._onLoadFileClick(a)),this._loadDemoBtn.addEventListener('click',(a)=>this._onLoadDemoClick(a)),this._loadFileInput.addEventListener('change',(a)=>this._onFileInputChange(a)),this._pasteInput.addEventListener('input',(a)=>this._onTextInputChange(a))})}show(){this.container.classList.remove('hidden'),E(this._overlay,'hidden'),E(this._menu,'hidden')}hide(){this.allowHide&&(this.stopSpinner(),this.container.classList.add('hidden'),D(this._overlay,'hidden'),D(this._menu,'hidden'))}stopSpinner(){this._spinner.hide()}showFilePicker(){this._loadFileInput.click()}_onOverlayClick(a){a.preventDefault(),this.hide()}_onMenuButtonClick(a){a.preventDefault(),this.show()}_onTextInputChange(){const a=this._pasteInput.value.trim();a.includes('')&&(this._pasteInput.value='',this._pasteInput.blur(),this._pasteLabel.appendChild(this._spinner.container),this._spinner.show(),this.emit('svgDataLoad',{data:a,filename:'image.svg'}))}_onLoadFileClick(a){a.preventDefault(),a.target.blur(),this.showFilePicker()}async _onFileInputChange(){const a=this._loadFileInput.files[0];a&&(this._loadFileBtn.appendChild(this._spinner.container),this._spinner.show(),this.emit('svgDataLoad',{data:await d(a),filename:a.name}))}async _onLoadDemoClick(a){a.preventDefault(),a.target.blur(),this._loadDemoBtn.appendChild(this._spinner.container),this._spinner.show();try{this.emit('svgDataLoad',{data:await fetch('test-svgs/car-lite.svg').then((a)=>a.text()),filename:'car-lite.svg'})}catch(a){{this.stopSpinner();let a;a='serviceWorker'in navigator&&navigator.serviceWorker.controller?Error('Demo not available offline'):Error('Couldn\'t fetch demo SVG'),this.emit('error',{error:a})}}}}class ${constructor(b,c,d){this.container=a('
'),this._content=this.container.querySelector('.toast-content'),this._content.textContent=b,this._answerResolve,this._hideTimeout,this.answer=new Promise((a)=>this._answerResolve=a),d.forEach((a)=>{var b=document.createElement('button');b.className='unbutton',b.textContent=a,b.addEventListener('click',()=>{this._answerResolve(a)}),this.container.appendChild(b)}),c&&(this._hideTimeout=setTimeout(()=>this.hide(),c))}hide(){return clearTimeout(this._hideTimeout),this._answerResolve(),D(this.container,'hide')}}class _{constructor(){this.container=a('
')}show(a,{duration:b=0,buttons:c=['dismiss']}={}){const d=new $(a,b,c);return this.container.appendChild(d.container),d.answer.then(()=>d.hide()).then(()=>{this.container.removeChild(d.container)}),d}}class aa extends m{constructor(){super(),this.container=a('
Drop it!
'),this._activeEnters=0,this._currentEnteredElement=null,A.then(()=>{document.addEventListener('dragover',(a)=>a.preventDefault()),document.addEventListener('dragenter',(a)=>this._onDragEnter(a)),document.addEventListener('dragleave',(a)=>this._onDragLeave(a)),document.addEventListener('drop',(a)=>this._onDrop(a))})}_onDragEnter(a){this._currentEnteredElement==a.target||(this._currentEnteredElement=a.target,!this._activeEnters++&&D(this.container))}_onDragLeave(){this._currentEnteredElement=null,--this._activeEnters||E(this.container)}async _onDrop(a){a.preventDefault(),this._activeEnters=0,E(this.container);const b=a.dataTransfer.files[0];b&&this.emit('svgDataLoad',{data:await d(b),filename:b.name})}}class ba{constructor(){A.then(()=>{this.container=document.querySelector('.preloader'),this.activated=this.container.classList.contains('active'),this.hide()})}async hide(){await E(this.container,'active'),this.container.style.display='none'}}class ca{constructor(b){this.container=a('
'),this._loadedVersion=b}async showLogFrom(b){if(b==this._loadedVersion)return;const d=await fetch('changelog.json').then((a)=>a.json());let e=0,f=0;for(var g=0;ga.concat(b.changes),[]).map((a)=>c`
  • ${a}
  • `);this.container.appendChild(a('

    Updated!

    ')),this.container.appendChild(a('
      '+h.join('')+'
    ')),await A,D(this.container)}}class da{constructor(a){this._results=a,A.then(()=>{this._mobileContainer=document.querySelector('.results-container-mobile'),this._container=document.querySelector('.results-container'),this._query=matchMedia('(min-width: 640px)'),this._query.addListener(()=>this._positionResults()),this._positionResults()})}_positionResults(){this._query.matches?this._container.appendChild(this._results.container):this._mobileContainer.appendChild(this._results.container)}}class ea extends m{constructor(){super(),this.container=null,A.then(()=>{this.container=document.querySelector('.view-toggler'),this.container.output[0].checked=!0,this.container.addEventListener('change',(a)=>this._onChange(a))})}_onChange(){let a=this.container.output.value;a||(a=Array.from(this.container.output).reduce((a,b)=>a||(b.checked?b.value:''),'')),this.emit('change',{value:a})}}class fa{constructor(a){this._size=a,this.purge()}purge(){this._fingerprints=[],this._items=[],this._index=0}add(a,b){const c=this._items[this._index];c&&c.release(),this._fingerprints[this._index]=a,this._items[this._index]=b,this._index=(this._index+1)%this._size}match(a){return this._items[this._fingerprints.indexOf(a)]}}class ga{constructor(...a){this._activated=!1,this._toActivate=a}activate(){if(!this._activated)return this._activated=!0,Promise.all(this._toActivate.map((a)=>D(a)))}}const ha=new class extends G{constructor(){super('js/svgo-worker.js'),this._abortOnNextIteration=!1,this._currentJob=Promise.resolve()}async load(a){const{width:b,height:c}=await this._requestResponse({action:'load',data:a});return new I(a,b,c)}process(a,b){return this._currentJob=this.abortCurrent().then(async()=>{this._abortOnNextIteration=!1;let c=await this._requestResponse({action:'process',settings:a});var d=new I(c.data,c.dimensions.width,c.dimensions.height);if(b(d),a.multipass)for(;c=await this.nextPass();){if(this._abortOnNextIteration)throw Error('abort');d=new I(c.data,c.dimensions.width,c.dimensions.height),b(d)}return d})}nextPass(){return this._requestResponse({action:'nextPass'})}async abortCurrent(){this._abortOnNextIteration=!0,await this._currentJob}async release(){await this.abortCurrent(),super.release()}};(function(){var a='mouse';document.body.addEventListener('focus',(b)=>{b.target.classList.add('key'==a?'key-focused':'mouse-focused')},!0),document.body.addEventListener('blur',(a)=>{a.target.classList.remove('key-focused'),a.target.classList.remove('mouse-focused')},!0),document.body.addEventListener('keydown',()=>{a='key'},!0),document.body.addEventListener('mousedown',()=>{a='mouse'},!0)})(),new class{constructor(){this._container=null,this._mainUi=null,this._outputUi=new N,this._downloadButtonUi=new R,this._copyButtonUi=new T,this._bgFillUi=new U,this._resultsUi=new V,this._settingsUi=new Y,this._mainMenuUi=new Z,this._toastsUi=new _,this._dropUi=new aa,this._preloaderUi=new ba,this._changelogUi=new ca(self.version),this._resultsContainerUi=new da(this._resultsUi),this._viewTogglerUi=new ea,this._settingsUi.on('change',()=>this._onSettingsChange()),this._settingsUi.on('reset',(a)=>this._onSettingsReset(a)),this._mainMenuUi.on('svgDataLoad',(a)=>this._onInputChange(a)),this._dropUi.on('svgDataLoad',(a)=>this._onInputChange(a)),this._mainMenuUi.on('error',({error:a})=>this._handleError(a)),this._viewTogglerUi.on('change',(a)=>this._onViewSelectionChange(a)),window.addEventListener('keydown',(a)=>this._onGlobalKeyDown(a)),this._inputItem=null,this._cache=new fa(10),this._latestCompressJobId=0,this._userHasInteracted=!1,this._reloading=!1,'serviceWorker'in navigator&&navigator.serviceWorker.register('sw.js',{scope:'./'}).then((a)=>{a.addEventListener('updatefound',()=>this._onUpdateFound(a))}),F.get('last-seen-version').then((a)=>{a&&this._changelogUi.showLogFrom(a),F.set('last-seen-version',self.version)}),A.then(()=>{this._container=document.querySelector('.app-output'),this._mainUi=new ga(document.querySelector('.toolbar'),document.querySelector('.action-button-container'),this._outputUi.container,this._settingsUi.container);const a=document.querySelector('.action-button-container'),b=document.querySelector('.minor-action-container');b.appendChild(this._bgFillUi.container),S&&b.appendChild(this._copyButtonUi.container),a.appendChild(this._downloadButtonUi.container),document.querySelector('.output').appendChild(this._outputUi.container),this._container.appendChild(this._toastsUi.container),this._container.appendChild(this._dropUi.container),document.querySelector('.menu-extra').appendChild(this._changelogUi.container),this._loadSettings(),this._preloaderUi.activated&&this._toastsUi.show('Ready now!',{duration:3e3})})}_onGlobalKeyDown(a){'o'===a.key&&(a.ctrlKey||a.metaKey)&&(a.preventDefault(),this._mainMenuUi.showFilePicker())}_onViewSelectionChange(a){this._outputUi.set(a.value)}_onUpdateFound(a){const b=a.installing;a.installing.addEventListener('statechange',async()=>{if(!this._reloading){if('activated'==b.state&&!navigator.serviceWorker.controller)return void this._toastsUi.show('Ready to work offline',{duration:5e3});if('activated'==b.state&&navigator.serviceWorker.controller){if(!this._userHasInteracted)return this._reloading=!0,void location.reload();const a=this._toastsUi.show('Update available',{buttons:['reload','dismiss']}),b=await a.answer;'reload'==b&&(this._reloading=!0,location.reload())}}})}_onSettingsChange(){const a=this._settingsUi.getSettings();this._saveSettings(a),this._compressSvg(a)}async _onSettingsReset(a){const b=this._toastsUi.show('Settings reset',{buttons:['undo','dismiss'],duration:5e3});'undo'===(await b.answer)&&(this._settingsUi.setSettings(a),this._onSettingsChange())}async _onInputChange(a){const b=this._settingsUi.getSettings();this._userHasInteracted=!0;try{this._inputItem=await ha.load(a.data),this._inputFilename=a.filename}catch(a){{const b=new Error('Load failed: '+a.message);return this._mainMenuUi.stopSpinner(),void this._handleError(b)}}this._cache.purge();let c=!0;const d=()=>{c&&(this._outputUi.reset(),this._mainUi.activate(),this._mainMenuUi.allowHide=!0,this._mainMenuUi.hide(),c=!1)};this._compressSvg(b,()=>d()),c&&d()}_handleError(a){this._toastsUi.show(a.message),console.error(a)}async _loadSettings(){const a=await F.get('settings');a&&this._settingsUi.setSettings(a)}_saveSettings(a){const b=Object.assign({},a);delete b.original,F.set('settings',b)}async _compressSvg(a,b=function(){}){const c=this._latestCompressJobId=Math.random();if(await ha.abortCurrent(),c==this._latestCompressJobId){if(a.original)return void this._updateForFile(this._inputItem,{compress:a.gzip});const c=this._cache.match(a.fingerprint);if(c)return void this._updateForFile(c,{compareToFile:this._inputItem,compress:a.gzip});this._downloadButtonUi.working();try{const c=await ha.process(a,(c)=>{b(c),this._updateForFile(c,{compareToFile:this._inputItem,compress:a.gzip})});this._cache.add(a.fingerprint,c)}catch(a){if('abort'==a.message)return;a.message='Minifying error: '+a.message,this._handleError(a)}finally{this._downloadButtonUi.done()}}}async _updateForFile(a,{compareToFile:b,compress:c}){this._outputUi.update(a),this._downloadButtonUi.setDownload(this._inputFilename,a),this._copyButtonUi.setCopyText(a.text),this._resultsUi.update({comparisonSize:b&&(await b.size({compress:c})),size:await a.size({compress:c})})}}})(); +//# sourceMappingURL=page.js.map diff --git a/js/page.js.map b/js/page.js.map new file mode 100644 index 0000000..ca89660 --- /dev/null +++ b/js/page.js.map @@ -0,0 +1 @@ +{"version":3,"file":"page.js","sources":["../../src/js/page/utils.js","../../src/js/page/ui/pan-zoom.js","../../src/js/page/ui/results.js","../../node_modules/rollup-plugin-node-builtins/src/es6/events.js","../../src/js/utils/storage.js","../../src/js/page/worker-messenger.js","../../src/js/page/gzip.js","../../src/js/page/svg-file.js","../../src/js/page/ui/svg-output.js","../../src/js/page/ui/code-output.js","../../src/js/page/prism.js","../../src/js/page/ui/output.js","../../src/js/page/ui/ripple.js","../../src/js/page/ui/spinner.js","../../src/js/page/ui/floating-action-button.js","../../src/js/page/ui/download-button.js","../../src/js/page/ui/copy-button.js","../../src/js/page/ui/bg-fill-button.js","../../src/js/page/ui/material-slider.js","../../src/js/page/ui/settings.js","../../src/js/page/ui/main-menu.js","../../src/js/page/ui/toasts.js","../../src/js/page/ui/file-drop.js","../../src/js/page/ui/preloader.js","../../src/js/page/ui/changelog.js","../../src/js/page/ui/results-container.js","../../src/js/page/ui/view-toggler.js","../../src/js/page/results-cache.js","../../src/js/page/ui/main-ui.js","../../src/js/page/main-controller.js","../../src/js/page/svgo.js","../../src/js/page/index.js"],"sourcesContent":["\"use strict\";\n\nexport const domReady = new Promise(resolve => {\n function checkState() {\n if (document.readyState != 'loading') resolve();\n }\n document.addEventListener('readystatechange', checkState);\n checkState();\n});\n\nconst range = document.createRange();\nrange.selectNode(document.documentElement);\n\nexport function strToEl(str) {\n const frag = range.createContextualFragment(str);\n return frag.children[0];\n}\n\nconst entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': '"',\n \"'\": ''',\n \"/\": '/'\n};\n\nexport function escapeHTML(str) {\n return String(str).replace(/[&<>\"'\\/]/g, s => entityMap[s]);\n}\n\nexport function escapeHtmlTag(strings, ...values) {\n values = values.map(s => escapeHTML(s));\n return strings.reduce((str, val, i) => str += val + (values[i] || ''), '');\n};\n\nexport function readFileAsText(file) {\n return new Response(file).text();\n};\n\nfunction transitionClassFunc({removeClass = false}={}) {\n return function(el, className = 'active', transitionClass = 'transition') {\n if (removeClass) {\n if (!el.classList.contains(className)) return Promise.resolve();\n }\n else {\n if (el.classList.contains(className)) return Promise.resolve();\n }\n\n return new Promise(resolve => {\n const listener = event => {\n if (event.target != el) return;\n el.removeEventListener('webkitTransitionEnd', listener);\n el.removeEventListener('transitionend', listener);\n el.classList.remove(transitionClass);\n resolve();\n };\n\n el.classList.add(transitionClass);\n\n requestAnimationFrame(() => {\n el.addEventListener('webkitTransitionEnd', listener);\n el.addEventListener('transitionend', listener);\n el.classList[removeClass ? 'remove' : 'add'](className);\n });\n });\n }\n}\n\nexport const transitionToClass = transitionClassFunc();\nexport const transitionFromClass = transitionClassFunc({removeClass: true});\n\nexport function loadCss(url) {\n return new Promise((resolve, reject) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n\n link.addEventListener('load', () => resolve());\n link.addEventListener('error', () => reject());\n\n document.head.appendChild(link);\n });\n};\n\nexport function trackFocusMethod() {\n var focusMethod = 'mouse';\n\n document.body.addEventListener('focus', event => {\n event.target.classList.add(focusMethod == 'key' ? 'key-focused' : 'mouse-focused');\n }, true);\n\n document.body.addEventListener('blur', event => {\n event.target.classList.remove('key-focused');\n event.target.classList.remove('mouse-focused');\n }, true);\n\n document.body.addEventListener('keydown', () => {\n focusMethod = 'key';\n }, true);\n\n document.body.addEventListener('mousedown', () => {\n focusMethod = 'mouse';\n }, true);\n};\n","function getXY(obj) {\n return {\n x: obj.pageX,\n y: obj.pageY\n };\n}\n\nfunction touchDistance(touch1, touch2) {\n const dx = Math.abs(touch2.x - touch1.x);\n const dy = Math.abs(touch2.y - touch1.y);\n return Math.sqrt(dx*dx + dy*dy);\n}\n\nfunction getMidpoint(point1, point2) {\n return {\n x: (point1.x + point2.x) / 2,\n y: (point1.y + point2.y) / 2\n };\n}\n\nfunction getPoints(event) {\n if (event.touches) {\n return Array.from(event.touches).map(t => getXY(t));\n }\n else {\n return [getXY(event)];\n }\n}\n\nexport default class PanZoom {\n constructor(target, {\n eventArea = target,\n shouldCaptureFunc = () => true\n }={}) {\n this._target = target;\n this._shouldCaptureFunc = shouldCaptureFunc;\n this._dx = 0;\n this._dy = 0;\n this._scale = 1;\n this._active = 0;\n this._lastPoints = [];\n\n // bind\n [\n '_onPointerDown',\n '_onPointerMove',\n '_onPointerUp'\n ].forEach(funcName => {\n this[funcName] = this[funcName].bind(this);\n })\n\n // bound events\n eventArea.addEventListener('mousedown', this._onPointerDown);\n eventArea.addEventListener('touchstart', this._onPointerDown);\n\n // unbonud\n eventArea.addEventListener('wheel', e => this._onWheel(e));\n }\n\n reset() {\n this._dx = 0;\n this._dy = 0;\n this._scale = 1;\n this._update();\n }\n\n _onWheel(event) {\n if (!this._shouldCaptureFunc(event.target)) return;\n event.preventDefault();\n\n const boundingRect = this._target.getBoundingClientRect();\n let delta = event.deltaY;\n\n if (event.deltaMode === 1) { // 1 is \"lines\", 0 is \"pixels\"\n // Firefox uses \"lines\" when mouse is connected\n delta *= 15;\n }\n\n // stop mouse wheel producing huge values\n delta = Math.max(Math.min(delta, 60), -60);\n\n const scaleDiff = (delta / 300) + 1;\n\n // avoid to-small values\n if (this._scale * scaleDiff < 0.05) return;\n\n this._scale *= scaleDiff;\n this._dx -= (event.pageX - boundingRect.left) * (scaleDiff - 1);\n this._dy -= (event.pageY - boundingRect.top) * (scaleDiff - 1);\n this._update();\n }\n\n _onFirstPointerDown(event) {\n document.addEventListener('mousemove', this._onPointerMove);\n document.addEventListener('mouseup', this._onPointerUp);\n document.addEventListener('touchmove', this._onPointerMove);\n document.addEventListener('touchend', this._onPointerUp);\n }\n\n _onPointerDown(event) {\n if (event.type == 'mousedown' && event.which != 1) return;\n if (!this._shouldCaptureFunc(event.target)) return;\n event.preventDefault();\n\n this._lastPoints = getPoints(event);\n this._active++;\n\n if (this._active === 1) {\n this._onFirstPointerDown(event);\n }\n }\n\n _onPointerMove(event) {\n event.preventDefault();\n const points = getPoints(event);\n const averagePoint = points.reduce(getMidpoint);\n const averageLastPoint = this._lastPoints.reduce(getMidpoint);\n const boundingRect = this._target.getBoundingClientRect();\n\n this._dx += averagePoint.x - averageLastPoint.x;\n this._dy += averagePoint.y - averageLastPoint.y;\n\n if (points[1]) {\n const scaleDiff = touchDistance(points[0], points[1]) / touchDistance(this._lastPoints[0], this._lastPoints[1]);\n this._scale *= scaleDiff;\n this._dx -= (averagePoint.x - boundingRect.left) * (scaleDiff - 1);\n this._dy -= (averagePoint.y - boundingRect.top) * (scaleDiff - 1);\n }\n\n this._update();\n this._lastPoints = points;\n }\n\n _update() {\n this._target.style.WebkitTransform = this._target.style.transform\n = `translate3d(${this._dx}px, ${this._dy}px, 0) scale(${this._scale})`;\n }\n\n _onPointerUp(event) {\n event.preventDefault();\n this._active--;\n this._lastPoints.pop();\n\n if (this._active) {\n this._lastPoints = getPoints(event);\n return;\n }\n\n document.removeEventListener('mousemove', this._onPointerMove);\n document.removeEventListener('mouseup', this._onPointerUp);\n document.removeEventListener('touchmove', this._onPointerMove);\n document.removeEventListener('touchend', this._onPointerUp);\n }\n}\n","import { strToEl } from '../utils';\n\nfunction round(num, places) {\n const mult = Math.pow(10, places);\n return Math.floor(Math.round(num * mult)) / mult;\n}\n\nfunction humanSize(bytes) {\n if (bytes < 1024) {\n return bytes + ' bytes';\n }\n else {\n return round(bytes / 1024, 2) + 'k';\n }\n}\n\nexport default class Results {\n constructor() {\n this.container = strToEl(\n '
    ' +\n ' ' +\n '' +\n '
    ' +\n '');\n\n this._sizeEl = this.container.querySelector('.size');\n this._newSizeEl = this.container.querySelector('.newSize');\n this._diffEl = this.container.querySelector('.diff');\n }\n\n update({ size, comparisonSize }) {\n if (comparisonSize) {\n this._sizeEl.textContent = humanSize(comparisonSize) + ' → ' + humanSize(size);\n } else {\n this._sizeEl.textContent = humanSize(size);\n }\n\n this._diffEl.classList.remove('decrease', 'increase');\n\n // just displaying a single size?\n if (!comparisonSize) {\n this._diffEl.textContent = '';\n return;\n }\n else if (size === comparisonSize) {\n this._diffEl.textContent = '100%';\n }\n else {\n this._diffEl.textContent = round(size / comparisonSize * 100, 2) + '%';\n this._diffEl.classList.add(size > comparisonSize ? 'increase' : 'decrease');\n }\n }\n}\n","'use strict';\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nexport default EventEmitter;\nexport {EventEmitter};\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var needDomainExit = false;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n if (needDomainExit)\n domain.exit();\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","export let idbKeyval = (() => {\n let db;\n\n function getDB() {\n if (!db) {\n db = new Promise((resolve, reject) => {\n const openreq = indexedDB.open('svgo-keyval', 1);\n\n openreq.onerror = () => {\n reject(openreq.error);\n };\n\n openreq.onupgradeneeded = () => {\n // First time setup: create an empty object store\n openreq.result.createObjectStore('keyval');\n };\n\n openreq.onsuccess = () => {\n resolve(openreq.result);\n };\n });\n }\n return db;\n }\n\n async function withStore(type, callback) {\n const db = await getDB();\n return new Promise((resolve, reject) => {\n const transaction = db.transaction('keyval', type);\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n callback(transaction.objectStore('keyval'));\n });\n }\n\n return {\n async get(key) {\n let req;\n await withStore('readonly', store => {\n req = store.get(key);\n });\n return req.result;\n },\n set(key, value) {\n return withStore('readwrite', store => {\n store.put(value, key);\n });\n },\n delete(key) {\n return withStore('readwrite', store => {\n store.delete(key);\n });\n }\n };\n})();\n\n// iOS add-to-homescreen is missing IDB, or at least it used to.\n// I haven't tested this in a while.\nif (!self.indexedDB) {\n idbKeyval = {\n get: key => Promise.resolve(localStorage.getItem(key)),\n set: (key, val) => Promise.resolve(localStorage.setItem(key, val)),\n delete: key => Promise.resolve(localStorage.removeItem(key))\n };\n}\n","\"use strict\";\n\nexport default class WorkerMessenger {\n constructor(url) {\n this._requestId = 0;\n // worker jobs awaiting response { [requestId]: [ resolve, reject ] }\n this._pending = {};\n this._url = url;\n this._worker = new Worker(this._url);\n this._worker.onmessage = event => this._onMessage(event);\n }\n\n async release() {\n if (this._worker) {\n this._worker.terminate();\n this._worker = null;\n }\n for (const key of Object.keys(this._pending)) {\n this._fulfillPending(id, null, new Error(\"Worker terminated: \" + this._url));\n }\n }\n\n _postMessage(message) {\n this._worker.postMessage(message);\n }\n\n _onMessage(event) {\n if (!event.data.id) {\n console.log(\"Unexpected message\", event);\n return;\n }\n\n this._fulfillPending(event.data.id, event.data.result, event.data.error);\n }\n\n _fulfillPending(id, result, error) {\n const resolver = this._pending[id];\n\n if (!resolver) {\n console.log(\"No resolver for\", { id, result, error });\n return;\n }\n\n delete this._pending[id];\n\n if (error) {\n resolver[1](new Error(error));\n return;\n }\n\n resolver[0](result);\n }\n\n _requestResponse(message) {\n return new Promise((resolve, reject) => {\n message.id = ++this._requestId;\n this._pending[message.id] = [resolve, reject];\n this._postMessage(message);\n });\n }\n}\n","import WorkerMessenger from './worker-messenger';\n\nclass Gzip extends WorkerMessenger {\n constructor() {\n super('js/gzip-worker.js');\n }\n\n compress(svgData) {\n return this._requestResponse({\n data: svgData\n });\n }\n}\n\nexport const gzip = new Gzip();\n","import { gzip } from './gzip';\n\nexport default class SvgFile {\n constructor(text, width, height) {\n this.text = text;\n this._compressedSize = null;\n this._url = '';\n this._blob = null;\n this.width = width;\n this.height = height;\n }\n\n async size({ compress }) {\n if (!compress) {\n return this.text.length;\n }\n\n if (!this._compressedSize) {\n this._compressedSize = gzip.compress(this.text).then(r => r.byteLength);\n }\n\n return this._compressedSize;\n }\n\n _create() {\n // IE GCs blobs once they're out of reference, even if they\n // have an object url, so we have to keep in in reference.\n this._blob = new Blob([this.text], {type: \"image/svg+xml\"});\n this._url = URL.createObjectURL(this._blob);\n }\n\n get blob() {\n if (!this._blob) this._create();\n return this._blob;\n }\n\n get url() {\n if (!this._url) this._create();\n return this._url;\n }\n\n release() {\n if (!this._url) return;\n\n this._blob = null;\n URL.revokeObjectURL(this._url);\n }\n}\n","import { domReady, strToEl } from '../utils';\nimport PanZoom from './pan-zoom';\n\nexport default class SvgOutput {\n constructor() {\n this.container = strToEl(\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n // Stop touches going into the iframe.\n // pointer-events + touch + iframe doesn't work in Chrome :(\n '
    ' +\n '
    ' +\n '');\n\n\n this._svgFrame = this.container.querySelector('.svg-frame');\n this._svgFrame.scrolling = 'no';\n\n this._svgContainer = this.container.querySelector('.svg-container');\n\n domReady.then(() => {\n this._panZoom = new PanZoom(this._svgContainer, {\n eventArea: this.container\n });\n });\n }\n\n setSvg(svgFile) {\n // I would rather use blob urls, but they don't work in Firefox\n // All the internal refs break.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1125667\n const nextLoad = this._nextLoadPromise();\n this._svgFrame.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(svgFile.text);\n this._svgFrame.width = svgFile.width;\n this._svgFrame.height = svgFile.height;\n return nextLoad;\n }\n\n reset() {\n this._svgFrame.src = \"about:blank\";\n this._panZoom.reset();\n }\n\n _nextLoadPromise() {\n return new Promise(resolve => {\n const onload = () => {\n this._svgFrame.removeEventListener('load', onload);\n resolve();\n }\n this._svgFrame.addEventListener('load', onload);\n });\n }\n}\n","import { strToEl } from '../utils';\nimport Prism from '../prism';\nconst prism = new Prism();\n\nexport default class CodeOutput {\n constructor() {\n this.container = strToEl(\n '
    ' +\n '
    ' +\n '
    ' +\n '');\n this._codeEl = this.container.querySelector('code');\n }\n\n async setSvg(svgFile) {\n this._codeEl.innerHTML = await prism.highlight(svgFile.text);\n }\n\n reset() {\n this._codeEl.innerHTML = '';\n }\n}\n","import WorkerMessenger from './worker-messenger';\n\nexport default class Prism extends WorkerMessenger {\n constructor() {\n super('js/prism-worker.js');\n }\n\n highlight(svgData) {\n return this._requestResponse({\n data: svgData\n });\n }\n}\n","import { strToEl, transitionToClass, transitionFromClass } from '../utils';\nimport SvgOutput from './svg-output';\nimport CodeOutput from './code-output';\n\nexport default class Output {\n constructor() {\n this.container = strToEl(\n '
    ' +\n '');\n\n this._types = {\n image: new SvgOutput(),\n code: new CodeOutput()\n };\n\n this._svgFile = null;\n this._switchQueue = Promise.resolve();\n this.set('image', {noAnimate: true});\n }\n\n update(svgFile) {\n this._svgFile = svgFile;\n return this._types[this._activeType].setSvg(svgFile);\n }\n\n reset() {\n this._types[this._activeType].reset();\n }\n\n set(type, {\n noAnimate = false\n }={}) {\n return this._switchQueue = this._switchQueue.then(async () => {\n const toRemove = this._activeType && this._types[this._activeType].container;\n\n this._activeType = type;\n const toAdd = this._types[this._activeType].container;\n this.container.appendChild(toAdd);\n\n if (this._svgFile) await this.update(this._svgFile);\n\n if (noAnimate) {\n toAdd.classList.add('active');\n if (toRemove) toRemove.classList.remove('active');\n }\n else {\n const transitions = [\n transitionToClass(toAdd)\n ];\n\n if (toRemove) transitions.push(transitionFromClass(toRemove));\n\n await Promise.all(transitions);\n }\n\n if (toRemove) this.container.removeChild(toRemove);\n })\n }\n}\n","import { strToEl } from '../utils';\n\nexport default class Ripple {\n constructor() {\n this.container = strToEl('
    ');\n }\n\n animate() {\n this.container.classList.remove('animate');\n this.container.offsetLeft;\n this.container.classList.add('animate');\n }\n}\n","import { strToEl } from '../utils';\n\nexport default class Spinner {\n constructor() {\n this.container = strToEl(\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '');\n\n this._showTimeout = null;\n this.container.style.display = 'none';\n\n const animEndListener = event => {\n if (event.target == this.container) {\n this.container.style.display = 'none';\n }\n };\n\n this.container.addEventListener('webkitAnimationEnd', animEndListener);\n this.container.addEventListener('animationend', animEndListener);\n }\n\n show(delay = 300) {\n clearTimeout(this._showTimeout);\n this.container.style.display = 'none';\n this.container.classList.remove('cooldown');\n this._showTimeout = setTimeout(() => {\n this.container.style.display = '';\n }, delay);\n }\n\n hide() {\n clearTimeout(this._showTimeout);\n this.container.classList.add('cooldown');\n }\n}\n","import { strToEl } from '../utils';\nimport Ripple from './ripple';\nimport Spinner from './spinner';\n\nexport default class FloatingActionButton {\n constructor({ title, href, iconSvg, classList, minor }) {\n this.container = strToEl(\n (href ? '' : '') +\n '');\n\n if (href) {\n this.container.href = href;\n }\n if (title) {\n this.container.setAttribute('title', title);\n }\n this.container.classList.add(minor ? 'minor-floating-action-button' : 'floating-action-button');\n if (classList) {\n classList.forEach((className) => { this.container.classList.add(className); });\n }\n\n this._ripple = new Ripple();\n this.container.appendChild(this._ripple.container);\n\n this._spinner = new Spinner();\n this.container.appendChild(this._spinner.container);\n\n this.container.addEventListener('click', event => this._onClick(event));\n }\n\n _onClick(event) {\n this._ripple.animate();\n }\n\n working() {\n this._spinner.show(500);\n }\n\n done() {\n this._spinner.hide();\n }\n}\n","import FloatingActionButton from './floating-action-button';\n\nexport default class DownloadButton extends FloatingActionButton {\n constructor() {\n const title = 'Download';\n\n super({\n title,\n href: './',\n iconSvg: (\n '' +\n `${title}` +\n '' +\n ''\n )\n });\n\n this._svgFile = null;\n }\n\n _onClick(event) {\n super._onClick(event);\n\n // IE compat\n if ('msSaveBlob' in navigator) {\n event.preventDefault();\n navigator.msSaveBlob(this._svgFile.blob, this._svgFile.filename);\n }\n }\n\n setDownload(filename, svgFile) {\n this.container.download = filename;\n this.container.href = svgFile.url;\n\n // for IE compat\n this._svgFile = svgFile;\n }\n}\n","import FloatingActionButton from './floating-action-button';\n\nexport const copySupported = (document.queryCommandSupported && document.queryCommandSupported('copy'));\n\nexport default class CopyButton extends FloatingActionButton {\n constructor() {\n const title = 'Copy as text';\n\n super({\n title,\n iconSvg: (\n '' +\n `${title}` +\n '' +\n ''\n ),\n minor: true\n });\n\n this._text = null;\n this._pre = document.createElement('pre');\n }\n\n _onClick(event) {\n super._onClick(event);\n this._pre.textContent = this._text;\n document.body.appendChild(this._pre);\n getSelection().removeAllRanges();\n\n const range = document.createRange();\n range.selectNode(this._pre);\n\n window.getSelection().addRange(range);\n\n document.execCommand('copy');\n getSelection().removeAllRanges();\n document.body.removeChild(this._pre);\n }\n\n setCopyText(text, filename) {\n this._text = text;\n }\n}\n","import FloatingActionButton from './floating-action-button';\n\nexport default class BgFillButton extends FloatingActionButton {\n constructor() {\n const title = 'Preview on vivid background';\n\n super({\n title,\n iconSvg: (\n '' +\n `${title}` +\n '' +\n ''\n ),\n classList: [ 'fillAB' ],\n minor: true\n });\n }\n\n _onClick(event) {\n super._onClick(event);\n // event adds a background color\n if (this.container.classList.contains('active')) {\n this.container.classList.remove('active');\n this.setColor('transparent');\n }\n else {\n this.container.classList.add('active');\n this.setColor('rgba(0, 0, 0, 0.7)');\n }\n }\n\n setColor(color) {\n document.documentElement.style.backgroundColor = color;\n }\n}\n","import { strToEl } from '../utils';\n\nexport default class MaterialSlider {\n constructor(rangeEl) {\n this.container = strToEl(`\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n `);\n\n this.range = rangeEl;\n this._handle = this.container.querySelector('.handle');\n this._trackOn = this.container.querySelector('.track-on');\n this._val = this.container.querySelector('.val');\n\n rangeEl.parentNode.insertBefore(this.container, rangeEl);\n this.container.insertBefore(rangeEl, this.container.firstChild);\n\n rangeEl.addEventListener('input', () => this._onInputChange());\n this.range.addEventListener('mousedown', () => this._onRangeMouseDown());\n this.range.addEventListener('touchstart', () => this._onRangeTouchStart());\n this.range.addEventListener('touchend', () => this._onRangeTouchEnd());\n\n this._setPosition();\n }\n\n _onRangeTouchStart() {\n this.range.focus();\n }\n\n _onRangeTouchEnd() {\n this.range.blur();\n }\n\n _onRangeMouseDown() {\n this.range.classList.add('active');\n\n const upListener = e => {\n // IE requires me to do this. Pah.\n requestAnimationFrame(_ => {\n this.range.blur();\n })\n this.range.classList.remove('active');\n document.removeEventListener('mouseup', upListener);\n }\n document.addEventListener('mouseup', upListener);\n }\n\n set value(newVal) {\n this.range.value = newVal;\n this._update();\n }\n\n _onInputChange() {\n this._update();\n }\n\n _update() {\n requestAnimationFrame(() => this._setPosition());\n }\n\n _setPosition() {\n const { min, max, value } = this.range;\n const percent = (Number(value) - min) / (max - min);\n\n this._trackOn.style.width =\n this._handle.style.left = percent * 100 + \"%\";\n\n this._val.textContent = value;\n }\n}\n","import { EventEmitter } from 'events';\n\nimport { domReady } from '../utils';\nimport MaterialSlider from './material-slider';\nimport Ripple from './ripple';\n\nexport default class Settings extends EventEmitter {\n constructor() {\n super();\n\n this._throttleTimeout = null;\n\n domReady.then(() => {\n this._pluginInputs = Array.from(\n document.querySelectorAll('.settings .plugins input')\n );\n this._globalInputs = Array.from(\n document.querySelectorAll('.settings .global input')\n );\n\n this._resetRipple = new Ripple();\n this._resetBtn = document.querySelector('.setting-reset');\n this._resetBtn.appendChild(this._resetRipple.container);\n\n // map real range elements to Slider instances\n this._sliderMap = new WeakMap();\n\n // enhance ranges\n Array.from(\n document.querySelectorAll('.settings input[type=range]')\n ).forEach(el => this._sliderMap.set(el, new MaterialSlider(el)));\n\n this.container = document.querySelector('.settings');\n this._scroller = document.querySelector('.settings-scroller');\n\n this.container.addEventListener('change', e => this._onChange(e));\n this.container.addEventListener('input', e => this._onChange(e));\n this._scroller.addEventListener('wheel', e => this._onMouseWheel(e));\n this._resetBtn.addEventListener('click', e => this._onReset(e));\n\n // Stop double-tap text selection.\n // This stops all text selection which is kinda sad.\n // I think this code will bite me.\n this._scroller.addEventListener('mousedown', e => {\n if (e.target.closest('input[type=range]')) return;\n e.preventDefault();\n });\n });\n }\n\n _onMouseWheel(event) {\n // Prevents bounce effect on desktop.\n // Firefox uses DELTA_LINE on a mouse wheel, ignore it\n if (!event.deltaMode) { // 0 is \"pixels\"\n event.preventDefault();\n event.currentTarget.scrollTop += event.deltaY;\n }\n }\n\n _onChange(event) {\n clearTimeout(this._throttleTimeout);\n\n // throttle range\n if (event.target.type == 'range') {\n this._throttleTimeout = setTimeout(() => this.emit('change'), 150);\n }\n else {\n this.emit('change');\n }\n }\n\n _onReset() {\n this._resetRipple.animate();\n const oldSettings = this.getSettings();\n // Set all inputs according to their initial attributes\n for (const inputEl of this._globalInputs) {\n if (inputEl.type == 'checkbox') {\n inputEl.checked = inputEl.hasAttribute('checked');\n }\n else if (inputEl.type == 'range') {\n this._sliderMap.get(inputEl).value = inputEl.getAttribute('value');\n }\n }\n\n for (const inputEl of this._pluginInputs) {\n inputEl.checked = inputEl.hasAttribute('checked');\n }\n\n this.emit('reset', oldSettings);\n this.emit('change');\n }\n\n setSettings(settings) {\n for (const inputEl of this._globalInputs) {\n if (!(inputEl.name in settings)) continue;\n\n if (inputEl.type == 'checkbox') {\n inputEl.checked = settings[inputEl.name];\n }\n else if (inputEl.type == 'range') {\n this._sliderMap.get(inputEl).value = settings[inputEl.name];\n }\n }\n\n for (const inputEl of this._pluginInputs) {\n if (!(inputEl.name in settings.plugins)) continue;\n inputEl.checked = settings.plugins[inputEl.name];\n }\n }\n\n getSettings() {\n // fingerprint is used for cache lookups\n const fingerprint = [];\n\n const output = {\n plugins: {}\n };\n\n this._globalInputs.forEach(inputEl => {\n if (inputEl.name != 'gzip' && inputEl.name != 'original') {\n if (inputEl.type == 'checkbox') {\n fingerprint.push(Number(inputEl.checked));\n }\n else {\n fingerprint.push('|' + inputEl.value + '|');\n }\n }\n\n if (inputEl.type == 'checkbox') {\n output[inputEl.name] = inputEl.checked;\n }\n else {\n output[inputEl.name] = inputEl.value;\n }\n });\n\n this._pluginInputs.forEach(inputEl => {\n fingerprint.push(Number(inputEl.checked));\n output.plugins[inputEl.name] = inputEl.checked;\n });\n\n output.fingerprint = fingerprint.join();\n\n return output;\n }\n}\n","import {\n domReady,\n transitionFromClass,\n transitionToClass,\n readFileAsText\n} from '../utils';\nimport Spinner from './spinner';\nimport { EventEmitter } from 'events';\n\nexport default class MainMenu extends EventEmitter {\n constructor() {\n super();\n\n this.allowHide = false;\n this._spinner = new Spinner();\n\n domReady.then(() => {\n this.container = document.querySelector('.main-menu');\n this._loadFileInput = document.querySelector('.load-file-input');\n this._pasteInput = document.querySelector('.paste-input');\n this._loadDemoBtn = document.querySelector('.load-demo');\n this._loadFileBtn = document.querySelector('.load-file');\n this._pasteLabel = document.querySelector('.menu-input');\n this._overlay = this.container.querySelector('.overlay');\n this._menu = this.container.querySelector('.menu');\n\n document.querySelector('.menu-btn')\n .addEventListener('click', e => this._onMenuButtonClick(e));\n\n this._overlay.addEventListener('click', e => this._onOverlayClick(e));\n\n this._loadFileBtn.addEventListener('click', e => this._onLoadFileClick(e));\n this._loadDemoBtn.addEventListener('click', e => this._onLoadDemoClick(e));\n this._loadFileInput.addEventListener('change', e => this._onFileInputChange(e));\n this._pasteInput.addEventListener('input', e => this._onTextInputChange(e));\n });\n }\n\n show() {\n this.container.classList.remove('hidden');\n transitionFromClass(this._overlay, 'hidden');\n transitionFromClass(this._menu, 'hidden');\n }\n\n hide() {\n if (!this.allowHide) return;\n this.stopSpinner();\n this.container.classList.add('hidden');\n transitionToClass(this._overlay, 'hidden');\n transitionToClass(this._menu, 'hidden');\n }\n\n stopSpinner() {\n this._spinner.hide();\n }\n\n showFilePicker() {\n this._loadFileInput.click();\n }\n\n _onOverlayClick(event) {\n event.preventDefault();\n this.hide();\n }\n\n _onMenuButtonClick(event) {\n event.preventDefault();\n this.show();\n }\n\n _onTextInputChange(event) {\n const val = this._pasteInput.value.trim();\n\n if (val.includes('')) {\n this._pasteInput.value = '';\n this._pasteInput.blur();\n\n this._pasteLabel.appendChild(this._spinner.container);\n this._spinner.show();\n\n this.emit('svgDataLoad', {\n data: val,\n filename: 'image.svg'\n });\n }\n }\n\n _onLoadFileClick(event) {\n event.preventDefault();\n event.target.blur();\n this.showFilePicker();\n }\n\n async _onFileInputChange(event) {\n const file = this._loadFileInput.files[0];\n\n if (!file) return;\n\n this._loadFileBtn.appendChild(this._spinner.container);\n this._spinner.show();\n\n this.emit('svgDataLoad', {\n data: await readFileAsText(file),\n filename: file.name\n });\n }\n\n async _onLoadDemoClick(event) {\n event.preventDefault();\n event.target.blur();\n this._loadDemoBtn.appendChild(this._spinner.container);\n this._spinner.show();\n\n try {\n this.emit('svgDataLoad', {\n data: await fetch('test-svgs/car-lite.svg').then(r => r.text()),\n filename: 'car-lite.svg'\n });\n }\n catch (err) {\n // This extra scope is working around a babel-minify bug.\n // It's fixed in Babel 7.\n {\n this.stopSpinner();\n\n let error;\n\n if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {\n error = Error(\"Demo not available offline\");\n }\n else {\n error = Error(\"Couldn't fetch demo SVG\");\n }\n\n this.emit('error', { error });\n }\n }\n }\n}\n","import { strToEl, transitionToClass } from '../utils';\n\nclass Toast {\n constructor(message, duration, buttons) {\n this.container = strToEl(\n '
    ' +\n '');\n\n this._content = this.container.querySelector('.toast-content');\n this._content.textContent = message;\n this._answerResolve;\n this._hideTimeout;\n\n this.answer = new Promise(r => this._answerResolve = r);\n\n buttons.forEach(button => {\n var buttonEl = document.createElement('button');\n buttonEl.className = 'unbutton';\n buttonEl.textContent = button;\n buttonEl.addEventListener('click', () => {\n this._answerResolve(button);\n });\n this.container.appendChild(buttonEl);\n });\n\n if (duration) {\n this._hideTimeout = setTimeout(() => this.hide(), duration);\n }\n }\n\n hide() {\n clearTimeout(this._hideTimeout);\n this._answerResolve();\n return transitionToClass(this.container, 'hide');\n }\n}\n\nexport default class Toasts {\n constructor() {\n this.container = strToEl(\"
    \");\n }\n\n show(message, {\n duration = 0,\n buttons = ['dismiss']\n }={}) {\n const toast = new Toast(message, duration, buttons);\n this.container.appendChild(toast.container);\n\n toast.answer.then(() => toast.hide()).then(() => {\n this.container.removeChild(toast.container);\n });\n\n return toast;\n }\n}\n","import {\n strToEl,\n domReady,\n transitionToClass,\n transitionFromClass,\n readFileAsText\n} from '../utils';\nimport { EventEmitter } from 'events';\n\nexport default class FileDrop extends EventEmitter {\n constructor() {\n super();\n this.container = strToEl(\n '
    Drop it!
    ' +\n '');\n\n // drag events are horrid\n this._activeEnters = 0;\n this._currentEnteredElement = null;\n\n domReady.then(_ => {\n document.addEventListener('dragover', event => event.preventDefault());\n document.addEventListener('dragenter', event => this._onDragEnter(event));\n document.addEventListener('dragleave', event => this._onDragLeave(event));\n document.addEventListener('drop', event => this._onDrop(event));\n });\n }\n\n _onDragEnter(event) {\n // firefox double-fires on window enter, this works around it\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1124645\n if (this._currentEnteredElement == event.target) return;\n this._currentEnteredElement = event.target;\n\n if (!this._activeEnters++) {\n transitionToClass(this.container);\n }\n }\n\n _onDragLeave(event) {\n this._currentEnteredElement = null;\n\n if (!--this._activeEnters) {\n transitionFromClass(this.container);\n }\n }\n\n async _onDrop(event) {\n event.preventDefault();\n\n this._activeEnters = 0;\n transitionFromClass(this.container);\n\n const file = event.dataTransfer.files[0];\n if (!file) return;\n\n this.emit('svgDataLoad', {\n data: await readFileAsText(file),\n filename: file.name\n });\n }\n}\n","import { domReady, transitionFromClass } from '../utils';\n\nexport default class Preloader {\n constructor() {\n domReady.then(_ => {\n this.container = document.querySelector('.preloader');\n this.activated = this.container.classList.contains('active');\n this.hide();\n });\n }\n\n async hide() {\n await transitionFromClass(this.container, 'active');\n this.container.style.display = 'none';\n }\n}\n","import { strToEl, escapeHtmlTag, transitionToClass, domReady } from '../utils';\n\nexport default class Changelog {\n constructor(loadedVersion) {\n this.container = strToEl('
    ');\n this._loadedVersion = loadedVersion;\n }\n\n async showLogFrom(lastLoadedVersion) {\n if (lastLoadedVersion == this._loadedVersion) return;\n const changelog = await fetch('changelog.json').then(r => r.json());\n let startIndex = 0;\n let endIndex = 0;\n\n for (var i = 0; i < changelog.length; i++) {\n const entry = changelog[i];\n\n if (entry.version === this._loadedVersion) {\n startIndex = i;\n }\n else if (entry.version === lastLoadedVersion) {\n break;\n }\n endIndex = i + 1;\n }\n\n const changeLis = changelog.slice(startIndex, endIndex)\n .reduce((arr, entry) => arr.concat(entry.changes), [])\n .map(change => escapeHtmlTag`
  • ${change}
  • `);\n\n this.container.appendChild(strToEl('

    Updated!

    '));\n this.container.appendChild(strToEl(\n '
      ' +\n changeLis.join('') +\n '
    ' +\n ''));\n\n await domReady;\n transitionToClass(this.container);\n }\n}\n","import { domReady } from '../utils';\n\nexport default class ResultsContainer {\n constructor(results) {\n this._results = results;\n\n domReady.then(_ => {\n this._mobileContainer = document.querySelector('.results-container-mobile');\n this._container = document.querySelector('.results-container');\n this._query = matchMedia('(min-width: 640px)');\n\n this._query.addListener(() => this._positionResults());\n this._positionResults();\n });\n }\n\n _positionResults() {\n if (this._query.matches) {\n this._container.appendChild(this._results.container);\n }\n else {\n this._mobileContainer.appendChild(this._results.container);\n }\n }\n}\n","import { EventEmitter } from 'events';\nimport { domReady } from '../utils';\n\nexport default class ViewToggler extends EventEmitter {\n constructor() {\n super();\n this.container = null;\n\n domReady.then(() => {\n this.container = document.querySelector('.view-toggler');\n\n // stop browsers remembering previous form state\n this.container.output[0].checked = true;\n\n this.container.addEventListener('change', e => this._onChange(e));\n });\n }\n\n _onChange(event) {\n let value = this.container.output.value;\n\n if (!value) { // some browsers don't support the nice shortcut above (eg Safari)\n value = Array.from(this.container.output).reduce((value, input) => {\n return value || (input.checked ? input.value : '');\n }, '');\n }\n\n this.emit(\"change\", { value });\n }\n}\n","export default class ResultsCache {\n constructor(size) {\n this._size = size;\n this.purge();\n }\n\n purge() {\n this._fingerprints = [];\n this._items = [];\n this._index = 0;\n }\n\n add(fingerprint, svgFile) {\n const oldItem = this._items[this._index];\n\n if (oldItem) {\n // gc blob url\n oldItem.release();\n }\n\n this._fingerprints[this._index] = fingerprint;\n this._items[this._index] = svgFile;\n\n this._index = (this._index + 1) % this._size;\n }\n\n match(fingerprint) {\n return this._items[this._fingerprints.indexOf(fingerprint)];\n }\n}\n","import { transitionToClass } from '../utils';\n\nexport default class MainUi {\n constructor(...elements) {\n this._activated = false;\n this._toActivate = elements;\n }\n\n activate() {\n if (this._activated) return;\n this._activated = true;\n\n return Promise.all(\n this._toActivate.map(el => transitionToClass(el))\n );\n }\n}\n","import { idbKeyval as storage } from '../utils/storage';\nimport Svgo from './svgo';\nimport { domReady } from './utils';\nimport Output from './ui/output';\nimport DownloadButton from './ui/download-button';\nimport CopyButton from './ui/copy-button';\nimport { copySupported } from './ui/copy-button';\nimport BgFillButton from './ui/bg-fill-button';\nimport Results from './ui/results';\nimport Settings from './ui/settings';\nimport MainMenu from './ui/main-menu';\nimport Toasts from './ui/toasts';\nimport FileDrop from './ui/file-drop';\nimport Preloader from './ui/preloader';\nimport Changelog from './ui/changelog';\nimport ResultsContainer from './ui/results-container';\nimport ViewToggler from './ui/view-toggler';\nimport ResultsCache from './results-cache';\nimport MainUi from './ui/main-ui';\n\nconst svgo = new Svgo();\n\nexport default class MainController {\n constructor() {\n this._container = null;\n\n // ui components\n this._mainUi = null;\n this._outputUi = new Output();\n this._downloadButtonUi = new DownloadButton();\n this._copyButtonUi = new CopyButton();\n this._bgFillUi = new BgFillButton();\n this._resultsUi = new Results();\n this._settingsUi = new Settings();\n this._mainMenuUi = new MainMenu();\n this._toastsUi = new Toasts();\n this._dropUi = new FileDrop();\n this._preloaderUi = new Preloader();\n this._changelogUi = new Changelog(self.version);\n this._resultsContainerUi = new ResultsContainer(this._resultsUi);\n this._viewTogglerUi = new ViewToggler();\n\n // ui events\n this._settingsUi.on('change', () => this._onSettingsChange());\n this._settingsUi.on('reset', oldSettings => this._onSettingsReset(oldSettings));\n this._mainMenuUi.on('svgDataLoad', e => this._onInputChange(e));\n this._dropUi.on('svgDataLoad', e => this._onInputChange(e));\n this._mainMenuUi.on('error', ({error}) => this._handleError(error));\n this._viewTogglerUi.on('change', e => this._onViewSelectionChange(e));\n window.addEventListener('keydown', e => this._onGlobalKeyDown(e));\n\n // state\n this._inputItem = null;\n this._cache = new ResultsCache(10);\n this._latestCompressJobId = 0;\n this._userHasInteracted = false;\n this._reloading = false;\n\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.register('sw.js', {\n scope: './'\n }).then(registration => {\n registration.addEventListener('updatefound', () => this._onUpdateFound(registration));\n });\n }\n\n // tell the user about the latest update\n storage.get('last-seen-version').then(lastSeenVersion => {\n if (lastSeenVersion) {\n this._changelogUi.showLogFrom(lastSeenVersion);\n }\n storage.set('last-seen-version', self.version);\n });\n\n domReady.then(() => {\n this._container = document.querySelector('.app-output');\n\n // elements for intro anim\n this._mainUi = new MainUi(\n document.querySelector('.toolbar'),\n document.querySelector('.action-button-container'),\n this._outputUi.container,\n this._settingsUi.container\n );\n\n const actionContainer = document.querySelector('.action-button-container');\n const minorActionContainer = document.querySelector('.minor-action-container');\n\n minorActionContainer.appendChild(this._bgFillUi.container);\n\n if (copySupported) {\n minorActionContainer.appendChild(this._copyButtonUi.container);\n }\n\n actionContainer.appendChild(this._downloadButtonUi.container);\n\n document.querySelector('.output').appendChild(this._outputUi.container);\n this._container.appendChild(this._toastsUi.container);\n this._container.appendChild(this._dropUi.container);\n document.querySelector('.menu-extra').appendChild(this._changelogUi.container);\n\n // load previous settings\n this._loadSettings();\n\n // someone managed to hit the preloader, aww\n if (this._preloaderUi.activated) {\n this._toastsUi.show(\"Ready now!\", {\n duration: 3000\n });\n }\n\n // for testing\n if (false) {\n (async () => {\n this._onInputChange({\n data: await fetch('test-svgs/car-lite.svg').then(r => r.text()),\n filename: 'car-lite.svg'\n });\n })();\n }\n });\n }\n\n _onGlobalKeyDown(event) {\n if (event.key === 'o' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n this._mainMenuUi.showFilePicker();\n }\n }\n\n _onViewSelectionChange(event) {\n this._outputUi.set(event.value);\n }\n\n _onUpdateFound(registration) {\n const newWorker = registration.installing;\n\n registration.installing.addEventListener('statechange', async () => {\n if (this._reloading) return;\n\n // the very first activation!\n // tell the user stuff works offline\n if (newWorker.state == 'activated' && !navigator.serviceWorker.controller) {\n this._toastsUi.show(\"Ready to work offline\", {\n duration: 5000\n });\n return;\n }\n\n if (newWorker.state == 'activated' && navigator.serviceWorker.controller) {\n // if the user hasn't interacted yet, do a sneaky reload\n if (!this._userHasInteracted) {\n this._reloading = true;\n location.reload();\n return;\n }\n\n // otherwise, show the user an alert\n const toast = this._toastsUi.show(\"Update available\", {\n buttons: ['reload', 'dismiss']\n });\n\n const answer = await toast.answer;\n\n if (answer == 'reload') {\n this._reloading = true;\n location.reload();\n }\n }\n });\n }\n\n _onSettingsChange() {\n const settings = this._settingsUi.getSettings();\n this._saveSettings(settings);\n this._compressSvg(settings);\n }\n\n async _onSettingsReset(oldSettings) {\n const toast = this._toastsUi.show(\"Settings reset\", {\n buttons: ['undo', 'dismiss'],\n duration: 5000\n });\n\n if ((await toast.answer) === 'undo') {\n this._settingsUi.setSettings(oldSettings);\n this._onSettingsChange();\n }\n }\n\n async _onInputChange(event) {\n const settings = this._settingsUi.getSettings();\n this._userHasInteracted = true;\n\n try {\n this._inputItem = await svgo.load(event.data);\n this._inputFilename = event.filename;\n }\n catch(e) {\n // This extra scope is working around a babel-minify bug.\n // It's fixed in Babel 7.\n {\n const error = new Error(\"Load failed: \" + e.message);\n this._mainMenuUi.stopSpinner();\n this._handleError(error);\n return;\n }\n }\n\n this._cache.purge();\n\n let firstIteration = true;\n\n const compressed = () => {\n if (firstIteration) {\n this._outputUi.reset();\n this._mainUi.activate();\n this._mainMenuUi.allowHide = true;\n this._mainMenuUi.hide();\n firstIteration = false;\n }\n }\n\n this._compressSvg(settings, () => compressed());\n\n if (firstIteration) {\n compressed();\n }\n }\n\n _handleError(e) {\n this._toastsUi.show(e.message);\n console.error(e);\n }\n\n async _loadSettings() {\n const settings = await storage.get('settings');\n if (settings) this._settingsUi.setSettings(settings);\n }\n\n _saveSettings(settings) {\n const copy = Object.assign({}, settings);\n // doesn't make sense to retain the \"show original\" option\n delete copy.original;\n storage.set('settings', copy);\n }\n\n async _compressSvg(settings, iterationCallback = function(){}) {\n const thisJobId = this._latestCompressJobId = Math.random();\n\n await svgo.abortCurrent();\n\n if (thisJobId != this._latestCompressJobId) {\n // while we've been waiting, there's been a newer call\n // to _compressSvg, we don't need to do anything\n return;\n }\n\n if (settings.original) {\n this._updateForFile(this._inputItem, {\n compress: settings.gzip\n });\n return;\n }\n\n const cacheMatch = this._cache.match(settings.fingerprint);\n\n if (cacheMatch) {\n this._updateForFile(cacheMatch, {\n compareToFile: this._inputItem,\n compress: settings.gzip\n });\n return;\n }\n\n this._downloadButtonUi.working();\n\n try {\n const finalResultFile = await svgo.process(settings, resultFile => {\n iterationCallback(resultFile);\n this._updateForFile(resultFile, {\n compareToFile: this._inputItem,\n compress: settings.gzip\n });\n });\n\n this._cache.add(settings.fingerprint, finalResultFile);\n }\n catch(e) {\n if (e.message == \"abort\") return;\n e.message = \"Minifying error: \" + e.message;\n this._handleError(e);\n }\n finally {\n this._downloadButtonUi.done();\n }\n }\n\n async _updateForFile(svgFile, { compareToFile, compress }) {\n this._outputUi.update(svgFile);\n this._downloadButtonUi.setDownload(this._inputFilename, svgFile);\n this._copyButtonUi.setCopyText(svgFile.text);\n\n this._resultsUi.update({\n comparisonSize: compareToFile && (await compareToFile.size({ compress })),\n size: await svgFile.size({ compress })\n });\n }\n}\n\n","import WorkerMessenger from './worker-messenger';\nimport SvgFile from './svg-file';\n\nexport default class Svgo extends WorkerMessenger {\n constructor() {\n super('js/svgo-worker.js');\n this._abortOnNextIteration = false;\n this._currentJob = Promise.resolve();\n }\n\n async load(svgText) {\n const {width, height} = await this._requestResponse({\n action: 'load',\n data: svgText\n });\n\n return new SvgFile(svgText, width, height);\n }\n\n process(settings, iterationCallback) {\n return this._currentJob = this.abortCurrent().then(async () => {\n this._abortOnNextIteration = false;\n\n let result = await this._requestResponse({\n action: 'process',\n settings\n });\n\n var resultFile = new SvgFile(result.data, result.dimensions.width, result.dimensions.height);\n\n iterationCallback(resultFile);\n\n if (settings.multipass) {\n while (result = await this.nextPass()) {\n if (this._abortOnNextIteration) {\n throw Error('abort');\n }\n resultFile = new SvgFile(result.data, result.dimensions.width, result.dimensions.height);\n iterationCallback(resultFile);\n }\n }\n\n // return final result\n return resultFile;\n });\n }\n\n nextPass() {\n return this._requestResponse({\n action: 'nextPass'\n });\n }\n\n async abortCurrent() {\n this._abortOnNextIteration = true;\n await this._currentJob;\n }\n\n async release() {\n await this.abortCurrent();\n super.release();\n }\n}\n","import { trackFocusMethod } from './utils';\nimport MainController from './main-controller';\n\ntrackFocusMethod();\nnew MainController();\n"],"names":["createContextualFragment","children","replace","map","reduce","Response","text","removeClass","classList","contains","Promise","resolve","target","removeEventListener","remove","add","requestAnimationFrame","addEventListener","x","pageX","y","pageY","Math","abs","sqrt","touches","Array","from","pow","floor","round","init","call","_maxListeners","defaultMaxListeners","length","apply","TypeError","_events","newListener","emit","listener","_eventsCount","unshift","push","warned","Error","name","emitter","type","count","console","warn","log","removeListener","arguments","pop","readyState","document","createRange","selectNode","documentElement","indexedDB","open","onerror","error","onupgradeneeded","result","createObjectStore","onsuccess","transaction","oncomplete","objectStore","get","set","put","delete","self","localStorage","getItem","setItem","removeItem","constructor","_requestId","_pending","_url","_worker","Worker","onmessage","_onMessage","release","terminate","Object","keys","_fulfillPending","id","_postMessage","postMessage","data","_requestResponse","compress","_compressedSize","_blob","width","height","size","then","byteLength","_create","Blob","URL","createObjectURL","blob","url","revokeObjectURL","eventArea","shouldCaptureFunc","_target","_shouldCaptureFunc","_dx","_dy","_scale","_active","_lastPoints","forEach","bind","_onPointerDown","_onWheel","reset","_update","preventDefault","getBoundingClientRect","deltaY","deltaMode","max","min","left","top","_onFirstPointerDown","_onPointerMove","_onPointerUp","which","style","WebkitTransform","transform","container","_svgFrame","querySelector","scrolling","_svgContainer","_panZoom","setSvg","_nextLoadPromise","src","encodeURIComponent","highlight","_codeEl","innerHTML","_types","image","code","_svgFile","_switchQueue","noAnimate","update","_activeType","appendChild","all","removeChild","animate","offsetLeft","_showTimeout","display","show","clearTimeout","setTimeout","hide","title","href","iconSvg","minor","setAttribute","_ripple","_spinner","_onClick","working","done","navigator","msSaveBlob","filename","setDownload","download","queryCommandSupported","_text","_pre","createElement","textContent","body","getSelection","removeAllRanges","window","addRange","execCommand","setCopyText","setColor","backgroundColor","_sizeEl","_newSizeEl","_diffEl","comparisonSize","prototype","create","EventEmitter","usingDomains","domain","active","Domain","getPrototypeOf","setMaxListeners","isNaN","getMaxListeners","domainEmitter","domainThrown","context","addListener","on","prependListener","once","prependOnceListener","removeAllListeners","listeners","listenerCount","eventNames","Reflect","ownKeys","range","_handle","_trackOn","_val","parentNode","insertBefore","firstChild","_onInputChange","_onRangeMouseDown","_onRangeTouchStart","_onRangeTouchEnd","_setPosition","focus","blur","value","_throttleTimeout","_pluginInputs","querySelectorAll","_globalInputs","_resetRipple","_resetBtn","_sliderMap","WeakMap","_scroller","_onChange","_onMouseWheel","_onReset","closest","currentTarget","scrollTop","getSettings","checked","hasAttribute","getAttribute","setSettings","plugins","fingerprint","join","allowHide","_loadFileInput","_pasteInput","_loadDemoBtn","_loadFileBtn","_pasteLabel","_overlay","_menu","_onMenuButtonClick","_onOverlayClick","_onLoadFileClick","_onLoadDemoClick","_onFileInputChange","_onTextInputChange","stopSpinner","showFilePicker","click","trim","includes","files","fetch","serviceWorker","controller","_content","_answerResolve","_hideTimeout","answer","className","duration","buttons","_activeEnters","_currentEnteredElement","_onDragEnter","_onDragLeave","_onDrop","dataTransfer","activated","_loadedVersion","showLogFrom","json","version","slice","concat","changes","_results","_mobileContainer","_container","_query","matchMedia","_positionResults","matches","output","_size","purge","_fingerprints","_items","_index","match","indexOf","_activated","_toActivate","activate","_abortOnNextIteration","_currentJob","load","action","process","abortCurrent","settings","dimensions","multipass","nextPass","_mainUi","_outputUi","_downloadButtonUi","_copyButtonUi","_bgFillUi","_resultsUi","_settingsUi","_mainMenuUi","_toastsUi","_dropUi","_preloaderUi","_changelogUi","_resultsContainerUi","_viewTogglerUi","_onSettingsChange","_onSettingsReset","_handleError","_onViewSelectionChange","_onGlobalKeyDown","_inputItem","_cache","_latestCompressJobId","_userHasInteracted","_reloading","register","scope","_onUpdateFound","storage","_loadSettings","key","ctrlKey","metaKey","installing","state","location","reload","_saveSettings","_compressSvg","_inputFilename","message","assign","original","random","_updateForFile","gzip","compareToFile"],"mappings":"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","preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS91dGlscy5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS91aS9wYW4tem9vbS5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS91aS9yZXN1bHRzLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL25vZGVfbW9kdWxlcy9yb2xsdXAtcGx1Z2luLW5vZGUtYnVpbHRpbnMvc3JjL2VzNi9ldmVudHMuanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3V0aWxzL3N0b3JhZ2UuanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2Uvd29ya2VyLW1lc3Nlbmdlci5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS9nemlwLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3N2Zy1maWxlLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL3N2Zy1vdXRwdXQuanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2UvdWkvY29kZS1vdXRwdXQuanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2UvcHJpc20uanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2UvdWkvb3V0cHV0LmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL3JpcHBsZS5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS91aS9zcGlubmVyLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL2Zsb2F0aW5nLWFjdGlvbi1idXR0b24uanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2UvdWkvZG93bmxvYWQtYnV0dG9uLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL2NvcHktYnV0dG9uLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL2JnLWZpbGwtYnV0dG9uLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL21hdGVyaWFsLXNsaWRlci5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS91aS9zZXR0aW5ncy5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS91aS9tYWluLW1lbnUuanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2UvdWkvdG9hc3RzLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL2ZpbGUtZHJvcC5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS91aS9wcmVsb2FkZXIuanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2UvdWkvY2hhbmdlbG9nLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL3Jlc3VsdHMtY29udGFpbmVyLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL3ZpZXctdG9nZ2xlci5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcGFnZS9yZXN1bHRzLWNhY2hlLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3VpL21haW4tdWkuanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2UvbWFpbi1jb250cm9sbGVyLmpzIiwiL2hvbWUvdHJhdmlzL2J1aWxkL2pha2VhcmNoaWJhbGQvc3Znb21nL3NyYy9qcy9wYWdlL3N2Z28uanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3BhZ2UvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBkb21SZWFkeSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICBmdW5jdGlvbiBjaGVja1N0YXRlKCkge1xuICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9ICdsb2FkaW5nJykgcmVzb2x2ZSgpO1xuICB9XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBjaGVja1N0YXRlKTtcbiAgY2hlY2tTdGF0ZSgpO1xufSk7XG5cbmNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbnJhbmdlLnNlbGVjdE5vZGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0clRvRWwoc3RyKSB7XG4gIGNvbnN0IGZyYWcgPSByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoc3RyKTtcbiAgcmV0dXJuIGZyYWcuY2hpbGRyZW5bMF07XG59XG5cbmNvbnN0IGVudGl0eU1hcCA9IHtcbiAgXCImXCI6IFwiJmFtcDtcIixcbiAgXCI8XCI6IFwiJmx0O1wiLFxuICBcIj5cIjogXCImZ3Q7XCIsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjMzk7JyxcbiAgXCIvXCI6ICcmI3gyRjsnXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSFRNTChzdHIpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UoL1smPD5cIidcXC9dL2csIHMgPT4gZW50aXR5TWFwW3NdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWxUYWcoc3RyaW5ncywgLi4udmFsdWVzKSB7XG4gIHZhbHVlcyA9IHZhbHVlcy5tYXAocyA9PiBlc2NhcGVIVE1MKHMpKTtcbiAgcmV0dXJuIHN0cmluZ3MucmVkdWNlKChzdHIsIHZhbCwgaSkgPT4gc3RyICs9IHZhbCArICh2YWx1ZXNbaV0gfHwgJycpLCAnJyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGVBc1RleHQoZmlsZSkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKGZpbGUpLnRleHQoKTtcbn07XG5cbmZ1bmN0aW9uIHRyYW5zaXRpb25DbGFzc0Z1bmMoe3JlbW92ZUNsYXNzID0gZmFsc2V9PXt9KSB7XG4gIHJldHVybiBmdW5jdGlvbihlbCwgY2xhc3NOYW1lID0gJ2FjdGl2ZScsIHRyYW5zaXRpb25DbGFzcyA9ICd0cmFuc2l0aW9uJykge1xuICAgIGlmIChyZW1vdmVDbGFzcykge1xuICAgICAgaWYgKCFlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9IGVsKSByZXR1cm47XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBsaXN0ZW5lcik7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBsaXN0ZW5lcik7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUodHJhbnNpdGlvbkNsYXNzKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfTtcblxuICAgICAgZWwuY2xhc3NMaXN0LmFkZCh0cmFuc2l0aW9uQ2xhc3MpO1xuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgbGlzdGVuZXIpO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgbGlzdGVuZXIpO1xuICAgICAgICBlbC5jbGFzc0xpc3RbcmVtb3ZlQ2xhc3MgPyAncmVtb3ZlJyA6ICdhZGQnXShjbGFzc05hbWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zaXRpb25Ub0NsYXNzID0gdHJhbnNpdGlvbkNsYXNzRnVuYygpO1xuZXhwb3J0IGNvbnN0IHRyYW5zaXRpb25Gcm9tQ2xhc3MgPSB0cmFuc2l0aW9uQ2xhc3NGdW5jKHtyZW1vdmVDbGFzczogdHJ1ZX0pO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZENzcyh1cmwpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcblxuICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHJlc29sdmUoKSk7XG4gICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHJlamVjdCgpKTtcblxuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNrRm9jdXNNZXRob2QoKSB7XG4gIHZhciBmb2N1c01ldGhvZCA9ICdtb3VzZSc7XG5cbiAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGV2ZW50ID0+IHtcbiAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmFkZChmb2N1c01ldGhvZCA9PSAna2V5JyA/ICdrZXktZm9jdXNlZCcgOiAnbW91c2UtZm9jdXNlZCcpO1xuICB9LCB0cnVlKTtcblxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBldmVudCA9PiB7XG4gICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ2tleS1mb2N1c2VkJyk7XG4gICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ21vdXNlLWZvY3VzZWQnKTtcbiAgfSwgdHJ1ZSk7XG5cbiAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKCkgPT4ge1xuICAgIGZvY3VzTWV0aG9kID0gJ2tleSc7XG4gIH0sIHRydWUpO1xuXG4gIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4ge1xuICAgIGZvY3VzTWV0aG9kID0gJ21vdXNlJztcbiAgfSwgdHJ1ZSk7XG59O1xuIiwiZnVuY3Rpb24gZ2V0WFkob2JqKSB7XG4gIHJldHVybiB7XG4gICAgeDogb2JqLnBhZ2VYLFxuICAgIHk6IG9iai5wYWdlWVxuICB9O1xufVxuXG5mdW5jdGlvbiB0b3VjaERpc3RhbmNlKHRvdWNoMSwgdG91Y2gyKSB7XG4gIGNvbnN0IGR4ID0gTWF0aC5hYnModG91Y2gyLnggLSB0b3VjaDEueCk7XG4gIGNvbnN0IGR5ID0gTWF0aC5hYnModG91Y2gyLnkgLSB0b3VjaDEueSk7XG4gIHJldHVybiBNYXRoLnNxcnQoZHgqZHggKyBkeSpkeSk7XG59XG5cbmZ1bmN0aW9uIGdldE1pZHBvaW50KHBvaW50MSwgcG9pbnQyKSB7XG4gIHJldHVybiB7XG4gICAgeDogKHBvaW50MS54ICsgcG9pbnQyLngpIC8gMixcbiAgICB5OiAocG9pbnQxLnkgKyBwb2ludDIueSkgLyAyXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFBvaW50cyhldmVudCkge1xuICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGV2ZW50LnRvdWNoZXMpLm1hcCh0ID0+IGdldFhZKHQpKTtcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gW2dldFhZKGV2ZW50KV07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFuWm9vbSB7XG4gIGNvbnN0cnVjdG9yKHRhcmdldCwge1xuICAgIGV2ZW50QXJlYSA9IHRhcmdldCxcbiAgICBzaG91bGRDYXB0dXJlRnVuYyA9ICgpID0+IHRydWVcbiAgfT17fSkge1xuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLl9zaG91bGRDYXB0dXJlRnVuYyA9IHNob3VsZENhcHR1cmVGdW5jO1xuICAgIHRoaXMuX2R4ID0gMDtcbiAgICB0aGlzLl9keSA9IDA7XG4gICAgdGhpcy5fc2NhbGUgPSAxO1xuICAgIHRoaXMuX2FjdGl2ZSA9IDA7XG4gICAgdGhpcy5fbGFzdFBvaW50cyA9IFtdO1xuXG4gICAgLy8gYmluZFxuICAgIFtcbiAgICAgICdfb25Qb2ludGVyRG93bicsXG4gICAgICAnX29uUG9pbnRlck1vdmUnLFxuICAgICAgJ19vblBvaW50ZXJVcCdcbiAgICBdLmZvckVhY2goZnVuY05hbWUgPT4ge1xuICAgICAgdGhpc1tmdW5jTmFtZV0gPSB0aGlzW2Z1bmNOYW1lXS5iaW5kKHRoaXMpO1xuICAgIH0pXG5cbiAgICAvLyBib3VuZCBldmVudHNcbiAgICBldmVudEFyZWEuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fb25Qb2ludGVyRG93bik7XG4gICAgZXZlbnRBcmVhLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl9vblBvaW50ZXJEb3duKTtcblxuICAgIC8vIHVuYm9udWRcbiAgICBldmVudEFyZWEuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBlID0+IHRoaXMuX29uV2hlZWwoZSkpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fZHggPSAwO1xuICAgIHRoaXMuX2R5ID0gMDtcbiAgICB0aGlzLl9zY2FsZSA9IDE7XG4gICAgdGhpcy5fdXBkYXRlKCk7XG4gIH1cblxuICBfb25XaGVlbChldmVudCkge1xuICAgIGlmICghdGhpcy5fc2hvdWxkQ2FwdHVyZUZ1bmMoZXZlbnQudGFyZ2V0KSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBib3VuZGluZ1JlY3QgPSB0aGlzLl90YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgbGV0IGRlbHRhID0gZXZlbnQuZGVsdGFZO1xuXG4gICAgaWYgKGV2ZW50LmRlbHRhTW9kZSA9PT0gMSkgeyAvLyAxIGlzIFwibGluZXNcIiwgMCBpcyBcInBpeGVsc1wiXG4gICAgICAvLyBGaXJlZm94IHVzZXMgXCJsaW5lc1wiIHdoZW4gbW91c2UgaXMgY29ubmVjdGVkXG4gICAgICBkZWx0YSAqPSAxNTtcbiAgICB9XG5cbiAgICAvLyBzdG9wIG1vdXNlIHdoZWVsIHByb2R1Y2luZyBodWdlIHZhbHVlc1xuICAgIGRlbHRhID0gTWF0aC5tYXgoTWF0aC5taW4oZGVsdGEsIDYwKSwgLTYwKTtcblxuICAgIGNvbnN0IHNjYWxlRGlmZiA9IChkZWx0YSAvIDMwMCkgKyAxO1xuXG4gICAgLy8gYXZvaWQgdG8tc21hbGwgdmFsdWVzXG4gICAgaWYgKHRoaXMuX3NjYWxlICogc2NhbGVEaWZmIDwgMC4wNSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fc2NhbGUgKj0gc2NhbGVEaWZmO1xuICAgIHRoaXMuX2R4IC09IChldmVudC5wYWdlWCAtIGJvdW5kaW5nUmVjdC5sZWZ0KSAqIChzY2FsZURpZmYgLSAxKTtcbiAgICB0aGlzLl9keSAtPSAoZXZlbnQucGFnZVkgLSBib3VuZGluZ1JlY3QudG9wKSAqIChzY2FsZURpZmYgLSAxKTtcbiAgICB0aGlzLl91cGRhdGUoKTtcbiAgfVxuXG4gIF9vbkZpcnN0UG9pbnRlckRvd24oZXZlbnQpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vblBvaW50ZXJNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fb25Qb2ludGVyVXApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX29uUG9pbnRlck1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fb25Qb2ludGVyVXApO1xuICB9XG5cbiAgX29uUG9pbnRlckRvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PSAnbW91c2Vkb3duJyAmJiBldmVudC53aGljaCAhPSAxKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLl9zaG91bGRDYXB0dXJlRnVuYyhldmVudC50YXJnZXQpKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuX2xhc3RQb2ludHMgPSBnZXRQb2ludHMoZXZlbnQpO1xuICAgIHRoaXMuX2FjdGl2ZSsrO1xuXG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMSkge1xuICAgICAgdGhpcy5fb25GaXJzdFBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBfb25Qb2ludGVyTW92ZShldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgcG9pbnRzID0gZ2V0UG9pbnRzKGV2ZW50KTtcbiAgICBjb25zdCBhdmVyYWdlUG9pbnQgPSBwb2ludHMucmVkdWNlKGdldE1pZHBvaW50KTtcbiAgICBjb25zdCBhdmVyYWdlTGFzdFBvaW50ID0gdGhpcy5fbGFzdFBvaW50cy5yZWR1Y2UoZ2V0TWlkcG9pbnQpO1xuICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9IHRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHRoaXMuX2R4ICs9IGF2ZXJhZ2VQb2ludC54IC0gYXZlcmFnZUxhc3RQb2ludC54O1xuICAgIHRoaXMuX2R5ICs9IGF2ZXJhZ2VQb2ludC55IC0gYXZlcmFnZUxhc3RQb2ludC55O1xuXG4gICAgaWYgKHBvaW50c1sxXSkge1xuICAgICAgY29uc3Qgc2NhbGVEaWZmID0gdG91Y2hEaXN0YW5jZShwb2ludHNbMF0sIHBvaW50c1sxXSkgLyB0b3VjaERpc3RhbmNlKHRoaXMuX2xhc3RQb2ludHNbMF0sIHRoaXMuX2xhc3RQb2ludHNbMV0pO1xuICAgICAgdGhpcy5fc2NhbGUgKj0gc2NhbGVEaWZmO1xuICAgICAgdGhpcy5fZHggLT0gKGF2ZXJhZ2VQb2ludC54IC0gYm91bmRpbmdSZWN0LmxlZnQpICogKHNjYWxlRGlmZiAtIDEpO1xuICAgICAgdGhpcy5fZHkgLT0gKGF2ZXJhZ2VQb2ludC55IC0gYm91bmRpbmdSZWN0LnRvcCkgKiAoc2NhbGVEaWZmIC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgdGhpcy5fbGFzdFBvaW50cyA9IHBvaW50cztcbiAgfVxuXG4gIF91cGRhdGUoKSB7XG4gICAgdGhpcy5fdGFyZ2V0LnN0eWxlLldlYmtpdFRyYW5zZm9ybSA9IHRoaXMuX3RhcmdldC5zdHlsZS50cmFuc2Zvcm1cbiAgICAgID0gYHRyYW5zbGF0ZTNkKCR7dGhpcy5fZHh9cHgsICR7dGhpcy5fZHl9cHgsIDApIHNjYWxlKCR7dGhpcy5fc2NhbGV9KWA7XG4gIH1cblxuICBfb25Qb2ludGVyVXAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuX2FjdGl2ZS0tO1xuICAgIHRoaXMuX2xhc3RQb2ludHMucG9wKCk7XG5cbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICB0aGlzLl9sYXN0UG9pbnRzID0gZ2V0UG9pbnRzKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9vblBvaW50ZXJNb3ZlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5fb25Qb2ludGVyVXApO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX29uUG9pbnRlck1vdmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fb25Qb2ludGVyVXApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBzdHJUb0VsIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5mdW5jdGlvbiByb3VuZChudW0sIHBsYWNlcykge1xuICBjb25zdCBtdWx0ID0gTWF0aC5wb3coMTAsIHBsYWNlcyk7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucm91bmQobnVtICogbXVsdCkpIC8gbXVsdDtcbn1cblxuZnVuY3Rpb24gaHVtYW5TaXplKGJ5dGVzKSB7XG4gIGlmIChieXRlcyA8IDEwMjQpIHtcbiAgICByZXR1cm4gYnl0ZXMgKyAnIGJ5dGVzJztcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gcm91bmQoYnl0ZXMgLyAxMDI0LCAyKSArICdrJztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXN1bHRzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKFxuICAgICAgJzxkaXYgY2xhc3M9XCJyZXN1bHRzXCI+JyArXG4gICAgICAgICc8c3BhbiBjbGFzcz1cInNpemVcIj48L3NwYW4+ICcgK1xuICAgICAgICAnPHNwYW4gY2xhc3M9XCJkaWZmXCI+PC9zcGFuPicgK1xuICAgICAgJzwvZGl2PicgK1xuICAgICcnKTtcblxuICAgIHRoaXMuX3NpemVFbCA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5zaXplJyk7XG4gICAgdGhpcy5fbmV3U2l6ZUVsID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignLm5ld1NpemUnKTtcbiAgICB0aGlzLl9kaWZmRWwgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuZGlmZicpO1xuICB9XG5cbiAgdXBkYXRlKHsgc2l6ZSwgY29tcGFyaXNvblNpemUgfSkge1xuICAgIGlmIChjb21wYXJpc29uU2l6ZSkge1xuICAgICAgdGhpcy5fc2l6ZUVsLnRleHRDb250ZW50ID0gaHVtYW5TaXplKGNvbXBhcmlzb25TaXplKSArICcg4oaSICcgKyBodW1hblNpemUoc2l6ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NpemVFbC50ZXh0Q29udGVudCA9IGh1bWFuU2l6ZShzaXplKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kaWZmRWwuY2xhc3NMaXN0LnJlbW92ZSgnZGVjcmVhc2UnLCAnaW5jcmVhc2UnKTtcblxuICAgIC8vIGp1c3QgZGlzcGxheWluZyBhIHNpbmdsZSBzaXplP1xuICAgIGlmICghY29tcGFyaXNvblNpemUpIHtcbiAgICAgIHRoaXMuX2RpZmZFbC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmIChzaXplID09PSBjb21wYXJpc29uU2l6ZSkge1xuICAgICAgdGhpcy5fZGlmZkVsLnRleHRDb250ZW50ID0gJzEwMCUnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2RpZmZFbC50ZXh0Q29udGVudCA9IHJvdW5kKHNpemUgLyBjb21wYXJpc29uU2l6ZSAqIDEwMCwgMikgKyAnJSc7XG4gICAgICB0aGlzLl9kaWZmRWwuY2xhc3NMaXN0LmFkZChzaXplID4gY29tcGFyaXNvblNpemUgPyAnaW5jcmVhc2UnIDogJ2RlY3JlYXNlJyk7XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkb21haW47XG5cbi8vIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCB0byBzdG9yZSBldmVudCBoYW5kbGVycy4gSW5zdGFudGlhdGluZyB0aGlzIGlzXG4vLyBmYXN0ZXIgdGhhbiBleHBsaWNpdGx5IGNhbGxpbmcgYE9iamVjdC5jcmVhdGUobnVsbClgIHRvIGdldCBhIFwiY2xlYW5cIiBlbXB0eVxuLy8gb2JqZWN0ICh0ZXN0ZWQgd2l0aCB2OCB2NC45KS5cbmZ1bmN0aW9uIEV2ZW50SGFuZGxlcnMoKSB7fVxuRXZlbnRIYW5kbGVycy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXI7XG5leHBvcnQge0V2ZW50RW1pdHRlcn07XG5cbi8vIG5vZGVqcyBvZGRpdHlcbi8vIHJlcXVpcmUoJ2V2ZW50cycpID09PSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXJcblxuRXZlbnRFbWl0dGVyLnVzaW5nRG9tYWlucyA9IGZhbHNlO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmRvbWFpbiA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kb21haW4gPSBudWxsO1xuICBpZiAoRXZlbnRFbWl0dGVyLnVzaW5nRG9tYWlucykge1xuICAgIC8vIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkb21haW4sIHRoZW4gYXR0YWNoIHRvIGl0LlxuICAgIGlmIChkb21haW4uYWN0aXZlICYmICEodGhpcyBpbnN0YW5jZW9mIGRvbWFpbi5Eb21haW4pKSB7XG4gICAgICB0aGlzLmRvbWFpbiA9IGRvbWFpbi5hY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudEhhbmRsZXJzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgaXNOYU4obikpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJuXCIgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uICRnZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuICRnZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG4vLyBUaGVzZSBzdGFuZGFsb25lIGVtaXQqIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBvcHRpbWl6ZSBjYWxsaW5nIG9mIGV2ZW50XG4vLyBoYW5kbGVycyBmb3IgZmFzdCBjYXNlcyBiZWNhdXNlIGVtaXQoKSBpdHNlbGYgb2Z0ZW4gaGFzIGEgdmFyaWFibGUgbnVtYmVyIG9mXG4vLyBhcmd1bWVudHMgYW5kIGNhbiBiZSBkZW9wdGltaXplZCBiZWNhdXNlIG9mIHRoYXQuIFRoZXNlIGZ1bmN0aW9ucyBhbHdheXMgaGF2ZVxuLy8gdGhlIHNhbWUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgdGh1cyBkbyBub3QgZ2V0IGRlb3B0aW1pemVkLCBzbyB0aGUgY29kZVxuLy8gaW5zaWRlIHRoZW0gY2FuIGV4ZWN1dGUgZmFzdGVyLlxuZnVuY3Rpb24gZW1pdE5vbmUoaGFuZGxlciwgaXNGbiwgc2VsZikge1xuICBpZiAoaXNGbilcbiAgICBoYW5kbGVyLmNhbGwoc2VsZik7XG4gIGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBsaXN0ZW5lcnNbaV0uY2FsbChzZWxmKTtcbiAgfVxufVxuZnVuY3Rpb24gZW1pdE9uZShoYW5kbGVyLCBpc0ZuLCBzZWxmLCBhcmcxKSB7XG4gIGlmIChpc0ZuKVxuICAgIGhhbmRsZXIuY2FsbChzZWxmLCBhcmcxKTtcbiAgZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIGxpc3RlbmVyc1tpXS5jYWxsKHNlbGYsIGFyZzEpO1xuICB9XG59XG5mdW5jdGlvbiBlbWl0VHdvKGhhbmRsZXIsIGlzRm4sIHNlbGYsIGFyZzEsIGFyZzIpIHtcbiAgaWYgKGlzRm4pXG4gICAgaGFuZGxlci5jYWxsKHNlbGYsIGFyZzEsIGFyZzIpO1xuICBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgbGlzdGVuZXJzW2ldLmNhbGwoc2VsZiwgYXJnMSwgYXJnMik7XG4gIH1cbn1cbmZ1bmN0aW9uIGVtaXRUaHJlZShoYW5kbGVyLCBpc0ZuLCBzZWxmLCBhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmIChpc0ZuKVxuICAgIGhhbmRsZXIuY2FsbChzZWxmLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIGxpc3RlbmVyc1tpXS5jYWxsKHNlbGYsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRNYW55KGhhbmRsZXIsIGlzRm4sIHNlbGYsIGFyZ3MpIHtcbiAgaWYgKGlzRm4pXG4gICAgaGFuZGxlci5hcHBseShzZWxmLCBhcmdzKTtcbiAgZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseShzZWxmLCBhcmdzKTtcbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGV2ZW50cywgZG9tYWluO1xuICB2YXIgbmVlZERvbWFpbkV4aXQgPSBmYWxzZTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT0gbnVsbCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBkb21haW4gPSB0aGlzLmRvbWFpbjtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgZXIgPSBhcmd1bWVudHNbMV07XG4gICAgaWYgKGRvbWFpbikge1xuICAgICAgaWYgKCFlcilcbiAgICAgICAgZXIgPSBuZXcgRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQnKTtcbiAgICAgIGVyLmRvbWFpbkVtaXR0ZXIgPSB0aGlzO1xuICAgICAgZXIuZG9tYWluID0gZG9tYWluO1xuICAgICAgZXIuZG9tYWluVGhyb3duID0gZmFsc2U7XG4gICAgICBkb21haW4uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgfSBlbHNlIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4gKCcgKyBlciArICcpJyk7XG4gICAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmICghaGFuZGxlcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGlzRm4gPSB0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJztcbiAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgc3dpdGNoIChsZW4pIHtcbiAgICAvLyBmYXN0IGNhc2VzXG4gICAgY2FzZSAxOlxuICAgICAgZW1pdE5vbmUoaGFuZGxlciwgaXNGbiwgdGhpcyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6XG4gICAgICBlbWl0T25lKGhhbmRsZXIsIGlzRm4sIHRoaXMsIGFyZ3VtZW50c1sxXSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBlbWl0VHdvKGhhbmRsZXIsIGlzRm4sIHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNDpcbiAgICAgIGVtaXRUaHJlZShoYW5kbGVyLCBpc0ZuLCB0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSwgYXJndW1lbnRzWzNdKTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIHNsb3dlclxuICAgIGRlZmF1bHQ6XG4gICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKVxuICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGVtaXRNYW55KGhhbmRsZXIsIGlzRm4sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgaWYgKG5lZWREb21haW5FeGl0KVxuICAgIGRvbWFpbi5leGl0KCk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoIWV2ZW50cykge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gbmV3IEV2ZW50SGFuZGxlcnMoKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKCFleGlzdGluZykge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICAgIGlmIChwcmVwZW5kKSB7XG4gICAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBpZiAoIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgbSA9ICRnZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICAgIGlmIChtICYmIG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0pIHtcbiAgICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgdHlwZSArICcgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgICAgZW1pdFdhcm5pbmcodyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cbmZ1bmN0aW9uIGVtaXRXYXJuaW5nKGUpIHtcbiAgdHlwZW9mIGNvbnNvbGUud2FybiA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnNvbGUud2FybihlKSA6IGNvbnNvbGUubG9nKGUpO1xufVxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgZmlyZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0YXJnZXQucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHJldHVybiBnO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmICghZXZlbnRzKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmICghbGlzdClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCAobGlzdC5saXN0ZW5lciAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgICAgIChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGxpc3RbMF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cztcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKCFldmVudHMpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoIWV2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGtleTsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBkbyB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfSB3aGlsZSAobGlzdGVuZXJzWzBdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICB2YXIgZXZsaXN0ZW5lcjtcbiAgdmFyIHJldDtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoIWV2ZW50cylcbiAgICByZXQgPSBbXTtcbiAgZWxzZSB7XG4gICAgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgICBpZiAoIWV2bGlzdGVuZXIpXG4gICAgICByZXQgPSBbXTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIHJldCA9IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdO1xuICAgIGVsc2VcbiAgICAgIHJldCA9IHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdC5vd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbi8vIEFib3V0IDEuNXggZmFzdGVyIHRoYW4gdGhlIHR3by1hcmcgdmVyc2lvbiBvZiBBcnJheSNzcGxpY2UoKS5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKHZhciBpID0gaW5kZXgsIGsgPSBpICsgMSwgbiA9IGxpc3QubGVuZ3RoOyBrIDwgbjsgaSArPSAxLCBrICs9IDEpXG4gICAgbGlzdFtpXSA9IGxpc3Rba107XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBpKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIiwiZXhwb3J0IGxldCBpZGJLZXl2YWwgPSAoKCkgPT4ge1xuICBsZXQgZGI7XG5cbiAgZnVuY3Rpb24gZ2V0REIoKSB7XG4gICAgaWYgKCFkYikge1xuICAgICAgZGIgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IG9wZW5yZXEgPSBpbmRleGVkREIub3Blbignc3Znby1rZXl2YWwnLCAxKTtcblxuICAgICAgICBvcGVucmVxLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG9wZW5yZXEuZXJyb3IpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9wZW5yZXEub251cGdyYWRlbmVlZGVkID0gKCkgPT4ge1xuICAgICAgICAgIC8vIEZpcnN0IHRpbWUgc2V0dXA6IGNyZWF0ZSBhbiBlbXB0eSBvYmplY3Qgc3RvcmVcbiAgICAgICAgICBvcGVucmVxLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSgna2V5dmFsJyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb3BlbnJlcS5vbnN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShvcGVucmVxLnJlc3VsdCk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRiO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gd2l0aFN0b3JlKHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgZGIgPSBhd2FpdCBnZXREQigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdrZXl2YWwnLCB0eXBlKTtcbiAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICB0cmFuc2FjdGlvbi5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHRyYW5zYWN0aW9uLmVycm9yKTtcbiAgICAgIGNhbGxiYWNrKHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdrZXl2YWwnKSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXkpIHtcbiAgICAgIGxldCByZXE7XG4gICAgICBhd2FpdCB3aXRoU3RvcmUoJ3JlYWRvbmx5Jywgc3RvcmUgPT4ge1xuICAgICAgICByZXEgPSBzdG9yZS5nZXQoa2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcS5yZXN1bHQ7XG4gICAgfSxcbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHdpdGhTdG9yZSgncmVhZHdyaXRlJywgc3RvcmUgPT4ge1xuICAgICAgICBzdG9yZS5wdXQodmFsdWUsIGtleSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGRlbGV0ZShrZXkpIHtcbiAgICAgIHJldHVybiB3aXRoU3RvcmUoJ3JlYWR3cml0ZScsIHN0b3JlID0+IHtcbiAgICAgICAgc3RvcmUuZGVsZXRlKGtleSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59KSgpO1xuXG4vLyBpT1MgYWRkLXRvLWhvbWVzY3JlZW4gaXMgbWlzc2luZyBJREIsIG9yIGF0IGxlYXN0IGl0IHVzZWQgdG8uXG4vLyBJIGhhdmVuJ3QgdGVzdGVkIHRoaXMgaW4gYSB3aGlsZS5cbmlmICghc2VsZi5pbmRleGVkREIpIHtcbiAgaWRiS2V5dmFsID0ge1xuICAgIGdldDoga2V5ID0+IFByb21pc2UucmVzb2x2ZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKSxcbiAgICBzZXQ6IChrZXksIHZhbCkgPT4gUHJvbWlzZS5yZXNvbHZlKGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsKSksXG4gICAgZGVsZXRlOiBrZXkgPT4gUHJvbWlzZS5yZXNvbHZlKGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSkpXG4gIH07XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyTWVzc2VuZ2VyIHtcbiAgY29uc3RydWN0b3IodXJsKSB7XG4gICAgdGhpcy5fcmVxdWVzdElkID0gMDtcbiAgICAvLyB3b3JrZXIgam9icyBhd2FpdGluZyByZXNwb25zZSB7IFtyZXF1ZXN0SWRdOiBbIHJlc29sdmUsIHJlamVjdCBdIH1cbiAgICB0aGlzLl9wZW5kaW5nID0ge307XG4gICAgdGhpcy5fdXJsID0gdXJsO1xuICAgIHRoaXMuX3dvcmtlciA9IG5ldyBXb3JrZXIodGhpcy5fdXJsKTtcbiAgICB0aGlzLl93b3JrZXIub25tZXNzYWdlID0gZXZlbnQgPT4gdGhpcy5fb25NZXNzYWdlKGV2ZW50KTtcbiAgfVxuXG4gIGFzeW5jIHJlbGVhc2UoKSB7XG4gICAgaWYgKHRoaXMuX3dvcmtlcikge1xuICAgICAgdGhpcy5fd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5fcGVuZGluZykpIHtcbiAgICAgIHRoaXMuX2Z1bGZpbGxQZW5kaW5nKGlkLCBudWxsLCBuZXcgRXJyb3IoXCJXb3JrZXIgdGVybWluYXRlZDogXCIgKyB0aGlzLl91cmwpKTtcbiAgICB9XG4gIH1cblxuICBfcG9zdE1lc3NhZ2UobWVzc2FnZSkge1xuICAgIHRoaXMuX3dvcmtlci5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIF9vbk1lc3NhZ2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50LmRhdGEuaWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiVW5leHBlY3RlZCBtZXNzYWdlXCIsIGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mdWxmaWxsUGVuZGluZyhldmVudC5kYXRhLmlkLCBldmVudC5kYXRhLnJlc3VsdCwgZXZlbnQuZGF0YS5lcnJvcik7XG4gIH1cblxuICBfZnVsZmlsbFBlbmRpbmcoaWQsIHJlc3VsdCwgZXJyb3IpIHtcbiAgICBjb25zdCByZXNvbHZlciA9IHRoaXMuX3BlbmRpbmdbaWRdO1xuXG4gICAgaWYgKCFyZXNvbHZlcikge1xuICAgICAgY29uc29sZS5sb2coXCJObyByZXNvbHZlciBmb3JcIiwgeyBpZCwgcmVzdWx0LCBlcnJvciB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5fcGVuZGluZ1tpZF07XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJlc29sdmVyWzFdKG5ldyBFcnJvcihlcnJvcikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJlc29sdmVyWzBdKHJlc3VsdCk7XG4gIH1cblxuICBfcmVxdWVzdFJlc3BvbnNlKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbWVzc2FnZS5pZCA9ICsrdGhpcy5fcmVxdWVzdElkO1xuICAgICAgdGhpcy5fcGVuZGluZ1ttZXNzYWdlLmlkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgdGhpcy5fcG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBXb3JrZXJNZXNzZW5nZXIgZnJvbSAnLi93b3JrZXItbWVzc2VuZ2VyJztcblxuY2xhc3MgR3ppcCBleHRlbmRzIFdvcmtlck1lc3NlbmdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdqcy9nemlwLXdvcmtlci5qcycpO1xuICB9XG5cbiAgY29tcHJlc3Moc3ZnRGF0YSkge1xuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0UmVzcG9uc2Uoe1xuICAgICAgZGF0YTogc3ZnRGF0YVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnemlwID0gbmV3IEd6aXAoKTtcbiIsImltcG9ydCB7IGd6aXAgfSBmcm9tICcuL2d6aXAnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdmdGaWxlIHtcbiAgY29uc3RydWN0b3IodGV4dCwgd2lkdGgsIGhlaWdodCkge1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgdGhpcy5fY29tcHJlc3NlZFNpemUgPSBudWxsO1xuICAgIHRoaXMuX3VybCA9ICcnO1xuICAgIHRoaXMuX2Jsb2IgPSBudWxsO1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGFzeW5jIHNpemUoeyBjb21wcmVzcyB9KSB7XG4gICAgaWYgKCFjb21wcmVzcykge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9jb21wcmVzc2VkU2l6ZSkge1xuICAgICAgdGhpcy5fY29tcHJlc3NlZFNpemUgPSBnemlwLmNvbXByZXNzKHRoaXMudGV4dCkudGhlbihyID0+IHIuYnl0ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NvbXByZXNzZWRTaXplO1xuICB9XG5cbiAgX2NyZWF0ZSgpIHtcbiAgICAvLyBJRSBHQ3MgYmxvYnMgb25jZSB0aGV5J3JlIG91dCBvZiByZWZlcmVuY2UsIGV2ZW4gaWYgdGhleVxuICAgIC8vIGhhdmUgYW4gb2JqZWN0IHVybCwgc28gd2UgaGF2ZSB0byBrZWVwIGluIGluIHJlZmVyZW5jZS5cbiAgICB0aGlzLl9ibG9iID0gbmV3IEJsb2IoW3RoaXMudGV4dF0sIHt0eXBlOiBcImltYWdlL3N2Zyt4bWxcIn0pO1xuICAgIHRoaXMuX3VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5fYmxvYik7XG4gIH1cblxuICBnZXQgYmxvYigpIHtcbiAgICBpZiAoIXRoaXMuX2Jsb2IpIHRoaXMuX2NyZWF0ZSgpO1xuICAgIHJldHVybiB0aGlzLl9ibG9iO1xuICB9XG5cbiAgZ2V0IHVybCgpIHtcbiAgICBpZiAoIXRoaXMuX3VybCkgdGhpcy5fY3JlYXRlKCk7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHJlbGVhc2UoKSB7XG4gICAgaWYgKCF0aGlzLl91cmwpIHJldHVybjtcblxuICAgIHRoaXMuX2Jsb2IgPSBudWxsO1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5fdXJsKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZG9tUmVhZHksIHN0clRvRWwgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgUGFuWm9vbSBmcm9tICcuL3Bhbi16b29tJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ZnT3V0cHV0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKFxuICAgICAgJzxkaXYgY2xhc3M9XCJzdmctb3V0cHV0XCI+JyArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwic3ZnLWNvbnRhaW5lclwiPicgK1xuICAgICAgICAgICc8aWZyYW1lIGNsYXNzPVwic3ZnLWZyYW1lXCIgc2FuZGJveD1cImFsbG93LXNjcmlwdHNcIj48L2lmcmFtZT4nICtcbiAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAvLyBTdG9wIHRvdWNoZXMgZ29pbmcgaW50byB0aGUgaWZyYW1lLlxuICAgICAgICAvLyBwb2ludGVyLWV2ZW50cyArIHRvdWNoICsgaWZyYW1lIGRvZXNuJ3Qgd29yayBpbiBDaHJvbWUgOihcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJzdmctY2xpY2tqYWNrZXJcIj48L2Rpdj4nICtcbiAgICAgICc8L2Rpdj4nICtcbiAgICAnJyk7XG5cblxuICAgIHRoaXMuX3N2Z0ZyYW1lID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignLnN2Zy1mcmFtZScpO1xuICAgIHRoaXMuX3N2Z0ZyYW1lLnNjcm9sbGluZyA9ICdubyc7XG5cbiAgICB0aGlzLl9zdmdDb250YWluZXIgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuc3ZnLWNvbnRhaW5lcicpO1xuXG4gICAgZG9tUmVhZHkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9wYW5ab29tID0gbmV3IFBhblpvb20odGhpcy5fc3ZnQ29udGFpbmVyLCB7XG4gICAgICAgIGV2ZW50QXJlYTogdGhpcy5jb250YWluZXJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U3ZnKHN2Z0ZpbGUpIHtcbiAgICAvLyBJIHdvdWxkIHJhdGhlciB1c2UgYmxvYiB1cmxzLCBidXQgdGhleSBkb24ndCB3b3JrIGluIEZpcmVmb3hcbiAgICAvLyBBbGwgdGhlIGludGVybmFsIHJlZnMgYnJlYWsuXG4gICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyNTY2N1xuICAgIGNvbnN0IG5leHRMb2FkID0gdGhpcy5fbmV4dExvYWRQcm9taXNlKCk7XG4gICAgdGhpcy5fc3ZnRnJhbWUuc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCxcIiArIGVuY29kZVVSSUNvbXBvbmVudChzdmdGaWxlLnRleHQpO1xuICAgIHRoaXMuX3N2Z0ZyYW1lLndpZHRoID0gc3ZnRmlsZS53aWR0aDtcbiAgICB0aGlzLl9zdmdGcmFtZS5oZWlnaHQgPSBzdmdGaWxlLmhlaWdodDtcbiAgICByZXR1cm4gbmV4dExvYWQ7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLl9zdmdGcmFtZS5zcmMgPSBcImFib3V0OmJsYW5rXCI7XG4gICAgdGhpcy5fcGFuWm9vbS5yZXNldCgpO1xuICB9XG5cbiAgX25leHRMb2FkUHJvbWlzZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBvbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N2Z0ZyYW1lLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbmxvYWQpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zdmdGcmFtZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgb25sb2FkKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc3RyVG9FbCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBQcmlzbSBmcm9tICcuLi9wcmlzbSc7XG5jb25zdCBwcmlzbSA9IG5ldyBQcmlzbSgpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2RlT3V0cHV0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKFxuICAgICAgJzxkaXYgY2xhc3M9XCJjb2RlLW91dHB1dFwiPicgK1xuICAgICAgICAnPHByZT48Y29kZT48L2NvZGU+PC9wcmU+JyArXG4gICAgICAnPC9kaXY+JyArXG4gICAgJycpO1xuICAgIHRoaXMuX2NvZGVFbCA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2NvZGUnKTtcbiAgfVxuXG4gIGFzeW5jIHNldFN2ZyhzdmdGaWxlKSB7XG4gICAgdGhpcy5fY29kZUVsLmlubmVySFRNTCA9IGF3YWl0IHByaXNtLmhpZ2hsaWdodChzdmdGaWxlLnRleHQpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fY29kZUVsLmlubmVySFRNTCA9ICcnO1xuICB9XG59XG4iLCJpbXBvcnQgV29ya2VyTWVzc2VuZ2VyIGZyb20gJy4vd29ya2VyLW1lc3Nlbmdlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaXNtIGV4dGVuZHMgV29ya2VyTWVzc2VuZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2pzL3ByaXNtLXdvcmtlci5qcycpO1xuICB9XG5cbiAgaGlnaGxpZ2h0KHN2Z0RhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdFJlc3BvbnNlKHtcbiAgICAgIGRhdGE6IHN2Z0RhdGFcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc3RyVG9FbCwgdHJhbnNpdGlvblRvQ2xhc3MsIHRyYW5zaXRpb25Gcm9tQ2xhc3MgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgU3ZnT3V0cHV0IGZyb20gJy4vc3ZnLW91dHB1dCc7XG5pbXBvcnQgQ29kZU91dHB1dCBmcm9tICcuL2NvZGUtb3V0cHV0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3V0cHV0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKFxuICAgICAgJzxkaXYgY2xhc3M9XCJvdXRwdXQtc3dpdGNoZXJcIj48L2Rpdj4nICtcbiAgICAnJyk7XG5cbiAgICB0aGlzLl90eXBlcyA9IHtcbiAgICAgIGltYWdlOiBuZXcgU3ZnT3V0cHV0KCksXG4gICAgICBjb2RlOiBuZXcgQ29kZU91dHB1dCgpXG4gICAgfTtcblxuICAgIHRoaXMuX3N2Z0ZpbGUgPSBudWxsO1xuICAgIHRoaXMuX3N3aXRjaFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGhpcy5zZXQoJ2ltYWdlJywge25vQW5pbWF0ZTogdHJ1ZX0pO1xuICB9XG5cbiAgdXBkYXRlKHN2Z0ZpbGUpIHtcbiAgICB0aGlzLl9zdmdGaWxlID0gc3ZnRmlsZTtcbiAgICByZXR1cm4gdGhpcy5fdHlwZXNbdGhpcy5fYWN0aXZlVHlwZV0uc2V0U3ZnKHN2Z0ZpbGUpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fdHlwZXNbdGhpcy5fYWN0aXZlVHlwZV0ucmVzZXQoKTtcbiAgfVxuXG4gIHNldCh0eXBlLCB7XG4gICAgbm9BbmltYXRlID0gZmFsc2VcbiAgfT17fSkge1xuICAgIHJldHVybiB0aGlzLl9zd2l0Y2hRdWV1ZSA9IHRoaXMuX3N3aXRjaFF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdG9SZW1vdmUgPSB0aGlzLl9hY3RpdmVUeXBlICYmIHRoaXMuX3R5cGVzW3RoaXMuX2FjdGl2ZVR5cGVdLmNvbnRhaW5lcjtcblxuICAgICAgdGhpcy5fYWN0aXZlVHlwZSA9IHR5cGU7XG4gICAgICBjb25zdCB0b0FkZCA9IHRoaXMuX3R5cGVzW3RoaXMuX2FjdGl2ZVR5cGVdLmNvbnRhaW5lcjtcbiAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRvQWRkKTtcblxuICAgICAgaWYgKHRoaXMuX3N2Z0ZpbGUpIGF3YWl0IHRoaXMudXBkYXRlKHRoaXMuX3N2Z0ZpbGUpO1xuXG4gICAgICBpZiAobm9BbmltYXRlKSB7XG4gICAgICAgIHRvQWRkLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xuICAgICAgICBpZiAodG9SZW1vdmUpIHRvUmVtb3ZlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25zID0gW1xuICAgICAgICAgIHRyYW5zaXRpb25Ub0NsYXNzKHRvQWRkKVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0b1JlbW92ZSkgdHJhbnNpdGlvbnMucHVzaCh0cmFuc2l0aW9uRnJvbUNsYXNzKHRvUmVtb3ZlKSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodHJhbnNpdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9SZW1vdmUpIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRvUmVtb3ZlKTtcbiAgICB9KVxuICB9XG59XG4iLCJpbXBvcnQgeyBzdHJUb0VsIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaXBwbGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lciA9IHN0clRvRWwoJzxkaXYgY2xhc3M9XCJyaXBwbGVcIj48L2Rpdj4nKTtcbiAgfVxuXG4gIGFuaW1hdGUoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnYW5pbWF0ZScpO1xuICAgIHRoaXMuY29udGFpbmVyLm9mZnNldExlZnQ7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYW5pbWF0ZScpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBzdHJUb0VsIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcGlubmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKFxuICAgICAgJzxkaXYgY2xhc3M9XCJzcGlubmVyXCI+JyArXG4gICAgICAgICc8ZGl2IGNsYXNzPVwic3Bpbm5lci1jb250YWluZXJcIj4nICtcbiAgICAgICAgICAnPGRpdiBjbGFzcz1cInNwaW5uZXItbGF5ZXJcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2lyY2xlLWNsaXBwZXIgbGVmdFwiPicgK1xuICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cImNpcmNsZVwiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJnYXAtcGF0Y2hcIj4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjaXJjbGVcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2lyY2xlLWNsaXBwZXIgcmlnaHRcIj4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjaXJjbGVcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAnPC9kaXY+JyArXG4gICAgICAgICc8L2Rpdj4nICtcbiAgICAgICc8L2Rpdj4nICtcbiAgICAnJyk7XG5cbiAgICB0aGlzLl9zaG93VGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgIGNvbnN0IGFuaW1FbmRMaXN0ZW5lciA9IGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0QW5pbWF0aW9uRW5kJywgYW5pbUVuZExpc3RlbmVyKTtcbiAgICB0aGlzLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCBhbmltRW5kTGlzdGVuZXIpO1xuICB9XG5cbiAgc2hvdyhkZWxheSA9IDMwMCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dCk7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdjb29sZG93bicpO1xuICAgIHRoaXMuX3Nob3dUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgfSwgZGVsYXkpO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbWVvdXQpO1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2Nvb2xkb3duJyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IHN0clRvRWwgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgUmlwcGxlIGZyb20gJy4vcmlwcGxlJztcbmltcG9ydCBTcGlubmVyIGZyb20gJy4vc3Bpbm5lcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb2F0aW5nQWN0aW9uQnV0dG9uIHtcbiAgY29uc3RydWN0b3IoeyB0aXRsZSwgaHJlZiwgaWNvblN2ZywgY2xhc3NMaXN0LCBtaW5vciB9KSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKFxuICAgICAgKGhyZWYgPyAnPGE+JyA6ICc8ZGl2IHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj4nKSArXG4gICAgICAgIGljb25TdmcgK1xuICAgICAgKGhyZWYgPyAnPC9hPicgOiAnPC9kaXY+JykgK1xuICAgICcnKTtcblxuICAgIGlmIChocmVmKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5ocmVmID0gaHJlZjtcbiAgICB9XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgdGl0bGUpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKG1pbm9yID8gJ21pbm9yLWZsb2F0aW5nLWFjdGlvbi1idXR0b24nIDogJ2Zsb2F0aW5nLWFjdGlvbi1idXR0b24nKTtcbiAgICBpZiAoY2xhc3NMaXN0KSB7XG4gICAgICBjbGFzc0xpc3QuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7IHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmlwcGxlID0gbmV3IFJpcHBsZSgpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JpcHBsZS5jb250YWluZXIpO1xuXG4gICAgdGhpcy5fc3Bpbm5lciA9IG5ldyBTcGlubmVyKCk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fc3Bpbm5lci5jb250YWluZXIpO1xuXG4gICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB0aGlzLl9vbkNsaWNrKGV2ZW50KSk7XG4gIH1cblxuICBfb25DbGljayhldmVudCkge1xuICAgIHRoaXMuX3JpcHBsZS5hbmltYXRlKCk7XG4gIH1cblxuICB3b3JraW5nKCkge1xuICAgIHRoaXMuX3NwaW5uZXIuc2hvdyg1MDApO1xuICB9XG5cbiAgZG9uZSgpIHtcbiAgICB0aGlzLl9zcGlubmVyLmhpZGUoKTtcbiAgfVxufVxuIiwiaW1wb3J0IEZsb2F0aW5nQWN0aW9uQnV0dG9uIGZyb20gJy4vZmxvYXRpbmctYWN0aW9uLWJ1dHRvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25sb2FkQnV0dG9uIGV4dGVuZHMgRmxvYXRpbmdBY3Rpb25CdXR0b24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCB0aXRsZSA9ICdEb3dubG9hZCc7XG5cbiAgICBzdXBlcih7XG4gICAgICB0aXRsZSxcbiAgICAgIGhyZWY6ICcuLycsXG4gICAgICBpY29uU3ZnOiAoXG4gICAgICAgICc8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBjbGFzcz1cImljb25cIj4nICtcbiAgICAgICAgICBgPHRpdGxlPiR7dGl0bGV9PC90aXRsZT5gICtcbiAgICAgICAgICAnPHBhdGggZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCIvPicgK1xuICAgICAgICAnPC9zdmc+J1xuICAgICAgKVxuICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZnRmlsZSA9IG51bGw7XG4gIH1cblxuICBfb25DbGljayhldmVudCkge1xuICAgIHN1cGVyLl9vbkNsaWNrKGV2ZW50KTtcblxuICAgIC8vIElFIGNvbXBhdFxuICAgIGlmICgnbXNTYXZlQmxvYicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5fc3ZnRmlsZS5ibG9iLCB0aGlzLl9zdmdGaWxlLmZpbGVuYW1lKTtcbiAgICB9XG4gIH1cblxuICBzZXREb3dubG9hZChmaWxlbmFtZSwgc3ZnRmlsZSkge1xuICAgIHRoaXMuY29udGFpbmVyLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgdGhpcy5jb250YWluZXIuaHJlZiA9IHN2Z0ZpbGUudXJsO1xuXG4gICAgLy8gZm9yIElFIGNvbXBhdFxuICAgIHRoaXMuX3N2Z0ZpbGUgPSBzdmdGaWxlO1xuICB9XG59XG4iLCJpbXBvcnQgRmxvYXRpbmdBY3Rpb25CdXR0b24gZnJvbSAnLi9mbG9hdGluZy1hY3Rpb24tYnV0dG9uJztcblxuZXhwb3J0IGNvbnN0IGNvcHlTdXBwb3J0ZWQgPSAoZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkICYmIGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgnY29weScpKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29weUJ1dHRvbiBleHRlbmRzIEZsb2F0aW5nQWN0aW9uQnV0dG9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdGl0bGUgPSAnQ29weSBhcyB0ZXh0JztcblxuICAgIHN1cGVyKHtcbiAgICAgIHRpdGxlLFxuICAgICAgaWNvblN2ZzogKFxuICAgICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJpY29uXCI+JyArXG4gICAgICAgICAgYDx0aXRsZT4ke3RpdGxlfTwvdGl0bGU+YCArXG4gICAgICAgICAgJzxwYXRoIGQ9XCJNMTYgMUg0QzMgMSAyIDIgMiAzdjE0aDJWM2gxMlYxem0zIDRIOEM3IDUgNiA2IDYgN3YxNGMwIDEgMSAyIDIgMmgxMWMxIDAgMi0xIDItMlY3YzAtMS0xLTItMi0yem0wIDE2SDhWN2gxMXYxNHpcIi8+JyArXG4gICAgICAgICc8L3N2Zz4nXG4gICAgICApLFxuICAgICAgbWlub3I6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuX3RleHQgPSBudWxsO1xuICAgIHRoaXMuX3ByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICB9XG5cbiAgX29uQ2xpY2soZXZlbnQpIHtcbiAgICBzdXBlci5fb25DbGljayhldmVudCk7XG4gICAgdGhpcy5fcHJlLnRleHRDb250ZW50ID0gdGhpcy5fdGV4dDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX3ByZSk7XG4gICAgZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZSh0aGlzLl9wcmUpO1xuXG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTtcblxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl9wcmUpO1xuICB9XG5cbiAgc2V0Q29weVRleHQodGV4dCwgZmlsZW5hbWUpIHtcbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcbiAgfVxufVxuIiwiaW1wb3J0IEZsb2F0aW5nQWN0aW9uQnV0dG9uIGZyb20gJy4vZmxvYXRpbmctYWN0aW9uLWJ1dHRvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJnRmlsbEJ1dHRvbiBleHRlbmRzIEZsb2F0aW5nQWN0aW9uQnV0dG9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgdGl0bGUgPSAnUHJldmlldyBvbiB2aXZpZCBiYWNrZ3JvdW5kJztcblxuICAgIHN1cGVyKHtcbiAgICAgIHRpdGxlLFxuICAgICAgaWNvblN2ZzogKFxuICAgICAgICAnPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJpY29uXCI+JyArXG4gICAgICAgICAgYDx0aXRsZT4ke3RpdGxlfTwvdGl0bGU+YCArXG4gICAgICAgICAgJzxwYXRoIGQ9XCJNMjEuMTQzIDkuNjY3Yy0uNzMzLTEuMzkyLTEuOTE0LTMuMDUtMy42MTctNC43NTMtMi45NzctMi45NzgtNS40NzgtMy45MTQtNi43ODUtMy45MTQtLjQxNCAwLS43MDguMDk0LS44Ni4yNDZsLTEuMzYxIDEuMzZjLTEuODk5LS4yMzYtMy40Mi4xMDYtNC4yOTQuOTgzLS44NzYuODc1LTEuMTY0IDIuMTU5LS43OTIgMy41MjMuNDkyIDEuODA2IDIuMzA1IDQuMDQ5IDUuOTA1IDUuMzc1LjAzOC4zMjMuMTU3LjYzOC40MDUuODg1LjU4OC41ODggMS41MzUuNTg2IDIuMTIxIDBzLjU4OC0xLjUzMy4wMDItMi4xMTljLS41ODgtLjU4Ny0xLjUzNy0uNTg4LTIuMTIzLS4wMDFsLS4xNy4yNTZjLTIuMDMxLS43NjUtMy4zOTUtMS44MjgtNC4yMzItMi45bDMuODc5LTMuODc1Yy40OTYgMi43MyA2LjQzMiA4LjY3NiA5LjE3OCA5LjE3OGwtNy4xMTUgNy4xMDdjLS4yMzQuMTUzLTIuNzk4LS4zMTYtNi4xNTYtMy42NzUtMy4zOTMtMy4zOTMtMy4xNzUtNS4yNzEtMy4wMjctNS40OThsMS44NTktMS44NTZjLS40MzktLjM1OS0uOTI1LTEuMTAzLTEuMTQxLTEuNjg5bC0yLjEzNCAyLjEzMWMtLjQ0NS40NDYtLjY4NSAxLjA2NC0uNjg1IDEuODIgMCAxLjYzNCAxLjEyMSAzLjkxNSAzLjcxMyA2LjUwNiAyLjc2NCAyLjc2NCA1LjU4IDQuMjQzIDcuNDMyIDQuMjQzLjY0OCAwIDEuMTgtLjE5NSAxLjU0Ny0uNTYybDguMDg2LTguMDc4Yy45MS44NzQtLjc3OCAzLjUzOC0uNzc4IDQuNjQ4IDAgMS4xMDQuODk2IDEuOTk5IDIgMS45OTkgMS4xMDUgMCAyLS44OTYgMi0yIDAtMy4xODQtMS40MjUtNi44MS0yLjg1Ny05LjM0em0tMTYuMjA5LTUuMzcxYy41MjctLjUzIDEuNDcxLS43OTEgMi42NTYtLjc2MWwtMy4yMDkgMy4yMDZjLS4yMzYtLjk3OC0uMDQ5LTEuODQ1LjU1My0yLjQ0NXptOS4yOTIgNC4wNzlsLS4wMy0uMDI5Yy0xLjI5Mi0xLjI5Mi0zLjgwMy00LjM1Ni0zLjA5Ni01LjA2My43MTUtLjcxNSAzLjQ4OCAxLjUyMSA1LjA2MiAzLjA5Ni44NjIuODYyIDIuMDg4IDIuMjQ3IDIuOTM3IDMuNDU4LTEuNzE3LTEuMDc0LTMuNDkxLTEuNDY5LTQuODczLTEuNDYyelwiLz4nICtcbiAgICAgICAgJzwvc3ZnPidcbiAgICAgICksXG4gICAgICBjbGFzc0xpc3Q6IFsgJ2ZpbGxBQicgXSxcbiAgICAgIG1pbm9yOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBfb25DbGljayhldmVudCkge1xuICAgIHN1cGVyLl9vbkNsaWNrKGV2ZW50KTtcbiAgICAvLyBldmVudCBhZGRzIGEgYmFja2dyb3VuZCBjb2xvclxuICAgIGlmICh0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ2FjdGl2ZScpKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgIHRoaXMuc2V0Q29sb3IoJ3RyYW5zcGFyZW50Jyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICB0aGlzLnNldENvbG9yKCdyZ2JhKDAsIDAsIDAsIDAuNyknKTtcbiAgICB9XG4gIH1cblxuICBzZXRDb2xvcihjb2xvcikge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc3RyVG9FbCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWF0ZXJpYWxTbGlkZXIge1xuICBjb25zdHJ1Y3RvcihyYW5nZUVsKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKGBcbiAgICAgIDxkaXYgY2xhc3M9XCJtYXRlcmlhbC1zbGlkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRyYWNrXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRyYWNrLW9uXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhhbmRsZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYCk7XG5cbiAgICB0aGlzLnJhbmdlID0gcmFuZ2VFbDtcbiAgICB0aGlzLl9oYW5kbGUgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuaGFuZGxlJyk7XG4gICAgdGhpcy5fdHJhY2tPbiA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy50cmFjay1vbicpO1xuICAgIHRoaXMuX3ZhbCA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy52YWwnKTtcblxuICAgIHJhbmdlRWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsIHJhbmdlRWwpO1xuICAgIHRoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZShyYW5nZUVsLCB0aGlzLmNvbnRhaW5lci5maXJzdENoaWxkKTtcblxuICAgIHJhbmdlRWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLl9vbklucHV0Q2hhbmdlKCkpO1xuICAgIHRoaXMucmFuZ2UuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4gdGhpcy5fb25SYW5nZU1vdXNlRG93bigpKTtcbiAgICB0aGlzLnJhbmdlLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCAoKSA9PiB0aGlzLl9vblJhbmdlVG91Y2hTdGFydCgpKTtcbiAgICB0aGlzLnJhbmdlLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgKCkgPT4gdGhpcy5fb25SYW5nZVRvdWNoRW5kKCkpO1xuXG4gICAgdGhpcy5fc2V0UG9zaXRpb24oKTtcbiAgfVxuXG4gIF9vblJhbmdlVG91Y2hTdGFydCgpIHtcbiAgICB0aGlzLnJhbmdlLmZvY3VzKCk7XG4gIH1cblxuICBfb25SYW5nZVRvdWNoRW5kKCkge1xuICAgIHRoaXMucmFuZ2UuYmx1cigpO1xuICB9XG5cbiAgX29uUmFuZ2VNb3VzZURvd24oKSB7XG4gICAgdGhpcy5yYW5nZS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcblxuICAgIGNvbnN0IHVwTGlzdGVuZXIgPSBlID0+IHtcbiAgICAgIC8vIElFIHJlcXVpcmVzIG1lIHRvIGRvIHRoaXMuIFBhaC5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShfID0+IHtcbiAgICAgICAgdGhpcy5yYW5nZS5ibHVyKCk7XG4gICAgICB9KVxuICAgICAgdGhpcy5yYW5nZS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB1cExpc3RlbmVyKTtcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHVwTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0IHZhbHVlKG5ld1ZhbCkge1xuICAgIHRoaXMucmFuZ2UudmFsdWUgPSBuZXdWYWw7XG4gICAgdGhpcy5fdXBkYXRlKCk7XG4gIH1cblxuICBfb25JbnB1dENoYW5nZSgpIHtcbiAgICB0aGlzLl91cGRhdGUoKTtcbiAgfVxuXG4gIF91cGRhdGUoKSB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuX3NldFBvc2l0aW9uKCkpO1xuICB9XG5cbiAgX3NldFBvc2l0aW9uKCkge1xuICAgIGNvbnN0IHsgbWluLCBtYXgsIHZhbHVlIH0gPSB0aGlzLnJhbmdlO1xuICAgIGNvbnN0IHBlcmNlbnQgPSAoTnVtYmVyKHZhbHVlKSAtIG1pbikgLyAobWF4IC0gbWluKTtcblxuICAgIHRoaXMuX3RyYWNrT24uc3R5bGUud2lkdGggPVxuICAgICAgdGhpcy5faGFuZGxlLnN0eWxlLmxlZnQgPSBwZXJjZW50ICogMTAwICsgXCIlXCI7XG5cbiAgICB0aGlzLl92YWwudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuaW1wb3J0IHsgZG9tUmVhZHkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgTWF0ZXJpYWxTbGlkZXIgZnJvbSAnLi9tYXRlcmlhbC1zbGlkZXInO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL3JpcHBsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNldHRpbmdzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX3Rocm90dGxlVGltZW91dCA9IG51bGw7XG5cbiAgICBkb21SZWFkeS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3BsdWdpbklucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZXR0aW5ncyAucGx1Z2lucyBpbnB1dCcpXG4gICAgICApO1xuICAgICAgdGhpcy5fZ2xvYmFsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNldHRpbmdzIC5nbG9iYWwgaW5wdXQnKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5fcmVzZXRSaXBwbGUgPSBuZXcgUmlwcGxlKCk7XG4gICAgICB0aGlzLl9yZXNldEJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZXR0aW5nLXJlc2V0Jyk7XG4gICAgICB0aGlzLl9yZXNldEJ0bi5hcHBlbmRDaGlsZCh0aGlzLl9yZXNldFJpcHBsZS5jb250YWluZXIpO1xuXG4gICAgICAvLyBtYXAgcmVhbCByYW5nZSBlbGVtZW50cyB0byBTbGlkZXIgaW5zdGFuY2VzXG4gICAgICB0aGlzLl9zbGlkZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgICAvLyBlbmhhbmNlIHJhbmdlc1xuICAgICAgQXJyYXkuZnJvbShcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnNldHRpbmdzIGlucHV0W3R5cGU9cmFuZ2VdJylcbiAgICAgICkuZm9yRWFjaChlbCA9PiB0aGlzLl9zbGlkZXJNYXAuc2V0KGVsLCBuZXcgTWF0ZXJpYWxTbGlkZXIoZWwpKSk7XG5cbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNldHRpbmdzJyk7XG4gICAgICB0aGlzLl9zY3JvbGxlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZXR0aW5ncy1zY3JvbGxlcicpO1xuXG4gICAgICB0aGlzLmNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBlID0+IHRoaXMuX29uQ2hhbmdlKGUpKTtcbiAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZSA9PiB0aGlzLl9vbkNoYW5nZShlKSk7XG4gICAgICB0aGlzLl9zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIGUgPT4gdGhpcy5fb25Nb3VzZVdoZWVsKGUpKTtcbiAgICAgIHRoaXMuX3Jlc2V0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB0aGlzLl9vblJlc2V0KGUpKTtcblxuICAgICAgLy8gU3RvcCBkb3VibGUtdGFwIHRleHQgc2VsZWN0aW9uLlxuICAgICAgLy8gVGhpcyBzdG9wcyBhbGwgdGV4dCBzZWxlY3Rpb24gd2hpY2ggaXMga2luZGEgc2FkLlxuICAgICAgLy8gSSB0aGluayB0aGlzIGNvZGUgd2lsbCBiaXRlIG1lLlxuICAgICAgdGhpcy5fc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZSA9PiB7XG4gICAgICAgIGlmIChlLnRhcmdldC5jbG9zZXN0KCdpbnB1dFt0eXBlPXJhbmdlXScpKSByZXR1cm47XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX29uTW91c2VXaGVlbChldmVudCkge1xuICAgIC8vIFByZXZlbnRzIGJvdW5jZSBlZmZlY3Qgb24gZGVza3RvcC5cbiAgICAvLyBGaXJlZm94IHVzZXMgREVMVEFfTElORSBvbiBhIG1vdXNlIHdoZWVsLCBpZ25vcmUgaXRcbiAgICBpZiAoIWV2ZW50LmRlbHRhTW9kZSkgeyAvLyAwIGlzIFwicGl4ZWxzXCJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCArPSBldmVudC5kZWx0YVk7XG4gICAgfVxuICB9XG5cbiAgX29uQ2hhbmdlKGV2ZW50KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Rocm90dGxlVGltZW91dCk7XG5cbiAgICAvLyB0aHJvdHRsZSByYW5nZVxuICAgIGlmIChldmVudC50YXJnZXQudHlwZSA9PSAncmFuZ2UnKSB7XG4gICAgICB0aGlzLl90aHJvdHRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZW1pdCgnY2hhbmdlJyksIDE1MCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5lbWl0KCdjaGFuZ2UnKTtcbiAgICB9XG4gIH1cblxuICBfb25SZXNldCgpIHtcbiAgICB0aGlzLl9yZXNldFJpcHBsZS5hbmltYXRlKCk7XG4gICAgY29uc3Qgb2xkU2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKCk7XG4gICAgLy8gU2V0IGFsbCBpbnB1dHMgYWNjb3JkaW5nIHRvIHRoZWlyIGluaXRpYWwgYXR0cmlidXRlc1xuICAgIGZvciAoY29uc3QgaW5wdXRFbCBvZiB0aGlzLl9nbG9iYWxJbnB1dHMpIHtcbiAgICAgIGlmIChpbnB1dEVsLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xuICAgICAgICBpbnB1dEVsLmNoZWNrZWQgPSBpbnB1dEVsLmhhc0F0dHJpYnV0ZSgnY2hlY2tlZCcpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5wdXRFbC50eXBlID09ICdyYW5nZScpIHtcbiAgICAgICAgdGhpcy5fc2xpZGVyTWFwLmdldChpbnB1dEVsKS52YWx1ZSA9IGlucHV0RWwuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaW5wdXRFbCBvZiB0aGlzLl9wbHVnaW5JbnB1dHMpIHtcbiAgICAgIGlucHV0RWwuY2hlY2tlZCA9IGlucHV0RWwuaGFzQXR0cmlidXRlKCdjaGVja2VkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KCdyZXNldCcsIG9sZFNldHRpbmdzKTtcbiAgICB0aGlzLmVtaXQoJ2NoYW5nZScpO1xuICB9XG5cbiAgc2V0U2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICBmb3IgKGNvbnN0IGlucHV0RWwgb2YgdGhpcy5fZ2xvYmFsSW5wdXRzKSB7XG4gICAgICBpZiAoIShpbnB1dEVsLm5hbWUgaW4gc2V0dGluZ3MpKSBjb250aW51ZTtcblxuICAgICAgaWYgKGlucHV0RWwudHlwZSA9PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGlucHV0RWwuY2hlY2tlZCA9IHNldHRpbmdzW2lucHV0RWwubmFtZV07XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpbnB1dEVsLnR5cGUgPT0gJ3JhbmdlJykge1xuICAgICAgICB0aGlzLl9zbGlkZXJNYXAuZ2V0KGlucHV0RWwpLnZhbHVlID0gc2V0dGluZ3NbaW5wdXRFbC5uYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0RWwgb2YgdGhpcy5fcGx1Z2luSW5wdXRzKSB7XG4gICAgICBpZiAoIShpbnB1dEVsLm5hbWUgaW4gc2V0dGluZ3MucGx1Z2lucykpIGNvbnRpbnVlO1xuICAgICAgaW5wdXRFbC5jaGVja2VkID0gc2V0dGluZ3MucGx1Z2luc1tpbnB1dEVsLm5hbWVdO1xuICAgIH1cbiAgfVxuXG4gIGdldFNldHRpbmdzKCkge1xuICAgIC8vIGZpbmdlcnByaW50IGlzIHVzZWQgZm9yIGNhY2hlIGxvb2t1cHNcbiAgICBjb25zdCBmaW5nZXJwcmludCA9IFtdO1xuXG4gICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgcGx1Z2luczoge31cbiAgICB9O1xuXG4gICAgdGhpcy5fZ2xvYmFsSW5wdXRzLmZvckVhY2goaW5wdXRFbCA9PiB7XG4gICAgICBpZiAoaW5wdXRFbC5uYW1lICE9ICdnemlwJyAmJiBpbnB1dEVsLm5hbWUgIT0gJ29yaWdpbmFsJykge1xuICAgICAgICBpZiAoaW5wdXRFbC50eXBlID09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICBmaW5nZXJwcmludC5wdXNoKE51bWJlcihpbnB1dEVsLmNoZWNrZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmaW5nZXJwcmludC5wdXNoKCd8JyArIGlucHV0RWwudmFsdWUgKyAnfCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dEVsLnR5cGUgPT0gJ2NoZWNrYm94Jykge1xuICAgICAgICBvdXRwdXRbaW5wdXRFbC5uYW1lXSA9IGlucHV0RWwuY2hlY2tlZDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBvdXRwdXRbaW5wdXRFbC5uYW1lXSA9IGlucHV0RWwudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wbHVnaW5JbnB1dHMuZm9yRWFjaChpbnB1dEVsID0+IHtcbiAgICAgIGZpbmdlcnByaW50LnB1c2goTnVtYmVyKGlucHV0RWwuY2hlY2tlZCkpO1xuICAgICAgb3V0cHV0LnBsdWdpbnNbaW5wdXRFbC5uYW1lXSA9IGlucHV0RWwuY2hlY2tlZDtcbiAgICB9KTtcblxuICAgIG91dHB1dC5maW5nZXJwcmludCA9IGZpbmdlcnByaW50LmpvaW4oKTtcblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGRvbVJlYWR5LFxuICB0cmFuc2l0aW9uRnJvbUNsYXNzLFxuICB0cmFuc2l0aW9uVG9DbGFzcyxcbiAgcmVhZEZpbGVBc1RleHRcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi9zcGlubmVyJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haW5NZW51IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYWxsb3dIaWRlID0gZmFsc2U7XG4gICAgdGhpcy5fc3Bpbm5lciA9IG5ldyBTcGlubmVyKCk7XG5cbiAgICBkb21SZWFkeS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1haW4tbWVudScpO1xuICAgICAgdGhpcy5fbG9hZEZpbGVJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb2FkLWZpbGUtaW5wdXQnKTtcbiAgICAgIHRoaXMuX3Bhc3RlSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGFzdGUtaW5wdXQnKTtcbiAgICAgIHRoaXMuX2xvYWREZW1vQnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxvYWQtZGVtbycpO1xuICAgICAgdGhpcy5fbG9hZEZpbGVCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubG9hZC1maWxlJyk7XG4gICAgICB0aGlzLl9wYXN0ZUxhYmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1lbnUtaW5wdXQnKTtcbiAgICAgIHRoaXMuX292ZXJsYXkgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcub3ZlcmxheScpO1xuICAgICAgdGhpcy5fbWVudSA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5tZW51Jyk7XG5cbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWJ0bicpXG4gICAgICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGUgPT4gdGhpcy5fb25NZW51QnV0dG9uQ2xpY2soZSkpO1xuXG4gICAgICB0aGlzLl9vdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB0aGlzLl9vbk92ZXJsYXlDbGljayhlKSk7XG5cbiAgICAgIHRoaXMuX2xvYWRGaWxlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB0aGlzLl9vbkxvYWRGaWxlQ2xpY2soZSkpO1xuICAgICAgdGhpcy5fbG9hZERlbW9CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHRoaXMuX29uTG9hZERlbW9DbGljayhlKSk7XG4gICAgICB0aGlzLl9sb2FkRmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGUgPT4gdGhpcy5fb25GaWxlSW5wdXRDaGFuZ2UoZSkpO1xuICAgICAgdGhpcy5fcGFzdGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGUgPT4gdGhpcy5fb25UZXh0SW5wdXRDaGFuZ2UoZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICB0cmFuc2l0aW9uRnJvbUNsYXNzKHRoaXMuX292ZXJsYXksICdoaWRkZW4nKTtcbiAgICB0cmFuc2l0aW9uRnJvbUNsYXNzKHRoaXMuX21lbnUsICdoaWRkZW4nKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLmFsbG93SGlkZSkgcmV0dXJuO1xuICAgIHRoaXMuc3RvcFNwaW5uZXIoKTtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICB0cmFuc2l0aW9uVG9DbGFzcyh0aGlzLl9vdmVybGF5LCAnaGlkZGVuJyk7XG4gICAgdHJhbnNpdGlvblRvQ2xhc3ModGhpcy5fbWVudSwgJ2hpZGRlbicpO1xuICB9XG5cbiAgc3RvcFNwaW5uZXIoKSB7XG4gICAgdGhpcy5fc3Bpbm5lci5oaWRlKCk7XG4gIH1cblxuICBzaG93RmlsZVBpY2tlcigpIHtcbiAgICB0aGlzLl9sb2FkRmlsZUlucHV0LmNsaWNrKCk7XG4gIH1cblxuICBfb25PdmVybGF5Q2xpY2soZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaGlkZSgpO1xuICB9XG5cbiAgX29uTWVudUJ1dHRvbkNsaWNrKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnNob3coKTtcbiAgfVxuXG4gIF9vblRleHRJbnB1dENoYW5nZShldmVudCkge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuX3Bhc3RlSW5wdXQudmFsdWUudHJpbSgpO1xuXG4gICAgaWYgKHZhbC5pbmNsdWRlcygnPC9zdmc+JykpIHtcbiAgICAgIHRoaXMuX3Bhc3RlSW5wdXQudmFsdWUgPSAnJztcbiAgICAgIHRoaXMuX3Bhc3RlSW5wdXQuYmx1cigpO1xuXG4gICAgICB0aGlzLl9wYXN0ZUxhYmVsLmFwcGVuZENoaWxkKHRoaXMuX3NwaW5uZXIuY29udGFpbmVyKTtcbiAgICAgIHRoaXMuX3NwaW5uZXIuc2hvdygpO1xuXG4gICAgICB0aGlzLmVtaXQoJ3N2Z0RhdGFMb2FkJywge1xuICAgICAgICBkYXRhOiB2YWwsXG4gICAgICAgIGZpbGVuYW1lOiAnaW1hZ2Uuc3ZnJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX29uTG9hZEZpbGVDbGljayhldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQudGFyZ2V0LmJsdXIoKTtcbiAgICB0aGlzLnNob3dGaWxlUGlja2VyKCk7XG4gIH1cblxuICBhc3luYyBfb25GaWxlSW5wdXRDaGFuZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBmaWxlID0gdGhpcy5fbG9hZEZpbGVJbnB1dC5maWxlc1swXTtcblxuICAgIGlmICghZmlsZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fbG9hZEZpbGVCdG4uYXBwZW5kQ2hpbGQodGhpcy5fc3Bpbm5lci5jb250YWluZXIpO1xuICAgIHRoaXMuX3NwaW5uZXIuc2hvdygpO1xuXG4gICAgdGhpcy5lbWl0KCdzdmdEYXRhTG9hZCcsIHtcbiAgICAgIGRhdGE6IGF3YWl0IHJlYWRGaWxlQXNUZXh0KGZpbGUpLFxuICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgX29uTG9hZERlbW9DbGljayhldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQudGFyZ2V0LmJsdXIoKTtcbiAgICB0aGlzLl9sb2FkRGVtb0J0bi5hcHBlbmRDaGlsZCh0aGlzLl9zcGlubmVyLmNvbnRhaW5lcik7XG4gICAgdGhpcy5fc3Bpbm5lci5zaG93KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5lbWl0KCdzdmdEYXRhTG9hZCcsIHtcbiAgICAgICAgZGF0YTogYXdhaXQgZmV0Y2goJ3Rlc3Qtc3Zncy9jYXItbGl0ZS5zdmcnKS50aGVuKHIgPT4gci50ZXh0KCkpLFxuICAgICAgICBmaWxlbmFtZTogJ2Nhci1saXRlLnN2ZydcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhIHNjb3BlIGlzIHdvcmtpbmcgYXJvdW5kIGEgYmFiZWwtbWluaWZ5IGJ1Zy5cbiAgICAgIC8vIEl0J3MgZml4ZWQgaW4gQmFiZWwgNy5cbiAgICAgIHtcbiAgICAgICAgdGhpcy5zdG9wU3Bpbm5lcigpO1xuXG4gICAgICAgIGxldCBlcnJvcjtcblxuICAgICAgICBpZiAoJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvciAmJiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSB7XG4gICAgICAgICAgZXJyb3IgPSBFcnJvcihcIkRlbW8gbm90IGF2YWlsYWJsZSBvZmZsaW5lXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVycm9yID0gRXJyb3IoXCJDb3VsZG4ndCBmZXRjaCBkZW1vIFNWR1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB7IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgc3RyVG9FbCwgdHJhbnNpdGlvblRvQ2xhc3MgfSBmcm9tICcuLi91dGlscyc7XG5cbmNsYXNzIFRvYXN0IHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgZHVyYXRpb24sIGJ1dHRvbnMpIHtcbiAgICB0aGlzLmNvbnRhaW5lciA9IHN0clRvRWwoXG4gICAgICAnPGRpdiBjbGFzcz1cInRvYXN0XCI+PGRpdiBjbGFzcz1cInRvYXN0LWNvbnRlbnRcIj48L2Rpdj48L2Rpdj4nICtcbiAgICAnJyk7XG5cbiAgICB0aGlzLl9jb250ZW50ID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcignLnRvYXN0LWNvbnRlbnQnKTtcbiAgICB0aGlzLl9jb250ZW50LnRleHRDb250ZW50ID0gbWVzc2FnZTtcbiAgICB0aGlzLl9hbnN3ZXJSZXNvbHZlO1xuICAgIHRoaXMuX2hpZGVUaW1lb3V0O1xuXG4gICAgdGhpcy5hbnN3ZXIgPSBuZXcgUHJvbWlzZShyID0+IHRoaXMuX2Fuc3dlclJlc29sdmUgPSByKTtcblxuICAgIGJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgdmFyIGJ1dHRvbkVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICBidXR0b25FbC5jbGFzc05hbWUgPSAndW5idXR0b24nO1xuICAgICAgYnV0dG9uRWwudGV4dENvbnRlbnQgPSBidXR0b247XG4gICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5fYW5zd2VyUmVzb2x2ZShidXR0b24pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b25FbCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgIHRoaXMuX2hpZGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmhpZGUoKSwgZHVyYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0KTtcbiAgICB0aGlzLl9hbnN3ZXJSZXNvbHZlKCk7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25Ub0NsYXNzKHRoaXMuY29udGFpbmVyLCAnaGlkZScpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvYXN0cyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gc3RyVG9FbChcIjxkaXYgY2xhc3M9J3RvYXN0cyc+PC9kaXY+XCIpO1xuICB9XG5cbiAgc2hvdyhtZXNzYWdlLCB7XG4gICAgZHVyYXRpb24gPSAwLFxuICAgIGJ1dHRvbnMgPSBbJ2Rpc21pc3MnXVxuICB9PXt9KSB7XG4gICAgY29uc3QgdG9hc3QgPSBuZXcgVG9hc3QobWVzc2FnZSwgZHVyYXRpb24sIGJ1dHRvbnMpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRvYXN0LmNvbnRhaW5lcik7XG5cbiAgICB0b2FzdC5hbnN3ZXIudGhlbigoKSA9PiB0b2FzdC5oaWRlKCkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodG9hc3QuY29udGFpbmVyKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0b2FzdDtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgc3RyVG9FbCxcbiAgZG9tUmVhZHksXG4gIHRyYW5zaXRpb25Ub0NsYXNzLFxuICB0cmFuc2l0aW9uRnJvbUNsYXNzLFxuICByZWFkRmlsZUFzVGV4dFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlRHJvcCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKFxuICAgICAgJzxkaXYgY2xhc3M9XCJkcm9wLW92ZXJsYXlcIj5Ecm9wIGl0ITwvZGl2PicgK1xuICAgICcnKTtcblxuICAgIC8vIGRyYWcgZXZlbnRzIGFyZSBob3JyaWRcbiAgICB0aGlzLl9hY3RpdmVFbnRlcnMgPSAwO1xuICAgIHRoaXMuX2N1cnJlbnRFbnRlcmVkRWxlbWVudCA9IG51bGw7XG5cbiAgICBkb21SZWFkeS50aGVuKF8gPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbnRlcicsIGV2ZW50ID0+IHRoaXMuX29uRHJhZ0VudGVyKGV2ZW50KSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBldmVudCA9PiB0aGlzLl9vbkRyYWdMZWF2ZShldmVudCkpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGV2ZW50ID0+IHRoaXMuX29uRHJvcChldmVudCkpO1xuICAgIH0pO1xuICB9XG5cbiAgX29uRHJhZ0VudGVyKGV2ZW50KSB7XG4gICAgLy8gZmlyZWZveCBkb3VibGUtZmlyZXMgb24gd2luZG93IGVudGVyLCB0aGlzIHdvcmtzIGFyb3VuZCBpdFxuICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExMjQ2NDVcbiAgICBpZiAodGhpcy5fY3VycmVudEVudGVyZWRFbGVtZW50ID09IGV2ZW50LnRhcmdldCkgcmV0dXJuO1xuICAgIHRoaXMuX2N1cnJlbnRFbnRlcmVkRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcblxuICAgIGlmICghdGhpcy5fYWN0aXZlRW50ZXJzKyspIHtcbiAgICAgIHRyYW5zaXRpb25Ub0NsYXNzKHRoaXMuY29udGFpbmVyKTtcbiAgICB9XG4gIH1cblxuICBfb25EcmFnTGVhdmUoZXZlbnQpIHtcbiAgICB0aGlzLl9jdXJyZW50RW50ZXJlZEVsZW1lbnQgPSBudWxsO1xuXG4gICAgaWYgKCEtLXRoaXMuX2FjdGl2ZUVudGVycykge1xuICAgICAgdHJhbnNpdGlvbkZyb21DbGFzcyh0aGlzLmNvbnRhaW5lcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX29uRHJvcChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLl9hY3RpdmVFbnRlcnMgPSAwO1xuICAgIHRyYW5zaXRpb25Gcm9tQ2xhc3ModGhpcy5jb250YWluZXIpO1xuXG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlc1swXTtcbiAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgIHRoaXMuZW1pdCgnc3ZnRGF0YUxvYWQnLCB7XG4gICAgICBkYXRhOiBhd2FpdCByZWFkRmlsZUFzVGV4dChmaWxlKSxcbiAgICAgIGZpbGVuYW1lOiBmaWxlLm5hbWVcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZG9tUmVhZHksIHRyYW5zaXRpb25Gcm9tQ2xhc3MgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZWxvYWRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGRvbVJlYWR5LnRoZW4oXyA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcmVsb2FkZXInKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKTtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgaGlkZSgpIHtcbiAgICBhd2FpdCB0cmFuc2l0aW9uRnJvbUNsYXNzKHRoaXMuY29udGFpbmVyLCAnYWN0aXZlJyk7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufVxuIiwiaW1wb3J0IHsgc3RyVG9FbCwgZXNjYXBlSHRtbFRhZywgdHJhbnNpdGlvblRvQ2xhc3MsIGRvbVJlYWR5IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFuZ2Vsb2cge1xuICBjb25zdHJ1Y3Rvcihsb2FkZWRWZXJzaW9uKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBzdHJUb0VsKCc8c2VjdGlvbiBjbGFzcz1cImNoYW5nZWxvZ1wiPjwvc2VjdGlvbj4nKTtcbiAgICB0aGlzLl9sb2FkZWRWZXJzaW9uID0gbG9hZGVkVmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIHNob3dMb2dGcm9tKGxhc3RMb2FkZWRWZXJzaW9uKSB7XG4gICAgaWYgKGxhc3RMb2FkZWRWZXJzaW9uID09IHRoaXMuX2xvYWRlZFZlcnNpb24pIHJldHVybjtcbiAgICBjb25zdCBjaGFuZ2Vsb2cgPSBhd2FpdCBmZXRjaCgnY2hhbmdlbG9nLmpzb24nKS50aGVuKHIgPT4gci5qc29uKCkpO1xuICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICBsZXQgZW5kSW5kZXggPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2Vsb2cubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY2hhbmdlbG9nW2ldO1xuXG4gICAgICBpZiAoZW50cnkudmVyc2lvbiA9PT0gdGhpcy5fbG9hZGVkVmVyc2lvbikge1xuICAgICAgICBzdGFydEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGVudHJ5LnZlcnNpb24gPT09IGxhc3RMb2FkZWRWZXJzaW9uKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZW5kSW5kZXggPSBpICsgMTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFuZ2VMaXMgPSBjaGFuZ2Vsb2cuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpXG4gICAgICAucmVkdWNlKChhcnIsIGVudHJ5KSA9PiBhcnIuY29uY2F0KGVudHJ5LmNoYW5nZXMpLCBbXSlcbiAgICAgIC5tYXAoY2hhbmdlID0+IGVzY2FwZUh0bWxUYWdgPGxpPiR7Y2hhbmdlfTwvbGk+YCk7XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChzdHJUb0VsKCc8aDE+VXBkYXRlZCE8L2gxPicpKTtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChzdHJUb0VsKFxuICAgICAgJzx1bD4nICtcbiAgICAgICAgY2hhbmdlTGlzLmpvaW4oJycpICtcbiAgICAgICc8L3VsPicgK1xuICAgICcnKSk7XG5cbiAgICBhd2FpdCBkb21SZWFkeTtcbiAgICB0cmFuc2l0aW9uVG9DbGFzcyh0aGlzLmNvbnRhaW5lcik7XG4gIH1cbn1cbiIsImltcG9ydCB7IGRvbVJlYWR5IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXN1bHRzQ29udGFpbmVyIHtcbiAgY29uc3RydWN0b3IocmVzdWx0cykge1xuICAgIHRoaXMuX3Jlc3VsdHMgPSByZXN1bHRzO1xuXG4gICAgZG9tUmVhZHkudGhlbihfID0+IHtcbiAgICAgIHRoaXMuX21vYmlsZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yZXN1bHRzLWNvbnRhaW5lci1tb2JpbGUnKTtcbiAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yZXN1bHRzLWNvbnRhaW5lcicpO1xuICAgICAgdGhpcy5fcXVlcnkgPSBtYXRjaE1lZGlhKCcobWluLXdpZHRoOiA2NDBweCknKTtcblxuICAgICAgdGhpcy5fcXVlcnkuYWRkTGlzdGVuZXIoKCkgPT4gdGhpcy5fcG9zaXRpb25SZXN1bHRzKCkpO1xuICAgICAgdGhpcy5fcG9zaXRpb25SZXN1bHRzKCk7XG4gICAgfSk7XG4gIH1cblxuICBfcG9zaXRpb25SZXN1bHRzKCkge1xuICAgIGlmICh0aGlzLl9xdWVyeS5tYXRjaGVzKSB7XG4gICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmVzdWx0cy5jb250YWluZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX21vYmlsZUNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yZXN1bHRzLmNvbnRhaW5lcik7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgZG9tUmVhZHkgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXdUb2dnbGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG51bGw7XG5cbiAgICBkb21SZWFkeS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnZpZXctdG9nZ2xlcicpO1xuXG4gICAgICAvLyBzdG9wIGJyb3dzZXJzIHJlbWVtYmVyaW5nIHByZXZpb3VzIGZvcm0gc3RhdGVcbiAgICAgIHRoaXMuY29udGFpbmVyLm91dHB1dFswXS5jaGVja2VkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZSA9PiB0aGlzLl9vbkNoYW5nZShlKSk7XG4gICAgfSk7XG4gIH1cblxuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmNvbnRhaW5lci5vdXRwdXQudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlKSB7IC8vIHNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgbmljZSBzaG9ydGN1dCBhYm92ZSAoZWcgU2FmYXJpKVxuICAgICAgdmFsdWUgPSBBcnJheS5mcm9tKHRoaXMuY29udGFpbmVyLm91dHB1dCkucmVkdWNlKCh2YWx1ZSwgaW5wdXQpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IChpbnB1dC5jaGVja2VkID8gaW5wdXQudmFsdWUgOiAnJyk7XG4gICAgICB9LCAnJyk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0KFwiY2hhbmdlXCIsIHsgdmFsdWUgfSk7XG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc3VsdHNDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKHNpemUpIHtcbiAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICB0aGlzLnB1cmdlKCk7XG4gIH1cblxuICBwdXJnZSgpIHtcbiAgICB0aGlzLl9maW5nZXJwcmludHMgPSBbXTtcbiAgICB0aGlzLl9pdGVtcyA9IFtdO1xuICAgIHRoaXMuX2luZGV4ID0gMDtcbiAgfVxuXG4gIGFkZChmaW5nZXJwcmludCwgc3ZnRmlsZSkge1xuICAgIGNvbnN0IG9sZEl0ZW0gPSB0aGlzLl9pdGVtc1t0aGlzLl9pbmRleF07XG5cbiAgICBpZiAob2xkSXRlbSkge1xuICAgICAgLy8gZ2MgYmxvYiB1cmxcbiAgICAgIG9sZEl0ZW0ucmVsZWFzZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbmdlcnByaW50c1t0aGlzLl9pbmRleF0gPSBmaW5nZXJwcmludDtcbiAgICB0aGlzLl9pdGVtc1t0aGlzLl9pbmRleF0gPSBzdmdGaWxlO1xuXG4gICAgdGhpcy5faW5kZXggPSAodGhpcy5faW5kZXggKyAxKSAlIHRoaXMuX3NpemU7XG4gIH1cblxuICBtYXRjaChmaW5nZXJwcmludCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1t0aGlzLl9maW5nZXJwcmludHMuaW5kZXhPZihmaW5nZXJwcmludCldO1xuICB9XG59XG4iLCJpbXBvcnQgeyB0cmFuc2l0aW9uVG9DbGFzcyB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpblVpIHtcbiAgY29uc3RydWN0b3IoLi4uZWxlbWVudHMpIHtcbiAgICB0aGlzLl9hY3RpdmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl90b0FjdGl2YXRlID0gZWxlbWVudHM7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZhdGVkKSByZXR1cm47XG4gICAgdGhpcy5fYWN0aXZhdGVkID0gdHJ1ZTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIHRoaXMuX3RvQWN0aXZhdGUubWFwKGVsID0+IHRyYW5zaXRpb25Ub0NsYXNzKGVsKSlcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBpZGJLZXl2YWwgYXMgc3RvcmFnZSB9IGZyb20gJy4uL3V0aWxzL3N0b3JhZ2UnO1xuaW1wb3J0IFN2Z28gZnJvbSAnLi9zdmdvJztcbmltcG9ydCB7IGRvbVJlYWR5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgT3V0cHV0IGZyb20gJy4vdWkvb3V0cHV0JztcbmltcG9ydCBEb3dubG9hZEJ1dHRvbiBmcm9tICcuL3VpL2Rvd25sb2FkLWJ1dHRvbic7XG5pbXBvcnQgQ29weUJ1dHRvbiBmcm9tICcuL3VpL2NvcHktYnV0dG9uJztcbmltcG9ydCB7IGNvcHlTdXBwb3J0ZWQgfSBmcm9tICcuL3VpL2NvcHktYnV0dG9uJztcbmltcG9ydCBCZ0ZpbGxCdXR0b24gZnJvbSAnLi91aS9iZy1maWxsLWJ1dHRvbic7XG5pbXBvcnQgUmVzdWx0cyBmcm9tICcuL3VpL3Jlc3VsdHMnO1xuaW1wb3J0IFNldHRpbmdzIGZyb20gJy4vdWkvc2V0dGluZ3MnO1xuaW1wb3J0IE1haW5NZW51IGZyb20gJy4vdWkvbWFpbi1tZW51JztcbmltcG9ydCBUb2FzdHMgZnJvbSAnLi91aS90b2FzdHMnO1xuaW1wb3J0IEZpbGVEcm9wIGZyb20gJy4vdWkvZmlsZS1kcm9wJztcbmltcG9ydCBQcmVsb2FkZXIgZnJvbSAnLi91aS9wcmVsb2FkZXInO1xuaW1wb3J0IENoYW5nZWxvZyBmcm9tICcuL3VpL2NoYW5nZWxvZyc7XG5pbXBvcnQgUmVzdWx0c0NvbnRhaW5lciBmcm9tICcuL3VpL3Jlc3VsdHMtY29udGFpbmVyJztcbmltcG9ydCBWaWV3VG9nZ2xlciBmcm9tICcuL3VpL3ZpZXctdG9nZ2xlcic7XG5pbXBvcnQgUmVzdWx0c0NhY2hlIGZyb20gJy4vcmVzdWx0cy1jYWNoZSc7XG5pbXBvcnQgTWFpblVpIGZyb20gJy4vdWkvbWFpbi11aSc7XG5cbmNvbnN0IHN2Z28gPSBuZXcgU3ZnbygpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWluQ29udHJvbGxlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IG51bGw7XG5cbiAgICAvLyB1aSBjb21wb25lbnRzXG4gICAgdGhpcy5fbWFpblVpID0gbnVsbDtcbiAgICB0aGlzLl9vdXRwdXRVaSA9IG5ldyBPdXRwdXQoKTtcbiAgICB0aGlzLl9kb3dubG9hZEJ1dHRvblVpID0gbmV3IERvd25sb2FkQnV0dG9uKCk7XG4gICAgdGhpcy5fY29weUJ1dHRvblVpID0gbmV3IENvcHlCdXR0b24oKTtcbiAgICB0aGlzLl9iZ0ZpbGxVaSA9IG5ldyBCZ0ZpbGxCdXR0b24oKTtcbiAgICB0aGlzLl9yZXN1bHRzVWkgPSBuZXcgUmVzdWx0cygpO1xuICAgIHRoaXMuX3NldHRpbmdzVWkgPSBuZXcgU2V0dGluZ3MoKTtcbiAgICB0aGlzLl9tYWluTWVudVVpID0gbmV3IE1haW5NZW51KCk7XG4gICAgdGhpcy5fdG9hc3RzVWkgPSBuZXcgVG9hc3RzKCk7XG4gICAgdGhpcy5fZHJvcFVpID0gbmV3IEZpbGVEcm9wKCk7XG4gICAgdGhpcy5fcHJlbG9hZGVyVWkgPSBuZXcgUHJlbG9hZGVyKCk7XG4gICAgdGhpcy5fY2hhbmdlbG9nVWkgPSBuZXcgQ2hhbmdlbG9nKHNlbGYudmVyc2lvbik7XG4gICAgdGhpcy5fcmVzdWx0c0NvbnRhaW5lclVpID0gbmV3IFJlc3VsdHNDb250YWluZXIodGhpcy5fcmVzdWx0c1VpKTtcbiAgICB0aGlzLl92aWV3VG9nZ2xlclVpID0gbmV3IFZpZXdUb2dnbGVyKCk7XG5cbiAgICAvLyB1aSBldmVudHNcbiAgICB0aGlzLl9zZXR0aW5nc1VpLm9uKCdjaGFuZ2UnLCAoKSA9PiB0aGlzLl9vblNldHRpbmdzQ2hhbmdlKCkpO1xuICAgIHRoaXMuX3NldHRpbmdzVWkub24oJ3Jlc2V0Jywgb2xkU2V0dGluZ3MgPT4gdGhpcy5fb25TZXR0aW5nc1Jlc2V0KG9sZFNldHRpbmdzKSk7XG4gICAgdGhpcy5fbWFpbk1lbnVVaS5vbignc3ZnRGF0YUxvYWQnLCBlID0+IHRoaXMuX29uSW5wdXRDaGFuZ2UoZSkpO1xuICAgIHRoaXMuX2Ryb3BVaS5vbignc3ZnRGF0YUxvYWQnLCBlID0+IHRoaXMuX29uSW5wdXRDaGFuZ2UoZSkpO1xuICAgIHRoaXMuX21haW5NZW51VWkub24oJ2Vycm9yJywgKHtlcnJvcn0pID0+IHRoaXMuX2hhbmRsZUVycm9yKGVycm9yKSk7XG4gICAgdGhpcy5fdmlld1RvZ2dsZXJVaS5vbignY2hhbmdlJywgZSA9PiB0aGlzLl9vblZpZXdTZWxlY3Rpb25DaGFuZ2UoZSkpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZSA9PiB0aGlzLl9vbkdsb2JhbEtleURvd24oZSkpO1xuXG4gICAgLy8gc3RhdGVcbiAgICB0aGlzLl9pbnB1dEl0ZW0gPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlID0gbmV3IFJlc3VsdHNDYWNoZSgxMCk7XG4gICAgdGhpcy5fbGF0ZXN0Q29tcHJlc3NKb2JJZCA9IDA7XG4gICAgdGhpcy5fdXNlckhhc0ludGVyYWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWxvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rlcignc3cuanMnLCB7XG4gICAgICAgIHNjb3BlOiAnLi8nXG4gICAgICB9KS50aGVuKHJlZ2lzdHJhdGlvbiA9PiB7XG4gICAgICAgIHJlZ2lzdHJhdGlvbi5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGVmb3VuZCcsICgpID0+IHRoaXMuX29uVXBkYXRlRm91bmQocmVnaXN0cmF0aW9uKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB0ZWxsIHRoZSB1c2VyIGFib3V0IHRoZSBsYXRlc3QgdXBkYXRlXG4gICAgc3RvcmFnZS5nZXQoJ2xhc3Qtc2Vlbi12ZXJzaW9uJykudGhlbihsYXN0U2VlblZlcnNpb24gPT4ge1xuICAgICAgaWYgKGxhc3RTZWVuVmVyc2lvbikge1xuICAgICAgICB0aGlzLl9jaGFuZ2Vsb2dVaS5zaG93TG9nRnJvbShsYXN0U2VlblZlcnNpb24pO1xuICAgICAgfVxuICAgICAgc3RvcmFnZS5zZXQoJ2xhc3Qtc2Vlbi12ZXJzaW9uJywgc2VsZi52ZXJzaW9uKTtcbiAgICB9KTtcblxuICAgIGRvbVJlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1vdXRwdXQnKTtcblxuICAgICAgLy8gZWxlbWVudHMgZm9yIGludHJvIGFuaW1cbiAgICAgIHRoaXMuX21haW5VaSA9IG5ldyBNYWluVWkoXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b29sYmFyJyksXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3Rpb24tYnV0dG9uLWNvbnRhaW5lcicpLFxuICAgICAgICB0aGlzLl9vdXRwdXRVaS5jb250YWluZXIsXG4gICAgICAgIHRoaXMuX3NldHRpbmdzVWkuY29udGFpbmVyXG4gICAgICApO1xuXG4gICAgICBjb25zdCBhY3Rpb25Db250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWN0aW9uLWJ1dHRvbi1jb250YWluZXInKTtcbiAgICAgIGNvbnN0IG1pbm9yQWN0aW9uQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1pbm9yLWFjdGlvbi1jb250YWluZXInKTtcblxuICAgICAgbWlub3JBY3Rpb25Db250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fYmdGaWxsVWkuY29udGFpbmVyKTtcblxuICAgICAgaWYgKGNvcHlTdXBwb3J0ZWQpIHtcbiAgICAgICAgbWlub3JBY3Rpb25Db250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29weUJ1dHRvblVpLmNvbnRhaW5lcik7XG4gICAgICB9XG5cbiAgICAgIGFjdGlvbkNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9kb3dubG9hZEJ1dHRvblVpLmNvbnRhaW5lcik7XG5cbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vdXRwdXQnKS5hcHBlbmRDaGlsZCh0aGlzLl9vdXRwdXRVaS5jb250YWluZXIpO1xuICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3RvYXN0c1VpLmNvbnRhaW5lcik7XG4gICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZHJvcFVpLmNvbnRhaW5lcik7XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVudS1leHRyYScpLmFwcGVuZENoaWxkKHRoaXMuX2NoYW5nZWxvZ1VpLmNvbnRhaW5lcik7XG5cbiAgICAgIC8vIGxvYWQgcHJldmlvdXMgc2V0dGluZ3NcbiAgICAgIHRoaXMuX2xvYWRTZXR0aW5ncygpO1xuXG4gICAgICAvLyBzb21lb25lIG1hbmFnZWQgdG8gaGl0IHRoZSBwcmVsb2FkZXIsIGF3d1xuICAgICAgaWYgKHRoaXMuX3ByZWxvYWRlclVpLmFjdGl2YXRlZCkge1xuICAgICAgICB0aGlzLl90b2FzdHNVaS5zaG93KFwiUmVhZHkgbm93IVwiLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDBcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGZvciB0ZXN0aW5nXG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9vbklucHV0Q2hhbmdlKHtcbiAgICAgICAgICAgIGRhdGE6IGF3YWl0IGZldGNoKCd0ZXN0LXN2Z3MvY2FyLWxpdGUuc3ZnJykudGhlbihyID0+IHIudGV4dCgpKSxcbiAgICAgICAgICAgIGZpbGVuYW1lOiAnY2FyLWxpdGUuc3ZnJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgX29uR2xvYmFsS2V5RG93bihldmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdvJyAmJiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX21haW5NZW51VWkuc2hvd0ZpbGVQaWNrZXIoKTtcbiAgICB9XG4gIH1cblxuICBfb25WaWV3U2VsZWN0aW9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgdGhpcy5fb3V0cHV0VWkuc2V0KGV2ZW50LnZhbHVlKTtcbiAgfVxuXG4gIF9vblVwZGF0ZUZvdW5kKHJlZ2lzdHJhdGlvbikge1xuICAgIGNvbnN0IG5ld1dvcmtlciA9IHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nO1xuXG4gICAgcmVnaXN0cmF0aW9uLmluc3RhbGxpbmcuYWRkRXZlbnRMaXN0ZW5lcignc3RhdGVjaGFuZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcmVsb2FkaW5nKSByZXR1cm47XG5cbiAgICAgIC8vIHRoZSB2ZXJ5IGZpcnN0IGFjdGl2YXRpb24hXG4gICAgICAvLyB0ZWxsIHRoZSB1c2VyIHN0dWZmIHdvcmtzIG9mZmxpbmVcbiAgICAgIGlmIChuZXdXb3JrZXIuc3RhdGUgPT0gJ2FjdGl2YXRlZCcgJiYgIW5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmNvbnRyb2xsZXIpIHtcbiAgICAgICAgdGhpcy5fdG9hc3RzVWkuc2hvdyhcIlJlYWR5IHRvIHdvcmsgb2ZmbGluZVwiLCB7XG4gICAgICAgICAgZHVyYXRpb246IDUwMDBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1dvcmtlci5zdGF0ZSA9PSAnYWN0aXZhdGVkJyAmJiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSB7XG4gICAgICAgIC8vIGlmIHRoZSB1c2VyIGhhc24ndCBpbnRlcmFjdGVkIHlldCwgZG8gYSBzbmVha3kgcmVsb2FkXG4gICAgICAgIGlmICghdGhpcy5fdXNlckhhc0ludGVyYWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLl9yZWxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG90aGVyd2lzZSwgc2hvdyB0aGUgdXNlciBhbiBhbGVydFxuICAgICAgICBjb25zdCB0b2FzdCA9IHRoaXMuX3RvYXN0c1VpLnNob3coXCJVcGRhdGUgYXZhaWxhYmxlXCIsIHtcbiAgICAgICAgICBidXR0b25zOiBbJ3JlbG9hZCcsICdkaXNtaXNzJ11cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgdG9hc3QuYW5zd2VyO1xuXG4gICAgICAgIGlmIChhbnN3ZXIgPT0gJ3JlbG9hZCcpIHtcbiAgICAgICAgICB0aGlzLl9yZWxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfb25TZXR0aW5nc0NoYW5nZSgpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuX3NldHRpbmdzVWkuZ2V0U2V0dGluZ3MoKTtcbiAgICB0aGlzLl9zYXZlU2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgIHRoaXMuX2NvbXByZXNzU3ZnKHNldHRpbmdzKTtcbiAgfVxuXG4gIGFzeW5jIF9vblNldHRpbmdzUmVzZXQob2xkU2V0dGluZ3MpIHtcbiAgICBjb25zdCB0b2FzdCA9IHRoaXMuX3RvYXN0c1VpLnNob3coXCJTZXR0aW5ncyByZXNldFwiLCB7XG4gICAgICBidXR0b25zOiBbJ3VuZG8nLCAnZGlzbWlzcyddLFxuICAgICAgZHVyYXRpb246IDUwMDBcbiAgICB9KTtcblxuICAgIGlmICgoYXdhaXQgdG9hc3QuYW5zd2VyKSA9PT0gJ3VuZG8nKSB7XG4gICAgICB0aGlzLl9zZXR0aW5nc1VpLnNldFNldHRpbmdzKG9sZFNldHRpbmdzKTtcbiAgICAgIHRoaXMuX29uU2V0dGluZ3NDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25JbnB1dENoYW5nZShldmVudCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5fc2V0dGluZ3NVaS5nZXRTZXR0aW5ncygpO1xuICAgIHRoaXMuX3VzZXJIYXNJbnRlcmFjdGVkID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pbnB1dEl0ZW0gPSBhd2FpdCBzdmdvLmxvYWQoZXZlbnQuZGF0YSk7XG4gICAgICB0aGlzLl9pbnB1dEZpbGVuYW1lID0gZXZlbnQuZmlsZW5hbWU7XG4gICAgfVxuICAgIGNhdGNoKGUpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmEgc2NvcGUgaXMgd29ya2luZyBhcm91bmQgYSBiYWJlbC1taW5pZnkgYnVnLlxuICAgICAgLy8gSXQncyBmaXhlZCBpbiBCYWJlbCA3LlxuICAgICAge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcIkxvYWQgZmFpbGVkOiBcIiArIGUubWVzc2FnZSk7XG4gICAgICAgIHRoaXMuX21haW5NZW51VWkuc3RvcFNwaW5uZXIoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fY2FjaGUucHVyZ2UoKTtcblxuICAgIGxldCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBjb25zdCBjb21wcmVzc2VkID0gKCkgPT4ge1xuICAgICAgaWYgKGZpcnN0SXRlcmF0aW9uKSB7XG4gICAgICAgIHRoaXMuX291dHB1dFVpLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuX21haW5VaS5hY3RpdmF0ZSgpO1xuICAgICAgICB0aGlzLl9tYWluTWVudVVpLmFsbG93SGlkZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX21haW5NZW51VWkuaGlkZSgpO1xuICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2NvbXByZXNzU3ZnKHNldHRpbmdzLCAoKSA9PiBjb21wcmVzc2VkKCkpO1xuXG4gICAgaWYgKGZpcnN0SXRlcmF0aW9uKSB7XG4gICAgICBjb21wcmVzc2VkKCk7XG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUVycm9yKGUpIHtcbiAgICB0aGlzLl90b2FzdHNVaS5zaG93KGUubWVzc2FnZSk7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfVxuXG4gIGFzeW5jIF9sb2FkU2V0dGluZ3MoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCBzdG9yYWdlLmdldCgnc2V0dGluZ3MnKTtcbiAgICBpZiAoc2V0dGluZ3MpIHRoaXMuX3NldHRpbmdzVWkuc2V0U2V0dGluZ3Moc2V0dGluZ3MpO1xuICB9XG5cbiAgX3NhdmVTZXR0aW5ncyhzZXR0aW5ncykge1xuICAgIGNvbnN0IGNvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncyk7XG4gICAgLy8gZG9lc24ndCBtYWtlIHNlbnNlIHRvIHJldGFpbiB0aGUgXCJzaG93IG9yaWdpbmFsXCIgb3B0aW9uXG4gICAgZGVsZXRlIGNvcHkub3JpZ2luYWw7XG4gICAgc3RvcmFnZS5zZXQoJ3NldHRpbmdzJywgY29weSk7XG4gIH1cblxuICBhc3luYyBfY29tcHJlc3NTdmcoc2V0dGluZ3MsIGl0ZXJhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oKXt9KSB7XG4gICAgY29uc3QgdGhpc0pvYklkID0gdGhpcy5fbGF0ZXN0Q29tcHJlc3NKb2JJZCA9IE1hdGgucmFuZG9tKCk7XG5cbiAgICBhd2FpdCBzdmdvLmFib3J0Q3VycmVudCgpO1xuXG4gICAgaWYgKHRoaXNKb2JJZCAhPSB0aGlzLl9sYXRlc3RDb21wcmVzc0pvYklkKSB7XG4gICAgICAvLyB3aGlsZSB3ZSd2ZSBiZWVuIHdhaXRpbmcsIHRoZXJlJ3MgYmVlbiBhIG5ld2VyIGNhbGxcbiAgICAgIC8vIHRvIF9jb21wcmVzc1N2Zywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZ1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncy5vcmlnaW5hbCkge1xuICAgICAgdGhpcy5fdXBkYXRlRm9yRmlsZSh0aGlzLl9pbnB1dEl0ZW0sIHtcbiAgICAgICAgY29tcHJlc3M6IHNldHRpbmdzLmd6aXBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlTWF0Y2ggPSB0aGlzLl9jYWNoZS5tYXRjaChzZXR0aW5ncy5maW5nZXJwcmludCk7XG5cbiAgICBpZiAoY2FjaGVNYXRjaCkge1xuICAgICAgdGhpcy5fdXBkYXRlRm9yRmlsZShjYWNoZU1hdGNoLCB7XG4gICAgICAgIGNvbXBhcmVUb0ZpbGU6IHRoaXMuX2lucHV0SXRlbSxcbiAgICAgICAgY29tcHJlc3M6IHNldHRpbmdzLmd6aXBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rvd25sb2FkQnV0dG9uVWkud29ya2luZygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbmFsUmVzdWx0RmlsZSA9IGF3YWl0IHN2Z28ucHJvY2VzcyhzZXR0aW5ncywgcmVzdWx0RmlsZSA9PiB7XG4gICAgICAgIGl0ZXJhdGlvbkNhbGxiYWNrKHJlc3VsdEZpbGUpO1xuICAgICAgICB0aGlzLl91cGRhdGVGb3JGaWxlKHJlc3VsdEZpbGUsIHtcbiAgICAgICAgICBjb21wYXJlVG9GaWxlOiB0aGlzLl9pbnB1dEl0ZW0sXG4gICAgICAgICAgY29tcHJlc3M6IHNldHRpbmdzLmd6aXBcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fY2FjaGUuYWRkKHNldHRpbmdzLmZpbmdlcnByaW50LCBmaW5hbFJlc3VsdEZpbGUpO1xuICAgIH1cbiAgICBjYXRjaChlKSB7XG4gICAgICBpZiAoZS5tZXNzYWdlID09IFwiYWJvcnRcIikgcmV0dXJuO1xuICAgICAgZS5tZXNzYWdlID0gXCJNaW5pZnlpbmcgZXJyb3I6IFwiICsgZS5tZXNzYWdlO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZSk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5fZG93bmxvYWRCdXR0b25VaS5kb25lKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3VwZGF0ZUZvckZpbGUoc3ZnRmlsZSwgeyBjb21wYXJlVG9GaWxlLCBjb21wcmVzcyB9KSB7XG4gICAgdGhpcy5fb3V0cHV0VWkudXBkYXRlKHN2Z0ZpbGUpO1xuICAgIHRoaXMuX2Rvd25sb2FkQnV0dG9uVWkuc2V0RG93bmxvYWQodGhpcy5faW5wdXRGaWxlbmFtZSwgc3ZnRmlsZSk7XG4gICAgdGhpcy5fY29weUJ1dHRvblVpLnNldENvcHlUZXh0KHN2Z0ZpbGUudGV4dCk7XG5cbiAgICB0aGlzLl9yZXN1bHRzVWkudXBkYXRlKHtcbiAgICAgIGNvbXBhcmlzb25TaXplOiBjb21wYXJlVG9GaWxlICYmIChhd2FpdCBjb21wYXJlVG9GaWxlLnNpemUoeyBjb21wcmVzcyB9KSksXG4gICAgICBzaXplOiBhd2FpdCBzdmdGaWxlLnNpemUoeyBjb21wcmVzcyB9KVxuICAgIH0pO1xuICB9XG59XG5cbiIsImltcG9ydCBXb3JrZXJNZXNzZW5nZXIgZnJvbSAnLi93b3JrZXItbWVzc2VuZ2VyJztcbmltcG9ydCBTdmdGaWxlIGZyb20gJy4vc3ZnLWZpbGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdmdvIGV4dGVuZHMgV29ya2VyTWVzc2VuZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2pzL3N2Z28td29ya2VyLmpzJyk7XG4gICAgdGhpcy5fYWJvcnRPbk5leHRJdGVyYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9jdXJyZW50Sm9iID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBhc3luYyBsb2FkKHN2Z1RleHQpIHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLl9yZXF1ZXN0UmVzcG9uc2Uoe1xuICAgICAgYWN0aW9uOiAnbG9hZCcsXG4gICAgICBkYXRhOiBzdmdUZXh0XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFN2Z0ZpbGUoc3ZnVGV4dCwgd2lkdGgsIGhlaWdodCk7XG4gIH1cblxuICBwcm9jZXNzKHNldHRpbmdzLCBpdGVyYXRpb25DYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Sm9iID0gdGhpcy5hYm9ydEN1cnJlbnQoKS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMuX2Fib3J0T25OZXh0SXRlcmF0aW9uID0gZmFsc2U7XG5cbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLl9yZXF1ZXN0UmVzcG9uc2Uoe1xuICAgICAgICBhY3Rpb246ICdwcm9jZXNzJyxcbiAgICAgICAgc2V0dGluZ3NcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzdWx0RmlsZSA9IG5ldyBTdmdGaWxlKHJlc3VsdC5kYXRhLCByZXN1bHQuZGltZW5zaW9ucy53aWR0aCwgcmVzdWx0LmRpbWVuc2lvbnMuaGVpZ2h0KTtcblxuICAgICAgaXRlcmF0aW9uQ2FsbGJhY2socmVzdWx0RmlsZSk7XG5cbiAgICAgIGlmIChzZXR0aW5ncy5tdWx0aXBhc3MpIHtcbiAgICAgICAgd2hpbGUgKHJlc3VsdCA9IGF3YWl0IHRoaXMubmV4dFBhc3MoKSkge1xuICAgICAgICAgIGlmICh0aGlzLl9hYm9ydE9uTmV4dEl0ZXJhdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ2Fib3J0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdEZpbGUgPSBuZXcgU3ZnRmlsZShyZXN1bHQuZGF0YSwgcmVzdWx0LmRpbWVuc2lvbnMud2lkdGgsIHJlc3VsdC5kaW1lbnNpb25zLmhlaWdodCk7XG4gICAgICAgICAgaXRlcmF0aW9uQ2FsbGJhY2socmVzdWx0RmlsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gcmV0dXJuIGZpbmFsIHJlc3VsdFxuICAgICAgcmV0dXJuIHJlc3VsdEZpbGU7XG4gICAgfSk7XG4gIH1cblxuICBuZXh0UGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdFJlc3BvbnNlKHtcbiAgICAgIGFjdGlvbjogJ25leHRQYXNzJ1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgYWJvcnRDdXJyZW50KCkge1xuICAgIHRoaXMuX2Fib3J0T25OZXh0SXRlcmF0aW9uID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLl9jdXJyZW50Sm9iO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZSgpIHtcbiAgICBhd2FpdCB0aGlzLmFib3J0Q3VycmVudCgpO1xuICAgIHN1cGVyLnJlbGVhc2UoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgdHJhY2tGb2N1c01ldGhvZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IE1haW5Db250cm9sbGVyIGZyb20gJy4vbWFpbi1jb250cm9sbGVyJztcblxudHJhY2tGb2N1c01ldGhvZCgpO1xubmV3IE1haW5Db250cm9sbGVyKCk7XG4iXSwibmFtZXMiOlsiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiwiY2hpbGRyZW4iLCJyZXBsYWNlIiwibWFwIiwicmVkdWNlIiwiUmVzcG9uc2UiLCJ0ZXh0IiwicmVtb3ZlQ2xhc3MiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsIlByb21pc2UiLCJyZXNvbHZlIiwidGFyZ2V0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbW92ZSIsImFkZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJ4IiwicGFnZVgiLCJ5IiwicGFnZVkiLCJNYXRoIiwiYWJzIiwic3FydCIsInRvdWNoZXMiLCJBcnJheSIsImZyb20iLCJwb3ciLCJmbG9vciIsInJvdW5kIiwiaW5pdCIsImNhbGwiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImxlbmd0aCIsImFwcGx5IiwiVHlwZUVycm9yIiwiX2V2ZW50cyIsIm5ld0xpc3RlbmVyIiwiZW1pdCIsImxpc3RlbmVyIiwiX2V2ZW50c0NvdW50IiwidW5zaGlmdCIsInB1c2giLCJ3YXJuZWQiLCJFcnJvciIsIm5hbWUiLCJlbWl0dGVyIiwidHlwZSIsImNvdW50IiwiY29uc29sZSIsIndhcm4iLCJsb2ciLCJyZW1vdmVMaXN0ZW5lciIsImFyZ3VtZW50cyIsInBvcCIsInJlYWR5U3RhdGUiLCJkb2N1bWVudCIsImNyZWF0ZVJhbmdlIiwic2VsZWN0Tm9kZSIsImRvY3VtZW50RWxlbWVudCIsImluZGV4ZWREQiIsIm9wZW4iLCJvbmVycm9yIiwiZXJyb3IiLCJvbnVwZ3JhZGVuZWVkZWQiLCJyZXN1bHQiLCJjcmVhdGVPYmplY3RTdG9yZSIsIm9uc3VjY2VzcyIsInRyYW5zYWN0aW9uIiwib25jb21wbGV0ZSIsIm9iamVjdFN0b3JlIiwiZ2V0Iiwic2V0IiwicHV0IiwiZGVsZXRlIiwic2VsZiIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsImNvbnN0cnVjdG9yIiwiX3JlcXVlc3RJZCIsIl9wZW5kaW5nIiwiX3VybCIsIl93b3JrZXIiLCJXb3JrZXIiLCJvbm1lc3NhZ2UiLCJfb25NZXNzYWdlIiwicmVsZWFzZSIsInRlcm1pbmF0ZSIsIk9iamVjdCIsImtleXMiLCJfZnVsZmlsbFBlbmRpbmciLCJpZCIsIl9wb3N0TWVzc2FnZSIsInBvc3RNZXNzYWdlIiwiZGF0YSIsIl9yZXF1ZXN0UmVzcG9uc2UiLCJjb21wcmVzcyIsIl9jb21wcmVzc2VkU2l6ZSIsIl9ibG9iIiwid2lkdGgiLCJoZWlnaHQiLCJzaXplIiwidGhlbiIsImJ5dGVMZW5ndGgiLCJfY3JlYXRlIiwiQmxvYiIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImJsb2IiLCJ1cmwiLCJyZXZva2VPYmplY3RVUkwiLCJldmVudEFyZWEiLCJzaG91bGRDYXB0dXJlRnVuYyIsIl90YXJnZXQiLCJfc2hvdWxkQ2FwdHVyZUZ1bmMiLCJfZHgiLCJfZHkiLCJfc2NhbGUiLCJfYWN0aXZlIiwiX2xhc3RQb2ludHMiLCJmb3JFYWNoIiwiYmluZCIsIl9vblBvaW50ZXJEb3duIiwiX29uV2hlZWwiLCJyZXNldCIsIl91cGRhdGUiLCJwcmV2ZW50RGVmYXVsdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImRlbHRhWSIsImRlbHRhTW9kZSIsIm1heCIsIm1pbiIsImxlZnQiLCJ0b3AiLCJfb25GaXJzdFBvaW50ZXJEb3duIiwiX29uUG9pbnRlck1vdmUiLCJfb25Qb2ludGVyVXAiLCJ3aGljaCIsInN0eWxlIiwiV2Via2l0VHJhbnNmb3JtIiwidHJhbnNmb3JtIiwiY29udGFpbmVyIiwiX3N2Z0ZyYW1lIiwicXVlcnlTZWxlY3RvciIsInNjcm9sbGluZyIsIl9zdmdDb250YWluZXIiLCJfcGFuWm9vbSIsInNldFN2ZyIsIl9uZXh0TG9hZFByb21pc2UiLCJzcmMiLCJlbmNvZGVVUklDb21wb25lbnQiLCJoaWdobGlnaHQiLCJfY29kZUVsIiwiaW5uZXJIVE1MIiwiX3R5cGVzIiwiaW1hZ2UiLCJjb2RlIiwiX3N2Z0ZpbGUiLCJfc3dpdGNoUXVldWUiLCJub0FuaW1hdGUiLCJ1cGRhdGUiLCJfYWN0aXZlVHlwZSIsImFwcGVuZENoaWxkIiwiYWxsIiwicmVtb3ZlQ2hpbGQiLCJhbmltYXRlIiwib2Zmc2V0TGVmdCIsIl9zaG93VGltZW91dCIsImRpc3BsYXkiLCJzaG93IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImhpZGUiLCJ0aXRsZSIsImhyZWYiLCJpY29uU3ZnIiwibWlub3IiLCJzZXRBdHRyaWJ1dGUiLCJfcmlwcGxlIiwiX3NwaW5uZXIiLCJfb25DbGljayIsIndvcmtpbmciLCJkb25lIiwibmF2aWdhdG9yIiwibXNTYXZlQmxvYiIsImZpbGVuYW1lIiwic2V0RG93bmxvYWQiLCJkb3dubG9hZCIsInF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCIsIl90ZXh0IiwiX3ByZSIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0Q29udGVudCIsImJvZHkiLCJnZXRTZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJ3aW5kb3ciLCJhZGRSYW5nZSIsImV4ZWNDb21tYW5kIiwic2V0Q29weVRleHQiLCJzZXRDb2xvciIsImJhY2tncm91bmRDb2xvciIsIl9zaXplRWwiLCJfbmV3U2l6ZUVsIiwiX2RpZmZFbCIsImNvbXBhcmlzb25TaXplIiwicHJvdG90eXBlIiwiY3JlYXRlIiwiRXZlbnRFbWl0dGVyIiwidXNpbmdEb21haW5zIiwiZG9tYWluIiwiYWN0aXZlIiwiRG9tYWluIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRNYXhMaXN0ZW5lcnMiLCJpc05hTiIsImdldE1heExpc3RlbmVycyIsImRvbWFpbkVtaXR0ZXIiLCJkb21haW5UaHJvd24iLCJjb250ZXh0IiwiYWRkTGlzdGVuZXIiLCJvbiIsInByZXBlbmRMaXN0ZW5lciIsIm9uY2UiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwibGlzdGVuZXJzIiwibGlzdGVuZXJDb3VudCIsImV2ZW50TmFtZXMiLCJSZWZsZWN0Iiwib3duS2V5cyIsInJhbmdlIiwiX2hhbmRsZSIsIl90cmFja09uIiwiX3ZhbCIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIiwiX29uSW5wdXRDaGFuZ2UiLCJfb25SYW5nZU1vdXNlRG93biIsIl9vblJhbmdlVG91Y2hTdGFydCIsIl9vblJhbmdlVG91Y2hFbmQiLCJfc2V0UG9zaXRpb24iLCJmb2N1cyIsImJsdXIiLCJ2YWx1ZSIsIl90aHJvdHRsZVRpbWVvdXQiLCJfcGx1Z2luSW5wdXRzIiwicXVlcnlTZWxlY3RvckFsbCIsIl9nbG9iYWxJbnB1dHMiLCJfcmVzZXRSaXBwbGUiLCJfcmVzZXRCdG4iLCJfc2xpZGVyTWFwIiwiV2Vha01hcCIsIl9zY3JvbGxlciIsIl9vbkNoYW5nZSIsIl9vbk1vdXNlV2hlZWwiLCJfb25SZXNldCIsImNsb3Nlc3QiLCJjdXJyZW50VGFyZ2V0Iiwic2Nyb2xsVG9wIiwiZ2V0U2V0dGluZ3MiLCJjaGVja2VkIiwiaGFzQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwic2V0U2V0dGluZ3MiLCJwbHVnaW5zIiwiZmluZ2VycHJpbnQiLCJqb2luIiwiYWxsb3dIaWRlIiwiX2xvYWRGaWxlSW5wdXQiLCJfcGFzdGVJbnB1dCIsIl9sb2FkRGVtb0J0biIsIl9sb2FkRmlsZUJ0biIsIl9wYXN0ZUxhYmVsIiwiX292ZXJsYXkiLCJfbWVudSIsIl9vbk1lbnVCdXR0b25DbGljayIsIl9vbk92ZXJsYXlDbGljayIsIl9vbkxvYWRGaWxlQ2xpY2siLCJfb25Mb2FkRGVtb0NsaWNrIiwiX29uRmlsZUlucHV0Q2hhbmdlIiwiX29uVGV4dElucHV0Q2hhbmdlIiwic3RvcFNwaW5uZXIiLCJzaG93RmlsZVBpY2tlciIsImNsaWNrIiwidHJpbSIsImluY2x1ZGVzIiwiZmlsZXMiLCJmZXRjaCIsInNlcnZpY2VXb3JrZXIiLCJjb250cm9sbGVyIiwiX2NvbnRlbnQiLCJfYW5zd2VyUmVzb2x2ZSIsIl9oaWRlVGltZW91dCIsImFuc3dlciIsImNsYXNzTmFtZSIsImR1cmF0aW9uIiwiYnV0dG9ucyIsIl9hY3RpdmVFbnRlcnMiLCJfY3VycmVudEVudGVyZWRFbGVtZW50IiwiX29uRHJhZ0VudGVyIiwiX29uRHJhZ0xlYXZlIiwiX29uRHJvcCIsImRhdGFUcmFuc2ZlciIsImFjdGl2YXRlZCIsIl9sb2FkZWRWZXJzaW9uIiwic2hvd0xvZ0Zyb20iLCJqc29uIiwidmVyc2lvbiIsInNsaWNlIiwiY29uY2F0IiwiY2hhbmdlcyIsIl9yZXN1bHRzIiwiX21vYmlsZUNvbnRhaW5lciIsIl9jb250YWluZXIiLCJfcXVlcnkiLCJtYXRjaE1lZGlhIiwiX3Bvc2l0aW9uUmVzdWx0cyIsIm1hdGNoZXMiLCJvdXRwdXQiLCJfc2l6ZSIsInB1cmdlIiwiX2ZpbmdlcnByaW50cyIsIl9pdGVtcyIsIl9pbmRleCIsIm1hdGNoIiwiaW5kZXhPZiIsIl9hY3RpdmF0ZWQiLCJfdG9BY3RpdmF0ZSIsImFjdGl2YXRlIiwiX2Fib3J0T25OZXh0SXRlcmF0aW9uIiwiX2N1cnJlbnRKb2IiLCJsb2FkIiwiYWN0aW9uIiwicHJvY2VzcyIsImFib3J0Q3VycmVudCIsInNldHRpbmdzIiwiZGltZW5zaW9ucyIsIm11bHRpcGFzcyIsIm5leHRQYXNzIiwiX21haW5VaSIsIl9vdXRwdXRVaSIsIl9kb3dubG9hZEJ1dHRvblVpIiwiX2NvcHlCdXR0b25VaSIsIl9iZ0ZpbGxVaSIsIl9yZXN1bHRzVWkiLCJfc2V0dGluZ3NVaSIsIl9tYWluTWVudVVpIiwiX3RvYXN0c1VpIiwiX2Ryb3BVaSIsIl9wcmVsb2FkZXJVaSIsIl9jaGFuZ2Vsb2dVaSIsIl9yZXN1bHRzQ29udGFpbmVyVWkiLCJfdmlld1RvZ2dsZXJVaSIsIl9vblNldHRpbmdzQ2hhbmdlIiwiX29uU2V0dGluZ3NSZXNldCIsIl9oYW5kbGVFcnJvciIsIl9vblZpZXdTZWxlY3Rpb25DaGFuZ2UiLCJfb25HbG9iYWxLZXlEb3duIiwiX2lucHV0SXRlbSIsIl9jYWNoZSIsIl9sYXRlc3RDb21wcmVzc0pvYklkIiwiX3VzZXJIYXNJbnRlcmFjdGVkIiwiX3JlbG9hZGluZyIsInJlZ2lzdGVyIiwic2NvcGUiLCJfb25VcGRhdGVGb3VuZCIsInN0b3JhZ2UiLCJfbG9hZFNldHRpbmdzIiwia2V5IiwiY3RybEtleSIsIm1ldGFLZXkiLCJpbnN0YWxsaW5nIiwic3RhdGUiLCJsb2NhdGlvbiIsInJlbG9hZCIsIl9zYXZlU2V0dGluZ3MiLCJfY29tcHJlc3NTdmciLCJfaW5wdXRGaWxlbmFtZSIsIm1lc3NhZ2UiLCJhc3NpZ24iLCJvcmlnaW5hbCIsInJhbmRvbSIsIl91cGRhdGVGb3JGaWxlIiwiZ3ppcCIsImNvbXBhcmVUb0ZpbGUiXSwibWFwcGluZ3MiOiJ5QkFhQSxhQUE2QixDQUMzQixLQUFNLEdBQU8sRUFBTUEsd0JBQU4sR0FBYixDQUNBLE1BQU8sR0FBS0MsUUFBTCxDQUFjLENBQWQsQ0FDUixDQVdELGFBQWdDLENBQzlCLE1BQU8sT0FBWUMsT0FBWixDQUFvQixZQUFwQixDQUFrQyxLQUFLLElBQXZDLENBQ1IsQ0FFRCxhQUF1QyxJQUF2QyxDQUFrRCxDQUVoRCxNQURBLEdBQVMsRUFBT0MsR0FBUCxDQUFXLEtBQUssSUFBaEIsQ0FDVCxDQUFPLEVBQVFDLE1BQVIsQ0FBZSxTQUFpQixHQUFPLEdBQU8s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"} \ No newline at end of file diff --git a/js/prism-worker.js b/js/prism-worker.js new file mode 100644 index 0000000..8b2240f --- /dev/null +++ b/js/prism-worker.js @@ -0,0 +1,2 @@ +(function(){'use strict';self.oldAddEventListener=self.addEventListener,self.addEventListener=null;var a='undefined'==typeof window?'undefined'==typeof global?'undefined'==typeof self?{}:self:global:window,b=function(a,b){return b={exports:{}},a(b,b.exports),b.exports}(function(b){var c='undefined'==typeof window?'undefined'!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{}:window,d=function(){var a=/\blang(?:uage)?-([\w-]+)\b/i,b=0,d=c.Prism={manual:c.Prism&&c.Prism.manual,disableWorkerMessageHandler:c.Prism&&c.Prism.disableWorkerMessageHandler,util:{encode:function(a){return a instanceof e?new e(a.type,d.util.encode(a.content),a.alias):'Array'===d.util.type(a)?a.map(d.util.encode):a.replace(/&/g,'&').replace(/a.length)return;if(!(w instanceof l)){if(s&&x!=b.length-1){j.lastIndex=i;var y=j.exec(a);if(!y)break;for(var z=y.index+(r?y[1].length:0),A=y.index+y[0].length,B=x,k=i,p=b.length;B=k&&(++x,i=k);if(b[x]instanceof l)continue;C=B-x,w=a.slice(i,k),y.index-=i}else{j.lastIndex=0;var y=j.exec(w),C=1}if(!y){if(g)break;continue}r&&(t=y[1]?y[1].length:0);var z=y.index+t,y=y[0].slice(t),A=z+y.length,D=w.slice(0,z),E=w.slice(A),F=[x,C];D&&(++x,i+=D.length,F.push(D));var G=new l(m,q?d.tokenize(y,q):y,u,y,s);if(F.push(G),E&&F.push(E),Array.prototype.splice.apply(b,F),1!=C&&d.matchGrammar(a,b,c,x,i,!0,m),g)break}}}}},tokenize:function(a,b){var c=[a],e=b.rest;if(e){for(var f in e)b[f]=e[f];delete b.rest}return d.matchGrammar(a,c,b,0,0,!1),c},hooks:{all:{},add:function(a,b){var c=d.hooks.all;c[a]=c[a]||[],c[a].push(b)},run:function(a,b){var c=d.hooks.all[a];if(c&&c.length)for(var e,f=0;e=c[f++];)e(b)}}},e=d.Token=function(a,b,c,d,e){this.type=a,this.content=b,this.alias=c,this.length=0|(d||'').length,this.greedy=!!e};if(e.stringify=function(a,b,c){if('string'==typeof a)return a;if('Array'===d.util.type(a))return a.map(function(c){return e.stringify(c,b,a)}).join('');var f={type:a.type,content:e.stringify(a.content,b,c),tag:'span',classes:['token',a.type],attributes:{},language:b,parent:c};if(a.alias){var g='Array'===d.util.type(a.alias)?a.alias:[a.alias];Array.prototype.push.apply(f.classes,g)}d.hooks.run('wrap',f);var h=Object.keys(f.attributes).map(function(a){return a+'="'+(f.attributes[a]||'').replace(/"/g,'"')+'"'}).join(' ');return'<'+f.tag+' class="'+f.classes.join(' ')+'"'+(h?' '+h:'')+'>'+f.content+''},!c.document)return c.addEventListener?(d.disableWorkerMessageHandler||c.addEventListener('message',function(a){var b=JSON.parse(a.data),e=b.language,f=b.code,g=b.immediateClose;c.postMessage(d.highlight(f,d.languages[e],e)),g&&c.close()},!1),c.Prism):c.Prism;var f=document.currentScript||[].slice.call(document.getElementsByTagName('script')).pop();return f&&(d.filename=f.src,!d.manual&&!f.hasAttribute('data-manual')&&('loading'===document.readyState?document.addEventListener('DOMContentLoaded',d.highlightAll):window.requestAnimationFrame?window.requestAnimationFrame(d.highlightAll):window.setTimeout(d.highlightAll,16))),c.Prism}();b.exports&&(b.exports=d),'undefined'!=typeof a&&(a.Prism=d),d.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/(^|[^\\])["']/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},d.languages.markup.tag.inside['attr-value'].inside.entity=d.languages.markup.entity,d.hooks.add('wrap',function(a){'entity'===a.type&&(a.attributes.title=a.content.replace(/&/,'&'))}),d.languages.xml=d.languages.markup,d.languages.html=d.languages.markup,d.languages.mathml=d.languages.markup,d.languages.svg=d.languages.markup,d.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^{}\s][^{};]*?(?=\s*\{)/,string:{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/\B!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},d.languages.css.atrule.inside.rest=d.languages.css,d.languages.markup&&(d.languages.insertBefore('markup','tag',{style:{pattern:/()[\s\S]*?(?=<\/style>)/i,lookbehind:!0,inside:d.languages.css,alias:'language-css',greedy:!0}}),d.languages.insertBefore('inside','attr-value',{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:d.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:d.languages.css}},alias:'language-css'}},d.languages.markup.tag)),d.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/[a-z0-9_]+(?=\()/i,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},d.languages.javascript=d.languages.extend('clike',{keyword:/\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,function:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/i,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),d.languages.insertBefore('javascript','keyword',{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=\s*(?:function\b|(?:\([^()]*\)|[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/i,alias:'function'},constant:/\b[A-Z][A-Z\d_]*\b/}),d.languages.insertBefore('javascript','string',{"template-string":{pattern:/`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${[^}]+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:'punctuation'},rest:null}},string:/[\s\S]+/}}}),d.languages.javascript['template-string'].inside.interpolation.inside.rest=d.languages.javascript,d.languages.markup&&d.languages.insertBefore('markup','tag',{script:{pattern:/()[\s\S]*?(?=<\/script>)/i,lookbehind:!0,inside:d.languages.javascript,alias:'language-javascript',greedy:!0}}),d.languages.js=d.languages.javascript,function(){'undefined'!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var a={js:'javascript',py:'python',rb:'ruby',ps1:'powershell',psm1:'powershell',sh:'bash',bat:'batch',h:'c',tex:'latex'};Array.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function(b){for(var c,e=b.getAttribute('data-src'),f=b,g=/\blang(?:uage)?-([\w-]+)\b/i;f&&!g.test(f.className);)f=f.parentNode;if(f&&(c=(b.className.match(g)||[,''])[1]),!c){var h=(e.match(/\.(\w+)$/)||[,''])[1];c=a[h]||h}var i=document.createElement('code');i.className='language-'+c,b.textContent='',i.textContent='Loading\u2026',b.appendChild(i);var j=new XMLHttpRequest;j.open('GET',e,!0),j.onreadystatechange=function(){4==j.readyState&&(400>j.status&&j.responseText?(i.textContent=j.responseText,d.highlightElement(i)):400<=j.status?i.textContent='\u2716 Error '+j.status+' while fetching file: '+j.statusText:i.textContent='\u2716 Error: File does not exist or is empty')},j.send(null)}),d.plugins.toolbar&&d.plugins.toolbar.registerButton('download-file',function(b){var c=b.element.parentNode;if(c&&/pre/i.test(c.nodeName)&&c.hasAttribute('data-src')&&c.hasAttribute('data-download-link')){var d=c.getAttribute('data-src'),e=document.createElement('a');return e.textContent=c.getAttribute('data-download-link-label')||'Download',e.setAttribute('download',''),e.href=d,e}})},document.addEventListener('DOMContentLoaded',self.Prism.fileHighlight))}()});self.addEventListener=self.oldAddEventListener,self.onmessage=function(a){try{self.postMessage({id:a.data.id,result:b.highlight(a.data.data,b.languages.markup)})}catch(b){self.postMessage({id:a.data.id,error:b.message})}}})(); +//# sourceMappingURL=prism-worker.js.map diff --git a/js/prism-worker.js.map b/js/prism-worker.js.map new file mode 100644 index 0000000..3d35abd --- /dev/null +++ b/js/prism-worker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prism-worker.js","sources":["../../src/js/prism-worker/prism-hack-start.js","../../node_modules/prismjs/prism.js","../../src/js/prism-worker/prism-hack-end.js","../../src/js/prism-worker/index.js"],"sourcesContent":["self.oldAddEventListener = self.addEventListener;\nself.addEventListener = null;","\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t? self // if in worker\n\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n * MIT license http://www.opensource.org/licenses/mit-license.php/\n * @author Lea Verou http://lea.verou.me\n */\n\nvar Prism = (function(){\n\n// Private helper vars\nvar lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\nvar uniqueId = 0;\n\nvar _ = _self.Prism = {\n\tmanual: _self.Prism && _self.Prism.manual,\n\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\tutil: {\n\t\tencode: function (tokens) {\n\t\t\tif (tokens instanceof Token) {\n\t\t\t\treturn new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);\n\t\t\t} else if (_.util.type(tokens) === 'Array') {\n\t\t\t\treturn tokens.map(_.util.encode);\n\t\t\t} else {\n\t\t\t\treturn tokens.replace(/&/g, '&').replace(/ text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (greedy && i != strarr.length - 1) {\n\t\t\t\t\t\tpattern.lastIndex = pos;\n\t\t\t\t\t\tvar match = pattern.exec(text);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index + (lookbehind ? match[1].length : 0),\n\t\t\t\t\t\t to = match.index + match[0].length,\n\t\t\t\t\t\t k = i,\n\t\t\t\t\t\t p = pos;\n\n\t\t\t\t\t\tfor (var len = strarr.length; k < len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) {\n\t\t\t\t\t\t\tp += strarr[k].length;\n\t\t\t\t\t\t\t// Move the index i to the element in strarr that is closest to from\n\t\t\t\t\t\t\tif (from >= p) {\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tpos = p;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If strarr[i] is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (strarr[i] instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Number of tokens to delete and replace with the new match\n\t\t\t\t\t\tdelNum = k - i;\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpattern.lastIndex = 0;\n\n\t\t\t\t\t\tvar match = pattern.exec(str),\n\t\t\t\t\t\t\tdelNum = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!match) {\n\t\t\t\t\t\tif (oneshot) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(lookbehind) {\n\t\t\t\t\t\tlookbehindLength = match[1] ? match[1].length : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar from = match.index + lookbehindLength,\n\t\t\t\t\t match = match[0].slice(lookbehindLength),\n\t\t\t\t\t to = from + match.length,\n\t\t\t\t\t before = str.slice(0, from),\n\t\t\t\t\t after = str.slice(to);\n\n\t\t\t\t\tvar args = [i, delNum];\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\t++i;\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t\targs.push(before);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy);\n\n\t\t\t\t\targs.push(wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\targs.push(after);\n\t\t\t\t\t}\n\n\t\t\t\t\tArray.prototype.splice.apply(strarr, args);\n\n\t\t\t\t\tif (delNum != 1)\n\t\t\t\t\t\t_.matchGrammar(text, strarr, grammar, i, pos, true, token);\n\n\t\t\t\t\tif (oneshot)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\ttokenize: function(text, grammar, language) {\n\t\tvar strarr = [text];\n\n\t\tvar rest = grammar.rest;\n\n\t\tif (rest) {\n\t\t\tfor (var token in rest) {\n\t\t\t\tgrammar[token] = rest[token];\n\t\t\t}\n\n\t\t\tdelete grammar.rest;\n\t\t}\n\n\t\t_.matchGrammar(text, strarr, grammar, 0, 0, false);\n\n\t\treturn strarr;\n\t},\n\n\thooks: {\n\t\tall: {},\n\n\t\tadd: function (name, callback) {\n\t\t\tvar hooks = _.hooks.all;\n\n\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\thooks[name].push(callback);\n\t\t},\n\n\t\trun: function (name, env) {\n\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n\t\t\t\tcallback(env);\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar Token = _.Token = function(type, content, alias, matchedStr, greedy) {\n\tthis.type = type;\n\tthis.content = content;\n\tthis.alias = alias;\n\t// Copy of the full string this token was created from\n\tthis.length = (matchedStr || \"\").length|0;\n\tthis.greedy = !!greedy;\n};\n\nToken.stringify = function(o, language, parent) {\n\tif (typeof o == 'string') {\n\t\treturn o;\n\t}\n\n\tif (_.util.type(o) === 'Array') {\n\t\treturn o.map(function(element) {\n\t\t\treturn Token.stringify(element, language, o);\n\t\t}).join('');\n\t}\n\n\tvar env = {\n\t\ttype: o.type,\n\t\tcontent: Token.stringify(o.content, language, parent),\n\t\ttag: 'span',\n\t\tclasses: ['token', o.type],\n\t\tattributes: {},\n\t\tlanguage: language,\n\t\tparent: parent\n\t};\n\n\tif (o.alias) {\n\t\tvar aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];\n\t\tArray.prototype.push.apply(env.classes, aliases);\n\t}\n\n\t_.hooks.run('wrap', env);\n\n\tvar attributes = Object.keys(env.attributes).map(function(name) {\n\t\treturn name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t}).join(' ');\n\n\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '';\n\n};\n\nif (!_self.document) {\n\tif (!_self.addEventListener) {\n\t\t// in Node.js\n\t\treturn _self.Prism;\n\t}\n\n\tif (!_.disableWorkerMessageHandler) {\n\t\t// In worker\n\t\t_self.addEventListener('message', function (evt) {\n\t\t\tvar message = JSON.parse(evt.data),\n\t\t\t\tlang = message.language,\n\t\t\t\tcode = message.code,\n\t\t\t\timmediateClose = message.immediateClose;\n\n\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\tif (immediateClose) {\n\t\t\t\t_self.close();\n\t\t\t}\n\t\t}, false);\n\t}\n\n\treturn _self.Prism;\n}\n\n//Get current script and highlight\nvar script = document.currentScript || [].slice.call(document.getElementsByTagName(\"script\")).pop();\n\nif (script) {\n\t_.filename = script.src;\n\n\tif (!_.manual && !script.hasAttribute('data-manual')) {\n\t\tif(document.readyState !== \"loading\") {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(_.highlightAll);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(_.highlightAll, 16);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdocument.addEventListener('DOMContentLoaded', _.highlightAll);\n\t\t}\n\t}\n}\n\nreturn _self.Prism;\n\n})();\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n\n/* **********************************************\n Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': //,\n\t'prolog': /<\\?[\\s\\S]+?\\?>/,\n\t'doctype': //i,\n\t'cdata': //i,\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=(?:(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1|[^\\s'\">=]+)/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t/^=/,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(^|[^\\\\])[\"']/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': /&#?[\\da-z]{1,8};/i\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function(env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nPrism.languages.xml = Prism.languages.markup;\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\n\n/* **********************************************\n Begin prism-css.js\n********************************************** */\n\nPrism.languages.css = {\n\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t'atrule': {\n\t\tpattern: /@[\\w-]+?.*?(?:;|(?=\\s*\\{))/i,\n\t\tinside: {\n\t\t\t'rule': /@[\\w-]+/\n\t\t\t// See rest below\n\t\t}\n\t},\n\t'url': /url\\((?:([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,\n\t'selector': /[^{}\\s][^{};]*?(?=\\s*\\{)/,\n\t'string': {\n\t\tpattern: /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'property': /[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*(?=\\s*:)/i,\n\t'important': /\\B!important\\b/i,\n\t'function': /[-a-z0-9]+(?=\\()/i,\n\t'punctuation': /[(){};:]/\n};\n\nPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t'style': {\n\t\t\tpattern: /()[\\s\\S]*?(?=<\\/style>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.css,\n\t\t\talias: 'language-css',\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'attr-value', {\n\t\t'style-attr': {\n\t\t\tpattern: /\\s*style=(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/i,\n\t\t\tinside: {\n\t\t\t\t'attr-name': {\n\t\t\t\t\tpattern: /^\\s*style/i,\n\t\t\t\t\tinside: Prism.languages.markup.tag.inside\n\t\t\t\t},\n\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /.+/i,\n\t\t\t\t\tinside: Prism.languages.css\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'language-css'\n\t\t}\n\t}, Prism.languages.markup.tag);\n}\n\n/* **********************************************\n Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\tpunctuation: /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n\t'boolean': /\\b(?:true|false)\\b/,\n\t'function': /[a-z0-9_]+(?=\\()/i,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'keyword': /\\b(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\\b/,\n\t'number': /\\b(?:0[xX][\\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|NaN|Infinity)\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:[Ee][+-]?\\d+)?/,\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*\\()/i,\n\t'operator': /-[-=]?|\\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\\|[|=]?|\\*\\*?=?|\\/=?|~|\\^=?|%=?|\\?|\\.{3}/\n});\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: /((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(\\[[^\\]\\r\\n]+]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyu]{0,5}(?=\\s*($|[\\r\\n,.;})\\]]))/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=\\s*(?:function\\b|(?:\\([^()]*\\)|[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/i,\n\t\talias: 'function'\n\t},\n\t'constant': /\\b[A-Z][A-Z\\d_]*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\${[^}]+}|[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\${[^}]+}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\${|}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: null // See below\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t}\n});\nPrism.languages.javascript['template-string'].inside['interpolation'].inside.rest = Prism.languages.javascript;\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t'script': {\n\t\t\tpattern: /()[\\s\\S]*?(?=<\\/script>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript,\n\t\t\talias: 'language-javascript',\n\t\t\tgreedy: true\n\t\t}\n\t});\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n\t\treturn;\n\t}\n\n\tself.Prism.fileHighlight = function() {\n\n\t\tvar Extensions = {\n\t\t\t'js': 'javascript',\n\t\t\t'py': 'python',\n\t\t\t'rb': 'ruby',\n\t\t\t'ps1': 'powershell',\n\t\t\t'psm1': 'powershell',\n\t\t\t'sh': 'bash',\n\t\t\t'bat': 'batch',\n\t\t\t'h': 'c',\n\t\t\t'tex': 'latex'\n\t\t};\n\n\t\tArray.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language, parent = pre;\n\t\t\tvar lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n\t\t\twhile (parent && !lang.test(parent.className)) {\n\t\t\t\tparent = parent.parentNode;\n\t\t\t}\n\n\t\t\tif (parent) {\n\t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n\t\t\t}\n\n\t\t\tif (!language) {\n\t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n\t\t\t\tlanguage = Extensions[extension] || extension;\n\t\t\t}\n\n\t\t\tvar code = document.createElement('code');\n\t\t\tcode.className = 'language-' + language;\n\n\t\t\tpre.textContent = '';\n\n\t\t\tcode.textContent = 'Loading…';\n\n\t\t\tpre.appendChild(code);\n\n\t\t\tvar xhr = new XMLHttpRequest();\n\n\t\t\txhr.open('GET', src, true);\n\n\t\t\txhr.onreadystatechange = function () {\n\t\t\t\tif (xhr.readyState == 4) {\n\n\t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\t\tcode.textContent = xhr.responseText;\n\n\t\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t\t}\n\t\t\t\t\telse if (xhr.status >= 400) {\n\t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\txhr.send(null);\n\t\t});\n\n\t\tif (Prism.plugins.toolbar) {\n\t\t\tPrism.plugins.toolbar.registerButton('download-file', function (env) {\n\t\t\t\tvar pre = env.element.parentNode;\n\t\t\t\tif (!pre || !/pre/i.test(pre.nodeName) || !pre.hasAttribute('data-src') || !pre.hasAttribute('data-download-link')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar src = pre.getAttribute('data-src');\n\t\t\t\tvar a = document.createElement('a');\n\t\t\t\ta.textContent = pre.getAttribute('data-download-link-label') || 'Download';\n\t\t\t\ta.setAttribute('download', '');\n\t\t\t\ta.href = src;\n\t\t\t\treturn a;\n\t\t\t});\n\t\t}\n\n\t};\n\n\tdocument.addEventListener('DOMContentLoaded', self.Prism.fileHighlight);\n\n})();","self.addEventListener = self.oldAddEventListener;","// Hide addEventListener from prism - I want to add my own listener\nimport './prism-hack-start';\nimport Prism from 'prismjs';\nimport './prism-hack-end';\n\nself.onmessage = function(event) {\n try {\n self.postMessage({\n id: event.data.id,\n result: Prism.highlight(event.data.data, Prism.languages.markup)\n });\n }\n catch (error) {\n self.postMessage({\n id: event.data.id,\n error: error.message\n });\n }\n};"],"names":["self","oldAddEventListener","addEventListener","window","WorkerGlobalScope","Prism","manual","disableWorkerMessageHandler","util","encode","type","content","alias","map","replace","Object","prototype","toString","call","match","objId","defineProperty","value","clone","hasOwnProperty","forEach","languages","extend","insertBefore","length","arguments","DFS","plugins","highlightAll","highlightAllUnder","document","callback","selector","hooks","run","elements","querySelectorAll","highlightElement","test","className","parentNode","toLowerCase","nodeName","textContent","element","language","grammar","code","Worker","filename","onmessage","highlightedCode","data","innerHTML","postMessage","JSON","stringify","immediateClose","highlight","tokens","tokenize","matchGrammar","Token","inside","lookbehind","greedy","pattern","global","RegExp","source","lastIndex","exec","index","slice","push","Array","splice","apply","rest","all","add","join","tag","classes","attributes","parent","keys","parse","close","currentScript","getElementsByTagName","pop","src","hasAttribute","readyState","requestAnimationFrame","setTimeout","exports","markup","xml","html","mathml","svg","css","clike","punctuation","javascript","js","querySelector","fileHighlight","getAttribute","createElement","appendChild","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","toolbar","registerButton","setAttribute","href","id","result","error","message"],"mappings":"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","preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcHJpc20td29ya2VyL3ByaXNtLWhhY2stc3RhcnQuanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvbm9kZV9tb2R1bGVzL3ByaXNtanMvcHJpc20uanMiLCIvaG9tZS90cmF2aXMvYnVpbGQvamFrZWFyY2hpYmFsZC9zdmdvbWcvc3JjL2pzL3ByaXNtLXdvcmtlci9wcmlzbS1oYWNrLWVuZC5qcyIsIi9ob21lL3RyYXZpcy9idWlsZC9qYWtlYXJjaGliYWxkL3N2Z29tZy9zcmMvanMvcHJpc20td29ya2VyL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbInNlbGYub2xkQWRkRXZlbnRMaXN0ZW5lciA9IHNlbGYuYWRkRXZlbnRMaXN0ZW5lcjtcbnNlbGYuYWRkRXZlbnRMaXN0ZW5lciA9IG51bGw7IiwiXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgIEJlZ2luIHByaXNtLWNvcmUuanNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxudmFyIF9zZWxmID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxuXHQ/IHdpbmRvdyAgIC8vIGlmIGluIGJyb3dzZXJcblx0OiAoXG5cdFx0KHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlKVxuXHRcdD8gc2VsZiAvLyBpZiBpbiB3b3JrZXJcblx0XHQ6IHt9ICAgLy8gaWYgaW4gbm9kZSBqc1xuXHQpO1xuXG4vKipcbiAqIFByaXNtOiBMaWdodHdlaWdodCwgcm9idXN0LCBlbGVnYW50IHN5bnRheCBoaWdobGlnaHRpbmdcbiAqIE1JVCBsaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwL1xuICogQGF1dGhvciBMZWEgVmVyb3UgaHR0cDovL2xlYS52ZXJvdS5tZVxuICovXG5cbnZhciBQcmlzbSA9IChmdW5jdGlvbigpe1xuXG4vLyBQcml2YXRlIGhlbHBlciB2YXJzXG52YXIgbGFuZyA9IC9cXGJsYW5nKD86dWFnZSk/LShbXFx3LV0rKVxcYi9pO1xudmFyIHVuaXF1ZUlkID0gMDtcblxudmFyIF8gPSBfc2VsZi5QcmlzbSA9IHtcblx0bWFudWFsOiBfc2VsZi5QcmlzbSAmJiBfc2VsZi5QcmlzbS5tYW51YWwsXG5cdGRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcjogX3NlbGYuUHJpc20gJiYgX3NlbGYuUHJpc20uZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyLFxuXHR1dGlsOiB7XG5cdFx0ZW5jb2RlOiBmdW5jdGlvbiAodG9rZW5zKSB7XG5cdFx0XHRpZiAodG9rZW5zIGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRcdFx0cmV0dXJuIG5ldyBUb2tlbih0b2tlbnMudHlwZSwgXy51dGlsLmVuY29kZSh0b2tlbnMuY29udGVudCksIHRva2Vucy5hbGlhcyk7XG5cdFx0XHR9IGVsc2UgaWYgKF8udXRpbC50eXBlKHRva2VucykgPT09ICdBcnJheScpIHtcblx0XHRcdFx0cmV0dXJuIHRva2Vucy5tYXAoXy51dGlsLmVuY29kZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdG9rZW5zLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0dHlwZTogZnVuY3Rpb24gKG8pIHtcblx0XHRcdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykubWF0Y2goL1xcW29iamVjdCAoXFx3KylcXF0vKVsxXTtcblx0XHR9LFxuXG5cdFx0b2JqSWQ6IGZ1bmN0aW9uIChvYmopIHtcblx0XHRcdGlmICghb2JqWydfX2lkJ10pIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ19faWQnLCB7IHZhbHVlOiArK3VuaXF1ZUlkIH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9ialsnX19pZCddO1xuXHRcdH0sXG5cblx0XHQvLyBEZWVwIGNsb25lIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiAoZS5nLiB0byBleHRlbmQgaXQpXG5cdFx0Y2xvbmU6IGZ1bmN0aW9uIChvLCB2aXNpdGVkKSB7XG5cdFx0XHR2YXIgdHlwZSA9IF8udXRpbC50eXBlKG8pO1xuXHRcdFx0dmlzaXRlZCA9IHZpc2l0ZWQgfHwge307XG5cblx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRjYXNlICdPYmplY3QnOlxuXHRcdFx0XHRcdGlmICh2aXNpdGVkW18udXRpbC5vYmpJZChvKV0pIHtcblx0XHRcdFx0XHRcdHJldHVybiB2aXNpdGVkW18udXRpbC5vYmpJZChvKV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdHZpc2l0ZWRbXy51dGlsLm9iaklkKG8pXSA9IGNsb25lO1xuXG5cdFx0XHRcdFx0Zm9yICh2YXIga2V5IGluIG8pIHtcblx0XHRcdFx0XHRcdGlmIChvLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRcdFx0Y2xvbmVba2V5XSA9IF8udXRpbC5jbG9uZShvW2tleV0sIHZpc2l0ZWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBjbG9uZTtcblxuXHRcdFx0XHRjYXNlICdBcnJheSc6XG5cdFx0XHRcdFx0aWYgKHZpc2l0ZWRbXy51dGlsLm9iaklkKG8pXSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHZpc2l0ZWRbXy51dGlsLm9iaklkKG8pXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGNsb25lID0gW107XG5cdFx0XHRcdFx0dmlzaXRlZFtfLnV0aWwub2JqSWQobyldID0gY2xvbmU7XG5cblx0XHRcdFx0XHRvLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHtcblx0XHRcdFx0XHRcdGNsb25lW2ldID0gXy51dGlsLmNsb25lKHYsIHZpc2l0ZWQpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGNsb25lO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbztcblx0XHR9XG5cdH0sXG5cblx0bGFuZ3VhZ2VzOiB7XG5cdFx0ZXh0ZW5kOiBmdW5jdGlvbiAoaWQsIHJlZGVmKSB7XG5cdFx0XHR2YXIgbGFuZyA9IF8udXRpbC5jbG9uZShfLmxhbmd1YWdlc1tpZF0pO1xuXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gcmVkZWYpIHtcblx0XHRcdFx0bGFuZ1trZXldID0gcmVkZWZba2V5XTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGxhbmc7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEluc2VydCBhIHRva2VuIGJlZm9yZSBhbm90aGVyIHRva2VuIGluIGEgbGFuZ3VhZ2UgbGl0ZXJhbFxuXHRcdCAqIEFzIHRoaXMgbmVlZHMgdG8gcmVjcmVhdGUgdGhlIG9iamVjdCAod2UgY2Fubm90IGFjdHVhbGx5IGluc2VydCBiZWZvcmUga2V5cyBpbiBvYmplY3QgbGl0ZXJhbHMpLFxuXHRcdCAqIHdlIGNhbm5vdCBqdXN0IHByb3ZpZGUgYW4gb2JqZWN0LCB3ZSBuZWVkIGFub2JqZWN0IGFuZCBhIGtleS5cblx0XHQgKiBAcGFyYW0gaW5zaWRlIFRoZSBrZXkgKG9yIGxhbmd1YWdlIGlkKSBvZiB0aGUgcGFyZW50XG5cdFx0ICogQHBhcmFtIGJlZm9yZSBUaGUga2V5IHRvIGluc2VydCBiZWZvcmUuIElmIG5vdCBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIGFwcGVuZHMgaW5zdGVhZC5cblx0XHQgKiBAcGFyYW0gaW5zZXJ0IE9iamVjdCB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMgdG8gaW5zZXJ0XG5cdFx0ICogQHBhcmFtIHJvb3QgVGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIGBpbnNpZGVgLiBJZiBlcXVhbCB0byBQcmlzbS5sYW5ndWFnZXMsIGl0IGNhbiBiZSBvbWl0dGVkLlxuXHRcdCAqL1xuXHRcdGluc2VydEJlZm9yZTogZnVuY3Rpb24gKGluc2lkZSwgYmVmb3JlLCBpbnNlcnQsIHJvb3QpIHtcblx0XHRcdHJvb3QgPSByb290IHx8IF8ubGFuZ3VhZ2VzO1xuXHRcdFx0dmFyIGdyYW1tYXIgPSByb290W2luc2lkZV07XG5cblx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHtcblx0XHRcdFx0aW5zZXJ0ID0gYXJndW1lbnRzWzFdO1xuXG5cdFx0XHRcdGZvciAodmFyIG5ld1Rva2VuIGluIGluc2VydCkge1xuXHRcdFx0XHRcdGlmIChpbnNlcnQuaGFzT3duUHJvcGVydHkobmV3VG9rZW4pKSB7XG5cdFx0XHRcdFx0XHRncmFtbWFyW25ld1Rva2VuXSA9IGluc2VydFtuZXdUb2tlbl07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGdyYW1tYXI7XG5cdFx0XHR9XG5cblx0XHRcdHZhciByZXQgPSB7fTtcblxuXHRcdFx0Zm9yICh2YXIgdG9rZW4gaW4gZ3JhbW1hcikge1xuXG5cdFx0XHRcdGlmIChncmFtbWFyLmhhc093blByb3BlcnR5KHRva2VuKSkge1xuXG5cdFx0XHRcdFx0aWYgKHRva2VuID09IGJlZm9yZSkge1xuXG5cdFx0XHRcdFx0XHRmb3IgKHZhciBuZXdUb2tlbiBpbiBpbnNlcnQpIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaW5zZXJ0Lmhhc093blByb3BlcnR5KG5ld1Rva2VuKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldFtuZXdUb2tlbl0gPSBpbnNlcnRbbmV3VG9rZW5dO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0W3Rva2VuXSA9IGdyYW1tYXJbdG9rZW5dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVwZGF0ZSByZWZlcmVuY2VzIGluIG90aGVyIGxhbmd1YWdlIGRlZmluaXRpb25zXG5cdFx0XHRfLmxhbmd1YWdlcy5ERlMoXy5sYW5ndWFnZXMsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHRcdFx0aWYgKHZhbHVlID09PSByb290W2luc2lkZV0gJiYga2V5ICE9IGluc2lkZSkge1xuXHRcdFx0XHRcdHRoaXNba2V5XSA9IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiByb290W2luc2lkZV0gPSByZXQ7XG5cdFx0fSxcblxuXHRcdC8vIFRyYXZlcnNlIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiB3aXRoIERlcHRoIEZpcnN0IFNlYXJjaFxuXHRcdERGUzogZnVuY3Rpb24obywgY2FsbGJhY2ssIHR5cGUsIHZpc2l0ZWQpIHtcblx0XHRcdHZpc2l0ZWQgPSB2aXNpdGVkIHx8IHt9O1xuXHRcdFx0Zm9yICh2YXIgaSBpbiBvKSB7XG5cdFx0XHRcdGlmIChvLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2suY2FsbChvLCBpLCBvW2ldLCB0eXBlIHx8IGkpO1xuXG5cdFx0XHRcdFx0aWYgKF8udXRpbC50eXBlKG9baV0pID09PSAnT2JqZWN0JyAmJiAhdmlzaXRlZFtfLnV0aWwub2JqSWQob1tpXSldKSB7XG5cdFx0XHRcdFx0XHR2aXNpdGVkW18udXRpbC5vYmpJZChvW2ldKV0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0Xy5sYW5ndWFnZXMuREZTKG9baV0sIGNhbGxiYWNrLCBudWxsLCB2aXNpdGVkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoXy51dGlsLnR5cGUob1tpXSkgPT09ICdBcnJheScgJiYgIXZpc2l0ZWRbXy51dGlsLm9iaklkKG9baV0pXSkge1xuXHRcdFx0XHRcdFx0dmlzaXRlZFtfLnV0aWwub2JqSWQob1tpXSldID0gdHJ1ZTtcblx0XHRcdFx0XHRcdF8ubGFuZ3VhZ2VzLkRGUyhvW2ldLCBjYWxsYmFjaywgaSwgdmlzaXRlZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRwbHVnaW5zOiB7fSxcblxuXHRoaWdobGlnaHRBbGw6IGZ1bmN0aW9uKGFzeW5jLCBjYWxsYmFjaykge1xuXHRcdF8uaGlnaGxpZ2h0QWxsVW5kZXIoZG9jdW1lbnQsIGFzeW5jLCBjYWxsYmFjayk7XG5cdH0sXG5cblx0aGlnaGxpZ2h0QWxsVW5kZXI6IGZ1bmN0aW9uKGNvbnRhaW5lciwgYXN5bmMsIGNhbGxiYWNrKSB7XG5cdFx0dmFyIGVudiA9IHtcblx0XHRcdGNhbGxiYWNrOiBjYWxsYmFjayxcblx0XHRcdHNlbGVjdG9yOiAnY29kZVtjbGFzcyo9XCJsYW5ndWFnZS1cIl0sIFtjbGFzcyo9XCJsYW5ndWFnZS1cIl0gY29kZSwgY29kZVtjbGFzcyo9XCJsYW5nLVwiXSwgW2NsYXNzKj1cImxhbmctXCJdIGNvZGUnXG5cdFx0fTtcblxuXHRcdF8uaG9va3MucnVuKFwiYmVmb3JlLWhpZ2hsaWdodGFsbFwiLCBlbnYpO1xuXG5cdFx0dmFyIGVsZW1lbnRzID0gZW52LmVsZW1lbnRzIHx8IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGVudi5zZWxlY3Rvcik7XG5cblx0XHRmb3IgKHZhciBpPTAsIGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50c1tpKytdOykge1xuXHRcdFx0Xy5oaWdobGlnaHRFbGVtZW50KGVsZW1lbnQsIGFzeW5jID09PSB0cnVlLCBlbnYuY2FsbGJhY2spO1xuXHRcdH1cblx0fSxcblxuXHRoaWdobGlnaHRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBhc3luYywgY2FsbGJhY2spIHtcblx0XHQvLyBGaW5kIGxhbmd1YWdlXG5cdFx0dmFyIGxhbmd1YWdlLCBncmFtbWFyLCBwYXJlbnQgPSBlbGVtZW50O1xuXG5cdFx0d2hpbGUgKHBhcmVudCAmJiAhbGFuZy50ZXN0KHBhcmVudC5jbGFzc05hbWUpKSB7XG5cdFx0XHRwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcblx0XHR9XG5cblx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRsYW5ndWFnZSA9IChwYXJlbnQuY2xhc3NOYW1lLm1hdGNoKGxhbmcpIHx8IFssJyddKVsxXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0Z3JhbW1hciA9IF8ubGFuZ3VhZ2VzW2xhbmd1YWdlXTtcblx0XHR9XG5cblx0XHQvLyBTZXQgbGFuZ3VhZ2Ugb24gdGhlIGVsZW1lbnQsIGlmIG5vdCBwcmVzZW50XG5cdFx0ZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKGxhbmcsICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykgKyAnIGxhbmd1YWdlLScgKyBsYW5ndWFnZTtcblxuXHRcdGlmIChlbGVtZW50LnBhcmVudE5vZGUpIHtcblx0XHRcdC8vIFNldCBsYW5ndWFnZSBvbiB0aGUgcGFyZW50LCBmb3Igc3R5bGluZ1xuXHRcdFx0cGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoL3ByZS9pLnRlc3QocGFyZW50Lm5vZGVOYW1lKSkge1xuXHRcdFx0XHRwYXJlbnQuY2xhc3NOYW1lID0gcGFyZW50LmNsYXNzTmFtZS5yZXBsYWNlKGxhbmcsICcnKS5yZXBsYWNlKC9cXHMrL2csICcgJykgKyAnIGxhbmd1YWdlLScgKyBsYW5ndWFnZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgY29kZSA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG5cblx0XHR2YXIgZW52ID0ge1xuXHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZSxcblx0XHRcdGdyYW1tYXI6IGdyYW1tYXIsXG5cdFx0XHRjb2RlOiBjb2RlXG5cdFx0fTtcblxuXHRcdF8uaG9va3MucnVuKCdiZWZvcmUtc2FuaXR5LWNoZWNrJywgZW52KTtcblxuXHRcdGlmICghZW52LmNvZGUgfHwgIWVudi5ncmFtbWFyKSB7XG5cdFx0XHRpZiAoZW52LmNvZGUpIHtcblx0XHRcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1oaWdobGlnaHQnLCBlbnYpO1xuXHRcdFx0XHRlbnYuZWxlbWVudC50ZXh0Q29udGVudCA9IGVudi5jb2RlO1xuXHRcdFx0XHRfLmhvb2tzLnJ1bignYWZ0ZXItaGlnaGxpZ2h0JywgZW52KTtcblx0XHRcdH1cblx0XHRcdF8uaG9va3MucnVuKCdjb21wbGV0ZScsIGVudik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1oaWdobGlnaHQnLCBlbnYpO1xuXG5cdFx0aWYgKGFzeW5jICYmIF9zZWxmLldvcmtlcikge1xuXHRcdFx0dmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoXy5maWxlbmFtZSk7XG5cblx0XHRcdHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHtcblx0XHRcdFx0ZW52LmhpZ2hsaWdodGVkQ29kZSA9IGV2dC5kYXRhO1xuXG5cdFx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaW5zZXJ0JywgZW52KTtcblxuXHRcdFx0XHRlbnYuZWxlbWVudC5pbm5lckhUTUwgPSBlbnYuaGlnaGxpZ2h0ZWRDb2RlO1xuXG5cdFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZW52LmVsZW1lbnQpO1xuXHRcdFx0XHRfLmhvb2tzLnJ1bignYWZ0ZXItaGlnaGxpZ2h0JywgZW52KTtcblx0XHRcdFx0Xy5ob29rcy5ydW4oJ2NvbXBsZXRlJywgZW52KTtcblx0XHRcdH07XG5cblx0XHRcdHdvcmtlci5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdGxhbmd1YWdlOiBlbnYubGFuZ3VhZ2UsXG5cdFx0XHRcdGNvZGU6IGVudi5jb2RlLFxuXHRcdFx0XHRpbW1lZGlhdGVDbG9zZTogdHJ1ZVxuXHRcdFx0fSkpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGVudi5oaWdobGlnaHRlZENvZGUgPSBfLmhpZ2hsaWdodChlbnYuY29kZSwgZW52LmdyYW1tYXIsIGVudi5sYW5ndWFnZSk7XG5cblx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaW5zZXJ0JywgZW52KTtcblxuXHRcdFx0ZW52LmVsZW1lbnQuaW5uZXJIVE1MID0gZW52LmhpZ2hsaWdodGVkQ29kZTtcblxuXHRcdFx0Y2FsbGJhY2sgJiYgY2FsbGJhY2suY2FsbChlbGVtZW50KTtcblxuXHRcdFx0Xy5ob29rcy5ydW4oJ2FmdGVyLWhpZ2hsaWdodCcsIGVudik7XG5cdFx0XHRfLmhvb2tzLnJ1bignY29tcGxldGUnLCBlbnYpO1xuXHRcdH1cblx0fSxcblxuXHRoaWdobGlnaHQ6IGZ1bmN0aW9uICh0ZXh0LCBncmFtbWFyLCBsYW5ndWFnZSkge1xuXHRcdHZhciBlbnYgPSB7XG5cdFx0XHRjb2RlOiB0ZXh0LFxuXHRcdFx0Z3JhbW1hcjogZ3JhbW1hcixcblx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZVxuXHRcdH07XG5cdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS10b2tlbml6ZScsIGVudik7XG5cdFx0ZW52LnRva2VucyA9IF8udG9rZW5pemUoZW52LmNvZGUsIGVudi5ncmFtbWFyKTtcblx0XHRfLmhvb2tzLnJ1bignYWZ0ZXItdG9rZW5pemUnLCBlbnYpO1xuXHRcdHJldHVybiBUb2tlbi5zdHJpbmdpZnkoXy51dGlsLmVuY29kZShlbnYudG9rZW5zKSwgZW52Lmxhbmd1YWdlKTtcblx0fSxcblxuXHRtYXRjaEdyYW1tYXI6IGZ1bmN0aW9uICh0ZXh0LCBzdHJhcnIsIGdyYW1tYXIsIGluZGV4LCBzdGFydFBvcywgb25lc2hvdCwgdGFyZ2V0KSB7XG5cdFx0dmFyIFRva2VuID0gXy5Ub2tlbjtcblxuXHRcdGZvciAodmFyIHRva2VuIGluIGdyYW1tYXIpIHtcblx0XHRcdGlmKCFncmFtbWFyLmhhc093blByb3BlcnR5KHRva2VuKSB8fCAhZ3JhbW1hclt0b2tlbl0pIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0b2tlbiA9PSB0YXJnZXQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcGF0dGVybnMgPSBncmFtbWFyW3Rva2VuXTtcblx0XHRcdHBhdHRlcm5zID0gKF8udXRpbC50eXBlKHBhdHRlcm5zKSA9PT0gXCJBcnJheVwiKSA/IHBhdHRlcm5zIDogW3BhdHRlcm5zXTtcblxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBwYXR0ZXJucy5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR2YXIgcGF0dGVybiA9IHBhdHRlcm5zW2pdLFxuXHRcdFx0XHRcdGluc2lkZSA9IHBhdHRlcm4uaW5zaWRlLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQgPSAhIXBhdHRlcm4ubG9va2JlaGluZCxcblx0XHRcdFx0XHRncmVlZHkgPSAhIXBhdHRlcm4uZ3JlZWR5LFxuXHRcdFx0XHRcdGxvb2tiZWhpbmRMZW5ndGggPSAwLFxuXHRcdFx0XHRcdGFsaWFzID0gcGF0dGVybi5hbGlhcztcblxuXHRcdFx0XHRpZiAoZ3JlZWR5ICYmICFwYXR0ZXJuLnBhdHRlcm4uZ2xvYmFsKSB7XG5cdFx0XHRcdFx0Ly8gV2l0aG91dCB0aGUgZ2xvYmFsIGZsYWcsIGxhc3RJbmRleCB3b24ndCB3b3JrXG5cdFx0XHRcdFx0dmFyIGZsYWdzID0gcGF0dGVybi5wYXR0ZXJuLnRvU3RyaW5nKCkubWF0Y2goL1tpbXV5XSokLylbMF07XG5cdFx0XHRcdFx0cGF0dGVybi5wYXR0ZXJuID0gUmVnRXhwKHBhdHRlcm4ucGF0dGVybi5zb3VyY2UsIGZsYWdzICsgXCJnXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cGF0dGVybiA9IHBhdHRlcm4ucGF0dGVybiB8fCBwYXR0ZXJuO1xuXG5cdFx0XHRcdC8vIERvbuKAmXQgY2FjaGUgbGVuZ3RoIGFzIGl0IGNoYW5nZXMgZHVyaW5nIHRoZSBsb29wXG5cdFx0XHRcdGZvciAodmFyIGkgPSBpbmRleCwgcG9zID0gc3RhcnRQb3M7IGkgPCBzdHJhcnIubGVuZ3RoOyBwb3MgKz0gc3RyYXJyW2ldLmxlbmd0aCwgKytpKSB7XG5cblx0XHRcdFx0XHR2YXIgc3RyID0gc3RyYXJyW2ldO1xuXG5cdFx0XHRcdFx0aWYgKHN0cmFyci5sZW5ndGggPiB0ZXh0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly8gU29tZXRoaW5nIHdlbnQgdGVycmlibHkgd3JvbmcsIEFCT1JULCBBQk9SVCFcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc3RyIGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChncmVlZHkgJiYgaSAhPSBzdHJhcnIubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0cGF0dGVybi5sYXN0SW5kZXggPSBwb3M7XG5cdFx0XHRcdFx0XHR2YXIgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWModGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoIW1hdGNoKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgZnJvbSA9IG1hdGNoLmluZGV4ICsgKGxvb2tiZWhpbmQgPyBtYXRjaFsxXS5sZW5ndGggOiAwKSxcblx0XHRcdFx0XHRcdCAgICB0byA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoLFxuXHRcdFx0XHRcdFx0ICAgIGsgPSBpLFxuXHRcdFx0XHRcdFx0ICAgIHAgPSBwb3M7XG5cblx0XHRcdFx0XHRcdGZvciAodmFyIGxlbiA9IHN0cmFyci5sZW5ndGg7IGsgPCBsZW4gJiYgKHAgPCB0byB8fCAoIXN0cmFycltrXS50eXBlICYmICFzdHJhcnJbayAtIDFdLmdyZWVkeSkpOyArK2spIHtcblx0XHRcdFx0XHRcdFx0cCArPSBzdHJhcnJba10ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHQvLyBNb3ZlIHRoZSBpbmRleCBpIHRvIHRoZSBlbGVtZW50IGluIHN0cmFyciB0aGF0IGlzIGNsb3Nlc3QgdG8gZnJvbVxuXHRcdFx0XHRcdFx0XHRpZiAoZnJvbSA+PSBwKSB7XG5cdFx0XHRcdFx0XHRcdFx0KytpO1xuXHRcdFx0XHRcdFx0XHRcdHBvcyA9IHA7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSWYgc3RyYXJyW2ldIGlzIGEgVG9rZW4sIHRoZW4gdGhlIG1hdGNoIHN0YXJ0cyBpbnNpZGUgYW5vdGhlciBUb2tlbiwgd2hpY2ggaXMgaW52YWxpZFxuXHRcdFx0XHRcdFx0aWYgKHN0cmFycltpXSBpbnN0YW5jZW9mIFRva2VuKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBOdW1iZXIgb2YgdG9rZW5zIHRvIGRlbGV0ZSBhbmQgcmVwbGFjZSB3aXRoIHRoZSBuZXcgbWF0Y2hcblx0XHRcdFx0XHRcdGRlbE51bSA9IGsgLSBpO1xuXHRcdFx0XHRcdFx0c3RyID0gdGV4dC5zbGljZShwb3MsIHApO1xuXHRcdFx0XHRcdFx0bWF0Y2guaW5kZXggLT0gcG9zO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG5cblx0XHRcdFx0XHRcdHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyhzdHIpLFxuXHRcdFx0XHRcdFx0XHRkZWxOdW0gPSAxO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICghbWF0Y2gpIHtcblx0XHRcdFx0XHRcdGlmIChvbmVzaG90KSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihsb29rYmVoaW5kKSB7XG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kTGVuZ3RoID0gbWF0Y2hbMV0gPyBtYXRjaFsxXS5sZW5ndGggOiAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBmcm9tID0gbWF0Y2guaW5kZXggKyBsb29rYmVoaW5kTGVuZ3RoLFxuXHRcdFx0XHRcdCAgICBtYXRjaCA9IG1hdGNoWzBdLnNsaWNlKGxvb2tiZWhpbmRMZW5ndGgpLFxuXHRcdFx0XHRcdCAgICB0byA9IGZyb20gKyBtYXRjaC5sZW5ndGgsXG5cdFx0XHRcdFx0ICAgIGJlZm9yZSA9IHN0ci5zbGljZSgwLCBmcm9tKSxcblx0XHRcdFx0XHQgICAgYWZ0ZXIgPSBzdHIuc2xpY2UodG8pO1xuXG5cdFx0XHRcdFx0dmFyIGFyZ3MgPSBbaSwgZGVsTnVtXTtcblxuXHRcdFx0XHRcdGlmIChiZWZvcmUpIHtcblx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdHBvcyArPSBiZWZvcmUubGVuZ3RoO1xuXHRcdFx0XHRcdFx0YXJncy5wdXNoKGJlZm9yZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHdyYXBwZWQgPSBuZXcgVG9rZW4odG9rZW4sIGluc2lkZT8gXy50b2tlbml6ZShtYXRjaCwgaW5zaWRlKSA6IG1hdGNoLCBhbGlhcywgbWF0Y2gsIGdyZWVkeSk7XG5cblx0XHRcdFx0XHRhcmdzLnB1c2god3JhcHBlZCk7XG5cblx0XHRcdFx0XHRpZiAoYWZ0ZXIpIHtcblx0XHRcdFx0XHRcdGFyZ3MucHVzaChhZnRlcik7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0QXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShzdHJhcnIsIGFyZ3MpO1xuXG5cdFx0XHRcdFx0aWYgKGRlbE51bSAhPSAxKVxuXHRcdFx0XHRcdFx0Xy5tYXRjaEdyYW1tYXIodGV4dCwgc3RyYXJyLCBncmFtbWFyLCBpLCBwb3MsIHRydWUsIHRva2VuKTtcblxuXHRcdFx0XHRcdGlmIChvbmVzaG90KVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dG9rZW5pemU6IGZ1bmN0aW9uKHRleHQsIGdyYW1tYXIsIGxhbmd1YWdlKSB7XG5cdFx0dmFyIHN0cmFyciA9IFt0ZXh0XTtcblxuXHRcdHZhciByZXN0ID0gZ3JhbW1hci5yZXN0O1xuXG5cdFx0aWYgKHJlc3QpIHtcblx0XHRcdGZvciAodmFyIHRva2VuIGluIHJlc3QpIHtcblx0XHRcdFx0Z3JhbW1hclt0b2tlbl0gPSByZXN0W3Rva2VuXTtcblx0XHRcdH1cblxuXHRcdFx0ZGVsZXRlIGdyYW1tYXIucmVzdDtcblx0XHR9XG5cblx0XHRfLm1hdGNoR3JhbW1hcih0ZXh0LCBzdHJhcnIsIGdyYW1tYXIsIDAsIDAsIGZhbHNlKTtcblxuXHRcdHJldHVybiBzdHJhcnI7XG5cdH0sXG5cblx0aG9va3M6IHtcblx0XHRhbGw6IHt9LFxuXG5cdFx0YWRkOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2spIHtcblx0XHRcdHZhciBob29rcyA9IF8uaG9va3MuYWxsO1xuXG5cdFx0XHRob29rc1tuYW1lXSA9IGhvb2tzW25hbWVdIHx8IFtdO1xuXG5cdFx0XHRob29rc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0XHR9LFxuXG5cdFx0cnVuOiBmdW5jdGlvbiAobmFtZSwgZW52KSB7XG5cdFx0XHR2YXIgY2FsbGJhY2tzID0gXy5ob29rcy5hbGxbbmFtZV07XG5cblx0XHRcdGlmICghY2FsbGJhY2tzIHx8ICFjYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICh2YXIgaT0wLCBjYWxsYmFjazsgY2FsbGJhY2sgPSBjYWxsYmFja3NbaSsrXTspIHtcblx0XHRcdFx0Y2FsbGJhY2soZW52KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbnZhciBUb2tlbiA9IF8uVG9rZW4gPSBmdW5jdGlvbih0eXBlLCBjb250ZW50LCBhbGlhcywgbWF0Y2hlZFN0ciwgZ3JlZWR5KSB7XG5cdHRoaXMudHlwZSA9IHR5cGU7XG5cdHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG5cdHRoaXMuYWxpYXMgPSBhbGlhcztcblx0Ly8gQ29weSBvZiB0aGUgZnVsbCBzdHJpbmcgdGhpcyB0b2tlbiB3YXMgY3JlYXRlZCBmcm9tXG5cdHRoaXMubGVuZ3RoID0gKG1hdGNoZWRTdHIgfHwgXCJcIikubGVuZ3RofDA7XG5cdHRoaXMuZ3JlZWR5ID0gISFncmVlZHk7XG59O1xuXG5Ub2tlbi5zdHJpbmdpZnkgPSBmdW5jdGlvbihvLCBsYW5ndWFnZSwgcGFyZW50KSB7XG5cdGlmICh0eXBlb2YgbyA9PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiBvO1xuXHR9XG5cblx0aWYgKF8udXRpbC50eXBlKG8pID09PSAnQXJyYXknKSB7XG5cdFx0cmV0dXJuIG8ubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBUb2tlbi5zdHJpbmdpZnkoZWxlbWVudCwgbGFuZ3VhZ2UsIG8pO1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0dmFyIGVudiA9IHtcblx0XHR0eXBlOiBvLnR5cGUsXG5cdFx0Y29udGVudDogVG9rZW4uc3RyaW5naWZ5KG8uY29udGVudCwgbGFuZ3VhZ2UsIHBhcmVudCksXG5cdFx0dGFnOiAnc3BhbicsXG5cdFx0Y2xhc3NlczogWyd0b2tlbicsIG8udHlwZV0sXG5cdFx0YXR0cmlidXRlczoge30sXG5cdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlLFxuXHRcdHBhcmVudDogcGFyZW50XG5cdH07XG5cblx0aWYgKG8uYWxpYXMpIHtcblx0XHR2YXIgYWxpYXNlcyA9IF8udXRpbC50eXBlKG8uYWxpYXMpID09PSAnQXJyYXknID8gby5hbGlhcyA6IFtvLmFsaWFzXTtcblx0XHRBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShlbnYuY2xhc3NlcywgYWxpYXNlcyk7XG5cdH1cblxuXHRfLmhvb2tzLnJ1bignd3JhcCcsIGVudik7XG5cblx0dmFyIGF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhlbnYuYXR0cmlidXRlcykubWFwKGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRyZXR1cm4gbmFtZSArICc9XCInICsgKGVudi5hdHRyaWJ1dGVzW25hbWVdIHx8ICcnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JykgKyAnXCInO1xuXHR9KS5qb2luKCcgJyk7XG5cblx0cmV0dXJuICc8JyArIGVudi50YWcgKyAnIGNsYXNzPVwiJyArIGVudi5jbGFzc2VzLmpvaW4oJyAnKSArICdcIicgKyAoYXR0cmlidXRlcyA/ICcgJyArIGF0dHJpYnV0ZXMgOiAnJykgKyAnPicgKyBlbnYuY29udGVudCArICc8LycgKyBlbnYudGFnICsgJz4nO1xuXG59O1xuXG5pZiAoIV9zZWxmLmRvY3VtZW50KSB7XG5cdGlmICghX3NlbGYuYWRkRXZlbnRMaXN0ZW5lcikge1xuXHRcdC8vIGluIE5vZGUuanNcblx0XHRyZXR1cm4gX3NlbGYuUHJpc207XG5cdH1cblxuXHRpZiAoIV8uZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0Ly8gSW4gd29ya2VyXG5cdFx0X3NlbGYuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdHZhciBtZXNzYWdlID0gSlNPTi5wYXJzZShldnQuZGF0YSksXG5cdFx0XHRcdGxhbmcgPSBtZXNzYWdlLmxhbmd1YWdlLFxuXHRcdFx0XHRjb2RlID0gbWVzc2FnZS5jb2RlLFxuXHRcdFx0XHRpbW1lZGlhdGVDbG9zZSA9IG1lc3NhZ2UuaW1tZWRpYXRlQ2xvc2U7XG5cblx0XHRcdF9zZWxmLnBvc3RNZXNzYWdlKF8uaGlnaGxpZ2h0KGNvZGUsIF8ubGFuZ3VhZ2VzW2xhbmddLCBsYW5nKSk7XG5cdFx0XHRpZiAoaW1tZWRpYXRlQ2xvc2UpIHtcblx0XHRcdFx0X3NlbGYuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9LCBmYWxzZSk7XG5cdH1cblxuXHRyZXR1cm4gX3NlbGYuUHJpc207XG59XG5cbi8vR2V0IGN1cnJlbnQgc2NyaXB0IGFuZCBoaWdobGlnaHRcbnZhciBzY3JpcHQgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0IHx8IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIikpLnBvcCgpO1xuXG5pZiAoc2NyaXB0KSB7XG5cdF8uZmlsZW5hbWUgPSBzY3JpcHQuc3JjO1xuXG5cdGlmICghXy5tYW51YWwgJiYgIXNjcmlwdC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWFudWFsJykpIHtcblx0XHRpZihkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIikge1xuXHRcdFx0aWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcblx0XHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShfLmhpZ2hsaWdodEFsbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dChfLmhpZ2hsaWdodEFsbCwgMTYpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBfLmhpZ2hsaWdodEFsbCk7XG5cdFx0fVxuXHR9XG59XG5cbnJldHVybiBfc2VsZi5QcmlzbTtcblxufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gUHJpc207XG59XG5cbi8vIGhhY2sgZm9yIGNvbXBvbmVudHMgdG8gd29yayBjb3JyZWN0bHkgaW4gbm9kZS5qc1xuaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG5cdGdsb2JhbC5QcmlzbSA9IFByaXNtO1xufVxuXG5cbi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgQmVnaW4gcHJpc20tbWFya3VwLmpzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cblByaXNtLmxhbmd1YWdlcy5tYXJrdXAgPSB7XG5cdCdjb21tZW50JzogLzwhLS1bXFxzXFxTXSo/LS0+Lyxcblx0J3Byb2xvZyc6IC88XFw/W1xcc1xcU10rP1xcPz4vLFxuXHQnZG9jdHlwZSc6IC88IURPQ1RZUEVbXFxzXFxTXSs/Pi9pLFxuXHQnY2RhdGEnOiAvPCFcXFtDREFUQVxcW1tcXHNcXFNdKj9dXT4vaSxcblx0J3RhZyc6IHtcblx0XHRwYXR0ZXJuOiAvPFxcLz8oPyFcXGQpW15cXHM+XFwvPSQ8JV0rKD86XFxzK1teXFxzPlxcLz1dKyg/Oj0oPzooXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMXxbXlxccydcIj49XSspKT8pKlxccypcXC8/Pi9pLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0YWcnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9ePFxcLz9bXlxccz5cXC9dKy9pLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjxcXC8/Lyxcblx0XHRcdFx0XHQnbmFtZXNwYWNlJzogL15bXlxccz5cXC86XSs6L1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC89KD86KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDF8W15cXHMnXCI+PV0rKS9pLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiBbXG5cdFx0XHRcdFx0XHQvXj0vLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlbXCInXS8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwvPz4vLFxuXHRcdFx0J2F0dHItbmFtZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL1teXFxzPlxcL10rLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J25hbWVzcGFjZSc6IC9eW15cXHM+XFwvOl0rOi9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fVxuXHR9LFxuXHQnZW50aXR5JzogLyYjP1tcXGRhLXpdezEsOH07L2lcbn07XG5cblByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddLmluc2lkZVsnZW50aXR5J10gPVxuXHRQcmlzbS5sYW5ndWFnZXMubWFya3VwWydlbnRpdHknXTtcblxuLy8gUGx1Z2luIHRvIG1ha2UgZW50aXR5IHRpdGxlIHNob3cgdGhlIHJlYWwgZW50aXR5LCBpZGVhIGJ5IFJvbWFuIEtvbWFyb3ZcblByaXNtLmhvb2tzLmFkZCgnd3JhcCcsIGZ1bmN0aW9uKGVudikge1xuXG5cdGlmIChlbnYudHlwZSA9PT0gJ2VudGl0eScpIHtcblx0XHRlbnYuYXR0cmlidXRlc1sndGl0bGUnXSA9IGVudi5jb250ZW50LnJlcGxhY2UoLyZhbXA7LywgJyYnKTtcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy54bWwgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwO1xuUHJpc20ubGFuZ3VhZ2VzLmh0bWwgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwO1xuUHJpc20ubGFuZ3VhZ2VzLm1hdGhtbCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5QcmlzbS5sYW5ndWFnZXMuc3ZnID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblxuXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgIEJlZ2luIHByaXNtLWNzcy5qc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG5QcmlzbS5sYW5ndWFnZXMuY3NzID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0J2F0cnVsZSc6IHtcblx0XHRwYXR0ZXJuOiAvQFtcXHctXSs/Lio/KD86O3woPz1cXHMqXFx7KSkvaSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdydWxlJzogL0BbXFx3LV0rL1xuXHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHR9XG5cdH0sXG5cdCd1cmwnOiAvdXJsXFwoKD86KFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDF8Lio/KVxcKS9pLFxuXHQnc2VsZWN0b3InOiAvW157fVxcc11bXnt9O10qPyg/PVxccypcXHspLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFwifCcpKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdwcm9wZXJ0eSc6IC9bLV9hLXpcXHhBMC1cXHVGRkZGXVstXFx3XFx4QTAtXFx1RkZGRl0qKD89XFxzKjopL2ksXG5cdCdpbXBvcnRhbnQnOiAvXFxCIWltcG9ydGFudFxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvWy1hLXowLTldKyg/PVxcKCkvaSxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9OzpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmNzc1snYXRydWxlJ10uaW5zaWRlLnJlc3QgPSBQcmlzbS5sYW5ndWFnZXMuY3NzO1xuXG5pZiAoUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cCkge1xuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtYXJrdXAnLCAndGFnJywge1xuXHRcdCdzdHlsZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oPHN0eWxlW1xcc1xcU10qPz4pW1xcc1xcU10qPyg/PTxcXC9zdHlsZT4pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuY3NzLFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1jc3MnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdpbnNpZGUnLCAnYXR0ci12YWx1ZScsIHtcblx0XHQnc3R5bGUtYXR0cic6IHtcblx0XHRcdHBhdHRlcm46IC9cXHMqc3R5bGU9KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDEvaSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFxzKnN0eWxlL2ksXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5pbnNpZGVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXHMqPVxccypbJ1wiXXxbJ1wiXVxccyokLyxcblx0XHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLy4rL2ksXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuY3NzXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLWNzcydcblx0XHR9XG5cdH0sIFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnKTtcbn1cblxuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICBCZWdpbiBwcmlzbS1jbGlrZS5qc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuXG5QcmlzbS5sYW5ndWFnZXMuY2xpa2UgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLygoPzpcXGIoPzpjbGFzc3xpbnRlcmZhY2V8ZXh0ZW5kc3xpbXBsZW1lbnRzfHRyYWl0fGluc3RhbmNlb2Z8bmV3KVxccyspfCg/OmNhdGNoXFxzK1xcKCkpW1xcdy5cXFxcXSsvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0cHVuY3R1YXRpb246IC9bLlxcXFxdL1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86aWZ8ZWxzZXx3aGlsZXxkb3xmb3J8cmV0dXJufGlufGluc3RhbmNlb2Z8ZnVuY3Rpb258bmV3fHRyeXx0aHJvd3xjYXRjaHxmaW5hbGx5fG51bGx8YnJlYWt8Y29udGludWUpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86dHJ1ZXxmYWxzZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvW2EtejAtOV9dKyg/PVxcKCkvaSxcblx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrXFwuP1xcZCp8XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcblx0J29wZXJhdG9yJzogLy0tP3xcXCtcXCs/fCE9Pz0/fDw9P3w+PT98PT0/PT98JiY/fFxcfFxcfD98XFw/fFxcKnxcXC98fnxcXF58JS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS9cbn07XG5cblxuLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICBCZWdpbiBwcmlzbS1qYXZhc2NyaXB0LmpzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG5cblByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdrZXl3b3JkJzogL1xcYig/OmFzfGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVidWdnZXJ8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZpbmFsbHl8Zm9yfGZyb218ZnVuY3Rpb258Z2V0fGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxuZXd8bnVsbHxvZnxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2V0fHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cnl8dHlwZW9mfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcblx0J251bWJlcic6IC9cXGIoPzowW3hYXVtcXGRBLUZhLWZdK3wwW2JCXVswMV0rfDBbb09dWzAtN10rfE5hTnxJbmZpbml0eSlcXGJ8KD86XFxiXFxkK1xcLj9cXGQqfFxcQlxcLlxcZCspKD86W0VlXVsrLV0/XFxkKyk/Lyxcblx0Ly8gQWxsb3cgZm9yIGFsbCBub24tQVNDSUkgY2hhcmFjdGVycyAoU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIwMDg0NDQpXG5cdCdmdW5jdGlvbic6IC9bXyRhLXpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qKD89XFxzKlxcKCkvaSxcblx0J29wZXJhdG9yJzogLy1bLT1dP3xcXCtbKz1dP3whPT89P3w8PD89P3w+Pj8+Pz0/fD0oPzo9PT98Pik/fCZbJj1dP3xcXHxbfD1dP3xcXCpcXCo/PT98XFwvPT98fnxcXF49P3wlPT98XFw/fFxcLnszfS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ2tleXdvcmQnLCB7XG5cdCdyZWdleCc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W14kXFx3XFx4QTAtXFx1RkZGRi5cIidcXF0pXFxzXSlcXHMqKVxcLyhcXFtbXlxcXVxcclxcbl0rXXxcXFxcLnxbXi9cXFxcXFxbXFxyXFxuXSkrXFwvW2dpbXl1XXswLDV9KD89XFxzKigkfFtcXHJcXG4sLjt9KVxcXV0pKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gVGhpcyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBrZXl3b3JkIGJlY2F1c2Ugd2UgdXNlIFwiZnVuY3Rpb25cIiBpbnNpZGUgdGhlIGxvb2stZm9yd2FyZFxuXHQnZnVuY3Rpb24tdmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogL1tfJGEtelxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSooPz1cXHMqPVxccyooPzpmdW5jdGlvblxcYnwoPzpcXChbXigpXSpcXCl8W18kYS16XFx4QTAtXFx1RkZGRl1bJFxcd1xceEEwLVxcdUZGRkZdKilcXHMqPT4pKS9pLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdjb25zdGFudCc6IC9cXGJbQS1aXVtBLVpcXGRfXSpcXGIvXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdzdHJpbmcnLCB7XG5cdCd0ZW1wbGF0ZS1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118XFwke1tefV0rfXxbXlxcXFxgXSkqYC8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCR7W159XSt9Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJHt8fSQvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IG51bGwgLy8gU2VlIGJlbG93XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH1cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRbJ3RlbXBsYXRlLXN0cmluZyddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQ7XG5cbmlmIChQcmlzbS5sYW5ndWFnZXMubWFya3VwKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmt1cCcsICd0YWcnLCB7XG5cdFx0J3NjcmlwdCc6IHtcblx0XHRcdHBhdHRlcm46IC8oPHNjcmlwdFtcXHNcXFNdKj8+KVtcXHNcXFNdKj8oPz08XFwvc2NyaXB0PikvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0LFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1qYXZhc2NyaXB0Jyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG59XG5cblByaXNtLmxhbmd1YWdlcy5qcyA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0O1xuXG5cbi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgQmVnaW4gcHJpc20tZmlsZS1oaWdobGlnaHQuanNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0aWYgKHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJyB8fCAhc2VsZi5QcmlzbSB8fCAhc2VsZi5kb2N1bWVudCB8fCAhZG9jdW1lbnQucXVlcnlTZWxlY3Rvcikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNlbGYuUHJpc20uZmlsZUhpZ2hsaWdodCA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0dmFyIEV4dGVuc2lvbnMgPSB7XG5cdFx0XHQnanMnOiAnamF2YXNjcmlwdCcsXG5cdFx0XHQncHknOiAncHl0aG9uJyxcblx0XHRcdCdyYic6ICdydWJ5Jyxcblx0XHRcdCdwczEnOiAncG93ZXJzaGVsbCcsXG5cdFx0XHQncHNtMSc6ICdwb3dlcnNoZWxsJyxcblx0XHRcdCdzaCc6ICdiYXNoJyxcblx0XHRcdCdiYXQnOiAnYmF0Y2gnLFxuXHRcdFx0J2gnOiAnYycsXG5cdFx0XHQndGV4JzogJ2xhdGV4J1xuXHRcdH07XG5cblx0XHRBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdwcmVbZGF0YS1zcmNdJykpLmZvckVhY2goZnVuY3Rpb24gKHByZSkge1xuXHRcdFx0dmFyIHNyYyA9IHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG5cblx0XHRcdHZhciBsYW5ndWFnZSwgcGFyZW50ID0gcHJlO1xuXHRcdFx0dmFyIGxhbmcgPSAvXFxibGFuZyg/OnVhZ2UpPy0oW1xcdy1dKylcXGIvaTtcblx0XHRcdHdoaWxlIChwYXJlbnQgJiYgIWxhbmcudGVzdChwYXJlbnQuY2xhc3NOYW1lKSkge1xuXHRcdFx0XHRwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRsYW5ndWFnZSA9IChwcmUuY2xhc3NOYW1lLm1hdGNoKGxhbmcpIHx8IFssICcnXSlbMV07XG5cdFx0XHR9XG5cblx0XHRcdGlmICghbGFuZ3VhZ2UpIHtcblx0XHRcdFx0dmFyIGV4dGVuc2lvbiA9IChzcmMubWF0Y2goL1xcLihcXHcrKSQvKSB8fCBbLCAnJ10pWzFdO1xuXHRcdFx0XHRsYW5ndWFnZSA9IEV4dGVuc2lvbnNbZXh0ZW5zaW9uXSB8fCBleHRlbnNpb247XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY29kZScpO1xuXHRcdFx0Y29kZS5jbGFzc05hbWUgPSAnbGFuZ3VhZ2UtJyArIGxhbmd1YWdlO1xuXG5cdFx0XHRwcmUudGV4dENvbnRlbnQgPSAnJztcblxuXHRcdFx0Y29kZS50ZXh0Q29udGVudCA9ICdMb2FkaW5n4oCmJztcblxuXHRcdFx0cHJlLmFwcGVuZENoaWxkKGNvZGUpO1xuXG5cdFx0XHR2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cblx0XHRcdHhoci5vcGVuKCdHRVQnLCBzcmMsIHRydWUpO1xuXG5cdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkge1xuXG5cdFx0XHRcdFx0aWYgKHhoci5zdGF0dXMgPCA0MDAgJiYgeGhyLnJlc3BvbnNlVGV4dCkge1xuXHRcdFx0XHRcdFx0Y29kZS50ZXh0Q29udGVudCA9IHhoci5yZXNwb25zZVRleHQ7XG5cblx0XHRcdFx0XHRcdFByaXNtLmhpZ2hsaWdodEVsZW1lbnQoY29kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHhoci5zdGF0dXMgPj0gNDAwKSB7XG5cdFx0XHRcdFx0XHRjb2RlLnRleHRDb250ZW50ID0gJ+KcliBFcnJvciAnICsgeGhyLnN0YXR1cyArICcgd2hpbGUgZmV0Y2hpbmcgZmlsZTogJyArIHhoci5zdGF0dXNUZXh0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSAn4pyWIEVycm9yOiBGaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIGVtcHR5Jztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdHhoci5zZW5kKG51bGwpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKFByaXNtLnBsdWdpbnMudG9vbGJhcikge1xuXHRcdFx0UHJpc20ucGx1Z2lucy50b29sYmFyLnJlZ2lzdGVyQnV0dG9uKCdkb3dubG9hZC1maWxlJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFx0XHR2YXIgcHJlID0gZW52LmVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRcdFx0aWYgKCFwcmUgfHwgIS9wcmUvaS50ZXN0KHByZS5ub2RlTmFtZSkgfHwgIXByZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtc3JjJykgfHwgIXByZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtZG93bmxvYWQtbGluaycpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBzcmMgPSBwcmUuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpO1xuXHRcdFx0XHR2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdFx0YS50ZXh0Q29udGVudCA9IHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZG93bmxvYWQtbGluay1sYWJlbCcpIHx8ICdEb3dubG9hZCc7XG5cdFx0XHRcdGEuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsICcnKTtcblx0XHRcdFx0YS5ocmVmID0gc3JjO1xuXHRcdFx0XHRyZXR1cm4gYTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHR9O1xuXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBzZWxmLlByaXNtLmZpbGVIaWdobGlnaHQpO1xuXG59KSgpOyIsInNlbGYuYWRkRXZlbnRMaXN0ZW5lciA9IHNlbGYub2xkQWRkRXZlbnRMaXN0ZW5lcjsiLCIvLyBIaWRlIGFkZEV2ZW50TGlzdGVuZXIgZnJvbSBwcmlzbSAtIEkgd2FudCB0byBhZGQgbXkgb3duIGxpc3RlbmVyXG5pbXBvcnQgJy4vcHJpc20taGFjay1zdGFydCc7XG5pbXBvcnQgUHJpc20gZnJvbSAncHJpc21qcyc7XG5pbXBvcnQgJy4vcHJpc20taGFjay1lbmQnO1xuXG5zZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIHRyeSB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBpZDogZXZlbnQuZGF0YS5pZCxcbiAgICAgIHJlc3VsdDogUHJpc20uaGlnaGxpZ2h0KGV2ZW50LmRhdGEuZGF0YSwgUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cClcbiAgICB9KTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGlkOiBldmVudC5kYXRhLmlkLFxuICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2VcbiAgICB9KTtcbiAgfVxufTsiXSwibmFtZXMiOlsic2VsZiIsIm9sZEFkZEV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwid2luZG93IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJQcmlzbSIsIm1hbnVhbCIsImRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlciIsInV0aWwiLCJlbmNvZGUiLCJ0eXBlIiwiY29udGVudCIsImFsaWFzIiwibWFwIiwicmVwbGFjZSIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsIm1hdGNoIiwib2JqSWQiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiY2xvbmUiLCJoYXNPd25Qcm9wZXJ0eSIsImZvckVhY2giLCJsYW5ndWFnZXMiLCJleHRlbmQiLCJpbnNlcnRCZWZvcmUiLCJsZW5ndGgiLCJhcmd1bWVudHMiLCJERlMiLCJwbHVnaW5zIiwiaGlnaGxpZ2h0QWxsIiwiaGlnaGxpZ2h0QWxsVW5kZXIiLCJkb2N1bWVudCIsImNhbGxiYWNrIiwic2VsZWN0b3IiLCJob29rcyIsInJ1biIsImVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsImhpZ2hsaWdodEVsZW1lbnQiLCJ0ZXN0IiwiY2xhc3NOYW1lIiwicGFyZW50Tm9kZSIsInRvTG93ZXJDYXNlIiwibm9kZU5hbWUiLCJ0ZXh0Q29udGVudCIsImVsZW1lbnQiLCJsYW5ndWFnZSIsImdyYW1tYXIiLCJjb2RlIiwiV29ya2VyIiwiZmlsZW5hbWUiLCJvbm1lc3NhZ2UiLCJoaWdobGlnaHRlZENvZGUiLCJkYXRhIiwiaW5uZXJIVE1MIiwicG9zdE1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwiaW1tZWRpYXRlQ2xvc2UiLCJoaWdobGlnaHQiLCJ0b2tlbnMiLCJ0b2tlbml6ZSIsIm1hdGNoR3JhbW1hciIsIlRva2VuIiwiaW5zaWRlIiwibG9va2JlaGluZCIsImdyZWVkeSIsInBhdHRlcm4iLCJnbG9iYWwiLCJSZWdFeHAiLCJzb3VyY2UiLCJsYXN0SW5kZXgiLCJleGVjIiwiaW5kZXgiLCJzbGljZSIsInB1c2giLCJBcnJheSIsInNwbGljZSIsImFwcGx5IiwicmVzdCIsImFsbCIsImFkZCIsImpvaW4iLCJ0YWciLCJjbGFzc2VzIiwiYXR0cmlidXRlcyIsInBhcmVudCIsImtleXMiLCJwYXJzZSIsImNsb3NlIiwiY3VycmVudFNjcmlwdCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwicG9wIiwic3JjIiwiaGFzQXR0cmlidXRlIiwicmVhZHlTdGF0ZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFRpbWVvdXQiLCJleHBvcnRzIiwibWFya3VwIiwieG1sIiwiaHRtbCIsIm1hdGhtbCIsInN2ZyIsImNzcyIsImNsaWtlIiwicHVuY3R1YXRpb24iLCJqYXZhc2NyaXB0IiwianMiLCJxdWVyeVNlbGVjdG9yIiwiZmlsZUhpZ2hsaWdodCIsImdldEF0dHJpYnV0ZSIsImNyZWF0ZUVsZW1lbnQiLCJhcHBlbmRDaGlsZCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInN0YXR1cyIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJzZW5kIiwidG9vbGJhciIsInJlZ2lzdGVyQnV0dG9uIiwic2V0QXR0cmlidXRlIiwiaHJlZiIsImlkIiwicmVzdWx0IiwiZXJyb3IiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoieUJBQUFBLEtBQUtDLG1CQUFMLENBQTJCRCxLQUFLRSxpQkFDaENGLEtBQUtFLGdCQUFMLENBQXdCLCtMQ0lwQixHQUEyQixXQUFsQixRQUFPQyxPQUFSLENBR29CLFdBQTdCLFFBQU9DLGtCQUFQLEVBQTRDSixlQUFnQkksa0JBQTdELENBQ0VKLElBREYsR0FIVSxDQUNURyxPQWFDLEVBQVMsVUFBVSxJQUduQixHQUFPLDZCQUhZLENBSW5CLEVBQVcsQ0FKUSxDQU1uQixFQUFJLEVBQU1FLEtBQU4sQ0FBYyxDQUNyQkMsT0FBUSxFQUFNRCxLQUFOLEVBQWUsRUFBTUEsS0FBTixDQUFZQyxN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"} \ No newline at end of file diff --git a/js/svgo-worker.js b/js/svgo-worker.js new file mode 100644 index 0000000..fdd4f3e --- /dev/null +++ b/js/svgo-worker.js @@ -0,0 +1,2 @@ +(function(){'use strict';function e(e,t){return t={exports:{}},e(t,t.exports),t.exports}function t(){}function n(){n.init.call(this)}function r(e){return void 0===e._maxListeners?n.defaultMaxListeners:e._maxListeners}function a(e,t,n){if(t)e.call(n);else for(var r=e.length,a=f(e,r),o=0;oi)){l.warned=!0;var d=new Error('Possible EventEmitter memory leak detected. '+l.length+' '+n+' listeners added. Use emitter.setMaxListeners() to increase limit');d.name='MaxListenersExceededWarning',d.emitter=e,d.type=n,d.count=l.length,p(d)}return e}function p(t){'function'==typeof console.warn?console.warn(t):console.log(t)}function u(e,t,n){function r(){e.removeListener(t,r),a||(a=!0,n.apply(e,arguments))}var a=!1;return r.listener=n,r}function m(e){var t=this._events;if(t){var n=t[e];if('function'==typeof n)return 1;if(n)return n.length}return 0}function h(e,t){for(var r=t,a=r+1,o=e.length;a=a)return e;switch(e){case'%s':return r[n++]+'';case'%d':return+r[n++];case'%j':try{return JSON.stringify(r[n++])}catch(e){return'[Circular]'}default:return e;}}),i=r[n];nr)return K(t)?e.stylize(RegExp.prototype.toString.call(t),'regexp'):e.stylize('[Object]','special');e.seen.push(t);var n;return n=c?M(e,t,r,s,i):i.map(function(n){return G(e,t,r,s,n,c)}),e.seen.pop(),U(n,d,p)}function z(e,t){if($(t))return e.stylize('undefined','undefined');if(Y(t)){var n='\''+JSON.stringify(t).replace(/^"|"$/g,'').replace(/'/g,'\\\'').replace(/\\"/g,'"')+'\'';return e.stylize(n,'string')}return H(t)?e.stylize(''+t,'number'):W(t)?e.stylize(''+t,'boolean'):j(t)?e.stylize('null','null'):void 0}function _(e){return'['+Error.prototype.toString.call(e)+']'}function M(e,t,n,r,a){for(var o=[],s=0,i=t.length;se.seen.indexOf(l.value)?(s=j(n)?I(e,l.value,null):I(e,l.value,n-1),-1>16,s[l++]=255&o>>8,s[l++]=255&o;return 2===i?(o=uc[e.charCodeAt(n)]<<2|uc[e.charCodeAt(n+1)]>>4,s[l++]=255&o):1===i&&(o=uc[e.charCodeAt(n)]<<10|uc[e.charCodeAt(n+1)]<<4|uc[e.charCodeAt(n+2)]>>2,s[l++]=255&o>>8,s[l++]=255&o),s}function se(e){return pc[63&e>>18]+pc[63&e>>12]+pc[63&e>>6]+pc[63&e]}function de(e,t,n){for(var r=[],a=t,o;ai?i:s+o));return 1==n?(l=e[t-1],r+=pc[l>>2],r+=pc[63&l<<4],r+='=='):2==n&&(l=(e[t-2]<<8)+e[t-1],r+=pc[l>>10],r+=pc[63&l>>4],r+=pc[63&l<<2],r+='='),a.push(r),a.join('')}function pe(t,n,r,a,o){var l=8*o-a-1,c=(1<>1,u=-7,g=r?o-1:0,i=r?-1:1,d=t[n+g],s,e;for(g+=i,s=d&(1<<-u)-1,d>>=-u,u+=l;0>=-u,u+=a;0>1,h=23===o?5.960464477539063e-8-6.617444900424222e-24:0,f=a?0:l-1,i=a?1:-1,d=0>n||0===n&&0>1/n?1:0,s,y,m;for(n=Vd(n),isNaN(n)||n===Infinity?(y=isNaN(n)?1:0,s=u):(s=Fd(Math.log(n)/Math.LN2),1>n*(m=Wd(2,-s))&&(s--,m*=2),n+=1<=s+g?h/m:h*Wd(2,1-g),2<=n*m&&(s++,m/=2),s+g>=u?(y=0,s=u):1<=s+g?(y=(n*m-1)*Wd(2,o),s+=g):(y=n*Wd(2,g-1)*Wd(2,o),s=0));8<=o;t[r+f]=255&y,f+=i,y/=256,o-=8);for(s=s<e)throw new RangeError('"size" argument must not be negative')}function xe(e,t,n,r){return be(t),0>=t?he(e,t):void 0===n?he(e,t):'string'==typeof r?he(e,t).fill(n,r):he(e,t).fill(n)}function ke(e,t){if(be(t),e=he(e,0>t?0:0|Ce(t)),!fe.TYPED_ARRAY_SUPPORT)for(var n=0;nt.length?0:0|Ce(t.length);e=he(e,n);for(var r=0;rn||t.byteLength=me())throw new RangeError('Attempt to allocate Buffer larger than maximum size: 0x'+me().toString(16)+' bytes');return 0|e}function Ee(e){return!!(null!=e&&e._isBuffer)}function Ae(e,t){if(Ee(e))return e.length;if('undefined'!=typeof ArrayBuffer&&'function'==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;'string'!=typeof e&&(e=''+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case'ascii':case'latin1':case'binary':return n;case'utf8':case'utf-8':case void 0:return nt(e).length;case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return 2*n;case'hex':return n>>>1;case'base64':return ot(e).length;default:if(r)return nt(e).length;t=(''+t).toLowerCase(),r=!0;}}function Oe(e,t,n){var r=!1;if((void 0===t||0>t)&&(t=0),t>this.length)return'';if((void 0===n||n>this.length)&&(n=this.length),0>=n)return'';if(n>>>=0,t>>>=0,n<=t)return'';for(e||(e='utf8');;)switch(e){case'hex':return Fe(this,t,n);case'utf8':case'utf-8':return Ge(this,t,n);case'ascii':return Ve(this,t,n);case'latin1':case'binary':return We(this,t,n);case'base64':return Me(this,t,n);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return je(this,t,n);default:if(r)throw new TypeError('Unknown encoding: '+e);e=(e+'').toLowerCase(),r=!0;}}function Pe(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function Le(e,t,n,r,a){if(0===e.length)return-1;if('string'==typeof n?(r=n,n=0):2147483647n&&(n=-2147483648),n=+n,isNaN(n)&&(n=a?0:e.length-1),0>n&&(n=e.length+n),n>=e.length){if(a)return-1;n=e.length-1}else if(0>n)if(a)n=0;else return-1;if('string'==typeof t&&(t=fe.from(t,r)),Ee(t))return 0===t.length?-1:qe(e,t,n,r,a);if('number'==typeof t)return t&=255,fe.TYPED_ARRAY_SUPPORT&&'function'==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):qe(e,[t],n,r,a);throw new TypeError('val must be string, number or Buffer')}function qe(e,t,n,r,a){function o(e,t){return 1==s?e[t]:e.readUInt16BE(t*s)}var s=1,l=e.length,d=t.length;if(void 0!==r&&(r=(r+'').toLowerCase(),'ucs2'===r||'ucs-2'===r||'utf16le'===r||'utf-16le'===r)){if(2>e.length||2>t.length)return-1;s=2,l/=2,d/=2,n/=2}var c;if(a){var i=-1;for(c=n;cl&&(n=l-d),c=n;0<=c;c--){for(var p=!0,u=0;ua&&(r=a)):r=a;var o=t.length;if(0!=o%2)throw new TypeError('Invalid hex string');r>o/2&&(r=o/2);for(var s=0,i;so&&(i=o):2==s?(l=e[a+1],128==(192&l)&&(p=(31&o)<<6|63&l,127p||57343p&&(i=p))):void 0}null===i?(i=65533,s=1):65535>>10),i=56320|1023&i),r.push(i),a+=s}return Ue(r)}function Ue(e){var t=e.length;if(t<=yc)return Gd.apply(String,e);for(var n='',r=0;rt)&&(t=0),(!n||0>n||n>r)&&(n=r);for(var a='',o=t;oe)throw new RangeError('offset is not uint');if(e+t>n)throw new RangeError('Trying to access beyond buffer length')}function Ye(e,t,n,r,a,o){if(!Ee(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>a||te.length)throw new RangeError('Index out of range')}function $e(e,t,n,r){0>t&&(t=65535+t+1);for(var a=0,o=Ud(e.length-n,2);a>>8*(r?a:1-a)}function Ke(e,t,n,r){0>t&&(t=4294967295+t+1);for(var a=0,o=Ud(e.length-n,4);a>>8*(r?a:3-a)}function Xe(e,t,n,r){if(n+r>e.length)throw new RangeError('Index out of range');if(0>n)throw new RangeError('Index out of range')}function Qe(e,t,n,r,a){return a||Xe(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),ue(e,t,n,r,23,4),n+4}function Ze(e,t,n,r,a){return a||Xe(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),ue(e,t,n,r,52,8),n+8}function Je(e){if(e=et(e).replace(bc,''),2>e.length)return'';for(;0!=e.length%4;)e+='=';return e}function et(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,'')}function tt(e){return 16>e?'0'+e.toString(16):e.toString(16)}function nt(e,t){t=t||Infinity;for(var n=e.length,r=null,a=[],o=0,i;oi){if(!r){if(56319i){-1<(t-=3)&&a.push(239,191,189),r=i;continue}i=(r-55296<<10|i-56320)+65536}else r&&-1<(t-=3)&&a.push(239,191,189);if(r=null,128>i){if(0>(t-=1))break;a.push(i)}else if(2048>i){if(0>(t-=2))break;a.push(192|i>>6,128|63&i)}else if(65536>i){if(0>(t-=3))break;a.push(224|i>>12,128|63&i>>6,128|63&i)}else if(1114112>i){if(0>(t-=4))break;a.push(240|i>>18,128|63&i>>12,128|63&i>>6,128|63&i)}else throw new Error('Invalid code point')}return a}function rt(e){for(var t=[],n=0;n(t-=2));++r)a=e.charCodeAt(r),o=a>>8,i=a%256,n.push(i),n.push(o);return n}function ot(e){return ie(Je(e))}function st(e,t,n,r){for(var a=0;a=t.length||a>=e.length);++a)t[a+n]=e[a];return a}function dt(e){return e!==e}function ct(e){return!!e.constructor&&'function'==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function pt(e){return'function'==typeof e.readFloatLE&&'function'==typeof e.slice&&ct(e.slice(0,0))}function ut(){this.head=null,this.tail=null,this.length=0}function mt(e){if(e&&!xc(e))throw new Error('Unknown encoding: '+e)}function ht(e){switch(this.encoding=(e||'utf8').toLowerCase().replace(/[-_]/,''),mt(e),this.encoding){case'utf8':this.surrogateSize=3;break;case'ucs2':case'utf16le':this.surrogateSize=2,this.detectIncompleteChar=yt;break;case'base64':this.surrogateSize=3,this.detectIncompleteChar=bt;break;default:return void(this.write=ft);}this.charBuffer=new fe(6),this.charReceived=0,this.charLength=0}function ft(e){return e.toString(this.encoding)}function yt(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function bt(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}function xt(e,t,n){return'function'==typeof e.prependListener?e.prependListener(t,n):void(e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n))}function kt(e,t){return e.listeners(t).length}function St(e,t){e=e||{},this.objectMode=!!e.objectMode,t instanceof hn&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var n=e.highWaterMark,r=this.objectMode?16:16384;this.highWaterMark=n||0===n?n:r,this.highWaterMark=~~this.highWaterMark,this.buffer=new ut,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=e.defaultEncoding||'utf8',this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(this.decoder=new ht(e.encoding),this.encoding=e.encoding)}function wt(e){return this instanceof wt?void(this._readableState=new St(e,this),this.readable=!0,e&&'function'==typeof e.read&&(this._read=e.read),n.call(this)):new wt(e)}function vt(t,n,r,a,o){var i=At(n,r);if(i)t.emit('error',i);else if(null===r)n.reading=!1,Ot(t,n);else if(!(n.objectMode||r&&0=vc?e=vc:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function Et(e,t){return 0>=e||0===t.length&&t.ended?0:t.objectMode?1:e===e?(e>t.highWaterMark&&(t.highWaterMark=Ct(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0)):t.flowing&&t.length?t.buffer.head.data.length:t.length}function At(e,t){var n=null;return Buffer.isBuffer(t)||'string'==typeof t||null===t||void 0===t||e.objectMode||(n=new TypeError('Invalid non-string/buffer chunk')),n}function Ot(e,t){if(!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,Pt(e)}}function Pt(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(wc('emitReadable',t.flowing),t.emittedReadable=!0,t.sync?C(qt,e):qt(e))}function qt(e){wc('emit readable'),e.emit('readable'),_t(e)}function Rt(e,t){t.readingMore||(t.readingMore=!0,C(Dt,e,t))}function Dt(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(''):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=Ut(e,t.buffer,t.decoder),r}function Ut(e,t,n){var r;return eo.length?o.length:e;if(a+=i===o.length?o:o.slice(0,e),e-=i,0===e){i===o.length?(++r,t.head=n.next?n.next:t.tail=null):(t.head=n,n.data=o.slice(i));break}++r}return t.length-=r,a}function Wt(e,t){var n=Buffer.allocUnsafe(e),r=t.head,a=1;for(r.data.copy(n),e-=r.data.length;r=r.next;){var o=r.data,i=e>o.length?o.length:e;if(o.copy(n,n.length-e,0,i),e-=i,0===e){i===o.length?(++a,t.head=r.next?r.next:t.tail=null):(t.head=r,r.data=o.slice(i));break}++a}return t.length-=a,n}function Ft(e){var t=e._readableState;if(0=--r))&&(s=t[o].children,!(n&&s&&0=r)));o++);return a}function Nn(e,t){for(var n=null,r=0,a=t.length;rr?Gd(r+65536):Gd(55296|r>>10,56320|1023&r)}function _n(e){return e.replace(oJ,zn)}function Mn(e){return' '===e||'\n'===e||'\t'===e||'\f'===e||'\r'===e}function Gn(e,t,n){function r(){var e=t.match(aJ)[0];return t=t.substr(e.length),_n(e)}function a(e){for(;Mn(t.charAt(e));)e++;t=t.substr(e)}var o=[],i=!1,s,l,d,c;for(a(0);''!==t;)if(l=t.charAt(0),Mn(l))i=!0,a(1);else if(l in lJ)o.push({type:lJ[l]}),i=!1,a(1);else if(','===l){if(0===o.length)throw new SyntaxError('empty sub-selector');e.push(o),o=[],i=!1,a(1)}else if(i&&(0>=1);else if(t===TJ.pseudo)if(!e.data)t=3;else if('has'===e.name||'contains'===e.name)t=0;else if('matches'===e.name||'not'===e.name){t=0;for(var n=0;nt&&(t=r)}1yne&&(c=o-xne+3,o=xne-2);for(var p=s;p<=l;p++)0<=p&&pc?'\u2026':'')+r[p].substr(c,yne-2)+(r[p].length>c+yne-1?'\u2026':''));return[n(s,a),Array(o+d+2).join('-')+'^',n(a,l)].filter(Boolean).join('\n')}function dr(e){return 48<=e&&57>=e||65<=e&&70>=e||97<=e&&102>=e}function cr(e){return 48<=e&&57>=e}function ur(e,t,n){return n===Yne||n===$ne||n===Kne?n===Kne&&t+1t||n>e.length)return!1;for(var a=t;a=o&&(o|=32),o!==i)return!1}return!0}function gr(e,t){for(;tn||57n&&t+nm?tre[m]:hre;switch(o[i]=r,g){case gre:l=ire(t,l+1);break;case xre:switch(m){case c:for(u=p&Fre,p=o[u],c=p>>jre,o[i]=u,o[u++]=i;u>jre),s===Nre&&(i--,g=wre);}a[i++]=g<';break;case'Property':r='<\''+e.name+'\'>';break;case'Combinator':case'Slash':case'Percent':case'String':case'Comma':r=e.value;break;default:throw new Error('Unknown node type `'+e.type+'`');}return'function'==typeof n&&(r=n(r,e)),r}function Tr(e,t){var n=e&&e.loc&&e.loc[t];return n?{offset:n.offset,line:n.line,column:n.column}:null}function Cr(e,t){return 2<=e.length-t&&e.charCodeAt(t)===eae&&e.charCodeAt(t+1)===eae}function Er(e,t){if(e.charCodeAt(t)===eae){var n=e.indexOf('-',t+2);if(-1!==n)return e.substring(t,n+1)}return''}function Ar(e){if('Function'!==e.data.type)return!1;var t=tae.keyword(e.data.name);return'calc'===t.name&&(''===t.vendor||'-moz-'===t.vendor||'-webkit-'===t.vendor)}function Lr(e){return function(t){return t.data.type===e}}function qr(e){return function(t){return Ar(t)||'Dimension'===t.data.type&&e.hasOwnProperty(t.data.unit.toLowerCase())}}function Rr(e){return function(t){return Ar(t)||'Dimension'===t.data.type&&e.hasOwnProperty(t.data.unit.toLowerCase())||'Number'===t.data.type&&0===+t.data.value}}function Dr(e){for(var t=e.pos+1,n;tn||57t&&1===Bae[t])return Vr(e);switch(t){case Tae:return jr(e);case Sae:return e.nextCharCode()===gae?Gr(e):Ur(e);case Aae:return{type:'Combinator',value:e.substringToPos(e.nextCharCode()===Aae?e.pos+2:e.pos+1)};case mae:return e.pos++,e.eat(mae),{type:'Combinator',value:'&&'};case xae:return e.pos++,{type:'Comma',value:','};case kae:return e.pos++,{type:'Slash',value:'/'};case uae:return e.pos++,{type:'Percent',value:'%'};case hae:e.pos++;var n=Fr(e);return e.eat(fae),{type:'Parentheses',children:n};case gae:return{type:'String',value:Ir(e)};case dae:case oae:case iae:case lae:case sae:return{type:'Spaces',value:Dr(e)};}}function Yr(e,t,n){throw new aae(n||'Unexpected input',e.str,t)}function $r(e){var t=new Iae(e),n=Fr(t);return t.pos!==e.length&&Yr(t,t.pos),1===n.terms.length&&'Group'===n.terms[0].type&&(n=n.terms[0]),n}function Kr(e){for(;null!==e&&('WhiteSpace'===e.data.type||'Comment'===e.data.type);)e=e.next;return e}function Xr(e,t){var n=t.type||t.syntax.type;'Group'===n?e.push.apply(e,t.match):e.push(t)}function Qr(){return{type:this.syntax.type,name:this.syntax.name,match:this.match,node:this.node}}function Zr(e,t,n,r){return e?{badNode:e,lastNode:null,next:null,match:null}:{badNode:null,lastNode:t,next:n,match:r}}function Jr(e,t,n){var r=[],a=t.multiplier||Mae,o=a.min,s=0===a.max?Infinity:a.max,l=0,d=null,c=null,p,u,m;mismatch:for(;l');else if(Array.isArray(i))s.push('List');else throw new Error('Wrong value `'+i+'` in `'+e+'.'+o+'` structure definition');a[o]=s.join(' | ')}return{docs:a,check:sa(e,r)}}function da(e,t){var n={};for(var r in e)e[r].syntax&&(n[r]=t?e[r].syntax:Kre(e[r].syntax));return n}function ca(e){return e&&e.data}function pa(e){var t=!1;return this.syntax.walk(e,function(e){'Function'===e.type&&'var'===e.name.toLowerCase()&&(t=!0)}),t}function ua(e){return'Identifier'===e.type&&/^\\[09]/.test(e.name)}function ma(e){for(;null!==e;){if('WhiteSpace'!==e.data.type&&'Comment'!==e.data.type&&!ua(e.data))return!1;e=e.next}return!0}function ga(e,t){return{matched:e,error:t,getTrace:Uae.getTrace,isType:Uae.isType,isProperty:Uae.isProperty,isKeyword:Uae.isKeyword}}function ha(e,t,n){var r;return n&&'Value'===n.type?pa.call(e,n)?ga(null,new Error('Matching for a value with var() is not supported')):(r=Gae(e,e.valueCommonSyntax,n.children.head),!r.match&&(r=t.match(n.children.head),!r.match))?ga(null,new jae('Mismatch',e,t.syntax,n,r.badNode||ca(r.next)||n)):('ASTNode'===r.match.type?r.match={syntax:{type:t.type,name:t.name},match:[r.match]}:'Group'===r.match.syntax.type&&(r.match.syntax={type:t.type,name:t.name}),r.next&&!ma(r.next)?ga(null,new jae('Uncomplete match',e,t.syntax,n,r.badNode||ca(r.next)||n)):ga(r.match,null)):ga(null,new Error('Not a Value node'))}function fa(e){return function(){return this[e]()}}function ya(e){var t={context:{},scope:{},atrule:{},pseudo:{}};if(e.parseContext)for(var n in e.parseContext)switch(typeof e.parseContext[n]){case'function':t.context[n]=e.parseContext[n];break;case'string':t.context[n]=fa(e.parseContext[n]);}if(e.scope)for(var n in e.scope)t.scope[n]=e.scope[n];if(e.atrule)for(var n in e.atrule){var r=e.atrule[n];r.parse&&(t.atrule[n]=r.parse)}if(e.pseudo)for(var n in e.pseudo){var a=e.pseudo[n];a.parse&&(t.pseudo[n]=a.parse)}if(e.node)for(var n in e.node)t[n]=e.node[n].parse;return t}function ba(e){return 0>e?(-e<<1)+1:(e<<1)+0}function xa(e){var t=e>>1;return 1==(1&e)?-t:t}function ka(){this._array=[],this._set=moe?new Map:Object.create(null)}function Sa(e,t){var n=e.generatedLine,r=t.generatedLine,a=e.generatedColumn,o=t.generatedColumn;return r>n||r==n&&o>=a||0>=poe.compareByGeneratedPositionsInflated(e,t)}function wa(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}function va(e){e||(e={}),this._file=poe.getArg(e,'file',null),this._sourceRoot=poe.getArg(e,'sourceRoot',null),this._skipValidation=poe.getArg(e,'skipValidation',!1),this._sources=new hoe,this._names=new hoe,this._mappings=new foe,this._sourcesContents=null}function Ta(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function Ca(e,t){return zd(e+Math.random()*(t-e))}function Ea(e,t,n,a){if(n=t(e[s],i)&&(o+=1,Ta(e,o,s));Ta(e,o+1,s);var l=o+1;Ea(e,t,n,l-1),Ea(e,t,l+1,a)}}function Aa(e){var t=e;return'string'==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,''))),null==t.sections?new Oa(t):new La(t)}function Oa(e){var t=e;'string'==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,'')));var n=poe.getArg(t,'version'),r=poe.getArg(t,'sources'),a=poe.getArg(t,'names',[]),o=poe.getArg(t,'sourceRoot',null),i=poe.getArg(t,'sourcesContent',null),s=poe.getArg(t,'mappings'),l=poe.getArg(t,'file',null);if(n!=this._version)throw new Error('Unsupported version: '+n);r=r.map(String).map(poe.normalize).map(function(e){return o&&poe.isAbsolute(o)&&poe.isAbsolute(e)?poe.relative(o,e):e}),this._names=xoe.fromArray(a.map(String),!0),this._sources=xoe.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=i,this._mappings=s,this.file=l}function Pa(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function La(e){var t=e;'string'==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,'')));var n=poe.getArg(t,'version'),r=poe.getArg(t,'sections');if(n!=this._version)throw new Error('Unsupported version: '+n);this._sources=new xoe,this._names=new xoe;var a={line:-1,column:0};this._sections=r.map(function(e){if(e.url)throw new Error('Support for url field in sections not implemented.');var t=poe.getArg(e,'offset'),n=poe.getArg(t,'line'),r=poe.getArg(t,'column');if(n').replace(/ /g,' ').replace(/&/g,'&')}function Xa(e,t){for(var n in t)n in e?t[n].syntax?e[n].syntax=t[n].syntax:delete e[n]:t[n].syntax&&(e[n]=t[n])}function Qa(e,t){var n=e.tokenStart;for((e.source.charCodeAt(n)===yse||e.source.charCodeAt(n)===bse)&&(t&&e.error(),n++);nn&&!e.eof&&e.tokenType===dce;e.next())n++}function xo(e){for(var t=0,n;(n=e.lookupType(t))&&(n===bce||n===xce);t++);if(e.lookupValue(t,'alpha(')||e.lookupValue(t,'chroma(')||e.lookupValue(t,'dropshadow(')){if(e.lookupType(t)!==kce)return!1;}else if(!1===e.lookupValue(t,'progid')||e.lookupType(t+1)!==Sce)return!1;return!0}function ko(){return new hne().appendData(this.Raw(this.scanner.currentToken,0,0,!1,!1))}function So(){var e=0;return this.scanner.skipSC(),this.scanner.tokenType===wpe?e=1:this.scanner.tokenType===Cpe&&this.scanner.lookupType(1)===wpe&&(e=2),0!=e&&this.scanner.lookupNonWSType(e)===Epe?new hne().appendData(this.Declaration()):wo.call(this)}function wo(){var e=new hne,t=null,n;this.scanner.skipSC();scan:for(;!this.scanner.eof;){switch(this.scanner.tokenType){case kpe:t=this.WhiteSpace();continue;case Spe:this.scanner.next();continue;case vpe:n=this.Function(ko,this.scope.AtrulePrelude);break;case wpe:n=this.Identifier();break;case Tpe:n=this.Parentheses(So,this.scope.AtrulePrelude);break;default:break scan;}null!==t&&(e.appendData(t),t=null),e.appendData(n)}return e}function vo(e,t){for(var n=0;4>n;n+=1){if(e[n]t[n])return 1}return 0}function To(e,t){var n=Dpe(e),r=Dpe(t);return vo(n,r)}function Co(e,t){return To(e.item.data,t.item.data)}function Eo(){if('undefined'==typeof jpe){var e=new ArrayBuffer(2),t=new Uint8Array(e),n=new Uint16Array(e);if(t[0]=1,t[1]=2,258===n[0])jpe='BE';else if(513===n[0])jpe='LE';else throw new Error('unable to figure out endianess')}return jpe}function Ao(){return'undefined'==typeof global.location?'':global.location.hostname}function Oo(){return[]}function Po(){return 0}function Lo(){return Id}function qo(){return Id}function Ro(){return[]}function Do(){return'Browser'}function No(){return'undefined'==typeof global.navigator?'':global.navigator.appVersion}function Bo(){}function Io(){}function zo(){return'/tmp'}function _o(e){this.config=e?Object.assign({},Kpe,e):Kpe;var t=this.config.indent;'number'!=typeof t||isNaN(t)?'string'!=typeof t&&(this.config.indent=' '):this.config.indent=0>t?'\t':' '.repeat(t),this.config.pretty&&(this.config.doctypeEnd+=Ype,this.config.procInstEnd+=Ype,this.config.commentEnd+=Ype,this.config.cdataEnd+=Ype,this.config.tagShortEnd+=Ype,this.config.tagOpenEnd+=Ype,this.config.tagCloseEnd+=Ype,this.config.textEnd+=Ype),this.indentLevel=0,this.textContext=null}function Mo(e,t,n,r){function a(e){return e.content=e.content.filter(function(e){r&&e.content&&a(e);for(var o=!0,s=0,i;o&&slue&&(c=o-due+3,o=due-2);for(var p=s;p<=l;p++)0<=p&&pc?'\u2026':'')+r[p].substr(c,lue-2)+(r[p].length>c+lue-1?'\u2026':''));return[n(s,a),Array(o+d+2).join('-')+'^',n(a,l)].filter(Boolean).join('\n')}function jo(e){return 48<=e&&57>=e||65<=e&&70>=e||97<=e&&102>=e}function Ho(e){return 48<=e&&57>=e}function Yo(e){return e===Vue||e===_ue||$o(e)}function $o(e){return e===Uue||e===Mue||e===Gue}function Ko(e,t,n){return $o(n)?n===Uue&&t+1n&&t+nm?Yue[m]:ime;switch(o[i]=r,g){case ome:l=Zue(t,l+1);break;case cme:switch(m){case c:for(u=p&_me,p=o[u],c=p>>Mme,o[i]=u,o[u++]=i;u>Mme),s===Ome&&(i--,g=mme);}a[i++]=g<';break;case'Property':r='<\''+e.name+'\'>';break;case'Keyword':r=e.name;break;case'AtKeyword':r='@'+e.name;break;case'Function':r=e.name+'(';break;case'String':case'Token':r=e.value;break;case'Comma':r=',';break;default:throw new Error('Unknown node type `'+e.type+'`');}return n(r,e)}function oi(e){for(var t=e.tokens,n=e.longestMatch,r=nn&&ege[n]!==tge&&n!==age?t:Xme(e,t+1)}function fi(e){return function(t,n){return null===t||t.node.type!==e?!1:(n(),!0)}}function yi(e){return function(t,n,r){if(ui(t,n,r))return!0;if(null===t)return!1;var a=gi(t.value,!0);if(0===a)return!1;if(!e){var o=hi(t.value,a);if(o===a||o!==t.value.length)return!1}else if(!e.hasOwnProperty(t.value.substr(a).toLowerCase()))return!1;return n(),!0}}function bi(e){var t=yi(e);return function(e,n,r){return!!t(e,n,r)||(null===e||0!==+e.value?!1:(n(),!0))}}function ki(e){return e.substringToPos(e.findWsEnd(e.pos+1))}function Si(e){for(var t=e.pos,n;tn||57t&&1===Nge[t])return qi(e);switch(t){case Lge:break;case Pge:return Ei(e,Ni(e));case Cge:return e.nextCharCode()===xge?Oi(e):Li(e);case Rge:return{type:'Combinator',value:e.substringToPos(e.nextCharCode()===Rge?e.pos+2:e.pos+1)};case bge:return e.pos++,e.eat(bge),{type:'Combinator',value:'&&'};case Tge:return e.pos++,{type:'Comma'};case xge:return Ei(e,{type:'String',value:vi(e)});case hge:case pge:case uge:case gge:case mge:return{type:'Spaces',value:ki(e)};case Oge:return t=e.nextCharCode(),128>t&&1===Nge[t]?(e.pos++,{type:'AtKeyword',name:Si(e)}):Ai(e);case wge:case vge:case Age:case yge:case fge:break;case qge:if(t=e.nextCharCode(),48>t||57f&&(f=y),h.token}function l(){c={syntax:t,prev:c},h={type:Qge,syntax:t.syntax,token:h.token,prev:h}}function d(){h=h.type===Qge?h.prev:{type:Zge,syntax:c.syntax,token:h.token,prev:h},c=c.prev}var c=null,p=null,u=null,m=0,g=Jge,h={type:'Stub',syntax:null,token:null,tokenCursor:-1,prev:null},f=0,y=-1,b=null;for(r();;){if(++m==nhe){console.warn('[csstree-match] BREAK after '+nhe+' iterations'),g=the;break}if(t===Yge){if(null===p){if(null!==b&&(y!==e.length-1||'\\0'!==b.value&&'\\9'!==b.value)){t=$ge;continue}g=Jge;break}if(t=p.nextSyntax,t===Kge)if(p.matchStack.token===h.token){t=$ge;continue}else t=Yge;for(;null!==c&&p.syntaxStack!==c;)d();p=p.prev;continue}if(t===$ge){if(null===u){g=ehe;break}t=u.nextSyntax,p=u.thenStack,c=u.syntaxStack,h=u.matchStack,y=u.tokenCursor,b=u.token,u=u.prev;continue}switch(t.type){case'MatchGraph':t=t.match;break;case'If':t.else!==$ge&&i(t.else),t.then!==Yge&&o(t.then),t=t.match;break;case'MatchOnce':t={type:'MatchOnceBuffer',terms:t.terms,all:t.all,matchStack:h,index:0,mask:0};break;case'MatchOnceBuffer':if(t.index===t.terms.length)if(t.matchStack===h){if(0===t.mask||t.all){t=$ge;break}t=Yge;break}else t.index=0,t.matchStack=h;for(;t.index':'<\''+c.syntax.name+'\'>'));break;case'Keyword':var k=t.name;if(null!==b){var w=b.value;if(-1!==w.indexOf('\\')&&(w=w.replace(/\\[09].*$/,'')),w.toLowerCase()===k){s(),t=Yge;break}}t=$ge;break;case'AtKeyword':case'Function':if(null!==b&&b.value.toLowerCase()===t.name){s(),t=Yge;break}t=$ge;break;case'Token':if(null!==b&&b.value===t.value){s(),t=Yge;break}t=$ge;break;case'Comma':null!==b&&','===b.value?ji(h.token)?t=$ge:(s(),t=Hi(b)?$ge:Yge):t=ji(h.token)||Hi(b)?Yge:$ge;break;default:throw new Error('Unknown node type: '+t.type);}}if(rhe+=m,g==Jge)for(;null!==c;)d();else h=null;return{tokens:e,reason:g,iterations:m,match:h,longestMatch:f}}function $i(e){function t(e){return null!==e&&('Type'===e.type||'Property'===e.type||'Keyword'===e.type)}function n(a){if(Array.isArray(a.match)){for(var o=0;o');else if(Array.isArray(i))s.push('List');else throw new Error('Wrong value `'+i+'` in `'+e+'.'+o+'` structure definition');a[o]=s.join(' | ')}return{docs:a,check:ts(e,r)}}function rs(e,t){var n={};for(var r in e)e[r].syntax&&(n[r]=t?e[r].syntax:Wme(e[r].syntax));return n}function as(e){var t=!1;return this.syntax.walk(e,function(e){'Function'===e.type&&'var'===e.name.toLowerCase()&&(t=!0)}),t}function is(e,t,n){return{matched:e,iterations:n,error:t,getTrace:ahe.getTrace,isType:ahe.isType,isProperty:ahe.isProperty,isKeyword:ahe.isKeyword}}function ss(e,t,n,r){if(!n)return is(null,new Error('Node is undefined'));if(as.call(e,n))return is(null,new Error('Matching for a tree with var() is not supported'));var a=e.syntax.generate(n,Mge),o;return r&&(o=che(a,e.valueCommonSyntax,e)),r&&o.match||(o=che(a,t.match,e),!!o.match)?is(o.match,null,o.iterations):is(null,new lhe(o.reason,e,t.syntax,n,o),o.iterations)}function ls(e){return function(){return this[e]()}}function ds(e){var t={context:{},scope:{},atrule:{},pseudo:{}};if(e.parseContext)for(var n in e.parseContext)switch(typeof e.parseContext[n]){case'function':t.context[n]=e.parseContext[n];break;case'string':t.context[n]=ls(e.parseContext[n]);}if(e.scope)for(var n in e.scope)t.scope[n]=e.scope[n];if(e.atrule)for(var n in e.atrule){var r=e.atrule[n];r.parse&&(t.atrule[n]=r.parse)}if(e.pseudo)for(var n in e.pseudo){var a=e.pseudo[n];a.parse&&(t.pseudo[n]=a.parse)}if(e.node)for(var n in e.node)t[n]=e.node[n].parse;return t}function cs(e,t){var n=e.children,r=null;'function'==typeof t?n.forEach(function(e){null!=r&&t.call(this,r),this.node(e),r=e},this):n.forEach(this.node,this)}function ps(e){return'function'==typeof e?e:Lhe}function us(e,t){return function(n,r,a){n.type===t&&e.call(this,n,r,a)}}function ms(e,t){var n=t.structure,r=[];for(var a in n)if(!1!==Phe.call(n,a)){var o=n[a],s={name:a,type:!1,nullable:!1};Array.isArray(n[a])||(o=[n[a]]);for(var l=0,i;ln&&!e.eof&&e.tokenType===Mbe;e.next())n++}function $s(){return this.createSingleNodeList(this.Raw(this.scanner.currentToken,0,0,!1,!1))}function Ks(){var e=0;return this.scanner.skipSC(),this.scanner.tokenType===Wxe?e=1:this.scanner.tokenType===Hxe&&this.scanner.lookupType(1)===Wxe&&(e=2),0!=e&&this.scanner.lookupNonWSType(e)===Yxe?this.createSingleNodeList(this.Declaration()):Xs.call(this)}function Xs(){var e=this.createList(),t=null,n;this.scanner.skipSC();scan:for(;!this.scanner.eof;){switch(this.scanner.tokenType){case Uxe:t=this.WhiteSpace();continue;case Vxe:this.scanner.next();continue;case Fxe:n=this.Function($s,this.scope.AtrulePrelude);break;case Wxe:n=this.Identifier();break;case jxe:n=this.Parentheses(Ks,this.scope.AtrulePrelude);break;default:break scan;}null!==t&&(e.push(t),t=null),e.push(n)}return e}function Qs(e,t){var n=Object.create(null);if(!Array.isArray(e))return null;for(var r=0,a;rr&&(r+=1),1n?n*(1+t):n+t-n*t,l=2*n-s;a=al(l,s,e+1/3),r=al(l,s,e),i=al(l,s,e-1/3)}return[zd(255*a),zd(255*r),zd(255*i),o]}function il(e){return e=e.toString(16),1===e.length?'0'+e:e}function sl(e,t,n){for(var r=e.head,a=[],o=!1;null!==r;){var i=r.data,s=i.type;switch(s){case'Number':case'Percentage':if(o)return;o=!0,a.push({type:s,value:+i.value});break;case'Operator':if(','===i.value){if(!o)return;o=!1}else if(o||'+'!==i.value)return;break;default:return;}r=r.next}if(a.length===t){if(4===a.length){if('Number'!==a[3].type)return;a[3].type='Alpha'}if(!n){if('Number'!==a[0].type||'Percentage'!==a[1].type||'Percentage'!==a[2].type)return;a[0].type='Angle'}else if(a[0].type!==a[1].type||a[0].type!==a[2].type)return;return a.map(function(e){var t=Md(0,e.value);switch(e.type){case'Number':t=Ud(t,255);break;case'Percentage':if(t=Ud(t,100)/100,!n)return t;t=255*t;break;case'Angle':return(t%360+360)%360/360;case'Alpha':return Ud(t,1);}return zd(t)})}}function dl(e,t){var n=e.value.toLowerCase();6===n.length&&n[0]===n[1]&&n[2]===n[3]&&n[4]===n[5]&&(n=n[0]+n[2]+n[4]),Ake[n]?t.data={type:'Identifier',loc:e.loc,name:Ake[n]}:e.value=n}function cl(){this.seed=0,this.map=Object.create(null)}function pl(e,t,n,r){var a=t.data,o=Wke(a.name).basename,i=a.name.toLowerCase()+'/'+(a.prelude?a.prelude.id:null);Fke.call(e,o)||(e[o]=Object.create(null)),r&&delete e[o][i],Fke.call(e[o],i)||(e[o][i]=new Vke),e[o][i].append(n.remove(t))}function ul(e,t){var n=Object.create(null),r=null;for(var a in e.children.each(function(e,a,o){if('Atrule'===e.type){var i=Wke(e.name).basename;switch(i){case'keyframes':return void pl(n,a,o,!0);case'media':if(t.forceMediaMerge)return void pl(n,a,o,!1);}null==r&&'charset'!==i&&'import'!==i&&(r=a)}else null==r&&(r=a)}),n)for(var o in n[a])e.children.insertList(n[a][o],'media'==a?null:r)}function ml(e){return'Atrule'===e.type&&'media'===e.name}function hl(e,t,n){if(ml(e)){var r=t.prev&&t.prev.data;!r||!ml(r)||e.prelude&&r.prelude&&e.prelude.id===r.prelude.id&&(r.block.children.appendList(e.block.children),n.remove(t))}}function fl(e,t){for(var n=e.head;null!==n;){for(var r=t.head;null!==r;){if(n.data.compareMarker===r.data.compareMarker)return!0;r=r.next}n=n.next}return!1}function yl(e){switch(e.type){case'Rule':return fl(e.prelude.children,this);case'Atrule':if(e.block)return e.block.children.some(yl,this);break;case'Declaration':return!1;}return!0}function bl(e,t,n){var r=e.prelude.children,a=e.block.children;n.prevUntil(t.prev,function(o){if('Rule'!==o.type)return $ke.unsafeToSkipNode.call(r,o);var i=o.prelude.children,s=o.block.children;if(e.pseudoSignature===o.pseudoSignature){if($ke.isEqualSelectors(i,r))return s.appendList(a),n.remove(t),!0;if($ke.isEqualDeclarations(a,s))return $ke.addSelectors(i,r),n.remove(t),!0}return $ke.hasSimilarSelectors(r,i)})}function xl(e,t,n){for(var r=e.prelude.children,a;r.head!==r.tail;)a=new Qke,a.insert(r.remove(r.head)),n.insert(n.createItem({type:'Rule',loc:e.loc,prelude:{type:'SelectorList',loc:e.prelude.loc,children:a},block:{type:'Block',loc:e.block.loc,children:e.block.children.copy()},pseudoSignature:e.pseudoSignature}),t)}function kl(e){this.name=e,this.loc=null,this.iehack=void 0,this.sides={top:null,right:null,bottom:null,left:null}}function Sl(e,t,n,r){var a=e.block.children,o=e.prelude.children.first().id;return e.block.children.eachRight(function(e,i){var s=e.property;if(pSe.hasOwnProperty(s)){var l=pSe[s],d,c;return(!r||o===r)&&l in t&&(c=aSe,d=t[l]),d&&d.add(s,e)||(c=rSe,d=new kl(l),!!d.add(s,e))?void(t[l]=d,n.push({operation:c,block:a,item:i,shorthand:d}),r=o):void(r=null)}}),r}function wl(e,t){e.forEach(function(e){var n=e.shorthand;n.isOkToMinimize()&&(e.operation===rSe?e.item.data=t(n.getDeclaration()):e.block.remove(e.item))})}function vl(e,t,n){var r=mSe(e).basename;if('background'===r)return e+':'+fSe(t.value);var a=t.id,o=n[a];if(!o){switch(t.value.type){case'Value':var i='',s='',l={},d=!1;t.value.children.each(function e(t){switch(t.type){case'Value':case'Brackets':case'Parentheses':t.children.each(e);break;case'Raw':d=!0;break;case'Identifier':var n=t.name;i||(i=gSe(n).vendor),/\\[09]/.test(n)&&(s=RegExp.lastMatch),'cursor'===r?-1===kSe.indexOf(n)&&(l[n]=!0):'position'===r?-1===SSe.indexOf(n)&&(l[n]=!0):xSe.hasOwnProperty(r)&&xSe[r].test(n)&&(l[n]=!0);break;case'Function':var n=t.name;if(i||(i=gSe(n).vendor),'rect'===n){var a=t.children.some(function(e){return'Operator'===e.type&&','===e.value});a||(n='rect-backward')}l[n+'()']=!0,t.children.each(e);break;case'Dimension':var o=t.unit;'rem'===o||'vw'===o||'vh'===o||'vmin'===o||'vmax'===o||'vm'===o?l[o]=!0:void 0;}}),o=d?'!'+ySe++:'!'+Object.keys(l).sort()+'|'+s+i;break;case'Raw':o='!'+t.value.value;break;default:o=fSe(t.value);}n[a]=o}return e+o}function Tl(e,t,n){var r=mSe(t.property);if(wSe.hasOwnProperty(r.basename))for(var a=wSe[r.basename],o=0;o=y){var b={type:'Rule',loc:null,prelude:f,block:{type:'Block',loc:null,children:new ESe().fromArray(m.eq)},pseudoSignature:e.pseudoSignature};return o.children=new ESe().fromArray(m.ne1),u.children=new ESe().fromArray(m.ne2.concat(m.ne2overrided)),n.insert(n.createItem(b),c),!0}}}s&&(s=!p.some(function(e){return a.some(function(t){return t.compareMarker===e.compareMarker})})),p.each(function(e){i[e.compareMarker]=!0})})}function ql(e,t){var n=new LSe,r=!1,a;return e.nextUntil(e.head,function(e,o,i){return'Comment'===e.type?t&&'!'===e.value.charAt(0)?r||a||(i.remove(o),void(a=e)):void i.remove(o):void('WhiteSpace'!==e.type&&(r=!0),n.insert(i.remove(o)))}),{comment:a,stylesheet:{type:'StyleSheet',loc:null,children:n}}}function Rl(e,t,n,r){r.logger('Compress block #'+n,null,!0);var a=1;return'StyleSheet'===e.type&&(e.firstAtrulesAllowed=t,e.id=a++),RSe(e,{visit:'Atrule',enter:function(e){null!==e.block&&(e.block.id=a++)}}),r.logger('init',e),ike(e,r),r.logger('clean',e),qke(e,r),r.logger('replace',e),r.restructuring&&PSe(e,r),e}function Dl(e){var t='comments'in e?e.comments:'exclamation';return'boolean'==typeof t?t=!!t&&'exclamation':'exclamation'!==t&&'first-exclamation'!==t&&(t=!1),t}function Nl(e){return'restructure'in e?e.restructure:!('restructuring'in e)||e.restructuring}function Bl(e){return new LSe().appendData({type:'Rule',loc:null,prelude:{type:'SelectorList',loc:null,children:new LSe().appendData({type:'Selector',loc:null,children:new LSe().appendData({type:'TypeSelector',loc:null,name:'x'})})},block:e})}function Il(e,t,n,r){return t.debug&&console.error('## '+e+' done in %d ms\n',Date.now()-n),r}function zl(e){var t;return function(n,r){var a=n;if(r&&(a='['+((Date.now()-t)/1e3).toFixed(3)+'s] '+a),1',a=Il('parsing',n,Date.now(),nwe(t,{context:e,filename:r,positions:!!n.sourceMap})),o;n.beforeCompress&&Il('beforeCompress',n,Date.now(),Gl(a,n,n.beforeCompress));var i=Il('compress',n,Date.now(),DSe(a,Ml(n)));return n.afterCompress&&Il('afterCompress',n,Date.now(),Gl(i,n,n.afterCompress)),o=n.sourceMap?Il('generate(sourceMap: true)',n,Date.now(),function(){var e=rwe(i.ast,{sourceMap:!0});return e.map._file=r,e.map.setSourceContent(r,t),e}()):Il('generate',n,Date.now(),{css:rwe(i.ast),map:null}),o}function Vl(e){var t={};for(var n in e)t[n]=e[n];return t}function Wl(e){function t(e,n){for(var r=0,a;rSwe&&(e[t]=0,void 0!==e[t-1]&&e[t-1]++);return e[0]>Swe&&(e[0]=0,e.unshift(0)),e}function Yl(e,t){var n=t.prefix;return n+e.map((e)=>kwe[e]).join('')}function $l(e,t){return e.content.forEach(function(n){n.hasAttr('id')||n.isElem('style')?(t.push(n),n.parentNode=e):!n.isEmpty()&&(n.content=$l(n,t))}),t}function Kl(e){return'#'+('00000'+(e[0]<<16|e[1]<<8|e[2]).toString(16)).slice(-6).toUpperCase()}function Xl(e,t){var r={};for(var a in e)t.hasOwnProperty(a)&&-1e.hasAttr('systemLanguage')||e.hasAttr('requiredFeatures')||e.hasAttr('requiredExtensions'))}function Jl(e){var t=[0,0],n=[0,0],r;return e.forEach(function(a,o){var i=a.instruction,s=a.data;s?(-1<'mcslqta'.indexOf(i)?(t[0]+=s[s.length-2],t[1]+=s[s.length-1],'m'===i&&(n[0]=t[0],n[1]=t[1],r=a)):'h'===i?t[0]+=s[0]:'v'===i&&(t[1]+=s[0]),'M'===i?(0Bd&&(x.data[3]=1),T=1}for(var O=s,P;(p=l[++O])&&~'cs'.indexOf(p.instruction)&&(P=p.data,'s'==p.instruction&&(E=sd({instruction:'s',data:p.data.slice()},l[O-1].data),P=E.data,E.data=P.slice(0,2),C=n([E])),nd(P)&&ud(P,w))&&(y+=gd(P,w),!(1e-3Bd&&(x.data[3]=1),v.push(p),1e-3<2*Bd-y)x.coords=p.coords,x.data[5]=x.coords[0]-x.base[0],x.data[6]=x.coords[1]-x.base[1];else{x.data[5]=2*(w.center[0]-P[4]),x.data[6]=2*(w.center[1]-P[5]),x.coords=[x.base[0]+x.data[5],x.base[1]+x.data[6]],x={instruction:'a',data:[f,f,0,0,b,p.coords[0]-x.coords[0],p.coords[1]-x.coords[1]],coords:p.coords,base:x.coords},k.push(x),O++;break}S[0]-=P[4],S[1]-=P[5]}if((n(k)+C).lengtho[0]||/^0\./.test(o[0])&&n.data[n.data.length-1]%1))&&(e.instruction=a.toUpperCase(),e.data=s),n=e,!0}),e}function nd(e){var t=rd([0,0,e[2],e[3],e[0],e[1],e[4],e[5]]);return t&&e[2]t[0]&&e[3]t[1]&&e[4]=uve?+e[t].toFixed(pve):n}return e}function od(e){for(var t=e.length;0=t||!isFinite(a))return!1;for(;0<=(t-=2);)if(Pd(Wd(n*e[t]+r*e[t+1],2)*a)>uve)return!1;return!0}function sd(e,t){switch(e.instruction){case's':e.instruction='c';break;case't':e.instruction='q';}return e.data.unshift(t[t.length-2]-t[t.length-4],t[t.length-1]-t[t.length-3]),e}function ld(e,t){return Pd(Wd(e[0]-t[0],2)+Wd(e[1]-t[1],2))}function cd(e,n){var t=n*n,r=t*n,a=1-n,o=a*a;return[3*o*n*e[0]+3*a*t*e[2]+r*e[4],3*o*n*e[1]+3*a*t*e[3]+r*e[5]]}function pd(e){var t=cd(e,1/2),n=[t[0]/2,t[1]/2],r=[(t[0]+e[4])/2,(t[1]+e[5])/2],a=rd([n[0],n[1],n[0]+n[1],n[1]-n[0],r[0],r[1],r[0]+(r[1]-t[1]),r[1]-(r[0]-t[0])]),o=a&&ld([0,0],a),i=Ud(mve*uve,gve*o/100);if(a&&[0.25,0.75].every(function(t){return Vd(ld(cd(e,t),a)-o)<=i}))return{center:a,radius:o}}function ud(e,t){var n=Ud(mve*uve,gve*t.radius/100);return[0,0.25,0.5,0.75,1].every(function(r){return Vd(ld(cd(e,r),t.center)-t.radius)<=n})}function md(e,t){return ud(e,{center:[t.center[0]+e[4],t.center[1]+e[5]],radius:t.radius})}function gd(e,t){var n=-t.center[0],r=-t.center[1],a=e[4]-t.center[0],o=e[5]-t.center[1];return Dd((n*a+r*o)/Pd((n*n+r*r)*(a*a+o*o)))}function hd(e,t){return t.reduce(function(t,n){return t+n.instruction+(n.data?dve(cve(n.data.slice()),e):'')},'')}function fd(e,t,n){var r=yve(e.attr(t).value);n=yd(r,n),n.collapseIntoOne&&1t.floatPrecision?Cd.bind(this,t.floatPrecision):Td,kve=1<=t.degPrecision&&20>t.floatPrecision?Cd.bind(this,t.degPrecision):Td,wve=1<=t.transformPrecision&&20>t.floatPrecision?Cd.bind(this,t.transformPrecision):Td,t}function bd(e,t){return'matrix'==t.name?e.concat(t.data.slice(0,4)):e}function xd(e){return(e+='').slice(e.indexOf('.')).length-1}function kd(e,t){for(var n=0,r;ne.data.length)&&1!=e.data[1])&&('matrix'!=e.name||1!=e.data[0]||1!=e.data[3]||e.data[1]||e.data[2]||e.data[4]||e.data[5])})}function wd(e,t){var n='';return e.forEach(function(e){vd(e),n+=(n&&' ')+e.name+'('+fve(e.data,t)+')'}),n}function vd(e){switch(e.name){case'translate':e.data=Sve(e.data);break;case'rotate':e.data=kve(e.data.slice(0,1)).concat(Sve(e.data.slice(1)));break;case'skewX':case'skewY':e.data=kve(e.data);break;case'scale':e.data=wve(e.data);break;case'matrix':e.data=wve(e.data.slice(0,4)).concat(Sve(e.data.slice(4)));}return e}function Td(e){return e.map(Math.round)}function Cd(e,t){for(var n=t.length,r=+Wd(.1,e).toFixed(e);n--;)if(t[n].toFixed(e)!=t[n]){var a=+t[n].toFixed(e-1);t[n]=+Vd(a-t[n]).toFixed(e+1)>=r?+t[n].toFixed(e):a}return t}function Ed(e){function t(e,t){for(const r of Object.keys(t))e[r]=n(t[r]);return e}function n(e){if('object'!=typeof e||null===e)return e;if(r.has(e))return r.get(e);let a;if(e.constructor===QJ)a=new QJ({},e.parentNode),r.set(e,a),e.parentNode&&(a.parentNode=n(e.parentNode)),t(a,e);else if(e.constructor===pne||e.constructor===zpe||e.constructor===Object||e.constructor===Array)a=new e.constructor,r.set(e,a),t(a,e);else if(e.constructor===Map){a=new Map,r.set(e,a);for(const[t,r]of e)a.set(n(t),n(r))}else if(e.constructor===Set){a=new Set,r.set(e,a);for(const t of e)a.add(n(t))}else throw Error('unexpected type');return a}const r=new Map;return n(e)}function Ad(e){const t=e.content.filter((e)=>e.isElem('svg'))[0];if(!t)return{};if(t.hasAttr('width')&&t.hasAttr('height'))return{width:parseFloat(t.attr('width').value),height:parseFloat(t.attr('height').value)};if(t.hasAttr('viewBox')){const e=t.attr('viewBox').value.split(/(?:,\s*|\s+)/);return{width:parseFloat(e[2]),height:parseFloat(e[3])}}return{}}function*Od(e){Object.keys(e.plugins).forEach((t)=>{Ove[t].active=e.plugins[t]});const t=+e.floatPrecision;for(const n of Object.values(Ove))n.params&&'floatPrecision'in n.params&&(n.params.floatPrecision=t);const n=Ed(Lve);for(let t,r;void 0==t||t.length!=r;)r=t&&t.length,Zpe(n,{input:'string'},Pve),t=Qpe(n,{indent:' ',pretty:e.pretty}).data,yield{data:t,dimensions:Ad(n)}}var Pd=Math.sqrt,Ld=Math.tan,qd=Math.asin,Rd=Math.sin,Dd=Math.acos,Nd=Math.cos,Bd=Math.PI,Id=Number.MAX_VALUE,zd=Math.round,_d=Number.isNaN,Md=Math.max,Gd=String.fromCharCode,Ud=Math.min,Vd=Math.abs,Wd=Math.pow,Fd=Math.floor,jd='undefined'==typeof window?'undefined'==typeof global?'undefined'==typeof self?{}:self:global:window;self.global=jd,'use strict';var Hd;t.prototype=Object.create(null),n.EventEmitter=n,n.usingDomains=!1,n.prototype.domain=void 0,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.init=function(){this.domain=null,n.usingDomains&&Hd.active&&!(this instanceof Hd.Domain)&&(this.domain=Hd.active),this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new t,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},n.prototype.setMaxListeners=function(e){if('number'!=typeof e||0>e||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},n.prototype.getMaxListeners=function(){return r(this)},n.prototype.emit=function(e){var t='error'===e,n,r,c,p,u,i,m;if(i=this._events,i)t=t&&null==i.error;else if(!t)return!1;if(m=this.domain,t){if(n=arguments[1],m)n||(n=new Error('Uncaught, unspecified "error" event')),n.domainEmitter=this,n.domain=m,n.domainThrown=!1,m.emit('error',n);else if(n instanceof Error)throw n;else{var g=new Error('Uncaught, unspecified "error" event. ('+n+')');throw g.context=n,g}return!1}if(r=i[e],!r)return!1;var h='function'==typeof r;switch(c=arguments.length,c){case 1:a(r,h,this);break;case 2:o(r,h,this,arguments[1]);break;case 3:s(r,h,this,arguments[1],arguments[2]);break;case 4:l(r,h,this,arguments[1],arguments[2],arguments[3]);break;default:for(p=Array(c-1),u=1;uo)return this;if(1===r.length){if(r[0]=void 0,0==--this._eventsCount)return this._events=new t,this;delete a[e]}else h(r,o);a.removeListener&&this.emit('removeListener',e,i||n)}return this},n.prototype.removeAllListeners=function(e){var n,r;if(r=this._events,!r)return this;if(!r.removeListener)return 0===arguments.length?(this._events=new t,this._eventsCount=0):r[e]&&(0==--this._eventsCount?this._events=new t:delete r[e]),this;if(0===arguments.length){for(var a=Object.keys(r),o=0,i;or&&(n--,r+=1e9)),[n,r]},platform:'browser',release:{},config:{},uptime:function(){var e=new Date;return(e-tc)/1e3}},rc;rc='function'==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e};var oc=rc,lc=/%[sdj%]/g,dc={},cc;L.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},L.styles={special:'cyan',number:'yellow',boolean:'yellow',undefined:'grey',null:'bold',string:'green',date:'magenta',regexp:'red'};var pc=[],uc=[],mc='undefined'==typeof Uint8Array?Array:Uint8Array,gc=!1,hc={}.toString,fc=Array.isArray||function(e){return'[object Array]'==hc.call(e)};fe.TYPED_ARRAY_SUPPORT=void 0===global.TYPED_ARRAY_SUPPORT||global.TYPED_ARRAY_SUPPORT;me();fe.poolSize=8192,fe._augment=function(e){return e.__proto__=fe.prototype,e},fe.from=function(e,t,n){return ye(null,e,t,n)},fe.TYPED_ARRAY_SUPPORT&&(fe.prototype.__proto__=Uint8Array.prototype,fe.__proto__=Uint8Array),fe.alloc=function(e,t,n){return xe(null,e,t,n)},fe.allocUnsafe=function(e){return ke(null,e)},fe.allocUnsafeSlow=function(e){return ke(null,e)},fe.isBuffer=function(e){return null!=e&&(!!e._isBuffer||ct(e)||pt(e))},fe.compare=function(e,t){if(!Ee(e)||!Ee(t))throw new TypeError('Arguments must be Buffers');if(e===t)return 0;for(var n=e.length,r=t.length,a=0,o=Ud(n,r);at&&(e+=' ... ')),''},fe.prototype.compare=function(e,t,n,r,a){if(!Ee(e))throw new TypeError('Argument must be a Buffer');if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===a&&(a=this.length),0>t||n>e.length||0>r||a>this.length)throw new RangeError('out of range index');if(r>=a&&t>=n)return 0;if(r>=a)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,a>>>=0,this===e)return 0;for(var o=a-r,s=n-t,l=Ud(o,s),d=this.slice(r,a),c=e.slice(t,n),p=0;pa)&&(n=a),0n||0>t)||t>this.length)throw new RangeError('Attempt to write outside buffer bounds');r||(r='utf8');for(var o=!1;;)switch(r){case'hex':return De(this,e,t,n);case'utf8':case'utf-8':return Ne(this,e,t,n);case'ascii':return Be(this,e,t,n);case'latin1':case'binary':return Ie(this,e,t,n);case'base64':return ze(this,e,t,n);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return _e(this,e,t,n);default:if(o)throw new TypeError('Unknown encoding: '+r);r=(''+r).toLowerCase(),o=!0;}},fe.prototype.toJSON=function(){return{type:'Buffer',data:Array.prototype.slice.call(this._arr||this,0)}};var yc=4096;fe.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,0>e?(e+=n,0>e&&(e=0)):e>n&&(e=n),0>t?(t+=n,0>t&&(t=0)):t>n&&(t=n),t=a&&(r-=Wd(2,8*t)),r},fe.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||He(e,t,this.length);for(var r=t,a=1,o=this[e+--r];0=a&&(o-=Wd(2,8*t)),o},fe.prototype.readInt8=function(e,t){return t||He(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},fe.prototype.readInt16LE=function(e,t){t||He(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},fe.prototype.readInt16BE=function(e,t){t||He(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},fe.prototype.readInt32LE=function(e,t){return t||He(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},fe.prototype.readInt32BE=function(e,t){return t||He(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},fe.prototype.readFloatLE=function(e,t){return t||He(e,4,this.length),pe(this,e,!0,23,4)},fe.prototype.readFloatBE=function(e,t){return t||He(e,4,this.length),pe(this,e,!1,23,4)},fe.prototype.readDoubleLE=function(e,t){return t||He(e,8,this.length),pe(this,e,!0,52,8)},fe.prototype.readDoubleBE=function(e,t){return t||He(e,8,this.length),pe(this,e,!1,52,8)},fe.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t|=0,n|=0,!r){var a=Wd(2,8*n)-1;Ye(this,e,t,n,a,0)}var o=1,s=0;for(this[t]=255&e;++s>>8):$e(this,e,t,!0),t+2},fe.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||Ye(this,e,t,2,65535,0),fe.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):$e(this,e,t,!1),t+2},fe.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||Ye(this,e,t,4,4294967295,0),fe.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):Ke(this,e,t,!0),t+4},fe.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||Ye(this,e,t,4,4294967295,0),fe.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Ke(this,e,t,!1),t+4},fe.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var a=Wd(2,8*n-1);Ye(this,e,t,n,a-1,-a)}var o=0,i=1,s=0;for(this[t]=255&e;++oe&&0==s&&0!==this[t+o-1]&&(s=1),this[t+o]=255&(e/i>>0)-s;return t+n},fe.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var a=Wd(2,8*n-1);Ye(this,e,t,n,a-1,-a)}var o=n-1,i=1,s=0;for(this[t+o]=255&e;0<=--o&&(i*=256);)0>e&&0==s&&0!==this[t+o+1]&&(s=1),this[t+o]=255&(e/i>>0)-s;return t+n},fe.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||Ye(this,e,t,1,127,-128),fe.TYPED_ARRAY_SUPPORT||(e=Fd(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},fe.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||Ye(this,e,t,2,32767,-32768),fe.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):$e(this,e,t,!0),t+2},fe.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||Ye(this,e,t,2,32767,-32768),fe.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):$e(this,e,t,!1),t+2},fe.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||Ye(this,e,t,4,2147483647,-2147483648),fe.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):Ke(this,e,t,!0),t+4},fe.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||Ye(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),fe.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):Ke(this,e,t,!1),t+4},fe.prototype.writeFloatLE=function(e,t,n){return Qe(this,e,t,!0,n)},fe.prototype.writeFloatBE=function(e,t,n){return Qe(this,e,t,!1,n)},fe.prototype.writeDoubleLE=function(e,t,n){return Ze(this,e,t,!0,n)},fe.prototype.writeDoubleBE=function(e,t,n){return Ze(this,e,t,!1,n)},fe.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),0t)throw new RangeError('targetStart out of bounds');if(0>n||n>=this.length)throw new RangeError('sourceStart out of bounds');if(0>r)throw new RangeError('sourceEnd out of bounds');r>this.length&&(r=this.length),e.length-ta||!fe.TYPED_ARRAY_SUPPORT)for(o=0;oa&&(e=a)}if(void 0!==r&&'string'!=typeof r)throw new TypeError('encoding must be a string');if('string'==typeof r&&!fe.isEncoding(r))throw new TypeError('Unknown encoding: '+r)}else'number'==typeof e&&(e&=255);if(0>t||this.length>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var o;if('number'==typeof e)for(o=t;o>>0),n=this.head,r=0;n;)n.data.copy(t,r),r+=n.data.length,n=n.next;return t};var xc=fe.isEncoding||function(e){switch(e&&e.toLowerCase()){case'hex':case'utf8':case'utf-8':case'ascii':case'binary':case'base64':case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':case'raw':return!0;default:return!1;}};ht.prototype.write=function(e){for(var t='',n;this.charLength;){if(n=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length,e.copy(this.charBuffer,this.charReceived,0,n),this.charReceived+=n,this.charReceived=r){this.charLength+=this.surrogateSize,t='';continue}if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.detectIncompleteChar(e);var a=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,a),a-=this.charReceived),t+=e.toString(this.encoding,0,a);var a=t.length-1,r=t.charCodeAt(a);if(55296<=r&&56319>=r){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),e.copy(this.charBuffer,0,0,o),t.substring(0,a)}return t},ht.prototype.detectIncompleteChar=function(e){for(var t=3<=e.length?3:e.length,n;0>5){this.charLength=2;break}if(2>=t&&14==n>>4){this.charLength=3;break}if(3>=t&&30==n>>3){this.charLength=4;break}}this.charReceived=t},ht.prototype.end=function(e){var t='';if(e&&e.length&&(t=this.write(e)),this.charReceived){var n=this.charReceived,r=this.charBuffer,a=this.encoding;t+=r.slice(0,n).toString(a)}return t};var kc=Object.freeze({StringDecoder:ht});'use strict',wt.ReadableState=St;var wc=function(e){if($(cc)&&(cc=nc.env.NODE_DEBUG||''),e=e.toUpperCase(),!dc[e])if(new RegExp('\\b'+e+'\\b','i').test(cc)){dc[e]=function(){var t=O.apply(null,arguments);console.error('%s %d: %s',e,0,t)}}else dc[e]=function(){};return dc[e]}('stream');oc(wt,n),wt.prototype.push=function(e,t){var n=this._readableState;return n.objectMode||'string'!=typeof e||(t=t||n.defaultEncoding,t!==n.encoding&&(e=Buffer.from(e,t),t='')),vt(this,n,e,t,!1)},wt.prototype.unshift=function(e){var t=this._readableState;return vt(this,t,e,'',!0)},wt.prototype.isPaused=function(){return!1===this._readableState.flowing},wt.prototype.setEncoding=function(e){return this._readableState.decoder=new ht(e),this._readableState.encoding=e,this};var vc=8388608;wt.prototype.read=function(e){wc('read',e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return wc('read: emitReadable',t.length,t.ended),0===t.length&&t.ended?Ft(this):Pt(this),null;if(e=Et(e,t),0===e&&t.ended)return 0===t.length&&Ft(this),null;var r=t.needReadable;wc('need readable',r),(0===t.length||t.length-en)switch(P[a]){case'textNode':c(e);break;case'cdata':g(e,'oncdata',e.cdata),e.cdata='';break;case'script':g(e,'onscript',e.script),e.script='';break;default:f(e,'Max buffer length exceeded: '+P[a]);}r=Md(r,i)}var s=t.MAX_BUFFER_LENGTH-r;e.bufferCheckPosition=s+e.position}function r(e){for(var t=0,n=P.length;t'===e||l(e)}function u(e,t){return e.test(t)}function m(e,t){return!u(e,t)}function i(e,t,n){e[t]&&e[t](n)}function g(e,t,n){e.textNode&&c(e),i(e,t,n)}function c(e){e.textNode=h(e.opt,e.textNode),e.textNode&&i(e,'ontext',e.textNode),e.textNode=''}function h(e,t){return e.trim&&(t=t.trim()),e.normalize&&(t=t.replace(/\s+/g,' ')),t}function f(e,t){return c(e),e.trackPosition&&(t+='\nLine: '+e.line+'\nColumn: '+e.column+'\nChar: '+e.c),t=new Error(t),e.error=t,i(e,'onerror',t),e}function y(t){return t.sawRoot&&!t.closedRoot&&b(t,'Unclosed root tag'),t.state!==U.BEGIN&&t.state!==U.BEGIN_WHITESPACE&&t.state!==U.TEXT&&f(t,'Unexpected end'),c(t),t.c='',t.closed=!0,i(t,'onend'),e.call(t,t.strict,t.opt),t}function b(t,n){if('object'!=typeof t||!(t instanceof e))throw new Error('bad call to strictFail');t.strict&&f(t,n)}function x(e){e.strict||(e.tagName=e.tagName[e.looseCase]());var t=e.tags[e.tags.length-1]||e,n=e.tag={name:e.tagName,attributes:{}};e.opt.xmlns&&(n.ns=t.ns),e.attribList.length=0,g(e,'onopentagstart',n)}function k(e,t){var n=e.indexOf(':'),r=0>n?['',e]:e.split(':'),a=r[0],o=r[1];return t&&'xmlns'===e&&(a='xmlns',o=''),{prefix:a,local:o}}function w(e){if(e.strict||(e.attribName=e.attribName[e.looseCase]()),-1!==e.attribList.indexOf(e.attribName)||e.tag.attributes.hasOwnProperty(e.attribName))return void(e.attribName=e.attribValue='');if(e.opt.xmlns){var t=k(e.attribName,!0),n=t.prefix,r=t.local;if('xmlns'===n)if('xml'===r&&e.attribValue!==N)b(e,'xml: prefix must be bound to '+N+'\nActual: '+e.attribValue);else if('xmlns'===r&&e.attribValue!==B)b(e,'xmlns: prefix must be bound to '+B+'\nActual: '+e.attribValue);else{var a=e.tag,o=e.tags[e.tags.length-1]||e;a.ns===o.ns&&(a.ns=Object.create(o.ns)),a.ns[r]=e.attribValue}e.attribList.push([e.attribName,e.attribValue])}else e.tag.attributes[e.attribName]=e.attribValue,g(e,'onattribute',{name:e.attribName,value:e.attribValue});e.attribName=e.attribValue=''}function v(e,t){if(e.opt.xmlns){var n=e.tag,r=k(e.tagName);n.prefix=r.prefix,n.local=r.local,n.uri=n.ns[r.prefix]||'',n.prefix&&!n.uri&&(b(e,'Unbound namespace prefix: '+JSON.stringify(e.tagName)),n.uri=r.prefix);var o=e.tags[e.tags.length-1]||e;n.ns&&o.ns!==n.ns&&Object.keys(n.ns).forEach(function(t){g(e,'onopennamespace',{prefix:t,uri:n.ns[t]})});for(var s=0,i=e.attribList.length;s',e.tagName='',void(e.state=U.SCRIPT);g(e,'onscript',e.script),e.script=''}var n=e.tags.length,t=e.tagName;e.strict||(t=t[e.looseCase]());for(var r=t,a;n--&&(a=e.tags[n],a.name!==r);)b(e,'Unexpected close tag');if(0>n)return b(e,'Unmatched closing tag: '+e.tagName),e.textNode+='',void(e.state=U.TEXT);e.tagName=t;for(var o=e.tags.length,i;o-->n;){i=e.tag=e.tags.pop(),e.tagName=e.tag.name,g(e,'onclosetag',e.tagName);var s=e.tags[e.tags.length-1]||e;e.opt.xmlns&&i.ns!==s.ns&&Object.keys(i.ns).forEach(function(t){var r=i.ns[t];g(e,'onclosenamespace',{prefix:t,uri:r})})}0===n&&(e.closedRoot=!0),e.tagName=e.attribValue=e.attribName='',e.attribList.length=0,e.state=U.TEXT}function C(e){var t=e.entity,n=t.toLowerCase(),r='',a;return e.ENTITIES[t]?e.ENTITIES[t]:e.ENTITIES[n]?e.ENTITIES[n]:(t=n,'#'===t.charAt(0)&&('x'===t.charAt(1)?(t=t.slice(2),a=parseInt(t,16),r=a.toString(16)):(t=t.slice(1),a=parseInt(t,10),r=a.toString(10))),t=t.replace(/^0+/,''),isNaN(a)||r.toLowerCase()!==t?(b(e,'Invalid character entity'),'&'+e.entity+';'):O(a))}function E(e,t){'<'===t?(e.state=U.OPEN_WAKA,e.startTagPosition=e.position):!l(t)&&(b(e,'Non-whitespace before first tag.'),e.textNode=t,e.state=U.TEXT)}function A(e,t){var n='';return t'===a?(g(t,'onsgmldeclaration',t.sgmlDecl),t.sgmlDecl='',t.state=U.TEXT):d(a)?(t.state=U.SGML_DECL_QUOTED,t.sgmlDecl+=a):t.sgmlDecl+=a;continue;case U.SGML_DECL_QUOTED:a===t.q&&(t.state=U.SGML_DECL,t.q=''),t.sgmlDecl+=a;continue;case U.DOCTYPE:'>'===a?(t.state=U.TEXT,g(t,'ondoctype',t.doctype),t.doctype=!0):(t.doctype+=a,'['===a?t.state=U.DOCTYPE_DTD:d(a)&&(t.state=U.DOCTYPE_QUOTED,t.q=a));continue;case U.DOCTYPE_QUOTED:t.doctype+=a,a===t.q&&(t.q='',t.state=U.DOCTYPE);continue;case U.DOCTYPE_DTD:t.doctype+=a,']'===a?t.state=U.DOCTYPE:d(a)&&(t.state=U.DOCTYPE_DTD_QUOTED,t.q=a);continue;case U.DOCTYPE_DTD_QUOTED:t.doctype+=a,a===t.q&&(t.state=U.DOCTYPE_DTD,t.q='');continue;case U.COMMENT:'-'===a?t.state=U.COMMENT_ENDING:t.comment+=a;continue;case U.COMMENT_ENDING:'-'===a?(t.state=U.COMMENT_ENDED,t.comment=h(t.opt,t.comment),t.comment&&g(t,'oncomment',t.comment),t.comment=''):(t.comment+='-'+a,t.state=U.COMMENT);continue;case U.COMMENT_ENDED:'>'===a?t.state=U.TEXT:(b(t,'Malformed comment'),t.comment+='--'+a,t.state=U.COMMENT);continue;case U.CDATA:']'===a?t.state=U.CDATA_ENDING:t.cdata+=a;continue;case U.CDATA_ENDING:']'===a?t.state=U.CDATA_ENDING_2:(t.cdata+=']'+a,t.state=U.CDATA);continue;case U.CDATA_ENDING_2:'>'===a?(t.cdata&&g(t,'oncdata',t.cdata),g(t,'onclosecdata'),t.cdata='',t.state=U.TEXT):']'===a?t.cdata+=']':(t.cdata+=']]'+a,t.state=U.CDATA);continue;case U.PROC_INST:'?'===a?t.state=U.PROC_INST_ENDING:l(a)?t.state=U.PROC_INST_BODY:t.procInstName+=a;continue;case U.PROC_INST_BODY:if(!t.procInstBody&&l(a))continue;else'?'===a?t.state=U.PROC_INST_ENDING:t.procInstBody+=a;continue;case U.PROC_INST_ENDING:'>'===a?(g(t,'onprocessinginstruction',{name:t.procInstName,body:t.procInstBody}),t.procInstName=t.procInstBody='',t.state=U.TEXT):(t.procInstBody+='?'+a,t.state=U.PROC_INST_BODY);continue;case U.OPEN_TAG:u(_,a)?t.tagName+=a:(x(t),'>'===a?v(t):'/'===a?t.state=U.OPEN_TAG_SLASH:(!l(a)&&b(t,'Invalid character in tag name'),t.state=U.ATTRIB));continue;case U.OPEN_TAG_SLASH:'>'===a?(v(t,!0),T(t)):(b(t,'Forward-slash in opening tag not followed by >'),t.state=U.ATTRIB);continue;case U.ATTRIB:if(l(a))continue;else'>'===a?v(t):'/'===a?t.state=U.OPEN_TAG_SLASH:u(z,a)?(t.attribName=a,t.attribValue='',t.state=U.ATTRIB_NAME):b(t,'Invalid attribute name');continue;case U.ATTRIB_NAME:'='===a?t.state=U.ATTRIB_VALUE:'>'===a?(b(t,'Attribute without value'),t.attribValue=t.attribName,w(t),v(t)):l(a)?t.state=U.ATTRIB_NAME_SAW_WHITE:u(_,a)?t.attribName+=a:b(t,'Invalid attribute name');continue;case U.ATTRIB_NAME_SAW_WHITE:if('='===a)t.state=U.ATTRIB_VALUE;else if(l(a))continue;else b(t,'Attribute without value'),t.tag.attributes[t.attribName]='',t.attribValue='',g(t,'onattribute',{name:t.attribName,value:''}),t.attribName='','>'===a?v(t):u(z,a)?(t.attribName=a,t.state=U.ATTRIB_NAME):(b(t,'Invalid attribute name'),t.state=U.ATTRIB);continue;case U.ATTRIB_VALUE:if(l(a))continue;else d(a)?(t.q=a,t.state=U.ATTRIB_VALUE_QUOTED):(b(t,'Unquoted attribute value'),t.state=U.ATTRIB_VALUE_UNQUOTED,t.attribValue=a);continue;case U.ATTRIB_VALUE_QUOTED:if(a!==t.q){'&'===a?t.state=U.ATTRIB_VALUE_ENTITY_Q:t.attribValue+=a;continue}w(t),t.q='',t.state=U.ATTRIB_VALUE_CLOSED;continue;case U.ATTRIB_VALUE_CLOSED:l(a)?t.state=U.ATTRIB:'>'===a?v(t):'/'===a?t.state=U.OPEN_TAG_SLASH:u(z,a)?(b(t,'No whitespace between attributes'),t.attribName=a,t.attribValue='',t.state=U.ATTRIB_NAME):b(t,'Invalid attribute name');continue;case U.ATTRIB_VALUE_UNQUOTED:if(!p(a)){'&'===a?t.state=U.ATTRIB_VALUE_ENTITY_U:t.attribValue+=a;continue}w(t),'>'===a?v(t):t.state=U.ATTRIB;continue;case U.CLOSE_TAG:if(!!t.tagName)'>'===a?T(t):u(_,a)?t.tagName+=a:t.script?(t.script+=''===a?T(t):b(t,'Invalid characters in closing tag');continue;case U.TEXT_ENTITY:case U.ATTRIB_VALUE_ENTITY_Q:case U.ATTRIB_VALUE_ENTITY_U:var s,k;switch(t.state){case U.TEXT_ENTITY:s=U.TEXT,k='textNode';break;case U.ATTRIB_VALUE_ENTITY_Q:s=U.ATTRIB_VALUE_QUOTED,k='attribValue';break;case U.ATTRIB_VALUE_ENTITY_U:s=U.ATTRIB_VALUE_UNQUOTED,k='attribValue';}';'===a?(t[k]+=C(t),t.entity='',t.state=s):u(t.entity.length?G:M,a)?t.entity+=a:(b(t,'Invalid character in entity name'),t[k]+='&'+t.entity+a,t.entity='',t.state=s);continue;default:throw new Error(t,'Unknown state: '+t.state);}return t.position>=t.bufferCheckPosition&&n(t),t},resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){a(this)}};var L;try{L=(Ec&&vn||Ec).Stream}catch(e){L=function(){}}var q=t.EVENTS.filter(function(e){return'error'!==e&&'end'!==e});o.prototype=Object.create(L.prototype,{constructor:{value:o}}),o.prototype.write=function(e){if('function'==typeof Buffer&&'function'==typeof Buffer.isBuffer&&Buffer.isBuffer(e)){if(!this._decoder){var t=kc.StringDecoder;this._decoder=new t('utf8')}e=this._decoder.write(e)}return this._parser.write(e.toString()),this.emit('data',e),!0},o.prototype.end=function(e){return e&&e.length&&this.write(e),this._parser.end(),!0},o.prototype.on=function(e,t){var n=this;return n._parser['on'+e]||-1===q.indexOf(e)||(n._parser['on'+e]=function(){var t=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);t.splice(0,0,e),n.emit.apply(n,t)}),L.prototype.on.call(n,e,t)};var R='[CDATA[',D='DOCTYPE',N='http://www.w3.org/XML/1998/namespace',B='http://www.w3.org/2000/xmlns/',I={xml:N,xmlns:B},z=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,_=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/,M=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,G=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/,U=0;for(var S in t.STATE={BEGIN:U++,BEGIN_WHITESPACE:U++,TEXT:U++,TEXT_ENTITY:U++,OPEN_WAKA:U++,SGML_DECL:U++,SGML_DECL_QUOTED:U++,DOCTYPE:U++,DOCTYPE_QUOTED:U++,DOCTYPE_DTD:U++,DOCTYPE_DTD_QUOTED:U++,COMMENT_STARTING:U++,COMMENT:U++,COMMENT_ENDING:U++,COMMENT_ENDED:U++,CDATA:U++,CDATA_ENDING:U++,CDATA_ENDING_2:U++,PROC_INST:U++,PROC_INST_BODY:U++,PROC_INST_ENDING:U++,OPEN_TAG:U++,OPEN_TAG_SLASH:U++,ATTRIB:U++,ATTRIB_NAME:U++,ATTRIB_NAME_SAW_WHITE:U++,ATTRIB_VALUE:U++,ATTRIB_VALUE_QUOTED:U++,ATTRIB_VALUE_CLOSED:U++,ATTRIB_VALUE_UNQUOTED:U++,ATTRIB_VALUE_ENTITY_Q:U++,ATTRIB_VALUE_ENTITY_U:U++,CLOSE_TAG:U++,CLOSE_TAG_SAW_WHITE:U++,SCRIPT:U++,SCRIPT_ENDING:U++},t.XML_ENTITIES={amp:'&',gt:'>',lt:'<',quot:'"',apos:'\''},t.ENTITIES={amp:'&',gt:'>',lt:'<',quot:'"',apos:'\'',AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(t.ENTITIES).forEach(function(n){var r=t.ENTITIES[n],a='number'==typeof r?Gd(r):r;t.ENTITIES[n]=a}),t.STATE)t.STATE[t.STATE[S]]=S;U=t.STATE,O||function(){var e=function(){var e=[],t=-1,n=arguments.length,r,a;if(!n)return'';for(var o='',i;++ti||1114111=i?e.push(i):(i-=65536,r=(i>>10)+55296,a=i%1024+56320,e.push(r,a)),(t+1===n||e.length>16384)&&(o+=Gd.apply(null,e),e.length=0)}return o};Object.defineProperty?Object.defineProperty(String,'fromCodePoint',{value:e,configurable:!0,writable:!0}):O=e}()})(t)}),Oc={Text:'text',Directive:'directive',Comment:'comment',Script:'script',Style:'style',Tag:'tag',CDATA:'cdata',Doctype:'doctype',isTag:function(e){return'tag'===e.type||'script'===e.type||'style'===e.type}},Pc={Text:'text',Directive:'directive',Comment:'comment',Script:'script',Style:'style',Tag:'tag',CDATA:'cdata',isTag:function(e){return'tag'===e.type||'script'===e.type||'style'===e.type}},Lc='&',qc='\'',Rc='>',Dc='<',Nc='"',Bc={amp:Lc,apos:qc,gt:Rc,lt:Dc,quot:Nc},Ic=Object.freeze({amp:Lc,apos:qc,gt:Rc,lt:Dc,quot:Nc,default:Bc}),zc='\xC1',_c='\xE1',Mc='\u0102',Gc='\u0103',Uc='\u223E',Vc='\u223F',Wc='\u223E\u0333',Fc='\xC2',jc='\xE2',Hc='\xB4',Yc='\u0410',$c='\u0430',Kc='\xC6',Xc='\xE6',Qc='\u2061',Zc='\uD835\uDD04',Jc='\uD835\uDD1E',ep='\xC0',tp='\xE0',np='\u2135',rp='\u2135',op='\u0391',ip='\u03B1',sp='\u0100',lp='\u0101',dp='\u2A3F',cp='&',pp='&',up='\u2A55',gp='\u2A53',hp='\u2227',fp='\u2A5C',yp='\u2A58',bp='\u2A5A',xp='\u2220',kp='\u29A4',Sp='\u2220',vp='\u29A8',Tp='\u29A9',Cp='\u29AA',Ep='\u29AB',Ap='\u29AC',Op='\u29AD',Pp='\u29AE',Lp='\u29AF',qp='\u2221',Rp='\u221F',Dp='\u22BE',Np='\u299D',Bp='\u2222',Ip='\xC5',zp='\u237C',_p='\u0104',Mp='\u0105',Gp='\uD835\uDD38',Up='\uD835\uDD52',Vp='\u2A6F',Wp='\u2248',Fp='\u2A70',jp='\u224A',Hp='\u224B',Yp='\'',$p='\u2061',Kp='\u2248',Xp='\u224A',Qp='\xC5',Zp='\xE5',Jp='\uD835\uDC9C',eu='\uD835\uDCB6',tu='\u2254',ru='*',au='\u2248',ou='\u224D',iu='\xC3',su='\xE3',lu='\xC4',du='\xE4',cu='\u2233',pu='\u2A11',uu='\u224C',gu='\u03F6',hu='\u2035',fu='\u223D',yu='\u22CD',bu='\u2216',xu='\u2AE7',ku='\u22BD',Su='\u2305',wu='\u2306',vu='\u2305',Tu='\u23B5',Cu='\u23B6',Eu='\u224C',Au='\u0411',Ou='\u0431',Pu='\u201E',Lu='\u2235',qu='\u2235',Ru='\u2235',Du='\u29B0',Bu='\u03F6',Iu='\u212C',zu='\u212C',_u='\u0392',Gu='\u03B2',Uu='\u2136',Vu='\u226C',Wu='\uD835\uDD05',Fu='\uD835\uDD1F',ju='\u22C2',Hu='\u25EF',Yu='\u22C3',$u='\u2A00',Ku='\u2A01',Xu='\u2A02',Qu='\u2A06',Zu='\u2605',Ju='\u25BD',em='\u25B3',tm='\u2A04',nm='\u22C1',rm='\u22C0',am='\u290D',om='\u29EB',im='\u25AA',sm='\u25B4',lm='\u25BE',dm='\u25C2',cm='\u25B8',um='\u2423',mm='\u2592',gm='\u2591',hm='\u2593',fm='\u2588',ym='=\u20E5',bm='\u2261\u20E5',xm='\u2AED',km='\u2310',Sm='\uD835\uDD39',wm='\uD835\uDD53',vm='\u22A5',Tm='\u22A5',Cm='\u22C8',Em='\u29C9',Am='\u2510',Om='\u2555',Pm='\u2556',Lm='\u2557',qm='\u250C',Rm='\u2552',Dm='\u2553',Nm='\u2554',Bm='\u2500',zm='\u2550',_m='\u252C',Mm='\u2564',Gm='\u2565',Um='\u2566',Vm='\u2534',Wm='\u2567',Fm='\u2568',jm='\u2569',Hm='\u229F',Ym='\u229E',$m='\u22A0',Km='\u2518',Xm='\u255B',Qm='\u255C',Zm='\u255D',Jm='\u2514',tg='\u2558',ng='\u2559',rg='\u255A',ag='\u2502',og='\u2551',ig='\u253C',sg='\u256A',dg='\u256B',cg='\u256C',pg='\u2524',ug='\u2561',mg='\u2562',hg='\u2563',fg='\u251C',yg='\u255E',bg='\u255F',xg='\u2560',kg='\u2035',Sg='\u02D8',wg='\u02D8',vg='\xA6',Tg='\uD835\uDCB7',Cg='\u212C',Eg='\u204F',Ag='\u223D',Og='\u22CD',Pg='\u29C5',Lg='\\',qg='\u27C8',Rg='\u2022',Dg='\u2022',Ng='\u224E',Bg='\u2AAE',Ig='\u224F',zg='\u224E',_g='\u224F',Mg='\u0106',Ug='\u0107',Vg='\u2A44',Wg='\u2A49',Fg='\u2A4B',jg='\u2229',Hg='\u22D2',Yg='\u2A47',$g='\u2A40',Kg='\u2145',Xg='\u2229\uFE00',Qg='\u2041',Zg='\u02C7',Jg='\u212D',eh='\u2A4D',th='\u010C',nh='\u010D',rh='\xC7',ah='\xE7',oh='\u0108',ih='\u0109',sh='\u2230',lh='\u2A4C',dh='\u2A50',ch='\u010A',ph='\u010B',uh='\xB8',mh='\xB8',gh='\u29B2',hh='\xA2',fh='\xB7',yh='\xB7',bh='\uD835\uDD20',xh='\u212D',kh='\u0427',Sh='\u0447',wh='\u2713',vh='\u2713',Th='\u03A7',Ch='\u03C7',Eh='\u02C6',Ah='\u2257',Oh='\u21BA',Ph='\u21BB',Lh='\u229B',qh='\u229A',Rh='\u229D',Dh='\u2299',Nh='\xAE',Bh='\u24C8',Ih='\u2296',zh='\u2295',_h='\u2297',Mh='\u25CB',Gh='\u29C3',Uh='\u2257',Vh='\u2A10',Wh='\u2AEF',Fh='\u29C2',jh='\u2232',Hh='\u201D',Yh='\u2019',$h='\u2663',Kh='\u2663',Xh=':',Qh='\u2237',Zh='\u2A74',Jh='\u2254',ef='\u2254',tf=',',nf='@',rf='\u2201',of='\u2218',sf='\u2201',lf='\u2102',df='\u2245',cf='\u2A6D',pf='\u2261',uf='\u222E',mf='\u222F',gf='\u222E',hf='\uD835\uDD54',ff='\u2102',yf='\u2210',bf='\u2210',xf='\xA9',kf='\xA9',Sf='\u2117',wf='\u2233',vf='\u21B5',Tf='\u2717',Cf='\u2A2F',Ef='\uD835\uDC9E',Af='\uD835\uDCB8',Of='\u2ACF',Pf='\u2AD1',Lf='\u2AD0',qf='\u2AD2',Rf='\u22EF',Df='\u2938',Nf='\u2935',Bf='\u22DE',If='\u22DF',zf='\u21B6',_f='\u293D',Mf='\u2A48',Gf='\u2A46',Uf='\u224D',Vf='\u222A',Wf='\u22D3',Ff='\u2A4A',jf='\u228D',Hf='\u2A45',Yf='\u222A\uFE00',$f='\u21B7',Kf='\u293C',Xf='\u22DE',Qf='\u22DF',Zf='\u22CE',Jf='\u22CF',ey='\xA4',ty='\u21B6',ny='\u21B7',ry='\u22CE',ay='\u22CF',oy='\u2232',iy='\u2231',sy='\u232D',ly='\u2020',dy='\u2021',cy='\u2138',py='\u2193',uy='\u21A1',my='\u21D3',gy='\u2010',hy='\u2AE4',fy='\u22A3',yy='\u290F',by='\u02DD',xy='\u010E',ky='\u010F',Sy='\u0414',wy='\u0434',vy='\u2021',Ty='\u21CA',Cy='\u2145',Ey='\u2146',Ay='\u2911',Oy='\u2A77',Py='\xB0',Ly='\u2207',qy='\u0394',Ry='\u03B4',Dy='\u29B1',Ny='\u297F',By='\uD835\uDD07',Iy='\uD835\uDD21',zy='\u2965',_y='\u21C3',My='\u21C2',Gy='\xB4',Uy='\u02D9',Vy='\u02DD',Wy='`',Fy='\u02DC',jy='\u22C4',Hy='\u22C4',Yy='\u22C4',$y='\u2666',Ky='\u2666',Xy='\xA8',Qy='\u2146',Zy='\u03DD',Jy='\u22F2',eb='\xF7',tb='\xF7',nb='\u22C7',rb='\u22C7',ab='\u0402',ob='\u0452',ib='\u231E',sb='\u230D',lb='$',db='\uD835\uDD3B',cb='\uD835\uDD55',pb='\xA8',ub='\u02D9',mb='\u20DC',gb='\u2250',hb='\u2251',fb='\u2250',yb='\u2238',bb='\u2214',xb='\u22A1',kb='\u2306',Sb='\u222F',wb='\xA8',vb='\u21D3',Tb='\u21D0',Cb='\u21D4',Eb='\u2AE4',Ab='\u27F8',Ob='\u27FA',Pb='\u27F9',Lb='\u21D2',qb='\u22A8',Rb='\u21D1',Db='\u21D5',Nb='\u2225',Bb='\u2913',Ib='\u2193',zb='\u2193',_b='\u21D3',Mb='\u21F5',Gb='\u0311',Ub='\u21CA',Vb='\u21C3',Wb='\u21C2',Fb='\u2950',jb='\u295E',Hb='\u2956',Yb='\u21BD',$b='\u295F',Kb='\u2957',Xb='\u21C1',Qb='\u21A7',Zb='\u22A4',Jb='\u2910',ex='\u231F',tx='\u230C',nx='\uD835\uDC9F',ax='\uD835\uDCB9',ox='\u0405',ix='\u0455',sx='\u29F6',lx='\u0110',dx='\u0111',cx='\u22F1',px='\u25BF',ux='\u25BE',mx='\u21F5',gx='\u296F',hx='\u29A6',fx='\u040F',yx='\u045F',bx='\u27FF',xx='\xC9',kx='\xE9',Sx='\u2A6E',wx='\u011A',vx='\u011B',Tx='\xCA',Cx='\xEA',Ex='\u2256',Ax='\u2255',Ox='\u042D',Px='\u044D',Lx='\u2A77',qx='\u0116',Rx='\u0117',Dx='\u2251',Nx='\u2147',Bx='\u2252',Ix='\uD835\uDD08',zx='\uD835\uDD22',_x='\u2A9A',Mx='\xC8',Gx='\xE8',Ux='\u2A96',Vx='\u2A98',Wx='\u2A99',Fx='\u2208',jx='\u23E7',Hx='\u2113',Yx='\u2A95',$x='\u2A97',Kx='\u0112',Xx='\u0113',Qx='\u2205',Zx='\u2205',Jx='\u25FB',ek='\u2205',tk='\u25AB',nk='\u2004',rk='\u2005',ak='\u2003',ok='\u014A',ik='\u014B',sk='\u2002',lk='\u0118',dk='\u0119',ck='\uD835\uDD3C',pk='\uD835\uDD56',uk='\u22D5',mk='\u29E3',gk='\u2A71',hk='\u03B5',fk='\u0395',yk='\u03B5',bk='\u03F5',xk='\u2256',kk='\u2255',Sk='\u2242',wk='\u2A96',vk='\u2A95',Tk='\u2A75',Ck='=',Ek='\u2242',Ak='\u225F',Ok='\u21CC',Pk='\u2261',Lk='\u2A78',qk='\u29E5',Rk='\u2971',Dk='\u2253',Nk='\u212F',Bk='\u2130',Ik='\u2250',zk='\u2A73',_k='\u2242',Mk='\u0397',Gk='\u03B7',Uk='\xD0',Vk='\xF0',Wk='\xCB',Fk='\xEB',jk='\u20AC',Hk='!',Yk='\u2203',$k='\u2203',Kk='\u2130',Xk='\u2147',Qk='\u2147',Zk='\u2252',Jk='\u0424',eS='\u0444',tS='\u2640',nS='\uFB03',rS='\uFB00',aS='\uFB04',iS='\uD835\uDD09',sS='\uD835\uDD23',lS='\uFB01',dS='\u25FC',cS='\u25AA',pS='fj',uS='\u266D',mS='\uFB02',gS='\u25B1',hS='\u0192',fS='\uD835\uDD3D',yS='\uD835\uDD57',bS='\u2200',xS='\u2200',kS='\u22D4',SS='\u2AD9',wS='\u2131',vS='\u2A0D',TS='\xBD',CS='\u2153',ES='\xBC',AS='\u2155',OS='\u2159',PS='\u215B',LS='\u2154',qS='\u2156',RS='\xBE',DS='\u2157',NS='\u215C',BS='\u2158',IS='\u215A',zS='\u215D',_S='\u215E',MS='\u2044',GS='\u2322',US='\uD835\uDCBB',VS='\u2131',WS='\u01F5',FS='\u0393',jS='\u03B3',HS='\u03DC',YS='\u03DD',$S='\u2A86',KS='\u011E',XS='\u011F',QS='\u0122',ZS='\u011C',JS='\u011D',ew='\u0413',tw='\u0433',nw='\u0120',rw='\u0121',aw='\u2265',ow='\u2267',iw='\u2A8C',sw='\u22DB',lw='\u2265',dw='\u2267',cw='\u2A7E',pw='\u2AA9',uw='\u2A7E',mw='\u2A80',gw='\u2A82',hw='\u2A84',fw='\u22DB\uFE00',yw='\u2A94',bw='\uD835\uDD0A',xw='\uD835\uDD24',kw='\u226B',Sw='\u22D9',ww='\u22D9',vw='\u2137',Tw='\u0403',Cw='\u0453',Ew='\u2AA5',Aw='\u2277',Ow='\u2A92',Pw='\u2AA4',Lw='\u2A8A',qw='\u2A8A',Rw='\u2A88',Dw='\u2269',Nw='\u2A88',Bw='\u2269',Iw='\u22E7',zw='\uD835\uDD3E',_w='\uD835\uDD58',Mw='`',Gw='\u2265',Uw='\u22DB',Vw='\u2267',Ww='\u2AA2',Fw='\u2277',jw='\u2A7E',Hw='\u2273',Yw='\uD835\uDCA2',$w='\u210A',Kw='\u2273',Xw='\u2A8E',Qw='\u2A90',Zw='\u2AA7',Jw='\u2A7A',ev='>',tv='>',nv='\u226B',rv='\u22D7',av='\u2995',ov='\u2A7C',iv='\u2A86',sv='\u2978',lv='\u22D7',dv='\u22DB',cv='\u2A8C',pv='\u2277',uv='\u2273',mv='\u2269\uFE00',gv='\u2269\uFE00',hv='\u02C7',fv='\u200A',yv='\xBD',bv='\u210B',xv='\u042A',kv='\u044A',Sv='\u2948',wv='\u2194',vv='\u21D4',Tv='\u21AD',Cv='^',Ev='\u210F',Av='\u0124',Ov='\u0125',Pv='\u2665',Lv='\u2665',qv='\u2026',Rv='\u22B9',Dv='\uD835\uDD25',Nv='\u210C',Bv='\u210B',Iv='\u2925',zv='\u2926',_v='\u21FF',Mv='\u223B',Gv='\u21A9',Uv='\u21AA',Vv='\uD835\uDD59',Wv='\u210D',Fv='\u2015',jv='\u2500',Hv='\uD835\uDCBD',Yv='\u210B',$v='\u210F',Kv='\u0126',Xv='\u0127',Qv='\u224E',Zv='\u224F',Jv='\u2043',eT='\u2010',tT='\xCD',nT='\xED',rT='\u2063',aT='\xCE',oT='\xEE',iT='\u0418',sT='\u0438',lT='\u0130',dT='\u0415',cT='\u0435',pT='\xA1',uT='\u21D4',mT='\uD835\uDD26',gT='\u2111',hT='\xCC',fT='\xEC',yT='\u2148',bT='\u2A0C',xT='\u222D',kT='\u29DC',ST='\u2129',wT='\u0132',vT='\u0133',TT='\u012A',CT='\u012B',ET='\u2111',AT='\u2148',OT='\u2110',PT='\u2111',qT='\u0131',RT='\u2111',DT='\u22B7',NT='\u01B5',BT='\u21D2',IT='\u2105',zT='\u221E',_T='\u29DD',MT='\u0131',UT='\u22BA',VT='\u222B',WT='\u222C',FT='\u2124',jT='\u222B',HT='\u22BA',YT='\u22C2',$T='\u2A17',KT='\u2A3C',XT='\u2063',QT='\u2062',ZT='\u0401',JT='\u0451',eC='\u012E',tC='\u012F',nC='\uD835\uDD40',rC='\uD835\uDD5A',aC='\u0399',oC='\u03B9',iC='\u2A3C',sC='\xBF',lC='\uD835\uDCBE',dC='\u2110',cC='\u2208',pC='\u22F5',uC='\u22F9',mC='\u22F4',gC='\u22F3',hC='\u2208',fC='\u2062',yC='\u0128',bC='\u0129',xC='\u0406',kC='\u0456',SC='\xCF',wC='\xEF',vC='\u0134',TC='\u0135',CC='\u0419',EC='\u0439',AC='\uD835\uDD0D',OC='\uD835\uDD27',PC='\u0237',LC='\uD835\uDD41',qC='\uD835\uDD5B',RC='\uD835\uDCA5',DC='\uD835\uDCBF',NC='\u0408',BC='\u0458',IC='\u0404',zC='\u0454',_C='\u039A',MC='\u03BA',GC='\u03F0',UC='\u0136',VC='\u0137',WC='\u041A',FC='\u043A',jC='\uD835\uDD0E',HC='\uD835\uDD28',YC='\u0138',$C='\u0425',KC='\u0445',XC='\u040C',QC='\u045C',ZC='\uD835\uDD42',JC='\uD835\uDD5C',eE='\uD835\uDCA6',tE='\uD835\uDCC0',nE='\u21DA',rE='\u0139',aE='\u013A',oE='\u29B4',iE='\u2112',sE='\u039B',dE='\u03BB',cE='\u27E8',pE='\u27EA',uE='\u2991',mE='\u27E8',hE='\u2A85',fE='\u2112',yE='\xAB',bE='\u21E4',xE='\u291F',kE='\u2190',SE='\u219E',wE='\u21D0',vE='\u291D',TE='\u21A9',CE='\u21AB',EE='\u2939',AE='\u2973',OE='\u21A2',PE='\u2919',LE='\u291B',qE='\u2AAB',RE='\u2AAD',DE='\u2AAD\uFE00',NE='\u290C',BE='\u290E',IE='\u2772',zE='{',_E='[',ME='\u298B',GE='\u298F',UE='\u298D',VE='\u013D',WE='\u013E',FE='\u013B',jE='\u013C',HE='\u2308',YE='{',$E='\u041B',KE='\u043B',XE='\u2936',QE='\u201C',ZE='\u201E',JE='\u2967',eA='\u294B',tA='\u21B2',nA='\u2264',rA='\u2266',aA='\u27E8',oA='\u21E4',iA='\u2190',sA='\u2190',lA='\u21D0',dA='\u21C6',cA='\u21A2',pA='\u2308',uA='\u27E6',mA='\u2961',gA='\u2959',hA='\u21C3',fA='\u230A',yA='\u21BD',bA='\u21BC',xA='\u21C7',kA='\u2194',SA='\u2194',wA='\u21D4',vA='\u21C6',TA='\u21CB',CA='\u21AD',EA='\u294E',AA='\u21A4',OA='\u22A3',PA='\u295A',LA='\u22CB',qA='\u29CF',RA='\u22B2',DA='\u22B4',NA='\u2951',BA='\u2960',IA='\u2958',zA='\u21BF',_A='\u2952',MA='\u21BC',GA='\u2A8B',UA='\u22DA',VA='\u2264',WA='\u2266',FA='\u2A7D',jA='\u2AA8',HA='\u2A7D',YA='\u2A7F',$A='\u2A81',KA='\u2A83',XA='\u22DA\uFE00',QA='\u2A93',ZA='\u2A85',JA='\u22D6',eO='\u22DA',tO='\u2A8B',nO='\u22DA',rO='\u2266',aO='\u2276',oO='\u2276',iO='\u2AA1',sO='\u2272',lO='\u2A7D',dO='\u2272',cO='\u297C',pO='\u230A',uO='\uD835\uDD0F',mO='\uD835\uDD29',gO='\u2276',hO='\u2A91',fO='\u2962',yO='\u21BD',bO='\u21BC',xO='\u296A',kO='\u2584',SO='\u0409',wO='\u0459',vO='\u21C7',TO='\u226A',CO='\u22D8',EO='\u231E',AO='\u21DA',OO='\u296B',PO='\u25FA',LO='\u013F',qO='\u0140',RO='\u23B0',DO='\u23B0',NO='\u2A89',BO='\u2A89',IO='\u2A87',zO='\u2268',_O='\u2A87',MO='\u2268',GO='\u22E6',UO='\u27EC',VO='\u21FD',WO='\u27E6',FO='\u27F5',jO='\u27F5',HO='\u27F8',YO='\u27F7',$O='\u27F7',KO='\u27FA',XO='\u27FC',QO='\u27F6',ZO='\u27F6',JO='\u27F9',eP='\u21AB',tP='\u21AC',nP='\u2985',rP='\uD835\uDD43',aP='\uD835\uDD5D',oP='\u2A2D',iP='\u2A34',sP='\u2217',lP='_',dP='\u2199',cP='\u2198',pP='\u25CA',uP='\u25CA',mP='\u29EB',gP='(',hP='\u2993',fP='\u21C6',yP='\u231F',bP='\u21CB',xP='\u296D',kP='\u200E',SP='\u22BF',wP='\u2039',vP='\uD835\uDCC1',TP='\u2112',CP='\u21B0',EP='\u21B0',AP='\u2272',OP='\u2A8D',PP='\u2A8F',LP='[',qP='\u2018',RP='\u201A',DP='\u0141',NP='\u0142',BP='\u2AA6',IP='\u2A79',zP='<',_P='<',MP='\u226A',GP='\u22D6',UP='\u22CB',VP='\u22C9',WP='\u2976',FP='\u2A7B',jP='\u25C3',HP='\u22B4',YP='\u25C2',$P='\u2996',KP='\u294A',XP='\u2966',QP='\u2268\uFE00',ZP='\u2268\uFE00',JP='\xAF',eL='\u2642',tL='\u2720',nL='\u2720',rL='\u21A6',aL='\u21A6',oL='\u21A7',iL='\u21A4',sL='\u21A5',lL='\u25AE',dL='\u2A29',cL='\u041C',pL='\u043C',uL='\u2014',mL='\u223A',gL='\u2221',hL='\u205F',fL='\u2133',yL='\uD835\uDD10',bL='\uD835\uDD2A',xL='\u2127',kL='\xB5',SL='*',wL='\u2AF0',vL='\u2223',TL='\xB7',CL='\u229F',EL='\u2212',AL='\u2238',OL='\u2A2A',PL='\u2213',LL='\u2ADB',qL='\u2026',RL='\u2213',DL='\u22A7',NL='\uD835\uDD44',BL='\uD835\uDD5E',IL='\u2213',zL='\uD835\uDCC2',_L='\u2133',ML='\u223E',GL='\u039C',UL='\u03BC',VL='\u22B8',WL='\u22B8',FL='\u2207',jL='\u0143',HL='\u0144',YL='\u2220\u20D2',$L='\u2249',KL='\u2A70\u0338',XL='\u224B\u0338',QL='\u0149',ZL='\u2249',JL='\u266E',eq='\u2115',tq='\u266E',nq='\xA0',rq='\u224E\u0338',aq='\u224F\u0338',oq='\u2A43',iq='\u0147',sq='\u0148',lq='\u0145',dq='\u0146',cq='\u2247',pq='\u2A6D\u0338',uq='\u2A42',mq='\u041D',gq='\u043D',hq='\u2013',fq='\u2924',yq='\u2197',bq='\u21D7',xq='\u2197',kq='\u2260',Sq='\u2250\u0338',wq='\u200B',vq='\u200B',Tq='\u200B',Cq='\u200B',Eq='\u2262',Aq='\u2928',Oq='\u2242\u0338',Pq='\u226B',Lq='\u226A',qq='\n',Rq='\u2204',Dq='\u2204',Nq='\uD835\uDD11',Bq='\uD835\uDD2B',Iq='\u2267\u0338',zq='\u2271',_q='\u2271',Mq='\u2267\u0338',Gq='\u2A7E\u0338',Uq='\u2A7E\u0338',Vq='\u22D9\u0338',Wq='\u2275',Fq='\u226B\u20D2',jq='\u226F',Hq='\u226F',Yq='\u226B\u0338',$q='\u21AE',Kq='\u21CE',Xq='\u2AF2',Qq='\u220B',Zq='\u22FC',Jq='\u22FA',eR='\u220B',tR='\u040A',nR='\u045A',rR='\u219A',aR='\u21CD',oR='\u2025',iR='\u2266\u0338',sR='\u2270',lR='\u219A',dR='\u21CD',cR='\u21AE',pR='\u21CE',uR='\u2270',mR='\u2266\u0338',gR='\u2A7D\u0338',hR='\u2A7D\u0338',fR='\u226E',yR='\u22D8\u0338',bR='\u2274',xR='\u226A\u20D2',kR='\u226E',SR='\u22EA',wR='\u22EC',vR='\u226A\u0338',TR='\u2224',CR='\u2060',ER='\xA0',AR='\uD835\uDD5F',OR='\u2115',PR='\u2AEC',LR='\xAC',qR='\u2262',RR='\u226D',DR='\u2226',NR='\u2209',BR='\u2260',IR='\u2242\u0338',zR='\u2204',_R='\u226F',MR='\u2271',GR='\u2267\u0338',UR='\u226B\u0338',VR='\u2279',WR='\u2A7E\u0338',FR='\u2275',jR='\u224E\u0338',HR='\u224F\u0338',YR='\u2209',$R='\u22F5\u0338',KR='\u22F9\u0338',XR='\u2209',QR='\u22F7',ZR='\u22F6',JR='\u29CF\u0338',eD='\u22EA',tD='\u22EC',nD='\u226E',rD='\u2270',aD='\u2278',oD='\u226A\u0338',iD='\u2A7D\u0338',sD='\u2274',lD='\u2AA2\u0338',dD='\u2AA1\u0338',cD='\u220C',pD='\u220C',uD='\u22FE',mD='\u22FD',gD='\u2280',hD='\u2AAF\u0338',fD='\u22E0',yD='\u220C',bD='\u29D0\u0338',xD='\u22EB',kD='\u22ED',SD='\u228F\u0338',wD='\u22E2',vD='\u2290\u0338',TD='\u22E3',CD='\u2282\u20D2',ED='\u2288',AD='\u2281',OD='\u2AB0\u0338',PD='\u22E1',LD='\u227F\u0338',qD='\u2283\u20D2',RD='\u2289',ND='\u2241',BD='\u2244',ID='\u2247',zD='\u2249',_D='\u2224',MD='\u2226',GD='\u2226',UD='\u2AFD\u20E5',VD='\u2202\u0338',WD='\u2A14',FD='\u2280',jD='\u22E0',HD='\u2280',YD='\u2AAF\u0338',$D='\u2AAF\u0338',KD='\u2933\u0338',XD='\u219B',QD='\u21CF',ZD='\u219D\u0338',JD='\u219B',eN='\u21CF',tN='\u22EB',nN='\u22ED',rN='\u2281',aN='\u22E1',oN='\u2AB0\u0338',iN='\uD835\uDCA9',sN='\uD835\uDCC3',lN='\u2224',dN='\u2226',cN='\u2241',pN='\u2244',uN='\u2244',mN='\u2224',gN='\u2226',hN='\u22E2',fN='\u22E3',yN='\u2284',bN='\u2AC5\u0338',xN='\u2288',kN='\u2282\u20D2',SN='\u2288',wN='\u2AC5\u0338',vN='\u2281',TN='\u2AB0\u0338',CN='\u2285',EN='\u2AC6\u0338',AN='\u2289',ON='\u2283\u20D2',PN='\u2289',LN='\u2AC6\u0338',qN='\u2279',RN='\xD1',DN='\xF1',NN='\u2278',BN='\u22EA',IN='\u22EC',zN='\u22EB',_N='\u22ED',MN='\u039D',GN='\u03BD',UN='#',VN='\u2116',WN='\u2007',FN='\u224D\u20D2',jN='\u22AC',HN='\u22AD',YN='\u22AE',$N='\u22AF',KN='\u2265\u20D2',XN='>\u20D2',QN='\u2904',ZN='\u29DE',JN='\u2902',eB='\u2264\u20D2',tB='<\u20D2',nB='\u22B4\u20D2',rB='\u2903',aB='\u22B5\u20D2',oB='\u223C\u20D2',iB='\u2923',sB='\u2196',lB='\u21D6',dB='\u2196',cB='\u2927',pB='\xD3',uB='\xF3',mB='\u229B',gB='\xD4',hB='\xF4',fB='\u229A',yB='\u041E',bB='\u043E',xB='\u229D',kB='\u0150',SB='\u0151',wB='\u2A38',vB='\u2299',TB='\u29BC',CB='\u0152',EB='\u0153',AB='\u29BF',OB='\uD835\uDD12',PB='\uD835\uDD2C',LB='\u02DB',qB='\xD2',RB='\xF2',DB='\u29C1',NB='\u29B5',BB='\u03A9',IB='\u222E',zB='\u21BA',_B='\u29BE',MB='\u29BB',GB='\u203E',UB='\u29C0',VB='\u014C',WB='\u014D',FB='\u03A9',jB='\u03C9',HB='\u039F',YB='\u03BF',$B='\u29B6',KB='\u2296',XB='\uD835\uDD46',QB='\uD835\uDD60',ZB='\u29B7',JB='\u201C',eI='\u2018',tI='\u29B9',nI='\u2295',rI='\u21BB',aI='\u2A54',oI='\u2228',iI='\u2A5D',sI='\u2134',lI='\u2134',dI='\xAA',cI='\xBA',pI='\u22B6',uI='\u2A56',mI='\u2A57',gI='\u2A5B',hI='\u24C8',fI='\uD835\uDCAA',yI='\u2134',bI='\xD8',xI='\xF8',kI='\u2298',SI='\xD5',wI='\xF5',vI='\u2A36',TI='\u2A37',CI='\u2297',EI='\xD6',AI='\xF6',OI='\u233D',PI='\u203E',LI='\u23DE',qI='\u23B4',RI='\u23DC',DI='\xB6',NI='\u2225',BI='\u2225',II='\u2AF3',zI='\u2AFD',_I='\u2202',MI='\u2202',GI='\u041F',UI='\u043F',VI='%',WI='.',FI='\u2030',jI='\u22A5',HI='\u2031',YI='\uD835\uDD13',$I='\uD835\uDD2D',KI='\u03A6',XI='\u03C6',QI='\u03D5',ZI='\u2133',JI='\u260E',ez='\u03A0',tz='\u03C0',nz='\u22D4',rz='\u03D6',az='\u210F',oz='\u210E',iz='\u210F',sz='\u2A23',lz='\u229E',dz='\u2A22',cz='+',pz='\u2214',uz='\u2A25',mz='\u2A72',gz='\xB1',hz='\xB1',fz='\u2A26',yz='\u2A27',bz='\xB1',xz='\u210C',kz='\u2A15',Sz='\uD835\uDD61',wz='\u2119',vz='\xA3',Tz='\u2AB7',Cz='\u2ABB',Ez='\u227A',Az='\u227C',Oz='\u2AB7',Pz='\u227A',Lz='\u227C',qz='\u227A',Rz='\u2AAF',Dz='\u227C',Nz='\u227E',Bz='\u2AAF',Iz='\u2AB9',zz='\u2AB5',_z='\u22E8',Mz='\u2AAF',Gz='\u2AB3',Uz='\u227E',Vz='\u2032',Wz='\u2033',Fz='\u2119',jz='\u2AB9',Hz='\u2AB5',Yz='\u22E8',$z='\u220F',Kz='\u220F',Xz='\u232E',Qz='\u2312',Zz='\u2313',Jz='\u221D',e_='\u221D',t_='\u2237',n_='\u221D',r_='\u227E',a_='\u22B0',o_='\uD835\uDCAB',i_='\uD835\uDCC5',s_='\u03A8',l_='\u03C8',d_='\u2008',c_='\uD835\uDD14',p_='\uD835\uDD2E',u_='\u2A0C',m_='\uD835\uDD62',g_='\u211A',h_='\u2057',f_='\uD835\uDCAC',y_='\uD835\uDCC6',b_='\u210D',x_='\u2A16',k_='?',S_='\u225F',w_='"',v_='"',T_='\u21DB',C_='\u223D\u0331',E_='\u0154',A_='\u0155',O_='\u221A',P_='\u29B3',L_='\u27E9',q_='\u27EB',R_='\u2992',D_='\u29A5',N_='\u27E9',B_='\xBB',I_='\u2975',z_='\u21E5',__='\u2920',M_='\u2933',G_='\u2192',U_='\u21A0',V_='\u21D2',W_='\u291E',F_='\u21AA',j_='\u21AC',H_='\u2945',Y_='\u2974',$_='\u2916',K_='\u21A3',X_='\u219D',Q_='\u291A',Z_='\u291C',J_='\u2236',eM='\u211A',tM='\u290D',nM='\u290F',rM='\u2910',aM='\u2773',oM='}',iM=']',sM='\u298C',lM='\u298E',dM='\u2990',cM='\u0158',pM='\u0159',uM='\u0156',mM='\u0157',gM='\u2309',hM='}',fM='\u0420',yM='\u0440',bM='\u2937',xM='\u2969',kM='\u201D',SM='\u201D',wM='\u21B3',vM='\u211C',TM='\u211B',CM='\u211C',EM='\u211D',AM='\u211C',OM='\u25AD',PM='\xAE',LM='\xAE',qM='\u220B',RM='\u21CB',DM='\u296F',NM='\u297D',BM='\u230B',IM='\uD835\uDD2F',zM='\u211C',_M='\u2964',MM='\u21C1',GM='\u21C0',UM='\u296C',VM='\u03A1',WM='\u03C1',FM='\u03F1',jM='\u27E9',HM='\u21E5',YM='\u2192',$M='\u2192',KM='\u21D2',XM='\u21C4',QM='\u21A3',ZM='\u2309',JM='\u27E7',eG='\u295D',tG='\u2955',nG='\u21C2',rG='\u230B',aG='\u21C1',oG='\u21C0',iG='\u21C4',sG='\u21CC',lG='\u21C9',dG='\u219D',cG='\u21A6',pG='\u22A2',uG='\u295B',mG='\u22CC',gG='\u29D0',hG='\u22B3',fG='\u22B5',yG='\u294F',bG='\u295C',xG='\u2954',kG='\u21BE',SG='\u2953',wG='\u21C0',vG='\u02DA',TG='\u2253',CG='\u21C4',EG='\u21CC',AG='\u200F',OG='\u23B1',PG='\u23B1',LG='\u2AEE',qG='\u27ED',RG='\u21FE',DG='\u27E7',NG='\u2986',BG='\uD835\uDD63',IG='\u211D',zG='\u2A2E',_G='\u2A35',MG='\u2970',GG=')',UG='\u2994',VG='\u2A12',WG='\u21C9',FG='\u21DB',jG='\u203A',HG='\uD835\uDCC7',YG='\u211B',$G='\u21B1',KG='\u21B1',XG=']',QG='\u2019',ZG='\u2019',JG='\u22CC',eU='\u22CA',tU='\u25B9',nU='\u22B5',rU='\u25B8',aU='\u29CE',oU='\u29F4',iU='\u2968',sU='\u211E',lU='\u015A',dU='\u015B',cU='\u201A',pU='\u2AB8',uU='\u0160',mU='\u0161',gU='\u2ABC',hU='\u227B',fU='\u227D',yU='\u2AB0',bU='\u2AB4',xU='\u015E',kU='\u015F',SU='\u015C',wU='\u015D',vU='\u2ABA',TU='\u2AB6',CU='\u22E9',EU='\u2A13',AU='\u227F',OU='\u0421',PU='\u0441',LU='\u22A1',qU='\u22C5',RU='\u2A66',DU='\u2925',NU='\u2198',BU='\u21D8',IU='\u2198',zU='\xA7',_U=';',MU='\u2929',GU='\u2216',UU='\u2216',VU='\u2736',WU='\uD835\uDD16',FU='\uD835\uDD30',jU='\u2322',HU='\u266F',YU='\u0429',$U='\u0449',KU='\u0428',XU='\u0448',QU='\u2193',ZU='\u2190',JU='\u2223',eV='\u2225',tV='\u2192',nV='\u2191',rV='\xAD',aV='\u03A3',oV='\u03C3',iV='\u03C2',sV='\u03C2',lV='\u223C',dV='\u2A6A',cV='\u2243',pV='\u2243',uV='\u2A9E',mV='\u2AA0',gV='\u2A9D',hV='\u2A9F',fV='\u2246',yV='\u2A24',bV='\u2972',xV='\u2190',kV='\u2218',SV='\u2216',wV='\u2A33',vV='\u29E4',TV='\u2223',CV='\u2323',EV='\u2AAA',AV='\u2AAC',OV='\u2AAC\uFE00',PV='\u042C',LV='\u044C',qV='\u233F',RV='\u29C4',DV='/',NV='\uD835\uDD4A',BV='\uD835\uDD64',IV='\u2660',zV='\u2660',_V='\u2225',MV='\u2293',GV='\u2293\uFE00',UV='\u2294',VV='\u2294\uFE00',WV='\u221A',FV='\u228F',jV='\u2291',HV='\u228F',YV='\u2291',$V='\u2290',KV='\u2292',XV='\u2290',QV='\u2292',ZV='\u25A1',JV='\u25A1',eW='\u2293',tW='\u228F',nW='\u2291',rW='\u2290',aW='\u2292',oW='\u2294',iW='\u25AA',sW='\u25A1',lW='\u25AA',dW='\u2192',cW='\uD835\uDCAE',pW='\uD835\uDCC8',uW='\u2216',mW='\u2323',gW='\u22C6',hW='\u22C6',fW='\u2606',yW='\u2605',bW='\u03F5',xW='\u03D5',kW='\xAF',SW='\u2282',wW='\u22D0',vW='\u2ABD',TW='\u2AC5',CW='\u2286',EW='\u2AC3',AW='\u2AC1',OW='\u2ACB',PW='\u228A',LW='\u2ABF',qW='\u2979',RW='\u2282',DW='\u22D0',NW='\u2286',BW='\u2AC5',IW='\u2286',zW='\u228A',_W='\u2ACB',MW='\u2AC7',GW='\u2AD5',UW='\u2AD3',VW='\u2AB8',WW='\u227B',FW='\u227D',jW='\u227B',HW='\u2AB0',YW='\u227D',$W='\u227F',KW='\u2AB0',XW='\u2ABA',QW='\u2AB6',ZW='\u22E9',JW='\u227F',eF='\u220B',tF='\u2211',nF='\u2211',rF='\u266A',aF='\xB9',oF='\xB2',iF='\xB3',sF='\u2283',lF='\u22D1',dF='\u2ABE',cF='\u2AD8',pF='\u2AC6',uF='\u2287',mF='\u2AC4',gF='\u2283',hF='\u2287',fF='\u27C9',yF='\u2AD7',bF='\u297B',xF='\u2AC2',kF='\u2ACC',SF='\u228B',wF='\u2AC0',vF='\u2283',TF='\u22D1',CF='\u2287',EF='\u2AC6',AF='\u228B',OF='\u2ACC',PF='\u2AC8',LF='\u2AD4',qF='\u2AD6',RF='\u2926',DF='\u2199',NF='\u21D9',BF='\u2199',IF='\u292A',zF='\xDF',_F='\t',MF='\u2316',GF='\u03A4',UF='\u03C4',VF='\u23B4',WF='\u0164',FF='\u0165',jF='\u0162',HF='\u0163',YF='\u0422',$F='\u0442',KF='\u20DB',XF='\u2315',QF='\uD835\uDD17',ZF='\uD835\uDD31',JF='\u2234',ej='\u2234',tj='\u2234',nj='\u0398',rj='\u03B8',aj='\u03D1',oj='\u03D1',ij='\u2248',sj='\u223C',lj='\u205F\u200A',dj='\u2009',cj='\u2009',pj='\u2248',uj='\u223C',mj='\xDE',gj='\xFE',hj='\u02DC',fj='\u223C',yj='\u2243',bj='\u2245',xj='\u2248',kj='\u2A31',Sj='\u22A0',wj='\xD7',vj='\u2A30',Tj='\u222D',Cj='\u2928',Ej='\u2336',Aj='\u2AF1',Oj='\u22A4',Pj='\uD835\uDD4B',Lj='\uD835\uDD65',qj='\u2ADA',Rj='\u2929',Dj='\u2034',Nj='\u2122',Bj='\u2122',Ij='\u25B5',zj='\u25BF',_j='\u25C3',Mj='\u22B4',Gj='\u225C',Uj='\u25B9',Vj='\u22B5',Wj='\u25EC',Fj='\u225C',jj='\u2A3A',Hj='\u20DB',Yj='\u2A39',$j='\u29CD',Kj='\u2A3B',Xj='\u23E2',Qj='\uD835\uDCAF',Zj='\uD835\uDCC9',Jj='\u0426',eH='\u0446',tH='\u040B',nH='\u045B',rH='\u0166',aH='\u0167',oH='\u226C',iH='\u219E',sH='\u21A0',lH='\xDA',dH='\xFA',cH='\u2191',pH='\u219F',uH='\u21D1',mH='\u2949',gH='\u040E',hH='\u045E',fH='\u016C',yH='\u016D',bH='\xDB',xH='\xFB',kH='\u0423',SH='\u0443',wH='\u21C5',vH='\u0170',TH='\u0171',CH='\u296E',EH='\u297E',AH='\uD835\uDD18',OH='\uD835\uDD32',PH='\xD9',LH='\xF9',qH='\u2963',RH='\u21BF',DH='\u21BE',NH='\u2580',BH='\u231C',IH='\u231C',zH='\u230F',_H='\u25F8',MH='\u016A',GH='\u016B',UH='\xA8',VH='_',WH='\u23DF',FH='\u23B5',jH='\u23DD',HH='\u22C3',YH='\u228E',$H='\u0172',KH='\u0173',XH='\uD835\uDD4C',QH='\uD835\uDD66',ZH='\u2912',JH='\u2191',eY='\u2191',tY='\u21D1',nY='\u21C5',rY='\u2195',aY='\u2195',oY='\u21D5',iY='\u296E',sY='\u21BF',lY='\u21BE',dY='\u228E',cY='\u2196',pY='\u2197',uY='\u03C5',mY='\u03D2',gY='\u03D2',hY='\u03A5',fY='\u03C5',yY='\u21A5',bY='\u22A5',xY='\u21C8',kY='\u231D',SY='\u231D',wY='\u230E',vY='\u016E',TY='\u016F',CY='\u25F9',EY='\uD835\uDCB0',AY='\uD835\uDCCA',OY='\u22F0',PY='\u0168',LY='\u0169',qY='\u25B5',RY='\u25B4',DY='\u21C8',NY='\xDC',BY='\xFC',IY='\u29A7',zY='\u299C',_Y='\u03F5',MY='\u03F0',GY='\u2205',UY='\u03D5',VY='\u03D6',WY='\u221D',FY='\u2195',jY='\u21D5',HY='\u03F1',YY='\u03C2',$Y='\u228A\uFE00',KY='\u2ACB\uFE00',XY='\u228B\uFE00',QY='\u2ACC\uFE00',ZY='\u03D1',JY='\u22B2',e$='\u22B3',t$='\u2AE8',n$='\u2AEB',r$='\u2AE9',a$='\u0412',o$='\u0432',i$='\u22A2',s$='\u22A8',l$='\u22A9',d$='\u22AB',c$='\u2AE6',p$='\u22BB',u$='\u2228',m$='\u22C1',g$='\u225A',h$='\u22EE',f$='|',y$='\u2016',b$='|',x$='\u2016',k$='\u2223',S$='|',w$='\u2758',v$='\u2240',T$='\u200A',C$='\uD835\uDD19',E$='\uD835\uDD33',A$='\u22B2',O$='\u2282\u20D2',P$='\u2283\u20D2',L$='\uD835\uDD4D',q$='\uD835\uDD67',R$='\u221D',D$='\u22B3',N$='\uD835\uDCB1',B$='\uD835\uDCCB',I$='\u2ACB\uFE00',z$='\u228A\uFE00',_$='\u2ACC\uFE00',M$='\u228B\uFE00',G$='\u22AA',U$='\u299A',V$='\u0174',W$='\u0175',F$='\u2A5F',j$='\u2227',H$='\u22C0',Y$='\u2259',$$='\u2118',K$='\uD835\uDD1A',X$='\uD835\uDD34',Q$='\uD835\uDD4E',Z$='\uD835\uDD68',J$='\u2118',eK='\u2240',tK='\u2240',nK='\uD835\uDCB2',rK='\uD835\uDCCC',aK='\u22C2',oK='\u25EF',iK='\u22C3',sK='\u25BD',lK='\uD835\uDD1B',dK='\uD835\uDD35',cK='\u27F7',pK='\u27FA',uK='\u039E',mK='\u03BE',gK='\u27F5',hK='\u27F8',fK='\u27FC',yK='\u22FB',bK='\u2A00',xK='\uD835\uDD4F',kK='\uD835\uDD69',SK='\u2A01',wK='\u2A02',vK='\u27F6',TK='\u27F9',CK='\uD835\uDCB3',EK='\uD835\uDCCD',AK='\u2A06',OK='\u2A04',PK='\u25B3',LK='\u22C1',qK='\u22C0',RK='\xDD',DK='\xFD',NK='\u042F',BK='\u044F',IK='\u0176',zK='\u0177',_K='\u042B',MK='\u044B',GK='\xA5',UK='\uD835\uDD1C',VK='\uD835\uDD36',WK='\u0407',FK='\u0457',jK='\uD835\uDD50',HK='\uD835\uDD6A',YK='\uD835\uDCB4',$K='\uD835\uDCCE',KK='\u042E',XK='\u044E',QK='\xFF',ZK='\u0178',JK='\u0179',eX='\u017A',tX='\u017D',nX='\u017E',rX='\u0417',aX='\u0437',oX='\u017B',iX='\u017C',sX='\u2128',lX='\u200B',dX='\u0396',cX='\u03B6',pX='\uD835\uDD37',uX='\u2128',mX='\u0416',gX='\u0436',hX='\u21DD',fX='\uD835\uDD6B',yX='\u2124',bX='\uD835\uDCB5',xX='\uD835\uDCCF',kX='\u200D',SX='\u200C',wX={Aacute:zc,aacute:_c,Abreve:Mc,abreve:Gc,ac:Uc,acd:Vc,acE:Wc,Acirc:Fc,acirc:jc,acute:Hc,Acy:Yc,acy:$c,AElig:Kc,aelig:Xc,af:Qc,Afr:Zc,afr:Jc,Agrave:ep,agrave:tp,alefsym:np,aleph:rp,Alpha:op,alpha:ip,Amacr:sp,amacr:lp,amalg:dp,amp:cp,AMP:pp,andand:up,And:gp,and:hp,andd:fp,andslope:yp,andv:bp,ang:xp,ange:kp,angle:Sp,angmsdaa:vp,angmsdab:Tp,angmsdac:Cp,angmsdad:Ep,angmsdae:Ap,angmsdaf:Op,angmsdag:Pp,angmsdah:Lp,angmsd:qp,angrt:Rp,angrtvb:Dp,angrtvbd:Np,angsph:Bp,angst:Ip,angzarr:zp,Aogon:_p,aogon:Mp,Aopf:Gp,aopf:Up,apacir:Vp,ap:Wp,apE:Fp,ape:jp,apid:Hp,apos:Yp,ApplyFunction:$p,approx:Kp,approxeq:Xp,Aring:Qp,aring:Zp,Ascr:Jp,ascr:eu,Assign:tu,ast:ru,asymp:au,asympeq:ou,Atilde:iu,atilde:su,Auml:lu,auml:du,awconint:cu,awint:pu,backcong:uu,backepsilon:gu,backprime:hu,backsim:fu,backsimeq:yu,Backslash:bu,Barv:xu,barvee:ku,barwed:Su,Barwed:wu,barwedge:vu,bbrk:Tu,bbrktbrk:Cu,bcong:Eu,Bcy:Au,bcy:Ou,bdquo:Pu,becaus:Lu,because:qu,Because:Ru,bemptyv:Du,bepsi:Bu,bernou:Iu,Bernoullis:zu,Beta:_u,beta:Gu,beth:Uu,between:Vu,Bfr:Wu,bfr:Fu,bigcap:ju,bigcirc:Hu,bigcup:Yu,bigodot:$u,bigoplus:Ku,bigotimes:Xu,bigsqcup:Qu,bigstar:Zu,bigtriangledown:Ju,bigtriangleup:em,biguplus:tm,bigvee:nm,bigwedge:rm,bkarow:am,blacklozenge:om,blacksquare:im,blacktriangle:sm,blacktriangledown:lm,blacktriangleleft:dm,blacktriangleright:cm,blank:um,blk12:mm,blk14:gm,blk34:hm,block:fm,bne:ym,bnequiv:bm,bNot:xm,bnot:km,Bopf:Sm,bopf:wm,bot:vm,bottom:Tm,bowtie:Cm,boxbox:Em,boxdl:Am,boxdL:Om,boxDl:Pm,boxDL:Lm,boxdr:qm,boxdR:Rm,boxDr:Dm,boxDR:Nm,boxh:Bm,boxH:zm,boxhd:_m,boxHd:Mm,boxhD:Gm,boxHD:Um,boxhu:Vm,boxHu:Wm,boxhU:Fm,boxHU:jm,boxminus:Hm,boxplus:Ym,boxtimes:$m,boxul:Km,boxuL:Xm,boxUl:Qm,boxUL:Zm,boxur:Jm,boxuR:tg,boxUr:ng,boxUR:rg,boxv:ag,boxV:og,boxvh:ig,boxvH:sg,boxVh:dg,boxVH:cg,boxvl:pg,boxvL:ug,boxVl:mg,boxVL:hg,boxvr:fg,boxvR:yg,boxVr:bg,boxVR:xg,bprime:kg,breve:Sg,Breve:wg,brvbar:vg,bscr:Tg,Bscr:Cg,bsemi:Eg,bsim:Ag,bsime:Og,bsolb:Pg,bsol:Lg,bsolhsub:qg,bull:Rg,bullet:Dg,bump:Ng,bumpE:Bg,bumpe:Ig,Bumpeq:zg,bumpeq:_g,Cacute:Mg,cacute:Ug,capand:Vg,capbrcup:Wg,capcap:Fg,cap:jg,Cap:Hg,capcup:Yg,capdot:$g,CapitalDifferentialD:Kg,caps:Xg,caret:Qg,caron:Zg,Cayleys:Jg,ccaps:eh,Ccaron:th,ccaron:nh,Ccedil:rh,ccedil:ah,Ccirc:oh,ccirc:ih,Cconint:sh,ccups:lh,ccupssm:dh,Cdot:ch,cdot:ph,cedil:uh,Cedilla:mh,cemptyv:gh,cent:hh,centerdot:fh,CenterDot:yh,cfr:bh,Cfr:xh,CHcy:kh,chcy:Sh,check:wh,checkmark:vh,Chi:Th,chi:Ch,circ:Eh,circeq:Ah,circlearrowleft:Oh,circlearrowright:Ph,circledast:Lh,circledcirc:qh,circleddash:Rh,CircleDot:Dh,circledR:Nh,circledS:Bh,CircleMinus:Ih,CirclePlus:zh,CircleTimes:_h,cir:Mh,cirE:Gh,cire:Uh,cirfnint:Vh,cirmid:Wh,cirscir:Fh,ClockwiseContourIntegral:jh,CloseCurlyDoubleQuote:Hh,CloseCurlyQuote:Yh,clubs:$h,clubsuit:Kh,colon:Xh,Colon:Qh,Colone:Zh,colone:Jh,coloneq:ef,comma:tf,commat:nf,comp:rf,compfn:of,complement:sf,complexes:lf,cong:df,congdot:cf,Congruent:pf,conint:uf,Conint:mf,ContourIntegral:gf,copf:hf,Copf:ff,coprod:yf,Coproduct:bf,copy:xf,COPY:kf,copysr:Sf,CounterClockwiseContourIntegral:wf,crarr:vf,cross:Tf,Cross:Cf,Cscr:Ef,cscr:Af,csub:Of,csube:Pf,csup:Lf,csupe:qf,ctdot:Rf,cudarrl:Df,cudarrr:Nf,cuepr:Bf,cuesc:If,cularr:zf,cularrp:_f,cupbrcap:Mf,cupcap:Gf,CupCap:Uf,cup:Vf,Cup:Wf,cupcup:Ff,cupdot:jf,cupor:Hf,cups:Yf,curarr:$f,curarrm:Kf,curlyeqprec:Xf,curlyeqsucc:Qf,curlyvee:Zf,curlywedge:Jf,curren:ey,curvearrowleft:ty,curvearrowright:ny,cuvee:ry,cuwed:ay,cwconint:oy,cwint:iy,cylcty:sy,dagger:ly,Dagger:dy,daleth:cy,darr:py,Darr:uy,dArr:my,dash:gy,Dashv:hy,dashv:fy,dbkarow:yy,dblac:by,Dcaron:xy,dcaron:ky,Dcy:Sy,dcy:wy,ddagger:vy,ddarr:Ty,DD:Cy,dd:Ey,DDotrahd:Ay,ddotseq:Oy,deg:Py,Del:Ly,Delta:qy,delta:Ry,demptyv:Dy,dfisht:Ny,Dfr:By,dfr:Iy,dHar:zy,dharl:_y,dharr:My,DiacriticalAcute:Gy,DiacriticalDot:Uy,DiacriticalDoubleAcute:Vy,DiacriticalGrave:Wy,DiacriticalTilde:Fy,diam:jy,diamond:Hy,Diamond:Yy,diamondsuit:$y,diams:Ky,die:Xy,DifferentialD:Qy,digamma:Zy,disin:Jy,div:eb,divide:tb,divideontimes:nb,divonx:rb,DJcy:ab,djcy:ob,dlcorn:ib,dlcrop:sb,dollar:lb,Dopf:db,dopf:cb,Dot:pb,dot:ub,DotDot:mb,doteq:gb,doteqdot:hb,DotEqual:fb,dotminus:yb,dotplus:bb,dotsquare:xb,doublebarwedge:kb,DoubleContourIntegral:Sb,DoubleDot:wb,DoubleDownArrow:vb,DoubleLeftArrow:Tb,DoubleLeftRightArrow:Cb,DoubleLeftTee:Eb,DoubleLongLeftArrow:Ab,DoubleLongLeftRightArrow:Ob,DoubleLongRightArrow:Pb,DoubleRightArrow:Lb,DoubleRightTee:qb,DoubleUpArrow:Rb,DoubleUpDownArrow:Db,DoubleVerticalBar:Nb,DownArrowBar:Bb,downarrow:Ib,DownArrow:zb,Downarrow:_b,DownArrowUpArrow:Mb,DownBreve:Gb,downdownarrows:Ub,downharpoonleft:Vb,downharpoonright:Wb,DownLeftRightVector:Fb,DownLeftTeeVector:jb,DownLeftVectorBar:Hb,DownLeftVector:Yb,DownRightTeeVector:$b,DownRightVectorBar:Kb,DownRightVector:Xb,DownTeeArrow:Qb,DownTee:Zb,drbkarow:Jb,drcorn:ex,drcrop:tx,Dscr:nx,dscr:ax,DScy:ox,dscy:ix,dsol:sx,Dstrok:lx,dstrok:dx,dtdot:cx,dtri:px,dtrif:ux,duarr:mx,duhar:gx,dwangle:hx,DZcy:fx,dzcy:yx,dzigrarr:bx,Eacute:xx,eacute:kx,easter:Sx,Ecaron:wx,ecaron:vx,Ecirc:Tx,ecirc:Cx,ecir:Ex,ecolon:Ax,Ecy:Ox,ecy:Px,eDDot:Lx,Edot:qx,edot:Rx,eDot:Dx,ee:Nx,efDot:Bx,Efr:Ix,efr:zx,eg:_x,Egrave:Mx,egrave:Gx,egs:Ux,egsdot:Vx,el:Wx,Element:Fx,elinters:jx,ell:Hx,els:Yx,elsdot:$x,Emacr:Kx,emacr:Xx,empty:Qx,emptyset:Zx,EmptySmallSquare:Jx,emptyv:ek,EmptyVerySmallSquare:tk,emsp13:nk,emsp14:rk,emsp:ak,ENG:ok,eng:ik,ensp:sk,Eogon:lk,eogon:dk,Eopf:ck,eopf:pk,epar:uk,eparsl:mk,eplus:gk,epsi:hk,Epsilon:fk,epsilon:yk,epsiv:bk,eqcirc:xk,eqcolon:kk,eqsim:Sk,eqslantgtr:wk,eqslantless:vk,Equal:Tk,equals:Ck,EqualTilde:Ek,equest:Ak,Equilibrium:Ok,equiv:Pk,equivDD:Lk,eqvparsl:qk,erarr:Rk,erDot:Dk,escr:Nk,Escr:Bk,esdot:Ik,Esim:zk,esim:_k,Eta:Mk,eta:Gk,ETH:Uk,eth:Vk,Euml:Wk,euml:Fk,euro:jk,excl:Hk,exist:Yk,Exists:$k,expectation:Kk,exponentiale:Xk,ExponentialE:Qk,fallingdotseq:Zk,Fcy:Jk,fcy:eS,female:tS,ffilig:nS,fflig:rS,ffllig:aS,Ffr:iS,ffr:sS,filig:lS,FilledSmallSquare:dS,FilledVerySmallSquare:cS,fjlig:pS,flat:uS,fllig:mS,fltns:gS,fnof:hS,Fopf:fS,fopf:yS,forall:bS,ForAll:xS,fork:kS,forkv:SS,Fouriertrf:wS,fpartint:vS,frac12:TS,frac13:CS,frac14:ES,frac15:AS,frac16:OS,frac18:PS,frac23:LS,frac25:qS,frac34:RS,frac35:DS,frac38:NS,frac45:BS,frac56:IS,frac58:zS,frac78:_S,frasl:MS,frown:GS,fscr:US,Fscr:VS,gacute:WS,Gamma:FS,gamma:jS,Gammad:HS,gammad:YS,gap:$S,Gbreve:KS,gbreve:XS,Gcedil:QS,Gcirc:ZS,gcirc:JS,Gcy:ew,gcy:tw,Gdot:nw,gdot:rw,ge:aw,gE:ow,gEl:iw,gel:sw,geq:lw,geqq:dw,geqslant:cw,gescc:pw,ges:uw,gesdot:mw,gesdoto:gw,gesdotol:hw,gesl:fw,gesles:yw,Gfr:bw,gfr:xw,gg:kw,Gg:Sw,ggg:ww,gimel:vw,GJcy:Tw,gjcy:Cw,gla:Ew,gl:Aw,glE:Ow,glj:Pw,gnap:Lw,gnapprox:qw,gne:Rw,gnE:Dw,gneq:Nw,gneqq:Bw,gnsim:Iw,Gopf:zw,gopf:_w,grave:Mw,GreaterEqual:Gw,GreaterEqualLess:Uw,GreaterFullEqual:Vw,GreaterGreater:Ww,GreaterLess:Fw,GreaterSlantEqual:jw,GreaterTilde:Hw,Gscr:Yw,gscr:$w,gsim:Kw,gsime:Xw,gsiml:Qw,gtcc:Zw,gtcir:Jw,gt:ev,GT:tv,Gt:nv,gtdot:rv,gtlPar:av,gtquest:ov,gtrapprox:iv,gtrarr:sv,gtrdot:lv,gtreqless:dv,gtreqqless:cv,gtrless:pv,gtrsim:uv,gvertneqq:mv,gvnE:gv,Hacek:hv,hairsp:fv,half:yv,hamilt:bv,HARDcy:xv,hardcy:kv,harrcir:Sv,harr:wv,hArr:vv,harrw:Tv,Hat:Cv,hbar:Ev,Hcirc:Av,hcirc:Ov,hearts:Pv,heartsuit:Lv,hellip:qv,hercon:Rv,hfr:Dv,Hfr:Nv,HilbertSpace:Bv,hksearow:Iv,hkswarow:zv,hoarr:_v,homtht:Mv,hookleftarrow:Gv,hookrightarrow:Uv,hopf:Vv,Hopf:Wv,horbar:Fv,HorizontalLine:jv,hscr:Hv,Hscr:Yv,hslash:$v,Hstrok:Kv,hstrok:Xv,HumpDownHump:Qv,HumpEqual:Zv,hybull:Jv,hyphen:eT,Iacute:tT,iacute:nT,ic:rT,Icirc:aT,icirc:oT,Icy:iT,icy:sT,Idot:lT,IEcy:dT,iecy:cT,iexcl:pT,iff:uT,ifr:mT,Ifr:gT,Igrave:hT,igrave:fT,ii:yT,iiiint:bT,iiint:xT,iinfin:kT,iiota:ST,IJlig:wT,ijlig:vT,Imacr:TT,imacr:CT,image:ET,ImaginaryI:AT,imagline:OT,imagpart:PT,imath:qT,Im:RT,imof:DT,imped:NT,Implies:BT,incare:IT,infin:zT,infintie:_T,inodot:MT,intcal:UT,int:VT,Int:WT,integers:FT,Integral:jT,intercal:HT,Intersection:YT,intlarhk:$T,intprod:KT,InvisibleComma:XT,InvisibleTimes:QT,IOcy:ZT,iocy:JT,Iogon:eC,iogon:tC,Iopf:nC,iopf:rC,Iota:aC,iota:oC,iprod:iC,iquest:sC,iscr:lC,Iscr:dC,isin:cC,isindot:pC,isinE:uC,isins:mC,isinsv:gC,isinv:hC,it:fC,Itilde:yC,itilde:bC,Iukcy:xC,iukcy:kC,Iuml:SC,iuml:wC,Jcirc:vC,jcirc:TC,Jcy:CC,jcy:EC,Jfr:AC,jfr:OC,jmath:PC,Jopf:LC,jopf:qC,Jscr:RC,jscr:DC,Jsercy:NC,jsercy:BC,Jukcy:IC,jukcy:zC,Kappa:_C,kappa:MC,kappav:GC,Kcedil:UC,kcedil:VC,Kcy:WC,kcy:FC,Kfr:jC,kfr:HC,kgreen:YC,KHcy:$C,khcy:KC,KJcy:XC,kjcy:QC,Kopf:ZC,kopf:JC,Kscr:eE,kscr:tE,lAarr:nE,Lacute:rE,lacute:aE,laemptyv:oE,lagran:iE,Lambda:sE,lambda:dE,lang:cE,Lang:pE,langd:uE,langle:mE,lap:hE,Laplacetrf:fE,laquo:yE,larrb:bE,larrbfs:xE,larr:kE,Larr:SE,lArr:wE,larrfs:vE,larrhk:TE,larrlp:CE,larrpl:EE,larrsim:AE,larrtl:OE,latail:PE,lAtail:LE,lat:qE,late:RE,lates:DE,lbarr:NE,lBarr:BE,lbbrk:IE,lbrace:zE,lbrack:_E,lbrke:ME,lbrksld:GE,lbrkslu:UE,Lcaron:VE,lcaron:WE,Lcedil:FE,lcedil:jE,lceil:HE,lcub:YE,Lcy:$E,lcy:KE,ldca:XE,ldquo:QE,ldquor:ZE,ldrdhar:JE,ldrushar:eA,ldsh:tA,le:nA,lE:rA,LeftAngleBracket:aA,LeftArrowBar:oA,leftarrow:iA,LeftArrow:sA,Leftarrow:lA,LeftArrowRightArrow:dA,leftarrowtail:cA,LeftCeiling:pA,LeftDoubleBracket:uA,LeftDownTeeVector:mA,LeftDownVectorBar:gA,LeftDownVector:hA,LeftFloor:fA,leftharpoondown:yA,leftharpoonup:bA,leftleftarrows:xA,leftrightarrow:kA,LeftRightArrow:SA,Leftrightarrow:wA,leftrightarrows:vA,leftrightharpoons:TA,leftrightsquigarrow:CA,LeftRightVector:EA,LeftTeeArrow:AA,LeftTee:OA,LeftTeeVector:PA,leftthreetimes:LA,LeftTriangleBar:qA,LeftTriangle:RA,LeftTriangleEqual:DA,LeftUpDownVector:NA,LeftUpTeeVector:BA,LeftUpVectorBar:IA,LeftUpVector:zA,LeftVectorBar:_A,LeftVector:MA,lEg:GA,leg:UA,leq:VA,leqq:WA,leqslant:FA,lescc:jA,les:HA,lesdot:YA,lesdoto:$A,lesdotor:KA,lesg:XA,lesges:QA,lessapprox:ZA,lessdot:JA,lesseqgtr:eO,lesseqqgtr:tO,LessEqualGreater:nO,LessFullEqual:rO,LessGreater:aO,lessgtr:oO,LessLess:iO,lesssim:sO,LessSlantEqual:lO,LessTilde:dO,lfisht:cO,lfloor:pO,Lfr:uO,lfr:mO,lg:gO,lgE:hO,lHar:fO,lhard:yO,lharu:bO,lharul:xO,lhblk:kO,LJcy:SO,ljcy:wO,llarr:vO,ll:TO,Ll:CO,llcorner:EO,Lleftarrow:AO,llhard:OO,lltri:PO,Lmidot:LO,lmidot:qO,lmoustache:RO,lmoust:DO,lnap:NO,lnapprox:BO,lne:IO,lnE:zO,lneq:_O,lneqq:MO,lnsim:GO,loang:UO,loarr:VO,lobrk:WO,longleftarrow:FO,LongLeftArrow:jO,Longleftarrow:HO,longleftrightarrow:YO,LongLeftRightArrow:$O,Longleftrightarrow:KO,longmapsto:XO,longrightarrow:QO,LongRightArrow:ZO,Longrightarrow:JO,looparrowleft:eP,looparrowright:tP,lopar:nP,Lopf:rP,lopf:aP,loplus:oP,lotimes:iP,lowast:sP,lowbar:lP,LowerLeftArrow:dP,LowerRightArrow:cP,loz:pP,lozenge:uP,lozf:mP,lpar:gP,lparlt:hP,lrarr:fP,lrcorner:yP,lrhar:bP,lrhard:xP,lrm:kP,lrtri:SP,lsaquo:wP,lscr:vP,Lscr:TP,lsh:CP,Lsh:EP,lsim:AP,lsime:OP,lsimg:PP,lsqb:LP,lsquo:qP,lsquor:RP,Lstrok:DP,lstrok:NP,ltcc:BP,ltcir:IP,lt:zP,LT:_P,Lt:MP,ltdot:GP,lthree:UP,ltimes:VP,ltlarr:WP,ltquest:FP,ltri:jP,ltrie:HP,ltrif:YP,ltrPar:$P,lurdshar:KP,luruhar:XP,lvertneqq:QP,lvnE:ZP,macr:JP,male:eL,malt:tL,maltese:nL,map:rL,mapsto:aL,mapstodown:oL,mapstoleft:iL,mapstoup:sL,marker:lL,mcomma:dL,Mcy:cL,mcy:pL,mdash:uL,mDDot:mL,measuredangle:gL,MediumSpace:hL,Mellintrf:fL,Mfr:yL,mfr:bL,mho:xL,micro:kL,midast:SL,midcir:wL,mid:vL,middot:TL,minusb:CL,minus:EL,minusd:AL,minusdu:OL,MinusPlus:PL,mlcp:LL,mldr:qL,mnplus:RL,models:DL,Mopf:NL,mopf:BL,mp:IL,mscr:zL,Mscr:_L,mstpos:ML,Mu:GL,mu:UL,multimap:VL,mumap:WL,nabla:FL,Nacute:jL,nacute:HL,nang:YL,nap:$L,napE:KL,napid:XL,napos:QL,napprox:ZL,natural:JL,naturals:eq,natur:tq,nbsp:nq,nbump:rq,nbumpe:aq,ncap:oq,Ncaron:iq,ncaron:sq,Ncedil:lq,ncedil:dq,ncong:cq,ncongdot:pq,ncup:uq,Ncy:mq,ncy:gq,ndash:hq,nearhk:fq,nearr:yq,neArr:bq,nearrow:xq,ne:kq,nedot:Sq,NegativeMediumSpace:wq,NegativeThickSpace:vq,NegativeThinSpace:Tq,NegativeVeryThinSpace:Cq,nequiv:Eq,nesear:Aq,nesim:Oq,NestedGreaterGreater:Pq,NestedLessLess:Lq,NewLine:qq,nexist:Rq,nexists:Dq,Nfr:Nq,nfr:Bq,ngE:Iq,nge:zq,ngeq:_q,ngeqq:Mq,ngeqslant:Gq,nges:Uq,nGg:Vq,ngsim:Wq,nGt:Fq,ngt:jq,ngtr:Hq,nGtv:Yq,nharr:$q,nhArr:Kq,nhpar:Xq,ni:Qq,nis:Zq,nisd:Jq,niv:eR,NJcy:tR,njcy:nR,nlarr:rR,nlArr:aR,nldr:oR,nlE:iR,nle:sR,nleftarrow:lR,nLeftarrow:dR,nleftrightarrow:cR,nLeftrightarrow:pR,nleq:uR,nleqq:mR,nleqslant:gR,nles:hR,nless:fR,nLl:yR,nlsim:bR,nLt:xR,nlt:kR,nltri:SR,nltrie:wR,nLtv:vR,nmid:TR,NoBreak:CR,NonBreakingSpace:ER,nopf:AR,Nopf:OR,Not:PR,not:LR,NotCongruent:qR,NotCupCap:RR,NotDoubleVerticalBar:DR,NotElement:NR,NotEqual:BR,NotEqualTilde:IR,NotExists:zR,NotGreater:_R,NotGreaterEqual:MR,NotGreaterFullEqual:GR,NotGreaterGreater:UR,NotGreaterLess:VR,NotGreaterSlantEqual:WR,NotGreaterTilde:FR,NotHumpDownHump:jR,NotHumpEqual:HR,notin:YR,notindot:$R,notinE:KR,notinva:XR,notinvb:QR,notinvc:ZR,NotLeftTriangleBar:JR,NotLeftTriangle:eD,NotLeftTriangleEqual:tD,NotLess:nD,NotLessEqual:rD,NotLessGreater:aD,NotLessLess:oD,NotLessSlantEqual:iD,NotLessTilde:sD,NotNestedGreaterGreater:lD,NotNestedLessLess:dD,notni:cD,notniva:pD,notnivb:uD,notnivc:mD,NotPrecedes:gD,NotPrecedesEqual:hD,NotPrecedesSlantEqual:fD,NotReverseElement:yD,NotRightTriangleBar:bD,NotRightTriangle:xD,NotRightTriangleEqual:kD,NotSquareSubset:SD,NotSquareSubsetEqual:wD,NotSquareSuperset:vD,NotSquareSupersetEqual:TD,NotSubset:CD,NotSubsetEqual:ED,NotSucceeds:AD,NotSucceedsEqual:OD,NotSucceedsSlantEqual:PD,NotSucceedsTilde:LD,NotSuperset:qD,NotSupersetEqual:RD,NotTilde:ND,NotTildeEqual:BD,NotTildeFullEqual:ID,NotTildeTilde:zD,NotVerticalBar:_D,nparallel:MD,npar:GD,nparsl:UD,npart:VD,npolint:WD,npr:FD,nprcue:jD,nprec:HD,npreceq:YD,npre:$D,nrarrc:KD,nrarr:XD,nrArr:QD,nrarrw:ZD,nrightarrow:JD,nRightarrow:eN,nrtri:tN,nrtrie:nN,nsc:rN,nsccue:aN,nsce:oN,Nscr:iN,nscr:sN,nshortmid:lN,nshortparallel:dN,nsim:cN,nsime:pN,nsimeq:uN,nsmid:mN,nspar:gN,nsqsube:hN,nsqsupe:fN,nsub:yN,nsubE:bN,nsube:xN,nsubset:kN,nsubseteq:SN,nsubseteqq:wN,nsucc:vN,nsucceq:TN,nsup:CN,nsupE:EN,nsupe:AN,nsupset:ON,nsupseteq:PN,nsupseteqq:LN,ntgl:qN,Ntilde:RN,ntilde:DN,ntlg:NN,ntriangleleft:BN,ntrianglelefteq:IN,ntriangleright:zN,ntrianglerighteq:_N,Nu:MN,nu:GN,num:UN,numero:VN,numsp:WN,nvap:FN,nvdash:jN,nvDash:HN,nVdash:YN,nVDash:$N,nvge:KN,nvgt:XN,nvHarr:QN,nvinfin:ZN,nvlArr:JN,nvle:eB,nvlt:tB,nvltrie:nB,nvrArr:rB,nvrtrie:aB,nvsim:oB,nwarhk:iB,nwarr:sB,nwArr:lB,nwarrow:dB,nwnear:cB,Oacute:pB,oacute:uB,oast:mB,Ocirc:gB,ocirc:hB,ocir:fB,Ocy:yB,ocy:bB,odash:xB,Odblac:kB,odblac:SB,odiv:wB,odot:vB,odsold:TB,OElig:CB,oelig:EB,ofcir:AB,Ofr:OB,ofr:PB,ogon:LB,Ograve:qB,ograve:RB,ogt:DB,ohbar:NB,ohm:BB,oint:IB,olarr:zB,olcir:_B,olcross:MB,oline:GB,olt:UB,Omacr:VB,omacr:WB,Omega:FB,omega:jB,Omicron:HB,omicron:YB,omid:$B,ominus:KB,Oopf:XB,oopf:QB,opar:ZB,OpenCurlyDoubleQuote:JB,OpenCurlyQuote:eI,operp:tI,oplus:nI,orarr:rI,Or:aI,or:oI,ord:iI,order:sI,orderof:lI,ordf:dI,ordm:cI,origof:pI,oror:uI,orslope:mI,orv:gI,oS:hI,Oscr:fI,oscr:yI,Oslash:bI,oslash:xI,osol:kI,Otilde:SI,otilde:wI,otimesas:vI,Otimes:TI,otimes:CI,Ouml:EI,ouml:AI,ovbar:OI,OverBar:PI,OverBrace:LI,OverBracket:qI,OverParenthesis:RI,para:DI,parallel:NI,par:BI,parsim:II,parsl:zI,part:_I,PartialD:MI,Pcy:GI,pcy:UI,percnt:VI,period:WI,permil:FI,perp:jI,pertenk:HI,Pfr:YI,pfr:$I,Phi:KI,phi:XI,phiv:QI,phmmat:ZI,phone:JI,Pi:ez,pi:tz,pitchfork:nz,piv:rz,planck:az,planckh:oz,plankv:iz,plusacir:sz,plusb:lz,pluscir:dz,plus:cz,plusdo:pz,plusdu:uz,pluse:mz,PlusMinus:gz,plusmn:hz,plussim:fz,plustwo:yz,pm:bz,Poincareplane:xz,pointint:kz,popf:Sz,Popf:wz,pound:vz,prap:Tz,Pr:Cz,pr:Ez,prcue:Az,precapprox:Oz,prec:Pz,preccurlyeq:Lz,Precedes:qz,PrecedesEqual:Rz,PrecedesSlantEqual:Dz,PrecedesTilde:Nz,preceq:Bz,precnapprox:Iz,precneqq:zz,precnsim:_z,pre:Mz,prE:Gz,precsim:Uz,prime:Vz,Prime:Wz,primes:Fz,prnap:jz,prnE:Hz,prnsim:Yz,prod:$z,Product:Kz,profalar:Xz,profline:Qz,profsurf:Zz,prop:Jz,Proportional:e_,Proportion:t_,propto:n_,prsim:r_,prurel:a_,Pscr:o_,pscr:i_,Psi:s_,psi:l_,puncsp:d_,Qfr:c_,qfr:p_,qint:u_,qopf:m_,Qopf:g_,qprime:h_,Qscr:f_,qscr:y_,quaternions:b_,quatint:x_,quest:k_,questeq:S_,quot:w_,QUOT:v_,rAarr:T_,race:C_,Racute:E_,racute:A_,radic:O_,raemptyv:P_,rang:L_,Rang:q_,rangd:R_,range:D_,rangle:N_,raquo:B_,rarrap:I_,rarrb:z_,rarrbfs:__,rarrc:M_,rarr:G_,Rarr:U_,rArr:V_,rarrfs:W_,rarrhk:F_,rarrlp:j_,rarrpl:H_,rarrsim:Y_,Rarrtl:$_,rarrtl:K_,rarrw:X_,ratail:Q_,rAtail:Z_,ratio:J_,rationals:eM,rbarr:tM,rBarr:nM,RBarr:rM,rbbrk:aM,rbrace:oM,rbrack:iM,rbrke:sM,rbrksld:lM,rbrkslu:dM,Rcaron:cM,rcaron:pM,Rcedil:uM,rcedil:mM,rceil:gM,rcub:hM,Rcy:fM,rcy:yM,rdca:bM,rdldhar:xM,rdquo:kM,rdquor:SM,rdsh:wM,real:vM,realine:TM,realpart:CM,reals:EM,Re:AM,rect:OM,reg:PM,REG:LM,ReverseElement:qM,ReverseEquilibrium:RM,ReverseUpEquilibrium:DM,rfisht:NM,rfloor:BM,rfr:IM,Rfr:zM,rHar:_M,rhard:MM,rharu:GM,rharul:UM,Rho:VM,rho:WM,rhov:FM,RightAngleBracket:jM,RightArrowBar:HM,rightarrow:YM,RightArrow:$M,Rightarrow:KM,RightArrowLeftArrow:XM,rightarrowtail:QM,RightCeiling:ZM,RightDoubleBracket:JM,RightDownTeeVector:eG,RightDownVectorBar:tG,RightDownVector:nG,RightFloor:rG,rightharpoondown:aG,rightharpoonup:oG,rightleftarrows:iG,rightleftharpoons:sG,rightrightarrows:lG,rightsquigarrow:dG,RightTeeArrow:cG,RightTee:pG,RightTeeVector:uG,rightthreetimes:mG,RightTriangleBar:gG,RightTriangle:hG,RightTriangleEqual:fG,RightUpDownVector:yG,RightUpTeeVector:bG,RightUpVectorBar:xG,RightUpVector:kG,RightVectorBar:SG,RightVector:wG,ring:vG,risingdotseq:TG,rlarr:CG,rlhar:EG,rlm:AG,rmoustache:OG,rmoust:PG,rnmid:LG,roang:qG,roarr:RG,robrk:DG,ropar:NG,ropf:BG,Ropf:IG,roplus:zG,rotimes:_G,RoundImplies:MG,rpar:GG,rpargt:UG,rppolint:VG,rrarr:WG,Rrightarrow:FG,rsaquo:jG,rscr:HG,Rscr:YG,rsh:$G,Rsh:KG,rsqb:XG,rsquo:QG,rsquor:ZG,rthree:JG,rtimes:eU,rtri:tU,rtrie:nU,rtrif:rU,rtriltri:aU,RuleDelayed:oU,ruluhar:iU,rx:sU,Sacute:lU,sacute:dU,sbquo:cU,scap:pU,Scaron:uU,scaron:mU,Sc:gU,sc:hU,sccue:fU,sce:yU,scE:bU,Scedil:xU,scedil:kU,Scirc:SU,scirc:wU,scnap:vU,scnE:TU,scnsim:CU,scpolint:EU,scsim:AU,Scy:OU,scy:PU,sdotb:LU,sdot:qU,sdote:RU,searhk:DU,searr:NU,seArr:BU,searrow:IU,sect:zU,semi:_U,seswar:MU,setminus:GU,setmn:UU,sext:VU,Sfr:WU,sfr:FU,sfrown:jU,sharp:HU,SHCHcy:YU,shchcy:$U,SHcy:KU,shcy:XU,ShortDownArrow:QU,ShortLeftArrow:ZU,shortmid:JU,shortparallel:eV,ShortRightArrow:tV,ShortUpArrow:nV,shy:rV,Sigma:aV,sigma:oV,sigmaf:iV,sigmav:sV,sim:lV,simdot:dV,sime:cV,simeq:pV,simg:uV,simgE:mV,siml:gV,simlE:hV,simne:fV,simplus:yV,simrarr:bV,slarr:xV,SmallCircle:kV,smallsetminus:SV,smashp:wV,smeparsl:vV,smid:TV,smile:CV,smt:EV,smte:AV,smtes:OV,SOFTcy:PV,softcy:LV,solbar:qV,solb:RV,sol:DV,Sopf:NV,sopf:BV,spades:IV,spadesuit:zV,spar:_V,sqcap:MV,sqcaps:GV,sqcup:UV,sqcups:VV,Sqrt:WV,sqsub:FV,sqsube:jV,sqsubset:HV,sqsubseteq:YV,sqsup:$V,sqsupe:KV,sqsupset:XV,sqsupseteq:QV,square:ZV,Square:JV,SquareIntersection:eW,SquareSubset:tW,SquareSubsetEqual:nW,SquareSuperset:rW,SquareSupersetEqual:aW,SquareUnion:oW,squarf:iW,squ:sW,squf:lW,srarr:dW,Sscr:cW,sscr:pW,ssetmn:uW,ssmile:mW,sstarf:gW,Star:hW,star:fW,starf:yW,straightepsilon:bW,straightphi:xW,strns:kW,sub:SW,Sub:wW,subdot:vW,subE:TW,sube:CW,subedot:EW,submult:AW,subnE:OW,subne:PW,subplus:LW,subrarr:qW,subset:RW,Subset:DW,subseteq:NW,subseteqq:BW,SubsetEqual:IW,subsetneq:zW,subsetneqq:_W,subsim:MW,subsub:GW,subsup:UW,succapprox:VW,succ:WW,succcurlyeq:FW,Succeeds:jW,SucceedsEqual:HW,SucceedsSlantEqual:YW,SucceedsTilde:$W,succeq:KW,succnapprox:XW,succneqq:QW,succnsim:ZW,succsim:JW,SuchThat:eF,sum:tF,Sum:nF,sung:rF,sup1:aF,sup2:oF,sup3:iF,sup:sF,Sup:lF,supdot:dF,supdsub:cF,supE:pF,supe:uF,supedot:mF,Superset:gF,SupersetEqual:hF,suphsol:fF,suphsub:yF,suplarr:bF,supmult:xF,supnE:kF,supne:SF,supplus:wF,supset:vF,Supset:TF,supseteq:CF,supseteqq:EF,supsetneq:AF,supsetneqq:OF,supsim:PF,supsub:LF,supsup:qF,swarhk:RF,swarr:DF,swArr:NF,swarrow:BF,swnwar:IF,szlig:zF,Tab:_F,target:MF,Tau:GF,tau:UF,tbrk:VF,Tcaron:WF,tcaron:FF,Tcedil:jF,tcedil:HF,Tcy:YF,tcy:$F,tdot:KF,telrec:XF,Tfr:QF,tfr:ZF,there4:JF,therefore:ej,Therefore:tj,Theta:nj,theta:rj,thetasym:aj,thetav:oj,thickapprox:ij,thicksim:sj,ThickSpace:lj,ThinSpace:dj,thinsp:cj,thkap:pj,thksim:uj,THORN:mj,thorn:gj,tilde:hj,Tilde:fj,TildeEqual:yj,TildeFullEqual:bj,TildeTilde:xj,timesbar:kj,timesb:Sj,times:wj,timesd:vj,tint:Tj,toea:Cj,topbot:Ej,topcir:Aj,top:Oj,Topf:Pj,topf:Lj,topfork:qj,tosa:Rj,tprime:Dj,trade:Nj,TRADE:Bj,triangle:Ij,triangledown:zj,triangleleft:_j,trianglelefteq:Mj,triangleq:Gj,triangleright:Uj,trianglerighteq:Vj,tridot:Wj,trie:Fj,triminus:jj,TripleDot:Hj,triplus:Yj,trisb:$j,tritime:Kj,trpezium:Xj,Tscr:Qj,tscr:Zj,TScy:Jj,tscy:eH,TSHcy:tH,tshcy:nH,Tstrok:rH,tstrok:aH,twixt:oH,twoheadleftarrow:iH,twoheadrightarrow:sH,Uacute:lH,uacute:dH,uarr:cH,Uarr:pH,uArr:uH,Uarrocir:mH,Ubrcy:gH,ubrcy:hH,Ubreve:fH,ubreve:yH,Ucirc:bH,ucirc:xH,Ucy:kH,ucy:SH,udarr:wH,Udblac:vH,udblac:TH,udhar:CH,ufisht:EH,Ufr:AH,ufr:OH,Ugrave:PH,ugrave:LH,uHar:qH,uharl:RH,uharr:DH,uhblk:NH,ulcorn:BH,ulcorner:IH,ulcrop:zH,ultri:_H,Umacr:MH,umacr:GH,uml:UH,UnderBar:VH,UnderBrace:WH,UnderBracket:FH,UnderParenthesis:jH,Union:HH,UnionPlus:YH,Uogon:$H,uogon:KH,Uopf:XH,uopf:QH,UpArrowBar:ZH,uparrow:JH,UpArrow:eY,Uparrow:tY,UpArrowDownArrow:nY,updownarrow:rY,UpDownArrow:aY,Updownarrow:oY,UpEquilibrium:iY,upharpoonleft:sY,upharpoonright:lY,uplus:dY,UpperLeftArrow:cY,UpperRightArrow:pY,upsi:uY,Upsi:mY,upsih:gY,Upsilon:hY,upsilon:fY,UpTeeArrow:yY,UpTee:bY,upuparrows:xY,urcorn:kY,urcorner:SY,urcrop:wY,Uring:vY,uring:TY,urtri:CY,Uscr:EY,uscr:AY,utdot:OY,Utilde:PY,utilde:LY,utri:qY,utrif:RY,uuarr:DY,Uuml:NY,uuml:BY,uwangle:IY,vangrt:zY,varepsilon:_Y,varkappa:MY,varnothing:GY,varphi:UY,varpi:VY,varpropto:WY,varr:FY,vArr:jY,varrho:HY,varsigma:YY,varsubsetneq:$Y,varsubsetneqq:KY,varsupsetneq:XY,varsupsetneqq:QY,vartheta:ZY,vartriangleleft:JY,vartriangleright:e$,vBar:t$,Vbar:n$,vBarv:r$,Vcy:a$,vcy:o$,vdash:i$,vDash:s$,Vdash:l$,VDash:d$,Vdashl:c$,veebar:p$,vee:u$,Vee:m$,veeeq:g$,vellip:h$,verbar:f$,Verbar:y$,vert:b$,Vert:x$,VerticalBar:k$,VerticalLine:S$,VerticalSeparator:w$,VerticalTilde:v$,VeryThinSpace:T$,Vfr:C$,vfr:E$,vltri:A$,vnsub:O$,vnsup:P$,Vopf:L$,vopf:q$,vprop:R$,vrtri:D$,Vscr:N$,vscr:B$,vsubnE:I$,vsubne:z$,vsupnE:_$,vsupne:M$,Vvdash:G$,vzigzag:U$,Wcirc:V$,wcirc:W$,wedbar:F$,wedge:j$,Wedge:H$,wedgeq:Y$,weierp:$$,Wfr:K$,wfr:X$,Wopf:Q$,wopf:Z$,wp:J$,wr:eK,wreath:tK,Wscr:nK,wscr:rK,xcap:aK,xcirc:oK,xcup:iK,xdtri:sK,Xfr:lK,xfr:dK,xharr:cK,xhArr:pK,Xi:uK,xi:mK,xlarr:gK,xlArr:hK,xmap:fK,xnis:yK,xodot:bK,Xopf:xK,xopf:kK,xoplus:SK,xotime:wK,xrarr:vK,xrArr:TK,Xscr:CK,xscr:EK,xsqcup:AK,xuplus:OK,xutri:PK,xvee:LK,xwedge:qK,Yacute:RK,yacute:DK,YAcy:NK,yacy:BK,Ycirc:IK,ycirc:zK,Ycy:_K,ycy:MK,yen:GK,Yfr:UK,yfr:VK,YIcy:WK,yicy:FK,Yopf:jK,yopf:HK,Yscr:YK,yscr:$K,YUcy:KK,yucy:XK,yuml:QK,Yuml:ZK,Zacute:JK,zacute:eX,Zcaron:tX,zcaron:nX,Zcy:rX,zcy:aX,Zdot:oX,zdot:iX,zeetrf:sX,ZeroWidthSpace:lX,Zeta:dX,zeta:cX,zfr:pX,Zfr:uX,ZHcy:mX,zhcy:gX,zigrarr:hX,zopf:fX,Zopf:yX,Zscr:bX,zscr:xX,zwj:kX,zwnj:SX,in:'\u2208',Map:'\u2905'},vX=Object.freeze({Aacute:zc,aacute:_c,Abreve:Mc,abreve:Gc,ac:Uc,acd:Vc,acE:Wc,Acirc:Fc,acirc:jc,acute:Hc,Acy:Yc,acy:$c,AElig:Kc,aelig:Xc,af:Qc,Afr:Zc,afr:Jc,Agrave:ep,agrave:tp,alefsym:np,aleph:rp,Alpha:op,alpha:ip,Amacr:sp,amacr:lp,amalg:dp,amp:cp,AMP:pp,andand:up,And:gp,and:hp,andd:fp,andslope:yp,andv:bp,ang:xp,ange:kp,angle:Sp,angmsdaa:vp,angmsdab:Tp,angmsdac:Cp,angmsdad:Ep,angmsdae:Ap,angmsdaf:Op,angmsdag:Pp,angmsdah:Lp,angmsd:qp,angrt:Rp,angrtvb:Dp,angrtvbd:Np,angsph:Bp,angst:Ip,angzarr:zp,Aogon:_p,aogon:Mp,Aopf:Gp,aopf:Up,apacir:Vp,ap:Wp,apE:Fp,ape:jp,apid:Hp,apos:Yp,ApplyFunction:$p,approx:Kp,approxeq:Xp,Aring:Qp,aring:Zp,Ascr:Jp,ascr:eu,Assign:tu,ast:ru,asymp:au,asympeq:ou,Atilde:iu,atilde:su,Auml:lu,auml:du,awconint:cu,awint:pu,backcong:uu,backepsilon:gu,backprime:hu,backsim:fu,backsimeq:yu,Backslash:bu,Barv:xu,barvee:ku,barwed:Su,Barwed:wu,barwedge:vu,bbrk:Tu,bbrktbrk:Cu,bcong:Eu,Bcy:Au,bcy:Ou,bdquo:Pu,becaus:Lu,because:qu,Because:Ru,bemptyv:Du,bepsi:Bu,bernou:Iu,Bernoullis:zu,Beta:_u,beta:Gu,beth:Uu,between:Vu,Bfr:Wu,bfr:Fu,bigcap:ju,bigcirc:Hu,bigcup:Yu,bigodot:$u,bigoplus:Ku,bigotimes:Xu,bigsqcup:Qu,bigstar:Zu,bigtriangledown:Ju,bigtriangleup:em,biguplus:tm,bigvee:nm,bigwedge:rm,bkarow:am,blacklozenge:om,blacksquare:im,blacktriangle:sm,blacktriangledown:lm,blacktriangleleft:dm,blacktriangleright:cm,blank:um,blk12:mm,blk14:gm,blk34:hm,block:fm,bne:ym,bnequiv:bm,bNot:xm,bnot:km,Bopf:Sm,bopf:wm,bot:vm,bottom:Tm,bowtie:Cm,boxbox:Em,boxdl:Am,boxdL:Om,boxDl:Pm,boxDL:Lm,boxdr:qm,boxdR:Rm,boxDr:Dm,boxDR:Nm,boxh:Bm,boxH:zm,boxhd:_m,boxHd:Mm,boxhD:Gm,boxHD:Um,boxhu:Vm,boxHu:Wm,boxhU:Fm,boxHU:jm,boxminus:Hm,boxplus:Ym,boxtimes:$m,boxul:Km,boxuL:Xm,boxUl:Qm,boxUL:Zm,boxur:Jm,boxuR:tg,boxUr:ng,boxUR:rg,boxv:ag,boxV:og,boxvh:ig,boxvH:sg,boxVh:dg,boxVH:cg,boxvl:pg,boxvL:ug,boxVl:mg,boxVL:hg,boxvr:fg,boxvR:yg,boxVr:bg,boxVR:xg,bprime:kg,breve:Sg,Breve:wg,brvbar:vg,bscr:Tg,Bscr:Cg,bsemi:Eg,bsim:Ag,bsime:Og,bsolb:Pg,bsol:Lg,bsolhsub:qg,bull:Rg,bullet:Dg,bump:Ng,bumpE:Bg,bumpe:Ig,Bumpeq:zg,bumpeq:_g,Cacute:Mg,cacute:Ug,capand:Vg,capbrcup:Wg,capcap:Fg,cap:jg,Cap:Hg,capcup:Yg,capdot:$g,CapitalDifferentialD:Kg,caps:Xg,caret:Qg,caron:Zg,Cayleys:Jg,ccaps:eh,Ccaron:th,ccaron:nh,Ccedil:rh,ccedil:ah,Ccirc:oh,ccirc:ih,Cconint:sh,ccups:lh,ccupssm:dh,Cdot:ch,cdot:ph,cedil:uh,Cedilla:mh,cemptyv:gh,cent:hh,centerdot:fh,CenterDot:yh,cfr:bh,Cfr:xh,CHcy:kh,chcy:Sh,check:wh,checkmark:vh,Chi:Th,chi:Ch,circ:Eh,circeq:Ah,circlearrowleft:Oh,circlearrowright:Ph,circledast:Lh,circledcirc:qh,circleddash:Rh,CircleDot:Dh,circledR:Nh,circledS:Bh,CircleMinus:Ih,CirclePlus:zh,CircleTimes:_h,cir:Mh,cirE:Gh,cire:Uh,cirfnint:Vh,cirmid:Wh,cirscir:Fh,ClockwiseContourIntegral:jh,CloseCurlyDoubleQuote:Hh,CloseCurlyQuote:Yh,clubs:$h,clubsuit:Kh,colon:Xh,Colon:Qh,Colone:Zh,colone:Jh,coloneq:ef,comma:tf,commat:nf,comp:rf,compfn:of,complement:sf,complexes:lf,cong:df,congdot:cf,Congruent:pf,conint:uf,Conint:mf,ContourIntegral:gf,copf:hf,Copf:ff,coprod:yf,Coproduct:bf,copy:xf,COPY:kf,copysr:Sf,CounterClockwiseContourIntegral:wf,crarr:vf,cross:Tf,Cross:Cf,Cscr:Ef,cscr:Af,csub:Of,csube:Pf,csup:Lf,csupe:qf,ctdot:Rf,cudarrl:Df,cudarrr:Nf,cuepr:Bf,cuesc:If,cularr:zf,cularrp:_f,cupbrcap:Mf,cupcap:Gf,CupCap:Uf,cup:Vf,Cup:Wf,cupcup:Ff,cupdot:jf,cupor:Hf,cups:Yf,curarr:$f,curarrm:Kf,curlyeqprec:Xf,curlyeqsucc:Qf,curlyvee:Zf,curlywedge:Jf,curren:ey,curvearrowleft:ty,curvearrowright:ny,cuvee:ry,cuwed:ay,cwconint:oy,cwint:iy,cylcty:sy,dagger:ly,Dagger:dy,daleth:cy,darr:py,Darr:uy,dArr:my,dash:gy,Dashv:hy,dashv:fy,dbkarow:yy,dblac:by,Dcaron:xy,dcaron:ky,Dcy:Sy,dcy:wy,ddagger:vy,ddarr:Ty,DD:Cy,dd:Ey,DDotrahd:Ay,ddotseq:Oy,deg:Py,Del:Ly,Delta:qy,delta:Ry,demptyv:Dy,dfisht:Ny,Dfr:By,dfr:Iy,dHar:zy,dharl:_y,dharr:My,DiacriticalAcute:Gy,DiacriticalDot:Uy,DiacriticalDoubleAcute:Vy,DiacriticalGrave:Wy,DiacriticalTilde:Fy,diam:jy,diamond:Hy,Diamond:Yy,diamondsuit:$y,diams:Ky,die:Xy,DifferentialD:Qy,digamma:Zy,disin:Jy,div:eb,divide:tb,divideontimes:nb,divonx:rb,DJcy:ab,djcy:ob,dlcorn:ib,dlcrop:sb,dollar:lb,Dopf:db,dopf:cb,Dot:pb,dot:ub,DotDot:mb,doteq:gb,doteqdot:hb,DotEqual:fb,dotminus:yb,dotplus:bb,dotsquare:xb,doublebarwedge:kb,DoubleContourIntegral:Sb,DoubleDot:wb,DoubleDownArrow:vb,DoubleLeftArrow:Tb,DoubleLeftRightArrow:Cb,DoubleLeftTee:Eb,DoubleLongLeftArrow:Ab,DoubleLongLeftRightArrow:Ob,DoubleLongRightArrow:Pb,DoubleRightArrow:Lb,DoubleRightTee:qb,DoubleUpArrow:Rb,DoubleUpDownArrow:Db,DoubleVerticalBar:Nb,DownArrowBar:Bb,downarrow:Ib,DownArrow:zb,Downarrow:_b,DownArrowUpArrow:Mb,DownBreve:Gb,downdownarrows:Ub,downharpoonleft:Vb,downharpoonright:Wb,DownLeftRightVector:Fb,DownLeftTeeVector:jb,DownLeftVectorBar:Hb,DownLeftVector:Yb,DownRightTeeVector:$b,DownRightVectorBar:Kb,DownRightVector:Xb,DownTeeArrow:Qb,DownTee:Zb,drbkarow:Jb,drcorn:ex,drcrop:tx,Dscr:nx,dscr:ax,DScy:ox,dscy:ix,dsol:sx,Dstrok:lx,dstrok:dx,dtdot:cx,dtri:px,dtrif:ux,duarr:mx,duhar:gx,dwangle:hx,DZcy:fx,dzcy:yx,dzigrarr:bx,Eacute:xx,eacute:kx,easter:Sx,Ecaron:wx,ecaron:vx,Ecirc:Tx,ecirc:Cx,ecir:Ex,ecolon:Ax,Ecy:Ox,ecy:Px,eDDot:Lx,Edot:qx,edot:Rx,eDot:Dx,ee:Nx,efDot:Bx,Efr:Ix,efr:zx,eg:_x,Egrave:Mx,egrave:Gx,egs:Ux,egsdot:Vx,el:Wx,Element:Fx,elinters:jx,ell:Hx,els:Yx,elsdot:$x,Emacr:Kx,emacr:Xx,empty:Qx,emptyset:Zx,EmptySmallSquare:Jx,emptyv:ek,EmptyVerySmallSquare:tk,emsp13:nk,emsp14:rk,emsp:ak,ENG:ok,eng:ik,ensp:sk,Eogon:lk,eogon:dk,Eopf:ck,eopf:pk,epar:uk,eparsl:mk,eplus:gk,epsi:hk,Epsilon:fk,epsilon:yk,epsiv:bk,eqcirc:xk,eqcolon:kk,eqsim:Sk,eqslantgtr:wk,eqslantless:vk,Equal:Tk,equals:Ck,EqualTilde:Ek,equest:Ak,Equilibrium:Ok,equiv:Pk,equivDD:Lk,eqvparsl:qk,erarr:Rk,erDot:Dk,escr:Nk,Escr:Bk,esdot:Ik,Esim:zk,esim:_k,Eta:Mk,eta:Gk,ETH:Uk,eth:Vk,Euml:Wk,euml:Fk,euro:jk,excl:Hk,exist:Yk,Exists:$k,expectation:Kk,exponentiale:Xk,ExponentialE:Qk,fallingdotseq:Zk,Fcy:Jk,fcy:eS,female:tS,ffilig:nS,fflig:rS,ffllig:aS,Ffr:iS,ffr:sS,filig:lS,FilledSmallSquare:dS,FilledVerySmallSquare:cS,fjlig:pS,flat:uS,fllig:mS,fltns:gS,fnof:hS,Fopf:fS,fopf:yS,forall:bS,ForAll:xS,fork:kS,forkv:SS,Fouriertrf:wS,fpartint:vS,frac12:TS,frac13:CS,frac14:ES,frac15:AS,frac16:OS,frac18:PS,frac23:LS,frac25:qS,frac34:RS,frac35:DS,frac38:NS,frac45:BS,frac56:IS,frac58:zS,frac78:_S,frasl:MS,frown:GS,fscr:US,Fscr:VS,gacute:WS,Gamma:FS,gamma:jS,Gammad:HS,gammad:YS,gap:$S,Gbreve:KS,gbreve:XS,Gcedil:QS,Gcirc:ZS,gcirc:JS,Gcy:ew,gcy:tw,Gdot:nw,gdot:rw,ge:aw,gE:ow,gEl:iw,gel:sw,geq:lw,geqq:dw,geqslant:cw,gescc:pw,ges:uw,gesdot:mw,gesdoto:gw,gesdotol:hw,gesl:fw,gesles:yw,Gfr:bw,gfr:xw,gg:kw,Gg:Sw,ggg:ww,gimel:vw,GJcy:Tw,gjcy:Cw,gla:Ew,gl:Aw,glE:Ow,glj:Pw,gnap:Lw,gnapprox:qw,gne:Rw,gnE:Dw,gneq:Nw,gneqq:Bw,gnsim:Iw,Gopf:zw,gopf:_w,grave:Mw,GreaterEqual:Gw,GreaterEqualLess:Uw,GreaterFullEqual:Vw,GreaterGreater:Ww,GreaterLess:Fw,GreaterSlantEqual:jw,GreaterTilde:Hw,Gscr:Yw,gscr:$w,gsim:Kw,gsime:Xw,gsiml:Qw,gtcc:Zw,gtcir:Jw,gt:ev,GT:tv,Gt:nv,gtdot:rv,gtlPar:av,gtquest:ov,gtrapprox:iv,gtrarr:sv,gtrdot:lv,gtreqless:dv,gtreqqless:cv,gtrless:pv,gtrsim:uv,gvertneqq:mv,gvnE:gv,Hacek:hv,hairsp:fv,half:yv,hamilt:bv,HARDcy:xv,hardcy:kv,harrcir:Sv,harr:wv,hArr:vv,harrw:Tv,Hat:Cv,hbar:Ev,Hcirc:Av,hcirc:Ov,hearts:Pv,heartsuit:Lv,hellip:qv,hercon:Rv,hfr:Dv,Hfr:Nv,HilbertSpace:Bv,hksearow:Iv,hkswarow:zv,hoarr:_v,homtht:Mv,hookleftarrow:Gv,hookrightarrow:Uv,hopf:Vv,Hopf:Wv,horbar:Fv,HorizontalLine:jv,hscr:Hv,Hscr:Yv,hslash:$v,Hstrok:Kv,hstrok:Xv,HumpDownHump:Qv,HumpEqual:Zv,hybull:Jv,hyphen:eT,Iacute:tT,iacute:nT,ic:rT,Icirc:aT,icirc:oT,Icy:iT,icy:sT,Idot:lT,IEcy:dT,iecy:cT,iexcl:pT,iff:uT,ifr:mT,Ifr:gT,Igrave:hT,igrave:fT,ii:yT,iiiint:bT,iiint:xT,iinfin:kT,iiota:ST,IJlig:wT,ijlig:vT,Imacr:TT,imacr:CT,image:ET,ImaginaryI:AT,imagline:OT,imagpart:PT,imath:qT,Im:RT,imof:DT,imped:NT,Implies:BT,incare:IT,infin:zT,infintie:_T,inodot:MT,intcal:UT,int:VT,Int:WT,integers:FT,Integral:jT,intercal:HT,Intersection:YT,intlarhk:$T,intprod:KT,InvisibleComma:XT,InvisibleTimes:QT,IOcy:ZT,iocy:JT,Iogon:eC,iogon:tC,Iopf:nC,iopf:rC,Iota:aC,iota:oC,iprod:iC,iquest:sC,iscr:lC,Iscr:dC,isin:cC,isindot:pC,isinE:uC,isins:mC,isinsv:gC,isinv:hC,it:fC,Itilde:yC,itilde:bC,Iukcy:xC,iukcy:kC,Iuml:SC,iuml:wC,Jcirc:vC,jcirc:TC,Jcy:CC,jcy:EC,Jfr:AC,jfr:OC,jmath:PC,Jopf:LC,jopf:qC,Jscr:RC,jscr:DC,Jsercy:NC,jsercy:BC,Jukcy:IC,jukcy:zC,Kappa:_C,kappa:MC,kappav:GC,Kcedil:UC,kcedil:VC,Kcy:WC,kcy:FC,Kfr:jC,kfr:HC,kgreen:YC,KHcy:$C,khcy:KC,KJcy:XC,kjcy:QC,Kopf:ZC,kopf:JC,Kscr:eE,kscr:tE,lAarr:nE,Lacute:rE,lacute:aE,laemptyv:oE,lagran:iE,Lambda:sE,lambda:dE,lang:cE,Lang:pE,langd:uE,langle:mE,lap:hE,Laplacetrf:fE,laquo:yE,larrb:bE,larrbfs:xE,larr:kE,Larr:SE,lArr:wE,larrfs:vE,larrhk:TE,larrlp:CE,larrpl:EE,larrsim:AE,larrtl:OE,latail:PE,lAtail:LE,lat:qE,late:RE,lates:DE,lbarr:NE,lBarr:BE,lbbrk:IE,lbrace:zE,lbrack:_E,lbrke:ME,lbrksld:GE,lbrkslu:UE,Lcaron:VE,lcaron:WE,Lcedil:FE,lcedil:jE,lceil:HE,lcub:YE,Lcy:$E,lcy:KE,ldca:XE,ldquo:QE,ldquor:ZE,ldrdhar:JE,ldrushar:eA,ldsh:tA,le:nA,lE:rA,LeftAngleBracket:aA,LeftArrowBar:oA,leftarrow:iA,LeftArrow:sA,Leftarrow:lA,LeftArrowRightArrow:dA,leftarrowtail:cA,LeftCeiling:pA,LeftDoubleBracket:uA,LeftDownTeeVector:mA,LeftDownVectorBar:gA,LeftDownVector:hA,LeftFloor:fA,leftharpoondown:yA,leftharpoonup:bA,leftleftarrows:xA,leftrightarrow:kA,LeftRightArrow:SA,Leftrightarrow:wA,leftrightarrows:vA,leftrightharpoons:TA,leftrightsquigarrow:CA,LeftRightVector:EA,LeftTeeArrow:AA,LeftTee:OA,LeftTeeVector:PA,leftthreetimes:LA,LeftTriangleBar:qA,LeftTriangle:RA,LeftTriangleEqual:DA,LeftUpDownVector:NA,LeftUpTeeVector:BA,LeftUpVectorBar:IA,LeftUpVector:zA,LeftVectorBar:_A,LeftVector:MA,lEg:GA,leg:UA,leq:VA,leqq:WA,leqslant:FA,lescc:jA,les:HA,lesdot:YA,lesdoto:$A,lesdotor:KA,lesg:XA,lesges:QA,lessapprox:ZA,lessdot:JA,lesseqgtr:eO,lesseqqgtr:tO,LessEqualGreater:nO,LessFullEqual:rO,LessGreater:aO,lessgtr:oO,LessLess:iO,lesssim:sO,LessSlantEqual:lO,LessTilde:dO,lfisht:cO,lfloor:pO,Lfr:uO,lfr:mO,lg:gO,lgE:hO,lHar:fO,lhard:yO,lharu:bO,lharul:xO,lhblk:kO,LJcy:SO,ljcy:wO,llarr:vO,ll:TO,Ll:CO,llcorner:EO,Lleftarrow:AO,llhard:OO,lltri:PO,Lmidot:LO,lmidot:qO,lmoustache:RO,lmoust:DO,lnap:NO,lnapprox:BO,lne:IO,lnE:zO,lneq:_O,lneqq:MO,lnsim:GO,loang:UO,loarr:VO,lobrk:WO,longleftarrow:FO,LongLeftArrow:jO,Longleftarrow:HO,longleftrightarrow:YO,LongLeftRightArrow:$O,Longleftrightarrow:KO,longmapsto:XO,longrightarrow:QO,LongRightArrow:ZO,Longrightarrow:JO,looparrowleft:eP,looparrowright:tP,lopar:nP,Lopf:rP,lopf:aP,loplus:oP,lotimes:iP,lowast:sP,lowbar:lP,LowerLeftArrow:dP,LowerRightArrow:cP,loz:pP,lozenge:uP,lozf:mP,lpar:gP,lparlt:hP,lrarr:fP,lrcorner:yP,lrhar:bP,lrhard:xP,lrm:kP,lrtri:SP,lsaquo:wP,lscr:vP,Lscr:TP,lsh:CP,Lsh:EP,lsim:AP,lsime:OP,lsimg:PP,lsqb:LP,lsquo:qP,lsquor:RP,Lstrok:DP,lstrok:NP,ltcc:BP,ltcir:IP,lt:zP,LT:_P,Lt:MP,ltdot:GP,lthree:UP,ltimes:VP,ltlarr:WP,ltquest:FP,ltri:jP,ltrie:HP,ltrif:YP,ltrPar:$P,lurdshar:KP,luruhar:XP,lvertneqq:QP,lvnE:ZP,macr:JP,male:eL,malt:tL,maltese:nL,map:rL,mapsto:aL,mapstodown:oL,mapstoleft:iL,mapstoup:sL,marker:lL,mcomma:dL,Mcy:cL,mcy:pL,mdash:uL,mDDot:mL,measuredangle:gL,MediumSpace:hL,Mellintrf:fL,Mfr:yL,mfr:bL,mho:xL,micro:kL,midast:SL,midcir:wL,mid:vL,middot:TL,minusb:CL,minus:EL,minusd:AL,minusdu:OL,MinusPlus:PL,mlcp:LL,mldr:qL,mnplus:RL,models:DL,Mopf:NL,mopf:BL,mp:IL,mscr:zL,Mscr:_L,mstpos:ML,Mu:GL,mu:UL,multimap:VL,mumap:WL,nabla:FL,Nacute:jL,nacute:HL,nang:YL,nap:$L,napE:KL,napid:XL,napos:QL,napprox:ZL,natural:JL,naturals:eq,natur:tq,nbsp:nq,nbump:rq,nbumpe:aq,ncap:oq,Ncaron:iq,ncaron:sq,Ncedil:lq,ncedil:dq,ncong:cq,ncongdot:pq,ncup:uq,Ncy:mq,ncy:gq,ndash:hq,nearhk:fq,nearr:yq,neArr:bq,nearrow:xq,ne:kq,nedot:Sq,NegativeMediumSpace:wq,NegativeThickSpace:vq,NegativeThinSpace:Tq,NegativeVeryThinSpace:Cq,nequiv:Eq,nesear:Aq,nesim:Oq,NestedGreaterGreater:Pq,NestedLessLess:Lq,NewLine:qq,nexist:Rq,nexists:Dq,Nfr:Nq,nfr:Bq,ngE:Iq,nge:zq,ngeq:_q,ngeqq:Mq,ngeqslant:Gq,nges:Uq,nGg:Vq,ngsim:Wq,nGt:Fq,ngt:jq,ngtr:Hq,nGtv:Yq,nharr:$q,nhArr:Kq,nhpar:Xq,ni:Qq,nis:Zq,nisd:Jq,niv:eR,NJcy:tR,njcy:nR,nlarr:rR,nlArr:aR,nldr:oR,nlE:iR,nle:sR,nleftarrow:lR,nLeftarrow:dR,nleftrightarrow:cR,nLeftrightarrow:pR,nleq:uR,nleqq:mR,nleqslant:gR,nles:hR,nless:fR,nLl:yR,nlsim:bR,nLt:xR,nlt:kR,nltri:SR,nltrie:wR,nLtv:vR,nmid:TR,NoBreak:CR,NonBreakingSpace:ER,nopf:AR,Nopf:OR,Not:PR,not:LR,NotCongruent:qR,NotCupCap:RR,NotDoubleVerticalBar:DR,NotElement:NR,NotEqual:BR,NotEqualTilde:IR,NotExists:zR,NotGreater:_R,NotGreaterEqual:MR,NotGreaterFullEqual:GR,NotGreaterGreater:UR,NotGreaterLess:VR,NotGreaterSlantEqual:WR,NotGreaterTilde:FR,NotHumpDownHump:jR,NotHumpEqual:HR,notin:YR,notindot:$R,notinE:KR,notinva:XR,notinvb:QR,notinvc:ZR,NotLeftTriangleBar:JR,NotLeftTriangle:eD,NotLeftTriangleEqual:tD,NotLess:nD,NotLessEqual:rD,NotLessGreater:aD,NotLessLess:oD,NotLessSlantEqual:iD,NotLessTilde:sD,NotNestedGreaterGreater:lD,NotNestedLessLess:dD,notni:cD,notniva:pD,notnivb:uD,notnivc:mD,NotPrecedes:gD,NotPrecedesEqual:hD,NotPrecedesSlantEqual:fD,NotReverseElement:yD,NotRightTriangleBar:bD,NotRightTriangle:xD,NotRightTriangleEqual:kD,NotSquareSubset:SD,NotSquareSubsetEqual:wD,NotSquareSuperset:vD,NotSquareSupersetEqual:TD,NotSubset:CD,NotSubsetEqual:ED,NotSucceeds:AD,NotSucceedsEqual:OD,NotSucceedsSlantEqual:PD,NotSucceedsTilde:LD,NotSuperset:qD,NotSupersetEqual:RD,NotTilde:ND,NotTildeEqual:BD,NotTildeFullEqual:ID,NotTildeTilde:zD,NotVerticalBar:_D,nparallel:MD,npar:GD,nparsl:UD,npart:VD,npolint:WD,npr:FD,nprcue:jD,nprec:HD,npreceq:YD,npre:$D,nrarrc:KD,nrarr:XD,nrArr:QD,nrarrw:ZD,nrightarrow:JD,nRightarrow:eN,nrtri:tN,nrtrie:nN,nsc:rN,nsccue:aN,nsce:oN,Nscr:iN,nscr:sN,nshortmid:lN,nshortparallel:dN,nsim:cN,nsime:pN,nsimeq:uN,nsmid:mN,nspar:gN,nsqsube:hN,nsqsupe:fN,nsub:yN,nsubE:bN,nsube:xN,nsubset:kN,nsubseteq:SN,nsubseteqq:wN,nsucc:vN,nsucceq:TN,nsup:CN,nsupE:EN,nsupe:AN,nsupset:ON,nsupseteq:PN,nsupseteqq:LN,ntgl:qN,Ntilde:RN,ntilde:DN,ntlg:NN,ntriangleleft:BN,ntrianglelefteq:IN,ntriangleright:zN,ntrianglerighteq:_N,Nu:MN,nu:GN,num:UN,numero:VN,numsp:WN,nvap:FN,nvdash:jN,nvDash:HN,nVdash:YN,nVDash:$N,nvge:KN,nvgt:XN,nvHarr:QN,nvinfin:ZN,nvlArr:JN,nvle:eB,nvlt:tB,nvltrie:nB,nvrArr:rB,nvrtrie:aB,nvsim:oB,nwarhk:iB,nwarr:sB,nwArr:lB,nwarrow:dB,nwnear:cB,Oacute:pB,oacute:uB,oast:mB,Ocirc:gB,ocirc:hB,ocir:fB,Ocy:yB,ocy:bB,odash:xB,Odblac:kB,odblac:SB,odiv:wB,odot:vB,odsold:TB,OElig:CB,oelig:EB,ofcir:AB,Ofr:OB,ofr:PB,ogon:LB,Ograve:qB,ograve:RB,ogt:DB,ohbar:NB,ohm:BB,oint:IB,olarr:zB,olcir:_B,olcross:MB,oline:GB,olt:UB,Omacr:VB,omacr:WB,Omega:FB,omega:jB,Omicron:HB,omicron:YB,omid:$B,ominus:KB,Oopf:XB,oopf:QB,opar:ZB,OpenCurlyDoubleQuote:JB,OpenCurlyQuote:eI,operp:tI,oplus:nI,orarr:rI,Or:aI,or:oI,ord:iI,order:sI,orderof:lI,ordf:dI,ordm:cI,origof:pI,oror:uI,orslope:mI,orv:gI,oS:hI,Oscr:fI,oscr:yI,Oslash:bI,oslash:xI,osol:kI,Otilde:SI,otilde:wI,otimesas:vI,Otimes:TI,otimes:CI,Ouml:EI,ouml:AI,ovbar:OI,OverBar:PI,OverBrace:LI,OverBracket:qI,OverParenthesis:RI,para:DI,parallel:NI,par:BI,parsim:II,parsl:zI,part:_I,PartialD:MI,Pcy:GI,pcy:UI,percnt:VI,period:WI,permil:FI,perp:jI,pertenk:HI,Pfr:YI,pfr:$I,Phi:KI,phi:XI,phiv:QI,phmmat:ZI,phone:JI,Pi:ez,pi:tz,pitchfork:nz,piv:rz,planck:az,planckh:oz,plankv:iz,plusacir:sz,plusb:lz,pluscir:dz,plus:cz,plusdo:pz,plusdu:uz,pluse:mz,PlusMinus:gz,plusmn:hz,plussim:fz,plustwo:yz,pm:bz,Poincareplane:xz,pointint:kz,popf:Sz,Popf:wz,pound:vz,prap:Tz,Pr:Cz,pr:Ez,prcue:Az,precapprox:Oz,prec:Pz,preccurlyeq:Lz,Precedes:qz,PrecedesEqual:Rz,PrecedesSlantEqual:Dz,PrecedesTilde:Nz,preceq:Bz,precnapprox:Iz,precneqq:zz,precnsim:_z,pre:Mz,prE:Gz,precsim:Uz,prime:Vz,Prime:Wz,primes:Fz,prnap:jz,prnE:Hz,prnsim:Yz,prod:$z,Product:Kz,profalar:Xz,profline:Qz,profsurf:Zz,prop:Jz,Proportional:e_,Proportion:t_,propto:n_,prsim:r_,prurel:a_,Pscr:o_,pscr:i_,Psi:s_,psi:l_,puncsp:d_,Qfr:c_,qfr:p_,qint:u_,qopf:m_,Qopf:g_,qprime:h_,Qscr:f_,qscr:y_,quaternions:b_,quatint:x_,quest:k_,questeq:S_,quot:w_,QUOT:v_,rAarr:T_,race:C_,Racute:E_,racute:A_,radic:O_,raemptyv:P_,rang:L_,Rang:q_,rangd:R_,range:D_,rangle:N_,raquo:B_,rarrap:I_,rarrb:z_,rarrbfs:__,rarrc:M_,rarr:G_,Rarr:U_,rArr:V_,rarrfs:W_,rarrhk:F_,rarrlp:j_,rarrpl:H_,rarrsim:Y_,Rarrtl:$_,rarrtl:K_,rarrw:X_,ratail:Q_,rAtail:Z_,ratio:J_,rationals:eM,rbarr:tM,rBarr:nM,RBarr:rM,rbbrk:aM,rbrace:oM,rbrack:iM,rbrke:sM,rbrksld:lM,rbrkslu:dM,Rcaron:cM,rcaron:pM,Rcedil:uM,rcedil:mM,rceil:gM,rcub:hM,Rcy:fM,rcy:yM,rdca:bM,rdldhar:xM,rdquo:kM,rdquor:SM,rdsh:wM,real:vM,realine:TM,realpart:CM,reals:EM,Re:AM,rect:OM,reg:PM,REG:LM,ReverseElement:qM,ReverseEquilibrium:RM,ReverseUpEquilibrium:DM,rfisht:NM,rfloor:BM,rfr:IM,Rfr:zM,rHar:_M,rhard:MM,rharu:GM,rharul:UM,Rho:VM,rho:WM,rhov:FM,RightAngleBracket:jM,RightArrowBar:HM,rightarrow:YM,RightArrow:$M,Rightarrow:KM,RightArrowLeftArrow:XM,rightarrowtail:QM,RightCeiling:ZM,RightDoubleBracket:JM,RightDownTeeVector:eG,RightDownVectorBar:tG,RightDownVector:nG,RightFloor:rG,rightharpoondown:aG,rightharpoonup:oG,rightleftarrows:iG,rightleftharpoons:sG,rightrightarrows:lG,rightsquigarrow:dG,RightTeeArrow:cG,RightTee:pG,RightTeeVector:uG,rightthreetimes:mG,RightTriangleBar:gG,RightTriangle:hG,RightTriangleEqual:fG,RightUpDownVector:yG,RightUpTeeVector:bG,RightUpVectorBar:xG,RightUpVector:kG,RightVectorBar:SG,RightVector:wG,ring:vG,risingdotseq:TG,rlarr:CG,rlhar:EG,rlm:AG,rmoustache:OG,rmoust:PG,rnmid:LG,roang:qG,roarr:RG,robrk:DG,ropar:NG,ropf:BG,Ropf:IG,roplus:zG,rotimes:_G,RoundImplies:MG,rpar:GG,rpargt:UG,rppolint:VG,rrarr:WG,Rrightarrow:FG,rsaquo:jG,rscr:HG,Rscr:YG,rsh:$G,Rsh:KG,rsqb:XG,rsquo:QG,rsquor:ZG,rthree:JG,rtimes:eU,rtri:tU,rtrie:nU,rtrif:rU,rtriltri:aU,RuleDelayed:oU,ruluhar:iU,rx:sU,Sacute:lU,sacute:dU,sbquo:cU,scap:pU,Scaron:uU,scaron:mU,Sc:gU,sc:hU,sccue:fU,sce:yU,scE:bU,Scedil:xU,scedil:kU,Scirc:SU,scirc:wU,scnap:vU,scnE:TU,scnsim:CU,scpolint:EU,scsim:AU,Scy:OU,scy:PU,sdotb:LU,sdot:qU,sdote:RU,searhk:DU,searr:NU,seArr:BU,searrow:IU,sect:zU,semi:_U,seswar:MU,setminus:GU,setmn:UU,sext:VU,Sfr:WU,sfr:FU,sfrown:jU,sharp:HU,SHCHcy:YU,shchcy:$U,SHcy:KU,shcy:XU,ShortDownArrow:QU,ShortLeftArrow:ZU,shortmid:JU,shortparallel:eV,ShortRightArrow:tV,ShortUpArrow:nV,shy:rV,Sigma:aV,sigma:oV,sigmaf:iV,sigmav:sV,sim:lV,simdot:dV,sime:cV,simeq:pV,simg:uV,simgE:mV,siml:gV,simlE:hV,simne:fV,simplus:yV,simrarr:bV,slarr:xV,SmallCircle:kV,smallsetminus:SV,smashp:wV,smeparsl:vV,smid:TV,smile:CV,smt:EV,smte:AV,smtes:OV,SOFTcy:PV,softcy:LV,solbar:qV,solb:RV,sol:DV,Sopf:NV,sopf:BV,spades:IV,spadesuit:zV,spar:_V,sqcap:MV,sqcaps:GV,sqcup:UV,sqcups:VV,Sqrt:WV,sqsub:FV,sqsube:jV,sqsubset:HV,sqsubseteq:YV,sqsup:$V,sqsupe:KV,sqsupset:XV,sqsupseteq:QV,square:ZV,Square:JV,SquareIntersection:eW,SquareSubset:tW,SquareSubsetEqual:nW,SquareSuperset:rW,SquareSupersetEqual:aW,SquareUnion:oW,squarf:iW,squ:sW,squf:lW,srarr:dW,Sscr:cW,sscr:pW,ssetmn:uW,ssmile:mW,sstarf:gW,Star:hW,star:fW,starf:yW,straightepsilon:bW,straightphi:xW,strns:kW,sub:SW,Sub:wW,subdot:vW,subE:TW,sube:CW,subedot:EW,submult:AW,subnE:OW,subne:PW,subplus:LW,subrarr:qW,subset:RW,Subset:DW,subseteq:NW,subseteqq:BW,SubsetEqual:IW,subsetneq:zW,subsetneqq:_W,subsim:MW,subsub:GW,subsup:UW,succapprox:VW,succ:WW,succcurlyeq:FW,Succeeds:jW,SucceedsEqual:HW,SucceedsSlantEqual:YW,SucceedsTilde:$W,succeq:KW,succnapprox:XW,succneqq:QW,succnsim:ZW,succsim:JW,SuchThat:eF,sum:tF,Sum:nF,sung:rF,sup1:aF,sup2:oF,sup3:iF,sup:sF,Sup:lF,supdot:dF,supdsub:cF,supE:pF,supe:uF,supedot:mF,Superset:gF,SupersetEqual:hF,suphsol:fF,suphsub:yF,suplarr:bF,supmult:xF,supnE:kF,supne:SF,supplus:wF,supset:vF,Supset:TF,supseteq:CF,supseteqq:EF,supsetneq:AF,supsetneqq:OF,supsim:PF,supsub:LF,supsup:qF,swarhk:RF,swarr:DF,swArr:NF,swarrow:BF,swnwar:IF,szlig:zF,Tab:_F,target:MF,Tau:GF,tau:UF,tbrk:VF,Tcaron:WF,tcaron:FF,Tcedil:jF,tcedil:HF,Tcy:YF,tcy:$F,tdot:KF,telrec:XF,Tfr:QF,tfr:ZF,there4:JF,therefore:ej,Therefore:tj,Theta:nj,theta:rj,thetasym:aj,thetav:oj,thickapprox:ij,thicksim:sj,ThickSpace:lj,ThinSpace:dj,thinsp:cj,thkap:pj,thksim:uj,THORN:mj,thorn:gj,tilde:hj,Tilde:fj,TildeEqual:yj,TildeFullEqual:bj,TildeTilde:xj,timesbar:kj,timesb:Sj,times:wj,timesd:vj,tint:Tj,toea:Cj,topbot:Ej,topcir:Aj,top:Oj,Topf:Pj,topf:Lj,topfork:qj,tosa:Rj,tprime:Dj,trade:Nj,TRADE:Bj,triangle:Ij,triangledown:zj,triangleleft:_j,trianglelefteq:Mj,triangleq:Gj,triangleright:Uj,trianglerighteq:Vj,tridot:Wj,trie:Fj,triminus:jj,TripleDot:Hj,triplus:Yj,trisb:$j,tritime:Kj,trpezium:Xj,Tscr:Qj,tscr:Zj,TScy:Jj,tscy:eH,TSHcy:tH,tshcy:nH,Tstrok:rH,tstrok:aH,twixt:oH,twoheadleftarrow:iH,twoheadrightarrow:sH,Uacute:lH,uacute:dH,uarr:cH,Uarr:pH,uArr:uH,Uarrocir:mH,Ubrcy:gH,ubrcy:hH,Ubreve:fH,ubreve:yH,Ucirc:bH,ucirc:xH,Ucy:kH,ucy:SH,udarr:wH,Udblac:vH,udblac:TH,udhar:CH,ufisht:EH,Ufr:AH,ufr:OH,Ugrave:PH,ugrave:LH,uHar:qH,uharl:RH,uharr:DH,uhblk:NH,ulcorn:BH,ulcorner:IH,ulcrop:zH,ultri:_H,Umacr:MH,umacr:GH,uml:UH,UnderBar:VH,UnderBrace:WH,UnderBracket:FH,UnderParenthesis:jH,Union:HH,UnionPlus:YH,Uogon:$H,uogon:KH,Uopf:XH,uopf:QH,UpArrowBar:ZH,uparrow:JH,UpArrow:eY,Uparrow:tY,UpArrowDownArrow:nY,updownarrow:rY,UpDownArrow:aY,Updownarrow:oY,UpEquilibrium:iY,upharpoonleft:sY,upharpoonright:lY,uplus:dY,UpperLeftArrow:cY,UpperRightArrow:pY,upsi:uY,Upsi:mY,upsih:gY,Upsilon:hY,upsilon:fY,UpTeeArrow:yY,UpTee:bY,upuparrows:xY,urcorn:kY,urcorner:SY,urcrop:wY,Uring:vY,uring:TY,urtri:CY,Uscr:EY,uscr:AY,utdot:OY,Utilde:PY,utilde:LY,utri:qY,utrif:RY,uuarr:DY,Uuml:NY,uuml:BY,uwangle:IY,vangrt:zY,varepsilon:_Y,varkappa:MY,varnothing:GY,varphi:UY,varpi:VY,varpropto:WY,varr:FY,vArr:jY,varrho:HY,varsigma:YY,varsubsetneq:$Y,varsubsetneqq:KY,varsupsetneq:XY,varsupsetneqq:QY,vartheta:ZY,vartriangleleft:JY,vartriangleright:e$,vBar:t$,Vbar:n$,vBarv:r$,Vcy:a$,vcy:o$,vdash:i$,vDash:s$,Vdash:l$,VDash:d$,Vdashl:c$,veebar:p$,vee:u$,Vee:m$,veeeq:g$,vellip:h$,verbar:f$,Verbar:y$,vert:b$,Vert:x$,VerticalBar:k$,VerticalLine:S$,VerticalSeparator:w$,VerticalTilde:v$,VeryThinSpace:T$,Vfr:C$,vfr:E$,vltri:A$,vnsub:O$,vnsup:P$,Vopf:L$,vopf:q$,vprop:R$,vrtri:D$,Vscr:N$,vscr:B$,vsubnE:I$,vsubne:z$,vsupnE:_$,vsupne:M$,Vvdash:G$,vzigzag:U$,Wcirc:V$,wcirc:W$,wedbar:F$,wedge:j$,Wedge:H$,wedgeq:Y$,weierp:$$,Wfr:K$,wfr:X$,Wopf:Q$,wopf:Z$,wp:J$,wr:eK,wreath:tK,Wscr:nK,wscr:rK,xcap:aK,xcirc:oK,xcup:iK,xdtri:sK,Xfr:lK,xfr:dK,xharr:cK,xhArr:pK,Xi:uK,xi:mK,xlarr:gK,xlArr:hK,xmap:fK,xnis:yK,xodot:bK,Xopf:xK,xopf:kK,xoplus:SK,xotime:wK,xrarr:vK,xrArr:TK,Xscr:CK,xscr:EK,xsqcup:AK,xuplus:OK,xutri:PK,xvee:LK,xwedge:qK,Yacute:RK,yacute:DK,YAcy:NK,yacy:BK,Ycirc:IK,ycirc:zK,Ycy:_K,ycy:MK,yen:GK,Yfr:UK,yfr:VK,YIcy:WK,yicy:FK,Yopf:jK,yopf:HK,Yscr:YK,yscr:$K,YUcy:KK,yucy:XK,yuml:QK,Yuml:ZK,Zacute:JK,zacute:eX,Zcaron:tX,zcaron:nX,Zcy:rX,zcy:aX,Zdot:oX,zdot:iX,zeetrf:sX,ZeroWidthSpace:lX,Zeta:dX,zeta:cX,zfr:pX,Zfr:uX,ZHcy:mX,zhcy:gX,zigrarr:hX,zopf:fX,Zopf:yX,Zscr:bX,zscr:xX,zwj:kX,zwnj:SX,default:wX}),TX=Ic&&Bc||Ic,CX=vX&&wX||vX,EX=Tn(TX),AX=Cn(EX),OX=On(EX,AX),PX=Tn(CX),LX=Cn(PX),qX=On(PX,LX),RX=/[^\0-\x7F]/g,DX=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,NX=Cn(EX),BX={XML:OX,HTML:qX,escape:function(e){return e.replace(NX,En).replace(DX,An).replace(RX,En)}},IX='\xC1',zX='\xE1',_X='\xC2',MX='\xE2',GX='\xB4',UX='\xC6',VX='\xE6',WX='\xC0',FX='\xE0',jX='&',HX='&',YX='\xC5',$X='\xE5',KX='\xC3',XX='\xE3',QX='\xC4',ZX='\xE4',JX='\xA6',eQ='\xC7',tQ='\xE7',nQ='\xB8',rQ='\xA2',aQ='\xA9',oQ='\xA9',iQ='\xA4',sQ='\xB0',lQ='\xF7',dQ='\xC9',cQ='\xE9',pQ='\xCA',uQ='\xEA',mQ='\xC8',gQ='\xE8',hQ='\xD0',fQ='\xF0',yQ='\xCB',bQ='\xEB',xQ='\xBD',kQ='\xBC',SQ='\xBE',wQ='>',vQ='>',TQ='\xCD',CQ='\xED',EQ='\xCE',AQ='\xEE',OQ='\xA1',PQ='\xCC',LQ='\xEC',qQ='\xBF',RQ='\xCF',DQ='\xEF',NQ='\xAB',BQ='<',IQ='<',zQ='\xAF',_Q='\xB5',MQ='\xB7',GQ='\xA0',UQ='\xAC',VQ='\xD1',WQ='\xF1',FQ='\xD3',jQ='\xF3',HQ='\xD4',YQ='\xF4',$Q='\xD2',KQ='\xF2',XQ='\xAA',QQ='\xBA',ZQ='\xD8',JQ='\xF8',eZ='\xD5',tZ='\xF5',nZ='\xD6',rZ='\xF6',aZ='\xB6',oZ='\xB1',iZ='\xA3',sZ='"',lZ='"',dZ='\xBB',cZ='\xAE',pZ='\xAE',uZ='\xA7',mZ='\xAD',gZ='\xB9',hZ='\xB2',fZ='\xB3',yZ='\xDF',bZ='\xDE',xZ='\xFE',kZ='\xD7',SZ='\xDA',wZ='\xFA',vZ='\xDB',TZ='\xFB',CZ='\xD9',EZ='\xF9',AZ='\xA8',OZ='\xDC',PZ='\xFC',LZ='\xDD',qZ='\xFD',RZ='\xA5',DZ='\xFF',NZ={Aacute:IX,aacute:zX,Acirc:_X,acirc:MX,acute:GX,AElig:UX,aelig:VX,Agrave:WX,agrave:FX,amp:jX,AMP:HX,Aring:YX,aring:$X,Atilde:KX,atilde:XX,Auml:QX,auml:ZX,brvbar:JX,Ccedil:eQ,ccedil:tQ,cedil:nQ,cent:rQ,copy:aQ,COPY:oQ,curren:iQ,deg:sQ,divide:lQ,Eacute:dQ,eacute:cQ,Ecirc:pQ,ecirc:uQ,Egrave:mQ,egrave:gQ,ETH:hQ,eth:fQ,Euml:yQ,euml:bQ,frac12:xQ,frac14:kQ,frac34:SQ,gt:wQ,GT:vQ,Iacute:TQ,iacute:CQ,Icirc:EQ,icirc:AQ,iexcl:OQ,Igrave:PQ,igrave:LQ,iquest:qQ,Iuml:RQ,iuml:DQ,laquo:NQ,lt:BQ,LT:IQ,macr:zQ,micro:_Q,middot:MQ,nbsp:GQ,not:UQ,Ntilde:VQ,ntilde:WQ,Oacute:FQ,oacute:jQ,Ocirc:HQ,ocirc:YQ,Ograve:$Q,ograve:KQ,ordf:XQ,ordm:QQ,Oslash:ZQ,oslash:JQ,Otilde:eZ,otilde:tZ,Ouml:nZ,ouml:rZ,para:aZ,plusmn:oZ,pound:iZ,quot:sZ,QUOT:lZ,raquo:dZ,reg:cZ,REG:pZ,sect:uZ,shy:mZ,sup1:gZ,sup2:hZ,sup3:fZ,szlig:yZ,THORN:bZ,thorn:xZ,times:kZ,Uacute:SZ,uacute:wZ,Ucirc:vZ,ucirc:TZ,Ugrave:CZ,ugrave:EZ,uml:AZ,Uuml:OZ,uuml:PZ,Yacute:LZ,yacute:qZ,yen:RZ,yuml:DZ},BZ=Object.freeze({Aacute:IX,aacute:zX,Acirc:_X,acirc:MX,acute:GX,AElig:UX,aelig:VX,Agrave:WX,agrave:FX,amp:jX,AMP:HX,Aring:YX,aring:$X,Atilde:KX,atilde:XX,Auml:QX,auml:ZX,brvbar:JX,Ccedil:eQ,ccedil:tQ,cedil:nQ,cent:rQ,copy:aQ,COPY:oQ,curren:iQ,deg:sQ,divide:lQ,Eacute:dQ,eacute:cQ,Ecirc:pQ,ecirc:uQ,Egrave:mQ,egrave:gQ,ETH:hQ,eth:fQ,Euml:yQ,euml:bQ,frac12:xQ,frac14:kQ,frac34:SQ,gt:wQ,GT:vQ,Iacute:TQ,iacute:CQ,Icirc:EQ,icirc:AQ,iexcl:OQ,Igrave:PQ,igrave:LQ,iquest:qQ,Iuml:RQ,iuml:DQ,laquo:NQ,lt:BQ,LT:IQ,macr:zQ,micro:_Q,middot:MQ,nbsp:GQ,not:UQ,Ntilde:VQ,ntilde:WQ,Oacute:FQ,oacute:jQ,Ocirc:HQ,ocirc:YQ,Ograve:$Q,ograve:KQ,ordf:XQ,ordm:QQ,Oslash:ZQ,oslash:JQ,Otilde:eZ,otilde:tZ,Ouml:nZ,ouml:rZ,para:aZ,plusmn:oZ,pound:iZ,quot:sZ,QUOT:lZ,raquo:dZ,reg:cZ,REG:pZ,sect:uZ,shy:mZ,sup1:gZ,sup2:hZ,sup3:fZ,szlig:yZ,THORN:bZ,thorn:xZ,times:kZ,Uacute:SZ,uacute:wZ,Ucirc:vZ,ucirc:TZ,Ugrave:CZ,ugrave:EZ,uml:AZ,Uuml:OZ,uuml:PZ,Yacute:LZ,yacute:qZ,yen:RZ,yuml:DZ,default:NZ}),IZ={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},zZ=Object.freeze({default:IZ}),_Z=zZ&&IZ||zZ,MZ=function(e){if(55296<=e&&57343>=e||1114111>>10),e=56320|1023&e),t+=Gd(e),t},GZ=BZ&&NZ||BZ,UZ=Pn(TX),VZ=Pn(CX),WZ=function(){function e(e){return';'!==e.substr(-1)&&(e+=';'),i(e)}for(var t=Object.keys(GZ).sort(Ln),n=Object.keys(CX).sort(Ln),r=0,a=0;r=t?FZ.XML:FZ.HTML)(e)},t.decodeStrict=function(e,t){return(!t||0>=t?FZ.XML:FZ.HTMLStrict)(e)},t.encode=function(e,t){return(!t||0>=t?BX.XML:BX.HTML)(e)},t.encodeXML=BX.XML,t.encodeHTML4=t.encodeHTML5=t.encodeHTML=BX.HTML,t.decodeXML=t.decodeXMLStrict=FZ.XML,t.decodeHTML4=t.decodeHTML5=t.decodeHTML=FZ.HTML,t.decodeHTML4Strict=t.decodeHTML5Strict=t.decodeHTMLStrict=FZ.HTMLStrict,t.escape=BX.escape}),HZ=e(function(e){function t(e,t){if(e){var n='',r;for(var a in e)r=e[a],n&&(n+=' '),n+=!r&&i[a]?a:a+'="'+(t.decodeEntities?jZ.encodeXML(r):r)+'"';return n}}function n(e,n){'svg'===e.name&&(n={decodeEntities:n.decodeEntities,xmlMode:!0});var r='<'+e.name,a=t(e.attribs,n);return a&&(r+=' '+a),n.xmlMode&&(!e.children||0===e.children.length)?r+='/>':(r+='>',e.children&&(r+=c(e.children,n)),(!d[e.name]||n.xmlMode)&&(r+='')),r}function r(e){return'<'+e.data+'>'}function a(e,t){var n=e.data||'';return t.decodeEntities&&!(e.parent&&e.parent.name in l)&&(n=jZ.encodeXML(n)),n}function o(e){return''}function s(e){return''}var i={__proto__:null,allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,hidden:!0,ismap:!0,loop:!0,multiple:!0,muted:!0,open:!0,readonly:!0,required:!0,reversed:!0,scoped:!0,seamless:!0,selected:!0,typemustmatch:!0},l={__proto__:null,style:!0,script:!0,xmp:!0,iframe:!0,noembed:!0,noframes:!0,plaintext:!0,noscript:!0},d={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},c=e.exports=function(e,t){Array.isArray(e)||e.cheerio||(e=[e]),t=t||{};for(var l='',d=0,i;ds.indexOf(d)?i===t?n.FOLLOWING|n.CONTAINED_BY:n.FOLLOWING:i===e?n.PRECEDING|n.CONTAINS:n.PRECEDING)};t.uniqueSort=function(e){var t=e.length,a,o;for(e=e.slice();-1<--t;)a=e[t],o=e.indexOf(a),-1":'child',"<":'parent',"~":'sibling',"+":'adjacent'},dJ={__proto__:null,"#":['id','equals'],".":['class','element']},cJ={__proto__:null,has:!0,not:!0,matches:!0},pJ={__proto__:null,contains:!0,icontains:!0},uJ={__proto__:null,'"':!0,"'":!0},mJ=50,gJ=30,hJ=1,fJ=0,yJ=-1,bJ=-1,xJ=-1,kJ=-1,SJ=-1,wJ={universal:mJ,tag:gJ,attribute:hJ,pseudo:fJ,descendant:yJ,child:bJ,parent:xJ,sibling:kJ,adjacent:SJ},vJ=Object.freeze({universal:mJ,tag:gJ,attribute:hJ,pseudo:fJ,descendant:yJ,child:bJ,parent:xJ,sibling:kJ,adjacent:SJ,default:wJ}),TJ=vJ&&wJ||vJ,CJ=function(e){for(var t=e.map(Vn),n=1,r;nr))for(var a=n-1,o;0<=a&&rn&&0>=t)return BJ;if(-1===t)return function(e){return e<=n};if(0===t)return function(e){return e===n};if(1===t)return 0>n?NJ:function(e){return e>=n};var r=n%t;return(0>r&&(r+=t),1=n&&e%t===r}:(t*=-1,function(e){return e<=n&&e%t===r})},NJ=nJ.trueFunc,BJ=nJ.falseFunc,IJ=function(e){return DJ(qJ(e))};IJ.parse=qJ,IJ.compile=DJ;var zJ=nJ.trueFunc,_J=nJ.falseFunc,MJ=/^(?:(?:nth|last|first|only)-(?:child|of-type)|root|empty|(?:en|dis)abled|checked|not)$/,GJ=function(e){var t=Fn(e),n=Wn(e);return{compile:function(e,r,a,o){var i=r.name,s=r.data;if(a&&a.strict&&!MJ.test(i))throw new Error(':'+i+' isn\'t part of CSS3');if('function'==typeof n[i])return jn(n[i],i,s),n[i](e,s,a,o);if('function'==typeof t[i]){var l=t[i];return jn(l,i,s),e===zJ?l:function(t){return l(t,s)&&e(t)}}throw new Error('unmatched pseudo-class :'+i)},filters:n,pseudos:t}},UJ=function(t){function e(e,t,a){var o=r(e,t,a);return n(o)}function n(e){return function(n){return t.isTag(n)&&e(n)}}function r(e,t,n){var r=rJ(e,t);return i(r,t,n)}function a(e){return'pseudo'===e.type&&('scope'===e.name||Array.isArray(e.data)&&e.data.some(function(e){return e.some(a)}))}function o(e,n){var r=!!n&&!!n.length&&n.every(function(n){return n===y||!!t.getParent(n)});e.forEach(function(e){if(0TJ[e.type]}function l(e,t,n){return e.reduce(function(e,r){return e===WJ?e:m[r.type](e,r,t,n)},t&&t.rootFunc||VJ)}function d(e,t){return t===WJ||e===VJ?e:e===WJ||t===VJ?t:function(n){return e(n)||t(n)}}function c(e){return e.some(s)}var p=GJ(t),u=p.filters,m=LJ(t,p),g={type:'descendant'},h={type:'_flexibleDescendant'},f={type:'pseudo',name:'scope'},y={};return u.not=function(e,t,n,r){var a={xmlMode:!!(n&&n.xmlMode),strict:!!(n&&n.strict)};if(a.strict&&(1arguments.length?[]:(Array.isArray(n)||(n=Array.apply(null,arguments).slice(2)),n.forEach(function(e){e.parentNode=this},this),this.content.splice.apply(this.content,[e,t].concat(n)))},n.prototype.hasAttr=function(e,t){return this.attrs&&Object.keys(this.attrs).length&&(arguments.length?void 0===t?!!this.attrs[e]:!!this.attrs[e]&&this.attrs[e].value===t.toString():!!this.attrs)},n.prototype.hasAttrLocal=function(e,t){function n(t){return t.local===e}function r(n){return n.local===e&&t==n.value}function a(n){return n.local===e&&t.test(n.value)}function o(n){return n.local===e&&t(n.value)}if(!this.attrs||!Object.keys(this.attrs).length)return!1;if(!arguments.length)return!!this.attrs;var i;switch(null!=t&&t.constructor&&t.constructor.name){case'Number':case'String':i=r;break;case'RegExp':i=a;break;case'Function':i=o;break;default:i=n;}return this.someAttr(i)},n.prototype.attr=function(e,t){return this.hasAttr()&&arguments.length?void 0===t?this.attrs[e]:this.hasAttr(e,t)?this.attrs[e]:void 0:void 0},n.prototype.computedAttr=function(e,t){if(arguments.length){for(var n=this;n&&(!n.hasAttr(e)||!n.attr(e).value);n=n.parentNode);return null==t?n&&n.hasAttr(e)?n.attrs[e].value:void 0:!!n&&n.hasAttr(e,t)}},n.prototype.removeAttr=function(e,t,n){return!!arguments.length&&(Array.isArray(e)&&e.forEach(this.removeAttr,this),!!this.hasAttr(e))&&(!n&&t&&this.attrs[e].value!==t?!1:(delete this.attrs[e],Object.keys(this.attrs).length||delete this.attrs,!0))},n.prototype.addAttr=function(e){return(e=e||{},void 0!==e.name&&void 0!==e.prefix&&void 0!==e.local)&&(this.attrs=this.attrs||{},this.attrs[e.name]=e,'class'===e.name&&this.class.hasClass(),'style'===e.name&&this.style.hasStyle(),this.attrs[e.name])},n.prototype.eachAttr=function(e,t){if(!this.hasAttr())return!1;for(var n in this.attrs)e.call(t,this.attrs[n]);return!0},n.prototype.someAttr=function(e,t){if(!this.hasAttr())return!1;for(var n in this.attrs)if(e.call(t,this.attrs[n]))return!0;return!1},n.prototype.querySelectorAll=function(e){var n=FJ(e,this,t);return 0>0},ToUint32:function(e){return this.ToNumber(e)>>>0},ToUint16:function(e){var t=this.ToNumber(e);if(nte(t)||0===t||!ate(t))return 0;var n=lte(t)*Fd(Vd(t));return dte(n,65536)},ToString:function(e){return xte(e)},ToObject:function(e){return this.CheckObjectCoercible(e),yte(e)},CheckObjectCoercible:function(e,t){if(null==e)throw new bte(t||'Cannot call method on '+e);return e},IsCallable:Nee,SameValue:function(e,t){return e===t?0!==e||1/e==1/t:nte(e)&&nte(t)},Type:function(e){return null===e?'Null':'undefined'==typeof e?'Undefined':'function'==typeof e||'object'==typeof e?'Object':'number'==typeof e?'Number':'boolean'==typeof e?'Boolean':'string'==typeof e?'String':void 0},IsPropertyDescriptor:function(e){if('Object'!==this.Type(e))return!1;var t={"[[Configurable]]":!0,"[[Enumerable]]":!0,"[[Get]]":!0,"[[Set]]":!0,"[[Value]]":!0,"[[Writable]]":!0};for(var n in e)if(Eee(e,n)&&!t[n])return!1;var r=Eee(e,'[[Value]]'),a=Eee(e,'[[Get]]')||Eee(e,'[[Set]]');if(r&&a)throw new bte('Property Descriptors may not be both accessor and data descriptors');return!0},IsAccessorDescriptor:function(e){if('undefined'==typeof e)return!1;if(!this.IsPropertyDescriptor(e))throw new bte('Desc must be a Property Descriptor');return Eee(e,'[[Get]]')||Eee(e,'[[Set]]')},IsDataDescriptor:function(e){if('undefined'==typeof e)return!1;if(!this.IsPropertyDescriptor(e))throw new bte('Desc must be a Property Descriptor');return Eee(e,'[[Value]]')||Eee(e,'[[Writable]]')},IsGenericDescriptor:function(e){if('undefined'==typeof e)return!1;if(!this.IsPropertyDescriptor(e))throw new bte('Desc must be a Property Descriptor');return this.IsAccessorDescriptor(e)||this.IsDataDescriptor(e)?!1:!0},FromPropertyDescriptor:function(e){if('undefined'==typeof e)return e;if(!this.IsPropertyDescriptor(e))throw new bte('Desc must be a Property Descriptor');if(this.IsDataDescriptor(e))return{value:e['[[Value]]'],writable:!!e['[[Writable]]'],enumerable:!!e['[[Enumerable]]'],configurable:!!e['[[Configurable]]']};if(this.IsAccessorDescriptor(e))return{get:e['[[Get]]'],set:e['[[Set]]'],enumerable:!!e['[[Enumerable]]'],configurable:!!e['[[Configurable]]']};throw new bte('FromPropertyDescriptor must be called with a fully populated Property Descriptor')},ToPropertyDescriptor:function(e){if('Object'!==this.Type(e))throw new bte('ToPropertyDescriptor requires an object');var t={};if(Eee(e,'enumerable')&&(t['[[Enumerable]]']=this.ToBoolean(e.enumerable)),Eee(e,'configurable')&&(t['[[Configurable]]']=this.ToBoolean(e.configurable)),Eee(e,'value')&&(t['[[Value]]']=e.value),Eee(e,'writable')&&(t['[[Writable]]']=this.ToBoolean(e.writable)),Eee(e,'get')){var n=e.get;if('undefined'!=typeof n&&!this.IsCallable(n))throw new TypeError('getter must be a function');t['[[Get]]']=n}if(Eee(e,'set')){var r=e.set;if('undefined'!=typeof r&&!this.IsCallable(r))throw new bte('setter must be a function');t['[[Set]]']=r}if((Eee(t,'[[Get]]')||Eee(t,'[[Set]]'))&&(Eee(t,'[[Value]]')||Eee(t,'[[Writable]]')))throw new bte('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');return t}};var Ste=RegExp.prototype.exec,wte=Object.getOwnPropertyDescriptor,vte=function(e){try{var t=e.lastIndex;return e.lastIndex=0,Ste.call(e),!0}catch(t){return!1}finally{e.lastIndex=t}},Tte=Object.prototype.toString,Cte='function'==typeof Symbol&&'symbol'==typeof Symbol.toStringTag,Ete=function(e){if(!e||'object'!=typeof e)return!1;if(!Cte)return Tte.call(e)==='[object RegExp]';var t=wte(e,'lastIndex'),n=t&&Eee(t,'value');return!!n&&vte(e)};var Ate=tte('%TypeError%'),Ote=tte('%SyntaxError%'),Pte=tte('%Array%'),Lte=tte('%String%'),qte=tte('%Object%'),Rte=tte('%Number%'),Dte=tte('%Symbol%',!0),Nte=tte('%RegExp%'),Bte=!!Dte,Ite=Rte.MAX_SAFE_INTEGER||9007199254740991,zte=parseInt,_te=Cee.call(Function.call,Pte.prototype.slice),Mte=Cee.call(Function.call,Lte.prototype.slice),Gte=Cee.call(Function.call,Nte.prototype.test,/^0b[01]+$/i),Ute=Cee.call(Function.call,Nte.prototype.test,/^0o[0-7]+$/i),Vte=Cee.call(Function.call,Nte.prototype.exec),Wte=new Nte('['+'\x85\u200B\uFFFE'+']','g'),Fte=Cee.call(Function.call,Nte.prototype.test,Wte),jte=/^[-+]0x[0-9a-f]+$/i,Hte=Cee.call(Function.call,Nte.prototype.test,jte),Yte=Cee.call(Function.call,Lte.prototype.charCodeAt),$te=Cee.call(Function.call,Object.prototype.toString),Kte=Fd,Xte=Vd,Qte=Object.create,Zte=qte.getOwnPropertyDescriptor,Jte=qte.isExtensible,ene=/(^[ \n\v\f\r   ᠎              \u2028\u2029]+)|([ \n\v\f\r   ᠎              \u2028\u2029]+$)/g,tne=Cee.call(Function.call,Lte.prototype.replace),nne=function(e){return tne(e,ene,'')},rne=ste(ste({},kte),{Call:function(e,t){var n=2=t)return 0;if(255<=t)return 255;var n=Kte(e);return n+0.5=t?0:t>Ite?Ite:t},CanonicalNumericIndexString:function(e){if('[object String]'!==$te(e))throw new Ate('must be a string');if('-0'===e)return-0;var t=this.ToNumber(e);return this.SameValue(this.ToString(t),e)?t:void 0},RequireObjectCoercible:kte.CheckObjectCoercible,IsArray:Pte.isArray||function(e){return'[object Array]'===$te(e)},IsConstructor:function(e){return'function'==typeof e&&!!e.prototype},IsExtensible:Object.preventExtensions?function(e){return!cte(e)&&Jte(e)}:function(){return!0},IsInteger:function(e){if('number'!=typeof e||nte(e)||!ate(e))return!1;var t=Xte(e);return Kte(t)===t},IsPropertyKey:function(e){return'string'==typeof e||'symbol'==typeof e},IsRegExp:function(e){if(!e||'object'!=typeof e)return!1;if(Bte){var t=e[Dte.match];if('undefined'!=typeof t)return kte.ToBoolean(t)}return Ete(e)},SameValueZero:function(e,t){return e===t||nte(e)&&nte(t)},GetV:function(e,t){if(!this.IsPropertyKey(t))throw new Ate('Assertion failed: IsPropertyKey(P) is not true');var n=this.ToObject(e);return n[t]},GetMethod:function(e,t){if(!this.IsPropertyKey(t))throw new Ate('Assertion failed: IsPropertyKey(P) is not true');var n=this.GetV(e,t);if(null!=n){if(!this.IsCallable(n))throw new Ate(t+'is not a function');return n}},Get:function(e,t){if('Object'!==this.Type(e))throw new Ate('Assertion failed: Type(O) is not Object');if(!this.IsPropertyKey(t))throw new Ate('Assertion failed: IsPropertyKey(P) is not true');return e[t]},Type:function(e){return'symbol'==typeof e?'Symbol':kte.Type(e)},SpeciesConstructor:function(e,t){if('Object'!==this.Type(e))throw new Ate('Assertion failed: Type(O) is not Object');var n=e.constructor;if('undefined'==typeof n)return t;if('Object'!==this.Type(n))throw new Ate('O.constructor is not an Object');var r=Bte&&Dte.species?n[Dte.species]:void 0;if(null==r)return t;if(this.IsConstructor(r))return r;throw new Ate('no constructor found')},CompletePropertyDescriptor:function(e){if(!this.IsPropertyDescriptor(e))throw new Ate('Desc must be a Property Descriptor');return this.IsGenericDescriptor(e)||this.IsDataDescriptor(e)?(!Eee(e,'[[Value]]')&&(e['[[Value]]']=void 0),!Eee(e,'[[Writable]]')&&(e['[[Writable]]']=!1)):(!Eee(e,'[[Get]]')&&(e['[[Get]]']=void 0),!Eee(e,'[[Set]]')&&(e['[[Set]]']=void 0)),Eee(e,'[[Enumerable]]')||(e['[[Enumerable]]']=!1),Eee(e,'[[Configurable]]')||(e['[[Configurable]]']=!1),e},Set:function(e,t,n,r){if('Object'!==this.Type(e))throw new Ate('O must be an Object');if(!this.IsPropertyKey(t))throw new Ate('P must be a Property Key');if('Boolean'!==this.Type(r))throw new Ate('Throw must be a Boolean');if(r)return e[t]=n,!0;try{e[t]=n}catch(t){return!1}},HasOwnProperty:function(e,t){if('Object'!==this.Type(e))throw new Ate('O must be an Object');if(!this.IsPropertyKey(t))throw new Ate('P must be a Property Key');return Eee(e,t)},HasProperty:function(e,t){if('Object'!==this.Type(e))throw new Ate('O must be an Object');if(!this.IsPropertyKey(t))throw new Ate('P must be a Property Key');return t in e},IsConcatSpreadable:function(e){if('Object'!==this.Type(e))return!1;if(Bte&&'symbol'==typeof Dte.isConcatSpreadable){var t=this.Get(e,Symbol.isConcatSpreadable);if('undefined'!=typeof t)return this.ToBoolean(t)}return this.IsArray(e)},Invoke:function(e,t){if(!this.IsPropertyKey(t))throw new Ate('P must be a Property Key');var n=_te(arguments,2),r=this.GetV(e,t);return this.Call(r,e,n)},GetIterator:function(e,t){if(!Bte)throw new SyntaxError('ES.GetIterator depends on native iterator support.');var n=t;2>arguments.length&&(n=this.GetMethod(e,Dte.iterator));var r=this.Call(n,e);if('Object'!==this.Type(r))throw new Ate('iterator must return an object');return r},IteratorNext:function(e,t){var n=this.Invoke(e,'next',2>arguments.length?[]:[t]);if('Object'!==this.Type(n))throw new Ate('iterator next must return an object');return n},IteratorComplete:function(e){if('Object'!==this.Type(e))throw new Ate('Assertion failed: Type(iterResult) is not Object');return this.ToBoolean(this.Get(e,'done'))},IteratorValue:function(e){if('Object'!==this.Type(e))throw new Ate('Assertion failed: Type(iterResult) is not Object');return this.Get(e,'value')},IteratorStep:function(e){var t=this.IteratorNext(e),n=this.IteratorComplete(t);return!0!==n&&t},IteratorClose:function(e,t){if('Object'!==this.Type(e))throw new Ate('Assertion failed: Type(iterator) is not Object');if(!this.IsCallable(t))throw new Ate('Assertion failed: completion is not a thunk for a Completion Record');var n=t,r=this.GetMethod(e,'return');if('undefined'==typeof r)return n();var a;try{var o=this.Call(r,e,[])}catch(t){throw a=n(),n=null,t}if(a=n(),n=null,'Object'!==this.Type(o))throw new Ate('iterator .return must return an object');return a},CreateIterResultObject:function(e,t){if('Boolean'!==this.Type(t))throw new Ate('Assertion failed: Type(done) is not Boolean');return{value:e,done:t}},RegExpExec:function(e,t){if('Object'!==this.Type(e))throw new Ate('R must be an Object');if('String'!==this.Type(t))throw new Ate('S must be a String');var n=this.Get(e,'exec');if(this.IsCallable(n)){var r=this.Call(n,e,[t]);if(null===r||'Object'===this.Type(r))return r;throw new Ate('"exec" method must return `null` or an Object')}return Vte(e,t)},ArraySpeciesCreate:function(e,t){if(!this.IsInteger(t)||0>t)throw new Ate('Assertion failed: length must be an integer >= 0');var n=0===t?0:t,r=this.IsArray(e),a;if(r&&(a=this.Get(e,'constructor'),'Object'===this.Type(a)&&Bte&&Dte.species&&(a=this.Get(a,Dte.species),null===a&&(a=void 0))),'undefined'==typeof a)return Pte(n);if(!this.IsConstructor(a))throw new Ate('C must be a constructor');return new a(n)},CreateDataProperty:function(e,t,n){if('Object'!==this.Type(e))throw new Ate('Assertion failed: Type(O) is not Object');if(!this.IsPropertyKey(t))throw new Ate('Assertion failed: IsPropertyKey(P) is not true');var r=Zte(e,t),a=r||'function'!=typeof Jte||Jte(e),o=r&&(!r.writable||!r.configurable);if(o||!a)return!1;return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}),!0},CreateDataPropertyOrThrow:function(e,t,n){if('Object'!==this.Type(e))throw new Ate('Assertion failed: Type(O) is not Object');if(!this.IsPropertyKey(t))throw new Ate('Assertion failed: IsPropertyKey(P) is not true');var r=this.CreateDataProperty(e,t,n);if(!r)throw new Ate('unable to create data property');return r},ObjectCreate:function(e,t){if(null!==e&&'Object'!==this.Type(e))throw new Ate('Assertion failed: proto must be null or an object');var n=2>arguments.length?[]:t;if(0t||t>Ite)throw new Ate('Assertion failed: length must be an integer >= 0 and <= 2**53');if('Boolean'!==this.Type(n))throw new Ate('Assertion failed: unicode must be a Boolean');if(!n)return t+1;var r=e.length;if(t+1>=r)return t+1;var a=Yte(e,t);if(55296>a||56319o||57343=_ne;_ne++)Bne[_ne]=Tne;Bne[qne]=wne,Bne[Ane]=wne,Bne[One]=wne,Bne[Lne]=wne,Bne[Pne]=wne,Bne[Rne.Apostrophe]=Cne,Bne[Rne.QuotationMark]=Cne,zne[qne]=1,zne[Ane]=1,zne[One]=1,zne[Lne]=1,zne[Pne]=1,zne[Rne.Apostrophe]=1,zne[Rne.QuotationMark]=1,zne[Rne.LeftParenthesis]=1,zne[Rne.RightParenthesis]=1,Ine[qne]=Ene,Ine[Ane]=Ene,Ine[One]=Ene,Ine[Lne]=Ene,Ine[Pne]=Ene,Ine[Rne.HyphenMinus]=0;var i={TYPE:Rne,NAME:Dne,SYMBOL_TYPE:Bne,PUNCTUATION:Ine,STOP_URL_RAW:zne};var Mne=i.PUNCTUATION,Gne=i.STOP_URL_RAW,Une=i.TYPE,Vne=Une.FullStop,Wne=Une.PlusSign,Fne=Une.HyphenMinus,jne=Une.Punctuator,Hne=9,Yne=10,$ne=12,Kne=13,Xne=32,Qne=92,Zne={firstCharOffset:function(e){return 65279===e.charCodeAt(0)||65534===e.charCodeAt(0)?1:0},isHex:dr,isNumber:cr,isNewline:ur,cmpChar:function(e,t,n){var r=e.charCodeAt(t);return 65<=r&&90>=r&&(r|=32),r===n},cmpStr:mr,endsWith:function(e,t){return mr(e,e.length-t.length,e.length,t)},findLastNonSpaceLocation:function(e){for(var t=e.source.length-1,n;0<=t&&(n=e.source.charCodeAt(t),n===Xne||n===Hne||n===Kne||n===Yne||n===$ne);t--);return e.getLocation(t+1)},findWhiteSpaceEnd:function(e,t){for(;tn&&Mne[n]===jne)break}return t},findUrlRawEnd:function(e,t){for(;tn&&1===Gne[n])break}return t}};var Jne=i.TYPE,ere=i.NAME,tre=i.SYMBOL_TYPE,nre=Zne.firstCharOffset,rre=Zne.cmpStr,are=Zne.isNumber,ore=Zne.findLastNonSpaceLocation,ire=Zne.findWhiteSpaceEnd,sre=Zne.findCommentEnd,lre=Zne.findStringEnd,dre=Zne.findNumberEnd,cre=Zne.findIdentifierEnd,ure=Zne.findUrlRawEnd,mre=0,gre=Jne.WhiteSpace,hre=Jne.Identifier,fre=Jne.Number,yre=Jne.String,bre=Jne.Comment,xre=Jne.Punctuator,kre=Jne.CDO,Sre=Jne.CDC,wre=Jne.Atrule,vre=Jne.Function,Tre=Jne.Url,Cre=Jne.Raw,Ere=10,N=12,F=13,R=Jne.Asterisk,Are=Jne.Solidus,Ore=Jne.FullStop,Pre=Jne.PlusSign,Lre=Jne.HyphenMinus,qre=Jne.GreaterThanSign,Rre=Jne.LessThanSign,Dre=Jne.ExclamationMark,Nre=Jne.CommercialAt,Bre=Jne.QuotationMark,Ire=Jne.Apostrophe,zre=Jne.LeftParenthesis,_re=Jne.RightParenthesis,Mre=Jne.LeftCurlyBracket,Gre=Jne.RightCurlyBracket,Ure=Jne.LeftSquareBracket,Vre=Jne.RightSquareBracket,Wre=16384,Fre=16777215,jre=24,Hre='undefined'==typeof Uint32Array?Array:Uint32Array,Yre=function(e,t,n,r){this.offsetAndType=null,this.balance=null,this.lines=null,this.columns=null,this.setSource(e,t,n,r)};Yre.prototype={setSource:function(e,t,n,r){var a=(e||'')+'',o=nre(a);this.source=a,this.firstCharOffset=o,this.startOffset='undefined'==typeof t?0:t,this.startLine='undefined'==typeof n?1:n,this.startColumn='undefined'==typeof r?1:r,this.linesAnsColumnsComputed=!1,this.eof=!1,this.currentToken=-1,this.tokenType=0,this.tokenStart=o,this.tokenEnd=o,yr(this,a,o),this.next()},lookupType:function(e){return e+=this.currentToken,e>jre:mre},lookupNonWSType:function(e){e+=this.currentToken;for(var t;e>jre,t!==gre)return t;return mre},lookupValue:function(e,t){return e+=this.currentToken,!!(e>jre===gre?1>jre){case t:break loop;case n:r&&a++;break loop;default:this.balance[o]===a&&(a=o);}}return a-this.currentToken},getTokenValue:function(){return this.source.substring(this.tokenStart,this.tokenEnd)},substrToCursor:function(e){return this.source.substring(e,this.tokenStart)},skipWS:function(){for(var e=this.currentToken,t=0;e>jre===gre;e++,t++);0>jre,this.tokenEnd=t&Fre):(this.currentToken=this.tokenCount,this.next())},next:function(){var e=this.currentToken+1;e>jre,this.tokenEnd=e&Fre):(this.currentToken=this.tokenCount,this.eof=!0,this.tokenType=mre,this.tokenStart=this.tokenEnd=this.source.length)},eat:function(e){if(this.tokenType!==e){var t=this.tokenStart,n=ere[e]+' is expected';e===hre?(this.tokenType===vre||this.tokenType===Tre)&&(t=this.tokenEnd-1,n+=' but function found'):this.source.charCodeAt(this.tokenStart)===e&&++t,this.error(n,t)}this.next()},eatNonWS:function(e){this.skipWS(),this.eat(e)},consume:function(e){var t=this.getTokenValue();return this.eat(e),t},consumeFunctionName:function(){var e=this.source.substring(this.tokenStart,this.tokenEnd-1);return this.eat(vre),e},consumeNonWS:function(e){return this.skipWS(),this.consume(e)},expectIdentifier:function(e){(this.tokenType!==hre||!1===rre(this.source,this.tokenStart,this.tokenEnd,e))&&this.error('Identifier `'+e+'` is expected'),this.next()},getLocation:function(e,t){return this.linesAnsColumnsComputed||fr(this,this.source),{source:t,offset:this.startOffset+e,line:this.lines[e],column:this.columns[e]}},getLocationRange:function(e,t,n){return this.linesAnsColumnsComputed||fr(this,this.source),{source:n,start:{offset:this.startOffset+e,line:this.lines[e],column:this.columns[e]},end:{offset:this.startOffset+t,line:this.lines[t],column:this.columns[t]}}},error:function(e,t){var n='undefined'!=typeof t&&t>jre],chunk:this.source.substring(r,a),balance:this.balance[n]}},this)}},Yre.CssSyntaxError=Sne,Object.keys(i).forEach(function(e){Yre[e]=i[e]}),Object.keys(Zne).forEach(function(e){Yre[e]=Zne[e]}),new Yre('\n\r\r\n\f//""\'\'/*\r\n\f*/1a;.\\31\t+2{url(a);func();+1.2e3 -.4e-5 .6e+7}').getLocation();var $re=Yre;var Kre=vr;var Xre={SyntaxReferenceError:function(e,t){var n=fne('SyntaxReferenceError',e+' `'+t+'`');return n.reference=t,n},MatchError:function(e,t,n,r,a){var o=fne('SyntaxMatchError',e),i=-1,s=Tr(a,'start'),l=Tr(a,'end'),d=t.syntax.translateMarkup(r,function(e,t){e===a&&(i=t.length)});return-1===i&&(i=d.length),o.rawMessage=e,o.syntax=n?Kre(n):'',o.css=d,o.mismatchOffset=i,o.loc={source:a&&a.loc&&a.loc.source||'',start:s,end:l},o.line=s?s.line:void 0,o.column=s?s.column:void 0,o.offset=s?s.offset:void 0,o.message=e+'\n syntax: '+o.syntax+'\n value: '+(o.css||'')+'\n --------'+Array(o.mismatchOffset+1).join('-')+'^',o}};var Qre=Object.prototype.hasOwnProperty,Zre=Object.create(null),Jre=Object.create(null),eae=45,tae={keyword:function(e){if(Qre.call(Zre,e))return Zre[e];var t=e.toLowerCase();if(Qre.call(Zre,t))return Zre[e]=Zre[t];var n=Cr(t,0)?'':Er(t,0);return Zre[e]=Object.freeze({vendor:n,prefix:n,name:t.substr(n.length)})},property:function(e){if(Qre.call(Jre,e))return Jre[e];var t=e,n=e[0];'/'===n?n='/'===e[1]?'//':'/':'_'!==n&&'*'!==n&&'$'!==n&&'#'!==n&&'+'!==n&&(n='');var r=Cr(t,n.length);if(!r&&(t=t.toLowerCase(),Qre.call(Jre,t)))return Jre[e]=Jre[t];var a=r?'':Er(t,n.length);return Jre[e]=Object.freeze({hack:n,vendor:a,prefix:n+a,name:t.substr(n.length+a.length),custom:r})}};var nae={angle:Rr({deg:!0,grad:!0,rad:!0,turn:!0}),"attr()":function(e){return'Function'===e.data.type&&'attr'===e.data.name.toLowerCase()},"custom-ident":function(e){if('Identifier'!==e.data.type)return!1;var t=e.data.name.toLowerCase();return'unset'===t||'initial'===t||'inherit'===t?!1:'default'!==t},decibel:qr({db:!0}),dimension:Lr('Dimension'),frequency:qr({hz:!0,khz:!0}),flex:qr({fr:!0}),"hex-color":function(e){if('HexColor'!==e.data.type)return!1;var t=e.data.value;return /^[0-9a-fA-F]{3,8}$/.test(t)&&(3===t.length||4===t.length||6===t.length||8===t.length)},"id-selector":Lr('IdSelector'),ident:Lr('Identifier'),integer:function(e){return Ar(e)||'Number'===e.data.type&&-1===e.data.value.indexOf('.')},length:Rr({px:!0,mm:!0,cm:!0,in:!0,pt:!0,pc:!0,q:!0,em:!0,ex:!0,ch:!0,rem:!0,vh:!0,vw:!0,vmin:!0,vmax:!0,vm:!0}),number:function(e){return Ar(e)||'Number'===e.data.type},"number-zero-one":function(e){if(Ar(e)||'Number'===e.data.type){var t=+e.data.value;return 0<=t&&1>=t}return!1},"number-one-or-greater":function(e){return(Ar(e)||'Number'===e.data.type)&&1<=+e.data.value},percentage:function(e){return Ar(e)||'Percentage'===e.data.type},"positive-integer":function(e){return Ar(e)||'Number'===e.data.type&&-1===e.data.value.indexOf('.')&&'-'!==e.data.value.charAt(0)},resolution:qr({dpi:!0,dpcm:!0,dppx:!0,x:!0}),semitones:qr({st:!0}),string:Lr('String'),time:qr({s:!0,ms:!0}),"unicode-range":Lr('UnicodeRange'),url:Lr('Url'),progid:Lr('Raw'),expression:function(e){return'Function'===e.data.type&&'expression'===e.data.name.toLowerCase()}};var rae={SyntaxParseError:function(e,t,n){var r=fne('SyntaxParseError',e);return r.rawMessage=e,r.syntax=t,r.offset=n,r.message=r.rawMessage+'\n '+r.syntax+'\n--'+Array((r.offset||r.syntax.length)+1).join('-')+'^',r}};var aae=rae.SyntaxParseError,oae=9,iae=10,sae=12,lae=13,dae=32,cae=33,pae=35,uae=37,mae=38,gae=39,hae=40,fae=41,yae=42,bae=43,xae=44,kae=47,Sae=60,wae=62,vae=63,Tae=91,Cae=93,Eae=123,Aae=124,Oae=125,Pae={" ":1,"&&":2,"||":3,"|":4},Lae={comma:!1,min:1,max:1},qae={comma:!1,min:0,max:0},Rae={comma:!1,min:1,max:0},Dae={comma:!0,min:1,max:0},Nae={comma:!1,min:0,max:1},Bae=function(){for(var e='function'==typeof Uint32Array?new Uint32Array(128):Array(128),t=0;128>t;t++)e[t]=/[a-zA-Z0-9\-]/.test(Gd(t))?1:0;return e}(),Iae=function(e){this.str=e,this.pos=0};Iae.prototype={charCode:function(){return this.pos#|<\'c\'>*||e(){2,} f{2} /,(% g#{1,2})]!');var zae=$r;var _ae=function e(t,n,r){switch(t.type){case'Group':t.terms.forEach(function(t){e(t,n,r)});break;case'Function':case'Parentheses':e(t.children,n,r);break;case'Keyword':case'Type':case'Property':case'Combinator':case'Comma':case'Slash':case'String':case'Percent':break;default:throw new Error('Unknown type: '+t.type);}n.call(r,t)};var Mae={comma:!1,min:1,max:1},Gae=ea,Uae={getTrace:ta,isType:function(e,t){return na(this,e,function(e){return'Type'===e.type&&e.name===t})},isProperty:function(e,t){return na(this,e,function(e){return'Property'===e.type&&e.name===t})},isKeyword:function(e){return na(this,e,function(e){return'Keyword'===e.type})}},Vae={matchFragments:function(e,t,n,r,a){function o(n){if('ASTNode'!==n.type){if(n.syntax.type===r&&n.syntax.name===a){var s=ra(n),l=aa(n);e.syntax.walk(t,function(e,t,n){if(e===s){var r=new hne,a=null;do{if(r.appendData(t.data),t.data===l)break;t=t.next}while(null!==t);null!==s.loc&&null!==l.loc&&(a={source:s.loc.source,start:s.loc.start,end:l.loc.end}),i.push({parent:n,loc:a,nodes:r})}})}n.match.forEach(o)}}var i=[];return null!==n.matched&&o(n.matched),i}},Wae=Object.prototype.hasOwnProperty;var Fae=Xre.SyntaxReferenceError,jae=Xre.MatchError,Hae={getStructureFromConfig:function(e){var t={};if(e.node)for(var n in e.node)if(Wae.call(e.node,n)){var r=e.node[n];if(r.structure)t[n]=la(n,r);else throw new Error('Missed `structure` field in `'+n+'` node type definition')}return t}}.getStructureFromConfig,Yae=zae('inherit | initial | unset'),$ae=zae('inherit | initial | unset | '),Kae=function(e,t,n){if(this.valueCommonSyntax=Yae,this.syntax=t,this.generic=!1,this.properties={},this.types={},this.structure=n||Hae(e),e){if(e.generic)for(var r in this.generic=!0,nae)this.addType_(r,nae[r]);if(e.types)for(var r in e.types)this.addType_(r,e.types[r]);if(e.properties)for(var r in e.properties)this.addProperty_(r,e.properties[r])}};Kae.prototype={structure:{},checkStructure:function(e){function t(e,t){r.push({node:e,message:t})}var n=this.structure,r=[];return this.syntax.walk(e,function(e){n.hasOwnProperty(e.type)?n[e.type].check(e,t):t(e,'Unknown node type `'+e.type+'`')}),!!r.length&&r},createDescriptor:function(e,t,n){var r=this,a={type:t,name:n,syntax:null,match:null};return'function'==typeof e?(e={type:'ASTNode',match:e},a.match=function(t){return Gae(r,e,t)}):('string'==typeof e?Object.defineProperty(a,'syntax',{get:function(){return Object.defineProperty(a,'syntax',{value:zae(e)}),a.syntax}}):a.syntax=e,a.match=function(e){return Gae(r,a.syntax,e)}),a},addProperty_:function(e,t){this.properties[e]=this.createDescriptor(t,'Property',e)},addType_:function(e,t){this.types[e]=this.createDescriptor(t,'Type',e),t===nae.expression&&(this.valueCommonSyntax=$ae)},matchDeclaration:function(e){return'Declaration'===e.type?this.matchProperty(e.property,e.value):ga(null,new Error('Not a Declaration node'))},matchProperty:function(e,t){var n=tae.property(e);if(n.custom)return ga(null,new Error('Lexer matching doesn\'t applicable for custom properties'));var r=n.vendor?this.getProperty(n.vendor+n.name)||this.getProperty(n.name):this.getProperty(n.name);return r?ha(this,r,t):ga(null,new Fae('Unknown property',e))},matchType:function(e,t){var n=this.getType(e);return n?ha(this,n,t):ga(null,new Fae('Unknown type',e))},findValueFragments:function(e,t,n,r){return Vae.matchFragments(this,t,this.matchProperty(e,t),n,r)},findDeclarationValueFragments:function(e,t,n){return Vae.matchFragments(this,e.value,this.matchDeclaration(e),t,n)},findAllFragments:function(e,t,n){var r=[];return this.syntax.walkDeclarations(e,function(e){r.push.apply(r,this.findDeclarationValueFragments(e,t,n))}.bind(this)),r},getProperty:function(e){return this.properties.hasOwnProperty(e)?this.properties[e]:null},getType:function(e){return this.types.hasOwnProperty(e)?this.types[e]:null},validate:function(){function e(r,a,o,i){return o.hasOwnProperty(a)?o[a]:void(o[a]=!1,null!==i.syntax&&_ae(i.syntax,function(i){if('Type'===i.type||'Property'===i.type){var s='Type'===i.type?r.types:r.properties,l='Type'===i.type?t:n;(!s.hasOwnProperty(i.name)||e(r,i.name,l,s[i.name]))&&(o[a]=!0)}},this))}var t={},n={};for(var r in this.types)e(this,r,t,this.types[r]);for(var r in this.properties)e(this,r,n,this.properties[r]);return t=Object.keys(t).filter(function(e){return t[e]}),n=Object.keys(n).filter(function(e){return n[e]}),t.length||n.length?{types:t,properties:n}:null},dump:function(e){return{generic:this.generic,types:da(this.types,e),properties:da(this.properties,e)}},toString:function(){return JSON.stringify(this.dump())}};var Xae=Kae,Qae={SyntaxParseError:rae.SyntaxParseError,parse:zae,translate:Kre,walk:_ae},Zae=$re.TYPE,Jae=Zae.WhiteSpace,eoe=Zae.Comment,toe=function(e){var t=new hne,n=null,r={recognizer:e,space:null,ignoreWS:!1,ignoreWSAfter:!1};for(this.scanner.skipSC();!this.scanner.eof;){switch(this.scanner.tokenType){case eoe:this.scanner.next();continue;case Jae:r.ignoreWS?this.scanner.next():r.space=this.WhiteSpace();continue;}if(n=e.getNode.call(this,r),void 0===n)break;null!==r.space&&(t.appendData(r.space),r.space=null),t.appendData(n),r.ignoreWSAfter?(r.ignoreWSAfter=!1,r.ignoreWS=!0):r.ignoreWS=!1}return t};var noe=function(){},roe=function(e){var t={scanner:new $re,filename:'',needPositions:!1,tolerant:!1,onParseError:noe,parseAtrulePrelude:!0,parseRulePrelude:!0,parseValue:!0,parseCustomProperty:!1,readSequence:toe,tolerantParse:function(e,t){if(this.tolerant){var n=this.scanner.currentToken;try{return e.call(this)}catch(a){var r=t.call(this,n);return this.onParseError(a,r),r}}else return e.call(this)},getLocation:function(e,t){return this.needPositions?this.scanner.getLocationRange(e,t,this.filename):null},getLocationFromList:function(e){return this.needPositions?this.scanner.getLocationRange(null===e.head?this.scanner.tokenStart:e.first().loc.start.offset-this.scanner.startOffset,null===e.head?this.scanner.tokenStart:e.last().loc.end.offset-this.scanner.startOffset,this.filename):null}};for(var n in e=ya(e||{}),e)t[n]=e[n];return function(e,n){n=n||{};var r=n.context||'default',a;if(t.scanner.setSource(e,n.offset,n.line,n.column),t.filename=n.filename||'',t.needPositions=!!n.positions,t.tolerant=!!n.tolerant,t.onParseError='function'==typeof n.onParseError?n.onParseError:noe,t.parseAtrulePrelude=!('parseAtrulePrelude'in n)||!!n.parseAtrulePrelude,t.parseRulePrelude=!('parseRulePrelude'in n)||!!n.parseRulePrelude,t.parseValue=!('parseValue'in n)||!!n.parseValue,t.parseCustomProperty=!!('parseCustomProperty'in n)&&!!n.parseCustomProperty,!t.context.hasOwnProperty(r))throw new Error('Unknown context `'+r+'`');return a=t.context[r].call(t,n),t.scanner.eof||t.scanner.error(),a}},aoe=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'],ooe={encode:function(e){if(0<=e&&e>>=ioe,0=r)throw new Error('Expected more digits in base 64 VLQ value.');if(s=ooe.decode(e.charCodeAt(t++)),-1===s)throw new Error('Invalid base64 digit: '+e.charAt(t-1));i=!!(s&doe),s&=loe,a+=s<t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;0<=n;n--)if(36!==e.charCodeAt(n))return!1;return!0}function s(e,t){return e===t?0:e>t?1:-1}t.getArg=function(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')};var l=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,d=/^data:.+\,.+$/;t.urlParse=n,t.urlGenerate=r,t.normalize=a,t.join=function(e,t){''===e&&(e='.'),''===t&&(t='.');var o=n(t),i=n(e);if(i&&(e=i.path||'/'),o&&!o.scheme)return i&&(o.scheme=i.scheme),r(o);if(o||t.match(d))return t;if(i&&!i.host&&!i.path)return i.host=t,r(i);var s='/'===t.charAt(0)?t:a(e.replace(/\/+$/,'')+'/'+t);return i?(i.path=s,r(i)):s},t.isAbsolute=function(e){return'/'===e.charAt(0)||!!e.match(l)},t.relative=function(e,t){''===e&&(e='.'),e=e.replace(/\/$/,'');for(var n=0,r;0!==t.indexOf(e+'/');){if(r=e.lastIndexOf('/'),0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join('../')+t.substr(e.length+1)};var c=function(){var e=Object.create(null);return!('__proto__'in e)}();t.toSetString=c?o:function(e){return i(e)?'$'+e:e},t.fromSetString=c?o:function(e){return i(e)?e.slice(1):e},t.compareByOriginalPositions=function(e,t,n){var r=e.source-t.source;return 0==r?(r=e.originalLine-t.originalLine,0!=r)?r:(r=e.originalColumn-t.originalColumn,0!=r||n)?r:(r=e.generatedColumn-t.generatedColumn,0!=r)?r:(r=e.generatedLine-t.generatedLine,0==r?e.name-t.name:r):r},t.compareByGeneratedPositionsDeflated=function(e,t,n){var r=e.generatedLine-t.generatedLine;return 0==r?(r=e.generatedColumn-t.generatedColumn,0!=r||n)?r:(r=e.source-t.source,0!=r)?r:(r=e.originalLine-t.originalLine,0!=r)?r:(r=e.originalColumn-t.originalColumn,0==r?e.name-t.name:r):r},t.compareByGeneratedPositionsInflated=function(e,t){var n=e.generatedLine-t.generatedLine;return 0==n?(n=e.generatedColumn-t.generatedColumn,0!=n)?n:(n=s(e.source,t.source),0!==n)?n:(n=e.originalLine-t.originalLine,0!==n)?n:(n=e.originalColumn-t.originalColumn,0===n?s(e.name,t.name):n):n}}),uoe=Object.prototype.hasOwnProperty,moe='undefined'!=typeof Map;ka.fromArray=function(e,t){for(var n=new ka,r=0,a=e.length;re?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,a,o){if(0===r.length)return-1;var i=n(-1,r.length,e,r,a,o||t.GREATEST_LOWER_BOUND);if(0>i)return-1;for(;0<=i-1&&0===a(r[i],r[i-1],!0);)--i;return i}}),xoe=goe.ArraySet,koe={quickSort:function(e,t){Ea(e,t,0,e.length-1)}}.quickSort;Aa.fromSourceMap=function(e){return Oa.fromSourceMap(e)},Aa.prototype._version=3,Aa.prototype.__generatedMappings=null,Object.defineProperty(Aa.prototype,'_generatedMappings',{get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),Aa.prototype.__originalMappings=null,Object.defineProperty(Aa.prototype,'_originalMappings',{get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),Aa.prototype._charIsMappingSeparator=function(e,t){var n=e.charAt(t);return';'===n||','===n},Aa.prototype._parseMappings=function(){throw new Error('Subclasses must implement _parseMappings')},Aa.GENERATED_ORDER=1,Aa.ORIGINAL_ORDER=2,Aa.GREATEST_LOWER_BOUND=1,Aa.LEAST_UPPER_BOUND=2,Aa.prototype.eachMapping=function(e,t,n){var r=n||Aa.GENERATED_ORDER,a;switch(r){case Aa.GENERATED_ORDER:a=this._generatedMappings;break;case Aa.ORIGINAL_ORDER:a=this._originalMappings;break;default:throw new Error('Unknown order of iteration.');}var o=this.sourceRoot;a.map(function(e){var t=null===e.source?null:this._sources.at(e.source);return null!=t&&null!=o&&(t=poe.join(o,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:null===e.name?null:this._names.at(e.name)}},this).forEach(e,t||null)},Aa.prototype.allGeneratedPositionsFor=function(e){var t=poe.getArg(e,'line'),n={source:poe.getArg(e,'source'),originalLine:t,originalColumn:poe.getArg(e,'column',0)};if(null!=this.sourceRoot&&(n.source=poe.relative(this.sourceRoot,n.source)),!this._sources.has(n.source))return[];n.source=this._sources.indexOf(n.source);var r=[],a=this._findMapping(n,this._originalMappings,'originalLine','originalColumn',poe.compareByOriginalPositions,boe.LEAST_UPPER_BOUND);if(0<=a){var o=this._originalMappings[a];if(void 0===e.column)for(var i=o.originalLine;o&&o.originalLine===i;)r.push({line:poe.getArg(o,'generatedLine',null),column:poe.getArg(o,'generatedColumn',null),lastColumn:poe.getArg(o,'lastGeneratedColumn',null)}),o=this._originalMappings[++a];else for(var s=o.originalColumn;o&&o.originalLine===t&&o.originalColumn==s;)r.push({line:poe.getArg(o,'generatedLine',null),column:poe.getArg(o,'generatedColumn',null),lastColumn:poe.getArg(o,'lastGeneratedColumn',null)}),o=this._originalMappings[++a]}return r};Oa.prototype=Object.create(Aa.prototype),Oa.prototype.consumer=Aa,Oa.fromSourceMap=function(e){var t=Object.create(Oa.prototype),n=t._names=xoe.fromArray(e._names.toArray(),!0),r=t._sources=xoe.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),o=t.__generatedMappings=[],s=t.__originalMappings=[],l=0,i=a.length;l=e[n])throw new TypeError('Line must be greater than or equal to 1, got '+e[n]);if(0>e[r])throw new TypeError('Column must be greater than or equal to 0, got '+e[r]);return boe.search(e,t,a,o)},Oa.prototype.computeColumnSpans=function(){for(var e=0,t;e=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e})},Oa.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=poe.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=poe.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,'');if('file'==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||'/'==n.path)&&this._sources.has('/'+e))return this.sourcesContent[this._sources.indexOf('/'+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},Oa.prototype.generatedPositionFor=function(e){var t=poe.getArg(e,'source');if(null!=this.sourceRoot&&(t=poe.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:poe.getArg(e,'line'),originalColumn:poe.getArg(e,'column')},r=this._findMapping(n,this._originalMappings,'originalLine','originalColumn',poe.compareByOriginalPositions,poe.getArg(e,'bias',Aa.GREATEST_LOWER_BOUND));if(0<=r){var a=this._originalMappings[r];if(a.source===n.source)return{line:poe.getArg(a,'generatedLine',null),column:poe.getArg(a,'generatedColumn',null),lastColumn:poe.getArg(a,'lastGeneratedColumn',null)}}return{line:null,column:null,lastColumn:null}};La.prototype=Object.create(Aa.prototype),La.prototype.constructor=Aa,La.prototype._version=3,Object.defineProperty(La.prototype,'sources',{get:function(){for(var e=[],t=0;t#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Animations'],initial:['animation-name','animation-duration','animation-timing-function','animation-delay','animation-iteration-count','animation-direction','animation-fill-mode','animation-play-state'],appliesto:'allElementsAndPseudos',computed:['animation-name','animation-duration','animation-timing-function','animation-delay','animation-direction','animation-iteration-count','animation-fill-mode','animation-play-state'],order:'orderOfAppearance',status:'standard'},Woe={syntax:'auto | none',media:'all',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Basic User Interface'],initial:'auto',appliesto:'allElements',computed:'asSpecified',order:'perGrammar',status:'experimental'},Foe={syntax:' | [ [ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards',media:'aural',inherited:!0,animationType:'discrete',percentages:'no',groups:['CSS Speech'],initial:'center',appliesto:'allElements',computed:'normalizedAngle',order:'orderOfAppearance',status:'obsolete'},joe={syntax:'[ , ]* ',media:'visual',inherited:!1,animationType:['background-color','background-image','background-clip','background-position','background-size','background-repeat','background-attachment'],percentages:['background-position','background-size'],groups:['CSS Backgrounds and Borders'],initial:['background-image','background-position','background-size','background-repeat','background-origin','background-clip','background-attachment','background-color'],appliesto:'allElements',computed:['background-image','background-position','background-size','background-repeat','background-origin','background-clip','background-attachment','background-color'],order:'orderOfAppearance',alsoAppliesTo:['::first-letter','::first-line','::placeholder'],status:'standard'},Hoe={syntax:' || || ',media:'visual',inherited:!1,animationType:['border-color','border-style','border-width'],percentages:'no',groups:['CSS Backgrounds and Borders'],initial:['border-width','border-style','border-color'],appliesto:'allElements',computed:['border-width','border-style','border-color'],order:'orderOfAppearance',alsoAppliesTo:['::first-letter'],status:'standard'},Yoe={syntax:' | | auto',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToContainingBlockHeight',groups:['CSS Positioning'],initial:'auto',appliesto:'positionedElements',computed:'lengthAbsolutePercentageAsSpecifiedOtherwiseAuto',order:'uniqueOrder',status:'standard'},$oe={syntax:'none | left | right | both | inline-start | inline-end',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Positioning'],initial:'none',appliesto:'blockLevelElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},Koe={syntax:' | auto',media:'visual',inherited:!1,animationType:'rectangle',percentages:'no',groups:['CSS Masking'],initial:'auto',appliesto:'absolutelyPositionedElements',computed:'autoOrRectangle',order:'uniqueOrder',status:'standard'},Xoe={syntax:'',media:'visual',inherited:!0,animationType:'color',percentages:'no',groups:['CSS Color'],initial:'variesFromBrowserToBrowser',appliesto:'allElements',computed:'translucentValuesRGBAOtherwiseRGB',order:'uniqueOrder',alsoAppliesTo:['::first-letter','::first-line','::placeholder'],status:'standard'},Qoe={syntax:'<\'column-width\'> || <\'column-count\'>',media:'visual',inherited:!1,animationType:['column-width','column-count'],percentages:'no',groups:['CSS Columns'],initial:['column-width','column-count'],appliesto:'blockContainersExceptTableWrappers',computed:['column-width','column-count'],order:'perGrammar',status:'standard'},Zoe={syntax:'none | strict | content | [ size || layout || style || paint ]',media:'all',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Containment'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'perGrammar',status:'experimental'},Joe={syntax:'normal | none | [ | ] [/ ]?',media:'all',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Generated Content'],initial:'normal',appliesto:'beforeAndAfterPseudos',computed:'normalOnElementsForPseudosNoneAbsoluteURIStringOrAsSpecified',order:'uniqueOrder',status:'standard'},eie={syntax:'[ [ [ ]? , ]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab | grabbing ] ]',media:['visual','interactive'],inherited:!0,animationType:'discrete',percentages:'no',groups:['CSS Basic User Interface'],initial:'auto',appliesto:'allElements',computed:'asSpecifiedURLsAbsolute',order:'uniqueOrder',status:'standard'},tie={syntax:'ltr | rtl',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['CSS Writing Modes'],initial:'ltr',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},nie={syntax:'[ || ] | | | | ',media:'all',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Display'],initial:'inline',appliesto:'allElements',computed:'asSpecifiedExceptPositionedFloatingAndRootElementsKeywordMaybeDifferent',order:'uniqueOrder',status:'standard'},rie={syntax:'none | ',media:'visual',inherited:!1,animationType:'filterList',percentages:'no',groups:['Filter Effects'],initial:'none',appliesto:'allElementsSVGContainerElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},aie={syntax:'none | [ <\'flex-grow\'> <\'flex-shrink\'>? || <\'flex-basis\'> ]',media:'visual',inherited:!1,animationType:['flex-grow','flex-shrink','flex-basis'],percentages:'no',groups:['CSS Flexible Box Layout'],initial:['flex-grow','flex-shrink','flex-basis'],appliesto:'flexItemsAndInFlowPseudos',computed:['flex-grow','flex-shrink','flex-basis'],order:'orderOfAppearance',status:'standard'},oie={syntax:'left | right | none | inline-start | inline-end',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Positioning'],initial:'none',appliesto:'allElementsNoEffectIfDisplayNone',computed:'asSpecified',order:'uniqueOrder',status:'standard'},iie={syntax:'[ [ <\'font-style\'> || || <\'font-weight\'> || <\'font-stretch\'> ]? <\'font-size\'> [ / <\'line-height\'> ]? <\'font-family\'> ] | caption | icon | menu | message-box | small-caption | status-bar',media:'visual',inherited:!0,animationType:['font-style','font-variant','font-weight','font-stretch','font-size','line-height','font-family'],percentages:['font-size','line-height'],groups:['CSS Fonts'],initial:['font-style','font-variant','font-weight','font-stretch','font-size','line-height','font-family'],appliesto:'allElements',computed:['font-style','font-variant','font-weight','font-stretch','font-size','line-height','font-family'],order:'orderOfAppearance',alsoAppliesTo:['::first-letter','::first-line','::placeholder'],status:'standard'},sie={syntax:'<\'row-gap\'> <\'column-gap\'>?',media:'visual',inherited:!1,animationType:['row-gap','column-gap'],percentages:'no',groups:['CSS Box Alignment'],initial:['row-gap','column-gap'],appliesto:'gridContainers',computed:['row-gap','column-gap'],order:'uniqueOrder',status:'standard'},lie={syntax:'<\'grid-template\'> | <\'grid-template-rows\'> / [ auto-flow && dense? ] <\'grid-auto-columns\'>? | [ auto-flow && dense? ] <\'grid-auto-rows\'>? / <\'grid-template-columns\'>',media:'visual',inherited:!1,animationType:'discrete',percentages:['grid-template-rows','grid-template-columns','grid-auto-rows','grid-auto-columns'],groups:['CSS Grid Layout'],initial:['grid-template-rows','grid-template-columns','grid-template-areas','grid-auto-rows','grid-auto-columns','grid-auto-flow','grid-column-gap','grid-row-gap','column-gap','row-gap'],appliesto:'gridContainers',computed:['grid-template-rows','grid-template-columns','grid-template-areas','grid-auto-rows','grid-auto-columns','grid-auto-flow','grid-column-gap','grid-row-gap','column-gap','row-gap'],order:'uniqueOrder',status:'standard'},cie={syntax:'[ | ] && [ border-box | content-box ]? | available | min-content | max-content | fit-content | auto',media:'visual',inherited:!1,animationType:'lpc',percentages:'regardingHeightOfGeneratedBoxContainingBlockPercentagesRelativeToContainingBlock',groups:['CSS Box Model'],initial:'auto',appliesto:'allElementsButNonReplacedAndTableColumns',computed:'percentageAutoOrAbsoluteLength',order:'uniqueOrder',status:'standard'},pie={syntax:'none | manual | auto',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['CSS Text'],initial:'manual',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},uie={syntax:'auto | isolate',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Compositing and Blending'],initial:'auto',appliesto:'allElementsSVGContainerGraphicsAndGraphicsReferencingElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},mie={syntax:' | | auto',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToWidthOfContainingBlock',groups:['CSS Positioning'],initial:'auto',appliesto:'positionedElements',computed:'lengthAbsolutePercentageAsSpecifiedOtherwiseAuto',order:'uniqueOrder',status:'standard'},gie={syntax:'[ | | auto ]{1,4}',media:'visual',inherited:!1,animationType:'length',percentages:'referToWidthOfContainingBlock',groups:['CSS Box Model'],initial:['margin-bottom','margin-left','margin-right','margin-top'],appliesto:'allElementsExceptTableDisplayTypes',computed:['margin-bottom','margin-left','margin-right','margin-top'],order:'uniqueOrder',alsoAppliesTo:['::first-letter'],status:'standard'},hie={syntax:'#',media:'visual',inherited:!1,animationType:['mask-image','mask-mode','mask-repeat','mask-position','mask-clip','mask-origin','mask-size','mask-composite'],percentages:['mask-position'],groups:['CSS Masking'],initial:['mask-image','mask-mode','mask-repeat','mask-position','mask-clip','mask-origin','mask-size','mask-composite'],appliesto:'allElementsSVGContainerElements',computed:['mask-image','mask-mode','mask-repeat','mask-position','mask-clip','mask-origin','mask-size','mask-composite'],order:'perGrammar',stacking:!0,status:'standard'},fie={syntax:'[ <\'offset-position\'>? [ <\'offset-path\'> [ <\'offset-distance\'> || <\'offset-rotate\'> ]? ]? ]! [ / <\'offset-anchor\'> ]?',media:'visual',inherited:!1,animationType:['offset-position','offset-path','offset-distance','offset-anchor','offset-rotate'],percentages:['offset-position','offset-distance','offset-anchor'],groups:['CSS Motion'],initial:['offset-position','offset-path','offset-distance','offset-anchor','offset-rotate'],appliesto:'transformableElements',computed:['offset-position','offset-path','offset-distance','offset-anchor','offset-rotate'],order:'perGrammar',stacking:!0,status:'experimental'},yie={syntax:'',media:'visual',inherited:!1,animationType:'number',percentages:'no',groups:['CSS Color'],initial:'1.0',appliesto:'allElements',computed:'specifiedValueClipped0To1',order:'uniqueOrder',alsoAppliesTo:['::placeholder'],status:'standard'},bie={syntax:'',media:'visual',inherited:!1,animationType:'integer',percentages:'no',groups:['CSS Flexible Box Layout'],initial:'0',appliesto:'flexItemsAndAbsolutelyPositionedFlexContainerChildren',computed:'asSpecified',order:'uniqueOrder',status:'standard'},xie={syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['CSS Fragmentation'],initial:'2',appliesto:'blockContainerElements',computed:'asSpecified',order:'perGrammar',status:'standard'},kie={syntax:'[ <\'outline-color\'> || <\'outline-style\'> || <\'outline-width\'> ]',media:['visual','interactive'],inherited:!1,animationType:['outline-color','outline-width','outline-style'],percentages:'no',groups:['CSS Basic User Interface'],initial:['outline-color','outline-style','outline-width'],appliesto:'allElements',computed:['outline-color','outline-width','outline-style'],order:'orderOfAppearance',status:'standard'},Sie={syntax:'[ visible | hidden | clip | scroll | auto ]{1,2}',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Overflow'],initial:'visible',appliesto:'blockContainersFlexContainersGridContainers',computed:'asSpecified',order:'uniqueOrder',status:'standard'},wie={syntax:'[ | ]{1,4}',media:'visual',inherited:!1,animationType:'length',percentages:'referToWidthOfContainingBlock',groups:['CSS Box Model'],initial:['padding-bottom','padding-left','padding-right','padding-top'],appliesto:'allElementsExceptInternalTableDisplayTypes',computed:['padding-bottom','padding-left','padding-right','padding-top'],order:'uniqueOrder',alsoAppliesTo:['::first-letter'],status:'standard'},vie={syntax:'none | ',media:'visual',inherited:!1,animationType:'length',percentages:'no',groups:['CSS Transforms'],initial:'none',appliesto:'transformableElements',computed:'absoluteLengthOrNone',order:'uniqueOrder',stacking:!0,status:'standard'},Tie={syntax:'static | relative | absolute | sticky | fixed',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Positioning'],initial:'static',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',stacking:!0,status:'standard'},Cie={syntax:'none | [ ]+',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['CSS Generated Content'],initial:'dependsOnUserAgent',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},Eie={syntax:'none | both | horizontal | vertical',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Basic User Interface'],initial:'none',appliesto:'elementsWithOverflowNotVisibleAndReplacedElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},Aie={syntax:' | | auto',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToWidthOfContainingBlock',groups:['CSS Positioning'],initial:'auto',appliesto:'positionedElements',computed:'lengthAbsolutePercentageAsSpecifiedOtherwiseAuto',order:'uniqueOrder',status:'standard'},Oie={syntax:'none | [ x | y | z | {3} ]? && ',media:'visual',inherited:!1,animationType:'transform',percentages:'no',groups:['CSS Transforms'],initial:'none',appliesto:'transformableElements',computed:'asSpecified',order:'perGrammar',stacking:!0,status:'standard'},Pie={syntax:'none | {1,3}',media:'visual',inherited:!1,animationType:'transform',percentages:'no',groups:['CSS Transforms'],initial:'none',appliesto:'transformableElements',computed:'asSpecified',order:'perGrammar',stacking:!0,status:'standard'},Lie={syntax:' | | auto',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToContainingBlockHeight',groups:['CSS Positioning'],initial:'auto',appliesto:'positionedElements',computed:'lengthAbsolutePercentageAsSpecifiedOtherwiseAuto',order:'uniqueOrder',status:'standard'},qie={syntax:'none | ',media:'visual',inherited:!1,animationType:'transform',percentages:'referToSizeOfBoundingBox',groups:['CSS Transforms'],initial:'none',appliesto:'transformableElements',computed:'asSpecifiedRelativeToAbsoluteLengths',order:'uniqueOrder',stacking:!0,status:'standard'},Rie={syntax:'#',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Transitions'],initial:['transition-delay','transition-duration','transition-property','transition-timing-function'],appliesto:'allElementsAndPseudos',computed:['transition-delay','transition-duration','transition-property','transition-timing-function'],order:'orderOfAppearance',status:'standard'},Die={syntax:'none | [ ? ]?',media:'visual',inherited:!1,animationType:'transform',percentages:'referToSizeOfBoundingBox',groups:['CSS Transforms'],initial:'none',appliesto:'transformableElements',computed:'asSpecifiedRelativeToAbsoluteLengths',order:'perGrammar',stacking:!0,status:'standard'},Nie={syntax:'visible | hidden | collapse',media:'visual',inherited:!0,animationType:'visibility',percentages:'no',groups:['CSS Box Model'],initial:'visible',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},Bie={syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['CSS Fragmentation'],initial:'2',appliesto:'blockContainerElements',computed:'asSpecified',order:'perGrammar',status:'standard'},Iie={syntax:'[ | ] && [ border-box | content-box ]? | available | min-content | max-content | fit-content | auto',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToWidthOfContainingBlock',groups:['CSS Box Model'],initial:'auto',appliesto:'allElementsButNonReplacedAndTableRows',computed:'percentageAutoOrAbsoluteLength',order:'lengthOrPercentageBeforeKeywordIfBothPresent',status:'standard'},zie={syntax:'normal | reset | | ',media:'visual',inherited:!1,animationType:'integer',percentages:'no',groups:['Microsoft Extensions'],initial:'normal',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},_ie={all:Uoe,animation:Voe,appearance:Woe,azimuth:Foe,background:joe,border:Hoe,bottom:Yoe,clear:$oe,clip:Koe,color:Xoe,columns:Qoe,contain:Zoe,content:Joe,cursor:eie,direction:tie,display:nie,filter:rie,flex:aie,float:oie,font:iie,gap:sie,grid:lie,height:cie,hyphens:pie,isolation:uie,left:mie,margin:gie,mask:hie,offset:fie,opacity:yie,order:bie,orphans:xie,outline:kie,overflow:Sie,padding:wie,perspective:vie,position:Tie,quotes:Cie,resize:Eie,right:Aie,rotate:Oie,scale:Pie,top:Lie,transform:qie,transition:Rie,translate:Die,visibility:Nie,widows:Bie,width:Iie,zoom:zie,"--*":{syntax:'',media:'all',inherited:!0,animationType:'discrete',percentages:'no',groups:['CSS Variables'],initial:'seeProse',appliesto:'allElements',computed:'asSpecifiedWithVarsSubstituted',order:'perGrammar',status:'experimental'},"-ms-accelerator":{syntax:'false | true',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'false',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-block-progression":{syntax:'tb | rl | bt | lr',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'tb',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-content-zoom-chaining":{syntax:'none | chained',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'none',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-content-zooming":{syntax:'none | zoom',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'zoomForTheTopLevelNoneForTheRest',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-content-zoom-limit":{syntax:'<\'-ms-content-zoom-limit-min\'> <\'-ms-content-zoom-limit-max\'>',media:'interactive',inherited:!1,animationType:'discrete',percentages:['-ms-content-zoom-limit-max','-ms-content-zoom-limit-min'],groups:['Microsoft Extensions'],initial:['-ms-content-zoom-limit-max','-ms-content-zoom-limit-min'],appliesto:'nonReplacedBlockAndInlineBlockElements',computed:['-ms-content-zoom-limit-max','-ms-content-zoom-limit-min'],order:'uniqueOrder',status:'nonstandard'},"-ms-content-zoom-limit-max":{syntax:'',media:'interactive',inherited:!1,animationType:'discrete',percentages:'maxZoomFactor',groups:['Microsoft Extensions'],initial:'400%',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-content-zoom-limit-min":{syntax:'',media:'interactive',inherited:!1,animationType:'discrete',percentages:'minZoomFactor',groups:['Microsoft Extensions'],initial:'100%',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-content-zoom-snap":{syntax:'<\'-ms-content-zoom-snap-type\'> || <\'-ms-content-zoom-snap-points\'>',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:['-ms-content-zoom-snap-type','-ms-content-zoom-snap-points'],appliesto:'nonReplacedBlockAndInlineBlockElements',computed:['-ms-content-zoom-snap-type','-ms-content-zoom-snap-points'],order:'uniqueOrder',status:'nonstandard'},"-ms-content-zoom-snap-points":{syntax:'snapInterval( , ) | snapList( # )',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'snapInterval(0%, 100%)',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-content-zoom-snap-type":{syntax:'none | proximity | mandatory',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'none',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-filter":{syntax:'',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'""',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-flow-from":{syntax:'[ none | ]#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'none',appliesto:'nonReplacedElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-flow-into":{syntax:'[ none | ]#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'none',appliesto:'iframeElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-high-contrast-adjust":{syntax:'auto | none',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'auto',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-hyphenate-limit-chars":{syntax:'auto | {1,3}',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'auto',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-hyphenate-limit-lines":{syntax:'no-limit | ',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'no-limit',appliesto:'blockContainerElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-hyphenate-limit-zone":{syntax:' | ',media:'visual',inherited:!0,animationType:'discrete',percentages:'referToLineBoxWidth',groups:['Microsoft Extensions'],initial:'0',appliesto:'blockContainerElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-ime-align":{syntax:'auto | after',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'auto',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-overflow-style":{syntax:'auto | none | scrollbar | -ms-autohiding-scrollbar',media:'interactive',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'auto',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scrollbar-3dlight-color":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'dependsOnUserAgent',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scrollbar-arrow-color":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'ButtonText',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scrollbar-base-color":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'dependsOnUserAgent',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scrollbar-darkshadow-color":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'ThreeDDarkShadow',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scrollbar-face-color":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'ThreeDFace',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scrollbar-highlight-color":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'ThreeDHighlight',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scrollbar-shadow-color":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'ThreeDDarkShadow',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scrollbar-track-color":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'Scrollbar',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-chaining":{syntax:'chained | none',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'chained',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-limit":{syntax:'<\'-ms-scroll-limit-x-min\'> <\'-ms-scroll-limit-y-min\'> <\'-ms-scroll-limit-x-max\'> <\'-ms-scroll-limit-y-max\'>',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:['-ms-scroll-limit-x-min','-ms-scroll-limit-y-min','-ms-scroll-limit-x-max','-ms-scroll-limit-y-max'],appliesto:'nonReplacedBlockAndInlineBlockElements',computed:['-ms-scroll-limit-x-min','-ms-scroll-limit-y-min','-ms-scroll-limit-x-max','-ms-scroll-limit-y-max'],order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-limit-x-max":{syntax:'auto | ',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'auto',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-limit-x-min":{syntax:'',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'0',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-limit-y-max":{syntax:'auto | ',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'auto',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-limit-y-min":{syntax:'',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'0',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-rails":{syntax:'none | railed',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'railed',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-snap-points-x":{syntax:'snapInterval( , ) | snapList( # )',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'snapInterval(0px, 100%)',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-snap-points-y":{syntax:'snapInterval( , ) | snapList( # )',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'snapInterval(0px, 100%)',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-snap-type":{syntax:'none | proximity | mandatory',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'none',appliesto:'nonReplacedBlockAndInlineBlockElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-snap-x":{syntax:'<\'-ms-scroll-snap-type\'> <\'-ms-scroll-snap-points-x\'>',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:['-ms-scroll-snap-type','-ms-scroll-snap-points-x'],appliesto:'nonReplacedBlockAndInlineBlockElements',computed:['-ms-scroll-snap-type','-ms-scroll-snap-points-x'],order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-snap-y":{syntax:'<\'-ms-scroll-snap-type\'> <\'-ms-scroll-snap-points-y\'>',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:['-ms-scroll-snap-type','-ms-scroll-snap-points-y'],appliesto:'nonReplacedBlockAndInlineBlockElements',computed:['-ms-scroll-snap-type','-ms-scroll-snap-points-y'],order:'uniqueOrder',status:'nonstandard'},"-ms-scroll-translation":{syntax:'none | vertical-to-horizontal',media:'interactive',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-text-autospace":{syntax:'none | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-touch-select":{syntax:'grippers | none',media:'interactive',inherited:!0,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'grippers',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-user-select":{syntax:'none | element | text',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'text',appliesto:'nonReplacedElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-wrap-flow":{syntax:'auto | both | start | end | maximum | clear',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'auto',appliesto:'blockLevelElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-wrap-margin":{syntax:'',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'0',appliesto:'exclusionElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-ms-wrap-through":{syntax:'wrap | none',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Microsoft Extensions'],initial:'wrap',appliesto:'blockLevelElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-appearance":{syntax:'none | button | button-arrow-down | button-arrow-next | button-arrow-previous | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem | menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio | menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel | tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward | textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions','WebKit Extensions'],initial:'noneButOverriddenInUserAgentCSS',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-binding":{syntax:' | none',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'none',appliesto:'allElementsExceptGeneratedContentOrPseudoElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-border-bottom-colors":{syntax:'+ | none',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-border-left-colors":{syntax:'+ | none',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-border-right-colors":{syntax:'+ | none',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-border-top-colors":{syntax:'+ | none',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-context-properties":{syntax:'none | [ fill | fill-opacity | stroke | stroke-opacity ]#',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'none',appliesto:'allElementsThatCanReferenceImages',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-float-edge":{syntax:'border-box | content-box | margin-box | padding-box',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'content-box',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-force-broken-image-icon":{syntax:'',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'0',appliesto:'images',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-image-region":{syntax:' | auto',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'auto',appliesto:'xulImageElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-orient":{syntax:'inline | block | horizontal | vertical',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'inline',appliesto:'anyElementEffectOnProgressAndMeter',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-outline-radius":{syntax:'{1,4} [ / {1,4} ]?',media:'visual',inherited:!1,animationType:['-moz-outline-radius-topleft','-moz-outline-radius-topright','-moz-outline-radius-bottomright','-moz-outline-radius-bottomleft'],percentages:['-moz-outline-radius-topleft','-moz-outline-radius-topright','-moz-outline-radius-bottomright','-moz-outline-radius-bottomleft'],groups:['Mozilla Extensions'],initial:['-moz-outline-radius-topleft','-moz-outline-radius-topright','-moz-outline-radius-bottomright','-moz-outline-radius-bottomleft'],appliesto:'allElements',computed:['-moz-outline-radius-topleft','-moz-outline-radius-topright','-moz-outline-radius-bottomright','-moz-outline-radius-bottomleft'],order:'uniqueOrder',status:'nonstandard'},"-moz-outline-radius-bottomleft":{syntax:'',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToDimensionOfBorderBox',groups:['Mozilla Extensions'],initial:'0',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-outline-radius-bottomright":{syntax:'',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToDimensionOfBorderBox',groups:['Mozilla Extensions'],initial:'0',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-outline-radius-topleft":{syntax:'',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToDimensionOfBorderBox',groups:['Mozilla Extensions'],initial:'0',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-outline-radius-topright":{syntax:'',media:'visual',inherited:!1,animationType:'lpc',percentages:'referToDimensionOfBorderBox',groups:['Mozilla Extensions'],initial:'0',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-stack-sizing":{syntax:'ignore | stretch-to-fit',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'stretch-to-fit',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-text-blink":{syntax:'none | blink',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-user-focus":{syntax:'ignore | normal | select-after | select-before | select-menu | select-same | select-all | none',media:'interactive',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-user-input":{syntax:'auto | none | enabled | disabled',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'auto',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-user-modify":{syntax:'read-only | read-write | write-only',media:'interactive',inherited:!0,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'read-only',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-window-dragging":{syntax:'drag | no-drag',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'drag',appliesto:'allElementsCreatingNativeWindows',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-moz-window-shadow":{syntax:'default | menu | tooltip | sheet | none',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['Mozilla Extensions'],initial:'default',appliesto:'allElementsCreatingNativeWindows',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-webkit-appearance":{syntax:'none | button | button-bevel | caret | checkbox | default-button | inner-spin-button | listbox | listitem | media-controls-background | media-controls-fullscreen-background | media-current-time-display | media-enter-fullscreen-button | media-exit-fullscreen-button | media-fullscreen-button | media-mute-button | media-overlay-play-button | media-play-button | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb | media-time-remaining-display | media-toggle-closed-captions-button | media-volume-slider | media-volume-slider-container | media-volume-sliderthumb | menulist | menulist-button | menulist-text | menulist-textfield | meter | progress-bar | progress-bar-value | push-button | radio | searchfield | searchfield-cancel-button | searchfield-decoration | searchfield-results-button | searchfield-results-decoration | slider-horizontal | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button | textarea | textfield',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'noneButOverriddenInUserAgentCSS',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-webkit-border-before":{syntax:'<\'border-width\'> || <\'border-style\'> || <\'color\'>',media:'visual',inherited:!0,animationType:'discrete',percentages:['-webkit-border-before-width'],groups:['WebKit Extensions'],initial:['border-width','border-style','color'],appliesto:'allElements',computed:['border-width','border-style','color'],order:'uniqueOrder',status:'nonstandard'},"-webkit-border-before-color":{syntax:'<\'color\'>',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'currentcolor',appliesto:'allElements',computed:'computedColor',order:'uniqueOrder',status:'nonstandard'},"-webkit-border-before-style":{syntax:'<\'border-style\'>',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-webkit-border-before-width":{syntax:'<\'border-width\'>',media:'visual',inherited:!0,animationType:'discrete',percentages:'logicalWidthOfContainingBlock',groups:['WebKit Extensions'],initial:'medium',appliesto:'allElements',computed:'absoluteLengthZeroIfBorderStyleNoneOrHidden',order:'uniqueOrder',status:'nonstandard'},"-webkit-box-reflect":{syntax:'[ above | below | right | left ]? ? ?',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'none',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-webkit-mask":{syntax:'[ || [ / ]? || || [ | border | padding | content | text ] || [ | border | padding | content ] ]#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:['-webkit-mask-image','-webkit-mask-repeat','-webkit-mask-attachment','-webkit-mask-position','-webkit-mask-origin','-webkit-mask-clip'],appliesto:'allElements',computed:['-webkit-mask-image','-webkit-mask-repeat','-webkit-mask-attachment','-webkit-mask-position','-webkit-mask-origin','-webkit-mask-clip'],order:'uniqueOrder',status:'nonstandard'},"-webkit-mask-attachment":{syntax:'#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'scroll',appliesto:'allElements',computed:'asSpecified',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-clip":{syntax:'[ | border | padding | content | text ]#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'border',appliesto:'allElements',computed:'asSpecified',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-composite":{syntax:'#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'source-over',appliesto:'allElements',computed:'asSpecified',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-image":{syntax:'#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'none',appliesto:'allElements',computed:'absoluteURIOrNone',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-origin":{syntax:'[ | border | padding | content ]#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'padding',appliesto:'allElements',computed:'asSpecified',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-position":{syntax:'#',media:'visual',inherited:!1,animationType:'discrete',percentages:'referToSizeOfElement',groups:['WebKit Extensions'],initial:'0% 0%',appliesto:'allElements',computed:'absoluteLengthOrPercentage',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-position-x":{syntax:'[ | left | center | right ]#',media:'visual',inherited:!1,animationType:'discrete',percentages:'referToSizeOfElement',groups:['WebKit Extensions'],initial:'0%',appliesto:'allElements',computed:'absoluteLengthOrPercentage',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-position-y":{syntax:'[ | top | center | bottom ]#',media:'visual',inherited:!1,animationType:'discrete',percentages:'referToSizeOfElement',groups:['WebKit Extensions'],initial:'0%',appliesto:'allElements',computed:'absoluteLengthOrPercentage',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-repeat":{syntax:'#',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'repeat',appliesto:'allElements',computed:'asSpecified',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-repeat-x":{syntax:'repeat | no-repeat | space | round',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'repeat',appliesto:'allElements',computed:'asSpecified',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-repeat-y":{syntax:'repeat | no-repeat | space | round',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'repeat',appliesto:'allElements',computed:'absoluteLengthOrPercentage',order:'orderOfAppearance',status:'nonstandard'},"-webkit-mask-size":{syntax:'#',media:'visual',inherited:!1,animationType:'discrete',percentages:'relativeToBackgroundPositioningArea',groups:['WebKit Extensions'],initial:'auto auto',appliesto:'allElements',computed:'asSpecified',order:'orderOfAppearance',status:'nonstandard'},"-webkit-overflow-scrolling":{syntax:'auto | touch',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'auto',appliesto:'scrollingBoxes',computed:'asSpecified',order:'orderOfAppearance',status:'nonstandard'},"-webkit-tap-highlight-color":{syntax:'',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'black',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-webkit-text-fill-color":{syntax:'',media:'visual',inherited:!0,animationType:'color',percentages:'no',groups:['WebKit Extensions'],initial:'currentcolor',appliesto:'allElements',computed:'computedColor',order:'uniqueOrder',status:'nonstandard'},"-webkit-text-stroke":{syntax:' || ',media:'visual',inherited:!0,animationType:['-webkit-text-stroke-width','-webkit-text-stroke-color'],percentages:'no',groups:['WebKit Extensions'],initial:['-webkit-text-stroke-width','-webkit-text-stroke-color'],appliesto:'allElements',computed:['-webkit-text-stroke-width','-webkit-text-stroke-color'],order:'canonicalOrder',status:'nonstandard'},"-webkit-text-stroke-color":{syntax:'',media:'visual',inherited:!0,animationType:'color',percentages:'no',groups:['WebKit Extensions'],initial:'currentcolor',appliesto:'allElements',computed:'computedColor',order:'uniqueOrder',status:'nonstandard'},"-webkit-text-stroke-width":{syntax:'',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'0',appliesto:'allElements',computed:'absoluteLength',order:'uniqueOrder',status:'nonstandard'},"-webkit-touch-callout":{syntax:'default | none',media:'visual',inherited:!0,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'default',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"-webkit-user-modify":{syntax:'read-only | read-write | read-write-plaintext-only',media:'interactive',inherited:!0,animationType:'discrete',percentages:'no',groups:['WebKit Extensions'],initial:'read-only',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'nonstandard'},"align-content":{syntax:'normal | | | ? ',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Flexible Box Layout'],initial:'normal',appliesto:'multilineFlexContainers',computed:'asSpecified',order:'uniqueOrder',status:'standard'},"align-items":{syntax:'normal | stretch | | [ ? ]',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Flexible Box Layout'],initial:'normal',appliesto:'allElements',computed:'asSpecified',order:'uniqueOrder',status:'standard'},"align-self":{syntax:'auto | normal | stretch | | ? ',media:'visual',inherited:!1,animationType:'discrete',percentages:'no',groups:['CSS Flexible Box Layout'],initial:'auto',appliesto:'flexItemsGridItemsAndAbsolutelyPositionedBoxes',computed:'autoOnAbsolutelyPositionedElementsValueOfAlignItemsOnParent',order:'uniqueOrder',status:'standard'},"animation-delay":{syntax:'