commit 7982dbae97bbe9604503bac8573e8c9fa4b518e2
parent 4e6e5300f7e5818ffdb3099bf20fc192d196f58b
Author: lash <dev@holbrook.no>
Date: Sun, 12 Feb 2023 08:31:08 +0000
Remove minter alias in contract
Diffstat:
6 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.bin
@@ -1 +1 @@
-6101006040523480156200001257600080fd5b506040516200618438038062006184833981810160405281019062000038919062000863565b6801000000000000000083600f0b126200005157600080fd5b6200005b62000578565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660069081620000ad919062000b84565b508560079081620000bf919062000b84565b508460ff16608081815250504260038190555060035460a08181525050603c83620000eb919062000c9a565b60c08181525050620001126001620002a96401000000000262002e49176401000000009004565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506200016c84620002d06401000000000262002e6f176401000000009004565b600f0b60e081600f0b81525050620001a86000600260009054906101000a9004600f0b6000600162000324640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000ce5565b6000677fffffffffffffff821115620002c157600080fd5b6040829060020a029050919050565b60008082600f0b13620002e257600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af6200030f84620003a8640100000000026401000000009004565b600f0b02908060020a82049150509050919050565b6200032e62000578565b6200033862000578565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b60008082600f0b13620003ba57600080fd5b60008083600f0b9050680100000000000000008112620003f6576040819060008212600003808260020a82851804189250505090506040820191505b640100000000811262000425576020819060008212600003808260020a82851804189250505090506020820191505b62010000811262000452576010819060008212600003808260020a82851804189250505090506010820191505b61010081126200047e576008819060008212600003808260020a82851804189250505090506008820191505b60108112620004a9576004819060008212600003808260020a82851804189250505090506004820191505b60048112620004d4576002819060008212600003808260020a82851804189250505090506002820191505b60028112620004e4576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b60008113156200056b578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a828518041892505050905062000511565b5081945050505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061d82620005d2565b810181811067ffffffffffffffff821117156200063f576200063e620005e3565b5b80604052505050565b600062000654620005b4565b905062000662828262000612565b919050565b600067ffffffffffffffff821115620006855762000684620005e3565b5b6200069082620005d2565b9050602081019050919050565b60005b83811015620006bd578082015181840152602081019050620006a0565b60008484015250505050565b6000620006e0620006da8462000667565b62000648565b905082815260208101848484011115620006ff57620006fe620005cd565b5b6200070c8482856200069d565b509392505050565b600082601f8301126200072c576200072b620005c8565b5b81516200073e848260208601620006c9565b91505092915050565b600060ff82169050919050565b6200075f8162000747565b81146200076b57600080fd5b50565b6000815190506200077f8162000754565b92915050565b600081600f0b9050919050565b6200079d8162000785565b8114620007a957600080fd5b50565b600081519050620007bd8162000792565b92915050565b6000819050919050565b620007d881620007c3565b8114620007e457600080fd5b50565b600081519050620007f881620007cd565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082b82620007fe565b9050919050565b6200083d816200081e565b81146200084957600080fd5b50565b6000815190506200085d8162000832565b92915050565b60008060008060008060c08789031215620008835762000882620005be565b5b600087015167ffffffffffffffff811115620008a457620008a3620005c3565b5b620008b289828a0162000714565b965050602087015167ffffffffffffffff811115620008d657620008d5620005c3565b5b620008e489828a0162000714565b9550506040620008f789828a016200076e565b94505060606200090a89828a01620007ac565b93505060806200091d89828a01620007e7565b92505060a06200093089828a016200084c565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099057607f821691505b602082108103620009a657620009a562000948565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830262000a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009d1565b62000a1f8683620009d1565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a6262000a5c62000a5684620007c3565b62000a37565b620007c3565b9050919050565b6000819050919050565b62000a7e8362000a41565b62000a9662000a8d8262000a69565b848454620009e1565b825550505050565b600090565b62000aad62000a9e565b62000aba81848462000a73565b505050565b5b8181101562000ae25762000ad660008262000aa3565b60018101905062000ac0565b5050565b601f82111562000b315762000afb81620009ac565b62000b0684620009c1565b8101602085101562000b16578190505b62000b2e62000b2585620009c1565b83018262000abf565b50505b505050565b60008160020a8304905092915050565b600062000b596000198460080262000b36565b1980831691505092915050565b600062000b74838362000b46565b9150826002028217905092915050565b62000b8f826200093d565b67ffffffffffffffff81111562000bab5762000baa620005e3565b5b62000bb7825462000977565b62000bc482828562000ae6565b600060209050601f83116001811462000bfc576000841562000be7578287015190505b62000bf3858262000b66565b86555062000c63565b601f19841662000c0c86620009ac565b60005b8281101562000c365784890151825560018201915060208501945060208101905062000c0f565b8683101562000c56578489015162000c52601f89168262000b46565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca782620007c3565b915062000cb483620007c3565b925082820262000cc481620007c3565b9150828204841483151762000cde5762000cdd62000c6b565b5b5092915050565b60805160a05160c05160e05161541f62000d65600039600081816111d10152818161160f015281816123df0152612a5d015260008181611ba2015281816123a2015281816129b501528181612bf90152612d1f015260008181611bce01528181612c2501528181612d400152612d850152600061166d015261541f6000f3fe608060405234801561001057600080fd5b50600436106103b6576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e11610206578063a457c2d71161012c578063d7a52fa9116100ca578063e69571af11610099578063e69571af14610c1f578063e809529514610c4f578063eda4e6d614610c6d578063f2fde38b14610c8b576103b6565b8063d7a52fa914610b85578063d89135cd14610ba1578063da2824a814610bbf578063e54063a614610bef576103b6565b8063b470aade11610106578063b470aade14610afb578063c0ab707714610b19578063d340ef8a14610b49578063d5abeb0114610b67576103b6565b8063a457c2d714610a7d578063a9059cbb14610aad578063b1cb0db314610add576103b6565b806379ba5097116101a45780638f0b2d5d116101735780638f0b2d5d146109f55780638f1df6bc14610a1157806395d89b4114610a2f578063983b2d5614610a4d576103b6565b806379ba50971461096b57806384dde4af1461098957806386fe212d146109a75780638da5cb5b146109d7576103b6565b8063731f237c116101e0578063731f237c146108e157806373f42561146108ff5780637445e33a1461091d57806374bedb951461094d576103b6565b80636a2d094e146108655780636f8b44b01461089557806370a08231146108b1576103b6565b80633092afd5116102eb578063449a52f81161028957806358b2833b1161025857806358b2833b146107c95780635ae06f7e146107e75780635f408c04146108175780636787a9be14610835576103b6565b8063449a52f81461070957806347a50517146107395780634abfbba21461076957806351b4541c14610799576103b6565b806331a5995d116102c557806331a5995d1461066d578063395093511461068b57806340452d91146106bb57806342966c68146106ed576103b6565b80633092afd5146105ef578063313334871461061f578063313ce5671461064f576103b6565b80631989c6a81161035857806323a859441161033257806323a859441461052f57806323b872dd1461055f5780632a7aec091461058f5780632c1758c1146105bf576103b6565b80631989c6a8146104c3578063213d1e1e146104e1578063229ba19714610511576103b6565b806309f28f3c1161039457806309f28f3c1461043957806311c566151461045757806318160ddd1461048757806318cbbcfc146104a5576103b6565b806301ffc9a7146103bb57806306fdde03146103eb578063095ea7b314610409575b600080fd5b6103d560048036038101906103d091906147d3565b610cbb565b6040516103e2919061481b565b60405180910390f35b6103f3610e61565b60405161040091906148c6565b60405180910390f35b610423600480360381019061041e919061497c565b610eef565b604051610430919061481b565b60405180910390f35b61044161112b565b60405161044e91906149d8565b60405180910390f35b610471600480360381019061046c9190614a1f565b61113e565b60405161047e9190614a6e565b60405180910390f35b61048f61118e565b60405161049c9190614a6e565b60405180910390f35b6104ad6111a5565b6040516104ba9190614a6e565b60405180910390f35b6104cb6111aa565b6040516104d89190614a6e565b60405180910390f35b6104fb60048036038101906104f69190614c2a565b6111b6565b6040516105089190614a6e565b60405180910390f35b6105196111cf565b60405161052691906149d8565b60405180910390f35b61054960048036038101906105449190614c2a565b6111f3565b604051610556919061481b565b60405180910390f35b61057960048036038101906105749190614c57565b61125b565b604051610586919061481b565b60405180910390f35b6105a960048036038101906105a49190614c2a565b611479565b6040516105b691906149d8565b60405180910390f35b6105d960048036038101906105d49190614caa565b6114b1565b6040516105e6919061481b565b60405180910390f35b61060960048036038101906106049190614cd7565b6114e4565b604051610616919061481b565b60405180910390f35b61063960048036038101906106349190614d04565b6115ee565b6040516106469190614a6e565b60405180910390f35b61065761166b565b6040516106649190614a6e565b60405180910390f35b61067561168f565b6040516106829190614a6e565b60405180910390f35b6106a560048036038101906106a0919061497c565b611695565b6040516106b2919061481b565b60405180910390f35b6106d560048036038101906106d09190614caa565b61182b565b6040516106e493929190614d71565b60405180910390f35b61070760048036038101906107029190614caa565b61189a565b005b610723600480360381019061071e919061497c565b6119d6565b604051610730919061481b565b60405180910390f35b610753600480360381019061074e9190614cd7565b611b55565b6040516107609190614a6e565b60405180910390f35b610783600480360381019061077e9190614caa565b611b9e565b6040516107909190614a6e565b60405180910390f35b6107b360048036038101906107ae9190614caa565b611bfe565b6040516107c09190614a6e565b60405180910390f35b6107d1611c1f565b6040516107de9190614a6e565b60405180910390f35b61080160048036038101906107fc9190614cd7565b611c25565b60405161080e919061481b565b60405180910390f35b61081f611c37565b60405161082c9190614dc4565b60405180910390f35b61084f600480360381019061084a9190614caa565b611d04565b60405161085c9190614a6e565b60405180910390f35b61087f600480360381019061087a9190614caa565b611d45565b60405161088c9190614a6e565b60405180910390f35b6108af60048036038101906108aa9190614caa565b611d66565b005b6108cb60048036038101906108c69190614cd7565b611e2e565b6040516108d89190614a6e565b60405180910390f35b6108e9611e98565b6040516108f69190614a6e565b60405180910390f35b610907611ea9565b6040516109149190614a6e565b60405180910390f35b61093760048036038101906109329190614c2a565b611eaf565b6040516109449190614a6e565b60405180910390f35b610955611edd565b6040516109629190614a6e565b60405180910390f35b610973611ee3565b604051610980919061481b565b60405180910390f35b61099161208a565b60405161099e9190614dee565b60405180910390f35b6109c160048036038101906109bc9190614caa565b6120b0565b6040516109ce9190614a6e565b60405180910390f35b6109df61218f565b6040516109ec9190614dee565b60405180910390f35b610a0f6004803603810190610a0a9190614cd7565b6121b5565b005b610a1961226a565b604051610a26919061481b565b60405180910390f35b610a3761252b565b604051610a4491906148c6565b60405180910390f35b610a676004803603810190610a629190614cd7565b6125b9565b604051610a74919061481b565b60405180910390f35b610a976004803603810190610a92919061497c565b61268d565b604051610aa4919061481b565b60405180910390f35b610ac76004803603810190610ac2919061497c565b6128ac565b604051610ad4919061481b565b60405180910390f35b610ae56129ad565b604051610af29190614a6e565b60405180910390f35b610b036129b3565b604051610b109190614a6e565b60405180910390f35b610b336004803603810190610b2e9190614caa565b6129d7565b604051610b409190614a6e565b60405180910390f35b610b51612b5e565b604051610b5e9190614a6e565b60405180910390f35b610b6f612b64565b604051610b7c9190614a6e565b60405180910390f35b610b9f6004803603810190610b9a9190614caa565b612b6a565b005b610ba9612c69565b604051610bb69190614a6e565b60405180910390f35b610bd96004803603810190610bd49190614cd7565b612c73565b604051610be6919061481b565b60405180910390f35b610c096004803603810190610c049190614c2a565b612c85565b604051610c169190614a6e565b60405180910390f35b610c396004803603810190610c349190614e09565b612c99565b604051610c469190614edf565b60405180910390f35b610c57612d19565b604051610c649190614f25565b60405180910390f35b610c75612d83565b604051610c829190614a6e565b60405180910390f35b610ca56004803603810190610ca09190614cd7565b612da7565b604051610cb2919061481b565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d0f5760019050610e5c565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d615760019050610e5c565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610db35760019050610e5c565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610e055760019050610e5c565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610e575760019050610e5c565b600090505b919050565b60068054610e6e90614f6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a90614f6f565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b505050505081565b6000806000610efc611c37565b905060028160ff1603610f1457600092505050611125565b60008160ff161115610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290614fec565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110245760008414611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90615058565b60405180910390fd5b5b61102c61226a565b5061103684611d04565b915081600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516111169190614a6e565b60405180910390a36001925050505b92915050565b600260009054906101000a9004600f0b81565b60008061116561114d85612e49565b61116061115a6001612e49565b86612eb1565b612f18565b905061117081612f97565b67ffffffffffffffff168461118591906150a7565b91505092915050565b6000600b546008546111a091906150a7565b905090565b600f81565b60008080549050905090565b6000816020015168ffffffffffffffffff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080826000015163ffffffff1611156112105760009050611256565b6000826020015168ffffffffffffffffff1611156112315760009050611256565b6000826040015167ffffffffffffffff1611156112515760009050611256565b600190505b919050565b600080600080611269611c37565b905060028160ff16036112825760009350505050611472565b60008160ff1611156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090614fec565b60405180910390fd5b6112d161226a565b506112db85611d04565b925082600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561136657600080fd5b82600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113f291906150a7565b92505081905550611404878785612fcc565b91508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516114639190614a6e565b60405180910390a38193505050505b9392505050565b60008067ffffffffffffffff836040015160070b169050600081600f0b036114a8576114a56001612e49565b90505b80915050919050565b6000600f82106114c057600080fd5b600082036114d557600f6012541490506114df565b8160125483161490505b919050565b60006114f3600160ff166114b1565b156114fd57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061158457503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61158d57600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000806000806115fd86612e49565b925061160885612e49565b91506116347f000000000000000000000000000000000000000000000000000000000000000083612f18565b905061163f81612ff1565b905061164b8382612f18565b905061165681612f97565b67ffffffffffffffff16935050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b6000806116a061226a565b506116aa83611d04565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461173891906150db565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516118189190614a6e565b60405180910390a3600191505092915050565b6000818154811061183b57600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a900467ffffffffffffffff16905083565b60006118a4611c37565b60ff16146118b157600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661190757600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561195357600080fd5b600061195e82611d04565b905061196a338261307e565b5081600b600082825461197d91906150db565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516119ca9190614a6e565b60405180910390a25050565b60008060006119e3611c37565b60ff16146119f057600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a739061515b565b60405180910390fd5b611a8461226a565b5060006011541115611aad5760115483600854611aa191906150db565b1115611aac57600080fd5b5b8260086000828254611abf91906150db565b92505081905550611acf83611d04565b9050611adb8482613185565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051611b399190614a6e565b60405180910390a3611b49613249565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000082611bcc919061517b565b7f0000000000000000000000000000000000000000000000000000000000000000611bf791906150db565b9050919050565b6000603c8242611c0e91906150a7565b611c1891906151ec565b9050919050565b60035481565b6000611c30826114e4565b9050919050565b6000601060009054906101000a900460ff1615611c575760019050611d01565b6000600f5403611c6a5760009050611d01565b600f544210611cfc57611c97603c600354611c8591906151ec565b600f54611c9291906150a7565b6129d7565b506001601060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe942604051611ce29190614a6e565b60405180910390a1611cf261226a565b5060029050611d01565b600090505b90565b600080611d28611d1384612e49565b600260009054906101000a9004600f0b61340d565b9050611d3381612f97565b67ffffffffffffffff16915050919050565b6000603c8242611d5591906150a7565b611d5f91906151ec565b9050919050565b611d73600860ff166114b1565b15611d7d57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd757600080fd5b611ddf61118e565b8111611dea57600080fd5b6011547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe682604051611e1c9190614a6e565b60405180910390a28060118190555050565b6000806000806000611e47611e4287611b55565b612e49565b9350611e54600354611bfe565b9150611e6f84600260009054906101000a9004600f0b612f18565b9250611e8d611e7d84612f97565b67ffffffffffffffff16836115ee565b945050505050919050565b6000611ea460006129d7565b905090565b600b5481565b6000806000611ebd846111b6565b9150611ec884611479565b9050611ed4828261113e565b92505050919050565b600a5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4057600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601082106120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec90615269565b60405180910390fd5b600060125483161461213c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612133906152d5565b60405180910390fd5b816012600082825417925050819055507fdd5e7cad9599c1dcaa8d5adcd88f157fc5fada62511c0d3edb1bfd3b778acc4160125460405161217d9190614a6e565b60405180910390a16012549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6121c2600260ff166114b1565b156121cc57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461222657600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612274614730565b61227c614730565b612284614730565b6000806000806000612294611e98565b5061229d613499565b97506122a8886111f3565b156122be57600098505050505050505050612528565b6000600954815481106122d4576122d36152f5565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050955061238188612c85565b945060018561239091906150db565b905061239b86611479565b9350603c857f00000000000000000000000000000000000000000000000000000000000000006123cb919061517b565b6123d591906151ec565b915061241161240c7f000000000000000000000000000000000000000000000000000000000000000061240785612e49565b612f18565b612ff1565b925061242760008461242161118e565b84612c99565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050506124e38761362f565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d675816040516125139190614a6e565b60405180910390a16001985050505050505050505b90565b6007805461253890614f6f565b80601f016020809104026020016040519081016040528092919081815260200182805461256490614f6f565b80156125b15780601f10612586576101008083540402835291602001916125b1565b820191906000526020600020905b81548152906001019060200180831161259457829003601f168201915b505050505081565b60006125c8600160ff166114b1565b156125d257600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461262c57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60008061269983611d04565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561272457600080fd5b61272c61226a565b5080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127b991906150a7565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516128999190614a6e565b60405180910390a3600191505092915050565b6000806000806128ba611c37565b905060028160ff16036128d357600093505050506129a7565b60008160ff16111561291a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291190614fec565b60405180910390fd5b61292261226a565b5061292c85611d04565b9250612939338785612fcc565b91508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516129989190614a6e565b60405180910390a38193505050505b92915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000601060009054906101000a900460ff1615612a01576000945050505050612b59565b612a0c600354611bfe565b925060008303612a23576000945050505050612b59565b600260009054906101000a9004600f0b9050600086118015612a4457508286105b15612a4d578592505b612a5683612e49565b9150612a827f000000000000000000000000000000000000000000000000000000000000000083612f18565b9350612a8d84612ff1565b9350612aa8600260009054906101000a9004600f0b85612f18565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550603c83612af0919061517b565b600354612afd91906150db565b60038190555080600f0b836003547f1c9c74563c32efd114cb36fb5e432d9386c8254d08456614804a33a3088ab736600260009054906101000a9004600f0b604051612b4991906149d8565b60405180910390a4829450505050505b919050565b60095481565b60115481565b6000612b79600460ff166114b1565b15612b8357600080fd5b601060009054906101000a900460ff1615612b9d57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612bf757600080fd5b7f000000000000000000000000000000000000000000000000000000000000000082612c23919061517b565b7f0000000000000000000000000000000000000000000000000000000000000000612c4e91906150db565b9050600f548111612c5e57600080fd5b80600f819055505050565b6000600b54905090565b6000612c7e826125b9565b9050919050565b6000816000015163ffffffff169050919050565b612ca1614730565b612ca9614730565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042612d6a91906150a7565b612d7491906151ec565b612d7e91906150db565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e0357600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000677fffffffffffffff821115612e6057600080fd5b6040829060020a029050919050565b60008082600f0b13612e8057600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af612e9c8461374e565b600f0b02908060020a82049150509050919050565b60008082600f0b84600f0b0390507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612f0557506f7fffffffffffffffffffffffffffffff600f0b8113155b612f0e57600080fd5b8091505092915050565b600080604083600f0b85600f0b029060008212600003808260020a82851804189250505090507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612f8457506f7fffffffffffffffffffffffffffffff600f0b8113155b612f8d57600080fd5b8091505092915050565b60008082600f0b1215612fa957600080fd5b604082600f0b9060008212600003808260020a8285180418925050509050919050565b600080612fd9858461307e565b50612fe48484613185565b5060019150509392505050565b60006840000000000000000082600f0b1261300b57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b121561303f5760009050613079565b6130766080700171547652b82fe1777d0ffda0d23a7d1284600f0b029060008212600003808260020a828518041892505050613914565b90505b919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036130da576000935050505061317f565b6130e386611b55565b925084831015613128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311f90615370565b60405180910390fd5b848361313491906150a7565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600085036131e15760009350505050613243565b6131ea86611b55565b925084836131f891906150db565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b6000613253614730565b600061325d61118e565b90506000600160008054905061327391906150a7565b81548110613284576132836152f5565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff1681525050816000600160008054905061335f91906150a7565b815481106133705761336f6152f5565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060019250505090565b60008082600f0b0361341e57600080fd5b600082600f0b604085600f0b9060020a028161343d5761343c6151bd565b5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b811215801561348657506f7fffffffffffffffffffffffffffffff600f0b8113155b61348f57600080fd5b8091505092915050565b6134a1614730565b6134a9614730565b6134b1614730565b600080600954815481106134c8576134c76152f5565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa1580156135d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f791906153bc565b6fffffffffffffffffffffffffffffffff16905061361483612c85565b81116136255781935050505061362c565b8293505050505b90565b600080600061363d84611eaf565b61364561118e565b61364f91906150a7565b9150600a5461365d83611d04565b61366791906150a7565b9050613695600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613185565b50836000015163ffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d3846040516137099190614a6e565b60405180910390a360016009600082825461372491906150db565b9250508190555080600a600082825461373d91906150db565b925050819055508192505050919050565b60008082600f0b1361375f57600080fd5b60008083600f0b905068010000000000000000811261379a576040819060008212600003808260020a82851804189250505090506040820191505b64010000000081126137c8576020819060008212600003808260020a82851804189250505090506020820191505b6201000081126137f4576010819060008212600003808260020a82851804189250505090506010820191505b610100811261381f576008819060008212600003808260020a82851804189250505090506008820191505b60108112613849576004819060008212600003808260020a82851804189250505090506004820191505b60048112613873576002819060008212600003808260020a82851804189250505090506002820191505b60028112613882576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b6000811315613907578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a82851804189250505090506138af565b5081945050505050919050565b60006840000000000000000082600f0b1261392e57600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215613962576000905061472b565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b13156139b057608070016a09e667f3bcc908b2fb1366ea957d3e8202908060020a820491505090505b60006740000000000000008416600f0b13156139e95760807001306fe0a31b7152de8d5a46305c85edec8202908060020a820491505090505b60006720000000000000008416600f0b1315613a225760807001172b83c7d517adcdf7c8c50eb14a791f8202908060020a820491505090505b60006710000000000000008416600f0b1315613a5b57608070010b5586cf9890f6298b92b71842a983638202908060020a820491505090505b60006708000000000000008416600f0b1315613a945760807001059b0d31585743ae7c548eb68ca417fd8202908060020a820491505090505b60006704000000000000008416600f0b1315613acd576080700102c9a3e778060ee6f7caca4f7a29bde88202908060020a820491505090505b60006702000000000000008416600f0b1315613b0657608070010163da9fb33356d84a66ae336dcdfa3f8202908060020a820491505090505b60006701000000000000008416600f0b1315613b3f576080700100b1afa5abcbed6129ab13ec11dc95438202908060020a820491505090505b600066800000000000008416600f0b1315613b7757608070010058c86da1c09ea1ff19d294cf2f679b8202908060020a820491505090505b600066400000000000008416600f0b1315613baf5760807001002c605e2e8cec506d21bfc89a23a00f8202908060020a820491505090505b600066200000000000008416600f0b1315613be7576080700100162f3904051fa128bca9c55c31e5df8202908060020a820491505090505b600066100000000000008416600f0b1315613c1f5760807001000b175effdc76ba38e31671ca9397258202908060020a820491505090505b600066080000000000008416600f0b1315613c57576080700100058ba01fb9f96d6cacd4b180917c3d8202908060020a820491505090505b600066040000000000008416600f0b1315613c8f57608070010002c5cc37da9491d0985c348c68e7b38202908060020a820491505090505b600066020000000000008416600f0b1315613cc75760807001000162e525ee054754457d59952920268202908060020a820491505090505b600066010000000000008416600f0b1315613cff57608070010000b17255775c040618bf4a4ade83fc8202908060020a820491505090505b6000658000000000008416600f0b1315613d365760807001000058b91b5bc9ae2eed81e9b7d4cfab8202908060020a820491505090505b6000654000000000008416600f0b1315613d6d576080700100002c5c89d5ec6ca4d7c8acc017b7c98202908060020a820491505090505b6000652000000000008416600f0b1315613da457608070010000162e43f4f831060e02d839a9d16d8202908060020a820491505090505b6000651000000000008416600f0b1315613ddb576080700100000b1721bcfc99d9f890ea069117638202908060020a820491505090505b6000650800000000008416600f0b1315613e1257608070010000058b90cf1e6d97f9ca14dbcc16288202908060020a820491505090505b6000650400000000008416600f0b1315613e495760807001000002c5c863b73f016468f6bac5ca2b8202908060020a820491505090505b6000650200000000008416600f0b1315613e80576080700100000162e430e5a18f6119e3c02282a58202908060020a820491505090505b6000650100000000008416600f0b1315613eb75760807001000000b1721835514b86e6d96efd1bfe8202908060020a820491505090505b60006480000000008416600f0b1315613eed576080700100000058b90c0b48c6be5df846c5b2ef8202908060020a820491505090505b60006440000000008416600f0b1315613f2357608070010000002c5c8601cc6b9e94213c72737a8202908060020a820491505090505b60006420000000008416600f0b1315613f595760807001000000162e42fff037df38aa2b219f068202908060020a820491505090505b60006410000000008416600f0b1315613f8f57608070010000000b17217fba9c739aa5819f44f98202908060020a820491505090505b60006408000000008416600f0b1315613fc55760807001000000058b90bfcdee5acd3c1cedc8238202908060020a820491505090505b60006404000000008416600f0b1315613ffb576080700100000002c5c85fe31f35a6a30da1be508202908060020a820491505090505b60006402000000008416600f0b131561403157608070010000000162e42ff0999ce3541b9fffcf8202908060020a820491505090505b60006401000000008416600f0b1315614067576080700100000000b17217f80f4ef5aadda455548202908060020a820491505090505b600063800000008416600f0b131561409c57608070010000000058b90bfbf8479bd5a81b51ad8202908060020a820491505090505b600063400000008416600f0b13156140d15760807001000000002c5c85fdf84bd62ae30a74cc8202908060020a820491505090505b600063200000008416600f0b1315614106576080700100000000162e42fefb2fed257559bdaa8202908060020a820491505090505b600063100000008416600f0b131561413b5760807001000000000b17217f7d5a7716bba4a9ae8202908060020a820491505090505b600063080000008416600f0b1315614170576080700100000000058b90bfbe9ddbac5e109cce8202908060020a820491505090505b600063040000008416600f0b13156141a557608070010000000002c5c85fdf4b15de6f17eb0d8202908060020a820491505090505b600063020000008416600f0b13156141da5760807001000000000162e42fefa494f1478fde058202908060020a820491505090505b600063010000008416600f0b131561420f57608070010000000000b17217f7d20cf927c8e94c8202908060020a820491505090505b6000628000008416600f0b13156142435760807001000000000058b90bfbe8f71cb4e4b33d8202908060020a820491505090505b6000624000008416600f0b1315614277576080700100000000002c5c85fdf477b662b269458202908060020a820491505090505b6000622000008416600f0b13156142ab57608070010000000000162e42fefa3ae53369388c8202908060020a820491505090505b6000621000008416600f0b13156142df576080700100000000000b17217f7d1d351a389d408202908060020a820491505090505b6000620800008416600f0b131561431357608070010000000000058b90bfbe8e8b2d3d4ede8202908060020a820491505090505b6000620400008416600f0b13156143475760807001000000000002c5c85fdf4741bea6e77e8202908060020a820491505090505b6000620200008416600f0b131561437b576080700100000000000162e42fefa39fe95583c28202908060020a820491505090505b6000620100008416600f0b13156143af5760807001000000000000b17217f7d1cfb72b45e18202908060020a820491505090505b60006180008416600f0b13156143e2576080700100000000000058b90bfbe8e7cc35c3f08202908060020a820491505090505b60006140008416600f0b131561441557608070010000000000002c5c85fdf473e242ea388202908060020a820491505090505b60006120008416600f0b13156144485760807001000000000000162e42fefa39f02b772c8202908060020a820491505090505b60006110008416600f0b131561447b57608070010000000000000b17217f7d1cf7d83c1a8202908060020a820491505090505b60006108008416600f0b13156144ae5760807001000000000000058b90bfbe8e7bdcbe2e8202908060020a820491505090505b60006104008416600f0b13156144e1576080700100000000000002c5c85fdf473dea871f8202908060020a820491505090505b60006102008416600f0b131561451457608070010000000000000162e42fefa39ef44d918202908060020a820491505090505b60006101008416600f0b1315614547576080700100000000000000b17217f7d1cf79e9498202908060020a820491505090505b600060808416600f0b131561457957608070010000000000000058b90bfbe8e7bce5448202908060020a820491505090505b600060408416600f0b13156145ab5760807001000000000000002c5c85fdf473de6eca8202908060020a820491505090505b600060208416600f0b13156145dd576080700100000000000000162e42fefa39ef366f8202908060020a820491505090505b600060108416600f0b131561460f5760807001000000000000000b17217f7d1cf79afa8202908060020a820491505090505b600060088416600f0b1315614641576080700100000000000000058b90bfbe8e7bcd6d8202908060020a820491505090505b600060048416600f0b131561467357608070010000000000000002c5c85fdf473de6b28202908060020a820491505090505b600060028416600f0b13156146a55760807001000000000000000162e42fefa39ef3588202908060020a820491505090505b600060018416600f0b13156146d757608070010000000000000000b17217f7d1cf79ab8202908060020a820491505090505b604083600f0b9060008212600003808260020a828518041892505050603f03600f0b81908060020a820491505090506f7fffffffffffffffffffffffffffffff600f0b81111561472657600080fd5b809150505b919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6147b08161477b565b81146147bb57600080fd5b50565b6000813590506147cd816147a7565b92915050565b6000602082840312156147e9576147e8614776565b5b60006147f7848285016147be565b91505092915050565b60008115159050919050565b61481581614800565b82525050565b6000602082019050614830600083018461480c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614870578082015181840152602081019050614855565b60008484015250505050565b6000601f19601f8301169050919050565b600061489882614836565b6148a28185614841565b93506148b2818560208601614852565b6148bb8161487c565b840191505092915050565b600060208201905081810360008301526148e0818461488d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614913826148e8565b9050919050565b61492381614908565b811461492e57600080fd5b50565b6000813590506149408161491a565b92915050565b6000819050919050565b61495981614946565b811461496457600080fd5b50565b60008135905061497681614950565b92915050565b6000806040838503121561499357614992614776565b5b60006149a185828601614931565b92505060206149b285828601614967565b9150509250929050565b600081600f0b9050919050565b6149d2816149bc565b82525050565b60006020820190506149ed60008301846149c9565b92915050565b6149fc816149bc565b8114614a0757600080fd5b50565b600081359050614a19816149f3565b92915050565b60008060408385031215614a3657614a35614776565b5b6000614a4485828601614967565b9250506020614a5585828601614a0a565b9150509250929050565b614a6881614946565b82525050565b6000602082019050614a836000830184614a5f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614ac68261487c565b810181811067ffffffffffffffff82111715614ae557614ae4614a8e565b5b80604052505050565b6000614af861476c565b9050614b048282614abd565b919050565b600063ffffffff82169050919050565b614b2281614b09565b8114614b2d57600080fd5b50565b600081359050614b3f81614b19565b92915050565b600068ffffffffffffffffff82169050919050565b614b6381614b45565b8114614b6e57600080fd5b50565b600081359050614b8081614b5a565b92915050565b600067ffffffffffffffff82169050919050565b614ba381614b86565b8114614bae57600080fd5b50565b600081359050614bc081614b9a565b92915050565b600060608284031215614bdc57614bdb614a89565b5b614be66060614aee565b90506000614bf684828501614b30565b6000830152506020614c0a84828501614b71565b6020830152506040614c1e84828501614bb1565b60408301525092915050565b600060608284031215614c4057614c3f614776565b5b6000614c4e84828501614bc6565b91505092915050565b600080600060608486031215614c7057614c6f614776565b5b6000614c7e86828701614931565b9350506020614c8f86828701614931565b9250506040614ca086828701614967565b9150509250925092565b600060208284031215614cc057614cbf614776565b5b6000614cce84828501614967565b91505092915050565b600060208284031215614ced57614cec614776565b5b6000614cfb84828501614931565b91505092915050565b60008060408385031215614d1b57614d1a614776565b5b6000614d2985828601614967565b9250506020614d3a85828601614967565b9150509250929050565b614d4d81614b09565b82525050565b614d5c81614b45565b82525050565b614d6b81614b86565b82525050565b6000606082019050614d866000830186614d44565b614d936020830185614d53565b614da06040830184614d62565b949350505050565b600060ff82169050919050565b614dbe81614da8565b82525050565b6000602082019050614dd96000830184614db5565b92915050565b614de881614908565b82525050565b6000602082019050614e036000830184614ddf565b92915050565b60008060008060808587031215614e2357614e22614776565b5b6000614e3187828801614967565b9450506020614e4287828801614a0a565b9350506040614e5387828801614967565b9250506060614e6487828801614967565b91505092959194509250565b614e7981614b09565b82525050565b614e8881614b45565b82525050565b614e9781614b86565b82525050565b606082016000820151614eb36000850182614e70565b506020820151614ec66020850182614e7f565b506040820151614ed96040850182614e8e565b50505050565b6000606082019050614ef46000830184614e9d565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b614f1f81614efa565b82525050565b6000602082019050614f3a6000830184614f16565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f8757607f821691505b602082108103614f9a57614f99614f40565b5b50919050565b7f4558504952454400000000000000000000000000000000000000000000000000600082015250565b6000614fd6600783614841565b9150614fe182614fa0565b602082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b6000615042600a83614841565b915061504d8261500c565b602082019050919050565b6000602082019050818103600083015261507181615035565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150b282614946565b91506150bd83614946565b92508282039050818111156150d5576150d4615078565b5b92915050565b60006150e682614946565b91506150f183614946565b925082820190508082111561510957615108615078565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b6000615145600a83614841565b91506151508261510f565b602082019050919050565b6000602082019050818103600083015261517481615138565b9050919050565b600061518682614946565b915061519183614946565b925082820261519f81614946565b915082820484148315176151b6576151b5615078565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151f782614946565b915061520283614946565b925082615212576152116151bd565b5b828204905092915050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b6000615253601183614841565b915061525e8261521d565b602082019050919050565b6000602082019050818103600083015261528281615246565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b60006152bf601283614841565b91506152ca82615289565b602082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b600061535a600d83614841565b915061536582615324565b602082019050919050565b600060208201905081810360008301526153898161534d565b9050919050565b61539981614efa565b81146153a457600080fd5b50565b6000815190506153b681615390565b92915050565b6000602082840312156153d2576153d1614776565b5b60006153e0848285016153a7565b9150509291505056fea264697066735822122061d48fdedb03bbb6777540bb23e934a60aece815f70f2549550b05f804f37d7364736f6c63430008110033
-\ No newline at end of file
+6101006040523480156200001257600080fd5b50604051620060ea380380620060ea833981810160405281019062000038919062000863565b6801000000000000000083600f0b126200005157600080fd5b6200005b62000578565b33600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660069081620000ad919062000b84565b508560079081620000bf919062000b84565b508460ff16608081815250504260038190555060035460a08181525050603c83620000eb919062000c9a565b60c08181525050620001126001620002a96401000000000262002daf176401000000009004565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff1602179055506200016c84620002d06401000000000262002dd5176401000000009004565b600f0b60e081600f0b81525050620001a86000600260009054906101000a9004600f0b6000600162000324640100000000026401000000009004565b90506000819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505062000ce5565b6000677fffffffffffffff821115620002c157600080fd5b6040829060020a029050919050565b60008082600f0b13620002e257600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af6200030f84620003a8640100000000026401000000009004565b600f0b02908060020a82049150509050919050565b6200032e62000578565b6200033862000578565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b60008082600f0b13620003ba57600080fd5b60008083600f0b9050680100000000000000008112620003f6576040819060008212600003808260020a82851804189250505090506040820191505b640100000000811262000425576020819060008212600003808260020a82851804189250505090506020820191505b62010000811262000452576010819060008212600003808260020a82851804189250505090506010820191505b61010081126200047e576008819060008212600003808260020a82851804189250505090506008820191505b60108112620004a9576004819060008212600003808260020a82851804189250505090506004820191505b60048112620004d4576002819060008212600003808260020a82851804189250505090506002820191505b60028112620004e4576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b60008113156200056b578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a828518041892505050905062000511565b5081945050505050919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200061d82620005d2565b810181811067ffffffffffffffff821117156200063f576200063e620005e3565b5b80604052505050565b600062000654620005b4565b905062000662828262000612565b919050565b600067ffffffffffffffff821115620006855762000684620005e3565b5b6200069082620005d2565b9050602081019050919050565b60005b83811015620006bd578082015181840152602081019050620006a0565b60008484015250505050565b6000620006e0620006da8462000667565b62000648565b905082815260208101848484011115620006ff57620006fe620005cd565b5b6200070c8482856200069d565b509392505050565b600082601f8301126200072c576200072b620005c8565b5b81516200073e848260208601620006c9565b91505092915050565b600060ff82169050919050565b6200075f8162000747565b81146200076b57600080fd5b50565b6000815190506200077f8162000754565b92915050565b600081600f0b9050919050565b6200079d8162000785565b8114620007a957600080fd5b50565b600081519050620007bd8162000792565b92915050565b6000819050919050565b620007d881620007c3565b8114620007e457600080fd5b50565b600081519050620007f881620007cd565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082b82620007fe565b9050919050565b6200083d816200081e565b81146200084957600080fd5b50565b6000815190506200085d8162000832565b92915050565b60008060008060008060c08789031215620008835762000882620005be565b5b600087015167ffffffffffffffff811115620008a457620008a3620005c3565b5b620008b289828a0162000714565b965050602087015167ffffffffffffffff811115620008d657620008d5620005c3565b5b620008e489828a0162000714565b9550506040620008f789828a016200076e565b94505060606200090a89828a01620007ac565b93505060806200091d89828a01620007e7565b92505060a06200093089828a016200084c565b9150509295509295509295565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099057607f821691505b602082108103620009a657620009a562000948565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b60006008830262000a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009d1565b62000a1f8683620009d1565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a6262000a5c62000a5684620007c3565b62000a37565b620007c3565b9050919050565b6000819050919050565b62000a7e8362000a41565b62000a9662000a8d8262000a69565b848454620009e1565b825550505050565b600090565b62000aad62000a9e565b62000aba81848462000a73565b505050565b5b8181101562000ae25762000ad660008262000aa3565b60018101905062000ac0565b5050565b601f82111562000b315762000afb81620009ac565b62000b0684620009c1565b8101602085101562000b16578190505b62000b2e62000b2585620009c1565b83018262000abf565b50505b505050565b60008160020a8304905092915050565b600062000b596000198460080262000b36565b1980831691505092915050565b600062000b74838362000b46565b9150826002028217905092915050565b62000b8f826200093d565b67ffffffffffffffff81111562000bab5762000baa620005e3565b5b62000bb7825462000977565b62000bc482828562000ae6565b600060209050601f83116001811462000bfc576000841562000be7578287015190505b62000bf3858262000b66565b86555062000c63565b601f19841662000c0c86620009ac565b60005b8281101562000c365784890151825560018201915060208501945060208101905062000c0f565b8683101562000c56578489015162000c52601f89168262000b46565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca782620007c3565b915062000cb483620007c3565b925082820262000cc481620007c3565b9150828204841483151762000cde5762000cdd62000c6b565b5b5092915050565b60805160a05160c05160e05161538562000d656000396000818161115b0152818161148f015281816123570152612901015260008181611a220152818161231a0152818161285901528181612a9d0152612c85015260008181611a4e01528181612ac901528181612ca60152612ceb015260006114ed01526153856000f3fe608060405234801561001057600080fd5b50600436106103a0576000357c0100000000000000000000000000000000000000000000000000000000900480636a2d094e116101fb578063a457c2d71161012c578063d7a52fa9116100ca578063e69571af11610099578063e69571af14610ba9578063e809529514610bd9578063eda4e6d614610bf7578063f2fde38b14610c15576103a0565b8063d7a52fa914610b0f578063d89135cd14610b2b578063da2824a814610b49578063e54063a614610b79576103a0565b8063b470aade11610106578063b470aade14610a85578063c0ab707714610aa3578063d340ef8a14610ad3578063d5abeb0114610af1576103a0565b8063a457c2d714610a07578063a9059cbb14610a37578063b1cb0db314610a67576103a0565b806379ba5097116101995780638da5cb5b116101735780638da5cb5b146109915780638f0b2d5d146109af5780638f1df6bc146109cb57806395d89b41146109e9576103a0565b806379ba50971461092557806384dde4af1461094357806386fe212d14610961576103a0565b8063731f237c116101d5578063731f237c1461089b57806373f42561146108b95780637445e33a146108d757806374bedb9514610907576103a0565b80636a2d094e1461081f5780636f8b44b01461084f57806370a082311461086b576103a0565b806331333487116102d557806347a505171161027357806358b2833b1161024d57806358b2833b146107835780635ae06f7e146107a15780635f408c04146107d15780636787a9be146107ef576103a0565b806347a50517146106f35780634abfbba21461072357806351b4541c14610753576103a0565b806339509351116102af578063395093511461064557806340452d911461067557806342966c68146106a7578063449a52f8146106c3576103a0565b806331333487146105d9578063313ce5671461060957806331a5995d14610627576103a0565b80631989c6a81161034257806323a859441161031c57806323a859441461051957806323b872dd146105495780632a7aec09146105795780632c1758c1146105a9576103a0565b80631989c6a8146104ad578063213d1e1e146104cb578063229ba197146104fb576103a0565b806309f28f3c1161037e57806309f28f3c1461042357806311c566151461044157806318160ddd1461047157806318cbbcfc1461048f576103a0565b806301ffc9a7146103a557806306fdde03146103d5578063095ea7b3146103f3575b600080fd5b6103bf60048036038101906103ba9190614739565b610c45565b6040516103cc9190614781565b60405180910390f35b6103dd610deb565b6040516103ea919061482c565b60405180910390f35b61040d600480360381019061040891906148e2565b610e79565b60405161041a9190614781565b60405180910390f35b61042b6110b5565b604051610438919061493e565b60405180910390f35b61045b60048036038101906104569190614985565b6110c8565b60405161046891906149d4565b60405180910390f35b610479611118565b60405161048691906149d4565b60405180910390f35b61049761112f565b6040516104a491906149d4565b60405180910390f35b6104b5611134565b6040516104c291906149d4565b60405180910390f35b6104e560048036038101906104e09190614b90565b611140565b6040516104f291906149d4565b60405180910390f35b610503611159565b604051610510919061493e565b60405180910390f35b610533600480360381019061052e9190614b90565b61117d565b6040516105409190614781565b60405180910390f35b610563600480360381019061055e9190614bbd565b6111e5565b6040516105709190614781565b60405180910390f35b610593600480360381019061058e9190614b90565b611403565b6040516105a0919061493e565b60405180910390f35b6105c360048036038101906105be9190614c10565b61143b565b6040516105d09190614781565b60405180910390f35b6105f360048036038101906105ee9190614c3d565b61146e565b60405161060091906149d4565b60405180910390f35b6106116114eb565b60405161061e91906149d4565b60405180910390f35b61062f61150f565b60405161063c91906149d4565b60405180910390f35b61065f600480360381019061065a91906148e2565b611515565b60405161066c9190614781565b60405180910390f35b61068f600480360381019061068a9190614c10565b6116ab565b60405161069e93929190614caa565b60405180910390f35b6106c160048036038101906106bc9190614c10565b61171a565b005b6106dd60048036038101906106d891906148e2565b611856565b6040516106ea9190614781565b60405180910390f35b61070d60048036038101906107089190614ce1565b6119d5565b60405161071a91906149d4565b60405180910390f35b61073d60048036038101906107389190614c10565b611a1e565b60405161074a91906149d4565b60405180910390f35b61076d60048036038101906107689190614c10565b611a7e565b60405161077a91906149d4565b60405180910390f35b61078b611a9f565b60405161079891906149d4565b60405180910390f35b6107bb60048036038101906107b69190614ce1565b611aa5565b6040516107c89190614781565b60405180910390f35b6107d9611baf565b6040516107e69190614d2a565b60405180910390f35b61080960048036038101906108049190614c10565b611c7c565b60405161081691906149d4565b60405180910390f35b61083960048036038101906108349190614c10565b611cbd565b60405161084691906149d4565b60405180910390f35b61086960048036038101906108649190614c10565b611cde565b005b61088560048036038101906108809190614ce1565b611da6565b60405161089291906149d4565b60405180910390f35b6108a3611e10565b6040516108b091906149d4565b60405180910390f35b6108c1611e21565b6040516108ce91906149d4565b60405180910390f35b6108f160048036038101906108ec9190614b90565b611e27565b6040516108fe91906149d4565b60405180910390f35b61090f611e55565b60405161091c91906149d4565b60405180910390f35b61092d611e5b565b60405161093a9190614781565b60405180910390f35b61094b612002565b6040516109589190614d54565b60405180910390f35b61097b60048036038101906109769190614c10565b612028565b60405161098891906149d4565b60405180910390f35b610999612107565b6040516109a69190614d54565b60405180910390f35b6109c960048036038101906109c49190614ce1565b61212d565b005b6109d36121e2565b6040516109e09190614781565b60405180910390f35b6109f16124a3565b6040516109fe919061482c565b60405180910390f35b610a216004803603810190610a1c91906148e2565b612531565b604051610a2e9190614781565b60405180910390f35b610a516004803603810190610a4c91906148e2565b612750565b604051610a5e9190614781565b60405180910390f35b610a6f612851565b604051610a7c91906149d4565b60405180910390f35b610a8d612857565b604051610a9a91906149d4565b60405180910390f35b610abd6004803603810190610ab89190614c10565b61287b565b604051610aca91906149d4565b60405180910390f35b610adb612a02565b604051610ae891906149d4565b60405180910390f35b610af9612a08565b604051610b0691906149d4565b60405180910390f35b610b296004803603810190610b249190614c10565b612a0e565b005b610b33612b0d565b604051610b4091906149d4565b60405180910390f35b610b636004803603810190610b5e9190614ce1565b612b17565b604051610b709190614781565b60405180910390f35b610b936004803603810190610b8e9190614b90565b612beb565b604051610ba091906149d4565b60405180910390f35b610bc36004803603810190610bbe9190614d6f565b612bff565b604051610bd09190614e45565b60405180910390f35b610be1612c7f565b604051610bee9190614e8b565b60405180910390f35b610bff612ce9565b604051610c0c91906149d4565b60405180910390f35b610c2f6004803603810190610c2a9190614ce1565b612d0d565b604051610c3c9190614781565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610c995760019050610de6565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610ceb5760019050610de6565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d3d5760019050610de6565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610d8f5760019050610de6565b6337a47be47c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610de15760019050610de6565b600090505b919050565b60068054610df890614ed5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2490614ed5565b8015610e715780601f10610e4657610100808354040283529160200191610e71565b820191906000526020600020905b815481529060010190602001808311610e5457829003601f168201915b505050505081565b6000806000610e86611baf565b905060028160ff1603610e9e576000925050506110af565b60008160ff161115610ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edc90614f52565b60405180910390fd5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610fae5760008414610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490614fbe565b60405180910390fd5b5b610fb66121e2565b50610fc084611c7c565b915081600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040516110a091906149d4565b60405180910390a36001925050505b92915050565b600260009054906101000a9004600f0b81565b6000806110ef6110d785612daf565b6110ea6110e46001612daf565b86612e17565b612e7e565b90506110fa81612efd565b67ffffffffffffffff168461110f919061500d565b91505092915050565b6000600b5460085461112a919061500d565b905090565b600f81565b60008080549050905090565b6000816020015168ffffffffffffffffff169050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080826000015163ffffffff16111561119a57600090506111e0565b6000826020015168ffffffffffffffffff1611156111bb57600090506111e0565b6000826040015167ffffffffffffffff1611156111db57600090506111e0565b600190505b919050565b6000806000806111f3611baf565b905060028160ff160361120c57600093505050506113fc565b60008160ff161115611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614f52565b60405180910390fd5b61125b6121e2565b5061126585611c7c565b925082600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156112f057600080fd5b82600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461137c919061500d565b9250508190555061138e878785612f32565b91508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516113ed91906149d4565b60405180910390a38193505050505b9392505050565b60008067ffffffffffffffff836040015160070b169050600081600f0b036114325761142f6001612daf565b90505b80915050919050565b6000600f821061144a57600080fd5b6000820361145f57600f601254149050611469565b8160125483161490505b919050565b60008060008061147d86612daf565b925061148885612daf565b91506114b47f000000000000000000000000000000000000000000000000000000000000000083612e7e565b90506114bf81612f57565b90506114cb8382612e7e565b90506114d681612efd565b67ffffffffffffffff16935050505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60125481565b6000806115206121e2565b5061152a83611c7c565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115b89190615041565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161169891906149d4565b60405180910390a3600191505092915050565b600081815481106116bb57600080fd5b906000526020600020016000915090508060000160009054906101000a900463ffffffff16908060000160049054906101000a900468ffffffffffffffffff169080600001600d9054906101000a900467ffffffffffffffff16905083565b6000611724611baf565b60ff161461173157600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661178757600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156117d357600080fd5b60006117de82611c7c565b90506117ea3382612fe4565b5081600b60008282546117fd9190615041565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405161184a91906149d4565b60405180910390a25050565b6000806000611863611baf565b60ff161461187057600080fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f3906150c1565b60405180910390fd5b6119046121e2565b506000601154111561192d57601154836008546119219190615041565b111561192c57600080fd5b5b826008600082825461193f9190615041565b9250508190555061194f83611c7c565b905061195b84826130eb565b508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8856040516119b991906149d4565b60405180910390a36119c96131af565b50600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f000000000000000000000000000000000000000000000000000000000000000082611a4c91906150e1565b7f0000000000000000000000000000000000000000000000000000000000000000611a779190615041565b9050919050565b6000603c8242611a8e919061500d565b611a989190615152565b9050919050565b60035481565b6000611ab4600160ff1661143b565b15611abe57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611b4557503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611b4e57600080fd5b6000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000601060009054906101000a900460ff1615611bcf5760019050611c79565b6000600f5403611be25760009050611c79565b600f544210611c7457611c0f603c600354611bfd9190615152565b600f54611c0a919061500d565b61287b565b506001601060006101000a81548160ff0219169083151502179055507ff80dbaea4785589e52984ca36a31de106adc77759539a5c7d92883bf49692fe942604051611c5a91906149d4565b60405180910390a1611c6a6121e2565b5060029050611c79565b600090505b90565b600080611ca0611c8b84612daf565b600260009054906101000a9004600f0b613373565b9050611cab81612efd565b67ffffffffffffffff16915050919050565b6000603c8242611ccd919061500d565b611cd79190615152565b9050919050565b611ceb600860ff1661143b565b15611cf557600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d4f57600080fd5b611d57611118565b8111611d6257600080fd5b6011547f9722adea12ab7ef86fc45b88f0e0b567639e8dddaae60261e08c03d747fbbfe682604051611d9491906149d4565b60405180910390a28060118190555050565b6000806000806000611dbf611dba876119d5565b612daf565b9350611dcc600354611a7e565b9150611de784600260009054906101000a9004600f0b612e7e565b9250611e05611df584612efd565b67ffffffffffffffff168361146e565b945050505050919050565b6000611e1c600061287b565b905090565b600b5481565b6000806000611e3584611140565b9150611e4084611403565b9050611e4c82826110c8565b92505050919050565b600a5481565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611eb857600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006010821061206d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612064906151cf565b60405180910390fd5b60006012548316146120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab9061523b565b60405180910390fd5b816012600082825417925050819055507fdd5e7cad9599c1dcaa8d5adcd88f157fc5fada62511c0d3edb1bfd3b778acc416012546040516120f591906149d4565b60405180910390a16012549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61213a600260ff1661143b565b1561214457600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461219e57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006121ec614696565b6121f4614696565b6121fc614696565b600080600080600061220c611e10565b506122156133ff565b97506122208861117d565b15612236576000985050505050505050506124a0565b60006009548154811061224c5761224b61525b565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505095506122f988612beb565b94506001856123089190615041565b905061231386611403565b9350603c857f000000000000000000000000000000000000000000000000000000000000000061234391906150e1565b61234d9190615152565b91506123896123847f000000000000000000000000000000000000000000000000000000000000000061237f85612daf565b612e7e565b612f57565b925061239f600084612399611118565b84612bff565b96506000879080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505061245b87613595565b507f55d243082e019fce4009ccea5368b92e436c17586a1e793c7deda16df4e5d6758160405161248b91906149d4565b60405180910390a16001985050505050505050505b90565b600780546124b090614ed5565b80601f01602080910402602001604051908101604052809291908181526020018280546124dc90614ed5565b80156125295780601f106124fe57610100808354040283529160200191612529565b820191906000526020600020905b81548152906001019060200180831161250c57829003601f168201915b505050505081565b60008061253d83611c7c565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156125c857600080fd5b6125d06121e2565b5080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265d919061500d565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161273d91906149d4565b60405180910390a3600191505092915050565b60008060008061275e611baf565b905060028160ff1603612777576000935050505061284b565b60008160ff1611156127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614f52565b60405180910390fd5b6127c66121e2565b506127d085611c7c565b92506127dd338785612f32565b91508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161283c91906149d4565b60405180910390a38193505050505b92915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806000806000601060009054906101000a900460ff16156128a55760009450505050506129fd565b6128b0600354611a7e565b9250600083036128c75760009450505050506129fd565b600260009054906101000a9004600f0b90506000861180156128e857508286105b156128f1578592505b6128fa83612daf565b91506129267f000000000000000000000000000000000000000000000000000000000000000083612e7e565b935061293184612f57565b935061294c600260009054906101000a9004600f0b85612e7e565b600260006101000a8154816fffffffffffffffffffffffffffffffff0219169083600f0b6fffffffffffffffffffffffffffffffff160217905550603c8361299491906150e1565b6003546129a19190615041565b60038190555080600f0b836003547f1c9c74563c32efd114cb36fb5e432d9386c8254d08456614804a33a3088ab736600260009054906101000a9004600f0b6040516129ed919061493e565b60405180910390a4829450505050505b919050565b60095481565b60115481565b6000612a1d600460ff1661143b565b15612a2757600080fd5b601060009054906101000a900460ff1615612a4157600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a9b57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000082612ac791906150e1565b7f0000000000000000000000000000000000000000000000000000000000000000612af29190615041565b9050600f548111612b0257600080fd5b80600f819055505050565b6000600b54905090565b6000612b26600160ff1661143b565b15612b3057600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b8a57600080fd5b6001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b6000816000015163ffffffff169050919050565b612c07614696565b612c0f614696565b82816000019063ffffffff16908163ffffffff168152505083816020019068ffffffffffffffffff16908168ffffffffffffffffff168152505067ffffffffffffffff8516816040019067ffffffffffffffff16908167ffffffffffffffff168152505080915050949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000042612cd0919061500d565b612cda9190615152565b612ce49190615041565b905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d6957600080fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b6000677fffffffffffffff821115612dc657600080fd5b6040829060020a029050919050565b60008082600f0b13612de657600080fd5b60806fb17217f7d1cf79abc9e3b39803f2f6af612e02846136b4565b600f0b02908060020a82049150509050919050565b60008082600f0b84600f0b0390507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612e6b57506f7fffffffffffffffffffffffffffffff600f0b8113155b612e7457600080fd5b8091505092915050565b600080604083600f0b85600f0b029060008212600003808260020a82851804189250505090507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b8112158015612eea57506f7fffffffffffffffffffffffffffffff600f0b8113155b612ef357600080fd5b8091505092915050565b60008082600f0b1215612f0f57600080fd5b604082600f0b9060008212600003808260020a8285180418925050509050919050565b600080612f3f8584612fe4565b50612f4a84846130eb565b5060019150509392505050565b60006840000000000000000082600f0b12612f7157600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b1215612fa55760009050612fdf565b612fdc6080700171547652b82fe1777d0ffda0d23a7d1284600f0b029060008212600003808260020a82851804189250505061387a565b90505b919050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361304057600093505050506130e5565b613049866119d5565b92508483101561308e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613085906152d6565b60405180910390fd5b848361309a919061500d565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b600080600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000850361314757600093505050506131a9565b613150866119d5565b9250848361315e9190615041565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600193505050505b92915050565b60006131b9614696565b60006131c3611118565b9050600060016000805490506131d9919061500d565b815481106131ea576131e961525b565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681525050915080826020019068ffffffffffffffffff16908168ffffffffffffffffff168152505081600060016000805490506132c5919061500d565b815481106132d6576132d561525b565b5b9060005260206000200160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548168ffffffffffffffffff021916908368ffffffffffffffffff160217905550604082015181600001600d6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060019250505090565b60008082600f0b0361338457600080fd5b600082600f0b604085600f0b9060020a02816133a3576133a2615123565b5b0590507fffffffffffffffffffffffffffffffff80000000000000000000000000000000600f0b81121580156133ec57506f7fffffffffffffffffffffffffffffff600f0b8113155b6133f557600080fd5b8091505092915050565b613407614696565b61340f614696565b613417614696565b6000806009548154811061342e5761342d61525b565b5b906000526020600020016040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900468ffffffffffffffffff1668ffffffffffffffffff1668ffffffffffffffffff16815260200160008201600d9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505092503073ffffffffffffffffffffffffffffffffffffffff1663e80952956040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381865afa158015613539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355d9190615322565b6fffffffffffffffffffffffffffffffff16905061357a83612beb565b811161358b57819350505050613592565b8293505050505b90565b60008060006135a384611e27565b6135ab611118565b6135b5919061500d565b9150600a546135c383611c7c565b6135cd919061500d565b90506135fb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826130eb565b50836000015163ffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f9a2a887706623ad3ff7fc85652deeceabe9fe1e00466c597972079ee91ea40d38460405161366f91906149d4565b60405180910390a360016009600082825461368a9190615041565b9250508190555080600a60008282546136a39190615041565b925050819055508192505050919050565b60008082600f0b136136c557600080fd5b60008083600f0b9050680100000000000000008112613700576040819060008212600003808260020a82851804189250505090506040820191505b640100000000811261372e576020819060008212600003808260020a82851804189250505090506020820191505b62010000811261375a576010819060008212600003808260020a82851804189250505090506010820191505b6101008112613785576008819060008212600003808260020a82851804189250505090506008820191505b601081126137af576004819060008212600003808260020a82851804189250505090506004820191505b600481126137d9576002819060008212600003808260020a82851804189250505090506002820191505b600281126137e8576001820191505b600060408084039060020a029050600083607f0386600f0b9060020a029050600067800000000000000090505b600081131561386d578182029150600060ff83908060020a8204915050905080607f0183908060020a8204915050925080820284019350506001819060008212600003808260020a8285180418925050509050613815565b5081945050505050919050565b60006840000000000000000082600f0b1261389457600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000082600f0b12156138c85760009050614691565b60006f80000000000000000000000000000000905060006780000000000000008416600f0b131561391657608070016a09e667f3bcc908b2fb1366ea957d3e8202908060020a820491505090505b60006740000000000000008416600f0b131561394f5760807001306fe0a31b7152de8d5a46305c85edec8202908060020a820491505090505b60006720000000000000008416600f0b13156139885760807001172b83c7d517adcdf7c8c50eb14a791f8202908060020a820491505090505b60006710000000000000008416600f0b13156139c157608070010b5586cf9890f6298b92b71842a983638202908060020a820491505090505b60006708000000000000008416600f0b13156139fa5760807001059b0d31585743ae7c548eb68ca417fd8202908060020a820491505090505b60006704000000000000008416600f0b1315613a33576080700102c9a3e778060ee6f7caca4f7a29bde88202908060020a820491505090505b60006702000000000000008416600f0b1315613a6c57608070010163da9fb33356d84a66ae336dcdfa3f8202908060020a820491505090505b60006701000000000000008416600f0b1315613aa5576080700100b1afa5abcbed6129ab13ec11dc95438202908060020a820491505090505b600066800000000000008416600f0b1315613add57608070010058c86da1c09ea1ff19d294cf2f679b8202908060020a820491505090505b600066400000000000008416600f0b1315613b155760807001002c605e2e8cec506d21bfc89a23a00f8202908060020a820491505090505b600066200000000000008416600f0b1315613b4d576080700100162f3904051fa128bca9c55c31e5df8202908060020a820491505090505b600066100000000000008416600f0b1315613b855760807001000b175effdc76ba38e31671ca9397258202908060020a820491505090505b600066080000000000008416600f0b1315613bbd576080700100058ba01fb9f96d6cacd4b180917c3d8202908060020a820491505090505b600066040000000000008416600f0b1315613bf557608070010002c5cc37da9491d0985c348c68e7b38202908060020a820491505090505b600066020000000000008416600f0b1315613c2d5760807001000162e525ee054754457d59952920268202908060020a820491505090505b600066010000000000008416600f0b1315613c6557608070010000b17255775c040618bf4a4ade83fc8202908060020a820491505090505b6000658000000000008416600f0b1315613c9c5760807001000058b91b5bc9ae2eed81e9b7d4cfab8202908060020a820491505090505b6000654000000000008416600f0b1315613cd3576080700100002c5c89d5ec6ca4d7c8acc017b7c98202908060020a820491505090505b6000652000000000008416600f0b1315613d0a57608070010000162e43f4f831060e02d839a9d16d8202908060020a820491505090505b6000651000000000008416600f0b1315613d41576080700100000b1721bcfc99d9f890ea069117638202908060020a820491505090505b6000650800000000008416600f0b1315613d7857608070010000058b90cf1e6d97f9ca14dbcc16288202908060020a820491505090505b6000650400000000008416600f0b1315613daf5760807001000002c5c863b73f016468f6bac5ca2b8202908060020a820491505090505b6000650200000000008416600f0b1315613de6576080700100000162e430e5a18f6119e3c02282a58202908060020a820491505090505b6000650100000000008416600f0b1315613e1d5760807001000000b1721835514b86e6d96efd1bfe8202908060020a820491505090505b60006480000000008416600f0b1315613e53576080700100000058b90c0b48c6be5df846c5b2ef8202908060020a820491505090505b60006440000000008416600f0b1315613e8957608070010000002c5c8601cc6b9e94213c72737a8202908060020a820491505090505b60006420000000008416600f0b1315613ebf5760807001000000162e42fff037df38aa2b219f068202908060020a820491505090505b60006410000000008416600f0b1315613ef557608070010000000b17217fba9c739aa5819f44f98202908060020a820491505090505b60006408000000008416600f0b1315613f2b5760807001000000058b90bfcdee5acd3c1cedc8238202908060020a820491505090505b60006404000000008416600f0b1315613f61576080700100000002c5c85fe31f35a6a30da1be508202908060020a820491505090505b60006402000000008416600f0b1315613f9757608070010000000162e42ff0999ce3541b9fffcf8202908060020a820491505090505b60006401000000008416600f0b1315613fcd576080700100000000b17217f80f4ef5aadda455548202908060020a820491505090505b600063800000008416600f0b131561400257608070010000000058b90bfbf8479bd5a81b51ad8202908060020a820491505090505b600063400000008416600f0b13156140375760807001000000002c5c85fdf84bd62ae30a74cc8202908060020a820491505090505b600063200000008416600f0b131561406c576080700100000000162e42fefb2fed257559bdaa8202908060020a820491505090505b600063100000008416600f0b13156140a15760807001000000000b17217f7d5a7716bba4a9ae8202908060020a820491505090505b600063080000008416600f0b13156140d6576080700100000000058b90bfbe9ddbac5e109cce8202908060020a820491505090505b600063040000008416600f0b131561410b57608070010000000002c5c85fdf4b15de6f17eb0d8202908060020a820491505090505b600063020000008416600f0b13156141405760807001000000000162e42fefa494f1478fde058202908060020a820491505090505b600063010000008416600f0b131561417557608070010000000000b17217f7d20cf927c8e94c8202908060020a820491505090505b6000628000008416600f0b13156141a95760807001000000000058b90bfbe8f71cb4e4b33d8202908060020a820491505090505b6000624000008416600f0b13156141dd576080700100000000002c5c85fdf477b662b269458202908060020a820491505090505b6000622000008416600f0b131561421157608070010000000000162e42fefa3ae53369388c8202908060020a820491505090505b6000621000008416600f0b1315614245576080700100000000000b17217f7d1d351a389d408202908060020a820491505090505b6000620800008416600f0b131561427957608070010000000000058b90bfbe8e8b2d3d4ede8202908060020a820491505090505b6000620400008416600f0b13156142ad5760807001000000000002c5c85fdf4741bea6e77e8202908060020a820491505090505b6000620200008416600f0b13156142e1576080700100000000000162e42fefa39fe95583c28202908060020a820491505090505b6000620100008416600f0b13156143155760807001000000000000b17217f7d1cfb72b45e18202908060020a820491505090505b60006180008416600f0b1315614348576080700100000000000058b90bfbe8e7cc35c3f08202908060020a820491505090505b60006140008416600f0b131561437b57608070010000000000002c5c85fdf473e242ea388202908060020a820491505090505b60006120008416600f0b13156143ae5760807001000000000000162e42fefa39f02b772c8202908060020a820491505090505b60006110008416600f0b13156143e157608070010000000000000b17217f7d1cf7d83c1a8202908060020a820491505090505b60006108008416600f0b13156144145760807001000000000000058b90bfbe8e7bdcbe2e8202908060020a820491505090505b60006104008416600f0b1315614447576080700100000000000002c5c85fdf473dea871f8202908060020a820491505090505b60006102008416600f0b131561447a57608070010000000000000162e42fefa39ef44d918202908060020a820491505090505b60006101008416600f0b13156144ad576080700100000000000000b17217f7d1cf79e9498202908060020a820491505090505b600060808416600f0b13156144df57608070010000000000000058b90bfbe8e7bce5448202908060020a820491505090505b600060408416600f0b13156145115760807001000000000000002c5c85fdf473de6eca8202908060020a820491505090505b600060208416600f0b1315614543576080700100000000000000162e42fefa39ef366f8202908060020a820491505090505b600060108416600f0b13156145755760807001000000000000000b17217f7d1cf79afa8202908060020a820491505090505b600060088416600f0b13156145a7576080700100000000000000058b90bfbe8e7bcd6d8202908060020a820491505090505b600060048416600f0b13156145d957608070010000000000000002c5c85fdf473de6b28202908060020a820491505090505b600060028416600f0b131561460b5760807001000000000000000162e42fefa39ef3588202908060020a820491505090505b600060018416600f0b131561463d57608070010000000000000000b17217f7d1cf79ab8202908060020a820491505090505b604083600f0b9060008212600003808260020a828518041892505050603f03600f0b81908060020a820491505090506f7fffffffffffffffffffffffffffffff600f0b81111561468c57600080fd5b809150505b919050565b6040518060600160405280600063ffffffff168152602001600068ffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614716816146e1565b811461472157600080fd5b50565b6000813590506147338161470d565b92915050565b60006020828403121561474f5761474e6146dc565b5b600061475d84828501614724565b91505092915050565b60008115159050919050565b61477b81614766565b82525050565b60006020820190506147966000830184614772565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147d65780820151818401526020810190506147bb565b60008484015250505050565b6000601f19601f8301169050919050565b60006147fe8261479c565b61480881856147a7565b93506148188185602086016147b8565b614821816147e2565b840191505092915050565b6000602082019050818103600083015261484681846147f3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148798261484e565b9050919050565b6148898161486e565b811461489457600080fd5b50565b6000813590506148a681614880565b92915050565b6000819050919050565b6148bf816148ac565b81146148ca57600080fd5b50565b6000813590506148dc816148b6565b92915050565b600080604083850312156148f9576148f86146dc565b5b600061490785828601614897565b9250506020614918858286016148cd565b9150509250929050565b600081600f0b9050919050565b61493881614922565b82525050565b6000602082019050614953600083018461492f565b92915050565b61496281614922565b811461496d57600080fd5b50565b60008135905061497f81614959565b92915050565b6000806040838503121561499c5761499b6146dc565b5b60006149aa858286016148cd565b92505060206149bb85828601614970565b9150509250929050565b6149ce816148ac565b82525050565b60006020820190506149e960008301846149c5565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a2c826147e2565b810181811067ffffffffffffffff82111715614a4b57614a4a6149f4565b5b80604052505050565b6000614a5e6146d2565b9050614a6a8282614a23565b919050565b600063ffffffff82169050919050565b614a8881614a6f565b8114614a9357600080fd5b50565b600081359050614aa581614a7f565b92915050565b600068ffffffffffffffffff82169050919050565b614ac981614aab565b8114614ad457600080fd5b50565b600081359050614ae681614ac0565b92915050565b600067ffffffffffffffff82169050919050565b614b0981614aec565b8114614b1457600080fd5b50565b600081359050614b2681614b00565b92915050565b600060608284031215614b4257614b416149ef565b5b614b4c6060614a54565b90506000614b5c84828501614a96565b6000830152506020614b7084828501614ad7565b6020830152506040614b8484828501614b17565b60408301525092915050565b600060608284031215614ba657614ba56146dc565b5b6000614bb484828501614b2c565b91505092915050565b600080600060608486031215614bd657614bd56146dc565b5b6000614be486828701614897565b9350506020614bf586828701614897565b9250506040614c06868287016148cd565b9150509250925092565b600060208284031215614c2657614c256146dc565b5b6000614c34848285016148cd565b91505092915050565b60008060408385031215614c5457614c536146dc565b5b6000614c62858286016148cd565b9250506020614c73858286016148cd565b9150509250929050565b614c8681614a6f565b82525050565b614c9581614aab565b82525050565b614ca481614aec565b82525050565b6000606082019050614cbf6000830186614c7d565b614ccc6020830185614c8c565b614cd96040830184614c9b565b949350505050565b600060208284031215614cf757614cf66146dc565b5b6000614d0584828501614897565b91505092915050565b600060ff82169050919050565b614d2481614d0e565b82525050565b6000602082019050614d3f6000830184614d1b565b92915050565b614d4e8161486e565b82525050565b6000602082019050614d696000830184614d45565b92915050565b60008060008060808587031215614d8957614d886146dc565b5b6000614d97878288016148cd565b9450506020614da887828801614970565b9350506040614db9878288016148cd565b9250506060614dca878288016148cd565b91505092959194509250565b614ddf81614a6f565b82525050565b614dee81614aab565b82525050565b614dfd81614aec565b82525050565b606082016000820151614e196000850182614dd6565b506020820151614e2c6020850182614de5565b506040820151614e3f6040850182614df4565b50505050565b6000606082019050614e5a6000830184614e03565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b614e8581614e60565b82525050565b6000602082019050614ea06000830184614e7c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614eed57607f821691505b602082108103614f0057614eff614ea6565b5b50919050565b7f4558504952454400000000000000000000000000000000000000000000000000600082015250565b6000614f3c6007836147a7565b9150614f4782614f06565b602082019050919050565b60006020820190508181036000830152614f6b81614f2f565b9050919050565b7f5a45524f5f464952535400000000000000000000000000000000000000000000600082015250565b6000614fa8600a836147a7565b9150614fb382614f72565b602082019050919050565b60006020820190508181036000830152614fd781614f9b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000615018826148ac565b9150615023836148ac565b925082820390508181111561503b5761503a614fde565b5b92915050565b600061504c826148ac565b9150615057836148ac565b925082820190508082111561506f5761506e614fde565b5b92915050565b7f4552525f41434345535300000000000000000000000000000000000000000000600082015250565b60006150ab600a836147a7565b91506150b682615075565b602082019050919050565b600060208201905081810360008301526150da8161509e565b9050919050565b60006150ec826148ac565b91506150f7836148ac565b9250828202615105816148ac565b9150828204841483151761511c5761511b614fde565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061515d826148ac565b9150615168836148ac565b92508261517857615177615123565b5b828204905092915050565b7f4552525f494e56414c49445f5354415445000000000000000000000000000000600082015250565b60006151b96011836147a7565b91506151c482615183565b602082019050919050565b600060208201905081810360008301526151e8816151ac565b9050919050565b7f4552525f414c52454144595f4c4f434b45440000000000000000000000000000600082015250565b60006152256012836147a7565b9150615230826151ef565b602082019050919050565b6000602082019050818103600083015261525481615218565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552525f4f5645525350454e4400000000000000000000000000000000000000600082015250565b60006152c0600d836147a7565b91506152cb8261528a565b602082019050919050565b600060208201905081810360008301526152ef816152b3565b9050919050565b6152ff81614e60565b811461530a57600080fd5b50565b60008151905061531c816152f6565b92915050565b600060208284031215615338576153376146dc565b5b60006153468482850161530d565b9150509291505056fea2646970667358221220c1f9d7d0a78f33fa80a4cedd3716f7ce66fd86bb2bab9cbeea3a9c3110f2399e64736f6c63430008110033
+\ No newline at end of file
diff --git a/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json b/python/erc20_demurrage_token/data/DemurrageTokenSingleNocap.json
@@ -1 +1 @@
-[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"int128","name":"_taxLevel","type":"int128"},{"internalType":"uint256","name":"_periodMinutes","type":"uint256"},{"internalType":"address","name":"_defaultSinkAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"Cap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int128","name":"_foo","type":"int128"},{"indexed":true,"internalType":"uint256","name":"_bar","type":"uint256"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_periodCount","type":"uint256"},{"indexed":true,"internalType":"int128","name":"_oldAmount","type":"int128"},{"indexed":false,"internalType":"int128","name":"_newAmount","type":"int128"}],"name":"Decayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"Period","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyExpiry","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"baseBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"decayBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"demurrageAmount","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"demurrageCycles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"int128","name":"_demurrageAmount","type":"int128"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastTimestamp","type":"uint256"}],"name":"getMinutesDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodCount","type":"uint256"}],"name":"getPeriodTimeDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"isEmptyRedistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redistributions","outputs":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"seal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirePeriod","type":"uint256"}],"name":"setExpirePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"toBaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_participants","type":"uint256"},{"internalType":"int128","name":"_demurrageModifier","type":"int128"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
+[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"int128","name":"_taxLevel","type":"int128"},{"internalType":"uint256","name":"_periodMinutes","type":"uint256"},{"internalType":"address","name":"_defaultSinkAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_oldCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newCap","type":"uint256"}],"name":"Cap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int128","name":"_foo","type":"int128"},{"indexed":true,"internalType":"uint256","name":"_bar","type":"uint256"}],"name":"Debug","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_periodCount","type":"uint256"},{"indexed":true,"internalType":"int128","name":"_oldAmount","type":"int128"},{"indexed":false,"internalType":"int128","name":"_newAmount","type":"int128"}],"name":"Decayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"Expired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_period","type":"uint256"}],"name":"Period","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"uint256","name":"_period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Redistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_sealState","type":"uint256"}],"name":"SealStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"actualPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"addWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyDemurrage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rounds","type":"uint256"}],"name":"applyDemurrageLimited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyExpiry","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"baseBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"decayBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"deleteWriter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"demurrageAmount","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"demurrageCycles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"demurrageTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"int128","name":"_demurrageAmount","type":"int128"}],"name":"getDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"getDistributionFromRedistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastTimestamp","type":"uint256"}],"name":"getMinutesDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periodCount","type":"uint256"}],"name":"getPeriodTimeDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"isEmptyRedistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"isSealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redistributionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redistributions","outputs":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"seal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sealState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expirePeriod","type":"uint256"}],"name":"setExpirePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sinkAddress","type":"address"}],"name":"setSinkAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_sum","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxLevel","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"toBaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_participants","type":"uint256"},{"internalType":"int128","name":"_demurrageModifier","type":"int128"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"toRedistribution","outputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionDemurrageModifier","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"period","type":"uint32"},{"internalType":"uint72","name":"value","type":"uint72"},{"internalType":"uint64","name":"demurrage","type":"uint64"}],"internalType":"struct DemurrageTokenSingleNocap.redistributionItem","name":"_redistribution","type":"tuple"}],"name":"toRedistributionSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSink","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
diff --git a/python/erc20_demurrage_token/token.py b/python/erc20_demurrage_token/token.py
@@ -146,9 +146,14 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract):
return tx
+ # backwards compatibility
def add_minter(self, contract_address, sender_address, address, tx_format=TxFormat.JSONRPC):
+ return self.add_writer(contract_address, sender_address, address, tx_format=tx_format)
+
+
+ def add_writer(self, contract_address, sender_address, address, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
- enc.method('addMinter')
+ enc.method('addWriter')
enc.typ(ABIContractType.ADDRESS)
enc.address(address)
data = enc.get()
@@ -169,9 +174,15 @@ class DemurrageToken(ERC20, SealedContract, ExpiryContract):
tx = self.finalize(tx, tx_format)
return tx
+
+ # backwards compatibility
def remove_minter(self, contract_address, sender_address, address, tx_format=TxFormat.JSONRPC):
+ return self.delete_writer(contract_address, sender_address, address, tx_format=tx_format)
+
+
+ def delete_writer(self, contract_address, sender_address, address, tx_format=TxFormat.JSONRPC):
enc = ABIContractEncoder()
- enc.method('removeMinter')
+ enc.method('deleteWriter')
enc.typ(ABIContractType.ADDRESS)
enc.address(address)
data = enc.get()
diff --git a/python/erc20_demurrage_token/unittest/base.py b/python/erc20_demurrage_token/unittest/base.py
@@ -77,6 +77,12 @@ class TestTokenDeploy:
r = rpc.do(o)
self.start_time = r['timestamp']
+ (tx_hash, o) = interface.add_writer(self.address, deployer_address, deployer_address)
+ r = rpc.do(o)
+ o = receipt(tx_hash)
+ r = rpc.do(o)
+ assert r['status'] == 1
+
return self.address
diff --git a/python/tests/test_amounts.py b/python/tests/test_amounts.py
@@ -27,6 +27,9 @@ class TestAmounts(TestDemurrageDefault):
c = DemurrageToken(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
(tx_hash, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], 1000)
r = self.rpc.do(o)
+ o = receipt(tx_hash)
+ r = self.rpc.do(o)
+ self.assertEqual(r['status'], 1)
self.backend.time_travel(self.start_time + self.period_seconds)
diff --git a/solidity/DemurrageTokenSingleNocap.sol b/solidity/DemurrageTokenSingleNocap.sol
@@ -138,7 +138,6 @@ contract DemurrageTokenSingleNocap {
// ACL setup
owner = msg.sender;
- // minter[owner] = true;
// ERC20 setup
name = _name;
@@ -222,26 +221,20 @@ contract DemurrageTokenSingleNocap {
}
// Given address will be allowed to call the mintTo() function
- function addMinter(address _minter) public returns (bool) {
+ function addWriter(address _minter) public returns (bool) {
require(!isSealed(MINTER_STATE));
require(msg.sender == owner);
minter[_minter] = true;
return true;
}
- function addWriter(address _minter) public returns (bool) {
- return addMinter(_minter);
- }
// Given address will no longer be allowed to call the mintTo() function
- function removeMinter(address _minter) public returns (bool) {
+ function deleteWriter(address _minter) public returns (bool) {
require(!isSealed(MINTER_STATE));
require(msg.sender == owner || _minter == msg.sender);
minter[_minter] = false;
return true;
}
- function deleteWriter(address _minter) public returns (bool) {
- return removeMinter(_minter);
- }
/// Implements ERC20
function balanceOf(address _account) public view returns (uint256) {