Skip to content

Instantly share code, notes, and snippets.

@Dustin4444
Created July 29, 2026 07:20
Show Gist options
  • Select an option

  • Save Dustin4444/4f12378343c77da83151695a3c984591 to your computer and use it in GitHub Desktop.

Select an option

Save Dustin4444/4f12378343c77da83151695a3c984591 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.34+commit.80d5c536.js&optimize=undefined&runs=200&gist=
{
".deps/remix-tests/remix_accounts.sol": {
"__sources__": {
".deps/remix-tests/remix_accounts.sol": {
"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary TestsAccounts {\n function getAccount(uint index) pure public returns (address) {\n return address(0);\n }\n}\n",
"file": ".deps/remix-tests/remix_accounts.sol"
}
}
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
library TestsAccounts {
function getAccount(uint index) pure public returns (address) {
return address(0);
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
library Assert {
event AssertionEvent(
bool passed,
string message,
string methodName
);
event AssertionEventUint(
bool passed,
string message,
string methodName,
uint256 returned,
uint256 expected
);
event AssertionEventInt(
bool passed,
string message,
string methodName,
int256 returned,
int256 expected
);
event AssertionEventBool(
bool passed,
string message,
string methodName,
bool returned,
bool expected
);
event AssertionEventAddress(
bool passed,
string message,
string methodName,
address returned,
address expected
);
event AssertionEventBytes32(
bool passed,
string message,
string methodName,
bytes32 returned,
bytes32 expected
);
event AssertionEventString(
bool passed,
string message,
string methodName,
string returned,
string expected
);
event AssertionEventUintInt(
bool passed,
string message,
string methodName,
uint256 returned,
int256 expected
);
event AssertionEventIntUint(
bool passed,
string message,
string methodName,
int256 returned,
uint256 expected
);
function ok(bool a, string memory message) public returns (bool result) {
result = a;
emit AssertionEvent(result, message, "ok");
}
function equal(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventUint(result, message, "equal", a, b);
}
function equal(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventInt(result, message, "equal", a, b);
}
function equal(bool a, bool b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventBool(result, message, "equal", a, b);
}
// TODO: only for certain versions of solc
//function equal(fixed a, fixed b, string message) public returns (bool result) {
// result = (a == b);
// emit AssertionEvent(result, message);
//}
// TODO: only for certain versions of solc
//function equal(ufixed a, ufixed b, string message) public returns (bool result) {
// result = (a == b);
// emit AssertionEvent(result, message);
//}
function equal(address a, address b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventAddress(result, message, "equal", a, b);
}
function equal(bytes32 a, bytes32 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventBytes32(result, message, "equal", a, b);
}
function equal(string memory a, string memory b, string memory message) public returns (bool result) {
result = (keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)));
emit AssertionEventString(result, message, "equal", a, b);
}
function notEqual(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventUint(result, message, "notEqual", a, b);
}
function notEqual(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventInt(result, message, "notEqual", a, b);
}
function notEqual(bool a, bool b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventBool(result, message, "notEqual", a, b);
}
// TODO: only for certain versions of solc
//function notEqual(fixed a, fixed b, string message) public returns (bool result) {
// result = (a != b);
// emit AssertionEvent(result, message);
//}
// TODO: only for certain versions of solc
//function notEqual(ufixed a, ufixed b, string message) public returns (bool result) {
// result = (a != b);
// emit AssertionEvent(result, message);
//}
function notEqual(address a, address b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventAddress(result, message, "notEqual", a, b);
}
function notEqual(bytes32 a, bytes32 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventBytes32(result, message, "notEqual", a, b);
}
function notEqual(string memory a, string memory b, string memory message) public returns (bool result) {
result = (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b)));
emit AssertionEventString(result, message, "notEqual", a, b);
}
/*----------------- Greater than --------------------*/
function greaterThan(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a > b);
emit AssertionEventUint(result, message, "greaterThan", a, b);
}
function greaterThan(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a > b);
emit AssertionEventInt(result, message, "greaterThan", a, b);
}
// TODO: safely compare between uint and int
function greaterThan(uint256 a, int256 b, string memory message) public returns (bool result) {
if(b < int(0)) {
// int is negative uint "a" always greater
result = true;
} else {
result = (a > uint(b));
}
emit AssertionEventUintInt(result, message, "greaterThan", a, b);
}
function greaterThan(int256 a, uint256 b, string memory message) public returns (bool result) {
if(a < int(0)) {
// int is negative uint "b" always greater
result = false;
} else {
result = (uint(a) > b);
}
emit AssertionEventIntUint(result, message, "greaterThan", a, b);
}
/*----------------- Lesser than --------------------*/
function lesserThan(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a < b);
emit AssertionEventUint(result, message, "lesserThan", a, b);
}
function lesserThan(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a < b);
emit AssertionEventInt(result, message, "lesserThan", a, b);
}
// TODO: safely compare between uint and int
function lesserThan(uint256 a, int256 b, string memory message) public returns (bool result) {
if(b < int(0)) {
// int is negative int "b" always lesser
result = false;
} else {
result = (a < uint(b));
}
emit AssertionEventUintInt(result, message, "lesserThan", a, b);
}
function lesserThan(int256 a, uint256 b, string memory message) public returns (bool result) {
if(a < int(0)) {
// int is negative int "a" always lesser
result = true;
} else {
result = (uint(a) < b);
}
emit AssertionEventIntUint(result, message, "lesserThan", a, b);
}
}
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
ref: refs/heads/main
DIRCji� +�5�ji� +�5����f�Kw���w�g��
��)�LW .deps/npm/.resolution-index.jsonji��!p.@ji��!p.@��ƴ��i�/��֚i�Hk��y�$.deps/remix-tests/remix_accounts.solji��!^�ji��!^�������b 2�H"��(���,�Dz!.deps/remix-tests/remix_tests.solji��xh�ji��xh������o#q{K���Sc��X�W�n.prettierrc.jsonji���@ji���@���K�n���:��HR*��5���
README.txtji� Xb�ji� Xb������ J�x�QM��SA��d� �artifacts/TestsAccounts.jsonji� �G�ji� �G����� �f�6�S[����:�%artifacts/TestsAccounts_metadata.jsonji� � @ji� � @��j��t�Ku���m�JG�'��m:artifacts/build-info/c93250c6237c136ab75411103165d6c2.jsonji��j��ji��j�� ��+��^x;n��G�g�f6�contracts/1_Storage.solji���Hji���H
��tz����¬����a�\i�contracts/2_Owner.solji���)�ji���)� ��HV��Qh��s��#(F��rcontracts/3_Ballot.solji��l��ji��l����
U#ۦ�N}� �&U��9`���remix.config.jsonji��u�ji��u� ���Q=Imv8�n{s9'/�:pSB�6scripts/deploy_with_ethers.tsji��� �ji��� �������޶�Z��͂���WZscripts/ethers-lib.tsji����@ji����@���In��ˠ/�ds�9���5��[tests/Ballot_test.solji���V�ji���V�����7�Ûv�%��1���$�s��tests/storage.test.jsN¦(�ǘ8|49*.�/�v�
x��S�N�0�6����-3��j�vA�2 l����"�#���;r^�
VI�����V)�iH����ne���/��=j#UC� ,�e媮�]�Hx�����|�T��:ء��R���k�ζ����I�^����o�#�i;k��T�u������l,MR: 4P� �|:���C��?yu���s�5v��~��ј�|�S�F?�b,X��Y`�r����4N|&��k�uN�#B�O�⣺y��p�����+���r*'KC����HgP����`�Z������(pܷ�wh�C�[��X˧3�Ǝ��`p�,�����6��q_ߜҩ <@O�T�i�O\y`a>�,r%�7��>Cm�Z�V��y� <� �
�&%Tt׸3h̛kh����w�&��gI>y��
�\��?��Q�y)h
,rNE�L@���0IBQ�q% S���I�cN!M��f%96�O֯�g�2��N�'���L��z��1ɒ<�Y��A��aij"͂K�8L��8�8g�%�EZ�,�ќg�l�rr�.kq��|�W�0�Mt�x��z��p]�Pn�OI͏}�6���B���{���;��A
x���KO1�{ΧX�U��j�ܪU%(���P�x'��� �V|���G<vh9e<����߲z�}89}�g�eD���2�3����Z�YF�"/��n�k w�12�B�@y��75X2��{�ߡE�yk>��r��
mY���!SK�xC#��9j��} �.xh2��\9��ҡUoP���m(vU#'*�j�d�d�5魇a�,�fOP�P��.$���G�*]�/��F�'��� _SHd`\�L?!c3;���y �q\�9�@f�qQ�-M s�E��#��Sj�i�2�s� � �3 �����p8f'R��)�����X�P�\r�+�� eZη��0W\5Ο�pwJ_���׉*��'I�%��p�,�/u�j��8�h��z k*xI]����ݯ�[�����{x�{��TUo{/���%n� g�;ђ
�s9���-��u����kp�w��|:���H�:o��C�a�,Z��j �R��hK���-\��r �R�Ũ�a��.^��z �"�E��� �����y�Ӄt�)�;�x0��p@�{��魁���{�N�ZpK FD7#4�b�m4)k��J����x�F]��>$!���Wj��ۿ��0`uc��������/�����r`{�� �}��x��X\n�zx����@\u���dZ�\ �A�,�z#A��MUqU����X��ρu{�+>�F}
=$���\-wO�0��#P'Ù��Hm�#0_���=뾑���?�G�i~ܭ~;;�sp+0��\��L^�_r
x��Q[k�0ݳ��O6$��<l��A�` ��X e��k�%O��4�����d��窣\��7/�׫���+U��4�\�a�Q�����j�i4Nnk o�*��~���"ŻT\�4 T�X����ɳ��0C��+�10��l�֒U!��C�T0���Xwjq4��++�Ia���z�#*D���dq�Ajmy�#���W� �|���q��^�/�&��h�G��l'���5+k���:��Q��͵*�t�t߉�hZ_EC`Ҕ��L/�8Ύ�i�0�ZD'f��98�STT��Q�(�] ������F�=Ϊ�?t�)J'���XЯV�脺;���Ze8J���Z� eJzD
_�V�� \�q��C�ucuygg�ar<JF��{��j7��5q��7�[�L��hw�<��ZO����հ\"�<�>�5�
x�uT�r�6 �_�SuQ��ݽ4��L�8Ӵ�ٌ�N{��"l"��"��;��۴7��� ������z���/�]�]�������m�p}�2f����AadyN�m(A/�0*�㕡����%س�z�� �$IA�C0D \C��k�V�*:I=T�3_�]������(V"Þ&�#%�x������c���Q�Q-���`�,��ʘ� T�Rl����_8���r>G1ך2g� x-w}�#�Ԙ��R+���W�=:�8�-�+��>��D���fM��K�0�ؘ T��k\��H'ȷ� ��ن�Z�������߁e�<G6�ln���M����Co��o;=�<����<��$0+T����TA���<�Ƙ��C3F���{�q� '����0��*��A��^��`W^P �s��z�r � � `�0d��mY�C��,�+~�K|�y\���Ř�9h�ګvZ|L ,,�-��j|����n�%"i�T��)md�'��^� �>ǹ�"�e������[��X�G���>��dtYb��`����5������K;#����J�����hCc�C@��+V�A���Q׳㧡ϟ�r��@��ƈR��W�9�c7�l���c�zr�����@�!ՐF+�a����j膠�m��쬐��U��¿43 �� [}ׇ�@q.b�o���F@�����S�j���xՏs�c��OK�FY���_M�߮�X�<���y�
x�M��J�@E}�W\�Є���RhA�i|��f���솝 ZJ�]����0Ý3�Ni}����&����`z�V%a`� ��!-!.��P ��׀����'Ú2�p̢<dz%ńN<i�w���8˯ ���gp��ƨGAI��087^�?���U�C�M�
�5����~p1���"} :r|=���G���@����I�]��eYD��z����"�/�W֔�(J�F�b��)$��� �`[�/ed�%�9���o��[ʬo�UU��7�=]�<9��3��"��߱�6e1��&itN����3
x��X�۸�g���b{�h7w���A�{u��6h���b����Ć"U���=��^ )�9\Q}�4/��73�
����x���nn���o���G^�4��Bi���~?���ŗ��l�iV� �����7���[����Cq���n��a��G˭@�BY���=ܵ���5�W��:�J4�P��� }A�P`�,Wr�7�RI�Yi�@�eps�n��R0�H<@�H�#�c�phx��� Y���
vJÞiζ fQ���:��i4(-00\��y��Xݗ>Л`==���ƮI���V�}ۓ�
�����*%��j� �;���؆Y�P%� ��:z���U�&W��t����r;I����
A��6����S�y�=�2��y��ɓ�"K梷�e�%������I���)(kۀU��Dm� �v��L�-��R�8������8�$�/��-��l�G`����Y�zt~����>1��ֽ�EߑH�Ft�S?~�z�C>���hL�����
^B�0�}�ֳKn,�8$�ˋHj��4s����}����NÉ+(�1jY�qY/�5��>���.��f4� TG�Z^2!�/ �V��fG:�<�:�Z����(6f� �a=.��Hg�U���o��Rc��Q�_X�f^ :�Y �WHC\��@~�~K%��J/B2�?@����\�2��$l���ԅAY�^ށ� �CPa/��s���
��i��UR�����L5Щ�����dE�nS��t�UT�"X 4�4 ��6p�_�>(|���?��#ha�KQO�y0�����L�Lo�?D�]o�EQ����u��������"c�H�ͨ�!����~�V't������r9&�S��I��#�������U�1* ���C?Q�Iq��F��;�<I���p��Q;�"+�]/K�KP�=�� x���{��G�Z��u2|ǵ��t�S�'E?k�w�5� �g�gǜ��08_>b�;,�K�8�ʡ���o���Ġ{t$:��;۠&O1Y暨hܣ�X���n< �Q��-�J��.A�
����Q��Y����J*J�c�4f����v%0����W�H 5�y�������R��l�.��XZq�T�qmKE�
�_ �� �"��)#>v�I7�۪���E�G5��E��#��f��b^*W�|MQ��L�s��ؒ�9��Y@X��P��e��}jt>>}^I.6B�nWp�!�0sZ���� Ld�'xps}����ap��i�!��Y�V��7�N�L�
����pX�/��y1
�T��^Kw�Q�8|�a��1!���$y8������;���������{u&bς��y�e�p#�U�m�mW�P�^�#��7���߶LW.4 3�6��E���,$�(Q3�C��P��G}��0O�>���w~�ս��3`�_�� �+ �rg����� 7^rB��P姩�� �̸�$;�ۜ�`<-F2��K<n{�g���X���`X��-\ۗ����g1�C�B�b���o�v����r:�X5�kʕ�<X�w�~zZg7+���w��5�gr�{'3J�e��4�Pr�܏�)�|u@I� n!�(K�a�_9�C���Ŋ}�����x�e�0�G���q���K���U]:�0ex� pi���������P�*1�� �܉83��!f���jJ]q߈ݤz\��/>��y�[�{�"��2<L"( ���� F�hO��Rzy����3&}����v�` .K�Wt��<�]Oݒ~�=f����_�����*#y�)/ʯ;� �W�H~� ���ܟ���Zܛ���[��Ed3�4/޻dr�KCa�55�ly�@���
l��XoUˬ�4p��/ �c"�����ӥ�v=e�|�R�;H�#�}��i��4��MHP.G`�N����r��q̾ �% 'b�u �ä��&��Ss�E��z�}�H+��ݿ������ߝ����I��H�>Q:e��a��/��q�@�S=]��I�0!̙ � ��2�5%�nFa\bu!�~AmP�K%�t��ѷ�x�d_�ϷH��r�ě�D�4MRS��x�cq�����tl�
x��PKK�@��_1�)�����*�=��!��I�Ά}@K����^u�0�c��=���7� @H��/�X�a��N)9x�5$.�h[o�S�����_�o�����A�%��^>�-)d�śF4�^w��^V 7<�n��[C�� �+���%<Tr-�M��]�N�vx��ù�4s��Y�=��#qb����!��7��a��=���_\MR\@���Zl.���԰���r ���?�g�M�5O��I#��
x�}�ێ#5�����IF�$�b�@�j5Ҟ��wȱ�;nW(�� �}wd�!�a5��tW�_����}��w_�V���۟�o�&��ΐ���$/��Û�g�uQDU�B`g��g��]/X���z��r�)
[X"&{%f��J��h�M6E���)p�_������I�#�)����;Ӫ��([o|*
P����أ������V�#�����x �Ue}���%Ǻ�8��Xo� ؙl[���)[�,5� ������-��s$����8ڐc���� ]��qO(��%US�"��T��
MAG�)�d�R�@��t-{D���젼�rn����ϦD!&f�/2^�= v�)��i!I"��8��{�ʇ�\��RT*QJ�2�#I����&�s��皅���Ō���P1XC*�n��-�S�m����f�ѝ����Hs��]�� ��P.0�Gk���)�2I��&�W�4����.���fu����!�v��z���a����u2� ��j�~�V(�!�F
�����j�II��Git��e��渚MZ�<�h�;��,pi`T`΄�ȸI4���ij�k�K�F$QJ�X|���A5.wHE���g���-b�$��W�Dg8(Q� �A�\�o_�دS'�V���A�84;gu���~��_o1�c�O���ƙ�;����{��\c��jt�<�Toz�G����L���!�u�� V����H���� m�������%_�g��J4
x�ՒOO1�9�S<���ϦBD��R�=P���=�Z;�cJ���'$m�ֲ=��f<���.�.���]��2 ��I ��p8���q�$0ޙ{���$�z`P���@ݔ� �̦�L Y�~^�����K���ȩ�ꍑ�S�g&Jv"���rM9�V?%&Y�#.�/3��V�Y��GO�K)/�� �ɛ!�A��I+�Y�� ��|'#1-�rwW;����A�兏K��u,�������q�jc��@�E�h+&k�ܤ��j�� �$�O������< ���� y�i%]��ƕ�%qa\ʹY������m���R���/��73������ƽ�֟��+kx_O��a�~<��]�U���g<�
x��]m��8���ɯ|_:@��wQ�pn��䦓�uw�vr;d��z�m��� � ��@R�lIV'�`bQ�ê"YU,R�b�]8إ��˗��FK��~�Η�Ϟ�~}��L?�W�?nE,vb��L�z�^��d;U�W���$��x��z;zW� ����*�!��Bx.��O��A�+��2L�LR�ω��K��ƇM�����X>NӜ)�G��0˻�a�����/�Ӳ]�CD��wF � ��%`���{PHc2�bH ��nL��…���)�1�P�"4��t�U���C�9�0Ʊpq[T $�0@��3$O�P�Ƙ2 �8`8�/ ������tAcM�L��9� `􀖍��
9e:'ӿd�J~4N�@��7x`�X��
d>
d��fsX}#���Ke
��fJ��r)
��ʒ�B���<H��@�#N�R�k����7Re��'sB���8
�#
O�UQ]�����$vq$�]bUG]D��XI�#��<���1�r�J�b"F���\L9B!AD�� A��G��q���E � �1�s# 3yn��1�b��a"{-G�G�`{�cY���ww?#|� :�o2U?�>]9�woq����lr��7����7c�8W����r.vf��?����o_�����^��i����ong�C^[9Y& �渝�:��W�Lgw��x:���ݙ`) �woQ��s �vv������ͯ��W�}� �%�y�0��L�����������s}��&%��<[.oYz���ouK�4�O��W�Ќ��S���B`�P�R��TuTh�{w��1�N��������j�cM�Y����s�h�[�!D�i�wWi��!�bIk�y[��步�c�ZJ]�$K���g��2���F�`��4�@��������P��Y J�){��Y�a �1Eu�\�;����no�J��%�T¤ ��-��|���"���.�ˍX�(�”R����i��&�O4B�<�>��8&�����/�`��!J� "Z�>�2�f*�qdm�L_��E�O�V�-�$����l2��(��B�HS%0�ys;��K%s���z����{�=h�����l>�i�Ĝ���/O�OհP���D>k������0�;W���B`�$JR�bse��.��6|�&U�`SӾW.���Qw�1�/}����=I˫VN�|�l�E2���a�|�$O6�d���v���=�2M_-�s��������z�H�fov"9�6y�JՓ�g�p���T4~H>V�Q�X7ᕺ7����vԵ��� �)h�T�r����d[z�wۇ�$����^-v��sq�zg�K�QU��$��N�)v{�l��%C�r��Fa">6��a�l��\���A�ʣ�7��B&�|Ծ�V���Z�^�@c�>i��t�Z��������-b0a$� �ȣ�gaȽ0��"�ł0� �2�`H��'�(����b�\F �=q�y |���B 8� _r�B�0��Ea��傅nDB�l�B<0����2L��)�����<��yN�56�2e4������h&�?��.����a���e�z������vX_�����}S�}&�Al�����a�]���I q}LK�'i)�c+k'�B�Au}�UqL*�����F"��폁���ʿj��ǃ��:�2����5���a!vU|���N����U"v��̷?��曌�#�껯��߫%sO�M�`�I2��G�m���Ze��>5i�s�j)6�*^���xOq*/�֨�Wl4�Q�<�s��b/U��*�Z�M�U�X ),��4�N<�MLv�C� !��*����ϭ/���9����<|�� �b*��f%�3k��k*皌�>&ݚ��h�4ɟK5*����@, i��X>��X��B�T5t]��Z�����#)���iR��JqZ�RPW���r��aN�0�1;�� H�e@��,M���b�HGlF���5���v� P��c���R��o����gX�} �,��B��d��0
�绫P��06���*C�1�B3��*T�F��HmU����*�V?zv�I�"�ѡ�yJ��|��*Q[�>A�=ݿkԠ�!l���~}l�,���C��zc2<ȜT�Kʼn��;��I��
���kZj}����w�Ay��͔��5j4:G�)������$��]�J}�#O6���켡��p���zj8k��$̌In���䕃D �D���#� �ւ���3���g����er�� <�Z���8���?���� ���io�24<�C��dU��g���V5ɰ8������l��%�}�Ӵ��<Gܕh�Yj�z�<��z9ғl��):±m-�oG��Nw$ ���M�����*�7�ۑ�RGI!�,�j��ʡ���0�-�mw��6���DZu��
�B�B4z\-���I��R����(�U�N.Ɛ�e��uw��i�f�$�����m��Lj�� �d@�������}����HG�D�j�3�j���>��K��`�k�4�$R ��L5 5-Y��OB�iY!���e�s}����Y ��<1�����* (lX���6�����U�Av�����9B6y�������.9��X��P2��ZR�+ �k�鈖�����ff+���)?U�~���o���q}[�:�}FF
�#����qG��q&r��P�M�Hm� {ս��l���Ve��ɱ���{�ʱ����5z�*+�ͳ�<A���LS��z�w$Ԇ����SN��]?�"tu�y�S�R棺��ګ��.����iUu,���d��b��o j��0�$�V�����T�V4�w��T�o'>�h$㜠m-�o����m ���$�k[��ۗ2��]����. [�^��Y����>�3��%��,��$����S� �ې�����^1��6�.O��n_�x|��H�pZlk��)�+���Mm.�l���$j?+Q%�Ԗ#��������7PMA΢�������G��e�<�ܾ4 qp��Q�ȓ{�Z 2�z*�u� k�
����x[��a>Vh�`�m/���f%�E4��ؗ���K�BhIJ�P4���+S���=�ZC��n��&����;:ga��Wb��% ~I��� ��bY,=�IS�4��f��\6RH Fҙk�����-��V�E� ��qrM[�D��߾k�9�Y�x۩��!��:�'��v.�g[����h��sY���h-��}��AT
�-n؋�K�غ���{��Wx�v*MS��y�����f��Z#sZ�-XjE���)���f�#�6���U�c,s tdɆ�5X]���U�o�� |^s���m-�g�̘�t݄�3�.�6K�xt����8��m�O��Aj3����xڧ愦#e�+&��#��Y*���>�y�P����C,5L�+G�W0��jr @T&��쐃���<�(;�w� ���$�]�n���3� ��6��ҽ /�Ȳ����m��ֆs#���6�7�zKsL�XْK4�(����e,;��X��;Y�Od��d�';���@��ޏcx '�+��5<�9�ʕ ����[�<��12�S�펵�7>3&k�����9�ĺ���dX5spj��_�Aܰ��g`7ǫ�0�{L�50)�*��u��cW�q"���Y?l��-����x�'�݉m�4ЙeR�B�f���)r�#>E����[f��S\��I�>��5�'Q��X!�ī�� �=sc����/��<SO�A��O6j(�k�I��agn�3�$�y#A�#�Yw��,2���E�/����;x���&<�f���@q� ����E ���PG,]��s��6� b���G�)RU������^�g�z�k�{�=7O6�h�}2��ܿ��3 �����G
Չ�M��?Q����ȁB��r��m'�єd�]�9Z�ٓ,f����=�pOaP���m�S��x}�(4F��l� �� ʠZO����l�(�5��}�R�� {�G���W��B�0�S�8��B�����] �gn��C<a�p��i2���,� :�+�����?3Y���Ի}���o�q�Ly:��/�����+�/:��KS��u��#/�˯��i^�(S��/���U���ݫ7���PCE�5]�(CfI�O����|�B�_]Ŏ>��B�S��l��� �K�1Y���F� �������Q���� �ON����؋J�� �����"ת�N�ñ ��_'���"�x��_\:R�c�ȿ/������$��S&����.�e�Sqr(�r*N�e�@�n�Y�k��ŘJmzk:�88֙:�����}e�����v��@+:�:7E�;�iwQ�V�L�z�mV�2�(��ޒ�N�xQ�t_��{N饩��:�|<�3���,����z�|��χ����j�9Z=<i�oE,vb�/���ޓ�^m����.�!"yE��m�����8`��3��S� G��$��S�.hL�xI2E��3�9�S8d饿BN����/Y'T%�4��xÁ�@�u=�@�@��j�1��7��\!�T�p�i���)-��p��,�(Di)!�yȃ4��8�`� ��K�#U�|2'
9�S��<��Z��m� G��% ��#���:ꒀ �<�J�QT� ���(�9�UW��1R\ތDDQ!�GPp���1@�/b�E�{��a�a�\�Ȃ��*��q~�r̢�Uʣ�K?ʑ����o /�����ew��+�yq���X>� ;K�/P�{�~�\7kcR���r�zVz���o�5�2��ۡg�_AB�׼c�b���^���D���B��|]]�]��;-I���ó��y�-���"Xα�inE��~����H��k�Uy}��],�oX��h)u�Y��Ջ�]j^��ʍ��J�i ��|V�c���cT�h����W���U�\�;����no�J��%�T¤ ��n���uYeLu�\n��F�@�����K��3���$��FȞ�����8&�����/�`��!J� "Z�>�2�f*�qdm�Wo~_��:�7��S�Urs IA�w�2�Lƿ �d�P$�T Ln��ߎ'�R�\9���On�����ߜ��{�=h�����l>�i�Ĝ���/O�OհP���D>k������0�;W���B`�\,Ia�͕��`��9�T ��]rR��WW����b9�_� h��<�c���W�/+?��?H���3P�����o��67�e�n/ �G}�]����u ��'з�٫$;T���u�x�P���_��́>8ԵE,�g�g/RT]Evę�2PG���@���#\�@�S����#��ξD�_�˶@����zu�P�� �1"Az�G� ��ijw���@�����uz�>��������>� �<2�rZ�������A��R���
�Oc��K� /�C��0%����{��a<,�J7�Y�*��!���`�ހ�?�@��� �j��͠�؞̩���^��� ]:�=�O�0z�W��<��*�^��3���e"��'5} ��}�z=-R#5ډ�r��Hz�S�ݯ��v��K��,(<�DtP��[H��sG�6 �E)�05{K'`�S"v�p]��Q$�(�6�E�x1RǸ�m_s�D����X|)h��&c���
E.-��b]t�y<�h�dSՍ&3��־A.NP�,ŧ<5��6f�Y���̉?$��m�� �� jk�k9wV�k����B̋gъTt�?�����
x����
�0 �=�)B�2ă��[����n٬�f�� c�.+l0cB{J�� ��ɪ�����e)\}�{�Py���l���X<N�r�t���|X��E���RH��/����D\[<s�� �,NV�R�&�3�0<{�;U<������6^p��k���xH�����%�pυ._ݢ6��̢�
x�-̽
�0Fa�\�;�C��3�UAD�P���M��5-�E�wQ{�N�� ���$�q�׬dM�Sv2d�Ln�cUfs��\}���}dž���� 9�a��J�B��W�'.��k�G<^�hu���Fa�$� `k�b��0Ħc G!:���8�>���Q�?z���N�@�
x�͖�N�@�{��re���j!A�!$T��Ro��8��즻k B�{�>��؉q��$�l�ߌg�?��m8�68���������=u�I�ܹ��(�s�}��|�� c&�xJ@r��T��r��t��߻� ��-��Õ�(|�"Sq�rv�/M��܇��v�JP6�)JIƘ����$S4���Ŀh��Q8�L N�@�
K$Q|�����
r��L�2?8��c��]�C��\W���)H�(�D��c�P~�#Q�tS�h!��0s}�8�N ���˴foMɥ����_/`�f>1û��2�yrO f��S'N,��WC���#�Mt# �5N��EgڋZ��'-K��\�?����5�{!4 �F`[����؄ �Zm d�R/��|W9y����pC�.��������9p�����P�($�L��A;��Ty}GWg�>�X��^/�6�E�I��`QM����K���u��J���.���
�=W_G���ZE�T1A�!���Il�E�p�3A�$��K�r¶������ J�ϸ�i�)��8EBV��9��N��%��q���9��K]UkE6�G��;��҄}ԩh�I�>]�Rf-��ˑ�#%�t��frT�L�xI�Fw�/�H
P/���םN縷ڽqt����F�貂���?���3����~�K����x�����6�7Dvsu�>���i�P�2���?�&�,T�1Q�#�i���\&P�MS"��c����E����lz-��&�t�w��^f�z&)�7{W�<��]� �F����m�]���֕{�y�ʊ�n\U�Te��/*+��i�V��a�c�.)�갊�Z���^�����q`=I�pv�
�p"&�:b�״O�/}��
x�]SMk�@�ٿ�
��Y��PH�iJ �:�z�HK�J�bv�����l+�V��kv&�}�O��_>ئ��؁�b �c%�A���d~v6�~r[�-�b���r�T(׮��%���b]�?֖�0\��=�EdïEh{In{�IP۠4�.��s�� ^fe c�r�d,{P����;W���O1X��Z�8�#����aw38���'�O:�h�h��(l]�t��}7f1�N�f�L~���ާx����}����W�M&���fS�2}�խ+�q7V�?O'�|��W�V�1u�Ŷ
�\�����6��+؀� )�6�imMj����jz�����2zQ@�XW$|�B��@Za��L�&�̏����K���ȕ]4��®V,�-i59j4�T���x�4-I��6d}39�u��lͿ�Qɒ̐�����d���thk�����W[�$]p��P�>��$�������'�ұ`���f�8�L���c��Ԕ�����gz��lz�q�}��۾�b(��c{L�d[��lz׳��H��� �=4M?��1�������T�����i���_�a4레dk����W���2s@��K {���?�x��
x�m��k�@�{޿❪�%��Zz(�����d������ID����K-���}��͏Ir� ��0�z���/UJڑ���f�Udg�Z-�� ��rWH8��L��(x �x��� � z���V��l��Q�dT��#,�UTj�W�!QK�d�w�rl�YF�o+��Ԫ���Å��9n���=Y��B��V�<��I���i� ] �y'�����w��"��RZY4��\�����V:eetW� ����\�8u@��E���>�qeu?�R����b���k_@jEt!����K����{��
x��}kw�6�����
.�|H�8$H�κ~�Ӝq��t��{�(
r8�(U�2vs����&��(ٝ���H�_�/<9�-ƚ�B��ˋ��?8���u��g"��n�c B�COL _ �܍X�O�^�����ڟM^��t��*�b�}GW��X5pD�t#+�X������0��M^��k��ˋ���� ���=em�3�G���^y4L* �&t�Yѹ��:�a�|�s=o���(\���oD4���y�]_������� ���Nh�S���/���#p�˕{?w�0!B��7��8BH�opd�!�3��+w���0�� b��m�i�6]^�/�FI�˵D�L��+m�^Qm��|O[�h�
B��;��h�J��O\�%E/��a\��6�z �__|��D���s9-��?���\4p�3ʔa��Bz?]��
�!ƭ��r]���0��}= ������ �A���ä�O��?8L�i�N��͟L������C�*=��ʽ���b����ь޻��q��x�X.?F�[Lh��.g�G:9��i�i1��#,߻�(����J������� ����e�M?��/xY"���֮\/�T�KzY�0� y�$OS E�B^�U��n��@�6#lf̳:�;�e\�K%Q�UV�5��SV=��N+Rw:��)$1m�Hb�}��ܱ?c^��̤ t��RO���Z1�D��9���WO�璵|ZLx?~�~�|,��EL� 3�t��o���vR�ہcAږ�I���ё��7�)1c���/����J}�NC�0��.����X>&� �w>[���1`�2��[�������;^������ �Ϡ/Y�C <� �؂`�ϫ2L�ğ��g��2L�xupz���/20Y/Q^�T�b ,�a�X��E�hi���N:�}�/i�:�bz���q�^�J�e�\d%�k^r�j����fLOB�W��i�P�O�����C-���K1������2�� N�1��DE�#�8���䄫Iնh�3���9N�=�"y�� u=.T�$�N&Y��9��(� i5\��m���9�F�t����՝'=n��*X�("�X�&,E1����+�K�3�0���9#b[K�D��R�Pb:�X��ǜ!����$�%�Y�Đ���@g�3�uT������5���i%S����Vжh�B3a��Z�@�Z��.��]]s;]7�*kz k��Re��1@������"v�U��2ٻ��r�nW�h��Ѱ���Q������`�+JR� �5��n�6.����RC5�~ͣ�����uy��"<d;X�ʋ��`d��� T��:�1�m=QS� ��1�Q��6M�6t�m*
�D�c�~���c�e\�4��5�j�ռ��DT񁼓HK; 9�e�r+��Z�l���X��c9��H ���ʴ����6�� ۱�jL�l�P�s�֊��eהQoieY�U�d�lq㖥;V�\
駤�i;T�٬E�i:�����_�jQT&��ō`8��}�^��!l�O�-�����F�c#U�� ہ�:O-�i�� T:���m�ۮ�j�5�2�Ԃ���
8�]f�0&Tl ꨭt`���蟍�/A�`�����A��!�e�m��?��
C��aT�M;~ڨbB��ڮ�ؐQU6H7hQ?�7S Ӣ�=��[D���A����pU<G�nFHw 2���j�9��1U�P�����Ew� �CV�eA�����k��%YPdž�f.������tQ�Zͽժ�:� :F������C����ރg֙K2Q5m�K�F�� b�?�Ү-�l 1� ���!f�t��1����:� ��[Z��Y�Ρ k\3�����AU!�0h*�{r���l�n�ʺ6o���O��Q;xp�i��L��1A"<�0�x�{�J�A<H�2���ƺM��;աgZ�4��Դ�mM-�� Ӱtsjz�n����~�B��|�� [y=�����iP\<=�Ӏ�܈N���%?�xg~���� ��'����?��w��@�cb0&����`���5��C�Ė5�v�O1�S# O�<��s��@�D�T�RK�
U�BL`� �I7���:6�#����5h�r�-<�Ә�$nO�n��DIJ��o.�f\ӌ�1�\~x�ԁ�%��6��1`��a�ꤘ��r �H,�![�=!0�ن���]�@���B�����F6�6 @1�Ĭ�x�-����@^�Մx.1"px���qhe���5�&�U 0�S� ��D�8�����y�r��Q�'�!�xJt��[�e)L������c�웙������HЄZ��8�_�N����z��釳�����/����pW���7����k��e� ����w�o����:��t��o>\����c�w$5�Fߍ�n8-g������jt}]��p��%�I&�]�n>^��޾����m�>,nf ��a5�vz|qqv|s|����vq���nD�j��Y�Ю���{�=34�p:"䄍�8,����VJ�
��G���'�4��δ�_��=@���1uL�� X�1��\B��3���x��O:R(�Ç�2��LM���T�1���K[�R��:ن%��$!�+�XN_�}�BѨ�5��x�Yq��M�S.n���?��>dHN�
\��9�^���;=�Q��L���� 9*Lq'p���s��lMct�����g��������U���R���Q�'�p�}�Ļ)�Gđ�/RO|��/1��y�,�2R׮��NO�����Ԃ��'p������� s2'��7Y�;���{��=9���F1����}�`�l���c!ӄ�S�;&2��sfF�������S��C"#�4N�s��-p���s��%��� ���% �lo 2�v�����,l#�l�md[=�7�\r�R�:�/>�J�Q�=ʷ��ң��r�4���قoX���x�JV��6�+���w��]t�n�m�� 5���l�Hچ��r֕6s_�� �X���.Z~LW��u�z?�%���F��h�Jt"Д�2�u���^����sa�Uu����ѻu0^��I3MU�݈�Dy3��e.�F9H�$e��IbVM�H�{'�͐����=0wt�Z��<�#4����(�`�= �x26�ML�%�����ҩa��$&t�d�WE�x���x2�xcJl�ݶ��X7l�Jt� ��H�!������t-�p���a#?�{`�;�'n�X�%�uSd��:��o-�{�##��R�jvB$�?���ϯ9�ԑ��E�bB�C&߯g'���s�F�Ԝ� �Ӡr��L��\L*1�N�a9:�`�Dc�L 9�5Zkt�57��N�q���"�����ִ.#޷����x��8�z>��:����T�W��ѕ;� ���NJĥ� �1���=��%ː�LJ���O�]�"J��1-G�X"���턵��Z��n���F�y"�Sw&�!���:����g�.�PŪ�(g:���"���٧�xuAW�����B��"��KAY�Y4:Ǫk��#���|~�� �(�%�#�jǴ�J�3a�T�d_'��j5�f@�C(�{�b癣�EX,+w��Z��Ȗ�H
D1ч%K����K�{�|O��^��D�AФ/ X=K��6�;@��q��f�sz��)@��
�ӏ �d�C��HJ��Qf�ש���2z6
Z����!�V/������l���@~��_��:�Fx�����+�&x�E��Cqr���O��ֲ_��ATu�rR�r�2z�w�[OS6�a��?�o�l�6ۥd@���b無��6��j��0��M\���yh�̉�[ȇ�@8q��|_O� � 2!�UZ��R�TU:����)���I� �c�V�͑�LW�U�B� �
�>]!���|��42U�:-(�� ��A�f�&S�^=�a�̇��Ȁ(zj1��N�ĩR'���� �����-�� �Iw]XȔ�Ɋ�wQn-P��\2�]2�N$� u{Ɉ�
�(݆)�F*�e��]2G[<d�jD�,��E}�R�K8|�ѥ@�F�n� Ʋ�>oL�����V�ע��L��ψ.[g�F1S��S�Q����nҨ��H��%RP�����MI�TGG�=��]m$=o!�L?R�*��N2:�n��*�! �W�P�K��(�!�����Hw9(�Fn�1��|5k-�#$���4�bc�}�1���}�mXz��)����u���v赿 � b��W!8����P�� J ��f�5_���M5X�7�!��͐;�`�cnl[�!�1��6���3��^�h=o�Kun�����/����[�N�-��]z��� ���<�O6��p�]
Q�ӳ�l�?O�A��鷛і��u#�w�#��u�>��gW��gy�}�Rݒ����M�1�k��E��A�&a� l����k�AT���l��+�g�����yM �E������L���qO{U��d�aG>hж���g&d�����%�����õ �6�t���&�6$�)e�r(�Y�"9���m[�j��%��v������…���S�\Q�.�����F�%�DGU�M�5���"Fm�6�l�6Į�Zѫ������lw�l��u'ב�qՐݚ-U�-�J�
�<�az;\K�L����F���̌Yk$�i��� ��~�z:qi�~�\6�븥XG�r������lh�TY�n(� ��,�U��y� �Lu(�>�R���l��� f1�RK"(ֵ�6�/�qR+ߜQo�\���Dv#h�<�&������Fx=����.e�Gs�j��u�!���},W����*cQԟ��?���5Z�%�|j�&� 6*�e�I�2����{%v��$-�&�D��a����#�Y�>�K@K�>�i��;� ;j� � �6dR��Z���0��li
�c2Ƚ �T�z�0;�`�8(�0!.��a���&eP7'���qRU1��,�?<�S7� {z7�]���[h�>����M 8�@�`GÞp䡺2�A�i��)�m�pd�z��xlFd��b�n�� �!n�� �6 9����3X�!��ڥ1R(��⯘2���M6F5���Ψ�[1���zދ����z�n�����sz�b��~痬�c"�'�5����$f� ��`�>�M��@V�<ݡh�"z=�A�S�U��)��_�'�
��v+C������Գ<��3�O&&�MNRP�~����NJ�P�JJ��GU6JJ�=uR��F�wR���C�ms�B��rj� �A�em%��6���gu� �,��ޣnz�}c�e/D��wЅ��+�JA=Ϡ %3Ûp.�U�ʹ�ߘ��H8��s�P�����",U� Đ���8��0��|��� �wp�?�+���U�6-�J��6����
juX$�����7^%���!9�_.�!7`����~���k���a�|,�!�J�vw��(�x�G��P����3��`����<IAm�$
�56����Am� ��o*d�Kη�I��V�-��ӋM@4���D��*�Ж�|�4 Kan�����`]~��F #����i�F�ZO��;R�Dz�
�A�"�g ;D��f^"����H��M�@� ���9���ש
͖oU��ٲ=�{�)�& �8S��� �m%|u����l�DR�fʜ�f�-S��K��=����550�?i�A�pt̚K훏�3���[��D���.\ɥ��OAnb ]v�u���TLˉ�n0-�h����o+n]�6t�^�{��^Kh��Q�CS)�mG؝vB�����A�y�E�~ֆ�H�{n¶ �Vs �%���-�lQ'�!�(��_n��@�4-u�Z�U�/_i���ů4Ծ���'y�|��}�4�Wq���^�qx��HE �%8�@7�۾�E}�^ڗ���X�E�"���������o�J���S-��%�%.>�������C.�At��e|��P����ȡ��8�h�+�f�J՚�BUy#��̃j�n�DPX8�^���ˤ⡖5~u��(�R����>_�?�gF#-��'L8߈�ŝL��'���˨h�eh�κ��T��v�`SINљMʤ��|.a��E���Ex(e��&Wy�k���p���X$��f}VV�*��ƒ�Z4x���t_oK[�B����gnp�v��@\��F�?�#�G�G��Y'� ��ց?��#�H\�)]� ~)���;�g~�p1�'�ث��:~t ``d`�&&@7���:6�#��=J���` ��O�<fO���&� ��p���|s 6�f��ᄼ�4�!�K�!�m0�c<6���À�I1�)���X�C�0{B`L� OI�
�:f-9�(iEY��l�3l&@� b"�Y��[�_����� �\bD0��l�����P-��"�U 0�S� ��D�8�����y�r��Q�'�!�xJt��[�e)L��Lô-`��� B!�A�)�c݃�PB �A2���؞7�mjLݩ=Ӣ�16���lkj�����S�3u�i-A]�zɬ�g����E@@;>;�]_k��i�)���Wh�o>\��'�����������F�� /Ax� �>��|����Ň㳬�h��^ig/!fh��tD� 4pJ�EX�����&��}7��)��V��8J�^<aO�Y���qBki�P��qLF�)*H�q�i:B��A� $m?�$��F7�ދŒ`�pY���R��I� ��
8���v�o W*��B'۰�0�$�s`%��˺U(U@�&z�o� +�7����w�ō�����Շ ��Y�+��4'V� �z��1���U6��!`#g@�)��;~br�ߟm�i����B��L�q��;��jT_��:��!
���x7��8�����_�=�.>�%&3���F
��������_6�Zpq�N?���:>�aN�D���������������{�������|4�!�G�����f3�� �&����1��Qd�33:�N�/�ߟr&'Wg��Ɖy΃йγ tn����8e�
�)\�W}�.y��F �v�P�m�6KO��ٟץ�բ�1r�!$����r���,��[���C��!��a�F�a���!���ls�%t�%@җ 8��� Z���:鏜,��a��a�b�ᐿfl��9����$Pc镫��!��u���7�������R�!�1;��cO` S��ӿ��!?]<䷦ �|C~��0� n_�5Ln���%�E��e�"�a|9�\1䷥ ��0�����<o߸3&7_��e�f��XG�sG���0>�:L�� ��ìI"��� �M�����0>@��̩J� Ӷ�t���p�P�� |�0���MA�s��&�uƛ0��a��?L��0�����xp/o���a��U*�#JE������ Ga���(*eV뭨[��s���3�\�~t��q0Aqrz@���,I h�eD�ȝ�-��F|��}��*pge��4:���:�^&�%����|����3z�z��aH��Yi����1T��.LF���g�J�Y���m���j��?���� 8(>͗d��Ḟ�2�o‡
'� ��"~Ǧ�-̓���6><�:U�؉��|3z�,[�.x�m�k?F3��`����o_#�X'�-����o�= ����G;��Y�<]�?�G���p�lvk\'��W��#�n�6���\�˘����+�x^�_���b�����q@y����]?$�O�~*� �lL M"��坍./>|/�tb)V���BƓ"/�v�����d~���H�����1M�h����ح8�; �F(7O����.]w�%���筠;���ވߎPF;����WO#�����tO�n;�)C�f ��z����3q��i��m5�0+�1I��-zȶŸqo�j�������7�j�nŲ��]����"��)��x�4���Q��||�W
�*k����vl{|7���Q�/��$�#a�\ϗ�����JV1��f���5�����5���v�
=��|ZY���f�߂AY�G����w��UT;����[��'�oO7�}J�T��'���}���(ݑ� �c[�~����B���C��1!��Uܗ�(b��fv�w)s[��=�nUU�)C@�mB�AB��6E���&T���Q�W2�l�Q2�(�(��-�썦��Ni�ė�%7�N�u�@ �S[�)U�z�[]Kt� ��@(�)7�����]�uc��1�8�c�h��{�ݛ�q�_�}�vE� (��X�x�M���ʅ*M=;I�:$ ������$�T��0�=�;�����rP�JZs�;�֥�C�4�m]D�7d��>U�H8��\�NUĖ�.1�-<����*i��8ł�0�:��e��(F��'�6�}�&(��$q�u�� ���}(m�.L1?�/��� Il`i&�/�A�tI�������6�M������b�k�m�P�ZM]"�.�|TIB������Sw^Ô�AӬφ��n�.@����Qo�7�(��������6��uH�����b����>!��Gw���c~�����+z3M��K���M�2�Ɏ��pI̪��4��*�64!e��{.���W}�0���2cf����Z8e����W��M�b [�߇��Y�ӄHz:~�!�<�ҕ-@��>��.��LibQ�f�7��w�t$m�I���6��;�Ⱦ#��ym"�}�|�"���Gl�ɉ-N� HNԆ�H���x��3��I_U'�v�ٖXMd��ި�ja�n�eh8���yz�<�ܙ��e�m�f��V����luq� ��$����� ��[6��9j�q�sb!�mRY�
� P?��{#��8�{�����NU�;؁)>��S{�/�~1�Ѱ�L����T�S�Dž����D�&0��d�Ƽ�+[coS��纪:�����l6�ޟ�U�?�ܟ"�@,>��p@P���:U}G�%$��%� $\�����M��Iu����(!N�D�gD٣d������.�M��꺤JU�����6z�V��{�Vʮ��,a#��]�S��)�T�d!!N�qM��R��o/�cq��xFu�x��C���P��~�}JF=��L��ce�m�w'��Y�db^�^
���R7d�$�~j~E�Νo�Q�7��)"�.�ª�Y��N��2Q}��Q]nM0�� ��K��z�
���1B�Q9���xio>�v�4��$��o�b��9�^�|e�=�4l�ǵ&�ϊ����DM�g\�)�F���+1��/S� �H2 ا�HVh�=�!ڧ����:�����6�ߕM[����w�̤�]�a�o,���ǀ���{����E�aNz������dG� ߬��x�0J�߹��XQx.fBXG�̏�׳�4S����F���D�ԧ���f��=��c�/�~!l�bL{��q� p )T�M_���v�-�KFW�����3]��"�8�pD�t㿼�|�GGL��u�v���v0s���{Oy���̟������v�XG�uCs�����������(�~Dt�3օ@B>o���?� }���Z��?k�(P E�N&+�ede<Y�'�܈�[G����\�h��txo4��' /��~0�u&�3o�+�� f.t�~�C���eO���!�"?���qﺌ�wuO��颯� +L��]O?Ͽ+h�"tv9a3�rW>�HK5-�9~�({ �n�)���4�XF���5UB��elO�YHo�u��"X����e��?q��a�J�1�R�s�*���B���YpBm⡉M�x��O�ÉmP�As �1�ƞ�!�4Q"�a���x��|��q�o�_}�r��yC(�0��LLlBݳl�&�N\
<�v h�'�0,�Sc:u��i�tlH�up�/:v�0q���|����ϋ����?���
��h��ў�ӛh��쳽��_]_,n?}��P�a�X����}\����I ��^�퀹�`=�UN��EL���aE����N.�� m�ǎ������Z-�{�N9�ÕЀQ?��]�����o`Ӵ҂�b5w��N��0����]~p�h�uH'Zj���]�s�ՑvE��T[�4�0ii�u�E����]�L�5�m�h����բO~��+�}th�_�Y뢻�� �����������>M���q?�JcK[��3��V4Z��P{�8�W�M�}�_�� n�TT�\B;L�-���ʏ��,+�����.W�lI,�S��U �,�"��f�(h6���z R��V�����n(S�nX���;�uD/��2��a�XEtr�8/f���ދ) �/JIIf�~���?_�hJ\]�6XLh��]sY| ��T\D��51�<���ܰ�r�I�QL���M�8*�G�����\�.U�'~��(2t�r���^���B����%GGN'�g9��8�V�Ǻ9sY�� ��"�a�� <7X����'9n� gtI� <��`%U��x�8�$:��g�Ƿ��2å�V�ZH��
;+�����NN�\d�͔�$�~Xy����@�q��f�O���m��$��b�X̳s6KC�������4�H���э"��G��H�dT�F�v��.y���]ݯ�@jpX�O���q��Z��I (OA�A]W u.R�����jPV���z>.$y��EY�0VE �b�\ľC.�b:���y�3z+��'�w@Z+�����WRwv�Əw�;nv�X�p46F�󘈵�l'�|�S&�=(dJ整lR�\�n�\��Su����U����[��Ui�u��F�r�Rw�Ȟ0'>����2UR�8�@I;騰�س?�EwIx�G��}�~e�bM%!�N�1"��$$h45����%���s��Un� k��4�M�/󘌃�E���պii)�V�B II�WΓ!��;���bo@P�A�z��$4vPw�������i�Jo�~V�>����C��t��H�*Uc-A��E��@*d�B�����,�O]���H��3�E�Ui��X1&�(=��~ L1����lҲ�2���#�A����AP��ʉ�������)����`WN�ӆ|·T��)��=@L�^y8���׬��2!�Ὠ�$Bd8�fo%f�K�gԛ�q�)���u+�i�
m�Y��n
_"�t��@�N��,�BkwB���]N���m^���D5����^#@-�e]Vl�"%��$����\���x�� q *9���[��o�ҭ'�tsKo3��������1�R���%��K�W5r,3r ڹP��E)>r^K�Q�A�2q��+`��r��i2.=��ڶc���B T6m^���_EkW��VX���s�2n
�^�f�YL��P�@�Z2e ?U
>�3A�:����$��J���es��o��*/�����*Aj-
{
"overrides": [
{
"files": "*.sol",
"options": {
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": false
}
},
{
"files": "*.yml",
"options": {}
},
{
"files": "*.yaml",
"options": {}
},
{
"files": "*.toml",
"options": {}
},
{
"files": "*.json",
"options": {}
},
{
"files": "*.js",
"options": {}
},
{
"files": "*.ts",
"options": {}
}
]
}
REMIX DEFAULT WORKSPACE
Remix default workspace is present when:
i. Remix loads for the very first time
ii. A new workspace is created with 'Default' template
iii. There are no files existing in the File Explorer
This workspace contains 3 directories:
1. 'contracts': Holds three contracts with increasing levels of complexity.
2. 'scripts': Contains four typescript files to deploy a contract. It is explained below.
3. 'tests': Contains one Solidity test file for 'Ballot' contract & one JS test file for 'Storage' contract.
SCRIPTS
The 'scripts' folder has two typescript files which help to deploy the 'Storage' contract using 'ethers.js' libraries.
For the deployment of any other contract, just update the contract name from 'Storage' to the desired contract and provide constructor arguments accordingly
in the file `deploy_with_ethers.ts`
In the 'tests' folder there is a script containing Mocha-Chai unit tests for 'Storage' contract.
To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled.
Output from script will appear in remix terminal.
Please note, require/import is supported in a limited manner for Remix supported modules.
For now, modules supported by Remix are ethers, swarmgw, chai, multihashes, remix and hardhat only for hardhat.ethers object/plugin.
For unsupported modules, an error like this will be thrown: '<module_name> module require is not supported by Remix IDE' will be shown.
{
"id": "c93250c6237c136ab75411103165d6c2",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.34",
"solcLongVersion": "0.8.34+commit.80d5c536",
"input": {
"language": "Solidity",
"sources": {
".deps/remix-tests/remix_accounts.sol": {
"content": "// SPDX-License-Identifier: GPL-3.0\n\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary TestsAccounts {\n function getAccount(uint index) pure public returns (address) {\n return address(0);\n }\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
},
"remappings": []
}
},
"output": {
"contracts": {
".deps/remix-tests/remix_accounts.sol": {
"TestsAccounts": {
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "getAccount",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \".deps/remix-tests/remix_accounts.sol\":71:197 library TestsAccounts {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \".deps/remix-tests/remix_accounts.sol\":71:197 library TestsAccounts {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xce88b145\n eq\n tag_2\n jumpi\n tag_1:\n revert(0x00, 0x00)\n /* \".deps/remix-tests/remix_accounts.sol\":99:195 function getAccount(uint index) pure public returns (address) {... */\n tag_2:\n tag_3\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_4\n swap2\n swap1\n tag_5\n jump\t// in\n tag_4:\n tag_6\n jump\t// in\n tag_3:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_6:\n /* \".deps/remix-tests/remix_accounts.sol\":152:159 address */\n 0x00\n /* \".deps/remix-tests/remix_accounts.sol\":186:187 0 */\n 0x00\n /* \".deps/remix-tests/remix_accounts.sol\":171:188 return address(0) */\n swap1\n pop\n /* \".deps/remix-tests/remix_accounts.sol\":99:195 function getAccount(uint index) pure public returns (address) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_11:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n 0x00\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:411 */\n tag_13:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\n tag_14:\n /* \"#utility.yul\":490:514 */\n tag_25\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_13\n jump\t// in\n tag_25:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_26\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n 0x00\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\n tag_26:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:684 */\n tag_15:\n /* \"#utility.yul\":591:596 */\n 0x00\n /* \"#utility.yul\":629:635 */\n dup2\n /* \"#utility.yul\":616:636 */\n calldataload\n /* \"#utility.yul\":607:636 */\n swap1\n pop\n /* \"#utility.yul\":645:678 */\n tag_28\n /* \"#utility.yul\":672:677 */\n dup2\n /* \"#utility.yul\":645:678 */\n tag_14\n jump\t// in\n tag_28:\n /* \"#utility.yul\":545:684 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":690:1019 */\n tag_5:\n /* \"#utility.yul\":749:755 */\n 0x00\n /* \"#utility.yul\":798:800 */\n 0x20\n /* \"#utility.yul\":786:795 */\n dup3\n /* \"#utility.yul\":777:784 */\n dup5\n /* \"#utility.yul\":773:796 */\n sub\n /* \"#utility.yul\":769:801 */\n slt\n /* \"#utility.yul\":766:885 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":804:883 */\n tag_31\n tag_11\n jump\t// in\n tag_31:\n /* \"#utility.yul\":766:885 */\n tag_30:\n /* \"#utility.yul\":924:925 */\n 0x00\n /* \"#utility.yul\":949:1002 */\n tag_32\n /* \"#utility.yul\":994:1001 */\n dup5\n /* \"#utility.yul\":985:991 */\n dup3\n /* \"#utility.yul\":974:983 */\n dup6\n /* \"#utility.yul\":970:992 */\n add\n /* \"#utility.yul\":949:1002 */\n tag_15\n jump\t// in\n tag_32:\n /* \"#utility.yul\":939:1002 */\n swap2\n pop\n /* \"#utility.yul\":895:1012 */\n pop\n /* \"#utility.yul\":690:1019 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1025:1151 */\n tag_16:\n /* \"#utility.yul\":1062:1069 */\n 0x00\n /* \"#utility.yul\":1102:1144 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1095:1100 */\n dup3\n /* \"#utility.yul\":1091:1145 */\n and\n /* \"#utility.yul\":1080:1145 */\n swap1\n pop\n /* \"#utility.yul\":1025:1151 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1157:1253 */\n tag_17:\n /* \"#utility.yul\":1194:1201 */\n 0x00\n /* \"#utility.yul\":1223:1247 */\n tag_35\n /* \"#utility.yul\":1241:1246 */\n dup3\n /* \"#utility.yul\":1223:1247 */\n tag_16\n jump\t// in\n tag_35:\n /* \"#utility.yul\":1212:1247 */\n swap1\n pop\n /* \"#utility.yul\":1157:1253 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1259:1385 */\n tag_18:\n /* \"#utility.yul\":1354:1378 */\n tag_37\n /* \"#utility.yul\":1372:1377 */\n dup2\n /* \"#utility.yul\":1354:1378 */\n tag_17\n jump\t// in\n tag_37:\n /* \"#utility.yul\":1349:1352 */\n dup3\n /* \"#utility.yul\":1342:1379 */\n mstore\n /* \"#utility.yul\":1259:1385 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1391:1629 */\n tag_8:\n /* \"#utility.yul\":1492:1496 */\n 0x00\n /* \"#utility.yul\":1530:1532 */\n 0x20\n /* \"#utility.yul\":1519:1528 */\n dup3\n /* \"#utility.yul\":1515:1533 */\n add\n /* \"#utility.yul\":1507:1533 */\n swap1\n pop\n /* \"#utility.yul\":1543:1622 */\n tag_39\n /* \"#utility.yul\":1619:1620 */\n 0x00\n /* \"#utility.yul\":1608:1617 */\n dup4\n /* \"#utility.yul\":1604:1621 */\n add\n /* \"#utility.yul\":1595:1601 */\n dup5\n /* \"#utility.yul\":1543:1622 */\n tag_18\n jump\t// in\n tag_39:\n /* \"#utility.yul\":1391:1629 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220c125ee5b3c1e8e8e48c18f0288bf89ccb39e4faf31c67e64b6f67297f70f672264736f6c63430008220033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "61016161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce88b14514610038575b5f5ffd5b610052600480360381019061004d91906100a8565b610068565b60405161005f9190610112565b60405180910390f35b5f5f9050919050565b5f5ffd5b5f819050919050565b61008781610075565b8114610091575f5ffd5b50565b5f813590506100a28161007e565b92915050565b5f602082840312156100bd576100bc610071565b5b5f6100ca84828501610094565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100fc826100d3565b9050919050565b61010c816100f2565b82525050565b5f6020820190506101255f830184610103565b9291505056fea2646970667358221220c125ee5b3c1e8e8e48c18f0288bf89ccb39e4faf31c67e64b6f67297f70f672264736f6c63430008220033",
"opcodes": "PUSH2 0x161 PUSH2 0x4D PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x41 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCE88B145 EQ PUSH2 0x38 JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0xA8 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x112 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH0 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x87 DUP2 PUSH2 0x75 JUMP JUMPDEST DUP2 EQ PUSH2 0x91 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xA2 DUP2 PUSH2 0x7E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBD JUMPI PUSH2 0xBC PUSH2 0x71 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0xCA DUP5 DUP3 DUP6 ADD PUSH2 0x94 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0xFC DUP3 PUSH2 0xD3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x10C DUP2 PUSH2 0xF2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x125 PUSH0 DUP4 ADD DUP5 PUSH2 0x103 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC1 0x25 RETURNCONTRACT 0x5B EXTCODECOPY CLZ DUP15 DUP15 BASEFEE 0xC1 DUP16 MUL DUP9 0xBF DUP10 0xCC 0xB3 SWAP15 0x4F 0xAF BALANCE 0xC6 PUSH31 0x64B6F67297F70F672264736F6C634300082200330000000000000000000000 ",
"sourceMap": "71:126:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@getAccount_14": {
"entryPoint": 104,
"id": 14,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_decode_t_uint256": {
"entryPoint": 148,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_uint256": {
"entryPoint": 168,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_address_to_t_address_fromStack_library": {
"entryPoint": 259,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed": {
"entryPoint": 274,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"cleanup_t_address": {
"entryPoint": 242,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint160": {
"entryPoint": 211,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 117,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 113,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"validator_revert_t_uint256": {
"entryPoint": 126,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nativeSrc": "0:1632:1",
"nodeType": "YulBlock",
"src": "0:1632:1",
"statements": [
{
"body": {
"nativeSrc": "47:35:1",
"nodeType": "YulBlock",
"src": "47:35:1",
"statements": [
{
"nativeSrc": "57:19:1",
"nodeType": "YulAssignment",
"src": "57:19:1",
"value": {
"arguments": [
{
"kind": "number",
"nativeSrc": "73:2:1",
"nodeType": "YulLiteral",
"src": "73:2:1",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "67:5:1",
"nodeType": "YulIdentifier",
"src": "67:5:1"
},
"nativeSrc": "67:9:1",
"nodeType": "YulFunctionCall",
"src": "67:9:1"
},
"variableNames": [
{
"name": "memPtr",
"nativeSrc": "57:6:1",
"nodeType": "YulIdentifier",
"src": "57:6:1"
}
]
}
]
},
"name": "allocate_unbounded",
"nativeSrc": "7:75:1",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nativeSrc": "40:6:1",
"nodeType": "YulTypedName",
"src": "40:6:1",
"type": ""
}
],
"src": "7:75:1"
},
{
"body": {
"nativeSrc": "177:28:1",
"nodeType": "YulBlock",
"src": "177:28:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "194:1:1",
"nodeType": "YulLiteral",
"src": "194:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "197:1:1",
"nodeType": "YulLiteral",
"src": "197:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "187:6:1",
"nodeType": "YulIdentifier",
"src": "187:6:1"
},
"nativeSrc": "187:12:1",
"nodeType": "YulFunctionCall",
"src": "187:12:1"
},
"nativeSrc": "187:12:1",
"nodeType": "YulExpressionStatement",
"src": "187:12:1"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "88:117:1",
"nodeType": "YulFunctionDefinition",
"src": "88:117:1"
},
{
"body": {
"nativeSrc": "300:28:1",
"nodeType": "YulBlock",
"src": "300:28:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "317:1:1",
"nodeType": "YulLiteral",
"src": "317:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "320:1:1",
"nodeType": "YulLiteral",
"src": "320:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "310:6:1",
"nodeType": "YulIdentifier",
"src": "310:6:1"
},
"nativeSrc": "310:12:1",
"nodeType": "YulFunctionCall",
"src": "310:12:1"
},
"nativeSrc": "310:12:1",
"nodeType": "YulExpressionStatement",
"src": "310:12:1"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "211:117:1",
"nodeType": "YulFunctionDefinition",
"src": "211:117:1"
},
{
"body": {
"nativeSrc": "379:32:1",
"nodeType": "YulBlock",
"src": "379:32:1",
"statements": [
{
"nativeSrc": "389:16:1",
"nodeType": "YulAssignment",
"src": "389:16:1",
"value": {
"name": "value",
"nativeSrc": "400:5:1",
"nodeType": "YulIdentifier",
"src": "400:5:1"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "389:7:1",
"nodeType": "YulIdentifier",
"src": "389:7:1"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nativeSrc": "334:77:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "361:5:1",
"nodeType": "YulTypedName",
"src": "361:5:1",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "371:7:1",
"nodeType": "YulTypedName",
"src": "371:7:1",
"type": ""
}
],
"src": "334:77:1"
},
{
"body": {
"nativeSrc": "460:79:1",
"nodeType": "YulBlock",
"src": "460:79:1",
"statements": [
{
"body": {
"nativeSrc": "517:16:1",
"nodeType": "YulBlock",
"src": "517:16:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "526:1:1",
"nodeType": "YulLiteral",
"src": "526:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "529:1:1",
"nodeType": "YulLiteral",
"src": "529:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "519:6:1",
"nodeType": "YulIdentifier",
"src": "519:6:1"
},
"nativeSrc": "519:12:1",
"nodeType": "YulFunctionCall",
"src": "519:12:1"
},
"nativeSrc": "519:12:1",
"nodeType": "YulExpressionStatement",
"src": "519:12:1"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "483:5:1",
"nodeType": "YulIdentifier",
"src": "483:5:1"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "508:5:1",
"nodeType": "YulIdentifier",
"src": "508:5:1"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "490:17:1",
"nodeType": "YulIdentifier",
"src": "490:17:1"
},
"nativeSrc": "490:24:1",
"nodeType": "YulFunctionCall",
"src": "490:24:1"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "480:2:1",
"nodeType": "YulIdentifier",
"src": "480:2:1"
},
"nativeSrc": "480:35:1",
"nodeType": "YulFunctionCall",
"src": "480:35:1"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "473:6:1",
"nodeType": "YulIdentifier",
"src": "473:6:1"
},
"nativeSrc": "473:43:1",
"nodeType": "YulFunctionCall",
"src": "473:43:1"
},
"nativeSrc": "470:63:1",
"nodeType": "YulIf",
"src": "470:63:1"
}
]
},
"name": "validator_revert_t_uint256",
"nativeSrc": "417:122:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "453:5:1",
"nodeType": "YulTypedName",
"src": "453:5:1",
"type": ""
}
],
"src": "417:122:1"
},
{
"body": {
"nativeSrc": "597:87:1",
"nodeType": "YulBlock",
"src": "597:87:1",
"statements": [
{
"nativeSrc": "607:29:1",
"nodeType": "YulAssignment",
"src": "607:29:1",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "629:6:1",
"nodeType": "YulIdentifier",
"src": "629:6:1"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "616:12:1",
"nodeType": "YulIdentifier",
"src": "616:12:1"
},
"nativeSrc": "616:20:1",
"nodeType": "YulFunctionCall",
"src": "616:20:1"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "607:5:1",
"nodeType": "YulIdentifier",
"src": "607:5:1"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "672:5:1",
"nodeType": "YulIdentifier",
"src": "672:5:1"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "645:26:1",
"nodeType": "YulIdentifier",
"src": "645:26:1"
},
"nativeSrc": "645:33:1",
"nodeType": "YulFunctionCall",
"src": "645:33:1"
},
"nativeSrc": "645:33:1",
"nodeType": "YulExpressionStatement",
"src": "645:33:1"
}
]
},
"name": "abi_decode_t_uint256",
"nativeSrc": "545:139:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "575:6:1",
"nodeType": "YulTypedName",
"src": "575:6:1",
"type": ""
},
{
"name": "end",
"nativeSrc": "583:3:1",
"nodeType": "YulTypedName",
"src": "583:3:1",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "591:5:1",
"nodeType": "YulTypedName",
"src": "591:5:1",
"type": ""
}
],
"src": "545:139:1"
},
{
"body": {
"nativeSrc": "756:263:1",
"nodeType": "YulBlock",
"src": "756:263:1",
"statements": [
{
"body": {
"nativeSrc": "802:83:1",
"nodeType": "YulBlock",
"src": "802:83:1",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "804:77:1",
"nodeType": "YulIdentifier",
"src": "804:77:1"
},
"nativeSrc": "804:79:1",
"nodeType": "YulFunctionCall",
"src": "804:79:1"
},
"nativeSrc": "804:79:1",
"nodeType": "YulExpressionStatement",
"src": "804:79:1"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "777:7:1",
"nodeType": "YulIdentifier",
"src": "777:7:1"
},
{
"name": "headStart",
"nativeSrc": "786:9:1",
"nodeType": "YulIdentifier",
"src": "786:9:1"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "773:3:1",
"nodeType": "YulIdentifier",
"src": "773:3:1"
},
"nativeSrc": "773:23:1",
"nodeType": "YulFunctionCall",
"src": "773:23:1"
},
{
"kind": "number",
"nativeSrc": "798:2:1",
"nodeType": "YulLiteral",
"src": "798:2:1",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "769:3:1",
"nodeType": "YulIdentifier",
"src": "769:3:1"
},
"nativeSrc": "769:32:1",
"nodeType": "YulFunctionCall",
"src": "769:32:1"
},
"nativeSrc": "766:119:1",
"nodeType": "YulIf",
"src": "766:119:1"
},
{
"nativeSrc": "895:117:1",
"nodeType": "YulBlock",
"src": "895:117:1",
"statements": [
{
"nativeSrc": "910:15:1",
"nodeType": "YulVariableDeclaration",
"src": "910:15:1",
"value": {
"kind": "number",
"nativeSrc": "924:1:1",
"nodeType": "YulLiteral",
"src": "924:1:1",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "914:6:1",
"nodeType": "YulTypedName",
"src": "914:6:1",
"type": ""
}
]
},
{
"nativeSrc": "939:63:1",
"nodeType": "YulAssignment",
"src": "939:63:1",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "974:9:1",
"nodeType": "YulIdentifier",
"src": "974:9:1"
},
{
"name": "offset",
"nativeSrc": "985:6:1",
"nodeType": "YulIdentifier",
"src": "985:6:1"
}
],
"functionName": {
"name": "add",
"nativeSrc": "970:3:1",
"nodeType": "YulIdentifier",
"src": "970:3:1"
},
"nativeSrc": "970:22:1",
"nodeType": "YulFunctionCall",
"src": "970:22:1"
},
{
"name": "dataEnd",
"nativeSrc": "994:7:1",
"nodeType": "YulIdentifier",
"src": "994:7:1"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "949:20:1",
"nodeType": "YulIdentifier",
"src": "949:20:1"
},
"nativeSrc": "949:53:1",
"nodeType": "YulFunctionCall",
"src": "949:53:1"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "939:6:1",
"nodeType": "YulIdentifier",
"src": "939:6:1"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256",
"nativeSrc": "690:329:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "726:9:1",
"nodeType": "YulTypedName",
"src": "726:9:1",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "737:7:1",
"nodeType": "YulTypedName",
"src": "737:7:1",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "749:6:1",
"nodeType": "YulTypedName",
"src": "749:6:1",
"type": ""
}
],
"src": "690:329:1"
},
{
"body": {
"nativeSrc": "1070:81:1",
"nodeType": "YulBlock",
"src": "1070:81:1",
"statements": [
{
"nativeSrc": "1080:65:1",
"nodeType": "YulAssignment",
"src": "1080:65:1",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "1095:5:1",
"nodeType": "YulIdentifier",
"src": "1095:5:1"
},
{
"kind": "number",
"nativeSrc": "1102:42:1",
"nodeType": "YulLiteral",
"src": "1102:42:1",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nativeSrc": "1091:3:1",
"nodeType": "YulIdentifier",
"src": "1091:3:1"
},
"nativeSrc": "1091:54:1",
"nodeType": "YulFunctionCall",
"src": "1091:54:1"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "1080:7:1",
"nodeType": "YulIdentifier",
"src": "1080:7:1"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nativeSrc": "1025:126:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1052:5:1",
"nodeType": "YulTypedName",
"src": "1052:5:1",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "1062:7:1",
"nodeType": "YulTypedName",
"src": "1062:7:1",
"type": ""
}
],
"src": "1025:126:1"
},
{
"body": {
"nativeSrc": "1202:51:1",
"nodeType": "YulBlock",
"src": "1202:51:1",
"statements": [
{
"nativeSrc": "1212:35:1",
"nodeType": "YulAssignment",
"src": "1212:35:1",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "1241:5:1",
"nodeType": "YulIdentifier",
"src": "1241:5:1"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nativeSrc": "1223:17:1",
"nodeType": "YulIdentifier",
"src": "1223:17:1"
},
"nativeSrc": "1223:24:1",
"nodeType": "YulFunctionCall",
"src": "1223:24:1"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "1212:7:1",
"nodeType": "YulIdentifier",
"src": "1212:7:1"
}
]
}
]
},
"name": "cleanup_t_address",
"nativeSrc": "1157:96:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1184:5:1",
"nodeType": "YulTypedName",
"src": "1184:5:1",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "1194:7:1",
"nodeType": "YulTypedName",
"src": "1194:7:1",
"type": ""
}
],
"src": "1157:96:1"
},
{
"body": {
"nativeSrc": "1332:53:1",
"nodeType": "YulBlock",
"src": "1332:53:1",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1349:3:1",
"nodeType": "YulIdentifier",
"src": "1349:3:1"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1372:5:1",
"nodeType": "YulIdentifier",
"src": "1372:5:1"
}
],
"functionName": {
"name": "cleanup_t_address",
"nativeSrc": "1354:17:1",
"nodeType": "YulIdentifier",
"src": "1354:17:1"
},
"nativeSrc": "1354:24:1",
"nodeType": "YulFunctionCall",
"src": "1354:24:1"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1342:6:1",
"nodeType": "YulIdentifier",
"src": "1342:6:1"
},
"nativeSrc": "1342:37:1",
"nodeType": "YulFunctionCall",
"src": "1342:37:1"
},
"nativeSrc": "1342:37:1",
"nodeType": "YulExpressionStatement",
"src": "1342:37:1"
}
]
},
"name": "abi_encode_t_address_to_t_address_fromStack_library",
"nativeSrc": "1259:126:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1320:5:1",
"nodeType": "YulTypedName",
"src": "1320:5:1",
"type": ""
},
{
"name": "pos",
"nativeSrc": "1327:3:1",
"nodeType": "YulTypedName",
"src": "1327:3:1",
"type": ""
}
],
"src": "1259:126:1"
},
{
"body": {
"nativeSrc": "1497:132:1",
"nodeType": "YulBlock",
"src": "1497:132:1",
"statements": [
{
"nativeSrc": "1507:26:1",
"nodeType": "YulAssignment",
"src": "1507:26:1",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "1519:9:1",
"nodeType": "YulIdentifier",
"src": "1519:9:1"
},
{
"kind": "number",
"nativeSrc": "1530:2:1",
"nodeType": "YulLiteral",
"src": "1530:2:1",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1515:3:1",
"nodeType": "YulIdentifier",
"src": "1515:3:1"
},
"nativeSrc": "1515:18:1",
"nodeType": "YulFunctionCall",
"src": "1515:18:1"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "1507:4:1",
"nodeType": "YulIdentifier",
"src": "1507:4:1"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "1595:6:1",
"nodeType": "YulIdentifier",
"src": "1595:6:1"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1608:9:1",
"nodeType": "YulIdentifier",
"src": "1608:9:1"
},
{
"kind": "number",
"nativeSrc": "1619:1:1",
"nodeType": "YulLiteral",
"src": "1619:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1604:3:1",
"nodeType": "YulIdentifier",
"src": "1604:3:1"
},
"nativeSrc": "1604:17:1",
"nodeType": "YulFunctionCall",
"src": "1604:17:1"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack_library",
"nativeSrc": "1543:51:1",
"nodeType": "YulIdentifier",
"src": "1543:51:1"
},
"nativeSrc": "1543:79:1",
"nodeType": "YulFunctionCall",
"src": "1543:79:1"
},
"nativeSrc": "1543:79:1",
"nodeType": "YulExpressionStatement",
"src": "1543:79:1"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed",
"nativeSrc": "1391:238:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1469:9:1",
"nodeType": "YulTypedName",
"src": "1469:9:1",
"type": ""
},
{
"name": "value0",
"nativeSrc": "1481:6:1",
"nodeType": "YulTypedName",
"src": "1481:6:1",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "1492:4:1",
"nodeType": "YulTypedName",
"src": "1492:4:1",
"type": ""
}
],
"src": "1391:238:1"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack_library(value0, add(headStart, 0))\n\n }\n\n}\n",
"id": 1,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce88b14514610038575b5f5ffd5b610052600480360381019061004d91906100a8565b610068565b60405161005f9190610112565b60405180910390f35b5f5f9050919050565b5f5ffd5b5f819050919050565b61008781610075565b8114610091575f5ffd5b50565b5f813590506100a28161007e565b92915050565b5f602082840312156100bd576100bc610071565b5b5f6100ca84828501610094565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100fc826100d3565b9050919050565b61010c816100f2565b82525050565b5f6020820190506101255f830184610103565b9291505056fea2646970667358221220c125ee5b3c1e8e8e48c18f0288bf89ccb39e4faf31c67e64b6f67297f70f672264736f6c63430008220033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCE88B145 EQ PUSH2 0x38 JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0xA8 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x112 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH0 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x87 DUP2 PUSH2 0x75 JUMP JUMPDEST DUP2 EQ PUSH2 0x91 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xA2 DUP2 PUSH2 0x7E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBD JUMPI PUSH2 0xBC PUSH2 0x71 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0xCA DUP5 DUP3 DUP6 ADD PUSH2 0x94 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0xFC DUP3 PUSH2 0xD3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x10C DUP2 PUSH2 0xF2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x125 PUSH0 DUP4 ADD DUP5 PUSH2 0x103 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC1 0x25 RETURNCONTRACT 0x5B EXTCODECOPY CLZ DUP15 DUP15 BASEFEE 0xC1 DUP16 MUL DUP9 0xBF DUP10 0xCC 0xB3 SWAP15 0x4F 0xAF BALANCE 0xC6 PUSH31 0x64B6F67297F70F672264736F6C634300082200330000000000000000000000 ",
"sourceMap": "71:126:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;99:96;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;152:7;186:1;171:17;;99:96;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:126::-;1062:7;1102:42;1095:5;1091:54;1080:65;;1025:126;;;:::o;1157:96::-;1194:7;1223:24;1241:5;1223:24;:::i;:::-;1212:35;;1157:96;;;:::o;1259:126::-;1354:24;1372:5;1354:24;:::i;:::-;1349:3;1342:37;1259:126;;:::o;1391:238::-;1492:4;1530:2;1519:9;1515:18;1507:26;;1543:79;1619:1;1608:9;1604:17;1595:6;1543:79;:::i;:::-;1391:238;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "70600",
"executionCost": "146",
"totalCost": "70746"
},
"external": {
"getAccount(uint256)": "602"
}
},
"legacyAssembly": {
".code": [
{
"begin": 71,
"end": 197,
"name": "PUSH #[$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 71,
"end": 197,
"name": "PUSH [$]",
"source": 0,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "B"
},
{
"begin": 71,
"end": 197,
"name": "DUP3",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "DUP3",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "DUP3",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "CODECOPY",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "DUP1",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "MLOAD",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 71,
"end": 197,
"name": "BYTE",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "73"
},
{
"begin": 71,
"end": 197,
"name": "EQ",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH [tag]",
"source": 0,
"value": "1"
},
{
"begin": 71,
"end": 197,
"name": "JUMPI",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 71,
"end": 197,
"name": "MSTORE",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 71,
"end": 197,
"name": "MSTORE",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "24"
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 71,
"end": 197,
"name": "REVERT",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "tag",
"source": 0,
"value": "1"
},
{
"begin": 71,
"end": 197,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "ADDRESS",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 71,
"end": 197,
"name": "MSTORE",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "73"
},
{
"begin": 71,
"end": 197,
"name": "DUP2",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "MSTORE8",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "DUP3",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "DUP2",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "RETURN",
"source": 0
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220c125ee5b3c1e8e8e48c18f0288bf89ccb39e4faf31c67e64b6f67297f70f672264736f6c63430008220033",
".code": [
{
"begin": 71,
"end": 197,
"name": "PUSHDEPLOYADDRESS",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "ADDRESS",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "EQ",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "80"
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 71,
"end": 197,
"name": "MSTORE",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 71,
"end": 197,
"name": "CALLDATASIZE",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "LT",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH [tag]",
"source": 0,
"value": "1"
},
{
"begin": 71,
"end": 197,
"name": "JUMPI",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 71,
"end": 197,
"name": "CALLDATALOAD",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "E0"
},
{
"begin": 71,
"end": 197,
"name": "SHR",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "DUP1",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "CE88B145"
},
{
"begin": 71,
"end": 197,
"name": "EQ",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH [tag]",
"source": 0,
"value": "2"
},
{
"begin": 71,
"end": 197,
"name": "JUMPI",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "tag",
"source": 0,
"value": "1"
},
{
"begin": 71,
"end": 197,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 71,
"end": 197,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 71,
"end": 197,
"name": "REVERT",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "tag",
"source": 0,
"value": "2"
},
{
"begin": 99,
"end": 195,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "PUSH [tag]",
"source": 0,
"value": "3"
},
{
"begin": 99,
"end": 195,
"name": "PUSH",
"source": 0,
"value": "4"
},
{
"begin": 99,
"end": 195,
"name": "DUP1",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "CALLDATASIZE",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SUB",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "DUP2",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "ADD",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SWAP1",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "PUSH [tag]",
"source": 0,
"value": "4"
},
{
"begin": 99,
"end": 195,
"name": "SWAP2",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SWAP1",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "PUSH [tag]",
"source": 0,
"value": "5"
},
{
"begin": 99,
"end": 195,
"jumpType": "[in]",
"name": "JUMP",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "tag",
"source": 0,
"value": "4"
},
{
"begin": 99,
"end": 195,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "PUSH [tag]",
"source": 0,
"value": "6"
},
{
"begin": 99,
"end": 195,
"jumpType": "[in]",
"name": "JUMP",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "tag",
"source": 0,
"value": "3"
},
{
"begin": 99,
"end": 195,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 99,
"end": 195,
"name": "MLOAD",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "PUSH [tag]",
"source": 0,
"value": "7"
},
{
"begin": 99,
"end": 195,
"name": "SWAP2",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SWAP1",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "PUSH [tag]",
"source": 0,
"value": "8"
},
{
"begin": 99,
"end": 195,
"jumpType": "[in]",
"name": "JUMP",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "tag",
"source": 0,
"value": "7"
},
{
"begin": 99,
"end": 195,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "PUSH",
"source": 0,
"value": "40"
},
{
"begin": 99,
"end": 195,
"name": "MLOAD",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "DUP1",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SWAP2",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SUB",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SWAP1",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "RETURN",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "tag",
"source": 0,
"value": "6"
},
{
"begin": 99,
"end": 195,
"name": "JUMPDEST",
"source": 0
},
{
"begin": 152,
"end": 159,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 186,
"end": 187,
"name": "PUSH",
"source": 0,
"value": "0"
},
{
"begin": 171,
"end": 188,
"name": "SWAP1",
"source": 0
},
{
"begin": 171,
"end": 188,
"name": "POP",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SWAP2",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "SWAP1",
"source": 0
},
{
"begin": 99,
"end": 195,
"name": "POP",
"source": 0
},
{
"begin": 99,
"end": 195,
"jumpType": "[out]",
"name": "JUMP",
"source": 0
},
{
"begin": 88,
"end": 205,
"name": "tag",
"source": 1,
"value": "11"
},
{
"begin": 88,
"end": 205,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 197,
"end": 198,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 194,
"end": 195,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 187,
"end": 199,
"name": "REVERT",
"source": 1
},
{
"begin": 334,
"end": 411,
"name": "tag",
"source": 1,
"value": "13"
},
{
"begin": 334,
"end": 411,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 371,
"end": 378,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 400,
"end": 405,
"name": "DUP2",
"source": 1
},
{
"begin": 389,
"end": 405,
"name": "SWAP1",
"source": 1
},
{
"begin": 389,
"end": 405,
"name": "POP",
"source": 1
},
{
"begin": 334,
"end": 411,
"name": "SWAP2",
"source": 1
},
{
"begin": 334,
"end": 411,
"name": "SWAP1",
"source": 1
},
{
"begin": 334,
"end": 411,
"name": "POP",
"source": 1
},
{
"begin": 334,
"end": 411,
"jumpType": "[out]",
"name": "JUMP",
"source": 1
},
{
"begin": 417,
"end": 539,
"name": "tag",
"source": 1,
"value": "14"
},
{
"begin": 417,
"end": 539,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 490,
"end": 514,
"name": "PUSH [tag]",
"source": 1,
"value": "25"
},
{
"begin": 508,
"end": 513,
"name": "DUP2",
"source": 1
},
{
"begin": 490,
"end": 514,
"name": "PUSH [tag]",
"source": 1,
"value": "13"
},
{
"begin": 490,
"end": 514,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 490,
"end": 514,
"name": "tag",
"source": 1,
"value": "25"
},
{
"begin": 490,
"end": 514,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 483,
"end": 488,
"name": "DUP2",
"source": 1
},
{
"begin": 480,
"end": 515,
"name": "EQ",
"source": 1
},
{
"begin": 470,
"end": 533,
"name": "PUSH [tag]",
"source": 1,
"value": "26"
},
{
"begin": 470,
"end": 533,
"name": "JUMPI",
"source": 1
},
{
"begin": 529,
"end": 530,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 526,
"end": 527,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 519,
"end": 531,
"name": "REVERT",
"source": 1
},
{
"begin": 470,
"end": 533,
"name": "tag",
"source": 1,
"value": "26"
},
{
"begin": 470,
"end": 533,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 417,
"end": 539,
"name": "POP",
"source": 1
},
{
"begin": 417,
"end": 539,
"jumpType": "[out]",
"name": "JUMP",
"source": 1
},
{
"begin": 545,
"end": 684,
"name": "tag",
"source": 1,
"value": "15"
},
{
"begin": 545,
"end": 684,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 591,
"end": 596,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 629,
"end": 635,
"name": "DUP2",
"source": 1
},
{
"begin": 616,
"end": 636,
"name": "CALLDATALOAD",
"source": 1
},
{
"begin": 607,
"end": 636,
"name": "SWAP1",
"source": 1
},
{
"begin": 607,
"end": 636,
"name": "POP",
"source": 1
},
{
"begin": 645,
"end": 678,
"name": "PUSH [tag]",
"source": 1,
"value": "28"
},
{
"begin": 672,
"end": 677,
"name": "DUP2",
"source": 1
},
{
"begin": 645,
"end": 678,
"name": "PUSH [tag]",
"source": 1,
"value": "14"
},
{
"begin": 645,
"end": 678,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 645,
"end": 678,
"name": "tag",
"source": 1,
"value": "28"
},
{
"begin": 645,
"end": 678,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 545,
"end": 684,
"name": "SWAP3",
"source": 1
},
{
"begin": 545,
"end": 684,
"name": "SWAP2",
"source": 1
},
{
"begin": 545,
"end": 684,
"name": "POP",
"source": 1
},
{
"begin": 545,
"end": 684,
"name": "POP",
"source": 1
},
{
"begin": 545,
"end": 684,
"jumpType": "[out]",
"name": "JUMP",
"source": 1
},
{
"begin": 690,
"end": 1019,
"name": "tag",
"source": 1,
"value": "5"
},
{
"begin": 690,
"end": 1019,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 749,
"end": 755,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 798,
"end": 800,
"name": "PUSH",
"source": 1,
"value": "20"
},
{
"begin": 786,
"end": 795,
"name": "DUP3",
"source": 1
},
{
"begin": 777,
"end": 784,
"name": "DUP5",
"source": 1
},
{
"begin": 773,
"end": 796,
"name": "SUB",
"source": 1
},
{
"begin": 769,
"end": 801,
"name": "SLT",
"source": 1
},
{
"begin": 766,
"end": 885,
"name": "ISZERO",
"source": 1
},
{
"begin": 766,
"end": 885,
"name": "PUSH [tag]",
"source": 1,
"value": "30"
},
{
"begin": 766,
"end": 885,
"name": "JUMPI",
"source": 1
},
{
"begin": 804,
"end": 883,
"name": "PUSH [tag]",
"source": 1,
"value": "31"
},
{
"begin": 804,
"end": 883,
"name": "PUSH [tag]",
"source": 1,
"value": "11"
},
{
"begin": 804,
"end": 883,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 804,
"end": 883,
"name": "tag",
"source": 1,
"value": "31"
},
{
"begin": 804,
"end": 883,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 766,
"end": 885,
"name": "tag",
"source": 1,
"value": "30"
},
{
"begin": 766,
"end": 885,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 924,
"end": 925,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 949,
"end": 1002,
"name": "PUSH [tag]",
"source": 1,
"value": "32"
},
{
"begin": 994,
"end": 1001,
"name": "DUP5",
"source": 1
},
{
"begin": 985,
"end": 991,
"name": "DUP3",
"source": 1
},
{
"begin": 974,
"end": 983,
"name": "DUP6",
"source": 1
},
{
"begin": 970,
"end": 992,
"name": "ADD",
"source": 1
},
{
"begin": 949,
"end": 1002,
"name": "PUSH [tag]",
"source": 1,
"value": "15"
},
{
"begin": 949,
"end": 1002,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 949,
"end": 1002,
"name": "tag",
"source": 1,
"value": "32"
},
{
"begin": 949,
"end": 1002,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 939,
"end": 1002,
"name": "SWAP2",
"source": 1
},
{
"begin": 939,
"end": 1002,
"name": "POP",
"source": 1
},
{
"begin": 895,
"end": 1012,
"name": "POP",
"source": 1
},
{
"begin": 690,
"end": 1019,
"name": "SWAP3",
"source": 1
},
{
"begin": 690,
"end": 1019,
"name": "SWAP2",
"source": 1
},
{
"begin": 690,
"end": 1019,
"name": "POP",
"source": 1
},
{
"begin": 690,
"end": 1019,
"name": "POP",
"source": 1
},
{
"begin": 690,
"end": 1019,
"jumpType": "[out]",
"name": "JUMP",
"source": 1
},
{
"begin": 1025,
"end": 1151,
"name": "tag",
"source": 1,
"value": "16"
},
{
"begin": 1025,
"end": 1151,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 1062,
"end": 1069,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 1102,
"end": 1144,
"name": "PUSH",
"source": 1,
"value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
},
{
"begin": 1095,
"end": 1100,
"name": "DUP3",
"source": 1
},
{
"begin": 1091,
"end": 1145,
"name": "AND",
"source": 1
},
{
"begin": 1080,
"end": 1145,
"name": "SWAP1",
"source": 1
},
{
"begin": 1080,
"end": 1145,
"name": "POP",
"source": 1
},
{
"begin": 1025,
"end": 1151,
"name": "SWAP2",
"source": 1
},
{
"begin": 1025,
"end": 1151,
"name": "SWAP1",
"source": 1
},
{
"begin": 1025,
"end": 1151,
"name": "POP",
"source": 1
},
{
"begin": 1025,
"end": 1151,
"jumpType": "[out]",
"name": "JUMP",
"source": 1
},
{
"begin": 1157,
"end": 1253,
"name": "tag",
"source": 1,
"value": "17"
},
{
"begin": 1157,
"end": 1253,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 1194,
"end": 1201,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 1223,
"end": 1247,
"name": "PUSH [tag]",
"source": 1,
"value": "35"
},
{
"begin": 1241,
"end": 1246,
"name": "DUP3",
"source": 1
},
{
"begin": 1223,
"end": 1247,
"name": "PUSH [tag]",
"source": 1,
"value": "16"
},
{
"begin": 1223,
"end": 1247,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 1223,
"end": 1247,
"name": "tag",
"source": 1,
"value": "35"
},
{
"begin": 1223,
"end": 1247,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 1212,
"end": 1247,
"name": "SWAP1",
"source": 1
},
{
"begin": 1212,
"end": 1247,
"name": "POP",
"source": 1
},
{
"begin": 1157,
"end": 1253,
"name": "SWAP2",
"source": 1
},
{
"begin": 1157,
"end": 1253,
"name": "SWAP1",
"source": 1
},
{
"begin": 1157,
"end": 1253,
"name": "POP",
"source": 1
},
{
"begin": 1157,
"end": 1253,
"jumpType": "[out]",
"name": "JUMP",
"source": 1
},
{
"begin": 1259,
"end": 1385,
"name": "tag",
"source": 1,
"value": "18"
},
{
"begin": 1259,
"end": 1385,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 1354,
"end": 1378,
"name": "PUSH [tag]",
"source": 1,
"value": "37"
},
{
"begin": 1372,
"end": 1377,
"name": "DUP2",
"source": 1
},
{
"begin": 1354,
"end": 1378,
"name": "PUSH [tag]",
"source": 1,
"value": "17"
},
{
"begin": 1354,
"end": 1378,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 1354,
"end": 1378,
"name": "tag",
"source": 1,
"value": "37"
},
{
"begin": 1354,
"end": 1378,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 1349,
"end": 1352,
"name": "DUP3",
"source": 1
},
{
"begin": 1342,
"end": 1379,
"name": "MSTORE",
"source": 1
},
{
"begin": 1259,
"end": 1385,
"name": "POP",
"source": 1
},
{
"begin": 1259,
"end": 1385,
"name": "POP",
"source": 1
},
{
"begin": 1259,
"end": 1385,
"jumpType": "[out]",
"name": "JUMP",
"source": 1
},
{
"begin": 1391,
"end": 1629,
"name": "tag",
"source": 1,
"value": "8"
},
{
"begin": 1391,
"end": 1629,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 1492,
"end": 1496,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 1530,
"end": 1532,
"name": "PUSH",
"source": 1,
"value": "20"
},
{
"begin": 1519,
"end": 1528,
"name": "DUP3",
"source": 1
},
{
"begin": 1515,
"end": 1533,
"name": "ADD",
"source": 1
},
{
"begin": 1507,
"end": 1533,
"name": "SWAP1",
"source": 1
},
{
"begin": 1507,
"end": 1533,
"name": "POP",
"source": 1
},
{
"begin": 1543,
"end": 1622,
"name": "PUSH [tag]",
"source": 1,
"value": "39"
},
{
"begin": 1619,
"end": 1620,
"name": "PUSH",
"source": 1,
"value": "0"
},
{
"begin": 1608,
"end": 1617,
"name": "DUP4",
"source": 1
},
{
"begin": 1604,
"end": 1621,
"name": "ADD",
"source": 1
},
{
"begin": 1595,
"end": 1601,
"name": "DUP5",
"source": 1
},
{
"begin": 1543,
"end": 1622,
"name": "PUSH [tag]",
"source": 1,
"value": "18"
},
{
"begin": 1543,
"end": 1622,
"jumpType": "[in]",
"name": "JUMP",
"source": 1
},
{
"begin": 1543,
"end": 1622,
"name": "tag",
"source": 1,
"value": "39"
},
{
"begin": 1543,
"end": 1622,
"name": "JUMPDEST",
"source": 1
},
{
"begin": 1391,
"end": 1629,
"name": "SWAP3",
"source": 1
},
{
"begin": 1391,
"end": 1629,
"name": "SWAP2",
"source": 1
},
{
"begin": 1391,
"end": 1629,
"name": "POP",
"source": 1
},
{
"begin": 1391,
"end": 1629,
"name": "POP",
"source": 1
},
{
"begin": 1391,
"end": 1629,
"jumpType": "[out]",
"name": "JUMP",
"source": 1
}
]
}
},
"sourceList": [
".deps/remix-tests/remix_accounts.sol",
"#utility.yul"
]
},
"methodIdentifiers": {
"getAccount(uint256)": "ce88b145"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.34+commit.80d5c536\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getAccount\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\".deps/remix-tests/remix_accounts.sol\":\"TestsAccounts\"},\"evmVersion\":\"osaka\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\".deps/remix-tests/remix_accounts.sol\":{\"keccak256\":\"0x722e8fd271de98c2d980bda8e3d011551d9641355216b1029084b455c4c2a662\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://8e57585c7061065613c796706efdae0c79a416bde447ccbe4ffaf969aeb7423e\",\"dweb:/ipfs/QmdQCAgvob9suV3UwSR2rRetyU9fafTtEi2sDv9oRmRSLo\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"errors": [
{
"component": "general",
"errorCode": "5667",
"formattedMessage": "Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n --> .deps/remix-tests/remix_accounts.sol:6:25:\n |\n6 | function getAccount(uint index) pure public returns (address) {\n | ^^^^^^^^^^\n\n",
"message": "Unused function parameter. Remove or comment out the variable name to silence this warning.",
"severity": "warning",
"sourceLocation": {
"end": 129,
"file": ".deps/remix-tests/remix_accounts.sol",
"start": 119
},
"type": "Warning"
}
],
"sources": {
".deps/remix-tests/remix_accounts.sol": {
"ast": {
"absolutePath": ".deps/remix-tests/remix_accounts.sol",
"exportedSymbols": {
"TestsAccounts": [
15
]
},
"id": 16,
"license": "GPL-3.0",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
">=",
"0.4",
".22",
"<",
"0.9",
".0"
],
"nodeType": "PragmaDirective",
"src": "37:32:0"
},
{
"abstract": false,
"baseContracts": [],
"canonicalName": "TestsAccounts",
"contractDependencies": [],
"contractKind": "library",
"fullyImplemented": true,
"id": 15,
"linearizedBaseContracts": [
15
],
"name": "TestsAccounts",
"nameLocation": "79:13:0",
"nodeType": "ContractDefinition",
"nodes": [
{
"body": {
"id": 13,
"nodeType": "Block",
"src": "161:34:0",
"statements": [
{
"expression": {
"arguments": [
{
"hexValue": "30",
"id": 10,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "186:1:0",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
}
],
"id": 9,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "178:7:0",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_address_$",
"typeString": "type(address)"
},
"typeName": {
"id": 8,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "178:7:0",
"typeDescriptions": {}
}
},
"id": 11,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "178:10:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"functionReturnParameters": 7,
"id": 12,
"nodeType": "Return",
"src": "171:17:0"
}
]
},
"functionSelector": "ce88b145",
"id": 14,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getAccount",
"nameLocation": "108:10:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 4,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 3,
"mutability": "mutable",
"name": "index",
"nameLocation": "124:5:0",
"nodeType": "VariableDeclaration",
"scope": 14,
"src": "119:10:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 2,
"name": "uint",
"nodeType": "ElementaryTypeName",
"src": "119:4:0",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "118:12:0"
},
"returnParameters": {
"id": 7,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 6,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 14,
"src": "152:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 5,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "152:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "151:9:0"
},
"scope": 15,
"src": "99:96:0",
"stateMutability": "pure",
"virtual": false,
"visibility": "public"
}
],
"scope": 16,
"src": "71:126:0",
"usedErrors": [],
"usedEvents": []
}
],
"src": "37:161:0"
},
"id": 0
}
}
}
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"sepolia:11155111": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "61016161004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce88b14514610038575b5f5ffd5b610052600480360381019061004d91906100a8565b610068565b60405161005f9190610112565b60405180910390f35b5f5f9050919050565b5f5ffd5b5f819050919050565b61008781610075565b8114610091575f5ffd5b50565b5f813590506100a28161007e565b92915050565b5f602082840312156100bd576100bc610071565b5b5f6100ca84828501610094565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100fc826100d3565b9050919050565b61010c816100f2565b82525050565b5f6020820190506101255f830184610103565b9291505056fea2646970667358221220c125ee5b3c1e8e8e48c18f0288bf89ccb39e4faf31c67e64b6f67297f70f672264736f6c63430008220033",
"opcodes": "PUSH2 0x161 PUSH2 0x4D PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH0 BYTE PUSH1 0x73 EQ PUSH1 0x41 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADDRESS PUSH0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCE88B145 EQ PUSH2 0x38 JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0xA8 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x112 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH0 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x87 DUP2 PUSH2 0x75 JUMP JUMPDEST DUP2 EQ PUSH2 0x91 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xA2 DUP2 PUSH2 0x7E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBD JUMPI PUSH2 0xBC PUSH2 0x71 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0xCA DUP5 DUP3 DUP6 ADD PUSH2 0x94 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0xFC DUP3 PUSH2 0xD3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x10C DUP2 PUSH2 0xF2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x125 PUSH0 DUP4 ADD DUP5 PUSH2 0x103 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC1 0x25 RETURNCONTRACT 0x5B EXTCODECOPY CLZ DUP15 DUP15 BASEFEE 0xC1 DUP16 MUL DUP9 0xBF DUP10 0xCC 0xB3 SWAP15 0x4F 0xAF BALANCE 0xC6 PUSH31 0x64B6F67297F70F672264736F6C634300082200330000000000000000000000 ",
"sourceMap": "71:126:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@getAccount_14": {
"entryPoint": 104,
"id": 14,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_decode_t_uint256": {
"entryPoint": 148,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_uint256": {
"entryPoint": 168,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_address_to_t_address_fromStack_library": {
"entryPoint": 259,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed": {
"entryPoint": 274,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"cleanup_t_address": {
"entryPoint": 242,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint160": {
"entryPoint": 211,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 117,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 113,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"validator_revert_t_uint256": {
"entryPoint": 126,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nativeSrc": "0:1632:1",
"nodeType": "YulBlock",
"src": "0:1632:1",
"statements": [
{
"body": {
"nativeSrc": "47:35:1",
"nodeType": "YulBlock",
"src": "47:35:1",
"statements": [
{
"nativeSrc": "57:19:1",
"nodeType": "YulAssignment",
"src": "57:19:1",
"value": {
"arguments": [
{
"kind": "number",
"nativeSrc": "73:2:1",
"nodeType": "YulLiteral",
"src": "73:2:1",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nativeSrc": "67:5:1",
"nodeType": "YulIdentifier",
"src": "67:5:1"
},
"nativeSrc": "67:9:1",
"nodeType": "YulFunctionCall",
"src": "67:9:1"
},
"variableNames": [
{
"name": "memPtr",
"nativeSrc": "57:6:1",
"nodeType": "YulIdentifier",
"src": "57:6:1"
}
]
}
]
},
"name": "allocate_unbounded",
"nativeSrc": "7:75:1",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nativeSrc": "40:6:1",
"nodeType": "YulTypedName",
"src": "40:6:1",
"type": ""
}
],
"src": "7:75:1"
},
{
"body": {
"nativeSrc": "177:28:1",
"nodeType": "YulBlock",
"src": "177:28:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "194:1:1",
"nodeType": "YulLiteral",
"src": "194:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "197:1:1",
"nodeType": "YulLiteral",
"src": "197:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "187:6:1",
"nodeType": "YulIdentifier",
"src": "187:6:1"
},
"nativeSrc": "187:12:1",
"nodeType": "YulFunctionCall",
"src": "187:12:1"
},
"nativeSrc": "187:12:1",
"nodeType": "YulExpressionStatement",
"src": "187:12:1"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "88:117:1",
"nodeType": "YulFunctionDefinition",
"src": "88:117:1"
},
{
"body": {
"nativeSrc": "300:28:1",
"nodeType": "YulBlock",
"src": "300:28:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "317:1:1",
"nodeType": "YulLiteral",
"src": "317:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "320:1:1",
"nodeType": "YulLiteral",
"src": "320:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "310:6:1",
"nodeType": "YulIdentifier",
"src": "310:6:1"
},
"nativeSrc": "310:12:1",
"nodeType": "YulFunctionCall",
"src": "310:12:1"
},
"nativeSrc": "310:12:1",
"nodeType": "YulExpressionStatement",
"src": "310:12:1"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nativeSrc": "211:117:1",
"nodeType": "YulFunctionDefinition",
"src": "211:117:1"
},
{
"body": {
"nativeSrc": "379:32:1",
"nodeType": "YulBlock",
"src": "379:32:1",
"statements": [
{
"nativeSrc": "389:16:1",
"nodeType": "YulAssignment",
"src": "389:16:1",
"value": {
"name": "value",
"nativeSrc": "400:5:1",
"nodeType": "YulIdentifier",
"src": "400:5:1"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "389:7:1",
"nodeType": "YulIdentifier",
"src": "389:7:1"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nativeSrc": "334:77:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "361:5:1",
"nodeType": "YulTypedName",
"src": "361:5:1",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "371:7:1",
"nodeType": "YulTypedName",
"src": "371:7:1",
"type": ""
}
],
"src": "334:77:1"
},
{
"body": {
"nativeSrc": "460:79:1",
"nodeType": "YulBlock",
"src": "460:79:1",
"statements": [
{
"body": {
"nativeSrc": "517:16:1",
"nodeType": "YulBlock",
"src": "517:16:1",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nativeSrc": "526:1:1",
"nodeType": "YulLiteral",
"src": "526:1:1",
"type": "",
"value": "0"
},
{
"kind": "number",
"nativeSrc": "529:1:1",
"nodeType": "YulLiteral",
"src": "529:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nativeSrc": "519:6:1",
"nodeType": "YulIdentifier",
"src": "519:6:1"
},
"nativeSrc": "519:12:1",
"nodeType": "YulFunctionCall",
"src": "519:12:1"
},
"nativeSrc": "519:12:1",
"nodeType": "YulExpressionStatement",
"src": "519:12:1"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nativeSrc": "483:5:1",
"nodeType": "YulIdentifier",
"src": "483:5:1"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "508:5:1",
"nodeType": "YulIdentifier",
"src": "508:5:1"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nativeSrc": "490:17:1",
"nodeType": "YulIdentifier",
"src": "490:17:1"
},
"nativeSrc": "490:24:1",
"nodeType": "YulFunctionCall",
"src": "490:24:1"
}
],
"functionName": {
"name": "eq",
"nativeSrc": "480:2:1",
"nodeType": "YulIdentifier",
"src": "480:2:1"
},
"nativeSrc": "480:35:1",
"nodeType": "YulFunctionCall",
"src": "480:35:1"
}
],
"functionName": {
"name": "iszero",
"nativeSrc": "473:6:1",
"nodeType": "YulIdentifier",
"src": "473:6:1"
},
"nativeSrc": "473:43:1",
"nodeType": "YulFunctionCall",
"src": "473:43:1"
},
"nativeSrc": "470:63:1",
"nodeType": "YulIf",
"src": "470:63:1"
}
]
},
"name": "validator_revert_t_uint256",
"nativeSrc": "417:122:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "453:5:1",
"nodeType": "YulTypedName",
"src": "453:5:1",
"type": ""
}
],
"src": "417:122:1"
},
{
"body": {
"nativeSrc": "597:87:1",
"nodeType": "YulBlock",
"src": "597:87:1",
"statements": [
{
"nativeSrc": "607:29:1",
"nodeType": "YulAssignment",
"src": "607:29:1",
"value": {
"arguments": [
{
"name": "offset",
"nativeSrc": "629:6:1",
"nodeType": "YulIdentifier",
"src": "629:6:1"
}
],
"functionName": {
"name": "calldataload",
"nativeSrc": "616:12:1",
"nodeType": "YulIdentifier",
"src": "616:12:1"
},
"nativeSrc": "616:20:1",
"nodeType": "YulFunctionCall",
"src": "616:20:1"
},
"variableNames": [
{
"name": "value",
"nativeSrc": "607:5:1",
"nodeType": "YulIdentifier",
"src": "607:5:1"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nativeSrc": "672:5:1",
"nodeType": "YulIdentifier",
"src": "672:5:1"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nativeSrc": "645:26:1",
"nodeType": "YulIdentifier",
"src": "645:26:1"
},
"nativeSrc": "645:33:1",
"nodeType": "YulFunctionCall",
"src": "645:33:1"
},
"nativeSrc": "645:33:1",
"nodeType": "YulExpressionStatement",
"src": "645:33:1"
}
]
},
"name": "abi_decode_t_uint256",
"nativeSrc": "545:139:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nativeSrc": "575:6:1",
"nodeType": "YulTypedName",
"src": "575:6:1",
"type": ""
},
{
"name": "end",
"nativeSrc": "583:3:1",
"nodeType": "YulTypedName",
"src": "583:3:1",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nativeSrc": "591:5:1",
"nodeType": "YulTypedName",
"src": "591:5:1",
"type": ""
}
],
"src": "545:139:1"
},
{
"body": {
"nativeSrc": "756:263:1",
"nodeType": "YulBlock",
"src": "756:263:1",
"statements": [
{
"body": {
"nativeSrc": "802:83:1",
"nodeType": "YulBlock",
"src": "802:83:1",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nativeSrc": "804:77:1",
"nodeType": "YulIdentifier",
"src": "804:77:1"
},
"nativeSrc": "804:79:1",
"nodeType": "YulFunctionCall",
"src": "804:79:1"
},
"nativeSrc": "804:79:1",
"nodeType": "YulExpressionStatement",
"src": "804:79:1"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nativeSrc": "777:7:1",
"nodeType": "YulIdentifier",
"src": "777:7:1"
},
{
"name": "headStart",
"nativeSrc": "786:9:1",
"nodeType": "YulIdentifier",
"src": "786:9:1"
}
],
"functionName": {
"name": "sub",
"nativeSrc": "773:3:1",
"nodeType": "YulIdentifier",
"src": "773:3:1"
},
"nativeSrc": "773:23:1",
"nodeType": "YulFunctionCall",
"src": "773:23:1"
},
{
"kind": "number",
"nativeSrc": "798:2:1",
"nodeType": "YulLiteral",
"src": "798:2:1",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nativeSrc": "769:3:1",
"nodeType": "YulIdentifier",
"src": "769:3:1"
},
"nativeSrc": "769:32:1",
"nodeType": "YulFunctionCall",
"src": "769:32:1"
},
"nativeSrc": "766:119:1",
"nodeType": "YulIf",
"src": "766:119:1"
},
{
"nativeSrc": "895:117:1",
"nodeType": "YulBlock",
"src": "895:117:1",
"statements": [
{
"nativeSrc": "910:15:1",
"nodeType": "YulVariableDeclaration",
"src": "910:15:1",
"value": {
"kind": "number",
"nativeSrc": "924:1:1",
"nodeType": "YulLiteral",
"src": "924:1:1",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nativeSrc": "914:6:1",
"nodeType": "YulTypedName",
"src": "914:6:1",
"type": ""
}
]
},
{
"nativeSrc": "939:63:1",
"nodeType": "YulAssignment",
"src": "939:63:1",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "974:9:1",
"nodeType": "YulIdentifier",
"src": "974:9:1"
},
{
"name": "offset",
"nativeSrc": "985:6:1",
"nodeType": "YulIdentifier",
"src": "985:6:1"
}
],
"functionName": {
"name": "add",
"nativeSrc": "970:3:1",
"nodeType": "YulIdentifier",
"src": "970:3:1"
},
"nativeSrc": "970:22:1",
"nodeType": "YulFunctionCall",
"src": "970:22:1"
},
{
"name": "dataEnd",
"nativeSrc": "994:7:1",
"nodeType": "YulIdentifier",
"src": "994:7:1"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nativeSrc": "949:20:1",
"nodeType": "YulIdentifier",
"src": "949:20:1"
},
"nativeSrc": "949:53:1",
"nodeType": "YulFunctionCall",
"src": "949:53:1"
},
"variableNames": [
{
"name": "value0",
"nativeSrc": "939:6:1",
"nodeType": "YulIdentifier",
"src": "939:6:1"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256",
"nativeSrc": "690:329:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "726:9:1",
"nodeType": "YulTypedName",
"src": "726:9:1",
"type": ""
},
{
"name": "dataEnd",
"nativeSrc": "737:7:1",
"nodeType": "YulTypedName",
"src": "737:7:1",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nativeSrc": "749:6:1",
"nodeType": "YulTypedName",
"src": "749:6:1",
"type": ""
}
],
"src": "690:329:1"
},
{
"body": {
"nativeSrc": "1070:81:1",
"nodeType": "YulBlock",
"src": "1070:81:1",
"statements": [
{
"nativeSrc": "1080:65:1",
"nodeType": "YulAssignment",
"src": "1080:65:1",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "1095:5:1",
"nodeType": "YulIdentifier",
"src": "1095:5:1"
},
{
"kind": "number",
"nativeSrc": "1102:42:1",
"nodeType": "YulLiteral",
"src": "1102:42:1",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nativeSrc": "1091:3:1",
"nodeType": "YulIdentifier",
"src": "1091:3:1"
},
"nativeSrc": "1091:54:1",
"nodeType": "YulFunctionCall",
"src": "1091:54:1"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "1080:7:1",
"nodeType": "YulIdentifier",
"src": "1080:7:1"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nativeSrc": "1025:126:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1052:5:1",
"nodeType": "YulTypedName",
"src": "1052:5:1",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "1062:7:1",
"nodeType": "YulTypedName",
"src": "1062:7:1",
"type": ""
}
],
"src": "1025:126:1"
},
{
"body": {
"nativeSrc": "1202:51:1",
"nodeType": "YulBlock",
"src": "1202:51:1",
"statements": [
{
"nativeSrc": "1212:35:1",
"nodeType": "YulAssignment",
"src": "1212:35:1",
"value": {
"arguments": [
{
"name": "value",
"nativeSrc": "1241:5:1",
"nodeType": "YulIdentifier",
"src": "1241:5:1"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nativeSrc": "1223:17:1",
"nodeType": "YulIdentifier",
"src": "1223:17:1"
},
"nativeSrc": "1223:24:1",
"nodeType": "YulFunctionCall",
"src": "1223:24:1"
},
"variableNames": [
{
"name": "cleaned",
"nativeSrc": "1212:7:1",
"nodeType": "YulIdentifier",
"src": "1212:7:1"
}
]
}
]
},
"name": "cleanup_t_address",
"nativeSrc": "1157:96:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1184:5:1",
"nodeType": "YulTypedName",
"src": "1184:5:1",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nativeSrc": "1194:7:1",
"nodeType": "YulTypedName",
"src": "1194:7:1",
"type": ""
}
],
"src": "1157:96:1"
},
{
"body": {
"nativeSrc": "1332:53:1",
"nodeType": "YulBlock",
"src": "1332:53:1",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nativeSrc": "1349:3:1",
"nodeType": "YulIdentifier",
"src": "1349:3:1"
},
{
"arguments": [
{
"name": "value",
"nativeSrc": "1372:5:1",
"nodeType": "YulIdentifier",
"src": "1372:5:1"
}
],
"functionName": {
"name": "cleanup_t_address",
"nativeSrc": "1354:17:1",
"nodeType": "YulIdentifier",
"src": "1354:17:1"
},
"nativeSrc": "1354:24:1",
"nodeType": "YulFunctionCall",
"src": "1354:24:1"
}
],
"functionName": {
"name": "mstore",
"nativeSrc": "1342:6:1",
"nodeType": "YulIdentifier",
"src": "1342:6:1"
},
"nativeSrc": "1342:37:1",
"nodeType": "YulFunctionCall",
"src": "1342:37:1"
},
"nativeSrc": "1342:37:1",
"nodeType": "YulExpressionStatement",
"src": "1342:37:1"
}
]
},
"name": "abi_encode_t_address_to_t_address_fromStack_library",
"nativeSrc": "1259:126:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nativeSrc": "1320:5:1",
"nodeType": "YulTypedName",
"src": "1320:5:1",
"type": ""
},
{
"name": "pos",
"nativeSrc": "1327:3:1",
"nodeType": "YulTypedName",
"src": "1327:3:1",
"type": ""
}
],
"src": "1259:126:1"
},
{
"body": {
"nativeSrc": "1497:132:1",
"nodeType": "YulBlock",
"src": "1497:132:1",
"statements": [
{
"nativeSrc": "1507:26:1",
"nodeType": "YulAssignment",
"src": "1507:26:1",
"value": {
"arguments": [
{
"name": "headStart",
"nativeSrc": "1519:9:1",
"nodeType": "YulIdentifier",
"src": "1519:9:1"
},
{
"kind": "number",
"nativeSrc": "1530:2:1",
"nodeType": "YulLiteral",
"src": "1530:2:1",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1515:3:1",
"nodeType": "YulIdentifier",
"src": "1515:3:1"
},
"nativeSrc": "1515:18:1",
"nodeType": "YulFunctionCall",
"src": "1515:18:1"
},
"variableNames": [
{
"name": "tail",
"nativeSrc": "1507:4:1",
"nodeType": "YulIdentifier",
"src": "1507:4:1"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nativeSrc": "1595:6:1",
"nodeType": "YulIdentifier",
"src": "1595:6:1"
},
{
"arguments": [
{
"name": "headStart",
"nativeSrc": "1608:9:1",
"nodeType": "YulIdentifier",
"src": "1608:9:1"
},
{
"kind": "number",
"nativeSrc": "1619:1:1",
"nodeType": "YulLiteral",
"src": "1619:1:1",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nativeSrc": "1604:3:1",
"nodeType": "YulIdentifier",
"src": "1604:3:1"
},
"nativeSrc": "1604:17:1",
"nodeType": "YulFunctionCall",
"src": "1604:17:1"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack_library",
"nativeSrc": "1543:51:1",
"nodeType": "YulIdentifier",
"src": "1543:51:1"
},
"nativeSrc": "1543:79:1",
"nodeType": "YulFunctionCall",
"src": "1543:79:1"
},
"nativeSrc": "1543:79:1",
"nodeType": "YulExpressionStatement",
"src": "1543:79:1"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed",
"nativeSrc": "1391:238:1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nativeSrc": "1469:9:1",
"nodeType": "YulTypedName",
"src": "1469:9:1",
"type": ""
},
{
"name": "value0",
"nativeSrc": "1481:6:1",
"nodeType": "YulTypedName",
"src": "1481:6:1",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nativeSrc": "1492:4:1",
"nodeType": "YulTypedName",
"src": "1492:4:1",
"type": ""
}
],
"src": "1391:238:1"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack_library(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_library_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack_library(value0, add(headStart, 0))\n\n }\n\n}\n",
"id": 1,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce88b14514610038575b5f5ffd5b610052600480360381019061004d91906100a8565b610068565b60405161005f9190610112565b60405180910390f35b5f5f9050919050565b5f5ffd5b5f819050919050565b61008781610075565b8114610091575f5ffd5b50565b5f813590506100a28161007e565b92915050565b5f602082840312156100bd576100bc610071565b5b5f6100ca84828501610094565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100fc826100d3565b9050919050565b61010c816100f2565b82525050565b5f6020820190506101255f830184610103565b9291505056fea2646970667358221220c125ee5b3c1e8e8e48c18f0288bf89ccb39e4faf31c67e64b6f67297f70f672264736f6c63430008220033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCE88B145 EQ PUSH2 0x38 JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0xA8 JUMP JUMPDEST PUSH2 0x68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x112 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH0 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x87 DUP2 PUSH2 0x75 JUMP JUMPDEST DUP2 EQ PUSH2 0x91 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xA2 DUP2 PUSH2 0x7E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBD JUMPI PUSH2 0xBC PUSH2 0x71 JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0xCA DUP5 DUP3 DUP6 ADD PUSH2 0x94 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0xFC DUP3 PUSH2 0xD3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x10C DUP2 PUSH2 0xF2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x125 PUSH0 DUP4 ADD DUP5 PUSH2 0x103 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC1 0x25 RETURNCONTRACT 0x5B EXTCODECOPY CLZ DUP15 DUP15 BASEFEE 0xC1 DUP16 MUL DUP9 0xBF DUP10 0xCC 0xB3 SWAP15 0x4F 0xAF BALANCE 0xC6 PUSH31 0x64B6F67297F70F672264736F6C634300082200330000000000000000000000 ",
"sourceMap": "71:126:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;99:96;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;152:7;186:1;171:17;;99:96;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:126::-;1062:7;1102:42;1095:5;1091:54;1080:65;;1025:126;;;:::o;1157:96::-;1194:7;1223:24;1241:5;1223:24;:::i;:::-;1212:35;;1157:96;;;:::o;1259:126::-;1354:24;1372:5;1354:24;:::i;:::-;1349:3;1342:37;1259:126;;:::o;1391:238::-;1492:4;1530:2;1519:9;1515:18;1507:26;;1543:79;1619:1;1608:9;1604:17;1595:6;1543:79;:::i;:::-;1391:238;;;;:::o"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "70600",
"executionCost": "146",
"totalCost": "70746"
},
"external": {
"getAccount(uint256)": "602"
}
},
"methodIdentifiers": {
"getAccount(uint256)": "ce88b145"
}
},
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "getAccount",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.34+commit.80d5c536"
},
"language": "Solidity",
"output": {
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "getAccount",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
".deps/remix-tests/remix_accounts.sol": "TestsAccounts"
},
"evmVersion": "osaka",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
".deps/remix-tests/remix_accounts.sol": {
"keccak256": "0x722e8fd271de98c2d980bda8e3d011551d9641355216b1029084b455c4c2a662",
"license": "GPL-3.0",
"urls": [
"bzz-raw://8e57585c7061065613c796706efdae0c79a416bde447ccbe4ffaf969aeb7423e",
"dweb:/ipfs/QmdQCAgvob9suV3UwSR2rRetyU9fafTtEi2sDv9oRmRSLo"
]
}
},
"version": 1
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
/**
* @title Storage
* @dev Store & retrieve value in a variable
* @custom:dev-run-script ./scripts/deploy_with_ethers.ts
*/
contract Storage {
uint256 number;
/**
* @dev Store value in variable
* @param num value to store
*/
function store(uint256 num) public {
number = num;
}
/**
* @dev Return value
* @return value of 'number'
*/
function retrieve() public view returns (uint256){
return number;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
import "hardhat/console.sol";
/**
* @title Owner
* @dev Set & change owner
*/
contract Owner {
address private owner;
// event for EVM logging
event OwnerSet(address indexed oldOwner, address indexed newOwner);
// modifier to check if caller is owner
modifier isOwner() {
// If the first argument of 'require' evaluates to 'false', execution terminates and all
// changes to the state and to Ether balances are reverted.
// This used to consume all gas in old EVM versions, but not anymore.
// It is often a good idea to use 'require' to check if functions are called correctly.
// As a second argument, you can also provide an explanation about what went wrong.
require(msg.sender == owner, "Caller is not owner");
_;
}
/**
* @dev Set contract deployer as owner
*/
constructor() {
console.log("Owner contract deployed by:", msg.sender);
owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
emit OwnerSet(address(0), owner);
}
/**
* @dev Change owner
* @param newOwner address of new owner
*/
function changeOwner(address newOwner) public isOwner {
require(newOwner != address(0), "New owner should not be the zero address");
emit OwnerSet(owner, newOwner);
owner = newOwner;
}
/**
* @dev Return owner address
* @return address of owner
*/
function getOwner() external view returns (address) {
return owner;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Ballot
* @dev Implements voting process along with vote delegation
*/
contract Ballot {
// This declares a new complex type which will
// be used for variables later.
// It will represent a single voter.
struct Voter {
uint weight; // weight is accumulated by delegation
bool voted; // if true, that person already voted
address delegate; // person delegated to
uint vote; // index of the voted proposal
}
// This is a type for a single proposal.
struct Proposal {
// If you can limit the length to a certain number of bytes,
// always use one of bytes1 to bytes32 because they are much cheaper
bytes32 name; // short name (up to 32 bytes)
uint voteCount; // number of accumulated votes
}
address public chairperson;
// This declares a state variable that
// stores a 'Voter' struct for each possible address.
mapping(address => Voter) public voters;
// A dynamically-sized array of 'Proposal' structs.
Proposal[] public proposals;
/**
* @dev Create a new ballot to choose one of 'proposalNames'.
* @param proposalNames names of proposals
*/
constructor(bytes32[] memory proposalNames) {
chairperson = msg.sender;
voters[chairperson].weight = 1;
// For each of the provided proposal names,
// create a new proposal object and add it
// to the end of the array.
for (uint i = 0; i < proposalNames.length; i++) {
// 'Proposal({...})' creates a temporary
// Proposal object and 'proposals.push(...)'
// appends it to the end of 'proposals'.
proposals.push(Proposal({
name: proposalNames[i],
voteCount: 0
}));
}
}
/**
* @dev Give 'voter' the right to vote on this ballot. May only be called by 'chairperson'.
* @param voter address of voter
*/
function giveRightToVote(address voter) external {
// If the first argument of `require` evaluates
// to 'false', execution terminates and all
// changes to the state and to Ether balances
// are reverted.
// This used to consume all gas in old EVM versions, but
// not anymore.
// It is often a good idea to use 'require' to check if
// functions are called correctly.
// As a second argument, you can also provide an
// explanation about what went wrong.
require(
msg.sender == chairperson,
"Only chairperson can give right to vote."
);
require(
!voters[voter].voted,
"The voter already voted."
);
require(voters[voter].weight == 0, "Voter already has the right to vote.");
voters[voter].weight = 1;
}
/**
* @dev Delegate your vote to the voter 'to'.
* @param to address to which vote is delegated
*/
function delegate(address to) external {
// assigns reference
Voter storage sender = voters[msg.sender];
require(sender.weight != 0, "You have no right to vote");
require(!sender.voted, "You already voted.");
require(to != msg.sender, "Self-delegation is disallowed.");
// Forward the delegation as long as
// 'to' also delegated.
// In general, such loops are very dangerous,
// because if they run too long, they might
// need more gas than is available in a block.
// In this case, the delegation will not be executed,
// but in other situations, such loops might
// cause a contract to get "stuck" completely.
while (voters[to].delegate != address(0)) {
to = voters[to].delegate;
// We found a loop in the delegation, not allowed.
require(to != msg.sender, "Found loop in delegation.");
}
Voter storage delegate_ = voters[to];
// Voters cannot delegate to accounts that cannot vote.
require(delegate_.weight >= 1);
// Since 'sender' is a reference, this
// modifies 'voters[msg.sender]'.
sender.voted = true;
sender.delegate = to;
if (delegate_.voted) {
// If the delegate already voted,
// directly add to the number of votes
proposals[delegate_.vote].voteCount += sender.weight;
} else {
// If the delegate did not vote yet,
// add to her weight.
delegate_.weight += sender.weight;
}
}
/**
* @dev Give your vote (including votes delegated to you) to proposal 'proposals[proposal].name'.
* @param proposal index of proposal in the proposals array
*/
function vote(uint proposal) external {
Voter storage sender = voters[msg.sender];
require(sender.weight != 0, "Has no right to vote");
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = proposal;
// If 'proposal' is out of the range of the array,
// this will throw automatically and revert all
// changes.
proposals[proposal].voteCount += sender.weight;
}
/**
* @dev Computes the winning proposal taking all previous votes into account.
* @return winningProposal_ index of winning proposal in the proposals array
*/
function winningProposal() public view
returns (uint winningProposal_)
{
uint winningVoteCount = 0;
for (uint p = 0; p < proposals.length; p++) {
if (proposals[p].voteCount > winningVoteCount) {
winningVoteCount = proposals[p].voteCount;
winningProposal_ = p;
}
}
}
/**
* @dev Calls winningProposal() function to get the index of the winner contained in the proposals array and then
* @return winnerName_ the name of the winner
*/
function winnerName() external view
returns (bytes32 winnerName_)
{
winnerName_ = proposals[winningProposal()].name;
}
}
{
"mcp": {
"version": "1.0.0",
"security": {
"allowedFileTypes": [
"sol",
"js",
"ts",
"json",
"md",
"txt",
"toml",
"yaml",
"yml",
"sql",
"jsx",
"tsx",
"abi",
"css",
"html",
"go",
"py",
"java",
"rb",
"php",
"rs",
"cpp",
"c",
"h",
"hpp"
],
"blockedPaths": [
".env",
".git",
"node_modules",
".ssh",
"private",
"secret"
],
"allowedPaths": [],
"maxExecutionTime": 30000,
"excludeTools": [],
"permissions": {
"requirePermissions": true,
"defaultPermissions": [
"*"
]
},
"rateLimit": {
"enabled": true,
"requestsPerMinute": 100,
"burstAllowance": 4
},
"fileWritePermissions": {
"mode": "ask",
"allowedFiles": []
}
},
"validation": {
"validateSchemas": true,
"validateTypes": true,
"validateRanges": true,
"validateFormats": true,
"strictMode": false,
"toolValidation": {},
"fileOperations": {
"maxFileSize": 10485760,
"allowedExtensions": [
"sol",
"js",
"ts",
"json",
"md",
"txt",
"toml",
"yaml",
"yml",
"sql",
"jsx",
"tsx",
"abi",
"css",
"html",
"go",
"py",
"java",
"rb",
"php",
"rs",
"cpp",
"c",
"h",
"hpp"
],
"blockedPatterns": [
"**/node_modules/**",
"**/.git/**"
]
},
"networkOperations": {
"allowedNetworks": [
"sepolia",
"goerli",
"localhost",
"vm",
"mainnet"
],
"warnOnMainnet": true,
"maxGasLimit": 15000000
}
},
"resources": {
"enableCache": true,
"cacheTTL": 300000,
"excludeResources": [],
"allowResources": [],
"accessPatterns": {
"allowedPatterns": [],
"blockedPatterns": []
}
},
"features": {
"compilation": true,
"deployment": true,
"debugging": true,
"analysis": true,
"testing": true,
"git": true
},
"logging": {
"level": "info",
"console": false
}
},
"project": "remixDefault",
"version": "2.5.3",
"IDE": "remix.ethereum.org"
}
// This script can be used to deploy the "Storage" contract using ethers.js library.
// Please make sure to compile "./contracts/1_Storage.sol" file before running this script.
// And use Right click -> "Run" from context menu of the file to run the script. Shortcut: Ctrl+Shift+S
import { deploy } from './ethers-lib'
(async () => {
try {
const result = await deploy('Storage', [])
console.log(`address: ${result.address}`)
} catch (e) {
console.log(e.message)
}
})()
import { ethers } from 'ethers'
/**
* Deploy the given contract
* @param {string} contractName name of the contract to deploy
* @param {Array<any>} args list of constructor' parameters
* @param {Number} accountIndex account index from the exposed account
* @return {Contract} deployed contract
*/
export const deploy = async (contractName: string, args: Array<any>, accountIndex?: number): Promise<ethers.Contract> => {
console.log(`deploying ${contractName}`)
// Note that the script needs the ABI which is generated from the compilation artifact.
// Make sure contract is compiled and artifacts are generated
const artifactsPath = `browser/artifacts/${contractName}.json` // Change this for different path
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath))
// 'web3Provider' is a remix global variable object
const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex)
const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer)
const contract = await factory.deploy(...args)
// The contract is NOT deployed yet; we must wait until it is mined
await contract.deployed()
return contract
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
import "remix_tests.sol"; // this import is automatically injected by Remix.
import "hardhat/console.sol";
import "../contracts/3_Ballot.sol";
contract BallotTest {
bytes32[] proposalNames;
Ballot ballotToTest;
function beforeAll () public {
proposalNames.push(bytes32("candidate1"));
ballotToTest = new Ballot(proposalNames);
}
function checkWinningProposal () public {
console.log("Running checkWinningProposal");
ballotToTest.vote(0);
Assert.equal(ballotToTest.winningProposal(), uint(0), "proposal at index 0 should be the winning proposal");
Assert.equal(ballotToTest.winnerName(), bytes32("candidate1"), "candidate1 should be the winner name");
}
function checkWinninProposalWithReturnValue () public view returns (bool) {
return ballotToTest.winningProposal() == 0;
}
}
/* eslint-disable no-undef */
// Right click on the script name and hit "Run" to execute
const { expect } = require("chai");
const { ethers } = require("hardhat");
describe("Storage", function () {
it("test initial value", async function () {
const Storage = await ethers.getContractFactory("Storage");
const storage = await Storage.deploy();
await storage.deployed();
console.log("storage deployed at:" + storage.address);
expect((await storage.retrieve()).toNumber()).to.equal(0);
});
it("test updating and retrieving updated value", async function () {
const Storage = await ethers.getContractFactory("Storage");
const storage = await Storage.deploy();
await storage.deployed();
const storage2 = await ethers.getContractAt("Storage", storage.address);
const setValue = await storage2.store(56);
await setValue.wait();
expect((await storage2.retrieve()).toNumber()).to.equal(56);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment