diff --git a/404.html b/404.html index 221b38e7b..2564c65e3 100644 --- a/404.html +++ b/404.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/abi-decode/index.html b/abi-decode/index.html index 221b38e7b..2564c65e3 100644 --- a/abi-decode/index.html +++ b/abi-decode/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/abi-encode/index.html b/abi-encode/index.html index 221b38e7b..2564c65e3 100644 --- a/abi-encode/index.html +++ b/abi-encode/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/assembly-bin-exp/index.html b/app/assembly-bin-exp/index.html index 221b38e7b..2564c65e3 100644 --- a/app/assembly-bin-exp/index.html +++ b/app/assembly-bin-exp/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/bi-directional-payment-channel/index.html b/app/bi-directional-payment-channel/index.html index 221b38e7b..2564c65e3 100644 --- a/app/bi-directional-payment-channel/index.html +++ b/app/bi-directional-payment-channel/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/create2/index.html b/app/create2/index.html index 221b38e7b..2564c65e3 100644 --- a/app/create2/index.html +++ b/app/create2/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/crowd-fund/index.html b/app/crowd-fund/index.html index 221b38e7b..2564c65e3 100644 --- a/app/crowd-fund/index.html +++ b/app/crowd-fund/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/deploy-any-contract/index.html b/app/deploy-any-contract/index.html index 221b38e7b..2564c65e3 100644 --- a/app/deploy-any-contract/index.html +++ b/app/deploy-any-contract/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/dutch-auction/index.html b/app/dutch-auction/index.html index 221b38e7b..2564c65e3 100644 --- a/app/dutch-auction/index.html +++ b/app/dutch-auction/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/english-auction/index.html b/app/english-auction/index.html index 221b38e7b..2564c65e3 100644 --- a/app/english-auction/index.html +++ b/app/english-auction/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/erc1155/index.html b/app/erc1155/index.html index 221b38e7b..2564c65e3 100644 --- a/app/erc1155/index.html +++ b/app/erc1155/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/erc20/index.html b/app/erc20/index.html index 221b38e7b..2564c65e3 100644 --- a/app/erc20/index.html +++ b/app/erc20/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/erc721/index.html b/app/erc721/index.html index 221b38e7b..2564c65e3 100644 --- a/app/erc721/index.html +++ b/app/erc721/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/ether-wallet/index.html b/app/ether-wallet/index.html index 221b38e7b..2564c65e3 100644 --- a/app/ether-wallet/index.html +++ b/app/ether-wallet/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/gasless-token-transfer/index.html b/app/gasless-token-transfer/index.html index 221b38e7b..2564c65e3 100644 --- a/app/gasless-token-transfer/index.html +++ b/app/gasless-token-transfer/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/iterable-mapping/index.html b/app/iterable-mapping/index.html index 221b38e7b..2564c65e3 100644 --- a/app/iterable-mapping/index.html +++ b/app/iterable-mapping/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/merkle-tree/index.html b/app/merkle-tree/index.html index 221b38e7b..2564c65e3 100644 --- a/app/merkle-tree/index.html +++ b/app/merkle-tree/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/minimal-proxy/index.html b/app/minimal-proxy/index.html index 221b38e7b..2564c65e3 100644 --- a/app/minimal-proxy/index.html +++ b/app/minimal-proxy/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/multi-call/index.html b/app/multi-call/index.html index 221b38e7b..2564c65e3 100644 --- a/app/multi-call/index.html +++ b/app/multi-call/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/multi-delegatecall/index.html b/app/multi-delegatecall/index.html index 221b38e7b..2564c65e3 100644 --- a/app/multi-delegatecall/index.html +++ b/app/multi-delegatecall/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/multi-sig-wallet/index.html b/app/multi-sig-wallet/index.html index 221b38e7b..2564c65e3 100644 --- a/app/multi-sig-wallet/index.html +++ b/app/multi-sig-wallet/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/simple-bytecode-contract/index.html b/app/simple-bytecode-contract/index.html index 221b38e7b..2564c65e3 100644 --- a/app/simple-bytecode-contract/index.html +++ b/app/simple-bytecode-contract/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/time-lock/index.html b/app/time-lock/index.html index 221b38e7b..2564c65e3 100644 --- a/app/time-lock/index.html +++ b/app/time-lock/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/uni-directional-payment-channel/index.html b/app/uni-directional-payment-channel/index.html index 221b38e7b..2564c65e3 100644 --- a/app/uni-directional-payment-channel/index.html +++ b/app/uni-directional-payment-channel/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/upgradeable-proxy/index.html b/app/upgradeable-proxy/index.html index 221b38e7b..2564c65e3 100644 --- a/app/upgradeable-proxy/index.html +++ b/app/upgradeable-proxy/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/app/write-to-any-slot/index.html b/app/write-to-any-slot/index.html index 221b38e7b..2564c65e3 100644 --- a/app/write-to-any-slot/index.html +++ b/app/write-to-any-slot/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/array/index.html b/array/index.html index 221b38e7b..2564c65e3 100644 --- a/array/index.html +++ b/array/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-error/index.html b/assembly-error/index.html index 221b38e7b..2564c65e3 100644 --- a/assembly-error/index.html +++ b/assembly-error/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-if/index.html b/assembly-if/index.html index 221b38e7b..2564c65e3 100644 --- a/assembly-if/index.html +++ b/assembly-if/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-loop/index.html b/assembly-loop/index.html index 221b38e7b..2564c65e3 100644 --- a/assembly-loop/index.html +++ b/assembly-loop/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-math/index.html b/assembly-math/index.html index 221b38e7b..2564c65e3 100644 --- a/assembly-math/index.html +++ b/assembly-math/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assembly-variable/index.html b/assembly-variable/index.html index 221b38e7b..2564c65e3 100644 --- a/assembly-variable/index.html +++ b/assembly-variable/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/assets/index-G8eoIlnF.js b/assets/index-SELPOn-5.js similarity index 94% rename from assets/index-G8eoIlnF.js rename to assets/index-SELPOn-5.js index e3e609f04..ec37633ed 100644 --- a/assets/index-G8eoIlnF.js +++ b/assets/index-SELPOn-5.js @@ -1,4 +1,4 @@ -function Ag(s,a){for(var n=0;nl[p]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))l(p);new MutationObserver(p=>{for(const e of p)if(e.type==="childList")for(const c of e.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function n(p){const e={};return p.integrity&&(e.integrity=p.integrity),p.referrerPolicy&&(e.referrerPolicy=p.referrerPolicy),p.crossOrigin==="use-credentials"?e.credentials="include":p.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function l(p){if(p.ep)return;p.ep=!0;const e=n(p);fetch(p.href,e)}})();var dl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ko(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var So={exports:{}},jp={},Mo={exports:{}},X={};/** +function yg(s,a){for(var n=0;nl[p]})}}}return Object.freeze(Object.defineProperty(s,Symbol.toStringTag,{value:"Module"}))}(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const p of document.querySelectorAll('link[rel="modulepreload"]'))l(p);new MutationObserver(p=>{for(const e of p)if(e.type==="childList")for(const c of e.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function n(p){const e={};return p.integrity&&(e.integrity=p.integrity),p.referrerPolicy&&(e.referrerPolicy=p.referrerPolicy),p.crossOrigin==="use-credentials"?e.credentials="include":p.crossOrigin==="anonymous"?e.credentials="omit":e.credentials="same-origin",e}function l(p){if(p.ep)return;p.ep=!0;const e=n(p);fetch(p.href,e)}})();var dl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ko(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var So={exports:{}},jp={},Mo={exports:{}},v={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ function Ag(s,a){for(var n=0;n>>1,$=V[Q];if(0>>1;Qp(Sp,v))ka<$&&0>p(hl,Sp)?(V[Q]=hl,V[ka]=v,Q=ka):(V[Q]=Sp,V[wa]=v,Q=wa);else if(ka<$&&0>p(hl,v))V[Q]=hl,V[ka]=v,Q=ka;else break s}}return R}function p(V,R){var v=V.sortIndex-R.sortIndex;return v!==0?v:V.id-R.id}if(typeof performance=="object"&&typeof performance.now=="function"){var e=performance;s.unstable_now=function(){return e.now()}}else{var c=Date,t=c.now();s.unstable_now=function(){return c.now()-t}}var o=[],r=[],d=1,I=null,j=3,y=!1,m=!1,b=!1,G=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,g=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function C(V){for(var R=n(r);R!==null;){if(R.callback===null)l(r);else if(R.startTime<=V)l(r),R.sortIndex=R.expirationTime,a(o,R);else break;R=n(r)}}function A(V){if(b=!1,C(V),!m)if(n(o)!==null)m=!0,Fp(Z);else{var R=n(r);R!==null&&Kp(A,R.startTime-V)}}function Z(V,R){m=!1,b&&(b=!1,h(Y),Y=-1),y=!0;var v=j;try{for(C(R),I=n(o);I!==null&&(!(I.expirationTime>R)||V&&!Rs());){var Q=I.callback;if(typeof Q=="function"){I.callback=null,j=I.priorityLevel;var $=Q(I.expirationTime<=R);R=s.unstable_now(),typeof $=="function"?I.callback=$:I===n(o)&&l(o),C(R)}else l(o);I=n(o)}if(I!==null)var gl=!0;else{var wa=n(r);wa!==null&&Kp(A,wa.startTime-R),gl=!1}return gl}finally{I=null,j=v,y=!1}}var k=!1,B=null,Y=-1,x=5,N=-1;function Rs(){return!(s.unstable_now()-NV||125Q?(V.sortIndex=v,a(r,V),n(o)===null&&V===n(r)&&(b?(h(Y),Y=-1):b=!0,Kp(A,v-Q))):(V.sortIndex=$,a(o,V),m||y||(m=!0,Fp(Z))),V},s.unstable_shouldYield=Rs,s.unstable_wrapCallback=function(V){var R=j;return function(){var v=j;j=R;try{return V.apply(this,arguments)}finally{j=v}}}})(Po);Oo.exports=Po;var zg=Oo.exports;/** + */(function(s){function a(f,R){var X=f.length;f.push(R);s:for(;0>>1,$=f[Q];if(0>>1;Qp(Sp,X))ka<$&&0>p(hl,Sp)?(f[Q]=hl,f[ka]=X,Q=ka):(f[Q]=Sp,f[wa]=X,Q=wa);else if(ka<$&&0>p(hl,X))f[Q]=hl,f[ka]=X,Q=ka;else break s}}return R}function p(f,R){var X=f.sortIndex-R.sortIndex;return X!==0?X:f.id-R.id}if(typeof performance=="object"&&typeof performance.now=="function"){var e=performance;s.unstable_now=function(){return e.now()}}else{var c=Date,t=c.now();s.unstable_now=function(){return c.now()-t}}var o=[],r=[],d=1,I=null,j=3,A=!1,m=!1,b=!1,G=typeof setTimeout=="function"?setTimeout:null,h=typeof clearTimeout=="function"?clearTimeout:null,g=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function C(f){for(var R=n(r);R!==null;){if(R.callback===null)l(r);else if(R.startTime<=f)l(r),R.sortIndex=R.expirationTime,a(o,R);else break;R=n(r)}}function y(f){if(b=!1,C(f),!m)if(n(o)!==null)m=!0,Fp(Z);else{var R=n(r);R!==null&&Kp(y,R.startTime-f)}}function Z(f,R){m=!1,b&&(b=!1,h(Y),Y=-1),A=!0;var X=j;try{for(C(R),I=n(o);I!==null&&(!(I.expirationTime>R)||f&&!Rs());){var Q=I.callback;if(typeof Q=="function"){I.callback=null,j=I.priorityLevel;var $=Q(I.expirationTime<=R);R=s.unstable_now(),typeof $=="function"?I.callback=$:I===n(o)&&l(o),C(R)}else l(o);I=n(o)}if(I!==null)var gl=!0;else{var wa=n(r);wa!==null&&Kp(y,wa.startTime-R),gl=!1}return gl}finally{I=null,j=X,A=!1}}var k=!1,B=null,Y=-1,x=5,N=-1;function Rs(){return!(s.unstable_now()-Nf||125Q?(f.sortIndex=X,a(r,f),n(o)===null&&f===n(r)&&(b?(h(Y),Y=-1):b=!0,Kp(y,X-Q))):(f.sortIndex=$,a(o,f),m||A||(m=!0,Fp(Z))),f},s.unstable_shouldYield=Rs,s.unstable_wrapCallback=function(f){var R=j;return function(){var X=j;j=R;try{return f.apply(this,arguments)}finally{j=X}}}})(Po);Oo.exports=Po;var zg=Oo.exports;/** * @license React * react-dom.production.min.js * @@ -30,14 +30,14 @@ function Ag(s,a){for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ce=Object.prototype.hasOwnProperty,Eg=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,dt={},It={};function Ug(s){return Ce.call(It,s)?!0:Ce.call(dt,s)?!1:Eg.test(s)?It[s]=!0:(dt[s]=!0,!1)}function Tg(s,a,n,l){if(n!==null&&n.type===0)return!1;switch(typeof a){case"function":case"symbol":return!0;case"boolean":return l?!1:n!==null?!n.acceptsBooleans:(s=s.toLowerCase().slice(0,5),s!=="data-"&&s!=="aria-");default:return!1}}function Qg(s,a,n,l){if(a===null||typeof a>"u"||Tg(s,a,n,l))return!0;if(l)return!1;if(n!==null)switch(n.type){case 3:return!a;case 4:return a===!1;case 5:return isNaN(a);case 6:return isNaN(a)||1>a}return!1}function hs(s,a,n,l,p,e,c){this.acceptsBooleans=a===2||a===3||a===4,this.attributeName=l,this.attributeNamespace=p,this.mustUseProperty=n,this.propertyName=s,this.type=a,this.sanitizeURL=e,this.removeEmptyString=c}var ps={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(s){ps[s]=new hs(s,0,!1,s,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(s){var a=s[0];ps[a]=new hs(a,1,!1,s[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(s){ps[s]=new hs(s,2,!1,s.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(s){ps[s]=new hs(s,2,!1,s,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(s){ps[s]=new hs(s,3,!1,s.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(s){ps[s]=new hs(s,3,!0,s,null,!1,!1)});["capture","download"].forEach(function(s){ps[s]=new hs(s,4,!1,s,null,!1,!1)});["cols","rows","size","span"].forEach(function(s){ps[s]=new hs(s,6,!1,s,null,!1,!1)});["rowSpan","start"].forEach(function(s){ps[s]=new hs(s,5,!1,s.toLowerCase(),null,!1,!1)});var Cc=/[\-:]([a-z])/g;function jc(s){return s[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(s){var a=s.replace(Cc,jc);ps[a]=new hs(a,1,!1,s,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(s){var a=s.replace(Cc,jc);ps[a]=new hs(a,1,!1,s,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(s){var a=s.replace(Cc,jc);ps[a]=new hs(a,1,!1,s,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(s){ps[s]=new hs(s,1,!1,s.toLowerCase(),null,!1,!1)});ps.xlinkHref=new hs("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(s){ps[s]=new hs(s,1,!1,s.toLowerCase(),null,!0,!0)});function uc(s,a,n,l){var p=ps.hasOwnProperty(a)?ps[a]:null;(p!==null?p.type!==0:l||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ce=Object.prototype.hasOwnProperty,Eg=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,dt={},It={};function Ug(s){return Ce.call(It,s)?!0:Ce.call(dt,s)?!1:Eg.test(s)?It[s]=!0:(dt[s]=!0,!1)}function Tg(s,a,n,l){if(n!==null&&n.type===0)return!1;switch(typeof a){case"function":case"symbol":return!0;case"boolean":return l?!1:n!==null?!n.acceptsBooleans:(s=s.toLowerCase().slice(0,5),s!=="data-"&&s!=="aria-");default:return!1}}function Qg(s,a,n,l){if(a===null||typeof a>"u"||Tg(s,a,n,l))return!0;if(l)return!1;if(n!==null)switch(n.type){case 3:return!a;case 4:return a===!1;case 5:return isNaN(a);case 6:return isNaN(a)||1>a}return!1}function hs(s,a,n,l,p,e,c){this.acceptsBooleans=a===2||a===3||a===4,this.attributeName=l,this.attributeNamespace=p,this.mustUseProperty=n,this.propertyName=s,this.type=a,this.sanitizeURL=e,this.removeEmptyString=c}var ps={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(s){ps[s]=new hs(s,0,!1,s,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(s){var a=s[0];ps[a]=new hs(a,1,!1,s[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(s){ps[s]=new hs(s,2,!1,s.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(s){ps[s]=new hs(s,2,!1,s,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(s){ps[s]=new hs(s,3,!1,s.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(s){ps[s]=new hs(s,3,!0,s,null,!1,!1)});["capture","download"].forEach(function(s){ps[s]=new hs(s,4,!1,s,null,!1,!1)});["cols","rows","size","span"].forEach(function(s){ps[s]=new hs(s,6,!1,s,null,!1,!1)});["rowSpan","start"].forEach(function(s){ps[s]=new hs(s,5,!1,s.toLowerCase(),null,!1,!1)});var Cc=/[\-:]([a-z])/g;function jc(s){return s[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(s){var a=s.replace(Cc,jc);ps[a]=new hs(a,1,!1,s,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(s){var a=s.replace(Cc,jc);ps[a]=new hs(a,1,!1,s,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(s){var a=s.replace(Cc,jc);ps[a]=new hs(a,1,!1,s,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(s){ps[s]=new hs(s,1,!1,s.toLowerCase(),null,!1,!1)});ps.xlinkHref=new hs("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(s){ps[s]=new hs(s,1,!1,s.toLowerCase(),null,!0,!0)});function uc(s,a,n,l){var p=ps.hasOwnProperty(a)?ps[a]:null;(p!==null?p.type!==0:l||!(2t||p[c]!==e[t]){var o=` -`+p[c].replace(" at new "," at ");return s.displayName&&o.includes("")&&(o=o.replace("",s.displayName)),o}while(1<=c&&0<=t);break}}}finally{Jp=!1,Error.prepareStackTrace=n}return(s=s?s.displayName||s.name:"")?fn(s):""}function Dg(s){switch(s.tag){case 5:return fn(s.type);case 16:return fn("Lazy");case 13:return fn("Suspense");case 19:return fn("SuspenseList");case 0:case 2:case 15:return s=zp(s.type,!1),s;case 11:return s=zp(s.type.render,!1),s;case 1:return s=zp(s.type,!0),s;default:return""}}function Ae(s){if(s==null)return null;if(typeof s=="function")return s.displayName||s.name||null;if(typeof s=="string")return s;switch(s){case za:return"Fragment";case Ja:return"Portal";case je:return"Profiler";case yc:return"StrictMode";case ue:return"Suspense";case ye:return"SuspenseList"}if(typeof s=="object")switch(s.$$typeof){case ar:return(s.displayName||"Context")+".Consumer";case sr:return(s._context.displayName||"Context")+".Provider";case Ac:var a=s.render;return s=s.displayName,s||(s=a.displayName||a.name||"",s=s!==""?"ForwardRef("+s+")":"ForwardRef"),s;case mc:return a=s.displayName||null,a!==null?a:Ae(s.type)||"Memo";case na:a=s._payload,s=s._init;try{return Ae(s(a))}catch{}}return null}function Lg(s){var a=s.type;switch(s.tag){case 24:return"Cache";case 9:return(a.displayName||"Context")+".Consumer";case 10:return(a._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return s=a.render,s=s.displayName||s.name||"",a.displayName||(s!==""?"ForwardRef("+s+")":"ForwardRef");case 7:return"Fragment";case 5:return a;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ae(a);case 8:return a===yc?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a}return null}function ua(s){switch(typeof s){case"boolean":case"number":case"string":case"undefined":return s;case"object":return s;default:return""}}function lr(s){var a=s.type;return(s=s.nodeName)&&s.toLowerCase()==="input"&&(a==="checkbox"||a==="radio")}function _g(s){var a=lr(s)?"checked":"value",n=Object.getOwnPropertyDescriptor(s.constructor.prototype,a),l=""+s[a];if(!s.hasOwnProperty(a)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var p=n.get,e=n.set;return Object.defineProperty(s,a,{configurable:!0,get:function(){return p.call(this)},set:function(c){l=""+c,e.call(this,c)}}),Object.defineProperty(s,a,{enumerable:n.enumerable}),{getValue:function(){return l},setValue:function(c){l=""+c},stopTracking:function(){s._valueTracker=null,delete s[a]}}}}function jl(s){s._valueTracker||(s._valueTracker=_g(s))}function pr(s){if(!s)return!1;var a=s._valueTracker;if(!a)return!0;var n=a.getValue(),l="";return s&&(l=lr(s)?s.checked?"true":"false":s.value),s=l,s!==n?(a.setValue(s),!0):!1}function Ul(s){if(s=s||(typeof document<"u"?document:void 0),typeof s>"u")return null;try{return s.activeElement||s.body}catch{return s.body}}function me(s,a){var n=a.checked;return U({},a,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??s._wrapperState.initialChecked})}function jt(s,a){var n=a.defaultValue==null?"":a.defaultValue,l=a.checked!=null?a.checked:a.defaultChecked;n=ua(a.value!=null?a.value:n),s._wrapperState={initialChecked:l,initialValue:n,controlled:a.type==="checkbox"||a.type==="radio"?a.checked!=null:a.value!=null}}function er(s,a){a=a.checked,a!=null&&uc(s,"checked",a,!1)}function be(s,a){er(s,a);var n=ua(a.value),l=a.type;if(n!=null)l==="number"?(n===0&&s.value===""||s.value!=n)&&(s.value=""+n):s.value!==""+n&&(s.value=""+n);else if(l==="submit"||l==="reset"){s.removeAttribute("value");return}a.hasOwnProperty("value")?we(s,a.type,n):a.hasOwnProperty("defaultValue")&&we(s,a.type,ua(a.defaultValue)),a.checked==null&&a.defaultChecked!=null&&(s.defaultChecked=!!a.defaultChecked)}function ut(s,a,n){if(a.hasOwnProperty("value")||a.hasOwnProperty("defaultValue")){var l=a.type;if(!(l!=="submit"&&l!=="reset"||a.value!==void 0&&a.value!==null))return;a=""+s._wrapperState.initialValue,n||a===s.value||(s.value=a),s.defaultValue=a}n=s.name,n!==""&&(s.name=""),s.defaultChecked=!!s._wrapperState.initialChecked,n!==""&&(s.name=n)}function we(s,a,n){(a!=="number"||Ul(s.ownerDocument)!==s)&&(n==null?s.defaultValue=""+s._wrapperState.initialValue:s.defaultValue!==""+n&&(s.defaultValue=""+n))}var Vn=Array.isArray;function qa(s,a,n,l){if(s=s.options,a){a={};for(var p=0;p"+a.valueOf().toString()+"",a=ul.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;a.firstChild;)s.appendChild(a.firstChild)}});function zn(s,a){if(a){var n=s.firstChild;if(n&&n===s.lastChild&&n.nodeType===3){n.nodeValue=a;return}}s.textContent=a}var vn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Og=["Webkit","ms","Moz","O"];Object.keys(vn).forEach(function(s){Og.forEach(function(a){a=a+s.charAt(0).toUpperCase()+s.substring(1),vn[a]=vn[s]})});function rr(s,a,n){return a==null||typeof a=="boolean"||a===""?"":n||typeof a!="number"||a===0||vn.hasOwnProperty(s)&&vn[s]?(""+a).trim():a+"px"}function ir(s,a){s=s.style;for(var n in a)if(a.hasOwnProperty(n)){var l=n.indexOf("--")===0,p=rr(n,a[n],l);n==="float"&&(n="cssFloat"),l?s.setProperty(n,p):s[n]=p}}var Pg=U({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function We(s,a){if(a){if(Pg[s]&&(a.children!=null||a.dangerouslySetInnerHTML!=null))throw Error(w(137,s));if(a.dangerouslySetInnerHTML!=null){if(a.children!=null)throw Error(w(60));if(typeof a.dangerouslySetInnerHTML!="object"||!("__html"in a.dangerouslySetInnerHTML))throw Error(w(61))}if(a.style!=null&&typeof a.style!="object")throw Error(w(62))}}function Ge(s,a){if(s.indexOf("-")===-1)return typeof a.is=="string";switch(s){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Be=null;function bc(s){return s=s.target||s.srcElement||window,s.correspondingUseElement&&(s=s.correspondingUseElement),s.nodeType===3?s.parentNode:s}var fe=null,sn=null,an=null;function mt(s){if(s=rl(s)){if(typeof fe!="function")throw Error(w(280));var a=s.stateNode;a&&(a=bp(a),fe(s.stateNode,s.type,a))}}function gr(s){sn?an?an.push(s):an=[s]:sn=s}function hr(){if(sn){var s=sn,a=an;if(an=sn=null,mt(s),a)for(s=0;s>>=0,s===0?32:31-(oh(s)/rh|0)|0}var yl=64,Al=4194304;function Yn(s){switch(s&-s){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return s&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return s&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return s}}function Ll(s,a){var n=s.pendingLanes;if(n===0)return 0;var l=0,p=s.suspendedLanes,e=s.pingedLanes,c=n&268435455;if(c!==0){var t=c&~p;t!==0?l=Yn(t):(e&=c,e!==0&&(l=Yn(e)))}else c=n&~p,c!==0?l=Yn(c):e!==0&&(l=Yn(e));if(l===0)return 0;if(a!==0&&a!==l&&!(a&p)&&(p=l&-l,e=a&-a,p>=e||p===16&&(e&4194240)!==0))return a;if(l&4&&(l|=n&16),a=s.entangledLanes,a!==0)for(s=s.entanglements,a&=l;0n;n++)a.push(s);return a}function tl(s,a,n){s.pendingLanes|=a,a!==536870912&&(s.suspendedLanes=0,s.pingedLanes=0),s=s.eventTimes,a=31-Fs(a),s[a]=n}function dh(s,a){var n=s.pendingLanes&~a;s.pendingLanes=a,s.suspendedLanes=0,s.pingedLanes=0,s.expiredLanes&=a,s.mutableReadLanes&=a,s.entangledLanes&=a,a=s.entanglements;var l=s.eventTimes;for(s=s.expirationTimes;0=Nn),Vt=" ",Yt=!1;function vr(s,a){switch(s){case"keyup":return Jh.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Xr(s){return s=s.detail,typeof s=="object"&&"data"in s?s.data:null}var Ea=!1;function Eh(s,a){switch(s){case"compositionend":return Xr(a);case"keypress":return a.which!==32?null:(Yt=!0,Vt);case"textInput":return s=a.data,s===Vt&&Yt?null:s;default:return null}}function Uh(s,a){if(Ea)return s==="compositionend"||!Vc&&vr(s,a)?(s=Yr(),Hl=Gc=ca=null,Ea=!1,s):null;switch(s){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1=a)return{node:n,offset:a-s};s=l}s:{for(;n;){if(n.nextSibling){n=n.nextSibling;break s}n=n.parentNode}n=void 0}n=Nt(n)}}function Kr(s,a){return s&&a?s===a?!0:s&&s.nodeType===3?!1:a&&a.nodeType===3?Kr(s,a.parentNode):"contains"in s?s.contains(a):s.compareDocumentPosition?!!(s.compareDocumentPosition(a)&16):!1:!1}function Sr(){for(var s=window,a=Ul();a instanceof s.HTMLIFrameElement;){try{var n=typeof a.contentWindow.location.href=="string"}catch{n=!1}if(n)s=a.contentWindow;else break;a=Ul(s.document)}return a}function Yc(s){var a=s&&s.nodeName&&s.nodeName.toLowerCase();return a&&(a==="input"&&(s.type==="text"||s.type==="search"||s.type==="tel"||s.type==="url"||s.type==="password")||a==="textarea"||s.contentEditable==="true")}function qh(s){var a=Sr(),n=s.focusedElem,l=s.selectionRange;if(a!==n&&n&&n.ownerDocument&&Kr(n.ownerDocument.documentElement,n)){if(l!==null&&Yc(n)){if(a=l.start,s=l.end,s===void 0&&(s=a),"selectionStart"in n)n.selectionStart=a,n.selectionEnd=Math.min(s,n.value.length);else if(s=(a=n.ownerDocument||document)&&a.defaultView||window,s.getSelection){s=s.getSelection();var p=n.textContent.length,e=Math.min(l.start,p);l=l.end===void 0?e:Math.min(l.end,p),!s.extend&&e>l&&(p=l,l=e,e=p),p=Ht(n,e);var c=Ht(n,l);p&&c&&(s.rangeCount!==1||s.anchorNode!==p.node||s.anchorOffset!==p.offset||s.focusNode!==c.node||s.focusOffset!==c.offset)&&(a=a.createRange(),a.setStart(p.node,p.offset),s.removeAllRanges(),e>l?(s.addRange(a),s.extend(c.node,c.offset)):(a.setEnd(c.node,c.offset),s.addRange(a)))}}for(a=[],s=n;s=s.parentNode;)s.nodeType===1&&a.push({element:s,left:s.scrollLeft,top:s.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Ua=null,Ne=null,Fn=null,He=!1;function Ft(s,a,n){var l=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;He||Ua==null||Ua!==Ul(l)||(l=Ua,"selectionStart"in l&&Yc(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),Fn&&Ln(Fn,l)||(Fn=l,l=Pl(Ne,"onSelect"),0Da||(s.current=Je[Da],Je[Da]=null,Da--)}function K(s,a){Da++,Je[Da]=s.current,s.current=a}var ya={},os=ma(ya),js=ma(!1),va=ya;function cn(s,a){var n=s.type.contextTypes;if(!n)return ya;var l=s.stateNode;if(l&&l.__reactInternalMemoizedUnmaskedChildContext===a)return l.__reactInternalMemoizedMaskedChildContext;var p={},e;for(e in n)p[e]=a[e];return l&&(s=s.stateNode,s.__reactInternalMemoizedUnmaskedChildContext=a,s.__reactInternalMemoizedMaskedChildContext=p),p}function us(s){return s=s.childContextTypes,s!=null}function ql(){M(js),M(os)}function Et(s,a,n){if(os.current!==ya)throw Error(w(168));K(os,a),K(js,n)}function Dr(s,a,n){var l=s.stateNode;if(a=a.childContextTypes,typeof l.getChildContext!="function")return n;l=l.getChildContext();for(var p in l)if(!(p in a))throw Error(w(108,Lg(s)||"Unknown",p));return U({},n,l)}function sp(s){return s=(s=s.stateNode)&&s.__reactInternalMemoizedMergedChildContext||ya,va=os.current,K(os,s),K(js,js.current),!0}function Ut(s,a,n){var l=s.stateNode;if(!l)throw Error(w(169));n?(s=Dr(s,a,va),l.__reactInternalMemoizedMergedChildContext=s,M(js),M(os),K(os,s)):M(js),K(js,n)}var Ts=null,wp=!1,ne=!1;function Lr(s){Ts===null?Ts=[s]:Ts.push(s)}function gd(s){wp=!0,Lr(s)}function ba(){if(!ne&&Ts!==null){ne=!0;var s=0,a=F;try{var n=Ts;for(F=1;s>=c,p-=c,Qs=1<<32-Fs(a)+p|n<Y?(x=B,B=null):x=B.sibling;var N=j(h,B,C[Y],A);if(N===null){B===null&&(B=x);break}s&&B&&N.alternate===null&&a(h,B),g=e(N,g,Y),k===null?Z=N:k.sibling=N,k=N,B=x}if(Y===C.length)return n(h,B),J&&Za(h,Y),Z;if(B===null){for(;YY?(x=B,B=null):x=B.sibling;var Rs=j(h,B,N.value,A);if(Rs===null){B===null&&(B=x);break}s&&B&&Rs.alternate===null&&a(h,B),g=e(Rs,g,Y),k===null?Z=Rs:k.sibling=Rs,k=Rs,B=x}if(N.done)return n(h,B),J&&Za(h,Y),Z;if(B===null){for(;!N.done;Y++,N=C.next())N=I(h,N.value,A),N!==null&&(g=e(N,g,Y),k===null?Z=N:k.sibling=N,k=N);return J&&Za(h,Y),Z}for(B=l(h,B);!N.done;Y++,N=C.next())N=y(B,h,Y,N.value,A),N!==null&&(s&&N.alternate!==null&&B.delete(N.key===null?Y:N.key),g=e(N,g,Y),k===null?Z=N:k.sibling=N,k=N);return s&&B.forEach(function(yn){return a(h,yn)}),J&&Za(h,Y),Z}function G(h,g,C,A){if(typeof C=="object"&&C!==null&&C.type===za&&C.key===null&&(C=C.props.children),typeof C=="object"&&C!==null){switch(C.$$typeof){case Cl:s:{for(var Z=C.key,k=g;k!==null;){if(k.key===Z){if(Z=C.type,Z===za){if(k.tag===7){n(h,k.sibling),g=p(k,C.props.children),g.return=h,h=g;break s}}else if(k.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===na&&Pt(Z)===k.type){n(h,k.sibling),g=p(k,C.props),g.ref=Wn(h,k,C),g.return=h,h=g;break s}n(h,k);break}else a(h,k);k=k.sibling}C.type===za?(g=Ya(C.props.children,h.mode,A,C.key),g.return=h,h=g):(A=El(C.type,C.key,C.props,null,h.mode,A),A.ref=Wn(h,g,C),A.return=h,h=A)}return c(h);case Ja:s:{for(k=C.key;g!==null;){if(g.key===k)if(g.tag===4&&g.stateNode.containerInfo===C.containerInfo&&g.stateNode.implementation===C.implementation){n(h,g.sibling),g=p(g,C.children||[]),g.return=h,h=g;break s}else{n(h,g);break}else a(h,g);g=g.sibling}g=ie(C,h.mode,A),g.return=h,h=g}return c(h);case na:return k=C._init,G(h,g,k(C._payload),A)}if(Vn(C))return m(h,g,C,A);if(mn(C))return b(h,g,C,A);Gl(h,C)}return typeof C=="string"&&C!==""||typeof C=="number"?(C=""+C,g!==null&&g.tag===6?(n(h,g.sibling),g=p(g,C),g.return=h,h=g):(n(h,g),g=re(C,h.mode,A),g.return=h,h=g),c(h)):n(h,g)}return G}var on=ni(!0),li=ni(!1),il={},Es=ma(il),$n=ma(il),qn=ma(il);function fa(s){if(s===il)throw Error(w(174));return s}function Mc(s,a){switch(K(qn,a),K($n,s),K(Es,il),s=a.nodeType,s){case 9:case 11:a=(a=a.documentElement)?a.namespaceURI:Ze(null,"");break;default:s=s===8?a.parentNode:a,a=s.namespaceURI||null,s=s.tagName,a=Ze(a,s)}M(Es),K(Es,a)}function rn(){M(Es),M($n),M(qn)}function pi(s){fa(qn.current);var a=fa(Es.current),n=Ze(a,s.type);a!==n&&(K($n,s),K(Es,n))}function xc(s){$n.current===s&&(M(Es),M($n))}var z=ma(0);function cp(s){for(var a=s;a!==null;){if(a.tag===13){var n=a.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return a}else if(a.tag===19&&a.memoizedProps.revealOrder!==void 0){if(a.flags&128)return a}else if(a.child!==null){a.child.return=a,a=a.child;continue}if(a===s)break;for(;a.sibling===null;){if(a.return===null||a.return===s)return null;a=a.return}a.sibling.return=a.return,a=a.sibling}return null}var le=[];function Jc(){for(var s=0;sn?n:4,s(!0);var l=pe.transition;pe.transition={};try{s(!1),a()}finally{F=n,pe.transition=l}}function mi(){return Ys().memoizedState}function Cd(s,a,n){var l=Ca(s);if(n={lane:l,action:n,hasEagerState:!1,eagerState:null,next:null},bi(s))wi(a,n);else if(n=$r(s,a,n,l),n!==null){var p=is();Ks(n,s,l,p),ki(n,a,l)}}function jd(s,a,n){var l=Ca(s),p={lane:l,action:n,hasEagerState:!1,eagerState:null,next:null};if(bi(s))wi(a,p);else{var e=s.alternate;if(s.lanes===0&&(e===null||e.lanes===0)&&(e=a.lastRenderedReducer,e!==null))try{var c=a.lastRenderedState,t=e(c,n);if(p.hasEagerState=!0,p.eagerState=t,Ss(t,c)){var o=a.interleaved;o===null?(p.next=p,Kc(a)):(p.next=o.next,o.next=p),a.interleaved=p;return}}catch{}finally{}n=$r(s,a,p,l),n!==null&&(p=is(),Ks(n,s,l,p),ki(n,a,l))}}function bi(s){var a=s.alternate;return s===E||a!==null&&a===E}function wi(s,a){Kn=tp=!0;var n=s.pending;n===null?a.next=a:(a.next=n.next,n.next=a),s.pending=a}function ki(s,a,n){if(n&4194240){var l=a.lanes;l&=s.pendingLanes,n|=l,a.lanes=n,kc(s,n)}}var op={readContext:Vs,useCallback:es,useContext:es,useEffect:es,useImperativeHandle:es,useInsertionEffect:es,useLayoutEffect:es,useMemo:es,useReducer:es,useRef:es,useState:es,useDebugValue:es,useDeferredValue:es,useTransition:es,useMutableSource:es,useSyncExternalStore:es,useId:es,unstable_isNewReconciler:!1},ud={readContext:Vs,useCallback:function(s,a){return xs().memoizedState=[s,a===void 0?null:a],s},useContext:Vs,useEffect:qt,useImperativeHandle:function(s,a,n){return n=n!=null?n.concat([s]):null,Ml(4194308,4,Ci.bind(null,a,s),n)},useLayoutEffect:function(s,a){return Ml(4194308,4,s,a)},useInsertionEffect:function(s,a){return Ml(4,2,s,a)},useMemo:function(s,a){var n=xs();return a=a===void 0?null:a,s=s(),n.memoizedState=[s,a],s},useReducer:function(s,a,n){var l=xs();return a=n!==void 0?n(a):a,l.memoizedState=l.baseState=a,s={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:s,lastRenderedState:a},l.queue=s,s=s.dispatch=Cd.bind(null,E,s),[l.memoizedState,s]},useRef:function(s){var a=xs();return s={current:s},a.memoizedState=s},useState:$t,useDebugValue:Qc,useDeferredValue:function(s){return xs().memoizedState=s},useTransition:function(){var s=$t(!1),a=s[0];return s=Id.bind(null,s[1]),xs().memoizedState=s,[a,s]},useMutableSource:function(){},useSyncExternalStore:function(s,a,n){var l=E,p=xs();if(J){if(n===void 0)throw Error(w(407));n=n()}else{if(n=a(),ss===null)throw Error(w(349));Na&30||ti(l,a,n)}p.memoizedState=n;var e={value:n,getSnapshot:a};return p.queue=e,qt(ri.bind(null,l,e,s),[s]),l.flags|=2048,nl(9,oi.bind(null,l,e,n,a),void 0,null),n},useId:function(){var s=xs(),a=ss.identifierPrefix;if(J){var n=Ds,l=Qs;n=(l&~(1<<32-Fs(l)-1)).toString(32)+n,a=":"+a+"R"+n,n=sl++,0")&&(o=o.replace("",s.displayName)),o}while(1<=c&&0<=t);break}}}finally{Jp=!1,Error.prepareStackTrace=n}return(s=s?s.displayName||s.name:"")?Vn(s):""}function Dg(s){switch(s.tag){case 5:return Vn(s.type);case 16:return Vn("Lazy");case 13:return Vn("Suspense");case 19:return Vn("SuspenseList");case 0:case 2:case 15:return s=zp(s.type,!1),s;case 11:return s=zp(s.type.render,!1),s;case 1:return s=zp(s.type,!0),s;default:return""}}function ye(s){if(s==null)return null;if(typeof s=="function")return s.displayName||s.name||null;if(typeof s=="string")return s;switch(s){case za:return"Fragment";case Ja:return"Portal";case je:return"Profiler";case Ac:return"StrictMode";case ue:return"Suspense";case Ae:return"SuspenseList"}if(typeof s=="object")switch(s.$$typeof){case ar:return(s.displayName||"Context")+".Consumer";case sr:return(s._context.displayName||"Context")+".Provider";case yc:var a=s.render;return s=s.displayName,s||(s=a.displayName||a.name||"",s=s!==""?"ForwardRef("+s+")":"ForwardRef"),s;case mc:return a=s.displayName||null,a!==null?a:ye(s.type)||"Memo";case na:a=s._payload,s=s._init;try{return ye(s(a))}catch{}}return null}function Lg(s){var a=s.type;switch(s.tag){case 24:return"Cache";case 9:return(a.displayName||"Context")+".Consumer";case 10:return(a._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return s=a.render,s=s.displayName||s.name||"",a.displayName||(s!==""?"ForwardRef("+s+")":"ForwardRef");case 7:return"Fragment";case 5:return a;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ye(a);case 8:return a===Ac?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a}return null}function ua(s){switch(typeof s){case"boolean":case"number":case"string":case"undefined":return s;case"object":return s;default:return""}}function lr(s){var a=s.type;return(s=s.nodeName)&&s.toLowerCase()==="input"&&(a==="checkbox"||a==="radio")}function _g(s){var a=lr(s)?"checked":"value",n=Object.getOwnPropertyDescriptor(s.constructor.prototype,a),l=""+s[a];if(!s.hasOwnProperty(a)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var p=n.get,e=n.set;return Object.defineProperty(s,a,{configurable:!0,get:function(){return p.call(this)},set:function(c){l=""+c,e.call(this,c)}}),Object.defineProperty(s,a,{enumerable:n.enumerable}),{getValue:function(){return l},setValue:function(c){l=""+c},stopTracking:function(){s._valueTracker=null,delete s[a]}}}}function jl(s){s._valueTracker||(s._valueTracker=_g(s))}function pr(s){if(!s)return!1;var a=s._valueTracker;if(!a)return!0;var n=a.getValue(),l="";return s&&(l=lr(s)?s.checked?"true":"false":s.value),s=l,s!==n?(a.setValue(s),!0):!1}function Ul(s){if(s=s||(typeof document<"u"?document:void 0),typeof s>"u")return null;try{return s.activeElement||s.body}catch{return s.body}}function me(s,a){var n=a.checked;return U({},a,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??s._wrapperState.initialChecked})}function jt(s,a){var n=a.defaultValue==null?"":a.defaultValue,l=a.checked!=null?a.checked:a.defaultChecked;n=ua(a.value!=null?a.value:n),s._wrapperState={initialChecked:l,initialValue:n,controlled:a.type==="checkbox"||a.type==="radio"?a.checked!=null:a.value!=null}}function er(s,a){a=a.checked,a!=null&&uc(s,"checked",a,!1)}function be(s,a){er(s,a);var n=ua(a.value),l=a.type;if(n!=null)l==="number"?(n===0&&s.value===""||s.value!=n)&&(s.value=""+n):s.value!==""+n&&(s.value=""+n);else if(l==="submit"||l==="reset"){s.removeAttribute("value");return}a.hasOwnProperty("value")?we(s,a.type,n):a.hasOwnProperty("defaultValue")&&we(s,a.type,ua(a.defaultValue)),a.checked==null&&a.defaultChecked!=null&&(s.defaultChecked=!!a.defaultChecked)}function ut(s,a,n){if(a.hasOwnProperty("value")||a.hasOwnProperty("defaultValue")){var l=a.type;if(!(l!=="submit"&&l!=="reset"||a.value!==void 0&&a.value!==null))return;a=""+s._wrapperState.initialValue,n||a===s.value||(s.value=a),s.defaultValue=a}n=s.name,n!==""&&(s.name=""),s.defaultChecked=!!s._wrapperState.initialChecked,n!==""&&(s.name=n)}function we(s,a,n){(a!=="number"||Ul(s.ownerDocument)!==s)&&(n==null?s.defaultValue=""+s._wrapperState.initialValue:s.defaultValue!==""+n&&(s.defaultValue=""+n))}var fn=Array.isArray;function qa(s,a,n,l){if(s=s.options,a){a={};for(var p=0;p"+a.valueOf().toString()+"",a=ul.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;a.firstChild;)s.appendChild(a.firstChild)}});function zn(s,a){if(a){var n=s.firstChild;if(n&&n===s.lastChild&&n.nodeType===3){n.nodeValue=a;return}}s.textContent=a}var Xn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Og=["Webkit","ms","Moz","O"];Object.keys(Xn).forEach(function(s){Og.forEach(function(a){a=a+s.charAt(0).toUpperCase()+s.substring(1),Xn[a]=Xn[s]})});function rr(s,a,n){return a==null||typeof a=="boolean"||a===""?"":n||typeof a!="number"||a===0||Xn.hasOwnProperty(s)&&Xn[s]?(""+a).trim():a+"px"}function ir(s,a){s=s.style;for(var n in a)if(a.hasOwnProperty(n)){var l=n.indexOf("--")===0,p=rr(n,a[n],l);n==="float"&&(n="cssFloat"),l?s.setProperty(n,p):s[n]=p}}var Pg=U({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function We(s,a){if(a){if(Pg[s]&&(a.children!=null||a.dangerouslySetInnerHTML!=null))throw Error(w(137,s));if(a.dangerouslySetInnerHTML!=null){if(a.children!=null)throw Error(w(60));if(typeof a.dangerouslySetInnerHTML!="object"||!("__html"in a.dangerouslySetInnerHTML))throw Error(w(61))}if(a.style!=null&&typeof a.style!="object")throw Error(w(62))}}function Ge(s,a){if(s.indexOf("-")===-1)return typeof a.is=="string";switch(s){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Be=null;function bc(s){return s=s.target||s.srcElement||window,s.correspondingUseElement&&(s=s.correspondingUseElement),s.nodeType===3?s.parentNode:s}var Ve=null,sn=null,an=null;function mt(s){if(s=rl(s)){if(typeof Ve!="function")throw Error(w(280));var a=s.stateNode;a&&(a=bp(a),Ve(s.stateNode,s.type,a))}}function gr(s){sn?an?an.push(s):an=[s]:sn=s}function hr(){if(sn){var s=sn,a=an;if(an=sn=null,mt(s),a)for(s=0;s>>=0,s===0?32:31-(oh(s)/rh|0)|0}var Al=64,yl=4194304;function Yn(s){switch(s&-s){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return s&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return s&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return s}}function Ll(s,a){var n=s.pendingLanes;if(n===0)return 0;var l=0,p=s.suspendedLanes,e=s.pingedLanes,c=n&268435455;if(c!==0){var t=c&~p;t!==0?l=Yn(t):(e&=c,e!==0&&(l=Yn(e)))}else c=n&~p,c!==0?l=Yn(c):e!==0&&(l=Yn(e));if(l===0)return 0;if(a!==0&&a!==l&&!(a&p)&&(p=l&-l,e=a&-a,p>=e||p===16&&(e&4194240)!==0))return a;if(l&4&&(l|=n&16),a=s.entangledLanes,a!==0)for(s=s.entanglements,a&=l;0n;n++)a.push(s);return a}function tl(s,a,n){s.pendingLanes|=a,a!==536870912&&(s.suspendedLanes=0,s.pingedLanes=0),s=s.eventTimes,a=31-Fs(a),s[a]=n}function dh(s,a){var n=s.pendingLanes&~a;s.pendingLanes=a,s.suspendedLanes=0,s.pingedLanes=0,s.expiredLanes&=a,s.mutableReadLanes&=a,s.entangledLanes&=a,a=s.entanglements;var l=s.eventTimes;for(s=s.expirationTimes;0=Nn),ft=" ",Yt=!1;function Xr(s,a){switch(s){case"keyup":return Jh.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function vr(s){return s=s.detail,typeof s=="object"&&"data"in s?s.data:null}var Ea=!1;function Eh(s,a){switch(s){case"compositionend":return vr(a);case"keypress":return a.which!==32?null:(Yt=!0,ft);case"textInput":return s=a.data,s===ft&&Yt?null:s;default:return null}}function Uh(s,a){if(Ea)return s==="compositionend"||!fc&&Xr(s,a)?(s=Yr(),Hl=Gc=ca=null,Ea=!1,s):null;switch(s){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1=a)return{node:n,offset:a-s};s=l}s:{for(;n;){if(n.nextSibling){n=n.nextSibling;break s}n=n.parentNode}n=void 0}n=Nt(n)}}function Kr(s,a){return s&&a?s===a?!0:s&&s.nodeType===3?!1:a&&a.nodeType===3?Kr(s,a.parentNode):"contains"in s?s.contains(a):s.compareDocumentPosition?!!(s.compareDocumentPosition(a)&16):!1:!1}function Sr(){for(var s=window,a=Ul();a instanceof s.HTMLIFrameElement;){try{var n=typeof a.contentWindow.location.href=="string"}catch{n=!1}if(n)s=a.contentWindow;else break;a=Ul(s.document)}return a}function Yc(s){var a=s&&s.nodeName&&s.nodeName.toLowerCase();return a&&(a==="input"&&(s.type==="text"||s.type==="search"||s.type==="tel"||s.type==="url"||s.type==="password")||a==="textarea"||s.contentEditable==="true")}function qh(s){var a=Sr(),n=s.focusedElem,l=s.selectionRange;if(a!==n&&n&&n.ownerDocument&&Kr(n.ownerDocument.documentElement,n)){if(l!==null&&Yc(n)){if(a=l.start,s=l.end,s===void 0&&(s=a),"selectionStart"in n)n.selectionStart=a,n.selectionEnd=Math.min(s,n.value.length);else if(s=(a=n.ownerDocument||document)&&a.defaultView||window,s.getSelection){s=s.getSelection();var p=n.textContent.length,e=Math.min(l.start,p);l=l.end===void 0?e:Math.min(l.end,p),!s.extend&&e>l&&(p=l,l=e,e=p),p=Ht(n,e);var c=Ht(n,l);p&&c&&(s.rangeCount!==1||s.anchorNode!==p.node||s.anchorOffset!==p.offset||s.focusNode!==c.node||s.focusOffset!==c.offset)&&(a=a.createRange(),a.setStart(p.node,p.offset),s.removeAllRanges(),e>l?(s.addRange(a),s.extend(c.node,c.offset)):(a.setEnd(c.node,c.offset),s.addRange(a)))}}for(a=[],s=n;s=s.parentNode;)s.nodeType===1&&a.push({element:s,left:s.scrollLeft,top:s.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Ua=null,Ne=null,Fn=null,He=!1;function Ft(s,a,n){var l=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;He||Ua==null||Ua!==Ul(l)||(l=Ua,"selectionStart"in l&&Yc(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focusNode:l.focusNode,focusOffset:l.focusOffset}),Fn&&Ln(Fn,l)||(Fn=l,l=Pl(Ne,"onSelect"),0Da||(s.current=Je[Da],Je[Da]=null,Da--)}function K(s,a){Da++,Je[Da]=s.current,s.current=a}var Aa={},os=ma(Aa),js=ma(!1),Xa=Aa;function cn(s,a){var n=s.type.contextTypes;if(!n)return Aa;var l=s.stateNode;if(l&&l.__reactInternalMemoizedUnmaskedChildContext===a)return l.__reactInternalMemoizedMaskedChildContext;var p={},e;for(e in n)p[e]=a[e];return l&&(s=s.stateNode,s.__reactInternalMemoizedUnmaskedChildContext=a,s.__reactInternalMemoizedMaskedChildContext=p),p}function us(s){return s=s.childContextTypes,s!=null}function ql(){M(js),M(os)}function Et(s,a,n){if(os.current!==Aa)throw Error(w(168));K(os,a),K(js,n)}function Dr(s,a,n){var l=s.stateNode;if(a=a.childContextTypes,typeof l.getChildContext!="function")return n;l=l.getChildContext();for(var p in l)if(!(p in a))throw Error(w(108,Lg(s)||"Unknown",p));return U({},n,l)}function sp(s){return s=(s=s.stateNode)&&s.__reactInternalMemoizedMergedChildContext||Aa,Xa=os.current,K(os,s),K(js,js.current),!0}function Ut(s,a,n){var l=s.stateNode;if(!l)throw Error(w(169));n?(s=Dr(s,a,Xa),l.__reactInternalMemoizedMergedChildContext=s,M(js),M(os),K(os,s)):M(js),K(js,n)}var Ts=null,wp=!1,ne=!1;function Lr(s){Ts===null?Ts=[s]:Ts.push(s)}function gd(s){wp=!0,Lr(s)}function ba(){if(!ne&&Ts!==null){ne=!0;var s=0,a=F;try{var n=Ts;for(F=1;s>=c,p-=c,Qs=1<<32-Fs(a)+p|n<Y?(x=B,B=null):x=B.sibling;var N=j(h,B,C[Y],y);if(N===null){B===null&&(B=x);break}s&&B&&N.alternate===null&&a(h,B),g=e(N,g,Y),k===null?Z=N:k.sibling=N,k=N,B=x}if(Y===C.length)return n(h,B),J&&Za(h,Y),Z;if(B===null){for(;YY?(x=B,B=null):x=B.sibling;var Rs=j(h,B,N.value,y);if(Rs===null){B===null&&(B=x);break}s&&B&&Rs.alternate===null&&a(h,B),g=e(Rs,g,Y),k===null?Z=Rs:k.sibling=Rs,k=Rs,B=x}if(N.done)return n(h,B),J&&Za(h,Y),Z;if(B===null){for(;!N.done;Y++,N=C.next())N=I(h,N.value,y),N!==null&&(g=e(N,g,Y),k===null?Z=N:k.sibling=N,k=N);return J&&Za(h,Y),Z}for(B=l(h,B);!N.done;Y++,N=C.next())N=A(B,h,Y,N.value,y),N!==null&&(s&&N.alternate!==null&&B.delete(N.key===null?Y:N.key),g=e(N,g,Y),k===null?Z=N:k.sibling=N,k=N);return s&&B.forEach(function(An){return a(h,An)}),J&&Za(h,Y),Z}function G(h,g,C,y){if(typeof C=="object"&&C!==null&&C.type===za&&C.key===null&&(C=C.props.children),typeof C=="object"&&C!==null){switch(C.$$typeof){case Cl:s:{for(var Z=C.key,k=g;k!==null;){if(k.key===Z){if(Z=C.type,Z===za){if(k.tag===7){n(h,k.sibling),g=p(k,C.props.children),g.return=h,h=g;break s}}else if(k.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===na&&Pt(Z)===k.type){n(h,k.sibling),g=p(k,C.props),g.ref=Wn(h,k,C),g.return=h,h=g;break s}n(h,k);break}else a(h,k);k=k.sibling}C.type===za?(g=Ya(C.props.children,h.mode,y,C.key),g.return=h,h=g):(y=El(C.type,C.key,C.props,null,h.mode,y),y.ref=Wn(h,g,C),y.return=h,h=y)}return c(h);case Ja:s:{for(k=C.key;g!==null;){if(g.key===k)if(g.tag===4&&g.stateNode.containerInfo===C.containerInfo&&g.stateNode.implementation===C.implementation){n(h,g.sibling),g=p(g,C.children||[]),g.return=h,h=g;break s}else{n(h,g);break}else a(h,g);g=g.sibling}g=ie(C,h.mode,y),g.return=h,h=g}return c(h);case na:return k=C._init,G(h,g,k(C._payload),y)}if(fn(C))return m(h,g,C,y);if(mn(C))return b(h,g,C,y);Gl(h,C)}return typeof C=="string"&&C!==""||typeof C=="number"?(C=""+C,g!==null&&g.tag===6?(n(h,g.sibling),g=p(g,C),g.return=h,h=g):(n(h,g),g=re(C,h.mode,y),g.return=h,h=g),c(h)):n(h,g)}return G}var on=ni(!0),li=ni(!1),il={},Es=ma(il),$n=ma(il),qn=ma(il);function Va(s){if(s===il)throw Error(w(174));return s}function Mc(s,a){switch(K(qn,a),K($n,s),K(Es,il),s=a.nodeType,s){case 9:case 11:a=(a=a.documentElement)?a.namespaceURI:Ze(null,"");break;default:s=s===8?a.parentNode:a,a=s.namespaceURI||null,s=s.tagName,a=Ze(a,s)}M(Es),K(Es,a)}function rn(){M(Es),M($n),M(qn)}function pi(s){Va(qn.current);var a=Va(Es.current),n=Ze(a,s.type);a!==n&&(K($n,s),K(Es,n))}function xc(s){$n.current===s&&(M(Es),M($n))}var z=ma(0);function cp(s){for(var a=s;a!==null;){if(a.tag===13){var n=a.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return a}else if(a.tag===19&&a.memoizedProps.revealOrder!==void 0){if(a.flags&128)return a}else if(a.child!==null){a.child.return=a,a=a.child;continue}if(a===s)break;for(;a.sibling===null;){if(a.return===null||a.return===s)return null;a=a.return}a.sibling.return=a.return,a=a.sibling}return null}var le=[];function Jc(){for(var s=0;sn?n:4,s(!0);var l=pe.transition;pe.transition={};try{s(!1),a()}finally{F=n,pe.transition=l}}function mi(){return Ys().memoizedState}function Cd(s,a,n){var l=Ca(s);if(n={lane:l,action:n,hasEagerState:!1,eagerState:null,next:null},bi(s))wi(a,n);else if(n=$r(s,a,n,l),n!==null){var p=is();Ks(n,s,l,p),ki(n,a,l)}}function jd(s,a,n){var l=Ca(s),p={lane:l,action:n,hasEagerState:!1,eagerState:null,next:null};if(bi(s))wi(a,p);else{var e=s.alternate;if(s.lanes===0&&(e===null||e.lanes===0)&&(e=a.lastRenderedReducer,e!==null))try{var c=a.lastRenderedState,t=e(c,n);if(p.hasEagerState=!0,p.eagerState=t,Ss(t,c)){var o=a.interleaved;o===null?(p.next=p,Kc(a)):(p.next=o.next,o.next=p),a.interleaved=p;return}}catch{}finally{}n=$r(s,a,p,l),n!==null&&(p=is(),Ks(n,s,l,p),ki(n,a,l))}}function bi(s){var a=s.alternate;return s===E||a!==null&&a===E}function wi(s,a){Kn=tp=!0;var n=s.pending;n===null?a.next=a:(a.next=n.next,n.next=a),s.pending=a}function ki(s,a,n){if(n&4194240){var l=a.lanes;l&=s.pendingLanes,n|=l,a.lanes=n,kc(s,n)}}var op={readContext:fs,useCallback:es,useContext:es,useEffect:es,useImperativeHandle:es,useInsertionEffect:es,useLayoutEffect:es,useMemo:es,useReducer:es,useRef:es,useState:es,useDebugValue:es,useDeferredValue:es,useTransition:es,useMutableSource:es,useSyncExternalStore:es,useId:es,unstable_isNewReconciler:!1},ud={readContext:fs,useCallback:function(s,a){return xs().memoizedState=[s,a===void 0?null:a],s},useContext:fs,useEffect:qt,useImperativeHandle:function(s,a,n){return n=n!=null?n.concat([s]):null,Ml(4194308,4,Ci.bind(null,a,s),n)},useLayoutEffect:function(s,a){return Ml(4194308,4,s,a)},useInsertionEffect:function(s,a){return Ml(4,2,s,a)},useMemo:function(s,a){var n=xs();return a=a===void 0?null:a,s=s(),n.memoizedState=[s,a],s},useReducer:function(s,a,n){var l=xs();return a=n!==void 0?n(a):a,l.memoizedState=l.baseState=a,s={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:s,lastRenderedState:a},l.queue=s,s=s.dispatch=Cd.bind(null,E,s),[l.memoizedState,s]},useRef:function(s){var a=xs();return s={current:s},a.memoizedState=s},useState:$t,useDebugValue:Qc,useDeferredValue:function(s){return xs().memoizedState=s},useTransition:function(){var s=$t(!1),a=s[0];return s=Id.bind(null,s[1]),xs().memoizedState=s,[a,s]},useMutableSource:function(){},useSyncExternalStore:function(s,a,n){var l=E,p=xs();if(J){if(n===void 0)throw Error(w(407));n=n()}else{if(n=a(),ss===null)throw Error(w(349));Na&30||ti(l,a,n)}p.memoizedState=n;var e={value:n,getSnapshot:a};return p.queue=e,qt(ri.bind(null,l,e,s),[s]),l.flags|=2048,nl(9,oi.bind(null,l,e,n,a),void 0,null),n},useId:function(){var s=xs(),a=ss.identifierPrefix;if(J){var n=Ds,l=Qs;n=(l&~(1<<32-Fs(l)-1)).toString(32)+n,a=":"+a+"R"+n,n=sl++,0<\/script>",s=s.removeChild(s.firstChild)):typeof l.is=="string"?s=c.createElement(n,{is:l.is}):(s=c.createElement(n),n==="select"&&(c=s,l.multiple?c.multiple=!0:l.size&&(c.size=l.size))):s=c.createElementNS(s,n),s[Js]=a,s[Pn]=l,vi(s,a,!1,!1),a.stateNode=s;s:{switch(c=Ge(n,l),n){case"dialog":S("cancel",s),S("close",s),p=l;break;case"iframe":case"object":case"embed":S("load",s),p=l;break;case"video":case"audio":for(p=0;phn&&(a.flags|=128,l=!0,Gn(e,!1),a.lanes=4194304)}else{if(!l)if(s=cp(c),s!==null){if(a.flags|=128,l=!0,n=s.updateQueue,n!==null&&(a.updateQueue=n,a.flags|=4),Gn(e,!0),e.tail===null&&e.tailMode==="hidden"&&!c.alternate&&!J)return cs(a),null}else 2*D()-e.renderingStartTime>hn&&n!==1073741824&&(a.flags|=128,l=!0,Gn(e,!1),a.lanes=4194304);e.isBackwards?(c.sibling=a.child,a.child=c):(n=e.last,n!==null?n.sibling=c:a.child=c,e.last=c)}return e.tail!==null?(a=e.tail,e.rendering=a,e.tail=a.sibling,e.renderingStartTime=D(),a.sibling=null,n=z.current,K(z,l?n&1|2:n&1),a):(cs(a),null);case 22:case 23:return $c(),l=a.memoizedState!==null,s!==null&&s.memoizedState!==null!==l&&(a.flags|=8192),l&&a.mode&1?As&1073741824&&(cs(a),a.subtreeFlags&6&&(a.flags|=8192)):cs(a),null;case 24:return null;case 25:return null}throw Error(w(156,a.tag))}function Wd(s,a){switch(vc(a),a.tag){case 1:return us(a.type)&&ql(),s=a.flags,s&65536?(a.flags=s&-65537|128,a):null;case 3:return rn(),M(js),M(os),Jc(),s=a.flags,s&65536&&!(s&128)?(a.flags=s&-65537|128,a):null;case 5:return xc(a),null;case 13:if(M(z),s=a.memoizedState,s!==null&&s.dehydrated!==null){if(a.alternate===null)throw Error(w(340));tn()}return s=a.flags,s&65536?(a.flags=s&-65537|128,a):null;case 19:return M(z),null;case 4:return rn(),null;case 10:return Fc(a.type._context),null;case 22:case 23:return $c(),null;case 24:return null;default:return null}}var fl=!1,ts=!1,Gd=typeof WeakSet=="function"?WeakSet:Set,f=null;function Pa(s,a){var n=s.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(l){T(s,a,l)}else n.current=null}function qe(s,a,n){try{n()}catch(l){T(s,a,l)}}var oo=!1;function Bd(s,a){if(Fe=_l,s=Sr(),Yc(s)){if("selectionStart"in s)var n={start:s.selectionStart,end:s.selectionEnd};else s:{n=(n=s.ownerDocument)&&n.defaultView||window;var l=n.getSelection&&n.getSelection();if(l&&l.rangeCount!==0){n=l.anchorNode;var p=l.anchorOffset,e=l.focusNode;l=l.focusOffset;try{n.nodeType,e.nodeType}catch{n=null;break s}var c=0,t=-1,o=-1,r=0,d=0,I=s,j=null;a:for(;;){for(var y;I!==n||p!==0&&I.nodeType!==3||(t=c+p),I!==e||l!==0&&I.nodeType!==3||(o=c+l),I.nodeType===3&&(c+=I.nodeValue.length),(y=I.firstChild)!==null;)j=I,I=y;for(;;){if(I===s)break a;if(j===n&&++r===p&&(t=c),j===e&&++d===l&&(o=c),(y=I.nextSibling)!==null)break;I=j,j=I.parentNode}I=y}n=t===-1||o===-1?null:{start:t,end:o}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ke={focusedElem:s,selectionRange:n},_l=!1,f=a;f!==null;)if(a=f,s=a.child,(a.subtreeFlags&1028)!==0&&s!==null)s.return=a,f=s;else for(;f!==null;){a=f;try{var m=a.alternate;if(a.flags&1024)switch(a.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var b=m.memoizedProps,G=m.memoizedState,h=a.stateNode,g=h.getSnapshotBeforeUpdate(a.elementType===a.type?b:Xs(a.type,b),G);h.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var C=a.stateNode.containerInfo;C.nodeType===1?C.textContent="":C.nodeType===9&&C.documentElement&&C.removeChild(C.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(w(163))}}catch(A){T(a,a.return,A)}if(s=a.sibling,s!==null){s.return=a.return,f=s;break}f=a.return}return m=oo,oo=!1,m}function Sn(s,a,n){var l=a.updateQueue;if(l=l!==null?l.lastEffect:null,l!==null){var p=l=l.next;do{if((p.tag&s)===s){var e=p.destroy;p.destroy=void 0,e!==void 0&&qe(a,n,e)}p=p.next}while(p!==l)}}function Wp(s,a){if(a=a.updateQueue,a=a!==null?a.lastEffect:null,a!==null){var n=a=a.next;do{if((n.tag&s)===s){var l=n.create;n.destroy=l()}n=n.next}while(n!==a)}}function sc(s){var a=s.ref;if(a!==null){var n=s.stateNode;switch(s.tag){case 5:s=n;break;default:s=n}typeof a=="function"?a(s):a.current=s}}function Hi(s){var a=s.alternate;a!==null&&(s.alternate=null,Hi(a)),s.child=null,s.deletions=null,s.sibling=null,s.tag===5&&(a=s.stateNode,a!==null&&(delete a[Js],delete a[Pn],delete a[xe],delete a[rd],delete a[id])),s.stateNode=null,s.return=null,s.dependencies=null,s.memoizedProps=null,s.memoizedState=null,s.pendingProps=null,s.stateNode=null,s.updateQueue=null}function Fi(s){return s.tag===5||s.tag===3||s.tag===4}function ro(s){s:for(;;){for(;s.sibling===null;){if(s.return===null||Fi(s.return))return null;s=s.return}for(s.sibling.return=s.return,s=s.sibling;s.tag!==5&&s.tag!==6&&s.tag!==18;){if(s.flags&2||s.child===null||s.tag===4)continue s;s.child.return=s,s=s.child}if(!(s.flags&2))return s.stateNode}}function ac(s,a,n){var l=s.tag;if(l===5||l===6)s=s.stateNode,a?n.nodeType===8?n.parentNode.insertBefore(s,a):n.insertBefore(s,a):(n.nodeType===8?(a=n.parentNode,a.insertBefore(s,n)):(a=n,a.appendChild(s)),n=n._reactRootContainer,n!=null||a.onclick!==null||(a.onclick=$l));else if(l!==4&&(s=s.child,s!==null))for(ac(s,a,n),s=s.sibling;s!==null;)ac(s,a,n),s=s.sibling}function nc(s,a,n){var l=s.tag;if(l===5||l===6)s=s.stateNode,a?n.insertBefore(s,a):n.appendChild(s);else if(l!==4&&(s=s.child,s!==null))for(nc(s,a,n),s=s.sibling;s!==null;)nc(s,a,n),s=s.sibling}var ns=null,Ns=!1;function sa(s,a,n){for(n=n.child;n!==null;)Ki(s,a,n),n=n.sibling}function Ki(s,a,n){if(zs&&typeof zs.onCommitFiberUnmount=="function")try{zs.onCommitFiberUnmount(up,n)}catch{}switch(n.tag){case 5:ts||Pa(n,a);case 6:var l=ns,p=Ns;ns=null,sa(s,a,n),ns=l,Ns=p,ns!==null&&(Ns?(s=ns,n=n.stateNode,s.nodeType===8?s.parentNode.removeChild(n):s.removeChild(n)):ns.removeChild(n.stateNode));break;case 18:ns!==null&&(Ns?(s=ns,n=n.stateNode,s.nodeType===8?ae(s.parentNode,n):s.nodeType===1&&ae(s,n),Qn(s)):ae(ns,n.stateNode));break;case 4:l=ns,p=Ns,ns=n.stateNode.containerInfo,Ns=!0,sa(s,a,n),ns=l,Ns=p;break;case 0:case 11:case 14:case 15:if(!ts&&(l=n.updateQueue,l!==null&&(l=l.lastEffect,l!==null))){p=l=l.next;do{var e=p,c=e.destroy;e=e.tag,c!==void 0&&(e&2||e&4)&&qe(n,a,c),p=p.next}while(p!==l)}sa(s,a,n);break;case 1:if(!ts&&(Pa(n,a),l=n.stateNode,typeof l.componentWillUnmount=="function"))try{l.props=n.memoizedProps,l.state=n.memoizedState,l.componentWillUnmount()}catch(t){T(n,a,t)}sa(s,a,n);break;case 21:sa(s,a,n);break;case 22:n.mode&1?(ts=(l=ts)||n.memoizedState!==null,sa(s,a,n),ts=l):sa(s,a,n);break;default:sa(s,a,n)}}function io(s){var a=s.updateQueue;if(a!==null){s.updateQueue=null;var n=s.stateNode;n===null&&(n=s.stateNode=new Gd),a.forEach(function(l){var p=Fd.bind(null,s,l);n.has(l)||(n.add(l),l.then(p,p))})}}function vs(s,a){var n=a.deletions;if(n!==null)for(var l=0;lp&&(p=c),l&=~e}if(l=p,l=D()-l,l=(120>l?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*Vd(l/1960))-l,10s?16:s,ta===null)var l=!1;else{if(s=ta,ta=null,gp=0,H&6)throw Error(w(331));var p=H;for(H|=4,f=s.current;f!==null;){var e=f,c=e.child;if(f.flags&16){var t=e.deletions;if(t!==null){for(var o=0;oD()-Oc?Va(s,0):_c|=n),ys(s,a)}function Ti(s,a){a===0&&(s.mode&1?(a=Al,Al<<=1,!(Al&130023424)&&(Al=4194304)):a=1);var n=is();s=Ps(s,a),s!==null&&(tl(s,a,n),ys(s,n))}function Hd(s){var a=s.memoizedState,n=0;a!==null&&(n=a.retryLane),Ti(s,n)}function Fd(s,a){var n=0;switch(s.tag){case 13:var l=s.stateNode,p=s.memoizedState;p!==null&&(n=p.retryLane);break;case 19:l=s.stateNode;break;default:throw Error(w(314))}l!==null&&l.delete(a),Ti(s,n)}var Qi;Qi=function(s,a,n){if(s!==null)if(s.memoizedProps!==a.pendingProps||js.current)Cs=!0;else{if(!(s.lanes&n)&&!(a.flags&128))return Cs=!1,kd(s,a,n);Cs=!!(s.flags&131072)}else Cs=!1,J&&a.flags&1048576&&_r(a,np,a.index);switch(a.lanes=0,a.tag){case 2:var l=a.type;xl(s,a),s=a.pendingProps;var p=cn(a,os.current);ln(a,n),p=Ec(null,a,l,s,p,n);var e=Uc();return a.flags|=1,typeof p=="object"&&p!==null&&typeof p.render=="function"&&p.$$typeof===void 0?(a.tag=1,a.memoizedState=null,a.updateQueue=null,us(l)?(e=!0,sp(a)):e=!1,a.memoizedState=p.state!==null&&p.state!==void 0?p.state:null,Sc(a),p.updater=kp,a.stateNode=p,p._reactInternals=a,Qe(a,l,s,n),a=_e(null,a,l,!0,e,n)):(a.tag=0,J&&e&&Rc(a),rs(null,a,p,n),a=a.child),a;case 16:l=a.elementType;s:{switch(xl(s,a),s=a.pendingProps,p=l._init,l=p(l._payload),a.type=l,p=a.tag=Sd(l),s=Xs(l,s),p){case 0:a=Le(null,a,l,s,n);break s;case 1:a=eo(null,a,l,s,n);break s;case 11:a=lo(null,a,l,s,n);break s;case 14:a=po(null,a,l,Xs(l.type,s),n);break s}throw Error(w(306,l,""))}return a;case 0:return l=a.type,p=a.pendingProps,p=a.elementType===l?p:Xs(l,p),Le(s,a,l,p,n);case 1:return l=a.type,p=a.pendingProps,p=a.elementType===l?p:Xs(l,p),eo(s,a,l,p,n);case 3:s:{if(Vi(a),s===null)throw Error(w(387));l=a.pendingProps,e=a.memoizedState,p=e.element,qr(s,a),ep(a,l,null,n);var c=a.memoizedState;if(l=c.element,e.isDehydrated)if(e={element:l,isDehydrated:!1,cache:c.cache,pendingSuspenseBoundaries:c.pendingSuspenseBoundaries,transitions:c.transitions},a.updateQueue.baseState=e,a.memoizedState=e,a.flags&256){p=gn(Error(w(423)),a),a=co(s,a,l,n,p);break s}else if(l!==p){p=gn(Error(w(424)),a),a=co(s,a,l,n,p);break s}else for(ms=ha(a.stateNode.containerInfo.firstChild),bs=a,J=!0,Hs=null,n=li(a,null,l,n),a.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(tn(),l===p){a=$s(s,a,n);break s}rs(s,a,l,n)}a=a.child}return a;case 5:return pi(a),s===null&&Ee(a),l=a.type,p=a.pendingProps,e=s!==null?s.memoizedProps:null,c=p.children,Se(l,p)?c=null:e!==null&&Se(l,e)&&(a.flags|=32),fi(s,a),rs(s,a,c,n),a.child;case 6:return s===null&&Ee(a),null;case 13:return Yi(s,a,n);case 4:return Mc(a,a.stateNode.containerInfo),l=a.pendingProps,s===null?a.child=on(a,null,l,n):rs(s,a,l,n),a.child;case 11:return l=a.type,p=a.pendingProps,p=a.elementType===l?p:Xs(l,p),lo(s,a,l,p,n);case 7:return rs(s,a,a.pendingProps,n),a.child;case 8:return rs(s,a,a.pendingProps.children,n),a.child;case 12:return rs(s,a,a.pendingProps.children,n),a.child;case 10:s:{if(l=a.type._context,p=a.pendingProps,e=a.memoizedProps,c=p.value,K(lp,l._currentValue),l._currentValue=c,e!==null)if(Ss(e.value,c)){if(e.children===p.children&&!js.current){a=$s(s,a,n);break s}}else for(e=a.child,e!==null&&(e.return=a);e!==null;){var t=e.dependencies;if(t!==null){c=e.child;for(var o=t.firstContext;o!==null;){if(o.context===l){if(e.tag===1){o=Ls(-1,n&-n),o.tag=2;var r=e.updateQueue;if(r!==null){r=r.shared;var d=r.pending;d===null?o.next=o:(o.next=d.next,d.next=o),r.pending=o}}e.lanes|=n,o=e.alternate,o!==null&&(o.lanes|=n),Ue(e.return,n,a),t.lanes|=n;break}o=o.next}}else if(e.tag===10)c=e.type===a.type?null:e.child;else if(e.tag===18){if(c=e.return,c===null)throw Error(w(341));c.lanes|=n,t=c.alternate,t!==null&&(t.lanes|=n),Ue(c,n,a),c=e.sibling}else c=e.child;if(c!==null)c.return=e;else for(c=e;c!==null;){if(c===a){c=null;break}if(e=c.sibling,e!==null){e.return=c.return,c=e;break}c=c.return}e=c}rs(s,a,p.children,n),a=a.child}return a;case 9:return p=a.type,l=a.pendingProps.children,ln(a,n),p=Vs(p),l=l(p),a.flags|=1,rs(s,a,l,n),a.child;case 14:return l=a.type,p=Xs(l,a.pendingProps),p=Xs(l.type,p),po(s,a,l,p,n);case 15:return Gi(s,a,a.type,a.pendingProps,n);case 17:return l=a.type,p=a.pendingProps,p=a.elementType===l?p:Xs(l,p),xl(s,a),a.tag=1,us(l)?(s=!0,sp(a)):s=!1,ln(a,n),ai(a,l,p),Qe(a,l,p,n),_e(null,a,l,!0,s,n);case 19:return Ri(s,a,n);case 22:return Bi(s,a,n)}throw Error(w(156,a.tag))};function Di(s,a){return Ar(s,a)}function Kd(s,a,n,l){this.tag=s,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=a,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=l,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Bs(s,a,n,l){return new Kd(s,a,n,l)}function st(s){return s=s.prototype,!(!s||!s.isReactComponent)}function Sd(s){if(typeof s=="function")return st(s)?1:0;if(s!=null){if(s=s.$$typeof,s===Ac)return 11;if(s===mc)return 14}return 2}function ja(s,a){var n=s.alternate;return n===null?(n=Bs(s.tag,a,s.key,s.mode),n.elementType=s.elementType,n.type=s.type,n.stateNode=s.stateNode,n.alternate=s,s.alternate=n):(n.pendingProps=a,n.type=s.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=s.flags&14680064,n.childLanes=s.childLanes,n.lanes=s.lanes,n.child=s.child,n.memoizedProps=s.memoizedProps,n.memoizedState=s.memoizedState,n.updateQueue=s.updateQueue,a=s.dependencies,n.dependencies=a===null?null:{lanes:a.lanes,firstContext:a.firstContext},n.sibling=s.sibling,n.index=s.index,n.ref=s.ref,n}function El(s,a,n,l,p,e){var c=2;if(l=s,typeof s=="function")st(s)&&(c=1);else if(typeof s=="string")c=5;else s:switch(s){case za:return Ya(n.children,p,e,a);case yc:c=8,p|=8;break;case je:return s=Bs(12,n,a,p|2),s.elementType=je,s.lanes=e,s;case ue:return s=Bs(13,n,a,p),s.elementType=ue,s.lanes=e,s;case ye:return s=Bs(19,n,a,p),s.elementType=ye,s.lanes=e,s;case nr:return Bp(n,p,e,a);default:if(typeof s=="object"&&s!==null)switch(s.$$typeof){case sr:c=10;break s;case ar:c=9;break s;case Ac:c=11;break s;case mc:c=14;break s;case na:c=16,l=null;break s}throw Error(w(130,s==null?s:typeof s,""))}return a=Bs(c,n,a,p),a.elementType=s,a.type=l,a.lanes=e,a}function Ya(s,a,n,l){return s=Bs(7,s,l,a),s.lanes=n,s}function Bp(s,a,n,l){return s=Bs(22,s,l,a),s.elementType=nr,s.lanes=n,s.stateNode={isHidden:!1},s}function re(s,a,n){return s=Bs(6,s,null,a),s.lanes=n,s}function ie(s,a,n){return a=Bs(4,s.children!==null?s.children:[],s.key,a),a.lanes=n,a.stateNode={containerInfo:s.containerInfo,pendingChildren:null,implementation:s.implementation},a}function Md(s,a,n,l,p){this.tag=a,this.containerInfo=s,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Up(0),this.expirationTimes=Up(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Up(0),this.identifierPrefix=l,this.onRecoverableError=p,this.mutableSourceEagerHydrationData=null}function at(s,a,n,l,p,e,c,t,o){return s=new Md(s,a,n,t,o),a===1?(a=1,e===!0&&(a|=8)):a=0,e=Bs(3,null,null,a),s.current=e,e.stateNode=s,e.memoizedState={element:l,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Sc(e),s}function xd(s,a,n){var l=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Pi)}catch(s){console.error(s)}}Pi(),_o.exports=ks;var Td=_o.exports,$i,qi,Ao=Td;qi=Ao.createRoot,$i=Ao.hydrateRoot;const sg={theme:"light",sideNav:!0,initialized:!1},ag=W.createContext({state:sg,init:s=>{},setTheme:s=>{},toggleSideNav:()=>{}});function et(){return W.useContext(ag)}function mo(s,a){try{localStorage.setItem(s,a)}catch(n){console.error(n)}}const bo=({children:s})=>{const[a,n]=W.useState(sg);function l(t){t=="dark"?(document.body.classList.remove("light"),document.body.classList.add("dark")):(document.body.classList.remove("dark"),document.body.classList.add("light"))}function p(t){try{const o=localStorage.getItem("theme")||"light";let r=t.width>=500;{const d=localStorage.getItem("sideNav");d&&(r=d=="true")}l(o),n(d=>({...d,theme:o,sideNav:r}))}catch(o){console.error(o)}n(o=>({...o,initialized:!0}))}function e(t){l(t),n({...a,theme:t}),mo("theme",t)}function c(){const t=!a.sideNav;n({...a,sideNav:t}),mo("sideNav",t)}return i.jsx(ag.Provider,{value:W.useMemo(()=>({state:a,init:p,setTheme:e,toggleSideNav:c}),[a]),children:s})};/** +`+e.stack}return{value:s,source:a,stack:p,digest:null}}function te(s,a,n){return{value:s,source:null,stack:n??null,digest:a??null}}function De(s,a){try{console.error(a.value)}catch(n){setTimeout(function(){throw n})}}var md=typeof WeakMap=="function"?WeakMap:Map;function Zi(s,a,n){n=Ls(-1,n),n.tag=3,n.payload={element:null};var l=a.value;return n.callback=function(){ip||(ip=!0,lc=l),De(s,a)},n}function Wi(s,a,n){n=Ls(-1,n),n.tag=3;var l=s.type.getDerivedStateFromError;if(typeof l=="function"){var p=a.value;n.payload=function(){return l(p)},n.callback=function(){De(s,a)}}var e=s.stateNode;return e!==null&&typeof e.componentDidCatch=="function"&&(n.callback=function(){De(s,a),typeof l!="function"&&(Ia===null?Ia=new Set([this]):Ia.add(this));var c=a.stack;this.componentDidCatch(a.value,{componentStack:c!==null?c:""})}),n}function so(s,a,n){var l=s.pingCache;if(l===null){l=s.pingCache=new md;var p=new Set;l.set(a,p)}else p=l.get(a),p===void 0&&(p=new Set,l.set(a,p));p.has(n)||(p.add(n),s=Nd.bind(null,s,a,n),a.then(s,s))}function ao(s){do{var a;if((a=s.tag===13)&&(a=s.memoizedState,a=a!==null?a.dehydrated!==null:!0),a)return s;s=s.return}while(s!==null);return null}function no(s,a,n,l,p){return s.mode&1?(s.flags|=65536,s.lanes=p,s):(s===a?s.flags|=65536:(s.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(a=Ls(-1,1),a.tag=2,da(n,a,1))),n.lanes|=1),s)}var bd=qs.ReactCurrentOwner,Cs=!1;function rs(s,a,n,l){a.child=s===null?li(a,null,n,l):on(a,s.child,n,l)}function lo(s,a,n,l,p){n=n.render;var e=a.ref;return ln(a,p),l=Ec(s,a,n,l,e,p),n=Uc(),s!==null&&!Cs?(a.updateQueue=s.updateQueue,a.flags&=-2053,s.lanes&=~p,$s(s,a,p)):(J&&n&&Rc(a),a.flags|=1,rs(s,a,l,p),a.child)}function po(s,a,n,l,p){if(s===null){var e=n.type;return typeof e=="function"&&!st(e)&&e.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(a.tag=15,a.type=e,Gi(s,a,e,l,p)):(s=El(n.type,null,l,a,a.mode,p),s.ref=a.ref,s.return=a,a.child=s)}if(e=s.child,!(s.lanes&p)){var c=e.memoizedProps;if(n=n.compare,n=n!==null?n:Ln,n(c,l)&&s.ref===a.ref)return $s(s,a,p)}return a.flags|=1,s=ja(e,l),s.ref=a.ref,s.return=a,a.child=s}function Gi(s,a,n,l,p){if(s!==null){var e=s.memoizedProps;if(Ln(e,l)&&s.ref===a.ref)if(Cs=!1,a.pendingProps=l=e,(s.lanes&p)!==0)s.flags&131072&&(Cs=!0);else return a.lanes=s.lanes,$s(s,a,p)}return Le(s,a,n,l,p)}function Bi(s,a,n){var l=a.pendingProps,p=l.children,e=s!==null?s.memoizedState:null;if(l.mode==="hidden")if(!(a.mode&1))a.memoizedState={baseLanes:0,cachePool:null,transitions:null},K($a,ys),ys|=n;else{if(!(n&1073741824))return s=e!==null?e.baseLanes|n:n,a.lanes=a.childLanes=1073741824,a.memoizedState={baseLanes:s,cachePool:null,transitions:null},a.updateQueue=null,K($a,ys),ys|=s,null;a.memoizedState={baseLanes:0,cachePool:null,transitions:null},l=e!==null?e.baseLanes:n,K($a,ys),ys|=l}else e!==null?(l=e.baseLanes|n,a.memoizedState=null):l=n,K($a,ys),ys|=l;return rs(s,a,p,n),a.child}function Vi(s,a){var n=a.ref;(s===null&&n!==null||s!==null&&s.ref!==n)&&(a.flags|=512,a.flags|=2097152)}function Le(s,a,n,l,p){var e=us(n)?Xa:os.current;return e=cn(a,e),ln(a,p),n=Ec(s,a,n,l,e,p),l=Uc(),s!==null&&!Cs?(a.updateQueue=s.updateQueue,a.flags&=-2053,s.lanes&=~p,$s(s,a,p)):(J&&l&&Rc(a),a.flags|=1,rs(s,a,n,p),a.child)}function eo(s,a,n,l,p){if(us(n)){var e=!0;sp(a)}else e=!1;if(ln(a,p),a.stateNode===null)xl(s,a),ai(a,n,l),Qe(a,n,l,p),l=!0;else if(s===null){var c=a.stateNode,t=a.memoizedProps;c.props=t;var o=c.context,r=n.contextType;typeof r=="object"&&r!==null?r=fs(r):(r=us(n)?Xa:os.current,r=cn(a,r));var d=n.getDerivedStateFromProps,I=typeof d=="function"||typeof c.getSnapshotBeforeUpdate=="function";I||typeof c.UNSAFE_componentWillReceiveProps!="function"&&typeof c.componentWillReceiveProps!="function"||(t!==l||o!==r)&&Ot(a,c,l,r),la=!1;var j=a.memoizedState;c.state=j,ep(a,l,c,p),o=a.memoizedState,t!==l||j!==o||js.current||la?(typeof d=="function"&&(Te(a,n,d,l),o=a.memoizedState),(t=la||_t(a,n,t,l,j,o,r))?(I||typeof c.UNSAFE_componentWillMount!="function"&&typeof c.componentWillMount!="function"||(typeof c.componentWillMount=="function"&&c.componentWillMount(),typeof c.UNSAFE_componentWillMount=="function"&&c.UNSAFE_componentWillMount()),typeof c.componentDidMount=="function"&&(a.flags|=4194308)):(typeof c.componentDidMount=="function"&&(a.flags|=4194308),a.memoizedProps=l,a.memoizedState=o),c.props=l,c.state=o,c.context=r,l=t):(typeof c.componentDidMount=="function"&&(a.flags|=4194308),l=!1)}else{c=a.stateNode,qr(s,a),t=a.memoizedProps,r=a.type===a.elementType?t:vs(a.type,t),c.props=r,I=a.pendingProps,j=c.context,o=n.contextType,typeof o=="object"&&o!==null?o=fs(o):(o=us(n)?Xa:os.current,o=cn(a,o));var A=n.getDerivedStateFromProps;(d=typeof A=="function"||typeof c.getSnapshotBeforeUpdate=="function")||typeof c.UNSAFE_componentWillReceiveProps!="function"&&typeof c.componentWillReceiveProps!="function"||(t!==I||j!==o)&&Ot(a,c,l,o),la=!1,j=a.memoizedState,c.state=j,ep(a,l,c,p);var m=a.memoizedState;t!==I||j!==m||js.current||la?(typeof A=="function"&&(Te(a,n,A,l),m=a.memoizedState),(r=la||_t(a,n,r,l,j,m,o)||!1)?(d||typeof c.UNSAFE_componentWillUpdate!="function"&&typeof c.componentWillUpdate!="function"||(typeof c.componentWillUpdate=="function"&&c.componentWillUpdate(l,m,o),typeof c.UNSAFE_componentWillUpdate=="function"&&c.UNSAFE_componentWillUpdate(l,m,o)),typeof c.componentDidUpdate=="function"&&(a.flags|=4),typeof c.getSnapshotBeforeUpdate=="function"&&(a.flags|=1024)):(typeof c.componentDidUpdate!="function"||t===s.memoizedProps&&j===s.memoizedState||(a.flags|=4),typeof c.getSnapshotBeforeUpdate!="function"||t===s.memoizedProps&&j===s.memoizedState||(a.flags|=1024),a.memoizedProps=l,a.memoizedState=m),c.props=l,c.state=m,c.context=o,l=r):(typeof c.componentDidUpdate!="function"||t===s.memoizedProps&&j===s.memoizedState||(a.flags|=4),typeof c.getSnapshotBeforeUpdate!="function"||t===s.memoizedProps&&j===s.memoizedState||(a.flags|=1024),l=!1)}return _e(s,a,n,l,e,p)}function _e(s,a,n,l,p,e){Vi(s,a);var c=(a.flags&128)!==0;if(!l&&!c)return p&&Ut(a,n,!1),$s(s,a,e);l=a.stateNode,bd.current=a;var t=c&&typeof n.getDerivedStateFromError!="function"?null:l.render();return a.flags|=1,s!==null&&c?(a.child=on(a,s.child,null,e),a.child=on(a,null,t,e)):rs(s,a,t,e),a.memoizedState=l.state,p&&Ut(a,n,!0),a.child}function fi(s){var a=s.stateNode;a.pendingContext?Et(s,a.pendingContext,a.pendingContext!==a.context):a.context&&Et(s,a.context,!1),Mc(s,a.containerInfo)}function co(s,a,n,l,p){return tn(),vc(p),a.flags|=256,rs(s,a,n,l),a.child}var Oe={dehydrated:null,treeContext:null,retryLane:0};function Pe(s){return{baseLanes:s,cachePool:null,transitions:null}}function Yi(s,a,n){var l=a.pendingProps,p=z.current,e=!1,c=(a.flags&128)!==0,t;if((t=c)||(t=s!==null&&s.memoizedState===null?!1:(p&2)!==0),t?(e=!0,a.flags&=-129):(s===null||s.memoizedState!==null)&&(p|=1),K(z,p&1),s===null)return Ee(a),s=a.memoizedState,s!==null&&(s=s.dehydrated,s!==null)?(a.mode&1?s.data==="$!"?a.lanes=8:a.lanes=1073741824:a.lanes=1,null):(c=l.children,s=l.fallback,e?(l=a.mode,e=a.child,c={mode:"hidden",children:c},!(l&1)&&e!==null?(e.childLanes=0,e.pendingProps=c):e=Bp(c,l,0,null),s=Ya(s,l,n,null),e.return=a,s.return=a,e.sibling=s,a.child=e,a.child.memoizedState=Pe(n),a.memoizedState=Oe,s):Dc(a,c));if(p=s.memoizedState,p!==null&&(t=p.dehydrated,t!==null))return wd(s,a,c,l,t,p,n);if(e){e=l.fallback,c=a.mode,p=s.child,t=p.sibling;var o={mode:"hidden",children:l.children};return!(c&1)&&a.child!==p?(l=a.child,l.childLanes=0,l.pendingProps=o,a.deletions=null):(l=ja(p,o),l.subtreeFlags=p.subtreeFlags&14680064),t!==null?e=ja(t,e):(e=Ya(e,c,n,null),e.flags|=2),e.return=a,l.return=a,l.sibling=e,a.child=l,l=e,e=a.child,c=s.child.memoizedState,c=c===null?Pe(n):{baseLanes:c.baseLanes|n,cachePool:null,transitions:c.transitions},e.memoizedState=c,e.childLanes=s.childLanes&~n,a.memoizedState=Oe,l}return e=s.child,s=e.sibling,l=ja(e,{mode:"visible",children:l.children}),!(a.mode&1)&&(l.lanes=n),l.return=a,l.sibling=null,s!==null&&(n=a.deletions,n===null?(a.deletions=[s],a.flags|=16):n.push(s)),a.child=l,a.memoizedState=null,l}function Dc(s,a){return a=Bp({mode:"visible",children:a},s.mode,0,null),a.return=s,s.child=a}function Bl(s,a,n,l){return l!==null&&vc(l),on(a,s.child,null,n),s=Dc(a,a.pendingProps.children),s.flags|=2,a.memoizedState=null,s}function wd(s,a,n,l,p,e,c){if(n)return a.flags&256?(a.flags&=-257,l=te(Error(w(422))),Bl(s,a,c,l)):a.memoizedState!==null?(a.child=s.child,a.flags|=128,null):(e=l.fallback,p=a.mode,l=Bp({mode:"visible",children:l.children},p,0,null),e=Ya(e,p,c,null),e.flags|=2,l.return=a,e.return=a,l.sibling=e,a.child=l,a.mode&1&&on(a,s.child,null,c),a.child.memoizedState=Pe(c),a.memoizedState=Oe,e);if(!(a.mode&1))return Bl(s,a,c,null);if(p.data==="$!"){if(l=p.nextSibling&&p.nextSibling.dataset,l)var t=l.dgst;return l=t,e=Error(w(419)),l=te(e,l,void 0),Bl(s,a,c,l)}if(t=(c&s.childLanes)!==0,Cs||t){if(l=ss,l!==null){switch(c&-c){case 4:p=2;break;case 16:p=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:p=32;break;case 536870912:p=268435456;break;default:p=0}p=p&(l.suspendedLanes|c)?0:p,p!==0&&p!==e.retryLane&&(e.retryLane=p,Ps(s,p),Ks(l,s,p,-1))}return qc(),l=te(Error(w(421))),Bl(s,a,c,l)}return p.data==="$?"?(a.flags|=128,a.child=s.child,a=Hd.bind(null,s),p._reactRetry=a,null):(s=e.treeContext,ms=ha(p.nextSibling),bs=a,J=!0,Hs=null,s!==null&&(Ws[Gs++]=Qs,Ws[Gs++]=Ds,Ws[Gs++]=va,Qs=s.id,Ds=s.overflow,va=a),a=Dc(a,l.children),a.flags|=4096,a)}function to(s,a,n){s.lanes|=a;var l=s.alternate;l!==null&&(l.lanes|=a),Ue(s.return,a,n)}function oe(s,a,n,l,p){var e=s.memoizedState;e===null?s.memoizedState={isBackwards:a,rendering:null,renderingStartTime:0,last:l,tail:n,tailMode:p}:(e.isBackwards=a,e.rendering=null,e.renderingStartTime=0,e.last=l,e.tail=n,e.tailMode=p)}function Ri(s,a,n){var l=a.pendingProps,p=l.revealOrder,e=l.tail;if(rs(s,a,l.children,n),l=z.current,l&2)l=l&1|2,a.flags|=128;else{if(s!==null&&s.flags&128)s:for(s=a.child;s!==null;){if(s.tag===13)s.memoizedState!==null&&to(s,n,a);else if(s.tag===19)to(s,n,a);else if(s.child!==null){s.child.return=s,s=s.child;continue}if(s===a)break s;for(;s.sibling===null;){if(s.return===null||s.return===a)break s;s=s.return}s.sibling.return=s.return,s=s.sibling}l&=1}if(K(z,l),!(a.mode&1))a.memoizedState=null;else switch(p){case"forwards":for(n=a.child,p=null;n!==null;)s=n.alternate,s!==null&&cp(s)===null&&(p=n),n=n.sibling;n=p,n===null?(p=a.child,a.child=null):(p=n.sibling,n.sibling=null),oe(a,!1,p,n,e);break;case"backwards":for(n=null,p=a.child,a.child=null;p!==null;){if(s=p.alternate,s!==null&&cp(s)===null){a.child=p;break}s=p.sibling,p.sibling=n,n=p,p=s}oe(a,!0,n,null,e);break;case"together":oe(a,!1,null,null,void 0);break;default:a.memoizedState=null}return a.child}function xl(s,a){!(a.mode&1)&&s!==null&&(s.alternate=null,a.alternate=null,a.flags|=2)}function $s(s,a,n){if(s!==null&&(a.dependencies=s.dependencies),Ha|=a.lanes,!(n&a.childLanes))return null;if(s!==null&&a.child!==s.child)throw Error(w(153));if(a.child!==null){for(s=a.child,n=ja(s,s.pendingProps),a.child=n,n.return=a;s.sibling!==null;)s=s.sibling,n=n.sibling=ja(s,s.pendingProps),n.return=a;n.sibling=null}return a.child}function kd(s,a,n){switch(a.tag){case 3:fi(a),tn();break;case 5:pi(a);break;case 1:us(a.type)&&sp(a);break;case 4:Mc(a,a.stateNode.containerInfo);break;case 10:var l=a.type._context,p=a.memoizedProps.value;K(lp,l._currentValue),l._currentValue=p;break;case 13:if(l=a.memoizedState,l!==null)return l.dehydrated!==null?(K(z,z.current&1),a.flags|=128,null):n&a.child.childLanes?Yi(s,a,n):(K(z,z.current&1),s=$s(s,a,n),s!==null?s.sibling:null);K(z,z.current&1);break;case 19:if(l=(n&a.childLanes)!==0,s.flags&128){if(l)return Ri(s,a,n);a.flags|=128}if(p=a.memoizedState,p!==null&&(p.rendering=null,p.tail=null,p.lastEffect=null),K(z,z.current),l)break;return null;case 22:case 23:return a.lanes=0,Bi(s,a,n)}return $s(s,a,n)}var Xi,$e,vi,Ni;Xi=function(s,a){for(var n=a.child;n!==null;){if(n.tag===5||n.tag===6)s.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===a)break;for(;n.sibling===null;){if(n.return===null||n.return===a)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};$e=function(){};vi=function(s,a,n,l){var p=s.memoizedProps;if(p!==l){s=a.stateNode,Va(Es.current);var e=null;switch(n){case"input":p=me(s,p),l=me(s,l),e=[];break;case"select":p=U({},p,{value:void 0}),l=U({},l,{value:void 0}),e=[];break;case"textarea":p=ke(s,p),l=ke(s,l),e=[];break;default:typeof p.onClick!="function"&&typeof l.onClick=="function"&&(s.onclick=$l)}We(n,l);var c;n=null;for(r in p)if(!l.hasOwnProperty(r)&&p.hasOwnProperty(r)&&p[r]!=null)if(r==="style"){var t=p[r];for(c in t)t.hasOwnProperty(c)&&(n||(n={}),n[c]="")}else r!=="dangerouslySetInnerHTML"&&r!=="children"&&r!=="suppressContentEditableWarning"&&r!=="suppressHydrationWarning"&&r!=="autoFocus"&&(Jn.hasOwnProperty(r)?e||(e=[]):(e=e||[]).push(r,null));for(r in l){var o=l[r];if(t=p!=null?p[r]:void 0,l.hasOwnProperty(r)&&o!==t&&(o!=null||t!=null))if(r==="style")if(t){for(c in t)!t.hasOwnProperty(c)||o&&o.hasOwnProperty(c)||(n||(n={}),n[c]="");for(c in o)o.hasOwnProperty(c)&&t[c]!==o[c]&&(n||(n={}),n[c]=o[c])}else n||(e||(e=[]),e.push(r,n)),n=o;else r==="dangerouslySetInnerHTML"?(o=o?o.__html:void 0,t=t?t.__html:void 0,o!=null&&t!==o&&(e=e||[]).push(r,o)):r==="children"?typeof o!="string"&&typeof o!="number"||(e=e||[]).push(r,""+o):r!=="suppressContentEditableWarning"&&r!=="suppressHydrationWarning"&&(Jn.hasOwnProperty(r)?(o!=null&&r==="onScroll"&&S("scroll",s),e||t===o||(e=[])):(e=e||[]).push(r,o))}n&&(e=e||[]).push("style",n);var r=e;(a.updateQueue=r)&&(a.flags|=4)}};Ni=function(s,a,n,l){n!==l&&(a.flags|=4)};function Gn(s,a){if(!J)switch(s.tailMode){case"hidden":a=s.tail;for(var n=null;a!==null;)a.alternate!==null&&(n=a),a=a.sibling;n===null?s.tail=null:n.sibling=null;break;case"collapsed":n=s.tail;for(var l=null;n!==null;)n.alternate!==null&&(l=n),n=n.sibling;l===null?a||s.tail===null?s.tail=null:s.tail.sibling=null:l.sibling=null}}function cs(s){var a=s.alternate!==null&&s.alternate.child===s.child,n=0,l=0;if(a)for(var p=s.child;p!==null;)n|=p.lanes|p.childLanes,l|=p.subtreeFlags&14680064,l|=p.flags&14680064,p.return=s,p=p.sibling;else for(p=s.child;p!==null;)n|=p.lanes|p.childLanes,l|=p.subtreeFlags,l|=p.flags,p.return=s,p=p.sibling;return s.subtreeFlags|=l,s.childLanes=n,a}function Zd(s,a,n){var l=a.pendingProps;switch(Xc(a),a.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return cs(a),null;case 1:return us(a.type)&&ql(),cs(a),null;case 3:return l=a.stateNode,rn(),M(js),M(os),Jc(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),(s===null||s.child===null)&&(Wl(a)?a.flags|=4:s===null||s.memoizedState.isDehydrated&&!(a.flags&256)||(a.flags|=1024,Hs!==null&&(cc(Hs),Hs=null))),$e(s,a),cs(a),null;case 5:xc(a);var p=Va(qn.current);if(n=a.type,s!==null&&a.stateNode!=null)vi(s,a,n,l,p),s.ref!==a.ref&&(a.flags|=512,a.flags|=2097152);else{if(!l){if(a.stateNode===null)throw Error(w(166));return cs(a),null}if(s=Va(Es.current),Wl(a)){l=a.stateNode,n=a.type;var e=a.memoizedProps;switch(l[Js]=a,l[Pn]=e,s=(a.mode&1)!==0,n){case"dialog":S("cancel",l),S("close",l);break;case"iframe":case"object":case"embed":S("load",l);break;case"video":case"audio":for(p=0;p<\/script>",s=s.removeChild(s.firstChild)):typeof l.is=="string"?s=c.createElement(n,{is:l.is}):(s=c.createElement(n),n==="select"&&(c=s,l.multiple?c.multiple=!0:l.size&&(c.size=l.size))):s=c.createElementNS(s,n),s[Js]=a,s[Pn]=l,Xi(s,a,!1,!1),a.stateNode=s;s:{switch(c=Ge(n,l),n){case"dialog":S("cancel",s),S("close",s),p=l;break;case"iframe":case"object":case"embed":S("load",s),p=l;break;case"video":case"audio":for(p=0;phn&&(a.flags|=128,l=!0,Gn(e,!1),a.lanes=4194304)}else{if(!l)if(s=cp(c),s!==null){if(a.flags|=128,l=!0,n=s.updateQueue,n!==null&&(a.updateQueue=n,a.flags|=4),Gn(e,!0),e.tail===null&&e.tailMode==="hidden"&&!c.alternate&&!J)return cs(a),null}else 2*D()-e.renderingStartTime>hn&&n!==1073741824&&(a.flags|=128,l=!0,Gn(e,!1),a.lanes=4194304);e.isBackwards?(c.sibling=a.child,a.child=c):(n=e.last,n!==null?n.sibling=c:a.child=c,e.last=c)}return e.tail!==null?(a=e.tail,e.rendering=a,e.tail=a.sibling,e.renderingStartTime=D(),a.sibling=null,n=z.current,K(z,l?n&1|2:n&1),a):(cs(a),null);case 22:case 23:return $c(),l=a.memoizedState!==null,s!==null&&s.memoizedState!==null!==l&&(a.flags|=8192),l&&a.mode&1?ys&1073741824&&(cs(a),a.subtreeFlags&6&&(a.flags|=8192)):cs(a),null;case 24:return null;case 25:return null}throw Error(w(156,a.tag))}function Wd(s,a){switch(Xc(a),a.tag){case 1:return us(a.type)&&ql(),s=a.flags,s&65536?(a.flags=s&-65537|128,a):null;case 3:return rn(),M(js),M(os),Jc(),s=a.flags,s&65536&&!(s&128)?(a.flags=s&-65537|128,a):null;case 5:return xc(a),null;case 13:if(M(z),s=a.memoizedState,s!==null&&s.dehydrated!==null){if(a.alternate===null)throw Error(w(340));tn()}return s=a.flags,s&65536?(a.flags=s&-65537|128,a):null;case 19:return M(z),null;case 4:return rn(),null;case 10:return Fc(a.type._context),null;case 22:case 23:return $c(),null;case 24:return null;default:return null}}var Vl=!1,ts=!1,Gd=typeof WeakSet=="function"?WeakSet:Set,V=null;function Pa(s,a){var n=s.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(l){T(s,a,l)}else n.current=null}function qe(s,a,n){try{n()}catch(l){T(s,a,l)}}var oo=!1;function Bd(s,a){if(Fe=_l,s=Sr(),Yc(s)){if("selectionStart"in s)var n={start:s.selectionStart,end:s.selectionEnd};else s:{n=(n=s.ownerDocument)&&n.defaultView||window;var l=n.getSelection&&n.getSelection();if(l&&l.rangeCount!==0){n=l.anchorNode;var p=l.anchorOffset,e=l.focusNode;l=l.focusOffset;try{n.nodeType,e.nodeType}catch{n=null;break s}var c=0,t=-1,o=-1,r=0,d=0,I=s,j=null;a:for(;;){for(var A;I!==n||p!==0&&I.nodeType!==3||(t=c+p),I!==e||l!==0&&I.nodeType!==3||(o=c+l),I.nodeType===3&&(c+=I.nodeValue.length),(A=I.firstChild)!==null;)j=I,I=A;for(;;){if(I===s)break a;if(j===n&&++r===p&&(t=c),j===e&&++d===l&&(o=c),(A=I.nextSibling)!==null)break;I=j,j=I.parentNode}I=A}n=t===-1||o===-1?null:{start:t,end:o}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ke={focusedElem:s,selectionRange:n},_l=!1,V=a;V!==null;)if(a=V,s=a.child,(a.subtreeFlags&1028)!==0&&s!==null)s.return=a,V=s;else for(;V!==null;){a=V;try{var m=a.alternate;if(a.flags&1024)switch(a.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var b=m.memoizedProps,G=m.memoizedState,h=a.stateNode,g=h.getSnapshotBeforeUpdate(a.elementType===a.type?b:vs(a.type,b),G);h.__reactInternalSnapshotBeforeUpdate=g}break;case 3:var C=a.stateNode.containerInfo;C.nodeType===1?C.textContent="":C.nodeType===9&&C.documentElement&&C.removeChild(C.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(w(163))}}catch(y){T(a,a.return,y)}if(s=a.sibling,s!==null){s.return=a.return,V=s;break}V=a.return}return m=oo,oo=!1,m}function Sn(s,a,n){var l=a.updateQueue;if(l=l!==null?l.lastEffect:null,l!==null){var p=l=l.next;do{if((p.tag&s)===s){var e=p.destroy;p.destroy=void 0,e!==void 0&&qe(a,n,e)}p=p.next}while(p!==l)}}function Wp(s,a){if(a=a.updateQueue,a=a!==null?a.lastEffect:null,a!==null){var n=a=a.next;do{if((n.tag&s)===s){var l=n.create;n.destroy=l()}n=n.next}while(n!==a)}}function sc(s){var a=s.ref;if(a!==null){var n=s.stateNode;switch(s.tag){case 5:s=n;break;default:s=n}typeof a=="function"?a(s):a.current=s}}function Hi(s){var a=s.alternate;a!==null&&(s.alternate=null,Hi(a)),s.child=null,s.deletions=null,s.sibling=null,s.tag===5&&(a=s.stateNode,a!==null&&(delete a[Js],delete a[Pn],delete a[xe],delete a[rd],delete a[id])),s.stateNode=null,s.return=null,s.dependencies=null,s.memoizedProps=null,s.memoizedState=null,s.pendingProps=null,s.stateNode=null,s.updateQueue=null}function Fi(s){return s.tag===5||s.tag===3||s.tag===4}function ro(s){s:for(;;){for(;s.sibling===null;){if(s.return===null||Fi(s.return))return null;s=s.return}for(s.sibling.return=s.return,s=s.sibling;s.tag!==5&&s.tag!==6&&s.tag!==18;){if(s.flags&2||s.child===null||s.tag===4)continue s;s.child.return=s,s=s.child}if(!(s.flags&2))return s.stateNode}}function ac(s,a,n){var l=s.tag;if(l===5||l===6)s=s.stateNode,a?n.nodeType===8?n.parentNode.insertBefore(s,a):n.insertBefore(s,a):(n.nodeType===8?(a=n.parentNode,a.insertBefore(s,n)):(a=n,a.appendChild(s)),n=n._reactRootContainer,n!=null||a.onclick!==null||(a.onclick=$l));else if(l!==4&&(s=s.child,s!==null))for(ac(s,a,n),s=s.sibling;s!==null;)ac(s,a,n),s=s.sibling}function nc(s,a,n){var l=s.tag;if(l===5||l===6)s=s.stateNode,a?n.insertBefore(s,a):n.appendChild(s);else if(l!==4&&(s=s.child,s!==null))for(nc(s,a,n),s=s.sibling;s!==null;)nc(s,a,n),s=s.sibling}var ns=null,Ns=!1;function sa(s,a,n){for(n=n.child;n!==null;)Ki(s,a,n),n=n.sibling}function Ki(s,a,n){if(zs&&typeof zs.onCommitFiberUnmount=="function")try{zs.onCommitFiberUnmount(up,n)}catch{}switch(n.tag){case 5:ts||Pa(n,a);case 6:var l=ns,p=Ns;ns=null,sa(s,a,n),ns=l,Ns=p,ns!==null&&(Ns?(s=ns,n=n.stateNode,s.nodeType===8?s.parentNode.removeChild(n):s.removeChild(n)):ns.removeChild(n.stateNode));break;case 18:ns!==null&&(Ns?(s=ns,n=n.stateNode,s.nodeType===8?ae(s.parentNode,n):s.nodeType===1&&ae(s,n),Qn(s)):ae(ns,n.stateNode));break;case 4:l=ns,p=Ns,ns=n.stateNode.containerInfo,Ns=!0,sa(s,a,n),ns=l,Ns=p;break;case 0:case 11:case 14:case 15:if(!ts&&(l=n.updateQueue,l!==null&&(l=l.lastEffect,l!==null))){p=l=l.next;do{var e=p,c=e.destroy;e=e.tag,c!==void 0&&(e&2||e&4)&&qe(n,a,c),p=p.next}while(p!==l)}sa(s,a,n);break;case 1:if(!ts&&(Pa(n,a),l=n.stateNode,typeof l.componentWillUnmount=="function"))try{l.props=n.memoizedProps,l.state=n.memoizedState,l.componentWillUnmount()}catch(t){T(n,a,t)}sa(s,a,n);break;case 21:sa(s,a,n);break;case 22:n.mode&1?(ts=(l=ts)||n.memoizedState!==null,sa(s,a,n),ts=l):sa(s,a,n);break;default:sa(s,a,n)}}function io(s){var a=s.updateQueue;if(a!==null){s.updateQueue=null;var n=s.stateNode;n===null&&(n=s.stateNode=new Gd),a.forEach(function(l){var p=Fd.bind(null,s,l);n.has(l)||(n.add(l),l.then(p,p))})}}function Xs(s,a){var n=a.deletions;if(n!==null)for(var l=0;lp&&(p=c),l&=~e}if(l=p,l=D()-l,l=(120>l?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*fd(l/1960))-l,10s?16:s,ta===null)var l=!1;else{if(s=ta,ta=null,gp=0,H&6)throw Error(w(331));var p=H;for(H|=4,V=s.current;V!==null;){var e=V,c=e.child;if(V.flags&16){var t=e.deletions;if(t!==null){for(var o=0;oD()-Oc?fa(s,0):_c|=n),As(s,a)}function Ti(s,a){a===0&&(s.mode&1?(a=yl,yl<<=1,!(yl&130023424)&&(yl=4194304)):a=1);var n=is();s=Ps(s,a),s!==null&&(tl(s,a,n),As(s,n))}function Hd(s){var a=s.memoizedState,n=0;a!==null&&(n=a.retryLane),Ti(s,n)}function Fd(s,a){var n=0;switch(s.tag){case 13:var l=s.stateNode,p=s.memoizedState;p!==null&&(n=p.retryLane);break;case 19:l=s.stateNode;break;default:throw Error(w(314))}l!==null&&l.delete(a),Ti(s,n)}var Qi;Qi=function(s,a,n){if(s!==null)if(s.memoizedProps!==a.pendingProps||js.current)Cs=!0;else{if(!(s.lanes&n)&&!(a.flags&128))return Cs=!1,kd(s,a,n);Cs=!!(s.flags&131072)}else Cs=!1,J&&a.flags&1048576&&_r(a,np,a.index);switch(a.lanes=0,a.tag){case 2:var l=a.type;xl(s,a),s=a.pendingProps;var p=cn(a,os.current);ln(a,n),p=Ec(null,a,l,s,p,n);var e=Uc();return a.flags|=1,typeof p=="object"&&p!==null&&typeof p.render=="function"&&p.$$typeof===void 0?(a.tag=1,a.memoizedState=null,a.updateQueue=null,us(l)?(e=!0,sp(a)):e=!1,a.memoizedState=p.state!==null&&p.state!==void 0?p.state:null,Sc(a),p.updater=kp,a.stateNode=p,p._reactInternals=a,Qe(a,l,s,n),a=_e(null,a,l,!0,e,n)):(a.tag=0,J&&e&&Rc(a),rs(null,a,p,n),a=a.child),a;case 16:l=a.elementType;s:{switch(xl(s,a),s=a.pendingProps,p=l._init,l=p(l._payload),a.type=l,p=a.tag=Sd(l),s=vs(l,s),p){case 0:a=Le(null,a,l,s,n);break s;case 1:a=eo(null,a,l,s,n);break s;case 11:a=lo(null,a,l,s,n);break s;case 14:a=po(null,a,l,vs(l.type,s),n);break s}throw Error(w(306,l,""))}return a;case 0:return l=a.type,p=a.pendingProps,p=a.elementType===l?p:vs(l,p),Le(s,a,l,p,n);case 1:return l=a.type,p=a.pendingProps,p=a.elementType===l?p:vs(l,p),eo(s,a,l,p,n);case 3:s:{if(fi(a),s===null)throw Error(w(387));l=a.pendingProps,e=a.memoizedState,p=e.element,qr(s,a),ep(a,l,null,n);var c=a.memoizedState;if(l=c.element,e.isDehydrated)if(e={element:l,isDehydrated:!1,cache:c.cache,pendingSuspenseBoundaries:c.pendingSuspenseBoundaries,transitions:c.transitions},a.updateQueue.baseState=e,a.memoizedState=e,a.flags&256){p=gn(Error(w(423)),a),a=co(s,a,l,n,p);break s}else if(l!==p){p=gn(Error(w(424)),a),a=co(s,a,l,n,p);break s}else for(ms=ha(a.stateNode.containerInfo.firstChild),bs=a,J=!0,Hs=null,n=li(a,null,l,n),a.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(tn(),l===p){a=$s(s,a,n);break s}rs(s,a,l,n)}a=a.child}return a;case 5:return pi(a),s===null&&Ee(a),l=a.type,p=a.pendingProps,e=s!==null?s.memoizedProps:null,c=p.children,Se(l,p)?c=null:e!==null&&Se(l,e)&&(a.flags|=32),Vi(s,a),rs(s,a,c,n),a.child;case 6:return s===null&&Ee(a),null;case 13:return Yi(s,a,n);case 4:return Mc(a,a.stateNode.containerInfo),l=a.pendingProps,s===null?a.child=on(a,null,l,n):rs(s,a,l,n),a.child;case 11:return l=a.type,p=a.pendingProps,p=a.elementType===l?p:vs(l,p),lo(s,a,l,p,n);case 7:return rs(s,a,a.pendingProps,n),a.child;case 8:return rs(s,a,a.pendingProps.children,n),a.child;case 12:return rs(s,a,a.pendingProps.children,n),a.child;case 10:s:{if(l=a.type._context,p=a.pendingProps,e=a.memoizedProps,c=p.value,K(lp,l._currentValue),l._currentValue=c,e!==null)if(Ss(e.value,c)){if(e.children===p.children&&!js.current){a=$s(s,a,n);break s}}else for(e=a.child,e!==null&&(e.return=a);e!==null;){var t=e.dependencies;if(t!==null){c=e.child;for(var o=t.firstContext;o!==null;){if(o.context===l){if(e.tag===1){o=Ls(-1,n&-n),o.tag=2;var r=e.updateQueue;if(r!==null){r=r.shared;var d=r.pending;d===null?o.next=o:(o.next=d.next,d.next=o),r.pending=o}}e.lanes|=n,o=e.alternate,o!==null&&(o.lanes|=n),Ue(e.return,n,a),t.lanes|=n;break}o=o.next}}else if(e.tag===10)c=e.type===a.type?null:e.child;else if(e.tag===18){if(c=e.return,c===null)throw Error(w(341));c.lanes|=n,t=c.alternate,t!==null&&(t.lanes|=n),Ue(c,n,a),c=e.sibling}else c=e.child;if(c!==null)c.return=e;else for(c=e;c!==null;){if(c===a){c=null;break}if(e=c.sibling,e!==null){e.return=c.return,c=e;break}c=c.return}e=c}rs(s,a,p.children,n),a=a.child}return a;case 9:return p=a.type,l=a.pendingProps.children,ln(a,n),p=fs(p),l=l(p),a.flags|=1,rs(s,a,l,n),a.child;case 14:return l=a.type,p=vs(l,a.pendingProps),p=vs(l.type,p),po(s,a,l,p,n);case 15:return Gi(s,a,a.type,a.pendingProps,n);case 17:return l=a.type,p=a.pendingProps,p=a.elementType===l?p:vs(l,p),xl(s,a),a.tag=1,us(l)?(s=!0,sp(a)):s=!1,ln(a,n),ai(a,l,p),Qe(a,l,p,n),_e(null,a,l,!0,s,n);case 19:return Ri(s,a,n);case 22:return Bi(s,a,n)}throw Error(w(156,a.tag))};function Di(s,a){return yr(s,a)}function Kd(s,a,n,l){this.tag=s,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=a,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=l,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Bs(s,a,n,l){return new Kd(s,a,n,l)}function st(s){return s=s.prototype,!(!s||!s.isReactComponent)}function Sd(s){if(typeof s=="function")return st(s)?1:0;if(s!=null){if(s=s.$$typeof,s===yc)return 11;if(s===mc)return 14}return 2}function ja(s,a){var n=s.alternate;return n===null?(n=Bs(s.tag,a,s.key,s.mode),n.elementType=s.elementType,n.type=s.type,n.stateNode=s.stateNode,n.alternate=s,s.alternate=n):(n.pendingProps=a,n.type=s.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=s.flags&14680064,n.childLanes=s.childLanes,n.lanes=s.lanes,n.child=s.child,n.memoizedProps=s.memoizedProps,n.memoizedState=s.memoizedState,n.updateQueue=s.updateQueue,a=s.dependencies,n.dependencies=a===null?null:{lanes:a.lanes,firstContext:a.firstContext},n.sibling=s.sibling,n.index=s.index,n.ref=s.ref,n}function El(s,a,n,l,p,e){var c=2;if(l=s,typeof s=="function")st(s)&&(c=1);else if(typeof s=="string")c=5;else s:switch(s){case za:return Ya(n.children,p,e,a);case Ac:c=8,p|=8;break;case je:return s=Bs(12,n,a,p|2),s.elementType=je,s.lanes=e,s;case ue:return s=Bs(13,n,a,p),s.elementType=ue,s.lanes=e,s;case Ae:return s=Bs(19,n,a,p),s.elementType=Ae,s.lanes=e,s;case nr:return Bp(n,p,e,a);default:if(typeof s=="object"&&s!==null)switch(s.$$typeof){case sr:c=10;break s;case ar:c=9;break s;case yc:c=11;break s;case mc:c=14;break s;case na:c=16,l=null;break s}throw Error(w(130,s==null?s:typeof s,""))}return a=Bs(c,n,a,p),a.elementType=s,a.type=l,a.lanes=e,a}function Ya(s,a,n,l){return s=Bs(7,s,l,a),s.lanes=n,s}function Bp(s,a,n,l){return s=Bs(22,s,l,a),s.elementType=nr,s.lanes=n,s.stateNode={isHidden:!1},s}function re(s,a,n){return s=Bs(6,s,null,a),s.lanes=n,s}function ie(s,a,n){return a=Bs(4,s.children!==null?s.children:[],s.key,a),a.lanes=n,a.stateNode={containerInfo:s.containerInfo,pendingChildren:null,implementation:s.implementation},a}function Md(s,a,n,l,p){this.tag=a,this.containerInfo=s,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Up(0),this.expirationTimes=Up(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Up(0),this.identifierPrefix=l,this.onRecoverableError=p,this.mutableSourceEagerHydrationData=null}function at(s,a,n,l,p,e,c,t,o){return s=new Md(s,a,n,t,o),a===1?(a=1,e===!0&&(a|=8)):a=0,e=Bs(3,null,null,a),s.current=e,e.stateNode=s,e.memoizedState={element:l,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Sc(e),s}function xd(s,a,n){var l=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Pi)}catch(s){console.error(s)}}Pi(),_o.exports=ks;var Td=_o.exports,$i,qi,yo=Td;qi=yo.createRoot,$i=yo.hydrateRoot;const sg={theme:"light",sideNav:!0,initialized:!1},ag=W.createContext({state:sg,init:s=>{},setTheme:s=>{},toggleSideNav:()=>{}});function et(){return W.useContext(ag)}function mo(s,a){try{localStorage.setItem(s,a)}catch(n){console.error(n)}}const bo=({children:s})=>{const[a,n]=W.useState(sg);function l(t){t=="dark"?(document.body.classList.remove("light"),document.body.classList.add("dark")):(document.body.classList.remove("dark"),document.body.classList.add("light"))}function p(t){try{const o=localStorage.getItem("theme")||"light";let r=t.width>=500;{const d=localStorage.getItem("sideNav");d&&(r=d=="true")}l(o),n(d=>({...d,theme:o,sideNav:r}))}catch(o){console.error(o)}n(o=>({...o,initialized:!0}))}function e(t){l(t),n({...a,theme:t}),mo("theme",t)}function c(){const t=!a.sideNav;n({...a,sideNav:t}),mo("sideNav",t)}return i.jsx(ag.Provider,{value:W.useMemo(()=>({state:a,init:p,setTheme:e,toggleSideNav:c}),[a]),children:s})};/** * @remix-run/router v1.14.1 * * Copyright (c) Remix Software Inc. @@ -46,7 +46,7 @@ Error generating stack: `+e.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function pl(){return pl=Object.assign?Object.assign.bind():function(s){for(var a=1;a"u")throw new Error(a)}function ct(s,a){if(!s){typeof console<"u"&&console.warn(a);try{throw new Error(a)}catch{}}}function Dd(){return Math.random().toString(36).substr(2,8)}function ko(s,a){return{usr:s.state,key:s.key,idx:a}}function tc(s,a,n,l){return n===void 0&&(n=null),pl({pathname:typeof s=="string"?s:s.pathname,search:"",hash:""},typeof a=="string"?jn(a):a,{state:n,key:a&&a.key||l||Dd()})}function ng(s){let{pathname:a="/",search:n="",hash:l=""}=s;return n&&n!=="?"&&(a+=n.charAt(0)==="?"?n:"?"+n),l&&l!=="#"&&(a+=l.charAt(0)==="#"?l:"#"+l),a}function jn(s){let a={};if(s){let n=s.indexOf("#");n>=0&&(a.hash=s.substr(n),s=s.substr(0,n));let l=s.indexOf("?");l>=0&&(a.search=s.substr(l),s=s.substr(0,l)),s&&(a.pathname=s)}return a}function Ld(s,a,n,l){l===void 0&&(l={});let{window:p=document.defaultView,v5Compat:e=!1}=l,c=p.history,t=oa.Pop,o=null,r=d();r==null&&(r=0,c.replaceState(pl({},c.state,{idx:r}),""));function d(){return(c.state||{idx:null}).idx}function I(){t=oa.Pop;let G=d(),h=G==null?null:G-r;r=G,o&&o({action:t,location:b.location,delta:h})}function j(G,h){t=oa.Push;let g=tc(b.location,G,h);n&&n(g,G),r=d()+1;let C=ko(g,r),A=b.createHref(g);try{c.pushState(C,"",A)}catch(Z){if(Z instanceof DOMException&&Z.name==="DataCloneError")throw Z;p.location.assign(A)}e&&o&&o({action:t,location:b.location,delta:1})}function y(G,h){t=oa.Replace;let g=tc(b.location,G,h);n&&n(g,G),r=d();let C=ko(g,r),A=b.createHref(g);c.replaceState(C,"",A),e&&o&&o({action:t,location:b.location,delta:0})}function m(G){let h=p.location.origin!=="null"?p.location.origin:p.location.href,g=typeof G=="string"?G:ng(G);return P(h,"No window.location.(origin|href) available to create URL for href: "+g),new URL(g,h)}let b={get action(){return t},get location(){return s(p,c)},listen(G){if(o)throw new Error("A history only accepts one active listener");return p.addEventListener(wo,I),o=G,()=>{p.removeEventListener(wo,I),o=null}},createHref(G){return a(p,G)},createURL:m,encodeLocation(G){let h=m(G);return{pathname:h.pathname,search:h.search,hash:h.hash}},push:j,replace:y,go(G){return c.go(G)}};return b}var Zo;(function(s){s.data="data",s.deferred="deferred",s.redirect="redirect",s.error="error"})(Zo||(Zo={}));function _d(s,a,n){n===void 0&&(n="/");let l=typeof a=="string"?jn(a):a,p=cg(l.pathname||"/",n);if(p==null)return null;let e=lg(s);Od(e);let c=null;for(let t=0;c==null&&t{let o={relativePath:t===void 0?e.path||"":t,caseSensitive:e.caseSensitive===!0,childrenIndex:c,route:e};o.relativePath.startsWith("/")&&(P(o.relativePath.startsWith(l),'Absolute route path "'+o.relativePath+'" nested under path '+('"'+l+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),o.relativePath=o.relativePath.slice(l.length));let r=Ra([l,o.relativePath]),d=n.concat(o);e.children&&e.children.length>0&&(P(e.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+r+'".')),lg(e.children,a,d,r)),!(e.path==null&&!e.index)&&a.push({path:r,score:lI(r,e.index),routesMeta:d})};return s.forEach((e,c)=>{var t;if(e.path===""||!((t=e.path)!=null&&t.includes("?")))p(e,c);else for(let o of pg(e.path))p(e,c,o)}),a}function pg(s){let a=s.split("/");if(a.length===0)return[];let[n,...l]=a,p=n.endsWith("?"),e=n.replace(/\?$/,"");if(l.length===0)return p?[e,""]:[e];let c=pg(l.join("/")),t=[];return t.push(...c.map(o=>o===""?e:[e,o].join("/"))),p&&t.push(...c),t.map(o=>s.startsWith("/")&&o===""?"/":o)}function Od(s){s.sort((a,n)=>a.score!==n.score?n.score-a.score:pI(a.routesMeta.map(l=>l.childrenIndex),n.routesMeta.map(l=>l.childrenIndex)))}const Pd=/^:\w+$/,$d=3,qd=2,sI=1,aI=10,nI=-2,Wo=s=>s==="*";function lI(s,a){let n=s.split("/"),l=n.length;return n.some(Wo)&&(l+=nI),a&&(l+=qd),n.filter(p=>!Wo(p)).reduce((p,e)=>p+(Pd.test(e)?$d:e===""?sI:aI),l)}function pI(s,a){return s.length===a.length&&s.slice(0,-1).every((l,p)=>l===a[p])?s[s.length-1]-a[a.length-1]:0}function eI(s,a){let{routesMeta:n}=s,l={},p="/",e=[];for(let c=0;c{let{paramName:j,isOptional:y}=d;if(j==="*"){let b=t[I]||"";c=e.slice(0,e.length-b.length).replace(/(.)\/+$/,"$1")}const m=t[I];return y&&!m?r[j]=void 0:r[j]=oI(m||"",j),r},{}),pathname:e,pathnameBase:c,pattern:s}}function cI(s,a,n){a===void 0&&(a=!1),n===void 0&&(n=!0),ct(s==="*"||!s.endsWith("*")||s.endsWith("/*"),'Route path "'+s+'" will be treated as if it were '+('"'+s.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+s.replace(/\*$/,"/*")+'".'));let l=[],p="^"+s.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:(\w+)(\?)?/g,(c,t,o)=>(l.push({paramName:t,isOptional:o!=null}),o?"/?([^\\/]+)?":"/([^\\/]+)"));return s.endsWith("*")?(l.push({paramName:"*"}),p+=s==="*"||s==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?p+="\\/*$":s!==""&&s!=="/"&&(p+="(?:(?=\\/|$))"),[new RegExp(p,a?void 0:"i"),l]}function tI(s){try{return decodeURI(s)}catch(a){return ct(!1,'The URL path "'+s+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+a+").")),s}}function oI(s,a){try{return decodeURIComponent(s)}catch(n){return ct(!1,'The value for the URL param "'+a+'" will not be decoded because'+(' the string "'+s+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+n+").")),s}}function cg(s,a){if(a==="/")return s;if(!s.toLowerCase().startsWith(a.toLowerCase()))return null;let n=a.endsWith("/")?a.length-1:a.length,l=s.charAt(n);return l&&l!=="/"?null:s.slice(n)||"/"}function rI(s,a){a===void 0&&(a="/");let{pathname:n,search:l="",hash:p=""}=typeof s=="string"?jn(s):s;return{pathname:n?n.startsWith("/")?n:iI(n,a):a,search:CI(l),hash:jI(p)}}function iI(s,a){let n=a.replace(/\/+$/,"").split("/");return s.split("/").forEach(p=>{p===".."?n.length>1&&n.pop():p!=="."&&n.push(p)}),n.length>1?n.join("/"):"/"}function ge(s,a,n,l){return"Cannot include a '"+s+"' character in a manually specified "+("`to."+a+"` field ["+JSON.stringify(l)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function gI(s){return s.filter((a,n)=>n===0||a.route.path&&a.route.path.length>0)}function hI(s,a){let n=gI(s);return a?n.map((l,p)=>p===s.length-1?l.pathname:l.pathnameBase):n.map(l=>l.pathnameBase)}function dI(s,a,n,l){l===void 0&&(l=!1);let p;typeof s=="string"?p=jn(s):(p=pl({},s),P(!p.pathname||!p.pathname.includes("?"),ge("?","pathname","search",p)),P(!p.pathname||!p.pathname.includes("#"),ge("#","pathname","hash",p)),P(!p.search||!p.search.includes("#"),ge("#","search","hash",p)));let e=s===""||p.pathname==="",c=e?"/":p.pathname,t;if(c==null)t=n;else{let I=a.length-1;if(!l&&c.startsWith("..")){let j=c.split("/");for(;j[0]==="..";)j.shift(),I-=1;p.pathname=j.join("/")}t=I>=0?a[I]:"/"}let o=rI(p,t),r=c&&c!=="/"&&c.endsWith("/"),d=(e||c===".")&&n.endsWith("/");return!o.pathname.endsWith("/")&&(r||d)&&(o.pathname+="/"),o}const Ra=s=>s.join("/").replace(/\/\/+/g,"/"),II=s=>s.replace(/\/+$/,"").replace(/^\/*/,"/"),CI=s=>!s||s==="?"?"":s.startsWith("?")?s:"?"+s,jI=s=>!s||s==="#"?"":s.startsWith("#")?s:"#"+s;function uI(s){return s!=null&&typeof s.status=="number"&&typeof s.statusText=="string"&&typeof s.internal=="boolean"&&"data"in s}const tg=["post","put","patch","delete"];new Set(tg);const yI=["get",...tg];new Set(yI);/** + */function pl(){return pl=Object.assign?Object.assign.bind():function(s){for(var a=1;a"u")throw new Error(a)}function ct(s,a){if(!s){typeof console<"u"&&console.warn(a);try{throw new Error(a)}catch{}}}function Dd(){return Math.random().toString(36).substr(2,8)}function ko(s,a){return{usr:s.state,key:s.key,idx:a}}function tc(s,a,n,l){return n===void 0&&(n=null),pl({pathname:typeof s=="string"?s:s.pathname,search:"",hash:""},typeof a=="string"?jn(a):a,{state:n,key:a&&a.key||l||Dd()})}function ng(s){let{pathname:a="/",search:n="",hash:l=""}=s;return n&&n!=="?"&&(a+=n.charAt(0)==="?"?n:"?"+n),l&&l!=="#"&&(a+=l.charAt(0)==="#"?l:"#"+l),a}function jn(s){let a={};if(s){let n=s.indexOf("#");n>=0&&(a.hash=s.substr(n),s=s.substr(0,n));let l=s.indexOf("?");l>=0&&(a.search=s.substr(l),s=s.substr(0,l)),s&&(a.pathname=s)}return a}function Ld(s,a,n,l){l===void 0&&(l={});let{window:p=document.defaultView,v5Compat:e=!1}=l,c=p.history,t=oa.Pop,o=null,r=d();r==null&&(r=0,c.replaceState(pl({},c.state,{idx:r}),""));function d(){return(c.state||{idx:null}).idx}function I(){t=oa.Pop;let G=d(),h=G==null?null:G-r;r=G,o&&o({action:t,location:b.location,delta:h})}function j(G,h){t=oa.Push;let g=tc(b.location,G,h);n&&n(g,G),r=d()+1;let C=ko(g,r),y=b.createHref(g);try{c.pushState(C,"",y)}catch(Z){if(Z instanceof DOMException&&Z.name==="DataCloneError")throw Z;p.location.assign(y)}e&&o&&o({action:t,location:b.location,delta:1})}function A(G,h){t=oa.Replace;let g=tc(b.location,G,h);n&&n(g,G),r=d();let C=ko(g,r),y=b.createHref(g);c.replaceState(C,"",y),e&&o&&o({action:t,location:b.location,delta:0})}function m(G){let h=p.location.origin!=="null"?p.location.origin:p.location.href,g=typeof G=="string"?G:ng(G);return P(h,"No window.location.(origin|href) available to create URL for href: "+g),new URL(g,h)}let b={get action(){return t},get location(){return s(p,c)},listen(G){if(o)throw new Error("A history only accepts one active listener");return p.addEventListener(wo,I),o=G,()=>{p.removeEventListener(wo,I),o=null}},createHref(G){return a(p,G)},createURL:m,encodeLocation(G){let h=m(G);return{pathname:h.pathname,search:h.search,hash:h.hash}},push:j,replace:A,go(G){return c.go(G)}};return b}var Zo;(function(s){s.data="data",s.deferred="deferred",s.redirect="redirect",s.error="error"})(Zo||(Zo={}));function _d(s,a,n){n===void 0&&(n="/");let l=typeof a=="string"?jn(a):a,p=cg(l.pathname||"/",n);if(p==null)return null;let e=lg(s);Od(e);let c=null;for(let t=0;c==null&&t{let o={relativePath:t===void 0?e.path||"":t,caseSensitive:e.caseSensitive===!0,childrenIndex:c,route:e};o.relativePath.startsWith("/")&&(P(o.relativePath.startsWith(l),'Absolute route path "'+o.relativePath+'" nested under path '+('"'+l+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),o.relativePath=o.relativePath.slice(l.length));let r=Ra([l,o.relativePath]),d=n.concat(o);e.children&&e.children.length>0&&(P(e.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+r+'".')),lg(e.children,a,d,r)),!(e.path==null&&!e.index)&&a.push({path:r,score:lI(r,e.index),routesMeta:d})};return s.forEach((e,c)=>{var t;if(e.path===""||!((t=e.path)!=null&&t.includes("?")))p(e,c);else for(let o of pg(e.path))p(e,c,o)}),a}function pg(s){let a=s.split("/");if(a.length===0)return[];let[n,...l]=a,p=n.endsWith("?"),e=n.replace(/\?$/,"");if(l.length===0)return p?[e,""]:[e];let c=pg(l.join("/")),t=[];return t.push(...c.map(o=>o===""?e:[e,o].join("/"))),p&&t.push(...c),t.map(o=>s.startsWith("/")&&o===""?"/":o)}function Od(s){s.sort((a,n)=>a.score!==n.score?n.score-a.score:pI(a.routesMeta.map(l=>l.childrenIndex),n.routesMeta.map(l=>l.childrenIndex)))}const Pd=/^:\w+$/,$d=3,qd=2,sI=1,aI=10,nI=-2,Wo=s=>s==="*";function lI(s,a){let n=s.split("/"),l=n.length;return n.some(Wo)&&(l+=nI),a&&(l+=qd),n.filter(p=>!Wo(p)).reduce((p,e)=>p+(Pd.test(e)?$d:e===""?sI:aI),l)}function pI(s,a){return s.length===a.length&&s.slice(0,-1).every((l,p)=>l===a[p])?s[s.length-1]-a[a.length-1]:0}function eI(s,a){let{routesMeta:n}=s,l={},p="/",e=[];for(let c=0;c{let{paramName:j,isOptional:A}=d;if(j==="*"){let b=t[I]||"";c=e.slice(0,e.length-b.length).replace(/(.)\/+$/,"$1")}const m=t[I];return A&&!m?r[j]=void 0:r[j]=oI(m||"",j),r},{}),pathname:e,pathnameBase:c,pattern:s}}function cI(s,a,n){a===void 0&&(a=!1),n===void 0&&(n=!0),ct(s==="*"||!s.endsWith("*")||s.endsWith("/*"),'Route path "'+s+'" will be treated as if it were '+('"'+s.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+s.replace(/\*$/,"/*")+'".'));let l=[],p="^"+s.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:(\w+)(\?)?/g,(c,t,o)=>(l.push({paramName:t,isOptional:o!=null}),o?"/?([^\\/]+)?":"/([^\\/]+)"));return s.endsWith("*")?(l.push({paramName:"*"}),p+=s==="*"||s==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?p+="\\/*$":s!==""&&s!=="/"&&(p+="(?:(?=\\/|$))"),[new RegExp(p,a?void 0:"i"),l]}function tI(s){try{return decodeURI(s)}catch(a){return ct(!1,'The URL path "'+s+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+a+").")),s}}function oI(s,a){try{return decodeURIComponent(s)}catch(n){return ct(!1,'The value for the URL param "'+a+'" will not be decoded because'+(' the string "'+s+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+n+").")),s}}function cg(s,a){if(a==="/")return s;if(!s.toLowerCase().startsWith(a.toLowerCase()))return null;let n=a.endsWith("/")?a.length-1:a.length,l=s.charAt(n);return l&&l!=="/"?null:s.slice(n)||"/"}function rI(s,a){a===void 0&&(a="/");let{pathname:n,search:l="",hash:p=""}=typeof s=="string"?jn(s):s;return{pathname:n?n.startsWith("/")?n:iI(n,a):a,search:CI(l),hash:jI(p)}}function iI(s,a){let n=a.replace(/\/+$/,"").split("/");return s.split("/").forEach(p=>{p===".."?n.length>1&&n.pop():p!=="."&&n.push(p)}),n.length>1?n.join("/"):"/"}function ge(s,a,n,l){return"Cannot include a '"+s+"' character in a manually specified "+("`to."+a+"` field ["+JSON.stringify(l)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function gI(s){return s.filter((a,n)=>n===0||a.route.path&&a.route.path.length>0)}function hI(s,a){let n=gI(s);return a?n.map((l,p)=>p===s.length-1?l.pathname:l.pathnameBase):n.map(l=>l.pathnameBase)}function dI(s,a,n,l){l===void 0&&(l=!1);let p;typeof s=="string"?p=jn(s):(p=pl({},s),P(!p.pathname||!p.pathname.includes("?"),ge("?","pathname","search",p)),P(!p.pathname||!p.pathname.includes("#"),ge("#","pathname","hash",p)),P(!p.search||!p.search.includes("#"),ge("#","search","hash",p)));let e=s===""||p.pathname==="",c=e?"/":p.pathname,t;if(c==null)t=n;else{let I=a.length-1;if(!l&&c.startsWith("..")){let j=c.split("/");for(;j[0]==="..";)j.shift(),I-=1;p.pathname=j.join("/")}t=I>=0?a[I]:"/"}let o=rI(p,t),r=c&&c!=="/"&&c.endsWith("/"),d=(e||c===".")&&n.endsWith("/");return!o.pathname.endsWith("/")&&(r||d)&&(o.pathname+="/"),o}const Ra=s=>s.join("/").replace(/\/\/+/g,"/"),II=s=>s.replace(/\/+$/,"").replace(/^\/*/,"/"),CI=s=>!s||s==="?"?"":s.startsWith("?")?s:"?"+s,jI=s=>!s||s==="#"?"":s.startsWith("#")?s:"#"+s;function uI(s){return s!=null&&typeof s.status=="number"&&typeof s.statusText=="string"&&typeof s.internal=="boolean"&&"data"in s}const tg=["post","put","patch","delete"];new Set(tg);const AI=["get",...tg];new Set(AI);/** * React Router v6.21.1 * * Copyright (c) Remix Software Inc. @@ -55,7 +55,7 @@ Error generating stack: `+e.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function el(){return el=Object.assign?Object.assign.bind():function(s){for(var a=1;a{t.current=!0}),W.useCallback(function(r,d){if(d===void 0&&(d={}),!t.current)return;if(typeof r=="number"){l.go(r);return}let I=dI(r,JSON.parse(c),e,d.relative==="path");s==null&&a!=="/"&&(I.pathname=I.pathname==="/"?a:Ra([a,I.pathname])),(d.replace?l.replace:l.push)(I,d.state,d)},[a,l,c,e,s])}function wI(s,a){return kI(s,a)}function kI(s,a,n,l){Np()||P(!1);let{navigator:p}=W.useContext(vp),{matches:e}=W.useContext(un),c=e[e.length-1],t=c?c.params:{};c&&c.pathname;let o=c?c.pathnameBase:"/";c&&c.route;let r=Hp(),d;if(a){var I;let G=typeof a=="string"?jn(a):a;o==="/"||(I=G.pathname)!=null&&I.startsWith(o)||P(!1),d=G}else d=r;let j=d.pathname||"/",y=o==="/"?j:j.slice(o.length)||"/",m=_d(s,{pathname:y}),b=fI(m&&m.map(G=>Object.assign({},G,{params:Object.assign({},t,G.params),pathname:Ra([o,p.encodeLocation?p.encodeLocation(G.pathname).pathname:G.pathname]),pathnameBase:G.pathnameBase==="/"?o:Ra([o,p.encodeLocation?p.encodeLocation(G.pathnameBase).pathname:G.pathnameBase])})),e,n,l);return a&&b?W.createElement(Xp.Provider,{value:{location:el({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:oa.Pop}},b):b}function ZI(){let s=vI(),a=uI(s)?s.status+" "+s.statusText:s instanceof Error?s.message:JSON.stringify(s),n=s instanceof Error?s.stack:null,p={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return W.createElement(W.Fragment,null,W.createElement("h2",null,"Unexpected Application Error!"),W.createElement("h3",{style:{fontStyle:"italic"}},a),n?W.createElement("pre",{style:p},n):null,null)}const WI=W.createElement(ZI,null);class GI extends W.Component{constructor(a){super(a),this.state={location:a.location,revalidation:a.revalidation,error:a.error}}static getDerivedStateFromError(a){return{error:a}}static getDerivedStateFromProps(a,n){return n.location!==a.location||n.revalidation!=="idle"&&a.revalidation==="idle"?{error:a.error,location:a.location,revalidation:a.revalidation}:{error:a.error!==void 0?a.error:n.error,location:n.location,revalidation:a.revalidation||n.revalidation}}componentDidCatch(a,n){console.error("React Router caught the following error during render",a,n)}render(){return this.state.error!==void 0?W.createElement(un.Provider,{value:this.props.routeContext},W.createElement(og.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function BI(s){let{routeContext:a,match:n,children:l}=s,p=W.useContext(tt);return p&&p.static&&p.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(p.staticContext._deepestRenderedBoundaryId=n.route.id),W.createElement(un.Provider,{value:a},l)}function fI(s,a,n,l){var p;if(a===void 0&&(a=[]),n===void 0&&(n=null),l===void 0&&(l=null),s==null){var e;if((e=n)!=null&&e.errors)s=n.matches;else return null}let c=s,t=(p=n)==null?void 0:p.errors;if(t!=null){let d=c.findIndex(I=>I.route.id&&(t==null?void 0:t[I.route.id]));d>=0||P(!1),c=c.slice(0,Math.min(c.length,d+1))}let o=!1,r=-1;if(n&&l&&l.v7_partialHydration)for(let d=0;d=0?c=c.slice(0,r+1):c=[c[0]];break}}}return c.reduceRight((d,I,j)=>{let y,m=!1,b=null,G=null;n&&(y=t&&I.route.id?t[I.route.id]:void 0,b=I.route.errorElement||WI,o&&(r<0&&j===0?(NI("route-fallback",!1),m=!0,G=null):r===j&&(m=!0,G=I.route.hydrateFallbackElement||null)));let h=a.concat(c.slice(0,j+1)),g=()=>{let C;return y?C=b:m?C=G:I.route.Component?C=W.createElement(I.route.Component,null):I.route.element?C=I.route.element:C=d,W.createElement(BI,{match:I,routeContext:{outlet:d,matches:h,isDataRoute:n!=null},children:C})};return n&&(I.route.ErrorBoundary||I.route.errorElement||j===0)?W.createElement(GI,{location:n.location,revalidation:n.revalidation,component:b,error:y,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0}}):g()},null)}var ig=function(s){return s.UseBlocker="useBlocker",s.UseRevalidator="useRevalidator",s.UseNavigateStable="useNavigate",s}(ig||{}),Ip=function(s){return s.UseBlocker="useBlocker",s.UseLoaderData="useLoaderData",s.UseActionData="useActionData",s.UseRouteError="useRouteError",s.UseNavigation="useNavigation",s.UseRouteLoaderData="useRouteLoaderData",s.UseMatches="useMatches",s.UseRevalidator="useRevalidator",s.UseNavigateStable="useNavigate",s.UseRouteId="useRouteId",s}(Ip||{});function VI(s){let a=W.useContext(tt);return a||P(!1),a}function YI(s){let a=W.useContext(AI);return a||P(!1),a}function RI(s){let a=W.useContext(un);return a||P(!1),a}function gg(s){let a=RI(),n=a.matches[a.matches.length-1];return n.route.id||P(!1),n.route.id}function vI(){var s;let a=W.useContext(og),n=YI(Ip.UseRouteError),l=gg(Ip.UseRouteError);return a!==void 0?a:(s=n.errors)==null?void 0:s[l]}function XI(){let{router:s}=VI(ig.UseNavigateStable),a=gg(Ip.UseNavigateStable),n=W.useRef(!1);return rg(()=>{n.current=!0}),W.useCallback(function(p,e){e===void 0&&(e={}),n.current&&(typeof p=="number"?s.navigate(p):s.navigate(p,el({fromRouteId:a},e)))},[s,a])}const Go={};function NI(s,a,n){!a&&!Go[s]&&(Go[s]=!0)}function hg(s){P(!1)}function HI(s){let{basename:a="/",children:n=null,location:l,navigationType:p=oa.Pop,navigator:e,static:c=!1,future:t}=s;Np()&&P(!1);let o=a.replace(/^\/*/,"/"),r=W.useMemo(()=>({basename:o,navigator:e,static:c,future:el({v7_relativeSplatPath:!1},t)}),[o,t,e,c]);typeof l=="string"&&(l=jn(l));let{pathname:d="/",search:I="",hash:j="",state:y=null,key:m="default"}=l,b=W.useMemo(()=>{let G=cg(d,o);return G==null?null:{location:{pathname:G,search:I,hash:j,state:y,key:m},navigationType:p}},[o,d,I,j,y,m,p]);return b==null?null:W.createElement(vp.Provider,{value:r},W.createElement(Xp.Provider,{children:n,value:b}))}function FI(s){let{children:a,location:n}=s;return wI(oc(a),n)}new Promise(()=>{});function oc(s,a){a===void 0&&(a=[]);let n=[];return W.Children.forEach(s,(l,p)=>{if(!W.isValidElement(l))return;let e=[...a,p];if(l.type===W.Fragment){n.push.apply(n,oc(l.props.children,e));return}l.type!==hg&&P(!1),!l.props.index||!l.props.children||P(!1);let c={id:l.props.id||e.join("-"),caseSensitive:l.props.caseSensitive,element:l.props.element,Component:l.props.Component,index:l.props.index,path:l.props.path,loader:l.props.loader,action:l.props.action,errorElement:l.props.errorElement,ErrorBoundary:l.props.ErrorBoundary,hasErrorBoundary:l.props.ErrorBoundary!=null||l.props.errorElement!=null,shouldRevalidate:l.props.shouldRevalidate,handle:l.props.handle,lazy:l.props.lazy};l.props.children&&(c.children=oc(l.props.children,e)),n.push(c)}),n}/** + */function el(){return el=Object.assign?Object.assign.bind():function(s){for(var a=1;a{t.current=!0}),W.useCallback(function(r,d){if(d===void 0&&(d={}),!t.current)return;if(typeof r=="number"){l.go(r);return}let I=dI(r,JSON.parse(c),e,d.relative==="path");s==null&&a!=="/"&&(I.pathname=I.pathname==="/"?a:Ra([a,I.pathname])),(d.replace?l.replace:l.push)(I,d.state,d)},[a,l,c,e,s])}function wI(s,a){return kI(s,a)}function kI(s,a,n,l){Np()||P(!1);let{navigator:p}=W.useContext(Xp),{matches:e}=W.useContext(un),c=e[e.length-1],t=c?c.params:{};c&&c.pathname;let o=c?c.pathnameBase:"/";c&&c.route;let r=Hp(),d;if(a){var I;let G=typeof a=="string"?jn(a):a;o==="/"||(I=G.pathname)!=null&&I.startsWith(o)||P(!1),d=G}else d=r;let j=d.pathname||"/",A=o==="/"?j:j.slice(o.length)||"/",m=_d(s,{pathname:A}),b=VI(m&&m.map(G=>Object.assign({},G,{params:Object.assign({},t,G.params),pathname:Ra([o,p.encodeLocation?p.encodeLocation(G.pathname).pathname:G.pathname]),pathnameBase:G.pathnameBase==="/"?o:Ra([o,p.encodeLocation?p.encodeLocation(G.pathnameBase).pathname:G.pathnameBase])})),e,n,l);return a&&b?W.createElement(vp.Provider,{value:{location:el({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:oa.Pop}},b):b}function ZI(){let s=XI(),a=uI(s)?s.status+" "+s.statusText:s instanceof Error?s.message:JSON.stringify(s),n=s instanceof Error?s.stack:null,p={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return W.createElement(W.Fragment,null,W.createElement("h2",null,"Unexpected Application Error!"),W.createElement("h3",{style:{fontStyle:"italic"}},a),n?W.createElement("pre",{style:p},n):null,null)}const WI=W.createElement(ZI,null);class GI extends W.Component{constructor(a){super(a),this.state={location:a.location,revalidation:a.revalidation,error:a.error}}static getDerivedStateFromError(a){return{error:a}}static getDerivedStateFromProps(a,n){return n.location!==a.location||n.revalidation!=="idle"&&a.revalidation==="idle"?{error:a.error,location:a.location,revalidation:a.revalidation}:{error:a.error!==void 0?a.error:n.error,location:n.location,revalidation:a.revalidation||n.revalidation}}componentDidCatch(a,n){console.error("React Router caught the following error during render",a,n)}render(){return this.state.error!==void 0?W.createElement(un.Provider,{value:this.props.routeContext},W.createElement(og.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function BI(s){let{routeContext:a,match:n,children:l}=s,p=W.useContext(tt);return p&&p.static&&p.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(p.staticContext._deepestRenderedBoundaryId=n.route.id),W.createElement(un.Provider,{value:a},l)}function VI(s,a,n,l){var p;if(a===void 0&&(a=[]),n===void 0&&(n=null),l===void 0&&(l=null),s==null){var e;if((e=n)!=null&&e.errors)s=n.matches;else return null}let c=s,t=(p=n)==null?void 0:p.errors;if(t!=null){let d=c.findIndex(I=>I.route.id&&(t==null?void 0:t[I.route.id]));d>=0||P(!1),c=c.slice(0,Math.min(c.length,d+1))}let o=!1,r=-1;if(n&&l&&l.v7_partialHydration)for(let d=0;d=0?c=c.slice(0,r+1):c=[c[0]];break}}}return c.reduceRight((d,I,j)=>{let A,m=!1,b=null,G=null;n&&(A=t&&I.route.id?t[I.route.id]:void 0,b=I.route.errorElement||WI,o&&(r<0&&j===0?(NI("route-fallback",!1),m=!0,G=null):r===j&&(m=!0,G=I.route.hydrateFallbackElement||null)));let h=a.concat(c.slice(0,j+1)),g=()=>{let C;return A?C=b:m?C=G:I.route.Component?C=W.createElement(I.route.Component,null):I.route.element?C=I.route.element:C=d,W.createElement(BI,{match:I,routeContext:{outlet:d,matches:h,isDataRoute:n!=null},children:C})};return n&&(I.route.ErrorBoundary||I.route.errorElement||j===0)?W.createElement(GI,{location:n.location,revalidation:n.revalidation,component:b,error:A,children:g(),routeContext:{outlet:null,matches:h,isDataRoute:!0}}):g()},null)}var ig=function(s){return s.UseBlocker="useBlocker",s.UseRevalidator="useRevalidator",s.UseNavigateStable="useNavigate",s}(ig||{}),Ip=function(s){return s.UseBlocker="useBlocker",s.UseLoaderData="useLoaderData",s.UseActionData="useActionData",s.UseRouteError="useRouteError",s.UseNavigation="useNavigation",s.UseRouteLoaderData="useRouteLoaderData",s.UseMatches="useMatches",s.UseRevalidator="useRevalidator",s.UseNavigateStable="useNavigate",s.UseRouteId="useRouteId",s}(Ip||{});function fI(s){let a=W.useContext(tt);return a||P(!1),a}function YI(s){let a=W.useContext(yI);return a||P(!1),a}function RI(s){let a=W.useContext(un);return a||P(!1),a}function gg(s){let a=RI(),n=a.matches[a.matches.length-1];return n.route.id||P(!1),n.route.id}function XI(){var s;let a=W.useContext(og),n=YI(Ip.UseRouteError),l=gg(Ip.UseRouteError);return a!==void 0?a:(s=n.errors)==null?void 0:s[l]}function vI(){let{router:s}=fI(ig.UseNavigateStable),a=gg(Ip.UseNavigateStable),n=W.useRef(!1);return rg(()=>{n.current=!0}),W.useCallback(function(p,e){e===void 0&&(e={}),n.current&&(typeof p=="number"?s.navigate(p):s.navigate(p,el({fromRouteId:a},e)))},[s,a])}const Go={};function NI(s,a,n){!a&&!Go[s]&&(Go[s]=!0)}function hg(s){P(!1)}function HI(s){let{basename:a="/",children:n=null,location:l,navigationType:p=oa.Pop,navigator:e,static:c=!1,future:t}=s;Np()&&P(!1);let o=a.replace(/^\/*/,"/"),r=W.useMemo(()=>({basename:o,navigator:e,static:c,future:el({v7_relativeSplatPath:!1},t)}),[o,t,e,c]);typeof l=="string"&&(l=jn(l));let{pathname:d="/",search:I="",hash:j="",state:A=null,key:m="default"}=l,b=W.useMemo(()=>{let G=cg(d,o);return G==null?null:{location:{pathname:G,search:I,hash:j,state:A,key:m},navigationType:p}},[o,d,I,j,A,m,p]);return b==null?null:W.createElement(Xp.Provider,{value:r},W.createElement(vp.Provider,{children:n,value:b}))}function FI(s){let{children:a,location:n}=s;return wI(oc(a),n)}new Promise(()=>{});function oc(s,a){a===void 0&&(a=[]);let n=[];return W.Children.forEach(s,(l,p)=>{if(!W.isValidElement(l))return;let e=[...a,p];if(l.type===W.Fragment){n.push.apply(n,oc(l.props.children,e));return}l.type!==hg&&P(!1),!l.props.index||!l.props.children||P(!1);let c={id:l.props.id||e.join("-"),caseSensitive:l.props.caseSensitive,element:l.props.element,Component:l.props.Component,index:l.props.index,path:l.props.path,loader:l.props.loader,action:l.props.action,errorElement:l.props.errorElement,ErrorBoundary:l.props.ErrorBoundary,hasErrorBoundary:l.props.ErrorBoundary!=null||l.props.errorElement!=null,shouldRevalidate:l.props.shouldRevalidate,handle:l.props.handle,lazy:l.props.lazy};l.props.children&&(c.children=oc(l.props.children,e)),n.push(c)}),n}/** * React Router DOM v6.21.1 * * Copyright (c) Remix Software Inc. @@ -64,7 +64,7 @@ Error generating stack: `+e.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function rc(s){return s===void 0&&(s=""),new URLSearchParams(typeof s=="string"||Array.isArray(s)||s instanceof URLSearchParams?s:Object.keys(s).reduce((a,n)=>{let l=s[n];return a.concat(Array.isArray(l)?l.map(p=>[n,p]):[[n,l]])},[]))}function KI(s,a){let n=rc(s);return a&&a.forEach((l,p)=>{n.has(p)||a.getAll(p).forEach(e=>{n.append(p,e)})}),n}const SI="startTransition",Bo=Hg[SI];function MI(s){let{basename:a,children:n,future:l,window:p}=s,e=W.useRef();e.current==null&&(e.current=Qd({window:p,v5Compat:!0}));let c=e.current,[t,o]=W.useState({action:c.action,location:c.location}),{v7_startTransition:r}=l||{},d=W.useCallback(I=>{r&&Bo?Bo(()=>o(I)):o(I)},[o,r]);return W.useLayoutEffect(()=>c.listen(d),[c,d]),W.createElement(HI,{basename:a,children:n,location:t.location,navigationType:t.action,navigator:c,future:l})}var fo;(function(s){s.UseScrollRestoration="useScrollRestoration",s.UseSubmit="useSubmit",s.UseSubmitFetcher="useSubmitFetcher",s.UseFetcher="useFetcher",s.useViewTransitionState="useViewTransitionState"})(fo||(fo={}));var Vo;(function(s){s.UseFetcher="useFetcher",s.UseFetchers="useFetchers",s.UseScrollRestoration="useScrollRestoration"})(Vo||(Vo={}));function xI(s){let a=W.useRef(rc(s)),n=W.useRef(!1),l=Hp(),p=W.useMemo(()=>KI(l.search,n.current?null:a.current),[l.search]),e=mI(),c=W.useCallback((t,o)=>{const r=rc(typeof t=="function"?t(p):t);n.current=!0,e("?"+r,o)},[e,p]);return[p,c]}const JI="_component_nqcni_1",zI="_sideNav_nqcni_6",EI="_main_nqcni_13",UI="_children_nqcni_21",Rl={component:JI,sideNav:zI,main:EI,children:UI},TI="_list_1ltry_1",QI="_title_1ltry_6",DI="_listItem_1ltry_11",LI="_listItemActive_1ltry_18",_I="_link_1ltry_26",xa={list:TI,title:QI,listItem:DI,listItemActive:LI,link:_I},OI=[{lang:"Armenian",url:"https://pranatech.org/solidity-by-example-hy/"},{lang:"Persian",url:"https://solidifa.ir/solidity-by-example/"},{lang:"Spanish",url:"https://github.com/lcadafalch/solidity_attacks"},{lang:"Simplified Chinese",url:"https://github.com/Web3-Club/solidity-by-example_Chinese"}],PI=[{path:"hello-world",title:"Hello World"},{path:"first-app",title:"First App"},{path:"primitives",title:"Primitive Data Types"},{path:"variables",title:"Variables"},{path:"constants",title:"Constants"},{path:"immutable",title:"Immutable"},{path:"state-variables",title:"Reading and Writing to a State Variable"},{path:"ether-units",title:"Ether and Wei"},{path:"gas",title:"Gas and Gas Price"},{path:"if-else",title:"If / Else"},{path:"loop",title:"For and While Loop"},{path:"mapping",title:"Mapping"},{path:"array",title:"Array"},{path:"enum",title:"Enum"},{path:"structs",title:"Structs"},{path:"data-locations",title:"Data Locations - Storage, Memory and Calldata"},{path:"function",title:"Function"},{path:"view-and-pure-functions",title:"View and Pure Functions"},{path:"error",title:"Error"},{path:"function-modifier",title:"Function Modifier"},{path:"events",title:"Events"},{path:"constructor",title:"Constructor"},{path:"inheritance",title:"Inheritance"},{path:"shadowing-inherited-state-variables",title:"Shadowing Inherited State Variables"},{path:"super",title:"Calling Parent Contracts"},{path:"visibility",title:"Visibility"},{path:"interface",title:"Interface"},{path:"payable",title:"Payable"},{path:"sending-ether",title:"Sending Ether - Transfer, Send, and Call"},{path:"fallback",title:"Fallback"},{path:"call",title:"Call"},{path:"delegatecall",title:"Delegatecall"},{path:"function-selector",title:"Function Selector"},{path:"calling-contract",title:"Calling Other Contract"},{path:"new-contract",title:"Creating Contracts from a Contract"},{path:"try-catch",title:"Try / Catch"},{path:"import",title:"Import"},{path:"library",title:"Library"},{path:"abi-encode",title:"ABI Encode"},{path:"abi-decode",title:"ABI Decode"},{path:"hashing",title:"Hashing with Keccak256"},{path:"signature",title:"Verifying Signature"},{path:"gas-golf",title:"Gas Optimizations"},{path:"bitwise",title:"Bitwise Operators"},{path:"unchecked-math",title:"Unchecked Math"},{path:"assembly-variable",title:"Assembly Variable"},{path:"assembly-if",title:"Assembly Conditional Statements"},{path:"assembly-loop",title:"Assembly Loop"},{path:"assembly-error",title:"Assembly Error"},{path:"assembly-math",title:"Assembly Math"}],$I=[{path:"ether-wallet",title:"Ether Wallet"},{path:"multi-sig-wallet",title:"Multi Sig Wallet"},{path:"merkle-tree",title:"Merkle Tree"},{path:"iterable-mapping",title:"Iterable Mapping"},{path:"erc20",title:"ERC20"},{path:"erc721",title:"ERC721"},{path:"erc1155",title:"ERC1155"},{path:"gasless-token-transfer",title:"Gasless Token Transfer"},{path:"simple-bytecode-contract",title:"Simple Bytecode Contract"},{path:"create2",title:"Precompute Contract Address with Create2"},{path:"minimal-proxy",title:"Minimal Proxy Contract"},{path:"upgradeable-proxy",title:"Upgradeable Proxy"},{path:"deploy-any-contract",title:"Deploy Any Contract"},{path:"write-to-any-slot",title:"Write to Any Slot"},{path:"uni-directional-payment-channel",title:"Uni-directional Payment Channel"},{path:"bi-directional-payment-channel",title:"Bi-directional Payment Channel"},{path:"english-auction",title:"English Auction"},{path:"dutch-auction",title:"Dutch Auction"},{path:"crowd-fund",title:"Crowd Fund"},{path:"multi-call",title:"Multi Call"},{path:"multi-delegatecall",title:"Multi Delegatecall"},{path:"time-lock",title:"Time Lock"},{path:"assembly-bin-exp",title:"Assembly Binary Exponentiation"}],qI=[{path:"re-entrancy",title:"Re-Entrancy"},{path:"overflow",title:"Arithmetic Overflow and Underflow"},{path:"self-destruct",title:"Self Destruct"},{path:"accessing-private-data",title:"Accessing Private Data"},{path:"delegatecall",title:"Delegatecall"},{path:"randomness",title:"Source of Randomness"},{path:"denial-of-service",title:"Denial of Service"},{path:"phishing-with-tx-origin",title:"Phishing with tx.origin"},{path:"hiding-malicious-code-with-external-contract",title:"Hiding Malicious Code with External Contract"},{path:"honeypot",title:"Honeypot"},{path:"front-running",title:"Front Running"},{path:"block-timestamp-manipulation",title:"Block Timestamp Manipulation"},{path:"signature-replay",title:"Signature Replay"},{path:"contract-size",title:"Bypass Contract Size Check"},{path:"deploy-different-contracts-same-address",title:"Deploy Different Contracts at Same Address"},{path:"vault-inflation",title:"Vault Inflation Attack"},{path:"weth-permit",title:"WETH Permit"}],sC=[{path:"echidna",title:"Echidna"}],aC=[{path:"uniswap-v2",title:"Uniswap V2 Swap"},{path:"uniswap-v2-add-remove-liquidity",title:"Uniswap V2 Add Remove Liquidity"},{path:"uniswap-v2-optimal-one-sided-supply",title:"Uniswap V2 Optimal One Sided Supply"},{path:"uniswap-v2-flash-swap",title:"Uniswap V2 Flash Swap"},{path:"uniswap-v3-swap",title:"Uniswap V3 Swap"},{path:"uniswap-v3-liquidity",title:"Uniswap V3 Liquidity"},{path:"uniswap-v3-flash",title:"Uniswap V3 Flash Loan"},{path:"uniswap-v3-flash-swap",title:"Uniswap V3 Flash Swap Arbitrage"},{path:"chainlink-price-oracle",title:"Chainlink Price Oracle"},{path:"dai-proxy",title:"DAI Proxy"},{path:"staking-rewards",title:"Staking Rewards"},{path:"discrete-staking-rewards",title:"Discrete Staking Rewards"},{path:"vault",title:"Vault"},{path:"constant-sum-amm",title:"Constant Sum AMM"},{path:"constant-product-amm",title:"Constant Product AMM"},{path:"stable-swap-amm",title:"Stable Swap AMM"}],ot=[{title:"",routes:PI.map(s=>({...s,path:`/${s.path}`}))},{title:"Applications",routes:$I.map(s=>({...s,path:`/app/${s.path}`}))},{title:"Hacks",routes:qI.map(s=>({...s,path:`/hacks/${s.path}`}))},{title:"Tests",routes:sC.map(s=>({...s,path:`/tests/${s.path}`}))},{title:"DeFi",routes:aC.map(s=>({...s,path:`/defi/${s.path}`}))}],Cp=ot.map(({routes:s})=>s).flat(),nC=Cp.reduce((s,a,n)=>(s[a.path]=n,s),{});function lC(s){const a=nC[s];if(a>=0){const n=Cp[a-1]||null,l=Cp[a+1]||null;return{prev:n,next:l}}return{prev:null,next:null}}const pC=({onClick:s})=>{const a=Hp();function n(l,p){l.preventDefault(),s(p)}return i.jsxs(i.Fragment,{children:[i.jsx("h3",{className:xa.category,children:"Basic"}),ot.map(({routes:l,title:p},e)=>i.jsxs("div",{children:[p&&i.jsx("h3",{className:xa.title,children:p}),i.jsx("ul",{className:xa.list,children:l.map(({path:c,title:t})=>{const o=!!eg(c,a.pathname);return i.jsx("li",{className:o?xa.listItemActive:xa.listItem,children:i.jsx("a",{className:xa.link,href:c,onClick:r=>n(r,c),children:t})},c)})})]},e))]})},eC=({size:s,className:a="",onClick:n})=>i.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 20 20",strokeWidth:2,stroke:"currentColor",className:a,width:s,height:s,onClick:n,children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"})}),cC="_component_15x91_1",tC="_a_15x91_13",oC="_center_15x91_16",rC="_logo_15x91_21",iC="_header_15x91_24",gC="_mode_15x91_28",hC="_hamburger_15x91_33",aa={component:cC,a:tC,center:oC,logo:rC,header:iC,mode:gC,hamburger:hC},dC=({size:s,className:a=""})=>i.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"#fff",viewBox:"0 0 438.277 438.277",width:s,height:s,className:a,children:i.jsx("path",{d:"M428.756 300.104c-.664-3.81-2.334-7.047-4.996-9.713-5.9-5.903-12.752-7.142-20.554-3.716-20.937 9.708-42.641 14.558-65.097 14.558-28.171 0-54.152-6.94-77.943-20.838-23.791-13.894-42.631-32.736-56.525-56.53-13.899-23.793-20.844-49.773-20.844-77.945 0-21.888 4.333-42.683 12.991-62.384 8.66-19.7 21.176-36.973 37.543-51.82 6.283-5.898 7.713-12.752 4.287-20.557-3.236-7.801-9.041-11.511-17.415-11.132-29.121 1.141-56.72 7.664-82.797 19.556C111.33 31.478 88.917 47.13 70.168 66.548c-18.747 19.414-33.595 42.399-44.54 68.95-10.942 26.553-16.416 54.39-16.416 83.511 0 29.694 5.806 58.054 17.416 85.082 11.613 27.028 27.218 50.344 46.824 69.949 19.604 19.599 42.92 35.207 69.951 46.822 27.028 11.607 55.384 17.415 85.075 17.415 42.64 0 81.987-11.563 118.054-34.69 36.069-23.124 63.05-54.006 80.944-92.645 1.524-3.423 1.951-7.036 1.28-10.838zm-122.191 84.064c-24.646 11.711-50.676 17.562-78.087 17.562-24.743 0-48.39-4.853-70.947-14.558-22.554-9.705-41.971-22.695-58.246-38.972-16.271-16.272-29.259-35.686-38.97-58.241-9.707-22.556-14.561-46.203-14.561-70.948 0-40.922 12.135-77.466 36.403-109.636 24.266-32.165 55.531-53.959 93.788-65.379-19.795 31.405-29.694 65.379-29.694 101.926 0 34.644 8.564 66.715 25.697 96.223 17.128 29.499 40.446 52.811 69.95 69.948 29.499 17.129 61.565 25.694 96.211 25.694 10.656 0 21.129-.855 31.408-2.57-17.318 20.938-38.307 37.255-62.952 48.951z"})}),IC=({size:s,className:a=""})=>i.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 302.4 302.4",width:s,height:s,className:a,children:[i.jsx("path",{d:"M204.8 97.6C191.2 84 172 75.2 151.2 75.2s-40 8.4-53.6 22.4c-13.6 13.6-22.4 32.8-22.4 53.6s8.8 40 22.4 53.6c13.6 13.6 32.8 22.4 53.6 22.4s40-8.4 53.6-22.4c13.6-13.6 22.4-32.8 22.4-53.6s-8.4-40-22.4-53.6zm-14.4 92.8c-10 10-24 16-39.2 16s-29.2-6-39.2-16-16-24-16-39.2 6-29.2 16-39.2 24-16 39.2-16 29.2 6 39.2 16 16 24 16 39.2-6 29.2-16 39.2z",stroke:"#252519",strokeWidth:12}),i.jsx("path",{d:"M292 140.8h-30.8c-5.6 0-10.4 4.8-10.4 10.4 0 5.6 4.8 10.4 10.4 10.4H292c5.6 0 10.4-4.8 10.4-10.4 0-5.6-4.8-10.4-10.4-10.4zm-140.8 110c-5.6 0-10.4 4.8-10.4 10.4V292c0 5.6 4.8 10.4 10.4 10.4 5.6 0 10.4-4.8 10.4-10.4v-30.8c0-5.6-4.8-10.4-10.4-10.4zm106.8-7.2-22-22c-3.6-4-10.4-4-14.4 0s-4 10.4 0 14.4l22 22c4 4 10.4 4 14.4 0s4-10.4 0-14.4zM151.2 0c-5.6 0-10.4 4.8-10.4 10.4v30.8c0 5.6 4.8 10.4 10.4 10.4 5.6 0 10.4-4.8 10.4-10.4V10.4c0-5.6-4.8-10.4-10.4-10.4zm107.2 44.4c-4-4-10.4-4-14.4 0l-22 22c-4 4-4 10.4 0 14.4 3.6 4 10.4 4 14.4 0l22-22c4-4 4-10.4 0-14.4zM41.2 140.8H10.4c-5.6 0-10.4 4.8-10.4 10.4s4.4 10.4 10.4 10.4h30.8c5.6 0 10.4-4.8 10.4-10.4 0-5.6-4.8-10.4-10.4-10.4zm39.2 80.8c-3.6-4-10.4-4-14.4 0l-22 22c-4 4-4 10.4 0 14.4s10.4 4 14.4 0l22-22c4-4 4-10.4 0-14.4zm0-155.2-22-22c-4-4-10.4-4-14.4 0s-4 10.4 0 14.4l22 22c4 4 10.4 4 14.4 0s4-10.4 0-14.4z",stroke:"#252519",strokeWidth:5})]}),CC=({size:s,className:a="",fill:n})=>i.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1300 1300",xmlSpace:"preserve",width:s,height:s,className:a,fill:n,children:[i.jsx("path",{opacity:.45,d:"M773.772 253.308 643.068 485.61H381.842l130.614-232.302h261.316"}),i.jsx("path",{opacity:.6,d:"M643.068 485.61h261.318L773.772 253.308H512.456L643.068 485.61z"}),i.jsx("path",{opacity:.8,d:"M512.456 717.822 643.068 485.61 512.456 253.308 381.842 485.61l130.614 232.212z"}),i.jsx("path",{opacity:.45,d:"m513.721 1066.275 130.704-232.303h261.318l-130.705 232.303H513.721"}),i.jsx("path",{opacity:.6,d:"M644.424 833.973H383.107l130.613 232.303h261.317L644.424 833.973z"}),i.jsx("path",{opacity:.8,d:"M775.038 601.761 644.424 833.973l130.614 232.303 130.704-232.303-130.704-232.212z"})]});function jC(){const{state:s,setTheme:a,toggleSideNav:n}=et();function l(){a(s.theme=="light"?"dark":"light")}return i.jsxs("div",{className:aa.component,children:[i.jsx(eC,{size:20,className:aa.hamburger,onClick:n}),i.jsxs("div",{className:aa.center,children:[i.jsx("a",{href:"/",className:aa.a,children:i.jsx(CC,{className:aa.logo,size:30,fill:s.theme=="dark"?"rgb(0, 255, 0)":"currentColor"})}),i.jsx("h3",{className:aa.header,children:i.jsx("a",{href:"/",className:aa.a,children:"Solidity by Example"})})]}),i.jsx("button",{className:aa.mode,onClick:l,children:s.theme=="dark"?i.jsx(dC,{size:20}):i.jsx(IC,{size:20})})]})}const dg="https://cryptojobslist.com/solidity",uC="_component_h47vh_1",yC="_row_h47vh_8",AC="_bar_h47vh_13",mC="_to_h47vh_21",bC="_social_h47vh_24",wC="_sce_h47vh_29",kC="_telegram_h47vh_34",ZC="_discord_h47vh_38",WC="_youTube_h47vh_42",ds={component:uC,row:yC,bar:AC,to:mC,social:bC,sce:wC,telegram:kC,discord:ZC,youTube:WC},GC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK0AAADACAYAAAB2xePHAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAtdEVYdENyZWF0aW9uIFRpbWUARnJpIDE5IEZlYiAyMDIxIDA2OjI5OjE1IEFNIEpTVJ0PYF0AAA5FSURBVHic7Z3Li2RXHce/5956d1dXV/ekk0AmBCQORLIZRSQm2cSJQUwWMiAJJBo3uhAh/huBBCQLXWhMAgnCrBJQ40SQPHyAzia4mOhCbITY8+iurld3Vd17XHTa6a7p6rqP3z3n9zt1Pqt59ONU1bdunfs7n9856r7PPaDh8QgisD0AjyctPrQecfjQesThQ+sRhw+tRxw+tB5x+NB6xOFD6xGHD61HHD60HnH40HrE4UPrEYcPrUccPrQecfjQesRRsj0A04zvGSO+e2x7GPnZC1D9uGZ7FFZYqNDqksb1F/8DBFr8Z0z4aQntF+9E+d8V20MxjvCXLh27z91AdM8Y0ls11Egh6IQYPLFreyhWWJjQRq0I3W/vHPz5rjEQyY1uuFWCgsLk3jH2HxzaHo5xFia0Oz/cAhoHQVWBghb6qar6AYJ++P+/Dx7vQpfkvgGzsBChHd+3j+GF3rF/izYmwMTSgHJQ2jp+GxK3I+w91Lc0GjssRGi3f7wFhMf/TWmFuBnbGVBGgp0QanT7SzZ4tId4KbIwIjs4H9rhV3rYP3/yvE+3YkBK9StWCK/PKPbUNAaP9U7+PwdxPrQ7P7oOpdXM/4/ORNCa/5wwvBFCRbMfx/6XBphsSHkH5sPp0HYvbiM6O+eFrOtTw8ABNVYItsPTvyjAwpTAnA1tXIux+92bib42umsCMJ7ehtdKp35aHDL+/Aij+/cMjMguzoa28/3rB3PWJJQAHfCcIqhhgKA75yp7hMETXbaPhQonQzvZGKP/VCfV90R38iyBhVvpVtqjOyfY/+KgoNHwwMnQ7rywBaRcPFBKIW7wukIFuyGCvfQv0eCxHuIq4/lOTpwL7f4XBhh+NVuxXa9FwJjJTZnG7BLXvG9djjF81N0SmHOh3X7hGpTKHry4PWFRAgu3Q6gcb6C9h/qI2gznOwQ4Fdr+4x1Mzo1y/Qy9rKEmlq+2kUJwI6c1Wj7wElzEmdDGYYzOD26Q/KxoYwId27vahtdKUHH+N87+g0OM7833JuaIM6Htfucm4juI1t+rAGDnanvgytK8LArKyQUHJ0J71JUl+5mWnNtDV5YKF51bJ0J71JWlwoZzO+3KUuGacys+tCe5slSYdm6nXVkqXHNuxYf2JFeWCpPO7SxXlgqXnFvRoT3NlaXCiHN7mitLhUPOrejQznNlqYjbxTq381xZKlxxbsWGNpErS0SRCw6JXFkqAmDwNfkLDiJDm8aVpaKoBYekriwVowf2xC84iAxtKleWigIWHNK6siS/04EFB3GhzeLKUkG94JDWlaVC+oKDuNBmcWWpoFxwyOrKUiF5wUFUaPO4slSQLDjkcGWpkLzgICq0eV1ZCigWHPK6slRIXXAQE1oKV5aKXAsOFK4sFUIXHESEltKVpSLrJh9UriwVEhccRISW1JWlIsMmH5SuLBkCN/lg9gzeThGuLBVpN/mgdmWpkLbJB/vQFuHKkpFik4+iXFkqJG3ywTq0RbqyVCTd5KMoV5YKSZt8sA5tka4sFUk2+SjalaVCyiYfbJ9JE64sFadu8mHClSVCyiYfbENrypWlYtYmH6ZcWSokbPLBMrQmXVkqTnJujbqyVAjY5INdaG24slRMO7emXVkquG/ywS60VlxZKo44tzZcWSq4O7esQmvTlaXi0Lm15cpSwdm5ZfXMDh/vQUUBwPO5SoQCUPmkjvoflm0PJT9VnosNrELbeGcFvW90oBtCpwc4uPlqvXIGpa2y7aE4C6vpQdgJ0by0ansYuVh6p+UDWzCsQgscvOhS54NBJ8Sy8DedBNiFVo0VWj9ftz2MTDTfbCMYsHtKnYPlM1z7yxKqV+q2h5GK0mYZjctN28NYCFiGFgBWXl0HmHnfp7Hy6jqrjgSXYRva8mYFjcsrtoeRiOqVOmpXGraHsTCwDS0ANN9qQ3GfI0affSp4jME6ERJKYI3LKyhvWto9ZEFhHVqAdwlMDQI032rbHsbCwT60aqyw8vqa7WGcSPPSKsKOTClGMuxDCwD1D5dRuVq1PYxjhFslLL3Tsj2MhUREaAFg5Re8bnZWXl9jsbXRIiImtJWrNdQ/4GFOVa5WUf+Qx1gWETGhBYDmG20WVzduV/1FQ1RoS1tl6/PI+gfLqFytWR3DoiMqtACwfGkVgaU7djVWaL7hS1y2ERfaYBCg+aad4HhXlgfiQgsAjctNlDbNhifcKnlXlgkiQ6tiZXy9f+X1Ne/KMkHsq1C70jDm3PoSFy/EhhYw59xyLXHpCs9u2aIRHVoTzi3XElf/67vof1P2HhFZER1aoFjnlmuJK27E6D6zje7FHUQtQe0dRIgPbZHOLdcSV+/iDuJWBN2I0X162/ZwjCM+tEAxzi3XdvCoFaH/5K1pweDCLsZn+W4WVwROhLYI55ZrO3j36W3o8pEbsBDYfZ7XcVVFw+9VyQilc8u1HXx8doTBhdt3M9w/P8TeeRnnJVDgTGgButIU13bw3edvzDyDYvf5G2JOp8mLU6GlcG65toPvnR+cegbF5OwYgwu8d/CmwqnQAjmdW6bt4DrQieat3We2EQvecTIpzoU2j3PLtR18cKGLSYIzKOJWhN5FnqdbUuJcaIFszi3XdvDDhYSk9J/siDugOS1OhjaLc8u1HfxwISEpuqzRfdbtBQcnQwukc265toNPNsbHFhKSMnykh9E5OQc0p8XZ0KZxbrm2g3efnVpISMHu99xdcHA2tEAy55arKzs6t4fhI9mP/Byd28fwYf5HhmbB6dAC851brq4sxZVy97mbma/UnHE+tKc5t1xd2eHDPYzO7ef+OdHGJNOcmDvOhxY4cG6nS2BcXVld1th9ju6YVRed24UIbdgJbyuBcXVl+092EG3QnQLuonO7EKEFjpfAOLuy3QJWtFxzbhcmtEdLYKxd2SLcAcecW36vXIHUrjSw/HYLS+/xO4BklitLhUvO7UKFFvisxMXwvuQ0V5byd7jg3C5caDkyz5WlwhXn1ofWMkldWSpccG59aC2T1JWlIm5F6D8le8HBh9YiaV1ZKnpPdUQvOPjQWiStK0uF9AUHH1pLZHVlqZC84OBDa4k8riwJghccfGgtkNeVpULqgoMPrQU4dRVIXHDwoTUMlStLhcQFBx9ag1C7slRIW3DwoTUItStLhbRNPnxoDVGUK0uFpE0+fGgNUZgrS4SkTT58aA1QtCtLhZRNPnxoDWDClaWCUzluFj60BWPKlaVCwiYfPrQFYtqVpYL7Jh8+tAVi2pWlgvsmHz60BWHLlaWC8yYfPrQFYcuVpYKzc0t7YlxO4uUYe1/u2x5GfqoavYs70DW+88Ik9L/VQeu1Naghr2sbq9AGvQDj+/dFzgOPMrl7DAwVdFvulRYAah822AUWYDg9aPx6BRpyr1BxLUa8EgHQgMzGgANGwOrLG7ZHcSLsQlverKD68ekbIXPmUIhRgUL4X1YfZKlYepvnBn0Aw9ACQOPdJsBPhppL3Iyg67f8Al3SUD1+2+LPQ3UCtH52xvYwZsIytOFOCbWPlmwPIxVaaUR3HH+nKaUQbMu72q78cg3BHstoAGAaWgCov78M1ZdzlYrb0cmrSGUNdVOIeAAg3CyjeYnfZtNHYRvaYD9A4z1+J4GfhA41ovXZlYJgoKBj/jeXWmms/oTvtOAQtqEFgOrfGgi3+H+8RmcmwGnNgSUg/JTnTc1RqlfqqP+Z30k/07AOrYoV+xKYrsSIV5PUY5mXwCKg/RLPEtc0rEMLAJV/VlmXwCYJe764l8Dql5dR/lfV9jASwT60AN8SWLwUQS8lb6FhWwIbKKy+IuMqCwgJLccSmIZO3VnLtQTW/BXPw6xnISK0AL8SWNyKoSsZ5trMSmDBtRDN19ZsDyMVYkLLqQSmg9sXEtIQDBS05nFz2frpOoJITAwACAotwKcEFq9PgDBH6EpgcVNWulrB0u9atoeRGlGhVbFC4zd2r7a6rBERKIcqVlZvLrXWaL98h70B5EBUaAGg8o8ayp9UrP3+6MwEoJhaB0D4qb2rbf2jJVT/3rD2+/MgLrQA0PjtCmBhs5ZbriwNOtTA0MLNJWNXNgkiQ1vaKqP6V/NXCerN45RSCK+bryRwdmWTIDK0AND4/TKwZ+4qNe3KklE+8FdNwd2VTYLY0Ab9EI33zcgdeUtc8wi6AbQyUwLj7somQfToa39cQrBT/EOI1yfF7rhSgpFSXumTCntXNgmiQ6smCo13iz1RnKrENQ81Kta51Vqj/ZLMEtc0okMLANWP6yhtFndTQVbimkdYrHMrucQ1jfjQAsW1nVOXuOZTkHMrvMQ1jROhLart3PT5CEU5t9JLXNM4EVqA3rktrMQ1B2rn1oUS1zTOhJbSuT2pHdwU1M6tCyWuaZx6NFTO7cx2cFMQObcS2sGz4FRoKZzbee3gpsjr3EppB8+CU6EF8ju3c9vBTZHTuZXSDp4F50Kbx7lN3g5uhszOraB28Cw4F1ogu3ObtB3cGBmdW0nt4FlwMrRAeuc2bTu4KVI7t8LawbPgbGjTOLdZ2sFNkda5ldYOngVnQwskd24zt4ObIqFzK7EdPAtOhzaJc1u0K0tFEudWYjt4Fpx/hPOc29zt4KaY49xKbQfPgvOhPc25NeXKUjHLuZXcDp4F50MLzHZujbmyVMxwbl1yZZOwEKEFbnduzbuyVEw5t465sklYmNBOO7dcS1zzUIE6Nrd1zZVNwsKEFrjl3NpyZckoHZTAXHRlk7BQoQ13Sqj9aUlEiWseQTdEy0FXNgnqvs89IKDe4/HcYvHeph7x+NB6xOFD6xGHD61HHD60HnH40HrE4UPrEYcPrUccPrQecfjQesThQ+sRhw+tRxw+tB5x+NB6xOFD6xGHD61HHD60HnH40HrE8T8YG8SKlmk4HgAAAABJRU5ErkJggg==",Ig="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAyCAYAAAAOX8ZtAAAABmJLR0QA/wD/AP+gvaeTAAADmUlEQVRoge3bT2wUZRjH8c9Ml39S09IC/uFiRBIwabzVE15oiJBwLBcP3npS4E4IBA/EAwmcCInhoCeJNwgQoDGRC8GESMDYhJRyUAQplZa2tBYdD+9suqmsadHO+6J8kzd5Z3Znnt/+9p1ndt593swCKViFV7EWK8vWjpewouyvLLdfLg9rxZKG0ywt39NIOzL8gdE5r42W++uMY6bs/4pJTOARxsr+RHncOO7hbsbjhXzWrNkLBcvxPt5FF97Ga8L+55VR/Ijv8R0u45uM3+d9hoK+gnsFxf+g3S74cD6mrCj4PAHBMdpXRUgLTc35IgGRMduXzYz5OAFxKbSP6p5kpTHtuI22eSem/y4P8UbGaF7u6PXCmDrtgh/q5vTE05IkPcya0x1RSIp0Q1aEy+lhZDEpsirH+tgqEmV9jjdjq0iUt3Ksi60iUdbl6Kw05NatrFlTachnpDPH6kpD7tjBrVscOMCyZZWGXiCrqzcHWlvZv5/r1+ntrTz8POms/rJqZMMGTp7k4kW6uqLJaMLqHB2xVdiyhatXOX48pXzUmQvTmfGp1ejrY2CA3bvDdlyW50grK3Z0cORIyEfbtsVUsjQ9c+ps3MiZM1y4wKZNMRQsS9ecOj09XLvG0aO0VTqrkvDIaWTJEnbtYnAw5KOWliqiPgcjp5HOzpCPrlxh8+bFjrY0R7HYUZ5Tshy/xVYxb4aH2bOH7m4uXVrsaFM1TEvlt04zZmY4dox9+xgbqyrqdN2cdDl9OoyWwcGqI0/nUjVnYIDt28NTfPXGkKQ5IyNhpHR1cfZsTCVTNaF8Iz5PnnDiBHv3hsQbn6kaRmKr0N8fRsuNG7GVNDKcI97XdPMmO3eGR4S0jIHhmhjmjI9z+DCHDjGdVsprIII5p05x8CD371ca9hl4UMODSkOeP19puH/AcI47sVUkys85bsVWkSiDLwoJmtOWZ6H8dCi2ksQYyhir1+dciSolPb5ltnipP6KQFPmaFwWTT+ORUDA5kkMWEvIncTUlw6fZ3OfNgpaCUwnUAcds/QVP/6u1YHnBZwmIjNHOFbOrfJpT8EHBUAKCq2h3i1C9n8/14e+WFLXgPWFJ0TvCkqLXxajn+fd4jJ/wg7Cs6DLOZU1mQ5ua04wi/Am4Fq8Id7lWs4vSVjX0W4W7X17GaZ9zqvriszr19xb++ov9EZ40bD/GVNkfFWYzJ8vjJsp+fWHaJH7BnSzsmzd/AkgxNaTAmykLAAAAAElFTkSuQmCC",BC="/assets/telegram-zGrx4xca.png",fC="/assets/discord-akqDA9xj.png";function VC(){return i.jsxs("div",{className:ds.component,children:[i.jsxs("div",{className:ds.row,children:[i.jsx("img",{src:GC,alt:"smart contract engineer",className:ds.sce}),i.jsx("a",{href:"https://www.smartcontract.engineer",target:"__blank",children:"Smart Contract Engineer"})]}),i.jsxs("div",{className:ds.social,children:[i.jsxs("div",{className:ds.row,children:[i.jsx("img",{src:fC,alt:"discord",className:ds.discord}),i.jsx("a",{href:"https://discord.gg/bt8FK2wkcW",target:"__blank",children:"Discord"})]}),i.jsxs("div",{className:ds.row,children:[i.jsx("img",{src:BC,alt:"telegram",className:ds.telegram}),i.jsx("a",{href:"https://t.me/smartcontractprogrammer",target:"__blank",children:"Telegram"})]}),i.jsxs("div",{className:ds.row,children:[i.jsx("img",{src:Ig,alt:"youtube",className:ds.youTube}),i.jsx("a",{href:"https://www.youtube.com/channel/UCJWh7F3AFyQ_x01VKzr9eyA",target:"__blank",children:"YouTube"})]})]}),i.jsx("div",{className:ds.row,children:i.jsx("a",{href:"mailto:contact@solidity-by-example.org",children:"contact@solidity-by-example.org"})}),i.jsxs("div",{className:ds.row,children:[i.jsx("a",{href:"https://github.com/solidity-by-example/solidity-by-example.github.io",target:"__blank",children:"Source"}),i.jsx("div",{className:ds.bar,children:"|"}),i.jsx("a",{href:"https://github.com/solidity-by-example/solidity-by-example.github.io/blob/gh-pages/LICENSE",target:"__blank",children:"License"}),i.jsx("div",{className:ds.bar,children:"|"}),i.jsx("a",{href:dg,target:"__blank",children:"Solidity jobs"})]})]})}const YC=({children:s})=>{const{state:a}=et(),n=W.useRef(null);W.useLayoutEffect(()=>{n.current&&(n.current.scrollTop=parseInt(sessionStorage.getItem("scroll")||"0")||0)},[]);function l(p){var e;sessionStorage.setItem("scroll",(((e=n.current)==null?void 0:e.scrollTop)||0).toString()),window.location.href=p}return i.jsxs("div",{className:Rl.component,children:[i.jsx("div",{ref:n,className:Rl.sideNav,style:a.sideNav?{width:"var(--side-nav-width)",padding:"20px 10px 60px 10px"}:{width:0},children:a.sideNav?i.jsx(pC,{onClick:l}):null}),i.jsxs("div",{className:Rl.main,children:[i.jsx(jC,{}),i.jsxs("div",{className:Rl.children,children:[s,i.jsx(VC,{})]})]})]})},Cg=({title:s,description:a})=>(W.useEffect(()=>{document.title=s;const n=document.querySelector("meta[name='description']");n&&n.setAttribute("content",a)},[]),null),Yo=' ',RC='';function vC(s=[]){W.useEffect(()=>{const a=p=>{try{const e=document.createElement("textarea");e.setAttribute("style","width:1px;border:0;opacity:0;"),document.body.appendChild(e),navigator.clipboard.writeText(p.innerText),document.body.removeChild(e)}catch(e){console.error(e)}},n=[];return document.querySelectorAll("pre").forEach(p=>{var r;if(((r=p.parentElement)==null?void 0:r.className)=="copy-wrapper")return;const e=document.createElement("div");e.className="copy-wrapper",p.parentElement.insertBefore(e,p),e.appendChild(p);const c=document.createElement("button");c.className="copy",c.title="Copy",c.innerHTML=Yo,c.ariaLabel="Copy to clipboard",p.after(c);function t(d){d.preventDefault(),a(p.childNodes[0]),c.innerHTML=RC}function o(d){d.preventDefault(),c.innerHTML=Yo}c.addEventListener("click",t),c.addEventListener("blur",o),n.push(()=>{c.removeEventListener("click",t),c.removeEventListener("blur",o)})}),()=>{for(let p=0;p(vC([]),i.jsx("div",{className:`code ${s}`,dangerouslySetInnerHTML:{__html:a}})),NC="_component_ni5i2_1",HC="_content_ni5i2_5",FC="_prevNext_ni5i2_8",he={component:NC,content:HC,prevNext:FC},u=({title:s,version:a,description:n,html:l,prev:p,next:e,codes:c})=>i.jsxs("div",{className:he.component,children:[i.jsx(Cg,{title:`${s} | Solidity by Example | ${a}`,description:n}),i.jsxs("div",{className:he.content,children:[i.jsx("h2",{children:s}),i.jsx(XC,{html:l}),i.jsxs("div",{className:he.prevNext,children:[p&&i.jsxs("a",{href:p.path,children:["< ",p.title]}),e&&i.jsxs("a",{href:e.path,children:[e.title," >"]})]}),i.jsx("h3",{children:"Try on Remix"}),i.jsx("ul",{children:c.map(({fileName:t,code:o},r)=>i.jsx("li",{children:i.jsx("a",{href:`https://remix.ethereum.org/?#code=${o}`,target:"_blank",rel:"noreferrer",children:t})},r))})]})]}),KC="0.8.24",SC="ABI Decode",MC="ABI decode bytes",xC=[{fileName:"AbiDecode.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFiaURlY29kZSB7CiAgICBzdHJ1Y3QgTXlTdHJ1Y3QgewogICAgICAgIHN0cmluZyBuYW1lOwogICAgICAgIHVpbnQyNTZbMl0gbnVtczsKICAgIH0KCiAgICBmdW5jdGlvbiBlbmNvZGUoCiAgICAgICAgdWludDI1NiB4LAogICAgICAgIGFkZHJlc3MgYWRkciwKICAgICAgICB1aW50MjU2W10gY2FsbGRhdGEgYXJyLAogICAgICAgIE15U3RydWN0IGNhbGxkYXRhIG15U3RydWN0CiAgICApIGV4dGVybmFsIHB1cmUgcmV0dXJucyAoYnl0ZXMgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIGFiaS5lbmNvZGUoeCwgYWRkciwgYXJyLCBteVN0cnVjdCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVjb2RlKGJ5dGVzIGNhbGxkYXRhIGRhdGEpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoCiAgICAgICAgICAgIHVpbnQyNTYgeCwKICAgICAgICAgICAgYWRkcmVzcyBhZGRyLAogICAgICAgICAgICB1aW50MjU2W10gbWVtb3J5IGFyciwKICAgICAgICAgICAgTXlTdHJ1Y3QgbWVtb3J5IG15U3RydWN0CiAgICAgICAgKQogICAgewogICAgICAgIC8vICh1aW50IHgsIGFkZHJlc3MgYWRkciwgdWludFtdIG1lbW9yeSBhcnIsIE15U3RydWN0IG15U3RydWN0KSA9IC4uLgogICAgICAgICh4LCBhZGRyLCBhcnIsIG15U3RydWN0KSA9CiAgICAgICAgICAgIGFiaS5kZWNvZGUoZGF0YSwgKHVpbnQyNTYsIGFkZHJlc3MsIHVpbnQyNTZbXSwgTXlTdHJ1Y3QpKTsKICAgIH0KfQo="}],JC=`

abi.encode encodes data into bytes.

+ */function rc(s){return s===void 0&&(s=""),new URLSearchParams(typeof s=="string"||Array.isArray(s)||s instanceof URLSearchParams?s:Object.keys(s).reduce((a,n)=>{let l=s[n];return a.concat(Array.isArray(l)?l.map(p=>[n,p]):[[n,l]])},[]))}function KI(s,a){let n=rc(s);return a&&a.forEach((l,p)=>{n.has(p)||a.getAll(p).forEach(e=>{n.append(p,e)})}),n}const SI="startTransition",Bo=Hg[SI];function MI(s){let{basename:a,children:n,future:l,window:p}=s,e=W.useRef();e.current==null&&(e.current=Qd({window:p,v5Compat:!0}));let c=e.current,[t,o]=W.useState({action:c.action,location:c.location}),{v7_startTransition:r}=l||{},d=W.useCallback(I=>{r&&Bo?Bo(()=>o(I)):o(I)},[o,r]);return W.useLayoutEffect(()=>c.listen(d),[c,d]),W.createElement(HI,{basename:a,children:n,location:t.location,navigationType:t.action,navigator:c,future:l})}var Vo;(function(s){s.UseScrollRestoration="useScrollRestoration",s.UseSubmit="useSubmit",s.UseSubmitFetcher="useSubmitFetcher",s.UseFetcher="useFetcher",s.useViewTransitionState="useViewTransitionState"})(Vo||(Vo={}));var fo;(function(s){s.UseFetcher="useFetcher",s.UseFetchers="useFetchers",s.UseScrollRestoration="useScrollRestoration"})(fo||(fo={}));function xI(s){let a=W.useRef(rc(s)),n=W.useRef(!1),l=Hp(),p=W.useMemo(()=>KI(l.search,n.current?null:a.current),[l.search]),e=mI(),c=W.useCallback((t,o)=>{const r=rc(typeof t=="function"?t(p):t);n.current=!0,e("?"+r,o)},[e,p]);return[p,c]}const JI="_component_nqcni_1",zI="_sideNav_nqcni_6",EI="_main_nqcni_13",UI="_children_nqcni_21",Rl={component:JI,sideNav:zI,main:EI,children:UI},TI="_list_1ltry_1",QI="_title_1ltry_6",DI="_listItem_1ltry_11",LI="_listItemActive_1ltry_18",_I="_link_1ltry_26",xa={list:TI,title:QI,listItem:DI,listItemActive:LI,link:_I},OI=[{lang:"Armenian",url:"https://pranatech.org/solidity-by-example-hy/"},{lang:"Persian",url:"https://solidifa.ir/solidity-by-example/"},{lang:"Spanish",url:"https://github.com/lcadafalch/solidity_attacks"},{lang:"Simplified Chinese",url:"https://github.com/Web3-Club/solidity-by-example_Chinese"}],PI=[{path:"hello-world",title:"Hello World"},{path:"first-app",title:"First App"},{path:"primitives",title:"Primitive Data Types"},{path:"variables",title:"Variables"},{path:"constants",title:"Constants"},{path:"immutable",title:"Immutable"},{path:"state-variables",title:"Reading and Writing to a State Variable"},{path:"ether-units",title:"Ether and Wei"},{path:"gas",title:"Gas and Gas Price"},{path:"if-else",title:"If / Else"},{path:"loop",title:"For and While Loop"},{path:"mapping",title:"Mapping"},{path:"array",title:"Array"},{path:"enum",title:"Enum"},{path:"structs",title:"Structs"},{path:"data-locations",title:"Data Locations - Storage, Memory and Calldata"},{path:"function",title:"Function"},{path:"view-and-pure-functions",title:"View and Pure Functions"},{path:"error",title:"Error"},{path:"function-modifier",title:"Function Modifier"},{path:"events",title:"Events"},{path:"constructor",title:"Constructor"},{path:"inheritance",title:"Inheritance"},{path:"shadowing-inherited-state-variables",title:"Shadowing Inherited State Variables"},{path:"super",title:"Calling Parent Contracts"},{path:"visibility",title:"Visibility"},{path:"interface",title:"Interface"},{path:"payable",title:"Payable"},{path:"sending-ether",title:"Sending Ether - Transfer, Send, and Call"},{path:"fallback",title:"Fallback"},{path:"call",title:"Call"},{path:"delegatecall",title:"Delegatecall"},{path:"function-selector",title:"Function Selector"},{path:"calling-contract",title:"Calling Other Contract"},{path:"new-contract",title:"Creating Contracts from a Contract"},{path:"try-catch",title:"Try / Catch"},{path:"import",title:"Import"},{path:"library",title:"Library"},{path:"abi-encode",title:"ABI Encode"},{path:"abi-decode",title:"ABI Decode"},{path:"hashing",title:"Hashing with Keccak256"},{path:"signature",title:"Verifying Signature"},{path:"gas-golf",title:"Gas Optimizations"},{path:"bitwise",title:"Bitwise Operators"},{path:"unchecked-math",title:"Unchecked Math"},{path:"assembly-variable",title:"Assembly Variable"},{path:"assembly-if",title:"Assembly Conditional Statements"},{path:"assembly-loop",title:"Assembly Loop"},{path:"assembly-error",title:"Assembly Error"},{path:"assembly-math",title:"Assembly Math"}],$I=[{path:"ether-wallet",title:"Ether Wallet"},{path:"multi-sig-wallet",title:"Multi Sig Wallet"},{path:"merkle-tree",title:"Merkle Tree"},{path:"iterable-mapping",title:"Iterable Mapping"},{path:"erc20",title:"ERC20"},{path:"erc721",title:"ERC721"},{path:"erc1155",title:"ERC1155"},{path:"gasless-token-transfer",title:"Gasless Token Transfer"},{path:"simple-bytecode-contract",title:"Simple Bytecode Contract"},{path:"create2",title:"Precompute Contract Address with Create2"},{path:"minimal-proxy",title:"Minimal Proxy Contract"},{path:"upgradeable-proxy",title:"Upgradeable Proxy"},{path:"deploy-any-contract",title:"Deploy Any Contract"},{path:"write-to-any-slot",title:"Write to Any Slot"},{path:"uni-directional-payment-channel",title:"Uni-directional Payment Channel"},{path:"bi-directional-payment-channel",title:"Bi-directional Payment Channel"},{path:"english-auction",title:"English Auction"},{path:"dutch-auction",title:"Dutch Auction"},{path:"crowd-fund",title:"Crowd Fund"},{path:"multi-call",title:"Multi Call"},{path:"multi-delegatecall",title:"Multi Delegatecall"},{path:"time-lock",title:"Time Lock"},{path:"assembly-bin-exp",title:"Assembly Binary Exponentiation"}],qI=[{path:"re-entrancy",title:"Re-Entrancy"},{path:"overflow",title:"Arithmetic Overflow and Underflow"},{path:"self-destruct",title:"Self Destruct"},{path:"accessing-private-data",title:"Accessing Private Data"},{path:"delegatecall",title:"Delegatecall"},{path:"randomness",title:"Source of Randomness"},{path:"denial-of-service",title:"Denial of Service"},{path:"phishing-with-tx-origin",title:"Phishing with tx.origin"},{path:"hiding-malicious-code-with-external-contract",title:"Hiding Malicious Code with External Contract"},{path:"honeypot",title:"Honeypot"},{path:"front-running",title:"Front Running"},{path:"block-timestamp-manipulation",title:"Block Timestamp Manipulation"},{path:"signature-replay",title:"Signature Replay"},{path:"contract-size",title:"Bypass Contract Size Check"},{path:"deploy-different-contracts-same-address",title:"Deploy Different Contracts at Same Address"},{path:"vault-inflation",title:"Vault Inflation Attack"},{path:"weth-permit",title:"WETH Permit"}],sC=[{path:"echidna",title:"Echidna"}],aC=[{path:"uniswap-v2",title:"Uniswap V2 Swap"},{path:"uniswap-v2-add-remove-liquidity",title:"Uniswap V2 Add Remove Liquidity"},{path:"uniswap-v2-optimal-one-sided-supply",title:"Uniswap V2 Optimal One Sided Supply"},{path:"uniswap-v2-flash-swap",title:"Uniswap V2 Flash Swap"},{path:"uniswap-v3-swap",title:"Uniswap V3 Swap"},{path:"uniswap-v3-liquidity",title:"Uniswap V3 Liquidity"},{path:"uniswap-v3-flash",title:"Uniswap V3 Flash Loan"},{path:"uniswap-v3-flash-swap",title:"Uniswap V3 Flash Swap Arbitrage"},{path:"chainlink-price-oracle",title:"Chainlink Price Oracle"},{path:"dai-proxy",title:"DAI Proxy"},{path:"staking-rewards",title:"Staking Rewards"},{path:"discrete-staking-rewards",title:"Discrete Staking Rewards"},{path:"vault",title:"Vault"},{path:"constant-sum-amm",title:"Constant Sum AMM"},{path:"constant-product-amm",title:"Constant Product AMM"},{path:"stable-swap-amm",title:"Stable Swap AMM"}],ot=[{title:"",routes:PI.map(s=>({...s,path:`/${s.path}`}))},{title:"Applications",routes:$I.map(s=>({...s,path:`/app/${s.path}`}))},{title:"Hacks",routes:qI.map(s=>({...s,path:`/hacks/${s.path}`}))},{title:"Tests",routes:sC.map(s=>({...s,path:`/tests/${s.path}`}))},{title:"DeFi",routes:aC.map(s=>({...s,path:`/defi/${s.path}`}))}],Cp=ot.map(({routes:s})=>s).flat(),nC=Cp.reduce((s,a,n)=>(s[a.path]=n,s),{});function lC(s){const a=nC[s];if(a>=0){const n=Cp[a-1]||null,l=Cp[a+1]||null;return{prev:n,next:l}}return{prev:null,next:null}}const pC=({onClick:s})=>{const a=Hp();function n(l,p){l.preventDefault(),s(p)}return i.jsxs(i.Fragment,{children:[i.jsx("h3",{className:xa.category,children:"Basic"}),ot.map(({routes:l,title:p},e)=>i.jsxs("div",{children:[p&&i.jsx("h3",{className:xa.title,children:p}),i.jsx("ul",{className:xa.list,children:l.map(({path:c,title:t})=>{const o=!!eg(c,a.pathname);return i.jsx("li",{className:o?xa.listItemActive:xa.listItem,children:i.jsx("a",{className:xa.link,href:c,onClick:r=>n(r,c),children:t})},c)})})]},e))]})},eC=({size:s,className:a="",onClick:n})=>i.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 20 20",strokeWidth:2,stroke:"currentColor",className:a,width:s,height:s,onClick:n,children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"})}),cC="_component_15x91_1",tC="_a_15x91_13",oC="_center_15x91_16",rC="_logo_15x91_21",iC="_header_15x91_24",gC="_mode_15x91_28",hC="_hamburger_15x91_33",aa={component:cC,a:tC,center:oC,logo:rC,header:iC,mode:gC,hamburger:hC},dC=({size:s,className:a=""})=>i.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"#fff",viewBox:"0 0 438.277 438.277",width:s,height:s,className:a,children:i.jsx("path",{d:"M428.756 300.104c-.664-3.81-2.334-7.047-4.996-9.713-5.9-5.903-12.752-7.142-20.554-3.716-20.937 9.708-42.641 14.558-65.097 14.558-28.171 0-54.152-6.94-77.943-20.838-23.791-13.894-42.631-32.736-56.525-56.53-13.899-23.793-20.844-49.773-20.844-77.945 0-21.888 4.333-42.683 12.991-62.384 8.66-19.7 21.176-36.973 37.543-51.82 6.283-5.898 7.713-12.752 4.287-20.557-3.236-7.801-9.041-11.511-17.415-11.132-29.121 1.141-56.72 7.664-82.797 19.556C111.33 31.478 88.917 47.13 70.168 66.548c-18.747 19.414-33.595 42.399-44.54 68.95-10.942 26.553-16.416 54.39-16.416 83.511 0 29.694 5.806 58.054 17.416 85.082 11.613 27.028 27.218 50.344 46.824 69.949 19.604 19.599 42.92 35.207 69.951 46.822 27.028 11.607 55.384 17.415 85.075 17.415 42.64 0 81.987-11.563 118.054-34.69 36.069-23.124 63.05-54.006 80.944-92.645 1.524-3.423 1.951-7.036 1.28-10.838zm-122.191 84.064c-24.646 11.711-50.676 17.562-78.087 17.562-24.743 0-48.39-4.853-70.947-14.558-22.554-9.705-41.971-22.695-58.246-38.972-16.271-16.272-29.259-35.686-38.97-58.241-9.707-22.556-14.561-46.203-14.561-70.948 0-40.922 12.135-77.466 36.403-109.636 24.266-32.165 55.531-53.959 93.788-65.379-19.795 31.405-29.694 65.379-29.694 101.926 0 34.644 8.564 66.715 25.697 96.223 17.128 29.499 40.446 52.811 69.95 69.948 29.499 17.129 61.565 25.694 96.211 25.694 10.656 0 21.129-.855 31.408-2.57-17.318 20.938-38.307 37.255-62.952 48.951z"})}),IC=({size:s,className:a=""})=>i.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 302.4 302.4",width:s,height:s,className:a,children:[i.jsx("path",{d:"M204.8 97.6C191.2 84 172 75.2 151.2 75.2s-40 8.4-53.6 22.4c-13.6 13.6-22.4 32.8-22.4 53.6s8.8 40 22.4 53.6c13.6 13.6 32.8 22.4 53.6 22.4s40-8.4 53.6-22.4c13.6-13.6 22.4-32.8 22.4-53.6s-8.4-40-22.4-53.6zm-14.4 92.8c-10 10-24 16-39.2 16s-29.2-6-39.2-16-16-24-16-39.2 6-29.2 16-39.2 24-16 39.2-16 29.2 6 39.2 16 16 24 16 39.2-6 29.2-16 39.2z",stroke:"#252519",strokeWidth:12}),i.jsx("path",{d:"M292 140.8h-30.8c-5.6 0-10.4 4.8-10.4 10.4 0 5.6 4.8 10.4 10.4 10.4H292c5.6 0 10.4-4.8 10.4-10.4 0-5.6-4.8-10.4-10.4-10.4zm-140.8 110c-5.6 0-10.4 4.8-10.4 10.4V292c0 5.6 4.8 10.4 10.4 10.4 5.6 0 10.4-4.8 10.4-10.4v-30.8c0-5.6-4.8-10.4-10.4-10.4zm106.8-7.2-22-22c-3.6-4-10.4-4-14.4 0s-4 10.4 0 14.4l22 22c4 4 10.4 4 14.4 0s4-10.4 0-14.4zM151.2 0c-5.6 0-10.4 4.8-10.4 10.4v30.8c0 5.6 4.8 10.4 10.4 10.4 5.6 0 10.4-4.8 10.4-10.4V10.4c0-5.6-4.8-10.4-10.4-10.4zm107.2 44.4c-4-4-10.4-4-14.4 0l-22 22c-4 4-4 10.4 0 14.4 3.6 4 10.4 4 14.4 0l22-22c4-4 4-10.4 0-14.4zM41.2 140.8H10.4c-5.6 0-10.4 4.8-10.4 10.4s4.4 10.4 10.4 10.4h30.8c5.6 0 10.4-4.8 10.4-10.4 0-5.6-4.8-10.4-10.4-10.4zm39.2 80.8c-3.6-4-10.4-4-14.4 0l-22 22c-4 4-4 10.4 0 14.4s10.4 4 14.4 0l22-22c4-4 4-10.4 0-14.4zm0-155.2-22-22c-4-4-10.4-4-14.4 0s-4 10.4 0 14.4l22 22c4 4 10.4 4 14.4 0s4-10.4 0-14.4z",stroke:"#252519",strokeWidth:5})]}),CC=({size:s,className:a="",fill:n})=>i.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1300 1300",xmlSpace:"preserve",width:s,height:s,className:a,fill:n,children:[i.jsx("path",{opacity:.45,d:"M773.772 253.308 643.068 485.61H381.842l130.614-232.302h261.316"}),i.jsx("path",{opacity:.6,d:"M643.068 485.61h261.318L773.772 253.308H512.456L643.068 485.61z"}),i.jsx("path",{opacity:.8,d:"M512.456 717.822 643.068 485.61 512.456 253.308 381.842 485.61l130.614 232.212z"}),i.jsx("path",{opacity:.45,d:"m513.721 1066.275 130.704-232.303h261.318l-130.705 232.303H513.721"}),i.jsx("path",{opacity:.6,d:"M644.424 833.973H383.107l130.613 232.303h261.317L644.424 833.973z"}),i.jsx("path",{opacity:.8,d:"M775.038 601.761 644.424 833.973l130.614 232.303 130.704-232.303-130.704-232.212z"})]});function jC(){const{state:s,setTheme:a,toggleSideNav:n}=et();function l(){a(s.theme=="light"?"dark":"light")}return i.jsxs("div",{className:aa.component,children:[i.jsx(eC,{size:20,className:aa.hamburger,onClick:n}),i.jsxs("div",{className:aa.center,children:[i.jsx("a",{href:"/",className:aa.a,children:i.jsx(CC,{className:aa.logo,size:30,fill:s.theme=="dark"?"rgb(0, 255, 0)":"currentColor"})}),i.jsx("h3",{className:aa.header,children:i.jsx("a",{href:"/",className:aa.a,children:"Solidity by Example"})})]}),i.jsx("button",{className:aa.mode,onClick:l,children:s.theme=="dark"?i.jsx(dC,{size:20}):i.jsx(IC,{size:20})})]})}const dg="https://cryptojobslist.com/solidity",uC="_component_h47vh_1",AC="_row_h47vh_8",yC="_bar_h47vh_13",mC="_to_h47vh_21",bC="_social_h47vh_24",wC="_sce_h47vh_29",kC="_telegram_h47vh_34",ZC="_discord_h47vh_38",WC="_youTube_h47vh_42",ds={component:uC,row:AC,bar:yC,to:mC,social:bC,sce:wC,telegram:kC,discord:ZC,youTube:WC},GC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK0AAADACAYAAAB2xePHAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAtdEVYdENyZWF0aW9uIFRpbWUARnJpIDE5IEZlYiAyMDIxIDA2OjI5OjE1IEFNIEpTVJ0PYF0AAA5FSURBVHic7Z3Li2RXHce/5956d1dXV/ekk0AmBCQORLIZRSQm2cSJQUwWMiAJJBo3uhAh/huBBCQLXWhMAgnCrBJQ40SQPHyAzia4mOhCbITY8+iurld3Vd17XHTa6a7p6rqP3z3n9zt1Pqt59ONU1bdunfs7n9856r7PPaDh8QgisD0AjyctPrQecfjQesThQ+sRhw+tRxw+tB5x+NB6xOFD6xGHD61HHD60HnH40HrE4UPrEYcPrUccPrQecfjQesRRsj0A04zvGSO+e2x7GPnZC1D9uGZ7FFZYqNDqksb1F/8DBFr8Z0z4aQntF+9E+d8V20MxjvCXLh27z91AdM8Y0ls11Egh6IQYPLFreyhWWJjQRq0I3W/vHPz5rjEQyY1uuFWCgsLk3jH2HxzaHo5xFia0Oz/cAhoHQVWBghb6qar6AYJ++P+/Dx7vQpfkvgGzsBChHd+3j+GF3rF/izYmwMTSgHJQ2jp+GxK3I+w91Lc0GjssRGi3f7wFhMf/TWmFuBnbGVBGgp0QanT7SzZ4tId4KbIwIjs4H9rhV3rYP3/yvE+3YkBK9StWCK/PKPbUNAaP9U7+PwdxPrQ7P7oOpdXM/4/ORNCa/5wwvBFCRbMfx/6XBphsSHkH5sPp0HYvbiM6O+eFrOtTw8ABNVYItsPTvyjAwpTAnA1tXIux+92bib42umsCMJ7ehtdKp35aHDL+/Aij+/cMjMguzoa28/3rB3PWJJQAHfCcIqhhgKA75yp7hMETXbaPhQonQzvZGKP/VCfV90R38iyBhVvpVtqjOyfY/+KgoNHwwMnQ7rywBaRcPFBKIW7wukIFuyGCvfQv0eCxHuIq4/lOTpwL7f4XBhh+NVuxXa9FwJjJTZnG7BLXvG9djjF81N0SmHOh3X7hGpTKHry4PWFRAgu3Q6gcb6C9h/qI2gznOwQ4Fdr+4x1Mzo1y/Qy9rKEmlq+2kUJwI6c1Wj7wElzEmdDGYYzOD26Q/KxoYwId27vahtdKUHH+N87+g0OM7833JuaIM6Htfucm4juI1t+rAGDnanvgytK8LArKyQUHJ0J71JUl+5mWnNtDV5YKF51bJ0J71JWlwoZzO+3KUuGacys+tCe5slSYdm6nXVkqXHNuxYf2JFeWCpPO7SxXlgqXnFvRoT3NlaXCiHN7mitLhUPOrejQznNlqYjbxTq381xZKlxxbsWGNpErS0SRCw6JXFkqAmDwNfkLDiJDm8aVpaKoBYekriwVowf2xC84iAxtKleWigIWHNK6siS/04EFB3GhzeLKUkG94JDWlaVC+oKDuNBmcWWpoFxwyOrKUiF5wUFUaPO4slSQLDjkcGWpkLzgICq0eV1ZCigWHPK6slRIXXAQE1oKV5aKXAsOFK4sFUIXHESEltKVpSLrJh9UriwVEhccRISW1JWlIsMmH5SuLBkCN/lg9gzeThGuLBVpN/mgdmWpkLbJB/vQFuHKkpFik4+iXFkqJG3ywTq0RbqyVCTd5KMoV5YKSZt8sA5tka4sFUk2+SjalaVCyiYfbJ9JE64sFadu8mHClSVCyiYfbENrypWlYtYmH6ZcWSokbPLBMrQmXVkqTnJujbqyVAjY5INdaG24slRMO7emXVkquG/ywS60VlxZKo44tzZcWSq4O7esQmvTlaXi0Lm15cpSwdm5ZfXMDh/vQUUBwPO5SoQCUPmkjvoflm0PJT9VnosNrELbeGcFvW90oBtCpwc4uPlqvXIGpa2y7aE4C6vpQdgJ0by0ansYuVh6p+UDWzCsQgscvOhS54NBJ8Sy8DedBNiFVo0VWj9ftz2MTDTfbCMYsHtKnYPlM1z7yxKqV+q2h5GK0mYZjctN28NYCFiGFgBWXl0HmHnfp7Hy6jqrjgSXYRva8mYFjcsrtoeRiOqVOmpXGraHsTCwDS0ANN9qQ3GfI0affSp4jME6ERJKYI3LKyhvWto9ZEFhHVqAdwlMDQI032rbHsbCwT60aqyw8vqa7WGcSPPSKsKOTClGMuxDCwD1D5dRuVq1PYxjhFslLL3Tsj2MhUREaAFg5Re8bnZWXl9jsbXRIiImtJWrNdQ/4GFOVa5WUf+Qx1gWETGhBYDmG20WVzduV/1FQ1RoS1tl6/PI+gfLqFytWR3DoiMqtACwfGkVgaU7djVWaL7hS1y2ERfaYBCg+aad4HhXlgfiQgsAjctNlDbNhifcKnlXlgkiQ6tiZXy9f+X1Ne/KMkHsq1C70jDm3PoSFy/EhhYw59xyLXHpCs9u2aIRHVoTzi3XElf/67vof1P2HhFZER1aoFjnlmuJK27E6D6zje7FHUQtQe0dRIgPbZHOLdcSV+/iDuJWBN2I0X162/ZwjCM+tEAxzi3XdvCoFaH/5K1pweDCLsZn+W4WVwROhLYI55ZrO3j36W3o8pEbsBDYfZ7XcVVFw+9VyQilc8u1HXx8doTBhdt3M9w/P8TeeRnnJVDgTGgButIU13bw3edvzDyDYvf5G2JOp8mLU6GlcG65toPvnR+cegbF5OwYgwu8d/CmwqnQAjmdW6bt4DrQieat3We2EQvecTIpzoU2j3PLtR18cKGLSYIzKOJWhN5FnqdbUuJcaIFszi3XdvDDhYSk9J/siDugOS1OhjaLc8u1HfxwISEpuqzRfdbtBQcnQwukc265toNPNsbHFhKSMnykh9E5OQc0p8XZ0KZxbrm2g3efnVpISMHu99xdcHA2tEAy55arKzs6t4fhI9mP/Byd28fwYf5HhmbB6dAC851brq4sxZVy97mbma/UnHE+tKc5t1xd2eHDPYzO7ef+OdHGJNOcmDvOhxY4cG6nS2BcXVld1th9ju6YVRed24UIbdgJbyuBcXVl+092EG3QnQLuonO7EKEFjpfAOLuy3QJWtFxzbhcmtEdLYKxd2SLcAcecW36vXIHUrjSw/HYLS+/xO4BklitLhUvO7UKFFvisxMXwvuQ0V5byd7jg3C5caDkyz5WlwhXn1ofWMkldWSpccG59aC2T1JWlIm5F6D8le8HBh9YiaV1ZKnpPdUQvOPjQWiStK0uF9AUHH1pLZHVlqZC84OBDa4k8riwJghccfGgtkNeVpULqgoMPrQU4dRVIXHDwoTUMlStLhcQFBx9ag1C7slRIW3DwoTUItStLhbRNPnxoDVGUK0uFpE0+fGgNUZgrS4SkTT58aA1QtCtLhZRNPnxoDWDClaWCUzluFj60BWPKlaVCwiYfPrQFYtqVpYL7Jh8+tAVi2pWlgvsmHz60BWHLlaWC8yYfPrQFYcuVpYKzc0t7YlxO4uUYe1/u2x5GfqoavYs70DW+88Ik9L/VQeu1Naghr2sbq9AGvQDj+/dFzgOPMrl7DAwVdFvulRYAah822AUWYDg9aPx6BRpyr1BxLUa8EgHQgMzGgANGwOrLG7ZHcSLsQlverKD68ekbIXPmUIhRgUL4X1YfZKlYepvnBn0Aw9ACQOPdJsBPhppL3Iyg67f8Al3SUD1+2+LPQ3UCtH52xvYwZsIytOFOCbWPlmwPIxVaaUR3HH+nKaUQbMu72q78cg3BHstoAGAaWgCov78M1ZdzlYrb0cmrSGUNdVOIeAAg3CyjeYnfZtNHYRvaYD9A4z1+J4GfhA41ovXZlYJgoKBj/jeXWmms/oTvtOAQtqEFgOrfGgi3+H+8RmcmwGnNgSUg/JTnTc1RqlfqqP+Z30k/07AOrYoV+xKYrsSIV5PUY5mXwCKg/RLPEtc0rEMLAJV/VlmXwCYJe764l8Dql5dR/lfV9jASwT60AN8SWLwUQS8lb6FhWwIbKKy+IuMqCwgJLccSmIZO3VnLtQTW/BXPw6xnISK0AL8SWNyKoSsZ5trMSmDBtRDN19ZsDyMVYkLLqQSmg9sXEtIQDBS05nFz2frpOoJITAwACAotwKcEFq9PgDBH6EpgcVNWulrB0u9atoeRGlGhVbFC4zd2r7a6rBERKIcqVlZvLrXWaL98h70B5EBUaAGg8o8ayp9UrP3+6MwEoJhaB0D4qb2rbf2jJVT/3rD2+/MgLrQA0PjtCmBhs5ZbriwNOtTA0MLNJWNXNgkiQ1vaKqP6V/NXCerN45RSCK+bryRwdmWTIDK0AND4/TKwZ+4qNe3KklE+8FdNwd2VTYLY0Ab9EI33zcgdeUtc8wi6AbQyUwLj7somQfToa39cQrBT/EOI1yfF7rhSgpFSXumTCntXNgmiQ6smCo13iz1RnKrENQ81Kta51Vqj/ZLMEtc0okMLANWP6yhtFndTQVbimkdYrHMrucQ1jfjQAsW1nVOXuOZTkHMrvMQ1jROhLart3PT5CEU5t9JLXNM4EVqA3rktrMQ1B2rn1oUS1zTOhJbSuT2pHdwU1M6tCyWuaZx6NFTO7cx2cFMQObcS2sGz4FRoKZzbee3gpsjr3EppB8+CU6EF8ju3c9vBTZHTuZXSDp4F50Kbx7lN3g5uhszOraB28Cw4F1ogu3ObtB3cGBmdW0nt4FlwMrRAeuc2bTu4KVI7t8LawbPgbGjTOLdZ2sFNkda5ldYOngVnQwskd24zt4ObIqFzK7EdPAtOhzaJc1u0K0tFEudWYjt4Fpx/hPOc29zt4KaY49xKbQfPgvOhPc25NeXKUjHLuZXcDp4F50MLzHZujbmyVMxwbl1yZZOwEKEFbnduzbuyVEw5t465sklYmNBOO7dcS1zzUIE6Nrd1zZVNwsKEFrjl3NpyZckoHZTAXHRlk7BQoQ13Sqj9aUlEiWseQTdEy0FXNgnqvs89IKDe4/HcYvHeph7x+NB6xOFD6xGHD61HHD60HnH40HrE4UPrEYcPrUccPrQecfjQesThQ+sRhw+tRxw+tB5x+NB6xOFD6xGHD61HHD60HnH40HrE8T8YG8SKlmk4HgAAAABJRU5ErkJggg==",Ig="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAyCAYAAAAOX8ZtAAAABmJLR0QA/wD/AP+gvaeTAAADmUlEQVRoge3bT2wUZRjH8c9Ml39S09IC/uFiRBIwabzVE15oiJBwLBcP3npS4E4IBA/EAwmcCInhoCeJNwgQoDGRC8GESMDYhJRyUAQplZa2tBYdD+9suqmsadHO+6J8kzd5Z3Znnt/+9p1ndt593swCKViFV7EWK8vWjpewouyvLLdfLg9rxZKG0ywt39NIOzL8gdE5r42W++uMY6bs/4pJTOARxsr+RHncOO7hbsbjhXzWrNkLBcvxPt5FF97Ga8L+55VR/Ijv8R0u45uM3+d9hoK+gnsFxf+g3S74cD6mrCj4PAHBMdpXRUgLTc35IgGRMduXzYz5OAFxKbSP6p5kpTHtuI22eSem/y4P8UbGaF7u6PXCmDrtgh/q5vTE05IkPcya0x1RSIp0Q1aEy+lhZDEpsirH+tgqEmV9jjdjq0iUt3Ksi60iUdbl6Kw05NatrFlTachnpDPH6kpD7tjBrVscOMCyZZWGXiCrqzcHWlvZv5/r1+ntrTz8POms/rJqZMMGTp7k4kW6uqLJaMLqHB2xVdiyhatXOX48pXzUmQvTmfGp1ejrY2CA3bvDdlyW50grK3Z0cORIyEfbtsVUsjQ9c+ps3MiZM1y4wKZNMRQsS9ecOj09XLvG0aO0VTqrkvDIaWTJEnbtYnAw5KOWliqiPgcjp5HOzpCPrlxh8+bFjrY0R7HYUZ5Tshy/xVYxb4aH2bOH7m4uXVrsaFM1TEvlt04zZmY4dox9+xgbqyrqdN2cdDl9OoyWwcGqI0/nUjVnYIDt28NTfPXGkKQ5IyNhpHR1cfZsTCVTNaF8Iz5PnnDiBHv3hsQbn6kaRmKr0N8fRsuNG7GVNDKcI97XdPMmO3eGR4S0jIHhmhjmjI9z+DCHDjGdVsprIII5p05x8CD371ca9hl4UMODSkOeP19puH/AcI47sVUkys85bsVWkSiDLwoJmtOWZ6H8dCi2ksQYyhir1+dciSolPb5ltnipP6KQFPmaFwWTT+ORUDA5kkMWEvIncTUlw6fZ3OfNgpaCUwnUAcds/QVP/6u1YHnBZwmIjNHOFbOrfJpT8EHBUAKCq2h3i1C9n8/14e+WFLXgPWFJ0TvCkqLXxajn+fd4jJ/wg7Cs6DLOZU1mQ5ua04wi/Am4Fq8Id7lWs4vSVjX0W4W7X17GaZ9zqvriszr19xb++ov9EZ40bD/GVNkfFWYzJ8vjJsp+fWHaJH7BnSzsmzd/AkgxNaTAmykLAAAAAElFTkSuQmCC",BC="/assets/telegram-zGrx4xca.png",VC="/assets/discord-akqDA9xj.png";function fC(){return i.jsxs("div",{className:ds.component,children:[i.jsxs("div",{className:ds.row,children:[i.jsx("img",{src:GC,alt:"smart contract engineer",className:ds.sce}),i.jsx("a",{href:"https://www.smartcontract.engineer",target:"__blank",children:"Smart Contract Engineer"})]}),i.jsxs("div",{className:ds.social,children:[i.jsxs("div",{className:ds.row,children:[i.jsx("img",{src:VC,alt:"discord",className:ds.discord}),i.jsx("a",{href:"https://discord.gg/bt8FK2wkcW",target:"__blank",children:"Discord"})]}),i.jsxs("div",{className:ds.row,children:[i.jsx("img",{src:BC,alt:"telegram",className:ds.telegram}),i.jsx("a",{href:"https://t.me/smartcontractprogrammer",target:"__blank",children:"Telegram"})]}),i.jsxs("div",{className:ds.row,children:[i.jsx("img",{src:Ig,alt:"youtube",className:ds.youTube}),i.jsx("a",{href:"https://www.youtube.com/channel/UCJWh7F3AFyQ_x01VKzr9eyA",target:"__blank",children:"YouTube"})]})]}),i.jsx("div",{className:ds.row,children:i.jsx("a",{href:"mailto:contact@solidity-by-example.org",children:"contact@solidity-by-example.org"})}),i.jsxs("div",{className:ds.row,children:[i.jsx("a",{href:"https://github.com/solidity-by-example/solidity-by-example.github.io",target:"__blank",children:"Source"}),i.jsx("div",{className:ds.bar,children:"|"}),i.jsx("a",{href:"https://github.com/solidity-by-example/solidity-by-example.github.io/blob/gh-pages/LICENSE",target:"__blank",children:"License"}),i.jsx("div",{className:ds.bar,children:"|"}),i.jsx("a",{href:dg,target:"__blank",children:"Solidity jobs"})]})]})}const YC=({children:s})=>{const{state:a}=et(),n=W.useRef(null);W.useLayoutEffect(()=>{n.current&&(n.current.scrollTop=parseInt(sessionStorage.getItem("scroll")||"0")||0)},[]);function l(p){var e;sessionStorage.setItem("scroll",(((e=n.current)==null?void 0:e.scrollTop)||0).toString()),window.location.href=p}return i.jsxs("div",{className:Rl.component,children:[i.jsx("div",{ref:n,className:Rl.sideNav,style:a.sideNav?{width:"var(--side-nav-width)",padding:"20px 10px 60px 10px"}:{width:0},children:a.sideNav?i.jsx(pC,{onClick:l}):null}),i.jsxs("div",{className:Rl.main,children:[i.jsx(jC,{}),i.jsxs("div",{className:Rl.children,children:[s,i.jsx(fC,{})]})]})]})},Cg=({title:s,description:a})=>(W.useEffect(()=>{document.title=s;const n=document.querySelector("meta[name='description']");n&&n.setAttribute("content",a)},[]),null),Yo=' ',RC='';function XC(s=[]){W.useEffect(()=>{const a=p=>{try{const e=document.createElement("textarea");e.setAttribute("style","width:1px;border:0;opacity:0;"),document.body.appendChild(e),navigator.clipboard.writeText(p.innerText),document.body.removeChild(e)}catch(e){console.error(e)}},n=[];return document.querySelectorAll("pre").forEach(p=>{var r;if(((r=p.parentElement)==null?void 0:r.className)=="copy-wrapper")return;const e=document.createElement("div");e.className="copy-wrapper",p.parentElement.insertBefore(e,p),e.appendChild(p);const c=document.createElement("button");c.className="copy",c.title="Copy",c.innerHTML=Yo,c.ariaLabel="Copy to clipboard",p.after(c);function t(d){d.preventDefault(),a(p.childNodes[0]),c.innerHTML=RC}function o(d){d.preventDefault(),c.innerHTML=Yo}c.addEventListener("click",t),c.addEventListener("blur",o),n.push(()=>{c.removeEventListener("click",t),c.removeEventListener("blur",o)})}),()=>{for(let p=0;p(XC([]),i.jsx("div",{className:`code ${s}`,dangerouslySetInnerHTML:{__html:a}})),NC="_component_ni5i2_1",HC="_content_ni5i2_5",FC="_prevNext_ni5i2_8",he={component:NC,content:HC,prevNext:FC},u=({title:s,version:a,description:n,html:l,prev:p,next:e,codes:c})=>i.jsxs("div",{className:he.component,children:[i.jsx(Cg,{title:`${s} | Solidity by Example | ${a}`,description:n}),i.jsxs("div",{className:he.content,children:[i.jsx("h2",{children:s}),i.jsx(vC,{html:l}),i.jsxs("div",{className:he.prevNext,children:[p&&i.jsxs("a",{href:p.path,children:["< ",p.title]}),e&&i.jsxs("a",{href:e.path,children:[e.title," >"]})]}),i.jsx("h3",{children:"Try on Remix"}),i.jsx("ul",{children:c.map(({fileName:t,code:o},r)=>i.jsx("li",{children:i.jsx("a",{href:`https://remix.ethereum.org/?#code=${o}`,target:"_blank",rel:"noreferrer",children:t})},r))})]})]}),KC="0.8.24",SC="ABI Decode",MC="ABI decode bytes",xC=[{fileName:"AbiDecode.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFiaURlY29kZSB7CiAgICBzdHJ1Y3QgTXlTdHJ1Y3QgewogICAgICAgIHN0cmluZyBuYW1lOwogICAgICAgIHVpbnQyNTZbMl0gbnVtczsKICAgIH0KCiAgICBmdW5jdGlvbiBlbmNvZGUoCiAgICAgICAgdWludDI1NiB4LAogICAgICAgIGFkZHJlc3MgYWRkciwKICAgICAgICB1aW50MjU2W10gY2FsbGRhdGEgYXJyLAogICAgICAgIE15U3RydWN0IGNhbGxkYXRhIG15U3RydWN0CiAgICApIGV4dGVybmFsIHB1cmUgcmV0dXJucyAoYnl0ZXMgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIGFiaS5lbmNvZGUoeCwgYWRkciwgYXJyLCBteVN0cnVjdCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVjb2RlKGJ5dGVzIGNhbGxkYXRhIGRhdGEpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoCiAgICAgICAgICAgIHVpbnQyNTYgeCwKICAgICAgICAgICAgYWRkcmVzcyBhZGRyLAogICAgICAgICAgICB1aW50MjU2W10gbWVtb3J5IGFyciwKICAgICAgICAgICAgTXlTdHJ1Y3QgbWVtb3J5IG15U3RydWN0CiAgICAgICAgKQogICAgewogICAgICAgIC8vICh1aW50IHgsIGFkZHJlc3MgYWRkciwgdWludFtdIG1lbW9yeSBhcnIsIE15U3RydWN0IG15U3RydWN0KSA9IC4uLgogICAgICAgICh4LCBhZGRyLCBhcnIsIG15U3RydWN0KSA9CiAgICAgICAgICAgIGFiaS5kZWNvZGUoZGF0YSwgKHVpbnQyNTYsIGFkZHJlc3MsIHVpbnQyNTZbXSwgTXlTdHJ1Y3QpKTsKICAgIH0KfQo="}],JC=`

abi.encode encodes data into bytes.

abi.decode decodes bytes back into data.

// SPDX-License-Identifier: MIT
 pragma solidity ^0.8.24;
@@ -745,7 +745,7 @@ Closing a channel when Alice and Bob do not agree on the final balances
         emit Refund(_id, msg.sender, bal);
     }
 }
-
`,yj=({prev:s,next:a})=>i.jsx(u,{version:dj,title:Ij,description:Cj,html:uj,prev:s,next:a,codes:jj}),Aj="0.8.24",mj="Deploy Any Contract",bj="Deploy Any Contract",wj=[{fileName:"Proxy.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFByb3h5IHsKICAgIGV2ZW50IERlcGxveShhZGRyZXNzKTsKCiAgICByZWNlaXZlKCkgZXh0ZXJuYWwgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIGRlcGxveShieXRlcyBtZW1vcnkgX2NvZGUpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwYXlhYmxlCiAgICAgICAgcmV0dXJucyAoYWRkcmVzcyBhZGRyKQogICAgewogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgLy8gY3JlYXRlKHYsIHAsIG4pCiAgICAgICAgICAgIC8vIHYgPSBhbW91bnQgb2YgRVRIIHRvIHNlbmQKICAgICAgICAgICAgLy8gcCA9IHBvaW50ZXIgaW4gbWVtb3J5IHRvIHN0YXJ0IG9mIGNvZGUKICAgICAgICAgICAgLy8gbiA9IHNpemUgb2YgY29kZQogICAgICAgICAgICBhZGRyIDo9IGNyZWF0ZShjYWxsdmFsdWUoKSwgYWRkKF9jb2RlLCAweDIwKSwgbWxvYWQoX2NvZGUpKQogICAgICAgIH0KICAgICAgICAvLyByZXR1cm4gYWRkcmVzcyAwIG9uIGVycm9yCiAgICAgICAgcmVxdWlyZShhZGRyICE9IGFkZHJlc3MoMCksICJkZXBsb3kgZmFpbGVkIik7CgogICAgICAgIGVtaXQgRGVwbG95KGFkZHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4ZWN1dGUoYWRkcmVzcyBfdGFyZ2V0LCBieXRlcyBtZW1vcnkgX2RhdGEpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIChib29sIHN1Y2Nlc3MsKSA9IF90YXJnZXQuY2FsbHt2YWx1ZTogbXNnLnZhbHVlfShfZGF0YSk7CiAgICAgICAgcmVxdWlyZShzdWNjZXNzLCAiZmFpbGVkIik7CiAgICB9Cn0KCmNvbnRyYWN0IFRlc3RDb250cmFjdDEgewogICAgYWRkcmVzcyBwdWJsaWMgb3duZXIgPSBtc2cuc2VuZGVyOwoKICAgIGZ1bmN0aW9uIHNldE93bmVyKGFkZHJlc3MgX293bmVyKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSBvd25lciwgIm5vdCBvd25lciIpOwogICAgICAgIG93bmVyID0gX293bmVyOwogICAgfQp9Cgpjb250cmFjdCBUZXN0Q29udHJhY3QyIHsKICAgIGFkZHJlc3MgcHVibGljIG93bmVyID0gbXNnLnNlbmRlcjsKICAgIHVpbnQyNTYgcHVibGljIHZhbHVlID0gbXNnLnZhbHVlOwogICAgdWludDI1NiBwdWJsaWMgeDsKICAgIHVpbnQyNTYgcHVibGljIHk7CgogICAgY29uc3RydWN0b3IodWludDI1NiBfeCwgdWludDI1NiBfeSkgcGF5YWJsZSB7CiAgICAgICAgeCA9IF94OwogICAgICAgIHkgPSBfeTsKICAgIH0KfQoKY29udHJhY3QgSGVscGVyIHsKICAgIGZ1bmN0aW9uIGdldEJ5dGVjb2RlMSgpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAoYnl0ZXMgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMgbWVtb3J5IGJ5dGVjb2RlID0gdHlwZShUZXN0Q29udHJhY3QxKS5jcmVhdGlvbkNvZGU7CiAgICAgICAgcmV0dXJuIGJ5dGVjb2RlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEJ5dGVjb2RlMih1aW50MjU2IF94LCB1aW50MjU2IF95KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGJ5dGVzIG1lbW9yeSkKICAgIHsKICAgICAgICBieXRlcyBtZW1vcnkgYnl0ZWNvZGUgPSB0eXBlKFRlc3RDb250cmFjdDIpLmNyZWF0aW9uQ29kZTsKICAgICAgICByZXR1cm4gYWJpLmVuY29kZVBhY2tlZChieXRlY29kZSwgYWJpLmVuY29kZShfeCwgX3kpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDYWxsZGF0YShhZGRyZXNzIF9vd25lcikgZXh0ZXJuYWwgcHVyZSByZXR1cm5zIChieXRlcyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gYWJpLmVuY29kZVdpdGhTaWduYXR1cmUoInNldE93bmVyKGFkZHJlc3MpIiwgX293bmVyKTsKICAgIH0KfQo="}],kj=`

Deploy any contract by calling Proxy.deploy(bytes memory _code)

+`,Aj=({prev:s,next:a})=>i.jsx(u,{version:dj,title:Ij,description:Cj,html:uj,prev:s,next:a,codes:jj}),yj="0.8.24",mj="Deploy Any Contract",bj="Deploy Any Contract",wj=[{fileName:"Proxy.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFByb3h5IHsKICAgIGV2ZW50IERlcGxveShhZGRyZXNzKTsKCiAgICByZWNlaXZlKCkgZXh0ZXJuYWwgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIGRlcGxveShieXRlcyBtZW1vcnkgX2NvZGUpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwYXlhYmxlCiAgICAgICAgcmV0dXJucyAoYWRkcmVzcyBhZGRyKQogICAgewogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgLy8gY3JlYXRlKHYsIHAsIG4pCiAgICAgICAgICAgIC8vIHYgPSBhbW91bnQgb2YgRVRIIHRvIHNlbmQKICAgICAgICAgICAgLy8gcCA9IHBvaW50ZXIgaW4gbWVtb3J5IHRvIHN0YXJ0IG9mIGNvZGUKICAgICAgICAgICAgLy8gbiA9IHNpemUgb2YgY29kZQogICAgICAgICAgICBhZGRyIDo9IGNyZWF0ZShjYWxsdmFsdWUoKSwgYWRkKF9jb2RlLCAweDIwKSwgbWxvYWQoX2NvZGUpKQogICAgICAgIH0KICAgICAgICAvLyByZXR1cm4gYWRkcmVzcyAwIG9uIGVycm9yCiAgICAgICAgcmVxdWlyZShhZGRyICE9IGFkZHJlc3MoMCksICJkZXBsb3kgZmFpbGVkIik7CgogICAgICAgIGVtaXQgRGVwbG95KGFkZHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4ZWN1dGUoYWRkcmVzcyBfdGFyZ2V0LCBieXRlcyBtZW1vcnkgX2RhdGEpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIChib29sIHN1Y2Nlc3MsKSA9IF90YXJnZXQuY2FsbHt2YWx1ZTogbXNnLnZhbHVlfShfZGF0YSk7CiAgICAgICAgcmVxdWlyZShzdWNjZXNzLCAiZmFpbGVkIik7CiAgICB9Cn0KCmNvbnRyYWN0IFRlc3RDb250cmFjdDEgewogICAgYWRkcmVzcyBwdWJsaWMgb3duZXIgPSBtc2cuc2VuZGVyOwoKICAgIGZ1bmN0aW9uIHNldE93bmVyKGFkZHJlc3MgX293bmVyKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSBvd25lciwgIm5vdCBvd25lciIpOwogICAgICAgIG93bmVyID0gX293bmVyOwogICAgfQp9Cgpjb250cmFjdCBUZXN0Q29udHJhY3QyIHsKICAgIGFkZHJlc3MgcHVibGljIG93bmVyID0gbXNnLnNlbmRlcjsKICAgIHVpbnQyNTYgcHVibGljIHZhbHVlID0gbXNnLnZhbHVlOwogICAgdWludDI1NiBwdWJsaWMgeDsKICAgIHVpbnQyNTYgcHVibGljIHk7CgogICAgY29uc3RydWN0b3IodWludDI1NiBfeCwgdWludDI1NiBfeSkgcGF5YWJsZSB7CiAgICAgICAgeCA9IF94OwogICAgICAgIHkgPSBfeTsKICAgIH0KfQoKY29udHJhY3QgSGVscGVyIHsKICAgIGZ1bmN0aW9uIGdldEJ5dGVjb2RlMSgpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAoYnl0ZXMgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMgbWVtb3J5IGJ5dGVjb2RlID0gdHlwZShUZXN0Q29udHJhY3QxKS5jcmVhdGlvbkNvZGU7CiAgICAgICAgcmV0dXJuIGJ5dGVjb2RlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEJ5dGVjb2RlMih1aW50MjU2IF94LCB1aW50MjU2IF95KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGJ5dGVzIG1lbW9yeSkKICAgIHsKICAgICAgICBieXRlcyBtZW1vcnkgYnl0ZWNvZGUgPSB0eXBlKFRlc3RDb250cmFjdDIpLmNyZWF0aW9uQ29kZTsKICAgICAgICByZXR1cm4gYWJpLmVuY29kZVBhY2tlZChieXRlY29kZSwgYWJpLmVuY29kZShfeCwgX3kpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDYWxsZGF0YShhZGRyZXNzIF9vd25lcikgZXh0ZXJuYWwgcHVyZSByZXR1cm5zIChieXRlcyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gYWJpLmVuY29kZVdpdGhTaWduYXR1cmUoInNldE93bmVyKGFkZHJlc3MpIiwgX293bmVyKTsKICAgIH0KfQo="}],kj=`

Deploy any contract by calling Proxy.deploy(bytes memory _code)

For this example, you can get the contract bytecodes by calling Helper.getBytecode1 and Helper.getBytecode2

// SPDX-License-Identifier: MIT
 pragma solidity ^0.8.24;
@@ -819,7 +819,7 @@ Closing a channel when Alice and Bob do not agree on the final balances
         return abi.encodeWithSignature("setOwner(address)", _owner);
     }
 }
-
`,Zj=({prev:s,next:a})=>i.jsx(u,{version:Aj,title:mj,description:bj,html:kj,prev:s,next:a,codes:wj}),Wj="0.8.24",Gj="Dutch Auction",Bj="An example of Dutch auction in Solidity",fj=[{fileName:"DutchAuction.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmludGVyZmFjZSBJRVJDNzIxIHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIF9mcm9tLCBhZGRyZXNzIF90bywgdWludDI1NiBfbmZ0SWQpCiAgICAgICAgZXh0ZXJuYWw7Cn0KCmNvbnRyYWN0IER1dGNoQXVjdGlvbiB7CiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgRFVSQVRJT04gPSA3IGRheXM7CgogICAgSUVSQzcyMSBwdWJsaWMgaW1tdXRhYmxlIG5mdDsKICAgIHVpbnQyNTYgcHVibGljIGltbXV0YWJsZSBuZnRJZDsKCiAgICBhZGRyZXNzIHBheWFibGUgcHVibGljIGltbXV0YWJsZSBzZWxsZXI7CiAgICB1aW50MjU2IHB1YmxpYyBpbW11dGFibGUgc3RhcnRpbmdQcmljZTsKICAgIHVpbnQyNTYgcHVibGljIGltbXV0YWJsZSBzdGFydEF0OwogICAgdWludDI1NiBwdWJsaWMgaW1tdXRhYmxlIGV4cGlyZXNBdDsKICAgIHVpbnQyNTYgcHVibGljIGltbXV0YWJsZSBkaXNjb3VudFJhdGU7CgogICAgY29uc3RydWN0b3IoCiAgICAgICAgdWludDI1NiBfc3RhcnRpbmdQcmljZSwKICAgICAgICB1aW50MjU2IF9kaXNjb3VudFJhdGUsCiAgICAgICAgYWRkcmVzcyBfbmZ0LAogICAgICAgIHVpbnQyNTYgX25mdElkCiAgICApIHsKICAgICAgICBzZWxsZXIgPSBwYXlhYmxlKG1zZy5zZW5kZXIpOwogICAgICAgIHN0YXJ0aW5nUHJpY2UgPSBfc3RhcnRpbmdQcmljZTsKICAgICAgICBzdGFydEF0ID0gYmxvY2sudGltZXN0YW1wOwogICAgICAgIGV4cGlyZXNBdCA9IGJsb2NrLnRpbWVzdGFtcCArIERVUkFUSU9OOwogICAgICAgIGRpc2NvdW50UmF0ZSA9IF9kaXNjb3VudFJhdGU7CgogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIF9zdGFydGluZ1ByaWNlID49IF9kaXNjb3VudFJhdGUgKiBEVVJBVElPTiwgInN0YXJ0aW5nIHByaWNlIDwgbWluIgogICAgICAgICk7CgogICAgICAgIG5mdCA9IElFUkM3MjEoX25mdCk7CiAgICAgICAgbmZ0SWQgPSBfbmZ0SWQ7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UHJpY2UoKSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgdWludDI1NiB0aW1lRWxhcHNlZCA9IGJsb2NrLnRpbWVzdGFtcCAtIHN0YXJ0QXQ7CiAgICAgICAgdWludDI1NiBkaXNjb3VudCA9IGRpc2NvdW50UmF0ZSAqIHRpbWVFbGFwc2VkOwogICAgICAgIHJldHVybiBzdGFydGluZ1ByaWNlIC0gZGlzY291bnQ7CiAgICB9CgogICAgZnVuY3Rpb24gYnV5KCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPCBleHBpcmVzQXQsICJhdWN0aW9uIGV4cGlyZWQiKTsKCiAgICAgICAgdWludDI1NiBwcmljZSA9IGdldFByaWNlKCk7CiAgICAgICAgcmVxdWlyZShtc2cudmFsdWUgPj0gcHJpY2UsICJFVEggPCBwcmljZSIpOwoKICAgICAgICBuZnQudHJhbnNmZXJGcm9tKHNlbGxlciwgbXNnLnNlbmRlciwgbmZ0SWQpOwogICAgICAgIHVpbnQyNTYgcmVmdW5kID0gbXNnLnZhbHVlIC0gcHJpY2U7CiAgICAgICAgaWYgKHJlZnVuZCA+IDApIHsKICAgICAgICAgICAgcGF5YWJsZShtc2cuc2VuZGVyKS50cmFuc2ZlcihyZWZ1bmQpOwogICAgICAgIH0KICAgICAgICBzZWxmZGVzdHJ1Y3Qoc2VsbGVyKTsKICAgIH0KfQo="}],Vj=`

Dutch auction for NFT.

+`,Zj=({prev:s,next:a})=>i.jsx(u,{version:yj,title:mj,description:bj,html:kj,prev:s,next:a,codes:wj}),Wj="0.8.24",Gj="Dutch Auction",Bj="An example of Dutch auction in Solidity",Vj=[{fileName:"DutchAuction.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmludGVyZmFjZSBJRVJDNzIxIHsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIF9mcm9tLCBhZGRyZXNzIF90bywgdWludDI1NiBfbmZ0SWQpCiAgICAgICAgZXh0ZXJuYWw7Cn0KCmNvbnRyYWN0IER1dGNoQXVjdGlvbiB7CiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgRFVSQVRJT04gPSA3IGRheXM7CgogICAgSUVSQzcyMSBwdWJsaWMgaW1tdXRhYmxlIG5mdDsKICAgIHVpbnQyNTYgcHVibGljIGltbXV0YWJsZSBuZnRJZDsKCiAgICBhZGRyZXNzIHBheWFibGUgcHVibGljIGltbXV0YWJsZSBzZWxsZXI7CiAgICB1aW50MjU2IHB1YmxpYyBpbW11dGFibGUgc3RhcnRpbmdQcmljZTsKICAgIHVpbnQyNTYgcHVibGljIGltbXV0YWJsZSBzdGFydEF0OwogICAgdWludDI1NiBwdWJsaWMgaW1tdXRhYmxlIGV4cGlyZXNBdDsKICAgIHVpbnQyNTYgcHVibGljIGltbXV0YWJsZSBkaXNjb3VudFJhdGU7CgogICAgY29uc3RydWN0b3IoCiAgICAgICAgdWludDI1NiBfc3RhcnRpbmdQcmljZSwKICAgICAgICB1aW50MjU2IF9kaXNjb3VudFJhdGUsCiAgICAgICAgYWRkcmVzcyBfbmZ0LAogICAgICAgIHVpbnQyNTYgX25mdElkCiAgICApIHsKICAgICAgICBzZWxsZXIgPSBwYXlhYmxlKG1zZy5zZW5kZXIpOwogICAgICAgIHN0YXJ0aW5nUHJpY2UgPSBfc3RhcnRpbmdQcmljZTsKICAgICAgICBzdGFydEF0ID0gYmxvY2sudGltZXN0YW1wOwogICAgICAgIGV4cGlyZXNBdCA9IGJsb2NrLnRpbWVzdGFtcCArIERVUkFUSU9OOwogICAgICAgIGRpc2NvdW50UmF0ZSA9IF9kaXNjb3VudFJhdGU7CgogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIF9zdGFydGluZ1ByaWNlID49IF9kaXNjb3VudFJhdGUgKiBEVVJBVElPTiwgInN0YXJ0aW5nIHByaWNlIDwgbWluIgogICAgICAgICk7CgogICAgICAgIG5mdCA9IElFUkM3MjEoX25mdCk7CiAgICAgICAgbmZ0SWQgPSBfbmZ0SWQ7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UHJpY2UoKSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgdWludDI1NiB0aW1lRWxhcHNlZCA9IGJsb2NrLnRpbWVzdGFtcCAtIHN0YXJ0QXQ7CiAgICAgICAgdWludDI1NiBkaXNjb3VudCA9IGRpc2NvdW50UmF0ZSAqIHRpbWVFbGFwc2VkOwogICAgICAgIHJldHVybiBzdGFydGluZ1ByaWNlIC0gZGlzY291bnQ7CiAgICB9CgogICAgZnVuY3Rpb24gYnV5KCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPCBleHBpcmVzQXQsICJhdWN0aW9uIGV4cGlyZWQiKTsKCiAgICAgICAgdWludDI1NiBwcmljZSA9IGdldFByaWNlKCk7CiAgICAgICAgcmVxdWlyZShtc2cudmFsdWUgPj0gcHJpY2UsICJFVEggPCBwcmljZSIpOwoKICAgICAgICBuZnQudHJhbnNmZXJGcm9tKHNlbGxlciwgbXNnLnNlbmRlciwgbmZ0SWQpOwogICAgICAgIHVpbnQyNTYgcmVmdW5kID0gbXNnLnZhbHVlIC0gcHJpY2U7CiAgICAgICAgaWYgKHJlZnVuZCA+IDApIHsKICAgICAgICAgICAgcGF5YWJsZShtc2cuc2VuZGVyKS50cmFuc2ZlcihyZWZ1bmQpOwogICAgICAgIH0KICAgICAgICBzZWxmZGVzdHJ1Y3Qoc2VsbGVyKTsKICAgIH0KfQo="}],fj=`

Dutch auction for NFT.

Auction

  1. Seller of NFT deploys this contract setting a starting price for the NFT.
  2. @@ -888,7 +888,7 @@ Closing a channel when Alice and Bob do not agree on the final balances selfdestruct(seller); } } -`,Yj=({prev:s,next:a})=>i.jsx(u,{version:Wj,title:Gj,description:Bj,html:Vj,prev:s,next:a,codes:fj}),Rj="0.8.24",vj="English Auction",Xj="An example of English auction in Solidity",Nj=[{fileName:"EnglishAuction.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmludGVyZmFjZSBJRVJDNzIxIHsKICAgIGZ1bmN0aW9uIHNhZmVUcmFuc2ZlckZyb20oYWRkcmVzcyBmcm9tLCBhZGRyZXNzIHRvLCB1aW50MjU2IHRva2VuSWQpCiAgICAgICAgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcywgYWRkcmVzcywgdWludDI1NikgZXh0ZXJuYWw7Cn0KCmNvbnRyYWN0IEVuZ2xpc2hBdWN0aW9uIHsKICAgIGV2ZW50IFN0YXJ0KCk7CiAgICBldmVudCBCaWQoYWRkcmVzcyBpbmRleGVkIHNlbmRlciwgdWludDI1NiBhbW91bnQpOwogICAgZXZlbnQgV2l0aGRyYXcoYWRkcmVzcyBpbmRleGVkIGJpZGRlciwgdWludDI1NiBhbW91bnQpOwogICAgZXZlbnQgRW5kKGFkZHJlc3Mgd2lubmVyLCB1aW50MjU2IGFtb3VudCk7CgogICAgSUVSQzcyMSBwdWJsaWMgbmZ0OwogICAgdWludDI1NiBwdWJsaWMgbmZ0SWQ7CgogICAgYWRkcmVzcyBwYXlhYmxlIHB1YmxpYyBzZWxsZXI7CiAgICB1aW50MjU2IHB1YmxpYyBlbmRBdDsKICAgIGJvb2wgcHVibGljIHN0YXJ0ZWQ7CiAgICBib29sIHB1YmxpYyBlbmRlZDsKCiAgICBhZGRyZXNzIHB1YmxpYyBoaWdoZXN0QmlkZGVyOwogICAgdWludDI1NiBwdWJsaWMgaGlnaGVzdEJpZDsKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiB1aW50MjU2KSBwdWJsaWMgYmlkczsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzIF9uZnQsIHVpbnQyNTYgX25mdElkLCB1aW50MjU2IF9zdGFydGluZ0JpZCkgewogICAgICAgIG5mdCA9IElFUkM3MjEoX25mdCk7CiAgICAgICAgbmZ0SWQgPSBfbmZ0SWQ7CgogICAgICAgIHNlbGxlciA9IHBheWFibGUobXNnLnNlbmRlcik7CiAgICAgICAgaGlnaGVzdEJpZCA9IF9zdGFydGluZ0JpZDsKICAgIH0KCiAgICBmdW5jdGlvbiBzdGFydCgpIGV4dGVybmFsIHsKICAgICAgICByZXF1aXJlKCFzdGFydGVkLCAic3RhcnRlZCIpOwogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSBzZWxsZXIsICJub3Qgc2VsbGVyIik7CgogICAgICAgIG5mdC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgbmZ0SWQpOwogICAgICAgIHN0YXJ0ZWQgPSB0cnVlOwogICAgICAgIGVuZEF0ID0gYmxvY2sudGltZXN0YW1wICsgNyBkYXlzOwoKICAgICAgICBlbWl0IFN0YXJ0KCk7CiAgICB9CgogICAgZnVuY3Rpb24gYmlkKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgcmVxdWlyZShzdGFydGVkLCAibm90IHN0YXJ0ZWQiKTsKICAgICAgICByZXF1aXJlKGJsb2NrLnRpbWVzdGFtcCA8IGVuZEF0LCAiZW5kZWQiKTsKICAgICAgICByZXF1aXJlKG1zZy52YWx1ZSA+IGhpZ2hlc3RCaWQsICJ2YWx1ZSA8IGhpZ2hlc3QiKTsKCiAgICAgICAgaWYgKGhpZ2hlc3RCaWRkZXIgIT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICBiaWRzW2hpZ2hlc3RCaWRkZXJdICs9IGhpZ2hlc3RCaWQ7CiAgICAgICAgfQoKICAgICAgICBoaWdoZXN0QmlkZGVyID0gbXNnLnNlbmRlcjsKICAgICAgICBoaWdoZXN0QmlkID0gbXNnLnZhbHVlOwoKICAgICAgICBlbWl0IEJpZChtc2cuc2VuZGVyLCBtc2cudmFsdWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KCkgZXh0ZXJuYWwgewogICAgICAgIHVpbnQyNTYgYmFsID0gYmlkc1ttc2cuc2VuZGVyXTsKICAgICAgICBiaWRzW21zZy5zZW5kZXJdID0gMDsKICAgICAgICBwYXlhYmxlKG1zZy5zZW5kZXIpLnRyYW5zZmVyKGJhbCk7CgogICAgICAgIGVtaXQgV2l0aGRyYXcobXNnLnNlbmRlciwgYmFsKTsKICAgIH0KCiAgICBmdW5jdGlvbiBlbmQoKSBleHRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShzdGFydGVkLCAibm90IHN0YXJ0ZWQiKTsKICAgICAgICByZXF1aXJlKGJsb2NrLnRpbWVzdGFtcCA+PSBlbmRBdCwgIm5vdCBlbmRlZCIpOwogICAgICAgIHJlcXVpcmUoIWVuZGVkLCAiZW5kZWQiKTsKCiAgICAgICAgZW5kZWQgPSB0cnVlOwogICAgICAgIGlmIChoaWdoZXN0QmlkZGVyICE9IGFkZHJlc3MoMCkpIHsKICAgICAgICAgICAgbmZ0LnNhZmVUcmFuc2ZlckZyb20oYWRkcmVzcyh0aGlzKSwgaGlnaGVzdEJpZGRlciwgbmZ0SWQpOwogICAgICAgICAgICBzZWxsZXIudHJhbnNmZXIoaGlnaGVzdEJpZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmZ0LnNhZmVUcmFuc2ZlckZyb20oYWRkcmVzcyh0aGlzKSwgc2VsbGVyLCBuZnRJZCk7CiAgICAgICAgfQoKICAgICAgICBlbWl0IEVuZChoaWdoZXN0QmlkZGVyLCBoaWdoZXN0QmlkKTsKICAgIH0KfQo="}],Hj=`

    English auction for NFT.

    +`,Yj=({prev:s,next:a})=>i.jsx(u,{version:Wj,title:Gj,description:Bj,html:fj,prev:s,next:a,codes:Vj}),Rj="0.8.24",Xj="English Auction",vj="An example of English auction in Solidity",Nj=[{fileName:"EnglishAuction.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmludGVyZmFjZSBJRVJDNzIxIHsKICAgIGZ1bmN0aW9uIHNhZmVUcmFuc2ZlckZyb20oYWRkcmVzcyBmcm9tLCBhZGRyZXNzIHRvLCB1aW50MjU2IHRva2VuSWQpCiAgICAgICAgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcywgYWRkcmVzcywgdWludDI1NikgZXh0ZXJuYWw7Cn0KCmNvbnRyYWN0IEVuZ2xpc2hBdWN0aW9uIHsKICAgIGV2ZW50IFN0YXJ0KCk7CiAgICBldmVudCBCaWQoYWRkcmVzcyBpbmRleGVkIHNlbmRlciwgdWludDI1NiBhbW91bnQpOwogICAgZXZlbnQgV2l0aGRyYXcoYWRkcmVzcyBpbmRleGVkIGJpZGRlciwgdWludDI1NiBhbW91bnQpOwogICAgZXZlbnQgRW5kKGFkZHJlc3Mgd2lubmVyLCB1aW50MjU2IGFtb3VudCk7CgogICAgSUVSQzcyMSBwdWJsaWMgbmZ0OwogICAgdWludDI1NiBwdWJsaWMgbmZ0SWQ7CgogICAgYWRkcmVzcyBwYXlhYmxlIHB1YmxpYyBzZWxsZXI7CiAgICB1aW50MjU2IHB1YmxpYyBlbmRBdDsKICAgIGJvb2wgcHVibGljIHN0YXJ0ZWQ7CiAgICBib29sIHB1YmxpYyBlbmRlZDsKCiAgICBhZGRyZXNzIHB1YmxpYyBoaWdoZXN0QmlkZGVyOwogICAgdWludDI1NiBwdWJsaWMgaGlnaGVzdEJpZDsKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiB1aW50MjU2KSBwdWJsaWMgYmlkczsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzIF9uZnQsIHVpbnQyNTYgX25mdElkLCB1aW50MjU2IF9zdGFydGluZ0JpZCkgewogICAgICAgIG5mdCA9IElFUkM3MjEoX25mdCk7CiAgICAgICAgbmZ0SWQgPSBfbmZ0SWQ7CgogICAgICAgIHNlbGxlciA9IHBheWFibGUobXNnLnNlbmRlcik7CiAgICAgICAgaGlnaGVzdEJpZCA9IF9zdGFydGluZ0JpZDsKICAgIH0KCiAgICBmdW5jdGlvbiBzdGFydCgpIGV4dGVybmFsIHsKICAgICAgICByZXF1aXJlKCFzdGFydGVkLCAic3RhcnRlZCIpOwogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSBzZWxsZXIsICJub3Qgc2VsbGVyIik7CgogICAgICAgIG5mdC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgbmZ0SWQpOwogICAgICAgIHN0YXJ0ZWQgPSB0cnVlOwogICAgICAgIGVuZEF0ID0gYmxvY2sudGltZXN0YW1wICsgNyBkYXlzOwoKICAgICAgICBlbWl0IFN0YXJ0KCk7CiAgICB9CgogICAgZnVuY3Rpb24gYmlkKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgcmVxdWlyZShzdGFydGVkLCAibm90IHN0YXJ0ZWQiKTsKICAgICAgICByZXF1aXJlKGJsb2NrLnRpbWVzdGFtcCA8IGVuZEF0LCAiZW5kZWQiKTsKICAgICAgICByZXF1aXJlKG1zZy52YWx1ZSA+IGhpZ2hlc3RCaWQsICJ2YWx1ZSA8IGhpZ2hlc3QiKTsKCiAgICAgICAgaWYgKGhpZ2hlc3RCaWRkZXIgIT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICBiaWRzW2hpZ2hlc3RCaWRkZXJdICs9IGhpZ2hlc3RCaWQ7CiAgICAgICAgfQoKICAgICAgICBoaWdoZXN0QmlkZGVyID0gbXNnLnNlbmRlcjsKICAgICAgICBoaWdoZXN0QmlkID0gbXNnLnZhbHVlOwoKICAgICAgICBlbWl0IEJpZChtc2cuc2VuZGVyLCBtc2cudmFsdWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KCkgZXh0ZXJuYWwgewogICAgICAgIHVpbnQyNTYgYmFsID0gYmlkc1ttc2cuc2VuZGVyXTsKICAgICAgICBiaWRzW21zZy5zZW5kZXJdID0gMDsKICAgICAgICBwYXlhYmxlKG1zZy5zZW5kZXIpLnRyYW5zZmVyKGJhbCk7CgogICAgICAgIGVtaXQgV2l0aGRyYXcobXNnLnNlbmRlciwgYmFsKTsKICAgIH0KCiAgICBmdW5jdGlvbiBlbmQoKSBleHRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShzdGFydGVkLCAibm90IHN0YXJ0ZWQiKTsKICAgICAgICByZXF1aXJlKGJsb2NrLnRpbWVzdGFtcCA+PSBlbmRBdCwgIm5vdCBlbmRlZCIpOwogICAgICAgIHJlcXVpcmUoIWVuZGVkLCAiZW5kZWQiKTsKCiAgICAgICAgZW5kZWQgPSB0cnVlOwogICAgICAgIGlmIChoaWdoZXN0QmlkZGVyICE9IGFkZHJlc3MoMCkpIHsKICAgICAgICAgICAgbmZ0LnNhZmVUcmFuc2ZlckZyb20oYWRkcmVzcyh0aGlzKSwgaGlnaGVzdEJpZGRlciwgbmZ0SWQpOwogICAgICAgICAgICBzZWxsZXIudHJhbnNmZXIoaGlnaGVzdEJpZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmZ0LnNhZmVUcmFuc2ZlckZyb20oYWRkcmVzcyh0aGlzKSwgc2VsbGVyLCBuZnRJZCk7CiAgICAgICAgfQoKICAgICAgICBlbWl0IEVuZChoaWdoZXN0QmlkZGVyLCBoaWdoZXN0QmlkKTsKICAgIH0KfQo="}],Hj=`

    English auction for NFT.

    Auction

    1. Seller of NFT deploys this contract.
    2. @@ -986,7 +986,7 @@ Closing a channel when Alice and Bob do not agree on the final balances emit End(highestBidder, highestBid); } } -`,Fj=({prev:s,next:a})=>i.jsx(u,{version:Rj,title:vj,description:Xj,html:Hj,prev:s,next:a,codes:Nj}),Kj="0.8.24",Sj="ERC1155",Mj="Example of ERC1155 multi token in Solidity",xj=[{fileName:"ERC1155.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmludGVyZmFjZSBJRVJDMTE1NSB7CiAgICBmdW5jdGlvbiBzYWZlVHJhbnNmZXJGcm9tKAogICAgICAgIGFkZHJlc3MgZnJvbSwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTYgaWQsCiAgICAgICAgdWludDI1NiB2YWx1ZSwKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsOwogICAgZnVuY3Rpb24gc2FmZUJhdGNoVHJhbnNmZXJGcm9tKAogICAgICAgIGFkZHJlc3MgZnJvbSwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTZbXSBjYWxsZGF0YSBpZHMsCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIHZhbHVlcywKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3Mgb3duZXIsIHVpbnQyNTYgaWQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2ZCYXRjaChhZGRyZXNzW10gY2FsbGRhdGEgb3duZXJzLCB1aW50MjU2W10gY2FsbGRhdGEgaWRzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTZbXSBtZW1vcnkpOwogICAgZnVuY3Rpb24gc2V0QXBwcm92YWxGb3JBbGwoYWRkcmVzcyBvcGVyYXRvciwgYm9vbCBhcHByb3ZlZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBpc0FwcHJvdmVkRm9yQWxsKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgb3BlcmF0b3IpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJRVJDMTE1NVRva2VuUmVjZWl2ZXIgewogICAgZnVuY3Rpb24gb25FUkMxMTU1UmVjZWl2ZWQoCiAgICAgICAgYWRkcmVzcyBvcGVyYXRvciwKICAgICAgICBhZGRyZXNzIGZyb20sCiAgICAgICAgdWludDI1NiBpZCwKICAgICAgICB1aW50MjU2IHZhbHVlLAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIGRhdGEKICAgICkgZXh0ZXJuYWwgcmV0dXJucyAoYnl0ZXM0KTsKCiAgICBmdW5jdGlvbiBvbkVSQzExNTVCYXRjaFJlY2VpdmVkKAogICAgICAgIGFkZHJlc3Mgb3BlcmF0b3IsCiAgICAgICAgYWRkcmVzcyBmcm9tLAogICAgICAgIHVpbnQyNTZbXSBjYWxsZGF0YSBpZHMsCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIHZhbHVlcywKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsIHJldHVybnMgKGJ5dGVzNCk7Cn0KCmNvbnRyYWN0IEVSQzExNTUgaXMgSUVSQzExNTUgewogICAgZXZlbnQgVHJhbnNmZXJTaW5nbGUoCiAgICAgICAgYWRkcmVzcyBpbmRleGVkIG9wZXJhdG9yLAogICAgICAgIGFkZHJlc3MgaW5kZXhlZCBmcm9tLAogICAgICAgIGFkZHJlc3MgaW5kZXhlZCB0bywKICAgICAgICB1aW50MjU2IGlkLAogICAgICAgIHVpbnQyNTYgdmFsdWUKICAgICk7CiAgICBldmVudCBUcmFuc2ZlckJhdGNoKAogICAgICAgIGFkZHJlc3MgaW5kZXhlZCBvcGVyYXRvciwKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgZnJvbSwKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgdG8sCiAgICAgICAgdWludDI1NltdIGlkcywKICAgICAgICB1aW50MjU2W10gdmFsdWVzCiAgICApOwogICAgZXZlbnQgQXBwcm92YWxGb3JBbGwoCiAgICAgICAgYWRkcmVzcyBpbmRleGVkIG93bmVyLCBhZGRyZXNzIGluZGV4ZWQgb3BlcmF0b3IsIGJvb2wgYXBwcm92ZWQKICAgICk7CiAgICBldmVudCBVUkkoc3RyaW5nIHZhbHVlLCB1aW50MjU2IGluZGV4ZWQgaWQpOwoKICAgIC8vIG93bmVyID0+IGlkID0+IGJhbGFuY2UKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiBtYXBwaW5nKHVpbnQyNTYgPT4gdWludDI1NikpIHB1YmxpYyBiYWxhbmNlT2Y7CiAgICAvLyBvd25lciA9PiBvcGVyYXRvciA9PiBhcHByb3ZlZAogICAgbWFwcGluZyhhZGRyZXNzID0+IG1hcHBpbmcoYWRkcmVzcyA9PiBib29sKSkgcHVibGljIGlzQXBwcm92ZWRGb3JBbGw7CgogICAgZnVuY3Rpb24gYmFsYW5jZU9mQmF0Y2goYWRkcmVzc1tdIGNhbGxkYXRhIG93bmVycywgdWludDI1NltdIGNhbGxkYXRhIGlkcykKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2W10gbWVtb3J5IGJhbGFuY2VzKQogICAgewogICAgICAgIHJlcXVpcmUob3duZXJzLmxlbmd0aCA9PSBpZHMubGVuZ3RoLCAib3duZXJzIGxlbmd0aCAhPSBpZHMgbGVuZ3RoIik7CgogICAgICAgIGJhbGFuY2VzID0gbmV3IHVpbnQyNTZbXShvd25lcnMubGVuZ3RoKTsKCiAgICAgICAgdW5jaGVja2VkIHsKICAgICAgICAgICAgZm9yICh1aW50MjU2IGkgPSAwOyBpIDwgb3duZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBiYWxhbmNlc1tpXSA9IGJhbGFuY2VPZltvd25lcnNbaV1dW2lkc1tpXV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2V0QXBwcm92YWxGb3JBbGwoYWRkcmVzcyBvcGVyYXRvciwgYm9vbCBhcHByb3ZlZCkgZXh0ZXJuYWwgewogICAgICAgIGlzQXBwcm92ZWRGb3JBbGxbbXNnLnNlbmRlcl1bb3BlcmF0b3JdID0gYXBwcm92ZWQ7CiAgICAgICAgZW1pdCBBcHByb3ZhbEZvckFsbChtc2cuc2VuZGVyLCBvcGVyYXRvciwgYXBwcm92ZWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNhZmVUcmFuc2ZlckZyb20oCiAgICAgICAgYWRkcmVzcyBmcm9tLAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NiBpZCwKICAgICAgICB1aW50MjU2IHZhbHVlLAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIGRhdGEKICAgICkgZXh0ZXJuYWwgewogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIG1zZy5zZW5kZXIgPT0gZnJvbSB8fCBpc0FwcHJvdmVkRm9yQWxsW2Zyb21dW21zZy5zZW5kZXJdLAogICAgICAgICAgICAibm90IGFwcHJvdmVkIgogICAgICAgICk7CiAgICAgICAgcmVxdWlyZSh0byAhPSBhZGRyZXNzKDApLCAidG8gPSAwIGFkZHJlc3MiKTsKCiAgICAgICAgYmFsYW5jZU9mW2Zyb21dW2lkXSAtPSB2YWx1ZTsKICAgICAgICBiYWxhbmNlT2ZbdG9dW2lkXSArPSB2YWx1ZTsKCiAgICAgICAgZW1pdCBUcmFuc2ZlclNpbmdsZShtc2cuc2VuZGVyLCBmcm9tLCB0bywgaWQsIHZhbHVlKTsKCiAgICAgICAgaWYgKHRvLmNvZGUubGVuZ3RoID4gMCkgewogICAgICAgICAgICByZXF1aXJlKAogICAgICAgICAgICAgICAgSUVSQzExNTVUb2tlblJlY2VpdmVyKHRvKS5vbkVSQzExNTVSZWNlaXZlZCgKICAgICAgICAgICAgICAgICAgICBtc2cuc2VuZGVyLCBmcm9tLCBpZCwgdmFsdWUsIGRhdGEKICAgICAgICAgICAgICAgICkgPT0gSUVSQzExNTVUb2tlblJlY2VpdmVyLm9uRVJDMTE1NVJlY2VpdmVkLnNlbGVjdG9yLAogICAgICAgICAgICAgICAgInVuc2FmZSB0cmFuc2ZlciIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2FmZUJhdGNoVHJhbnNmZXJGcm9tKAogICAgICAgIGFkZHJlc3MgZnJvbSwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTZbXSBjYWxsZGF0YSBpZHMsCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIHZhbHVlcywKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsIHsKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICBtc2cuc2VuZGVyID09IGZyb20gfHwgaXNBcHByb3ZlZEZvckFsbFtmcm9tXVttc2cuc2VuZGVyXSwKICAgICAgICAgICAgIm5vdCBhcHByb3ZlZCIKICAgICAgICApOwogICAgICAgIHJlcXVpcmUodG8gIT0gYWRkcmVzcygwKSwgInRvID0gMCBhZGRyZXNzIik7CiAgICAgICAgcmVxdWlyZShpZHMubGVuZ3RoID09IHZhbHVlcy5sZW5ndGgsICJpZHMgbGVuZ3RoICE9IHZhbHVlcyBsZW5ndGgiKTsKCiAgICAgICAgZm9yICh1aW50MjU2IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJhbGFuY2VPZltmcm9tXVtpZHNbaV1dIC09IHZhbHVlc1tpXTsKICAgICAgICAgICAgYmFsYW5jZU9mW3RvXVtpZHNbaV1dICs9IHZhbHVlc1tpXTsKICAgICAgICB9CgogICAgICAgIGVtaXQgVHJhbnNmZXJCYXRjaChtc2cuc2VuZGVyLCBmcm9tLCB0bywgaWRzLCB2YWx1ZXMpOwoKICAgICAgICBpZiAodG8uY29kZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgICAgICBJRVJDMTE1NVRva2VuUmVjZWl2ZXIodG8pLm9uRVJDMTE1NUJhdGNoUmVjZWl2ZWQoCiAgICAgICAgICAgICAgICAgICAgbXNnLnNlbmRlciwgZnJvbSwgaWRzLCB2YWx1ZXMsIGRhdGEKICAgICAgICAgICAgICAgICkgPT0gSUVSQzExNTVUb2tlblJlY2VpdmVyLm9uRVJDMTE1NUJhdGNoUmVjZWl2ZWQuc2VsZWN0b3IsCiAgICAgICAgICAgICAgICAidW5zYWZlIHRyYW5zZmVyIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBFUkMxNjUKICAgIGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVzNCBpbnRlcmZhY2VJZCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIHJldHVybiBpbnRlcmZhY2VJZCA9PSAweDAxZmZjOWE3IC8vIEVSQzE2NSBJbnRlcmZhY2UgSUQgZm9yIEVSQzE2NQogICAgICAgICAgICB8fCBpbnRlcmZhY2VJZCA9PSAweGQ5YjY3YTI2IC8vIEVSQzE2NSBJbnRlcmZhY2UgSUQgZm9yIEVSQzExNTUKICAgICAgICAgICAgfHwgaW50ZXJmYWNlSWQgPT0gMHgwZTg5MzQxYzsgLy8gRVJDMTY1IEludGVyZmFjZSBJRCBmb3IgRVJDMTE1NU1ldGFkYXRhVVJJCiAgICB9CgogICAgLy8gRVJDMTE1NSBNZXRhZGF0YSBVUkkKICAgIGZ1bmN0aW9uIHVyaSh1aW50MjU2IGlkKSBwdWJsaWMgdmlldyB2aXJ0dWFsIHJldHVybnMgKHN0cmluZyBtZW1vcnkpIHt9CgogICAgLy8gSW50ZXJuYWwgZnVuY3Rpb25zCiAgICBmdW5jdGlvbiBfbWludChhZGRyZXNzIHRvLCB1aW50MjU2IGlkLCB1aW50MjU2IHZhbHVlLCBieXRlcyBtZW1vcnkgZGF0YSkKICAgICAgICBpbnRlcm5hbAogICAgewogICAgICAgIHJlcXVpcmUodG8gIT0gYWRkcmVzcygwKSwgInRvID0gMCBhZGRyZXNzIik7CgogICAgICAgIGJhbGFuY2VPZlt0b11baWRdICs9IHZhbHVlOwoKICAgICAgICBlbWl0IFRyYW5zZmVyU2luZ2xlKG1zZy5zZW5kZXIsIGFkZHJlc3MoMCksIHRvLCBpZCwgdmFsdWUpOwoKICAgICAgICBpZiAodG8uY29kZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgICAgICBJRVJDMTE1NVRva2VuUmVjZWl2ZXIodG8pLm9uRVJDMTE1NVJlY2VpdmVkKAogICAgICAgICAgICAgICAgICAgIG1zZy5zZW5kZXIsIGFkZHJlc3MoMCksIGlkLCB2YWx1ZSwgZGF0YQogICAgICAgICAgICAgICAgKSA9PSBJRVJDMTE1NVRva2VuUmVjZWl2ZXIub25FUkMxMTU1UmVjZWl2ZWQuc2VsZWN0b3IsCiAgICAgICAgICAgICAgICAidW5zYWZlIHRyYW5zZmVyIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfYmF0Y2hNaW50KAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIGlkcywKICAgICAgICB1aW50MjU2W10gY2FsbGRhdGEgdmFsdWVzLAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIGRhdGEKICAgICkgaW50ZXJuYWwgewogICAgICAgIHJlcXVpcmUodG8gIT0gYWRkcmVzcygwKSwgInRvID0gMCBhZGRyZXNzIik7CiAgICAgICAgcmVxdWlyZShpZHMubGVuZ3RoID09IHZhbHVlcy5sZW5ndGgsICJpZHMgbGVuZ3RoICE9IHZhbHVlcyBsZW5ndGgiKTsKCiAgICAgICAgZm9yICh1aW50MjU2IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJhbGFuY2VPZlt0b11baWRzW2ldXSArPSB2YWx1ZXNbaV07CiAgICAgICAgfQoKICAgICAgICBlbWl0IFRyYW5zZmVyQmF0Y2gobXNnLnNlbmRlciwgYWRkcmVzcygwKSwgdG8sIGlkcywgdmFsdWVzKTsKCiAgICAgICAgaWYgKHRvLmNvZGUubGVuZ3RoID4gMCkgewogICAgICAgICAgICByZXF1aXJlKAogICAgICAgICAgICAgICAgSUVSQzExNTVUb2tlblJlY2VpdmVyKHRvKS5vbkVSQzExNTVCYXRjaFJlY2VpdmVkKAogICAgICAgICAgICAgICAgICAgIG1zZy5zZW5kZXIsIGFkZHJlc3MoMCksIGlkcywgdmFsdWVzLCBkYXRhCiAgICAgICAgICAgICAgICApID09IElFUkMxMTU1VG9rZW5SZWNlaXZlci5vbkVSQzExNTVCYXRjaFJlY2VpdmVkLnNlbGVjdG9yLAogICAgICAgICAgICAgICAgInVuc2FmZSB0cmFuc2ZlciIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2J1cm4oYWRkcmVzcyBmcm9tLCB1aW50MjU2IGlkLCB1aW50MjU2IHZhbHVlKSBpbnRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShmcm9tICE9IGFkZHJlc3MoMCksICJmcm9tID0gMCBhZGRyZXNzIik7CiAgICAgICAgYmFsYW5jZU9mW2Zyb21dW2lkXSAtPSB2YWx1ZTsKICAgICAgICBlbWl0IFRyYW5zZmVyU2luZ2xlKG1zZy5zZW5kZXIsIGZyb20sIGFkZHJlc3MoMCksIGlkLCB2YWx1ZSk7CiAgICB9CgogICAgZnVuY3Rpb24gX2JhdGNoQnVybigKICAgICAgICBhZGRyZXNzIGZyb20sCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIGlkcywKICAgICAgICB1aW50MjU2W10gY2FsbGRhdGEgdmFsdWVzCiAgICApIGludGVybmFsIHsKICAgICAgICByZXF1aXJlKGZyb20gIT0gYWRkcmVzcygwKSwgImZyb20gPSAwIGFkZHJlc3MiKTsKICAgICAgICByZXF1aXJlKGlkcy5sZW5ndGggPT0gdmFsdWVzLmxlbmd0aCwgImlkcyBsZW5ndGggIT0gdmFsdWVzIGxlbmd0aCIpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYmFsYW5jZU9mW2Zyb21dW2lkc1tpXV0gLT0gdmFsdWVzW2ldOwogICAgICAgIH0KCiAgICAgICAgZW1pdCBUcmFuc2ZlckJhdGNoKG1zZy5zZW5kZXIsIGZyb20sIGFkZHJlc3MoMCksIGlkcywgdmFsdWVzKTsKICAgIH0KfQoKY29udHJhY3QgTXlNdWx0aVRva2VuIGlzIEVSQzExNTUgewogICAgZnVuY3Rpb24gbWludCh1aW50MjU2IGlkLCB1aW50MjU2IHZhbHVlLCBieXRlcyBtZW1vcnkgZGF0YSkgZXh0ZXJuYWwgewogICAgICAgIF9taW50KG1zZy5zZW5kZXIsIGlkLCB2YWx1ZSwgZGF0YSk7CiAgICB9CgogICAgZnVuY3Rpb24gYmF0Y2hNaW50KAogICAgICAgIHVpbnQyNTZbXSBjYWxsZGF0YSBpZHMsCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIHZhbHVlcywKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsIHsKICAgICAgICBfYmF0Y2hNaW50KG1zZy5zZW5kZXIsIGlkcywgdmFsdWVzLCBkYXRhKTsKICAgIH0KCiAgICBmdW5jdGlvbiBidXJuKHVpbnQyNTYgaWQsIHVpbnQyNTYgdmFsdWUpIGV4dGVybmFsIHsKICAgICAgICBfYnVybihtc2cuc2VuZGVyLCBpZCwgdmFsdWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGJhdGNoQnVybih1aW50MjU2W10gY2FsbGRhdGEgaWRzLCB1aW50MjU2W10gY2FsbGRhdGEgdmFsdWVzKQogICAgICAgIGV4dGVybmFsCiAgICB7CiAgICAgICAgX2JhdGNoQnVybihtc2cuc2VuZGVyLCBpZHMsIHZhbHVlcyk7CiAgICB9Cn0K"}],Jj=`

      Example of ERC1155

      +`,Fj=({prev:s,next:a})=>i.jsx(u,{version:Rj,title:Xj,description:vj,html:Hj,prev:s,next:a,codes:Nj}),Kj="0.8.24",Sj="ERC1155",Mj="Example of ERC1155 multi token in Solidity",xj=[{fileName:"ERC1155.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmludGVyZmFjZSBJRVJDMTE1NSB7CiAgICBmdW5jdGlvbiBzYWZlVHJhbnNmZXJGcm9tKAogICAgICAgIGFkZHJlc3MgZnJvbSwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTYgaWQsCiAgICAgICAgdWludDI1NiB2YWx1ZSwKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsOwogICAgZnVuY3Rpb24gc2FmZUJhdGNoVHJhbnNmZXJGcm9tKAogICAgICAgIGFkZHJlc3MgZnJvbSwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTZbXSBjYWxsZGF0YSBpZHMsCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIHZhbHVlcywKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3Mgb3duZXIsIHVpbnQyNTYgaWQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2ZCYXRjaChhZGRyZXNzW10gY2FsbGRhdGEgb3duZXJzLCB1aW50MjU2W10gY2FsbGRhdGEgaWRzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTZbXSBtZW1vcnkpOwogICAgZnVuY3Rpb24gc2V0QXBwcm92YWxGb3JBbGwoYWRkcmVzcyBvcGVyYXRvciwgYm9vbCBhcHByb3ZlZCkgZXh0ZXJuYWw7CiAgICBmdW5jdGlvbiBpc0FwcHJvdmVkRm9yQWxsKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgb3BlcmF0b3IpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJRVJDMTE1NVRva2VuUmVjZWl2ZXIgewogICAgZnVuY3Rpb24gb25FUkMxMTU1UmVjZWl2ZWQoCiAgICAgICAgYWRkcmVzcyBvcGVyYXRvciwKICAgICAgICBhZGRyZXNzIGZyb20sCiAgICAgICAgdWludDI1NiBpZCwKICAgICAgICB1aW50MjU2IHZhbHVlLAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIGRhdGEKICAgICkgZXh0ZXJuYWwgcmV0dXJucyAoYnl0ZXM0KTsKCiAgICBmdW5jdGlvbiBvbkVSQzExNTVCYXRjaFJlY2VpdmVkKAogICAgICAgIGFkZHJlc3Mgb3BlcmF0b3IsCiAgICAgICAgYWRkcmVzcyBmcm9tLAogICAgICAgIHVpbnQyNTZbXSBjYWxsZGF0YSBpZHMsCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIHZhbHVlcywKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsIHJldHVybnMgKGJ5dGVzNCk7Cn0KCmNvbnRyYWN0IEVSQzExNTUgaXMgSUVSQzExNTUgewogICAgZXZlbnQgVHJhbnNmZXJTaW5nbGUoCiAgICAgICAgYWRkcmVzcyBpbmRleGVkIG9wZXJhdG9yLAogICAgICAgIGFkZHJlc3MgaW5kZXhlZCBmcm9tLAogICAgICAgIGFkZHJlc3MgaW5kZXhlZCB0bywKICAgICAgICB1aW50MjU2IGlkLAogICAgICAgIHVpbnQyNTYgdmFsdWUKICAgICk7CiAgICBldmVudCBUcmFuc2ZlckJhdGNoKAogICAgICAgIGFkZHJlc3MgaW5kZXhlZCBvcGVyYXRvciwKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgZnJvbSwKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgdG8sCiAgICAgICAgdWludDI1NltdIGlkcywKICAgICAgICB1aW50MjU2W10gdmFsdWVzCiAgICApOwogICAgZXZlbnQgQXBwcm92YWxGb3JBbGwoCiAgICAgICAgYWRkcmVzcyBpbmRleGVkIG93bmVyLCBhZGRyZXNzIGluZGV4ZWQgb3BlcmF0b3IsIGJvb2wgYXBwcm92ZWQKICAgICk7CiAgICBldmVudCBVUkkoc3RyaW5nIHZhbHVlLCB1aW50MjU2IGluZGV4ZWQgaWQpOwoKICAgIC8vIG93bmVyID0+IGlkID0+IGJhbGFuY2UKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiBtYXBwaW5nKHVpbnQyNTYgPT4gdWludDI1NikpIHB1YmxpYyBiYWxhbmNlT2Y7CiAgICAvLyBvd25lciA9PiBvcGVyYXRvciA9PiBhcHByb3ZlZAogICAgbWFwcGluZyhhZGRyZXNzID0+IG1hcHBpbmcoYWRkcmVzcyA9PiBib29sKSkgcHVibGljIGlzQXBwcm92ZWRGb3JBbGw7CgogICAgZnVuY3Rpb24gYmFsYW5jZU9mQmF0Y2goYWRkcmVzc1tdIGNhbGxkYXRhIG93bmVycywgdWludDI1NltdIGNhbGxkYXRhIGlkcykKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2W10gbWVtb3J5IGJhbGFuY2VzKQogICAgewogICAgICAgIHJlcXVpcmUob3duZXJzLmxlbmd0aCA9PSBpZHMubGVuZ3RoLCAib3duZXJzIGxlbmd0aCAhPSBpZHMgbGVuZ3RoIik7CgogICAgICAgIGJhbGFuY2VzID0gbmV3IHVpbnQyNTZbXShvd25lcnMubGVuZ3RoKTsKCiAgICAgICAgdW5jaGVja2VkIHsKICAgICAgICAgICAgZm9yICh1aW50MjU2IGkgPSAwOyBpIDwgb3duZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBiYWxhbmNlc1tpXSA9IGJhbGFuY2VPZltvd25lcnNbaV1dW2lkc1tpXV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2V0QXBwcm92YWxGb3JBbGwoYWRkcmVzcyBvcGVyYXRvciwgYm9vbCBhcHByb3ZlZCkgZXh0ZXJuYWwgewogICAgICAgIGlzQXBwcm92ZWRGb3JBbGxbbXNnLnNlbmRlcl1bb3BlcmF0b3JdID0gYXBwcm92ZWQ7CiAgICAgICAgZW1pdCBBcHByb3ZhbEZvckFsbChtc2cuc2VuZGVyLCBvcGVyYXRvciwgYXBwcm92ZWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNhZmVUcmFuc2ZlckZyb20oCiAgICAgICAgYWRkcmVzcyBmcm9tLAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NiBpZCwKICAgICAgICB1aW50MjU2IHZhbHVlLAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIGRhdGEKICAgICkgZXh0ZXJuYWwgewogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIG1zZy5zZW5kZXIgPT0gZnJvbSB8fCBpc0FwcHJvdmVkRm9yQWxsW2Zyb21dW21zZy5zZW5kZXJdLAogICAgICAgICAgICAibm90IGFwcHJvdmVkIgogICAgICAgICk7CiAgICAgICAgcmVxdWlyZSh0byAhPSBhZGRyZXNzKDApLCAidG8gPSAwIGFkZHJlc3MiKTsKCiAgICAgICAgYmFsYW5jZU9mW2Zyb21dW2lkXSAtPSB2YWx1ZTsKICAgICAgICBiYWxhbmNlT2ZbdG9dW2lkXSArPSB2YWx1ZTsKCiAgICAgICAgZW1pdCBUcmFuc2ZlclNpbmdsZShtc2cuc2VuZGVyLCBmcm9tLCB0bywgaWQsIHZhbHVlKTsKCiAgICAgICAgaWYgKHRvLmNvZGUubGVuZ3RoID4gMCkgewogICAgICAgICAgICByZXF1aXJlKAogICAgICAgICAgICAgICAgSUVSQzExNTVUb2tlblJlY2VpdmVyKHRvKS5vbkVSQzExNTVSZWNlaXZlZCgKICAgICAgICAgICAgICAgICAgICBtc2cuc2VuZGVyLCBmcm9tLCBpZCwgdmFsdWUsIGRhdGEKICAgICAgICAgICAgICAgICkgPT0gSUVSQzExNTVUb2tlblJlY2VpdmVyLm9uRVJDMTE1NVJlY2VpdmVkLnNlbGVjdG9yLAogICAgICAgICAgICAgICAgInVuc2FmZSB0cmFuc2ZlciIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2FmZUJhdGNoVHJhbnNmZXJGcm9tKAogICAgICAgIGFkZHJlc3MgZnJvbSwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTZbXSBjYWxsZGF0YSBpZHMsCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIHZhbHVlcywKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsIHsKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICBtc2cuc2VuZGVyID09IGZyb20gfHwgaXNBcHByb3ZlZEZvckFsbFtmcm9tXVttc2cuc2VuZGVyXSwKICAgICAgICAgICAgIm5vdCBhcHByb3ZlZCIKICAgICAgICApOwogICAgICAgIHJlcXVpcmUodG8gIT0gYWRkcmVzcygwKSwgInRvID0gMCBhZGRyZXNzIik7CiAgICAgICAgcmVxdWlyZShpZHMubGVuZ3RoID09IHZhbHVlcy5sZW5ndGgsICJpZHMgbGVuZ3RoICE9IHZhbHVlcyBsZW5ndGgiKTsKCiAgICAgICAgZm9yICh1aW50MjU2IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJhbGFuY2VPZltmcm9tXVtpZHNbaV1dIC09IHZhbHVlc1tpXTsKICAgICAgICAgICAgYmFsYW5jZU9mW3RvXVtpZHNbaV1dICs9IHZhbHVlc1tpXTsKICAgICAgICB9CgogICAgICAgIGVtaXQgVHJhbnNmZXJCYXRjaChtc2cuc2VuZGVyLCBmcm9tLCB0bywgaWRzLCB2YWx1ZXMpOwoKICAgICAgICBpZiAodG8uY29kZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgICAgICBJRVJDMTE1NVRva2VuUmVjZWl2ZXIodG8pLm9uRVJDMTE1NUJhdGNoUmVjZWl2ZWQoCiAgICAgICAgICAgICAgICAgICAgbXNnLnNlbmRlciwgZnJvbSwgaWRzLCB2YWx1ZXMsIGRhdGEKICAgICAgICAgICAgICAgICkgPT0gSUVSQzExNTVUb2tlblJlY2VpdmVyLm9uRVJDMTE1NUJhdGNoUmVjZWl2ZWQuc2VsZWN0b3IsCiAgICAgICAgICAgICAgICAidW5zYWZlIHRyYW5zZmVyIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBFUkMxNjUKICAgIGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVzNCBpbnRlcmZhY2VJZCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIHJldHVybiBpbnRlcmZhY2VJZCA9PSAweDAxZmZjOWE3IC8vIEVSQzE2NSBJbnRlcmZhY2UgSUQgZm9yIEVSQzE2NQogICAgICAgICAgICB8fCBpbnRlcmZhY2VJZCA9PSAweGQ5YjY3YTI2IC8vIEVSQzE2NSBJbnRlcmZhY2UgSUQgZm9yIEVSQzExNTUKICAgICAgICAgICAgfHwgaW50ZXJmYWNlSWQgPT0gMHgwZTg5MzQxYzsgLy8gRVJDMTY1IEludGVyZmFjZSBJRCBmb3IgRVJDMTE1NU1ldGFkYXRhVVJJCiAgICB9CgogICAgLy8gRVJDMTE1NSBNZXRhZGF0YSBVUkkKICAgIGZ1bmN0aW9uIHVyaSh1aW50MjU2IGlkKSBwdWJsaWMgdmlldyB2aXJ0dWFsIHJldHVybnMgKHN0cmluZyBtZW1vcnkpIHt9CgogICAgLy8gSW50ZXJuYWwgZnVuY3Rpb25zCiAgICBmdW5jdGlvbiBfbWludChhZGRyZXNzIHRvLCB1aW50MjU2IGlkLCB1aW50MjU2IHZhbHVlLCBieXRlcyBtZW1vcnkgZGF0YSkKICAgICAgICBpbnRlcm5hbAogICAgewogICAgICAgIHJlcXVpcmUodG8gIT0gYWRkcmVzcygwKSwgInRvID0gMCBhZGRyZXNzIik7CgogICAgICAgIGJhbGFuY2VPZlt0b11baWRdICs9IHZhbHVlOwoKICAgICAgICBlbWl0IFRyYW5zZmVyU2luZ2xlKG1zZy5zZW5kZXIsIGFkZHJlc3MoMCksIHRvLCBpZCwgdmFsdWUpOwoKICAgICAgICBpZiAodG8uY29kZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgICAgICBJRVJDMTE1NVRva2VuUmVjZWl2ZXIodG8pLm9uRVJDMTE1NVJlY2VpdmVkKAogICAgICAgICAgICAgICAgICAgIG1zZy5zZW5kZXIsIGFkZHJlc3MoMCksIGlkLCB2YWx1ZSwgZGF0YQogICAgICAgICAgICAgICAgKSA9PSBJRVJDMTE1NVRva2VuUmVjZWl2ZXIub25FUkMxMTU1UmVjZWl2ZWQuc2VsZWN0b3IsCiAgICAgICAgICAgICAgICAidW5zYWZlIHRyYW5zZmVyIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfYmF0Y2hNaW50KAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIGlkcywKICAgICAgICB1aW50MjU2W10gY2FsbGRhdGEgdmFsdWVzLAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIGRhdGEKICAgICkgaW50ZXJuYWwgewogICAgICAgIHJlcXVpcmUodG8gIT0gYWRkcmVzcygwKSwgInRvID0gMCBhZGRyZXNzIik7CiAgICAgICAgcmVxdWlyZShpZHMubGVuZ3RoID09IHZhbHVlcy5sZW5ndGgsICJpZHMgbGVuZ3RoICE9IHZhbHVlcyBsZW5ndGgiKTsKCiAgICAgICAgZm9yICh1aW50MjU2IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGJhbGFuY2VPZlt0b11baWRzW2ldXSArPSB2YWx1ZXNbaV07CiAgICAgICAgfQoKICAgICAgICBlbWl0IFRyYW5zZmVyQmF0Y2gobXNnLnNlbmRlciwgYWRkcmVzcygwKSwgdG8sIGlkcywgdmFsdWVzKTsKCiAgICAgICAgaWYgKHRvLmNvZGUubGVuZ3RoID4gMCkgewogICAgICAgICAgICByZXF1aXJlKAogICAgICAgICAgICAgICAgSUVSQzExNTVUb2tlblJlY2VpdmVyKHRvKS5vbkVSQzExNTVCYXRjaFJlY2VpdmVkKAogICAgICAgICAgICAgICAgICAgIG1zZy5zZW5kZXIsIGFkZHJlc3MoMCksIGlkcywgdmFsdWVzLCBkYXRhCiAgICAgICAgICAgICAgICApID09IElFUkMxMTU1VG9rZW5SZWNlaXZlci5vbkVSQzExNTVCYXRjaFJlY2VpdmVkLnNlbGVjdG9yLAogICAgICAgICAgICAgICAgInVuc2FmZSB0cmFuc2ZlciIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2J1cm4oYWRkcmVzcyBmcm9tLCB1aW50MjU2IGlkLCB1aW50MjU2IHZhbHVlKSBpbnRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShmcm9tICE9IGFkZHJlc3MoMCksICJmcm9tID0gMCBhZGRyZXNzIik7CiAgICAgICAgYmFsYW5jZU9mW2Zyb21dW2lkXSAtPSB2YWx1ZTsKICAgICAgICBlbWl0IFRyYW5zZmVyU2luZ2xlKG1zZy5zZW5kZXIsIGZyb20sIGFkZHJlc3MoMCksIGlkLCB2YWx1ZSk7CiAgICB9CgogICAgZnVuY3Rpb24gX2JhdGNoQnVybigKICAgICAgICBhZGRyZXNzIGZyb20sCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIGlkcywKICAgICAgICB1aW50MjU2W10gY2FsbGRhdGEgdmFsdWVzCiAgICApIGludGVybmFsIHsKICAgICAgICByZXF1aXJlKGZyb20gIT0gYWRkcmVzcygwKSwgImZyb20gPSAwIGFkZHJlc3MiKTsKICAgICAgICByZXF1aXJlKGlkcy5sZW5ndGggPT0gdmFsdWVzLmxlbmd0aCwgImlkcyBsZW5ndGggIT0gdmFsdWVzIGxlbmd0aCIpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYmFsYW5jZU9mW2Zyb21dW2lkc1tpXV0gLT0gdmFsdWVzW2ldOwogICAgICAgIH0KCiAgICAgICAgZW1pdCBUcmFuc2ZlckJhdGNoKG1zZy5zZW5kZXIsIGZyb20sIGFkZHJlc3MoMCksIGlkcywgdmFsdWVzKTsKICAgIH0KfQoKY29udHJhY3QgTXlNdWx0aVRva2VuIGlzIEVSQzExNTUgewogICAgZnVuY3Rpb24gbWludCh1aW50MjU2IGlkLCB1aW50MjU2IHZhbHVlLCBieXRlcyBtZW1vcnkgZGF0YSkgZXh0ZXJuYWwgewogICAgICAgIF9taW50KG1zZy5zZW5kZXIsIGlkLCB2YWx1ZSwgZGF0YSk7CiAgICB9CgogICAgZnVuY3Rpb24gYmF0Y2hNaW50KAogICAgICAgIHVpbnQyNTZbXSBjYWxsZGF0YSBpZHMsCiAgICAgICAgdWludDI1NltdIGNhbGxkYXRhIHZhbHVlcywKICAgICAgICBieXRlcyBjYWxsZGF0YSBkYXRhCiAgICApIGV4dGVybmFsIHsKICAgICAgICBfYmF0Y2hNaW50KG1zZy5zZW5kZXIsIGlkcywgdmFsdWVzLCBkYXRhKTsKICAgIH0KCiAgICBmdW5jdGlvbiBidXJuKHVpbnQyNTYgaWQsIHVpbnQyNTYgdmFsdWUpIGV4dGVybmFsIHsKICAgICAgICBfYnVybihtc2cuc2VuZGVyLCBpZCwgdmFsdWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGJhdGNoQnVybih1aW50MjU2W10gY2FsbGRhdGEgaWRzLCB1aW50MjU2W10gY2FsbGRhdGEgdmFsdWVzKQogICAgICAgIGV4dGVybmFsCiAgICB7CiAgICAgICAgX2JhdGNoQnVybihtc2cuc2VuZGVyLCBpZHMsIHZhbHVlcyk7CiAgICB9Cn0K"}],Jj=`

      Example of ERC1155

      // SPDX-License-Identifier: MIT
       pragma solidity ^0.8.24;
       
      @@ -1971,7 +1971,7 @@ How to swap tokens
               assert(map.getKeyAtIndex(2) == address(2));
           }
       }
      -
      `,yu=({prev:s,next:a})=>i.jsx(u,{version:du,title:Iu,description:Cu,html:uu,prev:s,next:a,codes:ju}),Au="0.8.24",mu="Merkle Tree",bu="Learn about Merkle tree in Solidity",wu=[{fileName:"MerkleTree.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE1lcmtsZVByb29mIHsKICAgIGZ1bmN0aW9uIHZlcmlmeSgKICAgICAgICBieXRlczMyW10gbWVtb3J5IHByb29mLAogICAgICAgIGJ5dGVzMzIgcm9vdCwKICAgICAgICBieXRlczMyIGxlYWYsCiAgICAgICAgdWludDI1NiBpbmRleAogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zIChib29sKSB7CiAgICAgICAgYnl0ZXMzMiBoYXNoID0gbGVhZjsKCiAgICAgICAgZm9yICh1aW50MjU2IGkgPSAwOyBpIDwgcHJvb2YubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYnl0ZXMzMiBwcm9vZkVsZW1lbnQgPSBwcm9vZltpXTsKCiAgICAgICAgICAgIGlmIChpbmRleCAlIDIgPT0gMCkgewogICAgICAgICAgICAgICAgaGFzaCA9IGtlY2NhazI1NihhYmkuZW5jb2RlUGFja2VkKGhhc2gsIHByb29mRWxlbWVudCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaGFzaCA9IGtlY2NhazI1NihhYmkuZW5jb2RlUGFja2VkKHByb29mRWxlbWVudCwgaGFzaCkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmRleCA9IGluZGV4IC8gMjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBoYXNoID09IHJvb3Q7CiAgICB9Cn0KCmNvbnRyYWN0IFRlc3RNZXJrbGVQcm9vZiBpcyBNZXJrbGVQcm9vZiB7CiAgICBieXRlczMyW10gcHVibGljIGhhc2hlczsKCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdHJpbmdbNF0gbWVtb3J5IHRyYW5zYWN0aW9ucyA9CiAgICAgICAgICAgIFsiYWxpY2UgLT4gYm9iIiwgImJvYiAtPiBkYXZlIiwgImNhcm9sIC0+IGFsaWNlIiwgImRhdmUgLT4gYm9iIl07CgogICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IHRyYW5zYWN0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBoYXNoZXMucHVzaChrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZCh0cmFuc2FjdGlvbnNbaV0pKSk7CiAgICAgICAgfQoKICAgICAgICB1aW50MjU2IG4gPSB0cmFuc2FjdGlvbnMubGVuZ3RoOwogICAgICAgIHVpbnQyNTYgb2Zmc2V0ID0gMDsKCiAgICAgICAgd2hpbGUgKG4gPiAwKSB7CiAgICAgICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IG4gLSAxOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGhhc2hlcy5wdXNoKAogICAgICAgICAgICAgICAgICAgIGtlY2NhazI1NigKICAgICAgICAgICAgICAgICAgICAgICAgYWJpLmVuY29kZVBhY2tlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hlc1tvZmZzZXQgKyBpXSwgaGFzaGVzW29mZnNldCArIGkgKyAxXQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBvZmZzZXQgKz0gbjsKICAgICAgICAgICAgbiA9IG4gLyAyOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRSb290KCkgcHVibGljIHZpZXcgcmV0dXJucyAoYnl0ZXMzMikgewogICAgICAgIHJldHVybiBoYXNoZXNbaGFzaGVzLmxlbmd0aCAtIDFdOwogICAgfQoKICAgIC8qIHZlcmlmeQogICAgM3JkIGxlYWYKICAgIDB4ZGNhMzMyNmFkN2U4MTIxYmY5Y2Y5YzEyMzMzZTZiMjI3MWFiZTgyM2VjOWVkZmU0MmY4MTNiMWU3NjhmYTU3YgoKICAgIHJvb3QKICAgIDB4Y2MwODZmY2MwMzgxODliNDY0MWRiMmNjNGYxZGUzYmIxMzJhZWZiZDY1ZDUxMGQ4MTc1OTE1NTA5Mzc4MThjNwoKICAgIGluZGV4CiAgICAyCgogICAgcHJvb2YKICAgIDB4OGRhOWUxYzgyMGY5ZGJkMTU4OWZkNjU4NTg3MmJjMTA2MzU4ODYyNTcyOWU3YWIwNzk3Y2ZjNjNhMDBiZDk1MAogICAgMHg5OTU3ODhmZmMxMDNiOTg3YWQ1MGY1ZTU3MDdmZDA5NDQxOWViMTJkOTU1MmNjNDIzYmQwY2Q4NmEzODYxNDMzCiAgICAqLwp9Cg=="}],ku=`

      Merkle tree allows you to cryptographically prove that an element is contained

      +`,Au=({prev:s,next:a})=>i.jsx(u,{version:du,title:Iu,description:Cu,html:uu,prev:s,next:a,codes:ju}),yu="0.8.24",mu="Merkle Tree",bu="Learn about Merkle tree in Solidity",wu=[{fileName:"MerkleTree.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE1lcmtsZVByb29mIHsKICAgIGZ1bmN0aW9uIHZlcmlmeSgKICAgICAgICBieXRlczMyW10gbWVtb3J5IHByb29mLAogICAgICAgIGJ5dGVzMzIgcm9vdCwKICAgICAgICBieXRlczMyIGxlYWYsCiAgICAgICAgdWludDI1NiBpbmRleAogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zIChib29sKSB7CiAgICAgICAgYnl0ZXMzMiBoYXNoID0gbGVhZjsKCiAgICAgICAgZm9yICh1aW50MjU2IGkgPSAwOyBpIDwgcHJvb2YubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYnl0ZXMzMiBwcm9vZkVsZW1lbnQgPSBwcm9vZltpXTsKCiAgICAgICAgICAgIGlmIChpbmRleCAlIDIgPT0gMCkgewogICAgICAgICAgICAgICAgaGFzaCA9IGtlY2NhazI1NihhYmkuZW5jb2RlUGFja2VkKGhhc2gsIHByb29mRWxlbWVudCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaGFzaCA9IGtlY2NhazI1NihhYmkuZW5jb2RlUGFja2VkKHByb29mRWxlbWVudCwgaGFzaCkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbmRleCA9IGluZGV4IC8gMjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBoYXNoID09IHJvb3Q7CiAgICB9Cn0KCmNvbnRyYWN0IFRlc3RNZXJrbGVQcm9vZiBpcyBNZXJrbGVQcm9vZiB7CiAgICBieXRlczMyW10gcHVibGljIGhhc2hlczsKCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdHJpbmdbNF0gbWVtb3J5IHRyYW5zYWN0aW9ucyA9CiAgICAgICAgICAgIFsiYWxpY2UgLT4gYm9iIiwgImJvYiAtPiBkYXZlIiwgImNhcm9sIC0+IGFsaWNlIiwgImRhdmUgLT4gYm9iIl07CgogICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IHRyYW5zYWN0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBoYXNoZXMucHVzaChrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZCh0cmFuc2FjdGlvbnNbaV0pKSk7CiAgICAgICAgfQoKICAgICAgICB1aW50MjU2IG4gPSB0cmFuc2FjdGlvbnMubGVuZ3RoOwogICAgICAgIHVpbnQyNTYgb2Zmc2V0ID0gMDsKCiAgICAgICAgd2hpbGUgKG4gPiAwKSB7CiAgICAgICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IG4gLSAxOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGhhc2hlcy5wdXNoKAogICAgICAgICAgICAgICAgICAgIGtlY2NhazI1NigKICAgICAgICAgICAgICAgICAgICAgICAgYWJpLmVuY29kZVBhY2tlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hlc1tvZmZzZXQgKyBpXSwgaGFzaGVzW29mZnNldCArIGkgKyAxXQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBvZmZzZXQgKz0gbjsKICAgICAgICAgICAgbiA9IG4gLyAyOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRSb290KCkgcHVibGljIHZpZXcgcmV0dXJucyAoYnl0ZXMzMikgewogICAgICAgIHJldHVybiBoYXNoZXNbaGFzaGVzLmxlbmd0aCAtIDFdOwogICAgfQoKICAgIC8qIHZlcmlmeQogICAgM3JkIGxlYWYKICAgIDB4ZGNhMzMyNmFkN2U4MTIxYmY5Y2Y5YzEyMzMzZTZiMjI3MWFiZTgyM2VjOWVkZmU0MmY4MTNiMWU3NjhmYTU3YgoKICAgIHJvb3QKICAgIDB4Y2MwODZmY2MwMzgxODliNDY0MWRiMmNjNGYxZGUzYmIxMzJhZWZiZDY1ZDUxMGQ4MTc1OTE1NTA5Mzc4MThjNwoKICAgIGluZGV4CiAgICAyCgogICAgcHJvb2YKICAgIDB4OGRhOWUxYzgyMGY5ZGJkMTU4OWZkNjU4NTg3MmJjMTA2MzU4ODYyNTcyOWU3YWIwNzk3Y2ZjNjNhMDBiZDk1MAogICAgMHg5OTU3ODhmZmMxMDNiOTg3YWQ1MGY1ZTU3MDdmZDA5NDQxOWViMTJkOTU1MmNjNDIzYmQwY2Q4NmEzODYxNDMzCiAgICAqLwp9Cg=="}],ku=`

      Merkle tree allows you to cryptographically prove that an element is contained

      in a set without revealing the entire set.

      // SPDX-License-Identifier: MIT
       pragma solidity ^0.8.24;
      @@ -2049,7 +2049,7 @@ How to swap tokens
           0x995788ffc103b987ad50f5e5707fd094419eb12d9552cc423bd0cd86a3861433
           */
       }
      -
      `,Zu=({prev:s,next:a})=>i.jsx(u,{version:Au,title:mu,description:bu,html:ku,prev:s,next:a,codes:wu}),Wu="0.8.24",Gu="Minimal Proxy Contract",Bu="Deploy contracts cheaply with minimal proxy contract",fu=[{fileName:"MinimalProxy.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIG9yaWdpbmFsIGNvZGUKLy8gaHR0cHM6Ly9naXRodWIuY29tL29wdGlvbmFsaXR5L2Nsb25lLWZhY3RvcnkvYmxvYi9tYXN0ZXIvY29udHJhY3RzL0Nsb25lRmFjdG9yeS5zb2wKCmNvbnRyYWN0IE1pbmltYWxQcm94eSB7CiAgICBmdW5jdGlvbiBjbG9uZShhZGRyZXNzIHRhcmdldCkgZXh0ZXJuYWwgcmV0dXJucyAoYWRkcmVzcyByZXN1bHQpIHsKICAgICAgICAvLyBjb252ZXJ0IGFkZHJlc3MgdG8gMjAgYnl0ZXMKICAgICAgICBieXRlczIwIHRhcmdldEJ5dGVzID0gYnl0ZXMyMCh0YXJnZXQpOwoKICAgICAgICAvLyBhY3R1YWwgY29kZSAvLwogICAgICAgIC8vIDNkNjAyZDgwNjAwYTNkMzk4MWYzMzYzZDNkMzczZDNkM2QzNjNkNzNiZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlNWFmNDNkODI4MDNlOTAzZDkxNjAyYjU3ZmQ1YmYzCgogICAgICAgIC8vIGNyZWF0aW9uIGNvZGUgLy8KICAgICAgICAvLyBjb3B5IHJ1bnRpbWUgY29kZSBpbnRvIG1lbW9yeSBhbmQgcmV0dXJuIGl0CiAgICAgICAgLy8gM2Q2MDJkODA2MDBhM2QzOTgxZjMKCiAgICAgICAgLy8gcnVudGltZSBjb2RlIC8vCiAgICAgICAgLy8gY29kZSB0byBkZWxlZ2F0ZWNhbGwgdG8gYWRkcmVzcwogICAgICAgIC8vIDM2M2QzZDM3M2QzZDNkMzYzZDczIGFkZHJlc3MgNWFmNDNkODI4MDNlOTAzZDkxNjAyYjU3ZmQ1YmYzCgogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgLyoKICAgICAgICAgICAgcmVhZHMgdGhlIDMyIGJ5dGVzIG9mIG1lbW9yeSBzdGFydGluZyBhdCBwb2ludGVyIHN0b3JlZCBpbiAweDQwCgogICAgICAgICAgICBJbiBzb2xpZGl0eSwgdGhlIDB4NDAgc2xvdCBpbiBtZW1vcnkgaXMgc3BlY2lhbDogaXQgY29udGFpbnMgdGhlICJmcmVlIG1lbW9yeSBwb2ludGVyIgogICAgICAgICAgICB3aGljaCBwb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudGx5IGFsbG9jYXRlZCBtZW1vcnkuCiAgICAgICAgICAgICovCiAgICAgICAgICAgIGxldCBjbG9uZSA6PSBtbG9hZCgweDQwKQogICAgICAgICAgICAvLyBzdG9yZSAzMiBieXRlcyB0byBtZW1vcnkgc3RhcnRpbmcgYXQgImNsb25lIgogICAgICAgICAgICBtc3RvcmUoCiAgICAgICAgICAgICAgICBjbG9uZSwKICAgICAgICAgICAgICAgIDB4M2Q2MDJkODA2MDBhM2QzOTgxZjMzNjNkM2QzNzNkM2QzZDM2M2Q3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgICAgICAgICApCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgIHwgICAgICAgICAgICAgIDIwIGJ5dGVzICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgMHgzZDYwMmQ4MDYwMGEzZDM5ODFmMzM2M2QzZDM3M2QzZDNkMzYzZDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcgogICAgICAgICAgICAqLwogICAgICAgICAgICAvLyBzdG9yZSAzMiBieXRlcyB0byBtZW1vcnkgc3RhcnRpbmcgYXQgImNsb25lIiArIDIwIGJ5dGVzCiAgICAgICAgICAgIC8vIDB4MTQgPSAyMAogICAgICAgICAgICBtc3RvcmUoYWRkKGNsb25lLCAweDE0KSwgdGFyZ2V0Qnl0ZXMpCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAyMCBieXRlcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIDIwIGJ5dGVzICAgICAgICAgICAgICB8CiAgICAgICAgICAgIDB4M2Q2MDJkODA2MDBhM2QzOTgxZjMzNjNkM2QzNzNkM2QzZDM2M2Q3M2JlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIKICAgICAgICAgICAgKi8KICAgICAgICAgICAgLy8gc3RvcmUgMzIgYnl0ZXMgdG8gbWVtb3J5IHN0YXJ0aW5nIGF0ICJjbG9uZSIgKyA0MCBieXRlcwogICAgICAgICAgICAvLyAweDI4ID0gNDAKICAgICAgICAgICAgbXN0b3JlKAogICAgICAgICAgICAgICAgYWRkKGNsb25lLCAweDI4KSwKICAgICAgICAgICAgICAgIDB4NWFmNDNkODI4MDNlOTAzZDkxNjAyYjU3ZmQ1YmYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgICAgICAgICApCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAyMCBieXRlcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIDIwIGJ5dGVzICAgICAgICAgICAgICB8ICAgICAgICAgICAxNSBieXRlcyAgICAgICAgICB8CiAgICAgICAgICAgIDB4M2Q2MDJkODA2MDBhM2QzOTgxZjMzNjNkM2QzNzNkM2QzZDM2M2Q3M2JlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmU1YWY0M2Q4MjgwM2U5MDNkOTE2MDJiNTdmZDViZjMKICAgICAgICAgICAgKi8KICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBjb250cmFjdAogICAgICAgICAgICAvLyBzZW5kIDAgRXRoZXIKICAgICAgICAgICAgLy8gY29kZSBzdGFydHMgYXQgcG9pbnRlciBzdG9yZWQgaW4gImNsb25lIgogICAgICAgICAgICAvLyBjb2RlIHNpemUgMHgzNyAoNTUgYnl0ZXMpCiAgICAgICAgICAgIHJlc3VsdCA6PSBjcmVhdGUoMCwgY2xvbmUsIDB4MzcpCiAgICAgICAgfQogICAgfQp9Cg=="}],Vu=`

      If you have a contract that will be deployed multiple times, use minimal proxy contract to deploy them cheaply.

      +`,Zu=({prev:s,next:a})=>i.jsx(u,{version:yu,title:mu,description:bu,html:ku,prev:s,next:a,codes:wu}),Wu="0.8.24",Gu="Minimal Proxy Contract",Bu="Deploy contracts cheaply with minimal proxy contract",Vu=[{fileName:"MinimalProxy.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIG9yaWdpbmFsIGNvZGUKLy8gaHR0cHM6Ly9naXRodWIuY29tL29wdGlvbmFsaXR5L2Nsb25lLWZhY3RvcnkvYmxvYi9tYXN0ZXIvY29udHJhY3RzL0Nsb25lRmFjdG9yeS5zb2wKCmNvbnRyYWN0IE1pbmltYWxQcm94eSB7CiAgICBmdW5jdGlvbiBjbG9uZShhZGRyZXNzIHRhcmdldCkgZXh0ZXJuYWwgcmV0dXJucyAoYWRkcmVzcyByZXN1bHQpIHsKICAgICAgICAvLyBjb252ZXJ0IGFkZHJlc3MgdG8gMjAgYnl0ZXMKICAgICAgICBieXRlczIwIHRhcmdldEJ5dGVzID0gYnl0ZXMyMCh0YXJnZXQpOwoKICAgICAgICAvLyBhY3R1YWwgY29kZSAvLwogICAgICAgIC8vIDNkNjAyZDgwNjAwYTNkMzk4MWYzMzYzZDNkMzczZDNkM2QzNjNkNzNiZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlNWFmNDNkODI4MDNlOTAzZDkxNjAyYjU3ZmQ1YmYzCgogICAgICAgIC8vIGNyZWF0aW9uIGNvZGUgLy8KICAgICAgICAvLyBjb3B5IHJ1bnRpbWUgY29kZSBpbnRvIG1lbW9yeSBhbmQgcmV0dXJuIGl0CiAgICAgICAgLy8gM2Q2MDJkODA2MDBhM2QzOTgxZjMKCiAgICAgICAgLy8gcnVudGltZSBjb2RlIC8vCiAgICAgICAgLy8gY29kZSB0byBkZWxlZ2F0ZWNhbGwgdG8gYWRkcmVzcwogICAgICAgIC8vIDM2M2QzZDM3M2QzZDNkMzYzZDczIGFkZHJlc3MgNWFmNDNkODI4MDNlOTAzZDkxNjAyYjU3ZmQ1YmYzCgogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgLyoKICAgICAgICAgICAgcmVhZHMgdGhlIDMyIGJ5dGVzIG9mIG1lbW9yeSBzdGFydGluZyBhdCBwb2ludGVyIHN0b3JlZCBpbiAweDQwCgogICAgICAgICAgICBJbiBzb2xpZGl0eSwgdGhlIDB4NDAgc2xvdCBpbiBtZW1vcnkgaXMgc3BlY2lhbDogaXQgY29udGFpbnMgdGhlICJmcmVlIG1lbW9yeSBwb2ludGVyIgogICAgICAgICAgICB3aGljaCBwb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudGx5IGFsbG9jYXRlZCBtZW1vcnkuCiAgICAgICAgICAgICovCiAgICAgICAgICAgIGxldCBjbG9uZSA6PSBtbG9hZCgweDQwKQogICAgICAgICAgICAvLyBzdG9yZSAzMiBieXRlcyB0byBtZW1vcnkgc3RhcnRpbmcgYXQgImNsb25lIgogICAgICAgICAgICBtc3RvcmUoCiAgICAgICAgICAgICAgICBjbG9uZSwKICAgICAgICAgICAgICAgIDB4M2Q2MDJkODA2MDBhM2QzOTgxZjMzNjNkM2QzNzNkM2QzZDM2M2Q3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgICAgICAgICApCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgIHwgICAgICAgICAgICAgIDIwIGJ5dGVzICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgMHgzZDYwMmQ4MDYwMGEzZDM5ODFmMzM2M2QzZDM3M2QzZDNkMzYzZDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcgogICAgICAgICAgICAqLwogICAgICAgICAgICAvLyBzdG9yZSAzMiBieXRlcyB0byBtZW1vcnkgc3RhcnRpbmcgYXQgImNsb25lIiArIDIwIGJ5dGVzCiAgICAgICAgICAgIC8vIDB4MTQgPSAyMAogICAgICAgICAgICBtc3RvcmUoYWRkKGNsb25lLCAweDE0KSwgdGFyZ2V0Qnl0ZXMpCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAyMCBieXRlcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIDIwIGJ5dGVzICAgICAgICAgICAgICB8CiAgICAgICAgICAgIDB4M2Q2MDJkODA2MDBhM2QzOTgxZjMzNjNkM2QzNzNkM2QzZDM2M2Q3M2JlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIKICAgICAgICAgICAgKi8KICAgICAgICAgICAgLy8gc3RvcmUgMzIgYnl0ZXMgdG8gbWVtb3J5IHN0YXJ0aW5nIGF0ICJjbG9uZSIgKyA0MCBieXRlcwogICAgICAgICAgICAvLyAweDI4ID0gNDAKICAgICAgICAgICAgbXN0b3JlKAogICAgICAgICAgICAgICAgYWRkKGNsb25lLCAweDI4KSwKICAgICAgICAgICAgICAgIDB4NWFmNDNkODI4MDNlOTAzZDkxNjAyYjU3ZmQ1YmYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgICAgICAgICApCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAyMCBieXRlcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIDIwIGJ5dGVzICAgICAgICAgICAgICB8ICAgICAgICAgICAxNSBieXRlcyAgICAgICAgICB8CiAgICAgICAgICAgIDB4M2Q2MDJkODA2MDBhM2QzOTgxZjMzNjNkM2QzNzNkM2QzZDM2M2Q3M2JlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmViZWJlYmU1YWY0M2Q4MjgwM2U5MDNkOTE2MDJiNTdmZDViZjMKICAgICAgICAgICAgKi8KICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBjb250cmFjdAogICAgICAgICAgICAvLyBzZW5kIDAgRXRoZXIKICAgICAgICAgICAgLy8gY29kZSBzdGFydHMgYXQgcG9pbnRlciBzdG9yZWQgaW4gImNsb25lIgogICAgICAgICAgICAvLyBjb2RlIHNpemUgMHgzNyAoNTUgYnl0ZXMpCiAgICAgICAgICAgIHJlc3VsdCA6PSBjcmVhdGUoMCwgY2xvbmUsIDB4MzcpCiAgICAgICAgfQogICAgfQp9Cg=="}],fu=`

      If you have a contract that will be deployed multiple times, use minimal proxy contract to deploy them cheaply.

      // SPDX-License-Identifier: MIT
       pragma solidity ^0.8.24;
       
      @@ -2121,7 +2121,7 @@ How to swap tokens
               }
           }
       }
      -
      `,Yu=({prev:s,next:a})=>i.jsx(u,{version:Wu,title:Gu,description:Bu,html:Vu,prev:s,next:a,codes:fu}),Ru="0.8.24",vu="Multi Call",Xu="An example of contract to aggregate multiple calls.",Nu=[{fileName:"MultiCall.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE11bHRpQ2FsbCB7CiAgICBmdW5jdGlvbiBtdWx0aUNhbGwoYWRkcmVzc1tdIGNhbGxkYXRhIHRhcmdldHMsIGJ5dGVzW10gY2FsbGRhdGEgZGF0YSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChieXRlc1tdIG1lbW9yeSkKICAgIHsKICAgICAgICByZXF1aXJlKHRhcmdldHMubGVuZ3RoID09IGRhdGEubGVuZ3RoLCAidGFyZ2V0IGxlbmd0aCAhPSBkYXRhIGxlbmd0aCIpOwoKICAgICAgICBieXRlc1tdIG1lbW9yeSByZXN1bHRzID0gbmV3IGJ5dGVzW10oZGF0YS5sZW5ndGgpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaTsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgKGJvb2wgc3VjY2VzcywgYnl0ZXMgbWVtb3J5IHJlc3VsdCkgPSB0YXJnZXRzW2ldLnN0YXRpY2NhbGwoZGF0YVtpXSk7CiAgICAgICAgICAgIHJlcXVpcmUoc3VjY2VzcywgImNhbGwgZmFpbGVkIik7CiAgICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KfQo="},{fileName:"TestMultiCall.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFRlc3RNdWx0aUNhbGwgewogICAgZnVuY3Rpb24gdGVzdCh1aW50MjU2IF9pKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gX2k7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0RGF0YSh1aW50MjU2IF9pKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKGJ5dGVzIG1lbW9yeSkgewogICAgICAgIHJldHVybiBhYmkuZW5jb2RlV2l0aFNlbGVjdG9yKHRoaXMudGVzdC5zZWxlY3RvciwgX2kpOwogICAgfQp9Cg=="}],Hu=`

      An example of contract that aggregates multiple queries using a for loop and staticcall.

      +`,Yu=({prev:s,next:a})=>i.jsx(u,{version:Wu,title:Gu,description:Bu,html:fu,prev:s,next:a,codes:Vu}),Ru="0.8.24",Xu="Multi Call",vu="An example of contract to aggregate multiple calls.",Nu=[{fileName:"MultiCall.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE11bHRpQ2FsbCB7CiAgICBmdW5jdGlvbiBtdWx0aUNhbGwoYWRkcmVzc1tdIGNhbGxkYXRhIHRhcmdldHMsIGJ5dGVzW10gY2FsbGRhdGEgZGF0YSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChieXRlc1tdIG1lbW9yeSkKICAgIHsKICAgICAgICByZXF1aXJlKHRhcmdldHMubGVuZ3RoID09IGRhdGEubGVuZ3RoLCAidGFyZ2V0IGxlbmd0aCAhPSBkYXRhIGxlbmd0aCIpOwoKICAgICAgICBieXRlc1tdIG1lbW9yeSByZXN1bHRzID0gbmV3IGJ5dGVzW10oZGF0YS5sZW5ndGgpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaTsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgKGJvb2wgc3VjY2VzcywgYnl0ZXMgbWVtb3J5IHJlc3VsdCkgPSB0YXJnZXRzW2ldLnN0YXRpY2NhbGwoZGF0YVtpXSk7CiAgICAgICAgICAgIHJlcXVpcmUoc3VjY2VzcywgImNhbGwgZmFpbGVkIik7CiAgICAgICAgICAgIHJlc3VsdHNbaV0gPSByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KfQo="},{fileName:"TestMultiCall.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFRlc3RNdWx0aUNhbGwgewogICAgZnVuY3Rpb24gdGVzdCh1aW50MjU2IF9pKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4gX2k7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0RGF0YSh1aW50MjU2IF9pKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKGJ5dGVzIG1lbW9yeSkgewogICAgICAgIHJldHVybiBhYmkuZW5jb2RlV2l0aFNlbGVjdG9yKHRoaXMudGVzdC5zZWxlY3RvciwgX2kpOwogICAgfQp9Cg=="}],Hu=`

      An example of contract that aggregates multiple queries using a for loop and staticcall.

      // SPDX-License-Identifier: MIT
       pragma solidity ^0.8.24;
       
      @@ -2157,7 +2157,7 @@ How to swap tokens
               return abi.encodeWithSelector(this.test.selector, _i);
           }
       }
      -
      `,Fu=({prev:s,next:a})=>i.jsx(u,{version:Ru,title:vu,description:Xu,html:Hu,prev:s,next:a,codes:Nu}),Ku="0.8.24",Su="Multi Delegatecall",Mu="An example of contract to call multiple functions in a single transaction",xu=[{fileName:"MultiDelegatecall.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE11bHRpRGVsZWdhdGVjYWxsIHsKICAgIGVycm9yIERlbGVnYXRlY2FsbEZhaWxlZCgpOwoKICAgIGZ1bmN0aW9uIG11bHRpRGVsZWdhdGVjYWxsKGJ5dGVzW10gbWVtb3J5IGRhdGEpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwYXlhYmxlCiAgICAgICAgcmV0dXJucyAoYnl0ZXNbXSBtZW1vcnkgcmVzdWx0cykKICAgIHsKICAgICAgICByZXN1bHRzID0gbmV3IGJ5dGVzW10oZGF0YS5sZW5ndGgpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaTsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgKGJvb2wgb2ssIGJ5dGVzIG1lbW9yeSByZXMpID0gYWRkcmVzcyh0aGlzKS5kZWxlZ2F0ZWNhbGwoZGF0YVtpXSk7CiAgICAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgICAgIHJldmVydCBEZWxlZ2F0ZWNhbGxGYWlsZWQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHRzW2ldID0gcmVzOwogICAgICAgIH0KICAgIH0KfQoKLy8gV2h5IHVzZSBtdWx0aSBkZWxlZ2F0ZWNhbGw/IFdoeSBub3QgbXVsdGkgY2FsbD8KLy8gYWxpY2UgLT4gbXVsdGkgY2FsbCAtLS0gY2FsbCAtLS0+IHRlc3QgKG1zZy5zZW5kZXIgPSBtdWx0aSBjYWxsKQovLyBhbGljZSAtPiB0ZXN0IC0tLSBkZWxlZ2F0ZWNhbGwgLS0tPiB0ZXN0IChtc2cuc2VuZGVyID0gYWxpY2UpCmNvbnRyYWN0IFRlc3RNdWx0aURlbGVnYXRlY2FsbCBpcyBNdWx0aURlbGVnYXRlY2FsbCB7CiAgICBldmVudCBMb2coYWRkcmVzcyBjYWxsZXIsIHN0cmluZyBmdW5jLCB1aW50MjU2IGkpOwoKICAgIGZ1bmN0aW9uIGZ1bmMxKHVpbnQyNTYgeCwgdWludDI1NiB5KSBleHRlcm5hbCB7CiAgICAgICAgLy8gbXNnLnNlbmRlciA9IGFsaWNlCiAgICAgICAgZW1pdCBMb2cobXNnLnNlbmRlciwgImZ1bmMxIiwgeCArIHkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGZ1bmMyKCkgZXh0ZXJuYWwgcmV0dXJucyAodWludDI1NikgewogICAgICAgIC8vIG1zZy5zZW5kZXIgPSBhbGljZQogICAgICAgIGVtaXQgTG9nKG1zZy5zZW5kZXIsICJmdW5jMiIsIDIpOwogICAgICAgIHJldHVybiAxMTE7CiAgICB9CgogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgLy8gV0FSTklORzogdW5zYWZlIGNvZGUgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggbXVsdGktZGVsZWdhdGVjYWxsCiAgICAvLyB1c2VyIGNhbiBtaW50IG11bHRpcGxlIHRpbWVzIGZvciB0aGUgcHJpY2Ugb2YgbXNnLnZhbHVlCiAgICBmdW5jdGlvbiBtaW50KCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgYmFsYW5jZU9mW21zZy5zZW5kZXJdICs9IG1zZy52YWx1ZTsKICAgIH0KfQoKY29udHJhY3QgSGVscGVyIHsKICAgIGZ1bmN0aW9uIGdldEZ1bmMxRGF0YSh1aW50MjU2IHgsIHVpbnQyNTYgeSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlcyBtZW1vcnkpCiAgICB7CiAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIGFiaS5lbmNvZGVXaXRoU2VsZWN0b3IoVGVzdE11bHRpRGVsZWdhdGVjYWxsLmZ1bmMxLnNlbGVjdG9yLCB4LCB5KTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRGdW5jMkRhdGEoKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKGJ5dGVzIG1lbW9yeSkgewogICAgICAgIHJldHVybiBhYmkuZW5jb2RlV2l0aFNlbGVjdG9yKFRlc3RNdWx0aURlbGVnYXRlY2FsbC5mdW5jMi5zZWxlY3Rvcik7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWludERhdGEoKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKGJ5dGVzIG1lbW9yeSkgewogICAgICAgIHJldHVybiBhYmkuZW5jb2RlV2l0aFNlbGVjdG9yKFRlc3RNdWx0aURlbGVnYXRlY2FsbC5taW50LnNlbGVjdG9yKTsKICAgIH0KfQo="}],Ju=`

      An example of calling multiple functions with a single transaction, using delegatecall.

      +`,Fu=({prev:s,next:a})=>i.jsx(u,{version:Ru,title:Xu,description:vu,html:Hu,prev:s,next:a,codes:Nu}),Ku="0.8.24",Su="Multi Delegatecall",Mu="An example of contract to call multiple functions in a single transaction",xu=[{fileName:"MultiDelegatecall.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE11bHRpRGVsZWdhdGVjYWxsIHsKICAgIGVycm9yIERlbGVnYXRlY2FsbEZhaWxlZCgpOwoKICAgIGZ1bmN0aW9uIG11bHRpRGVsZWdhdGVjYWxsKGJ5dGVzW10gbWVtb3J5IGRhdGEpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwYXlhYmxlCiAgICAgICAgcmV0dXJucyAoYnl0ZXNbXSBtZW1vcnkgcmVzdWx0cykKICAgIHsKICAgICAgICByZXN1bHRzID0gbmV3IGJ5dGVzW10oZGF0YS5sZW5ndGgpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaTsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgKGJvb2wgb2ssIGJ5dGVzIG1lbW9yeSByZXMpID0gYWRkcmVzcyh0aGlzKS5kZWxlZ2F0ZWNhbGwoZGF0YVtpXSk7CiAgICAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgICAgIHJldmVydCBEZWxlZ2F0ZWNhbGxGYWlsZWQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHRzW2ldID0gcmVzOwogICAgICAgIH0KICAgIH0KfQoKLy8gV2h5IHVzZSBtdWx0aSBkZWxlZ2F0ZWNhbGw/IFdoeSBub3QgbXVsdGkgY2FsbD8KLy8gYWxpY2UgLT4gbXVsdGkgY2FsbCAtLS0gY2FsbCAtLS0+IHRlc3QgKG1zZy5zZW5kZXIgPSBtdWx0aSBjYWxsKQovLyBhbGljZSAtPiB0ZXN0IC0tLSBkZWxlZ2F0ZWNhbGwgLS0tPiB0ZXN0IChtc2cuc2VuZGVyID0gYWxpY2UpCmNvbnRyYWN0IFRlc3RNdWx0aURlbGVnYXRlY2FsbCBpcyBNdWx0aURlbGVnYXRlY2FsbCB7CiAgICBldmVudCBMb2coYWRkcmVzcyBjYWxsZXIsIHN0cmluZyBmdW5jLCB1aW50MjU2IGkpOwoKICAgIGZ1bmN0aW9uIGZ1bmMxKHVpbnQyNTYgeCwgdWludDI1NiB5KSBleHRlcm5hbCB7CiAgICAgICAgLy8gbXNnLnNlbmRlciA9IGFsaWNlCiAgICAgICAgZW1pdCBMb2cobXNnLnNlbmRlciwgImZ1bmMxIiwgeCArIHkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGZ1bmMyKCkgZXh0ZXJuYWwgcmV0dXJucyAodWludDI1NikgewogICAgICAgIC8vIG1zZy5zZW5kZXIgPSBhbGljZQogICAgICAgIGVtaXQgTG9nKG1zZy5zZW5kZXIsICJmdW5jMiIsIDIpOwogICAgICAgIHJldHVybiAxMTE7CiAgICB9CgogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgLy8gV0FSTklORzogdW5zYWZlIGNvZGUgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggbXVsdGktZGVsZWdhdGVjYWxsCiAgICAvLyB1c2VyIGNhbiBtaW50IG11bHRpcGxlIHRpbWVzIGZvciB0aGUgcHJpY2Ugb2YgbXNnLnZhbHVlCiAgICBmdW5jdGlvbiBtaW50KCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgYmFsYW5jZU9mW21zZy5zZW5kZXJdICs9IG1zZy52YWx1ZTsKICAgIH0KfQoKY29udHJhY3QgSGVscGVyIHsKICAgIGZ1bmN0aW9uIGdldEZ1bmMxRGF0YSh1aW50MjU2IHgsIHVpbnQyNTYgeSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlcyBtZW1vcnkpCiAgICB7CiAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIGFiaS5lbmNvZGVXaXRoU2VsZWN0b3IoVGVzdE11bHRpRGVsZWdhdGVjYWxsLmZ1bmMxLnNlbGVjdG9yLCB4LCB5KTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRGdW5jMkRhdGEoKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKGJ5dGVzIG1lbW9yeSkgewogICAgICAgIHJldHVybiBhYmkuZW5jb2RlV2l0aFNlbGVjdG9yKFRlc3RNdWx0aURlbGVnYXRlY2FsbC5mdW5jMi5zZWxlY3Rvcik7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWludERhdGEoKSBleHRlcm5hbCBwdXJlIHJldHVybnMgKGJ5dGVzIG1lbW9yeSkgewogICAgICAgIHJldHVybiBhYmkuZW5jb2RlV2l0aFNlbGVjdG9yKFRlc3RNdWx0aURlbGVnYXRlY2FsbC5taW50LnNlbGVjdG9yKTsKICAgIH0KfQo="}],Ju=`

      An example of calling multiple functions with a single transaction, using delegatecall.

      // SPDX-License-Identifier: MIT
       pragma solidity ^0.8.24;
       
      @@ -2483,7 +2483,7 @@ PUSH1 0x0a
       PUSH1 0x16
       RETURN
       */
      -
      `,sy=({prev:s,next:a})=>i.jsx(u,{version:_u,title:Ou,description:Pu,html:qu,prev:s,next:a,codes:$u}),ay="0.8.24",ny="Time Lock",ly="Time Lock",py=[{fileName:"TimeLock.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFRpbWVMb2NrIHsKICAgIGVycm9yIE5vdE93bmVyRXJyb3IoKTsKICAgIGVycm9yIEFscmVhZHlRdWV1ZWRFcnJvcihieXRlczMyIHR4SWQpOwogICAgZXJyb3IgVGltZXN0YW1wTm90SW5SYW5nZUVycm9yKHVpbnQyNTYgYmxvY2tUaW1lc3RhbXAsIHVpbnQyNTYgdGltZXN0YW1wKTsKICAgIGVycm9yIE5vdFF1ZXVlZEVycm9yKGJ5dGVzMzIgdHhJZCk7CiAgICBlcnJvciBUaW1lc3RhbXBOb3RQYXNzZWRFcnJvcih1aW50MjU2IGJsb2NrVGltZXN0bWFwLCB1aW50MjU2IHRpbWVzdGFtcCk7CiAgICBlcnJvciBUaW1lc3RhbXBFeHBpcmVkRXJyb3IodWludDI1NiBibG9ja1RpbWVzdGFtcCwgdWludDI1NiBleHBpcmVzQXQpOwogICAgZXJyb3IgVHhGYWlsZWRFcnJvcigpOwoKICAgIGV2ZW50IFF1ZXVlKAogICAgICAgIGJ5dGVzMzIgaW5kZXhlZCB0eElkLAogICAgICAgIGFkZHJlc3MgaW5kZXhlZCB0YXJnZXQsCiAgICAgICAgdWludDI1NiB2YWx1ZSwKICAgICAgICBzdHJpbmcgZnVuYywKICAgICAgICBieXRlcyBkYXRhLAogICAgICAgIHVpbnQyNTYgdGltZXN0YW1wCiAgICApOwogICAgZXZlbnQgRXhlY3V0ZSgKICAgICAgICBieXRlczMyIGluZGV4ZWQgdHhJZCwKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgdGFyZ2V0LAogICAgICAgIHVpbnQyNTYgdmFsdWUsCiAgICAgICAgc3RyaW5nIGZ1bmMsCiAgICAgICAgYnl0ZXMgZGF0YSwKICAgICAgICB1aW50MjU2IHRpbWVzdGFtcAogICAgKTsKICAgIGV2ZW50IENhbmNlbChieXRlczMyIGluZGV4ZWQgdHhJZCk7CgogICAgdWludDI1NiBwdWJsaWMgY29uc3RhbnQgTUlOX0RFTEFZID0gMTA7IC8vIHNlY29uZHMKICAgIHVpbnQyNTYgcHVibGljIGNvbnN0YW50IE1BWF9ERUxBWSA9IDEwMDA7IC8vIHNlY29uZHMKICAgIHVpbnQyNTYgcHVibGljIGNvbnN0YW50IEdSQUNFX1BFUklPRCA9IDEwMDA7IC8vIHNlY29uZHMKCiAgICBhZGRyZXNzIHB1YmxpYyBvd25lcjsKICAgIC8vIHR4IGlkID0+IHF1ZXVlZAogICAgbWFwcGluZyhieXRlczMyID0+IGJvb2wpIHB1YmxpYyBxdWV1ZWQ7CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIG1vZGlmaWVyIG9ubHlPd25lcigpIHsKICAgICAgICBpZiAobXNnLnNlbmRlciAhPSBvd25lcikgewogICAgICAgICAgICByZXZlcnQgTm90T3duZXJFcnJvcigpOwogICAgICAgIH0KICAgICAgICBfOwogICAgfQoKICAgIHJlY2VpdmUoKSBleHRlcm5hbCBwYXlhYmxlIHt9CgogICAgZnVuY3Rpb24gZ2V0VHhJZCgKICAgICAgICBhZGRyZXNzIF90YXJnZXQsCiAgICAgICAgdWludDI1NiBfdmFsdWUsCiAgICAgICAgc3RyaW5nIGNhbGxkYXRhIF9mdW5jLAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIF9kYXRhLAogICAgICAgIHVpbnQyNTYgX3RpbWVzdGFtcAogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zIChieXRlczMyKSB7CiAgICAgICAgcmV0dXJuIGtlY2NhazI1NihhYmkuZW5jb2RlKF90YXJnZXQsIF92YWx1ZSwgX2Z1bmMsIF9kYXRhLCBfdGltZXN0YW1wKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gX3RhcmdldCBBZGRyZXNzIG9mIGNvbnRyYWN0IG9yIGFjY291bnQgdG8gY2FsbAogICAgICogQHBhcmFtIF92YWx1ZSBBbW91bnQgb2YgRVRIIHRvIHNlbmQKICAgICAqIEBwYXJhbSBfZnVuYyBGdW5jdGlvbiBzaWduYXR1cmUsIGZvciBleGFtcGxlICJmb28oYWRkcmVzcyx1aW50MjU2KSIKICAgICAqIEBwYXJhbSBfZGF0YSBBQkkgZW5jb2RlZCBkYXRhIHNlbmQuCiAgICAgKiBAcGFyYW0gX3RpbWVzdGFtcCBUaW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIHRyYW5zYWN0aW9uIGNhbiBiZSBleGVjdXRlZC4KICAgICAqLwogICAgZnVuY3Rpb24gcXVldWUoCiAgICAgICAgYWRkcmVzcyBfdGFyZ2V0LAogICAgICAgIHVpbnQyNTYgX3ZhbHVlLAogICAgICAgIHN0cmluZyBjYWxsZGF0YSBfZnVuYywKICAgICAgICBieXRlcyBjYWxsZGF0YSBfZGF0YSwKICAgICAgICB1aW50MjU2IF90aW1lc3RhbXAKICAgICkgZXh0ZXJuYWwgb25seU93bmVyIHJldHVybnMgKGJ5dGVzMzIgdHhJZCkgewogICAgICAgIHR4SWQgPSBnZXRUeElkKF90YXJnZXQsIF92YWx1ZSwgX2Z1bmMsIF9kYXRhLCBfdGltZXN0YW1wKTsKICAgICAgICBpZiAocXVldWVkW3R4SWRdKSB7CiAgICAgICAgICAgIHJldmVydCBBbHJlYWR5UXVldWVkRXJyb3IodHhJZCk7CiAgICAgICAgfQogICAgICAgIC8vIC0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0KICAgICAgICAvLyAgYmxvY2sgICAgYmxvY2sgKyBtaW4gICAgIGJsb2NrICsgbWF4CiAgICAgICAgaWYgKAogICAgICAgICAgICBfdGltZXN0YW1wIDwgYmxvY2sudGltZXN0YW1wICsgTUlOX0RFTEFZCiAgICAgICAgICAgICAgICB8fCBfdGltZXN0YW1wID4gYmxvY2sudGltZXN0YW1wICsgTUFYX0RFTEFZCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldmVydCBUaW1lc3RhbXBOb3RJblJhbmdlRXJyb3IoYmxvY2sudGltZXN0YW1wLCBfdGltZXN0YW1wKTsKICAgICAgICB9CgogICAgICAgIHF1ZXVlZFt0eElkXSA9IHRydWU7CgogICAgICAgIGVtaXQgUXVldWUodHhJZCwgX3RhcmdldCwgX3ZhbHVlLCBfZnVuYywgX2RhdGEsIF90aW1lc3RhbXApOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4ZWN1dGUoCiAgICAgICAgYWRkcmVzcyBfdGFyZ2V0LAogICAgICAgIHVpbnQyNTYgX3ZhbHVlLAogICAgICAgIHN0cmluZyBjYWxsZGF0YSBfZnVuYywKICAgICAgICBieXRlcyBjYWxsZGF0YSBfZGF0YSwKICAgICAgICB1aW50MjU2IF90aW1lc3RhbXAKICAgICkgZXh0ZXJuYWwgcGF5YWJsZSBvbmx5T3duZXIgcmV0dXJucyAoYnl0ZXMgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMzMiB0eElkID0gZ2V0VHhJZChfdGFyZ2V0LCBfdmFsdWUsIF9mdW5jLCBfZGF0YSwgX3RpbWVzdGFtcCk7CiAgICAgICAgaWYgKCFxdWV1ZWRbdHhJZF0pIHsKICAgICAgICAgICAgcmV2ZXJ0IE5vdFF1ZXVlZEVycm9yKHR4SWQpOwogICAgICAgIH0KICAgICAgICAvLyAtLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLQogICAgICAgIC8vICB0aW1lc3RhbXAgICAgdGltZXN0YW1wICsgZ3JhY2UgcGVyaW9kCiAgICAgICAgaWYgKGJsb2NrLnRpbWVzdGFtcCA8IF90aW1lc3RhbXApIHsKICAgICAgICAgICAgcmV2ZXJ0IFRpbWVzdGFtcE5vdFBhc3NlZEVycm9yKGJsb2NrLnRpbWVzdGFtcCwgX3RpbWVzdGFtcCk7CiAgICAgICAgfQogICAgICAgIGlmIChibG9jay50aW1lc3RhbXAgPiBfdGltZXN0YW1wICsgR1JBQ0VfUEVSSU9EKSB7CiAgICAgICAgICAgIHJldmVydCBUaW1lc3RhbXBFeHBpcmVkRXJyb3IoCiAgICAgICAgICAgICAgICBibG9jay50aW1lc3RhbXAsIF90aW1lc3RhbXAgKyBHUkFDRV9QRVJJT0QKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHF1ZXVlZFt0eElkXSA9IGZhbHNlOwoKICAgICAgICAvLyBwcmVwYXJlIGRhdGEKICAgICAgICBieXRlcyBtZW1vcnkgZGF0YTsKICAgICAgICBpZiAoYnl0ZXMoX2Z1bmMpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgLy8gZGF0YSA9IGZ1bmMgc2VsZWN0b3IgKyBfZGF0YQogICAgICAgICAgICBkYXRhID0gYWJpLmVuY29kZVBhY2tlZChieXRlczQoa2VjY2FrMjU2KGJ5dGVzKF9mdW5jKSkpLCBfZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gY2FsbCBmYWxsYmFjayB3aXRoIGRhdGEKICAgICAgICAgICAgZGF0YSA9IF9kYXRhOwogICAgICAgIH0KCiAgICAgICAgLy8gY2FsbCB0YXJnZXQKICAgICAgICAoYm9vbCBvaywgYnl0ZXMgbWVtb3J5IHJlcykgPSBfdGFyZ2V0LmNhbGx7dmFsdWU6IF92YWx1ZX0oZGF0YSk7CiAgICAgICAgaWYgKCFvaykgewogICAgICAgICAgICByZXZlcnQgVHhGYWlsZWRFcnJvcigpOwogICAgICAgIH0KCiAgICAgICAgZW1pdCBFeGVjdXRlKHR4SWQsIF90YXJnZXQsIF92YWx1ZSwgX2Z1bmMsIF9kYXRhLCBfdGltZXN0YW1wKTsKCiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KCiAgICBmdW5jdGlvbiBjYW5jZWwoYnl0ZXMzMiBfdHhJZCkgZXh0ZXJuYWwgb25seU93bmVyIHsKICAgICAgICBpZiAoIXF1ZXVlZFtfdHhJZF0pIHsKICAgICAgICAgICAgcmV2ZXJ0IE5vdFF1ZXVlZEVycm9yKF90eElkKTsKICAgICAgICB9CgogICAgICAgIHF1ZXVlZFtfdHhJZF0gPSBmYWxzZTsKCiAgICAgICAgZW1pdCBDYW5jZWwoX3R4SWQpOwogICAgfQp9Cg=="}],ey=`

      TimeLock is a contract that publishes a transaction to be executed in the future. +`,sA=({prev:s,next:a})=>i.jsx(u,{version:_u,title:Ou,description:Pu,html:qu,prev:s,next:a,codes:$u}),aA="0.8.24",nA="Time Lock",lA="Time Lock",pA=[{fileName:"TimeLock.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFRpbWVMb2NrIHsKICAgIGVycm9yIE5vdE93bmVyRXJyb3IoKTsKICAgIGVycm9yIEFscmVhZHlRdWV1ZWRFcnJvcihieXRlczMyIHR4SWQpOwogICAgZXJyb3IgVGltZXN0YW1wTm90SW5SYW5nZUVycm9yKHVpbnQyNTYgYmxvY2tUaW1lc3RhbXAsIHVpbnQyNTYgdGltZXN0YW1wKTsKICAgIGVycm9yIE5vdFF1ZXVlZEVycm9yKGJ5dGVzMzIgdHhJZCk7CiAgICBlcnJvciBUaW1lc3RhbXBOb3RQYXNzZWRFcnJvcih1aW50MjU2IGJsb2NrVGltZXN0bWFwLCB1aW50MjU2IHRpbWVzdGFtcCk7CiAgICBlcnJvciBUaW1lc3RhbXBFeHBpcmVkRXJyb3IodWludDI1NiBibG9ja1RpbWVzdGFtcCwgdWludDI1NiBleHBpcmVzQXQpOwogICAgZXJyb3IgVHhGYWlsZWRFcnJvcigpOwoKICAgIGV2ZW50IFF1ZXVlKAogICAgICAgIGJ5dGVzMzIgaW5kZXhlZCB0eElkLAogICAgICAgIGFkZHJlc3MgaW5kZXhlZCB0YXJnZXQsCiAgICAgICAgdWludDI1NiB2YWx1ZSwKICAgICAgICBzdHJpbmcgZnVuYywKICAgICAgICBieXRlcyBkYXRhLAogICAgICAgIHVpbnQyNTYgdGltZXN0YW1wCiAgICApOwogICAgZXZlbnQgRXhlY3V0ZSgKICAgICAgICBieXRlczMyIGluZGV4ZWQgdHhJZCwKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgdGFyZ2V0LAogICAgICAgIHVpbnQyNTYgdmFsdWUsCiAgICAgICAgc3RyaW5nIGZ1bmMsCiAgICAgICAgYnl0ZXMgZGF0YSwKICAgICAgICB1aW50MjU2IHRpbWVzdGFtcAogICAgKTsKICAgIGV2ZW50IENhbmNlbChieXRlczMyIGluZGV4ZWQgdHhJZCk7CgogICAgdWludDI1NiBwdWJsaWMgY29uc3RhbnQgTUlOX0RFTEFZID0gMTA7IC8vIHNlY29uZHMKICAgIHVpbnQyNTYgcHVibGljIGNvbnN0YW50IE1BWF9ERUxBWSA9IDEwMDA7IC8vIHNlY29uZHMKICAgIHVpbnQyNTYgcHVibGljIGNvbnN0YW50IEdSQUNFX1BFUklPRCA9IDEwMDA7IC8vIHNlY29uZHMKCiAgICBhZGRyZXNzIHB1YmxpYyBvd25lcjsKICAgIC8vIHR4IGlkID0+IHF1ZXVlZAogICAgbWFwcGluZyhieXRlczMyID0+IGJvb2wpIHB1YmxpYyBxdWV1ZWQ7CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIG1vZGlmaWVyIG9ubHlPd25lcigpIHsKICAgICAgICBpZiAobXNnLnNlbmRlciAhPSBvd25lcikgewogICAgICAgICAgICByZXZlcnQgTm90T3duZXJFcnJvcigpOwogICAgICAgIH0KICAgICAgICBfOwogICAgfQoKICAgIHJlY2VpdmUoKSBleHRlcm5hbCBwYXlhYmxlIHt9CgogICAgZnVuY3Rpb24gZ2V0VHhJZCgKICAgICAgICBhZGRyZXNzIF90YXJnZXQsCiAgICAgICAgdWludDI1NiBfdmFsdWUsCiAgICAgICAgc3RyaW5nIGNhbGxkYXRhIF9mdW5jLAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIF9kYXRhLAogICAgICAgIHVpbnQyNTYgX3RpbWVzdGFtcAogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zIChieXRlczMyKSB7CiAgICAgICAgcmV0dXJuIGtlY2NhazI1NihhYmkuZW5jb2RlKF90YXJnZXQsIF92YWx1ZSwgX2Z1bmMsIF9kYXRhLCBfdGltZXN0YW1wKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gX3RhcmdldCBBZGRyZXNzIG9mIGNvbnRyYWN0IG9yIGFjY291bnQgdG8gY2FsbAogICAgICogQHBhcmFtIF92YWx1ZSBBbW91bnQgb2YgRVRIIHRvIHNlbmQKICAgICAqIEBwYXJhbSBfZnVuYyBGdW5jdGlvbiBzaWduYXR1cmUsIGZvciBleGFtcGxlICJmb28oYWRkcmVzcyx1aW50MjU2KSIKICAgICAqIEBwYXJhbSBfZGF0YSBBQkkgZW5jb2RlZCBkYXRhIHNlbmQuCiAgICAgKiBAcGFyYW0gX3RpbWVzdGFtcCBUaW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIHRyYW5zYWN0aW9uIGNhbiBiZSBleGVjdXRlZC4KICAgICAqLwogICAgZnVuY3Rpb24gcXVldWUoCiAgICAgICAgYWRkcmVzcyBfdGFyZ2V0LAogICAgICAgIHVpbnQyNTYgX3ZhbHVlLAogICAgICAgIHN0cmluZyBjYWxsZGF0YSBfZnVuYywKICAgICAgICBieXRlcyBjYWxsZGF0YSBfZGF0YSwKICAgICAgICB1aW50MjU2IF90aW1lc3RhbXAKICAgICkgZXh0ZXJuYWwgb25seU93bmVyIHJldHVybnMgKGJ5dGVzMzIgdHhJZCkgewogICAgICAgIHR4SWQgPSBnZXRUeElkKF90YXJnZXQsIF92YWx1ZSwgX2Z1bmMsIF9kYXRhLCBfdGltZXN0YW1wKTsKICAgICAgICBpZiAocXVldWVkW3R4SWRdKSB7CiAgICAgICAgICAgIHJldmVydCBBbHJlYWR5UXVldWVkRXJyb3IodHhJZCk7CiAgICAgICAgfQogICAgICAgIC8vIC0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0KICAgICAgICAvLyAgYmxvY2sgICAgYmxvY2sgKyBtaW4gICAgIGJsb2NrICsgbWF4CiAgICAgICAgaWYgKAogICAgICAgICAgICBfdGltZXN0YW1wIDwgYmxvY2sudGltZXN0YW1wICsgTUlOX0RFTEFZCiAgICAgICAgICAgICAgICB8fCBfdGltZXN0YW1wID4gYmxvY2sudGltZXN0YW1wICsgTUFYX0RFTEFZCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldmVydCBUaW1lc3RhbXBOb3RJblJhbmdlRXJyb3IoYmxvY2sudGltZXN0YW1wLCBfdGltZXN0YW1wKTsKICAgICAgICB9CgogICAgICAgIHF1ZXVlZFt0eElkXSA9IHRydWU7CgogICAgICAgIGVtaXQgUXVldWUodHhJZCwgX3RhcmdldCwgX3ZhbHVlLCBfZnVuYywgX2RhdGEsIF90aW1lc3RhbXApOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4ZWN1dGUoCiAgICAgICAgYWRkcmVzcyBfdGFyZ2V0LAogICAgICAgIHVpbnQyNTYgX3ZhbHVlLAogICAgICAgIHN0cmluZyBjYWxsZGF0YSBfZnVuYywKICAgICAgICBieXRlcyBjYWxsZGF0YSBfZGF0YSwKICAgICAgICB1aW50MjU2IF90aW1lc3RhbXAKICAgICkgZXh0ZXJuYWwgcGF5YWJsZSBvbmx5T3duZXIgcmV0dXJucyAoYnl0ZXMgbWVtb3J5KSB7CiAgICAgICAgYnl0ZXMzMiB0eElkID0gZ2V0VHhJZChfdGFyZ2V0LCBfdmFsdWUsIF9mdW5jLCBfZGF0YSwgX3RpbWVzdGFtcCk7CiAgICAgICAgaWYgKCFxdWV1ZWRbdHhJZF0pIHsKICAgICAgICAgICAgcmV2ZXJ0IE5vdFF1ZXVlZEVycm9yKHR4SWQpOwogICAgICAgIH0KICAgICAgICAvLyAtLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLQogICAgICAgIC8vICB0aW1lc3RhbXAgICAgdGltZXN0YW1wICsgZ3JhY2UgcGVyaW9kCiAgICAgICAgaWYgKGJsb2NrLnRpbWVzdGFtcCA8IF90aW1lc3RhbXApIHsKICAgICAgICAgICAgcmV2ZXJ0IFRpbWVzdGFtcE5vdFBhc3NlZEVycm9yKGJsb2NrLnRpbWVzdGFtcCwgX3RpbWVzdGFtcCk7CiAgICAgICAgfQogICAgICAgIGlmIChibG9jay50aW1lc3RhbXAgPiBfdGltZXN0YW1wICsgR1JBQ0VfUEVSSU9EKSB7CiAgICAgICAgICAgIHJldmVydCBUaW1lc3RhbXBFeHBpcmVkRXJyb3IoCiAgICAgICAgICAgICAgICBibG9jay50aW1lc3RhbXAsIF90aW1lc3RhbXAgKyBHUkFDRV9QRVJJT0QKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHF1ZXVlZFt0eElkXSA9IGZhbHNlOwoKICAgICAgICAvLyBwcmVwYXJlIGRhdGEKICAgICAgICBieXRlcyBtZW1vcnkgZGF0YTsKICAgICAgICBpZiAoYnl0ZXMoX2Z1bmMpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgLy8gZGF0YSA9IGZ1bmMgc2VsZWN0b3IgKyBfZGF0YQogICAgICAgICAgICBkYXRhID0gYWJpLmVuY29kZVBhY2tlZChieXRlczQoa2VjY2FrMjU2KGJ5dGVzKF9mdW5jKSkpLCBfZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gY2FsbCBmYWxsYmFjayB3aXRoIGRhdGEKICAgICAgICAgICAgZGF0YSA9IF9kYXRhOwogICAgICAgIH0KCiAgICAgICAgLy8gY2FsbCB0YXJnZXQKICAgICAgICAoYm9vbCBvaywgYnl0ZXMgbWVtb3J5IHJlcykgPSBfdGFyZ2V0LmNhbGx7dmFsdWU6IF92YWx1ZX0oZGF0YSk7CiAgICAgICAgaWYgKCFvaykgewogICAgICAgICAgICByZXZlcnQgVHhGYWlsZWRFcnJvcigpOwogICAgICAgIH0KCiAgICAgICAgZW1pdCBFeGVjdXRlKHR4SWQsIF90YXJnZXQsIF92YWx1ZSwgX2Z1bmMsIF9kYXRhLCBfdGltZXN0YW1wKTsKCiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KCiAgICBmdW5jdGlvbiBjYW5jZWwoYnl0ZXMzMiBfdHhJZCkgZXh0ZXJuYWwgb25seU93bmVyIHsKICAgICAgICBpZiAoIXF1ZXVlZFtfdHhJZF0pIHsKICAgICAgICAgICAgcmV2ZXJ0IE5vdFF1ZXVlZEVycm9yKF90eElkKTsKICAgICAgICB9CgogICAgICAgIHF1ZXVlZFtfdHhJZF0gPSBmYWxzZTsKCiAgICAgICAgZW1pdCBDYW5jZWwoX3R4SWQpOwogICAgfQp9Cg=="}],eA=`

      TimeLock is a contract that publishes a transaction to be executed in the future. After a mimimum waiting period, the transaction can be executed.

      TimeLocks are commonly used in DAOs.

      // SPDX-License-Identifier: MIT
      @@ -2634,7 +2634,7 @@ After a mimimum waiting period, the transaction can be executed.

      emit Cancel(_txId); } } -
      `,cy=({prev:s,next:a})=>i.jsx(u,{version:ay,title:ny,description:ly,html:ey,prev:s,next:a,codes:py}),ty="0.8.24",oy="Uni-Directional Payment Channel",ry="An example of uni-directional payment channels in Solidity",iy=[{fileName:"ECDSA.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIE9wZW5aZXBwZWxpbiBDb250cmFjdHMgKGxhc3QgdXBkYXRlZCB2NC41LjApICh1dGlscy9jcnlwdG9ncmFwaHkvRUNEU0Euc29sKQoKbGlicmFyeSBFQ0RTQSB7CiAgICBlbnVtIFJlY292ZXJFcnJvciB7CiAgICAgICAgTm9FcnJvciwKICAgICAgICBJbnZhbGlkU2lnbmF0dXJlLAogICAgICAgIEludmFsaWRTaWduYXR1cmVMZW5ndGgsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVMsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVYKICAgIH0KCiAgICBmdW5jdGlvbiBfdGhyb3dFcnJvcihSZWNvdmVyRXJyb3IgZXJyb3IpIHByaXZhdGUgcHVyZSB7CiAgICAgICAgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5Ob0Vycm9yKSB7CiAgICAgICAgICAgIHJldHVybjsgLy8gbm8gZXJyb3I6IGRvIG5vdGhpbmcKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKSB7CiAgICAgICAgICAgIHJldmVydCgiRUNEU0E6IGludmFsaWQgc2lnbmF0dXJlIik7CiAgICAgICAgfSBlbHNlIGlmIChlcnJvciA9PSBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZUxlbmd0aCkgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlUykgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAncycgdmFsdWUiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlVikgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAndicgdmFsdWUiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdHJ5UmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzIG1lbW9yeSBzaWduYXR1cmUpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoYWRkcmVzcywgUmVjb3ZlckVycm9yKQogICAgewogICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbGVuZ3RoCiAgICAgICAgLy8gLSBjYXNlIDY1OiByLHMsdiBzaWduYXR1cmUgKHN0YW5kYXJkKQogICAgICAgIC8vIC0gY2FzZSA2NDogcix2cyBzaWduYXR1cmUgKGNmIGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMjA5OCkgX0F2YWlsYWJsZSBzaW5jZSB2NC4xLl8KICAgICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCA9PSA2NSkgewogICAgICAgICAgICBieXRlczMyIHI7CiAgICAgICAgICAgIGJ5dGVzMzIgczsKICAgICAgICAgICAgdWludDggdjsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgcyA6PSBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDQwKSkKICAgICAgICAgICAgICAgIHYgOj0gYnl0ZSgwLCBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDYwKSkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICAgICAgfSBlbHNlIGlmIChzaWduYXR1cmUubGVuZ3RoID09IDY0KSB7CiAgICAgICAgICAgIGJ5dGVzMzIgcjsKICAgICAgICAgICAgYnl0ZXMzMiB2czsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgdnMgOj0gbWxvYWQoYWRkKHNpZ25hdHVyZSwgMHg0MCkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVMZW5ndGgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiByZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMgbWVtb3J5IHNpZ25hdHVyZSkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgc2lnbmF0dXJlKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0cnlSZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMzMiByLCBieXRlczMyIHZzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MsIFJlY292ZXJFcnJvcikKICAgIHsKICAgICAgICBieXRlczMyIHMgPSB2cwogICAgICAgICAgICAmIGJ5dGVzMzIoCiAgICAgICAgICAgICAgICAweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgICAgICAgICAgKTsKICAgICAgICB1aW50OCB2ID0gdWludDgoKHVpbnQyNTYodnMpID4+IDI1NSkgKyAyNyk7CiAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzMzIgciwgYnl0ZXMzMiB2cykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIF90aHJvd0Vycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gcmVjb3ZlcmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyeVJlY292ZXIoYnl0ZXMzMiBoYXNoLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzLCBSZWNvdmVyRXJyb3IpCiAgICB7CiAgICAgICAgLy8gRUlQLTIgc3RpbGwgYWxsb3dzIHNpZ25hdHVyZSBtYWxsZWFiaWxpdHkgZm9yIGVjcmVjb3ZlcigpLiBSZW1vdmUgdGhpcyBwb3NzaWJpbGl0eSBhbmQgbWFrZSB0aGUgc2lnbmF0dXJlCiAgICAgICAgLy8gdW5pcXVlLiBBcHBlbmRpeCBGIGluIHRoZSBFdGhlcmV1bSBZZWxsb3cgcGFwZXIgKGh0dHBzOi8vZXRoZXJldW0uZ2l0aHViLmlvL3llbGxvd3BhcGVyL3BhcGVyLnBkZiksIGRlZmluZXMKICAgICAgICAvLyB0aGUgdmFsaWQgcmFuZ2UgZm9yIHMgaW4gKDMwMSk6IDAgPCBzIDwgc2VjcDI1NmsxbiDDtyAyICsgMSwgYW5kIGZvciB2IGluICgzMDIpOiB2IOKIiCB7MjcsIDI4fS4gTW9zdAogICAgICAgIC8vIHNpZ25hdHVyZXMgZnJvbSBjdXJyZW50IGxpYnJhcmllcyBnZW5lcmF0ZSBhIHVuaXF1ZSBzaWduYXR1cmUgd2l0aCBhbiBzLXZhbHVlIGluIHRoZSBsb3dlciBoYWxmIG9yZGVyLgogICAgICAgIC8vCiAgICAgICAgLy8gSWYgeW91ciBsaWJyYXJ5IGdlbmVyYXRlcyBtYWxsZWFibGUgc2lnbmF0dXJlcywgc3VjaCBhcyBzLXZhbHVlcyBpbiB0aGUgdXBwZXIgcmFuZ2UsIGNhbGN1bGF0ZSBhIG5ldyBzLXZhbHVlCiAgICAgICAgLy8gd2l0aCAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDEgLSBzMSBhbmQgZmxpcCB2IGZyb20gMjcgdG8gMjggb3IKICAgICAgICAvLyB2aWNlIHZlcnNhLiBJZiB5b3VyIGxpYnJhcnkgYWxzbyBnZW5lcmF0ZXMgc2lnbmF0dXJlcyB3aXRoIDAvMSBmb3IgdiBpbnN0ZWFkIDI3LzI4LCBhZGQgMjcgdG8gdiB0byBhY2NlcHQKICAgICAgICAvLyB0aGVzZSBtYWxsZWFibGUgc2lnbmF0dXJlcyBhcyB3ZWxsLgogICAgICAgIGlmICgKICAgICAgICAgICAgdWludDI1NihzKQogICAgICAgICAgICAgICAgPiAweDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUQ1NzZFNzM1N0E0NTAxRERGRTkyRjQ2NjgxQjIwQTAKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIChhZGRyZXNzKDApLCBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZVMpOwogICAgICAgIH0KICAgICAgICBpZiAodiAhPSAyNyAmJiB2ICE9IDI4KSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVWKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgKGFuZCBub3QgbWFsbGVhYmxlKSwgcmV0dXJuIHRoZSBzaWduZXIgYWRkcmVzcwogICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZWNyZWNvdmVyKGhhc2gsIHYsIHIsIHMpOwogICAgICAgIGlmIChzaWduZXIgPT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICByZXR1cm4gKGFkZHJlc3MoMCksIFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc2lnbmVyLCBSZWNvdmVyRXJyb3IuTm9FcnJvcik7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MpCiAgICB7CiAgICAgICAgKGFkZHJlc3MgcmVjb3ZlcmVkLCBSZWNvdmVyRXJyb3IgZXJyb3IpID0gdHJ5UmVjb3ZlcihoYXNoLCB2LCByLCBzKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKGJ5dGVzMzIgaGFzaCkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIC8vIDMyIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgaGFzaCwKICAgICAgICAvLyBlbmZvcmNlZCBieSB0aGUgdHlwZSBzaWduYXR1cmUgYWJvdmUKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KAogICAgICAgICAgICBhYmkuZW5jb2RlUGFja2VkKCJceDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XG4zMiIsIGhhc2gpCiAgICAgICAgKTsKICAgIH0KfQo="},{fileName:"UniDirectionalPaymentChannel.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgUmVlbnRyYW5jeUd1YXJkIHsKICAgIGJvb2wgcHJpdmF0ZSBsb2NrZWQ7CgogICAgbW9kaWZpZXIgZ3VhcmQoKSB7CiAgICAgICAgcmVxdWlyZSghbG9ja2VkKTsKICAgICAgICBsb2NrZWQgPSB0cnVlOwogICAgICAgIF87CiAgICAgICAgbG9ja2VkID0gZmFsc2U7CiAgICB9Cn0KCmNvbnRyYWN0IFVuaURpcmVjdGlvbmFsUGF5bWVudENoYW5uZWwgaXMgUmVlbnRyYW5jeUd1YXJkIHsKICAgIHVzaW5nIEVDRFNBIGZvciBieXRlczMyOwoKICAgIGFkZHJlc3MgcGF5YWJsZSBwdWJsaWMgc2VuZGVyOwogICAgYWRkcmVzcyBwYXlhYmxlIHB1YmxpYyByZWNlaXZlcjsKCiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgRFVSQVRJT04gPSA3ICogMjQgKiA2MCAqIDYwOwogICAgdWludDI1NiBwdWJsaWMgZXhwaXJlc0F0OwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3MgcGF5YWJsZSBfcmVjZWl2ZXIpIHBheWFibGUgewogICAgICAgIHJlcXVpcmUoX3JlY2VpdmVyICE9IGFkZHJlc3MoMCksICJyZWNlaXZlciA9IHplcm8gYWRkcmVzcyIpOwogICAgICAgIHNlbmRlciA9IHBheWFibGUobXNnLnNlbmRlcik7CiAgICAgICAgcmVjZWl2ZXIgPSBfcmVjZWl2ZXI7CiAgICAgICAgZXhwaXJlc0F0ID0gYmxvY2sudGltZXN0YW1wICsgRFVSQVRJT047CiAgICB9CgogICAgZnVuY3Rpb24gX2dldEhhc2godWludDI1NiBfYW1vdW50KSBwcml2YXRlIHZpZXcgcmV0dXJucyAoYnl0ZXMzMikgewogICAgICAgIC8vIE5PVEU6IHNpZ24gd2l0aCBhZGRyZXNzIG9mIHRoaXMgY29udHJhY3QgdG8gcHJvdGVjdCBhZ2FpbnMKICAgICAgICAvLyByZXBsYXkgYXR0YWNrIG9uIG90aGVyIGNvbnRyYWN0cwogICAgICAgIHJldHVybiBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChhZGRyZXNzKHRoaXMpLCBfYW1vdW50KSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0SGFzaCh1aW50MjU2IF9hbW91bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYnl0ZXMzMikgewogICAgICAgIHJldHVybiBfZ2V0SGFzaChfYW1vdW50KTsKICAgIH0KCiAgICBmdW5jdGlvbiBfZ2V0RXRoU2lnbmVkSGFzaCh1aW50MjU2IF9hbW91bnQpCiAgICAgICAgcHJpdmF0ZQogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIHJldHVybiBfZ2V0SGFzaChfYW1vdW50KS50b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0RXRoU2lnbmVkSGFzaCh1aW50MjU2IF9hbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYnl0ZXMzMikKICAgIHsKICAgICAgICByZXR1cm4gX2dldEV0aFNpZ25lZEhhc2goX2Ftb3VudCk7CiAgICB9CgogICAgZnVuY3Rpb24gX3ZlcmlmeSh1aW50MjU2IF9hbW91bnQsIGJ5dGVzIG1lbW9yeSBfc2lnKQogICAgICAgIHByaXZhdGUKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCkKICAgIHsKICAgICAgICByZXR1cm4gX2dldEV0aFNpZ25lZEhhc2goX2Ftb3VudCkucmVjb3Zlcihfc2lnKSA9PSBzZW5kZXI7CiAgICB9CgogICAgZnVuY3Rpb24gdmVyaWZ5KHVpbnQyNTYgX2Ftb3VudCwgYnl0ZXMgbWVtb3J5IF9zaWcpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCkKICAgIHsKICAgICAgICByZXR1cm4gX3ZlcmlmeShfYW1vdW50LCBfc2lnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbG9zZSh1aW50MjU2IF9hbW91bnQsIGJ5dGVzIG1lbW9yeSBfc2lnKSBleHRlcm5hbCBndWFyZCB7CiAgICAgICAgcmVxdWlyZShtc2cuc2VuZGVyID09IHJlY2VpdmVyLCAiIXJlY2VpdmVyIik7CiAgICAgICAgcmVxdWlyZShfdmVyaWZ5KF9hbW91bnQsIF9zaWcpLCAiaW52YWxpZCBzaWciKTsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gcmVjZWl2ZXIuY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICAgICAgc2VsZmRlc3RydWN0KHNlbmRlcik7CiAgICB9CgogICAgZnVuY3Rpb24gY2FuY2VsKCkgZXh0ZXJuYWwgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSBzZW5kZXIsICIhc2VuZGVyIik7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPj0gZXhwaXJlc0F0LCAiIWV4cGlyZWQiKTsKICAgICAgICBzZWxmZGVzdHJ1Y3Qoc2VuZGVyKTsKICAgIH0KfQo="}],gy=`

      Payment channels allow participants to repeatedly transfer Ether off chain.

      +`,cA=({prev:s,next:a})=>i.jsx(u,{version:aA,title:nA,description:lA,html:eA,prev:s,next:a,codes:pA}),tA="0.8.24",oA="Uni-Directional Payment Channel",rA="An example of uni-directional payment channels in Solidity",iA=[{fileName:"ECDSA.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIE9wZW5aZXBwZWxpbiBDb250cmFjdHMgKGxhc3QgdXBkYXRlZCB2NC41LjApICh1dGlscy9jcnlwdG9ncmFwaHkvRUNEU0Euc29sKQoKbGlicmFyeSBFQ0RTQSB7CiAgICBlbnVtIFJlY292ZXJFcnJvciB7CiAgICAgICAgTm9FcnJvciwKICAgICAgICBJbnZhbGlkU2lnbmF0dXJlLAogICAgICAgIEludmFsaWRTaWduYXR1cmVMZW5ndGgsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVMsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVYKICAgIH0KCiAgICBmdW5jdGlvbiBfdGhyb3dFcnJvcihSZWNvdmVyRXJyb3IgZXJyb3IpIHByaXZhdGUgcHVyZSB7CiAgICAgICAgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5Ob0Vycm9yKSB7CiAgICAgICAgICAgIHJldHVybjsgLy8gbm8gZXJyb3I6IGRvIG5vdGhpbmcKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKSB7CiAgICAgICAgICAgIHJldmVydCgiRUNEU0E6IGludmFsaWQgc2lnbmF0dXJlIik7CiAgICAgICAgfSBlbHNlIGlmIChlcnJvciA9PSBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZUxlbmd0aCkgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlUykgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAncycgdmFsdWUiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlVikgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAndicgdmFsdWUiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdHJ5UmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzIG1lbW9yeSBzaWduYXR1cmUpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoYWRkcmVzcywgUmVjb3ZlckVycm9yKQogICAgewogICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbGVuZ3RoCiAgICAgICAgLy8gLSBjYXNlIDY1OiByLHMsdiBzaWduYXR1cmUgKHN0YW5kYXJkKQogICAgICAgIC8vIC0gY2FzZSA2NDogcix2cyBzaWduYXR1cmUgKGNmIGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMjA5OCkgX0F2YWlsYWJsZSBzaW5jZSB2NC4xLl8KICAgICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCA9PSA2NSkgewogICAgICAgICAgICBieXRlczMyIHI7CiAgICAgICAgICAgIGJ5dGVzMzIgczsKICAgICAgICAgICAgdWludDggdjsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgcyA6PSBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDQwKSkKICAgICAgICAgICAgICAgIHYgOj0gYnl0ZSgwLCBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDYwKSkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICAgICAgfSBlbHNlIGlmIChzaWduYXR1cmUubGVuZ3RoID09IDY0KSB7CiAgICAgICAgICAgIGJ5dGVzMzIgcjsKICAgICAgICAgICAgYnl0ZXMzMiB2czsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgdnMgOj0gbWxvYWQoYWRkKHNpZ25hdHVyZSwgMHg0MCkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVMZW5ndGgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiByZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMgbWVtb3J5IHNpZ25hdHVyZSkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgc2lnbmF0dXJlKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0cnlSZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMzMiByLCBieXRlczMyIHZzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MsIFJlY292ZXJFcnJvcikKICAgIHsKICAgICAgICBieXRlczMyIHMgPSB2cwogICAgICAgICAgICAmIGJ5dGVzMzIoCiAgICAgICAgICAgICAgICAweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgICAgICAgICAgKTsKICAgICAgICB1aW50OCB2ID0gdWludDgoKHVpbnQyNTYodnMpID4+IDI1NSkgKyAyNyk7CiAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzMzIgciwgYnl0ZXMzMiB2cykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIF90aHJvd0Vycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gcmVjb3ZlcmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyeVJlY292ZXIoYnl0ZXMzMiBoYXNoLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzLCBSZWNvdmVyRXJyb3IpCiAgICB7CiAgICAgICAgLy8gRUlQLTIgc3RpbGwgYWxsb3dzIHNpZ25hdHVyZSBtYWxsZWFiaWxpdHkgZm9yIGVjcmVjb3ZlcigpLiBSZW1vdmUgdGhpcyBwb3NzaWJpbGl0eSBhbmQgbWFrZSB0aGUgc2lnbmF0dXJlCiAgICAgICAgLy8gdW5pcXVlLiBBcHBlbmRpeCBGIGluIHRoZSBFdGhlcmV1bSBZZWxsb3cgcGFwZXIgKGh0dHBzOi8vZXRoZXJldW0uZ2l0aHViLmlvL3llbGxvd3BhcGVyL3BhcGVyLnBkZiksIGRlZmluZXMKICAgICAgICAvLyB0aGUgdmFsaWQgcmFuZ2UgZm9yIHMgaW4gKDMwMSk6IDAgPCBzIDwgc2VjcDI1NmsxbiDDtyAyICsgMSwgYW5kIGZvciB2IGluICgzMDIpOiB2IOKIiCB7MjcsIDI4fS4gTW9zdAogICAgICAgIC8vIHNpZ25hdHVyZXMgZnJvbSBjdXJyZW50IGxpYnJhcmllcyBnZW5lcmF0ZSBhIHVuaXF1ZSBzaWduYXR1cmUgd2l0aCBhbiBzLXZhbHVlIGluIHRoZSBsb3dlciBoYWxmIG9yZGVyLgogICAgICAgIC8vCiAgICAgICAgLy8gSWYgeW91ciBsaWJyYXJ5IGdlbmVyYXRlcyBtYWxsZWFibGUgc2lnbmF0dXJlcywgc3VjaCBhcyBzLXZhbHVlcyBpbiB0aGUgdXBwZXIgcmFuZ2UsIGNhbGN1bGF0ZSBhIG5ldyBzLXZhbHVlCiAgICAgICAgLy8gd2l0aCAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDEgLSBzMSBhbmQgZmxpcCB2IGZyb20gMjcgdG8gMjggb3IKICAgICAgICAvLyB2aWNlIHZlcnNhLiBJZiB5b3VyIGxpYnJhcnkgYWxzbyBnZW5lcmF0ZXMgc2lnbmF0dXJlcyB3aXRoIDAvMSBmb3IgdiBpbnN0ZWFkIDI3LzI4LCBhZGQgMjcgdG8gdiB0byBhY2NlcHQKICAgICAgICAvLyB0aGVzZSBtYWxsZWFibGUgc2lnbmF0dXJlcyBhcyB3ZWxsLgogICAgICAgIGlmICgKICAgICAgICAgICAgdWludDI1NihzKQogICAgICAgICAgICAgICAgPiAweDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUQ1NzZFNzM1N0E0NTAxRERGRTkyRjQ2NjgxQjIwQTAKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIChhZGRyZXNzKDApLCBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZVMpOwogICAgICAgIH0KICAgICAgICBpZiAodiAhPSAyNyAmJiB2ICE9IDI4KSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVWKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgKGFuZCBub3QgbWFsbGVhYmxlKSwgcmV0dXJuIHRoZSBzaWduZXIgYWRkcmVzcwogICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZWNyZWNvdmVyKGhhc2gsIHYsIHIsIHMpOwogICAgICAgIGlmIChzaWduZXIgPT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICByZXR1cm4gKGFkZHJlc3MoMCksIFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc2lnbmVyLCBSZWNvdmVyRXJyb3IuTm9FcnJvcik7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MpCiAgICB7CiAgICAgICAgKGFkZHJlc3MgcmVjb3ZlcmVkLCBSZWNvdmVyRXJyb3IgZXJyb3IpID0gdHJ5UmVjb3ZlcihoYXNoLCB2LCByLCBzKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKGJ5dGVzMzIgaGFzaCkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIC8vIDMyIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgaGFzaCwKICAgICAgICAvLyBlbmZvcmNlZCBieSB0aGUgdHlwZSBzaWduYXR1cmUgYWJvdmUKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KAogICAgICAgICAgICBhYmkuZW5jb2RlUGFja2VkKCJceDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XG4zMiIsIGhhc2gpCiAgICAgICAgKTsKICAgIH0KfQo="},{fileName:"UniDirectionalPaymentChannel.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgUmVlbnRyYW5jeUd1YXJkIHsKICAgIGJvb2wgcHJpdmF0ZSBsb2NrZWQ7CgogICAgbW9kaWZpZXIgZ3VhcmQoKSB7CiAgICAgICAgcmVxdWlyZSghbG9ja2VkKTsKICAgICAgICBsb2NrZWQgPSB0cnVlOwogICAgICAgIF87CiAgICAgICAgbG9ja2VkID0gZmFsc2U7CiAgICB9Cn0KCmNvbnRyYWN0IFVuaURpcmVjdGlvbmFsUGF5bWVudENoYW5uZWwgaXMgUmVlbnRyYW5jeUd1YXJkIHsKICAgIHVzaW5nIEVDRFNBIGZvciBieXRlczMyOwoKICAgIGFkZHJlc3MgcGF5YWJsZSBwdWJsaWMgc2VuZGVyOwogICAgYWRkcmVzcyBwYXlhYmxlIHB1YmxpYyByZWNlaXZlcjsKCiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgRFVSQVRJT04gPSA3ICogMjQgKiA2MCAqIDYwOwogICAgdWludDI1NiBwdWJsaWMgZXhwaXJlc0F0OwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3MgcGF5YWJsZSBfcmVjZWl2ZXIpIHBheWFibGUgewogICAgICAgIHJlcXVpcmUoX3JlY2VpdmVyICE9IGFkZHJlc3MoMCksICJyZWNlaXZlciA9IHplcm8gYWRkcmVzcyIpOwogICAgICAgIHNlbmRlciA9IHBheWFibGUobXNnLnNlbmRlcik7CiAgICAgICAgcmVjZWl2ZXIgPSBfcmVjZWl2ZXI7CiAgICAgICAgZXhwaXJlc0F0ID0gYmxvY2sudGltZXN0YW1wICsgRFVSQVRJT047CiAgICB9CgogICAgZnVuY3Rpb24gX2dldEhhc2godWludDI1NiBfYW1vdW50KSBwcml2YXRlIHZpZXcgcmV0dXJucyAoYnl0ZXMzMikgewogICAgICAgIC8vIE5PVEU6IHNpZ24gd2l0aCBhZGRyZXNzIG9mIHRoaXMgY29udHJhY3QgdG8gcHJvdGVjdCBhZ2FpbnMKICAgICAgICAvLyByZXBsYXkgYXR0YWNrIG9uIG90aGVyIGNvbnRyYWN0cwogICAgICAgIHJldHVybiBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChhZGRyZXNzKHRoaXMpLCBfYW1vdW50KSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0SGFzaCh1aW50MjU2IF9hbW91bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYnl0ZXMzMikgewogICAgICAgIHJldHVybiBfZ2V0SGFzaChfYW1vdW50KTsKICAgIH0KCiAgICBmdW5jdGlvbiBfZ2V0RXRoU2lnbmVkSGFzaCh1aW50MjU2IF9hbW91bnQpCiAgICAgICAgcHJpdmF0ZQogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIHJldHVybiBfZ2V0SGFzaChfYW1vdW50KS50b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0RXRoU2lnbmVkSGFzaCh1aW50MjU2IF9hbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYnl0ZXMzMikKICAgIHsKICAgICAgICByZXR1cm4gX2dldEV0aFNpZ25lZEhhc2goX2Ftb3VudCk7CiAgICB9CgogICAgZnVuY3Rpb24gX3ZlcmlmeSh1aW50MjU2IF9hbW91bnQsIGJ5dGVzIG1lbW9yeSBfc2lnKQogICAgICAgIHByaXZhdGUKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCkKICAgIHsKICAgICAgICByZXR1cm4gX2dldEV0aFNpZ25lZEhhc2goX2Ftb3VudCkucmVjb3Zlcihfc2lnKSA9PSBzZW5kZXI7CiAgICB9CgogICAgZnVuY3Rpb24gdmVyaWZ5KHVpbnQyNTYgX2Ftb3VudCwgYnl0ZXMgbWVtb3J5IF9zaWcpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYm9vbCkKICAgIHsKICAgICAgICByZXR1cm4gX3ZlcmlmeShfYW1vdW50LCBfc2lnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbG9zZSh1aW50MjU2IF9hbW91bnQsIGJ5dGVzIG1lbW9yeSBfc2lnKSBleHRlcm5hbCBndWFyZCB7CiAgICAgICAgcmVxdWlyZShtc2cuc2VuZGVyID09IHJlY2VpdmVyLCAiIXJlY2VpdmVyIik7CiAgICAgICAgcmVxdWlyZShfdmVyaWZ5KF9hbW91bnQsIF9zaWcpLCAiaW52YWxpZCBzaWciKTsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gcmVjZWl2ZXIuY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICAgICAgc2VsZmRlc3RydWN0KHNlbmRlcik7CiAgICB9CgogICAgZnVuY3Rpb24gY2FuY2VsKCkgZXh0ZXJuYWwgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSBzZW5kZXIsICIhc2VuZGVyIik7CiAgICAgICAgcmVxdWlyZShibG9jay50aW1lc3RhbXAgPj0gZXhwaXJlc0F0LCAiIWV4cGlyZWQiKTsKICAgICAgICBzZWxmZGVzdHJ1Y3Qoc2VuZGVyKTsKICAgIH0KfQo="}],gA=`

      Payment channels allow participants to repeatedly transfer Ether off chain.

      Here is how this contract is used:

      • Alice deploys the contract, funding it with some Ether.
      • @@ -2883,7 +2883,7 @@ After a mimimum waiting period, the transaction can be executed.

        ); } } -`,hy=({prev:s,next:a})=>i.jsx(u,{version:ty,title:oy,description:ry,html:gy,prev:s,next:a,codes:iy}),dy="0.8.24",Iy="Upgradeable Proxy",Cy="Example of upgradeable proxy",jy=[{fileName:"UpgradeableProxy.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIFRyYW5zcGFyZW50IHVwZ3JhZGVhYmxlIHByb3h5IHBhdHRlcm4KCmNvbnRyYWN0IENvdW50ZXJWMSB7CiAgICB1aW50MjU2IHB1YmxpYyBjb3VudDsKCiAgICBmdW5jdGlvbiBpbmMoKSBleHRlcm5hbCB7CiAgICAgICAgY291bnQgKz0gMTsKICAgIH0KfQoKY29udHJhY3QgQ291bnRlclYyIHsKICAgIHVpbnQyNTYgcHVibGljIGNvdW50OwoKICAgIGZ1bmN0aW9uIGluYygpIGV4dGVybmFsIHsKICAgICAgICBjb3VudCArPSAxOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlYygpIGV4dGVybmFsIHsKICAgICAgICBjb3VudCAtPSAxOwogICAgfQp9Cgpjb250cmFjdCBCdWdneVByb3h5IHsKICAgIGFkZHJlc3MgcHVibGljIGltcGxlbWVudGF0aW9uOwogICAgYWRkcmVzcyBwdWJsaWMgYWRtaW47CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgYWRtaW4gPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWxlZ2F0ZSgpIHByaXZhdGUgewogICAgICAgIChib29sIG9rLCkgPSBpbXBsZW1lbnRhdGlvbi5kZWxlZ2F0ZWNhbGwobXNnLmRhdGEpOwogICAgICAgIHJlcXVpcmUob2ssICJkZWxlZ2F0ZWNhbGwgZmFpbGVkIik7CiAgICB9CgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBfZGVsZWdhdGUoKTsKICAgIH0KCiAgICByZWNlaXZlKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgX2RlbGVnYXRlKCk7CiAgICB9CgogICAgZnVuY3Rpb24gdXBncmFkZVRvKGFkZHJlc3MgX2ltcGxlbWVudGF0aW9uKSBleHRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShtc2cuc2VuZGVyID09IGFkbWluLCAibm90IGF1dGhvcml6ZWQiKTsKICAgICAgICBpbXBsZW1lbnRhdGlvbiA9IF9pbXBsZW1lbnRhdGlvbjsKICAgIH0KfQoKY29udHJhY3QgRGV2IHsKICAgIGZ1bmN0aW9uIHNlbGVjdG9ycygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYnl0ZXM0LCBieXRlczQsIGJ5dGVzNCkgewogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIFByb3h5LmFkbWluLnNlbGVjdG9yLAogICAgICAgICAgICBQcm94eS5pbXBsZW1lbnRhdGlvbi5zZWxlY3RvciwKICAgICAgICAgICAgUHJveHkudXBncmFkZVRvLnNlbGVjdG9yCiAgICAgICAgKTsKICAgIH0KfQoKY29udHJhY3QgUHJveHkgewogICAgLy8gQWxsIGZ1bmN0aW9ucyAvIHZhcmlhYmxlcyBzaG91bGQgYmUgcHJpdmF0ZSwgZm9yd2FyZCBhbGwgY2FsbHMgdG8gZmFsbGJhY2sKCiAgICAvLyAtMSBmb3IgdW5rbm93biBwcmVpbWFnZQogICAgLy8gMHgzNjA4OTRhMTNiYTFhMzIxMDY2N2M4Mjg0OTJkYjk4ZGNhM2UyMDc2Y2MzNzM1YTkyMGEzY2E1MDVkMzgyYmJjCiAgICBieXRlczMyIHByaXZhdGUgY29uc3RhbnQgSU1QTEVNRU5UQVRJT05fU0xPVCA9CiAgICAgICAgYnl0ZXMzMih1aW50MjU2KGtlY2NhazI1NigiZWlwMTk2Ny5wcm94eS5pbXBsZW1lbnRhdGlvbiIpKSAtIDEpOwogICAgLy8gMHhiNTMxMjc2ODRhNTY4YjMxNzNhZTEzYjlmOGE2MDE2ZTI0M2U2M2I2ZThlZTExNzhkNmE3MTc4NTBiNWQ2MTAzCiAgICBieXRlczMyIHByaXZhdGUgY29uc3RhbnQgQURNSU5fU0xPVCA9CiAgICAgICAgYnl0ZXMzMih1aW50MjU2KGtlY2NhazI1NigiZWlwMTk2Ny5wcm94eS5hZG1pbiIpKSAtIDEpOwoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIF9zZXRBZG1pbihtc2cuc2VuZGVyKTsKICAgIH0KCiAgICBtb2RpZmllciBpZkFkbWluKCkgewogICAgICAgIGlmIChtc2cuc2VuZGVyID09IF9nZXRBZG1pbigpKSB7CiAgICAgICAgICAgIF87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2ZhbGxiYWNrKCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9nZXRBZG1pbigpIHByaXZhdGUgdmlldyByZXR1cm5zIChhZGRyZXNzKSB7CiAgICAgICAgcmV0dXJuIFN0b3JhZ2VTbG90LmdldEFkZHJlc3NTbG90KEFETUlOX1NMT1QpLnZhbHVlOwogICAgfQoKICAgIGZ1bmN0aW9uIF9zZXRBZG1pbihhZGRyZXNzIF9hZG1pbikgcHJpdmF0ZSB7CiAgICAgICAgcmVxdWlyZShfYWRtaW4gIT0gYWRkcmVzcygwKSwgImFkbWluID0gemVybyBhZGRyZXNzIik7CiAgICAgICAgU3RvcmFnZVNsb3QuZ2V0QWRkcmVzc1Nsb3QoQURNSU5fU0xPVCkudmFsdWUgPSBfYWRtaW47CiAgICB9CgogICAgZnVuY3Rpb24gX2dldEltcGxlbWVudGF0aW9uKCkgcHJpdmF0ZSB2aWV3IHJldHVybnMgKGFkZHJlc3MpIHsKICAgICAgICByZXR1cm4gU3RvcmFnZVNsb3QuZ2V0QWRkcmVzc1Nsb3QoSU1QTEVNRU5UQVRJT05fU0xPVCkudmFsdWU7CiAgICB9CgogICAgZnVuY3Rpb24gX3NldEltcGxlbWVudGF0aW9uKGFkZHJlc3MgX2ltcGxlbWVudGF0aW9uKSBwcml2YXRlIHsKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICBfaW1wbGVtZW50YXRpb24uY29kZS5sZW5ndGggPiAwLCAiaW1wbGVtZW50YXRpb24gaXMgbm90IGNvbnRyYWN0IgogICAgICAgICk7CiAgICAgICAgU3RvcmFnZVNsb3QuZ2V0QWRkcmVzc1Nsb3QoSU1QTEVNRU5UQVRJT05fU0xPVCkudmFsdWUgPSBfaW1wbGVtZW50YXRpb247CiAgICB9CgogICAgLy8gQWRtaW4gaW50ZXJmYWNlIC8vCiAgICBmdW5jdGlvbiBjaGFuZ2VBZG1pbihhZGRyZXNzIF9hZG1pbikgZXh0ZXJuYWwgaWZBZG1pbiB7CiAgICAgICAgX3NldEFkbWluKF9hZG1pbik7CiAgICB9CgogICAgLy8gMHgzNjU5Y2ZlNgogICAgZnVuY3Rpb24gdXBncmFkZVRvKGFkZHJlc3MgX2ltcGxlbWVudGF0aW9uKSBleHRlcm5hbCBpZkFkbWluIHsKICAgICAgICBfc2V0SW1wbGVtZW50YXRpb24oX2ltcGxlbWVudGF0aW9uKTsKICAgIH0KCiAgICAvLyAweGY4NTFhNDQwCiAgICBmdW5jdGlvbiBhZG1pbigpIGV4dGVybmFsIGlmQWRtaW4gcmV0dXJucyAoYWRkcmVzcykgewogICAgICAgIHJldHVybiBfZ2V0QWRtaW4oKTsKICAgIH0KCiAgICAvLyAweDVjNjBkYTFiCiAgICBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbigpIGV4dGVybmFsIGlmQWRtaW4gcmV0dXJucyAoYWRkcmVzcykgewogICAgICAgIHJldHVybiBfZ2V0SW1wbGVtZW50YXRpb24oKTsKICAgIH0KCiAgICAvLyBVc2VyIGludGVyZmFjZSAvLwogICAgZnVuY3Rpb24gX2RlbGVnYXRlKGFkZHJlc3MgX2ltcGxlbWVudGF0aW9uKSBpbnRlcm5hbCB2aXJ0dWFsIHsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIC8vIENvcHkgbXNnLmRhdGEuIFdlIHRha2UgZnVsbCBjb250cm9sIG9mIG1lbW9yeSBpbiB0aGlzIGlubGluZSBhc3NlbWJseQogICAgICAgICAgICAvLyBibG9jayBiZWNhdXNlIGl0IHdpbGwgbm90IHJldHVybiB0byBTb2xpZGl0eSBjb2RlLiBXZSBvdmVyd3JpdGUgdGhlCiAgICAgICAgICAgIC8vIFNvbGlkaXR5IHNjcmF0Y2ggcGFkIGF0IG1lbW9yeSBwb3NpdGlvbiAwLgoKICAgICAgICAgICAgLy8gY2FsbGRhdGFjb3B5KHQsIGYsIHMpIC0gY29weSBzIGJ5dGVzIGZyb20gY2FsbGRhdGEgYXQgcG9zaXRpb24gZiB0byBtZW0gYXQgcG9zaXRpb24gdAogICAgICAgICAgICAvLyBjYWxsZGF0YXNpemUoKSAtIHNpemUgb2YgY2FsbCBkYXRhIGluIGJ5dGVzCiAgICAgICAgICAgIGNhbGxkYXRhY29weSgwLCAwLCBjYWxsZGF0YXNpemUoKSkKCiAgICAgICAgICAgIC8vIENhbGwgdGhlIGltcGxlbWVudGF0aW9uLgogICAgICAgICAgICAvLyBvdXQgYW5kIG91dHNpemUgYXJlIDAgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBzaXplIHlldC4KCiAgICAgICAgICAgIC8vIGRlbGVnYXRlY2FsbChnLCBhLCBpbiwgaW5zaXplLCBvdXQsIG91dHNpemUpIC0KICAgICAgICAgICAgLy8gLSBjYWxsIGNvbnRyYWN0IGF0IGFkZHJlc3MgYQogICAgICAgICAgICAvLyAtIHdpdGggaW5wdXQgbWVtW2lu4oCmKGluK2luc2l6ZSkpCiAgICAgICAgICAgIC8vIC0gcHJvdmlkaW5nIGcgZ2FzCiAgICAgICAgICAgIC8vIC0gYW5kIG91dHB1dCBhcmVhIG1lbVtvdXTigKYob3V0K291dHNpemUpKQogICAgICAgICAgICAvLyAtIHJldHVybmluZyAwIG9uIGVycm9yIChlZy4gb3V0IG9mIGdhcykgYW5kIDEgb24gc3VjY2VzcwogICAgICAgICAgICBsZXQgcmVzdWx0IDo9CiAgICAgICAgICAgICAgICBkZWxlZ2F0ZWNhbGwoZ2FzKCksIF9pbXBsZW1lbnRhdGlvbiwgMCwgY2FsbGRhdGFzaXplKCksIDAsIDApCgogICAgICAgICAgICAvLyBDb3B5IHRoZSByZXR1cm5lZCBkYXRhLgogICAgICAgICAgICAvLyByZXR1cm5kYXRhY29weSh0LCBmLCBzKSAtIGNvcHkgcyBieXRlcyBmcm9tIHJldHVybmRhdGEgYXQgcG9zaXRpb24gZiB0byBtZW0gYXQgcG9zaXRpb24gdAogICAgICAgICAgICAvLyByZXR1cm5kYXRhc2l6ZSgpIC0gc2l6ZSBvZiB0aGUgbGFzdCByZXR1cm5kYXRhCiAgICAgICAgICAgIHJldHVybmRhdGFjb3B5KDAsIDAsIHJldHVybmRhdGFzaXplKCkpCgogICAgICAgICAgICBzd2l0Y2ggcmVzdWx0CiAgICAgICAgICAgIC8vIGRlbGVnYXRlY2FsbCByZXR1cm5zIDAgb24gZXJyb3IuCiAgICAgICAgICAgIGNhc2UgMCB7CiAgICAgICAgICAgICAgICAvLyByZXZlcnQocCwgcykgLSBlbmQgZXhlY3V0aW9uLCByZXZlcnQgc3RhdGUgY2hhbmdlcywgcmV0dXJuIGRhdGEgbWVtW3DigKYocCtzKSkKICAgICAgICAgICAgICAgIHJldmVydCgwLCByZXR1cm5kYXRhc2l6ZSgpKQogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlZmF1bHQgewogICAgICAgICAgICAgICAgLy8gcmV0dXJuKHAsIHMpIC0gZW5kIGV4ZWN1dGlvbiwgcmV0dXJuIGRhdGEgbWVtW3DigKYocCtzKSkKICAgICAgICAgICAgICAgIHJldHVybigwLCByZXR1cm5kYXRhc2l6ZSgpKQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9mYWxsYmFjaygpIHByaXZhdGUgewogICAgICAgIF9kZWxlZ2F0ZShfZ2V0SW1wbGVtZW50YXRpb24oKSk7CiAgICB9CgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBfZmFsbGJhY2soKTsKICAgIH0KCiAgICByZWNlaXZlKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgX2ZhbGxiYWNrKCk7CiAgICB9Cn0KCmNvbnRyYWN0IFByb3h5QWRtaW4gewogICAgYWRkcmVzcyBwdWJsaWMgb3duZXI7CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIG1vZGlmaWVyIG9ubHlPd25lcigpIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gb3duZXIsICJub3Qgb3duZXIiKTsKICAgICAgICBfOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFByb3h5QWRtaW4oYWRkcmVzcyBwcm94eSkgZXh0ZXJuYWwgdmlldyByZXR1cm5zIChhZGRyZXNzKSB7CiAgICAgICAgKGJvb2wgb2ssIGJ5dGVzIG1lbW9yeSByZXMpID0KICAgICAgICAgICAgcHJveHkuc3RhdGljY2FsbChhYmkuZW5jb2RlQ2FsbChQcm94eS5hZG1pbiwgKCkpKTsKICAgICAgICByZXF1aXJlKG9rLCAiY2FsbCBmYWlsZWQiKTsKICAgICAgICByZXR1cm4gYWJpLmRlY29kZShyZXMsIChhZGRyZXNzKSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UHJveHlJbXBsZW1lbnRhdGlvbihhZGRyZXNzIHByb3h5KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKGFkZHJlc3MpCiAgICB7CiAgICAgICAgKGJvb2wgb2ssIGJ5dGVzIG1lbW9yeSByZXMpID0KICAgICAgICAgICAgcHJveHkuc3RhdGljY2FsbChhYmkuZW5jb2RlQ2FsbChQcm94eS5pbXBsZW1lbnRhdGlvbiwgKCkpKTsKICAgICAgICByZXF1aXJlKG9rLCAiY2FsbCBmYWlsZWQiKTsKICAgICAgICByZXR1cm4gYWJpLmRlY29kZShyZXMsIChhZGRyZXNzKSk7CiAgICB9CgogICAgZnVuY3Rpb24gY2hhbmdlUHJveHlBZG1pbihhZGRyZXNzIHBheWFibGUgcHJveHksIGFkZHJlc3MgYWRtaW4pCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBvbmx5T3duZXIKICAgIHsKICAgICAgICBQcm94eShwcm94eSkuY2hhbmdlQWRtaW4oYWRtaW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZ3JhZGUoYWRkcmVzcyBwYXlhYmxlIHByb3h5LCBhZGRyZXNzIGltcGxlbWVudGF0aW9uKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgb25seU93bmVyCiAgICB7CiAgICAgICAgUHJveHkocHJveHkpLnVwZ3JhZGVUbyhpbXBsZW1lbnRhdGlvbik7CiAgICB9Cn0KCmxpYnJhcnkgU3RvcmFnZVNsb3QgewogICAgc3RydWN0IEFkZHJlc3NTbG90IHsKICAgICAgICBhZGRyZXNzIHZhbHVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NTbG90KGJ5dGVzMzIgc2xvdCkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChBZGRyZXNzU2xvdCBzdG9yYWdlIHIpCiAgICB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICByLnNsb3QgOj0gc2xvdAogICAgICAgIH0KICAgIH0KfQoKY29udHJhY3QgVGVzdFNsb3QgewogICAgYnl0ZXMzMiBwdWJsaWMgY29uc3RhbnQgc2xvdCA9IGtlY2NhazI1NigiVEVTVF9TTE9UIik7CgogICAgZnVuY3Rpb24gZ2V0U2xvdCgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYWRkcmVzcykgewogICAgICAgIHJldHVybiBTdG9yYWdlU2xvdC5nZXRBZGRyZXNzU2xvdChzbG90KS52YWx1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiB3cml0ZVNsb3QoYWRkcmVzcyBfYWRkcikgZXh0ZXJuYWwgewogICAgICAgIFN0b3JhZ2VTbG90LmdldEFkZHJlc3NTbG90KHNsb3QpLnZhbHVlID0gX2FkZHI7CiAgICB9Cn0K"}],uy=`

        Example of upgradeable proxy contract. Never use this in production.

        +`,hA=({prev:s,next:a})=>i.jsx(u,{version:tA,title:oA,description:rA,html:gA,prev:s,next:a,codes:iA}),dA="0.8.24",IA="Upgradeable Proxy",CA="Example of upgradeable proxy",jA=[{fileName:"UpgradeableProxy.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIFRyYW5zcGFyZW50IHVwZ3JhZGVhYmxlIHByb3h5IHBhdHRlcm4KCmNvbnRyYWN0IENvdW50ZXJWMSB7CiAgICB1aW50MjU2IHB1YmxpYyBjb3VudDsKCiAgICBmdW5jdGlvbiBpbmMoKSBleHRlcm5hbCB7CiAgICAgICAgY291bnQgKz0gMTsKICAgIH0KfQoKY29udHJhY3QgQ291bnRlclYyIHsKICAgIHVpbnQyNTYgcHVibGljIGNvdW50OwoKICAgIGZ1bmN0aW9uIGluYygpIGV4dGVybmFsIHsKICAgICAgICBjb3VudCArPSAxOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlYygpIGV4dGVybmFsIHsKICAgICAgICBjb3VudCAtPSAxOwogICAgfQp9Cgpjb250cmFjdCBCdWdneVByb3h5IHsKICAgIGFkZHJlc3MgcHVibGljIGltcGxlbWVudGF0aW9uOwogICAgYWRkcmVzcyBwdWJsaWMgYWRtaW47CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgYWRtaW4gPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWxlZ2F0ZSgpIHByaXZhdGUgewogICAgICAgIChib29sIG9rLCkgPSBpbXBsZW1lbnRhdGlvbi5kZWxlZ2F0ZWNhbGwobXNnLmRhdGEpOwogICAgICAgIHJlcXVpcmUob2ssICJkZWxlZ2F0ZWNhbGwgZmFpbGVkIik7CiAgICB9CgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBfZGVsZWdhdGUoKTsKICAgIH0KCiAgICByZWNlaXZlKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgX2RlbGVnYXRlKCk7CiAgICB9CgogICAgZnVuY3Rpb24gdXBncmFkZVRvKGFkZHJlc3MgX2ltcGxlbWVudGF0aW9uKSBleHRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShtc2cuc2VuZGVyID09IGFkbWluLCAibm90IGF1dGhvcml6ZWQiKTsKICAgICAgICBpbXBsZW1lbnRhdGlvbiA9IF9pbXBsZW1lbnRhdGlvbjsKICAgIH0KfQoKY29udHJhY3QgRGV2IHsKICAgIGZ1bmN0aW9uIHNlbGVjdG9ycygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYnl0ZXM0LCBieXRlczQsIGJ5dGVzNCkgewogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIFByb3h5LmFkbWluLnNlbGVjdG9yLAogICAgICAgICAgICBQcm94eS5pbXBsZW1lbnRhdGlvbi5zZWxlY3RvciwKICAgICAgICAgICAgUHJveHkudXBncmFkZVRvLnNlbGVjdG9yCiAgICAgICAgKTsKICAgIH0KfQoKY29udHJhY3QgUHJveHkgewogICAgLy8gQWxsIGZ1bmN0aW9ucyAvIHZhcmlhYmxlcyBzaG91bGQgYmUgcHJpdmF0ZSwgZm9yd2FyZCBhbGwgY2FsbHMgdG8gZmFsbGJhY2sKCiAgICAvLyAtMSBmb3IgdW5rbm93biBwcmVpbWFnZQogICAgLy8gMHgzNjA4OTRhMTNiYTFhMzIxMDY2N2M4Mjg0OTJkYjk4ZGNhM2UyMDc2Y2MzNzM1YTkyMGEzY2E1MDVkMzgyYmJjCiAgICBieXRlczMyIHByaXZhdGUgY29uc3RhbnQgSU1QTEVNRU5UQVRJT05fU0xPVCA9CiAgICAgICAgYnl0ZXMzMih1aW50MjU2KGtlY2NhazI1NigiZWlwMTk2Ny5wcm94eS5pbXBsZW1lbnRhdGlvbiIpKSAtIDEpOwogICAgLy8gMHhiNTMxMjc2ODRhNTY4YjMxNzNhZTEzYjlmOGE2MDE2ZTI0M2U2M2I2ZThlZTExNzhkNmE3MTc4NTBiNWQ2MTAzCiAgICBieXRlczMyIHByaXZhdGUgY29uc3RhbnQgQURNSU5fU0xPVCA9CiAgICAgICAgYnl0ZXMzMih1aW50MjU2KGtlY2NhazI1NigiZWlwMTk2Ny5wcm94eS5hZG1pbiIpKSAtIDEpOwoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIF9zZXRBZG1pbihtc2cuc2VuZGVyKTsKICAgIH0KCiAgICBtb2RpZmllciBpZkFkbWluKCkgewogICAgICAgIGlmIChtc2cuc2VuZGVyID09IF9nZXRBZG1pbigpKSB7CiAgICAgICAgICAgIF87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2ZhbGxiYWNrKCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9nZXRBZG1pbigpIHByaXZhdGUgdmlldyByZXR1cm5zIChhZGRyZXNzKSB7CiAgICAgICAgcmV0dXJuIFN0b3JhZ2VTbG90LmdldEFkZHJlc3NTbG90KEFETUlOX1NMT1QpLnZhbHVlOwogICAgfQoKICAgIGZ1bmN0aW9uIF9zZXRBZG1pbihhZGRyZXNzIF9hZG1pbikgcHJpdmF0ZSB7CiAgICAgICAgcmVxdWlyZShfYWRtaW4gIT0gYWRkcmVzcygwKSwgImFkbWluID0gemVybyBhZGRyZXNzIik7CiAgICAgICAgU3RvcmFnZVNsb3QuZ2V0QWRkcmVzc1Nsb3QoQURNSU5fU0xPVCkudmFsdWUgPSBfYWRtaW47CiAgICB9CgogICAgZnVuY3Rpb24gX2dldEltcGxlbWVudGF0aW9uKCkgcHJpdmF0ZSB2aWV3IHJldHVybnMgKGFkZHJlc3MpIHsKICAgICAgICByZXR1cm4gU3RvcmFnZVNsb3QuZ2V0QWRkcmVzc1Nsb3QoSU1QTEVNRU5UQVRJT05fU0xPVCkudmFsdWU7CiAgICB9CgogICAgZnVuY3Rpb24gX3NldEltcGxlbWVudGF0aW9uKGFkZHJlc3MgX2ltcGxlbWVudGF0aW9uKSBwcml2YXRlIHsKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICBfaW1wbGVtZW50YXRpb24uY29kZS5sZW5ndGggPiAwLCAiaW1wbGVtZW50YXRpb24gaXMgbm90IGNvbnRyYWN0IgogICAgICAgICk7CiAgICAgICAgU3RvcmFnZVNsb3QuZ2V0QWRkcmVzc1Nsb3QoSU1QTEVNRU5UQVRJT05fU0xPVCkudmFsdWUgPSBfaW1wbGVtZW50YXRpb247CiAgICB9CgogICAgLy8gQWRtaW4gaW50ZXJmYWNlIC8vCiAgICBmdW5jdGlvbiBjaGFuZ2VBZG1pbihhZGRyZXNzIF9hZG1pbikgZXh0ZXJuYWwgaWZBZG1pbiB7CiAgICAgICAgX3NldEFkbWluKF9hZG1pbik7CiAgICB9CgogICAgLy8gMHgzNjU5Y2ZlNgogICAgZnVuY3Rpb24gdXBncmFkZVRvKGFkZHJlc3MgX2ltcGxlbWVudGF0aW9uKSBleHRlcm5hbCBpZkFkbWluIHsKICAgICAgICBfc2V0SW1wbGVtZW50YXRpb24oX2ltcGxlbWVudGF0aW9uKTsKICAgIH0KCiAgICAvLyAweGY4NTFhNDQwCiAgICBmdW5jdGlvbiBhZG1pbigpIGV4dGVybmFsIGlmQWRtaW4gcmV0dXJucyAoYWRkcmVzcykgewogICAgICAgIHJldHVybiBfZ2V0QWRtaW4oKTsKICAgIH0KCiAgICAvLyAweDVjNjBkYTFiCiAgICBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbigpIGV4dGVybmFsIGlmQWRtaW4gcmV0dXJucyAoYWRkcmVzcykgewogICAgICAgIHJldHVybiBfZ2V0SW1wbGVtZW50YXRpb24oKTsKICAgIH0KCiAgICAvLyBVc2VyIGludGVyZmFjZSAvLwogICAgZnVuY3Rpb24gX2RlbGVnYXRlKGFkZHJlc3MgX2ltcGxlbWVudGF0aW9uKSBpbnRlcm5hbCB2aXJ0dWFsIHsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIC8vIENvcHkgbXNnLmRhdGEuIFdlIHRha2UgZnVsbCBjb250cm9sIG9mIG1lbW9yeSBpbiB0aGlzIGlubGluZSBhc3NlbWJseQogICAgICAgICAgICAvLyBibG9jayBiZWNhdXNlIGl0IHdpbGwgbm90IHJldHVybiB0byBTb2xpZGl0eSBjb2RlLiBXZSBvdmVyd3JpdGUgdGhlCiAgICAgICAgICAgIC8vIFNvbGlkaXR5IHNjcmF0Y2ggcGFkIGF0IG1lbW9yeSBwb3NpdGlvbiAwLgoKICAgICAgICAgICAgLy8gY2FsbGRhdGFjb3B5KHQsIGYsIHMpIC0gY29weSBzIGJ5dGVzIGZyb20gY2FsbGRhdGEgYXQgcG9zaXRpb24gZiB0byBtZW0gYXQgcG9zaXRpb24gdAogICAgICAgICAgICAvLyBjYWxsZGF0YXNpemUoKSAtIHNpemUgb2YgY2FsbCBkYXRhIGluIGJ5dGVzCiAgICAgICAgICAgIGNhbGxkYXRhY29weSgwLCAwLCBjYWxsZGF0YXNpemUoKSkKCiAgICAgICAgICAgIC8vIENhbGwgdGhlIGltcGxlbWVudGF0aW9uLgogICAgICAgICAgICAvLyBvdXQgYW5kIG91dHNpemUgYXJlIDAgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBzaXplIHlldC4KCiAgICAgICAgICAgIC8vIGRlbGVnYXRlY2FsbChnLCBhLCBpbiwgaW5zaXplLCBvdXQsIG91dHNpemUpIC0KICAgICAgICAgICAgLy8gLSBjYWxsIGNvbnRyYWN0IGF0IGFkZHJlc3MgYQogICAgICAgICAgICAvLyAtIHdpdGggaW5wdXQgbWVtW2lu4oCmKGluK2luc2l6ZSkpCiAgICAgICAgICAgIC8vIC0gcHJvdmlkaW5nIGcgZ2FzCiAgICAgICAgICAgIC8vIC0gYW5kIG91dHB1dCBhcmVhIG1lbVtvdXTigKYob3V0K291dHNpemUpKQogICAgICAgICAgICAvLyAtIHJldHVybmluZyAwIG9uIGVycm9yIChlZy4gb3V0IG9mIGdhcykgYW5kIDEgb24gc3VjY2VzcwogICAgICAgICAgICBsZXQgcmVzdWx0IDo9CiAgICAgICAgICAgICAgICBkZWxlZ2F0ZWNhbGwoZ2FzKCksIF9pbXBsZW1lbnRhdGlvbiwgMCwgY2FsbGRhdGFzaXplKCksIDAsIDApCgogICAgICAgICAgICAvLyBDb3B5IHRoZSByZXR1cm5lZCBkYXRhLgogICAgICAgICAgICAvLyByZXR1cm5kYXRhY29weSh0LCBmLCBzKSAtIGNvcHkgcyBieXRlcyBmcm9tIHJldHVybmRhdGEgYXQgcG9zaXRpb24gZiB0byBtZW0gYXQgcG9zaXRpb24gdAogICAgICAgICAgICAvLyByZXR1cm5kYXRhc2l6ZSgpIC0gc2l6ZSBvZiB0aGUgbGFzdCByZXR1cm5kYXRhCiAgICAgICAgICAgIHJldHVybmRhdGFjb3B5KDAsIDAsIHJldHVybmRhdGFzaXplKCkpCgogICAgICAgICAgICBzd2l0Y2ggcmVzdWx0CiAgICAgICAgICAgIC8vIGRlbGVnYXRlY2FsbCByZXR1cm5zIDAgb24gZXJyb3IuCiAgICAgICAgICAgIGNhc2UgMCB7CiAgICAgICAgICAgICAgICAvLyByZXZlcnQocCwgcykgLSBlbmQgZXhlY3V0aW9uLCByZXZlcnQgc3RhdGUgY2hhbmdlcywgcmV0dXJuIGRhdGEgbWVtW3DigKYocCtzKSkKICAgICAgICAgICAgICAgIHJldmVydCgwLCByZXR1cm5kYXRhc2l6ZSgpKQogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlZmF1bHQgewogICAgICAgICAgICAgICAgLy8gcmV0dXJuKHAsIHMpIC0gZW5kIGV4ZWN1dGlvbiwgcmV0dXJuIGRhdGEgbWVtW3DigKYocCtzKSkKICAgICAgICAgICAgICAgIHJldHVybigwLCByZXR1cm5kYXRhc2l6ZSgpKQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9mYWxsYmFjaygpIHByaXZhdGUgewogICAgICAgIF9kZWxlZ2F0ZShfZ2V0SW1wbGVtZW50YXRpb24oKSk7CiAgICB9CgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBfZmFsbGJhY2soKTsKICAgIH0KCiAgICByZWNlaXZlKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgX2ZhbGxiYWNrKCk7CiAgICB9Cn0KCmNvbnRyYWN0IFByb3h5QWRtaW4gewogICAgYWRkcmVzcyBwdWJsaWMgb3duZXI7CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIG1vZGlmaWVyIG9ubHlPd25lcigpIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gb3duZXIsICJub3Qgb3duZXIiKTsKICAgICAgICBfOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFByb3h5QWRtaW4oYWRkcmVzcyBwcm94eSkgZXh0ZXJuYWwgdmlldyByZXR1cm5zIChhZGRyZXNzKSB7CiAgICAgICAgKGJvb2wgb2ssIGJ5dGVzIG1lbW9yeSByZXMpID0KICAgICAgICAgICAgcHJveHkuc3RhdGljY2FsbChhYmkuZW5jb2RlQ2FsbChQcm94eS5hZG1pbiwgKCkpKTsKICAgICAgICByZXF1aXJlKG9rLCAiY2FsbCBmYWlsZWQiKTsKICAgICAgICByZXR1cm4gYWJpLmRlY29kZShyZXMsIChhZGRyZXNzKSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UHJveHlJbXBsZW1lbnRhdGlvbihhZGRyZXNzIHByb3h5KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKGFkZHJlc3MpCiAgICB7CiAgICAgICAgKGJvb2wgb2ssIGJ5dGVzIG1lbW9yeSByZXMpID0KICAgICAgICAgICAgcHJveHkuc3RhdGljY2FsbChhYmkuZW5jb2RlQ2FsbChQcm94eS5pbXBsZW1lbnRhdGlvbiwgKCkpKTsKICAgICAgICByZXF1aXJlKG9rLCAiY2FsbCBmYWlsZWQiKTsKICAgICAgICByZXR1cm4gYWJpLmRlY29kZShyZXMsIChhZGRyZXNzKSk7CiAgICB9CgogICAgZnVuY3Rpb24gY2hhbmdlUHJveHlBZG1pbihhZGRyZXNzIHBheWFibGUgcHJveHksIGFkZHJlc3MgYWRtaW4pCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBvbmx5T3duZXIKICAgIHsKICAgICAgICBQcm94eShwcm94eSkuY2hhbmdlQWRtaW4oYWRtaW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZ3JhZGUoYWRkcmVzcyBwYXlhYmxlIHByb3h5LCBhZGRyZXNzIGltcGxlbWVudGF0aW9uKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgb25seU93bmVyCiAgICB7CiAgICAgICAgUHJveHkocHJveHkpLnVwZ3JhZGVUbyhpbXBsZW1lbnRhdGlvbik7CiAgICB9Cn0KCmxpYnJhcnkgU3RvcmFnZVNsb3QgewogICAgc3RydWN0IEFkZHJlc3NTbG90IHsKICAgICAgICBhZGRyZXNzIHZhbHVlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NTbG90KGJ5dGVzMzIgc2xvdCkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChBZGRyZXNzU2xvdCBzdG9yYWdlIHIpCiAgICB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICByLnNsb3QgOj0gc2xvdAogICAgICAgIH0KICAgIH0KfQoKY29udHJhY3QgVGVzdFNsb3QgewogICAgYnl0ZXMzMiBwdWJsaWMgY29uc3RhbnQgc2xvdCA9IGtlY2NhazI1NigiVEVTVF9TTE9UIik7CgogICAgZnVuY3Rpb24gZ2V0U2xvdCgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAoYWRkcmVzcykgewogICAgICAgIHJldHVybiBTdG9yYWdlU2xvdC5nZXRBZGRyZXNzU2xvdChzbG90KS52YWx1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiB3cml0ZVNsb3QoYWRkcmVzcyBfYWRkcikgZXh0ZXJuYWwgewogICAgICAgIFN0b3JhZ2VTbG90LmdldEFkZHJlc3NTbG90KHNsb3QpLnZhbHVlID0gX2FkZHI7CiAgICB9Cn0K"}],uA=`

        Example of upgradeable proxy contract. Never use this in production.

        This example shows

        • how to use delegatecall and return data when fallback is called.
        • @@ -3140,7 +3140,7 @@ After a mimimum waiting period, the transaction can be executed.

          StorageSlot.getAddressSlot(slot).value = _addr; } } -`,yy=({prev:s,next:a})=>i.jsx(u,{version:dy,title:Iy,description:Cy,html:uy,prev:s,next:a,codes:jy}),Ay="0.8.24",my="Write to Any Slot",by="Write to Any Slot",wy=[{fileName:"Slot.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmxpYnJhcnkgU3RvcmFnZVNsb3QgewogICAgLy8gV3JhcCBhZGRyZXNzIGluIGEgc3RydWN0IHNvIHRoYXQgaXQgY2FuIGJlIHBhc3NlZCBhcm91bmQgYXMgYSBzdG9yYWdlIHBvaW50ZXIKICAgIHN0cnVjdCBBZGRyZXNzU2xvdCB7CiAgICAgICAgYWRkcmVzcyB2YWx1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBZGRyZXNzU2xvdChieXRlczMyIHNsb3QpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoQWRkcmVzc1Nsb3Qgc3RvcmFnZSBwb2ludGVyKQogICAgewogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIEFkZHJlc3NTbG90IHN0b3JlZCBhdCBzbG90CiAgICAgICAgICAgIHBvaW50ZXIuc2xvdCA6PSBzbG90CiAgICAgICAgfQogICAgfQp9Cgpjb250cmFjdCBUZXN0U2xvdCB7CiAgICBieXRlczMyIHB1YmxpYyBjb25zdGFudCBURVNUX1NMT1QgPSBrZWNjYWsyNTYoIlRFU1RfU0xPVCIpOwoKICAgIGZ1bmN0aW9uIHdyaXRlKGFkZHJlc3MgX2FkZHIpIGV4dGVybmFsIHsKICAgICAgICBTdG9yYWdlU2xvdC5BZGRyZXNzU2xvdCBzdG9yYWdlIGRhdGEgPQogICAgICAgICAgICBTdG9yYWdlU2xvdC5nZXRBZGRyZXNzU2xvdChURVNUX1NMT1QpOwogICAgICAgIGRhdGEudmFsdWUgPSBfYWRkcjsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXQoKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKGFkZHJlc3MpIHsKICAgICAgICBTdG9yYWdlU2xvdC5BZGRyZXNzU2xvdCBzdG9yYWdlIGRhdGEgPQogICAgICAgICAgICBTdG9yYWdlU2xvdC5nZXRBZGRyZXNzU2xvdChURVNUX1NMT1QpOwogICAgICAgIHJldHVybiBkYXRhLnZhbHVlOwogICAgfQp9Cg=="}],ky=`

          Solidity storage is like an array of length 2^256. +`,AA=({prev:s,next:a})=>i.jsx(u,{version:dA,title:IA,description:CA,html:uA,prev:s,next:a,codes:jA}),yA="0.8.24",mA="Write to Any Slot",bA="Write to Any Slot",wA=[{fileName:"Slot.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmxpYnJhcnkgU3RvcmFnZVNsb3QgewogICAgLy8gV3JhcCBhZGRyZXNzIGluIGEgc3RydWN0IHNvIHRoYXQgaXQgY2FuIGJlIHBhc3NlZCBhcm91bmQgYXMgYSBzdG9yYWdlIHBvaW50ZXIKICAgIHN0cnVjdCBBZGRyZXNzU2xvdCB7CiAgICAgICAgYWRkcmVzcyB2YWx1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBZGRyZXNzU2xvdChieXRlczMyIHNsb3QpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoQWRkcmVzc1Nsb3Qgc3RvcmFnZSBwb2ludGVyKQogICAgewogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgLy8gR2V0IHRoZSBwb2ludGVyIHRvIEFkZHJlc3NTbG90IHN0b3JlZCBhdCBzbG90CiAgICAgICAgICAgIHBvaW50ZXIuc2xvdCA6PSBzbG90CiAgICAgICAgfQogICAgfQp9Cgpjb250cmFjdCBUZXN0U2xvdCB7CiAgICBieXRlczMyIHB1YmxpYyBjb25zdGFudCBURVNUX1NMT1QgPSBrZWNjYWsyNTYoIlRFU1RfU0xPVCIpOwoKICAgIGZ1bmN0aW9uIHdyaXRlKGFkZHJlc3MgX2FkZHIpIGV4dGVybmFsIHsKICAgICAgICBTdG9yYWdlU2xvdC5BZGRyZXNzU2xvdCBzdG9yYWdlIGRhdGEgPQogICAgICAgICAgICBTdG9yYWdlU2xvdC5nZXRBZGRyZXNzU2xvdChURVNUX1NMT1QpOwogICAgICAgIGRhdGEudmFsdWUgPSBfYWRkcjsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXQoKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKGFkZHJlc3MpIHsKICAgICAgICBTdG9yYWdlU2xvdC5BZGRyZXNzU2xvdCBzdG9yYWdlIGRhdGEgPQogICAgICAgICAgICBTdG9yYWdlU2xvdC5nZXRBZGRyZXNzU2xvdChURVNUX1NMT1QpOwogICAgICAgIHJldHVybiBkYXRhLnZhbHVlOwogICAgfQp9Cg=="}],kA=`

          Solidity storage is like an array of length 2^256. Each slot in the array can store 32 bytes.

          Order of declaration and the type of state variables define which slots it will use.

          However using assembly, you can write to any slot.

          @@ -3180,7 +3180,7 @@ Each slot in the array can store 32 bytes.

          return data.value; } } -`,Zy=({prev:s,next:a})=>i.jsx(u,{version:Ay,title:my,description:by,html:ky,prev:s,next:a,codes:wy}),Wy="0.8.24",Gy="Array",By="Learn about arrays in Solidity",fy=[{fileName:"Array.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFycmF5IHsKICAgIC8vIFNldmVyYWwgd2F5cyB0byBpbml0aWFsaXplIGFuIGFycmF5CiAgICB1aW50MjU2W10gcHVibGljIGFycjsKICAgIHVpbnQyNTZbXSBwdWJsaWMgYXJyMiA9IFsxLCAyLCAzXTsKICAgIC8vIEZpeGVkIHNpemVkIGFycmF5LCBhbGwgZWxlbWVudHMgaW5pdGlhbGl6ZSB0byAwCiAgICB1aW50MjU2WzEwXSBwdWJsaWMgbXlGaXhlZFNpemVBcnI7CgogICAgZnVuY3Rpb24gZ2V0KHVpbnQyNTYgaSkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhcnJbaV07CiAgICB9CgogICAgLy8gU29saWRpdHkgY2FuIHJldHVybiB0aGUgZW50aXJlIGFycmF5LgogICAgLy8gQnV0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGF2b2lkZWQgZm9yCiAgICAvLyBhcnJheXMgdGhhdCBjYW4gZ3JvdyBpbmRlZmluaXRlbHkgaW4gbGVuZ3RoLgogICAgZnVuY3Rpb24gZ2V0QXJyKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NltdIG1lbW9yeSkgewogICAgICAgIHJldHVybiBhcnI7CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaCh1aW50MjU2IGkpIHB1YmxpYyB7CiAgICAgICAgLy8gQXBwZW5kIHRvIGFycmF5CiAgICAgICAgLy8gVGhpcyB3aWxsIGluY3JlYXNlIHRoZSBhcnJheSBsZW5ndGggYnkgMS4KICAgICAgICBhcnIucHVzaChpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3AoKSBwdWJsaWMgewogICAgICAgIC8vIFJlbW92ZSBsYXN0IGVsZW1lbnQgZnJvbSBhcnJheQogICAgICAgIC8vIFRoaXMgd2lsbCBkZWNyZWFzZSB0aGUgYXJyYXkgbGVuZ3RoIGJ5IDEKICAgICAgICBhcnIucG9wKCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TGVuZ3RoKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhcnIubGVuZ3RoOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZSh1aW50MjU2IGluZGV4KSBwdWJsaWMgewogICAgICAgIC8vIERlbGV0ZSBkb2VzIG5vdCBjaGFuZ2UgdGhlIGFycmF5IGxlbmd0aC4KICAgICAgICAvLyBJdCByZXNldHMgdGhlIHZhbHVlIGF0IGluZGV4IHRvIGl0J3MgZGVmYXVsdCB2YWx1ZSwKICAgICAgICAvLyBpbiB0aGlzIGNhc2UgMAogICAgICAgIGRlbGV0ZSBhcnJbaW5kZXhdOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4YW1wbGVzKCkgZXh0ZXJuYWwgewogICAgICAgIC8vIGNyZWF0ZSBhcnJheSBpbiBtZW1vcnksIG9ubHkgZml4ZWQgc2l6ZSBjYW4gYmUgY3JlYXRlZAogICAgICAgIHVpbnQyNTZbXSBtZW1vcnkgYSA9IG5ldyB1aW50MjU2W10oNSk7CiAgICB9Cn0K"},{fileName:"ArrayRemoveByShifting.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFycmF5UmVtb3ZlQnlTaGlmdGluZyB7CiAgICAvLyBbMSwgMiwgM10gLS0gcmVtb3ZlKDEpIC0tPiBbMSwgMywgM10gLS0+IFsxLCAzXQogICAgLy8gWzEsIDIsIDMsIDQsIDUsIDZdIC0tIHJlbW92ZSgyKSAtLT4gWzEsIDIsIDQsIDUsIDYsIDZdIC0tPiBbMSwgMiwgNCwgNSwgNl0KICAgIC8vIFsxLCAyLCAzLCA0LCA1LCA2XSAtLSByZW1vdmUoMCkgLS0+IFsyLCAzLCA0LCA1LCA2LCA2XSAtLT4gWzIsIDMsIDQsIDUsIDZdCiAgICAvLyBbMV0gLS0gcmVtb3ZlKDApIC0tPiBbMV0gLS0+IFtdCgogICAgdWludDI1NltdIHB1YmxpYyBhcnI7CgogICAgZnVuY3Rpb24gcmVtb3ZlKHVpbnQyNTYgX2luZGV4KSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUoX2luZGV4IDwgYXJyLmxlbmd0aCwgImluZGV4IG91dCBvZiBib3VuZCIpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IF9pbmRleDsgaSA8IGFyci5sZW5ndGggLSAxOyBpKyspIHsKICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyAxXTsKICAgICAgICB9CiAgICAgICAgYXJyLnBvcCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3QoKSBleHRlcm5hbCB7CiAgICAgICAgYXJyID0gWzEsIDIsIDMsIDQsIDVdOwogICAgICAgIHJlbW92ZSgyKTsKICAgICAgICAvLyBbMSwgMiwgNCwgNV0KICAgICAgICBhc3NlcnQoYXJyWzBdID09IDEpOwogICAgICAgIGFzc2VydChhcnJbMV0gPT0gMik7CiAgICAgICAgYXNzZXJ0KGFyclsyXSA9PSA0KTsKICAgICAgICBhc3NlcnQoYXJyWzNdID09IDUpOwogICAgICAgIGFzc2VydChhcnIubGVuZ3RoID09IDQpOwoKICAgICAgICBhcnIgPSBbMV07CiAgICAgICAgcmVtb3ZlKDApOwogICAgICAgIC8vIFtdCiAgICAgICAgYXNzZXJ0KGFyci5sZW5ndGggPT0gMCk7CiAgICB9Cn0K"},{fileName:"ArrayReplaceFromEnd.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFycmF5UmVwbGFjZUZyb21FbmQgewogICAgdWludDI1NltdIHB1YmxpYyBhcnI7CgogICAgLy8gRGVsZXRpbmcgYW4gZWxlbWVudCBjcmVhdGVzIGEgZ2FwIGluIHRoZSBhcnJheS4KICAgIC8vIE9uZSB0cmljayB0byBrZWVwIHRoZSBhcnJheSBjb21wYWN0IGlzIHRvCiAgICAvLyBtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgaW50byB0aGUgcGxhY2UgdG8gZGVsZXRlLgogICAgZnVuY3Rpb24gcmVtb3ZlKHVpbnQyNTYgaW5kZXgpIHB1YmxpYyB7CiAgICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IGludG8gdGhlIHBsYWNlIHRvIGRlbGV0ZQogICAgICAgIGFycltpbmRleF0gPSBhcnJbYXJyLmxlbmd0aCAtIDFdOwogICAgICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBlbGVtZW50CiAgICAgICAgYXJyLnBvcCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3QoKSBwdWJsaWMgewogICAgICAgIGFyciA9IFsxLCAyLCAzLCA0XTsKCiAgICAgICAgcmVtb3ZlKDEpOwogICAgICAgIC8vIFsxLCA0LCAzXQogICAgICAgIGFzc2VydChhcnIubGVuZ3RoID09IDMpOwogICAgICAgIGFzc2VydChhcnJbMF0gPT0gMSk7CiAgICAgICAgYXNzZXJ0KGFyclsxXSA9PSA0KTsKICAgICAgICBhc3NlcnQoYXJyWzJdID09IDMpOwoKICAgICAgICByZW1vdmUoMik7CiAgICAgICAgLy8gWzEsIDRdCiAgICAgICAgYXNzZXJ0KGFyci5sZW5ndGggPT0gMik7CiAgICAgICAgYXNzZXJ0KGFyclswXSA9PSAxKTsKICAgICAgICBhc3NlcnQoYXJyWzFdID09IDQpOwogICAgfQp9Cg=="}],Vy=`

          Array can have a compile-time fixed size or a dynamic size.

          +`,ZA=({prev:s,next:a})=>i.jsx(u,{version:yA,title:mA,description:bA,html:kA,prev:s,next:a,codes:wA}),WA="0.8.24",GA="Array",BA="Learn about arrays in Solidity",VA=[{fileName:"Array.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFycmF5IHsKICAgIC8vIFNldmVyYWwgd2F5cyB0byBpbml0aWFsaXplIGFuIGFycmF5CiAgICB1aW50MjU2W10gcHVibGljIGFycjsKICAgIHVpbnQyNTZbXSBwdWJsaWMgYXJyMiA9IFsxLCAyLCAzXTsKICAgIC8vIEZpeGVkIHNpemVkIGFycmF5LCBhbGwgZWxlbWVudHMgaW5pdGlhbGl6ZSB0byAwCiAgICB1aW50MjU2WzEwXSBwdWJsaWMgbXlGaXhlZFNpemVBcnI7CgogICAgZnVuY3Rpb24gZ2V0KHVpbnQyNTYgaSkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhcnJbaV07CiAgICB9CgogICAgLy8gU29saWRpdHkgY2FuIHJldHVybiB0aGUgZW50aXJlIGFycmF5LgogICAgLy8gQnV0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGF2b2lkZWQgZm9yCiAgICAvLyBhcnJheXMgdGhhdCBjYW4gZ3JvdyBpbmRlZmluaXRlbHkgaW4gbGVuZ3RoLgogICAgZnVuY3Rpb24gZ2V0QXJyKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NltdIG1lbW9yeSkgewogICAgICAgIHJldHVybiBhcnI7CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaCh1aW50MjU2IGkpIHB1YmxpYyB7CiAgICAgICAgLy8gQXBwZW5kIHRvIGFycmF5CiAgICAgICAgLy8gVGhpcyB3aWxsIGluY3JlYXNlIHRoZSBhcnJheSBsZW5ndGggYnkgMS4KICAgICAgICBhcnIucHVzaChpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3AoKSBwdWJsaWMgewogICAgICAgIC8vIFJlbW92ZSBsYXN0IGVsZW1lbnQgZnJvbSBhcnJheQogICAgICAgIC8vIFRoaXMgd2lsbCBkZWNyZWFzZSB0aGUgYXJyYXkgbGVuZ3RoIGJ5IDEKICAgICAgICBhcnIucG9wKCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TGVuZ3RoKCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBhcnIubGVuZ3RoOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZSh1aW50MjU2IGluZGV4KSBwdWJsaWMgewogICAgICAgIC8vIERlbGV0ZSBkb2VzIG5vdCBjaGFuZ2UgdGhlIGFycmF5IGxlbmd0aC4KICAgICAgICAvLyBJdCByZXNldHMgdGhlIHZhbHVlIGF0IGluZGV4IHRvIGl0J3MgZGVmYXVsdCB2YWx1ZSwKICAgICAgICAvLyBpbiB0aGlzIGNhc2UgMAogICAgICAgIGRlbGV0ZSBhcnJbaW5kZXhdOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4YW1wbGVzKCkgZXh0ZXJuYWwgewogICAgICAgIC8vIGNyZWF0ZSBhcnJheSBpbiBtZW1vcnksIG9ubHkgZml4ZWQgc2l6ZSBjYW4gYmUgY3JlYXRlZAogICAgICAgIHVpbnQyNTZbXSBtZW1vcnkgYSA9IG5ldyB1aW50MjU2W10oNSk7CiAgICB9Cn0K"},{fileName:"ArrayRemoveByShifting.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFycmF5UmVtb3ZlQnlTaGlmdGluZyB7CiAgICAvLyBbMSwgMiwgM10gLS0gcmVtb3ZlKDEpIC0tPiBbMSwgMywgM10gLS0+IFsxLCAzXQogICAgLy8gWzEsIDIsIDMsIDQsIDUsIDZdIC0tIHJlbW92ZSgyKSAtLT4gWzEsIDIsIDQsIDUsIDYsIDZdIC0tPiBbMSwgMiwgNCwgNSwgNl0KICAgIC8vIFsxLCAyLCAzLCA0LCA1LCA2XSAtLSByZW1vdmUoMCkgLS0+IFsyLCAzLCA0LCA1LCA2LCA2XSAtLT4gWzIsIDMsIDQsIDUsIDZdCiAgICAvLyBbMV0gLS0gcmVtb3ZlKDApIC0tPiBbMV0gLS0+IFtdCgogICAgdWludDI1NltdIHB1YmxpYyBhcnI7CgogICAgZnVuY3Rpb24gcmVtb3ZlKHVpbnQyNTYgX2luZGV4KSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUoX2luZGV4IDwgYXJyLmxlbmd0aCwgImluZGV4IG91dCBvZiBib3VuZCIpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IF9pbmRleDsgaSA8IGFyci5sZW5ndGggLSAxOyBpKyspIHsKICAgICAgICAgICAgYXJyW2ldID0gYXJyW2kgKyAxXTsKICAgICAgICB9CiAgICAgICAgYXJyLnBvcCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3QoKSBleHRlcm5hbCB7CiAgICAgICAgYXJyID0gWzEsIDIsIDMsIDQsIDVdOwogICAgICAgIHJlbW92ZSgyKTsKICAgICAgICAvLyBbMSwgMiwgNCwgNV0KICAgICAgICBhc3NlcnQoYXJyWzBdID09IDEpOwogICAgICAgIGFzc2VydChhcnJbMV0gPT0gMik7CiAgICAgICAgYXNzZXJ0KGFyclsyXSA9PSA0KTsKICAgICAgICBhc3NlcnQoYXJyWzNdID09IDUpOwogICAgICAgIGFzc2VydChhcnIubGVuZ3RoID09IDQpOwoKICAgICAgICBhcnIgPSBbMV07CiAgICAgICAgcmVtb3ZlKDApOwogICAgICAgIC8vIFtdCiAgICAgICAgYXNzZXJ0KGFyci5sZW5ndGggPT0gMCk7CiAgICB9Cn0K"},{fileName:"ArrayReplaceFromEnd.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFycmF5UmVwbGFjZUZyb21FbmQgewogICAgdWludDI1NltdIHB1YmxpYyBhcnI7CgogICAgLy8gRGVsZXRpbmcgYW4gZWxlbWVudCBjcmVhdGVzIGEgZ2FwIGluIHRoZSBhcnJheS4KICAgIC8vIE9uZSB0cmljayB0byBrZWVwIHRoZSBhcnJheSBjb21wYWN0IGlzIHRvCiAgICAvLyBtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgaW50byB0aGUgcGxhY2UgdG8gZGVsZXRlLgogICAgZnVuY3Rpb24gcmVtb3ZlKHVpbnQyNTYgaW5kZXgpIHB1YmxpYyB7CiAgICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IGludG8gdGhlIHBsYWNlIHRvIGRlbGV0ZQogICAgICAgIGFycltpbmRleF0gPSBhcnJbYXJyLmxlbmd0aCAtIDFdOwogICAgICAgIC8vIFJlbW92ZSB0aGUgbGFzdCBlbGVtZW50CiAgICAgICAgYXJyLnBvcCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3QoKSBwdWJsaWMgewogICAgICAgIGFyciA9IFsxLCAyLCAzLCA0XTsKCiAgICAgICAgcmVtb3ZlKDEpOwogICAgICAgIC8vIFsxLCA0LCAzXQogICAgICAgIGFzc2VydChhcnIubGVuZ3RoID09IDMpOwogICAgICAgIGFzc2VydChhcnJbMF0gPT0gMSk7CiAgICAgICAgYXNzZXJ0KGFyclsxXSA9PSA0KTsKICAgICAgICBhc3NlcnQoYXJyWzJdID09IDMpOwoKICAgICAgICByZW1vdmUoMik7CiAgICAgICAgLy8gWzEsIDRdCiAgICAgICAgYXNzZXJ0KGFyci5sZW5ndGggPT0gMik7CiAgICAgICAgYXNzZXJ0KGFyclswXSA9PSAxKTsKICAgICAgICBhc3NlcnQoYXJyWzFdID09IDQpOwogICAgfQp9Cg=="}],fA=`

          Array can have a compile-time fixed size or a dynamic size.

          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
           
          @@ -3302,7 +3302,7 @@ Each slot in the array can store 32 bytes.

          assert(arr[1] == 4); } } -
          `,Yy=({prev:s,next:a})=>i.jsx(u,{version:Wy,title:Gy,description:By,html:Vy,prev:s,next:a,codes:fy}),Ry="0.8.24",vy="Assembly Error",Xy="Example of error in assembly",Ny=[{fileName:"AssemblyError.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5RXJyb3IgewogICAgZnVuY3Rpb24geXVsX3JldmVydCh1aW50MjU2IHgpIHB1YmxpYyBwdXJlIHsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIC8vIHJldmVydChwLCBzKSAtIGVuZCBleGVjdXRpb24KICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgcmV2ZXJ0IHN0YXRlIGNoYW5nZXMKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgbWVtW3DigKYocCtzKSkKICAgICAgICAgICAgaWYgZ3QoeCwgMTApIHsgcmV2ZXJ0KDAsIDApIH0KICAgICAgICB9CiAgICB9Cn0K"}],Hy=`

          Example of error in assembly

          +`,YA=({prev:s,next:a})=>i.jsx(u,{version:WA,title:GA,description:BA,html:fA,prev:s,next:a,codes:VA}),RA="0.8.24",XA="Assembly Error",vA="Example of error in assembly",NA=[{fileName:"AssemblyError.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5RXJyb3IgewogICAgZnVuY3Rpb24geXVsX3JldmVydCh1aW50MjU2IHgpIHB1YmxpYyBwdXJlIHsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIC8vIHJldmVydChwLCBzKSAtIGVuZCBleGVjdXRpb24KICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgcmV2ZXJ0IHN0YXRlIGNoYW5nZXMKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgbWVtW3DigKYocCtzKSkKICAgICAgICAgICAgaWYgZ3QoeCwgMTApIHsgcmV2ZXJ0KDAsIDApIH0KICAgICAgICB9CiAgICB9Cn0K"}],HA=`

          Example of error in assembly

          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
           
          @@ -3316,7 +3316,7 @@ Each slot in the array can store 32 bytes.

          } } } -
          `,Fy=({prev:s,next:a})=>i.jsx(u,{version:Ry,title:vy,description:Xy,html:Hy,prev:s,next:a,codes:Ny}),Ky="0.8.24",Sy="Assembly Conditional Statements",My="Example of conditional statements in assembly",xy=[{fileName:"AssemblyIf.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5SWYgewogICAgZnVuY3Rpb24geXVsX2lmKHVpbnQyNTYgeCkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB6KSB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICAvLyBpZiBjb25kaXRpb24gPSAxIHsgY29kZSB9CiAgICAgICAgICAgIC8vIG5vIGVsc2UKICAgICAgICAgICAgLy8gaWYgMCB7IHogOj0gOTkgfQogICAgICAgICAgICAvLyBpZiAxIHsgeiA6PSA5OSB9CiAgICAgICAgICAgIGlmIGx0KHgsIDEwKSB7IHogOj0gOTkgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB5dWxfc3dpdGNoKHVpbnQyNTYgeCkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB6KSB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzd2l0Y2ggeAogICAgICAgICAgICBjYXNlIDEgeyB6IDo9IDEwIH0KICAgICAgICAgICAgY2FzZSAyIHsgeiA6PSAyMCB9CiAgICAgICAgICAgIGRlZmF1bHQgeyB6IDo9IDAgfQogICAgICAgIH0KICAgIH0KfQo="}],Jy=`

          Example of conditional statements in assembly

          +`,FA=({prev:s,next:a})=>i.jsx(u,{version:RA,title:XA,description:vA,html:HA,prev:s,next:a,codes:NA}),KA="0.8.24",SA="Assembly Conditional Statements",MA="Example of conditional statements in assembly",xA=[{fileName:"AssemblyIf.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5SWYgewogICAgZnVuY3Rpb24geXVsX2lmKHVpbnQyNTYgeCkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB6KSB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICAvLyBpZiBjb25kaXRpb24gPSAxIHsgY29kZSB9CiAgICAgICAgICAgIC8vIG5vIGVsc2UKICAgICAgICAgICAgLy8gaWYgMCB7IHogOj0gOTkgfQogICAgICAgICAgICAvLyBpZiAxIHsgeiA6PSA5OSB9CiAgICAgICAgICAgIGlmIGx0KHgsIDEwKSB7IHogOj0gOTkgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB5dWxfc3dpdGNoKHVpbnQyNTYgeCkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB6KSB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzd2l0Y2ggeAogICAgICAgICAgICBjYXNlIDEgeyB6IDo9IDEwIH0KICAgICAgICAgICAgY2FzZSAyIHsgeiA6PSAyMCB9CiAgICAgICAgICAgIGRlZmF1bHQgeyB6IDo9IDAgfQogICAgICAgIH0KICAgIH0KfQo="}],JA=`

          Example of conditional statements in assembly

          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
           
          @@ -3340,7 +3340,7 @@ Each slot in the array can store 32 bytes.

          } } } -
          `,zy=({prev:s,next:a})=>i.jsx(u,{version:Ky,title:Sy,description:My,html:Jy,prev:s,next:a,codes:xy}),Ey="0.8.24",Uy="Assembly Loop",Ty="Example of loop in assembly",Qy=[{fileName:"AssemblyLoop.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5TG9vcCB7CiAgICBmdW5jdGlvbiB5dWxfZm9yX2xvb3AoKSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2IHopIHsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIGZvciB7IGxldCBpIDo9IDAgfSBsdChpLCAxMCkgeyBpIDo9IGFkZChpLCAxKSB9IHsgeiA6PSBhZGQoeiwgMSkgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB5dWxfd2hpbGVfbG9vcCgpIHB1YmxpYyBwdXJlIHJldHVybnMgKHVpbnQyNTYgeikgewogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgbGV0IGkgOj0gMAogICAgICAgICAgICBmb3Ige30gbHQoaSwgNSkge30gewogICAgICAgICAgICAgICAgaSA6PSBhZGQoaSwgMSkKICAgICAgICAgICAgICAgIHogOj0gYWRkKHosIDEpCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K"}],Dy=`

          Example of loop in assembly

          +`,zA=({prev:s,next:a})=>i.jsx(u,{version:KA,title:SA,description:MA,html:JA,prev:s,next:a,codes:xA}),EA="0.8.24",UA="Assembly Loop",TA="Example of loop in assembly",QA=[{fileName:"AssemblyLoop.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5TG9vcCB7CiAgICBmdW5jdGlvbiB5dWxfZm9yX2xvb3AoKSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2IHopIHsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIGZvciB7IGxldCBpIDo9IDAgfSBsdChpLCAxMCkgeyBpIDo9IGFkZChpLCAxKSB9IHsgeiA6PSBhZGQoeiwgMSkgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB5dWxfd2hpbGVfbG9vcCgpIHB1YmxpYyBwdXJlIHJldHVybnMgKHVpbnQyNTYgeikgewogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgbGV0IGkgOj0gMAogICAgICAgICAgICBmb3Ige30gbHQoaSwgNSkge30gewogICAgICAgICAgICAgICAgaSA6PSBhZGQoaSwgMSkKICAgICAgICAgICAgICAgIHogOj0gYWRkKHosIDEpCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0K"}],DA=`

          Example of loop in assembly

          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
           
          @@ -3361,7 +3361,7 @@ Each slot in the array can store 32 bytes.

          } } } -
          `,Ly=({prev:s,next:a})=>i.jsx(u,{version:Ey,title:Uy,description:Ty,html:Dy,prev:s,next:a,codes:Qy}),_y="0.8.24",Oy="Assembly Math",Py="Example of math in assembly",$y=[{fileName:"AssemblyMath.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5TWF0aCB7CiAgICBmdW5jdGlvbiB5dWxfYWRkKHVpbnQyNTYgeCwgdWludDI1NiB5KSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2IHopIHsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIHogOj0gYWRkKHgsIHkpCiAgICAgICAgICAgIGlmIGx0KHosIHgpIHsgcmV2ZXJ0KDAsIDApIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24geXVsX211bCh1aW50MjU2IHgsIHVpbnQyNTYgeSkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB6KSB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzd2l0Y2ggeAogICAgICAgICAgICBjYXNlIDAgeyB6IDo9IDAgfQogICAgICAgICAgICBkZWZhdWx0IHsKICAgICAgICAgICAgICAgIHogOj0gbXVsKHgsIHkpCiAgICAgICAgICAgICAgICBpZiBpc3plcm8oZXEoZGl2KHosIHgpLCB5KSkgeyByZXZlcnQoMCwgMCkgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIFJvdW5kIHRvIG5lYXJlc3QgbXVsdGlwbGUgb2YgYgogICAgZnVuY3Rpb24geXVsX2ZpeGVkX3BvaW50X3JvdW5kKHVpbnQyNTYgeCwgdWludDI1NiBiKQogICAgICAgIHB1YmxpYwogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2IHopCiAgICB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICAvLyBiID0gMTAwCiAgICAgICAgICAgIC8vIHggPSA5MAogICAgICAgICAgICAvLyB6ID0gOTAgLyAxMDAgKiAxMDAgPSAwLCB3YW50IHogPSAxMDAKICAgICAgICAgICAgLy8geiA6PSBtdWwoZGl2KHgsIGIpLCBiKQoKICAgICAgICAgICAgbGV0IGhhbGYgOj0gZGl2KGIsIDIpCiAgICAgICAgICAgIHogOj0gYWRkKHgsIGhhbGYpCiAgICAgICAgICAgIHogOj0gbXVsKGRpdih6LCBiKSwgYikKICAgICAgICAgICAgLy8geCA9IDkwCiAgICAgICAgICAgIC8vIGhhbGYgPSA1MAogICAgICAgICAgICAvLyB6ID0gOTAgKyA1MCA9IDE0MAogICAgICAgICAgICAvLyB6ID0gMTQwIC8gMTAwICogMTAwID0gMTAwCiAgICAgICAgfQogICAgfQp9Cg=="}],qy=`

          Example of math in assembly

          +`,LA=({prev:s,next:a})=>i.jsx(u,{version:EA,title:UA,description:TA,html:DA,prev:s,next:a,codes:QA}),_A="0.8.24",OA="Assembly Math",PA="Example of math in assembly",$A=[{fileName:"AssemblyMath.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5TWF0aCB7CiAgICBmdW5jdGlvbiB5dWxfYWRkKHVpbnQyNTYgeCwgdWludDI1NiB5KSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2IHopIHsKICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIHogOj0gYWRkKHgsIHkpCiAgICAgICAgICAgIGlmIGx0KHosIHgpIHsgcmV2ZXJ0KDAsIDApIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24geXVsX211bCh1aW50MjU2IHgsIHVpbnQyNTYgeSkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB6KSB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBzd2l0Y2ggeAogICAgICAgICAgICBjYXNlIDAgeyB6IDo9IDAgfQogICAgICAgICAgICBkZWZhdWx0IHsKICAgICAgICAgICAgICAgIHogOj0gbXVsKHgsIHkpCiAgICAgICAgICAgICAgICBpZiBpc3plcm8oZXEoZGl2KHosIHgpLCB5KSkgeyByZXZlcnQoMCwgMCkgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIFJvdW5kIHRvIG5lYXJlc3QgbXVsdGlwbGUgb2YgYgogICAgZnVuY3Rpb24geXVsX2ZpeGVkX3BvaW50X3JvdW5kKHVpbnQyNTYgeCwgdWludDI1NiBiKQogICAgICAgIHB1YmxpYwogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2IHopCiAgICB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICAvLyBiID0gMTAwCiAgICAgICAgICAgIC8vIHggPSA5MAogICAgICAgICAgICAvLyB6ID0gOTAgLyAxMDAgKiAxMDAgPSAwLCB3YW50IHogPSAxMDAKICAgICAgICAgICAgLy8geiA6PSBtdWwoZGl2KHgsIGIpLCBiKQoKICAgICAgICAgICAgbGV0IGhhbGYgOj0gZGl2KGIsIDIpCiAgICAgICAgICAgIHogOj0gYWRkKHgsIGhhbGYpCiAgICAgICAgICAgIHogOj0gbXVsKGRpdih6LCBiKSwgYikKICAgICAgICAgICAgLy8geCA9IDkwCiAgICAgICAgICAgIC8vIGhhbGYgPSA1MAogICAgICAgICAgICAvLyB6ID0gOTAgKyA1MCA9IDE0MAogICAgICAgICAgICAvLyB6ID0gMTQwIC8gMTAwICogMTAwID0gMTAwCiAgICAgICAgfQogICAgfQp9Cg=="}],qA=`

          Example of math in assembly

          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
           
          @@ -3406,7 +3406,7 @@ Each slot in the array can store 32 bytes.

          } } } -
          `,sA=({prev:s,next:a})=>i.jsx(u,{version:_y,title:Oy,description:Py,html:qy,prev:s,next:a,codes:$y}),aA="0.8.24",nA="Assembly Variable",lA="Example of how to declare variable inside assembly",pA=[{fileName:"AssemblyVariable.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5VmFyaWFibGUgewogICAgZnVuY3Rpb24geXVsX2xldCgpIHB1YmxpYyBwdXJlIHJldHVybnMgKHVpbnQyNTYgeikgewogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgLy8gTGFuZ3VhZ2UgdXNlZCBmb3IgYXNzZW1ibHkgaXMgY2FsbGVkIFl1bAogICAgICAgICAgICAvLyBMb2NhbCB2YXJpYWJsZXMKICAgICAgICAgICAgbGV0IHggOj0gMTIzCiAgICAgICAgICAgIHogOj0gNDU2CiAgICAgICAgfQogICAgfQp9Cg=="}],eA=`

          Example of how to declare variables inside assembly

          +`,sy=({prev:s,next:a})=>i.jsx(u,{version:_A,title:OA,description:PA,html:qA,prev:s,next:a,codes:$A}),ay="0.8.24",ny="Assembly Variable",ly="Example of how to declare variable inside assembly",py=[{fileName:"AssemblyVariable.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEFzc2VtYmx5VmFyaWFibGUgewogICAgZnVuY3Rpb24geXVsX2xldCgpIHB1YmxpYyBwdXJlIHJldHVybnMgKHVpbnQyNTYgeikgewogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgLy8gTGFuZ3VhZ2UgdXNlZCBmb3IgYXNzZW1ibHkgaXMgY2FsbGVkIFl1bAogICAgICAgICAgICAvLyBMb2NhbCB2YXJpYWJsZXMKICAgICAgICAgICAgbGV0IHggOj0gMTIzCiAgICAgICAgICAgIHogOj0gNDU2CiAgICAgICAgfQogICAgfQp9Cg=="}],ey=`

          Example of how to declare variables inside assembly

          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
           
          @@ -3420,7 +3420,7 @@ Each slot in the array can store 32 bytes.

          } } } -
          `,cA=({prev:s,next:a})=>i.jsx(u,{version:aA,title:nA,description:lA,html:eA,prev:s,next:a,codes:pA}),tA="0.8.24",oA="Bitwise Operators",rA="Learn about bitwise operators in Solidity",iA=[{fileName:"Bitwise.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEJpdHdpc2VPcHMgewogICAgLy8geCAgICAgPSAxMTEwID0gOCArIDQgKyAyICsgMCA9IDE0CiAgICAvLyB5ICAgICA9IDEwMTEgPSA4ICsgMCArIDIgKyAxID0gMTEKICAgIC8vIHggJiB5ID0gMTAxMCA9IDggKyAwICsgMiArIDAgPSAxMAogICAgZnVuY3Rpb24gYW5kKHVpbnQyNTYgeCwgdWludDI1NiB5KSBleHRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4geCAmIHk7CiAgICB9CgogICAgLy8geCAgICAgPSAxMTAwID0gOCArIDQgKyAwICsgMCA9IDEyCiAgICAvLyB5ICAgICA9IDEwMDEgPSA4ICsgMCArIDAgKyAxID0gOQogICAgLy8geCB8IHkgPSAxMTAxID0gOCArIDQgKyAwICsgMSA9IDEzCiAgICBmdW5jdGlvbiBvcih1aW50MjU2IHgsIHVpbnQyNTYgeSkgZXh0ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIHggfCB5OwogICAgfQoKICAgIC8vIHggICAgID0gMTEwMCA9IDggKyA0ICsgMCArIDAgPSAxMgogICAgLy8geSAgICAgPSAwMTAxID0gMCArIDQgKyAwICsgMSA9IDUKICAgIC8vIHggXiB5ID0gMTAwMSA9IDggKyAwICsgMCArIDEgPSA5CiAgICBmdW5jdGlvbiB4b3IodWludDI1NiB4LCB1aW50MjU2IHkpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiB4IF4geTsKICAgIH0KCiAgICAvLyB4ICA9IDAwMDAxMTAwID0gICAwICsgIDAgKyAgMCArICAwICsgOCArIDQgKyAwICsgMCA9IDEyCiAgICAvLyB+eCA9IDExMTEwMDExID0gMTI4ICsgNjQgKyAzMiArIDE2ICsgMCArIDAgKyAyICsgMSA9IDI0MwogICAgZnVuY3Rpb24gbm90KHVpbnQ4IHgpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAodWludDgpIHsKICAgICAgICByZXR1cm4gfng7CiAgICB9CgogICAgLy8gMSA8PCAwID0gMDAwMSAtLT4gMDAwMSA9IDEKICAgIC8vIDEgPDwgMSA9IDAwMDEgLS0+IDAwMTAgPSAyCiAgICAvLyAxIDw8IDIgPSAwMDAxIC0tPiAwMTAwID0gNAogICAgLy8gMSA8PCAzID0gMDAwMSAtLT4gMTAwMCA9IDgKICAgIC8vIDMgPDwgMiA9IDAwMTEgLS0+IDExMDAgPSAxMgogICAgZnVuY3Rpb24gc2hpZnRMZWZ0KHVpbnQyNTYgeCwgdWludDI1NiBiaXRzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgcmV0dXJuIHggPDwgYml0czsKICAgIH0KCiAgICAvLyA4ICA+PiAwID0gMTAwMCAtLT4gMTAwMCA9IDgKICAgIC8vIDggID4+IDEgPSAxMDAwIC0tPiAwMTAwID0gNAogICAgLy8gOCAgPj4gMiA9IDEwMDAgLS0+IDAwMTAgPSAyCiAgICAvLyA4ICA+PiAzID0gMTAwMCAtLT4gMDAwMSA9IDEKICAgIC8vIDggID4+IDQgPSAxMDAwIC0tPiAwMDAwID0gMAogICAgLy8gMTIgPj4gMSA9IDExMDAgLS0+IDAxMTAgPSA2CiAgICBmdW5jdGlvbiBzaGlmdFJpZ2h0KHVpbnQyNTYgeCwgdWludDI1NiBiaXRzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgcmV0dXJuIHggPj4gYml0czsKICAgIH0KCiAgICAvLyBHZXQgbGFzdCBuIGJpdHMgZnJvbSB4CiAgICBmdW5jdGlvbiBnZXRMYXN0TkJpdHModWludDI1NiB4LCB1aW50MjU2IG4pCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAodWludDI1NikKICAgIHsKICAgICAgICAvLyBFeGFtcGxlLCBsYXN0IDMgYml0cwogICAgICAgIC8vIHggICAgICAgID0gMTEwMSA9IDEzCiAgICAgICAgLy8gbWFzayAgICAgPSAwMTExID0gNwogICAgICAgIC8vIHggJiBtYXNrID0gMDEwMSA9IDUKICAgICAgICB1aW50MjU2IG1hc2sgPSAoMSA8PCBuKSAtIDE7CiAgICAgICAgcmV0dXJuIHggJiBtYXNrOwogICAgfQoKICAgIC8vIEdldCBsYXN0IG4gYml0cyBmcm9tIHggdXNpbmcgbW9kIG9wZXJhdG9yCiAgICBmdW5jdGlvbiBnZXRMYXN0TkJpdHNVc2luZ01vZCh1aW50MjU2IHgsIHVpbnQyNTYgbikKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2KQogICAgewogICAgICAgIC8vIDEgPDwgbiA9IDIgKiogbgogICAgICAgIHJldHVybiB4ICUgKDEgPDwgbik7CiAgICB9CgogICAgLy8gR2V0IHBvc2l0aW9uIG9mIG1vc3Qgc2lnbmlmaWNhbnQgYml0CiAgICAvLyB4ID0gMTEwMCA9IDEyLCBtb3N0IHNpZ25pZmljYW50IGJpdCA9IDEwMDAsIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gMwogICAgZnVuY3Rpb24gbW9zdFNpZ25pZmljYW50Qml0KHVpbnQyNTYgeCkgZXh0ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgdWludDI1NiBpID0gMDsKICAgICAgICB3aGlsZSAoKHggPj49IDEpID4gMCkgewogICAgICAgICAgICArK2k7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAgfQoKICAgIC8vIEdldCBmaXJzdCBuIGJpdHMgZnJvbSB4CiAgICAvLyBsZW4gPSBsZW5ndGggb2YgYml0cyBpbiB4ID0gcG9zaXRpb24gb2YgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgeCwgKyAxCiAgICBmdW5jdGlvbiBnZXRGaXJzdE5CaXRzKHVpbnQyNTYgeCwgdWludDI1NiBuLCB1aW50MjU2IGxlbikKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2KQogICAgewogICAgICAgIC8vIEV4YW1wbGUKICAgICAgICAvLyB4ICAgICAgICA9IDExMTAgPSAxNCwgbiA9IDIsIGxlbiA9IDQKICAgICAgICAvLyBtYXNrICAgICA9IDExMDAgPSAxMgogICAgICAgIC8vIHggJiBtYXNrID0gMTEwMCA9IDEyCiAgICAgICAgdWludDI1NiBtYXNrID0gKCgxIDw8IG4pIC0gMSkgPDwgKGxlbiAtIG4pOwogICAgICAgIHJldHVybiB4ICYgbWFzazsKICAgIH0KfQo="},{fileName:"MostSignificantBitAssembly.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE1vc3RTaWduaWZpY2FudEJpdEFzc2VtYmx5IHsKICAgIGZ1bmN0aW9uIG1vc3RTaWduaWZpY2FudEJpdCh1aW50MjU2IHgpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAodWludDI1NiBtc2IpCiAgICB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBsZXQgZiA6PSBzaGwoNywgZ3QoeCwgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRikpCiAgICAgICAgICAgIHggOj0gc2hyKGYsIHgpCiAgICAgICAgICAgIC8vIG9yIGNhbiBiZSByZXBsYWNlZCB3aXRoIGFkZAogICAgICAgICAgICBtc2IgOj0gb3IobXNiLCBmKQogICAgICAgIH0KICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIGxldCBmIDo9IHNobCg2LCBndCh4LCAweEZGRkZGRkZGRkZGRkZGRkYpKQogICAgICAgICAgICB4IDo9IHNocihmLCB4KQogICAgICAgICAgICBtc2IgOj0gb3IobXNiLCBmKQogICAgICAgIH0KICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIGxldCBmIDo9IHNobCg1LCBndCh4LCAweEZGRkZGRkZGKSkKICAgICAgICAgICAgeCA6PSBzaHIoZiwgeCkKICAgICAgICAgICAgbXNiIDo9IG9yKG1zYiwgZikKICAgICAgICB9CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBsZXQgZiA6PSBzaGwoNCwgZ3QoeCwgMHhGRkZGKSkKICAgICAgICAgICAgeCA6PSBzaHIoZiwgeCkKICAgICAgICAgICAgbXNiIDo9IG9yKG1zYiwgZikKICAgICAgICB9CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBsZXQgZiA6PSBzaGwoMywgZ3QoeCwgMHhGRikpCiAgICAgICAgICAgIHggOj0gc2hyKGYsIHgpCiAgICAgICAgICAgIG1zYiA6PSBvcihtc2IsIGYpCiAgICAgICAgfQogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgbGV0IGYgOj0gc2hsKDIsIGd0KHgsIDB4RikpCiAgICAgICAgICAgIHggOj0gc2hyKGYsIHgpCiAgICAgICAgICAgIG1zYiA6PSBvcihtc2IsIGYpCiAgICAgICAgfQogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgbGV0IGYgOj0gc2hsKDEsIGd0KHgsIDB4MykpCiAgICAgICAgICAgIHggOj0gc2hyKGYsIHgpCiAgICAgICAgICAgIG1zYiA6PSBvcihtc2IsIGYpCiAgICAgICAgfQogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgbGV0IGYgOj0gZ3QoeCwgMHgxKQogICAgICAgICAgICBtc2IgOj0gb3IobXNiLCBmKQogICAgICAgIH0KICAgIH0KfQo="},{fileName:"MostSignificantBitFunction.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE1vc3RTaWduaWZpY2FudEJpdEZ1bmN0aW9uIHsKICAgIC8vIEZpbmQgbW9zdCBzaWduaWZpY2FudCBiaXQgdXNpbmcgYmluYXJ5IHNlYXJjaAogICAgZnVuY3Rpb24gbW9zdFNpZ25pZmljYW50Qml0KHVpbnQyNTYgeCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2IG1zYikKICAgIHsKICAgICAgICAvLyB4ID49IDIgKiogMTI4CiAgICAgICAgaWYgKHggPj0gMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApIHsKICAgICAgICAgICAgeCA+Pj0gMTI4OwogICAgICAgICAgICBtc2IgKz0gMTI4OwogICAgICAgIH0KICAgICAgICAvLyB4ID49IDIgKiogNjQKICAgICAgICBpZiAoeCA+PSAweDEwMDAwMDAwMDAwMDAwMDAwKSB7CiAgICAgICAgICAgIHggPj49IDY0OwogICAgICAgICAgICBtc2IgKz0gNjQ7CiAgICAgICAgfQogICAgICAgIC8vIHggPj0gMiAqKiAzMgogICAgICAgIGlmICh4ID49IDB4MTAwMDAwMDAwKSB7CiAgICAgICAgICAgIHggPj49IDMyOwogICAgICAgICAgICBtc2IgKz0gMzI7CiAgICAgICAgfQogICAgICAgIC8vIHggPj0gMiAqKiAxNgogICAgICAgIGlmICh4ID49IDB4MTAwMDApIHsKICAgICAgICAgICAgeCA+Pj0gMTY7CiAgICAgICAgICAgIG1zYiArPSAxNjsKICAgICAgICB9CiAgICAgICAgLy8geCA+PSAyICoqIDgKICAgICAgICBpZiAoeCA+PSAweDEwMCkgewogICAgICAgICAgICB4ID4+PSA4OwogICAgICAgICAgICBtc2IgKz0gODsKICAgICAgICB9CiAgICAgICAgLy8geCA+PSAyICoqIDQKICAgICAgICBpZiAoeCA+PSAweDEwKSB7CiAgICAgICAgICAgIHggPj49IDQ7CiAgICAgICAgICAgIG1zYiArPSA0OwogICAgICAgIH0KICAgICAgICAvLyB4ID49IDIgKiogMgogICAgICAgIGlmICh4ID49IDB4NCkgewogICAgICAgICAgICB4ID4+PSAyOwogICAgICAgICAgICBtc2IgKz0gMjsKICAgICAgICB9CiAgICAgICAgLy8geCA+PSAyICoqIDEKICAgICAgICBpZiAoeCA+PSAweDIpIG1zYiArPSAxOwogICAgfQp9Cg=="}],gA=`
          // SPDX-License-Identifier: MIT
          +
          `,cy=({prev:s,next:a})=>i.jsx(u,{version:ay,title:ny,description:ly,html:ey,prev:s,next:a,codes:py}),ty="0.8.24",oy="Bitwise Operators",ry="Learn about bitwise operators in Solidity",iy=[{fileName:"Bitwise.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEJpdHdpc2VPcHMgewogICAgLy8geCAgICAgPSAxMTEwID0gOCArIDQgKyAyICsgMCA9IDE0CiAgICAvLyB5ICAgICA9IDEwMTEgPSA4ICsgMCArIDIgKyAxID0gMTEKICAgIC8vIHggJiB5ID0gMTAxMCA9IDggKyAwICsgMiArIDAgPSAxMAogICAgZnVuY3Rpb24gYW5kKHVpbnQyNTYgeCwgdWludDI1NiB5KSBleHRlcm5hbCBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4geCAmIHk7CiAgICB9CgogICAgLy8geCAgICAgPSAxMTAwID0gOCArIDQgKyAwICsgMCA9IDEyCiAgICAvLyB5ICAgICA9IDEwMDEgPSA4ICsgMCArIDAgKyAxID0gOQogICAgLy8geCB8IHkgPSAxMTAxID0gOCArIDQgKyAwICsgMSA9IDEzCiAgICBmdW5jdGlvbiBvcih1aW50MjU2IHgsIHVpbnQyNTYgeSkgZXh0ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIHggfCB5OwogICAgfQoKICAgIC8vIHggICAgID0gMTEwMCA9IDggKyA0ICsgMCArIDAgPSAxMgogICAgLy8geSAgICAgPSAwMTAxID0gMCArIDQgKyAwICsgMSA9IDUKICAgIC8vIHggXiB5ID0gMTAwMSA9IDggKyAwICsgMCArIDEgPSA5CiAgICBmdW5jdGlvbiB4b3IodWludDI1NiB4LCB1aW50MjU2IHkpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiB4IF4geTsKICAgIH0KCiAgICAvLyB4ICA9IDAwMDAxMTAwID0gICAwICsgIDAgKyAgMCArICAwICsgOCArIDQgKyAwICsgMCA9IDEyCiAgICAvLyB+eCA9IDExMTEwMDExID0gMTI4ICsgNjQgKyAzMiArIDE2ICsgMCArIDAgKyAyICsgMSA9IDI0MwogICAgZnVuY3Rpb24gbm90KHVpbnQ4IHgpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAodWludDgpIHsKICAgICAgICByZXR1cm4gfng7CiAgICB9CgogICAgLy8gMSA8PCAwID0gMDAwMSAtLT4gMDAwMSA9IDEKICAgIC8vIDEgPDwgMSA9IDAwMDEgLS0+IDAwMTAgPSAyCiAgICAvLyAxIDw8IDIgPSAwMDAxIC0tPiAwMTAwID0gNAogICAgLy8gMSA8PCAzID0gMDAwMSAtLT4gMTAwMCA9IDgKICAgIC8vIDMgPDwgMiA9IDAwMTEgLS0+IDExMDAgPSAxMgogICAgZnVuY3Rpb24gc2hpZnRMZWZ0KHVpbnQyNTYgeCwgdWludDI1NiBiaXRzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgcmV0dXJuIHggPDwgYml0czsKICAgIH0KCiAgICAvLyA4ICA+PiAwID0gMTAwMCAtLT4gMTAwMCA9IDgKICAgIC8vIDggID4+IDEgPSAxMDAwIC0tPiAwMTAwID0gNAogICAgLy8gOCAgPj4gMiA9IDEwMDAgLS0+IDAwMTAgPSAyCiAgICAvLyA4ICA+PiAzID0gMTAwMCAtLT4gMDAwMSA9IDEKICAgIC8vIDggID4+IDQgPSAxMDAwIC0tPiAwMDAwID0gMAogICAgLy8gMTIgPj4gMSA9IDExMDAgLS0+IDAxMTAgPSA2CiAgICBmdW5jdGlvbiBzaGlmdFJpZ2h0KHVpbnQyNTYgeCwgdWludDI1NiBiaXRzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgcmV0dXJuIHggPj4gYml0czsKICAgIH0KCiAgICAvLyBHZXQgbGFzdCBuIGJpdHMgZnJvbSB4CiAgICBmdW5jdGlvbiBnZXRMYXN0TkJpdHModWludDI1NiB4LCB1aW50MjU2IG4pCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAodWludDI1NikKICAgIHsKICAgICAgICAvLyBFeGFtcGxlLCBsYXN0IDMgYml0cwogICAgICAgIC8vIHggICAgICAgID0gMTEwMSA9IDEzCiAgICAgICAgLy8gbWFzayAgICAgPSAwMTExID0gNwogICAgICAgIC8vIHggJiBtYXNrID0gMDEwMSA9IDUKICAgICAgICB1aW50MjU2IG1hc2sgPSAoMSA8PCBuKSAtIDE7CiAgICAgICAgcmV0dXJuIHggJiBtYXNrOwogICAgfQoKICAgIC8vIEdldCBsYXN0IG4gYml0cyBmcm9tIHggdXNpbmcgbW9kIG9wZXJhdG9yCiAgICBmdW5jdGlvbiBnZXRMYXN0TkJpdHNVc2luZ01vZCh1aW50MjU2IHgsIHVpbnQyNTYgbikKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2KQogICAgewogICAgICAgIC8vIDEgPDwgbiA9IDIgKiogbgogICAgICAgIHJldHVybiB4ICUgKDEgPDwgbik7CiAgICB9CgogICAgLy8gR2V0IHBvc2l0aW9uIG9mIG1vc3Qgc2lnbmlmaWNhbnQgYml0CiAgICAvLyB4ID0gMTEwMCA9IDEyLCBtb3N0IHNpZ25pZmljYW50IGJpdCA9IDEwMDAsIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gMwogICAgZnVuY3Rpb24gbW9zdFNpZ25pZmljYW50Qml0KHVpbnQyNTYgeCkgZXh0ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgdWludDI1NiBpID0gMDsKICAgICAgICB3aGlsZSAoKHggPj49IDEpID4gMCkgewogICAgICAgICAgICArK2k7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAgfQoKICAgIC8vIEdldCBmaXJzdCBuIGJpdHMgZnJvbSB4CiAgICAvLyBsZW4gPSBsZW5ndGggb2YgYml0cyBpbiB4ID0gcG9zaXRpb24gb2YgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgeCwgKyAxCiAgICBmdW5jdGlvbiBnZXRGaXJzdE5CaXRzKHVpbnQyNTYgeCwgdWludDI1NiBuLCB1aW50MjU2IGxlbikKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2KQogICAgewogICAgICAgIC8vIEV4YW1wbGUKICAgICAgICAvLyB4ICAgICAgICA9IDExMTAgPSAxNCwgbiA9IDIsIGxlbiA9IDQKICAgICAgICAvLyBtYXNrICAgICA9IDExMDAgPSAxMgogICAgICAgIC8vIHggJiBtYXNrID0gMTEwMCA9IDEyCiAgICAgICAgdWludDI1NiBtYXNrID0gKCgxIDw8IG4pIC0gMSkgPDwgKGxlbiAtIG4pOwogICAgICAgIHJldHVybiB4ICYgbWFzazsKICAgIH0KfQo="},{fileName:"MostSignificantBitAssembly.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE1vc3RTaWduaWZpY2FudEJpdEFzc2VtYmx5IHsKICAgIGZ1bmN0aW9uIG1vc3RTaWduaWZpY2FudEJpdCh1aW50MjU2IHgpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAodWludDI1NiBtc2IpCiAgICB7CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBsZXQgZiA6PSBzaGwoNywgZ3QoeCwgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRikpCiAgICAgICAgICAgIHggOj0gc2hyKGYsIHgpCiAgICAgICAgICAgIC8vIG9yIGNhbiBiZSByZXBsYWNlZCB3aXRoIGFkZAogICAgICAgICAgICBtc2IgOj0gb3IobXNiLCBmKQogICAgICAgIH0KICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIGxldCBmIDo9IHNobCg2LCBndCh4LCAweEZGRkZGRkZGRkZGRkZGRkYpKQogICAgICAgICAgICB4IDo9IHNocihmLCB4KQogICAgICAgICAgICBtc2IgOj0gb3IobXNiLCBmKQogICAgICAgIH0KICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgIGxldCBmIDo9IHNobCg1LCBndCh4LCAweEZGRkZGRkZGKSkKICAgICAgICAgICAgeCA6PSBzaHIoZiwgeCkKICAgICAgICAgICAgbXNiIDo9IG9yKG1zYiwgZikKICAgICAgICB9CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBsZXQgZiA6PSBzaGwoNCwgZ3QoeCwgMHhGRkZGKSkKICAgICAgICAgICAgeCA6PSBzaHIoZiwgeCkKICAgICAgICAgICAgbXNiIDo9IG9yKG1zYiwgZikKICAgICAgICB9CiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICBsZXQgZiA6PSBzaGwoMywgZ3QoeCwgMHhGRikpCiAgICAgICAgICAgIHggOj0gc2hyKGYsIHgpCiAgICAgICAgICAgIG1zYiA6PSBvcihtc2IsIGYpCiAgICAgICAgfQogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgbGV0IGYgOj0gc2hsKDIsIGd0KHgsIDB4RikpCiAgICAgICAgICAgIHggOj0gc2hyKGYsIHgpCiAgICAgICAgICAgIG1zYiA6PSBvcihtc2IsIGYpCiAgICAgICAgfQogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgbGV0IGYgOj0gc2hsKDEsIGd0KHgsIDB4MykpCiAgICAgICAgICAgIHggOj0gc2hyKGYsIHgpCiAgICAgICAgICAgIG1zYiA6PSBvcihtc2IsIGYpCiAgICAgICAgfQogICAgICAgIGFzc2VtYmx5IHsKICAgICAgICAgICAgbGV0IGYgOj0gZ3QoeCwgMHgxKQogICAgICAgICAgICBtc2IgOj0gb3IobXNiLCBmKQogICAgICAgIH0KICAgIH0KfQo="},{fileName:"MostSignificantBitFunction.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IE1vc3RTaWduaWZpY2FudEJpdEZ1bmN0aW9uIHsKICAgIC8vIEZpbmQgbW9zdCBzaWduaWZpY2FudCBiaXQgdXNpbmcgYmluYXJ5IHNlYXJjaAogICAgZnVuY3Rpb24gbW9zdFNpZ25pZmljYW50Qml0KHVpbnQyNTYgeCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2IG1zYikKICAgIHsKICAgICAgICAvLyB4ID49IDIgKiogMTI4CiAgICAgICAgaWYgKHggPj0gMHgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApIHsKICAgICAgICAgICAgeCA+Pj0gMTI4OwogICAgICAgICAgICBtc2IgKz0gMTI4OwogICAgICAgIH0KICAgICAgICAvLyB4ID49IDIgKiogNjQKICAgICAgICBpZiAoeCA+PSAweDEwMDAwMDAwMDAwMDAwMDAwKSB7CiAgICAgICAgICAgIHggPj49IDY0OwogICAgICAgICAgICBtc2IgKz0gNjQ7CiAgICAgICAgfQogICAgICAgIC8vIHggPj0gMiAqKiAzMgogICAgICAgIGlmICh4ID49IDB4MTAwMDAwMDAwKSB7CiAgICAgICAgICAgIHggPj49IDMyOwogICAgICAgICAgICBtc2IgKz0gMzI7CiAgICAgICAgfQogICAgICAgIC8vIHggPj0gMiAqKiAxNgogICAgICAgIGlmICh4ID49IDB4MTAwMDApIHsKICAgICAgICAgICAgeCA+Pj0gMTY7CiAgICAgICAgICAgIG1zYiArPSAxNjsKICAgICAgICB9CiAgICAgICAgLy8geCA+PSAyICoqIDgKICAgICAgICBpZiAoeCA+PSAweDEwMCkgewogICAgICAgICAgICB4ID4+PSA4OwogICAgICAgICAgICBtc2IgKz0gODsKICAgICAgICB9CiAgICAgICAgLy8geCA+PSAyICoqIDQKICAgICAgICBpZiAoeCA+PSAweDEwKSB7CiAgICAgICAgICAgIHggPj49IDQ7CiAgICAgICAgICAgIG1zYiArPSA0OwogICAgICAgIH0KICAgICAgICAvLyB4ID49IDIgKiogMgogICAgICAgIGlmICh4ID49IDB4NCkgewogICAgICAgICAgICB4ID4+PSAyOwogICAgICAgICAgICBtc2IgKz0gMjsKICAgICAgICB9CiAgICAgICAgLy8geCA+PSAyICoqIDEKICAgICAgICBpZiAoeCA+PSAweDIpIG1zYiArPSAxOwogICAgfQp9Cg=="}],gy=`
          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
           
           contract BitwiseOps {
          @@ -3629,7 +3629,7 @@ Each slot in the array can store 32 bytes.

          } } } -
          `,hA=({prev:s,next:a})=>i.jsx(u,{version:tA,title:oA,description:rA,html:gA,prev:s,next:a,codes:iA}),dA="0.8.24",IA="Call",CA="In Solidity call is a low level function to interact with other contracts",jA=[{fileName:"Call.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFJlY2VpdmVyIHsKICAgIGV2ZW50IFJlY2VpdmVkKGFkZHJlc3MgY2FsbGVyLCB1aW50MjU2IGFtb3VudCwgc3RyaW5nIG1lc3NhZ2UpOwoKICAgIGZhbGxiYWNrKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgZW1pdCBSZWNlaXZlZChtc2cuc2VuZGVyLCBtc2cudmFsdWUsICJGYWxsYmFjayB3YXMgY2FsbGVkIik7CiAgICB9CgogICAgZnVuY3Rpb24gZm9vKHN0cmluZyBtZW1vcnkgX21lc3NhZ2UsIHVpbnQyNTYgX3gpCiAgICAgICAgcHVibGljCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgZW1pdCBSZWNlaXZlZChtc2cuc2VuZGVyLCBtc2cudmFsdWUsIF9tZXNzYWdlKTsKCiAgICAgICAgcmV0dXJuIF94ICsgMTsKICAgIH0KfQoKY29udHJhY3QgQ2FsbGVyIHsKICAgIGV2ZW50IFJlc3BvbnNlKGJvb2wgc3VjY2VzcywgYnl0ZXMgZGF0YSk7CgogICAgLy8gTGV0J3MgaW1hZ2luZSB0aGF0IGNvbnRyYWN0IENhbGxlciBkb2VzIG5vdCBoYXZlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlCiAgICAvLyBjb250cmFjdCBSZWNlaXZlciwgYnV0IHdlIGRvIGtub3cgdGhlIGFkZHJlc3Mgb2YgY29udHJhY3QgUmVjZWl2ZXIgYW5kIHRoZSBmdW5jdGlvbiB0byBjYWxsLgogICAgZnVuY3Rpb24gdGVzdENhbGxGb28oYWRkcmVzcyBwYXlhYmxlIF9hZGRyKSBwdWJsaWMgcGF5YWJsZSB7CiAgICAgICAgLy8gWW91IGNhbiBzZW5kIGV0aGVyIGFuZCBzcGVjaWZ5IGEgY3VzdG9tIGdhcyBhbW91bnQKICAgICAgICAoYm9vbCBzdWNjZXNzLCBieXRlcyBtZW1vcnkgZGF0YSkgPSBfYWRkci5jYWxsewogICAgICAgICAgICB2YWx1ZTogbXNnLnZhbHVlLAogICAgICAgICAgICBnYXM6IDUwMDAKICAgICAgICB9KGFiaS5lbmNvZGVXaXRoU2lnbmF0dXJlKCJmb28oc3RyaW5nLHVpbnQyNTYpIiwgImNhbGwgZm9vIiwgMTIzKSk7CgogICAgICAgIGVtaXQgUmVzcG9uc2Uoc3VjY2VzcywgZGF0YSk7CiAgICB9CgogICAgLy8gQ2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgZXhpc3QgdHJpZ2dlcnMgdGhlIGZhbGxiYWNrIGZ1bmN0aW9uLgogICAgZnVuY3Rpb24gdGVzdENhbGxEb2VzTm90RXhpc3QoYWRkcmVzcyBwYXlhYmxlIF9hZGRyKSBwdWJsaWMgcGF5YWJsZSB7CiAgICAgICAgKGJvb2wgc3VjY2VzcywgYnl0ZXMgbWVtb3J5IGRhdGEpID0gX2FkZHIuY2FsbHt2YWx1ZTogbXNnLnZhbHVlfSgKICAgICAgICAgICAgYWJpLmVuY29kZVdpdGhTaWduYXR1cmUoImRvZXNOb3RFeGlzdCgpIikKICAgICAgICApOwoKICAgICAgICBlbWl0IFJlc3BvbnNlKHN1Y2Nlc3MsIGRhdGEpOwogICAgfQp9Cg=="}],uA=`

          call is a low level function to interact with other contracts.

          +`,hy=({prev:s,next:a})=>i.jsx(u,{version:ty,title:oy,description:ry,html:gy,prev:s,next:a,codes:iy}),dy="0.8.24",Iy="Call",Cy="In Solidity call is a low level function to interact with other contracts",jy=[{fileName:"Call.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFJlY2VpdmVyIHsKICAgIGV2ZW50IFJlY2VpdmVkKGFkZHJlc3MgY2FsbGVyLCB1aW50MjU2IGFtb3VudCwgc3RyaW5nIG1lc3NhZ2UpOwoKICAgIGZhbGxiYWNrKCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgZW1pdCBSZWNlaXZlZChtc2cuc2VuZGVyLCBtc2cudmFsdWUsICJGYWxsYmFjayB3YXMgY2FsbGVkIik7CiAgICB9CgogICAgZnVuY3Rpb24gZm9vKHN0cmluZyBtZW1vcnkgX21lc3NhZ2UsIHVpbnQyNTYgX3gpCiAgICAgICAgcHVibGljCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgZW1pdCBSZWNlaXZlZChtc2cuc2VuZGVyLCBtc2cudmFsdWUsIF9tZXNzYWdlKTsKCiAgICAgICAgcmV0dXJuIF94ICsgMTsKICAgIH0KfQoKY29udHJhY3QgQ2FsbGVyIHsKICAgIGV2ZW50IFJlc3BvbnNlKGJvb2wgc3VjY2VzcywgYnl0ZXMgZGF0YSk7CgogICAgLy8gTGV0J3MgaW1hZ2luZSB0aGF0IGNvbnRyYWN0IENhbGxlciBkb2VzIG5vdCBoYXZlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlCiAgICAvLyBjb250cmFjdCBSZWNlaXZlciwgYnV0IHdlIGRvIGtub3cgdGhlIGFkZHJlc3Mgb2YgY29udHJhY3QgUmVjZWl2ZXIgYW5kIHRoZSBmdW5jdGlvbiB0byBjYWxsLgogICAgZnVuY3Rpb24gdGVzdENhbGxGb28oYWRkcmVzcyBwYXlhYmxlIF9hZGRyKSBwdWJsaWMgcGF5YWJsZSB7CiAgICAgICAgLy8gWW91IGNhbiBzZW5kIGV0aGVyIGFuZCBzcGVjaWZ5IGEgY3VzdG9tIGdhcyBhbW91bnQKICAgICAgICAoYm9vbCBzdWNjZXNzLCBieXRlcyBtZW1vcnkgZGF0YSkgPSBfYWRkci5jYWxsewogICAgICAgICAgICB2YWx1ZTogbXNnLnZhbHVlLAogICAgICAgICAgICBnYXM6IDUwMDAKICAgICAgICB9KGFiaS5lbmNvZGVXaXRoU2lnbmF0dXJlKCJmb28oc3RyaW5nLHVpbnQyNTYpIiwgImNhbGwgZm9vIiwgMTIzKSk7CgogICAgICAgIGVtaXQgUmVzcG9uc2Uoc3VjY2VzcywgZGF0YSk7CiAgICB9CgogICAgLy8gQ2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgZXhpc3QgdHJpZ2dlcnMgdGhlIGZhbGxiYWNrIGZ1bmN0aW9uLgogICAgZnVuY3Rpb24gdGVzdENhbGxEb2VzTm90RXhpc3QoYWRkcmVzcyBwYXlhYmxlIF9hZGRyKSBwdWJsaWMgcGF5YWJsZSB7CiAgICAgICAgKGJvb2wgc3VjY2VzcywgYnl0ZXMgbWVtb3J5IGRhdGEpID0gX2FkZHIuY2FsbHt2YWx1ZTogbXNnLnZhbHVlfSgKICAgICAgICAgICAgYWJpLmVuY29kZVdpdGhTaWduYXR1cmUoImRvZXNOb3RFeGlzdCgpIikKICAgICAgICApOwoKICAgICAgICBlbWl0IFJlc3BvbnNlKHN1Y2Nlc3MsIGRhdGEpOwogICAgfQp9Cg=="}],uy=`

          call is a low level function to interact with other contracts.

          This is the recommended method to use when you're just sending Ether via calling the fallback function.

          However it is not the recommend way to call existing functions.

          Few reasons why low-level call is not recommended

          @@ -3683,7 +3683,7 @@ Each slot in the array can store 32 bytes.

          emit Response(success, data); } } -`,yA=({prev:s,next:a})=>i.jsx(u,{version:dA,title:IA,description:CA,html:uA,prev:s,next:a,codes:jA}),AA="0.8.24",mA="Calling Other Contract",bA="In Solidity, contract can call other contracts in several ways",wA=[{fileName:"CallingContract.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENhbGxlZSB7CiAgICB1aW50MjU2IHB1YmxpYyB4OwogICAgdWludDI1NiBwdWJsaWMgdmFsdWU7CgogICAgZnVuY3Rpb24gc2V0WCh1aW50MjU2IF94KSBwdWJsaWMgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHggPSBfeDsKICAgICAgICByZXR1cm4geDsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRYYW5kU2VuZEV0aGVyKHVpbnQyNTYgX3gpCiAgICAgICAgcHVibGljCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYsIHVpbnQyNTYpCiAgICB7CiAgICAgICAgeCA9IF94OwogICAgICAgIHZhbHVlID0gbXNnLnZhbHVlOwoKICAgICAgICByZXR1cm4gKHgsIHZhbHVlKTsKICAgIH0KfQoKY29udHJhY3QgQ2FsbGVyIHsKICAgIGZ1bmN0aW9uIHNldFgoQ2FsbGVlIF9jYWxsZWUsIHVpbnQyNTYgX3gpIHB1YmxpYyB7CiAgICAgICAgdWludDI1NiB4ID0gX2NhbGxlZS5zZXRYKF94KTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRYRnJvbUFkZHJlc3MoYWRkcmVzcyBfYWRkciwgdWludDI1NiBfeCkgcHVibGljIHsKICAgICAgICBDYWxsZWUgY2FsbGVlID0gQ2FsbGVlKF9hZGRyKTsKICAgICAgICBjYWxsZWUuc2V0WChfeCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0WGFuZFNlbmRFdGhlcihDYWxsZWUgX2NhbGxlZSwgdWludDI1NiBfeCkgcHVibGljIHBheWFibGUgewogICAgICAgICh1aW50MjU2IHgsIHVpbnQyNTYgdmFsdWUpID0KICAgICAgICAgICAgX2NhbGxlZS5zZXRYYW5kU2VuZEV0aGVye3ZhbHVlOiBtc2cudmFsdWV9KF94KTsKICAgIH0KfQo="}],kA=`

          Contract can call other contracts in 2 ways.

          +`,Ay=({prev:s,next:a})=>i.jsx(u,{version:dy,title:Iy,description:Cy,html:uy,prev:s,next:a,codes:jy}),yy="0.8.24",my="Calling Other Contract",by="In Solidity, contract can call other contracts in several ways",wy=[{fileName:"CallingContract.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENhbGxlZSB7CiAgICB1aW50MjU2IHB1YmxpYyB4OwogICAgdWludDI1NiBwdWJsaWMgdmFsdWU7CgogICAgZnVuY3Rpb24gc2V0WCh1aW50MjU2IF94KSBwdWJsaWMgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHggPSBfeDsKICAgICAgICByZXR1cm4geDsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRYYW5kU2VuZEV0aGVyKHVpbnQyNTYgX3gpCiAgICAgICAgcHVibGljCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYsIHVpbnQyNTYpCiAgICB7CiAgICAgICAgeCA9IF94OwogICAgICAgIHZhbHVlID0gbXNnLnZhbHVlOwoKICAgICAgICByZXR1cm4gKHgsIHZhbHVlKTsKICAgIH0KfQoKY29udHJhY3QgQ2FsbGVyIHsKICAgIGZ1bmN0aW9uIHNldFgoQ2FsbGVlIF9jYWxsZWUsIHVpbnQyNTYgX3gpIHB1YmxpYyB7CiAgICAgICAgdWludDI1NiB4ID0gX2NhbGxlZS5zZXRYKF94KTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRYRnJvbUFkZHJlc3MoYWRkcmVzcyBfYWRkciwgdWludDI1NiBfeCkgcHVibGljIHsKICAgICAgICBDYWxsZWUgY2FsbGVlID0gQ2FsbGVlKF9hZGRyKTsKICAgICAgICBjYWxsZWUuc2V0WChfeCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0WGFuZFNlbmRFdGhlcihDYWxsZWUgX2NhbGxlZSwgdWludDI1NiBfeCkgcHVibGljIHBheWFibGUgewogICAgICAgICh1aW50MjU2IHgsIHVpbnQyNTYgdmFsdWUpID0KICAgICAgICAgICAgX2NhbGxlZS5zZXRYYW5kU2VuZEV0aGVye3ZhbHVlOiBtc2cudmFsdWV9KF94KTsKICAgIH0KfQo="}],ky=`

          Contract can call other contracts in 2 ways.

          The easiest way to is to just call it, like A.foo(x, y, z).

          Another way to call other contracts is to use the low-level call.

          This method is not recommended.

          @@ -3726,7 +3726,7 @@ Each slot in the array can store 32 bytes.

          _callee.setXandSendEther{value: msg.value}(_x); } } -`,ZA=({prev:s,next:a})=>i.jsx(u,{version:AA,title:mA,description:bA,html:kA,prev:s,next:a,codes:wA}),WA="0.8.24",GA="Constants",BA="Constant variables",fA=[{fileName:"Constants.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENvbnN0YW50cyB7CiAgICAvLyBjb2RpbmcgY29udmVudGlvbiB0byB1cHBlcmNhc2UgY29uc3RhbnQgdmFyaWFibGVzCiAgICBhZGRyZXNzIHB1YmxpYyBjb25zdGFudCBNWV9BRERSRVNTID0KICAgICAgICAweDc3Nzc4ODg4OTk5OUFhQUFiQmJiQ2NjY2RkRGRlZWVFZkZGZkNjQ2M7CiAgICB1aW50MjU2IHB1YmxpYyBjb25zdGFudCBNWV9VSU5UID0gMTIzOwp9Cg=="}],VA=`

          Constants are variables that cannot be modified.

          +`,Zy=({prev:s,next:a})=>i.jsx(u,{version:yy,title:my,description:by,html:ky,prev:s,next:a,codes:wy}),Wy="0.8.24",Gy="Constants",By="Constant variables",Vy=[{fileName:"Constants.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENvbnN0YW50cyB7CiAgICAvLyBjb2RpbmcgY29udmVudGlvbiB0byB1cHBlcmNhc2UgY29uc3RhbnQgdmFyaWFibGVzCiAgICBhZGRyZXNzIHB1YmxpYyBjb25zdGFudCBNWV9BRERSRVNTID0KICAgICAgICAweDc3Nzc4ODg4OTk5OUFhQUFiQmJiQ2NjY2RkRGRlZWVFZkZGZkNjQ2M7CiAgICB1aW50MjU2IHB1YmxpYyBjb25zdGFudCBNWV9VSU5UID0gMTIzOwp9Cg=="}],fy=`

          Constants are variables that cannot be modified.

          Their value is hard coded and using constants can save gas cost.

          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
          @@ -3737,7 +3737,7 @@ Each slot in the array can store 32 bytes.

          0x777788889999AaAAbBbbCcccddDdeeeEfFFfCcCc; uint256 public constant MY_UINT = 123; } -
          `,YA=({prev:s,next:a})=>i.jsx(u,{version:WA,title:GA,description:BA,html:VA,prev:s,next:a,codes:fA}),RA="0.8.24",vA="Constructor",XA="Learn how to initialize smart contracts in Solidity using a constructor",NA=[{fileName:"Constructor.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIEJhc2UgY29udHJhY3QgWApjb250cmFjdCBYIHsKICAgIHN0cmluZyBwdWJsaWMgbmFtZTsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IF9uYW1lKSB7CiAgICAgICAgbmFtZSA9IF9uYW1lOwogICAgfQp9CgovLyBCYXNlIGNvbnRyYWN0IFkKY29udHJhY3QgWSB7CiAgICBzdHJpbmcgcHVibGljIHRleHQ7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBfdGV4dCkgewogICAgICAgIHRleHQgPSBfdGV4dDsKICAgIH0KfQoKLy8gVGhlcmUgYXJlIDIgd2F5cyB0byBpbml0aWFsaXplIHBhcmVudCBjb250cmFjdCB3aXRoIHBhcmFtZXRlcnMuCgovLyBQYXNzIHRoZSBwYXJhbWV0ZXJzIGhlcmUgaW4gdGhlIGluaGVyaXRhbmNlIGxpc3QuCmNvbnRyYWN0IEIgaXMgWCgiSW5wdXQgdG8gWCIpLCBZKCJJbnB1dCB0byBZIikge30KCmNvbnRyYWN0IEMgaXMgWCwgWSB7CiAgICAvLyBQYXNzIHRoZSBwYXJhbWV0ZXJzIGhlcmUgaW4gdGhlIGNvbnN0cnVjdG9yLAogICAgLy8gc2ltaWxhciB0byBmdW5jdGlvbiBtb2RpZmllcnMuCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IF9uYW1lLCBzdHJpbmcgbWVtb3J5IF90ZXh0KSBYKF9uYW1lKSBZKF90ZXh0KSB7fQp9CgovLyBQYXJlbnQgY29uc3RydWN0b3JzIGFyZSBhbHdheXMgY2FsbGVkIGluIHRoZSBvcmRlciBvZiBpbmhlcml0YW5jZQovLyByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiBwYXJlbnQgY29udHJhY3RzIGxpc3RlZCBpbiB0aGUKLy8gY29uc3RydWN0b3Igb2YgdGhlIGNoaWxkIGNvbnRyYWN0LgoKLy8gT3JkZXIgb2YgY29uc3RydWN0b3JzIGNhbGxlZDoKLy8gMS4gWAovLyAyLiBZCi8vIDMuIEQKY29udHJhY3QgRCBpcyBYLCBZIHsKICAgIGNvbnN0cnVjdG9yKCkgWCgiWCB3YXMgY2FsbGVkIikgWSgiWSB3YXMgY2FsbGVkIikge30KfQoKLy8gT3JkZXIgb2YgY29uc3RydWN0b3JzIGNhbGxlZDoKLy8gMS4gWAovLyAyLiBZCi8vIDMuIEUKY29udHJhY3QgRSBpcyBYLCBZIHsKICAgIGNvbnN0cnVjdG9yKCkgWSgiWSB3YXMgY2FsbGVkIikgWCgiWCB3YXMgY2FsbGVkIikge30KfQo="}],HA=`

          A constructor is an optional function that is executed upon contract creation.

          +`,Yy=({prev:s,next:a})=>i.jsx(u,{version:Wy,title:Gy,description:By,html:fy,prev:s,next:a,codes:Vy}),Ry="0.8.24",Xy="Constructor",vy="Learn how to initialize smart contracts in Solidity using a constructor",Ny=[{fileName:"Constructor.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIEJhc2UgY29udHJhY3QgWApjb250cmFjdCBYIHsKICAgIHN0cmluZyBwdWJsaWMgbmFtZTsKCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IF9uYW1lKSB7CiAgICAgICAgbmFtZSA9IF9uYW1lOwogICAgfQp9CgovLyBCYXNlIGNvbnRyYWN0IFkKY29udHJhY3QgWSB7CiAgICBzdHJpbmcgcHVibGljIHRleHQ7CgogICAgY29uc3RydWN0b3Ioc3RyaW5nIG1lbW9yeSBfdGV4dCkgewogICAgICAgIHRleHQgPSBfdGV4dDsKICAgIH0KfQoKLy8gVGhlcmUgYXJlIDIgd2F5cyB0byBpbml0aWFsaXplIHBhcmVudCBjb250cmFjdCB3aXRoIHBhcmFtZXRlcnMuCgovLyBQYXNzIHRoZSBwYXJhbWV0ZXJzIGhlcmUgaW4gdGhlIGluaGVyaXRhbmNlIGxpc3QuCmNvbnRyYWN0IEIgaXMgWCgiSW5wdXQgdG8gWCIpLCBZKCJJbnB1dCB0byBZIikge30KCmNvbnRyYWN0IEMgaXMgWCwgWSB7CiAgICAvLyBQYXNzIHRoZSBwYXJhbWV0ZXJzIGhlcmUgaW4gdGhlIGNvbnN0cnVjdG9yLAogICAgLy8gc2ltaWxhciB0byBmdW5jdGlvbiBtb2RpZmllcnMuCiAgICBjb25zdHJ1Y3RvcihzdHJpbmcgbWVtb3J5IF9uYW1lLCBzdHJpbmcgbWVtb3J5IF90ZXh0KSBYKF9uYW1lKSBZKF90ZXh0KSB7fQp9CgovLyBQYXJlbnQgY29uc3RydWN0b3JzIGFyZSBhbHdheXMgY2FsbGVkIGluIHRoZSBvcmRlciBvZiBpbmhlcml0YW5jZQovLyByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiBwYXJlbnQgY29udHJhY3RzIGxpc3RlZCBpbiB0aGUKLy8gY29uc3RydWN0b3Igb2YgdGhlIGNoaWxkIGNvbnRyYWN0LgoKLy8gT3JkZXIgb2YgY29uc3RydWN0b3JzIGNhbGxlZDoKLy8gMS4gWAovLyAyLiBZCi8vIDMuIEQKY29udHJhY3QgRCBpcyBYLCBZIHsKICAgIGNvbnN0cnVjdG9yKCkgWCgiWCB3YXMgY2FsbGVkIikgWSgiWSB3YXMgY2FsbGVkIikge30KfQoKLy8gT3JkZXIgb2YgY29uc3RydWN0b3JzIGNhbGxlZDoKLy8gMS4gWAovLyAyLiBZCi8vIDMuIEUKY29udHJhY3QgRSBpcyBYLCBZIHsKICAgIGNvbnN0cnVjdG9yKCkgWSgiWSB3YXMgY2FsbGVkIikgWCgiWCB3YXMgY2FsbGVkIikge30KfQo="}],Hy=`

          A constructor is an optional function that is executed upon contract creation.

          Here are examples of how to pass arguments to constructors.

          // SPDX-License-Identifier: MIT
           pragma solidity ^0.8.24;
          @@ -3790,7 +3790,7 @@ Each slot in the array can store 32 bytes.

          contract E is X, Y { constructor() Y("Y was called") X("X was called") {} } -
          `,FA=({prev:s,next:a})=>i.jsx(u,{version:RA,title:vA,description:XA,html:HA,prev:s,next:a,codes:NA}),KA="0.8.24",SA="Data Locations - Storage, Memory and Calldata",MA="Data locations - storage, memory and calldata",xA=[{fileName:"DataLocations.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IERhdGFMb2NhdGlvbnMgewogICAgdWludDI1NltdIHB1YmxpYyBhcnI7CiAgICBtYXBwaW5nKHVpbnQyNTYgPT4gYWRkcmVzcykgbWFwOwoKICAgIHN0cnVjdCBNeVN0cnVjdCB7CiAgICAgICAgdWludDI1NiBmb287CiAgICB9CgogICAgbWFwcGluZyh1aW50MjU2ID0+IE15U3RydWN0KSBteVN0cnVjdHM7CgogICAgZnVuY3Rpb24gZigpIHB1YmxpYyB7CiAgICAgICAgLy8gY2FsbCBfZiB3aXRoIHN0YXRlIHZhcmlhYmxlcwogICAgICAgIF9mKGFyciwgbWFwLCBteVN0cnVjdHNbMV0pOwoKICAgICAgICAvLyBnZXQgYSBzdHJ1Y3QgZnJvbSBhIG1hcHBpbmcKICAgICAgICBNeVN0cnVjdCBzdG9yYWdlIG15U3RydWN0ID0gbXlTdHJ1Y3RzWzFdOwogICAgICAgIC8vIGNyZWF0ZSBhIHN0cnVjdCBpbiBtZW1vcnkKICAgICAgICBNeVN0cnVjdCBtZW1vcnkgbXlNZW1TdHJ1Y3QgPSBNeVN0cnVjdCgwKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfZigKICAgICAgICB1aW50MjU2W10gc3RvcmFnZSBfYXJyLAogICAgICAgIG1hcHBpbmcodWludDI1NiA9PiBhZGRyZXNzKSBzdG9yYWdlIF9tYXAsCiAgICAgICAgTXlTdHJ1Y3Qgc3RvcmFnZSBfbXlTdHJ1Y3QKICAgICkgaW50ZXJuYWwgewogICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHN0b3JhZ2UgdmFyaWFibGVzCiAgICB9CgogICAgLy8gWW91IGNhbiByZXR1cm4gbWVtb3J5IHZhcmlhYmxlcwogICAgZnVuY3Rpb24gZyh1aW50MjU2W10gbWVtb3J5IF9hcnIpIHB1YmxpYyByZXR1cm5zICh1aW50MjU2W10gbWVtb3J5KSB7CiAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggbWVtb3J5IGFycmF5CiAgICB9CgogICAgZnVuY3Rpb24gaCh1aW50MjU2W10gY2FsbGRhdGEgX2FycikgZXh0ZXJuYWwgewogICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIGNhbGxkYXRhIGFycmF5CiAgICB9Cn0K"}],JA=`

          Variables are declared as either storage, memory or calldata to explicitly +`,Fy=({prev:s,next:a})=>i.jsx(u,{version:Ry,title:Xy,description:vy,html:Hy,prev:s,next:a,codes:Ny}),Ky="0.8.24",Sy="Data Locations - Storage, Memory and Calldata",My="Data locations - storage, memory and calldata",xy=[{fileName:"DataLocations.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IERhdGFMb2NhdGlvbnMgewogICAgdWludDI1NltdIHB1YmxpYyBhcnI7CiAgICBtYXBwaW5nKHVpbnQyNTYgPT4gYWRkcmVzcykgbWFwOwoKICAgIHN0cnVjdCBNeVN0cnVjdCB7CiAgICAgICAgdWludDI1NiBmb287CiAgICB9CgogICAgbWFwcGluZyh1aW50MjU2ID0+IE15U3RydWN0KSBteVN0cnVjdHM7CgogICAgZnVuY3Rpb24gZigpIHB1YmxpYyB7CiAgICAgICAgLy8gY2FsbCBfZiB3aXRoIHN0YXRlIHZhcmlhYmxlcwogICAgICAgIF9mKGFyciwgbWFwLCBteVN0cnVjdHNbMV0pOwoKICAgICAgICAvLyBnZXQgYSBzdHJ1Y3QgZnJvbSBhIG1hcHBpbmcKICAgICAgICBNeVN0cnVjdCBzdG9yYWdlIG15U3RydWN0ID0gbXlTdHJ1Y3RzWzFdOwogICAgICAgIC8vIGNyZWF0ZSBhIHN0cnVjdCBpbiBtZW1vcnkKICAgICAgICBNeVN0cnVjdCBtZW1vcnkgbXlNZW1TdHJ1Y3QgPSBNeVN0cnVjdCgwKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfZigKICAgICAgICB1aW50MjU2W10gc3RvcmFnZSBfYXJyLAogICAgICAgIG1hcHBpbmcodWludDI1NiA9PiBhZGRyZXNzKSBzdG9yYWdlIF9tYXAsCiAgICAgICAgTXlTdHJ1Y3Qgc3RvcmFnZSBfbXlTdHJ1Y3QKICAgICkgaW50ZXJuYWwgewogICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHN0b3JhZ2UgdmFyaWFibGVzCiAgICB9CgogICAgLy8gWW91IGNhbiByZXR1cm4gbWVtb3J5IHZhcmlhYmxlcwogICAgZnVuY3Rpb24gZyh1aW50MjU2W10gbWVtb3J5IF9hcnIpIHB1YmxpYyByZXR1cm5zICh1aW50MjU2W10gbWVtb3J5KSB7CiAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggbWVtb3J5IGFycmF5CiAgICB9CgogICAgZnVuY3Rpb24gaCh1aW50MjU2W10gY2FsbGRhdGEgX2FycikgZXh0ZXJuYWwgewogICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIGNhbGxkYXRhIGFycmF5CiAgICB9Cn0K"}],Jy=`

          Variables are declared as either storage, memory or calldata to explicitly specify the location of the data.

          • storage - variable is a state variable (store on blockchain)
          • @@ -3837,7 +3837,7 @@ specify the location of the data.

            // do something with calldata array } } -`,zA=({prev:s,next:a})=>i.jsx(u,{version:KA,title:SA,description:MA,html:JA,prev:s,next:a,codes:xA}),EA="0.8.24",UA="Chainlink Price Oracle",TA="Chainlink Price Oracle",QA=[{fileName:"Chainlink.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENoYWlubGlua1ByaWNlT3JhY2xlIHsKICAgIEFnZ3JlZ2F0b3JWM0ludGVyZmFjZSBpbnRlcm5hbCBwcmljZUZlZWQ7CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgLy8gRVRIIC8gVVNECiAgICAgICAgcHJpY2VGZWVkID0KICAgICAgICAgICAgQWdncmVnYXRvclYzSW50ZXJmYWNlKDB4NWY0ZUMzRGY5Y2JkNDM3MTRGRTI3NDBmNUUzNjE2MTU1YzViODQxOSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TGF0ZXN0UHJpY2UoKSBwdWJsaWMgdmlldyByZXR1cm5zIChpbnQyNTYpIHsKICAgICAgICAoCiAgICAgICAgICAgIHVpbnQ4MCByb3VuZElELAogICAgICAgICAgICBpbnQyNTYgcHJpY2UsCiAgICAgICAgICAgIHVpbnQyNTYgc3RhcnRlZEF0LAogICAgICAgICAgICB1aW50MjU2IHRpbWVTdGFtcCwKICAgICAgICAgICAgdWludDgwIGFuc3dlcmVkSW5Sb3VuZAogICAgICAgICkgPSBwcmljZUZlZWQubGF0ZXN0Um91bmREYXRhKCk7CiAgICAgICAgLy8gZm9yIEVUSCAvIFVTRCBwcmljZSBpcyBzY2FsZWQgdXAgYnkgMTAgKiogOAogICAgICAgIHJldHVybiBwcmljZSAvIDFlODsKICAgIH0KfQoKaW50ZXJmYWNlIEFnZ3JlZ2F0b3JWM0ludGVyZmFjZSB7CiAgICBmdW5jdGlvbiBsYXRlc3RSb3VuZERhdGEoKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKAogICAgICAgICAgICB1aW50ODAgcm91bmRJZCwKICAgICAgICAgICAgaW50MjU2IGFuc3dlciwKICAgICAgICAgICAgdWludDI1NiBzdGFydGVkQXQsCiAgICAgICAgICAgIHVpbnQyNTYgdXBkYXRlZEF0LAogICAgICAgICAgICB1aW50ODAgYW5zd2VyZWRJblJvdW5kCiAgICAgICAgKTsKfQo="}],DA=`

            ETH / USD Price Oracle

            +`,zy=({prev:s,next:a})=>i.jsx(u,{version:Ky,title:Sy,description:My,html:Jy,prev:s,next:a,codes:xy}),Ey="0.8.24",Uy="Chainlink Price Oracle",Ty="Chainlink Price Oracle",Qy=[{fileName:"Chainlink.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENoYWlubGlua1ByaWNlT3JhY2xlIHsKICAgIEFnZ3JlZ2F0b3JWM0ludGVyZmFjZSBpbnRlcm5hbCBwcmljZUZlZWQ7CgogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgLy8gRVRIIC8gVVNECiAgICAgICAgcHJpY2VGZWVkID0KICAgICAgICAgICAgQWdncmVnYXRvclYzSW50ZXJmYWNlKDB4NWY0ZUMzRGY5Y2JkNDM3MTRGRTI3NDBmNUUzNjE2MTU1YzViODQxOSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TGF0ZXN0UHJpY2UoKSBwdWJsaWMgdmlldyByZXR1cm5zIChpbnQyNTYpIHsKICAgICAgICAoCiAgICAgICAgICAgIHVpbnQ4MCByb3VuZElELAogICAgICAgICAgICBpbnQyNTYgcHJpY2UsCiAgICAgICAgICAgIHVpbnQyNTYgc3RhcnRlZEF0LAogICAgICAgICAgICB1aW50MjU2IHRpbWVTdGFtcCwKICAgICAgICAgICAgdWludDgwIGFuc3dlcmVkSW5Sb3VuZAogICAgICAgICkgPSBwcmljZUZlZWQubGF0ZXN0Um91bmREYXRhKCk7CiAgICAgICAgLy8gZm9yIEVUSCAvIFVTRCBwcmljZSBpcyBzY2FsZWQgdXAgYnkgMTAgKiogOAogICAgICAgIHJldHVybiBwcmljZSAvIDFlODsKICAgIH0KfQoKaW50ZXJmYWNlIEFnZ3JlZ2F0b3JWM0ludGVyZmFjZSB7CiAgICBmdW5jdGlvbiBsYXRlc3RSb3VuZERhdGEoKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKAogICAgICAgICAgICB1aW50ODAgcm91bmRJZCwKICAgICAgICAgICAgaW50MjU2IGFuc3dlciwKICAgICAgICAgICAgdWludDI1NiBzdGFydGVkQXQsCiAgICAgICAgICAgIHVpbnQyNTYgdXBkYXRlZEF0LAogICAgICAgICAgICB1aW50ODAgYW5zd2VyZWRJblJvdW5kCiAgICAgICAgKTsKfQo="}],Dy=`

            ETH / USD Price Oracle

            // SPDX-License-Identifier: MIT
             pragma solidity ^0.8.24;
             
            @@ -3875,7 +3875,7 @@ specify the location of the data.

            uint80 answeredInRound ); } -
            `,LA=({prev:s,next:a})=>i.jsx(u,{version:EA,title:UA,description:TA,html:DA,prev:s,next:a,codes:QA}),_A="0.8.24",OA="Constant Product AMM",PA="Constant product AMM",$A=[{fileName:"CPAMM.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENQQU1NIHsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuMDsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuMTsKCiAgICB1aW50MjU2IHB1YmxpYyByZXNlcnZlMDsKICAgIHVpbnQyNTYgcHVibGljIHJlc2VydmUxOwoKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4wLCBhZGRyZXNzIF90b2tlbjEpIHsKICAgICAgICB0b2tlbjAgPSBJRVJDMjAoX3Rva2VuMCk7CiAgICAgICAgdG9rZW4xID0gSUVSQzIwKF90b2tlbjEpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9taW50KGFkZHJlc3MgX3RvLCB1aW50MjU2IF9hbW91bnQpIHByaXZhdGUgewogICAgICAgIGJhbGFuY2VPZltfdG9dICs9IF9hbW91bnQ7CiAgICAgICAgdG90YWxTdXBwbHkgKz0gX2Ftb3VudDsKICAgIH0KCiAgICBmdW5jdGlvbiBfYnVybihhZGRyZXNzIF9mcm9tLCB1aW50MjU2IF9hbW91bnQpIHByaXZhdGUgewogICAgICAgIGJhbGFuY2VPZltfZnJvbV0gLT0gX2Ftb3VudDsKICAgICAgICB0b3RhbFN1cHBseSAtPSBfYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIF91cGRhdGUodWludDI1NiBfcmVzZXJ2ZTAsIHVpbnQyNTYgX3Jlc2VydmUxKSBwcml2YXRlIHsKICAgICAgICByZXNlcnZlMCA9IF9yZXNlcnZlMDsKICAgICAgICByZXNlcnZlMSA9IF9yZXNlcnZlMTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2FwKGFkZHJlc3MgX3Rva2VuSW4sIHVpbnQyNTYgX2Ftb3VudEluKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpCiAgICB7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgX3Rva2VuSW4gPT0gYWRkcmVzcyh0b2tlbjApIHx8IF90b2tlbkluID09IGFkZHJlc3ModG9rZW4xKSwKICAgICAgICAgICAgImludmFsaWQgdG9rZW4iCiAgICAgICAgKTsKICAgICAgICByZXF1aXJlKF9hbW91bnRJbiA+IDAsICJhbW91bnQgaW4gPSAwIik7CgogICAgICAgIGJvb2wgaXNUb2tlbjAgPSBfdG9rZW5JbiA9PSBhZGRyZXNzKHRva2VuMCk7CiAgICAgICAgKElFUkMyMCB0b2tlbkluLCBJRVJDMjAgdG9rZW5PdXQsIHVpbnQyNTYgcmVzZXJ2ZUluLCB1aW50MjU2IHJlc2VydmVPdXQpCiAgICAgICAgPSBpc1Rva2VuMAogICAgICAgICAgICA/ICh0b2tlbjAsIHRva2VuMSwgcmVzZXJ2ZTAsIHJlc2VydmUxKQogICAgICAgICAgICA6ICh0b2tlbjEsIHRva2VuMCwgcmVzZXJ2ZTEsIHJlc2VydmUwKTsKCiAgICAgICAgdG9rZW5Jbi50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudEluKTsKCiAgICAgICAgLyoKICAgICAgICBIb3cgbXVjaCBkeSBmb3IgZHg/CgogICAgICAgIHh5ID0gawogICAgICAgICh4ICsgZHgpKHkgLSBkeSkgPSBrCiAgICAgICAgeSAtIGR5ID0gayAvICh4ICsgZHgpCiAgICAgICAgeSAtIGsgLyAoeCArIGR4KSA9IGR5CiAgICAgICAgeSAtIHh5IC8gKHggKyBkeCkgPSBkeQogICAgICAgICh5eCArIHlkeCAtIHh5KSAvICh4ICsgZHgpID0gZHkKICAgICAgICB5ZHggLyAoeCArIGR4KSA9IGR5CiAgICAgICAgKi8KICAgICAgICAvLyAwLjMlIGZlZQogICAgICAgIHVpbnQyNTYgYW1vdW50SW5XaXRoRmVlID0gKF9hbW91bnRJbiAqIDk5NykgLyAxMDAwOwogICAgICAgIGFtb3VudE91dCA9CiAgICAgICAgICAgIChyZXNlcnZlT3V0ICogYW1vdW50SW5XaXRoRmVlKSAvIChyZXNlcnZlSW4gKyBhbW91bnRJbldpdGhGZWUpOwoKICAgICAgICB0b2tlbk91dC50cmFuc2Zlcihtc2cuc2VuZGVyLCBhbW91bnRPdXQpOwoKICAgICAgICBfdXBkYXRlKAogICAgICAgICAgICB0b2tlbjAuYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpLCB0b2tlbjEuYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpCiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRMaXF1aWRpdHkodWludDI1NiBfYW1vdW50MCwgdWludDI1NiBfYW1vdW50MSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKHVpbnQyNTYgc2hhcmVzKQogICAgewogICAgICAgIHRva2VuMC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudDApOwogICAgICAgIHRva2VuMS50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudDEpOwoKICAgICAgICAvKgogICAgICAgIEhvdyBtdWNoIGR4LCBkeSB0byBhZGQ/CgogICAgICAgIHh5ID0gawogICAgICAgICh4ICsgZHgpKHkgKyBkeSkgPSBrJwoKICAgICAgICBObyBwcmljZSBjaGFuZ2UsIGJlZm9yZSBhbmQgYWZ0ZXIgYWRkaW5nIGxpcXVpZGl0eQogICAgICAgIHggLyB5ID0gKHggKyBkeCkgLyAoeSArIGR5KQoKICAgICAgICB4KHkgKyBkeSkgPSB5KHggKyBkeCkKICAgICAgICB4ICogZHkgPSB5ICogZHgKCiAgICAgICAgeCAvIHkgPSBkeCAvIGR5CiAgICAgICAgZHkgPSB5IC8geCAqIGR4CiAgICAgICAgKi8KICAgICAgICBpZiAocmVzZXJ2ZTAgPiAwIHx8IHJlc2VydmUxID4gMCkgewogICAgICAgICAgICByZXF1aXJlKAogICAgICAgICAgICAgICAgcmVzZXJ2ZTAgKiBfYW1vdW50MSA9PSByZXNlcnZlMSAqIF9hbW91bnQwLCAieCAvIHkgIT0gZHggLyBkeSIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8qCiAgICAgICAgSG93IG11Y2ggc2hhcmVzIHRvIG1pbnQ/CgogICAgICAgIGYoeCwgeSkgPSB2YWx1ZSBvZiBsaXF1aWRpdHkKICAgICAgICBXZSB3aWxsIGRlZmluZSBmKHgsIHkpID0gc3FydCh4eSkKCiAgICAgICAgTDAgPSBmKHgsIHkpCiAgICAgICAgTDEgPSBmKHggKyBkeCwgeSArIGR5KQogICAgICAgIFQgPSB0b3RhbCBzaGFyZXMKICAgICAgICBzID0gc2hhcmVzIHRvIG1pbnQKCiAgICAgICAgVG90YWwgc2hhcmVzIHNob3VsZCBpbmNyZWFzZSBwcm9wb3J0aW9uYWwgdG8gaW5jcmVhc2UgaW4gbGlxdWlkaXR5CiAgICAgICAgTDEgLyBMMCA9IChUICsgcykgLyBUCgogICAgICAgIEwxICogVCA9IEwwICogKFQgKyBzKQoKICAgICAgICAoTDEgLSBMMCkgKiBUIC8gTDAgPSBzIAogICAgICAgICovCgogICAgICAgIC8qCiAgICAgICAgQ2xhaW0KICAgICAgICAoTDEgLSBMMCkgLyBMMCA9IGR4IC8geCA9IGR5IC8geQoKICAgICAgICBQcm9vZgogICAgICAgIC0tLSBFcXVhdGlvbiAxIC0tLQogICAgICAgIChMMSAtIEwwKSAvIEwwID0gKHNxcnQoKHggKyBkeCkoeSArIGR5KSkgLSBzcXJ0KHh5KSkgLyBzcXJ0KHh5KQogICAgICAgIAogICAgICAgIGR4IC8gZHkgPSB4IC8geSBzbyByZXBsYWNlIGR5ID0gZHggKiB5IC8geAoKICAgICAgICAtLS0gRXF1YXRpb24gMiAtLS0KICAgICAgICBFcXVhdGlvbiAxID0gKHNxcnQoeHkgKyAyeWR4ICsgZHheMiAqIHkgLyB4KSAtIHNxcnQoeHkpKSAvIHNxcnQoeHkpCgogICAgICAgIE11bHRpcGx5IGJ5IHNxcnQoeCkgLyBzcXJ0KHgpCiAgICAgICAgRXF1YXRpb24gMiA9IChzcXJ0KHheMnkgKyAyeHlkeCArIGR4XjIgKiB5KSAtIHNxcnQoeF4yeSkpIC8gc3FydCh4XjJ5KQogICAgICAgICAgICAgICAgICAgPSAoc3FydCh5KShzcXJ0KHheMiArIDJ4ZHggKyBkeF4yKSAtIHNxcnQoeF4yKSkgLyAoc3FydCh5KXNxcnQoeF4yKSkKICAgICAgICAKICAgICAgICBzcXJ0KHkpIG9uIHRvcCBhbmQgYm90dG9tIGNhbmNlbHMgb3V0CgogICAgICAgIC0tLSBFcXVhdGlvbiAzIC0tLQogICAgICAgIEVxdWF0aW9uIDIgPSAoc3FydCh4XjIgKyAyeGR4ICsgZHheMikgLSBzcXJ0KHheMikpIC8gKHNxcnQoeF4yKQogICAgICAgID0gKHNxcnQoKHggKyBkeCleMikgLSBzcXJ0KHheMikpIC8gc3FydCh4XjIpICAKICAgICAgICA9ICgoeCArIGR4KSAtIHgpIC8geAogICAgICAgID0gZHggLyB4CgogICAgICAgIFNpbmNlIGR4IC8gZHkgPSB4IC8geSwKICAgICAgICBkeCAvIHggPSBkeSAvIHkKCiAgICAgICAgRmluYWxseQogICAgICAgIChMMSAtIEwwKSAvIEwwID0gZHggLyB4ID0gZHkgLyB5CiAgICAgICAgKi8KICAgICAgICBpZiAodG90YWxTdXBwbHkgPT0gMCkgewogICAgICAgICAgICBzaGFyZXMgPSBfc3FydChfYW1vdW50MCAqIF9hbW91bnQxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzaGFyZXMgPSBfbWluKAogICAgICAgICAgICAgICAgKF9hbW91bnQwICogdG90YWxTdXBwbHkpIC8gcmVzZXJ2ZTAsCiAgICAgICAgICAgICAgICAoX2Ftb3VudDEgKiB0b3RhbFN1cHBseSkgLyByZXNlcnZlMQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXF1aXJlKHNoYXJlcyA+IDAsICJzaGFyZXMgPSAwIik7CiAgICAgICAgX21pbnQobXNnLnNlbmRlciwgc2hhcmVzKTsKCiAgICAgICAgX3VwZGF0ZSgKICAgICAgICAgICAgdG9rZW4wLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKSwgdG9rZW4xLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKQogICAgICAgICk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVtb3ZlTGlxdWlkaXR5KHVpbnQyNTYgX3NoYXJlcykKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKHVpbnQyNTYgYW1vdW50MCwgdWludDI1NiBhbW91bnQxKQogICAgewogICAgICAgIC8qCiAgICAgICAgQ2xhaW0KICAgICAgICBkeCwgZHkgPSBhbW91bnQgb2YgbGlxdWlkaXR5IHRvIHJlbW92ZQogICAgICAgIGR4ID0gcyAvIFQgKiB4CiAgICAgICAgZHkgPSBzIC8gVCAqIHkKCiAgICAgICAgUHJvb2YKICAgICAgICBMZXQncyBmaW5kIGR4LCBkeSBzdWNoIHRoYXQKICAgICAgICB2IC8gTCA9IHMgLyBUCiAgICAgICAgCiAgICAgICAgd2hlcmUKICAgICAgICB2ID0gZihkeCwgZHkpID0gc3FydChkeGR5KQogICAgICAgIEwgPSB0b3RhbCBsaXF1aWRpdHkgPSBzcXJ0KHh5KQogICAgICAgIHMgPSBzaGFyZXMKICAgICAgICBUID0gdG90YWwgc3VwcGx5CgogICAgICAgIC0tLSBFcXVhdGlvbiAxIC0tLQogICAgICAgIHYgPSBzIC8gVCAqIEwKICAgICAgICBzcXJ0KGR4ZHkpID0gcyAvIFQgKiBzcXJ0KHh5KQoKICAgICAgICBBbW91bnQgb2YgbGlxdWlkaXR5IHRvIHJlbW92ZSBtdXN0IG5vdCBjaGFuZ2UgcHJpY2Ugc28gCiAgICAgICAgZHggLyBkeSA9IHggLyB5CgogICAgICAgIHJlcGxhY2UgZHkgPSBkeCAqIHkgLyB4CiAgICAgICAgc3FydChkeGR5KSA9IHNxcnQoZHggKiBkeCAqIHkgLyB4KSA9IGR4ICogc3FydCh5IC8geCkKCiAgICAgICAgRGl2aWRlIGJvdGggc2lkZXMgb2YgRXF1YXRpb24gMSB3aXRoIHNxcnQoeSAvIHgpCiAgICAgICAgZHggPSBzIC8gVCAqIHNxcnQoeHkpIC8gc3FydCh5IC8geCkKICAgICAgICAgICA9IHMgLyBUICogc3FydCh4XjIpID0gcyAvIFQgKiB4CgogICAgICAgIExpa2V3aXNlCiAgICAgICAgZHkgPSBzIC8gVCAqIHkKICAgICAgICAqLwoKICAgICAgICAvLyBiYWwwID49IHJlc2VydmUwCiAgICAgICAgLy8gYmFsMSA+PSByZXNlcnZlMQogICAgICAgIHVpbnQyNTYgYmFsMCA9IHRva2VuMC5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSk7CiAgICAgICAgdWludDI1NiBiYWwxID0gdG9rZW4xLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKCiAgICAgICAgYW1vdW50MCA9IChfc2hhcmVzICogYmFsMCkgLyB0b3RhbFN1cHBseTsKICAgICAgICBhbW91bnQxID0gKF9zaGFyZXMgKiBiYWwxKSAvIHRvdGFsU3VwcGx5OwogICAgICAgIHJlcXVpcmUoYW1vdW50MCA+IDAgJiYgYW1vdW50MSA+IDAsICJhbW91bnQwIG9yIGFtb3VudDEgPSAwIik7CgogICAgICAgIF9idXJuKG1zZy5zZW5kZXIsIF9zaGFyZXMpOwogICAgICAgIF91cGRhdGUoYmFsMCAtIGFtb3VudDAsIGJhbDEgLSBhbW91bnQxKTsKCiAgICAgICAgdG9rZW4wLnRyYW5zZmVyKG1zZy5zZW5kZXIsIGFtb3VudDApOwogICAgICAgIHRva2VuMS50cmFuc2Zlcihtc2cuc2VuZGVyLCBhbW91bnQxKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfc3FydCh1aW50MjU2IHkpIHByaXZhdGUgcHVyZSByZXR1cm5zICh1aW50MjU2IHopIHsKICAgICAgICBpZiAoeSA+IDMpIHsKICAgICAgICAgICAgeiA9IHk7CiAgICAgICAgICAgIHVpbnQyNTYgeCA9IHkgLyAyICsgMTsKICAgICAgICAgICAgd2hpbGUgKHggPCB6KSB7CiAgICAgICAgICAgICAgICB6ID0geDsKICAgICAgICAgICAgICAgIHggPSAoeSAvIHggKyB4KSAvIDI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHkgIT0gMCkgewogICAgICAgICAgICB6ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX21pbih1aW50MjU2IHgsIHVpbnQyNTYgeSkgcHJpdmF0ZSBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4geCA8PSB5ID8geCA6IHk7CiAgICB9Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gdG90YWxTdXBwbHkoKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBzZW5kZXIsIGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwp9Cg=="}],qA=`

            Constant product AMM XY = K

            +`,Ly=({prev:s,next:a})=>i.jsx(u,{version:Ey,title:Uy,description:Ty,html:Dy,prev:s,next:a,codes:Qy}),_y="0.8.24",Oy="Constant Product AMM",Py="Constant product AMM",$y=[{fileName:"CPAMM.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENQQU1NIHsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuMDsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuMTsKCiAgICB1aW50MjU2IHB1YmxpYyByZXNlcnZlMDsKICAgIHVpbnQyNTYgcHVibGljIHJlc2VydmUxOwoKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4wLCBhZGRyZXNzIF90b2tlbjEpIHsKICAgICAgICB0b2tlbjAgPSBJRVJDMjAoX3Rva2VuMCk7CiAgICAgICAgdG9rZW4xID0gSUVSQzIwKF90b2tlbjEpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9taW50KGFkZHJlc3MgX3RvLCB1aW50MjU2IF9hbW91bnQpIHByaXZhdGUgewogICAgICAgIGJhbGFuY2VPZltfdG9dICs9IF9hbW91bnQ7CiAgICAgICAgdG90YWxTdXBwbHkgKz0gX2Ftb3VudDsKICAgIH0KCiAgICBmdW5jdGlvbiBfYnVybihhZGRyZXNzIF9mcm9tLCB1aW50MjU2IF9hbW91bnQpIHByaXZhdGUgewogICAgICAgIGJhbGFuY2VPZltfZnJvbV0gLT0gX2Ftb3VudDsKICAgICAgICB0b3RhbFN1cHBseSAtPSBfYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIF91cGRhdGUodWludDI1NiBfcmVzZXJ2ZTAsIHVpbnQyNTYgX3Jlc2VydmUxKSBwcml2YXRlIHsKICAgICAgICByZXNlcnZlMCA9IF9yZXNlcnZlMDsKICAgICAgICByZXNlcnZlMSA9IF9yZXNlcnZlMTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2FwKGFkZHJlc3MgX3Rva2VuSW4sIHVpbnQyNTYgX2Ftb3VudEluKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpCiAgICB7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgX3Rva2VuSW4gPT0gYWRkcmVzcyh0b2tlbjApIHx8IF90b2tlbkluID09IGFkZHJlc3ModG9rZW4xKSwKICAgICAgICAgICAgImludmFsaWQgdG9rZW4iCiAgICAgICAgKTsKICAgICAgICByZXF1aXJlKF9hbW91bnRJbiA+IDAsICJhbW91bnQgaW4gPSAwIik7CgogICAgICAgIGJvb2wgaXNUb2tlbjAgPSBfdG9rZW5JbiA9PSBhZGRyZXNzKHRva2VuMCk7CiAgICAgICAgKElFUkMyMCB0b2tlbkluLCBJRVJDMjAgdG9rZW5PdXQsIHVpbnQyNTYgcmVzZXJ2ZUluLCB1aW50MjU2IHJlc2VydmVPdXQpCiAgICAgICAgPSBpc1Rva2VuMAogICAgICAgICAgICA/ICh0b2tlbjAsIHRva2VuMSwgcmVzZXJ2ZTAsIHJlc2VydmUxKQogICAgICAgICAgICA6ICh0b2tlbjEsIHRva2VuMCwgcmVzZXJ2ZTEsIHJlc2VydmUwKTsKCiAgICAgICAgdG9rZW5Jbi50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudEluKTsKCiAgICAgICAgLyoKICAgICAgICBIb3cgbXVjaCBkeSBmb3IgZHg/CgogICAgICAgIHh5ID0gawogICAgICAgICh4ICsgZHgpKHkgLSBkeSkgPSBrCiAgICAgICAgeSAtIGR5ID0gayAvICh4ICsgZHgpCiAgICAgICAgeSAtIGsgLyAoeCArIGR4KSA9IGR5CiAgICAgICAgeSAtIHh5IC8gKHggKyBkeCkgPSBkeQogICAgICAgICh5eCArIHlkeCAtIHh5KSAvICh4ICsgZHgpID0gZHkKICAgICAgICB5ZHggLyAoeCArIGR4KSA9IGR5CiAgICAgICAgKi8KICAgICAgICAvLyAwLjMlIGZlZQogICAgICAgIHVpbnQyNTYgYW1vdW50SW5XaXRoRmVlID0gKF9hbW91bnRJbiAqIDk5NykgLyAxMDAwOwogICAgICAgIGFtb3VudE91dCA9CiAgICAgICAgICAgIChyZXNlcnZlT3V0ICogYW1vdW50SW5XaXRoRmVlKSAvIChyZXNlcnZlSW4gKyBhbW91bnRJbldpdGhGZWUpOwoKICAgICAgICB0b2tlbk91dC50cmFuc2Zlcihtc2cuc2VuZGVyLCBhbW91bnRPdXQpOwoKICAgICAgICBfdXBkYXRlKAogICAgICAgICAgICB0b2tlbjAuYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpLCB0b2tlbjEuYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpCiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRMaXF1aWRpdHkodWludDI1NiBfYW1vdW50MCwgdWludDI1NiBfYW1vdW50MSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKHVpbnQyNTYgc2hhcmVzKQogICAgewogICAgICAgIHRva2VuMC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudDApOwogICAgICAgIHRva2VuMS50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudDEpOwoKICAgICAgICAvKgogICAgICAgIEhvdyBtdWNoIGR4LCBkeSB0byBhZGQ/CgogICAgICAgIHh5ID0gawogICAgICAgICh4ICsgZHgpKHkgKyBkeSkgPSBrJwoKICAgICAgICBObyBwcmljZSBjaGFuZ2UsIGJlZm9yZSBhbmQgYWZ0ZXIgYWRkaW5nIGxpcXVpZGl0eQogICAgICAgIHggLyB5ID0gKHggKyBkeCkgLyAoeSArIGR5KQoKICAgICAgICB4KHkgKyBkeSkgPSB5KHggKyBkeCkKICAgICAgICB4ICogZHkgPSB5ICogZHgKCiAgICAgICAgeCAvIHkgPSBkeCAvIGR5CiAgICAgICAgZHkgPSB5IC8geCAqIGR4CiAgICAgICAgKi8KICAgICAgICBpZiAocmVzZXJ2ZTAgPiAwIHx8IHJlc2VydmUxID4gMCkgewogICAgICAgICAgICByZXF1aXJlKAogICAgICAgICAgICAgICAgcmVzZXJ2ZTAgKiBfYW1vdW50MSA9PSByZXNlcnZlMSAqIF9hbW91bnQwLCAieCAvIHkgIT0gZHggLyBkeSIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8qCiAgICAgICAgSG93IG11Y2ggc2hhcmVzIHRvIG1pbnQ/CgogICAgICAgIGYoeCwgeSkgPSB2YWx1ZSBvZiBsaXF1aWRpdHkKICAgICAgICBXZSB3aWxsIGRlZmluZSBmKHgsIHkpID0gc3FydCh4eSkKCiAgICAgICAgTDAgPSBmKHgsIHkpCiAgICAgICAgTDEgPSBmKHggKyBkeCwgeSArIGR5KQogICAgICAgIFQgPSB0b3RhbCBzaGFyZXMKICAgICAgICBzID0gc2hhcmVzIHRvIG1pbnQKCiAgICAgICAgVG90YWwgc2hhcmVzIHNob3VsZCBpbmNyZWFzZSBwcm9wb3J0aW9uYWwgdG8gaW5jcmVhc2UgaW4gbGlxdWlkaXR5CiAgICAgICAgTDEgLyBMMCA9IChUICsgcykgLyBUCgogICAgICAgIEwxICogVCA9IEwwICogKFQgKyBzKQoKICAgICAgICAoTDEgLSBMMCkgKiBUIC8gTDAgPSBzIAogICAgICAgICovCgogICAgICAgIC8qCiAgICAgICAgQ2xhaW0KICAgICAgICAoTDEgLSBMMCkgLyBMMCA9IGR4IC8geCA9IGR5IC8geQoKICAgICAgICBQcm9vZgogICAgICAgIC0tLSBFcXVhdGlvbiAxIC0tLQogICAgICAgIChMMSAtIEwwKSAvIEwwID0gKHNxcnQoKHggKyBkeCkoeSArIGR5KSkgLSBzcXJ0KHh5KSkgLyBzcXJ0KHh5KQogICAgICAgIAogICAgICAgIGR4IC8gZHkgPSB4IC8geSBzbyByZXBsYWNlIGR5ID0gZHggKiB5IC8geAoKICAgICAgICAtLS0gRXF1YXRpb24gMiAtLS0KICAgICAgICBFcXVhdGlvbiAxID0gKHNxcnQoeHkgKyAyeWR4ICsgZHheMiAqIHkgLyB4KSAtIHNxcnQoeHkpKSAvIHNxcnQoeHkpCgogICAgICAgIE11bHRpcGx5IGJ5IHNxcnQoeCkgLyBzcXJ0KHgpCiAgICAgICAgRXF1YXRpb24gMiA9IChzcXJ0KHheMnkgKyAyeHlkeCArIGR4XjIgKiB5KSAtIHNxcnQoeF4yeSkpIC8gc3FydCh4XjJ5KQogICAgICAgICAgICAgICAgICAgPSAoc3FydCh5KShzcXJ0KHheMiArIDJ4ZHggKyBkeF4yKSAtIHNxcnQoeF4yKSkgLyAoc3FydCh5KXNxcnQoeF4yKSkKICAgICAgICAKICAgICAgICBzcXJ0KHkpIG9uIHRvcCBhbmQgYm90dG9tIGNhbmNlbHMgb3V0CgogICAgICAgIC0tLSBFcXVhdGlvbiAzIC0tLQogICAgICAgIEVxdWF0aW9uIDIgPSAoc3FydCh4XjIgKyAyeGR4ICsgZHheMikgLSBzcXJ0KHheMikpIC8gKHNxcnQoeF4yKQogICAgICAgID0gKHNxcnQoKHggKyBkeCleMikgLSBzcXJ0KHheMikpIC8gc3FydCh4XjIpICAKICAgICAgICA9ICgoeCArIGR4KSAtIHgpIC8geAogICAgICAgID0gZHggLyB4CgogICAgICAgIFNpbmNlIGR4IC8gZHkgPSB4IC8geSwKICAgICAgICBkeCAvIHggPSBkeSAvIHkKCiAgICAgICAgRmluYWxseQogICAgICAgIChMMSAtIEwwKSAvIEwwID0gZHggLyB4ID0gZHkgLyB5CiAgICAgICAgKi8KICAgICAgICBpZiAodG90YWxTdXBwbHkgPT0gMCkgewogICAgICAgICAgICBzaGFyZXMgPSBfc3FydChfYW1vdW50MCAqIF9hbW91bnQxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzaGFyZXMgPSBfbWluKAogICAgICAgICAgICAgICAgKF9hbW91bnQwICogdG90YWxTdXBwbHkpIC8gcmVzZXJ2ZTAsCiAgICAgICAgICAgICAgICAoX2Ftb3VudDEgKiB0b3RhbFN1cHBseSkgLyByZXNlcnZlMQogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXF1aXJlKHNoYXJlcyA+IDAsICJzaGFyZXMgPSAwIik7CiAgICAgICAgX21pbnQobXNnLnNlbmRlciwgc2hhcmVzKTsKCiAgICAgICAgX3VwZGF0ZSgKICAgICAgICAgICAgdG9rZW4wLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKSwgdG9rZW4xLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKQogICAgICAgICk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVtb3ZlTGlxdWlkaXR5KHVpbnQyNTYgX3NoYXJlcykKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKHVpbnQyNTYgYW1vdW50MCwgdWludDI1NiBhbW91bnQxKQogICAgewogICAgICAgIC8qCiAgICAgICAgQ2xhaW0KICAgICAgICBkeCwgZHkgPSBhbW91bnQgb2YgbGlxdWlkaXR5IHRvIHJlbW92ZQogICAgICAgIGR4ID0gcyAvIFQgKiB4CiAgICAgICAgZHkgPSBzIC8gVCAqIHkKCiAgICAgICAgUHJvb2YKICAgICAgICBMZXQncyBmaW5kIGR4LCBkeSBzdWNoIHRoYXQKICAgICAgICB2IC8gTCA9IHMgLyBUCiAgICAgICAgCiAgICAgICAgd2hlcmUKICAgICAgICB2ID0gZihkeCwgZHkpID0gc3FydChkeGR5KQogICAgICAgIEwgPSB0b3RhbCBsaXF1aWRpdHkgPSBzcXJ0KHh5KQogICAgICAgIHMgPSBzaGFyZXMKICAgICAgICBUID0gdG90YWwgc3VwcGx5CgogICAgICAgIC0tLSBFcXVhdGlvbiAxIC0tLQogICAgICAgIHYgPSBzIC8gVCAqIEwKICAgICAgICBzcXJ0KGR4ZHkpID0gcyAvIFQgKiBzcXJ0KHh5KQoKICAgICAgICBBbW91bnQgb2YgbGlxdWlkaXR5IHRvIHJlbW92ZSBtdXN0IG5vdCBjaGFuZ2UgcHJpY2Ugc28gCiAgICAgICAgZHggLyBkeSA9IHggLyB5CgogICAgICAgIHJlcGxhY2UgZHkgPSBkeCAqIHkgLyB4CiAgICAgICAgc3FydChkeGR5KSA9IHNxcnQoZHggKiBkeCAqIHkgLyB4KSA9IGR4ICogc3FydCh5IC8geCkKCiAgICAgICAgRGl2aWRlIGJvdGggc2lkZXMgb2YgRXF1YXRpb24gMSB3aXRoIHNxcnQoeSAvIHgpCiAgICAgICAgZHggPSBzIC8gVCAqIHNxcnQoeHkpIC8gc3FydCh5IC8geCkKICAgICAgICAgICA9IHMgLyBUICogc3FydCh4XjIpID0gcyAvIFQgKiB4CgogICAgICAgIExpa2V3aXNlCiAgICAgICAgZHkgPSBzIC8gVCAqIHkKICAgICAgICAqLwoKICAgICAgICAvLyBiYWwwID49IHJlc2VydmUwCiAgICAgICAgLy8gYmFsMSA+PSByZXNlcnZlMQogICAgICAgIHVpbnQyNTYgYmFsMCA9IHRva2VuMC5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSk7CiAgICAgICAgdWludDI1NiBiYWwxID0gdG9rZW4xLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKCiAgICAgICAgYW1vdW50MCA9IChfc2hhcmVzICogYmFsMCkgLyB0b3RhbFN1cHBseTsKICAgICAgICBhbW91bnQxID0gKF9zaGFyZXMgKiBiYWwxKSAvIHRvdGFsU3VwcGx5OwogICAgICAgIHJlcXVpcmUoYW1vdW50MCA+IDAgJiYgYW1vdW50MSA+IDAsICJhbW91bnQwIG9yIGFtb3VudDEgPSAwIik7CgogICAgICAgIF9idXJuKG1zZy5zZW5kZXIsIF9zaGFyZXMpOwogICAgICAgIF91cGRhdGUoYmFsMCAtIGFtb3VudDAsIGJhbDEgLSBhbW91bnQxKTsKCiAgICAgICAgdG9rZW4wLnRyYW5zZmVyKG1zZy5zZW5kZXIsIGFtb3VudDApOwogICAgICAgIHRva2VuMS50cmFuc2Zlcihtc2cuc2VuZGVyLCBhbW91bnQxKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfc3FydCh1aW50MjU2IHkpIHByaXZhdGUgcHVyZSByZXR1cm5zICh1aW50MjU2IHopIHsKICAgICAgICBpZiAoeSA+IDMpIHsKICAgICAgICAgICAgeiA9IHk7CiAgICAgICAgICAgIHVpbnQyNTYgeCA9IHkgLyAyICsgMTsKICAgICAgICAgICAgd2hpbGUgKHggPCB6KSB7CiAgICAgICAgICAgICAgICB6ID0geDsKICAgICAgICAgICAgICAgIHggPSAoeSAvIHggKyB4KSAvIDI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHkgIT0gMCkgewogICAgICAgICAgICB6ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX21pbih1aW50MjU2IHgsIHVpbnQyNTYgeSkgcHJpdmF0ZSBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4geCA8PSB5ID8geCA6IHk7CiAgICB9Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gdG90YWxTdXBwbHkoKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBzZW5kZXIsIGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwp9Cg=="}],qy=`

            Constant product AMM XY = K

            // SPDX-License-Identifier: MIT
             pragma solidity ^0.8.24;
             
            @@ -4131,7 +4131,7 @@ specify the location of the data.

            external returns (bool); } -
            `,sm=({prev:s,next:a})=>i.jsx(u,{version:_A,title:OA,description:PA,html:qA,prev:s,next:a,codes:$A}),am="0.8.24",nm="Constant Sum AMM",lm="Constant sum AMM",pm=[{fileName:"CSAMM.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENTQU1NIHsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuMDsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuMTsKCiAgICB1aW50MjU2IHB1YmxpYyByZXNlcnZlMDsKICAgIHVpbnQyNTYgcHVibGljIHJlc2VydmUxOwoKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4wLCBhZGRyZXNzIF90b2tlbjEpIHsKICAgICAgICAvLyBOT1RFOiBUaGlzIGNvbnRyYWN0IGFzc3VtZXMgdGhhdCB0b2tlbjAgYW5kIHRva2VuMQogICAgICAgIC8vIGJvdGggaGF2ZSBzYW1lIGRlY2ltYWxzCiAgICAgICAgdG9rZW4wID0gSUVSQzIwKF90b2tlbjApOwogICAgICAgIHRva2VuMSA9IElFUkMyMChfdG9rZW4xKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfbWludChhZGRyZXNzIF90bywgdWludDI1NiBfYW1vdW50KSBwcml2YXRlIHsKICAgICAgICBiYWxhbmNlT2ZbX3RvXSArPSBfYW1vdW50OwogICAgICAgIHRvdGFsU3VwcGx5ICs9IF9hbW91bnQ7CiAgICB9CgogICAgZnVuY3Rpb24gX2J1cm4oYWRkcmVzcyBfZnJvbSwgdWludDI1NiBfYW1vdW50KSBwcml2YXRlIHsKICAgICAgICBiYWxhbmNlT2ZbX2Zyb21dIC09IF9hbW91bnQ7CiAgICAgICAgdG90YWxTdXBwbHkgLT0gX2Ftb3VudDsKICAgIH0KCiAgICBmdW5jdGlvbiBfdXBkYXRlKHVpbnQyNTYgX3JlczAsIHVpbnQyNTYgX3JlczEpIHByaXZhdGUgewogICAgICAgIHJlc2VydmUwID0gX3JlczA7CiAgICAgICAgcmVzZXJ2ZTEgPSBfcmVzMTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2FwKGFkZHJlc3MgX3Rva2VuSW4sIHVpbnQyNTYgX2Ftb3VudEluKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpCiAgICB7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgX3Rva2VuSW4gPT0gYWRkcmVzcyh0b2tlbjApIHx8IF90b2tlbkluID09IGFkZHJlc3ModG9rZW4xKSwKICAgICAgICAgICAgImludmFsaWQgdG9rZW4iCiAgICAgICAgKTsKCiAgICAgICAgYm9vbCBpc1Rva2VuMCA9IF90b2tlbkluID09IGFkZHJlc3ModG9rZW4wKTsKCiAgICAgICAgKElFUkMyMCB0b2tlbkluLCBJRVJDMjAgdG9rZW5PdXQsIHVpbnQyNTYgcmVzSW4sIHVpbnQyNTYgcmVzT3V0KSA9CiAgICAgICAgaXNUb2tlbjAKICAgICAgICAgICAgPyAodG9rZW4wLCB0b2tlbjEsIHJlc2VydmUwLCByZXNlcnZlMSkKICAgICAgICAgICAgOiAodG9rZW4xLCB0b2tlbjAsIHJlc2VydmUxLCByZXNlcnZlMCk7CgogICAgICAgIHRva2VuSW4udHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIF9hbW91bnRJbik7CiAgICAgICAgdWludDI1NiBhbW91bnRJbiA9IHRva2VuSW4uYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpIC0gcmVzSW47CgogICAgICAgIC8vIDAuMyUgZmVlCiAgICAgICAgYW1vdW50T3V0ID0gKGFtb3VudEluICogOTk3KSAvIDEwMDA7CgogICAgICAgICh1aW50MjU2IHJlczAsIHVpbnQyNTYgcmVzMSkgPSBpc1Rva2VuMAogICAgICAgICAgICA/IChyZXNJbiArIGFtb3VudEluLCByZXNPdXQgLSBhbW91bnRPdXQpCiAgICAgICAgICAgIDogKHJlc091dCAtIGFtb3VudE91dCwgcmVzSW4gKyBhbW91bnRJbik7CgogICAgICAgIF91cGRhdGUocmVzMCwgcmVzMSk7CiAgICAgICAgdG9rZW5PdXQudHJhbnNmZXIobXNnLnNlbmRlciwgYW1vdW50T3V0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRMaXF1aWRpdHkodWludDI1NiBfYW1vdW50MCwgdWludDI1NiBfYW1vdW50MSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKHVpbnQyNTYgc2hhcmVzKQogICAgewogICAgICAgIHRva2VuMC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudDApOwogICAgICAgIHRva2VuMS50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudDEpOwoKICAgICAgICB1aW50MjU2IGJhbDAgPSB0b2tlbjAuYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpOwogICAgICAgIHVpbnQyNTYgYmFsMSA9IHRva2VuMS5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSk7CgogICAgICAgIHVpbnQyNTYgZDAgPSBiYWwwIC0gcmVzZXJ2ZTA7CiAgICAgICAgdWludDI1NiBkMSA9IGJhbDEgLSByZXNlcnZlMTsKCiAgICAgICAgLyoKICAgICAgICBhID0gYW1vdW50IGluCiAgICAgICAgTCA9IHRvdGFsIGxpcXVpZGl0eQogICAgICAgIHMgPSBzaGFyZXMgdG8gbWludAogICAgICAgIFQgPSB0b3RhbCBzdXBwbHkKCiAgICAgICAgcyBzaG91bGQgYmUgcHJvcG9ydGlvbmFsIHRvIGluY3JlYXNlIGZyb20gTCB0byBMICsgYQogICAgICAgIChMICsgYSkgLyBMID0gKFQgKyBzKSAvIFQKCiAgICAgICAgcyA9IGEgKiBUIC8gTAogICAgICAgICovCiAgICAgICAgaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgICAgICAgICBzaGFyZXMgPSAoKGQwICsgZDEpICogdG90YWxTdXBwbHkpIC8gKHJlc2VydmUwICsgcmVzZXJ2ZTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNoYXJlcyA9IGQwICsgZDE7CiAgICAgICAgfQoKICAgICAgICByZXF1aXJlKHNoYXJlcyA+IDAsICJzaGFyZXMgPSAwIik7CiAgICAgICAgX21pbnQobXNnLnNlbmRlciwgc2hhcmVzKTsKCiAgICAgICAgX3VwZGF0ZShiYWwwLCBiYWwxKTsKICAgIH0KCiAgICBmdW5jdGlvbiByZW1vdmVMaXF1aWRpdHkodWludDI1NiBfc2hhcmVzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBkMCwgdWludDI1NiBkMSkKICAgIHsKICAgICAgICAvKgogICAgICAgIGEgPSBhbW91bnQgb3V0CiAgICAgICAgTCA9IHRvdGFsIGxpcXVpZGl0eQogICAgICAgIHMgPSBzaGFyZXMKICAgICAgICBUID0gdG90YWwgc3VwcGx5CgogICAgICAgIGEgLyBMID0gcyAvIFQKCiAgICAgICAgYSA9IEwgKiBzIC8gVAogICAgICAgICAgPSAocmVzZXJ2ZTAgKyByZXNlcnZlMSkgKiBzIC8gVAogICAgICAgICovCiAgICAgICAgZDAgPSAocmVzZXJ2ZTAgKiBfc2hhcmVzKSAvIHRvdGFsU3VwcGx5OwogICAgICAgIGQxID0gKHJlc2VydmUxICogX3NoYXJlcykgLyB0b3RhbFN1cHBseTsKCiAgICAgICAgX2J1cm4obXNnLnNlbmRlciwgX3NoYXJlcyk7CiAgICAgICAgX3VwZGF0ZShyZXNlcnZlMCAtIGQwLCByZXNlcnZlMSAtIGQxKTsKCiAgICAgICAgaWYgKGQwID4gMCkgewogICAgICAgICAgICB0b2tlbjAudHJhbnNmZXIobXNnLnNlbmRlciwgZDApOwogICAgICAgIH0KICAgICAgICBpZiAoZDEgPiAwKSB7CiAgICAgICAgICAgIHRva2VuMS50cmFuc2Zlcihtc2cuc2VuZGVyLCBkMSk7CiAgICAgICAgfQogICAgfQp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIHRvdGFsU3VwcGx5KCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIGFsbG93YW5jZShhZGRyZXNzIG93bmVyLCBhZGRyZXNzIHNwZW5kZXIpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc2VuZGVyLCBhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKfQo="}],em=`

            Constant sum AMM X + Y = K

            +`,sm=({prev:s,next:a})=>i.jsx(u,{version:_y,title:Oy,description:Py,html:qy,prev:s,next:a,codes:$y}),am="0.8.24",nm="Constant Sum AMM",lm="Constant sum AMM",pm=[{fileName:"CSAMM.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENTQU1NIHsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuMDsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuMTsKCiAgICB1aW50MjU2IHB1YmxpYyByZXNlcnZlMDsKICAgIHVpbnQyNTYgcHVibGljIHJlc2VydmUxOwoKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4wLCBhZGRyZXNzIF90b2tlbjEpIHsKICAgICAgICAvLyBOT1RFOiBUaGlzIGNvbnRyYWN0IGFzc3VtZXMgdGhhdCB0b2tlbjAgYW5kIHRva2VuMQogICAgICAgIC8vIGJvdGggaGF2ZSBzYW1lIGRlY2ltYWxzCiAgICAgICAgdG9rZW4wID0gSUVSQzIwKF90b2tlbjApOwogICAgICAgIHRva2VuMSA9IElFUkMyMChfdG9rZW4xKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfbWludChhZGRyZXNzIF90bywgdWludDI1NiBfYW1vdW50KSBwcml2YXRlIHsKICAgICAgICBiYWxhbmNlT2ZbX3RvXSArPSBfYW1vdW50OwogICAgICAgIHRvdGFsU3VwcGx5ICs9IF9hbW91bnQ7CiAgICB9CgogICAgZnVuY3Rpb24gX2J1cm4oYWRkcmVzcyBfZnJvbSwgdWludDI1NiBfYW1vdW50KSBwcml2YXRlIHsKICAgICAgICBiYWxhbmNlT2ZbX2Zyb21dIC09IF9hbW91bnQ7CiAgICAgICAgdG90YWxTdXBwbHkgLT0gX2Ftb3VudDsKICAgIH0KCiAgICBmdW5jdGlvbiBfdXBkYXRlKHVpbnQyNTYgX3JlczAsIHVpbnQyNTYgX3JlczEpIHByaXZhdGUgewogICAgICAgIHJlc2VydmUwID0gX3JlczA7CiAgICAgICAgcmVzZXJ2ZTEgPSBfcmVzMTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2FwKGFkZHJlc3MgX3Rva2VuSW4sIHVpbnQyNTYgX2Ftb3VudEluKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpCiAgICB7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgX3Rva2VuSW4gPT0gYWRkcmVzcyh0b2tlbjApIHx8IF90b2tlbkluID09IGFkZHJlc3ModG9rZW4xKSwKICAgICAgICAgICAgImludmFsaWQgdG9rZW4iCiAgICAgICAgKTsKCiAgICAgICAgYm9vbCBpc1Rva2VuMCA9IF90b2tlbkluID09IGFkZHJlc3ModG9rZW4wKTsKCiAgICAgICAgKElFUkMyMCB0b2tlbkluLCBJRVJDMjAgdG9rZW5PdXQsIHVpbnQyNTYgcmVzSW4sIHVpbnQyNTYgcmVzT3V0KSA9CiAgICAgICAgaXNUb2tlbjAKICAgICAgICAgICAgPyAodG9rZW4wLCB0b2tlbjEsIHJlc2VydmUwLCByZXNlcnZlMSkKICAgICAgICAgICAgOiAodG9rZW4xLCB0b2tlbjAsIHJlc2VydmUxLCByZXNlcnZlMCk7CgogICAgICAgIHRva2VuSW4udHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIF9hbW91bnRJbik7CiAgICAgICAgdWludDI1NiBhbW91bnRJbiA9IHRva2VuSW4uYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpIC0gcmVzSW47CgogICAgICAgIC8vIDAuMyUgZmVlCiAgICAgICAgYW1vdW50T3V0ID0gKGFtb3VudEluICogOTk3KSAvIDEwMDA7CgogICAgICAgICh1aW50MjU2IHJlczAsIHVpbnQyNTYgcmVzMSkgPSBpc1Rva2VuMAogICAgICAgICAgICA/IChyZXNJbiArIGFtb3VudEluLCByZXNPdXQgLSBhbW91bnRPdXQpCiAgICAgICAgICAgIDogKHJlc091dCAtIGFtb3VudE91dCwgcmVzSW4gKyBhbW91bnRJbik7CgogICAgICAgIF91cGRhdGUocmVzMCwgcmVzMSk7CiAgICAgICAgdG9rZW5PdXQudHJhbnNmZXIobXNnLnNlbmRlciwgYW1vdW50T3V0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRMaXF1aWRpdHkodWludDI1NiBfYW1vdW50MCwgdWludDI1NiBfYW1vdW50MSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKHVpbnQyNTYgc2hhcmVzKQogICAgewogICAgICAgIHRva2VuMC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudDApOwogICAgICAgIHRva2VuMS50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudDEpOwoKICAgICAgICB1aW50MjU2IGJhbDAgPSB0b2tlbjAuYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpOwogICAgICAgIHVpbnQyNTYgYmFsMSA9IHRva2VuMS5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSk7CgogICAgICAgIHVpbnQyNTYgZDAgPSBiYWwwIC0gcmVzZXJ2ZTA7CiAgICAgICAgdWludDI1NiBkMSA9IGJhbDEgLSByZXNlcnZlMTsKCiAgICAgICAgLyoKICAgICAgICBhID0gYW1vdW50IGluCiAgICAgICAgTCA9IHRvdGFsIGxpcXVpZGl0eQogICAgICAgIHMgPSBzaGFyZXMgdG8gbWludAogICAgICAgIFQgPSB0b3RhbCBzdXBwbHkKCiAgICAgICAgcyBzaG91bGQgYmUgcHJvcG9ydGlvbmFsIHRvIGluY3JlYXNlIGZyb20gTCB0byBMICsgYQogICAgICAgIChMICsgYSkgLyBMID0gKFQgKyBzKSAvIFQKCiAgICAgICAgcyA9IGEgKiBUIC8gTAogICAgICAgICovCiAgICAgICAgaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgICAgICAgICBzaGFyZXMgPSAoKGQwICsgZDEpICogdG90YWxTdXBwbHkpIC8gKHJlc2VydmUwICsgcmVzZXJ2ZTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNoYXJlcyA9IGQwICsgZDE7CiAgICAgICAgfQoKICAgICAgICByZXF1aXJlKHNoYXJlcyA+IDAsICJzaGFyZXMgPSAwIik7CiAgICAgICAgX21pbnQobXNnLnNlbmRlciwgc2hhcmVzKTsKCiAgICAgICAgX3VwZGF0ZShiYWwwLCBiYWwxKTsKICAgIH0KCiAgICBmdW5jdGlvbiByZW1vdmVMaXF1aWRpdHkodWludDI1NiBfc2hhcmVzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBkMCwgdWludDI1NiBkMSkKICAgIHsKICAgICAgICAvKgogICAgICAgIGEgPSBhbW91bnQgb3V0CiAgICAgICAgTCA9IHRvdGFsIGxpcXVpZGl0eQogICAgICAgIHMgPSBzaGFyZXMKICAgICAgICBUID0gdG90YWwgc3VwcGx5CgogICAgICAgIGEgLyBMID0gcyAvIFQKCiAgICAgICAgYSA9IEwgKiBzIC8gVAogICAgICAgICAgPSAocmVzZXJ2ZTAgKyByZXNlcnZlMSkgKiBzIC8gVAogICAgICAgICovCiAgICAgICAgZDAgPSAocmVzZXJ2ZTAgKiBfc2hhcmVzKSAvIHRvdGFsU3VwcGx5OwogICAgICAgIGQxID0gKHJlc2VydmUxICogX3NoYXJlcykgLyB0b3RhbFN1cHBseTsKCiAgICAgICAgX2J1cm4obXNnLnNlbmRlciwgX3NoYXJlcyk7CiAgICAgICAgX3VwZGF0ZShyZXNlcnZlMCAtIGQwLCByZXNlcnZlMSAtIGQxKTsKCiAgICAgICAgaWYgKGQwID4gMCkgewogICAgICAgICAgICB0b2tlbjAudHJhbnNmZXIobXNnLnNlbmRlciwgZDApOwogICAgICAgIH0KICAgICAgICBpZiAoZDEgPiAwKSB7CiAgICAgICAgICAgIHRva2VuMS50cmFuc2Zlcihtc2cuc2VuZGVyLCBkMSk7CiAgICAgICAgfQogICAgfQp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIHRvdGFsU3VwcGx5KCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIGFsbG93YW5jZShhZGRyZXNzIG93bmVyLCBhZGRyZXNzIHNwZW5kZXIpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc2VuZGVyLCBhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKfQo="}],em=`

            Constant sum AMM X + Y = K

            Tokens trade one to one.

            // SPDX-License-Identifier: MIT
             pragma solidity ^0.8.24;
            @@ -4612,7 +4612,7 @@ specify the location of the data.

            external returns (bool); } -
            `,ym=({prev:s,next:a})=>i.jsx(u,{version:dm,title:Im,description:Cm,html:um,prev:s,next:a,codes:jm}),Am="0.8.24",mm="Stable Swap AMM",bm="Curve's stable swap AMM",wm=[{fileName:"StableSwap.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCkludmFyaWFudCAtIHByaWNlIG9mIHRyYWRlIGFuZCBhbW91bnQgb2YgbGlxdWlkaXR5IGFyZSBkZXRlcm1pbmVkIGJ5IHRoaXMgZXF1YXRpb24KCkFuXm4gc3VtKHhfaSkgKyBEID0gQURuXm4gKyBEXihuICsgMSkgLyAobl5uIHByb2QoeF9pKSkKClRvcGljcwowLiBOZXd0b24ncyBtZXRob2QgeF8obiArIDEpID0geF9uIC0gZih4X24pIC8gZicoeF9uKQoxLiBJbnZhcmlhbnQKMi4gU3dhcAogICAtIENhbGN1bGF0ZSBZCiAgIC0gQ2FsY3VsYXRlIEQKMy4gR2V0IHZpcnR1YWwgcHJpY2UKNC4gQWRkIGxpcXVpZGl0eQogICAtIEltYmFsYW5jZSBmZWUKNS4gUmVtb3ZlIGxpcXVpZGl0eQo2LiBSZW1vdmUgbGlxdWlkaXR5IG9uZSB0b2tlbgogICAtIENhbGN1bGF0ZSB3aXRoZHJhdyBvbmUgdG9rZW4KICAgLSBnZXRZRApUT0RPOiB0ZXN0PwoqLwoKbGlicmFyeSBNYXRoIHsKICAgIGZ1bmN0aW9uIGFicyh1aW50MjU2IHgsIHVpbnQyNTYgeSkgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIHggPj0geSA/IHggLSB5IDogeSAtIHg7CiAgICB9Cn0KCmNvbnRyYWN0IFN0YWJsZVN3YXAgewogICAgLy8gTnVtYmVyIG9mIHRva2VucwogICAgdWludDI1NiBwcml2YXRlIGNvbnN0YW50IE4gPSAzOwogICAgLy8gQW1wbGlmaWNhdGlvbiBjb2VmZmljaWVudCBtdWx0aXBsaWVkIGJ5IE5eKE4gLSAxKQogICAgLy8gSGlnaGVyIHZhbHVlIG1ha2VzIHRoZSBjdXJ2ZSBtb3JlIGZsYXQKICAgIC8vIExvd2VyIHZhbHVlIG1ha2VzIHRoZSBjdXJ2ZSBtb3JlIGxpa2UgY29uc3RhbnQgcHJvZHVjdCBBTU0KICAgIHVpbnQyNTYgcHJpdmF0ZSBjb25zdGFudCBBID0gMTAwMCAqIChOICoqIChOIC0gMSkpOwogICAgLy8gMC4wMyUKICAgIHVpbnQyNTYgcHJpdmF0ZSBjb25zdGFudCBTV0FQX0ZFRSA9IDMwMDsKICAgIC8vIExpcXVpZGl0eSBmZWUgaXMgZGVyaXZlZCBmcm9tIDIgY29uc3RyYWludHMKICAgIC8vIDEuIEZlZSBpcyAwIGZvciBhZGRpbmcgLyByZW1vdmluZyBsaXF1aWRpdHkgdGhhdCByZXN1bHRzIGluIGEgYmFsYW5jZWQgcG9vbAogICAgLy8gMi4gU3dhcHBpbmcgaW4gYSBiYWxhbmNlZCBwb29sIGlzIGxpa2UgYWRkaW5nIGFuZCB0aGVuIHJlbW92aW5nIGxpcXVpZGl0eQogICAgLy8gICAgZnJvbSBhIGJhbGFuY2VkIHBvb2wKICAgIC8vIHN3YXAgZmVlID0gYWRkIGxpcXVpZGl0eSBmZWUgKyByZW1vdmUgbGlxdWlkaXR5IGZlZQogICAgdWludDI1NiBwcml2YXRlIGNvbnN0YW50IExJUVVJRElUWV9GRUUgPSAoU1dBUF9GRUUgKiBOKSAvICg0ICogKE4gLSAxKSk7CiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgRkVFX0RFTk9NSU5BVE9SID0gMWU2OwoKICAgIGFkZHJlc3NbTl0gcHVibGljIHRva2VuczsKICAgIC8vIE5vcm1hbGl6ZSBlYWNoIHRva2VuIHRvIDE4IGRlY2ltYWxzCiAgICAvLyBFeGFtcGxlIC0gREFJICgxOCBkZWNpbWFscyksIFVTREMgKDYgZGVjaW1hbHMpLCBVU0RUICg2IGRlY2ltYWxzKQogICAgdWludDI1NltOXSBwcml2YXRlIG11bHRpcGxpZXJzID0gWzEsIDFlMTIsIDFlMTJdOwogICAgdWludDI1NltOXSBwdWJsaWMgYmFsYW5jZXM7CgogICAgLy8gMSBzaGFyZSA9IDFlMTgsIDE4IGRlY2ltYWxzCiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgREVDSU1BTFMgPSAxODsKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzc1tOXSBtZW1vcnkgX3Rva2VucykgewogICAgICAgIHRva2VucyA9IF90b2tlbnM7CiAgICB9CgogICAgZnVuY3Rpb24gX21pbnQoYWRkcmVzcyBfdG8sIHVpbnQyNTYgX2Ftb3VudCkgcHJpdmF0ZSB7CiAgICAgICAgYmFsYW5jZU9mW190b10gKz0gX2Ftb3VudDsKICAgICAgICB0b3RhbFN1cHBseSArPSBfYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIF9idXJuKGFkZHJlc3MgX2Zyb20sIHVpbnQyNTYgX2Ftb3VudCkgcHJpdmF0ZSB7CiAgICAgICAgYmFsYW5jZU9mW19mcm9tXSAtPSBfYW1vdW50OwogICAgICAgIHRvdGFsU3VwcGx5IC09IF9hbW91bnQ7CiAgICB9CgogICAgLy8gUmV0dXJuIHByZWNpc2lvbi1hZGp1c3RlZCBiYWxhbmNlcywgYWRqdXN0ZWQgdG8gMTggZGVjaW1hbHMKICAgIGZ1bmN0aW9uIF94cCgpIHByaXZhdGUgdmlldyByZXR1cm5zICh1aW50MjU2W05dIG1lbW9yeSB4cCkgewogICAgICAgIGZvciAodWludDI1NiBpOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgIHhwW2ldID0gYmFsYW5jZXNbaV0gKiBtdWx0aXBsaWVyc1tpXTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90aWNlIENhbGN1bGF0ZSBELCBzdW0gb2YgYmFsYW5jZXMgaW4gYSBwZXJmZWN0bHkgYmFsYW5jZWQgcG9vbAogICAgICogSWYgYmFsYW5jZXMgb2YgeF8wLCB4XzEsIC4uLiB4XyhuLTEpIHRoZW4gc3VtKHhfaSkgPSBECiAgICAgKiBAcGFyYW0geHAgUHJlY2lzaW9uLWFkanVzdGVkIGJhbGFuY2VzCiAgICAgKiBAcmV0dXJuIEQKICAgICAqLwogICAgZnVuY3Rpb24gX2dldEQodWludDI1NltOXSBtZW1vcnkgeHApIHByaXZhdGUgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgLyoKICAgICAgICBOZXd0b24ncyBtZXRob2QgdG8gY29tcHV0ZSBECiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBmKEQpID0gQURuXm4gKyBEXihuICsgMSkgLyAobl5uIHByb2QoeF9pKSkgLSBBbl5uIHN1bSh4X2kpIC0gRCAKICAgICAgICBmJyhEKSA9IEFuXm4gKyAobiArIDEpIERebiAvIChuXm4gcHJvZCh4X2kpKSAtIDEKCiAgICAgICAgICAgICAgICAgICAgIChhcyArIG5wKURfbgogICAgICAgIERfKG4rMSkgPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAoYSAtIDEpRF9uICsgKG4gKyAxKXAKCiAgICAgICAgYSA9IEFuXm4KICAgICAgICBzID0gc3VtKHhfaSkKICAgICAgICBwID0gKERfbileKG4gKyAxKSAvIChuXm4gcHJvZCh4X2kpKQogICAgICAgICovCiAgICAgICAgdWludDI1NiBhID0gQSAqIE47IC8vIEFuXm4KCiAgICAgICAgdWludDI1NiBzOyAvLyB4XzAgKyB4XzEgKyAuLi4gKyB4XyhuLTEpCiAgICAgICAgZm9yICh1aW50MjU2IGk7IGkgPCBOOyArK2kpIHsKICAgICAgICAgICAgcyArPSB4cFtpXTsKICAgICAgICB9CgogICAgICAgIC8vIE5ld3RvbidzIG1ldGhvZAogICAgICAgIC8vIEluaXRpYWwgZ3Vlc3MsIGQgPD0gcwogICAgICAgIHVpbnQyNTYgZCA9IHM7CiAgICAgICAgdWludDI1NiBkX3ByZXY7CiAgICAgICAgZm9yICh1aW50MjU2IGk7IGkgPCAyNTU7ICsraSkgewogICAgICAgICAgICAvLyBwID0gRF4obiArIDEpIC8gKG5ebiAqIHhfMCAqIC4uLiAqIHhfKG4tMSkpCiAgICAgICAgICAgIHVpbnQyNTYgcCA9IGQ7CiAgICAgICAgICAgIGZvciAodWludDI1NiBqOyBqIDwgTjsgKytqKSB7CiAgICAgICAgICAgICAgICBwID0gKHAgKiBkKSAvIChOICogeHBbal0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRfcHJldiA9IGQ7CiAgICAgICAgICAgIGQgPSAoKGEgKiBzICsgTiAqIHApICogZCkgLyAoKGEgLSAxKSAqIGQgKyAoTiArIDEpICogcCk7CgogICAgICAgICAgICBpZiAoTWF0aC5hYnMoZCwgZF9wcmV2KSA8PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXZlcnQoIkQgZGlkbid0IGNvbnZlcmdlIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90aWNlIENhbGN1bGF0ZSB0aGUgbmV3IGJhbGFuY2Ugb2YgdG9rZW4gaiBnaXZlbiB0aGUgbmV3IGJhbGFuY2Ugb2YgdG9rZW4gaQogICAgICogQHBhcmFtIGkgSW5kZXggb2YgdG9rZW4gaW4KICAgICAqIEBwYXJhbSBqIEluZGV4IG9mIHRva2VuIG91dAogICAgICogQHBhcmFtIHggTmV3IGJhbGFuY2Ugb2YgdG9rZW4gaQogICAgICogQHBhcmFtIHhwIEN1cnJlbnQgcHJlY2lzaW9uLWFkanVzdGVkIGJhbGFuY2VzCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9nZXRZKHVpbnQyNTYgaSwgdWludDI1NiBqLCB1aW50MjU2IHgsIHVpbnQyNTZbTl0gbWVtb3J5IHhwKQogICAgICAgIHByaXZhdGUKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAodWludDI1NikKICAgIHsKICAgICAgICAvKgogICAgICAgIE5ld3RvbidzIG1ldGhvZCB0byBjb21wdXRlIHkKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHkgPSB4X2oKCiAgICAgICAgZih5KSA9IHleMiArIHkoYiAtIEQpIC0gYwoKICAgICAgICAgICAgICAgICAgICB5X25eMiArIGMKICAgICAgICB5XyhuKzEpID0gLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgIDJ5X24gKyBiIC0gRAoKICAgICAgICB3aGVyZQogICAgICAgIHMgPSBzdW0oeF9rKSwgayAhPSBqCiAgICAgICAgcCA9IHByb2QoeF9rKSwgayAhPSBqCiAgICAgICAgYiA9IHMgKyBEIC8gKEFuXm4pCiAgICAgICAgYyA9IEReKG4gKyAxKSAvIChuXm4gKiBwICogQW5ebikKICAgICAgICAqLwogICAgICAgIHVpbnQyNTYgYSA9IEEgKiBOOwogICAgICAgIHVpbnQyNTYgZCA9IF9nZXREKHhwKTsKICAgICAgICB1aW50MjU2IHM7CiAgICAgICAgdWludDI1NiBjID0gZDsKCiAgICAgICAgdWludDI1NiBfeDsKICAgICAgICBmb3IgKHVpbnQyNTYgazsgayA8IE47ICsraykgewogICAgICAgICAgICBpZiAoayA9PSBpKSB7CiAgICAgICAgICAgICAgICBfeCA9IHg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoayA9PSBqKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF94ID0geHBba107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHMgKz0gX3g7CiAgICAgICAgICAgIGMgPSAoYyAqIGQpIC8gKE4gKiBfeCk7CiAgICAgICAgfQogICAgICAgIGMgPSAoYyAqIGQpIC8gKE4gKiBhKTsKICAgICAgICB1aW50MjU2IGIgPSBzICsgZCAvIGE7CgogICAgICAgIC8vIE5ld3RvbidzIG1ldGhvZAogICAgICAgIHVpbnQyNTYgeV9wcmV2OwogICAgICAgIC8vIEluaXRpYWwgZ3Vlc3MsIHkgPD0gZAogICAgICAgIHVpbnQyNTYgeSA9IGQ7CiAgICAgICAgZm9yICh1aW50MjU2IF9pOyBfaSA8IDI1NTsgKytfaSkgewogICAgICAgICAgICB5X3ByZXYgPSB5OwogICAgICAgICAgICB5ID0gKHkgKiB5ICsgYykgLyAoMiAqIHkgKyBiIC0gZCk7CiAgICAgICAgICAgIGlmIChNYXRoLmFicyh5LCB5X3ByZXYpIDw9IDEpIHsKICAgICAgICAgICAgICAgIHJldHVybiB5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldmVydCgieSBkaWRuJ3QgY29udmVyZ2UiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBub3RpY2UgQ2FsY3VsYXRlIHRoZSBuZXcgYmFsYW5jZSBvZiB0b2tlbiBpIGdpdmVuIHByZWNpc2lvbi1hZGp1c3RlZAogICAgICogYmFsYW5jZXMgeHAgYW5kIGxpcXVpZGl0eSBkCiAgICAgKiBAZGV2IEVxdWF0aW9uIGlzIGNhbGN1bGF0ZSB5IGlzIHNhbWUgYXMgX2dldFkKICAgICAqIEBwYXJhbSBpIEluZGV4IG9mIHRva2VuIHRvIGNhbGN1bGF0ZSB0aGUgbmV3IGJhbGFuY2UKICAgICAqIEBwYXJhbSB4cCBQcmVjaXNpb24tYWRqdXN0ZWQgYmFsYW5jZXMKICAgICAqIEBwYXJhbSBkIExpcXVpZGl0eSBkCiAgICAgKiBAcmV0dXJuIE5ldyBiYWxhbmNlIG9mIHRva2VuIGkKICAgICAqLwogICAgZnVuY3Rpb24gX2dldFlEKHVpbnQyNTYgaSwgdWludDI1NltOXSBtZW1vcnkgeHAsIHVpbnQyNTYgZCkKICAgICAgICBwcml2YXRlCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgdWludDI1NiBhID0gQSAqIE47CiAgICAgICAgdWludDI1NiBzOwogICAgICAgIHVpbnQyNTYgYyA9IGQ7CgogICAgICAgIHVpbnQyNTYgX3g7CiAgICAgICAgZm9yICh1aW50MjU2IGs7IGsgPCBOOyArK2spIHsKICAgICAgICAgICAgaWYgKGsgIT0gaSkgewogICAgICAgICAgICAgICAgX3ggPSB4cFtrXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzICs9IF94OwogICAgICAgICAgICBjID0gKGMgKiBkKSAvIChOICogX3gpOwogICAgICAgIH0KICAgICAgICBjID0gKGMgKiBkKSAvIChOICogYSk7CiAgICAgICAgdWludDI1NiBiID0gcyArIGQgLyBhOwoKICAgICAgICAvLyBOZXd0b24ncyBtZXRob2QKICAgICAgICB1aW50MjU2IHlfcHJldjsKICAgICAgICAvLyBJbml0aWFsIGd1ZXNzLCB5IDw9IGQKICAgICAgICB1aW50MjU2IHkgPSBkOwogICAgICAgIGZvciAodWludDI1NiBfaTsgX2kgPCAyNTU7ICsrX2kpIHsKICAgICAgICAgICAgeV9wcmV2ID0geTsKICAgICAgICAgICAgeSA9ICh5ICogeSArIGMpIC8gKDIgKiB5ICsgYiAtIGQpOwogICAgICAgICAgICBpZiAoTWF0aC5hYnMoeSwgeV9wcmV2KSA8PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4geTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXZlcnQoInkgZGlkbid0IGNvbnZlcmdlIik7CiAgICB9CgogICAgLy8gRXN0aW1hdGUgdmFsdWUgb2YgMSBzaGFyZQogICAgLy8gSG93IG1hbnkgdG9rZW5zIGlzIG9uZSBzaGFyZSB3b3J0aD8KICAgIGZ1bmN0aW9uIGdldFZpcnR1YWxQcmljZSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHVpbnQyNTYgZCA9IF9nZXREKF94cCgpKTsKICAgICAgICB1aW50MjU2IF90b3RhbFN1cHBseSA9IHRvdGFsU3VwcGx5OwogICAgICAgIGlmIChfdG90YWxTdXBwbHkgPiAwKSB7CiAgICAgICAgICAgIHJldHVybiAoZCAqIDEwICoqIERFQ0lNQUxTKSAvIF90b3RhbFN1cHBseTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90aWNlIFN3YXAgZHggYW1vdW50IG9mIHRva2VuIGkgZm9yIHRva2VuIGoKICAgICAqIEBwYXJhbSBpIEluZGV4IG9mIHRva2VuIGluCiAgICAgKiBAcGFyYW0gaiBJbmRleCBvZiB0b2tlbiBvdXQKICAgICAqIEBwYXJhbSBkeCBUb2tlbiBpbiBhbW91bnQKICAgICAqIEBwYXJhbSBtaW5EeSBNaW5pbXVtIHRva2VuIG91dAogICAgICovCiAgICBmdW5jdGlvbiBzd2FwKHVpbnQyNTYgaSwgdWludDI1NiBqLCB1aW50MjU2IGR4LCB1aW50MjU2IG1pbkR5KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBkeSkKICAgIHsKICAgICAgICByZXF1aXJlKGkgIT0gaiwgImkgPSBqIik7CgogICAgICAgIElFUkMyMCh0b2tlbnNbaV0pLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBkeCk7CgogICAgICAgIC8vIENhbGN1bGF0ZSBkeQogICAgICAgIHVpbnQyNTZbTl0gbWVtb3J5IHhwID0gX3hwKCk7CiAgICAgICAgdWludDI1NiB4ID0geHBbaV0gKyBkeCAqIG11bHRpcGxpZXJzW2ldOwoKICAgICAgICB1aW50MjU2IHkwID0geHBbal07CiAgICAgICAgdWludDI1NiB5MSA9IF9nZXRZKGksIGosIHgsIHhwKTsKICAgICAgICAvLyB5MCBtdXN0IGJlID49IHkxLCBzaW5jZSB4IGhhcyBpbmNyZWFzZWQKICAgICAgICAvLyAtMSB0byByb3VuZCBkb3duCiAgICAgICAgZHkgPSAoeTAgLSB5MSAtIDEpIC8gbXVsdGlwbGllcnNbal07CgogICAgICAgIC8vIFN1YnRyYWN0IGZlZSBmcm9tIGR5CiAgICAgICAgdWludDI1NiBmZWUgPSAoZHkgKiBTV0FQX0ZFRSkgLyBGRUVfREVOT01JTkFUT1I7CiAgICAgICAgZHkgLT0gZmVlOwogICAgICAgIHJlcXVpcmUoZHkgPj0gbWluRHksICJkeSA8IG1pbiIpOwoKICAgICAgICBiYWxhbmNlc1tpXSArPSBkeDsKICAgICAgICBiYWxhbmNlc1tqXSAtPSBkeTsKCiAgICAgICAgSUVSQzIwKHRva2Vuc1tqXSkudHJhbnNmZXIobXNnLnNlbmRlciwgZHkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZExpcXVpZGl0eSh1aW50MjU2W05dIGNhbGxkYXRhIGFtb3VudHMsIHVpbnQyNTYgbWluU2hhcmVzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBzaGFyZXMpCiAgICB7CiAgICAgICAgLy8gY2FsY3VsYXRlIGN1cnJlbnQgbGlxdWlkaXR5IGQwCiAgICAgICAgdWludDI1NiBfdG90YWxTdXBwbHkgPSB0b3RhbFN1cHBseTsKICAgICAgICB1aW50MjU2IGQwOwogICAgICAgIHVpbnQyNTZbTl0gbWVtb3J5IG9sZF94cyA9IF94cCgpOwogICAgICAgIGlmIChfdG90YWxTdXBwbHkgPiAwKSB7CiAgICAgICAgICAgIGQwID0gX2dldEQob2xkX3hzKTsKICAgICAgICB9CgogICAgICAgIC8vIFRyYW5zZmVyIHRva2VucyBpbgogICAgICAgIHVpbnQyNTZbTl0gbWVtb3J5IG5ld194czsKICAgICAgICBmb3IgKHVpbnQyNTYgaTsgaSA8IE47ICsraSkgewogICAgICAgICAgICB1aW50MjU2IGFtb3VudCA9IGFtb3VudHNbaV07CiAgICAgICAgICAgIGlmIChhbW91bnQgPiAwKSB7CiAgICAgICAgICAgICAgICBJRVJDMjAodG9rZW5zW2ldKS50cmFuc2ZlckZyb20oCiAgICAgICAgICAgICAgICAgICAgbXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV3X3hzW2ldID0gb2xkX3hzW2ldICsgYW1vdW50ICogbXVsdGlwbGllcnNbaV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuZXdfeHNbaV0gPSBvbGRfeHNbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgbGlxdWlkaXR5IGQxCiAgICAgICAgdWludDI1NiBkMSA9IF9nZXREKG5ld194cyk7CiAgICAgICAgcmVxdWlyZShkMSA+IGQwLCAibGlxdWlkaXR5IGRpZG4ndCBpbmNyZWFzZSIpOwoKICAgICAgICAvLyBSZWNjYWxjdWF0ZSBEIGFjY291bnRpbmcgZm9yIGZlZSBvbiBpbWJhbGFuY2UKICAgICAgICB1aW50MjU2IGQyOwogICAgICAgIGlmIChfdG90YWxTdXBwbHkgPiAwKSB7CiAgICAgICAgICAgIGZvciAodWludDI1NiBpOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgICAgICAvLyBUT0RPOiB3aHkgb2xkX3hzW2ldICogZDEgLyBkMD8gd2h5IG5vdCBkMSAvIE4/CiAgICAgICAgICAgICAgICB1aW50MjU2IGlkZWFsQmFsYW5jZSA9IChvbGRfeHNbaV0gKiBkMSkgLyBkMDsKICAgICAgICAgICAgICAgIHVpbnQyNTYgZGlmZiA9IE1hdGguYWJzKG5ld194c1tpXSwgaWRlYWxCYWxhbmNlKTsKICAgICAgICAgICAgICAgIG5ld194c1tpXSAtPSAoTElRVUlESVRZX0ZFRSAqIGRpZmYpIC8gRkVFX0RFTk9NSU5BVE9SOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkMiA9IF9nZXREKG5ld194cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZDIgPSBkMTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSBiYWxhbmNlcwogICAgICAgIGZvciAodWludDI1NiBpOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgIGJhbGFuY2VzW2ldICs9IGFtb3VudHNbaV07CiAgICAgICAgfQoKICAgICAgICAvLyBTaGFyZXMgdG8gbWludCA9IChkMiAtIGQwKSAvIGQwICogdG90YWwgc3VwcGx5CiAgICAgICAgLy8gZDEgPj0gZDIgPj0gZDAKICAgICAgICBpZiAoX3RvdGFsU3VwcGx5ID4gMCkgewogICAgICAgICAgICBzaGFyZXMgPSAoKGQyIC0gZDApICogX3RvdGFsU3VwcGx5KSAvIGQwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNoYXJlcyA9IGQyOwogICAgICAgIH0KICAgICAgICByZXF1aXJlKHNoYXJlcyA+PSBtaW5TaGFyZXMsICJzaGFyZXMgPCBtaW4iKTsKICAgICAgICBfbWludChtc2cuc2VuZGVyLCBzaGFyZXMpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZUxpcXVpZGl0eSh1aW50MjU2IHNoYXJlcywgdWludDI1NltOXSBjYWxsZGF0YSBtaW5BbW91bnRzT3V0KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NltOXSBtZW1vcnkgYW1vdW50c091dCkKICAgIHsKICAgICAgICB1aW50MjU2IF90b3RhbFN1cHBseSA9IHRvdGFsU3VwcGx5OwoKICAgICAgICBmb3IgKHVpbnQyNTYgaTsgaSA8IE47ICsraSkgewogICAgICAgICAgICB1aW50MjU2IGFtb3VudE91dCA9IChiYWxhbmNlc1tpXSAqIHNoYXJlcykgLyBfdG90YWxTdXBwbHk7CiAgICAgICAgICAgIHJlcXVpcmUoYW1vdW50T3V0ID49IG1pbkFtb3VudHNPdXRbaV0sICJvdXQgPCBtaW4iKTsKCiAgICAgICAgICAgIGJhbGFuY2VzW2ldIC09IGFtb3VudE91dDsKICAgICAgICAgICAgYW1vdW50c091dFtpXSA9IGFtb3VudE91dDsKCiAgICAgICAgICAgIElFUkMyMCh0b2tlbnNbaV0pLnRyYW5zZmVyKG1zZy5zZW5kZXIsIGFtb3VudE91dCk7CiAgICAgICAgfQoKICAgICAgICBfYnVybihtc2cuc2VuZGVyLCBzaGFyZXMpOwogICAgfQoKICAgIC8qKgogICAgICogQG5vdGljZSBDYWxjdWxhdGUgYW1vdW50IG9mIHRva2VuIGkgdG8gcmVjZWl2ZSBmb3Igc2hhcmVzCiAgICAgKiBAcGFyYW0gc2hhcmVzIFNoYXJlcyB0byBidXJuCiAgICAgKiBAcGFyYW0gaSBJbmRleCBvZiB0b2tlbiB0byB3aXRoZHJhdwogICAgICogQHJldHVybiBkeSBBbW91bnQgb2YgdG9rZW4gaSB0byByZWNlaXZlCiAgICAgKiAgICAgICAgIGZlZSBGZWUgZm9yIHdpdGhkcmF3LiBGZWUgYWxyZWFkeSBpbmNsdWRlZCBpbiBkeQogICAgICovCiAgICBmdW5jdGlvbiBfY2FsY1dpdGhkcmF3T25lVG9rZW4odWludDI1NiBzaGFyZXMsIHVpbnQyNTYgaSkKICAgICAgICBwcml2YXRlCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYgZHksIHVpbnQyNTYgZmVlKQogICAgewogICAgICAgIHVpbnQyNTYgX3RvdGFsU3VwcGx5ID0gdG90YWxTdXBwbHk7CiAgICAgICAgdWludDI1NltOXSBtZW1vcnkgeHAgPSBfeHAoKTsKCiAgICAgICAgLy8gQ2FsY3VsYXRlIGQwIGFuZCBkMQogICAgICAgIHVpbnQyNTYgZDAgPSBfZ2V0RCh4cCk7CiAgICAgICAgdWludDI1NiBkMSA9IGQwIC0gKGQwICogc2hhcmVzKSAvIF90b3RhbFN1cHBseTsKCiAgICAgICAgLy8gQ2FsY3VsYXRlIHJlZHVjdGlvbiBpbiB5IGlmIEQgPSBkMQogICAgICAgIHVpbnQyNTYgeTAgPSBfZ2V0WUQoaSwgeHAsIGQxKTsKICAgICAgICAvLyBkMSA8PSBkMCBzbyB5IG11c3QgYmUgPD0geHBbaV0KICAgICAgICB1aW50MjU2IGR5MCA9ICh4cFtpXSAtIHkwKSAvIG11bHRpcGxpZXJzW2ldOwoKICAgICAgICAvLyBDYWxjdWxhdGUgaW1iYWxhbmNlIGZlZSwgdXBkYXRlIHhwIHdpdGggZmVlcwogICAgICAgIHVpbnQyNTYgZHg7CiAgICAgICAgZm9yICh1aW50MjU2IGo7IGogPCBOOyArK2opIHsKICAgICAgICAgICAgaWYgKGogPT0gaSkgewogICAgICAgICAgICAgICAgZHggPSAoeHBbal0gKiBkMSkgLyBkMCAtIHkwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gZDEgLyBkMCA8PSAxCiAgICAgICAgICAgICAgICBkeCA9IHhwW2pdIC0gKHhwW2pdICogZDEpIC8gZDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgeHBbal0gLT0gKExJUVVJRElUWV9GRUUgKiBkeCkgLyBGRUVfREVOT01JTkFUT1I7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWNhbGN1bGF0ZSB5IHdpdGggeHAgaW5jbHVkaW5nIGltYmFsYW5jZSBmZWVzCiAgICAgICAgdWludDI1NiB5MSA9IF9nZXRZRChpLCB4cCwgZDEpOwogICAgICAgIC8vIC0gMSB0byByb3VuZCBkb3duCiAgICAgICAgZHkgPSAoeHBbaV0gLSB5MSAtIDEpIC8gbXVsdGlwbGllcnNbaV07CiAgICAgICAgZmVlID0gZHkwIC0gZHk7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsY1dpdGhkcmF3T25lVG9rZW4odWludDI1NiBzaGFyZXMsIHVpbnQyNTYgaSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2IGR5LCB1aW50MjU2IGZlZSkKICAgIHsKICAgICAgICByZXR1cm4gX2NhbGNXaXRoZHJhd09uZVRva2VuKHNoYXJlcywgaSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90aWNlIFdpdGhkcmF3IGxpcXVpZGl0eSBpbiB0b2tlbiBpCiAgICAgKiBAcGFyYW0gc2hhcmVzIFNoYXJlcyB0byBidXJuCiAgICAgKiBAcGFyYW0gaSBUb2tlbiB0byB3aXRoZHJhdwogICAgICogQHBhcmFtIG1pbkFtb3VudE91dCBNaW5pbXVtIGFtb3VudCBvZiB0b2tlbiBpIHRoYXQgbXVzdCBiZSB3aXRoZHJhd24KICAgICAqLwogICAgZnVuY3Rpb24gcmVtb3ZlTGlxdWlkaXR5T25lVG9rZW4oCiAgICAgICAgdWludDI1NiBzaGFyZXMsCiAgICAgICAgdWludDI1NiBpLAogICAgICAgIHVpbnQyNTYgbWluQW1vdW50T3V0CiAgICApIGV4dGVybmFsIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KSB7CiAgICAgICAgKGFtb3VudE91dCwpID0gX2NhbGNXaXRoZHJhd09uZVRva2VuKHNoYXJlcywgaSk7CiAgICAgICAgcmVxdWlyZShhbW91bnRPdXQgPj0gbWluQW1vdW50T3V0LCAib3V0IDwgbWluIik7CgogICAgICAgIGJhbGFuY2VzW2ldIC09IGFtb3VudE91dDsKICAgICAgICBfYnVybihtc2cuc2VuZGVyLCBzaGFyZXMpOwoKICAgICAgICBJRVJDMjAodG9rZW5zW2ldKS50cmFuc2Zlcihtc2cuc2VuZGVyLCBhbW91bnRPdXQpOwogICAgfQp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIHRvdGFsU3VwcGx5KCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIGFsbG93YW5jZShhZGRyZXNzIG93bmVyLCBhZGRyZXNzIHNwZW5kZXIpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc2VuZGVyLCBhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKfQo="}],km=`

            Simplified version of Curve's stable swap AMM

            +`,Am=({prev:s,next:a})=>i.jsx(u,{version:dm,title:Im,description:Cm,html:um,prev:s,next:a,codes:jm}),ym="0.8.24",mm="Stable Swap AMM",bm="Curve's stable swap AMM",wm=[{fileName:"StableSwap.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCkludmFyaWFudCAtIHByaWNlIG9mIHRyYWRlIGFuZCBhbW91bnQgb2YgbGlxdWlkaXR5IGFyZSBkZXRlcm1pbmVkIGJ5IHRoaXMgZXF1YXRpb24KCkFuXm4gc3VtKHhfaSkgKyBEID0gQURuXm4gKyBEXihuICsgMSkgLyAobl5uIHByb2QoeF9pKSkKClRvcGljcwowLiBOZXd0b24ncyBtZXRob2QgeF8obiArIDEpID0geF9uIC0gZih4X24pIC8gZicoeF9uKQoxLiBJbnZhcmlhbnQKMi4gU3dhcAogICAtIENhbGN1bGF0ZSBZCiAgIC0gQ2FsY3VsYXRlIEQKMy4gR2V0IHZpcnR1YWwgcHJpY2UKNC4gQWRkIGxpcXVpZGl0eQogICAtIEltYmFsYW5jZSBmZWUKNS4gUmVtb3ZlIGxpcXVpZGl0eQo2LiBSZW1vdmUgbGlxdWlkaXR5IG9uZSB0b2tlbgogICAtIENhbGN1bGF0ZSB3aXRoZHJhdyBvbmUgdG9rZW4KICAgLSBnZXRZRApUT0RPOiB0ZXN0PwoqLwoKbGlicmFyeSBNYXRoIHsKICAgIGZ1bmN0aW9uIGFicyh1aW50MjU2IHgsIHVpbnQyNTYgeSkgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIHggPj0geSA/IHggLSB5IDogeSAtIHg7CiAgICB9Cn0KCmNvbnRyYWN0IFN0YWJsZVN3YXAgewogICAgLy8gTnVtYmVyIG9mIHRva2VucwogICAgdWludDI1NiBwcml2YXRlIGNvbnN0YW50IE4gPSAzOwogICAgLy8gQW1wbGlmaWNhdGlvbiBjb2VmZmljaWVudCBtdWx0aXBsaWVkIGJ5IE5eKE4gLSAxKQogICAgLy8gSGlnaGVyIHZhbHVlIG1ha2VzIHRoZSBjdXJ2ZSBtb3JlIGZsYXQKICAgIC8vIExvd2VyIHZhbHVlIG1ha2VzIHRoZSBjdXJ2ZSBtb3JlIGxpa2UgY29uc3RhbnQgcHJvZHVjdCBBTU0KICAgIHVpbnQyNTYgcHJpdmF0ZSBjb25zdGFudCBBID0gMTAwMCAqIChOICoqIChOIC0gMSkpOwogICAgLy8gMC4wMyUKICAgIHVpbnQyNTYgcHJpdmF0ZSBjb25zdGFudCBTV0FQX0ZFRSA9IDMwMDsKICAgIC8vIExpcXVpZGl0eSBmZWUgaXMgZGVyaXZlZCBmcm9tIDIgY29uc3RyYWludHMKICAgIC8vIDEuIEZlZSBpcyAwIGZvciBhZGRpbmcgLyByZW1vdmluZyBsaXF1aWRpdHkgdGhhdCByZXN1bHRzIGluIGEgYmFsYW5jZWQgcG9vbAogICAgLy8gMi4gU3dhcHBpbmcgaW4gYSBiYWxhbmNlZCBwb29sIGlzIGxpa2UgYWRkaW5nIGFuZCB0aGVuIHJlbW92aW5nIGxpcXVpZGl0eQogICAgLy8gICAgZnJvbSBhIGJhbGFuY2VkIHBvb2wKICAgIC8vIHN3YXAgZmVlID0gYWRkIGxpcXVpZGl0eSBmZWUgKyByZW1vdmUgbGlxdWlkaXR5IGZlZQogICAgdWludDI1NiBwcml2YXRlIGNvbnN0YW50IExJUVVJRElUWV9GRUUgPSAoU1dBUF9GRUUgKiBOKSAvICg0ICogKE4gLSAxKSk7CiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgRkVFX0RFTk9NSU5BVE9SID0gMWU2OwoKICAgIGFkZHJlc3NbTl0gcHVibGljIHRva2VuczsKICAgIC8vIE5vcm1hbGl6ZSBlYWNoIHRva2VuIHRvIDE4IGRlY2ltYWxzCiAgICAvLyBFeGFtcGxlIC0gREFJICgxOCBkZWNpbWFscyksIFVTREMgKDYgZGVjaW1hbHMpLCBVU0RUICg2IGRlY2ltYWxzKQogICAgdWludDI1NltOXSBwcml2YXRlIG11bHRpcGxpZXJzID0gWzEsIDFlMTIsIDFlMTJdOwogICAgdWludDI1NltOXSBwdWJsaWMgYmFsYW5jZXM7CgogICAgLy8gMSBzaGFyZSA9IDFlMTgsIDE4IGRlY2ltYWxzCiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgREVDSU1BTFMgPSAxODsKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzc1tOXSBtZW1vcnkgX3Rva2VucykgewogICAgICAgIHRva2VucyA9IF90b2tlbnM7CiAgICB9CgogICAgZnVuY3Rpb24gX21pbnQoYWRkcmVzcyBfdG8sIHVpbnQyNTYgX2Ftb3VudCkgcHJpdmF0ZSB7CiAgICAgICAgYmFsYW5jZU9mW190b10gKz0gX2Ftb3VudDsKICAgICAgICB0b3RhbFN1cHBseSArPSBfYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIF9idXJuKGFkZHJlc3MgX2Zyb20sIHVpbnQyNTYgX2Ftb3VudCkgcHJpdmF0ZSB7CiAgICAgICAgYmFsYW5jZU9mW19mcm9tXSAtPSBfYW1vdW50OwogICAgICAgIHRvdGFsU3VwcGx5IC09IF9hbW91bnQ7CiAgICB9CgogICAgLy8gUmV0dXJuIHByZWNpc2lvbi1hZGp1c3RlZCBiYWxhbmNlcywgYWRqdXN0ZWQgdG8gMTggZGVjaW1hbHMKICAgIGZ1bmN0aW9uIF94cCgpIHByaXZhdGUgdmlldyByZXR1cm5zICh1aW50MjU2W05dIG1lbW9yeSB4cCkgewogICAgICAgIGZvciAodWludDI1NiBpOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgIHhwW2ldID0gYmFsYW5jZXNbaV0gKiBtdWx0aXBsaWVyc1tpXTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90aWNlIENhbGN1bGF0ZSBELCBzdW0gb2YgYmFsYW5jZXMgaW4gYSBwZXJmZWN0bHkgYmFsYW5jZWQgcG9vbAogICAgICogSWYgYmFsYW5jZXMgb2YgeF8wLCB4XzEsIC4uLiB4XyhuLTEpIHRoZW4gc3VtKHhfaSkgPSBECiAgICAgKiBAcGFyYW0geHAgUHJlY2lzaW9uLWFkanVzdGVkIGJhbGFuY2VzCiAgICAgKiBAcmV0dXJuIEQKICAgICAqLwogICAgZnVuY3Rpb24gX2dldEQodWludDI1NltOXSBtZW1vcnkgeHApIHByaXZhdGUgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgLyoKICAgICAgICBOZXd0b24ncyBtZXRob2QgdG8gY29tcHV0ZSBECiAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICBmKEQpID0gQURuXm4gKyBEXihuICsgMSkgLyAobl5uIHByb2QoeF9pKSkgLSBBbl5uIHN1bSh4X2kpIC0gRCAKICAgICAgICBmJyhEKSA9IEFuXm4gKyAobiArIDEpIERebiAvIChuXm4gcHJvZCh4X2kpKSAtIDEKCiAgICAgICAgICAgICAgICAgICAgIChhcyArIG5wKURfbgogICAgICAgIERfKG4rMSkgPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAoYSAtIDEpRF9uICsgKG4gKyAxKXAKCiAgICAgICAgYSA9IEFuXm4KICAgICAgICBzID0gc3VtKHhfaSkKICAgICAgICBwID0gKERfbileKG4gKyAxKSAvIChuXm4gcHJvZCh4X2kpKQogICAgICAgICovCiAgICAgICAgdWludDI1NiBhID0gQSAqIE47IC8vIEFuXm4KCiAgICAgICAgdWludDI1NiBzOyAvLyB4XzAgKyB4XzEgKyAuLi4gKyB4XyhuLTEpCiAgICAgICAgZm9yICh1aW50MjU2IGk7IGkgPCBOOyArK2kpIHsKICAgICAgICAgICAgcyArPSB4cFtpXTsKICAgICAgICB9CgogICAgICAgIC8vIE5ld3RvbidzIG1ldGhvZAogICAgICAgIC8vIEluaXRpYWwgZ3Vlc3MsIGQgPD0gcwogICAgICAgIHVpbnQyNTYgZCA9IHM7CiAgICAgICAgdWludDI1NiBkX3ByZXY7CiAgICAgICAgZm9yICh1aW50MjU2IGk7IGkgPCAyNTU7ICsraSkgewogICAgICAgICAgICAvLyBwID0gRF4obiArIDEpIC8gKG5ebiAqIHhfMCAqIC4uLiAqIHhfKG4tMSkpCiAgICAgICAgICAgIHVpbnQyNTYgcCA9IGQ7CiAgICAgICAgICAgIGZvciAodWludDI1NiBqOyBqIDwgTjsgKytqKSB7CiAgICAgICAgICAgICAgICBwID0gKHAgKiBkKSAvIChOICogeHBbal0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRfcHJldiA9IGQ7CiAgICAgICAgICAgIGQgPSAoKGEgKiBzICsgTiAqIHApICogZCkgLyAoKGEgLSAxKSAqIGQgKyAoTiArIDEpICogcCk7CgogICAgICAgICAgICBpZiAoTWF0aC5hYnMoZCwgZF9wcmV2KSA8PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXZlcnQoIkQgZGlkbid0IGNvbnZlcmdlIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90aWNlIENhbGN1bGF0ZSB0aGUgbmV3IGJhbGFuY2Ugb2YgdG9rZW4gaiBnaXZlbiB0aGUgbmV3IGJhbGFuY2Ugb2YgdG9rZW4gaQogICAgICogQHBhcmFtIGkgSW5kZXggb2YgdG9rZW4gaW4KICAgICAqIEBwYXJhbSBqIEluZGV4IG9mIHRva2VuIG91dAogICAgICogQHBhcmFtIHggTmV3IGJhbGFuY2Ugb2YgdG9rZW4gaQogICAgICogQHBhcmFtIHhwIEN1cnJlbnQgcHJlY2lzaW9uLWFkanVzdGVkIGJhbGFuY2VzCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9nZXRZKHVpbnQyNTYgaSwgdWludDI1NiBqLCB1aW50MjU2IHgsIHVpbnQyNTZbTl0gbWVtb3J5IHhwKQogICAgICAgIHByaXZhdGUKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAodWludDI1NikKICAgIHsKICAgICAgICAvKgogICAgICAgIE5ld3RvbidzIG1ldGhvZCB0byBjb21wdXRlIHkKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgIHkgPSB4X2oKCiAgICAgICAgZih5KSA9IHleMiArIHkoYiAtIEQpIC0gYwoKICAgICAgICAgICAgICAgICAgICB5X25eMiArIGMKICAgICAgICB5XyhuKzEpID0gLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgIDJ5X24gKyBiIC0gRAoKICAgICAgICB3aGVyZQogICAgICAgIHMgPSBzdW0oeF9rKSwgayAhPSBqCiAgICAgICAgcCA9IHByb2QoeF9rKSwgayAhPSBqCiAgICAgICAgYiA9IHMgKyBEIC8gKEFuXm4pCiAgICAgICAgYyA9IEReKG4gKyAxKSAvIChuXm4gKiBwICogQW5ebikKICAgICAgICAqLwogICAgICAgIHVpbnQyNTYgYSA9IEEgKiBOOwogICAgICAgIHVpbnQyNTYgZCA9IF9nZXREKHhwKTsKICAgICAgICB1aW50MjU2IHM7CiAgICAgICAgdWludDI1NiBjID0gZDsKCiAgICAgICAgdWludDI1NiBfeDsKICAgICAgICBmb3IgKHVpbnQyNTYgazsgayA8IE47ICsraykgewogICAgICAgICAgICBpZiAoayA9PSBpKSB7CiAgICAgICAgICAgICAgICBfeCA9IHg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoayA9PSBqKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF94ID0geHBba107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHMgKz0gX3g7CiAgICAgICAgICAgIGMgPSAoYyAqIGQpIC8gKE4gKiBfeCk7CiAgICAgICAgfQogICAgICAgIGMgPSAoYyAqIGQpIC8gKE4gKiBhKTsKICAgICAgICB1aW50MjU2IGIgPSBzICsgZCAvIGE7CgogICAgICAgIC8vIE5ld3RvbidzIG1ldGhvZAogICAgICAgIHVpbnQyNTYgeV9wcmV2OwogICAgICAgIC8vIEluaXRpYWwgZ3Vlc3MsIHkgPD0gZAogICAgICAgIHVpbnQyNTYgeSA9IGQ7CiAgICAgICAgZm9yICh1aW50MjU2IF9pOyBfaSA8IDI1NTsgKytfaSkgewogICAgICAgICAgICB5X3ByZXYgPSB5OwogICAgICAgICAgICB5ID0gKHkgKiB5ICsgYykgLyAoMiAqIHkgKyBiIC0gZCk7CiAgICAgICAgICAgIGlmIChNYXRoLmFicyh5LCB5X3ByZXYpIDw9IDEpIHsKICAgICAgICAgICAgICAgIHJldHVybiB5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldmVydCgieSBkaWRuJ3QgY29udmVyZ2UiKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBub3RpY2UgQ2FsY3VsYXRlIHRoZSBuZXcgYmFsYW5jZSBvZiB0b2tlbiBpIGdpdmVuIHByZWNpc2lvbi1hZGp1c3RlZAogICAgICogYmFsYW5jZXMgeHAgYW5kIGxpcXVpZGl0eSBkCiAgICAgKiBAZGV2IEVxdWF0aW9uIGlzIGNhbGN1bGF0ZSB5IGlzIHNhbWUgYXMgX2dldFkKICAgICAqIEBwYXJhbSBpIEluZGV4IG9mIHRva2VuIHRvIGNhbGN1bGF0ZSB0aGUgbmV3IGJhbGFuY2UKICAgICAqIEBwYXJhbSB4cCBQcmVjaXNpb24tYWRqdXN0ZWQgYmFsYW5jZXMKICAgICAqIEBwYXJhbSBkIExpcXVpZGl0eSBkCiAgICAgKiBAcmV0dXJuIE5ldyBiYWxhbmNlIG9mIHRva2VuIGkKICAgICAqLwogICAgZnVuY3Rpb24gX2dldFlEKHVpbnQyNTYgaSwgdWludDI1NltOXSBtZW1vcnkgeHAsIHVpbnQyNTYgZCkKICAgICAgICBwcml2YXRlCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYpCiAgICB7CiAgICAgICAgdWludDI1NiBhID0gQSAqIE47CiAgICAgICAgdWludDI1NiBzOwogICAgICAgIHVpbnQyNTYgYyA9IGQ7CgogICAgICAgIHVpbnQyNTYgX3g7CiAgICAgICAgZm9yICh1aW50MjU2IGs7IGsgPCBOOyArK2spIHsKICAgICAgICAgICAgaWYgKGsgIT0gaSkgewogICAgICAgICAgICAgICAgX3ggPSB4cFtrXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzICs9IF94OwogICAgICAgICAgICBjID0gKGMgKiBkKSAvIChOICogX3gpOwogICAgICAgIH0KICAgICAgICBjID0gKGMgKiBkKSAvIChOICogYSk7CiAgICAgICAgdWludDI1NiBiID0gcyArIGQgLyBhOwoKICAgICAgICAvLyBOZXd0b24ncyBtZXRob2QKICAgICAgICB1aW50MjU2IHlfcHJldjsKICAgICAgICAvLyBJbml0aWFsIGd1ZXNzLCB5IDw9IGQKICAgICAgICB1aW50MjU2IHkgPSBkOwogICAgICAgIGZvciAodWludDI1NiBfaTsgX2kgPCAyNTU7ICsrX2kpIHsKICAgICAgICAgICAgeV9wcmV2ID0geTsKICAgICAgICAgICAgeSA9ICh5ICogeSArIGMpIC8gKDIgKiB5ICsgYiAtIGQpOwogICAgICAgICAgICBpZiAoTWF0aC5hYnMoeSwgeV9wcmV2KSA8PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4geTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXZlcnQoInkgZGlkbid0IGNvbnZlcmdlIik7CiAgICB9CgogICAgLy8gRXN0aW1hdGUgdmFsdWUgb2YgMSBzaGFyZQogICAgLy8gSG93IG1hbnkgdG9rZW5zIGlzIG9uZSBzaGFyZSB3b3J0aD8KICAgIGZ1bmN0aW9uIGdldFZpcnR1YWxQcmljZSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHVpbnQyNTYgZCA9IF9nZXREKF94cCgpKTsKICAgICAgICB1aW50MjU2IF90b3RhbFN1cHBseSA9IHRvdGFsU3VwcGx5OwogICAgICAgIGlmIChfdG90YWxTdXBwbHkgPiAwKSB7CiAgICAgICAgICAgIHJldHVybiAoZCAqIDEwICoqIERFQ0lNQUxTKSAvIF90b3RhbFN1cHBseTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90aWNlIFN3YXAgZHggYW1vdW50IG9mIHRva2VuIGkgZm9yIHRva2VuIGoKICAgICAqIEBwYXJhbSBpIEluZGV4IG9mIHRva2VuIGluCiAgICAgKiBAcGFyYW0gaiBJbmRleCBvZiB0b2tlbiBvdXQKICAgICAqIEBwYXJhbSBkeCBUb2tlbiBpbiBhbW91bnQKICAgICAqIEBwYXJhbSBtaW5EeSBNaW5pbXVtIHRva2VuIG91dAogICAgICovCiAgICBmdW5jdGlvbiBzd2FwKHVpbnQyNTYgaSwgdWludDI1NiBqLCB1aW50MjU2IGR4LCB1aW50MjU2IG1pbkR5KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBkeSkKICAgIHsKICAgICAgICByZXF1aXJlKGkgIT0gaiwgImkgPSBqIik7CgogICAgICAgIElFUkMyMCh0b2tlbnNbaV0pLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBkeCk7CgogICAgICAgIC8vIENhbGN1bGF0ZSBkeQogICAgICAgIHVpbnQyNTZbTl0gbWVtb3J5IHhwID0gX3hwKCk7CiAgICAgICAgdWludDI1NiB4ID0geHBbaV0gKyBkeCAqIG11bHRpcGxpZXJzW2ldOwoKICAgICAgICB1aW50MjU2IHkwID0geHBbal07CiAgICAgICAgdWludDI1NiB5MSA9IF9nZXRZKGksIGosIHgsIHhwKTsKICAgICAgICAvLyB5MCBtdXN0IGJlID49IHkxLCBzaW5jZSB4IGhhcyBpbmNyZWFzZWQKICAgICAgICAvLyAtMSB0byByb3VuZCBkb3duCiAgICAgICAgZHkgPSAoeTAgLSB5MSAtIDEpIC8gbXVsdGlwbGllcnNbal07CgogICAgICAgIC8vIFN1YnRyYWN0IGZlZSBmcm9tIGR5CiAgICAgICAgdWludDI1NiBmZWUgPSAoZHkgKiBTV0FQX0ZFRSkgLyBGRUVfREVOT01JTkFUT1I7CiAgICAgICAgZHkgLT0gZmVlOwogICAgICAgIHJlcXVpcmUoZHkgPj0gbWluRHksICJkeSA8IG1pbiIpOwoKICAgICAgICBiYWxhbmNlc1tpXSArPSBkeDsKICAgICAgICBiYWxhbmNlc1tqXSAtPSBkeTsKCiAgICAgICAgSUVSQzIwKHRva2Vuc1tqXSkudHJhbnNmZXIobXNnLnNlbmRlciwgZHkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZExpcXVpZGl0eSh1aW50MjU2W05dIGNhbGxkYXRhIGFtb3VudHMsIHVpbnQyNTYgbWluU2hhcmVzKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBzaGFyZXMpCiAgICB7CiAgICAgICAgLy8gY2FsY3VsYXRlIGN1cnJlbnQgbGlxdWlkaXR5IGQwCiAgICAgICAgdWludDI1NiBfdG90YWxTdXBwbHkgPSB0b3RhbFN1cHBseTsKICAgICAgICB1aW50MjU2IGQwOwogICAgICAgIHVpbnQyNTZbTl0gbWVtb3J5IG9sZF94cyA9IF94cCgpOwogICAgICAgIGlmIChfdG90YWxTdXBwbHkgPiAwKSB7CiAgICAgICAgICAgIGQwID0gX2dldEQob2xkX3hzKTsKICAgICAgICB9CgogICAgICAgIC8vIFRyYW5zZmVyIHRva2VucyBpbgogICAgICAgIHVpbnQyNTZbTl0gbWVtb3J5IG5ld194czsKICAgICAgICBmb3IgKHVpbnQyNTYgaTsgaSA8IE47ICsraSkgewogICAgICAgICAgICB1aW50MjU2IGFtb3VudCA9IGFtb3VudHNbaV07CiAgICAgICAgICAgIGlmIChhbW91bnQgPiAwKSB7CiAgICAgICAgICAgICAgICBJRVJDMjAodG9rZW5zW2ldKS50cmFuc2ZlckZyb20oCiAgICAgICAgICAgICAgICAgICAgbXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbmV3X3hzW2ldID0gb2xkX3hzW2ldICsgYW1vdW50ICogbXVsdGlwbGllcnNbaV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuZXdfeHNbaV0gPSBvbGRfeHNbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIENhbGN1bGF0ZSBuZXcgbGlxdWlkaXR5IGQxCiAgICAgICAgdWludDI1NiBkMSA9IF9nZXREKG5ld194cyk7CiAgICAgICAgcmVxdWlyZShkMSA+IGQwLCAibGlxdWlkaXR5IGRpZG4ndCBpbmNyZWFzZSIpOwoKICAgICAgICAvLyBSZWNjYWxjdWF0ZSBEIGFjY291bnRpbmcgZm9yIGZlZSBvbiBpbWJhbGFuY2UKICAgICAgICB1aW50MjU2IGQyOwogICAgICAgIGlmIChfdG90YWxTdXBwbHkgPiAwKSB7CiAgICAgICAgICAgIGZvciAodWludDI1NiBpOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgICAgICAvLyBUT0RPOiB3aHkgb2xkX3hzW2ldICogZDEgLyBkMD8gd2h5IG5vdCBkMSAvIE4/CiAgICAgICAgICAgICAgICB1aW50MjU2IGlkZWFsQmFsYW5jZSA9IChvbGRfeHNbaV0gKiBkMSkgLyBkMDsKICAgICAgICAgICAgICAgIHVpbnQyNTYgZGlmZiA9IE1hdGguYWJzKG5ld194c1tpXSwgaWRlYWxCYWxhbmNlKTsKICAgICAgICAgICAgICAgIG5ld194c1tpXSAtPSAoTElRVUlESVRZX0ZFRSAqIGRpZmYpIC8gRkVFX0RFTk9NSU5BVE9SOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkMiA9IF9nZXREKG5ld194cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZDIgPSBkMTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSBiYWxhbmNlcwogICAgICAgIGZvciAodWludDI1NiBpOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgIGJhbGFuY2VzW2ldICs9IGFtb3VudHNbaV07CiAgICAgICAgfQoKICAgICAgICAvLyBTaGFyZXMgdG8gbWludCA9IChkMiAtIGQwKSAvIGQwICogdG90YWwgc3VwcGx5CiAgICAgICAgLy8gZDEgPj0gZDIgPj0gZDAKICAgICAgICBpZiAoX3RvdGFsU3VwcGx5ID4gMCkgewogICAgICAgICAgICBzaGFyZXMgPSAoKGQyIC0gZDApICogX3RvdGFsU3VwcGx5KSAvIGQwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNoYXJlcyA9IGQyOwogICAgICAgIH0KICAgICAgICByZXF1aXJlKHNoYXJlcyA+PSBtaW5TaGFyZXMsICJzaGFyZXMgPCBtaW4iKTsKICAgICAgICBfbWludChtc2cuc2VuZGVyLCBzaGFyZXMpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZUxpcXVpZGl0eSh1aW50MjU2IHNoYXJlcywgdWludDI1NltOXSBjYWxsZGF0YSBtaW5BbW91bnRzT3V0KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NltOXSBtZW1vcnkgYW1vdW50c091dCkKICAgIHsKICAgICAgICB1aW50MjU2IF90b3RhbFN1cHBseSA9IHRvdGFsU3VwcGx5OwoKICAgICAgICBmb3IgKHVpbnQyNTYgaTsgaSA8IE47ICsraSkgewogICAgICAgICAgICB1aW50MjU2IGFtb3VudE91dCA9IChiYWxhbmNlc1tpXSAqIHNoYXJlcykgLyBfdG90YWxTdXBwbHk7CiAgICAgICAgICAgIHJlcXVpcmUoYW1vdW50T3V0ID49IG1pbkFtb3VudHNPdXRbaV0sICJvdXQgPCBtaW4iKTsKCiAgICAgICAgICAgIGJhbGFuY2VzW2ldIC09IGFtb3VudE91dDsKICAgICAgICAgICAgYW1vdW50c091dFtpXSA9IGFtb3VudE91dDsKCiAgICAgICAgICAgIElFUkMyMCh0b2tlbnNbaV0pLnRyYW5zZmVyKG1zZy5zZW5kZXIsIGFtb3VudE91dCk7CiAgICAgICAgfQoKICAgICAgICBfYnVybihtc2cuc2VuZGVyLCBzaGFyZXMpOwogICAgfQoKICAgIC8qKgogICAgICogQG5vdGljZSBDYWxjdWxhdGUgYW1vdW50IG9mIHRva2VuIGkgdG8gcmVjZWl2ZSBmb3Igc2hhcmVzCiAgICAgKiBAcGFyYW0gc2hhcmVzIFNoYXJlcyB0byBidXJuCiAgICAgKiBAcGFyYW0gaSBJbmRleCBvZiB0b2tlbiB0byB3aXRoZHJhdwogICAgICogQHJldHVybiBkeSBBbW91bnQgb2YgdG9rZW4gaSB0byByZWNlaXZlCiAgICAgKiAgICAgICAgIGZlZSBGZWUgZm9yIHdpdGhkcmF3LiBGZWUgYWxyZWFkeSBpbmNsdWRlZCBpbiBkeQogICAgICovCiAgICBmdW5jdGlvbiBfY2FsY1dpdGhkcmF3T25lVG9rZW4odWludDI1NiBzaGFyZXMsIHVpbnQyNTYgaSkKICAgICAgICBwcml2YXRlCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYgZHksIHVpbnQyNTYgZmVlKQogICAgewogICAgICAgIHVpbnQyNTYgX3RvdGFsU3VwcGx5ID0gdG90YWxTdXBwbHk7CiAgICAgICAgdWludDI1NltOXSBtZW1vcnkgeHAgPSBfeHAoKTsKCiAgICAgICAgLy8gQ2FsY3VsYXRlIGQwIGFuZCBkMQogICAgICAgIHVpbnQyNTYgZDAgPSBfZ2V0RCh4cCk7CiAgICAgICAgdWludDI1NiBkMSA9IGQwIC0gKGQwICogc2hhcmVzKSAvIF90b3RhbFN1cHBseTsKCiAgICAgICAgLy8gQ2FsY3VsYXRlIHJlZHVjdGlvbiBpbiB5IGlmIEQgPSBkMQogICAgICAgIHVpbnQyNTYgeTAgPSBfZ2V0WUQoaSwgeHAsIGQxKTsKICAgICAgICAvLyBkMSA8PSBkMCBzbyB5IG11c3QgYmUgPD0geHBbaV0KICAgICAgICB1aW50MjU2IGR5MCA9ICh4cFtpXSAtIHkwKSAvIG11bHRpcGxpZXJzW2ldOwoKICAgICAgICAvLyBDYWxjdWxhdGUgaW1iYWxhbmNlIGZlZSwgdXBkYXRlIHhwIHdpdGggZmVlcwogICAgICAgIHVpbnQyNTYgZHg7CiAgICAgICAgZm9yICh1aW50MjU2IGo7IGogPCBOOyArK2opIHsKICAgICAgICAgICAgaWYgKGogPT0gaSkgewogICAgICAgICAgICAgICAgZHggPSAoeHBbal0gKiBkMSkgLyBkMCAtIHkwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gZDEgLyBkMCA8PSAxCiAgICAgICAgICAgICAgICBkeCA9IHhwW2pdIC0gKHhwW2pdICogZDEpIC8gZDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgeHBbal0gLT0gKExJUVVJRElUWV9GRUUgKiBkeCkgLyBGRUVfREVOT01JTkFUT1I7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWNhbGN1bGF0ZSB5IHdpdGggeHAgaW5jbHVkaW5nIGltYmFsYW5jZSBmZWVzCiAgICAgICAgdWludDI1NiB5MSA9IF9nZXRZRChpLCB4cCwgZDEpOwogICAgICAgIC8vIC0gMSB0byByb3VuZCBkb3duCiAgICAgICAgZHkgPSAoeHBbaV0gLSB5MSAtIDEpIC8gbXVsdGlwbGllcnNbaV07CiAgICAgICAgZmVlID0gZHkwIC0gZHk7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsY1dpdGhkcmF3T25lVG9rZW4odWludDI1NiBzaGFyZXMsIHVpbnQyNTYgaSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2IGR5LCB1aW50MjU2IGZlZSkKICAgIHsKICAgICAgICByZXR1cm4gX2NhbGNXaXRoZHJhd09uZVRva2VuKHNoYXJlcywgaSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90aWNlIFdpdGhkcmF3IGxpcXVpZGl0eSBpbiB0b2tlbiBpCiAgICAgKiBAcGFyYW0gc2hhcmVzIFNoYXJlcyB0byBidXJuCiAgICAgKiBAcGFyYW0gaSBUb2tlbiB0byB3aXRoZHJhdwogICAgICogQHBhcmFtIG1pbkFtb3VudE91dCBNaW5pbXVtIGFtb3VudCBvZiB0b2tlbiBpIHRoYXQgbXVzdCBiZSB3aXRoZHJhd24KICAgICAqLwogICAgZnVuY3Rpb24gcmVtb3ZlTGlxdWlkaXR5T25lVG9rZW4oCiAgICAgICAgdWludDI1NiBzaGFyZXMsCiAgICAgICAgdWludDI1NiBpLAogICAgICAgIHVpbnQyNTYgbWluQW1vdW50T3V0CiAgICApIGV4dGVybmFsIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KSB7CiAgICAgICAgKGFtb3VudE91dCwpID0gX2NhbGNXaXRoZHJhd09uZVRva2VuKHNoYXJlcywgaSk7CiAgICAgICAgcmVxdWlyZShhbW91bnRPdXQgPj0gbWluQW1vdW50T3V0LCAib3V0IDwgbWluIik7CgogICAgICAgIGJhbGFuY2VzW2ldIC09IGFtb3VudE91dDsKICAgICAgICBfYnVybihtc2cuc2VuZGVyLCBzaGFyZXMpOwoKICAgICAgICBJRVJDMjAodG9rZW5zW2ldKS50cmFuc2Zlcihtc2cuc2VuZGVyLCBhbW91bnRPdXQpOwogICAgfQp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIHRvdGFsU3VwcGx5KCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIGFsbG93YW5jZShhZGRyZXNzIG93bmVyLCBhZGRyZXNzIHNwZW5kZXIpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc2VuZGVyLCBhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKfQo="}],km=`

            Simplified version of Curve's stable swap AMM

            // SPDX-License-Identifier: MIT
             pragma solidity ^0.8.24;
             
            @@ -5064,7 +5064,7 @@ Topics
                     external
                     returns (bool);
             }
            -
            `,Zm=({prev:s,next:a})=>i.jsx(u,{version:Am,title:mm,description:bm,html:km,prev:s,next:a,codes:wm}),Wm="0.8.24",Gm="Staking Rewards",Bm="Staking rewards contract based on Synthetix StakingRewards.sol",fm=[{fileName:"StakingRewards.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFN0YWtpbmdSZXdhcmRzIHsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHN0YWtpbmdUb2tlbjsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHJld2FyZHNUb2tlbjsKCiAgICBhZGRyZXNzIHB1YmxpYyBvd25lcjsKCiAgICAvLyBEdXJhdGlvbiBvZiByZXdhcmRzIHRvIGJlIHBhaWQgb3V0IChpbiBzZWNvbmRzKQogICAgdWludDI1NiBwdWJsaWMgZHVyYXRpb247CiAgICAvLyBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgcmV3YXJkcyBmaW5pc2gKICAgIHVpbnQyNTYgcHVibGljIGZpbmlzaEF0OwogICAgLy8gTWluaW11bSBvZiBsYXN0IHVwZGF0ZWQgdGltZSBhbmQgcmV3YXJkIGZpbmlzaCB0aW1lCiAgICB1aW50MjU2IHB1YmxpYyB1cGRhdGVkQXQ7CiAgICAvLyBSZXdhcmQgdG8gYmUgcGFpZCBvdXQgcGVyIHNlY29uZAogICAgdWludDI1NiBwdWJsaWMgcmV3YXJkUmF0ZTsKICAgIC8vIFN1bSBvZiAocmV3YXJkIHJhdGUgKiBkdCAqIDFlMTggLyB0b3RhbCBzdXBwbHkpCiAgICB1aW50MjU2IHB1YmxpYyByZXdhcmRQZXJUb2tlblN0b3JlZDsKICAgIC8vIFVzZXIgYWRkcmVzcyA9PiByZXdhcmRQZXJUb2tlblN0b3JlZAogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyB1c2VyUmV3YXJkUGVyVG9rZW5QYWlkOwogICAgLy8gVXNlciBhZGRyZXNzID0+IHJld2FyZHMgdG8gYmUgY2xhaW1lZAogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyByZXdhcmRzOwoKICAgIC8vIFRvdGFsIHN0YWtlZAogICAgdWludDI1NiBwdWJsaWMgdG90YWxTdXBwbHk7CiAgICAvLyBVc2VyIGFkZHJlc3MgPT4gc3Rha2VkIGFtb3VudAogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfc3Rha2luZ1Rva2VuLCBhZGRyZXNzIF9yZXdhcmRUb2tlbikgewogICAgICAgIG93bmVyID0gbXNnLnNlbmRlcjsKICAgICAgICBzdGFraW5nVG9rZW4gPSBJRVJDMjAoX3N0YWtpbmdUb2tlbik7CiAgICAgICAgcmV3YXJkc1Rva2VuID0gSUVSQzIwKF9yZXdhcmRUb2tlbik7CiAgICB9CgogICAgbW9kaWZpZXIgb25seU93bmVyKCkgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSBvd25lciwgIm5vdCBhdXRob3JpemVkIik7CiAgICAgICAgXzsKICAgIH0KCiAgICBtb2RpZmllciB1cGRhdGVSZXdhcmQoYWRkcmVzcyBfYWNjb3VudCkgewogICAgICAgIHJld2FyZFBlclRva2VuU3RvcmVkID0gcmV3YXJkUGVyVG9rZW4oKTsKICAgICAgICB1cGRhdGVkQXQgPSBsYXN0VGltZVJld2FyZEFwcGxpY2FibGUoKTsKCiAgICAgICAgaWYgKF9hY2NvdW50ICE9IGFkZHJlc3MoMCkpIHsKICAgICAgICAgICAgcmV3YXJkc1tfYWNjb3VudF0gPSBlYXJuZWQoX2FjY291bnQpOwogICAgICAgICAgICB1c2VyUmV3YXJkUGVyVG9rZW5QYWlkW19hY2NvdW50XSA9IHJld2FyZFBlclRva2VuU3RvcmVkOwogICAgICAgIH0KCiAgICAgICAgXzsKICAgIH0KCiAgICBmdW5jdGlvbiBsYXN0VGltZVJld2FyZEFwcGxpY2FibGUoKSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIF9taW4oZmluaXNoQXQsIGJsb2NrLnRpbWVzdGFtcCk7CiAgICB9CgogICAgZnVuY3Rpb24gcmV3YXJkUGVyVG9rZW4oKSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgaWYgKHRvdGFsU3VwcGx5ID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIHJld2FyZFBlclRva2VuU3RvcmVkOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJld2FyZFBlclRva2VuU3RvcmVkCiAgICAgICAgICAgICsgKHJld2FyZFJhdGUgKiAobGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlKCkgLSB1cGRhdGVkQXQpICogMWUxOCkKICAgICAgICAgICAgICAgIC8gdG90YWxTdXBwbHk7CiAgICB9CgogICAgZnVuY3Rpb24gc3Rha2UodWludDI1NiBfYW1vdW50KSBleHRlcm5hbCB1cGRhdGVSZXdhcmQobXNnLnNlbmRlcikgewogICAgICAgIHJlcXVpcmUoX2Ftb3VudCA+IDAsICJhbW91bnQgPSAwIik7CiAgICAgICAgc3Rha2luZ1Rva2VuLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBfYW1vdW50KTsKICAgICAgICBiYWxhbmNlT2ZbbXNnLnNlbmRlcl0gKz0gX2Ftb3VudDsKICAgICAgICB0b3RhbFN1cHBseSArPSBfYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KHVpbnQyNTYgX2Ftb3VudCkgZXh0ZXJuYWwgdXBkYXRlUmV3YXJkKG1zZy5zZW5kZXIpIHsKICAgICAgICByZXF1aXJlKF9hbW91bnQgPiAwLCAiYW1vdW50ID0gMCIpOwogICAgICAgIGJhbGFuY2VPZlttc2cuc2VuZGVyXSAtPSBfYW1vdW50OwogICAgICAgIHRvdGFsU3VwcGx5IC09IF9hbW91bnQ7CiAgICAgICAgc3Rha2luZ1Rva2VuLnRyYW5zZmVyKG1zZy5zZW5kZXIsIF9hbW91bnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGVhcm5lZChhZGRyZXNzIF9hY2NvdW50KSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgYmFsYW5jZU9mW19hY2NvdW50XQogICAgICAgICAgICAgICAgICAgICogKHJld2FyZFBlclRva2VuKCkgLSB1c2VyUmV3YXJkUGVyVG9rZW5QYWlkW19hY2NvdW50XSkKICAgICAgICAgICAgKSAvIDFlMTgKICAgICAgICApICsgcmV3YXJkc1tfYWNjb3VudF07CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UmV3YXJkKCkgZXh0ZXJuYWwgdXBkYXRlUmV3YXJkKG1zZy5zZW5kZXIpIHsKICAgICAgICB1aW50MjU2IHJld2FyZCA9IHJld2FyZHNbbXNnLnNlbmRlcl07CiAgICAgICAgaWYgKHJld2FyZCA+IDApIHsKICAgICAgICAgICAgcmV3YXJkc1ttc2cuc2VuZGVyXSA9IDA7CiAgICAgICAgICAgIHJld2FyZHNUb2tlbi50cmFuc2Zlcihtc2cuc2VuZGVyLCByZXdhcmQpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBzZXRSZXdhcmRzRHVyYXRpb24odWludDI1NiBfZHVyYXRpb24pIGV4dGVybmFsIG9ubHlPd25lciB7CiAgICAgICAgcmVxdWlyZShmaW5pc2hBdCA8IGJsb2NrLnRpbWVzdGFtcCwgInJld2FyZCBkdXJhdGlvbiBub3QgZmluaXNoZWQiKTsKICAgICAgICBkdXJhdGlvbiA9IF9kdXJhdGlvbjsKICAgIH0KCiAgICBmdW5jdGlvbiBub3RpZnlSZXdhcmRBbW91bnQodWludDI1NiBfYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgb25seU93bmVyCiAgICAgICAgdXBkYXRlUmV3YXJkKGFkZHJlc3MoMCkpCiAgICB7CiAgICAgICAgaWYgKGJsb2NrLnRpbWVzdGFtcCA+PSBmaW5pc2hBdCkgewogICAgICAgICAgICByZXdhcmRSYXRlID0gX2Ftb3VudCAvIGR1cmF0aW9uOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVpbnQyNTYgcmVtYWluaW5nUmV3YXJkcyA9IChmaW5pc2hBdCAtIGJsb2NrLnRpbWVzdGFtcCkgKiByZXdhcmRSYXRlOwogICAgICAgICAgICByZXdhcmRSYXRlID0gKF9hbW91bnQgKyByZW1haW5pbmdSZXdhcmRzKSAvIGR1cmF0aW9uOwogICAgICAgIH0KCiAgICAgICAgcmVxdWlyZShyZXdhcmRSYXRlID4gMCwgInJld2FyZCByYXRlID0gMCIpOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIHJld2FyZFJhdGUgKiBkdXJhdGlvbiA8PSByZXdhcmRzVG9rZW4uYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpLAogICAgICAgICAgICAicmV3YXJkIGFtb3VudCA+IGJhbGFuY2UiCiAgICAgICAgKTsKCiAgICAgICAgZmluaXNoQXQgPSBibG9jay50aW1lc3RhbXAgKyBkdXJhdGlvbjsKICAgICAgICB1cGRhdGVkQXQgPSBibG9jay50aW1lc3RhbXA7CiAgICB9CgogICAgZnVuY3Rpb24gX21pbih1aW50MjU2IHgsIHVpbnQyNTYgeSkgcHJpdmF0ZSBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4geCA8PSB5ID8geCA6IHk7CiAgICB9Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gdG90YWxTdXBwbHkoKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBzZW5kZXIsIGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwp9Cg=="}],Vm=`

            This is a minimal example of a contract that rewards users for staking their token.

            +`,Zm=({prev:s,next:a})=>i.jsx(u,{version:ym,title:mm,description:bm,html:km,prev:s,next:a,codes:wm}),Wm="0.8.24",Gm="Staking Rewards",Bm="Staking rewards contract based on Synthetix StakingRewards.sol",Vm=[{fileName:"StakingRewards.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFN0YWtpbmdSZXdhcmRzIHsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHN0YWtpbmdUb2tlbjsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHJld2FyZHNUb2tlbjsKCiAgICBhZGRyZXNzIHB1YmxpYyBvd25lcjsKCiAgICAvLyBEdXJhdGlvbiBvZiByZXdhcmRzIHRvIGJlIHBhaWQgb3V0IChpbiBzZWNvbmRzKQogICAgdWludDI1NiBwdWJsaWMgZHVyYXRpb247CiAgICAvLyBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgcmV3YXJkcyBmaW5pc2gKICAgIHVpbnQyNTYgcHVibGljIGZpbmlzaEF0OwogICAgLy8gTWluaW11bSBvZiBsYXN0IHVwZGF0ZWQgdGltZSBhbmQgcmV3YXJkIGZpbmlzaCB0aW1lCiAgICB1aW50MjU2IHB1YmxpYyB1cGRhdGVkQXQ7CiAgICAvLyBSZXdhcmQgdG8gYmUgcGFpZCBvdXQgcGVyIHNlY29uZAogICAgdWludDI1NiBwdWJsaWMgcmV3YXJkUmF0ZTsKICAgIC8vIFN1bSBvZiAocmV3YXJkIHJhdGUgKiBkdCAqIDFlMTggLyB0b3RhbCBzdXBwbHkpCiAgICB1aW50MjU2IHB1YmxpYyByZXdhcmRQZXJUb2tlblN0b3JlZDsKICAgIC8vIFVzZXIgYWRkcmVzcyA9PiByZXdhcmRQZXJUb2tlblN0b3JlZAogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyB1c2VyUmV3YXJkUGVyVG9rZW5QYWlkOwogICAgLy8gVXNlciBhZGRyZXNzID0+IHJld2FyZHMgdG8gYmUgY2xhaW1lZAogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyByZXdhcmRzOwoKICAgIC8vIFRvdGFsIHN0YWtlZAogICAgdWludDI1NiBwdWJsaWMgdG90YWxTdXBwbHk7CiAgICAvLyBVc2VyIGFkZHJlc3MgPT4gc3Rha2VkIGFtb3VudAogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfc3Rha2luZ1Rva2VuLCBhZGRyZXNzIF9yZXdhcmRUb2tlbikgewogICAgICAgIG93bmVyID0gbXNnLnNlbmRlcjsKICAgICAgICBzdGFraW5nVG9rZW4gPSBJRVJDMjAoX3N0YWtpbmdUb2tlbik7CiAgICAgICAgcmV3YXJkc1Rva2VuID0gSUVSQzIwKF9yZXdhcmRUb2tlbik7CiAgICB9CgogICAgbW9kaWZpZXIgb25seU93bmVyKCkgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSBvd25lciwgIm5vdCBhdXRob3JpemVkIik7CiAgICAgICAgXzsKICAgIH0KCiAgICBtb2RpZmllciB1cGRhdGVSZXdhcmQoYWRkcmVzcyBfYWNjb3VudCkgewogICAgICAgIHJld2FyZFBlclRva2VuU3RvcmVkID0gcmV3YXJkUGVyVG9rZW4oKTsKICAgICAgICB1cGRhdGVkQXQgPSBsYXN0VGltZVJld2FyZEFwcGxpY2FibGUoKTsKCiAgICAgICAgaWYgKF9hY2NvdW50ICE9IGFkZHJlc3MoMCkpIHsKICAgICAgICAgICAgcmV3YXJkc1tfYWNjb3VudF0gPSBlYXJuZWQoX2FjY291bnQpOwogICAgICAgICAgICB1c2VyUmV3YXJkUGVyVG9rZW5QYWlkW19hY2NvdW50XSA9IHJld2FyZFBlclRva2VuU3RvcmVkOwogICAgICAgIH0KCiAgICAgICAgXzsKICAgIH0KCiAgICBmdW5jdGlvbiBsYXN0VGltZVJld2FyZEFwcGxpY2FibGUoKSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIF9taW4oZmluaXNoQXQsIGJsb2NrLnRpbWVzdGFtcCk7CiAgICB9CgogICAgZnVuY3Rpb24gcmV3YXJkUGVyVG9rZW4oKSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgaWYgKHRvdGFsU3VwcGx5ID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIHJld2FyZFBlclRva2VuU3RvcmVkOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJld2FyZFBlclRva2VuU3RvcmVkCiAgICAgICAgICAgICsgKHJld2FyZFJhdGUgKiAobGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlKCkgLSB1cGRhdGVkQXQpICogMWUxOCkKICAgICAgICAgICAgICAgIC8gdG90YWxTdXBwbHk7CiAgICB9CgogICAgZnVuY3Rpb24gc3Rha2UodWludDI1NiBfYW1vdW50KSBleHRlcm5hbCB1cGRhdGVSZXdhcmQobXNnLnNlbmRlcikgewogICAgICAgIHJlcXVpcmUoX2Ftb3VudCA+IDAsICJhbW91bnQgPSAwIik7CiAgICAgICAgc3Rha2luZ1Rva2VuLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBfYW1vdW50KTsKICAgICAgICBiYWxhbmNlT2ZbbXNnLnNlbmRlcl0gKz0gX2Ftb3VudDsKICAgICAgICB0b3RhbFN1cHBseSArPSBfYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KHVpbnQyNTYgX2Ftb3VudCkgZXh0ZXJuYWwgdXBkYXRlUmV3YXJkKG1zZy5zZW5kZXIpIHsKICAgICAgICByZXF1aXJlKF9hbW91bnQgPiAwLCAiYW1vdW50ID0gMCIpOwogICAgICAgIGJhbGFuY2VPZlttc2cuc2VuZGVyXSAtPSBfYW1vdW50OwogICAgICAgIHRvdGFsU3VwcGx5IC09IF9hbW91bnQ7CiAgICAgICAgc3Rha2luZ1Rva2VuLnRyYW5zZmVyKG1zZy5zZW5kZXIsIF9hbW91bnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGVhcm5lZChhZGRyZXNzIF9hY2NvdW50KSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgYmFsYW5jZU9mW19hY2NvdW50XQogICAgICAgICAgICAgICAgICAgICogKHJld2FyZFBlclRva2VuKCkgLSB1c2VyUmV3YXJkUGVyVG9rZW5QYWlkW19hY2NvdW50XSkKICAgICAgICAgICAgKSAvIDFlMTgKICAgICAgICApICsgcmV3YXJkc1tfYWNjb3VudF07CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UmV3YXJkKCkgZXh0ZXJuYWwgdXBkYXRlUmV3YXJkKG1zZy5zZW5kZXIpIHsKICAgICAgICB1aW50MjU2IHJld2FyZCA9IHJld2FyZHNbbXNnLnNlbmRlcl07CiAgICAgICAgaWYgKHJld2FyZCA+IDApIHsKICAgICAgICAgICAgcmV3YXJkc1ttc2cuc2VuZGVyXSA9IDA7CiAgICAgICAgICAgIHJld2FyZHNUb2tlbi50cmFuc2Zlcihtc2cuc2VuZGVyLCByZXdhcmQpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBzZXRSZXdhcmRzRHVyYXRpb24odWludDI1NiBfZHVyYXRpb24pIGV4dGVybmFsIG9ubHlPd25lciB7CiAgICAgICAgcmVxdWlyZShmaW5pc2hBdCA8IGJsb2NrLnRpbWVzdGFtcCwgInJld2FyZCBkdXJhdGlvbiBub3QgZmluaXNoZWQiKTsKICAgICAgICBkdXJhdGlvbiA9IF9kdXJhdGlvbjsKICAgIH0KCiAgICBmdW5jdGlvbiBub3RpZnlSZXdhcmRBbW91bnQodWludDI1NiBfYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgb25seU93bmVyCiAgICAgICAgdXBkYXRlUmV3YXJkKGFkZHJlc3MoMCkpCiAgICB7CiAgICAgICAgaWYgKGJsb2NrLnRpbWVzdGFtcCA+PSBmaW5pc2hBdCkgewogICAgICAgICAgICByZXdhcmRSYXRlID0gX2Ftb3VudCAvIGR1cmF0aW9uOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVpbnQyNTYgcmVtYWluaW5nUmV3YXJkcyA9IChmaW5pc2hBdCAtIGJsb2NrLnRpbWVzdGFtcCkgKiByZXdhcmRSYXRlOwogICAgICAgICAgICByZXdhcmRSYXRlID0gKF9hbW91bnQgKyByZW1haW5pbmdSZXdhcmRzKSAvIGR1cmF0aW9uOwogICAgICAgIH0KCiAgICAgICAgcmVxdWlyZShyZXdhcmRSYXRlID4gMCwgInJld2FyZCByYXRlID0gMCIpOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIHJld2FyZFJhdGUgKiBkdXJhdGlvbiA8PSByZXdhcmRzVG9rZW4uYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpLAogICAgICAgICAgICAicmV3YXJkIGFtb3VudCA+IGJhbGFuY2UiCiAgICAgICAgKTsKCiAgICAgICAgZmluaXNoQXQgPSBibG9jay50aW1lc3RhbXAgKyBkdXJhdGlvbjsKICAgICAgICB1cGRhdGVkQXQgPSBibG9jay50aW1lc3RhbXA7CiAgICB9CgogICAgZnVuY3Rpb24gX21pbih1aW50MjU2IHgsIHVpbnQyNTYgeSkgcHJpdmF0ZSBwdXJlIHJldHVybnMgKHVpbnQyNTYpIHsKICAgICAgICByZXR1cm4geCA8PSB5ID8geCA6IHk7CiAgICB9Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gdG90YWxTdXBwbHkoKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBzZW5kZXIsIGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwp9Cg=="}],fm=`

            This is a minimal example of a contract that rewards users for staking their token.

            Code is a stripped down version of Synthetix StakingRewards.sol

            Staking Rewards

            // SPDX-License-Identifier: MIT
            @@ -5211,7 +5211,7 @@ Topics
                     external
                     returns (bool);
             }
            -
            `,Ym=({prev:s,next:a})=>i.jsx(u,{version:Wm,title:Gm,description:Bm,html:Vm,prev:s,next:a,codes:fm}),Rm="0.8.24",vm="Uniswap V2 Swap",Xm="Uniswap V2 swap",Nm=[{fileName:"UniswapV2SwapExamples.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFVuaXN3YXBWMlN3YXBFeGFtcGxlcyB7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgVU5JU1dBUF9WMl9ST1VURVIgPQogICAgICAgIDB4N2EyNTBkNTYzMEI0Y0Y1Mzk3MzlkRjJDNWRBY2I0YzY1OUYyNDg4RDsKCiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgV0VUSCA9IDB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMjsKICAgIGFkZHJlc3MgcHJpdmF0ZSBjb25zdGFudCBEQUkgPSAweDZCMTc1NDc0RTg5MDk0QzQ0RGE5OGI5NTRFZWRlQUM0OTUyNzFkMEY7CiAgICBhZGRyZXNzIGNvbnN0YW50IFVTREMgPSAweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDg7CgogICAgSVVuaXN3YXBWMlJvdXRlciBwcml2YXRlIHJvdXRlciA9IElVbmlzd2FwVjJSb3V0ZXIoVU5JU1dBUF9WMl9ST1VURVIpOwogICAgSUVSQzIwIHByaXZhdGUgd2V0aCA9IElFUkMyMChXRVRIKTsKICAgIElFUkMyMCBwcml2YXRlIGRhaSA9IElFUkMyMChEQUkpOwoKICAgIC8vIFN3YXAgV0VUSCB0byBEQUkKICAgIGZ1bmN0aW9uIHN3YXBTaW5nbGVIb3BFeGFjdEFtb3VudEluKHVpbnQyNTYgYW1vdW50SW4sIHVpbnQyNTYgYW1vdW50T3V0TWluKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpCiAgICB7CiAgICAgICAgd2V0aC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50SW4pOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluKTsKCiAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBwYXRoOwogICAgICAgIHBhdGggPSBuZXcgYWRkcmVzc1tdKDIpOwogICAgICAgIHBhdGhbMF0gPSBXRVRIOwogICAgICAgIHBhdGhbMV0gPSBEQUk7CgogICAgICAgIHVpbnQyNTZbXSBtZW1vcnkgYW1vdW50cyA9IHJvdXRlci5zd2FwRXhhY3RUb2tlbnNGb3JUb2tlbnMoCiAgICAgICAgICAgIGFtb3VudEluLCBhbW91bnRPdXRNaW4sIHBhdGgsIG1zZy5zZW5kZXIsIGJsb2NrLnRpbWVzdGFtcAogICAgICAgICk7CgogICAgICAgIC8vIGFtb3VudHNbMF0gPSBXRVRIIGFtb3VudCwgYW1vdW50c1sxXSA9IERBSSBhbW91bnQKICAgICAgICByZXR1cm4gYW1vdW50c1sxXTsKICAgIH0KCiAgICAvLyBTd2FwIERBSSAtPiBXRVRIIC0+IFVTREMKICAgIGZ1bmN0aW9uIHN3YXBNdWx0aUhvcEV4YWN0QW1vdW50SW4odWludDI1NiBhbW91bnRJbiwgdWludDI1NiBhbW91bnRPdXRNaW4pCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zICh1aW50MjU2IGFtb3VudE91dCkKICAgIHsKICAgICAgICBkYWkudHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIGFtb3VudEluKTsKICAgICAgICBkYWkuYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluKTsKCiAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBwYXRoOwogICAgICAgIHBhdGggPSBuZXcgYWRkcmVzc1tdKDMpOwogICAgICAgIHBhdGhbMF0gPSBEQUk7CiAgICAgICAgcGF0aFsxXSA9IFdFVEg7CiAgICAgICAgcGF0aFsyXSA9IFVTREM7CgogICAgICAgIHVpbnQyNTZbXSBtZW1vcnkgYW1vdW50cyA9IHJvdXRlci5zd2FwRXhhY3RUb2tlbnNGb3JUb2tlbnMoCiAgICAgICAgICAgIGFtb3VudEluLCBhbW91bnRPdXRNaW4sIHBhdGgsIG1zZy5zZW5kZXIsIGJsb2NrLnRpbWVzdGFtcAogICAgICAgICk7CgogICAgICAgIC8vIGFtb3VudHNbMF0gPSBEQUkgYW1vdW50CiAgICAgICAgLy8gYW1vdW50c1sxXSA9IFdFVEggYW1vdW50CiAgICAgICAgLy8gYW1vdW50c1syXSA9IFVTREMgYW1vdW50CiAgICAgICAgcmV0dXJuIGFtb3VudHNbMl07CiAgICB9CgogICAgLy8gU3dhcCBXRVRIIHRvIERBSQogICAgZnVuY3Rpb24gc3dhcFNpbmdsZUhvcEV4YWN0QW1vdW50T3V0KAogICAgICAgIHVpbnQyNTYgYW1vdW50T3V0RGVzaXJlZCwKICAgICAgICB1aW50MjU2IGFtb3VudEluTWF4CiAgICApIGV4dGVybmFsIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KSB7CiAgICAgICAgd2V0aC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50SW5NYXgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluTWF4KTsKCiAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBwYXRoOwogICAgICAgIHBhdGggPSBuZXcgYWRkcmVzc1tdKDIpOwogICAgICAgIHBhdGhbMF0gPSBXRVRIOwogICAgICAgIHBhdGhbMV0gPSBEQUk7CgogICAgICAgIHVpbnQyNTZbXSBtZW1vcnkgYW1vdW50cyA9IHJvdXRlci5zd2FwVG9rZW5zRm9yRXhhY3RUb2tlbnMoCiAgICAgICAgICAgIGFtb3VudE91dERlc2lyZWQsIGFtb3VudEluTWF4LCBwYXRoLCBtc2cuc2VuZGVyLCBibG9jay50aW1lc3RhbXAKICAgICAgICApOwoKICAgICAgICAvLyBSZWZ1bmQgV0VUSCB0byBtc2cuc2VuZGVyCiAgICAgICAgaWYgKGFtb3VudHNbMF0gPCBhbW91bnRJbk1heCkgewogICAgICAgICAgICB3ZXRoLnRyYW5zZmVyKG1zZy5zZW5kZXIsIGFtb3VudEluTWF4IC0gYW1vdW50c1swXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYW1vdW50c1sxXTsKICAgIH0KCiAgICAvLyBTd2FwIERBSSAtPiBXRVRIIC0+IFVTREMKICAgIGZ1bmN0aW9uIHN3YXBNdWx0aUhvcEV4YWN0QW1vdW50T3V0KAogICAgICAgIHVpbnQyNTYgYW1vdW50T3V0RGVzaXJlZCwKICAgICAgICB1aW50MjU2IGFtb3VudEluTWF4CiAgICApIGV4dGVybmFsIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KSB7CiAgICAgICAgZGFpLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBhbW91bnRJbk1heCk7CiAgICAgICAgZGFpLmFwcHJvdmUoYWRkcmVzcyhyb3V0ZXIpLCBhbW91bnRJbk1heCk7CgogICAgICAgIGFkZHJlc3NbXSBtZW1vcnkgcGF0aDsKICAgICAgICBwYXRoID0gbmV3IGFkZHJlc3NbXSgzKTsKICAgICAgICBwYXRoWzBdID0gREFJOwogICAgICAgIHBhdGhbMV0gPSBXRVRIOwogICAgICAgIHBhdGhbMl0gPSBVU0RDOwoKICAgICAgICB1aW50MjU2W10gbWVtb3J5IGFtb3VudHMgPSByb3V0ZXIuc3dhcFRva2Vuc0ZvckV4YWN0VG9rZW5zKAogICAgICAgICAgICBhbW91bnRPdXREZXNpcmVkLCBhbW91bnRJbk1heCwgcGF0aCwgbXNnLnNlbmRlciwgYmxvY2sudGltZXN0YW1wCiAgICAgICAgKTsKCiAgICAgICAgLy8gUmVmdW5kIERBSSB0byBtc2cuc2VuZGVyCiAgICAgICAgaWYgKGFtb3VudHNbMF0gPCBhbW91bnRJbk1heCkgewogICAgICAgICAgICBkYWkudHJhbnNmZXIobXNnLnNlbmRlciwgYW1vdW50SW5NYXggLSBhbW91bnRzWzBdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhbW91bnRzWzJdOwogICAgfQp9CgppbnRlcmZhY2UgSVVuaXN3YXBWMlJvdXRlciB7CiAgICBmdW5jdGlvbiBzd2FwRXhhY3RUb2tlbnNGb3JUb2tlbnMoCiAgICAgICAgdWludDI1NiBhbW91bnRJbiwKICAgICAgICB1aW50MjU2IGFtb3VudE91dE1pbiwKICAgICAgICBhZGRyZXNzW10gY2FsbGRhdGEgcGF0aCwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTYgZGVhZGxpbmUKICAgICkgZXh0ZXJuYWwgcmV0dXJucyAodWludDI1NltdIG1lbW9yeSBhbW91bnRzKTsKCiAgICBmdW5jdGlvbiBzd2FwVG9rZW5zRm9yRXhhY3RUb2tlbnMoCiAgICAgICAgdWludDI1NiBhbW91bnRPdXQsCiAgICAgICAgdWludDI1NiBhbW91bnRJbk1heCwKICAgICAgICBhZGRyZXNzW10gY2FsbGRhdGEgcGF0aCwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTYgZGVhZGxpbmUKICAgICkgZXh0ZXJuYWwgcmV0dXJucyAodWludDI1NltdIG1lbW9yeSBhbW91bnRzKTsKfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBhbGxvd2FuY2UoYWRkcmVzcyBvd25lciwgYWRkcmVzcyBzcGVuZGVyKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIHNlbmRlciwgYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJV0VUSCBpcyBJRVJDMjAgewogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGU7CiAgICBmdW5jdGlvbiB3aXRoZHJhdyh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7Cn0K"},{fileName:"UniswapV2SwapExamplesTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCB7VGVzdCwgY29uc29sZTJ9IGZyb20gImZvcmdlLXN0ZC9UZXN0LnNvbCI7CmltcG9ydCB7CiAgICBVbmlzd2FwVjJTd2FwRXhhbXBsZXMsCiAgICBJRVJDMjAsCiAgICBJV0VUSAp9IGZyb20gIi4uLy4uLy4uL3NyYy9kZWZpL3VuaXN3YXAtdjIvVW5pc3dhcFYyU3dhcEV4YW1wbGVzLnNvbCI7CgphZGRyZXNzIGNvbnN0YW50IFdFVEggPSAweEMwMmFhQTM5YjIyM0ZFOEQwQTBlNUM0RjI3ZUFEOTA4M0M3NTZDYzI7CmFkZHJlc3MgY29uc3RhbnQgREFJID0gMHg2QjE3NTQ3NEU4OTA5NEM0NERhOThiOTU0RWVkZUFDNDk1MjcxZDBGOwphZGRyZXNzIGNvbnN0YW50IFVTREMgPSAweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDg7Cgpjb250cmFjdCBVbmlzd2FwVjJTd2FwRXhhbXBsZXNUZXN0IGlzIFRlc3QgewogICAgSVdFVEggcHJpdmF0ZSB3ZXRoID0gSVdFVEgoV0VUSCk7CiAgICBJRVJDMjAgcHJpdmF0ZSBkYWkgPSBJRVJDMjAoREFJKTsKICAgIElFUkMyMCBwcml2YXRlIHVzZGMgPSBJRVJDMjAoVVNEQyk7CgogICAgVW5pc3dhcFYyU3dhcEV4YW1wbGVzIHByaXZhdGUgdW5pID0gbmV3IFVuaXN3YXBWMlN3YXBFeGFtcGxlcygpOwoKICAgIGZ1bmN0aW9uIHNldFVwKCkgcHVibGljIHt9CgogICAgLy8gU3dhcCBXRVRIIC0+IERBSQogICAgZnVuY3Rpb24gdGVzdFN3YXBTaW5nbGVIb3BFeGFjdEFtb3VudEluKCkgcHVibGljIHsKICAgICAgICB1aW50MjU2IHdldGhBbW91bnQgPSAxZTE4OwogICAgICAgIHdldGguZGVwb3NpdHt2YWx1ZTogd2V0aEFtb3VudH0oKTsKICAgICAgICB3ZXRoLmFwcHJvdmUoYWRkcmVzcyh1bmkpLCB3ZXRoQW1vdW50KTsKCiAgICAgICAgdWludDI1NiBkYWlBbW91bnRNaW4gPSAxOwogICAgICAgIHVpbnQyNTYgZGFpQW1vdW50T3V0ID0KICAgICAgICAgICAgdW5pLnN3YXBTaW5nbGVIb3BFeGFjdEFtb3VudEluKHdldGhBbW91bnQsIGRhaUFtb3VudE1pbik7CgogICAgICAgIGNvbnNvbGUyLmxvZygiREFJIiwgZGFpQW1vdW50T3V0KTsKICAgICAgICBhc3NlcnRHZShkYWlBbW91bnRPdXQsIGRhaUFtb3VudE1pbiwgImFtb3VudCBvdXQgPCBtaW4iKTsKICAgIH0KCiAgICAvLyBTd2FwIERBSSAtPiBXRVRIIC0+IFVTREMKICAgIGZ1bmN0aW9uIHRlc3RTd2FwTXVsdGlIb3BFeGFjdEFtb3VudEluKCkgcHVibGljIHsKICAgICAgICAvLyBTd2FwIFdFVEggLT4gREFJCiAgICAgICAgdWludDI1NiB3ZXRoQW1vdW50ID0gMWUxODsKICAgICAgICB3ZXRoLmRlcG9zaXR7dmFsdWU6IHdldGhBbW91bnR9KCk7CiAgICAgICAgd2V0aC5hcHByb3ZlKGFkZHJlc3ModW5pKSwgd2V0aEFtb3VudCk7CgogICAgICAgIHVpbnQyNTYgZGFpQW1vdW50TWluID0gMTsKICAgICAgICB1bmkuc3dhcFNpbmdsZUhvcEV4YWN0QW1vdW50SW4od2V0aEFtb3VudCwgZGFpQW1vdW50TWluKTsKCiAgICAgICAgLy8gU3dhcCBEQUkgLT4gV0VUSCAtPiBVU0RDCiAgICAgICAgdWludDI1NiBkYWlBbW91bnRJbiA9IDFlMTg7CiAgICAgICAgZGFpLmFwcHJvdmUoYWRkcmVzcyh1bmkpLCBkYWlBbW91bnRJbik7CgogICAgICAgIHVpbnQyNTYgdXNkY0Ftb3VudE91dE1pbiA9IDE7CiAgICAgICAgdWludDI1NiB1c2RjQW1vdW50T3V0ID0KICAgICAgICAgICAgdW5pLnN3YXBNdWx0aUhvcEV4YWN0QW1vdW50SW4oZGFpQW1vdW50SW4sIHVzZGNBbW91bnRPdXRNaW4pOwoKICAgICAgICBjb25zb2xlMi5sb2coIlVTREMiLCB1c2RjQW1vdW50T3V0KTsKICAgICAgICBhc3NlcnRHZSh1c2RjQW1vdW50T3V0LCB1c2RjQW1vdW50T3V0TWluLCAiYW1vdW50IG91dCA8IG1pbiIpOwogICAgfQoKICAgIC8vIFN3YXAgV0VUSCAtPiBEQUkKICAgIGZ1bmN0aW9uIHRlc3RTd2FwU2luZ2xlSG9wRXhhY3RBbW91bnRPdXQoKSBwdWJsaWMgewogICAgICAgIHVpbnQyNTYgd2V0aEFtb3VudCA9IDFlMTg7CiAgICAgICAgd2V0aC5kZXBvc2l0e3ZhbHVlOiB3ZXRoQW1vdW50fSgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHVuaSksIHdldGhBbW91bnQpOwoKICAgICAgICB1aW50MjU2IGRhaUFtb3VudERlc2lyZWQgPSAxZTE4OwogICAgICAgIHVpbnQyNTYgZGFpQW1vdW50T3V0ID0KICAgICAgICAgICAgdW5pLnN3YXBTaW5nbGVIb3BFeGFjdEFtb3VudE91dChkYWlBbW91bnREZXNpcmVkLCB3ZXRoQW1vdW50KTsKCiAgICAgICAgY29uc29sZTIubG9nKCJEQUkiLCBkYWlBbW91bnRPdXQpOwogICAgICAgIGFzc2VydEVxKAogICAgICAgICAgICBkYWlBbW91bnRPdXQsIGRhaUFtb3VudERlc2lyZWQsICJhbW91bnQgb3V0ICE9IGFtb3VudCBvdXQgZGVzaXJlZCIKICAgICAgICApOwogICAgfQoKICAgIC8vIFN3YXAgREFJIC0+IFdFVEggLT4gVVNEQwogICAgZnVuY3Rpb24gdGVzdFN3YXBNdWx0aUhvcEV4YWN0QW1vdW50T3V0KCkgcHVibGljIHsKICAgICAgICAvLyBTd2FwIFdFVEggLT4gREFJCiAgICAgICAgdWludDI1NiB3ZXRoQW1vdW50ID0gMWUxODsKICAgICAgICB3ZXRoLmRlcG9zaXR7dmFsdWU6IHdldGhBbW91bnR9KCk7CiAgICAgICAgd2V0aC5hcHByb3ZlKGFkZHJlc3ModW5pKSwgd2V0aEFtb3VudCk7CgogICAgICAgIC8vIEJ1eSAxMDAgREFJCiAgICAgICAgdWludDI1NiBkYWlBbW91bnRPdXQgPSAxMDAgKiAxZTE4OwogICAgICAgIHVuaS5zd2FwU2luZ2xlSG9wRXhhY3RBbW91bnRPdXQoZGFpQW1vdW50T3V0LCB3ZXRoQW1vdW50KTsKCiAgICAgICAgLy8gU3dhcCBEQUkgLT4gV0VUSCAtPiBVU0RDCiAgICAgICAgZGFpLmFwcHJvdmUoYWRkcmVzcyh1bmkpLCBkYWlBbW91bnRPdXQpOwoKICAgICAgICB1aW50MjU2IGFtb3VudE91dERlc2lyZWQgPSAxZTY7CiAgICAgICAgdWludDI1NiBhbW91bnRPdXQgPQogICAgICAgICAgICB1bmkuc3dhcE11bHRpSG9wRXhhY3RBbW91bnRPdXQoYW1vdW50T3V0RGVzaXJlZCwgZGFpQW1vdW50T3V0KTsKCiAgICAgICAgY29uc29sZTIubG9nKCJVU0RDIiwgYW1vdW50T3V0KTsKICAgICAgICBhc3NlcnRFcSgKICAgICAgICAgICAgYW1vdW50T3V0LCBhbW91bnRPdXREZXNpcmVkLCAiYW1vdW50IG91dCAhPSBhbW91bnQgb3V0IGRlc2lyZWQiCiAgICAgICAgKTsKICAgIH0KfQo="}],Hm=`

            swapExactTokensForTokens sells all tokens for another.

            +`,Ym=({prev:s,next:a})=>i.jsx(u,{version:Wm,title:Gm,description:Bm,html:fm,prev:s,next:a,codes:Vm}),Rm="0.8.24",Xm="Uniswap V2 Swap",vm="Uniswap V2 swap",Nm=[{fileName:"UniswapV2SwapExamples.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFVuaXN3YXBWMlN3YXBFeGFtcGxlcyB7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgVU5JU1dBUF9WMl9ST1VURVIgPQogICAgICAgIDB4N2EyNTBkNTYzMEI0Y0Y1Mzk3MzlkRjJDNWRBY2I0YzY1OUYyNDg4RDsKCiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgV0VUSCA9IDB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMjsKICAgIGFkZHJlc3MgcHJpdmF0ZSBjb25zdGFudCBEQUkgPSAweDZCMTc1NDc0RTg5MDk0QzQ0RGE5OGI5NTRFZWRlQUM0OTUyNzFkMEY7CiAgICBhZGRyZXNzIGNvbnN0YW50IFVTREMgPSAweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDg7CgogICAgSVVuaXN3YXBWMlJvdXRlciBwcml2YXRlIHJvdXRlciA9IElVbmlzd2FwVjJSb3V0ZXIoVU5JU1dBUF9WMl9ST1VURVIpOwogICAgSUVSQzIwIHByaXZhdGUgd2V0aCA9IElFUkMyMChXRVRIKTsKICAgIElFUkMyMCBwcml2YXRlIGRhaSA9IElFUkMyMChEQUkpOwoKICAgIC8vIFN3YXAgV0VUSCB0byBEQUkKICAgIGZ1bmN0aW9uIHN3YXBTaW5nbGVIb3BFeGFjdEFtb3VudEluKHVpbnQyNTYgYW1vdW50SW4sIHVpbnQyNTYgYW1vdW50T3V0TWluKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpCiAgICB7CiAgICAgICAgd2V0aC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50SW4pOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluKTsKCiAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBwYXRoOwogICAgICAgIHBhdGggPSBuZXcgYWRkcmVzc1tdKDIpOwogICAgICAgIHBhdGhbMF0gPSBXRVRIOwogICAgICAgIHBhdGhbMV0gPSBEQUk7CgogICAgICAgIHVpbnQyNTZbXSBtZW1vcnkgYW1vdW50cyA9IHJvdXRlci5zd2FwRXhhY3RUb2tlbnNGb3JUb2tlbnMoCiAgICAgICAgICAgIGFtb3VudEluLCBhbW91bnRPdXRNaW4sIHBhdGgsIG1zZy5zZW5kZXIsIGJsb2NrLnRpbWVzdGFtcAogICAgICAgICk7CgogICAgICAgIC8vIGFtb3VudHNbMF0gPSBXRVRIIGFtb3VudCwgYW1vdW50c1sxXSA9IERBSSBhbW91bnQKICAgICAgICByZXR1cm4gYW1vdW50c1sxXTsKICAgIH0KCiAgICAvLyBTd2FwIERBSSAtPiBXRVRIIC0+IFVTREMKICAgIGZ1bmN0aW9uIHN3YXBNdWx0aUhvcEV4YWN0QW1vdW50SW4odWludDI1NiBhbW91bnRJbiwgdWludDI1NiBhbW91bnRPdXRNaW4pCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zICh1aW50MjU2IGFtb3VudE91dCkKICAgIHsKICAgICAgICBkYWkudHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIGFtb3VudEluKTsKICAgICAgICBkYWkuYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluKTsKCiAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBwYXRoOwogICAgICAgIHBhdGggPSBuZXcgYWRkcmVzc1tdKDMpOwogICAgICAgIHBhdGhbMF0gPSBEQUk7CiAgICAgICAgcGF0aFsxXSA9IFdFVEg7CiAgICAgICAgcGF0aFsyXSA9IFVTREM7CgogICAgICAgIHVpbnQyNTZbXSBtZW1vcnkgYW1vdW50cyA9IHJvdXRlci5zd2FwRXhhY3RUb2tlbnNGb3JUb2tlbnMoCiAgICAgICAgICAgIGFtb3VudEluLCBhbW91bnRPdXRNaW4sIHBhdGgsIG1zZy5zZW5kZXIsIGJsb2NrLnRpbWVzdGFtcAogICAgICAgICk7CgogICAgICAgIC8vIGFtb3VudHNbMF0gPSBEQUkgYW1vdW50CiAgICAgICAgLy8gYW1vdW50c1sxXSA9IFdFVEggYW1vdW50CiAgICAgICAgLy8gYW1vdW50c1syXSA9IFVTREMgYW1vdW50CiAgICAgICAgcmV0dXJuIGFtb3VudHNbMl07CiAgICB9CgogICAgLy8gU3dhcCBXRVRIIHRvIERBSQogICAgZnVuY3Rpb24gc3dhcFNpbmdsZUhvcEV4YWN0QW1vdW50T3V0KAogICAgICAgIHVpbnQyNTYgYW1vdW50T3V0RGVzaXJlZCwKICAgICAgICB1aW50MjU2IGFtb3VudEluTWF4CiAgICApIGV4dGVybmFsIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KSB7CiAgICAgICAgd2V0aC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50SW5NYXgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluTWF4KTsKCiAgICAgICAgYWRkcmVzc1tdIG1lbW9yeSBwYXRoOwogICAgICAgIHBhdGggPSBuZXcgYWRkcmVzc1tdKDIpOwogICAgICAgIHBhdGhbMF0gPSBXRVRIOwogICAgICAgIHBhdGhbMV0gPSBEQUk7CgogICAgICAgIHVpbnQyNTZbXSBtZW1vcnkgYW1vdW50cyA9IHJvdXRlci5zd2FwVG9rZW5zRm9yRXhhY3RUb2tlbnMoCiAgICAgICAgICAgIGFtb3VudE91dERlc2lyZWQsIGFtb3VudEluTWF4LCBwYXRoLCBtc2cuc2VuZGVyLCBibG9jay50aW1lc3RhbXAKICAgICAgICApOwoKICAgICAgICAvLyBSZWZ1bmQgV0VUSCB0byBtc2cuc2VuZGVyCiAgICAgICAgaWYgKGFtb3VudHNbMF0gPCBhbW91bnRJbk1heCkgewogICAgICAgICAgICB3ZXRoLnRyYW5zZmVyKG1zZy5zZW5kZXIsIGFtb3VudEluTWF4IC0gYW1vdW50c1swXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYW1vdW50c1sxXTsKICAgIH0KCiAgICAvLyBTd2FwIERBSSAtPiBXRVRIIC0+IFVTREMKICAgIGZ1bmN0aW9uIHN3YXBNdWx0aUhvcEV4YWN0QW1vdW50T3V0KAogICAgICAgIHVpbnQyNTYgYW1vdW50T3V0RGVzaXJlZCwKICAgICAgICB1aW50MjU2IGFtb3VudEluTWF4CiAgICApIGV4dGVybmFsIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KSB7CiAgICAgICAgZGFpLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBhbW91bnRJbk1heCk7CiAgICAgICAgZGFpLmFwcHJvdmUoYWRkcmVzcyhyb3V0ZXIpLCBhbW91bnRJbk1heCk7CgogICAgICAgIGFkZHJlc3NbXSBtZW1vcnkgcGF0aDsKICAgICAgICBwYXRoID0gbmV3IGFkZHJlc3NbXSgzKTsKICAgICAgICBwYXRoWzBdID0gREFJOwogICAgICAgIHBhdGhbMV0gPSBXRVRIOwogICAgICAgIHBhdGhbMl0gPSBVU0RDOwoKICAgICAgICB1aW50MjU2W10gbWVtb3J5IGFtb3VudHMgPSByb3V0ZXIuc3dhcFRva2Vuc0ZvckV4YWN0VG9rZW5zKAogICAgICAgICAgICBhbW91bnRPdXREZXNpcmVkLCBhbW91bnRJbk1heCwgcGF0aCwgbXNnLnNlbmRlciwgYmxvY2sudGltZXN0YW1wCiAgICAgICAgKTsKCiAgICAgICAgLy8gUmVmdW5kIERBSSB0byBtc2cuc2VuZGVyCiAgICAgICAgaWYgKGFtb3VudHNbMF0gPCBhbW91bnRJbk1heCkgewogICAgICAgICAgICBkYWkudHJhbnNmZXIobXNnLnNlbmRlciwgYW1vdW50SW5NYXggLSBhbW91bnRzWzBdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhbW91bnRzWzJdOwogICAgfQp9CgppbnRlcmZhY2UgSVVuaXN3YXBWMlJvdXRlciB7CiAgICBmdW5jdGlvbiBzd2FwRXhhY3RUb2tlbnNGb3JUb2tlbnMoCiAgICAgICAgdWludDI1NiBhbW91bnRJbiwKICAgICAgICB1aW50MjU2IGFtb3VudE91dE1pbiwKICAgICAgICBhZGRyZXNzW10gY2FsbGRhdGEgcGF0aCwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTYgZGVhZGxpbmUKICAgICkgZXh0ZXJuYWwgcmV0dXJucyAodWludDI1NltdIG1lbW9yeSBhbW91bnRzKTsKCiAgICBmdW5jdGlvbiBzd2FwVG9rZW5zRm9yRXhhY3RUb2tlbnMoCiAgICAgICAgdWludDI1NiBhbW91bnRPdXQsCiAgICAgICAgdWludDI1NiBhbW91bnRJbk1heCwKICAgICAgICBhZGRyZXNzW10gY2FsbGRhdGEgcGF0aCwKICAgICAgICBhZGRyZXNzIHRvLAogICAgICAgIHVpbnQyNTYgZGVhZGxpbmUKICAgICkgZXh0ZXJuYWwgcmV0dXJucyAodWludDI1NltdIG1lbW9yeSBhbW91bnRzKTsKfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBhbGxvd2FuY2UoYWRkcmVzcyBvd25lciwgYWRkcmVzcyBzcGVuZGVyKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIHNlbmRlciwgYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJV0VUSCBpcyBJRVJDMjAgewogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGU7CiAgICBmdW5jdGlvbiB3aXRoZHJhdyh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7Cn0K"},{fileName:"UniswapV2SwapExamplesTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCB7VGVzdCwgY29uc29sZTJ9IGZyb20gImZvcmdlLXN0ZC9UZXN0LnNvbCI7CmltcG9ydCB7CiAgICBVbmlzd2FwVjJTd2FwRXhhbXBsZXMsCiAgICBJRVJDMjAsCiAgICBJV0VUSAp9IGZyb20gIi4uLy4uLy4uL3NyYy9kZWZpL3VuaXN3YXAtdjIvVW5pc3dhcFYyU3dhcEV4YW1wbGVzLnNvbCI7CgphZGRyZXNzIGNvbnN0YW50IFdFVEggPSAweEMwMmFhQTM5YjIyM0ZFOEQwQTBlNUM0RjI3ZUFEOTA4M0M3NTZDYzI7CmFkZHJlc3MgY29uc3RhbnQgREFJID0gMHg2QjE3NTQ3NEU4OTA5NEM0NERhOThiOTU0RWVkZUFDNDk1MjcxZDBGOwphZGRyZXNzIGNvbnN0YW50IFVTREMgPSAweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDg7Cgpjb250cmFjdCBVbmlzd2FwVjJTd2FwRXhhbXBsZXNUZXN0IGlzIFRlc3QgewogICAgSVdFVEggcHJpdmF0ZSB3ZXRoID0gSVdFVEgoV0VUSCk7CiAgICBJRVJDMjAgcHJpdmF0ZSBkYWkgPSBJRVJDMjAoREFJKTsKICAgIElFUkMyMCBwcml2YXRlIHVzZGMgPSBJRVJDMjAoVVNEQyk7CgogICAgVW5pc3dhcFYyU3dhcEV4YW1wbGVzIHByaXZhdGUgdW5pID0gbmV3IFVuaXN3YXBWMlN3YXBFeGFtcGxlcygpOwoKICAgIGZ1bmN0aW9uIHNldFVwKCkgcHVibGljIHt9CgogICAgLy8gU3dhcCBXRVRIIC0+IERBSQogICAgZnVuY3Rpb24gdGVzdFN3YXBTaW5nbGVIb3BFeGFjdEFtb3VudEluKCkgcHVibGljIHsKICAgICAgICB1aW50MjU2IHdldGhBbW91bnQgPSAxZTE4OwogICAgICAgIHdldGguZGVwb3NpdHt2YWx1ZTogd2V0aEFtb3VudH0oKTsKICAgICAgICB3ZXRoLmFwcHJvdmUoYWRkcmVzcyh1bmkpLCB3ZXRoQW1vdW50KTsKCiAgICAgICAgdWludDI1NiBkYWlBbW91bnRNaW4gPSAxOwogICAgICAgIHVpbnQyNTYgZGFpQW1vdW50T3V0ID0KICAgICAgICAgICAgdW5pLnN3YXBTaW5nbGVIb3BFeGFjdEFtb3VudEluKHdldGhBbW91bnQsIGRhaUFtb3VudE1pbik7CgogICAgICAgIGNvbnNvbGUyLmxvZygiREFJIiwgZGFpQW1vdW50T3V0KTsKICAgICAgICBhc3NlcnRHZShkYWlBbW91bnRPdXQsIGRhaUFtb3VudE1pbiwgImFtb3VudCBvdXQgPCBtaW4iKTsKICAgIH0KCiAgICAvLyBTd2FwIERBSSAtPiBXRVRIIC0+IFVTREMKICAgIGZ1bmN0aW9uIHRlc3RTd2FwTXVsdGlIb3BFeGFjdEFtb3VudEluKCkgcHVibGljIHsKICAgICAgICAvLyBTd2FwIFdFVEggLT4gREFJCiAgICAgICAgdWludDI1NiB3ZXRoQW1vdW50ID0gMWUxODsKICAgICAgICB3ZXRoLmRlcG9zaXR7dmFsdWU6IHdldGhBbW91bnR9KCk7CiAgICAgICAgd2V0aC5hcHByb3ZlKGFkZHJlc3ModW5pKSwgd2V0aEFtb3VudCk7CgogICAgICAgIHVpbnQyNTYgZGFpQW1vdW50TWluID0gMTsKICAgICAgICB1bmkuc3dhcFNpbmdsZUhvcEV4YWN0QW1vdW50SW4od2V0aEFtb3VudCwgZGFpQW1vdW50TWluKTsKCiAgICAgICAgLy8gU3dhcCBEQUkgLT4gV0VUSCAtPiBVU0RDCiAgICAgICAgdWludDI1NiBkYWlBbW91bnRJbiA9IDFlMTg7CiAgICAgICAgZGFpLmFwcHJvdmUoYWRkcmVzcyh1bmkpLCBkYWlBbW91bnRJbik7CgogICAgICAgIHVpbnQyNTYgdXNkY0Ftb3VudE91dE1pbiA9IDE7CiAgICAgICAgdWludDI1NiB1c2RjQW1vdW50T3V0ID0KICAgICAgICAgICAgdW5pLnN3YXBNdWx0aUhvcEV4YWN0QW1vdW50SW4oZGFpQW1vdW50SW4sIHVzZGNBbW91bnRPdXRNaW4pOwoKICAgICAgICBjb25zb2xlMi5sb2coIlVTREMiLCB1c2RjQW1vdW50T3V0KTsKICAgICAgICBhc3NlcnRHZSh1c2RjQW1vdW50T3V0LCB1c2RjQW1vdW50T3V0TWluLCAiYW1vdW50IG91dCA8IG1pbiIpOwogICAgfQoKICAgIC8vIFN3YXAgV0VUSCAtPiBEQUkKICAgIGZ1bmN0aW9uIHRlc3RTd2FwU2luZ2xlSG9wRXhhY3RBbW91bnRPdXQoKSBwdWJsaWMgewogICAgICAgIHVpbnQyNTYgd2V0aEFtb3VudCA9IDFlMTg7CiAgICAgICAgd2V0aC5kZXBvc2l0e3ZhbHVlOiB3ZXRoQW1vdW50fSgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHVuaSksIHdldGhBbW91bnQpOwoKICAgICAgICB1aW50MjU2IGRhaUFtb3VudERlc2lyZWQgPSAxZTE4OwogICAgICAgIHVpbnQyNTYgZGFpQW1vdW50T3V0ID0KICAgICAgICAgICAgdW5pLnN3YXBTaW5nbGVIb3BFeGFjdEFtb3VudE91dChkYWlBbW91bnREZXNpcmVkLCB3ZXRoQW1vdW50KTsKCiAgICAgICAgY29uc29sZTIubG9nKCJEQUkiLCBkYWlBbW91bnRPdXQpOwogICAgICAgIGFzc2VydEVxKAogICAgICAgICAgICBkYWlBbW91bnRPdXQsIGRhaUFtb3VudERlc2lyZWQsICJhbW91bnQgb3V0ICE9IGFtb3VudCBvdXQgZGVzaXJlZCIKICAgICAgICApOwogICAgfQoKICAgIC8vIFN3YXAgREFJIC0+IFdFVEggLT4gVVNEQwogICAgZnVuY3Rpb24gdGVzdFN3YXBNdWx0aUhvcEV4YWN0QW1vdW50T3V0KCkgcHVibGljIHsKICAgICAgICAvLyBTd2FwIFdFVEggLT4gREFJCiAgICAgICAgdWludDI1NiB3ZXRoQW1vdW50ID0gMWUxODsKICAgICAgICB3ZXRoLmRlcG9zaXR7dmFsdWU6IHdldGhBbW91bnR9KCk7CiAgICAgICAgd2V0aC5hcHByb3ZlKGFkZHJlc3ModW5pKSwgd2V0aEFtb3VudCk7CgogICAgICAgIC8vIEJ1eSAxMDAgREFJCiAgICAgICAgdWludDI1NiBkYWlBbW91bnRPdXQgPSAxMDAgKiAxZTE4OwogICAgICAgIHVuaS5zd2FwU2luZ2xlSG9wRXhhY3RBbW91bnRPdXQoZGFpQW1vdW50T3V0LCB3ZXRoQW1vdW50KTsKCiAgICAgICAgLy8gU3dhcCBEQUkgLT4gV0VUSCAtPiBVU0RDCiAgICAgICAgZGFpLmFwcHJvdmUoYWRkcmVzcyh1bmkpLCBkYWlBbW91bnRPdXQpOwoKICAgICAgICB1aW50MjU2IGFtb3VudE91dERlc2lyZWQgPSAxZTY7CiAgICAgICAgdWludDI1NiBhbW91bnRPdXQgPQogICAgICAgICAgICB1bmkuc3dhcE11bHRpSG9wRXhhY3RBbW91bnRPdXQoYW1vdW50T3V0RGVzaXJlZCwgZGFpQW1vdW50T3V0KTsKCiAgICAgICAgY29uc29sZTIubG9nKCJVU0RDIiwgYW1vdW50T3V0KTsKICAgICAgICBhc3NlcnRFcSgKICAgICAgICAgICAgYW1vdW50T3V0LCBhbW91bnRPdXREZXNpcmVkLCAiYW1vdW50IG91dCAhPSBhbW91bnQgb3V0IGRlc2lyZWQiCiAgICAgICAgKTsKICAgIH0KfQo="}],Hm=`

            swapExactTokensForTokens sells all tokens for another.

            swapTokensForExactTokens buys specific amount of tokens set by the caller.

            // SPDX-License-Identifier: MIT
             pragma solidity ^0.8.24;
            @@ -5463,7 +5463,7 @@ Topics
                     );
                 }
             }
            -
            `,Fm=({prev:s,next:a})=>i.jsx(u,{version:Rm,title:vm,description:Xm,html:Hm,prev:s,next:a,codes:Nm}),Km="0.8.24",Sm="Uniswap V2 Add Remove Liquidity",Mm="Uniswap V2 add remove liquidity",xm=[{fileName:"UniswapV2Liquidity.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFVuaXN3YXBWMkFkZExpcXVpZGl0eSB7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgRkFDVE9SWSA9CiAgICAgICAgMHg1QzY5YkVlNzAxZWY4MTRhMkI2YTNFREQ0QjE2NTJDQjljYzVhQTZmOwogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IFJPVVRFUiA9IDB4N2EyNTBkNTYzMEI0Y0Y1Mzk3MzlkRjJDNWRBY2I0YzY1OUYyNDg4RDsKICAgIGFkZHJlc3MgcHJpdmF0ZSBjb25zdGFudCBXRVRIID0gMHhDMDJhYUEzOWIyMjNGRThEMEEwZTVDNEYyN2VBRDkwODNDNzU2Q2MyOwogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IFVTRFQgPSAweGRBQzE3Rjk1OEQyZWU1MjNhMjIwNjIwNjk5NDU5N0MxM0Q4MzFlYzc7CgogICAgZnVuY3Rpb24gYWRkTGlxdWlkaXR5KAogICAgICAgIGFkZHJlc3MgX3Rva2VuQSwKICAgICAgICBhZGRyZXNzIF90b2tlbkIsCiAgICAgICAgdWludDI1NiBfYW1vdW50QSwKICAgICAgICB1aW50MjU2IF9hbW91bnRCCiAgICApIGV4dGVybmFsIHsKICAgICAgICBzYWZlVHJhbnNmZXJGcm9tKElFUkMyMChfdG9rZW5BKSwgbXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudEEpOwogICAgICAgIHNhZmVUcmFuc2ZlckZyb20oSUVSQzIwKF90b2tlbkIpLCBtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBfYW1vdW50Qik7CgogICAgICAgIHNhZmVBcHByb3ZlKElFUkMyMChfdG9rZW5BKSwgUk9VVEVSLCBfYW1vdW50QSk7CiAgICAgICAgc2FmZUFwcHJvdmUoSUVSQzIwKF90b2tlbkIpLCBST1VURVIsIF9hbW91bnRCKTsKCiAgICAgICAgKHVpbnQyNTYgYW1vdW50QSwgdWludDI1NiBhbW91bnRCLCB1aW50MjU2IGxpcXVpZGl0eSkgPSBJVW5pc3dhcFYyUm91dGVyKAogICAgICAgICAgICBST1VURVIKICAgICAgICApLmFkZExpcXVpZGl0eSgKICAgICAgICAgICAgX3Rva2VuQSwKICAgICAgICAgICAgX3Rva2VuQiwKICAgICAgICAgICAgX2Ftb3VudEEsCiAgICAgICAgICAgIF9hbW91bnRCLAogICAgICAgICAgICAxLAogICAgICAgICAgICAxLAogICAgICAgICAgICBhZGRyZXNzKHRoaXMpLAogICAgICAgICAgICBibG9jay50aW1lc3RhbXAKICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZUxpcXVpZGl0eShhZGRyZXNzIF90b2tlbkEsIGFkZHJlc3MgX3Rva2VuQikgZXh0ZXJuYWwgewogICAgICAgIGFkZHJlc3MgcGFpciA9IElVbmlzd2FwVjJGYWN0b3J5KEZBQ1RPUlkpLmdldFBhaXIoX3Rva2VuQSwgX3Rva2VuQik7CgogICAgICAgIHVpbnQyNTYgbGlxdWlkaXR5ID0gSUVSQzIwKHBhaXIpLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICBzYWZlQXBwcm92ZShJRVJDMjAocGFpciksIFJPVVRFUiwgbGlxdWlkaXR5KTsKCiAgICAgICAgKHVpbnQyNTYgYW1vdW50QSwgdWludDI1NiBhbW91bnRCKSA9IElVbmlzd2FwVjJSb3V0ZXIoUk9VVEVSKQogICAgICAgICAgICAucmVtb3ZlTGlxdWlkaXR5KAogICAgICAgICAgICBfdG9rZW5BLCBfdG9rZW5CLCBsaXF1aWRpdHksIDEsIDEsIGFkZHJlc3ModGhpcyksIGJsb2NrLnRpbWVzdGFtcAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGV2IFRoZSB0cmFuc2ZlckZyb20gZnVuY3Rpb24gbWF5IG9yIG1heSBub3QgcmV0dXJuIGEgYm9vbC4KICAgICAqIFRoZSBFUkMtMjAgc3BlYyByZXR1cm5zIGEgYm9vbCwgYnV0IHNvbWUgdG9rZW5zIGRvbid0IGZvbGxvdyB0aGUgc3BlYy4KICAgICAqIE5lZWQgdG8gY2hlY2sgaWYgZGF0YSBpcyBlbXB0eSBvciB0cnVlLgogICAgICovCiAgICBmdW5jdGlvbiBzYWZlVHJhbnNmZXJGcm9tKAogICAgICAgIElFUkMyMCB0b2tlbiwKICAgICAgICBhZGRyZXNzIHNlbmRlciwKICAgICAgICBhZGRyZXNzIHJlY2lwaWVudCwKICAgICAgICB1aW50MjU2IGFtb3VudAogICAgKSBpbnRlcm5hbCB7CiAgICAgICAgKGJvb2wgc3VjY2VzcywgYnl0ZXMgbWVtb3J5IHJldHVybkRhdGEpID0gYWRkcmVzcyh0b2tlbikuY2FsbCgKICAgICAgICAgICAgYWJpLmVuY29kZUNhbGwoSUVSQzIwLnRyYW5zZmVyRnJvbSwgKHNlbmRlciwgcmVjaXBpZW50LCBhbW91bnQpKQogICAgICAgICk7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgc3VjY2VzcwogICAgICAgICAgICAgICAgJiYgKHJldHVybkRhdGEubGVuZ3RoID09IDAgfHwgYWJpLmRlY29kZShyZXR1cm5EYXRhLCAoYm9vbCkpKSwKICAgICAgICAgICAgIlRyYW5zZmVyIGZyb20gZmFpbCIKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGRldiBUaGUgYXBwcm92ZSBmdW5jdGlvbiBtYXkgb3IgbWF5IG5vdCByZXR1cm4gYSBib29sLgogICAgICogVGhlIEVSQy0yMCBzcGVjIHJldHVybnMgYSBib29sLCBidXQgc29tZSB0b2tlbnMgZG9uJ3QgZm9sbG93IHRoZSBzcGVjLgogICAgICogTmVlZCB0byBjaGVjayBpZiBkYXRhIGlzIGVtcHR5IG9yIHRydWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNhZmVBcHByb3ZlKElFUkMyMCB0b2tlbiwgYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkKICAgICAgICBpbnRlcm5hbAogICAgewogICAgICAgIChib29sIHN1Y2Nlc3MsIGJ5dGVzIG1lbW9yeSByZXR1cm5EYXRhKSA9IGFkZHJlc3ModG9rZW4pLmNhbGwoCiAgICAgICAgICAgIGFiaS5lbmNvZGVDYWxsKElFUkMyMC5hcHByb3ZlLCAoc3BlbmRlciwgYW1vdW50KSkKICAgICAgICApOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIHN1Y2Nlc3MKICAgICAgICAgICAgICAgICYmIChyZXR1cm5EYXRhLmxlbmd0aCA9PSAwIHx8IGFiaS5kZWNvZGUocmV0dXJuRGF0YSwgKGJvb2wpKSksCiAgICAgICAgICAgICJBcHByb3ZlIGZhaWwiCiAgICAgICAgKTsKICAgIH0KfQoKaW50ZXJmYWNlIElVbmlzd2FwVjJSb3V0ZXIgewogICAgZnVuY3Rpb24gYWRkTGlxdWlkaXR5KAogICAgICAgIGFkZHJlc3MgdG9rZW5BLAogICAgICAgIGFkZHJlc3MgdG9rZW5CLAogICAgICAgIHVpbnQyNTYgYW1vdW50QURlc2lyZWQsCiAgICAgICAgdWludDI1NiBhbW91bnRCRGVzaXJlZCwKICAgICAgICB1aW50MjU2IGFtb3VudEFNaW4sCiAgICAgICAgdWludDI1NiBhbW91bnRCTWluLAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NiBkZWFkbGluZQogICAgKSBleHRlcm5hbCByZXR1cm5zICh1aW50MjU2IGFtb3VudEEsIHVpbnQyNTYgYW1vdW50QiwgdWludDI1NiBsaXF1aWRpdHkpOwoKICAgIGZ1bmN0aW9uIHJlbW92ZUxpcXVpZGl0eSgKICAgICAgICBhZGRyZXNzIHRva2VuQSwKICAgICAgICBhZGRyZXNzIHRva2VuQiwKICAgICAgICB1aW50MjU2IGxpcXVpZGl0eSwKICAgICAgICB1aW50MjU2IGFtb3VudEFNaW4sCiAgICAgICAgdWludDI1NiBhbW91bnRCTWluLAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NiBkZWFkbGluZQogICAgKSBleHRlcm5hbCByZXR1cm5zICh1aW50MjU2IGFtb3VudEEsIHVpbnQyNTYgYW1vdW50Qik7Cn0KCmludGVyZmFjZSBJVW5pc3dhcFYyRmFjdG9yeSB7CiAgICBmdW5jdGlvbiBnZXRQYWlyKGFkZHJlc3MgdG9rZW4wLCBhZGRyZXNzIHRva2VuMSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChhZGRyZXNzKTsKfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBhbGxvd2FuY2UoYWRkcmVzcyBvd25lciwgYWRkcmVzcyBzcGVuZGVyKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIHNlbmRlciwgYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0K"},{fileName:"UniswapV2LiquidityTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCB7VGVzdH0gZnJvbSAiZm9yZ2Utc3RkL1Rlc3Quc29sIjsKaW1wb3J0CiAgICAiLi4vLi4vLi4vc3JjL2RlZmkvdW5pc3dhcC12Mi1hZGQtcmVtb3ZlLWxpcXVpZGl0eS9Vbmlzd2FwVjJMaXF1aWRpdHkuc29sIjsKCklFUkMyMCBjb25zdGFudCBXRVRIID0gSUVSQzIwKDB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMik7CklFUkMyMCBjb25zdGFudCBVU0RUID0gSUVSQzIwKDB4ZEFDMTdGOTU4RDJlZTUyM2EyMjA2MjA2OTk0NTk3QzEzRDgzMWVjNyk7CklFUkMyMCBjb25zdGFudCBQQUlSID0gSUVSQzIwKDB4MGQ0YTExZDVFRWFhQzI4RUMzRjYxZDEwMGRhRjRkNDA0NzFmMTg1Mik7Cgpjb250cmFjdCBVbmlzd2FwVjJBZGRMaXF1aWRpdHlUZXN0IGlzIFRlc3QgewogICAgVW5pc3dhcFYyQWRkTGlxdWlkaXR5IHByaXZhdGUgdW5pID0gbmV3IFVuaXN3YXBWMkFkZExpcXVpZGl0eSgpOwoKICAgIC8vICBBZGQgV0VUSC9VU0RUIExpcXVpZGl0eSB0byBVbmlzd2FwCiAgICBmdW5jdGlvbiB0ZXN0QWRkTGlxdWlkaXR5KCkgcHVibGljIHsKICAgICAgICAvLyBEZWFsIHRlc3QgVVNEVCBhbmQgV0VUSCB0byB0aGlzIGNvbnRyYWN0CiAgICAgICAgZGVhbChhZGRyZXNzKFVTRFQpLCBhZGRyZXNzKHRoaXMpLCAxZTYgKiAxZTYpOwogICAgICAgIGFzc2VydEVxKAogICAgICAgICAgICBVU0RULmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKSwgMWU2ICogMWU2LCAiVVNEVCBiYWxhbmNlIGluY29ycmVjdCIKICAgICAgICApOwogICAgICAgIGRlYWwoYWRkcmVzcyhXRVRIKSwgYWRkcmVzcyh0aGlzKSwgMWU2ICogMWUxOCk7CiAgICAgICAgYXNzZXJ0RXEoCiAgICAgICAgICAgIFdFVEguYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpLCAxZTYgKiAxZTE4LCAiV0VUSCBiYWxhbmNlIGluY29ycmVjdCIKICAgICAgICApOwoKICAgICAgICAvLyBBcHByb3ZlIHVuaSBmb3IgdHJhbnNmZXJyaW5nCiAgICAgICAgc2FmZUFwcHJvdmUoV0VUSCwgYWRkcmVzcyh1bmkpLCAxZTY0KTsKICAgICAgICBzYWZlQXBwcm92ZShVU0RULCBhZGRyZXNzKHVuaSksIDFlNjQpOwoKICAgICAgICB1bmkuYWRkTGlxdWlkaXR5KGFkZHJlc3MoV0VUSCksIGFkZHJlc3MoVVNEVCksIDEgKiAxZTE4LCAzMDAwLjA1ICogMWU2KTsKCiAgICAgICAgYXNzZXJ0R3QoUEFJUi5iYWxhbmNlT2YoYWRkcmVzcyh1bmkpKSwgMCwgInBhaXIgYmFsYW5jZSAwIik7CiAgICB9CgogICAgLy8gUmVtb3ZlIFdFVEgvVVNEVCBMaXF1aWRpdHkgZnJvbSBVbmlzd2FwCiAgICBmdW5jdGlvbiB0ZXN0UmVtb3ZlTGlxdWlkaXR5KCkgcHVibGljIHsKICAgICAgICAvLyBEZWFsIExQIHRva2VucyB0byB1bmkKICAgICAgICBkZWFsKGFkZHJlc3MoUEFJUiksIGFkZHJlc3ModW5pKSwgMWUxMCk7CiAgICAgICAgYXNzZXJ0RXEoUEFJUi5iYWxhbmNlT2YoYWRkcmVzcyh1bmkpKSwgMWUxMCwgIkxQIHRva2VucyBiYWxhbmNlID0gMCIpOwogICAgICAgIGFzc2VydEVxKFVTRFQuYmFsYW5jZU9mKGFkZHJlc3ModW5pKSksIDAsICJVU0RUIGJhbGFuY2Ugbm9uLXplcm8iKTsKICAgICAgICBhc3NlcnRFcShXRVRILmJhbGFuY2VPZihhZGRyZXNzKHVuaSkpLCAwLCAiV0VUSCBiYWxhbmNlIG5vbi16ZXJvIik7CgogICAgICAgIHVuaS5yZW1vdmVMaXF1aWRpdHkoYWRkcmVzcyhXRVRIKSwgYWRkcmVzcyhVU0RUKSk7CgogICAgICAgIGFzc2VydEVxKFBBSVIuYmFsYW5jZU9mKGFkZHJlc3ModW5pKSksIDAsICJMUCB0b2tlbnMgYmFsYW5jZSAhPSAwIik7CiAgICAgICAgYXNzZXJ0R3QoVVNEVC5iYWxhbmNlT2YoYWRkcmVzcyh1bmkpKSwgMCwgIlVTRFQgYmFsYW5jZSA9IDAiKTsKICAgICAgICBhc3NlcnRHdChXRVRILmJhbGFuY2VPZihhZGRyZXNzKHVuaSkpLCAwLCAiV0VUSCBiYWxhbmNlID0gMCIpOwogICAgfQoKICAgIC8qKgogICAgICogQGRldiBUaGUgdHJhbnNmZXJGcm9tIGZ1bmN0aW9uIG1heSBvciBtYXkgbm90IHJldHVybiBhIGJvb2wuCiAgICAgKiBUaGUgRVJDLTIwIHNwZWMgcmV0dXJucyBhIGJvb2wsIGJ1dCBzb21lIHRva2VucyBkb24ndCBmb2xsb3cgdGhlIHNwZWMuCiAgICAgKiBOZWVkIHRvIGNoZWNrIGlmIGRhdGEgaXMgZW1wdHkgb3IgdHJ1ZS4KICAgICAqLwogICAgZnVuY3Rpb24gc2FmZVRyYW5zZmVyRnJvbSgKICAgICAgICBJRVJDMjAgdG9rZW4sCiAgICAgICAgYWRkcmVzcyBzZW5kZXIsCiAgICAgICAgYWRkcmVzcyByZWNpcGllbnQsCiAgICAgICAgdWludDI1NiBhbW91bnQKICAgICkgaW50ZXJuYWwgewogICAgICAgIChib29sIHN1Y2Nlc3MsIGJ5dGVzIG1lbW9yeSByZXR1cm5EYXRhKSA9IGFkZHJlc3ModG9rZW4pLmNhbGwoCiAgICAgICAgICAgIGFiaS5lbmNvZGVDYWxsKElFUkMyMC50cmFuc2ZlckZyb20sIChzZW5kZXIsIHJlY2lwaWVudCwgYW1vdW50KSkKICAgICAgICApOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIHN1Y2Nlc3MKICAgICAgICAgICAgICAgICYmIChyZXR1cm5EYXRhLmxlbmd0aCA9PSAwIHx8IGFiaS5kZWNvZGUocmV0dXJuRGF0YSwgKGJvb2wpKSksCiAgICAgICAgICAgICJUcmFuc2ZlciBmcm9tIGZhaWwiCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXYgVGhlIGFwcHJvdmUgZnVuY3Rpb24gbWF5IG9yIG1heSBub3QgcmV0dXJuIGEgYm9vbC4KICAgICAqIFRoZSBFUkMtMjAgc3BlYyByZXR1cm5zIGEgYm9vbCwgYnV0IHNvbWUgdG9rZW5zIGRvbid0IGZvbGxvdyB0aGUgc3BlYy4KICAgICAqIE5lZWQgdG8gY2hlY2sgaWYgZGF0YSBpcyBlbXB0eSBvciB0cnVlLgogICAgICovCiAgICBmdW5jdGlvbiBzYWZlQXBwcm92ZShJRVJDMjAgdG9rZW4sIGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpCiAgICAgICAgaW50ZXJuYWwKICAgIHsKICAgICAgICAoYm9vbCBzdWNjZXNzLCBieXRlcyBtZW1vcnkgcmV0dXJuRGF0YSkgPSBhZGRyZXNzKHRva2VuKS5jYWxsKAogICAgICAgICAgICBhYmkuZW5jb2RlQ2FsbChJRVJDMjAuYXBwcm92ZSwgKHNwZW5kZXIsIGFtb3VudCkpCiAgICAgICAgKTsKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICBzdWNjZXNzCiAgICAgICAgICAgICAgICAmJiAocmV0dXJuRGF0YS5sZW5ndGggPT0gMCB8fCBhYmkuZGVjb2RlKHJldHVybkRhdGEsIChib29sKSkpLAogICAgICAgICAgICAiQXBwcm92ZSBmYWlsIgogICAgICAgICk7CiAgICB9Cn0K"}],Jm=`

            Add / Remove Liquidity

            +`,Fm=({prev:s,next:a})=>i.jsx(u,{version:Rm,title:Xm,description:vm,html:Hm,prev:s,next:a,codes:Nm}),Km="0.8.24",Sm="Uniswap V2 Add Remove Liquidity",Mm="Uniswap V2 add remove liquidity",xm=[{fileName:"UniswapV2Liquidity.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFVuaXN3YXBWMkFkZExpcXVpZGl0eSB7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgRkFDVE9SWSA9CiAgICAgICAgMHg1QzY5YkVlNzAxZWY4MTRhMkI2YTNFREQ0QjE2NTJDQjljYzVhQTZmOwogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IFJPVVRFUiA9IDB4N2EyNTBkNTYzMEI0Y0Y1Mzk3MzlkRjJDNWRBY2I0YzY1OUYyNDg4RDsKICAgIGFkZHJlc3MgcHJpdmF0ZSBjb25zdGFudCBXRVRIID0gMHhDMDJhYUEzOWIyMjNGRThEMEEwZTVDNEYyN2VBRDkwODNDNzU2Q2MyOwogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IFVTRFQgPSAweGRBQzE3Rjk1OEQyZWU1MjNhMjIwNjIwNjk5NDU5N0MxM0Q4MzFlYzc7CgogICAgZnVuY3Rpb24gYWRkTGlxdWlkaXR5KAogICAgICAgIGFkZHJlc3MgX3Rva2VuQSwKICAgICAgICBhZGRyZXNzIF90b2tlbkIsCiAgICAgICAgdWludDI1NiBfYW1vdW50QSwKICAgICAgICB1aW50MjU2IF9hbW91bnRCCiAgICApIGV4dGVybmFsIHsKICAgICAgICBzYWZlVHJhbnNmZXJGcm9tKElFUkMyMChfdG9rZW5BKSwgbXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgX2Ftb3VudEEpOwogICAgICAgIHNhZmVUcmFuc2ZlckZyb20oSUVSQzIwKF90b2tlbkIpLCBtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBfYW1vdW50Qik7CgogICAgICAgIHNhZmVBcHByb3ZlKElFUkMyMChfdG9rZW5BKSwgUk9VVEVSLCBfYW1vdW50QSk7CiAgICAgICAgc2FmZUFwcHJvdmUoSUVSQzIwKF90b2tlbkIpLCBST1VURVIsIF9hbW91bnRCKTsKCiAgICAgICAgKHVpbnQyNTYgYW1vdW50QSwgdWludDI1NiBhbW91bnRCLCB1aW50MjU2IGxpcXVpZGl0eSkgPSBJVW5pc3dhcFYyUm91dGVyKAogICAgICAgICAgICBST1VURVIKICAgICAgICApLmFkZExpcXVpZGl0eSgKICAgICAgICAgICAgX3Rva2VuQSwKICAgICAgICAgICAgX3Rva2VuQiwKICAgICAgICAgICAgX2Ftb3VudEEsCiAgICAgICAgICAgIF9hbW91bnRCLAogICAgICAgICAgICAxLAogICAgICAgICAgICAxLAogICAgICAgICAgICBhZGRyZXNzKHRoaXMpLAogICAgICAgICAgICBibG9jay50aW1lc3RhbXAKICAgICAgICApOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZUxpcXVpZGl0eShhZGRyZXNzIF90b2tlbkEsIGFkZHJlc3MgX3Rva2VuQikgZXh0ZXJuYWwgewogICAgICAgIGFkZHJlc3MgcGFpciA9IElVbmlzd2FwVjJGYWN0b3J5KEZBQ1RPUlkpLmdldFBhaXIoX3Rva2VuQSwgX3Rva2VuQik7CgogICAgICAgIHVpbnQyNTYgbGlxdWlkaXR5ID0gSUVSQzIwKHBhaXIpLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICBzYWZlQXBwcm92ZShJRVJDMjAocGFpciksIFJPVVRFUiwgbGlxdWlkaXR5KTsKCiAgICAgICAgKHVpbnQyNTYgYW1vdW50QSwgdWludDI1NiBhbW91bnRCKSA9IElVbmlzd2FwVjJSb3V0ZXIoUk9VVEVSKQogICAgICAgICAgICAucmVtb3ZlTGlxdWlkaXR5KAogICAgICAgICAgICBfdG9rZW5BLCBfdG9rZW5CLCBsaXF1aWRpdHksIDEsIDEsIGFkZHJlc3ModGhpcyksIGJsb2NrLnRpbWVzdGFtcAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGV2IFRoZSB0cmFuc2ZlckZyb20gZnVuY3Rpb24gbWF5IG9yIG1heSBub3QgcmV0dXJuIGEgYm9vbC4KICAgICAqIFRoZSBFUkMtMjAgc3BlYyByZXR1cm5zIGEgYm9vbCwgYnV0IHNvbWUgdG9rZW5zIGRvbid0IGZvbGxvdyB0aGUgc3BlYy4KICAgICAqIE5lZWQgdG8gY2hlY2sgaWYgZGF0YSBpcyBlbXB0eSBvciB0cnVlLgogICAgICovCiAgICBmdW5jdGlvbiBzYWZlVHJhbnNmZXJGcm9tKAogICAgICAgIElFUkMyMCB0b2tlbiwKICAgICAgICBhZGRyZXNzIHNlbmRlciwKICAgICAgICBhZGRyZXNzIHJlY2lwaWVudCwKICAgICAgICB1aW50MjU2IGFtb3VudAogICAgKSBpbnRlcm5hbCB7CiAgICAgICAgKGJvb2wgc3VjY2VzcywgYnl0ZXMgbWVtb3J5IHJldHVybkRhdGEpID0gYWRkcmVzcyh0b2tlbikuY2FsbCgKICAgICAgICAgICAgYWJpLmVuY29kZUNhbGwoSUVSQzIwLnRyYW5zZmVyRnJvbSwgKHNlbmRlciwgcmVjaXBpZW50LCBhbW91bnQpKQogICAgICAgICk7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgc3VjY2VzcwogICAgICAgICAgICAgICAgJiYgKHJldHVybkRhdGEubGVuZ3RoID09IDAgfHwgYWJpLmRlY29kZShyZXR1cm5EYXRhLCAoYm9vbCkpKSwKICAgICAgICAgICAgIlRyYW5zZmVyIGZyb20gZmFpbCIKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGRldiBUaGUgYXBwcm92ZSBmdW5jdGlvbiBtYXkgb3IgbWF5IG5vdCByZXR1cm4gYSBib29sLgogICAgICogVGhlIEVSQy0yMCBzcGVjIHJldHVybnMgYSBib29sLCBidXQgc29tZSB0b2tlbnMgZG9uJ3QgZm9sbG93IHRoZSBzcGVjLgogICAgICogTmVlZCB0byBjaGVjayBpZiBkYXRhIGlzIGVtcHR5IG9yIHRydWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNhZmVBcHByb3ZlKElFUkMyMCB0b2tlbiwgYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkKICAgICAgICBpbnRlcm5hbAogICAgewogICAgICAgIChib29sIHN1Y2Nlc3MsIGJ5dGVzIG1lbW9yeSByZXR1cm5EYXRhKSA9IGFkZHJlc3ModG9rZW4pLmNhbGwoCiAgICAgICAgICAgIGFiaS5lbmNvZGVDYWxsKElFUkMyMC5hcHByb3ZlLCAoc3BlbmRlciwgYW1vdW50KSkKICAgICAgICApOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIHN1Y2Nlc3MKICAgICAgICAgICAgICAgICYmIChyZXR1cm5EYXRhLmxlbmd0aCA9PSAwIHx8IGFiaS5kZWNvZGUocmV0dXJuRGF0YSwgKGJvb2wpKSksCiAgICAgICAgICAgICJBcHByb3ZlIGZhaWwiCiAgICAgICAgKTsKICAgIH0KfQoKaW50ZXJmYWNlIElVbmlzd2FwVjJSb3V0ZXIgewogICAgZnVuY3Rpb24gYWRkTGlxdWlkaXR5KAogICAgICAgIGFkZHJlc3MgdG9rZW5BLAogICAgICAgIGFkZHJlc3MgdG9rZW5CLAogICAgICAgIHVpbnQyNTYgYW1vdW50QURlc2lyZWQsCiAgICAgICAgdWludDI1NiBhbW91bnRCRGVzaXJlZCwKICAgICAgICB1aW50MjU2IGFtb3VudEFNaW4sCiAgICAgICAgdWludDI1NiBhbW91bnRCTWluLAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NiBkZWFkbGluZQogICAgKSBleHRlcm5hbCByZXR1cm5zICh1aW50MjU2IGFtb3VudEEsIHVpbnQyNTYgYW1vdW50QiwgdWludDI1NiBsaXF1aWRpdHkpOwoKICAgIGZ1bmN0aW9uIHJlbW92ZUxpcXVpZGl0eSgKICAgICAgICBhZGRyZXNzIHRva2VuQSwKICAgICAgICBhZGRyZXNzIHRva2VuQiwKICAgICAgICB1aW50MjU2IGxpcXVpZGl0eSwKICAgICAgICB1aW50MjU2IGFtb3VudEFNaW4sCiAgICAgICAgdWludDI1NiBhbW91bnRCTWluLAogICAgICAgIGFkZHJlc3MgdG8sCiAgICAgICAgdWludDI1NiBkZWFkbGluZQogICAgKSBleHRlcm5hbCByZXR1cm5zICh1aW50MjU2IGFtb3VudEEsIHVpbnQyNTYgYW1vdW50Qik7Cn0KCmludGVyZmFjZSBJVW5pc3dhcFYyRmFjdG9yeSB7CiAgICBmdW5jdGlvbiBnZXRQYWlyKGFkZHJlc3MgdG9rZW4wLCBhZGRyZXNzIHRva2VuMSkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChhZGRyZXNzKTsKfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBhbGxvd2FuY2UoYWRkcmVzcyBvd25lciwgYWRkcmVzcyBzcGVuZGVyKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIHNlbmRlciwgYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0K"},{fileName:"UniswapV2LiquidityTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCB7VGVzdH0gZnJvbSAiZm9yZ2Utc3RkL1Rlc3Quc29sIjsKaW1wb3J0CiAgICAiLi4vLi4vLi4vc3JjL2RlZmkvdW5pc3dhcC12Mi1hZGQtcmVtb3ZlLWxpcXVpZGl0eS9Vbmlzd2FwVjJMaXF1aWRpdHkuc29sIjsKCklFUkMyMCBjb25zdGFudCBXRVRIID0gSUVSQzIwKDB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMik7CklFUkMyMCBjb25zdGFudCBVU0RUID0gSUVSQzIwKDB4ZEFDMTdGOTU4RDJlZTUyM2EyMjA2MjA2OTk0NTk3QzEzRDgzMWVjNyk7CklFUkMyMCBjb25zdGFudCBQQUlSID0gSUVSQzIwKDB4MGQ0YTExZDVFRWFhQzI4RUMzRjYxZDEwMGRhRjRkNDA0NzFmMTg1Mik7Cgpjb250cmFjdCBVbmlzd2FwVjJBZGRMaXF1aWRpdHlUZXN0IGlzIFRlc3QgewogICAgVW5pc3dhcFYyQWRkTGlxdWlkaXR5IHByaXZhdGUgdW5pID0gbmV3IFVuaXN3YXBWMkFkZExpcXVpZGl0eSgpOwoKICAgIC8vICBBZGQgV0VUSC9VU0RUIExpcXVpZGl0eSB0byBVbmlzd2FwCiAgICBmdW5jdGlvbiB0ZXN0QWRkTGlxdWlkaXR5KCkgcHVibGljIHsKICAgICAgICAvLyBEZWFsIHRlc3QgVVNEVCBhbmQgV0VUSCB0byB0aGlzIGNvbnRyYWN0CiAgICAgICAgZGVhbChhZGRyZXNzKFVTRFQpLCBhZGRyZXNzKHRoaXMpLCAxZTYgKiAxZTYpOwogICAgICAgIGFzc2VydEVxKAogICAgICAgICAgICBVU0RULmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKSwgMWU2ICogMWU2LCAiVVNEVCBiYWxhbmNlIGluY29ycmVjdCIKICAgICAgICApOwogICAgICAgIGRlYWwoYWRkcmVzcyhXRVRIKSwgYWRkcmVzcyh0aGlzKSwgMWU2ICogMWUxOCk7CiAgICAgICAgYXNzZXJ0RXEoCiAgICAgICAgICAgIFdFVEguYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpLCAxZTYgKiAxZTE4LCAiV0VUSCBiYWxhbmNlIGluY29ycmVjdCIKICAgICAgICApOwoKICAgICAgICAvLyBBcHByb3ZlIHVuaSBmb3IgdHJhbnNmZXJyaW5nCiAgICAgICAgc2FmZUFwcHJvdmUoV0VUSCwgYWRkcmVzcyh1bmkpLCAxZTY0KTsKICAgICAgICBzYWZlQXBwcm92ZShVU0RULCBhZGRyZXNzKHVuaSksIDFlNjQpOwoKICAgICAgICB1bmkuYWRkTGlxdWlkaXR5KGFkZHJlc3MoV0VUSCksIGFkZHJlc3MoVVNEVCksIDEgKiAxZTE4LCAzMDAwLjA1ICogMWU2KTsKCiAgICAgICAgYXNzZXJ0R3QoUEFJUi5iYWxhbmNlT2YoYWRkcmVzcyh1bmkpKSwgMCwgInBhaXIgYmFsYW5jZSAwIik7CiAgICB9CgogICAgLy8gUmVtb3ZlIFdFVEgvVVNEVCBMaXF1aWRpdHkgZnJvbSBVbmlzd2FwCiAgICBmdW5jdGlvbiB0ZXN0UmVtb3ZlTGlxdWlkaXR5KCkgcHVibGljIHsKICAgICAgICAvLyBEZWFsIExQIHRva2VucyB0byB1bmkKICAgICAgICBkZWFsKGFkZHJlc3MoUEFJUiksIGFkZHJlc3ModW5pKSwgMWUxMCk7CiAgICAgICAgYXNzZXJ0RXEoUEFJUi5iYWxhbmNlT2YoYWRkcmVzcyh1bmkpKSwgMWUxMCwgIkxQIHRva2VucyBiYWxhbmNlID0gMCIpOwogICAgICAgIGFzc2VydEVxKFVTRFQuYmFsYW5jZU9mKGFkZHJlc3ModW5pKSksIDAsICJVU0RUIGJhbGFuY2Ugbm9uLXplcm8iKTsKICAgICAgICBhc3NlcnRFcShXRVRILmJhbGFuY2VPZihhZGRyZXNzKHVuaSkpLCAwLCAiV0VUSCBiYWxhbmNlIG5vbi16ZXJvIik7CgogICAgICAgIHVuaS5yZW1vdmVMaXF1aWRpdHkoYWRkcmVzcyhXRVRIKSwgYWRkcmVzcyhVU0RUKSk7CgogICAgICAgIGFzc2VydEVxKFBBSVIuYmFsYW5jZU9mKGFkZHJlc3ModW5pKSksIDAsICJMUCB0b2tlbnMgYmFsYW5jZSAhPSAwIik7CiAgICAgICAgYXNzZXJ0R3QoVVNEVC5iYWxhbmNlT2YoYWRkcmVzcyh1bmkpKSwgMCwgIlVTRFQgYmFsYW5jZSA9IDAiKTsKICAgICAgICBhc3NlcnRHdChXRVRILmJhbGFuY2VPZihhZGRyZXNzKHVuaSkpLCAwLCAiV0VUSCBiYWxhbmNlID0gMCIpOwogICAgfQoKICAgIC8qKgogICAgICogQGRldiBUaGUgdHJhbnNmZXJGcm9tIGZ1bmN0aW9uIG1heSBvciBtYXkgbm90IHJldHVybiBhIGJvb2wuCiAgICAgKiBUaGUgRVJDLTIwIHNwZWMgcmV0dXJucyBhIGJvb2wsIGJ1dCBzb21lIHRva2VucyBkb24ndCBmb2xsb3cgdGhlIHNwZWMuCiAgICAgKiBOZWVkIHRvIGNoZWNrIGlmIGRhdGEgaXMgZW1wdHkgb3IgdHJ1ZS4KICAgICAqLwogICAgZnVuY3Rpb24gc2FmZVRyYW5zZmVyRnJvbSgKICAgICAgICBJRVJDMjAgdG9rZW4sCiAgICAgICAgYWRkcmVzcyBzZW5kZXIsCiAgICAgICAgYWRkcmVzcyByZWNpcGllbnQsCiAgICAgICAgdWludDI1NiBhbW91bnQKICAgICkgaW50ZXJuYWwgewogICAgICAgIChib29sIHN1Y2Nlc3MsIGJ5dGVzIG1lbW9yeSByZXR1cm5EYXRhKSA9IGFkZHJlc3ModG9rZW4pLmNhbGwoCiAgICAgICAgICAgIGFiaS5lbmNvZGVDYWxsKElFUkMyMC50cmFuc2ZlckZyb20sIChzZW5kZXIsIHJlY2lwaWVudCwgYW1vdW50KSkKICAgICAgICApOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIHN1Y2Nlc3MKICAgICAgICAgICAgICAgICYmIChyZXR1cm5EYXRhLmxlbmd0aCA9PSAwIHx8IGFiaS5kZWNvZGUocmV0dXJuRGF0YSwgKGJvb2wpKSksCiAgICAgICAgICAgICJUcmFuc2ZlciBmcm9tIGZhaWwiCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXYgVGhlIGFwcHJvdmUgZnVuY3Rpb24gbWF5IG9yIG1heSBub3QgcmV0dXJuIGEgYm9vbC4KICAgICAqIFRoZSBFUkMtMjAgc3BlYyByZXR1cm5zIGEgYm9vbCwgYnV0IHNvbWUgdG9rZW5zIGRvbid0IGZvbGxvdyB0aGUgc3BlYy4KICAgICAqIE5lZWQgdG8gY2hlY2sgaWYgZGF0YSBpcyBlbXB0eSBvciB0cnVlLgogICAgICovCiAgICBmdW5jdGlvbiBzYWZlQXBwcm92ZShJRVJDMjAgdG9rZW4sIGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpCiAgICAgICAgaW50ZXJuYWwKICAgIHsKICAgICAgICAoYm9vbCBzdWNjZXNzLCBieXRlcyBtZW1vcnkgcmV0dXJuRGF0YSkgPSBhZGRyZXNzKHRva2VuKS5jYWxsKAogICAgICAgICAgICBhYmkuZW5jb2RlQ2FsbChJRVJDMjAuYXBwcm92ZSwgKHNwZW5kZXIsIGFtb3VudCkpCiAgICAgICAgKTsKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICBzdWNjZXNzCiAgICAgICAgICAgICAgICAmJiAocmV0dXJuRGF0YS5sZW5ndGggPT0gMCB8fCBhYmkuZGVjb2RlKHJldHVybkRhdGEsIChib29sKSkpLAogICAgICAgICAgICAiQXBwcm92ZSBmYWlsIgogICAgICAgICk7CiAgICB9Cn0K"}],Jm=`

            Add / Remove Liquidity

            // SPDX-License-Identifier: MIT
             pragma solidity ^0.8.24;
             
            @@ -6624,93 +6624,201 @@ IERC20 constant PAIR Uniswap V3

            Foundry

            Uniswap V3 Foundry example

            -`,yb=({prev:s,next:a})=>i.jsx(u,{version:db,title:Ib,description:Cb,html:ub,prev:s,next:a,codes:jb}),Ab="0.8.24",mb="Uniswap V3 Swap Examples",bb="Uniswap V3 swap examples",wb=[{fileName:"UniswapV3SwapExamples.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFVuaXN3YXBWM1N3YXBFeGFtcGxlcyB7CiAgICBJU3dhcFJvdXRlciBjb25zdGFudCByb3V0ZXIgPQogICAgICAgIElTd2FwUm91dGVyKDB4RTU5MjQyN0EwQUVjZTkyRGUzRWRlZTFGMThFMDE1N0MwNTg2MTU2NCk7CgogICAgZnVuY3Rpb24gc3dhcEV4YWN0SW5wdXRTaW5nbGVIb3AoCiAgICAgICAgYWRkcmVzcyB0b2tlbkluLAogICAgICAgIGFkZHJlc3MgdG9rZW5PdXQsCiAgICAgICAgdWludDI0IHBvb2xGZWUsCiAgICAgICAgdWludDI1NiBhbW91bnRJbgogICAgKSBleHRlcm5hbCByZXR1cm5zICh1aW50MjU2IGFtb3VudE91dCkgewogICAgICAgIElFUkMyMCh0b2tlbkluKS50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50SW4pOwogICAgICAgIElFUkMyMCh0b2tlbkluKS5hcHByb3ZlKGFkZHJlc3Mocm91dGVyKSwgYW1vdW50SW4pOwoKICAgICAgICBJU3dhcFJvdXRlci5FeGFjdElucHV0U2luZ2xlUGFyYW1zIG1lbW9yeSBwYXJhbXMgPSBJU3dhcFJvdXRlcgogICAgICAgICAgICAuRXhhY3RJbnB1dFNpbmdsZVBhcmFtcyh7CiAgICAgICAgICAgIHRva2VuSW46IHRva2VuSW4sCiAgICAgICAgICAgIHRva2VuT3V0OiB0b2tlbk91dCwKICAgICAgICAgICAgZmVlOiBwb29sRmVlLAogICAgICAgICAgICByZWNpcGllbnQ6IG1zZy5zZW5kZXIsCiAgICAgICAgICAgIGRlYWRsaW5lOiBibG9jay50aW1lc3RhbXAsCiAgICAgICAgICAgIGFtb3VudEluOiBhbW91bnRJbiwKICAgICAgICAgICAgYW1vdW50T3V0TWluaW11bTogMCwKICAgICAgICAgICAgc3FydFByaWNlTGltaXRYOTY6IDAKICAgICAgICB9KTsKCiAgICAgICAgYW1vdW50T3V0ID0gcm91dGVyLmV4YWN0SW5wdXRTaW5nbGUocGFyYW1zKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2FwRXhhY3RJbnB1dE11bHRpSG9wKAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIHBhdGgsCiAgICAgICAgYWRkcmVzcyB0b2tlbkluLAogICAgICAgIHVpbnQyNTYgYW1vdW50SW4KICAgICkgZXh0ZXJuYWwgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpIHsKICAgICAgICBJRVJDMjAodG9rZW5JbikudHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIGFtb3VudEluKTsKICAgICAgICBJRVJDMjAodG9rZW5JbikuYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluKTsKCiAgICAgICAgSVN3YXBSb3V0ZXIuRXhhY3RJbnB1dFBhcmFtcyBtZW1vcnkgcGFyYW1zID0gSVN3YXBSb3V0ZXIKICAgICAgICAgICAgLkV4YWN0SW5wdXRQYXJhbXMoewogICAgICAgICAgICBwYXRoOiBwYXRoLAogICAgICAgICAgICByZWNpcGllbnQ6IG1zZy5zZW5kZXIsCiAgICAgICAgICAgIGRlYWRsaW5lOiBibG9jay50aW1lc3RhbXAsCiAgICAgICAgICAgIGFtb3VudEluOiBhbW91bnRJbiwKICAgICAgICAgICAgYW1vdW50T3V0TWluaW11bTogMAogICAgICAgIH0pOwogICAgICAgIGFtb3VudE91dCA9IHJvdXRlci5leGFjdElucHV0KHBhcmFtcyk7CiAgICB9Cn0KCmludGVyZmFjZSBJU3dhcFJvdXRlciB7CiAgICBzdHJ1Y3QgRXhhY3RJbnB1dFNpbmdsZVBhcmFtcyB7CiAgICAgICAgYWRkcmVzcyB0b2tlbkluOwogICAgICAgIGFkZHJlc3MgdG9rZW5PdXQ7CiAgICAgICAgdWludDI0IGZlZTsKICAgICAgICBhZGRyZXNzIHJlY2lwaWVudDsKICAgICAgICB1aW50MjU2IGRlYWRsaW5lOwogICAgICAgIHVpbnQyNTYgYW1vdW50SW47CiAgICAgICAgdWludDI1NiBhbW91bnRPdXRNaW5pbXVtOwogICAgICAgIHVpbnQxNjAgc3FydFByaWNlTGltaXRYOTY7CiAgICB9CgogICAgLy8vIEBub3RpY2UgU3dhcHMgYW1vdW50SW4gb2Ygb25lIHRva2VuIGZvciBhcyBtdWNoIGFzIHBvc3NpYmxlIG9mIGFub3RoZXIgdG9rZW4KICAgIC8vLyBAcGFyYW0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIG5lY2Vzc2FyeSBmb3IgdGhlIHN3YXAsIGVuY29kZWQgYXMgRXhhY3RJbnB1dFNpbmdsZVBhcmFtcyBpbiBjYWxsZGF0YQogICAgLy8vIEByZXR1cm4gYW1vdW50T3V0IFRoZSBhbW91bnQgb2YgdGhlIHJlY2VpdmVkIHRva2VuCiAgICBmdW5jdGlvbiBleGFjdElucHV0U2luZ2xlKEV4YWN0SW5wdXRTaW5nbGVQYXJhbXMgY2FsbGRhdGEgcGFyYW1zKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KTsKCiAgICBzdHJ1Y3QgRXhhY3RJbnB1dFBhcmFtcyB7CiAgICAgICAgYnl0ZXMgcGF0aDsKICAgICAgICBhZGRyZXNzIHJlY2lwaWVudDsKICAgICAgICB1aW50MjU2IGRlYWRsaW5lOwogICAgICAgIHVpbnQyNTYgYW1vdW50SW47CiAgICAgICAgdWludDI1NiBhbW91bnRPdXRNaW5pbXVtOwogICAgfQoKICAgIC8vLyBAbm90aWNlIFN3YXBzIGFtb3VudEluIG9mIG9uZSB0b2tlbiBmb3IgYXMgbXVjaCBhcyBwb3NzaWJsZSBvZiBhbm90aGVyIGFsb25nIHRoZSBzcGVjaWZpZWQgcGF0aAogICAgLy8vIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgbmVjZXNzYXJ5IGZvciB0aGUgbXVsdGktaG9wIHN3YXAsIGVuY29kZWQgYXMgRXhhY3RJbnB1dFBhcmFtcyBpbiBjYWxsZGF0YQogICAgLy8vIEByZXR1cm4gYW1vdW50T3V0IFRoZSBhbW91bnQgb2YgdGhlIHJlY2VpdmVkIHRva2VuCiAgICBmdW5jdGlvbiBleGFjdElucHV0KEV4YWN0SW5wdXRQYXJhbXMgY2FsbGRhdGEgcGFyYW1zKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KTsKfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBhbGxvd2FuY2UoYWRkcmVzcyBvd25lciwgYWRkcmVzcyBzcGVuZGVyKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIHNlbmRlciwgYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJV0VUSCBpcyBJRVJDMjAgewogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGU7CiAgICBmdW5jdGlvbiB3aXRoZHJhdyh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7Cn0K"},{fileName:"UniswapV3SwapExamplesTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCB7VGVzdCwgY29uc29sZTJ9IGZyb20gImZvcmdlLXN0ZC9UZXN0LnNvbCI7CmltcG9ydCAiLi4vLi4vLi4vc3JjL2RlZmkvdW5pc3dhcC12My1zd2FwL1VuaXN3YXBWM1N3YXBFeGFtcGxlcy5zb2wiOwoKYWRkcmVzcyBjb25zdGFudCBXRVRIID0gMHhDMDJhYUEzOWIyMjNGRThEMEEwZTVDNEYyN2VBRDkwODNDNzU2Q2MyOwphZGRyZXNzIGNvbnN0YW50IERBSSA9IDB4NkIxNzU0NzRFODkwOTRDNDREYTk4Yjk1NEVlZGVBQzQ5NTI3MWQwRjsKYWRkcmVzcyBjb25zdGFudCBVU0RDID0gMHhBMGI4Njk5MWM2MjE4YjM2YzFkMTlENGEyZTlFYjBjRTM2MDZlQjQ4OwoKY29udHJhY3QgVW5pVjNTd2FwVGVzdCBpcyBUZXN0IHsKICAgIElXRVRIIHByaXZhdGUgd2V0aCA9IElXRVRIKFdFVEgpOwogICAgSUVSQzIwIHByaXZhdGUgZGFpID0gSUVSQzIwKERBSSk7CiAgICBJRVJDMjAgcHJpdmF0ZSB1c2RjID0gSUVSQzIwKFVTREMpOwoKICAgIFVuaXN3YXBWM1N3YXBFeGFtcGxlcyBwcml2YXRlIHVuaSA9IG5ldyBVbmlzd2FwVjNTd2FwRXhhbXBsZXMoKTsKCiAgICBmdW5jdGlvbiBzZXRVcCgpIHB1YmxpYyB7fQoKICAgIGZ1bmN0aW9uIHRlc3RTaW5nbGVIb3AoKSBwdWJsaWMgewogICAgICAgIHdldGguZGVwb3NpdHt2YWx1ZTogMWUxOH0oKTsKICAgICAgICB3ZXRoLmFwcHJvdmUoYWRkcmVzcyh1bmkpLCAxZTE4KTsKCiAgICAgICAgdWludDI1NiBhbW91bnRPdXQgPSB1bmkuc3dhcEV4YWN0SW5wdXRTaW5nbGVIb3AoV0VUSCwgREFJLCAzMDAwLCAxZTE4KTsKCiAgICAgICAgY29uc29sZTIubG9nKCJEQUkiLCBhbW91bnRPdXQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3RNdWx0aUhvcCgpIHB1YmxpYyB7CiAgICAgICAgd2V0aC5kZXBvc2l0e3ZhbHVlOiAxZTE4fSgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHVuaSksIDFlMTgpOwoKICAgICAgICBieXRlcyBtZW1vcnkgcGF0aCA9CiAgICAgICAgICAgIGFiaS5lbmNvZGVQYWNrZWQoV0VUSCwgdWludDI0KDMwMDApLCBVU0RDLCB1aW50MjQoMTAwKSwgREFJKTsKCiAgICAgICAgdWludDI1NiBhbW91bnRPdXQgPSB1bmkuc3dhcEV4YWN0SW5wdXRNdWx0aUhvcChwYXRoLCBXRVRILCAxZTE4KTsKCiAgICAgICAgY29uc29sZTIubG9nKCJEQUkiLCBhbW91bnRPdXQpOwogICAgfQp9Cg=="}],kb=`

            Uniswap V3 Swap Examples

            +`,Ab=({prev:s,next:a})=>i.jsx(u,{version:db,title:Ib,description:Cb,html:ub,prev:s,next:a,codes:jb}),yb="0.8.24",mb="Uniswap V3 Swap Examples",bb="Uniswap V3 swap examples",wb=[{fileName:"UniswapV3MultiHopSwap.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKYWRkcmVzcyBjb25zdGFudCBTV0FQX1JPVVRFUl8wMiA9IDB4NjhiMzQ2NTgzM2ZiNzJBNzBlY0RGNDg1RTBlNEM3YkQ4NjY1RmM0NTsKYWRkcmVzcyBjb25zdGFudCBXRVRIID0gMHhDMDJhYUEzOWIyMjNGRThEMEEwZTVDNEYyN2VBRDkwODNDNzU2Q2MyOwphZGRyZXNzIGNvbnN0YW50IFVTREMgPSAweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDg7CmFkZHJlc3MgY29uc3RhbnQgREFJID0gMHg2QjE3NTQ3NEU4OTA5NEM0NERhOThiOTU0RWVkZUFDNDk1MjcxZDBGOwoKY29udHJhY3QgVW5pc3dhcFYzTXVsdGlIb3BTd2FwIHsKICAgIElTd2FwUm91dGVyMDIgcHJpdmF0ZSBjb25zdGFudCByb3V0ZXIgPSBJU3dhcFJvdXRlcjAyKFNXQVBfUk9VVEVSXzAyKTsKICAgIElFUkMyMCBwcml2YXRlIGNvbnN0YW50IHdldGggPSBJRVJDMjAoV0VUSCk7CiAgICBJRVJDMjAgcHJpdmF0ZSBjb25zdGFudCBkYWkgPSBJRVJDMjAoREFJKTsKCiAgICBmdW5jdGlvbiBzd2FwRXhhY3RJbnB1dE11bHRpSG9wKHVpbnQyNTYgYW1vdW50SW4sIHVpbnQyNTYgYW1vdW50T3V0TWluKQogICAgICAgIGV4dGVybmFsCiAgICB7CiAgICAgICAgd2V0aC50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50SW4pOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluKTsKCiAgICAgICAgYnl0ZXMgbWVtb3J5IHBhdGggPQogICAgICAgICAgICBhYmkuZW5jb2RlUGFja2VkKFdFVEgsIHVpbnQyNCgzMDAwKSwgVVNEQywgdWludDI0KDEwMCksIERBSSk7CgogICAgICAgIElTd2FwUm91dGVyMDIuRXhhY3RJbnB1dFBhcmFtcyBtZW1vcnkgcGFyYW1zID0gSVN3YXBSb3V0ZXIwMgogICAgICAgICAgICAuRXhhY3RJbnB1dFBhcmFtcyh7CiAgICAgICAgICAgIHBhdGg6IHBhdGgsCiAgICAgICAgICAgIHJlY2lwaWVudDogbXNnLnNlbmRlciwKICAgICAgICAgICAgYW1vdW50SW46IGFtb3VudEluLAogICAgICAgICAgICBhbW91bnRPdXRNaW5pbXVtOiBhbW91bnRPdXRNaW4KICAgICAgICB9KTsKCiAgICAgICAgcm91dGVyLmV4YWN0SW5wdXQocGFyYW1zKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2FwRXhhY3RPdXRwdXRNdWx0aUhvcCh1aW50MjU2IGFtb3VudE91dCwgdWludDI1NiBhbW91bnRJbk1heCkKICAgICAgICBleHRlcm5hbAogICAgewogICAgICAgIHdldGgudHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIGFtb3VudEluTWF4KTsKICAgICAgICB3ZXRoLmFwcHJvdmUoYWRkcmVzcyhyb3V0ZXIpLCBhbW91bnRJbk1heCk7CgogICAgICAgIGJ5dGVzIG1lbW9yeSBwYXRoID0KICAgICAgICAgICAgYWJpLmVuY29kZVBhY2tlZChEQUksIHVpbnQyNCgxMDApLCBVU0RDLCB1aW50MjQoMzAwMCksIFdFVEgpOwoKICAgICAgICBJU3dhcFJvdXRlcjAyLkV4YWN0T3V0cHV0UGFyYW1zIG1lbW9yeSBwYXJhbXMgPSBJU3dhcFJvdXRlcjAyCiAgICAgICAgICAgIC5FeGFjdE91dHB1dFBhcmFtcyh7CiAgICAgICAgICAgIHBhdGg6IHBhdGgsCiAgICAgICAgICAgIHJlY2lwaWVudDogbXNnLnNlbmRlciwKICAgICAgICAgICAgYW1vdW50T3V0OiBhbW91bnRPdXQsCiAgICAgICAgICAgIGFtb3VudEluTWF4aW11bTogYW1vdW50SW5NYXgKICAgICAgICB9KTsKCiAgICAgICAgdWludDI1NiBhbW91bnRJbiA9IHJvdXRlci5leGFjdE91dHB1dChwYXJhbXMpOwoKICAgICAgICBpZiAoYW1vdW50SW4gPCBhbW91bnRJbk1heCkgewogICAgICAgICAgICB3ZXRoLmFwcHJvdmUoYWRkcmVzcyhyb3V0ZXIpLCAwKTsKICAgICAgICAgICAgd2V0aC50cmFuc2Zlcihtc2cuc2VuZGVyLCBhbW91bnRJbk1heCAtIGFtb3VudEluKTsKICAgICAgICB9CiAgICB9Cn0KCmludGVyZmFjZSBJU3dhcFJvdXRlcjAyIHsKICAgIHN0cnVjdCBFeGFjdElucHV0UGFyYW1zIHsKICAgICAgICBieXRlcyBwYXRoOwogICAgICAgIGFkZHJlc3MgcmVjaXBpZW50OwogICAgICAgIHVpbnQyNTYgYW1vdW50SW47CiAgICAgICAgdWludDI1NiBhbW91bnRPdXRNaW5pbXVtOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4YWN0SW5wdXQoRXhhY3RJbnB1dFBhcmFtcyBjYWxsZGF0YSBwYXJhbXMpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwYXlhYmxlCiAgICAgICAgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpOwoKICAgIHN0cnVjdCBFeGFjdE91dHB1dFBhcmFtcyB7CiAgICAgICAgYnl0ZXMgcGF0aDsKICAgICAgICBhZGRyZXNzIHJlY2lwaWVudDsKICAgICAgICB1aW50MjU2IGFtb3VudE91dDsKICAgICAgICB1aW50MjU2IGFtb3VudEluTWF4aW11bTsKICAgIH0KCiAgICBmdW5jdGlvbiBleGFjdE91dHB1dChFeGFjdE91dHB1dFBhcmFtcyBjYWxsZGF0YSBwYXJhbXMpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICBwYXlhYmxlCiAgICAgICAgcmV0dXJucyAodWludDI1NiBhbW91bnRJbik7Cn0KCmludGVyZmFjZSBJRVJDMjAgewogICAgZnVuY3Rpb24gdG90YWxTdXBwbHkoKSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyKGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBzZW5kZXIsIGFkZHJlc3MgcmVjaXBpZW50LCB1aW50MjU2IGFtb3VudCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHJldHVybnMgKGJvb2wpOwp9CgppbnRlcmZhY2UgSVdFVEggaXMgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBleHRlcm5hbCBwYXlhYmxlOwogICAgZnVuY3Rpb24gd2l0aGRyYXcodWludDI1NiBhbW91bnQpIGV4dGVybmFsOwp9Cg=="},{fileName:"UniswapV3MultiHopSwapTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCB7VGVzdCwgY29uc29sZTJ9IGZyb20gImZvcmdlLXN0ZC9UZXN0LnNvbCI7CmltcG9ydCAiLi4vLi4vLi4vc3JjL2RlZmkvdW5pc3dhcC12My1zd2FwL1VuaXN3YXBWM011bHRpSG9wU3dhcC5zb2wiOwoKY29udHJhY3QgVW5pc3dhcFYzTXVsdGlIb3BTd2FwVGVzdCBpcyBUZXN0IHsKICAgIGFkZHJlc3MgcHJpdmF0ZSBjb25zdGFudCBTV0FQX1JPVVRFUl8wMiA9CiAgICAgICAgMHg2OGIzNDY1ODMzZmI3MkE3MGVjREY0ODVFMGU0QzdiRDg2NjVGYzQ1OwogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IFdFVEggPSAweEMwMmFhQTM5YjIyM0ZFOEQwQTBlNUM0RjI3ZUFEOTA4M0M3NTZDYzI7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgREFJID0gMHg2QjE3NTQ3NEU4OTA5NEM0NERhOThiOTU0RWVkZUFDNDk1MjcxZDBGOwogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IFVTREMgPSAweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDg7CgogICAgSVdFVEggcHJpdmF0ZSBjb25zdGFudCB3ZXRoID0gSVdFVEgoV0VUSCk7CiAgICBJRVJDMjAgcHJpdmF0ZSBjb25zdGFudCBkYWkgPSBJRVJDMjAoREFJKTsKICAgIElFUkMyMCBwcml2YXRlIGNvbnN0YW50IHVzZGMgPSBJRVJDMjAoVVNEQyk7CgogICAgVW5pc3dhcFYzTXVsdGlIb3BTd2FwIHByaXZhdGUgc3dhcDsKCiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgQU1PVU5UX0lOID0gMTAgKiAxZTE4OwogICAgdWludDI1NiBwcml2YXRlIGNvbnN0YW50IEFNT1VOVF9PVVQgPSAyMCAqIDFlMTg7CiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgTUFYX0FNT1VOVF9JTiA9IDFlMTg7CgogICAgZnVuY3Rpb24gc2V0VXAoKSBwdWJsaWMgewogICAgICAgIHN3YXAgPSBuZXcgVW5pc3dhcFYzTXVsdGlIb3BTd2FwKCk7CiAgICAgICAgd2V0aC5kZXBvc2l0e3ZhbHVlOiBBTU9VTlRfSU4gKyBNQVhfQU1PVU5UX0lOfSgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHN3YXApLCB0eXBlKHVpbnQyNTYpLm1heCk7CiAgICB9CgogICAgZnVuY3Rpb24gdGVzdF9zd2FwRXhhY3RJbnB1dE11bHRpSG9wKCkgcHVibGljIHsKICAgICAgICBzd2FwLnN3YXBFeGFjdElucHV0TXVsdGlIb3AoQU1PVU5UX0lOLCAxKTsKICAgICAgICB1aW50MjU2IGQxID0gZGFpLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICBhc3NlcnRHdChkMSwgMCwgIkRBSSBiYWxhbmNlID0gMCIpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3Rfc3dhcEV4YWN0T3V0cHV0TXVsdGlIb3AoKSBwdWJsaWMgewogICAgICAgIHVpbnQyNTYgdzAgPSB3ZXRoLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICB1aW50MjU2IGQwID0gZGFpLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICBzd2FwLnN3YXBFeGFjdE91dHB1dE11bHRpSG9wKEFNT1VOVF9PVVQsIE1BWF9BTU9VTlRfSU4pOwogICAgICAgIHVpbnQyNTYgdzEgPSB3ZXRoLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICB1aW50MjU2IGQxID0gZGFpLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKCiAgICAgICAgYXNzZXJ0THQodzEsIHcwLCAiV0VUSCBiYWxhbmNlIGRpZG4ndCBkZWNyZWFzZSIpOwogICAgICAgIGFzc2VydEd0KGQxLCBkMCwgIkRBSSBiYWxhbmNlIGRpZG4ndCBpbmNyZWFzZSIpOwogICAgICAgIGFzc2VydEVxKHdldGguYmFsYW5jZU9mKGFkZHJlc3Moc3dhcCkpLCAwLCAiV0VUSCBiYWxhbmNlIG9mIHN3YXAgIT0gMCIpOwogICAgICAgIGFzc2VydEVxKGRhaS5iYWxhbmNlT2YoYWRkcmVzcyhzd2FwKSksIDAsICJEQUkgYmFsYW5jZSBvZiBzd2FwICE9IDAiKTsKICAgIH0KfQo="},{fileName:"UniswapV3SingleHopSwap.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmFkZHJlc3MgY29uc3RhbnQgU1dBUF9ST1VURVJfMDIgPSAweDY4YjM0NjU4MzNmYjcyQTcwZWNERjQ4NUUwZTRDN2JEODY2NUZjNDU7CmFkZHJlc3MgY29uc3RhbnQgV0VUSCA9IDB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMjsKYWRkcmVzcyBjb25zdGFudCBEQUkgPSAweDZCMTc1NDc0RTg5MDk0QzQ0RGE5OGI5NTRFZWRlQUM0OTUyNzFkMEY7Cgpjb250cmFjdCBVbmlzd2FwVjNTaW5nbGVIb3BTd2FwIHsKICAgIElTd2FwUm91dGVyMDIgcHJpdmF0ZSBjb25zdGFudCByb3V0ZXIgPSBJU3dhcFJvdXRlcjAyKFNXQVBfUk9VVEVSXzAyKTsKICAgIElFUkMyMCBwcml2YXRlIGNvbnN0YW50IHdldGggPSBJRVJDMjAoV0VUSCk7CiAgICBJRVJDMjAgcHJpdmF0ZSBjb25zdGFudCBkYWkgPSBJRVJDMjAoREFJKTsKCiAgICBmdW5jdGlvbiBzd2FwRXhhY3RJbnB1dFNpbmdsZUhvcCh1aW50MjU2IGFtb3VudEluLCB1aW50MjU2IGFtb3VudE91dE1pbikKICAgICAgICBleHRlcm5hbAogICAgewogICAgICAgIHdldGgudHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIGFtb3VudEluKTsKICAgICAgICB3ZXRoLmFwcHJvdmUoYWRkcmVzcyhyb3V0ZXIpLCBhbW91bnRJbik7CgogICAgICAgIElTd2FwUm91dGVyMDIuRXhhY3RJbnB1dFNpbmdsZVBhcmFtcyBtZW1vcnkgcGFyYW1zID0gSVN3YXBSb3V0ZXIwMgogICAgICAgICAgICAuRXhhY3RJbnB1dFNpbmdsZVBhcmFtcyh7CiAgICAgICAgICAgIHRva2VuSW46IFdFVEgsCiAgICAgICAgICAgIHRva2VuT3V0OiBEQUksCiAgICAgICAgICAgIGZlZTogMzAwMCwKICAgICAgICAgICAgcmVjaXBpZW50OiBtc2cuc2VuZGVyLAogICAgICAgICAgICBhbW91bnRJbjogYW1vdW50SW4sCiAgICAgICAgICAgIGFtb3VudE91dE1pbmltdW06IGFtb3VudE91dE1pbiwKICAgICAgICAgICAgc3FydFByaWNlTGltaXRYOTY6IDAKICAgICAgICB9KTsKCiAgICAgICAgcm91dGVyLmV4YWN0SW5wdXRTaW5nbGUocGFyYW1zKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2FwRXhhY3RPdXRwdXRTaW5nbGVIb3AodWludDI1NiBhbW91bnRPdXQsIHVpbnQyNTYgYW1vdW50SW5NYXgpCiAgICAgICAgZXh0ZXJuYWwKICAgIHsKICAgICAgICB3ZXRoLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBhbW91bnRJbk1heCk7CiAgICAgICAgd2V0aC5hcHByb3ZlKGFkZHJlc3Mocm91dGVyKSwgYW1vdW50SW5NYXgpOwoKICAgICAgICBJU3dhcFJvdXRlcjAyLkV4YWN0T3V0cHV0U2luZ2xlUGFyYW1zIG1lbW9yeSBwYXJhbXMgPSBJU3dhcFJvdXRlcjAyCiAgICAgICAgICAgIC5FeGFjdE91dHB1dFNpbmdsZVBhcmFtcyh7CiAgICAgICAgICAgIHRva2VuSW46IFdFVEgsCiAgICAgICAgICAgIHRva2VuT3V0OiBEQUksCiAgICAgICAgICAgIGZlZTogMzAwMCwKICAgICAgICAgICAgcmVjaXBpZW50OiBtc2cuc2VuZGVyLAogICAgICAgICAgICBhbW91bnRPdXQ6IGFtb3VudE91dCwKICAgICAgICAgICAgYW1vdW50SW5NYXhpbXVtOiBhbW91bnRJbk1heCwKICAgICAgICAgICAgc3FydFByaWNlTGltaXRYOTY6IDAKICAgICAgICB9KTsKCiAgICAgICAgdWludDI1NiBhbW91bnRJbiA9IHJvdXRlci5leGFjdE91dHB1dFNpbmdsZShwYXJhbXMpOwoKICAgICAgICBpZiAoYW1vdW50SW4gPCBhbW91bnRJbk1heCkgewogICAgICAgICAgICB3ZXRoLmFwcHJvdmUoYWRkcmVzcyhyb3V0ZXIpLCAwKTsKICAgICAgICAgICAgd2V0aC50cmFuc2Zlcihtc2cuc2VuZGVyLCBhbW91bnRJbk1heCAtIGFtb3VudEluKTsKICAgICAgICB9CiAgICB9Cn0KCmludGVyZmFjZSBJU3dhcFJvdXRlcjAyIHsKICAgIHN0cnVjdCBFeGFjdElucHV0U2luZ2xlUGFyYW1zIHsKICAgICAgICBhZGRyZXNzIHRva2VuSW47CiAgICAgICAgYWRkcmVzcyB0b2tlbk91dDsKICAgICAgICB1aW50MjQgZmVlOwogICAgICAgIGFkZHJlc3MgcmVjaXBpZW50OwogICAgICAgIHVpbnQyNTYgYW1vdW50SW47CiAgICAgICAgdWludDI1NiBhbW91bnRPdXRNaW5pbXVtOwogICAgICAgIHVpbnQxNjAgc3FydFByaWNlTGltaXRYOTY7CiAgICB9CgogICAgZnVuY3Rpb24gZXhhY3RJbnB1dFNpbmdsZShFeGFjdElucHV0U2luZ2xlUGFyYW1zIGNhbGxkYXRhIHBhcmFtcykKICAgICAgICBleHRlcm5hbAogICAgICAgIHBheWFibGUKICAgICAgICByZXR1cm5zICh1aW50MjU2IGFtb3VudE91dCk7CgogICAgc3RydWN0IEV4YWN0T3V0cHV0U2luZ2xlUGFyYW1zIHsKICAgICAgICBhZGRyZXNzIHRva2VuSW47CiAgICAgICAgYWRkcmVzcyB0b2tlbk91dDsKICAgICAgICB1aW50MjQgZmVlOwogICAgICAgIGFkZHJlc3MgcmVjaXBpZW50OwogICAgICAgIHVpbnQyNTYgYW1vdW50T3V0OwogICAgICAgIHVpbnQyNTYgYW1vdW50SW5NYXhpbXVtOwogICAgICAgIHVpbnQxNjAgc3FydFByaWNlTGltaXRYOTY7CiAgICB9CgogICAgZnVuY3Rpb24gZXhhY3RPdXRwdXRTaW5nbGUoRXhhY3RPdXRwdXRTaW5nbGVQYXJhbXMgY2FsbGRhdGEgcGFyYW1zKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYgYW1vdW50SW4pOwp9CgppbnRlcmZhY2UgSUVSQzIwIHsKICAgIGZ1bmN0aW9uIHRvdGFsU3VwcGx5KCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGJhbGFuY2VPZihhZGRyZXNzIGFjY291bnQpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIGFsbG93YW5jZShhZGRyZXNzIG93bmVyLCBhZGRyZXNzIHNwZW5kZXIpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3Mgc3BlbmRlciwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc2VuZGVyLCBhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKfQoKaW50ZXJmYWNlIElXRVRIIGlzIElFUkMyMCB7CiAgICBmdW5jdGlvbiBkZXBvc2l0KCkgZXh0ZXJuYWwgcGF5YWJsZTsKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbDsKfQo="},{fileName:"UniswapV3SingleHopSwapTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCB7VGVzdCwgY29uc29sZTJ9IGZyb20gImZvcmdlLXN0ZC9UZXN0LnNvbCI7CmltcG9ydCAiLi4vLi4vLi4vc3JjL2RlZmkvdW5pc3dhcC12My1zd2FwL1VuaXN3YXBWM1NpbmdsZUhvcFN3YXAuc29sIjsKCmNvbnRyYWN0IFVuaXN3YXBWM1NpbmdsZUhvcFN3YXBUZXN0IGlzIFRlc3QgewogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IFNXQVBfUk9VVEVSXzAyID0KICAgICAgICAweDY4YjM0NjU4MzNmYjcyQTcwZWNERjQ4NUUwZTRDN2JEODY2NUZjNDU7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgV0VUSCA9IDB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMjsKICAgIGFkZHJlc3MgcHJpdmF0ZSBjb25zdGFudCBEQUkgPSAweDZCMTc1NDc0RTg5MDk0QzQ0RGE5OGI5NTRFZWRlQUM0OTUyNzFkMEY7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgREFJX1dFVEhfUE9PTF8zMDAwID0KICAgICAgICAweEMyZTlGMjVCZTYyNTdjMjEwZDdBZGYwRDRDZDZFM0U4ODFiYTI1Zjg7CgogICAgSVdFVEggcHJpdmF0ZSBjb25zdGFudCB3ZXRoID0gSVdFVEgoV0VUSCk7CiAgICBJRVJDMjAgcHJpdmF0ZSBjb25zdGFudCBkYWkgPSBJRVJDMjAoREFJKTsKCiAgICBVbmlzd2FwVjNTaW5nbGVIb3BTd2FwIHByaXZhdGUgc3dhcDsKCiAgICB1aW50MjU2IHByaXZhdGUgY29uc3RhbnQgQU1PVU5UX0lOID0gMWUxODsKICAgIHVpbnQyNTYgcHJpdmF0ZSBjb25zdGFudCBBTU9VTlRfT1VUID0gNTAgKiAxZTE4OwogICAgdWludDI1NiBwcml2YXRlIGNvbnN0YW50IE1BWF9BTU9VTlRfSU4gPSAxZTE4OwoKICAgIGZ1bmN0aW9uIHNldFVwKCkgcHVibGljIHsKICAgICAgICBzd2FwID0gbmV3IFVuaXN3YXBWM1NpbmdsZUhvcFN3YXAoKTsKICAgICAgICB3ZXRoLmRlcG9zaXR7dmFsdWU6IEFNT1VOVF9JTiArIE1BWF9BTU9VTlRfSU59KCk7CiAgICAgICAgd2V0aC5hcHByb3ZlKGFkZHJlc3Moc3dhcCksIHR5cGUodWludDI1NikubWF4KTsKICAgIH0KCiAgICBmdW5jdGlvbiB0ZXN0X3N3YXBFeGFjdElucHV0U2luZ2xlSG9wKCkgcHVibGljIHsKICAgICAgICBzd2FwLnN3YXBFeGFjdElucHV0U2luZ2xlSG9wKEFNT1VOVF9JTiwgMSk7CiAgICAgICAgdWludDI1NiBkMSA9IGRhaS5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSk7CiAgICAgICAgYXNzZXJ0R3QoZDEsIDAsICJEQUkgYmFsYW5jZSA9IDAiKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0ZXN0X3N3YXBFeGFjdE91dHB1dFNpbmdsZUhvcCgpIHB1YmxpYyB7CiAgICAgICAgdWludDI1NiB3MCA9IHdldGguYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpOwogICAgICAgIHVpbnQyNTYgZDAgPSBkYWkuYmFsYW5jZU9mKGFkZHJlc3ModGhpcykpOwogICAgICAgIHN3YXAuc3dhcEV4YWN0T3V0cHV0U2luZ2xlSG9wKEFNT1VOVF9PVVQsIE1BWF9BTU9VTlRfSU4pOwogICAgICAgIHVpbnQyNTYgdzEgPSB3ZXRoLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKICAgICAgICB1aW50MjU2IGQxID0gZGFpLmJhbGFuY2VPZihhZGRyZXNzKHRoaXMpKTsKCiAgICAgICAgYXNzZXJ0THQodzEsIHcwLCAiV0VUSCBiYWxhbmNlIGRpZG4ndCBkZWNyZWFzZSIpOwogICAgICAgIGFzc2VydEd0KGQxLCBkMCwgIkRBSSBiYWxhbmNlIGRpZG4ndCBpbmNyZWFzZSIpOwogICAgICAgIGFzc2VydEVxKHdldGguYmFsYW5jZU9mKGFkZHJlc3Moc3dhcCkpLCAwLCAiV0VUSCBiYWxhbmNlIG9mIHN3YXAgIT0gMCIpOwogICAgICAgIGFzc2VydEVxKGRhaS5iYWxhbmNlT2YoYWRkcmVzcyhzd2FwKSksIDAsICJEQUkgYmFsYW5jZSBvZiBzd2FwICE9IDAiKTsKICAgIH0KfQo="},{fileName:"UniswapV3SwapExamples.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFVuaXN3YXBWM1N3YXBFeGFtcGxlcyB7CiAgICBJU3dhcFJvdXRlciBjb25zdGFudCByb3V0ZXIgPQogICAgICAgIElTd2FwUm91dGVyKDB4RTU5MjQyN0EwQUVjZTkyRGUzRWRlZTFGMThFMDE1N0MwNTg2MTU2NCk7CgogICAgZnVuY3Rpb24gc3dhcEV4YWN0SW5wdXRTaW5nbGVIb3AoCiAgICAgICAgYWRkcmVzcyB0b2tlbkluLAogICAgICAgIGFkZHJlc3MgdG9rZW5PdXQsCiAgICAgICAgdWludDI0IHBvb2xGZWUsCiAgICAgICAgdWludDI1NiBhbW91bnRJbgogICAgKSBleHRlcm5hbCByZXR1cm5zICh1aW50MjU2IGFtb3VudE91dCkgewogICAgICAgIElFUkMyMCh0b2tlbkluKS50cmFuc2ZlckZyb20obXNnLnNlbmRlciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50SW4pOwogICAgICAgIElFUkMyMCh0b2tlbkluKS5hcHByb3ZlKGFkZHJlc3Mocm91dGVyKSwgYW1vdW50SW4pOwoKICAgICAgICBJU3dhcFJvdXRlci5FeGFjdElucHV0U2luZ2xlUGFyYW1zIG1lbW9yeSBwYXJhbXMgPSBJU3dhcFJvdXRlcgogICAgICAgICAgICAuRXhhY3RJbnB1dFNpbmdsZVBhcmFtcyh7CiAgICAgICAgICAgIHRva2VuSW46IHRva2VuSW4sCiAgICAgICAgICAgIHRva2VuT3V0OiB0b2tlbk91dCwKICAgICAgICAgICAgZmVlOiBwb29sRmVlLAogICAgICAgICAgICByZWNpcGllbnQ6IG1zZy5zZW5kZXIsCiAgICAgICAgICAgIGRlYWRsaW5lOiBibG9jay50aW1lc3RhbXAsCiAgICAgICAgICAgIGFtb3VudEluOiBhbW91bnRJbiwKICAgICAgICAgICAgYW1vdW50T3V0TWluaW11bTogMCwKICAgICAgICAgICAgc3FydFByaWNlTGltaXRYOTY6IDAKICAgICAgICB9KTsKCiAgICAgICAgYW1vdW50T3V0ID0gcm91dGVyLmV4YWN0SW5wdXRTaW5nbGUocGFyYW1zKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2FwRXhhY3RJbnB1dE11bHRpSG9wKAogICAgICAgIGJ5dGVzIGNhbGxkYXRhIHBhdGgsCiAgICAgICAgYWRkcmVzcyB0b2tlbkluLAogICAgICAgIHVpbnQyNTYgYW1vdW50SW4KICAgICkgZXh0ZXJuYWwgcmV0dXJucyAodWludDI1NiBhbW91bnRPdXQpIHsKICAgICAgICBJRVJDMjAodG9rZW5JbikudHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIGFtb3VudEluKTsKICAgICAgICBJRVJDMjAodG9rZW5JbikuYXBwcm92ZShhZGRyZXNzKHJvdXRlciksIGFtb3VudEluKTsKCiAgICAgICAgSVN3YXBSb3V0ZXIuRXhhY3RJbnB1dFBhcmFtcyBtZW1vcnkgcGFyYW1zID0gSVN3YXBSb3V0ZXIKICAgICAgICAgICAgLkV4YWN0SW5wdXRQYXJhbXMoewogICAgICAgICAgICBwYXRoOiBwYXRoLAogICAgICAgICAgICByZWNpcGllbnQ6IG1zZy5zZW5kZXIsCiAgICAgICAgICAgIGRlYWRsaW5lOiBibG9jay50aW1lc3RhbXAsCiAgICAgICAgICAgIGFtb3VudEluOiBhbW91bnRJbiwKICAgICAgICAgICAgYW1vdW50T3V0TWluaW11bTogMAogICAgICAgIH0pOwogICAgICAgIGFtb3VudE91dCA9IHJvdXRlci5leGFjdElucHV0KHBhcmFtcyk7CiAgICB9Cn0KCmludGVyZmFjZSBJU3dhcFJvdXRlciB7CiAgICBzdHJ1Y3QgRXhhY3RJbnB1dFNpbmdsZVBhcmFtcyB7CiAgICAgICAgYWRkcmVzcyB0b2tlbkluOwogICAgICAgIGFkZHJlc3MgdG9rZW5PdXQ7CiAgICAgICAgdWludDI0IGZlZTsKICAgICAgICBhZGRyZXNzIHJlY2lwaWVudDsKICAgICAgICB1aW50MjU2IGRlYWRsaW5lOwogICAgICAgIHVpbnQyNTYgYW1vdW50SW47CiAgICAgICAgdWludDI1NiBhbW91bnRPdXRNaW5pbXVtOwogICAgICAgIHVpbnQxNjAgc3FydFByaWNlTGltaXRYOTY7CiAgICB9CgogICAgLy8vIEBub3RpY2UgU3dhcHMgYW1vdW50SW4gb2Ygb25lIHRva2VuIGZvciBhcyBtdWNoIGFzIHBvc3NpYmxlIG9mIGFub3RoZXIgdG9rZW4KICAgIC8vLyBAcGFyYW0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIG5lY2Vzc2FyeSBmb3IgdGhlIHN3YXAsIGVuY29kZWQgYXMgRXhhY3RJbnB1dFNpbmdsZVBhcmFtcyBpbiBjYWxsZGF0YQogICAgLy8vIEByZXR1cm4gYW1vdW50T3V0IFRoZSBhbW91bnQgb2YgdGhlIHJlY2VpdmVkIHRva2VuCiAgICBmdW5jdGlvbiBleGFjdElucHV0U2luZ2xlKEV4YWN0SW5wdXRTaW5nbGVQYXJhbXMgY2FsbGRhdGEgcGFyYW1zKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KTsKCiAgICBzdHJ1Y3QgRXhhY3RJbnB1dFBhcmFtcyB7CiAgICAgICAgYnl0ZXMgcGF0aDsKICAgICAgICBhZGRyZXNzIHJlY2lwaWVudDsKICAgICAgICB1aW50MjU2IGRlYWRsaW5lOwogICAgICAgIHVpbnQyNTYgYW1vdW50SW47CiAgICAgICAgdWludDI1NiBhbW91bnRPdXRNaW5pbXVtOwogICAgfQoKICAgIC8vLyBAbm90aWNlIFN3YXBzIGFtb3VudEluIG9mIG9uZSB0b2tlbiBmb3IgYXMgbXVjaCBhcyBwb3NzaWJsZSBvZiBhbm90aGVyIGFsb25nIHRoZSBzcGVjaWZpZWQgcGF0aAogICAgLy8vIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgbmVjZXNzYXJ5IGZvciB0aGUgbXVsdGktaG9wIHN3YXAsIGVuY29kZWQgYXMgRXhhY3RJbnB1dFBhcmFtcyBpbiBjYWxsZGF0YQogICAgLy8vIEByZXR1cm4gYW1vdW50T3V0IFRoZSBhbW91bnQgb2YgdGhlIHJlY2VpdmVkIHRva2VuCiAgICBmdW5jdGlvbiBleGFjdElucHV0KEV4YWN0SW5wdXRQYXJhbXMgY2FsbGRhdGEgcGFyYW1zKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcGF5YWJsZQogICAgICAgIHJldHVybnMgKHVpbnQyNTYgYW1vdW50T3V0KTsKfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiBhbGxvd2FuY2UoYWRkcmVzcyBvd25lciwgYWRkcmVzcyBzcGVuZGVyKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCByZXR1cm5zIChib29sKTsKICAgIGZ1bmN0aW9uIHRyYW5zZmVyRnJvbShhZGRyZXNzIHNlbmRlciwgYWRkcmVzcyByZWNpcGllbnQsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcmV0dXJucyAoYm9vbCk7Cn0KCmludGVyZmFjZSBJV0VUSCBpcyBJRVJDMjAgewogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGU7CiAgICBmdW5jdGlvbiB3aXRoZHJhdyh1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWw7Cn0K"},{fileName:"UniswapV3SwapExamplesTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCB7VGVzdCwgY29uc29sZTJ9IGZyb20gImZvcmdlLXN0ZC9UZXN0LnNvbCI7CmltcG9ydCAiLi4vLi4vLi4vc3JjL2RlZmkvdW5pc3dhcC12My1zd2FwL1VuaXN3YXBWM1N3YXBFeGFtcGxlcy5zb2wiOwoKYWRkcmVzcyBjb25zdGFudCBXRVRIID0gMHhDMDJhYUEzOWIyMjNGRThEMEEwZTVDNEYyN2VBRDkwODNDNzU2Q2MyOwphZGRyZXNzIGNvbnN0YW50IERBSSA9IDB4NkIxNzU0NzRFODkwOTRDNDREYTk4Yjk1NEVlZGVBQzQ5NTI3MWQwRjsKYWRkcmVzcyBjb25zdGFudCBVU0RDID0gMHhBMGI4Njk5MWM2MjE4YjM2YzFkMTlENGEyZTlFYjBjRTM2MDZlQjQ4OwoKY29udHJhY3QgVW5pVjNTd2FwVGVzdCBpcyBUZXN0IHsKICAgIElXRVRIIHByaXZhdGUgd2V0aCA9IElXRVRIKFdFVEgpOwogICAgSUVSQzIwIHByaXZhdGUgZGFpID0gSUVSQzIwKERBSSk7CiAgICBJRVJDMjAgcHJpdmF0ZSB1c2RjID0gSUVSQzIwKFVTREMpOwoKICAgIFVuaXN3YXBWM1N3YXBFeGFtcGxlcyBwcml2YXRlIHVuaSA9IG5ldyBVbmlzd2FwVjNTd2FwRXhhbXBsZXMoKTsKCiAgICBmdW5jdGlvbiBzZXRVcCgpIHB1YmxpYyB7fQoKICAgIGZ1bmN0aW9uIHRlc3RTaW5nbGVIb3AoKSBwdWJsaWMgewogICAgICAgIHdldGguZGVwb3NpdHt2YWx1ZTogMWUxOH0oKTsKICAgICAgICB3ZXRoLmFwcHJvdmUoYWRkcmVzcyh1bmkpLCAxZTE4KTsKCiAgICAgICAgdWludDI1NiBhbW91bnRPdXQgPSB1bmkuc3dhcEV4YWN0SW5wdXRTaW5nbGVIb3AoV0VUSCwgREFJLCAzMDAwLCAxZTE4KTsKCiAgICAgICAgY29uc29sZTIubG9nKCJEQUkiLCBhbW91bnRPdXQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3RNdWx0aUhvcCgpIHB1YmxpYyB7CiAgICAgICAgd2V0aC5kZXBvc2l0e3ZhbHVlOiAxZTE4fSgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKHVuaSksIDFlMTgpOwoKICAgICAgICBieXRlcyBtZW1vcnkgcGF0aCA9CiAgICAgICAgICAgIGFiaS5lbmNvZGVQYWNrZWQoV0VUSCwgdWludDI0KDMwMDApLCBVU0RDLCB1aW50MjQoMTAwKSwgREFJKTsKCiAgICAgICAgdWludDI1NiBhbW91bnRPdXQgPSB1bmkuc3dhcEV4YWN0SW5wdXRNdWx0aUhvcChwYXRoLCBXRVRILCAxZTE4KTsKCiAgICAgICAgY29uc29sZTIubG9nKCJEQUkiLCBhbW91bnRPdXQpOwogICAgfQp9Cg=="}],kb=`

            Uniswap V3 Single Hop Swap

            // SPDX-License-Identifier: MIT
             pragma solidity ^0.8.24;
             
            -contract UniswapV3SwapExamples {
            -    ISwapRouter constant router =
            -        ISwapRouter(0xE592427A0AEce92De3Edee1F18E0157C05861564);
            +address constant SWAP_ROUTER_02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
            +address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
            +address constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
             
            -    function swapExactInputSingleHop(
            -        address tokenIn,
            -        address tokenOut,
            -        uint24 poolFee,
            -        uint256 amountIn
            -    ) external returns (uint256 amountOut) {
            -        IERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn);
            -        IERC20(tokenIn).approve(address(router), amountIn);
            +contract UniswapV3SingleHopSwap {
            +    ISwapRouter02 private constant router = ISwapRouter02(SWAP_ROUTER_02);
            +    IERC20 private constant weth = IERC20(WETH);
            +    IERC20 private constant dai = IERC20(DAI);
             
            -        ISwapRouter.ExactInputSingleParams memory params = ISwapRouter
            +    function swapExactInputSingleHop(uint256 amountIn, uint256 amountOutMin)
            +        external
            +    {
            +        weth.transferFrom(msg.sender, address(this), amountIn);
            +        weth.approve(address(router), amountIn);
            +
            +        ISwapRouter02.ExactInputSingleParams memory params = ISwapRouter02
                         .ExactInputSingleParams({
            -            tokenIn: tokenIn,
            -            tokenOut: tokenOut,
            -            fee: poolFee,
            +            tokenIn: WETH,
            +            tokenOut: DAI,
            +            fee: 3000,
                         recipient: msg.sender,
            -            deadline: block.timestamp,
                         amountIn: amountIn,
            -            amountOutMinimum: 0,
            +            amountOutMinimum: amountOutMin,
                         sqrtPriceLimitX96: 0
                     });
             
            -        amountOut = router.exactInputSingle(params);
            +        router.exactInputSingle(params);
                 }
             
            -    function swapExactInputMultiHop(
            -        bytes calldata path,
            -        address tokenIn,
            -        uint256 amountIn
            -    ) external returns (uint256 amountOut) {
            -        IERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn);
            -        IERC20(tokenIn).approve(address(router), amountIn);
            +    function swapExactOutputSingleHop(uint256 amountOut, uint256 amountInMax)
            +        external
            +    {
            +        weth.transferFrom(msg.sender, address(this), amountInMax);
            +        weth.approve(address(router), amountInMax);
             
            -        ISwapRouter.ExactInputParams memory params = ISwapRouter
            -            .ExactInputParams({
            -            path: path,
            +        ISwapRouter02.ExactOutputSingleParams memory params = ISwapRouter02
            +            .ExactOutputSingleParams({
            +            tokenIn: WETH,
            +            tokenOut: DAI,
            +            fee: 3000,
                         recipient: msg.sender,
            -            deadline: block.timestamp,
            -            amountIn: amountIn,
            -            amountOutMinimum: 0
            +            amountOut: amountOut,
            +            amountInMaximum: amountInMax,
            +            sqrtPriceLimitX96: 0
                     });
            -        amountOut = router.exactInput(params);
            +
            +        uint256 amountIn = router.exactOutputSingle(params);
            +
            +        if (amountIn < amountInMax) {
            +            weth.approve(address(router), 0);
            +            weth.transfer(msg.sender, amountInMax - amountIn);
            +        }
                 }
             }
             
            -interface ISwapRouter {
            +interface ISwapRouter02 {
                 struct ExactInputSingleParams {
                     address tokenIn;
                     address tokenOut;
                     uint24 fee;
                     address recipient;
            -        uint256 deadline;
                     uint256 amountIn;
                     uint256 amountOutMinimum;
                     uint160 sqrtPriceLimitX96;
                 }
             
            -    /// @notice Swaps amountIn of one token for as much as possible of another token
            -    /// @param params The parameters necessary for the swap, encoded as ExactInputSingleParams in calldata
            -    /// @return amountOut The amount of the received token
                 function exactInputSingle(ExactInputSingleParams calldata params)
                     external
                     payable
                     returns (uint256 amountOut);
             
            +    struct ExactOutputSingleParams {
            +        address tokenIn;
            +        address tokenOut;
            +        uint24 fee;
            +        address recipient;
            +        uint256 amountOut;
            +        uint256 amountInMaximum;
            +        uint160 sqrtPriceLimitX96;
            +    }
            +
            +    function exactOutputSingle(ExactOutputSingleParams calldata params)
            +        external
            +        payable
            +        returns (uint256 amountIn);
            +}
            +
            +interface IERC20 {
            +    function totalSupply() external view returns (uint256);
            +    function balanceOf(address account) external view returns (uint256);
            +    function transfer(address recipient, uint256 amount)
            +        external
            +        returns (bool);
            +    function allowance(address owner, address spender)
            +        external
            +        view
            +        returns (uint256);
            +    function approve(address spender, uint256 amount) external returns (bool);
            +    function transferFrom(address sender, address recipient, uint256 amount)
            +        external
            +        returns (bool);
            +}
            +
            +interface IWETH is IERC20 {
            +    function deposit() external payable;
            +    function withdraw(uint256 amount) external;
            +}
            +

            Uniswap V3 Multi Hop Swap

            +
            // SPDX-License-Identifier: MIT
            +pragma solidity 0.8.24;
            +
            +address constant SWAP_ROUTER_02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
            +address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
            +address constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
            +address constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
            +
            +contract UniswapV3MultiHopSwap {
            +    ISwapRouter02 private constant router = ISwapRouter02(SWAP_ROUTER_02);
            +    IERC20 private constant weth = IERC20(WETH);
            +    IERC20 private constant dai = IERC20(DAI);
            +
            +    function swapExactInputMultiHop(uint256 amountIn, uint256 amountOutMin)
            +        external
            +    {
            +        weth.transferFrom(msg.sender, address(this), amountIn);
            +        weth.approve(address(router), amountIn);
            +
            +        bytes memory path =
            +            abi.encodePacked(WETH, uint24(3000), USDC, uint24(100), DAI);
            +
            +        ISwapRouter02.ExactInputParams memory params = ISwapRouter02
            +            .ExactInputParams({
            +            path: path,
            +            recipient: msg.sender,
            +            amountIn: amountIn,
            +            amountOutMinimum: amountOutMin
            +        });
            +
            +        router.exactInput(params);
            +    }
            +
            +    function swapExactOutputMultiHop(uint256 amountOut, uint256 amountInMax)
            +        external
            +    {
            +        weth.transferFrom(msg.sender, address(this), amountInMax);
            +        weth.approve(address(router), amountInMax);
            +
            +        bytes memory path =
            +            abi.encodePacked(DAI, uint24(100), USDC, uint24(3000), WETH);
            +
            +        ISwapRouter02.ExactOutputParams memory params = ISwapRouter02
            +            .ExactOutputParams({
            +            path: path,
            +            recipient: msg.sender,
            +            amountOut: amountOut,
            +            amountInMaximum: amountInMax
            +        });
            +
            +        uint256 amountIn = router.exactOutput(params);
            +
            +        if (amountIn < amountInMax) {
            +            weth.approve(address(router), 0);
            +            weth.transfer(msg.sender, amountInMax - amountIn);
            +        }
            +    }
            +}
            +
            +interface ISwapRouter02 {
                 struct ExactInputParams {
                     bytes path;
                     address recipient;
            -        uint256 deadline;
                     uint256 amountIn;
                     uint256 amountOutMinimum;
                 }
             
            -    /// @notice Swaps amountIn of one token for as much as possible of another along the specified path
            -    /// @param params The parameters necessary for the multi-hop swap, encoded as ExactInputParams in calldata
            -    /// @return amountOut The amount of the received token
                 function exactInput(ExactInputParams calldata params)
                     external
                     payable
                     returns (uint256 amountOut);
            +
            +    struct ExactOutputParams {
            +        bytes path;
            +        address recipient;
            +        uint256 amountOut;
            +        uint256 amountInMaximum;
            +    }
            +
            +    function exactOutput(ExactOutputParams calldata params)
            +        external
            +        payable
            +        returns (uint256 amountIn);
             }
             
             interface IERC20 {
            @@ -6734,51 +6842,105 @@ IERC20 constant PAIR function withdraw(uint256 amount) external;
             }
             

            Test with Foundry

            +

            Single hop test

            // SPDX-License-Identifier: MIT
             pragma solidity ^0.8.24;
             
             import {Test, console2} from "forge-std/Test.sol";
            -import "../../../src/defi/uniswap-v3-swap/UniswapV3SwapExamples.sol";
            +import "../../../src/defi/uniswap-v3-swap/UniswapV3SingleHopSwap.sol";
             
            -address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
            -address constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
            -address constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
            +contract UniswapV3SingleHopSwapTest is Test {
            +    address private constant SWAP_ROUTER_02 =
            +        0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
            +    address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
            +    address private constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
            +    address private constant DAI_WETH_POOL_3000 =
            +        0xC2e9F25Be6257c210d7Adf0D4Cd6E3E881ba25f8;
             
            -contract UniV3SwapTest is Test {
            -    IWETH private weth = IWETH(WETH);
            -    IERC20 private dai = IERC20(DAI);
            -    IERC20 private usdc = IERC20(USDC);
            +    IWETH private constant weth = IWETH(WETH);
            +    IERC20 private constant dai = IERC20(DAI);
             
            -    UniswapV3SwapExamples private uni = new UniswapV3SwapExamples();
            +    UniswapV3SingleHopSwap private swap;
             
            -    function setUp() public {}
            +    uint256 private constant AMOUNT_IN = 1e18;
            +    uint256 private constant AMOUNT_OUT = 50 * 1e18;
            +    uint256 private constant MAX_AMOUNT_IN = 1e18;
             
            -    function testSingleHop() public {
            -        weth.deposit{value: 1e18}();
            -        weth.approve(address(uni), 1e18);
            +    function setUp() public {
            +        swap = new UniswapV3SingleHopSwap();
            +        weth.deposit{value: AMOUNT_IN + MAX_AMOUNT_IN}();
            +        weth.approve(address(swap), type(uint256).max);
            +    }
             
            -        uint256 amountOut = uni.swapExactInputSingleHop(WETH, DAI, 3000, 1e18);
            +    function test_swapExactInputSingleHop() public {
            +        swap.swapExactInputSingleHop(AMOUNT_IN, 1);
            +        uint256 d1 = dai.balanceOf(address(this));
            +        assertGt(d1, 0, "DAI balance = 0");
            +    }
            +
            +    function test_swapExactOutputSingleHop() public {
            +        uint256 w0 = weth.balanceOf(address(this));
            +        uint256 d0 = dai.balanceOf(address(this));
            +        swap.swapExactOutputSingleHop(AMOUNT_OUT, MAX_AMOUNT_IN);
            +        uint256 w1 = weth.balanceOf(address(this));
            +        uint256 d1 = dai.balanceOf(address(this));
             
            -        console2.log("DAI", amountOut);
            +        assertLt(w1, w0, "WETH balance didn't decrease");
            +        assertGt(d1, d0, "DAI balance didn't increase");
            +        assertEq(weth.balanceOf(address(swap)), 0, "WETH balance of swap != 0");
            +        assertEq(dai.balanceOf(address(swap)), 0, "DAI balance of swap != 0");
                 }
            +}
            +

            Multi hop test

            +
            // SPDX-License-Identifier: MIT
            +pragma solidity ^0.8.24;
             
            -    function testMultiHop() public {
            -        weth.deposit{value: 1e18}();
            -        weth.approve(address(uni), 1e18);
            +import {Test, console2} from "forge-std/Test.sol";
            +import "../../../src/defi/uniswap-v3-swap/UniswapV3MultiHopSwap.sol";
             
            -        bytes memory path =
            -            abi.encodePacked(WETH, uint24(3000), USDC, uint24(100), DAI);
            +contract UniswapV3MultiHopSwapTest is Test {
            +    address private constant SWAP_ROUTER_02 =
            +        0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
            +    address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
            +    address private constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
            +    address private constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
            +
            +    IWETH private constant weth = IWETH(WETH);
            +    IERC20 private constant dai = IERC20(DAI);
            +    IERC20 private constant usdc = IERC20(USDC);
             
            -        uint256 amountOut = uni.swapExactInputMultiHop(path, WETH, 1e18);
            +    UniswapV3MultiHopSwap private swap;
             
            -        console2.log("DAI", amountOut);
            +    uint256 private constant AMOUNT_IN = 10 * 1e18;
            +    uint256 private constant AMOUNT_OUT = 20 * 1e18;
            +    uint256 private constant MAX_AMOUNT_IN = 1e18;
            +
            +    function setUp() public {
            +        swap = new UniswapV3MultiHopSwap();
            +        weth.deposit{value: AMOUNT_IN + MAX_AMOUNT_IN}();
            +        weth.approve(address(swap), type(uint256).max);
            +    }
            +
            +    function test_swapExactInputMultiHop() public {
            +        swap.swapExactInputMultiHop(AMOUNT_IN, 1);
            +        uint256 d1 = dai.balanceOf(address(this));
            +        assertGt(d1, 0, "DAI balance = 0");
            +    }
            +
            +    function test_swapExactOutputMultiHop() public {
            +        uint256 w0 = weth.balanceOf(address(this));
            +        uint256 d0 = dai.balanceOf(address(this));
            +        swap.swapExactOutputMultiHop(AMOUNT_OUT, MAX_AMOUNT_IN);
            +        uint256 w1 = weth.balanceOf(address(this));
            +        uint256 d1 = dai.balanceOf(address(this));
            +
            +        assertLt(w1, w0, "WETH balance didn't decrease");
            +        assertGt(d1, d0, "DAI balance didn't increase");
            +        assertEq(weth.balanceOf(address(swap)), 0, "WETH balance of swap != 0");
            +        assertEq(dai.balanceOf(address(swap)), 0, "DAI balance of swap != 0");
                 }
             }
            -

            Links

            -

            Uniswap V3

            -

            Foundry

            -

            Uniswap V3 Foundry example

            -`,Zb=({prev:s,next:a})=>i.jsx(u,{version:Ab,title:mb,description:bb,html:kb,prev:s,next:a,codes:wb}),Wb="0.8.24",Gb="Vault",Bb="Vault",fb=[{fileName:"Vault.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFZhdWx0IHsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuOwoKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4pIHsKICAgICAgICB0b2tlbiA9IElFUkMyMChfdG9rZW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIF9taW50KGFkZHJlc3MgX3RvLCB1aW50MjU2IF9zaGFyZXMpIHByaXZhdGUgewogICAgICAgIHRvdGFsU3VwcGx5ICs9IF9zaGFyZXM7CiAgICAgICAgYmFsYW5jZU9mW190b10gKz0gX3NoYXJlczsKICAgIH0KCiAgICBmdW5jdGlvbiBfYnVybihhZGRyZXNzIF9mcm9tLCB1aW50MjU2IF9zaGFyZXMpIHByaXZhdGUgewogICAgICAgIHRvdGFsU3VwcGx5IC09IF9zaGFyZXM7CiAgICAgICAgYmFsYW5jZU9mW19mcm9tXSAtPSBfc2hhcmVzOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXQodWludDI1NiBfYW1vdW50KSBleHRlcm5hbCB7CiAgICAgICAgLyoKICAgICAgICBhID0gYW1vdW50CiAgICAgICAgQiA9IGJhbGFuY2Ugb2YgdG9rZW4gYmVmb3JlIGRlcG9zaXQKICAgICAgICBUID0gdG90YWwgc3VwcGx5CiAgICAgICAgcyA9IHNoYXJlcyB0byBtaW50CgogICAgICAgIChUICsgcykgLyBUID0gKGEgKyBCKSAvIEIgCgogICAgICAgIHMgPSBhVCAvIEIKICAgICAgICAqLwogICAgICAgIHVpbnQyNTYgc2hhcmVzOwogICAgICAgIGlmICh0b3RhbFN1cHBseSA9PSAwKSB7CiAgICAgICAgICAgIHNoYXJlcyA9IF9hbW91bnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2hhcmVzID0gKF9hbW91bnQgKiB0b3RhbFN1cHBseSkgLyB0b2tlbi5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSk7CiAgICAgICAgfQoKICAgICAgICBfbWludChtc2cuc2VuZGVyLCBzaGFyZXMpOwogICAgICAgIHRva2VuLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBfYW1vdW50KTsKICAgIH0KCiAgICBmdW5jdGlvbiB3aXRoZHJhdyh1aW50MjU2IF9zaGFyZXMpIGV4dGVybmFsIHsKICAgICAgICAvKgogICAgICAgIGEgPSBhbW91bnQKICAgICAgICBCID0gYmFsYW5jZSBvZiB0b2tlbiBiZWZvcmUgd2l0aGRyYXcKICAgICAgICBUID0gdG90YWwgc3VwcGx5CiAgICAgICAgcyA9IHNoYXJlcyB0byBidXJuCgogICAgICAgIChUIC0gcykgLyBUID0gKEIgLSBhKSAvIEIgCgogICAgICAgIGEgPSBzQiAvIFQKICAgICAgICAqLwogICAgICAgIHVpbnQyNTYgYW1vdW50ID0KICAgICAgICAgICAgKF9zaGFyZXMgKiB0b2tlbi5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSkpIC8gdG90YWxTdXBwbHk7CiAgICAgICAgX2J1cm4obXNnLnNlbmRlciwgX3NoYXJlcyk7CiAgICAgICAgdG9rZW4udHJhbnNmZXIobXNnLnNlbmRlciwgYW1vdW50KTsKICAgIH0KfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CgogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKCiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKCiAgICBmdW5jdGlvbiBhbGxvd2FuY2UoYWRkcmVzcyBvd25lciwgYWRkcmVzcyBzcGVuZGVyKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYpOwoKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CgogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc2VuZGVyLCBhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKCiAgICBldmVudCBUcmFuc2ZlcihhZGRyZXNzIGluZGV4ZWQgZnJvbSwgYWRkcmVzcyBpbmRleGVkIHRvLCB1aW50MjU2IGFtb3VudCk7CiAgICBldmVudCBBcHByb3ZhbCgKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgb3duZXIsIGFkZHJlc3MgaW5kZXhlZCBzcGVuZGVyLCB1aW50MjU2IGFtb3VudAogICAgKTsKfQo="}],Vb=`

            Simple example of vault contract, commonly used in DeFi protocols.

            +
            `,Zb=({prev:s,next:a})=>i.jsx(u,{version:yb,title:mb,description:bb,html:kb,prev:s,next:a,codes:wb}),Wb="0.8.24",Gb="Vault",Bb="Vault",Vb=[{fileName:"Vault.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFZhdWx0IHsKICAgIElFUkMyMCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuOwoKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4pIHsKICAgICAgICB0b2tlbiA9IElFUkMyMChfdG9rZW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIF9taW50KGFkZHJlc3MgX3RvLCB1aW50MjU2IF9zaGFyZXMpIHByaXZhdGUgewogICAgICAgIHRvdGFsU3VwcGx5ICs9IF9zaGFyZXM7CiAgICAgICAgYmFsYW5jZU9mW190b10gKz0gX3NoYXJlczsKICAgIH0KCiAgICBmdW5jdGlvbiBfYnVybihhZGRyZXNzIF9mcm9tLCB1aW50MjU2IF9zaGFyZXMpIHByaXZhdGUgewogICAgICAgIHRvdGFsU3VwcGx5IC09IF9zaGFyZXM7CiAgICAgICAgYmFsYW5jZU9mW19mcm9tXSAtPSBfc2hhcmVzOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXQodWludDI1NiBfYW1vdW50KSBleHRlcm5hbCB7CiAgICAgICAgLyoKICAgICAgICBhID0gYW1vdW50CiAgICAgICAgQiA9IGJhbGFuY2Ugb2YgdG9rZW4gYmVmb3JlIGRlcG9zaXQKICAgICAgICBUID0gdG90YWwgc3VwcGx5CiAgICAgICAgcyA9IHNoYXJlcyB0byBtaW50CgogICAgICAgIChUICsgcykgLyBUID0gKGEgKyBCKSAvIEIgCgogICAgICAgIHMgPSBhVCAvIEIKICAgICAgICAqLwogICAgICAgIHVpbnQyNTYgc2hhcmVzOwogICAgICAgIGlmICh0b3RhbFN1cHBseSA9PSAwKSB7CiAgICAgICAgICAgIHNoYXJlcyA9IF9hbW91bnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2hhcmVzID0gKF9hbW91bnQgKiB0b3RhbFN1cHBseSkgLyB0b2tlbi5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSk7CiAgICAgICAgfQoKICAgICAgICBfbWludChtc2cuc2VuZGVyLCBzaGFyZXMpOwogICAgICAgIHRva2VuLnRyYW5zZmVyRnJvbShtc2cuc2VuZGVyLCBhZGRyZXNzKHRoaXMpLCBfYW1vdW50KTsKICAgIH0KCiAgICBmdW5jdGlvbiB3aXRoZHJhdyh1aW50MjU2IF9zaGFyZXMpIGV4dGVybmFsIHsKICAgICAgICAvKgogICAgICAgIGEgPSBhbW91bnQKICAgICAgICBCID0gYmFsYW5jZSBvZiB0b2tlbiBiZWZvcmUgd2l0aGRyYXcKICAgICAgICBUID0gdG90YWwgc3VwcGx5CiAgICAgICAgcyA9IHNoYXJlcyB0byBidXJuCgogICAgICAgIChUIC0gcykgLyBUID0gKEIgLSBhKSAvIEIgCgogICAgICAgIGEgPSBzQiAvIFQKICAgICAgICAqLwogICAgICAgIHVpbnQyNTYgYW1vdW50ID0KICAgICAgICAgICAgKF9zaGFyZXMgKiB0b2tlbi5iYWxhbmNlT2YoYWRkcmVzcyh0aGlzKSkpIC8gdG90YWxTdXBwbHk7CiAgICAgICAgX2J1cm4obXNnLnNlbmRlciwgX3NoYXJlcyk7CiAgICAgICAgdG9rZW4udHJhbnNmZXIobXNnLnNlbmRlciwgYW1vdW50KTsKICAgIH0KfQoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CgogICAgZnVuY3Rpb24gYmFsYW5jZU9mKGFkZHJlc3MgYWNjb3VudCkgZXh0ZXJuYWwgdmlldyByZXR1cm5zICh1aW50MjU2KTsKCiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKCiAgICBmdW5jdGlvbiBhbGxvd2FuY2UoYWRkcmVzcyBvd25lciwgYWRkcmVzcyBzcGVuZGVyKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKHVpbnQyNTYpOwoKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CgogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc2VuZGVyLCBhZGRyZXNzIHJlY2lwaWVudCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKCiAgICBldmVudCBUcmFuc2ZlcihhZGRyZXNzIGluZGV4ZWQgZnJvbSwgYWRkcmVzcyBpbmRleGVkIHRvLCB1aW50MjU2IGFtb3VudCk7CiAgICBldmVudCBBcHByb3ZhbCgKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgb3duZXIsIGFkZHJlc3MgaW5kZXhlZCBzcGVuZGVyLCB1aW50MjU2IGFtb3VudAogICAgKTsKfQo="}],fb=`

            Simple example of vault contract, commonly used in DeFi protocols.

            Most vaults on the mainnet are more complex. Here we will focus on the math for calculating shares to mint on deposit and the amount of token to withdraw.

            How the contract works

              @@ -6874,7 +7036,7 @@ IERC20 constant PAIR address indexed owner, address indexed spender, uint256 amount ); } -`,Yb=({prev:s,next:a})=>i.jsx(u,{version:Wb,title:Gb,description:Bb,html:Vb,prev:s,next:a,codes:fb}),Rb="0.8.24",vb="Delegatecall",Xb="Example of how to use deletegatecall in Solidity",Nb=[{fileName:"Delegatecall.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIE5PVEU6IERlcGxveSB0aGlzIGNvbnRyYWN0IGZpcnN0CmNvbnRyYWN0IEIgewogICAgLy8gTk9URTogc3RvcmFnZSBsYXlvdXQgbXVzdCBiZSB0aGUgc2FtZSBhcyBjb250cmFjdCBBCiAgICB1aW50MjU2IHB1YmxpYyBudW07CiAgICBhZGRyZXNzIHB1YmxpYyBzZW5kZXI7CiAgICB1aW50MjU2IHB1YmxpYyB2YWx1ZTsKCiAgICBmdW5jdGlvbiBzZXRWYXJzKHVpbnQyNTYgX251bSkgcHVibGljIHBheWFibGUgewogICAgICAgIG51bSA9IF9udW07CiAgICAgICAgc2VuZGVyID0gbXNnLnNlbmRlcjsKICAgICAgICB2YWx1ZSA9IG1zZy52YWx1ZTsKICAgIH0KfQoKY29udHJhY3QgQSB7CiAgICB1aW50MjU2IHB1YmxpYyBudW07CiAgICBhZGRyZXNzIHB1YmxpYyBzZW5kZXI7CiAgICB1aW50MjU2IHB1YmxpYyB2YWx1ZTsKCiAgICBmdW5jdGlvbiBzZXRWYXJzKGFkZHJlc3MgX2NvbnRyYWN0LCB1aW50MjU2IF9udW0pIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICAvLyBBJ3Mgc3RvcmFnZSBpcyBzZXQsIEIgaXMgbm90IG1vZGlmaWVkLgogICAgICAgIChib29sIHN1Y2Nlc3MsIGJ5dGVzIG1lbW9yeSBkYXRhKSA9IF9jb250cmFjdC5kZWxlZ2F0ZWNhbGwoCiAgICAgICAgICAgIGFiaS5lbmNvZGVXaXRoU2lnbmF0dXJlKCJzZXRWYXJzKHVpbnQyNTYpIiwgX251bSkKICAgICAgICApOwogICAgfQp9Cg=="}],Hb=`

              delegatecall is a low level function similar to call.

              +`,Yb=({prev:s,next:a})=>i.jsx(u,{version:Wb,title:Gb,description:Bb,html:fb,prev:s,next:a,codes:Vb}),Rb="0.8.24",Xb="Delegatecall",vb="Example of how to use deletegatecall in Solidity",Nb=[{fileName:"Delegatecall.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIE5PVEU6IERlcGxveSB0aGlzIGNvbnRyYWN0IGZpcnN0CmNvbnRyYWN0IEIgewogICAgLy8gTk9URTogc3RvcmFnZSBsYXlvdXQgbXVzdCBiZSB0aGUgc2FtZSBhcyBjb250cmFjdCBBCiAgICB1aW50MjU2IHB1YmxpYyBudW07CiAgICBhZGRyZXNzIHB1YmxpYyBzZW5kZXI7CiAgICB1aW50MjU2IHB1YmxpYyB2YWx1ZTsKCiAgICBmdW5jdGlvbiBzZXRWYXJzKHVpbnQyNTYgX251bSkgcHVibGljIHBheWFibGUgewogICAgICAgIG51bSA9IF9udW07CiAgICAgICAgc2VuZGVyID0gbXNnLnNlbmRlcjsKICAgICAgICB2YWx1ZSA9IG1zZy52YWx1ZTsKICAgIH0KfQoKY29udHJhY3QgQSB7CiAgICB1aW50MjU2IHB1YmxpYyBudW07CiAgICBhZGRyZXNzIHB1YmxpYyBzZW5kZXI7CiAgICB1aW50MjU2IHB1YmxpYyB2YWx1ZTsKCiAgICBmdW5jdGlvbiBzZXRWYXJzKGFkZHJlc3MgX2NvbnRyYWN0LCB1aW50MjU2IF9udW0pIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICAvLyBBJ3Mgc3RvcmFnZSBpcyBzZXQsIEIgaXMgbm90IG1vZGlmaWVkLgogICAgICAgIChib29sIHN1Y2Nlc3MsIGJ5dGVzIG1lbW9yeSBkYXRhKSA9IF9jb250cmFjdC5kZWxlZ2F0ZWNhbGwoCiAgICAgICAgICAgIGFiaS5lbmNvZGVXaXRoU2lnbmF0dXJlKCJzZXRWYXJzKHVpbnQyNTYpIiwgX251bSkKICAgICAgICApOwogICAgfQp9Cg=="}],Hb=`

              delegatecall is a low level function similar to call.

              When contract A executes delegatecall to contract B, B's code is executed

              with contract A's storage, msg.sender and msg.value.

              // SPDX-License-Identifier: MIT
              @@ -6906,7 +7068,7 @@ IERC20 constant PAIR Solidity supports enumerables and they are useful to model choice and keep track of state.

              +
              `,Fb=({prev:s,next:a})=>i.jsx(u,{version:Rb,title:Xb,description:vb,html:Hb,prev:s,next:a,codes:Nb}),Kb="0.8.24",Sb="Enum",Mb="Example of enums in Solidity",xb=[{fileName:"Enum.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEVudW0gewogICAgLy8gRW51bSByZXByZXNlbnRpbmcgc2hpcHBpbmcgc3RhdHVzCiAgICBlbnVtIFN0YXR1cyB7CiAgICAgICAgUGVuZGluZywKICAgICAgICBTaGlwcGVkLAogICAgICAgIEFjY2VwdGVkLAogICAgICAgIFJlamVjdGVkLAogICAgICAgIENhbmNlbGVkCiAgICB9CgogICAgLy8gRGVmYXVsdCB2YWx1ZSBpcyB0aGUgZmlyc3QgZWxlbWVudCBsaXN0ZWQgaW4KICAgIC8vIGRlZmluaXRpb24gb2YgdGhlIHR5cGUsIGluIHRoaXMgY2FzZSAiUGVuZGluZyIKICAgIFN0YXR1cyBwdWJsaWMgc3RhdHVzOwoKICAgIC8vIFJldHVybnMgdWludAogICAgLy8gUGVuZGluZyAgLSAwCiAgICAvLyBTaGlwcGVkICAtIDEKICAgIC8vIEFjY2VwdGVkIC0gMgogICAgLy8gUmVqZWN0ZWQgLSAzCiAgICAvLyBDYW5jZWxlZCAtIDQKICAgIGZ1bmN0aW9uIGdldCgpIHB1YmxpYyB2aWV3IHJldHVybnMgKFN0YXR1cykgewogICAgICAgIHJldHVybiBzdGF0dXM7CiAgICB9CgogICAgLy8gVXBkYXRlIHN0YXR1cyBieSBwYXNzaW5nIHVpbnQgaW50byBpbnB1dAogICAgZnVuY3Rpb24gc2V0KFN0YXR1cyBfc3RhdHVzKSBwdWJsaWMgewogICAgICAgIHN0YXR1cyA9IF9zdGF0dXM7CiAgICB9CgogICAgLy8gWW91IGNhbiB1cGRhdGUgdG8gYSBzcGVjaWZpYyBlbnVtIGxpa2UgdGhpcwogICAgZnVuY3Rpb24gY2FuY2VsKCkgcHVibGljIHsKICAgICAgICBzdGF0dXMgPSBTdGF0dXMuQ2FuY2VsZWQ7CiAgICB9CgogICAgLy8gZGVsZXRlIHJlc2V0cyB0aGUgZW51bSB0byBpdHMgZmlyc3QgdmFsdWUsIDAKICAgIGZ1bmN0aW9uIHJlc2V0KCkgcHVibGljIHsKICAgICAgICBkZWxldGUgc3RhdHVzOwogICAgfQp9Cg=="},{fileName:"EnumDeclaration.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKLy8gVGhpcyBpcyBzYXZlZCAnRW51bURlY2xhcmF0aW9uLnNvbCcKCmVudW0gU3RhdHVzIHsKICAgIFBlbmRpbmcsCiAgICBTaGlwcGVkLAogICAgQWNjZXB0ZWQsCiAgICBSZWplY3RlZCwKICAgIENhbmNlbGVkCn0K"},{fileName:"EnumImport.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9FbnVtRGVjbGFyYXRpb24uc29sIjsKCmNvbnRyYWN0IEVudW0gewogICAgU3RhdHVzIHB1YmxpYyBzdGF0dXM7Cn0K"}],Jb=`

              Solidity supports enumerables and they are useful to model choice and keep track of state.

              Enums can be declared outside of a contract.

              // SPDX-License-Identifier: MIT
               pragma solidity ^0.8.24;
              @@ -7203,7 +7365,7 @@ assertion probably means that there is a bug.
                       count -= 1;
                   }
               }
              -
              `,yw=({prev:s,next:a})=>i.jsx(u,{version:dw,title:Iw,description:Cw,html:uw,prev:s,next:a,codes:jw}),Aw="0.8.24",mw="Function",bw="Example of how to write functions in Solidity",ww=[{fileName:"Function.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEZ1bmN0aW9uIHsKICAgIC8vIEZ1bmN0aW9ucyBjYW4gcmV0dXJuIG11bHRpcGxlIHZhbHVlcy4KICAgIGZ1bmN0aW9uIHJldHVybk1hbnkoKSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2LCBib29sLCB1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuICgxLCB0cnVlLCAyKTsKICAgIH0KCiAgICAvLyBSZXR1cm4gdmFsdWVzIGNhbiBiZSBuYW1lZC4KICAgIGZ1bmN0aW9uIG5hbWVkKCkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB4LCBib29sIGIsIHVpbnQyNTYgeSkgewogICAgICAgIHJldHVybiAoMSwgdHJ1ZSwgMik7CiAgICB9CgogICAgLy8gUmV0dXJuIHZhbHVlcyBjYW4gYmUgYXNzaWduZWQgdG8gdGhlaXIgbmFtZS4KICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgcmV0dXJuIHN0YXRlbWVudCBjYW4gYmUgb21pdHRlZC4KICAgIGZ1bmN0aW9uIGFzc2lnbmVkKCkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB4LCBib29sIGIsIHVpbnQyNTYgeSkgewogICAgICAgIHggPSAxOwogICAgICAgIGIgPSB0cnVlOwogICAgICAgIHkgPSAyOwogICAgfQoKICAgIC8vIFVzZSBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQgd2hlbiBjYWxsaW5nIGFub3RoZXIKICAgIC8vIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBtdWx0aXBsZSB2YWx1ZXMuCiAgICBmdW5jdGlvbiBkZXN0cnVjdHVyaW5nQXNzaWdubWVudHMoKQogICAgICAgIHB1YmxpYwogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2LCBib29sLCB1aW50MjU2LCB1aW50MjU2LCB1aW50MjU2KQogICAgewogICAgICAgICh1aW50MjU2IGksIGJvb2wgYiwgdWludDI1NiBqKSA9IHJldHVybk1hbnkoKTsKCiAgICAgICAgLy8gVmFsdWVzIGNhbiBiZSBsZWZ0IG91dC4KICAgICAgICAodWludDI1NiB4LCwgdWludDI1NiB5KSA9ICg0LCA1LCA2KTsKCiAgICAgICAgcmV0dXJuIChpLCBiLCBqLCB4LCB5KTsKICAgIH0KCiAgICAvLyBDYW5ub3QgdXNlIG1hcCBmb3IgZWl0aGVyIGlucHV0IG9yIG91dHB1dAoKICAgIC8vIENhbiB1c2UgYXJyYXkgZm9yIGlucHV0CiAgICBmdW5jdGlvbiBhcnJheUlucHV0KHVpbnQyNTZbXSBtZW1vcnkgX2FycikgcHVibGljIHt9CgogICAgLy8gQ2FuIHVzZSBhcnJheSBmb3Igb3V0cHV0CiAgICB1aW50MjU2W10gcHVibGljIGFycjsKCiAgICBmdW5jdGlvbiBhcnJheU91dHB1dCgpIHB1YmxpYyB2aWV3IHJldHVybnMgKHVpbnQyNTZbXSBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gYXJyOwogICAgfQp9CgovLyBDYWxsIGZ1bmN0aW9uIHdpdGgga2V5LXZhbHVlIGlucHV0cwpjb250cmFjdCBYWVogewogICAgZnVuY3Rpb24gc29tZUZ1bmNXaXRoTWFueUlucHV0cygKICAgICAgICB1aW50MjU2IHgsCiAgICAgICAgdWludDI1NiB5LAogICAgICAgIHVpbnQyNTYgeiwKICAgICAgICBhZGRyZXNzIGEsCiAgICAgICAgYm9vbCBiLAogICAgICAgIHN0cmluZyBtZW1vcnkgYwogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7fQoKICAgIGZ1bmN0aW9uIGNhbGxGdW5jKCkgZXh0ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIHNvbWVGdW5jV2l0aE1hbnlJbnB1dHMoMSwgMiwgMywgYWRkcmVzcygwKSwgdHJ1ZSwgImMiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsRnVuY1dpdGhLZXlWYWx1ZSgpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBzb21lRnVuY1dpdGhNYW55SW5wdXRzKHsKICAgICAgICAgICAgYTogYWRkcmVzcygwKSwKICAgICAgICAgICAgYjogdHJ1ZSwKICAgICAgICAgICAgYzogImMiLAogICAgICAgICAgICB4OiAxLAogICAgICAgICAgICB5OiAyLAogICAgICAgICAgICB6OiAzCiAgICAgICAgfSk7CiAgICB9Cn0K"}],kw=`

              There are several ways to return outputs from a function.

              +`,Aw=({prev:s,next:a})=>i.jsx(u,{version:dw,title:Iw,description:Cw,html:uw,prev:s,next:a,codes:jw}),yw="0.8.24",mw="Function",bw="Example of how to write functions in Solidity",ww=[{fileName:"Function.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEZ1bmN0aW9uIHsKICAgIC8vIEZ1bmN0aW9ucyBjYW4gcmV0dXJuIG11bHRpcGxlIHZhbHVlcy4KICAgIGZ1bmN0aW9uIHJldHVybk1hbnkoKSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2LCBib29sLCB1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuICgxLCB0cnVlLCAyKTsKICAgIH0KCiAgICAvLyBSZXR1cm4gdmFsdWVzIGNhbiBiZSBuYW1lZC4KICAgIGZ1bmN0aW9uIG5hbWVkKCkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB4LCBib29sIGIsIHVpbnQyNTYgeSkgewogICAgICAgIHJldHVybiAoMSwgdHJ1ZSwgMik7CiAgICB9CgogICAgLy8gUmV0dXJuIHZhbHVlcyBjYW4gYmUgYXNzaWduZWQgdG8gdGhlaXIgbmFtZS4KICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgcmV0dXJuIHN0YXRlbWVudCBjYW4gYmUgb21pdHRlZC4KICAgIGZ1bmN0aW9uIGFzc2lnbmVkKCkgcHVibGljIHB1cmUgcmV0dXJucyAodWludDI1NiB4LCBib29sIGIsIHVpbnQyNTYgeSkgewogICAgICAgIHggPSAxOwogICAgICAgIGIgPSB0cnVlOwogICAgICAgIHkgPSAyOwogICAgfQoKICAgIC8vIFVzZSBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQgd2hlbiBjYWxsaW5nIGFub3RoZXIKICAgIC8vIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBtdWx0aXBsZSB2YWx1ZXMuCiAgICBmdW5jdGlvbiBkZXN0cnVjdHVyaW5nQXNzaWdubWVudHMoKQogICAgICAgIHB1YmxpYwogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zICh1aW50MjU2LCBib29sLCB1aW50MjU2LCB1aW50MjU2LCB1aW50MjU2KQogICAgewogICAgICAgICh1aW50MjU2IGksIGJvb2wgYiwgdWludDI1NiBqKSA9IHJldHVybk1hbnkoKTsKCiAgICAgICAgLy8gVmFsdWVzIGNhbiBiZSBsZWZ0IG91dC4KICAgICAgICAodWludDI1NiB4LCwgdWludDI1NiB5KSA9ICg0LCA1LCA2KTsKCiAgICAgICAgcmV0dXJuIChpLCBiLCBqLCB4LCB5KTsKICAgIH0KCiAgICAvLyBDYW5ub3QgdXNlIG1hcCBmb3IgZWl0aGVyIGlucHV0IG9yIG91dHB1dAoKICAgIC8vIENhbiB1c2UgYXJyYXkgZm9yIGlucHV0CiAgICBmdW5jdGlvbiBhcnJheUlucHV0KHVpbnQyNTZbXSBtZW1vcnkgX2FycikgcHVibGljIHt9CgogICAgLy8gQ2FuIHVzZSBhcnJheSBmb3Igb3V0cHV0CiAgICB1aW50MjU2W10gcHVibGljIGFycjsKCiAgICBmdW5jdGlvbiBhcnJheU91dHB1dCgpIHB1YmxpYyB2aWV3IHJldHVybnMgKHVpbnQyNTZbXSBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gYXJyOwogICAgfQp9CgovLyBDYWxsIGZ1bmN0aW9uIHdpdGgga2V5LXZhbHVlIGlucHV0cwpjb250cmFjdCBYWVogewogICAgZnVuY3Rpb24gc29tZUZ1bmNXaXRoTWFueUlucHV0cygKICAgICAgICB1aW50MjU2IHgsCiAgICAgICAgdWludDI1NiB5LAogICAgICAgIHVpbnQyNTYgeiwKICAgICAgICBhZGRyZXNzIGEsCiAgICAgICAgYm9vbCBiLAogICAgICAgIHN0cmluZyBtZW1vcnkgYwogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7fQoKICAgIGZ1bmN0aW9uIGNhbGxGdW5jKCkgZXh0ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIHNvbWVGdW5jV2l0aE1hbnlJbnB1dHMoMSwgMiwgMywgYWRkcmVzcygwKSwgdHJ1ZSwgImMiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsRnVuY1dpdGhLZXlWYWx1ZSgpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBzb21lRnVuY1dpdGhNYW55SW5wdXRzKHsKICAgICAgICAgICAgYTogYWRkcmVzcygwKSwKICAgICAgICAgICAgYjogdHJ1ZSwKICAgICAgICAgICAgYzogImMiLAogICAgICAgICAgICB4OiAxLAogICAgICAgICAgICB5OiAyLAogICAgICAgICAgICB6OiAzCiAgICAgICAgfSk7CiAgICB9Cn0K"}],kw=`

              There are several ways to return outputs from a function.

              Public functions cannot accept certain data types as inputs or outputs

              // SPDX-License-Identifier: MIT
               pragma solidity ^0.8.24;
              @@ -7281,7 +7443,7 @@ assertion probably means that there is a bug.
                       });
                   }
               }
              -
              `,Zw=({prev:s,next:a})=>i.jsx(u,{version:Aw,title:mw,description:bw,html:kw,prev:s,next:a,codes:ww}),Ww="0.8.24",Gw="Function Modifier",Bw="Example of how to write function modifier in Solidity",fw=[{fileName:"FunctionModifier.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEZ1bmN0aW9uTW9kaWZpZXIgewogICAgLy8gV2Ugd2lsbCB1c2UgdGhlc2UgdmFyaWFibGVzIHRvIGRlbW9uc3RyYXRlIGhvdyB0byB1c2UKICAgIC8vIG1vZGlmaWVycy4KICAgIGFkZHJlc3MgcHVibGljIG93bmVyOwogICAgdWludDI1NiBwdWJsaWMgeCA9IDEwOwogICAgYm9vbCBwdWJsaWMgbG9ja2VkOwoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIC8vIFNldCB0aGUgdHJhbnNhY3Rpb24gc2VuZGVyIGFzIHRoZSBvd25lciBvZiB0aGUgY29udHJhY3QuCiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIC8vIE1vZGlmaWVyIHRvIGNoZWNrIHRoYXQgdGhlIGNhbGxlciBpcyB0aGUgb3duZXIgb2YKICAgIC8vIHRoZSBjb250cmFjdC4KICAgIG1vZGlmaWVyIG9ubHlPd25lcigpIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gb3duZXIsICJOb3Qgb3duZXIiKTsKICAgICAgICAvLyBVbmRlcnNjb3JlIGlzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgb25seSB1c2VkIGluc2lkZQogICAgICAgIC8vIGEgZnVuY3Rpb24gbW9kaWZpZXIgYW5kIGl0IHRlbGxzIFNvbGlkaXR5IHRvCiAgICAgICAgLy8gZXhlY3V0ZSB0aGUgcmVzdCBvZiB0aGUgY29kZS4KICAgICAgICBfOwogICAgfQoKICAgIC8vIE1vZGlmaWVycyBjYW4gdGFrZSBpbnB1dHMuIFRoaXMgbW9kaWZpZXIgY2hlY2tzIHRoYXQgdGhlCiAgICAvLyBhZGRyZXNzIHBhc3NlZCBpbiBpcyBub3QgdGhlIHplcm8gYWRkcmVzcy4KICAgIG1vZGlmaWVyIHZhbGlkQWRkcmVzcyhhZGRyZXNzIF9hZGRyKSB7CiAgICAgICAgcmVxdWlyZShfYWRkciAhPSBhZGRyZXNzKDApLCAiTm90IHZhbGlkIGFkZHJlc3MiKTsKICAgICAgICBfOwogICAgfQoKICAgIGZ1bmN0aW9uIGNoYW5nZU93bmVyKGFkZHJlc3MgX25ld093bmVyKQogICAgICAgIHB1YmxpYwogICAgICAgIG9ubHlPd25lcgogICAgICAgIHZhbGlkQWRkcmVzcyhfbmV3T3duZXIpCiAgICB7CiAgICAgICAgb3duZXIgPSBfbmV3T3duZXI7CiAgICB9CgogICAgLy8gTW9kaWZpZXJzIGNhbiBiZSBjYWxsZWQgYmVmb3JlIGFuZCAvIG9yIGFmdGVyIGEgZnVuY3Rpb24uCiAgICAvLyBUaGlzIG1vZGlmaWVyIHByZXZlbnRzIGEgZnVuY3Rpb24gZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUKICAgIC8vIGl0IGlzIHN0aWxsIGV4ZWN1dGluZy4KICAgIG1vZGlmaWVyIG5vUmVlbnRyYW5jeSgpIHsKICAgICAgICByZXF1aXJlKCFsb2NrZWQsICJObyByZWVudHJhbmN5Iik7CgogICAgICAgIGxvY2tlZCA9IHRydWU7CiAgICAgICAgXzsKICAgICAgICBsb2NrZWQgPSBmYWxzZTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWNyZW1lbnQodWludDI1NiBpKSBwdWJsaWMgbm9SZWVudHJhbmN5IHsKICAgICAgICB4IC09IGk7CgogICAgICAgIGlmIChpID4gMSkgewogICAgICAgICAgICBkZWNyZW1lbnQoaSAtIDEpOwogICAgICAgIH0KICAgIH0KfQo="}],Vw=`

              Modifiers are code that can be run before and / or after a function call.

              +`,Zw=({prev:s,next:a})=>i.jsx(u,{version:yw,title:mw,description:bw,html:kw,prev:s,next:a,codes:ww}),Ww="0.8.24",Gw="Function Modifier",Bw="Example of how to write function modifier in Solidity",Vw=[{fileName:"FunctionModifier.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEZ1bmN0aW9uTW9kaWZpZXIgewogICAgLy8gV2Ugd2lsbCB1c2UgdGhlc2UgdmFyaWFibGVzIHRvIGRlbW9uc3RyYXRlIGhvdyB0byB1c2UKICAgIC8vIG1vZGlmaWVycy4KICAgIGFkZHJlc3MgcHVibGljIG93bmVyOwogICAgdWludDI1NiBwdWJsaWMgeCA9IDEwOwogICAgYm9vbCBwdWJsaWMgbG9ja2VkOwoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIC8vIFNldCB0aGUgdHJhbnNhY3Rpb24gc2VuZGVyIGFzIHRoZSBvd25lciBvZiB0aGUgY29udHJhY3QuCiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQoKICAgIC8vIE1vZGlmaWVyIHRvIGNoZWNrIHRoYXQgdGhlIGNhbGxlciBpcyB0aGUgb3duZXIgb2YKICAgIC8vIHRoZSBjb250cmFjdC4KICAgIG1vZGlmaWVyIG9ubHlPd25lcigpIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gb3duZXIsICJOb3Qgb3duZXIiKTsKICAgICAgICAvLyBVbmRlcnNjb3JlIGlzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgb25seSB1c2VkIGluc2lkZQogICAgICAgIC8vIGEgZnVuY3Rpb24gbW9kaWZpZXIgYW5kIGl0IHRlbGxzIFNvbGlkaXR5IHRvCiAgICAgICAgLy8gZXhlY3V0ZSB0aGUgcmVzdCBvZiB0aGUgY29kZS4KICAgICAgICBfOwogICAgfQoKICAgIC8vIE1vZGlmaWVycyBjYW4gdGFrZSBpbnB1dHMuIFRoaXMgbW9kaWZpZXIgY2hlY2tzIHRoYXQgdGhlCiAgICAvLyBhZGRyZXNzIHBhc3NlZCBpbiBpcyBub3QgdGhlIHplcm8gYWRkcmVzcy4KICAgIG1vZGlmaWVyIHZhbGlkQWRkcmVzcyhhZGRyZXNzIF9hZGRyKSB7CiAgICAgICAgcmVxdWlyZShfYWRkciAhPSBhZGRyZXNzKDApLCAiTm90IHZhbGlkIGFkZHJlc3MiKTsKICAgICAgICBfOwogICAgfQoKICAgIGZ1bmN0aW9uIGNoYW5nZU93bmVyKGFkZHJlc3MgX25ld093bmVyKQogICAgICAgIHB1YmxpYwogICAgICAgIG9ubHlPd25lcgogICAgICAgIHZhbGlkQWRkcmVzcyhfbmV3T3duZXIpCiAgICB7CiAgICAgICAgb3duZXIgPSBfbmV3T3duZXI7CiAgICB9CgogICAgLy8gTW9kaWZpZXJzIGNhbiBiZSBjYWxsZWQgYmVmb3JlIGFuZCAvIG9yIGFmdGVyIGEgZnVuY3Rpb24uCiAgICAvLyBUaGlzIG1vZGlmaWVyIHByZXZlbnRzIGEgZnVuY3Rpb24gZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUKICAgIC8vIGl0IGlzIHN0aWxsIGV4ZWN1dGluZy4KICAgIG1vZGlmaWVyIG5vUmVlbnRyYW5jeSgpIHsKICAgICAgICByZXF1aXJlKCFsb2NrZWQsICJObyByZWVudHJhbmN5Iik7CgogICAgICAgIGxvY2tlZCA9IHRydWU7CiAgICAgICAgXzsKICAgICAgICBsb2NrZWQgPSBmYWxzZTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWNyZW1lbnQodWludDI1NiBpKSBwdWJsaWMgbm9SZWVudHJhbmN5IHsKICAgICAgICB4IC09IGk7CgogICAgICAgIGlmIChpID4gMSkgewogICAgICAgICAgICBkZWNyZW1lbnQoaSAtIDEpOwogICAgICAgIH0KICAgIH0KfQo="}],fw=`

              Modifiers are code that can be run before and / or after a function call.

              Modifiers can be used to:

              • Restrict access
              • @@ -7347,7 +7509,7 @@ assertion probably means that there is a bug. } } } -`,Yw=({prev:s,next:a})=>i.jsx(u,{version:Ww,title:Gw,description:Bw,html:Vw,prev:s,next:a,codes:fw}),Rw="0.8.24",vw="Function Selector",Xw="Example of how function selectors are computed",Nw=[{fileName:"FunctionSelector.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEZ1bmN0aW9uU2VsZWN0b3IgewogICAgLyoKICAgICJ0cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpIgogICAgMHhhOTA1OWNiYgogICAgInRyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiCiAgICAweDIzYjg3MmRkCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3Ioc3RyaW5nIGNhbGxkYXRhIF9mdW5jKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGJ5dGVzNCkKICAgIHsKICAgICAgICByZXR1cm4gYnl0ZXM0KGtlY2NhazI1NihieXRlcyhfZnVuYykpKTsKICAgIH0KfQo="}],Hw=`

                When a function is called, the first 4 bytes of calldata specifies which function to call.

                +`,Yw=({prev:s,next:a})=>i.jsx(u,{version:Ww,title:Gw,description:Bw,html:fw,prev:s,next:a,codes:Vw}),Rw="0.8.24",Xw="Function Selector",vw="Example of how function selectors are computed",Nw=[{fileName:"FunctionSelector.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEZ1bmN0aW9uU2VsZWN0b3IgewogICAgLyoKICAgICJ0cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpIgogICAgMHhhOTA1OWNiYgogICAgInRyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiCiAgICAweDIzYjg3MmRkCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3Ioc3RyaW5nIGNhbGxkYXRhIF9mdW5jKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGJ5dGVzNCkKICAgIHsKICAgICAgICByZXR1cm4gYnl0ZXM0KGtlY2NhazI1NihieXRlcyhfZnVuYykpKTsKICAgIH0KfQo="}],Hw=`

                When a function is called, the first 4 bytes of calldata specifies which function to call.

                This 4 bytes is called a function selector.

                Take for example, this code below. It uses call to execute transfer on a contract at the address addr.

                addr.call(abi.encodeWithSignature("transfer(address,uint256)", 0xSomeAddress, 123))
                @@ -7372,7 +7534,7 @@ assertion probably means that there is a bug.
                         return bytes4(keccak256(bytes(_func)));
                     }
                 }
                -
                `,Fw=({prev:s,next:a})=>i.jsx(u,{version:Rw,title:vw,description:Xw,html:Hw,prev:s,next:a,codes:Nw}),Kw="0.8.24",Sw="Gas",Mw="Example of gas and gas limit in Solidity",xw=[{fileName:"Gas.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEdhcyB7CiAgICB1aW50MjU2IHB1YmxpYyBpID0gMDsKCiAgICAvLyBVc2luZyB1cCBhbGwgb2YgdGhlIGdhcyB0aGF0IHlvdSBzZW5kIGNhdXNlcyB5b3VyIHRyYW5zYWN0aW9uIHRvIGZhaWwuCiAgICAvLyBTdGF0ZSBjaGFuZ2VzIGFyZSB1bmRvbmUuCiAgICAvLyBHYXMgc3BlbnQgYXJlIG5vdCByZWZ1bmRlZC4KICAgIGZ1bmN0aW9uIGZvcmV2ZXIoKSBwdWJsaWMgewogICAgICAgIC8vIEhlcmUgd2UgcnVuIGEgbG9vcCB1bnRpbCBhbGwgb2YgdGhlIGdhcyBhcmUgc3BlbnQKICAgICAgICAvLyBhbmQgdGhlIHRyYW5zYWN0aW9uIGZhaWxzCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaSArPSAxOwogICAgICAgIH0KICAgIH0KfQo="}],Jw=`

                How much ether do you need to pay for a transaction?

                +`,Fw=({prev:s,next:a})=>i.jsx(u,{version:Rw,title:Xw,description:vw,html:Hw,prev:s,next:a,codes:Nw}),Kw="0.8.24",Sw="Gas",Mw="Example of gas and gas limit in Solidity",xw=[{fileName:"Gas.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEdhcyB7CiAgICB1aW50MjU2IHB1YmxpYyBpID0gMDsKCiAgICAvLyBVc2luZyB1cCBhbGwgb2YgdGhlIGdhcyB0aGF0IHlvdSBzZW5kIGNhdXNlcyB5b3VyIHRyYW5zYWN0aW9uIHRvIGZhaWwuCiAgICAvLyBTdGF0ZSBjaGFuZ2VzIGFyZSB1bmRvbmUuCiAgICAvLyBHYXMgc3BlbnQgYXJlIG5vdCByZWZ1bmRlZC4KICAgIGZ1bmN0aW9uIGZvcmV2ZXIoKSBwdWJsaWMgewogICAgICAgIC8vIEhlcmUgd2UgcnVuIGEgbG9vcCB1bnRpbCBhbGwgb2YgdGhlIGdhcyBhcmUgc3BlbnQKICAgICAgICAvLyBhbmQgdGhlIHRyYW5zYWN0aW9uIGZhaWxzCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaSArPSAxOwogICAgICAgIH0KICAgIH0KfQo="}],Jw=`

                How much ether do you need to pay for a transaction?

                You pay gas spent * gas price amount of ether, where

                • gas is a unit of computation
                • @@ -7815,7 +7977,7 @@ change the owner.
                  • Use stateless Library
                  -`,yk=({prev:s,next:a})=>i.jsx(u,{version:dk,title:Ik,description:Ck,html:uk,prev:s,next:a,codes:jk}),Ak="0.8.24",mk="Denial of Service",bk="An example of denial of service hack in Solidity",wk=[{fileName:"DenialOfService.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qClRoZSBnb2FsIG9mIEtpbmdPZkV0aGVyIGlzIHRvIGJlY29tZSB0aGUga2luZyBieSBzZW5kaW5nIG1vcmUgRXRoZXIgdGhhbgp0aGUgcHJldmlvdXMga2luZy4gUHJldmlvdXMga2luZyB3aWxsIGJlIHJlZnVuZGVkIHdpdGggdGhlIGFtb3VudCBvZiBFdGhlcgpoZSBzZW50LgoqLwoKLyoKMS4gRGVwbG95IEtpbmdPZkV0aGVyCjIuIEFsaWNlIGJlY29tZXMgdGhlIGtpbmcgYnkgc2VuZGluZyAxIEV0aGVyIHRvIGNsYWltVGhyb25lKCkuCjIuIEJvYiBiZWNvbWVzIHRoZSBraW5nIGJ5IHNlbmRpbmcgMiBFdGhlciB0byBjbGFpbVRocm9uZSgpLgogICBBbGljZSByZWNlaXZlcyBhIHJlZnVuZCBvZiAxIEV0aGVyLgozLiBEZXBsb3kgQXR0YWNrIHdpdGggYWRkcmVzcyBvZiBLaW5nT2ZFdGhlci4KNC4gQ2FsbCBhdHRhY2sgd2l0aCAzIEV0aGVyLgo1LiBDdXJyZW50IGtpbmcgaXMgdGhlIEF0dGFjayBjb250cmFjdCBhbmQgbm8gb25lIGNhbiBiZWNvbWUgdGhlIG5ldyBraW5nLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGJlY2FtZSB0aGUga2luZy4gQWxsIG5ldyBjaGFsbGVuZ2UgdG8gY2xhaW0gdGhlIHRocm9uZSB3aWxsIGJlIHJlamVjdGVkCnNpbmNlIEF0dGFjayBjb250cmFjdCBkb2VzIG5vdCBoYXZlIGEgZmFsbGJhY2sgZnVuY3Rpb24sIGRlbnlpbmcgdG8gYWNjZXB0IHRoZQpFdGhlciBzZW50IGZyb20gS2luZ09mRXRoZXIgYmVmb3JlIHRoZSBuZXcga2luZyBpcyBzZXQuCiovCgpjb250cmFjdCBLaW5nT2ZFdGhlciB7CiAgICBhZGRyZXNzIHB1YmxpYyBraW5nOwogICAgdWludDI1NiBwdWJsaWMgYmFsYW5jZTsKCiAgICBmdW5jdGlvbiBjbGFpbVRocm9uZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID4gYmFsYW5jZSwgIk5lZWQgdG8gcGF5IG1vcmUgdG8gYmVjb21lIHRoZSBraW5nIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IGtpbmcuY2FsbHt2YWx1ZTogYmFsYW5jZX0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CgogICAgICAgIGJhbGFuY2UgPSBtc2cudmFsdWU7CiAgICAgICAga2luZyA9IG1zZy5zZW5kZXI7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBLaW5nT2ZFdGhlciBraW5nT2ZFdGhlcjsKCiAgICBjb25zdHJ1Y3RvcihLaW5nT2ZFdGhlciBfa2luZ09mRXRoZXIpIHsKICAgICAgICBraW5nT2ZFdGhlciA9IEtpbmdPZkV0aGVyKF9raW5nT2ZFdGhlcik7CiAgICB9CgogICAgLy8gWW91IGNhbiBhbHNvIHBlcmZvcm0gYSBET1MgYnkgY29uc3VtaW5nIGFsbCBnYXMgdXNpbmcgYXNzZXJ0LgogICAgLy8gVGhpcyBhdHRhY2sgd2lsbCB3b3JrIGV2ZW4gaWYgdGhlIGNhbGxpbmcgY29udHJhY3QgZG9lcyBub3QgY2hlY2sKICAgIC8vIHdoZXRoZXIgdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgLy8KICAgIC8vIGZ1bmN0aW9uICgpIGV4dGVybmFsIHBheWFibGUgewogICAgLy8gICAgIGFzc2VydChmYWxzZSk7CiAgICAvLyB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHBheWFibGUgewogICAgICAgIGtpbmdPZkV0aGVyLmNsYWltVGhyb25le3ZhbHVlOiBtc2cudmFsdWV9KCk7CiAgICB9Cn0K"},{fileName:"PreventDenialOfService.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEtpbmdPZkV0aGVyIHsKICAgIGFkZHJlc3MgcHVibGljIGtpbmc7CiAgICB1aW50MjU2IHB1YmxpYyBiYWxhbmNlOwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlczsKCiAgICBmdW5jdGlvbiBjbGFpbVRocm9uZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID4gYmFsYW5jZSwgIk5lZWQgdG8gcGF5IG1vcmUgdG8gYmVjb21lIHRoZSBraW5nIik7CgogICAgICAgIGJhbGFuY2VzW2tpbmddICs9IGJhbGFuY2U7CgogICAgICAgIGJhbGFuY2UgPSBtc2cudmFsdWU7CiAgICAgICAga2luZyA9IG1zZy5zZW5kZXI7CiAgICB9CgogICAgZnVuY3Rpb24gd2l0aGRyYXcoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciAhPSBraW5nLCAiQ3VycmVudCBraW5nIGNhbm5vdCB3aXRoZHJhdyIpOwoKICAgICAgICB1aW50MjU2IGFtb3VudCA9IGJhbGFuY2VzW21zZy5zZW5kZXJdOwogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdID0gMDsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gbXNnLnNlbmRlci5jYWxse3ZhbHVlOiBhbW91bnR9KCIiKTsKICAgICAgICByZXF1aXJlKHNlbnQsICJGYWlsZWQgdG8gc2VuZCBFdGhlciIpOwogICAgfQp9Cg=="}],kk=`

                  Vulnerability

                  +`,Ak=({prev:s,next:a})=>i.jsx(u,{version:dk,title:Ik,description:Ck,html:uk,prev:s,next:a,codes:jk}),yk="0.8.24",mk="Denial of Service",bk="An example of denial of service hack in Solidity",wk=[{fileName:"DenialOfService.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qClRoZSBnb2FsIG9mIEtpbmdPZkV0aGVyIGlzIHRvIGJlY29tZSB0aGUga2luZyBieSBzZW5kaW5nIG1vcmUgRXRoZXIgdGhhbgp0aGUgcHJldmlvdXMga2luZy4gUHJldmlvdXMga2luZyB3aWxsIGJlIHJlZnVuZGVkIHdpdGggdGhlIGFtb3VudCBvZiBFdGhlcgpoZSBzZW50LgoqLwoKLyoKMS4gRGVwbG95IEtpbmdPZkV0aGVyCjIuIEFsaWNlIGJlY29tZXMgdGhlIGtpbmcgYnkgc2VuZGluZyAxIEV0aGVyIHRvIGNsYWltVGhyb25lKCkuCjIuIEJvYiBiZWNvbWVzIHRoZSBraW5nIGJ5IHNlbmRpbmcgMiBFdGhlciB0byBjbGFpbVRocm9uZSgpLgogICBBbGljZSByZWNlaXZlcyBhIHJlZnVuZCBvZiAxIEV0aGVyLgozLiBEZXBsb3kgQXR0YWNrIHdpdGggYWRkcmVzcyBvZiBLaW5nT2ZFdGhlci4KNC4gQ2FsbCBhdHRhY2sgd2l0aCAzIEV0aGVyLgo1LiBDdXJyZW50IGtpbmcgaXMgdGhlIEF0dGFjayBjb250cmFjdCBhbmQgbm8gb25lIGNhbiBiZWNvbWUgdGhlIG5ldyBraW5nLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGJlY2FtZSB0aGUga2luZy4gQWxsIG5ldyBjaGFsbGVuZ2UgdG8gY2xhaW0gdGhlIHRocm9uZSB3aWxsIGJlIHJlamVjdGVkCnNpbmNlIEF0dGFjayBjb250cmFjdCBkb2VzIG5vdCBoYXZlIGEgZmFsbGJhY2sgZnVuY3Rpb24sIGRlbnlpbmcgdG8gYWNjZXB0IHRoZQpFdGhlciBzZW50IGZyb20gS2luZ09mRXRoZXIgYmVmb3JlIHRoZSBuZXcga2luZyBpcyBzZXQuCiovCgpjb250cmFjdCBLaW5nT2ZFdGhlciB7CiAgICBhZGRyZXNzIHB1YmxpYyBraW5nOwogICAgdWludDI1NiBwdWJsaWMgYmFsYW5jZTsKCiAgICBmdW5jdGlvbiBjbGFpbVRocm9uZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID4gYmFsYW5jZSwgIk5lZWQgdG8gcGF5IG1vcmUgdG8gYmVjb21lIHRoZSBraW5nIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IGtpbmcuY2FsbHt2YWx1ZTogYmFsYW5jZX0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CgogICAgICAgIGJhbGFuY2UgPSBtc2cudmFsdWU7CiAgICAgICAga2luZyA9IG1zZy5zZW5kZXI7CiAgICB9Cn0KCmNvbnRyYWN0IEF0dGFjayB7CiAgICBLaW5nT2ZFdGhlciBraW5nT2ZFdGhlcjsKCiAgICBjb25zdHJ1Y3RvcihLaW5nT2ZFdGhlciBfa2luZ09mRXRoZXIpIHsKICAgICAgICBraW5nT2ZFdGhlciA9IEtpbmdPZkV0aGVyKF9raW5nT2ZFdGhlcik7CiAgICB9CgogICAgLy8gWW91IGNhbiBhbHNvIHBlcmZvcm0gYSBET1MgYnkgY29uc3VtaW5nIGFsbCBnYXMgdXNpbmcgYXNzZXJ0LgogICAgLy8gVGhpcyBhdHRhY2sgd2lsbCB3b3JrIGV2ZW4gaWYgdGhlIGNhbGxpbmcgY29udHJhY3QgZG9lcyBub3QgY2hlY2sKICAgIC8vIHdoZXRoZXIgdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LgogICAgLy8KICAgIC8vIGZ1bmN0aW9uICgpIGV4dGVybmFsIHBheWFibGUgewogICAgLy8gICAgIGFzc2VydChmYWxzZSk7CiAgICAvLyB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHBheWFibGUgewogICAgICAgIGtpbmdPZkV0aGVyLmNsYWltVGhyb25le3ZhbHVlOiBtc2cudmFsdWV9KCk7CiAgICB9Cn0K"},{fileName:"PreventDenialOfService.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEtpbmdPZkV0aGVyIHsKICAgIGFkZHJlc3MgcHVibGljIGtpbmc7CiAgICB1aW50MjU2IHB1YmxpYyBiYWxhbmNlOwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlczsKCiAgICBmdW5jdGlvbiBjbGFpbVRocm9uZSgpIGV4dGVybmFsIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID4gYmFsYW5jZSwgIk5lZWQgdG8gcGF5IG1vcmUgdG8gYmVjb21lIHRoZSBraW5nIik7CgogICAgICAgIGJhbGFuY2VzW2tpbmddICs9IGJhbGFuY2U7CgogICAgICAgIGJhbGFuY2UgPSBtc2cudmFsdWU7CiAgICAgICAga2luZyA9IG1zZy5zZW5kZXI7CiAgICB9CgogICAgZnVuY3Rpb24gd2l0aGRyYXcoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciAhPSBraW5nLCAiQ3VycmVudCBraW5nIGNhbm5vdCB3aXRoZHJhdyIpOwoKICAgICAgICB1aW50MjU2IGFtb3VudCA9IGJhbGFuY2VzW21zZy5zZW5kZXJdOwogICAgICAgIGJhbGFuY2VzW21zZy5zZW5kZXJdID0gMDsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gbXNnLnNlbmRlci5jYWxse3ZhbHVlOiBhbW91bnR9KCIiKTsKICAgICAgICByZXF1aXJlKHNlbnQsICJGYWlsZWQgdG8gc2VuZCBFdGhlciIpOwogICAgfQp9Cg=="}],kk=`

                  Vulnerability

                  There are many ways to attack a smart contract to make it unusable.

                  One exploit we introduce here is denial of service by making the function to send Ether fail.

                  // SPDX-License-Identifier: MIT
                  @@ -7906,7 +8068,7 @@ Ether sent from KingOfEther before the new king is set.
                           require(sent, "Failed to send Ether");
                       }
                   }
                  -
                  `,Zk=({prev:s,next:a})=>i.jsx(u,{version:Ak,title:mk,description:bk,html:kk,prev:s,next:a,codes:wk}),Wk="0.8.24",Gk="Deploy Different Contracts at the Same Address",Bk="An example of a Solidity contract vulnerable to deploy different contracts at the same address",fk=[{fileName:"TornadoHack.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCkNhbGxlZCBieSBBbGljZQowLiBEZXBsb3kgREFPCgpDYWxsZWQgYnkgQXR0YWNrZXIKMS4gRGVwbG95IERlcGxveWVyRGVwbG95ZXIKMi4gQ2FsbCBEZXBsb3llckRlcGxveWVyLmRlcGxveSgpCjMuIENhbGwgRGVwbG95ZXIuZGVwbG95UHJvcG9zYWwoKQoKQ2FsbGVkIGJ5IEFsaWNlCjQuIEdldCBEQU8gYXBwcm92YWwgb2YgUHJvcG9zYWwKCkNhbGxlZCBieSBBdHRhY2tlcgo1LiBEZWxldGUgUHJvcG9zYWwgYW5kIERlcGxveWVyCjYuIFJlLWRlcGxveSBEZXBsb3llcgo3LiBDYWxsIERlcGxveWVyLmRlcGxveUF0dGFjaygpCjguIENhbGwgREFPLmV4ZWN1dGUKOS4gQ2hlY2sgREFPLm93bmVyIGlzIGF0dGFja2VyJ3MgYWRkcmVzcwoKREFPIC0tIGFwcHJvdmVkIC0tPiBQcm9wb3NhbApEZXBsb3llckRlcGxveWVyIC0tIGNyZWF0ZTIgLS0+IERlcGxveWVyIC0tIGNyZWF0ZSAtLT4gUHJvcG9zYWwKRGVwbG95ZXJEZXBsb3llciAtLSBjcmVhdGUyIC0tPiBEZXBsb3llciAtLSBjcmVhdGUgLS0+IEF0dGFjawoqLwoKY29udHJhY3QgREFPIHsKICAgIHN0cnVjdCBQcm9wb3NhbCB7CiAgICAgICAgYWRkcmVzcyB0YXJnZXQ7CiAgICAgICAgYm9vbCBhcHByb3ZlZDsKICAgICAgICBib29sIGV4ZWN1dGVkOwogICAgfQoKICAgIGFkZHJlc3MgcHVibGljIG93bmVyID0gbXNnLnNlbmRlcjsKICAgIFByb3Bvc2FsW10gcHVibGljIHByb3Bvc2FsczsKCiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3MgdGFyZ2V0KSBleHRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShtc2cuc2VuZGVyID09IG93bmVyLCAibm90IGF1dGhvcml6ZWQiKTsKCiAgICAgICAgcHJvcG9zYWxzLnB1c2goCiAgICAgICAgICAgIFByb3Bvc2FsKHt0YXJnZXQ6IHRhcmdldCwgYXBwcm92ZWQ6IHRydWUsIGV4ZWN1dGVkOiBmYWxzZX0pCiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiBleGVjdXRlKHVpbnQyNTYgcHJvcG9zYWxJZCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgUHJvcG9zYWwgc3RvcmFnZSBwcm9wb3NhbCA9IHByb3Bvc2Fsc1twcm9wb3NhbElkXTsKICAgICAgICByZXF1aXJlKHByb3Bvc2FsLmFwcHJvdmVkLCAibm90IGFwcHJvdmVkIik7CiAgICAgICAgcmVxdWlyZSghcHJvcG9zYWwuZXhlY3V0ZWQsICJleGVjdXRlZCIpOwoKICAgICAgICBwcm9wb3NhbC5leGVjdXRlZCA9IHRydWU7CgogICAgICAgIChib29sIG9rLCkgPSBwcm9wb3NhbC50YXJnZXQuZGVsZWdhdGVjYWxsKAogICAgICAgICAgICBhYmkuZW5jb2RlV2l0aFNpZ25hdHVyZSgiZXhlY3V0ZVByb3Bvc2FsKCkiKQogICAgICAgICk7CiAgICAgICAgcmVxdWlyZShvaywgImRlbGVnYXRlY2FsbCBmYWlsZWQiKTsKICAgIH0KfQoKY29udHJhY3QgUHJvcG9zYWwgewogICAgZXZlbnQgTG9nKHN0cmluZyBtZXNzYWdlKTsKCiAgICBmdW5jdGlvbiBleGVjdXRlUHJvcG9zYWwoKSBleHRlcm5hbCB7CiAgICAgICAgZW1pdCBMb2coIkV4Y3V0ZWQgY29kZSBhcHByb3ZlZCBieSBEQU8iKTsKICAgIH0KCiAgICBmdW5jdGlvbiBlbWVyZ2VuY3lTdG9wKCkgZXh0ZXJuYWwgewogICAgICAgIHNlbGZkZXN0cnVjdChwYXlhYmxlKGFkZHJlc3MoMCkpKTsKICAgIH0KfQoKY29udHJhY3QgQXR0YWNrIHsKICAgIGV2ZW50IExvZyhzdHJpbmcgbWVzc2FnZSk7CgogICAgYWRkcmVzcyBwdWJsaWMgb3duZXI7CgogICAgZnVuY3Rpb24gZXhlY3V0ZVByb3Bvc2FsKCkgZXh0ZXJuYWwgewogICAgICAgIGVtaXQgTG9nKCJFeGN1dGVkIGNvZGUgbm90IGFwcHJvdmVkIGJ5IERBTyA6KSIpOwogICAgICAgIC8vIEZvciBleGFtcGxlIC0gc2V0IERBTydzIG93bmVyIHRvIGF0dGFja2VyCiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQp9Cgpjb250cmFjdCBEZXBsb3llckRlcGxveWVyIHsKICAgIGV2ZW50IExvZyhhZGRyZXNzIGFkZHIpOwoKICAgIGZ1bmN0aW9uIGRlcGxveSgpIGV4dGVybmFsIHsKICAgICAgICBieXRlczMyIHNhbHQgPSBrZWNjYWsyNTYoYWJpLmVuY29kZSh1aW50MjU2KDEyMykpKTsKICAgICAgICBhZGRyZXNzIGFkZHIgPSBhZGRyZXNzKG5ldyBEZXBsb3llcntzYWx0OiBzYWx0fSgpKTsKICAgICAgICBlbWl0IExvZyhhZGRyKTsKICAgIH0KfQoKY29udHJhY3QgRGVwbG95ZXIgewogICAgZXZlbnQgTG9nKGFkZHJlc3MgYWRkcik7CgogICAgZnVuY3Rpb24gZGVwbG95UHJvcG9zYWwoKSBleHRlcm5hbCB7CiAgICAgICAgYWRkcmVzcyBhZGRyID0gYWRkcmVzcyhuZXcgUHJvcG9zYWwoKSk7CiAgICAgICAgZW1pdCBMb2coYWRkcik7CiAgICB9CgogICAgZnVuY3Rpb24gZGVwbG95QXR0YWNrKCkgZXh0ZXJuYWwgewogICAgICAgIGFkZHJlc3MgYWRkciA9IGFkZHJlc3MobmV3IEF0dGFjaygpKTsKICAgICAgICBlbWl0IExvZyhhZGRyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBraWxsKCkgZXh0ZXJuYWwgewogICAgICAgIHNlbGZkZXN0cnVjdChwYXlhYmxlKGFkZHJlc3MoMCkpKTsKICAgIH0KfQo="}],Vk=`

                  Contract address deployed with create is computed in the following way.

                  +`,Zk=({prev:s,next:a})=>i.jsx(u,{version:yk,title:mk,description:bk,html:kk,prev:s,next:a,codes:wk}),Wk="0.8.24",Gk="Deploy Different Contracts at the Same Address",Bk="An example of a Solidity contract vulnerable to deploy different contracts at the same address",Vk=[{fileName:"TornadoHack.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCkNhbGxlZCBieSBBbGljZQowLiBEZXBsb3kgREFPCgpDYWxsZWQgYnkgQXR0YWNrZXIKMS4gRGVwbG95IERlcGxveWVyRGVwbG95ZXIKMi4gQ2FsbCBEZXBsb3llckRlcGxveWVyLmRlcGxveSgpCjMuIENhbGwgRGVwbG95ZXIuZGVwbG95UHJvcG9zYWwoKQoKQ2FsbGVkIGJ5IEFsaWNlCjQuIEdldCBEQU8gYXBwcm92YWwgb2YgUHJvcG9zYWwKCkNhbGxlZCBieSBBdHRhY2tlcgo1LiBEZWxldGUgUHJvcG9zYWwgYW5kIERlcGxveWVyCjYuIFJlLWRlcGxveSBEZXBsb3llcgo3LiBDYWxsIERlcGxveWVyLmRlcGxveUF0dGFjaygpCjguIENhbGwgREFPLmV4ZWN1dGUKOS4gQ2hlY2sgREFPLm93bmVyIGlzIGF0dGFja2VyJ3MgYWRkcmVzcwoKREFPIC0tIGFwcHJvdmVkIC0tPiBQcm9wb3NhbApEZXBsb3llckRlcGxveWVyIC0tIGNyZWF0ZTIgLS0+IERlcGxveWVyIC0tIGNyZWF0ZSAtLT4gUHJvcG9zYWwKRGVwbG95ZXJEZXBsb3llciAtLSBjcmVhdGUyIC0tPiBEZXBsb3llciAtLSBjcmVhdGUgLS0+IEF0dGFjawoqLwoKY29udHJhY3QgREFPIHsKICAgIHN0cnVjdCBQcm9wb3NhbCB7CiAgICAgICAgYWRkcmVzcyB0YXJnZXQ7CiAgICAgICAgYm9vbCBhcHByb3ZlZDsKICAgICAgICBib29sIGV4ZWN1dGVkOwogICAgfQoKICAgIGFkZHJlc3MgcHVibGljIG93bmVyID0gbXNnLnNlbmRlcjsKICAgIFByb3Bvc2FsW10gcHVibGljIHByb3Bvc2FsczsKCiAgICBmdW5jdGlvbiBhcHByb3ZlKGFkZHJlc3MgdGFyZ2V0KSBleHRlcm5hbCB7CiAgICAgICAgcmVxdWlyZShtc2cuc2VuZGVyID09IG93bmVyLCAibm90IGF1dGhvcml6ZWQiKTsKCiAgICAgICAgcHJvcG9zYWxzLnB1c2goCiAgICAgICAgICAgIFByb3Bvc2FsKHt0YXJnZXQ6IHRhcmdldCwgYXBwcm92ZWQ6IHRydWUsIGV4ZWN1dGVkOiBmYWxzZX0pCiAgICAgICAgKTsKICAgIH0KCiAgICBmdW5jdGlvbiBleGVjdXRlKHVpbnQyNTYgcHJvcG9zYWxJZCkgZXh0ZXJuYWwgcGF5YWJsZSB7CiAgICAgICAgUHJvcG9zYWwgc3RvcmFnZSBwcm9wb3NhbCA9IHByb3Bvc2Fsc1twcm9wb3NhbElkXTsKICAgICAgICByZXF1aXJlKHByb3Bvc2FsLmFwcHJvdmVkLCAibm90IGFwcHJvdmVkIik7CiAgICAgICAgcmVxdWlyZSghcHJvcG9zYWwuZXhlY3V0ZWQsICJleGVjdXRlZCIpOwoKICAgICAgICBwcm9wb3NhbC5leGVjdXRlZCA9IHRydWU7CgogICAgICAgIChib29sIG9rLCkgPSBwcm9wb3NhbC50YXJnZXQuZGVsZWdhdGVjYWxsKAogICAgICAgICAgICBhYmkuZW5jb2RlV2l0aFNpZ25hdHVyZSgiZXhlY3V0ZVByb3Bvc2FsKCkiKQogICAgICAgICk7CiAgICAgICAgcmVxdWlyZShvaywgImRlbGVnYXRlY2FsbCBmYWlsZWQiKTsKICAgIH0KfQoKY29udHJhY3QgUHJvcG9zYWwgewogICAgZXZlbnQgTG9nKHN0cmluZyBtZXNzYWdlKTsKCiAgICBmdW5jdGlvbiBleGVjdXRlUHJvcG9zYWwoKSBleHRlcm5hbCB7CiAgICAgICAgZW1pdCBMb2coIkV4Y3V0ZWQgY29kZSBhcHByb3ZlZCBieSBEQU8iKTsKICAgIH0KCiAgICBmdW5jdGlvbiBlbWVyZ2VuY3lTdG9wKCkgZXh0ZXJuYWwgewogICAgICAgIHNlbGZkZXN0cnVjdChwYXlhYmxlKGFkZHJlc3MoMCkpKTsKICAgIH0KfQoKY29udHJhY3QgQXR0YWNrIHsKICAgIGV2ZW50IExvZyhzdHJpbmcgbWVzc2FnZSk7CgogICAgYWRkcmVzcyBwdWJsaWMgb3duZXI7CgogICAgZnVuY3Rpb24gZXhlY3V0ZVByb3Bvc2FsKCkgZXh0ZXJuYWwgewogICAgICAgIGVtaXQgTG9nKCJFeGN1dGVkIGNvZGUgbm90IGFwcHJvdmVkIGJ5IERBTyA6KSIpOwogICAgICAgIC8vIEZvciBleGFtcGxlIC0gc2V0IERBTydzIG93bmVyIHRvIGF0dGFja2VyCiAgICAgICAgb3duZXIgPSBtc2cuc2VuZGVyOwogICAgfQp9Cgpjb250cmFjdCBEZXBsb3llckRlcGxveWVyIHsKICAgIGV2ZW50IExvZyhhZGRyZXNzIGFkZHIpOwoKICAgIGZ1bmN0aW9uIGRlcGxveSgpIGV4dGVybmFsIHsKICAgICAgICBieXRlczMyIHNhbHQgPSBrZWNjYWsyNTYoYWJpLmVuY29kZSh1aW50MjU2KDEyMykpKTsKICAgICAgICBhZGRyZXNzIGFkZHIgPSBhZGRyZXNzKG5ldyBEZXBsb3llcntzYWx0OiBzYWx0fSgpKTsKICAgICAgICBlbWl0IExvZyhhZGRyKTsKICAgIH0KfQoKY29udHJhY3QgRGVwbG95ZXIgewogICAgZXZlbnQgTG9nKGFkZHJlc3MgYWRkcik7CgogICAgZnVuY3Rpb24gZGVwbG95UHJvcG9zYWwoKSBleHRlcm5hbCB7CiAgICAgICAgYWRkcmVzcyBhZGRyID0gYWRkcmVzcyhuZXcgUHJvcG9zYWwoKSk7CiAgICAgICAgZW1pdCBMb2coYWRkcik7CiAgICB9CgogICAgZnVuY3Rpb24gZGVwbG95QXR0YWNrKCkgZXh0ZXJuYWwgewogICAgICAgIGFkZHJlc3MgYWRkciA9IGFkZHJlc3MobmV3IEF0dGFjaygpKTsKICAgICAgICBlbWl0IExvZyhhZGRyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBraWxsKCkgZXh0ZXJuYWwgewogICAgICAgIHNlbGZkZXN0cnVjdChwYXlhYmxlKGFkZHJlc3MoMCkpKTsKICAgIH0KfQo="}],fk=`

                  Contract address deployed with create is computed in the following way.

                  contract address = last 20 bytes of sha3(rlp_encode(sender, nonce))
                   

                  where sender is the address of the deployer and nonce is the number of transactions sent by sender.

                  Hence it is possible to deploy different contracts at the same address if we can somehow reset the nonce.

                  @@ -8021,7 +8183,7 @@ DeployerDeployer -- create2 --> Deployer -- create --> Attack selfdestruct(payable(address(0))); } } -`,Yk=({prev:s,next:a})=>i.jsx(u,{version:Wk,title:Gk,description:Bk,html:Vk,prev:s,next:a,codes:fk}),Rk="0.8.24",vk="Front Running",Xk="An example of a Solidity contract vulnerable to front running",Nk=[{fileName:"FrontRunning.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCkFsaWNlIGNyZWF0ZXMgYSBndWVzc2luZyBnYW1lLgpZb3Ugd2luIDEwIGV0aGVyIGlmIHlvdSBjYW4gZmluZCB0aGUgY29ycmVjdCBzdHJpbmcgdGhhdCBoYXNoZXMgdG8gdGhlIHRhcmdldApoYXNoLiBMZXQncyBzZWUgaG93IHRoaXMgY29udHJhY3QgaXMgdnVsbmVyYWJsZSB0byBmcm9udCBydW5uaW5nLgoqLwoKLyoKMS4gQWxpY2UgZGVwbG95cyBGaW5kVGhpc0hhc2ggd2l0aCAxMCBFdGhlci4KMi4gQm9iIGZpbmRzIHRoZSBjb3JyZWN0IHN0cmluZyB0aGF0IHdpbGwgaGFzaCB0byB0aGUgdGFyZ2V0IGhhc2guICgiRXRoZXJldW0iKQozLiBCb2IgY2FsbHMgc29sdmUoIkV0aGVyZXVtIikgd2l0aCBnYXMgcHJpY2Ugc2V0IHRvIDE1IGd3ZWkuCjQuIEV2ZSBpcyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbCBmb3IgdGhlIGFuc3dlciB0byBiZSBzdWJtaXR0ZWQuCjUuIEV2ZSBzZWVzIEJvYidzIGFuc3dlciBhbmQgY2FsbHMgc29sdmUoIkV0aGVyZXVtIikgd2l0aCBhIGhpZ2hlciBnYXMgcHJpY2UKICAgdGhhbiBCb2IgKDEwMCBnd2VpKS4KNi4gRXZlJ3MgdHJhbnNhY3Rpb24gd2FzIG1pbmVkIGJlZm9yZSBCb2IncyB0cmFuc2FjdGlvbi4KICAgRXZlIHdvbiB0aGUgcmV3YXJkIG9mIDEwIGV0aGVyLgoKV2hhdCBoYXBwZW5lZD8KVHJhbnNhY3Rpb25zIHRha2Ugc29tZSB0aW1lIGJlZm9yZSB0aGV5IGFyZSBtaW5lZC4KVHJhbnNhY3Rpb25zIG5vdCB5ZXQgbWluZWQgYXJlIHB1dCBpbiB0aGUgdHJhbnNhY3Rpb24gcG9vbC4KVHJhbnNhY3Rpb25zIHdpdGggaGlnaGVyIGdhcyBwcmljZSBhcmUgdHlwaWNhbGx5IG1pbmVkIGZpcnN0LgpBbiBhdHRhY2tlciBjYW4gZ2V0IHRoZSBhbnN3ZXIgZnJvbSB0aGUgdHJhbnNhY3Rpb24gcG9vbCwgc2VuZCBhIHRyYW5zYWN0aW9uCndpdGggYSBoaWdoZXIgZ2FzIHByaWNlIHNvIHRoYXQgdGhlaXIgdHJhbnNhY3Rpb24gd2lsbCBiZSBpbmNsdWRlZCBpbiBhIGJsb2NrCmJlZm9yZSB0aGUgb3JpZ2luYWwuCiovCgpjb250cmFjdCBGaW5kVGhpc0hhc2ggewogICAgYnl0ZXMzMiBwdWJsaWMgY29uc3RhbnQgaGFzaCA9CiAgICAgICAgMHg1NjRjY2FmNzU5NGQ2NmIxZWFhZWEyNGZlMDFmMDU4NWJmNTJlZTcwODUyYWY0ZWFjMGNjNGIwNDcxMWNkMGUyOwoKICAgIGNvbnN0cnVjdG9yKCkgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIHNvbHZlKHN0cmluZyBtZW1vcnkgc29sdXRpb24pIHB1YmxpYyB7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgaGFzaCA9PSBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChzb2x1dGlvbikpLCAiSW5jb3JyZWN0IGFuc3dlciIKICAgICAgICApOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IDEwIGV0aGVyfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KfQo="},{fileName:"PreventFrontRunning.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCiAgIE5vdyBMZXQncyBzZWUgaG93IHRvIGd1YXJkIGZyb20gZnJvbnQgcnVubmluZyB1c2luZyBjb21taXQgcmV2ZWFsIHNjaGVtZS4KKi8KCi8qCjEuIEFsaWNlIGRlcGxveXMgU2VjdXJlZEZpbmRUaGlzSGFzaCB3aXRoIDEwIEV0aGVyLgoyLiBCb2IgZmluZHMgdGhlIGNvcnJlY3Qgc3RyaW5nIHRoYXQgd2lsbCBoYXNoIHRvIHRoZSB0YXJnZXQgaGFzaC4gKCJFdGhlcmV1bSIpLgozLiBCb2IgdGhlbiBmaW5kcyB0aGUga2VjY2FrMjU2KEFkZHJlc3MgaW4gbG93ZXJjYXNlICsgU29sdXRpb24gKyBTZWNyZXQpLiAKICAgQWRkcmVzcyBpcyBoaXMgd2FsbGV0IGFkZHJlc3MgaW4gbG93ZXJjYXNlLCBzb2x1dGlvbiBpcyAiRXRoZXJldW0iLCBTZWNyZXQgaXMgbGlrZSBhbiBwYXNzd29yZCAoIm15c2VjcmV0IikgCiAgIHRoYXQgb25seSBCb2Iga25vd3Mgd2hpYyBCb2IgdXNlcyB0byBjb21taXQgYW5kIHJldmVhbCB0aGUgc29sdXRpb24uCiAgIGtlY2NhazI1NjYoIjB4ZjM5RmQ2ZTUxYWFkODhGNkY0Y2U2YUI4ODI3Mjc5Y2ZmRmI5MjI2NkV0aGVyZXVtbXlzZWNyZXQiKSA9ICcweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYnCjMuIEJvYiB0aGVuIGNhbGxzIGNvbW1pdFNvbHV0aW9uKCIweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYiKSwgCiAgIHdoZXJlIGhlIGNvbW1pdHMgdGhlIGNhbGN1bGF0ZWQgc29sdXRpb24gaGFzaCB3aXRoIGdhcyBwcmljZSBzZXQgdG8gMTUgZ3dlaS4KNC4gRXZlIGlzIHdhdGNoaW5nIHRoZSB0cmFuc2FjdGlvbiBwb29sIGZvciB0aGUgYW5zd2VyIHRvIGJlIHN1Ym1pdHRlZC4KNS4gRXZlIHNlZXMgQm9iJ3MgYW5zd2VyIGFuZCBoZSBhbHNvIGNhbGxzIGNvbW1pdFNvbHV0aW9uKCIweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYiKQogICB3aXRoIGEgaGlnaGVyIGdhcyBwcmljZSB0aGFuIEJvYiAoMTAwIGd3ZWkpLgo2LiBFdmUncyB0cmFuc2FjdGlvbiB3YXMgbWluZWQgYmVmb3JlIEJvYidzIHRyYW5zYWN0aW9uLCBidXQgRXZlIGhhcyBub3QgZ290IHRoZSByZXdhcmQgeWV0LgogICBIZSBuZWVkcyB0byBjYWxsIHJldmVhbFNvbHV0aW9uKCkgd2l0aCBleGFjdCBzZWNyZXQgYW5kIHNvbHV0aW9uLCBzbyBsZXRzIHNheSBoZSBpcyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbAogICB0byBmcm9udCBydW4gQm9iIGFzIGhlIGRpZCBwcmV2aW91c2x5CjcuIFRoZW4gQm9iIGNhbGxzIHRoZSByZXZlYWxTb2x1dGlvbigiRXRoZXJldW0iLCAibXlzZWNyZXQiKSB3aXRoIGdhcyBwcmljZSBzZXQgdG8gMTUgZ3dlaTsKOC4gTGV0J3MgY29uc2lkZXIgdGhhdCBFdmUncyB3aG8ncyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbCwgZmluZCdzIEJvYidzIHJldmVhbCBzb2x1dGlvbiB0cmFuc2FjdGlvbiBhbmQgaGUgYWxzbyBjYWxscyAKICAgcmV2ZWFsU29sdXRpb24oIkV0aGVyZXVtIiwgIm15c2VjcmV0Iikgd2l0aCBoaWdoZXIgZ2FzIHByaWNlIHRoYW4gQm9iICgxMDAgZ3dlaSkKOS4gTGV0J3MgY29uc2lkZXIgdGhhdCB0aGlzIHRpbWUgYWxzbyBFdmUncyByZXZlYWwgdHJhbnNhY3Rpb24gd2FzIG1pbmVkIGJlZm9yZSBCb2IncyB0cmFuc2FjdGlvbiwgYnV0IEV2ZSB3aWxsIGJlCiAgIHJldmVydGVkIHdpdGggIkhhc2ggZG9lc24ndCBtYXRjaCIgZXJyb3IuIFNpbmNlIHRoZSByZXZlYWxTb2x1dGlvbigpIGZ1bmN0aW9uIGNoZWNrcyB0aGUgaGFzaCB1c2luZyAKICAga2VjY2FrMjU2KG1zZy5zZW5kZXIgKyBzb2x1dGlvbiArIHNlY3JldCkuIFNvIHRoaXMgdGltZSBldmUgZmFpbHMgdG8gd2luIHRoZSByZXdhcmQuCjEwLkJ1dCBCb2IncyByZXZlYWxTb2x1dGlvbigiRXRoZXJldW0iLCAibXlzZWNyZXQiKSBwYXNzZXMgdGhlIGhhc2ggY2hlY2sgYW5kIGdldHMgdGhlIHJld2FyZCBvZiAxMCBldGhlci4KKi8KCmNvbnRyYWN0IFNlY3VyZWRGaW5kVGhpc0hhc2ggewogICAgLy8gU3RydWN0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbW1pdCBkZXRhaWxzCiAgICBzdHJ1Y3QgQ29tbWl0IHsKICAgICAgICBieXRlczMyIHNvbHV0aW9uSGFzaDsKICAgICAgICB1aW50MjU2IGNvbW1pdFRpbWU7CiAgICAgICAgYm9vbCByZXZlYWxlZDsKICAgIH0KCiAgICAvLyBUaGUgaGFzaCB0aGF0IGlzIG5lZWRlZCB0byBiZSBzb2x2ZWQKICAgIGJ5dGVzMzIgcHVibGljIGhhc2ggPQogICAgICAgIDB4NTY0Y2NhZjc1OTRkNjZiMWVhYWVhMjRmZTAxZjA1ODViZjUyZWU3MDg1MmFmNGVhYzBjYzRiMDQ3MTFjZDBlMjsKCiAgICAvLyBBZGRyZXNzIG9mIHRoZSB3aW5uZXIKICAgIGFkZHJlc3MgcHVibGljIHdpbm5lcjsKCiAgICAvLyBQcmljZSB0byBiZSByZXdhcmRlZAogICAgdWludDI1NiBwdWJsaWMgcmV3YXJkOwoKICAgIC8vIFN0YXR1cyBvZiBnYW1lCiAgICBib29sIHB1YmxpYyBlbmRlZDsKCiAgICAvLyBNYXBwaW5nIHRvIHN0b3JlIHRoZSBjb21taXQgZGV0YWlscyB3aXRoIGFkZHJlc3MKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiBDb21taXQpIGNvbW1pdHM7CgogICAgLy8gTW9kaWZpZXIgdG8gY2hlY2sgaWYgdGhlIGdhbWUgaXMgYWN0aXZlCiAgICBtb2RpZmllciBnYW1lQWN0aXZlKCkgewogICAgICAgIHJlcXVpcmUoIWVuZGVkLCAiQWxyZWFkeSBlbmRlZCIpOwogICAgICAgIF87CiAgICB9CgogICAgY29uc3RydWN0b3IoKSBwYXlhYmxlIHsKICAgICAgICByZXdhcmQgPSBtc2cudmFsdWU7CiAgICB9CgogICAgLyogCiAgICAgICBDb21taXQgZnVuY3Rpb24gdG8gc3RvcmUgdGhlIGhhc2ggY2FsY3VsYXRlZCB1c2luZyBrZWNjYWsyNTYoYWRkcmVzcyBpbiBsb3dlcmNhc2UgKyBzb2x1dGlvbiArIHNlY3JldCkuIAogICAgICAgVXNlcnMgY2FuIG9ubHkgY29tbWl0IG9uY2UgYW5kIGlmIHRoZSBnYW1lIGlzIGFjdGl2ZS4KICAgICovCiAgICBmdW5jdGlvbiBjb21taXRTb2x1dGlvbihieXRlczMyIF9zb2x1dGlvbkhhc2gpIHB1YmxpYyBnYW1lQWN0aXZlIHsKICAgICAgICBDb21taXQgc3RvcmFnZSBjb21taXQgPSBjb21taXRzW21zZy5zZW5kZXJdOwogICAgICAgIHJlcXVpcmUoY29tbWl0LmNvbW1pdFRpbWUgPT0gMCwgIkFscmVhZHkgY29tbWl0dGVkIik7CiAgICAgICAgY29tbWl0LnNvbHV0aW9uSGFzaCA9IF9zb2x1dGlvbkhhc2g7CiAgICAgICAgY29tbWl0LmNvbW1pdFRpbWUgPSBibG9jay50aW1lc3RhbXA7CiAgICAgICAgY29tbWl0LnJldmVhbGVkID0gZmFsc2U7CiAgICB9CgogICAgLyogCiAgICAgICAgRnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21taXQgZGV0YWlscy4gSXQgcmV0dXJucyBhIHR1cGxlIG9mIChzb2x1dGlvbkhhc2gsIGNvbW1pdFRpbWUsIHJldmVhbFN0YXR1cyk7ICAKICAgICAgICBVc2VycyBjYW4gZ2V0IHNvbHV0aW9uIG9ubHkgaWYgdGhlIGdhbWUgaXMgYWN0aXZlIGFuZCB0aGV5IGhhdmUgY29tbWl0dGVkIGEgc29sdXRpb25IYXNoCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0TXlTb2x1dGlvbigpCiAgICAgICAgcHVibGljCiAgICAgICAgdmlldwogICAgICAgIGdhbWVBY3RpdmUKICAgICAgICByZXR1cm5zIChieXRlczMyLCB1aW50MjU2LCBib29sKQogICAgewogICAgICAgIENvbW1pdCBzdG9yYWdlIGNvbW1pdCA9IGNvbW1pdHNbbXNnLnNlbmRlcl07CiAgICAgICAgcmVxdWlyZShjb21taXQuY29tbWl0VGltZSAhPSAwLCAiTm90IGNvbW1pdHRlZCB5ZXQiKTsKICAgICAgICByZXR1cm4gKGNvbW1pdC5zb2x1dGlvbkhhc2gsIGNvbW1pdC5jb21taXRUaW1lLCBjb21taXQucmV2ZWFsZWQpOwogICAgfQogICAgLyogCiAgICAgICAgRnVuY3Rpb24gdG8gcmV2ZWFsIHRoZSBjb21taXQgYW5kIGdldCB0aGUgcmV3YXJkLiAKICAgICAgICBVc2VycyBjYW4gZ2V0IHJldmVhbCBzb2x1dGlvbiBvbmx5IGlmIHRoZSBnYW1lIGlzIGFjdGl2ZSBhbmQgdGhleSBoYXZlIGNvbW1pdHRlZCBhIHNvbHV0aW9uSGFzaCBiZWZvcmUgdGhpcyBibG9jayBhbmQgbm90IHJldmVhbGVkIHlldC4KICAgICAgICBJdCBnZW5lcmF0ZXMgYW4ga2VjY2FrMjU2KG1zZy5zZW5kZXIgKyBzb2x1dGlvbiArIHNlY3JldCkgYW5kIGNoZWNrcyBpdCB3aXRoIHRoZSBwcmV2aW91c2x5IGNvbW1pdGVkIGhhc2guICAKICAgICAgICBBc3N1bWluZyB0aGF0IGEgY29tbWl0IHdhcyBhbHJlYWR5IGluY2x1ZGVkIG9uIGNoYWluLCBmcm9udCBydW5uZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gcGFzcyB0aGlzIGNoZWNrIHNpbmNlIHRoZSBtc2cuc2VuZGVyIGlzIGRpZmZlcmVudC4KICAgICAgICBUaGVuIHRoZSBhY3R1YWwgc29sdXRpb24gaXMgY2hlY2tlZCB1c2luZyBrZWNjYWsyNTYoc29sdXRpb24pLCBpZiB0aGUgc29sdXRpb24gbWF0Y2hlcywgdGhlIHdpbm5lciBpcyBkZWNsYXJlZCwgCiAgICAgICAgdGhlIGdhbWUgaXMgZW5kZWQgYW5kIHRoZSByZXdhcmQgYW1vdW50IGlzIHNlbnQgdG8gdGhlIHdpbm5lci4KICAgICovCgogICAgZnVuY3Rpb24gcmV2ZWFsU29sdXRpb24oc3RyaW5nIG1lbW9yeSBfc29sdXRpb24sIHN0cmluZyBtZW1vcnkgX3NlY3JldCkKICAgICAgICBwdWJsaWMKICAgICAgICBnYW1lQWN0aXZlCiAgICB7CiAgICAgICAgQ29tbWl0IHN0b3JhZ2UgY29tbWl0ID0gY29tbWl0c1ttc2cuc2VuZGVyXTsKICAgICAgICByZXF1aXJlKGNvbW1pdC5jb21taXRUaW1lICE9IDAsICJOb3QgY29tbWl0dGVkIHlldCIpOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIGNvbW1pdC5jb21taXRUaW1lIDwgYmxvY2sudGltZXN0YW1wLAogICAgICAgICAgICAiQ2Fubm90IHJldmVhbCBpbiB0aGUgc2FtZSBibG9jayIKICAgICAgICApOwogICAgICAgIHJlcXVpcmUoIWNvbW1pdC5yZXZlYWxlZCwgIkFscmVhZHkgY29tbWl0ZWQgYW5kIHJldmVhbGVkIik7CgogICAgICAgIGJ5dGVzMzIgc29sdXRpb25IYXNoID0KICAgICAgICAgICAga2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQobXNnLnNlbmRlciwgX3NvbHV0aW9uLCBfc2VjcmV0KSk7CiAgICAgICAgcmVxdWlyZShzb2x1dGlvbkhhc2ggPT0gY29tbWl0LnNvbHV0aW9uSGFzaCwgIkhhc2ggZG9lc24ndCBtYXRjaCIpOwoKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChfc29sdXRpb24pKSA9PSBoYXNoLCAiSW5jb3JyZWN0IGFuc3dlciIKICAgICAgICApOwoKICAgICAgICB3aW5uZXIgPSBtc2cuc2VuZGVyOwogICAgICAgIGVuZGVkID0gdHJ1ZTsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gcGF5YWJsZShtc2cuc2VuZGVyKS5jYWxse3ZhbHVlOiByZXdhcmR9KCIiKTsKICAgICAgICBpZiAoIXNlbnQpIHsKICAgICAgICAgICAgd2lubmVyID0gYWRkcmVzcygwKTsKICAgICAgICAgICAgZW5kZWQgPSBmYWxzZTsKICAgICAgICAgICAgcmV2ZXJ0KCJGYWlsZWQgdG8gc2VuZCBldGhlci4iKTsKICAgICAgICB9CiAgICB9Cn0K"}],Hk=`

                  Vulnerability

                  +`,Yk=({prev:s,next:a})=>i.jsx(u,{version:Wk,title:Gk,description:Bk,html:fk,prev:s,next:a,codes:Vk}),Rk="0.8.24",Xk="Front Running",vk="An example of a Solidity contract vulnerable to front running",Nk=[{fileName:"FrontRunning.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCkFsaWNlIGNyZWF0ZXMgYSBndWVzc2luZyBnYW1lLgpZb3Ugd2luIDEwIGV0aGVyIGlmIHlvdSBjYW4gZmluZCB0aGUgY29ycmVjdCBzdHJpbmcgdGhhdCBoYXNoZXMgdG8gdGhlIHRhcmdldApoYXNoLiBMZXQncyBzZWUgaG93IHRoaXMgY29udHJhY3QgaXMgdnVsbmVyYWJsZSB0byBmcm9udCBydW5uaW5nLgoqLwoKLyoKMS4gQWxpY2UgZGVwbG95cyBGaW5kVGhpc0hhc2ggd2l0aCAxMCBFdGhlci4KMi4gQm9iIGZpbmRzIHRoZSBjb3JyZWN0IHN0cmluZyB0aGF0IHdpbGwgaGFzaCB0byB0aGUgdGFyZ2V0IGhhc2guICgiRXRoZXJldW0iKQozLiBCb2IgY2FsbHMgc29sdmUoIkV0aGVyZXVtIikgd2l0aCBnYXMgcHJpY2Ugc2V0IHRvIDE1IGd3ZWkuCjQuIEV2ZSBpcyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbCBmb3IgdGhlIGFuc3dlciB0byBiZSBzdWJtaXR0ZWQuCjUuIEV2ZSBzZWVzIEJvYidzIGFuc3dlciBhbmQgY2FsbHMgc29sdmUoIkV0aGVyZXVtIikgd2l0aCBhIGhpZ2hlciBnYXMgcHJpY2UKICAgdGhhbiBCb2IgKDEwMCBnd2VpKS4KNi4gRXZlJ3MgdHJhbnNhY3Rpb24gd2FzIG1pbmVkIGJlZm9yZSBCb2IncyB0cmFuc2FjdGlvbi4KICAgRXZlIHdvbiB0aGUgcmV3YXJkIG9mIDEwIGV0aGVyLgoKV2hhdCBoYXBwZW5lZD8KVHJhbnNhY3Rpb25zIHRha2Ugc29tZSB0aW1lIGJlZm9yZSB0aGV5IGFyZSBtaW5lZC4KVHJhbnNhY3Rpb25zIG5vdCB5ZXQgbWluZWQgYXJlIHB1dCBpbiB0aGUgdHJhbnNhY3Rpb24gcG9vbC4KVHJhbnNhY3Rpb25zIHdpdGggaGlnaGVyIGdhcyBwcmljZSBhcmUgdHlwaWNhbGx5IG1pbmVkIGZpcnN0LgpBbiBhdHRhY2tlciBjYW4gZ2V0IHRoZSBhbnN3ZXIgZnJvbSB0aGUgdHJhbnNhY3Rpb24gcG9vbCwgc2VuZCBhIHRyYW5zYWN0aW9uCndpdGggYSBoaWdoZXIgZ2FzIHByaWNlIHNvIHRoYXQgdGhlaXIgdHJhbnNhY3Rpb24gd2lsbCBiZSBpbmNsdWRlZCBpbiBhIGJsb2NrCmJlZm9yZSB0aGUgb3JpZ2luYWwuCiovCgpjb250cmFjdCBGaW5kVGhpc0hhc2ggewogICAgYnl0ZXMzMiBwdWJsaWMgY29uc3RhbnQgaGFzaCA9CiAgICAgICAgMHg1NjRjY2FmNzU5NGQ2NmIxZWFhZWEyNGZlMDFmMDU4NWJmNTJlZTcwODUyYWY0ZWFjMGNjNGIwNDcxMWNkMGUyOwoKICAgIGNvbnN0cnVjdG9yKCkgcGF5YWJsZSB7fQoKICAgIGZ1bmN0aW9uIHNvbHZlKHN0cmluZyBtZW1vcnkgc29sdXRpb24pIHB1YmxpYyB7CiAgICAgICAgcmVxdWlyZSgKICAgICAgICAgICAgaGFzaCA9PSBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChzb2x1dGlvbikpLCAiSW5jb3JyZWN0IGFuc3dlciIKICAgICAgICApOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IDEwIGV0aGVyfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KfQo="},{fileName:"PreventFrontRunning.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCiAgIE5vdyBMZXQncyBzZWUgaG93IHRvIGd1YXJkIGZyb20gZnJvbnQgcnVubmluZyB1c2luZyBjb21taXQgcmV2ZWFsIHNjaGVtZS4KKi8KCi8qCjEuIEFsaWNlIGRlcGxveXMgU2VjdXJlZEZpbmRUaGlzSGFzaCB3aXRoIDEwIEV0aGVyLgoyLiBCb2IgZmluZHMgdGhlIGNvcnJlY3Qgc3RyaW5nIHRoYXQgd2lsbCBoYXNoIHRvIHRoZSB0YXJnZXQgaGFzaC4gKCJFdGhlcmV1bSIpLgozLiBCb2IgdGhlbiBmaW5kcyB0aGUga2VjY2FrMjU2KEFkZHJlc3MgaW4gbG93ZXJjYXNlICsgU29sdXRpb24gKyBTZWNyZXQpLiAKICAgQWRkcmVzcyBpcyBoaXMgd2FsbGV0IGFkZHJlc3MgaW4gbG93ZXJjYXNlLCBzb2x1dGlvbiBpcyAiRXRoZXJldW0iLCBTZWNyZXQgaXMgbGlrZSBhbiBwYXNzd29yZCAoIm15c2VjcmV0IikgCiAgIHRoYXQgb25seSBCb2Iga25vd3Mgd2hpYyBCb2IgdXNlcyB0byBjb21taXQgYW5kIHJldmVhbCB0aGUgc29sdXRpb24uCiAgIGtlY2NhazI1NjYoIjB4ZjM5RmQ2ZTUxYWFkODhGNkY0Y2U2YUI4ODI3Mjc5Y2ZmRmI5MjI2NkV0aGVyZXVtbXlzZWNyZXQiKSA9ICcweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYnCjMuIEJvYiB0aGVuIGNhbGxzIGNvbW1pdFNvbHV0aW9uKCIweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYiKSwgCiAgIHdoZXJlIGhlIGNvbW1pdHMgdGhlIGNhbGN1bGF0ZWQgc29sdXRpb24gaGFzaCB3aXRoIGdhcyBwcmljZSBzZXQgdG8gMTUgZ3dlaS4KNC4gRXZlIGlzIHdhdGNoaW5nIHRoZSB0cmFuc2FjdGlvbiBwb29sIGZvciB0aGUgYW5zd2VyIHRvIGJlIHN1Ym1pdHRlZC4KNS4gRXZlIHNlZXMgQm9iJ3MgYW5zd2VyIGFuZCBoZSBhbHNvIGNhbGxzIGNvbW1pdFNvbHV0aW9uKCIweGY5NWIxZGQ2MWVkYzNiZDk2MmNkZWEzOTg3YzZmNTViY2I3MTRhMDJhMmMzZWI3M2JkOTYwZDZiNDM4N2ZjMzYiKQogICB3aXRoIGEgaGlnaGVyIGdhcyBwcmljZSB0aGFuIEJvYiAoMTAwIGd3ZWkpLgo2LiBFdmUncyB0cmFuc2FjdGlvbiB3YXMgbWluZWQgYmVmb3JlIEJvYidzIHRyYW5zYWN0aW9uLCBidXQgRXZlIGhhcyBub3QgZ290IHRoZSByZXdhcmQgeWV0LgogICBIZSBuZWVkcyB0byBjYWxsIHJldmVhbFNvbHV0aW9uKCkgd2l0aCBleGFjdCBzZWNyZXQgYW5kIHNvbHV0aW9uLCBzbyBsZXRzIHNheSBoZSBpcyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbAogICB0byBmcm9udCBydW4gQm9iIGFzIGhlIGRpZCBwcmV2aW91c2x5CjcuIFRoZW4gQm9iIGNhbGxzIHRoZSByZXZlYWxTb2x1dGlvbigiRXRoZXJldW0iLCAibXlzZWNyZXQiKSB3aXRoIGdhcyBwcmljZSBzZXQgdG8gMTUgZ3dlaTsKOC4gTGV0J3MgY29uc2lkZXIgdGhhdCBFdmUncyB3aG8ncyB3YXRjaGluZyB0aGUgdHJhbnNhY3Rpb24gcG9vbCwgZmluZCdzIEJvYidzIHJldmVhbCBzb2x1dGlvbiB0cmFuc2FjdGlvbiBhbmQgaGUgYWxzbyBjYWxscyAKICAgcmV2ZWFsU29sdXRpb24oIkV0aGVyZXVtIiwgIm15c2VjcmV0Iikgd2l0aCBoaWdoZXIgZ2FzIHByaWNlIHRoYW4gQm9iICgxMDAgZ3dlaSkKOS4gTGV0J3MgY29uc2lkZXIgdGhhdCB0aGlzIHRpbWUgYWxzbyBFdmUncyByZXZlYWwgdHJhbnNhY3Rpb24gd2FzIG1pbmVkIGJlZm9yZSBCb2IncyB0cmFuc2FjdGlvbiwgYnV0IEV2ZSB3aWxsIGJlCiAgIHJldmVydGVkIHdpdGggIkhhc2ggZG9lc24ndCBtYXRjaCIgZXJyb3IuIFNpbmNlIHRoZSByZXZlYWxTb2x1dGlvbigpIGZ1bmN0aW9uIGNoZWNrcyB0aGUgaGFzaCB1c2luZyAKICAga2VjY2FrMjU2KG1zZy5zZW5kZXIgKyBzb2x1dGlvbiArIHNlY3JldCkuIFNvIHRoaXMgdGltZSBldmUgZmFpbHMgdG8gd2luIHRoZSByZXdhcmQuCjEwLkJ1dCBCb2IncyByZXZlYWxTb2x1dGlvbigiRXRoZXJldW0iLCAibXlzZWNyZXQiKSBwYXNzZXMgdGhlIGhhc2ggY2hlY2sgYW5kIGdldHMgdGhlIHJld2FyZCBvZiAxMCBldGhlci4KKi8KCmNvbnRyYWN0IFNlY3VyZWRGaW5kVGhpc0hhc2ggewogICAgLy8gU3RydWN0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbW1pdCBkZXRhaWxzCiAgICBzdHJ1Y3QgQ29tbWl0IHsKICAgICAgICBieXRlczMyIHNvbHV0aW9uSGFzaDsKICAgICAgICB1aW50MjU2IGNvbW1pdFRpbWU7CiAgICAgICAgYm9vbCByZXZlYWxlZDsKICAgIH0KCiAgICAvLyBUaGUgaGFzaCB0aGF0IGlzIG5lZWRlZCB0byBiZSBzb2x2ZWQKICAgIGJ5dGVzMzIgcHVibGljIGhhc2ggPQogICAgICAgIDB4NTY0Y2NhZjc1OTRkNjZiMWVhYWVhMjRmZTAxZjA1ODViZjUyZWU3MDg1MmFmNGVhYzBjYzRiMDQ3MTFjZDBlMjsKCiAgICAvLyBBZGRyZXNzIG9mIHRoZSB3aW5uZXIKICAgIGFkZHJlc3MgcHVibGljIHdpbm5lcjsKCiAgICAvLyBQcmljZSB0byBiZSByZXdhcmRlZAogICAgdWludDI1NiBwdWJsaWMgcmV3YXJkOwoKICAgIC8vIFN0YXR1cyBvZiBnYW1lCiAgICBib29sIHB1YmxpYyBlbmRlZDsKCiAgICAvLyBNYXBwaW5nIHRvIHN0b3JlIHRoZSBjb21taXQgZGV0YWlscyB3aXRoIGFkZHJlc3MKICAgIG1hcHBpbmcoYWRkcmVzcyA9PiBDb21taXQpIGNvbW1pdHM7CgogICAgLy8gTW9kaWZpZXIgdG8gY2hlY2sgaWYgdGhlIGdhbWUgaXMgYWN0aXZlCiAgICBtb2RpZmllciBnYW1lQWN0aXZlKCkgewogICAgICAgIHJlcXVpcmUoIWVuZGVkLCAiQWxyZWFkeSBlbmRlZCIpOwogICAgICAgIF87CiAgICB9CgogICAgY29uc3RydWN0b3IoKSBwYXlhYmxlIHsKICAgICAgICByZXdhcmQgPSBtc2cudmFsdWU7CiAgICB9CgogICAgLyogCiAgICAgICBDb21taXQgZnVuY3Rpb24gdG8gc3RvcmUgdGhlIGhhc2ggY2FsY3VsYXRlZCB1c2luZyBrZWNjYWsyNTYoYWRkcmVzcyBpbiBsb3dlcmNhc2UgKyBzb2x1dGlvbiArIHNlY3JldCkuIAogICAgICAgVXNlcnMgY2FuIG9ubHkgY29tbWl0IG9uY2UgYW5kIGlmIHRoZSBnYW1lIGlzIGFjdGl2ZS4KICAgICovCiAgICBmdW5jdGlvbiBjb21taXRTb2x1dGlvbihieXRlczMyIF9zb2x1dGlvbkhhc2gpIHB1YmxpYyBnYW1lQWN0aXZlIHsKICAgICAgICBDb21taXQgc3RvcmFnZSBjb21taXQgPSBjb21taXRzW21zZy5zZW5kZXJdOwogICAgICAgIHJlcXVpcmUoY29tbWl0LmNvbW1pdFRpbWUgPT0gMCwgIkFscmVhZHkgY29tbWl0dGVkIik7CiAgICAgICAgY29tbWl0LnNvbHV0aW9uSGFzaCA9IF9zb2x1dGlvbkhhc2g7CiAgICAgICAgY29tbWl0LmNvbW1pdFRpbWUgPSBibG9jay50aW1lc3RhbXA7CiAgICAgICAgY29tbWl0LnJldmVhbGVkID0gZmFsc2U7CiAgICB9CgogICAgLyogCiAgICAgICAgRnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21taXQgZGV0YWlscy4gSXQgcmV0dXJucyBhIHR1cGxlIG9mIChzb2x1dGlvbkhhc2gsIGNvbW1pdFRpbWUsIHJldmVhbFN0YXR1cyk7ICAKICAgICAgICBVc2VycyBjYW4gZ2V0IHNvbHV0aW9uIG9ubHkgaWYgdGhlIGdhbWUgaXMgYWN0aXZlIGFuZCB0aGV5IGhhdmUgY29tbWl0dGVkIGEgc29sdXRpb25IYXNoCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0TXlTb2x1dGlvbigpCiAgICAgICAgcHVibGljCiAgICAgICAgdmlldwogICAgICAgIGdhbWVBY3RpdmUKICAgICAgICByZXR1cm5zIChieXRlczMyLCB1aW50MjU2LCBib29sKQogICAgewogICAgICAgIENvbW1pdCBzdG9yYWdlIGNvbW1pdCA9IGNvbW1pdHNbbXNnLnNlbmRlcl07CiAgICAgICAgcmVxdWlyZShjb21taXQuY29tbWl0VGltZSAhPSAwLCAiTm90IGNvbW1pdHRlZCB5ZXQiKTsKICAgICAgICByZXR1cm4gKGNvbW1pdC5zb2x1dGlvbkhhc2gsIGNvbW1pdC5jb21taXRUaW1lLCBjb21taXQucmV2ZWFsZWQpOwogICAgfQogICAgLyogCiAgICAgICAgRnVuY3Rpb24gdG8gcmV2ZWFsIHRoZSBjb21taXQgYW5kIGdldCB0aGUgcmV3YXJkLiAKICAgICAgICBVc2VycyBjYW4gZ2V0IHJldmVhbCBzb2x1dGlvbiBvbmx5IGlmIHRoZSBnYW1lIGlzIGFjdGl2ZSBhbmQgdGhleSBoYXZlIGNvbW1pdHRlZCBhIHNvbHV0aW9uSGFzaCBiZWZvcmUgdGhpcyBibG9jayBhbmQgbm90IHJldmVhbGVkIHlldC4KICAgICAgICBJdCBnZW5lcmF0ZXMgYW4ga2VjY2FrMjU2KG1zZy5zZW5kZXIgKyBzb2x1dGlvbiArIHNlY3JldCkgYW5kIGNoZWNrcyBpdCB3aXRoIHRoZSBwcmV2aW91c2x5IGNvbW1pdGVkIGhhc2guICAKICAgICAgICBBc3N1bWluZyB0aGF0IGEgY29tbWl0IHdhcyBhbHJlYWR5IGluY2x1ZGVkIG9uIGNoYWluLCBmcm9udCBydW5uZXJzIHdpbGwgbm90IGJlIGFibGUgdG8gcGFzcyB0aGlzIGNoZWNrIHNpbmNlIHRoZSBtc2cuc2VuZGVyIGlzIGRpZmZlcmVudC4KICAgICAgICBUaGVuIHRoZSBhY3R1YWwgc29sdXRpb24gaXMgY2hlY2tlZCB1c2luZyBrZWNjYWsyNTYoc29sdXRpb24pLCBpZiB0aGUgc29sdXRpb24gbWF0Y2hlcywgdGhlIHdpbm5lciBpcyBkZWNsYXJlZCwgCiAgICAgICAgdGhlIGdhbWUgaXMgZW5kZWQgYW5kIHRoZSByZXdhcmQgYW1vdW50IGlzIHNlbnQgdG8gdGhlIHdpbm5lci4KICAgICovCgogICAgZnVuY3Rpb24gcmV2ZWFsU29sdXRpb24oc3RyaW5nIG1lbW9yeSBfc29sdXRpb24sIHN0cmluZyBtZW1vcnkgX3NlY3JldCkKICAgICAgICBwdWJsaWMKICAgICAgICBnYW1lQWN0aXZlCiAgICB7CiAgICAgICAgQ29tbWl0IHN0b3JhZ2UgY29tbWl0ID0gY29tbWl0c1ttc2cuc2VuZGVyXTsKICAgICAgICByZXF1aXJlKGNvbW1pdC5jb21taXRUaW1lICE9IDAsICJOb3QgY29tbWl0dGVkIHlldCIpOwogICAgICAgIHJlcXVpcmUoCiAgICAgICAgICAgIGNvbW1pdC5jb21taXRUaW1lIDwgYmxvY2sudGltZXN0YW1wLAogICAgICAgICAgICAiQ2Fubm90IHJldmVhbCBpbiB0aGUgc2FtZSBibG9jayIKICAgICAgICApOwogICAgICAgIHJlcXVpcmUoIWNvbW1pdC5yZXZlYWxlZCwgIkFscmVhZHkgY29tbWl0ZWQgYW5kIHJldmVhbGVkIik7CgogICAgICAgIGJ5dGVzMzIgc29sdXRpb25IYXNoID0KICAgICAgICAgICAga2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQobXNnLnNlbmRlciwgX3NvbHV0aW9uLCBfc2VjcmV0KSk7CiAgICAgICAgcmVxdWlyZShzb2x1dGlvbkhhc2ggPT0gY29tbWl0LnNvbHV0aW9uSGFzaCwgIkhhc2ggZG9lc24ndCBtYXRjaCIpOwoKICAgICAgICByZXF1aXJlKAogICAgICAgICAgICBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChfc29sdXRpb24pKSA9PSBoYXNoLCAiSW5jb3JyZWN0IGFuc3dlciIKICAgICAgICApOwoKICAgICAgICB3aW5uZXIgPSBtc2cuc2VuZGVyOwogICAgICAgIGVuZGVkID0gdHJ1ZTsKCiAgICAgICAgKGJvb2wgc2VudCwpID0gcGF5YWJsZShtc2cuc2VuZGVyKS5jYWxse3ZhbHVlOiByZXdhcmR9KCIiKTsKICAgICAgICBpZiAoIXNlbnQpIHsKICAgICAgICAgICAgd2lubmVyID0gYWRkcmVzcygwKTsKICAgICAgICAgICAgZW5kZWQgPSBmYWxzZTsKICAgICAgICAgICAgcmV2ZXJ0KCJGYWlsZWQgdG8gc2VuZCBldGhlci4iKTsKICAgICAgICB9CiAgICB9Cn0K"}],Hk=`

                  Vulnerability

                  Transactions take some time before they are mined. An attacker can watch the transaction pool and send a transaction, have it included in a block before the original transaction. This mechanism can be abused to re-order transactions to the attacker's advantage.

                  @@ -8206,7 +8368,7 @@ before the original. } } } -`,Fk=({prev:s,next:a})=>i.jsx(u,{version:Rk,title:vk,description:Xk,html:Hk,prev:s,next:a,codes:Nk}),Kk="0.8.24",Sk="Hiding Malicious Code with External Contract",Mk="An example of exploit where malicious code is hidden in an external contract in Solidity",xk=[{fileName:"ExternalContract.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCkxldCdzIHNheSBBbGljZSBjYW4gc2VlIHRoZSBjb2RlIG9mIEZvbyBhbmQgQmFyIGJ1dCBub3QgTWFsLgpJdCBpcyBvYnZpb3VzIHRvIEFsaWNlIHRoYXQgRm9vLmNhbGxCYXIoKSBleGVjdXRlcyB0aGUgY29kZSBpbnNpZGUgQmFyLmxvZygpLgpIb3dldmVyIEV2ZSBkZXBsb3lzIEZvbyB3aXRoIHRoZSBhZGRyZXNzIG9mIE1hbCwgc28gdGhhdCBjYWxsaW5nIEZvby5jYWxsQmFyKCkKd2lsbCBhY3R1YWxseSBleGVjdXRlIHRoZSBjb2RlIGF0IE1hbC4KKi8KCi8qCjEuIEV2ZSBkZXBsb3lzIE1hbAoyLiBFdmUgZGVwbG95cyBGb28gd2l0aCB0aGUgYWRkcmVzcyBvZiBNYWwKMy4gQWxpY2UgY2FsbHMgRm9vLmNhbGxCYXIoKSBhZnRlciByZWFkaW5nIHRoZSBjb2RlIGFuZCBqdWRnaW5nIHRoYXQgaXQgaXMKICAgc2FmZSB0byBjYWxsLgo0LiBBbHRob3VnaCBBbGljZSBleHBlY3RlZCBCYXIubG9nKCkgdG8gYmUgZXhlY3V0ZSwgTWFsLmxvZygpIHdhcyBleGVjdXRlZC4KKi8KCmNvbnRyYWN0IEZvbyB7CiAgICBCYXIgYmFyOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3MgX2JhcikgewogICAgICAgIGJhciA9IEJhcihfYmFyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsQmFyKCkgcHVibGljIHsKICAgICAgICBiYXIubG9nKCk7CiAgICB9Cn0KCmNvbnRyYWN0IEJhciB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIGZ1bmN0aW9uIGxvZygpIHB1YmxpYyB7CiAgICAgICAgZW1pdCBMb2coIkJhciB3YXMgY2FsbGVkIik7CiAgICB9Cn0KCi8vIFRoaXMgY29kZSBpcyBoaWRkZW4gaW4gYSBzZXBhcmF0ZSBmaWxlCmNvbnRyYWN0IE1hbCB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIC8vIGZ1bmN0aW9uICgpIGV4dGVybmFsIHsKICAgIC8vICAgICBlbWl0IExvZygiTWFsIHdhcyBjYWxsZWQiKTsKICAgIC8vIH0KCiAgICAvLyBBY3R1YWxseSB3ZSBjYW4gZXhlY3V0ZSB0aGUgc2FtZSBleHBsb2l0IGV2ZW4gaWYgdGhpcyBmdW5jdGlvbiBkb2VzCiAgICAvLyBub3QgZXhpc3QgYnkgdXNpbmcgdGhlIGZhbGxiYWNrCiAgICBmdW5jdGlvbiBsb2coKSBwdWJsaWMgewogICAgICAgIGVtaXQgTG9nKCJNYWwgd2FzIGNhbGxlZCIpOwogICAgfQp9Cg=="}],Jk=`

                  Vulnerability

                  +`,Fk=({prev:s,next:a})=>i.jsx(u,{version:Rk,title:Xk,description:vk,html:Hk,prev:s,next:a,codes:Nk}),Kk="0.8.24",Sk="Hiding Malicious Code with External Contract",Mk="An example of exploit where malicious code is hidden in an external contract in Solidity",xk=[{fileName:"ExternalContract.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qCkxldCdzIHNheSBBbGljZSBjYW4gc2VlIHRoZSBjb2RlIG9mIEZvbyBhbmQgQmFyIGJ1dCBub3QgTWFsLgpJdCBpcyBvYnZpb3VzIHRvIEFsaWNlIHRoYXQgRm9vLmNhbGxCYXIoKSBleGVjdXRlcyB0aGUgY29kZSBpbnNpZGUgQmFyLmxvZygpLgpIb3dldmVyIEV2ZSBkZXBsb3lzIEZvbyB3aXRoIHRoZSBhZGRyZXNzIG9mIE1hbCwgc28gdGhhdCBjYWxsaW5nIEZvby5jYWxsQmFyKCkKd2lsbCBhY3R1YWxseSBleGVjdXRlIHRoZSBjb2RlIGF0IE1hbC4KKi8KCi8qCjEuIEV2ZSBkZXBsb3lzIE1hbAoyLiBFdmUgZGVwbG95cyBGb28gd2l0aCB0aGUgYWRkcmVzcyBvZiBNYWwKMy4gQWxpY2UgY2FsbHMgRm9vLmNhbGxCYXIoKSBhZnRlciByZWFkaW5nIHRoZSBjb2RlIGFuZCBqdWRnaW5nIHRoYXQgaXQgaXMKICAgc2FmZSB0byBjYWxsLgo0LiBBbHRob3VnaCBBbGljZSBleHBlY3RlZCBCYXIubG9nKCkgdG8gYmUgZXhlY3V0ZSwgTWFsLmxvZygpIHdhcyBleGVjdXRlZC4KKi8KCmNvbnRyYWN0IEZvbyB7CiAgICBCYXIgYmFyOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3MgX2JhcikgewogICAgICAgIGJhciA9IEJhcihfYmFyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjYWxsQmFyKCkgcHVibGljIHsKICAgICAgICBiYXIubG9nKCk7CiAgICB9Cn0KCmNvbnRyYWN0IEJhciB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIGZ1bmN0aW9uIGxvZygpIHB1YmxpYyB7CiAgICAgICAgZW1pdCBMb2coIkJhciB3YXMgY2FsbGVkIik7CiAgICB9Cn0KCi8vIFRoaXMgY29kZSBpcyBoaWRkZW4gaW4gYSBzZXBhcmF0ZSBmaWxlCmNvbnRyYWN0IE1hbCB7CiAgICBldmVudCBMb2coc3RyaW5nIG1lc3NhZ2UpOwoKICAgIC8vIGZ1bmN0aW9uICgpIGV4dGVybmFsIHsKICAgIC8vICAgICBlbWl0IExvZygiTWFsIHdhcyBjYWxsZWQiKTsKICAgIC8vIH0KCiAgICAvLyBBY3R1YWxseSB3ZSBjYW4gZXhlY3V0ZSB0aGUgc2FtZSBleHBsb2l0IGV2ZW4gaWYgdGhpcyBmdW5jdGlvbiBkb2VzCiAgICAvLyBub3QgZXhpc3QgYnkgdXNpbmcgdGhlIGZhbGxiYWNrCiAgICBmdW5jdGlvbiBsb2coKSBwdWJsaWMgewogICAgICAgIGVtaXQgTG9nKCJNYWwgd2FzIGNhbGxlZCIpOwogICAgfQp9Cg=="}],Jk=`

                  Vulnerability

                  In Solidity any address can be casted into specific contract, even if the contract at the address is not the one being casted.

                  This can be exploited to hide malicious code. Let's see how.

                  @@ -8689,7 +8851,7 @@ Here is how the functions were called locked = false; } } -`,yZ=({prev:s,next:a})=>i.jsx(u,{version:dZ,title:IZ,description:CZ,html:uZ,prev:s,next:a,codes:jZ}),AZ="0.8.24",mZ="Self Destruct",bZ="An example of how to delete your smart contract by calling seldestruct in Solidity",wZ=[{fileName:"ForceEther.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIFRoZSBnb2FsIG9mIHRoaXMgZ2FtZSBpcyB0byBiZSB0aGUgN3RoIHBsYXllciB0byBkZXBvc2l0IDEgRXRoZXIuCi8vIFBsYXllcnMgY2FuIGRlcG9zaXQgb25seSAxIEV0aGVyIGF0IGEgdGltZS4KLy8gV2lubmVyIHdpbGwgYmUgYWJsZSB0byB3aXRoZHJhdyBhbGwgRXRoZXIuCgovKgoxLiBEZXBsb3kgRXRoZXJHYW1lCjIuIFBsYXllcnMgKHNheSBBbGljZSBhbmQgQm9iKSBkZWNpZGVzIHRvIHBsYXksIGRlcG9zaXRzIDEgRXRoZXIgZWFjaC4KMi4gRGVwbG95IEF0dGFjayB3aXRoIGFkZHJlc3Mgb2YgRXRoZXJHYW1lCjMuIENhbGwgQXR0YWNrLmF0dGFjayBzZW5kaW5nIDUgZXRoZXIuIFRoaXMgd2lsbCBicmVhayB0aGUgZ2FtZQogICBObyBvbmUgY2FuIGJlY29tZSB0aGUgd2lubmVyLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGZvcmNlZCB0aGUgYmFsYW5jZSBvZiBFdGhlckdhbWUgdG8gZXF1YWwgNyBldGhlci4KTm93IG5vIG9uZSBjYW4gZGVwb3NpdCBhbmQgdGhlIHdpbm5lciBjYW5ub3QgYmUgc2V0LgoqLwoKY29udHJhY3QgRXRoZXJHYW1lIHsKICAgIHVpbnQyNTYgcHVibGljIHRhcmdldEFtb3VudCA9IDcgZXRoZXI7CiAgICBhZGRyZXNzIHB1YmxpYyB3aW5uZXI7CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICByZXF1aXJlKG1zZy52YWx1ZSA9PSAxIGV0aGVyLCAiWW91IGNhbiBvbmx5IHNlbmQgMSBFdGhlciIpOwoKICAgICAgICB1aW50MjU2IGJhbGFuY2UgPSBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICAgICAgcmVxdWlyZShiYWxhbmNlIDw9IHRhcmdldEFtb3VudCwgIkdhbWUgaXMgb3ZlciIpOwoKICAgICAgICBpZiAoYmFsYW5jZSA9PSB0YXJnZXRBbW91bnQpIHsKICAgICAgICAgICAgd2lubmVyID0gbXNnLnNlbmRlcjsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY2xhaW1SZXdhcmQoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSB3aW5uZXIsICJOb3Qgd2lubmVyIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogYWRkcmVzcyh0aGlzKS5iYWxhbmNlfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KfQoKY29udHJhY3QgQXR0YWNrIHsKICAgIEV0aGVyR2FtZSBldGhlckdhbWU7CgogICAgY29uc3RydWN0b3IoRXRoZXJHYW1lIF9ldGhlckdhbWUpIHsKICAgICAgICBldGhlckdhbWUgPSBFdGhlckdhbWUoX2V0aGVyR2FtZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHBheWFibGUgewogICAgICAgIC8vIFlvdSBjYW4gc2ltcGx5IGJyZWFrIHRoZSBnYW1lIGJ5IHNlbmRpbmcgZXRoZXIgc28gdGhhdAogICAgICAgIC8vIHRoZSBnYW1lIGJhbGFuY2UgPj0gNyBldGhlcgoKICAgICAgICAvLyBjYXN0IGFkZHJlc3MgdG8gcGF5YWJsZQogICAgICAgIGFkZHJlc3MgcGF5YWJsZSBhZGRyID0gcGF5YWJsZShhZGRyZXNzKGV0aGVyR2FtZSkpOwogICAgICAgIHNlbGZkZXN0cnVjdChhZGRyKTsKICAgIH0KfQo="},{fileName:"PreventForceEther.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEV0aGVyR2FtZSB7CiAgICB1aW50MjU2IHB1YmxpYyB0YXJnZXRBbW91bnQgPSAzIGV0aGVyOwogICAgdWludDI1NiBwdWJsaWMgYmFsYW5jZTsKICAgIGFkZHJlc3MgcHVibGljIHdpbm5lcjsKCiAgICBmdW5jdGlvbiBkZXBvc2l0KCkgcHVibGljIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID09IDEgZXRoZXIsICJZb3UgY2FuIG9ubHkgc2VuZCAxIEV0aGVyIik7CgogICAgICAgIGJhbGFuY2UgKz0gbXNnLnZhbHVlOwogICAgICAgIHJlcXVpcmUoYmFsYW5jZSA8PSB0YXJnZXRBbW91bnQsICJHYW1lIGlzIG92ZXIiKTsKCiAgICAgICAgaWYgKGJhbGFuY2UgPT0gdGFyZ2V0QW1vdW50KSB7CiAgICAgICAgICAgIHdpbm5lciA9IG1zZy5zZW5kZXI7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsYWltUmV3YXJkKCkgcHVibGljIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gd2lubmVyLCAiTm90IHdpbm5lciIpOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IGJhbGFuY2V9KCIiKTsKICAgICAgICByZXF1aXJlKHNlbnQsICJGYWlsZWQgdG8gc2VuZCBFdGhlciIpOwogICAgfQp9Cg=="}],kZ=`

                  Contracts can be deleted from the blockchain by calling selfdestruct.

                  +`,AZ=({prev:s,next:a})=>i.jsx(u,{version:dZ,title:IZ,description:CZ,html:uZ,prev:s,next:a,codes:jZ}),yZ="0.8.24",mZ="Self Destruct",bZ="An example of how to delete your smart contract by calling seldestruct in Solidity",wZ=[{fileName:"ForceEther.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIFRoZSBnb2FsIG9mIHRoaXMgZ2FtZSBpcyB0byBiZSB0aGUgN3RoIHBsYXllciB0byBkZXBvc2l0IDEgRXRoZXIuCi8vIFBsYXllcnMgY2FuIGRlcG9zaXQgb25seSAxIEV0aGVyIGF0IGEgdGltZS4KLy8gV2lubmVyIHdpbGwgYmUgYWJsZSB0byB3aXRoZHJhdyBhbGwgRXRoZXIuCgovKgoxLiBEZXBsb3kgRXRoZXJHYW1lCjIuIFBsYXllcnMgKHNheSBBbGljZSBhbmQgQm9iKSBkZWNpZGVzIHRvIHBsYXksIGRlcG9zaXRzIDEgRXRoZXIgZWFjaC4KMi4gRGVwbG95IEF0dGFjayB3aXRoIGFkZHJlc3Mgb2YgRXRoZXJHYW1lCjMuIENhbGwgQXR0YWNrLmF0dGFjayBzZW5kaW5nIDUgZXRoZXIuIFRoaXMgd2lsbCBicmVhayB0aGUgZ2FtZQogICBObyBvbmUgY2FuIGJlY29tZSB0aGUgd2lubmVyLgoKV2hhdCBoYXBwZW5lZD8KQXR0YWNrIGZvcmNlZCB0aGUgYmFsYW5jZSBvZiBFdGhlckdhbWUgdG8gZXF1YWwgNyBldGhlci4KTm93IG5vIG9uZSBjYW4gZGVwb3NpdCBhbmQgdGhlIHdpbm5lciBjYW5ub3QgYmUgc2V0LgoqLwoKY29udHJhY3QgRXRoZXJHYW1lIHsKICAgIHVpbnQyNTYgcHVibGljIHRhcmdldEFtb3VudCA9IDcgZXRoZXI7CiAgICBhZGRyZXNzIHB1YmxpYyB3aW5uZXI7CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICByZXF1aXJlKG1zZy52YWx1ZSA9PSAxIGV0aGVyLCAiWW91IGNhbiBvbmx5IHNlbmQgMSBFdGhlciIpOwoKICAgICAgICB1aW50MjU2IGJhbGFuY2UgPSBhZGRyZXNzKHRoaXMpLmJhbGFuY2U7CiAgICAgICAgcmVxdWlyZShiYWxhbmNlIDw9IHRhcmdldEFtb3VudCwgIkdhbWUgaXMgb3ZlciIpOwoKICAgICAgICBpZiAoYmFsYW5jZSA9PSB0YXJnZXRBbW91bnQpIHsKICAgICAgICAgICAgd2lubmVyID0gbXNnLnNlbmRlcjsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY2xhaW1SZXdhcmQoKSBwdWJsaWMgewogICAgICAgIHJlcXVpcmUobXNnLnNlbmRlciA9PSB3aW5uZXIsICJOb3Qgd2lubmVyIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IG1zZy5zZW5kZXIuY2FsbHt2YWx1ZTogYWRkcmVzcyh0aGlzKS5iYWxhbmNlfSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KfQoKY29udHJhY3QgQXR0YWNrIHsKICAgIEV0aGVyR2FtZSBldGhlckdhbWU7CgogICAgY29uc3RydWN0b3IoRXRoZXJHYW1lIF9ldGhlckdhbWUpIHsKICAgICAgICBldGhlckdhbWUgPSBFdGhlckdhbWUoX2V0aGVyR2FtZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNrKCkgcHVibGljIHBheWFibGUgewogICAgICAgIC8vIFlvdSBjYW4gc2ltcGx5IGJyZWFrIHRoZSBnYW1lIGJ5IHNlbmRpbmcgZXRoZXIgc28gdGhhdAogICAgICAgIC8vIHRoZSBnYW1lIGJhbGFuY2UgPj0gNyBldGhlcgoKICAgICAgICAvLyBjYXN0IGFkZHJlc3MgdG8gcGF5YWJsZQogICAgICAgIGFkZHJlc3MgcGF5YWJsZSBhZGRyID0gcGF5YWJsZShhZGRyZXNzKGV0aGVyR2FtZSkpOwogICAgICAgIHNlbGZkZXN0cnVjdChhZGRyKTsKICAgIH0KfQo="},{fileName:"PreventForceEther.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEV0aGVyR2FtZSB7CiAgICB1aW50MjU2IHB1YmxpYyB0YXJnZXRBbW91bnQgPSAzIGV0aGVyOwogICAgdWludDI1NiBwdWJsaWMgYmFsYW5jZTsKICAgIGFkZHJlc3MgcHVibGljIHdpbm5lcjsKCiAgICBmdW5jdGlvbiBkZXBvc2l0KCkgcHVibGljIHBheWFibGUgewogICAgICAgIHJlcXVpcmUobXNnLnZhbHVlID09IDEgZXRoZXIsICJZb3UgY2FuIG9ubHkgc2VuZCAxIEV0aGVyIik7CgogICAgICAgIGJhbGFuY2UgKz0gbXNnLnZhbHVlOwogICAgICAgIHJlcXVpcmUoYmFsYW5jZSA8PSB0YXJnZXRBbW91bnQsICJHYW1lIGlzIG92ZXIiKTsKCiAgICAgICAgaWYgKGJhbGFuY2UgPT0gdGFyZ2V0QW1vdW50KSB7CiAgICAgICAgICAgIHdpbm5lciA9IG1zZy5zZW5kZXI7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsYWltUmV3YXJkKCkgcHVibGljIHsKICAgICAgICByZXF1aXJlKG1zZy5zZW5kZXIgPT0gd2lubmVyLCAiTm90IHdpbm5lciIpOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBtc2cuc2VuZGVyLmNhbGx7dmFsdWU6IGJhbGFuY2V9KCIiKTsKICAgICAgICByZXF1aXJlKHNlbnQsICJGYWlsZWQgdG8gc2VuZCBFdGhlciIpOwogICAgfQp9Cg=="}],kZ=`

                  Contracts can be deleted from the blockchain by calling selfdestruct.

                  selfdestruct sends all remaining Ether stored in the contract to a designated address.

                  Vulnerability

                  @@ -8781,7 +8943,7 @@ Now no one can deposit and the winner cannot be set. require(sent, "Failed to send Ether"); } } -`,ZZ=({prev:s,next:a})=>i.jsx(u,{version:AZ,title:mZ,description:bZ,html:kZ,prev:s,next:a,codes:wZ}),WZ="0.8.24",GZ="Signature Replay",BZ="An example of a contract vulnerable to signature replay attack",fZ=[{fileName:"ECDSA.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIE9wZW5aZXBwZWxpbiBDb250cmFjdHMgKGxhc3QgdXBkYXRlZCB2NC41LjApICh1dGlscy9jcnlwdG9ncmFwaHkvRUNEU0Euc29sKQoKbGlicmFyeSBFQ0RTQSB7CiAgICBlbnVtIFJlY292ZXJFcnJvciB7CiAgICAgICAgTm9FcnJvciwKICAgICAgICBJbnZhbGlkU2lnbmF0dXJlLAogICAgICAgIEludmFsaWRTaWduYXR1cmVMZW5ndGgsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVMsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVYKICAgIH0KCiAgICBmdW5jdGlvbiBfdGhyb3dFcnJvcihSZWNvdmVyRXJyb3IgZXJyb3IpIHByaXZhdGUgcHVyZSB7CiAgICAgICAgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5Ob0Vycm9yKSB7CiAgICAgICAgICAgIHJldHVybjsgLy8gbm8gZXJyb3I6IGRvIG5vdGhpbmcKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKSB7CiAgICAgICAgICAgIHJldmVydCgiRUNEU0E6IGludmFsaWQgc2lnbmF0dXJlIik7CiAgICAgICAgfSBlbHNlIGlmIChlcnJvciA9PSBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZUxlbmd0aCkgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlUykgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAncycgdmFsdWUiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlVikgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAndicgdmFsdWUiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdHJ5UmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzIG1lbW9yeSBzaWduYXR1cmUpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoYWRkcmVzcywgUmVjb3ZlckVycm9yKQogICAgewogICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbGVuZ3RoCiAgICAgICAgLy8gLSBjYXNlIDY1OiByLHMsdiBzaWduYXR1cmUgKHN0YW5kYXJkKQogICAgICAgIC8vIC0gY2FzZSA2NDogcix2cyBzaWduYXR1cmUgKGNmIGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMjA5OCkgX0F2YWlsYWJsZSBzaW5jZSB2NC4xLl8KICAgICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCA9PSA2NSkgewogICAgICAgICAgICBieXRlczMyIHI7CiAgICAgICAgICAgIGJ5dGVzMzIgczsKICAgICAgICAgICAgdWludDggdjsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgcyA6PSBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDQwKSkKICAgICAgICAgICAgICAgIHYgOj0gYnl0ZSgwLCBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDYwKSkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICAgICAgfSBlbHNlIGlmIChzaWduYXR1cmUubGVuZ3RoID09IDY0KSB7CiAgICAgICAgICAgIGJ5dGVzMzIgcjsKICAgICAgICAgICAgYnl0ZXMzMiB2czsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgdnMgOj0gbWxvYWQoYWRkKHNpZ25hdHVyZSwgMHg0MCkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVMZW5ndGgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiByZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMgbWVtb3J5IHNpZ25hdHVyZSkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgc2lnbmF0dXJlKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0cnlSZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMzMiByLCBieXRlczMyIHZzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MsIFJlY292ZXJFcnJvcikKICAgIHsKICAgICAgICBieXRlczMyIHMgPSB2cwogICAgICAgICAgICAmIGJ5dGVzMzIoCiAgICAgICAgICAgICAgICAweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgICAgICAgICAgKTsKICAgICAgICB1aW50OCB2ID0gdWludDgoKHVpbnQyNTYodnMpID4+IDI1NSkgKyAyNyk7CiAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzMzIgciwgYnl0ZXMzMiB2cykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIF90aHJvd0Vycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gcmVjb3ZlcmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyeVJlY292ZXIoYnl0ZXMzMiBoYXNoLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzLCBSZWNvdmVyRXJyb3IpCiAgICB7CiAgICAgICAgLy8gRUlQLTIgc3RpbGwgYWxsb3dzIHNpZ25hdHVyZSBtYWxsZWFiaWxpdHkgZm9yIGVjcmVjb3ZlcigpLiBSZW1vdmUgdGhpcyBwb3NzaWJpbGl0eSBhbmQgbWFrZSB0aGUgc2lnbmF0dXJlCiAgICAgICAgLy8gdW5pcXVlLiBBcHBlbmRpeCBGIGluIHRoZSBFdGhlcmV1bSBZZWxsb3cgcGFwZXIgKGh0dHBzOi8vZXRoZXJldW0uZ2l0aHViLmlvL3llbGxvd3BhcGVyL3BhcGVyLnBkZiksIGRlZmluZXMKICAgICAgICAvLyB0aGUgdmFsaWQgcmFuZ2UgZm9yIHMgaW4gKDMwMSk6IDAgPCBzIDwgc2VjcDI1NmsxbiDDtyAyICsgMSwgYW5kIGZvciB2IGluICgzMDIpOiB2IOKIiCB7MjcsIDI4fS4gTW9zdAogICAgICAgIC8vIHNpZ25hdHVyZXMgZnJvbSBjdXJyZW50IGxpYnJhcmllcyBnZW5lcmF0ZSBhIHVuaXF1ZSBzaWduYXR1cmUgd2l0aCBhbiBzLXZhbHVlIGluIHRoZSBsb3dlciBoYWxmIG9yZGVyLgogICAgICAgIC8vCiAgICAgICAgLy8gSWYgeW91ciBsaWJyYXJ5IGdlbmVyYXRlcyBtYWxsZWFibGUgc2lnbmF0dXJlcywgc3VjaCBhcyBzLXZhbHVlcyBpbiB0aGUgdXBwZXIgcmFuZ2UsIGNhbGN1bGF0ZSBhIG5ldyBzLXZhbHVlCiAgICAgICAgLy8gd2l0aCAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDEgLSBzMSBhbmQgZmxpcCB2IGZyb20gMjcgdG8gMjggb3IKICAgICAgICAvLyB2aWNlIHZlcnNhLiBJZiB5b3VyIGxpYnJhcnkgYWxzbyBnZW5lcmF0ZXMgc2lnbmF0dXJlcyB3aXRoIDAvMSBmb3IgdiBpbnN0ZWFkIDI3LzI4LCBhZGQgMjcgdG8gdiB0byBhY2NlcHQKICAgICAgICAvLyB0aGVzZSBtYWxsZWFibGUgc2lnbmF0dXJlcyBhcyB3ZWxsLgogICAgICAgIGlmICgKICAgICAgICAgICAgdWludDI1NihzKQogICAgICAgICAgICAgICAgPiAweDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUQ1NzZFNzM1N0E0NTAxRERGRTkyRjQ2NjgxQjIwQTAKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIChhZGRyZXNzKDApLCBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZVMpOwogICAgICAgIH0KICAgICAgICBpZiAodiAhPSAyNyAmJiB2ICE9IDI4KSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVWKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgKGFuZCBub3QgbWFsbGVhYmxlKSwgcmV0dXJuIHRoZSBzaWduZXIgYWRkcmVzcwogICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZWNyZWNvdmVyKGhhc2gsIHYsIHIsIHMpOwogICAgICAgIGlmIChzaWduZXIgPT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICByZXR1cm4gKGFkZHJlc3MoMCksIFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc2lnbmVyLCBSZWNvdmVyRXJyb3IuTm9FcnJvcik7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MpCiAgICB7CiAgICAgICAgKGFkZHJlc3MgcmVjb3ZlcmVkLCBSZWNvdmVyRXJyb3IgZXJyb3IpID0gdHJ5UmVjb3ZlcihoYXNoLCB2LCByLCBzKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKGJ5dGVzMzIgaGFzaCkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIC8vIDMyIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgaGFzaCwKICAgICAgICAvLyBlbmZvcmNlZCBieSB0aGUgdHlwZSBzaWduYXR1cmUgYWJvdmUKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KAogICAgICAgICAgICBhYmkuZW5jb2RlUGFja2VkKCJceDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XG4zMiIsIGhhc2gpCiAgICAgICAgKTsKICAgIH0KfQo="},{fileName:"PreventSigReplay.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgTXVsdGlTaWdXYWxsZXQgewogICAgdXNpbmcgRUNEU0EgZm9yIGJ5dGVzMzI7CgogICAgYWRkcmVzc1syXSBwdWJsaWMgb3duZXJzOwogICAgbWFwcGluZyhieXRlczMyID0+IGJvb2wpIHB1YmxpYyBleGVjdXRlZDsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzWzJdIG1lbW9yeSBfb3duZXJzKSBwYXlhYmxlIHsKICAgICAgICBvd25lcnMgPSBfb3duZXJzOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBleHRlcm5hbCBwYXlhYmxlIHt9CgogICAgZnVuY3Rpb24gdHJhbnNmZXIoCiAgICAgICAgYWRkcmVzcyBfdG8sCiAgICAgICAgdWludDI1NiBfYW1vdW50LAogICAgICAgIHVpbnQyNTYgX25vbmNlLAogICAgICAgIGJ5dGVzWzJdIG1lbW9yeSBfc2lncwogICAgKSBleHRlcm5hbCB7CiAgICAgICAgYnl0ZXMzMiB0eEhhc2ggPSBnZXRUeEhhc2goX3RvLCBfYW1vdW50LCBfbm9uY2UpOwogICAgICAgIHJlcXVpcmUoIWV4ZWN1dGVkW3R4SGFzaF0sICJ0eCBleGVjdXRlZCIpOwogICAgICAgIHJlcXVpcmUoX2NoZWNrU2lncyhfc2lncywgdHhIYXNoKSwgImludmFsaWQgc2lnIik7CgogICAgICAgIGV4ZWN1dGVkW3R4SGFzaF0gPSB0cnVlOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBfdG8uY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VHhIYXNoKGFkZHJlc3MgX3RvLCB1aW50MjU2IF9hbW91bnQsIHVpbnQyNTYgX25vbmNlKQogICAgICAgIHB1YmxpYwogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIHJldHVybiBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChhZGRyZXNzKHRoaXMpLCBfdG8sIF9hbW91bnQsIF9ub25jZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9jaGVja1NpZ3MoYnl0ZXNbMl0gbWVtb3J5IF9zaWdzLCBieXRlczMyIF90eEhhc2gpCiAgICAgICAgcHJpdmF0ZQogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIGJ5dGVzMzIgZXRoU2lnbmVkSGFzaCA9IF90eEhhc2gudG9FdGhTaWduZWRNZXNzYWdlSGFzaCgpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCBfc2lncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBhZGRyZXNzIHNpZ25lciA9IGV0aFNpZ25lZEhhc2gucmVjb3Zlcihfc2lnc1tpXSk7CiAgICAgICAgICAgIGJvb2wgdmFsaWQgPSBzaWduZXIgPT0gb3duZXJzW2ldOwoKICAgICAgICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQoKLyoKLy8gb3duZXJzCjB4ZTE5YWVhOTNGNkMxZEJlZjZBMzc3Njg0OGJFMDk5QTdjMzI1M2FjOAoweGZhODU0RkU1MzM5ODQzYjNlOUJmZDg1NTRCMzhCRDA0MkE0MmUzNDAKCi8vIHRvCjB4ZTEwNDIyY2M2MTAzMEM4QjNkQkNEMzZjN2U3ZThFQzNCNTI3RTBBYwovLyBhbW91bnQKMTAwCi8vIG5vbmNlCjAKLy8gdHggaGFzaAoweDEyYTA5NTQ2MmViZmNhMjdkYzRkOTlmZWVmODg1YmZlNTgzNDRmYjZiYjQyYzNjNTJhN2MwZDY4MzZkMTE0NDgKCi8vIHNpZ25hdHVyZXMKMHgxMjBmOGVkOGYyZmE1NTQ5OGYyZWYwYTIyZjI2ZTM5YjliNTFlZDI5Y2M5M2ZlMGVmM2VkMTc1NmY1OGZhZDBjNmViNWExZDZmMzY3MWY4ZDUxNjM2MzlmZGM0MGJiODcyMGRlNmQ4ZjI1MjMwNzdhZDZkMTEzOGE2MDkyM2I4MDFjCjB4YTI0MGE0ODdkZTFlYjViYjk3MWU5MjBjYjA2NzdhNDdkZGM2NDIxZTM4ZjdiMDQ4ZjhhYTg4MjY2YjJjODg0YTEwNDU1YTUyZGM3NmEyMDNhMWE5YTk1MzQxODQ2OWY5ZWVjMmM1OWU4NzIwMWJiYzhkYjBlNGQ5Nzk2OTM1Y2IxYgoqLwo="},{fileName:"SigReplay.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgTXVsdGlTaWdXYWxsZXQgewogICAgdXNpbmcgRUNEU0EgZm9yIGJ5dGVzMzI7CgogICAgYWRkcmVzc1syXSBwdWJsaWMgb3duZXJzOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3NbMl0gbWVtb3J5IF9vd25lcnMpIHBheWFibGUgewogICAgICAgIG93bmVycyA9IF9vd25lcnM7CiAgICB9CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGUge30KCiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIF90bywgdWludDI1NiBfYW1vdW50LCBieXRlc1syXSBtZW1vcnkgX3NpZ3MpCiAgICAgICAgZXh0ZXJuYWwKICAgIHsKICAgICAgICBieXRlczMyIHR4SGFzaCA9IGdldFR4SGFzaChfdG8sIF9hbW91bnQpOwogICAgICAgIHJlcXVpcmUoX2NoZWNrU2lncyhfc2lncywgdHhIYXNoKSwgImludmFsaWQgc2lnIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IF90by5jYWxse3ZhbHVlOiBfYW1vdW50fSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRUeEhhc2goYWRkcmVzcyBfdG8sIHVpbnQyNTYgX2Ftb3VudCkKICAgICAgICBwdWJsaWMKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYnl0ZXMzMikKICAgIHsKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQoX3RvLCBfYW1vdW50KSk7CiAgICB9CgogICAgZnVuY3Rpb24gX2NoZWNrU2lncyhieXRlc1syXSBtZW1vcnkgX3NpZ3MsIGJ5dGVzMzIgX3R4SGFzaCkKICAgICAgICBwcml2YXRlCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKGJvb2wpCiAgICB7CiAgICAgICAgYnl0ZXMzMiBldGhTaWduZWRIYXNoID0gX3R4SGFzaC50b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKCk7CgogICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IF9zaWdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZXRoU2lnbmVkSGFzaC5yZWNvdmVyKF9zaWdzW2ldKTsKICAgICAgICAgICAgYm9vbCB2YWxpZCA9IHNpZ25lciA9PSBvd25lcnNbaV07CgogICAgICAgICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg=="}],VZ=`

                  Signing messages off-chain and having a contract that requires that signature before executing +`,ZZ=({prev:s,next:a})=>i.jsx(u,{version:yZ,title:mZ,description:bZ,html:kZ,prev:s,next:a,codes:wZ}),WZ="0.8.24",GZ="Signature Replay",BZ="An example of a contract vulnerable to signature replay attack",VZ=[{fileName:"ECDSA.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8vIE9wZW5aZXBwZWxpbiBDb250cmFjdHMgKGxhc3QgdXBkYXRlZCB2NC41LjApICh1dGlscy9jcnlwdG9ncmFwaHkvRUNEU0Euc29sKQoKbGlicmFyeSBFQ0RTQSB7CiAgICBlbnVtIFJlY292ZXJFcnJvciB7CiAgICAgICAgTm9FcnJvciwKICAgICAgICBJbnZhbGlkU2lnbmF0dXJlLAogICAgICAgIEludmFsaWRTaWduYXR1cmVMZW5ndGgsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVMsCiAgICAgICAgSW52YWxpZFNpZ25hdHVyZVYKICAgIH0KCiAgICBmdW5jdGlvbiBfdGhyb3dFcnJvcihSZWNvdmVyRXJyb3IgZXJyb3IpIHByaXZhdGUgcHVyZSB7CiAgICAgICAgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5Ob0Vycm9yKSB7CiAgICAgICAgICAgIHJldHVybjsgLy8gbm8gZXJyb3I6IGRvIG5vdGhpbmcKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKSB7CiAgICAgICAgICAgIHJldmVydCgiRUNEU0E6IGludmFsaWQgc2lnbmF0dXJlIik7CiAgICAgICAgfSBlbHNlIGlmIChlcnJvciA9PSBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZUxlbmd0aCkgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlUykgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAncycgdmFsdWUiKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yID09IFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlVikgewogICAgICAgICAgICByZXZlcnQoIkVDRFNBOiBpbnZhbGlkIHNpZ25hdHVyZSAndicgdmFsdWUiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdHJ5UmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzIG1lbW9yeSBzaWduYXR1cmUpCiAgICAgICAgaW50ZXJuYWwKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoYWRkcmVzcywgUmVjb3ZlckVycm9yKQogICAgewogICAgICAgIC8vIENoZWNrIHRoZSBzaWduYXR1cmUgbGVuZ3RoCiAgICAgICAgLy8gLSBjYXNlIDY1OiByLHMsdiBzaWduYXR1cmUgKHN0YW5kYXJkKQogICAgICAgIC8vIC0gY2FzZSA2NDogcix2cyBzaWduYXR1cmUgKGNmIGh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtMjA5OCkgX0F2YWlsYWJsZSBzaW5jZSB2NC4xLl8KICAgICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCA9PSA2NSkgewogICAgICAgICAgICBieXRlczMyIHI7CiAgICAgICAgICAgIGJ5dGVzMzIgczsKICAgICAgICAgICAgdWludDggdjsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgcyA6PSBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDQwKSkKICAgICAgICAgICAgICAgIHYgOj0gYnl0ZSgwLCBtbG9hZChhZGQoc2lnbmF0dXJlLCAweDYwKSkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICAgICAgfSBlbHNlIGlmIChzaWduYXR1cmUubGVuZ3RoID09IDY0KSB7CiAgICAgICAgICAgIGJ5dGVzMzIgcjsKICAgICAgICAgICAgYnl0ZXMzMiB2czsKICAgICAgICAgICAgLy8gZWNyZWNvdmVyIHRha2VzIHRoZSBzaWduYXR1cmUgcGFyYW1ldGVycywgYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlbQogICAgICAgICAgICAvLyBjdXJyZW50bHkgaXMgdG8gdXNlIGFzc2VtYmx5LgogICAgICAgICAgICBhc3NlbWJseSB7CiAgICAgICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWduYXR1cmUsIDB4MjApKQogICAgICAgICAgICAgICAgdnMgOj0gbWxvYWQoYWRkKHNpZ25hdHVyZSwgMHg0MCkpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVMZW5ndGgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiByZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMgbWVtb3J5IHNpZ25hdHVyZSkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgc2lnbmF0dXJlKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0cnlSZWNvdmVyKGJ5dGVzMzIgaGFzaCwgYnl0ZXMzMiByLCBieXRlczMyIHZzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MsIFJlY292ZXJFcnJvcikKICAgIHsKICAgICAgICBieXRlczMyIHMgPSB2cwogICAgICAgICAgICAmIGJ5dGVzMzIoCiAgICAgICAgICAgICAgICAweDdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgICAgICAgICAgKTsKICAgICAgICB1aW50OCB2ID0gdWludDgoKHVpbnQyNTYodnMpID4+IDI1NSkgKyAyNyk7CiAgICAgICAgcmV0dXJuIHRyeVJlY292ZXIoaGFzaCwgdiwgciwgcyk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIGJ5dGVzMzIgciwgYnl0ZXMzMiB2cykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzKQogICAgewogICAgICAgIChhZGRyZXNzIHJlY292ZXJlZCwgUmVjb3ZlckVycm9yIGVycm9yKSA9IHRyeVJlY292ZXIoaGFzaCwgciwgdnMpOwogICAgICAgIF90aHJvd0Vycm9yKGVycm9yKTsKICAgICAgICByZXR1cm4gcmVjb3ZlcmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyeVJlY292ZXIoYnl0ZXMzMiBoYXNoLCB1aW50OCB2LCBieXRlczMyIHIsIGJ5dGVzMzIgcykKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChhZGRyZXNzLCBSZWNvdmVyRXJyb3IpCiAgICB7CiAgICAgICAgLy8gRUlQLTIgc3RpbGwgYWxsb3dzIHNpZ25hdHVyZSBtYWxsZWFiaWxpdHkgZm9yIGVjcmVjb3ZlcigpLiBSZW1vdmUgdGhpcyBwb3NzaWJpbGl0eSBhbmQgbWFrZSB0aGUgc2lnbmF0dXJlCiAgICAgICAgLy8gdW5pcXVlLiBBcHBlbmRpeCBGIGluIHRoZSBFdGhlcmV1bSBZZWxsb3cgcGFwZXIgKGh0dHBzOi8vZXRoZXJldW0uZ2l0aHViLmlvL3llbGxvd3BhcGVyL3BhcGVyLnBkZiksIGRlZmluZXMKICAgICAgICAvLyB0aGUgdmFsaWQgcmFuZ2UgZm9yIHMgaW4gKDMwMSk6IDAgPCBzIDwgc2VjcDI1NmsxbiDDtyAyICsgMSwgYW5kIGZvciB2IGluICgzMDIpOiB2IOKIiCB7MjcsIDI4fS4gTW9zdAogICAgICAgIC8vIHNpZ25hdHVyZXMgZnJvbSBjdXJyZW50IGxpYnJhcmllcyBnZW5lcmF0ZSBhIHVuaXF1ZSBzaWduYXR1cmUgd2l0aCBhbiBzLXZhbHVlIGluIHRoZSBsb3dlciBoYWxmIG9yZGVyLgogICAgICAgIC8vCiAgICAgICAgLy8gSWYgeW91ciBsaWJyYXJ5IGdlbmVyYXRlcyBtYWxsZWFibGUgc2lnbmF0dXJlcywgc3VjaCBhcyBzLXZhbHVlcyBpbiB0aGUgdXBwZXIgcmFuZ2UsIGNhbGN1bGF0ZSBhIG5ldyBzLXZhbHVlCiAgICAgICAgLy8gd2l0aCAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQkFBRURDRTZBRjQ4QTAzQkJGRDI1RThDRDAzNjQxNDEgLSBzMSBhbmQgZmxpcCB2IGZyb20gMjcgdG8gMjggb3IKICAgICAgICAvLyB2aWNlIHZlcnNhLiBJZiB5b3VyIGxpYnJhcnkgYWxzbyBnZW5lcmF0ZXMgc2lnbmF0dXJlcyB3aXRoIDAvMSBmb3IgdiBpbnN0ZWFkIDI3LzI4LCBhZGQgMjcgdG8gdiB0byBhY2NlcHQKICAgICAgICAvLyB0aGVzZSBtYWxsZWFibGUgc2lnbmF0dXJlcyBhcyB3ZWxsLgogICAgICAgIGlmICgKICAgICAgICAgICAgdWludDI1NihzKQogICAgICAgICAgICAgICAgPiAweDdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUQ1NzZFNzM1N0E0NTAxRERGRTkyRjQ2NjgxQjIwQTAKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIChhZGRyZXNzKDApLCBSZWNvdmVyRXJyb3IuSW52YWxpZFNpZ25hdHVyZVMpOwogICAgICAgIH0KICAgICAgICBpZiAodiAhPSAyNyAmJiB2ICE9IDI4KSB7CiAgICAgICAgICAgIHJldHVybiAoYWRkcmVzcygwKSwgUmVjb3ZlckVycm9yLkludmFsaWRTaWduYXR1cmVWKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgKGFuZCBub3QgbWFsbGVhYmxlKSwgcmV0dXJuIHRoZSBzaWduZXIgYWRkcmVzcwogICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZWNyZWNvdmVyKGhhc2gsIHYsIHIsIHMpOwogICAgICAgIGlmIChzaWduZXIgPT0gYWRkcmVzcygwKSkgewogICAgICAgICAgICByZXR1cm4gKGFkZHJlc3MoMCksIFJlY292ZXJFcnJvci5JbnZhbGlkU2lnbmF0dXJlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoc2lnbmVyLCBSZWNvdmVyRXJyb3IuTm9FcnJvcik7CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3ZlcihieXRlczMyIGhhc2gsIHVpbnQ4IHYsIGJ5dGVzMzIgciwgYnl0ZXMzMiBzKQogICAgICAgIGludGVybmFsCiAgICAgICAgcHVyZQogICAgICAgIHJldHVybnMgKGFkZHJlc3MpCiAgICB7CiAgICAgICAgKGFkZHJlc3MgcmVjb3ZlcmVkLCBSZWNvdmVyRXJyb3IgZXJyb3IpID0gdHJ5UmVjb3ZlcihoYXNoLCB2LCByLCBzKTsKICAgICAgICBfdGhyb3dFcnJvcihlcnJvcik7CiAgICAgICAgcmV0dXJuIHJlY292ZXJlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKGJ5dGVzMzIgaGFzaCkKICAgICAgICBpbnRlcm5hbAogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIC8vIDMyIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgaGFzaCwKICAgICAgICAvLyBlbmZvcmNlZCBieSB0aGUgdHlwZSBzaWduYXR1cmUgYWJvdmUKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KAogICAgICAgICAgICBhYmkuZW5jb2RlUGFja2VkKCJceDE5RXRoZXJldW0gU2lnbmVkIE1lc3NhZ2U6XG4zMiIsIGhhc2gpCiAgICAgICAgKTsKICAgIH0KfQo="},{fileName:"PreventSigReplay.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgTXVsdGlTaWdXYWxsZXQgewogICAgdXNpbmcgRUNEU0EgZm9yIGJ5dGVzMzI7CgogICAgYWRkcmVzc1syXSBwdWJsaWMgb3duZXJzOwogICAgbWFwcGluZyhieXRlczMyID0+IGJvb2wpIHB1YmxpYyBleGVjdXRlZDsKCiAgICBjb25zdHJ1Y3RvcihhZGRyZXNzWzJdIG1lbW9yeSBfb3duZXJzKSBwYXlhYmxlIHsKICAgICAgICBvd25lcnMgPSBfb3duZXJzOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXQoKSBleHRlcm5hbCBwYXlhYmxlIHt9CgogICAgZnVuY3Rpb24gdHJhbnNmZXIoCiAgICAgICAgYWRkcmVzcyBfdG8sCiAgICAgICAgdWludDI1NiBfYW1vdW50LAogICAgICAgIHVpbnQyNTYgX25vbmNlLAogICAgICAgIGJ5dGVzWzJdIG1lbW9yeSBfc2lncwogICAgKSBleHRlcm5hbCB7CiAgICAgICAgYnl0ZXMzMiB0eEhhc2ggPSBnZXRUeEhhc2goX3RvLCBfYW1vdW50LCBfbm9uY2UpOwogICAgICAgIHJlcXVpcmUoIWV4ZWN1dGVkW3R4SGFzaF0sICJ0eCBleGVjdXRlZCIpOwogICAgICAgIHJlcXVpcmUoX2NoZWNrU2lncyhfc2lncywgdHhIYXNoKSwgImludmFsaWQgc2lnIik7CgogICAgICAgIGV4ZWN1dGVkW3R4SGFzaF0gPSB0cnVlOwoKICAgICAgICAoYm9vbCBzZW50LCkgPSBfdG8uY2FsbHt2YWx1ZTogX2Ftb3VudH0oIiIpOwogICAgICAgIHJlcXVpcmUoc2VudCwgIkZhaWxlZCB0byBzZW5kIEV0aGVyIik7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VHhIYXNoKGFkZHJlc3MgX3RvLCB1aW50MjU2IF9hbW91bnQsIHVpbnQyNTYgX25vbmNlKQogICAgICAgIHB1YmxpYwogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChieXRlczMyKQogICAgewogICAgICAgIHJldHVybiBrZWNjYWsyNTYoYWJpLmVuY29kZVBhY2tlZChhZGRyZXNzKHRoaXMpLCBfdG8sIF9hbW91bnQsIF9ub25jZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9jaGVja1NpZ3MoYnl0ZXNbMl0gbWVtb3J5IF9zaWdzLCBieXRlczMyIF90eEhhc2gpCiAgICAgICAgcHJpdmF0ZQogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIGJ5dGVzMzIgZXRoU2lnbmVkSGFzaCA9IF90eEhhc2gudG9FdGhTaWduZWRNZXNzYWdlSGFzaCgpOwoKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCBfc2lncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBhZGRyZXNzIHNpZ25lciA9IGV0aFNpZ25lZEhhc2gucmVjb3Zlcihfc2lnc1tpXSk7CiAgICAgICAgICAgIGJvb2wgdmFsaWQgPSBzaWduZXIgPT0gb3duZXJzW2ldOwoKICAgICAgICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQoKLyoKLy8gb3duZXJzCjB4ZTE5YWVhOTNGNkMxZEJlZjZBMzc3Njg0OGJFMDk5QTdjMzI1M2FjOAoweGZhODU0RkU1MzM5ODQzYjNlOUJmZDg1NTRCMzhCRDA0MkE0MmUzNDAKCi8vIHRvCjB4ZTEwNDIyY2M2MTAzMEM4QjNkQkNEMzZjN2U3ZThFQzNCNTI3RTBBYwovLyBhbW91bnQKMTAwCi8vIG5vbmNlCjAKLy8gdHggaGFzaAoweDEyYTA5NTQ2MmViZmNhMjdkYzRkOTlmZWVmODg1YmZlNTgzNDRmYjZiYjQyYzNjNTJhN2MwZDY4MzZkMTE0NDgKCi8vIHNpZ25hdHVyZXMKMHgxMjBmOGVkOGYyZmE1NTQ5OGYyZWYwYTIyZjI2ZTM5YjliNTFlZDI5Y2M5M2ZlMGVmM2VkMTc1NmY1OGZhZDBjNmViNWExZDZmMzY3MWY4ZDUxNjM2MzlmZGM0MGJiODcyMGRlNmQ4ZjI1MjMwNzdhZDZkMTEzOGE2MDkyM2I4MDFjCjB4YTI0MGE0ODdkZTFlYjViYjk3MWU5MjBjYjA2NzdhNDdkZGM2NDIxZTM4ZjdiMDQ4ZjhhYTg4MjY2YjJjODg0YTEwNDU1YTUyZGM3NmEyMDNhMWE5YTk1MzQxODQ2OWY5ZWVjMmM1OWU4NzIwMWJiYzhkYjBlNGQ5Nzk2OTM1Y2IxYgoqLwo="},{fileName:"SigReplay.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9FQ0RTQS5zb2wiOwoKY29udHJhY3QgTXVsdGlTaWdXYWxsZXQgewogICAgdXNpbmcgRUNEU0EgZm9yIGJ5dGVzMzI7CgogICAgYWRkcmVzc1syXSBwdWJsaWMgb3duZXJzOwoKICAgIGNvbnN0cnVjdG9yKGFkZHJlc3NbMl0gbWVtb3J5IF9vd25lcnMpIHBheWFibGUgewogICAgICAgIG93bmVycyA9IF9vd25lcnM7CiAgICB9CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIGV4dGVybmFsIHBheWFibGUge30KCiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIF90bywgdWludDI1NiBfYW1vdW50LCBieXRlc1syXSBtZW1vcnkgX3NpZ3MpCiAgICAgICAgZXh0ZXJuYWwKICAgIHsKICAgICAgICBieXRlczMyIHR4SGFzaCA9IGdldFR4SGFzaChfdG8sIF9hbW91bnQpOwogICAgICAgIHJlcXVpcmUoX2NoZWNrU2lncyhfc2lncywgdHhIYXNoKSwgImludmFsaWQgc2lnIik7CgogICAgICAgIChib29sIHNlbnQsKSA9IF90by5jYWxse3ZhbHVlOiBfYW1vdW50fSgiIik7CiAgICAgICAgcmVxdWlyZShzZW50LCAiRmFpbGVkIHRvIHNlbmQgRXRoZXIiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRUeEhhc2goYWRkcmVzcyBfdG8sIHVpbnQyNTYgX2Ftb3VudCkKICAgICAgICBwdWJsaWMKICAgICAgICB2aWV3CiAgICAgICAgcmV0dXJucyAoYnl0ZXMzMikKICAgIHsKICAgICAgICByZXR1cm4ga2VjY2FrMjU2KGFiaS5lbmNvZGVQYWNrZWQoX3RvLCBfYW1vdW50KSk7CiAgICB9CgogICAgZnVuY3Rpb24gX2NoZWNrU2lncyhieXRlc1syXSBtZW1vcnkgX3NpZ3MsIGJ5dGVzMzIgX3R4SGFzaCkKICAgICAgICBwcml2YXRlCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKGJvb2wpCiAgICB7CiAgICAgICAgYnl0ZXMzMiBldGhTaWduZWRIYXNoID0gX3R4SGFzaC50b0V0aFNpZ25lZE1lc3NhZ2VIYXNoKCk7CgogICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IF9zaWdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGFkZHJlc3Mgc2lnbmVyID0gZXRoU2lnbmVkSGFzaC5yZWNvdmVyKF9zaWdzW2ldKTsKICAgICAgICAgICAgYm9vbCB2YWxpZCA9IHNpZ25lciA9PSBvd25lcnNbaV07CgogICAgICAgICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg=="}],fZ=`

                  Signing messages off-chain and having a contract that requires that signature before executing a function is a useful technique.

                  For example this technique is used to:

                    @@ -9076,7 +9238,7 @@ if the signer's intention was to approve a transaction once.

                    ); } } -`,YZ=({prev:s,next:a})=>i.jsx(u,{version:WZ,title:GZ,description:BZ,html:VZ,prev:s,next:a,codes:fZ}),RZ="0.8.24",vZ="Vault Inflation",XZ="An example of vault inflation",NZ=[{fileName:"VaultInflation.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0IHtUZXN0LCBjb25zb2xlMn0gZnJvbSAiZm9yZ2Utc3RkL1Rlc3Quc29sIjsKaW1wb3J0IHsKICAgIElFUkMyMCwKICAgIFZhdWx0LAogICAgVG9rZW4KfSBmcm9tICIuLi8uLi8uLi9zcmMvaGFja3MvdmF1bHQtaW5mbGF0aW9uL1ZhdWx0SW5mbGF0aW9uLnNvbCI7Cgp1aW50OCBjb25zdGFudCBERUNJTUFMUyA9IDE4OwoKY29udHJhY3QgVmF1bHRUZXN0IGlzIFRlc3QgewogICAgVmF1bHQgcHJpdmF0ZSB2YXVsdDsKICAgIFRva2VuIHByaXZhdGUgdG9rZW47CgogICAgYWRkcmVzc1tdIHByaXZhdGUgdXNlcnMgPSBbYWRkcmVzcygxMSksIGFkZHJlc3MoMTIpXTsKCiAgICBmdW5jdGlvbiBzZXRVcCgpIHB1YmxpYyB7CiAgICAgICAgdG9rZW4gPSBuZXcgVG9rZW4oKTsKICAgICAgICB2YXVsdCA9IG5ldyBWYXVsdChhZGRyZXNzKHRva2VuKSk7CgogICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IHVzZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRva2VuLm1pbnQodXNlcnNbaV0sIDEwMDAwICogKDEwICoqIERFQ0lNQUxTKSk7CiAgICAgICAgICAgIHZtLnByYW5rKHVzZXJzW2ldKTsKICAgICAgICAgICAgdG9rZW4uYXBwcm92ZShhZGRyZXNzKHZhdWx0KSwgdHlwZSh1aW50MjU2KS5tYXgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBwcmludCgpIHByaXZhdGUgewogICAgICAgIGNvbnNvbGUyLmxvZygidmF1bHQgdG90YWwgc3VwcGx5IiwgdmF1bHQudG90YWxTdXBwbHkoKSk7CiAgICAgICAgY29uc29sZTIubG9nKCJ2YXVsdCBiYWxhbmNlIiwgdG9rZW4uYmFsYW5jZU9mKGFkZHJlc3ModmF1bHQpKSk7CiAgICAgICAgdWludDI1NiBzaGFyZXMwID0gdmF1bHQuYmFsYW5jZU9mKHVzZXJzWzBdKTsKICAgICAgICB1aW50MjU2IHNoYXJlczEgPSB2YXVsdC5iYWxhbmNlT2YodXNlcnNbMV0pOwogICAgICAgIGNvbnNvbGUyLmxvZygidXNlcnNbMF0gc2hhcmVzIiwgc2hhcmVzMCk7CiAgICAgICAgY29uc29sZTIubG9nKCJ1c2Vyc1sxXSBzaGFyZXMiLCBzaGFyZXMxKTsKICAgICAgICBjb25zb2xlMi5sb2coInVzZXJzWzBdIHJlZGVlbWFibGUiLCB2YXVsdC5wcmV2aWV3UmVkZWVtKHNoYXJlczApKTsKICAgICAgICBjb25zb2xlMi5sb2coInVzZXJzWzFdIHJlZGVlbWFibGUiLCB2YXVsdC5wcmV2aWV3UmVkZWVtKHNoYXJlczEpKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0ZXN0KCkgcHVibGljIHsKICAgICAgICAvLyB1c2Vyc1swXSBkZXBvc2l0IDEKICAgICAgICBjb25zb2xlMi5sb2coIi0tLSB1c2Vyc1swXSBkZXBvc2l0IC0tLSIpOwogICAgICAgIHZtLnByYW5rKHVzZXJzWzBdKTsKICAgICAgICB2YXVsdC5kZXBvc2l0KDEpOwogICAgICAgIHByaW50KCk7CgogICAgICAgIC8vIHVzZXJzWzBdIGRvbmF0ZSAxMDAKICAgICAgICBjb25zb2xlMi5sb2coIi0tLSB1c2Vyc1swXSBkb25hdGUgLS0tIik7CiAgICAgICAgdm0ucHJhbmsodXNlcnNbMF0pOwogICAgICAgIHRva2VuLnRyYW5zZmVyKGFkZHJlc3ModmF1bHQpLCAxMDAgKiAoMTAgKiogREVDSU1BTFMpKTsKICAgICAgICBwcmludCgpOwoKICAgICAgICAvLyB1c2Vyc1sxXSBkZXBvc2l0IDEwMAogICAgICAgIGNvbnNvbGUyLmxvZygiLS0tIHVzZXJzWzFdIGRlcG9zaXQgLS0tIik7CiAgICAgICAgdm0ucHJhbmsodXNlcnNbMV0pOwogICAgICAgIHZhdWx0LmRlcG9zaXQoMTAwICogKDEwICoqIERFQ0lNQUxTKSk7CiAgICAgICAgcHJpbnQoKTsKICAgIH0KfQo="}],HZ=`

                    Vulnerability

                    +`,YZ=({prev:s,next:a})=>i.jsx(u,{version:WZ,title:GZ,description:BZ,html:fZ,prev:s,next:a,codes:VZ}),RZ="0.8.24",XZ="Vault Inflation",vZ="An example of vault inflation",NZ=[{fileName:"VaultInflation.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0IHtUZXN0LCBjb25zb2xlMn0gZnJvbSAiZm9yZ2Utc3RkL1Rlc3Quc29sIjsKaW1wb3J0IHsKICAgIElFUkMyMCwKICAgIFZhdWx0LAogICAgVG9rZW4KfSBmcm9tICIuLi8uLi8uLi9zcmMvaGFja3MvdmF1bHQtaW5mbGF0aW9uL1ZhdWx0SW5mbGF0aW9uLnNvbCI7Cgp1aW50OCBjb25zdGFudCBERUNJTUFMUyA9IDE4OwoKY29udHJhY3QgVmF1bHRUZXN0IGlzIFRlc3QgewogICAgVmF1bHQgcHJpdmF0ZSB2YXVsdDsKICAgIFRva2VuIHByaXZhdGUgdG9rZW47CgogICAgYWRkcmVzc1tdIHByaXZhdGUgdXNlcnMgPSBbYWRkcmVzcygxMSksIGFkZHJlc3MoMTIpXTsKCiAgICBmdW5jdGlvbiBzZXRVcCgpIHB1YmxpYyB7CiAgICAgICAgdG9rZW4gPSBuZXcgVG9rZW4oKTsKICAgICAgICB2YXVsdCA9IG5ldyBWYXVsdChhZGRyZXNzKHRva2VuKSk7CgogICAgICAgIGZvciAodWludDI1NiBpID0gMDsgaSA8IHVzZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRva2VuLm1pbnQodXNlcnNbaV0sIDEwMDAwICogKDEwICoqIERFQ0lNQUxTKSk7CiAgICAgICAgICAgIHZtLnByYW5rKHVzZXJzW2ldKTsKICAgICAgICAgICAgdG9rZW4uYXBwcm92ZShhZGRyZXNzKHZhdWx0KSwgdHlwZSh1aW50MjU2KS5tYXgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBwcmludCgpIHByaXZhdGUgewogICAgICAgIGNvbnNvbGUyLmxvZygidmF1bHQgdG90YWwgc3VwcGx5IiwgdmF1bHQudG90YWxTdXBwbHkoKSk7CiAgICAgICAgY29uc29sZTIubG9nKCJ2YXVsdCBiYWxhbmNlIiwgdG9rZW4uYmFsYW5jZU9mKGFkZHJlc3ModmF1bHQpKSk7CiAgICAgICAgdWludDI1NiBzaGFyZXMwID0gdmF1bHQuYmFsYW5jZU9mKHVzZXJzWzBdKTsKICAgICAgICB1aW50MjU2IHNoYXJlczEgPSB2YXVsdC5iYWxhbmNlT2YodXNlcnNbMV0pOwogICAgICAgIGNvbnNvbGUyLmxvZygidXNlcnNbMF0gc2hhcmVzIiwgc2hhcmVzMCk7CiAgICAgICAgY29uc29sZTIubG9nKCJ1c2Vyc1sxXSBzaGFyZXMiLCBzaGFyZXMxKTsKICAgICAgICBjb25zb2xlMi5sb2coInVzZXJzWzBdIHJlZGVlbWFibGUiLCB2YXVsdC5wcmV2aWV3UmVkZWVtKHNoYXJlczApKTsKICAgICAgICBjb25zb2xlMi5sb2coInVzZXJzWzFdIHJlZGVlbWFibGUiLCB2YXVsdC5wcmV2aWV3UmVkZWVtKHNoYXJlczEpKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0ZXN0KCkgcHVibGljIHsKICAgICAgICAvLyB1c2Vyc1swXSBkZXBvc2l0IDEKICAgICAgICBjb25zb2xlMi5sb2coIi0tLSB1c2Vyc1swXSBkZXBvc2l0IC0tLSIpOwogICAgICAgIHZtLnByYW5rKHVzZXJzWzBdKTsKICAgICAgICB2YXVsdC5kZXBvc2l0KDEpOwogICAgICAgIHByaW50KCk7CgogICAgICAgIC8vIHVzZXJzWzBdIGRvbmF0ZSAxMDAKICAgICAgICBjb25zb2xlMi5sb2coIi0tLSB1c2Vyc1swXSBkb25hdGUgLS0tIik7CiAgICAgICAgdm0ucHJhbmsodXNlcnNbMF0pOwogICAgICAgIHRva2VuLnRyYW5zZmVyKGFkZHJlc3ModmF1bHQpLCAxMDAgKiAoMTAgKiogREVDSU1BTFMpKTsKICAgICAgICBwcmludCgpOwoKICAgICAgICAvLyB1c2Vyc1sxXSBkZXBvc2l0IDEwMAogICAgICAgIGNvbnNvbGUyLmxvZygiLS0tIHVzZXJzWzFdIGRlcG9zaXQgLS0tIik7CiAgICAgICAgdm0ucHJhbmsodXNlcnNbMV0pOwogICAgICAgIHZhdWx0LmRlcG9zaXQoMTAwICogKDEwICoqIERFQ0lNQUxTKSk7CiAgICAgICAgcHJpbnQoKTsKICAgIH0KfQo="}],HZ=`

                    Vulnerability

                    Vault shares can be inflated by donating ERC20 token to the vault.

                    Attacker can exploit this behavior to steal other user's deposits.

                    Example

                    @@ -9154,7 +9316,7 @@ if the signer's intention was to approve a transaction once.

                    print(); } } -`,FZ=({prev:s,next:a})=>i.jsx(u,{version:RZ,title:vZ,description:XZ,html:HZ,prev:s,next:a,codes:NZ}),KZ="0.8.24",SZ="WETH Permit",MZ="An example of WETH permit hack",xZ=[{fileName:"ERC20.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKYWJzdHJhY3QgY29udHJhY3QgRVJDMjAgewogICAgZXZlbnQgVHJhbnNmZXIoYWRkcmVzcyBpbmRleGVkIGZyb20sIGFkZHJlc3MgaW5kZXhlZCB0bywgdWludDI1NiBhbW91bnQpOwogICAgZXZlbnQgQXBwcm92YWwoCiAgICAgICAgYWRkcmVzcyBpbmRleGVkIG93bmVyLCBhZGRyZXNzIGluZGV4ZWQgc3BlbmRlciwgdWludDI1NiBhbW91bnQKICAgICk7CgogICAgc3RyaW5nIHB1YmxpYyBuYW1lOwogICAgc3RyaW5nIHB1YmxpYyBzeW1ib2w7CiAgICB1aW50OCBwdWJsaWMgaW1tdXRhYmxlIGRlY2ltYWxzOwoKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CiAgICBtYXBwaW5nKGFkZHJlc3MgPT4gbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpKSBwdWJsaWMgYWxsb3dhbmNlOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgX25hbWUsIHN0cmluZyBtZW1vcnkgX3N5bWJvbCwgdWludDggX2RlY2ltYWxzKSB7CiAgICAgICAgbmFtZSA9IF9uYW1lOwogICAgICAgIHN5bWJvbCA9IF9zeW1ib2w7CiAgICAgICAgZGVjaW1hbHMgPSBfZGVjaW1hbHM7CiAgICB9CgogICAgZnVuY3Rpb24gYXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIHB1YmxpYwogICAgICAgIHZpcnR1YWwKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIGFsbG93YW5jZVttc2cuc2VuZGVyXVtzcGVuZGVyXSA9IGFtb3VudDsKICAgICAgICBlbWl0IEFwcHJvdmFsKG1zZy5zZW5kZXIsIHNwZW5kZXIsIGFtb3VudCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyB0bywgdWludDI1NiBhbW91bnQpCiAgICAgICAgcHVibGljCiAgICAgICAgdmlydHVhbAogICAgICAgIHJldHVybnMgKGJvb2wpCiAgICB7CiAgICAgICAgYmFsYW5jZU9mW21zZy5zZW5kZXJdIC09IGFtb3VudDsKICAgICAgICB1bmNoZWNrZWQgewogICAgICAgICAgICBiYWxhbmNlT2ZbdG9dICs9IGFtb3VudDsKICAgICAgICB9CiAgICAgICAgZW1pdCBUcmFuc2Zlcihtc2cuc2VuZGVyLCB0bywgYW1vdW50KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBmcm9tLCBhZGRyZXNzIHRvLCB1aW50MjU2IGFtb3VudCkKICAgICAgICBwdWJsaWMKICAgICAgICB2aXJ0dWFsCiAgICAgICAgcmV0dXJucyAoYm9vbCkKICAgIHsKICAgICAgICB1aW50MjU2IGFsbG93ZWQgPSBhbGxvd2FuY2VbZnJvbV1bbXNnLnNlbmRlcl07CiAgICAgICAgaWYgKGFsbG93ZWQgIT0gdHlwZSh1aW50MjU2KS5tYXgpIHsKICAgICAgICAgICAgYWxsb3dhbmNlW2Zyb21dW21zZy5zZW5kZXJdID0gYWxsb3dlZCAtIGFtb3VudDsKICAgICAgICB9CiAgICAgICAgYmFsYW5jZU9mW2Zyb21dIC09IGFtb3VudDsKICAgICAgICB1bmNoZWNrZWQgewogICAgICAgICAgICBiYWxhbmNlT2ZbdG9dICs9IGFtb3VudDsKICAgICAgICB9CiAgICAgICAgZW1pdCBUcmFuc2Zlcihmcm9tLCB0bywgYW1vdW50KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBfbWludChhZGRyZXNzIHRvLCB1aW50MjU2IGFtb3VudCkgaW50ZXJuYWwgdmlydHVhbCB7CiAgICAgICAgdG90YWxTdXBwbHkgKz0gYW1vdW50OwogICAgICAgIHVuY2hlY2tlZCB7CiAgICAgICAgICAgIGJhbGFuY2VPZlt0b10gKz0gYW1vdW50OwogICAgICAgIH0KICAgICAgICBlbWl0IFRyYW5zZmVyKGFkZHJlc3MoMCksIHRvLCBhbW91bnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9idXJuKGFkZHJlc3MgZnJvbSwgdWludDI1NiBhbW91bnQpIGludGVybmFsIHZpcnR1YWwgewogICAgICAgIGJhbGFuY2VPZltmcm9tXSAtPSBhbW91bnQ7CiAgICAgICAgdW5jaGVja2VkIHsKICAgICAgICAgICAgdG90YWxTdXBwbHkgLT0gYW1vdW50OwogICAgICAgIH0KICAgICAgICBlbWl0IFRyYW5zZmVyKGZyb20sIGFkZHJlc3MoMCksIGFtb3VudCk7CiAgICB9Cn0K"},{fileName:"ERC20Bank.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0ICIuL0lFUkMyMFBlcm1pdC5zb2wiOwoKY29udHJhY3QgRVJDMjBCYW5rIHsKICAgIElFUkMyMFBlcm1pdCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuOwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4pIHsKICAgICAgICB0b2tlbiA9IElFUkMyMFBlcm1pdChfdG9rZW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXQodWludDI1NiBfYW1vdW50KSBleHRlcm5hbCB7CiAgICAgICAgdG9rZW4udHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIF9hbW91bnQpOwogICAgICAgIGJhbGFuY2VPZlttc2cuc2VuZGVyXSArPSBfYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXRXaXRoUGVybWl0KAogICAgICAgIGFkZHJlc3Mgb3duZXIsCiAgICAgICAgYWRkcmVzcyBzcGVuZGVyLAogICAgICAgIHVpbnQyNTYgYW1vdW50LAogICAgICAgIHVpbnQyNTYgZGVhZGxpbmUsCiAgICAgICAgdWludDggdiwKICAgICAgICBieXRlczMyIHIsCiAgICAgICAgYnl0ZXMzMiBzCiAgICApIGV4dGVybmFsIHsKICAgICAgICB0b2tlbi5wZXJtaXQob3duZXIsIHNwZW5kZXIsIGFtb3VudCwgZGVhZGxpbmUsIHYsIHIsIHMpOwogICAgICAgIHRva2VuLnRyYW5zZmVyRnJvbShvd25lciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50KTsKICAgICAgICBiYWxhbmNlT2Zbc3BlbmRlcl0gKz0gYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KHVpbnQyNTYgX2Ftb3VudCkgZXh0ZXJuYWwgewogICAgICAgIGJhbGFuY2VPZlttc2cuc2VuZGVyXSAtPSBfYW1vdW50OwogICAgICAgIHRva2VuLnRyYW5zZmVyKG1zZy5zZW5kZXIsIF9hbW91bnQpOwogICAgfQp9Cg=="},{fileName:"ERC20BankExploitTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0IHtUZXN0LCBjb25zb2xlMn0gZnJvbSAiZm9yZ2Utc3RkL1Rlc3Quc29sIjsKaW1wb3J0IHtXRVRIfSBmcm9tICIuLi8uLi8uLi9zcmMvaGFja3Mvd2V0aC1wZXJtaXQvV0VUSC5zb2wiOwppbXBvcnQge0VSQzIwQmFua30gZnJvbSAiLi4vLi4vLi4vc3JjL2hhY2tzL3dldGgtcGVybWl0L0VSQzIwQmFuay5zb2wiOwoKY29udHJhY3QgRVJDMjBCYW5rRXhwbG9pdFRlc3QgaXMgVGVzdCB7CiAgICBXRVRIIHByaXZhdGUgd2V0aDsKICAgIEVSQzIwQmFuayBwcml2YXRlIGJhbms7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgdXNlciA9IGFkZHJlc3MoMTEpOwogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IGF0dGFja2VyID0gYWRkcmVzcygxMik7CgogICAgZnVuY3Rpb24gc2V0VXAoKSBwdWJsaWMgewogICAgICAgIHdldGggPSBuZXcgV0VUSCgpOwogICAgICAgIGJhbmsgPSBuZXcgRVJDMjBCYW5rKGFkZHJlc3Mod2V0aCkpOwoKICAgICAgICBkZWFsKHVzZXIsIDEwMCAqIDFlMTgpOwogICAgICAgIHZtLnN0YXJ0UHJhbmsodXNlcik7CiAgICAgICAgd2V0aC5kZXBvc2l0e3ZhbHVlOiAxMDAgKiAxZTE4fSgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKGJhbmspLCB0eXBlKHVpbnQyNTYpLm1heCk7CiAgICAgICAgYmFuay5kZXBvc2l0KDFlMTgpOwogICAgICAgIHZtLnN0b3BQcmFuaygpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3QoKSBwdWJsaWMgewogICAgICAgIHVpbnQyNTYgYmFsID0gd2V0aC5iYWxhbmNlT2YodXNlcik7CiAgICAgICAgdm0uc3RhcnRQcmFuayhhdHRhY2tlcik7CiAgICAgICAgYmFuay5kZXBvc2l0V2l0aFBlcm1pdCh1c2VyLCBhdHRhY2tlciwgYmFsLCAwLCAwLCAiIiwgIiIpOwogICAgICAgIGJhbmsud2l0aGRyYXcoYmFsKTsKICAgICAgICB2bS5zdG9wUHJhbmsoKTsKCiAgICAgICAgYXNzZXJ0RXEod2V0aC5iYWxhbmNlT2YodXNlciksIDAsICJXRVRIIGJhbGFuY2Ugb2YgdXNlciIpOwogICAgICAgIGFzc2VydEVxKAogICAgICAgICAgICB3ZXRoLmJhbGFuY2VPZihhZGRyZXNzKGF0dGFja2VyKSksCiAgICAgICAgICAgIDk5ICogMWUxOCwKICAgICAgICAgICAgIldFVEggYmFsYW5jZSBvZiBhdHRhY2tlciIKICAgICAgICApOwogICAgfQp9Cg=="},{fileName:"IERC20.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIGRzdCwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc3JjLCBhZGRyZXNzIGRzdCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKCiAgICBldmVudCBUcmFuc2ZlcihhZGRyZXNzIGluZGV4ZWQgc3JjLCBhZGRyZXNzIGluZGV4ZWQgZHN0LCB1aW50MjU2IGFtb3VudCk7CiAgICBldmVudCBBcHByb3ZhbCgKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgb3duZXIsIGFkZHJlc3MgaW5kZXhlZCBzcGVuZGVyLCB1aW50MjU2IGFtb3VudAogICAgKTsKfQo="},{fileName:"IERC20Permit.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0ICIuL0lFUkMyMC5zb2wiOwoKaW50ZXJmYWNlIElFUkMyMFBlcm1pdCBpcyBJRVJDMjAgewogICAgZnVuY3Rpb24gcGVybWl0KAogICAgICAgIGFkZHJlc3Mgb3duZXIsCiAgICAgICAgYWRkcmVzcyBzcGVuZGVyLAogICAgICAgIHVpbnQyNTYgdmFsdWUsCiAgICAgICAgdWludDI1NiBkZWFkbGluZSwKICAgICAgICB1aW50OCB2LAogICAgICAgIGJ5dGVzMzIgciwKICAgICAgICBieXRlczMyIHMKICAgICkgZXh0ZXJuYWw7Cn0K"},{fileName:"WETH.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0ICIuL0VSQzIwLnNvbCI7Cgpjb250cmFjdCBXRVRIIGlzIEVSQzIwIHsKICAgIGV2ZW50IERlcG9zaXQoYWRkcmVzcyBpbmRleGVkIGFjY291bnQsIHVpbnQyNTYgYW1vdW50KTsKICAgIGV2ZW50IFdpdGhkcmF3KGFkZHJlc3MgaW5kZXhlZCBhY2NvdW50LCB1aW50MjU2IGFtb3VudCk7CgogICAgY29uc3RydWN0b3IoKSBFUkMyMCgiV3JhcHBlZCBFdGhlciIsICJXRVRIIiwgMTgpIHt9CgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBkZXBvc2l0KCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICBfbWludChtc2cuc2VuZGVyLCBtc2cudmFsdWUpOwogICAgICAgIGVtaXQgRGVwb3NpdChtc2cuc2VuZGVyLCBtc2cudmFsdWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCB7CiAgICAgICAgX2J1cm4obXNnLnNlbmRlciwgYW1vdW50KTsKICAgICAgICBwYXlhYmxlKG1zZy5zZW5kZXIpLnRyYW5zZmVyKGFtb3VudCk7CiAgICAgICAgZW1pdCBXaXRoZHJhdyhtc2cuc2VuZGVyLCBhbW91bnQpOwogICAgfQp9Cg=="}],JZ=`

                    Vulnerability

                    +`,FZ=({prev:s,next:a})=>i.jsx(u,{version:RZ,title:XZ,description:vZ,html:HZ,prev:s,next:a,codes:NZ}),KZ="0.8.24",SZ="WETH Permit",MZ="An example of WETH permit hack",xZ=[{fileName:"ERC20.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKYWJzdHJhY3QgY29udHJhY3QgRVJDMjAgewogICAgZXZlbnQgVHJhbnNmZXIoYWRkcmVzcyBpbmRleGVkIGZyb20sIGFkZHJlc3MgaW5kZXhlZCB0bywgdWludDI1NiBhbW91bnQpOwogICAgZXZlbnQgQXBwcm92YWwoCiAgICAgICAgYWRkcmVzcyBpbmRleGVkIG93bmVyLCBhZGRyZXNzIGluZGV4ZWQgc3BlbmRlciwgdWludDI1NiBhbW91bnQKICAgICk7CgogICAgc3RyaW5nIHB1YmxpYyBuYW1lOwogICAgc3RyaW5nIHB1YmxpYyBzeW1ib2w7CiAgICB1aW50OCBwdWJsaWMgaW1tdXRhYmxlIGRlY2ltYWxzOwoKICAgIHVpbnQyNTYgcHVibGljIHRvdGFsU3VwcGx5OwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CiAgICBtYXBwaW5nKGFkZHJlc3MgPT4gbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpKSBwdWJsaWMgYWxsb3dhbmNlOwoKICAgIGNvbnN0cnVjdG9yKHN0cmluZyBtZW1vcnkgX25hbWUsIHN0cmluZyBtZW1vcnkgX3N5bWJvbCwgdWludDggX2RlY2ltYWxzKSB7CiAgICAgICAgbmFtZSA9IF9uYW1lOwogICAgICAgIHN5bWJvbCA9IF9zeW1ib2w7CiAgICAgICAgZGVjaW1hbHMgPSBfZGVjaW1hbHM7CiAgICB9CgogICAgZnVuY3Rpb24gYXBwcm92ZShhZGRyZXNzIHNwZW5kZXIsIHVpbnQyNTYgYW1vdW50KQogICAgICAgIHB1YmxpYwogICAgICAgIHZpcnR1YWwKICAgICAgICByZXR1cm5zIChib29sKQogICAgewogICAgICAgIGFsbG93YW5jZVttc2cuc2VuZGVyXVtzcGVuZGVyXSA9IGFtb3VudDsKICAgICAgICBlbWl0IEFwcHJvdmFsKG1zZy5zZW5kZXIsIHNwZW5kZXIsIGFtb3VudCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gdHJhbnNmZXIoYWRkcmVzcyB0bywgdWludDI1NiBhbW91bnQpCiAgICAgICAgcHVibGljCiAgICAgICAgdmlydHVhbAogICAgICAgIHJldHVybnMgKGJvb2wpCiAgICB7CiAgICAgICAgYmFsYW5jZU9mW21zZy5zZW5kZXJdIC09IGFtb3VudDsKICAgICAgICB1bmNoZWNrZWQgewogICAgICAgICAgICBiYWxhbmNlT2ZbdG9dICs9IGFtb3VudDsKICAgICAgICB9CiAgICAgICAgZW1pdCBUcmFuc2Zlcihtc2cuc2VuZGVyLCB0bywgYW1vdW50KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmFuc2ZlckZyb20oYWRkcmVzcyBmcm9tLCBhZGRyZXNzIHRvLCB1aW50MjU2IGFtb3VudCkKICAgICAgICBwdWJsaWMKICAgICAgICB2aXJ0dWFsCiAgICAgICAgcmV0dXJucyAoYm9vbCkKICAgIHsKICAgICAgICB1aW50MjU2IGFsbG93ZWQgPSBhbGxvd2FuY2VbZnJvbV1bbXNnLnNlbmRlcl07CiAgICAgICAgaWYgKGFsbG93ZWQgIT0gdHlwZSh1aW50MjU2KS5tYXgpIHsKICAgICAgICAgICAgYWxsb3dhbmNlW2Zyb21dW21zZy5zZW5kZXJdID0gYWxsb3dlZCAtIGFtb3VudDsKICAgICAgICB9CiAgICAgICAgYmFsYW5jZU9mW2Zyb21dIC09IGFtb3VudDsKICAgICAgICB1bmNoZWNrZWQgewogICAgICAgICAgICBiYWxhbmNlT2ZbdG9dICs9IGFtb3VudDsKICAgICAgICB9CiAgICAgICAgZW1pdCBUcmFuc2Zlcihmcm9tLCB0bywgYW1vdW50KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBfbWludChhZGRyZXNzIHRvLCB1aW50MjU2IGFtb3VudCkgaW50ZXJuYWwgdmlydHVhbCB7CiAgICAgICAgdG90YWxTdXBwbHkgKz0gYW1vdW50OwogICAgICAgIHVuY2hlY2tlZCB7CiAgICAgICAgICAgIGJhbGFuY2VPZlt0b10gKz0gYW1vdW50OwogICAgICAgIH0KICAgICAgICBlbWl0IFRyYW5zZmVyKGFkZHJlc3MoMCksIHRvLCBhbW91bnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9idXJuKGFkZHJlc3MgZnJvbSwgdWludDI1NiBhbW91bnQpIGludGVybmFsIHZpcnR1YWwgewogICAgICAgIGJhbGFuY2VPZltmcm9tXSAtPSBhbW91bnQ7CiAgICAgICAgdW5jaGVja2VkIHsKICAgICAgICAgICAgdG90YWxTdXBwbHkgLT0gYW1vdW50OwogICAgICAgIH0KICAgICAgICBlbWl0IFRyYW5zZmVyKGZyb20sIGFkZHJlc3MoMCksIGFtb3VudCk7CiAgICB9Cn0K"},{fileName:"ERC20Bank.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0ICIuL0lFUkMyMFBlcm1pdC5zb2wiOwoKY29udHJhY3QgRVJDMjBCYW5rIHsKICAgIElFUkMyMFBlcm1pdCBwdWJsaWMgaW1tdXRhYmxlIHRva2VuOwogICAgbWFwcGluZyhhZGRyZXNzID0+IHVpbnQyNTYpIHB1YmxpYyBiYWxhbmNlT2Y7CgogICAgY29uc3RydWN0b3IoYWRkcmVzcyBfdG9rZW4pIHsKICAgICAgICB0b2tlbiA9IElFUkMyMFBlcm1pdChfdG9rZW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXQodWludDI1NiBfYW1vdW50KSBleHRlcm5hbCB7CiAgICAgICAgdG9rZW4udHJhbnNmZXJGcm9tKG1zZy5zZW5kZXIsIGFkZHJlc3ModGhpcyksIF9hbW91bnQpOwogICAgICAgIGJhbGFuY2VPZlttc2cuc2VuZGVyXSArPSBfYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIGRlcG9zaXRXaXRoUGVybWl0KAogICAgICAgIGFkZHJlc3Mgb3duZXIsCiAgICAgICAgYWRkcmVzcyBzcGVuZGVyLAogICAgICAgIHVpbnQyNTYgYW1vdW50LAogICAgICAgIHVpbnQyNTYgZGVhZGxpbmUsCiAgICAgICAgdWludDggdiwKICAgICAgICBieXRlczMyIHIsCiAgICAgICAgYnl0ZXMzMiBzCiAgICApIGV4dGVybmFsIHsKICAgICAgICB0b2tlbi5wZXJtaXQob3duZXIsIHNwZW5kZXIsIGFtb3VudCwgZGVhZGxpbmUsIHYsIHIsIHMpOwogICAgICAgIHRva2VuLnRyYW5zZmVyRnJvbShvd25lciwgYWRkcmVzcyh0aGlzKSwgYW1vdW50KTsKICAgICAgICBiYWxhbmNlT2Zbc3BlbmRlcl0gKz0gYW1vdW50OwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KHVpbnQyNTYgX2Ftb3VudCkgZXh0ZXJuYWwgewogICAgICAgIGJhbGFuY2VPZlttc2cuc2VuZGVyXSAtPSBfYW1vdW50OwogICAgICAgIHRva2VuLnRyYW5zZmVyKG1zZy5zZW5kZXIsIF9hbW91bnQpOwogICAgfQp9Cg=="},{fileName:"ERC20BankExploitTest.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0IHtUZXN0LCBjb25zb2xlMn0gZnJvbSAiZm9yZ2Utc3RkL1Rlc3Quc29sIjsKaW1wb3J0IHtXRVRIfSBmcm9tICIuLi8uLi8uLi9zcmMvaGFja3Mvd2V0aC1wZXJtaXQvV0VUSC5zb2wiOwppbXBvcnQge0VSQzIwQmFua30gZnJvbSAiLi4vLi4vLi4vc3JjL2hhY2tzL3dldGgtcGVybWl0L0VSQzIwQmFuay5zb2wiOwoKY29udHJhY3QgRVJDMjBCYW5rRXhwbG9pdFRlc3QgaXMgVGVzdCB7CiAgICBXRVRIIHByaXZhdGUgd2V0aDsKICAgIEVSQzIwQmFuayBwcml2YXRlIGJhbms7CiAgICBhZGRyZXNzIHByaXZhdGUgY29uc3RhbnQgdXNlciA9IGFkZHJlc3MoMTEpOwogICAgYWRkcmVzcyBwcml2YXRlIGNvbnN0YW50IGF0dGFja2VyID0gYWRkcmVzcygxMik7CgogICAgZnVuY3Rpb24gc2V0VXAoKSBwdWJsaWMgewogICAgICAgIHdldGggPSBuZXcgV0VUSCgpOwogICAgICAgIGJhbmsgPSBuZXcgRVJDMjBCYW5rKGFkZHJlc3Mod2V0aCkpOwoKICAgICAgICBkZWFsKHVzZXIsIDEwMCAqIDFlMTgpOwogICAgICAgIHZtLnN0YXJ0UHJhbmsodXNlcik7CiAgICAgICAgd2V0aC5kZXBvc2l0e3ZhbHVlOiAxMDAgKiAxZTE4fSgpOwogICAgICAgIHdldGguYXBwcm92ZShhZGRyZXNzKGJhbmspLCB0eXBlKHVpbnQyNTYpLm1heCk7CiAgICAgICAgYmFuay5kZXBvc2l0KDFlMTgpOwogICAgICAgIHZtLnN0b3BQcmFuaygpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3QoKSBwdWJsaWMgewogICAgICAgIHVpbnQyNTYgYmFsID0gd2V0aC5iYWxhbmNlT2YodXNlcik7CiAgICAgICAgdm0uc3RhcnRQcmFuayhhdHRhY2tlcik7CiAgICAgICAgYmFuay5kZXBvc2l0V2l0aFBlcm1pdCh1c2VyLCBhdHRhY2tlciwgYmFsLCAwLCAwLCAiIiwgIiIpOwogICAgICAgIGJhbmsud2l0aGRyYXcoYmFsKTsKICAgICAgICB2bS5zdG9wUHJhbmsoKTsKCiAgICAgICAgYXNzZXJ0RXEod2V0aC5iYWxhbmNlT2YodXNlciksIDAsICJXRVRIIGJhbGFuY2Ugb2YgdXNlciIpOwogICAgICAgIGFzc2VydEVxKAogICAgICAgICAgICB3ZXRoLmJhbGFuY2VPZihhZGRyZXNzKGF0dGFja2VyKSksCiAgICAgICAgICAgIDk5ICogMWUxOCwKICAgICAgICAgICAgIldFVEggYmFsYW5jZSBvZiBhdHRhY2tlciIKICAgICAgICApOwogICAgfQp9Cg=="},{fileName:"IERC20.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW50ZXJmYWNlIElFUkMyMCB7CiAgICBmdW5jdGlvbiB0b3RhbFN1cHBseSgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CiAgICBmdW5jdGlvbiBiYWxhbmNlT2YoYWRkcmVzcyBhY2NvdW50KSBleHRlcm5hbCB2aWV3IHJldHVybnMgKHVpbnQyNTYpOwogICAgZnVuY3Rpb24gYWxsb3dhbmNlKGFkZHJlc3Mgb3duZXIsIGFkZHJlc3Mgc3BlbmRlcikKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MjU2KTsKICAgIGZ1bmN0aW9uIGFwcHJvdmUoYWRkcmVzcyBzcGVuZGVyLCB1aW50MjU2IGFtb3VudCkgZXh0ZXJuYWwgcmV0dXJucyAoYm9vbCk7CiAgICBmdW5jdGlvbiB0cmFuc2ZlcihhZGRyZXNzIGRzdCwgdWludDI1NiBhbW91bnQpIGV4dGVybmFsIHJldHVybnMgKGJvb2wpOwogICAgZnVuY3Rpb24gdHJhbnNmZXJGcm9tKGFkZHJlc3Mgc3JjLCBhZGRyZXNzIGRzdCwgdWludDI1NiBhbW91bnQpCiAgICAgICAgZXh0ZXJuYWwKICAgICAgICByZXR1cm5zIChib29sKTsKCiAgICBldmVudCBUcmFuc2ZlcihhZGRyZXNzIGluZGV4ZWQgc3JjLCBhZGRyZXNzIGluZGV4ZWQgZHN0LCB1aW50MjU2IGFtb3VudCk7CiAgICBldmVudCBBcHByb3ZhbCgKICAgICAgICBhZGRyZXNzIGluZGV4ZWQgb3duZXIsIGFkZHJlc3MgaW5kZXhlZCBzcGVuZGVyLCB1aW50MjU2IGFtb3VudAogICAgKTsKfQo="},{fileName:"IERC20Permit.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0ICIuL0lFUkMyMC5zb2wiOwoKaW50ZXJmYWNlIElFUkMyMFBlcm1pdCBpcyBJRVJDMjAgewogICAgZnVuY3Rpb24gcGVybWl0KAogICAgICAgIGFkZHJlc3Mgb3duZXIsCiAgICAgICAgYWRkcmVzcyBzcGVuZGVyLAogICAgICAgIHVpbnQyNTYgdmFsdWUsCiAgICAgICAgdWludDI1NiBkZWFkbGluZSwKICAgICAgICB1aW50OCB2LAogICAgICAgIGJ5dGVzMzIgciwKICAgICAgICBieXRlczMyIHMKICAgICkgZXh0ZXJuYWw7Cn0K"},{fileName:"WETH.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgMC44LjI0OwoKaW1wb3J0ICIuL0VSQzIwLnNvbCI7Cgpjb250cmFjdCBXRVRIIGlzIEVSQzIwIHsKICAgIGV2ZW50IERlcG9zaXQoYWRkcmVzcyBpbmRleGVkIGFjY291bnQsIHVpbnQyNTYgYW1vdW50KTsKICAgIGV2ZW50IFdpdGhkcmF3KGFkZHJlc3MgaW5kZXhlZCBhY2NvdW50LCB1aW50MjU2IGFtb3VudCk7CgogICAgY29uc3RydWN0b3IoKSBFUkMyMCgiV3JhcHBlZCBFdGhlciIsICJXRVRIIiwgMTgpIHt9CgogICAgZmFsbGJhY2soKSBleHRlcm5hbCBwYXlhYmxlIHsKICAgICAgICBkZXBvc2l0KCk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVwb3NpdCgpIHB1YmxpYyBwYXlhYmxlIHsKICAgICAgICBfbWludChtc2cuc2VuZGVyLCBtc2cudmFsdWUpOwogICAgICAgIGVtaXQgRGVwb3NpdChtc2cuc2VuZGVyLCBtc2cudmFsdWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhkcmF3KHVpbnQyNTYgYW1vdW50KSBleHRlcm5hbCB7CiAgICAgICAgX2J1cm4obXNnLnNlbmRlciwgYW1vdW50KTsKICAgICAgICBwYXlhYmxlKG1zZy5zZW5kZXIpLnRyYW5zZmVyKGFtb3VudCk7CiAgICAgICAgZW1pdCBXaXRoZHJhdyhtc2cuc2VuZGVyLCBhbW91bnQpOwogICAgfQp9Cg=="}],JZ=`

                    Vulnerability

                    Most ERC20 have the permit function to approve a spender if a valid signature is provided.

                    However WETH does not. Surprisingly, when permit is called on WETH, the function call will execute without any errors.

                    This is because the fallback inside WETH is execute when permit is called.

                    @@ -9527,7 +9689,7 @@ if the signer's intention was to approve a transaction once.

                    // Example import ECDSA.sol from openzeppelin-contract repo, release-v4.5 branch // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.5/contracts/utils/cryptography/ECDSA.sol import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v4.5/contracts/utils/cryptography/ECDSA.sol"; -`,y0=({prev:s,next:a})=>i.jsx(u,{version:d0,title:I0,description:C0,html:u0,prev:s,next:a,codes:j0}),A0="0.8.24",m0="Inheritance",b0="Example of inheritance in Solidity",w0=[{fileName:"Inheritance.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qIEdyYXBoIG9mIGluaGVyaXRhbmNlCiAgICBBCiAgIC8gXAogIEIgICBDCiAvIFwgLwpGICBELEUKCiovCgpjb250cmFjdCBBIHsKICAgIGZ1bmN0aW9uIGZvbygpIHB1YmxpYyBwdXJlIHZpcnR1YWwgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAiQSI7CiAgICB9Cn0KCi8vIENvbnRyYWN0cyBpbmhlcml0IG90aGVyIGNvbnRyYWN0cyBieSB1c2luZyB0aGUga2V5d29yZCAnaXMnLgpjb250cmFjdCBCIGlzIEEgewogICAgLy8gT3ZlcnJpZGUgQS5mb28oKQogICAgZnVuY3Rpb24gZm9vKCkgcHVibGljIHB1cmUgdmlydHVhbCBvdmVycmlkZSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuICJCIjsKICAgIH0KfQoKY29udHJhY3QgQyBpcyBBIHsKICAgIC8vIE92ZXJyaWRlIEEuZm9vKCkKICAgIGZ1bmN0aW9uIGZvbygpIHB1YmxpYyBwdXJlIHZpcnR1YWwgb3ZlcnJpZGUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAiQyI7CiAgICB9Cn0KCi8vIENvbnRyYWN0cyBjYW4gaW5oZXJpdCBmcm9tIG11bHRpcGxlIHBhcmVudCBjb250cmFjdHMuCi8vIFdoZW4gYSBmdW5jdGlvbiBpcyBjYWxsZWQgdGhhdCBpcyBkZWZpbmVkIG11bHRpcGxlIHRpbWVzIGluCi8vIGRpZmZlcmVudCBjb250cmFjdHMsIHBhcmVudCBjb250cmFjdHMgYXJlIHNlYXJjaGVkIGZyb20KLy8gcmlnaHQgdG8gbGVmdCwgYW5kIGluIGRlcHRoLWZpcnN0IG1hbm5lci4KCmNvbnRyYWN0IEQgaXMgQiwgQyB7CiAgICAvLyBELmZvbygpIHJldHVybnMgIkMiCiAgICAvLyBzaW5jZSBDIGlzIHRoZSByaWdodCBtb3N0IHBhcmVudCBjb250cmFjdCB3aXRoIGZ1bmN0aW9uIGZvbygpCiAgICBmdW5jdGlvbiBmb28oKSBwdWJsaWMgcHVyZSBvdmVycmlkZShCLCBDKSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIHN1cGVyLmZvbygpOwogICAgfQp9Cgpjb250cmFjdCBFIGlzIEMsIEIgewogICAgLy8gRS5mb28oKSByZXR1cm5zICJCIgogICAgLy8gc2luY2UgQiBpcyB0aGUgcmlnaHQgbW9zdCBwYXJlbnQgY29udHJhY3Qgd2l0aCBmdW5jdGlvbiBmb28oKQogICAgZnVuY3Rpb24gZm9vKCkgcHVibGljIHB1cmUgb3ZlcnJpZGUoQywgQikgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBzdXBlci5mb28oKTsKICAgIH0KfQoKLy8gSW5oZXJpdGFuY2UgbXVzdCBiZSBvcmRlcmVkIGZyb20g4oCcbW9zdCBiYXNlLWxpa2XigJ0gdG8g4oCcbW9zdCBkZXJpdmVk4oCdLgovLyBTd2FwcGluZyB0aGUgb3JkZXIgb2YgQSBhbmQgQiB3aWxsIHRocm93IGEgY29tcGlsYXRpb24gZXJyb3IuCmNvbnRyYWN0IEYgaXMgQSwgQiB7CiAgICBmdW5jdGlvbiBmb28oKSBwdWJsaWMgcHVyZSBvdmVycmlkZShBLCBCKSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIHN1cGVyLmZvbygpOwogICAgfQp9Cg=="}],k0=`

                    Solidity supports multiple inheritance. Contracts can inherit other contract by using the is keyword.

                    +`,A0=({prev:s,next:a})=>i.jsx(u,{version:d0,title:I0,description:C0,html:u0,prev:s,next:a,codes:j0}),y0="0.8.24",m0="Inheritance",b0="Example of inheritance in Solidity",w0=[{fileName:"Inheritance.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qIEdyYXBoIG9mIGluaGVyaXRhbmNlCiAgICBBCiAgIC8gXAogIEIgICBDCiAvIFwgLwpGICBELEUKCiovCgpjb250cmFjdCBBIHsKICAgIGZ1bmN0aW9uIGZvbygpIHB1YmxpYyBwdXJlIHZpcnR1YWwgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAiQSI7CiAgICB9Cn0KCi8vIENvbnRyYWN0cyBpbmhlcml0IG90aGVyIGNvbnRyYWN0cyBieSB1c2luZyB0aGUga2V5d29yZCAnaXMnLgpjb250cmFjdCBCIGlzIEEgewogICAgLy8gT3ZlcnJpZGUgQS5mb28oKQogICAgZnVuY3Rpb24gZm9vKCkgcHVibGljIHB1cmUgdmlydHVhbCBvdmVycmlkZSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuICJCIjsKICAgIH0KfQoKY29udHJhY3QgQyBpcyBBIHsKICAgIC8vIE92ZXJyaWRlIEEuZm9vKCkKICAgIGZ1bmN0aW9uIGZvbygpIHB1YmxpYyBwdXJlIHZpcnR1YWwgb3ZlcnJpZGUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAiQyI7CiAgICB9Cn0KCi8vIENvbnRyYWN0cyBjYW4gaW5oZXJpdCBmcm9tIG11bHRpcGxlIHBhcmVudCBjb250cmFjdHMuCi8vIFdoZW4gYSBmdW5jdGlvbiBpcyBjYWxsZWQgdGhhdCBpcyBkZWZpbmVkIG11bHRpcGxlIHRpbWVzIGluCi8vIGRpZmZlcmVudCBjb250cmFjdHMsIHBhcmVudCBjb250cmFjdHMgYXJlIHNlYXJjaGVkIGZyb20KLy8gcmlnaHQgdG8gbGVmdCwgYW5kIGluIGRlcHRoLWZpcnN0IG1hbm5lci4KCmNvbnRyYWN0IEQgaXMgQiwgQyB7CiAgICAvLyBELmZvbygpIHJldHVybnMgIkMiCiAgICAvLyBzaW5jZSBDIGlzIHRoZSByaWdodCBtb3N0IHBhcmVudCBjb250cmFjdCB3aXRoIGZ1bmN0aW9uIGZvbygpCiAgICBmdW5jdGlvbiBmb28oKSBwdWJsaWMgcHVyZSBvdmVycmlkZShCLCBDKSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIHN1cGVyLmZvbygpOwogICAgfQp9Cgpjb250cmFjdCBFIGlzIEMsIEIgewogICAgLy8gRS5mb28oKSByZXR1cm5zICJCIgogICAgLy8gc2luY2UgQiBpcyB0aGUgcmlnaHQgbW9zdCBwYXJlbnQgY29udHJhY3Qgd2l0aCBmdW5jdGlvbiBmb28oKQogICAgZnVuY3Rpb24gZm9vKCkgcHVibGljIHB1cmUgb3ZlcnJpZGUoQywgQikgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiBzdXBlci5mb28oKTsKICAgIH0KfQoKLy8gSW5oZXJpdGFuY2UgbXVzdCBiZSBvcmRlcmVkIGZyb20g4oCcbW9zdCBiYXNlLWxpa2XigJ0gdG8g4oCcbW9zdCBkZXJpdmVk4oCdLgovLyBTd2FwcGluZyB0aGUgb3JkZXIgb2YgQSBhbmQgQiB3aWxsIHRocm93IGEgY29tcGlsYXRpb24gZXJyb3IuCmNvbnRyYWN0IEYgaXMgQSwgQiB7CiAgICBmdW5jdGlvbiBmb28oKSBwdWJsaWMgcHVyZSBvdmVycmlkZShBLCBCKSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIHN1cGVyLmZvbygpOwogICAgfQp9Cg=="}],k0=`

                    Solidity supports multiple inheritance. Contracts can inherit other contract by using the is keyword.

                    Function that is going to be overridden by a child contract must be declared as virtual.

                    Function that is going to override a parent function must use the keyword override.

                    Order of inheritance is important.

                    @@ -9593,7 +9755,7 @@ F D,E return super.foo(); } } -`,Z0=({prev:s,next:a})=>i.jsx(u,{version:A0,title:m0,description:b0,html:k0,prev:s,next:a,codes:w0}),W0="0.8.24",G0="Interface",B0="An example of interface in Solidity",f0=[{fileName:"Interface.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENvdW50ZXIgewogICAgdWludDI1NiBwdWJsaWMgY291bnQ7CgogICAgZnVuY3Rpb24gaW5jcmVtZW50KCkgZXh0ZXJuYWwgewogICAgICAgIGNvdW50ICs9IDE7CiAgICB9Cn0KCmludGVyZmFjZSBJQ291bnRlciB7CiAgICBmdW5jdGlvbiBjb3VudCgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CgogICAgZnVuY3Rpb24gaW5jcmVtZW50KCkgZXh0ZXJuYWw7Cn0KCmNvbnRyYWN0IE15Q29udHJhY3QgewogICAgZnVuY3Rpb24gaW5jcmVtZW50Q291bnRlcihhZGRyZXNzIF9jb3VudGVyKSBleHRlcm5hbCB7CiAgICAgICAgSUNvdW50ZXIoX2NvdW50ZXIpLmluY3JlbWVudCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldENvdW50KGFkZHJlc3MgX2NvdW50ZXIpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBJQ291bnRlcihfY291bnRlcikuY291bnQoKTsKICAgIH0KfQoKLy8gVW5pc3dhcCBleGFtcGxlCmludGVyZmFjZSBVbmlzd2FwVjJGYWN0b3J5IHsKICAgIGZ1bmN0aW9uIGdldFBhaXIoYWRkcmVzcyB0b2tlbkEsIGFkZHJlc3MgdG9rZW5CKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKGFkZHJlc3MgcGFpcik7Cn0KCmludGVyZmFjZSBVbmlzd2FwVjJQYWlyIHsKICAgIGZ1bmN0aW9uIGdldFJlc2VydmVzKCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MTEyIHJlc2VydmUwLCB1aW50MTEyIHJlc2VydmUxLCB1aW50MzIgYmxvY2tUaW1lc3RhbXBMYXN0KTsKfQoKY29udHJhY3QgVW5pc3dhcEV4YW1wbGUgewogICAgYWRkcmVzcyBwcml2YXRlIGZhY3RvcnkgPSAweDVDNjliRWU3MDFlZjgxNGEyQjZhM0VERDRCMTY1MkNCOWNjNWFBNmY7CiAgICBhZGRyZXNzIHByaXZhdGUgZGFpID0gMHg2QjE3NTQ3NEU4OTA5NEM0NERhOThiOTU0RWVkZUFDNDk1MjcxZDBGOwogICAgYWRkcmVzcyBwcml2YXRlIHdldGggPSAweEMwMmFhQTM5YjIyM0ZFOEQwQTBlNUM0RjI3ZUFEOTA4M0M3NTZDYzI7CgogICAgZnVuY3Rpb24gZ2V0VG9rZW5SZXNlcnZlcygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1NiwgdWludDI1NikgewogICAgICAgIGFkZHJlc3MgcGFpciA9IFVuaXN3YXBWMkZhY3RvcnkoZmFjdG9yeSkuZ2V0UGFpcihkYWksIHdldGgpOwogICAgICAgICh1aW50MjU2IHJlc2VydmUwLCB1aW50MjU2IHJlc2VydmUxLCkgPQogICAgICAgICAgICBVbmlzd2FwVjJQYWlyKHBhaXIpLmdldFJlc2VydmVzKCk7CiAgICAgICAgcmV0dXJuIChyZXNlcnZlMCwgcmVzZXJ2ZTEpOwogICAgfQp9Cg=="}],V0=`

                    You can interact with other contracts by declaring an Interface.

                    +`,Z0=({prev:s,next:a})=>i.jsx(u,{version:y0,title:m0,description:b0,html:k0,prev:s,next:a,codes:w0}),W0="0.8.24",G0="Interface",B0="An example of interface in Solidity",V0=[{fileName:"Interface.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IENvdW50ZXIgewogICAgdWludDI1NiBwdWJsaWMgY291bnQ7CgogICAgZnVuY3Rpb24gaW5jcmVtZW50KCkgZXh0ZXJuYWwgewogICAgICAgIGNvdW50ICs9IDE7CiAgICB9Cn0KCmludGVyZmFjZSBJQ291bnRlciB7CiAgICBmdW5jdGlvbiBjb3VudCgpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1Nik7CgogICAgZnVuY3Rpb24gaW5jcmVtZW50KCkgZXh0ZXJuYWw7Cn0KCmNvbnRyYWN0IE15Q29udHJhY3QgewogICAgZnVuY3Rpb24gaW5jcmVtZW50Q291bnRlcihhZGRyZXNzIF9jb3VudGVyKSBleHRlcm5hbCB7CiAgICAgICAgSUNvdW50ZXIoX2NvdW50ZXIpLmluY3JlbWVudCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldENvdW50KGFkZHJlc3MgX2NvdW50ZXIpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBJQ291bnRlcihfY291bnRlcikuY291bnQoKTsKICAgIH0KfQoKLy8gVW5pc3dhcCBleGFtcGxlCmludGVyZmFjZSBVbmlzd2FwVjJGYWN0b3J5IHsKICAgIGZ1bmN0aW9uIGdldFBhaXIoYWRkcmVzcyB0b2tlbkEsIGFkZHJlc3MgdG9rZW5CKQogICAgICAgIGV4dGVybmFsCiAgICAgICAgdmlldwogICAgICAgIHJldHVybnMgKGFkZHJlc3MgcGFpcik7Cn0KCmludGVyZmFjZSBVbmlzd2FwVjJQYWlyIHsKICAgIGZ1bmN0aW9uIGdldFJlc2VydmVzKCkKICAgICAgICBleHRlcm5hbAogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zICh1aW50MTEyIHJlc2VydmUwLCB1aW50MTEyIHJlc2VydmUxLCB1aW50MzIgYmxvY2tUaW1lc3RhbXBMYXN0KTsKfQoKY29udHJhY3QgVW5pc3dhcEV4YW1wbGUgewogICAgYWRkcmVzcyBwcml2YXRlIGZhY3RvcnkgPSAweDVDNjliRWU3MDFlZjgxNGEyQjZhM0VERDRCMTY1MkNCOWNjNWFBNmY7CiAgICBhZGRyZXNzIHByaXZhdGUgZGFpID0gMHg2QjE3NTQ3NEU4OTA5NEM0NERhOThiOTU0RWVkZUFDNDk1MjcxZDBGOwogICAgYWRkcmVzcyBwcml2YXRlIHdldGggPSAweEMwMmFhQTM5YjIyM0ZFOEQwQTBlNUM0RjI3ZUFEOTA4M0M3NTZDYzI7CgogICAgZnVuY3Rpb24gZ2V0VG9rZW5SZXNlcnZlcygpIGV4dGVybmFsIHZpZXcgcmV0dXJucyAodWludDI1NiwgdWludDI1NikgewogICAgICAgIGFkZHJlc3MgcGFpciA9IFVuaXN3YXBWMkZhY3RvcnkoZmFjdG9yeSkuZ2V0UGFpcihkYWksIHdldGgpOwogICAgICAgICh1aW50MjU2IHJlc2VydmUwLCB1aW50MjU2IHJlc2VydmUxLCkgPQogICAgICAgICAgICBVbmlzd2FwVjJQYWlyKHBhaXIpLmdldFJlc2VydmVzKCk7CiAgICAgICAgcmV0dXJuIChyZXNlcnZlMCwgcmVzZXJ2ZTEpOwogICAgfQp9Cg=="}],f0=`

                    You can interact with other contracts by declaring an Interface.

                    Interface

                    • cannot have any functions implemented
                    • @@ -9656,7 +9818,7 @@ F D,E return (reserve0, reserve1); } } -`,Y0=({prev:s,next:a})=>i.jsx(u,{version:W0,title:G0,description:B0,html:V0,prev:s,next:a,codes:f0}),R0="0.8.24",v0="Library",X0="Example of how to write and use libraries in your Solidity code",N0=[{fileName:"Library.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmxpYnJhcnkgTWF0aCB7CiAgICBmdW5jdGlvbiBzcXJ0KHVpbnQyNTYgeSkgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2IHopIHsKICAgICAgICBpZiAoeSA+IDMpIHsKICAgICAgICAgICAgeiA9IHk7CiAgICAgICAgICAgIHVpbnQyNTYgeCA9IHkgLyAyICsgMTsKICAgICAgICAgICAgd2hpbGUgKHggPCB6KSB7CiAgICAgICAgICAgICAgICB6ID0geDsKICAgICAgICAgICAgICAgIHggPSAoeSAvIHggKyB4KSAvIDI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHkgIT0gMCkgewogICAgICAgICAgICB6ID0gMTsKICAgICAgICB9CiAgICAgICAgLy8gZWxzZSB6ID0gMCAoZGVmYXVsdCB2YWx1ZSkKICAgIH0KfQoKY29udHJhY3QgVGVzdE1hdGggewogICAgZnVuY3Rpb24gdGVzdFNxdWFyZVJvb3QodWludDI1NiB4KSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh4KTsKICAgIH0KfQoKLy8gQXJyYXkgZnVuY3Rpb24gdG8gZGVsZXRlIGVsZW1lbnQgYXQgaW5kZXggYW5kIHJlLW9yZ2FuaXplIHRoZSBhcnJheQovLyBzbyB0aGF0IHRoZXJlIGFyZSBubyBnYXBzIGJldHdlZW4gdGhlIGVsZW1lbnRzLgpsaWJyYXJ5IEFycmF5IHsKICAgIGZ1bmN0aW9uIHJlbW92ZSh1aW50MjU2W10gc3RvcmFnZSBhcnIsIHVpbnQyNTYgaW5kZXgpIHB1YmxpYyB7CiAgICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IGludG8gdGhlIHBsYWNlIHRvIGRlbGV0ZQogICAgICAgIHJlcXVpcmUoYXJyLmxlbmd0aCA+IDAsICJDYW4ndCByZW1vdmUgZnJvbSBlbXB0eSBhcnJheSIpOwogICAgICAgIGFycltpbmRleF0gPSBhcnJbYXJyLmxlbmd0aCAtIDFdOwogICAgICAgIGFyci5wb3AoKTsKICAgIH0KfQoKY29udHJhY3QgVGVzdEFycmF5IHsKICAgIHVzaW5nIEFycmF5IGZvciB1aW50MjU2W107CgogICAgdWludDI1NltdIHB1YmxpYyBhcnI7CgogICAgZnVuY3Rpb24gdGVzdEFycmF5UmVtb3ZlKCkgcHVibGljIHsKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgYXJyLnB1c2goaSk7CiAgICAgICAgfQoKICAgICAgICBhcnIucmVtb3ZlKDEpOwoKICAgICAgICBhc3NlcnQoYXJyLmxlbmd0aCA9PSAyKTsKICAgICAgICBhc3NlcnQoYXJyWzBdID09IDApOwogICAgICAgIGFzc2VydChhcnJbMV0gPT0gMik7CiAgICB9Cn0K"}],H0=`

                      Libraries are similar to contracts, but you can't declare any state variable and +`,Y0=({prev:s,next:a})=>i.jsx(u,{version:W0,title:G0,description:B0,html:f0,prev:s,next:a,codes:V0}),R0="0.8.24",X0="Library",v0="Example of how to write and use libraries in your Solidity code",N0=[{fileName:"Library.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmxpYnJhcnkgTWF0aCB7CiAgICBmdW5jdGlvbiBzcXJ0KHVpbnQyNTYgeSkgaW50ZXJuYWwgcHVyZSByZXR1cm5zICh1aW50MjU2IHopIHsKICAgICAgICBpZiAoeSA+IDMpIHsKICAgICAgICAgICAgeiA9IHk7CiAgICAgICAgICAgIHVpbnQyNTYgeCA9IHkgLyAyICsgMTsKICAgICAgICAgICAgd2hpbGUgKHggPCB6KSB7CiAgICAgICAgICAgICAgICB6ID0geDsKICAgICAgICAgICAgICAgIHggPSAoeSAvIHggKyB4KSAvIDI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHkgIT0gMCkgewogICAgICAgICAgICB6ID0gMTsKICAgICAgICB9CiAgICAgICAgLy8gZWxzZSB6ID0gMCAoZGVmYXVsdCB2YWx1ZSkKICAgIH0KfQoKY29udHJhY3QgVGVzdE1hdGggewogICAgZnVuY3Rpb24gdGVzdFNxdWFyZVJvb3QodWludDI1NiB4KSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh4KTsKICAgIH0KfQoKLy8gQXJyYXkgZnVuY3Rpb24gdG8gZGVsZXRlIGVsZW1lbnQgYXQgaW5kZXggYW5kIHJlLW9yZ2FuaXplIHRoZSBhcnJheQovLyBzbyB0aGF0IHRoZXJlIGFyZSBubyBnYXBzIGJldHdlZW4gdGhlIGVsZW1lbnRzLgpsaWJyYXJ5IEFycmF5IHsKICAgIGZ1bmN0aW9uIHJlbW92ZSh1aW50MjU2W10gc3RvcmFnZSBhcnIsIHVpbnQyNTYgaW5kZXgpIHB1YmxpYyB7CiAgICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IGludG8gdGhlIHBsYWNlIHRvIGRlbGV0ZQogICAgICAgIHJlcXVpcmUoYXJyLmxlbmd0aCA+IDAsICJDYW4ndCByZW1vdmUgZnJvbSBlbXB0eSBhcnJheSIpOwogICAgICAgIGFycltpbmRleF0gPSBhcnJbYXJyLmxlbmd0aCAtIDFdOwogICAgICAgIGFyci5wb3AoKTsKICAgIH0KfQoKY29udHJhY3QgVGVzdEFycmF5IHsKICAgIHVzaW5nIEFycmF5IGZvciB1aW50MjU2W107CgogICAgdWludDI1NltdIHB1YmxpYyBhcnI7CgogICAgZnVuY3Rpb24gdGVzdEFycmF5UmVtb3ZlKCkgcHVibGljIHsKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgYXJyLnB1c2goaSk7CiAgICAgICAgfQoKICAgICAgICBhcnIucmVtb3ZlKDEpOwoKICAgICAgICBhc3NlcnQoYXJyLmxlbmd0aCA9PSAyKTsKICAgICAgICBhc3NlcnQoYXJyWzBdID09IDApOwogICAgICAgIGFzc2VydChhcnJbMV0gPT0gMik7CiAgICB9Cn0K"}],H0=`

                      Libraries are similar to contracts, but you can't declare any state variable and you can't send ether.

                      A library is embedded into the contract if all library functions are internal.

                      Otherwise the library must be deployed and then linked before the contract is deployed.

                      @@ -9713,7 +9875,7 @@ you can't send ether.

                      assert(arr[1] == 2); } } -`,F0=({prev:s,next:a})=>i.jsx(u,{version:R0,title:v0,description:X0,html:H0,prev:s,next:a,codes:N0}),K0="0.8.24",S0="For and While Loop",M0="Example of for and while loop in Solidity",x0=[{fileName:"Loop.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IExvb3AgewogICAgZnVuY3Rpb24gbG9vcCgpIHB1YmxpYyB7CiAgICAgICAgLy8gZm9yIGxvb3AKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpID09IDMpIHsKICAgICAgICAgICAgICAgIC8vIFNraXAgdG8gbmV4dCBpdGVyYXRpb24gd2l0aCBjb250aW51ZQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGkgPT0gNSkgewogICAgICAgICAgICAgICAgLy8gRXhpdCBsb29wIHdpdGggYnJlYWsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyB3aGlsZSBsb29wCiAgICAgICAgdWludDI1NiBqOwogICAgICAgIHdoaWxlIChqIDwgMTApIHsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KICAgIH0KfQo="}],J0=`

                      Solidity supports for, while, and do while loops.

                      +`,F0=({prev:s,next:a})=>i.jsx(u,{version:R0,title:X0,description:v0,html:H0,prev:s,next:a,codes:N0}),K0="0.8.24",S0="For and While Loop",M0="Example of for and while loop in Solidity",x0=[{fileName:"Loop.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IExvb3AgewogICAgZnVuY3Rpb24gbG9vcCgpIHB1YmxpYyB7CiAgICAgICAgLy8gZm9yIGxvb3AKICAgICAgICBmb3IgKHVpbnQyNTYgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpID09IDMpIHsKICAgICAgICAgICAgICAgIC8vIFNraXAgdG8gbmV4dCBpdGVyYXRpb24gd2l0aCBjb250aW51ZQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGkgPT0gNSkgewogICAgICAgICAgICAgICAgLy8gRXhpdCBsb29wIHdpdGggYnJlYWsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyB3aGlsZSBsb29wCiAgICAgICAgdWludDI1NiBqOwogICAgICAgIHdoaWxlIChqIDwgMTApIHsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KICAgIH0KfQo="}],J0=`

                      Solidity supports for, while, and do while loops.

                      Don't write loops that are unbounded as this can hit the gas limit, causing your transaction to fail.

                      For the reason above, while and do while loops are rarely used.

                      // SPDX-License-Identifier: MIT
                      @@ -10022,7 +10184,7 @@ you can't send ether.

                      require(sent, "Failed to send Ether"); } } -
                      `,yW=({prev:s,next:a})=>i.jsx(u,{version:dW,title:IW,description:CW,html:uW,prev:s,next:a,codes:jW}),AW="0.8.24",mW="Shadowing Inherited State Variables",bW="An example of shadowing state variables by inheritance",wW=[{fileName:"Shadow.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEEgewogICAgc3RyaW5nIHB1YmxpYyBuYW1lID0gIkNvbnRyYWN0IEEiOwoKICAgIGZ1bmN0aW9uIGdldE5hbWUoKSBwdWJsaWMgdmlldyByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIG5hbWU7CiAgICB9Cn0KCi8vIFNoYWRvd2luZyBpcyBkaXNhbGxvd2VkIGluIFNvbGlkaXR5IDAuNgovLyBUaGlzIHdpbGwgbm90IGNvbXBpbGUKLy8gY29udHJhY3QgQiBpcyBBIHsKLy8gICAgIHN0cmluZyBwdWJsaWMgbmFtZSA9ICJDb250cmFjdCBCIjsKLy8gfQoKY29udHJhY3QgQyBpcyBBIHsKICAgIC8vIFRoaXMgaXMgdGhlIGNvcnJlY3Qgd2F5IHRvIG92ZXJyaWRlIGluaGVyaXRlZCBzdGF0ZSB2YXJpYWJsZXMuCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBuYW1lID0gIkNvbnRyYWN0IEMiOwogICAgfQoKICAgIC8vIEMuZ2V0TmFtZSByZXR1cm5zICJDb250cmFjdCBDIgp9Cg=="}],kW=`

                      Unlike functions, state variables cannot be overridden by re-declaring it +`,AW=({prev:s,next:a})=>i.jsx(u,{version:dW,title:IW,description:CW,html:uW,prev:s,next:a,codes:jW}),yW="0.8.24",mW="Shadowing Inherited State Variables",bW="An example of shadowing state variables by inheritance",wW=[{fileName:"Shadow.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEEgewogICAgc3RyaW5nIHB1YmxpYyBuYW1lID0gIkNvbnRyYWN0IEEiOwoKICAgIGZ1bmN0aW9uIGdldE5hbWUoKSBwdWJsaWMgdmlldyByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIG5hbWU7CiAgICB9Cn0KCi8vIFNoYWRvd2luZyBpcyBkaXNhbGxvd2VkIGluIFNvbGlkaXR5IDAuNgovLyBUaGlzIHdpbGwgbm90IGNvbXBpbGUKLy8gY29udHJhY3QgQiBpcyBBIHsKLy8gICAgIHN0cmluZyBwdWJsaWMgbmFtZSA9ICJDb250cmFjdCBCIjsKLy8gfQoKY29udHJhY3QgQyBpcyBBIHsKICAgIC8vIFRoaXMgaXMgdGhlIGNvcnJlY3Qgd2F5IHRvIG92ZXJyaWRlIGluaGVyaXRlZCBzdGF0ZSB2YXJpYWJsZXMuCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBuYW1lID0gIkNvbnRyYWN0IEMiOwogICAgfQoKICAgIC8vIEMuZ2V0TmFtZSByZXR1cm5zICJDb250cmFjdCBDIgp9Cg=="}],kW=`

                      Unlike functions, state variables cannot be overridden by re-declaring it in the child contract.

                      Let's learn how to correctly override inherited state variables.

                      // SPDX-License-Identifier: MIT
                      @@ -10050,7 +10212,7 @@ in the child contract.

                      // C.getName returns "Contract C" } -
                      `,ZW=({prev:s,next:a})=>i.jsx(u,{version:AW,title:mW,description:bW,html:kW,prev:s,next:a,codes:wW}),WW="0.8.24",GW="Verifying Signature",BW="An example of how to verify signatures in Solidity",fW=[{fileName:"Signature.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qIFNpZ25hdHVyZSBWZXJpZmljYXRpb24KCkhvdyB0byBTaWduIGFuZCBWZXJpZnkKIyBTaWduaW5nCjEuIENyZWF0ZSBtZXNzYWdlIHRvIHNpZ24KMi4gSGFzaCB0aGUgbWVzc2FnZQozLiBTaWduIHRoZSBoYXNoIChvZmYgY2hhaW4sIGtlZXAgeW91ciBwcml2YXRlIGtleSBzZWNyZXQpCgojIFZlcmlmeQoxLiBSZWNyZWF0ZSBoYXNoIGZyb20gdGhlIG9yaWdpbmFsIG1lc3NhZ2UKMi4gUmVjb3ZlciBzaWduZXIgZnJvbSBzaWduYXR1cmUgYW5kIGhhc2gKMy4gQ29tcGFyZSByZWNvdmVyZWQgc2lnbmVyIHRvIGNsYWltZWQgc2lnbmVyCiovCgpjb250cmFjdCBWZXJpZnlTaWduYXR1cmUgewogICAgLyogMS4gVW5sb2NrIE1ldGFNYXNrIGFjY291bnQKICAgIGV0aGVyZXVtLmVuYWJsZSgpCiAgICAqLwoKICAgIC8qIDIuIEdldCBtZXNzYWdlIGhhc2ggdG8gc2lnbgogICAgZ2V0TWVzc2FnZUhhc2goCiAgICAgICAgMHgxNDcyM0EwOUFDZmY2RDJBNjBEY2RGN2FBNEFGZjMwOEZEREMxNjBDLAogICAgICAgIDEyMywKICAgICAgICAiY29mZmVlIGFuZCBkb251dHMiLAogICAgICAgIDEKICAgICkKCiAgICBoYXNoID0gIjB4Y2YzNmFjNGY5N2RjMTBkOTFmYzJjYmIyMGQ3MThlOTRhOGNiZmUwZjgyZWFlZGM2YTRhYTM4OTQ2ZmI3OTdjZCIKICAgICovCiAgICBmdW5jdGlvbiBnZXRNZXNzYWdlSGFzaCgKICAgICAgICBhZGRyZXNzIF90bywKICAgICAgICB1aW50MjU2IF9hbW91bnQsCiAgICAgICAgc3RyaW5nIG1lbW9yeSBfbWVzc2FnZSwKICAgICAgICB1aW50MjU2IF9ub25jZQogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zIChieXRlczMyKSB7CiAgICAgICAgcmV0dXJuIGtlY2NhazI1NihhYmkuZW5jb2RlUGFja2VkKF90bywgX2Ftb3VudCwgX21lc3NhZ2UsIF9ub25jZSkpOwogICAgfQoKICAgIC8qIDMuIFNpZ24gbWVzc2FnZSBoYXNoCiAgICAjIHVzaW5nIGJyb3dzZXIKICAgIGFjY291bnQgPSAiY29weSBwYXN0ZSBhY2NvdW50IG9mIHNpZ25lciBoZXJlIgogICAgZXRoZXJldW0ucmVxdWVzdCh7IG1ldGhvZDogInBlcnNvbmFsX3NpZ24iLCBwYXJhbXM6IFthY2NvdW50LCBoYXNoXX0pLnRoZW4oY29uc29sZS5sb2cpCgogICAgIyB1c2luZyB3ZWIzCiAgICB3ZWIzLnBlcnNvbmFsLnNpZ24oaGFzaCwgd2ViMy5ldGguZGVmYXVsdEFjY291bnQsIGNvbnNvbGUubG9nKQoKICAgIFNpZ25hdHVyZSB3aWxsIGJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGFjY291bnRzCiAgICAweDk5M2RhYjNkZDkxZjVjNmRjMjhlMTc0MzliZTQ3NTQ3OGY1NjM1YzkyYTU2ZTE3ZTgyMzQ5ZDNmYjJmMTY2MTk2ZjQ2NmMwYjRlMGMxNDZmMjg1MjA0ZjBkY2IxM2U1YWU2N2JjMzNmNGI4ODhlYzMyZGZlMGEwNjNlOGYzZjc4MWIKICAgICovCiAgICBmdW5jdGlvbiBnZXRFdGhTaWduZWRNZXNzYWdlSGFzaChieXRlczMyIF9tZXNzYWdlSGFzaCkKICAgICAgICBwdWJsaWMKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoYnl0ZXMzMikKICAgIHsKICAgICAgICAvKgogICAgICAgIFNpZ25hdHVyZSBpcyBwcm9kdWNlZCBieSBzaWduaW5nIGEga2VjY2FrMjU2IGhhc2ggd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKICAgICAgICAiXHgxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlXG4iICsgbGVuKG1zZykgKyBtc2cKICAgICAgICAqLwogICAgICAgIHJldHVybiBrZWNjYWsyNTYoCiAgICAgICAgICAgIGFiaS5lbmNvZGVQYWNrZWQoIlx4MTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcbjMyIiwgX21lc3NhZ2VIYXNoKQogICAgICAgICk7CiAgICB9CgogICAgLyogNC4gVmVyaWZ5IHNpZ25hdHVyZQogICAgc2lnbmVyID0gMHhCMjczMjE2QzA1QThjMEQ0RjBhNERkMGQ3QmFlMUQyRWZGRTYzNmRkCiAgICB0byA9IDB4MTQ3MjNBMDlBQ2ZmNkQyQTYwRGNkRjdhQTRBRmYzMDhGRERDMTYwQwogICAgYW1vdW50ID0gMTIzCiAgICBtZXNzYWdlID0gImNvZmZlZSBhbmQgZG9udXRzIgogICAgbm9uY2UgPSAxCiAgICBzaWduYXR1cmUgPQogICAgICAgIDB4OTkzZGFiM2RkOTFmNWM2ZGMyOGUxNzQzOWJlNDc1NDc4ZjU2MzVjOTJhNTZlMTdlODIzNDlkM2ZiMmYxNjYxOTZmNDY2YzBiNGUwYzE0NmYyODUyMDRmMGRjYjEzZTVhZTY3YmMzM2Y0Yjg4OGVjMzJkZmUwYTA2M2U4ZjNmNzgxYgogICAgKi8KICAgIGZ1bmN0aW9uIHZlcmlmeSgKICAgICAgICBhZGRyZXNzIF9zaWduZXIsCiAgICAgICAgYWRkcmVzcyBfdG8sCiAgICAgICAgdWludDI1NiBfYW1vdW50LAogICAgICAgIHN0cmluZyBtZW1vcnkgX21lc3NhZ2UsCiAgICAgICAgdWludDI1NiBfbm9uY2UsCiAgICAgICAgYnl0ZXMgbWVtb3J5IHNpZ25hdHVyZQogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zIChib29sKSB7CiAgICAgICAgYnl0ZXMzMiBtZXNzYWdlSGFzaCA9IGdldE1lc3NhZ2VIYXNoKF90bywgX2Ftb3VudCwgX21lc3NhZ2UsIF9ub25jZSk7CiAgICAgICAgYnl0ZXMzMiBldGhTaWduZWRNZXNzYWdlSGFzaCA9IGdldEV0aFNpZ25lZE1lc3NhZ2VIYXNoKG1lc3NhZ2VIYXNoKTsKCiAgICAgICAgcmV0dXJuIHJlY292ZXJTaWduZXIoZXRoU2lnbmVkTWVzc2FnZUhhc2gsIHNpZ25hdHVyZSkgPT0gX3NpZ25lcjsKICAgIH0KCiAgICBmdW5jdGlvbiByZWNvdmVyU2lnbmVyKAogICAgICAgIGJ5dGVzMzIgX2V0aFNpZ25lZE1lc3NhZ2VIYXNoLAogICAgICAgIGJ5dGVzIG1lbW9yeSBfc2lnbmF0dXJlCiAgICApIHB1YmxpYyBwdXJlIHJldHVybnMgKGFkZHJlc3MpIHsKICAgICAgICAoYnl0ZXMzMiByLCBieXRlczMyIHMsIHVpbnQ4IHYpID0gc3BsaXRTaWduYXR1cmUoX3NpZ25hdHVyZSk7CgogICAgICAgIHJldHVybiBlY3JlY292ZXIoX2V0aFNpZ25lZE1lc3NhZ2VIYXNoLCB2LCByLCBzKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzcGxpdFNpZ25hdHVyZShieXRlcyBtZW1vcnkgc2lnKQogICAgICAgIHB1YmxpYwogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlczMyIHIsIGJ5dGVzMzIgcywgdWludDggdikKICAgIHsKICAgICAgICByZXF1aXJlKHNpZy5sZW5ndGggPT0gNjUsICJpbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgiKTsKCiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICAvKgogICAgICAgICAgICBGaXJzdCAzMiBieXRlcyBzdG9yZXMgdGhlIGxlbmd0aCBvZiB0aGUgc2lnbmF0dXJlCgogICAgICAgICAgICBhZGQoc2lnLCAzMikgPSBwb2ludGVyIG9mIHNpZyArIDMyCiAgICAgICAgICAgIGVmZmVjdGl2ZWx5LCBza2lwcyBmaXJzdCAzMiBieXRlcyBvZiBzaWduYXR1cmUKCiAgICAgICAgICAgIG1sb2FkKHApIGxvYWRzIG5leHQgMzIgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIG1lbW9yeSBhZGRyZXNzIHAgaW50byBtZW1vcnkKICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIC8vIGZpcnN0IDMyIGJ5dGVzLCBhZnRlciB0aGUgbGVuZ3RoIHByZWZpeAogICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWcsIDMyKSkKICAgICAgICAgICAgLy8gc2Vjb25kIDMyIGJ5dGVzCiAgICAgICAgICAgIHMgOj0gbWxvYWQoYWRkKHNpZywgNjQpKQogICAgICAgICAgICAvLyBmaW5hbCBieXRlIChmaXJzdCBieXRlIG9mIHRoZSBuZXh0IDMyIGJ5dGVzKQogICAgICAgICAgICB2IDo9IGJ5dGUoMCwgbWxvYWQoYWRkKHNpZywgOTYpKSkKICAgICAgICB9CgogICAgICAgIC8vIGltcGxpY2l0bHkgcmV0dXJuIChyLCBzLCB2KQogICAgfQp9Cg=="}],VW=`

                      Messages can be signed off chain and then verified on chain using a smart contract.

                      +`,ZW=({prev:s,next:a})=>i.jsx(u,{version:yW,title:mW,description:bW,html:kW,prev:s,next:a,codes:wW}),WW="0.8.24",GW="Verifying Signature",BW="An example of how to verify signatures in Solidity",VW=[{fileName:"Signature.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCi8qIFNpZ25hdHVyZSBWZXJpZmljYXRpb24KCkhvdyB0byBTaWduIGFuZCBWZXJpZnkKIyBTaWduaW5nCjEuIENyZWF0ZSBtZXNzYWdlIHRvIHNpZ24KMi4gSGFzaCB0aGUgbWVzc2FnZQozLiBTaWduIHRoZSBoYXNoIChvZmYgY2hhaW4sIGtlZXAgeW91ciBwcml2YXRlIGtleSBzZWNyZXQpCgojIFZlcmlmeQoxLiBSZWNyZWF0ZSBoYXNoIGZyb20gdGhlIG9yaWdpbmFsIG1lc3NhZ2UKMi4gUmVjb3ZlciBzaWduZXIgZnJvbSBzaWduYXR1cmUgYW5kIGhhc2gKMy4gQ29tcGFyZSByZWNvdmVyZWQgc2lnbmVyIHRvIGNsYWltZWQgc2lnbmVyCiovCgpjb250cmFjdCBWZXJpZnlTaWduYXR1cmUgewogICAgLyogMS4gVW5sb2NrIE1ldGFNYXNrIGFjY291bnQKICAgIGV0aGVyZXVtLmVuYWJsZSgpCiAgICAqLwoKICAgIC8qIDIuIEdldCBtZXNzYWdlIGhhc2ggdG8gc2lnbgogICAgZ2V0TWVzc2FnZUhhc2goCiAgICAgICAgMHgxNDcyM0EwOUFDZmY2RDJBNjBEY2RGN2FBNEFGZjMwOEZEREMxNjBDLAogICAgICAgIDEyMywKICAgICAgICAiY29mZmVlIGFuZCBkb251dHMiLAogICAgICAgIDEKICAgICkKCiAgICBoYXNoID0gIjB4Y2YzNmFjNGY5N2RjMTBkOTFmYzJjYmIyMGQ3MThlOTRhOGNiZmUwZjgyZWFlZGM2YTRhYTM4OTQ2ZmI3OTdjZCIKICAgICovCiAgICBmdW5jdGlvbiBnZXRNZXNzYWdlSGFzaCgKICAgICAgICBhZGRyZXNzIF90bywKICAgICAgICB1aW50MjU2IF9hbW91bnQsCiAgICAgICAgc3RyaW5nIG1lbW9yeSBfbWVzc2FnZSwKICAgICAgICB1aW50MjU2IF9ub25jZQogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zIChieXRlczMyKSB7CiAgICAgICAgcmV0dXJuIGtlY2NhazI1NihhYmkuZW5jb2RlUGFja2VkKF90bywgX2Ftb3VudCwgX21lc3NhZ2UsIF9ub25jZSkpOwogICAgfQoKICAgIC8qIDMuIFNpZ24gbWVzc2FnZSBoYXNoCiAgICAjIHVzaW5nIGJyb3dzZXIKICAgIGFjY291bnQgPSAiY29weSBwYXN0ZSBhY2NvdW50IG9mIHNpZ25lciBoZXJlIgogICAgZXRoZXJldW0ucmVxdWVzdCh7IG1ldGhvZDogInBlcnNvbmFsX3NpZ24iLCBwYXJhbXM6IFthY2NvdW50LCBoYXNoXX0pLnRoZW4oY29uc29sZS5sb2cpCgogICAgIyB1c2luZyB3ZWIzCiAgICB3ZWIzLnBlcnNvbmFsLnNpZ24oaGFzaCwgd2ViMy5ldGguZGVmYXVsdEFjY291bnQsIGNvbnNvbGUubG9nKQoKICAgIFNpZ25hdHVyZSB3aWxsIGJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGFjY291bnRzCiAgICAweDk5M2RhYjNkZDkxZjVjNmRjMjhlMTc0MzliZTQ3NTQ3OGY1NjM1YzkyYTU2ZTE3ZTgyMzQ5ZDNmYjJmMTY2MTk2ZjQ2NmMwYjRlMGMxNDZmMjg1MjA0ZjBkY2IxM2U1YWU2N2JjMzNmNGI4ODhlYzMyZGZlMGEwNjNlOGYzZjc4MWIKICAgICovCiAgICBmdW5jdGlvbiBnZXRFdGhTaWduZWRNZXNzYWdlSGFzaChieXRlczMyIF9tZXNzYWdlSGFzaCkKICAgICAgICBwdWJsaWMKICAgICAgICBwdXJlCiAgICAgICAgcmV0dXJucyAoYnl0ZXMzMikKICAgIHsKICAgICAgICAvKgogICAgICAgIFNpZ25hdHVyZSBpcyBwcm9kdWNlZCBieSBzaWduaW5nIGEga2VjY2FrMjU2IGhhc2ggd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKICAgICAgICAiXHgxOUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlXG4iICsgbGVuKG1zZykgKyBtc2cKICAgICAgICAqLwogICAgICAgIHJldHVybiBrZWNjYWsyNTYoCiAgICAgICAgICAgIGFiaS5lbmNvZGVQYWNrZWQoIlx4MTlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZTpcbjMyIiwgX21lc3NhZ2VIYXNoKQogICAgICAgICk7CiAgICB9CgogICAgLyogNC4gVmVyaWZ5IHNpZ25hdHVyZQogICAgc2lnbmVyID0gMHhCMjczMjE2QzA1QThjMEQ0RjBhNERkMGQ3QmFlMUQyRWZGRTYzNmRkCiAgICB0byA9IDB4MTQ3MjNBMDlBQ2ZmNkQyQTYwRGNkRjdhQTRBRmYzMDhGRERDMTYwQwogICAgYW1vdW50ID0gMTIzCiAgICBtZXNzYWdlID0gImNvZmZlZSBhbmQgZG9udXRzIgogICAgbm9uY2UgPSAxCiAgICBzaWduYXR1cmUgPQogICAgICAgIDB4OTkzZGFiM2RkOTFmNWM2ZGMyOGUxNzQzOWJlNDc1NDc4ZjU2MzVjOTJhNTZlMTdlODIzNDlkM2ZiMmYxNjYxOTZmNDY2YzBiNGUwYzE0NmYyODUyMDRmMGRjYjEzZTVhZTY3YmMzM2Y0Yjg4OGVjMzJkZmUwYTA2M2U4ZjNmNzgxYgogICAgKi8KICAgIGZ1bmN0aW9uIHZlcmlmeSgKICAgICAgICBhZGRyZXNzIF9zaWduZXIsCiAgICAgICAgYWRkcmVzcyBfdG8sCiAgICAgICAgdWludDI1NiBfYW1vdW50LAogICAgICAgIHN0cmluZyBtZW1vcnkgX21lc3NhZ2UsCiAgICAgICAgdWludDI1NiBfbm9uY2UsCiAgICAgICAgYnl0ZXMgbWVtb3J5IHNpZ25hdHVyZQogICAgKSBwdWJsaWMgcHVyZSByZXR1cm5zIChib29sKSB7CiAgICAgICAgYnl0ZXMzMiBtZXNzYWdlSGFzaCA9IGdldE1lc3NhZ2VIYXNoKF90bywgX2Ftb3VudCwgX21lc3NhZ2UsIF9ub25jZSk7CiAgICAgICAgYnl0ZXMzMiBldGhTaWduZWRNZXNzYWdlSGFzaCA9IGdldEV0aFNpZ25lZE1lc3NhZ2VIYXNoKG1lc3NhZ2VIYXNoKTsKCiAgICAgICAgcmV0dXJuIHJlY292ZXJTaWduZXIoZXRoU2lnbmVkTWVzc2FnZUhhc2gsIHNpZ25hdHVyZSkgPT0gX3NpZ25lcjsKICAgIH0KCiAgICBmdW5jdGlvbiByZWNvdmVyU2lnbmVyKAogICAgICAgIGJ5dGVzMzIgX2V0aFNpZ25lZE1lc3NhZ2VIYXNoLAogICAgICAgIGJ5dGVzIG1lbW9yeSBfc2lnbmF0dXJlCiAgICApIHB1YmxpYyBwdXJlIHJldHVybnMgKGFkZHJlc3MpIHsKICAgICAgICAoYnl0ZXMzMiByLCBieXRlczMyIHMsIHVpbnQ4IHYpID0gc3BsaXRTaWduYXR1cmUoX3NpZ25hdHVyZSk7CgogICAgICAgIHJldHVybiBlY3JlY292ZXIoX2V0aFNpZ25lZE1lc3NhZ2VIYXNoLCB2LCByLCBzKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzcGxpdFNpZ25hdHVyZShieXRlcyBtZW1vcnkgc2lnKQogICAgICAgIHB1YmxpYwogICAgICAgIHB1cmUKICAgICAgICByZXR1cm5zIChieXRlczMyIHIsIGJ5dGVzMzIgcywgdWludDggdikKICAgIHsKICAgICAgICByZXF1aXJlKHNpZy5sZW5ndGggPT0gNjUsICJpbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGgiKTsKCiAgICAgICAgYXNzZW1ibHkgewogICAgICAgICAgICAvKgogICAgICAgICAgICBGaXJzdCAzMiBieXRlcyBzdG9yZXMgdGhlIGxlbmd0aCBvZiB0aGUgc2lnbmF0dXJlCgogICAgICAgICAgICBhZGQoc2lnLCAzMikgPSBwb2ludGVyIG9mIHNpZyArIDMyCiAgICAgICAgICAgIGVmZmVjdGl2ZWx5LCBza2lwcyBmaXJzdCAzMiBieXRlcyBvZiBzaWduYXR1cmUKCiAgICAgICAgICAgIG1sb2FkKHApIGxvYWRzIG5leHQgMzIgYnl0ZXMgc3RhcnRpbmcgYXQgdGhlIG1lbW9yeSBhZGRyZXNzIHAgaW50byBtZW1vcnkKICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIC8vIGZpcnN0IDMyIGJ5dGVzLCBhZnRlciB0aGUgbGVuZ3RoIHByZWZpeAogICAgICAgICAgICByIDo9IG1sb2FkKGFkZChzaWcsIDMyKSkKICAgICAgICAgICAgLy8gc2Vjb25kIDMyIGJ5dGVzCiAgICAgICAgICAgIHMgOj0gbWxvYWQoYWRkKHNpZywgNjQpKQogICAgICAgICAgICAvLyBmaW5hbCBieXRlIChmaXJzdCBieXRlIG9mIHRoZSBuZXh0IDMyIGJ5dGVzKQogICAgICAgICAgICB2IDo9IGJ5dGUoMCwgbWxvYWQoYWRkKHNpZywgOTYpKSkKICAgICAgICB9CgogICAgICAgIC8vIGltcGxpY2l0bHkgcmV0dXJuIChyLCBzLCB2KQogICAgfQp9Cg=="}],fW=`

                      Messages can be signed off chain and then verified on chain using a smart contract.

                      Example using ethers.js

                      // SPDX-License-Identifier: MIT
                       pragma solidity ^0.8.24;
                      @@ -10178,7 +10340,7 @@ How to Sign and Verify
                               // implicitly return (r, s, v)
                           }
                       }
                      -
                      `,YW=({prev:s,next:a})=>i.jsx(u,{version:WW,title:GW,description:BW,html:VW,prev:s,next:a,codes:fW}),RW="0.8.24",vW="Reading and Writing to a State Variable",XW="Reading and Writing to a State Variable",NW=[{fileName:"SimpleStorage.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFNpbXBsZVN0b3JhZ2UgewogICAgLy8gU3RhdGUgdmFyaWFibGUgdG8gc3RvcmUgYSBudW1iZXIKICAgIHVpbnQyNTYgcHVibGljIG51bTsKCiAgICAvLyBZb3UgbmVlZCB0byBzZW5kIGEgdHJhbnNhY3Rpb24gdG8gd3JpdGUgdG8gYSBzdGF0ZSB2YXJpYWJsZS4KICAgIGZ1bmN0aW9uIHNldCh1aW50MjU2IF9udW0pIHB1YmxpYyB7CiAgICAgICAgbnVtID0gX251bTsKICAgIH0KCiAgICAvLyBZb3UgY2FuIHJlYWQgZnJvbSBhIHN0YXRlIHZhcmlhYmxlIHdpdGhvdXQgc2VuZGluZyBhIHRyYW5zYWN0aW9uLgogICAgZnVuY3Rpb24gZ2V0KCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBudW07CiAgICB9Cn0K"}],HW=`

                      To write or update a state variable you need to send a transaction.

                      +`,YW=({prev:s,next:a})=>i.jsx(u,{version:WW,title:GW,description:BW,html:fW,prev:s,next:a,codes:VW}),RW="0.8.24",XW="Reading and Writing to a State Variable",vW="Reading and Writing to a State Variable",NW=[{fileName:"SimpleStorage.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFNpbXBsZVN0b3JhZ2UgewogICAgLy8gU3RhdGUgdmFyaWFibGUgdG8gc3RvcmUgYSBudW1iZXIKICAgIHVpbnQyNTYgcHVibGljIG51bTsKCiAgICAvLyBZb3UgbmVlZCB0byBzZW5kIGEgdHJhbnNhY3Rpb24gdG8gd3JpdGUgdG8gYSBzdGF0ZSB2YXJpYWJsZS4KICAgIGZ1bmN0aW9uIHNldCh1aW50MjU2IF9udW0pIHB1YmxpYyB7CiAgICAgICAgbnVtID0gX251bTsKICAgIH0KCiAgICAvLyBZb3UgY2FuIHJlYWQgZnJvbSBhIHN0YXRlIHZhcmlhYmxlIHdpdGhvdXQgc2VuZGluZyBhIHRyYW5zYWN0aW9uLgogICAgZnVuY3Rpb24gZ2V0KCkgcHVibGljIHZpZXcgcmV0dXJucyAodWludDI1NikgewogICAgICAgIHJldHVybiBudW07CiAgICB9Cn0K"}],HW=`

                      To write or update a state variable you need to send a transaction.

                      On the other hand, you can read state variables, for free, without any transaction fee.

                      // SPDX-License-Identifier: MIT
                       pragma solidity ^0.8.24;
                      @@ -10197,7 +10359,7 @@ How to Sign and Verify
                               return num;
                           }
                       }
                      -
                      `,FW=({prev:s,next:a})=>i.jsx(u,{version:RW,title:vW,description:XW,html:HW,prev:s,next:a,codes:NW}),KW="0.8.24",SW="Structs",MW="An example of how to use structs in Solidity",xW=[{fileName:"StructDeclaration.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKLy8gVGhpcyBpcyBzYXZlZCAnU3RydWN0RGVjbGFyYXRpb24uc29sJwoKc3RydWN0IFRvZG8gewogICAgc3RyaW5nIHRleHQ7CiAgICBib29sIGNvbXBsZXRlZDsKfQo="},{fileName:"StructImport.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9TdHJ1Y3REZWNsYXJhdGlvbi5zb2wiOwoKY29udHJhY3QgVG9kb3MgewogICAgLy8gQW4gYXJyYXkgb2YgJ1RvZG8nIHN0cnVjdHMKICAgIFRvZG9bXSBwdWJsaWMgdG9kb3M7Cn0K"},{fileName:"Structs.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFRvZG9zIHsKICAgIHN0cnVjdCBUb2RvIHsKICAgICAgICBzdHJpbmcgdGV4dDsKICAgICAgICBib29sIGNvbXBsZXRlZDsKICAgIH0KCiAgICAvLyBBbiBhcnJheSBvZiAnVG9kbycgc3RydWN0cwogICAgVG9kb1tdIHB1YmxpYyB0b2RvczsKCiAgICBmdW5jdGlvbiBjcmVhdGUoc3RyaW5nIGNhbGxkYXRhIF90ZXh0KSBwdWJsaWMgewogICAgICAgIC8vIDMgd2F5cyB0byBpbml0aWFsaXplIGEgc3RydWN0CiAgICAgICAgLy8gLSBjYWxsaW5nIGl0IGxpa2UgYSBmdW5jdGlvbgogICAgICAgIHRvZG9zLnB1c2goVG9kbyhfdGV4dCwgZmFsc2UpKTsKCiAgICAgICAgLy8ga2V5IHZhbHVlIG1hcHBpbmcKICAgICAgICB0b2Rvcy5wdXNoKFRvZG8oe3RleHQ6IF90ZXh0LCBjb21wbGV0ZWQ6IGZhbHNlfSkpOwoKICAgICAgICAvLyBpbml0aWFsaXplIGFuIGVtcHR5IHN0cnVjdCBhbmQgdGhlbiB1cGRhdGUgaXQKICAgICAgICBUb2RvIG1lbW9yeSB0b2RvOwogICAgICAgIHRvZG8udGV4dCA9IF90ZXh0OwogICAgICAgIC8vIHRvZG8uY29tcGxldGVkIGluaXRpYWxpemVkIHRvIGZhbHNlCgogICAgICAgIHRvZG9zLnB1c2godG9kbyk7CiAgICB9CgogICAgLy8gU29saWRpdHkgYXV0b21hdGljYWxseSBjcmVhdGVkIGEgZ2V0dGVyIGZvciAndG9kb3MnIHNvCiAgICAvLyB5b3UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGlzIGZ1bmN0aW9uLgogICAgZnVuY3Rpb24gZ2V0KHVpbnQyNTYgX2luZGV4KQogICAgICAgIHB1YmxpYwogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChzdHJpbmcgbWVtb3J5IHRleHQsIGJvb2wgY29tcGxldGVkKQogICAgewogICAgICAgIFRvZG8gc3RvcmFnZSB0b2RvID0gdG9kb3NbX2luZGV4XTsKICAgICAgICByZXR1cm4gKHRvZG8udGV4dCwgdG9kby5jb21wbGV0ZWQpOwogICAgfQoKICAgIC8vIHVwZGF0ZSB0ZXh0CiAgICBmdW5jdGlvbiB1cGRhdGVUZXh0KHVpbnQyNTYgX2luZGV4LCBzdHJpbmcgY2FsbGRhdGEgX3RleHQpIHB1YmxpYyB7CiAgICAgICAgVG9kbyBzdG9yYWdlIHRvZG8gPSB0b2Rvc1tfaW5kZXhdOwogICAgICAgIHRvZG8udGV4dCA9IF90ZXh0OwogICAgfQoKICAgIC8vIHVwZGF0ZSBjb21wbGV0ZWQKICAgIGZ1bmN0aW9uIHRvZ2dsZUNvbXBsZXRlZCh1aW50MjU2IF9pbmRleCkgcHVibGljIHsKICAgICAgICBUb2RvIHN0b3JhZ2UgdG9kbyA9IHRvZG9zW19pbmRleF07CiAgICAgICAgdG9kby5jb21wbGV0ZWQgPSAhdG9kby5jb21wbGV0ZWQ7CiAgICB9Cn0K"}],JW=`

                      You can define your own type by creating a struct.

                      +`,FW=({prev:s,next:a})=>i.jsx(u,{version:RW,title:XW,description:vW,html:HW,prev:s,next:a,codes:NW}),KW="0.8.24",SW="Structs",MW="An example of how to use structs in Solidity",xW=[{fileName:"StructDeclaration.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKLy8gVGhpcyBpcyBzYXZlZCAnU3RydWN0RGVjbGFyYXRpb24uc29sJwoKc3RydWN0IFRvZG8gewogICAgc3RyaW5nIHRleHQ7CiAgICBib29sIGNvbXBsZXRlZDsKfQo="},{fileName:"StructImport.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmltcG9ydCAiLi9TdHJ1Y3REZWNsYXJhdGlvbi5zb2wiOwoKY29udHJhY3QgVG9kb3MgewogICAgLy8gQW4gYXJyYXkgb2YgJ1RvZG8nIHN0cnVjdHMKICAgIFRvZG9bXSBwdWJsaWMgdG9kb3M7Cn0K"},{fileName:"Structs.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFRvZG9zIHsKICAgIHN0cnVjdCBUb2RvIHsKICAgICAgICBzdHJpbmcgdGV4dDsKICAgICAgICBib29sIGNvbXBsZXRlZDsKICAgIH0KCiAgICAvLyBBbiBhcnJheSBvZiAnVG9kbycgc3RydWN0cwogICAgVG9kb1tdIHB1YmxpYyB0b2RvczsKCiAgICBmdW5jdGlvbiBjcmVhdGUoc3RyaW5nIGNhbGxkYXRhIF90ZXh0KSBwdWJsaWMgewogICAgICAgIC8vIDMgd2F5cyB0byBpbml0aWFsaXplIGEgc3RydWN0CiAgICAgICAgLy8gLSBjYWxsaW5nIGl0IGxpa2UgYSBmdW5jdGlvbgogICAgICAgIHRvZG9zLnB1c2goVG9kbyhfdGV4dCwgZmFsc2UpKTsKCiAgICAgICAgLy8ga2V5IHZhbHVlIG1hcHBpbmcKICAgICAgICB0b2Rvcy5wdXNoKFRvZG8oe3RleHQ6IF90ZXh0LCBjb21wbGV0ZWQ6IGZhbHNlfSkpOwoKICAgICAgICAvLyBpbml0aWFsaXplIGFuIGVtcHR5IHN0cnVjdCBhbmQgdGhlbiB1cGRhdGUgaXQKICAgICAgICBUb2RvIG1lbW9yeSB0b2RvOwogICAgICAgIHRvZG8udGV4dCA9IF90ZXh0OwogICAgICAgIC8vIHRvZG8uY29tcGxldGVkIGluaXRpYWxpemVkIHRvIGZhbHNlCgogICAgICAgIHRvZG9zLnB1c2godG9kbyk7CiAgICB9CgogICAgLy8gU29saWRpdHkgYXV0b21hdGljYWxseSBjcmVhdGVkIGEgZ2V0dGVyIGZvciAndG9kb3MnIHNvCiAgICAvLyB5b3UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGlzIGZ1bmN0aW9uLgogICAgZnVuY3Rpb24gZ2V0KHVpbnQyNTYgX2luZGV4KQogICAgICAgIHB1YmxpYwogICAgICAgIHZpZXcKICAgICAgICByZXR1cm5zIChzdHJpbmcgbWVtb3J5IHRleHQsIGJvb2wgY29tcGxldGVkKQogICAgewogICAgICAgIFRvZG8gc3RvcmFnZSB0b2RvID0gdG9kb3NbX2luZGV4XTsKICAgICAgICByZXR1cm4gKHRvZG8udGV4dCwgdG9kby5jb21wbGV0ZWQpOwogICAgfQoKICAgIC8vIHVwZGF0ZSB0ZXh0CiAgICBmdW5jdGlvbiB1cGRhdGVUZXh0KHVpbnQyNTYgX2luZGV4LCBzdHJpbmcgY2FsbGRhdGEgX3RleHQpIHB1YmxpYyB7CiAgICAgICAgVG9kbyBzdG9yYWdlIHRvZG8gPSB0b2Rvc1tfaW5kZXhdOwogICAgICAgIHRvZG8udGV4dCA9IF90ZXh0OwogICAgfQoKICAgIC8vIHVwZGF0ZSBjb21wbGV0ZWQKICAgIGZ1bmN0aW9uIHRvZ2dsZUNvbXBsZXRlZCh1aW50MjU2IF9pbmRleCkgcHVibGljIHsKICAgICAgICBUb2RvIHN0b3JhZ2UgdG9kbyA9IHRvZG9zW19pbmRleF07CiAgICAgICAgdG9kby5jb21wbGV0ZWQgPSAhdG9kby5jb21wbGV0ZWQ7CiAgICB9Cn0K"}],JW=`

                      You can define your own type by creating a struct.

                      They are useful for grouping together related data.

                      Structs can be declared outside of a contract and imported in another contract.

                      // SPDX-License-Identifier: MIT
                      @@ -10602,7 +10764,7 @@ echidna-test EchidnaTestTimeAndCaller.sol --contract EchidnaTestTimeAndCaller
                               address sender = msg.sender; // address of the caller
                           }
                       }
                      -
                      `,y2=({prev:s,next:a})=>i.jsx(u,{version:d2,title:I2,description:C2,html:u2,prev:s,next:a,codes:j2}),A2="0.8.24",m2="View and Pure Functions",b2="An example of view and pure functions in Solidity",w2=[{fileName:"ViewAndPureFunctions.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFZpZXdBbmRQdXJlIHsKICAgIHVpbnQyNTYgcHVibGljIHggPSAxOwoKICAgIC8vIFByb21pc2Ugbm90IHRvIG1vZGlmeSB0aGUgc3RhdGUuCiAgICBmdW5jdGlvbiBhZGRUb1godWludDI1NiB5KSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIHggKyB5OwogICAgfQoKICAgIC8vIFByb21pc2Ugbm90IHRvIG1vZGlmeSBvciByZWFkIGZyb20gdGhlIHN0YXRlLgogICAgZnVuY3Rpb24gYWRkKHVpbnQyNTYgaSwgdWludDI1NiBqKSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIGkgKyBqOwogICAgfQp9Cg=="}],k2=`

                      Getter functions can be declared view or pure.

                      +`,A2=({prev:s,next:a})=>i.jsx(u,{version:d2,title:I2,description:C2,html:u2,prev:s,next:a,codes:j2}),y2="0.8.24",m2="View and Pure Functions",b2="An example of view and pure functions in Solidity",w2=[{fileName:"ViewAndPureFunctions.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IFZpZXdBbmRQdXJlIHsKICAgIHVpbnQyNTYgcHVibGljIHggPSAxOwoKICAgIC8vIFByb21pc2Ugbm90IHRvIG1vZGlmeSB0aGUgc3RhdGUuCiAgICBmdW5jdGlvbiBhZGRUb1godWludDI1NiB5KSBwdWJsaWMgdmlldyByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIHggKyB5OwogICAgfQoKICAgIC8vIFByb21pc2Ugbm90IHRvIG1vZGlmeSBvciByZWFkIGZyb20gdGhlIHN0YXRlLgogICAgZnVuY3Rpb24gYWRkKHVpbnQyNTYgaSwgdWludDI1NiBqKSBwdWJsaWMgcHVyZSByZXR1cm5zICh1aW50MjU2KSB7CiAgICAgICAgcmV0dXJuIGkgKyBqOwogICAgfQp9Cg=="}],k2=`

                      Getter functions can be declared view or pure.

                      View function declares that no state will be changed.

                      Pure function declares that no state variable will be changed or read.

                      // SPDX-License-Identifier: MIT
                      @@ -10621,7 +10783,7 @@ echidna-test EchidnaTestTimeAndCaller.sol --contract EchidnaTestTimeAndCaller
                               return i + j;
                           }
                       }
                      -
                      `,Z2=({prev:s,next:a})=>i.jsx(u,{version:A2,title:m2,description:b2,html:k2,prev:s,next:a,codes:w2}),W2="0.8.24",G2="Visibility",B2="An example of external, internal, private and public functions in Solidity",f2=[{fileName:"Visibility.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEJhc2UgewogICAgLy8gUHJpdmF0ZSBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQKICAgIC8vIC0gaW5zaWRlIHRoaXMgY29udHJhY3QKICAgIC8vIENvbnRyYWN0cyB0aGF0IGluaGVyaXQgdGhpcyBjb250cmFjdCBjYW5ub3QgY2FsbCB0aGlzIGZ1bmN0aW9uLgogICAgZnVuY3Rpb24gcHJpdmF0ZUZ1bmMoKSBwcml2YXRlIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAicHJpdmF0ZSBmdW5jdGlvbiBjYWxsZWQiOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3RQcml2YXRlRnVuYygpIHB1YmxpYyBwdXJlIHJldHVybnMgKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZUZ1bmMoKTsKICAgIH0KCiAgICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCiAgICAvLyAtIGluc2lkZSB0aGlzIGNvbnRyYWN0CiAgICAvLyAtIGluc2lkZSBjb250cmFjdHMgdGhhdCBpbmhlcml0IHRoaXMgY29udHJhY3QKICAgIGZ1bmN0aW9uIGludGVybmFsRnVuYygpIGludGVybmFsIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAiaW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIjsKICAgIH0KCiAgICBmdW5jdGlvbiB0ZXN0SW50ZXJuYWxGdW5jKCkgcHVibGljIHB1cmUgdmlydHVhbCByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIGludGVybmFsRnVuYygpOwogICAgfQoKICAgIC8vIFB1YmxpYyBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZAogICAgLy8gLSBpbnNpZGUgdGhpcyBjb250cmFjdAogICAgLy8gLSBpbnNpZGUgY29udHJhY3RzIHRoYXQgaW5oZXJpdCB0aGlzIGNvbnRyYWN0CiAgICAvLyAtIGJ5IG90aGVyIGNvbnRyYWN0cyBhbmQgYWNjb3VudHMKICAgIGZ1bmN0aW9uIHB1YmxpY0Z1bmMoKSBwdWJsaWMgcHVyZSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuICJwdWJsaWMgZnVuY3Rpb24gY2FsbGVkIjsKICAgIH0KCiAgICAvLyBFeHRlcm5hbCBmdW5jdGlvbnMgY2FuIG9ubHkgYmUgY2FsbGVkCiAgICAvLyAtIGJ5IG90aGVyIGNvbnRyYWN0cyBhbmQgYWNjb3VudHMKICAgIGZ1bmN0aW9uIGV4dGVybmFsRnVuYygpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAiZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIjsKICAgIH0KCiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGNvbXBpbGUgc2luY2Ugd2UncmUgdHJ5aW5nIHRvIGNhbGwKICAgIC8vIGFuIGV4dGVybmFsIGZ1bmN0aW9uIGhlcmUuCiAgICAvLyBmdW5jdGlvbiB0ZXN0RXh0ZXJuYWxGdW5jKCkgcHVibGljIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgLy8gICAgIHJldHVybiBleHRlcm5hbEZ1bmMoKTsKICAgIC8vIH0KCiAgICAvLyBTdGF0ZSB2YXJpYWJsZXMKICAgIHN0cmluZyBwcml2YXRlIHByaXZhdGVWYXIgPSAibXkgcHJpdmF0ZSB2YXJpYWJsZSI7CiAgICBzdHJpbmcgaW50ZXJuYWwgaW50ZXJuYWxWYXIgPSAibXkgaW50ZXJuYWwgdmFyaWFibGUiOwogICAgc3RyaW5nIHB1YmxpYyBwdWJsaWNWYXIgPSAibXkgcHVibGljIHZhcmlhYmxlIjsKICAgIC8vIFN0YXRlIHZhcmlhYmxlcyBjYW5ub3QgYmUgZXh0ZXJuYWwgc28gdGhpcyBjb2RlIHdvbid0IGNvbXBpbGUuCiAgICAvLyBzdHJpbmcgZXh0ZXJuYWwgZXh0ZXJuYWxWYXIgPSAibXkgZXh0ZXJuYWwgdmFyaWFibGUiOwp9Cgpjb250cmFjdCBDaGlsZCBpcyBCYXNlIHsKICAgIC8vIEluaGVyaXRlZCBjb250cmFjdHMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHByaXZhdGUgZnVuY3Rpb25zCiAgICAvLyBhbmQgc3RhdGUgdmFyaWFibGVzLgogICAgLy8gZnVuY3Rpb24gdGVzdFByaXZhdGVGdW5jKCkgcHVibGljIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgLy8gICAgIHJldHVybiBwcml2YXRlRnVuYygpOwogICAgLy8gfQoKICAgIC8vIEludGVybmFsIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW5zaWRlIGNoaWxkIGNvbnRyYWN0cy4KICAgIGZ1bmN0aW9uIHRlc3RJbnRlcm5hbEZ1bmMoKSBwdWJsaWMgcHVyZSBvdmVycmlkZSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIGludGVybmFsRnVuYygpOwogICAgfQp9Cg=="}],V2=`

                      Functions and state variables have to declare whether they are accessible by other contracts.

                      +`,Z2=({prev:s,next:a})=>i.jsx(u,{version:y2,title:m2,description:b2,html:k2,prev:s,next:a,codes:w2}),W2="0.8.24",G2="Visibility",B2="An example of external, internal, private and public functions in Solidity",V2=[{fileName:"Visibility.sol",code:"Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVApwcmFnbWEgc29saWRpdHkgXjAuOC4yNDsKCmNvbnRyYWN0IEJhc2UgewogICAgLy8gUHJpdmF0ZSBmdW5jdGlvbiBjYW4gb25seSBiZSBjYWxsZWQKICAgIC8vIC0gaW5zaWRlIHRoaXMgY29udHJhY3QKICAgIC8vIENvbnRyYWN0cyB0aGF0IGluaGVyaXQgdGhpcyBjb250cmFjdCBjYW5ub3QgY2FsbCB0aGlzIGZ1bmN0aW9uLgogICAgZnVuY3Rpb24gcHJpdmF0ZUZ1bmMoKSBwcml2YXRlIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAicHJpdmF0ZSBmdW5jdGlvbiBjYWxsZWQiOwogICAgfQoKICAgIGZ1bmN0aW9uIHRlc3RQcml2YXRlRnVuYygpIHB1YmxpYyBwdXJlIHJldHVybnMgKHN0cmluZyBtZW1vcnkpIHsKICAgICAgICByZXR1cm4gcHJpdmF0ZUZ1bmMoKTsKICAgIH0KCiAgICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCiAgICAvLyAtIGluc2lkZSB0aGlzIGNvbnRyYWN0CiAgICAvLyAtIGluc2lkZSBjb250cmFjdHMgdGhhdCBpbmhlcml0IHRoaXMgY29udHJhY3QKICAgIGZ1bmN0aW9uIGludGVybmFsRnVuYygpIGludGVybmFsIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAiaW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIjsKICAgIH0KCiAgICBmdW5jdGlvbiB0ZXN0SW50ZXJuYWxGdW5jKCkgcHVibGljIHB1cmUgdmlydHVhbCByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIGludGVybmFsRnVuYygpOwogICAgfQoKICAgIC8vIFB1YmxpYyBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZAogICAgLy8gLSBpbnNpZGUgdGhpcyBjb250cmFjdAogICAgLy8gLSBpbnNpZGUgY29udHJhY3RzIHRoYXQgaW5oZXJpdCB0aGlzIGNvbnRyYWN0CiAgICAvLyAtIGJ5IG90aGVyIGNvbnRyYWN0cyBhbmQgYWNjb3VudHMKICAgIGZ1bmN0aW9uIHB1YmxpY0Z1bmMoKSBwdWJsaWMgcHVyZSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuICJwdWJsaWMgZnVuY3Rpb24gY2FsbGVkIjsKICAgIH0KCiAgICAvLyBFeHRlcm5hbCBmdW5jdGlvbnMgY2FuIG9ubHkgYmUgY2FsbGVkCiAgICAvLyAtIGJ5IG90aGVyIGNvbnRyYWN0cyBhbmQgYWNjb3VudHMKICAgIGZ1bmN0aW9uIGV4dGVybmFsRnVuYygpIGV4dGVybmFsIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgICAgIHJldHVybiAiZXh0ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIjsKICAgIH0KCiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGNvbXBpbGUgc2luY2Ugd2UncmUgdHJ5aW5nIHRvIGNhbGwKICAgIC8vIGFuIGV4dGVybmFsIGZ1bmN0aW9uIGhlcmUuCiAgICAvLyBmdW5jdGlvbiB0ZXN0RXh0ZXJuYWxGdW5jKCkgcHVibGljIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgLy8gICAgIHJldHVybiBleHRlcm5hbEZ1bmMoKTsKICAgIC8vIH0KCiAgICAvLyBTdGF0ZSB2YXJpYWJsZXMKICAgIHN0cmluZyBwcml2YXRlIHByaXZhdGVWYXIgPSAibXkgcHJpdmF0ZSB2YXJpYWJsZSI7CiAgICBzdHJpbmcgaW50ZXJuYWwgaW50ZXJuYWxWYXIgPSAibXkgaW50ZXJuYWwgdmFyaWFibGUiOwogICAgc3RyaW5nIHB1YmxpYyBwdWJsaWNWYXIgPSAibXkgcHVibGljIHZhcmlhYmxlIjsKICAgIC8vIFN0YXRlIHZhcmlhYmxlcyBjYW5ub3QgYmUgZXh0ZXJuYWwgc28gdGhpcyBjb2RlIHdvbid0IGNvbXBpbGUuCiAgICAvLyBzdHJpbmcgZXh0ZXJuYWwgZXh0ZXJuYWxWYXIgPSAibXkgZXh0ZXJuYWwgdmFyaWFibGUiOwp9Cgpjb250cmFjdCBDaGlsZCBpcyBCYXNlIHsKICAgIC8vIEluaGVyaXRlZCBjb250cmFjdHMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHByaXZhdGUgZnVuY3Rpb25zCiAgICAvLyBhbmQgc3RhdGUgdmFyaWFibGVzLgogICAgLy8gZnVuY3Rpb24gdGVzdFByaXZhdGVGdW5jKCkgcHVibGljIHB1cmUgcmV0dXJucyAoc3RyaW5nIG1lbW9yeSkgewogICAgLy8gICAgIHJldHVybiBwcml2YXRlRnVuYygpOwogICAgLy8gfQoKICAgIC8vIEludGVybmFsIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW5zaWRlIGNoaWxkIGNvbnRyYWN0cy4KICAgIGZ1bmN0aW9uIHRlc3RJbnRlcm5hbEZ1bmMoKSBwdWJsaWMgcHVyZSBvdmVycmlkZSByZXR1cm5zIChzdHJpbmcgbWVtb3J5KSB7CiAgICAgICAgcmV0dXJuIGludGVybmFsRnVuYygpOwogICAgfQp9Cg=="}],f2=`

                      Functions and state variables have to declare whether they are accessible by other contracts.

                      Functions can be declared as

                      • public - any contract and account can call
                      • @@ -10696,4 +10858,4 @@ echidna-test EchidnaTestTimeAndCaller.sol --contract EchidnaTestTimeAndCaller return internalFunc(); } } -`,Y2=({prev:s,next:a})=>i.jsx(u,{version:W2,title:G2,description:B2,html:V2,prev:s,next:a,codes:f2}),R2=({size:s,className:a=""})=>i.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor",width:s,height:s,className:a,children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"})}),v2="_component_efeb7_1",X2="_icon_efeb7_8",N2="_input_efeb7_12",de={component:v2,icon:X2,input:N2},H2=({value:s,onChange:a})=>{function n(l){a(l.target.value)}return i.jsxs("div",{className:de.component,children:[i.jsx(R2,{size:18,className:de.icon}),i.jsx("input",{className:de.input,placeholder:"Search",value:s,onChange:n})]})},F2=({size:s,className:a=""})=>i.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 113 113",xmlSpace:"preserve",width:s,height:s,className:a,children:[i.jsx("circle",{cx:56.5,cy:56.5,r:56.5,fill:"#453dff",stroke:"none"}),i.jsx("path",{fill:"#fff",stroke:"none",d:"M68.476 46.383c.454.796 1.36 1.82 2.155 1.82 4.31.227 8.62.113 13.157.113-.567-3.98-2.042-7.392-4.31-10.462-1.361-1.706-1.701-2.957-.34-4.89 1.36-1.82 2.381-4.094 3.63-6.255-3.97-2.274-7.827-4.435-11.797-6.709-1.36 2.274-2.609 4.321-3.743 6.482-.68 1.365-1.36 1.706-2.949 1.478-3.63-.455-7.259-.91-10.888-.682-10.889.682-19.85 7.96-22.798 18.423-3.29 11.94-1.702 22.97 6.805 32.523-1.588 2.843-3.29 5.8-4.99 8.87 4.083 2.275 7.826 4.55 11.795 6.824 1.588-2.73 3.063-5.231 4.424-7.733.68-1.251 1.588-1.365 2.949-1.479 4.65 0 9.3.228 13.724-.682 9.3-1.82 17.354-10.803 18.375-20.128-4.084 0-7.94.113-11.91 0-1.588 0-2.609.455-3.403 1.933-4.537 7.62-15.312 8.87-21.21 2.502-5.557-5.914-5.557-18.764.114-24.677 6.011-6.141 16.56-4.777 21.21 2.729z"})]});var K2="Expected a function",Ro=NaN,S2="[object Symbol]",M2=/^\s+|\s+$/g,x2=/^[-+]0x[0-9a-f]+$/i,J2=/^0b[01]+$/i,z2=/^0o[0-7]+$/i,E2=parseInt,U2=typeof dl=="object"&&dl&&dl.Object===Object&&dl,T2=typeof self=="object"&&self&&self.Object===Object&&self,Q2=U2||T2||Function("return this")(),D2=Object.prototype,L2=D2.toString,_2=Math.max,O2=Math.min,Ie=function(){return Q2.Date.now()};function P2(s,a,n){var l,p,e,c,t,o,r=0,d=!1,I=!1,j=!0;if(typeof s!="function")throw new TypeError(K2);a=vo(a)||0,ic(n)&&(d=!!n.leading,I="maxWait"in n,e=I?_2(vo(n.maxWait)||0,a):e,j="trailing"in n?!!n.trailing:j);function y(k){var B=l,Y=p;return l=p=void 0,r=k,c=s.apply(Y,B),c}function m(k){return r=k,t=setTimeout(h,a),d?y(k):c}function b(k){var B=k-o,Y=k-r,x=a-B;return I?O2(x,e-Y):x}function G(k){var B=k-o,Y=k-r;return o===void 0||B>=a||B<0||I&&Y>=e}function h(){var k=Ie();if(G(k))return g(k);t=setTimeout(h,b(k))}function g(k){return t=void 0,j&&l?y(k):(l=p=void 0,c)}function C(){t!==void 0&&clearTimeout(t),r=0,l=o=p=t=void 0}function A(){return t===void 0?c:g(Ie())}function Z(){var k=Ie(),B=G(k);if(l=arguments,p=this,o=k,B){if(t===void 0)return m(o);if(I)return t=setTimeout(h,a),y(o)}return t===void 0&&(t=setTimeout(h,a)),c}return Z.cancel=C,Z.flush=A,Z}function ic(s){var a=typeof s;return!!s&&(a=="object"||a=="function")}function $2(s){return!!s&&typeof s=="object"}function q2(s){return typeof s=="symbol"||$2(s)&&L2.call(s)==S2}function vo(s){if(typeof s=="number")return s;if(q2(s))return Ro;if(ic(s)){var a=typeof s.valueOf=="function"?s.valueOf():s;s=ic(a)?a+"":a}if(typeof s!="string")return s===0?s:+s;s=s.replace(M2,"");var n=J2.test(s);return n||z2.test(s)?E2(s.slice(2),n?2:8):x2.test(s)?Ro:+s}var sG=P2;const aG=Ko(sG),nG={leading:!1,trailing:!0};function lG(s,a,n){return W.useCallback(aG(s,a,nG),n)}function pG(s,a){let n=s;for(let l=0;l0;){const[e,c,t]=a.pop();p&&(l=l.slice(0,c-1),p=!1),l+=e;const o=Object.keys(t);if(o.length>0)for(let r=0;ra+p)}const tG=["/visibility"],oG=["/visibility","/view-and-pure-functions","/sending-ether","/hashing","/function-selector","/function-modifier","/function","/fallback","/delegatecall","/calling-contract","/call"],rG=["/visibility"],iG=["/visibility","/hacks/hiding-malicious-code-with-external-contract"],gG=["/view-and-pure-functions"],hG=["/view-and-pure-functions"],dG=["/variables","/structs","/state-variables","/shadowing-inherited-state-variables","/primitives","/mapping","/immutable","/ether-units","/enum","/constants","/assembly-variable","/array"],IG=["/variables","/structs","/state-variables","/shadowing-inherited-state-variables","/primitives","/mapping","/immutable","/ether-units","/enum","/constants","/array"],CG=["/variables"],jG=["/variables"],uG=["/variables","/state-variables","/shadowing-inherited-state-variables"],yG=["/variables","/structs","/primitives","/mapping","/immutable","/hacks/accessing-private-data","/ether-units","/enum","/data-locations","/constants","/array","/app/iterable-mapping"],AG=["/unchecked-math","/gas-golf","/gas"],mG=["/unchecked-math"],bG=["/unchecked-math","/assembly-math","/app/assembly-bin-exp"],wG=["/unchecked-math","/hacks/overflow"],kG=["/unchecked-math","/hacks/overflow"],ZG=["/try-catch","/error","/assembly-error"],WG=["/try-catch","/error"],GG=["/tests/echidna"],BG=["/tests/echidna"],fG=["/super","/calling-contract"],VG=["/super"],YG=["/super","/new-contract","/interface","/inheritance","/hello-world","/hacks/hiding-malicious-code-with-external-contract","/hacks/deploy-different-contracts-same-address","/hacks/contract-size","/first-app","/delegatecall","/constructor","/calling-contract","/call","/app/simple-bytecode-contract","/app/minimal-proxy","/app/deploy-any-contract","/app/create2"],RG=["/super","/new-contract","/interface","/inheritance","/first-app","/delegatecall","/calling-contract","/call"],vG=["/super","/shadowing-inherited-state-variables","/inheritance","/constructor"],XG=["/structs"],NG=["/structs"],HG=["/structs","/primitives"],FG=["/structs","/primitives"],KG=["/state-variables"],SG=["/state-variables"],MG=["/state-variables","/hello-world","/first-app","/app/write-to-any-slot","/app/upgradeable-proxy","/app/uni-directional-payment-channel","/app/time-lock","/app/simple-bytecode-contract","/app/multi-sig-wallet","/app/multi-delegatecall","/app/multi-call","/app/minimal-proxy","/app/merkle-tree","/app/iterable-mapping","/app/gasless-token-transfer","/app/ether-wallet","/app/erc721","/app/erc20","/app/erc1155","/app/english-auction","/app/dutch-auction","/app/deploy-any-contract","/app/crowd-fund","/app/create2","/app/bi-directional-payment-channel"],xG=["/state-variables","/hello-world","/first-app","/app/write-to-any-slot","/app/upgradeable-proxy","/app/uni-directional-payment-channel","/app/time-lock","/app/simple-bytecode-contract","/app/multi-sig-wallet","/app/multi-delegatecall","/app/multi-call","/app/minimal-proxy","/app/merkle-tree","/app/iterable-mapping","/app/gasless-token-transfer","/app/ether-wallet","/app/erc721","/app/erc20","/app/erc1155","/app/english-auction","/app/dutch-auction","/app/deploy-any-contract","/app/crowd-fund","/app/create2","/app/bi-directional-payment-channel"],JG=["/signature","/hashing","/hacks/signature-replay","/app/uni-directional-payment-channel","/app/merkle-tree","/app/bi-directional-payment-channel"],zG=["/signature"],EG=["/signature"],UG=["/signature","/hacks/signature-replay","/app/uni-directional-payment-channel","/app/multi-sig-wallet","/app/bi-directional-payment-channel"],TG=["/signature"],QG=["/signature"],DG=["/shadowing-inherited-state-variables"],LG=["/shadowing-inherited-state-variables"],_G=["/sending-ether"],OG=["/sending-ether","/sending-ether","/payable","/fallback"],PG=["/sending-ether","/payable","/fallback","/ether-units","/app/ether-wallet"],$G=["/sending-ether","/payable","/fallback","/app/ether-wallet"],qG=["/sending-ether","/fallback","/app/gasless-token-transfer"],sB=["/sending-ether","/delegatecall","/calling-contract","/call","/app/multi-call"],aB=["/sending-ether","/fallback"],nB=["/sending-ether","/fallback"],lB=["/sending-ether","/payable","/fallback"],pB=["/primitives"],eB=["/primitives"],cB=["/primitives"],tB=["/primitives"],oB=["/primitives"],rB=["/primitives","/hacks/deploy-different-contracts-same-address","/app/create2"],iB=["/primitives"],gB=["/primitives"],hB=["/new-contract","/hacks/deploy-different-contracts-same-address"],dB=["/new-contract"],IB=["/new-contract","/hacks/deploy-different-contracts-same-address","/app/create2"],CB=["/new-contract","/hacks/deploy-different-contracts-same-address"],jB=["/mapping","/app/iterable-mapping"],uB=["/loop","/assembly-loop"],yB=["/loop"],AB=["/library"],mB=["/interface"],bB=["/inheritance"],wB=["/inheritance"],kB=["/inheritance"],ZB=["/immutable","/defi/constant-sum-amm","/defi/constant-product-amm","/constants"],WB=["/immutable","/constants"],GB=["/immutable"],BB=["/immutable"],fB=["/if-else"],VB=["/if-else"],YB=["/if-else"],RB=["/hello-world"],vB=["/hello-world"],XB=["/hashing"],NB=["/hashing"],HB=["/hashing"],FB=["/hacks/weth-permit","/hacks/vault-inflation","/hacks/signature-replay","/hacks/self-destruct","/hacks/re-entrancy","/hacks/randomness","/hacks/phishing-with-tx-origin","/hacks/overflow","/hacks/honeypot","/hacks/hiding-malicious-code-with-external-contract","/hacks/front-running","/hacks/deploy-different-contracts-same-address","/hacks/denial-of-service","/hacks/delegatecall","/hacks/contract-size","/hacks/block-timestamp-manipulation","/hacks/accessing-private-data"],KB=["/hacks/weth-permit","/hacks/vault-inflation","/hacks/signature-replay","/hacks/self-destruct","/hacks/re-entrancy","/hacks/randomness","/hacks/phishing-with-tx-origin","/hacks/overflow","/hacks/honeypot","/hacks/hiding-malicious-code-with-external-contract","/hacks/front-running","/hacks/deploy-different-contracts-same-address","/hacks/denial-of-service","/hacks/delegatecall","/hacks/contract-size","/hacks/block-timestamp-manipulation","/hacks/accessing-private-data"],SB=["/hacks/weth-permit"],MB=["/hacks/weth-permit","/app/gasless-token-transfer"],xB=["/hacks/vault-inflation"],JB=["/hacks/vault-inflation"],zB=["/hacks/vault-inflation","/defi/vault"],EB=["/hacks/signature-replay"],UB=["/hacks/self-destruct"],TB=["/hacks/randomness"],QB=["/hacks/randomness"],DB=["/hacks/randomness"],LB=["/hacks/randomness"],_B=["/hacks/randomness","/hacks/block-timestamp-manipulation"],OB=["/hacks/randomness","/hacks/block-timestamp-manipulation"],PB=["/hacks/phishing-with-tx-origin"],$B=["/hacks/overflow"],qB=["/hacks/honeypot"],sf=["/hacks/hiding-malicious-code-with-external-contract"],af=["/hacks/hiding-malicious-code-with-external-contract"],nf=["/hacks/hiding-malicious-code-with-external-contract"],lf=["/hacks/hiding-malicious-code-with-external-contract"],pf=["/hacks/front-running"],ef=["/hacks/front-running"],cf=["/hacks/deploy-different-contracts-same-address","/app/deploy-any-contract"],tf=["/hacks/deploy-different-contracts-same-address"],of=["/hacks/deploy-different-contracts-same-address"],rf=["/hacks/denial-of-service"],gf=["/hacks/denial-of-service"],hf=["/hacks/delegatecall","/delegatecall","/app/upgradeable-proxy","/app/multi-delegatecall"],df=["/hacks/contract-size"],If=["/hacks/contract-size"],Cf=["/hacks/contract-size"],jf=["/hacks/contract-size"],uf=["/hacks/block-timestamp-manipulation"],yf=["/hacks/accessing-private-data"],Af=["/hacks/accessing-private-data"],mf=["/hacks/accessing-private-data","/data-locations","/app/write-to-any-slot"],bf=["/gas-golf"],wf=["/function-selector"],kf=["/function-selector"],Zf=["/function-modifier"],Wf=["/function-modifier"],Gf=["/function-modifier"],Bf=["/first-app"],ff=["/first-app"],Vf=["/events"],Yf=["/events"],Rf=["/ether-units"],vf=["/ether-units"],Xf=["/error"],Nf=["/error","/assembly-error"],Hf=["/error"],Ff=["/enum"],Kf=["/defi/vault","/defi/uniswap-v3-swap","/defi/uniswap-v3-liquidity","/defi/uniswap-v3-flash-swap","/defi/uniswap-v3-flash","/defi/uniswap-v2-optimal-one-sided-supply","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2-add-remove-liquidity","/defi/uniswap-v2","/defi/staking-rewards","/defi/stable-swap-amm","/defi/discrete-staking-rewards","/defi/dai-proxy","/defi/constant-sum-amm","/defi/constant-product-amm","/defi/chainlink-price-oracle"],Sf=["/defi/uniswap-v3-swap","/defi/uniswap-v3-liquidity","/defi/uniswap-v3-flash-swap","/defi/uniswap-v3-flash","/defi/uniswap-v2-optimal-one-sided-supply","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2-add-remove-liquidity","/defi/uniswap-v2"],Mf=["/defi/uniswap-v3-swap","/defi/uniswap-v3-liquidity","/defi/uniswap-v3-flash-swap","/defi/uniswap-v3-flash"],xf=["/defi/uniswap-v3-swap","/defi/uniswap-v3-flash-swap","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2","/defi/stable-swap-amm"],Jf=["/defi/uniswap-v3-swap","/defi/uniswap-v3-liquidity","/defi/uniswap-v3-flash-swap","/defi/uniswap-v3-flash","/defi/uniswap-v2-optimal-one-sided-supply","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2-add-remove-liquidity","/defi/uniswap-v2","/defi/stable-swap-amm","/defi/constant-sum-amm","/defi/constant-product-amm"],zf=["/defi/uniswap-v3-liquidity","/defi/uniswap-v2-add-remove-liquidity"],Ef=["/defi/uniswap-v3-flash-swap"],Uf=["/defi/uniswap-v3-flash","/defi/uniswap-v2-flash-swap"],Tf=["/defi/uniswap-v3-flash"],Qf=["/defi/uniswap-v2-optimal-one-sided-supply","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2-add-remove-liquidity","/defi/uniswap-v2"],Df=["/defi/uniswap-v2-optimal-one-sided-supply"],Lf=["/defi/uniswap-v2-optimal-one-sided-supply"],_f=["/defi/uniswap-v2-optimal-one-sided-supply"],Of=["/defi/uniswap-v2-optimal-one-sided-supply"],Pf=["/defi/uniswap-v2-add-remove-liquidity","/assembly-math"],$f=["/defi/uniswap-v2-add-remove-liquidity"],qf=["/defi/staking-rewards","/defi/discrete-staking-rewards"],sV=["/defi/staking-rewards","/defi/discrete-staking-rewards"],aV=["/defi/staking-rewards","/defi/discrete-staking-rewards"],nV=["/defi/stable-swap-amm"],lV=["/defi/stable-swap-amm"],pV=["/defi/discrete-staking-rewards"],eV=["/defi/dai-proxy"],cV=["/defi/dai-proxy","/app/upgradeable-proxy","/app/minimal-proxy"],tV=["/defi/constant-sum-amm"],oV=["/defi/constant-product-amm"],rV=["/defi/chainlink-price-oracle"],iV=["/defi/chainlink-price-oracle"],gV=["/defi/chainlink-price-oracle"],hV=["/defi/chainlink-price-oracle"],dV=["/data-locations"],IV=["/data-locations"],CV=["/data-locations"],jV=["/data-locations"],uV=["/constructor"],yV=["/constructor"],AV=["/calling-contract"],mV=["/bitwise"],bV=["/bitwise"],wV=["/bitwise"],kV=["/bitwise"],ZV=["/bitwise","/assembly-variable","/assembly-math","/assembly-loop","/assembly-if","/assembly-error","/app/assembly-bin-exp"],WV=["/assembly-variable","/assembly-math","/assembly-loop","/assembly-if","/assembly-error","/app/assembly-bin-exp"],GV=["/assembly-math"],BV=["/array"],fV=["/array"],VV=["/app/write-to-any-slot"],YV=["/app/write-to-any-slot","/app/deploy-any-contract"],RV=["/app/write-to-any-slot"],vV=["/app/upgradeable-proxy"],XV=["/app/uni-directional-payment-channel","/app/bi-directional-payment-channel"],NV=["/app/uni-directional-payment-channel","/app/bi-directional-payment-channel"],HV=["/app/time-lock"],FV=["/app/time-lock"],KV=["/app/simple-bytecode-contract"],SV=["/app/simple-bytecode-contract"],MV=["/app/multi-sig-wallet","/app/multi-delegatecall","/app/multi-call"],xV=["/app/multi-sig-wallet"],JV=["/app/multi-sig-wallet","/app/ether-wallet"],zV=["/app/multi-call"],EV=["/app/minimal-proxy"],UV=["/app/merkle-tree"],TV=["/app/merkle-tree"],QV=["/app/iterable-mapping"],DV=["/app/gasless-token-transfer"],LV=["/app/gasless-token-transfer","/app/erc20"],_V=["/app/gasless-token-transfer"],OV=["/app/erc721"],PV=["/app/erc721"],$V=["/app/erc721","/app/erc1155"],qV=["/app/erc20"],s1=["/app/erc20"],a1=["/app/erc1155"],n1=["/app/erc1155"],l1=["/app/english-auction"],p1=["/app/english-auction","/app/dutch-auction"],e1=["/app/english-auction","/app/dutch-auction"],c1=["/app/dutch-auction"],t1=["/app/crowd-fund"],o1=["/app/crowd-fund"],r1=["/app/crowd-fund"],i1=["/app/create2"],g1=["/app/assembly-bin-exp"],h1=["/app/assembly-bin-exp"],d1=["/abi-encode","/abi-decode"],I1=["/abi-encode"],C1=["/abi-encode","/abi-decode"],j1=["/abi-encode"],u1=["/abi-encode"],y1=["/abi-encode"],A1=["/abi-decode"],Xo={visibility:tG,function:["/visibility","/view-and-pure-functions","/sending-ether","/hashing","/function-selector","/function-modifier","/function","/fallback","/delegatecall","/calling-contract","/call"],functions:oG,internal:rG,private:["/visibility","/hacks/accessing-private-data"],public:["/visibility"],external:iG,view:gG,pure:hG,variable:dG,variables:IG,local:CG,global:jG,state:uG,data:yG,gas:AG,unchecked:mG,math:bG,overflow:wG,underflow:kG,try:["/try-catch"],catch:["/try-catch"],error:ZG,errors:WG,test:GG,echidna:BG,calling:fG,parent:VG,contract:YG,contracts:RG,inheritance:vG,super:["/super","/inheritance"],struct:XG,structs:NG,type:HG,types:FG,reading:KG,writing:SG,app:MG,application:xG,cryptography:JG,verify:zG,verifying:EG,signature:UG,signatures:TG,ecrecover:QG,shadow:DG,shadowing:LG,sending:_G,send:OG,ether:PG,eth:$G,transfer:qG,call:sB,fallback:aB,receive:nB,payable:lB,primitive:pB,primitives:eB,boolean:cB,uint256:tB,int256:oB,address:rB,uint:iB,int:gB,new:["/new-contract","/new-contract"],create:hB,creates:dB,create2:IB,salt:CB,mapping:jB,for:["/loop","/assembly-loop"],loop:uB,loops:yB,while:["/loop","/assembly-loop"],do:["/loop"],library:AB,interface:["/interface"],interfaces:mB,override:bB,virtual:wB,is:kB,import:["/import","/enum"],constant:ZB,constants:WB,immutable:GB,immutables:BB,if:["/if-else","/assembly-if"],else:["/if-else"],conditional:fB,statement:VB,statements:YB,hello:RB,world:vB,hash:XB,hashing:NB,keccak256:HB,hack:FB,security:KB,weth:SB,permit:MB,inflation:xB,erc4626:JB,vault:zB,replay:EB,selfdestruct:UB,"re-entrancy":["/hacks/re-entrancy"],source:TB,random:QB,randomness:DB,blockhash:LB,block:_B,timestamp:OB,phishing:PB,"tx.origin":["/hacks/phishing-with-tx-origin"],arithmetic:$B,honeypot:qB,hide:sf,hiding:af,malicious:nf,code:lf,front:pf,running:ef,deploy:cf,different:tf,same:of,denial:rf,service:gf,delegatecall:hf,bypass:df,size:If,check:Cf,extcodesize:jf,manipulation:uf,access:yf,accessing:Af,storage:mf,golf:bf,selector:wf,selectors:kf,modifier:Zf,modifiers:Wf,_:Gf,first:Bf,counter:ff,event:Vf,events:Yf,wei:Rf,units:vf,require:Xf,revert:Nf,assert:Hf,enum:["/enum"],imports:Ff,defi:Kf,uniswap:Sf,v3:Mf,swap:xf,amm:Jf,liquidity:zf,arbitrage:Ef,flash:Uf,loan:Tf,v2:Qf,optimal:Df,one:Lf,sided:_f,supply:Of,add:Pf,remove:$f,staking:qf,reward:sV,rewards:aV,curve:nV,stable:lV,discrete:pV,dai:eV,proxy:cV,sum:tV,product:oV,chainlink:rV,price:iV,oracle:gV,oracles:hV,location:dV,locations:IV,memory:CV,calldata:jV,constructor:uV,constructors:yV,other:AV,bitwise:mV,most:bV,significant:wV,bit:kV,assembly:ZV,yul:WV,mul:GV,switch:["/assembly-if"],array:BV,arrays:fV,write:VV,any:YV,slot:RV,upgradeable:vV,"uni-directional":["/app/uni-directional-payment-channel"],payment:XV,channel:NV,time:HV,lock:FV,simple:KV,bytecode:SV,multi:MV,sig:xV,wallet:JV,staticcall:zV,minimal:EV,merkle:UV,tree:TV,iterable:QV,gasless:DV,token:LV,ERC20:_V,erc721:OV,ierc721:PV,nft:$V,erc20:qV,ierc20:s1,erc1155:a1,ierc1155:n1,english:l1,auction:p1,auctions:e1,dutch:c1,crowd:t1,fund:o1,funding:r1,precompute:i1,"bi-directional":["/app/bi-directional-payment-channel"],binary:g1,exponentiation:h1,abi:d1,encode:I1,bytes:C1,encodeWithSelector:j1,encodeWithSignature:u1,encodeCall:y1,decode:A1},No={"/visibility":["visibility","function","functions","internal","private","public","external"],"/view-and-pure-functions":["view","pure","function","functions"],"/variables":["variable","variables","local","global","state","data"],"/unchecked-math":["gas","unchecked","math","overflow","underflow"],"/try-catch":["try","catch","error","errors"],"/tests/echidna":["test","echidna"],"/super":["calling","parent","contract","contracts","inheritance","super"],"/structs":["struct","structs","data","type","types","variable","variables"],"/state-variables":["reading","writing","state","variable","variables","app","application"],"/signature":["cryptography","verify","verifying","signature","signatures","ecrecover"],"/shadowing-inherited-state-variables":["state","variables","variable","shadow","shadowing","inheritance"],"/sending-ether":["sending","send","ether","eth","transfer","send","call","fallback","receive","payable","function","functions"],"/primitives":["primitive","primitives","data","type","types","variable","variables","boolean","uint256","int256","address","uint","int"],"/payable":["payable","eth","send","ether"],"/new-contract":["new","contract","create","contracts","creates","new","create2","salt"],"/mapping":["data","variable","variables","mapping"],"/loop":["for","loop","loops","while","do"],"/library":["library"],"/interface":["interface","interfaces","contract","contracts"],"/inheritance":["inheritance","super","override","virtual","is","contract","contracts"],"/import":["import"],"/immutable":["constant","constants","immutable","immutables","data","variable","variables"],"/if-else":["if","else","conditional","statement","statements"],"/hello-world":["contract","app","application","hello","world"],"/hashing":["hash","hashing","function","functions","keccak256","cryptography"],"/hacks/weth-permit":["hack","security","weth","permit"],"/hacks/vault-inflation":["hack","security","inflation","erc4626","vault"],"/hacks/signature-replay":["hack","security","cryptography","signature","replay"],"/hacks/self-destruct":["hack","security","selfdestruct"],"/hacks/re-entrancy":["hack","security","re-entrancy"],"/hacks/randomness":["hack","security","source","random","randomness","blockhash","block","timestamp"],"/hacks/phishing-with-tx-origin":["hack","security","phishing","tx.origin"],"/hacks/overflow":["hack","security","arithmetic","overflow","underflow"],"/hacks/honeypot":["hack","security","honeypot"],"/hacks/hiding-malicious-code-with-external-contract":["hack","security","hide","hiding","malicious","code","external","contract"],"/hacks/front-running":["hack","security","front","running"],"/hacks/deploy-different-contracts-same-address":["hack","security","deploy","salt","create","create2","different","contract","same","address"],"/hacks/denial-of-service":["hack","security","denial","service"],"/hacks/delegatecall":["hack","security","delegatecall"],"/hacks/contract-size":["hack","security","bypass","contract","size","check","extcodesize"],"/hacks/block-timestamp-manipulation":["hack","security","block","timestamp","manipulation"],"/hacks/accessing-private-data":["hack","security","access","accessing","private","data","storage"],"/gas-golf":["gas","golf"],"/gas":["gas"],"/function-selector":["function","functions","selector","selectors"],"/function-modifier":["function","functions","modifier","modifiers","_"],"/function":["function","functions"],"/first-app":["contract","contracts","app","first","application","counter"],"/fallback":["fallback","function","functions","receive","payable","send","ether","eth","transfer"],"/events":["event","events"],"/ether-units":["data","variables","variable","ether","wei","units"],"/error":["error","errors","require","revert","assert"],"/enum":["data","variable","variables","enum","import","imports"],"/delegatecall":["delegatecall","call","contract","contracts","function","functions"],"/defi/vault":["defi","vault"],"/defi/uniswap-v3-swap":["defi","uniswap","v3","swap","amm"],"/defi/uniswap-v3-liquidity":["defi","uniswap","v3","liquidity","amm"],"/defi/uniswap-v3-flash-swap":["defi","uniswap","v3","swap","arbitrage","amm"],"/defi/uniswap-v3-flash":["defi","uniswap","v3","flash","loan","amm"],"/defi/uniswap-v2-optimal-one-sided-supply":["defi","uniswap","v2","optimal","one","sided","supply","amm"],"/defi/uniswap-v2-flash-swap":["defi","uniswap","v2","flash","swap","amm"],"/defi/uniswap-v2-add-remove-liquidity":["defi","uniswap","v2","add","remove","liquidity","amm"],"/defi/uniswap-v2":["defi","uniswap","v2","swap","amm"],"/defi/staking-rewards":["defi","staking","reward","rewards"],"/defi/stable-swap-amm":["defi","curve","stable","swap","amm"],"/defi/discrete-staking-rewards":["defi","discrete","staking","reward","rewards"],"/defi/dai-proxy":["defi","dai","proxy"],"/defi/constant-sum-amm":["defi","constant","sum","amm"],"/defi/constant-product-amm":["defi","constant","product","amm"],"/defi/chainlink-price-oracle":["defi","chainlink","price","oracle","oracles"],"/data-locations":["data","location","locations","storage","memory","calldata"],"/constructor":["constructor","constructors","contract","inheritance"],"/constants":["constant","constants","data","variable","variables"],"/calling-contract":["calling","other","contract","contracts","call","function","functions"],"/call":["contract","contracts","call","function","functions"],"/bitwise":["bitwise","most","significant","bit","assembly"],"/assembly-variable":["assembly","variable","yul"],"/assembly-math":["assembly","yul","math","add","mul"],"/assembly-loop":["assembly","loop","yul","while","for"],"/assembly-if":["assembly","yul","if","switch"],"/assembly-error":["assembly","yul","error","revert"],"/array":["data","variable","variables","array","arrays"],"/app/write-to-any-slot":["app","application","write","any","slot","storage"],"/app/upgradeable-proxy":["app","application","delegatecall","upgradeable","proxy"],"/app/uni-directional-payment-channel":["app","application","uni-directional","payment","channel","signature","cryptography"],"/app/time-lock":["app","application","time","lock"],"/app/simple-bytecode-contract":["app","application","simple","bytecode","contract"],"/app/multi-sig-wallet":["app","application","multi","sig","signature","wallet"],"/app/multi-delegatecall":["app","application","multi","delegatecall"],"/app/multi-call":["app","application","multi","call","staticcall"],"/app/minimal-proxy":["app","application","minimal","proxy","contract"],"/app/merkle-tree":["app","application","merkle","tree","cryptography"],"/app/iterable-mapping":["app","application","mapping","data","iterable"],"/app/gasless-token-transfer":["app","application","gasless","token","transfer","ERC20","permit"],"/app/ether-wallet":["app","application","ether","eth","wallet"],"/app/erc721":["app","application","erc721","ierc721","nft"],"/app/erc20":["app","application","erc20","ierc20","token"],"/app/erc1155":["app","application","erc1155","nft","ierc1155"],"/app/english-auction":["app","application","english","auction","auctions"],"/app/dutch-auction":["app","application","dutch","auction","auctions"],"/app/deploy-any-contract":["app","application","deploy","any","contract"],"/app/crowd-fund":["app","application","crowd","fund","funding"],"/app/create2":["app","application","create2","precompute","contract","address"],"/app/bi-directional-payment-channel":["app","application","bi-directional","payment","channel","signature","cryptography"],"/app/assembly-bin-exp":["assembly","yul","binary","exponentiation","math"],"/abi-encode":["abi","encode","bytes","encodeWithSelector","encodeWithSignature","encodeCall"],"/abi-decode":["abi","decode","bytes"]},jg=[];for(const s of Object.keys(No))jg.push(...No[s]);const ug={};for(const s of jg)pG(ug,s);function m1(s){return Array.from(new Set(s))}function b1(s){const a=[],n=cG(ug,s.toLowerCase());for(const l of n)Xo[l]&&a.push(...Xo[l]);return a}const w1="_component_ri31z_1",k1="_updates_ri31z_8",Z1="_category_ri31z_13",W1="_search_ri31z_16",G1="_listItem_ri31z_20",B1="_label_ri31z_28",f1="_header_ri31z_31",V1="_youTube_ri31z_34",Y1="_youTubeLogo_ri31z_40",R1="_cryptoJobsList_ri31z_44",v1="_cryptoJobsListLogo_ri31z_50",as={component:w1,updates:k1,category:Z1,search:W1,listItem:G1,label:B1,header:f1,youTube:V1,youTubeLogo:Y1,cryptoJobsList:R1,cryptoJobsListLogo:v1},X1=["2024/03/04 - Solidity 0.8.24","2024/02/14 - Github PR erfanHosseinPanahi","2024/01/18 - WETH permit hack"];function N1(){const[s,a]=W.useState(""),[n,l]=xI(),[p,e]=W.useState(null);W.useEffect(()=>{const d=n.get("q");d!=null&&d.length>0&&(a(d),c(d,!1))},[]);function c(d,I){const j=d.trim();if(j.length==0){e(null),I&&l({q:""});return}const y=m1(j.split(" ")),m={};for(const b of y){const G=b1(b);for(const h of G)m[h]=!0}e(m),I&&l({q:j})}const t=lG(d=>c(d,!0),500,[]);function o(d){a(d),t(d)}function r(){return p?Object.keys(p).length==0?i.jsx("div",{children:"No results"}):i.jsx("ul",{className:as.list,children:Cp.filter(({path:d})=>p[d]).map(({path:d,title:I})=>i.jsx("li",{className:as.listItem,children:i.jsx("a",{href:d,children:I})},d))}):i.jsxs(i.Fragment,{children:[ot.map(({routes:d,title:I},j)=>i.jsxs("div",{children:[I&&i.jsx("h3",{className:as.category,children:I}),i.jsx("ul",{className:as.list,children:d.map(({path:y,title:m})=>i.jsx("li",{className:as.listItem,children:i.jsx("a",{href:y,children:m})},y))})]},j)),i.jsxs("div",{children:[i.jsx("h3",{className:as.category,children:"Translations"}),OI.map(({lang:d,url:I})=>i.jsx("li",{className:as.listItem,children:i.jsx("a",{href:I,target:"__blank",children:d})},I))]})]})}return i.jsxs("div",{className:as.component,children:[i.jsx(Cg,{title:"Solidity by Example | 0.8.24",description:"Learn smart contract programming using Solidity"}),i.jsx("h1",{className:as.header,children:i.jsx("a",{href:"/",children:"Solidity by Example"})}),i.jsx("div",{className:as.subHeader,children:"v 0.8.24"}),i.jsxs("div",{className:as.main,children:[i.jsxs("p",{children:["Introduction to ",i.jsx("a",{href:"https://solidity.readthedocs.io",children:"Solidity"})," with simple examples"]}),i.jsxs("div",{className:as.youTube,children:[i.jsx("img",{src:Ig,alt:"logo",className:as.youTubeLogo}),i.jsx("a",{href:"https://www.youtube.com/@smartcontractprogrammer",target:"__blank",children:"Most code are explained here"})]}),i.jsxs("div",{className:as.cryptoJobsList,children:[i.jsx(F2,{size:24,className:as.cryptoJobsListLogo}),i.jsx("a",{href:dg,target:"__blank",children:"Looking for Solidity jobs?"})]}),i.jsx("div",{className:as.updates,children:X1.map((d,I)=>i.jsx("div",{children:d},I))}),i.jsx("div",{className:as.search,children:i.jsx(H2,{value:s,onChange:o})}),r()]})]})}const H1=[{path:"/abi-decode",component:zC},{path:"/abi-encode",component:LC},{path:"/app/assembly-bin-exp",component:sj},{path:"/app/bi-directional-payment-channel",component:cj},{path:"/app/create2",component:hj},{path:"/app/crowd-fund",component:yj},{path:"/app/deploy-any-contract",component:Zj},{path:"/app/dutch-auction",component:Yj},{path:"/app/english-auction",component:Fj},{path:"/app/erc1155",component:zj},{path:"/app/erc20",component:Lj},{path:"/app/erc721",component:su},{path:"/app/ether-wallet",component:cu},{path:"/app/gasless-token-transfer",component:hu},{path:"/app/iterable-mapping",component:yu},{path:"/app/merkle-tree",component:Zu},{path:"/app/minimal-proxy",component:Yu},{path:"/app/multi-call",component:Fu},{path:"/app/multi-delegatecall",component:zu},{path:"/app/multi-sig-wallet",component:Lu},{path:"/app/simple-bytecode-contract",component:sy},{path:"/app/time-lock",component:cy},{path:"/app/uni-directional-payment-channel",component:hy},{path:"/app/upgradeable-proxy",component:yy},{path:"/app/write-to-any-slot",component:Zy},{path:"/array",component:Yy},{path:"/assembly-error",component:Fy},{path:"/assembly-if",component:zy},{path:"/assembly-loop",component:Ly},{path:"/assembly-math",component:sA},{path:"/assembly-variable",component:cA},{path:"/bitwise",component:hA},{path:"/call",component:yA},{path:"/calling-contract",component:ZA},{path:"/constants",component:YA},{path:"/constructor",component:FA},{path:"/data-locations",component:zA},{path:"/defi/chainlink-price-oracle",component:LA},{path:"/defi/constant-product-amm",component:sm},{path:"/defi/constant-sum-amm",component:cm},{path:"/defi/dai-proxy",component:hm},{path:"/defi/discrete-staking-rewards",component:ym},{path:"/defi/stable-swap-amm",component:Zm},{path:"/defi/staking-rewards",component:Ym},{path:"/defi/uniswap-v2",component:Fm},{path:"/defi/uniswap-v2-add-remove-liquidity",component:zm},{path:"/defi/uniswap-v2-flash-swap",component:Lm},{path:"/defi/uniswap-v2-optimal-one-sided-supply",component:sb},{path:"/defi/uniswap-v3-flash",component:cb},{path:"/defi/uniswap-v3-flash-swap",component:hb},{path:"/defi/uniswap-v3-liquidity",component:yb},{path:"/defi/uniswap-v3-swap",component:Zb},{path:"/defi/vault",component:Yb},{path:"/delegatecall",component:Fb},{path:"/enum",component:zb},{path:"/error",component:Lb},{path:"/ether-units",component:sw},{path:"/events",component:cw},{path:"/fallback",component:hw},{path:"/first-app",component:yw},{path:"/function",component:Zw},{path:"/function-modifier",component:Yw},{path:"/function-selector",component:Fw},{path:"/gas",component:zw},{path:"/gas-golf",component:Lw},{path:"/hacks/accessing-private-data",component:sk},{path:"/hacks/block-timestamp-manipulation",component:ck},{path:"/hacks/contract-size",component:hk},{path:"/hacks/delegatecall",component:yk},{path:"/hacks/denial-of-service",component:Zk},{path:"/hacks/deploy-different-contracts-same-address",component:Yk},{path:"/hacks/front-running",component:Fk},{path:"/hacks/hiding-malicious-code-with-external-contract",component:zk},{path:"/hacks/honeypot",component:Lk},{path:"/hacks/overflow",component:sZ},{path:"/hacks/phishing-with-tx-origin",component:cZ},{path:"/hacks/randomness",component:hZ},{path:"/hacks/re-entrancy",component:yZ},{path:"/hacks/self-destruct",component:ZZ},{path:"/hacks/signature-replay",component:YZ},{path:"/hacks/vault-inflation",component:FZ},{path:"/hacks/weth-permit",component:zZ},{path:"/hashing",component:LZ},{path:"/hello-world",component:s0},{path:"/if-else",component:c0},{path:"/immutable",component:h0},{path:"/import",component:y0},{path:"/inheritance",component:Z0},{path:"/interface",component:Y0},{path:"/library",component:F0},{path:"/loop",component:z0},{path:"/mapping",component:L0},{path:"/new-contract",component:sW},{path:"/payable",component:cW},{path:"/primitives",component:hW},{path:"/sending-ether",component:yW},{path:"/shadowing-inherited-state-variables",component:ZW},{path:"/signature",component:YW},{path:"/state-variables",component:FW},{path:"/structs",component:zW},{path:"/super",component:LW},{path:"/tests/echidna",component:s2},{path:"/try-catch",component:c2},{path:"/unchecked-math",component:h2},{path:"/variables",component:y2},{path:"/view-and-pure-functions",component:Z2},{path:"/visibility",component:Y2},{path:"",component:N1}];function Ho(){const{state:s,init:a}=et();return W.useLayoutEffect(()=>{a({width:window.document.body.clientWidth})},[]),s.initialized?i.jsx(MI,{basename:"",children:i.jsx(YC,{children:i.jsx(FI,{children:H1.map(n=>{const{prev:l,next:p}=lC(n.path);return i.jsx(hg,{path:n.path,element:Do.createElement(n.component,{prev:l,next:p})},n.path)})})})}):null}const F1=document.getElementById("root"),K1=qi(F1),Fo=document.getElementById("root");Fo.hasChildNodes()?$i(Fo,i.jsx(bo,{children:i.jsx(Ho,{})})):K1.render(i.jsx(bo,{children:i.jsx(Ho,{})})); +`,Y2=({prev:s,next:a})=>i.jsx(u,{version:W2,title:G2,description:B2,html:f2,prev:s,next:a,codes:V2}),R2=({size:s,className:a=""})=>i.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor",width:s,height:s,className:a,children:i.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"})}),X2="_component_efeb7_1",v2="_icon_efeb7_8",N2="_input_efeb7_12",de={component:X2,icon:v2,input:N2},H2=({value:s,onChange:a})=>{function n(l){a(l.target.value)}return i.jsxs("div",{className:de.component,children:[i.jsx(R2,{size:18,className:de.icon}),i.jsx("input",{className:de.input,placeholder:"Search",value:s,onChange:n})]})},F2=({size:s,className:a=""})=>i.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 113 113",xmlSpace:"preserve",width:s,height:s,className:a,children:[i.jsx("circle",{cx:56.5,cy:56.5,r:56.5,fill:"#453dff",stroke:"none"}),i.jsx("path",{fill:"#fff",stroke:"none",d:"M68.476 46.383c.454.796 1.36 1.82 2.155 1.82 4.31.227 8.62.113 13.157.113-.567-3.98-2.042-7.392-4.31-10.462-1.361-1.706-1.701-2.957-.34-4.89 1.36-1.82 2.381-4.094 3.63-6.255-3.97-2.274-7.827-4.435-11.797-6.709-1.36 2.274-2.609 4.321-3.743 6.482-.68 1.365-1.36 1.706-2.949 1.478-3.63-.455-7.259-.91-10.888-.682-10.889.682-19.85 7.96-22.798 18.423-3.29 11.94-1.702 22.97 6.805 32.523-1.588 2.843-3.29 5.8-4.99 8.87 4.083 2.275 7.826 4.55 11.795 6.824 1.588-2.73 3.063-5.231 4.424-7.733.68-1.251 1.588-1.365 2.949-1.479 4.65 0 9.3.228 13.724-.682 9.3-1.82 17.354-10.803 18.375-20.128-4.084 0-7.94.113-11.91 0-1.588 0-2.609.455-3.403 1.933-4.537 7.62-15.312 8.87-21.21 2.502-5.557-5.914-5.557-18.764.114-24.677 6.011-6.141 16.56-4.777 21.21 2.729z"})]});var K2="Expected a function",Ro=NaN,S2="[object Symbol]",M2=/^\s+|\s+$/g,x2=/^[-+]0x[0-9a-f]+$/i,J2=/^0b[01]+$/i,z2=/^0o[0-7]+$/i,E2=parseInt,U2=typeof dl=="object"&&dl&&dl.Object===Object&&dl,T2=typeof self=="object"&&self&&self.Object===Object&&self,Q2=U2||T2||Function("return this")(),D2=Object.prototype,L2=D2.toString,_2=Math.max,O2=Math.min,Ie=function(){return Q2.Date.now()};function P2(s,a,n){var l,p,e,c,t,o,r=0,d=!1,I=!1,j=!0;if(typeof s!="function")throw new TypeError(K2);a=Xo(a)||0,ic(n)&&(d=!!n.leading,I="maxWait"in n,e=I?_2(Xo(n.maxWait)||0,a):e,j="trailing"in n?!!n.trailing:j);function A(k){var B=l,Y=p;return l=p=void 0,r=k,c=s.apply(Y,B),c}function m(k){return r=k,t=setTimeout(h,a),d?A(k):c}function b(k){var B=k-o,Y=k-r,x=a-B;return I?O2(x,e-Y):x}function G(k){var B=k-o,Y=k-r;return o===void 0||B>=a||B<0||I&&Y>=e}function h(){var k=Ie();if(G(k))return g(k);t=setTimeout(h,b(k))}function g(k){return t=void 0,j&&l?A(k):(l=p=void 0,c)}function C(){t!==void 0&&clearTimeout(t),r=0,l=o=p=t=void 0}function y(){return t===void 0?c:g(Ie())}function Z(){var k=Ie(),B=G(k);if(l=arguments,p=this,o=k,B){if(t===void 0)return m(o);if(I)return t=setTimeout(h,a),A(o)}return t===void 0&&(t=setTimeout(h,a)),c}return Z.cancel=C,Z.flush=y,Z}function ic(s){var a=typeof s;return!!s&&(a=="object"||a=="function")}function $2(s){return!!s&&typeof s=="object"}function q2(s){return typeof s=="symbol"||$2(s)&&L2.call(s)==S2}function Xo(s){if(typeof s=="number")return s;if(q2(s))return Ro;if(ic(s)){var a=typeof s.valueOf=="function"?s.valueOf():s;s=ic(a)?a+"":a}if(typeof s!="string")return s===0?s:+s;s=s.replace(M2,"");var n=J2.test(s);return n||z2.test(s)?E2(s.slice(2),n?2:8):x2.test(s)?Ro:+s}var sG=P2;const aG=Ko(sG),nG={leading:!1,trailing:!0};function lG(s,a,n){return W.useCallback(aG(s,a,nG),n)}function pG(s,a){let n=s;for(let l=0;l0;){const[e,c,t]=a.pop();p&&(l=l.slice(0,c-1),p=!1),l+=e;const o=Object.keys(t);if(o.length>0)for(let r=0;ra+p)}const tG=["/visibility"],oG=["/visibility","/view-and-pure-functions","/sending-ether","/hashing","/function-selector","/function-modifier","/function","/fallback","/delegatecall","/calling-contract","/call"],rG=["/visibility"],iG=["/visibility","/hacks/hiding-malicious-code-with-external-contract"],gG=["/view-and-pure-functions"],hG=["/view-and-pure-functions"],dG=["/variables","/structs","/state-variables","/shadowing-inherited-state-variables","/primitives","/mapping","/immutable","/ether-units","/enum","/constants","/assembly-variable","/array"],IG=["/variables","/structs","/state-variables","/shadowing-inherited-state-variables","/primitives","/mapping","/immutable","/ether-units","/enum","/constants","/array"],CG=["/variables"],jG=["/variables"],uG=["/variables","/state-variables","/shadowing-inherited-state-variables"],AG=["/variables","/structs","/primitives","/mapping","/immutable","/hacks/accessing-private-data","/ether-units","/enum","/data-locations","/constants","/array","/app/iterable-mapping"],yG=["/unchecked-math","/gas-golf","/gas"],mG=["/unchecked-math"],bG=["/unchecked-math","/assembly-math","/app/assembly-bin-exp"],wG=["/unchecked-math","/hacks/overflow"],kG=["/unchecked-math","/hacks/overflow"],ZG=["/try-catch","/error","/assembly-error"],WG=["/try-catch","/error"],GG=["/tests/echidna"],BG=["/tests/echidna"],VG=["/super","/calling-contract"],fG=["/super"],YG=["/super","/new-contract","/interface","/inheritance","/hello-world","/hacks/hiding-malicious-code-with-external-contract","/hacks/deploy-different-contracts-same-address","/hacks/contract-size","/first-app","/delegatecall","/constructor","/calling-contract","/call","/app/simple-bytecode-contract","/app/minimal-proxy","/app/deploy-any-contract","/app/create2"],RG=["/super","/new-contract","/interface","/inheritance","/first-app","/delegatecall","/calling-contract","/call"],XG=["/super","/shadowing-inherited-state-variables","/inheritance","/constructor"],vG=["/structs"],NG=["/structs"],HG=["/structs","/primitives"],FG=["/structs","/primitives"],KG=["/state-variables"],SG=["/state-variables"],MG=["/state-variables","/hello-world","/first-app","/app/write-to-any-slot","/app/upgradeable-proxy","/app/uni-directional-payment-channel","/app/time-lock","/app/simple-bytecode-contract","/app/multi-sig-wallet","/app/multi-delegatecall","/app/multi-call","/app/minimal-proxy","/app/merkle-tree","/app/iterable-mapping","/app/gasless-token-transfer","/app/ether-wallet","/app/erc721","/app/erc20","/app/erc1155","/app/english-auction","/app/dutch-auction","/app/deploy-any-contract","/app/crowd-fund","/app/create2","/app/bi-directional-payment-channel"],xG=["/state-variables","/hello-world","/first-app","/app/write-to-any-slot","/app/upgradeable-proxy","/app/uni-directional-payment-channel","/app/time-lock","/app/simple-bytecode-contract","/app/multi-sig-wallet","/app/multi-delegatecall","/app/multi-call","/app/minimal-proxy","/app/merkle-tree","/app/iterable-mapping","/app/gasless-token-transfer","/app/ether-wallet","/app/erc721","/app/erc20","/app/erc1155","/app/english-auction","/app/dutch-auction","/app/deploy-any-contract","/app/crowd-fund","/app/create2","/app/bi-directional-payment-channel"],JG=["/signature","/hashing","/hacks/signature-replay","/app/uni-directional-payment-channel","/app/merkle-tree","/app/bi-directional-payment-channel"],zG=["/signature"],EG=["/signature"],UG=["/signature","/hacks/signature-replay","/app/uni-directional-payment-channel","/app/multi-sig-wallet","/app/bi-directional-payment-channel"],TG=["/signature"],QG=["/signature"],DG=["/shadowing-inherited-state-variables"],LG=["/shadowing-inherited-state-variables"],_G=["/sending-ether"],OG=["/sending-ether","/sending-ether","/payable","/fallback"],PG=["/sending-ether","/payable","/fallback","/ether-units","/app/ether-wallet"],$G=["/sending-ether","/payable","/fallback","/app/ether-wallet"],qG=["/sending-ether","/fallback","/app/gasless-token-transfer"],sB=["/sending-ether","/delegatecall","/calling-contract","/call","/app/multi-call"],aB=["/sending-ether","/fallback"],nB=["/sending-ether","/fallback"],lB=["/sending-ether","/payable","/fallback"],pB=["/primitives"],eB=["/primitives"],cB=["/primitives"],tB=["/primitives"],oB=["/primitives"],rB=["/primitives","/hacks/deploy-different-contracts-same-address","/app/create2"],iB=["/primitives"],gB=["/primitives"],hB=["/new-contract","/hacks/deploy-different-contracts-same-address"],dB=["/new-contract"],IB=["/new-contract","/hacks/deploy-different-contracts-same-address","/app/create2"],CB=["/new-contract","/hacks/deploy-different-contracts-same-address"],jB=["/mapping","/app/iterable-mapping"],uB=["/loop","/assembly-loop"],AB=["/loop"],yB=["/library"],mB=["/interface"],bB=["/inheritance"],wB=["/inheritance"],kB=["/inheritance"],ZB=["/immutable","/defi/constant-sum-amm","/defi/constant-product-amm","/constants"],WB=["/immutable","/constants"],GB=["/immutable"],BB=["/immutable"],VB=["/if-else"],fB=["/if-else"],YB=["/if-else"],RB=["/hello-world"],XB=["/hello-world"],vB=["/hashing"],NB=["/hashing"],HB=["/hashing"],FB=["/hacks/weth-permit","/hacks/vault-inflation","/hacks/signature-replay","/hacks/self-destruct","/hacks/re-entrancy","/hacks/randomness","/hacks/phishing-with-tx-origin","/hacks/overflow","/hacks/honeypot","/hacks/hiding-malicious-code-with-external-contract","/hacks/front-running","/hacks/deploy-different-contracts-same-address","/hacks/denial-of-service","/hacks/delegatecall","/hacks/contract-size","/hacks/block-timestamp-manipulation","/hacks/accessing-private-data"],KB=["/hacks/weth-permit","/hacks/vault-inflation","/hacks/signature-replay","/hacks/self-destruct","/hacks/re-entrancy","/hacks/randomness","/hacks/phishing-with-tx-origin","/hacks/overflow","/hacks/honeypot","/hacks/hiding-malicious-code-with-external-contract","/hacks/front-running","/hacks/deploy-different-contracts-same-address","/hacks/denial-of-service","/hacks/delegatecall","/hacks/contract-size","/hacks/block-timestamp-manipulation","/hacks/accessing-private-data"],SB=["/hacks/weth-permit"],MB=["/hacks/weth-permit","/app/gasless-token-transfer"],xB=["/hacks/vault-inflation"],JB=["/hacks/vault-inflation"],zB=["/hacks/vault-inflation","/defi/vault"],EB=["/hacks/signature-replay"],UB=["/hacks/self-destruct"],TB=["/hacks/randomness"],QB=["/hacks/randomness"],DB=["/hacks/randomness"],LB=["/hacks/randomness"],_B=["/hacks/randomness","/hacks/block-timestamp-manipulation"],OB=["/hacks/randomness","/hacks/block-timestamp-manipulation"],PB=["/hacks/phishing-with-tx-origin"],$B=["/hacks/overflow"],qB=["/hacks/honeypot"],sV=["/hacks/hiding-malicious-code-with-external-contract"],aV=["/hacks/hiding-malicious-code-with-external-contract"],nV=["/hacks/hiding-malicious-code-with-external-contract"],lV=["/hacks/hiding-malicious-code-with-external-contract"],pV=["/hacks/front-running"],eV=["/hacks/front-running"],cV=["/hacks/deploy-different-contracts-same-address","/app/deploy-any-contract"],tV=["/hacks/deploy-different-contracts-same-address"],oV=["/hacks/deploy-different-contracts-same-address"],rV=["/hacks/denial-of-service"],iV=["/hacks/denial-of-service"],gV=["/hacks/delegatecall","/delegatecall","/app/upgradeable-proxy","/app/multi-delegatecall"],hV=["/hacks/contract-size"],dV=["/hacks/contract-size"],IV=["/hacks/contract-size"],CV=["/hacks/contract-size"],jV=["/hacks/block-timestamp-manipulation"],uV=["/hacks/accessing-private-data"],AV=["/hacks/accessing-private-data"],yV=["/hacks/accessing-private-data","/data-locations","/app/write-to-any-slot"],mV=["/gas-golf"],bV=["/function-selector"],wV=["/function-selector"],kV=["/function-modifier"],ZV=["/function-modifier"],WV=["/function-modifier"],GV=["/first-app"],BV=["/first-app"],VV=["/events"],fV=["/events"],YV=["/ether-units"],RV=["/ether-units"],XV=["/error"],vV=["/error","/assembly-error"],NV=["/error"],HV=["/enum"],FV=["/defi/vault","/defi/uniswap-v3-swap","/defi/uniswap-v3-liquidity","/defi/uniswap-v3-flash-swap","/defi/uniswap-v3-flash","/defi/uniswap-v2-optimal-one-sided-supply","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2-add-remove-liquidity","/defi/uniswap-v2","/defi/staking-rewards","/defi/stable-swap-amm","/defi/discrete-staking-rewards","/defi/dai-proxy","/defi/constant-sum-amm","/defi/constant-product-amm","/defi/chainlink-price-oracle"],KV=["/defi/uniswap-v3-swap","/defi/uniswap-v3-liquidity","/defi/uniswap-v3-flash-swap","/defi/uniswap-v3-flash","/defi/uniswap-v2-optimal-one-sided-supply","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2-add-remove-liquidity","/defi/uniswap-v2"],SV=["/defi/uniswap-v3-swap","/defi/uniswap-v3-liquidity","/defi/uniswap-v3-flash-swap","/defi/uniswap-v3-flash"],MV=["/defi/uniswap-v3-swap","/defi/uniswap-v3-flash-swap","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2","/defi/stable-swap-amm"],xV=["/defi/uniswap-v3-swap","/defi/uniswap-v3-liquidity","/defi/uniswap-v3-flash-swap","/defi/uniswap-v3-flash","/defi/uniswap-v2-optimal-one-sided-supply","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2-add-remove-liquidity","/defi/uniswap-v2","/defi/stable-swap-amm","/defi/constant-sum-amm","/defi/constant-product-amm"],JV=["/defi/uniswap-v3-liquidity","/defi/uniswap-v2-add-remove-liquidity"],zV=["/defi/uniswap-v3-flash-swap"],EV=["/defi/uniswap-v3-flash","/defi/uniswap-v2-flash-swap"],UV=["/defi/uniswap-v3-flash"],TV=["/defi/uniswap-v2-optimal-one-sided-supply","/defi/uniswap-v2-flash-swap","/defi/uniswap-v2-add-remove-liquidity","/defi/uniswap-v2"],QV=["/defi/uniswap-v2-optimal-one-sided-supply"],DV=["/defi/uniswap-v2-optimal-one-sided-supply"],LV=["/defi/uniswap-v2-optimal-one-sided-supply"],_V=["/defi/uniswap-v2-optimal-one-sided-supply"],OV=["/defi/uniswap-v2-add-remove-liquidity","/assembly-math"],PV=["/defi/uniswap-v2-add-remove-liquidity"],$V=["/defi/staking-rewards","/defi/discrete-staking-rewards"],qV=["/defi/staking-rewards","/defi/discrete-staking-rewards"],sf=["/defi/staking-rewards","/defi/discrete-staking-rewards"],af=["/defi/stable-swap-amm"],nf=["/defi/stable-swap-amm"],lf=["/defi/discrete-staking-rewards"],pf=["/defi/dai-proxy"],ef=["/defi/dai-proxy","/app/upgradeable-proxy","/app/minimal-proxy"],cf=["/defi/constant-sum-amm"],tf=["/defi/constant-product-amm"],of=["/defi/chainlink-price-oracle"],rf=["/defi/chainlink-price-oracle"],gf=["/defi/chainlink-price-oracle"],hf=["/defi/chainlink-price-oracle"],df=["/data-locations"],If=["/data-locations"],Cf=["/data-locations"],jf=["/data-locations"],uf=["/constructor"],Af=["/constructor"],yf=["/calling-contract"],mf=["/bitwise"],bf=["/bitwise"],wf=["/bitwise"],kf=["/bitwise"],Zf=["/bitwise","/assembly-variable","/assembly-math","/assembly-loop","/assembly-if","/assembly-error","/app/assembly-bin-exp"],Wf=["/assembly-variable","/assembly-math","/assembly-loop","/assembly-if","/assembly-error","/app/assembly-bin-exp"],Gf=["/assembly-math"],Bf=["/array"],Vf=["/array"],ff=["/app/write-to-any-slot"],Yf=["/app/write-to-any-slot","/app/deploy-any-contract"],Rf=["/app/write-to-any-slot"],Xf=["/app/upgradeable-proxy"],vf=["/app/uni-directional-payment-channel","/app/bi-directional-payment-channel"],Nf=["/app/uni-directional-payment-channel","/app/bi-directional-payment-channel"],Hf=["/app/time-lock"],Ff=["/app/time-lock"],Kf=["/app/simple-bytecode-contract"],Sf=["/app/simple-bytecode-contract"],Mf=["/app/multi-sig-wallet","/app/multi-delegatecall","/app/multi-call"],xf=["/app/multi-sig-wallet"],Jf=["/app/multi-sig-wallet","/app/ether-wallet"],zf=["/app/multi-call"],Ef=["/app/minimal-proxy"],Uf=["/app/merkle-tree"],Tf=["/app/merkle-tree"],Qf=["/app/iterable-mapping"],Df=["/app/gasless-token-transfer"],Lf=["/app/gasless-token-transfer","/app/erc20"],_f=["/app/gasless-token-transfer"],Of=["/app/erc721"],Pf=["/app/erc721"],$f=["/app/erc721","/app/erc1155"],qf=["/app/erc20"],s1=["/app/erc20"],a1=["/app/erc1155"],n1=["/app/erc1155"],l1=["/app/english-auction"],p1=["/app/english-auction","/app/dutch-auction"],e1=["/app/english-auction","/app/dutch-auction"],c1=["/app/dutch-auction"],t1=["/app/crowd-fund"],o1=["/app/crowd-fund"],r1=["/app/crowd-fund"],i1=["/app/create2"],g1=["/app/assembly-bin-exp"],h1=["/app/assembly-bin-exp"],d1=["/abi-encode","/abi-decode"],I1=["/abi-encode"],C1=["/abi-encode","/abi-decode"],j1=["/abi-encode"],u1=["/abi-encode"],A1=["/abi-encode"],y1=["/abi-decode"],vo={visibility:tG,function:["/visibility","/view-and-pure-functions","/sending-ether","/hashing","/function-selector","/function-modifier","/function","/fallback","/delegatecall","/calling-contract","/call"],functions:oG,internal:rG,private:["/visibility","/hacks/accessing-private-data"],public:["/visibility"],external:iG,view:gG,pure:hG,variable:dG,variables:IG,local:CG,global:jG,state:uG,data:AG,gas:yG,unchecked:mG,math:bG,overflow:wG,underflow:kG,try:["/try-catch"],catch:["/try-catch"],error:ZG,errors:WG,test:GG,echidna:BG,calling:VG,parent:fG,contract:YG,contracts:RG,inheritance:XG,super:["/super","/inheritance"],struct:vG,structs:NG,type:HG,types:FG,reading:KG,writing:SG,app:MG,application:xG,cryptography:JG,verify:zG,verifying:EG,signature:UG,signatures:TG,ecrecover:QG,shadow:DG,shadowing:LG,sending:_G,send:OG,ether:PG,eth:$G,transfer:qG,call:sB,fallback:aB,receive:nB,payable:lB,primitive:pB,primitives:eB,boolean:cB,uint256:tB,int256:oB,address:rB,uint:iB,int:gB,new:["/new-contract","/new-contract"],create:hB,creates:dB,create2:IB,salt:CB,mapping:jB,for:["/loop","/assembly-loop"],loop:uB,loops:AB,while:["/loop","/assembly-loop"],do:["/loop"],library:yB,interface:["/interface"],interfaces:mB,override:bB,virtual:wB,is:kB,import:["/import","/enum"],constant:ZB,constants:WB,immutable:GB,immutables:BB,if:["/if-else","/assembly-if"],else:["/if-else"],conditional:VB,statement:fB,statements:YB,hello:RB,world:XB,hash:vB,hashing:NB,keccak256:HB,hack:FB,security:KB,weth:SB,permit:MB,inflation:xB,erc4626:JB,vault:zB,replay:EB,selfdestruct:UB,"re-entrancy":["/hacks/re-entrancy"],source:TB,random:QB,randomness:DB,blockhash:LB,block:_B,timestamp:OB,phishing:PB,"tx.origin":["/hacks/phishing-with-tx-origin"],arithmetic:$B,honeypot:qB,hide:sV,hiding:aV,malicious:nV,code:lV,front:pV,running:eV,deploy:cV,different:tV,same:oV,denial:rV,service:iV,delegatecall:gV,bypass:hV,size:dV,check:IV,extcodesize:CV,manipulation:jV,access:uV,accessing:AV,storage:yV,golf:mV,selector:bV,selectors:wV,modifier:kV,modifiers:ZV,_:WV,first:GV,counter:BV,event:VV,events:fV,wei:YV,units:RV,require:XV,revert:vV,assert:NV,enum:["/enum"],imports:HV,defi:FV,uniswap:KV,v3:SV,swap:MV,amm:xV,liquidity:JV,arbitrage:zV,flash:EV,loan:UV,v2:TV,optimal:QV,one:DV,sided:LV,supply:_V,add:OV,remove:PV,staking:$V,reward:qV,rewards:sf,curve:af,stable:nf,discrete:lf,dai:pf,proxy:ef,sum:cf,product:tf,chainlink:of,price:rf,oracle:gf,oracles:hf,location:df,locations:If,memory:Cf,calldata:jf,constructor:uf,constructors:Af,other:yf,bitwise:mf,most:bf,significant:wf,bit:kf,assembly:Zf,yul:Wf,mul:Gf,switch:["/assembly-if"],array:Bf,arrays:Vf,write:ff,any:Yf,slot:Rf,upgradeable:Xf,"uni-directional":["/app/uni-directional-payment-channel"],payment:vf,channel:Nf,time:Hf,lock:Ff,simple:Kf,bytecode:Sf,multi:Mf,sig:xf,wallet:Jf,staticcall:zf,minimal:Ef,merkle:Uf,tree:Tf,iterable:Qf,gasless:Df,token:Lf,ERC20:_f,erc721:Of,ierc721:Pf,nft:$f,erc20:qf,ierc20:s1,erc1155:a1,ierc1155:n1,english:l1,auction:p1,auctions:e1,dutch:c1,crowd:t1,fund:o1,funding:r1,precompute:i1,"bi-directional":["/app/bi-directional-payment-channel"],binary:g1,exponentiation:h1,abi:d1,encode:I1,bytes:C1,encodeWithSelector:j1,encodeWithSignature:u1,encodeCall:A1,decode:y1},No={"/visibility":["visibility","function","functions","internal","private","public","external"],"/view-and-pure-functions":["view","pure","function","functions"],"/variables":["variable","variables","local","global","state","data"],"/unchecked-math":["gas","unchecked","math","overflow","underflow"],"/try-catch":["try","catch","error","errors"],"/tests/echidna":["test","echidna"],"/super":["calling","parent","contract","contracts","inheritance","super"],"/structs":["struct","structs","data","type","types","variable","variables"],"/state-variables":["reading","writing","state","variable","variables","app","application"],"/signature":["cryptography","verify","verifying","signature","signatures","ecrecover"],"/shadowing-inherited-state-variables":["state","variables","variable","shadow","shadowing","inheritance"],"/sending-ether":["sending","send","ether","eth","transfer","send","call","fallback","receive","payable","function","functions"],"/primitives":["primitive","primitives","data","type","types","variable","variables","boolean","uint256","int256","address","uint","int"],"/payable":["payable","eth","send","ether"],"/new-contract":["new","contract","create","contracts","creates","new","create2","salt"],"/mapping":["data","variable","variables","mapping"],"/loop":["for","loop","loops","while","do"],"/library":["library"],"/interface":["interface","interfaces","contract","contracts"],"/inheritance":["inheritance","super","override","virtual","is","contract","contracts"],"/import":["import"],"/immutable":["constant","constants","immutable","immutables","data","variable","variables"],"/if-else":["if","else","conditional","statement","statements"],"/hello-world":["contract","app","application","hello","world"],"/hashing":["hash","hashing","function","functions","keccak256","cryptography"],"/hacks/weth-permit":["hack","security","weth","permit"],"/hacks/vault-inflation":["hack","security","inflation","erc4626","vault"],"/hacks/signature-replay":["hack","security","cryptography","signature","replay"],"/hacks/self-destruct":["hack","security","selfdestruct"],"/hacks/re-entrancy":["hack","security","re-entrancy"],"/hacks/randomness":["hack","security","source","random","randomness","blockhash","block","timestamp"],"/hacks/phishing-with-tx-origin":["hack","security","phishing","tx.origin"],"/hacks/overflow":["hack","security","arithmetic","overflow","underflow"],"/hacks/honeypot":["hack","security","honeypot"],"/hacks/hiding-malicious-code-with-external-contract":["hack","security","hide","hiding","malicious","code","external","contract"],"/hacks/front-running":["hack","security","front","running"],"/hacks/deploy-different-contracts-same-address":["hack","security","deploy","salt","create","create2","different","contract","same","address"],"/hacks/denial-of-service":["hack","security","denial","service"],"/hacks/delegatecall":["hack","security","delegatecall"],"/hacks/contract-size":["hack","security","bypass","contract","size","check","extcodesize"],"/hacks/block-timestamp-manipulation":["hack","security","block","timestamp","manipulation"],"/hacks/accessing-private-data":["hack","security","access","accessing","private","data","storage"],"/gas-golf":["gas","golf"],"/gas":["gas"],"/function-selector":["function","functions","selector","selectors"],"/function-modifier":["function","functions","modifier","modifiers","_"],"/function":["function","functions"],"/first-app":["contract","contracts","app","first","application","counter"],"/fallback":["fallback","function","functions","receive","payable","send","ether","eth","transfer"],"/events":["event","events"],"/ether-units":["data","variables","variable","ether","wei","units"],"/error":["error","errors","require","revert","assert"],"/enum":["data","variable","variables","enum","import","imports"],"/delegatecall":["delegatecall","call","contract","contracts","function","functions"],"/defi/vault":["defi","vault"],"/defi/uniswap-v3-swap":["defi","uniswap","v3","swap","amm"],"/defi/uniswap-v3-liquidity":["defi","uniswap","v3","liquidity","amm"],"/defi/uniswap-v3-flash-swap":["defi","uniswap","v3","swap","arbitrage","amm"],"/defi/uniswap-v3-flash":["defi","uniswap","v3","flash","loan","amm"],"/defi/uniswap-v2-optimal-one-sided-supply":["defi","uniswap","v2","optimal","one","sided","supply","amm"],"/defi/uniswap-v2-flash-swap":["defi","uniswap","v2","flash","swap","amm"],"/defi/uniswap-v2-add-remove-liquidity":["defi","uniswap","v2","add","remove","liquidity","amm"],"/defi/uniswap-v2":["defi","uniswap","v2","swap","amm"],"/defi/staking-rewards":["defi","staking","reward","rewards"],"/defi/stable-swap-amm":["defi","curve","stable","swap","amm"],"/defi/discrete-staking-rewards":["defi","discrete","staking","reward","rewards"],"/defi/dai-proxy":["defi","dai","proxy"],"/defi/constant-sum-amm":["defi","constant","sum","amm"],"/defi/constant-product-amm":["defi","constant","product","amm"],"/defi/chainlink-price-oracle":["defi","chainlink","price","oracle","oracles"],"/data-locations":["data","location","locations","storage","memory","calldata"],"/constructor":["constructor","constructors","contract","inheritance"],"/constants":["constant","constants","data","variable","variables"],"/calling-contract":["calling","other","contract","contracts","call","function","functions"],"/call":["contract","contracts","call","function","functions"],"/bitwise":["bitwise","most","significant","bit","assembly"],"/assembly-variable":["assembly","variable","yul"],"/assembly-math":["assembly","yul","math","add","mul"],"/assembly-loop":["assembly","loop","yul","while","for"],"/assembly-if":["assembly","yul","if","switch"],"/assembly-error":["assembly","yul","error","revert"],"/array":["data","variable","variables","array","arrays"],"/app/write-to-any-slot":["app","application","write","any","slot","storage"],"/app/upgradeable-proxy":["app","application","delegatecall","upgradeable","proxy"],"/app/uni-directional-payment-channel":["app","application","uni-directional","payment","channel","signature","cryptography"],"/app/time-lock":["app","application","time","lock"],"/app/simple-bytecode-contract":["app","application","simple","bytecode","contract"],"/app/multi-sig-wallet":["app","application","multi","sig","signature","wallet"],"/app/multi-delegatecall":["app","application","multi","delegatecall"],"/app/multi-call":["app","application","multi","call","staticcall"],"/app/minimal-proxy":["app","application","minimal","proxy","contract"],"/app/merkle-tree":["app","application","merkle","tree","cryptography"],"/app/iterable-mapping":["app","application","mapping","data","iterable"],"/app/gasless-token-transfer":["app","application","gasless","token","transfer","ERC20","permit"],"/app/ether-wallet":["app","application","ether","eth","wallet"],"/app/erc721":["app","application","erc721","ierc721","nft"],"/app/erc20":["app","application","erc20","ierc20","token"],"/app/erc1155":["app","application","erc1155","nft","ierc1155"],"/app/english-auction":["app","application","english","auction","auctions"],"/app/dutch-auction":["app","application","dutch","auction","auctions"],"/app/deploy-any-contract":["app","application","deploy","any","contract"],"/app/crowd-fund":["app","application","crowd","fund","funding"],"/app/create2":["app","application","create2","precompute","contract","address"],"/app/bi-directional-payment-channel":["app","application","bi-directional","payment","channel","signature","cryptography"],"/app/assembly-bin-exp":["assembly","yul","binary","exponentiation","math"],"/abi-encode":["abi","encode","bytes","encodeWithSelector","encodeWithSignature","encodeCall"],"/abi-decode":["abi","decode","bytes"]},jg=[];for(const s of Object.keys(No))jg.push(...No[s]);const ug={};for(const s of jg)pG(ug,s);function m1(s){return Array.from(new Set(s))}function b1(s){const a=[],n=cG(ug,s.toLowerCase());for(const l of n)vo[l]&&a.push(...vo[l]);return a}const w1="_component_ri31z_1",k1="_updates_ri31z_8",Z1="_category_ri31z_13",W1="_search_ri31z_16",G1="_listItem_ri31z_20",B1="_label_ri31z_28",V1="_header_ri31z_31",f1="_youTube_ri31z_34",Y1="_youTubeLogo_ri31z_40",R1="_cryptoJobsList_ri31z_44",X1="_cryptoJobsListLogo_ri31z_50",as={component:w1,updates:k1,category:Z1,search:W1,listItem:G1,label:B1,header:V1,youTube:f1,youTubeLogo:Y1,cryptoJobsList:R1,cryptoJobsListLogo:X1},v1=["2024/03/04 - Solidity 0.8.24","2024/02/14 - Github PR erfanHosseinPanahi","2024/01/18 - WETH permit hack"];function N1(){const[s,a]=W.useState(""),[n,l]=xI(),[p,e]=W.useState(null);W.useEffect(()=>{const d=n.get("q");d!=null&&d.length>0&&(a(d),c(d,!1))},[]);function c(d,I){const j=d.trim();if(j.length==0){e(null),I&&l({q:""});return}const A=m1(j.split(" ")),m={};for(const b of A){const G=b1(b);for(const h of G)m[h]=!0}e(m),I&&l({q:j})}const t=lG(d=>c(d,!0),500,[]);function o(d){a(d),t(d)}function r(){return p?Object.keys(p).length==0?i.jsx("div",{children:"No results"}):i.jsx("ul",{className:as.list,children:Cp.filter(({path:d})=>p[d]).map(({path:d,title:I})=>i.jsx("li",{className:as.listItem,children:i.jsx("a",{href:d,children:I})},d))}):i.jsxs(i.Fragment,{children:[ot.map(({routes:d,title:I},j)=>i.jsxs("div",{children:[I&&i.jsx("h3",{className:as.category,children:I}),i.jsx("ul",{className:as.list,children:d.map(({path:A,title:m})=>i.jsx("li",{className:as.listItem,children:i.jsx("a",{href:A,children:m})},A))})]},j)),i.jsxs("div",{children:[i.jsx("h3",{className:as.category,children:"Translations"}),OI.map(({lang:d,url:I})=>i.jsx("li",{className:as.listItem,children:i.jsx("a",{href:I,target:"__blank",children:d})},I))]})]})}return i.jsxs("div",{className:as.component,children:[i.jsx(Cg,{title:"Solidity by Example | 0.8.24",description:"Learn smart contract programming using Solidity"}),i.jsx("h1",{className:as.header,children:i.jsx("a",{href:"/",children:"Solidity by Example"})}),i.jsx("div",{className:as.subHeader,children:"v 0.8.24"}),i.jsxs("div",{className:as.main,children:[i.jsxs("p",{children:["Introduction to ",i.jsx("a",{href:"https://solidity.readthedocs.io",children:"Solidity"})," with simple examples"]}),i.jsxs("div",{className:as.youTube,children:[i.jsx("img",{src:Ig,alt:"logo",className:as.youTubeLogo}),i.jsx("a",{href:"https://www.youtube.com/@smartcontractprogrammer",target:"__blank",children:"Most code are explained here"})]}),i.jsxs("div",{className:as.cryptoJobsList,children:[i.jsx(F2,{size:24,className:as.cryptoJobsListLogo}),i.jsx("a",{href:dg,target:"__blank",children:"Looking for Solidity jobs?"})]}),i.jsx("div",{className:as.updates,children:v1.map((d,I)=>i.jsx("div",{children:d},I))}),i.jsx("div",{className:as.search,children:i.jsx(H2,{value:s,onChange:o})}),r()]})]})}const H1=[{path:"/abi-decode",component:zC},{path:"/abi-encode",component:LC},{path:"/app/assembly-bin-exp",component:sj},{path:"/app/bi-directional-payment-channel",component:cj},{path:"/app/create2",component:hj},{path:"/app/crowd-fund",component:Aj},{path:"/app/deploy-any-contract",component:Zj},{path:"/app/dutch-auction",component:Yj},{path:"/app/english-auction",component:Fj},{path:"/app/erc1155",component:zj},{path:"/app/erc20",component:Lj},{path:"/app/erc721",component:su},{path:"/app/ether-wallet",component:cu},{path:"/app/gasless-token-transfer",component:hu},{path:"/app/iterable-mapping",component:Au},{path:"/app/merkle-tree",component:Zu},{path:"/app/minimal-proxy",component:Yu},{path:"/app/multi-call",component:Fu},{path:"/app/multi-delegatecall",component:zu},{path:"/app/multi-sig-wallet",component:Lu},{path:"/app/simple-bytecode-contract",component:sA},{path:"/app/time-lock",component:cA},{path:"/app/uni-directional-payment-channel",component:hA},{path:"/app/upgradeable-proxy",component:AA},{path:"/app/write-to-any-slot",component:ZA},{path:"/array",component:YA},{path:"/assembly-error",component:FA},{path:"/assembly-if",component:zA},{path:"/assembly-loop",component:LA},{path:"/assembly-math",component:sy},{path:"/assembly-variable",component:cy},{path:"/bitwise",component:hy},{path:"/call",component:Ay},{path:"/calling-contract",component:Zy},{path:"/constants",component:Yy},{path:"/constructor",component:Fy},{path:"/data-locations",component:zy},{path:"/defi/chainlink-price-oracle",component:Ly},{path:"/defi/constant-product-amm",component:sm},{path:"/defi/constant-sum-amm",component:cm},{path:"/defi/dai-proxy",component:hm},{path:"/defi/discrete-staking-rewards",component:Am},{path:"/defi/stable-swap-amm",component:Zm},{path:"/defi/staking-rewards",component:Ym},{path:"/defi/uniswap-v2",component:Fm},{path:"/defi/uniswap-v2-add-remove-liquidity",component:zm},{path:"/defi/uniswap-v2-flash-swap",component:Lm},{path:"/defi/uniswap-v2-optimal-one-sided-supply",component:sb},{path:"/defi/uniswap-v3-flash",component:cb},{path:"/defi/uniswap-v3-flash-swap",component:hb},{path:"/defi/uniswap-v3-liquidity",component:Ab},{path:"/defi/uniswap-v3-swap",component:Zb},{path:"/defi/vault",component:Yb},{path:"/delegatecall",component:Fb},{path:"/enum",component:zb},{path:"/error",component:Lb},{path:"/ether-units",component:sw},{path:"/events",component:cw},{path:"/fallback",component:hw},{path:"/first-app",component:Aw},{path:"/function",component:Zw},{path:"/function-modifier",component:Yw},{path:"/function-selector",component:Fw},{path:"/gas",component:zw},{path:"/gas-golf",component:Lw},{path:"/hacks/accessing-private-data",component:sk},{path:"/hacks/block-timestamp-manipulation",component:ck},{path:"/hacks/contract-size",component:hk},{path:"/hacks/delegatecall",component:Ak},{path:"/hacks/denial-of-service",component:Zk},{path:"/hacks/deploy-different-contracts-same-address",component:Yk},{path:"/hacks/front-running",component:Fk},{path:"/hacks/hiding-malicious-code-with-external-contract",component:zk},{path:"/hacks/honeypot",component:Lk},{path:"/hacks/overflow",component:sZ},{path:"/hacks/phishing-with-tx-origin",component:cZ},{path:"/hacks/randomness",component:hZ},{path:"/hacks/re-entrancy",component:AZ},{path:"/hacks/self-destruct",component:ZZ},{path:"/hacks/signature-replay",component:YZ},{path:"/hacks/vault-inflation",component:FZ},{path:"/hacks/weth-permit",component:zZ},{path:"/hashing",component:LZ},{path:"/hello-world",component:s0},{path:"/if-else",component:c0},{path:"/immutable",component:h0},{path:"/import",component:A0},{path:"/inheritance",component:Z0},{path:"/interface",component:Y0},{path:"/library",component:F0},{path:"/loop",component:z0},{path:"/mapping",component:L0},{path:"/new-contract",component:sW},{path:"/payable",component:cW},{path:"/primitives",component:hW},{path:"/sending-ether",component:AW},{path:"/shadowing-inherited-state-variables",component:ZW},{path:"/signature",component:YW},{path:"/state-variables",component:FW},{path:"/structs",component:zW},{path:"/super",component:LW},{path:"/tests/echidna",component:s2},{path:"/try-catch",component:c2},{path:"/unchecked-math",component:h2},{path:"/variables",component:A2},{path:"/view-and-pure-functions",component:Z2},{path:"/visibility",component:Y2},{path:"",component:N1}];function Ho(){const{state:s,init:a}=et();return W.useLayoutEffect(()=>{a({width:window.document.body.clientWidth})},[]),s.initialized?i.jsx(MI,{basename:"",children:i.jsx(YC,{children:i.jsx(FI,{children:H1.map(n=>{const{prev:l,next:p}=lC(n.path);return i.jsx(hg,{path:n.path,element:Do.createElement(n.component,{prev:l,next:p})},n.path)})})})}):null}const F1=document.getElementById("root"),K1=qi(F1),Fo=document.getElementById("root");Fo.hasChildNodes()?$i(Fo,i.jsx(bo,{children:i.jsx(Ho,{})})):K1.render(i.jsx(bo,{children:i.jsx(Ho,{})})); diff --git a/bitwise/index.html b/bitwise/index.html index 221b38e7b..2564c65e3 100644 --- a/bitwise/index.html +++ b/bitwise/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/call/index.html b/call/index.html index 221b38e7b..2564c65e3 100644 --- a/call/index.html +++ b/call/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/calling-contract/index.html b/calling-contract/index.html index 221b38e7b..2564c65e3 100644 --- a/calling-contract/index.html +++ b/calling-contract/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/constants/index.html b/constants/index.html index 221b38e7b..2564c65e3 100644 --- a/constants/index.html +++ b/constants/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/constructor/index.html b/constructor/index.html index 221b38e7b..2564c65e3 100644 --- a/constructor/index.html +++ b/constructor/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/data-locations/index.html b/data-locations/index.html index 221b38e7b..2564c65e3 100644 --- a/data-locations/index.html +++ b/data-locations/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/chainlink-price-oracle/index.html b/defi/chainlink-price-oracle/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/chainlink-price-oracle/index.html +++ b/defi/chainlink-price-oracle/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/constant-product-amm/index.html b/defi/constant-product-amm/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/constant-product-amm/index.html +++ b/defi/constant-product-amm/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/constant-sum-amm/index.html b/defi/constant-sum-amm/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/constant-sum-amm/index.html +++ b/defi/constant-sum-amm/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/dai-proxy/index.html b/defi/dai-proxy/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/dai-proxy/index.html +++ b/defi/dai-proxy/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/discrete-staking-rewards/index.html b/defi/discrete-staking-rewards/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/discrete-staking-rewards/index.html +++ b/defi/discrete-staking-rewards/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/stable-swap-amm/index.html b/defi/stable-swap-amm/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/stable-swap-amm/index.html +++ b/defi/stable-swap-amm/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/staking-rewards/index.html b/defi/staking-rewards/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/staking-rewards/index.html +++ b/defi/staking-rewards/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/uniswap-v2-add-remove-liquidity/index.html b/defi/uniswap-v2-add-remove-liquidity/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/uniswap-v2-add-remove-liquidity/index.html +++ b/defi/uniswap-v2-add-remove-liquidity/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/uniswap-v2-flash-swap/index.html b/defi/uniswap-v2-flash-swap/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/uniswap-v2-flash-swap/index.html +++ b/defi/uniswap-v2-flash-swap/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/uniswap-v2-optimal-one-sided-supply/index.html b/defi/uniswap-v2-optimal-one-sided-supply/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/uniswap-v2-optimal-one-sided-supply/index.html +++ b/defi/uniswap-v2-optimal-one-sided-supply/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/uniswap-v2/index.html b/defi/uniswap-v2/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/uniswap-v2/index.html +++ b/defi/uniswap-v2/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/uniswap-v3-flash-swap/index.html b/defi/uniswap-v3-flash-swap/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/uniswap-v3-flash-swap/index.html +++ b/defi/uniswap-v3-flash-swap/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/uniswap-v3-flash/index.html b/defi/uniswap-v3-flash/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/uniswap-v3-flash/index.html +++ b/defi/uniswap-v3-flash/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/uniswap-v3-liquidity/index.html b/defi/uniswap-v3-liquidity/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/uniswap-v3-liquidity/index.html +++ b/defi/uniswap-v3-liquidity/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/uniswap-v3-swap/index.html b/defi/uniswap-v3-swap/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/uniswap-v3-swap/index.html +++ b/defi/uniswap-v3-swap/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/defi/vault/index.html b/defi/vault/index.html index 221b38e7b..2564c65e3 100644 --- a/defi/vault/index.html +++ b/defi/vault/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/delegatecall/index.html b/delegatecall/index.html index 221b38e7b..2564c65e3 100644 --- a/delegatecall/index.html +++ b/delegatecall/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/enum/index.html b/enum/index.html index 221b38e7b..2564c65e3 100644 --- a/enum/index.html +++ b/enum/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/error/index.html b/error/index.html index 221b38e7b..2564c65e3 100644 --- a/error/index.html +++ b/error/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/ether-units/index.html b/ether-units/index.html index 221b38e7b..2564c65e3 100644 --- a/ether-units/index.html +++ b/ether-units/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/events/index.html b/events/index.html index 221b38e7b..2564c65e3 100644 --- a/events/index.html +++ b/events/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/fallback/index.html b/fallback/index.html index 221b38e7b..2564c65e3 100644 --- a/fallback/index.html +++ b/fallback/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/first-app/index.html b/first-app/index.html index 221b38e7b..2564c65e3 100644 --- a/first-app/index.html +++ b/first-app/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/function-modifier/index.html b/function-modifier/index.html index 221b38e7b..2564c65e3 100644 --- a/function-modifier/index.html +++ b/function-modifier/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/function-selector/index.html b/function-selector/index.html index 221b38e7b..2564c65e3 100644 --- a/function-selector/index.html +++ b/function-selector/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/function/index.html b/function/index.html index 221b38e7b..2564c65e3 100644 --- a/function/index.html +++ b/function/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/gas-golf/index.html b/gas-golf/index.html index 221b38e7b..2564c65e3 100644 --- a/gas-golf/index.html +++ b/gas-golf/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/gas/index.html b/gas/index.html index 221b38e7b..2564c65e3 100644 --- a/gas/index.html +++ b/gas/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/accessing-private-data/index.html b/hacks/accessing-private-data/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/accessing-private-data/index.html +++ b/hacks/accessing-private-data/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/block-timestamp-manipulation/index.html b/hacks/block-timestamp-manipulation/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/block-timestamp-manipulation/index.html +++ b/hacks/block-timestamp-manipulation/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/contract-size/index.html b/hacks/contract-size/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/contract-size/index.html +++ b/hacks/contract-size/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/delegatecall/index.html b/hacks/delegatecall/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/delegatecall/index.html +++ b/hacks/delegatecall/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/denial-of-service/index.html b/hacks/denial-of-service/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/denial-of-service/index.html +++ b/hacks/denial-of-service/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/deploy-different-contracts-same-address/index.html b/hacks/deploy-different-contracts-same-address/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/deploy-different-contracts-same-address/index.html +++ b/hacks/deploy-different-contracts-same-address/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/front-running/index.html b/hacks/front-running/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/front-running/index.html +++ b/hacks/front-running/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/hiding-malicious-code-with-external-contract/index.html b/hacks/hiding-malicious-code-with-external-contract/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/hiding-malicious-code-with-external-contract/index.html +++ b/hacks/hiding-malicious-code-with-external-contract/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/honeypot/index.html b/hacks/honeypot/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/honeypot/index.html +++ b/hacks/honeypot/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/overflow/index.html b/hacks/overflow/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/overflow/index.html +++ b/hacks/overflow/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/phishing-with-tx-origin/index.html b/hacks/phishing-with-tx-origin/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/phishing-with-tx-origin/index.html +++ b/hacks/phishing-with-tx-origin/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/randomness/index.html b/hacks/randomness/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/randomness/index.html +++ b/hacks/randomness/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/re-entrancy/index.html b/hacks/re-entrancy/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/re-entrancy/index.html +++ b/hacks/re-entrancy/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/self-destruct/index.html b/hacks/self-destruct/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/self-destruct/index.html +++ b/hacks/self-destruct/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/signature-replay/index.html b/hacks/signature-replay/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/signature-replay/index.html +++ b/hacks/signature-replay/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/vault-inflation/index.html b/hacks/vault-inflation/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/vault-inflation/index.html +++ b/hacks/vault-inflation/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hacks/weth-permit/index.html b/hacks/weth-permit/index.html index 221b38e7b..2564c65e3 100644 --- a/hacks/weth-permit/index.html +++ b/hacks/weth-permit/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hashing/index.html b/hashing/index.html index 221b38e7b..2564c65e3 100644 --- a/hashing/index.html +++ b/hashing/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/hello-world/index.html b/hello-world/index.html index 221b38e7b..2564c65e3 100644 --- a/hello-world/index.html +++ b/hello-world/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/if-else/index.html b/if-else/index.html index 221b38e7b..2564c65e3 100644 --- a/if-else/index.html +++ b/if-else/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/immutable/index.html b/immutable/index.html index 221b38e7b..2564c65e3 100644 --- a/immutable/index.html +++ b/immutable/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/import/index.html b/import/index.html index 221b38e7b..2564c65e3 100644 --- a/import/index.html +++ b/import/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/index.html b/index.html index 221b38e7b..2564c65e3 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/inheritance/index.html b/inheritance/index.html index 221b38e7b..2564c65e3 100644 --- a/inheritance/index.html +++ b/inheritance/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/interface/index.html b/interface/index.html index 221b38e7b..2564c65e3 100644 --- a/interface/index.html +++ b/interface/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/library/index.html b/library/index.html index 221b38e7b..2564c65e3 100644 --- a/library/index.html +++ b/library/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/loop/index.html b/loop/index.html index 221b38e7b..2564c65e3 100644 --- a/loop/index.html +++ b/loop/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/mapping/index.html b/mapping/index.html index 221b38e7b..2564c65e3 100644 --- a/mapping/index.html +++ b/mapping/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/new-contract/index.html b/new-contract/index.html index 221b38e7b..2564c65e3 100644 --- a/new-contract/index.html +++ b/new-contract/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/payable/index.html b/payable/index.html index 221b38e7b..2564c65e3 100644 --- a/payable/index.html +++ b/payable/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/primitives/index.html b/primitives/index.html index 221b38e7b..2564c65e3 100644 --- a/primitives/index.html +++ b/primitives/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/sending-ether/index.html b/sending-ether/index.html index 221b38e7b..2564c65e3 100644 --- a/sending-ether/index.html +++ b/sending-ether/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/shadowing-inherited-state-variables/index.html b/shadowing-inherited-state-variables/index.html index 221b38e7b..2564c65e3 100644 --- a/shadowing-inherited-state-variables/index.html +++ b/shadowing-inherited-state-variables/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/signature/index.html b/signature/index.html index 221b38e7b..2564c65e3 100644 --- a/signature/index.html +++ b/signature/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/state-variables/index.html b/state-variables/index.html index 221b38e7b..2564c65e3 100644 --- a/state-variables/index.html +++ b/state-variables/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/structs/index.html b/structs/index.html index 221b38e7b..2564c65e3 100644 --- a/structs/index.html +++ b/structs/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/super/index.html b/super/index.html index 221b38e7b..2564c65e3 100644 --- a/super/index.html +++ b/super/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/tests/echidna/index.html b/tests/echidna/index.html index 221b38e7b..2564c65e3 100644 --- a/tests/echidna/index.html +++ b/tests/echidna/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/try-catch/index.html b/try-catch/index.html index 221b38e7b..2564c65e3 100644 --- a/try-catch/index.html +++ b/try-catch/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/unchecked-math/index.html b/unchecked-math/index.html index 221b38e7b..2564c65e3 100644 --- a/unchecked-math/index.html +++ b/unchecked-math/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/variables/index.html b/variables/index.html index 221b38e7b..2564c65e3 100644 --- a/variables/index.html +++ b/variables/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/view-and-pure-functions/index.html b/view-and-pure-functions/index.html index 221b38e7b..2564c65e3 100644 --- a/view-and-pure-functions/index.html +++ b/view-and-pure-functions/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - + diff --git a/visibility/index.html b/visibility/index.html index 221b38e7b..2564c65e3 100644 --- a/visibility/index.html +++ b/visibility/index.html @@ -28,7 +28,7 @@ gtag("config", "UA-133759045-1") - +